From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 2/9] drm/i915/pmu: Expose a PMU interface for perf queries Date: Fri, 20 Oct 2017 10:24:33 +0100 Message-ID: <20171020092440.22470-3-tvrtko.ursulin@linux.intel.com> References: <20171020092440.22470-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x233.google.com (mail-wm0-x233.google.com [IPv6:2a00:1450:400c:c09::233]) by gabe.freedesktop.org (Postfix) with ESMTPS id 994AD6EC07 for ; Fri, 20 Oct 2017 09:24:50 +0000 (UTC) Received: by mail-wm0-x233.google.com with SMTP id b189so20458990wmd.4 for ; Fri, 20 Oct 2017 02:24:50 -0700 (PDT) In-Reply-To: <20171020092440.22470-1-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org Cc: Peter Zijlstra List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkZyb206IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpGcm9tOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpGcm9tOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0 cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgoKVGhlIGZpcnN0IGdvYWwgaXMgdG8gYmUgYWJsZSB0 byBtZWFzdXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1c3luZXNzCndpdGhvdXQgaGF2aW5n IHRvIHBvbGwgcmVnaXN0ZXJzIGZyb20gdXNlcnNwYWNlLiAoV2hpY2ggbm90IG9ubHkgaW5jdXJz CmhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGluZGVmaW5pdGVseSwgcGVydHVyYmluZyB0aGUg c3lzdGVtLCBidXQgYWxzbwpydW5zIHRoZSByaXNrIG9mIGhhbmdpbmcgdGhlIG1hY2hpbmUuKSBB cyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNlIHRoZQpwZXJmIGV2ZW50IGNvdW50ZXIgaW50ZXJm YWNlIHRvIHNhbXBsZSB0aGUgcmluZyByZWdpc3RlcnMgcGVyaW9kaWNhbGx5CmFuZCBzZW5kIHRo b3NlIHJlc3VsdHMgdG8gdXNlcnNwYWNlLgoKRnVuY3Rpb25hbGl0eSB3ZSBhcmUgZXhwb3J0aW5n IHRvIHVzZXJzcGFjZSBpcyB2aWEgdGhlIGV4aXN0aW5nIHBlcmYgUE1VCkFQSSBhbmQgY2FuIGJl IGV4ZXJjaXNlZCB2aWEgdGhlIGV4aXN0aW5nIHRvb2xzLiBGb3IgZXhhbXBsZToKCiAgcGVyZiBz dGF0IC1hIC1lIGk5MTUvcmNzMC1idXN5LyAtSSAxMDAwCgpXaWxsIHByaW50IHRoZSByZW5kZXIg ZW5naW5lIGJ1c3lubmVzIG9uY2UgcGVyIHNlY29uZC4gQWxsIHRoZSBwZXJmb3JtYW5jZQpjb3Vu dGVycyBjYW4gYmUgZW51bWVyYXRlZCAocGVyZiBsaXN0KSBhbmQgaGF2ZSB0aGVpciB1bml0IG9m IG1lYXN1cmUKY29ycmVjdGx5IHJlcG9ydGVkIGluIHN5c2ZzLgoKdjEtdjIgKENocmlzIFdpbHNv bik6Cgp2MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4KCnYzOiAo VHZydGtvIFVyc3VsaW4pCiAqIERlY291cGxlIHVBUEkgZnJvbSBpOTE1IGVuZ2luZSBpZHMuCiAq IENvbXBsZXRlIHVBUEkgZGVmaW5lcy4KICogUmVmYWN0b3Igc29tZSBjb2RlIHRvIGhlbHBlcnMg Zm9yIGNsYXJpdHkuCiAqIFNraXAgc2FtcGxpbmcgZGlzYWJsZWQgZW5naW5lcy4KICogRXhwb3Nl IGNvdW50ZXJzIGluIHN5c2ZzLgogKiBQYXNzIGluIGZha2UgcmVncyB0byBhdm9pZCBudWxsIHB0 ciBkZXJlZiBpbiBwZXJmIGNvcmUuCiAqIENvbnZlcnQgdG8gY2xhc3MvaW5zdGFuY2UgdUFQSS4K ICogVXNlIHNoYXJlZCBkcml2ZXIgY29kZSBmb3IgcmM2IHJlc2lkZW5jeSwgcG93ZXIgYW5kIGZy ZXF1ZW5jeS4KCnY0OiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmVnaXN0ZXIgUE1VIHdpdGggLnRh c2tfY3R4X25yPXBlcmZfaW52YWxpZF9jb250ZXh0CiAqIEV4cG9zZSBjcHVtYXNrIGZvciB0aGUg UE1VIHdpdGggdGhlIHNpbmdsZSBDUFUgaW4gdGhlIG1hc2sKICogUHJvcGVybHkgc3VwcG9ydCBw bXUtPnN0b3AoKTogaXQgc2hvdWxkIGNhbGwgcG11LT5yZWFkKCkKICogUHJvcGVybHkgc3VwcG9y dCBwbXUtPmRlbCgpOiBpdCBzaG91bGQgY2FsbCBzdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSkK ICogSW50cm9kdWNlIHJlZmNvdW50aW5nIG9mIGV2ZW50IHN1YnNjcmlwdGlvbnMuCiAqIE1ha2Ug cG11LmJ1c3lfc3RhdHMgYSByZWZjb3VudGVyIHRvIGF2b2lkIGJ1c3kgc3RhdHMgZ29pbmcgYXdh eQogICB3aXRoIHNvbWUgZGVsZXRlZCBldmVudC4KICogRXhwb3NlIGNwdW1hc2sgZm9yIGk5MTUg UE1VIHRvIGF2b2lkIG11bHRpcGxlIGV2ZW50cyBjcmVhdGlvbiBvZgogICB0aGUgc2FtZSB0eXBl IGZvbGxvd2VkIGJ5IGNvdW50ZXIgYWdncmVnYXRpb24gYnkgcGVyZi1zdGF0LgogKiBUcmFjayBD UFVzIGdldHRpbmcgb25saW5lL29mZmxpbmUgdG8gbWlncmF0ZSBwZXJmIGNvbnRleHQuIElmIChs aWtlbHkpCiAgIGNwdW1hc2sgd2lsbCBpbml0aWFsbHkgc2V0IENQVTAsIENPTkZJR19CT09UUEFS QU1fSE9UUExVR19DUFUwIHdpbGwgYmUKICAgbmVlZGVkIHRvIHNlZSBlZmZlY3Qgb2YgQ1BVIHN0 YXR1cyB0cmFja2luZy4KICogRW5kIHJlc3VsdCBpcyB0aGF0IG9ubHkgZ2xvYmFsIGV2ZW50cyBh cmUgc3VwcG9ydGVkIGFuZCBwZXJmIHN0YXQKICAgd29ya3MgY29ycmVjdGx5LgogKiBEZW55IHBl cmYgZHJpdmVyIGxldmVsIHNhbXBsaW5nIC0gaXQgaXMgcHJvaGliaXRlZCBmb3IgdW5jb3JlIFBN VS4KCnY1OiAoVHZydGtvIFVyc3VsaW4pCgogKiBEb24ndCBoYXJkY29kZSBudW1iZXIgb2YgZW5n aW5lIHNhbXBsZXJzLgogKiBSZXdyaXRlIGV2ZW50IHJlZi1jb3VudGluZyBmb3IgY29ycmVjdG5l c3MgYW5kIHNpbXBsaWNpdHkuCiAqIFN0b3JlIGluaXRpYWwgY291bnRlciB2YWx1ZSB3aGVuIHN0 YXJ0aW5nIGFscmVhZHkgZW5hYmxlZCBldmVudHMKICAgdG8gY29ycmVjdGx5IHJlcG9ydCB2YWx1 ZXMgdG8gYWxsIGxpc3RlbmVycy4KICogRml4IFJDNiByZXNpZGVuY3kgcmVhZG91dC4KICogQ29t bWVudHMsIEdQTCBoZWFkZXIuCgp2NjoKICogQWRkIG1pc3NpbmcgZW50cnkgdG8gdjQgY2hhbmdl bG9nLgogKiBGaXggYWNjb3VudGluZyBpbiBDUFUgaG90cGx1ZyBjYXNlIGJ5IGNvcHlpbmcgdGhl IGFwcHJvYWNoIGZyb20KICAgYXJjaC94ODYvZXZlbnRzL2ludGVsL2NzdGF0ZS5jLiAoRG1pdHJ5 IFJvZ296aGtpbikKCnY3OgogKiBMb2cgZmFpbHVyZSBtZXNzYWdlIG9ubHkgb24gZmFpbHVyZS4K ICogUmVtb3ZlIENQVSBob3RwbHVnIG5vdGlmaWNhdGlvbiBzdGF0ZSBvbiB1bnJlZ2lzdGVyLgoK djg6CiAqIEZpeCBlcnJvciB1bndpbmQgb24gZmFpbGVkIHJlZ2lzdHJhdGlvbi4KICogQ2hlY2tw YXRjaCBjbGVhbnVwLgoKdjk6CiAqIERyb3AgdGhlIGVuZXJneSBtZXRyaWMsIGl0IGlzIGF2YWls YWJsZSB2aWEgaW50ZWxfcmFwbF9wZXJmLgogICAoVmlsbGUgU3lyasOkbMOkKQogKiBVc2UgSEFT X1JDNihwKS4gKENocmlzIFdpbHNvbikKICogSGFuZGxlIHVuc3VwcG9ydGVkIG5vbi1lbmdpbmUg ZXZlbnRzLiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmViYXNlIGZvciBpbnRlbF9yYzZfcmVzaWRl bmN5X25zIG5lZWRpbmcgY2FsbGVyIG1hbmFnZWQKICAgcnVudGltZSBwbS4KICogRHJvcCBIQVNf UkM2IGNoZWNrcyBmcm9tIHRoZSByZWFkIGNhbGxiYWNrIHNpbmNlIGNyZWF0aW5nIHRob3NlCiAg IGV2ZW50cyB3aWxsIGJlIHJlamVjdGVkIGF0IGluaXQgdGltZSBhbHJlYWR5LgogKiBBZGQgY291 bnRlciB1bml0cyB0byBzeXNmcyBzbyBwZXJmIHN0YXQgb3V0cHV0IGlzIG5pY2VyLgogKiBDbGVh bnVwIHRoZSBhdHRyaWJ1dGUgdGFibGVzIGZvciBicmV2aXR5IGFuZCByZWFkYWJpbGl0eS4KCnYx MDoKICogRml4ZWQgcXVldWVkIGFjY291bnRpbmcuCgp2MTE6CiAqIE1vdmUgaW50ZWxfZW5naW5l X2xvb2t1cF91c2VyIHRvIGludGVsX2VuZ2luZV9jcy5jCiAqIENvbW1pdCB1cGRhdGUuIChKb29u YXMgTGFodGluZW4pCgp2MTI6CiAqIE1vcmUgYWNjdXJhdGUgc2FtcGxpbmcuIChDaHJpcyBXaWxz b24pCiAqIFN0b3JlIGFuZCByZXBvcnQgZnJlcXVlbmN5IGluIE1IeiBmb3IgYmV0dGVyIHVzYWJp bGl0eSBmcm9tCiAgIHBlcmYgc3RhdC4KICogUmVtb3ZlZCBtZXRyaWNzOiBxdWV1ZWQsIGludGVy cnVwdHMsIHJjNiBjb3VudGVycy4KICogU2FtcGxlIGVuZ2luZSBidXN5bmVzcyBiYXNlZCBvbiBz ZXFubyBkaWZmZXJlbmNlIG9ubHkKICAgZm9yIGxlc3MgTU1JTyAoYW5kIGZvcmNld2FrZSkgb24g YWxsIHBsYXRmb3Jtcy4gKENocmlzIFdpbHNvbikKCnYxMzoKICogQ29tbWVudCBzcGVsbGluZywg dXNlIG11bF91MzJfdTMyIHRvIHdvcmsgYXJvdW5kIHBvdGVudGlhbCBHQ0MKICAgaXNzdWUgYW5k IHNvbW5lIGNvZGUgYWxpZ25tZW50IGNoYW5nZXMuIChDaHJpcyBXaWxzb24pCgp2MTQ6CiAqIFJl YmFzZS4KCnYxNToKICogUmViYXNlIGZvciBSUFMgcmVmYWN0b3JpbmcuCgp2MTY6CiAqIFVzZSB0 aGUgZHluYW1pYyBzbG90IGluIHRoZSBDUFUgaG90cGx1ZyBzdGF0ZSBtYWNoaW5lIHNvIHRoYXQg d2UgYXJlCiAgIGZyZWUgdG8gc2V0dXAgb3VyIHN0YXRlIGFzIG11bHRpLWluc3RhbmNlLiBQcmV2 aW91c2x5IHdlIHdlcmUgcmUtdXNpbmcKICAgdGhlIENQVUhQX0FQX1BFUkZfWDg2X1VOQ09SRV9P TkxJTkUgc2xvdCB3aGljaCBpcyBuZWl0aGVyIHVzZWQgYXMKICAgbXVsdGktaW5zdGFuY2UsIG5v ciBvd25lZCBieSBvdXIgZHJpdmVyIHRvIHN0YXJ0IHdpdGguCiAqIFJlZ2lzdGVyIHRoZSBDUFUg aG90cGx1ZyBoYW5kbGVycyBhZnRlciB0aGUgUE1VLCBvdGhlcndpc2UgdGhlIGNhbGxiYWNrCiAg IHdpbGwgZ2V0IGNhbGxlZCBiZWZvcmUgdGhlIFBNVSBpcyBpbml0aWFsaXplZCB3aGljaCBjYW4g ZW5kIHVwIGluCiAgIHBlcmZfcG11X21pZ3JhdGVfY29udGV4dCB3aXRoIGFuIHVuLWluaXRpYWxp emVkIGJhc2UuCiAqIEFkZGVkIHdvcmthcm91bmQgZm9yIGEgcHJvYmFibGUgYnVnIGluIGNwdWhw IGNvcmUuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVs LmNvbT4KU2lnbmVkLW9mZi1ieTogRG1pdHJ5IFJvZ296aGtpbiA8ZG1pdHJ5LnYucm9nb3poa2lu QGludGVsLmNvbT4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+ CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IERtaXRyeSBS b2dvemhraW4gPGRtaXRyeS52LnJvZ296aGtpbkBpbnRlbC5jb20+CkNjOiBQZXRlciBaaWpsc3Ry YSA8cGV0ZXJ6QGluZnJhZGVhZC5vcmc+ClJldmlld2VkLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlz QGNocmlzLXdpbHNvbi5jby51az4gKHYxNSkKLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZSAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAg ICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8 ICAgNSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jICAgICAgICAgfCA3MDIgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cG11LmggICAgICAgICB8IDEwNCArKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcu aCAgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5j ICB8ICAzNSArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIHwgIDI2 ICsrCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAgICAgICAgICAgfCAgNDggKysrCiA5 IGZpbGVzIGNoYW5nZWQsIDkyNyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcG11LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDZjM2IwNDgx ZWY4Mi4uODU4Y2E5MmNmOTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBA QCBpOTE1LXkgOj0gaTkxNV9kcnYubyBcCiAKIGk5MTUtJChDT05GSUdfQ09NUEFUKSAgICs9IGk5 MTVfaW9jMzIubwogaTkxNS0kKENPTkZJR19ERUJVR19GUykgKz0gaTkxNV9kZWJ1Z2ZzLm8gaW50 ZWxfcGlwZV9jcmMubworaTkxNS0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gaTkxNV9wbXUubwog CiAjIEdFTSBjb2RlCiBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmMKaW5kZXggM2RiNTg1MTc1NmYwLi5hYWQ2NzljYzE1YzggMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYwpAQCAtNDgsNiArNDgsNyBAQAogCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNp bmNsdWRlICJpOTE1X3RyYWNlLmgiCisjaW5jbHVkZSAiaTkxNV9wbXUuaCIKICNpbmNsdWRlICJp OTE1X3ZncHUuaCIKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKICNpbmNsdWRlICJpbnRlbF91Yy5o IgpAQCAtMTIxNiw2ICsxMjE3LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfcmVnaXN0ZXIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSAmZGV2X3ByaXYtPmRybTsKIAogCWk5MTVfZ2VtX3Nocmlua2VyX2luaXQoZGV2X3ByaXYp OworCWk5MTVfcG11X3JlZ2lzdGVyKGRldl9wcml2KTsKIAogCS8qCiAJICogTm90aWZ5IGEgdmFs aWQgc3VyZmFjZSBhZnRlciBtb2Rlc2V0dGluZywKQEAgLTEyNzAsNiArMTI3Miw3IEBAIHN0YXRp YyB2b2lkIGk5MTVfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQogCWludGVsX29wcmVnaW9uX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwogCiAJaTkxNV9w ZXJmX3VucmVnaXN0ZXIoZGV2X3ByaXYpOworCWk5MTVfcG11X3VucmVnaXN0ZXIoZGV2X3ByaXYp OwogCiAJaTkxNV90ZWFyZG93bl9zeXNmcyhkZXZfcHJpdik7CiAJaTkxNV9ndWNfbG9nX3VucmVn aXN0ZXIoZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggMGZiYTkzYTA2Zjcw Li5kZmU1ZWE1NzlkMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNDAsNiArNDAsNyBA QAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5o PgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+ CiAjaW5jbHVkZSA8bGludXgvcG1fcW9zLmg+CiAjaW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24u aD4KICNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgpAQCAtMjI3OSw2ICsyMjgwLDggQEAgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgewogCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICprZXJuZWxf Y29udGV4dDsKIAkvKiBDb250ZXh0IG9ubHkgdG8gYmUgdXNlZCBmb3IgaW5qZWN0aW5nIHByZWVt cHRpb24gY29tbWFuZHMgKi8KIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqcHJlZW1wdF9jb250 ZXh0OworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZV9jbGFzc1tNQVhfRU5HSU5FX0NM QVNTICsgMV0KKwkJCQkJICAgIFtNQVhfRU5HSU5FX0lOU1RBTkNFICsgMV07CiAJc3RydWN0IGk5 MTVfdm1hICpzZW1hcGhvcmU7CiAKIAlzdHJ1Y3QgZHJtX2RtYV9oYW5kbGUgKnN0YXR1c19wYWdl X2RtYWg7CkBAIC0yNzQ5LDYgKzI3NTIsOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJ CWludAlpcnE7CiAJfSBscGVfYXVkaW87CiAKKwlzdHJ1Y3QgaTkxNV9wbXUgcG11OworCiAJLyoK IAkgKiBOT1RFOiBUaGlzIGlzIHRoZSBkcmkxL3VtcyBkdW5nZW9uLCBkb24ndCBhZGQgc3R1ZmYg aGVyZS4gWW91ciBwYXRjaAogCSAqIHdpbGwgYmUgcmVqZWN0ZWQuIEluc3RlYWQgbG9vayBmb3Ig YSBiZXR0ZXIgcGxhY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Bt dS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjUyMjIzNmMzZDU0MQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKQEAgLTAsMCArMSw3MDIgQEAKKy8qCisgKiBD b3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BlcmZf ZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlICJpOTE1 X2Rydi5oIgorI2luY2x1ZGUgImk5MTVfcG11LmgiCisjaW5jbHVkZSAiaW50ZWxfcmluZ2J1ZmZl ci5oIgorCisvKiBGcmVxdWVuY3kgZm9yIHRoZSBzYW1wbGluZyB0aW1lciBmb3IgZXZlbnRzIHdo aWNoIG5lZWQgaXQuICovCisjZGVmaW5lIEZSRVFVRU5DWSAyMDAKKyNkZWZpbmUgUEVSSU9EIG1h eF90KHU2NCwgMTAwMDAsIE5TRUNfUEVSX1NFQyAvIEZSRVFVRU5DWSkKKworI2RlZmluZSBFTkdJ TkVfU0FNUExFX01BU0sgXAorCShCSVQoSTkxNV9TQU1QTEVfQlVTWSkgfCBcCisJIEJJVChJOTE1 X1NBTVBMRV9XQUlUKSB8IFwKKwkgQklUKEk5MTVfU0FNUExFX1NFTUEpKQorCisjZGVmaW5lIEVO R0lORV9TQU1QTEVfQklUUyAoMSA8PCBJOTE1X1BNVV9TQU1QTEVfQklUUykKKworc3RhdGljIGNw dW1hc2tfdCBpOTE1X3BtdV9jcHVtYXNrID0gQ1BVX01BU0tfTk9ORTsKKworc3RhdGljIHU4IGVu Z2luZV9jb25maWdfc2FtcGxlKHU2NCBjb25maWcpCit7CisJcmV0dXJuIGNvbmZpZyAmIEk5MTVf UE1VX1NBTVBMRV9NQVNLOworfQorCitzdGF0aWMgdTggZW5naW5lX2V2ZW50X3NhbXBsZShzdHJ1 Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIGVuZ2luZV9jb25maWdfc2FtcGxlKGV2 ZW50LT5hdHRyLmNvbmZpZyk7Cit9CisKK3N0YXRpYyB1OCBlbmdpbmVfZXZlbnRfY2xhc3Moc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiAoZXZlbnQtPmF0dHIuY29uZmlnID4+ IEk5MTVfUE1VX0NMQVNTX1NISUZUKSAmIDB4ZmY7Cit9CisKK3N0YXRpYyB1OCBlbmdpbmVfZXZl bnRfaW5zdGFuY2Uoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiAoZXZlbnQt PmF0dHIuY29uZmlnID4+IEk5MTVfUE1VX1NBTVBMRV9CSVRTKSAmIDB4ZmY7Cit9CisKK3N0YXRp YyBib29sIGlzX2VuZ2luZV9jb25maWcodTY0IGNvbmZpZykKK3sKKwlyZXR1cm4gY29uZmlnIDwg X19JOTE1X1BNVV9PVEhFUigwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjb25maWdfZW5h YmxlZF9iaXQodTY0IGNvbmZpZykKK3sKKwlpZiAoaXNfZW5naW5lX2NvbmZpZyhjb25maWcpKQor CQlyZXR1cm4gZW5naW5lX2NvbmZpZ19zYW1wbGUoY29uZmlnKTsKKwllbHNlCisJCXJldHVybiBF TkdJTkVfU0FNUExFX0JJVFMgKyAoY29uZmlnIC0gX19JOTE1X1BNVV9PVEhFUigwKSk7Cit9CisK K3N0YXRpYyB1NjQgY29uZmlnX2VuYWJsZWRfbWFzayh1NjQgY29uZmlnKQoreworCXJldHVybiBC SVRfVUxMKGNvbmZpZ19lbmFibGVkX2JpdChjb25maWcpKTsKK30KKworc3RhdGljIGJvb2wgaXNf ZW5naW5lX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gaXNfZW5n aW5lX2NvbmZpZyhldmVudC0+YXR0ci5jb25maWcpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50 IGV2ZW50X2VuYWJsZWRfYml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4g Y29uZmlnX2VuYWJsZWRfYml0KGV2ZW50LT5hdHRyLmNvbmZpZyk7Cit9CisKK3N0YXRpYyBib29s IGdyYWJfZm9yY2V3YWtlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBib29sIGZ3KQor eworCWlmICghZncpCisJCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGk5MTUsIEZPUkNFV0FL RV9BTEwpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVfc2FtcGxl KHN0cnVjdCBpOTE1X3BtdV9zYW1wbGUgKnNhbXBsZSwgdTMyIHVuaXQsIHUzMiB2YWwpCit7CisJ LyoKKwkgKiBTaW5jZSB3ZSBhcmUgZG9pbmcgc3RvY2hhc3RpYyBzYW1wbGluZyBmb3IgdGhlc2Ug Y291bnRlcnMsCisJICogYXZlcmFnZSB0aGUgZGVsdGEgd2l0aCB0aGUgcHJldmlvdXMgdmFsdWUg Zm9yIGJldHRlciBhY2N1cmFjeS4KKwkgKi8KKwlzYW1wbGUtPmN1ciArPSBkaXZfdTY0KG11bF91 MzJfdTMyKHNhbXBsZS0+cHJldiArIHZhbCwgdW5pdCksIDIpOworCXNhbXBsZS0+cHJldiA9IHZh bDsKK30KKworc3RhdGljIHZvaWQgZW5naW5lc19zYW1wbGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKwllbnVt IGludGVsX2VuZ2luZV9pZCBpZDsKKwlib29sIGZ3ID0gZmFsc2U7CisKKwlpZiAoKGRldl9wcml2 LT5wbXUuZW5hYmxlICYgRU5HSU5FX1NBTVBMRV9NQVNLKSA9PSAwKQorCQlyZXR1cm47CisKKwlp ZiAoIWRldl9wcml2LT5ndC5hd2FrZSkKKwkJcmV0dXJuOworCisJaWYgKCFpbnRlbF9ydW50aW1l X3BtX2dldF9pZl9pbl91c2UoZGV2X3ByaXYpKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9lbmdp bmUoZW5naW5lLCBkZXZfcHJpdiwgaWQpIHsKKwkJdTMyIGN1cnJlbnRfc2Vxbm8gPSBpbnRlbF9l bmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSk7CisJCXUzMiBsYXN0X3NlcW5vID0gaW50ZWxfZW5naW5l X2xhc3Rfc3VibWl0KGVuZ2luZSk7CisJCXUzMiB2YWw7CisKKwkJdmFsID0gIWk5MTVfc2Vxbm9f cGFzc2VkKGN1cnJlbnRfc2Vxbm8sIGxhc3Rfc2Vxbm8pOworCisJCXVwZGF0ZV9zYW1wbGUoJmVu Z2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9CVVNZXSwKKwkJCSAgICAgIFBFUklPRCwgdmFs KTsKKworCQlpZiAodmFsICYmIChlbmdpbmUtPnBtdS5lbmFibGUgJgorCQkgICAgKEJJVChJOTE1 X1NBTVBMRV9XQUlUKSB8IEJJVChJOTE1X1NBTVBMRV9TRU1BKSkpKSB7CisJCQlmdyA9IGdyYWJf Zm9yY2V3YWtlKGRldl9wcml2LCBmdyk7CisKKwkJCXZhbCA9IEk5MTVfUkVBRF9GVyhSSU5HX0NU TChlbmdpbmUtPm1taW9fYmFzZSkpOworCQl9IGVsc2UgeworCQkJdmFsID0gMDsKKwkJfQorCisJ CXVwZGF0ZV9zYW1wbGUoJmVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9XQUlUXSwKKwkJ CSAgICAgIFBFUklPRCwgISEodmFsICYgUklOR19XQUlUKSk7CisKKwkJdXBkYXRlX3NhbXBsZSgm ZW5naW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FNUExFX1NFTUFdLAorCQkJICAgICAgUEVSSU9ELCAh ISh2YWwgJiBSSU5HX1dBSVRfU0VNQVBIT1JFKSk7CisJfQorCisJaWYgKGZ3KQorCQlpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7CisKKwlpbnRlbF9y dW50aW1lX3BtX3B1dChkZXZfcHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIGZyZXF1ZW5jeV9zYW1w bGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWlmIChkZXZfcHJpdi0+ cG11LmVuYWJsZSAmCisJICAgIGNvbmZpZ19lbmFibGVkX21hc2soSTkxNV9QTVVfQUNUVUFMX0ZS RVFVRU5DWSkpIHsKKwkJdTMyIHZhbDsKKworCQl2YWwgPSBkZXZfcHJpdi0+Z3RfcG0ucnBzLmN1 cl9mcmVxOworCQlpZiAoZGV2X3ByaXYtPmd0LmF3YWtlICYmCisJCSAgICBpbnRlbF9ydW50aW1l X3BtX2dldF9pZl9pbl91c2UoZGV2X3ByaXYpKSB7CisJCQl2YWwgPSBpbnRlbF9nZXRfY2FnZihk ZXZfcHJpdiwKKwkJCQkJICAgICBJOTE1X1JFQURfTk9UUkFDRShHRU42X1JQU1RBVDEpKTsKKwkJ CWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKKwkJfQorCisJCXVwZGF0ZV9zYW1wbGUo JmRldl9wcml2LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9BQ1RdLAorCQkJICAgICAg MSwgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCkpOworCX0KKworCWlmIChkZXZfcHJpdi0+ cG11LmVuYWJsZSAmCisJICAgIGNvbmZpZ19lbmFibGVkX21hc2soSTkxNV9QTVVfUkVRVUVTVEVE X0ZSRVFVRU5DWSkpIHsKKwkJdXBkYXRlX3NhbXBsZSgmZGV2X3ByaXYtPnBtdS5zYW1wbGVbX19J OTE1X1NBTVBMRV9GUkVRX1JFUV0sIDEsCisJCQkgICAgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJp diwKKwkJCQkJICAgICBkZXZfcHJpdi0+Z3RfcG0ucnBzLmN1cl9mcmVxKSk7CisJfQorfQorCitz dGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaTkxNV9zYW1wbGUoc3RydWN0IGhydGltZXIgKmhy dGltZXIpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJf b2YoaHJ0aW1lciwgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUsIHBtdS50aW1lcik7CisKKwlpZiAo aTkxNS0+cG11LmVuYWJsZSA9PSAwKQorCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisKKwll bmdpbmVzX3NhbXBsZShpOTE1KTsKKwlmcmVxdWVuY3lfc2FtcGxlKGk5MTUpOworCisJaHJ0aW1l cl9mb3J3YXJkX25vdyhocnRpbWVyLCBuc190b19rdGltZShQRVJJT0QpKTsKKwlyZXR1cm4gSFJU SU1FUl9SRVNUQVJUOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9kZXN0cm95KHN0 cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlXQVJOX09OKGV2ZW50LT5wYXJlbnQpOworfQor CitzdGF0aWMgaW50IGVuZ2luZV9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVu dC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisKKwlpZiAoIWludGVsX2VuZ2luZV9s b29rdXBfdXNlcihpOTE1LCBlbmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQpLAorCQkJCSAgICAgIGVu Z2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRj aCAoZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCkpIHsKKwljYXNlIEk5MTVfU0FNUExFX0JVU1k6 CisJY2FzZSBJOTE1X1NBTVBMRV9XQUlUOgorCQlicmVhazsKKwljYXNlIEk5MTVfU0FNUExFX1NF TUE6CisJCWlmIChJTlRFTF9HRU4oaTkxNSkgPCA2KQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IGk5MTVfcG11X2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50 KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2 ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKwlpbnQgY3B1LCByZXQ7CisKKwlp ZiAoZXZlbnQtPmF0dHIudHlwZSAhPSBldmVudC0+cG11LT50eXBlKQorCQlyZXR1cm4gLUVOT0VO VDsKKworCS8qIHVuc3VwcG9ydGVkIG1vZGVzIGFuZCBmaWx0ZXJzICovCisJaWYgKGV2ZW50LT5h dHRyLnNhbXBsZV9wZXJpb2QpIC8qIG5vIHNhbXBsaW5nICovCisJCXJldHVybiAtRUlOVkFMOwor CisJaWYgKGhhc19icmFuY2hfc3RhY2soZXZlbnQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisK KwlpZiAoZXZlbnQtPmNwdSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY3B1ID0gY3B1bWFz a19hbnlfYW5kKCZpOTE1X3BtdV9jcHVtYXNrLAorCQkJICAgICAgdG9wb2xvZ3lfc2libGluZ19j cHVtYXNrKGV2ZW50LT5jcHUpKTsKKwlpZiAoY3B1ID49IG5yX2NwdV9pZHMpCisJCXJldHVybiAt RU5PREVWOworCisJaWYgKGlzX2VuZ2luZV9ldmVudChldmVudCkpIHsKKwkJcmV0ID0gZW5naW5l X2V2ZW50X2luaXQoZXZlbnQpOworCX0gZWxzZSB7CisJCXJldCA9IDA7CisJCXN3aXRjaCAoZXZl bnQtPmF0dHIuY29uZmlnKSB7CisJCWNhc2UgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWToKKwkJ CWlmIChJU19WQUxMRVlWSUVXKGk5MTUpIHx8IElTX0NIRVJSWVZJRVcoaTkxNSkpCisJCQkJIC8q IFJlcXVpcmVzIGEgbXV0ZXggZm9yIHNhbXBsaW5nISAqLworCQkJCXJldCA9IC1FTk9ERVY7CisJ CWNhc2UgSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWToKKwkJCWlmIChJTlRFTF9HRU4oaTkx NSkgPCA2KQorCQkJCXJldCA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJl dCA9IC1FTk9FTlQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJZXZlbnQtPmNwdSA9IGNwdTsKKwlpZiAoIWV2ZW50LT5wYXJlbnQpCisJCWV2ZW50LT5k ZXN0cm95ID0gaTkxNV9wbXVfZXZlbnRfZGVzdHJveTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgdTY0IF9faTkxNV9wbXVfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2YoZXZlbnQt PnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCXU2NCB2YWwgPSAwOworCisJaWYgKGlz X2VuZ2luZV9ldmVudChldmVudCkpIHsKKwkJdTggc2FtcGxlID0gZW5naW5lX2V2ZW50X3NhbXBs ZShldmVudCk7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKworCQllbmdpbmUg PSBpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoaTkxNSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2Ns YXNzKGV2ZW50KSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7CisKKwkJ aWYgKFdBUk5fT05fT05DRSghZW5naW5lKSkgeworCQkJLyogRG8gbm90aGluZyAqLworCQl9IGVs c2UgeworCQkJdmFsID0gZW5naW5lLT5wbXUuc2FtcGxlW3NhbXBsZV0uY3VyOworCQl9CisJfSBl bHNlIHsKKwkJc3dpdGNoIChldmVudC0+YXR0ci5jb25maWcpIHsKKwkJY2FzZSBJOTE1X1BNVV9B Q1RVQUxfRlJFUVVFTkNZOgorCQkJdmFsID0KKwkJCSAgIGRpdl91NjQoaTkxNS0+cG11LnNhbXBs ZVtfX0k5MTVfU0FNUExFX0ZSRVFfQUNUXS5jdXIsCisJCQkJICAgRlJFUVVFTkNZKTsKKwkJCWJy ZWFrOworCQljYXNlIEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1k6CisJCQl2YWwgPQorCQkJ ICAgZGl2X3U2NChpOTE1LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9SRVFdLmN1ciwK KwkJCQkgICBGUkVRVUVOQ1kpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdmFsOwor fQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpl dmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwl1NjQg cHJldiwgbmV3OworCithZ2FpbjoKKwlwcmV2ID0gbG9jYWw2NF9yZWFkKCZod2MtPnByZXZfY291 bnQpOworCW5ldyA9IF9faTkxNV9wbXVfZXZlbnRfcmVhZChldmVudCk7CisKKwlpZiAobG9jYWw2 NF9jbXB4Y2hnKCZod2MtPnByZXZfY291bnQsIHByZXYsIG5ldykgIT0gcHJldikKKwkJZ290byBh Z2FpbjsKKworCWxvY2FsNjRfYWRkKG5ldyAtIHByZXYsICZldmVudC0+Y291bnQpOworfQorCitz dGF0aWMgdm9pZCBpOTE1X3BtdV9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQorewor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50LT5w bXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gZXZlbnRf ZW5hYmxlZF9iaXQoZXZlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tf aXJxc2F2ZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogU3RhcnQgdGhlIHNh bXBsaW5nIHRpbWVyIHdoZW4gZW5hYmxpbmcgdGhlIGZpcnN0IGV2ZW50LgorCSAqLworCWlmIChp OTE1LT5wbXUuZW5hYmxlID09IDApCisJCWhydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmk5MTUtPnBt dS50aW1lciwKKwkJCQkgICAgICAgbnNfdG9fa3RpbWUoUEVSSU9EKSwgMCwKKwkJCQkgICAgICAg SFJUSU1FUl9NT0RFX1JFTF9QSU5ORUQpOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIGJpdG1hc2sg b2YgZW5hYmxlZCBldmVudHMgYW5kIGluY3JlbWVudAorCSAqIHRoZSBldmVudCByZWZlcmVuY2Ug Y291bnRlci4KKwkgKi8KKwlHRU1fQlVHX09OKGJpdCA+PSBJOTE1X1BNVV9NQVNLX0JJVFMpOwor CUdFTV9CVUdfT04oaTkxNS0+cG11LmVuYWJsZV9jb3VudFtiaXRdID09IH4wKTsKKwlpOTE1LT5w bXUuZW5hYmxlIHw9IEJJVF9VTEwoYml0KTsKKwlpOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0r KzsKKworCS8qCisJICogRm9yIHBlci1lbmdpbmUgZXZlbnRzIHRoZSBiaXRtYXNrIGFuZCByZWZl cmVuY2UgY291bnRpbmcKKwkgKiBpcyBzdG9yZWQgcGVyIGVuZ2luZS4KKwkgKi8KKwlpZiAoaXNf ZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQl1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxl KGV2ZW50KTsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCisJCWVuZ2luZSA9 IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAorCQkJCQkJICBlbmdpbmVfZXZlbnRfY2xh c3MoZXZlbnQpLAorCQkJCQkJICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKTsKKwkJR0VN X0JVR19PTighZW5naW5lKTsKKwkJZW5naW5lLT5wbXUuZW5hYmxlIHw9IEJJVChzYW1wbGUpOwor CisJCUdFTV9CVUdfT04oc2FtcGxlID49IEk5MTVfUE1VX1NBTVBMRV9CSVRTKTsKKwkJR0VNX0JV R19PTihlbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSA9PSB+MCk7CisJCWVuZ2luZS0+ cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdKys7CisJfQorCisJLyoKKwkgKiBTdG9yZSB0aGUgY3Vy cmVudCBjb3VudGVyIHZhbHVlIHNvIHdlIGNhbiByZXBvcnQgdGhlIGNvcnJlY3QgZGVsdGEKKwkg KiBmb3IgYWxsIGxpc3RlbmVycy4gRXZlbiB3aGVuIHRoZSBldmVudCB3YXMgYWxyZWFkeSBlbmFi bGVkIGFuZCBoYXMKKwkgKiBhbiBleGlzdGluZyBub24temVybyB2YWx1ZS4KKwkgKi8KKwlsb2Nh bDY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIF9faTkxNV9wbXVfZXZlbnRfcmVhZChldmVu dCkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsK K30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZl bnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2Yo ZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCXVuc2lnbmVkIGludCBiaXQg PSBldmVudF9lbmFibGVkX2JpdChldmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNw aW5fbG9ja19pcnFzYXZlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOworCisJaWYgKGlzX2VuZ2lu ZV9ldmVudChldmVudCkpIHsKKwkJdTggc2FtcGxlID0gZW5naW5lX2V2ZW50X3NhbXBsZShldmVu dCk7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKworCQllbmdpbmUgPSBpbnRl bF9lbmdpbmVfbG9va3VwX3VzZXIoaTkxNSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2NsYXNzKGV2 ZW50KSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7CisJCUdFTV9CVUdf T04oIWVuZ2luZSk7CisJCUdFTV9CVUdfT04oc2FtcGxlID49IEk5MTVfUE1VX1NBTVBMRV9CSVRT KTsKKwkJR0VNX0JVR19PTihlbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSA9PSAwKTsK KwkJLyoKKwkJICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgYW5kIGNsZWFyIHRoZSBl bmFibGVkCisJCSAqIGJpdG1hc2sgd2hlbiB0aGUgbGFzdCBsaXN0ZW5lciBvbiBhbiBldmVudCBn b2VzIGF3YXkuCisJCSAqLworCQlpZiAoLS1lbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxl XSA9PSAwKQorCQkJZW5naW5lLT5wbXUuZW5hYmxlICY9IH5CSVQoc2FtcGxlKTsKKwl9CisKKwlH RU1fQlVHX09OKGJpdCA+PSBJOTE1X1BNVV9NQVNLX0JJVFMpOworCUdFTV9CVUdfT04oaTkxNS0+ cG11LmVuYWJsZV9jb3VudFtiaXRdID09IDApOworCS8qCisJICogRGVjcmVtZW50IHRoZSByZWZl cmVuY2UgY291bnQgYW5kIGNsZWFyIHRoZSBlbmFibGVkCisJICogYml0bWFzayB3aGVuIHRoZSBs YXN0IGxpc3RlbmVyIG9uIGFuIGV2ZW50IGdvZXMgYXdheS4KKwkgKi8KKwlpZiAoLS1pOTE1LT5w bXUuZW5hYmxlX2NvdW50W2JpdF0gPT0gMCkKKwkJaTkxNS0+cG11LmVuYWJsZSAmPSB+QklUX1VM TChiaXQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdz KTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50LCBpbnQgZmxhZ3MpCit7CisJaTkxNV9wbXVfZW5hYmxlKGV2ZW50KTsKKwlldmVu dC0+aHcuc3RhdGUgPSAwOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9zdG9wKHN0 cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFBFUkZf RUZfVVBEQVRFKQorCQlpOTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50KTsKKwlpOTE1X3BtdV9kaXNh YmxlKGV2ZW50KTsKKwlldmVudC0+aHcuc3RhdGUgPSBQRVJGX0hFU19TVE9QUEVEOworfQorCitz dGF0aWMgaW50IGk5MTVfcG11X2V2ZW50X2FkZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGlu dCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBQRVJGX0VGX1NUQVJUKQorCQlpOTE1X3BtdV9ldmVu dF9zdGFydChldmVudCwgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5 MTVfcG11X2V2ZW50X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sK KwlpOTE1X3BtdV9ldmVudF9zdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSk7Cit9CisKK3N0YXRp YyBpbnQgaTkxNV9wbXVfZXZlbnRfZXZlbnRfaWR4KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkK K3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgaTkxNV9wbXVfZm9ybWF0X3Nob3co c3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0 ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHI7CisKKwll YXR0ciA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUsIGF0dHIp OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAoY2hhciAqKWVhdHRyLT52YXIpOworfQor CisjZGVmaW5lIEk5MTVfUE1VX0ZPUk1BVF9BVFRSKF9uYW1lLCBfY29uZmlnKSBcCisJKCYoKHN0 cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZVtdKSB7IFwKKwkJeyAuYXR0ciA9IF9fQVRUUihfbmFtZSwg MDQ0NCwgaTkxNV9wbXVfZm9ybWF0X3Nob3csIE5VTEwpLCBcCisJCSAgLnZhciA9ICh2b2lkICop X2NvbmZpZywgfSBcCisJfSlbMF0uYXR0ci5hdHRyKQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0 ZSAqaTkxNV9wbXVfZm9ybWF0X2F0dHJzW10gPSB7CisJSTkxNV9QTVVfRk9STUFUX0FUVFIoaTkx NV9ldmVudGlkLCAiY29uZmlnOjAtMjAiKSwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVfZm9ybWF0X2F0dHJfZ3JvdXAgPSB7CisJLm5h bWUgPSAiZm9ybWF0IiwKKwkuYXR0cnMgPSBpOTE1X3BtdV9mb3JtYXRfYXR0cnMsCit9OworCitz dGF0aWMgc3NpemVfdCBpOTE1X3BtdV9ldmVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJ CQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVj dCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHI7CisKKwllYXR0ciA9IGNvbnRhaW5lcl9vZihhdHRy LCBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUsIGF0dHIpOworCXJldHVybiBzcHJpbnRmKGJ1Ziwg ImNvbmZpZz0weCVseFxuIiwgKHVuc2lnbmVkIGxvbmcpZWF0dHItPnZhcik7Cit9CisKKyNkZWZp bmUgSTkxNV9FVkVOVF9BVFRSKF9uYW1lLCBfY29uZmlnKSBcCisJKCYoKHN0cnVjdCBkZXZfZXh0 X2F0dHJpYnV0ZVtdKSB7IFwKKwkJeyAuYXR0ciA9IF9fQVRUUihfbmFtZSwgMDQ0NCwgaTkxNV9w bXVfZXZlbnRfc2hvdywgTlVMTCksIFwKKwkJICAudmFyID0gKHZvaWQgKilfY29uZmlnLCB9IFwK Kwl9KVswXS5hdHRyLmF0dHIpCisKKyNkZWZpbmUgSTkxNV9FVkVOVF9TVFIoX25hbWUsIF9zdHIp IFwKKwkoJigoc3RydWN0IHBlcmZfcG11X2V2ZW50c19hdHRyW10pIHsgXAorCQl7IC5hdHRyCSAg ICAgPSBfX0FUVFIoX25hbWUsIDA0NDQsIHBlcmZfZXZlbnRfc3lzZnNfc2hvdywgTlVMTCksIFwK KwkJICAuaWQJICAgICA9IDAsIFwKKwkJICAuZXZlbnRfc3RyID0gX3N0ciwgfSBcCisJfSlbMF0u YXR0ci5hdHRyKQorCisjZGVmaW5lIEk5MTVfRVZFTlQoX25hbWUsIF9jb25maWcsIF91bml0KSBc CisJSTkxNV9FVkVOVF9BVFRSKF9uYW1lLCBfY29uZmlnKSwgXAorCUk5MTVfRVZFTlRfU1RSKF9u YW1lLnVuaXQsIF91bml0KQorCisjZGVmaW5lIEk5MTVfRU5HSU5FX0VWRU5UKF9uYW1lLCBfY2xh c3MsIF9pbnN0YW5jZSwgX3NhbXBsZSkgXAorCUk5MTVfRVZFTlRfQVRUUihfbmFtZSwgX19JOTE1 X1BNVV9FTkdJTkUoX2NsYXNzLCBfaW5zdGFuY2UsIF9zYW1wbGUpKSwgXAorCUk5MTVfRVZFTlRf U1RSKF9uYW1lLnVuaXQsICJucyIpCisKKyNkZWZpbmUgSTkxNV9FTkdJTkVfRVZFTlRTKF9uYW1l LCBfY2xhc3MsIF9pbnN0YW5jZSkgXAorCUk5MTVfRU5HSU5FX0VWRU5UKF9uYW1lIyNfaW5zdGFu Y2UtYnVzeSwgX2NsYXNzLCBfaW5zdGFuY2UsIEk5MTVfU0FNUExFX0JVU1kpLCBcCisJSTkxNV9F TkdJTkVfRVZFTlQoX25hbWUjI19pbnN0YW5jZS1zZW1hLCBfY2xhc3MsIF9pbnN0YW5jZSwgSTkx NV9TQU1QTEVfU0VNQSksIFwKKwlJOTE1X0VOR0lORV9FVkVOVChfbmFtZSMjX2luc3RhbmNlLXdh aXQsIF9jbGFzcywgX2luc3RhbmNlLCBJOTE1X1NBTVBMRV9XQUlUKQorCitzdGF0aWMgc3RydWN0 IGF0dHJpYnV0ZSAqaTkxNV9wbXVfZXZlbnRzX2F0dHJzW10gPSB7CisJSTkxNV9FTkdJTkVfRVZF TlRTKHJjcywgSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSLCAwKSwKKwlJOTE1X0VOR0lORV9FVkVO VFMoYmNzLCBJOTE1X0VOR0lORV9DTEFTU19DT1BZLCAwKSwKKwlJOTE1X0VOR0lORV9FVkVOVFMo dmNzLCBJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMCksCisJSTkxNV9FTkdJTkVfRVZFTlRTKHZj cywgSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDEpLAorCUk5MTVfRU5HSU5FX0VWRU5UUyh2ZWNz LCBJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNFLCAwKSwKKworCUk5MTVfRVZFTlQoYWN0 dWFsLWZyZXF1ZW5jeSwgICAgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSwgICAgIk1IeiIpLAor CUk5MTVfRVZFTlQocmVxdWVzdGVkLWZyZXF1ZW5jeSwgSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFV RU5DWSwgIk1IeiIpLAorCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmli dXRlX2dyb3VwIGk5MTVfcG11X2V2ZW50c19hdHRyX2dyb3VwID0geworCS5uYW1lID0gImV2ZW50 cyIsCisJLmF0dHJzID0gaTkxNV9wbXVfZXZlbnRzX2F0dHJzLAorfTsKKworc3RhdGljIHNzaXpl X3QKK2k5MTVfcG11X2dldF9hdHRyX2NwdW1hc2soc3RydWN0IGRldmljZSAqZGV2LAorCQkJICBz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXJldHVy biBjcHVtYXBfcHJpbnRfdG9fcGFnZWJ1Zih0cnVlLCBidWYsICZpOTE1X3BtdV9jcHVtYXNrKTsK K30KKworc3RhdGljIERFVklDRV9BVFRSKGNwdW1hc2ssIDA0NDQsIGk5MTVfcG11X2dldF9hdHRy X2NwdW1hc2ssIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTkxNV9jcHVtYXNr X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2NwdW1hc2suYXR0ciwKKwlOVUxMLAorfTsKKworc3Rh dGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVfY3B1bWFza19hdHRyX2dyb3VwID0g eworCS5hdHRycyA9IGk5MTVfY3B1bWFza19hdHRycywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgYXR0cmlidXRlX2dyb3VwICppOTE1X3BtdV9hdHRyX2dyb3Vwc1tdID0geworCSZpOTE1X3Bt dV9mb3JtYXRfYXR0cl9ncm91cCwKKwkmaTkxNV9wbXVfZXZlbnRzX2F0dHJfZ3JvdXAsCisJJmk5 MTVfcG11X2NwdW1hc2tfYXR0cl9ncm91cCwKKwlOVUxMCit9OworCisjaWZkZWYgQ09ORklHX0hP VFBMVUdfQ1BVCitzdGF0aWMgaW50IGk5MTVfcG11X2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNw dSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpCit7CisJc3RydWN0IGk5MTVfcG11ICpwbXUgPSBo bGlzdF9lbnRyeV9zYWZlKG5vZGUsIHR5cGVvZigqcG11KSwgbm9kZSk7CisJdW5zaWduZWQgaW50 IHRhcmdldDsKKworCUdFTV9CVUdfT04oIXBtdS0+YmFzZS5ldmVudF9pbml0KTsKKworCXRhcmdl dCA9IGNwdW1hc2tfYW55X2FuZCgmaTkxNV9wbXVfY3B1bWFzaywgJmk5MTVfcG11X2NwdW1hc2sp OworCS8qIFNlbGVjdCB0aGUgZmlyc3Qgb25saW5lIENQVSBhcyBhIGRlc2lnbmF0ZWQgcmVhZGVy LiAqLworCWlmICh0YXJnZXQgPj0gbnJfY3B1X2lkcykKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwg Jmk5MTVfcG11X2NwdW1hc2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9w bXVfY3B1X29mZmxpbmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUp Cit7CisJc3RydWN0IGk5MTVfcG11ICpwbXUgPSBobGlzdF9lbnRyeV9zYWZlKG5vZGUsIHR5cGVv ZigqcG11KSwgbm9kZSk7CisJdW5zaWduZWQgaW50IHRhcmdldDsKKworCUdFTV9CVUdfT04oIXBt dS0+YmFzZS5ldmVudF9pbml0KTsKKworCWlmIChjcHVtYXNrX3Rlc3RfYW5kX2NsZWFyX2NwdShj cHUsICZpOTE1X3BtdV9jcHVtYXNrKSkgeworCQl0YXJnZXQgPSBjcHVtYXNrX2FueV9idXQodG9w b2xvZ3lfc2libGluZ19jcHVtYXNrKGNwdSksIGNwdSk7CisJCS8qIE1pZ3JhdGUgZXZlbnRzIGlm IHRoZXJlIGlzIGEgdmFsaWQgdGFyZ2V0ICovCisJCWlmICh0YXJnZXQgPCBucl9jcHVfaWRzKSB7 CisJCQljcHVtYXNrX3NldF9jcHUodGFyZ2V0LCAmaTkxNV9wbXVfY3B1bWFzayk7CisJCQlwZXJm X3BtdV9taWdyYXRlX2NvbnRleHQoJnBtdS0+YmFzZSwgY3B1LCB0YXJnZXQpOworCQl9CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfY3B1X3RtcF93YSh1bnNpZ25l ZCBpbnQgY3B1KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBjcHVocF9zdGF0ZSBj cHVocF9zbG90ID0gQ1BVSFBfSU5WQUxJRDsKKyNlbmRpZgorCitzdGF0aWMgaW50IGk5MTVfcG11 X3JlZ2lzdGVyX2NwdWhwX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQorewor I2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCWVudW0gY3B1aHBfc3RhdGUgc2xvdDsKKwlpbnQg cmV0OworCisJcmV0ID0gY3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkoQ1BVSFBfQVBfT05MSU5FX0RZ TiwKKwkJCQkgICAgICAicGVyZi94ODYvaW50ZWwvaTkxNTpvbmxpbmUiLAorCQkJCSAgICAgIGk5 MTVfcG11X2NwdV9vbmxpbmUsCisJCQkJICAgICAgaTkxNV9wbXVfY3B1X29mZmxpbmUpOworCWlm IChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc2xvdCA9IHJldDsKKwlyZXQgPSBjcHVocF9z dGF0ZV9hZGRfaW5zdGFuY2Uoc2xvdCwgJmk5MTUtPnBtdS5ub2RlKTsKKwlpZiAocmV0KSB7CisJ CWNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShzbG90KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlj cHVocF9zbG90ID0gc2xvdDsKKworCS8qIFdvcmthcm91bmQgZm9yIGEgcG9zc2libGUgYnVnIGlu IGNwdWhwIGNvcmUuICovCisJcmV0ID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5F X0RZTiwKKwkJCQkicGVyZi94ODYvaW50ZWwvaTkxNTp0bXB3YSIsCisJCQkJaTkxNV9wbXVfY3B1 X3RtcF93YSwgaTkxNV9wbXVfY3B1X3RtcF93YSk7CisJV0FSTl9PTihyZXQgPCAwKTsKKwlpZiAo cmV0ID4gMCkKKwkJY3B1aHBfcmVtb3ZlX3N0YXRlKHJldCk7CisKKyNlbmRpZgorCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyX2NwdWhwX3N0YXRlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQor CVdBUk5fT04oY3B1aHBfc2xvdCA9PSBDUFVIUF9JTlZBTElEKTsKKwlXQVJOX09OKGNwdWhwX3N0 YXRlX3JlbW92ZV9pbnN0YW5jZShjcHVocF9zbG90LCAmaTkxNS0+cG11Lm5vZGUpKTsKKwljcHVo cF9yZW1vdmVfbXVsdGlfc3RhdGUoY3B1aHBfc2xvdCk7CisjZW5kaWYKK30KKwordm9pZCBpOTE1 X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlpbnQgcmV0 OworCisJaWYgKElOVEVMX0dFTihpOTE1KSA8PSAyKSB7CisJCURSTV9JTkZPKCJQTVUgbm90IHN1 cHBvcnRlZCBmb3IgdGhpcyBHUFUuIik7CisJCXJldHVybjsKKwl9CisKKwlpOTE1LT5wbXUuYmFz ZS5hdHRyX2dyb3Vwcwk9IGk5MTVfcG11X2F0dHJfZ3JvdXBzOworCWk5MTUtPnBtdS5iYXNlLnRh c2tfY3R4X25yCT0gcGVyZl9pbnZhbGlkX2NvbnRleHQ7CisJaTkxNS0+cG11LmJhc2UuZXZlbnRf aW5pdAk9IGk5MTVfcG11X2V2ZW50X2luaXQ7CisJaTkxNS0+cG11LmJhc2UuYWRkCQk9IGk5MTVf cG11X2V2ZW50X2FkZDsKKwlpOTE1LT5wbXUuYmFzZS5kZWwJCT0gaTkxNV9wbXVfZXZlbnRfZGVs OworCWk5MTUtPnBtdS5iYXNlLnN0YXJ0CQk9IGk5MTVfcG11X2V2ZW50X3N0YXJ0OworCWk5MTUt PnBtdS5iYXNlLnN0b3AJCT0gaTkxNV9wbXVfZXZlbnRfc3RvcDsKKwlpOTE1LT5wbXUuYmFzZS5y ZWFkCQk9IGk5MTVfcG11X2V2ZW50X3JlYWQ7CisJaTkxNS0+cG11LmJhc2UuZXZlbnRfaWR4CT0g aTkxNV9wbXVfZXZlbnRfZXZlbnRfaWR4OworCisJc3Bpbl9sb2NrX2luaXQoJmk5MTUtPnBtdS5s b2NrKTsKKwlocnRpbWVyX2luaXQoJmk5MTUtPnBtdS50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBI UlRJTUVSX01PREVfUkVMKTsKKwlpOTE1LT5wbXUudGltZXIuZnVuY3Rpb24gPSBpOTE1X3NhbXBs ZTsKKworCXJldCA9IHBlcmZfcG11X3JlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSwgImk5MTUiLCAt MSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBpOTE1X3BtdV9yZWdpc3Rlcl9j cHVocF9zdGF0ZShpOTE1KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl91bnJlZzsKKworCXJldHVy bjsKKworZXJyX3VucmVnOgorCXBlcmZfcG11X3VucmVnaXN0ZXIoJmk5MTUtPnBtdS5iYXNlKTsK K2VycjoKKwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0ID0gTlVMTDsKKwlEUk1fTk9URSgiRmFp bGVkIHRvIHJlZ2lzdGVyIFBNVSEgKGVycj0lZClcbiIsIHJldCk7Cit9CisKK3ZvaWQgaTkxNV9w bXVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlpZiAoIWk5 MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQpCisJCXJldHVybjsKKworCVdBUk5fT04oaTkxNS0+cG11 LmVuYWJsZSk7CisKKwlocnRpbWVyX2NhbmNlbCgmaTkxNS0+cG11LnRpbWVyKTsKKworCWk5MTVf cG11X3VucmVnaXN0ZXJfY3B1aHBfc3RhdGUoaTkxNSk7CisKKwlwZXJmX3BtdV91bnJlZ2lzdGVy KCZpOTE1LT5wbXUuYmFzZSk7CisJaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdCA9IE5VTEw7Cit9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9wbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjFhYzhiMmUzNDYwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcG11LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAx NyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKi8KKyNpZm5kZWYgX19JOTE1X1BNVV9IX18KKyNkZWZpbmUgX19JOTE1 X1BNVV9IX18KKworZW51bSB7CisJX19JOTE1X1NBTVBMRV9GUkVRX0FDVCA9IDAsCisJX19JOTE1 X1NBTVBMRV9GUkVRX1JFUSwKKwlfX0k5MTVfTlVNX1BNVV9TQU1QTEVSUworfTsKKworLyoqCisg KiBIb3cgbWFueSBkaWZmZXJlbnQgZXZlbnRzIHdlIHRyYWNrIGluIHRoZSBnbG9iYWwgUE1VIG1h c2suCisgKgorICogSXQgaXMgYWxzbyB1c2VkIHRvIGtub3cgdG8gbmVlZGVkIG51bWJlciBvZiBl dmVudCByZWZlcmVuY2UgY291bnRlcnMuCisgKi8KKyNkZWZpbmUgSTkxNV9QTVVfTUFTS19CSVRT IFwKKwkoKDEgPDwgSTkxNV9QTVVfU0FNUExFX0JJVFMpICsgXAorCSAoSTkxNV9QTVVfTEFTVCAr IDEgLSBfX0k5MTVfUE1VX09USEVSKDApKSkKKworc3RydWN0IGk5MTVfcG11X3NhbXBsZSB7CisJ dTY0IGN1cjsKKwl1MzIgcHJldjsKK307CisKK3N0cnVjdCBpOTE1X3BtdSB7CisJLyoqCisJICog QG5vZGU6IExpc3Qgbm9kZSBmb3IgQ1BVIGhvdHBsdWcgaGFuZGxpbmcuCisJICovCisJc3RydWN0 IGhsaXN0X25vZGUgbm9kZTsKKwkvKioKKwkgKiBAYmFzZTogUE1VIGJhc2UuCisJICovCisJc3Ry dWN0IHBtdSBiYXNlOworCS8qKgorCSAqIEBsb2NrOiBMb2NrIHByb3RlY3RpbmcgZW5hYmxlIG1h c2sgYW5kIHJlZiBjb3VudCBoYW5kbGluZy4KKwkgKi8KKwlzcGlubG9ja190IGxvY2s7CisJLyoq CisJICogQHRpbWVyOiBUaW1lciBmb3IgaW50ZXJuYWwgaTkxNSBQTVUgc2FtcGxpbmcuCisJICov CisJc3RydWN0IGhydGltZXIgdGltZXI7CisJLyoqCisJICogQGVuYWJsZTogQml0bWFzayBvZiBh bGwgY3VycmVudGx5IGVuYWJsZWQgZXZlbnRzLgorCSAqCisJICogQml0cyBhcmUgZGVyaXZlZCBm cm9tIHVBUEkgZXZlbnQgbnVtYmVycyBpbiBhIHdheSB0aGF0IGxvdyAxNiBiaXRzCisJICogY29y cmVzcG9uZCB0byBlbmdpbmUgZXZlbnQgX3NhbXBsZV8gX3R5cGVfIChJOTE1X1NBTVBMRV9RVUVV RUQgaXMKKwkgKiBiaXQgMCksIGFuZCBoaWdoZXIgYml0cyBjb3JyZXNwb25kIHRvIG90aGVyIGV2 ZW50cyAoZm9yIGluc3RhbmNlCisJICogSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSBpcyBiaXQg MTYgZXRjKS4KKwkgKgorCSAqIEluIG90aGVyIHdvcmRzLCBsb3cgMTYgYml0cyBhcmUgbm90IHBl ciBlbmdpbmUgYnV0IHBlciBlbmdpbmUKKwkgKiBzYW1wbGVyIHR5cGUsIHdoaWxlIHRoZSB1cHBl ciBiaXRzIGFyZSBkaXJlY3RseSBtYXBwZWQgdG8gb3RoZXIKKwkgKiBldmVudCB0eXBlcy4KKwkg Ki8KKwl1NjQgZW5hYmxlOworCS8qKgorCSAqIEBlbmFibGVfY291bnQ6IFJlZmVyZW5jZSBjb3Vu dHMgZm9yIHRoZSBlbmFibGVkIGV2ZW50cy4KKwkgKgorCSAqIEFycmF5IGluZGljZXMgYXJlIG1h cHBlZCBpbiB0aGUgc2FtZSB3YXkgYXMgYml0cyBpbiB0aGUgQGVuYWJsZSBmaWVsZAorCSAqIGFu ZCB0aGV5IGFyZSB1c2VkIHRvIGNvbnRyb2wgc2FtcGxpbmcgb24vb2ZmIHdoZW4gbXVsdGlwbGUg Y2xpZW50cworCSAqIGFyZSB1c2luZyB0aGUgUE1VIEFQSS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQg ZW5hYmxlX2NvdW50W0k5MTVfUE1VX01BU0tfQklUU107CisJLyoqCisJICogQHNhbXBsZTogQ3Vy cmVudCBhbmQgcHJldmlvdXMgKHJhdykgY291bnRlcnMgZm9yIHNhbXBsaW5nIGV2ZW50cy4KKwkg KgorCSAqIFRoZXNlIGNvdW50ZXJzIGFyZSB1cGRhdGVkIGZyb20gdGhlIGk5MTUgUE1VIHNhbXBs aW5nIHRpbWVyLgorCSAqCisJICogT25seSBnbG9iYWwgY291bnRlcnMgYXJlIGhlbGQgaGVyZSwg d2hpbGUgdGhlIHBlci1lbmdpbmUgb25lcyBhcmUgaW4KKwkgKiBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzLgorCSAqLworCXN0cnVjdCBpOTE1X3BtdV9zYW1wbGUgc2FtcGxlW19fSTkxNV9OVU1fUE1V X1NBTVBMRVJTXTsKK307CisKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKK3ZvaWQgaTkxNV9w bXVfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwordm9pZCBpOTE1X3Bt dV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKKyNlbHNlCitzdGF0 aWMgaW5saW5lIHZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9wbXVfdW5yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkge30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oCmluZGV4IDY4YTU4Y2NlNmFiMS4uOGMxZDRmYmViYTUyIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVnLmgKQEAgLTE4Niw2ICsxODYsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9t bWlvX3JlZ192YWxpZChpOTE1X3JlZ190IHJlZykKICNkZWZpbmUgVklERU9fRU5IQU5DRU1FTlRf Q0xBU1MJMgogI2RlZmluZSBDT1BZX0VOR0lORV9DTEFTUwkzCiAjZGVmaW5lIE9USEVSX0NMQVNT CQk0CisjZGVmaW5lIE1BWF9FTkdJTkVfQ0xBU1MJNAorCisjZGVmaW5lIE1BWF9FTkdJTkVfSU5T VEFOQ0UgICAgMQogCiAvKiBQQ0kgY29uZmlnIHNwYWNlICovCiAKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZW5naW5lX2NzLmMKaW5kZXggYTQ3YTljNmJlYTUyLi4wMzlmZmY3OGZmOTQgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCkBAIC0yMDMsNiArMjAzLDE1IEBAIGlu dGVsX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJR0VN X0JVR19PTihpbmZvLT5jbGFzcyA+PSBBUlJBWV9TSVpFKGludGVsX2VuZ2luZV9jbGFzc2VzKSk7 CiAJY2xhc3NfaW5mbyA9ICZpbnRlbF9lbmdpbmVfY2xhc3Nlc1tpbmZvLT5jbGFzc107CiAKKwlp ZiAoR0VNX1dBUk5fT04oaW5mby0+Y2xhc3MgPiBNQVhfRU5HSU5FX0NMQVNTKSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlpZiAoR0VNX1dBUk5fT04oaW5mby0+aW5zdGFuY2UgPiBNQVhfRU5HSU5F X0lOU1RBTkNFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoR0VNX1dBUk5fT04oZGV2X3By aXYtPmVuZ2luZV9jbGFzc1tpbmZvLT5jbGFzc11baW5mby0+aW5zdGFuY2VdKSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKIAlHRU1fQlVHX09OKGRldl9wcml2LT5lbmdpbmVbaWRdKTsKIAllbmdpbmUg PSBremFsbG9jKHNpemVvZigqZW5naW5lKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlbmdpbmUpCkBA IC0yMzAsNiArMjM5LDcgQEAgaW50ZWxfZW5naW5lX3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKIAogCUFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoJmVuZ2luZS0+Y29u dGV4dF9zdGF0dXNfbm90aWZpZXIpOwogCisJZGV2X3ByaXYtPmVuZ2luZV9jbGFzc1tpbmZvLT5j bGFzc11baW5mby0+aW5zdGFuY2VdID0gZW5naW5lOwogCWRldl9wcml2LT5lbmdpbmVbaWRdID0g ZW5naW5lOwogCXJldHVybiAwOwogfQpAQCAtMTc4Myw2ICsxNzkzLDMxIEBAIHZvaWQgaW50ZWxf ZW5naW5lX2R1bXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgZHJtX3By aW50ZXIgKm0pCiAJZHJtX3ByaW50ZihtLCAiXG4iKTsKIH0KIAorc3RhdGljIHU4IHVzZXJfY2xh c3NfbWFwW0k5MTVfRU5HSU5FX0NMQVNTX01BWF0gPSB7CisJW0k5MTVfRU5HSU5FX0NMQVNTX09U SEVSXSA9IE9USEVSX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19SRU5ERVJdID0gUkVOREVS X0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19DT1BZXSA9IENPUFlfRU5HSU5FX0NMQVNTLAor CVtJOTE1X0VOR0lORV9DTEFTU19WSURFT10gPSBWSURFT19ERUNPREVfQ0xBU1MsCisJW0k5MTVf RU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0VdID0gVklERU9fRU5IQU5DRU1FTlRfQ0xBU1MsCit9 OworCitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKK2ludGVsX2VuZ2luZV9sb29rdXBfdXNlcihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggY2xhc3MsIHU4IGluc3RhbmNlKQorewor CWlmIChjbGFzcyA+PSBBUlJBWV9TSVpFKHVzZXJfY2xhc3NfbWFwKSkKKwkJcmV0dXJuIE5VTEw7 CisKKwljbGFzcyA9IHVzZXJfY2xhc3NfbWFwW2NsYXNzXTsKKworCWlmIChXQVJOX09OX09OQ0Uo Y2xhc3MgPiBNQVhfRU5HSU5FX0NMQVNTKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoaW5zdGFu Y2UgPiBNQVhfRU5HSU5FX0lOU1RBTkNFKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBpOTE1 LT5lbmdpbmVfY2xhc3NbY2xhc3NdW2luc3RhbmNlXTsKK30KKwogI2lmIElTX0VOQUJMRUQoQ09O RklHX0RSTV9JOTE1X1NFTEZURVNUKQogI2luY2x1ZGUgInNlbGZ0ZXN0cy9tb2NrX2VuZ2luZS5j IgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVm ZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKaW5kZXggMTcx ODZmMDY3NDA4Li4yODliYjI1ZGQ5NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5n YnVmZmVyLmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSAiaTkxNV9nZW1fYmF0Y2hfcG9vbC5o IgogI2luY2x1ZGUgImk5MTVfZ2VtX3JlcXVlc3QuaCIKICNpbmNsdWRlICJpOTE1X2dlbV90aW1l bGluZS5oIgorI2luY2x1ZGUgImk5MTVfcG11LmgiCiAjaW5jbHVkZSAiaTkxNV9zZWxmdGVzdC5o IgogCiBzdHJ1Y3QgZHJtX3ByaW50ZXI7CkBAIC0zMzcsNiArMzM4LDI4IEBAIHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgewogCQlJOTE1X1NFTEZURVNUX0RFQ0xBUkUoYm9vbCBtb2NrIDogMSk7CiAJ fSBicmVhZGNydW1iczsKIAorCXN0cnVjdCB7CisJCS8qKgorCQkgKiBAZW5hYmxlOiBCaXRtYXNr IG9mIGVuYWJsZSBzYW1wbGUgZXZlbnRzIG9uIHRoaXMgZW5naW5lLgorCQkgKgorCQkgKiBCaXRz IGNvcnJlc3BvbmQgdG8gc2FtcGxlIGV2ZW50IHR5cGVzLCBmb3IgaW5zdGFuY2UKKwkJICogSTkx NV9TQU1QTEVfUVVFVUVEIGlzIGJpdCAwIGV0Yy4KKwkJICovCisJCXUzMiBlbmFibGU7CisJCS8q KgorCQkgKiBAZW5hYmxlX2NvdW50OiBSZWZlcmVuY2UgY291bnQgZm9yIHRoZSBlbmFibGVkIHNh bXBsZXJzLgorCQkgKgorCQkgKiBJbmRleCBudW1iZXIgY29ycmVzcG9uZHMgdG8gdGhlIGJpdCBu dW1iZXIgZnJvbSBAZW5hYmxlLgorCQkgKi8KKwkJdW5zaWduZWQgaW50IGVuYWJsZV9jb3VudFtJ OTE1X1BNVV9TQU1QTEVfQklUU107CisJCS8qKgorCQkgKiBAc2FtcGxlOiBDb3VudGVyIHZhbHVl cyBmb3Igc2FtcGxpbmcgZXZlbnRzLgorCQkgKgorCQkgKiBPdXIgaW50ZXJuYWwgdGltZXIgc3Rv cmVzIHRoZSBjdXJyZW50IGNvdW50ZXJzIGluIHRoaXMgZmllbGQuCisJCSAqLworCQlzdHJ1Y3Qg aTkxNV9wbXVfc2FtcGxlIHNhbXBsZVtJOTE1X0VOR0lORV9TQU1QTEVfTUFYXTsKKwl9IHBtdTsK KwogCS8qCiAJICogQSBwb29sIG9mIG9iamVjdHMgdG8gdXNlIGFzIHNoYWRvdyBjb3BpZXMgb2Yg Y2xpZW50IGJhdGNoIGJ1ZmZlcnMKIAkgKiB3aGVuIHRoZSBjb21tYW5kIHBhcnNlciBpcyBlbmFi bGVkLiBQcmV2ZW50cyB0aGUgY2xpZW50IGZyb20KQEAgLTg0Myw0ICs4NjYsNyBAQCBib29sIGlu dGVsX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KTsKIAogdm9pZCBpbnRlbF9lbmdpbmVfZHVtcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsIHN0cnVjdCBkcm1fcHJpbnRlciAqcCk7CiAKK3N0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgor aW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1 OCBjbGFzcywgdTggaW5zdGFuY2UpOworCiAjZW5kaWYgLyogX0lOVEVMX1JJTkdCVUZGRVJfSF8g Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFw aS9kcm0vaTkxNV9kcm0uaAppbmRleCAxMjViZGU3ZDk1MDQuLmQzNWFmOWZmNjM1YyAxMDA2NDQK LS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0v aTkxNV9kcm0uaApAQCAtODYsNiArODYsNTQgQEAgZW51bSBpOTE1X21vY3NfdGFibGVfaW5kZXgg ewogCUk5MTVfTU9DU19DQUNIRUQsCiB9OwogCitlbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xh c3MgeworCUk5MTVfRU5HSU5FX0NMQVNTX09USEVSID0gMCwKKwlJOTE1X0VOR0lORV9DTEFTU19S RU5ERVIgPSAxLAorCUk5MTVfRU5HSU5FX0NMQVNTX0NPUFkgPSAyLAorCUk5MTVfRU5HSU5FX0NM QVNTX1ZJREVPID0gMywKKwlJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNFID0gNCwKKwlJ OTE1X0VOR0lORV9DTEFTU19NQVggLyogbm9uLUFCSSAqLworfTsKKworLyoqCisgKiBET0M6IHBl cmZfZXZlbnRzIGV4cG9zZWQgYnkgaTkxNSB0aHJvdWdoIC9zeXMvYnVzL2V2ZW50X3NvdXJjZXMv ZHJpdmVycy9pOTE1CisgKgorICovCisKK2VudW0gZHJtX2k5MTVfcG11X2VuZ2luZV9zYW1wbGUg eworCUk5MTVfU0FNUExFX0JVU1kgPSAwLAorCUk5MTVfU0FNUExFX1dBSVQgPSAxLAorCUk5MTVf U0FNUExFX1NFTUEgPSAyLAorCUk5MTVfRU5HSU5FX1NBTVBMRV9NQVggLyogbm9uLUFCSSAqLwor fTsKKworI2RlZmluZSBJOTE1X1BNVV9TQU1QTEVfQklUUyAoNCkKKyNkZWZpbmUgSTkxNV9QTVVf U0FNUExFX01BU0sgKDB4ZikKKyNkZWZpbmUgSTkxNV9QTVVfU0FNUExFX0lOU1RBTkNFX0JJVFMg KDgpCisjZGVmaW5lIEk5MTVfUE1VX0NMQVNTX1NISUZUIFwKKwkoSTkxNV9QTVVfU0FNUExFX0JJ VFMgKyBJOTE1X1BNVV9TQU1QTEVfSU5TVEFOQ0VfQklUUykKKworI2RlZmluZSBfX0k5MTVfUE1V X0VOR0lORShjbGFzcywgaW5zdGFuY2UsIHNhbXBsZSkgXAorCSgoY2xhc3MpIDw8IEk5MTVfUE1V X0NMQVNTX1NISUZUIHwgXAorCShpbnN0YW5jZSkgPDwgSTkxNV9QTVVfU0FNUExFX0JJVFMgfCBc CisJKHNhbXBsZSkpCisKKyNkZWZpbmUgSTkxNV9QTVVfRU5HSU5FX0JVU1koY2xhc3MsIGluc3Rh bmNlKSBcCisJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9C VVNZKQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9XQUlUKGNsYXNzLCBpbnN0YW5jZSkgXAor CV9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9TQU1QTEVfV0FJVCkKKwor I2RlZmluZSBJOTE1X1BNVV9FTkdJTkVfU0VNQShjbGFzcywgaW5zdGFuY2UpIFwKKwlfX0k5MTVf UE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIEk5MTVfU0FNUExFX1NFTUEpCisKKyNkZWZpbmUg X19JOTE1X1BNVV9PVEhFUih4KSAoX19JOTE1X1BNVV9FTkdJTkUoMHhmZiwgMHhmZiwgMHhmKSAr IDEgKyAoeCkpCisKKyNkZWZpbmUgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWQlfX0k5MTVfUE1V X09USEVSKDApCisjZGVmaW5lIEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1kJX19JOTE1X1BN VV9PVEhFUigxKQorCisjZGVmaW5lIEk5MTVfUE1VX0xBU1QgSTkxNV9QTVVfUkVRVUVTVEVEX0ZS RVFVRU5DWQorCiAvKiBFYWNoIHJlZ2lvbiBpcyBhIG1pbmltdW0gb2YgMTZrLCBhbmQgdGhlcmUg YXJlIGF0IG1vc3QgMjU1IG9mIHRoZW0uCiAgKi8KICNkZWZpbmUgSTkxNV9OUl9URVhfUkVHSU9O UyAyNTUJLyogdGFibGUgc2l6ZSAyayAtIG1heGltdW0gZHVlIHRvIHVzZQotLSAKMi45LjUKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=