From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: Re: [CI 2/9] drm/i915/pmu: Expose a PMU interface for perf queries Date: Thu, 30 Nov 2017 17:01:43 -0800 Message-ID: <20171201010142.2t5ejy2knrdowabj@intel.com> References: <20171121181852.16128-1-tvrtko.ursulin@linux.intel.com> <20171121181852.16128-2-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id DA0F16EB47 for ; Fri, 1 Dec 2017 01:01:45 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20171121181852.16128-2-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: Tvrtko Ursulin Cc: Peter Zijlstra , Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBOb3YgMjEsIDIwMTcgYXQgMDY6MTg6NDVQTSArMDAwMCwgVHZydGtvIFVyc3VsaW4g d3JvdGU6Cj4gRnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4K PiAKPiBGcm9tOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBGcm9t OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IEZyb206IERtaXRy eSBSb2dvemhraW4gPGRtaXRyeS52LnJvZ296aGtpbkBpbnRlbC5jb20+Cj4gCj4gVGhlIGZpcnN0 IGdvYWwgaXMgdG8gYmUgYWJsZSB0byBtZWFzdXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1 c3luZXNzCj4gd2l0aG91dCBoYXZpbmcgdG8gcG9sbCByZWdpc3RlcnMgZnJvbSB1c2Vyc3BhY2Uu IChXaGljaCBub3Qgb25seSBpbmN1cnMKPiBob2xkaW5nIHRoZSBmb3JjZXdha2UgbG9jayBpbmRl ZmluaXRlbHksIHBlcnR1cmJpbmcgdGhlIHN5c3RlbSwgYnV0IGFsc28KPiBydW5zIHRoZSByaXNr IG9mIGhhbmdpbmcgdGhlIG1hY2hpbmUuKSBBcyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNlIHRo ZQo+IHBlcmYgZXZlbnQgY291bnRlciBpbnRlcmZhY2UgdG8gc2FtcGxlIHRoZSByaW5nIHJlZ2lz dGVycyBwZXJpb2RpY2FsbHkKPiBhbmQgc2VuZCB0aG9zZSByZXN1bHRzIHRvIHVzZXJzcGFjZS4K PiAKPiBGdW5jdGlvbmFsaXR5IHdlIGFyZSBleHBvcnRpbmcgdG8gdXNlcnNwYWNlIGlzIHZpYSB0 aGUgZXhpc3RpbmcgcGVyZiBQTVUKPiBBUEkgYW5kIGNhbiBiZSBleGVyY2lzZWQgdmlhIHRoZSBl eGlzdGluZyB0b29scy4gRm9yIGV4YW1wbGU6Cj4gCj4gICBwZXJmIHN0YXQgLWEgLWUgaTkxNS9y Y3MwLWJ1c3kvIC1JIDEwMDAKPiAKPiBXaWxsIHByaW50IHRoZSByZW5kZXIgZW5naW5lIGJ1c3lu bmVzIG9uY2UgcGVyIHNlY29uZC4gQWxsIHRoZSBwZXJmb3JtYW5jZQo+IGNvdW50ZXJzIGNhbiBi ZSBlbnVtZXJhdGVkIChwZXJmIGxpc3QpIGFuZCBoYXZlIHRoZWlyIHVuaXQgb2YgbWVhc3VyZQo+ IGNvcnJlY3RseSByZXBvcnRlZCBpbiBzeXNmcy4KPiAKPiB2MS12MiAoQ2hyaXMgV2lsc29uKToK PiAKPiB2MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4KPiAKPiB2 MzogKFR2cnRrbyBVcnN1bGluKQo+ICAqIERlY291cGxlIHVBUEkgZnJvbSBpOTE1IGVuZ2luZSBp ZHMuCj4gICogQ29tcGxldGUgdUFQSSBkZWZpbmVzLgo+ICAqIFJlZmFjdG9yIHNvbWUgY29kZSB0 byBoZWxwZXJzIGZvciBjbGFyaXR5Lgo+ICAqIFNraXAgc2FtcGxpbmcgZGlzYWJsZWQgZW5naW5l cy4KPiAgKiBFeHBvc2UgY291bnRlcnMgaW4gc3lzZnMuCj4gICogUGFzcyBpbiBmYWtlIHJlZ3Mg dG8gYXZvaWQgbnVsbCBwdHIgZGVyZWYgaW4gcGVyZiBjb3JlLgo+ICAqIENvbnZlcnQgdG8gY2xh c3MvaW5zdGFuY2UgdUFQSS4KPiAgKiBVc2Ugc2hhcmVkIGRyaXZlciBjb2RlIGZvciByYzYgcmVz aWRlbmN5LCBwb3dlciBhbmQgZnJlcXVlbmN5Lgo+IAo+IHY0OiAoRG1pdHJ5IFJvZ296aGtpbikK PiAgKiBSZWdpc3RlciBQTVUgd2l0aCAudGFza19jdHhfbnI9cGVyZl9pbnZhbGlkX2NvbnRleHQK PiAgKiBFeHBvc2UgY3B1bWFzayBmb3IgdGhlIFBNVSB3aXRoIHRoZSBzaW5nbGUgQ1BVIGluIHRo ZSBtYXNrCj4gICogUHJvcGVybHkgc3VwcG9ydCBwbXUtPnN0b3AoKTogaXQgc2hvdWxkIGNhbGwg cG11LT5yZWFkKCkKPiAgKiBQcm9wZXJseSBzdXBwb3J0IHBtdS0+ZGVsKCk6IGl0IHNob3VsZCBj YWxsIHN0b3AoZXZlbnQsIFBFUkZfRUZfVVBEQVRFKQo+ICAqIEludHJvZHVjZSByZWZjb3VudGlu ZyBvZiBldmVudCBzdWJzY3JpcHRpb25zLgo+ICAqIE1ha2UgcG11LmJ1c3lfc3RhdHMgYSByZWZj b3VudGVyIHRvIGF2b2lkIGJ1c3kgc3RhdHMgZ29pbmcgYXdheQo+ICAgIHdpdGggc29tZSBkZWxl dGVkIGV2ZW50Lgo+ICAqIEV4cG9zZSBjcHVtYXNrIGZvciBpOTE1IFBNVSB0byBhdm9pZCBtdWx0 aXBsZSBldmVudHMgY3JlYXRpb24gb2YKPiAgICB0aGUgc2FtZSB0eXBlIGZvbGxvd2VkIGJ5IGNv dW50ZXIgYWdncmVnYXRpb24gYnkgcGVyZi1zdGF0Lgo+ICAqIFRyYWNrIENQVXMgZ2V0dGluZyBv bmxpbmUvb2ZmbGluZSB0byBtaWdyYXRlIHBlcmYgY29udGV4dC4gSWYgKGxpa2VseSkKPiAgICBj cHVtYXNrIHdpbGwgaW5pdGlhbGx5IHNldCBDUFUwLCBDT05GSUdfQk9PVFBBUkFNX0hPVFBMVUdf Q1BVMCB3aWxsIGJlCj4gICAgbmVlZGVkIHRvIHNlZSBlZmZlY3Qgb2YgQ1BVIHN0YXR1cyB0cmFj a2luZy4KPiAgKiBFbmQgcmVzdWx0IGlzIHRoYXQgb25seSBnbG9iYWwgZXZlbnRzIGFyZSBzdXBw b3J0ZWQgYW5kIHBlcmYgc3RhdAo+ICAgIHdvcmtzIGNvcnJlY3RseS4KPiAgKiBEZW55IHBlcmYg ZHJpdmVyIGxldmVsIHNhbXBsaW5nIC0gaXQgaXMgcHJvaGliaXRlZCBmb3IgdW5jb3JlIFBNVS4K PiAKPiB2NTogKFR2cnRrbyBVcnN1bGluKQo+IAo+ICAqIERvbid0IGhhcmRjb2RlIG51bWJlciBv ZiBlbmdpbmUgc2FtcGxlcnMuCj4gICogUmV3cml0ZSBldmVudCByZWYtY291bnRpbmcgZm9yIGNv cnJlY3RuZXNzIGFuZCBzaW1wbGljaXR5Lgo+ICAqIFN0b3JlIGluaXRpYWwgY291bnRlciB2YWx1 ZSB3aGVuIHN0YXJ0aW5nIGFscmVhZHkgZW5hYmxlZCBldmVudHMKPiAgICB0byBjb3JyZWN0bHkg cmVwb3J0IHZhbHVlcyB0byBhbGwgbGlzdGVuZXJzLgo+ICAqIEZpeCBSQzYgcmVzaWRlbmN5IHJl YWRvdXQuCj4gICogQ29tbWVudHMsIEdQTCBoZWFkZXIuCj4gCj4gdjY6Cj4gICogQWRkIG1pc3Np bmcgZW50cnkgdG8gdjQgY2hhbmdlbG9nLgo+ICAqIEZpeCBhY2NvdW50aW5nIGluIENQVSBob3Rw bHVnIGNhc2UgYnkgY29weWluZyB0aGUgYXBwcm9hY2ggZnJvbQo+ICAgIGFyY2gveDg2L2V2ZW50 cy9pbnRlbC9jc3RhdGUuYy4gKERtaXRyeSBSb2dvemhraW4pCj4gCj4gdjc6Cj4gICogTG9nIGZh aWx1cmUgbWVzc2FnZSBvbmx5IG9uIGZhaWx1cmUuCj4gICogUmVtb3ZlIENQVSBob3RwbHVnIG5v dGlmaWNhdGlvbiBzdGF0ZSBvbiB1bnJlZ2lzdGVyLgo+IAo+IHY4Ogo+ICAqIEZpeCBlcnJvciB1 bndpbmQgb24gZmFpbGVkIHJlZ2lzdHJhdGlvbi4KPiAgKiBDaGVja3BhdGNoIGNsZWFudXAuCj4g Cj4gdjk6Cj4gICogRHJvcCB0aGUgZW5lcmd5IG1ldHJpYywgaXQgaXMgYXZhaWxhYmxlIHZpYSBp bnRlbF9yYXBsX3BlcmYuCj4gICAgKFZpbGxlIFN5cmrDpGzDpCkKPiAgKiBVc2UgSEFTX1JDNihw KS4gKENocmlzIFdpbHNvbikKPiAgKiBIYW5kbGUgdW5zdXBwb3J0ZWQgbm9uLWVuZ2luZSBldmVu dHMuIChEbWl0cnkgUm9nb3poa2luKQo+ICAqIFJlYmFzZSBmb3IgaW50ZWxfcmM2X3Jlc2lkZW5j eV9ucyBuZWVkaW5nIGNhbGxlciBtYW5hZ2VkCj4gICAgcnVudGltZSBwbS4KPiAgKiBEcm9wIEhB U19SQzYgY2hlY2tzIGZyb20gdGhlIHJlYWQgY2FsbGJhY2sgc2luY2UgY3JlYXRpbmcgdGhvc2UK PiAgICBldmVudHMgd2lsbCBiZSByZWplY3RlZCBhdCBpbml0IHRpbWUgYWxyZWFkeS4KPiAgKiBB ZGQgY291bnRlciB1bml0cyB0byBzeXNmcyBzbyBwZXJmIHN0YXQgb3V0cHV0IGlzIG5pY2VyLgo+ ICAqIENsZWFudXAgdGhlIGF0dHJpYnV0ZSB0YWJsZXMgZm9yIGJyZXZpdHkgYW5kIHJlYWRhYmls aXR5Lgo+IAo+IHYxMDoKPiAgKiBGaXhlZCBxdWV1ZWQgYWNjb3VudGluZy4KPiAKPiB2MTE6Cj4g ICogTW92ZSBpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIgdG8gaW50ZWxfZW5naW5lX2NzLmMKPiAg KiBDb21taXQgdXBkYXRlLiAoSm9vbmFzIExhaHRpbmVuKQo+IAo+IHYxMjoKPiAgKiBNb3JlIGFj Y3VyYXRlIHNhbXBsaW5nLiAoQ2hyaXMgV2lsc29uKQo+ICAqIFN0b3JlIGFuZCByZXBvcnQgZnJl cXVlbmN5IGluIE1IeiBmb3IgYmV0dGVyIHVzYWJpbGl0eSBmcm9tCj4gICAgcGVyZiBzdGF0Lgo+ ICAqIFJlbW92ZWQgbWV0cmljczogcXVldWVkLCBpbnRlcnJ1cHRzLCByYzYgY291bnRlcnMuCj4g ICogU2FtcGxlIGVuZ2luZSBidXN5bmVzcyBiYXNlZCBvbiBzZXFubyBkaWZmZXJlbmNlIG9ubHkK PiAgICBmb3IgbGVzcyBNTUlPIChhbmQgZm9yY2V3YWtlKSBvbiBhbGwgcGxhdGZvcm1zLiAoQ2hy aXMgV2lsc29uKQo+IAo+IHYxMzoKPiAgKiBDb21tZW50IHNwZWxsaW5nLCB1c2UgbXVsX3UzMl91 MzIgdG8gd29yayBhcm91bmQgcG90ZW50aWFsIEdDQwo+ICAgIGlzc3VlIGFuZCBzb21uZSBjb2Rl IGFsaWdubWVudCBjaGFuZ2VzLiAoQ2hyaXMgV2lsc29uKQo+IAo+IHYxNDoKPiAgKiBSZWJhc2Uu Cj4gCj4gdjE1Ogo+ICAqIFJlYmFzZSBmb3IgUlBTIHJlZmFjdG9yaW5nLgo+IAo+IHYxNjoKPiAg KiBVc2UgdGhlIGR5bmFtaWMgc2xvdCBpbiB0aGUgQ1BVIGhvdHBsdWcgc3RhdGUgbWFjaGluZSBz byB0aGF0IHdlIGFyZQo+ICAgIGZyZWUgdG8gc2V0dXAgb3VyIHN0YXRlIGFzIG11bHRpLWluc3Rh bmNlLiBQcmV2aW91c2x5IHdlIHdlcmUgcmUtdXNpbmcKPiAgICB0aGUgQ1BVSFBfQVBfUEVSRl9Y ODZfVU5DT1JFX09OTElORSBzbG90IHdoaWNoIGlzIG5laXRoZXIgdXNlZCBhcwo+ICAgIG11bHRp LWluc3RhbmNlLCBub3Igb3duZWQgYnkgb3VyIGRyaXZlciB0byBzdGFydCB3aXRoLgo+ICAqIFJl Z2lzdGVyIHRoZSBDUFUgaG90cGx1ZyBoYW5kbGVycyBhZnRlciB0aGUgUE1VLCBvdGhlcndpc2Ug dGhlIGNhbGxiYWNrCj4gICAgd2lsbCBnZXQgY2FsbGVkIGJlZm9yZSB0aGUgUE1VIGlzIGluaXRp YWxpemVkIHdoaWNoIGNhbiBlbmQgdXAgaW4KPiAgICBwZXJmX3BtdV9taWdyYXRlX2NvbnRleHQg d2l0aCBhbiB1bi1pbml0aWFsaXplZCBiYXNlLgo+ICAqIEFkZGVkIHdvcmthcm91bmQgZm9yIGEg cHJvYmFibGUgYnVnIGluIGNwdWhwIGNvcmUuCj4gCj4gdjE3Ogo+ICAqIFJlbW92ZSB3b3JrYXJv dW5kIGZvciB0aGUgY3B1aHAgYnVnLgo+IAo+IHYxODoKPiAgKiBSZWJhc2UgZm9yIGRybV9pOTE1 X2dlbV9lbmdpbmVfY2xhc3MgZ2V0dGluZyB1cHN0cmVhbSBiZWZvcmUgdXMuCj4gCj4gdjE5Ogo+ ICAqIFJlYmFzZS4gKHRyaXZpYWwpCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxj aHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4g PHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBEbWl0cnkgUm9nb3po a2luIDxkbWl0cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8 dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlz LXdpbHNvbi5jby51az4KPiBDYzogRG1pdHJ5IFJvZ296aGtpbiA8ZG1pdHJ5LnYucm9nb3poa2lu QGludGVsLmNvbT4KPiBDYzogUGV0ZXIgWmlqbHN0cmEgPHBldGVyekBpbmZyYWRlYWQub3JnPgo+ IFJldmlld2VkLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAt LS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgIHwgICAzICsKPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgICA1ICsKPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9wbXUuYyAgICAgICAgIHwgNjg4ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmggICAgICAgICB8IDEw NCArKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgICAgICAgfCAgIDMg Kwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyAgfCAgMzMgKysKPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIHwgIDI2ICsrCj4gIGluY2x1 ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICB8ICAzOSArKwo+ICA5IGZpbGVzIGNo YW5nZWQsIDkwMiBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3BtdS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3BtdS5oCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCA0OWI5NTM1 ZTQwZDEuLjA5MWFlZjI4MTk2MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTQ2LDYg KzQ2LDcgQEAgaTkxNS15IDo9IGk5MTVfZHJ2Lm8gXAo+ICAKPiAgaTkxNS0kKENPTkZJR19DT01Q QVQpICAgKz0gaTkxNV9pb2MzMi5vCj4gIGk5MTUtJChDT05GSUdfREVCVUdfRlMpICs9IGk5MTVf ZGVidWdmcy5vIGludGVsX3BpcGVfY3JjLm8KPiAraTkxNS0kKENPTkZJR19QRVJGX0VWRU5UUykg Kz0gaTkxNV9wbXUubwo+ICAKPiAgIyBHRU0gY29kZQo+ICBpOTE1LXkgKz0gaTkxNV9jbWRfcGFy c2VyLm8gXAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IGluZGV4IDhkYmNiMDNiNWY1NC4uMDc5 M2EyN2UyYjk1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gQEAgLTQ4LDYgKzQ4LDcg QEAKPiAgCj4gICNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICAjaW5jbHVkZSAiaTkxNV90cmFjZS5o Igo+ICsjaW5jbHVkZSAiaTkxNV9wbXUuaCIKPiAgI2luY2x1ZGUgImk5MTVfdmdwdS5oIgo+ICAj aW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gICNpbmNsdWRlICJpbnRlbF91Yy5oIgo+IEBAIC0xMjE1 LDYgKzEyMTYsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRl dl9wcml2LT5kcm07Cj4gIAo+ICAJaTkxNV9nZW1fc2hyaW5rZXJfaW5pdChkZXZfcHJpdik7Cj4g KwlpOTE1X3BtdV9yZWdpc3RlcihkZXZfcHJpdik7Cj4gIAo+ICAJLyoKPiAgCSAqIE5vdGlmeSBh IHZhbGlkIHN1cmZhY2UgYWZ0ZXIgbW9kZXNldHRpbmcsCj4gQEAgLTEyNjksNiArMTI3MSw3IEBA IHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+ICAJaW50ZWxfb3ByZWdpb25fdW5yZWdpc3RlcihkZXZfcHJpdik7Cj4g IAo+ICAJaTkxNV9wZXJmX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwo+ICsJaTkxNV9wbXVfdW5yZWdp c3RlcihkZXZfcHJpdik7Cj4gIAo+ICAJaTkxNV90ZWFyZG93bl9zeXNmcyhkZXZfcHJpdik7Cj4g IAlpOTE1X2d1Y19sb2dfdW5yZWdpc3RlcihkZXZfcHJpdik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCj4gaW5kZXggNzQ2ZTRjYzIyYTYxLi4xMTkzNmM2OGUyZGIgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPiBAQCAtNDAsNiArNDAsNyBAQAo+ICAjaW5jbHVkZSA8bGludXgvaGFzaC5o Pgo+ICAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2ty ZWYuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KPiAgI2luY2x1ZGUgPGxpbnV4 L3BtX3Fvcy5oPgo+ICAjaW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4KPiAgI2luY2x1ZGUg PGxpbnV4L3NobWVtX2ZzLmg+Cj4gQEAgLTIyOTAsNiArMjI5MSw4IEBAIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlIHsKPiAgCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICprZXJuZWxfY29udGV4dDsK PiAgCS8qIENvbnRleHQgb25seSB0byBiZSB1c2VkIGZvciBpbmplY3RpbmcgcHJlZW1wdGlvbiBj b21tYW5kcyAqLwo+ICAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKnByZWVtcHRfY29udGV4dDsK PiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZV9jbGFzc1tNQVhfRU5HSU5FX0NMQVNT ICsgMV0KPiArCQkJCQkgICAgW01BWF9FTkdJTkVfSU5TVEFOQ0UgKyAxXTsKPiAgCj4gIAlzdHJ1 Y3QgZHJtX2RtYV9oYW5kbGUgKnN0YXR1c19wYWdlX2RtYWg7Cj4gIAlzdHJ1Y3QgcmVzb3VyY2Ug bWNoX3JlczsKPiBAQCAtMjc2MSw2ICsyNzY0LDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg ewo+ICAJCWludAlpcnE7Cj4gIAl9IGxwZV9hdWRpbzsKPiAgCj4gKwlzdHJ1Y3QgaTkxNV9wbXUg cG11Owo+ICsKPiAgCS8qCj4gIAkgKiBOT1RFOiBUaGlzIGlzIHRoZSBkcmkxL3VtcyBkdW5nZW9u LCBkb24ndCBhZGQgc3R1ZmYgaGVyZS4gWW91ciBwYXRjaAo+ICAJICogd2lsbCBiZSByZWplY3Rl ZC4gSW5zdGVhZCBsb29rIGZvciBhIGJldHRlciBwbGFjZS4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11 LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDFiNWVlNjdj MWJmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11 LmMKPiBAQCAtMCwwICsxLDY4OCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRl bCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiAr Cj4gKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbV9y dW50aW1lLmg+Cj4gKwo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImk5MTVf cG11LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9yaW5nYnVmZmVyLmgiCj4gKwo+ICsvKiBGcmVxdWVu Y3kgZm9yIHRoZSBzYW1wbGluZyB0aW1lciBmb3IgZXZlbnRzIHdoaWNoIG5lZWQgaXQuICovCj4g KyNkZWZpbmUgRlJFUVVFTkNZIDIwMAo+ICsjZGVmaW5lIFBFUklPRCBtYXhfdCh1NjQsIDEwMDAw LCBOU0VDX1BFUl9TRUMgLyBGUkVRVUVOQ1kpCj4gKwo+ICsjZGVmaW5lIEVOR0lORV9TQU1QTEVf TUFTSyBcCj4gKwkoQklUKEk5MTVfU0FNUExFX0JVU1kpIHwgXAo+ICsJIEJJVChJOTE1X1NBTVBM RV9XQUlUKSB8IFwKPiArCSBCSVQoSTkxNV9TQU1QTEVfU0VNQSkpCj4gKwo+ICsjZGVmaW5lIEVO R0lORV9TQU1QTEVfQklUUyAoMSA8PCBJOTE1X1BNVV9TQU1QTEVfQklUUykKPiArCj4gK3N0YXRp YyBjcHVtYXNrX3QgaTkxNV9wbXVfY3B1bWFzayA9IENQVV9NQVNLX05PTkU7Cj4gKwo+ICtzdGF0 aWMgdTggZW5naW5lX2NvbmZpZ19zYW1wbGUodTY0IGNvbmZpZykKPiArewo+ICsJcmV0dXJuIGNv bmZpZyAmIEk5MTVfUE1VX1NBTVBMRV9NQVNLOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTggZW5naW5l X2V2ZW50X3NhbXBsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4gK3sKPiArCXJldHVybiBl bmdpbmVfY29uZmlnX3NhbXBsZShldmVudC0+YXR0ci5jb25maWcpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdTggZW5naW5lX2V2ZW50X2NsYXNzKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPiArewo+ ICsJcmV0dXJuIChldmVudC0+YXR0ci5jb25maWcgPj4gSTkxNV9QTVVfQ0xBU1NfU0hJRlQpICYg MHhmZjsKPiArfQo+ICsKPiArc3RhdGljIHU4IGVuZ2luZV9ldmVudF9pbnN0YW5jZShzdHJ1Y3Qg cGVyZl9ldmVudCAqZXZlbnQpCj4gK3sKPiArCXJldHVybiAoZXZlbnQtPmF0dHIuY29uZmlnID4+ IEk5MTVfUE1VX1NBTVBMRV9CSVRTKSAmIDB4ZmY7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGlz X2VuZ2luZV9jb25maWcodTY0IGNvbmZpZykKPiArewo+ICsJcmV0dXJuIGNvbmZpZyA8IF9fSTkx NV9QTVVfT1RIRVIoMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29uZmlnX2Vu YWJsZWRfYml0KHU2NCBjb25maWcpCj4gK3sKPiArCWlmIChpc19lbmdpbmVfY29uZmlnKGNvbmZp ZykpCj4gKwkJcmV0dXJuIGVuZ2luZV9jb25maWdfc2FtcGxlKGNvbmZpZyk7Cj4gKwllbHNlCj4g KwkJcmV0dXJuIEVOR0lORV9TQU1QTEVfQklUUyArIChjb25maWcgLSBfX0k5MTVfUE1VX09USEVS KDApKTsKPiArfQo+ICsKPiArc3RhdGljIHU2NCBjb25maWdfZW5hYmxlZF9tYXNrKHU2NCBjb25m aWcpCj4gK3sKPiArCXJldHVybiBCSVRfVUxMKGNvbmZpZ19lbmFibGVkX2JpdChjb25maWcpKTsK PiArfQo+ICsKPiArc3RhdGljIGJvb2wgaXNfZW5naW5lX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50 ICpldmVudCkKPiArewo+ICsJcmV0dXJuIGlzX2VuZ2luZV9jb25maWcoZXZlbnQtPmF0dHIuY29u ZmlnKTsKPiArfQo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGludCBldmVudF9lbmFibGVkX2JpdChz dHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4gK3sKPiArCXJldHVybiBjb25maWdfZW5hYmxlZF9i aXQoZXZlbnQtPmF0dHIuY29uZmlnKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgZ3JhYl9mb3Jj ZXdha2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGJvb2wgZncpCj4gK3sKPiArCWlm ICghZncpCj4gKwkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoaTkxNSwgRk9SQ0VXQUtFX0FM TCk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3VwZGF0 ZV9zYW1wbGUoc3RydWN0IGk5MTVfcG11X3NhbXBsZSAqc2FtcGxlLCB1MzIgdW5pdCwgdTMyIHZh bCkKPiArewo+ICsJLyoKPiArCSAqIFNpbmNlIHdlIGFyZSBkb2luZyBzdG9jaGFzdGljIHNhbXBs aW5nIGZvciB0aGVzZSBjb3VudGVycywKPiArCSAqIGF2ZXJhZ2UgdGhlIGRlbHRhIHdpdGggdGhl IHByZXZpb3VzIHZhbHVlIGZvciBiZXR0ZXIgYWNjdXJhY3kuCj4gKwkgKi8KPiArCXNhbXBsZS0+ Y3VyICs9IGRpdl91NjQobXVsX3UzMl91MzIoc2FtcGxlLT5wcmV2ICsgdmFsLCB1bml0KSwgMik7 Cj4gKwlzYW1wbGUtPnByZXYgPSB2YWw7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGVuZ2luZXNf c2FtcGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4g Kwlib29sIGZ3ID0gZmFsc2U7Cj4gKwo+ICsJaWYgKChkZXZfcHJpdi0+cG11LmVuYWJsZSAmIEVO R0lORV9TQU1QTEVfTUFTSykgPT0gMCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKCFkZXZfcHJp di0+Z3QuYXdha2UpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICghaW50ZWxfcnVudGltZV9wbV9n ZXRfaWZfaW5fdXNlKGRldl9wcml2KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZm9yX2VhY2hfZW5n aW5lKGVuZ2luZSwgZGV2X3ByaXYsIGlkKSB7Cj4gKwkJdTMyIGN1cnJlbnRfc2Vxbm8gPSBpbnRl bF9lbmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSk7Cj4gKwkJdTMyIGxhc3Rfc2Vxbm8gPSBpbnRlbF9l bmdpbmVfbGFzdF9zdWJtaXQoZW5naW5lKTsKPiArCQl1MzIgdmFsOwo+ICsKPiArCQl2YWwgPSAh aTkxNV9zZXFub19wYXNzZWQoY3VycmVudF9zZXFubywgbGFzdF9zZXFubyk7Cj4gKwo+ICsJCXVw ZGF0ZV9zYW1wbGUoJmVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9CVVNZXSwKPiArCQkJ ICAgICAgUEVSSU9ELCB2YWwpOwo+ICsKPiArCQlpZiAodmFsICYmIChlbmdpbmUtPnBtdS5lbmFi bGUgJgo+ICsJCSAgICAoQklUKEk5MTVfU0FNUExFX1dBSVQpIHwgQklUKEk5MTVfU0FNUExFX1NF TUEpKSkpIHsKPiArCQkJZncgPSBncmFiX2ZvcmNld2FrZShkZXZfcHJpdiwgZncpOwo+ICsKPiAr CQkJdmFsID0gSTkxNV9SRUFEX0ZXKFJJTkdfQ1RMKGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4gKwkJ fSBlbHNlIHsKPiArCQkJdmFsID0gMDsKPiArCQl9Cj4gKwo+ICsJCXVwZGF0ZV9zYW1wbGUoJmVu Z2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9XQUlUXSwKPiArCQkJICAgICAgUEVSSU9ELCAh ISh2YWwgJiBSSU5HX1dBSVQpKTsKPiArCj4gKwkJdXBkYXRlX3NhbXBsZSgmZW5naW5lLT5wbXUu c2FtcGxlW0k5MTVfU0FNUExFX1NFTUFdLAo+ICsJCQkgICAgICBQRVJJT0QsICEhKHZhbCAmIFJJ TkdfV0FJVF9TRU1BUEhPUkUpKTsKPiArCX0KPiArCj4gKwlpZiAoZncpCj4gKwkJaW50ZWxfdW5j b3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOwo+ICsKPiArCWludGVs X3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZnJlcXVl bmN5X3NhbXBsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCWlm IChkZXZfcHJpdi0+cG11LmVuYWJsZSAmCj4gKwkgICAgY29uZmlnX2VuYWJsZWRfbWFzayhJOTE1 X1BNVV9BQ1RVQUxfRlJFUVVFTkNZKSkgewo+ICsJCXUzMiB2YWw7Cj4gKwo+ICsJCXZhbCA9IGRl dl9wcml2LT5ndF9wbS5ycHMuY3VyX2ZyZXE7Cj4gKwkJaWYgKGRldl9wcml2LT5ndC5hd2FrZSAm Jgo+ICsJCSAgICBpbnRlbF9ydW50aW1lX3BtX2dldF9pZl9pbl91c2UoZGV2X3ByaXYpKSB7Cj4g KwkJCXZhbCA9IGludGVsX2dldF9jYWdmKGRldl9wcml2LAo+ICsJCQkJCSAgICAgSTkxNV9SRUFE X05PVFJBQ0UoR0VONl9SUFNUQVQxKSk7Cj4gKwkJCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9w cml2KTsKPiArCQl9Cj4gKwo+ICsJCXVwZGF0ZV9zYW1wbGUoJmRldl9wcml2LT5wbXUuc2FtcGxl W19fSTkxNV9TQU1QTEVfRlJFUV9BQ1RdLAo+ICsJCQkgICAgICAxLCBpbnRlbF9ncHVfZnJlcShk ZXZfcHJpdiwgdmFsKSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKGRldl9wcml2LT5wbXUuZW5hYmxlICYK PiArCSAgICBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1kp KSB7Cj4gKwkJdXBkYXRlX3NhbXBsZSgmZGV2X3ByaXYtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBM RV9GUkVRX1JFUV0sIDEsCj4gKwkJCSAgICAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LAo+ICsJ CQkJCSAgICAgZGV2X3ByaXYtPmd0X3BtLnJwcy5jdXJfZnJlcSkpOwo+ICsJfQo+ICt9Cj4gKwo+ ICtzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaTkxNV9zYW1wbGUoc3RydWN0IGhydGltZXIg KmhydGltZXIpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KPiArCQlj b250YWluZXJfb2YoaHJ0aW1lciwgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUsIHBtdS50aW1lcik7 Cj4gKwo+ICsJaWYgKGk5MTUtPnBtdS5lbmFibGUgPT0gMCkKPiArCQlyZXR1cm4gSFJUSU1FUl9O T1JFU1RBUlQ7Cj4gKwo+ICsJZW5naW5lc19zYW1wbGUoaTkxNSk7Cj4gKwlmcmVxdWVuY3lfc2Ft cGxlKGk5MTUpOwo+ICsKPiArCWhydGltZXJfZm9yd2FyZF9ub3coaHJ0aW1lciwgbnNfdG9fa3Rp bWUoUEVSSU9EKSk7Cj4gKwlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkK PiArewo+ICsJV0FSTl9PTihldmVudC0+cGFyZW50KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBl bmdpbmVfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4gK3sKPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KPiArCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwg dHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOwo+ICsKPiArCWlmICghaW50ZWxfZW5naW5lX2xvb2t1 cF91c2VyKGk5MTUsIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCksCj4gKwkJCQkgICAgICBlbmdp bmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlz d2l0Y2ggKGVuZ2luZV9ldmVudF9zYW1wbGUoZXZlbnQpKSB7Cj4gKwljYXNlIEk5MTVfU0FNUExF X0JVU1k6Cj4gKwljYXNlIEk5MTVfU0FNUExFX1dBSVQ6Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5 MTVfU0FNUExFX1NFTUE6Cj4gKwkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCj4gKwkJCXJldHVy biAtRU5PREVWOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVOT0VOVDsK PiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1X3BtdV9l dmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPQo+ICsJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2Yo Kmk5MTUpLCBwbXUuYmFzZSk7Cj4gKwlpbnQgY3B1LCByZXQ7Cj4gKwo+ICsJaWYgKGV2ZW50LT5h dHRyLnR5cGUgIT0gZXZlbnQtPnBtdS0+dHlwZSkKPiArCQlyZXR1cm4gLUVOT0VOVDsKPiArCj4g KwkvKiB1bnN1cHBvcnRlZCBtb2RlcyBhbmQgZmlsdGVycyAqLwo+ICsJaWYgKGV2ZW50LT5hdHRy LnNhbXBsZV9wZXJpb2QpIC8qIG5vIHNhbXBsaW5nICovCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJaWYgKGhhc19icmFuY2hfc3RhY2soZXZlbnQpKQo+ICsJCXJldHVybiAtRU9QTk9UU1VQ UDsKPiArCj4gKwlpZiAoZXZlbnQtPmNwdSA8IDApCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ ICsJY3B1ID0gY3B1bWFza19hbnlfYW5kKCZpOTE1X3BtdV9jcHVtYXNrLAo+ICsJCQkgICAgICB0 b3BvbG9neV9zaWJsaW5nX2NwdW1hc2soZXZlbnQtPmNwdSkpOwo+ICsJaWYgKGNwdSA+PSBucl9j cHVfaWRzKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCWlmIChpc19lbmdpbmVfZXZlbnQo ZXZlbnQpKSB7Cj4gKwkJcmV0ID0gZW5naW5lX2V2ZW50X2luaXQoZXZlbnQpOwo+ICsJfSBlbHNl IHsKPiArCQlyZXQgPSAwOwo+ICsJCXN3aXRjaCAoZXZlbnQtPmF0dHIuY29uZmlnKSB7Cj4gKwkJ Y2FzZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZOgo+ICsJCQlpZiAoSVNfVkFMTEVZVklFVyhp OTE1KSB8fCBJU19DSEVSUllWSUVXKGk5MTUpKQo+ICsJCQkJIC8qIFJlcXVpcmVzIGEgbXV0ZXgg Zm9yIHNhbXBsaW5nISAqLwo+ICsJCQkJcmV0ID0gLUVOT0RFVjsKCkR1bW15IHJhbmRvbSBxdWVz dGlvbi4uLgpJcyB0aGUgbWlzc2luZyBicmVhayBoZXJlIGludGVudGlvbmFsPwpvbiBQTVVfQUNU VUFMX0ZSRVEgd2Ugc2hvdWxkIHJldHVybiAtRU5PREVWIHRvIGdlbiA8IDYgfHwgdmx2IHx8IGNo diA/Cgo+ICsJCWNhc2UgSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWToKPiArCQkJaWYgKElO VEVMX0dFTihpOTE1KSA8IDYpCj4gKwkJCQlyZXQgPSAtRU5PREVWOwo+ICsJCQlicmVhazsKPiAr CQlkZWZhdWx0Ogo+ICsJCQlyZXQgPSAtRU5PRU5UOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9 Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJZXZlbnQtPmNwdSA9IGNwdTsK PiArCWlmICghZXZlbnQtPnBhcmVudCkKPiArCQlldmVudC0+ZGVzdHJveSA9IGk5MTVfcG11X2V2 ZW50X2Rlc3Ryb3k7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB1NjQgX19p OTE1X3BtdV9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQo+ICsJCWNvbnRhaW5lcl9vZihldmVudC0+cG11 LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7Cj4gKwl1NjQgdmFsID0gMDsKPiArCj4gKwlpZiAo aXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgewo+ICsJCXU4IHNhbXBsZSA9IGVuZ2luZV9ldmVudF9z YW1wbGUoZXZlbnQpOwo+ICsJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCj4g KwkJZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsCj4gKwkJCQkJCSAgZW5n aW5lX2V2ZW50X2NsYXNzKGV2ZW50KSwKPiArCQkJCQkJICBlbmdpbmVfZXZlbnRfaW5zdGFuY2Uo ZXZlbnQpKTsKPiArCj4gKwkJaWYgKFdBUk5fT05fT05DRSghZW5naW5lKSkgewo+ICsJCQkvKiBE byBub3RoaW5nICovCj4gKwkJfSBlbHNlIHsKPiArCQkJdmFsID0gZW5naW5lLT5wbXUuc2FtcGxl W3NhbXBsZV0uY3VyOwo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJc3dpdGNoIChldmVudC0+YXR0 ci5jb25maWcpIHsKPiArCQljYXNlIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1k6Cj4gKwkJCXZh bCA9Cj4gKwkJCSAgIGRpdl91NjQoaTkxNS0+cG11LnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFf QUNUXS5jdXIsCj4gKwkJCQkgICBGUkVRVUVOQ1kpOwo+ICsJCQlicmVhazsKPiArCQljYXNlIEk5 MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1k6Cj4gKwkJCXZhbCA9Cj4gKwkJCSAgIGRpdl91NjQo aTkxNS0+cG11LnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfUkVRXS5jdXIsCj4gKwkJCQkgICBG UkVRVUVOQ1kpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHZhbDsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9l dmVudCAqZXZlbnQpCj4gK3sKPiArCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQt Pmh3Owo+ICsJdTY0IHByZXYsIG5ldzsKPiArCj4gK2FnYWluOgo+ICsJcHJldiA9IGxvY2FsNjRf cmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKPiArCW5ldyA9IF9faTkxNV9wbXVfZXZlbnRfcmVhZChl dmVudCk7Cj4gKwo+ICsJaWYgKGxvY2FsNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2 LCBuZXcpICE9IHByZXYpCj4gKwkJZ290byBhZ2FpbjsKPiArCj4gKwlsb2NhbDY0X2FkZChuZXcg LSBwcmV2LCAmZXZlbnQtPmNvdW50KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTkxNV9wbXVf ZW5hYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPQo+ICsJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5 MTUpLCBwbXUuYmFzZSk7Cj4gKwl1bnNpZ25lZCBpbnQgYml0ID0gZXZlbnRfZW5hYmxlZF9iaXQo ZXZlbnQpOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2 ZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKPiArCj4gKwkvKgo+ICsJICogU3RhcnQgdGhlIHNh bXBsaW5nIHRpbWVyIHdoZW4gZW5hYmxpbmcgdGhlIGZpcnN0IGV2ZW50Lgo+ICsJICovCj4gKwlp ZiAoaTkxNS0+cG11LmVuYWJsZSA9PSAwKQo+ICsJCWhydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmk5 MTUtPnBtdS50aW1lciwKPiArCQkJCSAgICAgICBuc190b19rdGltZShQRVJJT0QpLCAwLAo+ICsJ CQkJICAgICAgIEhSVElNRVJfTU9ERV9SRUxfUElOTkVEKTsKPiArCj4gKwkvKgo+ICsJICogVXBk YXRlIHRoZSBiaXRtYXNrIG9mIGVuYWJsZWQgZXZlbnRzIGFuZCBpbmNyZW1lbnQKPiArCSAqIHRo ZSBldmVudCByZWZlcmVuY2UgY291bnRlci4KPiArCSAqLwo+ICsJR0VNX0JVR19PTihiaXQgPj0g STkxNV9QTVVfTUFTS19CSVRTKTsKPiArCUdFTV9CVUdfT04oaTkxNS0+cG11LmVuYWJsZV9jb3Vu dFtiaXRdID09IH4wKTsKPiArCWk5MTUtPnBtdS5lbmFibGUgfD0gQklUX1VMTChiaXQpOwo+ICsJ aTkxNS0+cG11LmVuYWJsZV9jb3VudFtiaXRdKys7Cj4gKwo+ICsJLyoKPiArCSAqIEZvciBwZXIt ZW5naW5lIGV2ZW50cyB0aGUgYml0bWFzayBhbmQgcmVmZXJlbmNlIGNvdW50aW5nCj4gKwkgKiBp cyBzdG9yZWQgcGVyIGVuZ2luZS4KPiArCSAqLwo+ICsJaWYgKGlzX2VuZ2luZV9ldmVudChldmVu dCkpIHsKPiArCQl1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KTsKPiArCQlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwo+ICsJCWVuZ2luZSA9IGludGVsX2Vu Z2luZV9sb29rdXBfdXNlcihpOTE1LAo+ICsJCQkJCQkgIGVuZ2luZV9ldmVudF9jbGFzcyhldmVu dCksCj4gKwkJCQkJCSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7Cj4gKwkJR0VNX0JV R19PTighZW5naW5lKTsKPiArCQllbmdpbmUtPnBtdS5lbmFibGUgfD0gQklUKHNhbXBsZSk7Cj4g Kwo+ICsJCUdFTV9CVUdfT04oc2FtcGxlID49IEk5MTVfUE1VX1NBTVBMRV9CSVRTKTsKPiArCQlH RU1fQlVHX09OKGVuZ2luZS0+cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdID09IH4wKTsKPiArCQll bmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSsrOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkg KiBTdG9yZSB0aGUgY3VycmVudCBjb3VudGVyIHZhbHVlIHNvIHdlIGNhbiByZXBvcnQgdGhlIGNv cnJlY3QgZGVsdGEKPiArCSAqIGZvciBhbGwgbGlzdGVuZXJzLiBFdmVuIHdoZW4gdGhlIGV2ZW50 IHdhcyBhbHJlYWR5IGVuYWJsZWQgYW5kIGhhcwo+ICsJICogYW4gZXhpc3Rpbmcgbm9uLXplcm8g dmFsdWUuCj4gKwkgKi8KPiArCWxvY2FsNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgX19p OTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50KSk7Cj4gKwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTkxNV9w bXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4gK3sKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0KPiArCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9m KCppOTE1KSwgcG11LmJhc2UpOwo+ICsJdW5zaWduZWQgaW50IGJpdCA9IGV2ZW50X2VuYWJsZWRf Yml0KGV2ZW50KTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJc3Bpbl9sb2NrX2ly cXNhdmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJaWYgKGlzX2VuZ2luZV9ldmVu dChldmVudCkpIHsKPiArCQl1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KTsK PiArCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwo+ICsJCWVuZ2luZSA9IGlu dGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAo+ICsJCQkJCQkgIGVuZ2luZV9ldmVudF9jbGFz cyhldmVudCksCj4gKwkJCQkJCSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7Cj4gKwkJ R0VNX0JVR19PTighZW5naW5lKTsKPiArCQlHRU1fQlVHX09OKHNhbXBsZSA+PSBJOTE1X1BNVV9T QU1QTEVfQklUUyk7Cj4gKwkJR0VNX0JVR19PTihlbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2Ft cGxlXSA9PSAwKTsKPiArCQkvKgo+ICsJCSAqIERlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50 IGFuZCBjbGVhciB0aGUgZW5hYmxlZAo+ICsJCSAqIGJpdG1hc2sgd2hlbiB0aGUgbGFzdCBsaXN0 ZW5lciBvbiBhbiBldmVudCBnb2VzIGF3YXkuCj4gKwkJICovCj4gKwkJaWYgKC0tZW5naW5lLT5w bXUuZW5hYmxlX2NvdW50W3NhbXBsZV0gPT0gMCkKPiArCQkJZW5naW5lLT5wbXUuZW5hYmxlICY9 IH5CSVQoc2FtcGxlKTsKPiArCX0KPiArCj4gKwlHRU1fQlVHX09OKGJpdCA+PSBJOTE1X1BNVV9N QVNLX0JJVFMpOwo+ICsJR0VNX0JVR19PTihpOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0gPT0g MCk7Cj4gKwkvKgo+ICsJICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgYW5kIGNsZWFy IHRoZSBlbmFibGVkCj4gKwkgKiBiaXRtYXNrIHdoZW4gdGhlIGxhc3QgbGlzdGVuZXIgb24gYW4g ZXZlbnQgZ29lcyBhd2F5Lgo+ICsJICovCj4gKwlpZiAoLS1pOTE1LT5wbXUuZW5hYmxlX2NvdW50 W2JpdF0gPT0gMCkKPiArCQlpOTE1LT5wbXUuZW5hYmxlICY9IH5CSVRfVUxMKGJpdCk7Cj4gKwo+ ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQg KmV2ZW50LCBpbnQgZmxhZ3MpCj4gK3sKPiArCWk5MTVfcG11X2VuYWJsZShldmVudCk7Cj4gKwll dmVudC0+aHcuc3RhdGUgPSAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVu dF9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQo+ICt7Cj4gKwlpZiAo ZmxhZ3MgJiBQRVJGX0VGX1VQREFURSkKPiArCQlpOTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50KTsK PiArCWk5MTVfcG11X2Rpc2FibGUoZXZlbnQpOwo+ICsJZXZlbnQtPmh3LnN0YXRlID0gUEVSRl9I RVNfU1RPUFBFRDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1X3BtdV9ldmVudF9hZGQoc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCj4gK3sKPiArCWlmIChmbGFncyAmIFBF UkZfRUZfU1RBUlQpCj4gKwkJaTkxNV9wbXVfZXZlbnRfc3RhcnQoZXZlbnQsIGZsYWdzKTsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfZGVs KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQo+ICt7Cj4gKwlpOTE1X3BtdV9l dmVudF9zdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg aTkxNV9wbXVfZXZlbnRfZXZlbnRfaWR4KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPiArewo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IGk5MTVfcG11X2Zvcm1hdF9z aG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0 ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUgKmVh dHRyOwo+ICsKPiArCWVhdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBkZXZfZXh0X2F0 dHJpYnV0ZSwgYXR0cik7Cj4gKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgKGNoYXIgKill YXR0ci0+dmFyKTsKPiArfQo+ICsKPiArI2RlZmluZSBJOTE1X1BNVV9GT1JNQVRfQVRUUihfbmFt ZSwgX2NvbmZpZykgXAo+ICsJKCYoKHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZVtdKSB7IFwKPiAr CQl7IC5hdHRyID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBpOTE1X3BtdV9mb3JtYXRfc2hvdywgTlVM TCksIFwKPiArCQkgIC52YXIgPSAodm9pZCAqKV9jb25maWcsIH0gXAo+ICsJfSlbMF0uYXR0ci5h dHRyKQo+ICsKPiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmk5MTVfcG11X2Zvcm1hdF9hdHRy c1tdID0gewo+ICsJSTkxNV9QTVVfRk9STUFUX0FUVFIoaTkxNV9ldmVudGlkLCAiY29uZmlnOjAt MjAiKSwKPiArCU5VTEwsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0 ZV9ncm91cCBpOTE1X3BtdV9mb3JtYXRfYXR0cl9ncm91cCA9IHsKPiArCS5uYW1lID0gImZvcm1h dCIsCj4gKwkuYXR0cnMgPSBpOTE1X3BtdV9mb3JtYXRfYXR0cnMsCj4gK307Cj4gKwo+ICtzdGF0 aWMgc3NpemVfdCBpOTE1X3BtdV9ldmVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCQkJ CSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gK3sKPiArCXN0 cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHI7Cj4gKwo+ICsJZWF0dHIgPSBjb250YWluZXJf b2YoYXR0ciwgc3RydWN0IGRldl9leHRfYXR0cmlidXRlLCBhdHRyKTsKPiArCXJldHVybiBzcHJp bnRmKGJ1ZiwgImNvbmZpZz0weCVseFxuIiwgKHVuc2lnbmVkIGxvbmcpZWF0dHItPnZhcik7Cj4g K30KPiArCj4gKyNkZWZpbmUgSTkxNV9FVkVOVF9BVFRSKF9uYW1lLCBfY29uZmlnKSBcCj4gKwko Jigoc3RydWN0IGRldl9leHRfYXR0cmlidXRlW10pIHsgXAo+ICsJCXsgLmF0dHIgPSBfX0FUVFIo X25hbWUsIDA0NDQsIGk5MTVfcG11X2V2ZW50X3Nob3csIE5VTEwpLCBcCj4gKwkJICAudmFyID0g KHZvaWQgKilfY29uZmlnLCB9IFwKPiArCX0pWzBdLmF0dHIuYXR0cikKPiArCj4gKyNkZWZpbmUg STkxNV9FVkVOVF9TVFIoX25hbWUsIF9zdHIpIFwKPiArCSgmKChzdHJ1Y3QgcGVyZl9wbXVfZXZl bnRzX2F0dHJbXSkgeyBcCj4gKwkJeyAuYXR0cgkgICAgID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBw ZXJmX2V2ZW50X3N5c2ZzX3Nob3csIE5VTEwpLCBcCj4gKwkJICAuaWQJICAgICA9IDAsIFwKPiAr CQkgIC5ldmVudF9zdHIgPSBfc3RyLCB9IFwKPiArCX0pWzBdLmF0dHIuYXR0cikKPiArCj4gKyNk ZWZpbmUgSTkxNV9FVkVOVChfbmFtZSwgX2NvbmZpZywgX3VuaXQpIFwKPiArCUk5MTVfRVZFTlRf QVRUUihfbmFtZSwgX2NvbmZpZyksIFwKPiArCUk5MTVfRVZFTlRfU1RSKF9uYW1lLnVuaXQsIF91 bml0KQo+ICsKPiArI2RlZmluZSBJOTE1X0VOR0lORV9FVkVOVChfbmFtZSwgX2NsYXNzLCBfaW5z dGFuY2UsIF9zYW1wbGUpIFwKPiArCUk5MTVfRVZFTlRfQVRUUihfbmFtZSwgX19JOTE1X1BNVV9F TkdJTkUoX2NsYXNzLCBfaW5zdGFuY2UsIF9zYW1wbGUpKSwgXAo+ICsJSTkxNV9FVkVOVF9TVFIo X25hbWUudW5pdCwgIm5zIikKPiArCj4gKyNkZWZpbmUgSTkxNV9FTkdJTkVfRVZFTlRTKF9uYW1l LCBfY2xhc3MsIF9pbnN0YW5jZSkgXAo+ICsJSTkxNV9FTkdJTkVfRVZFTlQoX25hbWUjI19pbnN0 YW5jZS1idXN5LCBfY2xhc3MsIF9pbnN0YW5jZSwgSTkxNV9TQU1QTEVfQlVTWSksIFwKPiArCUk5 MTVfRU5HSU5FX0VWRU5UKF9uYW1lIyNfaW5zdGFuY2Utc2VtYSwgX2NsYXNzLCBfaW5zdGFuY2Us IEk5MTVfU0FNUExFX1NFTUEpLCBcCj4gKwlJOTE1X0VOR0lORV9FVkVOVChfbmFtZSMjX2luc3Rh bmNlLXdhaXQsIF9jbGFzcywgX2luc3RhbmNlLCBJOTE1X1NBTVBMRV9XQUlUKQo+ICsKPiArc3Rh dGljIHN0cnVjdCBhdHRyaWJ1dGUgKmk5MTVfcG11X2V2ZW50c19hdHRyc1tdID0gewo+ICsJSTkx NV9FTkdJTkVfRVZFTlRTKHJjcywgSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSLCAwKSwKPiArCUk5 MTVfRU5HSU5FX0VWRU5UUyhiY3MsIEk5MTVfRU5HSU5FX0NMQVNTX0NPUFksIDApLAo+ICsJSTkx NV9FTkdJTkVfRVZFTlRTKHZjcywgSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDApLAo+ICsJSTkx NV9FTkdJTkVfRVZFTlRTKHZjcywgSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDEpLAo+ICsJSTkx NV9FTkdJTkVfRVZFTlRTKHZlY3MsIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDAp LAo+ICsKPiArCUk5MTVfRVZFTlQoYWN0dWFsLWZyZXF1ZW5jeSwgICAgSTkxNV9QTVVfQUNUVUFM X0ZSRVFVRU5DWSwgICAgIk1IeiIpLAo+ICsJSTkxNV9FVkVOVChyZXF1ZXN0ZWQtZnJlcXVlbmN5 LCBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZLCAiTUh6IiksCj4gKwo+ICsJTlVMTCwKPiAr fTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGk5MTVfcG11X2V2 ZW50c19hdHRyX2dyb3VwID0gewo+ICsJLm5hbWUgPSAiZXZlbnRzIiwKPiArCS5hdHRycyA9IGk5 MTVfcG11X2V2ZW50c19hdHRycywKPiArfTsKPiArCj4gK3N0YXRpYyBzc2l6ZV90Cj4gK2k5MTVf cG11X2dldF9hdHRyX2NwdW1hc2soc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkgIHN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLAo+ICsJCQkgIGNoYXIgKmJ1ZikKPiArewo+ICsJcmV0dXJu IGNwdW1hcF9wcmludF90b19wYWdlYnVmKHRydWUsIGJ1ZiwgJmk5MTVfcG11X2NwdW1hc2spOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgREVWSUNFX0FUVFIoY3B1bWFzaywgMDQ0NCwgaTkxNV9wbXVfZ2V0 X2F0dHJfY3B1bWFzaywgTlVMTCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTkx NV9jcHVtYXNrX2F0dHJzW10gPSB7Cj4gKwkmZGV2X2F0dHJfY3B1bWFzay5hdHRyLAo+ICsJTlVM TCwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGk5MTVfcG11X2Nw dW1hc2tfYXR0cl9ncm91cCA9IHsKPiArCS5hdHRycyA9IGk5MTVfY3B1bWFza19hdHRycywKPiAr fTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICppOTE1X3BtdV9h dHRyX2dyb3Vwc1tdID0gewo+ICsJJmk5MTVfcG11X2Zvcm1hdF9hdHRyX2dyb3VwLAo+ICsJJmk5 MTVfcG11X2V2ZW50c19hdHRyX2dyb3VwLAo+ICsJJmk5MTVfcG11X2NwdW1hc2tfYXR0cl9ncm91 cCwKPiArCU5VTEwKPiArfTsKPiArCj4gKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKPiArc3Rh dGljIGludCBpOTE1X3BtdV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlz dF9ub2RlICpub2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9wbXUgKnBtdSA9IGhsaXN0X2VudHJ5 X3NhZmUobm9kZSwgdHlwZW9mKCpwbXUpLCBub2RlKTsKPiArCXVuc2lnbmVkIGludCB0YXJnZXQ7 Cj4gKwo+ICsJR0VNX0JVR19PTighcG11LT5iYXNlLmV2ZW50X2luaXQpOwo+ICsKPiArCXRhcmdl dCA9IGNwdW1hc2tfYW55X2FuZCgmaTkxNV9wbXVfY3B1bWFzaywgJmk5MTVfcG11X2NwdW1hc2sp Owo+ICsJLyogU2VsZWN0IHRoZSBmaXJzdCBvbmxpbmUgQ1BVIGFzIGEgZGVzaWduYXRlZCByZWFk ZXIuICovCj4gKwlpZiAodGFyZ2V0ID49IG5yX2NwdV9pZHMpCj4gKwkJY3B1bWFza19zZXRfY3B1 KGNwdSwgJmk5MTVfcG11X2NwdW1hc2spOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGk5MTVfcG11X2NwdV9vZmZsaW5lKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBo bGlzdF9ub2RlICpub2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9wbXUgKnBtdSA9IGhsaXN0X2Vu dHJ5X3NhZmUobm9kZSwgdHlwZW9mKCpwbXUpLCBub2RlKTsKPiArCXVuc2lnbmVkIGludCB0YXJn ZXQ7Cj4gKwo+ICsJR0VNX0JVR19PTighcG11LT5iYXNlLmV2ZW50X2luaXQpOwo+ICsKPiArCWlm IChjcHVtYXNrX3Rlc3RfYW5kX2NsZWFyX2NwdShjcHUsICZpOTE1X3BtdV9jcHVtYXNrKSkgewo+ ICsJCXRhcmdldCA9IGNwdW1hc2tfYW55X2J1dCh0b3BvbG9neV9zaWJsaW5nX2NwdW1hc2soY3B1 KSwgY3B1KTsKPiArCQkvKiBNaWdyYXRlIGV2ZW50cyBpZiB0aGVyZSBpcyBhIHZhbGlkIHRhcmdl dCAqLwo+ICsJCWlmICh0YXJnZXQgPCBucl9jcHVfaWRzKSB7Cj4gKwkJCWNwdW1hc2tfc2V0X2Nw dSh0YXJnZXQsICZpOTE1X3BtdV9jcHVtYXNrKTsKPiArCQkJcGVyZl9wbXVfbWlncmF0ZV9jb250 ZXh0KCZwbXUtPmJhc2UsIGNwdSwgdGFyZ2V0KTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGNwdWhwX3N0YXRlIGNwdWhwX3Nsb3QgPSBDUFVI UF9JTlZBTElEOwo+ICsjZW5kaWYKPiArCj4gK3N0YXRpYyBpbnQgaTkxNV9wbXVfcmVnaXN0ZXJf Y3B1aHBfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArI2lmZGVm IENPTkZJR19IT1RQTFVHX0NQVQo+ICsJZW51bSBjcHVocF9zdGF0ZSBzbG90Owo+ICsJaW50IHJl dDsKPiArCj4gKwlyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aShDUFVIUF9BUF9PTkxJTkVf RFlOLAo+ICsJCQkJICAgICAgInBlcmYveDg2L2ludGVsL2k5MTU6b25saW5lIiwKPiArCQkJCSAg ICAgIGk5MTVfcG11X2NwdV9vbmxpbmUsCj4gKwkJCQkgICAgICBpOTE1X3BtdV9jcHVfb2ZmbGlu ZSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXNsb3QgPSByZXQ7 Cj4gKwlyZXQgPSBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2Uoc2xvdCwgJmk5MTUtPnBtdS5ub2Rl KTsKPiArCWlmIChyZXQpIHsKPiArCQljcHVocF9yZW1vdmVfbXVsdGlfc3RhdGUoc2xvdCk7Cj4g KwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwljcHVocF9zbG90ID0gc2xvdDsKPiArI2VuZGlm Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTkxNV9wbXVfdW5yZWdpc3Rl cl9jcHVocF9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiArewo+ICsjaWZk ZWYgQ09ORklHX0hPVFBMVUdfQ1BVCj4gKwlXQVJOX09OKGNwdWhwX3Nsb3QgPT0gQ1BVSFBfSU5W QUxJRCk7Cj4gKwlXQVJOX09OKGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShjcHVocF9zbG90 LCAmaTkxNS0+cG11Lm5vZGUpKTsKPiArCWNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShjcHVocF9z bG90KTsKPiArI2VuZGlmCj4gK30KPiArCj4gK3ZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKElO VEVMX0dFTihpOTE1KSA8PSAyKSB7Cj4gKwkJRFJNX0lORk8oIlBNVSBub3Qgc3VwcG9ydGVkIGZv ciB0aGlzIEdQVS4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJaTkxNS0+cG11LmJhc2Uu YXR0cl9ncm91cHMJPSBpOTE1X3BtdV9hdHRyX2dyb3VwczsKPiArCWk5MTUtPnBtdS5iYXNlLnRh c2tfY3R4X25yCT0gcGVyZl9pbnZhbGlkX2NvbnRleHQ7Cj4gKwlpOTE1LT5wbXUuYmFzZS5ldmVu dF9pbml0CT0gaTkxNV9wbXVfZXZlbnRfaW5pdDsKPiArCWk5MTUtPnBtdS5iYXNlLmFkZAkJPSBp OTE1X3BtdV9ldmVudF9hZGQ7Cj4gKwlpOTE1LT5wbXUuYmFzZS5kZWwJCT0gaTkxNV9wbXVfZXZl bnRfZGVsOwo+ICsJaTkxNS0+cG11LmJhc2Uuc3RhcnQJCT0gaTkxNV9wbXVfZXZlbnRfc3RhcnQ7 Cj4gKwlpOTE1LT5wbXUuYmFzZS5zdG9wCQk9IGk5MTVfcG11X2V2ZW50X3N0b3A7Cj4gKwlpOTE1 LT5wbXUuYmFzZS5yZWFkCQk9IGk5MTVfcG11X2V2ZW50X3JlYWQ7Cj4gKwlpOTE1LT5wbXUuYmFz ZS5ldmVudF9pZHgJPSBpOTE1X3BtdV9ldmVudF9ldmVudF9pZHg7Cj4gKwo+ICsJc3Bpbl9sb2Nr X2luaXQoJmk5MTUtPnBtdS5sb2NrKTsKPiArCWhydGltZXJfaW5pdCgmaTkxNS0+cG11LnRpbWVy LCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwo+ICsJaTkxNS0+cG11LnRpbWVy LmZ1bmN0aW9uID0gaTkxNV9zYW1wbGU7Cj4gKwo+ICsJcmV0ID0gcGVyZl9wbXVfcmVnaXN0ZXIo Jmk5MTUtPnBtdS5iYXNlLCAiaTkxNSIsIC0xKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnI7 Cj4gKwo+ICsJcmV0ID0gaTkxNV9wbXVfcmVnaXN0ZXJfY3B1aHBfc3RhdGUoaTkxNSk7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gZXJyX3VucmVnOwo+ICsKPiArCXJldHVybjsKPiArCj4gK2Vycl91 bnJlZzoKPiArCXBlcmZfcG11X3VucmVnaXN0ZXIoJmk5MTUtPnBtdS5iYXNlKTsKPiArZXJyOgo+ ICsJaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdCA9IE5VTEw7Cj4gKwlEUk1fTk9URSgiRmFpbGVk IHRvIHJlZ2lzdGVyIFBNVSEgKGVycj0lZClcbiIsIHJldCk7Cj4gK30KPiArCj4gK3ZvaWQgaTkx NV9wbXVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiArewo+ICsJ aWYgKCFpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0KQo+ICsJCXJldHVybjsKPiArCj4gKwlXQVJO X09OKGk5MTUtPnBtdS5lbmFibGUpOwo+ICsKPiArCWhydGltZXJfY2FuY2VsKCZpOTE1LT5wbXUu dGltZXIpOwo+ICsKPiArCWk5MTVfcG11X3VucmVnaXN0ZXJfY3B1aHBfc3RhdGUoaTkxNSk7Cj4g Kwo+ICsJcGVyZl9wbXVfdW5yZWdpc3RlcigmaTkxNS0+cG11LmJhc2UpOwo+ICsJaTkxNS0+cG11 LmJhc2UuZXZlbnRfaW5pdCA9IE5VTEw7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9wbXUuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmgKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMWFjOGIyZTM0NjA3Cj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmgKPiBA QCAtMCwwICsxLDEwNCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jw b3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3Rh bnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4g KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArI2lmbmRl ZiBfX0k5MTVfUE1VX0hfXwo+ICsjZGVmaW5lIF9fSTkxNV9QTVVfSF9fCj4gKwo+ICtlbnVtIHsK PiArCV9fSTkxNV9TQU1QTEVfRlJFUV9BQ1QgPSAwLAo+ICsJX19JOTE1X1NBTVBMRV9GUkVRX1JF USwKPiArCV9fSTkxNV9OVU1fUE1VX1NBTVBMRVJTCj4gK307Cj4gKwo+ICsvKioKPiArICogSG93 IG1hbnkgZGlmZmVyZW50IGV2ZW50cyB3ZSB0cmFjayBpbiB0aGUgZ2xvYmFsIFBNVSBtYXNrLgo+ ICsgKgo+ICsgKiBJdCBpcyBhbHNvIHVzZWQgdG8ga25vdyB0byBuZWVkZWQgbnVtYmVyIG9mIGV2 ZW50IHJlZmVyZW5jZSBjb3VudGVycy4KPiArICovCj4gKyNkZWZpbmUgSTkxNV9QTVVfTUFTS19C SVRTIFwKPiArCSgoMSA8PCBJOTE1X1BNVV9TQU1QTEVfQklUUykgKyBcCj4gKwkgKEk5MTVfUE1V X0xBU1QgKyAxIC0gX19JOTE1X1BNVV9PVEhFUigwKSkpCj4gKwo+ICtzdHJ1Y3QgaTkxNV9wbXVf c2FtcGxlIHsKPiArCXU2NCBjdXI7Cj4gKwl1MzIgcHJldjsKPiArfTsKPiArCj4gK3N0cnVjdCBp OTE1X3BtdSB7Cj4gKwkvKioKPiArCSAqIEBub2RlOiBMaXN0IG5vZGUgZm9yIENQVSBob3RwbHVn IGhhbmRsaW5nLgo+ICsJICovCj4gKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOwo+ICsJLyoqCj4g KwkgKiBAYmFzZTogUE1VIGJhc2UuCj4gKwkgKi8KPiArCXN0cnVjdCBwbXUgYmFzZTsKPiArCS8q Kgo+ICsJICogQGxvY2s6IExvY2sgcHJvdGVjdGluZyBlbmFibGUgbWFzayBhbmQgcmVmIGNvdW50 IGhhbmRsaW5nLgo+ICsJICovCj4gKwlzcGlubG9ja190IGxvY2s7Cj4gKwkvKioKPiArCSAqIEB0 aW1lcjogVGltZXIgZm9yIGludGVybmFsIGk5MTUgUE1VIHNhbXBsaW5nLgo+ICsJICovCj4gKwlz dHJ1Y3QgaHJ0aW1lciB0aW1lcjsKPiArCS8qKgo+ICsJICogQGVuYWJsZTogQml0bWFzayBvZiBh bGwgY3VycmVudGx5IGVuYWJsZWQgZXZlbnRzLgo+ICsJICoKPiArCSAqIEJpdHMgYXJlIGRlcml2 ZWQgZnJvbSB1QVBJIGV2ZW50IG51bWJlcnMgaW4gYSB3YXkgdGhhdCBsb3cgMTYgYml0cwo+ICsJ ICogY29ycmVzcG9uZCB0byBlbmdpbmUgZXZlbnQgX3NhbXBsZV8gX3R5cGVfIChJOTE1X1NBTVBM RV9RVUVVRUQgaXMKPiArCSAqIGJpdCAwKSwgYW5kIGhpZ2hlciBiaXRzIGNvcnJlc3BvbmQgdG8g b3RoZXIgZXZlbnRzIChmb3IgaW5zdGFuY2UKPiArCSAqIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVO Q1kgaXMgYml0IDE2IGV0YykuCj4gKwkgKgo+ICsJICogSW4gb3RoZXIgd29yZHMsIGxvdyAxNiBi aXRzIGFyZSBub3QgcGVyIGVuZ2luZSBidXQgcGVyIGVuZ2luZQo+ICsJICogc2FtcGxlciB0eXBl LCB3aGlsZSB0aGUgdXBwZXIgYml0cyBhcmUgZGlyZWN0bHkgbWFwcGVkIHRvIG90aGVyCj4gKwkg KiBldmVudCB0eXBlcy4KPiArCSAqLwo+ICsJdTY0IGVuYWJsZTsKPiArCS8qKgo+ICsJICogQGVu YWJsZV9jb3VudDogUmVmZXJlbmNlIGNvdW50cyBmb3IgdGhlIGVuYWJsZWQgZXZlbnRzLgo+ICsJ ICoKPiArCSAqIEFycmF5IGluZGljZXMgYXJlIG1hcHBlZCBpbiB0aGUgc2FtZSB3YXkgYXMgYml0 cyBpbiB0aGUgQGVuYWJsZSBmaWVsZAo+ICsJICogYW5kIHRoZXkgYXJlIHVzZWQgdG8gY29udHJv bCBzYW1wbGluZyBvbi9vZmYgd2hlbiBtdWx0aXBsZSBjbGllbnRzCj4gKwkgKiBhcmUgdXNpbmcg dGhlIFBNVSBBUEkuCj4gKwkgKi8KPiArCXVuc2lnbmVkIGludCBlbmFibGVfY291bnRbSTkxNV9Q TVVfTUFTS19CSVRTXTsKPiArCS8qKgo+ICsJICogQHNhbXBsZTogQ3VycmVudCBhbmQgcHJldmlv dXMgKHJhdykgY291bnRlcnMgZm9yIHNhbXBsaW5nIGV2ZW50cy4KPiArCSAqCj4gKwkgKiBUaGVz ZSBjb3VudGVycyBhcmUgdXBkYXRlZCBmcm9tIHRoZSBpOTE1IFBNVSBzYW1wbGluZyB0aW1lci4K PiArCSAqCj4gKwkgKiBPbmx5IGdsb2JhbCBjb3VudGVycyBhcmUgaGVsZCBoZXJlLCB3aGlsZSB0 aGUgcGVyLWVuZ2luZSBvbmVzIGFyZSBpbgo+ICsJICogc3RydWN0IGludGVsX2VuZ2luZV9jcy4K PiArCSAqLwo+ICsJc3RydWN0IGk5MTVfcG11X3NhbXBsZSBzYW1wbGVbX19JOTE1X05VTV9QTVVf U0FNUExFUlNdOwo+ICt9Owo+ICsKPiArI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwo+ICt2b2lk IGk5MTVfcG11X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiArdm9p ZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiAr I2Vsc2UKPiArc3RhdGljIGlubGluZSB2b2lkIGk5MTVfcG11X3JlZ2lzdGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KSB7fQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9wbXVfdW5y ZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkge30KPiArI2VuZGlmCj4gKwo+ ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiBpbmRleCA5NmM4MGZhMGZjYWMuLjA5 YmYwNDNjMWMyZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+IEBAIC0xODYsNiArMTg2 LDkgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9yZWdfdCBy ZWcpCj4gICNkZWZpbmUgVklERU9fRU5IQU5DRU1FTlRfQ0xBU1MJMgo+ICAjZGVmaW5lIENPUFlf RU5HSU5FX0NMQVNTCTMKPiAgI2RlZmluZSBPVEhFUl9DTEFTUwkJNAo+ICsjZGVmaW5lIE1BWF9F TkdJTkVfQ0xBU1MJNAo+ICsKPiArI2RlZmluZSBNQVhfRU5HSU5FX0lOU1RBTkNFICAgIDEKPiAg Cj4gIC8qIFBDSSBjb25maWcgc3BhY2UgKi8KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZW5naW5lX2NzLmMKPiBpbmRleCAyMmMwOTUwMzU1MzkuLmE1YTQ5NDIxMGI5ZSAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCj4gQEAgLTIwNSw2ICsyMDUsMTUgQEAg aW50ZWxfZW5naW5lX3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAg CUdFTV9CVUdfT04oaW5mby0+Y2xhc3MgPj0gQVJSQVlfU0laRShpbnRlbF9lbmdpbmVfY2xhc3Nl cykpOwo+ICAJY2xhc3NfaW5mbyA9ICZpbnRlbF9lbmdpbmVfY2xhc3Nlc1tpbmZvLT5jbGFzc107 Cj4gIAo+ICsJaWYgKEdFTV9XQVJOX09OKGluZm8tPmNsYXNzID4gTUFYX0VOR0lORV9DTEFTUykp Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKEdFTV9XQVJOX09OKGluZm8tPmluc3Rh bmNlID4gTUFYX0VOR0lORV9JTlNUQU5DRSkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJ aWYgKEdFTV9XQVJOX09OKGRldl9wcml2LT5lbmdpbmVfY2xhc3NbaW5mby0+Y2xhc3NdW2luZm8t Pmluc3RhbmNlXSkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICAJR0VNX0JVR19PTihkZXZf cHJpdi0+ZW5naW5lW2lkXSk7Cj4gIAllbmdpbmUgPSBremFsbG9jKHNpemVvZigqZW5naW5lKSwg R0ZQX0tFUk5FTCk7Cj4gIAlpZiAoIWVuZ2luZSkKPiBAQCAtMjM0LDYgKzI0Myw3IEBAIGludGVs X2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAo+ICAJ QVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRCgmZW5naW5lLT5jb250ZXh0X3N0YXR1c19ub3RpZmll cik7Cj4gIAo+ICsJZGV2X3ByaXYtPmVuZ2luZV9jbGFzc1tpbmZvLT5jbGFzc11baW5mby0+aW5z dGFuY2VdID0gZW5naW5lOwo+ICAJZGV2X3ByaXYtPmVuZ2luZVtpZF0gPSBlbmdpbmU7Cj4gIAly ZXR1cm4gMDsKPiAgfQo+IEBAIC0xODE2LDYgKzE4MjYsMjkgQEAgdm9pZCBpbnRlbF9lbmdpbmVf ZHVtcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVjdCBkcm1fcHJpbnRlciAq bSkKPiAgCWRybV9wcmludGYobSwgIlxuIik7Cj4gIH0KPiAgCj4gK3N0YXRpYyB1OCB1c2VyX2Ns YXNzX21hcFtdID0gewo+ICsJW0k5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUl0gPSBSRU5ERVJfQ0xB U1MsCj4gKwlbSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWV0gPSBDT1BZX0VOR0lORV9DTEFTUywKPiAr CVtJOTE1X0VOR0lORV9DTEFTU19WSURFT10gPSBWSURFT19ERUNPREVfQ0xBU1MsCj4gKwlbSTkx NV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRV0gPSBWSURFT19FTkhBTkNFTUVOVF9DTEFTUywK PiArfTsKPiArCj4gK3N0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgo+ICtpbnRlbF9lbmdpbmVfbG9v a3VwX3VzZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4IGNsYXNzLCB1OCBpbnN0 YW5jZSkKPiArewo+ICsJaWYgKGNsYXNzID49IEFSUkFZX1NJWkUodXNlcl9jbGFzc19tYXApKQo+ ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCWNsYXNzID0gdXNlcl9jbGFzc19tYXBbY2xhc3NdOwo+ ICsKPiArCUdFTV9CVUdfT04oY2xhc3MgPiBNQVhfRU5HSU5FX0NMQVNTKTsKPiArCj4gKwlpZiAo aW5zdGFuY2UgPiBNQVhfRU5HSU5FX0lOU1RBTkNFKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiAr CXJldHVybiBpOTE1LT5lbmdpbmVfY2xhc3NbY2xhc3NdW2luc3RhbmNlXTsKPiArfQo+ICsKPiAg I2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQo+ICAjaW5jbHVkZSAic2Vs ZnRlc3RzL21vY2tfZW5naW5lLmMiCj4gICNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9yaW5nYnVmZmVyLmgKPiBpbmRleCBkMTZlMzJhZGYxOWEuLmQ1MzdkMjIyNjMyYSAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiBAQCAtNiw2ICs2LDcgQEAK PiAgI2luY2x1ZGUgImk5MTVfZ2VtX2JhdGNoX3Bvb2wuaCIKPiAgI2luY2x1ZGUgImk5MTVfZ2Vt X3JlcXVlc3QuaCIKPiAgI2luY2x1ZGUgImk5MTVfZ2VtX3RpbWVsaW5lLmgiCj4gKyNpbmNsdWRl ICJpOTE1X3BtdS5oIgo+ICAjaW5jbHVkZSAiaTkxNV9zZWxmdGVzdC5oIgo+ICAKPiAgc3RydWN0 IGRybV9wcmludGVyOwo+IEBAIC0zMzksNiArMzQwLDI4IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3Mgewo+ICAJCUk5MTVfU0VMRlRFU1RfREVDTEFSRShib29sIG1vY2sgOiAxKTsKPiAgCX0gYnJl YWRjcnVtYnM7Cj4gIAo+ICsJc3RydWN0IHsKPiArCQkvKioKPiArCQkgKiBAZW5hYmxlOiBCaXRt YXNrIG9mIGVuYWJsZSBzYW1wbGUgZXZlbnRzIG9uIHRoaXMgZW5naW5lLgo+ICsJCSAqCj4gKwkJ ICogQml0cyBjb3JyZXNwb25kIHRvIHNhbXBsZSBldmVudCB0eXBlcywgZm9yIGluc3RhbmNlCj4g KwkJICogSTkxNV9TQU1QTEVfUVVFVUVEIGlzIGJpdCAwIGV0Yy4KPiArCQkgKi8KPiArCQl1MzIg ZW5hYmxlOwo+ICsJCS8qKgo+ICsJCSAqIEBlbmFibGVfY291bnQ6IFJlZmVyZW5jZSBjb3VudCBm b3IgdGhlIGVuYWJsZWQgc2FtcGxlcnMuCj4gKwkJICoKPiArCQkgKiBJbmRleCBudW1iZXIgY29y cmVzcG9uZHMgdG8gdGhlIGJpdCBudW1iZXIgZnJvbSBAZW5hYmxlLgo+ICsJCSAqLwo+ICsJCXVu c2lnbmVkIGludCBlbmFibGVfY291bnRbSTkxNV9QTVVfU0FNUExFX0JJVFNdOwo+ICsJCS8qKgo+ ICsJCSAqIEBzYW1wbGU6IENvdW50ZXIgdmFsdWVzIGZvciBzYW1wbGluZyBldmVudHMuCj4gKwkJ ICoKPiArCQkgKiBPdXIgaW50ZXJuYWwgdGltZXIgc3RvcmVzIHRoZSBjdXJyZW50IGNvdW50ZXJz IGluIHRoaXMgZmllbGQuCj4gKwkJICovCj4gKwkJc3RydWN0IGk5MTVfcG11X3NhbXBsZSBzYW1w bGVbSTkxNV9FTkdJTkVfU0FNUExFX01BWF07Cj4gKwl9IHBtdTsKPiArCj4gIAkvKgo+ICAJICog QSBwb29sIG9mIG9iamVjdHMgdG8gdXNlIGFzIHNoYWRvdyBjb3BpZXMgb2YgY2xpZW50IGJhdGNo IGJ1ZmZlcnMKPiAgCSAqIHdoZW4gdGhlIGNvbW1hbmQgcGFyc2VyIGlzIGVuYWJsZWQuIFByZXZl bnRzIHRoZSBjbGllbnQgZnJvbQo+IEBAIC05MjcsNCArOTUwLDcgQEAgYm9vbCBpbnRlbF9lbmdp bmVfY2FuX3N0b3JlX2R3b3JkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gIAo+ ICB2b2lkIGludGVsX2VuZ2luZV9kdW1wKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwg c3RydWN0IGRybV9wcmludGVyICpwKTsKPiAgCj4gK3N0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgo+ ICtpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUs IHU4IGNsYXNzLCB1OCBpbnN0YW5jZSk7Cj4gKwo+ICAjZW5kaWYgLyogX0lOVEVMX1JJTkdCVUZG RVJfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5j bHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gaW5kZXggYjU3OTg1OTI5NTUzLi40MGU3YjQzOGJk YWEgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gKysrIGIvaW5j bHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gQEAgLTEwMiw2ICsxMDIsNDUgQEAgZW51bSBkcm1f aTkxNV9nZW1fZW5naW5lX2NsYXNzIHsKPiAgCUk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSUQJPSAt MQo+ICB9Owo+ICAKPiArLyoqCj4gKyAqIERPQzogcGVyZl9ldmVudHMgZXhwb3NlZCBieSBpOTE1 IHRocm91Z2ggL3N5cy9idXMvZXZlbnRfc291cmNlcy9kcml2ZXJzL2k5MTUKPiArICoKPiArICov Cj4gKwo+ICtlbnVtIGRybV9pOTE1X3BtdV9lbmdpbmVfc2FtcGxlIHsKPiArCUk5MTVfU0FNUExF X0JVU1kgPSAwLAo+ICsJSTkxNV9TQU1QTEVfV0FJVCA9IDEsCj4gKwlJOTE1X1NBTVBMRV9TRU1B ID0gMiwKPiArCUk5MTVfRU5HSU5FX1NBTVBMRV9NQVggLyogbm9uLUFCSSAqLwo+ICt9Owo+ICsK PiArI2RlZmluZSBJOTE1X1BNVV9TQU1QTEVfQklUUyAoNCkKPiArI2RlZmluZSBJOTE1X1BNVV9T QU1QTEVfTUFTSyAoMHhmKQo+ICsjZGVmaW5lIEk5MTVfUE1VX1NBTVBMRV9JTlNUQU5DRV9CSVRT ICg4KQo+ICsjZGVmaW5lIEk5MTVfUE1VX0NMQVNTX1NISUZUIFwKPiArCShJOTE1X1BNVV9TQU1Q TEVfQklUUyArIEk5MTVfUE1VX1NBTVBMRV9JTlNUQU5DRV9CSVRTKQo+ICsKPiArI2RlZmluZSBf X0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIHNhbXBsZSkgXAo+ICsJKChjbGFzcykg PDwgSTkxNV9QTVVfQ0xBU1NfU0hJRlQgfCBcCj4gKwkoaW5zdGFuY2UpIDw8IEk5MTVfUE1VX1NB TVBMRV9CSVRTIHwgXAo+ICsJKHNhbXBsZSkpCj4gKwo+ICsjZGVmaW5lIEk5MTVfUE1VX0VOR0lO RV9CVVNZKGNsYXNzLCBpbnN0YW5jZSkgXAo+ICsJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGlu c3RhbmNlLCBJOTE1X1NBTVBMRV9CVVNZKQo+ICsKPiArI2RlZmluZSBJOTE1X1BNVV9FTkdJTkVf V0FJVChjbGFzcywgaW5zdGFuY2UpIFwKPiArCV9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0 YW5jZSwgSTkxNV9TQU1QTEVfV0FJVCkKPiArCj4gKyNkZWZpbmUgSTkxNV9QTVVfRU5HSU5FX1NF TUEoY2xhc3MsIGluc3RhbmNlKSBcCj4gKwlfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFu Y2UsIEk5MTVfU0FNUExFX1NFTUEpCj4gKwo+ICsjZGVmaW5lIF9fSTkxNV9QTVVfT1RIRVIoeCkg KF9fSTkxNV9QTVVfRU5HSU5FKDB4ZmYsIDB4ZmYsIDB4ZikgKyAxICsgKHgpKQo+ICsKPiArI2Rl ZmluZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZCV9fSTkxNV9QTVVfT1RIRVIoMCkKPiArI2Rl ZmluZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZCV9fSTkxNV9QTVVfT1RIRVIoMSkKPiAr Cj4gKyNkZWZpbmUgSTkxNV9QTVVfTEFTVCBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZCj4g Kwo+ICAvKiBFYWNoIHJlZ2lvbiBpcyBhIG1pbmltdW0gb2YgMTZrLCBhbmQgdGhlcmUgYXJlIGF0 IG1vc3QgMjU1IG9mIHRoZW0uCj4gICAqLwo+ICAjZGVmaW5lIEk5MTVfTlJfVEVYX1JFR0lPTlMg MjU1CS8qIHRhYmxlIHNpemUgMmsgLSBtYXhpbXVtIGR1ZSB0byB1c2UKPiAtLSAKPiAyLjE0LjEK PiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IElu dGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4g aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==