From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 03/20] drm/i915: TDR / per-engine hang recovery support for gen8. Date: Fri, 29 Jan 2016 16:16:29 +0200 Message-ID: <87fuxgo4hu.fsf@gaia.fi.intel.com> References: <1452706112-8617-1-git-send-email-arun.siluvery@linux.intel.com> <1452706112-8617-4-git-send-email-arun.siluvery@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 2A43A6E9A0 for ; Fri, 29 Jan 2016 06:18:51 -0800 (PST) In-Reply-To: <1452706112-8617-4-git-send-email-arun.siluvery@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: Arun Siluvery , intel-gfx@lists.freedesktop.org Cc: Ian Lister , Tomas Elf List-Id: intel-gfx@lists.freedesktop.org QXJ1biBTaWx1dmVyeSA8YXJ1bi5zaWx1dmVyeUBsaW51eC5pbnRlbC5jb20+IHdyaXRlczoKCj4g RnJvbTogVG9tYXMgRWxmIDx0b21hcy5lbGZAaW50ZWwuY29tPgo+Cj4gVERSID0gVGltZW91dCBE ZXRlY3Rpb24gYW5kIFJlY292ZXJ5Lgo+Cj4gVGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBzdXBwb3J0 IGZvciBURFItc3R5bGUgcGVyLWVuZ2luZSByZXNldCBhcyBhbiBpbml0aWFsLAo+IGxlc3MgaW50 cnVzaXZlIGhhbmcgcmVjb3Zlcnkgb3B0aW9uIHRvIGJlIGF0dGVtcHRlZCBiZWZvcmUgZmFsbGlu ZyBiYWNrIHRvIHRoZQo+IGxlZ2FjeSBmdWxsIEdQVSByZXNldCByZWNvdmVyeSBtb2RlIGlmIG5l Y2Vzc2FyeS4gSW5pdGlhbGx5IHdlJ3JlIG9ubHkKPiBzdXBwb3J0aW5nIGdlbjggYnV0IGFkZGlu ZyBzdXBwb3J0IGZvciBnZW43IGlzIHN0cmFpZ2h0LWZvcndhcmQgc2luY2Ugd2UndmUKPiBhbHJl YWR5IGVzdGFibGlzaGVkIGFuIGV4dGVuc2libGUgZnJhbWV3b3JrIHdoZXJlIGdlbjcgc3VwcG9y dCBjYW4gYmUgcGx1Z2dlZAo+IGluIChhZGQgY29ycmVzcG9uZGluZyB2ZXJzaW9ucyBvZiBpbnRl bF9yaW5nX2VuYWJsZSwgaW50ZWxfcmluZ19kaXNhYmxlLAo+IGludGVsX3Jpbmdfc2F2ZSwgaW50 ZWxfcmluZ19yZXN0b3JlLCBldGMuKS4KPgo+IDEuIFBlci1lbmdpbmUgcmVjb3ZlcnkgdnMuIEZ1 bGwgR1BVIHJlY292ZXJ5Cj4KPiBUbyBjYXB0dXJlIHRoZSBzdGF0ZSBvZiBhIHNpbmdsZSBlbmdp bmUgYmVpbmcgZGV0ZWN0ZWQgYXMgaHVuZyB0aGVyZSBpcyBub3cgYQo+IG5ldyBmbGFnIGZvciBl dmVyeSBlbmdpbmUgdGhhdCBjYW4gYmUgc2V0IG9uY2UgdGhlIGRlY2lzaW9uIGhhcyBiZWVuIG1h ZGUgdG8KPiBzY2hlZHVsZSBoYW5nIHJlY292ZXJ5IGZvciB0aGF0IHBhcnRpY3VsYXIgZW5naW5l LiBUaGlzIHBhdGNoIG9ubHkgcHJvdmlkZXMgdGhlCj4gaGFuZyByZWNvdmVyeSBwYXRoIGJ1dCBu b3QgdGhlIGhhbmcgZGV0ZWN0aW9uIGludGVncmF0aW9uIHNvIGZvciBub3cgdGhlcmUgaXMKPiBu byB3YXkgb2YgZGV0ZWN0aW5nIGluZGl2aWR1YWwgZW5naW5lcyBhcyBodW5nIGFuZCB0YXJnZXR0 aW5nIHRoYXQgaW5kaXZpZHVhbAo+IGVuZ2luZSBmb3IgcGVyLWVuZ2luZSBoYW5nIHJlY292ZXJ5 Lgo+Cj4gVGhlIGZvbGxvd2luZyBhbGdvcml0aG0gaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hlbiB0 byB1c2Ugd2hpY2ggcmVjb3ZlcnkgbW9kZQo+IGdpdmVuIHRoYXQgaGFuZyBkZXRlY3Rpb24gaGFz IHNvbWVob3cgZGV0ZWN0ZWQgYSBoYW5nIG9uIGFuIGluZGl2aWR1YWwgZW5naW5lCj4gYW5kIGdp dmVuIHRoYXQgcGVyLWVuZ2luZSBoYW5nIHJlY292ZXJ5IGhhcyBiZWVuIGVuYWJsZWQgKHdoaWNo IGl0IGJ5IGRlZmF1bHQKPiBpcyBub3QpOgo+Cj4gCTEuIFRoZSBlcnJvciBoYW5kbGVyIGNoZWNr cyBhbGwgZW5naW5lcyB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgYXMgaHVuZwo+IAlieSB0aGUgaGFu ZyBjaGVja2VyIGFuZCBjaGVja3MgaG93IGxvbmcgYWdvIGl0IHdhcyBzaW5jZSBpdCBsYXN0Cj4g CWF0dGVtcHRlZCB0byBkbyBwZXItZW5naW5lIGhhbmcgcmVjb3ZlcnkgZm9yIGVhY2ggcmVzcGVj dGl2ZSwgY3VycmVudGx5Cj4gCWh1bmcgZW5naW5lLiBJZiB0aGUgbWVhc3VyZWQgdGltZSBwZXJp b2QgaXMgd2l0aGluIGEgY2VydGFpbiB0aW1lCj4gCXdpbmRvdywgaS5lLiB0aGUgbGFzdCBwZXIt ZW5naW5lIGhhbmcgcmVjb3Zlcnkgd2FzIGRvbmUgdG9vIHJlY2VudGx5LAo+IAlpdCBpcyBkZXRl cm1pbmVkIHRoYXQgdGhlIHByZXZpb3VzbHkgYXR0ZW1wdGVkIHBlci1lbmdpbmUgaGFuZyByZWNv dmVyeQo+IAl3YXMgaW5lZmZlY3RpdmUgYW5kIHRoZSBzdGVwIGlzIHRha2VuIHRvIHByb21vdGUg dGhlIGN1cnJlbnQgaGFuZyB0byBhCj4gCWZ1bGwgR1BVIHJlc2V0LiBUaGUgZGVmYXVsdCB2YWx1 ZSBmb3IgdGhpcyB0aW1lIHdpbmRvdyBpcyAxMCBzZWNvbmRzLAo+IAltZWFuaW5nIGFueSBoYW5n IGhhcHBlbmluZyB3aXRoaW4gMTAgc2Vjb25kcyBvZiBhIHByZXZpb3VzIGhhbmcgb24gdGhlCj4g CXNhbWUgZW5naW5lIHdpbGwgYmUgcHJvbW90ZWQgdG8gZnVsbCBHUFUgcmVzZXQuIChvZiBjb3Vy c2UsIGFzIGxvbmcgYXMKPiAJdGhlIHBlci1lbmdpbmUgaGFuZyByZWNvdmVyeSBvcHRpb24gaXMg ZGlzYWJsZWQgdGhpcyB3b24ndCBtYXR0ZXIgYW5kCj4gCXRoZSBlcnJvciBoYW5kbGVyIHdpbGwg YWx3YXlzIGdvIGZvciBsZWdhY3kgZnVsbCBHUFUgcmVzZXQpCj4KPiAJMi4gSWYgdGhlIGVycm9y IGhhbmRsZXIgZGV0ZXJtaW5lcyB0aGF0IG5vIGN1cnJlbnRseSBodW5nIGVuZ2luZSBoYXMKPiAJ cmVjZW50bHkgaGFkIGhhbmcgcmVjb3ZlcnkgYSBwZXItZW5naW5lIGhhbmcgcmVjb3ZlcnkgaXMg c2NoZWR1bGVkLgo+Cj4gCTMuIElmIHRoZSBkZWNpc2lvbiB0byBnbyB3aXRoIHBlci1lbmdpbmUg aGFuZyByZWNvdmVyeSBpcyBub3QgdGFrZW4sIG9yCj4gCWlmIHBlci1lbmdpbmUgaGFuZyByZWNv dmVyeSBpcyBhdHRlbXB0ZWQgYnV0IGZhaWxlZCBmb3Igd2hhdGV2ZXIKPiAJcmVhc29uLCBURFIg ZmFsbHMgYmFjayB0byBsZWdhY3kgZnVsbCBHUFUgcmVjb3ZlcnkuCj4KPiBOT1RFOiBHZW43IGFu ZCBlYXJsaWVyIHdpbGwgYWx3YXlzIHByb21vdGUgdG8gZnVsbCBHUFUgcmVzZXQgc2luY2UgdGhl cmUgaXMKPiBjdXJyZW50bHkgbm8gcGVyLWVuZ2luZSByZXNldCBzdXBwb3J0IGZvciB0aGVzZSBn ZW5zLgo+Cj4gMi4gQ29udGV4dCBTdWJtaXNzaW9uIFN0YXR1cyBDb25zaXN0ZW5jeS4KPgo+IFBl ci1lbmdpbmUgaGFuZyByZWNvdmVyeSBvbiBnZW44IChvciBleGVjbGlzdCBzdWJtaXNzaW9uIG1v ZGUgaW4gZ2VuZXJhbCkKPiByZWxpZXMgb24gdGhlIGJhc2ljIGNvbmNlcHQgb2YgY29udGV4dCBz dWJtaXNzaW9uIHN0YXR1cyBjb25zaXN0ZW5jeS4gV2hhdCB0aGlzCj4gbWVhbnMgaXMgdGhhdCB3 ZSBtYWtlIHN1cmUgdGhhdCB0aGUgc3RhdHVzIG9mIHRoZSBoYXJkd2FyZSBhbmQgdGhlIGRyaXZl ciB3aGVuCj4gaXQgY29tZXMgdG8gdGhlIHN1Ym1pc3Npb24gb2YgdGhlIGN1cnJlbnRseSBydW5u aW5nIGNvbnRleHQgb24gYW55IGVuZ2luZSBpcwo+IGNvbnNpc3RlbnQuIEZvciBleGFtcGxlLCB3 aGVuIHN1Ym1pdHRpbmcgYSBjb250ZXh0IHRvIHRoZSBjb3JyZXNwb25kaW5nIEVMU1AKPiBwb3J0 IG9mIGFuIGVuZ2luZSB3ZSBleHBlY3QgdGhlIG93bmluZyByZXF1ZXN0IG9mIHRoYXQgY29udGV4 dCB0byBiZSBhdCB0aGUKPiBoZWFkIG9mIHRoZSBjb3JyZXNwb25kaW5nIGV4ZWN1dGlvbiBsaXN0 IHF1ZXVlLiBMaWtld2lzZSwgYXMgbG9uZyBhcyB0aGUKPiBjb250ZXh0IGlzIGV4ZWN1dGluZyBv biB0aGUgR1BVIHdlIGV4cGVjdCB0aGUgRVhFQ0xJU1RfU1RBVFVTIHJlZ2lzdGVyIGFuZCB0aGUK PiBjb250ZXh0IHN0YXR1cyBidWZmZXIgKENTQikgdG8gcmVmbGVjdCB0aGlzLiBUaHVzLCBpZiB0 aGUgY29udGV4dCBzdWJtaXNzaW9uCj4gc3RhdHVzIGlzIGNvbnNpc3RlbnQgdGhlIElEIG9mIHRo ZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbnRleHQgc2hvdWxkIGJlIGluCj4gRVhFQ0xJU1RfU1RB VFVTIGFuZCBpdCBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBjb250ZXh0IG9mIHRoZSBo ZWFkCj4gcmVxdWVzdCBlbGVtZW50IGluIHRoZSBleGVjdXRpb24gbGlzdCBxdWV1ZSBjb3JyZXNw b25kaW5nIHRvIHRoYXQgZW5naW5lLgo+Cj4gVGhlIHJlYXNvbiB3aHkgdGhpcyBpcyBpbXBvcnRh bnQgZm9yIHBlci1lbmdpbmUgaGFuZyByZWNvdmVyeSBpbiBleGVjbGlzdCBtb2RlCj4gaXMgYmVj YXVzZSB0aGlzIHJlY292ZXJ5IG1vZGUgcmVsaWVzIG9uIGNvbnRleHQgcmVzdWJtaXNzaW9uIGlu IG9yZGVyIHRvIHJlc3VtZQo+IGV4ZWN1dGlvbiBmb2xsb3dpbmcgdGhlIHJlY292ZXJ5LiBJZiBh IGNvbnRleHQgaGFzIGJlZW4gZGV0ZXJtaW5lZCB0byBiZSBodW5nCj4gYW5kIHRoZSBwZXItZW5n aW5lIGhhbmcgcmVjb3ZlcnkgbW9kZSBpcyBlbmdhZ2VkIGxlYWRpbmcgdG8gdGhlIHJlc3VibWlz c2lvbiBvZgo+IHRoYXQgY29udGV4dCBpdCdzIGltcG9ydGFudCB0aGF0IHRoZSBoYXJkd2FyZSBp cyBpbiBmYWN0IG5vdCBidXN5IGRvaW5nCj4gc29tZXRoaW5nIGVsc2Ugb3IgaXMgYmVpbmcgaWRs ZSBzaW5jZSBhIHJlc3VibWlzc2lvbiBkdXJpbmcgdGhpcyBzdGF0ZSBjb3VsZAo+IGNhdXNlIHVu Zm9yc2VlbiBzaWRlLWVmZmVjdHMgc3VjaCBhcyB1bmV4cGVjdGVkIHByZWVtcHRpb25zLgo+Cj4g VGhlcmUgYXJlIHJhcmUsIGFsdGhvdWdoIGNvbnNpc3RlbnRseSByZXByb2R1Y2FibGUsIHNpdHVh dGlvbnMgdGhhdCBoYXZlIHNob3duCj4gdXAgaW4gcHJhY3RpY2Ugd2hlcmUgdGhlIGRyaXZlciBh bmQgaGFyZHdhcmUgYXJlIG5vIGxvbmdlciBjb25zaXN0ZW50IHdpdGggZWFjaAo+IG90aGVyLCBl LmcuIGR1ZSB0byBsb3N0IGNvbnRleHQgY29tcGxldGlvbiBpbnRlcnJ1cHRzIGFmdGVyIHdoaWNo IHRoZSBoYXJkd2FyZQo+IHdvdWxkIGJlIGlkbGUgYnV0IHRoZSBkcml2ZXIgd291bGQgc3RpbGwg dGhpbmsgdGhhdCBhIGNvbnRleHQgd291bGQgc3RpbGwgYmUKPiBhY3RpdmUuCj4KPiAzLiBUaGVy ZSBpcyBhIG5ldyByZXNldCBwYXRoIGZvciBlbmdpbmUgcmVzZXQgYWxvbmdzaWRlIHRoZSBsZWdh Y3kgZnVsbCBHUFUKPiByZXNldCBwYXRoLiBUaGlzIHBhdGggZG9lcyB0aGUgZm9sbG93aW5nOgo+ Cj4gCTEpIENoZWNrIGZvciBjb250ZXh0IHN1Ym1pc3Npb24gY29uc2lzdGVuY3kgdG8gbWFrZSBz dXJlIHRoYXQgdGhlCj4gCWNvbnRleHQgdGhhdCB0aGUgaGFyZHdhcmUgaXMgY3VycmVudGx5IHN0 dWNrIG9uIGlzIGFjdHVhbGx5IHdoYXQgdGhlCj4gCWRyaXZlciBpcyB3b3JraW5nIG9uLiBJZiBu b3QgdGhlbiBjbGVhcmx5IHdlJ3JlIG5vdCBpbiBhIGNvbnNpc3RlbnRseQo+IAlodW5nIHN0YXRl IGFuZCB3ZSBiYWlsIG91dCBlYXJseS4KPgo+IAkyKSBEaXNhYmxlL2lkbGUgdGhlIGVuZ2luZS4g VGhpcyBpcyBkb25lIHRocm91Z2ggcmVzZXQgaGFuZHNoYWtpbmcgb24KPiAJZ2VuOCsgdW5saWtl IGVhcmxpZXIgZ2VucyB3aGVyZSB0aGlzIHdhcyBkb25lIGJ5IGNsZWFyaW5nIHRoZSByaW5nCj4g CXZhbGlkIGJpdHMgaW4gTUlfTU9ERSBhbmQgcmluZyBjb250cm9sIHJlZ2lzdGVycywgd2hpY2gg YXJlIG5vIGxvbmdlcgo+IAlzdXBwb3J0ZWQgb24gZ2VuOCsuIFJlc2V0IGhhbmRzaGFraW5nIHRy YW5zbGF0ZXMgdG8gc2V0dGluZyB0aGUgcmVzZXQKPiAJcmVxdWVzdCBiaXQgaW4gdGhlIHJlc2V0 IGNvbnRyb2wgcmVnaXN0ZXIuCj4KPiAJMykgU2F2ZSB0aGUgY3VycmVudCBlbmdpbmUgc3RhdGUu IFdoYXQgdGhpcyB0cmFuc2xhdGVzIHRvIG9uIGdlbjggaXMKPiAJc2ltcGx5IHRvIHJlYWQgdGhl IGN1cnJlbnQgdmFsdWUgb2YgdGhlIGhlYWQgcmVnaXN0ZXIgYW5kIG51ZGdlIGl0IHNvCj4gCXRo YXQgaXQgcG9pbnRzIHRvIHRoZSBuZXh0IHZhbGlkIGluc3RydWN0aW9uIGluIHRoZSByaW5nIGJ1 ZmZlci4gU2luY2UKPiAJd2UgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1dGlvbiBpcyBjdXJyZW50bHkg c3R1Y2sgaW4gYSBiYXRjaCBidWZmZXIgdGhlCj4gCWVmZmVjdCBvZiB0aGlzIGlzIHRoYXQgdGhl IGJhdGNoYnVmZmVyIHN0YXJ0IGluc3RydWN0aW9uIG9mIHRoZSBodW5nCj4gCWJhdGNoIGJ1ZmZl ciBpcyBza2lwcGVkIHNvIHRoYXQgd2hlbiBleGVjdXRpb24gcmVzdW1lcywgZm9sbG93aW5nIHRo ZQo+IAloYW5nIHJlY292ZXJ5IGNvbXBsZXRpb24sIGl0IHJlc3VtZXMgaW1tZWRpYXRlbHkgZm9s bG93aW5nIHRoZSBiYXRjaAo+IAlidWZmZXIuCj4KPiAJVGhpcyBlZmZlY3RpdmVseSBtZWFucyB0 aGF0IHdlJ3JlIGZvcmNlZnVsbHkgdGVybWluYXRpbmcgdGhlIGN1cnJlbnRseQo+IAlhY3RpdmUs IGh1bmcgYmF0Y2ggYnVmZmVyLiBPYnZpb3VzbHksIHRoZSBvdXRjb21lIG9mIHRoaXMgaW50ZXJ2 ZW50aW9uCj4gCWlzIHBvdGVudGlhbGx5IHVuZGVmaW5lZCBidXQgdGhlcmUgYXJlIG5vdCBtYW55 IGdvb2Qgb3B0aW9ucyBpbiB0aGlzCj4gCXNjZW5hcmlvLiBJdCdzIGJldHRlciB0aGFuIHJlc2V0 dGluZyB0aGUgZW50aXJlIEdQVSBpbiB0aGUgdmFzdAo+IAltYWpvcml0eSBvZiBjYXNlcy4KPgo+ IAlTYXZlIHRoZSBudWRnZWQgaGVhZCB2YWx1ZSB0byBiZSBhcHBsaWVkIGxhdGVyLgo+Cj4gCTQp IFJlc2V0IHRoZSBlbmdpbmUuCj4KPiAJNSkgQXBwbHkgdGhlIG51ZGdlZCBoZWFkIHZhbHVlIHRv IHRoZSBoZWFkIHJlZ2lzdGVyLgo+Cj4gCTYpIFJlZW5hYmxlIHRoZSBlbmdpbmUuIEZvciBnZW44 IHRoaXMgbWVhbnMgcmVzdWJtaXR0aW5nIHRoZSBmaXhlZC11cAo+IAljb250ZXh0LCBhbGxvd2lu ZyBleGVjdXRpb24gdG8gcmVzdW1lLiBJbiBvcmRlciB0byByZXN1Ym1pdCBhIGNvbnRleHQKPiAJ d2l0aG91dCByZWx5aW5nIG9uIHRoZSBjdXJyZW50bHkgaHVuZyBleGVjbGlzdCBxdWV1ZSB3ZSB1 c2UgYSBuZXcsCj4gCXByaXZpbGVnZWQgQVBJIHRoYXQgaXMgZGVkaWNhdGVkIHRvIFREUiB1c2Ug b25seS4gVGhpcyBzdWJtaXNzaW9uIEFQSQo+IAlieXBhc3NlcyBhbnkgY3VycmVudGx5IHF1ZXVl ZCB3b3JrIGFuZCBnZXRzIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlCj4gCUVMU1AgcG9ydHMuCj4K PiAJNykgSWYgdGhlIGVuZ2luZSBoYW5nIHJlY292ZXJ5IHByb2NlZHVyZSBmYWlscyBhdCBhbnkg cG9pbnQgaW4gYmV0d2Vlbgo+IAlkaXNhYmxlbWVudCBhbmQgcmVlbmFibGVtZW50IG9mIHRoZSBl bmdpbmUgdGhlcmUgaXMgYSBiYWNrLW9mZgo+IAlwcm9jZWR1cmU6IEZvciBnZW44IGl0J3MgcG9z c2libGUgdG8gYmFjayBvdXQgb2YgdGhlIHJlc2V0IGhhbmRzaGFrZSBieQo+IAljbGVhcmluZyB0 aGUgcmVzZXQgcmVxdWVzdCBiaXQgaW4gdGhlIHJlc2V0IGNvbnRyb2wgcmVnaXN0ZXIuCj4KPiBO T1RFOgo+IEl0J3MgcG9zc2libGUgdGhhdCBzb21lIG9mIEJlbiBXaWRhd3NreSdzIG9yaWdpbmFs IHBlci1lbmdpbmUgcmVzZXQgcGF0Y2hlcwo+IGZyb20gMyB5ZWFycyBhZ28gYXJlIGluIHRoaXMg Y29tbWl0IGJ1dCBzaW5jZSB0aGlzIHdvcmsgaGFzIGdvbmUgdGhyb3VnaCB0aGUKPiBoYW5kcyBv ZiBhdCBsZWFzdCAzIHBlb3BsZSBhbHJlYWR5IGFueSBraW5kIG9mIG93bmVyc2hpcCB0cmFja2lu ZyBoYXMgYmVlbiBsb3N0Cj4gYSBsb25nIHRpbWUgYWdvLiBJZiB5b3UgdGhpbmsgdGhhdCB5b3Ug c2hvdWxkIGJlIG9uIHRoZSBzb2IgbGlzdCBqdXN0IGxldCBtZQo+IGtub3cuCj4KPiAqIFJGQ3Yy OiAoQ2hyaXMgV2lsc29uIC8gRGFuaWVsIFZldHRlcikKPiAtIFNpbXBseSB1c2UgdGhlIHByZXZp b3VzbHkgcHJpdmF0ZSBmdW5jdGlvbiBpOTE1X2dlbV9yZXNldF9yaW5nX3N0YXR1cygpIGZyb20K PiAgIHRoZSBlbmdpbmUgaGFuZyByZWNvdmVyeSBwYXRoIHRvIHNldCBhY3RpdmUvcGVuZGluZyBj b250ZXh0IHN0YXR1cy4gVGhpcwo+ICAgcmVwbGljYXRlcyB0aGUgc2FtZSBiZWhhdmlvdXIgYXMg aW4gZnVsbCBHUFUgcmVzZXQgYnV0IGZvciBhIHNpbmdsZSwKPiAgIHRhcmdldHRlZCBlbmdpbmUu Cj4KPiAtIFJlbW92ZSBhbGwgYWRkaXRpb25hbCB1ZXZlbnRzIGZvciBib3RoIGZ1bGwgR1BVIHJl c2V0IGFuZCBwZXItZW5naW5lIHJlc2V0Lgo+ICAgQWRhcHRlZCB1ZXZlbnQgYmVoYXZpb3VyIHRv IHRoZSBuZXcgcGVyLWVuZ2luZSBoYW5nIHJlY292ZXJ5IG1vZGUgaW4gdGhhdCBpdAo+ICAgd2ls bCBvbmx5IHNlbmQgb25lIHVldmVudCByZWdhcmRsZXNzIG9mIHdoaWNoIGZvcm0gb2YgcmVjb3Zl cnkgaXMgZW1wbG95ZWQuCj4gICBJZiBhIHBlci1lbmdpbmUgcmVzZXQgaXMgYXR0ZW1wdGVkIGZp cnN0IHRoZW4gb25lIHVldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQuCj4gICBJZiB0aGF0IHJlY292 ZXJ5IG1vZGUgZmFpbHMgYW5kIHRoZSBoYW5nIGlzIHByb21vdGVkIHRvIGEgZnVsbCBHUFUgcmVz ZXQgbm8KPiAgIGZ1cnRoZXIgdWV2ZW50cyB3aWxsIGJlIGRpc3BhdGNoZWQgYXQgdGhhdCBwb2lu dC4KPgo+IC0gVGlkaWVkIHVwIHRoZSBURFIgY29udGV4dCByZXN1Ym1pc3Npb24gcGF0aCBpbiBp bnRlbF9scmMuYyAuIFJlZHVjZWQgdGhlCj4gICBhbW91bnQgb2YgZHVwbGljYXRpb24gYnkgcmVs eWluZyBlbnRpcmVseSBvbiB0aGUgbm9ybWFsIHVucXVldWUgZnVuY3Rpb24uCj4gICBBZGRlZCBh IG5ldyBwYXJhbWV0ZXIgdG8gdGhlIHVucXVldWUgZnVuY3Rpb24gdGhhdCB0YWtlcyBpbnRvIGNv bnNpZGVyYXRpb24KPiAgIGlmIHRoZSB1bnF1ZXVlIGNhbGwgaXMgZm9yIGEgZmlyc3QtdGltZSBj b250ZXh0IHN1Ym1pc3Npb24gb3IgYSByZXN1Ym1pc3Npb24KPiAgIGFuZCBhZGFwdHMgdGhlIGhh bmRsaW5nIG9mIGVsc3Bfc3VibWl0dGVkIGFjY29yZGluZ2x5LiBUaGUgcmVhc29uIGZvcgo+ICAg dGhpcyBpcyB0aGF0IGZvciBjb250ZXh0IHJlc3VibWlzc2lvbiB3ZSBkb24ndCBleHBlY3QgYW55 IGZ1cnRoZXIKPiAgIGludGVycnVwdHMgZm9yIHRoZSBzdWJtaXNzaW9uIG9yIHRoZSBmb2xsb3dp bmcgY29udGV4dCBjb21wbGV0aW9uLiBBIG1vcmUKPiAgIGVsZWdhbnQgd2F5IG9mIGhhbmRsaW5n IHRoaXMgd291bGQgYmUgdG8gcGhhc2Ugb3V0IGVsc3Bfc3VibWl0dGVkCj4gICBhbHRvZ2V0aGVy LCBob3dldmVyIHRoYXQncyBwYXJ0IG9mIGEgTFJDL2V4ZWNsaXN0IGNsZWFudXAgZWZmb3J0IHRo YXQgaXMKPiAgIGhhcHBlbmluZyBpbmRlcGVuZGVudGx5IG9mIHRoaXMgcGF0Y2ggc2VyaWVzLiBG b3Igbm93IHdlIG1ha2UgdGhpcyBjaGFuZ2UKPiAgIGFzIHNpbXBsZSBhcyBwb3NzaWJsZSB3aXRo IGFzIGZldyBub24tVERSLXJlbGF0ZWQgc2lkZS1lZmZlY3RzIGFzCj4gICBwb3NzaWJsZS4KPgoK PiBTaWduZWQtb2ZmLWJ5OiBUb21hcyBFbGYgPHRvbWFzLmVsZkBpbnRlbC5jb20+Cj4gU2lnbmVk LW9mZi1ieTogSWFuIExpc3RlciA8aWFuLmxpc3RlckBpbnRlbC5jb20+Cj4gQ2M6IENocmlzIFdp bHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBNaWthIEt1b3BwYWxhIDxtaWth Lmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBBcnVuIFNpbHV2ZXJ5 IDxhcnVuLnNpbHV2ZXJ5QGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kbWEuYyAgICAgICAgIHwgIDE4ICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYyAgICAgICAgIHwgMjA2ICsrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgNTggKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2lycS5jICAgICAgICAgfCAxNjkgKysrKysrKysrLQo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3BhcmFtcy5jICAgICAgfCAgMTkgKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9wYXJhbXMuaCAgICAgIHwgICAyICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZWcuaCAgICAgICAgIHwgICAyICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMg ICAgICAgIHwgNTY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xyYy5oICAgICAgICB8ICAxNCArCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xyY190ZHIuaCAgICB8ICAzNiArKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9yaW5nYnVmZmVyLmMgfCAgODQgKysrKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcmluZ2J1ZmZlci5oIHwgIDY0ICsrKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfdW5jb3JlLmMgICAgIHwgMTQ3ICsrKysrKysrKwo+ICAxMyBmaWxlcyBjaGFuZ2VkLCAxMzU4 IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjX3Rkci5oCj4KCjEzMzIgbGluZXMgb2YgbmV3IGNv ZGUgaW4gYSBzaW5nbGUgcGF0Y2guIFdlIG5lZWQgdG8gZmlndXJlCm91dCBob3cgdG8gc3BsaXQg dGhpcy4KClRoZSBjb250ZXh0IHJlZ2lzdGVyIHdyaXRlL3JlYWQgY29kZSBhbmQgcmVsYXRlZCBt YWNyb3MgYXJlCm5vdCBuZWVkZWQgYW55bW9yZSBzbyB0aGF0IHdpbGwgbGVzc2VuIHRoZSBsaW5l cyBhbG90LgoKQnV0IHNvbWUgcmFuZG9tIGNvbW1lbnRzIGZvciByb3VuZCB0d28gaW5saW5lZCBi ZWxvdy4uLgoKCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4gaW5kZXggNDRhODk2Yy4uYzQ1ZWMz NTMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKPiBAQCAtODM3LDYgKzgzNywyMiBAQCBz dGF0aWMgdm9pZCBpbnRlbF9kZXZpY2VfaW5mb19ydW50aW1lX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiAgCQkJIGluZm8tPmhhc19ldV9wZyA/ICJ5IiA6ICJuIik7Cj4gIH0KPiAgCj4g K3N0YXRpYyB2b2lkCj4gK2k5MTVfaGFuZ2NoZWNrX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKPiArewo+ICsJaW50IGk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5H UzsgaSsrKSB7Cj4gKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gJmRldl9wcml2 LT5yaW5nW2ldOwo+ICsJCXN0cnVjdCBpbnRlbF9yaW5nX2hhbmdjaGVjayAqaGMgPSAmZW5naW5l LT5oYW5nY2hlY2s7Cj4gKwo+ICsJCWk5MTVfaGFuZ2NoZWNrX3JlaW5pdChlbmdpbmUpOwoKaW50 ZWxfZW5naW5lX2luaXRfaGFuZ2NoZWNrKGVuZ2luZSk7CgoKPiArCQloYy0+cmVzZXRfY291bnQg PSAwOwo+ICsJCWhjLT50ZHJfY291bnQgPSAwOwo+ICsJfQo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9p ZCBpbnRlbF9pbml0X2RwaW8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7 Cj4gIAkvKgo+IEBAIC0xMDM0LDYgKzEwNTAsOCBAQCBpbnQgaTkxNV9kcml2ZXJfbG9hZChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+ICAKPiAgCWk5MTVfZ2Vt X2xvYWQoZGV2KTsKPiAgCj4gKwlpOTE1X2hhbmdjaGVja19pbml0KGRldik7Cj4gKwo+ICAJLyog T24gdGhlIDk0NUcvR00sIHRoZSBjaGlwc2V0IHJlcG9ydHMgdGhlIE1TSSBjYXBhYmlsaXR5IG9u IHRoZQo+ICAJICogaW50ZWdyYXRlZCBncmFwaGljcyBldmVuIHRob3VnaCB0aGUgc3VwcG9ydCBp c24ndCBhY3R1YWxseSB0aGVyZQo+ICAJICogYWNjb3JkaW5nIHRvIHRoZSBwdWJsaXNoZWQgc3Bl Y3MuICBJdCBkb2Vzbid0IGFwcGVhciB0byBmdW5jdGlvbgo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu Ywo+IGluZGV4IGYxN2EyYjAuLmMwYWQwMDMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMK PiBAQCAtMzQsNiArMzQsNyBAQAo+ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAgI2luY2x1ZGUg Imk5MTVfdHJhY2UuaCIKPiAgI2luY2x1ZGUgImludGVsX2Rydi5oIgo+ICsjaW5jbHVkZSAiaW50 ZWxfbHJjX3Rkci5oIgoKV2Ugd2FudCB0byBwdXNoIHByZSBnZW4gOCBzdHVmZiBhbHNvIHRvIGhl cmUsIGF0bGVhc3QKZXZlbnR1YWxseS4gU28KCiNpbmNsdWRlICJpbnRlbF90ZHIuaCIKCj4gIAo+ ICAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Cj4gQEAgLTU3MSw2ICs1NzIsNyBAQCBzdGF0aWMgaW50IGk5MTVfZHJtX3N1c3BlbmQoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7Cj4gIAlwY2lfcG93ZXJfdCBvcHJlZ2lvbl90YXJnZXRfc3RhdGU7 Cj4gIAlpbnQgZXJyb3I7Cj4gKwlpbnQgaTsKPiAgCj4gIAkvKiBpZ25vcmUgbGlkIGV2ZW50cyBk dXJpbmcgc3VzcGVuZCAqLwo+ICAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPm1vZGVzZXRfcmVzdG9y ZV9sb2NrKTsKPiBAQCAtNTk2LDYgKzU5OCwxNiBAQCBzdGF0aWMgaW50IGk5MTVfZHJtX3N1c3Bl bmQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCj4gIAlpbnRlbF9ndWNfc3VzcGVuZChkZXYp Owo+ICAKPiArCS8qCj4gKwkgKiBDbGVhciBhbnkgcGVuZGluZyByZXNldCByZXF1ZXN0cy4gVGhl eSBzaG91bGQgYmUgcGlja2VkIHVwCj4gKwkgKiBhZnRlciByZXN1bWUgd2hlbiBuZXcgd29yayBp cyBzdWJtaXR0ZWQKPiArCSAqLwo+ICsJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBp KyspCj4gKwkJYXRvbWljX3NldCgmZGV2X3ByaXYtPnJpbmdbaV0uaGFuZ2NoZWNrLmZsYWdzLCAw KTsKClRoaXMgd2lsbCBjYXVzZSBoYXZvYyBpZiB5b3UgZXZlciBleHBhbmQgdGhlIGZsYWcgc3Bh Y2UuIElmCnRoZSBjb21tZW50IHNheXMgdGhhdCB5b3Ugd2FudCB0byBjbGVhciBwZW5kaW5nIHJl c2V0cywgdGhlbgpjbGVhciBpdCB3aXRoIG1hc2suCgo+ICsKPiArCWF0b21pY19jbGVhcl9tYXNr KEk5MTVfUkVTRVRfSU5fUFJPR1JFU1NfRkxBRywKPiArCQkmZGV2X3ByaXYtPmdwdV9lcnJvci5y ZXNldF9jb3VudGVyKTsKPiArCj4gIAlpbnRlbF9zdXNwZW5kX2d0X3Bvd2Vyc2F2ZShkZXYpOwo+ ICAKPiAgCS8qCj4gQEAgLTk0OCw2ICs5NjAsMjAwIEBAIGludCBpOTE1X3Jlc2V0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiArLyoqCj4gKyAqIGk5MTVf cmVzZXRfZW5naW5lIC0gcmVzZXQgR1BVIGVuZ2luZSBhZnRlciBhIGhhbmcKPiArICogQGVuZ2lu ZTogZW5naW5lIHRvIHJlc2V0Cj4gKyAqCj4gKyAqIFJlc2V0IGEgc3BlY2lmaWMgR1BVIGVuZ2lu ZS4gVXNlZnVsIGlmIGEgaGFuZyBpcyBkZXRlY3RlZC4gUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Nm dWwKPiArICogcmVzZXQgb3Igb3RoZXJ3aXNlIGFuIGVycm9yIGNvZGUuCj4gKyAqCj4gKyAqIFBy b2NlZHVyZSBpcyBmYWlybHkgc2ltcGxlOgo+ICsgKgo+ICsgKgktIEZvcmNlIGVuZ2luZSB0byBp ZGxlLgo+ICsgKgo+ICsgKgktIFNhdmUgY3VycmVudCBoZWFkIHJlZ2lzdGVyIHZhbHVlIGFuZCBu dWRnZSBpdCBwYXN0IHRoZSBwb2ludCBvZiB0aGUgaGFuZyBpbiB0aGUKPiArICoJICByaW5nIGJ1 ZmZlciwgd2hpY2ggaXMgdHlwaWNhbGx5IHRoZSBCQl9TVEFSVCBpbnN0cnVjdGlvbiBvZiB0aGUg aHVuZyBiYXRjaCBidWZmZXIsCj4gKyAqCSAgb24gdG8gdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlv bi4KPiArICoKPiArICoJLSBSZXNldCBlbmdpbmUuCj4gKyAqCj4gKyAqCS0gUmVzdG9yZSB0aGUg cHJldmlvdXNseSBzYXZlZCwgbnVkZ2VkIGhlYWQgcmVnaXN0ZXIgdmFsdWUuCj4gKyAqCj4gKyAq CS0gUmUtZW5hYmxlIGVuZ2luZSB0byByZXN1bWUgcnVubmluZy4gT24gZ2VuOCB0aGlzIHJlcXVp cmVzIHRoZSBwcmV2aW91c2x5IGh1bmcKPiArICoJICBjb250ZXh0IHRvIGJlIHJlc3VibWl0dGVk IHRvIEVMU1AgdmlhIHRoZSBkZWRpY2F0ZWQgVERSLWV4ZWNsaXN0cyBpbnRlcmZhY2UuCj4gKyAq Cj4gKyAqLwo+ICtpbnQgaTkxNV9yZXNldF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5naW5lLT5kZXY7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ ICsJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpjdXJyZW50X3JlcXVlc3QgPSBOVUxMOwo+ ICsJdWludDMyX3QgaGVhZDsKPiArCWJvb2wgZm9yY2VfYWR2YW5jZSA9IGZhbHNlOwo+ICsJaW50 IHJldCA9IDA7Cj4gKwlpbnQgZXJyX3JldCA9IDA7Cj4gKwo+ICsJV0FSTl9PTighbXV0ZXhfaXNf bG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOwo+ICsKPiArICAgICAgICAvKiBUYWtlIHdha2Ug bG9jayB0byBwcmV2ZW50IHBvd2VyIHNhdmluZyBtb2RlICovCj4gKwlpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gKwo+ICsJaTkxNV9nZW1fcmVz ZXRfcmluZ19zdGF0dXMoZGV2X3ByaXYsIGVuZ2luZSk7Cj4gCj4gKwlpZiAoaTkxNS5lbmFibGVf ZXhlY2xpc3RzKSB7Cj4gKwkJZW51bSBjb250ZXh0X3N1Ym1pc3Npb25fc3RhdHVzIHN0YXR1cyA9 Cj4gKwkJCWludGVsX2V4ZWNsaXN0c19URFJfZ2V0X2N1cnJlbnRfcmVxdWVzdChlbmdpbmUsIE5V TEwpOwo+ICsKPiArCQkvKgo+ICsJCSAqIElmIHRoZSBjb250ZXh0IHN1Ym1pc3Npb24gc3RhdGUg aW4gaGFyZHdhcmUgaXMgbm90Cj4gKwkJICogY29uc2lzdGVudCB3aXRoIHRoZSB0aGUgY29ycmVz cG9uZGluZyBzdGF0ZSBpbiB0aGUgZHJpdmVyIG9yCj4gKwkJICogaWYgdGhlcmUgZm9yIHNvbWUg cmVhc29uIGlzIG5vIGN1cnJlbnQgY29udGV4dCBpbiB0aGUKPiArCQkgKiBwcm9jZXNzIG9mIGJl aW5nIHN1Ym1pdHRlZCB0aGVuIGJhaWwgb3V0IGFuZCB0cnkgYWdhaW4uIERvCj4gKwkJICogbm90 IHByb2NlZWQgdW5sZXNzIHdlIGhhdmUgcmVsaWFibGUgY3VycmVudCBjb250ZXh0IHN0YXRlCj4g KwkJICogaW5mb3JtYXRpb24uIFRoZSByZWFzb24gd2h5IHRoaXMgaXMgaW1wb3J0YW50IGlzIGJl Y2F1c2UKPiArCQkgKiBwZXItZW5naW5lIGhhbmcgcmVjb3ZlcnkgcmVsaWVzIG9uIGNvbnRleHQg cmVzdWJtaXNzaW9uIGluCj4gKwkJICogb3JkZXIgdG8gZm9yY2UgdGhlIGV4ZWN1dGlvbiB0byBy ZXN1bWUgZm9sbG93aW5nIHRoZSBodW5nCj4gKwkJICogYmF0Y2ggYnVmZmVyLiBJZiB0aGUgaGFy ZHdhcmUgaXMgbm90IGN1cnJlbnRseSBydW5uaW5nIHRoZQo+ICsJCSAqIHNhbWUgY29udGV4dCBh cyB0aGUgZHJpdmVyIHRoaW5rcyBpcyBodW5nIHRoZW4gYW55dGhpbmcgY2FuCj4gKwkJICogaGFw cGVuIGF0IHRoZSBwb2ludCBvZiBjb250ZXh0IHJlc3VibWlzc2lvbiwgZS5nLiB1bmV4cGVjdGVk Cj4gKwkJICogcHJlZW1wdGlvbnMgb3IgdGhlIHByZXZpb3VzbHkgaHVuZyBjb250ZXh0IGNvdWxk IGJlCj4gKwkJICogc3VibWl0dGVkIHdoZW4gdGhlIGhhcmR3YXJlIGlzIGlkbGUgd2hpY2ggbWFr ZXMgbm8gc2Vuc2UuCj4gKwkJICovCj4gKwkJaWYgKHN0YXR1cyAhPSBDT05URVhUX1NVQk1JU1NJ T05fU1RBVFVTX09LKSB7Cj4gKwkJCXJldCA9IC1FQUdBSU47Cj4gKwkJCWdvdG8gcmVzZXRfZW5n aW5lX2Vycm9yOwo+ICsJCX0KPiArCX0KClRoaXMgd2hvbGUgYW1iaXZhbGVuY2UgdHJvdWJsZXMg bWUuIElmIG91ciBoYW5nY2hlY2sgcGFydCBpcyBsYWNraW5nIHNvCnRoYXQgaXQgd2lsbCByZXNl dCBlbmdpbmVzIHRoYXQgcmVhbGx5IGFyZSBub3Qgc3R1Y2ssIHRoZW4gd2Ugc2hvdWxkCm1vdmUv aW1wcm92ZSB0aGlzIGxvZ2ljIGluIGhhbmdjaGVjayBzaWRlLgoKV2UgYXJlIGp1Z2dsaW5nIGhl cmUgd2l0aCB0aGUgdGhlIGV4ZWNsaXN0IGxvY2sgaW5zaWRlIHRoZSAKaW50ZWxfZXhlY2xpc3Rf VERSX2dldF9jdXJyZW50X3JlcXVlc3QgYW5kIG9uIG11bHRpcGxlIGNhbGxzIHRvIHRoYXQuCgpX ZSBuZWVkIHRvIGhvbGQgdGhlIGV4ZWNsaXN0IGxvY2sgZHVyaW5nIHRoZSBzdGF0ZSBzYXZlIGFu ZApyZXN0b3JlLgoKPiArCj4gKwlyZXQgPSBpbnRlbF9yaW5nX2Rpc2FibGUoZW5naW5lKTsKPiAr CWlmIChyZXQgIT0gMCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGRpc2FibGUgJXNcbiIs IGVuZ2luZS0+bmFtZSk7Cj4gKwkJZ290byByZXNldF9lbmdpbmVfZXJyb3I7Cj4gKwl9Cj4gKwo+ ICsJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykgewo+ICsJCWVudW0gY29udGV4dF9zdWJtaXNz aW9uX3N0YXR1cyBzdGF0dXM7Cj4gKwkJYm9vbCBpbmNvbnNpc3RlbnQ7Cj4gKwo+ICsJCXN0YXR1 cyA9IGludGVsX2V4ZWNsaXN0c19URFJfZ2V0X2N1cnJlbnRfcmVxdWVzdChlbmdpbmUsCj4gKwkJ CQkmY3VycmVudF9yZXF1ZXN0KTsKPiArCgppbnRlbF9leGVjbGlzdF9nZXRfY3VycmVudF9yZXF1 ZXN0KCkKaW50ZWxfZXhlY2xpc3RfZ2V0X3N1Ym1pc3Npb25fc3RhdHVzKCkKCmlmIHdlIGhhdmUg bG9jaywgbm8gbmVlZCB0byBkbyBldmVyeXRoaW5nIGluIHNhbWUgZnVuY3Rpb24uCgpBbmQgbW92 ZSB0aGUgcmVmZXJlbmNpbmcgb2YgY3VycmVudF9yZXF1ZXN0IHVwIHRvIHRoaXMgY29udGV4dCBh cwp0aGUgdW5yZWZlcmVuY2luZyBpcyBhbHJlYWR5IGhlcmUuCgoKPiArCQlpbmNvbnNpc3RlbnQg PSAoc3RhdHVzICE9IENPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNfT0spOwo+ICsJCWlmIChpbmNv bnNpc3RlbnQpIHsKPiArCQkJLyoKPiArCQkJICogSWYgd2Ugc29tZWhvdyBoYXZlIHJlYWNoZWQg dGhpcyBwb2ludCB3aXRoCj4gKwkJCSAqIGFuIGluY29uc2lzdGVudCBjb250ZXh0IHN1Ym1pc3Np b24gc3RhdHVzIHRoZW4KPiArCQkJICogYmFjayBvdXQgb2YgdGhlIHByZXZpb3VzbHkgcmVxdWVz dGVkIHJlc2V0IGFuZAo+ICsJCQkgKiByZXRyeSBsYXRlci4KPiArCQkJICovCj4gKwkJCVdBUk4o aW5jb25zaXN0ZW50LAo+ICsJCQkgICAgICJJbmNvbnNpc3RlbnQgY29udGV4dCBzdGF0dXMgb24g JXM6ICV1XG4iLAo+ICsJCQkgICAgIGVuZ2luZS0+bmFtZSwgc3RhdHVzKTsKPiArCj4gKwkJCXJl dCA9IC1FQUdBSU47Cj4gKwkJCWdvdG8gcmVlbmFibGVfcmVzZXRfZW5naW5lX2Vycm9yOwo+ICsJ CX0KPiArCX0KPiArCj4gKwkvKiBTYW1wbGUgdGhlIGN1cnJlbnQgcmluZyBoZWFkIHBvc2l0aW9u ICovCj4gKwloZWFkID0gSTkxNV9SRUFEX0hFQUQoZW5naW5lKSAmIEhFQURfQUREUjsKCmludGVs X3JpbmdfZ2V0X2FjdGl2ZV9oZWFkKGVuZ2luZSk7Cgo+ICsKPiArCWlmIChoZWFkID09IGVuZ2lu ZS0+aGFuZ2NoZWNrLmxhc3RfaGVhZCkgewo+ICsJCS8qCj4gKwkJICogVGhlIGVuZ2luZSBoYXMg bm90IGFkdmFuY2VkIHNpbmNlIHRoZSBsYXN0Cj4gKwkJICogdGltZSBpdCBodW5nIHNvIGZvcmNl IGl0IHRvIGFkdmFuY2UgdG8gdGhlCj4gKwkJICogbmV4dCBRV09SRC4gSW4gbW9zdCBjYXNlcyB0 aGUgZW5naW5lIGhlYWQKPiArCQkgKiBwb2ludGVyIHdpbGwgYXV0b21hdGljYWxseSBhZHZhbmNl IHRvIHRoZQo+ICsJCSAqIG5leHQgaW5zdHJ1Y3Rpb24gYXMgc29vbiBhcyBpdCBoYXMgcmVhZCB0 aGUKPiArCQkgKiBjdXJyZW50IGluc3RydWN0aW9uLCB3aXRob3V0IHdhaXRpbmcgZm9yIGl0Cj4g KwkJICogdG8gY29tcGxldGUuIFRoaXMgc2VlbXMgdG8gYmUgdGhlIGRlZmF1bHQKPiArCQkgKiBi ZWhhdmlvdXIsIGhvd2V2ZXIgYW4gTUJPWCB3YWl0IGluc2VydGVkCj4gKwkJICogZGlyZWN0bHkg dG8gdGhlIFZDUy9CQ1MgZW5naW5lcyBkb2VzIG5vdCBiZWhhdmUKPiArCQkgKiBpbiB0aGUgc2Ft ZSB3YXksIGluc3RlYWQgdGhlIGhlYWQgcG9pbnRlcgo+ICsJCSAqIHdpbGwgc3RpbGwgYmUgcG9p bnRpbmcgYXQgdGhlIE1CT1ggaW5zdHJ1Y3Rpb24KPiArCQkgKiB1bnRpbCBpdCBjb21wbGV0ZXMu Cj4gKwkJICovCj4gKwkJZm9yY2VfYWR2YW5jZSA9IHRydWU7Cj4gKwl9Cj4gKwo+ICsJZW5naW5l LT5oYW5nY2hlY2subGFzdF9oZWFkID0gaGVhZDsKPiArCj4gKwlyZXQgPSBpbnRlbF9yaW5nX3Nh dmUoZW5naW5lLCBjdXJyZW50X3JlcXVlc3QsIGZvcmNlX2FkdmFuY2UpOwoKaW50ZWxfZW5naW5l X3NhdmUoKQoKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBzYXZlICVz IGVuZ2luZSBzdGF0ZVxuIiwgZW5naW5lLT5uYW1lKTsKPiArCQlnb3RvIHJlZW5hYmxlX3Jlc2V0 X2VuZ2luZV9lcnJvcjsKPiArCX0KPiArCj4gKwlyZXQgPSBpbnRlbF9ncHVfZW5naW5lX3Jlc2V0 KGVuZ2luZSk7CgppbnRlbF9lbmdpbmVfcmVzZXQoKQoKPiArCWlmIChyZXQpIHsKPiArCQlEUk1f RVJST1IoIkZhaWxlZCB0byByZXNldCAlc1xuIiwgZW5naW5lLT5uYW1lKTsKPiArCQlnb3RvIHJl ZW5hYmxlX3Jlc2V0X2VuZ2luZV9lcnJvcjsKPiArCX0KPiArCj4gKwlyZXQgPSBpbnRlbF9yaW5n X3Jlc3RvcmUoZW5naW5lLCBjdXJyZW50X3JlcXVlc3QpOwoKaW50ZWxfZW5naW5lX3Jlc3RvcmUo KQoKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXN0b3JlICVzIGVu Z2luZSBzdGF0ZVxuIiwgZW5naW5lLT5uYW1lKTsKPiArCQlnb3RvIHJlZW5hYmxlX3Jlc2V0X2Vu Z2luZV9lcnJvcjsKPiArCX0KPiArCj4gKwkvKiBDb3JyZWN0IGRyaXZlciBzdGF0ZSAqLwo+ICsJ aW50ZWxfZ3B1X2VuZ2luZV9yZXNldF9yZXNhbXBsZShlbmdpbmUsIGN1cnJlbnRfcmVxdWVzdCk7 CgpUaGlzIGxvb2tzIGxpa2UgaXQgcmVzYW1wbGVzIHRoZSBoZWFkLgoKaW50ZWxfZW5naW5lX3Jl c2V0X2hlYWQoKQoKPiArCj4gKwkvKgo+ICsJICogUmVlbmFibGUgZW5naW5lCj4gKwkgKgo+ICsJ ICogSW4gZXhlY2xpc3QgbW9kZSBvbiBnZW44KyB0aGlzIGlzIGltcGxpY2l0IGJ5IHNpbXBseSBy ZXN1Ym1pdHRpbmcKPiArCSAqIHRoZSBwcmV2aW91c2x5IGh1bmcgY29udGV4dC4gSW4gcmluZyBi dWZmZXIgc3VibWlzc2lvbiBtb2RlIG9uIGdlbjcKPiArCSAqIGFuZCBlYXJsaWVyIHdlIG5lZWQg dG8gYWN0aXZlbHkgdHVybiBvbiB0aGUgZW5naW5lIGZpcnN0Lgo+ICsJICovCj4gKwlpZiAoaTkx NS5lbmFibGVfZXhlY2xpc3RzKQo+ICsJCWludGVsX2V4ZWNsaXN0c19URFJfY29udGV4dF9yZXN1 Ym1pc3Npb24oZW5naW5lKTsKCmludGVsX2xvZ2ljYWxfcmluZ19lbmFibGUoKT8KCj4gKwllbHNl Cj4gKwkJcmV0ID0gaW50ZWxfcmluZ19lbmFibGUoZW5naW5lKTsKPiArCgo+ICsJaWYgKHJldCkg ewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSAlcyBhZ2FpbiBhZnRlciByZXNldFxu IiwKPiArCQkJZW5naW5lLT5uYW1lKTsKPiArCj4gKwkJZ290byByZXNldF9lbmdpbmVfZXJyb3I7 Cj4gKwl9Cj4gKwo+ICsJLyogQ2xlYXIgcmVzZXQgZmxhZ3MgdG8gYWxsb3cgZnV0dXJlIGhhbmdj aGVja3MgKi8KPiArCWF0b21pY19zZXQoJmVuZ2luZS0+aGFuZ2NoZWNrLmZsYWdzLCAwKTsKPiAr Cj4gKwkvKiBXYWtlIHVwIGFueXRoaW5nIHdhaXRpbmcgb24gdGhpcyBlbmdpbmUncyBxdWV1ZSAq Lwo+ICsJd2FrZV91cF9hbGwoJmVuZ2luZS0+aXJxX3F1ZXVlKTsKPiArCj4gKwlpZiAoaTkxNS5l bmFibGVfZXhlY2xpc3RzICYmIGN1cnJlbnRfcmVxdWVzdCkKPiArCQlpOTE1X2dlbV9yZXF1ZXN0 X3VucmVmZXJlbmNlKGN1cnJlbnRfcmVxdWVzdCk7Cj4gKwo+ICsJaW50ZWxfdW5jb3JlX2ZvcmNl d2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOwo+ICsKCnJlc2V0X2VuZ2luZV9lcnJv cjogaXMgaWRlbnRpY2FsIHRvIGNvZGUgYmxvY2sgYWJvdmUuCgo+ICsJcmV0dXJuIHJldDsKPiAr Cj4gK3JlZW5hYmxlX3Jlc2V0X2VuZ2luZV9lcnJvcjoKPiArCj4gKwllcnJfcmV0ID0gaW50ZWxf cmluZ19lbmFibGUoZW5naW5lKTsKPiArCWlmIChlcnJfcmV0KQo+ICsJCURSTV9FUlJPUigiRmFp bGVkIHRvIHJlZW5hYmxlICVzIGZvbGxvd2luZyBlcnJvciBkdXJpbmcgcmVzZXQgKCVkKVxuIiwK PiArCQkJZW5naW5lLT5uYW1lLCBlcnJfcmV0KTsKPiArCj4gK3Jlc2V0X2VuZ2luZV9lcnJvcjoK PiArCj4gKwkvKiBDbGVhciByZXNldCBmbGFncyB0byBhbGxvdyBmdXR1cmUgaGFuZ2NoZWNrcyAq Lwo+ICsJYXRvbWljX3NldCgmZW5naW5lLT5oYW5nY2hlY2suZmxhZ3MsIDApOwo+ICsKPiArCS8q IFdha2UgdXAgYW55dGhpbmcgd2FpdGluZyBvbiB0aGlzIGVuZ2luZSdzIHF1ZXVlICovCj4gKwl3 YWtlX3VwX2FsbCgmZW5naW5lLT5pcnFfcXVldWUpOwo+ICsKPiArCWlmIChpOTE1LmVuYWJsZV9l eGVjbGlzdHMgJiYgY3VycmVudF9yZXF1ZXN0KQo+ICsJCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZl cmVuY2UoY3VycmVudF9yZXF1ZXN0KTsKPiArCj4gKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1 dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiAgc3RhdGljIGludCBpOTE1X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qg c3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKPiAgewo+ICAJc3RydWN0IGludGVsX2RldmljZV9p bmZvICppbnRlbF9pbmZvID0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCA3MDNhMzIw Li5lODY2ZjE0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTI0MzIsNiArMjQz Miw0OCBAQCBzdHJ1Y3QgZHJtX2k5MTVfY21kX3RhYmxlIHsKPiAgCWludCBjb3VudDsKPiAgfTsK PiAgCj4gKy8qCj4gKyAqIENvbnRleHQgc3VibWlzc2lvbiBzdGF0dXMKPiArICoKPiArICogQ09O VEVYVF9TVUJNSVNTSU9OX1NUQVRVU19PSzoKPiArICoJQ29udGV4dCBzdWJtaXR0ZWQgdG8gRUxT UCBhbmQgc3RhdGUgb2YgZXhlY2xpc3QgcXVldWUgaXMgdGhlIHNhbWUgYXMKPiArICoJdGhlIHN0 YXRlIG9mIEVYRUNMSVNUX1NUQVRVUyByZWdpc3Rlci4gU29mdHdhcmUgYW5kIGhhcmR3YXJlIHN0 YXRlcwo+ICsgKglhcmUgY29uc2lzdGVudCBhbmQgY2FuIGJlIHRydXN0ZWQuCj4gKyAqCj4gKyAq IENPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNfSU5DT05TSVNURU5UOgo+ICsgKglDb250ZXh0IGhh cyBiZWVuIHN1Ym1pdHRlZCB0byB0aGUgZXhlY2xpc3QgcXVldWUgYnV0IHRoZSBzdGF0ZSBvZiB0 aGUKPiArICoJRVhFQ0xJU1RfU1RBVFVTIHJlZ2lzdGVyIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBl eGVjbGlzdCBxdWV1ZSBzdGF0ZS4KPiArICoJVGhpcyBjb3VsZCBtZWFuIGFueSBvZiB0aGUgZm9s bG93aW5nOgo+ICsgKgo+ICsgKgkJMS4gVGhlIGNvbnRleHQgaXMgaW4gdGhlIGhlYWQgcG9zaXRp b24gb2YgdGhlIGV4ZWNsaXN0IHF1ZXVlCj4gKyAqCQkgICBidXQgaGFzIG5vdCB5ZXQgYmVlbiBz dWJtaXR0ZWQgdG8gRUxTUC4KPiArICoKPiArICoJCTIuIFRoZSBoYXJkd2FyZSBqdXN0IHJlY2Vu dGx5IGNvbXBsZXRlZCB0aGUgY29udGV4dCBidXQgdGhlCj4gKyAqCQkgICBjb250ZXh0IGlzIHBl bmRpbmcgcmVtb3ZhbCBmcm9tIHRoZSBleGVjbGlzdCBxdWV1ZS4KPiArICoKPiArICoJCTMuIFRo ZSBkcml2ZXIgaGFzIGxvc3QgYSBjb250ZXh0IHN0YXRlIHRyYW5zaXRpb24gaW50ZXJydXB0Lgo+ ICsgKgkJICAgVHlwaWNhbGx5IHdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IGhhcmR3YXJlIGhhcyBj b21wbGV0ZWQgYW5kCj4gKyAqCQkgICBpcyBub3cgaWRsZSBidXQgdGhlIGRyaXZlciB0aGlua3Mg dGhlIGhhcmR3YXJlIGlzIHN0aWxsCj4gKyAqCQkgICBidXN5Lgo+ICsgKgo+ICsgKglPdmVyYWxs IHdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IHRoZSBjb250ZXh0IHN1Ym1pc3Npb24gc3RhdHVzIGlz Cj4gKyAqCWN1cnJlbnRseSBpbiB0cmFuc2l0aW9uIGFuZCBjYW5ub3QgYmUgdHJ1c3RlZCB1bnRp bCBpdCBzZXR0bGVzIGRvd24uCj4gKyAqCj4gKyAqIENPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNf Tk9ORV9TVUJNSVRURUQ6Cj4gKyAqCU5vIGNvbnRleHQgc3VibWl0dGVkIHRvIHRoZSBleGVjbGlz dCBxdWV1ZSBhbmQgdGhlIEVYRUNMSVNUX1NUQVRVUwo+ICsgKglyZWdpc3RlciBzaG93cyBubyBj b250ZXh0IGJlaW5nIHByb2Nlc3NlZC4KPiArICoKPiArICogQ09OVEVYVF9TVUJNSVNTSU9OX1NU QVRVU19OT05FX1VOREVGSU5FRDoKPiArICoJSW5pdGlhbCBzdGF0ZSBiZWZvcmUgc3VibWlzc2lv biBzdGF0dXMgaGFzIGJlZW4gZGV0ZXJtaW5lZC4KPiArICoKPiArICovCj4gK2VudW0gY29udGV4 dF9zdWJtaXNzaW9uX3N0YXR1cyB7Cj4gKwlDT05URVhUX1NVQk1JU1NJT05fU1RBVFVTX09LID0g MCwKPiArCUNPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNfSU5DT05TSVNURU5ULAo+ICsJQ09OVEVY VF9TVUJNSVNTSU9OX1NUQVRVU19OT05FX1NVQk1JVFRFRCwKPiArCUNPTlRFWFRfU1VCTUlTU0lP Tl9TVEFUVVNfVU5ERUZJTkVECj4gK307Cj4gKwo+ICAvKiBOb3RlIHRoYXQgdGhlIChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqKSBjYXN0IGlzIGp1c3QgdG8gc2h1dCB1cCBnY2MuICovCj4gICNk ZWZpbmUgX19JOTE1X18ocCkgKHsgXAo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKl9fcDsg XAo+IEBAIC0yNjkwLDggKzI3MzIsMTIgQEAgZXh0ZXJuIGxvbmcgaTkxNV9jb21wYXRfaW9jdGwo c3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCj4gIAkJCSAgICAgIHVuc2lnbmVk IGxvbmcgYXJnKTsKPiAgI2VuZGlmCj4gIGV4dGVybiBpbnQgaW50ZWxfZ3B1X3Jlc2V0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOwo+ICtleHRlcm4gaW50IGludGVsX2dwdV9lbmdpbmVfcmVzZXQo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArZXh0ZXJuIGludCBpbnRlbF9yZXF1 ZXN0X2dwdV9lbmdpbmVfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAr ZXh0ZXJuIGludCBpbnRlbF91bnJlcXVlc3RfZ3B1X2VuZ2luZV9yZXNldChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpOwo+ICBleHRlcm4gYm9vbCBpbnRlbF9oYXNfZ3B1X3Jlc2V0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICBleHRlcm4gaW50IGk5MTVfcmVzZXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7Cj4gK2V4dGVybiBpbnQgaTkxNV9yZXNldF9lbmdpbmUoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaTkxNV9jaGlw c2V0X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICBleHRlcm4gdW5z aWduZWQgbG9uZyBpOTE1X21jaF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKPiAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaTkxNV9nZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdik7Cj4gQEAgLTI3MDQsNiArMjc1MCwxOCBAQCB2b2lkIGludGVsX2hw ZF9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQgaW50ZWxf aHBkX2luaXRfd29yayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICB2b2lk IGludGVsX2hwZF9jYW5jZWxfd29yayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Owo+ICBib29sIGludGVsX2hwZF9waW5fdG9fcG9ydChlbnVtIGhwZF9waW4gcGluLCBlbnVtIHBv cnQgKnBvcnQpOwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9oYW5nY2hlY2tfcmVpbml0KHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJc3RydWN0IGludGVsX3Jpbmdf aGFuZ2NoZWNrICpoYyA9ICZlbmdpbmUtPmhhbmdjaGVjazsKPiArCj4gKwloYy0+YWN0aGQgPSAw Owo+ICsJaGMtPm1heF9hY3RoZCA9IDA7Cj4gKwloYy0+c2Vxbm8gPSAwOwo+ICsJaGMtPnNjb3Jl ID0gMDsKPiArCWhjLT5hY3Rpb24gPSBIQU5HQ0hFQ0tfSURMRTsKPiArCWhjLT5kZWFkbG9jayA9 IDA7Cj4gK30KPiArCgpSZW5hbWUgdG8gaW50ZWxfZW5naW5lX2hhbmdjaGVja19pbml0IGFuZCB0 byBpbnRlbF9yaW5nYnVmZmVyLmMKCj4gIAo+ICAvKiBpOTE1X2lycS5jICovCj4gIHZvaWQgaTkx NV9xdWV1ZV9oYW5nY2hlY2soc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2lycS5jCj4gaW5kZXggZjA0ZDc5OS4uNmEwZWMzNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9pcnEuYwo+IEBAIC0yNDcwLDEwICsyNDcwLDcwIEBAIHN0YXRpYyB2b2lkIGk5MTVfcmVzZXRf YW5kX3dha2V1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJY2hhciAqZXJyb3JfZXZlbnRb XSA9IHsgSTkxNV9FUlJPUl9VRVZFTlQgIj0xIiwgTlVMTCB9Owo+ICAJY2hhciAqcmVzZXRfZXZl bnRbXSA9IHsgSTkxNV9SRVNFVF9VRVZFTlQgIj0xIiwgTlVMTCB9Owo+ICAJY2hhciAqcmVzZXRf ZG9uZV9ldmVudFtdID0geyBJOTE1X0VSUk9SX1VFVkVOVCAiPTAiLCBOVUxMIH07Cj4gLQlpbnQg cmV0Owo+ICsJYm9vbCByZXNldF9jb21wbGV0ZSA9IGZhbHNlOwo+ICsJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqcmluZzsKPiArCWludCByZXQgPSAwOwo+ICsJaW50IGk7Cj4gKwo+ICsJbXV0ZXhf bG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAKPiAgCWtvYmplY3RfdWV2ZW50X2VudigmZGV2 LT5wcmltYXJ5LT5rZGV2LT5rb2JqLCBLT0JKX0NIQU5HRSwgZXJyb3JfZXZlbnQpOwo+ICAKPiAr CWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3ByaXYsIGkpIHsKPiArCj4gKwkJLyoKPiArCQkgKiBT a2lwIGZ1cnRoZXIgaW5kaXZpZHVhbCBlbmdpbmUgcmVzZXQgcmVxdWVzdHMgaWYgZnVsbCBHUFUK PiArCQkgKiByZXNldCByZXF1ZXN0ZWQuCj4gKwkJICovCj4gKwkJaWYgKGk5MTVfcmVzZXRfaW5f cHJvZ3Jlc3MoZXJyb3IpKQo+ICsJCQlicmVhazsKPiArCj4gKwkJaWYgKGF0b21pY19yZWFkKCZy aW5nLT5oYW5nY2hlY2suZmxhZ3MpICYKPiArCQkJSTkxNV9FTkdJTkVfUkVTRVRfSU5fUFJPR1JF U1MpIHsKPiArCj4gKwkJCWlmICghcmVzZXRfY29tcGxldGUpCj4gKwkJCQlrb2JqZWN0X3VldmVu dF9lbnYoJmRldi0+cHJpbWFyeS0+a2Rldi0+a29iaiwKPiArCQkJCQkJICAgS09CSl9DSEFOR0Us Cj4gKwkJCQkJCSAgIHJlc2V0X2V2ZW50KTsKPiArCj4gKwkJCXJlc2V0X2NvbXBsZXRlID0gdHJ1 ZTsKPiArCj4gKwkJCXJldCA9IGk5MTVfcmVzZXRfZW5naW5lKHJpbmcpOwo+ICsKPiArCQkJLyoK PiArCQkJICogRXhlY2xpc3QgbW9kZSBvbmx5Ogo+ICsJCQkgKgo+ICsJCQkgKiAtRUFHQUlOIG1l YW5zIHRoYXQgYmV0d2VlbiBkZXRlY3RpbmcgYSBoYW5nIChhbmQKPiArCQkJICogYWxzbyBkZXRl cm1pbmluZyB0aGF0IHRoZSBjdXJyZW50bHkgc3VibWl0dGVkCj4gKwkJCSAqIGNvbnRleHQgaXMg c3RhYmxlIGFuZCB2YWxpZCkgYW5kIHRyeWluZyB0byByZWNvdmVyCj4gKwkJCSAqIGZyb20gdGhl IGhhbmcgdGhlIGN1cnJlbnQgY29udGV4dCBjaGFuZ2VkIHN0YXRlLgo+ICsJCQkgKiBUaGlzIG1l YW5zIHRoYXQgd2UgYXJlIHByb2JhYmx5IG5vdCBjb21wbGV0ZWx5IGh1bmcKPiArCQkJICogYWZ0 ZXIgYWxsLiBKdXN0IGZhaWwgYW5kIHJldHJ5IGJ5IGV4aXRpbmcgYWxsIHRoZQo+ICsJCQkgKiB3 YXkgYmFjayBhbmQgd2FpdCBmb3IgdGhlIG5leHQgaGFuZyBkZXRlY3Rpb24uIElmIHdlCj4gKwkJ CSAqIGhhdmUgYSB0cnVlIGhhbmcgb24gb3VyIGhhbmRzIHRoZW4gd2Ugd2lsbCBkZXRlY3QgaXQK PiArCQkJICogYWdhaW4sIG90aGVyd2lzZSB3ZSB3aWxsIGNvbnRpbnVlIGxpa2Ugbm90aGluZwo+ ICsJCQkgKiBoYXBwZW5lZC4KPiArCQkJICovCj4gKwkJCWlmIChyZXQgPT0gLUVBR0FJTikgewo+ ICsJCQkJRFJNX0VSUk9SKCJSZXNldCBvZiAlcyBhYm9ydGVkIGR1ZSB0byAiIFwKPiArCQkJCQkg ICJjaGFuZ2UgaW4gY29udGV4dCBzdWJtaXNzaW9uICIgXAo+ICsJCQkJCSAgInN0YXRlIC0gcmV0 cnlpbmchIiwgcmluZy0+bmFtZSk7Cj4gKwkJCQlyZXQgPSAwOwo+ICsJCQl9Cj4gKwo+ICsJCQlp ZiAocmV0KSB7Cj4gKwkJCQlEUk1fRVJST1IoIlJlc2V0IG9mICVzIGZhaWxlZCEgKCVkKSIsIHJp bmctPm5hbWUsIHJldCk7Cj4gKwo+ICsJCQkJYXRvbWljX29yKEk5MTVfUkVTRVRfSU5fUFJPR1JF U1NfRkxBRywKPiArCQkJCQkmZGV2X3ByaXYtPmdwdV9lcnJvci5yZXNldF9jb3VudGVyKTsKPiAr CQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qIFRoZSBmdWxsIEdQVSBy ZXNldCB3aWxsIGdyYWIgdGhlIHN0cnVjdF9tdXRleCB3aGVuIGl0IG5lZWRzIGl0ICovCj4gKwlt dXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCj4gIAkvKgo+ICAJICogTm90ZSB0 aGF0IHRoZXJlJ3Mgb25seSBvbmUgd29yayBpdGVtIHdoaWNoIGRvZXMgZ3B1IHJlc2V0cywgc28g d2UKPiAgCSAqIG5lZWQgbm90IHdvcnJ5IGFib3V0IGNvbmN1cnJlbnQgZ3B1IHJlc2V0cyBwb3Rl bnRpYWxseSBpbmNyZW1lbnRpbmcKPiBAQCAtMjQ4Niw4ICsyNTQ2LDEzIEBAIHN0YXRpYyB2b2lk IGk5MTVfcmVzZXRfYW5kX3dha2V1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJICovCj4g IAlpZiAoaTkxNV9yZXNldF9pbl9wcm9ncmVzcyhlcnJvcikgJiYgIWk5MTVfdGVybWluYWxseV93 ZWRnZWQoZXJyb3IpKSB7Cj4gIAkJRFJNX0RFQlVHX0RSSVZFUigicmVzZXR0aW5nIGNoaXBcbiIp Owo+IC0JCWtvYmplY3RfdWV2ZW50X2VudigmZGV2LT5wcmltYXJ5LT5rZGV2LT5rb2JqLCBLT0JK X0NIQU5HRSwKPiAtCQkJCSAgIHJlc2V0X2V2ZW50KTsKPiArCj4gKwkJaWYgKCFyZXNldF9jb21w bGV0ZSkKPiArCQkJa29iamVjdF91ZXZlbnRfZW52KCZkZXYtPnByaW1hcnktPmtkZXYtPmtvYmos Cj4gKwkJCQkJICAgS09CSl9DSEFOR0UsCj4gKwkJCQkJICAgcmVzZXRfZXZlbnQpOwo+ICsKPiAr CQlyZXNldF9jb21wbGV0ZSA9IHRydWU7Cj4gIAo+ICAJCS8qCj4gIAkJICogSW4gbW9zdCBjYXNl cyBpdCdzIGd1YXJhbnRlZWQgdGhhdCB3ZSBnZXQgaGVyZSB3aXRoIGFuIFJQTQo+IEBAIC0yNTIw LDIzICsyNTg1LDM2IEBAIHN0YXRpYyB2b2lkIGk5MTVfcmVzZXRfYW5kX3dha2V1cChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQo+ICAJCQkgKgo+ICAJCQkgKiBTaW5jZSB1bmxvY2sgb3BlcmF0aW9u cyBhcmUgYSBvbmUtc2lkZWQgYmFycmllciBvbmx5LAo+ICAJCQkgKiB3ZSBuZWVkIHRvIGluc2Vy dCBhIGJhcnJpZXIgaGVyZSB0byBvcmRlciBhbnkgc2Vxbm8KPiAtCQkJICogdXBkYXRlcyBiZWZv cmUKPiAtCQkJICogdGhlIGNvdW50ZXIgaW5jcmVtZW50Lgo+ICsJCQkgKiB1cGRhdGVzIGJlZm9y ZSB0aGUgY291bnRlciBpbmNyZW1lbnQuCj4gKwkJCSAqCj4gKwkJCSAqIFRoZSBpbmNyZW1lbnQg Y2xlYXJzIEk5MTVfUkVTRVRfSU5fUFJPR1JFU1NfRkxBRy4KPiAgCQkJICovCj4gIAkJCXNtcF9t Yl9fYmVmb3JlX2F0b21pYygpOwo+ICAJCQlhdG9taWNfaW5jKCZkZXZfcHJpdi0+Z3B1X2Vycm9y LnJlc2V0X2NvdW50ZXIpOwo+ICAKPiAtCQkJa29iamVjdF91ZXZlbnRfZW52KCZkZXYtPnByaW1h cnktPmtkZXYtPmtvYmosCj4gLQkJCQkJICAgS09CSl9DSEFOR0UsIHJlc2V0X2RvbmVfZXZlbnQp Owo+ICsJCQkvKgo+ICsJCQkgKiBJZiBhbnkgcGVyLWVuZ2luZSByZXNldHMgd2VyZSBwcm9tb3Rl ZCB0byBmdWxsIEdQVQo+ICsJCQkgKiByZXNldCBkb24ndCBmb3JnZXQgdG8gY2xlYXIgdGhvc2Ug cmVzZXQgZmxhZ3MuCj4gKwkJCSAqLwo+ICsJCQlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2 LCBpKQo+ICsJCQkJYXRvbWljX3NldCgmcmluZy0+aGFuZ2NoZWNrLmZsYWdzLCAwKTsKPiAgCQl9 IGVsc2Ugewo+ICsJCQkvKiBUZXJtaW5hbCB3ZWRnZSBjb25kaXRpb24gKi8KPiArCQkJV0FSTigx LCAiaTkxNV9yZXNldCBmYWlsZWQsIGRlY2xhcmluZyBHUFUgYXMgd2VkZ2VkIVxuIik7Cj4gIAkJ CWF0b21pY19vcihJOTE1X1dFREdFRCwgJmVycm9yLT5yZXNldF9jb3VudGVyKTsKPiAgCQl9Cj4g Kwl9Cj4gIAo+IC0JCS8qCj4gLQkJICogTm90ZTogVGhlIHdha2VfdXAgYWxzbyBzZXJ2ZXMgYXMg YSBtZW1vcnkgYmFycmllciBzbyB0aGF0Cj4gLQkJICogd2FpdGVycyBzZWUgdGhlIHVwZGF0ZSB2 YWx1ZSBvZiB0aGUgcmVzZXQgY291bnRlciBhdG9taWNfdC4KPiAtCQkgKi8KPiArCS8qCj4gKwkg KiBOb3RlOiBUaGUgd2FrZV91cCBhbHNvIHNlcnZlcyBhcyBhIG1lbW9yeSBiYXJyaWVyIHNvIHRo YXQKPiArCSAqIHdhaXRlcnMgc2VlIHRoZSB1cGRhdGUgdmFsdWUgb2YgdGhlIHJlc2V0IGNvdW50 ZXIgYXRvbWljX3QuCj4gKwkgKi8KPiArCWlmIChyZXNldF9jb21wbGV0ZSkgewo+ICAJCWk5MTVf ZXJyb3Jfd2FrZV91cChkZXZfcHJpdiwgdHJ1ZSk7Cj4gKwo+ICsJCWlmIChyZXQgPT0gMCkKPiAr CQkJa29iamVjdF91ZXZlbnRfZW52KCZkZXYtPnByaW1hcnktPmtkZXYtPmtvYmosCj4gKwkJCQkJ ICAgS09CSl9DSEFOR0UsIHJlc2V0X2RvbmVfZXZlbnQpOwo+ICAJfQo+ICB9Cj4gIAo+IEBAIC0y NjQ5LDYgKzI3MjcsMTQgQEAgdm9pZCBpOTE1X2hhbmRsZV9lcnJvcihzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBib29sIHdlZGdlZCwKPiAgCXZhX2xpc3QgYXJnczsKPiAgCWNoYXIgZXJyb3JfbXNn WzgwXTsKPiAgCj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwo+ICsJLyoK PiArCSAqIE5COiBQbGFjZWhvbGRlciB1bnRpbCB0aGUgaGFuZyBjaGVja2VyIHN1cHBvcnRzCj4g KwkgKiBwZXItZW5naW5lIGhhbmcgZGV0ZWN0aW9uLgo+ICsJICovCj4gKwl1MzIgZW5naW5lX21h c2sgPSAwOwo+ICsKPiAgCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Cj4gIAl2c2NucHJpbnRmKGVycm9y X21zZywgc2l6ZW9mKGVycm9yX21zZyksIGZtdCwgYXJncyk7Cj4gIAl2YV9lbmQoYXJncyk7Cj4g QEAgLTI2NTcsOCArMjc0Myw2NSBAQCB2b2lkIGk5MTVfaGFuZGxlX2Vycm9yKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIGJvb2wgd2VkZ2VkLAo+ICAJaTkxNV9yZXBvcnRfYW5kX2NsZWFyX2Vpcihk ZXYpOwo+ICAKPiAgCWlmICh3ZWRnZWQpIHsKPiAtCQlhdG9taWNfb3IoSTkxNV9SRVNFVF9JTl9Q Uk9HUkVTU19GTEFHLAo+IC0JCQkJJmRldl9wcml2LT5ncHVfZXJyb3IucmVzZXRfY291bnRlcik7 Cj4gKwkJLyoKPiArCQkgKiBEZWZlciB0byBmdWxsIEdQVSByZXNldCBpZiBhbnkgb2YgdGhlIGZv bGxvd2luZyBpcyB0cnVlOgo+ICsJCSAqCTAuIEVuZ2luZSByZXNldCBkaXNhYmxlZC4KPiArCQkg KiAJMS4gVGhlIGNhbGxlciBkaWQgbm90IGFzayBmb3IgcGVyLWVuZ2luZSByZXNldC4KPiArCQkg KgkyLiBUaGUgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBpdCAocHJlLWdlbjcpLgo+ICsJCSAq CTMuIFdlIGFscmVhZHkgdHJpZWQgcGVyLWVuZ2luZSByZXNldCByZWNlbnRseS4KPiArCQkgKi8K PiArCQlib29sIGZ1bGxfcmVzZXQgPSB0cnVlOwo+ICsKPiArCQlpZiAoIWk5MTUuZW5hYmxlX2Vu Z2luZV9yZXNldCkgewo+ICsJCQlEUk1fSU5GTygiRW5naW5lIHJlc2V0IGRpc2FibGVkOiBVc2lu ZyBmdWxsIEdQVSByZXNldC5cbiIpOwo+ICsJCQllbmdpbmVfbWFzayA9IDB4MDsKPiArCQl9Cj4g Kwo+ICsJCS8qCj4gKwkJICogVEJEOiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHBlci1lbmdp bmUgcmVzZXQgZm9yIGdlbjgrLgo+ICsJCSAqIEltcGxlbWVudCBzdXBwb3J0IGZvciBnZW43Lgo+ ICsJCSAqLwo+ICsJCWlmIChlbmdpbmVfbWFzayAmJiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0g OCkpIHsKPiArCQkJdTMyIGk7Cj4gKwo+ICsJCQlmb3JfZWFjaF9yaW5nKGVuZ2luZSwgZGV2X3By aXYsIGkpIHsKPiArCQkJCXUzMiBub3csIGxhc3RfZW5naW5lX3Jlc2V0X3RpbWVkaWZmOwo+ICsK PiArCQkJCWlmICghKGludGVsX3JpbmdfZmxhZyhlbmdpbmUpICYgZW5naW5lX21hc2spKQo+ICsJ CQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJCS8qIE1lYXN1cmUgdGhlIHRpbWUgc2luY2UgdGhpcyBl bmdpbmUgd2FzIGxhc3QgcmVzZXQgKi8KPiArCQkJCW5vdyA9IGdldF9zZWNvbmRzKCk7Cj4gKwkJ CQlsYXN0X2VuZ2luZV9yZXNldF90aW1lZGlmZiA9Cj4gKwkJCQkJbm93IC0gZW5naW5lLT5oYW5n Y2hlY2subGFzdF9lbmdpbmVfcmVzZXRfdGltZTsKPiArCj4gKwkJCQlmdWxsX3Jlc2V0ID0gbGFz dF9lbmdpbmVfcmVzZXRfdGltZWRpZmYgPAo+ICsJCQkJCWk5MTUuZ3B1X3Jlc2V0X3Byb21vdGlv bl90aW1lOwo+ICsKPiArCQkJCWVuZ2luZS0+aGFuZ2NoZWNrLmxhc3RfZW5naW5lX3Jlc2V0X3Rp bWUgPSBub3c7Cj4gKwo+ICsJCQkJLyoKPiArCQkJCSAqIFRoaXMgZW5naW5lIHdhcyBub3QgcmVz ZXQgdG9vIHJlY2VudGx5IC0gZ28gYWhlYWQKPiArCQkJCSAqIHdpdGggZW5naW5lIHJlc2V0IGlu c3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGZ1bGwKPiArCQkJCSAqIEdQVSByZXNldC4KPiArCQkJ CSAqCj4gKwkJCQkgKiBGbGFnIHRoYXQgd2Ugd2FudCB0byB0cnkgYW5kIHJlc2V0IHRoaXMgZW5n aW5lLgo+ICsJCQkJICogVGhpcyBjYW4gc3RpbGwgYmUgb3ZlcnJpZGRlbiBieSBhIGdsb2JhbAo+ ICsJCQkJICogcmVzZXQgZS5nLiBpZiBwZXItZW5naW5lIHJlc2V0IGZhaWxzLgo+ICsJCQkJICov Cj4gKwkJCQlpZiAoIWZ1bGxfcmVzZXQpCj4gKwkJCQkJYXRvbWljX29yKEk5MTVfRU5HSU5FX1JF U0VUX0lOX1BST0dSRVNTLAo+ICsJCQkJCQkmZW5naW5lLT5oYW5nY2hlY2suZmxhZ3MpOwo+ICsJ CQkJZWxzZQo+ICsJCQkJCWJyZWFrOwo+ICsKPiArCQkJfSAvKiBmb3JfZWFjaF9yaW5nICovCj4g KwkJfQo+ICsKPiArCQlpZiAoZnVsbF9yZXNldCkgewo+ICsJCQlhdG9taWNfb3IoSTkxNV9SRVNF VF9JTl9QUk9HUkVTU19GTEFHLAo+ICsJCQkJCSZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2Nv dW50ZXIpOwo+ICsJCX0KPiAgCj4gIAkJLyoKPiAgCQkgKiBXYWtldXAgd2FpdGluZyBwcm9jZXNz ZXMgc28gdGhhdCB0aGUgcmVzZXQgZnVuY3Rpb24KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9wYXJhbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGFyYW1z LmMKPiBpbmRleCA4ZDkwYzI1Li41Y2Y5YzExIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcGFyYW1zLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Bh cmFtcy5jCj4gQEAgLTM3LDYgKzM3LDggQEAgc3RydWN0IGk5MTVfcGFyYW1zIGk5MTUgX19yZWFk X21vc3RseSA9IHsKPiAgCS5lbmFibGVfZmJjID0gLTEsCj4gIAkuZW5hYmxlX2V4ZWNsaXN0cyA9 IC0xLAo+ICAJLmVuYWJsZV9oYW5nY2hlY2sgPSB0cnVlLAo+ICsJLmVuYWJsZV9lbmdpbmVfcmVz ZXQgPSBmYWxzZSwKPiArCS5ncHVfcmVzZXRfcHJvbW90aW9uX3RpbWUgPSAxMCwKPiAgCS5lbmFi bGVfcHBndHQgPSAtMSwKPiAgCS5lbmFibGVfcHNyID0gMCwKPiAgCS5wcmVsaW1pbmFyeV9od19z dXBwb3J0ID0gSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfUFJFTElNSU5BUllfSFdfU1VQUE9S VCksCj4gQEAgLTExNiw2ICsxMTgsMjMgQEAgTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfaGFuZ2No ZWNrLAo+ICAJIldBUk5JTkc6IERpc2FibGluZyB0aGlzIGNhbiBjYXVzZSBzeXN0ZW0gd2lkZSBo YW5ncy4gIgo+ICAJIihkZWZhdWx0OiB0cnVlKSIpOwo+ICAKPiArbW9kdWxlX3BhcmFtX25hbWVk X3Vuc2FmZShlbmFibGVfZW5naW5lX3Jlc2V0LCBpOTE1LmVuYWJsZV9lbmdpbmVfcmVzZXQsIGJv b2wsIDA2NDQpOwo+ICtNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV9lbmdpbmVfcmVzZXQsCj4gKwki RW5hYmxlIEdQVSBlbmdpbmUgaGFuZyByZWNvdmVyeSBtb2RlLiBVc2VkIGFzIGEgc29mdCwgbG93 LWltcGFjdCBmb3JtICIKPiArCSJvZiBoYW5nIHJlY292ZXJ5IHRoYXQgdGFyZ2V0cyBpbmRpdmlk dWFsIEdQVSBlbmdpbmVzIHJhdGhlciB0aGFuIHRoZSAiCj4gKwkiZW50aXJlIEdQVSIKPiArCSIo ZGVmYXVsdDogZmFsc2UpIik7Cj4gKwo+ICttb2R1bGVfcGFyYW1fbmFtZWQoZ3B1X3Jlc2V0X3By b21vdGlvbl90aW1lLAo+ICsgICAgICAgICAgICAgICBpOTE1LmdwdV9yZXNldF9wcm9tb3Rpb25f dGltZSwgaW50LCAwNjQ0KTsKPiArTU9EVUxFX1BBUk1fREVTQyhncHVfcmVzZXRfcHJvbW90aW9u X3RpbWUsCj4gKyAgICAgICAgICAgICAgICJDYXRjaCBleGNlc3NpdmUgZW5naW5lIHJlc2V0cy4g RWFjaCBlbmdpbmUgbWFpbnRhaW5zIGEgIgo+ICsJICAgICAgICJ0aW1lc3RhbXAgb2YgdGhlIGxh c3QgdGltZSBpdCB3YXMgcmVzZXQuIElmIGl0IGhhbmdzIGFnYWluICIKPiArCSAgICAgICAid2l0 aGluIHRoaXMgcGVyaW9kIHRoZW4gZmFsbCBiYWNrIHRvIGZ1bGwgR1BVIHJlc2V0IHRvIHRyeSBh bmQiCj4gKwkgICAgICAgIiByZWNvdmVyIGZyb20gdGhlIGhhbmcuIE9ubHkgYXBwbGljYWJsZSBp ZiBlbmFibGVfZW5naW5lX3Jlc2V0ICIKPiArCSAgICAgICAiaXMgZW5hYmxlZC4iCj4gKyAgICAg ICAgICAgICAgICJkZWZhdWx0PTEwIHNlY29uZHMiKTsKPiArCj4gIG1vZHVsZV9wYXJhbV9uYW1l ZF91bnNhZmUoZW5hYmxlX3BwZ3R0LCBpOTE1LmVuYWJsZV9wcGd0dCwgaW50LCAwNDAwKTsKPiAg TU9EVUxFX1BBUk1fREVTQyhlbmFibGVfcHBndHQsCj4gIAkiT3ZlcnJpZGUgUFBHVFQgdXNhZ2Uu ICIKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wYXJhbXMuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGFyYW1zLmgKPiBpbmRleCA1Mjk5MjkwLi42MGYzZDIz IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGFyYW1zLmgKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BhcmFtcy5oCj4gQEAgLTQ5LDggKzQ5LDEwIEBA IHN0cnVjdCBpOTE1X3BhcmFtcyB7Cj4gIAlpbnQgdXNlX21taW9fZmxpcDsKPiAgCWludCBtbWlv X2RlYnVnOwo+ICAJaW50IGVkcF92c3dpbmc7Cj4gKwl1bnNpZ25lZCBpbnQgZ3B1X3Jlc2V0X3By b21vdGlvbl90aW1lOwo+ICAJLyogbGVhdmUgYm9vbHMgYXQgdGhlIGVuZCB0byBub3QgY3JlYXRl IGhvbGVzICovCj4gIAlib29sIGVuYWJsZV9oYW5nY2hlY2s7Cj4gKwlib29sIGVuYWJsZV9lbmdp bmVfcmVzZXQ7Cj4gIAlib29sIGZhc3Rib290Owo+ICAJYm9vbCBwcmVmYXVsdF9kaXNhYmxlOwo+ ICAJYm9vbCBsb2FkX2RldGVjdF90ZXN0Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+IGluZGV4 IDBhOTg4ODkuLjNmYzVkNzUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiBAQCAtMTY0 LDYgKzE2NCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X21taW9fcmVnX3ZhbGlkKGk5MTVf cmVnX3QgcmVnKQo+ICAjZGVmaW5lICBHRU42X0dSRE9NX1JFTkRFUgkJKDEgPDwgMSkKPiAgI2Rl ZmluZSAgR0VONl9HUkRPTV9NRURJQQkJKDEgPDwgMikKPiAgI2RlZmluZSAgR0VONl9HUkRPTV9C TFQJCQkoMSA8PCAzKQo+ICsjZGVmaW5lICBHRU42X0dSRE9NX1ZFQ1MJCSgxIDw8IDQpCj4gKyNk ZWZpbmUgIEdFTjhfR1JET01fTUVESUEyCQkoMSA8PCA3KQo+ICAKPiAgI2RlZmluZSBSSU5HX1BQ X0RJUl9CQVNFKHJpbmcpCQlfTU1JTygocmluZyktPm1taW9fYmFzZSsweDIyOCkKPiAgI2RlZmlu ZSBSSU5HX1BQX0RJUl9CQVNFX1JFQUQocmluZykJX01NSU8oKHJpbmcpLT5tbWlvX2Jhc2UrMHg1 MTgpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBpbmRleCBhYjM0NGUwLi5mY2VjNDc2IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBAQCAtMTM2LDYgKzEzNiw3IEBACj4gICNp bmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KPiAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gICNpbmNs dWRlICJpbnRlbF9tb2NzLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9scmNfdGRyLmgiCj4gIAo+ICAj ZGVmaW5lIEdFTjlfTFJfQ09OVEVYVF9SRU5ERVJfU0laRSAoMjIgKiBQQUdFX1NJWkUpCj4gICNk ZWZpbmUgR0VOOF9MUl9DT05URVhUX1JFTkRFUl9TSVpFICgyMCAqIFBBR0VfU0laRSkKPiBAQCAt MzI1LDcgKzMyNiw4IEBAIHVpbnQ2NF90IGludGVsX2xyX2NvbnRleHRfZGVzY3JpcHRvcihzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBleGVjbGlzdHNf ZWxzcF93cml0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxMCwKPiAtCQkJCSBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxMSkKPiArCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJxMSwKPiArCQkJCSBib29sIHRkcl9yZXN1Ym1pc3Npb24pCj4gIHsKPiAgCj4g IAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nID0gcnEwLT5yaW5nOwo+IEBAIC0zMzUsMTMg KzMzNywxNyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZWxzcF93cml0ZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJxMCwKPiAgCj4gIAlpZiAocnExKSB7Cj4gIAkJZGVzY1sxXSA9IGlu dGVsX2xyX2NvbnRleHRfZGVzY3JpcHRvcihycTEtPmN0eCwgcnExLT5yaW5nKTsKPiAtCQlycTEt PmVsc3Bfc3VibWl0dGVkKys7Cj4gKwo+ICsJCWlmICghdGRyX3Jlc3VibWlzc2lvbikKPiArCQkJ cnExLT5lbHNwX3N1Ym1pdHRlZCsrOwo+ICAJfSBlbHNlIHsKPiAgCQlkZXNjWzFdID0gMDsKPiAg CX0KPiAgCj4gIAlkZXNjWzBdID0gaW50ZWxfbHJfY29udGV4dF9kZXNjcmlwdG9yKHJxMC0+Y3R4 LCBycTAtPnJpbmcpOwo+IC0JcnEwLT5lbHNwX3N1Ym1pdHRlZCsrOwo+ICsKPiArCWlmICghdGRy X3Jlc3VibWlzc2lvbikKPiArCQlycTAtPmVsc3Bfc3VibWl0dGVkKys7Cj4gIAo+ICAJLyogWW91 IG11c3QgYWx3YXlzIHdyaXRlIGJvdGggZGVzY3JpcHRvcnMgaW4gdGhlIG9yZGVyIGJlbG93LiAq Lwo+ICAJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2spOwo+IEBAIC0zNTksNiArMzY1 LDE4MiBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZWxzcF93cml0ZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJxMCwKPiAgCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2sp Owo+ICB9Cj4gIAo+ICsvKioKPiArICogZXhlY2xpc3RfZ2V0X2NvbnRleHRfcmVnX3BhZ2UoKSAt IEdldCBtZW1vcnkgcGFnZSBmb3IgY29udGV4dCBvYmplY3QKPiArICogQGVuZ2luZTogZW5naW5l Cj4gKyAqIEBjdHg6IGNvbnRleHQgcnVubmluZyBvbiBlbmdpbmUKPiArICogQHBhZ2U6IHJldHVy bmVkIHBhZ2UKPiArICoKPiArICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBw cm9wYWdhdGVzIGVycm9yIGNvZGVzLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBpbnQgZXhlY2xp c3RfZ2V0X2NvbnRleHRfcmVnX3BhZ2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ ICsJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsCj4gKwkJc3RydWN0IHBhZ2UgKipwYWdlKQo+ ICt7CgpBbGwgdGhlIG1hY3JvcyBhbmQgcmVnX3BhZ2Ugc3R1ZmYgY2FuIGJlIHJlbW92ZWQgYXMg CnRoZXJlIGlzIGN0eC0+ZW5naW5lW2lkXS5scmNfcmVnX3N0YXRlIGZvciBwaW5uZWQKY3R4IG9i amVjdHMuCgo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmo7Cj4gKwo+ICsJ aWYgKCFwYWdlKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmICghY3R4KQo+ICsJCWN0 eCA9IGVuZ2luZS0+ZGVmYXVsdF9jb250ZXh0Owo+ICsKCk5vLiBBZGQgYSB3YXJuIHdoaWNoIHRy aWdnZXJzIGlmIHNvbWVvbmUgdHJpZXMgdG8gCnRvdWNoIHRoZSBkZWZhdWx0X2NvbnRleHQgdGhy b3VnaCB0aGlzIG1lY2hhbmlzbS4KCkRlZmF1bHQgc2hvdWxkIGJlIHNhY3JlZCwgd2UgZG9uJ3Qg d2FudCBhbnkgc3RhdGUgdG8KYWNjaWRlbnRhbGx5IGNyZWVwIGludG8gaXQuCgoKPiArCWN0eF9v YmogPSBjdHgtPmVuZ2luZVtlbmdpbmUtPmlkXS5zdGF0ZTsKPiArCj4gKwlpZiAoV0FSTighY3R4 X29iaiwgIkNvbnRleHQgb2JqZWN0IG5vdCBzZXQgdXAhXG4iKSkKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCj4gKwlXQVJOKCFpOTE1X2dlbV9vYmpfaXNfcGlubmVkKGN0eF9vYmopLAo+ICsJICAg ICAiQ29udGV4dCBvYmplY3QgaXMgbm90IHBpbm5lZCFcbiIpOwo+ICsKPiArCSpwYWdlID0gaTkx NV9nZW1fb2JqZWN0X2dldF9wYWdlKGN0eF9vYmosIExSQ19TVEFURV9QTik7Cgo+ICsKPiArCWlm IChXQVJOKCEqcGFnZSwgIkNvbnRleHQgb2JqZWN0IHBhZ2UgY291bGQgbm90IGJlIHJlc29sdmVk IVxuIikpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBleGVjbGlzdF93cml0ZV9jb250ZXh0X3JlZygpIC0gV3JpdGUgdmFsdWUgdG8g Q29udGV4dCByZWdpc3Rlcgo+ICsgKiBAZW5naW5lOiBFbmdpbmUKPiArICogQGN0eDogQ29udGV4 dCBydW5uaW5nIG9uIGVuZ2luZQo+ICsgKiBAY3R4X3JlZzogSW5kZXggaW50byBjb250ZXh0IGlt YWdlIHBvaW50aW5nIHRvIHJlZ2lzdGVyIGxvY2F0aW9uCj4gKyAqIEBtbWlvX3JlZ19hZGRyOiBN TUlPIHJlZ2lzdGVyIGFkZHJlc3MKPiArICogQHZhbDogVmFsdWUgdG8gYmUgd3JpdHRlbgo+ICsg KiBAbW1pb19yZWdfbmFtZV9zdHI6IERlc2lnbmF0ZWQgcmVnaXN0ZXIgbmFtZQo+ICsgKgo+ICsg KiBSZXR1cm46IDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIHByb3BhZ2F0ZXMgZXJyb3IgY29k ZXMuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludCBleGVjbGlzdHNfd3JpdGVfY29udGV4dF9y ZWcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkJCSAgICAgIHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjdHgsCj4gKwkJCQkJICAgICAgdTMyIGN0eF9yZWcsCj4gKwkJCQkJICAg ICAgaTkxNV9yZWdfdCBtbWlvX3JlZywKPiArCQkJCQkgICAgICB1MzIgdmFsLAo+ICsJCQkJCSAg ICAgIGNvbnN0IGNoYXIgKm1taW9fcmVnX25hbWVfc3RyKQo+ICt7Cgo+ICsJc3RydWN0IHBhZ2Ug KnBhZ2UgPSBOVUxMOwo+ICsJdWludDMyX3QgKnJlZ19zdGF0ZTsKPiArCj4gKwlpbnQgcmV0ID0g ZXhlY2xpc3RfZ2V0X2NvbnRleHRfcmVnX3BhZ2UoZW5naW5lLCBjdHgsICZwYWdlKTsKPiArCWlm IChXQVJOKHJldCwgIlt3cml0ZSAlczoldV0gRmFpbGVkIHRvIGdldCBjb250ZXh0IG1lbW9yeSBw YWdlIGZvciAlcyFcbiIsCj4gKwkJIG1taW9fcmVnX25hbWVfc3RyLCAodW5zaWduZWQgaW50KSBt bWlvX3JlZy5yZWcsIGVuZ2luZS0+bmFtZSkpIHsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsK PiArCXJlZ19zdGF0ZSA9IGttYXBfYXRvbWljKHBhZ2UpOwo+ICsKPiArCVdBUk4ocmVnX3N0YXRl W2N0eF9yZWddICE9IG1taW9fcmVnLnJlZywKPiArCSAgICAgIlt3cml0ZSAlczoldV06IENvbnRl eHQgcmVnIGFkZHIgKCV4KSAhPSBNTUlPIHJlZyBhZGRyICgleCkhXG4iLAo+ICsJICAgICBtbWlv X3JlZ19uYW1lX3N0ciwKPiArCSAgICAgKHVuc2lnbmVkIGludCkgbW1pb19yZWcucmVnLAo+ICsJ ICAgICAodW5zaWduZWQgaW50KSByZWdfc3RhdGVbY3R4X3JlZ10sCj4gKwkgICAgICh1bnNpZ25l ZCBpbnQpIG1taW9fcmVnLnJlZyk7Cj4gKwo+ICsJcmVnX3N0YXRlW2N0eF9yZWcrMV0gPSB2YWw7 Cj4gKwlrdW5tYXBfYXRvbWljKHJlZ19zdGF0ZSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIGV4ZWNsaXN0X3JlYWRfY29udGV4dF9yZWcoKSAtIFJlYWQgdmFsdWUg ZnJvbSBDb250ZXh0IHJlZ2lzdGVyCj4gKyAqIEBlbmdpbmU6IEVuZ2luZQo+ICsgKiBAY3R4OiBD b250ZXh0IHJ1bm5pbmcgb24gZW5naW5lCj4gKyAqIEBjdHhfcmVnOiBJbmRleCBpbnRvIGNvbnRl eHQgaW1hZ2UgcG9pbnRpbmcgdG8gcmVnaXN0ZXIgbG9jYXRpb24KPiArICogQG1taW9fcmVnOiBN TUlPIHJlZ2lzdGVyIHN0cnVjdAo+ICsgKiBAdmFsOiBPdXRwdXQgcGFyYW1ldGVyIHJldHVybmlu ZyByZWdpc3RlciB2YWx1ZQo+ICsgKiBAbW1pb19yZWdfbmFtZV9zdHI6IERlc2lnbmF0ZWQgcmVn aXN0ZXIgbmFtZQo+ICsgKgo+ICsgKiBSZXR1cm46IDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNl IHByb3BhZ2F0ZXMgZXJyb3IgY29kZXMuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludCBleGVj bGlzdHNfcmVhZF9jb250ZXh0X3JlZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4g KwkJCQkJICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+ICsJCQkJCSAgICAgdTMyIGN0 eF9yZWcsCj4gKwkJCQkJICAgICBpOTE1X3JlZ190IG1taW9fcmVnLAo+ICsJCQkJCSAgICAgdTMy ICp2YWwsCj4gKwkJCQkJICAgICBjb25zdCBjaGFyICptbWlvX3JlZ19uYW1lX3N0cikKPiArewoK Cj4gKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7Cj4gKwl1aW50MzJfdCAqcmVnX3N0YXRlOwo+ ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYgKCF2YWwpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJcmV0ID0gZXhlY2xpc3RfZ2V0X2NvbnRleHRfcmVnX3BhZ2UoZW5naW5lLCBjdHgsICZw YWdlKTsKPiArCWlmIChXQVJOKHJldCwgIltyZWFkICVzOiV1XSBGYWlsZWQgdG8gZ2V0IGNvbnRl eHQgbWVtb3J5IHBhZ2UgZm9yICVzIVxuIiwKPiArCQkgbW1pb19yZWdfbmFtZV9zdHIsICh1bnNp Z25lZCBpbnQpIG1taW9fcmVnLnJlZywgZW5naW5lLT5uYW1lKSkgewo+ICsJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwo+ICsJcmVnX3N0YXRlID0ga21hcF9hdG9taWMocGFnZSk7Cj4gKwo+ICsJV0FS TihyZWdfc3RhdGVbY3R4X3JlZ10gIT0gbW1pb19yZWcucmVnLAo+ICsJICAgICAiW3JlYWQgJXM6 JXVdOiBDb250ZXh0IHJlZyBhZGRyICgleCkgIT0gTU1JTyByZWcgYWRkciAoJXgpIVxuIiwKPiAr CSAgICAgbW1pb19yZWdfbmFtZV9zdHIsCj4gKwkgICAgICh1bnNpZ25lZCBpbnQpIGN0eF9yZWcs Cj4gKwkgICAgICh1bnNpZ25lZCBpbnQpIHJlZ19zdGF0ZVtjdHhfcmVnXSwKPiArCSAgICAgKHVu c2lnbmVkIGludCkgbW1pb19yZWcucmVnKTsKPiArCj4gKwkqdmFsID0gcmVnX3N0YXRlW2N0eF9y ZWcrMV07Cj4gKwlrdW5tYXBfYXRvbWljKHJlZ19zdGF0ZSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiArIH0KPiArCj4gKy8qCj4gKyAqIEdlbmVyaWMgbWFjcm9zIGZvciBnZW5lcmF0aW5nIGZ1bmN0 aW9uIGltcGxlbWVudGF0aW9uIGZvciBjb250ZXh0IHJlZ2lzdGVyCj4gKyAqIHJlYWQvd3JpdGUg ZnVuY3Rpb25zLgo+ICsgKgo+ICsgKiBNYWNybyBwYXJhbWV0ZXJzCj4gKyAqIC0tLS0tLS0tLS0t LS0tLS0KPiArICogcmVnX25hbWU6IERlc2lnbmF0ZWQgbmFtZSBvZiBjb250ZXh0IHJlZ2lzdGVy IChlLmcuIHRhaWwsIGhlYWQsIGJ1ZmZlcl9jdGwpCj4gKyAqCj4gKyAqIHJlZ19kZWY6IENvbnRl eHQgcmVnaXN0ZXIgbWFjcm8gZGVmaW5pdGlvbiAoZS5nLiBDVFhfUklOR19UQUlMKQo+ICsgKgo+ ICsgKiBtbWlvX3JlZ19kZWY6IE5hbWUgb2YgbWFjcm8gZnVuY3Rpb24gdXNlZCB0byBkZXRlcm1p bmUgdGhlIGFkZHJlc3MKPiArICoJCSBvZiB0aGUgY29ycmVzcG9uZGluZyBNTUlPIHJlZ2lzdGVy IChlLmcuIFJJTkdfVEFJTCwgUklOR19IRUFEKS4KPiArICoJCSBUaGlzIG1hY3JvIGZ1bmN0aW9u IGlzIGFzc3VtZWQgdG8gYmUgZGVmaW5lZCBvbiB0aGUgZm9ybSBvZjoKPiArICoKPiArICoJCQkj ZGVmaW5lIG1taW9fcmVnX2RlZihiYXNlKSAoYmFzZStyZWdpc3Rlcl9vZmZzZXQpCj4gKyAqCj4g KyAqCQkgV2hlcmUgImJhc2UiIGlzIHRoZSBNTUlPIGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVzcGVj dGl2ZSByaW5nCj4gKyAqCQkgYW5kICJyZWdpc3Rlcl9vZmZzZXQiIGlzIHRoZSBvZmZzZXQgcmVs YXRpdmUgdG8gImJhc2UiLgo+ICsgKgo+ICsgKiBGdW5jdGlvbiBwYXJhbWV0ZXJzCj4gKyAqIC0t LS0tLS0tLS0tLS0tLS0tLS0KPiArICogZW5naW5lOiBUaGUgZW5naW5lIHRoYXQgdGhlIGNvbnRl eHQgaXMgcnVubmluZyBvbgo+ICsgKiBjdHg6IFRoZSBjb250ZXh0IG9mIHRoZSByZWdpc3RlciB0 aGF0IGlzIHRvIGJlIGFjY2Vzc2VkCj4gKyAqIHJlZ19uYW1lOiBWYWx1ZSB0byBiZSB3cml0dGVu L3JlYWQgdG8vZnJvbSB0aGUgcmVnaXN0ZXIuCj4gKyAqLwo+ICsjZGVmaW5lIElOVEVMX0VYRUNM SVNUU19XUklURV9SRUcocmVnX25hbWUsIHJlZ19kZWYsIG1taW9fcmVnX2RlZikgXAo+ICsJaW50 IGludGVsX2V4ZWNsaXN0c193cml0ZV8jI3JlZ19uYW1lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwgXAo+ICsJCQkJCSAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwgXAo+ICsJ CQkJCSAgICAgdTMyIHJlZ19uYW1lKSBcCj4gK3sgXAo+ICsJcmV0dXJuIGV4ZWNsaXN0c193cml0 ZV9jb250ZXh0X3JlZyhlbmdpbmUsIGN0eCwgKHJlZ19kZWYpLCBcCj4gKwkJCW1taW9fcmVnX2Rl ZihlbmdpbmUtPm1taW9fYmFzZSksIChyZWdfbmFtZSksIFwKPiArCQkJKCNyZWdfbmFtZSkpOyBc Cj4gK30KPiArCj4gKyNkZWZpbmUgSU5URUxfRVhFQ0xJU1RTX1JFQURfUkVHKHJlZ19uYW1lLCBy ZWdfZGVmLCBtbWlvX3JlZ19kZWYpIFwKPiArCWludCBpbnRlbF9leGVjbGlzdHNfcmVhZF8jI3Jl Z19uYW1lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgXAo+ICsJCQkJCSAgICBzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY3R4LCBcCj4gKwkJCQkJICAgIHUzMiAqcmVnX25hbWUpIFwKPiAr eyBcCj4gKwlyZXR1cm4gZXhlY2xpc3RzX3JlYWRfY29udGV4dF9yZWcoZW5naW5lLCBjdHgsIChy ZWdfZGVmKSwgXAo+ICsJCQltbWlvX3JlZ19kZWYoZW5naW5lLT5tbWlvX2Jhc2UpLCAocmVnX25h bWUpLCBcCj4gKwkJCSgjcmVnX25hbWUpKTsgXAo+ICt9Cj4gKwo+ICtJTlRFTF9FWEVDTElTVFNf UkVBRF9SRUcodGFpbCwgQ1RYX1JJTkdfVEFJTCwgUklOR19UQUlMKQo+ICtJTlRFTF9FWEVDTElT VFNfV1JJVEVfUkVHKGhlYWQsIENUWF9SSU5HX0hFQUQsIFJJTkdfSEVBRCkKPiArSU5URUxfRVhF Q0xJU1RTX1JFQURfUkVHKGhlYWQsIENUWF9SSU5HX0hFQUQsIFJJTkdfSEVBRCkKPiArCj4gKyN1 bmRlZiBJTlRFTF9FWEVDTElTVFNfUkVBRF9SRUcKPiArI3VuZGVmIElOVEVMX0VYRUNMSVNUU19X UklURV9SRUcKPiArCj4gIHN0YXRpYyBpbnQgZXhlY2xpc3RzX3VwZGF0ZV9jb250ZXh0KHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcgPSBycS0+cmluZzsKPiBAQCAtMzk2LDE3ICs1NzgsMTggQEAgc3RhdGljIGludCBl eGVjbGlzdHNfdXBkYXRlX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycSkK PiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9yZXF1ZXN0cyhzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxMCwKPiAtCQkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcnExKQo+ICsJCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpycTEsCj4gKwkJCQkgICAgICBib29sIHRkcl9yZXN1Ym1pc3Npb24pCj4gIHsKPiAgCWV4ZWNs aXN0c191cGRhdGVfY29udGV4dChycTApOwo+ICAKPiAgCWlmIChycTEpCj4gIAkJZXhlY2xpc3Rz X3VwZGF0ZV9jb250ZXh0KHJxMSk7Cj4gIAo+IC0JZXhlY2xpc3RzX2Vsc3Bfd3JpdGUocnEwLCBy cTEpOwo+ICsJZXhlY2xpc3RzX2Vsc3Bfd3JpdGUocnEwLCBycTEsIHRkcl9yZXN1Ym1pc3Npb24p Owo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBleGVjbGlzdHNfY29udGV4dF91bnF1ZXVlKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK3N0YXRpYyB2b2lkIGV4ZWNsaXN0c19jb250ZXh0 X3VucXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgYm9vbCB0ZHJfcmVzdWJtaXNz aW9uKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcTAgPSBOVUxMLCAq cmVxMSA9IE5VTEw7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKmN1cnNvciA9IE5V TEwsICp0bXAgPSBOVUxMOwo+IEBAIC00NDAsNiArNjIzLDE2IEBAIHN0YXRpYyB2b2lkIGV4ZWNs aXN0c19jb250ZXh0X3VucXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAgCQl9 Cj4gIAl9Cj4gIAo+ICsJLyoKPiArCSAqIE9ubHkgZG8gVERSIHJlc3VibWlzc2lvbiBvZiB0aGUg c2Vjb25kIGhlYWQgcmVxdWVzdCBpZiBpdCdzIGFscmVhZHkKPiArCSAqIGJlZW4gc3VibWl0dGVk LiBUaGUgaW50ZW50aW9uIGlzIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHN1Ym1pc3Npb24KPiAr CSAqIHN0YXRlIGZyb20gdGhlIHNpdHVhdGlvbiB3aGVuIHRoZSBoYW5nIG9yaWdpbmFsbHkgaGFw cGVuZWQuIElmIGl0Cj4gKwkgKiB3YXMgbmV2ZXIgc3VibWl0dGVkIHdlIGRvbid0IHdhbnQgdG8g c3VibWl0IGl0IGZvciB0aGUgZmlyc3QgdGltZSBhdAo+ICsJICogdGhpcyBwb2ludAo+ICsJICov Cj4gKwlpZiAodGRyX3Jlc3VibWlzc2lvbiAmJiByZXExICYmICFyZXExLT5lbHNwX3N1Ym1pdHRl ZCkKPiArCQlyZXExID0gTlVMTDsKPiArCj4gIAlpZiAoSVNfR0VOOChyaW5nLT5kZXYpIHx8IElT X0dFTjkocmluZy0+ZGV2KSkgewo+ICAJCS8qCj4gIAkJICogV2FJZGxlTGl0ZVJlc3RvcmU6IG1h a2Ugc3VyZSB3ZSBuZXZlciBjYXVzZSBhIGxpdGUKPiBAQCAtNDYwLDkgKzY1MywzMiBAQCBzdGF0 aWMgdm9pZCBleGVjbGlzdHNfY29udGV4dF91bnF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmcpCj4gIAkJfQo+ICAJfQo+ICAKPiAtCVdBUk5fT04ocmVxMSAmJiByZXExLT5lbHNwX3N1 Ym1pdHRlZCk7Cj4gKwlXQVJOX09OKHJlcTEgJiYgcmVxMS0+ZWxzcF9zdWJtaXR0ZWQgJiYgIXRk cl9yZXN1Ym1pc3Npb24pOwo+ICAKPiAtCWV4ZWNsaXN0c19zdWJtaXRfcmVxdWVzdHMocmVxMCwg cmVxMSk7Cj4gKwlleGVjbGlzdHNfc3VibWl0X3JlcXVlc3RzKHJlcTAsIHJlcTEsIHRkcl9yZXN1 Ym1pc3Npb24pOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaW50ZWxfZXhlY2xpc3RzX1REUl9jb250 ZXh0X3Jlc3VibWlzc2lvbigpIC0gRUxTUCBjb250ZXh0IHJlc3VibWlzc2lvbgo+ICsgKiBAcmlu ZzogZW5naW5lIHRvIGRvIHJlc3VibWlzc2lvbiBmb3IuCj4gKyAqCj4gKyAqIENvbnRleHQgc3Vi bWlzc2lvbiBtZWNoYW5pc20gZXhjbHVzaXZlbHkgdXNlZCBieSBURFIgdGhhdCBieXBhc3NlcyB0 aGUKPiArICogZXhlY2xpc3QgcXVldWUuIFRoaXMgaXMgbmVjZXNzYXJ5IHNpbmNlIGF0IHRoZSBw b2ludCBvZiBURFIgaGFuZyByZWNvdmVyeQo+ICsgKiB0aGUgaGFyZHdhcmUgd2lsbCBiZSBodW5n IGFuZCByZXN1Ym1pdHRpbmcgYSBmaXhlZCBjb250ZXh0ICh0aGUgY29udGV4dCB0aGF0Cj4gKyAq IHRoZSBURFIgaGFzIGlkZW50aWZpZWQgYXMgaHVuZyBhbmQgZml4ZWQgdXAgaW4gb3JkZXIgdG8g bW92ZSBwYXN0IHRoZQo+ICsgKiBibG9ja2luZyBiYXRjaCBidWZmZXIpIHRvIGEgaHVuZyBleGVj bGlzdCBxdWV1ZSB3aWxsIGxvY2sgdXAgdGhlIFREUi4KPiArICogSW5zdGVhZCwgb3B0IGZvciBk aXJlY3QgRUxTUCBzdWJtaXNzaW9uIHdpdGhvdXQgZGVwZW5kaW5nIG9uIHRoZSByZXN0IG9mIHRo ZQo+ICsgKiBkcml2ZXIuCj4gKyAqLwo+ICt2b2lkIGludGVsX2V4ZWNsaXN0c19URFJfY29udGV4 dF9yZXN1Ym1pc3Npb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArewo+ICsJdW5z aWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+ZXhlY2xp c3RfbG9jaywgZmxhZ3MpOwo+ICsJV0FSTl9PTihsaXN0X2VtcHR5KCZyaW5nLT5leGVjbGlzdF9x dWV1ZSkpOwo+ICsKPiArCWV4ZWNsaXN0c19jb250ZXh0X3VucXVldWUocmluZywgdHJ1ZSk7Cj4g KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5leGVjbGlzdF9sb2NrLCBmbGFncyk7Cj4g IH0KPiAgCj4gIHN0YXRpYyBib29sIGV4ZWNsaXN0c19jaGVja19yZW1vdmVfcmVxdWVzdChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+IEBAIC01NjAsOSArNzc2LDkgQEAgdm9pZCBpbnRl bF9scmNfaXJxX2hhbmRsZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAgCQkvKiBQ cmV2ZW50IGEgY3R4IHRvIHByZWVtcHQgaXRzZWxmICovCj4gIAkJaWYgKChzdGF0dXMgJiBHRU44 X0NUWF9TVEFUVVNfQUNUSVZFX0lETEUpICYmCj4gIAkJICAgIChzdWJtaXRfY29udGV4dHMgIT0g MCkpCj4gLQkJCWV4ZWNsaXN0c19jb250ZXh0X3VucXVldWUocmluZyk7Cj4gKwkJCWV4ZWNsaXN0 c19jb250ZXh0X3VucXVldWUocmluZywgZmFsc2UpOwo+ICAJfSBlbHNlIGlmIChzdWJtaXRfY29u dGV4dHMgIT0gMCkgewo+IC0JCWV4ZWNsaXN0c19jb250ZXh0X3VucXVldWUocmluZyk7Cj4gKwkJ ZXhlY2xpc3RzX2NvbnRleHRfdW5xdWV1ZShyaW5nLCBmYWxzZSk7Cj4gIAl9Cj4gIAo+ICAJc3Bp bl91bmxvY2soJnJpbmctPmV4ZWNsaXN0X2xvY2spOwo+IEBAIC02MTMsNyArODI5LDcgQEAgc3Rh dGljIGludCBleGVjbGlzdHNfY29udGV4dF9xdWV1ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcXVlc3QpCj4gIAo+ICAJbGlzdF9hZGRfdGFpbCgmcmVxdWVzdC0+ZXhlY2xpc3RfbGlu aywgJnJpbmctPmV4ZWNsaXN0X3F1ZXVlKTsKPiAgCWlmIChudW1fZWxlbWVudHMgPT0gMCkKPiAt CQlleGVjbGlzdHNfY29udGV4dF91bnF1ZXVlKHJpbmcpOwo+ICsJCWV4ZWNsaXN0c19jb250ZXh0 X3VucXVldWUocmluZywgZmFsc2UpOwo+ICAKPiAgCXNwaW5fdW5sb2NrX2lycSgmcmluZy0+ZXhl Y2xpc3RfbG9jayk7Cj4gIAo+IEBAIC0xNTM2LDcgKzE3NTIsNyBAQCBzdGF0aWMgaW50IGdlbjhf aW5pdF9jb21tb25fcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICAJcmluZy0+ bmV4dF9jb250ZXh0X3N0YXR1c19idWZmZXIgPSBuZXh0X2NvbnRleHRfc3RhdHVzX2J1ZmZlcl9o dzsKPiAgCURSTV9ERUJVR19EUklWRVIoIkV4ZWNsaXN0cyBlbmFibGVkIGZvciAlc1xuIiwgcmlu Zy0+bmFtZSk7Cj4gIAo+IC0JbWVtc2V0KCZyaW5nLT5oYW5nY2hlY2ssIDAsIHNpemVvZihyaW5n LT5oYW5nY2hlY2spKTsKPiArCWk5MTVfaGFuZ2NoZWNrX3JlaW5pdChyaW5nKTsKPiAgCj4gIAly ZXR1cm4gMDsKPiAgfQo+IEBAIC0xODg4LDYgKzIxMDQsMTg3IEBAIG91dDoKPiAgCXJldHVybiBy ZXQ7Cj4gIH0KPiAgCj4gK3N0YXRpYyBpbnQKPiArZ2VuOF9yaW5nX2Rpc2FibGUoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZykKPiArewo+ICsJaW50ZWxfcmVxdWVzdF9ncHVfZW5naW5lX3Jl c2V0KHJpbmcpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiArZ2VuOF9y aW5nX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICt7Cj4gKwlpbnRlbF91 bnJlcXVlc3RfZ3B1X2VuZ2luZV9yZXNldChyaW5nKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICsvKioKPiArICogZ2VuOF9yaW5nX3NhdmUoKSAtIHNhdmUgbWluaW11bSBlbmdpbmUgc3RhdGUK PiArICogQHJpbmc6IGVuZ2luZSB3aG9zZSBzdGF0ZSBpcyB0byBiZSBzYXZlZAo+ICsgKiBAcmVx OiByZXF1ZXN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgY3VycmVudGx5IHJ1bm5pbmcgb24gZW5n aW5lCj4gKyAqIEBmb3JjZV9hZHZhbmNlOiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgd2Ugc2hv dWxkIG51ZGdlIHRoZSBoZWFkCj4gKyAqCQkgIGZvcndhcmQgb3Igbm90Cj4gKyAqCj4gKyAqIFNh dmVzIHRoZSBoZWFkIE1NSU8gcmVnaXN0ZXIgdG8gc2NyYXRjaCBtZW1vcnkgd2hpbGUgZW5naW5l IGlzIHJlc2V0IGFuZAo+ICsgKiByZWluaXRpYWxpemVkLiBCZWZvcmUgc2F2aW5nIHRoZSBoZWFk IHJlZ2lzdGVyIHdlIG51ZGdlIHRoZSBoZWFkIHBvc2l0aW9uIHRvCj4gKyAqIGJlIGNvcnJlY3Rs eSBhbGlnbmVkIHdpdGggYSBRV09SRCBib3VuZGFyeSwgd2hpY2ggYnJpbmdzIGl0IHVwIHRvIHRo ZSBuZXh0Cj4gKyAqIHByZXN1bWFibHkgdmFsaWQgaW5zdHJ1Y3Rpb24uIFR5cGljYWxseSwgYXQg dGhlIHBvaW50IG9mIGhhbmcgcmVjb3ZlcnkgdGhlCj4gKyAqIGhlYWQgcmVnaXN0ZXIgd2lsbCBi ZSBwb2ludGluZyB0byB0aGUgbGFzdCBEV09SRCBvZiB0aGUgQkJfU1RBUlQKPiArICogaW5zdHJ1 Y3Rpb24sIHdoaWNoIGlzIGZvbGxvd2VkIGJ5IGEgcGFkZGluZyBNSV9OT09QIGluc2VydGVkIGJ5 IHRoZQo+ICsgKiBkcml2ZXIuCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIAkwIGlmIG9rLCBv dGhlcndpc2UgcHJvcGFnYXRlcyBlcnJvciBjb2Rlcy4KPiArICovCj4gK3N0YXRpYyBpbnQKPiAr Z2VuOF9yaW5nX3NhdmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gKwkJYm9vbCBmb3JjZV9hZHZhbmNlKQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5nLT5kZXYtPmRldl9wcml2YXRl Owo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYgPSBOVUxMOwo+ICsJc3RydWN0 IGludGVsX2NvbnRleHQgKmN0eDsKPiArCWludCByZXQgPSAwOwo+ICsJaW50IGNsYW1wX3RvX3Rh aWwgPSAwOwo+ICsJdWludDMyX3QgaGVhZDsKPiArCXVpbnQzMl90IHRhaWw7Cj4gKwl1aW50MzJf dCBoZWFkX2FkZHI7Cj4gKwl1aW50MzJfdCB0YWlsX2FkZHI7Cj4gKwo+ICsJaWYgKFdBUk5fT04o IXJlcSkpCj4gKwkgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJY3R4ID0gcmVxLT5jdHg7Cj4g KwlyaW5nYnVmID0gY3R4LT5lbmdpbmVbcmluZy0+aWRdLnJpbmdidWY7Cj4gKwo+ICsJLyoKPiAr CSAqIFJlYWQgaGVhZCBmcm9tIE1NSU8gcmVnaXN0ZXIgc2luY2UgaXQgY29udGFpbnMgdGhlCj4g KwkgKiBtb3N0IHVwIHRvIGRhdGUgdmFsdWUgb2YgaGVhZCBhdCB0aGlzIHBvaW50Lgo+ICsJICov Cj4gKwloZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZyk7Cj4gKwo+ICsJLyoKPiArCSAqIFJlYWQg dGFpbCBmcm9tIHRoZSBjb250ZXh0IGJlY2F1c2UgdGhlIGV4ZWNsaXN0IHF1ZXVlCj4gKwkgKiB1 cGRhdGVzIHRoZSB0YWlsIHZhbHVlIHRoZXJlIGZpcnN0IGR1cmluZyBzdWJtaXNzaW9uLgo+ICsJ ICogVGhlIE1NSU8gdGFpbCByZWdpc3RlciBpcyBub3QgdXBkYXRlZCB1bnRpbCB0aGUgYWN0dWFs Cj4gKwkgKiByaW5nIHN1Ym1pc3Npb24gY29tcGxldGVzLgo+ICsJICovCj4gKwlyZXQgPSBJOTE1 X1JFQURfVEFJTF9DVFgocmluZywgY3R4LCB0YWlsKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJu IHJldDsKPiArCj4gKwkvKgo+ICsJICogaGVhZF9hZGRyIGFuZCB0YWlsX2FkZHIgYXJlIHRoZSBo ZWFkIGFuZCB0YWlsIHZhbHVlcwo+ICsJICogZXhjbHVkaW5nIHJpbmcgd3JhcHBpbmcgaW5mb3Jt YXRpb24gYW5kIGFsaWduZWQgdG8gRFdPUkQKPiArCSAqIGJvdW5kYXJ5Cj4gKwkgKi8KPiArCWhl YWRfYWRkciA9IGhlYWQgJiBIRUFEX0FERFI7Cj4gKwl0YWlsX2FkZHIgPSB0YWlsICYgVEFJTF9B RERSOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgaGVhZCBtdXN0IGFsd2F5cyBjaGFzZSB0aGUgdGFp bC4KPiArCSAqIElmIHRoZSB0YWlsIGlzIGJleW9uZCB0aGUgaGVhZCB0aGVuIGRvIG5vdCBhbGxv dwo+ICsJICogdGhlIGhlYWQgdG8gb3ZlcnRha2UgaXQuIElmIHRoZSB0YWlsIGlzIGxlc3MgdGhh bgo+ICsJICogdGhlIGhlYWQgdGhlbiB0aGUgdGFpbCBoYXMgYWxyZWFkeSB3cmFwcGVkIGFuZAo+ ICsJICogdGhlcmUgaXMgbm8gcHJvYmxlbSBpbiBhZHZhbmNpbmcgdGhlIGhlYWQgb3IgZXZlbgo+ ICsJICogd3JhcHBpbmcgdGhlIGhlYWQgYmFjayB0byAwIGFzIHdvcnN0IGNhc2UgaXQgd2lsbAo+ ICsJICogYmVjb21lIGVxdWFsIHRvIHRhaWwKPiArCSAqLwo+ICsJaWYgKGhlYWRfYWRkciA8PSB0 YWlsX2FkZHIpCj4gKwkJY2xhbXBfdG9fdGFpbCA9IDE7Cj4gKwo+ICsJaWYgKGZvcmNlX2FkdmFu Y2UpIHsKPiArCj4gKwkJLyogRm9yY2UgaGVhZCBwb2ludGVyIHRvIG5leHQgUVdPUkQgYm91bmRh cnkgKi8KPiArCQloZWFkX2FkZHIgJj0gfjB4NzsKPiArCQloZWFkX2FkZHIgKz0gODsKPiArCj4g Kwl9IGVsc2UgaWYgKGhlYWQgJiAweDcpIHsKPiArCj4gKwkJLyogRW5zdXJlIGhlYWQgcG9pbnRl ciBpcyBwb2ludGluZyB0byBhIFFXT1JEIGJvdW5kYXJ5ICovCj4gKwkJaGVhZCArPSAweDc7Cj4g KwkJaGVhZCAmPSB+MHg3Owo+ICsJCWhlYWRfYWRkciA9IGhlYWQ7Cj4gKwl9Cj4gKwo+ICsJaWYg KGNsYW1wX3RvX3RhaWwgJiYgKGhlYWRfYWRkciA+IHRhaWxfYWRkcikpIHsKPiArCQloZWFkX2Fk ZHIgPSB0YWlsX2FkZHI7Cj4gKwl9IGVsc2UgaWYgKGhlYWRfYWRkciA+PSByaW5nYnVmLT5zaXpl KSB7Cj4gKwkJLyogV3JhcCBoZWFkIGJhY2sgdG8gc3RhcnQgaWYgaXQgZXhjZWVkcyByaW5nIHNp emUgKi8KPiArCQloZWFkX2FkZHIgPSAwOwo+ICsJfQo+ICsKPiArCWhlYWQgJj0gfkhFQURfQURE UjsKPiArCWhlYWQgfD0gKGhlYWRfYWRkciAmIEhFQURfQUREUik7Cj4gKwlyaW5nLT5zYXZlZF9o ZWFkID0gaGVhZDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArCj4gKy8qKgo+ICsgKiBn ZW44X3JpbmdfcmVzdG9yZSgpIC0gcmVzdG9yZSBwcmV2aW91c2x5IHNhdmVkIGVuZ2luZSBzdGF0 ZQo+ICsgKiBAcmluZzogZW5naW5lIHdob3NlIHN0YXRlIGlzIHRvIGJlIHJlc3RvcmVkCj4gKyAq IEByZXE6IHJlcXVlc3QgY29udGFpbmluZyB0aGUgY29udGV4dCBjdXJyZW50bHkgcnVubmluZyBv biBlbmdpbmUKPiArICoKPiArICogUmVpbml0aWFsaXplcyBlbmdpbmUgYW5kIHJlc3RvcmVzIHRo ZSBwcmV2aW91c2x5IHNhdmVkIGVuZ2luZSBzdGF0ZS4KPiArICogU2VlOiBnZW44X3Jpbmdfc2F2 ZSgpCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIAkwIGlmIG9rLCBvdGhlcndpc2UgcHJvcGFn YXRlcyBlcnJvciBjb2Rlcy4KPiArICovCj4gK3N0YXRpYyBpbnQKPiArZ2VuOF9yaW5nX3Jlc3Rv cmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXEpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJp bmctPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4Owo+ICsK PiArCWlmIChXQVJOX09OKCFyZXEpKQo+ICsJICAgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArCWN0 eCA9IHJlcS0+Y3R4Owo+ICsKPiArCS8qIFJlLWluaXRpYWxpemUgcmluZyAqLwo+ICsJaWYgKHJp bmctPmluaXRfaHcpIHsKPiArCQlpbnQgcmV0ID0gcmluZy0+aW5pdF9odyhyaW5nKTsKPiArCQlp ZiAocmV0ICE9IDApIHsKPiArCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmUtaW5pdGlhbGl6ZSAl c1xuIiwKPiArCQkJCQlyaW5nLT5uYW1lKTsKPiArCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwl9 IGVsc2Ugewo+ICsJCURSTV9FUlJPUigicmluZyBpbml0IGZ1bmN0aW9uIHBvaW50ZXIgbm90IHNl dCB1cFxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJpbmctPmlk ID09IFJDUykgewo+ICsJCS8qCj4gKwkJICogVGhlc2UgcmVnaXN0ZXIgcmVpbml0aWFsaXphdGlv bnMgYXJlIG9ubHkgbG9jYXRlZCBoZXJlCj4gKwkJICogdGVtcG9yYXJpbHkgdW50aWwgdGhleSBh cmUgbW92ZWQgb3V0IG9mIHRoZQo+ICsJCSAqIGluaXRfY2xvY2tfZ2F0aW5nIGZ1bmN0aW9uIHRv IHNvbWUgZnVuY3Rpb24gd2UgY2FuCj4gKwkJICogY2FsbCBmcm9tIGhlcmUuCj4gKwkJICovCj4g Kwo+ICsJCS8qIFdhVlNSZWZDb3VudEZ1bGxmb3JjZU1pc3NEaXNhYmxlOmNodiAqLwo+ICsJCS8q IFdhRFNSZWZDb3VudEZ1bGxmb3JjZU1pc3NEaXNhYmxlOmNodiAqLwo+ICsJCUk5MTVfV1JJVEUo R0VON19GRl9USFJFQURfTU9ERSwKPiArCQkJICAgSTkxNV9SRUFEKEdFTjdfRkZfVEhSRUFEX01P REUpICYKPiArCQkJICAgfihHRU44X0ZGX0RTX1JFRl9DTlRfRkZNRSB8IEdFTjdfRkZfVlNfUkVG X0NOVF9GRk1FKSk7Cj4gKwo+ICsJCUk5MTVfV1JJVEUoXzNEX0NISUNLRU4zLAo+ICsJCQkgICBf M0RfQ0hJQ0tFTl9TREVfTElNSVRfRklGT19QT0xZX0RFUFRIKDIpKTsKPiArCj4gKwkJLyogV2FT d2l0Y2hTb2xWZkZBcmJpdHJhdGlvblByaW9yaXR5OmJkdyAqLwo+ICsJCUk5MTVfV1JJVEUoR0FN X0VDT0NISywgSTkxNV9SRUFEKEdBTV9FQ09DSEspIHwgSFNXX0VDT0NIS19BUkJfUFJJT19TT0wp Owo+ICsJfQo+ICsKPiArCS8qIFJlc3RvcmUgaGVhZCAqLwo+ICsKPiArCUk5MTVfV1JJVEVfSEVB RChyaW5nLCByaW5nLT5zYXZlZF9oZWFkKTsKPiArCUk5MTVfV1JJVEVfSEVBRF9DVFgocmluZywg Y3R4LCByaW5nLT5zYXZlZF9oZWFkKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAgc3Rh dGljIGludCBnZW44X2luaXRfcmNzX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpyZXEpCj4gIHsKPiAgCWludCByZXQ7Cj4gQEAgLTIwMjEsNiArMjQxOCwxMCBAQCBzdGF0aWMg aW50IGxvZ2ljYWxfcmVuZGVyX3JpbmdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJ cmluZy0+aXJxX2dldCA9IGdlbjhfbG9naWNhbF9yaW5nX2dldF9pcnE7Cj4gIAlyaW5nLT5pcnFf cHV0ID0gZ2VuOF9sb2dpY2FsX3JpbmdfcHV0X2lycTsKPiAgCXJpbmctPmVtaXRfYmJfc3RhcnQg PSBnZW44X2VtaXRfYmJfc3RhcnQ7Cj4gKwlyaW5nLT5lbmFibGUgPSBnZW44X3JpbmdfZW5hYmxl Owo+ICsJcmluZy0+ZGlzYWJsZSA9IGdlbjhfcmluZ19kaXNhYmxlOwo+ICsJcmluZy0+c2F2ZSA9 IGdlbjhfcmluZ19zYXZlOwo+ICsJcmluZy0+cmVzdG9yZSA9IGdlbjhfcmluZ19yZXN0b3JlOwo+ ICAKPiAgCXJpbmctPmRldiA9IGRldjsKPiAgCj4gQEAgLTIwNzMsNiArMjQ3NCwxMCBAQCBzdGF0 aWMgaW50IGxvZ2ljYWxfYnNkX3JpbmdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJ cmluZy0+aXJxX2dldCA9IGdlbjhfbG9naWNhbF9yaW5nX2dldF9pcnE7Cj4gIAlyaW5nLT5pcnFf cHV0ID0gZ2VuOF9sb2dpY2FsX3JpbmdfcHV0X2lycTsKPiAgCXJpbmctPmVtaXRfYmJfc3RhcnQg PSBnZW44X2VtaXRfYmJfc3RhcnQ7Cj4gKwlyaW5nLT5lbmFibGUgPSBnZW44X3JpbmdfZW5hYmxl Owo+ICsJcmluZy0+ZGlzYWJsZSA9IGdlbjhfcmluZ19kaXNhYmxlOwo+ICsJcmluZy0+c2F2ZSA9 IGdlbjhfcmluZ19zYXZlOwo+ICsJcmluZy0+cmVzdG9yZSA9IGdlbjhfcmluZ19yZXN0b3JlOwo+ ICAKPiAgCXJldHVybiBsb2dpY2FsX3JpbmdfaW5pdChkZXYsIHJpbmcpOwo+ICB9Cj4gQEAgLTIw OTgsNiArMjUwMywxMCBAQCBzdGF0aWMgaW50IGxvZ2ljYWxfYnNkMl9yaW5nX2luaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKPiAgCXJpbmctPmlycV9nZXQgPSBnZW44X2xvZ2ljYWxfcmluZ19n ZXRfaXJxOwo+ICAJcmluZy0+aXJxX3B1dCA9IGdlbjhfbG9naWNhbF9yaW5nX3B1dF9pcnE7Cj4g IAlyaW5nLT5lbWl0X2JiX3N0YXJ0ID0gZ2VuOF9lbWl0X2JiX3N0YXJ0Owo+ICsJcmluZy0+ZW5h YmxlID0gZ2VuOF9yaW5nX2VuYWJsZTsKPiArCXJpbmctPmRpc2FibGUgPSBnZW44X3JpbmdfZGlz YWJsZTsKPiArCXJpbmctPnNhdmUgPSBnZW44X3Jpbmdfc2F2ZTsKPiArCXJpbmctPnJlc3RvcmUg PSBnZW44X3JpbmdfcmVzdG9yZTsKPiAgCj4gIAlyZXR1cm4gbG9naWNhbF9yaW5nX2luaXQoZGV2 LCByaW5nKTsKPiAgfQo+IEBAIC0yMTI4LDYgKzI1MzcsMTAgQEAgc3RhdGljIGludCBsb2dpY2Fs X2JsdF9yaW5nX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCXJpbmctPmlycV9nZXQg PSBnZW44X2xvZ2ljYWxfcmluZ19nZXRfaXJxOwo+ICAJcmluZy0+aXJxX3B1dCA9IGdlbjhfbG9n aWNhbF9yaW5nX3B1dF9pcnE7Cj4gIAlyaW5nLT5lbWl0X2JiX3N0YXJ0ID0gZ2VuOF9lbWl0X2Ji X3N0YXJ0Owo+ICsJcmluZy0+ZW5hYmxlID0gZ2VuOF9yaW5nX2VuYWJsZTsKPiArCXJpbmctPmRp c2FibGUgPSBnZW44X3JpbmdfZGlzYWJsZTsKPiArCXJpbmctPnNhdmUgPSBnZW44X3Jpbmdfc2F2 ZTsKPiArCXJpbmctPnJlc3RvcmUgPSBnZW44X3JpbmdfcmVzdG9yZTsKPiAgCj4gIAlyZXR1cm4g bG9naWNhbF9yaW5nX2luaXQoZGV2LCByaW5nKTsKPiAgfQo+IEBAIC0yMTU4LDYgKzI1NzEsMTAg QEAgc3RhdGljIGludCBsb2dpY2FsX3ZlYm94X3JpbmdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQo+ICAJcmluZy0+aXJxX2dldCA9IGdlbjhfbG9naWNhbF9yaW5nX2dldF9pcnE7Cj4gIAly aW5nLT5pcnFfcHV0ID0gZ2VuOF9sb2dpY2FsX3JpbmdfcHV0X2lycTsKPiAgCXJpbmctPmVtaXRf YmJfc3RhcnQgPSBnZW44X2VtaXRfYmJfc3RhcnQ7Cj4gKwlyaW5nLT5lbmFibGUgPSBnZW44X3Jp bmdfZW5hYmxlOwo+ICsJcmluZy0+ZGlzYWJsZSA9IGdlbjhfcmluZ19kaXNhYmxlOwo+ICsJcmlu Zy0+c2F2ZSA9IGdlbjhfcmluZ19zYXZlOwo+ICsJcmluZy0+cmVzdG9yZSA9IGdlbjhfcmluZ19y ZXN0b3JlOwo+ICAKPiAgCXJldHVybiBsb2dpY2FsX3JpbmdfaW5pdChkZXYsIHJpbmcpOwo+ICB9 Cj4gQEAgLTI1ODcsMyArMzAwNCwxMjcgQEAgdm9pZCBpbnRlbF9scl9jb250ZXh0X3Jlc2V0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJcmluZ2J1Zi0+dGFpbCA9IDA7Cj4gIAl9Cj4gIH0K PiArCj4gKy8qKgo+ICsgKiBpbnRlbF9leGVjbGlzdHNfVERSX2dldF9jdXJyZW50X3JlcXVlc3Qo KSAtIHJldHVybiByZXF1ZXN0IGN1cnJlbnRseQo+ICsgKiBwcm9jZXNzZWQgYnkgZW5naW5lCj4g KyAqCj4gKyAqIEByaW5nOiBFbmdpbmUgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dCB0byBiZSBy ZXR1cm5lZC4KPiArICoKPiArICogQHJlcTogIE91dHB1dCBwYXJhbWV0ZXIgY29udGFpbmluZyB0 aGUgY3VycmVudCByZXF1ZXN0ICh0aGUgcmVxdWVzdCBhdCB0aGUKPiArICoJICBoZWFkIG9mIGV4 ZWNsaXN0IHF1ZXVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHJpbmcpLiBNYXkgYmUgTlVM TAo+ICsgKgkgIGlmIG5vIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHRvIHRoZSBleGVjbGlz dCBxdWV1ZSBvZiB0aGlzCj4gKyAqCSAgZW5naW5lLiBJZiB0aGUgcmVxIHBhcmFtZXRlciBwYXNz ZWQgaW4gdG8gdGhlIGZ1bmN0aW9uIGlzIG5vdCBOVUxMCj4gKyAqCSAgYW5kIGEgcmVxdWVzdCBp cyBmb3VuZCBhbmQgcmV0dXJuZWQgdGhlIHJlcXVlc3QgaXMgcmVmZXJlbmNlZCBiZWZvcmUKPiAr ICoJICBpdCBpcyByZXR1cm5lZC4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxs ZXIgdG8gZGVyZWZlcmVuY2UKPiArICoJICBpdCBhdCB0aGUgZW5kIG9mIGl0cyBsaWZlIGN5Y2xl Lgo+ICsgKgo+ICsgKiBSZXR1cm46Cj4gKyAqCUNPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNfT0sg aWYgcmVxdWVzdCBpcyBmb3VuZCB0byBiZSBzdWJtaXR0ZWQgYW5kIGl0cwo+ICsgKgljb250ZXh0 IGlzIGN1cnJlbnRseSBydW5uaW5nIG9uIGVuZ2luZS4KPiArICoKPiArICoJQ09OVEVYVF9TVUJN SVNTSU9OX1NUQVRVU19JTkNPTlNJU1RFTlQgaWYgcmVxdWVzdCBpcyBmb3VuZCB0byBiZSBzdWJt aXR0ZWQKPiArICoJYnV0IGl0cyBjb250ZXh0IGlzIG5vdCBpbiBhIHN0YXRlIHRoYXQgaXMgY29u c2lzdGVudCB3aXRoIGN1cnJlbnQKPiArICoJaGFyZHdhcmUgc3RhdGUgZm9yIHRoZSBnaXZlbiBl bmdpbmUuIFRoaXMgaGFzIGJlZW4gb2JzZXJ2ZWQgaW4gdGhyZWUgY2FzZXM6Cj4gKyAqCj4gKyAq CQkxLiBCZWZvcmUgdGhlIGVuZ2luZSBoYXMgc3dpdGNoZWQgdG8gdGhpcyBjb250ZXh0IGFmdGVy IGl0IGhhcwo+ICsgKgkJYmVlbiBzdWJtaXR0ZWQgdG8gdGhlIGV4ZWNsaXN0IHF1ZXVlLgo+ICsg Kgo+ICsgKgkJMi4gQWZ0ZXIgdGhlIGVuZ2luZSBoYXMgc3dpdGNoZWQgYXdheSBmcm9tIHRoaXMg Y29udGV4dCBidXQKPiArICoJCWJlZm9yZSB0aGUgY29udGV4dCBoYXMgYmVlbiByZW1vdmVkIGZy b20gdGhlIGV4ZWNsaXN0IHF1ZXVlLgo+ICsgKgo+ICsgKgkJMy4gVGhlIGRyaXZlciBoYXMgbG9z dCBhbiBpbnRlcnJ1cHQuIFR5cGljYWxseSB0aGUgaGFyZHdhcmUgaGFzCj4gKyAqCQlnb25lIHRv IGlkbGUgYnV0IHRoZSBkcml2ZXIgc3RpbGwgdGhpbmtzIHRoZSBjb250ZXh0IGJlbG9uZ2luZyB0 bwo+ICsgKgkJdGhlIHJlcXVlc3QgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIGlzIHN0aWxsIGV4 ZWN1dGluZy4KPiArICoKPiArICoJQ09OVEVYVF9TVUJNSVNTSU9OX1NUQVRVU19OT05FX1NVQk1J VFRFRCBpZiBubyBjb250ZXh0IGhhcyBiZWVuIGZvdW5kCj4gKyAqCXRvIGJlIHN1Ym1pdHRlZCB0 byB0aGUgZXhlY2xpc3QgcXVldWUgYW5kIGlmIHRoZSBoYXJkd2FyZSBpcyBpZGxlLgo+ICsgKi8K PiArZW51bSBjb250ZXh0X3N1Ym1pc3Npb25fc3RhdHVzCj4gK2ludGVsX2V4ZWNsaXN0c19URFJf Z2V0X2N1cnJlbnRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICsJCXN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqKnJlcSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2Owo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCXN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqdG1wcmVxID0gTlVMTDsKPiArCXN0cnVjdCBpbnRlbF9jb250 ZXh0ICp0bXBjdHggPSBOVUxMOwo+ICsJdW5zaWduZWQgaHdfY29udGV4dCA9IDA7Cj4gKwl1bnNp Z25lZCBzd19jb250ZXh0ID0gMDsKPiArCWJvb2wgaHdfYWN0aXZlID0gZmFsc2U7Cj4gKwllbnVt IGNvbnRleHRfc3VibWlzc2lvbl9zdGF0dXMgc3RhdHVzID0KPiArCQkJQ09OVEVYVF9TVUJNSVNT SU9OX1NUQVRVU19VTkRFRklORUQ7Cj4gKwo+ICsJaWYgKFdBUk5fT04oIXJpbmcpKQo+ICsJCXJl dHVybiBzdGF0dXM7Cj4gKwo+ICsJZGV2X3ByaXYgPSByaW5nLT5kZXYtPmRldl9wcml2YXRlOwo+ ICsKPiArCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxM KTsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5leGVjbGlzdF9sb2NrLCBmbGFncyk7Cj4g Kwlod19jb250ZXh0ID0gSTkxNV9SRUFEKFJJTkdfRVhFQ0xJU1RfU1RBVFVTX0NUWF9JRChyaW5n KSk7Cj4gKwo+ICsJaHdfYWN0aXZlID0gKEk5MTVfUkVBRChSSU5HX0VYRUNMSVNUX1NUQVRVU19M TyhyaW5nKSkgJgo+ICsJCUVYRUNMSVNUX1NUQVRVU19DVVJSRU5UX0FDVElWRV9FTEVNRU5UX1NU QVRVUykgPyB0cnVlIDogZmFsc2U7Cj4gKwo+ICsJdG1wcmVxID0gbGlzdF9maXJzdF9lbnRyeV9v cl9udWxsKCZyaW5nLT5leGVjbGlzdF9xdWV1ZSwKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QsIGV4ZWNsaXN0X2xpbmspOwo+ICsKPiArCWlmICh0bXByZXEpIHsKPiArCQlzd19jb250 ZXh0ID0gaW50ZWxfZXhlY2xpc3RzX2N0eF9pZCgodG1wcmVxLT5jdHgpLT5lbmdpbmVbcmluZy0+ aWRdLnN0YXRlKTsKPiArCj4gKwkJLyoKPiArCQkgKiBPbmx5IGFja25vd2xlZGdlIHRoZSByZXF1 ZXN0IGluIHRoZSBleGVjbGlzdCBxdWV1ZSBpZiBpdCdzCj4gKwkJICogYWN0dWFsbHkgYmVlbiBz dWJtaXR0ZWQgdG8gaGFyZHdhcmUsIG90aGVyd2lzZSB0aGVyZSdzIHRoZQo+ICsJCSAqIHJpc2sg b2YgYSBmYWxzZSBpbmNvbnNpc3RlbmN5IGRldGVjdGlvbiBiZXR3ZWVuIHRoZQo+ICsJCSAqICh1 bnN1Ym1pdHRlZCkgcmVxdWVzdCBhbmQgdGhlIGlkbGUgaGFyZHdhcmUgc3RhdGUuCj4gKwkJICov Cj4gKwkJaWYgKHRtcHJlcS0+ZWxzcF9zdWJtaXR0ZWQgPiAwKSB7Cj4gKwkJCS8qCj4gKwkJCSAq IElmIHRoZSBjYWxsZXIgaGFzIG5vdCBwYXNzZWQgYSBub24tTlVMTCByZXEKPiArCQkJICogcGFy YW1ldGVyIHRoZW4gaXQgaXMgbm90IGludGVyZXN0ZWQgaW4gZ2V0dGluZyBhCj4gKwkJCSAqIHJl cXVlc3QgcmVmZXJlbmNlIGJhY2suICBEb24ndCB0ZW1wb3JhcmlseSBncmFiIGEKPiArCQkJICog cmVmZXJlbmNlIHNpbmNlIGhvbGRpbmcgdGhlIGV4ZWNsaXN0IGxvY2sgaXMgZW5vdWdoCj4gKwkJ CSAqIHRvIGVuc3VyZSB0aGF0IHRoZSBleGVjbGlzdCBjb2RlIHdpbGwgaG9sZCBpdHMKPiArCQkJ ICogcmVmZXJlbmNlIGFsbCB0aHJvdWdob3V0IHRoaXMgZnVuY3Rpb24uIEFzIGxvbmcgYXMKPiAr CQkJICogdGhhdCByZWZlcmVuY2UgaXMga2VwdCB0aGVyZSBpcyBubyBuZWVkIGZvciB1cyB0bwo+ ICsJCQkgKiB0YWtlIHlldCBhbm90aGVyIHJlZmVyZW5jZS4gIFRoZSByZWFzb24gd2h5IHRoaXMg aXMKPiArCQkJICogb2YgaW50ZXJlc3QgaXMgYmVjYXVzZSBjZXJ0YWluIGNhbGxlcnMsIHN1Y2gg YXMgdGhlCj4gKwkJCSAqIFREUiBoYW5nIGNoZWNrZXIsIGNhbm5vdCBncmFiIHN0cnVjdF9tdXRl eCBiZWZvcmUKPiArCQkJICogY2FsbGluZyBhbmQgYmVjYXVzZSBvZiB0aGF0IHdlIGNhbm5vdCBk ZXJlZmVyZW5jZQo+ICsJCQkgKiBhbnkgcmVxdWVzdHMgKERSTSBtaWdodCBhc3NlcnQgaWYgd2Ug ZG8pLiBKdXN0IHJlbHkKPiArCQkJICogb24gdGhlIGV4ZWNsaXN0IGNvZGUgdG8gcHJvdmlkZSBp bmRpcmVjdCBwcm90ZWN0aW9uLgo+ICsJCQkgKi8KPiArCQkJaWYgKHJlcSkKPiArCQkJCWk5MTVf Z2VtX3JlcXVlc3RfcmVmZXJlbmNlKHRtcHJlcSk7Cj4gKwo+ICsJCQlpZiAodG1wcmVxLT5jdHgp Cj4gKwkJCQl0bXBjdHggPSB0bXByZXEtPmN0eDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKHRt cGN0eCkgewo+ICsJCXN0YXR1cyA9ICgoaHdfY29udGV4dCA9PSBzd19jb250ZXh0KSAmJiBod19h Y3RpdmUpID8KPiArCQkJCUNPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNfT0sgOgo+ICsJCQkJQ09O VEVYVF9TVUJNSVNTSU9OX1NUQVRVU19JTkNPTlNJU1RFTlQ7Cj4gKwl9IGVsc2Ugewo+ICsJCS8q Cj4gKwkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgcXVldWUgZW50cmllcyBhbmQgdGhlCj4gKwkJ ICogRVhFQ0xJU1RfU1RBVFVTIHJlZ2lzdGVyIHBvaW50cyB0byB6ZXJvIHdlIGFyZQo+ICsJCSAq IGNsZWFybHkgbm90IHByb2Nlc3NpbmcgYW55IGNvbnRleHQgcmlnaHQgbm93Cj4gKwkJICovCj4g KwkJV0FSTigoaHdfY29udGV4dCB8fCBod19hY3RpdmUpLCAiaHdfY29udGV4dD0leCwgaGFyZHdh cmUgJXMhXG4iLAo+ICsJCQlod19jb250ZXh0LCBod19hY3RpdmUgPyAibm90IGlkbGUiOiJpZGxl Iik7Cj4gKwo+ICsJCXN0YXR1cyA9IChod19jb250ZXh0IHx8IGh3X2FjdGl2ZSkgPwo+ICsJCQlD T05URVhUX1NVQk1JU1NJT05fU1RBVFVTX0lOQ09OU0lTVEVOVCA6Cj4gKwkJCUNPTlRFWFRfU1VC TUlTU0lPTl9TVEFUVVNfTk9ORV9TVUJNSVRURUQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJlcSkKPiAr CQkqcmVxID0gdG1wcmVxOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmV4 ZWNsaXN0X2xvY2ssIGZsYWdzKTsKPiArCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9w cml2LCBGT1JDRVdBS0VfQUxMKTsKPiArCj4gKwlyZXR1cm4gc3RhdHVzOwo+ICt9Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmgKPiBpbmRleCBkZTQxYWQ2Li5kOWFjYjMxIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmgKPiBAQCAtMjksNyArMjksOSBAQAo+ICAvKiBFeGVjbGlzdHMgcmVn cyAqLwo+ICAjZGVmaW5lIFJJTkdfRUxTUChyaW5nKQkJCQlfTU1JTygocmluZyktPm1taW9fYmFz ZSArIDB4MjMwKQo+ICAjZGVmaW5lIFJJTkdfRVhFQ0xJU1RfU1RBVFVTX0xPKHJpbmcpCQlfTU1J TygocmluZyktPm1taW9fYmFzZSArIDB4MjM0KQo+ICsjZGVmaW5lCSAgRVhFQ0xJU1RfU1RBVFVT X0NVUlJFTlRfQUNUSVZFX0VMRU1FTlRfU1RBVFVTCSgweDMgPDwgMTQpCj4gICNkZWZpbmUgUklO R19FWEVDTElTVF9TVEFUVVNfSEkocmluZykJCV9NTUlPKChyaW5nKS0+bW1pb19iYXNlICsgMHgy MzQgKyA0KQo+ICsjZGVmaW5lIFJJTkdfRVhFQ0xJU1RfU1RBVFVTX0NUWF9JRChyaW5nKQlSSU5H X0VYRUNMSVNUX1NUQVRVU19ISShyaW5nKQo+ICAjZGVmaW5lIFJJTkdfQ09OVEVYVF9DT05UUk9M KHJpbmcpCQlfTU1JTygocmluZyktPm1taW9fYmFzZSArIDB4MjQ0KQo+ICAjZGVmaW5lCSAgQ1RY X0NUUkxfSU5ISUJJVF9TWU5fQ1RYX1NXSVRDSAkoMSA8PCAzKQo+ICAjZGVmaW5lCSAgQ1RYX0NU UkxfRU5HSU5FX0NUWF9SRVNUT1JFX0lOSElCSVQJKDEgPDwgMCkKPiBAQCAtMTE4LDQgKzEyMCwx NiBAQCB1MzIgaW50ZWxfZXhlY2xpc3RzX2N0eF9pZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqY3R4X29iaik7Cj4gIHZvaWQgaW50ZWxfbHJjX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKnJpbmcpOwo+ICB2b2lkIGludGVsX2V4ZWNsaXN0c19yZXRpcmVfcmVxdWVzdHMo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gIAo+ICtpbnQgaW50ZWxfZXhlY2xpc3Rz X3JlYWRfdGFpbChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICsJCQkgc3RydWN0IGlu dGVsX2NvbnRleHQgKmN0eCwKPiArCQkJIHUzMiAqdGFpbCk7Cj4gKwo+ICtpbnQgaW50ZWxfZXhl Y2xpc3RzX3dyaXRlX2hlYWQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiArCQkJICBz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+ICsJCQkgIHUzMiBoZWFkKTsKPiArCj4gK2ludCBp bnRlbF9leGVjbGlzdHNfcmVhZF9oZWFkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4g KwkJCSBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+ICsJCQkgdTMyICpoZWFkKTsKPiArCgoK Cj4gICNlbmRpZiAvKiBfSU5URUxfTFJDX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2xyY190ZHIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Y190ZHIuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNDUyMDc1Mwo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmNfdGRy LmgKPiBAQCAtMCwwICsxLDM2IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVs IENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUgo+ICsgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2lm bmRlZiBfSU5URUxfTFJDX1REUl9IXwo+ICsjZGVmaW5lIF9JTlRFTF9MUkNfVERSX0hfCj4gKwo+ ICsvKiBQcml2aWxlZ2VkIGV4ZWNsaXN0IEFQSSB1c2VkIGV4Y2x1c2l2ZWx5IGJ5IFREUiAqLwo+ ICsKPiArdm9pZCBpbnRlbF9leGVjbGlzdHNfVERSX2NvbnRleHRfcmVzdWJtaXNzaW9uKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+ICsKPiArZW51bSBjb250ZXh0X3N1Ym1pc3Npb25f c3RhdHVzCj4gK2ludGVsX2V4ZWNsaXN0c19URFJfZ2V0X2N1cnJlbnRfcmVxdWVzdChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq KnJlcSk7Cj4gKwo+ICsjZW5kaWYgLyogX0lOVEVMX0xSQ19URFJfSF8gKi8KPiArCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+IGluZGV4IDQwNjBhY2YuLmRlZjBkY2Yg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4gQEAgLTQzNCw2 ICs0MzQsODggQEAgc3RhdGljIHZvaWQgcmluZ193cml0ZV90YWlsKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcsCj4gIAlJOTE1X1dSSVRFX1RBSUwocmluZywgdmFsdWUpOwo+ICB9Cj4gIAo+ ICtpbnQgaW50ZWxfcmluZ19kaXNhYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4g K3sKPiArCVdBUk5fT04oIXJpbmcpOwo+ICsKPiArCWlmIChyaW5nICYmIHJpbmctPmRpc2FibGUp Cj4gKwkJcmV0dXJuIHJpbmctPmRpc2FibGUocmluZyk7Cj4gKwllbHNlIHsKPiArCQlEUk1fRVJS T1IoIlJpbmcgZGlzYWJsZSBub3Qgc3VwcG9ydGVkIG9uICVzXG4iLCByaW5nLT5uYW1lKTsKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArfQo+ICsKPiAraW50IGludGVsX3JpbmdfZW5hYmxl KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK3sKPiArCVdBUk5fT04oIXJpbmcpOwo+ ICsKPiArCWlmIChyaW5nICYmIHJpbmctPmVuYWJsZSkKPiArCQlyZXR1cm4gcmluZy0+ZW5hYmxl KHJpbmcpOwo+ICsJZWxzZSB7Cj4gKwkJRFJNX0VSUk9SKCJSaW5nIGVuYWJsZSBub3Qgc3VwcG9y dGVkIG9uICVzXG4iLCByaW5nLT5uYW1lKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiAr fQo+ICsKPiAraW50IGludGVsX3Jpbmdfc2F2ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5n LAo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+ICsJCWJvb2wgZm9yY2Vf YWR2YW5jZSkKPiArewo+ICsJV0FSTl9PTighcmluZyk7Cj4gKwo+ICsJaWYgKHJpbmcgJiYgcmlu Zy0+c2F2ZSkKPiArCQlyZXR1cm4gcmluZy0+c2F2ZShyaW5nLCByZXEsIGZvcmNlX2FkdmFuY2Up Owo+ICsJZWxzZSB7Cj4gKwkJRFJNX0VSUk9SKCJSaW5nIHNhdmUgbm90IHN1cHBvcnRlZCBvbiAl c1xuIiwgcmluZy0+bmFtZSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gK30KPiArCj4g K2ludCBpbnRlbF9yaW5nX3Jlc3RvcmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAr CQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiArewo+ICsJV0FSTl9PTighcmlu Zyk7Cj4gKwo+ICsJaWYgKHJpbmcgJiYgcmluZy0+cmVzdG9yZSkKPiArCQlyZXR1cm4gcmluZy0+ cmVzdG9yZShyaW5nLCByZXEpOwo+ICsJZWxzZSB7Cj4gKwkJRFJNX0VSUk9SKCJSaW5nIHJlc3Rv cmUgbm90IHN1cHBvcnRlZCBvbiAlc1xuIiwgcmluZy0+bmFtZSk7Cj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwl9Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfZ3B1X2VuZ2luZV9yZXNldF9yZXNhbXBs ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZjsK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKPiArCj4gKwlpZiAoV0FSTl9P TighcmluZykpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZf cHJpdmF0ZTsKPiArCj4gKwlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKSB7Cj4gKwkJc3RydWN0 IGludGVsX2NvbnRleHQgKmN0eDsKPiArCj4gKwkJaWYgKFdBUk5fT04oIXJlcSkpCj4gKwkJCXJl dHVybjsKPiArCj4gKwkJY3R4ID0gcmVxLT5jdHg7Cj4gKwkJcmluZ2J1ZiA9IGN0eC0+ZW5naW5l W3JpbmctPmlkXS5yaW5nYnVmOwo+ICsKPiArCQkvKgo+ICsJCSAqIEluIGdlbjgrIGNvbnRleHQg aGVhZCBpcyByZXN0b3JlZCBkdXJpbmcgcmVzZXQgYW5kCj4gKwkJICogd2UgY2FuIHVzZSBpdCBh cyBhIHJlZmVyZW5jZSB0byBzZXQgdXAgdGhlIG5ldwo+ICsJCSAqIGRyaXZlciBzdGF0ZS4KPiAr CQkgKi8KPiArCQlJOTE1X1JFQURfSEVBRF9DVFgocmluZywgY3R4LCByaW5nYnVmLT5oZWFkKTsK PiArCQlyaW5nYnVmLT5sYXN0X3JldGlyZWRfaGVhZCA9IC0xOwo+ICsJCWludGVsX3JpbmdfdXBk YXRlX3NwYWNlKHJpbmdidWYpOwo+ICsJfQo+ICt9Cj4gKwo+ICB1NjQgaW50ZWxfcmluZ19nZXRf YWN0aXZlX2hlYWQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAgewo+ICAJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiBA QCAtNjI5LDcgKzcxMSw3IEBAIHN0YXRpYyBpbnQgaW5pdF9yaW5nX2NvbW1vbihzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nKQo+ICAJcmluZ2J1Zi0+dGFpbCA9IEk5MTVfUkVBRF9UQUlMKHJp bmcpICYgVEFJTF9BRERSOwo+ICAJaW50ZWxfcmluZ191cGRhdGVfc3BhY2UocmluZ2J1Zik7Cj4g IAo+IC0JbWVtc2V0KCZyaW5nLT5oYW5nY2hlY2ssIDAsIHNpemVvZihyaW5nLT5oYW5nY2hlY2sp KTsKPiArCWk5MTVfaGFuZ2NoZWNrX3JlaW5pdChyaW5nKTsKPiAgCj4gIG91dDoKPiAgCWludGVs X3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gaW5kZXggNzM0OWQ5Mi4uNzAxNDc3OCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiBAQCAtNDksNiAr NDksMjIgQEAgc3RydWN0ICBpbnRlbF9od19zdGF0dXNfcGFnZSB7Cj4gICNkZWZpbmUgSTkxNV9S RUFEX01PREUocmluZykgSTkxNV9SRUFEKFJJTkdfTUlfTU9ERSgocmluZyktPm1taW9fYmFzZSkp Cj4gICNkZWZpbmUgSTkxNV9XUklURV9NT0RFKHJpbmcsIHZhbCkgSTkxNV9XUklURShSSU5HX01J X01PREUoKHJpbmcpLT5tbWlvX2Jhc2UpLCB2YWwpCj4gIAo+ICsKPiArI2RlZmluZSBJOTE1X1JF QURfVEFJTF9DVFgoZW5naW5lLCBjdHgsIG91dHZhbCkgXAo+ICsJaW50ZWxfZXhlY2xpc3RzX3Jl YWRfdGFpbCgoZW5naW5lKSwgXAo+ICsJCQkJKGN0eCksIFwKPiArCQkJCSYob3V0dmFsKSk7Cj4g Kwo+ICsjZGVmaW5lIEk5MTVfUkVBRF9IRUFEX0NUWChlbmdpbmUsIGN0eCwgb3V0dmFsKSBcCj4g KwlpbnRlbF9leGVjbGlzdHNfcmVhZF9oZWFkKChlbmdpbmUpLCBcCj4gKwkJCQkoY3R4KSwgXAo+ ICsJCQkJJihvdXR2YWwpKTsKPiArCj4gKyNkZWZpbmUgSTkxNV9XUklURV9IRUFEX0NUWChlbmdp bmUsIGN0eCwgdmFsKSBcCj4gKwlpbnRlbF9leGVjbGlzdHNfd3JpdGVfaGVhZCgoZW5naW5lKSwg XAo+ICsJCQkJKGN0eCksIFwKPiArCQkJCSh2YWwpKTsKPiArCgoKRG9uJ3Qgc2VlIHRoZSBiZW5l Zml0IG9mIGFsbCB0aGUgbWFjcm9zLgoKSWYgeW91IGxvb2sgYXQgbHJjX3JlZ19zdGF0ZSB3ZSBj YW4gdGhyb3cKbW9zdCBpZiBub3QgYWxsIHRoaXMgcmVnaXN0ZXIgcmVhZGluZy93cml0aW5nIGNv ZGUgb3V0LgoKCj4gIC8qIHNlcW5vIHNpemUgaXMgYWN0dWFsbHkgb25seSBhIHVpbnQzMiwgYnV0 IHNpbmNlIHdlIHBsYW4gdG8gdXNlIE1JX0ZMVVNIX0RXIHRvCj4gICAqIGRvIHRoZSB3cml0ZXMs IGFuZCB0aGF0IG11c3QgaGF2ZSBxdyBhbGlnbmVkIG9mZnNldHMsIHNpbXBseSBwcmV0ZW5kIGl0 J3MgOGIuCj4gICAqLwo+IEBAIC05NCw2ICsxMTAsMzQgQEAgc3RydWN0IGludGVsX3JpbmdfaGFu Z2NoZWNrIHsKPiAgCWVudW0gaW50ZWxfcmluZ19oYW5nY2hlY2tfYWN0aW9uIGFjdGlvbjsKPiAg CWludCBkZWFkbG9jazsKPiAgCXUzMiBpbnN0ZG9uZVtJOTE1X05VTV9JTlNURE9ORV9SRUddOwo+ ICsKPiArCS8qCj4gKwkgKiBMYXN0IHJlY29yZGVkIHJpbmcgaGVhZCBpbmRleC4KPiArCSAqIFRo aXMgaXMgb25seSBldmVyIGEgcmluZyBpbmRleCB3aGVyZSBhcyBhY3RpdmUKPiArCSAqIGhlYWQg bWF5IGJlIGEgZ3JhcGhpY3MgYWRkcmVzcyBpbiBhIHJpbmcgYnVmZmVyCj4gKwkgKi8KPiArCXUz MiBsYXN0X2hlYWQ7Cj4gKwo+ICsJLyogRmxhZyB0byBpbmRpY2F0ZSBpZiBlbmdpbmUgcmVzZXQg cmVxdWlyZWQgKi8KPiArCWF0b21pY190IGZsYWdzOwo+ICsKPiArCS8qIEluZGljYXRlcyByZXF1 ZXN0IHRvIHJlc2V0IHRoaXMgZW5naW5lICovCj4gKyNkZWZpbmUgSTkxNV9FTkdJTkVfUkVTRVRf SU5fUFJPR1JFU1MgKDE8PDApCj4gKwo+ICsJLyoKPiArCSAqIFRpbWVzdGFtcCAoc2Vjb25kcykg ZnJvbSB3aGVuIHRoZSBsYXN0IHRpbWUKPiArCSAqIHRoaXMgZW5naW5lIHdhcyByZXNldC4KPiAr CSAqLwo+ICsJdTMyIGxhc3RfZW5naW5lX3Jlc2V0X3RpbWU7Cj4gKwo+ICsJLyoKPiArCSAqIE51 bWJlciBvZiB0aW1lcyB0aGlzIGVuZ2luZSBoYXMgYmVlbgo+ICsJICogcmVzZXQgc2luY2UgYm9v dAo+ICsJICovCj4gKwl1MzIgcmVzZXRfY291bnQ7Cj4gKwo+ICsJLyogTnVtYmVyIG9mIFREUiBo YW5nIGRldGVjdGlvbnMgKi8KPiArCXUzMiB0ZHJfY291bnQ7Cj4gIH07Cj4gIAo+ICBzdHJ1Y3Qg aW50ZWxfcmluZ2J1ZmZlciB7Cj4gQEAgLTIwNSw2ICsyNDksMTQgQEAgc3RydWN0ICBpbnRlbF9l bmdpbmVfY3Mgewo+ICAjZGVmaW5lIEk5MTVfRElTUEFUQ0hfUlMgICAgIDB4NAo+ICAJdm9pZAkJ KCpjbGVhbnVwKShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKPiAgCj4gKwlpbnQgKCpl bmFibGUpKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+ICsJaW50ICgqZGlzYWJsZSko c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gKwlpbnQgKCpzYXZlKShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nLAo+ICsJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJlcSwKPiArCQkgICAgYm9vbCBmb3JjZV9hZHZhbmNlKTsKPiArCWludCAoKnJlc3RvcmUpKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gKwkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxKTsKPiArCj4gIAkvKiBHRU44IHNpZ25hbC93YWl0IHRhYmxlIC0gbmV2 ZXIgdHJ1c3QgY29tbWVudHMhCj4gIAkgKgkgIHNpZ25hbCB0bwlzaWduYWwgdG8gICAgc2lnbmFs IHRvICAgc2lnbmFsIHRvICAgICAgc2lnbmFsIHRvCj4gIAkgKgkgICAgUkNTCQkgICBWQ1MgICAg ICAgICAgQkNTICAgICAgICBWRUNTCQkgVkNTMgo+IEBAIC0zMTEsNiArMzYzLDkgQEAgc3RydWN0 ICBpbnRlbF9lbmdpbmVfY3Mgewo+ICAKPiAgCXN0cnVjdCBpbnRlbF9yaW5nX2hhbmdjaGVjayBo YW5nY2hlY2s7Cj4gIAo+ICsJLyogU2F2ZWQgaGVhZCB2YWx1ZSB0byBiZSByZXN0b3JlZCBhZnRl ciByZXNldCAqLwo+ICsJdTMyIHNhdmVkX2hlYWQ7Cj4gKwo+ICAJc3RydWN0IHsKPiAgCQlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICAJCXUzMiBndHRfb2Zmc2V0Owo+IEBAIC00 NjMsNiArNTE4LDE1IEBAIHZvaWQgaW50ZWxfcmluZ191cGRhdGVfc3BhY2Uoc3RydWN0IGludGVs X3JpbmdidWZmZXIgKnJpbmdidWYpOwo+ICBpbnQgaW50ZWxfcmluZ19zcGFjZShzdHJ1Y3QgaW50 ZWxfcmluZ2J1ZmZlciAqcmluZ2J1Zik7Cj4gIGJvb2wgaW50ZWxfcmluZ19zdG9wcGVkKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+ICAKPiArdm9pZCBpbnRlbF9ncHVfZW5naW5lX3Jl c2V0X3Jlc2FtcGxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gKwkJc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwo+ICtpbnQgaW50ZWxfcmluZ19kaXNhYmxlKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+ICtpbnQgaW50ZWxfcmluZ19lbmFibGUoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gK2ludCBpbnRlbF9yaW5nX3NhdmUoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZywKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJl cSwgYm9vbCBmb3JjZV9hZHZhbmNlKTsKPiAraW50IGludGVsX3JpbmdfcmVzdG9yZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxKTsKPiArCj4gIGludCBfX211c3RfY2hlY2sgaW50ZWxfcmluZ19pZGxlKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcpOwo+ICB2b2lkIGludGVsX3JpbmdfaW5pdF9zZXFubyhzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLCB1MzIgc2Vxbm8pOwo+ICBpbnQgaW50ZWxfcmluZ19mbHVz aF9hbGxfY2FjaGVzKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF91bmNvcmUuYwo+IGluZGV4IDJkZjQyNDYuLmYyMDU0OGMgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYwo+IEBAIC0xNjIzLDYgKzE2MjMsMTUzIEBAIGJv b2wgaW50ZWxfaGFzX2dwdV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJcmV0dXJu IGludGVsX2dldF9ncHVfcmVzZXQoZGV2KSAhPSBOVUxMOwo+ICB9Cj4gIAo+ICtzdGF0aWMgaW5s aW5lIGludCB3YWl0X2Zvcl9lbmdpbmVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+ICsJCXVuc2lnbmVkIGludCBncmRvbSkKPiArewoKTm8gbmVlZCB0byBpbmxpbmUK Cj4gKyNkZWZpbmUgX0NORCAoKF9fcmF3X2k5MTVfcmVhZDMyKGRldl9wcml2LCBHRU42X0dEUlNU KSAmIGdyZG9tKSA9PSAwKQo+ICsKPiArCS8qCj4gKwkgKiBTcGluIHdhaXRpbmcgZm9yIHRoZSBk ZXZpY2UgdG8gYWNrIHRoZSByZXNldCByZXF1ZXN0Lgo+ICsJICogVGltZXMgb3V0IGFmdGVyIDUw MCB1cwo+ICsJICogKi8KPiArCXJldHVybiB3YWl0X2Zvcl9hdG9taWNfdXMoX0NORCwgNTAwKTsK PiArCj4gKyN1bmRlZiBfQ05ECj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZG9fZW5naW5lX3Jlc2V0 X25vbG9jayhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCWludCByZXQg PSAtRU5PREVWOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5l LT5kZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWFzc2VydF9zcGluX2xvY2tlZCgmZGV2X3ByaXYt PnVuY29yZS5sb2NrKTsKPiArCj4gKwlzd2l0Y2ggKGVuZ2luZS0+aWQpIHsKPiArCWNhc2UgUkNT Ogo+ICsJCV9fcmF3X2k5MTVfd3JpdGUzMihkZXZfcHJpdiwgR0VONl9HRFJTVCwgR0VONl9HUkRP TV9SRU5ERVIpOwo+ICsJCWVuZ2luZS0+aGFuZ2NoZWNrLnJlc2V0X2NvdW50Kys7Cj4gKwkJcmV0 ID0gd2FpdF9mb3JfZW5naW5lX3Jlc2V0KGRldl9wcml2LCBHRU42X0dSRE9NX1JFTkRFUik7Cj4g KwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBCQ1M6Cj4gKwkJX19yYXdfaTkxNV93cml0ZTMyKGRldl9w cml2LCBHRU42X0dEUlNULCBHRU42X0dSRE9NX0JMVCk7Cj4gKwkJZW5naW5lLT5oYW5nY2hlY2su cmVzZXRfY291bnQrKzsKPiArCQlyZXQgPSB3YWl0X2Zvcl9lbmdpbmVfcmVzZXQoZGV2X3ByaXYs IEdFTjZfR1JET01fQkxUKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFZDUzoKPiArCQlfX3Jh d19pOTE1X3dyaXRlMzIoZGV2X3ByaXYsIEdFTjZfR0RSU1QsIEdFTjZfR1JET01fTUVESUEpOwo+ ICsJCWVuZ2luZS0+aGFuZ2NoZWNrLnJlc2V0X2NvdW50Kys7Cj4gKwkJcmV0ID0gd2FpdF9mb3Jf ZW5naW5lX3Jlc2V0KGRldl9wcml2LCBHRU42X0dSRE9NX01FRElBKTsKPiArCQlicmVhazsKPiAr Cj4gKwljYXNlIFZFQ1M6Cj4gKwkJX19yYXdfaTkxNV93cml0ZTMyKGRldl9wcml2LCBHRU42X0dE UlNULCBHRU42X0dSRE9NX1ZFQ1MpOwo+ICsJCWVuZ2luZS0+aGFuZ2NoZWNrLnJlc2V0X2NvdW50 Kys7Cj4gKwkJcmV0ID0gd2FpdF9mb3JfZW5naW5lX3Jlc2V0KGRldl9wcml2LCBHRU42X0dSRE9N X1ZFQ1MpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgVkNTMjoKPiArCQlfX3Jhd19pOTE1X3dy aXRlMzIoZGV2X3ByaXYsIEdFTjZfR0RSU1QsIEdFTjhfR1JET01fTUVESUEyKTsKPiArCQllbmdp bmUtPmhhbmdjaGVjay5yZXNldF9jb3VudCsrOwo+ICsJCXJldCA9IHdhaXRfZm9yX2VuZ2luZV9y ZXNldChkZXZfcHJpdiwgR0VOOF9HUkRPTV9NRURJQTIpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWRl ZmF1bHQ6Cj4gKwkJRFJNX0VSUk9SKCJVbmV4cGVjdGVkIGVuZ2luZTogJWRcbiIsIGVuZ2luZS0+ aWQpOwo+ICsJCWJyZWFrOwo+ICsJfQoKICBpbnQgbWFza1tOVU1fUklOR1NdID0geyBHRU42X0dS RE9NX1JFTkRFUiwgR0VONl9HRFJPTV9CTFQuLi59OwogIAogIGlmIChXQVJOX09OX09OQ0UoIWVu Z2luZS0+aW5pdGlhbGl6ZWQpKQogICAgcmV0dXJuOyAgICAgICAKICAKICBfX3Jhd19pOTE1X3dy aXRlKGRldl9wcml2LCBtYXNrW2VuZ2luZS0+aWRdKTsKICBlbmdpbmUtPmhhbmdjaGVjay5yZXNl dF9jb3VudCsrOwogIHJldCA9IHdhaXRfZm9yX2VuZ2luZV9yZXNldChkZXZfcHJpdiwgbWFza1tl bmdpbmUtPmlkXSk7CgoKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGdlbjhfZG9fZW5naW5lX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAr ewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuZ2luZS0+ZGV2Owo+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCWludCByZXQg PSAtRU5PREVWOwo+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiArCj4gKwlzcGluX2xvY2tf aXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gKwlyZXQgPSBkb19l bmdpbmVfcmVzZXRfbm9sb2NrKGVuZ2luZSk7Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZk ZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKPiArCj4gKwlpZiAoIXJldCkgewo+ICsJ CXUzMiByZXNldF9jdGwgPSAwOwo+ICsKPiArCQkvKgo+ICsJCSAqIENvbmZpcm0gdGhhdCByZXNl dCBjb250cm9sIHJlZ2lzdGVyIGJhY2sgdG8gbm9ybWFsCj4gKwkJICogZm9sbG93aW5nIHRoZSBy ZXNldC4KPiArCQkgKi8KPiArCQlyZXNldF9jdGwgPSBJOTE1X1JFQUQoUklOR19SRVNFVF9DVEwo ZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiArCQlXQVJOKHJlc2V0X2N0bCAmIDB4MywgIlJlc2V0IGNv bnRyb2wgc3RpbGwgYWN0aXZlIGFmdGVyIHJlc2V0ISAoMHglMDh4KVxuIiwKPiArCQkJcmVzZXRf Y3RsKTsKPiArCX0gZWxzZSB7Cj4gKwkJRFJNX0VSUk9SKCJFbmdpbmUgcmVzZXQgZmFpbGVkISAo JWQpXG4iLCByZXQpOwo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK2ludCBp bnRlbF9ncHVfZW5naW5lX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAr ewo+ICsJLyogUmVzZXQgYW4gaW5kaXZpZHVhbCBlbmdpbmUgKi8KPiArCWludCByZXQgPSAtRU5P REVWOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuZ2luZS0+ZGV2Owo+ICsKPiArCXN3 aXRjaCAoSU5URUxfSU5GTyhkZXYpLT5nZW4pIHsKCllvdSBjYW4gcGFzcyBkZXZfcHJpdiB0byBJ TlRFTF9JTkZPIGFsc28sIGFuZCBwcmVmZXIgdG8gZG8gc28gaW4gaGVyZQphbmQgcmVzdCBvZiB0 aGUgY29kZS4KCj4gKwljYXNlIDg6CmNhc2UgOTogPwoKVGhhbmtzLAotTWlrYQoKPiArCQlyZXQg PSBnZW44X2RvX2VuZ2luZV9yZXNldChlbmdpbmUpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoK PiArCQlEUk1fRVJST1IoIlBlciBFbmdpbmUgUmVzZXQgbm90IHN1cHBvcnRlZCBvbiBHZW4lZFxu IiwKPiArCQkJICBJTlRFTF9JTkZPKGRldiktPmdlbik7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoKPiArICogT24gZ2VuOCsgYSByZXNldCByZXF1 ZXN0IGhhcyB0byBiZSBpc3N1ZWQgdmlhIHRoZSByZXNldCBjb250cm9sIHJlZ2lzdGVyCj4gKyAq IGJlZm9yZSBhIEdQVSBlbmdpbmUgY2FuIGJlIHJlc2V0IGluIG9yZGVyIHRvIHN0b3AgdGhlIGNv bW1hbmQgc3RyZWFtZXIKPiArICogYW5kIGlkbGUgdGhlIGVuZ2luZS4gVGhpcyByZXBsYWNlcyB0 aGUgbGVnYWN5IHdheSBvZiBzdG9wcGluZyBhbiBlbmdpbmUKPiArICogYnkgd3JpdGluZyB0byB0 aGUgc3RvcCByaW5nIGJpdCBpbiB0aGUgTUlfTU9ERSByZWdpc3Rlci4KPiArICovCj4gK2ludCBp bnRlbF9yZXF1ZXN0X2dwdV9lbmdpbmVfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+ICt7Cj4gKwkvKiBSZXF1ZXN0IHJlc2V0IGZvciBhbiBpbmRpdmlkdWFsIGVuZ2luZSAq Lwo+ICsJaW50IHJldCA9IC1FTk9ERVY7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5n aW5lLT5kZXY7Cj4gKwo+ICsJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDgpCj4gKwkJcmV0 ID0gZ2VuOF9yZXF1ZXN0X2VuZ2luZV9yZXNldChlbmdpbmUpOwo+ICsJZWxzZQo+ICsJCURSTV9F UlJPUigiUmVzZXQgcmVxdWVzdCBub3Qgc3VwcG9ydGVkIG9uIEdlbiVkXG4iLAo+ICsJCQkgIElO VEVMX0lORk8oZGV2KS0+Z2VuKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKgo+ ICsgKiBJdCBpcyBwb3NzaWJsZSB0byBiYWNrIG9mZiBmcm9tIGEgcHJldmlvdXNseSBpc3N1ZWQg cmVzZXQgcmVxdWVzdCBieSBzaW1wbHkKPiArICogY2xlYXJpbmcgdGhlIHJlc2V0IHJlcXVlc3Qg Yml0IGluIHRoZSByZXNldCBjb250cm9sIHJlZ2lzdGVyLgo+ICsgKi8KPiAraW50IGludGVsX3Vu cmVxdWVzdF9ncHVfZW5naW5lX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiArewo+ICsJLyogUm9sbCBiYWNrIHJlc2V0IHJlcXVlc3QgZm9yIGFuIGluZGl2aWR1YWwgZW5n aW5lICovCj4gKwlpbnQgcmV0ID0gLUVOT0RFVjsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBlbmdpbmUtPmRldjsKPiArCj4gKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOCkKPiAr CQlyZXQgPSBnZW44X3VucmVxdWVzdF9lbmdpbmVfcmVzZXQoZW5naW5lKTsKPiArCWVsc2UKPiAr CQlEUk1fRVJST1IoIlJlc2V0IHVucmVxdWVzdCBub3Qgc3VwcG9ydGVkIG9uIEdlbiVkXG4iLAo+ ICsJCQkgIElOVEVMX0lORk8oZGV2KS0+Z2VuKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICBib29sIGludGVsX3VuY29yZV91bmNsYWltZWRfbW1pbyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAgCXJldHVybiBjaGVja19mb3JfdW5jbGFpbWVkX21taW8o ZGV2X3ByaXYpOwo+IC0tIAo+IDEuOS4xCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg==