From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v6 06/34] drm/i915: Start of GPU scheduler Date: Fri, 10 Jun 2016 17:24:08 +0100 Message-ID: <575AE9A8.8090501@linux.intel.com> References: <1461172435-4256-1-git-send-email-John.C.Harrison@Intel.com> <1461172435-4256-7-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id E86A36E167 for ; Fri, 10 Jun 2016 16:24:11 +0000 (UTC) In-Reply-To: <1461172435-4256-7-git-send-email-John.C.Harrison@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: John.C.Harrison@Intel.com, Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKSnVzdCBhIGZldyByYW5kb20gY29tbWVudHMvcXVlc3Rpb25zLiAobm90IGEgZnVsbCBy ZXZpZXchKQoKT24gMjAvMDQvMTYgMTg6MTMsIEpvaG4uQy5IYXJyaXNvbkBJbnRlbC5jb20gd3Jv dGU6Cj4gRnJvbTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KPgo+ IEluaXRpYWwgY3JlYXRpb24gb2Ygc2NoZWR1bGVyIHNvdXJjZSBmaWxlcy4gTm90ZSB0aGF0IHRo aXMgcGF0Y2gKPiBpbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIHNjaGVkdWxlciBmdW5jdGlvbmFsaXR5 IGJ1dCBkb2VzIG5vdCBob29rIGl0IGluCj4gdG8gdGhlIGRyaXZlciB5ZXQuIEl0IGFsc28gbGVh dmVzIHRoZSBzY2hlZHVsZXIgY29kZSBpbiAncGFzcyB0aHJvdWdoJwo+IG1vZGUgc28gdGhhdCBl dmVuIHdoZW4gaXQgaXMgaG9va2VkIGluLCBpdCB3aWxsIG5vdCBhY3R1YWxseSBkbyB2ZXJ5Cj4g bXVjaC4gVGhpcyBhbGxvd3MgdGhlIGhvb2tzIHRvIGJlIGFkZGVkIG9uZSBhdCBhIHRpbWUgaW4g Yml0ZSBzaXplCj4gY2h1bmtzIGFuZCBvbmx5IHdoZW4gdGhlIHNjaGVkdWxlciBpcyBmaW5hbGx5 IGVuYWJsZWQgYXQgdGhlIGVuZCBkb2VzCj4gYW55dGhpbmcgc3RhcnQgaGFwcGVuaW5nLgo+Cj4g VGhlIGdlbmVyYWwgdGhlb3J5IG9mIG9wZXJhdGlvbiBpcyB0aGF0IHdoZW4gYmF0Y2ggYnVmZmVy cyBhcmUKPiBzdWJtaXR0ZWQgdG8gdGhlIGRyaXZlciwgdGhlIGV4ZWNidWZmZXIoKSBjb2RlIHBh Y2thZ2VzIHVwIGFsbCB0aGUKPiBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBleGVjdXRlIHRoZSBi YXRjaCBidWZmZXIgYXQgYSBsYXRlciB0aW1lLiBUaGlzCj4gcGFja2FnZSBpcyBnaXZlbiBvdmVy IHRvIHRoZSBzY2hlZHVsZXIgd2hpY2ggYWRkcyBpdCB0byBhbiBpbnRlcm5hbAo+IG5vZGUgbGlz dC4gVGhlIHNjaGVkdWxlciBhbHNvIHNjYW5zIHRoZSBsaXN0IG9mIG9iamVjdHMgYXNzb2NpYXRl ZAo+IHdpdGggdGhlIGJhdGNoIGJ1ZmZlciBhbmQgY29tcGFyZXMgdGhlbSBhZ2FpbnN0IHRoZSBv YmplY3RzIGFscmVhZHkgaW4KPiB1c2UgYnkgb3RoZXIgYnVmZmVycyBpbiB0aGUgbm9kZSBsaXN0 LiBJZiBtYXRjaGVzIGFyZSBmb3VuZCB0aGVuIHRoZQo+IG5ldyBiYXRjaCBidWZmZXIgbm9kZSBp cyBtYXJrZWQgYXMgYmVpbmcgZGVwZW5kZW50IHVwb24gdGhlIG1hdGNoaW5nCj4gbm9kZS4gVGhl IHNhbWUgaXMgZG9uZSBmb3IgdGhlIGNvbnRleHQgb2JqZWN0LiBUaGUgc2NoZWR1bGVyIGFsc28K PiBidW1wcyB1cCB0aGUgcHJpb3JpdHkgb2Ygc3VjaCBtYXRjaGluZyBub2RlcyBvbiB0aGUgZ3Jv dW5kcyB0aGF0IHRoZQo+IG1vcmUgZGVwZW5kZW5jaWVzIGEgZ2l2ZW4gYmF0Y2ggYnVmZmVyIGhh cyB0aGUgbW9yZSBpbXBvcnRhbnQgaXQgaXMKPiBsaWtlbHkgdG8gYmUuCj4KPiBUaGUgc2NoZWR1 bGVyIGFpbXMgdG8gaGF2ZSBhIGdpdmVuICh0dW5lYWJsZSkgbnVtYmVyIG9mIGJhdGNoIGJ1ZmZl cnMKPiBpbiBmbGlnaHQgb24gdGhlIGhhcmR3YXJlIGF0IGFueSBnaXZlbiB0aW1lLiBJZiBmZXdl ciB0aGFuIHRoaXMgYXJlCj4gY3VycmVudGx5IGV4ZWN1dGluZyB3aGVuIGEgbmV3IG5vZGUgaXMg cXVldWVkLCB0aGVuIHRoZSBub2RlIGlzIHBhc3NlZAo+IHN0cmFpZ2h0IHRocm91Z2ggdG8gdGhl IHN1Ym1pdCBmdW5jdGlvbi4gT3RoZXJ3aXNlIGl0IGlzIHNpbXBseSBhZGRlZAo+IHRvIHRoZSBx dWV1ZSBhbmQgdGhlIGRyaXZlciByZXR1cm5zIGJhY2sgdG8gdXNlciBsYW5kLgo+Cj4gVGhlIHNj aGVkdWxlciBpcyBub3RpZmllZCB3aGVuIGVhY2ggYmF0Y2ggYnVmZmVyIGNvbXBsZXRlcyBhbmQg dXBkYXRlcwo+IGl0cyBpbnRlcm5hbCB0cmFja2luZyBhY2NvcmRpbmdseS4gQXQgdGhlIGVuZCBv ZiB0aGUgY29tcGxldGlvbgo+IGludGVycnVwdCBwcm9jZXNzaW5nLCBpZiBhbnkgc2NoZWR1bGVy IHRyYWNrZWQgYmF0Y2hlcyB3ZXJlIHByb2Nlc3NlZCwKPiB0aGUgc2NoZWR1bGVyJ3MgZGVmZXJy ZWQgd29ya2VyIHRocmVhZCBpcyB3b2tlbiB1cC4gVGhpcyBjYW4gZG8gbW9yZQo+IGludm9sdmVk IHByb2Nlc3Npbmcgc3VjaCBhcyBhY3R1YWxseSByZW1vdmluZyBjb21wbGV0ZWQgbm9kZXMgZnJv bSB0aGUKPiBxdWV1ZSBhbmQgZnJlZWluZyB1cCB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0 aCB0aGVtIChpbnRlcm5hbAo+IG1lbW9yeSBhbGxvY2F0aW9ucywgRFJNIG9iamVjdCByZWZlcmVu Y2VzLCBjb250ZXh0IHJlZmVyZW5jZSwgZXRjLikuCj4gVGhlIHdvcmsgaGFuZGxlciBhbHNvIGNo ZWNrcyB0aGUgaW4gZmxpZ2h0IGNvdW50IGFuZCBjYWxscyB0aGUKPiBzdWJtaXNzaW9uIGNvZGUg aWYgYSBuZXcgc2xvdCBoYXMgYXBwZWFyZWQuCj4KPiBXaGVuIHRoZSBzY2hlZHVsZXIncyBzdWJt aXQgY29kZSBpcyBjYWxsZWQsIGl0IHNjYW5zIHRoZSBxdWV1ZWQgbm9kZQo+IGxpc3QgZm9yIHRo ZSBoaWdoZXN0IHByaW9yaXR5IG5vZGUgdGhhdCBoYXMgbm8gdW5tZXQgZGVwZW5kZW5jaWVzLgo+ IE5vdGUgdGhhdCB0aGUgZGVwZW5kZW5jeSBjYWxjdWxhdGlvbiBpcyBjb21wbGV4IGFzIGl0IG11 c3QgdGFrZQo+IGludGVyLXJpbmcgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgcHJlZW1wdGlv bnMgaW50byBhY2NvdW50LiBOb3RlCj4gYWxzbyB0aGF0IGluIHRoZSBmdXR1cmUgdGhpcyB3aWxs IGJlIGV4dGVuZGVkIHRvIGluY2x1ZGUgZXh0ZXJuYWwKPiBkZXBlbmRlbmNpZXMgc3VjaCBhcyB0 aGUgQW5kcm9pZCBOYXRpdmUgU3luYyBmaWxlIGRlc2NyaXB0b3JzIGFuZC9vcgo+IHRoZSBsaW51 eCBkbWEtYnVmZiBzeW5jaHJvbmlzYXRpb24gc2NoZW1lLgo+Cj4gSWYgYSBzdWl0YWJsZSBub2Rl IGlzIGZvdW5kIHRoZW4gaXQgaXMgc2VudCB0byBleGVjYnVmZl9maW5hbCgpIGZvcgo+IHN1Ym1p c3Npb24gdG8gdGhlIGhhcmR3YXJlLiBUaGUgaW4gZmxpZ2h0IGNvdW50IGlzIHRoZW4gcmUtY2hl Y2tlZCBhbmQKPiBhIG5ldyBub2RlIHBvcHBlZCBmcm9tIHRoZSBsaXN0IGlmIGFwcHJvcHJpYXRl LiBBbGwgbm9kZXMgdGhhdCBhcmUgbm90Cj4gc3VibWl0dGVkIGhhdmUgdGhlaXIgcHJpb3JpdHkg YnVtcGVkLiBUaGlzIGVuc3VyZXMgdGhhdCBsb3cgcHJpb3JpdHkKPiB0YXNrcyBkbyBub3QgZ2V0 IHN0YXJ2ZWQgb3V0IGJ5IGJ1c3kgaGlnaGVyIHByaW9yaXR5IG9uZXMgLSBldmVyeXRoaW5nCj4g d2lsbCBldmVudHVhbGx5IGdldCBpdHMgdHVybiB0byBydW4uCj4KPiBOb3RlIHRoYXQgdGhpcyBw YXRjaCBkb2VzIG5vdCBpbXBsZW1lbnQgcHJlLWVtcHRpdmUgc2NoZWR1bGluZy4gT25seQo+IGJh c2ljIHNjaGVkdWxpbmcgYnkgcmUtb3JkZXJpbmcgYmF0Y2ggYnVmZmVyIHN1Ym1pc3Npb24gaXMg Y3VycmVudGx5Cj4gaW1wbGVtZW50ZWQuIFByZS1lbXB0aW9uIG9mIGFjdGl2ZWx5IGV4ZWN1dGlu ZyBiYXRjaCBidWZmZXJzIGNvbWVzIGluCj4gdGhlIG5leHQgcGF0Y2ggc2VyaWVzLgo+Cj4gdjI6 IENoYW5nZWQgcHJpb3JpdHkgbGV2ZWxzIHRvICsvLTEwMjMgZHVlIHRvIGZlZWRiYWNrIGZyb20g Q2hyaXMKPiBXaWxzb24uCj4KPiBSZW1vdmVkIHJlZHVuZGFudCBpbmRleCBmcm9tIHNjaGVkdWxl ciBub2RlLgo+Cj4gQ2hhbmdlZCB0aW1lIHN0YW1wcyB0byB1c2UgamlmZmllcyBpbnN0ZWFkIG9m IHJhdyBtb25vdG9uaWMuIFRoaXMKPiBwcm92aWRlcyBsb3dlciByZXNvbHV0aW9uIGJ1dCBpbXBy b3ZlZCBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaTkxNQo+IGNvZGUuCj4KPiBNYWpvciByZS13 cml0ZSBvZiBjb21wbGV0aW9uIHRyYWNraW5nIGNvZGUgZHVlIHRvIHN0cnVjdCBmZW5jZQo+IGNv bnZlcnNpb24uIFRoZSBzY2hlZHVsZXIgbm8gbG9uZ2VyIGhhcyBpdCdzIG93biBwcml2YXRlIElS USBoYW5kbGVyCj4gYnV0IGp1c3QgbGV0cyB0aGUgZXhpc3RpbmcgcmVxdWVzdCBjb2RlIGhhbmRs ZSBjb21wbGV0aW9uIGV2ZW50cy4KPiBJbnN0ZWFkLCB0aGUgc2NoZWR1bGVyIG5vdyBob29rcyBp bnRvIHRoZSByZXF1ZXN0IG5vdGlmeSBjb2RlIHRvIGJlCj4gdG9sZCB3aGVuIGEgcmVxdWVzdCBo YXMgY29tcGxldGVkLgo+Cj4gUmVkdWNlZCBkcml2ZXIgbXV0ZXggbG9ja2luZyBzY29wZS4gUmVt b3ZhbCBvZiBzY2hlZHVsZXIgbm9kZXMgbm8KPiBsb25nZXIgZ3JhYnMgdGhlIG11dGV4IGxvY2su Cj4KPiB2MzogUmVmYWN0b3Igb2YgZGVwZW5kZW5jeSBnZW5lcmF0aW9uIHRvIG1ha2UgdGhlIGNv ZGUgbW9yZSByZWFkYWJsZS4KPiBBbHNvIGFkZGVkIGluIHJlYWQtcmVhZCBvcHRpbWlzYXRpb24g c3VwcG9ydCAtIGkuZS4sIGRvbid0IHRyZWF0IGEKPiBzaGFyZWQgcmVhZC1vbmx5IGJ1ZmZlciBh cyBiZWluZyBhIGRlcGVuZGVuY3kuCj4KPiBBbGxvd2VkIHRoZSBraWxsaW5nIG9mIHF1ZXVlZCBu b2RlcyByYXRoZXIgdGhhbiBvbmx5IGZseWluZyBvbmVzLgo+Cj4gdjQ6IFVwZGF0ZWQgdGhlIGNv bW1pdCBtZXNzYWdlIHRvIGJldHRlciByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mCj4gdGhl IGNvZGUuIERvd25ncmFkZWQgc29tZSBCVUdfT05zIHRvIFdBUk5fT05zLiBVc2VkIHRoZSBjb3Jy ZWN0IGFycmF5Cj4gbWVtb3J5IGFsbG9jYXRvciBmdW5jdGlvbiAoa21hbGxvY19hcnJheSBpbnN0 ZWFkIG9mIGttYWxsb2MpLgo+IENvcnJlY3RlZCB0aGUgZm9ybWF0IG9mIHNvbWUgY29tbWVudHMu IFdyYXBwZWQgc29tZSBsaW5lcyBkaWZmZXJlbnRseQo+IHRvIGtlZXAgdGhlIHN0eWxlIGNoZWNr ZXIgaGFwcHkuCj4KPiBGaXhlZCBhIFdBUk5fT04gd2hlbiBraWxsaW5nIG5vZGVzLiBUaGUgZGVw ZW5kZW5jeSByZW1vdmFsIGNvZGUgY2hlY2tzCj4gdGhhdCBub2RlcyBiZWluZyBkZXN0cm95ZWQg ZG8gbm90IGhhdmUgYW55IG91c3RhbmRpbmcgZGVwZW5kZW5jaWVzCj4gKHdoaWNoIHdvdWxkIGlt cGx5IHRoZXkgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZXhlY3V0ZWQgeWV0KS4gSW4gdGhlCj4gY2Fz ZSBvZiBub2RlcyBiZWluZyBkZXN0cm95ZWQsIGUuZy4gZHVlIHRvIGNvbnRleHQgYmFubmluZywg dGhlbiB0aGlzCj4gbWlnaHQgd2VsbCBiZSB0aGUgY2FzZSAtIHRoZXkgaGF2ZSBub3QgYmVlbiBl eGVjdXRlZCBhbmQgZG8gaW5kZWVkCj4gaGF2ZSBvdXRzdGFuZGluZyBkZXBlbmRlbmNpZXMuCj4K PiBSZS1pbnN0YXRlZCB0aGUgY29kZSB0byBkaXNibGUgaW50ZXJydXB0cyB3aGVuIG5vdCBpbiB1 c2UuIFRoZQo+IHVuZGVybHlpbmcgcHJvYmxlbSBjYXVzaW5nIGJyb2tlbiBJUlEgcmVmZXJlbmNl IGNvdW50cyBzZWVtcyB0byBoYXZlCj4gYmVlbiBmaXhlZCBub3cuCj4KPiB2NTogU2h1ZmZsZWQg dmFyaW91cyBmdW5jdGlvbnMgYXJvdW5kIHRvIHJlbW92ZSBmb3J3YXJkIGRlY2xhcmF0aW9ucwo+ IGFzIGFwcGFyZW50bHkgdGhlc2UgYXJlIGZyb3duZWQgdXBvbi4gUmVtb3ZlZCBsb3RzIG9mIHdo aXRlIHNwYWNlIGFzCj4gYXBwYXJlbnRseSBoYXZpbmcgZWFzeSB0byByZWFkIGNvZGUgaXMgYWxz byBmcm93bmVkIHVwb24uIFNwbGl0IHRoZQo+IGRpcmVjdCBzdWJtaXNzaW9uIHNjaGVkdWxlciBi eXBhc3MgY29kZSBvdXQgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uLgo+IFNxdWFzaGVkIGRvd24g dGhlIGk5MTVfc2NoZWR1bGVyLmMgc2VjdGlvbnMgb2YgdmFyaW91cyBwYXRjaGVzIGludG8KPiB0 aGlzIHBhdGNoLiBUaHVzIHRoZSBsYXRlciBwYXRjaGVzIHNpbXBseSBob29rIGluIGV4aXN0aW5n IGNvZGUgaW50bwo+IHZhcmlvdXMgcGFydHMgb2YgdGhlIGRyaXZlciByYXRoZXIgdGhhbiBhZGRp bmcgdGhlIGNvZGUgYXMgd2VsbC4gQWRkZWQKPiBkb2N1bWVudGF0aW9uIHRvIHZhcmlvdXMgZnVu Y3Rpb25zLiBSZS13b3JrZWQgdGhlIHN1Ym1pdCBmdW5jdGlvbiBpbgo+IHRlcm1zIG9mIG11dGV4 IGxvY2tpbmcsIGVycm9yIGhhbmRsaW5nIGFuZCBleGl0IHBhdGhzLiBTcGxpdCB0aGUKPiBkZWxh eWVkIHdvcmsgaGFuZGxlciBmdW5jdGlvbiBpbiBoYWxmLiBNYWRlIHVzZSBvZiB0aGUga2VybmVs ICdjbGFtcCcKPiBtYWNyby4gW0pvb25hcyBMYWh0aW5lbl0KPgo+IEFkZGVkIHJ1bnRpbWUgUE0g Y2FsbHMgYXMgdGhlc2UgbXVzdCBiZSBkb25lIGF0IHRoZSB0b3AgbGV2ZWwgYmVmb3JlCj4gYWNx dWlyaW5nIHRoZSBkcml2ZXIgbXV0ZXggbG9jay4gW0NocmlzIFdpbHNvbl0KPgo+IFJlbW92ZWQg c29tZSBvYnNvbGV0ZSBkZWJ1ZyBjb2RlIHRoYXQgaGFkIGJlZW4gZm9yZ290dGVuIGFib3V0Lgo+ Cj4gTW92ZWQgbW9yZSBjbGVhbiB1cCBjb2RlIGludG8gdGhlICdpOTE1X2dlbV9zY2hlZHVsZXJf Y2xlYW5fbm9kZSgpJwo+IGZ1bmN0aW9uIHJhdGhlciB0aGFuIHJlcGxpY2F0aW5nIGl0IGluIG11 dGxpcGxlIHBsYWNlcy4KPgo+IFVzZWQgbGlnaHRlciB3ZWlnaHQgc3BpbmxvY2tzLgo+Cj4gdjY6 IFVwZGF0ZWQgdG8gbmV3ZXIgbmlnaHRseSAobG90cyBvZiByaW5nIC0+IGVuZ2luZSByZW5hbWlu ZykuCj4KPiBBZGRlZCAnZm9yX2VhY2hfc2NoZWR1bGVyX25vZGUoKScgYW5kICdhc3NlcnRfc2No ZWR1bGVyX2xvY2tfaGVsZCgpJwo+IGhlbHBlciBtYWNyb3MuIFJlbmFtZWQgJ2k5MTVfZ2VtX2V4 ZWNidWZmX3JlbGVhc2VfYmF0Y2hfb2JqJyB0bwo+ICdpOTE1X2dlbV9leGVjYnVmX3JlbGVhc2Vf YmF0Y2hfb2JqJy4gVXBkYXRlZCB0byB1c2UgJ3RvX2k5MTUoKScKPiBpbnN0ZWFkIG9mIGRldl9w cml2YXRlLiBDb252ZXJ0ZWQgYWxsIGVudW0gbGFiZWxzIHRvIHVwcGVyY2FzZS4KPiBSZW1vdmVk IHZhcmlvdXMgdW5uZWNlc3NhcnkgV0FSTnMuIFJlbmFtZWQgJ3NhdmVkX29iamVjdHMnIHRvIGp1 c3QKPiAnb2JqcycuIFNwbGl0IGNvZGUgZm9yIGNvdW50aW5nIGluY29tcGxldGUgbm9kZXMgb3V0 IGludG8gYSBzZXBhcmF0ZQo+IGZ1bmN0aW9uLiBSZW1vdmVkIGV2ZW4gbW9yZSB3aGl0ZSBzcGFj ZS4gQWRkZWQgYSBkZXN0cm95KCkgZnVuY3Rpb24uCj4gW3JldmlldyBmZWVkYmFjayBmcm9tIEpv b25hcyBMYWh0aW5lbl0KPgo+IEFkZGVkIHJ1bm5pbmcgdG90YWxzIG9mICdmbHlpbmcnIGFuZCAn cXVldWVkJyBub2RlcyByYXRoZXIgdGhhbgo+IHJlLWNhbGN1bGF0aW5nIGVhY2ggdGltZSBhcyBh IG1pbm9yIENQVSBwZXJmb3JtYW5jZSBvcHRpbWlzYXRpb24uCj4KPiBSZW1vdmVkIHN1cHBvcnQg Zm9yIG91dCBvZiBvcmRlciBzZXFubyBjb21wbGV0aW9uLiBBbGwgdGhlIHByZXAgd29yawo+IHBh dGNoIHNlcmllcyAoc2Vxbm8gdG8gcmVxdWVzdCBjb252ZXJzaW9uLCBsYXRlIHNlcW5vIGFzc2ln bm1lbnQsCj4gZXRjLikgdGhhdCBoYXMgbm93IGJlZW4gZG9uZSBtZWFucyB0aGF0IHRoZSBzY2hl ZHVsZXIgbm8gbG9uZ2VyCj4gZ2VuZXJhdGVzIG91dCBvZiBvcmRlciBzZXFubyBjb21wbGV0aW9u cy4gVGh1cyBhbGwgdGhlIGNvbXBsZXggY29kZQo+IGZvciBjb3Bpbmcgd2l0aCBzdWNoIGlzIG5v IGxvbmdlciByZXF1aXJlZCBhbmQgY2FuIGJlIHJlbW92ZWQuCj4KPiBGaXhlZCBhIGJ1ZyBpbiBz Y2hlZHVsZXIgYnlwYXNzIG1vZGUgaW50cm9kdWNlZCBpbiB0aGUgY2xlYW4gdXAgY29kZQo+IHJl ZmFjdG9yaW5nIG9mIHY1LiBUaGUgY2xlYW4gdXAgZnVuY3Rpb24gd2FzIHNlZWluZyB0aGUgbm9k ZSBpbiB0aGUKPiB3cm9uZyBzdGF0ZSBhbmQgdGh1cyByZWZ1c2luZyB0byBwcm9jZXNzIGl0Lgo+ Cj4gRm9yOiBWSVotMTU4Nwo+IFNpZ25lZC1vZmYtYnk6IEpvaG4gSGFycmlzb24gPEpvaG4uQy5I YXJyaXNvbkBJbnRlbC5jb20+Cj4gQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVu QGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl ICAgICAgICAgfCAgIDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyAgICAg ICB8ICAgMyArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgIHwgICA2 ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgfCAgIDUgKwo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYyB8IDg2NyArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVk dWxlci5oIHwgMTEzICsrKysrCj4gICA2IGZpbGVzIGNoYW5nZWQsIDk5NSBpbnNlcnRpb25zKCsp Cj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVs ZXIuYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2No ZWR1bGVyLmgKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggZTljZGViNS4uMjg5ZmE3MyAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTEwLDYgKzEwLDcgQEAgY2NmbGFncy15IDo9 IC1XZXJyb3IKPiAgIGk5MTUteSA6PSBpOTE1X2Rydi5vIFwKPiAgIAkgIGk5MTVfaXJxLm8gXAo+ ICAgCSAgaTkxNV9wYXJhbXMubyBcCj4gKwkgIGk5MTVfc2NoZWR1bGVyLm8gXAo+ICAgICAgICAg ICAgIGk5MTVfc3VzcGVuZC5vIFwKPiAgIAkgIGk5MTVfc3lzZnMubyBcCj4gICAJICBpbnRlbF9j c3IubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4gaW5kZXggYjM3Nzc1My4uMmFkNDA3MSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+IEBAIC0zNyw2ICszNyw3IEBACj4gICAjaW5j bHVkZSAiaTkxNV9kcnYuaCIKPiAgICNpbmNsdWRlICJpOTE1X3ZncHUuaCIKPiAgICNpbmNsdWRl ICJpOTE1X3RyYWNlLmgiCj4gKyNpbmNsdWRlICJpOTE1X3NjaGVkdWxlci5oIgo+ICAgI2luY2x1 ZGUgPGxpbnV4L3BjaS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KPiAgICNpbmNs dWRlIDxsaW51eC92dC5oPgo+IEBAIC0xNDQ4LDYgKzE0NDksOCBAQCBpbnQgaTkxNV9kcml2ZXJf dW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4KPiAgIAlpbnRlbF9jc3JfdWNvZGVfZmlu aShkZXZfcHJpdik7Cj4KPiArCWk5MTVfc2NoZWR1bGVyX2Rlc3Ryb3koZGV2X3ByaXYpOwo+ICsK PiAgIAkvKiBGcmVlIGVycm9yIHN0YXRlIGFmdGVyIGludGVycnVwdHMgYXJlIGZ1bGx5IGRpc2Fi bGVkLiAqLwo+ICAgCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYtPmdwdV9lcnJv ci5oYW5nY2hlY2tfd29yayk7Cj4gICAJaTkxNV9kZXN0cm95X2Vycm9yX3N0YXRlKGRldik7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggNzQ5MmNlNy4uN2I2MmUyYyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC0xNzE3LDYgKzE3MTcsOCBAQCBzdHJ1Y3QgaTkxNV9l eGVjYnVmZmVyX3BhcmFtcyB7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICAgICAq cmVxdWVzdDsKPiAgIH07Cj4KPiArc3RydWN0IGk5MTVfc2NoZWR1bGVyOwo+ICsKPiAgIC8qIHVz ZWQgaW4gY29tcHV0aW5nIHRoZSBuZXcgd2F0ZXJtYXJrcyBzdGF0ZSAqLwo+ICAgc3RydWN0IGlu dGVsX3dtX2NvbmZpZyB7Cj4gICAJdW5zaWduZWQgaW50IG51bV9waXBlc19hY3RpdmU7Cj4gQEAg LTE5OTQsNiArMTk5Niw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPgo+ICAgCXN0cnVj dCBpOTE1X3J1bnRpbWVfcG0gcG07Cj4KPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1 bGVyOwo+ICsKPiAgIAkvKiBBYnN0cmFjdCB0aGUgc3VibWlzc2lvbiBtZWNoYW5pc20gKGxlZ2Fj eSByaW5nYnVmZmVyIG9yIGV4ZWNsaXN0cykgYXdheSAqLwo+ICAgCXN0cnVjdCB7Cj4gICAJCWlu dCAoKmV4ZWNidWZfc3VibWl0KShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyX3BhcmFtcyAqcGFyYW1z LAo+IEBAIC0yMzM1LDYgKzIzMzksOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qgewo+ ICAgCS8qKiBwcm9jZXNzIGlkZW50aWZpZXIgc3VibWl0dGluZyB0aGlzIHJlcXVlc3QgKi8KPiAg IAlzdHJ1Y3QgcGlkICpwaWQ7Cj4KPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRy eSAqc2NoZWR1bGVyX3FlOwo+ICsKPiAgIAkvKioKPiAgIAkgKiBUaGUgRUxTUCBvbmx5IGFjY2Vw dHMgdHdvIGVsZW1lbnRzIGF0IGEgdGltZSwgc28gd2UgcXVldWUKPiAgIAkgKiBjb250ZXh0L3Rh aWwgcGFpcnMgb24gYSBnaXZlbiBxdWV1ZSAocmluZy0+ZXhlY2xpc3RfcXVldWUpIHVudGlsIHRo ZQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IGE2MzIyNzYuLmI3NDY2Y2IgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAtMzIsNiArMzIsNyBAQAo+ICAgI2luY2x1ZGUg Imk5MTVfdmdwdS5oIgo+ICAgI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKPiAgICNpbmNsdWRlICJp bnRlbF9kcnYuaCIKPiArI2luY2x1ZGUgImk5MTVfc2NoZWR1bGVyLmgiCj4gICAjaW5jbHVkZSA8 bGludXgvc2htZW1fZnMuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gICAjaW5jbHVk ZSA8bGludXgvc3dhcC5oPgo+IEBAIC01NDA1LDYgKzU0MDYsMTAgQEAgaW50IGk5MTVfZ2VtX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIAkgKi8KPiAgIAlpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4KPiArCXJldCA9IGk5MTVfc2No ZWR1bGVyX2luaXQoZGV2KTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBvdXRfdW5sb2NrOwo+ICsK PiAgIAlyZXQgPSBpOTE1X2dlbV9pbml0X3VzZXJwdHIoZGV2KTsKPiAgIAlpZiAocmV0KQo+ICAg CQlnb3RvIG91dF91bmxvY2s7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfc2NoZWR1bGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi45ZDYyOGI5Cj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKPiBAQCAt MCwwICsxLDg2NyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9y YXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiAr ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsg KiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5j bHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImludGVsX2Rydi5oIgo+ICsjaW5jbHVkZSAi aTkxNV9zY2hlZHVsZXIuaCIKPiArCj4gKyNkZWZpbmUgZm9yX2VhY2hfc2NoZWR1bGVyX25vZGUo bm9kZSwgaWQpCQkJCVwKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoKG5vZGUpLCAmc2NoZWR1bGVy LT5ub2RlX3F1ZXVlWyhpZCldLCBsaW5rKQo+ICsKPiArI2RlZmluZSBhc3NlcnRfc2NoZWR1bGVy X2xvY2tfaGVsZChzY2hlZHVsZXIpCQkJCVwKPiArCWRvIHsJCQkJCQkJCVwKPiArCQlXQVJOX09O Q0UoIXNwaW5faXNfbG9ja2VkKCYoc2NoZWR1bGVyKS0+bG9jayksICJTcGlubG9jayBub3QgbG9j a2VkISIpOwlcCj4gKwl9IHdoaWxlKDApCj4gKwo+ICsvKioKPiArICogaTkxNV9zY2hlZHVsZXJf aXNfZW5hYmxlZCAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2NoZWR1bGVyIGlzIGVuYWJsZWQuCj4g KyAqIEBkZXY6IERSTSBkZXZpY2UKPiArICovCj4gK2Jvb2wgaTkxNV9zY2hlZHVsZXJfaXNfZW5h YmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwo+ICsJcmV0dXJuIGRldl9wcml2LT5z Y2hlZHVsZXIgIT0gTlVMTDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGk5MTVfc2NoZWR1bGVyX2lu aXQgLSBJbml0aWFsaXNlIHRoZSBzY2hlZHVsZXIuCj4gKyAqIEBkZXY6IERSTSBkZXZpY2UKPiAr ICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgLUVOT01FTSBpZiBtZW1vcnkgYWxsb2NhdGlv bnMgZmFpbC4KPiArICovCj4gK2ludCBpOTE1X3NjaGVkdWxlcl9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZGV2KTsKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyID0gZGV2X3By aXYtPnNjaGVkdWxlcjsKPiArCWludCBlOwo+ICsKPiArCWlmIChzY2hlZHVsZXIpCj4gKwkJcmV0 dXJuIDA7CgpQcm9iYWJseSBhIEdFTV9CVUdfT04gb3Igc29tZXRoaW5nLgoKPiArCj4gKwlzY2hl ZHVsZXIgPSBremFsbG9jKHNpemVvZigqc2NoZWR1bGVyKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAo IXNjaGVkdWxlcikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlzcGluX2xvY2tfaW5pdCgm c2NoZWR1bGVyLT5sb2NrKTsKPiArCj4gKwlmb3IgKGUgPSAwOyBlIDwgSTkxNV9OVU1fRU5HSU5F UzsgZSsrKSB7Cj4gKwkJSU5JVF9MSVNUX0hFQUQoJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtlXSk7 Cj4gKwkJc2NoZWR1bGVyLT5jb3VudHNbZV0uZmx5aW5nID0gMDsKPiArCQlzY2hlZHVsZXItPmNv dW50c1tlXS5xdWV1ZWQgPSAwOwo+ICsJfQo+ICsKPiArCS8qIERlZmF1bHQgdHVuaW5nIHZhbHVl czogKi8KPiArCXNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWluICAgICA9IC0xMDIzOwo+ICsJ c2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9tYXggICAgID0gMTAyMzsKPiArCXNjaGVkdWxlci0+ cHJpb3JpdHlfbGV2ZWxfYnVtcCAgICA9IDUwOwo+ICsJc2NoZWR1bGVyLT5wcmlvcml0eV9sZXZl bF9wcmVlbXB0ID0gOTAwOwo+ICsJc2NoZWR1bGVyLT5taW5fZmx5aW5nICAgICAgICAgICAgID0g MjsKPiArCj4gKwlkZXZfcHJpdi0+c2NoZWR1bGVyID0gc2NoZWR1bGVyOwo+ICsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaTkxNV9zY2hlZHVsZXJfZGVzdHJveSAtIEdldCBy aWQgb2YgdGhlIHNjaGVkdWxlci4KPiArICogQGRldjogRFJNIGRldmljZQo+ICsgKi8KPiArdm9p ZCBpOTE1X3NjaGVkdWxlcl9kZXN0cm95KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiArewo+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+ c2NoZWR1bGVyOwo+ICsJaW50IGU7Cj4gKwo+ICsJaWYgKCFzY2hlZHVsZXIpCj4gKwkJcmV0dXJu Owo+ICsKPiArCWZvciAoZSA9IDA7IGUgPCBJOTE1X05VTV9FTkdJTkVTOyBlKyspCj4gKwkJV0FS TighbGlzdF9lbXB0eSgmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW2VdKSwgIkRlc3Ryb3lpbmcgd2l0 aCBsaXN0IGVudHJpZXMgb24gZW5naW5lICVkISIsIGUpOwo+ICsKPiArCWtmcmVlKHNjaGVkdWxl cik7Cj4gKwlkZXZfcHJpdi0+c2NoZWR1bGVyID0gTlVMTDsKPiArfQo+ICsKPiArLyoKPiArICog QWRkIGEgcG9wcGVkIG5vZGUgYmFjayBpbiB0byB0aGUgcXVldWUuIEZvciBleGFtcGxlLCBiZWNh dXNlIHRoZSBlbmdpbmUKPiArICogd2FzIGh1bmcgd2hlbiBleGVjZmluYWwoKSB3YXMgY2FsbGVk IGFuZCB0aHVzIHRoZSBlbmdpbmUgc3VibWlzc2lvbiBuZWVkcwo+ICsgKiB0byBiZSByZXRyaWVk IGxhdGVyLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgaTkxNV9zY2hlZHVsZXJfbm9kZV9yZXF1ZXVl KHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAo+ICsJCQkJCXN0cnVjdCBpOTE1X3Nj aGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZSkKPiArewo+ICsJYXNzZXJ0X3NjaGVkdWxlcl9sb2Nr X2hlbGQoc2NoZWR1bGVyKTsKPiArCj4gKwlXQVJOX09OKCFJOTE1X1NRU19JU19GTFlJTkcobm9k ZSkpOwo+ICsKPiArCS8qIFNlcW5vIHdpbGwgYmUgcmVhc3NpZ25lZCBvbiByZWxhdW5jaCAqLwo+ ICsJbm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5vID0gMDsKPiArCW5vZGUtPnN0YXR1cyA9IEk5 MTVfU1FTX1FVRVVFRDsKPiArCXNjaGVkdWxlci0+Y291bnRzW25vZGUtPnBhcmFtcy5lbmdpbmUt PmlkXS5mbHlpbmctLTsKPiArCXNjaGVkdWxlci0+Y291bnRzW25vZGUtPnBhcmFtcy5lbmdpbmUt PmlkXS5xdWV1ZWQrKzsKPiArfQo+ICsKPiArLyoKPiArICogR2l2ZSB1cCBvbiBhIG5vZGUgY29t cGxldGVseS4gRm9yIGV4YW1wbGUsIGJlY2F1c2UgaXQgaXMgY2F1c2luZyB0aGUKPiArICogZW5n aW5lIHRvIGhhbmcgb3IgaXMgdXNpbmcgc29tZSByZXNvdXJjZSB0aGF0IG5vIGxvbmdlciBleGlz dHMuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBpOTE1X3NjaGVkdWxlcl9ub2RlX2tpbGwoc3RydWN0 IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIsCj4gKwkJCQkgICAgIHN0cnVjdCBpOTE1X3NjaGVk dWxlcl9xdWV1ZV9lbnRyeSAqbm9kZSkKPiArewo+ICsJYXNzZXJ0X3NjaGVkdWxlcl9sb2NrX2hl bGQoc2NoZWR1bGVyKTsKPiArCj4gKwlXQVJOX09OKEk5MTVfU1FTX0lTX0NPTVBMRVRFKG5vZGUp KTsKPiArCj4gKwlpZiAoSTkxNV9TUVNfSVNfRkxZSU5HKG5vZGUpKQo+ICsJCXNjaGVkdWxlci0+ Y291bnRzW25vZGUtPnBhcmFtcy5lbmdpbmUtPmlkXS5mbHlpbmctLTsKPiArCWVsc2UKPiArCQlz Y2hlZHVsZXItPmNvdW50c1tub2RlLT5wYXJhbXMuZW5naW5lLT5pZF0ucXVldWVkLS07Cj4gKwo+ ICsJbm9kZS0+c3RhdHVzID0gSTkxNV9TUVNfREVBRDsKPiArfQo+ICsKPiArLyogTWFyayBhIG5v ZGUgYXMgaW4gZmxpZ2h0IG9uIHRoZSBoYXJkd2FyZS4gKi8KPiArc3RhdGljIHZvaWQgaTkxNV9z Y2hlZHVsZXJfbm9kZV9mbHkoc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2Rl KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KG5v ZGUtPnBhcmFtcy5kZXYpOwo+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIgPSBk ZXZfcHJpdi0+c2NoZWR1bGVyOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0g bm9kZS0+cGFyYW1zLmVuZ2luZTsKPiArCj4gKwlhc3NlcnRfc2NoZWR1bGVyX2xvY2tfaGVsZChz Y2hlZHVsZXIpOwo+ICsKPiArCVdBUk5fT04obm9kZS0+c3RhdHVzICE9IEk5MTVfU1FTX1BPUFBF RCk7Cj4gKwo+ICsJLyoKPiArCSAqIEFkZCB0aGUgbm9kZSAod2hpY2ggc2hvdWxkIGN1cnJlbnRs eSBiZSBpbiBzdGF0ZSBwb3BwZWQpIHRvIHRoZQo+ICsJICogZnJvbnQgb2YgdGhlIHF1ZXVlLiBU aGlzIGVuc3VyZSB0aGF0IGZseWluZyBub2RlcyBhcmUgYWx3YXlzIGhlbGQKPiArCSAqIGluIGhh cmR3YXJlIHN1Ym1pc3Npb24gb3JkZXIuCj4gKwkgKi8KPiArCWxpc3RfYWRkKCZub2RlLT5saW5r LCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW2VuZ2luZS0+aWRdKTsKPiArCj4gKwlub2RlLT5zdGF0 dXMgPSBJOTE1X1NRU19GTFlJTkc7Cj4gKwo+ICsJc2NoZWR1bGVyLT5jb3VudHNbZW5naW5lLT5p ZF0uZmx5aW5nKys7Cj4gKwo+ICsJaWYgKCEoc2NoZWR1bGVyLT5mbGFnc1tlbmdpbmUtPmlkXSAm IEk5MTVfU0ZfSU5URVJSVVBUU19FTkFCTEVEKSkgewo+ICsJCWJvb2wgc3VjY2VzcyA9IHRydWU7 Cj4gKwo+ICsJCXN1Y2Nlc3MgPSBlbmdpbmUtPmlycV9nZXQoZW5naW5lKTsKPiArCQlpZiAoc3Vj Y2VzcykKPiArCQkJc2NoZWR1bGVyLT5mbGFnc1tlbmdpbmUtPmlkXSB8PSBJOTE1X1NGX0lOVEVS UlVQVFNfRU5BQkxFRDsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1aW50MzJfdCBp OTE1X3NjaGVkdWxlcl9jb3VudF9mbHlpbmcoc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVs ZXIsCj4gKwkJCQkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJ cmV0dXJuIHNjaGVkdWxlci0+Y291bnRzW2VuZ2luZS0+aWRdLmZseWluZzsKPiArfQoKTWF5YmUg bnVtX2ZseWluZyB3b3VsZCBiZSBhIG1vcmUgb2J2aW91cyBuYW1lLCBvciBhdCBsZWFzdCBsZXNz IHdvcnJ5IAppbmR1Y2luZy4KCj4gKwo+ICtzdGF0aWMgdm9pZCBpOTE1X3NjaGVkdWxlcl9wcmlv cml0eV9idW1wX2NsZWFyKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyKQo+ICt7Cj4g KwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGU7Cj4gKwlpbnQgaTsKPiAr Cj4gKwlhc3NlcnRfc2NoZWR1bGVyX2xvY2tfaGVsZChzY2hlZHVsZXIpOwo+ICsKPiArCS8qCj4g KwkgKiBFbnN1cmUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGRvbid0IGNhdXNlIHByb2JsZW1zIGFu ZCB0aGF0IGEgYnVtcAo+ICsJICogYnkgb2JqZWN0IHVzYWdlIG9ubHkgYnVtcHMgZWFjaCB1c2lu ZyBidWZmZXIgb25jZToKPiArCSAqLwo+ICsJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX0VOR0lO RVM7IGkrKykgewo+ICsJCWZvcl9lYWNoX3NjaGVkdWxlcl9ub2RlKG5vZGUsIGkpCj4gKwkJCW5v ZGUtPmJ1bXBlZCA9IGZhbHNlOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGk5MTVfc2No ZWR1bGVyX3ByaW9yaXR5X2J1bXAoc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIsCj4g KwkJCQlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKnRhcmdldCwKPiArCQkJCXVp bnQzMl90IGJ1bXApCj4gK3sKPiArCXVpbnQzMl90IG5ld19wcmlvcml0eTsKPiArCWludCBpLCBj b3VudDsKPiArCj4gKwlpZiAodGFyZ2V0LT5wcmlvcml0eSA+PSBzY2hlZHVsZXItPnByaW9yaXR5 X2xldmVsX21heCkKPiArCQlyZXR1cm4gMTsKPiArCj4gKwlpZiAodGFyZ2V0LT5idW1wZWQpCj4g KwkJcmV0dXJuIDA7Cj4gKwo+ICsJbmV3X3ByaW9yaXR5ID0gdGFyZ2V0LT5wcmlvcml0eSArIGJ1 bXA7Cj4gKwlpZiAoKG5ld19wcmlvcml0eSA8PSB0YXJnZXQtPnByaW9yaXR5KSB8fAo+ICsJICAg IChuZXdfcHJpb3JpdHkgPiBzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX21heCkpCj4gKwkJdGFy Z2V0LT5wcmlvcml0eSA9IHNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWF4Owo+ICsJZWxzZQo+ ICsJCXRhcmdldC0+cHJpb3JpdHkgPSBuZXdfcHJpb3JpdHk7Cj4gKwo+ICsJY291bnQgPSAxOwo+ ICsJdGFyZ2V0LT5idW1wZWQgPSB0cnVlOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQt Pm51bV9kZXBzOyBpKyspIHsKPiArCQlpZiAoIXRhcmdldC0+ZGVwX2xpc3RbaV0pCj4gKwkJCWNv bnRpbnVlOwo+ICsKPiArCQlpZiAodGFyZ2V0LT5kZXBfbGlzdFtpXS0+YnVtcGVkKQo+ICsJCQlj b250aW51ZTsKPiArCj4gKwkJY291bnQgKz0gaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcChz Y2hlZHVsZXIsCj4gKwkJCQkJCSAgICAgIHRhcmdldC0+ZGVwX2xpc3RbaV0sCj4gKwkJCQkJCSAg ICAgIGJ1bXApOwo+ICsJfQo+ICsKPiArCXJldHVybiBjb3VudDsKPiArfQo+ICsKPiArLyoKPiAr ICogTm9kZXMgYXJlIGNvbnNpZGVyZWQgdmFsaWQgZGVwZW5kZW5jaWVzIGlmIHRoZXkgYXJlIHF1 ZXVlZCBvbiBhbnkgZW5naW5lCj4gKyAqIG9yIGlmIHRoZXkgYXJlIGluIGZsaWdodCBvbiBhIGRp ZmZlcmVudCBlbmdpbmUuIEluIGZsaWdodCBvbiB0aGUgc2FtZQo+ICsgKiBlbmdpbmUgaXMgbm8g bG9uZ2VyIGludGVyZXN0aW5nIGZvciBub24tcHJlbXB0aXZlIG5vZGVzIGFzIHRoZSBlbmdpbmUK PiArICogc2VyaWFsaXNlcyBleGVjdXRpb24uIEZvciBwcmUtZW1wdGluZyBub2RlcywgYWxsIGlu IGZsaWdodCBkZXBlbmRlbmNpZXMKPiArICogYXJlIHZhbGlkIGFzIHRoZXkgbXVzdCBub3QgYmUg anVtcGVkIGJ5IHRoZSBhY3Qgb2YgcHJlLWVtcHRpbmcuCj4gKyAqCj4gKyAqIEFueXRoaW5nIHRo YXQgaXMgbmVpdGhlciBxdWV1ZWQgbm9yIGZseWluZyBpcyB1bmludGVyZXN0aW5nLgo+ICsgKi8K PiArc3RhdGljIGlubGluZSBib29sIGk5MTVfc2NoZWR1bGVyX2lzX2RlcGVuZGVuY3lfdmFsaWQo Cj4gKwkJCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZSwgdWludDMyX3Qg aWR4KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKmRlcDsKPiAr Cj4gKwlkZXAgPSBub2RlLT5kZXBfbGlzdFtpZHhdOwo+ICsJaWYgKCFkZXApCj4gKwkJcmV0dXJu IGZhbHNlOwo+ICsKPiArCWlmIChJOTE1X1NRU19JU19RVUVVRUQoZGVwKSkKPiArCQlyZXR1cm4g dHJ1ZTsKPiArCj4gKwlpZiAoSTkxNV9TUVNfSVNfRkxZSU5HKGRlcCkpIHsKPiArCQlpZiAobm9k ZS0+cGFyYW1zLmVuZ2luZSAhPSBkZXAtPnBhcmFtcy5lbmdpbmUpCj4gKwkJCXJldHVybiB0cnVl Owo+ICsJfQo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1 X3NjaGVkdWxlcl9wb3BfZnJvbV9xdWV1ZV9sb2NrZWQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAo+ICsJCQkJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICoqcG9wX25v ZGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo ZW5naW5lLT5kZXYpOwo+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIgPSBkZXZf cHJpdi0+c2NoZWR1bGVyOwo+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpi ZXN0ID0gTlVMTDsKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZTsK PiArCWludCByZXQ7Cj4gKwlpbnQgaTsKPiArCWJvb2wgYW55X3F1ZXVlZCA9IGZhbHNlOwo+ICsJ Ym9vbCBoYXNfbG9jYWwsIGhhc19yZW1vdGUsIG9ubHlfcmVtb3RlID0gZmFsc2U7Cj4gKwo+ICsJ YXNzZXJ0X3NjaGVkdWxlcl9sb2NrX2hlbGQoc2NoZWR1bGVyKTsKPiArCj4gKwkqcG9wX25vZGUg PSBOVUxMOwoKTG9va3MgdG8gYmUgbm90IG5lZWRlZCBzaW5jZSB0aGVyZSBpcyAqcG9wX25vZGUg PSBiZXN0IGJlbG93LgoKPiArCXJldCA9IC1FTk9EQVRBOwo+ICsKPiArCWZvcl9lYWNoX3NjaGVk dWxlcl9ub2RlKG5vZGUsIGVuZ2luZS0+aWQpIHsKPiArCQlpZiAoIUk5MTVfU1FTX0lTX1FVRVVF RChub2RlKSkKPiArCQkJY29udGludWU7Cj4gKwkJYW55X3F1ZXVlZCA9IHRydWU7Cj4gKwo+ICsJ CWhhc19sb2NhbCAgPSBmYWxzZTsKPiArCQloYXNfcmVtb3RlID0gZmFsc2U7Cj4gKwkJZm9yIChp ID0gMDsgaSA8IG5vZGUtPm51bV9kZXBzOyBpKyspIHsKPiArCQkJaWYgKCFpOTE1X3NjaGVkdWxl cl9pc19kZXBlbmRlbmN5X3ZhbGlkKG5vZGUsIGkpKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJ CQlpZiAobm9kZS0+ZGVwX2xpc3RbaV0tPnBhcmFtcy5lbmdpbmUgPT0gbm9kZS0+cGFyYW1zLmVu Z2luZSkKPiArCQkJCWhhc19sb2NhbCA9IHRydWU7Cj4gKwkJCWVsc2UKPiArCQkJCWhhc19yZW1v dGUgPSB0cnVlOwoKV291bGQgaXQgYmUgd29ydGggYnJlYWtpbmcgZWFybHkgZnJvbSB0aGlzIGxv b3AgaWYgaGFzX2xvY2FsICYmIGhhc19yZW1vdGU/Cgo+ICsJCX0KPiArCj4gKwkJaWYgKGhhc19y ZW1vdGUgJiYgIWhhc19sb2NhbCkKPiArCQkJb25seV9yZW1vdGUgPSB0cnVlOwo+ICsKPiArCQlp ZiAoIWhhc19sb2NhbCAmJiAhaGFzX3JlbW90ZSkgewo+ICsJCQlpZiAoIWJlc3QgfHwKPiArCQkJ ICAgIChub2RlLT5wcmlvcml0eSA+IGJlc3QtPnByaW9yaXR5KSkKPiArCQkJCWJlc3QgPSBub2Rl Owo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoYmVzdCkgewo+ICsJCWxpc3RfZGVsKCZiZXN0LT5s aW5rKTsKPiArCj4gKwkJSU5JVF9MSVNUX0hFQUQoJmJlc3QtPmxpbmspOwoKbGlzdF9kZWxfaW5p dCBjYW4gcmVwbGFjZSB0aGUgdHdvIGxpbmVzIGFib3ZlLgoKPiArCQliZXN0LT5zdGF0dXMgPSBJ OTE1X1NRU19QT1BQRUQ7Cj4gKwo+ICsJCXNjaGVkdWxlci0+Y291bnRzW2VuZ2luZS0+aWRdLnF1 ZXVlZC0tOwo+ICsKPiArCQlyZXQgPSAwOwo+ICsJfSBlbHNlIHsKPiArCQkvKiBDYW4gb25seSBn ZXQgaGVyZSBpZjoKPiArCQkgKiAoYSkgdGhlcmUgYXJlIG5vIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVl Cj4gKwkJICogKGIpIGFsbCBxdWV1ZWQgYnVmZmVycyBhcmUgZGVwZW5kZW50IG9uIG90aGVyIGJ1 ZmZlcnMKPiArCQkgKiAgICAgZS5nLiBvbiBhIGJ1ZmZlciB0aGF0IGlzIGluIGZsaWdodCBvbiBh IGRpZmZlcmVudCBlbmdpbmUKPiArCQkgKi8KPiArCQlpZiAob25seV9yZW1vdGUpIHsKPiArCQkJ LyogVGhlIG9ubHkgZGVwZW5kZW50IGJ1ZmZlcnMgYXJlIG9uIGFub3RoZXIgZW5naW5lLiAqLwo+ ICsJCQlyZXQgPSAtRUFHQUlOOwo+ICsJCX0gZWxzZSBpZiAoYW55X3F1ZXVlZCkgewo+ICsJCQkv KiBJdCBzZWVtcyB0aGF0IHNvbWV0aGluZyBoYXMgZ29uZSBob3JyaWJseSB3cm9uZyEgKi8KPiAr CQkJV0FSTl9PTkNFKHRydWUsICJCcm9rZW4gZGVwZW5kZW5jeSB0cmFja2luZyBvbiBlbmdpbmUg JWQhXG4iLAo+ICsJCQkJICAoaW50KSBlbmdpbmUtPmlkKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ KnBvcF9ub2RlID0gYmVzdDsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qCj4gKyAqIE5C OiBUaGUgZHJpdmVyIG11dGV4IGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nIHRoaXMg ZnVuY3Rpb24uIEl0IGlzCj4gKyAqIG9ubHkgcmVhbGx5IHJlcXVpcmVkIGR1cmluZyB0aGUgYWN0 dWFsIGJhY2sgZW5kIHN1Ym1pc3Npb24gY2FsbC4gSG93ZXZlciwKPiArICogYXR0ZW1wdGluZyB0 byBhY3F1aXJlIGEgbXV0ZXggd2hpbGUgaG9sZGluZyBhIHNwaW4gbG9jayBpcyBhIEJhZCBJZGVh Lgo+ICsgKiBBbmQgcmVsZWFzaW5nIHRoZSBvbmUgYmVmb3JlIGFjcXVpcmluZyB0aGUgb3RoZXIg bGVhZHMgdG8gb3RoZXIgY29kZQo+ICsgKiBiZWluZyBydW4gYW5kIGludGVyZmVyaW5nLgo+ICsg Ki8KPiArc3RhdGljIGludCBpOTE1X3NjaGVkdWxlcl9zdWJtaXQoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGVuZ2luZS0+ZGV2KTsKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1 bGVyID0gZGV2X3ByaXYtPnNjaGVkdWxlcjsKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1 ZV9lbnRyeSAqbm9kZTsKPiArCWludCByZXQsIGNvdW50ID0gMCwgZmx5aW5nOwo+ICsKPiArCVdB Uk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZW5naW5lLT5kZXYtPnN0cnVjdF9tdXRleCkpOwo+ICsK PiArCXNwaW5fbG9ja19pcnEoJnNjaGVkdWxlci0+bG9jayk7Cj4gKwo+ICsJV0FSTl9PTihzY2hl ZHVsZXItPmZsYWdzW2VuZ2luZS0+aWRdICYgSTkxNV9TRl9TVUJNSVRUSU5HKTsKPiArCXNjaGVk dWxlci0+ZmxhZ3NbZW5naW5lLT5pZF0gfD0gSTkxNV9TRl9TVUJNSVRUSU5HOwo+ICsKPiArCS8q IEZpcnN0IHRpbWUgYXJvdW5kLCBjb21wbGFpbiBpZiBhbnl0aGluZyB1bmV4cGVjdGVkIG9jY3Vy czogKi8KPiArCXJldCA9IGk5MTVfc2NoZWR1bGVyX3BvcF9mcm9tX3F1ZXVlX2xvY2tlZChlbmdp bmUsICZub2RlKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJvcjsKPiArCj4gKwlkbyB7Cj4g KwkJV0FSTl9PTihub2RlLT5wYXJhbXMuZW5naW5lICE9IGVuZ2luZSk7Cj4gKwkJV0FSTl9PTihu b2RlLT5zdGF0dXMgIT0gSTkxNV9TUVNfUE9QUEVEKTsKPiArCQljb3VudCsrOwo+ICsKPiArCQkv Kgo+ICsJCSAqIFRoZSBjYWxsIHRvIHBvcCBhYm92ZSB3aWxsIGhhdmUgcmVtb3ZlZCB0aGUgbm9k ZSBmcm9tIHRoZQo+ICsJCSAqIGxpc3QuIFNvIGFkZCBpdCBiYWNrIGluIGFuZCBtYXJrIGl0IGFz IGluIGZsaWdodC4KPiArCQkgKi8KPiArCQlpOTE1X3NjaGVkdWxlcl9ub2RlX2ZseShub2RlKTsK PiArCj4gKwkJc3Bpbl91bmxvY2tfaXJxKCZzY2hlZHVsZXItPmxvY2spOwo+ICsJCXJldCA9IGRl dl9wcml2LT5ndC5leGVjYnVmX2ZpbmFsKCZub2RlLT5wYXJhbXMpOwo+ICsJCXNwaW5fbG9ja19p cnEoJnNjaGVkdWxlci0+bG9jayk7Cj4gKwo+ICsJCS8qCj4gKwkJICogSGFuZGxlIGZhaWxlZCBz dWJtaXNzaW9uIGJ1dCBmaXJzdCBjaGVjayB0aGF0IHRoZQo+ICsJCSAqIHdhdGNoZG9nL3Jlc2V0 IGNvZGUgaGFzIG5vdCBudWtlZCB0aGUgbm9kZSB3aGlsZSB3ZQo+ICsJCSAqIHdlcmVuJ3QgbG9v a2luZzoKPiArCQkgKi8KPiArCQlpZiAocmV0ICYmIChub2RlLT5zdGF0dXMgIT0gSTkxNV9TUVNf REVBRCkpIHsKPiArCQkJYm9vbCByZXF1ZXVlID0gdHJ1ZTsKPiArCj4gKwkJCS8qCj4gKwkJCSAq IE9oIGRlYXIhIEVpdGhlciB0aGUgbm9kZSBpcyBicm9rZW4gb3IgdGhlIGVuZ2luZSBpcwo+ICsJ CQkgKiBidXN5LiBTbyBuZWVkIHRvIGtpbGwgdGhlIG5vZGUgb3IgcmVxdWV1ZSBpdCBhbmQgdHJ5 Cj4gKwkJCSAqIGFnYWluIGxhdGVyIGFzIGFwcHJvcHJpYXRlLgo+ICsJCQkgKi8KPiArCj4gKwkJ CXN3aXRjaCAoLXJldCkgewo+ICsJCQljYXNlIEVOT0RFVjoKPiArCQkJY2FzZSBFTk9FTlQ6Cj4g KwkJCQkvKiBGYXRhbCBlcnJvcnMuIEtpbGwgdGhlIG5vZGUuICovCj4gKwkJCQlyZXF1ZXVlID0g ZmFsc2U7Cj4gKwkJCQlpOTE1X3NjaGVkdWxlcl9ub2RlX2tpbGwoc2NoZWR1bGVyLCBub2RlKTsK PiArCQkJCWJyZWFrOwo+ICsKPiArCQkJY2FzZSBFQUdBSU46Cj4gKwkJCWNhc2UgRUJVU1k6Cj4g KwkJCWNhc2UgRUlPOgo+ICsJCQljYXNlIEVOT01FTToKPiArCQkJY2FzZSBFUkVTVEFSVFNZUzoK PiArCQkJY2FzZSBFSU5UUjoKPiArCQkJCS8qIFN1cHBvc2VkbHkgcmVjb3ZlcmFibGUgZXJyb3Jz LiAqLwo+ICsJCQkJYnJlYWs7Cj4gKwo+ICsJCQlkZWZhdWx0Ogo+ICsJCQkJLyoKPiArCQkJCSAq IEFzc3VtZSB0aGUgZXJyb3IgaXMgcmVjb3ZlcmFibGUgYW5kIGhvcGUKPiArCQkJCSAqIGZvciB0 aGUgYmVzdC4KPiArCQkJCSAqLwo+ICsJCQkJTUlTU0lOR19DQVNFKC1yZXQpOwo+ICsJCQkJYnJl YWs7Cj4gKwkJCX0KPiArCj4gKwkJCWlmIChyZXF1ZXVlKSB7Cj4gKwkJCQlpOTE1X3NjaGVkdWxl cl9ub2RlX3JlcXVldWUoc2NoZWR1bGVyLCBub2RlKTsKPiArCQkJCS8qCj4gKwkJCQkgKiBObyBw b2ludCBzcGlubmluZyBpZiB0aGUgZW5naW5lIGlzIGN1cnJlbnRseQo+ICsJCQkJICogdW5hdmFp bGFibGUgc28ganVzdCBnaXZlIHVwIGFuZCBjb21lIGJhY2sKPiArCQkJCSAqIGxhdGVyLgo+ICsJ CQkJICovCj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJLyogS2VlcCBsYXVu Y2hpbmcgdW50aWwgdGhlIHNreSBpcyBzdWZmaWNpZW50bHkgZnVsbC4gKi8KPiArCQlmbHlpbmcg PSBpOTE1X3NjaGVkdWxlcl9jb3VudF9mbHlpbmcoc2NoZWR1bGVyLCBlbmdpbmUpOwo+ICsJCWlm IChmbHlpbmcgPj0gc2NoZWR1bGVyLT5taW5fZmx5aW5nKQo+ICsJCQlicmVhazsKPiArCj4gKwkJ LyogR3JhYiBhbm90aGVyIG5vZGUgYW5kIGdvIHJvdW5kIGFnYWluLi4uICovCj4gKwkJcmV0ID0g aTkxNV9zY2hlZHVsZXJfcG9wX2Zyb21fcXVldWVfbG9ja2VkKGVuZ2luZSwgJm5vZGUpOwo+ICsJ fSB3aGlsZSAocmV0ID09IDApOwo+ICsKPiArCS8qIERvbid0IGNvbXBsYWluIGFib3V0IG5vdCBi ZWluZyBhYmxlIHRvIHN1Ym1pdCBleHRyYSBlbnRyaWVzICovCj4gKwlpZiAocmV0ID09IC1FTk9E QVRBKQo+ICsJCXJldCA9IDA7Cj4gKwo+ICsJLyoKPiArCSAqIEJ1bXAgdGhlIHByaW9yaXR5IG9m IGV2ZXJ5dGhpbmcgdGhhdCB3YXMgbm90IHN1Ym1pdHRlZCB0byBwcmV2ZW50Cj4gKwkgKiBzdGFy dmF0aW9uIG9mIGxvdyBwcmlvcml0eSB0YXNrcyBieSBhIHNwYW1taW5nIGhpZ2ggcHJpb3JpdHkg dGFzay4KPiArCSAqLwo+ICsJaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcF9jbGVhcihzY2hl ZHVsZXIpOwo+ICsJZm9yX2VhY2hfc2NoZWR1bGVyX25vZGUobm9kZSwgZW5naW5lLT5pZCkgewo+ ICsJCWlmICghSTkxNV9TUVNfSVNfUVVFVUVEKG5vZGUpKQo+ICsJCQljb250aW51ZTsKPiArCj4g KwkJaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcChzY2hlZHVsZXIsIG5vZGUsCj4gKwkJCQkJ ICAgICBzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX2J1bXApOwo+ICsJfQoKYnVtcF9jbGVhciB3 aWxsIGl0ZXJhdGUgcXVldWVzIGZvciBhbGwgZW5naW5lcyBhbmQgdGhlbiB5b3UgaXRlcmF0ZSBp dCAKYWdhaW4uIFdvdWxkIHRoaXMgYmUgZXF1aXZhbGVudDoKCiAgICAgICAgZm9yIChpID0gMDsg aSA8IEk5MTVfTlVNX0VOR0lORVM7IGkrKykgewogICAgICAgICAgICAgICAgZm9yX2VhY2hfc2No ZWR1bGVyX25vZGUobm9kZSwgaSkgewogICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5idW1w ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gZW5naW5lLT5pZCAm JiBJOTE1X1NRU19JU19RVUVVRUQobm9kZSkpCgkJaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVt cChzY2hlZHVsZXIsIAkJbm9kZSwgCnNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfYnVtcCk7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgIH0KCkFkdmFudGFnZSBpcyBvbmUgbG9vcCBmZXdlci4K Cj4gKwo+ICsJLyogT24gc3VjY2VzcywgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnVmZmVycyBzdWJt aXR0ZWQuICovCj4gKwlpZiAocmV0ID09IDApCj4gKwkJcmV0ID0gY291bnQ7Cj4gKwo+ICtlcnJv cjoKPiArCXNjaGVkdWxlci0+ZmxhZ3NbZW5naW5lLT5pZF0gJj0gfkk5MTVfU0ZfU1VCTUlUVElO RzsKPiArCXNwaW5fdW5sb2NrX2lycSgmc2NoZWR1bGVyLT5sb2NrKTsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGk5MTVfZ2VuZXJhdGVfZGVwZW5kZW5jaWVzKHN0cnVj dCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAo+ICsJCQkJICAgICAgIHN0cnVjdCBpOTE1X3Nj aGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZSwKPiArCQkJCSAgICAgICB1aW50MzJfdCBlbmdpbmUp Cj4gK3sKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9vYmpfZW50cnkgKnRoaXMsICp0aGF0Owo+ ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICp0ZXN0Owo+ICsJaW50IGksIGo7 Cj4gKwlib29sIGZvdW5kOwo+ICsKPiArCWZvcl9lYWNoX3NjaGVkdWxlcl9ub2RlKHRlc3QsIGVu Z2luZSkgewo+ICsJCWlmIChJOTE1X1NRU19JU19DT01QTEVURSh0ZXN0KSkKPiArCQkJY29udGlu dWU7Cj4gKwo+ICsJCS8qCj4gKwkJICogQmF0Y2hlcyBvbiB0aGUgc2FtZSBlbmdpbmUgZm9yIHRo ZSBzYW1lCj4gKwkJICogY29udGV4dCBtdXN0IGJlIGtlcHQgaW4gb3JkZXIuCj4gKwkJICovCj4g KwkJZm91bmQgPSAobm9kZS0+cGFyYW1zLmN0eCA9PSB0ZXN0LT5wYXJhbXMuY3R4KSAmJgo+ICsJ CQkobm9kZS0+cGFyYW1zLmVuZ2luZSA9PSB0ZXN0LT5wYXJhbXMuZW5naW5lKTsKPiArCj4gKwkJ LyoKPiArCQkgKiBCYXRjaGVzIHdvcmtpbmcgb24gdGhlIHNhbWUgb2JqZWN0cyBtdXN0Cj4gKwkJ ICogYmUga2VwdCBpbiBvcmRlci4KPiArCQkgKi8KPiArCQlmb3IgKGkgPSAwOyAoaSA8IG5vZGUt Pm51bV9vYmpzKSAmJiAhZm91bmQ7IGkrKykgewo+ICsJCQl0aGlzID0gbm9kZS0+b2JqcyArIGk7 Cj4gKwo+ICsJCQlmb3IgKGogPSAwOyBqIDwgdGVzdC0+bnVtX29ianM7IGorKykgewo+ICsJCQkJ dGhhdCA9IHRlc3QtPm9ianMgKyBqOwo+ICsKPiArCQkJCWlmICh0aGlzLT5vYmogIT0gdGhhdC0+ b2JqKQo+ICsJCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJCS8qIE9ubHkgbmVlZCB0byB3b3JyeSBh Ym91dCB3cml0ZXMgKi8KPiArCQkJCWlmICh0aGlzLT5yZWFkX29ubHkgJiYgdGhhdC0+cmVhZF9v bmx5KQo+ICsJCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJCWZvdW5kID0gdHJ1ZTsKPiArCQkJCWJy ZWFrOwo+ICsJCQl9Cj4gKwkJfQo+ICsKPiArCQlpZiAoZm91bmQpIHsKPiArCQkJbm9kZS0+ZGVw X2xpc3Rbbm9kZS0+bnVtX2RlcHNdID0gdGVzdDsKPiArCQkJbm9kZS0+bnVtX2RlcHMrKzsKPiAr CQl9Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaTkxNV9zY2hlZHVsZXJfcXVldWVfZXhl Y2J1ZmZlcl9ieXBhc3Moc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpxZSkKPiAr ewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShxZS0+cGFy YW1zLmRldik7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciA9IGRldl9wcml2 LT5zY2hlZHVsZXI7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXNjaGVkdWxlci0+ZmxhZ3NbcWUtPnBh cmFtcy5lbmdpbmUtPmlkXSB8PSBJOTE1X1NGX1NVQk1JVFRJTkc7Cj4gKwlyZXQgPSBkZXZfcHJp di0+Z3QuZXhlY2J1Zl9maW5hbCgmcWUtPnBhcmFtcyk7Cj4gKwlzY2hlZHVsZXItPmZsYWdzW3Fl LT5wYXJhbXMuZW5naW5lLT5pZF0gJj0gfkk5MTVfU0ZfU1VCTUlUVElORzsKPiArCj4gKwkvKgo+ ICsJICogRG9uJ3QgZG8gYW55IGNsZWFuIHVwIG9uIGZhaWx1cmUgYmVjYXVzZSB0aGUgY2FsbGVy IHdpbGwKPiArCSAqIGRvIGl0IGFsbCBhbnl3YXkuCj4gKwkgKi8KPiArCWlmIChyZXQpCj4gKwkJ cmV0dXJuIHJldDsKPiArCj4gKwkvKiBOZWVkIHRvIHJlbGVhc2UgYW55IHJlc291cmNlcyBoZWxk IGJ5IHRoZSBub2RlOiAqLwo+ICsJcWUtPnN0YXR1cyA9IEk5MTVfU1FTX0NPTVBMRVRFOwo+ICsJ aTkxNV9zY2hlZHVsZXJfY2xlYW5fbm9kZShxZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaTkxNV9zY2hlZHVsZXJfY291bnRfaW5jb21wbGV0 ZShzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlcikKPiArewo+ICsJaW50IGUsIGluY29t cGxldGUgPSAwOwo+ICsKPiArCWZvciAoZSA9IDA7IGUgPCBJOTE1X05VTV9FTkdJTkVTOyBlKysp Cj4gKwkJaW5jb21wbGV0ZSArPSBzY2hlZHVsZXItPmNvdW50c1tlXS5xdWV1ZWQgKyBzY2hlZHVs ZXItPmNvdW50c1tlXS5mbHlpbmc7Cj4gKwo+ICsJcmV0dXJuIGluY29tcGxldGU7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9leGVjYnVmZmVyIC0gU3VibWl0IGEg YmF0Y2ggYnVmZmVyIHJlcXVlc3QgdG8gdGhlCj4gKyAqIHNjaGVkdWxlci4KPiArICogQHFlOiBU aGUgYmF0Y2ggYnVmZmVyIHJlcXVlc3QgdG8gYmUgcXVldWVkLgo+ICsgKiBUaGUgZXhwZWN0YXRp b24gaXMgdGhlIHFlIHBhc3NlZCBpbiBpcyBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlLiBUaGlzCj4g KyAqIGZ1bmN0aW9uIHdpbGwgY29weSBpdHMgY29udGVudHMgaW50byBhIGZyZXNobHkgYWxsb2Nh dGVkIGxpc3Qgbm9kZS4gVGhlCj4gKyAqIG5ldyBub2RlIHRha2VzIG93bmVyc2hpcCBvZiBzYWlk IGNvbnRlbnRzIHNvIHRoZSBvcmlnaW5hbCBxZSBzaG91bGQgc2ltcGx5Cj4gKyAqIGJlIGRpc2Nh cmRlZCBhbmQgbm90IGNsZWFuZWQgdXAgKGkuZS4gZG9uJ3QgZnJlZSBtZW1vcnkgaXQgcG9pbnRz IHRvIG9yCj4gKyAqIGRlcmVmZXJlbmNlIG9iamVjdHMgaXQgaG9sZHMpLiBUaGUgbm9kZSBpcyBh ZGRlZCB0byB0aGUgc2NoZWR1bGVyJ3MgcXVldWUKPiArICogYW5kIHRoZSBiYXRjaCBidWZmZXIg d2lsbCBiZSBzdWJtaXR0ZWQgdG8gdGhlIGhhcmR3YXJlIGF0IHNvbWUgZnV0dXJlCj4gKyAqIHBv aW50IGluIHRpbWUgKHdoaWNoIG1heSBiZSBpbW1lZGlhdGVseSwgYmVmb3JlIHJldHVybmluZyBv ciBtYXkgYmUgcXVpdGUKPiArICogYSBsb3QgbGF0ZXIpLgo+ICsgKi8KPiAraW50IGk5MTVfc2No ZWR1bGVyX3F1ZXVlX2V4ZWNidWZmZXIoc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5 ICpxZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShxZS0+cGFyYW1zLmRldik7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciA9 IGRldl9wcml2LT5zY2hlZHVsZXI7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUg PSBxZS0+cGFyYW1zLmVuZ2luZTsKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRy eSAqbm9kZTsKPiArCWJvb2wgbm90X2ZseWluZzsKPiArCWludCBpLCBlOwo+ICsJaW50IGluY29t cGxldGU7Cj4gKwo+ICsJLyogQnlwYXNzIHRoZSBzY2hlZHVsZXIgYW5kIHNlbmQgdGhlIGJ1ZmZl ciBpbW1lZGlhdGVseT8gKi8KPiArCWlmICgxLyohaTkxNS5lbmFibGVfc2NoZWR1bGVyKi8pCj4g KwkJcmV0dXJuIGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2V4ZWNidWZmZXJfYnlwYXNzKHFlKTsKPiAr Cj4gKwlub2RlID0ga21hbGxvYyhzaXplb2YoKm5vZGUpLCBHRlBfS0VSTkVMKTsKPiArCWlmICgh bm9kZSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwkqbm9kZSA9ICpxZTsKPiArCUlOSVRf TElTVF9IRUFEKCZub2RlLT5saW5rKTsKPiArCW5vZGUtPnN0YXR1cyA9IEk5MTVfU1FTX1FVRVVF RDsKPiArCW5vZGUtPnN0YW1wICA9IGppZmZpZXM7Cj4gKwlpOTE1X2dlbV9yZXF1ZXN0X3JlZmVy ZW5jZShub2RlLT5wYXJhbXMucmVxdWVzdCk7Cj4gKwo+ICsJV0FSTl9PTihub2RlLT5wYXJhbXMu cmVxdWVzdC0+c2NoZWR1bGVyX3FlKTsKPiArCW5vZGUtPnBhcmFtcy5yZXF1ZXN0LT5zY2hlZHVs ZXJfcWUgPSBub2RlOwo+ICsKPiArCS8qCj4gKwkgKiBOZWVkIHRvIGRldGVybWluZSB0aGUgbnVt YmVyIG9mIGluY29tcGxldGUgZW50cmllcyBpbiB0aGUgbGlzdCBhcwo+ICsJICogdGhhdCB3aWxs IGJlIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGRlcGVuZGVuY3kgbGlzdC4KPiArCSAqCj4gKwkg KiBOb3RlIHRoYXQgdGhlIGFsbG9jYXRpb24gbXVzdCBub3QgYmUgbWFkZSB3aXRoIHRoZSBzcGlu bG9jayBhY3F1aXJlZAo+ICsJICogYXMga21hbGxvYyBjYW4gc2xlZXAuIEhvd2V2ZXIsIHRoZSB1 bmxvY2svcmVsb2NrIGlzIHNhZmUgYmVjYXVzZSBubwo+ICsJICogbmV3IGVudHJpZXMgY2FuIGJl IHF1ZXVlZCB1cCBkdXJpbmcgdGhlIHVubG9jayBhcyB0aGUgaTkxNSBkcml2ZXIKPiArCSAqIG11 dGV4IGlzIHN0aWxsIGhlbGQuIEVudHJpZXMgY291bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0 IGJ1dCB0aGF0Cj4gKwkgKiBqdXN0IG1lYW5zIHRoZSBkZXBfbGlzdCB3aWxsIGJlIG92ZXItYWxs b2NhdGVkIHdoaWNoIGlzIGZpbmUuCj4gKwkgKi8KPiArCXNwaW5fbG9ja19pcnEoJnNjaGVkdWxl ci0+bG9jayk7Cj4gKwlpbmNvbXBsZXRlID0gaTkxNV9zY2hlZHVsZXJfY291bnRfaW5jb21wbGV0 ZShzY2hlZHVsZXIpOwo+ICsKPiArCS8qIFRlbXBvcmFyaWx5IHVubG9jayB0byBhbGxvY2F0ZSBt ZW1vcnk6ICovCj4gKwlzcGluX3VubG9ja19pcnEoJnNjaGVkdWxlci0+bG9jayk7Cj4gKwlpZiAo aW5jb21wbGV0ZSkgewo+ICsJCW5vZGUtPmRlcF9saXN0ID0ga21hbGxvY19hcnJheShpbmNvbXBs ZXRlLAo+ICsJCQkJCSAgICAgICBzaXplb2YoKm5vZGUtPmRlcF9saXN0KSwKPiArCQkJCQkgICAg ICAgR0ZQX0tFUk5FTCk7Cj4gKwkJaWYgKCFub2RlLT5kZXBfbGlzdCkgewo+ICsJCQlrZnJlZShu b2RlKTsKPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwkJfQo+ICsJfSBlbHNlCj4gKwkJbm9kZS0+ ZGVwX2xpc3QgPSBOVUxMOwo+ICsKPiArCXNwaW5fbG9ja19pcnEoJnNjaGVkdWxlci0+bG9jayk7 Cj4gKwlub2RlLT5udW1fZGVwcyA9IDA7Cj4gKwo+ICsJaWYgKG5vZGUtPmRlcF9saXN0KSB7Cj4g KwkJZm9yIChlID0gMDsgZSA8IEk5MTVfTlVNX0VOR0lORVM7IGUrKykKPiArCQkJaTkxNV9nZW5l cmF0ZV9kZXBlbmRlbmNpZXMoc2NoZWR1bGVyLCBub2RlLCBlKTsKPiArCj4gKwkJV0FSTl9PTihu b2RlLT5udW1fZGVwcyA+IGluY29tcGxldGUpOwo+ICsJfQo+ICsKPiArCW5vZGUtPnByaW9yaXR5 ID0gY2xhbXAobm9kZS0+cHJpb3JpdHksCj4gKwkJCSAgICAgICBzY2hlZHVsZXItPnByaW9yaXR5 X2xldmVsX21pbiwKPiArCQkJICAgICAgIHNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWF4KTsK PiArCj4gKwlpZiAoKG5vZGUtPnByaW9yaXR5ID4gMCkgJiYgbm9kZS0+bnVtX2RlcHMpIHsKPiAr CQlpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1wX2NsZWFyKHNjaGVkdWxlcik7Cj4gKwo+ICsJ CWZvciAoaSA9IDA7IGkgPCBub2RlLT5udW1fZGVwczsgaSsrKQo+ICsJCQlpOTE1X3NjaGVkdWxl cl9wcmlvcml0eV9idW1wKHNjaGVkdWxlciwKPiArCQkJCQlub2RlLT5kZXBfbGlzdFtpXSwgbm9k ZS0+cHJpb3JpdHkpOwo+ICsJfQo+ICsKPiArCWxpc3RfYWRkX3RhaWwoJm5vZGUtPmxpbmssICZz Y2hlZHVsZXItPm5vZGVfcXVldWVbZW5naW5lLT5pZF0pOwo+ICsKPiArCW5vdF9mbHlpbmcgPSBp OTE1X3NjaGVkdWxlcl9jb3VudF9mbHlpbmcoc2NoZWR1bGVyLCBlbmdpbmUpIDwKPiArCQkJCQkJ IHNjaGVkdWxlci0+bWluX2ZseWluZzsKPiArCj4gKwlzY2hlZHVsZXItPmNvdW50c1tlbmdpbmUt PmlkXS5xdWV1ZWQrKzsKPiArCj4gKwlzcGluX3VubG9ja19pcnEoJnNjaGVkdWxlci0+bG9jayk7 Cj4gKwo+ICsJaWYgKG5vdF9mbHlpbmcpCj4gKwkJaTkxNV9zY2hlZHVsZXJfc3VibWl0KGVuZ2lu ZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpOTE1X3NjaGVkdWxl cl9ub3RpZnlfcmVxdWVzdCAtIE5vdGlmeSB0aGUgc2NoZWR1bGVyIHRoYXQgdGhlIGdpdmVuCj4g KyAqIHJlcXVlc3QgaGFzIGNvbXBsZXRlZCBvbiB0aGUgaGFyZHdhcmUuCj4gKyAqIEByZXE6IFJl cXVlc3Qgc3RydWN0dXJlIHdoaWNoIGhhcyBjb21wbGV0ZWQKPiArICogQHByZWVtcHQ6IERpZCBp dCBjb21wbGV0ZSBwcmUtZW1wdGl2ZWx5Pwo+ICsgKiBBIHNlcXVlbmNlIG51bWJlciBoYXMgcG9w cGVkIG91dCBvZiB0aGUgaGFyZHdhcmUgYW5kIHRoZSByZXF1ZXN0IGhhbmRsaW5nCj4gKyAqIGNv ZGUgaGFzIG1hcHBlZCBpdCBiYWNrIHRvIGEgcmVxdWVzdCBhbmQgd2lsbCBtYXJrIHRoYXQgcmVx dWVzdCBjb21wbGV0ZS4KPiArICogSXQgYWxzbyBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIG5vdGlm eSB0aGUgc2NoZWR1bGVyIGFib3V0IHRoZSBjb21wbGV0aW9uCj4gKyAqIHNvIHRoZSBzY2hlZHVs ZXIncyBub2RlIGNhbiBiZSB1cGRhdGVkIGFwcHJvcHJpYXRlbHkuCj4gKyAqIFJldHVybnMgdHJ1 ZSBpZiB0aGUgcmVxdWVzdCBpcyBzY2hlZHVsZXIgbWFuYWdlZCwgZmFsc2UgaWYgbm90LiBUaGUg cmV0dXJuCj4gKyAqIHZhbHVlIGlzIGNvbWJpbmVkIGZvciBhbGwgZnJlc2hseSBjb21wbGV0ZWQg cmVxdWVzdHMgYW5kIGlmIGFueSB3ZXJlIHRydWUKPiArICogdGhlbiBpOTE1X3NjaGVkdWxlcl93 YWtldXAoKSBpcyBjYWxsZWQgc28gdGhlIHNjaGVkdWxlciBjYW4gZG8gZnVydGhlcgo+ICsgKiBw cm9jZXNzaW5nIChzdWJtaXQgbW9yZSB3b3JrKSBhdCB0aGUgZW5kLgo+ICsgKi8KPiArYm9vbCBp OTE1X3NjaGVkdWxlcl9ub3RpZnlfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJlcSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShyZXEtPmVuZ2luZS0+ZGV2KTsKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVy ID0gZGV2X3ByaXYtPnNjaGVkdWxlcjsKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9l bnRyeSAqbm9kZSA9IHJlcS0+c2NoZWR1bGVyX3FlOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsK PiArCj4gKwlpZiAoIW5vZGUpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXNwaW5fbG9ja19p cnFzYXZlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKPiArCj4gKwlXQVJOX09OKCFJOTE1X1NR U19JU19GTFlJTkcobm9kZSkpOwo+ICsKPiArCS8qIE5vZGUgd2FzIGluIGZsaWdodCBzbyBtYXJr IGl0IGFzIGNvbXBsZXRlLiAqLwo+ICsJaWYgKHJlcS0+Y2FuY2VsbGVkKQo+ICsJCW5vZGUtPnN0 YXR1cyA9IEk5MTVfU1FTX0RFQUQ7Cj4gKwllbHNlCj4gKwkJbm9kZS0+c3RhdHVzID0gSTkxNV9T UVNfQ09NUExFVEU7Cj4gKwo+ICsJc2NoZWR1bGVyLT5jb3VudHNbcmVxLT5lbmdpbmUtPmlkXS5m bHlpbmctLTsKPiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZHVsZXItPmxvY2ss IGZsYWdzKTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1 X3NjaGVkdWxlcl9yZW1vdmVfZGVwZW5kZW50KHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1 bGVyLAo+ICsJCQkJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpyZW1vdmUpCj4g K3sKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZTsKPiArCWludCBp LCByOwo+ICsJaW50IGNvdW50ID0gMDsKPiArCj4gKwkvKgo+ICsJICogRW5zdXJlIHRoYXQgYSBu b2RlIGlzIG5vdCBiZWluZyByZW1vdmVkIHdoaWNoIGlzIHN0aWxsIGRlcGVuZGVudAo+ICsJICog dXBvbiBvdGhlciAobm90IGNvbXBsZXRlZCkgd29yay4gSWYgdGhhdCBoYXBwZW5zLCBpdCBpbXBs aWVzCj4gKwkgKiBzb21ldGhpbmcgaGFzIGdvbmUgdmVyeSB3cm9uZyB3aXRoIHRoZSBkZXBlbmRl bmN5IHRyYWNraW5nISBOb3RlCj4gKwkgKiB0aGF0IHRoZXJlIGlzIG5vIG5lZWQgdG8gd29ycnkg aWYgdGhpcyBub2RlIGhhcyBiZWVuIGV4cGxpY2l0bHkKPiArCSAqIGtpbGxlZCBmb3Igc29tZSBy ZWFzb24gLSBpdCBtaWdodCBiZSBiZWluZyBraWxsZWQgYmVmb3JlIGl0IGdvdAo+ICsJICogc2Vu dCB0byB0aGUgaGFyZHdhcmUuCj4gKwkgKi8KPiArCWlmIChyZW1vdmUtPnN0YXR1cyAhPSBJOTE1 X1NRU19ERUFEKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IHJlbW92ZS0+bnVtX2RlcHM7IGkrKykK PiArCQkJaWYgKChyZW1vdmUtPmRlcF9saXN0W2ldKSAmJgo+ICsJCQkgICAgKCFJOTE1X1NRU19J U19DT01QTEVURShyZW1vdmUtPmRlcF9saXN0W2ldKSkpCj4gKwkJCQljb3VudCsrOwo+ICsJCVdB Uk5fT04oY291bnQpOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBSZW1vdmUgdGhpcyBub2RlIGZy b20gdGhlIGRlcGVuZGVuY3kgbGlzdHMgb2YgYW55IG90aGVyIG5vZGUgd2hpY2gKPiArCSAqIG1p Z2h0IGJlIHdhaXRpbmcgb24gaXQuCj4gKwkgKi8KPiArCWZvciAociA9IDA7IHIgPCBJOTE1X05V TV9FTkdJTkVTOyByKyspIHsKPiArCQlmb3JfZWFjaF9zY2hlZHVsZXJfbm9kZShub2RlLCByKSB7 Cj4gKwkJCWZvciAoaSA9IDA7IGkgPCBub2RlLT5udW1fZGVwczsgaSsrKSB7Cj4gKwkJCQlpZiAo bm9kZS0+ZGVwX2xpc3RbaV0gIT0gcmVtb3ZlKQo+ICsJCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJ CW5vZGUtPmRlcF9saXN0W2ldID0gTlVMTDsKCkNhbiB0aGUgc2FtZSBub2RlIGJlIGxpc3RlZCBp biBvdGhlcidzIG5vZGUgZGVwZW5kZW5jeSBsaXN0IG11bHRpcGxlIAp0aW1lcz8gSWYgbm90IHlv dSBjb3VsZCBicmVhayBhZnRlciBjbGVhcmluZyBpdCBhbmQgbm90IGl0ZXJhdGUgdGhlIHJlc3Qg Cm9mIHRoZSBsaXN0LgoKPiArCQkJfQo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIGk5MTVfc2NoZWR1bGVyX3dha2V1cCAtIHdha2UgdGhlIHNjaGVk dWxlcidzIHdvcmtlciB0aHJlYWQKPiArICogQGRldjogRFJNIGRldmljZQo+ICsgKiBDYWxsZWQg YXQgdGhlIGVuZCBvZiBzZXFubyBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBpZiBhbnkgcmVxdWVzdCBo YXMKPiArICogY29tcGxldGVkIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBzY2hlZHVsZXIgbm9kZS4K PiArICovCj4gK3ZvaWQgaTkxNV9zY2hlZHVsZXJfd2FrZXVwKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCj4gK3sKPiArCS8qIFhYWDogTmVlZCB0byBjYWxsIGk5MTVfc2NoZWR1bGVyX3JlbW92ZSgp IHZpYSB3b3JrIGhhbmRsZXIuICovCj4gK30KPiArCj4gKy8qKgo+ICsgKiBpOTE1X3NjaGVkdWxl cl9jbGVhbl9ub2RlIC0gZnJlZSB1cCBhbnkgYWxsb2NhdGlvbnMvcmVmZXJlbmNlcwo+ICsgKiBh c3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHNjaGVkdWxlciBxdWV1ZSBlbnRyeS4KPiArICogQG5v ZGU6IFF1ZXVlIGVudHJ5IHN0cnVjdHVyZSB3aGljaCBpcyBjb21wbGV0ZQo+ICsgKiBBZnRlciBh IGdpdmUgYmF0Y2ggYnVmZmVyIGNvbXBsZXRlcyBvbiB0aGUgaGFyZHdhcmUsIGFsbCB0aGUgaW5m b3JtYXRpb24KPiArICogcmVxdWlyZWQgdG8gcmVzdWJtaXQgaXQgaXMgbm8gbG9uZ2VyIHJlcXVp cmVkLiBIb3dldmVyLCB0aGUgbm9kZSBlbnRyeQo+ICsgKiBpdHNlbGYgbWlnaHQgc3RpbGwgYmUg cmVxdWlyZWQgZm9yIHRyYWNraW5nIHB1cnBvc2VzIGZvciBhIHdoaWxlIGxvbmdlci4KPiArICog VGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFzIHNvb24gYXMgdGhlIG5vZGUgaXMga25v d24gdG8gYmUgY29tcGxldGUKPiArICogc28gdGhhdCB0aGVzZSByZXNvdXJjZXMgbWF5IGJlIGZy ZWVkIGV2ZW4gdGhvdWdoIHRoZSBub2RlIGl0c2VsZiBtaWdodAo+ICsgKiBoYW5nIGFyb3VuZC4K PiArICovCj4gK3ZvaWQgaTkxNV9zY2hlZHVsZXJfY2xlYW5fbm9kZShzdHJ1Y3QgaTkxNV9zY2hl ZHVsZXJfcXVldWVfZW50cnkgKm5vZGUpCj4gK3sKPiArCWlmICghSTkxNV9TUVNfSVNfQ09NUExF VEUobm9kZSkpIHsKPiArCQlXQVJOKCFub2RlLT5wYXJhbXMucmVxdWVzdC0+Y2FuY2VsbGVkLAo+ ICsJCSAgICAgIkNsZWFuaW5nIGFjdGl2ZSBub2RlOiAlZCFcbiIsIG5vZGUtPnN0YXR1cyk7Cj4g KwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWlmIChub2RlLT5wYXJhbXMuYmF0Y2hfb2JqKSB7Cj4g KwkJLyoKPiArCQkgKiBUaGUgYmF0Y2ggYnVmZmVyIG11c3QgYmUgdW5waW5uZWQgYmVmb3JlIGl0 IGlzIHVucmVmZXJlbmNlZAo+ICsJCSAqIG90aGVyd2lzZSB0aGUgdW5waW4gZmFpbHMgd2l0aCBh IG1pc3Npbmcgdm1hIT8KPiArCQkgKi8KPiArCQlpZiAobm9kZS0+cGFyYW1zLmRpc3BhdGNoX2Zs YWdzICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUpCj4gKwkJCWk5MTVfZ2VtX2V4ZWNidWZfcmVsZWFz ZV9iYXRjaF9vYmoobm9kZS0+cGFyYW1zLmJhdGNoX29iaik7Cj4gKwo+ICsJCW5vZGUtPnBhcmFt cy5iYXRjaF9vYmogPSBOVUxMOwo+ICsJfQo+ICsKPiArCS8qIEFuZCBhbnl0aGluZyBlbHNlIG93 bmVkIGJ5IHRoZSBub2RlOiAqLwo+ICsJaWYgKG5vZGUtPnBhcmFtcy5jbGlwcmVjdHMpIHsKPiAr CQlrZnJlZShub2RlLT5wYXJhbXMuY2xpcHJlY3RzKTsKPiArCQlub2RlLT5wYXJhbXMuY2xpcHJl Y3RzID0gTlVMTDsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaTkxNV9zY2hlZHVsZXJf cmVtb3ZlKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAo+ICsJCQkJICBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKnJlbW92 ZSkKPiArewo+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlLCAqbm9k ZV9uZXh0Owo+ICsJYm9vbCBkb19zdWJtaXQ7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmc2NoZWR1 bGVyLT5sb2NrKTsKPiArCj4gKwlJTklUX0xJU1RfSEVBRChyZW1vdmUpOwo+ICsJbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG5vZGVfbmV4dCwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtl bmdpbmUtPmlkXSwgbGluaykgewo+ICsJCWlmICghSTkxNV9TUVNfSVNfQ09NUExFVEUobm9kZSkp Cj4gKwkJCWJyZWFrOwo+ICsKPiArCQlsaXN0X2RlbCgmbm9kZS0+bGluayk7Cj4gKwkJbGlzdF9h ZGQoJm5vZGUtPmxpbmssIHJlbW92ZSk7CgpsaXN0X21vdmUKCj4gKwo+ICsJCS8qIFN0cmlwIHRo ZSBkZXBlbmRlbmN5IGluZm8gd2hpbGUgdGhlIG11dGV4IGlzIHN0aWxsIGxvY2tlZCAqLwo+ICsJ CWk5MTVfc2NoZWR1bGVyX3JlbW92ZV9kZXBlbmRlbnQoc2NoZWR1bGVyLCBub2RlKTsKPiArCj4g KwkJY29udGludWU7CgpDb3VsZCBraWxsIHRoZSBjb250aW51ZS4gOikKCj4gKwl9Cj4gKwo+ICsJ LyoKPiArCSAqIFJlbGVhc2UgdGhlIGludGVycnVwdCByZWZlcmVuY2UgY291bnQgaWYgdGhlcmUg YXJlIG5vIGxvbmdlciBhbnkKPiArCSAqIG5vZGVzIHRvIHdvcnJ5IGFib3V0Lgo+ICsJICovCj4g KwlpZiAobGlzdF9lbXB0eSgmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW2VuZ2luZS0+aWRdKSAmJgo+ ICsJICAgIChzY2hlZHVsZXItPmZsYWdzW2VuZ2luZS0+aWRdICYgSTkxNV9TRl9JTlRFUlJVUFRT X0VOQUJMRUQpKSB7Cj4gKwkJZW5naW5lLT5pcnFfcHV0KGVuZ2luZSk7Cj4gKwkJc2NoZWR1bGVy LT5mbGFnc1tlbmdpbmUtPmlkXSAmPSB+STkxNV9TRl9JTlRFUlJVUFRTX0VOQUJMRUQ7Cj4gKwl9 Cj4gKwo+ICsJLyogTGF1bmNoIG1vcmUgcGFja2V0cyBub3c/ICovCj4gKwlkb19zdWJtaXQgPSAo c2NoZWR1bGVyLT5jb3VudHNbZW5naW5lLT5pZF0ucXVldWVkID4gMCkgJiYKPiArCQkgICAgKHNj aGVkdWxlci0+Y291bnRzW2VuZ2luZS0+aWRdLmZseWluZyA8IHNjaGVkdWxlci0+bWluX2ZseWlu Zyk7Cj4gKwo+ICsJc3Bpbl91bmxvY2tfaXJxKCZzY2hlZHVsZXItPmxvY2spOwo+ICsKPiArCXJl dHVybiBkb19zdWJtaXQ7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9zY2hlZHVsZXJfcHJvY2Vzc193 b3JrKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmdpbmUtPmRldik7Cj4gKwlzdHJ1Y3Qg aTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7Cj4gKwlzdHJ1 Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGU7Cj4gKwlib29sIGRvX3N1Ym1pdDsK PiArCXN0cnVjdCBsaXN0X2hlYWQgcmVtb3ZlOwoKQ291bGQgZG8gTElTVF9IRUFEKHJlbW92ZSk7 IHRvIGRlY2xhcmUgYW4gZW1wdHkgbGlzdCBhbmQgdGhlbiB3b3VsZG4ndCAKaGF2ZSB0byBkbyBJ TklUX0xJU1RfSEVBRCBpbiBpOTE1X3NjaGVkdWxlcl9yZW1vdmUuIFdvdWxkIHByb2JhYmx5IGJl IApiZXR0ZXIgdG8gZ3JvdXAgdGhlIGxvZ2ljIHRvZ2V0aGVyIGxpa2UgdGhhdC4KCj4gKwo+ICsJ aWYgKGxpc3RfZW1wdHkoJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtlbmdpbmUtPmlkXSkpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCS8qIFJlbW92ZSBjb21wbGV0ZWQgbm9kZXMuICovCj4gKwlkb19zdWJt aXQgPSBpOTE1X3NjaGVkdWxlcl9yZW1vdmUoc2NoZWR1bGVyLCBlbmdpbmUsICZyZW1vdmUpOwo+ ICsKPiArCWlmICghZG9fc3VibWl0ICYmIGxpc3RfZW1wdHkoJnJlbW92ZSkpCj4gKwkJcmV0dXJu Owo+ICsKPiArCS8qIE5lZWQgdG8gZ3JhYiB0aGUgcG0gbG9jayBvdXRzaWRlIG9mIHRoZSBtdXRl eCBsb2NrICovCj4gKwlpZiAoZG9fc3VibWl0KQo+ICsJCWludGVsX3J1bnRpbWVfcG1fZ2V0KGRl dl9wcml2KTsKPiArCj4gKwltdXRleF9sb2NrKCZlbmdpbmUtPmRldi0+c3RydWN0X211dGV4KTsK PiArCj4gKwlpZiAoZG9fc3VibWl0KQo+ICsJCWk5MTVfc2NoZWR1bGVyX3N1Ym1pdChlbmdpbmUp Owo+ICsKPiArCXdoaWxlICghbGlzdF9lbXB0eSgmcmVtb3ZlKSkgewo+ICsJCW5vZGUgPSBsaXN0 X2ZpcnN0X2VudHJ5KCZyZW1vdmUsIHR5cGVvZigqbm9kZSksIGxpbmspOwo+ICsJCWxpc3RfZGVs KCZub2RlLT5saW5rKTsKPiArCj4gKwkJLyogRnJlZSB1cCBhbGwgdGhlIERSTSByZWZlcmVuY2Vz ICovCj4gKwkJaTkxNV9zY2hlZHVsZXJfY2xlYW5fbm9kZShub2RlKTsKPiArCj4gKwkJLyogQW5k IGFueXRoaW5nIGVsc2Ugb3duZWQgYnkgdGhlIG5vZGU6ICovCj4gKwkJbm9kZS0+cGFyYW1zLnJl cXVlc3QtPnNjaGVkdWxlcl9xZSA9IE5VTEw7Cj4gKwkJaTkxNV9nZW1fcmVxdWVzdF91bnJlZmVy ZW5jZShub2RlLT5wYXJhbXMucmVxdWVzdCk7Cj4gKwkJa2ZyZWUobm9kZS0+ZGVwX2xpc3QpOwo+ ICsJCWtmcmVlKG5vZGUpOwo+ICsJfQo+ICsKPiArCW11dGV4X3VubG9jaygmZW5naW5lLT5kZXYt PnN0cnVjdF9tdXRleCk7Cj4gKwo+ICsJaWYgKGRvX3N1Ym1pdCkKPiArCQlpbnRlbF9ydW50aW1l X3BtX3B1dChkZXZfcHJpdik7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9zY2hlZHVsZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVy LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmM4OTVjNGMKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaAo+ IEBAIC0wLDAgKzEsMTEzIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBD b3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM Cj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4g KyNpZm5kZWYgX0k5MTVfU0NIRURVTEVSX0hfCj4gKyNkZWZpbmUgX0k5MTVfU0NIRURVTEVSX0hf Cj4gKwo+ICtlbnVtIGk5MTVfc2NoZWR1bGVyX3F1ZXVlX3N0YXR1cyB7Cj4gKwkvKiBMaW1ibzog Ki8KPiArCUk5MTVfU1FTX05PTkUgPSAwLAo+ICsJLyogTm90IHlldCBzdWJtaXR0ZWQgdG8gaGFy ZHdhcmU6ICovCj4gKwlJOTE1X1NRU19RVUVVRUQsCj4gKwkvKiBQb3BwZWQgZnJvbSBxdWV1ZSwg cmVhZHkgdG8gZmx5OiAqLwo+ICsJSTkxNV9TUVNfUE9QUEVELAo+ICsJLyogU2VudCB0byBoYXJk d2FyZSBmb3IgcHJvY2Vzc2luZzogKi8KPiArCUk5MTVfU1FTX0ZMWUlORywKPiArCS8qIEZpbmlz aGVkIHByb2Nlc3Npbmcgb24gdGhlIGhhcmR3YXJlOiAqLwo+ICsJSTkxNV9TUVNfQ09NUExFVEUs Cj4gKwkvKiBLaWxsZWQgYnkgd2F0Y2hkb2cgb3IgY2F0YXN0cm9waGljIHN1Ym1pc3Npb24gZmFp bHVyZTogKi8KPiArCUk5MTVfU1FTX0RFQUQsCj4gKwkvKiBMaW1pdCB2YWx1ZSBmb3IgdXNlIHdp dGggYXJyYXlzL2xvb3BzICovCj4gKwlJOTE1X1NRU19NQVgKPiArfTsKPiArCj4gKyNkZWZpbmUg STkxNV9TUVNfSVNfUVVFVUVEKG5vZGUpCSgoKG5vZGUpLT5zdGF0dXMgPT0gSTkxNV9TUVNfUVVF VUVEKSkKPiArI2RlZmluZSBJOTE1X1NRU19JU19GTFlJTkcobm9kZSkJKCgobm9kZSktPnN0YXR1 cyA9PSBJOTE1X1NRU19GTFlJTkcpKQo+ICsjZGVmaW5lIEk5MTVfU1FTX0lTX0NPTVBMRVRFKG5v ZGUpCSgoKG5vZGUpLT5zdGF0dXMgPT0gSTkxNV9TUVNfQ09NUExFVEUpIHx8IFwKPiArCQkJCQkg KChub2RlKS0+c3RhdHVzID09IEk5MTVfU1FTX0RFQUQpKQo+ICsKPiArc3RydWN0IGk5MTVfc2No ZWR1bGVyX29ial9lbnRyeSB7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ ICsJYm9vbCByZWFkX29ubHk7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVl dWVfZW50cnkgewo+ICsJLyogQW55IGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIHN1Ym1pdCB0aGlz IGJhdGNoIGJ1ZmZlciB0byB0aGUgaGFyZHdhcmUgKi8KPiArCXN0cnVjdCBpOTE1X2V4ZWNidWZm ZXJfcGFyYW1zIHBhcmFtczsKPiArCj4gKwkvKiAtMTAyMyA9IGxvd2VzdCBwcmlvcml0eSwgMCA9 IGRlZmF1bHQsIDEwMjMgPSBoaWdoZXN0ICovCj4gKwlpbnQzMl90IHByaW9yaXR5Owo+ICsJYm9v bCBidW1wZWQ7Cj4gKwo+ICsJLyogT2JqZWN0cyByZWZlcmVuY2VkIGJ5IHRoaXMgYmF0Y2ggYnVm ZmVyICovCj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfb2JqX2VudHJ5ICpvYmpzOwo+ICsJaW50 IG51bV9vYmpzOwo+ICsKPiArCS8qIEJhdGNoIGJ1ZmZlcnMgdGhpcyBvbmUgaXMgZGVwZW5kZW50 IHVwb24gKi8KPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqKmRlcF9saXN0 Owo+ICsJaW50IG51bV9kZXBzOwo+ICsKPiArCWVudW0gaTkxNV9zY2hlZHVsZXJfcXVldWVfc3Rh dHVzIHN0YXR1czsKPiArCXVuc2lnbmVkIGxvbmcgc3RhbXA7Cj4gKwo+ICsJLyogTGlzdCBvZiBh bGwgc2NoZWR1bGVyIHF1ZXVlIGVudHJ5IG5vZGVzICovCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGxp bms7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfbm9kZV9zdGF0ZXMgewo+ICsJ dWludDMyX3QgZmx5aW5nOwo+ICsJdWludDMyX3QgcXVldWVkOwo+ICt9Owo+ICsKPiArc3RydWN0 IGk5MTVfc2NoZWR1bGVyIHsKPiArCXN0cnVjdCBsaXN0X2hlYWQgbm9kZV9xdWV1ZVtJOTE1X05V TV9FTkdJTkVTXTsKPiArCXVpbnQzMl90IGZsYWdzW0k5MTVfTlVNX0VOR0lORVNdOwo+ICsJc3Bp bmxvY2tfdCBsb2NrOwo+ICsKPiArCS8qIE5vZGUgY291bnRzOiAqLwo+ICsJc3RydWN0IGk5MTVf c2NoZWR1bGVyX25vZGVfc3RhdGVzIGNvdW50c1tJOTE1X05VTV9FTkdJTkVTXTsKPiArCj4gKwkv KiBUdW5pbmcgcGFyYW1ldGVyczogKi8KPiArCWludDMyX3QgcHJpb3JpdHlfbGV2ZWxfbWluOwo+ ICsJaW50MzJfdCBwcmlvcml0eV9sZXZlbF9tYXg7Cj4gKwlpbnQzMl90IHByaW9yaXR5X2xldmVs X2J1bXA7Cj4gKwlpbnQzMl90IHByaW9yaXR5X2xldmVsX3ByZWVtcHQ7Cj4gKwl1aW50MzJfdCBt aW5fZmx5aW5nOwo+ICt9Owo+ICsKPiArLyogRmxhZyBiaXRzIGZvciBpOTE1X3NjaGVkdWxlcjo6 ZmxhZ3MgKi8KPiArZW51bSB7Cj4gKwlJOTE1X1NGX0lOVEVSUlVQVFNfRU5BQkxFRCAgPSAoMSA8 PCAwKSwKPiArCUk5MTVfU0ZfU1VCTUlUVElORyAgICAgICAgICA9ICgxIDw8IDEpLAo+ICt9Owo+ ICsKPiArYm9vbCBpOTE1X3NjaGVkdWxlcl9pc19lbmFibGVkKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwo+ICtpbnQgaTkxNV9zY2hlZHVsZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK PiArdm9pZCBpOTE1X3NjaGVkdWxlcl9kZXN0cm95KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdik7Cj4gK3ZvaWQgaTkxNV9zY2hlZHVsZXJfY2xlYW5fbm9kZShzdHJ1Y3QgaTkxNV9z Y2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGUpOwo+ICtpbnQgaTkxNV9zY2hlZHVsZXJfcXVldWVf ZXhlY2J1ZmZlcihzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKnFlKTsKPiArYm9v bCBpOTE1X3NjaGVkdWxlcl9ub3RpZnlfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSk7Cj4gK3ZvaWQgaTkxNV9zY2hlZHVsZXJfd2FrZXVwKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwo+ICsKPiArI2VuZGlmICAvKiBfSTkxNV9TQ0hFRFVMRVJfSF8gKi8KPgoKUmVnYXJk cywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK