From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH v10 3/8] drm/i915/pmu: Expose a PMU interface for perf queries Date: Wed, 20 Sep 2017 17:02:14 +0100 Message-ID: <20170920160214.19586-1-tvrtko.ursulin@linux.intel.com> References: <20170918113814.2591-4-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-x22e.google.com (mail-wr0-x22e.google.com [IPv6:2a00:1450:400c:c0c::22e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1E98589D64 for ; Wed, 20 Sep 2017 16:02:24 +0000 (UTC) Received: by mail-wr0-x22e.google.com with SMTP id a43so2572226wrc.0 for ; Wed, 20 Sep 2017 09:02:24 -0700 (PDT) In-Reply-To: <20170918113814.2591-4-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 Cc: Peter Zijlstra List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkZyb206IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpGcm9tOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpGcm9tOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0 cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgoKVGhlIGZpcnN0IGdvYWwgaXMgdG8gYmUgYWJsZSB0 byBtZWFzdXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1c3luZXNzCndpdGhvdXQgaGF2aW5n IHRvIHBvbGwgcmVnaXN0ZXJzIGZyb20gdXNlcnNwYWNlLiAoV2hpY2ggbm90IG9ubHkgaW5jdXJz CmhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGluZGVmaW5pdGVseSwgcGVydHVyYmluZyB0aGUg c3lzdGVtLCBidXQgYWxzbwpydW5zIHRoZSByaXNrIG9mIGhhbmdpbmcgdGhlIG1hY2hpbmUuKSBB cyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNlIHRoZQpwZXJmIGV2ZW50IGNvdW50ZXIgaW50ZXJm YWNlIHRvIHNhbXBsZSB0aGUgcmluZyByZWdpc3RlcnMgcGVyaW9kaWNhbGx5CmFuZCBzZW5kIHRo b3NlIHJlc3VsdHMgdG8gdXNlcnNwYWNlLgoKVG8gYmUgYWJsZSB0byBkbyBzbywgd2UgbmVlZCB0 byBleHBvcnQgdGhlIHR3byBzeW1ib2xzIGZyb20Ka2VybmVsL2V2ZW50cy9jb3JlLmMgdG8gcmVn aXN0ZXIgYW5kIHVucmVnaXN0ZXIgYSBQTVUgZGV2aWNlLgoKdjEtdjIgKENocmlzIFdpbHNvbik6 Cgp2MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4KCnYzOiAoVHZy dGtvIFVyc3VsaW4pCiAqIERlY291cGxlIHVBUEkgZnJvbSBpOTE1IGVuZ2luZSBpZHMuCiAqIENv bXBsZXRlIHVBUEkgZGVmaW5lcy4KICogUmVmYWN0b3Igc29tZSBjb2RlIHRvIGhlbHBlcnMgZm9y IGNsYXJpdHkuCiAqIFNraXAgc2FtcGxpbmcgZGlzYWJsZWQgZW5naW5lcy4KICogRXhwb3NlIGNv dW50ZXJzIGluIHN5c2ZzLgogKiBQYXNzIGluIGZha2UgcmVncyB0byBhdm9pZCBudWxsIHB0ciBk ZXJlZiBpbiBwZXJmIGNvcmUuCiAqIENvbnZlcnQgdG8gY2xhc3MvaW5zdGFuY2UgdUFQSS4KICog VXNlIHNoYXJlZCBkcml2ZXIgY29kZSBmb3IgcmM2IHJlc2lkZW5jeSwgcG93ZXIgYW5kIGZyZXF1 ZW5jeS4KCnY0OiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmVnaXN0ZXIgUE1VIHdpdGggLnRhc2tf Y3R4X25yPXBlcmZfaW52YWxpZF9jb250ZXh0CiAqIEV4cG9zZSBjcHVtYXNrIGZvciB0aGUgUE1V IHdpdGggdGhlIHNpbmdsZSBDUFUgaW4gdGhlIG1hc2sKICogUHJvcGVybHkgc3VwcG9ydCBwbXUt PnN0b3AoKTogaXQgc2hvdWxkIGNhbGwgcG11LT5yZWFkKCkKICogUHJvcGVybHkgc3VwcG9ydCBw bXUtPmRlbCgpOiBpdCBzaG91bGQgY2FsbCBzdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSkKICog SW50cm9kdWNlIHJlZmNvdW50aW5nIG9mIGV2ZW50IHN1YnNjcmlwdGlvbnMuCiAqIE1ha2UgcG11 LmJ1c3lfc3RhdHMgYSByZWZjb3VudGVyIHRvIGF2b2lkIGJ1c3kgc3RhdHMgZ29pbmcgYXdheQog ICB3aXRoIHNvbWUgZGVsZXRlZCBldmVudC4KICogRXhwb3NlIGNwdW1hc2sgZm9yIGk5MTUgUE1V IHRvIGF2b2lkIG11bHRpcGxlIGV2ZW50cyBjcmVhdGlvbiBvZgogICB0aGUgc2FtZSB0eXBlIGZv bGxvd2VkIGJ5IGNvdW50ZXIgYWdncmVnYXRpb24gYnkgcGVyZi1zdGF0LgogKiBUcmFjayBDUFVz IGdldHRpbmcgb25saW5lL29mZmxpbmUgdG8gbWlncmF0ZSBwZXJmIGNvbnRleHQuIElmIChsaWtl bHkpCiAgIGNwdW1hc2sgd2lsbCBpbml0aWFsbHkgc2V0IENQVTAsIENPTkZJR19CT09UUEFSQU1f SE9UUExVR19DUFUwIHdpbGwgYmUKICAgbmVlZGVkIHRvIHNlZSBlZmZlY3Qgb2YgQ1BVIHN0YXR1 cyB0cmFja2luZy4KICogRW5kIHJlc3VsdCBpcyB0aGF0IG9ubHkgZ2xvYmFsIGV2ZW50cyBhcmUg c3VwcG9ydGVkIGFuZCBwZXJmIHN0YXQKICAgd29ya3MgY29ycmVjdGx5LgogKiBEZW55IHBlcmYg ZHJpdmVyIGxldmVsIHNhbXBsaW5nIC0gaXQgaXMgcHJvaGliaXRlZCBmb3IgdW5jb3JlIFBNVS4K CnY1OiAoVHZydGtvIFVyc3VsaW4pCgogKiBEb24ndCBoYXJkY29kZSBudW1iZXIgb2YgZW5naW5l IHNhbXBsZXJzLgogKiBSZXdyaXRlIGV2ZW50IHJlZi1jb3VudGluZyBmb3IgY29ycmVjdG5lc3Mg YW5kIHNpbXBsaWNpdHkuCiAqIFN0b3JlIGluaXRpYWwgY291bnRlciB2YWx1ZSB3aGVuIHN0YXJ0 aW5nIGFscmVhZHkgZW5hYmxlZCBldmVudHMKICAgdG8gY29ycmVjdGx5IHJlcG9ydCB2YWx1ZXMg dG8gYWxsIGxpc3RlbmVycy4KICogRml4IFJDNiByZXNpZGVuY3kgcmVhZG91dC4KICogQ29tbWVu dHMsIEdQTCBoZWFkZXIuCgp2NjoKICogQWRkIG1pc3NpbmcgZW50cnkgdG8gdjQgY2hhbmdlbG9n LgogKiBGaXggYWNjb3VudGluZyBpbiBDUFUgaG90cGx1ZyBjYXNlIGJ5IGNvcHlpbmcgdGhlIGFw cHJvYWNoIGZyb20KICAgYXJjaC94ODYvZXZlbnRzL2ludGVsL2NzdGF0ZS5jLiAoRG1pdHJ5IFJv Z296aGtpbikKCnY3OgogKiBMb2cgZmFpbHVyZSBtZXNzYWdlIG9ubHkgb24gZmFpbHVyZS4KICog UmVtb3ZlIENQVSBob3RwbHVnIG5vdGlmaWNhdGlvbiBzdGF0ZSBvbiB1bnJlZ2lzdGVyLgoKdjg6 CiAqIEZpeCBlcnJvciB1bndpbmQgb24gZmFpbGVkIHJlZ2lzdHJhdGlvbi4KICogQ2hlY2twYXRj aCBjbGVhbnVwLgoKdjk6CiAqIERyb3AgdGhlIGVuZXJneSBtZXRyaWMsIGl0IGlzIGF2YWlsYWJs ZSB2aWEgaW50ZWxfcmFwbF9wZXJmLgogICAoVmlsbGUgU3lyasOkbMOkKQogKiBVc2UgSEFTX1JD NihwKS4gKENocmlzIFdpbHNvbikKICogSGFuZGxlIHVuc3VwcG9ydGVkIG5vbi1lbmdpbmUgZXZl bnRzLiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmViYXNlIGZvciBpbnRlbF9yYzZfcmVzaWRlbmN5 X25zIG5lZWRpbmcgY2FsbGVyIG1hbmFnZWQKICAgcnVudGltZSBwbS4KICogRHJvcCBIQVNfUkM2 IGNoZWNrcyBmcm9tIHRoZSByZWFkIGNhbGxiYWNrIHNpbmNlIGNyZWF0aW5nIHRob3NlCiAgIGV2 ZW50cyB3aWxsIGJlIHJlamVjdGVkIGF0IGluaXQgdGltZSBhbHJlYWR5LgogKiBBZGQgY291bnRl ciB1bml0cyB0byBzeXNmcyBzbyBwZXJmIHN0YXQgb3V0cHV0IGlzIG5pY2VyLgogKiBDbGVhbnVw IHRoZSBhdHRyaWJ1dGUgdGFibGVzIGZvciBicmV2aXR5IGFuZCByZWFkYWJpbGl0eS4KCnYxMDoK ICogRml4ZWQgcXVldWVkIGFjY291bnRpbmcuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24g PGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4g PHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogRG1pdHJ5IFJvZ296aGtp biA8ZG1pdHJ5LnYucm9nb3poa2luQGludGVsLmNvbT4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0 a28udXJzdWxpbkBpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNv bi5jby51az4KQ2M6IERtaXRyeSBSb2dvemhraW4gPGRtaXRyeS52LnJvZ296aGtpbkBpbnRlbC5j b20+CkNjOiBQZXRlciBaaWpsc3RyYSA8cGV0ZXJ6QGluZnJhZGVhZC5vcmc+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oICAgICAgICAgfCAgNzggKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9w bXUuYyAgICAgICAgIHwgNzA3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgICAgICAgfCAgIDMgKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMgIHwgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuYyB8ICAyNSArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmluZ2J1ZmZlci5oIHwgIDI1ICsrCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAgICAg ICAgICAgfCAgNTcgKysrCiA5IGZpbGVzIGNoYW5nZWQsIDkwOCBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUKaW5kZXggNTE4MmUzZDU1NTdkLi41YzYwMTM5NjFiM2IgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlCkBAIC0yNiw2ICsyNiw3IEBAIGk5MTUteSA6PSBpOTE1X2Rydi5vIFwKIAogaTkxNS0k KENPTkZJR19DT01QQVQpICAgKz0gaTkxNV9pb2MzMi5vCiBpOTE1LSQoQ09ORklHX0RFQlVHX0ZT KSArPSBpOTE1X2RlYnVnZnMubyBpbnRlbF9waXBlX2NyYy5vCitpOTE1LSQoQ09ORklHX1BFUkZf RVZFTlRTKSArPSBpOTE1X3BtdS5vCiAKICMgR0VNIGNvZGUKIGk5MTUteSArPSBpOTE1X2NtZF9w YXJzZXIubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCA1YzExMWVhOTZlODAuLmIxZjk2 ZWIxYmUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC0xMTk2LDYgKzExOTYsNyBAQCBz dGF0aWMgdm9pZCBpOTE1X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwogCiAJ aTkxNV9nZW1fc2hyaW5rZXJfaW5pdChkZXZfcHJpdik7CisJaTkxNV9wbXVfcmVnaXN0ZXIoZGV2 X3ByaXYpOwogCiAJLyoKIAkgKiBOb3RpZnkgYSB2YWxpZCBzdXJmYWNlIGFmdGVyIG1vZGVzZXR0 aW5nLApAQCAtMTI1MCw2ICsxMjUxLDcgQEAgc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfdW5yZWdp c3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaW50ZWxfb3ByZWdpb25f dW5yZWdpc3RlcihkZXZfcHJpdik7CiAKIAlpOTE1X3BlcmZfdW5yZWdpc3RlcihkZXZfcHJpdik7 CisJaTkxNV9wbXVfdW5yZWdpc3RlcihkZXZfcHJpdik7CiAKIAlpOTE1X3RlYXJkb3duX3N5c2Zz KGRldl9wcml2KTsKIAlpOTE1X2d1Y19sb2dfdW5yZWdpc3RlcihkZXZfcHJpdik7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaAppbmRleCBlYzJjYWJhNTMxZWMuLmYxOTk1YTU5Y2VmZCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaGFzaC5o PgogI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5o PgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9xb3Mu aD4KICNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NobWVt X2ZzLmg+CkBAIC0yMTk3LDYgKzIxOTgsNzAgQEAgc3RydWN0IGludGVsX2NkY2xrX3N0YXRlIHsK IAl1bnNpZ25lZCBpbnQgY2RjbGssIHZjbywgcmVmOwogfTsKIAorZW51bSB7CisJX19JOTE1X1NB TVBMRV9GUkVRX0FDVCA9IDAsCisJX19JOTE1X1NBTVBMRV9GUkVRX1JFUSwKKwlfX0k5MTVfTlVN X1BNVV9TQU1QTEVSUworfTsKKworLyoqCisgKiBIb3cgbWFueSBkaWZmZXJlbnQgZXZlbnRzIHdl IHRyYWNrIGluIHRoZSBnbG9iYWwgUE1VIG1hc2suCisgKgorICogSXQgaXMgYWxzbyB1c2VkIHRv IGtub3cgdG8gbmVlZGVkIG51bWJlciBvZiBldmVudCByZWZlcmVuY2UgY291bnRlcnMuCisgKi8K KyNkZWZpbmUgSTkxNV9QTVVfTUFTS19CSVRTIFwKKwkoKDEgPDwgSTkxNV9QTVVfU0FNUExFX0JJ VFMpICsgXAorCSAoSTkxNV9QTVVfTEFTVCArIDEgLSBfX0k5MTVfUE1VX09USEVSKDApKSkKKwor c3RydWN0IGk5MTVfcG11IHsKKwkvKioKKwkgKiBAbm9kZTogTGlzdCBub2RlIGZvciBDUFUgaG90 cGx1ZyBoYW5kbGluZy4KKwkgKi8KKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOworCS8qKgorCSAq IEBiYXNlOiBQTVUgYmFzZS4KKwkgKi8KKwlzdHJ1Y3QgcG11IGJhc2U7CisJLyoqCisJICogQGxv Y2s6IExvY2sgcHJvdGVjdGluZyBlbmFibGUgbWFzayBhbmQgcmVmIGNvdW50IGhhbmRsaW5nLgor CSAqLworCXNwaW5sb2NrX3QgbG9jazsKKwkvKioKKwkgKiBAdGltZXI6IFRpbWVyIGZvciBpbnRl cm5hbCBpOTE1IFBNVSBzYW1wbGluZy4KKwkgKi8KKwlzdHJ1Y3QgaHJ0aW1lciB0aW1lcjsKKwkv KioKKwkgKiBAZW5hYmxlOiBCaXRtYXNrIG9mIGFsbCBjdXJyZW50bHkgZW5hYmxlZCBldmVudHMu CisJICoKKwkgKiBCaXRzIGFyZSBkZXJpdmVkIGZyb20gdUFQSSBldmVudCBudW1iZXJzIGluIGEg d2F5IHRoYXQgbG93IDE2IGJpdHMKKwkgKiBjb3JyZXNwb25kIHRvIGVuZ2luZSBldmVudCBfc2Ft cGxlXyBfdHlwZV8gKEk5MTVfU0FNUExFX1FVRVVFRCBpcworCSAqIGJpdCAwKSwgYW5kIGhpZ2hl ciBiaXRzIGNvcnJlc3BvbmQgdG8gb3RoZXIgZXZlbnRzIChmb3IgaW5zdGFuY2UKKwkgKiBJOTE1 X1BNVV9BQ1RVQUxfRlJFUVVFTkNZIGlzIGJpdCAxNiBldGMpLgorCSAqCisJICogSW4gb3RoZXIg d29yZHMsIGxvdyAxNiBiaXRzIGFyZSBub3QgcGVyIGVuZ2luZSBidXQgcGVyIGVuZ2luZQorCSAq IHNhbXBsZXIgdHlwZSwgd2hpbGUgdGhlIHVwcGVyIGJpdHMgYXJlIGRpcmVjdGx5IG1hcHBlZCB0 byBvdGhlcgorCSAqIGV2ZW50IHR5cGVzLgorCSAqLworCXU2NCBlbmFibGU7CisJLyoqCisJICog QGVuYWJsZV9jb3VudDogUmVmZXJlbmNlIGNvdW50cyBmb3IgdGhlIGVuYWJsZWQgZXZlbnRzLgor CSAqCisJICogQXJyYXkgaW5kaWNlcyBhcmUgbWFwcGVkIGluIHRoZSBzYW1lIHdheSBhcyBiaXRz IGluIHRoZSBAZW5hYmxlIGZpZWxkCisJICogYW5kIHRoZXkgYXJlIHVzZWQgdG8gY29udHJvbCBz YW1wbGluZyBvbi9vZmYgd2hlbiBtdWx0aXBsZSBjbGllbnRzCisJICogYXJlIHVzaW5nIHRoZSBQ TVUgQVBJLgorCSAqLworCXVuc2lnbmVkIGludCBlbmFibGVfY291bnRbSTkxNV9QTVVfTUFTS19C SVRTXTsKKwkvKioKKwkgKiBAc2FtcGxlOiBDdXJyZW50IGNvdW50ZXIgdmFsdWUgZm9yIGk5MTUg ZXZlbnRzIHdoaWNoIG5lZWQgc2FtcGxpbmcuCisJICoKKwkgKiBUaGVzZSBjb3VudGVycyBhcmUg dXBkYXRlZCBmcm9tIHRoZSBpOTE1IFBNVSBzYW1wbGluZyB0aW1lci4KKwkgKgorCSAqIE9ubHkg Z2xvYmFsIGNvdW50ZXJzIGFyZSBoZWxkIGhlcmUsIHdoaWxlIHRoZSBwZXItZW5naW5lIG9uZXMg YXJlIGluCisJICogc3RydWN0IGludGVsX2VuZ2luZV9jcy4KKwkgKi8KKwl1NjQgc2FtcGxlW19f STkxNV9OVU1fUE1VX1NBTVBMRVJTXTsKK307CisKIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsK IAlzdHJ1Y3QgZHJtX2RldmljZSBkcm07CiAKQEAgLTIyNDUsNiArMjMxMCw4IEBAIHN0cnVjdCBk cm1faTkxNV9wcml2YXRlIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlX2RldjsKIAlzdHJ1Y3Qg aTkxNV9nZW1fY29udGV4dCAqa2VybmVsX2NvbnRleHQ7CiAJc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lW0k5MTVfTlVNX0VOR0lORVNdOworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZV9jbGFzc1tNQVhfRU5HSU5FX0NMQVNTICsgMV0KKwkJCQkJICAgIFtNQVhfRU5HSU5FX0lO U1RBTkNFICsgMV07CiAJc3RydWN0IGk5MTVfdm1hICpzZW1hcGhvcmU7CiAKIAlzdHJ1Y3QgZHJt X2RtYV9oYW5kbGUgKnN0YXR1c19wYWdlX2RtYWg7CkBAIC0yNzA3LDYgKzI3NzQsOCBAQCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJCWludAlpcnE7CiAJfSBscGVfYXVkaW87CiAKKwlzdHJ1 Y3QgaTkxNV9wbXUgcG11OworCiAJLyoKIAkgKiBOT1RFOiBUaGlzIGlzIHRoZSBkcmkxL3VtcyBk dW5nZW9uLCBkb24ndCBhZGQgc3R1ZmYgaGVyZS4gWW91ciBwYXRjaAogCSAqIHdpbGwgYmUgcmVq ZWN0ZWQuIEluc3RlYWQgbG9vayBmb3IgYSBiZXR0ZXIgcGxhY2UuCkBAIC0zOTMxLDYgKzQwMDAs MTUgQEAgZXh0ZXJuIHZvaWQgaTkxNV9wZXJmX2Zpbmkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KTsKIGV4dGVybiB2b2lkIGk5MTVfcGVyZl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9wZXJmX3VucmVnaXN0ZXIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIAorLyogaTkxNV9wbXUuYyAqLwor I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwordm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cit2b2lkIGk5MTVfcG11X3VucmVnaXN0ZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpOTE1 X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkge30KK3N0YXRpYyBp bmxpbmUgdm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KSB7fQorI2VuZGlmCisKIC8qIGk5MTVfc3VzcGVuZC5jICovCiBleHRlcm4gaW50IGk5MTVf c2F2ZV9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIGlu dCBpOTE1X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3BtdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uY2YxNDA2ZmJjMjE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9wbXUuYwpAQCAtMCwwICsxLDcwNyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3 IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1 ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVk ZSAiaW50ZWxfcmluZ2J1ZmZlci5oIgorCisvKiBGcmVxdWVuY3kgZm9yIHRoZSBzYW1wbGluZyB0 aW1lciBmb3IgZXZlbnRzIHdoaWNoIG5lZWQgaXQuICovCisjZGVmaW5lIEZSRVFVRU5DWSAyMDAK KyNkZWZpbmUgUEVSSU9EIG1heF90KHU2NCwgMTAwMDAsIE5TRUNfUEVSX1NFQyAvIEZSRVFVRU5D WSkKKworI2RlZmluZSBFTkdJTkVfU0FNUExFX01BU0sgXAorCShCSVQoSTkxNV9TQU1QTEVfUVVF VUVEKSB8IFwKKwkgQklUKEk5MTVfU0FNUExFX0JVU1kpIHwgXAorCSBCSVQoSTkxNV9TQU1QTEVf V0FJVCkgfCBcCisJIEJJVChJOTE1X1NBTVBMRV9TRU1BKSkKKworI2RlZmluZSBFTkdJTkVfU0FN UExFX0JJVFMgKDEgPDwgSTkxNV9QTVVfU0FNUExFX0JJVFMpCisKK3N0YXRpYyBjcHVtYXNrX3Qg aTkxNV9wbXVfY3B1bWFzayA9IENQVV9NQVNLX05PTkU7CisKK3N0YXRpYyB1OCBlbmdpbmVfY29u ZmlnX3NhbXBsZSh1NjQgY29uZmlnKQoreworCXJldHVybiBjb25maWcgJiBJOTE1X1BNVV9TQU1Q TEVfTUFTSzsKK30KKworc3RhdGljIHU4IGVuZ2luZV9ldmVudF9zYW1wbGUoc3RydWN0IHBlcmZf ZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBlbmdpbmVfY29uZmlnX3NhbXBsZShldmVudC0+YXR0 ci5jb25maWcpOworfQorCitzdGF0aWMgdTggZW5naW5lX2V2ZW50X2NsYXNzKHN0cnVjdCBwZXJm X2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gKGV2ZW50LT5hdHRyLmNvbmZpZyA+PiBJOTE1X1BN VV9DTEFTU19TSElGVCkgJiAweGZmOworfQorCitzdGF0aWMgdTggZW5naW5lX2V2ZW50X2luc3Rh bmNlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gKGV2ZW50LT5hdHRyLmNv bmZpZyA+PiBJOTE1X1BNVV9TQU1QTEVfQklUUykgJiAweGZmOworfQorCitzdGF0aWMgYm9vbCBp c19lbmdpbmVfY29uZmlnKHU2NCBjb25maWcpCit7CisJcmV0dXJuIGNvbmZpZyA8IF9fSTkxNV9Q TVVfT1RIRVIoMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29uZmlnX2VuYWJsZWRfYml0 KHU2NCBjb25maWcpCit7CisJaWYgKGlzX2VuZ2luZV9jb25maWcoY29uZmlnKSkKKwkJcmV0dXJu IGVuZ2luZV9jb25maWdfc2FtcGxlKGNvbmZpZyk7CisJZWxzZQorCQlyZXR1cm4gRU5HSU5FX1NB TVBMRV9CSVRTICsgKGNvbmZpZyAtIF9fSTkxNV9QTVVfT1RIRVIoMCkpOworfQorCitzdGF0aWMg dTY0IGNvbmZpZ19lbmFibGVkX21hc2sodTY0IGNvbmZpZykKK3sKKwlyZXR1cm4gQklUX1VMTChj b25maWdfZW5hYmxlZF9iaXQoY29uZmlnKSk7Cit9CisKK3N0YXRpYyBib29sIGlzX2VuZ2luZV9l dmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIGlzX2VuZ2luZV9jb25m aWcoZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBldmVudF9l bmFibGVkX2JpdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIGNvbmZpZ19l bmFibGVkX2JpdChldmVudC0+YXR0ci5jb25maWcpOworfQorCitzdGF0aWMgYm9vbCBncmFiX2Zv cmNld2FrZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgYm9vbCBmdykKK3sKKwlpZiAo IWZ3KQorCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChpOTE1LCBGT1JDRVdBS0VfQUxMKTsK KworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBlbmdpbmVzX3NhbXBsZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lOworCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOworCWJvb2wgZncgPSBmYWxzZTsKKwor CWlmICgoZGV2X3ByaXYtPnBtdS5lbmFibGUgJiBFTkdJTkVfU0FNUExFX01BU0spID09IDApCisJ CXJldHVybjsKKworCWlmICghZGV2X3ByaXYtPmd0LmF3YWtlKQorCQlyZXR1cm47CisKKwlpZiAo IWludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShkZXZfcHJpdikpCisJCXJldHVybjsKKwor CWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgeworCQl1MzIgY3VycmVudF9z ZXFubyA9IGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKTsKKwkJdTMyIGxhc3Rfc2Vxbm8g PSBpbnRlbF9lbmdpbmVfbGFzdF9zdWJtaXQoZW5naW5lKTsKKwkJdTMyIGVuYWJsZSA9IGVuZ2lu ZS0+cG11LmVuYWJsZTsKKworCQlpZiAoaTkxNV9zZXFub19wYXNzZWQoY3VycmVudF9zZXFubywg bGFzdF9zZXFubykpCisJCQljb250aW51ZTsKKworCQlpZiAoKGVuYWJsZSAmIEJJVChJOTE1X1NB TVBMRV9RVUVVRUQpKSAmJgorCQkgICAgKGxhc3Rfc2Vxbm8gLSAxID4gY3VycmVudF9zZXFubykp CisJCQllbmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9TQU1QTEVfUVVFVUVEXSArPSBQRVJJT0Q7CisK KwkJaWYgKGVuYWJsZSAmIEJJVChJOTE1X1NBTVBMRV9CVVNZKSkgeworCQkJdTMyIHZhbDsKKwor CQkJZncgPSBncmFiX2ZvcmNld2FrZShkZXZfcHJpdiwgZncpOworCQkJdmFsID0gSTkxNV9SRUFE X0ZXKFJJTkdfTUlfTU9ERShlbmdpbmUtPm1taW9fYmFzZSkpOworCQkJaWYgKCEodmFsICYgTU9E RV9JRExFKSkKKwkJCQllbmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9TQU1QTEVfQlVTWV0gKz0gUEVS SU9EOworCQl9CisKKwkJaWYgKGVuYWJsZSAmIChCSVQoSTkxNV9TQU1QTEVfV0FJVCkgfCBCSVQo STkxNV9TQU1QTEVfU0VNQSkpKSB7CisJCQl1MzIgdmFsOworCisJCQlmdyA9IGdyYWJfZm9yY2V3 YWtlKGRldl9wcml2LCBmdyk7CisJCQl2YWwgPSBJOTE1X1JFQURfRlcoUklOR19DVEwoZW5naW5l LT5tbWlvX2Jhc2UpKTsKKwkJCWlmICgoZW5hYmxlICYgQklUKEk5MTVfU0FNUExFX1dBSVQpKSAm JgorCQkJICAgICh2YWwgJiBSSU5HX1dBSVQpKQorCQkJCWVuZ2luZS0+cG11LnNhbXBsZVtJOTE1 X1NBTVBMRV9XQUlUXSArPSBQRVJJT0Q7CisJCQlpZiAoKGVuYWJsZSAmIEJJVChJOTE1X1NBTVBM RV9TRU1BKSkgJiYKKwkJCSAgICAodmFsICYgUklOR19XQUlUX1NFTUFQSE9SRSkpCisJCQkJZW5n aW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FNUExFX1NFTUFdICs9IFBFUklPRDsKKwkJfQorCX0KKwor CWlmIChmdykKKwkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FL RV9BTEwpOworCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKK30KKworc3RhdGljIHZv aWQgZnJlcXVlbmN5X3NhbXBsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7 CisJaWYgKGRldl9wcml2LT5wbXUuZW5hYmxlICYKKwkgICAgY29uZmlnX2VuYWJsZWRfbWFzayhJ OTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZKSkgeworCQl1NjQgdmFsOworCisJCXZhbCA9IGRldl9w cml2LT5ycHMuY3VyX2ZyZXE7CisJCWlmIChkZXZfcHJpdi0+Z3QuYXdha2UgJiYKKwkJICAgIGlu dGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShkZXZfcHJpdikpIHsKKwkJCXZhbCA9IGludGVs X2dldF9jYWdmKGRldl9wcml2LAorCQkJCQkgICAgIEk5MTVfUkVBRF9OT1RSQUNFKEdFTjZfUlBT VEFUMSkpOworCQkJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOworCQl9CisJCXZhbCA9 IGludGVsX2dwdV9mcmVxKGRldl9wcml2LCB2YWwpOworCQlkZXZfcHJpdi0+cG11LnNhbXBsZVtf X0k5MTVfU0FNUExFX0ZSRVFfQUNUXSArPSB2YWwgKiBQRVJJT0Q7CisJfQorCisJaWYgKGRldl9w cml2LT5wbXUuZW5hYmxlICYKKwkgICAgY29uZmlnX2VuYWJsZWRfbWFzayhJOTE1X1BNVV9SRVFV RVNURURfRlJFUVVFTkNZKSkgeworCQl1NjQgdmFsID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYs IGRldl9wcml2LT5ycHMuY3VyX2ZyZXEpOworCisJCWRldl9wcml2LT5wbXUuc2FtcGxlW19fSTkx NV9TQU1QTEVfRlJFUV9SRVFdICs9IHZhbCAqIFBFUklPRDsKKwl9Cit9CisKK3N0YXRpYyBlbnVt IGhydGltZXJfcmVzdGFydCBpOTE1X3NhbXBsZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihocnRpbWVy LCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgcG11LnRpbWVyKTsKKworCWlmIChpOTE1LT5wbXUu ZW5hYmxlID09IDApCisJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKKworCWVuZ2luZXNfc2Ft cGxlKGk5MTUpOworCWZyZXF1ZW5jeV9zYW1wbGUoaTkxNSk7CisKKwlocnRpbWVyX2ZvcndhcmRf bm93KGhydGltZXIsIG5zX3RvX2t0aW1lKFBFUklPRCkpOworCXJldHVybiBIUlRJTUVSX1JFU1RB UlQ7Cit9CisKK3N0YXRpYyB1NjQgY291bnRfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSkKK3sKKwkvKiBvcGVuLWNvZGVkIGtzdGF0X2lycXMoKSAqLworCXN0cnVjdCBp cnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGk5MTUtPmRybS5wZGV2LT5pcnEpOworCXU2NCBz dW0gPSAwOworCWludCBjcHU7CisKKwlpZiAoIWRlc2MgfHwgIWRlc2MtPmtzdGF0X2lycXMpCisJ CXJldHVybiAwOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJc3VtICs9ICpwZXJf Y3B1X3B0cihkZXNjLT5rc3RhdF9pcnFzLCBjcHUpOworCisJcmV0dXJuIHN1bTsKK30KKworc3Rh dGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQp Cit7CisJV0FSTl9PTihldmVudC0+cGFyZW50KTsKK30KKworc3RhdGljIGludCBlbmdpbmVfZXZl bnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwg cG11LmJhc2UpOworCisJaWYgKCFpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoaTkxNSwgZW5naW5l X2V2ZW50X2NsYXNzKGV2ZW50KSwKKwkJCQkgICAgICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZl bnQpKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGVuZ2luZV9ldmVudF9zYW1wbGUo ZXZlbnQpKSB7CisJY2FzZSBJOTE1X1NBTVBMRV9RVUVVRUQ6CisJY2FzZSBJOTE1X1NBTVBMRV9C VVNZOgorCWNhc2UgSTkxNV9TQU1QTEVfV0FJVDoKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1NBTVBM RV9TRU1BOgorCQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNikKKwkJCXJldHVybiAtRU5PREVWOwor CQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBpOTE1X3BtdV9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpl dmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9v ZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJaW50IGNwdSwgcmV0Owor CisJaWYgKGV2ZW50LT5hdHRyLnR5cGUgIT0gZXZlbnQtPnBtdS0+dHlwZSkKKwkJcmV0dXJuIC1F Tk9FTlQ7CisKKwkvKiB1bnN1cHBvcnRlZCBtb2RlcyBhbmQgZmlsdGVycyAqLworCWlmIChldmVu dC0+YXR0ci5zYW1wbGVfcGVyaW9kKSAvKiBubyBzYW1wbGluZyAqLworCQlyZXR1cm4gLUVJTlZB TDsKKworCWlmIChoYXNfYnJhbmNoX3N0YWNrKGV2ZW50KSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQ OworCisJaWYgKGV2ZW50LT5jcHUgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNwdSA9IGNw dW1hc2tfYW55X2FuZCgmaTkxNV9wbXVfY3B1bWFzaywKKwkJCSAgICAgIHRvcG9sb2d5X3NpYmxp bmdfY3B1bWFzayhldmVudC0+Y3B1KSk7CisJaWYgKGNwdSA+PSBucl9jcHVfaWRzKQorCQlyZXR1 cm4gLUVOT0RFVjsKKworCWlmIChpc19lbmdpbmVfZXZlbnQoZXZlbnQpKSB7CisJCXJldCA9IGVu Z2luZV9ldmVudF9pbml0KGV2ZW50KTsKKwl9IGVsc2UgeworCQlyZXQgPSAwOworCQlzd2l0Y2gg KGV2ZW50LT5hdHRyLmNvbmZpZykgeworCQljYXNlIEk5MTVfUE1VX0lOVEVSUlVQVFM6CisJCQli cmVhazsKKwkJY2FzZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZOgorCQkJaWYgKElTX1ZBTExF WVZJRVcoaTkxNSkgfHwgSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJCQkgLyogUmVxdWlyZXMgYSBt dXRleCBmb3Igc2FtcGxpbmchICovCisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJY2FzZSBJOTE1X1BN VV9SRVFVRVNURURfRlJFUVVFTkNZOgorCQkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCisJCQkJ cmV0ID0gLUVOT0RFVjsKKwkJCWJyZWFrOworCQljYXNlIEk5MTVfUE1VX1JDNl9SRVNJREVOQ1k6 CisJCQlpZiAoIUhBU19SQzYoaTkxNSkpCisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWJyZWFrOwor CQljYXNlIEk5MTVfUE1VX1JDNnBfUkVTSURFTkNZOgorCQljYXNlIEk5MTVfUE1VX1JDNnBwX1JF U0lERU5DWToKKwkJCWlmICghSEFTX1JDNnAoaTkxNSkpCisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVOT0VOVDsKKwkJCWJyZWFrOworCQl9CisJ fQorCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlldmVudC0+Y3B1ID0gY3B1OworCWlmICgh ZXZlbnQtPnBhcmVudCkKKwkJZXZlbnQtPmRlc3Ryb3kgPSBpOTE1X3BtdV9ldmVudF9kZXN0cm95 OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1NjQgX19pOTE1X3BtdV9ldmVudF9yZWFkKHN0 cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7 CisJdTY0IHZhbCA9IDA7CisKKwlpZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQl1OCBz YW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KTsKKwkJc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lOworCisJCWVuZ2luZSA9IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1 LAorCQkJCQkJICBlbmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQpLAorCQkJCQkJICBlbmdpbmVfZXZl bnRfaW5zdGFuY2UoZXZlbnQpKTsKKworCQlpZiAoV0FSTl9PTl9PTkNFKCFlbmdpbmUpKSB7CisJ CQkvKiBEbyBub3RoaW5nICovCisJCX0gZWxzZSB7CisJCQl2YWwgPSBlbmdpbmUtPnBtdS5zYW1w bGVbc2FtcGxlXTsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoZXZlbnQtPmF0dHIuY29uZmln KSB7CisJCWNhc2UgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWToKKwkJCXZhbCA9IGk5MTUtPnBt dS5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX0FDVF07CisJCQlicmVhazsKKwkJY2FzZSBJOTE1 X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZOgorCQkJdmFsID0gaTkxNS0+cG11LnNhbXBsZVtfX0k5 MTVfU0FNUExFX0ZSRVFfUkVRXTsKKwkJCWJyZWFrOworCQljYXNlIEk5MTVfUE1VX0lOVEVSUlVQ VFM6CisJCQl2YWwgPSBjb3VudF9pbnRlcnJ1cHRzKGk5MTUpOworCQkJYnJlYWs7CisJCWNhc2Ug STkxNV9QTVVfUkM2X1JFU0lERU5DWToKKwkJCWludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwor CQkJdmFsID0gaW50ZWxfcmM2X3Jlc2lkZW5jeV9ucyhpOTE1LAorCQkJCQkJICAgICBJU19WQUxM RVlWSUVXKGk5MTUpID8KKwkJCQkJCSAgICAgVkxWX0dUX1JFTkRFUl9SQzYgOgorCQkJCQkJICAg ICBHRU42X0dUX0dGWF9SQzYpOworCQkJaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSk7CisJCQli cmVhazsKKwkJY2FzZSBJOTE1X1BNVV9SQzZwX1JFU0lERU5DWToKKwkJCWludGVsX3J1bnRpbWVf cG1fZ2V0KGk5MTUpOworCQkJdmFsID0gaW50ZWxfcmM2X3Jlc2lkZW5jeV9ucyhpOTE1LCBHRU42 X0dUX0dGWF9SQzZwKTsKKwkJCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUpOworCQkJYnJlYWs7 CisJCWNhc2UgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZOgorCQkJaW50ZWxfcnVudGltZV9wbV9n ZXQoaTkxNSk7CisJCQl2YWwgPSBpbnRlbF9yYzZfcmVzaWRlbmN5X25zKGk5MTUsIEdFTjZfR1Rf R0ZYX1JDNnBwKTsKKwkJCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUpOworCQkJYnJlYWs7CisJ CX0KKwl9CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9y ZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAq aHdjID0gJmV2ZW50LT5odzsKKwl1NjQgcHJldiwgbmV3OworCithZ2FpbjoKKwlwcmV2ID0gbG9j YWw2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOworCW5ldyA9IF9faTkxNV9wbXVfZXZlbnRfcmVh ZChldmVudCk7CisKKwlpZiAobG9jYWw2NF9jbXB4Y2hnKCZod2MtPnByZXZfY291bnQsIHByZXYs IG5ldykgIT0gcHJldikKKwkJZ290byBhZ2FpbjsKKworCWxvY2FsNjRfYWRkKG5ldyAtIHByZXYs ICZldmVudC0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9lbmFibGUoc3RydWN0 IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0K KwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKwl1 bnNpZ25lZCBpbnQgYml0ID0gZXZlbnRfZW5hYmxlZF9iaXQoZXZlbnQpOworCXVuc2lnbmVkIGxv bmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsK KworCS8qCisJICogU3RhcnQgdGhlIHNhbXBsaW5nIHRpbWVyIHdoZW4gZW5hYmxpbmcgdGhlIGZp cnN0IGV2ZW50LgorCSAqLworCWlmIChpOTE1LT5wbXUuZW5hYmxlID09IDApCisJCWhydGltZXJf c3RhcnRfcmFuZ2VfbnMoJmk5MTUtPnBtdS50aW1lciwKKwkJCQkgICAgICAgbnNfdG9fa3RpbWUo UEVSSU9EKSwgMCwKKwkJCQkgICAgICAgSFJUSU1FUl9NT0RFX1JFTF9QSU5ORUQpOworCisJLyoK KwkgKiBVcGRhdGUgdGhlIGJpdG1hc2sgb2YgZW5hYmxlZCBldmVudHMgYW5kIGluY3JlbWVudAor CSAqIHRoZSBldmVudCByZWZlcmVuY2UgY291bnRlci4KKwkgKi8KKwlHRU1fQlVHX09OKGJpdCA+ PSBJOTE1X1BNVV9NQVNLX0JJVFMpOworCUdFTV9CVUdfT04oaTkxNS0+cG11LmVuYWJsZV9jb3Vu dFtiaXRdID09IH4wKTsKKwlpOTE1LT5wbXUuZW5hYmxlIHw9IEJJVF9VTEwoYml0KTsKKwlpOTE1 LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0rKzsKKworCS8qCisJICogRm9yIHBlci1lbmdpbmUgZXZl bnRzIHRoZSBiaXRtYXNrIGFuZCByZWZlcmVuY2UgY291bnRpbmcKKwkgKiBpcyBzdG9yZWQgcGVy IGVuZ2luZS4KKwkgKi8KKwlpZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQl1OCBzYW1w bGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KTsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lOworCisJCWVuZ2luZSA9IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAor CQkJCQkJICBlbmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQpLAorCQkJCQkJICBlbmdpbmVfZXZlbnRf aW5zdGFuY2UoZXZlbnQpKTsKKwkJR0VNX0JVR19PTighZW5naW5lKTsKKwkJZW5naW5lLT5wbXUu ZW5hYmxlIHw9IEJJVChzYW1wbGUpOworCisJCUdFTV9CVUdfT04oc2FtcGxlID49IEk5MTVfUE1V X1NBTVBMRV9CSVRTKTsKKwkJR0VNX0JVR19PTihlbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2Ft cGxlXSA9PSB+MCk7CisJCWVuZ2luZS0+cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdKys7CisJfQor CisJLyoKKwkgKiBTdG9yZSB0aGUgY3VycmVudCBjb3VudGVyIHZhbHVlIHNvIHdlIGNhbiByZXBv cnQgdGhlIGNvcnJlY3QgZGVsdGEKKwkgKiBmb3IgYWxsIGxpc3RlbmVycy4gRXZlbiB3aGVuIHRo ZSBldmVudCB3YXMgYWxyZWFkeSBlbmFibGVkIGFuZCBoYXMKKwkgKiBhbiBleGlzdGluZyBub24t emVybyB2YWx1ZS4KKwkgKi8KKwlsb2NhbDY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIF9f aTkxNV9wbXVfZXZlbnRfcmVhZChldmVudCkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm aTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZGlzYWJs ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPQorCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJh c2UpOworCXVuc2lnbmVkIGludCBiaXQgPSBldmVudF9lbmFibGVkX2JpdChldmVudCk7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpOTE1LT5wbXUubG9jaywg ZmxhZ3MpOworCisJaWYgKGlzX2VuZ2luZV9ldmVudChldmVudCkpIHsKKwkJdTggc2FtcGxlID0g ZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCk7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZTsKKworCQllbmdpbmUgPSBpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoaTkxNSwKKwkJCQkJ CSAgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50KSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2luc3Rh bmNlKGV2ZW50KSk7CisJCUdFTV9CVUdfT04oIWVuZ2luZSk7CisJCUdFTV9CVUdfT04oc2FtcGxl ID49IEk5MTVfUE1VX1NBTVBMRV9CSVRTKTsKKwkJR0VNX0JVR19PTihlbmdpbmUtPnBtdS5lbmFi bGVfY291bnRbc2FtcGxlXSA9PSAwKTsKKwkJLyoKKwkJICogRGVjcmVtZW50IHRoZSByZWZlcmVu Y2UgY291bnQgYW5kIGNsZWFyIHRoZSBlbmFibGVkCisJCSAqIGJpdG1hc2sgd2hlbiB0aGUgbGFz dCBsaXN0ZW5lciBvbiBhbiBldmVudCBnb2VzIGF3YXkuCisJCSAqLworCQlpZiAoLS1lbmdpbmUt PnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSA9PSAwKQorCQkJZW5naW5lLT5wbXUuZW5hYmxlICY9 IH5CSVQoc2FtcGxlKTsKKwl9CisKKwlHRU1fQlVHX09OKGJpdCA+PSBJOTE1X1BNVV9NQVNLX0JJ VFMpOworCUdFTV9CVUdfT04oaTkxNS0+cG11LmVuYWJsZV9jb3VudFtiaXRdID09IDApOworCS8q CisJICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgYW5kIGNsZWFyIHRoZSBlbmFibGVk CisJICogYml0bWFzayB3aGVuIHRoZSBsYXN0IGxpc3RlbmVyIG9uIGFuIGV2ZW50IGdvZXMgYXdh eS4KKwkgKi8KKwlpZiAoLS1pOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0gPT0gMCkKKwkJaTkx NS0+cG11LmVuYWJsZSAmPSB+QklUX1VMTChiaXQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZl bnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCit7CisJaTkxNV9w bXVfZW5hYmxlKGV2ZW50KTsKKwlldmVudC0+aHcuc3RhdGUgPSAwOworfQorCitzdGF0aWMgdm9p ZCBpOTE1X3BtdV9ldmVudF9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdz KQoreworCWlmIChmbGFncyAmIFBFUkZfRUZfVVBEQVRFKQorCQlpOTE1X3BtdV9ldmVudF9yZWFk KGV2ZW50KTsKKwlpOTE1X3BtdV9kaXNhYmxlKGV2ZW50KTsKKwlldmVudC0+aHcuc3RhdGUgPSBQ RVJGX0hFU19TVE9QUEVEOworfQorCitzdGF0aWMgaW50IGk5MTVfcG11X2V2ZW50X2FkZChzdHJ1 Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBQRVJGX0VG X1NUQVJUKQorCQlpOTE1X3BtdV9ldmVudF9zdGFydChldmVudCwgZmxhZ3MpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X2RlbChzdHJ1Y3QgcGVyZl9ldmVu dCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlpOTE1X3BtdV9ldmVudF9zdG9wKGV2ZW50LCBQRVJG X0VGX1VQREFURSk7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfZXZlbnRfZXZlbnRfaWR4KHN0 cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXpl X3QgaTkxNV9wbXVfZm9ybWF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkZXZfZXh0 X2F0dHJpYnV0ZSAqZWF0dHI7CisKKwllYXR0ciA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3Qg ZGV2X2V4dF9hdHRyaWJ1dGUsIGF0dHIpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAo Y2hhciAqKWVhdHRyLT52YXIpOworfQorCisjZGVmaW5lIEk5MTVfUE1VX0ZPUk1BVF9BVFRSKF9u YW1lLCBfY29uZmlnKSBcCisJKCYoKHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZVtdKSB7IFwKKwkJ eyAuYXR0ciA9IF9fQVRUUihfbmFtZSwgMDQ0NCwgaTkxNV9wbXVfZm9ybWF0X3Nob3csIE5VTEwp LCBcCisJCSAgLnZhciA9ICh2b2lkICopX2NvbmZpZywgfSBcCisJfSlbMF0uYXR0ci5hdHRyKQor CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTkxNV9wbXVfZm9ybWF0X2F0dHJzW10gPSB7CisJ STkxNV9QTVVfRk9STUFUX0FUVFIoaTkxNV9ldmVudGlkLCAiY29uZmlnOjAtNDIiKSwKKwlOVUxM LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVfZm9y bWF0X2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgPSAiZm9ybWF0IiwKKwkuYXR0cnMgPSBpOTE1X3Bt dV9mb3JtYXRfYXR0cnMsCit9OworCitzdGF0aWMgc3NpemVfdCBpOTE1X3BtdV9ldmVudF9zaG93 KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0 ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHI7CisKKwll YXR0ciA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUsIGF0dHIp OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgImNvbmZpZz0weCVseFxuIiwgKHVuc2lnbmVkIGxvbmcp ZWF0dHItPnZhcik7Cit9CisKKyNkZWZpbmUgSTkxNV9FVkVOVF9BVFRSKF9uYW1lLCBfY29uZmln KSBcCisJKCYoKHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZVtdKSB7IFwKKwkJeyAuYXR0ciA9IF9f QVRUUihfbmFtZSwgMDQ0NCwgaTkxNV9wbXVfZXZlbnRfc2hvdywgTlVMTCksIFwKKwkJICAudmFy ID0gKHZvaWQgKilfY29uZmlnLCB9IFwKKwl9KVswXS5hdHRyLmF0dHIpCisKKyNkZWZpbmUgSTkx NV9FVkVOVF9TVFIoX25hbWUsIF9zdHIpIFwKKwkoJigoc3RydWN0IHBlcmZfcG11X2V2ZW50c19h dHRyW10pIHsgXAorCQl7IC5hdHRyCSAgICAgPSBfX0FUVFIoX25hbWUsIDA0NDQsIHBlcmZfZXZl bnRfc3lzZnNfc2hvdywgTlVMTCksIFwKKwkJICAuaWQJICAgICA9IDAsIFwKKwkJICAuZXZlbnRf c3RyID0gX3N0ciwgfSBcCisJfSlbMF0uYXR0ci5hdHRyKQorCisjZGVmaW5lIEk5MTVfRVZFTlQo X25hbWUsIF9jb25maWcsIF91bml0KSBcCisJSTkxNV9FVkVOVF9BVFRSKF9uYW1lLCBfY29uZmln KSwgXAorCUk5MTVfRVZFTlRfU1RSKF9uYW1lLnVuaXQsIF91bml0KQorCisjZGVmaW5lIEk5MTVf RU5HSU5FX0VWRU5UKF9uYW1lLCBfY2xhc3MsIF9pbnN0YW5jZSwgX3NhbXBsZSkgXAorCUk5MTVf RVZFTlRfQVRUUihfbmFtZSwgX19JOTE1X1BNVV9FTkdJTkUoX2NsYXNzLCBfaW5zdGFuY2UsIF9z YW1wbGUpKSwgXAorCUk5MTVfRVZFTlRfU1RSKF9uYW1lLnVuaXQsICJucyIpCisKKyNkZWZpbmUg STkxNV9FTkdJTkVfRVZFTlRTKF9uYW1lLCBfY2xhc3MsIF9pbnN0YW5jZSkgXAorCUk5MTVfRU5H SU5FX0VWRU5UKF9uYW1lIyNfaW5zdGFuY2UtcXVldWVkLCBfY2xhc3MsIF9pbnN0YW5jZSwgSTkx NV9TQU1QTEVfUVVFVUVEKSwgXAorCUk5MTVfRU5HSU5FX0VWRU5UKF9uYW1lIyNfaW5zdGFuY2Ut YnVzeSwgX2NsYXNzLCBfaW5zdGFuY2UsIEk5MTVfU0FNUExFX0JVU1kpLCBcCisJSTkxNV9FTkdJ TkVfRVZFTlQoX25hbWUjI19pbnN0YW5jZS1zZW1hLCBfY2xhc3MsIF9pbnN0YW5jZSwgSTkxNV9T QU1QTEVfU0VNQSksIFwKKwlJOTE1X0VOR0lORV9FVkVOVChfbmFtZSMjX2luc3RhbmNlLXdhaXQs IF9jbGFzcywgX2luc3RhbmNlLCBJOTE1X1NBTVBMRV9XQUlUKQorCitzdGF0aWMgc3RydWN0IGF0 dHJpYnV0ZSAqaTkxNV9wbXVfZXZlbnRzX2F0dHJzW10gPSB7CisJSTkxNV9FTkdJTkVfRVZFTlRT KHJjcywgSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSLCAwKSwKKwlJOTE1X0VOR0lORV9FVkVOVFMo YmNzLCBJOTE1X0VOR0lORV9DTEFTU19DT1BZLCAwKSwKKwlJOTE1X0VOR0lORV9FVkVOVFModmNz LCBJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMCksCisJSTkxNV9FTkdJTkVfRVZFTlRTKHZjcywg STkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDEpLAorCUk5MTVfRU5HSU5FX0VWRU5UUyh2ZWNzLCBJ OTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNFLCAwKSwKKworCUk5MTVfRVZFTlQoYWN0dWFs LWZyZXF1ZW5jeSwgICAgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSwgICAgIkh6IiksCisJSTkx NV9FVkVOVChyZXF1ZXN0ZWQtZnJlcXVlbmN5LCBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZ LCAiSHoiKSwKKworCUk5MTVfRVZFTlRfQVRUUihpbnRlcnJ1cHRzLCBJOTE1X1BNVV9JTlRFUlJV UFRTKSwKKworCUk5MTVfRVZFTlQocmM2LXJlc2lkZW5jeSwgICBJOTE1X1BNVV9SQzZfUkVTSURF TkNZLCAgICJucyIpLAorCUk5MTVfRVZFTlQocmM2cC1yZXNpZGVuY3ksICBJOTE1X1BNVV9SQzZw X1JFU0lERU5DWSwgICJucyIpLAorCUk5MTVfRVZFTlQocmM2cHAtcmVzaWRlbmN5LCBJOTE1X1BN VV9SQzZwcF9SRVNJREVOQ1ksICJucyIpLAorCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGk5MTVfcG11X2V2ZW50c19hdHRyX2dyb3VwID0geworCS5u YW1lID0gImV2ZW50cyIsCisJLmF0dHJzID0gaTkxNV9wbXVfZXZlbnRzX2F0dHJzLAorfTsKKwor c3RhdGljIHNzaXplX3QKK2k5MTVfcG11X2dldF9hdHRyX2NwdW1hc2soc3RydWN0IGRldmljZSAq ZGV2LAorCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVm KQoreworCXJldHVybiBjcHVtYXBfcHJpbnRfdG9fcGFnZWJ1Zih0cnVlLCBidWYsICZpOTE1X3Bt dV9jcHVtYXNrKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGNwdW1hc2ssIDA0NDQsIGk5MTVf cG11X2dldF9hdHRyX2NwdW1hc2ssIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAq aTkxNV9jcHVtYXNrX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2NwdW1hc2suYXR0ciwKKwlOVUxM LAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVfY3B1bWFza19h dHRyX2dyb3VwID0geworCS5hdHRycyA9IGk5MTVfY3B1bWFza19hdHRycywKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICppOTE1X3BtdV9hdHRyX2dyb3Vwc1tdID0g eworCSZpOTE1X3BtdV9mb3JtYXRfYXR0cl9ncm91cCwKKwkmaTkxNV9wbXVfZXZlbnRzX2F0dHJf Z3JvdXAsCisJJmk5MTVfcG11X2NwdW1hc2tfYXR0cl9ncm91cCwKKwlOVUxMCit9OworCitzdGF0 aWMgaW50IGk5MTVfcG11X2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0 X25vZGUgKm5vZGUpCit7CisJdW5zaWduZWQgaW50IHRhcmdldDsKKworCXRhcmdldCA9IGNwdW1h c2tfYW55X2FuZCgmaTkxNV9wbXVfY3B1bWFzaywgJmk5MTVfcG11X2NwdW1hc2spOworCS8qIFNl bGVjdCB0aGUgZmlyc3Qgb25saW5lIENQVSBhcyBhIGRlc2lnbmF0ZWQgcmVhZGVyLiAqLworCWlm ICh0YXJnZXQgPj0gbnJfY3B1X2lkcykKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgJmk5MTVfcG11 X2NwdW1hc2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfY3B1X29m ZmxpbmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpCit7CisJc3Ry dWN0IGk5MTVfcG11ICpwbXUgPSBobGlzdF9lbnRyeV9zYWZlKG5vZGUsIHR5cGVvZigqcG11KSwg bm9kZSk7CisJdW5zaWduZWQgaW50IHRhcmdldDsKKworCWlmIChjcHVtYXNrX3Rlc3RfYW5kX2Ns ZWFyX2NwdShjcHUsICZpOTE1X3BtdV9jcHVtYXNrKSkgeworCQl0YXJnZXQgPSBjcHVtYXNrX2Fu eV9idXQodG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKGNwdSksIGNwdSk7CisJCS8qIE1pZ3JhdGUg ZXZlbnRzIGlmIHRoZXJlIGlzIGEgdmFsaWQgdGFyZ2V0ICovCisJCWlmICh0YXJnZXQgPCBucl9j cHVfaWRzKSB7CisJCQljcHVtYXNrX3NldF9jcHUodGFyZ2V0LCAmaTkxNV9wbXVfY3B1bWFzayk7 CisJCQlwZXJmX3BtdV9taWdyYXRlX2NvbnRleHQoJnBtdS0+YmFzZSwgY3B1LCB0YXJnZXQpOwor CQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJaW50IHJldDsKKworCWlmIChJTlRFTF9HRU4o aTkxNSkgPD0gMikgeworCQlEUk1fSU5GTygiUE1VIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgR1BV LiIpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gY3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkoQ1BV SFBfQVBfUEVSRl9YODZfVU5DT1JFX09OTElORSwKKwkJCQkgICAgICAicGVyZi94ODYvaW50ZWwv aTkxNTpvbmxpbmUiLAorCQkJCSAgICAgIGk5MTVfcG11X2NwdV9vbmxpbmUsCisJCQkJICAgICAg aTkxNV9wbXVfY3B1X29mZmxpbmUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2hwX3N0YXRlOwor CisJcmV0ID0gY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlKENQVUhQX0FQX1BFUkZfWDg2X1VOQ09S RV9PTkxJTkUsCisJCQkJICAgICAgICZpOTE1LT5wbXUubm9kZSk7CisJaWYgKHJldCkKKwkJZ290 byBlcnJfaHBfaW5zdGFuY2U7CisKKwlpOTE1LT5wbXUuYmFzZS5hdHRyX2dyb3Vwcwk9IGk5MTVf cG11X2F0dHJfZ3JvdXBzOworCWk5MTUtPnBtdS5iYXNlLnRhc2tfY3R4X25yCT0gcGVyZl9pbnZh bGlkX2NvbnRleHQ7CisJaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdAk9IGk5MTVfcG11X2V2ZW50 X2luaXQ7CisJaTkxNS0+cG11LmJhc2UuYWRkCQk9IGk5MTVfcG11X2V2ZW50X2FkZDsKKwlpOTE1 LT5wbXUuYmFzZS5kZWwJCT0gaTkxNV9wbXVfZXZlbnRfZGVsOworCWk5MTUtPnBtdS5iYXNlLnN0 YXJ0CQk9IGk5MTVfcG11X2V2ZW50X3N0YXJ0OworCWk5MTUtPnBtdS5iYXNlLnN0b3AJCT0gaTkx NV9wbXVfZXZlbnRfc3RvcDsKKwlpOTE1LT5wbXUuYmFzZS5yZWFkCQk9IGk5MTVfcG11X2V2ZW50 X3JlYWQ7CisJaTkxNS0+cG11LmJhc2UuZXZlbnRfaWR4CT0gaTkxNV9wbXVfZXZlbnRfZXZlbnRf aWR4OworCisJc3Bpbl9sb2NrX2luaXQoJmk5MTUtPnBtdS5sb2NrKTsKKwlocnRpbWVyX2luaXQo Jmk5MTUtPnBtdS50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlp OTE1LT5wbXUudGltZXIuZnVuY3Rpb24gPSBpOTE1X3NhbXBsZTsKKwlpOTE1LT5wbXUuZW5hYmxl ID0gMDsKKworCXJldCA9IHBlcmZfcG11X3JlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSwgImk5MTUi LCAtMSk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm47CisKKwlpOTE1LT5wbXUuYmFzZS5ldmVu dF9pbml0ID0gTlVMTDsKKworCVdBUk5fT04oY3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQ VUhQX0FQX1BFUkZfWDg2X1VOQ09SRV9PTkxJTkUsCisJCQkJCSAgICAmaTkxNS0+cG11Lm5vZGUp KTsKKworZXJyX2hwX2luc3RhbmNlOgorCWNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9B UF9QRVJGX1g4Nl9VTkNPUkVfT05MSU5FKTsKKworZXJyX2hwX3N0YXRlOgorCURSTV9OT1RFKCJG YWlsZWQgdG8gcmVnaXN0ZXIgUE1VISAoZXJyPSVkKVxuIiwgcmV0KTsKK30KKwordm9pZCBpOTE1 X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworCWlmICgh aTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdCkKKwkJcmV0dXJuOworCisJV0FSTl9PTihjcHVocF9z dGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfQVBfUEVSRl9YODZfVU5DT1JFX09OTElORSwKKwkJ CQkJICAgICZpOTE1LT5wbXUubm9kZSkpOworCWNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVI UF9BUF9QRVJGX1g4Nl9VTkNPUkVfT05MSU5FKTsKKworCWk5MTUtPnBtdS5lbmFibGUgPSAwOwor CisJaHJ0aW1lcl9jYW5jZWwoJmk5MTUtPnBtdS50aW1lcik7CisKKwlwZXJmX3BtdV91bnJlZ2lz dGVyKCZpOTE1LT5wbXUuYmFzZSk7CisJaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdCA9IE5VTEw7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA5NGI0MGE0NjlhZmQuLjk3MWQ2YTdmZDlh YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC0xODYsNiArMTg2LDkgQEAgc3RhdGljIGlu bGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9yZWdfdCByZWcpCiAjZGVmaW5lIFZJ REVPX0VOSEFOQ0VNRU5UX0NMQVNTCTIKICNkZWZpbmUgQ09QWV9FTkdJTkVfQ0xBU1MJMwogI2Rl ZmluZSBPVEhFUl9DTEFTUwkJNAorI2RlZmluZSBNQVhfRU5HSU5FX0NMQVNTCTQKKworI2RlZmlu ZSBNQVhfRU5HSU5FX0lOU1RBTkNFICAgIDEKIAogLyogUENJIGNvbmZpZyBzcGFjZSAqLwogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCmluZGV4IDNkMTM1YzNjZDM4MC4uODI1 MTBkOTcxYzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVf Y3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwpAQCAtMTk4 LDYgKzE5OCwxNSBAQCBpbnRlbF9lbmdpbmVfc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAogCUdFTV9CVUdfT04oaW5mby0+Y2xhc3MgPj0gQVJSQVlfU0laRShpbnRlbF9l bmdpbmVfY2xhc3NlcykpOwogCWNsYXNzX2luZm8gPSAmaW50ZWxfZW5naW5lX2NsYXNzZXNbaW5m by0+Y2xhc3NdOwogCisJaWYgKEdFTV9XQVJOX09OKGluZm8tPmNsYXNzID4gTUFYX0VOR0lORV9D TEFTUykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKEdFTV9XQVJOX09OKGluZm8tPmluc3Rh bmNlID4gTUFYX0VOR0lORV9JTlNUQU5DRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKEdF TV9XQVJOX09OKGRldl9wcml2LT5lbmdpbmVfY2xhc3NbaW5mby0+Y2xhc3NdW2luZm8tPmluc3Rh bmNlXSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJR0VNX0JVR19PTihkZXZfcHJpdi0+ZW5naW5l W2lkXSk7CiAJZW5naW5lID0ga3phbGxvYyhzaXplb2YoKmVuZ2luZSksIEdGUF9LRVJORUwpOwog CWlmICghZW5naW5lKQpAQCAtMjI1LDYgKzIzNCw3IEBAIGludGVsX2VuZ2luZV9zZXR1cChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAKIAlBVE9NSUNfSU5JVF9OT1RJRklFUl9I RUFEKCZlbmdpbmUtPmNvbnRleHRfc3RhdHVzX25vdGlmaWVyKTsKIAorCWRldl9wcml2LT5lbmdp bmVfY2xhc3NbaW5mby0+Y2xhc3NdW2luZm8tPmluc3RhbmNlXSA9IGVuZ2luZTsKIAlkZXZfcHJp di0+ZW5naW5lW2lkXSA9IGVuZ2luZTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuYwppbmRleCA4NWU2NGE0NWQwYmYuLjNiNDI0Y2M1NjEwYiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtMjE4MywzICsyMTgzLDI4 IEBAIGludCBpbnRlbF9pbml0X3ZlYm94X3JpbmdfYnVmZmVyKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKIAogCXJldHVybiBpbnRlbF9pbml0X3JpbmdfYnVmZmVyKGVuZ2luZSk7CiB9 CisKK3N0YXRpYyB1OCB1c2VyX2NsYXNzX21hcFtJOTE1X0VOR0lORV9DTEFTU19NQVhdID0gewor CVtJOTE1X0VOR0lORV9DTEFTU19PVEhFUl0gPSBPVEhFUl9DTEFTUywKKwlbSTkxNV9FTkdJTkVf Q0xBU1NfUkVOREVSXSA9IFJFTkRFUl9DTEFTUywKKwlbSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWV0g PSBDT1BZX0VOR0lORV9DTEFTUywKKwlbSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9dID0gVklERU9f REVDT0RFX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNFXSA9IFZJREVP X0VOSEFOQ0VNRU5UX0NMQVNTLAorfTsKKworc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCitpbnRl bF9lbmdpbmVfbG9va3VwX3VzZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4IGNs YXNzLCB1OCBpbnN0YW5jZSkKK3sKKwlpZiAoY2xhc3MgPj0gQVJSQVlfU0laRSh1c2VyX2NsYXNz X21hcCkpCisJCXJldHVybiBOVUxMOworCisJY2xhc3MgPSB1c2VyX2NsYXNzX21hcFtjbGFzc107 CisKKwlpZiAoV0FSTl9PTl9PTkNFKGNsYXNzID4gTUFYX0VOR0lORV9DTEFTUykpCisJCXJldHVy biBOVUxMOworCisJaWYgKGluc3RhbmNlID4gTUFYX0VOR0lORV9JTlNUQU5DRSkKKwkJcmV0dXJu IE5VTEw7CisKKwlyZXR1cm4gaTkxNS0+ZW5naW5lX2NsYXNzW2NsYXNzXVtpbnN0YW5jZV07Cit9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKaW5kZXggMTM4MTE2YTNiNTM3 Li5lMjBkZmIxNDI5YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jp bmdidWZmZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgK QEAgLTI0NSw2ICsyNDUsMjggQEAgc3RydWN0IGludGVsX2VuZ2luZV9jcyB7CiAJCUk5MTVfU0VM RlRFU1RfREVDTEFSRShib29sIG1vY2sgOiAxKTsKIAl9IGJyZWFkY3J1bWJzOwogCisJc3RydWN0 IHsKKwkJLyoqCisJCSAqIEBlbmFibGU6IEJpdG1hc2sgb2YgZW5hYmxlIHNhbXBsZSBldmVudHMg b24gdGhpcyBlbmdpbmUuCisJCSAqCisJCSAqIEJpdHMgY29ycmVzcG9uZCB0byBzYW1wbGUgZXZl bnQgdHlwZXMsIGZvciBpbnN0YW5jZQorCQkgKiBJOTE1X1NBTVBMRV9RVUVVRUQgaXMgYml0IDAg ZXRjLgorCQkgKi8KKwkJdTMyIGVuYWJsZTsKKwkJLyoqCisJCSAqIEBlbmFibGVfY291bnQ6IFJl ZmVyZW5jZSBjb3VudCBmb3IgdGhlIGVuYWJsZWQgc2FtcGxlcnMuCisJCSAqCisJCSAqIEluZGV4 IG51bWJlciBjb3JyZXNwb25kcyB0byB0aGUgYml0IG51bWJlciBmcm9tIEBlbmFibGUuCisJCSAq LworCQl1bnNpZ25lZCBpbnQgZW5hYmxlX2NvdW50W0k5MTVfUE1VX1NBTVBMRV9CSVRTXTsKKwkJ LyoqCisJCSAqIEBzYW1wbGU6IENvdW50ZXIgdmFsdWUgZm9yIHNhbXBsaW5nIGV2ZW50cy4KKwkJ ICoKKwkJICogT3VyIGludGVybmFsIHRpbWVyIHN0b3JlcyB0aGUgY3VycmVudCBjb3VudGVyIGlu IHRoaXMgZmllbGQuCisJCSAqLworCQl1NjQgc2FtcGxlW0k5MTVfRU5HSU5FX1NBTVBMRV9NQVhd OworCX0gcG11OworCiAJLyoKIAkgKiBBIHBvb2wgb2Ygb2JqZWN0cyB0byB1c2UgYXMgc2hhZG93 IGNvcGllcyBvZiBjbGllbnQgYmF0Y2ggYnVmZmVycwogCSAqIHdoZW4gdGhlIGNvbW1hbmQgcGFy c2VyIGlzIGVuYWJsZWQuIFByZXZlbnRzIHRoZSBjbGllbnQgZnJvbQpAQCAtNzUxLDQgKzc3Myw3 IEBAIHZvaWQgaW50ZWxfZW5naW5lc19yZXNldF9kZWZhdWx0X3N1Ym1pc3Npb24oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogCiBib29sIGludGVsX2VuZ2luZV9jYW5fc3RvcmVfZHdv cmQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIAorc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqCitpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUsIHU4IGNsYXNzLCB1OCBpbnN0YW5jZSk7CisKICNlbmRpZiAvKiBfSU5URUxfUklOR0JV RkZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5j bHVkZS91YXBpL2RybS9pOTE1X2RybS5oCmluZGV4IGZlMjVhMDFjODFmMi4uNjgyYWJhZmVjYzhj IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS91 YXBpL2RybS9pOTE1X2RybS5oCkBAIC04Niw2ICs4Niw2MyBAQCBlbnVtIGk5MTVfbW9jc190YWJs ZV9pbmRleCB7CiAJSTkxNV9NT0NTX0NBQ0hFRCwKIH07CiAKK2VudW0gZHJtX2k5MTVfZ2VtX2Vu Z2luZV9jbGFzcyB7CisJSTkxNV9FTkdJTkVfQ0xBU1NfT1RIRVIgPSAwLAorCUk5MTVfRU5HSU5F X0NMQVNTX1JFTkRFUiA9IDEsCisJSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWSA9IDIsCisJSTkxNV9F TkdJTkVfQ0xBU1NfVklERU8gPSAzLAorCUk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0Ug PSA0LAorCUk5MTVfRU5HSU5FX0NMQVNTX01BWCAvKiBub24tQUJJICovCit9OworCisvKioKKyAq IERPQzogcGVyZl9ldmVudHMgZXhwb3NlZCBieSBpOTE1IHRocm91Z2ggL3N5cy9idXMvZXZlbnRf c291cmNlcy9kcml2ZXJzL2k5MTUKKyAqCisgKi8KKworZW51bSBkcm1faTkxNV9wbXVfZW5naW5l X3NhbXBsZSB7CisJSTkxNV9TQU1QTEVfUVVFVUVEID0gMCwKKwlJOTE1X1NBTVBMRV9CVVNZID0g MSwKKwlJOTE1X1NBTVBMRV9XQUlUID0gMiwKKwlJOTE1X1NBTVBMRV9TRU1BID0gMywKKwlJOTE1 X0VOR0lORV9TQU1QTEVfTUFYIC8qIG5vbi1BQkkgKi8KK307CisKKyNkZWZpbmUgSTkxNV9QTVVf U0FNUExFX0JJVFMgKDQpCisjZGVmaW5lIEk5MTVfUE1VX1NBTVBMRV9NQVNLICgweGYpCisjZGVm aW5lIEk5MTVfUE1VX1NBTVBMRV9JTlNUQU5DRV9CSVRTICg4KQorI2RlZmluZSBJOTE1X1BNVV9D TEFTU19TSElGVCBcCisJKEk5MTVfUE1VX1NBTVBMRV9CSVRTICsgSTkxNV9QTVVfU0FNUExFX0lO U1RBTkNFX0JJVFMpCisKKyNkZWZpbmUgX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNl LCBzYW1wbGUpIFwKKwkoKGNsYXNzKSA8PCBJOTE1X1BNVV9DTEFTU19TSElGVCB8IFwKKwkoaW5z dGFuY2UpIDw8IEk5MTVfUE1VX1NBTVBMRV9CSVRTIHwgXAorCShzYW1wbGUpKQorCisjZGVmaW5l IEk5MTVfUE1VX0VOR0lORV9RVUVVRUQoY2xhc3MsIGluc3RhbmNlKSBcCisJX19JOTE1X1BNVV9F TkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9RVUVVRUQpCisKKyNkZWZpbmUgSTkx NV9QTVVfRU5HSU5FX0JVU1koY2xhc3MsIGluc3RhbmNlKSBcCisJX19JOTE1X1BNVV9FTkdJTkUo Y2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9CVVNZKQorCisjZGVmaW5lIEk5MTVfUE1VX0VO R0lORV9XQUlUKGNsYXNzLCBpbnN0YW5jZSkgXAorCV9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBp bnN0YW5jZSwgSTkxNV9TQU1QTEVfV0FJVCkKKworI2RlZmluZSBJOTE1X1BNVV9FTkdJTkVfU0VN QShjbGFzcywgaW5zdGFuY2UpIFwKKwlfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2Us IEk5MTVfU0FNUExFX1NFTUEpCisKKyNkZWZpbmUgX19JOTE1X1BNVV9PVEhFUih4KSAoX19JOTE1 X1BNVV9FTkdJTkUoMHhmZiwgMHhmZiwgMHhmKSArIDEgKyAoeCkpCisKKyNkZWZpbmUgSTkxNV9Q TVVfQUNUVUFMX0ZSRVFVRU5DWQlfX0k5MTVfUE1VX09USEVSKDApCisjZGVmaW5lIEk5MTVfUE1V X1JFUVVFU1RFRF9GUkVRVUVOQ1kJX19JOTE1X1BNVV9PVEhFUigxKQorI2RlZmluZSBJOTE1X1BN VV9JTlRFUlJVUFRTCQlfX0k5MTVfUE1VX09USEVSKDIpCisKKyNkZWZpbmUgSTkxNV9QTVVfUkM2 X1JFU0lERU5DWQkJX19JOTE1X1BNVV9PVEhFUigzKQorI2RlZmluZSBJOTE1X1BNVV9SQzZwX1JF U0lERU5DWQkJX19JOTE1X1BNVV9PVEhFUig0KQorI2RlZmluZSBJOTE1X1BNVV9SQzZwcF9SRVNJ REVOQ1kJX19JOTE1X1BNVV9PVEhFUig1KQorCisjZGVmaW5lIEk5MTVfUE1VX0xBU1QgSTkxNV9Q TVVfUkM2cHBfUkVTSURFTkNZCisKIC8qIEVhY2ggcmVnaW9uIGlzIGEgbWluaW11bSBvZiAxNmss IGFuZCB0aGVyZSBhcmUgYXQgbW9zdCAyNTUgb2YgdGhlbS4KICAqLwogI2RlZmluZSBJOTE1X05S X1RFWF9SRUdJT05TIDI1NQkvKiB0YWJsZSBzaXplIDJrIC0gbWF4aW11bSBkdWUgdG8gdXNlCi0t IAoyLjkuNQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==