From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Harrison Subject: Re: [PATCH 2/3] drm/i915: s/seqno/request/ tracking inside objects Date: Tue, 09 Sep 2014 15:14:29 +0100 Message-ID: <540F0B44.4040401@Intel.com> References: <1409995709-17996-1-git-send-email-chris@chris-wilson.co.uk> <1409995709-17996-2-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 099A789C28 for ; Tue, 9 Sep 2014 07:15:08 -0700 (PDT) In-Reply-To: <1409995709-17996-2-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: Daniel Vetter , Akash Goel List-Id: intel-gfx@lists.freedesktop.org SSBwdWxsZWQgYSBmcmVzaCB0cmVlIG9uIE1vbmRheSBhbmQgYXBwbGllZCB0aGlzIHNldCBvZiBw YXRjaGVzLiBUaGVyZSAKd2VyZSB0d28gY29uZmxpY3RzLiBJdCBsb29rcyBsaWtlIG5pZ2h0bHkg ZG9lcyBub3QgaGF2ZSAKJ2k5MTVfZ2VtX2NvbnRleHRfc2V0cGFyYW1faW9jdGwnIHlldCBidXQg dGhlIHRyZWUgdGhlIHBhdGNoZXMgY2FtZSBmcm9tIApkb2VzLiBBbHNvLCBteSB0cmVlIGhhcyAn RFJNX0k5MTVfQ1RYX0JBTl9QRVJJT0QnIGluc3RlYWQgb2YgCidjdHgtPmhhbmdfc3RhdHMuYmFu X3BlcmlvZF9zZWNvbmRzJy4KCkhvd2V2ZXIsIEkgY2FuIG9ubHkgYm9vdCBpZiBJIGhhdmUgYm90 aCBleGVjbGlzdHMgYW5kIFBQR1RUIGRpc2FibGVkLiAKV2l0aCBqdXN0IFBQR1RUIGVuYWJsZWQs IEkgZ2V0IGNvbnRpbnVvdXMgR1BVIGhhbmdzIGFuZCBub3RoaW5nIGV2ZXIgCmdldHMgcmVuZGVy ZWQuIFdpdGggZXhlY2xpc3RzIGVuYWJsZWQsIEkgZ2V0IGEgbnVsbCBwb2ludGVyIGRlcmVmZXJl bmNlIAppbiAnZXhlY2xpc3RzX2dldF9yaW5nJy4gV2l0aCBib3RoIGRpc2FibGVkLCBJIGNhbiBi b290IHRvIGFuIFVidW50dSAKZGVza3RvcCBidXQgc2hvcnRseSBhZnRlciBpdCBnb2VzIHBvcCB3 aXRoICdCVUdfT04ob2JqLT5hY3RpdmUgPT0gMCknIGluIAonaTkxNV9nZW1fb2JqZWN0X3JldGly ZV9fcmVhZCcuCgpUaGlzIGlzIHJ1bm5pbmcgb24gQkRXLgoKQW0gSSBtaXNzaW5nIHNvbWUgY3Jp dGljYWwgZWFybGllciBwYXRjaGVzPwoKVGhhbmtzLApKb2huLgoKCk9uIDA2LzA5LzIwMTQgMTA6 MjgsIENocmlzIFdpbHNvbiB3cm90ZToKPiBBdCB0aGUgaGVhcnQgb2YgdGhpcyBjaGFuZ2UgaXMg dGhhdCB0aGUgc2Vxbm8gaXMgYSB0b28gbG93IGxldmVsIG9mIGFuCj4gYWJzdHJhY3Rpb24gdG8g aGFuZGxlIHRoZSBncm93aW5nIGNvbXBsZXhpdGllcyBvZiBjb21tYW5kIHRyYWNraW5nLCBib3Ro Cj4gd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIG11bHRpcGxlIGNvbW1hbmQgcXVldWVzIHdpdGgg ZXhlY2xpc3RzIGFuZCB0aGUKPiBwb3RlbnRpYWwgZm9yIHJlb3JkZXJpbmcgd2l0aCBhIHNjaGVk dWxlci4gT24gdG9wIG9mIHRoZSBzZXFubyB3ZSBoYXZlCj4gdGhlIHJlcXVlc3QuIENvbmNlcHR1 YWxseSB0aGlzIGlzIGp1c3QgYSBmZW5jZSwgYnV0IGl0IGFsc28gaGFzCj4gc3Vic3RhbnRpYWwg Ym9va2tlZXBpbmcgb2YgaXRzIG93biBpbiBvcmRlciB0byB0cmFjayB0aGUgY29udGV4dCBhbmQK PiBiYXRjaCBpbiBmbGlnaHQsIGZvciBleGFtcGxlLiBJdCBpcyB0aGUgY2VudHJhbCBzdHJ1Y3R1 cmUgdXBvbiB3aGljaCB3ZQo+IGNhbiBleHRlbmQgd2l0aCBkZXBlbmRlbmN5IHRyYWNraW5nIGV0 IGFsLgo+Cj4gQXMgcmVnYXJkcyB0aGUgb2JqZWN0cywgdGhleSB3ZXJlIHVzaW5nIHRoZSBzZXFu byBhcyBhIHNpbXBsZSBmZW5jZSwKPiB1cG9uIHdoaWNoIGlzIGNoZWNrIG9yIGV2ZW4gd2FpdCB1 cG9uIGZvciBjb21tYW5kIGNvbXBsZXRpb24uIFRoaXMgcGF0Y2gKPiBleGNoYW5nZXMgdGhhdCBz ZXFuby9yaW5nIHBhaXIgd2l0aCB0aGUgcmVxdWVzdCBpdHNlbGYuIEZvciB0aGUKPiBtYWpvcml0 eSwgbGlmZXRpbWUgb2YgdGhlIHJlcXVlc3QgaXMgb3JkZXJlZCBieSBob3cgd2UgcmV0aXJlIG9i amVjdHMKPiB0aGVuIHJlcXVlc3RzLiBIb3dldmVyLCBib3RoIHRoZSB1bmxvY2tlZCB3YWl0cyBh bmQgcHJvYmluZyBlbHNld2hlcmUgZG8KPiBub3QgdGllIGludG8gdGhlIG5vcm1hbCByZXF1ZXN0 IGxpZmV0aW1lcyBhbmQgc28gd2UgbmVlZCB0byBpbnRyb2R1Y2UgYQo+IGtyZWYuIEV4dGVuZGlu ZyB0aGUgb2JqZWN0cyB0byB1c2UgdGhlIHJlcXVlc3QgYXMgdGhlIGZlbmNlIG5hdHVyYWxseQo+ IGV4dGVuZHMgdG8gc2VncmVnYXRpbmcgcmVhZC93cml0ZSBmZW5jZSB0cmFja2luZy4gVGhpcyBo YXMgc2lnbmlmaWNhbmNlCj4gZm9yIGl0IHJlZHVjZXMgdGhlIG51bWJlciBvZiBzZW1hcGhvcmVz IHdlIG5lZWQgdG8gZW1pdCwgcmVkdWNpbmcgdGhlCj4gbGlrZWxpaG9vZCBvZiAjNTQyMjYsIGFu ZCBpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugb3ZlcmFsbC4KPgo+IHYyOiBSZWJhc2UgYW5kIHNwbGl0 IG91dCB0aGUgb3J0aG9nb25hbCB0d2Vha3MuCj4KPiBBIHNpbGx5IGhhcHBlbmVkIHdpdGggdGhp cyBwYXRjaC4gSXQgc2VlbWVkIHRvIG51bGxpZnkgb3VyIGVhcmxpZXIKPiBzZXFuby12cy1pbnRl cnJ1cHQgdy9hLiBJIGNvdWxkIG5vdCBzcG90IHdoeSwgYnV0IGdlbjYrIHN0YXJ0ZWQgdG8gZmFp bAo+IHdpdGggbWlzc2VkIGludGVycnVwdHMgKGEgZ29vZCB0ZXN0IG9mIG91ciByb2J1c3RuZXNz IGhhbmRsaW5nKS4gU28gSQo+IHJpcHBlZCBvdXQgdGhlIGV4aXN0aW5nIEFDVEhEIHJlYWQgYW5k IHJlcGxhY2VkIGl0IHdpdGggYSBSSU5HX0hFQUQgdG8KPiBtYW51YWxseSBjaGVjayB3aGV0aGVy IHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlLiBUaGF0IGFsc28gaGFkIHRoZSBuaWNlCj4gY29uc2Vx dWVuY2Ugb2YgZm9yY2luZyBfX3dhaXRfcmVxdWVzdCgpIHRvIGJlaW5nIHRoZSBjZW50cmFsIGFy Yml0ZXIgb2YKPiByZXF1ZXN0IGNvbXBsZXRpb24uIE5vdGUgdGhhdCBkdXJpbmcgdGVzdGluZywg aXQgd2FzIG5vdCBlbm91Z2ggdG8KPiByZS1lbmFibGUgdGhlIG9sZCB3b3JrYXJvdW5kIG9mIGtl ZXBpbmcgYSBmb3JjZXdha2UgcmVmZXJlbmNlIHdoaWxzdAo+IHdhaXRpbmcgdXBvbiB0aGUgaW50 ZXJydXB0K3NlcW5vLgo+Cj4gVGhlIGtlZW5lciBleWVkIHJldmlld2VyIHdpbGwgYWxzbyBzcG90 IHRoYXQgdGhlIHJlc2V0X2NvdW50ZXIgaXMgbW92ZWQKPiBpbnRvIHRoZSByZXF1ZXN0IHNpbXBs aWZ5aW5nIF9fd2FpdF9yZXF1ZXN0KCkgY2FsbHNpdGVzIGFuZCByZWR1Y2luZyB0aGUKPiBudW1i ZXIgb2YgYXRvbWljIHJlYWRzIGJ5IHZpcnR1ZSBvZiBtb3ZpbmcgdGhlIGNoZWNrIGZvciBhIHBl bmRpbmcgR1BVCj4gcmVzZXQgdG8gdGhlIGVuZHBvaW50cyBvZiBHUFUgYWNjZXNzLgo+Cj4gdjM6 IEltcGxlbWVudCB0aGUgZ3JhbmQgcGxhbgo+Cj4gU2luY2UgZXhlY2xpc3QgbGFuZGVkIHdpdGgg aXRzIHVwc2lkZS1kb3duIGFic3RyYWN0aW9uLCB1bnZlaWwgdGhlIHBvd2VyCj4gb2YgdGhlIHJl cXVlc3QgdG8gcmVtb3ZlIGFsbCB0aGUgZHVwbGljYXRpb24uIFRvIGdhaW4gYWNjZXNzIHRvIGEg cmluZywKPiB5b3UgbXVzdCBhbGxvY2F0ZSBhIHJlcXVlc3QuIFRvIGFsbG9jYXRlIGEgcmVxdWVz dCB5b3UgbXVzdCBzcGVjaWZ5IHRoZQo+IGNvbnRleHQuIEVyZ28gYWxsIHJpbmcgY29tbWFuZHMg YXJlIGNhcmVmdWxseSB0cmFja2VkIGJ5IGluZGl2aWR1YWwKPiByZXF1ZXN0cyAod2hpY2ggZGVt YXJjYXRlIGEgc2luZ2xlIGNvbXBsZXRlIHRyYW5zYWN0aW9uIHdpdGggdGhlIEdQVSkgaW4KPiBh IGtub3duIGNvbnRleHQgKGxvZ2ljYWwgcGFydGl0aW9uaW5nIG9mIHRoZSBHUFUgd2l0aCBpdHMg b3duIHNldCBvZgo+IHJlZ2lzdGVycyBhbmQgcmluZ3MgLSB3aGljaCBtYXkgYmUgc2hhcmVkIHdp dGggb3RoZXIgcGFydGl0aW9ucyBmb3IKPiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkuCj4KPiB2 NDoKPgo+IFR3ZWFrIGxvY2tpbmcgYXJvdW5kIGV4ZWNsaXN0IHN1Ym1pc3Npb24gYW5kIHJlcXVl c3QgbGlzdHMgYW5kCj4gcmVtb3ZlIGR1cGxpY2F0ZWQgZXhlY2xpc3QgY29kZSBhbmQgdGhlIHBl cHBlcmluZyBvZiBleGVjbGlzdAo+IHNwZWNpZmljIGNvZGUgdGhyb3VnaG91dCB0aGUgY29yZS4K Pgo+IFRvIHNpbXBsaWZ5IHJlYmFzaW5nLCBJIHB1bGxlZCBpbiB0aGUgcy9yaW5nL2VuZ2luZS8g cmVuYW1lLCBpdCBhZGRzCj4gYSBmYWlyIGFtb3VudCBvZiBub2lzZSBvZiBsaXR0bGUgc2lnbmlm aWNhbmNlIGFuZCB2ZXJ5IGVhc3kgdG8gdHVuZSBvdXQuCj4KPiBUaGUgcGF0Y2ggaXRzZWxmIGNv bnNpc3RzIG9mIDMgaGVhdmlseSBpbnRlcnR3aW5lZCBwYXJ0czoKPgo+IDAuIFJlbmFtZSByaW5n IGFuZCBlbmdpbmUgdmFyaWFibGVzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGVpciB1c2FnZS4K PiAxLiBDaGFuZ2UgdGhlIHJpbmcgYWNjZXNzIEFQSSB0byByZXF1aXJlIHRoZSBjb250ZXh0IHVu ZGVyIHdoaWNoIHdlCj4gICAgIGFyZSBvcGVyYXRpbmcuIFRoaXMgZ2VuZXJhdGVzIGEgcmVxdWVz dCB3aGljaCB3ZSB1c2UgdG8gYnVpbGQgdXAgYQo+ICAgICByaW5nIHRyYW5zYWN0aW9uLiBUaGUg cmVxdWVzdCB0cmFja3MgcmVxdWlyZWQgZmx1c2hlcyBhbmQKPiAgICAgc2VyaWFsaXNhdGlvbiB3 aXRoIGJvdGggdGhlIEdQVSBjYWNoZXMsIG90aGVyIHJlcXVlc3RzIGFuZCB0aGUgQ1BVLgo+IDIu IFJlb3JkZXIgaW5pdGlhbGlzYXRpb24gc3VjaCB0aGF0IHdlIGhhdmUgYSBjbGVhcmx5IGRlZmlu ZWQgY29udGV4dAo+ICAgICBhbmQgZW5naW5lcyBmb3IgdGhlIGVhcmx5IHJpbmcgYWNjZXNzIG9u IG1vZHVsZSBsb2FkLCByZXN1bWUgYW5kCj4gICAgIHJlc2V0Lgo+IDMuIENvbnZlcnQgdGhlIHNl cW5vIHRyYWNraW5nIG92ZXIgdG8gdXNpbmcgcmVxdWVzdHMgKGFsYSBleHBsaWNpdAo+ICAgICBm ZW5jaW5nKS4KPgo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2ls c29uLmNvLnVrPgo+IENjOiBKZXNzZSBCYXJuZXMgPGpiYXJuZXNAdmlydHVvdXNnZWVrLm9yZz4K PiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiBDYzogRGFtaWVu IExlc3BpYXUgPGRhbWllbi5sZXNwaWF1QGludGVsLmNvbT4KPiBDYzogT3NjYXIgTWF0ZW8gPG9z Y2FyLm1hdGVvQGludGVsLmNvbT4KPiBDYzogQnJhZCBWb2xraW4gPGJyYWRsZXkuZC52b2xraW5A aW50ZWwuY29tPgo+IENjOiAiS3VrYW5vdmEsIFN2ZXRsYW5hIiA8c3ZldGxhbmEua3VrYW5vdmFA aW50ZWwuY29tPgo+IENjOiBBa2FzaCBHb2VsIDxha2FzaC5nb2VsQGludGVsLmNvbT4KPiBDYzog IkRhbmllbCwgVGhvbWFzIiA8dGhvbWFzLmRhbmllbEBpbnRlbC5jb20+Cj4gQ2M6ICJTaWx1dmVy eSwgQXJ1biIgPGFydW4uc2lsdXZlcnlAbGludXguaW50ZWwuY29tPgo+IENjOiBKb2huIEhhcnJp c29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgICA0ICstCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYyAgICAgICB8ICAxNTAgKy0KPiAgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAgIHwgIDM4OCArKy0tCj4gICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jICAgICAgICAgICAgICB8ICAgMTggKy0KPiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAgICAgIHwgICA0NiArLQo+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAgICAgfCAgNDA2ICsrLS0KPiAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICAgICAgIHwgMTc1OSArKysr Ky0tLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jICAg ICAgfCAgNTA4ICsrKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5j ICAgICAgICB8ICAxMTggLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1 ZmZlci5jICAgfCAgNTE3ICsrLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9n dHQuYyAgICAgICAgICB8ICAxNDAgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5oICAgICAgICAgIHwgICAgNCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fcmVuZGVyX3N0YXRlLmMgfCAgIDY5ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9yZW5kZXJfc3RhdGUuaCB8ICAgNDcgLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fcmVxdWVzdC5jICAgICAgfCAgNjUxICsrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fdGlsaW5nLmMgICAgICAgfCAgICAyICstCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dwdV9lcnJvci5jICAgICAgICB8ICAzOTYgKystLQo+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9pcnEuYyAgICAgICAgICAgICAgfCAgMzQxICstLQo+ICAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgICAgICAgICAgfCAgICAzICstCj4gICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3RyYWNlLmggICAgICAgICAgICB8ICAyMTUgKy0KPiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgICAgICAgIHwgIDM1NSArKy0KPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICAgICAgICAgICAgIHwgICAxNCArLQo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgICAgICAgICAgICAgfCAxNjg5ICsrKy0t LS0tLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaCAgICAgICAgICAg ICB8ICAgODAgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX292ZXJsYXkuYyAgICAg ICAgIHwgIDIwMCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgICAg ICAgICAgfCAgIDkwICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yZW5kZXJzdGF0 ZS5oICAgICB8ICAgIDggKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuYyAgICAgIHwgMzE3MSArKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQo+ICAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oICAgICAgfCAgMzkxICsrLS0KPiAgIDI5IGZp bGVzIGNoYW5nZWQsIDUzOTcgaW5zZXJ0aW9ucygrKSwgNjM4MyBkZWxldGlvbnMoLSkKPiAgIGRl bGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCj4g ICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVuZGVy X3N0YXRlLmgKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9yZXF1ZXN0LmMKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggYzFkZDQ4NWFlYjZj Li4yMjVlOGE4MjA2YjIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC0xNywxNCArMTcs MTQgQEAgaTkxNS0kKENPTkZJR19ERUJVR19GUykgKz0gaTkxNV9kZWJ1Z2ZzLm8KPiAgIAo+ICAg IyBHRU0gY29kZQo+ICAgaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKPiArCSAgaTkxNV9n ZW0ubyBcCj4gICAJICBpOTE1X2dlbV9jb250ZXh0Lm8gXAo+ICAgCSAgaTkxNV9nZW1fcmVuZGVy X3N0YXRlLm8gXAo+IC0JICBpOTE1X2dlbV9kZWJ1Zy5vIFwKPiAgIAkgIGk5MTVfZ2VtX2RtYWJ1 Zi5vIFwKPiAgIAkgIGk5MTVfZ2VtX2V2aWN0Lm8gXAo+ICAgCSAgaTkxNV9nZW1fZXhlY2J1ZmZl ci5vIFwKPiAgIAkgIGk5MTVfZ2VtX2d0dC5vIFwKPiAtCSAgaTkxNV9nZW0ubyBcCj4gKwkgIGk5 MTVfZ2VtX3JlcXVlc3QubyBcCj4gICAJICBpOTE1X2dlbV9zdG9sZW4ubyBcCj4gICAJICBpOTE1 X2dlbV90aWxpbmcubyBcCj4gICAJICBpOTE1X2dlbV91c2VycHRyLm8gXAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfY21kX3BhcnNlci5jCj4gaW5kZXggYzQ1ODU2YmNjOGI5Li40MDhlMGJkYmE0 OGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYwo+IEBAIC01MDEs NyArNTAxLDcgQEAgc3RhdGljIHUzMiBnZW43X2JsdF9nZXRfY21kX2xlbmd0aF9tYXNrKHUzMiBj bWRfaGVhZGVyKQo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBib29sIHZhbGlk YXRlX2NtZHNfc29ydGVkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gK3N0YXRpYyBi b29sIHZhbGlkYXRlX2NtZHNfc29ydGVkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwK PiAgIAkJCQkgY29uc3Qgc3RydWN0IGRybV9pOTE1X2NtZF90YWJsZSAqY21kX3RhYmxlcywKPiAg IAkJCQkgaW50IGNtZF90YWJsZV9jb3VudCkKPiAgIHsKPiBAQCAtNTIzLDcgKzUyMyw3IEBAIHN0 YXRpYyBib29sIHZhbGlkYXRlX2NtZHNfc29ydGVkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcsCj4gICAKPiAgIAkJCWlmIChjdXJyIDwgcHJldmlvdXMpIHsKPiAgIAkJCQlEUk1fRVJST1Io IkNNRDogdGFibGUgbm90IHNvcnRlZCByaW5nPSVkIHRhYmxlPSVkIGVudHJ5PSVkIGNtZD0weCUw OFggcHJldj0weCUwOFhcbiIsCj4gLQkJCQkJICByaW5nLT5pZCwgaSwgaiwgY3VyciwgcHJldmlv dXMpOwo+ICsJCQkJCSAgZW5naW5lLT5pZCwgaSwgaiwgY3VyciwgcHJldmlvdXMpOwo+ICAgCQkJ CXJldCA9IGZhbHNlOwo+ICAgCQkJfQo+ICAgCj4gQEAgLTU1NSwxMSArNTU1LDExIEBAIHN0YXRp YyBib29sIGNoZWNrX3NvcnRlZChpbnQgcmluZ19pZCwgY29uc3QgdTMyICpyZWdfdGFibGUsIGlu dCByZWdfY291bnQpCj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgYm9vbCB2 YWxpZGF0ZV9yZWdzX3NvcnRlZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICtzdGF0 aWMgYm9vbCB2YWxpZGF0ZV9yZWdzX3NvcnRlZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCj4gICB7Cj4gLQlyZXR1cm4gY2hlY2tfc29ydGVkKHJpbmctPmlkLCByaW5nLT5yZWdfdGFi bGUsIHJpbmctPnJlZ19jb3VudCkgJiYKPiAtCQljaGVja19zb3J0ZWQocmluZy0+aWQsIHJpbmct Pm1hc3Rlcl9yZWdfdGFibGUsCj4gLQkJCSAgICAgcmluZy0+bWFzdGVyX3JlZ19jb3VudCk7Cj4g KwlyZXR1cm4gY2hlY2tfc29ydGVkKGVuZ2luZS0+aWQsIGVuZ2luZS0+cmVnX3RhYmxlLCBlbmdp bmUtPnJlZ19jb3VudCkgJiYKPiArCQljaGVja19zb3J0ZWQoZW5naW5lLT5pZCwgZW5naW5lLT5t YXN0ZXJfcmVnX3RhYmxlLAo+ICsJCQkgICAgIGVuZ2luZS0+bWFzdGVyX3JlZ19jb3VudCk7Cj4g ICB9Cj4gICAKPiAgIHN0cnVjdCBjbWRfbm9kZSB7Cj4gQEAgLTU4MywxMyArNTgzLDEzIEBAIHN0 cnVjdCBjbWRfbm9kZSB7Cj4gICAgKi8KPiAgICNkZWZpbmUgQ01EX0hBU0hfTUFTSyBTVERfTUlf T1BDT0RFX01BU0sKPiAgIAo+IC1zdGF0aWMgaW50IGluaXRfaGFzaF90YWJsZShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nLAo+ICtzdGF0aWMgaW50IGluaXRfaGFzaF90YWJsZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICAJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVf Y21kX3RhYmxlICpjbWRfdGFibGVzLAo+ICAgCQkJICAgaW50IGNtZF90YWJsZV9jb3VudCkKPiAg IHsKPiAgIAlpbnQgaSwgajsKPiAgIAo+IC0JaGFzaF9pbml0KHJpbmctPmNtZF9oYXNoKTsKPiAr CWhhc2hfaW5pdChlbmdpbmUtPmNtZF9oYXNoKTsKPiAgIAo+ICAgCWZvciAoaSA9IDA7IGkgPCBj bWRfdGFibGVfY291bnQ7IGkrKykgewo+ICAgCQljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfY21kX3Rh YmxlICp0YWJsZSA9ICZjbWRfdGFibGVzW2ldOwo+IEBAIC02MDQsNyArNjA0LDcgQEAgc3RhdGlj IGludCBpbml0X2hhc2hfdGFibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAgIAkJ CQlyZXR1cm4gLUVOT01FTTsKPiAgIAo+ICAgCQkJZGVzY19ub2RlLT5kZXNjID0gZGVzYzsKPiAt CQkJaGFzaF9hZGQocmluZy0+Y21kX2hhc2gsICZkZXNjX25vZGUtPm5vZGUsCj4gKwkJCWhhc2hf YWRkKGVuZ2luZS0+Y21kX2hhc2gsICZkZXNjX25vZGUtPm5vZGUsCj4gICAJCQkJIGRlc2MtPmNt ZC52YWx1ZSAmIENNRF9IQVNIX01BU0spOwo+ICAgCQl9Cj4gICAJfQo+IEBAIC02MTIsMjEgKzYx MiwyMSBAQCBzdGF0aWMgaW50IGluaXRfaGFzaF90YWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nLAo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkIGZpbmlfaGFz aF90YWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICtzdGF0aWMgdm9pZCBmaW5p X2hhc2hfdGFibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+ICAgCXN0 cnVjdCBobGlzdF9ub2RlICp0bXA7Cj4gICAJc3RydWN0IGNtZF9ub2RlICpkZXNjX25vZGU7Cj4g ICAJaW50IGk7Cj4gICAKPiAtCWhhc2hfZm9yX2VhY2hfc2FmZShyaW5nLT5jbWRfaGFzaCwgaSwg dG1wLCBkZXNjX25vZGUsIG5vZGUpIHsKPiArCWhhc2hfZm9yX2VhY2hfc2FmZShlbmdpbmUtPmNt ZF9oYXNoLCBpLCB0bXAsIGRlc2Nfbm9kZSwgbm9kZSkgewo+ICAgCQloYXNoX2RlbCgmZGVzY19u b2RlLT5ub2RlKTsKPiAgIAkJa2ZyZWUoZGVzY19ub2RlKTsKPiAgIAl9Cj4gICB9Cj4gICAKPiAg IC8qKgo+IC0gKiBpOTE1X2NtZF9wYXJzZXJfaW5pdF9yaW5nKCkgLSBzZXQgY21kIHBhcnNlciBy ZWxhdGVkIGZpZWxkcyBmb3IgYSByaW5nYnVmZmVyCj4gLSAqIEByaW5nOiB0aGUgcmluZ2J1ZmZl ciB0byBpbml0aWFsaXplCj4gKyAqIGk5MTVfY21kX3BhcnNlcl9pbml0X2VuZ2luZSgpIC0gc2V0 IGNtZCBwYXJzZXIgcmVsYXRlZCBmaWVsZHMgZm9yIGEgcmluZ2J1ZmZlcgo+ICsgKiBAZW5naW5l OiB0aGUgcmluZ2J1ZmZlciB0byBpbml0aWFsaXplCj4gICAgKgo+ICAgICogT3B0aW9uYWxseSBp bml0aWFsaXplcyBmaWVsZHMgcmVsYXRlZCB0byBiYXRjaCBidWZmZXIgY29tbWFuZCBwYXJzaW5n IGluIHRoZQo+ICAgICogc3RydWN0IGludGVsX2VuZ2luZV9jcyBiYXNlZCBvbiB3aGV0aGVyIHRo ZSBwbGF0Zm9ybSByZXF1aXJlcyBzb2Z0d2FyZQo+IEBAIC02MzQsMTggKzYzNCwxOCBAQCBzdGF0 aWMgdm9pZCBmaW5pX2hhc2hfdGFibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAg ICAqCj4gICAgKiBSZXR1cm46IG5vbi16ZXJvIGlmIGluaXRpYWxpemF0aW9uIGZhaWxzCj4gICAg Ki8KPiAtaW50IGk5MTVfY21kX3BhcnNlcl9pbml0X3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqcmluZykKPiAraW50IGk5MTVfY21kX3BhcnNlcl9pbml0X2VuZ2luZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGRybV9pOTE1X2NtZF90 YWJsZSAqY21kX3RhYmxlczsKPiAgIAlpbnQgY21kX3RhYmxlX2NvdW50Owo+ICAgCWludCByZXQ7 Cj4gICAKPiAtCWlmICghSVNfR0VONyhyaW5nLT5kZXYpKQo+ICsJaWYgKCFJU19HRU43KGVuZ2lu ZS0+aTkxNSkpCj4gICAJCXJldHVybiAwOwo+ICAgCj4gLQlzd2l0Y2ggKHJpbmctPmlkKSB7Cj4g Kwlzd2l0Y2ggKGVuZ2luZS0+aWQpIHsKPiAgIAljYXNlIFJDUzoKPiAtCQlpZiAoSVNfSEFTV0VM TChyaW5nLT5kZXYpKSB7Cj4gKwkJaWYgKElTX0hBU1dFTEwoZW5naW5lLT5pOTE1KSkgewo+ICAg CQkJY21kX3RhYmxlcyA9IGhzd19yZW5kZXJfcmluZ19jbWRzOwo+ICAgCQkJY21kX3RhYmxlX2Nv dW50ID0KPiAgIAkJCQlBUlJBWV9TSVpFKGhzd19yZW5kZXJfcmluZ19jbWRzKTsKPiBAQCAtNjU0 LDI2ICs2NTQsMjYgQEAgaW50IGk5MTVfY21kX3BhcnNlcl9pbml0X3Jpbmcoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZykKPiAgIAkJCWNtZF90YWJsZV9jb3VudCA9IEFSUkFZX1NJWkUoZ2Vu N19yZW5kZXJfY21kcyk7Cj4gICAJCX0KPiAgIAo+IC0JCXJpbmctPnJlZ190YWJsZSA9IGdlbjdf cmVuZGVyX3JlZ3M7Cj4gLQkJcmluZy0+cmVnX2NvdW50ID0gQVJSQVlfU0laRShnZW43X3JlbmRl cl9yZWdzKTsKPiArCQllbmdpbmUtPnJlZ190YWJsZSA9IGdlbjdfcmVuZGVyX3JlZ3M7Cj4gKwkJ ZW5naW5lLT5yZWdfY291bnQgPSBBUlJBWV9TSVpFKGdlbjdfcmVuZGVyX3JlZ3MpOwo+ICAgCj4g LQkJaWYgKElTX0hBU1dFTEwocmluZy0+ZGV2KSkgewo+IC0JCQlyaW5nLT5tYXN0ZXJfcmVnX3Rh YmxlID0gaHN3X21hc3Rlcl9yZWdzOwo+IC0JCQlyaW5nLT5tYXN0ZXJfcmVnX2NvdW50ID0gQVJS QVlfU0laRShoc3dfbWFzdGVyX3JlZ3MpOwo+ICsJCWlmIChJU19IQVNXRUxMKGVuZ2luZS0+aTkx NSkpIHsKPiArCQkJZW5naW5lLT5tYXN0ZXJfcmVnX3RhYmxlID0gaHN3X21hc3Rlcl9yZWdzOwo+ ICsJCQllbmdpbmUtPm1hc3Rlcl9yZWdfY291bnQgPSBBUlJBWV9TSVpFKGhzd19tYXN0ZXJfcmVn cyk7Cj4gICAJCX0gZWxzZSB7Cj4gLQkJCXJpbmctPm1hc3Rlcl9yZWdfdGFibGUgPSBpdmJfbWFz dGVyX3JlZ3M7Cj4gLQkJCXJpbmctPm1hc3Rlcl9yZWdfY291bnQgPSBBUlJBWV9TSVpFKGl2Yl9t YXN0ZXJfcmVncyk7Cj4gKwkJCWVuZ2luZS0+bWFzdGVyX3JlZ190YWJsZSA9IGl2Yl9tYXN0ZXJf cmVnczsKPiArCQkJZW5naW5lLT5tYXN0ZXJfcmVnX2NvdW50ID0gQVJSQVlfU0laRShpdmJfbWFz dGVyX3JlZ3MpOwo+ICAgCQl9Cj4gICAKPiAtCQlyaW5nLT5nZXRfY21kX2xlbmd0aF9tYXNrID0g Z2VuN19yZW5kZXJfZ2V0X2NtZF9sZW5ndGhfbWFzazsKPiArCQllbmdpbmUtPmdldF9jbWRfbGVu Z3RoX21hc2sgPSBnZW43X3JlbmRlcl9nZXRfY21kX2xlbmd0aF9tYXNrOwo+ICAgCQlicmVhazsK PiAgIAljYXNlIFZDUzoKPiAgIAkJY21kX3RhYmxlcyA9IGdlbjdfdmlkZW9fY21kczsKPiAgIAkJ Y21kX3RhYmxlX2NvdW50ID0gQVJSQVlfU0laRShnZW43X3ZpZGVvX2NtZHMpOwo+IC0JCXJpbmct PmdldF9jbWRfbGVuZ3RoX21hc2sgPSBnZW43X2JzZF9nZXRfY21kX2xlbmd0aF9tYXNrOwo+ICsJ CWVuZ2luZS0+Z2V0X2NtZF9sZW5ndGhfbWFzayA9IGdlbjdfYnNkX2dldF9jbWRfbGVuZ3RoX21h c2s7Cj4gICAJCWJyZWFrOwo+ICAgCWNhc2UgQkNTOgo+IC0JCWlmIChJU19IQVNXRUxMKHJpbmct PmRldikpIHsKPiArCQlpZiAoSVNfSEFTV0VMTChlbmdpbmUtPmk5MTUpKSB7Cj4gICAJCQljbWRf dGFibGVzID0gaHN3X2JsdF9yaW5nX2NtZHM7Cj4gICAJCQljbWRfdGFibGVfY291bnQgPSBBUlJB WV9TSVpFKGhzd19ibHRfcmluZ19jbWRzKTsKPiAgIAkJfSBlbHNlIHsKPiBAQCAtNjgxLDY4ICs2 ODEsNjggQEAgaW50IGk5MTVfY21kX3BhcnNlcl9pbml0X3Jpbmcoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZykKPiAgIAkJCWNtZF90YWJsZV9jb3VudCA9IEFSUkFZX1NJWkUoZ2VuN19ibHRf Y21kcyk7Cj4gICAJCX0KPiAgIAo+IC0JCXJpbmctPnJlZ190YWJsZSA9IGdlbjdfYmx0X3JlZ3M7 Cj4gLQkJcmluZy0+cmVnX2NvdW50ID0gQVJSQVlfU0laRShnZW43X2JsdF9yZWdzKTsKPiArCQll bmdpbmUtPnJlZ190YWJsZSA9IGdlbjdfYmx0X3JlZ3M7Cj4gKwkJZW5naW5lLT5yZWdfY291bnQg PSBBUlJBWV9TSVpFKGdlbjdfYmx0X3JlZ3MpOwo+ICAgCj4gLQkJaWYgKElTX0hBU1dFTEwocmlu Zy0+ZGV2KSkgewo+IC0JCQlyaW5nLT5tYXN0ZXJfcmVnX3RhYmxlID0gaHN3X21hc3Rlcl9yZWdz Owo+IC0JCQlyaW5nLT5tYXN0ZXJfcmVnX2NvdW50ID0gQVJSQVlfU0laRShoc3dfbWFzdGVyX3Jl Z3MpOwo+ICsJCWlmIChJU19IQVNXRUxMKGVuZ2luZS0+aTkxNSkpIHsKPiArCQkJZW5naW5lLT5t YXN0ZXJfcmVnX3RhYmxlID0gaHN3X21hc3Rlcl9yZWdzOwo+ICsJCQllbmdpbmUtPm1hc3Rlcl9y ZWdfY291bnQgPSBBUlJBWV9TSVpFKGhzd19tYXN0ZXJfcmVncyk7Cj4gICAJCX0gZWxzZSB7Cj4g LQkJCXJpbmctPm1hc3Rlcl9yZWdfdGFibGUgPSBpdmJfbWFzdGVyX3JlZ3M7Cj4gLQkJCXJpbmct Pm1hc3Rlcl9yZWdfY291bnQgPSBBUlJBWV9TSVpFKGl2Yl9tYXN0ZXJfcmVncyk7Cj4gKwkJCWVu Z2luZS0+bWFzdGVyX3JlZ190YWJsZSA9IGl2Yl9tYXN0ZXJfcmVnczsKPiArCQkJZW5naW5lLT5t YXN0ZXJfcmVnX2NvdW50ID0gQVJSQVlfU0laRShpdmJfbWFzdGVyX3JlZ3MpOwo+ICAgCQl9Cj4g ICAKPiAtCQlyaW5nLT5nZXRfY21kX2xlbmd0aF9tYXNrID0gZ2VuN19ibHRfZ2V0X2NtZF9sZW5n dGhfbWFzazsKPiArCQllbmdpbmUtPmdldF9jbWRfbGVuZ3RoX21hc2sgPSBnZW43X2JsdF9nZXRf Y21kX2xlbmd0aF9tYXNrOwo+ICAgCQlicmVhazsKPiAgIAljYXNlIFZFQ1M6Cj4gICAJCWNtZF90 YWJsZXMgPSBoc3dfdmVib3hfY21kczsKPiAgIAkJY21kX3RhYmxlX2NvdW50ID0gQVJSQVlfU0la RShoc3dfdmVib3hfY21kcyk7Cj4gICAJCS8qIFZFQ1MgY2FuIHVzZSB0aGUgc2FtZSBsZW5ndGhf bWFzayBmdW5jdGlvbiBhcyBWQ1MgKi8KPiAtCQlyaW5nLT5nZXRfY21kX2xlbmd0aF9tYXNrID0g Z2VuN19ic2RfZ2V0X2NtZF9sZW5ndGhfbWFzazsKPiArCQllbmdpbmUtPmdldF9jbWRfbGVuZ3Ro X21hc2sgPSBnZW43X2JzZF9nZXRfY21kX2xlbmd0aF9tYXNrOwo+ICAgCQlicmVhazsKPiAgIAlk ZWZhdWx0Ogo+IC0JCURSTV9FUlJPUigiQ01EOiBjbWRfcGFyc2VyX2luaXQgd2l0aCB1bmtub3du IHJpbmc6ICVkXG4iLAo+IC0JCQkgIHJpbmctPmlkKTsKPiArCQlEUk1fRVJST1IoIkNNRDogY21k X3BhcnNlcl9pbml0IHdpdGggdW5rbm93biBlbmdpbmU6ICVkXG4iLAo+ICsJCQkgIGVuZ2luZS0+ aWQpOwo+ICAgCQlCVUcoKTsKPiAgIAl9Cj4gICAKPiAtCUJVR19PTighdmFsaWRhdGVfY21kc19z b3J0ZWQocmluZywgY21kX3RhYmxlcywgY21kX3RhYmxlX2NvdW50KSk7Cj4gLQlCVUdfT04oIXZh bGlkYXRlX3JlZ3Nfc29ydGVkKHJpbmcpKTsKPiArCUJVR19PTighdmFsaWRhdGVfY21kc19zb3J0 ZWQoZW5naW5lLCBjbWRfdGFibGVzLCBjbWRfdGFibGVfY291bnQpKTsKPiArCUJVR19PTighdmFs aWRhdGVfcmVnc19zb3J0ZWQoZW5naW5lKSk7Cj4gICAKPiAtCXJldCA9IGluaXRfaGFzaF90YWJs ZShyaW5nLCBjbWRfdGFibGVzLCBjbWRfdGFibGVfY291bnQpOwo+ICsJcmV0ID0gaW5pdF9oYXNo X3RhYmxlKGVuZ2luZSwgY21kX3RhYmxlcywgY21kX3RhYmxlX2NvdW50KTsKPiAgIAlpZiAocmV0 KSB7Cj4gICAJCURSTV9FUlJPUigiQ01EOiBjbWRfcGFyc2VyX2luaXQgZmFpbGVkIVxuIik7Cj4g LQkJZmluaV9oYXNoX3RhYmxlKHJpbmcpOwo+ICsJCWZpbmlfaGFzaF90YWJsZShlbmdpbmUpOwo+ ICAgCQlyZXR1cm4gcmV0Owo+ICAgCX0KPiAgIAo+IC0JcmluZy0+bmVlZHNfY21kX3BhcnNlciA9 IHRydWU7Cj4gKwllbmdpbmUtPm5lZWRzX2NtZF9wYXJzZXIgPSB0cnVlOwo+ICAgCj4gICAJcmV0 dXJuIDA7Cj4gICB9Cj4gICAKPiAgIC8qKgo+IC0gKiBpOTE1X2NtZF9wYXJzZXJfZmluaV9yaW5n KCkgLSBjbGVhbiB1cCBjbWQgcGFyc2VyIHJlbGF0ZWQgZmllbGRzCj4gLSAqIEByaW5nOiB0aGUg cmluZ2J1ZmZlciB0byBjbGVhbiB1cAo+ICsgKiBpOTE1X2NtZF9wYXJzZXJfZmluaV9lbmdpbmUo KSAtIGNsZWFuIHVwIGNtZCBwYXJzZXIgcmVsYXRlZCBmaWVsZHMKPiArICogQGVuZ2luZTogdGhl IHJpbmdidWZmZXIgdG8gY2xlYW4gdXAKPiAgICAqCj4gICAgKiBSZWxlYXNlcyBhbnkgcmVzb3Vy Y2VzIHJlbGF0ZWQgdG8gY29tbWFuZCBwYXJzaW5nIHRoYXQgbWF5IGhhdmUgYmVlbgo+IC0gKiBp bml0aWFsaXplZCBmb3IgdGhlIHNwZWNpZmllZCByaW5nLgo+ICsgKiBpbml0aWFsaXplZCBmb3Ig dGhlIHNwZWNpZmllZCBlbmdpbmUuCj4gICAgKi8KPiAtdm9pZCBpOTE1X2NtZF9wYXJzZXJfZmlu aV9yaW5nKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK3ZvaWQgaTkxNV9jbWRfcGFy c2VyX2ZpbmlfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAt CWlmICghcmluZy0+bmVlZHNfY21kX3BhcnNlcikKPiArCWlmICghZW5naW5lLT5uZWVkc19jbWRf cGFyc2VyKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAtCWZpbmlfaGFzaF90YWJsZShyaW5nKTsKPiAr CWZpbmlfaGFzaF90YWJsZShlbmdpbmUpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9pOTE1X2NtZF9kZXNjcmlwdG9yKgo+IC1maW5kX2NtZF9pbl90YWJsZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICtmaW5kX2NtZF9pbl90YWJsZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCj4gICAJCSAgdTMyIGNtZF9oZWFkZXIpCj4gICB7Cj4gICAJc3Ry dWN0IGNtZF9ub2RlICpkZXNjX25vZGU7Cj4gICAKPiAtCWhhc2hfZm9yX2VhY2hfcG9zc2libGUo cmluZy0+Y21kX2hhc2gsIGRlc2Nfbm9kZSwgbm9kZSwKPiArCWhhc2hfZm9yX2VhY2hfcG9zc2li bGUoZW5naW5lLT5jbWRfaGFzaCwgZGVzY19ub2RlLCBub2RlLAo+ICAgCQkJICAgICAgIGNtZF9o ZWFkZXIgJiBDTURfSEFTSF9NQVNLKSB7Cj4gICAJCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9jbWRf ZGVzY3JpcHRvciAqZGVzYyA9IGRlc2Nfbm9kZS0+ZGVzYzsKPiAgIAkJdTMyIG1hc2tlZF9jbWQg PSBkZXNjLT5jbWQubWFzayAmIGNtZF9oZWFkZXI7Cj4gQEAgLTc1OSwyMyArNzU5LDIzIEBAIGZp bmRfY21kX2luX3RhYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gICAgKiBSZXR1 cm5zIGEgcG9pbnRlciB0byBhIGRlc2NyaXB0b3IgZm9yIHRoZSBjb21tYW5kIHNwZWNpZmllZCBi eSBjbWRfaGVhZGVyLgo+ICAgICoKPiAgICAqIFRoZSBjYWxsZXIgbXVzdCBzdXBwbHkgc3BhY2Ug Zm9yIGEgZGVmYXVsdCBkZXNjcmlwdG9yIHZpYSB0aGUgZGVmYXVsdF9kZXNjCj4gLSAqIHBhcmFt ZXRlci4gSWYgbm8gZGVzY3JpcHRvciBmb3IgdGhlIHNwZWNpZmllZCBjb21tYW5kIGV4aXN0cyBp biB0aGUgcmluZydzCj4gKyAqIHBhcmFtZXRlci4gSWYgbm8gZGVzY3JpcHRvciBmb3IgdGhlIHNw ZWNpZmllZCBjb21tYW5kIGV4aXN0cyBpbiB0aGUgZW5naW5lJ3MKPiAgICAqIGNvbW1hbmQgcGFy c2VyIHRhYmxlcywgdGhpcyBmdW5jdGlvbiBmaWxscyBpbiBkZWZhdWx0X2Rlc2MgYmFzZWQgb24g dGhlCj4gLSAqIHJpbmcncyBkZWZhdWx0IGxlbmd0aCBlbmNvZGluZyBhbmQgcmV0dXJucyBkZWZh dWx0X2Rlc2MuCj4gKyAqIGVuZ2luZSdzIGRlZmF1bHQgbGVuZ3RoIGVuY29kaW5nIGFuZCByZXR1 cm5zIGRlZmF1bHRfZGVzYy4KPiAgICAqLwo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkx NV9jbWRfZGVzY3JpcHRvcioKPiAtZmluZF9jbWQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmlu ZywKPiArZmluZF9jbWQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCSB1MzIg Y21kX2hlYWRlciwKPiAgIAkgc3RydWN0IGRybV9pOTE1X2NtZF9kZXNjcmlwdG9yICpkZWZhdWx0 X2Rlc2MpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGRybV9pOTE1X2NtZF9kZXNjcmlwdG9yICpk ZXNjOwo+ICAgCXUzMiBtYXNrOwo+ICAgCj4gLQlkZXNjID0gZmluZF9jbWRfaW5fdGFibGUocmlu ZywgY21kX2hlYWRlcik7Cj4gKwlkZXNjID0gZmluZF9jbWRfaW5fdGFibGUoZW5naW5lLCBjbWRf aGVhZGVyKTsKPiAgIAlpZiAoZGVzYykKPiAgIAkJcmV0dXJuIGRlc2M7Cj4gICAKPiAtCW1hc2sg PSByaW5nLT5nZXRfY21kX2xlbmd0aF9tYXNrKGNtZF9oZWFkZXIpOwo+ICsJbWFzayA9IGVuZ2lu ZS0+Z2V0X2NtZF9sZW5ndGhfbWFzayhjbWRfaGVhZGVyKTsKPiAgIAlpZiAoIW1hc2spCj4gICAJ CXJldHVybiBOVUxMOwo+ICAgCj4gQEAgLTgzMiwxNyArODMyLDE3IEBAIGZpbmlzaDoKPiAgIH0K PiAgIAo+ICAgLyoqCj4gLSAqIGk5MTVfbmVlZHNfY21kX3BhcnNlcigpIC0gc2hvdWxkIGEgZ2l2 ZW4gcmluZyB1c2Ugc29mdHdhcmUgY29tbWFuZCBwYXJzaW5nPwo+IC0gKiBAcmluZzogdGhlIHJp bmcgaW4gcXVlc3Rpb24KPiArICogaTkxNV9uZWVkc19jbWRfcGFyc2VyKCkgLSBzaG91bGQgYSBn aXZlbiBlbmdpbmUgdXNlIHNvZnR3YXJlIGNvbW1hbmQgcGFyc2luZz8KPiArICogQGVuZ2luZTog dGhlIGVuZ2luZSBpbiBxdWVzdGlvbgo+ICAgICoKPiAgICAqIE9ubHkgY2VydGFpbiBwbGF0Zm9y bXMgcmVxdWlyZSBzb2Z0d2FyZSBiYXRjaCBidWZmZXIgY29tbWFuZCBwYXJzaW5nLCBhbmQKPiAg ICAqIG9ubHkgd2hlbiBlbmFibGVkIHZpYSBtb2R1bGUgcGFyYW10ZXIuCj4gICAgKgo+IC0gKiBS ZXR1cm46IHRydWUgaWYgdGhlIHJpbmcgcmVxdWlyZXMgc29mdHdhcmUgY29tbWFuZCBwYXJzaW5n Cj4gKyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgZW5naW5lIHJlcXVpcmVzIHNvZnR3YXJlIGNvbW1h bmQgcGFyc2luZwo+ICAgICovCj4gLWJvb2wgaTkxNV9uZWVkc19jbWRfcGFyc2VyKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK2Jvb2wgaTkxNV9uZWVkc19jbWRfcGFyc2VyKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAtCWlmICghcmluZy0+bmVlZHNfY21k X3BhcnNlcikKPiArCWlmICghZW5naW5lLT5uZWVkc19jbWRfcGFyc2VyKQo+ICAgCQlyZXR1cm4g ZmFsc2U7Cj4gICAKPiAgIAkvKgo+IEBAIC04NTAsMTMgKzg1MCwxMyBAQCBib29sIGk5MTVfbmVl ZHNfY21kX3BhcnNlcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICAgCSAqIGRpc2Fi bGVkLiBUaGF0IHdpbGwgY2F1c2UgYWxsIG9mIHRoZSBwYXJzZXIncyBQUEdUVCBjaGVja3MgdG8K PiAgIAkgKiBmYWlsLiBGb3Igbm93LCBkaXNhYmxlIHBhcnNpbmcgd2hlbiBQUEdUVCBpcyBvZmYu Cj4gICAJICovCj4gLQlpZiAoVVNFU19QUEdUVChyaW5nLT5kZXYpKQo+ICsJaWYgKFVTRVNfUFBH VFQoZW5naW5lLT5kZXYpKQo+ICAgCQlyZXR1cm4gZmFsc2U7Cj4gICAKPiAgIAlyZXR1cm4gKGk5 MTUuZW5hYmxlX2NtZF9wYXJzZXIgPT0gMSk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGJvb2wgY2hl Y2tfY21kKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gK3N0YXRpYyBib29s IGNoZWNrX2NtZChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICAJCSAg ICAgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9jbWRfZGVzY3JpcHRvciAqZGVzYywKPiAgIAkJICAg ICAgY29uc3QgdTMyICpjbWQsCj4gICAJCSAgICAgIGNvbnN0IGJvb2wgaXNfbWFzdGVyLAo+IEBA IC04OTMsMTYgKzg5MywxNiBAQCBzdGF0aWMgYm9vbCBjaGVja19jbWQoY29uc3Qgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZywKPiAgIAkJCQkqb2Fjb250cm9sX3NldCA9IChjbWRbMl0gIT0g MCk7Cj4gICAJCX0KPiAgIAo+IC0JCWlmICghdmFsaWRfcmVnKHJpbmctPnJlZ190YWJsZSwKPiAt CQkJICAgICAgIHJpbmctPnJlZ19jb3VudCwgcmVnX2FkZHIpKSB7Cj4gKwkJaWYgKCF2YWxpZF9y ZWcoZW5naW5lLT5yZWdfdGFibGUsCj4gKwkJCSAgICAgICBlbmdpbmUtPnJlZ19jb3VudCwgcmVn X2FkZHIpKSB7Cj4gICAJCQlpZiAoIWlzX21hc3RlciB8fAo+IC0JCQkgICAgIXZhbGlkX3JlZyhy aW5nLT5tYXN0ZXJfcmVnX3RhYmxlLAo+IC0JCQkJICAgICAgIHJpbmctPm1hc3Rlcl9yZWdfY291 bnQsCj4gKwkJCSAgICAhdmFsaWRfcmVnKGVuZ2luZS0+bWFzdGVyX3JlZ190YWJsZSwKPiArCQkJ CSAgICAgICBlbmdpbmUtPm1hc3Rlcl9yZWdfY291bnQsCj4gICAJCQkJICAgICAgIHJlZ19hZGRy KSkgewo+IC0JCQkJRFJNX0RFQlVHX0RSSVZFUigiQ01EOiBSZWplY3RlZCByZWdpc3RlciAweCUw OFggaW4gY29tbWFuZDogMHglMDhYIChyaW5nPSVkKVxuIiwKPiArCQkJCURSTV9ERUJVR19EUklW RVIoIkNNRDogUmVqZWN0ZWQgcmVnaXN0ZXIgMHglMDhYIGluIGNvbW1hbmQ6IDB4JTA4WCAoZW5n aW5lPSVkKVxuIiwKPiAgIAkJCQkJCSByZWdfYWRkciwKPiAgIAkJCQkJCSAqY21kLAo+IC0JCQkJ CQkgcmluZy0+aWQpOwo+ICsJCQkJCQkgZW5naW5lLT5pZCk7Cj4gICAJCQkJcmV0dXJuIGZhbHNl Owo+ICAgCQkJfQo+ICAgCQl9Cj4gQEAgLTkzMSwxMSArOTMxLDExIEBAIHN0YXRpYyBib29sIGNo ZWNrX2NtZChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICAgCQkJCWRlc2Mt PmJpdHNbaV0ubWFzazsKPiAgIAo+ICAgCQkJaWYgKGR3b3JkICE9IGRlc2MtPmJpdHNbaV0uZXhw ZWN0ZWQpIHsKPiAtCQkJCURSTV9ERUJVR19EUklWRVIoIkNNRDogUmVqZWN0ZWQgY29tbWFuZCAw eCUwOFggZm9yIGJpdG1hc2sgMHglMDhYIChleHA9MHglMDhYIGFjdD0weCUwOFgpIChyaW5nPSVk KVxuIiwKPiArCQkJCURSTV9ERUJVR19EUklWRVIoIkNNRDogUmVqZWN0ZWQgY29tbWFuZCAweCUw OFggZm9yIGJpdG1hc2sgMHglMDhYIChleHA9MHglMDhYIGFjdD0weCUwOFgpIChlbmdpbmU9JWQp XG4iLAo+ICAgCQkJCQkJICpjbWQsCj4gICAJCQkJCQkgZGVzYy0+Yml0c1tpXS5tYXNrLAo+ICAg CQkJCQkJIGRlc2MtPmJpdHNbaV0uZXhwZWN0ZWQsCj4gLQkJCQkJCSBkd29yZCwgcmluZy0+aWQp Owo+ICsJCQkJCQkgZHdvcmQsIGVuZ2luZS0+aWQpOwo+ICAgCQkJCXJldHVybiBmYWxzZTsKPiAg IAkJCX0KPiAgIAkJfQo+IEBAIC05NDgsNyArOTQ4LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfY21k KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gICAKPiAgIC8qKgo+ICAgICog aTkxNV9wYXJzZV9jbWRzKCkgLSBwYXJzZSBhIHN1Ym1pdHRlZCBiYXRjaCBidWZmZXIgZm9yIHBy aXZpbGVnZSB2aW9sYXRpb25zCj4gLSAqIEByaW5nOiB0aGUgcmluZyBvbiB3aGljaCB0aGUgYmF0 Y2ggaXMgdG8gZXhlY3V0ZQo+ICsgKiBAZW5naW5lOiB0aGUgZW5naW5lIG9uIHdoaWNoIHRoZSBi YXRjaCBpcyB0byBleGVjdXRlCj4gICAgKiBAYmF0Y2hfb2JqOiB0aGUgYmF0Y2ggYnVmZmVyIGlu IHF1ZXN0aW9uCj4gICAgKiBAYmF0Y2hfc3RhcnRfb2Zmc2V0OiBieXRlIG9mZnNldCBpbiB0aGUg YmF0Y2ggYXQgd2hpY2ggZXhlY3V0aW9uIHN0YXJ0cwo+ICAgICogQGlzX21hc3RlcjogaXMgdGhl IHN1Ym1pdHRpbmcgcHJvY2VzcyB0aGUgZHJtIG1hc3Rlcj8KPiBAQCAtOTU4LDcgKzk1OCw3IEBA IHN0YXRpYyBib29sIGNoZWNrX2NtZChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5n LAo+ICAgICoKPiAgICAqIFJldHVybjogbm9uLXplcm8gaWYgdGhlIHBhcnNlciBmaW5kcyB2aW9s YXRpb25zIG9yIG90aGVyd2lzZSBmYWlscwo+ICAgICovCj4gLWludCBpOTE1X3BhcnNlX2NtZHMo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAraW50IGk5MTVfcGFyc2VfY21kcyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICAJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqYmF0Y2hfb2JqLAo+ICAgCQkgICAgdTMyIGJhdGNoX3N0YXJ0X29mZnNldCwKPiAg IAkJICAgIGJvb2wgaXNfbWFzdGVyKQo+IEBAIC05OTUsNyArOTk1LDcgQEAgaW50IGk5MTVfcGFy c2VfY21kcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICAgCQlpZiAoKmNtZCA9PSBN SV9CQVRDSF9CVUZGRVJfRU5EKQo+ICAgCQkJYnJlYWs7Cj4gICAKPiAtCQlkZXNjID0gZmluZF9j bWQocmluZywgKmNtZCwgJmRlZmF1bHRfZGVzYyk7Cj4gKwkJZGVzYyA9IGZpbmRfY21kKGVuZ2lu ZSwgKmNtZCwgJmRlZmF1bHRfZGVzYyk7Cj4gICAJCWlmICghZGVzYykgewo+ICAgCQkJRFJNX0RF QlVHX0RSSVZFUigiQ01EOiBVbnJlY29nbml6ZWQgY29tbWFuZDogMHglMDhYXG4iLAo+ICAgCQkJ CQkgKmNtZCk7Cj4gQEAgLTEwMTcsNyArMTAxNyw3IEBAIGludCBpOTE1X3BhcnNlX2NtZHMoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAgIAkJCWJyZWFrOwo+ICAgCQl9Cj4gICAKPiAt CQlpZiAoIWNoZWNrX2NtZChyaW5nLCBkZXNjLCBjbWQsIGlzX21hc3RlciwgJm9hY29udHJvbF9z ZXQpKSB7Cj4gKwkJaWYgKCFjaGVja19jbWQoZW5naW5lLCBkZXNjLCBjbWQsIGlzX21hc3Rlciwg Jm9hY29udHJvbF9zZXQpKSB7Cj4gICAJCQlyZXQgPSAtRUlOVkFMOwo+ICAgCQkJYnJlYWs7Cj4g ICAJCX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IGluZGV4IDJjYmM4NWYzYjIz Ny4uNGQwYjVjZmY1MjkxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZGVidWdmcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBA QCAtMTIzLDE5ICsxMjMsMjIgQEAgc3RhdGljIHZvaWQKPiAgIGRlc2NyaWJlX29iaihzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICB7Cj4gICAJ c3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gLQlpbnQgcGluX2NvdW50ID0gMDsKPiArCWludCBwaW5f Y291bnQgPSAwLCBuOwo+ICAgCj4gLQlzZXFfcHJpbnRmKG0sICIlcEs6ICVzJXMlcyAlOHpkS2lC ICUwMnggJTAyeCAldSAldSAldSVzJXMlcyIsCj4gKwlzZXFfcHJpbnRmKG0sICIlcEs6ICVzJXMl cyAlOHpkS2lCICUwMnggJTAyeCBbIiwKPiAgIAkJICAgJm9iai0+YmFzZSwKPiAgIAkJICAgZ2V0 X3Bpbl9mbGFnKG9iaiksCj4gICAJCSAgIGdldF90aWxpbmdfZmxhZyhvYmopLAo+ICAgCQkgICBn ZXRfZ2xvYmFsX2ZsYWcob2JqKSwKPiAgIAkJICAgb2JqLT5iYXNlLnNpemUgLyAxMDI0LAo+ICAg CQkgICBvYmotPmJhc2UucmVhZF9kb21haW5zLAo+IC0JCSAgIG9iai0+YmFzZS53cml0ZV9kb21h aW4sCj4gLQkJICAgb2JqLT5sYXN0X3JlYWRfc2Vxbm8sCj4gLQkJICAgb2JqLT5sYXN0X3dyaXRl X3NlcW5vLAo+IC0JCSAgIG9iai0+bGFzdF9mZW5jZWRfc2Vxbm8sCj4gKwkJICAgb2JqLT5iYXNl LndyaXRlX2RvbWFpbik7Cj4gKwlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRShvYmotPmxhc3Rf cmVhZCk7IG4rKykKPiArCQlzZXFfcHJpbnRmKG0sICIgJXgiLAo+ICsJCQkgICBpOTE1X3JlcXVl c3Rfc2Vxbm8ob2JqLT5sYXN0X3JlYWRbbl0ucmVxdWVzdCkpOwo+ICsJc2VxX3ByaW50ZihtLCAi IF0gJXggJXglcyVzJXMiLAo+ICsJCSAgIGk5MTVfcmVxdWVzdF9zZXFubyhvYmotPmxhc3Rfd3Jp dGUucmVxdWVzdCksCj4gKwkJICAgaTkxNV9yZXF1ZXN0X3NlcW5vKG9iai0+bGFzdF9mZW5jZS5y ZXF1ZXN0KSwKPiAgIAkJICAgaTkxNV9jYWNoZV9sZXZlbF9zdHIodG9faTkxNShvYmotPmJhc2Uu ZGV2KSwgb2JqLT5jYWNoZV9sZXZlbCksCj4gICAJCSAgIG9iai0+ZGlydHkgPyAiIGRpcnR5IiA6 ICIiLAo+ICAgCQkgICBvYmotPm1hZHYgPT0gSTkxNV9NQURWX0RPTlRORUVEID8gIiBwdXJnZWFi bGUiIDogIiIpOwo+IEBAIC0xNjgsMTUgKzE3MSwxNSBAQCBkZXNjcmliZV9vYmooc3RydWN0IHNl cV9maWxlICptLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCQkqdCA9ICdc MCc7Cj4gICAJCXNlcV9wcmludGYobSwgIiAoJXMgbWFwcGFibGUpIiwgcyk7Cj4gICAJfQo+IC0J aWYgKG9iai0+cmluZyAhPSBOVUxMKQo+IC0JCXNlcV9wcmludGYobSwgIiAoJXMpIiwgb2JqLT5y aW5nLT5uYW1lKTsKPiArCWlmIChvYmotPmxhc3Rfd3JpdGUucmVxdWVzdCkKPiArCQlzZXFfcHJp bnRmKG0sICIgKCVzKSIsIG9iai0+bGFzdF93cml0ZS5yZXF1ZXN0LT5lbmdpbmUtPm5hbWUpOwo+ ICAgCWlmIChvYmotPmZyb250YnVmZmVyX2JpdHMpCj4gICAJCXNlcV9wcmludGYobSwgIiAoZnJv bnRidWZmZXI6IDB4JTAzeCkiLCBvYmotPmZyb250YnVmZmVyX2JpdHMpOwo+ICAgfQo+ICAgCj4g ICBzdGF0aWMgdm9pZCBkZXNjcmliZV9jdHgoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqY3R4KQo+ICAgewo+IC0Jc2VxX3B1dGMobSwgY3R4LT5sZWdhY3lfaHdfY3R4 LmluaXRpYWxpemVkID8gJ0knIDogJ2knKTsKPiArCXNlcV9wdXRjKG0sIGN0eC0+cmluZ1tSQ1Nd LmluaXRpYWxpemVkID8gJ0knIDogJ2knKTsKPiAgIAlzZXFfcHV0YyhtLCBjdHgtPnJlbWFwX3Ns aWNlID8gJ1InIDogJ3InKTsKPiAgIAlzZXFfcHV0YyhtLCAnICcpOwo+ICAgfQo+IEBAIC0zMzYs NyArMzM5LDcgQEAgc3RhdGljIGludCBwZXJfZmlsZV9zdGF0cyhpbnQgaWQsIHZvaWQgKnB0ciwg dm9pZCAqZGF0YSkKPiAgIAkJCWlmIChwcGd0dC0+ZmlsZV9wcml2ICE9IHN0YXRzLT5maWxlX3By aXYpCj4gICAJCQkJY29udGludWU7Cj4gICAKPiAtCQkJaWYgKG9iai0+cmluZykgLyogWFhYIHBl ci12bWEgc3RhdGlzdGljICovCj4gKwkJCWlmIChvYmotPmFjdGl2ZSkgLyogWFhYIHBlci12bWEg c3RhdGlzdGljICovCj4gICAJCQkJc3RhdHMtPmFjdGl2ZSArPSBvYmotPmJhc2Uuc2l6ZTsKPiAg IAkJCWVsc2UKPiAgIAkJCQlzdGF0cy0+aW5hY3RpdmUgKz0gb2JqLT5iYXNlLnNpemU7Cj4gQEAg LTM0Niw3ICszNDksNyBAQCBzdGF0aWMgaW50IHBlcl9maWxlX3N0YXRzKGludCBpZCwgdm9pZCAq cHRyLCB2b2lkICpkYXRhKQo+ICAgCX0gZWxzZSB7Cj4gICAJCWlmIChpOTE1X2dlbV9vYmpfZ2d0 dF9ib3VuZChvYmopKSB7Cj4gICAJCQlzdGF0cy0+Z2xvYmFsICs9IG9iai0+YmFzZS5zaXplOwo+ IC0JCQlpZiAob2JqLT5yaW5nKQo+ICsJCQlpZiAob2JqLT5hY3RpdmUpCj4gICAJCQkJc3RhdHMt PmFjdGl2ZSArPSBvYmotPmJhc2Uuc2l6ZTsKPiAgIAkJCWVsc2UKPiAgIAkJCQlzdGF0cy0+aW5h Y3RpdmUgKz0gb2JqLT5iYXNlLnNpemU7Cj4gQEAgLTU0NCwxNCArNTQ3LDE0IEBAIHN0YXRpYyBp bnQgaTkxNV9nZW1fcGFnZWZsaXBfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEp Cj4gICAJCQkJc2VxX3ByaW50ZihtLCAiRmxpcCBwZW5kaW5nICh3YWl0aW5nIGZvciB2c3luYykg b24gcGlwZSAlYyAocGxhbmUgJWMpXG4iLAo+ICAgCQkJCQkgICBwaXBlLCBwbGFuZSk7Cj4gICAJ CQl9Cj4gLQkJCWlmICh3b3JrLT5mbGlwX3F1ZXVlZF9yaW5nKSB7Cj4gKwkJCWlmICh3b3JrLT5m bGlwX3F1ZXVlZF9yZXF1ZXN0KSB7Cj4gKwkJCQlzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEg PQo+ICsJCQkJCXdvcmstPmZsaXBfcXVldWVkX3JlcXVlc3Q7Cj4gICAJCQkJc2VxX3ByaW50Ziht LCAiRmxpcCBxdWV1ZWQgb24gJXMgYXQgc2Vxbm8gJXUsIG5leHQgc2Vxbm8gJXUgW2N1cnJlbnQg YnJlYWRjcnVtYiAldV0sIGNvbXBsZXRlZD8gJWRcbiIsCj4gLQkJCQkJICAgd29yay0+ZmxpcF9x dWV1ZWRfcmluZy0+bmFtZSwKPiAtCQkJCQkgICB3b3JrLT5mbGlwX3F1ZXVlZF9zZXFubywKPiAt CQkJCQkgICBkZXZfcHJpdi0+bmV4dF9zZXFubywKPiAtCQkJCQkgICB3b3JrLT5mbGlwX3F1ZXVl ZF9yaW5nLT5nZXRfc2Vxbm8od29yay0+ZmxpcF9xdWV1ZWRfcmluZywgdHJ1ZSksCj4gLQkJCQkJ ICAgaTkxNV9zZXFub19wYXNzZWQod29yay0+ZmxpcF9xdWV1ZWRfcmluZy0+Z2V0X3NlcW5vKHdv cmstPmZsaXBfcXVldWVkX3JpbmcsIHRydWUpLAo+IC0JCQkJCQkJICAgICB3b3JrLT5mbGlwX3F1 ZXVlZF9zZXFubykpOwo+ICsJCQkJCSAgIHJxLT5lbmdpbmUtPm5hbWUsCj4gKwkJCQkJICAgcnEt PnNlcW5vLCBycS0+aTkxNS0+bmV4dF9zZXFubywKPiArCQkJCQkgICBycS0+ZW5naW5lLT5nZXRf c2Vxbm8ocnEtPmVuZ2luZSksCj4gKwkJCQkJICAgX19pOTE1X3JlcXVlc3RfY29tcGxldGVfX3dh KHJxKSk7Cj4gICAJCQl9IGVsc2UKPiAgIAkJCQlzZXFfcHJpbnRmKG0sICJGbGlwIG5vdCBhc3Nv Y2lhdGVkIHdpdGggYW55IHJpbmdcbiIpOwo+ICAgCQkJc2VxX3ByaW50ZihtLCAiRmxpcCBxdWV1 ZWQgb24gZnJhbWUgJWQsICh3YXMgcmVhZHkgb24gZnJhbWUgJWQpLCBub3cgJWRcbiIsCj4gQEAg LTU4OCw4ICs1OTEsOCBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX3JlcXVlc3RfaW5mbyhzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gICAJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUg PSBtLT5wcml2YXRlOwo+ICAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ ZGV2Owo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+IC0Jc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpnZW1fcmVxdWVzdDsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZTsKPiArCXN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycTsKPiAgIAlpbnQgcmV0LCBj b3VudCwgaTsKPiAgIAo+ICAgCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5z dHJ1Y3RfbXV0ZXgpOwo+IEBAIC01OTcsMTcgKzYwMCwxNSBAQCBzdGF0aWMgaW50IGk5MTVfZ2Vt X3JlcXVlc3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gICAJCXJldHVy biByZXQ7Cj4gICAKPiAgIAljb3VudCA9IDA7Cj4gLQlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9w cml2LCBpKSB7Cj4gLQkJaWYgKGxpc3RfZW1wdHkoJnJpbmctPnJlcXVlc3RfbGlzdCkpCj4gKwlm b3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwgaSkgewo+ICsJCWlmIChsaXN0X2VtcHR5 KCZlbmdpbmUtPnJlcXVlc3RzKSkKPiAgIAkJCWNvbnRpbnVlOwo+ICAgCj4gLQkJc2VxX3ByaW50 ZihtLCAiJXMgcmVxdWVzdHM6XG4iLCByaW5nLT5uYW1lKTsKPiAtCQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGdlbV9yZXF1ZXN0LAo+IC0JCQkJICAgICZyaW5nLT5yZXF1ZXN0X2xpc3QsCj4gLQkJCQkg ICAgbGlzdCkgewo+ICsJCXNlcV9wcmludGYobSwgIiVzIHJlcXVlc3RzOlxuIiwgZW5naW5lLT5u YW1lKTsKPiArCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJxLCAmZW5naW5lLT5yZXF1ZXN0cywgZW5n aW5lX2xpc3QpIHsKPiAgIAkJCXNlcV9wcmludGYobSwgIiAgICAlZCBAICVkXG4iLAo+IC0JCQkJ ICAgZ2VtX3JlcXVlc3QtPnNlcW5vLAo+IC0JCQkJICAgKGludCkgKGppZmZpZXMgLSBnZW1fcmVx dWVzdC0+ZW1pdHRlZF9qaWZmaWVzKSk7Cj4gKwkJCQkgICBycS0+c2Vxbm8sCj4gKwkJCQkgICAo aW50KShqaWZmaWVzIC0gcnEtPmVtaXR0ZWRfamlmZmllcykpOwo+ICAgCQl9Cj4gICAJCWNvdW50 Kys7Cj4gICAJfQo+IEBAIC02MTksMTMgKzYyMCwxNyBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX3Jl cXVlc3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gICAJcmV0dXJuIDA7 Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgaTkxNV9yaW5nX3NlcW5vX2luZm8oc3RydWN0IHNl cV9maWxlICptLAo+IC0JCQkJIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK3N0YXRp YyB2b2lkIGk5MTVfZW5naW5lX3NlcW5vX2luZm8oc3RydWN0IHNlcV9maWxlICptLAo+ICsJCQkJ ICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+IC0JaWYgKHJpbmctPmdl dF9zZXFubykgewo+IC0JCXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2UgKCVzKTogJXVc biIsCj4gLQkJCSAgIHJpbmctPm5hbWUsIHJpbmctPmdldF9zZXFubyhyaW5nLCBmYWxzZSkpOwo+ IC0JfQo+ICsJc2VxX3ByaW50ZihtLCAiQ3VycmVudCBzZXF1ZW5jZSAoJXMpOiBzZXFubz0ldSwg dGFnPSV1IFtsYXN0IGJyZWFkY3J1bWIgJXUsIGxhc3QgcmVxdWVzdCAldV0sIG5leHQgc2Vxbm89 JXUsIG5leHQgdGFnPSV1XG4iLAo+ICsJCSAgIGVuZ2luZS0+bmFtZSwKPiArCQkgICBlbmdpbmUt PmdldF9zZXFubyhlbmdpbmUpLAo+ICsJCSAgIGVuZ2luZS0+dGFnLAo+ICsJCSAgIGVuZ2luZS0+ YnJlYWRjcnVtYltlbmdpbmUtPmlkXSwKPiArCQkgICBlbmdpbmUtPmxhc3RfcmVxdWVzdCA/IGVu Z2luZS0+bGFzdF9yZXF1ZXN0LT5zZXFubyA6IDAsCj4gKwkJICAgZW5naW5lLT5pOTE1LT5uZXh0 X3NlcW5vLAo+ICsJCSAgIGVuZ2luZS0+bmV4dF90YWcpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMg aW50IGk5MTVfZ2VtX3NlcW5vX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ IEBAIC02MzMsNyArNjM4LDcgQEAgc3RhdGljIGludCBpOTE1X2dlbV9zZXFub19pbmZvKHN0cnVj dCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAgIAlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9k ZSA9IG0tPnByaXZhdGU7Cj4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9y LT5kZXY7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gKwlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gICAJaW50IHJldCwgaTsKPiAgIAo+ICAgCXJldCA9IG11 dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IEBAIC02NDEsOCAr NjQ2LDggQEAgc3RhdGljIGludCBpOTE1X2dlbV9zZXFub19pbmZvKHN0cnVjdCBzZXFfZmlsZSAq bSwgdm9pZCAqZGF0YSkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAlpbnRlbF9ydW50aW1lX3BtX2dl dChkZXZfcHJpdik7Cj4gICAKPiAtCWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3ByaXYsIGkpCj4g LQkJaTkxNV9yaW5nX3NlcW5vX2luZm8obSwgcmluZyk7Cj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5n aW5lLCBkZXZfcHJpdiwgaSkKPiArCQlpOTE1X2VuZ2luZV9zZXFub19pbmZvKG0sIGVuZ2luZSk7 Cj4gICAKPiAgIAlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7Cj4gICAJbXV0ZXhfdW5s b2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gQEAgLTY1Niw3ICs2NjEsNyBAQCBzdGF0aWMgaW50 IGk5MTVfaW50ZXJydXB0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAg CXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gbS0+cHJpdmF0ZTsKPiAgIAlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZzsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAgIAlpbnQg cmV0LCBpLCBwaXBlOwo+ICAgCj4gICAJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZk ZXYtPnN0cnVjdF9tdXRleCk7Cj4gQEAgLTgyMywxMyArODI4LDEzIEBAIHN0YXRpYyBpbnQgaTkx NV9pbnRlcnJ1cHRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gICAJCXNl cV9wcmludGYobSwgIkdyYXBoaWNzIEludGVycnVwdCBtYXNrOgkJJTA4eFxuIiwKPiAgIAkJCSAg IEk5MTVfUkVBRChHVElNUikpOwo+ICAgCX0KPiAtCWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3By aXYsIGkpIHsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpKSB7Cj4gICAJ CWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA2KSB7Cj4gICAJCQlzZXFfcHJpbnRmKG0sCj4g ICAJCQkJICAgIkdyYXBoaWNzIEludGVycnVwdCBtYXNrICglcyk6CSUwOHhcbiIsCj4gLQkJCQkg ICByaW5nLT5uYW1lLCBJOTE1X1JFQURfSU1SKHJpbmcpKTsKPiArCQkJCSAgIGVuZ2luZS0+bmFt ZSwgSTkxNV9SRUFEX0lNUihlbmdpbmUpKTsKPiAgIAkJfQo+IC0JCWk5MTVfcmluZ19zZXFub19p bmZvKG0sIHJpbmcpOwo+ICsJCWk5MTVfZW5naW5lX3NlcW5vX2luZm8obSwgZW5naW5lKTsKPiAg IAl9Cj4gICAJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOwo+ICAgCW11dGV4X3VubG9j aygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IEBAIC04NzEsMTIgKzg3NiwxMiBAQCBzdGF0aWMgaW50 IGk5MTVfaHdzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAgCXN0cnVj dCBkcm1faW5mb19ub2RlICpub2RlID0gbS0+cHJpdmF0ZTsKPiAgIAlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZzsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAgIAljb25zdCB1MzIg Kmh3czsKPiAgIAlpbnQgaTsKPiAgIAo+IC0JcmluZyA9ICZkZXZfcHJpdi0+cmluZ1sodWludHB0 cl90KW5vZGUtPmluZm9fZW50LT5kYXRhXTsKPiAtCWh3cyA9IHJpbmctPnN0YXR1c19wYWdlLnBh Z2VfYWRkcjsKPiArCWVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lWyh1aW50cHRyX3Qpbm9kZS0+ aW5mb19lbnQtPmRhdGFdOwo+ICsJaHdzID0gZW5naW5lLT5zdGF0dXNfcGFnZS5wYWdlX2FkZHI7 Cj4gICAJaWYgKGh3cyA9PSBOVUxMKQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+IEBAIC0xMDAwLDcg KzEwMDUsNyBAQCBpOTE1X25leHRfc2Vxbm9fc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCj4gICAJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRhdGE7Cj4gICAJaW50IHJldDsKPiAgIAo+IC0JcmV0 ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwlyZXQg PSBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOwo+ICAgCWlmIChyZXQpCj4gICAJ CXJldHVybiByZXQ7Cj4gICAKPiBAQCAtMTcwMSwxMiArMTcwNiwxMCBAQCBzdGF0aWMgaW50IGk5 MTVfZ2VtX2ZyYW1lYnVmZmVyX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkIGRlc2NyaWJlX2N0eF9yaW5n YnVmKHN0cnVjdCBzZXFfZmlsZSAqbSwKPiAtCQkJCSBzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAq cmluZ2J1ZikKPiArc3RhdGljIHZvaWQgZGVzY3JpYmVfcmluZyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0s IHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nKQo+ICAgewo+ICAgCXNlcV9wcmludGYobSwg IiAocmluZ2J1ZmZlciwgc3BhY2U6ICVkLCBoZWFkOiAldSwgdGFpbDogJXUsIGxhc3QgaGVhZDog JWQpIiwKPiAtCQkgICByaW5nYnVmLT5zcGFjZSwgcmluZ2J1Zi0+aGVhZCwgcmluZ2J1Zi0+dGFp bCwKPiAtCQkgICByaW5nYnVmLT5sYXN0X3JldGlyZWRfaGVhZCk7Cj4gKwkJICAgcmluZy0+c3Bh Y2UsIHJpbmctPmhlYWQsIHJpbmctPnRhaWwsIHJpbmctPnJldGlyZWRfaGVhZCk7Cj4gICB9Cj4g ICAKPiAgIHN0YXRpYyBpbnQgaTkxNV9jb250ZXh0X3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0s IHZvaWQgKnVudXNlZCkKPiBAQCAtMTcxNCw3ICsxNzE3LDcgQEAgc3RhdGljIGludCBpOTE1X2Nv bnRleHRfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ICAgCXN0cnVj dCBkcm1faW5mb19ub2RlICpub2RlID0gbS0+cHJpdmF0ZTsKPiAgIAlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZzsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAgIAlzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqY3R4Owo+ICAgCWludCByZXQsIGk7Cj4gICAKPiBAQCAtMTcyOCw0MiArMTcz MSwyNiBAQCBzdGF0aWMgaW50IGk5MTVfY29udGV4dF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpt LCB2b2lkICp1bnVzZWQpCj4gICAJCXNlcV9wdXRjKG0sICdcbicpOwo+ICAgCX0KPiAgIAo+IC0J aWYgKGRldl9wcml2LT5pcHMucmVuZGVyY3R4KSB7Cj4gLQkJc2VxX3B1dHMobSwgInJlbmRlciBj b250ZXh0ICIpOwo+IC0JCWRlc2NyaWJlX29iaihtLCBkZXZfcHJpdi0+aXBzLnJlbmRlcmN0eCk7 Cj4gLQkJc2VxX3B1dGMobSwgJ1xuJyk7Cj4gLQl9Cj4gLQo+ICAgCWxpc3RfZm9yX2VhY2hfZW50 cnkoY3R4LCAmZGV2X3ByaXYtPmNvbnRleHRfbGlzdCwgbGluaykgewo+IC0JCWlmICghaTkxNS5l bmFibGVfZXhlY2xpc3RzICYmCj4gLQkJICAgIGN0eC0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGUg PT0gTlVMTCkKPiAtCQkJY29udGludWU7Cj4gLQo+ICAgCQlzZXFfcHV0cyhtLCAiSFcgY29udGV4 dCAiKTsKPiAgIAkJZGVzY3JpYmVfY3R4KG0sIGN0eCk7Cj4gLQkJZm9yX2VhY2hfcmluZyhyaW5n LCBkZXZfcHJpdiwgaSkgewo+IC0JCQlpZiAocmluZy0+ZGVmYXVsdF9jb250ZXh0ID09IGN0eCkK PiArCQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwgaSkgewo+ICsJCQlpZiAoZW5n aW5lLT5kZWZhdWx0X2NvbnRleHQgPT0gY3R4KQo+ICAgCQkJCXNlcV9wcmludGYobSwgIihkZWZh dWx0IGNvbnRleHQgJXMpICIsCj4gLQkJCQkJICAgcmluZy0+bmFtZSk7Cj4gKwkJCQkJICAgZW5n aW5lLT5uYW1lKTsKPiAgIAkJfQo+ICAgCj4gLQkJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykg ewo+ICsJCXNlcV9wdXRjKG0sICdcbicpOwo+ICsJCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRl dl9wcml2LCBpKSB7Cj4gKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBjdHgt PnJpbmdbaV0uc3RhdGU7Cj4gKwkJCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nID0gY3R4 LT5yaW5nW2ldLnJpbmc7Cj4gKwo+ICsJCQlzZXFfcHJpbnRmKG0sICIlczogIiwgZW5naW5lLT5u YW1lKTsKPiArCQkJaWYgKG9iaikKPiArCQkJCWRlc2NyaWJlX29iaihtLCBvYmopOwo+ICsJCQlp ZiAocmluZykKPiArCQkJCWRlc2NyaWJlX3JpbmcobSwgcmluZyk7Cj4gICAJCQlzZXFfcHV0Yyht LCAnXG4nKTsKPiAtCQkJZm9yX2VhY2hfcmluZyhyaW5nLCBkZXZfcHJpdiwgaSkgewo+IC0JCQkJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmogPQo+IC0JCQkJCWN0eC0+ZW5naW5l W2ldLnN0YXRlOwo+IC0JCQkJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYgPQo+IC0J CQkJCWN0eC0+ZW5naW5lW2ldLnJpbmdidWY7Cj4gLQo+IC0JCQkJc2VxX3ByaW50ZihtLCAiJXM6 ICIsIHJpbmctPm5hbWUpOwo+IC0JCQkJaWYgKGN0eF9vYmopCj4gLQkJCQkJZGVzY3JpYmVfb2Jq KG0sIGN0eF9vYmopOwo+IC0JCQkJaWYgKHJpbmdidWYpCj4gLQkJCQkJZGVzY3JpYmVfY3R4X3Jp bmdidWYobSwgcmluZ2J1Zik7Cj4gLQkJCQlzZXFfcHV0YyhtLCAnXG4nKTsKPiAtCQkJfQo+IC0J CX0gZWxzZSB7Cj4gLQkJCWRlc2NyaWJlX29iaihtLCBjdHgtPmxlZ2FjeV9od19jdHgucmNzX3N0 YXRlKTsKPiAgIAkJfQo+ICAgCj4gICAJCXNlcV9wdXRjKG0sICdcbicpOwo+IEBAIC0xNzc4LDQ1 ICsxNzY1LDUwIEBAIHN0YXRpYyBpbnQgaTkxNV9kdW1wX2xyYyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0s IHZvaWQgKnVudXNlZCkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChz dHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOwo+ICAgCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBub2RlLT5taW5vci0+ZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmc7Cj4gLQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4Owo+ICsJc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lOwo+ICAgCWludCByZXQsIGk7Cj4gICAKPiAtCWlmICghaTkxNS5lbmFibGVf ZXhlY2xpc3RzKSB7Cj4gLQkJc2VxX3ByaW50ZihtLCAiTG9naWNhbCBSaW5nIENvbnRleHRzIGFy ZSBkaXNhYmxlZFxuIik7Cj4gLQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+ICAgCXJldCA9IG11dGV4 X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWlmIChyZXQpCj4g ICAJCXJldHVybiByZXQ7Cj4gICAKPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkoY3R4LCAmZGV2X3By aXYtPmNvbnRleHRfbGlzdCwgbGluaykgewo+IC0JCWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3By aXYsIGkpIHsKPiAtCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmogPSBjdHgt PmVuZ2luZVtpXS5zdGF0ZTsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIHRvX2k5MTUoZGV2 KSwgaSkgewo+ICsJCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICAgCj4gLQkJCWlm IChyaW5nLT5kZWZhdWx0X2NvbnRleHQgPT0gY3R4KQo+IC0JCQkJY29udGludWU7Cj4gKwkJbGlz dF9mb3JfZWFjaF9lbnRyeShyaW5nLCAmZW5naW5lLT5yaW5ncywgZW5naW5lX2xpc3QpIHsKPiAr CQkJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCA9IHJpbmctPmN0eDsKPiArCQkJc3RydWN0IHRh c2tfc3RydWN0ICp0YXNrOwo+ICsKPiArCQkJc2VxX3ByaW50ZihtLCAiQ09OVEVYVDogJXMiLCBl bmdpbmUtPm5hbWUpOwo+ICsKPiArCQkJcmN1X3JlYWRfbG9jaygpOwo+ICsJCQl0YXNrID0gY3R4 LT5maWxlX3ByaXYgPyBwaWRfdGFzayhjdHgtPmZpbGVfcHJpdi0+ZmlsZS0+cGlkLCBQSURUWVBF X1BJRCkgOiBOVUxMOwo+ICsJCQlzZXFfcHJpbnRmKG0sICIgJWQ6JWRcbiIsIHRhc2sgPyB0YXNr LT5waWQgOiAwLCBjdHgtPmZpbGVfcHJpdiA/IGN0eC0+dXNlcl9oYW5kbGUgOiAwKTsKPiArCQkJ cmN1X3JlYWRfdW5sb2NrKCk7Cj4gICAKPiAtCQkJaWYgKGN0eF9vYmopIHsKPiAtCQkJCXN0cnVj dCBwYWdlICpwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGN0eF9vYmosIDEpOwo+IC0J CQkJdWludDMyX3QgKnJlZ19zdGF0ZSA9IGttYXBfYXRvbWljKHBhZ2UpOwo+ICsJCQlpZiAoZW5n aW5lLT5leGVjbGlzdHNfZW5hYmxlZCAmJgo+ICsJCQkgICAgY3R4LT5yaW5nW2VuZ2luZS0+aWRd LnN0YXRlKSB7Cj4gKwkJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsJCQkJ c3RydWN0IHBhZ2UgKnBhZ2U7Cj4gKwkJCQl1aW50MzJfdCAqcmVnX3N0YXRlOwo+ICAgCQkJCWlu dCBqOwo+ICAgCj4gLQkJCQlzZXFfcHJpbnRmKG0sICJDT05URVhUOiAlcyAldVxuIiwgcmluZy0+ bmFtZSwKPiAtCQkJCQkJaW50ZWxfZXhlY2xpc3RzX2N0eF9pZChjdHhfb2JqKSk7Cj4gKwkJCQlv YmogPSBjdHgtPnJpbmdbZW5naW5lLT5pZF0uc3RhdGU7Cj4gKwkJCQlwYWdlID0gaTkxNV9nZW1f b2JqZWN0X2dldF9wYWdlKG9iaiwgMSk7Cj4gKwkJCQlyZWdfc3RhdGUgPSBrbWFwX2F0b21pYyhw YWdlKTsKPiAgIAo+ICsJCQkJc2VxX3ByaW50ZihtLCAiXHRMUkNBOlxuIik7Cj4gICAJCQkJZm9y IChqID0gMDsgaiA8IDB4NjAwIC8gc2l6ZW9mKHUzMikgLyA0OyBqICs9IDQpIHsKPiAgIAkJCQkJ c2VxX3ByaW50ZihtLCAiXHRbMHglMDhseF0gMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XG4i LAo+IC0JCQkJCWk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChjdHhfb2JqKSArIDQwOTYgKyAoaiAq IDQpLAo+ICsJCQkJCWk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopICsgNDA5NiArIChqICog NCksCj4gICAJCQkJCXJlZ19zdGF0ZVtqXSwgcmVnX3N0YXRlW2ogKyAxXSwKPiAgIAkJCQkJcmVn X3N0YXRlW2ogKyAyXSwgcmVnX3N0YXRlW2ogKyAzXSk7Cj4gICAJCQkJfQo+ICAgCQkJCWt1bm1h cF9hdG9taWMocmVnX3N0YXRlKTsKPiAgIAo+ICAgCQkJCXNlcV9wdXRjKG0sICdcbicpOwo+IC0J CQl9Cj4gKwkJCX0gZWxzZQo+ICsJCQkJc2VxX3B1dHMobSwgIlx0TG9naWNhbCBSaW5nIENvbnRl eHRzIGFyZSBkaXNhYmxlZFxuIik7Cj4gICAJCX0KPiAgIAl9Cj4gICAKPiBAQCAtMTgzMCw3ICsx ODIyLDcgQEAgc3RhdGljIGludCBpOTE1X2V4ZWNsaXN0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZv aWQgKmRhdGEpCj4gICAJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9p bmZvX25vZGUgKiltLT5wcml2YXRlOwo+ICAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2Rl LT5taW5vci0+ZGV2Owo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+ICsJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICAgCXUzMiBzdGF0dXNfcG9pbnRlcjsKPiAg IAl1OCByZWFkX3BvaW50ZXI7Cj4gICAJdTggd3JpdGVfcG9pbnRlcjsKPiBAQCAtMTg0MCwzMSAr MTgzMiwzMSBAQCBzdGF0aWMgaW50IGk5MTVfZXhlY2xpc3RzKHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqZGF0YSkKPiAgIAlpbnQgcmluZ19pZCwgaTsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gLQlp ZiAoIWk5MTUuZW5hYmxlX2V4ZWNsaXN0cykgewo+IC0JCXNlcV9wdXRzKG0sICJMb2dpY2FsIFJp bmcgQ29udGV4dHMgYXJlIGRpc2FibGVkXG4iKTsKPiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAtCj4g ICAJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4g ICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0JZm9yX2VhY2hfcmluZyhyaW5n LCBkZXZfcHJpdiwgcmluZ19pZCkgewo+IC0JCXN0cnVjdCBpbnRlbF9jdHhfc3VibWl0X3JlcXVl c3QgKmhlYWRfcmVxID0gTlVMTDsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2 LCByaW5nX2lkKSB7Cj4gKwkJc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxID0gTlVMTDsKPiAg IAkJaW50IGNvdW50ID0gMDsKPiAgIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAgIAo+IC0JCXNl cV9wcmludGYobSwgIiVzXG4iLCByaW5nLT5uYW1lKTsKPiArCQlzZXFfcHJpbnRmKG0sICIlc1xu IiwgZW5naW5lLT5uYW1lKTsKPiArCj4gKwkJaWYgKCFlbmdpbmUtPmV4ZWNsaXN0c19lbmFibGVk KSB7Cj4gKwkJCXNlcV9wdXRzKG0sICJcdEV4ZWNsaXN0cyBhcmUgZGlzYWJsZWRcbiIpOwo+ICsJ CQljb250aW51ZTsKPiArCQl9Cj4gICAKPiAtCQlzdGF0dXMgPSBJOTE1X1JFQUQoUklOR19FWEVD TElTVF9TVEFUVVMocmluZykpOwo+IC0JCWN0eF9pZCA9IEk5MTVfUkVBRChSSU5HX0VYRUNMSVNU X1NUQVRVUyhyaW5nKSArIDQpOwo+ICsJCXN0YXR1cyA9IEk5MTVfUkVBRChSSU5HX0VYRUNMSVNU X1NUQVRVUyhlbmdpbmUpKTsKPiArCQljdHhfaWQgPSBJOTE1X1JFQUQoUklOR19FWEVDTElTVF9T VEFUVVMoZW5naW5lKSArIDQpOwo+ICAgCQlzZXFfcHJpbnRmKG0sICJcdEV4ZWNsaXN0IHN0YXR1 czogMHglMDhYLCBjb250ZXh0OiAldVxuIiwKPiAgIAkJCSAgIHN0YXR1cywgY3R4X2lkKTsKPiAg IAo+IC0JCXN0YXR1c19wb2ludGVyID0gSTkxNV9SRUFEKFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRS KHJpbmcpKTsKPiArCQlzdGF0dXNfcG9pbnRlciA9IEk5MTVfUkVBRChSSU5HX0NPTlRFWFRfU1RB VFVTX1BUUihlbmdpbmUpKTsKPiAgIAkJc2VxX3ByaW50ZihtLCAiXHRTdGF0dXMgcG9pbnRlcjog MHglMDhYXG4iLCBzdGF0dXNfcG9pbnRlcik7Cj4gICAKPiAtCQlyZWFkX3BvaW50ZXIgPSByaW5n LT5uZXh0X2NvbnRleHRfc3RhdHVzX2J1ZmZlcjsKPiArCQlyZWFkX3BvaW50ZXIgPSBlbmdpbmUt Pm5leHRfY29udGV4dF9zdGF0dXNfYnVmZmVyOwo+ICAgCQl3cml0ZV9wb2ludGVyID0gc3RhdHVz X3BvaW50ZXIgJiAweDA3Owo+ICAgCQlpZiAocmVhZF9wb2ludGVyID4gd3JpdGVfcG9pbnRlcikK PiAgIAkJCXdyaXRlX3BvaW50ZXIgKz0gNjsKPiBAQCAtMTg3MiwyOSArMTg2NCwzMyBAQCBzdGF0 aWMgaW50IGk5MTVfZXhlY2xpc3RzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAg IAkJCSAgIHJlYWRfcG9pbnRlciwgd3JpdGVfcG9pbnRlcik7Cj4gICAKPiAgIAkJZm9yIChpID0g MDsgaSA8IDY7IGkrKykgewo+IC0JCQlzdGF0dXMgPSBJOTE1X1JFQUQoUklOR19DT05URVhUX1NU QVRVU19CVUYocmluZykgKyA4KmkpOwo+IC0JCQljdHhfaWQgPSBJOTE1X1JFQUQoUklOR19DT05U RVhUX1NUQVRVU19CVUYocmluZykgKyA4KmkgKyA0KTsKPiArCQkJc3RhdHVzID0gSTkxNV9SRUFE KFJJTkdfQ09OVEVYVF9TVEFUVVNfQlVGKGVuZ2luZSkgKyA4KmkpOwo+ICsJCQljdHhfaWQgPSBJ OTE1X1JFQUQoUklOR19DT05URVhUX1NUQVRVU19CVUYoZW5naW5lKSArIDgqaSArIDQpOwo+ICAg Cj4gICAJCQlzZXFfcHJpbnRmKG0sICJcdFN0YXR1cyBidWZmZXIgJWQ6IDB4JTA4WCwgY29udGV4 dDogJXVcbiIsCj4gICAJCQkJICAgaSwgc3RhdHVzLCBjdHhfaWQpOwo+ICAgCQl9Cj4gICAKPiAt CQlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+ZXhlY2xpc3RfbG9jaywgZmxhZ3MpOwo+IC0JCWxp c3RfZm9yX2VhY2goY3Vyc29yLCAmcmluZy0+ZXhlY2xpc3RfcXVldWUpCj4gKwkJc3Bpbl9sb2Nr X2lycXNhdmUoJmVuZ2luZS0+aXJxbG9jaywgZmxhZ3MpOwo+ICsJCWxpc3RfZm9yX2VhY2goY3Vy c29yLCAmZW5naW5lLT5wZW5kaW5nKQo+ICAgCQkJY291bnQrKzsKPiAtCQloZWFkX3JlcSA9IGxp c3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmcmluZy0+ZXhlY2xpc3RfcXVldWUsCj4gLQkJCQlzdHJ1 Y3QgaW50ZWxfY3R4X3N1Ym1pdF9yZXF1ZXN0LCBleGVjbGlzdF9saW5rKTsKPiAtCQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZyaW5nLT5leGVjbGlzdF9sb2NrLCBmbGFncyk7Cj4gKwkJcnEgPSBs aXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmVuZ2luZS0+cGVuZGluZywgdHlwZW9mKCpycSksIGVu Z2luZV9saXN0KTsKPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmlycWxvY2ss IGZsYWdzKTsKPiAgIAo+ICAgCQlzZXFfcHJpbnRmKG0sICJcdCVkIHJlcXVlc3RzIGluIHF1ZXVl XG4iLCBjb3VudCk7Cj4gLQkJaWYgKGhlYWRfcmVxKSB7Cj4gLQkJCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpjdHhfb2JqOwo+IC0KPiAtCQkJY3R4X29iaiA9IGhlYWRfcmVxLT5jdHgtPmVu Z2luZVtyaW5nX2lkXS5zdGF0ZTsKPiAtCQkJc2VxX3ByaW50ZihtLCAiXHRIZWFkIHJlcXVlc3Qg aWQ6ICV1XG4iLAo+IC0JCQkJICAgaW50ZWxfZXhlY2xpc3RzX2N0eF9pZChjdHhfb2JqKSk7Cj4g LQkJCXNlcV9wcmludGYobSwgIlx0SGVhZCByZXF1ZXN0IHRhaWw6ICV1XG4iLAo+IC0JCQkJICAg aGVhZF9yZXEtPnRhaWwpOwo+ICsJCWlmIChycSkgewo+ICsJCQlzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY3R4ID0gcnEtPmN0eDsKPiArCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwo+ICsKPiAr CQkJc2VxX3ByaW50ZihtLCAiXHRIZWFkIHJlcXVlc3QgY3R4OiIpOwo+ICsKPiArCQkJcmN1X3Jl YWRfbG9jaygpOwo+ICsJCQl0YXNrID0gY3R4LT5maWxlX3ByaXYgPyBwaWRfdGFzayhjdHgtPmZp bGVfcHJpdi0+ZmlsZS0+cGlkLCBQSURUWVBFX1BJRCkgOiBOVUxMOwo+ICsJCQlzZXFfcHJpbnRm KG0sICIgJWQ6JWRcbiIsIHRhc2sgPyB0YXNrLT5waWQgOiAwLCBjdHgtPmZpbGVfcHJpdiA/IGN0 eC0+dXNlcl9oYW5kbGUgOiAwKTsKPiArCQkJcmN1X3JlYWRfdW5sb2NrKCk7Cj4gKwo+ICsJCQlz ZXFfcHJpbnRmKG0sICJcdEhlYWQgcmVxdWVzdCB0YWlsOiAldVxuIiwgcnEtPnRhaWwpOwo+ICsJ CQlzZXFfcHJpbnRmKG0sICJcdEhlYWQgcmVxdWVzdCBzZXFubzogJWRcbiIsIHJxLT5zZXFubyk7 Cj4gICAJCX0KPiAgIAo+ICAgCQlzZXFfcHV0YyhtLCAnXG4nKTsKPiBAQCAtMjAyNSw3ICsyMDIx LDcgQEAgc3RhdGljIGludCBwZXJfZmlsZV9jdHgoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRh dGEpCj4gICBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCBz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICAgCXN0cnVjdCBp OTE1X2h3X3BwZ3R0ICpwcGd0dCA9IGRldl9wcml2LT5tbS5hbGlhc2luZ19wcGd0dDsKPiAgIAlp bnQgdW51c2VkLCBpOwo+ICAgCj4gQEAgLTIwMzQsMTMgKzIwMzAsMTMgQEAgc3RhdGljIHZvaWQg Z2VuOF9wcGd0dF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRybV9kZXZpY2UgKmRl dikKPiAgIAo+ICAgCXNlcV9wcmludGYobSwgIlBhZ2UgZGlyZWN0b3JpZXM6ICVkXG4iLCBwcGd0 dC0+bnVtX3BkX3BhZ2VzKTsKPiAgIAlzZXFfcHJpbnRmKG0sICJQYWdlIHRhYmxlczogJWRcbiIs IHBwZ3R0LT5udW1fcGRfZW50cmllcyk7Cj4gLQlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2 LCB1bnVzZWQpIHsKPiAtCQlzZXFfcHJpbnRmKG0sICIlc1xuIiwgcmluZy0+bmFtZSk7Cj4gKwlm b3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwgdW51c2VkKSB7Cj4gKwkJc2VxX3ByaW50 ZihtLCAiJXNcbiIsIGVuZ2luZS0+bmFtZSk7Cj4gICAJCWZvciAoaSA9IDA7IGkgPCA0OyBpKysp IHsKPiAgIAkJCXUzMiBvZmZzZXQgPSAweDI3MCArIGkgKiA4Owo+IC0JCQl1NjQgcGRwID0gSTkx NV9SRUFEKHJpbmctPm1taW9fYmFzZSArIG9mZnNldCArIDQpOwo+ICsJCQl1NjQgcGRwID0gSTkx NV9SRUFEKGVuZ2luZS0+bW1pb19iYXNlICsgb2Zmc2V0ICsgNCk7Cj4gICAJCQlwZHAgPDw9IDMy Owo+IC0JCQlwZHAgfD0gSTkxNV9SRUFEKHJpbmctPm1taW9fYmFzZSArIG9mZnNldCk7Cj4gKwkJ CXBkcCB8PSBJOTE1X1JFQUQoZW5naW5lLT5tbWlvX2Jhc2UgKyBvZmZzZXQpOwo+ICAgCQkJc2Vx X3ByaW50ZihtLCAiXHRQRFAlZCAweCUwMTZsbHhcbiIsIGksIHBkcCk7Cj4gICAJCX0KPiAgIAl9 Cj4gQEAgLTIwNDksMjAgKzIwNDUsMjAgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9pbmZvKHN0 cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIHN0YXRpYyB2b2lk IGdlbjZfcHBndHRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gKwlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gICAJc3RydWN0IGRybV9maWxlICpmaWxlOwo+ICAg CWludCBpOwo+ICAgCj4gICAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID09IDYpCj4gICAJCXNl cV9wcmludGYobSwgIkdGWF9NT0RFOiAweCUwOHhcbiIsIEk5MTVfUkVBRChHRlhfTU9ERSkpOwo+ ICAgCj4gLQlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2LCBpKSB7Cj4gLQkJc2VxX3ByaW50 ZihtLCAiJXNcbiIsIHJpbmctPm5hbWUpOwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2 X3ByaXYsIGkpIHsKPiArCQlzZXFfcHJpbnRmKG0sICIlc1xuIiwgZW5naW5lLT5uYW1lKTsKPiAg IAkJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID09IDcpCj4gLQkJCXNlcV9wcmludGYobSwgIkdG WF9NT0RFOiAweCUwOHhcbiIsIEk5MTVfUkVBRChSSU5HX01PREVfR0VONyhyaW5nKSkpOwo+IC0J CXNlcV9wcmludGYobSwgIlBQX0RJUl9CQVNFOiAweCUwOHhcbiIsIEk5MTVfUkVBRChSSU5HX1BQ X0RJUl9CQVNFKHJpbmcpKSk7Cj4gLQkJc2VxX3ByaW50ZihtLCAiUFBfRElSX0JBU0VfUkVBRDog MHglMDh4XG4iLCBJOTE1X1JFQUQoUklOR19QUF9ESVJfQkFTRV9SRUFEKHJpbmcpKSk7Cj4gLQkJ c2VxX3ByaW50ZihtLCAiUFBfRElSX0RDTFY6IDB4JTA4eFxuIiwgSTkxNV9SRUFEKFJJTkdfUFBf RElSX0RDTFYocmluZykpKTsKPiArCQkJc2VxX3ByaW50ZihtLCAiR0ZYX01PREU6IDB4JTA4eFxu IiwgSTkxNV9SRUFEKFJJTkdfTU9ERV9HRU43KGVuZ2luZSkpKTsKPiArCQlzZXFfcHJpbnRmKG0s ICJQUF9ESVJfQkFTRTogMHglMDh4XG4iLCBJOTE1X1JFQUQoUklOR19QUF9ESVJfQkFTRShlbmdp bmUpKSk7Cj4gKwkJc2VxX3ByaW50ZihtLCAiUFBfRElSX0JBU0VfUkVBRDogMHglMDh4XG4iLCBJ OTE1X1JFQUQoUklOR19QUF9ESVJfQkFTRV9SRUFEKGVuZ2luZSkpKTsKPiArCQlzZXFfcHJpbnRm KG0sICJQUF9ESVJfRENMVjogMHglMDh4XG4iLCBJOTE1X1JFQUQoUklOR19QUF9ESVJfRENMVihl bmdpbmUpKSk7Cj4gICAJfQo+ICAgCWlmIChkZXZfcHJpdi0+bW0uYWxpYXNpbmdfcHBndHQpIHsK PiAgIAkJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gZGV2X3ByaXYtPm1tLmFsaWFzaW5n X3BwZ3R0Owo+IEBAIC0yNTQ5LDY3ICsyNTQ1LDYyIEBAIHN0YXRpYyBpbnQgaTkxNV9zZW1hcGhv cmVfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ICAgCXN0cnVjdCBk cm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7 Cj4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7Cj4gICAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmU7Cj4gICAJaW50IG51bV9yaW5ncyA9IGh3ZWlnaHQzMihJTlRFTF9JTkZPKGRldiktPnJp bmdfbWFzayk7Cj4gICAJaW50IGksIGosIHJldDsKPiAgIAo+IC0JaWYgKCFpOTE1X3NlbWFwaG9y ZV9pc19lbmFibGVkKGRldikpIHsKPiAtCQlzZXFfcHV0cyhtLCAiU2VtYXBob3JlcyBhcmUgZGlz YWJsZWRcbiIpOwo+IC0JCXJldHVybiAwOwo+IC0JfQo+IC0KPiAgIAlyZXQgPSBtdXRleF9sb2Nr X2ludGVycnVwdGlibGUoJmRldi0+c3RydWN0X211dGV4KTsKPiAgIAlpZiAocmV0KQo+ICAgCQly ZXR1cm4gcmV0Owo+ICAgCWludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAgIAo+IC0J aWYgKElTX0JST0FEV0VMTChkZXYpKSB7Cj4gLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Cj4gLQkJdWlu dDY0X3QgKnNlcW5vOwo+ICsJc2VxX3B1dHMobSwgIiAgTGFzdCBicmVhZGNydW1iOiIpOwo+ICsJ Zm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIGkpCj4gKwkJZm9yIChqID0gMDsgaiA8 IG51bV9yaW5nczsgaisrKQo+ICsJCQlzZXFfcHJpbnRmKG0sICIweCUwOHhcbiIsCj4gKwkJCQkg ICBlbmdpbmUtPmJyZWFkY3J1bWJbal0pOwo+ICsJc2VxX3B1dGMobSwgJ1xuJyk7Cj4gICAKPiAt CQlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGRldl9wcml2LT5zZW1hcGhvcmVfb2Jq LCAwKTsKPiArCWlmIChlbmdpbmUtPnNlbWFwaG9yZS53YWl0KSB7Cj4gKwkJaWYgKElTX0JST0FE V0VMTChkZXYpKSB7Cj4gKwkJCXN0cnVjdCBwYWdlICpwYWdlOwo+ICsJCQl1aW50NjRfdCAqc2Vx bm87Cj4gICAKPiAtCQlzZXFubyA9ICh1aW50NjRfdCAqKWttYXBfYXRvbWljKHBhZ2UpOwo+IC0J CWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3ByaXYsIGkpIHsKPiAtCQkJdWludDY0X3Qgb2Zmc2V0 Owo+ICsJCQlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGRldl9wcml2LT5zZW1hcGhv cmVfb2JqLCAwKTsKPiAgIAo+IC0JCQlzZXFfcHJpbnRmKG0sICIlc1xuIiwgcmluZy0+bmFtZSk7 Cj4gKwkJCXNlcW5vID0gKHVpbnQ2NF90ICopa21hcF9hdG9taWMocGFnZSk7Cj4gKwkJCWZvcl9l YWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpKSB7Cj4gKwkJCQl1aW50NjRfdCBvZmZzZXQ7 Cj4gICAKPiAtCQkJc2VxX3B1dHMobSwgIiAgTGFzdCBzaWduYWw6Iik7Cj4gLQkJCWZvciAoaiA9 IDA7IGogPCBudW1fcmluZ3M7IGorKykgewo+IC0JCQkJb2Zmc2V0ID0gaSAqIEk5MTVfTlVNX1JJ TkdTICsgajsKPiAtCQkJCXNlcV9wcmludGYobSwgIjB4JTA4bGx4ICgweCUwMmxseCkgIiwKPiAt CQkJCQkgICBzZXFub1tvZmZzZXRdLCBvZmZzZXQgKiA4KTsKPiAtCQkJfQo+IC0JCQlzZXFfcHV0 YyhtLCAnXG4nKTsKPiArCQkJCXNlcV9wcmludGYobSwgIiVzXG4iLCBlbmdpbmUtPm5hbWUpOwo+ ICAgCj4gLQkJCXNlcV9wdXRzKG0sICIgIExhc3Qgd2FpdDogICIpOwo+IC0JCQlmb3IgKGogPSAw OyBqIDwgbnVtX3JpbmdzOyBqKyspIHsKPiAtCQkJCW9mZnNldCA9IGkgKyAoaiAqIEk5MTVfTlVN X1JJTkdTKTsKPiAtCQkJCXNlcV9wcmludGYobSwgIjB4JTA4bGx4ICgweCUwMmxseCkgIiwKPiAt CQkJCQkgICBzZXFub1tvZmZzZXRdLCBvZmZzZXQgKiA4KTsKPiAtCQkJfQo+IC0JCQlzZXFfcHV0 YyhtLCAnXG4nKTsKPiArCQkJCXNlcV9wdXRzKG0sICIgIExhc3Qgc2lnbmFsOiIpOwo+ICsJCQkJ Zm9yIChqID0gMDsgaiA8IG51bV9yaW5nczsgaisrKSB7Cj4gKwkJCQkJb2Zmc2V0ID0gaSAqIEk5 MTVfTlVNX0VOR0lORVMgKyBqOwo+ICsJCQkJCXNlcV9wcmludGYobSwgIjB4JTA4bGx4ICgweCUw MmxseCkgIiwKPiArCQkJCQkJICAgc2Vxbm9bb2Zmc2V0XSwgb2Zmc2V0ICogOCk7Cj4gKwkJCQl9 Cj4gKwkJCQlzZXFfcHV0YyhtLCAnXG4nKTsKPiAgIAo+IC0JCX0KPiAtCQlrdW5tYXBfYXRvbWlj KHNlcW5vKTsKPiAtCX0gZWxzZSB7Cj4gLQkJc2VxX3B1dHMobSwgIiAgTGFzdCBzaWduYWw6Iik7 Cj4gLQkJZm9yX2VhY2hfcmluZyhyaW5nLCBkZXZfcHJpdiwgaSkKPiAtCQkJZm9yIChqID0gMDsg aiA8IG51bV9yaW5nczsgaisrKQo+IC0JCQkJc2VxX3ByaW50ZihtLCAiMHglMDh4XG4iLAo+IC0J CQkJCSAgIEk5MTVfUkVBRChyaW5nLT5zZW1hcGhvcmUubWJveC5zaWduYWxbal0pKTsKPiAtCQlz ZXFfcHV0YyhtLCAnXG4nKTsKPiAtCX0KPiArCQkJCXNlcV9wdXRzKG0sICIgIExhc3Qgd2FpdDog ICIpOwo+ICsJCQkJZm9yIChqID0gMDsgaiA8IG51bV9yaW5nczsgaisrKSB7Cj4gKwkJCQkJb2Zm c2V0ID0gaSArIChqICogSTkxNV9OVU1fRU5HSU5FUyk7Cj4gKwkJCQkJc2VxX3ByaW50ZihtLCAi MHglMDhsbHggKDB4JTAybGx4KSAiLAo+ICsJCQkJCQkgICBzZXFub1tvZmZzZXRdLCBvZmZzZXQg KiA4KTsKPiArCQkJCX0KPiArCQkJCXNlcV9wdXRjKG0sICdcbicpOwo+ICAgCj4gLQlzZXFfcHV0 cyhtLCAiXG5TeW5jIHNlcW5vOlxuIik7Cj4gLQlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2 LCBpKSB7Cj4gLQkJZm9yIChqID0gMDsgaiA8IG51bV9yaW5nczsgaisrKSB7Cj4gLQkJCXNlcV9w cmludGYobSwgIiAgMHglMDh4ICIsIHJpbmctPnNlbWFwaG9yZS5zeW5jX3NlcW5vW2pdKTsKPiAr CQkJfQo+ICsJCQlrdW5tYXBfYXRvbWljKHNlcW5vKTsKPiArCQl9IGVsc2Ugewo+ICsJCQlzZXFf cHV0cyhtLCAiICBMYXN0IHNpZ25hbDoiKTsKPiArCQkJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwg ZGV2X3ByaXYsIGkpCj4gKwkJCQlmb3IgKGogPSAwOyBqIDwgbnVtX3JpbmdzOyBqKyspCj4gKwkJ CQkJc2VxX3ByaW50ZihtLCAiMHglMDh4XG4iLAo+ICsJCQkJCQkgICBJOTE1X1JFQUQoZW5naW5l LT5zZW1hcGhvcmUubWJveC5zaWduYWxbal0pKTsKPiArCQkJc2VxX3B1dGMobSwgJ1xuJyk7Cj4g ICAJCX0KPiAtCQlzZXFfcHV0YyhtLCAnXG4nKTsKPiAgIAl9Cj4gLQlzZXFfcHV0YyhtLCAnXG4n KTsKPiAgIAo+ICAgCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPiAgIAltdXRleF91 bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiBAQCAtMzgyNiw3ICszODE3LDYgQEAgaTkxNV9k cm9wX2NhY2hlc19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gZGF0YTsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwgKm5leHQ7Cj4gICAJaW50IHJldDsKPiAgIAo+ICAgCURSTV9ERUJVRygiRHJvcHBpbmcgY2Fj aGVzOiAweCUwOGxseFxuIiwgdmFsKTsKPiBAQCAtMzg0NywxMCArMzgzNywxOCBAQCBpOTE1X2Ry b3BfY2FjaGVzX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQo+ICAgCQlpOTE1X2dlbV9yZXRpcmVf cmVxdWVzdHMoZGV2KTsKPiAgIAo+ICAgCWlmICh2YWwgJiBEUk9QX0JPVU5EKSB7Cj4gLQkJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgbmV4dCwgJmRldl9wcml2LT5tbS5ib3VuZF9saXN0 LAo+IC0JCQkJCSBnbG9iYWxfbGlzdCkgewo+ICsJCXN0cnVjdCBsaXN0X2hlYWQgc3RpbGxfaW5f bGlzdDsKPiArCj4gKwkJSU5JVF9MSVNUX0hFQUQoJnN0aWxsX2luX2xpc3QpOwo+ICsJCXdoaWxl ICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmJvdW5kX2xpc3QpKSB7Cj4gKwkJCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAJCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgKnY7 Cj4gICAKPiArCQkJb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPm1tLmJvdW5kX2xp c3QsCj4gKwkJCQkJICAgICAgIHR5cGVvZigqb2JqKSwgZ2xvYmFsX2xpc3QpOwo+ICsKPiArCQkJ bGlzdF9tb3ZlX3RhaWwoJm9iai0+Z2xvYmFsX2xpc3QsICZzdGlsbF9pbl9saXN0KTsKPiArCj4g ICAJCQlyZXQgPSAwOwo+ICAgCQkJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKCZvYmotPmJhc2Up Owo+ICAgCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZtYSwgdiwgJm9iai0+dm1hX2xpc3Qs IHZtYV9saW5rKSB7Cj4gQEAgLTM4NjUsMTYgKzM4NjMsMzAgQEAgaTkxNV9kcm9wX2NhY2hlc19z ZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKPiAgIAkJCWlmIChyZXQpCj4gICAJCQkJZ290byB1bmxv Y2s7Cj4gICAJCX0KPiArCj4gKwkJbGlzdF9zcGxpY2UoJnN0aWxsX2luX2xpc3QsICZkZXZfcHJp di0+bW0uYm91bmRfbGlzdCk7Cj4gICAJfQo+ICAgCj4gICAJaWYgKHZhbCAmIERST1BfVU5CT1VO RCkgewo+IC0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG5leHQsICZkZXZfcHJpdi0+ bW0udW5ib3VuZF9saXN0LAo+IC0JCQkJCSBnbG9iYWxfbGlzdCkKPiArCQlzdHJ1Y3QgbGlzdF9o ZWFkIHN0aWxsX2luX2xpc3Q7Cj4gKwo+ICsJCUlOSVRfTElTVF9IRUFEKCZzdGlsbF9pbl9saXN0 KTsKPiArCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS51bmJvdW5kX2xpc3QpKSB7 Cj4gKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwo+ICsJCQlvYmogPSBs aXN0X2ZpcnN0X2VudHJ5KCZkZXZfcHJpdi0+bW0udW5ib3VuZF9saXN0LAo+ICsJCQkJCSAgICAg ICB0eXBlb2YoKm9iaiksIGdsb2JhbF9saXN0KTsKPiArCj4gKwkJCWxpc3RfbW92ZV90YWlsKCZv YmotPmdsb2JhbF9saXN0LCAmc3RpbGxfaW5fbGlzdCk7Cj4gKwo+ICAgCQkJaWYgKG9iai0+cGFn ZXNfcGluX2NvdW50ID09IDApIHsKPiAgIAkJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcHV0X3Bh Z2VzKG9iaik7Cj4gICAJCQkJaWYgKHJldCkKPiAgIAkJCQkJZ290byB1bmxvY2s7Cj4gICAJCQl9 Cj4gKwkJfQo+ICsKPiArCQlsaXN0X3NwbGljZSgmc3RpbGxfaW5fbGlzdCwgJmRldl9wcml2LT5t bS51bmJvdW5kX2xpc3QpOwo+ICAgCX0KPiAgIAo+ICAgdW5sb2NrOgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kbWEuYwo+IGluZGV4IGE3Mjk3MjE1OTViMC4uNjgxZTc0MTY3MDJjIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2RtYS5jCj4gQEAgLTE0MiwxMyArMTQyLDEzIEBAIHN0YXRpYyBpbnQgaTkxNV9n ZXRwYXJhbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgCQl2YWx1ZSA9 IDE7Cj4gICAJCWJyZWFrOwo+ICAgCWNhc2UgSTkxNV9QQVJBTV9IQVNfQlNEOgo+IC0JCXZhbHVl ID0gaW50ZWxfcmluZ19pbml0aWFsaXplZCgmZGV2X3ByaXYtPnJpbmdbVkNTXSk7Cj4gKwkJdmFs dWUgPSBpbnRlbF9lbmdpbmVfaW5pdGlhbGl6ZWQoJmRldl9wcml2LT5lbmdpbmVbVkNTXSk7Cj4g ICAJCWJyZWFrOwo+ICAgCWNhc2UgSTkxNV9QQVJBTV9IQVNfQkxUOgo+IC0JCXZhbHVlID0gaW50 ZWxfcmluZ19pbml0aWFsaXplZCgmZGV2X3ByaXYtPnJpbmdbQkNTXSk7Cj4gKwkJdmFsdWUgPSBp bnRlbF9lbmdpbmVfaW5pdGlhbGl6ZWQoJmRldl9wcml2LT5lbmdpbmVbQkNTXSk7Cj4gICAJCWJy ZWFrOwo+ICAgCWNhc2UgSTkxNV9QQVJBTV9IQVNfVkVCT1g6Cj4gLQkJdmFsdWUgPSBpbnRlbF9y aW5nX2luaXRpYWxpemVkKCZkZXZfcHJpdi0+cmluZ1tWRUNTXSk7Cj4gKwkJdmFsdWUgPSBpbnRl bF9lbmdpbmVfaW5pdGlhbGl6ZWQoJmRldl9wcml2LT5lbmdpbmVbVkVDU10pOwo+ICAgCQlicmVh azsKPiAgIAljYXNlIEk5MTVfUEFSQU1fSEFTX1JFTEFYRURfRkVOQ0lORzoKPiAgIAkJdmFsdWUg PSAxOwo+IEBAIC0xNzgsNyArMTc4LDcgQEAgc3RhdGljIGludCBpOTE1X2dldHBhcmFtKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJCXZhbHVlID0gMTsKPiAgIAkJYnJl YWs7Cj4gICAJY2FzZSBJOTE1X1BBUkFNX0hBU19TRU1BUEhPUkVTOgo+IC0JCXZhbHVlID0gaTkx NV9zZW1hcGhvcmVfaXNfZW5hYmxlZChkZXYpOwo+ICsJCXZhbHVlID0gUkNTX0VOR0lORShkZXZf cHJpdiktPnNlbWFwaG9yZS53YWl0ICE9IE5VTEw7Cj4gICAJCWJyZWFrOwo+ICAgCWNhc2UgSTkx NV9QQVJBTV9IQVNfUFJJTUVfVk1BUF9GTFVTSDoKPiAgIAkJdmFsdWUgPSAxOwo+IEBAIC01MTIs OCArNTEyLDcgQEAgc3RhdGljIGludCBpOTE1X2xvYWRfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCj4gICAKPiAgIGNsZWFudXBfZ2VtOgo+ICAgCW11dGV4X2xvY2soJmRldi0+ c3RydWN0X211dGV4KTsKPiAtCWk5MTVfZ2VtX2NsZWFudXBfcmluZ2J1ZmZlcihkZXYpOwo+IC0J aTkxNV9nZW1fY29udGV4dF9maW5pKGRldik7Cj4gKwlpOTE1X2dlbV9maW5pKGRldik7Cj4gICAJ bXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gICBjbGVhbnVwX2lycToKPiAgIAlk cm1faXJxX3VuaW5zdGFsbChkZXYpOwo+IEBAIC02OTgsNiArNjk3LDggQEAgaW50IGk5MTVfZHJp dmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKPiAg IAlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkgJiYgIWRl di0+YWdwKQo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAo+ICsJQlVJTERfQlVHX09OKEk5MTVf TlVNX0VOR0lORVMgPj0gKDEgPDwgSTkxNV9OVU1fRU5HSU5FX0JJVFMpKTsKPiArCj4gICAJZGV2 X3ByaXYgPSBremFsbG9jKHNpemVvZigqZGV2X3ByaXYpLCBHRlBfS0VSTkVMKTsKPiAgIAlpZiAo ZGV2X3ByaXYgPT0gTlVMTCkKPiAgIAkJcmV0dXJuIC1FTk9NRU07Cj4gQEAgLTk5Nyw4ICs5OTgs NyBAQCBpbnQgaTkxNV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAJ CWZsdXNoX3dvcmtxdWV1ZShkZXZfcHJpdi0+d3EpOwo+ICAgCj4gICAJCW11dGV4X2xvY2soJmRl di0+c3RydWN0X211dGV4KTsKPiAtCQlpOTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoZGV2KTsK PiAtCQlpOTE1X2dlbV9jb250ZXh0X2ZpbmkoZGV2KTsKPiArCQlpOTE1X2dlbV9maW5pKGRldik7 Cj4gICAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCQlpOTE1X2dlbV9j bGVhbnVwX3N0b2xlbihkZXYpOwo+ICAgCX0KPiBAQCAtMTA4NCw4ICsxMDg0LDYgQEAgdm9pZCBp OTE1X2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9m aWxlICpmaWxlKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVf cHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2Owo+ICAgCj4gLQlpZiAoZmlsZV9wcml2ICYmIGZpbGVf cHJpdi0+YnNkX3JpbmcpCj4gLQkJZmlsZV9wcml2LT5ic2RfcmluZyA9IE5VTEw7Cj4gICAJa2Zy ZWUoZmlsZV9wcml2KTsKPiAgIH0KPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IGluZGV4 IDRmOWMyNDc4YWJhMS4uYWI1MDRlY2M4NDhlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j Cj4gQEAgLTQ3MywzMCArNDczLDYgQEAgdm9pZCBpbnRlbF9kZXRlY3RfcGNoKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCj4gICAJcGNpX2Rldl9wdXQocGNoKTsKPiAgIH0KPiAgIAo+IC1ib29sIGk5 MTVfc2VtYXBob3JlX2lzX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAtewo+IC0J aWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNikKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQo+IC0J aWYgKGk5MTUuc2VtYXBob3JlcyA+PSAwKQo+IC0JCXJldHVybiBpOTE1LnNlbWFwaG9yZXM7Cj4g LQo+IC0JLyogVE9ETzogbWFrZSBzZW1hcGhvcmVzIGFuZCBFeGVjbGlzdHMgcGxheSBuaWNlbHkg dG9nZXRoZXIgKi8KPiAtCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCj4gLQkJcmV0dXJuIGZh bHNlOwo+IC0KPiAtCS8qIFVudGlsIHdlIGdldCBmdXJ0aGVyIHRlc3RpbmcuLi4gKi8KPiAtCWlm IChJU19HRU44KGRldikpCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0KPiAtI2lmZGVmIENPTkZJR19J TlRFTF9JT01NVQo+IC0JLyogRW5hYmxlIHNlbWFwaG9yZXMgb24gU05CIHdoZW4gSU8gcmVtYXBw aW5nIGlzIG9mZiAqLwo+IC0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID09IDYgJiYgaW50ZWxf aW9tbXVfZ2Z4X21hcHBlZCkKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLSNlbmRpZgo+IC0KPiAtCXJl dHVybiB0cnVlOwo+IC19Cj4gICAKPiAgIHZvaWQgaW50ZWxfaHBkX2NhbmNlbF93b3JrKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIHsKPiBAQCAtNzk1LDcgKzc3MSw2IEBA IHN0YXRpYyBpbnQgaTkxNV9yZXN1bWVfbGVnYWN5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4g ICBpbnQgaTkxNV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgewo+ICAgCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlib29s IHNpbXVsYXRlZDsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gICAJaWYgKCFpOTE1LnJlc2V0KQo+IEBA IC04MDMsMTQgKzc3OCwxNiBAQCBpbnQgaTkxNV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+ICAgCj4gICAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gLQlpOTE1 X2dlbV9yZXNldChkZXYpOwo+IC0KPiAtCXNpbXVsYXRlZCA9IGRldl9wcml2LT5ncHVfZXJyb3Iu c3RvcF9yaW5ncyAhPSAwOwo+IC0KPiAgIAlyZXQgPSBpbnRlbF9ncHVfcmVzZXQoZGV2KTsKPiAg IAo+ICsJLyogQ2xlYXIgdGhlIHJlc2V0IGNvdW50ZXIuIEJlZm9yZSBhbnlvbmUgZWxzZQo+ICsJ ICogY2FuIGdyYWIgdGhlIG11dGV4LCB3ZSB3aWxsIGRlY2xhcmUgd2hldGhlciBvcgo+ICsJICog bm90IHRoZSBHUFUgaXMgd2VkZ2VkLgo+ICsJICovCj4gKwlhdG9taWNfaW5jKCZkZXZfcHJpdi0+ Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpOwo+ICsKPiAgIAkvKiBBbHNvIHJlc2V0IHRoZSBncHUg aGFuZ21hbi4gKi8KPiAtCWlmIChzaW11bGF0ZWQpIHsKPiArCWlmIChkZXZfcHJpdi0+Z3B1X2Vy cm9yLnN0b3BfcmluZ3MpIHsKPiAgIAkJRFJNX0lORk8oIlNpbXVsYXRlZCBncHUgaGFuZywgcmVz ZXR0aW5nIHN0b3BfcmluZ3NcbiIpOwo+ICAgCQlkZXZfcHJpdi0+Z3B1X2Vycm9yLnN0b3Bfcmlu Z3MgPSAwOwo+ICAgCQlpZiAocmV0ID09IC1FTk9ERVYpIHsKPiBAQCAtODIwLDYgKzc5Nyw4IEBA IGludCBpOTE1X3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAJCX0KPiAgIAl9Cj4g ICAKPiArCWk5MTVfZ2VtX3Jlc2V0KGRldik7Cj4gKwo+ICAgCWlmIChyZXQpIHsKPiAgIAkJRFJN X0VSUk9SKCJGYWlsZWQgdG8gcmVzZXQgY2hpcDogJWlcbiIsIHJldCk7Cj4gICAJCW11dGV4X3Vu bG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IEBAIC04NDMsMTQgKzgyMiw3IEBAIGludCBpOTE1 X3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAJaWYgKGRybV9jb3JlX2NoZWNrX2Zl YXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkgfHwKPiAgIAkJCSFkZXZfcHJpdi0+dW1zLm1tX3N1 c3BlbmRlZCkgewo+ICAgCQlkZXZfcHJpdi0+dW1zLm1tX3N1c3BlbmRlZCA9IDA7Cj4gLQo+IC0J CS8qIFVzZWQgdG8gcHJldmVudCBnZW1fY2hlY2tfd2VkZ2VkIHJldHVybmluZyAtRUFHQUlOIGR1 cmluZyBncHUgcmVzZXQgKi8KPiAtCQlkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlbG9hZF9pbl9yZXNl dCA9IHRydWU7Cj4gLQo+ICAgCQlyZXQgPSBpOTE1X2dlbV9pbml0X2h3KGRldik7Cj4gLQo+IC0J CWRldl9wcml2LT5ncHVfZXJyb3IucmVsb2FkX2luX3Jlc2V0ID0gZmFsc2U7Cj4gLQo+ICAgCQlt dXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgIAkJaWYgKHJldCkgewo+ICAgCQkJ RFJNX0VSUk9SKCJGYWlsZWQgaHcgaW5pdCBvbiByZXNldCAlZFxuIiwgcmV0KTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiBpbmRleCAxOWQyYjA2MGMxOGMuLjk1MjliNmIwZmVmNiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC0zNyw3ICszNyw2IEBACj4gICAjaW5jbHVkZSAi aW50ZWxfcmluZ2J1ZmZlci5oIgo+ICAgI2luY2x1ZGUgImludGVsX2xyYy5oIgo+ICAgI2luY2x1 ZGUgImk5MTVfZ2VtX2d0dC5oIgo+IC0jaW5jbHVkZSAiaTkxNV9nZW1fcmVuZGVyX3N0YXRlLmgi Cj4gICAjaW5jbHVkZSA8bGludXgvaW8tbWFwcGluZy5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2ky Yy5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgo+IEBAIC0xOTQsNiArMTkz LDcgQEAgZW51bSBocGRfcGluIHsKPiAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlOwo+ICAgc3Ry dWN0IGk5MTVfbW1fc3RydWN0Owo+ICAgc3RydWN0IGk5MTVfbW11X29iamVjdDsKPiArc3RydWN0 IGk5MTVfZ2VtX3JlcXVlc3Q7Cj4gICAKPiAgIGVudW0gaW50ZWxfZHBsbF9pZCB7Cj4gICAJRFBM TF9JRF9QUklWQVRFID0gLTEsIC8qIG5vbi1zaGFyZWQgZHBsbCBpbiB1c2UgKi8KPiBAQCAtMzIz LDYgKzMyMyw3IEBAIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSB7Cj4gICAJdTMyIHBndGJs X2VyOwo+ICAgCXUzMiBpZXI7Cj4gICAJdTMyIGd0aWVyWzRdOwo+ICsJdTMyIGd0aW1yWzRdOwo+ ICAgCXUzMiBjY2lkOwo+ICAgCXUzMiBkZXJybXI7Cj4gICAJdTMyIGZvcmNld2FrZTsKPiBAQCAt MzQwLDIzICszNDEsMjYgQEAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlIHsKPiAgIAlzdHJ1 Y3QgZHJtX2k5MTVfZXJyb3Jfb2JqZWN0ICpzZW1hcGhvcmVfb2JqOwo+ICAgCj4gICAJc3RydWN0 IGRybV9pOTE1X2Vycm9yX3Jpbmcgewo+ICsJCWludCBpZDsKPiAgIAkJYm9vbCB2YWxpZDsKPiAg IAkJLyogU29mdHdhcmUgdHJhY2tlZCBzdGF0ZSAqLwo+ICAgCQlib29sIHdhaXRpbmc7Cj4gICAJ CWludCBoYW5nY2hlY2tfc2NvcmU7Cj4gLQkJZW51bSBpbnRlbF9yaW5nX2hhbmdjaGVja19hY3Rp b24gaGFuZ2NoZWNrX2FjdGlvbjsKPiArCQllbnVtIGludGVsX2VuZ2luZV9oYW5nY2hlY2tfYWN0 aW9uIGhhbmdjaGVja19hY3Rpb247Cj4gICAJCWludCBudW1fcmVxdWVzdHM7Cj4gICAKPiAgIAkJ Lyogb3VyIG93biB0cmFja2luZyBvZiByaW5nIGhlYWQgYW5kIHRhaWwgKi8KPiAgIAkJdTMyIGNw dV9yaW5nX2hlYWQ7Cj4gICAJCXUzMiBjcHVfcmluZ190YWlsOwo+IC0KPiAtCQl1MzIgc2VtYXBo b3JlX3NlcW5vW0k5MTVfTlVNX1JJTkdTIC0gMV07Cj4gKwkJdTMyIGludGVycnVwdHM7Cj4gKwkJ dTMyIGlycV9jb3VudDsKPiAgIAo+ICAgCQkvKiBSZWdpc3RlciBzdGF0ZSAqLwo+ICAgCQl1MzIg dGFpbDsKPiAgIAkJdTMyIGhlYWQ7Cj4gKwkJdTMyIHN0YXJ0Owo+ICAgCQl1MzIgY3RsOwo+ICsJ CXUzMiBtb2RlOwo+ICAgCQl1MzIgaHdzOwo+ICAgCQl1MzIgaXBlaXI7Cj4gICAJCXUzMiBpcGVo cjsKPiBAQCAtMzY0LDEzICszNjgsMTUgQEAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlIHsK PiAgIAkJdTMyIGJic3RhdGU7Cj4gICAJCXUzMiBpbnN0cG07Cj4gICAJCXUzMiBpbnN0cHM7Cj4g LQkJdTMyIHNlcW5vOwo+ICsJCXUzMiBzZXFubywgcmVxdWVzdCwgdGFnLCBoYW5nY2hlY2s7Cj4g KwkJdTMyIGJyZWFkY3J1bWJbSTkxNV9OVU1fRU5HSU5FU107Cj4gICAJCXU2NCBiYmFkZHI7Cj4g ICAJCXU2NCBhY3RoZDsKPiAgIAkJdTMyIGZhdWx0X3JlZzsKPiAgIAkJdTY0IGZhZGRyOwo+ICAg CQl1MzIgcmNfcHNtaTsgLyogc2xlZXAgc3RhdGUgKi8KPiAtCQl1MzIgc2VtYXBob3JlX21ib3hl c1tJOTE1X05VTV9SSU5HUyAtIDFdOwo+ICsJCXUzMiBzZW1hcGhvcmVfbWJveGVzW0k5MTVfTlVN X0VOR0lORVNdOwo+ICsJCXUzMiBzZW1hcGhvcmVfc3luY1tJOTE1X05VTV9FTkdJTkVTXTsKPiAg IAo+ICAgCQlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfb2JqZWN0IHsKPiAgIAkJCWludCBwYWdlX2Nv dW50Owo+IEBAIC0zODAsOCArMzg2LDE0IEBAIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSB7 Cj4gICAKPiAgIAkJc3RydWN0IGRybV9pOTE1X2Vycm9yX3JlcXVlc3Qgewo+ICAgCQkJbG9uZyBq aWZmaWVzOwo+IC0JCQl1MzIgc2Vxbm87Cj4gKwkJCWxvbmcgcGlkOwo+ICsJCQl1MzIgYmF0Y2g7 Cj4gKwkJCXUzMiBoZWFkOwo+ICAgCQkJdTMyIHRhaWw7Cj4gKwkJCXUzMiBzZXFubzsKPiArCQkJ dTMyIGJyZWFkY3J1bWJbSTkxNV9OVU1fRU5HSU5FU107Cj4gKwkJCXUzMiBjb21wbGV0ZTsKPiAr CQkJdTMyIHRhZzsKPiAgIAkJfSAqcmVxdWVzdHM7Cj4gICAKPiAgIAkJc3RydWN0IHsKPiBAQCAt Mzk0LDEyICs0MDYsMTIgQEAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlIHsKPiAgIAo+ICAg CQlwaWRfdCBwaWQ7Cj4gICAJCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKPiAtCX0gcmluZ1tJ OTE1X05VTV9SSU5HU107Cj4gKwl9IHJpbmdbSTkxNV9OVU1fRU5HSU5FU107Cj4gICAKPiAgIAlz dHJ1Y3QgZHJtX2k5MTVfZXJyb3JfYnVmZmVyIHsKPiAgIAkJdTMyIHNpemU7Cj4gICAJCXUzMiBu YW1lOwo+IC0JCXUzMiByc2Vxbm8sIHdzZXFubzsKPiArCQl1MzIgcnNlcW5vW0k5MTVfTlVNX0VO R0lORVNdLCB3c2Vxbm8sIGZzZXFubzsKPiAgIAkJdTMyIGd0dF9vZmZzZXQ7Cj4gICAJCXUzMiBy ZWFkX2RvbWFpbnM7Cj4gICAJCXUzMiB3cml0ZV9kb21haW47Cj4gQEAgLTQ3MSwxMCArNDgzLDEw IEBAIHN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNzIHsKPiAgIAkJCSAgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUpOwo+ICAgCXZvaWQgKCpmZGlfbGlua190cmFpbikoc3RydWN0IGRy bV9jcnRjICpjcnRjKTsKPiAgIAl2b2lkICgqaW5pdF9jbG9ja19nYXRpbmcpKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpOwo+IC0JaW50ICgqcXVldWVfZmxpcCkoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJaW50ICgqcXVldWVfZmxpcCkoc3RydWN0IGk5 MTVfZ2VtX3JlcXVlc3QgKnJxLAo+ICsJCQkgIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ICAg CQkJICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiAgIAkJCSAgc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkJICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ ICAgCQkJICB1aW50MzJfdCBmbGFncyk7Cj4gICAJdm9pZCAoKnVwZGF0ZV9wcmltYXJ5X3BsYW5l KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gICAJCQkJICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwKPiBAQCAtNjI2LDI0ICs2MzgsMTggQEAgc3RydWN0IGk5MTVfY3R4X2hhbmdfc3Rh dHMgewo+ICAgICovCj4gICBzdHJ1Y3QgaW50ZWxfY29udGV4dCB7Cj4gICAJc3RydWN0IGtyZWYg cmVmOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gICAJaW50IHVzZXJfaGFu ZGxlOwo+ICAgCXVpbnQ4X3QgcmVtYXBfc2xpY2U7Cj4gICAJc3RydWN0IGRybV9pOTE1X2ZpbGVf cHJpdmF0ZSAqZmlsZV9wcml2Owo+ICAgCXN0cnVjdCBpOTE1X2N0eF9oYW5nX3N0YXRzIGhhbmdf c3RhdHM7Cj4gICAJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0Owo+ICAgCj4gLQkvKiBMZWdh Y3kgcmluZyBidWZmZXIgc3VibWlzc2lvbiAqLwo+IC0Jc3RydWN0IHsKPiAtCQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqcmNzX3N0YXRlOwo+IC0JCWJvb2wgaW5pdGlhbGl6ZWQ7Cj4gLQl9 IGxlZ2FjeV9od19jdHg7Cj4gLQo+IC0JLyogRXhlY2xpc3RzICovCj4gLQlib29sIHJjc19pbml0 aWFsaXplZDsKPiAtCXN0cnVjdCB7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NvbnRleHQgewo+ ICsJCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICAgCQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqc3RhdGU7Cj4gLQkJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWY7 Cj4gLQl9IGVuZ2luZVtJOTE1X05VTV9SSU5HU107Cj4gKwkJYm9vbCBpbml0aWFsaXplZDsKPiAr CX0gcmluZ1tJOTE1X05VTV9FTkdJTkVTXTsKPiAgIAo+ICAgCXN0cnVjdCBsaXN0X2hlYWQgbGlu azsKPiAgIH07Cj4gQEAgLTEwMjgsNyArMTAzNCw2IEBAIHN0cnVjdCBpbnRlbF9pbGtfcG93ZXJf bWdtdCB7Cj4gICAJaW50IHJfdDsKPiAgIAo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpwd3JjdHg7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqcmVuZGVyY3R4Owo+ICAg fTsKPiAgIAo+ICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGU7Cj4gQEAgLTEyNTMsOSArMTI1OCw2 IEBAIHN0cnVjdCBpOTE1X2dwdV9lcnJvciB7Cj4gICAKPiAgIAkvKiBGb3IgbWlzc2VkIGlycS9z ZXFubyBzaW11bGF0aW9uLiAqLwo+ICAgCXVuc2lnbmVkIGludCB0ZXN0X2lycV9yaW5nczsKPiAt Cj4gLQkvKiBVc2VkIHRvIHByZXZlbnQgZ2VtX2NoZWNrX3dlZGdlZCByZXR1cm5pbmcgLUVBR0FJ TiBkdXJpbmcgZ3B1IHJlc2V0ICAgKi8KPiAtCWJvb2wgcmVsb2FkX2luX3Jlc2V0Owo+ICAgfTsK PiAgIAo+ICAgZW51bSBtb2Rlc2V0X3Jlc3RvcmUgewo+IEBAIC0xNDYwLDkgKzE0NjIsMTAgQEAg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+ICAgCXdhaXRfcXVldWVfaGVhZF90IGdtYnVzX3dh aXRfcXVldWU7Cj4gICAKPiAgIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlX2RldjsKPiAtCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgcmluZ1tJOTE1X05VTV9SSU5HU107Cj4gKwlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzIGVuZ2luZVtJOTE1X05VTV9FTkdJTkVTXTsKPiArCXN0cnVjdCBpbnRlbF9jb250 ZXh0ICpkZWZhdWx0X2NvbnRleHQ7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnNl bWFwaG9yZV9vYmo7Cj4gLQl1aW50MzJfdCBsYXN0X3NlcW5vLCBuZXh0X3NlcW5vOwo+ICsJdWlu dDMyX3QgbmV4dF9zZXFubzsKPiAgIAo+ICAgCWRybV9kbWFfaGFuZGxlX3QgKnN0YXR1c19wYWdl X2RtYWg7Cj4gICAJc3RydWN0IHJlc291cmNlIG1jaF9yZXM7Cj4gQEAgLTE2NzMsMjEgKzE2NzYs NiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gICAKPiAgIAkvKiBPbGQgdW1zIHN1cHBv cnQgaW5mcmFzdHJ1Y3R1cmUsIHNhbWUgd2FybmluZyBhcHBsaWVzLiAqLwo+ICAgCXN0cnVjdCBp OTE1X3Vtc19zdGF0ZSB1bXM7Cj4gLQo+IC0JLyogQWJzdHJhY3QgdGhlIHN1Ym1pc3Npb24gbWVj aGFuaXNtIChsZWdhY3kgcmluZ2J1ZmZlciBvciBleGVjbGlzdHMpIGF3YXkgKi8KPiAtCXN0cnVj dCB7Cj4gLQkJaW50ICgqZG9fZXhlY2J1Zikoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IGRybV9maWxlICpmaWxlLAo+IC0JCQkJICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ IC0JCQkJICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+IC0JCQkJICBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNidWZmZXIyICphcmdzLAo+IC0JCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICp2bWFz LAo+IC0JCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYmF0Y2hfb2JqLAo+IC0JCQkJ ICB1NjQgZXhlY19zdGFydCwgdTMyIGZsYWdzKTsKPiAtCQlpbnQgKCppbml0X3JpbmdzKShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAtCQl2b2lkICgqY2xlYW51cF9yaW5nKShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nKTsKPiAtCQl2b2lkICgqc3RvcF9yaW5nKShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nKTsKPiAtCX0gZ3Q7Cj4gLQo+ICAgCS8qCj4gICAJICogTk9URTogVGhp cyBpcyB0aGUgZHJpMS91bXMgZHVuZ2VvbiwgZG9uJ3QgYWRkIHN0dWZmIGhlcmUuIFlvdXIgcGF0 Y2gKPiAgIAkgKiB3aWxsIGJlIHJlamVjdGVkLiBJbnN0ZWFkIGxvb2sgZm9yIGEgYmV0dGVyIHBs YWNlLgo+IEBAIC0xNzAwLDkgKzE2ODgsMTEgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqdG9faTkxNShjb25zdCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgfQo+ ICAgCj4gICAvKiBJdGVyYXRlIG92ZXIgaW5pdGlhbGlzZWQgcmluZ3MgKi8KPiAtI2RlZmluZSBm b3JfZWFjaF9yaW5nKHJpbmdfXywgZGV2X3ByaXZfXywgaV9fKSBcCj4gLQlmb3IgKChpX18pID0g MDsgKGlfXykgPCBJOTE1X05VTV9SSU5HUzsgKGlfXykrKykgXAo+IC0JCWlmICgoKHJpbmdfXykg PSAmKGRldl9wcml2X18pLT5yaW5nWyhpX18pXSksIGludGVsX3JpbmdfaW5pdGlhbGl6ZWQoKHJp bmdfXykpKQo+ICsjZGVmaW5lIGZvcl9lYWNoX2VuZ2luZShlbmdpbmVfXywgZGV2X3ByaXZfXywg aV9fKSBcCj4gKwlmb3IgKChpX18pID0gMDsgKGlfXykgPCBJOTE1X05VTV9FTkdJTkVTOyAoaV9f KSsrKSBcCj4gKwkJaWYgKCgoZW5naW5lX18pID0gJihkZXZfcHJpdl9fKS0+ZW5naW5lWyhpX18p XSksIGludGVsX2VuZ2luZV9pbml0aWFsaXplZCgoZW5naW5lX18pKSkKPiArCj4gKyNkZWZpbmUg UkNTX0VOR0lORSh4KSAoJl9fSTkxNV9fKHgpLT5lbmdpbmVbUkNTXSkKPiAgIAo+ICAgZW51bSBo ZG1pX2ZvcmNlX2F1ZGlvIHsKPiAgIAlIRE1JX0FVRElPX09GRl9EVkkgPSAtMiwJLyogbm8gYXV4 IGRhdGEgZm9yIEhETUktRFZJIGNvbnZlcnRlciAqLwo+IEBAIC0xNzY3LDE2ICsxNzU3LDE1IEBA IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0IHsKPiAgIAlzdHJ1Y3QgZHJtX21tX25vZGUgKnN0 b2xlbjsKPiAgIAlzdHJ1Y3QgbGlzdF9oZWFkIGdsb2JhbF9saXN0Owo+ICAgCj4gLQlzdHJ1Y3Qg bGlzdF9oZWFkIHJpbmdfbGlzdDsKPiAgIAkvKiogVXNlZCBpbiBleGVjYnVmIHRvIHRlbXBvcmFy aWx5IGhvbGQgYSByZWYgKi8KPiAgIAlzdHJ1Y3QgbGlzdF9oZWFkIG9ial9leGVjX2xpbms7Cj4g ICAKPiAgIAkvKioKPiAgIAkgKiBUaGlzIGlzIHNldCBpZiB0aGUgb2JqZWN0IGlzIG9uIHRoZSBh Y3RpdmUgbGlzdHMgKGhhcyBwZW5kaW5nCj4gLQkgKiByZW5kZXJpbmcgYW5kIHNvIGEgbm9uLXpl cm8gc2Vxbm8pLCBhbmQgaXMgbm90IHNldCBpZiBpdCBpIHMgb24KPiAtCSAqIGluYWN0aXZlIChy ZWFkeSB0byBiZSB1bmJvdW5kKSBsaXN0Lgo+ICsJICogcmVuZGVyaW5nIGFuZCBzbyBhIHN1Ym1p dHRlZCByZXF1ZXN0KSwgYW5kIGlzIG5vdCBzZXQgaWYgaXQgaXMgb24KPiArCSAqIGluYWN0aXZl IChyZWFkeSB0byBiZSB1bmJvdW5kKSBsaXN0LiBXZSB0cmFjayBhY3Rpdml0eSBwZXIgZW5naW5l Lgo+ICAgCSAqLwo+IC0JdW5zaWduZWQgaW50IGFjdGl2ZToxOwo+ICsJdW5zaWduZWQgaW50IGFj dGl2ZTpJOTE1X05VTV9FTkdJTkVfQklUUzsKPiAgIAo+ICAgCS8qKgo+ICAgCSAqIFRoaXMgaXMg c2V0IGlmIHRoZSBvYmplY3QgaGFzIGJlZW4gd3JpdHRlbiB0byBzaW5jZSBsYXN0IGJvdW5kCj4g QEAgLTE4NDQsMTMgKzE4MzMsMTEgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qgewo+ICAg CXZvaWQgKmRtYV9idWZfdm1hcHBpbmc7Cj4gICAJaW50IHZtYXBwaW5nX2NvdW50Owo+ICAgCj4g LQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+IC0KPiAtCS8qKiBCcmVhZGNydW1iIG9m IGxhc3QgcmVuZGVyaW5nIHRvIHRoZSBidWZmZXIuICovCj4gLQl1aW50MzJfdCBsYXN0X3JlYWRf c2Vxbm87Cj4gLQl1aW50MzJfdCBsYXN0X3dyaXRlX3NlcW5vOwo+IC0JLyoqIEJyZWFkY3J1bWIg b2YgbGFzdCBmZW5jZWQgR1BVIGFjY2VzcyB0byB0aGUgYnVmZmVyLiAqLwo+IC0JdWludDMyX3Qg bGFzdF9mZW5jZWRfc2Vxbm87Cj4gKwkvKiogQnJlYWRjcnVtYnMgb2YgbGFzdCByZW5kZXJpbmcg dG8gdGhlIGJ1ZmZlci4gKi8KPiArCXN0cnVjdCB7Cj4gKwkJc3RydWN0IGk5MTVfZ2VtX3JlcXVl c3QgKnJlcXVlc3Q7Cj4gKwkJc3RydWN0IGxpc3RfaGVhZCBlbmdpbmVfbGlzdDsKPiArCX0gbGFz dF93cml0ZSwgbGFzdF9yZWFkW0k5MTVfTlVNX0VOR0lORVNdLCBsYXN0X2ZlbmNlOwo+ICAgCj4g ICAJLyoqIEN1cnJlbnQgdGlsaW5nIHN0cmlkZSBmb3IgdGhlIG9iamVjdCwgaWYgaXQncyB0aWxl ZC4gKi8KPiAgIAl1aW50MzJfdCBzdHJpZGU7Cj4gQEAgLTE4ODgsNDQgKzE4NzUsMTMgQEAgdm9p ZCBpOTE1X2dlbV90cmFja19mYihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2xkLAo+ICAg CQkgICAgICAgdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cyk7Cj4gICAKPiAgIC8qKgo+IC0gKiBS ZXF1ZXN0IHF1ZXVlIHN0cnVjdHVyZS4KPiAtICoKPiAtICogVGhlIHJlcXVlc3QgcXVldWUgYWxs b3dzIHVzIHRvIG5vdGUgc2VxdWVuY2UgbnVtYmVycyB0aGF0IGhhdmUgYmVlbiBlbWl0dGVkCj4g LSAqIGFuZCBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIGFjdGl2ZSBidWZmZXJzIHRvIGJlIHJldGly ZWQuCj4gLSAqCj4gLSAqIEJ5IGtlZXBpbmcgdGhpcyBsaXN0LCB3ZSBjYW4gYXZvaWQgaGF2aW5n IHRvIGRvIHF1ZXN0aW9uYWJsZQo+IC0gKiBzZXF1ZW5jZS1udW1iZXIgY29tcGFyaXNvbnMgb24g YnVmZmVyIGxhc3RfcmVuZGVyaW5nX3NlcW5vcywgYW5kIGFzc29jaWF0ZQo+IC0gKiBhbiBlbWlz c2lvbiB0aW1lIHdpdGggc2Vxbm9zIGZvciB0cmFja2luZyBob3cgZmFyIGFoZWFkIG9mIHRoZSBH UFUgd2UgYXJlLgo+ICsgKiBSZXR1cm5zIHRydWUgaWYgc2VxMSBpcyBsYXRlciB0aGFuIHNlcTIu Cj4gICAgKi8KPiAtc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0IHsKPiAtCS8qKiBPbiBXaGlj aCByaW5nIHRoaXMgcmVxdWVzdCB3YXMgZ2VuZXJhdGVkICovCj4gLQlzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICpyaW5nOwo+IC0KPiAtCS8qKiBHRU0gc2VxdWVuY2UgbnVtYmVyIGFzc29jaWF0ZWQg d2l0aCB0aGlzIHJlcXVlc3QuICovCj4gLQl1aW50MzJfdCBzZXFubzsKPiAtCj4gLQkvKiogUG9z aXRpb24gaW4gdGhlIHJpbmdidWZmZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSByZXF1ZXN0ICovCj4g LQl1MzIgaGVhZDsKPiAtCj4gLQkvKiogUG9zaXRpb24gaW4gdGhlIHJpbmdidWZmZXIgb2YgdGhl IGVuZCBvZiB0aGUgcmVxdWVzdCAqLwo+IC0JdTMyIHRhaWw7Cj4gLQo+IC0JLyoqIENvbnRleHQg cmVsYXRlZCB0byB0aGlzIHJlcXVlc3QgKi8KPiAtCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHg7 Cj4gLQo+IC0JLyoqIEJhdGNoIGJ1ZmZlciByZWxhdGVkIHRvIHRoaXMgcmVxdWVzdCBpZiBhbnkg Ki8KPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpiYXRjaF9vYmo7Cj4gLQo+IC0JLyoq IFRpbWUgYXQgd2hpY2ggdGhpcyByZXF1ZXN0IHdhcyBlbWl0dGVkLCBpbiBqaWZmaWVzLiAqLwo+ IC0JdW5zaWduZWQgbG9uZyBlbWl0dGVkX2ppZmZpZXM7Cj4gLQo+IC0JLyoqIGdsb2JhbCBsaXN0 IGVudHJ5IGZvciB0aGlzIHJlcXVlc3QgKi8KPiAtCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiAt Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXY7Cj4gLQkvKiogZmls ZV9wcml2IGxpc3QgZW50cnkgZm9yIHRoaXMgcmVxdWVzdCAqLwo+IC0Jc3RydWN0IGxpc3RfaGVh ZCBjbGllbnRfbGlzdDsKPiAtfTsKPiArc3RhdGljIGlubGluZSBib29sCj4gK19faTkxNV9zZXFu b19wYXNzZWQodWludDMyX3Qgc2VxMSwgdWludDMyX3Qgc2VxMikKPiArewo+ICsJcmV0dXJuIChp bnQzMl90KShzZXExIC0gc2VxMikgPj0gMDsKPiArfQo+ICAgCj4gICBzdHJ1Y3QgZHJtX2k5MTVf ZmlsZV9wcml2YXRlIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7Cj4g QEAgLTE5MzksNyArMTg5NSw3IEBAIHN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgewo+ICAg CXN0cnVjdCBpZHIgY29udGV4dF9pZHI7Cj4gICAKPiAgIAlhdG9taWNfdCBycHNfd2FpdF9ib29z dDsKPiAtCXN0cnVjdCAgaW50ZWxfZW5naW5lX2NzICpic2RfcmluZzsKPiArCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmJzZF9lbmdpbmU7Cj4gICB9Owo+ICAgCj4gICAvKgo+IEBAIC0yMTE5LDcg KzIwNzUsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfY21kX3RhYmxlIHsKPiAgIAkJCQkgdG9faTkxNShk ZXYpLT5lbGxjX3NpemUpCj4gICAjZGVmaW5lIEk5MTVfTkVFRF9HRlhfSFdTKGRldikJKElOVEVM X0lORk8oZGV2KS0+bmVlZF9nZnhfaHdzKQo+ICAgCj4gLSNkZWZpbmUgSEFTX0hXX0NPTlRFWFRT KGRldikJKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDYpCj4gKyNkZWZpbmUgSEFTX0hXX0NPTlRF WFRTKGRldikJKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDUpCj4gICAjZGVmaW5lIEhBU19MT0dJ Q0FMX1JJTkdfQ09OVEVYVFMoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOCkKPiAgICNk ZWZpbmUgSEFTX0FMSUFTSU5HX1BQR1RUKGRldikJKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDYp Cj4gICAjZGVmaW5lIEhBU19QUEdUVChkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNyAm JiAhSVNfR0VOOChkZXYpKQo+IEBAIC0yMjI3LDcgKzIxODMsNyBAQCBzdHJ1Y3QgaTkxNV9wYXJh bXMgewo+ICAgfTsKPiAgIGV4dGVybiBzdHJ1Y3QgaTkxNV9wYXJhbXMgaTkxNSBfX3JlYWRfbW9z dGx5Owo+ICAgCj4gLQkJCQkvKiBpOTE1X2RtYS5jICovCj4gKy8qIGk5MTVfZG1hLmMgKi8KPiAg IGV4dGVybiBpbnQgaTkxNV9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqLCB1bnNpZ25l ZCBsb25nIGZsYWdzKTsKPiAgIGV4dGVybiBpbnQgaTkxNV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBk cm1fZGV2aWNlICopOwo+ICAgZXh0ZXJuIGludCBpOTE1X2RyaXZlcl9vcGVuKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4gQEAgLTIyOTcsMjAgKzIyNTMs NiBAQCBpbnQgaTkxNV9nZW1fc2V0X2RvbWFpbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLAo+ICAgCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ ICAgaW50IGk5MTVfZ2VtX3N3X2ZpbmlzaF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2 b2lkICpkYXRhLAo+ICAgCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cj4gLXZv aWQgaTkxNV9nZW1fZXhlY2J1ZmZlcl9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgbGlzdF9oZWFkICp2 bWFzLAo+IC0JCQkJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+IC12b2lkIGk5MTVf Z2VtX2V4ZWNidWZmZXJfcmV0aXJlX2NvbW1hbmRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4g LQkJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKPiAtCQkJCQkgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZywKPiAtCQkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4g LWludCBpOTE1X2dlbV9yaW5nYnVmZmVyX3N1Ym1pc3Npb24oc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiAtCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKPiAtCQkJCSAgIHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcsCj4gLQkJCQkgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+ IC0JCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJncywKPiAtCQkJCSAg IHN0cnVjdCBsaXN0X2hlYWQgKnZtYXMsCj4gLQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqYmF0Y2hfb2JqLAo+IC0JCQkJICAgdTY0IGV4ZWNfc3RhcnQsIHUzMiBmbGFncyk7Cj4g ICBpbnQgaTkxNV9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAo+ICAgCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ICAgaW50IGk5MTVfZ2Vt X2V4ZWNidWZmZXIyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gQEAgLTIz OTcsMjIgKzIzMzksMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGk5MTVfZ2VtX29iamVjdF91bnBp bl9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCj4gICBpbnQgX19t dXN0X2NoZWNrIGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwo+ICAgaW50IGk5MTVfZ2VtX29iamVjdF9zeW5jKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCj4gLQkJCSBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICp0byk7Cj4gLXZvaWQg aTkxNV92bWFfbW92ZV90b19hY3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gLQkJCSAgICAg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gKwkJCSBzdHJ1Y3QgaTkxNV9nZW1fcmVx dWVzdCAqcnEpOwo+ICAgaW50IGk5MTVfZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2LAo+ICAgCQkJIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkgc3RydWN0 IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKPiAgIGludCBpOTE1X2dlbV9tbWFwX2d0dChz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJ ICAgICAgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCAqb2Zmc2V0KTsKPiAtLyoqCj4gLSAqIFJl dHVybnMgdHJ1ZSBpZiBzZXExIGlzIGxhdGVyIHRoYW4gc2VxMi4KPiAtICovCj4gLXN0YXRpYyBp bmxpbmUgYm9vbAo+IC1pOTE1X3NlcW5vX3Bhc3NlZCh1aW50MzJfdCBzZXExLCB1aW50MzJfdCBz ZXEyKQo+IC17Cj4gLQlyZXR1cm4gKGludDMyX3QpKHNlcTEgLSBzZXEyKSA+PSAwOwo+IC19Cj4g ICAKPiAgIGludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fZ2V0X3NlcW5vKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHUzMiAqc2Vxbm8pOwo+ICAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9zZXRf c2Vxbm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHNlcW5vKTsKPiBAQCAtMjQyMiwyNCAr MjM1NCwzMyBAQCBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2Uoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4gICBib29sIGk5MTVfZ2VtX29iamVjdF9w aW5fZmVuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4gICB2b2lkIGk5MTVf Z2VtX29iamVjdF91bnBpbl9mZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsK PiAgIAo+IC1zdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKgo+IC1pOTE1X2dlbV9maW5kX2Fj dGl2ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+IC0KPiAgIGJvb2wg aTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+IC12b2lk IGk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5nKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcpOwo+IC1pbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2NoZWNrX3dlZGdlKHN0cnVjdCBpOTE1 X2dwdV9lcnJvciAqZXJyb3IsCj4gLQkJCQkgICAgICBib29sIGludGVycnVwdGlibGUpOwo+IC1p bnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2NoZWNrX29scihzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nLCB1MzIgc2Vxbm8pOwo+ICt2b2lkIGk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19fZW5n aW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gKwo+ICtzdGF0aWMgaW5saW5l IGJvb2wgX19pOTE1X3Jlc2V0X2luX3Byb2dyZXNzKHVuc2lnbmVkIHgpCj4gK3sKPiArCXJldHVy biB1bmxpa2VseSh4ICYgSTkxNV9SRVNFVF9JTl9QUk9HUkVTU19GTEFHKTsKPiArfQo+ICAgCj4g ICBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9yZXNldF9pbl9wcm9ncmVzcyhzdHJ1Y3QgaTkxNV9n cHVfZXJyb3IgKmVycm9yKQo+ICAgewo+IC0JcmV0dXJuIHVubGlrZWx5KGF0b21pY19yZWFkKCZl cnJvci0+cmVzZXRfY291bnRlcikKPiAtCQkJJiAoSTkxNV9SRVNFVF9JTl9QUk9HUkVTU19GTEFH IHwgSTkxNV9XRURHRUQpKTsKPiArCXJldHVybiBfX2k5MTVfcmVzZXRfaW5fcHJvZ3Jlc3MoYXRv bWljX3JlYWQoJmVycm9yLT5yZXNldF9jb3VudGVyKSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxp bmUgYm9vbCBfX2k5MTVfdGVybWluYWxseV93ZWRnZWQodW5zaWduZWQgeCkKPiArewo+ICsJcmV0 dXJuIHVubGlrZWx5KHggJiBJOTE1X1dFREdFRCk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbmxp bmUgYm9vbCBpOTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKHN0cnVjdCBpOTE1X2dwdV9lcnJvciAqZXJy b3IpCj4gICB7Cj4gLQlyZXR1cm4gYXRvbWljX3JlYWQoJmVycm9yLT5yZXNldF9jb3VudGVyKSAm IEk5MTVfV0VER0VEOwo+ICsJcmV0dXJuIF9faTkxNV90ZXJtaW5hbGx5X3dlZGdlZChhdG9taWNf cmVhZCgmZXJyb3ItPnJlc2V0X2NvdW50ZXIpKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBi b29sIGk5MTVfcmVjb3ZlcnlfcGVuZGluZyhzdHJ1Y3QgaTkxNV9ncHVfZXJyb3IgKmVycm9yKQo+ ICt7Cj4gKwl1bnNpZ25lZCB4ID0gYXRvbWljX3JlYWQoJmVycm9yLT5yZXNldF9jb3VudGVyKTsK PiArCXJldHVybiBfX2k5MTVfcmVzZXRfaW5fcHJvZ3Jlc3MoeCkgJiYgIV9faTkxNV90ZXJtaW5h bGx5X3dlZGdlZCh4KTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGlubGluZSB1MzIgaTkxNV9yZXNl dF9jb3VudChzdHJ1Y3QgaTkxNV9ncHVfZXJyb3IgKmVycm9yKQo+IEBAIC0yNDYzLDIxICsyNDA0 LDExIEBAIHZvaWQgaTkxNV9nZW1fcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gICBi b29sIGk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosIGJvb2wgZm9yY2UpOwo+ICAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9vYmplY3RfZmlu aXNoX2dwdShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKPiAgIGludCBfX211c3Rf Y2hlY2sgaTkxNV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAtaW50IGk5MTVf Z2VtX2luaXRfcmluZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gICBpbnQgX19tdXN0X2No ZWNrIGk5MTVfZ2VtX2luaXRfaHcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gLWludCBpOTE1 X2dlbV9sM19yZW1hcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLCBpbnQgc2xpY2UpOwo+ ICt2b2lkIGk5MTVfZ2VtX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gICB2b2lkIGk5 MTVfZ2VtX2luaXRfc3dpenpsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+IC12b2lkIGk5 MTVfZ2VtX2NsZWFudXBfcmluZ2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgIGlu dCBfX211c3RfY2hlY2sgaTkxNV9ncHVfaWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAg IGludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKPiAtaW50IF9faTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5n LAo+IC0JCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCj4gLQkJICAgICAgIHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpiYXRjaF9vYmosCj4gLQkJICAgICAgIHUzMiAqc2Vxbm8pOwo+ IC0jZGVmaW5lIGk5MTVfYWRkX3JlcXVlc3QocmluZywgc2Vxbm8pIFwKPiAtCV9faTkxNV9hZGRf cmVxdWVzdChyaW5nLCBOVUxMLCBOVUxMLCBzZXFubykKPiAtaW50IF9fbXVzdF9jaGVjayBpOTE1 X3dhaXRfc2Vxbm8oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAtCQkJCSB1aW50MzJf dCBzZXFubyk7Cj4gICBpbnQgaTkxNV9nZW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsKPiAgIGludCBfX211c3RfY2hlY2sKPiAgIGk5MTVf Z2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAo+IEBAIC0yNDg3LDcgKzI0MTgsNyBAQCBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9k b21haW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgYm9vbCB3cml0ZSk7Cj4gICBp bnQgX19tdXN0X2NoZWNrCj4gICBpOTE1X2dlbV9vYmplY3RfcGluX3RvX2Rpc3BsYXlfcGxhbmUo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkJCQkgICAgIHUzMiBhbGlnbm1l bnQsCj4gLQkJCQkgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnBpcGVsaW5lZCk7Cj4gKwkJ CQkgICAgIHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpwaXBlbGluZWQpOwo+ICAgdm9pZCBpOTE1 X2dlbV9vYmplY3RfdW5waW5fZnJvbV9kaXNwbGF5X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmopOwo+ICAgaW50IGk5MTVfZ2VtX29iamVjdF9hdHRhY2hfcGh5cyhzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJCWludCBhbGlnbik7Cj4gQEAgLTI1MzQs MTMgKzI0NjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfZ2VtX29ial9pc19waW5uZWQo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikgewo+ICAgfQo+ICAgCj4gICAvKiBTb21l IEdHVFQgVk0gaGVscGVycyAqLwo+IC0jZGVmaW5lIGk5MTVfb2JqX3RvX2dndHQob2JqKSBcCj4g LQkoJigoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKikob2JqKS0+YmFzZS5kZXYtPmRldl9wcml2 YXRlKS0+Z3R0LmJhc2UpCj4gKyNkZWZpbmUgaTkxNV9vYmpfdG9fZ2d0dChvYmopICgmdG9faTkx NSgob2JqKS0+YmFzZS5kZXYpLT5ndHQuYmFzZSkKPiAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1 X2lzX2dndHQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gICB7Cj4gLQlzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICpnZ3R0ID0KPiAtCQkmKChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqKSh2bSktPmRldi0+ZGV2X3ByaXZhdGUpLT5ndHQuYmFzZTsKPiAtCXJldHVybiB2bSA9PSBn Z3R0Owo+ICsJcmV0dXJuIHZtID09ICZ0b19pOTE1KHZtLT5kZXYpLT5ndHQuYmFzZTsKPiAgIH0K PiAgIAo+ICAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaTkxNV9od19wcGd0dCAqCj4gQEAgLTI1ODks MTIgKzI1MTcsMTIgQEAgdm9pZCBpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKPiAgIC8qIGk5MTVfZ2VtX2NvbnRleHQuYyAqLwo+ICAg aW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9jb250ZXh0X2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7Cj4gICB2b2lkIGk5MTVfZ2VtX2NvbnRleHRfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKPiAtdm9pZCBpOTE1X2dlbV9jb250ZXh0X3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwo+ICAgaW50IGk5MTVfZ2VtX2NvbnRleHRfb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICAgaW50IGk5MTVfZ2VtX2NvbnRleHRfZW5hYmxl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gICB2b2lkIGk5MTVfZ2VtX2Nv bnRleHRfY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxl KTsKPiAtaW50IGk5MTVfc3dpdGNoX2NvbnRleHQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmlu ZywKPiAtCQkJc3RydWN0IGludGVsX2NvbnRleHQgKnRvKTsKPiAraW50IGk5MTVfcmVxdWVzdF9z d2l0Y2hfY29udGV4dChzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpOwo+ICt2b2lkIGk5MTVf cmVxdWVzdF9zd2l0Y2hfY29udGV4dF9fY29tbWl0KHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpy cSk7Cj4gK3ZvaWQgaTkxNV9yZXF1ZXN0X3N3aXRjaF9jb250ZXh0X191bmRvKHN0cnVjdCBpOTE1 X2dlbV9yZXF1ZXN0ICpycSk7Cj4gICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqCj4gICBpOTE1X2dl bV9jb250ZXh0X2dldChzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYsIHUz MiBpZCk7Cj4gICB2b2lkIGk5MTVfZ2VtX2NvbnRleHRfZnJlZShzdHJ1Y3Qga3JlZiAqY3R4X3Jl Zik7Cj4gQEAgLTI2MjQsNiArMjU1Miw4IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X2dldHBhcmFt X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICBpbnQgaTkxNV9n ZW1fY29udGV4dF9zZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAo+ICAgCQkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cj4gICAKPiArLyog aTkxNV9nZW1fcmVuZGVyX3N0YXRlLmMgKi8KPiAraW50IGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZV9p bml0KHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSk7Cj4gICAvKiBpOTE1X2dlbV9ldmljdC5j ICovCj4gICBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2V2aWN0X3NvbWV0aGluZyhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAo+ICAgCQkJCQkgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZt LAo+IEBAIC0yNjQzLDYgKzI1NzMsMTYwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2dlbV9j aGlwc2V0X2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAJCWludGVsX2d0dF9jaGlw c2V0X2ZsdXNoKCk7Cj4gICB9Cj4gICAKPiArLyogaTkxNV9nZW1fcmVxdWVzdC5jICovCj4gKwo+ ICsvKioKPiArICogUmVxdWVzdCBxdWV1ZSBzdHJ1Y3R1cmUuCj4gKyAqCj4gKyAqIFRoZSByZXF1 ZXN0IHF1ZXVlIGFsbG93cyB1cyB0byBub3RlIHNlcXVlbmNlIG51bWJlcnMgdGhhdCBoYXZlIGJl ZW4gZW1pdHRlZAo+ICsgKiBhbmQgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBhY3RpdmUgYnVmZmVy cyB0byBiZSByZXRpcmVkLgo+ICsgKgo+ICsgKiBCeSBrZWVwaW5nIHRoaXMgbGlzdCwgd2UgY2Fu IGF2b2lkIGhhdmluZyB0byBkbyBxdWVzdGlvbmFibGUKPiArICogc2VxdWVuY2UtbnVtYmVyIGNv bXBhcmlzb25zIG9uIGJ1ZmZlciBsYXN0X3JlbmRlcmluZ19zZXFub3MsIGFuZCBhc3NvY2lhdGUK PiArICogYW4gZW1pc3Npb24gdGltZSB3aXRoIHNlcW5vcyBmb3IgdHJhY2tpbmcgaG93IGZhciBh aGVhZCBvZiB0aGUgR1BVIHdlIGFyZS4KPiArICovCj4gK3N0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0 IHsKPiArCXN0cnVjdCBrcmVmIGtyZWY7Cj4gKwo+ICsJLyoqIE9uIHdoaWNoIHJpbmcvZW5naW5l L2N0eCB0aGlzIHJlcXVlc3Qgd2FzIGdlbmVyYXRlZCAqLwo+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTU7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4Owo+ICsJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmc7 Cj4gKwo+ICsJLyoqIEhvdyBtYW55IEdQVSByZXNldHMgYWdvIHdhcyB0aGlzIHJlcXVlc3QgZmly c3QgY29uc3RydWN0ZWQ/ICovCj4gKwl1bnNpZ25lZCByZXNldF9jb3VudGVyOwo+ICsKPiArCS8q KiBHRU0gc2VxdWVuY2UgbnVtYmVyL2JyZWFkY3J1bWIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVx dWVzdC4gKi8KPiArCXUzMiBzZXFubzsKPiArCXUzMiBicmVhZGNydW1iW0k5MTVfTlVNX0VOR0lO RVNdOwo+ICsJdTMyIHNlbWFwaG9yZVtJOTE1X05VTV9FTkdJTkVTXTsKPiArCj4gKwkvKiogUG9z aXRpb24gaW4gdGhlIHJpbmdidWZmZXIgb2YgdGhlIHJlcXVlc3QgKi8KPiArCXUzMiBoZWFkLCB0 YWlsOwo+ICsKPiArCS8qKiBCYXRjaCBidWZmZXIgYW5kIG9iamVjdHMgcmVsYXRlZCB0byB0aGlz IHJlcXVlc3QgaWYgYW55ICovCj4gKwlzdHJ1Y3QgaTkxNV92bWEgKmJhdGNoOwo+ICsJc3RydWN0 IGxpc3RfaGVhZCB2bWFzOwo+ICsKPiArCS8qKiBUaW1lIGF0IHdoaWNoIHRoaXMgcmVxdWVzdCB3 YXMgZW1pdHRlZCwgaW4gamlmZmllcy4gKi8KPiArCXVuc2lnbmVkIGxvbmcgZW1pdHRlZF9qaWZm aWVzOwo+ICsKPiArCS8qKiBnbG9iYWwgbGlzdCBlbnRyeSBmb3IgdGhpcyByZXF1ZXN0ICovCj4g KwlzdHJ1Y3QgbGlzdF9oZWFkIGVuZ2luZV9saXN0Owo+ICsJc3RydWN0IGxpc3RfaGVhZCBicmVh ZGNydW1iX2xpbms7Cj4gKwo+ICsJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9w cml2Owo+ICsJLyoqIGZpbGVfcHJpdiBsaXN0IGVudHJ5IGZvciB0aGlzIHJlcXVlc3QgKi8KPiAr CXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7Cj4gKwo+ICsJdTE2IHRhZzsKPiArCXVuc2ln bmVkIHJlbWFwX2wzOjg7Cj4gKwl1bnNpZ25lZCBwZW5kaW5nX2ZsdXNoOjQ7Cj4gKwlib29sIG91 dHN0YW5kaW5nOjE7Cj4gKwlib29sIGhhc19jdHhfc3dpdGNoOjE7Cj4gKwo+ICsJYm9vbCBjb21w bGV0ZWQ7IC8qIGtlcHQgc2VwYXJhdGUgZm9yIGF0b21pY2l0eSAqLwo+ICt9Owo+ICsKPiArc3Rh dGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICppOTE1X3JlcXVlc3RfZW5naW5lKHN0 cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSkKPiArewo+ICsJcmV0dXJuIHJxID8gcnEtPmVuZ2lu ZSA6IE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGk5MTVfcmVxdWVzdF9lbmdp bmVfaWQoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwlyZXR1cm4gcnEgPyBy cS0+ZW5naW5lLT5pZCA6IC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHUzMiBpOTE1X3Jl cXVlc3Rfc2Vxbm8oc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwlyZXR1cm4g cnEgPyBycS0+c2Vxbm8gOiAwOwo+ICt9Cj4gKwo+ICtib29sIF9faTkxNV9yZXF1ZXN0X2NvbXBs ZXRlX193YShzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpOwo+ICsKPiArc3RhdGljIGlubGlu ZSBib29sCj4gK2k5MTVfcmVxdWVzdF9jb21wbGV0ZShzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAq cnEpCj4gK3sKPiArCWlmICghcnEtPmNvbXBsZXRlZCAmJiBycS0+ZW5naW5lLT5pc19jb21wbGV0 ZShycSkpIHsKPiArCQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlKHJxKTsKPiArCQly cS0+Y29tcGxldGVkID0gdHJ1ZTsKPiArCX0KPiArCXJldHVybiBycS0+Y29tcGxldGVkOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICoKPiAraTkxNV9y ZXF1ZXN0X2dldChzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gK3sKPiArCWlmIChycSkK PiArCQlrcmVmX2dldCgmcnEtPmtyZWYpOwo+ICsJcmV0dXJuIHJxOwo+ICt9Cj4gKwo+ICt2b2lk IF9faTkxNV9yZXF1ZXN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpOwo+ICsKPiArc3RhdGljIGlu bGluZSB2b2lkCj4gK2k5MTVfcmVxdWVzdF9wdXQoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJx KQo+ICt7Cj4gKwlpZiAocnEgPT0gTlVMTCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJbG9ja2RlcF9h c3NlcnRfaGVsZCgmcnEtPmk5MTUtPmRldi0+c3RydWN0X211dGV4KTsKPiArCWtyZWZfcHV0KCZy cS0+a3JlZiwgX19pOTE1X3JlcXVlc3RfZnJlZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUg dm9pZAo+ICtpOTE1X3JlcXVlc3RfcHV0X191bmxvY2tlZChzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVz dCAqcnEpCj4gK3sKPiArCWlmICghYXRvbWljX2FkZF91bmxlc3MoJnJxLT5rcmVmLnJlZmNvdW50 LCAtMSwgMSkpIHsKPiArCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcnEtPmk5MTUtPmRldjsK PiArCj4gKwkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsJCWlmIChsaWtlbHko YXRvbWljX2RlY19hbmRfdGVzdCgmcnEtPmtyZWYucmVmY291bnQpKSkKPiArCQkJX19pOTE1X3Jl cXVlc3RfZnJlZSgmcnEtPmtyZWYpOwo+ICsJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0 ZXgpOwo+ICsJfQo+ICt9Cj4gKwo+ICtpbnQgX19tdXN0X2NoZWNrCj4gK2k5MTVfcmVxdWVzdF9h ZGRfdm1hKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwKPiArCQkgICAgIHN0cnVjdCBpOTE1 X3ZtYSAqdm1hLAo+ICsJCSAgICAgdW5zaWduZWQgZmVuY2VkKTsKPiArI2RlZmluZSBWTUFfSVNf RkVOQ0VEIDB4MQo+ICsjZGVmaW5lIFZNQV9IQVNfRkVOQ0UgMHgyCj4gK2ludCBfX211c3RfY2hl Y2sKPiAraTkxNV9yZXF1ZXN0X2VtaXRfZmx1c2goc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJx LAo+ICsJCQl1bnNpZ25lZCBmbGFncyk7Cj4gK2ludCBfX211c3RfY2hlY2sKPiArX19pOTE1X3Jl cXVlc3RfZW1pdF9icmVhZGNydW1iKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwgaW50IGlk KTsKPiArc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCj4gK2k5MTVfcmVxdWVzdF9lbWl0 X2JyZWFkY3J1bWIoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwlyZXR1cm4g X19pOTE1X3JlcXVlc3RfZW1pdF9icmVhZGNydW1iKHJxLCBycS0+ZW5naW5lLT5pZCk7Cj4gK30K PiArc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCj4gK2k5MTVfcmVxdWVzdF9lbWl0X3Nl bWFwaG9yZShzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEsIGludCBpZCkKPiArewo+ICsJcmV0 dXJuIF9faTkxNV9yZXF1ZXN0X2VtaXRfYnJlYWRjcnVtYihycSwgaWQpOwo+ICt9Cj4gK2ludCBf X211c3RfY2hlY2sKPiAraTkxNV9yZXF1ZXN0X2VtaXRfYmF0Y2hidWZmZXIoc3RydWN0IGk5MTVf Z2VtX3JlcXVlc3QgKnJxLAo+ICsJCQkgICAgICBzdHJ1Y3QgaTkxNV92bWEgKmJhdGNoLAo+ICsJ CQkgICAgICB1aW50NjRfdCBzdGFydCwgdWludDMyX3QgbGVuLAo+ICsJCQkgICAgICB1bnNpZ25l ZCBmbGFncyk7Cj4gK2ludCBfX211c3RfY2hlY2sKPiAraTkxNV9yZXF1ZXN0X2NvbW1pdChzdHJ1 Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpOwo+ICtzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqCj4g K2k5MTVfcmVxdWVzdF9nZXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEp Owo+ICtpbnQgX19tdXN0X2NoZWNrCj4gK2k5MTVfcmVxdWVzdF93YWl0KHN0cnVjdCBpOTE1X2dl bV9yZXF1ZXN0ICpycSk7Cj4gK2ludCBfX2k5MTVfcmVxdWVzdF93YWl0KHN0cnVjdCBpOTE1X2dl bV9yZXF1ZXN0ICpycSwKPiArCQkJYm9vbCBpbnRlcnJ1cHRpYmxlLAo+ICsJCQlzNjQgKnRpbWVv dXQsCj4gKwkJCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGUpOwo+ICt2b2lkIGk5 MTVfcmVxdWVzdF9yZXRpcmUoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKTsKPiArCj4gICAv KiBpOTE1X2dlbV9zdG9sZW4uYyAqLwo+ICAgaW50IGk5MTVfZ2VtX2luaXRfc3RvbGVuKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOwo+ICAgaW50IGk5MTVfZ2VtX3N0b2xlbl9zZXR1cF9jb21wcmVz c2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgc2l6ZSwgaW50IGZiX2NwcCk7Cj4gQEAg LTI2NjksMTMgKzI3NTMsNiBAQCB2b2lkIGk5MTVfZ2VtX2RldGVjdF9iaXRfNl9zd2l6emxlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICAgdm9pZCBpOTE1X2dlbV9vYmplY3RfZG9fYml0XzE3 X3N3aXp6bGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4gICB2b2lkIGk5MTVf Z2VtX29iamVjdF9zYXZlX2JpdF8xN19zd2l6emxlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopOwo+ICAgCj4gLS8qIGk5MTVfZ2VtX2RlYnVnLmMgKi8KPiAtI2lmIFdBVENIX0xJU1RT Cj4gLWludCBpOTE1X3ZlcmlmeV9saXN0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAtI2Vs c2UKPiAtI2RlZmluZSBpOTE1X3ZlcmlmeV9saXN0cyhkZXYpIDAKPiAtI2VuZGlmCj4gLQo+ICAg LyogaTkxNV9kZWJ1Z2ZzLmMgKi8KPiAgIGludCBpOTE1X2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJt X21pbm9yICptaW5vcik7Cj4gICB2b2lkIGk5MTVfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBkcm1f bWlub3IgKm1pbm9yKTsKPiBAQCAtMjcxMCwxMCArMjc4NywxMCBAQCBjb25zdCBjaGFyICppOTE1 X2NhY2hlX2xldmVsX3N0cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgaW50IHR5cGUp Owo+ICAgCj4gICAvKiBpOTE1X2NtZF9wYXJzZXIuYyAqLwo+ICAgaW50IGk5MTVfY21kX3BhcnNl cl9nZXRfdmVyc2lvbih2b2lkKTsKPiAtaW50IGk5MTVfY21kX3BhcnNlcl9pbml0X3Jpbmcoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gLXZvaWQgaTkxNV9jbWRfcGFyc2VyX2Zpbmlf cmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKPiAtYm9vbCBpOTE1X25lZWRzX2Nt ZF9wYXJzZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gLWludCBpOTE1X3BhcnNl X2NtZHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAraW50IGk5MTVfY21kX3BhcnNl cl9pbml0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICt2b2lkIGk5 MTVfY21kX3BhcnNlcl9maW5pX2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Owo+ICtib29sIGk5MTVfbmVlZHNfY21kX3BhcnNlcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpOwo+ICtpbnQgaTkxNV9wYXJzZV9jbWRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKPiAgIAkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpiYXRjaF9vYmosCj4g ICAJCSAgICB1MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0LAo+ICAgCQkgICAgYm9vbCBpc19tYXN0ZXIp Owo+IEBAIC0yODEyLDE0ICsyODg5LDExIEBAIGV4dGVybiB2b2lkIGludGVsX2RldGVjdF9wY2go c3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gICBleHRlcm4gaW50IGludGVsX3RyYW5zX2RwX3Bv cnRfc2VsKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gICBleHRlcm4gaW50IGludGVsX2VuYWJs ZV9yYzYoY29uc3Qgc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gICAKPiAtZXh0ZXJuIGJvb2wg aTkxNV9zZW1hcGhvcmVfaXNfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgIGlu dCBpOTE1X3JlZ19yZWFkX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs Cj4gICAJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICAgaW50IGk5MTVfZ2V0X3Jlc2V0X3N0 YXRzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJCQkgICAg ICAgc3RydWN0IGRybV9maWxlICpmaWxlKTsKPiAgIAo+IC12b2lkIGludGVsX25vdGlmeV9tbWlv X2ZsaXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gLQo+ICAgLyogb3ZlcmxheSAq Lwo+ICAgZXh0ZXJuIHN0cnVjdCBpbnRlbF9vdmVybGF5X2Vycm9yX3N0YXRlICppbnRlbF9vdmVy bGF5X2NhcHR1cmVfZXJyb3Jfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gICBleHRl cm4gdm9pZCBpbnRlbF9vdmVybGF5X3ByaW50X2Vycm9yX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9l cnJvcl9zdGF0ZV9idWYgKmUsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gaW5kZXggZjQ1NTNi MmJlZThlLi40NmQzYWNlZDdhNTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAt NDQsOSArNDQsNiBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfZmx1c2hfY3B1X3dyaXRl X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbwo+ICAgc3RhdGljIF9fbXVzdF9j aGVjayBpbnQKPiAgIGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJICAgICAgIGJvb2wgcmVhZG9ubHkpOwo+IC1zdGF0 aWMgdm9pZAo+IC1pOTE1X2dlbV9vYmplY3RfcmV0aXJlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopOwo+IC0KPiAgIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX3dyaXRlX2ZlbmNlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIGludCByZWcsCj4gICAJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmopOwo+ICAgc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3VwZGF0ZV9mZW5j ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IEBAIC0xMDgsMjMgKzEwNSw5NSBA QCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9pbmZvX3JlbW92ZV9vYmooc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICAgCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0ub2JqZWN0X3N0 YXRfbG9jayk7Cj4gICB9Cj4gICAKPiArc3RhdGljIHZvaWQKPiAraTkxNV9nZW1fb2JqZWN0X3Jl dGlyZV9fd3JpdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiArewo+ICsJaW50 ZWxfZmJfb2JqX2ZsdXNoKG9iaiwgdHJ1ZSk7Cj4gKwlsaXN0X2RlbF9pbml0KCZvYmotPmxhc3Rf d3JpdGUuZW5naW5lX2xpc3QpOwo+ICsJaTkxNV9yZXF1ZXN0X3B1dChvYmotPmxhc3Rfd3JpdGUu cmVxdWVzdCk7Cj4gKwlvYmotPmxhc3Rfd3JpdGUucmVxdWVzdCA9IE5VTEw7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkCj4gK2k5MTVfZ2VtX29iamVjdF9yZXRpcmVfX2ZlbmNlKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCWxpc3RfZGVsX2luaXQoJm9iai0+bGFzdF9m ZW5jZS5lbmdpbmVfbGlzdCk7Cj4gKwlpOTE1X3JlcXVlc3RfcHV0KG9iai0+bGFzdF9mZW5jZS5y ZXF1ZXN0KTsKPiArCW9iai0+bGFzdF9mZW5jZS5yZXF1ZXN0ID0gTlVMTDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQKPiAraTkxNV9nZW1fb2JqZWN0X3JldGlyZV9fcmVhZChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiArewo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gKwo+ICsJQlVHX09OKG9iai0+ YWN0aXZlID09IDApOwo+ICsKPiArCWxpc3RfZGVsX2luaXQoJm9iai0+bGFzdF9yZWFkW2VuZ2lu ZS0+aWRdLmVuZ2luZV9saXN0KTsKPiArCWk5MTVfcmVxdWVzdF9wdXQob2JqLT5sYXN0X3JlYWRb ZW5naW5lLT5pZF0ucmVxdWVzdCk7Cj4gKwlvYmotPmxhc3RfcmVhZFtlbmdpbmUtPmlkXS5yZXF1 ZXN0ID0gTlVMTDsKPiArCj4gKwlpZiAob2JqLT5sYXN0X3dyaXRlLnJlcXVlc3QgJiYKPiArCSAg ICBvYmotPmxhc3Rfd3JpdGUucmVxdWVzdC0+ZW5naW5lID09IGVuZ2luZSkKPiArCQlpOTE1X2dl bV9vYmplY3RfcmV0aXJlX193cml0ZShvYmopOwo+ICsKPiArCWlmIChvYmotPmxhc3RfZmVuY2Uu cmVxdWVzdCAmJgo+ICsJICAgIG9iai0+bGFzdF9mZW5jZS5yZXF1ZXN0LT5lbmdpbmUgPT0gZW5n aW5lKQo+ICsJCWk5MTVfZ2VtX29iamVjdF9yZXRpcmVfX2ZlbmNlKG9iaik7Cj4gKwo+ICsJaWYg KC0tb2JqLT5hY3RpdmUpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnko dm1hLCAmb2JqLT52bWFfbGlzdCwgdm1hX2xpbmspCj4gKwkJaWYgKCFsaXN0X2VtcHR5KCZ2bWEt Pm1tX2xpc3QpKQo+ICsJCQlsaXN0X21vdmVfdGFpbCgmdm1hLT5tbV9saXN0LCAmdm1hLT52bS0+ aW5hY3RpdmVfbGlzdCk7Cj4gKwo+ICsJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+ YmFzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK2k5MTVfZ2VtX29iamVjdF9yZXRpcmUo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiArewo+ICsJc3RydWN0IGk5MTVfZ2Vt X3JlcXVlc3QgKnJxOwo+ICsJaW50IGk7Cj4gKwo+ICsJLyogV2Ugc2hvdWxkIG9ubHkgYmUgY2Fs bGVkIGZyb20gY29kZSBwYXRocyB3aGVyZSB3ZSBrbm93IHdlCj4gKwkgKiBob2xkIGJvdGggdGhl IGFjdGl2ZSByZWZlcmVuY2UgKmFuZCogYSB1c2VyIHJlZmVyZW5jZS4KPiArCSAqIFRoZXJlZm9y ZSB3ZSBjYW4gc2FmZWx5IGFjY2VzcyB0aGUgb2JqZWN0IGFmdGVyIHJldGlyaW5nIGFzCj4gKwkg KiB3ZSB3aWxsIGhvbGQgYSBzZWNvbmQgcmVmZXJlbmNlIGFuZCBub3QgZnJlZSB0aGUgb2JqZWN0 Lgo+ICsJICovCj4gKwo+ICsJcnEgPSBvYmotPmxhc3Rfd3JpdGUucmVxdWVzdDsKPiArCWlmIChy cSAmJiBpOTE1X3JlcXVlc3RfY29tcGxldGUocnEpKQo+ICsJCWk5MTVfZ2VtX29iamVjdF9yZXRp cmVfX3dyaXRlKG9iaik7Cj4gKwo+ICsJcnEgPSBvYmotPmxhc3RfZmVuY2UucmVxdWVzdDsKPiAr CWlmIChycSAmJiBpOTE1X3JlcXVlc3RfY29tcGxldGUocnEpKQo+ICsJCWk5MTVfZ2VtX29iamVj dF9yZXRpcmVfX2ZlbmNlKG9iaik7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX0VO R0lORVM7IGkrKykgewo+ICsJCXJxID0gb2JqLT5sYXN0X3JlYWRbaV0ucmVxdWVzdDsKPiArCQlp ZiAocnEgJiYgaTkxNV9yZXF1ZXN0X2NvbXBsZXRlKHJxKSkKPiArCQkJaTkxNV9nZW1fb2JqZWN0 X3JldGlyZV9fcmVhZChvYmosIHJxLT5lbmdpbmUpOwo+ICsJfQo+ICsKPiArCWlmICghb2JqLT5h Y3RpdmUpCj4gKwkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKG9iai0+YmFzZS5kZXYpOwo+ICt9 Cj4gKwo+ICAgc3RhdGljIGludAo+ICAgaTkxNV9nZW1fd2FpdF9mb3JfZXJyb3Ioc3RydWN0IGk5 MTVfZ3B1X2Vycm9yICplcnJvcikKPiAgIHsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gLSNkZWZpbmUg RVhJVF9DT05EICghaTkxNV9yZXNldF9pbl9wcm9ncmVzcyhlcnJvcikgfHwgXAo+IC0JCSAgIGk5 MTVfdGVybWluYWxseV93ZWRnZWQoZXJyb3IpKQo+IC0JaWYgKEVYSVRfQ09ORCkKPiAtCQlyZXR1 cm4gMDsKPiAtCj4gICAJLyoKPiAgIAkgKiBPbmx5IHdhaXQgMTAgc2Vjb25kcyBmb3IgdGhlIGdw dSByZXNldCB0byBjb21wbGV0ZSB0byBhdm9pZCBoYW5naW5nCj4gICAJICogdXNlcnNwYWNlLiBJ ZiBpdCB0YWtlcyB0aGF0IGxvbmcgc29tZXRoaW5nIHJlYWxseSBiYWQgaXMgZ29pbmcgb24gYW5k Cj4gICAJICogd2Ugc2hvdWxkIHNpbXBseSB0cnkgdG8gYmFpbCBvdXQgYW5kIGZhaWwgYXMgZ3Jh Y2VmdWxseSBhcyBwb3NzaWJsZS4KPiAgIAkgKi8KPiAgIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVy cnVwdGlibGVfdGltZW91dChlcnJvci0+cmVzZXRfcXVldWUsCj4gLQkJCQkJICAgICAgIEVYSVRf Q09ORCwKPiArCQkJCQkgICAgICAgIWk5MTVfcmVjb3ZlcnlfcGVuZGluZyhlcnJvciksCj4gICAJ CQkJCSAgICAgICAxMCpIWik7Cj4gICAJaWYgKHJldCA9PSAwKSB7Cj4gICAJCURSTV9FUlJPUigi VGltZWQgb3V0IHdhaXRpbmcgZm9yIHRoZSBncHUgcmVzZXQgdG8gY29tcGxldGVcbiIpOwo+IEBA IC0xMzIsNyArMjAxLDYgQEAgaTkxNV9nZW1fd2FpdF9mb3JfZXJyb3Ioc3RydWN0IGk5MTVfZ3B1 X2Vycm9yICplcnJvcikKPiAgIAl9IGVsc2UgaWYgKHJldCA8IDApIHsKPiAgIAkJcmV0dXJuIHJl dDsKPiAgIAl9Cj4gLSN1bmRlZiBFWElUX0NPTkQKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQo+ IEBAIC0xNTIsNyArMjIwLDYgQEAgaW50IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAg IAo+IC0JV0FSTl9PTihpOTE1X3ZlcmlmeV9saXN0cyhkZXYpKTsKPiAgIAlyZXR1cm4gMDsKPiAg IH0KPiAgIAo+IEBAIC00NzYsOCArNTQzLDYgQEAgaW50IGk5MTVfZ2VtX29ial9wcmVwYXJlX3No bWVtX3JlYWQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkJcmV0ID0gaTkx NV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaiwgdHJ1ZSk7Cj4gICAJCWlmIChyZXQpCj4g ICAJCQlyZXR1cm4gcmV0Owo+IC0KPiAtCQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlKG9iaik7Cj4g ICAJfQo+ICAgCj4gICAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOwo+IEBA IC04OTMsOCArOTU4LDYgQEAgaTkxNV9nZW1fc2htZW1fcHdyaXRlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gICAJCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmosIGZh bHNlKTsKPiAgIAkJaWYgKHJldCkKPiAgIAkJCXJldHVybiByZXQ7Cj4gLQo+IC0JCWk5MTVfZ2Vt X29iamVjdF9yZXRpcmUob2JqKTsKPiAgIAl9Cj4gICAJLyogU2FtZSB0cmljayBhcHBsaWVzIHRv IGludmFsaWRhdGUgcGFydGlhbGx5IHdyaXR0ZW4gY2FjaGVsaW5lcyByZWFkCj4gICAJICogYmVm b3JlIHdyaXRpbmcuICovCj4gQEAgLTEwNzMsMjM1ICsxMTM2LDYgQEAgdW5sb2NrOgo+ICAgCXJl dHVybiByZXQ7Cj4gICB9Cj4gICAKPiAtaW50Cj4gLWk5MTVfZ2VtX2NoZWNrX3dlZGdlKHN0cnVj dCBpOTE1X2dwdV9lcnJvciAqZXJyb3IsCj4gLQkJICAgICBib29sIGludGVycnVwdGlibGUpCj4g LXsKPiAtCWlmIChpOTE1X3Jlc2V0X2luX3Byb2dyZXNzKGVycm9yKSkgewo+IC0JCS8qIE5vbi1p bnRlcnJ1cHRpYmxlIGNhbGxlcnMgY2FuJ3QgaGFuZGxlIC1FQUdBSU4sIGhlbmNlIHJldHVybgo+ IC0JCSAqIC1FSU8gdW5jb25kaXRpb25hbGx5IGZvciB0aGVzZS4gKi8KPiAtCQlpZiAoIWludGVy cnVwdGlibGUpCj4gLQkJCXJldHVybiAtRUlPOwo+IC0KPiAtCQkvKiBSZWNvdmVyeSBjb21wbGV0 ZSwgYnV0IHRoZSByZXNldCBmYWlsZWQgLi4uICovCj4gLQkJaWYgKGk5MTVfdGVybWluYWxseV93 ZWRnZWQoZXJyb3IpKQo+IC0JCQlyZXR1cm4gLUVJTzsKPiAtCj4gLQkJLyoKPiAtCQkgKiBDaGVj ayBpZiBHUFUgUmVzZXQgaXMgaW4gcHJvZ3Jlc3MgLSB3ZSBuZWVkIGludGVsX3JpbmdfYmVnaW4K PiAtCQkgKiB0byB3b3JrIHByb3Blcmx5IHRvIHJlaW5pdCB0aGUgaHcgc3RhdGUgd2hpbGUgdGhl IGdwdSBpcwo+IC0JCSAqIHN0aWxsIG1hcmtlZCBhcyByZXNldC1pbi1wcm9ncmVzcy4gSGFuZGxl IHRoaXMgd2l0aCBhIGZsYWcuCj4gLQkJICovCj4gLQkJaWYgKCFlcnJvci0+cmVsb2FkX2luX3Jl c2V0KQo+IC0JCQlyZXR1cm4gLUVBR0FJTjsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+ IC0KPiAtLyoKPiAtICogQ29tcGFyZSBzZXFubyBhZ2FpbnN0IG91dHN0YW5kaW5nIGxhenkgcmVx dWVzdC4gRW1pdCBhIHJlcXVlc3QgaWYgdGhleSBhcmUKPiAtICogZXF1YWwuCj4gLSAqLwo+IC1p bnQKPiAtaTkxNV9nZW1fY2hlY2tfb2xyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsIHUz MiBzZXFubykKPiAtewo+IC0JaW50IHJldDsKPiAtCj4gLQlCVUdfT04oIW11dGV4X2lzX2xvY2tl ZCgmcmluZy0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiAtCj4gLQlyZXQgPSAwOwo+IC0JaWYgKHNl cW5vID09IHJpbmctPm91dHN0YW5kaW5nX2xhenlfc2Vxbm8pCj4gLQkJcmV0ID0gaTkxNV9hZGRf cmVxdWVzdChyaW5nLCBOVUxMKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZCBmYWtlX2lycSh1bnNpZ25lZCBsb25nIGRhdGEpCj4gLXsKPiAtCXdha2VfdXBfcHJv Y2Vzcygoc3RydWN0IHRhc2tfc3RydWN0ICopZGF0YSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29s IG1pc3NlZF9pcnEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCSAgICAg ICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+IC17Cj4gLQlyZXR1cm4gdGVzdF9iaXQo cmluZy0+aWQsICZkZXZfcHJpdi0+Z3B1X2Vycm9yLm1pc3NlZF9pcnFfcmluZ3MpOwo+IC19Cj4g LQo+IC1zdGF0aWMgYm9vbCBjYW5fd2FpdF9ib29zdChzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2 YXRlICpmaWxlX3ByaXYpCj4gLXsKPiAtCWlmIChmaWxlX3ByaXYgPT0gTlVMTCkKPiAtCQlyZXR1 cm4gdHJ1ZTsKPiAtCj4gLQlyZXR1cm4gIWF0b21pY194Y2hnKCZmaWxlX3ByaXYtPnJwc193YWl0 X2Jvb3N0LCB0cnVlKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIF9fd2FpdF9zZXFubyAtIHdhaXQg dW50aWwgZXhlY3V0aW9uIG9mIHNlcW5vIGhhcyBmaW5pc2hlZAo+IC0gKiBAcmluZzogdGhlIHJp bmcgZXhwZWN0ZWQgdG8gcmVwb3J0IHNlcW5vCj4gLSAqIEBzZXFubzogZHVoIQo+IC0gKiBAcmVz ZXRfY291bnRlcjogcmVzZXQgc2VxdWVuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBzZXFu bwo+IC0gKiBAaW50ZXJydXB0aWJsZTogZG8gYW4gaW50ZXJydXB0aWJsZSB3YWl0IChub3JtYWxs eSB5ZXMpCj4gLSAqIEB0aW1lb3V0OiBpbiAtIGhvdyBsb25nIHRvIHdhaXQgKE5VTEwgZm9yZXZl cik7IG91dCAtIGhvdyBtdWNoIHRpbWUgcmVtYWluaW5nCj4gLSAqCj4gLSAqIE5vdGU6IEl0IGlz IG9mIHV0bW9zdCBpbXBvcnRhbmNlIHRoYXQgdGhlIHBhc3NlZCBpbiBzZXFubyBhbmQgcmVzZXRf Y291bnRlcgo+IC0gKiB2YWx1ZXMgaGF2ZSBiZWVuIHJlYWQgYnkgdGhlIGNhbGxlciBpbiBhbiBz bXAgc2FmZSBtYW5uZXIuIFdoZXJlIHJlYWQtc2lkZQo+IC0gKiBsb2NrcyBhcmUgaW52b2x2ZWQs IGl0IGlzIHN1ZmZpY2llbnQgdG8gcmVhZCB0aGUgcmVzZXRfY291bnRlciBiZWZvcmUKPiAtICog dW5sb2NraW5nIHRoZSBsb2NrIHRoYXQgcHJvdGVjdHMgdGhlIHNlcW5vLiBGb3IgbG9ja2xlc3Mg dHJpY2tzLCB0aGUKPiAtICogcmVzZXRfY291bnRlciBfbXVzdF8gYmUgcmVhZCBiZWZvcmUsIGFu ZCBhbiBhcHByb3ByaWF0ZSBzbXBfcm1iIG11c3QgYmUKPiAtICogaW5zZXJ0ZWQuCj4gLSAqCj4g LSAqIFJldHVybnMgMCBpZiB0aGUgc2Vxbm8gd2FzIGZvdW5kIHdpdGhpbiB0aGUgYWxsb3RlZCB0 aW1lLiBFbHNlIHJldHVybnMgdGhlCj4gLSAqIGVycm5vIHdpdGggcmVtYWluaW5nIHRpbWUgZmls bGVkIGluIHRpbWVvdXQgYXJndW1lbnQuCj4gLSAqLwo+IC1zdGF0aWMgaW50IF9fd2FpdF9zZXFu byhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLCB1MzIgc2Vxbm8sCj4gLQkJCXVuc2lnbmVk IHJlc2V0X2NvdW50ZXIsCj4gLQkJCWJvb2wgaW50ZXJydXB0aWJsZSwKPiAtCQkJczY0ICp0aW1l b3V0LAo+IC0JCQlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYpCj4gLXsK PiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0JY29uc3QgYm9vbCBp cnFfdGVzdF9pbl9wcm9ncmVzcyA9Cj4gLQkJQUNDRVNTX09OQ0UoZGV2X3ByaXYtPmdwdV9lcnJv ci50ZXN0X2lycV9yaW5ncykgJiBpbnRlbF9yaW5nX2ZsYWcocmluZyk7Cj4gLQlERUZJTkVfV0FJ VCh3YWl0KTsKPiAtCXVuc2lnbmVkIGxvbmcgdGltZW91dF9leHBpcmU7Cj4gLQlzNjQgYmVmb3Jl LCBub3c7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCVdBUk4oIWludGVsX2lycXNfZW5hYmxlZChkZXZf cHJpdiksICJJUlFzIGRpc2FibGVkIik7Cj4gLQo+IC0JaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHJp bmctPmdldF9zZXFubyhyaW5nLCB0cnVlKSwgc2Vxbm8pKQo+IC0JCXJldHVybiAwOwo+IC0KPiAt CXRpbWVvdXRfZXhwaXJlID0gdGltZW91dCA/IGppZmZpZXMgKyBuc2Vjc190b19qaWZmaWVzKCh1 NjQpKnRpbWVvdXQpIDogMDsKPiAtCj4gLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNiAm JiByaW5nLT5pZCA9PSBSQ1MgJiYgY2FuX3dhaXRfYm9vc3QoZmlsZV9wcml2KSkgewo+IC0JCWdl bjZfcnBzX2Jvb3N0KGRldl9wcml2KTsKPiAtCQlpZiAoZmlsZV9wcml2KQo+IC0JCQltb2RfZGVs YXllZF93b3JrKGRldl9wcml2LT53cSwKPiAtCQkJCQkgJmZpbGVfcHJpdi0+bW0uaWRsZV93b3Jr LAo+IC0JCQkJCSBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwo+IC0JfQo+IC0KPiAtCWlmICghaXJx X3Rlc3RfaW5fcHJvZ3Jlc3MgJiYgV0FSTl9PTighcmluZy0+aXJxX2dldChyaW5nKSkpCj4gLQkJ cmV0dXJuIC1FTk9ERVY7Cj4gLQo+IC0JLyogUmVjb3JkIGN1cnJlbnQgdGltZSBpbiBjYXNlIGlu dGVycnVwdGVkIGJ5IHNpZ25hbCwgb3Igd2VkZ2VkICovCj4gLQl0cmFjZV9pOTE1X2dlbV9yZXF1 ZXN0X3dhaXRfYmVnaW4ocmluZywgc2Vxbm8pOwo+IC0JYmVmb3JlID0ga3RpbWVfZ2V0X3Jhd19u cygpOwo+IC0JZm9yICg7Oykgewo+IC0JCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwo+IC0KPiAt CQlwcmVwYXJlX3RvX3dhaXQoJnJpbmctPmlycV9xdWV1ZSwgJndhaXQsCj4gLQkJCQlpbnRlcnJ1 cHRpYmxlID8gVEFTS19JTlRFUlJVUFRJQkxFIDogVEFTS19VTklOVEVSUlVQVElCTEUpOwo+IC0K PiAtCQkvKiBXZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYW55IGdwdSByZXNldCBoYXBwZW5lZCBp biBiZXR3ZWVuCj4gLQkJICogdGhlIGNhbGxlciBncmFiYmluZyB0aGUgc2Vxbm8gYW5kIG5vdyAu Li4gKi8KPiAtCQlpZiAocmVzZXRfY291bnRlciAhPSBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmdw dV9lcnJvci5yZXNldF9jb3VudGVyKSkgewo+IC0JCQkvKiAuLi4gYnV0IHVwZ3JhZGUgdGhlIC1F QUdBSU4gdG8gYW4gLUVJTyBpZiB0aGUgZ3B1Cj4gLQkJCSAqIGlzIHRydWVseSBnb25lLiAqLwo+ IC0JCQlyZXQgPSBpOTE1X2dlbV9jaGVja193ZWRnZSgmZGV2X3ByaXYtPmdwdV9lcnJvciwgaW50 ZXJydXB0aWJsZSk7Cj4gLQkJCWlmIChyZXQgPT0gMCkKPiAtCQkJCXJldCA9IC1FQUdBSU47Cj4g LQkJCWJyZWFrOwo+IC0JCX0KPiAtCj4gLQkJaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHJpbmctPmdl dF9zZXFubyhyaW5nLCBmYWxzZSksIHNlcW5vKSkgewo+IC0JCQlyZXQgPSAwOwo+IC0JCQlicmVh azsKPiAtCQl9Cj4gLQo+IC0JCWlmIChpbnRlcnJ1cHRpYmxlICYmIHNpZ25hbF9wZW5kaW5nKGN1 cnJlbnQpKSB7Cj4gLQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+ IC0KPiAtCQlpZiAodGltZW91dCAmJiB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXRfZXhw aXJlKSkgewo+IC0JCQlyZXQgPSAtRVRJTUU7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCj4gLQkJ dGltZXIuZnVuY3Rpb24gPSBOVUxMOwo+IC0JCWlmICh0aW1lb3V0IHx8IG1pc3NlZF9pcnEoZGV2 X3ByaXYsIHJpbmcpKSB7Cj4gLQkJCXVuc2lnbmVkIGxvbmcgZXhwaXJlOwo+IC0KPiAtCQkJc2V0 dXBfdGltZXJfb25fc3RhY2soJnRpbWVyLCBmYWtlX2lycSwgKHVuc2lnbmVkIGxvbmcpY3VycmVu dCk7Cj4gLQkJCWV4cGlyZSA9IG1pc3NlZF9pcnEoZGV2X3ByaXYsIHJpbmcpID8gamlmZmllcyAr IDEgOiB0aW1lb3V0X2V4cGlyZTsKPiAtCQkJbW9kX3RpbWVyKCZ0aW1lciwgZXhwaXJlKTsKPiAt CQl9Cj4gLQo+IC0JCWlvX3NjaGVkdWxlKCk7Cj4gLQo+IC0JCWlmICh0aW1lci5mdW5jdGlvbikg ewo+IC0JCQlkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5jKCZ0aW1lcik7Cj4gLQkJCWRlc3Ryb3lf dGltZXJfb25fc3RhY2soJnRpbWVyKTsKPiAtCQl9Cj4gLQl9Cj4gLQlub3cgPSBrdGltZV9nZXRf cmF3X25zKCk7Cj4gLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfZW5kKHJpbmcsIHNlcW5v KTsKPiAtCj4gLQlpZiAoIWlycV90ZXN0X2luX3Byb2dyZXNzKQo+IC0JCXJpbmctPmlycV9wdXQo cmluZyk7Cj4gLQo+IC0JZmluaXNoX3dhaXQoJnJpbmctPmlycV9xdWV1ZSwgJndhaXQpOwo+IC0K PiAtCWlmICh0aW1lb3V0KSB7Cj4gLQkJczY0IHRyZXMgPSAqdGltZW91dCAtIChub3cgLSBiZWZv cmUpOwo+IC0KPiAtCQkqdGltZW91dCA9IHRyZXMgPCAwID8gMCA6IHRyZXM7Cj4gLQl9Cj4gLQo+ IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIFdhaXRzIGZvciBhIHNlcXVlbmNl IG51bWJlciB0byBiZSBzaWduYWxlZCwgYW5kIGNsZWFucyB1cCB0aGUKPiAtICogcmVxdWVzdCBh bmQgb2JqZWN0IGxpc3RzIGFwcHJvcHJpYXRlbHkgZm9yIHRoYXQgZXZlbnQuCj4gLSAqLwo+IC1p bnQKPiAtaTkxNV93YWl0X3NlcW5vKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsIHVpbnQz Ml90IHNlcW5vKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owo+ IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK PiAtCWJvb2wgaW50ZXJydXB0aWJsZSA9IGRldl9wcml2LT5tbS5pbnRlcnJ1cHRpYmxlOwo+IC0J aW50IHJldDsKPiAtCj4gLQlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0 ZXgpKTsKPiAtCUJVR19PTihzZXFubyA9PSAwKTsKPiAtCj4gLQlyZXQgPSBpOTE1X2dlbV9jaGVj a193ZWRnZSgmZGV2X3ByaXYtPmdwdV9lcnJvciwgaW50ZXJydXB0aWJsZSk7Cj4gLQlpZiAocmV0 KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JcmV0ID0gaTkxNV9nZW1fY2hlY2tfb2xyKHJpbmcs IHNlcW5vKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlyZXR1cm4gX193 YWl0X3NlcW5vKHJpbmcsIHNlcW5vLAo+IC0JCQkgICAgYXRvbWljX3JlYWQoJmRldl9wcml2LT5n cHVfZXJyb3IucmVzZXRfY291bnRlciksCj4gLQkJCSAgICBpbnRlcnJ1cHRpYmxlLCBOVUxMLCBO VUxMKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludAo+IC1pOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5k ZXJpbmdfX3RhaWwoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkJCSAgICAg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAtewo+IC0JaWYgKCFvYmotPmFjdGl2ZSkK PiAtCQlyZXR1cm4gMDsKPiAtCj4gLQkvKiBNYW51YWxseSBtYW5hZ2UgdGhlIHdyaXRlIGZsdXNo IGFzIHdlIG1heSBoYXZlIG5vdCB5ZXQKPiAtCSAqIHJldGlyZWQgdGhlIGJ1ZmZlci4KPiAtCSAq Cj4gLQkgKiBOb3RlIHRoYXQgdGhlIGxhc3Rfd3JpdGVfc2Vxbm8gaXMgYWx3YXlzIHRoZSBlYXJs aWVyIG9mCj4gLQkgKiB0aGUgdHdvIChyZWFkL3dyaXRlKSBzZXFubywgc28gaWYgd2UgaGF2ZWQg c3VjY2Vzc2Z1bGx5IHdhaXRlZCwKPiAtCSAqIHdlIGtub3cgd2UgaGF2ZSBwYXNzZWQgdGhlIGxh c3Qgd3JpdGUuCj4gLQkgKi8KPiAtCW9iai0+bGFzdF93cml0ZV9zZXFubyA9IDA7Cj4gLQo+IC0J cmV0dXJuIDA7Cj4gLX0KPiAtCj4gICAvKioKPiAgICAqIEVuc3VyZXMgdGhhdCBhbGwgcmVuZGVy aW5nIHRvIHRoZSBvYmplY3QgaGFzIGNvbXBsZXRlZCBhbmQgdGhlIG9iamVjdCBpcwo+ICAgICog c2FmZSB0byB1bmJpbmQgZnJvbSB0aGUgR1RUIG9yIGFjY2VzcyBmcm9tIHRoZSBDUFUuCj4gQEAg LTEzMTAsMTkgKzExNDQsMzAgQEAgc3RhdGljIF9fbXVzdF9jaGVjayBpbnQKPiAgIGk5MTVfZ2Vt X29iamVjdF93YWl0X3JlbmRlcmluZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ ICAgCQkJICAgICAgIGJvb2wgcmVhZG9ubHkpCj4gICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nID0gb2JqLT5yaW5nOwo+IC0JdTMyIHNlcW5vOwo+IC0JaW50IHJldDsKPiArCWlu dCBpLCByZXQ7Cj4gICAKPiAtCXNlcW5vID0gcmVhZG9ubHkgPyBvYmotPmxhc3Rfd3JpdGVfc2Vx bm8gOiBvYmotPmxhc3RfcmVhZF9zZXFubzsKPiAtCWlmIChzZXFubyA9PSAwKQo+ICsJaWYgKCFv YmotPmFjdGl2ZSkKPiAgIAkJcmV0dXJuIDA7Cj4gICAKPiAtCXJldCA9IGk5MTVfd2FpdF9zZXFu byhyaW5nLCBzZXFubyk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlpZiAocmVh ZG9ubHkpIHsKPiArCQlpZiAob2JqLT5sYXN0X3dyaXRlLnJlcXVlc3QpIHsKPiArCQkJcmV0ID0g aTkxNV9yZXF1ZXN0X3dhaXQob2JqLT5sYXN0X3dyaXRlLnJlcXVlc3QpOwo+ICsJCQlpZiAocmV0 KQo+ICsJCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCWZvciAoaSA9IDA7 IGkgPCBJOTE1X05VTV9FTkdJTkVTOyBpKyspIHsKPiArCQkJaWYgKG9iai0+bGFzdF9yZWFkW2ld LnJlcXVlc3QgPT0gTlVMTCkKPiArCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJcmV0ID0gaTkxNV9y ZXF1ZXN0X3dhaXQob2JqLT5sYXN0X3JlYWRbaV0ucmVxdWVzdCk7Cj4gKwkJCWlmIChyZXQpCj4g KwkJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCX0KPiAgIAo+IC0JcmV0dXJuIGk5MTVfZ2VtX29i amVjdF93YWl0X3JlbmRlcmluZ19fdGFpbChvYmosIHJpbmcpOwo+ICsJaTkxNV9nZW1fb2JqZWN0 X3JldGlyZShvYmopOwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAgIC8qIEEgbm9uYmxvY2tp bmcgdmFyaWFudCBvZiB0aGUgYWJvdmUgd2FpdC4gVGhpcyBpcyBhIGhpZ2hseSBkYW5nZXJvdXMg cm91dGluZQo+IEBAIC0xMzM1LDM0ICsxMTgwLDUxIEBAIGk5MTVfZ2VtX29iamVjdF93YWl0X3Jl bmRlcmluZ19fbm9uYmxvY2tpbmcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAg IHsKPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKPiAgIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9IG9iai0+cmluZzsKPiAtCXVuc2lnbmVkIHJlc2V0 X2NvdW50ZXI7Cj4gLQl1MzIgc2Vxbm87Cj4gLQlpbnQgcmV0Owo+ICsJc3RydWN0IGk5MTVfZ2Vt X3JlcXVlc3QgKnJxW0k5MTVfTlVNX0VOR0lORVNdID0ge307Cj4gKwlpbnQgaSwgbiwgcmV0Owo+ ICAgCj4gICAJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4KSk7Cj4g ICAJQlVHX09OKCFkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZSk7Cj4gICAKPiAtCXNlcW5vID0g cmVhZG9ubHkgPyBvYmotPmxhc3Rfd3JpdGVfc2Vxbm8gOiBvYmotPmxhc3RfcmVhZF9zZXFubzsK PiAtCWlmIChzZXFubyA9PSAwKQo+ICsJbj0gMDsKPiArCWlmIChyZWFkb25seSkgewo+ICsJCWlm IChvYmotPmxhc3Rfd3JpdGUucmVxdWVzdCkgewo+ICsJCQlycVtuXSA9IGk5MTVfcmVxdWVzdF9n ZXRfYnJlYWRjcnVtYihvYmotPmxhc3Rfd3JpdGUucmVxdWVzdCk7Cj4gKwkJCWlmIChJU19FUlIo cnFbbl0pKQo+ICsJCQkJcmV0dXJuIFBUUl9FUlIocnFbbl0pOwo+ICsJCQluKys7Cj4gKwkJfQo+ ICsJfSBlbHNlIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fRU5HSU5FUzsgaSsrKSB7 Cj4gKwkJCWlmIChvYmotPmxhc3RfcmVhZFtpXS5yZXF1ZXN0ID09IE5VTEwpCj4gKwkJCQljb250 aW51ZTsKPiArCj4gKwkJCXJxW25dID0gaTkxNV9yZXF1ZXN0X2dldF9icmVhZGNydW1iKG9iai0+ bGFzdF9yZWFkW2ldLnJlcXVlc3QpOwo+ICsJCQlpZiAoSVNfRVJSKHJxW25dKSkgewo+ICsJCQkJ cmV0ID0gUFRSX0VSUihycVtuXSk7Cj4gKwkJCQlnb3RvIG91dDsKPiArCQkJfQo+ICsJCQluKys7 Cj4gKwkJfQo+ICsJfQo+ICsJaWYgKG4gPT0gMCkKPiAgIAkJcmV0dXJuIDA7Cj4gICAKPiAtCXJl dCA9IGk5MTVfZ2VtX2NoZWNrX3dlZGdlKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLCB0cnVlKTsKPiAt CWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwo+ICAgCj4gLQlyZXQgPSBpOTE1X2dlbV9jaGVja19vbHIocmluZywgc2Vxbm8pOwo+ IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJZm9yIChpID0gMDsgaSA8IG47IGkrKykg ewo+ICsJCXJldCA9IF9faTkxNV9yZXF1ZXN0X3dhaXQocnFbaV0sIHRydWUsIE5VTEwsIGZpbGVf cHJpdik7Cj4gKwkJaWYgKHJldCkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gICAKPiAtCXJlc2V0X2Nv dW50ZXIgPSBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmdwdV9lcnJvci5yZXNldF9jb3VudGVyKTsK PiAtCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IC0JcmV0ID0gX193YWl0X3Nl cW5vKHJpbmcsIHNlcW5vLCByZXNldF9jb3VudGVyLCB0cnVlLCBOVUxMLCBmaWxlX3ByaXYpOwo+ ICAgCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0 dXJuIHJldDsKPiAgIAo+IC0JcmV0dXJuIGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZ19f dGFpbChvYmosIHJpbmcpOwo+ICtvdXQ6Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQo+ICsJ CWk5MTVfcmVxdWVzdF9wdXQocnFbaV0pOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gICB9Cj4gICAK PiAgIC8qKgo+IEBAIC0yMTY1LDQ1OSArMjAyNywxMTUgQEAgaTkxNV9nZW1fb2JqZWN0X2dldF9w YWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCXJldHVybiAwOwo+ICAg fQo+ICAgCj4gLXN0YXRpYyB2b2lkCj4gLWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQkgICAgICAgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZykKPiAraW50IGk5MTVfZ2VtX3NldF9zZXFubyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB1MzIgc2Vxbm8pCj4gICB7Cj4gLQl1MzIgc2Vxbm8gPSBpbnRlbF9yaW5nX2dl dF9zZXFubyhyaW5nKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWduYWxsZXIsICp3 YWl0ZXI7Cj4gKwlpbnQgcmV0LCBpLCBqOwo+ICAgCj4gLQlCVUdfT04ocmluZyA9PSBOVUxMKTsK PiAtCWlmIChvYmotPnJpbmcgIT0gcmluZyAmJiBvYmotPmxhc3Rfd3JpdGVfc2Vxbm8pIHsKPiAt CQkvKiBLZWVwIHRoZSBzZXFubyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCByaW5nICovCj4gLQkJ b2JqLT5sYXN0X3dyaXRlX3NlcW5vID0gc2Vxbm87Cj4gLQl9Cj4gLQlvYmotPnJpbmcgPSByaW5n Owo+ICsJaWYgKHNlcW5vID09IDApCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gICAKPiAtCS8qIEFk ZCBhIHJlZmVyZW5jZSBpZiB3ZSdyZSBuZXdseSBlbnRlcmluZyB0aGUgYWN0aXZlIGxpc3QuICov Cj4gLQlpZiAoIW9iai0+YWN0aXZlKSB7Cj4gLQkJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKCZv YmotPmJhc2UpOwo+IC0JCW9iai0+YWN0aXZlID0gMTsKPiAtCX0KPiArCWlmIChzZXFubyA9PSBk ZXZfcHJpdi0+bmV4dF9zZXFubykKPiArCQlyZXR1cm4gMDsKPiAgIAo+IC0JbGlzdF9tb3ZlX3Rh aWwoJm9iai0+cmluZ19saXN0LCAmcmluZy0+YWN0aXZlX2xpc3QpOwo+ICsJZG8gewo+ICsJCS8q IEZsdXNoIHRoZSBicmVhZGNydW1icyAqLwo+ICsJCXJldCA9IGk5MTVfZ3B1X2lkbGUoZGV2KTsK PiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQlvYmotPmxhc3RfcmVhZF9z ZXFubyA9IHNlcW5vOwo+IC19Cj4gKwkJaWYgKCFpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2 KSkKPiArCQkJcmV0dXJuIC1FSU87Cj4gICAKPiAtdm9pZCBpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2 ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAtCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nKQo+IC17Cj4gLQlsaXN0X21vdmVfdGFpbCgmdm1hLT5tbV9saXN0LCAmdm1hLT52bS0+ YWN0aXZlX2xpc3QpOwo+IC0JcmV0dXJuIGk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZSh2 bWEtPm9iaiwgcmluZyk7Cj4gLX0KPiArCQkvKiBVcGRhdGUgYWxsIHNlbWFwaG9yZXMgdG8gdGhl IGN1cnJlbnQgdmFsdWUgKi8KPiArCQlmb3JfZWFjaF9lbmdpbmUoc2lnbmFsbGVyLCB0b19pOTE1 KGRldiksIGkpIHsKPiArCQkJc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxOwo+ICAgCj4gLXN0 YXRpYyB2b2lkCj4gLWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IG9iai0+YmFzZS5kZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm07Cj4gLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiArCQkJaWYgKCFzaWdu YWxsZXItPnNlbWFwaG9yZS5zaWduYWwpCj4gKwkJCQljb250aW51ZTsKPiAgIAo+IC0JQlVHX09O KG9iai0+YmFzZS53cml0ZV9kb21haW4gJiB+STkxNV9HRU1fR1BVX0RPTUFJTlMpOwo+IC0JQlVH X09OKCFvYmotPmFjdGl2ZSk7Cj4gKwkJCXJxID0gaW50ZWxfZW5naW5lX2FsbG9jX3JlcXVlc3Qo c2lnbmFsbGVyLAo+ICsJCQkJCQkJc2lnbmFsbGVyLT5kZWZhdWx0X2NvbnRleHQpOwo+ICsJCQlp ZiAoSVNfRVJSKHJxKSkKPiArCQkJCXJldHVybiBQVFJfRVJSKHJxKTsKPiAgIAo+IC0JbGlzdF9m b3JfZWFjaF9lbnRyeSh2bSwgJmRldl9wcml2LT52bV9saXN0LCBnbG9iYWxfbGluaykgewo+IC0J CXZtYSA9IGk5MTVfZ2VtX29ial90b192bWEob2JqLCB2bSk7Cj4gLQkJaWYgKHZtYSAmJiAhbGlz dF9lbXB0eSgmdm1hLT5tbV9saXN0KSkKPiAtCQkJbGlzdF9tb3ZlX3RhaWwoJnZtYS0+bW1fbGlz dCwgJnZtLT5pbmFjdGl2ZV9saXN0KTsKPiAtCX0KPiArCQkJZm9yX2VhY2hfZW5naW5lKHdhaXRl ciwgdG9faTkxNShkZXYpLCBqKSB7Cj4gKwkJCQlpZiAoc2lnbmFsbGVyID09IHdhaXRlcikKPiAr CQkJCQljb250aW51ZTsKPiAgIAo+IC0JaW50ZWxfZmJfb2JqX2ZsdXNoKG9iaiwgdHJ1ZSk7Cj4g KwkJCQlpZiAoIXdhaXRlci0+c2VtYXBob3JlLndhaXQpCj4gKwkJCQkJY29udGludWU7Cj4gICAK PiAtCWxpc3RfZGVsX2luaXQoJm9iai0+cmluZ19saXN0KTsKPiAtCW9iai0+cmluZyA9IE5VTEw7 Cj4gKwkJCQlyZXQgPSBpOTE1X3JlcXVlc3RfZW1pdF9zZW1hcGhvcmUocnEsIHdhaXRlci0+aWQp Owo+ICsJCQkJaWYgKHJldCkKPiArCQkJCQlicmVhazsKPiArCQkJfQo+ICAgCj4gLQlvYmotPmxh c3RfcmVhZF9zZXFubyA9IDA7Cj4gLQlvYmotPmxhc3Rfd3JpdGVfc2Vxbm8gPSAwOwo+IC0Jb2Jq LT5iYXNlLndyaXRlX2RvbWFpbiA9IDA7Cj4gKwkJCWlmIChyZXQgPT0gMCkKPiArCQkJCXJldCA9 IGk5MTVfcmVxdWVzdF9jb21taXQocnEpOwo+ICsJCQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKPiAr CQkJaWYgKHJldCkKPiArCQkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICAgCj4gLQlvYmotPmxhc3Rf ZmVuY2VkX3NlcW5vID0gMDsKPiArCQkvKiBXZSBjYW4gb25seSByb2xsIHNlcW5vIGZvcndhcmRz IGFjcm9zcyBhIHdyYXBhcm91bmQuCj4gKwkJICogVGhpcyBzaGlwIGlzIG5vdCBmb3IgdHVybmlu ZyEKPiArCQkgKi8KPiArCQlpZiAoIV9faTkxNV9zZXFub19wYXNzZWQoZGV2X3ByaXYtPm5leHRf c2Vxbm8sIHNlcW5vKSkKPiArCQkJYnJlYWs7Cj4gICAKPiAtCW9iai0+YWN0aXZlID0gMDsKPiAt CWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwo+ICsJCWRldl9wcml2LT5u ZXh0X3NlcW5vICs9IDB4NDAwMDAwMDA7Cj4gKwl9d2hpbGUgKDEpOwo+ICAgCj4gLQlXQVJOX09O KGk5MTVfdmVyaWZ5X2xpc3RzKGRldikpOwo+ICsJZGV2X3ByaXYtPm5leHRfc2Vxbm8gPSBzZXFu bzsKPiArCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkCj4gLWk5MTVfZ2VtX29i amVjdF9yZXRpcmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiArdm9pZCBpOTE1 X2dlbV9yZXN0b3JlX2ZlbmNlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgewo+IC0Jc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9IG9iai0+cmluZzsKPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlpbnQgaTsKPiAgIAo+ IC0JaWYgKHJpbmcgPT0gTlVMTCkKPiAtCQlyZXR1cm47Cj4gKwlmb3IgKGkgPSAwOyBpIDwgZGV2 X3ByaXYtPm51bV9mZW5jZV9yZWdzOyBpKyspIHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2Vf cmVnICpyZWcgPSAmZGV2X3ByaXYtPmZlbmNlX3JlZ3NbaV07Cj4gICAKPiAtCWlmIChpOTE1X3Nl cW5vX3Bhc3NlZChyaW5nLT5nZXRfc2Vxbm8ocmluZywgdHJ1ZSksCj4gLQkJCSAgICAgIG9iai0+ bGFzdF9yZWFkX3NlcW5vKSkKPiAtCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShv YmopOwo+ICsJCS8qCj4gKwkJICogQ29tbWl0IGRlbGF5ZWQgdGlsaW5nIGNoYW5nZXMgaWYgd2Ug aGF2ZSBhbiBvYmplY3Qgc3RpbGwKPiArCQkgKiBhdHRhY2hlZCB0byB0aGUgZmVuY2UsIG90aGVy d2lzZSBqdXN0IGNsZWFyIHRoZSBmZW5jZS4KPiArCQkgKi8KPiArCQlpZiAocmVnLT5vYmopIHsK PiArCQkJaTkxNV9nZW1fb2JqZWN0X3VwZGF0ZV9mZW5jZShyZWctPm9iaiwgcmVnLAo+ICsJCQkJ CQkgICAgIHJlZy0+b2JqLT50aWxpbmdfbW9kZSk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJaTkxNV9n ZW1fd3JpdGVfZmVuY2UoZGV2LCBpLCBOVUxMKTsKPiArCQl9Cj4gKwl9Cj4gICB9Cj4gICAKPiAt c3RhdGljIGludAo+IC1pOTE1X2dlbV9pbml0X3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHUzMiBzZXFubykKPiArdm9pZCBpOTE1X2dlbV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+IC0JaW50IHJldCwg aSwgajsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCWludCBpOwo+ICAg Cj4gLQkvKiBDYXJlZnVsbHkgcmV0aXJlIGFsbCByZXF1ZXN0cyB3aXRob3V0IHdyaXRpbmcgdG8g dGhlIHJpbmdzICovCj4gLQlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2LCBpKSB7Cj4gLQkJ cmV0ID0gaW50ZWxfcmluZ19pZGxlKHJpbmcpOwo+IC0JCWlmIChyZXQpCj4gLQkJCXJldHVybiBy ZXQ7Cj4gLQl9Cj4gLQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2KTsKPiArCWZvcl9lYWNo X2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpKSB7Cj4gKwkJLyogQ2xlYXJpbmcgdGhlIHJlYWQg bGlzdCB3aWxsIGFsc28gY2xlYXIgdGhlIHdyaXRlCj4gKwkJICogYW5kIGZlbmNlIGxpc3RzLCAz IGJpcmRzIHdpdGggb25lIHN0b25lLgo+ICsJCSAqLwo+ICsJCXdoaWxlICghbGlzdF9lbXB0eSgm ZW5naW5lLT5yZWFkX2xpc3QpKSB7Cj4gKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv Ymo7Cj4gKwo+ICsJCQlvYmogPSBsaXN0X2ZpcnN0X2VudHJ5KCZlbmdpbmUtPnJlYWRfbGlzdCwK PiArCQkJCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCj4gKwkJCQkJICAgICAg IGxhc3RfcmVhZFtpXS5lbmdpbmVfbGlzdCk7Cj4gICAKPiAtCS8qIEZpbmFsbHkgcmVzZXQgaHcg c3RhdGUgKi8KPiAtCWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3ByaXYsIGkpIHsKPiAtCQlpbnRl bF9yaW5nX2luaXRfc2Vxbm8ocmluZywgc2Vxbm8pOwo+ICsJCQlpOTE1X2dlbV9vYmplY3RfcmV0 aXJlX19yZWFkKG9iaiwgZW5naW5lKTsKPiArCQl9Cj4gICAKPiAtCQlmb3IgKGogPSAwOyBqIDwg QVJSQVlfU0laRShyaW5nLT5zZW1hcGhvcmUuc3luY19zZXFubyk7IGorKykKPiAtCQkJcmluZy0+ c2VtYXBob3JlLnN5bmNfc2Vxbm9bal0gPSAwOwo+ICsJCWludGVsX2VuZ2luZV9yZXNldChlbmdp bmUpOwo+ICAgCX0KPiAgIAo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLWludCBpOTE1X2dlbV9z ZXRfc2Vxbm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHNlcW5vKQo+IC17Cj4gLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0JaW50 IHJldDsKPiAtCj4gLQlpZiAoc2Vxbm8gPT0gMCkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4g LQkvKiBIV1MgcGFnZSBuZWVkcyB0byBiZSBzZXQgbGVzcyB0aGFuIHdoYXQgd2UKPiAtCSAqIHdp bGwgaW5qZWN0IHRvIHJpbmcKPiAtCSAqLwo+IC0JcmV0ID0gaTkxNV9nZW1faW5pdF9zZXFubyhk ZXYsIHNlcW5vIC0gMSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JLyog Q2FyZWZ1bGx5IHNldCB0aGUgbGFzdF9zZXFubyB2YWx1ZSBzbyB0aGF0IHdyYXAKPiAtCSAqIGRl dGVjdGlvbiBzdGlsbCB3b3Jrcwo+IC0JICovCj4gLQlkZXZfcHJpdi0+bmV4dF9zZXFubyA9IHNl cW5vOwo+IC0JZGV2X3ByaXYtPmxhc3Rfc2Vxbm8gPSBzZXFubyAtIDE7Cj4gLQlpZiAoZGV2X3By aXYtPmxhc3Rfc2Vxbm8gPT0gMCkKPiAtCQlkZXZfcHJpdi0+bGFzdF9zZXFuby0tOwo+IC0KPiAt CXJldHVybiAwOwo+IC19Cj4gLQo+IC1pbnQKPiAtaTkxNV9nZW1fZ2V0X3NlcW5vKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHUzMiAqc2Vxbm8pCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQo+IC0JLyogcmVzZXJ2ZSAwIGZv ciBub24tc2Vxbm8gKi8KPiAtCWlmIChkZXZfcHJpdi0+bmV4dF9zZXFubyA9PSAwKSB7Cj4gLQkJ aW50IHJldCA9IGk5MTVfZ2VtX2luaXRfc2Vxbm8oZGV2LCAwKTsKPiAtCQlpZiAocmV0KQo+IC0J CQlyZXR1cm4gcmV0Owo+IC0KPiAtCQlkZXZfcHJpdi0+bmV4dF9zZXFubyA9IDE7Cj4gLQl9Cj4g LQo+IC0JKnNlcW5vID0gZGV2X3ByaXYtPmxhc3Rfc2Vxbm8gPSBkZXZfcHJpdi0+bmV4dF9zZXFu bysrOwo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLWludCBfX2k5MTVfYWRkX3JlcXVlc3Qoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAtCQkgICAgICAgc3RydWN0IGRybV9maWxlICpm aWxlLAo+IC0JCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCSAg ICAgICB1MzIgKm91dF9zZXFubykKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxdWVzdDsKPiAtCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmOwo+ IC0JdTMyIHJlcXVlc3RfcmluZ19wb3NpdGlvbiwgcmVxdWVzdF9zdGFydDsKPiAtCWludCByZXQ7 Cj4gLQo+IC0JcmVxdWVzdCA9IHJpbmctPnByZWFsbG9jYXRlZF9sYXp5X3JlcXVlc3Q7Cj4gLQlp ZiAoV0FSTl9PTihyZXF1ZXN0ID09IE5VTEwpKQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAt CWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpIHsKPiAtCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y3R4ID0gcmVxdWVzdC0+Y3R4Owo+IC0JCXJpbmdidWYgPSBjdHgtPmVuZ2luZVtyaW5nLT5pZF0u cmluZ2J1ZjsKPiAtCX0gZWxzZQo+IC0JCXJpbmdidWYgPSByaW5nLT5idWZmZXI7Cj4gLQo+IC0J cmVxdWVzdF9zdGFydCA9IGludGVsX3JpbmdfZ2V0X3RhaWwocmluZ2J1Zik7Cj4gLQkvKgo+IC0J ICogRW1pdCBhbnkgb3V0c3RhbmRpbmcgZmx1c2hlcyAtIGV4ZWNidWYgY2FuIGZhaWwgdG8gZW1p dCB0aGUgZmx1c2gKPiAtCSAqIGFmdGVyIGhhdmluZyBlbWl0dGVkIHRoZSBiYXRjaGJ1ZmZlciBj b21tYW5kLiBIZW5jZSB3ZSBuZWVkIHRvIGZpeAo+IC0JICogdGhpbmdzIHVwIHNpbWlsYXIgdG8g ZW1pdHRpbmcgdGhlIGxhenkgcmVxdWVzdC4gVGhlIGRpZmZlcmVuY2UgaGVyZQo+IC0JICogaXMg dGhhdCB0aGUgZmx1c2ggX211c3RfIGhhcHBlbiBiZWZvcmUgdGhlIG5leHQgcmVxdWVzdCwgbm8g bWF0dGVyCj4gLQkgKiB3aGF0Lgo+IC0JICovCj4gLQlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3Rz KSB7Cj4gLQkJcmV0ID0gbG9naWNhbF9yaW5nX2ZsdXNoX2FsbF9jYWNoZXMocmluZ2J1Zik7Cj4g LQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAtCX0gZWxzZSB7Cj4gLQkJcmV0ID0gaW50 ZWxfcmluZ19mbHVzaF9hbGxfY2FjaGVzKHJpbmcpOwo+IC0JCWlmIChyZXQpCj4gLQkJCXJldHVy biByZXQ7Cj4gLQl9Cj4gLQo+IC0JLyogUmVjb3JkIHRoZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQg b2YgdGhlIHJlcXVlc3Qgc28gdGhhdAo+IC0JICogc2hvdWxkIHdlIGRldGVjdCB0aGUgdXBkYXRl ZCBzZXFubyBwYXJ0LXdheSB0aHJvdWdoIHRoZQo+IC0JICogR1BVIHByb2Nlc3NpbmcgdGhlIHJl cXVlc3QsIHdlIG5ldmVyIG92ZXItZXN0aW1hdGUgdGhlCj4gLQkgKiBwb3NpdGlvbiBvZiB0aGUg aGVhZC4KPiAtCSAqLwo+IC0JcmVxdWVzdF9yaW5nX3Bvc2l0aW9uID0gaW50ZWxfcmluZ19nZXRf dGFpbChyaW5nYnVmKTsKPiAtCj4gLQlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKSB7Cj4gLQkJ cmV0ID0gcmluZy0+ZW1pdF9yZXF1ZXN0KHJpbmdidWYpOwo+IC0JCWlmIChyZXQpCj4gLQkJCXJl dHVybiByZXQ7Cj4gLQl9IGVsc2Ugewo+IC0JCXJldCA9IHJpbmctPmFkZF9yZXF1ZXN0KHJpbmcp Owo+IC0JCWlmIChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JcmVxdWVzdC0+ c2Vxbm8gPSBpbnRlbF9yaW5nX2dldF9zZXFubyhyaW5nKTsKPiAtCXJlcXVlc3QtPnJpbmcgPSBy aW5nOwo+IC0JcmVxdWVzdC0+aGVhZCA9IHJlcXVlc3Rfc3RhcnQ7Cj4gLQlyZXF1ZXN0LT50YWls ID0gcmVxdWVzdF9yaW5nX3Bvc2l0aW9uOwo+IC0KPiAtCS8qIFdoaWxzdCB0aGlzIHJlcXVlc3Qg ZXhpc3RzLCBiYXRjaF9vYmogd2lsbCBiZSBvbiB0aGUKPiAtCSAqIGFjdGl2ZV9saXN0LCBhbmQg c28gd2lsbCBob2xkIHRoZSBhY3RpdmUgcmVmZXJlbmNlLiBPbmx5IHdoZW4gdGhpcwo+IC0JICog cmVxdWVzdCBpcyByZXRpcmVkIHdpbGwgdGhlIHRoZSBiYXRjaF9vYmogYmUgbW92ZWQgb250byB0 aGUKPiAtCSAqIGluYWN0aXZlX2xpc3QgYW5kIGxvc2UgaXRzIGFjdGl2ZSByZWZlcmVuY2UuIEhl bmNlIHdlIGRvIG5vdCBuZWVkCj4gLQkgKiB0byBleHBsaWNpdGx5IGhvbGQgYW5vdGhlciByZWZl cmVuY2UgaGVyZS4KPiAtCSAqLwo+IC0JcmVxdWVzdC0+YmF0Y2hfb2JqID0gb2JqOwo+IC0KPiAt CWlmICghaTkxNS5lbmFibGVfZXhlY2xpc3RzKSB7Cj4gLQkJLyogSG9sZCBhIHJlZmVyZW5jZSB0 byB0aGUgY3VycmVudCBjb250ZXh0IHNvIHRoYXQgd2UgY2FuIGluc3BlY3QKPiAtCQkgKiBpdCBs YXRlciBpbiBjYXNlIGEgaGFuZ2NoZWNrIGVycm9yIGV2ZW50IGZpcmVzLgo+IC0JCSAqLwo+IC0J CXJlcXVlc3QtPmN0eCA9IHJpbmctPmxhc3RfY29udGV4dDsKPiAtCQlpZiAocmVxdWVzdC0+Y3R4 KQo+IC0JCQlpOTE1X2dlbV9jb250ZXh0X3JlZmVyZW5jZShyZXF1ZXN0LT5jdHgpOwo+IC0JfQo+ IC0KPiAtCXJlcXVlc3QtPmVtaXR0ZWRfamlmZmllcyA9IGppZmZpZXM7Cj4gLQlsaXN0X2FkZF90 YWlsKCZyZXF1ZXN0LT5saXN0LCAmcmluZy0+cmVxdWVzdF9saXN0KTsKPiAtCXJlcXVlc3QtPmZp bGVfcHJpdiA9IE5VTEw7Cj4gLQo+IC0JaWYgKGZpbGUpIHsKPiAtCQlzdHJ1Y3QgZHJtX2k5MTVf ZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKPiAtCj4gLQkJc3Bp bl9sb2NrKCZmaWxlX3ByaXYtPm1tLmxvY2spOwo+IC0JCXJlcXVlc3QtPmZpbGVfcHJpdiA9IGZp bGVfcHJpdjsKPiAtCQlsaXN0X2FkZF90YWlsKCZyZXF1ZXN0LT5jbGllbnRfbGlzdCwKPiAtCQkJ ICAgICAgJmZpbGVfcHJpdi0+bW0ucmVxdWVzdF9saXN0KTsKPiAtCQlzcGluX3VubG9jaygmZmls ZV9wcml2LT5tbS5sb2NrKTsKPiAtCX0KPiAtCj4gLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X2Fk ZChyaW5nLCByZXF1ZXN0LT5zZXFubyk7Cj4gLQlyaW5nLT5vdXRzdGFuZGluZ19sYXp5X3NlcW5v ID0gMDsKPiAtCXJpbmctPnByZWFsbG9jYXRlZF9sYXp5X3JlcXVlc3QgPSBOVUxMOwo+IC0KPiAt CWlmICghZGV2X3ByaXYtPnVtcy5tbV9zdXNwZW5kZWQpIHsKPiAtCQlpOTE1X3F1ZXVlX2hhbmdj aGVjayhyaW5nLT5kZXYpOwo+IC0KPiAtCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldl9w cml2LT5tbS5pZGxlX3dvcmspOwo+IC0JCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXZfcHJpdi0+d3Es Cj4gLQkJCQkgICAmZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrLAo+IC0JCQkJICAgcm91bmRfamlm Zmllc191cF9yZWxhdGl2ZShIWikpOwo+IC0JCWludGVsX21hcmtfYnVzeShkZXZfcHJpdi0+ZGV2 KTsKPiAtCX0KPiAtCj4gLQlpZiAob3V0X3NlcW5vKQo+IC0JCSpvdXRfc2Vxbm8gPSByZXF1ZXN0 LT5zZXFubzsKPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHZvaWQKPiAt aTkxNV9nZW1fcmVxdWVzdF9yZW1vdmVfZnJvbV9jbGllbnQoc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpyZXF1ZXN0KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpm aWxlX3ByaXYgPSByZXF1ZXN0LT5maWxlX3ByaXY7Cj4gLQo+IC0JaWYgKCFmaWxlX3ByaXYpCj4g LQkJcmV0dXJuOwo+IC0KPiAtCXNwaW5fbG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKPiAtCWxp c3RfZGVsKCZyZXF1ZXN0LT5jbGllbnRfbGlzdCk7Cj4gLQlyZXF1ZXN0LT5maWxlX3ByaXYgPSBO VUxMOwo+IC0Jc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+bW0ubG9jayk7Cj4gLX0KPiAtCj4gLXN0 YXRpYyBib29sIGk5MTVfY29udGV4dF9pc19iYW5uZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+IC0JCQkJICAgY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCkKPiAt ewo+IC0JdW5zaWduZWQgbG9uZyBlbGFwc2VkOwo+IC0KPiAtCWVsYXBzZWQgPSBnZXRfc2Vjb25k cygpIC0gY3R4LT5oYW5nX3N0YXRzLmd1aWx0eV90czsKPiAtCj4gLQlpZiAoY3R4LT5oYW5nX3N0 YXRzLmJhbm5lZCkKPiAtCQlyZXR1cm4gdHJ1ZTsKPiAtCj4gLQlpZiAoY3R4LT5oYW5nX3N0YXRz LmJhbl9wZXJpb2Rfc2Vjb25kcyAmJgo+IC0JICAgIGVsYXBzZWQgPD0gY3R4LT5oYW5nX3N0YXRz LmJhbl9wZXJpb2Rfc2Vjb25kcykgewo+IC0JCWlmICghaTkxNV9nZW1fY29udGV4dF9pc19kZWZh dWx0KGN0eCkpIHsKPiAtCQkJRFJNX0RFQlVHKCJjb250ZXh0IGhhbmdpbmcgdG9vIGZhc3QsIGJh bm5pbmchXG4iKTsKPiAtCQkJcmV0dXJuIHRydWU7Cj4gLQkJfSBlbHNlIGlmIChpOTE1X3N0b3Bf cmluZ19hbGxvd19iYW4oZGV2X3ByaXYpKSB7Cj4gLQkJCWlmIChpOTE1X3N0b3BfcmluZ19hbGxv d193YXJuKGRldl9wcml2KSkKPiAtCQkJCURSTV9FUlJPUigiZ3B1IGhhbmdpbmcgdG9vIGZhc3Qs IGJhbm5pbmchXG4iKTsKPiAtCQkJcmV0dXJuIHRydWU7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJl dHVybiBmYWxzZTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaTkxNV9zZXRfcmVzZXRfc3RhdHVz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCSAgc3RydWN0IGludGVs X2NvbnRleHQgKmN0eCwKPiAtCQkJCSAgY29uc3QgYm9vbCBndWlsdHkpCj4gLXsKPiAtCXN0cnVj dCBpOTE1X2N0eF9oYW5nX3N0YXRzICpoczsKPiAtCj4gLQlpZiAoV0FSTl9PTighY3R4KSkKPiAt CQlyZXR1cm47Cj4gLQo+IC0JaHMgPSAmY3R4LT5oYW5nX3N0YXRzOwo+IC0KPiAtCWlmIChndWls dHkpIHsKPiAtCQlocy0+YmFubmVkID0gaTkxNV9jb250ZXh0X2lzX2Jhbm5lZChkZXZfcHJpdiwg Y3R4KTsKPiAtCQlocy0+YmF0Y2hfYWN0aXZlKys7Cj4gLQkJaHMtPmd1aWx0eV90cyA9IGdldF9z ZWNvbmRzKCk7Cj4gLQl9IGVsc2Ugewo+IC0JCWhzLT5iYXRjaF9wZW5kaW5nKys7Cj4gLQl9Cj4g LX0KPiAtCj4gLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX2ZyZWVfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCj4gLXsKPiAtCWxpc3RfZGVsKCZyZXF1ZXN0LT5saXN0 KTsKPiAtCWk5MTVfZ2VtX3JlcXVlc3RfcmVtb3ZlX2Zyb21fY2xpZW50KHJlcXVlc3QpOwo+IC0K PiAtCWlmIChyZXF1ZXN0LT5jdHgpCj4gLQkJaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShy ZXF1ZXN0LT5jdHgpOwo+IC0KPiAtCWtmcmVlKHJlcXVlc3QpOwo+IC19Cj4gLQo+IC1zdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKgo+IC1pOTE1X2dlbV9maW5kX2FjdGl2ZV9yZXF1ZXN0KHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxdWVzdDsKPiAtCXUzMiBjb21wbGV0ZWRfc2Vxbm87Cj4gLQo+IC0JY29tcGxl dGVkX3NlcW5vID0gcmluZy0+Z2V0X3NlcW5vKHJpbmcsIGZhbHNlKTsKPiAtCj4gLQlsaXN0X2Zv cl9lYWNoX2VudHJ5KHJlcXVlc3QsICZyaW5nLT5yZXF1ZXN0X2xpc3QsIGxpc3QpIHsKPiAtCQlp ZiAoaTkxNV9zZXFub19wYXNzZWQoY29tcGxldGVkX3NlcW5vLCByZXF1ZXN0LT5zZXFubykpCj4g LQkJCWNvbnRpbnVlOwo+IC0KPiAtCQlyZXR1cm4gcmVxdWVzdDsKPiAtCX0KPiAtCj4gLQlyZXR1 cm4gTlVMTDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVzZXRfcmluZ19zdGF0 dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJICAgICAgIHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxdWVzdDsKPiAtCWJvb2wgcmluZ19odW5nOwo+IC0KPiAtCXJlcXVlc3QgPSBpOTE1 X2dlbV9maW5kX2FjdGl2ZV9yZXF1ZXN0KHJpbmcpOwo+IC0KPiAtCWlmIChyZXF1ZXN0ID09IE5V TEwpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXJpbmdfaHVuZyA9IHJpbmctPmhhbmdjaGVjay5zY29y ZSA+PSBIQU5HQ0hFQ0tfU0NPUkVfUklOR19IVU5HOwo+IC0KPiAtCWk5MTVfc2V0X3Jlc2V0X3N0 YXR1cyhkZXZfcHJpdiwgcmVxdWVzdC0+Y3R4LCByaW5nX2h1bmcpOwo+IC0KPiAtCWxpc3RfZm9y X2VhY2hfZW50cnlfY29udGludWUocmVxdWVzdCwgJnJpbmctPnJlcXVlc3RfbGlzdCwgbGlzdCkK PiAtCQlpOTE1X3NldF9yZXNldF9zdGF0dXMoZGV2X3ByaXYsIHJlcXVlc3QtPmN0eCwgZmFsc2Up Owo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpOTE1X2dlbV9yZXNldF9yaW5nX2NsZWFudXAoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcpCj4gLXsKPiAtCXdoaWxlICghbGlzdF9lbXB0eSgmcmluZy0+YWN0aXZlX2xp c3QpKSB7Cj4gLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiAtCj4gLQkJb2Jq ID0gbGlzdF9maXJzdF9lbnRyeSgmcmluZy0+YWN0aXZlX2xpc3QsCj4gLQkJCQkgICAgICAgc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCj4gLQkJCQkgICAgICAgcmluZ19saXN0KTsKPiAtCj4g LQkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUob2JqKTsKPiAtCX0KPiAtCj4gLQkv Kgo+IC0JICogV2UgbXVzdCBmcmVlIHRoZSByZXF1ZXN0cyBhZnRlciBhbGwgdGhlIGNvcnJlc3Bv bmRpbmcgb2JqZWN0cyBoYXZlCj4gLQkgKiBiZWVuIG1vdmVkIG9mZiBhY3RpdmUgbGlzdHMuIFdo aWNoIGlzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBub3JtYWwKPiAtCSAqIHJldGlyZV9yZXF1ZXN0 cyBmdW5jdGlvbiBkb2VzLiBUaGlzIGlzIGltcG9ydGFudCBpZiBvYmplY3QgaG9sZAo+IC0JICog aW1wbGljaXQgcmVmZXJlbmNlcyBvbiB0aGluZ3MgbGlrZSBlLmcuIHBwZ3R0IGFkZHJlc3Mgc3Bh Y2VzIHRocm91Z2gKPiAtCSAqIHRoZSByZXF1ZXN0Lgo+IC0JICovCj4gLQl3aGlsZSAoIWxpc3Rf ZW1wdHkoJnJpbmctPnJlcXVlc3RfbGlzdCkpIHsKPiAtCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcXVlc3Q7Cj4gLQo+IC0JCXJlcXVlc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyaW5n LT5yZXF1ZXN0X2xpc3QsCj4gLQkJCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0LAo+ IC0JCQkJCSAgIGxpc3QpOwo+IC0KPiAtCQlpOTE1X2dlbV9mcmVlX3JlcXVlc3QocmVxdWVzdCk7 Cj4gLQl9Cj4gLQo+IC0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZyaW5nLT5leGVjbGlzdF9xdWV1ZSkp IHsKPiAtCQlzdHJ1Y3QgaW50ZWxfY3R4X3N1Ym1pdF9yZXF1ZXN0ICpzdWJtaXRfcmVxOwo+IC0K PiAtCQlzdWJtaXRfcmVxID0gbGlzdF9maXJzdF9lbnRyeSgmcmluZy0+ZXhlY2xpc3RfcXVldWUs Cj4gLQkJCQlzdHJ1Y3QgaW50ZWxfY3R4X3N1Ym1pdF9yZXF1ZXN0LAo+IC0JCQkJZXhlY2xpc3Rf bGluayk7Cj4gLQkJbGlzdF9kZWwoJnN1Ym1pdF9yZXEtPmV4ZWNsaXN0X2xpbmspOwo+IC0JCWlu dGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPiAtCQlpOTE1X2dlbV9jb250ZXh0X3VucmVm ZXJlbmNlKHN1Ym1pdF9yZXEtPmN0eCk7Cj4gLQkJa2ZyZWUoc3VibWl0X3JlcSk7Cj4gLQl9Cj4g LQo+IC0JLyogVGhlc2UgbWF5IG5vdCBoYXZlIGJlZW4gZmx1c2ggYmVmb3JlIHRoZSByZXNldCwg ZG8gc28gbm93ICovCj4gLQlrZnJlZShyaW5nLT5wcmVhbGxvY2F0ZWRfbGF6eV9yZXF1ZXN0KTsK PiAtCXJpbmctPnByZWFsbG9jYXRlZF9sYXp5X3JlcXVlc3QgPSBOVUxMOwo+IC0JcmluZy0+b3V0 c3RhbmRpbmdfbGF6eV9zZXFubyA9IDA7Cj4gLX0KPiAtCj4gLXZvaWQgaTkxNV9nZW1fcmVzdG9y ZV9mZW5jZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCWludCBpOwo+IC0KPiAt CWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3M7IGkrKykgewo+IC0JCXN0 cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKnJlZyA9ICZkZXZfcHJpdi0+ZmVuY2VfcmVnc1tpXTsK PiAtCj4gLQkJLyoKPiAtCQkgKiBDb21taXQgZGVsYXllZCB0aWxpbmcgY2hhbmdlcyBpZiB3ZSBo YXZlIGFuIG9iamVjdCBzdGlsbAo+IC0JCSAqIGF0dGFjaGVkIHRvIHRoZSBmZW5jZSwgb3RoZXJ3 aXNlIGp1c3QgY2xlYXIgdGhlIGZlbmNlLgo+IC0JCSAqLwo+IC0JCWlmIChyZWctPm9iaikgewo+ IC0JCQlpOTE1X2dlbV9vYmplY3RfdXBkYXRlX2ZlbmNlKHJlZy0+b2JqLCByZWcsCj4gLQkJCQkJ CSAgICAgcmVnLT5vYmotPnRpbGluZ19tb2RlKTsKPiAtCQl9IGVsc2Ugewo+IC0JCQlpOTE1X2dl bV93cml0ZV9mZW5jZShkZXYsIGksIE5VTEwpOwo+IC0JCX0KPiAtCX0KPiAtfQo+IC0KPiAtdm9p ZCBpOTE1X2dlbV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+IC17Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcmluZzsKPiAtCWludCBpOwo+IC0KPiAtCS8qCj4gLQkgKiBCZWZv cmUgd2UgZnJlZSB0aGUgb2JqZWN0cyBmcm9tIHRoZSByZXF1ZXN0cywgd2UgbmVlZCB0byBpbnNw ZWN0Cj4gLQkgKiB0aGVtIGZvciBmaW5kaW5nIHRoZSBndWlsdHkgcGFydHkuIEFzIHRoZSByZXF1 ZXN0cyBvbmx5IGJvcnJvdwo+IC0JICogdGhlaXIgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3RzLCB0 aGUgaW5zcGVjdGlvbiBtdXN0IGJlIGRvbmUgZmlyc3QuCj4gLQkgKi8KPiAtCWZvcl9lYWNoX3Jp bmcocmluZywgZGV2X3ByaXYsIGkpCj4gLQkJaTkxNV9nZW1fcmVzZXRfcmluZ19zdGF0dXMoZGV2 X3ByaXYsIHJpbmcpOwo+IC0KPiAtCWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3ByaXYsIGkpCj4g LQkJaTkxNV9nZW1fcmVzZXRfcmluZ19jbGVhbnVwKGRldl9wcml2LCByaW5nKTsKPiAtCj4gLQlp OTE1X2dlbV9jb250ZXh0X3Jlc2V0KGRldik7Cj4gLQo+ICAgCWk5MTVfZ2VtX3Jlc3RvcmVfZmVu Y2VzKGRldik7Cj4gICB9Cj4gICAKPiBAQCAtMjYyNSwxMDAgKzIxNDMsOTUgQEAgdm9pZCBpOTE1 X2dlbV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgICogVGhpcyBmdW5jdGlvbiBj bGVhcnMgdGhlIHJlcXVlc3QgbGlzdCBhcyBzZXF1ZW5jZSBudW1iZXJzIGFyZSBwYXNzZWQuCj4g ICAgKi8KPiAgIHZvaWQKPiAtaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3Jpbmcoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZykKPiAraTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX19lbmdpbmUo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+IC0JdWludDMyX3Qgc2Vxbm87 Cj4gLQo+IC0JaWYgKGxpc3RfZW1wdHkoJnJpbmctPnJlcXVlc3RfbGlzdCkpCj4gKwlpZiAoZW5n aW5lLT5sYXN0X3JlcXVlc3QgPT0gTlVMTCkKPiAgIAkJcmV0dXJuOwo+ICAgCj4gLQlXQVJOX09O KGk5MTVfdmVyaWZ5X2xpc3RzKHJpbmctPmRldikpOwo+IC0KPiAtCXNlcW5vID0gcmluZy0+Z2V0 X3NlcW5vKHJpbmcsIHRydWUpOwo+ICsJaWYgKCFpbnRlbF9lbmdpbmVfcmV0aXJlKGVuZ2luZSwg ZW5naW5lLT5nZXRfc2Vxbm8oZW5naW5lKSkpCj4gKwkJcmV0dXJuOwo+ICAgCj4gLQkvKiBNb3Zl IGFueSBidWZmZXJzIG9uIHRoZSBhY3RpdmUgbGlzdCB0aGF0IGFyZSBubyBsb25nZXIgcmVmZXJl bmNlZAo+IC0JICogYnkgdGhlIHJpbmdidWZmZXIgdG8gdGhlIGZsdXNoaW5nL2luYWN0aXZlIGxp c3RzIGFzIGFwcHJvcHJpYXRlLAo+IC0JICogYmVmb3JlIHdlIGZyZWUgdGhlIGNvbnRleHQgYXNz b2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0cy4KPiAtCSAqLwo+IC0Jd2hpbGUgKCFsaXN0X2VtcHR5 KCZyaW5nLT5hY3RpdmVfbGlzdCkpIHsKPiArCXdoaWxlICghbGlzdF9lbXB0eSgmZW5naW5lLT53 cml0ZV9saXN0KSkgewo+ICAgCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICAg Cj4gLQkJb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmcmluZy0+YWN0aXZlX2xpc3QsCj4gLQkJCQkg ICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKPiAtCQkJCSAgICAgIHJpbmdfbGlzdCk7 Cj4gKwkJb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmZW5naW5lLT53cml0ZV9saXN0LAo+ICsJCQkJ ICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAo+ICsJCQkJICAgICAgIGxhc3Rfd3Jp dGUuZW5naW5lX2xpc3QpOwo+ICAgCj4gLQkJaWYgKCFpOTE1X3NlcW5vX3Bhc3NlZChzZXFubywg b2JqLT5sYXN0X3JlYWRfc2Vxbm8pKQo+ICsJCWlmICghb2JqLT5sYXN0X3dyaXRlLnJlcXVlc3Qt PmNvbXBsZXRlZCkKPiAgIAkJCWJyZWFrOwo+ICAgCj4gLQkJaTkxNV9nZW1fb2JqZWN0X21vdmVf dG9faW5hY3RpdmUob2JqKTsKPiArCQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlX193cml0ZShvYmop Owo+ICAgCX0KPiAgIAo+ICsJd2hpbGUgKCFsaXN0X2VtcHR5KCZlbmdpbmUtPmZlbmNlX2xpc3Qp KSB7Cj4gKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiAgIAo+IC0Jd2hpbGUg KCFsaXN0X2VtcHR5KCZyaW5nLT5yZXF1ZXN0X2xpc3QpKSB7Cj4gLQkJc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0Owo+IC0JCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5n YnVmOwo+IC0KPiAtCQlyZXF1ZXN0ID0gbGlzdF9maXJzdF9lbnRyeSgmcmluZy0+cmVxdWVzdF9s aXN0LAo+IC0JCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCwKPiAtCQkJCQkgICBs aXN0KTsKPiArCQlvYmogPSBsaXN0X2ZpcnN0X2VudHJ5KCZlbmdpbmUtPmZlbmNlX2xpc3QsCj4g KwkJCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCj4gKwkJCQkgICAgICAgbGFz dF9mZW5jZS5lbmdpbmVfbGlzdCk7Cj4gICAKPiAtCQlpZiAoIWk5MTVfc2Vxbm9fcGFzc2VkKHNl cW5vLCByZXF1ZXN0LT5zZXFubykpCj4gKwkJaWYgKCFvYmotPmxhc3RfZmVuY2UucmVxdWVzdC0+ Y29tcGxldGVkKQo+ICAgCQkJYnJlYWs7Cj4gICAKPiAtCQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0 X3JldGlyZShyaW5nLCByZXF1ZXN0LT5zZXFubyk7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X3JldGly ZV9fZmVuY2Uob2JqKTsKPiArCX0KPiAgIAo+IC0JCS8qIFRoaXMgaXMgb25lIG9mIHRoZSBmZXcg Y29tbW9uIGludGVyc2VjdGlvbiBwb2ludHMKPiAtCQkgKiBiZXR3ZWVuIGxlZ2FjeSByaW5nYnVm ZmVyIHN1Ym1pc3Npb24gYW5kIGV4ZWNsaXN0czoKPiAtCQkgKiB3ZSBuZWVkIHRvIHRlbGwgdGhl bSBhcGFydCBpbiBvcmRlciB0byBmaW5kIHRoZSBjb3JyZWN0Cj4gLQkJICogcmluZ2J1ZmZlciB0 byB3aGljaCB0aGUgcmVxdWVzdCBiZWxvbmdzIHRvLgo+IC0JCSAqLwo+IC0JCWlmIChpOTE1LmVu YWJsZV9leGVjbGlzdHMpIHsKPiAtCQkJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCA9IHJlcXVl c3QtPmN0eDsKPiAtCQkJcmluZ2J1ZiA9IGN0eC0+ZW5naW5lW3JpbmctPmlkXS5yaW5nYnVmOwo+ IC0JCX0gZWxzZQo+IC0JCQlyaW5nYnVmID0gcmluZy0+YnVmZmVyOwo+IC0KPiAtCQkvKiBXZSBr bm93IHRoZSBHUFUgbXVzdCBoYXZlIHJlYWQgdGhlIHJlcXVlc3QgdG8gaGF2ZQo+IC0JCSAqIHNl bnQgdXMgdGhlIHNlcW5vICsgaW50ZXJydXB0LCBzbyB1c2UgdGhlIHBvc2l0aW9uCj4gLQkJICog b2YgdGFpbCBvZiB0aGUgcmVxdWVzdCB0byB1cGRhdGUgdGhlIGxhc3Qga25vd24gcG9zaXRpb24K PiAtCQkgKiBvZiB0aGUgR1BVIGhlYWQuCj4gLQkJICovCj4gLQkJcmluZ2J1Zi0+bGFzdF9yZXRp cmVkX2hlYWQgPSByZXF1ZXN0LT50YWlsOwo+ICsJd2hpbGUgKCFsaXN0X2VtcHR5KCZlbmdpbmUt PnJlYWRfbGlzdCkpIHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICAg Cj4gLQkJaTkxNV9nZW1fZnJlZV9yZXF1ZXN0KHJlcXVlc3QpOwo+IC0JfQo+ICsJCW9iaiA9IGxp c3RfZmlyc3RfZW50cnkoJmVuZ2luZS0+cmVhZF9saXN0LAo+ICsJCQkJICAgICAgIHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0LAo+ICsJCQkJICAgICAgIGxhc3RfcmVhZFtlbmdpbmUtPmlkXS5l bmdpbmVfbGlzdCk7Cj4gICAKPiAtCWlmICh1bmxpa2VseShyaW5nLT50cmFjZV9pcnFfc2Vxbm8g JiYKPiAtCQkgICAgIGk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCByaW5nLT50cmFjZV9pcnFfc2Vx bm8pKSkgewo+IC0JCXJpbmctPmlycV9wdXQocmluZyk7Cj4gLQkJcmluZy0+dHJhY2VfaXJxX3Nl cW5vID0gMDsKPiAtCX0KPiArCQlpZiAoIW9iai0+bGFzdF9yZWFkW2VuZ2luZS0+aWRdLnJlcXVl c3QtPmNvbXBsZXRlZCkKPiArCQkJYnJlYWs7Cj4gICAKPiAtCVdBUk5fT04oaTkxNV92ZXJpZnlf bGlzdHMocmluZy0+ZGV2KSk7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X3JldGlyZV9fcmVhZChvYmos IGVuZ2luZSk7Cj4gKwl9Cj4gICB9Cj4gICAKPiAgIGJvb2wKPiAgIGk5MTVfZ2VtX3JldGlyZV9y ZXF1ZXN0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICAg CWJvb2wgaWRsZSA9IHRydWU7Cj4gICAJaW50IGk7Cj4gICAKPiAtCWZvcl9lYWNoX3Jpbmcocmlu ZywgZGV2X3ByaXYsIGkpIHsKPiAtCQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHNfcmluZyhyaW5n KTsKPiAtCQlpZGxlICY9IGxpc3RfZW1wdHkoJnJpbmctPnJlcXVlc3RfbGlzdCk7Cj4gKwlmb3Jf ZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwgaSkgewo+ICsJCWk5MTVfZ2VtX3JldGlyZV9y ZXF1ZXN0c19fZW5naW5lKGVuZ2luZSk7Cj4gKwkJaWRsZSAmPSBlbmdpbmUtPmxhc3RfcmVxdWVz dCA9PSBOVUxMOwo+ICAgCX0KPiAgIAo+ICAgCWlmIChpZGxlKQo+ICAgCQltb2RfZGVsYXllZF93 b3JrKGRldl9wcml2LT53cSwKPiAtCQkJCSAgICZkZXZfcHJpdi0+bW0uaWRsZV93b3JrLAo+IC0J CQkJICAgbXNlY3NfdG9famlmZmllcygxMDApKTsKPiArCQkJCSAmZGV2X3ByaXYtPm1tLmlkbGVf d29yaywKPiArCQkJCSBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwo+ICAgCj4gICAJcmV0dXJuIGlk bGU7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkCj4gK2k5MTVfZ2VtX2ZsdXNoX3JlcXVlc3Rz KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmU7Cj4gKwlpbnQgaSwgaWdub3JlZDsKPiArCj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5n aW5lLCBkZXZfcHJpdiwgaSkgewo+ICsJCWlmIChlbmdpbmUtPmxhc3RfcmVxdWVzdCA9PSBOVUxM KQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKGVuZ2luZS0+bGFzdF9yZXF1ZXN0LT5icmVh ZGNydW1iW2VuZ2luZS0+aWRdKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWdub3JlZCA9IGlu dGVsX2VuZ2luZV9mbHVzaChlbmdpbmUsIGVuZ2luZS0+bGFzdF9yZXF1ZXN0LT5jdHgpOwo+ICsJ fQo+ICsJKHZvaWQpaWdub3JlZDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAgIGk5MTVfZ2Vt X3JldGlyZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAgewo+ICAg CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gQEAgLTI3MzAsMTAgKzIyNDMs MTMgQEAgaTkxNV9nZW1fcmV0aXJlX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndv cmspCj4gICAJaWRsZSA9IGZhbHNlOwo+ICAgCWlmIChtdXRleF90cnlsb2NrKCZkZXYtPnN0cnVj dF9tdXRleCkpIHsKPiAgIAkJaWRsZSA9IGk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOwo+ ICsJCWlmICghaWRsZSkKPiArCQkJaTkxNV9nZW1fZmx1c2hfcmVxdWVzdHMoZGV2KTsKPiAgIAkJ bXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gICAJfQo+ICAgCWlmICghaWRsZSkK PiAtCQlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2X3ByaXYtPndxLCAmZGV2X3ByaXYtPm1tLnJldGly ZV93b3JrLAo+ICsJCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXZfcHJpdi0+d3EsCj4gKwkJCQkgICAm ZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrLAo+ICAgCQkJCSAgIHJvdW5kX2ppZmZpZXNfdXBfcmVs YXRpdmUoSFopKTsKPiAgIH0KPiAgIAo+IEBAIC0yNzU2LDE0ICsyMjcyLDE2IEBAIGk5MTVfZ2Vt X29iamVjdF9mbHVzaF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAg IHsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gLQlpZiAob2JqLT5hY3RpdmUpIHsKPiAtCQlyZXQgPSBp OTE1X2dlbV9jaGVja19vbHIob2JqLT5yaW5nLCBvYmotPmxhc3RfcmVhZF9zZXFubyk7Cj4gKwlp ZiAoIW9iai0+YWN0aXZlKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChvYmotPmxhc3Rfd3Jp dGUucmVxdWVzdCkgewo+ICsJCXJldCA9IGk5MTVfcmVxdWVzdF9lbWl0X2JyZWFkY3J1bWIob2Jq LT5sYXN0X3dyaXRlLnJlcXVlc3QpOwo+ICAgCQlpZiAocmV0KQo+ICAgCQkJcmV0dXJuIHJldDsK PiAtCj4gLQkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3Jpbmcob2JqLT5yaW5nKTsKPiAgIAl9 Cj4gICAKPiArCWk5MTVfZ2VtX29iamVjdF9yZXRpcmUob2JqKTsKPiAgIAlyZXR1cm4gMDsKPiAg IH0KPiAgIAo+IEBAIC0yNzkyLDEzICsyMzEwLDEwIEBAIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9h Y3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIGludAo+ICAgaTkxNV9n ZW1fd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGUpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fd2FpdCAqYXJn cyA9IGRhdGE7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiAtCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSBOVUxMOwo+IC0JdW5zaWduZWQgcmVzZXRfY291bnRl cjsKPiAtCXUzMiBzZXFubyA9IDA7Cj4gLQlpbnQgcmV0ID0gMDsKPiArCXN0cnVjdCBpOTE1X2dl bV9yZXF1ZXN0ICpycVtJOTE1X05VTV9FTkdJTkVTXSA9IHt9Owo+ICsJaW50IGksIG4sIHJldCA9 IDA7Cj4gICAKPiAgIAlyZXQgPSBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOwo+ ICAgCWlmIChyZXQpCj4gQEAgLTI4MTUsMTMgKzIzMzAsOCBAQCBpOTE1X2dlbV93YWl0X2lvY3Rs KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmls ZSkKPiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JaWYgKG9iai0+YWN0aXZl KSB7Cj4gLQkJc2Vxbm8gPSBvYmotPmxhc3RfcmVhZF9zZXFubzsKPiAtCQlyaW5nID0gb2JqLT5y aW5nOwo+IC0JfQo+IC0KPiAtCWlmIChzZXFubyA9PSAwKQo+IC0JCSBnb3RvIG91dDsKPiArCWlm ICghb2JqLT5hY3RpdmUpCj4gKwkJZ290byBvdXQ7Cj4gICAKPiAgIAkvKiBEbyB0aGlzIGFmdGVy IE9MUiBjaGVjayB0byBtYWtlIHN1cmUgd2UgbWFrZSBmb3J3YXJkIHByb2dyZXNzIHBvbGxpbmcK PiAgIAkgKiBvbiB0aGlzIElPQ1RMIHdpdGggYSB0aW1lb3V0IDw9MCAobGlrZSBidXN5IGlvY3Rs KQo+IEBAIC0yODMxLDEyICsyMzQxLDMxIEBAIGk5MTVfZ2VtX3dhaXRfaW9jdGwoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ICAgCQln b3RvIG91dDsKPiAgIAl9Cj4gICAKPiArCWZvciAoaSA9IG4gPSAwOyBpIDwgSTkxNV9OVU1fRU5H SU5FUzsgaSsrKSB7Cj4gKwkJaWYgKG9iai0+bGFzdF9yZWFkW2ldLnJlcXVlc3QgPT0gTlVMTCkK PiArCQkJY29udGludWU7Cj4gKwo+ICsJCXJxW25dID0gaTkxNV9yZXF1ZXN0X2dldF9icmVhZGNy dW1iKG9iai0+bGFzdF9yZWFkW2ldLnJlcXVlc3QpOwo+ICsJCWlmIChJU19FUlIocnFbbl0pKSB7 Cj4gKwkJCXJldCA9IFBUUl9FUlIocnFbbl0pOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwkJbisr Owo+ICsJfQo+ICsKPiAgIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsK PiAtCXJlc2V0X2NvdW50ZXIgPSBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmdwdV9lcnJvci5yZXNl dF9jb3VudGVyKTsKPiAgIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgIAo+ IC0JcmV0dXJuIF9fd2FpdF9zZXFubyhyaW5nLCBzZXFubywgcmVzZXRfY291bnRlciwgdHJ1ZSwg JmFyZ3MtPnRpbWVvdXRfbnMsCj4gLQkJCSAgICBmaWxlLT5kcml2ZXJfcHJpdik7Cj4gKwlmb3Ig KGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4gKwkJaWYgKHJldCA9PSAwKQo+ICsJCQlyZXQgPSBfX2k5 MTVfcmVxdWVzdF93YWl0KHJxW2ldLCB0cnVlLAo+ICsJCQkJCQkgICZhcmdzLT50aW1lb3V0X25z LAo+ICsJCQkJCQkgIGZpbGUtPmRyaXZlcl9wcml2KTsKPiArCj4gKwkJaTkxNV9yZXF1ZXN0X3B1 dF9fdW5sb2NrZWQocnFbaV0pOwo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gICAKPiAgIG91 dDoKPiAgIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKPiBAQCAtMjg0 NCw2ICsyMzczLDUwIEBAIG91dDoKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gK3N0YXRp YyBpbnQKPiArX19pOTE1X3JlcXVlc3Rfc3luYyhzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqd2Fp dGVyLAo+ICsJCSAgICBzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqc2lnbmFsbGVyLAo+ICsJCSAg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCSAgICBib29sICpyZXRpcmUp Cj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKHNpZ25hbGxlciA9PSBOVUxMIHx8IGk5MTVf cmVxdWVzdF9jb21wbGV0ZShzaWduYWxsZXIpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmICh3 YWl0ZXIgPT0gTlVMTCkKPiArCQlnb3RvIHdhaXQ7Cj4gKwo+ICsJLyogWFhYIHN0aWxsIHRydWUg d2l0aCBleGVjbGlzdHM/ICovCj4gKwlpZiAod2FpdGVyLT5lbmdpbmUgPT0gc2lnbmFsbGVyLT5l bmdpbmUpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKCF3YWl0ZXItPmVuZ2luZS0+c2VtYXBo b3JlLndhaXQpCj4gKwkJZ290byB3YWl0Owo+ICsKPiArCS8qIFRyeSB0byBlbWl0IG9ubHkgb25l IHdhaXQgcGVyIHJlcXVlc3QgcGVyIHJpbmcgKi8KPiArCWlmICh3YWl0ZXItPnNlbWFwaG9yZVtz aWduYWxsZXItPmVuZ2luZS0+aWRdICYmCj4gKwkgICAgX19pOTE1X3NlcW5vX3Bhc3NlZCh3YWl0 ZXItPnNlbWFwaG9yZVtzaWduYWxsZXItPmVuZ2luZS0+aWRdLAo+ICsJCQkJc2lnbmFsbGVyLT5z ZXFubykpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0ID0gaTkxNV9yZXF1ZXN0X2VtaXRfc2Vt YXBob3JlKHNpZ25hbGxlciwgd2FpdGVyLT5lbmdpbmUtPmlkKTsKPiArCWlmIChyZXQpCj4gKwkJ Z290byB3YWl0Owo+ICsKPiArCXRyYWNlX2k5MTVfZ2VtX3Jpbmdfd2FpdChzaWduYWxsZXIsIHdh aXRlcik7Cj4gKwlpZiAod2FpdGVyLT5lbmdpbmUtPnNlbWFwaG9yZS53YWl0KHdhaXRlciwgc2ln bmFsbGVyKSkKPiArCQlnb3RvIHdhaXQ7Cj4gKwo+ICsJd2FpdGVyLT5wZW5kaW5nX2ZsdXNoICY9 IH5JOTE1X0NPTU1BTkRfQkFSUklFUjsKPiArCXdhaXRlci0+c2VtYXBob3JlW3NpZ25hbGxlci0+ ZW5naW5lLT5pZF0gPSBzaWduYWxsZXItPmJyZWFkY3J1bWJbd2FpdGVyLT5lbmdpbmUtPmlkXTsK PiArCXJldHVybiAwOwo+ICsKPiArd2FpdDoKPiArCSpyZXRpcmUgPSB0cnVlOwo+ICsJcmV0dXJu IGk5MTVfcmVxdWVzdF93YWl0KHNpZ25hbGxlcik7Cj4gK30KPiArCj4gICAvKioKPiAgICAqIGk5 MTVfZ2VtX29iamVjdF9zeW5jIC0gc3luYyBhbiBvYmplY3QgdG8gYSByaW5nLgo+ICAgICoKPiBA QCAtMjg1OCwzOCArMjQzMSwyMyBAQCBvdXQ6Cj4gICAgKi8KPiAgIGludAo+ICAgaTkxNV9nZW1f b2JqZWN0X3N5bmMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkgICAgIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnRvKQo+ICsJCSAgICAgc3RydWN0IGk5MTVfZ2VtX3JlcXVl c3QgKnJxKQo+ICAgewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZnJvbSA9IG9iai0+cmlu ZzsKPiAtCXUzMiBzZXFubzsKPiAtCWludCByZXQsIGlkeDsKPiAtCj4gLQlpZiAoZnJvbSA9PSBO VUxMIHx8IHRvID09IGZyb20pCj4gLQkJcmV0dXJuIDA7Cj4gKwlpbnQgcmV0ID0gMCwgaTsKPiAr CWJvb2wgcmV0aXJlID0gZmFsc2U7Cj4gICAKPiAtCWlmICh0byA9PSBOVUxMIHx8ICFpOTE1X3Nl bWFwaG9yZV9pc19lbmFibGVkKG9iai0+YmFzZS5kZXYpKQo+IC0JCXJldHVybiBpOTE1X2dlbV9v YmplY3Rfd2FpdF9yZW5kZXJpbmcob2JqLCBmYWxzZSk7Cj4gLQo+IC0JaWR4ID0gaW50ZWxfcmlu Z19zeW5jX2luZGV4KGZyb20sIHRvKTsKPiAtCj4gLQlzZXFubyA9IG9iai0+bGFzdF9yZWFkX3Nl cW5vOwo+IC0JLyogT3B0aW1pemF0aW9uOiBBdm9pZCBzZW1hcGhvcmUgc3luYyB3aGVuIHdlIGFy ZSBzdXJlIHdlIGFscmVhZHkKPiAtCSAqIHdhaXRlZCBmb3IgYW4gb2JqZWN0IHdpdGggaGlnaGVy IHNlcW5vICovCj4gLQlpZiAoc2Vxbm8gPD0gZnJvbS0+c2VtYXBob3JlLnN5bmNfc2Vxbm9baWR4 XSkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlyZXQgPSBpOTE1X2dlbV9jaGVja19vbHIob2JqLT5y aW5nLCBzZXFubyk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlpZiAob2JqLT5i YXNlLnBlbmRpbmdfd3JpdGVfZG9tYWluID09IDApIHsKPiArCQlyZXQgPSBfX2k5MTVfcmVxdWVz dF9zeW5jKHJxLCBvYmotPmxhc3Rfd3JpdGUucmVxdWVzdCwgb2JqLCAmcmV0aXJlKTsKPiArCX0g ZWxzZSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX0VOR0lORVM7IGkrKykgewo+ICsJ CQlyZXQgPSBfX2k5MTVfcmVxdWVzdF9zeW5jKHJxLCBvYmotPmxhc3RfcmVhZFtpXS5yZXF1ZXN0 LCBvYmosICZyZXRpcmUpOwo+ICsJCQlpZiAocmV0KQo+ICsJCQkJYnJlYWs7Cj4gKwkJfQo+ICsJ fQo+ICAgCj4gLQl0cmFjZV9pOTE1X2dlbV9yaW5nX3N5bmNfdG8oZnJvbSwgdG8sIHNlcW5vKTsK PiAtCXJldCA9IHRvLT5zZW1hcGhvcmUuc3luY190byh0bywgZnJvbSwgc2Vxbm8pOwo+IC0JaWYg KCFyZXQpCj4gLQkJLyogV2UgdXNlIGxhc3RfcmVhZF9zZXFubyBiZWNhdXNlIHN5bmNfdG8oKQo+ IC0JCSAqIG1pZ2h0IGhhdmUganVzdCBjYXVzZWQgc2Vxbm8gd3JhcCB1bmRlcgo+IC0JCSAqIHRo ZSByYWRhci4KPiAtCQkgKi8KPiAtCQlmcm9tLT5zZW1hcGhvcmUuc3luY19zZXFub1tpZHhdID0g b2JqLT5sYXN0X3JlYWRfc2Vxbm87Cj4gKwlpZiAocmV0aXJlKQo+ICsJCWk5MTVfZ2VtX29iamVj dF9yZXRpcmUob2JqKTsKPiAgIAo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gQEAgLTI5ODMsMTkg KzI1NDEsMjIgQEAgaW50IGk5MTVfdm1hX3VuYmluZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAg IAo+ICAgaW50IGk5MTVfZ3B1X2lkbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIHsKPiAt CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4g LQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+IC0JaW50IHJldCwgaTsKPiArCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCWludCBpOwo+ICAgCj4gLQkvKiBGbHVzaCBl dmVyeXRoaW5nIG9udG8gdGhlIGluYWN0aXZlIGxpc3QuICovCj4gLQlmb3JfZWFjaF9yaW5nKHJp bmcsIGRldl9wcml2LCBpKSB7Cj4gLQkJaWYgKCFpOTE1LmVuYWJsZV9leGVjbGlzdHMpIHsKPiAt CQkJcmV0ID0gaTkxNV9zd2l0Y2hfY29udGV4dChyaW5nLCByaW5nLT5kZWZhdWx0X2NvbnRleHQp Owo+IC0JCQlpZiAocmV0KQo+IC0JCQkJcmV0dXJuIHJldDsKPiAtCQl9Cj4gKwkvKiBGbHVzaCBl dmVyeXRoaW5nIGluY2x1ZGluZyBjb250ZXh0cyBvbnRvIHRoZSBpbmFjdGl2ZSBsaXN0LiAqLwo+ ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgdG9faTkxNShkZXYpLCBpKSB7Cj4gKwkJc3RydWN0 IGk5MTVfZ2VtX3JlcXVlc3QgKnJxOwo+ICsJCWludCByZXQ7Cj4gKwo+ICsJCXJxID0gaW50ZWxf ZW5naW5lX2FsbG9jX3JlcXVlc3QoZW5naW5lLAo+ICsJCQkJCQllbmdpbmUtPmRlZmF1bHRfY29u dGV4dCk7Cj4gKwkJaWYgKElTX0VSUihycSkpCj4gKwkJCXJldHVybiBQVFJfRVJSKHJxKTsKPiAr Cj4gKwkJcmV0ID0gaTkxNV9yZXF1ZXN0X3dhaXQocnEpOwo+ICsJCWk5MTVfcmVxdWVzdF9wdXQo cnEpOwo+ICAgCj4gLQkJcmV0ID0gaW50ZWxfcmluZ19pZGxlKHJpbmcpOwo+ICAgCQlpZiAocmV0 KQo+ICAgCQkJcmV0dXJuIHJldDsKPiAgIAl9Cj4gQEAgLTMxOTksMTQgKzI3NjAsMTYgQEAgc3Rh dGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3VwZGF0ZV9mZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAo+ICAgc3RhdGljIGludAo+ICAgaTkxNV9nZW1fb2JqZWN0X3dhaXRfZmVu Y2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIHsKPiAtCWlmIChvYmotPmxh c3RfZmVuY2VkX3NlcW5vKSB7Cj4gLQkJaW50IHJldCA9IGk5MTVfd2FpdF9zZXFubyhvYmotPnJp bmcsIG9iai0+bGFzdF9mZW5jZWRfc2Vxbm8pOwo+IC0JCWlmIChyZXQpCj4gLQkJCXJldHVybiBy ZXQ7Cj4gKwlpbnQgcmV0Owo+ICAgCj4gLQkJb2JqLT5sYXN0X2ZlbmNlZF9zZXFubyA9IDA7Cj4g LQl9Cj4gKwlpZiAob2JqLT5sYXN0X2ZlbmNlLnJlcXVlc3QgPT0gTlVMTCkKPiArCQlyZXR1cm4g MDsKPiAgIAo+ICsJcmV0ID0gaTkxNV9yZXF1ZXN0X3dhaXQob2JqLT5sYXN0X2ZlbmNlLnJlcXVl c3QpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWk5MTVfZ2VtX29iamVj dF9yZXRpcmVfX2ZlbmNlKG9iaik7Cj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiBAQCAtMzY0 MSw3ICszMjA0LDYgQEAgaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGJvb2wgd3JpdGUpCj4gICAJaWYgKHJldCkKPiAgIAkJ cmV0dXJuIHJldDsKPiAgIAo+IC0JaTkxNV9nZW1fb2JqZWN0X3JldGlyZShvYmopOwo+ICAgCWk5 MTVfZ2VtX29iamVjdF9mbHVzaF9jcHVfd3JpdGVfZG9tYWluKG9iaiwgZmFsc2UpOwo+ICAgCj4g ICAJLyogU2VyaWFsaXNlIGRpcmVjdCBhY2Nlc3MgdG8gdGhpcyBvYmplY3Qgd2l0aCB0aGUgYmFy cmllcnMgZm9yCj4gQEAgLTM2NjAsMTQgKzMyMjIsMTIgQEAgaTkxNV9nZW1fb2JqZWN0X3NldF90 b19ndHRfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGJvb2wgd3JpdGUp Cj4gICAJQlVHX09OKChvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgfkk5MTVfR0VNX0RPTUFJTl9H VFQpICE9IDApOwo+ICAgCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgfD0gSTkxNV9HRU1fRE9NQUlO X0dUVDsKPiAgIAlpZiAod3JpdGUpIHsKPiArCQlpbnRlbF9mYl9vYmpfaW52YWxpZGF0ZShvYmos IE5VTEwpOwo+ICAgCQlvYmotPmJhc2UucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0dU VDsKPiAgIAkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9HVFQ7Cj4g ICAJCW9iai0+ZGlydHkgPSAxOwo+ICAgCX0KPiAgIAo+IC0JaWYgKHdyaXRlKQo+IC0JCWludGVs X2ZiX29ial9pbnZhbGlkYXRlKG9iaiwgTlVMTCk7Cj4gLQo+ICAgCXRyYWNlX2k5MTVfZ2VtX29i amVjdF9jaGFuZ2VfZG9tYWluKG9iaiwKPiAgIAkJCQkJICAgIG9sZF9yZWFkX2RvbWFpbnMsCj4g ICAJCQkJCSAgICBvbGRfd3JpdGVfZG9tYWluKTsKPiBAQCAtMzczOSw3ICszMjk5LDYgQEAgaW50 IGk5MTVfZ2VtX29iamVjdF9zZXRfY2FjaGVfbGV2ZWwoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiAgIAkJICogaW4gb2JqLT53cml0ZV9kb21haW4gYW5kIGhhdmUgYmVlbiBza2lw cGluZyB0aGUgY2xmbHVzaGVzLgo+ICAgCQkgKiBKdXN0IHNldCBpdCB0byB0aGUgQ1BVIGNhY2hl IGZvciBub3cuCj4gICAJCSAqLwo+IC0JCWk5MTVfZ2VtX29iamVjdF9yZXRpcmUob2JqKTsKPiAg IAkJV0FSTl9PTihvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgfkk5MTVfR0VNX0RPTUFJTl9DUFUp Owo+ICAgCj4gICAJCW9sZF9yZWFkX2RvbWFpbnMgPSBvYmotPmJhc2UucmVhZF9kb21haW5zOwo+ IEBAIC0zODY1LDE3ICszNDI0LDE1IEBAIHN0YXRpYyBib29sIGlzX3Bpbl9kaXNwbGF5KHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICBpbnQKPiAgIGk5MTVfZ2VtX29iamVjdF9w aW5fdG9fZGlzcGxheV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAg CQkJCSAgICAgdTMyIGFsaWdubWVudCwKPiAtCQkJCSAgICAgc3RydWN0IGludGVsX2VuZ2luZV9j cyAqcGlwZWxpbmVkKQo+ICsJCQkJICAgICBzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcGlwZWxp bmVkKQo+ICAgewo+ICAgCXUzMiBvbGRfcmVhZF9kb21haW5zLCBvbGRfd3JpdGVfZG9tYWluOwo+ ICAgCWJvb2wgd2FzX3Bpbl9kaXNwbGF5Owo+ICAgCWludCByZXQ7Cj4gICAKPiAtCWlmIChwaXBl bGluZWQgIT0gb2JqLT5yaW5nKSB7Cj4gLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3N5bmMob2Jq LCBwaXBlbGluZWQpOwo+IC0JCWlmIChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gLQl9Cj4gKwly ZXQgPSBpOTE1X2dlbV9vYmplY3Rfc3luYyhvYmosIHBpcGVsaW5lZCk7Cj4gKwlpZiAocmV0KQo+ ICsJCXJldHVybiByZXQ7Cj4gICAKPiAgIAkvKiBNYXJrIHRoZSBwaW5fZGlzcGxheSBlYXJseSBz byB0aGF0IHdlIGFjY291bnQgZm9yIHRoZQo+ICAgCSAqIGRpc3BsYXkgY29oZXJlbmN5IHdoaWxz dCBzZXR0aW5nIHVwIHRoZSBjYWNoZSBkb21haW5zLgo+IEBAIC0zOTcxLDcgKzM1MjgsNiBAQCBp OTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwgYm9vbCB3cml0ZSkKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+ICAg Cj4gLQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlKG9iaik7Cj4gICAJaTkxNV9nZW1fb2JqZWN0X2Zs dXNoX2d0dF93cml0ZV9kb21haW4ob2JqKTsKPiAgIAo+ICAgCW9sZF93cml0ZV9kb21haW4gPSBv YmotPmJhc2Uud3JpdGVfZG9tYWluOwo+IEBAIC0zOTg0LDc4ICszNTQwLDI1IEBAIGk5MTVfZ2Vt X29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LCBib29sIHdyaXRlKQo+ICAgCQlvYmotPmJhc2UucmVhZF9kb21haW5zIHw9IEk5MTVfR0VNX0RP TUFJTl9DUFU7Cj4gICAJfQo+ICAgCj4gLQkvKiBJdCBzaG91bGQgbm93IGJlIG91dCBvZiBhbnkg b3RoZXIgd3JpdGUgZG9tYWlucywgYW5kIHdlIGNhbiB1cGRhdGUKPiAtCSAqIHRoZSBkb21haW4g dmFsdWVzIGZvciBvdXIgY2hhbmdlcy4KPiAtCSAqLwo+IC0JQlVHX09OKChvYmotPmJhc2Uud3Jp dGVfZG9tYWluICYgfkk5MTVfR0VNX0RPTUFJTl9DUFUpICE9IDApOwo+IC0KPiAtCS8qIElmIHdl J3JlIHdyaXRpbmcgdGhyb3VnaCB0aGUgQ1BVLCB0aGVuIHRoZSBHUFUgcmVhZCBkb21haW5zIHdp bGwKPiAtCSAqIG5lZWQgdG8gYmUgaW52YWxpZGF0ZWQgYXQgbmV4dCB1c2UuCj4gLQkgKi8KPiAt CWlmICh3cml0ZSkgewo+IC0JCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01B SU5fQ1BVOwo+IC0JCW9iai0+YmFzZS53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BV Owo+IC0JfQo+IC0KPiAtCWlmICh3cml0ZSkKPiAtCQlpbnRlbF9mYl9vYmpfaW52YWxpZGF0ZShv YmosIE5VTEwpOwo+IC0KPiAtCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jaGFuZ2VfZG9tYWluKG9i aiwKPiAtCQkJCQkgICAgb2xkX3JlYWRfZG9tYWlucywKPiAtCQkJCQkgICAgb2xkX3dyaXRlX2Rv bWFpbik7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLS8qIFRocm90dGxlIG91ciByZW5k ZXJpbmcgYnkgd2FpdGluZyB1bnRpbCB0aGUgcmluZyBoYXMgY29tcGxldGVkIG91ciByZXF1ZXN0 cwo+IC0gKiBlbWl0dGVkIG92ZXIgMjAgbXNlYyBhZ28uCj4gLSAqCj4gLSAqIE5vdGUgdGhhdCBp ZiB3ZSB3ZXJlIHRvIHVzZSB0aGUgY3VycmVudCBqaWZmaWVzIGVhY2ggdGltZSBhcm91bmQgdGhl IGxvb3AsCj4gLSAqIHdlIHdvdWxkbid0IGVzY2FwZSB0aGUgZnVuY3Rpb24gd2l0aCBhbnkgZnJh bWVzIG91dHN0YW5kaW5nIGlmIHRoZSB0aW1lIHRvCj4gLSAqIHJlbmRlciBhIGZyYW1lIHdhcyBv dmVyIDIwbXMuCj4gLSAqCj4gLSAqIFRoaXMgc2hvdWxkIGdldCB1cyByZWFzb25hYmxlIHBhcmFs bGVsaXNtIGJldHdlZW4gQ1BVIGFuZCBHUFUgYnV0IGFsc28KPiAtICogcmVsYXRpdmVseSBsb3cg bGF0ZW5jeSB3aGVuIGJsb2NraW5nIG9uIGEgcGFydGljdWxhciByZXF1ZXN0IHRvIGZpbmlzaC4K PiAtICovCj4gLXN0YXRpYyBpbnQKPiAtaTkxNV9nZW1fcmluZ190aHJvdHRsZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gLXsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgZHJt X2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKPiAtCXVu c2lnbmVkIGxvbmcgcmVjZW50X2Vub3VnaCA9IGppZmZpZXMgLSBtc2Vjc190b19qaWZmaWVzKDIw KTsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKPiAtCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnJpbmcgPSBOVUxMOwo+IC0JdW5zaWduZWQgcmVzZXRfY291bnRlcjsK PiAtCXUzMiBzZXFubyA9IDA7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IGk5MTVfZ2VtX3dh aXRfZm9yX2Vycm9yKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0 dXJuIHJldDsKPiAtCj4gLQlyZXQgPSBpOTE1X2dlbV9jaGVja193ZWRnZSgmZGV2X3ByaXYtPmdw dV9lcnJvciwgZmFsc2UpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCXNw aW5fbG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkocmVx dWVzdCwgJmZpbGVfcHJpdi0+bW0ucmVxdWVzdF9saXN0LCBjbGllbnRfbGlzdCkgewo+IC0JCWlm ICh0aW1lX2FmdGVyX2VxKHJlcXVlc3QtPmVtaXR0ZWRfamlmZmllcywgcmVjZW50X2Vub3VnaCkp Cj4gLQkJCWJyZWFrOwo+IC0KPiAtCQlyaW5nID0gcmVxdWVzdC0+cmluZzsKPiAtCQlzZXFubyA9 IHJlcXVlc3QtPnNlcW5vOwo+IC0JfQo+IC0JcmVzZXRfY291bnRlciA9IGF0b21pY19yZWFkKCZk ZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpOwo+IC0Jc3Bpbl91bmxvY2soJmZpbGVf cHJpdi0+bW0ubG9jayk7Cj4gLQo+IC0JaWYgKHNlcW5vID09IDApCj4gLQkJcmV0dXJuIDA7Cj4g KwkvKiBJdCBzaG91bGQgbm93IGJlIG91dCBvZiBhbnkgb3RoZXIgd3JpdGUgZG9tYWlucywgYW5k IHdlIGNhbiB1cGRhdGUKPiArCSAqIHRoZSBkb21haW4gdmFsdWVzIGZvciBvdXIgY2hhbmdlcy4K PiArCSAqLwo+ICsJQlVHX09OKChvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgfkk5MTVfR0VNX0RP TUFJTl9DUFUpICE9IDApOwo+ICAgCj4gLQlyZXQgPSBfX3dhaXRfc2Vxbm8ocmluZywgc2Vxbm8s IHJlc2V0X2NvdW50ZXIsIHRydWUsIE5VTEwsIE5VTEwpOwo+IC0JaWYgKHJldCA9PSAwKQo+IC0J CXF1ZXVlX2RlbGF5ZWRfd29yayhkZXZfcHJpdi0+d3EsICZkZXZfcHJpdi0+bW0ucmV0aXJlX3dv cmssIDApOwo+ICsJLyogSWYgd2UncmUgd3JpdGluZyB0aHJvdWdoIHRoZSBDUFUsIHRoZW4gdGhl IEdQVSByZWFkIGRvbWFpbnMgd2lsbAo+ICsJICogbmVlZCB0byBiZSBpbnZhbGlkYXRlZCBhdCBu ZXh0IHVzZS4KPiArCSAqLwo+ICsJaWYgKHdyaXRlKSB7Cj4gKwkJaW50ZWxfZmJfb2JqX2ludmFs aWRhdGUob2JqLCBOVUxMKTsKPiArCQlvYmotPmJhc2UucmVhZF9kb21haW5zID0gSTkxNV9HRU1f RE9NQUlOX0NQVTsKPiArCQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlO X0NQVTsKPiArCX0KPiAgIAo+IC0JcmV0dXJuIHJldDsKPiArCXRyYWNlX2k5MTVfZ2VtX29iamVj dF9jaGFuZ2VfZG9tYWluKG9iaiwKPiArCQkJCQkgICAgb2xkX3JlYWRfZG9tYWlucywKPiArCQkJ CQkgICAgb2xkX3dyaXRlX2RvbWFpbik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAg IHN0YXRpYyBib29sCj4gQEAgLTQyNjgsNyArMzc3MSw3IEBAIGk5MTVfZ2VtX2J1c3lfaW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2J1c3kgKmFyZ3MgPSBkYXRhOwo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmo7Cj4gLQlpbnQgcmV0Owo+ICsJaW50IHJldCwgaTsKPiAgIAo+ICAgCXJldCA9IGk5 MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7Cj4gICAJaWYgKHJldCkKPiBAQCAtNDI4 NywxMCArMzc5MCwxNiBAQCBpOTE1X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHZvaWQgKmRhdGEsCj4gICAJICovCj4gICAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2ZsdXNo X2FjdGl2ZShvYmopOwo+ICAgCj4gLQlhcmdzLT5idXN5ID0gb2JqLT5hY3RpdmU7Cj4gLQlpZiAo b2JqLT5yaW5nKSB7Cj4gLQkJQlVJTERfQlVHX09OKEk5MTVfTlVNX1JJTkdTID4gMTYpOwo+IC0J CWFyZ3MtPmJ1c3kgfD0gaW50ZWxfcmluZ19mbGFnKG9iai0+cmluZykgPDwgMTY7Cj4gKwlhcmdz LT5idXN5ID0gMDsKPiArCWlmIChvYmotPmFjdGl2ZSkgewo+ICsJCUJVSUxEX0JVR19PTihJOTE1 X05VTV9FTkdJTkVTID4gMTYpOwo+ICsJCWFyZ3MtPmJ1c3kgfD0gMTsKPiArCQlmb3IgKGkgPSAw OyBpIDwgSTkxNV9OVU1fRU5HSU5FUzsgaSsrKSAgewo+ICsJCQlpZiAob2JqLT5sYXN0X3JlYWRb aV0ucmVxdWVzdCA9PSBOVUxMKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJCQlhcmdzLT5idXN5 IHw9IDEgPDwgKDE2ICsgaSk7Cj4gKwkJfQo+ICAgCX0KPiAgIAo+ICAgCWRybV9nZW1fb2JqZWN0 X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwo+IEBAIC00Mjk5LDExICszODA4LDU4IEBAIHVubG9j azoKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gKy8qIFRocm90dGxlIG91ciByZW5kZXJp bmcgYnkgd2FpdGluZyB1bnRpbCB0aGUgcmluZyBoYXMgY29tcGxldGVkIG91ciByZXF1ZXN0cwo+ ICsgKiBlbWl0dGVkIG92ZXIgMjAgbXNlYyBhZ28uCj4gKyAqCj4gKyAqIE5vdGUgdGhhdCBpZiB3 ZSB3ZXJlIHRvIHVzZSB0aGUgY3VycmVudCBqaWZmaWVzIGVhY2ggdGltZSBhcm91bmQgdGhlIGxv b3AsCj4gKyAqIHdlIHdvdWxkbid0IGVzY2FwZSB0aGUgZnVuY3Rpb24gd2l0aCBhbnkgZnJhbWVz IG91dHN0YW5kaW5nIGlmIHRoZSB0aW1lIHRvCj4gKyAqIHJlbmRlciBhIGZyYW1lIHdhcyBvdmVy IDIwbXMuCj4gKyAqCj4gKyAqIFRoaXMgc2hvdWxkIGdldCB1cyByZWFzb25hYmxlIHBhcmFsbGVs aXNtIGJldHdlZW4gQ1BVIGFuZCBHUFUgYnV0IGFsc28KPiArICogcmVsYXRpdmVseSBsb3cgbGF0 ZW5jeSB3aGVuIGJsb2NraW5nIG9uIGEgcGFydGljdWxhciByZXF1ZXN0IHRvIGZpbmlzaC4KPiAr ICovCj4gICBpbnQKPiAgIGk5MTVfZ2VtX3Rocm90dGxlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCj4gLQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQo+ICsJ CQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICB7Cj4gLQlyZXR1cm4gaTkxNV9nZW1fcmluZ190 aHJvdHRsZShkZXYsIGZpbGVfcHJpdik7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0 ZSAqZmlsZV9wcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7Cj4gKwl1bnNpZ25lZCBsb25nIHJlY2Vu dF9lbm91Z2ggPSBqaWZmaWVzIC0gbXNlY3NfdG9famlmZmllcygyMCk7Cj4gKwlzdHJ1Y3QgaTkx NV9nZW1fcmVxdWVzdCAqcnEsICp0bXA7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGk5MTVf Z2VtX3dhaXRfZm9yX2Vycm9yKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiB1c2VkIGZvciBxdWVyeWluZyB3aGV0aGVyaW5nIHRo ZSBHUFUgaXMgd2VkZ2VkIGJ5IGxlZ2FjeSB1c2Vyc3BhY2UgKi8KPiArCWlmIChpOTE1X3Rlcm1p bmFsbHlfd2VkZ2VkKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKSkKPiArCQlyZXR1cm4gLUVJTzsKPiAr Cj4gKwlzcGluX2xvY2soJmZpbGVfcHJpdi0+bW0ubG9jayk7Cj4gKwlycSA9IE5VTEw7Cj4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmZpbGVfcHJpdi0+bW0ucmVxdWVzdF9saXN0LCBjbGll bnRfbGlzdCkgewo+ICsJCWlmICh0aW1lX2FmdGVyX2VxKHRtcC0+ZW1pdHRlZF9qaWZmaWVzLCBy ZWNlbnRfZW5vdWdoKSkKPiArCQkJYnJlYWs7Cj4gKwkJcnEgPSB0bXA7Cj4gKwl9Cj4gKwlycSA9 IGk5MTVfcmVxdWVzdF9nZXQocnEpOwo+ICsJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+bW0ubG9j ayk7Cj4gKwo+ICsJaWYgKHJxICE9IE5VTEwpIHsKPiArCQlpZiAocnEtPmJyZWFkY3J1bWJbcnEt PmVuZ2luZS0+aWRdID09IDApIHsKPiArCQkJcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVw dGlibGUoZGV2KTsKPiArCQkJaWYgKHJldCA9PSAwKSB7Cj4gKwkJCQlyZXQgPSBpOTE1X3JlcXVl c3RfZW1pdF9icmVhZGNydW1iKHJxKTsKPiArCQkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwo+ICsJCQl9Cj4gKwkJfQo+ICsJCWlmIChyZXQgPT0gMCkKPiArCQkJcmV0ID0gX19p OTE1X3JlcXVlc3Rfd2FpdChycSwgdHJ1ZSwgTlVMTCwgTlVMTCk7Cj4gKwkJaTkxNV9yZXF1ZXN0 X3B1dF9fdW5sb2NrZWQocnEpOwo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gICB9Cj4gICAK PiAgIGludAo+IEBAIC00MzU2LDggKzM5MTIsMTMgQEAgdW5sb2NrOgo+ICAgdm9pZCBpOTE1X2dl bV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJICBj b25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgKm9wcykKPiAgIHsKPiArCWludCBp Owo+ICsKPiAgIAlJTklUX0xJU1RfSEVBRCgmb2JqLT5nbG9iYWxfbGlzdCk7Cj4gLQlJTklUX0xJ U1RfSEVBRCgmb2JqLT5yaW5nX2xpc3QpOwo+ICsJSU5JVF9MSVNUX0hFQUQoJm9iai0+bGFzdF9m ZW5jZS5lbmdpbmVfbGlzdCk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmb2JqLT5sYXN0X3dyaXRlLmVu Z2luZV9saXN0KTsKPiArCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9FTkdJTkVTOyBpKyspCj4g KwkJSU5JVF9MSVNUX0hFQUQoJm9iai0+bGFzdF9yZWFkW2ldLmVuZ2luZV9saXN0KTsKPiAgIAlJ TklUX0xJU1RfSEVBRCgmb2JqLT5vYmpfZXhlY19saW5rKTsKPiAgIAlJTklUX0xJU1RfSEVBRCgm b2JqLT52bWFfbGlzdCk7Cj4gICAKPiBAQCAtNDU0MywxMjEgKzQxMDQsNTkgQEAgdm9pZCBpOTE1 X2dlbV92bWFfZGVzdHJveShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIH0KPiAgIAo+ICAgc3Rh dGljIHZvaWQKPiAtaTkxNV9nZW1fc3RvcF9yaW5nYnVmZmVycyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQo+ICtpOTE1X2dlbV9jbGVhbnVwX2VuZ2luZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+ICAgCWludCBpOwo+ICAg Cj4gLQlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2LCBpKQo+IC0JCWRldl9wcml2LT5ndC5z dG9wX3JpbmcocmluZyk7Cj4gLX0KPiAtCj4gLWludAo+IC1pOTE1X2dlbV9zdXNwZW5kKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlpbnQgcmV0ID0gMDsKPiAtCj4gLQltdXRleF9s b2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQlpZiAoZGV2X3ByaXYtPnVtcy5tbV9zdXNwZW5k ZWQpCj4gLQkJZ290byBlcnI7Cj4gLQo+IC0JcmV0ID0gaTkxNV9ncHVfaWRsZShkZXYpOwo+IC0J aWYgKHJldCkKPiAtCQlnb3RvIGVycjsKPiAtCj4gLQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMo ZGV2KTsKPiAtCj4gLQkvKiBVbmRlciBVTVMsIGJlIHBhcmFub2lkIGFuZCBldmljdC4gKi8KPiAt CWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKPiAtCQlp OTE1X2dlbV9ldmljdF9ldmVyeXRoaW5nKGRldik7Cj4gLQo+IC0JaTkxNV9nZW1fc3RvcF9yaW5n YnVmZmVycyhkZXYpOwo+IC0KPiAtCS8qIEhhY2shICBEb24ndCBsZXQgYW55Ym9keSBkbyBleGVj YnVmIHdoaWxlIHdlIGRvbid0IGNvbnRyb2wgdGhlIGNoaXAuCj4gLQkgKiBXZSBuZWVkIHRvIHJl cGxhY2UgdGhpcyB3aXRoIGEgc2VtYXBob3JlLCBvciBzb21ldGhpbmcuCj4gLQkgKiBBbmQgbm90 IGNvbmZvdW5kIHVtcy5tbV9zdXNwZW5kZWQhCj4gLQkgKi8KPiAtCWRldl9wcml2LT51bXMubW1f c3VzcGVuZGVkID0gIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LAo+IC0JCQkJCQkJICAgICBE UklWRVJfTU9ERVNFVCk7Cj4gLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAt Cj4gLQlkZWxfdGltZXJfc3luYygmZGV2X3ByaXYtPmdwdV9lcnJvci5oYW5nY2hlY2tfdGltZXIp Owo+IC0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZXZfcHJpdi0+bW0ucmV0aXJlX3dvcmsp Owo+IC0JZmx1c2hfZGVsYXllZF93b3JrKCZkZXZfcHJpdi0+bW0uaWRsZV93b3JrKTsKPiArCS8q IE5vdCB0aGUgcmVndWxhciBmb3JfZWFjaF9lbmdpbmUgc28gd2UgY2FuIGNsZWFudXAgYSBmYWls ZWQgc2V0dXAgKi8KPiArCWZvciAoaSA9MDsgaSA8IEk5MTVfTlVNX0VOR0lORVM7IGkrKykgewo+ ICsJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9ICZ0b19pOTE1KGRldiktPmVuZ2lu ZVtpXTsKPiAgIAo+IC0JcmV0dXJuIDA7Cj4gKwkJaWYgKGVuZ2luZS0+aTkxNSA9PSBOVUxMKQo+ ICsJCQljb250aW51ZTsKPiAgIAo+IC1lcnI6Cj4gLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0 X211dGV4KTsKPiAtCXJldHVybiByZXQ7Cj4gKwkJaW50ZWxfZW5naW5lX2NsZWFudXAoZW5naW5l KTsKPiArCX0KPiAgIH0KPiAgIAo+IC1pbnQgaTkxNV9nZW1fbDNfcmVtYXAoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZywgaW50IHNsaWNlKQo+ICtzdGF0aWMgaW50Cj4gK2k5MTVfZ2VtX3Jl c3VtZV9lbmdpbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXUzMiByZWdfYmFzZSA9IEdFTjdfTDNMT0df QkFTRSArIChzbGljZSAqIDB4MjAwKTsKPiAtCXUzMiAqcmVtYXBfaW5mbyA9IGRldl9wcml2LT5s M19wYXJpdHkucmVtYXBfaW5mb1tzbGljZV07Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmU7Cj4gICAJaW50IGksIHJldDsKPiAgIAo+IC0JaWYgKCFIQVNfTDNfRFBGKGRldikgfHwg IXJlbWFwX2luZm8pCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JcmV0ID0gaW50ZWxfcmluZ19iZWdp bihyaW5nLCBHRU43X0wzTE9HX1NJWkUgLyA0ICogMyk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVy biByZXQ7Cj4gLQo+IC0JLyoKPiAtCSAqIE5vdGU6IFdlIGRvIG5vdCB3b3JyeSBhYm91dCB0aGUg Y29uY3VycmVudCByZWdpc3RlciBjYWNoZWxpbmUgaGFuZwo+IC0JICogaGVyZSBiZWNhdXNlIG5v IG90aGVyIGNvZGUgc2hvdWxkIGFjY2VzcyB0aGVzZSByZWdpc3RlcnMgb3RoZXIgdGhhbgo+IC0J ICogYXQgaW5pdGlhbGl6YXRpb24gdGltZS4KPiAtCSAqLwo+IC0JZm9yIChpID0gMDsgaSA8IEdF TjdfTDNMT0dfU0laRTsgaSArPSA0KSB7Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX0xP QURfUkVHSVNURVJfSU1NKDEpKTsKPiAtCQlpbnRlbF9yaW5nX2VtaXQocmluZywgcmVnX2Jhc2Ug KyBpKTsKPiAtCQlpbnRlbF9yaW5nX2VtaXQocmluZywgcmVtYXBfaW5mb1tpLzRdKTsKPiArCWZv cl9lYWNoX2VuZ2luZShlbmdpbmUsIHRvX2k5MTUoZGV2KSwgaSkgewo+ICsJCXJldCA9IGludGVs X2VuZ2luZV9yZXN1bWUoZW5naW5lKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ ICAgCX0KPiAgIAo+IC0JaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+IC0KPiAtCXJldHVybiBy ZXQ7Cj4gKwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC12b2lkIGk5MTVfZ2VtX2luaXRfc3dpenps aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3N0YXRpYyBpbnQKPiAraTkxNV9nZW1fc3Vz cGVuZF9lbmdpbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0KPiAtCWlmIChJ TlRFTF9JTkZPKGRldiktPmdlbiA8IDUgfHwKPiAtCSAgICBkZXZfcHJpdi0+bW0uYml0XzZfc3dp enpsZV94ID09IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FKQo+IC0JCXJldHVybjsKPiAtCj4gLQlJ OTE1X1dSSVRFKERJU1BfQVJCX0NUTCwgSTkxNV9SRUFEKERJU1BfQVJCX0NUTCkgfAo+IC0JCQkJ IERJU1BfVElMRV9TVVJGQUNFX1NXSVpaTElORyk7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmU7Cj4gKwlpbnQgaSwgcmV0Owo+ICAgCj4gLQlpZiAoSVNfR0VONShkZXYpKQo+IC0J CXJldHVybjsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIHRvX2k5MTUoZGV2KSwgaSkgewo+ ICsJCXJldCA9IGludGVsX2VuZ2luZV9zdXNwZW5kKGVuZ2luZSk7Cj4gKwkJaWYgKHJldCkKPiAr CQkJcmV0dXJuIHJldDsKPiArCX0KPiAgIAo+IC0JSTkxNV9XUklURShUSUxFQ1RMLCBJOTE1X1JF QUQoVElMRUNUTCkgfCBUSUxFQ1RMX1NXWkNUTCk7Cj4gLQlpZiAoSVNfR0VONihkZXYpKQo+IC0J CUk5MTVfV1JJVEUoQVJCX01PREUsIF9NQVNLRURfQklUX0VOQUJMRShBUkJfTU9ERV9TV0laWkxF X1NOQikpOwo+IC0JZWxzZSBpZiAoSVNfR0VONyhkZXYpKQo+IC0JCUk5MTVfV1JJVEUoQVJCX01P REUsIF9NQVNLRURfQklUX0VOQUJMRShBUkJfTU9ERV9TV0laWkxFX0lWQikpOwo+IC0JZWxzZSBp ZiAoSVNfR0VOOChkZXYpKQo+IC0JCUk5MTVfV1JJVEUoR0FNVEFSQk1PREUsIF9NQVNLRURfQklU X0VOQUJMRShBUkJfTU9ERV9TV0laWkxFX0JEVykpOwo+IC0JZWxzZQo+IC0JCUJVRygpOwo+ICsJ cmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBib29sCj4gLWludGVsX2VuYWJsZV9ibHQo c3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAraW50ZWxfZW5hYmxlX2JsdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICB7Cj4gLQlpZiAoIUhBU19CTFQoZGV2KSkKPiArCWlm ICghSEFTX0JMVChkZXZfcHJpdikpCj4gICAJCXJldHVybiBmYWxzZTsKPiAgIAo+ICAgCS8qIFRo ZSBibGl0dGVyIHdhcyBkeXNmdW5jdGlvbmFsIG9uIGVhcmx5IHByb3RvdHlwZXMgKi8KPiAtCWlm IChJU19HRU42KGRldikgJiYgZGV2LT5wZGV2LT5yZXZpc2lvbiA8IDgpIHsKPiArCWlmIChJU19H RU42KGRldl9wcml2KSAmJiBkZXZfcHJpdi0+ZGV2LT5wZGV2LT5yZXZpc2lvbiA8IDgpIHsKPiAg IAkJRFJNX0lORk8oIkJMVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcHJlLXByb2R1Y3Rpb24gaGFy ZHdhcmU7Igo+ICAgCQkJICIgZ3JhcGhpY3MgcGVyZm9ybWFuY2Ugd2lsbCBiZSBkZWdyYWRlZC5c biIpOwo+ICAgCQlyZXR1cm4gZmFsc2U7Cj4gQEAgLTQ2NjYsMzQgKzQxNjUsMzIgQEAgaW50ZWxf ZW5hYmxlX2JsdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgCXJldHVybiB0cnVlOwo+ICAg fQo+ICAgCj4gLXN0YXRpYyB2b2lkIGluaXRfdW51c2VkX3Jpbmcoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdTMyIGJhc2UpCj4gK3N0YXRpYyB2b2lkIHN0b3BfdW51c2VkX3Jpbmcoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgYmFzZSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQo+ICAgCUk5MTVf V1JJVEUoUklOR19DVEwoYmFzZSksIDApOwo+ICAgCUk5MTVfV1JJVEUoUklOR19IRUFEKGJhc2Up LCAwKTsKPiAgIAlJOTE1X1dSSVRFKFJJTkdfVEFJTChiYXNlKSwgMCk7Cj4gICAJSTkxNV9XUklU RShSSU5HX1NUQVJUKGJhc2UpLCAwKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBpbml0X3Vu dXNlZF9yaW5ncyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICtzdGF0aWMgdm9pZCBzdG9wX3Vu dXNlZF9yaW5ncyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICB7Cj4gLQlp ZiAoSVNfSTgzMChkZXYpKSB7Cj4gLQkJaW5pdF91bnVzZWRfcmluZyhkZXYsIFBSQjFfQkFTRSk7 Cj4gLQkJaW5pdF91bnVzZWRfcmluZyhkZXYsIFNSQjBfQkFTRSk7Cj4gLQkJaW5pdF91bnVzZWRf cmluZyhkZXYsIFNSQjFfQkFTRSk7Cj4gLQkJaW5pdF91bnVzZWRfcmluZyhkZXYsIFNSQjJfQkFT RSk7Cj4gLQkJaW5pdF91bnVzZWRfcmluZyhkZXYsIFNSQjNfQkFTRSk7Cj4gLQl9IGVsc2UgaWYg KElTX0dFTjIoZGV2KSkgewo+IC0JCWluaXRfdW51c2VkX3JpbmcoZGV2LCBTUkIwX0JBU0UpOwo+ IC0JCWluaXRfdW51c2VkX3JpbmcoZGV2LCBTUkIxX0JBU0UpOwo+IC0JfSBlbHNlIGlmIChJU19H RU4zKGRldikpIHsKPiAtCQlpbml0X3VudXNlZF9yaW5nKGRldiwgUFJCMV9CQVNFKTsKPiAtCQlp bml0X3VudXNlZF9yaW5nKGRldiwgUFJCMl9CQVNFKTsKPiArCWlmIChJU19JODMwKGRldl9wcml2 KSkgewo+ICsJCXN0b3BfdW51c2VkX3JpbmcoZGV2X3ByaXYsIFBSQjFfQkFTRSk7Cj4gKwkJc3Rv cF91bnVzZWRfcmluZyhkZXZfcHJpdiwgU1JCMF9CQVNFKTsKPiArCQlzdG9wX3VudXNlZF9yaW5n KGRldl9wcml2LCBTUkIxX0JBU0UpOwo+ICsJCXN0b3BfdW51c2VkX3JpbmcoZGV2X3ByaXYsIFNS QjJfQkFTRSk7Cj4gKwkJc3RvcF91bnVzZWRfcmluZyhkZXZfcHJpdiwgU1JCM19CQVNFKTsKPiAr CX0gZWxzZSBpZiAoSVNfR0VOMihkZXZfcHJpdikpIHsKPiArCQlzdG9wX3VudXNlZF9yaW5nKGRl dl9wcml2LCBTUkIwX0JBU0UpOwo+ICsJCXN0b3BfdW51c2VkX3JpbmcoZGV2X3ByaXYsIFNSQjFf QkFTRSk7Cj4gKwl9IGVsc2UgaWYgKElTX0dFTjMoZGV2X3ByaXYpKSB7Cj4gKwkJc3RvcF91bnVz ZWRfcmluZyhkZXZfcHJpdiwgUFJCMV9CQVNFKTsKPiArCQlzdG9wX3VudXNlZF9yaW5nKGRldl9w cml2LCBQUkIyX0JBU0UpOwo+ICAgCX0KPiAgIH0KPiAgIAo+IC1pbnQgaTkxNV9nZW1faW5pdF9y aW5ncyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICtzdGF0aWMgaW50IGk5MTVfZ2VtX3NldHVw X2VuZ2luZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICAgCWludCByZXQ7Cj4g QEAgLTQ3MDQsNjEgKzQyMDEsMTE2IEBAIGludCBpOTE1X2dlbV9pbml0X3JpbmdzKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gICAJICogd2lsbCBwcmV2ZW50IGMzIGVudHJ5LiBNYWtlcyBzdXJl IGFsbCB1bnVzZWQgcmluZ3MKPiAgIAkgKiBhcmUgdG90YWxseSBpZGxlLgo+ICAgCSAqLwo+IC0J aW5pdF91bnVzZWRfcmluZ3MoZGV2KTsKPiArCXN0b3BfdW51c2VkX3JpbmdzKGRldl9wcml2KTsK PiAgIAo+IC0JcmV0ID0gaW50ZWxfaW5pdF9yZW5kZXJfcmluZ19idWZmZXIoZGV2KTsKPiArCXJl dCA9IGludGVsX2luaXRfcmVuZGVyX2VuZ2luZShkZXZfcHJpdik7Cj4gICAJaWYgKHJldCkKPiAt CQlyZXR1cm4gcmV0Owo+ICsJCWdvdG8gY2xlYW51cDsKPiAgIAo+IC0JaWYgKEhBU19CU0QoZGV2 KSkgewo+IC0JCXJldCA9IGludGVsX2luaXRfYnNkX3JpbmdfYnVmZmVyKGRldik7Cj4gKwlpZiAo SEFTX0JTRChkZXZfcHJpdikpIHsKPiArCQlyZXQgPSBpbnRlbF9pbml0X2JzZF9lbmdpbmUoZGV2 X3ByaXYpOwo+ICAgCQlpZiAocmV0KQo+IC0JCQlnb3RvIGNsZWFudXBfcmVuZGVyX3Jpbmc7Cj4g KwkJCWdvdG8gY2xlYW51cDsKPiAgIAl9Cj4gICAKPiAtCWlmIChpbnRlbF9lbmFibGVfYmx0KGRl dikpIHsKPiAtCQlyZXQgPSBpbnRlbF9pbml0X2JsdF9yaW5nX2J1ZmZlcihkZXYpOwo+ICsJaWYg KGludGVsX2VuYWJsZV9ibHQoZGV2X3ByaXYpKSB7Cj4gKwkJcmV0ID0gaW50ZWxfaW5pdF9ibHRf ZW5naW5lKGRldl9wcml2KTsKPiAgIAkJaWYgKHJldCkKPiAtCQkJZ290byBjbGVhbnVwX2JzZF9y aW5nOwo+ICsJCQlnb3RvIGNsZWFudXA7Cj4gICAJfQo+ICAgCj4gLQlpZiAoSEFTX1ZFQk9YKGRl dikpIHsKPiAtCQlyZXQgPSBpbnRlbF9pbml0X3ZlYm94X3JpbmdfYnVmZmVyKGRldik7Cj4gKwlp ZiAoSEFTX1ZFQk9YKGRldl9wcml2KSkgewo+ICsJCXJldCA9IGludGVsX2luaXRfdmVib3hfZW5n aW5lKGRldl9wcml2KTsKPiAgIAkJaWYgKHJldCkKPiAtCQkJZ290byBjbGVhbnVwX2JsdF9yaW5n Owo+ICsJCQlnb3RvIGNsZWFudXA7Cj4gICAJfQo+ICAgCj4gLQlpZiAoSEFTX0JTRDIoZGV2KSkg ewo+IC0JCXJldCA9IGludGVsX2luaXRfYnNkMl9yaW5nX2J1ZmZlcihkZXYpOwo+ICsJaWYgKEhB U19CU0QyKGRldl9wcml2KSkgewo+ICsJCXJldCA9IGludGVsX2luaXRfYnNkMl9lbmdpbmUoZGV2 X3ByaXYpOwo+ICAgCQlpZiAocmV0KQo+IC0JCQlnb3RvIGNsZWFudXBfdmVib3hfcmluZzsKPiAr CQkJZ290byBjbGVhbnVwOwo+ICAgCX0KPiAgIAo+IC0JcmV0ID0gaTkxNV9nZW1fc2V0X3NlcW5v KGRldiwgKCh1MzIpfjAgLSAweDEwMDApKTsKPiArCXJldHVybiAwOwo+ICsKPiArY2xlYW51cDoK PiArCWk5MTVfZ2VtX2NsZWFudXBfZW5naW5lcyhkZXYpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiAraW50Cj4gK2k5MTVfZ2VtX3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAr ewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4 KTsKPiArCWlmIChkZXZfcHJpdi0+dW1zLm1tX3N1c3BlbmRlZCkKPiArCQlnb3RvIGVycjsKPiAr Cj4gKwlyZXQgPSBpOTE1X2dwdV9pZGxlKGRldik7Cj4gICAJaWYgKHJldCkKPiAtCQlnb3RvIGNs ZWFudXBfYnNkMl9yaW5nOwo+ICsJCWdvdG8gZXJyOwo+ICAgCj4gLQlyZXR1cm4gMDsKPiArCWk5 MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOwo+ICsKPiArCS8qIFVuZGVyIFVNUywgYmUgcGFy YW5vaWQgYW5kIGV2aWN0LiAqLwo+ICsJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwg RFJJVkVSX01PREVTRVQpKQo+ICsJCWk5MTVfZ2VtX2V2aWN0X2V2ZXJ5dGhpbmcoZGV2KTsKPiAr Cj4gKwlyZXQgPSBpOTE1X2dlbV9zdXNwZW5kX2VuZ2luZXMoZGV2KTsKPiArCWlmIChyZXQpCj4g KwkJZ290byBlcnI7Cj4gKwo+ICsJLyogSGFjayEgIERvbid0IGxldCBhbnlib2R5IGRvIGV4ZWNi dWYgd2hpbGUgd2UgZG9uJ3QgY29udHJvbCB0aGUgY2hpcC4KPiArCSAqIFdlIG5lZWQgdG8gcmVw bGFjZSB0aGlzIHdpdGggYSBzZW1hcGhvcmUsIG9yIHNvbWV0aGluZy4KPiArCSAqIEFuZCBub3Qg Y29uZm91bmQgdW1zLm1tX3N1c3BlbmRlZCEKPiArCSAqLwo+ICsJZGV2X3ByaXYtPnVtcy5tbV9z dXNwZW5kZWQgPSAhZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsCj4gKwkJCQkJCQkgICAgIERS SVZFUl9NT0RFU0VUKTsKPiArCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsK PiArCWRlbF90aW1lcl9zeW5jKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLmhhbmdjaGVja190aW1lcik7 Cj4gKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldl9wcml2LT5tbS5yZXRpcmVfd29yayk7 Cj4gKwlmbHVzaF9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5tbS5pZGxlX3dvcmspOwo+ICAgCj4g LWNsZWFudXBfYnNkMl9yaW5nOgo+IC0JaW50ZWxfY2xlYW51cF9yaW5nX2J1ZmZlcigmZGV2X3By aXYtPnJpbmdbVkNTMl0pOwo+IC1jbGVhbnVwX3ZlYm94X3Jpbmc6Cj4gLQlpbnRlbF9jbGVhbnVw X3JpbmdfYnVmZmVyKCZkZXZfcHJpdi0+cmluZ1tWRUNTXSk7Cj4gLWNsZWFudXBfYmx0X3Jpbmc6 Cj4gLQlpbnRlbF9jbGVhbnVwX3JpbmdfYnVmZmVyKCZkZXZfcHJpdi0+cmluZ1tCQ1NdKTsKPiAt Y2xlYW51cF9ic2RfcmluZzoKPiAtCWludGVsX2NsZWFudXBfcmluZ19idWZmZXIoJmRldl9wcml2 LT5yaW5nW1ZDU10pOwo+IC1jbGVhbnVwX3JlbmRlcl9yaW5nOgo+IC0JaW50ZWxfY2xlYW51cF9y aW5nX2J1ZmZlcigmZGV2X3ByaXYtPnJpbmdbUkNTXSk7Cj4gKwlyZXR1cm4gMDsKPiAgIAo+ICtl cnI6Cj4gKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgIAlyZXR1cm4gcmV0 Owo+ICAgfQo+ICAgCj4gK3ZvaWQgaTkxNV9nZW1faW5pdF9zd2l6emxpbmcoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA1IHx8 Cj4gKwkgICAgZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeCA9PSBJOTE1X0JJVF82X1NXSVpa TEVfTk9ORSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJSTkxNV9XUklURShESVNQX0FSQl9DVEwsIEk5 MTVfUkVBRChESVNQX0FSQl9DVEwpIHwKPiArCQkJCSBESVNQX1RJTEVfU1VSRkFDRV9TV0laWkxJ TkcpOwo+ICsKPiArCWlmIChJU19HRU41KGRldikpCj4gKwkJcmV0dXJuOwo+ICsKPiArCUk5MTVf V1JJVEUoVElMRUNUTCwgSTkxNV9SRUFEKFRJTEVDVEwpIHwgVElMRUNUTF9TV1pDVEwpOwo+ICsJ aWYgKElTX0dFTjYoZGV2KSkKPiArCQlJOTE1X1dSSVRFKEFSQl9NT0RFLCBfTUFTS0VEX0JJVF9F TkFCTEUoQVJCX01PREVfU1dJWlpMRV9TTkIpKTsKPiArCWVsc2UgaWYgKElTX0dFTjcoZGV2KSkK PiArCQlJOTE1X1dSSVRFKEFSQl9NT0RFLCBfTUFTS0VEX0JJVF9FTkFCTEUoQVJCX01PREVfU1dJ WlpMRV9JVkIpKTsKPiArCWVsc2UgaWYgKElTX0dFTjgoZGV2KSkKPiArCQlJOTE1X1dSSVRFKEdB TVRBUkJNT0RFLCBfTUFTS0VEX0JJVF9FTkFCTEUoQVJCX01PREVfU1dJWlpMRV9CRFcpKTsKPiAr CWVsc2UKPiArCQlCVUcoKTsKPiArfQo+ICsKPiAgIGludAo+ICAgaTkxNV9nZW1faW5pdF9odyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlpbnQgcmV0LCBpOwo+ICsJaW50IHJl dDsKPiAgIAo+ICAgCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8IDYgJiYgIWludGVsX2VuYWJs ZV9ndHQoKSkKPiAgIAkJcmV0dXJuIC1FSU87Cj4gQEAgLTQ3ODQsMzMgKzQzMzYsMTEgQEAgaTkx NV9nZW1faW5pdF9odyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgCj4gICAJaTkxNV9nZW1f aW5pdF9zd2l6emxpbmcoZGV2KTsKPiAgIAo+IC0JcmV0ID0gZGV2X3ByaXYtPmd0LmluaXRfcmlu Z3MoZGV2KTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlmb3IgKGkgPSAw OyBpIDwgTlVNX0wzX1NMSUNFUyhkZXYpOyBpKyspCj4gLQkJaTkxNV9nZW1fbDNfcmVtYXAoJmRl dl9wcml2LT5yaW5nW1JDU10sIGkpOwo+IC0KPiAtCS8qCj4gLQkgKiBYWFg6IENvbnRleHRzIHNo b3VsZCBvbmx5IGJlIGluaXRpYWxpemVkIG9uY2UuIERvaW5nIGEgc3dpdGNoIHRvIHRoZQo+IC0J ICogZGVmYXVsdCBjb250ZXh0IHN3aXRjaCBob3dldmVyIGlzIHNvbWV0aGluZyB3ZSdkIGxpa2Ug dG8gZG8gYWZ0ZXIKPiAtCSAqIHJlc2V0IG9yIHRoYXcgKHRoZSBsYXR0ZXIgbWF5IG5vdCBhY3R1 YWxseSBiZSBuZWNlc3NhcnkgZm9yIEhXLCBidXQKPiAtCSAqIGdvZXMgd2l0aCBvdXIgY29kZSBi ZXR0ZXIpLiBDb250ZXh0IHN3aXRjaGluZyByZXF1aXJlcyByaW5ncyAoZm9yCj4gLQkgKiB0aGUg ZG9fc3dpdGNoKSwgYnV0IGJlZm9yZSBlbmFibGluZyBQUEdUVC4gU28gZG9uJ3QgbW92ZSB0aGlz Lgo+IC0JICovCj4gLQlyZXQgPSBpOTE1X2dlbV9jb250ZXh0X2VuYWJsZShkZXZfcHJpdik7Cj4g LQlpZiAocmV0ICYmIHJldCAhPSAtRUlPKSB7Cj4gLQkJRFJNX0VSUk9SKCJDb250ZXh0IGVuYWJs ZSBmYWlsZWQgJWRcbiIsIHJldCk7Cj4gLQkJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRl dik7Cj4gLQo+IC0JCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+ICAgCXJldCA9IGk5MTVfcHBndHRf aW5pdF9odyhkZXYpOwo+IC0JaWYgKHJldCAmJiByZXQgIT0gLUVJTykgewo+IC0JCURSTV9FUlJP UigiUFBHVFQgZW5hYmxlIGZhaWxlZCAlZFxuIiwgcmV0KTsKPiAtCQlpOTE1X2dlbV9jbGVhbnVw X3JpbmdidWZmZXIoZGV2KTsKPiAtCX0KPiArCWlmIChyZXQgPT0gMCkKPiArCQlyZXQgPSBpOTE1 X2dlbV9jb250ZXh0X2VuYWJsZShkZXZfcHJpdik7Cj4gKwlpZiAocmV0ID09IDApCj4gKwkJcmV0 ID0gaTkxNV9nZW1fcmVzdW1lX2VuZ2luZXMoZGV2KTsKPiAgIAo+ICAgCXJldHVybiByZXQ7Cj4g ICB9Cj4gQEAgLTQ4MjAsOSArNDM1MCw2IEBAIGludCBpOTE1X2dlbV9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gLQlpOTE1LmVuYWJsZV9leGVjbGlz dHMgPSBpbnRlbF9zYW5pdGl6ZV9lbmFibGVfZXhlY2xpc3RzKGRldiwKPiAtCQkJaTkxNS5lbmFi bGVfZXhlY2xpc3RzKTsKPiAtCj4gICAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ ICAgCj4gICAJaWYgKElTX1ZBTExFWVZJRVcoZGV2KSkgewo+IEBAIC00ODMzLDE4ICs0MzYwLDYg QEAgaW50IGk5MTVfZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIAkJCURSTV9E RUJVR19EUklWRVIoImFsbG93IHdha2UgYWNrIHRpbWVkIG91dFxuIik7Cj4gICAJfQo+ICAgCj4g LQlpZiAoIWk5MTUuZW5hYmxlX2V4ZWNsaXN0cykgewo+IC0JCWRldl9wcml2LT5ndC5kb19leGVj YnVmID0gaTkxNV9nZW1fcmluZ2J1ZmZlcl9zdWJtaXNzaW9uOwo+IC0JCWRldl9wcml2LT5ndC5p bml0X3JpbmdzID0gaTkxNV9nZW1faW5pdF9yaW5nczsKPiAtCQlkZXZfcHJpdi0+Z3QuY2xlYW51 cF9yaW5nID0gaW50ZWxfY2xlYW51cF9yaW5nX2J1ZmZlcjsKPiAtCQlkZXZfcHJpdi0+Z3Quc3Rv cF9yaW5nID0gaW50ZWxfc3RvcF9yaW5nX2J1ZmZlcjsKPiAtCX0gZWxzZSB7Cj4gLQkJZGV2X3By aXYtPmd0LmRvX2V4ZWNidWYgPSBpbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbjsKPiAtCQlkZXZf cHJpdi0+Z3QuaW5pdF9yaW5ncyA9IGludGVsX2xvZ2ljYWxfcmluZ3NfaW5pdDsKPiAtCQlkZXZf cHJpdi0+Z3QuY2xlYW51cF9yaW5nID0gaW50ZWxfbG9naWNhbF9yaW5nX2NsZWFudXA7Cj4gLQkJ ZGV2X3ByaXYtPmd0LnN0b3BfcmluZyA9IGludGVsX2xvZ2ljYWxfcmluZ19zdG9wOwo+IC0JfQo+ IC0KPiAgIAlyZXQgPSBpOTE1X2dlbV9pbml0X3VzZXJwdHIoZGV2KTsKPiAgIAlpZiAocmV0KSB7 Cj4gICAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IEBAIC00ODUzLDEzICs0 MzY4LDEyIEBAIGludCBpOTE1X2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAK PiAgIAlpOTE1X2dlbV9pbml0X2dsb2JhbF9ndHQoZGV2KTsKPiAgIAo+IC0JcmV0ID0gaTkxNV9n ZW1fY29udGV4dF9pbml0KGRldik7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZk ZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gLQlyZXQgPSBp OTE1X2dlbV9pbml0X2h3KGRldik7Cj4gKwlnZW42X2d0X2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2 LCBGT1JDRVdBS0VfQUxMKTsKPiArCXJldCA9IGk5MTVfZ2VtX3NldHVwX2VuZ2luZXMoZGV2KTsK PiArCWlmIChyZXQgPT0gMCkKPiArCQlyZXQgPSBpOTE1X2dlbV9jb250ZXh0X2luaXQoZGV2KTsK PiArCWlmIChyZXQgPT0gMCkKPiArCQlyZXQgPSBpOTE1X2dlbV9pbml0X2h3KGRldik7Cj4gICAJ aWYgKHJldCA9PSAtRUlPKSB7Cj4gICAJCS8qIEFsbG93IHJpbmcgaW5pdGlhbGlzYXRpb24gdG8g ZmFpbCBieSBtYXJraW5nIHRoZSBHUFUgYXMKPiAgIAkJICogd2VkZ2VkLiBCdXQgd2Ugb25seSB3 YW50IHRvIGRvIHRoaXMgd2hlcmUgdGhlIEdQVSBpcyBhbmdyeSwKPiBAQCAtNDg2OSwyMCArNDM4 MywxNiBAQCBpbnQgaTkxNV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgCQlh dG9taWNfc2V0X21hc2soSTkxNV9XRURHRUQsICZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2Nv dW50ZXIpOwo+ICAgCQlyZXQgPSAwOwo+ICAgCX0KPiArCWdlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQo ZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOwo+ICAgCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwo+ICAgCj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+IC12b2lkCj4gLWk5MTVf Z2VtX2NsZWFudXBfcmluZ2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt2b2lkIGk5 MTVfZ2VtX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIHsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nOwo+IC0JaW50IGk7Cj4gLQo+IC0JZm9yX2VhY2hfcmluZyhyaW5n LCBkZXZfcHJpdiwgaSkKPiAtCQlkZXZfcHJpdi0+Z3QuY2xlYW51cF9yaW5nKHJpbmcpOwo+ICsJ aTkxNV9nZW1fY29udGV4dF9maW5pKGRldik7Cj4gKwlpOTE1X2dlbV9jbGVhbnVwX2VuZ2luZXMo ZGV2KTsKPiAgIH0KPiAgIAo+ICAgaW50Cj4gQEAgLTQ5MDEsMjYgKzQ0MTEsMTIgQEAgaTkxNV9n ZW1fZW50ZXJ2dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAg CX0KPiAgIAo+ICAgCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAtCWRldl9wcml2 LT51bXMubW1fc3VzcGVuZGVkID0gMDsKPiAtCj4gICAJcmV0ID0gaTkxNV9nZW1faW5pdF9odyhk ZXYpOwo+IC0JaWYgKHJldCAhPSAwKSB7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9t dXRleCk7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gKwlpZiAocmV0ID09IDApCj4gKwkJ cmV0ID0gZHJtX2lycV9pbnN0YWxsKGRldiwgZGV2LT5wZGV2LT5pcnEpOwo+ICsJaWYgKHJldCA9 PSAwKQo+ICsJCWRldl9wcml2LT51bXMubW1fc3VzcGVuZGVkID0gMDsKPiAgIAlCVUdfT04oIWxp c3RfZW1wdHkoJmRldl9wcml2LT5ndHQuYmFzZS5hY3RpdmVfbGlzdCkpOwo+IC0KPiAtCXJldCA9 IGRybV9pcnFfaW5zdGFsbChkZXYsIGRldi0+cGRldi0+aXJxKTsKPiAtCWlmIChyZXQpCj4gLQkJ Z290byBjbGVhbnVwX3JpbmdidWZmZXI7Cj4gLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211 dGV4KTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtCj4gLWNsZWFudXBfcmluZ2J1ZmZlcjoKPiAtCWk5 MTVfZ2VtX2NsZWFudXBfcmluZ2J1ZmZlcihkZXYpOwo+IC0JZGV2X3ByaXYtPnVtcy5tbV9zdXNw ZW5kZWQgPSAxOwo+ICAgCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4g ICAJcmV0dXJuIHJldDsKPiBAQCAtNDk1NCwxMCArNDQ1MCwxMyBAQCBpOTE1X2dlbV9sYXN0Y2xv c2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQKPiAt aW5pdF9yaW5nX2xpc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK2luaXRfbnVs bF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+IC0JSU5JVF9M SVNUX0hFQUQoJnJpbmctPmFjdGl2ZV9saXN0KTsKPiAtCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5y ZXF1ZXN0X2xpc3QpOwo+ICsJSU5JVF9MSVNUX0hFQUQoJmVuZ2luZS0+cmVhZF9saXN0KTsKPiAr CUlOSVRfTElTVF9IRUFEKCZlbmdpbmUtPndyaXRlX2xpc3QpOwo+ICsJSU5JVF9MSVNUX0hFQUQo JmVuZ2luZS0+ZmVuY2VfbGlzdCk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmZW5naW5lLT5yZXF1ZXN0 cyk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmZW5naW5lLT5yaW5ncyk7Cj4gICB9Cj4gICAKPiAgIHZv aWQgaTkxNV9pbml0X3ZtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiBAQCAt NDk5MSw4ICs0NDkwLDggQEAgaTkxNV9nZW1fbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ ICAgCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0udW5ib3VuZF9saXN0KTsKPiAgIAlJTklU X0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmJvdW5kX2xpc3QpOwo+ICAgCUlOSVRfTElTVF9IRUFE KCZkZXZfcHJpdi0+bW0uZmVuY2VfbGlzdCk7Cj4gLQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1f UklOR1M7IGkrKykKPiAtCQlpbml0X3JpbmdfbGlzdHMoJmRldl9wcml2LT5yaW5nW2ldKTsKPiAr CWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9FTkdJTkVTOyBpKyspCj4gKwkJaW5pdF9udWxsX2Vu Z2luZSgmZGV2X3ByaXYtPmVuZ2luZVtpXSk7Cj4gICAJZm9yIChpID0gMDsgaSA8IEk5MTVfTUFY X05VTV9GRU5DRVM7IGkrKykKPiAgIAkJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5mZW5jZV9y ZWdzW2ldLmxydV9saXN0KTsKPiAgIAlJTklUX0RFTEFZRURfV09SSygmZGV2X3ByaXYtPm1tLnJl dGlyZV93b3JrLAo+IEBAIC01MDUyLDEzICs0NTUxLDEzIEBAIHZvaWQgaTkxNV9nZW1fcmVsZWFz ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICAJICov Cj4gICAJc3Bpbl9sb2NrKCZmaWxlX3ByaXYtPm1tLmxvY2spOwo+ICAgCXdoaWxlICghbGlzdF9l bXB0eSgmZmlsZV9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKSB7Cj4gLQkJc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0Owo+ICsJCXN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycTsK PiAgIAo+IC0JCXJlcXVlc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZmaWxlX3ByaXYtPm1tLnJlcXVl c3RfbGlzdCwKPiAtCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QsCj4gLQkJCQkJ ICAgY2xpZW50X2xpc3QpOwo+IC0JCWxpc3RfZGVsKCZyZXF1ZXN0LT5jbGllbnRfbGlzdCk7Cj4g LQkJcmVxdWVzdC0+ZmlsZV9wcml2ID0gTlVMTDsKPiArCQlycSA9IGxpc3RfZmlyc3RfZW50cnko JmZpbGVfcHJpdi0+bW0ucmVxdWVzdF9saXN0LAo+ICsJCQkJICAgICAgc3RydWN0IGk5MTVfZ2Vt X3JlcXVlc3QsCj4gKwkJCQkgICAgICBjbGllbnRfbGlzdCk7Cj4gKwkJbGlzdF9kZWwoJnJxLT5j bGllbnRfbGlzdCk7Cj4gKwkJcnEtPmZpbGVfcHJpdiA9IE5VTEw7Cj4gICAJfQo+ICAgCXNwaW5f dW5sb2NrKCZmaWxlX3ByaXYtPm1tLmxvY2spOwo+ICAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9jb250ZXh0LmMKPiBpbmRleCA5NThkMmNmYWQ2MWEuLmM5YjJhMTJiZTY2MCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPiBAQCAtOTYsOSArOTYs OSBAQAo+ICAgI2RlZmluZSBHRU42X0NPTlRFWFRfQUxJR04gKDY0PDwxMCkKPiAgICNkZWZpbmUg R0VON19DT05URVhUX0FMSUdOIDQwOTYKPiAgIAo+IC1zdGF0aWMgc2l6ZV90IGdldF9jb250ZXh0 X2FsaWdubWVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICtzdGF0aWMgc2l6ZV90IGdldF9j b250ZXh0X2FsaWdubWVudChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiAt CWlmIChJU19HRU42KGRldikpCj4gKwlpZiAoSVNfR0VONihpOTE1KSkKPiAgIAkJcmV0dXJuIEdF TjZfQ09OVEVYVF9BTElHTjsKPiAgIAo+ICAgCXJldHVybiBHRU43X0NPTlRFWFRfQUxJR047Cj4g QEAgLTExMSw2ICsxMTEsOSBAQCBzdGF0aWMgaW50IGdldF9jb250ZXh0X3NpemUoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKPiAgIAl1MzIgcmVnOwo+ICAgCj4gICAJc3dpdGNoIChJTlRFTF9JTkZP KGRldiktPmdlbikgewo+ICsJY2FzZSA1Ogo+ICsJCXJldCA9IElMS19DWFRfVE9UQUxfU0laRTsK PiArCQlicmVhazsKPiAgIAljYXNlIDY6Cj4gICAJCXJlZyA9IEk5MTVfUkVBRChDWFRfU0laRSk7 Cj4gICAJCXJldCA9IEdFTjZfQ1hUX1RPVEFMX1NJWkUocmVnKSAqIDY0Owo+IEBAIC0xMzQsMTYg KzEzNywyMiBAQCBzdGF0aWMgaW50IGdldF9jb250ZXh0X3NpemUoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPiAgIAo+ICAgdm9pZCBpOTE1X2dlbV9jb250ZXh0X2ZyZWUoc3RydWN0IGtyZWYgKmN0 eF9yZWYpCj4gICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4ID0gY29udGFpbmVyX29m KGN0eF9yZWYsCj4gLQkJCQkJCSB0eXBlb2YoKmN0eCksIHJlZik7Cj4gLQo+IC0JaWYgKGk5MTUu ZW5hYmxlX2V4ZWNsaXN0cykKPiAtCQlpbnRlbF9scl9jb250ZXh0X2ZyZWUoY3R4KTsKPiArCXN0 cnVjdCBpbnRlbF9jb250ZXh0ICpjdHggPQo+ICsJCWNvbnRhaW5lcl9vZihjdHhfcmVmLCB0eXBl b2YoKmN0eCksIHJlZik7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBj dHgtPmk5MTU7Cj4gKwlpbnQgaTsKPiAgIAo+ICAgCWk5MTVfcHBndHRfcHV0KGN0eC0+cHBndHQp Owo+ICAgCj4gLQlpZiAoY3R4LT5sZWdhY3lfaHdfY3R4LnJjc19zdGF0ZSkKPiAtCQlkcm1fZ2Vt X29iamVjdF91bnJlZmVyZW5jZSgmY3R4LT5sZWdhY3lfaHdfY3R4LnJjc19zdGF0ZS0+YmFzZSk7 Cj4gKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fRU5HSU5FUzsgaSsrKSB7Cj4gKwkJaWYgKGlu dGVsX2VuZ2luZV9pbml0aWFsaXplZCgmZGV2X3ByaXYtPmVuZ2luZVtpXSkgJiYKPiArCQkgICAg Y3R4LT5yaW5nW2ldLnJpbmcgIT0gTlVMTCkKPiArCQkJZGV2X3ByaXYtPmVuZ2luZVtpXS5wdXRf cmluZyhjdHgtPnJpbmdbaV0ucmluZywgY3R4KTsKPiArCj4gKwkJaWYgKGN0eC0+cmluZ1tpXS5z dGF0ZSAhPSBOVUxMKQo+ICsJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmY3R4LT5yaW5n W2ldLnN0YXRlLT5iYXNlKTsKPiArCX0KPiArCj4gICAJbGlzdF9kZWwoJmN0eC0+bGluayk7Cj4g ICAJa2ZyZWUoY3R4KTsKPiAgIH0KPiBAQCAtMTkyLDE1ICsyMDEsMTYgQEAgX19jcmVhdGVfaHdf Y29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCj4gICAJa3JlZl9pbml0KCZjdHgt PnJlZik7Cj4gICAJbGlzdF9hZGRfdGFpbCgmY3R4LT5saW5rLCAmZGV2X3ByaXYtPmNvbnRleHRf bGlzdCk7Cj4gKwljdHgtPmk5MTUgPSBkZXZfcHJpdjsKPiAgIAo+ICAgCWlmIChkZXZfcHJpdi0+ aHdfY29udGV4dF9zaXplKSB7Cj4gICAJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmog PQo+IC0JCQkJaTkxNV9nZW1fYWxsb2NfY29udGV4dF9vYmooZGV2LCBkZXZfcHJpdi0+aHdfY29u dGV4dF9zaXplKTsKPiArCQkJaTkxNV9nZW1fYWxsb2NfY29udGV4dF9vYmooZGV2LCBkZXZfcHJp di0+aHdfY29udGV4dF9zaXplKTsKPiAgIAkJaWYgKElTX0VSUihvYmopKSB7Cj4gICAJCQlyZXQg PSBQVFJfRVJSKG9iaik7Cj4gICAJCQlnb3RvIGVycl9vdXQ7Cj4gICAJCX0KPiAtCQljdHgtPmxl Z2FjeV9od19jdHgucmNzX3N0YXRlID0gb2JqOwo+ICsJCWN0eC0+cmluZ1tSQ1NdLnN0YXRlID0g b2JqOwo+ICAgCX0KPiAgIAo+ICAgCS8qIERlZmF1bHQgY29udGV4dCB3aWxsIG5ldmVyIGhhdmUg YSBmaWxlX3ByaXYgKi8KPiBAQCAtMjI4LDE4ICsyMzgsMTEgQEAgZXJyX291dDoKPiAgIAlyZXR1 cm4gRVJSX1BUUihyZXQpOwo+ICAgfQo+ICAgCj4gLS8qKgo+IC0gKiBUaGUgZGVmYXVsdCBjb250 ZXh0IG5lZWRzIHRvIGV4aXN0IHBlciByaW5nIHRoYXQgdXNlcyBjb250ZXh0cy4gSXQgc3RvcmVz IHRoZQo+IC0gKiBjb250ZXh0IHN0YXRlIG9mIHRoZSBHUFUgZm9yIGFwcGxpY2F0aW9ucyB0aGF0 IGRvbid0IHV0aWxpemUgSFcgY29udGV4dHMsIGFzCj4gLSAqIHdlbGwgYXMgYW4gaWRsZSBjYXNl Lgo+IC0gKi8KPiAgIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqCj4gICBpOTE1X2dlbV9j cmVhdGVfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCQkJc3RydWN0IGRybV9p OTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2KQo+ICAgewo+IC0JY29uc3QgYm9vbCBpc19nbG9i YWxfZGVmYXVsdF9jdHggPSBmaWxlX3ByaXYgPT0gTlVMTDsKPiAgIAlzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY3R4Owo+IC0JaW50IHJldCA9IDA7Cj4gICAKPiAgIAlCVUdfT04oIW11dGV4X2lzX2xv Y2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiAgIAo+IEBAIC0yNDcsODIgKzI1MCwyOSBAQCBp OTE1X2dlbV9jcmVhdGVfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCWlmIChJ U19FUlIoY3R4KSkKPiAgIAkJcmV0dXJuIGN0eDsKPiAgIAo+IC0JaWYgKGlzX2dsb2JhbF9kZWZh dWx0X2N0eCAmJiBjdHgtPmxlZ2FjeV9od19jdHgucmNzX3N0YXRlKSB7Cj4gLQkJLyogV2UgbWF5 IG5lZWQgdG8gZG8gdGhpbmdzIHdpdGggdGhlIHNocmlua2VyIHdoaWNoCj4gLQkJICogcmVxdWly ZSB1cyB0byBpbW1lZGlhdGVseSBzd2l0Y2ggYmFjayB0byB0aGUgZGVmYXVsdAo+IC0JCSAqIGNv bnRleHQuIFRoaXMgY2FuIGNhdXNlIGEgcHJvYmxlbSBhcyBwaW5uaW5nIHRoZQo+IC0JCSAqIGRl ZmF1bHQgY29udGV4dCBhbHNvIHJlcXVpcmVzIEdUVCBzcGFjZSB3aGljaCBtYXkgbm90Cj4gLQkJ ICogYmUgYXZhaWxhYmxlLiBUbyBhdm9pZCB0aGlzIHdlIGFsd2F5cyBwaW4gdGhlIGRlZmF1bHQK PiAtCQkgKiBjb250ZXh0Lgo+IC0JCSAqLwo+IC0JCXJldCA9IGk5MTVfZ2VtX29ial9nZ3R0X3Bp bihjdHgtPmxlZ2FjeV9od19jdHgucmNzX3N0YXRlLAo+IC0JCQkJCSAgICBnZXRfY29udGV4dF9h bGlnbm1lbnQoZGV2KSwgMCk7Cj4gLQkJaWYgKHJldCkgewo+IC0JCQlEUk1fREVCVUdfRFJJVkVS KCJDb3VsZG4ndCBwaW4gJWRcbiIsIHJldCk7Cj4gLQkJCWdvdG8gZXJyX2Rlc3Ryb3k7Cj4gLQkJ fQo+IC0JfQo+IC0KPiAgIAlpZiAoVVNFU19GVUxMX1BQR1RUKGRldikpIHsKPiAgIAkJc3RydWN0 IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gaTkxNV9wcGd0dF9jcmVhdGUoZGV2LCBmaWxlX3ByaXYp Owo+ICAgCj4gICAJCWlmIChJU19FUlJfT1JfTlVMTChwcGd0dCkpIHsKPiAgIAkJCURSTV9ERUJV R19EUklWRVIoIlBQR1RUIHNldHVwIGZhaWxlZCAoJWxkKVxuIiwKPiAgIAkJCQkJIFBUUl9FUlIo cHBndHQpKTsKPiAtCQkJcmV0ID0gUFRSX0VSUihwcGd0dCk7Cj4gLQkJCWdvdG8gZXJyX3VucGlu Owo+ICsJCQlpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKGN0eCk7Cj4gKwkJCXJldHVybiBF UlJfQ0FTVChwcGd0dCk7Cj4gICAJCX0KPiAgIAo+ICAgCQljdHgtPnBwZ3R0ID0gcHBndHQ7Cj4g ICAJfQo+ICAgCj4gICAJcmV0dXJuIGN0eDsKPiAtCj4gLWVycl91bnBpbjoKPiAtCWlmIChpc19n bG9iYWxfZGVmYXVsdF9jdHggJiYgY3R4LT5sZWdhY3lfaHdfY3R4LnJjc19zdGF0ZSkKPiAtCQlp OTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihjdHgtPmxlZ2FjeV9od19jdHgucmNzX3N0YXRlKTsK PiAtZXJyX2Rlc3Ryb3k6Cj4gLQlpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKGN0eCk7Cj4g LQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+IC19Cj4gLQo+IC12b2lkIGk5MTVfZ2VtX2NvbnRleHRf cmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCWludCBpOwo+IC0KPiAtCS8q IEluIGV4ZWNsaXN0cyBtb2RlIHdlIHdpbGwgdW5yZWZlcmVuY2UgdGhlIGNvbnRleHQgd2hlbiB0 aGUgZXhlY2xpc3QKPiAtCSAqIHF1ZXVlIGlzIGNsZWFyZWQgYW5kIHRoZSByZXF1ZXN0cyBkZXN0 cm95ZWQuCj4gLQkgKi8KPiAtCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCj4gLQkJcmV0dXJu Owo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7Cj4gLQkJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9ICZkZXZfcHJpdi0+cmluZ1tpXTsKPiAtCQlzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqbGN0eCA9IHJpbmctPmxhc3RfY29udGV4dDsKPiAtCj4gLQkJaWYg KGxjdHgpIHsKPiAtCQkJaWYgKGxjdHgtPmxlZ2FjeV9od19jdHgucmNzX3N0YXRlICYmIGkgPT0g UkNTKQo+IC0JCQkJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4obGN0eC0+bGVnYWN5X2h3X2N0 eC5yY3Nfc3RhdGUpOwo+IC0KPiAtCQkJaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShsY3R4 KTsKPiAtCQkJcmluZy0+bGFzdF9jb250ZXh0ID0gTlVMTDsKPiAtCQl9Cj4gLQl9Cj4gICB9Cj4g ICAKPiAgIGludCBpOTE1X2dlbV9jb250ZXh0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOwo+ICAgCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHg7Cj4gLQlpbnQgaTsKPiAtCj4g LQkvKiBJbml0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlIHBlciBtb2R1bGUgbG9hZC4gRXZl bnR1YWxseSB0aGUKPiAtCSAqIHJlc3RyaWN0aW9uIG9uIHRoZSBjb250ZXh0X2Rpc2FibGVkIGNo ZWNrIGNhbiBiZSBsb29zZW5lZC4gKi8KPiAtCWlmIChXQVJOX09OKGRldl9wcml2LT5yaW5nW1JD U10uZGVmYXVsdF9jb250ZXh0KSkKPiAtCQlyZXR1cm4gMDsKPiArCWludCBpLCByZXQ7Cj4gICAK PiAtCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpIHsKPiArCWlmIChSQ1NfRU5HSU5FKGRldl9w cml2KS0+ZXhlY2xpc3RzX2VuYWJsZWQpIHsKPiAgIAkJLyogTkI6IGludGVudGlvbmFsbHkgbGVm dCBibGFuay4gV2Ugd2lsbCBhbGxvY2F0ZSBvdXIgb3duCj4gICAJCSAqIGJhY2tpbmcgb2JqZWN0 cyBhcyB3ZSBuZWVkIHRoZW0sIHRoYW5rIHlvdSB2ZXJ5IG11Y2ggKi8KPiAgIAkJZGV2X3ByaXYt Pmh3X2NvbnRleHRfc2l6ZSA9IDA7Cj4gQEAgLTMzNSw4MyArMjg1LDExMiBAQCBpbnQgaTkxNV9n ZW1fY29udGV4dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAJCX0KPiAgIAl9Cj4g ICAKPiAtCWN0eCA9IGk5MTVfZ2VtX2NyZWF0ZV9jb250ZXh0KGRldiwgTlVMTCk7Cj4gKwkvKioK PiArCSAqIFRoZSBkZWZhdWx0IGNvbnRleHQgbmVlZHMgdG8gZXhpc3QgcGVyIHJpbmcgdGhhdCB1 c2VzIGNvbnRleHRzLgo+ICsJICogSXQgc3RvcmVzIHRoZSBjb250ZXh0IHN0YXRlIG9mIHRoZSBH UFUgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IGRvbid0Cj4gKwkgKiB1dGlsaXplIEhXIGNvbnRleHRz IG9yIHBlci1wcm9jZXNzIFZNLCBhcyB3ZWxsIGFzIGFuIGlkbGUgY2FzZS4KPiArCSAqLwo+ICsJ Y3R4ID0gX19jcmVhdGVfaHdfY29udGV4dChkZXYsIE5VTEwpOwo+ICAgCWlmIChJU19FUlIoY3R4 KSkgewo+ICAgCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgZGVmYXVsdCBnbG9iYWwgY29u dGV4dCAoZXJyb3IgJWxkKVxuIiwKPiAgIAkJCSAgUFRSX0VSUihjdHgpKTsKPiAgIAkJcmV0dXJu IFBUUl9FUlIoY3R4KTsKPiAgIAl9Cj4gICAKPiAtCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9S SU5HUzsgaSsrKSB7Cj4gLQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9ICZkZXZfcHJp di0+cmluZ1tpXTsKPiArCWlmIChkZXZfcHJpdi0+aHdfY29udGV4dF9zaXplKSB7Cj4gKwkJLyog V2UgbWF5IG5lZWQgdG8gZG8gdGhpbmdzIHdpdGggdGhlIHNocmlua2VyIHdoaWNoCj4gKwkJICog cmVxdWlyZSB1cyB0byBpbW1lZGlhdGVseSBzd2l0Y2ggYmFjayB0byB0aGUgZGVmYXVsdAo+ICsJ CSAqIGNvbnRleHQuIFRoaXMgY2FuIGNhdXNlIGEgcHJvYmxlbSBhcyBwaW5uaW5nIHRoZQo+ICsJ CSAqIGRlZmF1bHQgY29udGV4dCBhbHNvIHJlcXVpcmVzIEdUVCBzcGFjZSB3aGljaCBtYXkgbm90 Cj4gKwkJICogYmUgYXZhaWxhYmxlLiBUbyBhdm9pZCB0aGlzIHdlIGFsd2F5cyBwaW4gdGhlIGRl ZmF1bHQKPiArCQkgKiBjb250ZXh0Lgo+ICsJCSAqLwo+ICsJCXJldCA9IGk5MTVfZ2VtX29ial9n Z3R0X3BpbihjdHgtPnJpbmdbUkNTXS5zdGF0ZSwKPiArCQkJCQkgICAgZ2V0X2NvbnRleHRfYWxp Z25tZW50KGRldl9wcml2KSwgMCk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlEUk1fRVJST1IoIkZh aWxlZCB0byBwaW4gZ2xvYmFsIGRlZmF1bHQgY29udGV4dFxuIik7Cj4gKwkJCWk5MTVfZ2VtX2Nv bnRleHRfdW5yZWZlcmVuY2UoY3R4KTsKPiArCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwl9Cj4g ICAKPiAtCQkvKiBOQjogUkNTIHdpbGwgaG9sZCBhIHJlZiBmb3IgYWxsIHJpbmdzICovCj4gLQkJ cmluZy0+ZGVmYXVsdF9jb250ZXh0ID0gY3R4Owo+ICsJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVN X0VOR0lORVM7IGkrKykgewo+ICsJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9ICZk ZXZfcHJpdi0+ZW5naW5lW2ldOwo+ICsKPiArCQlpZiAoZW5naW5lLT5pOTE1ID09IE5VTEwpCj4g KwkJCWNvbnRpbnVlOwo+ICsKPiArCQllbmdpbmUtPmRlZmF1bHRfY29udGV4dCA9IGN0eDsKPiAr CQlpOTE1X2dlbV9jb250ZXh0X3JlZmVyZW5jZShjdHgpOwo+ICAgCX0KPiAgIAo+ICsJZGV2X3By aXYtPmRlZmF1bHRfY29udGV4dCA9IGN0eDsKPiArCj4gICAJRFJNX0RFQlVHX0RSSVZFUigiJXMg Y29udGV4dCBzdXBwb3J0IGluaXRpYWxpemVkXG4iLAo+IC0JCQlpOTE1LmVuYWJsZV9leGVjbGlz dHMgPyAiTFIiIDoKPiAtCQkJZGV2X3ByaXYtPmh3X2NvbnRleHRfc2l6ZSA/ICJIVyIgOiAiZmFr ZSIpOwo+ICsJCQkgUkNTX0VOR0lORShkZXZfcHJpdiktPmV4ZWNsaXN0c19lbmFibGVkID8gIkxS IiA6Cj4gKwkJCSBkZXZfcHJpdi0+aHdfY29udGV4dF9zaXplID8gIkhXIiA6ICJmYWtlIik7Cj4g ICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAgIHZvaWQgaTkxNV9nZW1fY29udGV4dF9maW5pKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpk Y3R4ID0gZGV2X3ByaXYtPnJpbmdbUkNTXS5kZWZhdWx0X2NvbnRleHQ7Cj4gKwlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gICAJaW50IGk7Cj4gICAKPiAtCWlmIChkY3R4LT5sZWdh Y3lfaHdfY3R4LnJjc19zdGF0ZSkgewo+ICsJaWYgKGRldl9wcml2LT5od19jb250ZXh0X3NpemUp Cj4gICAJCS8qIFRoZSBvbmx5IGtub3duIHdheSB0byBzdG9wIHRoZSBncHUgZnJvbSBhY2Nlc3Np bmcgdGhlIGh3IGNvbnRleHQgaXMKPiAgIAkJICogdG8gcmVzZXQgaXQuIERvIHRoaXMgYXMgdGhl IHZlcnkgbGFzdCBvcGVyYXRpb24gdG8gYXZvaWQgY29uZnVzaW5nCj4gICAJCSAqIG90aGVyIGNv ZGUsIGxlYWRpbmcgdG8gc3B1cmlvdXMgZXJyb3JzLiAqLwo+ICAgCQlpbnRlbF9ncHVfcmVzZXQo ZGV2KTsKPiAgIAo+IC0JCS8qIFdoZW4gZGVmYXVsdCBjb250ZXh0IGlzIGNyZWF0ZWQgYW5kIHN3 aXRjaGVkIHRvLCBiYXNlIG9iamVjdCByZWZjb3VudAo+IC0JCSAqIHdpbGwgYmUgMiAoKzEgZnJv bSBvYmplY3QgY3JlYXRpb24gYW5kICsxIGZyb20gZG9fc3dpdGNoKCkpLgo+IC0JCSAqIGk5MTVf Z2VtX2NvbnRleHRfZmluaSgpIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGdwdV9pZGxlKCkgaGFzIHN3 aXRjaGVkCj4gLQkJICogdG8gZGVmYXVsdCBjb250ZXh0LiBTbyB3ZSBuZWVkIHRvIHVucmVmZXJl bmNlIHRoZSBiYXNlIG9iamVjdCBvbmNlCj4gLQkJICogdG8gb2Zmc2V0IHRoZSBkb19zd2l0Y2gg cGFydCwgc28gdGhhdCBpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKCkKPiAtCQkgKiBjYW4g dGhlbiBmcmVlIHRoZSBiYXNlIG9iamVjdCBjb3JyZWN0bHkuICovCj4gLQkJV0FSTl9PTighZGV2 X3ByaXYtPnJpbmdbUkNTXS5sYXN0X2NvbnRleHQpOwo+IC0JCWlmIChkZXZfcHJpdi0+cmluZ1tS Q1NdLmxhc3RfY29udGV4dCA9PSBkY3R4KSB7Cj4gLQkJCS8qIEZha2Ugc3dpdGNoIHRvIE5VTEwg Y29udGV4dCAqLwo+IC0JCQlXQVJOX09OKGRjdHgtPmxlZ2FjeV9od19jdHgucmNzX3N0YXRlLT5h Y3RpdmUpOwo+IC0JCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihkY3R4LT5sZWdhY3lfaHdf Y3R4LnJjc19zdGF0ZSk7Cj4gLQkJCWk5MTVfZ2VtX2NvbnRleHRfdW5yZWZlcmVuY2UoZGN0eCk7 Cj4gLQkJCWRldl9wcml2LT5yaW5nW1JDU10ubGFzdF9jb250ZXh0ID0gTlVMTDsKPiAtCQl9Cj4g LQo+IC0JCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKGRjdHgtPmxlZ2FjeV9od19jdHgucmNz X3N0YXRlKTsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpKSB7Cj4gKwkJ aTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShlbmdpbmUtPmRlZmF1bHRfY29udGV4dCk7Cj4g KwkJZW5naW5lLT5kZWZhdWx0X2NvbnRleHQgPSBOVUxMOwo+ICAgCX0KPiAgIAo+IC0JZm9yIChp ID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspIHsKPiAtCQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nID0gJmRldl9wcml2LT5yaW5nW2ldOwo+IC0KPiAtCQlpZiAocmluZy0+bGFzdF9j b250ZXh0KQo+IC0JCQlpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKHJpbmctPmxhc3RfY29u dGV4dCk7Cj4gLQo+IC0JCXJpbmctPmRlZmF1bHRfY29udGV4dCA9IE5VTEw7Cj4gLQkJcmluZy0+ bGFzdF9jb250ZXh0ID0gTlVMTDsKPiArCWlmIChkZXZfcHJpdi0+ZGVmYXVsdF9jb250ZXh0KSB7 Cj4gKwkJaWYgKGRldl9wcml2LT5od19jb250ZXh0X3NpemUpCj4gKwkJCWk5MTVfZ2VtX29iamVj dF9nZ3R0X3VucGluKGRldl9wcml2LT5kZWZhdWx0X2NvbnRleHQtPnJpbmdbUkNTXS5zdGF0ZSk7 Cj4gKwkJaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShkZXZfcHJpdi0+ZGVmYXVsdF9jb250 ZXh0KTsKPiArCQlkZXZfcHJpdi0+ZGVmYXVsdF9jb250ZXh0ID0gTlVMTDsKPiAgIAl9Cj4gLQo+ IC0JaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShkY3R4KTsKPiAgIH0KPiAgIAo+ICAgaW50 IGk5MTVfZ2VtX2NvbnRleHRfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiAgIHsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gKwlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gICAJaW50IHJldCwgaTsKPiAgIAo+IC0JQlVHX09OKCFk ZXZfcHJpdi0+cmluZ1tSQ1NdLmRlZmF1bHRfY29udGV4dCk7Cj4gKwlmb3JfZWFjaF9lbmdpbmUo ZW5naW5lLCBkZXZfcHJpdiwgaSkgewo+ICsJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHggPSBl bmdpbmUtPmRlZmF1bHRfY29udGV4dDsKPiArCQlzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnE7 Cj4gICAKPiAtCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCj4gLQkJcmV0dXJuIDA7Cj4gKwkJ aWYgKEhBU19MM19EUEYoZGV2X3ByaXYpKQo+ICsJCQljdHgtPnJlbWFwX3NsaWNlID0gKDEgPDwg TlVNX0wzX1NMSUNFUyhkZXZfcHJpdikpIC0gMTsKPiAgIAo+IC0JZm9yX2VhY2hfcmluZyhyaW5n LCBkZXZfcHJpdiwgaSkgewo+IC0JCXJldCA9IGk5MTVfc3dpdGNoX2NvbnRleHQocmluZywgcmlu Zy0+ZGVmYXVsdF9jb250ZXh0KTsKPiAtCQlpZiAocmV0KQo+ICsJCXJxID0gaW50ZWxfZW5naW5l X2FsbG9jX3JlcXVlc3QoZW5naW5lLCBjdHgpOwo+ICsJCWlmIChJU19FUlIocnEpKSB7Cj4gKwkJ CXJldCA9IFBUUl9FUlIocnEpOwo+ICsJCQlnb3RvIGVycjsKPiArCQl9Cj4gKwo+ICsJCXJldCA9 IDA7Cj4gKwkJLyoKPiArCQkgKiBXb3JrYXJvdW5kcyBhcHBsaWVkIGluIHRoaXMgZm4gYXJlIHBh cnQgb2YgcmVnaXN0ZXIgc3RhdGUgY29udGV4dCwKPiArCQkgKiB0aGV5IG5lZWQgdG8gYmUgcmUt aW5pdGlhbGl6ZWQgZm9sbG93ZWQgYnkgZ3B1IHJlc2V0LCBzdXNwZW5kL3Jlc3VtZSwKPiArCQkg KiBtb2R1bGUgcmVsb2FkLgo+ICsJCSAqLwo+ICsJCWlmIChlbmdpbmUtPmluaXRfY29udGV4dCkK PiArCQkJcmV0ID0gZW5naW5lLT5pbml0X2NvbnRleHQocnEpOwo+ICsJCWlmIChyZXQgPT0gMCkK PiArCQkJcmV0ID0gaTkxNV9yZXF1ZXN0X2NvbW1pdChycSk7Cj4gKwkJaTkxNV9yZXF1ZXN0X3B1 dChycSk7Cj4gKwkJaWYgKHJldCkgewo+ICtlcnI6Cj4gKwkJCURSTV9FUlJPUigiZmFpbGVkIHRv IGVuYWJsZWQgY29udGV4dHMgKCVzKTogJWRcbiIsIGVuZ2luZS0+bmFtZSwgcmV0KTsKPiAgIAkJ CXJldHVybiByZXQ7Cj4gKwkJfQo+ICAgCX0KPiAgIAo+ICAgCXJldHVybiAwOwo+IEBAIC00MjEs NyArNDAwLDkgQEAgc3RhdGljIGludCBjb250ZXh0X2lkcl9jbGVhbnVwKGludCBpZCwgdm9pZCAq cCwgdm9pZCAqZGF0YSkKPiAgIHsKPiAgIAlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4ID0gcDsK PiAgIAo+ICsJY3R4LT5maWxlX3ByaXYgPSBOVUxMOwo+ICAgCWk5MTVfZ2VtX2NvbnRleHRfdW5y ZWZlcmVuY2UoY3R4KTsKPiArCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiBAQCAtNDY1LDQx ICs0NDYsNDggQEAgaTkxNV9nZW1fY29udGV4dF9nZXQoc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJp dmF0ZSAqZmlsZV9wcml2LCB1MzIgaWQpCj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbmxpbmUgaW50 Cj4gLW1pX3NldF9jb250ZXh0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gLQkgICAg ICAgc3RydWN0IGludGVsX2NvbnRleHQgKm5ld19jb250ZXh0LAo+IC0JICAgICAgIHUzMiBod19m bGFncykKPiArbWlfc2V0X2NvbnRleHQoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxLAo+ICsJ ICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY29udGV4dCAqbmV3X2NvbnRleHQsCj4gKwkgICAg ICAgdTMyIGZsYWdzKQo+ICAgewo+IC0JdTMyIGZsYWdzID0gaHdfZmxhZ3MgfCBNSV9NTV9TUEFD RV9HVFQ7Cj4gLQlpbnQgcmV0Owo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmc7Cj4g KwlpbnQgbGVuOwo+ICAgCj4gICAJLyogdy9hOiBJZiBGbHVzaCBUTEIgSW52YWxpZGF0aW9uIE1v ZGUgaXMgZW5hYmxlZCwgZHJpdmVyIG11c3QgZG8gYSBUTEIKPiAgIAkgKiBpbnZhbGlkYXRpb24g cHJpb3IgdG8gTUlfU0VUX0NPTlRFWFQuIE9uIEdFTjYgd2UgZG9uJ3Qgc2V0IHRoZSB2YWx1ZQo+ IC0JICogZXhwbGljaXRseSwgc28gd2UgcmVseSBvbiB0aGUgdmFsdWUgYXQgcmluZyBpbml0LCBz dG9yZWQgaW4KPiArCSAqIGV4cGxpY2l0bHksIHNvIHdlIHJlbHkgb24gdGhlIHZhbHVlIGF0IGVu Z2luZSBpbml0LCBzdG9yZWQgaW4KPiAgIAkgKiBpdGxiX2JlZm9yZV9jdHhfc3dpdGNoLgo+ICAg CSAqLwo+IC0JaWYgKElTX0dFTjYocmluZy0+ZGV2KSkgewo+IC0JCXJldCA9IHJpbmctPmZsdXNo KHJpbmcsIEk5MTVfR0VNX0dQVV9ET01BSU5TLCAwKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1 cm4gcmV0Owo+IC0JfQo+ICsJaWYgKElTX0dFTjYocnEtPmk5MTUpKQo+ICsJCXJxLT5wZW5kaW5n X2ZsdXNoIHw9IEk5MTVfSU5WQUxJREFURV9DQUNIRVM7Cj4gICAKPiAtCS8qIFRoZXNlIGZsYWdz IGFyZSBmb3IgcmVzb3VyY2Ugc3RyZWFtZXIgb24gSFNXKyAqLwo+IC0JaWYgKCFJU19IQVNXRUxM KHJpbmctPmRldikgJiYgSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPCA4KQo+IC0JCWZsYWdz IHw9IChNSV9TQVZFX0VYVF9TVEFURV9FTiB8IE1JX1JFU1RPUkVfRVhUX1NUQVRFX0VOKTsKPiAr CWxlbiA9IDM7Cj4gKwlzd2l0Y2ggKElOVEVMX0lORk8ocnEtPmk5MTUpLT5nZW4pIHsKPiArCWNh c2UgODoKPiArCWNhc2UgNzoKPiArCWNhc2UgNTogbGVuICs9IDI7Cj4gKwkJYnJlYWs7Cj4gKwl9 Cj4gICAKPiAtCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmluZywgNik7Cj4gLQlpZiAocmV0KQo+ IC0JCXJldHVybiByZXQ7Cj4gKwlyaW5nID0gaW50ZWxfcmluZ19iZWdpbihycSwgbGVuKTsKPiAr CWlmIChJU19FUlIocmluZykpCj4gKwkJcmV0dXJuIFBUUl9FUlIocmluZyk7Cj4gICAKPiAtCS8q IFdhUHJvZ3JhbU1pQXJiT25PZmZBcm91bmRNaVNldENvbnRleHQ6aXZiLHZsdixoc3csYmR3LGNo diAqLwo+IC0JaWYgKElOVEVMX0lORk8ocmluZy0+ZGV2KS0+Z2VuID49IDcpCj4gKwlzd2l0Y2gg KElOVEVMX0lORk8ocnEtPmk5MTUpLT5nZW4pIHsKPiArCWNhc2UgODoKPiArCWNhc2UgNzoKPiAr CQkvKiBXYVByb2dyYW1NaUFyYk9uT2ZmQXJvdW5kTWlTZXRDb250ZXh0Oml2Yix2bHYsaHN3LGJk dyxjaHYgKi8KPiAgIAkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX0FSQl9PTl9PRkYgfCBNSV9B UkJfRElTQUJMRSk7Cj4gLQllbHNlCj4gLQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1Ap Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSA1Ogo+ICsJCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9T VVNQRU5EX0ZMVVNIIHwgTUlfU1VTUEVORF9GTFVTSF9FTik7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4g ICAKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKPiAgIAlpbnRlbF9yaW5nX2Vt aXQocmluZywgTUlfU0VUX0NPTlRFWFQpOwo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIGk5MTVf Z2VtX29ial9nZ3R0X29mZnNldChuZXdfY29udGV4dC0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGUp IHwKPiArCWludGVsX3JpbmdfZW1pdChyaW5nLAo+ICsJCQlpOTE1X2dlbV9vYmpfZ2d0dF9vZmZz ZXQobmV3X2NvbnRleHQtPnN0YXRlKSB8Cj4gKwkJCU1JX01NX1NQQUNFX0dUVCB8Cj4gICAJCQlm bGFncyk7Cj4gICAJLyoKPiAgIAkgKiB3L2E6IE1JX1NFVF9DT05URVhUIG11c3QgYWx3YXlzIGJl IGZvbGxvd2VkIGJ5IE1JX05PT1AKPiBAQCAtNTA3LDYwICs0OTUsMTA2IEBAIG1pX3NldF9jb250 ZXh0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gICAJICovCj4gICAJaW50ZWxfcmlu Z19lbWl0KHJpbmcsIE1JX05PT1ApOwo+ICAgCj4gLQlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYp LT5nZW4gPj0gNykKPiArCXN3aXRjaCAoSU5URUxfSU5GTyhycS0+aTkxNSktPmdlbikgewo+ICsJ Y2FzZSA4Ogo+ICsJY2FzZSA3Ogo+ICAgCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfQVJCX09O X09GRiB8IE1JX0FSQl9FTkFCTEUpOwo+IC0JZWxzZQo+IC0JCWludGVsX3JpbmdfZW1pdChyaW5n LCBNSV9OT09QKTsKPiArCQlicmVhazsKPiArCWNhc2UgNToKPiArCQlpbnRlbF9yaW5nX2VtaXQo cmluZywgTUlfU1VTUEVORF9GTFVTSCk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gICAKPiAgIAlpbnRl bF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gICAKPiAtCXJldHVybiByZXQ7Cj4gKwlycS0+cGVuZGlu Z19mbHVzaCAmPSB+STkxNV9DT01NQU5EX0JBUlJJRVI7Cj4gKwlyZXR1cm4gMDsKPiAgIH0KPiAg IAo+IC1zdGF0aWMgaW50IGRvX3N3aXRjaChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ IC0JCSAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKnRvKQo+ICtzdGF0aWMgaW50IGwzX3JlbWFw KHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwgaW50IHNsaWNlKQo+ICAgewo+IC0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiAt CXN0cnVjdCBpbnRlbF9jb250ZXh0ICpmcm9tID0gcmluZy0+bGFzdF9jb250ZXh0Owo+ICsJY29u c3QgdTMyIHJlZ19iYXNlID0gR0VON19MM0xPR19CQVNFICsgKHNsaWNlICogMHgyMDApOwo+ICsJ Y29uc3QgdTMyICpyZW1hcF9pbmZvOwo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmc7 Cj4gKwlpbnQgaTsKPiArCj4gKwlyZW1hcF9pbmZvID0gcnEtPmk5MTUtPmwzX3Bhcml0eS5yZW1h cF9pbmZvW3NsaWNlXTsKPiArCWlmIChyZW1hcF9pbmZvID09IE5VTEwpCj4gKwkJcmV0dXJuIDA7 Cj4gKwo+ICsJcmluZyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIEdFTjdfTDNMT0dfU0laRSAvIDQg KiAzKTsKPiArCWlmIChJU19FUlIocmluZykpCj4gKwkJcmV0dXJuIFBUUl9FUlIocmluZyk7Cj4g Kwo+ICsJLyoKPiArCSAqIE5vdGU6IFdlIGRvIG5vdCB3b3JyeSBhYm91dCB0aGUgY29uY3VycmVu dCByZWdpc3RlciBjYWNoZWxpbmUgaGFuZwo+ICsJICogaGVyZSBiZWNhdXNlIG5vIG90aGVyIGNv ZGUgc2hvdWxkIGFjY2VzcyB0aGVzZSByZWdpc3RlcnMgb3RoZXIgdGhhbgo+ICsJICogYXQgaW5p dGlhbGl6YXRpb24gdGltZS4KPiArCSAqLwo+ICsJZm9yIChpID0gMDsgaSA8IEdFTjdfTDNMT0df U0laRTsgaSArPSA0KSB7Cj4gKwkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX0xPQURfUkVHSVNU RVJfSU1NKDEpKTsKPiArCQlpbnRlbF9yaW5nX2VtaXQocmluZywgcmVnX2Jhc2UgKyBpKTsKPiAr CQlpbnRlbF9yaW5nX2VtaXQocmluZywgcmVtYXBfaW5mb1tpLzRdKTsKPiArCX0KPiArCj4gKwlp bnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4g KyAqIGk5MTVfcmVxdWVzdF9zd2l0Y2hfY29udGV4dCgpIC0gcGVyZm9ybSBhIEdQVSBjb250ZXh0 IHN3aXRjaC4KPiArICogQHJxOiByZXF1ZXN0IGFuZCByaW5nL2N0eCBmb3Igd2hpY2ggd2UnbGwg ZXhlY3V0ZSB0aGUgY29udGV4dCBzd2l0Y2gKPiArICoKPiArICogVGhlIGNvbnRleHQgbGlmZSBj eWNsZSBpcyBzaW1wbGUuIFRoZSBjb250ZXh0IHJlZmNvdW50IGlzIGluY3JlbWVudGVkIGFuZAo+ ICsgKiBkZWNyZW1lbnRlZCBieSAxIGFuZCBjcmVhdGUgYW5kIGRlc3Ryb3kuIElmIHRoZSBjb250 ZXh0IGlzIGluIHVzZSBieSB0aGUgR1BVLAo+ICsgKiBpdCB3aWxsIGhhdmUgYSByZWZvdWNudCA+ IDEuIFRoaXMgYWxsb3dzIHVzIHRvIGRlc3Ryb3kgdGhlIGNvbnRleHQgYWJzdHJhY3QKPiArICog b2JqZWN0IHdoaWxlIGxldHRpbmcgdGhlIG5vcm1hbCBvYmplY3QgdHJhY2tpbmcgZGVzdHJveSB0 aGUgYmFja2luZyBCTy4KPiArICovCj4gK2ludCBpOTE1X3JlcXVlc3Rfc3dpdGNoX2NvbnRleHQo c3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqdG8gPSBycS0+Y3R4Owo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jb250ZXh0ICpjdHggPSAm dG8tPnJpbmdbcnEtPmVuZ2luZS0+aWRdOwo+ICsJc3RydWN0IGludGVsX2NvbnRleHQgKmZyb207 Cj4gICAJdTMyIGh3X2ZsYWdzID0gMDsKPiAtCWJvb2wgdW5pbml0aWFsaXplZCA9IGZhbHNlOwo+ ICAgCWludCByZXQsIGk7Cj4gICAKPiAtCWlmIChmcm9tICE9IE5VTEwgJiYgcmluZyA9PSAmZGV2 X3ByaXYtPnJpbmdbUkNTXSkgewo+IC0JCUJVR19PTihmcm9tLT5sZWdhY3lfaHdfY3R4LnJjc19z dGF0ZSA9PSBOVUxMKTsKPiAtCQlCVUdfT04oIWk5MTVfZ2VtX29ial9pc19waW5uZWQoZnJvbS0+ bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGUpKTsKPiAtCX0KPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JnJxLT5pOTE1LT5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwo+ICsJaWYgKGN0eC0+c3RhdGUgPT0g TlVMTCkKPiArCQlyZXR1cm4gMDsKPiAgIAo+IC0JaWYgKGZyb20gPT0gdG8gJiYgIXRvLT5yZW1h cF9zbGljZSkKPiArCWlmIChycS0+cmluZy0+bGFzdF9jb250ZXh0ID09IHRvICYmICF0by0+cmVt YXBfc2xpY2UpCj4gICAJCXJldHVybiAwOwo+ICAgCj4gICAJLyogVHJ5aW5nIHRvIHBpbiBmaXJz dCBtYWtlcyBlcnJvciBoYW5kbGluZyBlYXNpZXIuICovCj4gLQlpZiAocmluZyA9PSAmZGV2X3By aXYtPnJpbmdbUkNTXSkgewo+IC0JCXJldCA9IGk5MTVfZ2VtX29ial9nZ3R0X3Bpbih0by0+bGVn YWN5X2h3X2N0eC5yY3Nfc3RhdGUsCj4gLQkJCQkJICAgIGdldF9jb250ZXh0X2FsaWdubWVudChy aW5nLT5kZXYpLCAwKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+IC0JfQo+ICsJ cmV0ID0gaTkxNV9nZW1fb2JqX2dndHRfcGluKGN0eC0+c3RhdGUsCj4gKwkJCQkgICAgZ2V0X2Nv bnRleHRfYWxpZ25tZW50KHJxLT5pOTE1KSwgMCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBy ZXQ7Cj4gICAKPiAgIAkvKgo+ICAgCSAqIFBpbiBjYW4gc3dpdGNoIGJhY2sgdG8gdGhlIGRlZmF1 bHQgY29udGV4dCBpZiB3ZSBlbmQgdXAgY2FsbGluZyBpbnRvCj4gICAJICogZXZpY3RfZXZlcnl0 aGluZyAtIGFzIGEgbGFzdCBkaXRjaCBndHQgZGVmcmFnIGVmZm9ydCB0aGF0IGFsc28KPiAgIAkg KiBzd2l0Y2hlcyB0byB0aGUgZGVmYXVsdCBjb250ZXh0LiBIZW5jZSB3ZSBuZWVkIHRvIHJlbG9h ZCBmcm9tIGhlcmUuCj4gICAJICovCj4gLQlmcm9tID0gcmluZy0+bGFzdF9jb250ZXh0Owo+ICsJ ZnJvbSA9IHJxLT5yaW5nLT5sYXN0X2NvbnRleHQ7Cj4gKwo+ICsJLyogV2l0aCBleGVjbGlzdHMg ZW5hYmxlZCwgdGhlIHJpbmcsIHZtIGFuZCBsb2dpY2FsIHN0YXRlIGFyZQo+ICsJICogaW50ZXJ3 aW5lZCBhbmQgd2UgZG8gbm90IG5lZWQgdG8gZXhwbGljaXRseSBsb2FkIHRoZSBtbSBvcgo+ICsJ ICogbG9naWNhbCBzdGF0ZSBhcyBpdCBpcyBsb2FkZWQgYWxvbmcgd2l0aCB0aGUgTFJDQS4KPiAr CSAqCj4gKwkgKiBCdXQgd2Ugc3RpbGwgd2FudCB0byBwaW4gdGhlIHN0YXRlIChmb3IgZ2xvYmFs IHVzYWdlIHRyYWNraW5nKQo+ICsJICogd2hpbHN0IGluIHVzZSBhbmQgcmVsb2FkIHRoZSBsMyBt YXBwaW5nIGlmIGl0IGhhcyBjaGFuZ2VkLgo+ICsJICovCj4gKwlpZiAocnEtPmVuZ2luZS0+ZXhl Y2xpc3RzX2VuYWJsZWQpCj4gKwkJZ290byBsb2FkX2wzX21hcDsKPiAgIAo+ICAgCWlmICh0by0+ cHBndHQpIHsKPiAtCQlyZXQgPSB0by0+cHBndHQtPnN3aXRjaF9tbSh0by0+cHBndHQsIHJpbmcp Owo+ICsJCXJldCA9IHRvLT5wcGd0dC0+c3dpdGNoX21tKHJxLCB0by0+cHBndHQpOwo+ICAgCQlp ZiAocmV0KQo+ICAgCQkJZ290byB1bnBpbl9vdXQ7Cj4gICAJfQo+ICAgCj4gLQlpZiAocmluZyAh PSAmZGV2X3ByaXYtPnJpbmdbUkNTXSkgewo+IC0JCWlmIChmcm9tKQo+IC0JCQlpOTE1X2dlbV9j b250ZXh0X3VucmVmZXJlbmNlKGZyb20pOwo+IC0JCWdvdG8gZG9uZTsKPiAtCX0KPiAtCj4gICAJ LyoKPiAgIAkgKiBDbGVhciB0aGlzIHBhZ2Ugb3V0IG9mIGFueSBDUFUgY2FjaGVzIGZvciBjb2hl cmVudCBzd2FwLWluL291dC4gTm90ZQo+ICAgCSAqIHRoYXQgdGhhbmtzIHRvIHdyaXRlID0gZmFs c2UgaW4gdGhpcyBjYWxsIGFuZCB1cyBub3Qgc2V0dGluZyBhbnkgZ3B1Cj4gQEAgLTU2OSwzMyAr NjAzLDM5IEBAIHN0YXRpYyBpbnQgZG9fc3dpdGNoKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcsCj4gICAJICoKPiAgIAkgKiBYWFg6IFdlIG5lZWQgYSByZWFsIGludGVyZmFjZSB0byBkbyB0 aGlzIGluc3RlYWQgb2YgdHJpY2tlcnkuCj4gICAJICovCj4gLQlyZXQgPSBpOTE1X2dlbV9vYmpl Y3Rfc2V0X3RvX2d0dF9kb21haW4odG8tPmxlZ2FjeV9od19jdHgucmNzX3N0YXRlLCBmYWxzZSk7 Cj4gKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4oY3R4LT5zdGF0ZSwg ZmFsc2UpOwo+ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gdW5waW5fb3V0Owo+ICAgCj4gLQlpZiAo IXRvLT5sZWdhY3lfaHdfY3R4LnJjc19zdGF0ZS0+aGFzX2dsb2JhbF9ndHRfbWFwcGluZykgewo+ IC0JCXN0cnVjdCBpOTE1X3ZtYSAqdm1hID0gaTkxNV9nZW1fb2JqX3RvX3ZtYSh0by0+bGVnYWN5 X2h3X2N0eC5yY3Nfc3RhdGUsCj4gLQkJCQkJCQkgICAmZGV2X3ByaXYtPmd0dC5iYXNlKTsKPiAt CQl2bWEtPmJpbmRfdm1hKHZtYSwgdG8tPmxlZ2FjeV9od19jdHgucmNzX3N0YXRlLT5jYWNoZV9s ZXZlbCwgR0xPQkFMX0JJTkQpOwo+ICsJaWYgKCFjdHgtPnN0YXRlLT5oYXNfZ2xvYmFsX2d0dF9t YXBwaW5nKSB7Cj4gKwkJc3RydWN0IGk5MTVfdm1hICp2bWEgPSBpOTE1X2dlbV9vYmpfdG9fdm1h KGN0eC0+c3RhdGUsCj4gKwkJCQkJCQkgICAmcnEtPmk5MTUtPmd0dC5iYXNlKTsKPiArCQl2bWEt PmJpbmRfdm1hKHZtYSwgY3R4LT5zdGF0ZS0+Y2FjaGVfbGV2ZWwsIEdMT0JBTF9CSU5EKTsKPiAg IAl9Cj4gICAKPiAtCWlmICghdG8tPmxlZ2FjeV9od19jdHguaW5pdGlhbGl6ZWQgfHwgaTkxNV9n ZW1fY29udGV4dF9pc19kZWZhdWx0KHRvKSkKPiArCWlmICghY3R4LT5pbml0aWFsaXplZCB8fCBp OTE1X2dlbV9jb250ZXh0X2lzX2RlZmF1bHQodG8pKQo+ICAgCQlod19mbGFncyB8PSBNSV9SRVNU T1JFX0lOSElCSVQ7Cj4gICAKPiAtCXJldCA9IG1pX3NldF9jb250ZXh0KHJpbmcsIHRvLCBod19m bGFncyk7Cj4gKwkvKiBUaGVzZSBmbGFncyBhcmUgZm9yIHJlc291cmNlIHN0cmVhbWVyIG9uIEhT VysgKi8KPiArCWlmICghSVNfSEFTV0VMTChycS0+aTkxNSkgJiYgSU5URUxfSU5GTyhycS0+aTkx NSktPmdlbiA8IDgpIHsKPiArCQlpZiAoY3R4LT5pbml0aWFsaXplZCkKPiArCQkgICAgICAgCWh3 X2ZsYWdzIHw9IE1JX1JFU1RPUkVfRVhUX1NUQVRFX0VOOwo+ICsJCWh3X2ZsYWdzIHw9IE1JX1NB VkVfRVhUX1NUQVRFX0VOOwo+ICsJfQo+ICsKPiArCXRyYWNlX2k5MTVfZ2VtX3Jpbmdfc3dpdGNo X2NvbnRleHQocnEtPmVuZ2luZSwgdG8sIGh3X2ZsYWdzKTsKPiArCXJldCA9IG1pX3NldF9jb250 ZXh0KHJxLCBjdHgsIGh3X2ZsYWdzKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIHVucGluX291 dDsKPiAgIAo+ICtsb2FkX2wzX21hcDoKPiAgIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0wzX1NMSUNF UzsgaSsrKSB7Cj4gICAJCWlmICghKHRvLT5yZW1hcF9zbGljZSAmICgxPDxpKSkpCj4gICAJCQlj b250aW51ZTsKPiAgIAo+IC0JCXJldCA9IGk5MTVfZ2VtX2wzX3JlbWFwKHJpbmcsIGkpOwo+ICAg CQkvKiBJZiBpdCBmYWlsZWQsIHRyeSBhZ2FpbiBuZXh0IHJvdW5kICovCj4gLQkJaWYgKHJldCkK PiAtCQkJRFJNX0RFQlVHX0RSSVZFUigiTDMgcmVtYXBwaW5nIGZhaWxlZFxuIik7Cj4gLQkJZWxz ZQo+IC0JCQl0by0+cmVtYXBfc2xpY2UgJj0gfigxPDxpKTsKPiArCQlpZiAobDNfcmVtYXAocnEs IGkpID09IDApCj4gKwkJCXJxLT5yZW1hcF9sMyB8PSAxIDw8IGk7Cj4gICAJfQo+ICAgCj4gICAJ LyogVGhlIGJhY2tpbmcgb2JqZWN0IGZvciB0aGUgY29udGV4dCBpcyBkb25lIGFmdGVyIHN3aXRj aGluZyB0byB0aGUKPiBAQCAtNjA1LDggKzY0NSwxNiBAQCBzdGF0aWMgaW50IGRvX3N3aXRjaChz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICAgCSAqIE1JX1NFVF9DT05URVhUIGluc3Rl YWQgb2Ygd2hlbiB0aGUgbmV4dCBzZXFubyBoYXMgY29tcGxldGVkLgo+ICAgCSAqLwo+ICAgCWlm IChmcm9tICE9IE5VTEwpIHsKPiAtCQlmcm9tLT5sZWdhY3lfaHdfY3R4LnJjc19zdGF0ZS0+YmFz ZS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT047Cj4gLQkJaTkxNV92 bWFfbW92ZV90b19hY3RpdmUoaTkxNV9nZW1fb2JqX3RvX2dndHQoZnJvbS0+bGVnYWN5X2h3X2N0 eC5yY3Nfc3RhdGUpLCByaW5nKTsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqZnJv bV9vYmogPSBmcm9tLT5yaW5nW3JxLT5lbmdpbmUtPmlkXS5zdGF0ZTsKPiArCj4gKwkJZnJvbV9v YmotPmJhc2UucGVuZGluZ19yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJ T047Cj4gKwkJLyogb2JqIGlzIGtlcHQgYWxpdmUgdW50aWwgdGhlIG5leHQgcmVxdWVzdCBieSBp dHMgYWN0aXZlIHJlZiAqLwo+ICsJCXJldCA9IGk5MTVfcmVxdWVzdF9hZGRfdm1hKHJxLAo+ICsJ CQkJCSAgIGk5MTVfZ2VtX29ial90b19nZ3R0KGZyb21fb2JqKSwKPiArCQkJCQkgICAwKTsKPiAr CQlpZiAocmV0KQo+ICsJCQlnb3RvIHVucGluX291dDsKPiArCj4gICAJCS8qIEFzIGxvbmcgYXMg TUlfU0VUX0NPTlRFWFQgaXMgc2VyaWFsaXppbmcsIGllLiBpdCBmbHVzaGVzIHRoZQo+ICAgCQkg KiB3aG9sZSBkYW1uIHBpcGVsaW5lLCB3ZSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgbWFyayB0 aGUKPiAgIAkJICogb2JqZWN0IGRpcnR5LiBUaGUgb25seSBleGNlcHRpb24gaXMgdGhhdCB0aGUg Y29udGV4dCBtdXN0IGJlCj4gQEAgLTYxNCw3OSArNjYyLDYxIEBAIHN0YXRpYyBpbnQgZG9fc3dp dGNoKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gICAJCSAqIGFibGUgdG8gZGVmZXIg ZG9pbmcgdGhpcyB1bnRpbCB3ZSBrbm93IHRoZSBvYmplY3Qgd291bGQgYmUKPiAgIAkJICogc3dh cHBlZCwgYnV0IHRoZXJlIGlzIG5vIHdheSB0byBkbyB0aGF0IHlldC4KPiAgIAkJICovCj4gLQkJ ZnJvbS0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGUtPmRpcnR5ID0gMTsKPiAtCQlCVUdfT04oZnJv bS0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGUtPnJpbmcgIT0gcmluZyk7Cj4gLQo+IC0JCS8qIG9i aiBpcyBrZXB0IGFsaXZlIHVudGlsIHRoZSBuZXh0IHJlcXVlc3QgYnkgaXRzIGFjdGl2ZSByZWYg Ki8KPiAtCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihmcm9tLT5sZWdhY3lfaHdfY3R4LnJj c19zdGF0ZSk7Cj4gLQkJaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShmcm9tKTsKPiAtCX0K PiAtCj4gLQl1bmluaXRpYWxpemVkID0gIXRvLT5sZWdhY3lfaHdfY3R4LmluaXRpYWxpemVkICYm IGZyb20gPT0gTlVMTDsKPiAtCXRvLT5sZWdhY3lfaHdfY3R4LmluaXRpYWxpemVkID0gdHJ1ZTsK PiAtCj4gLWRvbmU6Cj4gLQlpOTE1X2dlbV9jb250ZXh0X3JlZmVyZW5jZSh0byk7Cj4gLQlyaW5n LT5sYXN0X2NvbnRleHQgPSB0bzsKPiAtCj4gLQlpZiAodW5pbml0aWFsaXplZCkgewo+IC0JCWlm IChyaW5nLT5pbml0X2NvbnRleHQpIHsKPiAtCQkJcmV0ID0gcmluZy0+aW5pdF9jb250ZXh0KHJp bmcpOwo+IC0JCQlpZiAocmV0KQo+IC0JCQkJRFJNX0VSUk9SKCJyaW5nIGluaXQgY29udGV4dDog JWRcbiIsIHJldCk7Cj4gLQkJfQo+IC0KPiAtCQlyZXQgPSBpOTE1X2dlbV9yZW5kZXJfc3RhdGVf aW5pdChyaW5nKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlEUk1fRVJST1IoImluaXQgcmVuZGVyIHN0 YXRlOiAlZFxuIiwgcmV0KTsKPiArCQlmcm9tX29iai0+ZGlydHkgPSAxOwo+ICAgCX0KPiAgIAo+ ICsJcnEtPmhhc19jdHhfc3dpdGNoID0gdHJ1ZTsKPiAgIAlyZXR1cm4gMDsKPiAgIAo+ICAgdW5w aW5fb3V0Ogo+IC0JaWYgKHJpbmctPmlkID09IFJDUykKPiAtCQlpOTE1X2dlbV9vYmplY3RfZ2d0 dF91bnBpbih0by0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGUpOwo+ICsJaTkxNV9nZW1fb2JqZWN0 X2dndHRfdW5waW4oY3R4LT5zdGF0ZSk7Cj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICAg LyoqCj4gLSAqIGk5MTVfc3dpdGNoX2NvbnRleHQoKSAtIHBlcmZvcm0gYSBHUFUgY29udGV4dCBz d2l0Y2guCj4gLSAqIEByaW5nOiByaW5nIGZvciB3aGljaCB3ZSdsbCBleGVjdXRlIHRoZSBjb250 ZXh0IHN3aXRjaAo+IC0gKiBAdG86IHRoZSBjb250ZXh0IHRvIHN3aXRjaCB0bwo+IC0gKgo+IC0g KiBUaGUgY29udGV4dCBsaWZlIGN5Y2xlIGlzIHNpbXBsZS4gVGhlIGNvbnRleHQgcmVmY291bnQg aXMgaW5jcmVtZW50ZWQgYW5kCj4gLSAqIGRlY3JlbWVudGVkIGJ5IDEgYW5kIGNyZWF0ZSBhbmQg ZGVzdHJveS4gSWYgdGhlIGNvbnRleHQgaXMgaW4gdXNlIGJ5IHRoZSBHUFUsCj4gLSAqIGl0IHdp bGwgaGF2ZSBhIHJlZmNvdW50ID4gMS4gVGhpcyBhbGxvd3MgdXMgdG8gZGVzdHJveSB0aGUgY29u dGV4dCBhYnN0cmFjdAo+IC0gKiBvYmplY3Qgd2hpbGUgbGV0dGluZyB0aGUgbm9ybWFsIG9iamVj dCB0cmFja2luZyBkZXN0cm95IHRoZSBiYWNraW5nIEJPLgo+IC0gKgo+IC0gKiBUaGlzIGZ1bmN0 aW9uIHNob3VsZCBub3QgYmUgdXNlZCBpbiBleGVjbGlzdHMgbW9kZS4gIEluc3RlYWQgdGhlIGNv bnRleHQgaXMKPiAtICogc3dpdGNoZWQgYnkgd3JpdGluZyB0byB0aGUgRUxTUCBhbmQgcmVxdWVz dHMga2VlcCBhIHJlZmVyZW5jZSB0byB0aGVpcgo+IC0gKiBjb250ZXh0Lgo+ICsgKiBpOTE1X3Jl cXVlc3Rfc3dpdGNoX2NvbnRleHRfX2NvbW1pdCgpIC0gY29tbWl0IHRoZSBjb250ZXh0IHNpdGNo Cj4gKyAqIEBycTogcmVxdWVzdCBmb3Igd2hpY2ggd2UgaGF2ZSBleGVjdXRlZCB0aGUgY29udGV4 dCBzd2l0Y2gKPiAgICAqLwo+IC1pbnQgaTkxNV9zd2l0Y2hfY29udGV4dChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nLAo+IC0JCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqdG8pCj4gK3ZvaWQg aTkxNV9yZXF1ZXN0X3N3aXRjaF9jb250ZXh0X19jb21taXQoc3RydWN0IGk5MTVfZ2VtX3JlcXVl c3QgKnJxKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmlu Zy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHg7Cj4gICAK PiAtCVdBUk5fT04oaTkxNS5lbmFibGVfZXhlY2xpc3RzKTsKPiAtCVdBUk5fT04oIW11dGV4X2lz X2xvY2tlZCgmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4KSk7Cj4gKwlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZycS0+aTkxNS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gLQlpZiAodG8tPmxl Z2FjeV9od19jdHgucmNzX3N0YXRlID09IE5VTEwpIHsgLyogV2UgaGF2ZSB0aGUgZmFrZSBjb250 ZXh0ICovCj4gLQkJaWYgKHRvICE9IHJpbmctPmxhc3RfY29udGV4dCkgewo+IC0JCQlpOTE1X2dl bV9jb250ZXh0X3JlZmVyZW5jZSh0byk7Cj4gLQkJCWlmIChyaW5nLT5sYXN0X2NvbnRleHQpCj4g LQkJCQlpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKHJpbmctPmxhc3RfY29udGV4dCk7Cj4g LQkJCXJpbmctPmxhc3RfY29udGV4dCA9IHRvOwo+IC0JCX0KPiAtCQlyZXR1cm4gMDsKPiAtCX0K PiArCWlmICghcnEtPmhhc19jdHhfc3dpdGNoKQo+ICsJCXJldHVybjsKPiArCj4gKwljdHggPSBy cS0+cmluZy0+bGFzdF9jb250ZXh0Owo+ICsJaWYgKGN0eCkKPiArCQlpOTE1X2dlbV9vYmplY3Rf Z2d0dF91bnBpbihjdHgtPnJpbmdbcnEtPmVuZ2luZS0+aWRdLnN0YXRlKTsKPiAgIAo+IC0JcmV0 dXJuIGRvX3N3aXRjaChyaW5nLCB0byk7Cj4gKwljdHggPSBycS0+Y3R4Owo+ICsJY3R4LT5yZW1h cF9zbGljZSAmPSB+cnEtPnJlbWFwX2wzOwo+ICsJY3R4LT5yaW5nW3JxLT5lbmdpbmUtPmlkXS5p bml0aWFsaXplZCA9IHRydWU7Cj4gKwo+ICsJcnEtPmhhc19jdHhfc3dpdGNoID0gZmFsc2U7Cj4g K30KPiArCj4gKy8qKgo+ICsgKiBpOTE1X3JlcXVlc3Rfc3dpdGNoX2NvbnRleHRfX3VuZG8oKSAt IHVud2luZCB0aGUgY29udGV4dCBzaXRjaAo+ICsgKiBAcnE6IHJlcXVlc3QgZm9yIHdoaWNoIHdl IGhhdmUgZXhlY3V0ZWQgdGhlIGNvbnRleHQgc3dpdGNoCj4gKyAqLwo+ICt2b2lkIGk5MTVfcmVx dWVzdF9zd2l0Y2hfY29udGV4dF9fdW5kbyhzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4g K3sKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJxLT5pOTE1LT5kZXYtPnN0cnVjdF9tdXRleCk7 Cj4gKwo+ICsJaWYgKCFycS0+aGFzX2N0eF9zd2l0Y2gpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWk5 MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKHJxLT5jdHgtPnJpbmdbcnEtPmVuZ2luZS0+aWRdLnN0 YXRlKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgYm9vbCBjb250ZXh0c19lbmFibGVkKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gK3N0YXRpYyBib29sIGNvbnRleHRzX2VuYWJsZWQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgewo+IC0JcmV0dXJuIGk5MTUuZW5hYmxlX2V4 ZWNsaXN0cyB8fCB0b19pOTE1KGRldiktPmh3X2NvbnRleHRfc2l6ZTsKPiArCWlmIChSQ1NfRU5H SU5FKGRldl9wcml2KS0+ZXhlY2xpc3RzX2VuYWJsZWQpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ ICsJcmV0dXJuIGRldl9wcml2LT5od19jb250ZXh0X3NpemU7Cj4gICB9Cj4gICAKPiAgIGludCBp OTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lk ICpkYXRhLAo+IEBAIC02OTcsNyArNzI3LDcgQEAgaW50IGk5MTVfZ2VtX2NvbnRleHRfY3JlYXRl X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJc3RydWN0IGlu dGVsX2NvbnRleHQgKmN0eDsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gLQlpZiAoIWNvbnRleHRzX2Vu YWJsZWQoZGV2KSkKPiArCWlmICghY29udGV4dHNfZW5hYmxlZCh0b19pOTE1KGRldikpKQo+ICAg CQlyZXR1cm4gLUVOT0RFVjsKPiAgIAo+ICAgCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1 cHRpYmxlKGRldik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2RlYnVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCj4gZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggZjQ2MmQxYjUxZDk3Li4wMDAwMDAwMDAwMDAKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCj4gKysrIC9kZXYvbnVs bAo+IEBAIC0xLDExOCArMCwwIEBACj4gLS8qCj4gLSAqIENvcHlyaWdodCDCqSAyMDA4IEludGVs IENvcnBvcmF0aW9uCj4gLSAqCj4gLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gLSAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCj4gLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiAtICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gLSAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQo+IC0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+IC0gKgo+IC0gKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0Cj4gLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiAtICogU29mdHdhcmUuCj4gLSAqCj4gLSAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCj4gLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+IC0gKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKPiAtICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiAtICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiAtICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUwo+IC0gKiBJTiBUSEUgU09GVFdBUkUuCj4gLSAqCj4gLSAqIEF1dGhv cnM6Cj4gLSAqICAgIEtlaXRoIFBhY2thcmQgPGtlaXRocEBrZWl0aHAuY29tPgo+IC0gKgo+IC0g Ki8KPiAtCj4gLSNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+IC0jaW5jbHVkZSA8ZHJtL2k5MTVfZHJt Lmg+Cj4gLSNpbmNsdWRlICJpOTE1X2Rydi5oIgo+IC0KPiAtI2lmIFdBVENIX0xJU1RTCj4gLWlu dAo+IC1pOTE1X3ZlcmlmeV9saXN0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+IC17Cj4gLQlz dGF0aWMgaW50IHdhcm5lZDsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ IC0JaW50IGVyciA9IDA7Cj4gLQo+IC0JaWYgKHdhcm5lZCkKPiAtCQlyZXR1cm4gMDsKPiAtCj4g LQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgJmRldl9wcml2LT5yZW5kZXJfcmluZy5hY3RpdmVf bGlzdCwgbGlzdCkgewo+IC0JCWlmIChvYmotPmJhc2UuZGV2ICE9IGRldiB8fAo+IC0JCSAgICAh YXRvbWljX3JlYWQoJm9iai0+YmFzZS5yZWZjb3VudC5yZWZjb3VudCkpIHsKPiAtCQkJRFJNX0VS Uk9SKCJmcmVlZCByZW5kZXIgYWN0aXZlICVwXG4iLCBvYmopOwo+IC0JCQllcnIrKzsKPiAtCQkJ YnJlYWs7Cj4gLQkJfSBlbHNlIGlmICghb2JqLT5hY3RpdmUgfHwKPiAtCQkJICAgKG9iai0+YmFz ZS5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9HUFVfRE9NQUlOUykgPT0gMCkgewo+IC0JCQlEUk1f RVJST1IoImludmFsaWQgcmVuZGVyIGFjdGl2ZSAlcCAoYSAlZCByICV4KVxuIiwKPiAtCQkJCSAg b2JqLAo+IC0JCQkJICBvYmotPmFjdGl2ZSwKPiAtCQkJCSAgb2JqLT5iYXNlLnJlYWRfZG9tYWlu cyk7Cj4gLQkJCWVycisrOwo+IC0JCX0gZWxzZSBpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAm JiBsaXN0X2VtcHR5KCZvYmotPmdwdV93cml0ZV9saXN0KSkgewo+IC0JCQlEUk1fRVJST1IoImlu dmFsaWQgcmVuZGVyIGFjdGl2ZSAlcCAodyAleCwgZ3dsICVkKVxuIiwKPiAtCQkJCSAgb2JqLAo+ IC0JCQkJICBvYmotPmJhc2Uud3JpdGVfZG9tYWluLAo+IC0JCQkJICAhbGlzdF9lbXB0eSgmb2Jq LT5ncHVfd3JpdGVfbGlzdCkpOwo+IC0JCQllcnIrKzsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JbGlz dF9mb3JfZWFjaF9lbnRyeShvYmosICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwgbGlzdCkg ewo+IC0JCWlmIChvYmotPmJhc2UuZGV2ICE9IGRldiB8fAo+IC0JCSAgICAhYXRvbWljX3JlYWQo Jm9iai0+YmFzZS5yZWZjb3VudC5yZWZjb3VudCkpIHsKPiAtCQkJRFJNX0VSUk9SKCJmcmVlZCBm bHVzaGluZyAlcFxuIiwgb2JqKTsKPiAtCQkJZXJyKys7Cj4gLQkJCWJyZWFrOwo+IC0JCX0gZWxz ZSBpZiAoIW9iai0+YWN0aXZlIHx8Cj4gLQkJCSAgIChvYmotPmJhc2Uud3JpdGVfZG9tYWluICYg STkxNV9HRU1fR1BVX0RPTUFJTlMpID09IDAgfHwKPiAtCQkJICAgbGlzdF9lbXB0eSgmb2JqLT5n cHVfd3JpdGVfbGlzdCkpIHsKPiAtCQkJRFJNX0VSUk9SKCJpbnZhbGlkIGZsdXNoaW5nICVwIChh ICVkIHcgJXggZ3dsICVkKVxuIiwKPiAtCQkJCSAgb2JqLAo+IC0JCQkJICBvYmotPmFjdGl2ZSwK PiAtCQkJCSAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbiwKPiAtCQkJCSAgIWxpc3RfZW1wdHkoJm9i ai0+Z3B1X3dyaXRlX2xpc3QpKTsKPiAtCQkJZXJyKys7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCWxp c3RfZm9yX2VhY2hfZW50cnkob2JqLCAmZGV2X3ByaXYtPm1tLmdwdV93cml0ZV9saXN0LCBncHVf d3JpdGVfbGlzdCkgewo+IC0JCWlmIChvYmotPmJhc2UuZGV2ICE9IGRldiB8fAo+IC0JCSAgICAh YXRvbWljX3JlYWQoJm9iai0+YmFzZS5yZWZjb3VudC5yZWZjb3VudCkpIHsKPiAtCQkJRFJNX0VS Uk9SKCJmcmVlZCBncHUgd3JpdGUgJXBcbiIsIG9iaik7Cj4gLQkJCWVycisrOwo+IC0JCQlicmVh azsKPiAtCQl9IGVsc2UgaWYgKCFvYmotPmFjdGl2ZSB8fAo+IC0JCQkgICAob2JqLT5iYXNlLndy aXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKSA9PSAwKSB7Cj4gLQkJCURSTV9FUlJP UigiaW52YWxpZCBncHUgd3JpdGUgJXAgKGEgJWQgdyAleClcbiIsCj4gLQkJCQkgIG9iaiwKPiAt CQkJCSAgb2JqLT5hY3RpdmUsCj4gLQkJCQkgIG9iai0+YmFzZS53cml0ZV9kb21haW4pOwo+IC0J CQllcnIrKzsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZp OTE1X2d0dF92bS0+aW5hY3RpdmVfbGlzdCwgbGlzdCkgewo+IC0JCWlmIChvYmotPmJhc2UuZGV2 ICE9IGRldiB8fAo+IC0JCSAgICAhYXRvbWljX3JlYWQoJm9iai0+YmFzZS5yZWZjb3VudC5yZWZj b3VudCkpIHsKPiAtCQkJRFJNX0VSUk9SKCJmcmVlZCBpbmFjdGl2ZSAlcFxuIiwgb2JqKTsKPiAt CQkJZXJyKys7Cj4gLQkJCWJyZWFrOwo+IC0JCX0gZWxzZSBpZiAob2JqLT5waW5fY291bnQgfHwg b2JqLT5hY3RpdmUgfHwKPiAtCQkJICAgKG9iai0+YmFzZS53cml0ZV9kb21haW4gJiBJOTE1X0dF TV9HUFVfRE9NQUlOUykpIHsKPiAtCQkJRFJNX0VSUk9SKCJpbnZhbGlkIGluYWN0aXZlICVwIChw ICVkIGEgJWQgdyAleClcbiIsCj4gLQkJCQkgIG9iaiwKPiAtCQkJCSAgb2JqLT5waW5fY291bnQs IG9iai0+YWN0aXZlLAo+IC0JCQkJICBvYmotPmJhc2Uud3JpdGVfZG9tYWluKTsKPiAtCQkJZXJy Kys7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldHVybiB3YXJuZWQgPSBlcnI7Cj4gLX0KPiAtI2Vu ZGlmIC8qIFdBVENIX0xJU1QgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZXhlY2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhl Y2J1ZmZlci5jCj4gaW5kZXggYzkwMTZjNDM5NjQ5Li41ZWU5NmRiNzFiMzcgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gQEAgLTQyLDYgKzQyLDcg QEAKPiAgIAo+ICAgc3RydWN0IGViX3ZtYXMgewo+ICAgCXN0cnVjdCBsaXN0X2hlYWQgdm1hczsK PiArCXN0cnVjdCBpOTE1X3ZtYSAqYmF0Y2g7Cj4gICAJaW50IGFuZDsKPiAgIAl1bmlvbiB7Cj4g ICAJCXN0cnVjdCBpOTE1X3ZtYSAqbHV0WzBdOwo+IEBAIC04OCw2ICs4OSwyNiBAQCBlYl9yZXNl dChzdHJ1Y3QgZWJfdm1hcyAqZWIpCj4gICAJCW1lbXNldChlYi0+YnVja2V0cywgMCwgKGViLT5h bmQrMSkqc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSk7Cj4gICB9Cj4gICAKPiArc3RhdGljIHN0 cnVjdCBpOTE1X3ZtYSAqCj4gK2ViX2dldF9iYXRjaChzdHJ1Y3QgZWJfdm1hcyAqZWIpCj4gK3sK PiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hID0KPiArCQlsaXN0X2VudHJ5KGViLT52bWFzLnByZXYs IHR5cGVvZigqdm1hKSwgZXhlY19saXN0KTsKPiArCj4gKwkvKgo+ICsJICogU05BIGlzIGRvaW5n IGZhbmN5IHRyaWNrcyB3aXRoIGNvbXByZXNzaW5nIGJhdGNoIGJ1ZmZlcnMsIHdoaWNoIGxlYWRz Cj4gKwkgKiB0byBuZWdhdGl2ZSByZWxvY2F0aW9uIGRlbHRhcy4gVXN1YWxseSB0aGF0IHdvcmtz IG91dCBvayBzaW5jZSB0aGUKPiArCSAqIHJlbG9jYXRlIGFkZHJlc3MgaXMgc3RpbGwgcG9zaXRp dmUsIGV4Y2VwdCB3aGVuIHRoZSBiYXRjaCBpcyBwbGFjZWQKPiArCSAqIHZlcnkgbG93IGluIHRo ZSBHVFQuIEVuc3VyZSB0aGlzIGRvZXNuJ3QgaGFwcGVuLgo+ICsJICoKPiArCSAqIE5vdGUgdGhh dCBhY3R1YWwgaGFuZ3MgaGF2ZSBvbmx5IGJlZW4gb2JzZXJ2ZWQgb24gZ2VuNywgYnV0IGZvcgo+ ICsJICogcGFyYW5vaWEgZG8gaXQgZXZlcnl3aGVyZS4KPiArCSAqLwo+ICsJdm1hLT5leGVjX2Vu dHJ5LT5mbGFncyB8PSBfX0VYRUNfT0JKRUNUX05FRURTX0JJQVM7Cj4gKwo+ICsJcmV0dXJuIHZt YTsKPiArfQo+ICsKPiAgIHN0YXRpYyBpbnQKPiAgIGViX2xvb2t1cF92bWFzKHN0cnVjdCBlYl92 bWFzICplYiwKPiAgIAkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4 ZWMsCj4gQEAgLTE2NSw2ICsxODYsOSBAQCBlYl9sb29rdXBfdm1hcyhzdHJ1Y3QgZWJfdm1hcyAq ZWIsCj4gICAJCSsraTsKPiAgIAl9Cj4gICAKPiArCS8qIHRha2Ugbm90ZSBvZiB0aGUgYmF0Y2gg YnVmZmVyIGJlZm9yZSB3ZSBtaWdodCByZW9yZGVyIHRoZSBsaXN0cyAqLwo+ICsJZWItPmJhdGNo ID0gZWJfZ2V0X2JhdGNoKGViKTsKPiArCj4gICAJcmV0dXJuIDA7Cj4gICAKPiAgIAo+IEBAIC0y NTYsNyArMjgwLDcgQEAgcmVsb2NhdGVfZW50cnlfY3B1KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCj4gICB7Cj4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5k ZXY7Cj4gICAJdWludDMyX3QgcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShyZWxvYy0+b2Zm c2V0KTsKPiAtCXVpbnQ2NF90IGRlbHRhID0gcmVsb2MtPmRlbHRhICsgdGFyZ2V0X29mZnNldDsK PiArCXVpbnQ2NF90IGRlbHRhID0gKGludClyZWxvYy0+ZGVsdGEgKyB0YXJnZXRfb2Zmc2V0Owo+ ICAgCWNoYXIgKnZhZGRyOwo+ICAgCWludCByZXQ7Cj4gICAKPiBAQCAtMjkyLDcgKzMxNiw3IEBA IHJlbG9jYXRlX2VudHJ5X2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAg ewo+ICAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2Owo+ICAgCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQl1aW50 NjRfdCBkZWx0YSA9IHJlbG9jLT5kZWx0YSArIHRhcmdldF9vZmZzZXQ7Cj4gKwl1aW50NjRfdCBk ZWx0YSA9IChpbnQpcmVsb2MtPmRlbHRhICsgdGFyZ2V0X29mZnNldDsKPiAgIAl1aW50NjRfdCBv ZmZzZXQ7Cj4gICAJdm9pZCBfX2lvbWVtICpyZWxvY19wYWdlOwo+ICAgCWludCByZXQ7Cj4gQEAg LTQyMiwxMyArNDQ2LDExIEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfZW50cnkoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkJcmV0ID0gcmVsb2NhdGVfZW50cnlf Y3B1KG9iaiwgcmVsb2MsIHRhcmdldF9vZmZzZXQpOwo+ICAgCWVsc2UKPiAgIAkJcmV0ID0gcmVs b2NhdGVfZW50cnlfZ3R0KG9iaiwgcmVsb2MsIHRhcmdldF9vZmZzZXQpOwo+IC0KPiAgIAlpZiAo cmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4gICAJLyogYW5kIHVwZGF0ZSB0aGUgdXNlcidz IHJlbG9jYXRpb24gZW50cnkgKi8KPiAgIAlyZWxvYy0+cHJlc3VtZWRfb2Zmc2V0ID0gdGFyZ2V0 X29mZnNldDsKPiAtCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiBAQCAtNTIxLDcgKzU0Myw3 IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGUoc3RydWN0IGViX3ZtYXMgKmViKQo+ICAg Cj4gICBzdGF0aWMgaW50Cj4gICBpOTE1X2dlbV9leGVjYnVmZmVyX3Jlc2VydmVfdm1hKHN0cnVj dCBpOTE1X3ZtYSAqdm1hLAo+IC0JCQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAr CQkJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgIAkJCQlib29sICpuZWVkX3Jl bG9jKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPm9i ajsKPiBAQCAtNjEwLDcgKzYzMiw3IEBAIGViX3ZtYV9taXNwbGFjZWQoc3RydWN0IGk5MTVfdm1h ICp2bWEpCj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQKPiAtaTkxNV9nZW1fZXhlY2J1ZmZlcl9y ZXNlcnZlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gK2k5MTVfZ2VtX2V4ZWNidWZm ZXJfcmVzZXJ2ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICAJCQkgICAgc3Ry dWN0IGxpc3RfaGVhZCAqdm1hcywKPiAgIAkJCSAgICBib29sICpuZWVkX3JlbG9jcykKPiAgIHsK PiBAQCAtNjE4LDEwICs2NDAsMTAgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZXNlcnZlKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gICAJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gICAJ c3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm07Cj4gICAJc3RydWN0IGxpc3RfaGVhZCBvcmRl cmVkX3ZtYXM7Cj4gLQlib29sIGhhc19mZW5jZWRfZ3B1X2FjY2VzcyA9IElOVEVMX0lORk8ocmlu Zy0+ZGV2KS0+Z2VuIDwgNDsKPiArCWJvb2wgaGFzX2ZlbmNlZF9ncHVfYWNjZXNzID0gSU5URUxf SU5GTyhlbmdpbmUtPmk5MTUpLT5nZW4gPCA0Owo+ICAgCWludCByZXRyeTsKPiAgIAo+IC0JaTkx NV9nZW1fcmV0aXJlX3JlcXVlc3RzX3JpbmcocmluZyk7Cj4gKwlpOTE1X2dlbV9yZXRpcmVfcmVx dWVzdHNfX2VuZ2luZShlbmdpbmUpOwo+ICAgCj4gICAJdm0gPSBsaXN0X2ZpcnN0X2VudHJ5KHZt YXMsIHN0cnVjdCBpOTE1X3ZtYSwgZXhlY19saXN0KS0+dm07Cj4gICAKPiBAQCAtNjc2LDcgKzY5 OCw3IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVzZXJ2ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nLAo+ICAgCQkJaWYgKGViX3ZtYV9taXNwbGFjZWQodm1hKSkKPiAgIAkJCQlyZXQgPSBp OTE1X3ZtYV91bmJpbmQodm1hKTsKPiAgIAkJCWVsc2UKPiAtCQkJCXJldCA9IGk5MTVfZ2VtX2V4 ZWNidWZmZXJfcmVzZXJ2ZV92bWEodm1hLCByaW5nLCBuZWVkX3JlbG9jcyk7Cj4gKwkJCQlyZXQg PSBpOTE1X2dlbV9leGVjYnVmZmVyX3Jlc2VydmVfdm1hKHZtYSwgZW5naW5lLCBuZWVkX3JlbG9j cyk7Cj4gICAJCQlpZiAocmV0KQo+ICAgCQkJCWdvdG8gZXJyOwo+ICAgCQl9Cj4gQEAgLTY4Niw3 ICs3MDgsNyBAQCBpOTE1X2dlbV9leGVjYnVmZmVyX3Jlc2VydmUoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZywKPiAgIAkJCWlmIChkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkp Cj4gICAJCQkJY29udGludWU7Cj4gICAKPiAtCQkJcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9y ZXNlcnZlX3ZtYSh2bWEsIHJpbmcsIG5lZWRfcmVsb2NzKTsKPiArCQkJcmV0ID0gaTkxNV9nZW1f ZXhlY2J1ZmZlcl9yZXNlcnZlX3ZtYSh2bWEsIGVuZ2luZSwgbmVlZF9yZWxvY3MpOwo+ICAgCQkJ aWYgKHJldCkKPiAgIAkJCQlnb3RvIGVycjsKPiAgIAkJfQo+IEBAIC03MDYsMTAgKzcyOCwxMCBA QCBlcnI6Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQKPiAtaTkxNV9nZW1fZXhlY2J1ZmZlcl9y ZWxvY2F0ZV9zbG93KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gK2k5MTVfZ2VtX2V4ZWNidWZm ZXJfcmVsb2NhdGVfc2xvdyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAkJCQkg IHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmFyZ3MsCj4gICAJCQkJICBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGUsCj4gLQkJCQkgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4g KwkJCQkgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgIAkJCQkgIHN0cnVjdCBl Yl92bWFzICplYiwKPiAgIAkJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpl eGVjKQo+ICAgewo+IEBAIC03MzEsNyArNzUzLDcgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxv Y2F0ZV9zbG93KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCWRybV9nZW1fb2JqZWN0X3Vu cmVmZXJlbmNlKCZ2bWEtPm9iai0+YmFzZSk7Cj4gICAJfQo+ICAgCj4gLQltdXRleF91bmxvY2so JmRldi0+c3RydWN0X211dGV4KTsKPiArCW11dGV4X3VubG9jaygmaTkxNS0+ZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwo+ICAgCj4gICAJdG90YWwgPSAwOwo+ICAgCWZvciAoaSA9IDA7IGkgPCBjb3VudDsg aSsrKQo+IEBAIC03NDIsNyArNzY0LDcgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZV9z bG93KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJaWYgKHJlbG9jID09IE5VTEwgfHwgcmVs b2Nfb2Zmc2V0ID09IE5VTEwpIHsKPiAgIAkJZHJtX2ZyZWVfbGFyZ2UocmVsb2MpOwo+ICAgCQlk cm1fZnJlZV9sYXJnZShyZWxvY19vZmZzZXQpOwo+IC0JCW11dGV4X2xvY2soJmRldi0+c3RydWN0 X211dGV4KTsKPiArCQltdXRleF9sb2NrKCZpOTE1LT5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gICAJ CXJldHVybiAtRU5PTUVNOwo+ICAgCX0KPiAgIAo+IEBAIC03NTcsNyArNzc5LDcgQEAgaTkxNV9n ZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZV9zbG93KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJ CWlmIChjb3B5X2Zyb21fdXNlcihyZWxvYyt0b3RhbCwgdXNlcl9yZWxvY3MsCj4gICAJCQkJICAg ZXhlY1tpXS5yZWxvY2F0aW9uX2NvdW50ICogc2l6ZW9mKCpyZWxvYykpKSB7Cj4gICAJCQlyZXQg PSAtRUZBVUxUOwo+IC0JCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwkJCW11 dGV4X2xvY2soJmk5MTUtPmRldi0+c3RydWN0X211dGV4KTsKPiAgIAkJCWdvdG8gZXJyOwo+ICAg CQl9Cj4gICAKPiBAQCAtNzc1LDcgKzc5Nyw3IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2Nh dGVfc2xvdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCQkJCQkgICAmaW52YWxpZF9vZmZz ZXQsCj4gICAJCQkJCSAgIHNpemVvZihpbnZhbGlkX29mZnNldCkpKSB7Cj4gICAJCQkJcmV0ID0g LUVGQVVMVDsKPiAtCQkJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCQkJCW11 dGV4X2xvY2soJmk5MTUtPmRldi0+c3RydWN0X211dGV4KTsKPiAgIAkJCQlnb3RvIGVycjsKPiAg IAkJCX0KPiAgIAkJfQo+IEBAIC03ODQsOSArODA2LDkgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl9y ZWxvY2F0ZV9zbG93KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCXRvdGFsICs9IGV4ZWNb aV0ucmVsb2NhdGlvbl9jb3VudDsKPiAgIAl9Cj4gICAKPiAtCXJldCA9IGk5MTVfbXV0ZXhfbG9j a19pbnRlcnJ1cHRpYmxlKGRldik7Cj4gKwlyZXQgPSBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0 aWJsZShpOTE1LT5kZXYpOwo+ICAgCWlmIChyZXQpIHsKPiAtCQltdXRleF9sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7Cj4gKwkJbXV0ZXhfbG9jaygmaTkxNS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ ICAgCQlnb3RvIGVycjsKPiAgIAl9Cj4gICAKPiBAQCAtNzk3LDcgKzgxOSw3IEBAIGk5MTVfZ2Vt X2V4ZWNidWZmZXJfcmVsb2NhdGVfc2xvdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCQln b3RvIGVycjsKPiAgIAo+ICAgCW5lZWRfcmVsb2NzID0gKGFyZ3MtPmZsYWdzICYgSTkxNV9FWEVD X05PX1JFTE9DKSA9PSAwOwo+IC0JcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZXNlcnZlKHJp bmcsICZlYi0+dm1hcywgJm5lZWRfcmVsb2NzKTsKPiArCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZm ZXJfcmVzZXJ2ZShlbmdpbmUsICZlYi0+dm1hcywgJm5lZWRfcmVsb2NzKTsKPiAgIAlpZiAocmV0 KQo+ICAgCQlnb3RvIGVycjsKPiAgIAo+IEBAIC04MjIsMTcgKzg0NCwxOSBAQCBlcnI6Cj4gICB9 Cj4gICAKPiAgIHN0YXRpYyBpbnQKPiAtaTkxNV9nZW1fZXhlY2J1ZmZlcl9tb3ZlX3RvX2dwdShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCQkJc3RydWN0IGxpc3RfaGVhZCAqdm1h cykKPiArdm1hc19tb3ZlX3RvX3JxKHN0cnVjdCBsaXN0X2hlYWQgKnZtYXMsCj4gKwkJc3RydWN0 IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICAgewo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ ICAgCXVpbnQzMl90IGZsdXNoX2RvbWFpbnMgPSAwOwo+ICAgCWJvb2wgZmx1c2hfY2hpcHNldCA9 IGZhbHNlOwo+ICAgCWludCByZXQ7Cj4gICAKPiArCS8qIDE6IGZsdXNoL3NlcmlhbGlzZSBkYW1h Z2UgZnJvbSBvdGhlciBzb3VyY2VzICovCj4gICAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsIHZt YXMsIGV4ZWNfbGlzdCkgewo+ICAgCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0g dm1hLT5vYmo7Cj4gLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3N5bmMob2JqLCByaW5nKTsKPiAr Cj4gKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3N5bmMob2JqLCBycSk7Cj4gICAJCWlmIChyZXQp Cj4gICAJCQlyZXR1cm4gcmV0Owo+ICAgCj4gQEAgLTg0MCwxOCArODY0LDM5IEBAIGk5MTVfZ2Vt X2V4ZWNidWZmZXJfbW92ZV90b19ncHUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAg IAkJCWZsdXNoX2NoaXBzZXQgfD0gaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqLCBmYWxzZSk7 Cj4gICAKPiAgIAkJZmx1c2hfZG9tYWlucyB8PSBvYmotPmJhc2Uud3JpdGVfZG9tYWluOwo+ICsJ CWlmIChvYmotPmxhc3RfcmVhZFtycS0+ZW5naW5lLT5pZF0ucmVxdWVzdCA9PSBOVUxMKQo+ICsJ CQlycS0+cGVuZGluZ19mbHVzaCB8PSBJOTE1X0lOVkFMSURBVEVfQ0FDSEVTOwo+ICAgCX0KPiAg IAo+ICAgCWlmIChmbHVzaF9jaGlwc2V0KQo+IC0JCWk5MTVfZ2VtX2NoaXBzZXRfZmx1c2gocmlu Zy0+ZGV2KTsKPiArCQlpOTE1X2dlbV9jaGlwc2V0X2ZsdXNoKHJxLT5pOTE1LT5kZXYpOwo+ICAg Cj4gICAJaWYgKGZsdXNoX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fR1RUKQo+ICAgCQl3bWIo KTsKPiAgIAo+IC0JLyogVW5jb25kaXRpb25hbGx5IGludmFsaWRhdGUgZ3B1IGNhY2hlcyBhbmQg ZW5zdXJlIHRoYXQgd2UgZG8gZmx1c2gKPiAtCSAqIGFueSByZXNpZHVhbCB3cml0ZXMgZnJvbSB0 aGUgcHJldmlvdXMgYmF0Y2guCj4gLQkgKi8KPiAtCXJldHVybiBpbnRlbF9yaW5nX2ludmFsaWRh dGVfYWxsX2NhY2hlcyhyaW5nKTsKPiArCS8qIDI6IGludmFsaWRhdGUgdGhlIGNhY2hlcyBmcm9t IHRoaXMgcmluZyBhZnRlciBlbWl0dGluZyBzZW1hcGhvcmVzICovCj4gKwlyZXQgPSBpOTE1X3Jl cXVlc3RfZW1pdF9mbHVzaChycSwgSTkxNV9JTlZBTElEQVRFX0NBQ0hFUyk7Cj4gKwlpZiAocmV0 KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJLyogMzogdHJhY2sgZmx1c2hlcyBhbmQgb2JqZWN0 cyBmb3IgdGhpcyBycSAqLwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsIHZtYXMsIGV4ZWNf bGlzdCkgewo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSA9IHZt YS0+ZXhlY19lbnRyeTsKPiArCQl1bnNpZ25lZCBmZW5jZWQ7Cj4gKwo+ICsJCWZlbmNlZCA9IDA7 Cj4gKwkJaWYgKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX05FRURTX0ZFTkNFKSB7Cj4gKwkJ CWZlbmNlZCB8PSBWTUFfSVNfRkVOQ0VEOwo+ICsJCQlpZiAoZW50cnktPmZsYWdzICYgX19FWEVD X09CSkVDVF9IQVNfRkVOQ0UpCj4gKwkJCQlmZW5jZWQgfD0gVk1BX0hBU19GRU5DRTsKPiArCQl9 Cj4gKwo+ICsJCXJldCA9IGk5MTVfcmVxdWVzdF9hZGRfdm1hKHJxLCB2bWEsIGZlbmNlZCk7Cj4g KwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiAg IH0KPiAgIAo+ICAgc3RhdGljIGJvb2wKPiBAQCAtODY0LDcgKzkwOSw3IEBAIGk5MTVfZ2VtX2No ZWNrX2V4ZWNidWZmZXIoc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlYykKPiAg IH0KPiAgIAo+ICAgc3RhdGljIGludAo+IC12YWxpZGF0ZV9leGVjX2xpc3Qoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiArdmFsaWRhdGVfZXhlY19saXN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPiAgIAkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4 ZWMsCj4gICAJCSAgIGludCBjb3VudCkKPiAgIHsKPiBAQCAtODc0LDcgKzkxOSw3IEBAIHZhbGlk YXRlX2V4ZWNfbGlzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCWludCBpOwo+ICAgCj4g ICAJaW52YWxpZF9mbGFncyA9IF9fRVhFQ19PQkpFQ1RfVU5LTk9XTl9GTEFHUzsKPiAtCWlmIChV U0VTX0ZVTExfUFBHVFQoZGV2KSkKPiArCWlmIChVU0VTX0ZVTExfUFBHVFQoZGV2X3ByaXYpKQo+ ICAgCQlpbnZhbGlkX2ZsYWdzIHw9IEVYRUNfT0JKRUNUX05FRURTX0dUVDsKPiAgIAo+ICAgCWZv ciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4gQEAgLTkxMiwxMyArOTU3LDE0IEBAIHZhbGlk YXRlX2V4ZWNfbGlzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgfQo+ICAgCj4gICBzdGF0 aWMgc3RydWN0IGludGVsX2NvbnRleHQgKgo+IC1pOTE1X2dlbV92YWxpZGF0ZV9jb250ZXh0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKPiAtCQkJICBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLCBjb25zdCB1MzIgY3R4X2lkKQo+ICtpOTE1X2dlbV92 YWxpZGF0ZV9jb250ZXh0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKPiArCQkJICBzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCSAgY29uc3QgdTMyIGN0eF9pZCkKPiAgIHsKPiAg IAlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4ID0gTlVMTDsKPiAgIAlzdHJ1Y3QgaTkxNV9jdHhf aGFuZ19zdGF0cyAqaHM7Cj4gICAKPiAtCWlmIChyaW5nLT5pZCAhPSBSQ1MgJiYgY3R4X2lkICE9 IERFRkFVTFRfQ09OVEVYVF9IQU5ETEUpCj4gKwlpZiAoZW5naW5lLT5pZCAhPSBSQ1MgJiYgY3R4 X2lkICE9IERFRkFVTFRfQ09OVEVYVF9IQU5ETEUpCj4gICAJCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOwo+ICAgCj4gICAJY3R4ID0gaTkxNV9nZW1fY29udGV4dF9nZXQoZmlsZS0+ZHJpdmVyX3By aXYsIGN0eF9pZCk7Cj4gQEAgLTkzMSw4NiArOTc3LDIzIEBAIGk5MTVfZ2VtX3ZhbGlkYXRlX2Nv bnRleHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlLAo+ICAg CQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKPiAgIAl9Cj4gICAKPiAtCWlmIChpOTE1LmVuYWJsZV9l eGVjbGlzdHMgJiYgIWN0eC0+ZW5naW5lW3JpbmctPmlkXS5zdGF0ZSkgewo+IC0JCWludCByZXQg PSBpbnRlbF9scl9jb250ZXh0X2RlZmVycmVkX2NyZWF0ZShjdHgsIHJpbmcpOwo+IC0JCWlmIChy ZXQpIHsKPiAtCQkJRFJNX0RFQlVHKCJDb3VsZCBub3QgY3JlYXRlIExSQyAldTogJWRcbiIsIGN0 eF9pZCwgcmV0KTsKPiAtCQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAtCQl9Cj4gLQl9Cj4gLQo+ ICAgCXJldHVybiBjdHg7Cj4gICB9Cj4gICAKPiAtdm9pZAo+IC1pOTE1X2dlbV9leGVjYnVmZmVy X21vdmVfdG9fYWN0aXZlKHN0cnVjdCBsaXN0X2hlYWQgKnZtYXMsCj4gLQkJCQkgICBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nKQo+IC17Cj4gLQl1MzIgc2Vxbm8gPSBpbnRlbF9yaW5nX2dl dF9zZXFubyhyaW5nKTsKPiAtCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+IC0KPiAtCWxpc3RfZm9y X2VhY2hfZW50cnkodm1hLCB2bWFzLCBleGVjX2xpc3QpIHsKPiAtCQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiAqZW50cnkgPSB2bWEtPmV4ZWNfZW50cnk7Cj4gLQkJc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+b2JqOwo+IC0JCXUzMiBvbGRfcmVhZCA9IG9i ai0+YmFzZS5yZWFkX2RvbWFpbnM7Cj4gLQkJdTMyIG9sZF93cml0ZSA9IG9iai0+YmFzZS53cml0 ZV9kb21haW47Cj4gLQo+IC0JCW9iai0+YmFzZS53cml0ZV9kb21haW4gPSBvYmotPmJhc2UucGVu ZGluZ193cml0ZV9kb21haW47Cj4gLQkJaWYgKG9iai0+YmFzZS53cml0ZV9kb21haW4gPT0gMCkK PiAtCQkJb2JqLT5iYXNlLnBlbmRpbmdfcmVhZF9kb21haW5zIHw9IG9iai0+YmFzZS5yZWFkX2Rv bWFpbnM7Cj4gLQkJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyA9IG9iai0+YmFzZS5wZW5kaW5nX3Jl YWRfZG9tYWluczsKPiAtCj4gLQkJaTkxNV92bWFfbW92ZV90b19hY3RpdmUodm1hLCByaW5nKTsK PiAtCQlpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbikgewo+IC0JCQlvYmotPmRpcnR5ID0gMTsK PiAtCQkJb2JqLT5sYXN0X3dyaXRlX3NlcW5vID0gc2Vxbm87Cj4gLQo+IC0JCQlpbnRlbF9mYl9v YmpfaW52YWxpZGF0ZShvYmosIHJpbmcpOwo+IC0KPiAtCQkJLyogdXBkYXRlIGZvciB0aGUgaW1w bGljaXQgZmx1c2ggYWZ0ZXIgYSBiYXRjaCAqLwo+IC0JCQlvYmotPmJhc2Uud3JpdGVfZG9tYWlu ICY9IH5JOTE1X0dFTV9HUFVfRE9NQUlOUzsKPiAtCQl9Cj4gLQkJaWYgKGVudHJ5LT5mbGFncyAm IEVYRUNfT0JKRUNUX05FRURTX0ZFTkNFKSB7Cj4gLQkJCW9iai0+bGFzdF9mZW5jZWRfc2Vxbm8g PSBzZXFubzsKPiAtCQkJaWYgKGVudHJ5LT5mbGFncyAmIF9fRVhFQ19PQkpFQ1RfSEFTX0ZFTkNF KSB7Cj4gLQkJCQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHJp bmctPmRldik7Cj4gLQkJCQlsaXN0X21vdmVfdGFpbCgmZGV2X3ByaXYtPmZlbmNlX3JlZ3Nbb2Jq LT5mZW5jZV9yZWddLmxydV9saXN0LAo+IC0JCQkJCSAgICAgICAmZGV2X3ByaXYtPm1tLmZlbmNl X2xpc3QpOwo+IC0JCQl9Cj4gLQkJfQo+IC0KPiAtCQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY2hh bmdlX2RvbWFpbihvYmosIG9sZF9yZWFkLCBvbGRfd3JpdGUpOwo+IC0JfQo+IC19Cj4gLQo+IC12 b2lkCj4gLWk5MTVfZ2VtX2V4ZWNidWZmZXJfcmV0aXJlX2NvbW1hbmRzKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4gLQkJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAo+IC0JCQkJICAgIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gLQkJCQkgICAgc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKPiAtewo+IC0JLyogVW5jb25kaXRpb25hbGx5IGZvcmNlIGFkZF9yZXF1 ZXN0IHRvIGVtaXQgYSBmdWxsIGZsdXNoLiAqLwo+IC0JcmluZy0+Z3B1X2NhY2hlc19kaXJ0eSA9 IHRydWU7Cj4gLQo+IC0JLyogQWRkIGEgYnJlYWRjcnVtYiBmb3IgdGhlIGNvbXBsZXRpb24gb2Yg dGhlIGJhdGNoIGJ1ZmZlciAqLwo+IC0JKHZvaWQpX19pOTE1X2FkZF9yZXF1ZXN0KHJpbmcsIGZp bGUsIG9iaiwgTlVMTCk7Cj4gLX0KPiAtCj4gICBzdGF0aWMgaW50Cj4gLWk5MTVfcmVzZXRfZ2Vu N19zb2xfb2Zmc2V0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IC0JCQkgICAgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZykKPiArcmVzZXRfc29sX29mZnNldHMoc3RydWN0IGk5MTVfZ2Vt X3JlcXVlc3QgKnJxKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCWludCByZXQsIGk7Cj4gKwlzdHJ1Y3QgaW50ZWxfcmlu Z2J1ZmZlciAqcmluZzsKPiArCWludCBpOwo+ICAgCj4gLQlpZiAoIUlTX0dFTjcoZGV2KSB8fCBy aW5nICE9ICZkZXZfcHJpdi0+cmluZ1tSQ1NdKSB7Cj4gKwlpZiAoIUlTX0dFTjcocnEtPmk5MTUp IHx8IHJxLT5lbmdpbmUtPmlkICE9IFJDUykgewo+ICAgCQlEUk1fREVCVUcoInNvbCByZXNldCBp cyBnZW43L3JjcyBvbmx5XG4iKTsKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ICAgCj4g LQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQgKiAzKTsKPiAtCWlmIChyZXQpCj4gLQkJ cmV0dXJuIHJldDsKPiArCXJpbmcgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0ICogMyk7Cj4gKwlp ZiAoSVNfRVJSKHJpbmcpKQo+ICsJCXJldHVybiBQVFJfRVJSKHJpbmcpOwo+ICAgCj4gICAJZm9y IChpID0gMDsgaSA8IDQ7IGkrKykgewo+ICAgCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTE9B RF9SRUdJU1RFUl9JTU0oMSkpOwo+IEBAIC0xMDE5LDc0ICsxMDAyLDExOSBAQCBpOTE1X3Jlc2V0 X2dlbjdfc29sX29mZnNldHMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAl9Cj4gICAKPiAg IAlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gLQo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAg Cj4gICBzdGF0aWMgaW50Cj4gLWk5MTVfZW1pdF9ib3goc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZywKPiAtCSAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpib3gsCj4gLQkgICAgICBpbnQg RFIxLCBpbnQgRFI0KQo+ICtlbWl0X2JveChzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEsCj4g Kwkgc3RydWN0IGRybV9jbGlwX3JlY3QgKmJveCwKPiArCSBpbnQgRFIxLCBpbnQgRFI0KQo+ICAg ewo+IC0JaW50IHJldDsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICAgCj4g ICAJaWYgKGJveC0+eTIgPD0gYm94LT55MSB8fCBib3gtPngyIDw9IGJveC0+eDEgfHwKPiAgIAkg ICAgYm94LT55MiA8PSAwIHx8IGJveC0+eDIgPD0gMCkgewo+IC0JCURSTV9FUlJPUigiQmFkIGJv eCAlZCwlZC4uJWQsJWRcbiIsCj4gKwkJRFJNX0RFQlVHKCJCYWQgYm94ICVkLCVkLi4lZCwlZFxu IiwKPiAgIAkJCSAgYm94LT54MSwgYm94LT55MSwgYm94LT54MiwgYm94LT55Mik7Cj4gICAJCXJl dHVybiAtRUlOVkFMOwo+ICAgCX0KPiAgIAo+IC0JaWYgKElOVEVMX0lORk8ocmluZy0+ZGV2KS0+ Z2VuID49IDQpIHsKPiAtCQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQpOwo+IC0JCWlm IChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gKwlpZiAoSU5URUxfSU5GTyhycS0+aTkxNSktPmdl biA+PSA0KSB7Cj4gKwkJcmluZyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQpOwo+ICsJCWlmIChJ U19FUlIocmluZykpCj4gKwkJCXJldHVybiBQVFJfRVJSKHJpbmcpOwo+ICAgCj4gICAJCWludGVs X3JpbmdfZW1pdChyaW5nLCBHRlhfT1BfRFJBV1JFQ1RfSU5GT19JOTY1KTsKPiAtCQlpbnRlbF9y aW5nX2VtaXQocmluZywgKGJveC0+eDEgJiAweGZmZmYpIHwgYm94LT55MSA8PCAxNik7Cj4gLQkJ aW50ZWxfcmluZ19lbWl0KHJpbmcsICgoYm94LT54MiAtIDEpICYgMHhmZmZmKSB8IChib3gtPnky IC0gMSkgPDwgMTYpOwo+IC0JCWludGVsX3JpbmdfZW1pdChyaW5nLCBEUjQpOwo+ICAgCX0gZWxz ZSB7Cj4gLQkJcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCA2KTsKPiAtCQlpZiAocmV0KQo+ IC0JCQlyZXR1cm4gcmV0Owo+ICsJCXJpbmcgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA1KTsKPiAr CQlpZiAoSVNfRVJSKHJpbmcpKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihyaW5nKTsKPiAgIAo+ICAg CQlpbnRlbF9yaW5nX2VtaXQocmluZywgR0ZYX09QX0RSQVdSRUNUX0lORk8pOwo+ICAgCQlpbnRl bF9yaW5nX2VtaXQocmluZywgRFIxKTsKPiAtCQlpbnRlbF9yaW5nX2VtaXQocmluZywgKGJveC0+ eDEgJiAweGZmZmYpIHwgYm94LT55MSA8PCAxNik7Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHJpbmcs ICgoYm94LT54MiAtIDEpICYgMHhmZmZmKSB8IChib3gtPnkyIC0gMSkgPDwgMTYpOwo+IC0JCWlu dGVsX3JpbmdfZW1pdChyaW5nLCBEUjQpOwo+IC0JCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsK PiAgIAl9Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywgKGJveC0+eDEgJiAweGZmZmYpIHwgYm94 LT55MSA8PCAxNik7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywgKChib3gtPngyIC0gMSkgJiAw eGZmZmYpIHwgKGJveC0+eTIgLSAxKSA8PCAxNik7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywg RFI0KTsKPiAgIAlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gICAKPiAgIAlyZXR1cm4gMDsK PiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50IHNldF9jb250YW50c19iYXNlKHN0cnVjdCBpOTE1X2dl bV9yZXF1ZXN0ICpycSwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIy ICphcmdzKQo+ICt7Cj4gKwlpbnQgbW9kZSA9IGFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX0NPTlNU QU5UU19NQVNLOwo+ICsJdTMyIG1hc2sgPSBJOTE1X0VYRUNfQ09OU1RBTlRTX01BU0s7Cj4gICAK PiAtaW50Cj4gLWk5MTVfZ2VtX3JpbmdidWZmZXJfc3VibWlzc2lvbihzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCj4gLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nLAo+IC0JCQkgICAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwK PiAtCQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmFyZ3MsCj4gLQkJ CSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp2bWFzLAo+IC0JCQkgICAgICAgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKmJhdGNoX29iaiwKPiAtCQkJICAgICAgIHU2NCBleGVjX3N0YXJ0LCB1 MzIgZmxhZ3MpCj4gKwlzd2l0Y2ggKG1vZGUpIHsKPiArCWNhc2UgSTkxNV9FWEVDX0NPTlNUQU5U U19SRUxfR0VORVJBTDoKPiArCWNhc2UgSTkxNV9FWEVDX0NPTlNUQU5UU19BQlNPTFVURToKPiAr CWNhc2UgSTkxNV9FWEVDX0NPTlNUQU5UU19SRUxfU1VSRkFDRToKPiArCQlpZiAobW9kZSAhPSAw ICYmIHJxLT5lbmdpbmUtPmlkICE9IFJDUykgewo+ICsJCQlEUk1fREVCVUcoIm5vbi0wIHJlbCBj b25zdGFudHMgbW9kZSBvbiBub24tUkNTXG4iKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJ fQo+ICsKPiArCQlpZiAobW9kZSAhPSBycS0+ZW5naW5lLT5pOTE1LT5yZWxhdGl2ZV9jb25zdGFu dHNfbW9kZSkgewo+ICsJCQlpZiAoSU5URUxfSU5GTyhycS0+ZW5naW5lLT5pOTE1KS0+Z2VuIDwg NCkgewo+ICsJCQkJRFJNX0RFQlVHKCJubyByZWwgY29uc3RhbnRzIG9uIHByZS1nZW40XG4iKTsK PiArCQkJCXJldHVybiAtRUlOVkFMOwo+ICsJCQl9Cj4gKwo+ICsJCQlpZiAoSU5URUxfSU5GTyhy cS0+ZW5naW5lLT5pOTE1KS0+Z2VuID4gNSAmJgo+ICsJCQkgICAgbW9kZSA9PSBJOTE1X0VYRUNf Q09OU1RBTlRTX1JFTF9TVVJGQUNFKSB7Cj4gKwkJCQlEUk1fREVCVUcoInJlbCBzdXJmYWNlIGNv bnN0YW50cyBtb2RlIGludmFsaWQgb24gZ2VuNStcbiIpOwo+ICsJCQkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwkJCX0KPiArCj4gKwkJCS8qIFRoZSBIVyBjaGFuZ2VkIHRoZSBtZWFuaW5nIG9uIHRoaXMg Yml0IG9uIGdlbjYgKi8KPiArCQkJaWYgKElOVEVMX0lORk8ocnEtPmk5MTUpLT5nZW4gPj0gNikK PiArCQkJCW1hc2sgJj0gfkk5MTVfRVhFQ19DT05TVEFOVFNfUkVMX1NVUkZBQ0U7Cj4gKwkJfQo+ ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlEUk1fREVCVUcoImV4ZWNidWYgd2l0aCB1bmtu b3duIGNvbnN0YW50czogJWRcbiIsIG1vZGUpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ ICsKPiArCS8qIFhYWCBJTlNUUE0gaXMgcGVyLWNvbnRleHQgbm90IGdsb2JhbCBldGMgKi8KPiAr CWlmIChycS0+ZW5naW5lLT5pZCA9PSBSQ1MgJiYgbW9kZSAhPSBycS0+aTkxNS0+cmVsYXRpdmVf Y29uc3RhbnRzX21vZGUpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZzsKPiAr Cj4gKwkJcmluZyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDMpOwo+ICsJCWlmIChJU19FUlIocmlu ZykpCj4gKwkJCXJldHVybiBQVFJfRVJSKHJpbmcpOwo+ICsKPiArCQlpbnRlbF9yaW5nX2VtaXQo cmluZywgTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkpOwo+ICsJCWludGVsX3JpbmdfZW1pdChyaW5n LCBJTlNUUE0pOwo+ICsJCWludGVsX3JpbmdfZW1pdChyaW5nLCBtYXNrIDw8IDE2IHwgbW9kZSk7 Cj4gKwkJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+ICsKPiArCQlycS0+aTkxNS0+cmVsYXRp dmVfY29uc3RhbnRzX21vZGUgPSBtb2RlOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50Cj4gK3N1Ym1pdF9leGVjYnVmKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKPiArCSAgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+ICsJICAgICAg IHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmFyZ3MsCj4gKwkgICAgICAgc3RydWN0 IGViX3ZtYXMgKmViLAo+ICsJICAgICAgIHU2NCBleGVjX3N0YXJ0LCB1MzIgZmxhZ3MpCj4gICB7 Cj4gICAJc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyA9IE5VTEw7Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0JdTY0IGV4 ZWNfbGVuOwo+IC0JaW50IGluc3RwX21vZGU7Cj4gLQl1MzIgaW5zdHBfbWFzazsKPiArCXN0cnVj dCBpOTE1X2dlbV9yZXF1ZXN0ICpycSA9IE5VTEw7Cj4gICAJaW50IGksIHJldCA9IDA7Cj4gICAK PiAgIAlpZiAoYXJncy0+bnVtX2NsaXByZWN0cyAhPSAwKSB7Cj4gLQkJaWYgKHJpbmcgIT0gJmRl dl9wcml2LT5yaW5nW1JDU10pIHsKPiArCQlpZiAoZW5naW5lLT5pZCAhPSBSQ1MpIHsKPiAgIAkJ CURSTV9ERUJVRygiY2xpcCByZWN0YW5nbGVzIGFyZSBvbmx5IHZhbGlkIHdpdGggdGhlIHJlbmRl ciByaW5nXG4iKTsKPiAgIAkJCXJldHVybiAtRUlOVkFMOwo+ICAgCQl9Cj4gICAKPiAtCQlpZiAo SU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNSkgewo+ICsJCWlmIChJTlRFTF9JTkZPKGVuZ2luZS0+ aTkxNSktPmdlbiA+PSA1KSB7Cj4gICAJCQlEUk1fREVCVUcoImNsaXAgcmVjdGFuZ2xlcyBhcmUg b25seSB2YWxpZCBvbiBwcmUtZ2VuNVxuIik7Cj4gICAJCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAkJ fQo+IEBAIC0xMTA4LDcgKzExMzYsNiBAQCBpOTE1X2dlbV9yaW5nYnVmZmVyX3N1Ym1pc3Npb24o c3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlLAo+ICAgCQlpZiAo Y29weV9mcm9tX3VzZXIoY2xpcHJlY3RzLAo+ICAgCQkJCSAgIHRvX3VzZXJfcHRyKGFyZ3MtPmNs aXByZWN0c19wdHIpLAo+ICAgCQkJCSAgIHNpemVvZigqY2xpcHJlY3RzKSphcmdzLT5udW1fY2xp cHJlY3RzKSkgewo+IC0JCQlyZXQgPSAtRUZBVUxUOwo+ICAgCQkJZ290byBlcnJvcjsKPiAgIAkJ fQo+ICAgCX0gZWxzZSB7Cj4gQEAgLTExMjMsMTY4ICsxMTUwLDEwOCBAQCBpOTE1X2dlbV9yaW5n YnVmZmVyX3N1Ym1pc3Npb24oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxl ICpmaWxlLAo+ICAgCQl9Cj4gICAJfQo+ICAgCj4gLQlyZXQgPSBpOTE1X2dlbV9leGVjYnVmZmVy X21vdmVfdG9fZ3B1KHJpbmcsIHZtYXMpOwo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIGVycm9yOwo+ ICsJcnEgPSBpbnRlbF9lbmdpbmVfYWxsb2NfcmVxdWVzdChlbmdpbmUsIGN0eCk7Cj4gKwlpZiAo SVNfRVJSKHJxKSkgewo+ICsJCWtmcmVlKGNsaXByZWN0cyk7Cj4gKwkJcmV0dXJuIFBUUl9FUlIo cnEpOwo+ICsJfQo+ICAgCj4gLQlyZXQgPSBpOTE1X3N3aXRjaF9jb250ZXh0KHJpbmcsIGN0eCk7 Cj4gKwlyZXQgPSB2bWFzX21vdmVfdG9fcnEoJmViLT52bWFzLCBycSk7Cj4gICAJaWYgKHJldCkK PiAgIAkJZ290byBlcnJvcjsKPiAgIAo+IC0JaW5zdHBfbW9kZSA9IGFyZ3MtPmZsYWdzICYgSTkx NV9FWEVDX0NPTlNUQU5UU19NQVNLOwo+IC0JaW5zdHBfbWFzayA9IEk5MTVfRVhFQ19DT05TVEFO VFNfTUFTSzsKPiAtCXN3aXRjaCAoaW5zdHBfbW9kZSkgewo+IC0JY2FzZSBJOTE1X0VYRUNfQ09O U1RBTlRTX1JFTF9HRU5FUkFMOgo+IC0JY2FzZSBJOTE1X0VYRUNfQ09OU1RBTlRTX0FCU09MVVRF Ogo+IC0JY2FzZSBJOTE1X0VYRUNfQ09OU1RBTlRTX1JFTF9TVVJGQUNFOgo+IC0JCWlmIChpbnN0 cF9tb2RlICE9IDAgJiYgcmluZyAhPSAmZGV2X3ByaXYtPnJpbmdbUkNTXSkgewo+IC0JCQlEUk1f REVCVUcoIm5vbi0wIHJlbCBjb25zdGFudHMgbW9kZSBvbiBub24tUkNTXG4iKTsKPiAtCQkJcmV0 ID0gLUVJTlZBTDsKPiAtCQkJZ290byBlcnJvcjsKPiAtCQl9Cj4gLQo+IC0JCWlmIChpbnN0cF9t b2RlICE9IGRldl9wcml2LT5yZWxhdGl2ZV9jb25zdGFudHNfbW9kZSkgewo+IC0JCQlpZiAoSU5U RUxfSU5GTyhkZXYpLT5nZW4gPCA0KSB7Cj4gLQkJCQlEUk1fREVCVUcoIm5vIHJlbCBjb25zdGFu dHMgb24gcHJlLWdlbjRcbiIpOwo+IC0JCQkJcmV0ID0gLUVJTlZBTDsKPiAtCQkJCWdvdG8gZXJy b3I7Cj4gLQkJCX0KPiAtCj4gLQkJCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+IDUgJiYKPiAt CQkJICAgIGluc3RwX21vZGUgPT0gSTkxNV9FWEVDX0NPTlNUQU5UU19SRUxfU1VSRkFDRSkgewo+ IC0JCQkJRFJNX0RFQlVHKCJyZWwgc3VyZmFjZSBjb25zdGFudHMgbW9kZSBpbnZhbGlkIG9uIGdl bjUrXG4iKTsKPiAtCQkJCXJldCA9IC1FSU5WQUw7Cj4gLQkJCQlnb3RvIGVycm9yOwo+IC0JCQl9 Cj4gLQo+IC0JCQkvKiBUaGUgSFcgY2hhbmdlZCB0aGUgbWVhbmluZyBvbiB0aGlzIGJpdCBvbiBn ZW42ICovCj4gLQkJCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA2KQo+IC0JCQkJaW5zdHBf bWFzayAmPSB+STkxNV9FWEVDX0NPTlNUQU5UU19SRUxfU1VSRkFDRTsKPiAtCQl9Cj4gLQkJYnJl YWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCURSTV9ERUJVRygiZXhlY2J1ZiB3aXRoIHVua25vd24gY29u c3RhbnRzOiAlZFxuIiwgaW5zdHBfbW9kZSk7Cj4gLQkJcmV0ID0gLUVJTlZBTDsKPiArCXJldCA9 IHNldF9jb250YW50c19iYXNlKHJxLCBhcmdzKTsKPiArCWlmIChyZXQpCj4gICAJCWdvdG8gZXJy b3I7Cj4gLQl9Cj4gLQo+IC0JaWYgKHJpbmcgPT0gJmRldl9wcml2LT5yaW5nW1JDU10gJiYKPiAt CQkJaW5zdHBfbW9kZSAhPSBkZXZfcHJpdi0+cmVsYXRpdmVfY29uc3RhbnRzX21vZGUpIHsKPiAt CQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQpOwo+IC0JCWlmIChyZXQpCj4gLQkJCWdv dG8gZXJyb3I7Cj4gLQo+IC0JCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKPiAtCQlp bnRlbF9yaW5nX2VtaXQocmluZywgTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkpOwo+IC0JCWludGVs X3JpbmdfZW1pdChyaW5nLCBJTlNUUE0pOwo+IC0JCWludGVsX3JpbmdfZW1pdChyaW5nLCBpbnN0 cF9tYXNrIDw8IDE2IHwgaW5zdHBfbW9kZSk7Cj4gLQkJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcp Owo+IC0KPiAtCQlkZXZfcHJpdi0+cmVsYXRpdmVfY29uc3RhbnRzX21vZGUgPSBpbnN0cF9tb2Rl Owo+IC0JfQo+ICAgCj4gICAJaWYgKGFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX0dFTjdfU09MX1JF U0VUKSB7Cj4gLQkJcmV0ID0gaTkxNV9yZXNldF9nZW43X3NvbF9vZmZzZXRzKGRldiwgcmluZyk7 Cj4gKwkJcmV0ID0gcmVzZXRfc29sX29mZnNldHMocnEpOwo+ICAgCQlpZiAocmV0KQo+ICAgCQkJ Z290byBlcnJvcjsKPiAgIAl9Cj4gICAKPiAtCWV4ZWNfbGVuID0gYXJncy0+YmF0Y2hfbGVuOwo+ ICAgCWlmIChjbGlwcmVjdHMpIHsKPiAgIAkJZm9yIChpID0gMDsgaSA8IGFyZ3MtPm51bV9jbGlw cmVjdHM7IGkrKykgewo+IC0JCQlyZXQgPSBpOTE1X2VtaXRfYm94KHJpbmcsICZjbGlwcmVjdHNb aV0sCj4gLQkJCQkJICAgIGFyZ3MtPkRSMSwgYXJncy0+RFI0KTsKPiArCQkJcmV0ID0gZW1pdF9i b3gocnEsICZjbGlwcmVjdHNbaV0sCj4gKwkJCQkgICAgICAgYXJncy0+RFIxLCBhcmdzLT5EUjQp Owo+ICAgCQkJaWYgKHJldCkKPiAgIAkJCQlnb3RvIGVycm9yOwo+ICAgCj4gLQkJCXJldCA9IHJp bmctPmRpc3BhdGNoX2V4ZWNidWZmZXIocmluZywKPiAtCQkJCQkJCWV4ZWNfc3RhcnQsIGV4ZWNf bGVuLAo+IC0JCQkJCQkJZmxhZ3MpOwo+ICsJCQlyZXQgPSBpOTE1X3JlcXVlc3RfZW1pdF9iYXRj aGJ1ZmZlcihycSwgZWItPmJhdGNoLAo+ICsJCQkJCQkJICAgIGV4ZWNfc3RhcnQsCj4gKwkJCQkJ CQkgICAgYXJncy0+YmF0Y2hfbGVuLAo+ICsJCQkJCQkJICAgIGZsYWdzKTsKPiAgIAkJCWlmIChy ZXQpCj4gICAJCQkJZ290byBlcnJvcjsKPiAgIAkJfQo+ICAgCX0gZWxzZSB7Cj4gLQkJcmV0ID0g cmluZy0+ZGlzcGF0Y2hfZXhlY2J1ZmZlcihyaW5nLAo+IC0JCQkJCQlleGVjX3N0YXJ0LCBleGVj X2xlbiwKPiAtCQkJCQkJZmxhZ3MpOwo+ICsJCXJldCA9IGk5MTVfcmVxdWVzdF9lbWl0X2JhdGNo YnVmZmVyKHJxLCBlYi0+YmF0Y2gsCj4gKwkJCQkJCSAgICBleGVjX3N0YXJ0LAo+ICsJCQkJCQkg ICAgYXJncy0+YmF0Y2hfbGVuLAo+ICsJCQkJCQkgICAgZmxhZ3MpOwo+ICAgCQlpZiAocmV0KQo+ IC0JCQlyZXR1cm4gcmV0Owo+ICsJCQlnb3RvIGVycm9yOwo+ICAgCX0KPiAgIAo+IC0JdHJhY2Vf aTkxNV9nZW1fcmluZ19kaXNwYXRjaChyaW5nLCBpbnRlbF9yaW5nX2dldF9zZXFubyhyaW5nKSwg ZmxhZ3MpOwo+ICsJcmV0ID0gaTkxNV9yZXF1ZXN0X2NvbW1pdChycSk7Cj4gKwlpZiAocmV0KQo+ ICsJCWdvdG8gZXJyb3I7Cj4gKwo+ICsJaTkxNV9xdWV1ZV9oYW5nY2hlY2socnEtPmk5MTUtPmRl dik7Cj4gICAKPiAtCWk5MTVfZ2VtX2V4ZWNidWZmZXJfbW92ZV90b19hY3RpdmUodm1hcywgcmlu Zyk7Cj4gLQlpOTE1X2dlbV9leGVjYnVmZmVyX3JldGlyZV9jb21tYW5kcyhkZXYsIGZpbGUsIHJp bmcsIGJhdGNoX29iaik7Cj4gKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJxLT5pOTE1LT5t bS5pZGxlX3dvcmspOwo+ICsJcXVldWVfZGVsYXllZF93b3JrKHJxLT5pOTE1LT53cSwKPiArCQkJ ICAgJnJxLT5pOTE1LT5tbS5yZXRpcmVfd29yaywKPiArCQkJICAgcm91bmRfamlmZmllc191cF9y ZWxhdGl2ZShIWikpOwo+ICsJaW50ZWxfbWFya19idXN5KHJxLT5pOTE1LT5kZXYpOwo+ICAgCj4g ICBlcnJvcjoKPiArCWk5MTVfcmVxdWVzdF9wdXQocnEpOwo+ICAgCWtmcmVlKGNsaXByZWN0cyk7 Cj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICAgLyoqCj4gICAgKiBGaW5kIG9uZSBCU0Qg cmluZyB0byBkaXNwYXRjaCB0aGUgY29ycmVzcG9uZGluZyBCU0QgY29tbWFuZC4KPiAtICogVGhl IFJpbmcgSUQgaXMgcmV0dXJuZWQuCj4gICAgKi8KPiAtc3RhdGljIGludCBnZW44X2Rpc3BhdGNo X2JzZF9yaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gLQkJCQkgIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSkKPiArc3RhdGljIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgo+ICtnZW44X3NlbGVj dF9ic2RfZW5naW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkgICAg ICAgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZmls ZV9wcml2YXRlICpmaWxlX3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKPiAgIAo+IC0JLyogQ2hl Y2sgd2hldGhlciB0aGUgZmlsZV9wcml2IGlzIHVzaW5nIG9uZSByaW5nICovCj4gLQlpZiAoZmls ZV9wcml2LT5ic2RfcmluZykKPiAtCQlyZXR1cm4gZmlsZV9wcml2LT5ic2RfcmluZy0+aWQ7Cj4g LQllbHNlIHsKPiAtCQkvKiBJZiBubywgdXNlIHRoZSBwaW5nLXBvbmcgbWVjaGFuaXNtIHRvIHNl bGVjdCBvbmUgcmluZyAqLwo+IC0JCWludCByaW5nX2lkOwo+ICsJLyogVXNlIHRoZSBwaW5nLXBv bmcgbWVjaGFuaXNtIHRvIHNlbGVjdCBvbmUgcmluZyBmb3IgdGhpcyBjbGllbnQgKi8KPiArCWlm IChmaWxlX3ByaXYtPmJzZF9lbmdpbmUgPT0gTlVMTCkgewo+ICsJCWludCBpZDsKPiAgIAo+IC0J CW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCQltdXRleF9sb2NrKCZkZXZfcHJp di0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCQlpZiAoZGV2X3ByaXYtPm1tLmJzZF9yaW5nX2Rp c3BhdGNoX2luZGV4ID09IDApIHsKPiAtCQkJcmluZ19pZCA9IFZDUzsKPiArCQkJaWQgPSBWQ1M7 Cj4gICAJCQlkZXZfcHJpdi0+bW0uYnNkX3JpbmdfZGlzcGF0Y2hfaW5kZXggPSAxOwo+ICAgCQl9 IGVsc2Ugewo+IC0JCQlyaW5nX2lkID0gVkNTMjsKPiArCQkJaWQgPSBWQ1MyOwo+ICAgCQkJZGV2 X3ByaXYtPm1tLmJzZF9yaW5nX2Rpc3BhdGNoX2luZGV4ID0gMDsKPiAgIAkJfQo+IC0JCWZpbGVf cHJpdi0+YnNkX3JpbmcgPSAmZGV2X3ByaXYtPnJpbmdbcmluZ19pZF07Cj4gLQkJbXV0ZXhfdW5s b2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQkJcmV0dXJuIHJpbmdfaWQ7Cj4gKwkJZmlsZV9w cml2LT5ic2RfZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmVbaWRdOwo+ICsJCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4KTsKPiAgIAl9Cj4gLX0KPiAtCj4gLXN0YXRp YyBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCj4gLWViX2dldF9iYXRjaChzdHJ1Y3QgZWJf dm1hcyAqZWIpCj4gLXsKPiAtCXN0cnVjdCBpOTE1X3ZtYSAqdm1hID0gbGlzdF9lbnRyeShlYi0+ dm1hcy5wcmV2LCB0eXBlb2YoKnZtYSksIGV4ZWNfbGlzdCk7Cj4gICAKPiAtCS8qCj4gLQkgKiBT TkEgaXMgZG9pbmcgZmFuY3kgdHJpY2tzIHdpdGggY29tcHJlc3NpbmcgYmF0Y2ggYnVmZmVycywg d2hpY2ggbGVhZHMKPiAtCSAqIHRvIG5lZ2F0aXZlIHJlbG9jYXRpb24gZGVsdGFzLiBVc3VhbGx5 IHRoYXQgd29ya3Mgb3V0IG9rIHNpbmNlIHRoZQo+IC0JICogcmVsb2NhdGUgYWRkcmVzcyBpcyBz dGlsbCBwb3NpdGl2ZSwgZXhjZXB0IHdoZW4gdGhlIGJhdGNoIGlzIHBsYWNlZAo+IC0JICogdmVy eSBsb3cgaW4gdGhlIEdUVC4gRW5zdXJlIHRoaXMgZG9lc24ndCBoYXBwZW4uCj4gLQkgKgo+IC0J ICogTm90ZSB0aGF0IGFjdHVhbCBoYW5ncyBoYXZlIG9ubHkgYmVlbiBvYnNlcnZlZCBvbiBnZW43 LCBidXQgZm9yCj4gLQkgKiBwYXJhbm9pYSBkbyBpdCBldmVyeXdoZXJlLgo+IC0JICovCj4gLQl2 bWEtPmV4ZWNfZW50cnktPmZsYWdzIHw9IF9fRVhFQ19PQkpFQ1RfTkVFRFNfQklBUzsKPiAtCj4g LQlyZXR1cm4gdm1hLT5vYmo7Cj4gKwlyZXR1cm4gZmlsZV9wcml2LT5ic2RfZW5naW5lOwo+ICAg fQo+ICAgCj4gICBzdGF0aWMgaW50Cj4gLWk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAraTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHZvaWQgKmRhdGEsCj4gICAJCSAgICAgICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCj4gICAJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNidWZmZXIyICphcmdzLAo+ICAgCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgKmV4ZWMpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwo+ICAgCXN0cnVjdCBlYl92bWFzICplYjsKPiAtCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpiYXRjaF9vYmo7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICAgCXN0cnVjdCBp bnRlbF9jb250ZXh0ICpjdHg7Cj4gICAJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm07Cj4g ICAJY29uc3QgdTMyIGN0eF9pZCA9IGk5MTVfZXhlY2J1ZmZlcjJfZ2V0X2NvbnRleHRfaWQoKmFy Z3MpOwo+ICAgCXU2NCBleGVjX3N0YXJ0ID0gYXJncy0+YmF0Y2hfc3RhcnRfb2Zmc2V0Owo+ICsJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoOwo+ICAgCXUzMiBmbGFnczsKPiAgIAlp bnQgcmV0Owo+ICAgCWJvb2wgbmVlZF9yZWxvY3M7Cj4gQEAgLTEyOTIsNyArMTI1OSw3IEBAIGk5 MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK PiAgIAlpZiAoIWk5MTVfZ2VtX2NoZWNrX2V4ZWNidWZmZXIoYXJncykpCj4gICAJCXJldHVybiAt RUlOVkFMOwo+ICAgCj4gLQlyZXQgPSB2YWxpZGF0ZV9leGVjX2xpc3QoZGV2LCBleGVjLCBhcmdz LT5idWZmZXJfY291bnQpOwo+ICsJcmV0ID0gdmFsaWRhdGVfZXhlY19saXN0KGRldl9wcml2LCBl eGVjLCBhcmdzLT5idWZmZXJfY291bnQpOwo+ICAgCWlmIChyZXQpCj4gICAJCXJldHVybiByZXQ7 Cj4gICAKPiBAQCAtMTMxMywxOCArMTI4MCwxNiBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJfQo+ICAgCj4gICAJaWYgKChh cmdzLT5mbGFncyAmIEk5MTVfRVhFQ19SSU5HX01BU0spID09IEk5MTVfRVhFQ19ERUZBVUxUKQo+ IC0JCXJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbUkNTXTsKPiArCQllbmdpbmUgPSAmZGV2X3ByaXYt PmVuZ2luZVtSQ1NdOwo+ICAgCWVsc2UgaWYgKChhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19SSU5H X01BU0spID09IEk5MTVfRVhFQ19CU0QpIHsKPiAtCQlpZiAoSEFTX0JTRDIoZGV2KSkgewo+IC0J CQlpbnQgcmluZ19pZDsKPiAtCQkJcmluZ19pZCA9IGdlbjhfZGlzcGF0Y2hfYnNkX3JpbmcoZGV2 LCBmaWxlKTsKPiAtCQkJcmluZyA9ICZkZXZfcHJpdi0+cmluZ1tyaW5nX2lkXTsKPiAtCQl9IGVs c2UKPiAtCQkJcmluZyA9ICZkZXZfcHJpdi0+cmluZ1tWQ1NdOwo+ICsJCWlmIChIQVNfQlNEMihk ZXZfcHJpdikpCj4gKwkJCWVuZ2luZSA9IGdlbjhfc2VsZWN0X2JzZF9lbmdpbmUoZGV2X3ByaXYs IGZpbGUpOwo+ICsJCWVsc2UKPiArCQkJZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmVbVkNTXTsK PiAgIAl9IGVsc2UKPiAtCQlyaW5nID0gJmRldl9wcml2LT5yaW5nWyhhcmdzLT5mbGFncyAmIEk5 MTVfRVhFQ19SSU5HX01BU0spIC0gMV07Cj4gKwkJZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmVb KGFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX1JJTkdfTUFTSykgLSAxXTsKPiAgIAo+IC0JaWYgKCFp bnRlbF9yaW5nX2luaXRpYWxpemVkKHJpbmcpKSB7Cj4gKwlpZiAoIWludGVsX2VuZ2luZV9pbml0 aWFsaXplZChlbmdpbmUpKSB7Cj4gICAJCURSTV9ERUJVRygiZXhlY2J1ZiB3aXRoIGludmFsaWQg cmluZzogJWRcbiIsCj4gICAJCQkgIChpbnQpKGFyZ3MtPmZsYWdzICYgSTkxNV9FWEVDX1JJTkdf TUFTSykpOwo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiBAQCAtMTMzNywxOSArMTMwMiwxOSBAQCBp OTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs Cj4gICAKPiAgIAlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7Cj4gICAKPiAtCXJldCA9 IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7Cj4gKwlyZXQgPSBpOTE1X211dGV4 X2xvY2tfaW50ZXJydXB0aWJsZShkZXZfcHJpdi0+ZGV2KTsKPiAgIAlpZiAocmV0KQo+ICAgCQln b3RvIHByZV9tdXRleF9lcnI7Cj4gICAKPiAgIAlpZiAoZGV2X3ByaXYtPnVtcy5tbV9zdXNwZW5k ZWQpIHsKPiAtCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCQltdXRleF91 bmxvY2soJmRldl9wcml2LT5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gICAJCXJldCA9IC1FQlVTWTsK PiAgIAkJZ290byBwcmVfbXV0ZXhfZXJyOwo+ICAgCX0KPiAgIAo+IC0JY3R4ID0gaTkxNV9nZW1f dmFsaWRhdGVfY29udGV4dChkZXYsIGZpbGUsIHJpbmcsIGN0eF9pZCk7Cj4gKwljdHggPSBpOTE1 X2dlbV92YWxpZGF0ZV9jb250ZXh0KGZpbGUsIGVuZ2luZSwgY3R4X2lkKTsKPiAgIAlpZiAoSVNf RVJSKGN0eCkpIHsKPiAtCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCQlt dXRleF91bmxvY2soJmRldl9wcml2LT5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gICAJCXJldCA9IFBU Ul9FUlIoY3R4KTsKPiAgIAkJZ290byBwcmVfbXV0ZXhfZXJyOwo+ICAgCX0KPiBAQCAtMTM2NCw3 ICsxMzI5LDcgQEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLAo+ICAgCWViID0gZWJfY3JlYXRlKGFyZ3MpOwo+ICAgCWlmIChlYiA9PSBO VUxMKSB7Cj4gICAJCWk5MTVfZ2VtX2NvbnRleHRfdW5yZWZlcmVuY2UoY3R4KTsKPiAtCQltdXRl eF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCQltdXRleF91bmxvY2soJmRldl9wcml2 LT5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gICAJCXJldCA9IC1FTk9NRU07Cj4gICAJCWdvdG8gcHJl X211dGV4X2VycjsKPiAgIAl9Cj4gQEAgLTEzNzQsMTIgKzEzMzksOSBAQCBpOTE1X2dlbV9kb19l eGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJaWYgKHJl dCkKPiAgIAkJZ290byBlcnI7Cj4gICAKPiAtCS8qIHRha2Ugbm90ZSBvZiB0aGUgYmF0Y2ggYnVm ZmVyIGJlZm9yZSB3ZSBtaWdodCByZW9yZGVyIHRoZSBsaXN0cyAqLwo+IC0JYmF0Y2hfb2JqID0g ZWJfZ2V0X2JhdGNoKGViKTsKPiAtCj4gICAJLyogTW92ZSB0aGUgb2JqZWN0cyBlbi1tYXNzZSBp bnRvIHRoZSBHVFQsIGV2aWN0aW5nIGlmIG5lY2Vzc2FyeS4gKi8KPiAgIAluZWVkX3JlbG9jcyA9 IChhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19OT19SRUxPQykgPT0gMDsKPiAtCXJldCA9IGk5MTVf Z2VtX2V4ZWNidWZmZXJfcmVzZXJ2ZShyaW5nLCAmZWItPnZtYXMsICZuZWVkX3JlbG9jcyk7Cj4g KwlyZXQgPSBpOTE1X2dlbV9leGVjYnVmZmVyX3Jlc2VydmUoZW5naW5lLCAmZWItPnZtYXMsICZu ZWVkX3JlbG9jcyk7Cj4gICAJaWYgKHJldCkKPiAgIAkJZ290byBlcnI7Cj4gICAKPiBAQCAtMTM4 OCwyNSArMTM1MCwyNSBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2Nh dGUoZWIpOwo+ICAgCWlmIChyZXQpIHsKPiAgIAkJaWYgKHJldCA9PSAtRUZBVUxUKSB7Cj4gLQkJ CXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfc2xvdyhkZXYsIGFyZ3MsIGZpbGUs IHJpbmcsCj4gKwkJCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfc2xvdyhkZXZf cHJpdiwgYXJncywgZmlsZSwgZW5naW5lLAo+ICAgCQkJCQkJCQllYiwgZXhlYyk7Cj4gLQkJCUJV R19PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOwo+ICsJCQlCVUdfT04o IW11dGV4X2lzX2xvY2tlZCgmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4KSk7Cj4gICAJCX0K PiAgIAkJaWYgKHJldCkKPiAgIAkJCWdvdG8gZXJyOwo+ICAgCX0KPiAgIAo+ICAgCS8qIFNldCB0 aGUgcGVuZGluZyByZWFkIGRvbWFpbnMgZm9yIHRoZSBiYXRjaCBidWZmZXIgdG8gQ09NTUFORCAq Lwo+IC0JaWYgKGJhdGNoX29iai0+YmFzZS5wZW5kaW5nX3dyaXRlX2RvbWFpbikgewo+ICsJYmF0 Y2ggPSBlYi0+YmF0Y2gtPm9iajsKPiArCWlmIChiYXRjaC0+YmFzZS5wZW5kaW5nX3dyaXRlX2Rv bWFpbikgewo+ICAgCQlEUk1fREVCVUcoIkF0dGVtcHRpbmcgdG8gdXNlIHNlbGYtbW9kaWZ5aW5n IGJhdGNoIGJ1ZmZlclxuIik7Cj4gICAJCXJldCA9IC1FSU5WQUw7Cj4gICAJCWdvdG8gZXJyOwo+ ICAgCX0KPiAtCWJhdGNoX29iai0+YmFzZS5wZW5kaW5nX3JlYWRfZG9tYWlucyB8PSBJOTE1X0dF TV9ET01BSU5fQ09NTUFORDsKPiArCWJhdGNoLT5iYXNlLnBlbmRpbmdfcmVhZF9kb21haW5zIHw9 IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOwo+ICAgCj4gLQlpZiAoaTkxNV9uZWVkc19jbWRfcGFy c2VyKHJpbmcpKSB7Cj4gLQkJcmV0ID0gaTkxNV9wYXJzZV9jbWRzKHJpbmcsCj4gLQkJCQkgICAg ICBiYXRjaF9vYmosCj4gKwlpZiAoaTkxNV9uZWVkc19jbWRfcGFyc2VyKGVuZ2luZSkpIHsKPiAr CQlyZXQgPSBpOTE1X3BhcnNlX2NtZHMoZW5naW5lLCBiYXRjaCwKPiAgIAkJCQkgICAgICBhcmdz LT5iYXRjaF9zdGFydF9vZmZzZXQsCj4gICAJCQkJICAgICAgZmlsZS0+aXNfbWFzdGVyKTsKPiAg IAkJaWYgKHJldCkKPiBAQCAtMTQzNiwxNiArMTM5OCwxNSBAQCBpOTE1X2dlbV9kb19leGVjYnVm ZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJCSAqICAgZml0dGlu ZyBkdWUgdG8gZnJhZ21lbnRhdGlvbi4KPiAgIAkJICogU28gdGhpcyBpcyBhY3R1YWxseSBzYWZl Lgo+ICAgCQkgKi8KPiAtCQlyZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9waW4oYmF0Y2hfb2JqLCAw LCAwKTsKPiArCQlyZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9waW4oYmF0Y2gsIDAsIDApOwo+ICAg CQlpZiAocmV0KQo+ICAgCQkJZ290byBlcnI7Cj4gICAKPiAtCQlleGVjX3N0YXJ0ICs9IGk5MTVf Z2VtX29ial9nZ3R0X29mZnNldChiYXRjaF9vYmopOwo+ICsJCWV4ZWNfc3RhcnQgKz0gaTkxNV9n ZW1fb2JqX2dndHRfb2Zmc2V0KGJhdGNoKTsKPiAgIAl9IGVsc2UKPiAtCQlleGVjX3N0YXJ0ICs9 IGk5MTVfZ2VtX29ial9vZmZzZXQoYmF0Y2hfb2JqLCB2bSk7Cj4gKwkJZXhlY19zdGFydCArPSBp OTE1X2dlbV9vYmpfb2Zmc2V0KGJhdGNoLCB2bSk7Cj4gICAKPiAtCXJldCA9IGRldl9wcml2LT5n dC5kb19leGVjYnVmKGRldiwgZmlsZSwgcmluZywgY3R4LCBhcmdzLAo+IC0JCQkJICAgICAgJmVi LT52bWFzLCBiYXRjaF9vYmosIGV4ZWNfc3RhcnQsIGZsYWdzKTsKPiArCXJldCA9IHN1Ym1pdF9l eGVjYnVmKGVuZ2luZSwgY3R4LCBhcmdzLCBlYiwgZXhlY19zdGFydCwgZmxhZ3MpOwo+ICAgCj4g ICAJLyoKPiAgIAkgKiBGSVhNRTogV2UgY3J1Y2lhbGx5IHJlbHkgdXBvbiB0aGUgYWN0aXZlIHRy YWNraW5nIGZvciB0aGUgKHBwZ3R0KQo+IEBAIC0xNDU0LDEzICsxNDE1LDEzIEBAIGk5MTVfZ2Vt X2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAkg KiBhY3RpdmUuCj4gICAJICovCj4gICAJaWYgKGZsYWdzICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUp Cj4gLQkJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4oYmF0Y2hfb2JqKTsKPiArCQlpOTE1X2dl bV9vYmplY3RfZ2d0dF91bnBpbihiYXRjaCk7Cj4gICBlcnI6Cj4gICAJLyogdGhlIHJlcXVlc3Qg b3ducyB0aGUgcmVmIG5vdyAqLwo+ICAgCWk5MTVfZ2VtX2NvbnRleHRfdW5yZWZlcmVuY2UoY3R4 KTsKPiAgIAllYl9kZXN0cm95KGViKTsKPiAgIAo+IC0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVj dF9tdXRleCk7Cj4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT5kZXYtPnN0cnVjdF9tdXRleCk7 Cj4gICAKPiAgIHByZV9tdXRleF9lcnI6Cj4gICAJLyogaW50ZWxfZ3B1X2J1c3kgc2hvdWxkIGFs c28gZ2V0IGEgcmVmLCBzbyBpdCB3aWxsIGZyZWUgd2hlbiB0aGUgZGV2aWNlCj4gQEAgLTE1MzIs NyArMTQ5Myw3IEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKPiAgIAlleGVjMi5mbGFncyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gICAJaTkx NV9leGVjYnVmZmVyMl9zZXRfY29udGV4dF9pZChleGVjMiwgMCk7Cj4gICAKPiAtCXJldCA9IGk5 MTVfZ2VtX2RvX2V4ZWNidWZmZXIoZGV2LCBkYXRhLCBmaWxlLCAmZXhlYzIsIGV4ZWMyX2xpc3Qp Owo+ICsJcmV0ID0gaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcih0b19pOTE1KGRldiksIGRhdGEsIGZp bGUsICZleGVjMiwgZXhlYzJfbGlzdCk7Cj4gICAJaWYgKCFyZXQpIHsKPiAgIAkJc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdCBfX3VzZXIgKnVzZXJfZXhlY19saXN0ID0KPiAgIAkJCXRv X3VzZXJfcHRyKGFyZ3MtPmJ1ZmZlcnNfcHRyKTsKPiBAQCAtMTU5Niw3ICsxNTU3LDcgQEAgaTkx NV9nZW1fZXhlY2J1ZmZlcjIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAg IAkJcmV0dXJuIC1FRkFVTFQ7Cj4gICAJfQo+ICAgCj4gLQlyZXQgPSBpOTE1X2dlbV9kb19leGVj YnVmZmVyKGRldiwgZGF0YSwgZmlsZSwgYXJncywgZXhlYzJfbGlzdCk7Cj4gKwlyZXQgPSBpOTE1 X2dlbV9kb19leGVjYnVmZmVyKHRvX2k5MTUoZGV2KSwgZGF0YSwgZmlsZSwgYXJncywgZXhlYzJf bGlzdCk7Cj4gICAJaWYgKCFyZXQpIHsKPiAgIAkJLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZz ZXRzIGJhY2sgdG8gdGhlIHVzZXIncyBleGVjIGxpc3QuICovCj4gICAJCXN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY19vYmplY3QyIF9fdXNlciAqdXNlcl9leGVjX2xpc3QgPQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggNmY0MTBjZmIwNTEwLi5iYTliY2UxYTJmMDcgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IEBAIC0yMDMsMzAgKzIwMywyOCBA QCBzdGF0aWMgZ2VuNl9ndHRfcHRlX3QgaXJpc19wdGVfZW5jb2RlKGRtYV9hZGRyX3QgYWRkciwK PiAgIH0KPiAgIAo+ICAgLyogQnJvYWR3ZWxsIFBhZ2UgRGlyZWN0b3J5IFBvaW50ZXIgRGVzY3Jp cHRvcnMgKi8KPiAtc3RhdGljIGludCBnZW44X3dyaXRlX3BkcChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nLCB1bnNpZ25lZCBlbnRyeSwKPiAtCQkJICAgdWludDY0X3QgdmFsKQo+ICtzdGF0 aWMgaW50IGdlbjhfd3JpdGVfcGRwKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwgdW5zaWdu ZWQgZW50cnksIHVpbnQ2NF90IHZhbCkKPiAgIHsKPiAtCWludCByZXQ7Cj4gKwlzdHJ1Y3QgaW50 ZWxfcmluZ2J1ZmZlciAqcmluZzsKPiAgIAo+ICAgCUJVR19PTihlbnRyeSA+PSA0KTsKPiAgIAo+ IC0JcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCA2KTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0 dXJuIHJldDsKPiArCXJpbmcgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA1KTsKPiArCWlmIChJU19F UlIocmluZykpCj4gKwkJcmV0dXJuIFBUUl9FUlIocmluZyk7Cj4gICAKPiAtCWludGVsX3Jpbmdf ZW1pdChyaW5nLCBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKSk7Cj4gLQlpbnRlbF9yaW5nX2VtaXQo cmluZywgR0VOOF9SSU5HX1BEUF9VRFcocmluZywgZW50cnkpKTsKPiArCWludGVsX3JpbmdfZW1p dChyaW5nLCBNSV9MT0FEX1JFR0lTVEVSX0lNTSgyKSk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmlu ZywgR0VOOF9SSU5HX1BEUF9VRFcocnEtPmVuZ2luZSwgZW50cnkpKTsKPiAgIAlpbnRlbF9yaW5n X2VtaXQocmluZywgKHUzMikodmFsID4+IDMyKSk7Cj4gLQlpbnRlbF9yaW5nX2VtaXQocmluZywg TUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkpOwo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIEdFTjhf UklOR19QRFBfTERXKHJpbmcsIGVudHJ5KSk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywgR0VO OF9SSU5HX1BEUF9MRFcocnEtPmVuZ2luZSwgZW50cnkpKTsKPiAgIAlpbnRlbF9yaW5nX2VtaXQo cmluZywgKHUzMikodmFsKSk7Cj4gICAJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+ICAgCj4g ICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludCBnZW44X21tX3N3aXRjaChzdHJ1 Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsCj4gLQkJCSAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZykKPiArc3RhdGljIGludCBnZW44X21tX3N3aXRjaChzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVz dCAqcnEsCj4gKwkJCSAgc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAgewo+ICAgCWlu dCBpLCByZXQ7Cj4gICAKPiBAQCAtMjM1LDcgKzIzMyw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9tbV9z d2l0Y2goc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LAo+ICAgCj4gICAJZm9yIChpID0gdXNl ZF9wZCAtIDE7IGkgPj0gMDsgaS0tKSB7Cj4gICAJCWRtYV9hZGRyX3QgYWRkciA9IHBwZ3R0LT5w ZF9kbWFfYWRkcltpXTsKPiAtCQlyZXQgPSBnZW44X3dyaXRlX3BkcChyaW5nLCBpLCBhZGRyKTsK PiArCQlyZXQgPSBnZW44X3dyaXRlX3BkcChycSwgaSwgYWRkcik7Cj4gICAJCWlmIChyZXQpCj4g ICAJCQlyZXR1cm4gcmV0Owo+ICAgCX0KPiBAQCAtNjk5LDk0ICs2OTcsODEgQEAgc3RhdGljIHVp bnQzMl90IGdldF9wZF9vZmZzZXQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAgCXJl dHVybiAocHBndHQtPnBkX29mZnNldCAvIDY0KSA8PCAxNjsKPiAgIH0KPiAgIAo+IC1zdGF0aWMg aW50IGhzd19tbV9zd2l0Y2goc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LAo+IC0JCQkgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArc3RhdGljIGludCBoc3dfbW1fc3dpdGNoKHN0 cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwKPiArCQkJIHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpw cGd0dCkKPiAgIHsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICAgCWludCBy ZXQ7Cj4gICAKPiAgIAkvKiBOQjogVExCcyBtdXN0IGJlIGZsdXNoZWQgYW5kIGludmFsaWRhdGVk IGJlZm9yZSBhIHN3aXRjaCAqLwo+IC0JcmV0ID0gcmluZy0+Zmx1c2gocmluZywgSTkxNV9HRU1f R1BVX0RPTUFJTlMsIEk5MTVfR0VNX0dQVV9ET01BSU5TKTsKPiArCXJldCA9IGk5MTVfcmVxdWVz dF9lbWl0X2ZsdXNoKHJxLCBJOTE1X0lOVkFMSURBVEVfQ0FDSEVTKTsKPiAgIAlpZiAocmV0KQo+ ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDYp Owo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJcmluZyA9IGludGVsX3JpbmdfYmVn aW4ocnEsIDUpOwo+ICsJaWYgKElTX0VSUihyaW5nKSkKPiArCQlyZXR1cm4gUFRSX0VSUihyaW5n KTsKPiAgIAo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9MT0FEX1JFR0lTVEVSX0lNTSgy KSk7Cj4gLQlpbnRlbF9yaW5nX2VtaXQocmluZywgUklOR19QUF9ESVJfRENMVihyaW5nKSk7Cj4g KwlpbnRlbF9yaW5nX2VtaXQocmluZywgUklOR19QUF9ESVJfRENMVihycS0+ZW5naW5lKSk7Cj4g ICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIFBQX0RJUl9EQ0xWXzJHKTsKPiAtCWludGVsX3Jpbmdf ZW1pdChyaW5nLCBSSU5HX1BQX0RJUl9CQVNFKHJpbmcpKTsKPiArCWludGVsX3JpbmdfZW1pdChy aW5nLCBSSU5HX1BQX0RJUl9CQVNFKHJxLT5lbmdpbmUpKTsKPiAgIAlpbnRlbF9yaW5nX2VtaXQo cmluZywgZ2V0X3BkX29mZnNldChwcGd0dCkpOwo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1J X05PT1ApOwo+ICAgCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKPiAgIAo+ICAgCXJldHVybiAw Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgZ2VuN19tbV9zd2l0Y2goc3RydWN0IGk5MTVfaHdf cHBndHQgKnBwZ3R0LAo+IC0JCQkgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK3N0 YXRpYyBpbnQgZ2VuN19tbV9zd2l0Y2goc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxLAo+ICsJ CQkgIHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgIHsKPiArCXN0cnVjdCBpbnRlbF9y aW5nYnVmZmVyICpyaW5nOwo+ICAgCWludCByZXQ7Cj4gICAKPiAgIAkvKiBOQjogVExCcyBtdXN0 IGJlIGZsdXNoZWQgYW5kIGludmFsaWRhdGVkIGJlZm9yZSBhIHN3aXRjaCAqLwo+IC0JcmV0ID0g cmluZy0+Zmx1c2gocmluZywgSTkxNV9HRU1fR1BVX0RPTUFJTlMsIEk5MTVfR0VNX0dQVV9ET01B SU5TKTsKPiArCXJldCA9IGk5MTVfcmVxdWVzdF9lbWl0X2ZsdXNoKHJxLCBJOTE1X0lOVkFMSURB VEVfQ0FDSEVTKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQlyZXQg PSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDYpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0 Owo+ICsJcmluZyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDUpOwo+ICsJaWYgKElTX0VSUihyaW5n KSkKPiArCQlyZXR1cm4gUFRSX0VSUihyaW5nKTsKPiAgIAo+ICAgCWludGVsX3JpbmdfZW1pdChy aW5nLCBNSV9MT0FEX1JFR0lTVEVSX0lNTSgyKSk7Cj4gLQlpbnRlbF9yaW5nX2VtaXQocmluZywg UklOR19QUF9ESVJfRENMVihyaW5nKSk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywgUklOR19Q UF9ESVJfRENMVihycS0+ZW5naW5lKSk7Cj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIFBQX0RJ Ul9EQ0xWXzJHKTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBSSU5HX1BQX0RJUl9CQVNFKHJp bmcpKTsKPiArCWludGVsX3JpbmdfZW1pdChyaW5nLCBSSU5HX1BQX0RJUl9CQVNFKHJxLT5lbmdp bmUpKTsKPiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywgZ2V0X3BkX29mZnNldChwcGd0dCkpOwo+ IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOwo+ICAgCWludGVsX3JpbmdfYWR2YW5j ZShyaW5nKTsKPiAgIAo+ICAgCS8qIFhYWDogUkNTIGlzIHRoZSBvbmx5IG9uZSB0byBhdXRvIGlu dmFsaWRhdGUgdGhlIFRMQnM/ICovCj4gLQlpZiAocmluZy0+aWQgIT0gUkNTKSB7Cj4gLQkJcmV0 ID0gcmluZy0+Zmx1c2gocmluZywgSTkxNV9HRU1fR1BVX0RPTUFJTlMsIEk5MTVfR0VNX0dQVV9E T01BSU5TKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+IC0JfQo+ICsJaWYgKHJx LT5lbmdpbmUtPmlkICE9IFJDUykKPiArCQlycS0+cGVuZGluZ19mbHVzaCB8PSBJOTE1X0lOVkFM SURBVEVfQ0FDSEVTOwo+ICAgCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGlu dCBnZW42X21tX3N3aXRjaChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsCj4gLQkJCSAgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArc3RhdGljIGludCBnZW42X21tX3N3aXRjaChz dHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEsCj4gKwkJCSAgc3RydWN0IGk5MTVfaHdfcHBndHQg KnBwZ3R0KQo+ICAgewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBwZ3R0LT5iYXNlLmRl djsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7Cj4gLQo+IC0KPiAtCUk5MTVfV1JJVEUoUklOR19QUF9ESVJfRENMVihyaW5nKSwgUFBfRElS X0RDTFZfMkcpOwo+IC0JSTkxNV9XUklURShSSU5HX1BQX0RJUl9CQVNFKHJpbmcpLCBnZXRfcGRf b2Zmc2V0KHBwZ3R0KSk7Cj4gLQo+IC0JUE9TVElOR19SRUFEKFJJTkdfUFBfRElSX0RDTFYocmlu ZykpOwo+IC0KPiAtCXJldHVybiAwOwo+ICsJcmV0dXJuIC1FTk9ERVY7Cj4gICB9Cj4gICAKPiAg IHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfZW5hYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4g ICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gKwlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmU7Cj4gICAJaW50IGo7Cj4gICAKPiAtCWZvcl9lYWNoX3Jpbmcocmlu ZywgZGV2X3ByaXYsIGopIHsKPiAtCQlJOTE1X1dSSVRFKFJJTkdfTU9ERV9HRU43KHJpbmcpLAo+ ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIGopCj4gKwkJSTkxNV9XUklURShS SU5HX01PREVfR0VONyhlbmdpbmUpLAo+ICAgCQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdGWF9Q UEdUVF9FTkFCTEUpKTsKPiAtCX0KPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQgZ2VuN19wcGd0 dF9lbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZzsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAg IAl1aW50MzJfdCBlY29jaGssIGVjb2JpdHM7Cj4gICAJaW50IGk7Cj4gICAKPiBAQCAtODAyLDEw ICs3ODcsMTUgQEAgc3RhdGljIHZvaWQgZ2VuN19wcGd0dF9lbmFibGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiAgIAl9Cj4gICAJSTkxNV9XUklURShHQU1fRUNPQ0hLLCBlY29jaGspOwo+ICAg Cj4gLQlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2LCBpKSB7Cj4gKwlmb3JfZWFjaF9lbmdp bmUoZW5naW5lLCBkZXZfcHJpdiwgaSkgewo+ICAgCQkvKiBHRlhfTU9ERSBpcyBwZXItcmluZyBv biBnZW43KyAqLwo+IC0JCUk5MTVfV1JJVEUoUklOR19NT0RFX0dFTjcocmluZyksCj4gKwkJSTkx NV9XUklURShSSU5HX01PREVfR0VONyhlbmdpbmUpLAo+ICAgCQkJICAgX01BU0tFRF9CSVRfRU5B QkxFKEdGWF9QUEdUVF9FTkFCTEUpKTsKPiArCj4gKwkJSTkxNV9XUklURShSSU5HX1BQX0RJUl9E Q0xWKGVuZ2luZSksIFBQX0RJUl9EQ0xWXzJHKTsKPiArCQlJOTE1X1dSSVRFKFJJTkdfUFBfRElS X0JBU0UoZW5naW5lKSwgZ2V0X3BkX29mZnNldChkZXZfcHJpdi0+bW0uYWxpYXNpbmdfcHBndHQp KTsKPiArCj4gKwkJUE9TVElOR19SRUFEKFJJTkdfUFBfRElSX0RDTFYoZW5naW5lKSk7Cj4gICAJ fQo+ICAgfQo+ICAgCj4gQEAgLTgxMyw2ICs4MDMsOCBAQCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0 X2VuYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gICAJdWludDMyX3QgZWNv Y2hrLCBnYWJfY3RsLCBlY29iaXRzOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l Owo+ICsJaW50IGk7Cj4gICAKPiAgIAllY29iaXRzID0gSTkxNV9SRUFEKEdBQ19FQ09fQklUUyk7 Cj4gICAJSTkxNV9XUklURShHQUNfRUNPX0JJVFMsIGVjb2JpdHMgfCBFQ09CSVRTX1NOQl9CSVQg fAo+IEBAIC04MjUsNiArODE3LDEzIEBAIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfZW5hYmxlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAJSTkxNV9XUklURShHQU1fRUNPQ0hLLCBlY29jaGsg fCBFQ09DSEtfU05CX0JJVCB8IEVDT0NIS19QUEdUVF9DQUNIRTY0Qik7Cj4gICAKPiAgIAlJOTE1 X1dSSVRFKEdGWF9NT0RFLCBfTUFTS0VEX0JJVF9FTkFCTEUoR0ZYX1BQR1RUX0VOQUJMRSkpOwo+ ICsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpKSB7Cj4gKwkJSTkxNV9X UklURShSSU5HX1BQX0RJUl9EQ0xWKGVuZ2luZSksIFBQX0RJUl9EQ0xWXzJHKTsKPiArCQlJOTE1 X1dSSVRFKFJJTkdfUFBfRElSX0JBU0UoZW5naW5lKSwgZ2V0X3BkX29mZnNldChkZXZfcHJpdi0+ bW0uYWxpYXNpbmdfcHBndHQpKTsKPiArCj4gKwkJUE9TVElOR19SRUFEKFJJTkdfUFBfRElSX0RD TFYoZW5naW5lKSk7Cj4gKwl9Cj4gICB9Cj4gICAKPiAgIC8qIFBQR1RUIHN1cHBvcnQgZm9yIFNh bmR5YmRyaWdlL0dlbjYgYW5kIGxhdGVyICovCj4gQEAgLTExMTUsMTggKzExMTQsMTMgQEAgaW50 IGk5MTVfcHBndHRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaTkxNV9od19w cGd0dCAqcHBndHQpCj4gICAKPiAgIGludCBpOTE1X3BwZ3R0X2luaXRfaHcoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+IC0J c3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gZGV2X3ByaXYtPm1tLmFsaWFzaW5nX3BwZ3R0 Owo+IC0JaW50IGksIHJldCA9IDA7Cj4gKwlpZiAoIVVTRVNfUFBHVFQoZGV2KSkKPiArCQlyZXR1 cm4gMDsKPiAgIAo+ICAgCS8qIEluIHRoZSBjYXNlIG9mIGV4ZWNsaXN0cywgUFBHVFQgaXMgZW5h YmxlZCBieSB0aGUgY29udGV4dCBkZXNjcmlwdG9yCj4gICAJICogYW5kIHRoZSBQRFBzIGFyZSBj b250YWluZWQgd2l0aGluIHRoZSBjb250ZXh0IGl0c2VsZi4gIFdlIGRvbid0Cj4gICAJICogbmVl ZCB0byBkbyBhbnl0aGluZyBoZXJlLiAqLwo+IC0JaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykK PiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlpZiAoIVVTRVNfUFBHVFQoZGV2KSkKPiArCWlmIChSQ1Nf RU5HSU5FKGRldiktPmV4ZWNsaXN0c19lbmFibGVkKQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+ICAg CWlmIChJU19HRU42KGRldikpCj4gQEAgLTExMzgsMTUgKzExMzIsNyBAQCBpbnQgaTkxNV9wcGd0 dF9pbml0X2h3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAJZWxzZQo+ICAgCQlXQVJOX09O KDEpOwo+ICAgCj4gLQlpZiAocHBndHQpIHsKPiAtCQlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9w cml2LCBpKSB7Cj4gLQkJCXJldCA9IHBwZ3R0LT5zd2l0Y2hfbW0ocHBndHQsIHJpbmcpOwo+IC0J CQlpZiAocmV0ICE9IDApCj4gLQkJCQlyZXR1cm4gcmV0Owo+IC0JCX0KPiAtCX0KPiAtCj4gLQly ZXR1cm4gcmV0Owo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICBzdHJ1Y3QgaTkxNV9od19wcGd0dCAq Cj4gICBpOTE1X3BwZ3R0X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJt X2k5MTVfZmlsZV9wcml2YXRlICpmcHJpdikKPiBAQCAtMTI0NywxNSArMTIzMywxNSBAQCBzdGF0 aWMgdm9pZCB1bmRvX2lkbGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGJv b2wgaW50ZXJydXB0aWJsZSkKPiAgIHZvaWQgaTkxNV9jaGVja19hbmRfY2xlYXJfZmF1bHRzKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmc7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gICAJaW50IGk7Cj4g ICAKPiAgIAlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA2KQo+ICAgCQlyZXR1cm47Cj4gICAK PiAtCWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3ByaXYsIGkpIHsKPiArCWZvcl9lYWNoX2VuZ2lu ZShlbmdpbmUsIGRldl9wcml2LCBpKSB7Cj4gICAJCXUzMiBmYXVsdF9yZWc7Cj4gLQkJZmF1bHRf cmVnID0gSTkxNV9SRUFEKFJJTkdfRkFVTFRfUkVHKHJpbmcpKTsKPiArCQlmYXVsdF9yZWcgPSBJ OTE1X1JFQUQoUklOR19GQVVMVF9SRUcoZW5naW5lKSk7Cj4gICAJCWlmIChmYXVsdF9yZWcgJiBS SU5HX0ZBVUxUX1ZBTElEKSB7Cj4gICAJCQlEUk1fREVCVUdfRFJJVkVSKCJVbmV4cGVjdGVkIGZh dWx0XG4iCj4gICAJCQkJCSAiXHRBZGRyOiAweCUwOGx4XFxuIgo+IEBAIC0xMjY2LDExICsxMjUy LDExIEBAIHZvaWQgaTkxNV9jaGVja19hbmRfY2xlYXJfZmF1bHRzKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCj4gICAJCQkJCSBmYXVsdF9yZWcgJiBSSU5HX0ZBVUxUX0dUVFNFTF9NQVNLID8gIkdH VFQiIDogIlBQR1RUIiwKPiAgIAkJCQkJIFJJTkdfRkFVTFRfU1JDSUQoZmF1bHRfcmVnKSwKPiAg IAkJCQkJIFJJTkdfRkFVTFRfRkFVTFRfVFlQRShmYXVsdF9yZWcpKTsKPiAtCQkJSTkxNV9XUklU RShSSU5HX0ZBVUxUX1JFRyhyaW5nKSwKPiArCQkJSTkxNV9XUklURShSSU5HX0ZBVUxUX1JFRyhl bmdpbmUpLAo+ICAgCQkJCSAgIGZhdWx0X3JlZyAmIH5SSU5HX0ZBVUxUX1ZBTElEKTsKPiAgIAkJ fQo+ICAgCX0KPiAtCVBPU1RJTkdfUkVBRChSSU5HX0ZBVUxUX1JFRygmZGV2X3ByaXYtPnJpbmdb UkNTXSkpOwo+ICsJUE9TVElOR19SRUFEKFJJTkdfRkFVTFRfUkVHKFJDU19FTkdJTkUoZGV2X3By aXYpKSk7Cj4gICB9Cj4gICAKPiAgIHZvaWQgaTkxNV9nZW1fc3VzcGVuZF9ndHRfbWFwcGluZ3Mo c3RydWN0IGRybV9kZXZpY2UgKmRldikKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZ3R0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+ IGluZGV4IGQ1YzE0YWY1MWU5OS4uMDgwMjgzMmRmMjhjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZ3R0LmgKPiBAQCAtMjYzLDggKzI2Myw4IEBAIHN0cnVjdCBpOTE1X2h3X3BwZ3R0 IHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXY7Cj4gICAKPiAg IAlpbnQgKCplbmFibGUpKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCk7Cj4gLQlpbnQgKCpz d2l0Y2hfbW0pKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwKPiAtCQkJIHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcpOwo+ICsJaW50ICgqc3dpdGNoX21tKShzdHJ1Y3QgaTkxNV9nZW1f cmVxdWVzdCAqcnEsCj4gKwkJCSBzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpOwo+ICAgCXZv aWQgKCpkZWJ1Z19kdW1wKShzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsIHN0cnVjdCBzZXFf ZmlsZSAqbSk7Cj4gICB9Owo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f cmVuZGVyX3N0YXRlLmMKPiBpbmRleCBhOWE2MmQ3NWFhNTcuLmZmZmQyNmRmYTRkZCAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZW5kZXJfc3RhdGUuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5jCj4gQEAgLTI4 LDggKzI4LDE1IEBACj4gICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAgICNpbmNsdWRlICJpbnRl bF9yZW5kZXJzdGF0ZS5oIgo+ICAgCj4gK3N0cnVjdCByZW5kZXJfc3RhdGUgewo+ICsJY29uc3Qg c3RydWN0IGludGVsX3JlbmRlcnN0YXRlX3JvZGF0YSAqcm9kYXRhOwo+ICsJc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iajsKPiArCXU2NCBnZ3R0X29mZnNldDsKPiArCWludCBnZW47Cj4g K307Cj4gKwo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9yZW5kZXJzdGF0ZV9yb2RhdGEg Kgo+IC1yZW5kZXJfc3RhdGVfZ2V0X3JvZGF0YShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25z dCBpbnQgZ2VuKQo+ICtyZW5kZXJfc3RhdGVfZ2V0X3JvZGF0YShjb25zdCBpbnQgZ2VuKQo+ICAg ewo+ICAgCXN3aXRjaCAoZ2VuKSB7Cj4gICAJY2FzZSA2Ogo+IEBAIC00MywxOSArNTAsMTkgQEAg cmVuZGVyX3N0YXRlX2dldF9yb2RhdGEoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY29uc3QgaW50 IGdlbikKPiAgIAlyZXR1cm4gTlVMTDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IHJlbmRlcl9z dGF0ZV9pbml0KHN0cnVjdCByZW5kZXJfc3RhdGUgKnNvLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+ICtzdGF0aWMgaW50IHJlbmRlcl9zdGF0ZV9pbml0KHN0cnVjdCByZW5kZXJfc3RhdGUgKnNv LCBzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gICB7Cj4gICAJaW50IHJldDsKPiAgIAo+ IC0Jc28tPmdlbiA9IElOVEVMX0lORk8oZGV2KS0+Z2VuOwo+IC0Jc28tPnJvZGF0YSA9IHJlbmRl cl9zdGF0ZV9nZXRfcm9kYXRhKGRldiwgc28tPmdlbik7Cj4gKwlzby0+Z2VuID0gSU5URUxfSU5G TyhycS0+aTkxNSktPmdlbjsKPiArCXNvLT5yb2RhdGEgPSByZW5kZXJfc3RhdGVfZ2V0X3JvZGF0 YShzby0+Z2VuKTsKPiAgIAlpZiAoc28tPnJvZGF0YSA9PSBOVUxMKQo+ICAgCQlyZXR1cm4gMDsK PiAgIAo+ICAgCWlmIChzby0+cm9kYXRhLT5iYXRjaF9pdGVtcyAqIDQgPiA0MDk2KQo+ICAgCQly ZXR1cm4gLUVJTlZBTDsKPiAgIAo+IC0Jc28tPm9iaiA9IGk5MTVfZ2VtX2FsbG9jX29iamVjdChk ZXYsIDQwOTYpOwo+ICsJc28tPm9iaiA9IGk5MTVfZ2VtX2FsbG9jX29iamVjdChycS0+aTkxNS0+ ZGV2LCA0MDk2KTsKPiAgIAlpZiAoc28tPm9iaiA9PSBOVUxMKQo+ICAgCQlyZXR1cm4gLUVOT01F TTsKPiAgIAo+IEBAIC0xMDgsMTAgKzExNSw2IEBAIHN0YXRpYyBpbnQgcmVuZGVyX3N0YXRlX3Nl dHVwKHN0cnVjdCByZW5kZXJfc3RhdGUgKnNvKQo+ICAgCX0KPiAgIAlrdW5tYXAocGFnZSk7Cj4g ICAKPiAtCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihzby0+b2JqLCBm YWxzZSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+ICAgCWlmIChyb2RhdGEt PnJlbG9jW3JlbG9jX2luZGV4XSAhPSAtMSkgewo+ICAgCQlEUk1fRVJST1IoIm9ubHkgJWQgcmVs b2NzIHJlc29sdmVkXG4iLCByZWxvY19pbmRleCk7Cj4gICAJCXJldHVybiAtRUlOVkFMOwo+IEBA IC0xMjAsNjAgKzEyMyw0NiBAQCBzdGF0aWMgaW50IHJlbmRlcl9zdGF0ZV9zZXR1cChzdHJ1Y3Qg cmVuZGVyX3N0YXRlICpzbykKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC12b2lkIGk5MTVf Z2VtX3JlbmRlcl9zdGF0ZV9maW5pKHN0cnVjdCByZW5kZXJfc3RhdGUgKnNvKQo+ICtzdGF0aWMg dm9pZCByZW5kZXJfc3RhdGVfZmluaShzdHJ1Y3QgcmVuZGVyX3N0YXRlICpzbykKPiAgIHsKPiAg IAlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihzby0+b2JqKTsKPiAgIAlkcm1fZ2VtX29iamVj dF91bnJlZmVyZW5jZSgmc28tPm9iai0+YmFzZSk7Cj4gICB9Cj4gICAKPiAtaW50IGk5MTVfZ2Vt X3JlbmRlcl9zdGF0ZV9wcmVwYXJlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gLQkJ CQkgIHN0cnVjdCByZW5kZXJfc3RhdGUgKnNvKQo+ICtpbnQgaTkxNV9nZW1fcmVuZGVyX3N0YXRl X2luaXQoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICAgewo+ICsJc3RydWN0IHJlbmRl cl9zdGF0ZSBzbzsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gLQlpZiAoV0FSTl9PTihyaW5nLT5pZCAh PSBSQ1MpKQo+ICsJaWYgKFdBUk5fT04ocnEtPmVuZ2luZS0+aWQgIT0gUkNTKSkKPiAgIAkJcmV0 dXJuIC1FTk9FTlQ7Cj4gICAKPiAtCXJldCA9IHJlbmRlcl9zdGF0ZV9pbml0KHNvLCByaW5nLT5k ZXYpOwo+ICsJcmV0ID0gcmVuZGVyX3N0YXRlX2luaXQoJnNvLCBycSk7Cj4gICAJaWYgKHJldCkK PiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0JaWYgKHNvLT5yb2RhdGEgPT0gTlVMTCkKPiArCWlm IChzby5yb2RhdGEgPT0gTlVMTCkKPiAgIAkJcmV0dXJuIDA7Cj4gICAKPiAtCXJldCA9IHJlbmRl cl9zdGF0ZV9zZXR1cChzbyk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJaTkxNV9nZW1fcmVuZGVyX3N0 YXRlX2Zpbmkoc28pOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4g LX0KPiAtCj4gLWludCBpOTE1X2dlbV9yZW5kZXJfc3RhdGVfaW5pdChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICpyaW5nKQo+IC17Cj4gLQlzdHJ1Y3QgcmVuZGVyX3N0YXRlIHNvOwo+IC0JaW50IHJl dDsKPiAtCj4gLQlyZXQgPSBpOTE1X2dlbV9yZW5kZXJfc3RhdGVfcHJlcGFyZShyaW5nLCAmc28p Owo+ICsJcmV0ID0gcmVuZGVyX3N0YXRlX3NldHVwKCZzbyk7Cj4gICAJaWYgKHJldCkKPiAtCQly ZXR1cm4gcmV0Owo+ICsJCWdvdG8gb3V0Owo+ICAgCj4gLQlpZiAoc28ucm9kYXRhID09IE5VTEwp Cj4gLQkJcmV0dXJuIDA7Cj4gKwlpZiAoaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qoc28ub2JqLCBm YWxzZSkpCj4gKwkJaTkxNV9nZW1fY2hpcHNldF9mbHVzaChycS0+aTkxNS0+ZGV2KTsKPiAgIAo+ IC0JcmV0ID0gcmluZy0+ZGlzcGF0Y2hfZXhlY2J1ZmZlcihyaW5nLAo+IC0JCQkJCXNvLmdndHRf b2Zmc2V0LAo+IC0JCQkJCXNvLnJvZGF0YS0+YmF0Y2hfaXRlbXMgKiA0LAo+IC0JCQkJCUk5MTVf RElTUEFUQ0hfU0VDVVJFKTsKPiArCXJldCA9IGk5MTVfcmVxdWVzdF9lbWl0X2JhdGNoYnVmZmVy KHJxLCBOVUxMLAo+ICsJCQkJCSAgICBzby5nZ3R0X29mZnNldCwKPiArCQkJCQkgICAgc28ucm9k YXRhLT5iYXRjaF9pdGVtcyAqIDQsCj4gKwkJCQkJICAgIEk5MTVfRElTUEFUQ0hfU0VDVVJFKTsK PiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JaTkxNV92bWFfbW92ZV90b19h Y3RpdmUoaTkxNV9nZW1fb2JqX3RvX2dndHQoc28ub2JqKSwgcmluZyk7Cj4gKwlzby5vYmotPmJh c2UucGVuZGluZ19yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKPiArCXJl dCA9IGk5MTVfcmVxdWVzdF9hZGRfdm1hKHJxLCBpOTE1X2dlbV9vYmpfdG9fZ2d0dChzby5vYmop LCAwKTsKPiAgIAo+IC0JcmV0ID0gX19pOTE1X2FkZF9yZXF1ZXN0KHJpbmcsIE5VTEwsIHNvLm9i aiwgTlVMTCk7Cj4gICAJLyogX19pOTE1X2FkZF9yZXF1ZXN0IG1vdmVzIG9iamVjdCB0byBpbmFj dGl2ZSBpZiBpdCBmYWlscyAqLwo+ICAgb3V0Ogo+IC0JaTkxNV9nZW1fcmVuZGVyX3N0YXRlX2Zp bmkoJnNvKTsKPiArCXJlbmRlcl9zdGF0ZV9maW5pKCZzbyk7Cj4gICAJcmV0dXJuIHJldDsKPiAg IH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVuZGVyX3N0 YXRlLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZW5kZXJfc3RhdGUuaAo+IGRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IGM0NDk2MWVkM2ZhZC4uMDAwMDAwMDAwMDAw Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVuZGVyX3N0YXRlLmgKPiAr KysgL2Rldi9udWxsCj4gQEAgLTEsNDcgKzAsMCBAQAo+IC0vKgo+IC0gKiBDb3B5cmlnaHQgwqkg MjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgo+IC0gKgo+IC0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+IC0gKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAo+IC0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gLSAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAo+IC0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAtICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiAtICoKPiAtICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAo+IC0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gLSAqIFNvZnR3YXJlLgo+IC0g Kgo+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+IC0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiAtICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCj4gLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gLSAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H Cj4gLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIKPiAtICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+IC0gKi8K PiAtCj4gLSNpZm5kZWYgX0k5MTVfR0VNX1JFTkRFUl9TVEFURV9IXwo+IC0jZGVmaW5lIF9JOTE1 X0dFTV9SRU5ERVJfU1RBVEVfSF8KPiAtCj4gLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+IC0K PiAtc3RydWN0IGludGVsX3JlbmRlcnN0YXRlX3JvZGF0YSB7Cj4gLQljb25zdCB1MzIgKnJlbG9j Owo+IC0JY29uc3QgdTMyICpiYXRjaDsKPiAtCWNvbnN0IHUzMiBiYXRjaF9pdGVtczsKPiAtfTsK PiAtCj4gLXN0cnVjdCByZW5kZXJfc3RhdGUgewo+IC0JY29uc3Qgc3RydWN0IGludGVsX3JlbmRl cnN0YXRlX3JvZGF0YSAqcm9kYXRhOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i ajsKPiAtCXU2NCBnZ3R0X29mZnNldDsKPiAtCWludCBnZW47Cj4gLX07Cj4gLQo+IC1pbnQgaTkx NV9nZW1fcmVuZGVyX3N0YXRlX2luaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4g LXZvaWQgaTkxNV9nZW1fcmVuZGVyX3N0YXRlX2Zpbmkoc3RydWN0IHJlbmRlcl9zdGF0ZSAqc28p Owo+IC1pbnQgaTkxNV9nZW1fcmVuZGVyX3N0YXRlX3ByZXBhcmUoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZywKPiAtCQkJCSAgc3RydWN0IHJlbmRlcl9zdGF0ZSAqc28pOwo+IC0KPiAtI2Vu ZGlmIC8qIF9JOTE1X0dFTV9SRU5ERVJfU1RBVEVfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fcmVxdWVzdC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLjU4MmM1ZGYyOTMzZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmMKPiBAQCAtMCwwICsxLDY1MSBAQAo+ICsvKgo+ICsg KiBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4g KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK PiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAq IFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNP RlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5j bHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgPGRybS9pOTE1X2RybS5oPgo+ICsjaW5jbHVk ZSAiaTkxNV90cmFjZS5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gKwo+ICtzdHJ1Y3Qg aTkxNV9nZW1fcmVxdWVzdF9fdm1hIHsKPiArCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKPiArCXN0 cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsK PiArCXUzMiB3cml0ZSwgZmVuY2U7Cj4gK307Cj4gKwo+ICtzdGF0aWMgYm9vbCBjaGVja19yZXNl dChzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gK3sKPiArCXVuc2lnbmVkIHJlc2V0ID0g YXRvbWljX3JlYWQoJnJxLT5pOTE1LT5ncHVfZXJyb3IucmVzZXRfY291bnRlcik7Cj4gKwlyZXR1 cm4gbGlrZWx5KHJlc2V0ID09IHJxLT5yZXNldF9jb3VudGVyKTsKPiArfQo+ICsKPiAraW50Cj4g K2k5MTVfcmVxdWVzdF9hZGRfdm1hKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwKPiArCQkg ICAgIHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ICsJCSAgICAgdW5zaWduZWQgZmVuY2VkKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdm1hLT5vYmo7Cj4gKwl1MzIg b2xkX3JlYWQgPSBvYmotPmJhc2UucmVhZF9kb21haW5zOwo+ICsJdTMyIG9sZF93cml0ZSA9IG9i ai0+YmFzZS53cml0ZV9kb21haW47Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdF9fdm1hICpy ZWY7Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcnEtPmk5MTUtPmRldi0+c3RydWN0X211 dGV4KTsKPiArCUJVR19PTighcnEtPm91dHN0YW5kaW5nKTsKPiArCj4gKwlvYmotPmJhc2Uud3Jp dGVfZG9tYWluID0gb2JqLT5iYXNlLnBlbmRpbmdfd3JpdGVfZG9tYWluOwo+ICsJaWYgKG9iai0+ YmFzZS53cml0ZV9kb21haW4gPT0gMCkKPiArCQlvYmotPmJhc2UucGVuZGluZ19yZWFkX2RvbWFp bnMgfD0gb2JqLT5iYXNlLnJlYWRfZG9tYWluczsKPiArCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMg PSBvYmotPmJhc2UucGVuZGluZ19yZWFkX2RvbWFpbnM7Cj4gKwo+ICsJb2JqLT5iYXNlLnBlbmRp bmdfcmVhZF9kb21haW5zID0gMDsKPiArCW9iai0+YmFzZS5wZW5kaW5nX3dyaXRlX2RvbWFpbiA9 IDA7Cj4gKwo+ICsJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NoYW5nZV9kb21haW4ob2JqLCBvbGRf cmVhZCwgb2xkX3dyaXRlKTsKPiArCWlmIChvYmotPmJhc2UucmVhZF9kb21haW5zID09IDApCj4g KwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmVmID0ga21hbGxvYyhzaXplb2YoKnJlZiksIEdGUF9LRVJO RUwpOwo+ICsJaWYgKHJlZiA9PSBOVUxMKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWxp c3RfYWRkKCZyZWYtPmxpbmssICZycS0+dm1hcyk7Cj4gKwlyZWYtPnZtYSA9IHZtYTsKPiArCXJl Zi0+b2JqID0gb2JqOwo+ICsJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKCZvYmotPmJhc2UpOwo+ ICsJcmVmLT53cml0ZSA9IG9iai0+YmFzZS53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9HUFVfRE9N QUlOUzsKPiArCXJlZi0+ZmVuY2UgPSBmZW5jZWQ7Cj4gKwo+ICsJaWYgKHJlZi0+d3JpdGUpIHsK PiArCQlycS0+cGVuZGluZ19mbHVzaCB8PSBJOTE1X0ZMVVNIX0NBQ0hFUzsKPiArCQlpbnRlbF9m Yl9vYmpfaW52YWxpZGF0ZShvYmosIHJxKTsKPiArCX0KPiArCj4gKwkvKiB1cGRhdGUgZm9yIHRo ZSBpbXBsaWNpdCBmbHVzaCBhZnRlciB0aGUgcnEgKi8KPiArCW9iai0+YmFzZS53cml0ZV9kb21h aW4gJj0gfkk5MTVfR0VNX0dQVV9ET01BSU5TOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHZtYV9mcmVlKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0X192bWEgKnJlZikKPiAr ewo+ICsJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJnJlZi0+b2JqLT5iYXNlKTsKPiArCWxp c3RfZGVsKCZyZWYtPmxpbmspOwo+ICsJa2ZyZWUocmVmKTsKPiArfQo+ICsKPiAraW50Cj4gK2k5 MTVfcmVxdWVzdF9lbWl0X2ZsdXNoKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwKPiArCQkJ dW5zaWduZWQgZmxhZ3MpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9 IHJxLT5lbmdpbmU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJx LT5pOTE1LT5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwlCVUdfT04oIXJxLT5vdXRzdGFuZGluZyk7 Cj4gKwo+ICsJaWYgKChmbGFncyAmIHJxLT5wZW5kaW5nX2ZsdXNoKSA9PSAwKQo+ICsJCXJldHVy biAwOwo+ICsKPiArCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfZW1pdF9mbHVzaChycSk7Cj4gKwly ZXQgPSBlbmdpbmUtPmVtaXRfZmx1c2gocnEsIHJxLT5wZW5kaW5nX2ZsdXNoKTsKPiArCWlmIChy ZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlycS0+cGVuZGluZ19mbHVzaCA9IDA7Cj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiAraW50Cj4gK19faTkxNV9yZXF1ZXN0X2VtaXRfYnJlYWRjcnVt YihzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEsIGludCBpZCkKPiArewo+ICsJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lID0gcnEtPmVuZ2luZTsKPiArCXUzMiBzZXFubzsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcnEtPmk5MTUtPmRldi0+c3RydWN0 X211dGV4KTsKPiArCj4gKwlpZiAocnEtPmJyZWFkY3J1bWJbaWRdKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCWlmIChycS0+b3V0c3RhbmRpbmcpIHsKPiArCQlyZXQgPSBpOTE1X3JlcXVlc3RfZW1p dF9mbHVzaChycSwgSTkxNV9DT01NQU5EX0JBUlJJRVIpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJl dHVybiByZXQ7Cj4gKwo+ICsJCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfZW1pdF9icmVhZGNydW1i KHJxKTsKPiArCQlpZiAoaWQgPT0gZW5naW5lLT5pZCkKPiArCQkJcmV0ID0gZW5naW5lLT5lbWl0 X2JyZWFkY3J1bWIocnEpOwo+ICsJCWVsc2UKPiArCQkJcmV0ID0gZW5naW5lLT5zZW1hcGhvcmUu c2lnbmFsKHJxLCBpZCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJ c2Vxbm8gPSBycS0+c2Vxbm87Cj4gKwl9IGVsc2UgaWYgKGVuZ2luZS0+YnJlYWRjcnVtYltpZF0g PT0gMCB8fAo+ICsJCSAgIF9faTkxNV9zZXFub19wYXNzZWQocnEtPnNlcW5vLCBlbmdpbmUtPmJy ZWFkY3J1bWJbaWRdKSkgewo+ICsJCXN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICp0bXA7Cj4gKwo+ ICsJCXRtcCA9IGludGVsX2VuZ2luZV9hbGxvY19yZXF1ZXN0KGVuZ2luZSwKPiArCQkJCQkJIHJx LT5yaW5nLT5sYXN0X2NvbnRleHQpOwo+ICsJCWlmIChJU19FUlIodG1wKSkKPiArCQkJcmV0dXJu IFBUUl9FUlIodG1wKTsKPiArCj4gKwkJLyogTWFzcXVlcmFkZSBhcyBhIGNvbnRpbnVhdGlvbiBv ZiB0aGUgZWFybGllciByZXF1ZXN0ICovCj4gKwkJdG1wLT5yZXNldF9jb3VudGVyID0gcnEtPnJl c2V0X2NvdW50ZXI7Cj4gKwo+ICsJCXJldCA9IF9faTkxNV9yZXF1ZXN0X2VtaXRfYnJlYWRjcnVt Yih0bXAsIGlkKTsKPiArCQlpZiAocmV0ID09IDAgJiYgaWQgIT0gZW5naW5lLT5pZCkgewo+ICsJ CQkvKiBzZW1hcGhvcmVzIGFyZSB1bnN0YWJsZSBhY3Jvc3MgYSB3cmFwICovCj4gKwkJCWlmICh0 bXAtPnNlcW5vIDwgZW5naW5lLT5icmVhZGNydW1iW2lkXSkKPiArCQkJCXJldCA9IGk5MTVfcmVx dWVzdF93YWl0KHRtcCk7Cj4gKwkJfQo+ICsJCWlmIChyZXQgPT0gMCkKPiArCQkJcmV0ID0gaTkx NV9yZXF1ZXN0X2NvbW1pdCh0bXApOwo+ICsKPiArCQlpOTE1X3JlcXVlc3RfcHV0KHRtcCk7Cj4g KwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJc2Vxbm8gPSB0bXAtPnNlcW5v Owo+ICsJfSBlbHNlCj4gKwkJc2Vxbm8gPSBlbmdpbmUtPmJyZWFkY3J1bWJbaWRdOwo+ICsKPiAr CXJxLT5icmVhZGNydW1iW2lkXSA9IHNlcW5vOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2lu dAo+ICtpOTE1X3JlcXVlc3RfZW1pdF9iYXRjaGJ1ZmZlcihzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVz dCAqcnEsCj4gKwkJCSAgICAgIHN0cnVjdCBpOTE1X3ZtYSAqYmF0Y2gsCj4gKwkJCSAgICAgIHVp bnQ2NF90IHN0YXJ0LCB1aW50MzJfdCBsZW4sCj4gKwkJCSAgICAgIHVuc2lnbmVkIGZsYWdzKQo+ ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBycS0+ZW5naW5lOwo+ICsJ aW50IHJldDsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycS0+aTkxNS0+ZGV2LT5zdHJ1 Y3RfbXV0ZXgpOwo+ICsJQlVHX09OKCFycS0+b3V0c3RhbmRpbmcpOwo+ICsJQlVHX09OKHJxLT5i cmVhZGNydW1iW3JxLT5lbmdpbmUtPmlkXSk7Cj4gKwo+ICsJdHJhY2VfaTkxNV9nZW1fcmVxdWVz dF9lbWl0X2JhdGNoKHJxKTsKPiArCXJldCA9IGVuZ2luZS0+ZW1pdF9iYXRjaGJ1ZmZlcihycSwg c3RhcnQsIGxlbiwgZmxhZ3MpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAr CS8qIFdlIHRyYWNrIHRoZSBhc3NvY2lhdGVkIGJhdGNoIHZtYSBmb3IgZGVidWdnaW5nIGFuZCBl cnJvciBjYXB0dXJlLgo+ICsJICogV2hpbHN0IHRoaXMgcmVxdWVzdCBleGlzdHMsIHRoZSBiYXRj aCBvYmogd2lsbCBiZSBvbiB0aGUgYWN0aXZlX2xpc3QsCj4gKwkgKiBhbmQgc28gd2lsbCBob2xk IHRoZSBhY3RpdmUgcmVmZXJlbmNlLiBPbmx5IHdoZW4gdGhpcyByZXF1ZXN0IGlzCj4gKwkgKiBy ZXRpcmVkIHdpbGwgdGhlIHRoZSBiYXRjaCBiZSBtb3ZlZCBvbnRvIHRoZSBpbmFjdGl2ZV9saXN0 IGFuZCBsb3NlCj4gKwkgKiBpdHMgYWN0aXZlIHJlZmVyZW5jZS4gSGVuY2Ugd2UgZG8gbm90IG5l ZWQgdG8gZXhwbGljaXRseSBob2xkCj4gKwkgKiBhbm90aGVyIHJlZmVyZW5jZSBoZXJlLgo+ICsJ ICovCj4gKwlycS0+YmF0Y2ggPSBiYXRjaDsKPiArCXJxLT5wZW5kaW5nX2ZsdXNoIHw9IEk5MTVf Q09NTUFORF9CQVJSSUVSOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qIFRyYWNrIHRoZSBi YXRjaGVzIHN1Ym1pdHRlZCBieSBjbGllbnRzIGZvciB0aHJvdHRsaW5nICovCj4gK3N0YXRpYyB2 b2lkCj4gK2FkZF90b19jbGllbnQoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSBycS0+Y3R4LT5maWxl X3ByaXY7Cj4gKwo+ICsJaWYgKGZpbGVfcHJpdikgewo+ICsJCXNwaW5fbG9jaygmZmlsZV9wcml2 LT5tbS5sb2NrKTsKPiArCQlsaXN0X2FkZF90YWlsKCZycS0+Y2xpZW50X2xpc3QsCj4gKwkJCSAg ICAgICZmaWxlX3ByaXYtPm1tLnJlcXVlc3RfbGlzdCk7Cj4gKwkJcnEtPmZpbGVfcHJpdiA9IGZp bGVfcHJpdjsKPiArCQlzcGluX3VubG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKPiArCX0KPiAr fQo+ICsKPiArc3RhdGljIHZvaWQKPiArcmVtb3ZlX2Zyb21fY2xpZW50KHN0cnVjdCBpOTE1X2dl bV9yZXF1ZXN0ICpycSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmls ZV9wcml2ID0gcnEtPmZpbGVfcHJpdjsKPiArCj4gKwlpZiAoIWZpbGVfcHJpdikKPiArCQlyZXR1 cm47Cj4gKwo+ICsJc3Bpbl9sb2NrKCZmaWxlX3ByaXYtPm1tLmxvY2spOwo+ICsJaWYgKHJxLT5m aWxlX3ByaXYpIHsKPiArCQlsaXN0X2RlbCgmcnEtPmNsaWVudF9saXN0KTsKPiArCQlycS0+Zmls ZV9wcml2ID0gTlVMTDsKPiArCX0KPiArCXNwaW5fdW5sb2NrKCZmaWxlX3ByaXYtPm1tLmxvY2sp Owo+ICt9Cj4gKwo+ICsvKiBBY3Rpdml0eSB0cmFja2luZyBvbiB0aGUgb2JqZWN0IHNvIHRoYXQg d2UgY2FuIHNlcmlhbGlzZSBDUFUgYWNjZXNzIHRvCj4gKyAqIHRoZSBvYmplY3QncyBtZW1vcnkg d2l0aCB0aGUgR1BVLgo+ICsgKi8KPiArc3RhdGljIHZvaWQKPiArYWRkX3RvX29iaihzdHJ1Y3Qg aTkxNV9nZW1fcmVxdWVzdCAqcnEsCj4gKwkgICBzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdF9fdm1h ICpyZWYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSByZWYtPm9i ajsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IHJxLT5lbmdpbmU7Cj4gKwo+ ICsJLyogQWRkIGEgcmVmZXJlbmNlIGlmIHdlJ3JlIG5ld2x5IGVudGVyaW5nIHRoZSBhY3RpdmUg bGlzdC4gKi8KPiArCWlmIChvYmotPmxhc3RfcmVhZFtlbmdpbmUtPmlkXS5yZXF1ZXN0ID09IE5V TEwgJiYgb2JqLT5hY3RpdmUrKyA9PSAwKQo+ICsJCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZSgm b2JqLT5iYXNlKTsKPiArCj4gKwlpZiAocmVmLT53cml0ZSkgewo+ICsJCW9iai0+ZGlydHkgPSAx Owo+ICsJCWk5MTVfcmVxdWVzdF9wdXQob2JqLT5sYXN0X3dyaXRlLnJlcXVlc3QpOwo+ICsJCW9i ai0+bGFzdF93cml0ZS5yZXF1ZXN0ID0gaTkxNV9yZXF1ZXN0X2dldChycSk7Cj4gKwkJbGlzdF9t b3ZlX3RhaWwoJm9iai0+bGFzdF93cml0ZS5lbmdpbmVfbGlzdCwKPiArCQkJICAgICAgICZlbmdp bmUtPndyaXRlX2xpc3QpOwo+ICsKPiArCQlpZiAob2JqLT5hY3RpdmUgPiAxKSB7Cj4gKwkJCWlu dCBpOwo+ICsKPiArCQkJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX0VOR0lORVM7IGkrKykgewo+ ICsJCQkJaWYgKG9iai0+bGFzdF9yZWFkW2ldLnJlcXVlc3QgPT0gTlVMTCkKPiArCQkJCQljb250 aW51ZTsKPiArCj4gKwkJCQlsaXN0X2RlbF9pbml0KCZvYmotPmxhc3RfcmVhZFtpXS5lbmdpbmVf bGlzdCk7Cj4gKwkJCQlpOTE1X3JlcXVlc3RfcHV0KG9iai0+bGFzdF9yZWFkW2ldLnJlcXVlc3Qp Owo+ICsJCQkJb2JqLT5sYXN0X3JlYWRbaV0ucmVxdWVzdCA9IE5VTEw7Cj4gKwkJCX0KPiArCj4g KwkJCW9iai0+YWN0aXZlID0gMTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKHJlZi0+ZmVuY2Ug JiBWTUFfSVNfRkVOQ0VEKSB7Cj4gKwkJaTkxNV9yZXF1ZXN0X3B1dChvYmotPmxhc3RfZmVuY2Uu cmVxdWVzdCk7Cj4gKwkJb2JqLT5sYXN0X2ZlbmNlLnJlcXVlc3QgPSBpOTE1X3JlcXVlc3RfZ2V0 KHJxKTsKPiArCQlsaXN0X21vdmVfdGFpbCgmb2JqLT5sYXN0X2ZlbmNlLmVuZ2luZV9saXN0LAo+ ICsJCQkgICAgICAgJmVuZ2luZS0+ZmVuY2VfbGlzdCk7Cj4gKwkJaWYgKHJlZi0+ZmVuY2UgJiBW TUFfSEFTX0ZFTkNFKQo+ICsJCQlsaXN0X21vdmVfdGFpbCgmcnEtPmk5MTUtPmZlbmNlX3JlZ3Nb b2JqLT5mZW5jZV9yZWddLmxydV9saXN0LAo+ICsJCQkJCSZycS0+aTkxNS0+bW0uZmVuY2VfbGlz dCk7Cj4gKwl9Cj4gKwo+ICsJaTkxNV9yZXF1ZXN0X3B1dChvYmotPmxhc3RfcmVhZFtlbmdpbmUt PmlkXS5yZXF1ZXN0KTsKPiArCW9iai0+bGFzdF9yZWFkW2VuZ2luZS0+aWRdLnJlcXVlc3QgPSBp OTE1X3JlcXVlc3RfZ2V0KHJxKTsKPiArCWxpc3RfbW92ZV90YWlsKCZvYmotPmxhc3RfcmVhZFtl bmdpbmUtPmlkXS5lbmdpbmVfbGlzdCwKPiArCQkgICAgICAgJmVuZ2luZS0+cmVhZF9saXN0KTsK PiArCj4gKwlsaXN0X21vdmVfdGFpbCgmcmVmLT52bWEtPm1tX2xpc3QsICZyZWYtPnZtYS0+dm0t PmFjdGl2ZV9saXN0KTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgbGVhdmVfYnJlYWRjcnVtYihz dHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gK3sKPiArCWlmIChycS0+YnJlYWRjcnVtYlty cS0+ZW5naW5lLT5pZF0pCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCS8qIEF1dG8tcmVwb3J0 IEhFQUQgZXZlcnkgNGsgdG8gbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGFsd2F5cyB3YWl0IG9uCj4g KwkgKiBzb21lIGF2YWlsYWJsZSByaW5nIHNwYWNlIGluIHRoZSBmdXR1cmUuIFRoaXMgYWxzbyBj YXBzIHRoZQo+ICsJICogbGF0ZW5jeSBvZiBmdXR1cmUgd2FpdHMgZm9yIG1pc3NlZCBicmVhZGNy dW1icy4KPiArCSAqLwo+ICsJaWYgKF9faW50ZWxfcmluZ19zcGFjZShycS0+cmluZy0+dGFpbCwg cnEtPnJpbmctPmJyZWFkY3J1bWJfdGFpbCwKPiArCQkJICAgICAgIHJxLT5yaW5nLT5zaXplLCAw KSA+PSBQQUdFX1NJWkUpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ ICt9Cj4gKwo+ICtpbnQgaTkxNV9yZXF1ZXN0X2NvbW1pdChzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVz dCAqcnEpCj4gK3sKPiArCWludCByZXQsIG47Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgm cnEtPmk5MTUtPmRldi0+c3RydWN0X211dGV4KTsKPiArCj4gKwlpZiAoIXJxLT5vdXRzdGFuZGlu ZykKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAocnEtPmhlYWQgPT0gcnEtPnJpbmctPnRhaWwp IHsKPiArCQlycS0+Y29tcGxldGVkID0gdHJ1ZTsKPiArCQlnb3RvIGRvbmU7Cj4gKwl9Cj4gKwo+ ICsJaWYgKGludGVsX2VuZ2luZV9oYW5nKHJxLT5lbmdpbmUpKQo+ICsJCWk5MTVfaGFuZGxlX2Vy cm9yKHJxLT5pOTE1LT5kZXYsIHRydWUsICJTaW11bGF0ZWQgaGFuZyIpOwo+ICsKPiArCWlmICgh Y2hlY2tfcmVzZXQocnEpKQo+ICsJCXJldHVybiBycS0+aTkxNS0+bW0uaW50ZXJydXB0aWJsZSA/ IC1FQUdBSU4gOiAtRUlPOwo+ICsKPiArCWlmIChsZWF2ZV9icmVhZGNydW1iKHJxKSkgewo+ICsJ CXJldCA9IGk5MTVfcmVxdWVzdF9lbWl0X2JyZWFkY3J1bWIocnEpOwo+ICsJCWlmIChyZXQpCj4g KwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyogVEFJTCBtdXN0IGJlIGFsaWduZWQgdG8g YSBxd29yZCAqLwo+ICsJaWYgKChycS0+cmluZy0+dGFpbCAvIHNpemVvZiAodWludDMyX3QpKSAm IDEpIHsKPiArCQlpbnRlbF9yaW5nX2VtaXQocnEtPnJpbmcsIE1JX05PT1ApOwo+ICsJCWludGVs X3JpbmdfYWR2YW5jZShycS0+cmluZyk7Cj4gKwl9Cj4gKwlycS0+dGFpbCA9IHJxLT5yaW5nLT50 YWlsOwo+ICsJcnEtPmVtaXR0ZWRfamlmZmllcyA9IGppZmZpZXM7Cj4gKwo+ICsJaW50ZWxfcnVu dGltZV9wbV9nZXQocnEtPmk5MTUpOwo+ICsKPiArCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfY29t bWl0KHJxKTsKPiArCXJldCA9IHJxLT5lbmdpbmUtPmFkZF9yZXF1ZXN0KHJxKTsKPiArCWlmIChy ZXQpIHsKPiArCQlpbnRlbF9ydW50aW1lX3BtX3B1dChycS0+aTkxNSk7Cj4gKwkJcmV0dXJuIHJl dDsKPiArCX0KPiArCj4gKwlpOTE1X3JlcXVlc3RfZ2V0KHJxKTsKPiArCj4gKwlycS0+b3V0c3Rh bmRpbmcgPSBmYWxzZTsKPiArCWlmIChycS0+YnJlYWRjcnVtYltycS0+ZW5naW5lLT5pZF0pIHsK PiArCQlsaXN0X2FkZF90YWlsKCZycS0+YnJlYWRjcnVtYl9saW5rLCAmcnEtPnJpbmctPmJyZWFk Y3J1bWJzKTsKPiArCQlycS0+cmluZy0+YnJlYWRjcnVtYl90YWlsID0gcnEtPnRhaWw7Cj4gKwl9 Cj4gKwo+ICsJbWVtY3B5KHJxLT5lbmdpbmUtPnNlbWFwaG9yZS5zeW5jLAo+ICsJICAgICAgIHJx LT5zZW1hcGhvcmUsCj4gKwkgICAgICAgc2l6ZW9mKHJxLT5zZW1hcGhvcmUpKTsKPiArCWZvciAo biA9IDA7IG4gPCBBUlJBWV9TSVpFKHJxLT5icmVhZGNydW1iKTsgbisrKQo+ICsJCWlmIChycS0+ YnJlYWRjcnVtYltuXSkKPiArCQkJcnEtPmVuZ2luZS0+YnJlYWRjcnVtYltuXSA9IHJxLT5icmVh ZGNydW1iW25dOwo+ICsKPiArCXJxLT5yaW5nLT5wZW5kaW5nX2ZsdXNoID0gcnEtPnBlbmRpbmdf Zmx1c2g7Cj4gKwo+ICsJaWYgKHJxLT5iYXRjaCkgewo+ICsJCWFkZF90b19jbGllbnQocnEpOwo+ ICsJCXdoaWxlICghbGlzdF9lbXB0eSgmcnEtPnZtYXMpKSB7Cj4gKwkJCXN0cnVjdCBpOTE1X2dl bV9yZXF1ZXN0X192bWEgKnJlZiA9Cj4gKwkJCQlsaXN0X2ZpcnN0X2VudHJ5KCZycS0+dm1hcywg dHlwZW9mKCpyZWYpLCBsaW5rKTsKPiArCj4gKwkJCWFkZF90b19vYmoocnEsIHJlZik7Cj4gKwkJ CXZtYV9mcmVlKHJlZik7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWk5MTVfcmVxdWVzdF9zd2l0Y2hf Y29udGV4dF9fY29tbWl0KHJxKTsKPiArCj4gKwlycS0+ZW5naW5lLT5sYXN0X3JlcXVlc3QgPSBy cTsKPiArZG9uZToKPiArCXJxLT5yaW5nLT5sYXN0X2NvbnRleHQgPSBycS0+Y3R4Owo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGZha2VfaXJxKHVuc2lnbmVkIGxvbmcgZGF0 YSkKPiArewo+ICsJd2FrZV91cF9wcm9jZXNzKChzdHJ1Y3QgdGFza19zdHJ1Y3QgKilkYXRhKTsK PiArfQo+ICsKPiArc3RhdGljIGJvb2wgbWlzc2VkX2lycShzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVz dCAqcnEpCj4gK3sKPiArCXJldHVybiB0ZXN0X2JpdChycS0+ZW5naW5lLT5pZCwgJnJxLT5pOTE1 LT5ncHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncyk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGNh bl93YWl0X2Jvb3N0KHN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdikKPiAr ewo+ICsJaWYgKGZpbGVfcHJpdiA9PSBOVUxMKQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCXJl dHVybiAhYXRvbWljX3hjaGcoJmZpbGVfcHJpdi0+cnBzX3dhaXRfYm9vc3QsIHRydWUpOwo+ICt9 Cj4gKwo+ICtib29sIF9faTkxNV9yZXF1ZXN0X2NvbXBsZXRlX193YShzdHJ1Y3QgaTkxNV9nZW1f cmVxdWVzdCAqcnEpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHJxLT5pOTE1Owo+ICsJdW5zaWduZWQgaGVhZCwgdGFpbDsKPiArCj4gKwlpZiAoaTkxNV9yZXF1 ZXN0X2NvbXBsZXRlKHJxKSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwkvKiBXaXRoIGV4ZWNs aXN0cywgd2UgcmVseSBvbiBpbnRlcnJ1cHRzIHRvIHRyYWNrIHJlcXVlc3QgY29tcGxldGlvbiAq Lwo+ICsJaWYgKHJxLT5lbmdpbmUtPmV4ZWNsaXN0c19lbmFibGVkKQo+ICsJCXJldHVybiBmYWxz ZTsKPiArCj4gKwkvKiBBcyB3ZSBtYXkgbm90IGVtaXQgYSBicmVhZGNydW1iIHdpdGggZXZlcnkg cmVxdWVzdCwgd2UKPiArCSAqIG9mdGVuIGhhdmUgdW5mbHVzaGVkIHJlcXVlc3RzLiBJbiB0aGUg ZXZlbnQgb2YgYW4gZW1lcmdlbmN5LAo+ICsJICoganVzdCBhc3N1bWUgdGhhdCBpZiB0aGUgUklO R19IRUFEIGhhcyByZWFjaGVkIHRoZSB0YWlsLCB0aGVuCj4gKwkgKiB0aGUgcmVxdWVzdCBpcyBj b21wbGV0ZS4gSG93ZXZlciwgbm90ZSB0aGF0IHRoZSBSSU5HX0hFQUQKPiArCSAqIGFkdmFuY2Vz IGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24gY29tcGxldGVzLCBzbyB0aGlzIGlzIHF1aXRlIGxheCwK PiArCSAqIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGNhcmVmdWxseS4KPiArCSAqCj4gKwkgKiBB cyB3ZSB0cmVhdCB0aGlzIGFzIG9ubHkgYW4gYWR2aXNvcnkgY29tcGxldGlvbiwgd2UgZm9yZ28K PiArCSAqIG1hcmtpbmcgdGhlIHJlcXVlc3QgYXMgYWN0dWFsbHkgY29tcGxldGUuCj4gKwkgKi8K PiArCWhlYWQgPSBfX2ludGVsX3Jpbmdfc3BhY2UoSTkxNV9SRUFEX0hFQUQocnEtPmVuZ2luZSkg JiBIRUFEX0FERFIsCj4gKwkJCQkgIHJxLT5yaW5nLT50YWlsLCBycS0+cmluZy0+c2l6ZSwgMCk7 Cj4gKwl0YWlsID0gX19pbnRlbF9yaW5nX3NwYWNlKHJxLT50YWlsLAo+ICsJCQkJICBycS0+cmlu Zy0+dGFpbCwgcnEtPnJpbmctPnNpemUsIDApOwo+ICsJcmV0dXJuIGhlYWQgPj0gdGFpbDsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIF9faTkxNV9yZXF1ZXN0X3dhaXQgLSB3YWl0IHVudGlsIGV4ZWN1 dGlvbiBvZiByZXF1ZXN0IGhhcyBmaW5pc2hlZAo+ICsgKiBAcmVxdWVzdDogdGhlIHJlcXVlc3Qg dG8gd2FpdCB1cG9uCj4gKyAqIEBpbnRlcnJ1cHRpYmxlOiBkbyBhbiBpbnRlcnJ1cHRpYmxlIHdh aXQgKG5vcm1hbGx5IHllcykKPiArICogQHRpbWVvdXRfbnM6IGluIC0gaG93IGxvbmcgdG8gd2Fp dCAoTlVMTCBmb3JldmVyKTsgb3V0IC0gaG93IG11Y2ggdGltZSByZW1haW5pbmcKPiArICoKPiAr ICogUmV0dXJucyAwIGlmIHRoZSByZXF1ZXN0IHdhcyBjb21wbGV0ZWQgd2l0aGluIHRoZSBhbGxv dGVkIHRpbWUuIEVsc2UgcmV0dXJucyB0aGUKPiArICogZXJybm8gd2l0aCByZW1haW5pbmcgdGlt ZSBmaWxsZWQgaW4gdGltZW91dCBhcmd1bWVudC4KPiArICovCj4gK2ludCBfX2k5MTVfcmVxdWVz dF93YWl0KHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwKPiArCQkJYm9vbCBpbnRlcnJ1cHRp YmxlLAo+ICsJCQlzNjQgKnRpbWVvdXRfbnMsCj4gKwkJCXN0cnVjdCBkcm1faTkxNV9maWxlX3By aXZhdGUgKmZpbGVfcHJpdikKPiArewo+ICsJY29uc3QgYm9vbCBpcnFfdGVzdF9pbl9wcm9ncmVz cyA9Cj4gKwkJQUNDRVNTX09OQ0UocnEtPmk5MTUtPmdwdV9lcnJvci50ZXN0X2lycV9yaW5ncykg JiBpbnRlbF9lbmdpbmVfZmxhZyhycS0+ZW5naW5lKTsKPiArCURFRklORV9XQUlUKHdhaXQpOwo+ ICsJdW5zaWduZWQgbG9uZyB0aW1lb3V0X2V4cGlyZTsKPiArCXVuc2lnbmVkIGxvbmcgYmVmb3Jl LCBub3c7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlXQVJOKCFpbnRlbF9pcnFzX2VuYWJsZWQo cnEtPmk5MTUpLCAiSVJRcyBkaXNhYmxlZCIpOwo+ICsKPiArCWlmIChpOTE1X3JlcXVlc3RfY29t cGxldGUocnEpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXRpbWVvdXRfZXhwaXJlID0gdGltZW91 dF9ucyA/IGppZmZpZXMgKyBuc2Vjc190b19qaWZmaWVzKCh1NjQpKnRpbWVvdXRfbnMpIDogMDsK PiArCj4gKwlpZiAoSU5URUxfSU5GTyhycS0+aTkxNSktPmdlbiA+PSA2ICYmIHJxLT5lbmdpbmUt PmlkID09IFJDUyAmJiBjYW5fd2FpdF9ib29zdChmaWxlX3ByaXYpKSB7Cj4gKwkJZ2VuNl9ycHNf Ym9vc3QocnEtPmk5MTUpOwo+ICsJCWlmIChmaWxlX3ByaXYpCj4gKwkJCW1vZF9kZWxheWVkX3dv cmsocnEtPmk5MTUtPndxLAo+ICsJCQkJCSAmZmlsZV9wcml2LT5tbS5pZGxlX3dvcmssCj4gKwkJ CQkJIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFpcnFfdGVzdF9p bl9wcm9ncmVzcyAmJiBXQVJOX09OKCFycS0+ZW5naW5lLT5pcnFfZ2V0KHJxLT5lbmdpbmUpKSkK PiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwkvKiBSZWNvcmQgY3VycmVudCB0aW1lIGluIGNh c2UgaW50ZXJydXB0ZWQgYnkgc2lnbmFsLCBvciB3ZWRnZWQgKi8KPiArCXRyYWNlX2k5MTVfZ2Vt X3JlcXVlc3Rfd2FpdF9iZWdpbihycSk7Cj4gKwliZWZvcmUgPSBqaWZmaWVzOwo+ICsJZm9yICg7 Oykgewo+ICsJCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwo+ICsKPiArCQlwcmVwYXJlX3RvX3dh aXQoJnJxLT5lbmdpbmUtPmlycV9xdWV1ZSwgJndhaXQsCj4gKwkJCQlpbnRlcnJ1cHRpYmxlID8g VEFTS19JTlRFUlJVUFRJQkxFIDogVEFTS19VTklOVEVSUlVQVElCTEUpOwo+ICsKPiArCQlpZiAo IWNoZWNrX3Jlc2V0KHJxKSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXJxLT5lbmdpbmUtPmlycV9i YXJyaWVyKHJxLT5lbmdpbmUpOwo+ICsKPiArCQlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRlKHJx KSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWlmICh0aW1lb3V0X25zICYmIHRpbWVfYWZ0ZXJfZXEo amlmZmllcywgdGltZW91dF9leHBpcmUpKSB7Cj4gKwkJCXJldCA9IC1FVElNRTsKPiArCQkJYnJl YWs7Cj4gKwkJfQo+ICsKPiArCQlpZiAoaW50ZXJydXB0aWJsZSAmJiBzaWduYWxfcGVuZGluZyhj dXJyZW50KSkgewo+ICsJCQlyZXQgPSAtRVJFU1RBUlRTWVM7Cj4gKwkJCWJyZWFrOwo+ICsJCX0K PiArCj4gKwkJdGltZXIuZnVuY3Rpb24gPSBOVUxMOwo+ICsJCWlmICh0aW1lb3V0X25zIHx8IG1p c3NlZF9pcnEocnEpKSB7Cj4gKwkJCXVuc2lnbmVkIGxvbmcgZXhwaXJlOwo+ICsKPiArCQkJc2V0 dXBfdGltZXJfb25fc3RhY2soJnRpbWVyLCBmYWtlX2lycSwgKHVuc2lnbmVkIGxvbmcpY3VycmVu dCk7Cj4gKwkJCWV4cGlyZSA9IG1pc3NlZF9pcnEocnEpID8gamlmZmllcyArIDEgOiB0aW1lb3V0 X2V4cGlyZTsKPiArCQkJbW9kX3RpbWVyKCZ0aW1lciwgZXhwaXJlKTsKPiArCQl9Cj4gKwo+ICsJ CWlvX3NjaGVkdWxlKCk7Cj4gKwo+ICsJCWlmICh0aW1lci5mdW5jdGlvbikgewo+ICsJCQlkZWxf c2luZ2xlc2hvdF90aW1lcl9zeW5jKCZ0aW1lcik7Cj4gKwkJCWRlc3Ryb3lfdGltZXJfb25fc3Rh Y2soJnRpbWVyKTsKPiArCQl9Cj4gKwl9Cj4gKwlub3cgPSBqaWZmaWVzOwo+ICsJdHJhY2VfaTkx NV9nZW1fcmVxdWVzdF93YWl0X2VuZChycSk7Cj4gKwo+ICsJaWYgKCFpcnFfdGVzdF9pbl9wcm9n cmVzcykKPiArCQlycS0+ZW5naW5lLT5pcnFfcHV0KHJxLT5lbmdpbmUpOwo+ICsKPiArCWZpbmlz aF93YWl0KCZycS0+ZW5naW5lLT5pcnFfcXVldWUsICZ3YWl0KTsKPiArCj4gKwlpZiAodGltZW91 dF9ucykgewo+ICsJCXM2NCB0cmVzID0gKnRpbWVvdXRfbnMgLSBqaWZmaWVzX3RvX25zZWNzKG5v dyAtIGJlZm9yZSk7Cj4gKwkJKnRpbWVvdXRfbnMgPSB0cmVzIDw9IDAgPyAwIDogdHJlczsKPiAr CX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVz dCAqCj4gK2k5MTVfcmVxdWVzdF9nZXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVz dCAqcnEpCj4gK3sKPiArCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Cj4gKwl1MzIgc2Vxbm87Cj4g KwlpbnQgcmV0Owo+ICsKPiArCS8qIFdyaXRlcyBhcmUgb25seSBjb2hlcmVudCBmcm9tIHRoZSBj cHUgKGluIHRoZSBnZW5lcmFsIGNhc2UpIHdoZW4KPiArCSAqIHRoZSBpbnRlcnJ1cHQgZm9sbG93 aW5nIHRoZSB3cml0ZSB0byBtZW1vcnkgaXMgY29tcGxldGUuIFRoYXQgaXMKPiArCSAqIHdoZW4g dGhlIGJyZWFkY3J1bWIgYWZ0ZXIgdGhlIHdyaXRlIHJlcXVlc3QgaXMgY29tcGxldGUuCj4gKwkg Kgo+ICsJICogUmVhZHMgYXJlIG9ubHkgY29tcGxldGUgd2hlbiB0aGVuIGNvbW1hbmQgc3RyZWFt ZXIgYmFycmllciBpcwo+ICsJICogcGFzc2VkLgo+ICsJICoKPiArCSAqIEluIGJvdGggY2FzZXMs IHRoZSBDUFUgbmVlZHMgdG8gd2FpdCB1cG9uIHRoZSBzdWJzZXF1ZW50IGJyZWFkY3J1bWIsCj4g KwkgKiB3aGljaCBlbnN1cmVzIHRoYXQgYWxsIHBlbmRpbmcgZmx1c2hlcyBoYXZlIGJlZW4gZW1p dHRlZCBhbmQgYXJlCj4gKwkgKiBjb21wbGV0ZSwgYmVmb3JlIHJlcG9ydGluZyB0aGF0IHRoZSBy ZXF1ZXN0IGlzIGZpbmlzaGVkIGFuZAo+ICsJICogdGhlIENQVSdzIHZpZXcgb2YgbWVtb3J5IGlz IGNvaGVyZW50IHdpdGggdGhlIEdQVS4KPiArCSAqLwo+ICsKPiArCXJldCA9IGk5MTVfcmVxdWVz dF9lbWl0X2JyZWFkY3J1bWIocnEpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gRVJSX1BUUihy ZXQpOwo+ICsKPiArCXJldCA9IGk5MTVfcmVxdWVzdF9jb21taXQocnEpOwo+ICsJaWYgKHJldCkK PiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsKPiArCWlmICghbGlzdF9lbXB0eSgmcnEtPmJy ZWFkY3J1bWJfbGluaykpCj4gKwkJcmV0dXJuIGk5MTVfcmVxdWVzdF9nZXQocnEpOwo+ICsKPiAr CXNlcW5vID0gcnEtPmJyZWFkY3J1bWJbcnEtPmVuZ2luZS0+aWRdOwo+ICsJbGlzdCA9ICZycS0+ cmluZy0+YnJlYWRjcnVtYnM7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UocnEsIGxp c3QsIGJyZWFkY3J1bWJfbGluaykgewo+ICsJCWlmIChycS0+c2Vxbm8gPT0gc2Vxbm8pCj4gKwkJ CXJldHVybiBpOTE1X3JlcXVlc3RfZ2V0KHJxKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gRVJSX1BU UigtRUlPKTsKPiArfQo+ICsKPiAraW50Cj4gK2k5MTVfcmVxdWVzdF93YWl0KHN0cnVjdCBpOTE1 X2dlbV9yZXF1ZXN0ICpycSkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZycS0+aTkxNS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCXJxID0gaTkxNV9y ZXF1ZXN0X2dldF9icmVhZGNydW1iKHJxKTsKPiArCWlmIChJU19FUlIocnEpKQo+ICsJCXJldHVy biBQVFJfRVJSKHJxKTsKPiArCj4gKwlyZXQgPSBfX2k5MTVfcmVxdWVzdF93YWl0KHJxLCBycS0+ aTkxNS0+bW0uaW50ZXJydXB0aWJsZSwKPiArCQkJCSAgTlVMTCwgTlVMTCk7Cj4gKwlpOTE1X3Jl cXVlc3RfcHV0KHJxKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICt2b2lkCj4gK2k5 MTVfcmVxdWVzdF9yZXRpcmUoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwls b2NrZGVwX2Fzc2VydF9oZWxkKCZycS0+aTkxNS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiAr CWlmICghcnEtPmNvbXBsZXRlZCkgewo+ICsJCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfY29tcGxl dGUocnEpOwo+ICsJCXJxLT5jb21wbGV0ZWQgPSB0cnVlOwo+ICsJfQo+ICsJdHJhY2VfaTkxNV9n ZW1fcmVxdWVzdF9yZXRpcmUocnEpOwo+ICsKPiArCS8qIFdlIGtub3cgdGhlIEdQVSBtdXN0IGhh dmUgcmVhZCB0aGUgcmVxdWVzdCB0byBoYXZlCj4gKwkgKiBzZW50IHVzIHRoZSBzZXFubyArIGlu dGVycnVwdCwgd2UgY2FuIHVzZSB0aGUgcG9zaXRpb24KPiArCSAqIG9mIHRhaWwgb2YgdGhlIHJl cXVlc3QgdG8gdXBkYXRlIHRoZSBsYXN0IGtub3duIHBvc2l0aW9uCj4gKwkgKiBvZiB0aGUgR1BV IGhlYWQuCj4gKwkgKi8KPiArCWlmICghbGlzdF9lbXB0eSgmcnEtPmJyZWFkY3J1bWJfbGluaykp Cj4gKwkJcnEtPnJpbmctPnJldGlyZWRfaGVhZCA9IHJxLT50YWlsOwo+ICsKPiArCXJxLT5iYXRj aCA9IE5VTEw7Cj4gKwo+ICsJLyogV2UgbmVlZCB0byBwcm90ZWN0IGFnYWluc3Qgc2ltdWx0YW5l b3VzIGhhbmdjaGVjay9jYXB0dXJlICovCj4gKwlzcGluX2xvY2soJnJxLT5lbmdpbmUtPmxvY2sp Owo+ICsJaWYgKHJxLT5lbmdpbmUtPmxhc3RfcmVxdWVzdCA9PSBycSkKPiArCQlycS0+ZW5naW5l LT5sYXN0X3JlcXVlc3QgPSBOVUxMOwo+ICsJbGlzdF9kZWwoJnJxLT5lbmdpbmVfbGlzdCk7Cj4g KwlzcGluX3VubG9jaygmcnEtPmVuZ2luZS0+bG9jayk7Cj4gKwo+ICsJbGlzdF9kZWwoJnJxLT5i cmVhZGNydW1iX2xpbmspOwo+ICsJcmVtb3ZlX2Zyb21fY2xpZW50KHJxKTsKPiArCj4gKwlpbnRl bF9ydW50aW1lX3BtX3B1dChycS0+aTkxNSk7Cj4gKwlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKPiAr fQo+ICsKPiArdm9pZAo+ICtfX2k5MTVfcmVxdWVzdF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQo+ ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEgPSBjb250YWluZXJfb2Yoa3JlZiwg c3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QsIGtyZWYpOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJnJxLT5pOTE1LT5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwo+ICsJaWYgKHJxLT5vdXRzdGFu ZGluZykgewo+ICsJCS8qIFJvbGxiYWNrIHRoaXMgcGFydGlhbCB0cmFuc2FjdGlvbiBhcyB3ZSBu ZXZlciBjb21taXR0ZWQKPiArCQkgKiB0aGUgcmVxdWVzdCB0byB0aGUgaGFyZHdhcmUgcXVldWUu Cj4gKwkJICovCj4gKwkJcnEtPnJpbmctPnRhaWwgPSBycS0+aGVhZDsKPiArCQlycS0+cmluZy0+ c3BhY2UgPSBpbnRlbF9yaW5nX3NwYWNlKHJxLT5yaW5nKTsKPiArCX0KPiArCj4gKwl3aGlsZSAo IWxpc3RfZW1wdHkoJnJxLT52bWFzKSkKPiArCQl2bWFfZnJlZShsaXN0X2ZpcnN0X2VudHJ5KCZy cS0+dm1hcywKPiArCQkJCQkgIHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0X192bWEsCj4gKwkJCQkJ ICBsaW5rKSk7Cj4gKwo+ICsJaTkxNV9yZXF1ZXN0X3N3aXRjaF9jb250ZXh0X191bmRvKHJxKTsK PiArCWk5MTVfZ2VtX2NvbnRleHRfdW5yZWZlcmVuY2UocnEtPmN0eCk7Cj4gKwlrZnJlZShycSk7 Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5n LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwo+IGluZGV4IDJjZWZi NTk3ZGY2ZC4uYTQ4MzU1YzRlZjg4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX3RpbGluZy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f dGlsaW5nLmMKPiBAQCAtMzgzLDcgKzM4Myw3IEBAIGk5MTVfZ2VtX3NldF90aWxpbmcoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAo+ICAgCQlpZiAocmV0ID09IDApIHsK PiAgIAkJCW9iai0+ZmVuY2VfZGlydHkgPQo+IC0JCQkJb2JqLT5sYXN0X2ZlbmNlZF9zZXFubyB8 fAo+ICsJCQkJb2JqLT5sYXN0X2ZlbmNlLnJlcXVlc3QgfHwKPiAgIAkJCQlvYmotPmZlbmNlX3Jl ZyAhPSBJOTE1X0ZFTkNFX1JFR19OT05FOwo+ICAgCj4gICAJCQlvYmotPnRpbGluZ19tb2RlID0g YXJncy0+dGlsaW5nX21vZGU7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ3B1X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCj4g aW5kZXggMmM4N2E3OTcyMTNmLi5hZGI2MzU4YThmNmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ3B1X2Vycm9yLmMKPiBAQCAtMTkyLDE1ICsxOTIsMTggQEAgc3RhdGljIHZvaWQgcHJp bnRfZXJyb3JfYnVmZmVycyhzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVfYnVmICptLAo+ICAg CQkJCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9idWZmZXIgKmVyciwKPiAgIAkJCQlpbnQgY291bnQp Cj4gICB7Cj4gLQllcnJfcHJpbnRmKG0sICIgICVzIFslZF06XG4iLCBuYW1lLCBjb3VudCk7Cj4g KwlpbnQgbjsKPiAgIAo+ICsJZXJyX3ByaW50ZihtLCAiICAlcyBbJWRdOlxuIiwgbmFtZSwgY291 bnQpOwo+ICAgCXdoaWxlIChjb3VudC0tKSB7Cj4gLQkJZXJyX3ByaW50ZihtLCAiICAgICUwOHgg JTh1ICUwMnggJTAyeCAleCAleCIsCj4gKwkJZXJyX3ByaW50ZihtLCAiICAgICUwOHggJTh1ICUw MnggJTAyeCBbIiwKPiAgIAkJCSAgIGVyci0+Z3R0X29mZnNldCwKPiAgIAkJCSAgIGVyci0+c2l6 ZSwKPiAgIAkJCSAgIGVyci0+cmVhZF9kb21haW5zLAo+IC0JCQkgICBlcnItPndyaXRlX2RvbWFp biwKPiAtCQkJICAgZXJyLT5yc2Vxbm8sIGVyci0+d3NlcW5vKTsKPiArCQkJICAgZXJyLT53cml0 ZV9kb21haW4pOwo+ICsJCWZvciAobiA9IDA7IG4gPCBBUlJBWV9TSVpFKGVyci0+cnNlcW5vKTsg bisrKQo+ICsJCQllcnJfcHJpbnRmKG0sICIgJXgiLCBlcnItPnJzZXFub1tuXSk7Cj4gKwkJZXJy X3ByaW50ZihtLCAiIF0gJXggJXggIiwgZXJyLT53c2Vxbm8sIGVyci0+ZnNlcW5vKTsKPiAgIAkJ ZXJyX3B1dHMobSwgcGluX2ZsYWcoZXJyLT5waW5uZWQpKTsKPiAgIAkJZXJyX3B1dHMobSwgdGls aW5nX2ZsYWcoZXJyLT50aWxpbmcpKTsKPiAgIAkJZXJyX3B1dHMobSwgZGlydHlfZmxhZyhlcnIt PmRpcnR5KSk7Cj4gQEAgLTIyMCwxMSArMjIzLDEzIEBAIHN0YXRpYyB2b2lkIHByaW50X2Vycm9y X2J1ZmZlcnMoc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlX2J1ZiAqbSwKPiAgIAl9Cj4gICB9 Cj4gICAKPiAtc3RhdGljIGNvbnN0IGNoYXIgKmhhbmdjaGVja19hY3Rpb25fdG9fc3RyKGVudW0g aW50ZWxfcmluZ19oYW5nY2hlY2tfYWN0aW9uIGEpCj4gK3N0YXRpYyBjb25zdCBjaGFyICpoYW5n Y2hlY2tfYWN0aW9uX3RvX3N0cihlbnVtIGludGVsX2VuZ2luZV9oYW5nY2hlY2tfYWN0aW9uIGEp Cj4gICB7Cj4gICAJc3dpdGNoIChhKSB7Cj4gICAJY2FzZSBIQU5HQ0hFQ0tfSURMRToKPiAgIAkJ cmV0dXJuICJpZGxlIjsKPiArCWNhc2UgSEFOR0NIRUNLX0lETEVfV0FJVEVSUzoKPiArCQlyZXR1 cm4gImlkbGUgKHdpdGggd2FpdGVycykiOwo+ICAgCWNhc2UgSEFOR0NIRUNLX1dBSVQ6Cj4gICAJ CXJldHVybiAid2FpdCI7Cj4gICAJY2FzZSBIQU5HQ0hFQ0tfQUNUSVZFOgo+IEBAIC0yNDQsMTMg KzI0OSwxOSBAQCBzdGF0aWMgdm9pZCBpOTE1X3JpbmdfZXJyb3Jfc3RhdGUoc3RydWN0IGRybV9p OTE1X2Vycm9yX3N0YXRlX2J1ZiAqbSwKPiAgIAkJCQkgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gICAJCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfcmluZyAqcmluZykKPiAgIHsKPiArCWlu dCBuOwo+ICsKPiAgIAlpZiAoIXJpbmctPnZhbGlkKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAtCWVy cl9wcmludGYobSwgIiAgSEVBRDogMHglMDh4XG4iLCByaW5nLT5oZWFkKTsKPiAtCWVycl9wcmlu dGYobSwgIiAgVEFJTDogMHglMDh4XG4iLCByaW5nLT50YWlsKTsKPiAtCWVycl9wcmludGYobSwg IiAgQ1RMOiAweCUwOHhcbiIsIHJpbmctPmN0bCk7Cj4gLQllcnJfcHJpbnRmKG0sICIgIEhXUzog MHglMDh4XG4iLCByaW5nLT5od3MpOwo+ICsJZXJyX3ByaW50ZihtLCAiJXMgY29tbWFuZCBzdHJl YW06XG4iLCByaW5nX3N0cihyaW5nLT5pZCkpOwo+ICsKPiArCWVycl9wcmludGYobSwgIiAgU1RB UlQ6IDB4JTA4eFxuIiwgcmluZy0+c3RhcnQpOwo+ICsJZXJyX3ByaW50ZihtLCAiICBIRUFEOiAg MHglMDh4XG4iLCByaW5nLT5oZWFkKTsKPiArCWVycl9wcmludGYobSwgIiAgVEFJTDogIDB4JTA4 eFxuIiwgcmluZy0+dGFpbCk7Cj4gKwllcnJfcHJpbnRmKG0sICIgIENUTDogICAweCUwOHhcbiIs IHJpbmctPmN0bCk7Cj4gKwllcnJfcHJpbnRmKG0sICIgIE1PREU6ICAweCUwOHggW2lkbGU/ICVk XVxuIiwgcmluZy0+bW9kZSwgISEocmluZy0+bW9kZSAmIE1PREVfSURMRSkpOwo+ICsJZXJyX3By aW50ZihtLCAiICBIV1M6ICAgMHglMDh4XG4iLCByaW5nLT5od3MpOwo+ICAgCWVycl9wcmludGYo bSwgIiAgQUNUSEQ6IDB4JTA4eCAlMDh4XG4iLCAodTMyKShyaW5nLT5hY3RoZD4+MzIpLCAodTMy KXJpbmctPmFjdGhkKTsKPiAgIAllcnJfcHJpbnRmKG0sICIgIElQRUlSOiAweCUwOHhcbiIsIHJp bmctPmlwZWlyKTsKPiAgIAllcnJfcHJpbnRmKG0sICIgIElQRUhSOiAweCUwOHhcbiIsIHJpbmct PmlwZWhyKTsKPiBAQCAtMjY2LDE3ICsyNzcsMTMgQEAgc3RhdGljIHZvaWQgaTkxNV9yaW5nX2Vy cm9yX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKm0sCj4gICAJaWYgKElO VEVMX0lORk8oZGV2KS0+Z2VuID49IDYpIHsKPiAgIAkJZXJyX3ByaW50ZihtLCAiICBSQyBQU01J OiAweCUwOHhcbiIsIHJpbmctPnJjX3BzbWkpOwo+ICAgCQllcnJfcHJpbnRmKG0sICIgIEZBVUxU X1JFRzogMHglMDh4XG4iLCByaW5nLT5mYXVsdF9yZWcpOwo+IC0JCWVycl9wcmludGYobSwgIiAg U1lOQ18wOiAweCUwOHggW2xhc3Qgc3luY2VkIDB4JTA4eF1cbiIsCj4gLQkJCSAgIHJpbmctPnNl bWFwaG9yZV9tYm94ZXNbMF0sCj4gLQkJCSAgIHJpbmctPnNlbWFwaG9yZV9zZXFub1swXSk7Cj4g LQkJZXJyX3ByaW50ZihtLCAiICBTWU5DXzE6IDB4JTA4eCBbbGFzdCBzeW5jZWQgMHglMDh4XVxu IiwKPiAtCQkJICAgcmluZy0+c2VtYXBob3JlX21ib3hlc1sxXSwKPiAtCQkJICAgcmluZy0+c2Vt YXBob3JlX3NlcW5vWzFdKTsKPiAtCQlpZiAoSEFTX1ZFQk9YKGRldikpIHsKPiAtCQkJZXJyX3By aW50ZihtLCAiICBTWU5DXzI6IDB4JTA4eCBbbGFzdCBzeW5jZWQgMHglMDh4XVxuIiwKPiAtCQkJ CSAgIHJpbmctPnNlbWFwaG9yZV9tYm94ZXNbMl0sCj4gLQkJCQkgICByaW5nLT5zZW1hcGhvcmVf c2Vxbm9bMl0pOwo+IC0JCX0KPiArCQllcnJfcHJpbnRmKG0sICIgIFNZTkNfMDogMHglMDh4XG4i LAo+ICsJCQkgICByaW5nLT5zZW1hcGhvcmVfbWJveGVzWzBdKTsKPiArCQllcnJfcHJpbnRmKG0s ICIgIFNZTkNfMTogMHglMDh4XG4iLAo+ICsJCQkgICByaW5nLT5zZW1hcGhvcmVfbWJveGVzWzFd KTsKPiArCQlpZiAoSEFTX1ZFQk9YKGRldikpCj4gKwkJCWVycl9wcmludGYobSwgIiAgU1lOQ18y OiAweCUwOHhcbiIsCj4gKwkJCQkgICByaW5nLT5zZW1hcGhvcmVfbWJveGVzWzJdKTsKPiAgIAl9 Cj4gICAJaWYgKFVTRVNfUFBHVFQoZGV2KSkgewo+ICAgCQllcnJfcHJpbnRmKG0sICIgIEdGWF9N T0RFOiAweCUwOHhcbiIsIHJpbmctPnZtX2luZm8uZ2Z4X21vZGUpOwo+IEBAIC0yOTEsOCArMjk4 LDIwIEBAIHN0YXRpYyB2b2lkIGk5MTVfcmluZ19lcnJvcl9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVf ZXJyb3Jfc3RhdGVfYnVmICptLAo+ICAgCQkJCSAgIHJpbmctPnZtX2luZm8ucHBfZGlyX2Jhc2Up Owo+ICAgCQl9Cj4gICAJfQo+IC0JZXJyX3ByaW50ZihtLCAiICBzZXFubzogMHglMDh4XG4iLCBy aW5nLT5zZXFubyk7Cj4gLQllcnJfcHJpbnRmKG0sICIgIHdhaXRpbmc6ICVzXG4iLCB5ZXNubyhy aW5nLT53YWl0aW5nKSk7Cj4gKwllcnJfcHJpbnRmKG0sICIgIHRhZzogMHglMDR4XG4iLCByaW5n LT50YWcpOwo+ICsJZXJyX3ByaW50ZihtLCAiICBzZXFubzogMHglMDh4IFtoYW5nY2hlY2sgMHgl MDh4LCBicmVhZGNydW1iIDB4JTA4eCwgcmVxdWVzdCAweCUwOHhdXG4iLAo+ICsJCSAgIHJpbmct PnNlcW5vLCByaW5nLT5oYW5nY2hlY2ssIHJpbmctPmJyZWFkY3J1bWJbcmluZy0+aWRdLCByaW5n LT5yZXF1ZXN0KTsKPiArCWVycl9wcmludGYobSwgIiAgc2VtLnNpZ25hbDogWyIpOwo+ICsJZm9y IChuID0gMDsgbiA8IEFSUkFZX1NJWkUocmluZy0+YnJlYWRjcnVtYik7IG4rKykKPiArCQllcnJf cHJpbnRmKG0sICIgJXMlMDh4IiwgbiA9PSByaW5nLT5pZCA/ICIqIiA6ICIiLCByaW5nLT5icmVh ZGNydW1iW25dKTsKPiArCWVycl9wcmludGYobSwgIiBdXG4iKTsKPiArCWVycl9wcmludGYobSwg IiAgc2VtLndhaXRlZDogWyIpOwo+ICsJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUocmluZy0+ c2VtYXBob3JlX3N5bmMpOyBuKyspCj4gKwkJZXJyX3ByaW50ZihtLCAiICVzJTA4eCIsIG4gPT0g cmluZy0+aWQgPyAiKiIgOiAiIiwgcmluZy0+c2VtYXBob3JlX3N5bmNbbl0pOwo+ICsJZXJyX3By aW50ZihtLCAiIF1cbiIpOwo+ICsJZXJyX3ByaW50ZihtLCAiICB3YWl0aW5nOiAlcyBbaXJxIGNv dW50ICVkXVxuIiwKPiArCQkgICB5ZXNubyhyaW5nLT53YWl0aW5nKSwgcmluZy0+aXJxX2NvdW50 KTsKPiArCWVycl9wcmludGYobSwgIiAgaW50ZXJydXB0czogJWRcbiIsIHJpbmctPmludGVycnVw dHMpOwo+ICAgCWVycl9wcmludGYobSwgIiAgcmluZy0+aGVhZDogMHglMDh4XG4iLCByaW5nLT5j cHVfcmluZ19oZWFkKTsKPiAgIAllcnJfcHJpbnRmKG0sICIgIHJpbmctPnRhaWw6IDB4JTA4eFxu IiwgcmluZy0+Y3B1X3JpbmdfdGFpbCk7Cj4gICAJZXJyX3ByaW50ZihtLCAiICBoYW5nY2hlY2s6 ICVzIFslZF1cbiIsCj4gQEAgLTM2MiwxMSArMzgxLDE2IEBAIGludCBpOTE1X2Vycm9yX3N0YXRl X3RvX3N0cihzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVfYnVmICptLAo+ICAgCWVycl9wcmlu dGYobSwgIkVJUjogMHglMDh4XG4iLCBlcnJvci0+ZWlyKTsKPiAgIAllcnJfcHJpbnRmKG0sICJJ RVI6IDB4JTA4eFxuIiwgZXJyb3ItPmllcik7Cj4gICAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2Vu ID49IDgpIHsKPiAtCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQo+ICsJCWZvciAoaSA9IDA7IGkg PCA0OyBpKyspIHsKPiAgIAkJCWVycl9wcmludGYobSwgIkdUSUVSIGd0ICVkOiAweCUwOHhcbiIs IGksCj4gICAJCQkJICAgZXJyb3ItPmd0aWVyW2ldKTsKPiAtCX0gZWxzZSBpZiAoSEFTX1BDSF9T UExJVChkZXYpIHx8IElTX1ZBTExFWVZJRVcoZGV2KSkKPiArCQkJZXJyX3ByaW50ZihtLCAiR1RJ TVIgZ3QgJWQ6IDB4JTA4eFxuIiwgaSwKPiArCQkJCSAgIGVycm9yLT5ndGltcltpXSk7Cj4gKwkJ fQo+ICsJfSBlbHNlIGlmIChIQVNfUENIX1NQTElUKGRldikgfHwgSVNfVkFMTEVZVklFVyhkZXYp KSB7Cj4gICAJCWVycl9wcmludGYobSwgIkdUSUVSOiAweCUwOHhcbiIsIGVycm9yLT5ndGllclsw XSk7Cj4gKwkJZXJyX3ByaW50ZihtLCAiR1RJTVI6IDB4JTA4eFxuIiwgZXJyb3ItPmd0aW1yWzBd KTsKPiArCX0KPiAgIAllcnJfcHJpbnRmKG0sICJQR1RCTF9FUjogMHglMDh4XG4iLCBlcnJvci0+ cGd0YmxfZXIpOwo+ICAgCWVycl9wcmludGYobSwgIkZPUkNFV0FLRTogMHglMDh4XG4iLCBlcnJv ci0+Zm9yY2V3YWtlKTsKPiAgIAllcnJfcHJpbnRmKG0sICJERVJSTVI6IDB4JTA4eFxuIiwgZXJy b3ItPmRlcnJtcik7Cj4gQEAgLTM4OCwxMCArNDEyLDggQEAgaW50IGk5MTVfZXJyb3Jfc3RhdGVf dG9fc3RyKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKm0sCj4gICAJaWYgKElOVEVM X0lORk8oZGV2KS0+Z2VuID09IDcpCj4gICAJCWVycl9wcmludGYobSwgIkVSUl9JTlQ6IDB4JTA4 eFxuIiwgZXJyb3ItPmVycl9pbnQpOwo+ICAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShlcnJvci0+cmluZyk7IGkrKykgewo+IC0JCWVycl9wcmludGYobSwgIiVzIGNvbW1hbmQgc3Ry ZWFtOlxuIiwgcmluZ19zdHIoaSkpOwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXJy b3ItPnJpbmcpOyBpKyspCj4gICAJCWk5MTVfcmluZ19lcnJvcl9zdGF0ZShtLCBkZXYsICZlcnJv ci0+cmluZ1tpXSk7Cj4gLQl9Cj4gICAKPiAgIAlmb3IgKGkgPSAwOyBpIDwgZXJyb3ItPnZtX2Nv dW50OyBpKyspIHsKPiAgIAkJZXJyX3ByaW50ZihtLCAidm1bJWRdXG4iLCBpKTsKPiBAQCAtNDA2 LDQ4ICs0MjgsNTMgQEAgaW50IGk5MTVfZXJyb3Jfc3RhdGVfdG9fc3RyKHN0cnVjdCBkcm1faTkx NV9lcnJvcl9zdGF0ZV9idWYgKm0sCj4gICAJfQo+ICAgCj4gICAJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoZXJyb3ItPnJpbmcpOyBpKyspIHsKPiAtCQlvYmogPSBlcnJvci0+cmluZ1tpXS5i YXRjaGJ1ZmZlcjsKPiArCQljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfcmluZyAqZXJpbmcg PSAmZXJyb3ItPnJpbmdbaV07Cj4gKwkJY29uc3QgY2hhciAqbmFtZSA9IGRldl9wcml2LT5lbmdp bmVbZXJpbmctPmlkXS5uYW1lOwo+ICsKPiArCQlvYmogPSBlcmluZy0+YmF0Y2hidWZmZXI7Cj4g ICAJCWlmIChvYmopIHsKPiAtCQkJZXJyX3B1dHMobSwgZGV2X3ByaXYtPnJpbmdbaV0ubmFtZSk7 Cj4gLQkJCWlmIChlcnJvci0+cmluZ1tpXS5waWQgIT0gLTEpCj4gKwkJCWVycl9wdXRzKG0sIG5h bWUpOwo+ICsJCQlpZiAoZXJpbmctPnBpZCAhPSAtMSkKPiAgIAkJCQllcnJfcHJpbnRmKG0sICIg KHN1Ym1pdHRlZCBieSAlcyBbJWRdKSIsCj4gLQkJCQkJICAgZXJyb3ItPnJpbmdbaV0uY29tbSwK PiAtCQkJCQkgICBlcnJvci0+cmluZ1tpXS5waWQpOwo+ICsJCQkJCSAgIGVyaW5nLT5jb21tLCBl cmluZy0+cGlkKTsKPiAgIAkJCWVycl9wcmludGYobSwgIiAtLS0gZ3R0X29mZnNldCA9IDB4JTA4 eFxuIiwKPiAgIAkJCQkgICBvYmotPmd0dF9vZmZzZXQpOwo+ICAgCQkJcHJpbnRfZXJyb3Jfb2Jq KG0sIG9iaik7Cj4gICAJCX0KPiAgIAo+IC0JCW9iaiA9IGVycm9yLT5yaW5nW2ldLndhX2JhdGNo YnVmZmVyOwo+ICsJCW9iaiA9IGVyaW5nLT53YV9iYXRjaGJ1ZmZlcjsKPiAgIAkJaWYgKG9iaikg ewo+ICAgCQkJZXJyX3ByaW50ZihtLCAiJXMgKHcvYSkgLS0tIGd0dF9vZmZzZXQgPSAweCUwOHhc biIsCj4gLQkJCQkgICBkZXZfcHJpdi0+cmluZ1tpXS5uYW1lLCBvYmotPmd0dF9vZmZzZXQpOwo+ ICsJCQkJICAgbmFtZSwgb2JqLT5ndHRfb2Zmc2V0KTsKPiAgIAkJCXByaW50X2Vycm9yX29iaiht LCBvYmopOwo+ICAgCQl9Cj4gICAKPiAtCQlpZiAoZXJyb3ItPnJpbmdbaV0ubnVtX3JlcXVlc3Rz KSB7Cj4gKwkJaWYgKGVyaW5nLT5udW1fcmVxdWVzdHMpIHsKPiAgIAkJCWVycl9wcmludGYobSwg IiVzIC0tLSAlZCByZXF1ZXN0c1xuIiwKPiAtCQkJCSAgIGRldl9wcml2LT5yaW5nW2ldLm5hbWUs Cj4gLQkJCQkgICBlcnJvci0+cmluZ1tpXS5udW1fcmVxdWVzdHMpOwo+IC0JCQlmb3IgKGogPSAw OyBqIDwgZXJyb3ItPnJpbmdbaV0ubnVtX3JlcXVlc3RzOyBqKyspIHsKPiAtCQkJCWVycl9wcmlu dGYobSwgIiAgc2Vxbm8gMHglMDh4LCBlbWl0dGVkICVsZCwgdGFpbCAweCUwOHhcbiIsCj4gLQkJ CQkJICAgZXJyb3ItPnJpbmdbaV0ucmVxdWVzdHNbal0uc2Vxbm8sCj4gLQkJCQkJICAgZXJyb3It PnJpbmdbaV0ucmVxdWVzdHNbal0uamlmZmllcywKPiAtCQkJCQkgICBlcnJvci0+cmluZ1tpXS5y ZXF1ZXN0c1tqXS50YWlsKTsKPiArCQkJCSAgIG5hbWUsIGVyaW5nLT5udW1fcmVxdWVzdHMpOwo+ ICsJCQlmb3IgKGogPSAwOyBqIDwgZXJpbmctPm51bV9yZXF1ZXN0czsgaisrKSB7Cj4gKwkJCQll cnJfcHJpbnRmKG0sICIgIHBpZCAlbGQsIHNlcW5vIDB4JTA4eCwgdGFnIDB4JTA0eCwgZW1pdHRl ZCAlZG1zIGFnbyAoYXQgJWxkIGppZmZpZXMpLCBoZWFkIDB4JTA4eCwgdGFpbCAweCUwOHgsIGJh dGNoIDB4JTA4eCwgY29tcGxldGU/ICVkXG4iLAo+ICsJCQkJCSAgIGVyaW5nLT5yZXF1ZXN0c1tq XS5waWQsCj4gKwkJCQkJICAgZXJpbmctPnJlcXVlc3RzW2pdLnNlcW5vLAo+ICsJCQkJCSAgIGVy aW5nLT5yZXF1ZXN0c1tqXS50YWcsCj4gKwkJCQkJICAgamlmZmllc190b191c2VjcyhqaWZmaWVz IC0gZXJpbmctPnJlcXVlc3RzW2pdLmppZmZpZXMpIC8gMTAwMCwKPiArCQkJCQkgICBlcmluZy0+ cmVxdWVzdHNbal0uamlmZmllcywKPiArCQkJCQkgICBlcmluZy0+cmVxdWVzdHNbal0uaGVhZCwK PiArCQkJCQkgICBlcmluZy0+cmVxdWVzdHNbal0udGFpbCwKPiArCQkJCQkgICBlcmluZy0+cmVx dWVzdHNbal0uYmF0Y2gsCj4gKwkJCQkJICAgZXJpbmctPnJlcXVlc3RzW2pdLmNvbXBsZXRlKTsK PiAgIAkJCX0KPiAgIAkJfQo+ICAgCj4gLQkJaWYgKChvYmogPSBlcnJvci0+cmluZ1tpXS5yaW5n YnVmZmVyKSkgewo+ICsJCWlmICgob2JqID0gZXJpbmctPnJpbmdidWZmZXIpKSB7Cj4gICAJCQll cnJfcHJpbnRmKG0sICIlcyAtLS0gcmluZ2J1ZmZlciA9IDB4JTA4eFxuIiwKPiAtCQkJCSAgIGRl dl9wcml2LT5yaW5nW2ldLm5hbWUsCj4gLQkJCQkgICBvYmotPmd0dF9vZmZzZXQpOwo+ICsJCQkJ ICAgbmFtZSwgb2JqLT5ndHRfb2Zmc2V0KTsKPiAgIAkJCXByaW50X2Vycm9yX29iaihtLCBvYmop Owo+ICAgCQl9Cj4gICAKPiAtCQlpZiAoKG9iaiA9IGVycm9yLT5yaW5nW2ldLmh3c19wYWdlKSkg ewo+ICsJCWlmICgob2JqID0gZXJpbmctPmh3c19wYWdlKSkgewo+ICAgCQkJZXJyX3ByaW50Ziht LCAiJXMgLS0tIEhXIFN0YXR1cyA9IDB4JTA4eFxuIiwKPiAtCQkJCSAgIGRldl9wcml2LT5yaW5n W2ldLm5hbWUsCj4gLQkJCQkgICBvYmotPmd0dF9vZmZzZXQpOwo+ICsJCQkJICAgbmFtZSwgb2Jq LT5ndHRfb2Zmc2V0KTsKPiAgIAkJCW9mZnNldCA9IDA7Cj4gICAJCQlmb3IgKGVsdCA9IDA7IGVs dCA8IFBBR0VfU0laRS8xNjsgZWx0ICs9IDQpIHsKPiAgIAkJCQllcnJfcHJpbnRmKG0sICJbJTA0 eF0gJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKPiBAQCAtNDYyLDggKzQ4OSw3IEBAIGludCBpOTE1 X2Vycm9yX3N0YXRlX3RvX3N0cihzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVfYnVmICptLAo+ ICAgCj4gICAJCWlmICgob2JqID0gZXJyb3ItPnJpbmdbaV0uY3R4KSkgewo+ICAgCQkJZXJyX3By aW50ZihtLCAiJXMgLS0tIEhXIENvbnRleHQgPSAweCUwOHhcbiIsCj4gLQkJCQkgICBkZXZfcHJp di0+cmluZ1tpXS5uYW1lLAo+IC0JCQkJICAgb2JqLT5ndHRfb2Zmc2V0KTsKPiArCQkJCSAgIG5h bWUsIG9iai0+Z3R0X29mZnNldCk7Cj4gICAJCQlwcmludF9lcnJvcl9vYmoobSwgb2JqKTsKPiAg IAkJfQo+ICAgCX0KPiBAQCAtNTYxLDE2ICs1ODcsMjAgQEAgc3RhdGljIHZvaWQgaTkxNV9lcnJv cl9zdGF0ZV9mcmVlKHN0cnVjdCBrcmVmICplcnJvcl9yZWYpCj4gICAKPiAgIHN0YXRpYyBzdHJ1 Y3QgZHJtX2k5MTVfZXJyb3Jfb2JqZWN0ICoKPiAgIGk5MTVfZXJyb3Jfb2JqZWN0X2NyZWF0ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqc3JjLAo+IC0JCQkgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4g KwkJCSBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpzcmM7Cj4gICAJc3RydWN0IGRybV9pOTE1X2Vycm9yX29iamVjdCAqZHN0Owo+ICAg CWludCBudW1fcGFnZXM7Cj4gICAJYm9vbCB1c2VfZ2d0dDsKPiAgIAlpbnQgaSA9IDA7Cj4gICAJ dTMyIHJlbG9jX29mZnNldDsKPiAgIAo+IC0JaWYgKHNyYyA9PSBOVUxMIHx8IHNyYy0+cGFnZXMg PT0gTlVMTCkKPiArCWlmICh2bWEgPT0gTlVMTCkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlz cmMgPSB2bWEtPm9iajsKPiArCWlmIChzcmMtPnBhZ2VzID09IE5VTEwpCj4gICAJCXJldHVybiBO VUxMOwo+ICAgCj4gICAJbnVtX3BhZ2VzID0gc3JjLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsK PiBAQCAtNTc5LDE0ICs2MDksMTEgQEAgaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAlpZiAoZHN0ID09IE5VTEwpCj4gICAJCXJl dHVybiBOVUxMOwo+ICAgCj4gLQlpZiAoaTkxNV9nZW1fb2JqX2JvdW5kKHNyYywgdm0pKQo+IC0J CWRzdC0+Z3R0X29mZnNldCA9IGk5MTVfZ2VtX29ial9vZmZzZXQoc3JjLCB2bSk7Cj4gLQllbHNl Cj4gLQkJZHN0LT5ndHRfb2Zmc2V0ID0gLTE7Cj4gKwlkc3QtPmd0dF9vZmZzZXQgPSB2bWEtPm5v ZGUuc3RhcnQ7Cj4gICAKPiAgIAlyZWxvY19vZmZzZXQgPSBkc3QtPmd0dF9vZmZzZXQ7Cj4gICAJ dXNlX2dndHQgPSAoc3JjLT5jYWNoZV9sZXZlbCA9PSBJOTE1X0NBQ0hFX05PTkUgJiYKPiAtCQkg ICAgaTkxNV9pc19nZ3R0KHZtKSAmJgo+ICsJCSAgICBpOTE1X2lzX2dndHQodm1hLT52bSkgJiYK PiAgIAkJICAgIHNyYy0+aGFzX2dsb2JhbF9ndHRfbWFwcGluZyAmJgo+ICAgCQkgICAgcmVsb2Nf b2Zmc2V0ICsgbnVtX3BhZ2VzICogUEFHRV9TSVpFIDw9IGRldl9wcml2LT5ndHQubWFwcGFibGVf ZW5kKTsKPiAgIAo+IEBAIC02NTYsMTggKzY4MywzMSBAQCB1bndpbmQ6Cj4gICAJa2ZyZWUoZHN0 KTsKPiAgIAlyZXR1cm4gTlVMTDsKPiAgIH0KPiAtI2RlZmluZSBpOTE1X2Vycm9yX2dndHRfb2Jq ZWN0X2NyZWF0ZShkZXZfcHJpdiwgc3JjKSBcCj4gLQlpOTE1X2Vycm9yX29iamVjdF9jcmVhdGUo KGRldl9wcml2KSwgKHNyYyksICYoZGV2X3ByaXYpLT5ndHQuYmFzZSkKPiArCj4gK3N0YXRpYyBp bmxpbmUgc3RydWN0IGRybV9pOTE1X2Vycm9yX29iamVjdCAqCj4gK2k5MTVfZXJyb3JfZ2d0dF9v YmplY3RfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJCQkgICAgICBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqc3JjKQo+ICt7Cj4gKwlpZiAoc3JjID09IE5VTEwp Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJcmV0dXJuIGk5MTVfZXJyb3Jfb2JqZWN0X2NyZWF0 ZShpOTE1LAo+ICsJCQkJCWk5MTVfZ2VtX29ial90b192bWEoc3JjLAo+ICsJCQkJCQkJICAgICZp OTE1LT5ndHQuYmFzZSkpOwo+ICt9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGNhcHR1cmVfYm8oc3Ry dWN0IGRybV9pOTE1X2Vycm9yX2J1ZmZlciAqZXJyLAo+ICAgCQkgICAgICAgc3RydWN0IGk5MTVf dm1hICp2bWEpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZt YS0+b2JqOwo+ICsJaW50IG47Cj4gICAKPiAgIAllcnItPnNpemUgPSBvYmotPmJhc2Uuc2l6ZTsK PiAgIAllcnItPm5hbWUgPSBvYmotPmJhc2UubmFtZTsKPiAtCWVyci0+cnNlcW5vID0gb2JqLT5s YXN0X3JlYWRfc2Vxbm87Cj4gLQllcnItPndzZXFubyA9IG9iai0+bGFzdF93cml0ZV9zZXFubzsK PiArCWZvciAobiA9IDA7IG4gPCBBUlJBWV9TSVpFKG9iai0+bGFzdF9yZWFkKTsgbisrKQo+ICsJ CWVyci0+cnNlcW5vW25dID0gaTkxNV9yZXF1ZXN0X3NlcW5vKG9iai0+bGFzdF9yZWFkW25dLnJl cXVlc3QpOwo+ICsJZXJyLT53c2Vxbm8gPSBpOTE1X3JlcXVlc3Rfc2Vxbm8ob2JqLT5sYXN0X3dy aXRlLnJlcXVlc3QpOwo+ICsJZXJyLT5mc2Vxbm8gPSBpOTE1X3JlcXVlc3Rfc2Vxbm8ob2JqLT5s YXN0X2ZlbmNlLnJlcXVlc3QpOwo+ICAgCWVyci0+Z3R0X29mZnNldCA9IHZtYS0+bm9kZS5zdGFy dDsKPiAgIAllcnItPnJlYWRfZG9tYWlucyA9IG9iai0+YmFzZS5yZWFkX2RvbWFpbnM7Cj4gICAJ ZXJyLT53cml0ZV9kb21haW4gPSBvYmotPmJhc2Uud3JpdGVfZG9tYWluOwo+IEBAIC02ODEsNyAr NzIxLDcgQEAgc3RhdGljIHZvaWQgY2FwdHVyZV9ibyhzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfYnVm ZmVyICplcnIsCj4gICAJZXJyLT5kaXJ0eSA9IG9iai0+ZGlydHk7Cj4gICAJZXJyLT5wdXJnZWFi bGUgPSBvYmotPm1hZHYgIT0gSTkxNV9NQURWX1dJTExORUVEOwo+ICAgCWVyci0+dXNlcnB0ciA9 IG9iai0+dXNlcnB0ci5tbSAhPSBOVUxMOwo+IC0JZXJyLT5yaW5nID0gb2JqLT5yaW5nID8gb2Jq LT5yaW5nLT5pZCA6IC0xOwo+ICsJZXJyLT5yaW5nID0gaTkxNV9yZXF1ZXN0X2VuZ2luZV9pZChv YmotPmxhc3Rfd3JpdGUucmVxdWVzdCk7Cj4gICAJZXJyLT5jYWNoZV9sZXZlbCA9IG9iai0+Y2Fj aGVfbGV2ZWw7Cj4gICB9Cj4gICAKPiBAQCAtNzQ1LDcgKzc4NSw3IEBAIHN0YXRpYyB1aW50MzJf dCBpOTE1X2Vycm9yX2dlbmVyYXRlX2NvZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ICAgCSAqIHN5bmNocm9uaXphdGlvbiBjb21tYW5kcyB3aGljaCBhbG1vc3QgYWx3YXlz IGFwcGVhciBpbiB0aGUgY2FzZQo+ICAgCSAqIHN0cmljdGx5IGEgY2xpZW50IGJ1Zy4gVXNlIGlu c3Rkb25lIHRvIGRpZmZlcmVudGlhdGUgdGhvc2Ugc29tZS4KPiAgIAkgKi8KPiAtCWZvciAoaSA9 IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9O VU1fRU5HSU5FUzsgaSsrKSB7Cj4gICAJCWlmIChlcnJvci0+cmluZ1tpXS5oYW5nY2hlY2tfYWN0 aW9uID09IEhBTkdDSEVDS19IVU5HKSB7Cj4gICAJCQlpZiAocmluZ19pZCkKPiAgIAkJCQkqcmlu Z19pZCA9IGk7Cj4gQEAgLTc5Myw4MyArODMzLDc3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX3Jl Y29yZF9mZW5jZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAo+ICAgc3RhdGljIHZvaWQg Z2VuOF9yZWNvcmRfc2VtYXBob3JlX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiAgIAkJCQkJc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlICplcnJvciwKPiAtCQkJ CQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICsJCQkJCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKPiAgIAkJCQkJc3RydWN0IGRybV9pOTE1X2Vycm9yX3JpbmcgKmVyaW5n KQo+ICAgewo+ICAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnRvOwo+ICsJdTMyICptYm94Owo+ ICAgCWludCBpOwo+ICAgCj4gLQlpZiAoIWk5MTVfc2VtYXBob3JlX2lzX2VuYWJsZWQoZGV2X3By aXYtPmRldikpCj4gKwlpZiAoZGV2X3ByaXYtPnNlbWFwaG9yZV9vYmogPT0gTlVMTCkKPiAgIAkJ cmV0dXJuOwo+ICAgCj4gLQlpZiAoIWVycm9yLT5zZW1hcGhvcmVfb2JqKQo+ICsJaWYgKGVycm9y LT5zZW1hcGhvcmVfb2JqID09IE5VTEwpCj4gICAJCWVycm9yLT5zZW1hcGhvcmVfb2JqID0KPiAt CQkJaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKGRldl9wcml2LAo+IC0JCQkJCQkgZGV2X3ByaXYt PnNlbWFwaG9yZV9vYmosCj4gLQkJCQkJCSAmZGV2X3ByaXYtPmd0dC5iYXNlKTsKPiAtCj4gLQlm b3JfZWFjaF9yaW5nKHRvLCBkZXZfcHJpdiwgaSkgewo+IC0JCWludCBpZHg7Cj4gLQkJdTE2IHNp Z25hbF9vZmZzZXQ7Cj4gLQkJdTMyICp0bXA7Cj4gKwkJCWk5MTVfZXJyb3JfZ2d0dF9vYmplY3Rf Y3JlYXRlKGRldl9wcml2LAo+ICsJCQkJCQkgICAgICBkZXZfcHJpdi0+c2VtYXBob3JlX29iaik7 Cj4gKwlpZiAoZXJyb3ItPnNlbWFwaG9yZV9vYmogPT0gTlVMTCkKPiArCQlyZXR1cm47Cj4gICAK PiAtCQlpZiAocmluZyA9PSB0bykKPiArCW1ib3ggPSBlcnJvci0+c2VtYXBob3JlX29iai0+cGFn ZXNbMF07Cj4gKwlmb3JfZWFjaF9lbmdpbmUodG8sIGRldl9wcml2LCBpKSB7Cj4gKwkJaWYgKGVu Z2luZSA9PSB0bykKPiAgIAkJCWNvbnRpbnVlOwo+ICAgCj4gLQkJc2lnbmFsX29mZnNldCA9IChH RU44X1NJR05BTF9PRkZTRVQocmluZywgaSkgJiAoUEFHRV9TSVpFIC0gMSkpCj4gLQkJCQkvIDQ7 Cj4gLQkJdG1wID0gZXJyb3ItPnNlbWFwaG9yZV9vYmotPnBhZ2VzWzBdOwo+IC0JCWlkeCA9IGlu dGVsX3Jpbmdfc3luY19pbmRleChyaW5nLCB0byk7Cj4gLQo+IC0JCWVyaW5nLT5zZW1hcGhvcmVf bWJveGVzW2lkeF0gPSB0bXBbc2lnbmFsX29mZnNldF07Cj4gLQkJZXJpbmctPnNlbWFwaG9yZV9z ZXFub1tpZHhdID0gcmluZy0+c2VtYXBob3JlLnN5bmNfc2Vxbm9baWR4XTsKPiArCQllcmluZy0+ c2VtYXBob3JlX21ib3hlc1tpXSA9Cj4gKwkJCW1ib3hbR0VOOF9TRU1BUEhPUkVfT0ZGU0VUKGRl dl9wcml2LAo+ICsJCQkJCQkgICBlbmdpbmUtPmlkLAo+ICsJCQkJCQkgICBpKSAmIChQQUdFX1NJ WkUgLSAxKSAvIDRdOwo+ICAgCX0KPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQgZ2VuNl9yZWNv cmRfc2VtYXBob3JlX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAt CQkJCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICsJCQkJCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSwKPiAgIAkJCQkJc3RydWN0IGRybV9pOTE1X2Vycm9yX3JpbmcgKmVy aW5nKQo+ICAgewo+IC0JZXJpbmctPnNlbWFwaG9yZV9tYm94ZXNbMF0gPSBJOTE1X1JFQUQoUklO R19TWU5DXzAocmluZy0+bW1pb19iYXNlKSk7Cj4gLQllcmluZy0+c2VtYXBob3JlX21ib3hlc1sx XSA9IEk5MTVfUkVBRChSSU5HX1NZTkNfMShyaW5nLT5tbWlvX2Jhc2UpKTsKPiAtCWVyaW5nLT5z ZW1hcGhvcmVfc2Vxbm9bMF0gPSByaW5nLT5zZW1hcGhvcmUuc3luY19zZXFub1swXTsKPiAtCWVy aW5nLT5zZW1hcGhvcmVfc2Vxbm9bMV0gPSByaW5nLT5zZW1hcGhvcmUuc3luY19zZXFub1sxXTsK PiAtCj4gKwllcmluZy0+c2VtYXBob3JlX21ib3hlc1swXSA9IEk5MTVfUkVBRChSSU5HX1NZTkNf MChlbmdpbmUtPm1taW9fYmFzZSkpOwo+ICsJZXJpbmctPnNlbWFwaG9yZV9tYm94ZXNbMV0gPSBJ OTE1X1JFQUQoUklOR19TWU5DXzEoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiAgIAlpZiAoSEFTX1ZF Qk9YKGRldl9wcml2LT5kZXYpKSB7Cj4gICAJCWVyaW5nLT5zZW1hcGhvcmVfbWJveGVzWzJdID0K PiAtCQkJSTkxNV9SRUFEKFJJTkdfU1lOQ18yKHJpbmctPm1taW9fYmFzZSkpOwo+IC0JCWVyaW5n LT5zZW1hcGhvcmVfc2Vxbm9bMl0gPSByaW5nLT5zZW1hcGhvcmUuc3luY19zZXFub1syXTsKPiAr CQkJSTkxNV9SRUFEKFJJTkdfU1lOQ18yKGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4gICAJfQo+ICAg fQo+ICAgCj4gICBzdGF0aWMgdm9pZCBpOTE1X3JlY29yZF9yaW5nX3N0YXRlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gICAJCQkJICAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlICplcnJv ciwKPiAtCQkJCSAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gKwkJCQkgICBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkgICBzdHJ1Y3QgaTkxNV9nZW1fcmVx dWVzdCAqcnEsCj4gICAJCQkJICAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3JpbmcgKmVyaW5nKQo+ ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZzsKPiAgIAo+ICAgCWlmIChJ TlRFTF9JTkZPKGRldiktPmdlbiA+PSA2KSB7Cj4gLQkJZXJpbmctPnJjX3BzbWkgPSBJOTE1X1JF QUQocmluZy0+bW1pb19iYXNlICsgMHg1MCk7Cj4gLQkJZXJpbmctPmZhdWx0X3JlZyA9IEk5MTVf UkVBRChSSU5HX0ZBVUxUX1JFRyhyaW5nKSk7Cj4gKwkJZXJpbmctPnJjX3BzbWkgPSBJOTE1X1JF QUQoZW5naW5lLT5tbWlvX2Jhc2UgKyAweDUwKTsKPiArCQllcmluZy0+ZmF1bHRfcmVnID0gSTkx NV9SRUFEKFJJTkdfRkFVTFRfUkVHKGVuZ2luZSkpOwo+ICAgCQlpZiAoSU5URUxfSU5GTyhkZXYp LT5nZW4gPj0gOCkKPiAtCQkJZ2VuOF9yZWNvcmRfc2VtYXBob3JlX3N0YXRlKGRldl9wcml2LCBl cnJvciwgcmluZywgZXJpbmcpOwo+ICsJCQlnZW44X3JlY29yZF9zZW1hcGhvcmVfc3RhdGUoZGV2 X3ByaXYsIGVycm9yLCBlbmdpbmUsIGVyaW5nKTsKPiAgIAkJZWxzZQo+IC0JCQlnZW42X3JlY29y ZF9zZW1hcGhvcmVfc3RhdGUoZGV2X3ByaXYsIHJpbmcsIGVyaW5nKTsKPiArCQkJZ2VuNl9yZWNv cmRfc2VtYXBob3JlX3N0YXRlKGRldl9wcml2LCBlbmdpbmUsIGVyaW5nKTsKPiAgIAl9Cj4gICAK PiAgIAlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkgewo+IC0JCWVyaW5nLT5mYWRkciA9 IEk5MTVfUkVBRChSSU5HX0RNQV9GQUREKHJpbmctPm1taW9fYmFzZSkpOwo+IC0JCWVyaW5nLT5p cGVpciA9IEk5MTVfUkVBRChSSU5HX0lQRUlSKHJpbmctPm1taW9fYmFzZSkpOwo+IC0JCWVyaW5n LT5pcGVociA9IEk5MTVfUkVBRChSSU5HX0lQRUhSKHJpbmctPm1taW9fYmFzZSkpOwo+IC0JCWVy aW5nLT5pbnN0ZG9uZSA9IEk5MTVfUkVBRChSSU5HX0lOU1RET05FKHJpbmctPm1taW9fYmFzZSkp Owo+IC0JCWVyaW5nLT5pbnN0cHMgPSBJOTE1X1JFQUQoUklOR19JTlNUUFMocmluZy0+bW1pb19i YXNlKSk7Cj4gLQkJZXJpbmctPmJiYWRkciA9IEk5MTVfUkVBRChSSU5HX0JCQUREUihyaW5nLT5t bWlvX2Jhc2UpKTsKPiArCQllcmluZy0+ZmFkZHIgPSBJOTE1X1JFQUQoUklOR19ETUFfRkFERChl bmdpbmUtPm1taW9fYmFzZSkpOwo+ICsJCWVyaW5nLT5pcGVpciA9IEk5MTVfUkVBRChSSU5HX0lQ RUlSKGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4gKwkJZXJpbmctPmlwZWhyID0gSTkxNV9SRUFEKFJJ TkdfSVBFSFIoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiArCQllcmluZy0+aW5zdGRvbmUgPSBJOTE1 X1JFQUQoUklOR19JTlNURE9ORShlbmdpbmUtPm1taW9fYmFzZSkpOwo+ICsJCWVyaW5nLT5pbnN0 cHMgPSBJOTE1X1JFQUQoUklOR19JTlNUUFMoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiArCQllcmlu Zy0+YmJhZGRyID0gSTkxNV9SRUFEKFJJTkdfQkJBRERSKGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4g ICAJCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA4KSB7Cj4gLQkJCWVyaW5nLT5mYWRkciB8 PSAodTY0KSBJOTE1X1JFQUQoUklOR19ETUFfRkFERF9VRFcocmluZy0+bW1pb19iYXNlKSkgPDwg MzI7Cj4gLQkJCWVyaW5nLT5iYmFkZHIgfD0gKHU2NCkgSTkxNV9SRUFEKFJJTkdfQkJBRERSX1VE VyhyaW5nLT5tbWlvX2Jhc2UpKSA8PCAzMjsKPiArCQkJZXJpbmctPmZhZGRyIHw9ICh1NjQpIEk5 MTVfUkVBRChSSU5HX0RNQV9GQUREX1VEVyhlbmdpbmUtPm1taW9fYmFzZSkpIDw8IDMyOwo+ICsJ CQllcmluZy0+YmJhZGRyIHw9ICh1NjQpIEk5MTVfUkVBRChSSU5HX0JCQUREUl9VRFcoZW5naW5l LT5tbWlvX2Jhc2UpKSA8PCAzMjsKPiAgIAkJfQo+IC0JCWVyaW5nLT5iYnN0YXRlID0gSTkxNV9S RUFEKFJJTkdfQkJTVEFURShyaW5nLT5tbWlvX2Jhc2UpKTsKPiArCQllcmluZy0+YmJzdGF0ZSA9 IEk5MTVfUkVBRChSSU5HX0JCU1RBVEUoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiAgIAl9IGVsc2Ug ewo+ICAgCQllcmluZy0+ZmFkZHIgPSBJOTE1X1JFQUQoRE1BX0ZBRERfSThYWCk7Cj4gICAJCWVy aW5nLT5pcGVpciA9IEk5MTVfUkVBRChJUEVJUik7Cj4gQEAgLTg3NywxOSArOTExLDI5IEBAIHN0 YXRpYyB2b2lkIGk5MTVfcmVjb3JkX3Jpbmdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiAgIAkJZXJpbmctPmluc3Rkb25lID0gSTkxNV9SRUFEKElOU1RET05FKTsKPiAgIAl9Cj4gICAK PiAtCWVyaW5nLT53YWl0aW5nID0gd2FpdHF1ZXVlX2FjdGl2ZSgmcmluZy0+aXJxX3F1ZXVlKTsK PiAtCWVyaW5nLT5pbnN0cG0gPSBJOTE1X1JFQUQoUklOR19JTlNUUE0ocmluZy0+bW1pb19iYXNl KSk7Cj4gLQllcmluZy0+c2Vxbm8gPSByaW5nLT5nZXRfc2Vxbm8ocmluZywgZmFsc2UpOwo+IC0J ZXJpbmctPmFjdGhkID0gaW50ZWxfcmluZ19nZXRfYWN0aXZlX2hlYWQocmluZyk7Cj4gLQllcmlu Zy0+aGVhZCA9IEk5MTVfUkVBRF9IRUFEKHJpbmcpOwo+IC0JZXJpbmctPnRhaWwgPSBJOTE1X1JF QURfVEFJTChyaW5nKTsKPiAtCWVyaW5nLT5jdGwgPSBJOTE1X1JFQURfQ1RMKHJpbmcpOwo+ICsJ ZXJpbmctPndhaXRpbmcgPSB3YWl0cXVldWVfYWN0aXZlKCZlbmdpbmUtPmlycV9xdWV1ZSk7Cj4g KwllcmluZy0+aW5zdHBtID0gSTkxNV9SRUFEKFJJTkdfSU5TVFBNKGVuZ2luZS0+bW1pb19iYXNl KSk7Cj4gKwllcmluZy0+YWN0aGQgPSBpbnRlbF9lbmdpbmVfZ2V0X2FjdGl2ZV9oZWFkKGVuZ2lu ZSk7Cj4gKwllcmluZy0+c2Vxbm8gPSBlbmdpbmUtPmdldF9zZXFubyhlbmdpbmUpOwo+ICsJZXJp bmctPnJlcXVlc3QgPSBlbmdpbmUtPmxhc3RfcmVxdWVzdCA/IGVuZ2luZS0+bGFzdF9yZXF1ZXN0 LT5zZXFubyA6IDA7Cj4gKwllcmluZy0+aGFuZ2NoZWNrID0gZW5naW5lLT5oYW5nY2hlY2suc2Vx bm87Cj4gKwltZW1jcHkoZXJpbmctPmJyZWFkY3J1bWIsIGVuZ2luZS0+YnJlYWRjcnVtYiwgc2l6 ZW9mKGVyaW5nLT5icmVhZGNydW1iKSk7Cj4gKwltZW1jcHkoZXJpbmctPnNlbWFwaG9yZV9zeW5j LCBlbmdpbmUtPnNlbWFwaG9yZS5zeW5jLCBzaXplb2YoZXJpbmctPnNlbWFwaG9yZV9zeW5jKSk7 Cj4gKwllcmluZy0+dGFnID0gZW5naW5lLT50YWc7Cj4gKwllcmluZy0+aW50ZXJydXB0cyA9IGF0 b21pY19yZWFkKCZlbmdpbmUtPmludGVycnVwdHMpOwo+ICsJZXJpbmctPmlycV9jb3VudCA9IGVu Z2luZS0+aXJxX3JlZmNvdW50Owo+ICsJZXJpbmctPnN0YXJ0ID0gSTkxNV9SRUFEX1NUQVJUKGVu Z2luZSk7Cj4gKwllcmluZy0+aGVhZCA9IEk5MTVfUkVBRF9IRUFEKGVuZ2luZSk7Cj4gKwllcmlu Zy0+dGFpbCA9IEk5MTVfUkVBRF9UQUlMKGVuZ2luZSk7Cj4gKwllcmluZy0+Y3RsID0gSTkxNV9S RUFEX0NUTChlbmdpbmUpOwo+ICsJaWYgKCFJU19HRU4yKGRldl9wcml2KSkKPiArCQllcmluZy0+ bW9kZSA9IEk5MTVfUkVBRF9NT0RFKGVuZ2luZSk7Cj4gICAKPiAgIAlpZiAoSTkxNV9ORUVEX0dG WF9IV1MoZGV2KSkgewo+ICAgCQlpbnQgbW1pbzsKPiAgIAo+ICAgCQlpZiAoSVNfR0VONyhkZXYp KSB7Cj4gLQkJCXN3aXRjaCAocmluZy0+aWQpIHsKPiArCQkJc3dpdGNoIChlbmdpbmUtPmlkKSB7 Cj4gICAJCQlkZWZhdWx0Ogo+ICAgCQkJY2FzZSBSQ1M6Cj4gICAJCQkJbW1pbyA9IFJFTkRFUl9I V1NfUEdBX0dFTjc7Cj4gQEAgLTkwNCw1NiArOTQ4LDY3IEBAIHN0YXRpYyB2b2lkIGk5MTVfcmVj b3JkX3Jpbmdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQltbWlvID0gVkVC T1hfSFdTX1BHQV9HRU43Owo+ICAgCQkJCWJyZWFrOwo+ICAgCQkJfQo+IC0JCX0gZWxzZSBpZiAo SVNfR0VONihyaW5nLT5kZXYpKSB7Cj4gLQkJCW1taW8gPSBSSU5HX0hXU19QR0FfR0VONihyaW5n LT5tbWlvX2Jhc2UpOwo+ICsJCX0gZWxzZSBpZiAoSVNfR0VONihlbmdpbmUtPmk5MTUpKSB7Cj4g KwkJCW1taW8gPSBSSU5HX0hXU19QR0FfR0VONihlbmdpbmUtPm1taW9fYmFzZSk7Cj4gICAJCX0g ZWxzZSB7Cj4gICAJCQkvKiBYWFg6IGdlbjggcmV0dXJucyB0byBzYW5pdHkgKi8KPiAtCQkJbW1p byA9IFJJTkdfSFdTX1BHQShyaW5nLT5tbWlvX2Jhc2UpOwo+ICsJCQltbWlvID0gUklOR19IV1Nf UEdBKGVuZ2luZS0+bW1pb19iYXNlKTsKPiAgIAkJfQo+ICAgCj4gICAJCWVyaW5nLT5od3MgPSBJ OTE1X1JFQUQobW1pbyk7Cj4gICAJfQo+ICAgCj4gLQllcmluZy0+aGFuZ2NoZWNrX3Njb3JlID0g cmluZy0+aGFuZ2NoZWNrLnNjb3JlOwo+IC0JZXJpbmctPmhhbmdjaGVja19hY3Rpb24gPSByaW5n LT5oYW5nY2hlY2suYWN0aW9uOwo+ICsJcmluZyA9IHJxID8gcnEtPmN0eC0+cmluZ1tlbmdpbmUt PmlkXS5yaW5nIDogZW5naW5lLT5kZWZhdWx0X2NvbnRleHQtPnJpbmdbZW5naW5lLT5pZF0ucmlu ZzsKPiArCWlmIChyaW5nKSB7Cj4gKwkJZXJpbmctPmNwdV9yaW5nX2hlYWQgPSByaW5nLT5oZWFk Owo+ICsJCWVyaW5nLT5jcHVfcmluZ190YWlsID0gcmluZy0+dGFpbDsKPiArCQllcmluZy0+cmlu Z2J1ZmZlciA9Cj4gKwkJCWk5MTVfZXJyb3JfZ2d0dF9vYmplY3RfY3JlYXRlKGRldl9wcml2LCBy aW5nLT5vYmopOwo+ICsJfQo+ICsKPiArCWVyaW5nLT5od3NfcGFnZSA9Cj4gKwkJaTkxNV9lcnJv cl9nZ3R0X29iamVjdF9jcmVhdGUoZGV2X3ByaXYsCj4gKwkJCQkJICAgICAgZW5naW5lLT5zdGF0 dXNfcGFnZS5vYmopOwo+ICsKPiArCWVyaW5nLT5oYW5nY2hlY2tfc2NvcmUgPSBlbmdpbmUtPmhh bmdjaGVjay5zY29yZTsKPiArCWVyaW5nLT5oYW5nY2hlY2tfYWN0aW9uID0gZW5naW5lLT5oYW5n Y2hlY2suYWN0aW9uOwo+ICAgCj4gICAJaWYgKFVTRVNfUFBHVFQoZGV2KSkgewo+ICAgCQlpbnQg aTsKPiAgIAo+IC0JCWVyaW5nLT52bV9pbmZvLmdmeF9tb2RlID0gSTkxNV9SRUFEKFJJTkdfTU9E RV9HRU43KHJpbmcpKTsKPiArCQllcmluZy0+dm1faW5mby5nZnhfbW9kZSA9IEk5MTVfUkVBRChS SU5HX01PREVfR0VONyhlbmdpbmUpKTsKPiAgIAo+ICAgCQlzd2l0Y2ggKElOVEVMX0lORk8oZGV2 KS0+Z2VuKSB7Cj4gICAJCWNhc2UgODoKPiAgIAkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsK PiAgIAkJCQllcmluZy0+dm1faW5mby5wZHBbaV0gPQo+IC0JCQkJCUk5MTVfUkVBRChHRU44X1JJ TkdfUERQX1VEVyhyaW5nLCBpKSk7Cj4gKwkJCQkJSTkxNV9SRUFEKEdFTjhfUklOR19QRFBfVURX KGVuZ2luZSwgaSkpOwo+ICAgCQkJCWVyaW5nLT52bV9pbmZvLnBkcFtpXSA8PD0gMzI7Cj4gICAJ CQkJZXJpbmctPnZtX2luZm8ucGRwW2ldIHw9Cj4gLQkJCQkJSTkxNV9SRUFEKEdFTjhfUklOR19Q RFBfTERXKHJpbmcsIGkpKTsKPiArCQkJCQlJOTE1X1JFQUQoR0VOOF9SSU5HX1BEUF9MRFcoZW5n aW5lLCBpKSk7Cj4gICAJCQl9Cj4gICAJCQlicmVhazsKPiAgIAkJY2FzZSA3Ogo+ICAgCQkJZXJp bmctPnZtX2luZm8ucHBfZGlyX2Jhc2UgPQo+IC0JCQkJSTkxNV9SRUFEKFJJTkdfUFBfRElSX0JB U0UocmluZykpOwo+ICsJCQkJSTkxNV9SRUFEKFJJTkdfUFBfRElSX0JBU0UoZW5naW5lKSk7Cj4g ICAJCQlicmVhazsKPiAgIAkJY2FzZSA2Ogo+ICAgCQkJZXJpbmctPnZtX2luZm8ucHBfZGlyX2Jh c2UgPQo+IC0JCQkJSTkxNV9SRUFEKFJJTkdfUFBfRElSX0JBU0VfUkVBRChyaW5nKSk7Cj4gKwkJ CQlJOTE1X1JFQUQoUklOR19QUF9ESVJfQkFTRV9SRUFEKGVuZ2luZSkpOwo+ICAgCQkJYnJlYWs7 Cj4gICAJCX0KPiAgIAl9Cj4gICB9Cj4gICAKPiAtCj4gLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX3Jl Y29yZF9hY3RpdmVfY29udGV4dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICtzdGF0 aWMgdm9pZCBpOTE1X2dlbV9yZWNvcmRfYWN0aXZlX2NvbnRleHQoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAo+ICAgCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGUgKmVy cm9yLAo+ICAgCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfcmluZyAqZXJpbmcpCj4gICB7 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5nLT5kZXYtPmRldl9w cml2YXRlOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5p OTE1Owo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAKPiAgIAkvKiBD dXJyZW50bHkgcmVuZGVyIHJpbmcgaXMgdGhlIG9ubHkgSFcgY29udGV4dCB1c2VyICovCj4gLQlp ZiAocmluZy0+aWQgIT0gUkNTIHx8ICFlcnJvci0+Y2NpZCkKPiArCWlmIChlbmdpbmUtPmlkICE9 IFJDUyB8fCAhZXJyb3ItPmNjaWQpCj4gICAJCXJldHVybjsKPiAgIAo+ICAgCWxpc3RfZm9yX2Vh Y2hfZW50cnkob2JqLCAmZGV2X3ByaXYtPm1tLmJvdW5kX2xpc3QsIGdsb2JhbF9saXN0KSB7Cj4g QEAgLTk3MSw0OSArMTAyNiw0MCBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9yZWNvcmRfcmluZ3Mo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQkgIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9z dGF0ZSAqZXJyb3IpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVx dWVzdDsKPiArCXN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycTsKPiAgIAlpbnQgaSwgY291bnQ7 Cj4gICAKPiAtCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7Cj4gLQkJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9ICZkZXZfcHJpdi0+cmluZ1tpXTsKPiAtCQlzdHJ1 Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmJ1ZjsKPiArCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9F TkdJTkVTOyBpKyspIHsKPiArCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSAmZGV2 X3ByaXYtPmVuZ2luZVtpXTsKPiAgIAo+ICAgCQllcnJvci0+cmluZ1tpXS5waWQgPSAtMTsKPiAg IAo+IC0JCWlmIChyaW5nLT5kZXYgPT0gTlVMTCkKPiArCQlpZiAoZW5naW5lLT5pOTE1ID09IE5V TEwpCj4gICAJCQljb250aW51ZTsKPiAgIAo+ICAgCQllcnJvci0+cmluZ1tpXS52YWxpZCA9IHRy dWU7Cj4gKwkJZXJyb3ItPnJpbmdbaV0uaWQgPSBpOwo+ICAgCj4gLQkJaTkxNV9yZWNvcmRfcmlu Z19zdGF0ZShkZXYsIGVycm9yLCByaW5nLCAmZXJyb3ItPnJpbmdbaV0pOwo+IC0KPiAtCQlyZXF1 ZXN0ID0gaTkxNV9nZW1fZmluZF9hY3RpdmVfcmVxdWVzdChyaW5nKTsKPiAtCQlpZiAocmVxdWVz dCkgewo+IC0JCQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bTsKPiAtCj4gLQkJCXZtID0g cmVxdWVzdC0+Y3R4ICYmIHJlcXVlc3QtPmN0eC0+cHBndHQgPwo+IC0JCQkJJnJlcXVlc3QtPmN0 eC0+cHBndHQtPmJhc2UgOgo+IC0JCQkJJmRldl9wcml2LT5ndHQuYmFzZTsKPiAtCj4gKwkJc3Bp bl9sb2NrKCZlbmdpbmUtPmxvY2spOwo+ICsJCXJxID0gaW50ZWxfZW5naW5lX2ZpbmRfYWN0aXZl X2JhdGNoKGVuZ2luZSk7Cj4gKwkJaWYgKHJxKSB7Cj4gICAJCQkvKiBXZSBuZWVkIHRvIGNvcHkg dGhlc2UgdG8gYW4gYW5vbnltb3VzIGJ1ZmZlcgo+ICAgCQkJICogYXMgdGhlIHNpbXBsZXN0IG1l dGhvZCB0byBhdm9pZCBiZWluZyBvdmVyd3JpdHRlbgo+ICAgCQkJICogYnkgdXNlcnNwYWNlLgo+ ICAgCQkJICovCj4gICAJCQllcnJvci0+cmluZ1tpXS5iYXRjaGJ1ZmZlciA9Cj4gLQkJCQlpOTE1 X2Vycm9yX29iamVjdF9jcmVhdGUoZGV2X3ByaXYsCj4gLQkJCQkJCQkgcmVxdWVzdC0+YmF0Y2hf b2JqLAo+IC0JCQkJCQkJIHZtKTsKPiArCQkJCWk5MTVfZXJyb3Jfb2JqZWN0X2NyZWF0ZShkZXZf cHJpdiwgcnEtPmJhdGNoKTsKPiAgIAo+ICAgCQkJaWYgKEhBU19CUk9LRU5fQ1NfVExCKGRldl9w cml2LT5kZXYpKQo+ICAgCQkJCWVycm9yLT5yaW5nW2ldLndhX2JhdGNoYnVmZmVyID0KPiAgIAkJ CQkJaTkxNV9lcnJvcl9nZ3R0X29iamVjdF9jcmVhdGUoZGV2X3ByaXYsCj4gLQkJCQkJCQkgICAg IHJpbmctPnNjcmF0Y2gub2JqKTsKPiArCQkJCQkJCSAgICAgZW5naW5lLT5zY3JhdGNoLm9iaik7 Cj4gICAKPiAtCQkJaWYgKHJlcXVlc3QtPmZpbGVfcHJpdikgewo+ICsJCQlpZiAocnEtPmZpbGVf cHJpdikgewo+ICAgCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKPiAgIAo+ICAgCQkJCXJj dV9yZWFkX2xvY2soKTsKPiAtCQkJCXRhc2sgPSBwaWRfdGFzayhyZXF1ZXN0LT5maWxlX3ByaXYt PmZpbGUtPnBpZCwKPiArCQkJCXRhc2sgPSBwaWRfdGFzayhycS0+ZmlsZV9wcml2LT5maWxlLT5w aWQsCj4gICAJCQkJCQlQSURUWVBFX1BJRCk7Cj4gICAJCQkJaWYgKHRhc2spIHsKPiAgIAkJCQkJ c3RyY3B5KGVycm9yLT5yaW5nW2ldLmNvbW0sIHRhc2stPmNvbW0pOwo+IEBAIC0xMDIzLDMyICsx MDY5LDEyIEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX3JlY29yZF9yaW5ncyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAo+ICAgCQkJfQo+ICAgCQl9Cj4gICAKPiAtCQlpZiAoaTkxNS5lbmFibGVfZXhl Y2xpc3RzKSB7Cj4gLQkJCS8qIFRPRE86IFRoaXMgaXMgb25seSBhIHNtYWxsIGZpeCB0byBrZWVw IGJhc2ljIGVycm9yCj4gLQkJCSAqIGNhcHR1cmUgd29ya2luZywgYnV0IHdlIG5lZWQgdG8gYWRk IG1vcmUgaW5mb3JtYXRpb24KPiAtCQkJICogZm9yIGl0IHRvIGJlIHVzZWZ1bCAoZS5nLiBkdW1w IHRoZSBjb250ZXh0IGJlaW5nCj4gLQkJCSAqIGV4ZWN1dGVkKS4KPiAtCQkJICovCj4gLQkJCWlm IChyZXF1ZXN0KQo+IC0JCQkJcmJ1ZiA9IHJlcXVlc3QtPmN0eC0+ZW5naW5lW3JpbmctPmlkXS5y aW5nYnVmOwo+IC0JCQllbHNlCj4gLQkJCQlyYnVmID0gcmluZy0+ZGVmYXVsdF9jb250ZXh0LT5l bmdpbmVbcmluZy0+aWRdLnJpbmdidWY7Cj4gLQkJfSBlbHNlCj4gLQkJCXJidWYgPSByaW5nLT5i dWZmZXI7Cj4gKwkJaTkxNV9yZWNvcmRfcmluZ19zdGF0ZShkZXYsIGVycm9yLCBlbmdpbmUsIHJx LCAmZXJyb3ItPnJpbmdbaV0pOwo+ICAgCj4gLQkJZXJyb3ItPnJpbmdbaV0uY3B1X3JpbmdfaGVh ZCA9IHJidWYtPmhlYWQ7Cj4gLQkJZXJyb3ItPnJpbmdbaV0uY3B1X3JpbmdfdGFpbCA9IHJidWYt PnRhaWw7Cj4gLQo+IC0JCWVycm9yLT5yaW5nW2ldLnJpbmdidWZmZXIgPQo+IC0JCQlpOTE1X2Vy cm9yX2dndHRfb2JqZWN0X2NyZWF0ZShkZXZfcHJpdiwgcmJ1Zi0+b2JqKTsKPiAtCj4gLQkJZXJy b3ItPnJpbmdbaV0uaHdzX3BhZ2UgPQo+IC0JCQlpOTE1X2Vycm9yX2dndHRfb2JqZWN0X2NyZWF0 ZShkZXZfcHJpdiwgcmluZy0+c3RhdHVzX3BhZ2Uub2JqKTsKPiAtCj4gLQkJaTkxNV9nZW1fcmVj b3JkX2FjdGl2ZV9jb250ZXh0KHJpbmcsIGVycm9yLCAmZXJyb3ItPnJpbmdbaV0pOwo+ICsJCWk5 MTVfZ2VtX3JlY29yZF9hY3RpdmVfY29udGV4dChlbmdpbmUsIGVycm9yLCAmZXJyb3ItPnJpbmdb aV0pOwo+ICAgCj4gICAJCWNvdW50ID0gMDsKPiAtCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcXVl c3QsICZyaW5nLT5yZXF1ZXN0X2xpc3QsIGxpc3QpCj4gKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShy cSwgJmVuZ2luZS0+cmVxdWVzdHMsIGVuZ2luZV9saXN0KQo+ICAgCQkJY291bnQrKzsKPiAgIAo+ ICAgCQllcnJvci0+cmluZ1tpXS5udW1fcmVxdWVzdHMgPSBjb3VudDsKPiBAQCAtMTA2MSwxNCAr MTA4NywyOCBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9yZWNvcmRfcmluZ3Moc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiAgIAkJfQo+ICAgCj4gICAJCWNvdW50ID0gMDsKPiAtCQlsaXN0X2Zvcl9l YWNoX2VudHJ5KHJlcXVlc3QsICZyaW5nLT5yZXF1ZXN0X2xpc3QsIGxpc3QpIHsKPiArCQlsaXN0 X2Zvcl9lYWNoX2VudHJ5KHJxLCAmZW5naW5lLT5yZXF1ZXN0cywgZW5naW5lX2xpc3QpIHsKPiAg IAkJCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9yZXF1ZXN0ICplcnE7Cj4gKwkJCXN0cnVjdCB0YXNr X3N0cnVjdCAqdGFzazsKPiAgIAo+ICAgCQkJZXJxID0gJmVycm9yLT5yaW5nW2ldLnJlcXVlc3Rz W2NvdW50KytdOwo+IC0JCQllcnEtPnNlcW5vID0gcmVxdWVzdC0+c2Vxbm87Cj4gLQkJCWVycS0+ amlmZmllcyA9IHJlcXVlc3QtPmVtaXR0ZWRfamlmZmllczsKPiAtCQkJZXJxLT50YWlsID0gcmVx dWVzdC0+dGFpbDsKPiArCQkJZXJxLT5zZXFubyA9IHJxLT5zZXFubzsKPiArCQkJZXJxLT5qaWZm aWVzID0gcnEtPmVtaXR0ZWRfamlmZmllczsKPiArCQkJZXJxLT5oZWFkID0gcnEtPmhlYWQ7Cj4g KwkJCWVycS0+dGFpbCA9IHJxLT50YWlsOwo+ICsJCQllcnEtPmJhdGNoID0gMDsKPiArCQkJaWYg KHJxLT5iYXRjaCkKPiArCQkJCWVycS0+YmF0Y2ggPSBycS0+YmF0Y2gtPm5vZGUuc3RhcnQ7Cj4g KwkJCW1lbWNweShlcnEtPmJyZWFkY3J1bWIsIHJxLT5icmVhZGNydW1iLCBzaXplb2YocnEtPmJy ZWFkY3J1bWIpKTsKPiArCQkJZXJxLT5jb21wbGV0ZSA9IGk5MTVfcmVxdWVzdF9jb21wbGV0ZShy cSk7Cj4gKwkJCWVycS0+dGFnID0gcnEtPnRhZzsKPiArCj4gKwkJCXJjdV9yZWFkX2xvY2soKTsK PiArCQkJdGFzayA9IHJxLT5maWxlX3ByaXYgPyBwaWRfdGFzayhycS0+ZmlsZV9wcml2LT5maWxl LT5waWQsIFBJRFRZUEVfUElEKSA6IE5VTEw7Cj4gKwkJCWVycS0+cGlkID0gdGFzayA/IHRhc2st PnBpZCA6IDA7Cj4gKwkJCXJjdV9yZWFkX3VubG9jaygpOwo+ICAgCQl9Cj4gKwkJc3Bpbl91bmxv Y2soJmVuZ2luZS0+bG9jayk7Cj4gICAJfQo+ICAgfQo+ICAgCj4gQEAgLTExNzUsNiArMTIxNSw3 IEBAIHN0YXRpYyB2b2lkIGk5MTVfY2FwdHVyZV9yZWdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICAgCS8qIDE6IFJlZ2lzdGVycyBzcGVjaWZpYyB0byBhIHNpbmds ZSBnZW5lcmF0aW9uICovCj4gICAJaWYgKElTX1ZBTExFWVZJRVcoZGV2KSkgewo+ICAgCQllcnJv ci0+Z3RpZXJbMF0gPSBJOTE1X1JFQUQoR1RJRVIpOwo+ICsJCWVycm9yLT5ndGltclswXSA9IEk5 MTVfUkVBRChHVElNUik7Cj4gICAJCWVycm9yLT5pZXIgPSBJOTE1X1JFQUQoVkxWX0lFUik7Cj4g ICAJCWVycm9yLT5mb3JjZXdha2UgPSBJOTE1X1JFQUQoRk9SQ0VXQUtFX1ZMVik7Cj4gICAJfQo+ IEBAIC0xMjEwLDExICsxMjUxLDE0IEBAIHN0YXRpYyB2b2lkIGk5MTVfY2FwdHVyZV9yZWdfc3Rh dGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgCj4gICAJaWYgKElOVEVM X0lORk8oZGV2KS0+Z2VuID49IDgpIHsKPiAgIAkJZXJyb3ItPmllciA9IEk5MTVfUkVBRChHRU44 X0RFX01JU0NfSUVSKTsKPiAtCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQo+ICsJCWZvciAoaSA9 IDA7IGkgPCA0OyBpKyspIHsKPiAgIAkJCWVycm9yLT5ndGllcltpXSA9IEk5MTVfUkVBRChHRU44 X0dUX0lFUihpKSk7Cj4gKwkJCWVycm9yLT5ndGltcltpXSA9IEk5MTVfUkVBRChHRU44X0dUX0lN UihpKSk7Cj4gKwkJfQo+ICAgCX0gZWxzZSBpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7Cj4gICAJ CWVycm9yLT5pZXIgPSBJOTE1X1JFQUQoREVJRVIpOwo+ICAgCQllcnJvci0+Z3RpZXJbMF0gPSBJ OTE1X1JFQUQoR1RJRVIpOwo+ICsJCWVycm9yLT5ndGltclswXSA9IEk5MTVfUkVBRChHVElNUik7 Cj4gICAJfSBlbHNlIGlmIChJU19HRU4yKGRldikpIHsKPiAgIAkJZXJyb3ItPmllciA9IEk5MTVf UkVBRDE2KElFUik7Cj4gICAJfSBlbHNlIGlmICghSVNfVkFMTEVZVklFVyhkZXYpKSB7Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2lycS5jCj4gaW5kZXggYTQwYThjOWY5NzU4Li43MWJkZDliMzc4NGYgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiBAQCAtMTI1NiwxNyArMTI1NiwxNSBAQCBzdGF0 aWMgdm9pZCBpcm9ubGFrZV9ycHNfY2hhbmdlX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIG5vdGlmeV9yaW5nKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gLQkJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gKwkJCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAtCWlmICghaW50ZWxfcmluZ19p bml0aWFsaXplZChyaW5nKSkKPiArCWlmICghaW50ZWxfZW5naW5lX2luaXRpYWxpemVkKGVuZ2lu ZSkpCj4gICAJCXJldHVybjsKPiAgIAo+IC0JdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0 ZShyaW5nKTsKPiArCXRyYWNlX2k5MTVfZ2VtX3JpbmdfY29tcGxldGUoZW5naW5lKTsKPiArCWF0 b21pY19pbmMoJmVuZ2luZS0+aW50ZXJydXB0cyk7Cj4gICAKPiAtCWlmIChkcm1fY29yZV9jaGVj a19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQo+IC0JCWludGVsX25vdGlmeV9tbWlvX2Zs aXAocmluZyk7Cj4gLQo+IC0Jd2FrZV91cF9hbGwoJnJpbmctPmlycV9xdWV1ZSk7Cj4gKwl3YWtl X3VwX2FsbCgmZW5naW5lLT5pcnFfcXVldWUpOwo+ICAgCWk5MTVfcXVldWVfaGFuZ2NoZWNrKGRl dik7Cj4gICB9Cj4gICAKPiBAQCAtMTU4NCw5ICsxNTgyLDkgQEAgc3RhdGljIHZvaWQgaWxrX2d0 X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICB7Cj4gICAJaWYgKGd0X2lp ciAmCj4gICAJICAgIChHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQgfCBHVF9SRU5ERVJfUElQRUNU TF9OT1RJRllfSU5URVJSVVBUKSkKPiAtCQlub3RpZnlfcmluZyhkZXYsICZkZXZfcHJpdi0+cmlu Z1tSQ1NdKTsKPiArCQlub3RpZnlfcmluZyhkZXYsICZkZXZfcHJpdi0+ZW5naW5lW1JDU10pOwo+ ICAgCWlmIChndF9paXIgJiBJTEtfQlNEX1VTRVJfSU5URVJSVVBUKQo+IC0JCW5vdGlmeV9yaW5n KGRldiwgJmRldl9wcml2LT5yaW5nW1ZDU10pOwo+ICsJCW5vdGlmeV9yaW5nKGRldiwgJmRldl9w cml2LT5lbmdpbmVbVkNTXSk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIHNuYl9ndF9pcnFf aGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IEBAIC0xNTk2LDExICsxNTk0LDExIEBA IHN0YXRpYyB2b2lkIHNuYl9ndF9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ICAgCj4gICAJaWYgKGd0X2lpciAmCj4gICAJICAgIChHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQg fCBHVF9SRU5ERVJfUElQRUNUTF9OT1RJRllfSU5URVJSVVBUKSkKPiAtCQlub3RpZnlfcmluZyhk ZXYsICZkZXZfcHJpdi0+cmluZ1tSQ1NdKTsKPiArCQlub3RpZnlfcmluZyhkZXYsICZkZXZfcHJp di0+ZW5naW5lW1JDU10pOwo+ICAgCWlmIChndF9paXIgJiBHVF9CU0RfVVNFUl9JTlRFUlJVUFQp Cj4gLQkJbm90aWZ5X3JpbmcoZGV2LCAmZGV2X3ByaXYtPnJpbmdbVkNTXSk7Cj4gKwkJbm90aWZ5 X3JpbmcoZGV2LCAmZGV2X3ByaXYtPmVuZ2luZVtWQ1NdKTsKPiAgIAlpZiAoZ3RfaWlyICYgR1Rf QkxUX1VTRVJfSU5URVJSVVBUKQo+IC0JCW5vdGlmeV9yaW5nKGRldiwgJmRldl9wcml2LT5yaW5n W0JDU10pOwo+ICsJCW5vdGlmeV9yaW5nKGRldiwgJmRldl9wcml2LT5lbmdpbmVbQkNTXSk7Cj4g ICAKPiAgIAlpZiAoZ3RfaWlyICYgKEdUX0JMVF9DU19FUlJPUl9JTlRFUlJVUFQgfAo+ICAgCQkg ICAgICBHVF9CU0RfQ1NfRVJST1JfSU5URVJSVVBUIHwKPiBAQCAtMTYzMCw3ICsxNjI4LDcgQEAg c3RhdGljIGlycXJldHVybl90IGdlbjhfZ3RfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiAgIAkJCQkgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ ICAgCQkJCSAgICAgICB1MzIgbWFzdGVyX2N0bCkKPiAgIHsKPiAtCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmc7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gICAJdTMy IHJjcywgYmNzLCB2Y3M7Cj4gICAJdWludDMyX3QgdG1wID0gMDsKPiAgIAlpcnFyZXR1cm5fdCBy ZXQgPSBJUlFfTk9ORTsKPiBAQCAtMTY0MiwxOCArMTY0MCwxOCBAQCBzdGF0aWMgaXJxcmV0dXJu X3QgZ2VuOF9ndF9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCQkJcmV0 ID0gSVJRX0hBTkRMRUQ7Cj4gICAKPiAgIAkJCXJjcyA9IHRtcCA+PiBHRU44X1JDU19JUlFfU0hJ RlQ7Cj4gLQkJCXJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbUkNTXTsKPiArCQkJZW5naW5lID0gJmRl dl9wcml2LT5lbmdpbmVbUkNTXTsKPiAgIAkJCWlmIChyY3MgJiBHVF9SRU5ERVJfVVNFUl9JTlRF UlJVUFQpCj4gLQkJCQlub3RpZnlfcmluZyhkZXYsIHJpbmcpOwo+ICsJCQkJbm90aWZ5X3Jpbmco ZGV2LCBlbmdpbmUpOwo+ICAgCQkJaWYgKHJjcyAmIEdUX0NPTlRFWFRfU1dJVENIX0lOVEVSUlVQ VCkKPiAtCQkJCWludGVsX2V4ZWNsaXN0c19oYW5kbGVfY3R4X2V2ZW50cyhyaW5nKTsKPiArCQkJ CWludGVsX2V4ZWNsaXN0c19pcnFfaGFuZGxlcihlbmdpbmUpOwo+ICAgCj4gICAJCQliY3MgPSB0 bXAgPj4gR0VOOF9CQ1NfSVJRX1NISUZUOwo+IC0JCQlyaW5nID0gJmRldl9wcml2LT5yaW5nW0JD U107Cj4gKwkJCWVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lW0JDU107Cj4gICAJCQlpZiAoYmNz ICYgR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUKQo+IC0JCQkJbm90aWZ5X3JpbmcoZGV2LCByaW5n KTsKPiArCQkJCW5vdGlmeV9yaW5nKGRldiwgZW5naW5lKTsKPiAgIAkJCWlmIChiY3MgJiBHVF9D T05URVhUX1NXSVRDSF9JTlRFUlJVUFQpCj4gLQkJCQlpbnRlbF9leGVjbGlzdHNfaGFuZGxlX2N0 eF9ldmVudHMocmluZyk7Cj4gKwkJCQlpbnRlbF9leGVjbGlzdHNfaXJxX2hhbmRsZXIoZW5naW5l KTsKPiAgIAkJfSBlbHNlCj4gICAJCQlEUk1fRVJST1IoIlRoZSBtYXN0ZXIgY29udHJvbCBpbnRl cnJ1cHQgbGllZCAoR1QwKSFcbiIpOwo+ICAgCX0KPiBAQCAtMTY2NSwxOCArMTY2MywxOCBAQCBz dGF0aWMgaXJxcmV0dXJuX3QgZ2VuOF9ndF9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAo+ICAgCQkJcmV0ID0gSVJRX0hBTkRMRUQ7Cj4gICAKPiAgIAkJCXZjcyA9IHRtcCA+PiBH RU44X1ZDUzFfSVJRX1NISUZUOwo+IC0JCQlyaW5nID0gJmRldl9wcml2LT5yaW5nW1ZDU107Cj4g KwkJCWVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lW1ZDU107Cj4gICAJCQlpZiAodmNzICYgR1Rf UkVOREVSX1VTRVJfSU5URVJSVVBUKQo+IC0JCQkJbm90aWZ5X3JpbmcoZGV2LCByaW5nKTsKPiAr CQkJCW5vdGlmeV9yaW5nKGRldiwgZW5naW5lKTsKPiAgIAkJCWlmICh2Y3MgJiBHVF9DT05URVhU X1NXSVRDSF9JTlRFUlJVUFQpCj4gLQkJCQlpbnRlbF9leGVjbGlzdHNfaGFuZGxlX2N0eF9ldmVu dHMocmluZyk7Cj4gKwkJCQlpbnRlbF9leGVjbGlzdHNfaXJxX2hhbmRsZXIoZW5naW5lKTsKPiAg IAo+ICAgCQkJdmNzID0gdG1wID4+IEdFTjhfVkNTMl9JUlFfU0hJRlQ7Cj4gLQkJCXJpbmcgPSAm ZGV2X3ByaXYtPnJpbmdbVkNTMl07Cj4gKwkJCWVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lW1ZD UzJdOwo+ICAgCQkJaWYgKHZjcyAmIEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCkKPiAtCQkJCW5v dGlmeV9yaW5nKGRldiwgcmluZyk7Cj4gKwkJCQlub3RpZnlfcmluZyhkZXYsIGVuZ2luZSk7Cj4g ICAJCQlpZiAodmNzICYgR1RfQ09OVEVYVF9TV0lUQ0hfSU5URVJSVVBUKQo+IC0JCQkJaW50ZWxf ZXhlY2xpc3RzX2hhbmRsZV9jdHhfZXZlbnRzKHJpbmcpOwo+ICsJCQkJaW50ZWxfZXhlY2xpc3Rz X2lycV9oYW5kbGVyKGVuZ2luZSk7Cj4gICAJCX0gZWxzZQo+ICAgCQkJRFJNX0VSUk9SKCJUaGUg bWFzdGVyIGNvbnRyb2wgaW50ZXJydXB0IGxpZWQgKEdUMSkhXG4iKTsKPiAgIAl9Cj4gQEAgLTE2 OTksMTEgKzE2OTcsMTEgQEAgc3RhdGljIGlycXJldHVybl90IGdlbjhfZ3RfaXJxX2hhbmRsZXIo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCXJldCA9IElSUV9IQU5ETEVEOwo+ICAgCj4g ICAJCQl2Y3MgPSB0bXAgPj4gR0VOOF9WRUNTX0lSUV9TSElGVDsKPiAtCQkJcmluZyA9ICZkZXZf cHJpdi0+cmluZ1tWRUNTXTsKPiArCQkJZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmVbVkVDU107 Cj4gICAJCQlpZiAodmNzICYgR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUKQo+IC0JCQkJbm90aWZ5 X3JpbmcoZGV2LCByaW5nKTsKPiArCQkJCW5vdGlmeV9yaW5nKGRldiwgZW5naW5lKTsKPiAgIAkJ CWlmICh2Y3MgJiBHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQpCj4gLQkJCQlpbnRlbF9leGVj bGlzdHNfaGFuZGxlX2N0eF9ldmVudHMocmluZyk7Cj4gKwkJCQlpbnRlbF9leGVjbGlzdHNfaXJx X2hhbmRsZXIoZW5naW5lKTsKPiAgIAkJfSBlbHNlCj4gICAJCQlEUk1fRVJST1IoIlRoZSBtYXN0 ZXIgY29udHJvbCBpbnRlcnJ1cHQgbGllZCAoR1QzKSFcbiIpOwo+ICAgCX0KPiBAQCAtMjAyMSw3 ICsyMDE5LDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9ycHNfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcG1faWlyKQo+ICAgCj4gICAJaWYgKEhBU19WRUJP WChkZXZfcHJpdi0+ZGV2KSkgewo+ICAgCQlpZiAocG1faWlyICYgUE1fVkVCT1hfVVNFUl9JTlRF UlJVUFQpCj4gLQkJCW5vdGlmeV9yaW5nKGRldl9wcml2LT5kZXYsICZkZXZfcHJpdi0+cmluZ1tW RUNTXSk7Cj4gKwkJCW5vdGlmeV9yaW5nKGRldl9wcml2LT5kZXYsICZkZXZfcHJpdi0+ZW5naW5l W1ZFQ1NdKTsKPiAgIAo+ICAgCQlpZiAocG1faWlyICYgUE1fVkVCT1hfQ1NfRVJST1JfSU5URVJS VVBUKSB7Cj4gICAJCQlpOTE1X2hhbmRsZV9lcnJvcihkZXZfcHJpdi0+ZGV2LCBmYWxzZSwKPiBA QCAtMjY1NCw3ICsyNjUyLDcgQEAgc3RhdGljIGlycXJldHVybl90IGdlbjhfaXJxX2hhbmRsZXIo aW50IGlycSwgdm9pZCAqYXJnKQo+ICAgc3RhdGljIHZvaWQgaTkxNV9lcnJvcl93YWtlX3VwKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAkJCSAgICAgICBib29sIHJlc2V0 X2NvbXBsZXRlZCkKPiAgIHsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gKwlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gICAJaW50IGk7Cj4gICAKPiAgIAkvKgo+ IEBAIC0yNjY1LDggKzI2NjMsOCBAQCBzdGF0aWMgdm9pZCBpOTE1X2Vycm9yX3dha2VfdXAoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgCSAqLwo+ICAgCj4gICAJLyogV2Fr ZSB1cCBfX3dhaXRfc2Vxbm8sIHBvdGVudGlhbGx5IGhvbGRpbmcgZGV2LT5zdHJ1Y3RfbXV0ZXgu ICovCj4gLQlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2LCBpKQo+IC0JCXdha2VfdXBfYWxs KCZyaW5nLT5pcnFfcXVldWUpOwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYs IGkpCj4gKwkJd2FrZV91cF9hbGwoJmVuZ2luZS0+aXJxX3F1ZXVlKTsKPiAgIAo+ICAgCS8qIFdh a2UgdXAgaW50ZWxfY3J0Y193YWl0X2Zvcl9wZW5kaW5nX2ZsaXBzLCBob2xkaW5nIGNydGMtPm11 dGV4LiAqLwo+ICAgCXdha2VfdXBfYWxsKCZkZXZfcHJpdi0+cGVuZGluZ19mbGlwX3F1ZXVlKTsK PiBAQCAtMjcxMCw3ICsyNzA4LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9lcnJvcl93b3JrX2Z1bmMo c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAgCSAqIHRoZSByZXNldCBpbi1wcm9ncmVzcyBi aXQgaXMgb25seSBldmVyIHNldCBieSBjb2RlIG91dHNpZGUgb2YgdGhpcwo+ICAgCSAqIHdvcmsg d2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBhbnkgb3RoZXIgcmFjZXMuCj4gICAJICovCj4g LQlpZiAoaTkxNV9yZXNldF9pbl9wcm9ncmVzcyhlcnJvcikgJiYgIWk5MTVfdGVybWluYWxseV93 ZWRnZWQoZXJyb3IpKSB7Cj4gKwlpZiAoaTkxNV9yZWNvdmVyeV9wZW5kaW5nKGVycm9yKSkgewo+ ICAgCQlEUk1fREVCVUdfRFJJVkVSKCJyZXNldHRpbmcgY2hpcFxuIik7Cj4gICAJCWtvYmplY3Rf dWV2ZW50X2VudigmZGV2LT5wcmltYXJ5LT5rZGV2LT5rb2JqLCBLT0JKX0NIQU5HRSwKPiAgIAkJ CQkgICByZXNldF9ldmVudCk7Cj4gQEAgLTI3NDYsOSArMjc0NCw3IEBAIHN0YXRpYyB2b2lkIGk5 MTVfZXJyb3Jfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgIAkJCSAqIHVw ZGF0ZXMgYmVmb3JlCj4gICAJCQkgKiB0aGUgY291bnRlciBpbmNyZW1lbnQuCj4gICAJCQkgKi8K PiAtCQkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7Cj4gLQkJCWF0b21pY19pbmMoJmRldl9wcml2 LT5ncHVfZXJyb3IucmVzZXRfY291bnRlcik7Cj4gLQo+ICsJCQlzbXBfbWJfX2FmdGVyX2F0b21p YygpOwo+ICAgCQkJa29iamVjdF91ZXZlbnRfZW52KCZkZXYtPnByaW1hcnktPmtkZXYtPmtvYmos Cj4gICAJCQkJCSAgIEtPQkpfQ0hBTkdFLCByZXNldF9kb25lX2V2ZW50KTsKPiAgIAkJfSBlbHNl IHsKPiBAQCAtMzAzMywyNCArMzAyOSwyOCBAQCBzdGF0aWMgdm9pZCBnZW44X2Rpc2FibGVfdmJs YW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQo+ICAgCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwo+ICAgfQo+ICAgCj4gLXN0 YXRpYyB1MzIKPiAtcmluZ19sYXN0X3NlcW5vKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcp Cj4gLXsKPiAtCXJldHVybiBsaXN0X2VudHJ5KHJpbmctPnJlcXVlc3RfbGlzdC5wcmV2LAo+IC0J CQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCwgbGlzdCktPnNlcW5vOwo+IC19Cj4gLQo+ ICAgc3RhdGljIGJvb2wKPiAtcmluZ19pZGxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcs IHUzMiBzZXFubykKPiArZW5naW5lX2lkbGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICAgewo+IC0JcmV0dXJuIChsaXN0X2VtcHR5KCZyaW5nLT5yZXF1ZXN0X2xpc3QpIHx8Cj4g LQkJaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIHJpbmdfbGFzdF9zZXFubyhyaW5nKSkpOwo+ICsJ Ym9vbCByZXQgPSB0cnVlOwo+ICsKPiArCXNwaW5fbG9jaygmZW5naW5lLT5sb2NrKTsKPiArCWlm IChlbmdpbmUtPmxhc3RfcmVxdWVzdCkgewo+ICsJCS8qIHBva2UgdG8gbWFrZSBzdXJlIHdlIHJl dGlyZSBiZWZvcmUgd2Ugd2FrZSB1cCBhZ2FpbiAqLwo+ICsJCXF1ZXVlX2RlbGF5ZWRfd29yayhl bmdpbmUtPmk5MTUtPndxLAo+ICsJCQkJICAgJmVuZ2luZS0+aTkxNS0+bW0ucmV0aXJlX3dvcmss Cj4gKwkJCQkgICByb3VuZF9qaWZmaWVzX3VwX3JlbGF0aXZlKERSTV9JOTE1X0hBTkdDSEVDS19K SUZGSUVTLzIpKTsKPiArCQlyZXQgPSBfX2k5MTVfcmVxdWVzdF9jb21wbGV0ZV9fd2EoZW5naW5l LT5sYXN0X3JlcXVlc3QpOwo+ICsJfQo+ICsJc3Bpbl91bmxvY2soJmVuZ2luZS0+bG9jayk7Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGJvb2wKPiAtaXBlaHJfaXNf c2VtYXBob3JlX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGlwZWhyKQo+ICtpcGVo cl9pc19zZW1hcGhvcmVfd2FpdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTMyIGlw ZWhyKQo+ICAgewo+IC0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDgpIHsKPiArCWlmIChJ TlRFTF9JTkZPKGk5MTUpLT5nZW4gPj0gOCkgewo+ICAgCQlyZXR1cm4gKGlwZWhyID4+IDIzKSA9 PSAweDFjOwo+ICAgCX0gZWxzZSB7Cj4gICAJCWlwZWhyICY9IH5NSV9TRU1BUEhPUkVfU1lOQ19N QVNLOwo+IEBAIC0zMDYwLDQ4ICszMDYwLDU0IEBAIGlwZWhyX2lzX3NlbWFwaG9yZV93YWl0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBpcGVocikKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgo+IC1zZW1hcGhvcmVfd2FpdF90b19zaWduYWxsZXJfcmlu ZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLCB1MzIgaXBlaHIsIHU2NCBvZmZzZXQpCj4g K3NlbWFwaG9yZV93YWl0X3RvX3NpZ25hbGxlcl9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLCB1MzIgaXBlaHIsIHU2NCBvZmZzZXQpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5nLT5kZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ICAgCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnNpZ25hbGxlcjsKPiAgIAlpbnQgaTsKPiAgIAo+ICAgCWlmIChJTlRF TF9JTkZPKGRldl9wcml2LT5kZXYpLT5nZW4gPj0gOCkgewo+IC0JCWZvcl9lYWNoX3Jpbmcoc2ln bmFsbGVyLCBkZXZfcHJpdiwgaSkgewo+IC0JCQlpZiAocmluZyA9PSBzaWduYWxsZXIpCj4gKwkJ Zm9yX2VhY2hfZW5naW5lKHNpZ25hbGxlciwgZGV2X3ByaXYsIGkpIHsKPiArCQkJaWYgKGVuZ2lu ZSA9PSBzaWduYWxsZXIpCj4gICAJCQkJY29udGludWU7Cj4gICAKPiAtCQkJaWYgKG9mZnNldCA9 PSBzaWduYWxsZXItPnNlbWFwaG9yZS5zaWduYWxfZ2d0dFtyaW5nLT5pZF0pCj4gKwkJCWlmIChv ZmZzZXQgPT0gR0VOOF9TRU1BUEhPUkVfT0ZGU0VUKGRldl9wcml2LCBzaWduYWxsZXItPmlkLCBl bmdpbmUtPmlkKSkKPiAgIAkJCQlyZXR1cm4gc2lnbmFsbGVyOwo+ICAgCQl9Cj4gICAJfSBlbHNl IHsKPiAgIAkJdTMyIHN5bmNfYml0cyA9IGlwZWhyICYgTUlfU0VNQVBIT1JFX1NZTkNfTUFTSzsK PiAgIAo+IC0JCWZvcl9lYWNoX3Jpbmcoc2lnbmFsbGVyLCBkZXZfcHJpdiwgaSkgewo+IC0JCQlp ZihyaW5nID09IHNpZ25hbGxlcikKPiArCQlmb3JfZWFjaF9lbmdpbmUoc2lnbmFsbGVyLCBkZXZf cHJpdiwgaSkgewo+ICsJCQlpZihlbmdpbmUgPT0gc2lnbmFsbGVyKQo+ICAgCQkJCWNvbnRpbnVl Owo+ICAgCj4gLQkJCWlmIChzeW5jX2JpdHMgPT0gc2lnbmFsbGVyLT5zZW1hcGhvcmUubWJveC53 YWl0W3JpbmctPmlkXSkKPiArCQkJaWYgKHN5bmNfYml0cyA9PSBzaWduYWxsZXItPnNlbWFwaG9y ZS5tYm94LndhaXRbZW5naW5lLT5pZF0pCj4gICAJCQkJcmV0dXJuIHNpZ25hbGxlcjsKPiAgIAkJ fQo+ICAgCX0KPiAgIAo+ICAgCURSTV9FUlJPUigiTm8gc2lnbmFsbGVyIHJpbmcgZm91bmQgZm9y IHJpbmcgJWksIGlwZWhyIDB4JTA4eCwgb2Zmc2V0IDB4JTAxNmxseFxuIiwKPiAtCQkgIHJpbmct PmlkLCBpcGVociwgb2Zmc2V0KTsKPiArCQkgIGVuZ2luZS0+aWQsIGlwZWhyLCBvZmZzZXQpOwo+ ICAgCj4gICAJcmV0dXJuIE5VTEw7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICoKPiAtc2VtYXBob3JlX3dhaXRzX2ZvcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nLCB1MzIgKnNlcW5vKQo+ICtzZW1hcGhvcmVfd2FpdHNfZm9yKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSwgdTMyICpzZXFubykKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gKwlzdHJ1Y3QgaW50ZWxf cmluZ2J1ZmZlciAqcmluZzsKPiAgIAl1MzIgY21kLCBpcGVociwgaGVhZDsKPiAgIAl1NjQgb2Zm c2V0ID0gMDsKPiAgIAlpbnQgaSwgYmFja3dhcmRzOwo+ICAgCj4gLQlpcGVociA9IEk5MTVfUkVB RChSSU5HX0lQRUhSKHJpbmctPm1taW9fYmFzZSkpOwo+IC0JaWYgKCFpcGVocl9pc19zZW1hcGhv cmVfd2FpdChyaW5nLT5kZXYsIGlwZWhyKSkKPiArCWlwZWhyID0gSTkxNV9SRUFEKFJJTkdfSVBF SFIoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiArCWlmICghaXBlaHJfaXNfc2VtYXBob3JlX3dhaXQo ZW5naW5lLT5pOTE1LCBpcGVocikpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJLyogWFhYIGV4 ZWNsaXN0cyAqLwo+ICsJcmluZyA9IGVuZ2luZS0+ZGVmYXVsdF9jb250ZXh0LT5yaW5nW1JDU10u cmluZzsKPiArCWlmIChyaW5nID09IE5VTEwpCj4gICAJCXJldHVybiBOVUxMOwo+ICAgCj4gICAJ LyoKPiBAQCAtMzExMiwxOSArMzExOCwxOSBAQCBzZW1hcGhvcmVfd2FpdHNfZm9yKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnJpbmcsIHUzMiAqc2Vxbm8pCj4gICAJICogcG9pbnQgYXQgYXQgYmF0 Y2gsIGFuZCBzZW1hcGhvcmVzIGFyZSBhbHdheXMgZW1pdHRlZCBpbnRvIHRoZQo+ICAgCSAqIHJp bmdidWZmZXIgaXRzZWxmLgo+ICAgCSAqLwo+IC0JaGVhZCA9IEk5MTVfUkVBRF9IRUFEKHJpbmcp ICYgSEVBRF9BRERSOwo+IC0JYmFja3dhcmRzID0gKElOVEVMX0lORk8ocmluZy0+ZGV2KS0+Z2Vu ID49IDgpID8gNSA6IDQ7Cj4gKwloZWFkID0gSTkxNV9SRUFEX0hFQUQoZW5naW5lKSAmIEhFQURf QUREUjsKPiArCWJhY2t3YXJkcyA9IChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49IDgpID8g NSA6IDQ7Cj4gICAKPiAgIAlmb3IgKGkgPSBiYWNrd2FyZHM7IGk7IC0taSkgewo+ICAgCQkvKgo+ ICAgCQkgKiBCZSBwYXJhbm9pZCBhbmQgcHJlc3VtZSB0aGUgaHcgaGFzIGdvbmUgb2ZmIGludG8g dGhlIHdpbGQgLQo+IC0JCSAqIG91ciByaW5nIGlzIHNtYWxsZXIgdGhhbiB3aGF0IHRoZSBoYXJk d2FyZSAoYW5kIGhlbmNlCj4gKwkJICogb3VyIGVuZ2luZSBpcyBzbWFsbGVyIHRoYW4gd2hhdCB0 aGUgaGFyZHdhcmUgKGFuZCBoZW5jZQo+ICAgCQkgKiBIRUFEX0FERFIpIGFsbG93cy4gQWxzbyBo YW5kbGVzIHdyYXAtYXJvdW5kLgo+ICAgCQkgKi8KPiAtCQloZWFkICY9IHJpbmctPmJ1ZmZlci0+ c2l6ZSAtIDE7Cj4gKwkJaGVhZCAmPSByaW5nLT5zaXplIC0gMTsKPiAgIAo+ICAgCQkvKiBUaGlz IGhlcmUgc2VlbXMgdG8gYmxvdyB1cCAqLwo+IC0JCWNtZCA9IGlvcmVhZDMyKHJpbmctPmJ1ZmZl ci0+dmlydHVhbF9zdGFydCArIGhlYWQpOwo+ICsJCWNtZCA9IGlvcmVhZDMyKHJpbmctPnZpcnR1 YWxfc3RhcnQgKyBoZWFkKTsKPiAgIAkJaWYgKGNtZCA9PSBpcGVocikKPiAgIAkJCWJyZWFrOwo+ ICAgCj4gQEAgLTMxMzQsMzIgKzMxNDAsMzcgQEAgc2VtYXBob3JlX3dhaXRzX2ZvcihzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLCB1MzIgKnNlcW5vKQo+ICAgCWlmICghaSkKPiAgIAkJcmV0 dXJuIE5VTEw7Cj4gICAKPiAtCSpzZXFubyA9IGlvcmVhZDMyKHJpbmctPmJ1ZmZlci0+dmlydHVh bF9zdGFydCArIGhlYWQgKyA0KSArIDE7Cj4gLQlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5n ZW4gPj0gOCkgewo+IC0JCW9mZnNldCA9IGlvcmVhZDMyKHJpbmctPmJ1ZmZlci0+dmlydHVhbF9z dGFydCArIGhlYWQgKyAxMik7Cj4gKwkqc2Vxbm8gPSBpb3JlYWQzMihyaW5nLT52aXJ0dWFsX3N0 YXJ0ICsgaGVhZCArIDQpICsgMTsKPiArCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49 IDgpIHsKPiArCQlvZmZzZXQgPSBpb3JlYWQzMihyaW5nLT52aXJ0dWFsX3N0YXJ0ICsgaGVhZCAr IDEyKTsKPiAgIAkJb2Zmc2V0IDw8PSAzMjsKPiAtCQlvZmZzZXQgPSBpb3JlYWQzMihyaW5nLT5i dWZmZXItPnZpcnR1YWxfc3RhcnQgKyBoZWFkICsgOCk7Cj4gKwkJb2Zmc2V0ID0gaW9yZWFkMzIo cmluZy0+dmlydHVhbF9zdGFydCArIGhlYWQgKyA4KTsKPiAgIAl9Cj4gLQlyZXR1cm4gc2VtYXBo b3JlX3dhaXRfdG9fc2lnbmFsbGVyX3JpbmcocmluZywgaXBlaHIsIG9mZnNldCk7Cj4gKwlyZXR1 cm4gc2VtYXBob3JlX3dhaXRfdG9fc2lnbmFsbGVyX2VuZ2luZShlbmdpbmUsIGlwZWhyLCBvZmZz ZXQpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgc2VtYXBob3JlX3Bhc3NlZChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nKQo+ICtzdGF0aWMgaW50IHNlbWFwaG9yZV9wYXNzZWQoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiAgIAlzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICpzaWduYWxsZXI7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnE7Cj4gICAJ dTMyIHNlcW5vOwo+ICAgCj4gLQlyaW5nLT5oYW5nY2hlY2suZGVhZGxvY2srKzsKPiArCWVuZ2lu ZS0+aGFuZ2NoZWNrLmRlYWRsb2NrKys7Cj4gICAKPiAtCXNpZ25hbGxlciA9IHNlbWFwaG9yZV93 YWl0c19mb3IocmluZywgJnNlcW5vKTsKPiArCWlmIChlbmdpbmUtPnNlbWFwaG9yZS53YWl0ID09 IE5VTEwpCj4gKwkJcmV0dXJuIC0xOwo+ICsKPiArCXNpZ25hbGxlciA9IHNlbWFwaG9yZV93YWl0 c19mb3IoZW5naW5lLCAmc2Vxbm8pOwo+ICAgCWlmIChzaWduYWxsZXIgPT0gTlVMTCkKPiAgIAkJ cmV0dXJuIC0xOwo+ICAgCj4gICAJLyogUHJldmVudCBwYXRob2xvZ2ljYWwgcmVjdXJzaW9uIGR1 ZSB0byBkcml2ZXIgYnVncyAqLwo+IC0JaWYgKHNpZ25hbGxlci0+aGFuZ2NoZWNrLmRlYWRsb2Nr ID49IEk5MTVfTlVNX1JJTkdTKQo+ICsJaWYgKHNpZ25hbGxlci0+aGFuZ2NoZWNrLmRlYWRsb2Nr ID49IEk5MTVfTlVNX0VOR0lORVMpCj4gICAJCXJldHVybiAtMTsKPiAgIAo+IC0JaWYgKGk5MTVf c2Vxbm9fcGFzc2VkKHNpZ25hbGxlci0+Z2V0X3NlcW5vKHNpZ25hbGxlciwgZmFsc2UpLCBzZXFu bykpCj4gKwlycSA9IGludGVsX2VuZ2luZV9zZXFub190b19yZXF1ZXN0KGVuZ2luZSwgc2Vxbm8p Owo+ICsJaWYgKHJxID09IE5VTEwgfHwgaTkxNV9yZXF1ZXN0X2NvbXBsZXRlKHJxKSkKPiAgIAkJ cmV0dXJuIDE7Cj4gICAKPiAgIAkvKiBjdXJzb3J5IGNoZWNrIGZvciBhbiB1bmtpY2thYmxlIGRl YWRsb2NrICovCj4gQEAgLTMxNzIsMzAgKzMxODMsMjkgQEAgc3RhdGljIGludCBzZW1hcGhvcmVf cGFzc2VkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gICAKPiAgIHN0YXRpYyB2b2lk IHNlbWFwaG9yZV9jbGVhcl9kZWFkbG9ja3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ICAgewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZzsKPiArCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAgIAlpbnQgaTsKPiAgIAo+IC0JZm9yX2VhY2hfcmlu ZyhyaW5nLCBkZXZfcHJpdiwgaSkKPiAtCQlyaW5nLT5oYW5nY2hlY2suZGVhZGxvY2sgPSAwOwo+ ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIGkpCj4gKwkJZW5naW5lLT5oYW5n Y2hlY2suZGVhZGxvY2sgPSAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBlbnVtIGludGVsX3Jpbmdf aGFuZ2NoZWNrX2FjdGlvbgo+IC1yaW5nX3N0dWNrKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcsIHU2NCBhY3RoZCkKPiArc3RhdGljIGVudW0gaW50ZWxfZW5naW5lX2hhbmdjaGVja19hY3Rp b24KPiArZW5naW5lX3N0dWNrKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTY0IGFj dGhkKQo+ICAgewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKPiAtCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gICAJdTMy IHRtcDsKPiAgIAo+IC0JaWYgKGFjdGhkICE9IHJpbmctPmhhbmdjaGVjay5hY3RoZCkgewo+IC0J CWlmIChhY3RoZCA+IHJpbmctPmhhbmdjaGVjay5tYXhfYWN0aGQpIHsKPiAtCQkJcmluZy0+aGFu Z2NoZWNrLm1heF9hY3RoZCA9IGFjdGhkOwo+ICsJaWYgKGFjdGhkICE9IGVuZ2luZS0+aGFuZ2No ZWNrLmFjdGhkKSB7Cj4gKwkJaWYgKGFjdGhkID4gZW5naW5lLT5oYW5nY2hlY2subWF4X2FjdGhk KSB7Cj4gKwkJCWVuZ2luZS0+aGFuZ2NoZWNrLm1heF9hY3RoZCA9IGFjdGhkOwo+ICAgCQkJcmV0 dXJuIEhBTkdDSEVDS19BQ1RJVkU7Cj4gICAJCX0KPiAgIAo+ICAgCQlyZXR1cm4gSEFOR0NIRUNL X0FDVElWRV9MT09QOwo+ICAgCX0KPiAgIAo+IC0JaWYgKElTX0dFTjIoZGV2KSkKPiArCWlmIChJ U19HRU4yKGRldl9wcml2KSkKPiAgIAkJcmV0dXJuIEhBTkdDSEVDS19IVU5HOwo+ICAgCj4gICAJ LyogSXMgdGhlIGNoaXAgaGFuZ2luZyBvbiBhIFdBSVRfRk9SX0VWRU5UPwo+IEBAIC0zMjAzLDI0 ICszMjEzLDI0IEBAIHJpbmdfc3R1Y2soc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgdTY0 IGFjdGhkKQo+ICAgCSAqIGFuZCBicmVhayB0aGUgaGFuZy4gVGhpcyBzaG91bGQgd29yayBvbgo+ ICAgCSAqIGFsbCBidXQgdGhlIHNlY29uZCBnZW5lcmF0aW9uIGNoaXBzZXRzLgo+ICAgCSAqLwo+ IC0JdG1wID0gSTkxNV9SRUFEX0NUTChyaW5nKTsKPiArCXRtcCA9IEk5MTVfUkVBRF9DVEwoZW5n aW5lKTsKPiAgIAlpZiAodG1wICYgUklOR19XQUlUKSB7Cj4gLQkJaTkxNV9oYW5kbGVfZXJyb3Io ZGV2LCBmYWxzZSwKPiArCQlpOTE1X2hhbmRsZV9lcnJvcihkZXZfcHJpdi0+ZGV2LCBmYWxzZSwK PiAgIAkJCQkgICJLaWNraW5nIHN0dWNrIHdhaXQgb24gJXMiLAo+IC0JCQkJICByaW5nLT5uYW1l KTsKPiAtCQlJOTE1X1dSSVRFX0NUTChyaW5nLCB0bXApOwo+ICsJCQkJICBlbmdpbmUtPm5hbWUp Owo+ICsJCUk5MTVfV1JJVEVfQ1RMKGVuZ2luZSwgdG1wKTsKPiAgIAkJcmV0dXJuIEhBTkdDSEVD S19LSUNLOwo+ICAgCX0KPiAgIAo+IC0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDYgJiYg dG1wICYgUklOR19XQUlUX1NFTUFQSE9SRSkgewo+IC0JCXN3aXRjaCAoc2VtYXBob3JlX3Bhc3Nl ZChyaW5nKSkgewo+ICsJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4gPj0gNiAmJiB0bXAg JiBSSU5HX1dBSVRfU0VNQVBIT1JFKSB7Cj4gKwkJc3dpdGNoIChzZW1hcGhvcmVfcGFzc2VkKGVu Z2luZSkpIHsKPiAgIAkJZGVmYXVsdDoKPiAgIAkJCXJldHVybiBIQU5HQ0hFQ0tfSFVORzsKPiAg IAkJY2FzZSAxOgo+IC0JCQlpOTE1X2hhbmRsZV9lcnJvcihkZXYsIGZhbHNlLAo+ICsJCQlpOTE1 X2hhbmRsZV9lcnJvcihkZXZfcHJpdi0+ZGV2LCBmYWxzZSwKPiAgIAkJCQkJICAiS2lja2luZyBz dHVjayBzZW1hcGhvcmUgb24gJXMiLAo+IC0JCQkJCSAgcmluZy0+bmFtZSk7Cj4gLQkJCUk5MTVf V1JJVEVfQ1RMKHJpbmcsIHRtcCk7Cj4gKwkJCQkJICBlbmdpbmUtPm5hbWUpOwo+ICsJCQlJOTE1 X1dSSVRFX0NUTChlbmdpbmUsIHRtcCk7Cj4gICAJCQlyZXR1cm4gSEFOR0NIRUNLX0tJQ0s7Cj4g ICAJCWNhc2UgMDoKPiAgIAkJCXJldHVybiBIQU5HQ0hFQ0tfV0FJVDsKPiBAQCAtMzIzMiw3ICsz MjQyLDcgQEAgcmluZ19zdHVjayhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLCB1NjQgYWN0 aGQpCj4gICAKPiAgIC8qKgo+ICAgICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY2hpcCBoYXNu J3QgcmVwb3J0ZWQgYmFjayB3aXRoIGNvbXBsZXRlZAo+IC0gKiBiYXRjaGJ1ZmZlcnMgaW4gYSBs b25nIHRpbWUuIFdlIGtlZXAgdHJhY2sgcGVyIHJpbmcgc2Vxbm8gcHJvZ3Jlc3MgYW5kCj4gKyAq IGJhdGNoYnVmZmVycyBpbiBhIGxvbmcgdGltZS4gV2Uga2VlcCB0cmFjayBwZXIgZW5naW5lIHNl cW5vIHByb2dyZXNzIGFuZAo+ICAgICogaWYgdGhlcmUgYXJlIG5vIHByb2dyZXNzLCBoYW5nY2hl Y2sgc2NvcmUgZm9yIHRoYXQgcmluZyBpcyBpbmNyZWFzZWQuCj4gICAgKiBGdXJ0aGVyLCBhY3Ro ZCBpcyBpbnNwZWN0ZWQgdG8gc2VlIGlmIHRoZSByaW5nIGlzIHN0dWNrLiBPbiBzdHVjayBjYXNl Cj4gICAgKiB3ZSBraWNrIHRoZSByaW5nLiBJZiB3ZSBzZWUgbm8gcHJvZ3Jlc3Mgb24gdGhyZWUg c3Vic2VxdWVudCBjYWxscwo+IEBAIC0zMjQwLDEyICszMjUwLDExIEBAIHJpbmdfc3R1Y2soc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgdTY0IGFjdGhkKQo+ICAgICovCj4gICBzdGF0aWMg dm9pZCBpOTE1X2hhbmdjaGVja19lbGFwc2VkKHVuc2lnbmVkIGxvbmcgZGF0YSkKPiAgIHsKPiAt CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRybV9kZXZpY2UgKilkYXRhOwo+IC0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAt CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKilkYXRhOwo+ICsJc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICAgCWludCBpOwo+ICAgCWludCBidXN5X2NvdW50 ID0gMCwgcmluZ3NfaHVuZyA9IDA7Cj4gLQlib29sIHN0dWNrW0k5MTVfTlVNX1JJTkdTXSA9IHsg MCB9Owo+ICsJYm9vbCBzdHVja1tJOTE1X05VTV9FTkdJTkVTXSA9IHsgMCB9Owo+ICAgI2RlZmlu ZSBCVVNZIDEKPiAgICNkZWZpbmUgS0lDSyA1Cj4gICAjZGVmaW5lIEhVTkcgMjAKPiBAQCAtMzI1 MywxMDQgKzMyNjIsMTA4IEBAIHN0YXRpYyB2b2lkIGk5MTVfaGFuZ2NoZWNrX2VsYXBzZWQodW5z aWduZWQgbG9uZyBkYXRhKQo+ICAgCWlmICghaTkxNS5lbmFibGVfaGFuZ2NoZWNrKQo+ICAgCQly ZXR1cm47Cj4gICAKPiAtCWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3ByaXYsIGkpIHsKPiArCWZv cl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpKSB7Cj4gICAJCXU2NCBhY3RoZDsKPiAg IAkJdTMyIHNlcW5vOwo+ICsJCXUzMiBpbnRlcnJ1cHRzOwo+ICAgCQlib29sIGJ1c3kgPSB0cnVl Owo+ICAgCj4gICAJCXNlbWFwaG9yZV9jbGVhcl9kZWFkbG9ja3MoZGV2X3ByaXYpOwo+ICAgCj4g LQkJc2Vxbm8gPSByaW5nLT5nZXRfc2Vxbm8ocmluZywgZmFsc2UpOwo+IC0JCWFjdGhkID0gaW50 ZWxfcmluZ19nZXRfYWN0aXZlX2hlYWQocmluZyk7Cj4gLQo+IC0JCWlmIChyaW5nLT5oYW5nY2hl Y2suc2Vxbm8gPT0gc2Vxbm8pIHsKPiAtCQkJaWYgKHJpbmdfaWRsZShyaW5nLCBzZXFubykpIHsK PiAtCQkJCXJpbmctPmhhbmdjaGVjay5hY3Rpb24gPSBIQU5HQ0hFQ0tfSURMRTsKPiAtCj4gLQkJ CQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcmluZy0+aXJxX3F1ZXVlKSkgewo+IC0JCQkJCS8qIElz c3VlIGEgd2FrZS11cCB0byBjYXRjaCBzdHVjayBoL3cuICovCj4gLQkJCQkJaWYgKCF0ZXN0X2Fu ZF9zZXRfYml0KHJpbmctPmlkLCAmZGV2X3ByaXYtPmdwdV9lcnJvci5taXNzZWRfaXJxX3Jpbmdz KSkgewo+IC0JCQkJCQlpZiAoIShkZXZfcHJpdi0+Z3B1X2Vycm9yLnRlc3RfaXJxX3JpbmdzICYg aW50ZWxfcmluZ19mbGFnKHJpbmcpKSkKPiAtCQkJCQkJCURSTV9FUlJPUigiSGFuZ2NoZWNrIHRp bWVyIGVsYXBzZWQuLi4gJXMgaWRsZVxuIiwKPiAtCQkJCQkJCQkgIHJpbmctPm5hbWUpOwo+IC0J CQkJCQllbHNlCj4gLQkJCQkJCQlEUk1fSU5GTygiRmFrZSBtaXNzZWQgaXJxIG9uICVzXG4iLAo+ IC0JCQkJCQkJCSByaW5nLT5uYW1lKTsKPiAtCQkJCQkJd2FrZV91cF9hbGwoJnJpbmctPmlycV9x dWV1ZSk7Cj4gLQkJCQkJfQo+IC0JCQkJCS8qIFNhZmVndWFyZCBhZ2FpbnN0IGRyaXZlciBmYWls dXJlICovCj4gLQkJCQkJcmluZy0+aGFuZ2NoZWNrLnNjb3JlICs9IEJVU1k7Cj4gLQkJCQl9IGVs c2UKPiAtCQkJCQlidXN5ID0gZmFsc2U7Cj4gKwkJYWN0aGQgPSBpbnRlbF9lbmdpbmVfZ2V0X2Fj dGl2ZV9oZWFkKGVuZ2luZSk7Cj4gKwkJc2Vxbm8gPSBlbmdpbmUtPmdldF9zZXFubyhlbmdpbmUp Owo+ICsJCWludGVycnVwdHMgPSBhdG9taWNfcmVhZCgmZW5naW5lLT5pbnRlcnJ1cHRzKTsKPiAr Cj4gKwkJaWYgKGVuZ2luZV9pZGxlKGVuZ2luZSkpIHsKPiArCQkJaWYgKHdhaXRxdWV1ZV9hY3Rp dmUoJmVuZ2luZS0+aXJxX3F1ZXVlKSkgewo+ICsJCQkJLyogSXNzdWUgYSB3YWtlLXVwIHRvIGNh dGNoIHN0dWNrIGgvdy4gKi8KPiArCQkJCWlmIChlbmdpbmUtPmhhbmdjaGVjay5hY3Rpb24gPT0g SEFOR0NIRUNLX0lETEVfV0FJVEVSUyAmJgo+ICsJCQkJCQllbmdpbmUtPmhhbmdjaGVjay5pbnRl cnJ1cHRzID09IGludGVycnVwdHMgJiYKPiArCQkJCQkJIXRlc3RfYW5kX3NldF9iaXQoZW5naW5l LT5pZCwgJmRldl9wcml2LT5ncHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncykpIHsKPiArCQkJCQlp ZiAoIShkZXZfcHJpdi0+Z3B1X2Vycm9yLnRlc3RfaXJxX3JpbmdzICYgaW50ZWxfZW5naW5lX2Zs YWcoZW5naW5lKSkpCj4gKwkJCQkJCURSTV9FUlJPUigiSGFuZ2NoZWNrIHRpbWVyIGVsYXBzZWQu Li4gJXMgaWRsZVxuIiwKPiArCQkJCQkJCQllbmdpbmUtPm5hbWUpOwo+ICsJCQkJCWVsc2UKPiAr CQkJCQkJRFJNX0lORk8oIkZha2UgbWlzc2VkIGlycSBvbiAlc1xuIiwKPiArCQkJCQkJCQllbmdp bmUtPm5hbWUpOwo+ICsJCQkJCXdha2VfdXBfYWxsKCZlbmdpbmUtPmlycV9xdWV1ZSk7Cj4gKwkJ CQl9Cj4gKwo+ICsJCQkJLyogU2FmZWd1YXJkIGFnYWluc3QgZHJpdmVyIGZhaWx1cmUgKi8KPiAr CQkJCWVuZ2luZS0+aGFuZ2NoZWNrLnNjb3JlICs9IEJVU1k7Cj4gKwkJCQllbmdpbmUtPmhhbmdj aGVjay5hY3Rpb24gPSBIQU5HQ0hFQ0tfSURMRV9XQUlURVJTOwo+ICAgCQkJfSBlbHNlIHsKPiAt CQkJCS8qIFdlIGFsd2F5cyBpbmNyZW1lbnQgdGhlIGhhbmdjaGVjayBzY29yZQo+IC0JCQkJICog aWYgdGhlIHJpbmcgaXMgYnVzeSBhbmQgc3RpbGwgcHJvY2Vzc2luZwo+IC0JCQkJICogdGhlIHNh bWUgcmVxdWVzdCwgc28gdGhhdCBubyBzaW5nbGUgcmVxdWVzdAo+IC0JCQkJICogY2FuIHJ1biBp bmRlZmluaXRlbHkgKHN1Y2ggYXMgYSBjaGFpbiBvZgo+IC0JCQkJICogYmF0Y2hlcykuIFRoZSBv bmx5IHRpbWUgd2UgZG8gbm90IGluY3JlbWVudAo+IC0JCQkJICogdGhlIGhhbmdjaGVjayBzY29y ZSBvbiB0aGlzIHJpbmcsIGlmIHRoaXMKPiAtCQkJCSAqIHJpbmcgaXMgaW4gYSBsZWdpdGltYXRl IHdhaXQgZm9yIGFub3RoZXIKPiAtCQkJCSAqIHJpbmcuIEluIHRoYXQgY2FzZSB0aGUgd2FpdGlu ZyByaW5nIGlzIGEKPiAtCQkJCSAqIHZpY3RpbSBhbmQgd2Ugd2FudCB0byBiZSBzdXJlIHdlIGNh dGNoIHRoZQo+IC0JCQkJICogcmlnaHQgY3VscHJpdC4gVGhlbiBldmVyeSB0aW1lIHdlIGRvIGtp Y2sKPiAtCQkJCSAqIHRoZSByaW5nLCBhZGQgYSBzbWFsbCBpbmNyZW1lbnQgdG8gdGhlCj4gLQkJ CQkgKiBzY29yZSBzbyB0aGF0IHdlIGNhbiBjYXRjaCBhIGJhdGNoIHRoYXQgaXMKPiAtCQkJCSAq IGJlaW5nIHJlcGVhdGVkbHkga2lja2VkIGFuZCBzbyByZXNwb25zaWJsZQo+IC0JCQkJICogZm9y IHN0YWxsaW5nIHRoZSBtYWNoaW5lLgo+IC0JCQkJICovCj4gLQkJCQlyaW5nLT5oYW5nY2hlY2su YWN0aW9uID0gcmluZ19zdHVjayhyaW5nLAo+IC0JCQkJCQkJCSAgICBhY3RoZCk7Cj4gLQo+IC0J CQkJc3dpdGNoIChyaW5nLT5oYW5nY2hlY2suYWN0aW9uKSB7Cj4gKwkJCQlidXN5ID0gZmFsc2U7 Cj4gKwkJCQllbmdpbmUtPmhhbmdjaGVjay5hY3Rpb24gPSBIQU5HQ0hFQ0tfSURMRTsKPiArCQkJ fQo+ICsJCX0gZWxzZSBpZiAoZW5naW5lLT5oYW5nY2hlY2suc2Vxbm8gPT0gc2Vxbm8pIHsKPiAr CQkJLyogV2UgYWx3YXlzIGluY3JlbWVudCB0aGUgaGFuZ2NoZWNrIHNjb3JlCj4gKwkJCSAqIGlm IHRoZSByaW5nIGlzIGJ1c3kgYW5kIHN0aWxsIHByb2Nlc3NpbmcKPiArCQkJICogdGhlIHNhbWUg cmVxdWVzdCwgc28gdGhhdCBubyBzaW5nbGUgcmVxdWVzdAo+ICsJCQkgKiBjYW4gcnVuIGluZGVm aW5pdGVseSAoc3VjaCBhcyBhIGNoYWluIG9mCj4gKwkJCSAqIGJhdGNoZXMpLiBUaGUgb25seSB0 aW1lIHdlIGRvIG5vdCBpbmNyZW1lbnQKPiArCQkJICogdGhlIGhhbmdjaGVjayBzY29yZSBvbiB0 aGlzIHJpbmcsIGlmIHRoaXMKPiArCQkJICogcmluZyBpcyBpbiBhIGxlZ2l0aW1hdGUgd2FpdCBm b3IgYW5vdGhlcgo+ICsJCQkgKiByaW5nLiBJbiB0aGF0IGNhc2UgdGhlIHdhaXRpbmcgcmluZyBp cyBhCj4gKwkJCSAqIHZpY3RpbSBhbmQgd2Ugd2FudCB0byBiZSBzdXJlIHdlIGNhdGNoIHRoZQo+ ICsJCQkgKiByaWdodCBjdWxwcml0LiBUaGVuIGV2ZXJ5IHRpbWUgd2UgZG8ga2ljawo+ICsJCQkg KiB0aGUgcmluZywgYWRkIGEgc21hbGwgaW5jcmVtZW50IHRvIHRoZQo+ICsJCQkgKiBzY29yZSBz byB0aGF0IHdlIGNhbiBjYXRjaCBhIGJhdGNoIHRoYXQgaXMKPiArCQkJICogYmVpbmcgcmVwZWF0 ZWRseSBraWNrZWQgYW5kIHNvIHJlc3BvbnNpYmxlCj4gKwkJCSAqIGZvciBzdGFsbGluZyB0aGUg bWFjaGluZS4KPiArCQkJICovCj4gKwkJCWVuZ2luZS0+aGFuZ2NoZWNrLmFjdGlvbiA9IGVuZ2lu ZV9zdHVjayhlbmdpbmUsIGFjdGhkKTsKPiArCQkJc3dpdGNoIChlbmdpbmUtPmhhbmdjaGVjay5h Y3Rpb24pIHsKPiAgIAkJCQljYXNlIEhBTkdDSEVDS19JRExFOgo+ICsJCQkJY2FzZSBIQU5HQ0hF Q0tfSURMRV9XQUlURVJTOgo+ICAgCQkJCWNhc2UgSEFOR0NIRUNLX1dBSVQ6Cj4gICAJCQkJY2Fz ZSBIQU5HQ0hFQ0tfQUNUSVZFOgo+ICAgCQkJCQlicmVhazsKPiAgIAkJCQljYXNlIEhBTkdDSEVD S19BQ1RJVkVfTE9PUDoKPiAtCQkJCQlyaW5nLT5oYW5nY2hlY2suc2NvcmUgKz0gQlVTWTsKPiAr CQkJCQllbmdpbmUtPmhhbmdjaGVjay5zY29yZSArPSBCVVNZOwo+ICAgCQkJCQlicmVhazsKPiAg IAkJCQljYXNlIEhBTkdDSEVDS19LSUNLOgo+IC0JCQkJCXJpbmctPmhhbmdjaGVjay5zY29yZSAr PSBLSUNLOwo+ICsJCQkJCWVuZ2luZS0+aGFuZ2NoZWNrLnNjb3JlICs9IEtJQ0s7Cj4gICAJCQkJ CWJyZWFrOwo+ICAgCQkJCWNhc2UgSEFOR0NIRUNLX0hVTkc6Cj4gLQkJCQkJcmluZy0+aGFuZ2No ZWNrLnNjb3JlICs9IEhVTkc7Cj4gKwkJCQkJZW5naW5lLT5oYW5nY2hlY2suc2NvcmUgKz0gSFVO RzsKPiAgIAkJCQkJc3R1Y2tbaV0gPSB0cnVlOwo+ICAgCQkJCQlicmVhazsKPiAtCQkJCX0KPiAg IAkJCX0KPiAgIAkJfSBlbHNlIHsKPiAtCQkJcmluZy0+aGFuZ2NoZWNrLmFjdGlvbiA9IEhBTkdD SEVDS19BQ1RJVkU7Cj4gKwkJCWVuZ2luZS0+aGFuZ2NoZWNrLmFjdGlvbiA9IEhBTkdDSEVDS19B Q1RJVkU7Cj4gICAKPiAgIAkJCS8qIEdyYWR1YWxseSByZWR1Y2UgdGhlIGNvdW50IHNvIHRoYXQg d2UgY2F0Y2ggRG9TCj4gICAJCQkgKiBhdHRlbXB0cyBhY3Jvc3MgbXVsdGlwbGUgYmF0Y2hlcy4K PiAgIAkJCSAqLwo+IC0JCQlpZiAocmluZy0+aGFuZ2NoZWNrLnNjb3JlID4gMCkKPiAtCQkJCXJp bmctPmhhbmdjaGVjay5zY29yZS0tOwo+ICsJCQlpZiAoZW5naW5lLT5oYW5nY2hlY2suc2NvcmUg PiAwKQo+ICsJCQkJZW5naW5lLT5oYW5nY2hlY2suc2NvcmUtLTsKPiAgIAo+IC0JCQlyaW5nLT5o YW5nY2hlY2suYWN0aGQgPSByaW5nLT5oYW5nY2hlY2subWF4X2FjdGhkID0gMDsKPiArCQkJZW5n aW5lLT5oYW5nY2hlY2suYWN0aGQgPSBlbmdpbmUtPmhhbmdjaGVjay5tYXhfYWN0aGQgPSAwOwo+ ICAgCQl9Cj4gICAKPiAtCQlyaW5nLT5oYW5nY2hlY2suc2Vxbm8gPSBzZXFubzsKPiAtCQlyaW5n LT5oYW5nY2hlY2suYWN0aGQgPSBhY3RoZDsKPiArCQllbmdpbmUtPmhhbmdjaGVjay5pbnRlcnJ1 cHRzID0gaW50ZXJydXB0czsKPiArCQllbmdpbmUtPmhhbmdjaGVjay5zZXFubyA9IHNlcW5vOwo+ ICsJCWVuZ2luZS0+aGFuZ2NoZWNrLmFjdGhkID0gYWN0aGQ7Cj4gICAJCWJ1c3lfY291bnQgKz0g YnVzeTsKPiAgIAl9Cj4gICAKPiAtCWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3ByaXYsIGkpIHsK PiAtCQlpZiAocmluZy0+aGFuZ2NoZWNrLnNjb3JlID49IEhBTkdDSEVDS19TQ09SRV9SSU5HX0hV TkcpIHsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpKSB7Cj4gKwkJaWYg KGVuZ2luZS0+aGFuZ2NoZWNrLnNjb3JlID49IEhBTkdDSEVDS19TQ09SRV9SSU5HX0hVTkcpIHsK PiAgIAkJCURSTV9JTkZPKCIlcyBvbiAlc1xuIiwKPiAgIAkJCQkgc3R1Y2tbaV0gPyAic3R1Y2si IDogIm5vIHByb2dyZXNzIiwKPiAtCQkJCSByaW5nLT5uYW1lKTsKPiArCQkJCSBlbmdpbmUtPm5h bWUpOwo+ICAgCQkJcmluZ3NfaHVuZysrOwo+ICAgCQl9Cj4gICAJfQo+ICAgCj4gICAJaWYgKHJp bmdzX2h1bmcpCj4gLQkJcmV0dXJuIGk5MTVfaGFuZGxlX2Vycm9yKGRldiwgdHJ1ZSwgIlJpbmcg aHVuZyIpOwo+ICsJCXJldHVybiBpOTE1X2hhbmRsZV9lcnJvcihkZXZfcHJpdi0+ZGV2LCB0cnVl LCAiUmluZyBodW5nIik7Cj4gICAKPiAgIAlpZiAoYnVzeV9jb3VudCkKPiAgIAkJLyogUmVzZXQg dGltZXIgY2FzZSBjaGlwIGhhbmdzIHdpdGhvdXQgYW5vdGhlciByZXF1ZXN0Cj4gICAJCSAqIGJl aW5nIGFkZGVkICovCj4gLQkJaTkxNV9xdWV1ZV9oYW5nY2hlY2soZGV2KTsKPiArCQlpOTE1X3F1 ZXVlX2hhbmdjaGVjayhkZXZfcHJpdi0+ZGV2KTsKPiAgIH0KPiAgIAo+ICAgdm9pZCBpOTE1X3F1 ZXVlX2hhbmdjaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+IEBAIC00MTEwLDcgKzQxMjMs NyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaTh4eF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICph cmcpCj4gICAJCW5ld19paXIgPSBJOTE1X1JFQUQxNihJSVIpOyAvKiBGbHVzaCBwb3N0ZWQgd3Jp dGVzICovCj4gICAKPiAgIAkJaWYgKGlpciAmIEk5MTVfVVNFUl9JTlRFUlJVUFQpCj4gLQkJCW5v dGlmeV9yaW5nKGRldiwgJmRldl9wcml2LT5yaW5nW1JDU10pOwo+ICsJCQlub3RpZnlfcmluZyhk ZXYsICZkZXZfcHJpdi0+ZW5naW5lW1JDU10pOwo+ICAgCj4gICAJCWZvcl9lYWNoX3BpcGUoZGV2 X3ByaXYsIHBpcGUpIHsKPiAgIAkJCWludCBwbGFuZSA9IHBpcGU7Cj4gQEAgLTQzMDMsNyArNDMx Niw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpOTE1X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQg KmFyZykKPiAgIAkJbmV3X2lpciA9IEk5MTVfUkVBRChJSVIpOyAvKiBGbHVzaCBwb3N0ZWQgd3Jp dGVzICovCj4gICAKPiAgIAkJaWYgKGlpciAmIEk5MTVfVVNFUl9JTlRFUlJVUFQpCj4gLQkJCW5v dGlmeV9yaW5nKGRldiwgJmRldl9wcml2LT5yaW5nW1JDU10pOwo+ICsJCQlub3RpZnlfcmluZyhk ZXYsICZkZXZfcHJpdi0+ZW5naW5lW1JDU10pOwo+ICAgCj4gICAJCWZvcl9lYWNoX3BpcGUoZGV2 X3ByaXYsIHBpcGUpIHsKPiAgIAkJCWludCBwbGFuZSA9IHBpcGU7Cj4gQEAgLTQ1MzMsOSArNDU0 Niw5IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpOTY1X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQg KmFyZykKPiAgIAkJbmV3X2lpciA9IEk5MTVfUkVBRChJSVIpOyAvKiBGbHVzaCBwb3N0ZWQgd3Jp dGVzICovCj4gICAKPiAgIAkJaWYgKGlpciAmIEk5MTVfVVNFUl9JTlRFUlJVUFQpCj4gLQkJCW5v dGlmeV9yaW5nKGRldiwgJmRldl9wcml2LT5yaW5nW1JDU10pOwo+ICsJCQlub3RpZnlfcmluZyhk ZXYsICZkZXZfcHJpdi0+ZW5naW5lW1JDU10pOwo+ICAgCQlpZiAoaWlyICYgSTkxNV9CU0RfVVNF Ul9JTlRFUlJVUFQpCj4gLQkJCW5vdGlmeV9yaW5nKGRldiwgJmRldl9wcml2LT5yaW5nW1ZDU10p Owo+ICsJCQlub3RpZnlfcmluZyhkZXYsICZkZXZfcHJpdi0+ZW5naW5lW1ZDU10pOwo+ICAgCj4g ICAJCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKPiAgIAkJCWlmIChwaXBlX3N0YXRz W3BpcGVdICYgUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX1NUQVRVUyAmJgo+IEBAIC00NjYz LDcgKzQ2NzYsNyBAQCB2b2lkIGludGVsX2lycV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cj4gICAKPiAgIAlzZXR1cF90aW1lcigmZGV2X3ByaXYtPmdwdV9lcnJvci5oYW5nY2hlY2tfdGlt ZXIsCj4gICAJCSAgICBpOTE1X2hhbmdjaGVja19lbGFwc2VkLAo+IC0JCSAgICAodW5zaWduZWQg bG9uZykgZGV2KTsKPiArCQkgICAgKHVuc2lnbmVkIGxvbmcpIGRldl9wcml2KTsKPiAgIAlJTklU X0RFTEFZRURfV09SSygmZGV2X3ByaXYtPmhvdHBsdWdfcmVlbmFibGVfd29yaywKPiAgIAkJCSAg aW50ZWxfaHBkX2lycV9yZWVuYWJsZSk7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiBp bmRleCAxNWMwZWFhOWY5N2YuLjU5ZjA4NTJkODlkNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZWcuaAo+IEBAIC0yODcsNyArMjg3LDcgQEAKPiAgICNkZWZpbmUgTUlfU1RPUkVfUkVHSVNURVJf TUVNKHgpIE1JX0lOU1RSKDB4MjQsIDIqKHgpLTEpCj4gICAjZGVmaW5lIE1JX1NUT1JFX1JFR0lT VEVSX01FTV9HRU44KHgpIE1JX0lOU1RSKDB4MjQsIDMqKHgpLTEpCj4gICAjZGVmaW5lICAgTUlf U1JNX0xSTV9HTE9CQUxfR1RUCQkoMTw8MjIpCj4gLSNkZWZpbmUgTUlfRkxVU0hfRFcJCU1JX0lO U1RSKDB4MjYsIDEpIC8qIGZvciBHRU42ICovCj4gKyNkZWZpbmUgTUlfRkxVU0hfRFcJCU1JX0lO U1RSKDB4MjYsIDApIC8qIGZvciBHRU42ICovCj4gICAjZGVmaW5lICAgTUlfRkxVU0hfRFdfU1RP UkVfSU5ERVgJKDE8PDIxKQo+ICAgI2RlZmluZSAgIE1JX0lOVkFMSURBVEVfVExCCQkoMTw8MTgp Cj4gICAjZGVmaW5lICAgTUlfRkxVU0hfRFdfT1BfU1RPUkVEVwkoMTw8MTQpCj4gQEAgLTIyOTUs NiArMjI5NSw3IEBAIGVudW0gcHVuaXRfcG93ZXJfd2VsbCB7Cj4gICAgKiAgIGRvZXNuJ3QgbmVl ZCBzYXZpbmcgb24gR1QxCj4gICAgKi8KPiAgICNkZWZpbmUgQ1hUX1NJWkUJCTB4MjFhMAo+ICsj ZGVmaW5lIElMS19DWFRfVE9UQUxfU0laRQkJKDEgKiBQQUdFX1NJWkUpCj4gICAjZGVmaW5lIEdF TjZfQ1hUX1BPV0VSX1NJWkUoY3h0X3JlZykJKChjeHRfcmVnID4+IDI0KSAmIDB4M2YpCj4gICAj ZGVmaW5lIEdFTjZfQ1hUX1JJTkdfU0laRShjeHRfcmVnKQkoKGN4dF9yZWcgPj4gMTgpICYgMHgz ZikKPiAgICNkZWZpbmUgR0VONl9DWFRfUkVOREVSX1NJWkUoY3h0X3JlZykJKChjeHRfcmVnID4+ IDEyKSAmIDB4M2YpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJh Y2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaAo+IGluZGV4IGY1YWEwMDY3 NzU1YS4uOGJiNTFkY2IxMGYzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfdHJhY2UuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaAo+IEBA IC0zMjUsMTEgKzMyNSwxMCBAQCBUUkFDRV9FVkVOVChpOTE1X2dlbV9ldmljdF92bSwKPiAgIAkg ICAgVFBfcHJpbnRrKCJkZXY9JWQsIHZtPSVwIiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT52bSkK PiAgICk7Cj4gICAKPiAtVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmluZ19zeW5jX3RvLAo+IC0JICAg IFRQX1BST1RPKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmZyb20sCj4gLQkJICAgICBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICp0bywKPiAtCQkgICAgIHUzMiBzZXFubyksCj4gLQkgICAgVFBfQVJH Uyhmcm9tLCB0bywgc2Vxbm8pLAo+ICtUUkFDRV9FVkVOVChpOTE1X2dlbV9yaW5nX3dhaXQsCj4g KwkgICAgVFBfUFJPVE8oc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKndhaXRlciwKPiArCQkgICAg IHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpzaWduYWxsZXIpLAo+ICsJICAgIFRQX0FSR1Mod2Fp dGVyLCBzaWduYWxsZXIpLAo+ICAgCj4gICAJICAgIFRQX1NUUlVDVF9fZW50cnkoCj4gICAJCQkg ICAgIF9fZmllbGQodTMyLCBkZXYpCj4gQEAgLTMzOSwxOCArMzM4LDQwIEBAIFRSQUNFX0VWRU5U KGk5MTVfZ2VtX3Jpbmdfc3luY190bywKPiAgIAkJCSAgICAgKSwKPiAgIAo+ICAgCSAgICBUUF9m YXN0X2Fzc2lnbigKPiAtCQkJICAgX19lbnRyeS0+ZGV2ID0gZnJvbS0+ZGV2LT5wcmltYXJ5LT5p bmRleDsKPiAtCQkJICAgX19lbnRyeS0+c3luY19mcm9tID0gZnJvbS0+aWQ7Cj4gLQkJCSAgIF9f ZW50cnktPnN5bmNfdG8gPSB0by0+aWQ7Cj4gLQkJCSAgIF9fZW50cnktPnNlcW5vID0gc2Vxbm87 Cj4gKwkJCSAgIF9fZW50cnktPmRldiA9IHdhaXRlci0+aTkxNS0+ZGV2LT5wcmltYXJ5LT5pbmRl eDsKPiArCQkJICAgX19lbnRyeS0+c3luY19mcm9tID0gd2FpdGVyLT5lbmdpbmUtPmlkOwo+ICsJ CQkgICBfX2VudHJ5LT5zeW5jX3RvID0gc2lnbmFsbGVyLT5lbmdpbmUtPmlkOwo+ICsJCQkgICBf X2VudHJ5LT5zZXFubyA9IHNpZ25hbGxlci0+YnJlYWRjcnVtYlt3YWl0ZXItPmVuZ2luZS0+aWRd Owo+ICAgCQkJICAgKSwKPiAgIAo+IC0JICAgIFRQX3ByaW50aygiZGV2PSV1LCBzeW5jLWZyb209 JXUsIHN5bmMtdG89JXUsIHNlcW5vPSV1IiwKPiArCSAgICBUUF9wcmludGsoImRldj0ldSwgc3lu Yy1mcm9tPSV1LCBzeW5jLXRvPSV1LCBzZXFubz0leCIsCj4gICAJCSAgICAgIF9fZW50cnktPmRl diwKPiAgIAkJICAgICAgX19lbnRyeS0+c3luY19mcm9tLCBfX2VudHJ5LT5zeW5jX3RvLAo+ICAg CQkgICAgICBfX2VudHJ5LT5zZXFubykKPiAgICk7Cj4gICAKPiArVFJBQ0VfRVZFTlQoaTkxNV9n ZW1fcmluZ19zd2l0Y2hfY29udGV4dCwKPiArCSAgICBUUF9QUk9UTyhzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsIHUzMiBmbGFncyksCj4g KwkgICAgVFBfQVJHUyhlbmdpbmUsIGN0eCwgZmxhZ3MpLAo+ICsKPiArCSAgICBUUF9TVFJVQ1Rf X2VudHJ5KAo+ICsJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCj4gKwkJCSAgICAgX19maWVsZCh1 MzIsIHJpbmcpCj4gKwkJCSAgICAgX19maWVsZCh1MzIsIGN0eCkKPiArCQkJICAgICBfX2ZpZWxk KHUzMiwgZmxhZ3MpCj4gKwkJCSAgICAgKSwKPiArCj4gKwkgICAgVFBfZmFzdF9hc3NpZ24oCj4g KwkJCSAgIF9fZW50cnktPmRldiA9IGVuZ2luZS0+aTkxNS0+ZGV2LT5wcmltYXJ5LT5pbmRleDsK PiArCQkJICAgX19lbnRyeS0+cmluZyA9IGVuZ2luZS0+aWQ7Cj4gKwkJCSAgIF9fZW50cnktPmN0 eCA9IGN0eC0+ZmlsZV9wcml2ID8gY3R4LT51c2VyX2hhbmRsZSA6IC0xOwo+ICsJCQkgICBfX2Vu dHJ5LT5mbGFncyA9IGZsYWdzOwo+ICsJCQkgICApLAo+ICsKPiArCSAgICBUUF9wcmludGsoImRl dj0ldSwgcmluZz0ldSwgY3R4PSVkLCBmbGFncz0weCUwOHgiLAo+ICsJCSAgICAgIF9fZW50cnkt PmRldiwgX19lbnRyeS0+cmluZywgX19lbnRyeS0+Y3R4LCBfX2VudHJ5LT5mbGFncykKPiArKTsK PiArCj4gICBUUkFDRV9FVkVOVChpOTE1X2dlbV9yaW5nX2Rpc3BhdGNoLAo+ICAgCSAgICBUUF9Q Uk9UTyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLCB1MzIgc2Vxbm8sIHUzMiBmbGFncyks Cj4gICAJICAgIFRQX0FSR1MocmluZywgc2Vxbm8sIGZsYWdzKSwKPiBAQCAtMzYzLDY2ICszODQs ODQgQEAgVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmluZ19kaXNwYXRjaCwKPiAgIAkJCSAgICAgKSwK PiAgIAo+ICAgCSAgICBUUF9mYXN0X2Fzc2lnbigKPiAtCQkJICAgX19lbnRyeS0+ZGV2ID0gcmlu Zy0+ZGV2LT5wcmltYXJ5LT5pbmRleDsKPiArCQkJICAgX19lbnRyeS0+ZGV2ID0gcmluZy0+aTkx NS0+ZGV2LT5wcmltYXJ5LT5pbmRleDsKPiAgIAkJCSAgIF9fZW50cnktPnJpbmcgPSByaW5nLT5p ZDsKPiAgIAkJCSAgIF9fZW50cnktPnNlcW5vID0gc2Vxbm87Cj4gICAJCQkgICBfX2VudHJ5LT5m bGFncyA9IGZsYWdzOwo+ICAgCQkJICAgaTkxNV90cmFjZV9pcnFfZ2V0KHJpbmcsIHNlcW5vKTsK PiAgIAkJCSAgICksCj4gICAKPiAtCSAgICBUUF9wcmludGsoImRldj0ldSwgcmluZz0ldSwgc2Vx bm89JXUsIGZsYWdzPSV4IiwKPiArCSAgICBUUF9wcmludGsoImRldj0ldSwgcmluZz0ldSwgc2Vx bm89JXgsIGZsYWdzPSV4IiwKPiAgIAkJICAgICAgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5yaW5n LCBfX2VudHJ5LT5zZXFubywgX19lbnRyeS0+ZmxhZ3MpCj4gICApOwo+ICAgCj4gLVRSQUNFX0VW RU5UKGk5MTVfZ2VtX3JpbmdfZmx1c2gsCj4gLQkgICAgVFBfUFJPVE8oc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqcmluZywgdTMyIGludmFsaWRhdGUsIHUzMiBmbHVzaCksCj4gLQkgICAgVFBfQVJH UyhyaW5nLCBpbnZhbGlkYXRlLCBmbHVzaCksCj4gK1RSQUNFX0VWRU5UKGludGVsX3JpbmdidWZm ZXJfYmVnaW4sCj4gKwkgICAgVFBfUFJPVE8oc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmcs IGludCBuZWVkKSwKPiArCSAgICBUUF9BUkdTKHJpbmcsIG5lZWQpLAo+ICAgCj4gICAJICAgIFRQ X1NUUlVDVF9fZW50cnkoCj4gICAJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCj4gICAJCQkgICAg IF9fZmllbGQodTMyLCByaW5nKQo+IC0JCQkgICAgIF9fZmllbGQodTMyLCBpbnZhbGlkYXRlKQo+ IC0JCQkgICAgIF9fZmllbGQodTMyLCBmbHVzaCkKPiArCQkJICAgICBfX2ZpZWxkKHUzMiwgbmVl ZCkKPiArCQkJICAgICBfX2ZpZWxkKHUzMiwgc3BhY2UpCj4gICAJCQkgICAgICksCj4gICAKPiAg IAkgICAgVFBfZmFzdF9hc3NpZ24oCj4gLQkJCSAgIF9fZW50cnktPmRldiA9IHJpbmctPmRldi0+ cHJpbWFyeS0+aW5kZXg7Cj4gLQkJCSAgIF9fZW50cnktPnJpbmcgPSByaW5nLT5pZDsKPiAtCQkJ ICAgX19lbnRyeS0+aW52YWxpZGF0ZSA9IGludmFsaWRhdGU7Cj4gLQkJCSAgIF9fZW50cnktPmZs dXNoID0gZmx1c2g7Cj4gKwkJCSAgIF9fZW50cnktPmRldiA9IHJpbmctPmVuZ2luZS0+aTkxNS0+ ZGV2LT5wcmltYXJ5LT5pbmRleDsKPiArCQkJICAgX19lbnRyeS0+cmluZyA9IHJpbmctPmVuZ2lu ZS0+aWQ7Cj4gKwkJCSAgIF9fZW50cnktPm5lZWQgPSBuZWVkOwo+ICsJCQkgICBfX2VudHJ5LT5z cGFjZSA9IGludGVsX3Jpbmdfc3BhY2UocmluZyk7Cj4gICAJCQkgICApLAo+ICAgCj4gLQkgICAg VFBfcHJpbnRrKCJkZXY9JXUsIHJpbmc9JXgsIGludmFsaWRhdGU9JTA0eCwgZmx1c2g9JTA0eCIs Cj4gLQkJICAgICAgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5yaW5nLAo+IC0JCSAgICAgIF9fZW50 cnktPmludmFsaWRhdGUsIF9fZW50cnktPmZsdXNoKQo+ICsJICAgIFRQX3ByaW50aygiZGV2PSV1 LCByaW5nPSV1LCBuZWVkPSV1LCBzcGFjZT0ldSIsCj4gKwkJICAgICAgX19lbnRyeS0+ZGV2LCBf X2VudHJ5LT5yaW5nLCBfX2VudHJ5LT5uZWVkLCBfX2VudHJ5LT5zcGFjZSkKPiAgICk7Cj4gICAK PiAtREVDTEFSRV9FVkVOVF9DTEFTUyhpOTE1X2dlbV9yZXF1ZXN0LAo+IC0JICAgIFRQX1BST1RP KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsIHUzMiBzZXFubyksCj4gLQkgICAgVFBfQVJH UyhyaW5nLCBzZXFubyksCj4gK1RSQUNFX0VWRU5UKGludGVsX3JpbmdidWZmZXJfd2FpdCwKPiAr CSAgICBUUF9QUk9UTyhzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZywgaW50IG5lZWQpLAo+ ICsJICAgIFRQX0FSR1MocmluZywgbmVlZCksCj4gICAKPiAgIAkgICAgVFBfU1RSVUNUX19lbnRy eSgKPiAgIAkJCSAgICAgX19maWVsZCh1MzIsIGRldikKPiAgIAkJCSAgICAgX19maWVsZCh1MzIs IHJpbmcpCj4gLQkJCSAgICAgX19maWVsZCh1MzIsIHNlcW5vKQo+ICsJCQkgICAgIF9fZmllbGQo dTMyLCBuZWVkKQo+ICsJCQkgICAgIF9fZmllbGQodTMyLCBzcGFjZSkKPiAgIAkJCSAgICAgKSwK PiAgIAo+ICAgCSAgICBUUF9mYXN0X2Fzc2lnbigKPiAtCQkJICAgX19lbnRyeS0+ZGV2ID0gcmlu Zy0+ZGV2LT5wcmltYXJ5LT5pbmRleDsKPiAtCQkJICAgX19lbnRyeS0+cmluZyA9IHJpbmctPmlk Owo+IC0JCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwo+ICsJCQkgICBfX2VudHJ5LT5kZXYg PSByaW5nLT5lbmdpbmUtPmk5MTUtPmRldi0+cHJpbWFyeS0+aW5kZXg7Cj4gKwkJCSAgIF9fZW50 cnktPnJpbmcgPSByaW5nLT5lbmdpbmUtPmlkOwo+ICsJCQkgICBfX2VudHJ5LT5uZWVkID0gbmVl ZDsKPiArCQkJICAgX19lbnRyeS0+c3BhY2UgPSBpbnRlbF9yaW5nX3NwYWNlKHJpbmcpOwo+ICAg CQkJICAgKSwKPiAgIAo+IC0JICAgIFRQX3ByaW50aygiZGV2PSV1LCByaW5nPSV1LCBzZXFubz0l dSIsCj4gLQkJICAgICAgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5yaW5nLCBfX2VudHJ5LT5zZXFu bykKPiArCSAgICBUUF9wcmludGsoImRldj0ldSwgcmluZz0ldSwgbmVlZD0ldSwgc3BhY2U9JXUi LAo+ICsJCSAgICAgIF9fZW50cnktPmRldiwgX19lbnRyeS0+cmluZywgX19lbnRyeS0+bmVlZCwg X19lbnRyeS0+c3BhY2UpCj4gICApOwo+ICAgCj4gLURFRklORV9FVkVOVChpOTE1X2dlbV9yZXF1 ZXN0LCBpOTE1X2dlbV9yZXF1ZXN0X2FkZCwKPiAtCSAgICBUUF9QUk9UTyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nLCB1MzIgc2Vxbm8pLAo+IC0JICAgIFRQX0FSR1MocmluZywgc2Vxbm8p Cj4gK1RSQUNFX0VWRU5UKGludGVsX3JpbmdidWZmZXJfd3JhcCwKPiArCSAgICBUUF9QUk9UTyhz dHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZywgaW50IHJlbSksCj4gKwkgICAgVFBfQVJHUyhy aW5nLCByZW0pLAo+ICsKPiArCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAo+ICsJCQkgICAgIF9fZmll bGQodTMyLCBkZXYpCj4gKwkJCSAgICAgX19maWVsZCh1MzIsIHJpbmcpCj4gKwkJCSAgICAgX19m aWVsZCh1MzIsIHJlbSkKPiArCQkJICAgICBfX2ZpZWxkKHUzMiwgc2l6ZSkKPiArCQkJICAgICAp LAo+ICsKPiArCSAgICBUUF9mYXN0X2Fzc2lnbigKPiArCQkJICAgX19lbnRyeS0+ZGV2ID0gcmlu Zy0+ZW5naW5lLT5pOTE1LT5kZXYtPnByaW1hcnktPmluZGV4Owo+ICsJCQkgICBfX2VudHJ5LT5y aW5nID0gcmluZy0+ZW5naW5lLT5pZDsKPiArCQkJICAgX19lbnRyeS0+cmVtID0gcmVtOwo+ICsJ CQkgICBfX2VudHJ5LT5zaXplID0gcmluZy0+ZWZmZWN0aXZlX3NpemU7Cj4gKwkJCSAgICksCj4g Kwo+ICsJICAgIFRQX3ByaW50aygiZGV2PSV1LCByaW5nPSV1LCByZW09JXUsIHNpemU9JXUiLAo+ ICsJCSAgICAgIF9fZW50cnktPmRldiwgX19lbnRyeS0+cmluZywgX19lbnRyeS0+cmVtLCBfX2Vu dHJ5LT5zaXplKQo+ICAgKTsKPiAgIAo+IC1UUkFDRV9FVkVOVChpOTE1X2dlbV9yZXF1ZXN0X2Nv bXBsZXRlLAo+ICtUUkFDRV9FVkVOVChpOTE1X2dlbV9yaW5nX2NvbXBsZXRlLAo+ICAgCSAgICBU UF9QUk9UTyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKSwKPiAgIAkgICAgVFBfQVJHUyhy aW5nKSwKPiAgIAo+IEBAIC00MzMsMjMgKzQ3Miw2OCBAQCBUUkFDRV9FVkVOVChpOTE1X2dlbV9y ZXF1ZXN0X2NvbXBsZXRlLAo+ICAgCQkJICAgICApLAo+ICAgCj4gICAJICAgIFRQX2Zhc3RfYXNz aWduKAo+IC0JCQkgICBfX2VudHJ5LT5kZXYgPSByaW5nLT5kZXYtPnByaW1hcnktPmluZGV4Owo+ ICsJCQkgICBfX2VudHJ5LT5kZXYgPSByaW5nLT5pOTE1LT5kZXYtPnByaW1hcnktPmluZGV4Owo+ ICAgCQkJICAgX19lbnRyeS0+cmluZyA9IHJpbmctPmlkOwo+IC0JCQkgICBfX2VudHJ5LT5zZXFu byA9IHJpbmctPmdldF9zZXFubyhyaW5nLCBmYWxzZSk7Cj4gKwkJCSAgIF9fZW50cnktPnNlcW5v ID0gcmluZy0+Z2V0X3NlcW5vKHJpbmcpOwo+ICAgCQkJICAgKSwKPiAgIAo+IC0JICAgIFRQX3By aW50aygiZGV2PSV1LCByaW5nPSV1LCBzZXFubz0ldSIsCj4gKwkgICAgVFBfcHJpbnRrKCJkZXY9 JXUsIHJpbmc9JXUsIHNlcW5vPSV4IiwKPiAgIAkJICAgICAgX19lbnRyeS0+ZGV2LCBfX2VudHJ5 LT5yaW5nLCBfX2VudHJ5LT5zZXFubykKPiAgICk7Cj4gICAKPiArREVDTEFSRV9FVkVOVF9DTEFT UyhpOTE1X2dlbV9yZXF1ZXN0LAo+ICsJICAgIFRQX1BST1RPKHN0cnVjdCBpOTE1X2dlbV9yZXF1 ZXN0ICpycSksCj4gKwkgICAgVFBfQVJHUyhycSksCj4gKwo+ICsJICAgIFRQX1NUUlVDVF9fZW50 cnkoCj4gKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKPiArCQkJICAgICBfX2ZpZWxkKHUzMiwg cmluZykKPiArCQkJICAgICBfX2ZpZWxkKHUzMiwgc2Vxbm8pCj4gKwkJCSAgICAgKSwKPiArCj4g KwkgICAgVFBfZmFzdF9hc3NpZ24oCj4gKwkJCSAgIF9fZW50cnktPmRldiA9IHJxLT5pOTE1LT5k ZXYtPnByaW1hcnktPmluZGV4Owo+ICsJCQkgICBfX2VudHJ5LT5yaW5nID0gcnEtPmVuZ2luZS0+ aWQ7Cj4gKwkJCSAgIF9fZW50cnktPnNlcW5vID0gcnEtPnNlcW5vOwo+ICsJCQkgICApLAo+ICsK PiArCSAgICBUUF9wcmludGsoImRldj0ldSwgcmluZz0ldSwgc2Vxbm89JXgiLAo+ICsJCSAgICAg IF9fZW50cnktPmRldiwgX19lbnRyeS0+cmluZywgX19lbnRyeS0+c2Vxbm8pCj4gKyk7Cj4gKwo+ ICtERUZJTkVfRVZFTlQoaTkxNV9nZW1fcmVxdWVzdCwgaTkxNV9nZW1fcmVxdWVzdF9lbWl0X2Zs dXNoLAo+ICsJICAgIFRQX1BST1RPKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSksCj4gKwkg ICAgVFBfQVJHUyhycSkKPiArKTsKPiArCj4gK0RFRklORV9FVkVOVChpOTE1X2dlbV9yZXF1ZXN0 LCBpOTE1X2dlbV9yZXF1ZXN0X2VtaXRfYmF0Y2gsCj4gKwkgICAgVFBfUFJPVE8oc3RydWN0IGk5 MTVfZ2VtX3JlcXVlc3QgKnJxKSwKPiArCSAgICBUUF9BUkdTKHJxKQo+ICspOwo+ICsKPiArREVG SU5FX0VWRU5UKGk5MTVfZ2VtX3JlcXVlc3QsIGk5MTVfZ2VtX3JlcXVlc3RfZW1pdF9icmVhZGNy dW1iLAo+ICsJICAgIFRQX1BST1RPKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSksCj4gKwkg ICAgVFBfQVJHUyhycSkKPiArKTsKPiArCj4gK0RFRklORV9FVkVOVChpOTE1X2dlbV9yZXF1ZXN0 LCBpOTE1X2dlbV9yZXF1ZXN0X2NvbW1pdCwKPiArCSAgICBUUF9QUk9UTyhzdHJ1Y3QgaTkxNV9n ZW1fcmVxdWVzdCAqcnEpLAo+ICsJICAgIFRQX0FSR1MocnEpCj4gKyk7Cj4gKwo+ICtERUZJTkVf RVZFTlQoaTkxNV9nZW1fcmVxdWVzdCwgaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZSwKPiArCSAg ICBUUF9QUk9UTyhzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpLAo+ICsJICAgIFRQX0FSR1Mo cnEpCj4gKyk7Cj4gKwo+ICAgREVGSU5FX0VWRU5UKGk5MTVfZ2VtX3JlcXVlc3QsIGk5MTVfZ2Vt X3JlcXVlc3RfcmV0aXJlLAo+IC0JICAgIFRQX1BST1RPKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmcsIHUzMiBzZXFubyksCj4gLQkgICAgVFBfQVJHUyhyaW5nLCBzZXFubykKPiArCSAgICBU UF9QUk9UTyhzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpLAo+ICsJICAgIFRQX0FSR1MocnEp Cj4gICApOwo+ICAgCj4gICBUUkFDRV9FVkVOVChpOTE1X2dlbV9yZXF1ZXN0X3dhaXRfYmVnaW4s Cj4gLQkgICAgVFBfUFJPVE8oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgdTMyIHNlcW5v KSwKPiAtCSAgICBUUF9BUkdTKHJpbmcsIHNlcW5vKSwKPiArCSAgICBUUF9QUk9UTyhzdHJ1Y3Qg aTkxNV9nZW1fcmVxdWVzdCAqcnEpLAo+ICsJICAgIFRQX0FSR1MocnEpLAo+ICAgCj4gICAJICAg IFRQX1NUUlVDVF9fZW50cnkoCj4gICAJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCj4gQEAgLTQ2 NSw0NyArNTQ5LDM4IEBAIFRSQUNFX0VWRU5UKGk5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9iZWdpbiwK PiAgIAkgICAgICogbGVzcyBkZXNpcmFibGUuCj4gICAJICAgICAqLwo+ICAgCSAgICBUUF9mYXN0 X2Fzc2lnbigKPiAtCQkJICAgX19lbnRyeS0+ZGV2ID0gcmluZy0+ZGV2LT5wcmltYXJ5LT5pbmRl eDsKPiAtCQkJICAgX19lbnRyeS0+cmluZyA9IHJpbmctPmlkOwo+IC0JCQkgICBfX2VudHJ5LT5z ZXFubyA9IHNlcW5vOwo+IC0JCQkgICBfX2VudHJ5LT5ibG9ja2luZyA9IG11dGV4X2lzX2xvY2tl ZCgmcmluZy0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsJCQkgICBfX2VudHJ5LT5kZXYgPSBycS0+ aTkxNS0+ZGV2LT5wcmltYXJ5LT5pbmRleDsKPiArCQkJICAgX19lbnRyeS0+cmluZyA9IHJxLT5l bmdpbmUtPmlkOwo+ICsJCQkgICBfX2VudHJ5LT5zZXFubyA9IHJxLT5zZXFubzsKPiArCQkJICAg X19lbnRyeS0+YmxvY2tpbmcgPSBtdXRleF9pc19sb2NrZWQoJnJxLT5pOTE1LT5kZXYtPnN0cnVj dF9tdXRleCk7Cj4gICAJCQkgICApLAo+ICAgCj4gLQkgICAgVFBfcHJpbnRrKCJkZXY9JXUsIHJp bmc9JXUsIHNlcW5vPSV1LCBibG9ja2luZz0lcyIsCj4gKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUs IHJpbmc9JXUsIHNlcW5vPSV4LCBibG9ja2luZz89JXMiLAo+ICAgCQkgICAgICBfX2VudHJ5LT5k ZXYsIF9fZW50cnktPnJpbmcsIF9fZW50cnktPnNlcW5vLAo+ICAgCQkgICAgICBfX2VudHJ5LT5i bG9ja2luZyA/ICAieWVzIChOQikiIDogIm5vIikKPiAgICk7Cj4gICAKPiAtREVGSU5FX0VWRU5U KGk5MTVfZ2VtX3JlcXVlc3QsIGk5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9lbmQsCj4gLQkgICAgVFBf UFJPVE8oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgdTMyIHNlcW5vKSwKPiAtCSAgICBU UF9BUkdTKHJpbmcsIHNlcW5vKQo+IC0pOwo+IC0KPiAtREVDTEFSRV9FVkVOVF9DTEFTUyhpOTE1 X3JpbmcsCj4gLQkgICAgVFBfUFJPVE8oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyksCj4g LQkgICAgVFBfQVJHUyhyaW5nKSwKPiArVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmVxdWVzdF93YWl0 X2VuZCwKPiArCSAgICBUUF9QUk9UTyhzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpLAo+ICsJ ICAgIFRQX0FSR1MocnEpLAo+ICAgCj4gICAJICAgIFRQX1NUUlVDVF9fZW50cnkoCj4gICAJCQkg ICAgIF9fZmllbGQodTMyLCBkZXYpCj4gICAJCQkgICAgIF9fZmllbGQodTMyLCByaW5nKQo+ICsJ CQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKPiArCQkJICAgICBfX2ZpZWxkKGJvb2wsIGNvbXBs ZXRlZCkKPiAgIAkJCSAgICAgKSwKPiAgIAo+ICAgCSAgICBUUF9mYXN0X2Fzc2lnbigKPiAtCQkJ ICAgX19lbnRyeS0+ZGV2ID0gcmluZy0+ZGV2LT5wcmltYXJ5LT5pbmRleDsKPiAtCQkJICAgX19l bnRyeS0+cmluZyA9IHJpbmctPmlkOwo+ICsJCQkgICBfX2VudHJ5LT5kZXYgPSBycS0+aTkxNS0+ ZGV2LT5wcmltYXJ5LT5pbmRleDsKPiArCQkJICAgX19lbnRyeS0+cmluZyA9IHJxLT5lbmdpbmUt PmlkOwo+ICsJCQkgICBfX2VudHJ5LT5zZXFubyA9IHJxLT5zZXFubzsKPiArCQkJICAgX19lbnRy eS0+Y29tcGxldGVkID0gcnEtPmNvbXBsZXRlZDsKPiAgIAkJCSAgICksCj4gICAKPiAtCSAgICBU UF9wcmludGsoImRldj0ldSwgcmluZz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+cmluZykK PiAtKTsKPiAtCj4gLURFRklORV9FVkVOVChpOTE1X3JpbmcsIGk5MTVfcmluZ193YWl0X2JlZ2lu LAo+IC0JICAgIFRQX1BST1RPKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpLAo+IC0JICAg IFRQX0FSR1MocmluZykKPiAtKTsKPiAtCj4gLURFRklORV9FVkVOVChpOTE1X3JpbmcsIGk5MTVf cmluZ193YWl0X2VuZCwKPiAtCSAgICBUUF9QUk9UTyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpy aW5nKSwKPiAtCSAgICBUUF9BUkdTKHJpbmcpCj4gKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUsIHJp bmc9JXUsIHNlcW5vPSV4LCBjb21wbGV0ZWQ9JXMiLAo+ICsJCSAgICAgIF9fZW50cnktPmRldiwg X19lbnRyeS0+cmluZywgX19lbnRyeS0+c2Vxbm8sCj4gKwkJICAgICAgX19lbnRyeS0+Y29tcGxl dGVkID8gICJ5ZXMiIDogIm5vIikKPiAgICk7Cj4gICAKPiAgIFRSQUNFX0VWRU5UKGk5MTVfZmxp cF9yZXF1ZXN0LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiBpbmRleCA0Nzll NTBhMmVmOTguLjA0OWViMGZjMDlmMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKPiBAQCAtMjE4OSw3ICsyMTg5LDcgQEAgc3RhdGljIGludCBpbnRlbF9hbGlnbl9oZWln aHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGhlaWdodCwgYm9vbCB0aWxlZCkKPiAgIGlu dAo+ICAgaW50ZWxfcGluX2FuZF9mZW5jZV9mYl9vYmooc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiAgIAkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCSAgIHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnBpcGVsaW5lZCkKPiArCQkJICAgc3RydWN0IGk5MTVfZ2VtX3Jl cXVlc3QgKnBpcGVsaW5lZCkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICAgCXUzMiBhbGlnbm1lbnQ7Cj4gQEAgLTkwNTMs NyArOTA1Myw3IEBAIG91dDoKPiAgICAqLwo+ICAgc3RhdGljIHZvaWQgaW50ZWxfbWFya19mYl9i dXN5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkgICAgICAgdW5zaWduZWQgZnJvbnRi dWZmZXJfYml0cywKPiAtCQkJICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4g KwkJCSAgICAgICBzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gICB7Cj4gICAJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgIAllbnVt IHBpcGUgcGlwZTsKPiBAQCAtOTA2NiwyNCArOTA2NiwyNCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9t YXJrX2ZiX2J1c3koc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCWNvbnRpbnVlOwo+ICAg Cj4gICAJCWludGVsX2luY3JlYXNlX3BsbGNsb2NrKGRldiwgcGlwZSk7Cj4gLQkJaWYgKHJpbmcg JiYgaW50ZWxfZmJjX2VuYWJsZWQoZGV2KSkKPiAtCQkJcmluZy0+ZmJjX2RpcnR5ID0gdHJ1ZTsK PiArCQlpZiAocnEgJiYgaW50ZWxfZmJjX2VuYWJsZWQoZGV2KSkKPiArCQkJcnEtPnBlbmRpbmdf Zmx1c2ggfD0gSTkxNV9LSUNLX0ZCQzsKPiAgIAl9Cj4gICB9Cj4gICAKPiAgIC8qKgo+ICAgICog aW50ZWxfZmJfb2JqX2ludmFsaWRhdGUgLSBpbnZhbGlkYXRlIGZyb250YnVmZmVyIG9iamVjdAo+ ICAgICogQG9iajogR0VNIG9iamVjdCB0byBpbnZhbGlkYXRlCj4gLSAqIEByaW5nOiBzZXQgZm9y IGFzeW5jaHJvbm91cyByZW5kZXJpbmcKPiArICogQHJxOiBzZXQgZm9yIGFzeW5jaHJvbm91cyBy ZW5kZXJpbmcKPiAgICAqCj4gICAgKiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGV2ZXJ5IHRp bWUgcmVuZGVyaW5nIG9uIHRoZSBnaXZlbiBvYmplY3Qgc3RhcnRzIGFuZAo+ICAgICogZnJvbnRi dWZmZXIgY2FjaGluZyAoZmJjLCBsb3cgcmVmcmVzaCByYXRlIGZvciBEUlJTLCBwYW5lbCBzZWxm IHJlZnJlc2gpIG11c3QKPiAtICogYmUgaW52YWxpZGF0ZWQuIElmIEByaW5nIGlzIG5vbi1OVUxM IGFueSBzdWJzZXF1ZW50IGludmFsaWRhdGlvbiB3aWxsIGJlIGRlbGF5ZWQKPiArICogYmUgaW52 YWxpZGF0ZWQuIElmIEBlbmdpbmUgaXMgbm9uLU5VTEwgYW55IHN1YnNlcXVlbnQgaW52YWxpZGF0 aW9uIHdpbGwgYmUgZGVsYXllZAo+ICAgICogdW50aWwgdGhlIHJlbmRlcmluZyBjb21wbGV0ZXMg b3IgYSBmbGlwIG9uIHRoaXMgZnJvbnRidWZmZXIgcGxhbmUgaXMKPiAgICAqIHNjaGVkdWxlZC4K PiAgICAqLwo+ICAgdm9pZCBpbnRlbF9mYl9vYmpfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAo+IC0JCQkgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcp Cj4gKwkJCSAgICAgc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICAgewo+ICAgCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2Owo+ICAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gQEAgLTkwOTMsNyArOTA5Myw3 IEBAIHZvaWQgaW50ZWxfZmJfb2JqX2ludmFsaWRhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiAgIAlpZiAoIW9iai0+ZnJvbnRidWZmZXJfYml0cykKPiAgIAkJcmV0dXJuOwo+ ICAgCj4gLQlpZiAocmluZykgewo+ICsJaWYgKHJxKSB7Cj4gICAJCW11dGV4X2xvY2soJmRldl9w cml2LT5mYl90cmFja2luZy5sb2NrKTsKPiAgIAkJZGV2X3ByaXYtPmZiX3RyYWNraW5nLmJ1c3lf Yml0cwo+ICAgCQkJfD0gb2JqLT5mcm9udGJ1ZmZlcl9iaXRzOwo+IEBAIC05MTAyLDcgKzkxMDIs NyBAQCB2b2lkIGludGVsX2ZiX29ial9pbnZhbGlkYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCj4gICAJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmZiX3RyYWNraW5nLmxvY2sp Owo+ICAgCX0KPiAgIAo+IC0JaW50ZWxfbWFya19mYl9idXN5KGRldiwgb2JqLT5mcm9udGJ1ZmZl cl9iaXRzLCByaW5nKTsKPiArCWludGVsX21hcmtfZmJfYnVzeShkZXYsIG9iai0+ZnJvbnRidWZm ZXJfYml0cywgcnEpOwo+ICAgCj4gICAJaW50ZWxfZWRwX3Bzcl9pbnZhbGlkYXRlKGRldiwgb2Jq LT5mcm9udGJ1ZmZlcl9iaXRzKTsKPiAgIH0KPiBAQCAtOTI1Niw2ICs5MjU2LDcgQEAgc3RhdGlj IHZvaWQgaW50ZWxfdW5waW5fd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl9fd29yaykKPiAg IAlpbnRlbF91bnBpbl9mYl9vYmood29yay0+b2xkX2ZiX29iaik7Cj4gICAJZHJtX2dlbV9vYmpl Y3RfdW5yZWZlcmVuY2UoJndvcmstPnBlbmRpbmdfZmxpcF9vYmotPmJhc2UpOwo+ICAgCWRybV9n ZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZ3b3JrLT5vbGRfZmJfb2JqLT5iYXNlKTsKPiArCWk5MTVf cmVxdWVzdF9wdXQod29yay0+ZmxpcF9xdWV1ZWRfcmVxdWVzdCk7Cj4gICAKPiAgIAlpbnRlbF91 cGRhdGVfZmJjKGRldik7Cj4gICAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4g QEAgLTkzNzksOTcgKzkzODAsODYgQEAgc3RhdGljIGlubGluZSB2b2lkIGludGVsX21hcmtfcGFn ZV9mbGlwX2FjdGl2ZShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YykKPiAgIAlzbXBfd21i KCk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludCBpbnRlbF9nZW4yX3F1ZXVlX2ZsaXAoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKPiAtCQkJCSBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gK3N0YXRp YyBpbnQgaW50ZWxfZ2VuMl9xdWV1ZV9mbGlwKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwK PiArCQkJCSBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAgIAkJCQkgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIsCj4gICAJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4g LQkJCQkgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAgIAkJCQkgdWludDMyX3QgZmxh Z3MpCj4gICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2Ny dGMoY3J0Yyk7Cj4gKwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZzsKPiAgIAl1MzIgZmxp cF9tYXNrOwo+IC0JaW50IHJldDsKPiAgIAo+IC0JcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5n LCA2KTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArCXJpbmcgPSBpbnRlbF9yaW5n X2JlZ2luKHJxLCA1KTsKPiArCWlmIChJU19FUlIocmluZykpCj4gKwkJcmV0dXJuIFBUUl9FUlIo cmluZyk7Cj4gICAKPiAgIAkvKiBDYW4ndCBxdWV1ZSBtdWx0aXBsZSBmbGlwcywgc28gd2FpdCBm b3IgdGhlIHByZXZpb3VzCj4gICAJICogb25lIHRvIGZpbmlzaCBiZWZvcmUgZXhlY3V0aW5nIHRo ZSBuZXh0Lgo+ICAgCSAqLwo+IC0JaWYgKGludGVsX2NydGMtPnBsYW5lKQo+ICsJaWYgKGNydGMt PnBsYW5lKQo+ICAgCQlmbGlwX21hc2sgPSBNSV9XQUlUX0ZPUl9QTEFORV9CX0ZMSVA7Cj4gICAJ ZWxzZQo+ICAgCQlmbGlwX21hc2sgPSBNSV9XQUlUX0ZPUl9QTEFORV9BX0ZMSVA7Cj4gICAJaW50 ZWxfcmluZ19lbWl0KHJpbmcsIE1JX1dBSVRfRk9SX0VWRU5UIHwgZmxpcF9tYXNrKTsKPiAtCWlu dGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKPiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywg TUlfRElTUExBWV9GTElQIHwKPiAtCQkJTUlfRElTUExBWV9GTElQX1BMQU5FKGludGVsX2NydGMt PnBsYW5lKSk7Cj4gKwkJCU1JX0RJU1BMQVlfRkxJUF9QTEFORShjcnRjLT5wbGFuZSkpOwo+ICAg CWludGVsX3JpbmdfZW1pdChyaW5nLCBmYi0+cGl0Y2hlc1swXSk7Cj4gLQlpbnRlbF9yaW5nX2Vt aXQocmluZywgaW50ZWxfY3J0Yy0+dW5waW5fd29yay0+Z3R0X29mZnNldCk7Cj4gKwlpbnRlbF9y aW5nX2VtaXQocmluZywgY3J0Yy0+dW5waW5fd29yay0+Z3R0X29mZnNldCk7Cj4gICAJaW50ZWxf cmluZ19lbWl0KHJpbmcsIDApOyAvKiBhdXggZGlzcGxheSBiYXNlIGFkZHJlc3MsIHVudXNlZCAq Lwo+ICsJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+ICAgCj4gLQlpbnRlbF9tYXJrX3BhZ2Vf ZmxpcF9hY3RpdmUoaW50ZWxfY3J0Yyk7Cj4gLQlfX2ludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsK PiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IGludGVsX2dlbjNfcXVldWVf ZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IC0JCQkJIHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKPiArc3RhdGljIGludCBpbnRlbF9nZW4zX3F1ZXVlX2ZsaXAoc3RydWN0IGk5MTVfZ2VtX3Jl cXVlc3QgKnJxLAo+ICsJCQkJIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ICAgCQkJCSBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiAgIAkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiAtCQkJCSBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICAgCQkJCSB1 aW50MzJfdCBmbGFncykKPiAgIHsKPiAtCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0g dG9faW50ZWxfY3J0YyhjcnRjKTsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ ICAgCXUzMiBmbGlwX21hc2s7Cj4gLQlpbnQgcmV0Owo+ICAgCj4gLQlyZXQgPSBpbnRlbF9yaW5n X2JlZ2luKHJpbmcsIDYpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJcmluZyA9 IGludGVsX3JpbmdfYmVnaW4ocnEsIDQpOwo+ICsJaWYgKElTX0VSUihyaW5nKSkKPiArCQlyZXR1 cm4gUFRSX0VSUihyaW5nKTsKPiAgIAo+IC0JaWYgKGludGVsX2NydGMtPnBsYW5lKQo+ICsJaWYg KGNydGMtPnBsYW5lKQo+ICAgCQlmbGlwX21hc2sgPSBNSV9XQUlUX0ZPUl9QTEFORV9CX0ZMSVA7 Cj4gICAJZWxzZQo+ICAgCQlmbGlwX21hc2sgPSBNSV9XQUlUX0ZPUl9QTEFORV9BX0ZMSVA7Cj4g ICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX1dBSVRfRk9SX0VWRU5UIHwgZmxpcF9tYXNrKTsK PiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKPiAgIAlpbnRlbF9yaW5nX2VtaXQo cmluZywgTUlfRElTUExBWV9GTElQX0k5MTUgfAo+IC0JCQlNSV9ESVNQTEFZX0ZMSVBfUExBTkUo aW50ZWxfY3J0Yy0+cGxhbmUpKTsKPiArCQkJTUlfRElTUExBWV9GTElQX1BMQU5FKGNydGMtPnBs YW5lKSk7Cj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIGZiLT5waXRjaGVzWzBdKTsKPiAtCWlu dGVsX3JpbmdfZW1pdChyaW5nLCBpbnRlbF9jcnRjLT51bnBpbl93b3JrLT5ndHRfb2Zmc2V0KTsK PiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKPiArCWludGVsX3JpbmdfZW1pdChy aW5nLCBjcnRjLT51bnBpbl93b3JrLT5ndHRfb2Zmc2V0KTsKPiArCWludGVsX3JpbmdfYWR2YW5j ZShyaW5nKTsKPiAgIAo+IC0JaW50ZWxfbWFya19wYWdlX2ZsaXBfYWN0aXZlKGludGVsX2NydGMp Owo+IC0JX19pbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4g ICAKPiAtc3RhdGljIGludCBpbnRlbF9nZW40X3F1ZXVlX2ZsaXAoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiAtCQkJCSBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gK3N0YXRpYyBpbnQgaW50ZWxf Z2VuNF9xdWV1ZV9mbGlwKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwKPiArCQkJCSBzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAgIAkJCQkgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs Cj4gICAJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCQkgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAgIAkJCQkgdWludDMyX3QgZmxhZ3MpCj4gICB7Cj4g LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ IC0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcnEtPmk5MTU7Cj4gKwlzdHJ1 Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZzsKPiAgIAl1aW50MzJfdCBwZiwgcGlwZXNyYzsKPiAt CWludCByZXQ7Cj4gICAKPiAtCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmluZywgNCk7Cj4gLQlp ZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlyaW5nID0gaW50ZWxfcmluZ19iZWdpbihycSwg NCk7Cj4gKwlpZiAoSVNfRVJSKHJpbmcpKQo+ICsJCXJldHVybiBQVFJfRVJSKHJpbmcpOwo+ICAg Cj4gICAJLyogaTk2NSsgdXNlcyB0aGUgbGluZWFyIG9yIHRpbGVkIG9mZnNldHMgZnJvbSB0aGUK PiAgIAkgKiBEaXNwbGF5IFJlZ2lzdGVycyAod2hpY2ggZG8gbm90IGNoYW5nZSBhY3Jvc3MgYSBw YWdlLWZsaXApCj4gICAJICogc28gd2UgbmVlZCBvbmx5IHJlcHJvZ3JhbSB0aGUgYmFzZSBhZGRy ZXNzLgo+ICAgCSAqLwo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9ESVNQTEFZX0ZMSVAg fAo+IC0JCQlNSV9ESVNQTEFZX0ZMSVBfUExBTkUoaW50ZWxfY3J0Yy0+cGxhbmUpKTsKPiArCQkJ TUlfRElTUExBWV9GTElQX1BMQU5FKGNydGMtPnBsYW5lKSk7Cj4gICAJaW50ZWxfcmluZ19lbWl0 KHJpbmcsIGZiLT5waXRjaGVzWzBdKTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBpbnRlbF9j cnRjLT51bnBpbl93b3JrLT5ndHRfb2Zmc2V0IHwKPiArCWludGVsX3JpbmdfZW1pdChyaW5nLCBj cnRjLT51bnBpbl93b3JrLT5ndHRfb2Zmc2V0IHwKPiAgIAkJCW9iai0+dGlsaW5nX21vZGUpOwo+ ICAgCj4gICAJLyogWFhYIEVuYWJsaW5nIHRoZSBwYW5lbC1maXR0ZXIgYWNyb3NzIHBhZ2UtZmxp cCBpcyBzbyBmYXIKPiBAQCAtOTQ3Nyw2MiArOTQ2Nyw1NyBAQCBzdGF0aWMgaW50IGludGVsX2dl bjRfcXVldWVfZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCSAqIHBmID0gSTkxNV9S RUFEKHBpcGUgPT0gMCA/IFBGQV9DVExfMSA6IFBGQl9DVExfMSkgJiBQRl9FTkFCTEU7Cj4gICAJ ICovCj4gICAJcGYgPSAwOwo+IC0JcGlwZXNyYyA9IEk5MTVfUkVBRChQSVBFU1JDKGludGVsX2Ny dGMtPnBpcGUpKSAmIDB4MGZmZjBmZmY7Cj4gKwlwaXBlc3JjID0gSTkxNV9SRUFEKFBJUEVTUkMo Y3J0Yy0+cGlwZSkpICYgMHgwZmZmMGZmZjsKPiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywgcGYg fCBwaXBlc3JjKTsKPiArCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKPiAgIAo+IC0JaW50ZWxf bWFya19wYWdlX2ZsaXBfYWN0aXZlKGludGVsX2NydGMpOwo+IC0JX19pbnRlbF9yaW5nX2FkdmFu Y2UocmluZyk7Cj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludCBpbnRlbF9n ZW42X3F1ZXVlX2ZsaXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAtCQkJCSBzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCj4gK3N0YXRpYyBpbnQgaW50ZWxfZ2VuNl9xdWV1ZV9mbGlwKHN0cnVjdCBp OTE1X2dlbV9yZXF1ZXN0ICpycSwKPiArCQkJCSBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAg IAkJCQkgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gICAJCQkJIHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCQkgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywK PiAgIAkJCQkgdWludDMyX3QgZmxhZ3MpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGludGVsX2NydGMgKmlu dGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gcnEtPmk5MTU7Cj4gKwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmlu ZzsKPiAgIAl1aW50MzJfdCBwZiwgcGlwZXNyYzsKPiAtCWludCByZXQ7Cj4gICAKPiAtCXJldCA9 IGludGVsX3JpbmdfYmVnaW4ocmluZywgNCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7 Cj4gKwlyaW5nID0gaW50ZWxfcmluZ19iZWdpbihycSwgNCk7Cj4gKwlpZiAoSVNfRVJSKHJpbmcp KQo+ICsJCXJldHVybiBQVFJfRVJSKHJpbmcpOwo+ICAgCj4gICAJaW50ZWxfcmluZ19lbWl0KHJp bmcsIE1JX0RJU1BMQVlfRkxJUCB8Cj4gLQkJCU1JX0RJU1BMQVlfRkxJUF9QTEFORShpbnRlbF9j cnRjLT5wbGFuZSkpOwo+ICsJCQlNSV9ESVNQTEFZX0ZMSVBfUExBTkUoY3J0Yy0+cGxhbmUpKTsK PiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywgZmItPnBpdGNoZXNbMF0gfCBvYmotPnRpbGluZ19t b2RlKTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBpbnRlbF9jcnRjLT51bnBpbl93b3JrLT5n dHRfb2Zmc2V0KTsKPiArCWludGVsX3JpbmdfZW1pdChyaW5nLCBjcnRjLT51bnBpbl93b3JrLT5n dHRfb2Zmc2V0KTsKPiAgIAo+ICAgCS8qIENvbnRyYXJ5IHRvIHRoZSBzdWdnZXN0aW9ucyBpbiB0 aGUgZG9jdW1lbnRhdGlvbiwKPiAgIAkgKiAiRW5hYmxlIFBhbmVsIEZpdHRlciIgZG9lcyBub3Qg c2VlbSB0byBiZSByZXF1aXJlZCB3aGVuIHBhZ2UKPiAgIAkgKiBmbGlwcGluZyB3aXRoIGEgbm9u LW5hdGl2ZSBtb2RlLCBhbmQgd29yc2UgY2F1c2VzIGEgbm9ybWFsCj4gICAJICogbW9kZXNldCB0 byBmYWlsLgo+IC0JICogcGYgPSBJOTE1X1JFQUQoUEZfQ1RMKGludGVsX2NydGMtPnBpcGUpKSAm IFBGX0VOQUJMRTsKPiArCSAqIHBmID0gSTkxNV9SRUFEKFBGX0NUTChjcnRjLT5waXBlKSkgJiBQ Rl9FTkFCTEU7Cj4gICAJICovCj4gICAJcGYgPSAwOwo+IC0JcGlwZXNyYyA9IEk5MTVfUkVBRChQ SVBFU1JDKGludGVsX2NydGMtPnBpcGUpKSAmIDB4MGZmZjBmZmY7Cj4gKwlwaXBlc3JjID0gSTkx NV9SRUFEKFBJUEVTUkMoY3J0Yy0+cGlwZSkpICYgMHgwZmZmMGZmZjsKPiAgIAlpbnRlbF9yaW5n X2VtaXQocmluZywgcGYgfCBwaXBlc3JjKTsKPiArCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsK PiAgIAo+IC0JaW50ZWxfbWFya19wYWdlX2ZsaXBfYWN0aXZlKGludGVsX2NydGMpOwo+IC0JX19p bnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtc3Rh dGljIGludCBpbnRlbF9nZW43X3F1ZXVlX2ZsaXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAt CQkJCSBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gK3N0YXRpYyBpbnQgaW50ZWxfZ2VuN19xdWV1 ZV9mbGlwKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwKPiArCQkJCSBzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YywKPiAgIAkJCQkgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gICAJCQkJ IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCQkgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqcmluZywKPiAgIAkJCQkgdWludDMyX3QgZmxhZ3MpCj4gICB7Cj4gLQlzdHJ1Y3Qg aW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gKwlzdHJ1Y3Qg aW50ZWxfcmluZ2J1ZmZlciAqcmluZzsKPiAgIAl1aW50MzJfdCBwbGFuZV9iaXQgPSAwOwo+ICAg CWludCBsZW4sIHJldDsKPiAgIAo+IC0Jc3dpdGNoIChpbnRlbF9jcnRjLT5wbGFuZSkgewo+ICsJ c3dpdGNoIChjcnRjLT5wbGFuZSkgewo+ICAgCWNhc2UgUExBTkVfQToKPiAgIAkJcGxhbmVfYml0 ID0gTUlfRElTUExBWV9GTElQX0lWQl9QTEFORV9BOwo+ICAgCQlicmVhazsKPiBAQCAtOTU0Nywx NiArOTUzMiwxNiBAQCBzdGF0aWMgaW50IGludGVsX2dlbjdfcXVldWVfZmxpcChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ICAgCQlyZXR1cm4gLUVOT0RFVjsKPiAgIAl9Cj4gICAKPiAtCWxlbiA9 IDQ7Cj4gLQlpZiAocmluZy0+aWQgPT0gUkNTKSB7Cj4gKwlsZW4gPSAzOwo+ICsJaWYgKHJxLT5l bmdpbmUtPmlkID09IFJDUykgewo+ICAgCQlsZW4gKz0gNjsKPiAgIAkJLyoKPiAgIAkJICogT24g R2VuIDgsIFNSTSBpcyBub3cgdGFraW5nIGFuIGV4dHJhIGR3b3JkIHRvIGFjY29tbW9kYXRlCj4g ICAJCSAqIDQ4Yml0cyBhZGRyZXNzZXMsIGFuZCB3ZSBuZWVkIGEgTk9PUCBmb3IgdGhlIGJhdGNo IHNpemUgdG8KPiAgIAkJICogc3RheSBldmVuLgo+ICAgCQkgKi8KPiAtCQlpZiAoSVNfR0VOOChk ZXYpKQo+IC0JCQlsZW4gKz0gMjsKPiArCQlpZiAoSVNfR0VOOChycS0+aTkxNSkpCj4gKwkJCWxl biArPSAxOwo+ICAgCX0KPiAgIAo+ICAgCS8qCj4gQEAgLTk1NjksMTMgKzk1NTQsMTMgQEAgc3Rh dGljIGludCBpbnRlbF9nZW43X3F1ZXVlX2ZsaXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAg IAkgKiB0aGVuIGRvIHRoZSBjYWNoZWxpbmUgYWxpZ25tZW50LCBhbmQgZmluYWxseSBlbWl0IHRo ZQo+ICAgCSAqIE1JX0RJU1BMQVlfRkxJUC4KPiAgIAkgKi8KPiAtCXJldCA9IGludGVsX3Jpbmdf Y2FjaGVsaW5lX2FsaWduKHJpbmcpOwo+ICsJcmV0ID0gaW50ZWxfcmluZ19jYWNoZWxpbmVfYWxp Z24ocnEpOwo+ICAgCWlmIChyZXQpCj4gICAJCXJldHVybiByZXQ7Cj4gICAKPiAtCXJldCA9IGlu dGVsX3JpbmdfYmVnaW4ocmluZywgbGVuKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsK PiArCXJpbmcgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCBsZW4pOwo+ICsJaWYgKElTX0VSUihyaW5n KSkKPiArCQlyZXR1cm4gUFRSX0VSUihyaW5nKTsKPiAgIAo+ICAgCS8qIFVubWFzayB0aGUgZmxp cC1kb25lIGNvbXBsZXRpb24gbWVzc2FnZS4gTm90ZSB0aGF0IHRoZSBic3BlYyBzYXlzIHRoYXQK PiAgIAkgKiB3ZSBzaG91bGQgZG8gdGhpcyBmb3IgYm90aCB0aGUgQkNTIGFuZCBSQ1MsIGFuZCB0 aGF0IHdlIG11c3Qgbm90IHVubWFzawo+IEBAIC05NTg2LDM3ICs5NTcxLDMzIEBAIHN0YXRpYyBp bnQgaW50ZWxfZ2VuN19xdWV1ZV9mbGlwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJICog Zm9yIHRoZSBSQ1MgYWxzbyBkb2Vzbid0IGFwcGVhciB0byBkcm9wIGV2ZW50cy4gU2V0dGluZyB0 aGUgREVSUk1SCj4gICAJICogdG8gemVybyBkb2VzIGxlYWQgdG8gbG9ja3VwcyB3aXRoaW4gTUlf RElTUExBWV9GTElQLgo+ICAgCSAqLwo+IC0JaWYgKHJpbmctPmlkID09IFJDUykgewo+ICsJaWYg KHJxLT5lbmdpbmUtPmlkID09IFJDUykgewo+ICAgCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlf TE9BRF9SRUdJU1RFUl9JTU0oMSkpOwo+ICAgCQlpbnRlbF9yaW5nX2VtaXQocmluZywgREVSUk1S KTsKPiAgIAkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIH4oREVSUk1SX1BJUEVBX1BSSV9GTElQX0RP TkUgfAo+ICAgCQkJCQlERVJSTVJfUElQRUJfUFJJX0ZMSVBfRE9ORSB8Cj4gICAJCQkJCURFUlJN Ul9QSVBFQ19QUklfRkxJUF9ET05FKSk7Cj4gLQkJaWYgKElTX0dFTjgoZGV2KSkKPiArCQlpZiAo SVNfR0VOOChycS0+aTkxNSkpCj4gICAJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfU1RPUkVf UkVHSVNURVJfTUVNX0dFTjgoMSkgfAo+ICAgCQkJCQkgICAgICBNSV9TUk1fTFJNX0dMT0JBTF9H VFQpOwo+ICAgCQllbHNlCj4gICAJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfU1RPUkVfUkVH SVNURVJfTUVNKDEpIHwKPiAgIAkJCQkJICAgICAgTUlfU1JNX0xSTV9HTE9CQUxfR1RUKTsKPiAg IAkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIERFUlJNUik7Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHJp bmcsIHJpbmctPnNjcmF0Y2guZ3R0X29mZnNldCArIDI1Nik7Cj4gLQkJaWYgKElTX0dFTjgoZGV2 KSkgewo+ICsJCWludGVsX3JpbmdfZW1pdChyaW5nLCBycS0+ZW5naW5lLT5zY3JhdGNoLmd0dF9v ZmZzZXQgKyAyNTYpOwo+ICsJCWlmIChJU19HRU44KHJxLT5pOTE1KSkKPiAgIAkJCWludGVsX3Jp bmdfZW1pdChyaW5nLCAwKTsKPiAtCQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOwo+ IC0JCX0KPiAgIAl9Cj4gICAKPiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfRElTUExBWV9G TElQX0k5MTUgfCBwbGFuZV9iaXQpOwo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIChmYi0+cGl0 Y2hlc1swXSB8IG9iai0+dGlsaW5nX21vZGUpKTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBp bnRlbF9jcnRjLT51bnBpbl93b3JrLT5ndHRfb2Zmc2V0KTsKPiAtCWludGVsX3JpbmdfZW1pdChy aW5nLCAoTUlfTk9PUCkpOwo+ICsJaW50ZWxfcmluZ19lbWl0KHJpbmcsIGZiLT5waXRjaGVzWzBd IHwgb2JqLT50aWxpbmdfbW9kZSk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywgY3J0Yy0+dW5w aW5fd29yay0+Z3R0X29mZnNldCk7Cj4gKwlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gICAK PiAtCWludGVsX21hcmtfcGFnZV9mbGlwX2FjdGl2ZShpbnRlbF9jcnRjKTsKPiAtCV9faW50ZWxf cmluZ19hZHZhbmNlKHJpbmcpOwo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBi b29sIHVzZV9tbWlvX2ZsaXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiArc3RhdGlj IGJvb2wgdXNlX21taW9fZmxpcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICAJ CQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICB7Cj4gICAJLyoKPiBAQCAt OTYyNywyMCArOTYwOCwxOCBAQCBzdGF0aWMgYm9vbCB1c2VfbW1pb19mbGlwKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcsCj4gICAJICogU28gdXNpbmcgTU1JTyBmbGlwcyB0aGVyZSB3b3Vs ZCBkaXNydXB0IHRoaXMgbWVjaGFuaXNtLgo+ICAgCSAqLwo+ICAgCj4gLQlpZiAocmluZyA9PSBO VUxMKQo+ICsJaWYgKGVuZ2luZSA9PSBOVUxMKQo+ICAgCQlyZXR1cm4gdHJ1ZTsKPiAgIAo+IC0J aWYgKElOVEVMX0lORk8ocmluZy0+ZGV2KS0+Z2VuIDwgNSkKPiArCWlmIChJTlRFTF9JTkZPKGVu Z2luZS0+aTkxNSktPmdlbiA8IDUpCj4gICAJCXJldHVybiBmYWxzZTsKPiAgIAo+ICAgCWlmIChp OTE1LnVzZV9tbWlvX2ZsaXAgPCAwKQo+ICAgCQlyZXR1cm4gZmFsc2U7Cj4gICAJZWxzZSBpZiAo aTkxNS51c2VfbW1pb19mbGlwID4gMCkKPiAgIAkJcmV0dXJuIHRydWU7Cj4gLQllbHNlIGlmIChp OTE1LmVuYWJsZV9leGVjbGlzdHMpCj4gLQkJcmV0dXJuIHRydWU7Cj4gICAJZWxzZQo+IC0JCXJl dHVybiByaW5nICE9IG9iai0+cmluZzsKPiArCQlyZXR1cm4gZW5naW5lICE9IGk5MTVfcmVxdWVz dF9lbmdpbmUob2JqLT5sYXN0X3dyaXRlLnJlcXVlc3QpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMg dm9pZCBpbnRlbF9kb19tbWlvX2ZsaXAoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMpCj4g QEAgLTk2NzEsMTAyICs5NjUwLDYyIEBAIHN0YXRpYyB2b2lkIGludGVsX2RvX21taW9fZmxpcChz dHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YykKPiAgIAlQT1NUSU5HX1JFQUQoRFNQU1VSRihp bnRlbF9jcnRjLT5wbGFuZSkpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgaW50ZWxfcG9zdHBv bmVfZmxpcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+IC17Cj4gLQlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nOwo+IC0JaW50IHJldDsKPiAtCj4gLQlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAtCWlmICghb2JqLT5s YXN0X3dyaXRlX3NlcW5vKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCXJpbmcgPSBvYmotPnJpbmc7 Cj4gLQo+IC0JaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHJpbmctPmdldF9zZXFubyhyaW5nLCB0cnVl KSwKPiAtCQkJICAgICAgb2JqLT5sYXN0X3dyaXRlX3NlcW5vKSkKPiAtCQlyZXR1cm4gMDsKPiAr c3RydWN0IGZsaXBfd29yayB7Cj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKPiArCXN0cnVj dCBpOTE1X2dlbV9yZXF1ZXN0ICpycTsKPiArCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwo+ICt9 Owo+ICAgCj4gLQlyZXQgPSBpOTE1X2dlbV9jaGVja19vbHIocmluZywgb2JqLT5sYXN0X3dyaXRl X3NlcW5vKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArc3RhdGljIHZvaWQgaW50 ZWxfbW1pb19mbGlwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1 Y3QgZmxpcF93b3JrICpmbGlwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmbGlwX3dvcmss IHdvcmspOwo+ICAgCj4gLQlpZiAoV0FSTl9PTighcmluZy0+aXJxX2dldChyaW5nKSkpCj4gLQkJ cmV0dXJuIDA7Cj4gKwlpZiAoX19pOTE1X3JlcXVlc3Rfd2FpdChmbGlwLT5ycSwgZmFsc2UsIE5V TEwsIE5VTEwpID09IDApCj4gKwkJaW50ZWxfZG9fbW1pb19mbGlwKGZsaXAtPmNydGMpOwo+ICAg Cj4gLQlyZXR1cm4gMTsKPiArCWk5MTVfcmVxdWVzdF9wdXRfX3VubG9ja2VkKGZsaXAtPnJxKTsK PiArCWtmcmVlKGZsaXApOwo+ICAgfQo+ICAgCj4gLXZvaWQgaW50ZWxfbm90aWZ5X21taW9fZmxp cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICtzdGF0aWMgaW50IGludGVsX3F1ZXVl X21taW9fZmxpcChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiArCQkJCSBzdHJ1Y3QgaTkxNV9n ZW1fcmVxdWVzdCAqcnEpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KHJpbmctPmRldik7Cj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0 YzsKPiAtCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwo+IC0JdTMyIHNlcW5vOwo+IC0KPiAtCXNl cW5vID0gcmluZy0+Z2V0X3NlcW5vKHJpbmcsIGZhbHNlKTsKPiArCXN0cnVjdCBmbGlwX3dvcmsg KmZsaXA7Cj4gICAKPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+bW1pb19mbGlwX2xv Y2ssIGlycV9mbGFncyk7Cj4gLQlmb3JfZWFjaF9pbnRlbF9jcnRjKHJpbmctPmRldiwgaW50ZWxf Y3J0Yykgewo+IC0JCXN0cnVjdCBpbnRlbF9tbWlvX2ZsaXAgKm1taW9fZmxpcDsKPiAtCj4gLQkJ bW1pb19mbGlwID0gJmludGVsX2NydGMtPm1taW9fZmxpcDsKPiAtCQlpZiAobW1pb19mbGlwLT5z ZXFubyA9PSAwKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJaWYgKHJpbmctPmlkICE9IG1taW9f ZmxpcC0+cmluZ19pZCkKPiAtCQkJY29udGludWU7Cj4gKwlpZiAoV0FSTl9PTihjcnRjLT5tbWlv X2ZsaXApKQo+ICsJCXJldHVybiAtRUJVU1k7Cj4gICAKPiAtCQlpZiAoaTkxNV9zZXFub19wYXNz ZWQoc2Vxbm8sIG1taW9fZmxpcC0+c2Vxbm8pKSB7Cj4gLQkJCWludGVsX2RvX21taW9fZmxpcChp bnRlbF9jcnRjKTsKPiAtCQkJbW1pb19mbGlwLT5zZXFubyA9IDA7Cj4gLQkJCXJpbmctPmlycV9w dXQocmluZyk7Cj4gLQkJfQo+ICsJaWYgKHJxID09IE5VTEwpIHsKPiArCQlpbnRlbF9kb19tbWlv X2ZsaXAoY3J0Yyk7Cj4gKwkJcmV0dXJuIDA7Cj4gICAJfQo+IC0Jc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmZGV2X3ByaXYtPm1taW9fZmxpcF9sb2NrLCBpcnFfZmxhZ3MpOwo+IC19Cj4gICAKPiAt c3RhdGljIGludCBpbnRlbF9xdWV1ZV9tbWlvX2ZsaXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiAtCQkJCSBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gLQkJCQkgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCj4gLQkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkJ CSBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCQkJIHVpbnQzMl90IGZsYWdzKQo+ IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOwo+IC0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNy dGMpOwo+IC0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Cj4gLQlpbnQgcmV0Owo+ICsJaWYgKGk5 MTVfcmVxdWVzdF9jb21wbGV0ZShycSkpIHsKPiArCQlpbnRlbF9kb19tbWlvX2ZsaXAoY3J0Yyk7 Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gICAKPiAtCWlmIChXQVJOX09OKGludGVsX2NydGMtPm1t aW9fZmxpcC5zZXFubykpCj4gLQkJcmV0dXJuIC1FQlVTWTsKPiArCWZsaXAgPSBrbWFsbG9jKHNp emVvZigqZmxpcCksIEdGUF9LRVJORUwpOwo+ICsJaWYgKGZsaXAgPT0gTlVMTCkKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiAgIAo+IC0JcmV0ID0gaW50ZWxfcG9zdHBvbmVfZmxpcChvYmopOwo+IC0J aWYgKHJldCA8IDApCj4gKwlJTklUX1dPUksoJmZsaXAtPndvcmssIGludGVsX21taW9fZmxpcF93 b3JrKTsKPiArCWZsaXAtPmNydGMgPSBjcnRjOwo+ICsJZmxpcC0+cnEgPSBpOTE1X3JlcXVlc3Rf Z2V0X2JyZWFkY3J1bWIocnEpOwo+ICsJaWYgKElTX0VSUihmbGlwLT5ycSkpIHsKPiArCQlpbnQg cmV0ID0gUFRSX0VSUihmbGlwLT5ycSk7Cj4gKwkJa2ZyZWUoZmxpcCk7Cj4gICAJCXJldHVybiBy ZXQ7Cj4gLQlpZiAocmV0ID09IDApIHsKPiAtCQlpbnRlbF9kb19tbWlvX2ZsaXAoaW50ZWxfY3J0 Yyk7Cj4gLQkJcmV0dXJuIDA7Cj4gICAJfQo+ICAgCj4gLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2 X3ByaXYtPm1taW9fZmxpcF9sb2NrLCBpcnFfZmxhZ3MpOwo+IC0JaW50ZWxfY3J0Yy0+bW1pb19m bGlwLnNlcW5vID0gb2JqLT5sYXN0X3dyaXRlX3NlcW5vOwo+IC0JaW50ZWxfY3J0Yy0+bW1pb19m bGlwLnJpbmdfaWQgPSBvYmotPnJpbmctPmlkOwo+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZGV2X3ByaXYtPm1taW9fZmxpcF9sb2NrLCBpcnFfZmxhZ3MpOwo+IC0KPiAtCS8qCj4gLQkgKiBE b3VibGUgY2hlY2sgdG8gY2F0Y2ggY2FzZXMgd2hlcmUgaXJxIGZpcmVkIGJlZm9yZQo+IC0JICog bW1pbyBmbGlwIGRhdGEgd2FzIHJlYWR5Cj4gLQkgKi8KPiAtCWludGVsX25vdGlmeV9tbWlvX2Zs aXAob2JqLT5yaW5nKTsKPiArCXNjaGVkdWxlX3dvcmsoJmZsaXAtPndvcmspOwo+ICAgCXJldHVy biAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgaW50ZWxfZGVmYXVsdF9xdWV1ZV9mbGlwKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gLQkJCQkgICAgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ ICtzdGF0aWMgaW50IGludGVsX2RlZmF1bHRfcXVldWVfZmxpcChzdHJ1Y3QgaTkxNV9nZW1fcmVx dWVzdCAqcnEsCj4gKwkJCQkgICAgc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gICAJCQkJICAg IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAgCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAo+IC0JCQkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcs Cj4gICAJCQkJICAgIHVpbnQzMl90IGZsYWdzKQo+ICAgewo+ICAgCXJldHVybiAtRU5PREVWOwo+ IEBAIC05Nzg3LDkgKzk3MjYsOCBAQCBzdGF0aWMgYm9vbCBfX2ludGVsX3BhZ2VmbGlwX3N0YWxs X2NoZWNrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCXJldHVybiBmYWxzZTsKPiAgIAo+ ICAgCWlmICh3b3JrLT5mbGlwX3JlYWR5X3ZibGFuayA9PSAwKSB7Cj4gLQkJaWYgKHdvcmstPmZs aXBfcXVldWVkX3JpbmcgJiYKPiAtCQkgICAgIWk5MTVfc2Vxbm9fcGFzc2VkKHdvcmstPmZsaXBf cXVldWVkX3JpbmctPmdldF9zZXFubyh3b3JrLT5mbGlwX3F1ZXVlZF9yaW5nLCB0cnVlKSwKPiAt CQkJCSAgICAgICB3b3JrLT5mbGlwX3F1ZXVlZF9zZXFubykpCj4gKwkJaWYgKHdvcmstPmZsaXBf cXVldWVkX3JlcXVlc3QgJiYKPiArCQkgICAgIWk5MTVfcmVxdWVzdF9jb21wbGV0ZSh3b3JrLT5m bGlwX3F1ZXVlZF9yZXF1ZXN0KSkKPiAgIAkJCXJldHVybiBmYWxzZTsKPiAgIAo+ICAgCQl3b3Jr LT5mbGlwX3JlYWR5X3ZibGFuayA9IGRybV92YmxhbmtfY291bnQoZGV2LCBpbnRlbF9jcnRjLT5w aXBlKTsKPiBAQCAtOTg0Myw3ICs5NzgxLDggQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX3BhZ2Vf ZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gICAJc3RydWN0IGludGVsX2NydGMgKmludGVs X2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICAgCWVudW0gcGlwZSBwaXBlID0gaW50ZWxf Y3J0Yy0+cGlwZTsKPiAgIAlzdHJ1Y3QgaW50ZWxfdW5waW5fd29yayAqd29yazsKPiAtCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmU7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnE7Cj4gICAJdW5zaWduZWQgbG9uZyBm bGFnczsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gQEAgLTk5MzAsNDUgKzk4NjksNjMgQEAgc3RhdGlj IGludCBpbnRlbF9jcnRjX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gICAJCXdv cmstPmZsaXBfY291bnQgPSBJOTE1X1JFQUQoUElQRV9GTElQQ09VTlRfR000NShwaXBlKSkgKyAx Owo+ICAgCj4gICAJaWYgKElTX1ZBTExFWVZJRVcoZGV2KSkgewo+IC0JCXJpbmcgPSAmZGV2X3By aXYtPnJpbmdbQkNTXTsKPiArCQllbmdpbmUgPSAmZGV2X3ByaXYtPmVuZ2luZVtCQ1NdOwo+ICAg CQlpZiAob2JqLT50aWxpbmdfbW9kZSAhPSB3b3JrLT5vbGRfZmJfb2JqLT50aWxpbmdfbW9kZSkK PiAgIAkJCS8qIHZsdjogRElTUExBWV9GTElQIGZhaWxzIHRvIGNoYW5nZSB0aWxpbmcgKi8KPiAt CQkJcmluZyA9IE5VTEw7Cj4gKwkJCWVuZ2luZSA9IE5VTEw7Cj4gICAJfSBlbHNlIGlmIChJU19J VllCUklER0UoZGV2KSkgewo+IC0JCXJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbQkNTXTsKPiArCQll bmdpbmUgPSAmZGV2X3ByaXYtPmVuZ2luZVtCQ1NdOwo+ICAgCX0gZWxzZSBpZiAoSU5URUxfSU5G TyhkZXYpLT5nZW4gPj0gNykgewo+IC0JCXJpbmcgPSBvYmotPnJpbmc7Cj4gLQkJaWYgKHJpbmcg PT0gTlVMTCB8fCByaW5nLT5pZCAhPSBSQ1MpCj4gLQkJCXJpbmcgPSAmZGV2X3ByaXYtPnJpbmdb QkNTXTsKPiArCQllbmdpbmUgPSBpOTE1X3JlcXVlc3RfZW5naW5lKG9iai0+bGFzdF93cml0ZS5y ZXF1ZXN0KTsKPiArCQlpZiAoZW5naW5lID09IE5VTEwgfHwgZW5naW5lLT5pZCAhPSBSQ1MpCj4g KwkJCWVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lW0JDU107Cj4gICAJfSBlbHNlIHsKPiAtCQly aW5nID0gJmRldl9wcml2LT5yaW5nW1JDU107Cj4gKwkJZW5naW5lID0gJmRldl9wcml2LT5lbmdp bmVbUkNTXTsKPiAgIAl9Cj4gICAKPiAtCXJldCA9IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2Jq KGRldiwgb2JqLCByaW5nKTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBjbGVhbnVwX3BlbmRpbmc7 Cj4gKwlpZiAodXNlX21taW9fZmxpcChlbmdpbmUsIG9iaikpIHsKPiArCQlycSA9IGk5MTVfcmVx dWVzdF9nZXQob2JqLT5sYXN0X3dyaXRlLnJlcXVlc3QpOwo+ICsKPiArCQlyZXQgPSBpbnRlbF9w aW5fYW5kX2ZlbmNlX2ZiX29iaihkZXYsIG9iaiwgcnEpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdv dG8gY2xlYW51cF9ycTsKPiAgIAo+IC0Jd29yay0+Z3R0X29mZnNldCA9Cj4gLQkJaTkxNV9nZW1f b2JqX2dndHRfb2Zmc2V0KG9iaikgKyBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldDsKPiArCQl3 b3JrLT5ndHRfb2Zmc2V0ID0KPiArCQkJaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikgKyBp bnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldDsKPiAgIAo+IC0JaWYgKHVzZV9tbWlvX2ZsaXAocmlu Zywgb2JqKSkgewo+IC0JCXJldCA9IGludGVsX3F1ZXVlX21taW9fZmxpcChkZXYsIGNydGMsIGZi LCBvYmosIHJpbmcsCj4gLQkJCQkJICAgIHBhZ2VfZmxpcF9mbGFncyk7Cj4gKwkJcmV0ID0gaW50 ZWxfcXVldWVfbW1pb19mbGlwKGludGVsX2NydGMsIHJxKTsKPiAgIAkJaWYgKHJldCkKPiAgIAkJ CWdvdG8gY2xlYW51cF91bnBpbjsKPiAtCj4gLQkJd29yay0+ZmxpcF9xdWV1ZWRfc2Vxbm8gPSBv YmotPmxhc3Rfd3JpdGVfc2Vxbm87Cj4gLQkJd29yay0+ZmxpcF9xdWV1ZWRfcmluZyA9IG9iai0+ cmluZzsKPiAgIAl9IGVsc2Ugewo+IC0JCXJldCA9IGRldl9wcml2LT5kaXNwbGF5LnF1ZXVlX2Zs aXAoZGV2LCBjcnRjLCBmYiwgb2JqLCByaW5nLAo+ICsJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpj dHggPSBlbmdpbmUtPmRlZmF1bHRfY29udGV4dDsKPiArCQlpZiAob2JqLT5sYXN0X3dyaXRlLnJl cXVlc3QpCj4gKwkJCWN0eCA9IG9iai0+bGFzdF93cml0ZS5yZXF1ZXN0LT5jdHg7Cj4gKwkJcnEg PSBpbnRlbF9lbmdpbmVfYWxsb2NfcmVxdWVzdChlbmdpbmUsIGN0eCk7Cj4gKwkJaWYgKElTX0VS UihycSkpIHsKPiArCQkJcmV0ID0gUFRSX0VSUihycSk7Cj4gKwkJCWdvdG8gY2xlYW51cF9wZW5k aW5nOwo+ICsJCX0KPiArCj4gKwkJcmV0ID0gaW50ZWxfcGluX2FuZF9mZW5jZV9mYl9vYmooZGV2 LCBvYmosIHJxKTsKPiArCQlpZiAocmV0KQo+ICsJCQlnb3RvIGNsZWFudXBfcnE7Cj4gKwo+ICsJ CXdvcmstPmd0dF9vZmZzZXQgPQo+ICsJCQlpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSAr IGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0Owo+ICsKPiArCQlyZXQgPSBkZXZfcHJpdi0+ZGlz cGxheS5xdWV1ZV9mbGlwKHJxLCBpbnRlbF9jcnRjLCBmYiwgb2JqLAo+ICAgCQkJCQkJICAgcGFn ZV9mbGlwX2ZsYWdzKTsKPiAgIAkJaWYgKHJldCkKPiAgIAkJCWdvdG8gY2xlYW51cF91bnBpbjsK PiAgIAo+IC0JCXdvcmstPmZsaXBfcXVldWVkX3NlcW5vID0gaW50ZWxfcmluZ19nZXRfc2Vxbm8o cmluZyk7Cj4gLQkJd29yay0+ZmxpcF9xdWV1ZWRfcmluZyA9IHJpbmc7Cj4gKwkJaW50ZWxfbWFy a19wYWdlX2ZsaXBfYWN0aXZlKGludGVsX2NydGMpOwo+ICsKPiArCQlyZXQgPSBpOTE1X3JlcXVl c3RfY29tbWl0KHJxKTsKPiArCQlpZiAocmV0KQo+ICsJCQlnb3RvIGNsZWFudXBfdW5waW47Cj4g ICAJfQo+ICAgCj4gKwl3b3JrLT5mbGlwX3F1ZXVlZF9yZXF1ZXN0ID0gcnE7Cj4gICAJd29yay0+ ZmxpcF9xdWV1ZWRfdmJsYW5rID0gZHJtX3ZibGFua19jb3VudChkZXYsIGludGVsX2NydGMtPnBp cGUpOwo+ICAgCXdvcmstPmVuYWJsZV9zdGFsbF9jaGVjayA9IHRydWU7Cj4gICAKPiBAQCAtOTk4 NSw2ICs5OTQyLDggQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX3BhZ2VfZmxpcChzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCj4gICAKPiAgIGNsZWFudXBfdW5waW46Cj4gICAJaW50ZWxfdW5waW5fZmJf b2JqKG9iaik7Cj4gK2NsZWFudXBfcnE6Cj4gKwlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKPiAgIGNs ZWFudXBfcGVuZGluZzoKPiAgIAlhdG9taWNfZGVjKCZpbnRlbF9jcnRjLT51bnBpbl93b3JrX2Nv dW50KTsKPiAgIAljcnRjLT5wcmltYXJ5LT5mYiA9IG9sZF9mYjsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kcnYuaAo+IGluZGV4IDA3Y2UwNDY4M2MzMC4uYjAxMTVlODFmYjZlIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmgKPiBAQCAtMzgyLDExICszODIsNiBAQCBzdHJ1Y3QgaW50ZWxfcGlw ZV93bSB7Cj4gICAJYm9vbCBzcHJpdGVzX3NjYWxlZDsKPiAgIH07Cj4gICAKPiAtc3RydWN0IGlu dGVsX21taW9fZmxpcCB7Cj4gLQl1MzIgc2Vxbm87Cj4gLQl1MzIgcmluZ19pZDsKPiAtfTsKPiAt Cj4gICBzdHJ1Y3QgaW50ZWxfY3J0YyB7Cj4gICAJc3RydWN0IGRybV9jcnRjIGJhc2U7Cj4gICAJ ZW51bSBwaXBlIHBpcGU7Cj4gQEAgLTQzNyw3ICs0MzIsNyBAQCBzdHJ1Y3QgaW50ZWxfY3J0YyB7 Cj4gICAJfSB3bTsKPiAgIAo+ICAgCWludCBzY2FubGluZV9vZmZzZXQ7Cj4gLQlzdHJ1Y3QgaW50 ZWxfbW1pb19mbGlwIG1taW9fZmxpcDsKPiArCXN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICptbWlv X2ZsaXA7Cj4gICB9Owo+ICAgCj4gICBzdHJ1Y3QgaW50ZWxfcGxhbmVfd21fcGFyYW1ldGVycyB7 Cj4gQEAgLTY3NCw4ICs2NjksNyBAQCBzdHJ1Y3QgaW50ZWxfdW5waW5fd29yayB7Cj4gICAjZGVm aW5lIElOVEVMX0ZMSVBfQ09NUExFVEUJMgo+ICAgCXUzMiBmbGlwX2NvdW50Owo+ICAgCXUzMiBn dHRfb2Zmc2V0Owo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZmxpcF9xdWV1ZWRfcmluZzsK PiAtCXUzMiBmbGlwX3F1ZXVlZF9zZXFubzsKPiArCXN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpm bGlwX3F1ZXVlZF9yZXF1ZXN0Owo+ICAgCWludCBmbGlwX3F1ZXVlZF92Ymxhbms7Cj4gICAJaW50 IGZsaXBfcmVhZHlfdmJsYW5rOwo+ICAgCWJvb2wgZW5hYmxlX3N0YWxsX2NoZWNrOwo+IEBAIC03 OTUsNyArNzg5LDcgQEAgYm9vbCBpbnRlbF9oYXNfcGVuZGluZ19mYl91bnBpbihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiAgIGludCBpbnRlbF9wY2hfcmF3Y2xrKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwo+ICAgdm9pZCBpbnRlbF9tYXJrX2J1c3koc3RydWN0IGRybV9kZXZpY2UgKmRldik7 Cj4gICB2b2lkIGludGVsX2ZiX29ial9pbnZhbGlkYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCj4gLQkJCSAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gKwkJ CSAgICAgc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKTsKPiAgIHZvaWQgaW50ZWxfZnJvbnRi dWZmZXJfZmxpcF9wcmVwYXJlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJICAgIHVu c2lnbmVkIGZyb250YnVmZmVyX2JpdHMpOwo+ICAgdm9pZCBpbnRlbF9mcm9udGJ1ZmZlcl9mbGlw X2NvbXBsZXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gQEAgLTg1Myw3ICs4NDcsNyBAQCB2 b2lkIGludGVsX3JlbGVhc2VfbG9hZF9kZXRlY3RfcGlwZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLAo+ICAgCQkJCSAgICBzdHJ1Y3QgaW50ZWxfbG9hZF9kZXRlY3RfcGlwZSAqb2xk KTsKPiAgIGludCBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAo+ICAgCQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJ CSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpwaXBlbGluZWQpOwo+ICsJCQkgICAgICAg c3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnBpcGVsaW5lZCk7Cj4gICB2b2lkIGludGVsX3VucGlu X2ZiX29iaihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKPiAgIHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKgo+ICAgX19pbnRlbF9mcmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJj LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+IGluZGV4IGJkMWIyOGQ5OTky MC4uZDQ3YWY5MzFkNWFiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBAQCAtMjA0 LDU3ICsyMDQsMTIgQEAgZW51bSB7Cj4gICB9Owo+ICAgI2RlZmluZSBHRU44X0NUWF9JRF9TSElG VCAzMgo+ICAgCj4gLS8qKgo+IC0gKiBpbnRlbF9zYW5pdGl6ZV9lbmFibGVfZXhlY2xpc3RzKCkg LSBzYW5pdGl6ZSBpOTE1LmVuYWJsZV9leGVjbGlzdHMKPiAtICogQGRldjogRFJNIGRldmljZS4K PiAtICogQGVuYWJsZV9leGVjbGlzdHM6IHZhbHVlIG9mIGk5MTUuZW5hYmxlX2V4ZWNsaXN0cyBt b2R1bGUgcGFyYW1ldGVyLgo+IC0gKgo+IC0gKiBPbmx5IGNlcnRhaW4gcGxhdGZvcm1zIHN1cHBv cnQgRXhlY2xpc3RzICh0aGUgcHJlcmVxdWlzaXRlcyBiZWluZwo+IC0gKiBzdXBwb3J0IGZvciBM b2dpY2FsIFJpbmcgQ29udGV4dHMgYW5kIEFsaWFzaW5nIFBQR1RUIG9yIGJldHRlciksCj4gLSAq IGFuZCBvbmx5IHdoZW4gZW5hYmxlZCB2aWEgbW9kdWxlIHBhcmFtZXRlci4KPiAtICoKPiAtICog UmV0dXJuOiAxIGlmIEV4ZWNsaXN0cyBpcyBzdXBwb3J0ZWQgYW5kIGhhcyB0byBiZSBlbmFibGVk Lgo+IC0gKi8KPiAtaW50IGludGVsX3Nhbml0aXplX2VuYWJsZV9leGVjbGlzdHMoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgaW50IGVuYWJsZV9leGVjbGlzdHMpCj4gLXsKPiAtCVdBUk5fT04oaTkx NS5lbmFibGVfcHBndHQgPT0gLTEpOwo+IC0KPiAtCWlmIChlbmFibGVfZXhlY2xpc3RzID09IDAp Cj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JaWYgKEhBU19MT0dJQ0FMX1JJTkdfQ09OVEVYVFMoZGV2 KSAmJiBVU0VTX1BQR1RUKGRldikgJiYKPiAtCSAgICBpOTE1LnVzZV9tbWlvX2ZsaXAgPj0gMCkK PiAtCQlyZXR1cm4gMTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGlu dGVsX2V4ZWNsaXN0c19jdHhfaWQoKSAtIGdldCB0aGUgRXhlY2xpc3RzIENvbnRleHQgSUQKPiAt ICogQGN0eF9vYmo6IExvZ2ljYWwgUmluZyBDb250ZXh0IGJhY2tpbmcgb2JqZWN0Lgo+IC0gKgo+ IC0gKiBEbyBub3QgY29uZnVzZSB3aXRoIGN0eC0+aWQhIFVuZm9ydHVuYXRlbHkgd2UgaGF2ZSBh IG5hbWUgb3ZlcmxvYWQKPiAtICogaGVyZTogdGhlIG9sZCBjb250ZXh0IElEIHdlIHBhc3MgdG8g dXNlcnNwYWNlIGFzIGEgaGFuZGxlciBzbyB0aGF0Cj4gLSAqIHRoZXkgY2FuIHJlZmVyIHRvIGEg Y29udGV4dCwgYW5kIHRoZSBuZXcgY29udGV4dCBJRCB3ZSBwYXNzIHRvIHRoZQo+IC0gKiBFTFNQ IHNvIHRoYXQgdGhlIEdQVSBjYW4gaW5mb3JtIHVzIG9mIHRoZSBjb250ZXh0IHN0YXR1cyB2aWEK PiAtICogaW50ZXJydXB0cy4KPiAtICoKPiAtICogUmV0dXJuOiAyMC1iaXRzIGdsb2JhbGx5IHVu aXF1ZSBjb250ZXh0IElELgo+IC0gKi8KPiAtdTMyIGludGVsX2V4ZWNsaXN0c19jdHhfaWQoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmopCj4gK3N0YXRpYyB1aW50NjRfdCBleGVj bGlzdHNfY3R4X2Rlc2NyaXB0b3Ioc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmos Cj4gKwkJCQkJIHUzMiBjdHhfaWQpCj4gICB7Cj4gLQl1MzIgbHJjYSA9IGk5MTVfZ2VtX29ial9n Z3R0X29mZnNldChjdHhfb2JqKTsKPiAtCj4gLQkvKiBMUkNBIGlzIHJlcXVpcmVkIHRvIGJlIDRL IGFsaWduZWQgc28gdGhlIG1vcmUgc2lnbmlmaWNhbnQgMjAgYml0cwo+IC0JICogYXJlIGdsb2Jh bGx5IHVuaXF1ZSAqLwo+IC0JcmV0dXJuIGxyY2EgPj4gMTI7Cj4gLX0KPiAtCj4gLXN0YXRpYyB1 aW50NjRfdCBleGVjbGlzdHNfY3R4X2Rlc2NyaXB0b3Ioc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKmN0eF9vYmopCj4gLXsKPiAtCXVpbnQ2NF90IGRlc2M7Cj4gLQl1aW50NjRfdCBscmNhID0g aTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KGN0eF9vYmopOwo+ICsJdWludDY0X3QgZGVzYywgbHJj YTsKPiAgIAo+ICsJbHJjYSA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChjdHhfb2JqKTsKPiAg IAlXQVJOX09OKGxyY2EgJiAweEZGRkZGRkZGMDAwMDBGRkZVTEwpOwo+ICAgCj4gICAJZGVzYyA9 IEdFTjhfQ1RYX1ZBTElEOwo+IEBAIC0yNjIsNyArMjE3LDcgQEAgc3RhdGljIHVpbnQ2NF90IGV4 ZWNsaXN0c19jdHhfZGVzY3JpcHRvcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqY3R4X29i aikKPiAgIAlkZXNjIHw9IEdFTjhfQ1RYX0wzTExDX0NPSEVSRU5UOwo+ICAgCWRlc2MgfD0gR0VO OF9DVFhfUFJJVklMRUdFOwo+ICAgCWRlc2MgfD0gbHJjYTsKPiAtCWRlc2MgfD0gKHU2NClpbnRl bF9leGVjbGlzdHNfY3R4X2lkKGN0eF9vYmopIDw8IEdFTjhfQ1RYX0lEX1NISUZUOwo+ICsJZGVz YyB8PSAodTY0KWN0eF9pZCA8PCBHRU44X0NUWF9JRF9TSElGVDsKPiAgIAo+ICAgCS8qIFRPRE86 IFdhRGlzYWJsZUxpdGVSZXN0b3JlIHdoZW4gd2Ugc3RhcnQgdXNpbmcgc2VtYXBob3JlCj4gICAJ ICogc2lnbmFsbGluZyBiZXR3ZWVuIENvbW1hbmQgU3RyZWFtZXJzICovCj4gQEAgLTI3MSwyNiAr MjI2LDM5IEBAIHN0YXRpYyB1aW50NjRfdCBleGVjbGlzdHNfY3R4X2Rlc2NyaXB0b3Ioc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmopCj4gICAJcmV0dXJuIGRlc2M7Cj4gICB9Cj4g ICAKPiAtc3RhdGljIHZvaWQgZXhlY2xpc3RzX2Vsc3Bfd3JpdGUoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZywKPiAtCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqY3R4X29iajAs Cj4gLQkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmoxKQo+ICtzdGF0aWMg dTMyIGV4ZWNsaXN0c19jdHhfd3JpdGVfdGFpbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLCB1MzIgdGFpbCwgdTMyIHRhZykKPiArewo+ICsJdWludDMyX3QgKnJlZ19zdGF0ZTsKPiAr Cj4gKwlyZWdfc3RhdGUgPSBrbWFwX2F0b21pYyhpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Uob2Jq LCAxKSk7Cj4gKwlyZWdfc3RhdGVbQ1RYX1JJTkdfVEFJTCsxXSA9IHRhaWw7Cj4gKwlrdW5tYXBf YXRvbWljKHJlZ19zdGF0ZSk7Cj4gKwo+ICsJcmV0dXJuIGV4ZWNsaXN0c19jdHhfZGVzY3JpcHRv cihvYmosIHRhZyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJtaXRfcGFp cihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkgIHN0cnVjdCBpOTE1X2dl bV9yZXF1ZXN0ICpycVsyXSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7Cj4gLQl1aW50NjRfdCB0ZW1wID0gMDsKPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiArCXVp bnQ2NF90IHRtcDsKPiAgIAl1aW50MzJfdCBkZXNjWzRdOwo+ICAgCXVuc2lnbmVkIGxvbmcgZmxh Z3M7Cj4gICAKPiAgIAkvKiBYWFg6IFlvdSBtdXN0IGFsd2F5cyB3cml0ZSBib3RoIGRlc2NyaXB0 b3JzIGluIHRoZSBvcmRlciBiZWxvdy4gKi8KPiAtCWlmIChjdHhfb2JqMSkKPiAtCQl0ZW1wID0g ZXhlY2xpc3RzX2N0eF9kZXNjcmlwdG9yKGN0eF9vYmoxKTsKPiAtCWVsc2UKPiAtCQl0ZW1wID0g MDsKPiAtCWRlc2NbMV0gPSAodTMyKSh0ZW1wID4+IDMyKTsKPiAtCWRlc2NbMF0gPSAodTMyKXRl bXA7Cj4gICAKPiAtCXRlbXAgPSBleGVjbGlzdHNfY3R4X2Rlc2NyaXB0b3IoY3R4X29iajApOwo+ IC0JZGVzY1szXSA9ICh1MzIpKHRlbXAgPj4gMzIpOwo+IC0JZGVzY1syXSA9ICh1MzIpdGVtcDsK PiArCXRtcCA9IGV4ZWNsaXN0c19jdHhfd3JpdGVfdGFpbChycVswXS0+Y3R4LT5yaW5nW2VuZ2lu ZS0+aWRdLnN0YXRlLAo+ICsJCQkJICAgICAgIHJxWzBdLT50YWlsLCBycVswXS0+dGFnKTsKPiAr CWRlc2NbM10gPSB1cHBlcl8zMl9iaXRzKHRtcCk7Cj4gKwlkZXNjWzJdID0gbG93ZXJfMzJfYml0 cyh0bXApOwo+ICsKPiArCWlmIChycVsxXSkKPiArCQl0bXAgPSBleGVjbGlzdHNfY3R4X3dyaXRl X3RhaWwocnFbMV0tPmN0eC0+cmluZ1tlbmdpbmUtPmlkXS5zdGF0ZSwKPiArCQkJCQkgICAgICAg cnFbMV0tPnRhaWwsIHJxWzFdLT50YWcpOwo+ICsJZWxzZQo+ICsJCXRtcCA9IDA7Cj4gKwlkZXNj WzFdID0gdXBwZXJfMzJfYml0cyh0bXApOwo+ICsJZGVzY1swXSA9IGxvd2VyXzMyX2JpdHModG1w KTsKPiAgIAo+ICAgCS8qIFNldCBGb3JjZSBXYWtldXAgYml0IHRvIHByZXZlbnQgR1QgZnJvbSBl bnRlcmluZyBDNiB3aGlsZSBFTFNQIHdyaXRlcwo+ICAgCSAqIGFyZSBpbiBwcm9ncmVzcy4KPiBA QCAtMzA0LDE0ICsyNzIsMTQgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2Vsc3Bfd3JpdGUoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAgIAkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5m b3JjZV93YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gICAJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBmbGFncyk7Cj4gICAKPiAtCUk5MTVf V1JJVEUoUklOR19FTFNQKHJpbmcpLCBkZXNjWzFdKTsKPiAtCUk5MTVfV1JJVEUoUklOR19FTFNQ KHJpbmcpLCBkZXNjWzBdKTsKPiAtCUk5MTVfV1JJVEUoUklOR19FTFNQKHJpbmcpLCBkZXNjWzNd KTsKPiArCUk5MTVfV1JJVEUoUklOR19FTFNQKGVuZ2luZSksIGRlc2NbMV0pOwo+ICsJSTkxNV9X UklURShSSU5HX0VMU1AoZW5naW5lKSwgZGVzY1swXSk7Cj4gKwlJOTE1X1dSSVRFKFJJTkdfRUxT UChlbmdpbmUpLCBkZXNjWzNdKTsKPiAgIAkvKiBUaGUgY29udGV4dCBpcyBhdXRvbWF0aWNhbGx5 IGxvYWRlZCBhZnRlciB0aGUgZm9sbG93aW5nICovCj4gLQlJOTE1X1dSSVRFKFJJTkdfRUxTUChy aW5nKSwgZGVzY1syXSk7Cj4gKwlJOTE1X1dSSVRFKFJJTkdfRUxTUChlbmdpbmUpLCBkZXNjWzJd KTsKPiAgIAo+ICAgCS8qIEVMU1AgaXMgYSB3byByZWdpc3Rlciwgc28gdXNlIGFub3RoZXIgbmVh cmJ5IHJlZyBmb3IgcG9zdGluZyBpbnN0ZWFkICovCj4gLQlQT1NUSU5HX1JFQUQoUklOR19FWEVD TElTVF9TVEFUVVMocmluZykpOwo+ICsJUE9TVElOR19SRUFEKFJJTkdfRVhFQ0xJU1RfU1RBVFVT KGVuZ2luZSkpOwo+ICAgCj4gICAJLyogUmVsZWFzZSBGb3JjZSBXYWtldXAgKHNlZSB0aGUgYmln IGNvbW1lbnQgYWJvdmUpLiAqLwo+ICAgCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5j b3JlLmxvY2ssIGZsYWdzKTsKPiBAQCAtMzIwLDExNSArMjg4LDU4IEBAIHN0YXRpYyB2b2lkIGV4 ZWNsaXN0c19lbHNwX3dyaXRlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gICAJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBmbGFncyk7Cj4gICB9 Cj4gICAKPiAtc3RhdGljIGludCBleGVjbGlzdHNfY3R4X3dyaXRlX3RhaWwoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKmN0eF9vYmosIHUzMiB0YWlsKQo+IC17Cj4gLQlzdHJ1Y3QgcGFnZSAq cGFnZTsKPiAtCXVpbnQzMl90ICpyZWdfc3RhdGU7Cj4gLQo+IC0JcGFnZSA9IGk5MTVfZ2VtX29i amVjdF9nZXRfcGFnZShjdHhfb2JqLCAxKTsKPiAtCXJlZ19zdGF0ZSA9IGttYXBfYXRvbWljKHBh Z2UpOwo+IC0KPiAtCXJlZ19zdGF0ZVtDVFhfUklOR19UQUlMKzFdID0gdGFpbDsKPiAtCj4gLQlr dW5tYXBfYXRvbWljKHJlZ19zdGF0ZSk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0 YXRpYyBpbnQgZXhlY2xpc3RzX3N1Ym1pdF9jb250ZXh0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmcsCj4gLQkJCQkgICAgc3RydWN0IGludGVsX2NvbnRleHQgKnRvMCwgdTMyIHRhaWwwLAo+ IC0JCQkJICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICp0bzEsIHUzMiB0YWlsMSkKPiArc3RhdGlj IHUxNiBuZXh0X3RhZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICB7Cj4gLQlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqY3R4X29iajA7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqY3R4X29iajEgPSBOVUxMOwo+IC0KPiAtCWN0eF9vYmowID0gdG8wLT5lbmdp bmVbcmluZy0+aWRdLnN0YXRlOwo+IC0JQlVHX09OKCFjdHhfb2JqMCk7Cj4gLQlXQVJOX09OKCFp OTE1X2dlbV9vYmpfaXNfcGlubmVkKGN0eF9vYmowKSk7Cj4gLQo+IC0JZXhlY2xpc3RzX2N0eF93 cml0ZV90YWlsKGN0eF9vYmowLCB0YWlsMCk7Cj4gLQo+IC0JaWYgKHRvMSkgewo+IC0JCWN0eF9v YmoxID0gdG8xLT5lbmdpbmVbcmluZy0+aWRdLnN0YXRlOwo+IC0JCUJVR19PTighY3R4X29iajEp Owo+IC0JCVdBUk5fT04oIWk5MTVfZ2VtX29ial9pc19waW5uZWQoY3R4X29iajEpKTsKPiAtCj4g LQkJZXhlY2xpc3RzX2N0eF93cml0ZV90YWlsKGN0eF9vYmoxLCB0YWlsMSk7Cj4gLQl9Cj4gLQo+ IC0JZXhlY2xpc3RzX2Vsc3Bfd3JpdGUocmluZywgY3R4X29iajAsIGN0eF9vYmoxKTsKPiAtCj4g LQlyZXR1cm4gMDsKPiArCS8qIHN0YXR1cyB0YWdzIGFyZSBsaW1pdGVkIHRvIDIwYiwgc28gd2Ug dXNlIGEgdTE2IGZvciBjb252ZW5pZW5jZSAqLwo+ICsJaWYgKCsrZW5naW5lLT5uZXh0X3RhZyA9 PSAwKQo+ICsJCSsrZW5naW5lLT5uZXh0X3RhZzsKPiArCVdBUk5fT04oKHMxNikoZW5naW5lLT5u ZXh0X3RhZyAtIGVuZ2luZS0+dGFnKSA8IDApOwo+ICsJcmV0dXJuIGVuZ2luZS0+bmV4dF90YWc7 Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgZXhlY2xpc3RzX2NvbnRleHRfdW5xdWV1ZShzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICtzdGF0aWMgdm9pZCBleGVjbGlzdHNfc3VibWl0 KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAtCXN0cnVjdCBpbnRlbF9j dHhfc3VibWl0X3JlcXVlc3QgKnJlcTAgPSBOVUxMLCAqcmVxMSA9IE5VTEw7Cj4gLQlzdHJ1Y3Qg aW50ZWxfY3R4X3N1Ym1pdF9yZXF1ZXN0ICpjdXJzb3IgPSBOVUxMLCAqdG1wID0gTlVMTDsKPiAt CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZh dGU7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnFbMl0gPSB7fTsKPiArCWludCBpID0g MDsKPiAgIAo+IC0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZyaW5nLT5leGVjbGlzdF9sb2NrKTsKPiAt Cj4gLQlpZiAobGlzdF9lbXB0eSgmcmluZy0+ZXhlY2xpc3RfcXVldWUpKQo+IC0JCXJldHVybjsK PiArCWFzc2VydF9zcGluX2xvY2tlZCgmZW5naW5lLT5pcnFsb2NrKTsKPiAgIAo+ICAgCS8qIFRy eSB0byByZWFkIGluIHBhaXJzICovCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3Vyc29y LCB0bXAsICZyaW5nLT5leGVjbGlzdF9xdWV1ZSwKPiAtCQkJCSBleGVjbGlzdF9saW5rKSB7Cj4g LQkJaWYgKCFyZXEwKSB7Cj4gLQkJCXJlcTAgPSBjdXJzb3I7Cj4gLQkJfSBlbHNlIGlmIChyZXEw LT5jdHggPT0gY3Vyc29yLT5jdHgpIHsKPiArCXdoaWxlICghbGlzdF9lbXB0eSgmZW5naW5lLT5w ZW5kaW5nKSkgewo+ICsJCXN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpuZXh0Owo+ICsKPiArCQlu ZXh0ID0gbGlzdF9maXJzdF9lbnRyeSgmZW5naW5lLT5wZW5kaW5nLAo+ICsJCQkJCXR5cGVvZigq bmV4dCksCj4gKwkJCQkJZW5naW5lX2xpc3QpOwo+ICsKPiArCQlpZiAocnFbaV0gPT0gTlVMTCkg ewo+ICtuZXdfc2xvdDoKPiArCQkJbmV4dC0+dGFnID0gbmV4dF90YWcoZW5naW5lKTsKPiArCQkJ cnFbaV0gPSBuZXh0Owo+ICsJCX0gZWxzZSBpZiAocnFbaV0tPmN0eCA9PSBuZXh0LT5jdHgpIHsK PiAgIAkJCS8qIFNhbWUgY3R4OiBpZ25vcmUgZmlyc3QgcmVxdWVzdCwgYXMgc2Vjb25kIHJlcXVl c3QKPiAgIAkJCSAqIHdpbGwgdXBkYXRlIHRhaWwgcGFzdCBmaXJzdCByZXF1ZXN0J3Mgd29ya2xv YWQgKi8KPiAtCQkJY3Vyc29yLT5lbHNwX3N1Ym1pdHRlZCA9IHJlcTAtPmVsc3Bfc3VibWl0dGVk Owo+IC0JCQlsaXN0X2RlbCgmcmVxMC0+ZXhlY2xpc3RfbGluayk7Cj4gLQkJCXF1ZXVlX3dvcmso ZGV2X3ByaXYtPndxLCAmcmVxMC0+d29yayk7Cj4gLQkJCXJlcTAgPSBjdXJzb3I7Cj4gKwkJCW5l eHQtPnRhZyA9IHJxW2ldLT50YWc7Cj4gKwkJCXJxW2ldID0gbmV4dDsKPiAgIAkJfSBlbHNlIHsK PiAtCQkJcmVxMSA9IGN1cnNvcjsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCVdB Uk5fT04ocmVxMSAmJiByZXExLT5lbHNwX3N1Ym1pdHRlZCk7Cj4gLQo+IC0JV0FSTl9PTihleGVj bGlzdHNfc3VibWl0X2NvbnRleHQocmluZywgcmVxMC0+Y3R4LCByZXEwLT50YWlsLAo+IC0JCQkJ CSByZXExID8gcmVxMS0+Y3R4IDogTlVMTCwKPiAtCQkJCQkgcmVxMSA/IHJlcTEtPnRhaWwgOiAw KSk7Cj4gLQo+IC0JcmVxMC0+ZWxzcF9zdWJtaXR0ZWQrKzsKPiAtCWlmIChyZXExKQo+IC0JCXJl cTEtPmVsc3Bfc3VibWl0dGVkKys7Cj4gLX0KPiArCQkJaWYgKCsraSA9PSBBUlJBWV9TSVpFKHJx KSkKPiArCQkJCWJyZWFrOwo+ICAgCj4gLXN0YXRpYyBib29sIGV4ZWNsaXN0c19jaGVja19yZW1v dmVfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCQkJCSAgIHUzMiBy ZXF1ZXN0X2lkKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBy aW5nLT5kZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGludGVsX2N0eF9zdWJtaXRfcmVxdWVz dCAqaGVhZF9yZXE7Cj4gLQo+IC0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZyaW5nLT5leGVjbGlzdF9s b2NrKTsKPiAtCj4gLQloZWFkX3JlcSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmcmluZy0+ ZXhlY2xpc3RfcXVldWUsCj4gLQkJCQkJICAgIHN0cnVjdCBpbnRlbF9jdHhfc3VibWl0X3JlcXVl c3QsCj4gLQkJCQkJICAgIGV4ZWNsaXN0X2xpbmspOwo+IC0KPiAtCWlmIChoZWFkX3JlcSAhPSBO VUxMKSB7Cj4gLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmogPQo+IC0JCQkJ aGVhZF9yZXEtPmN0eC0+ZW5naW5lW3JpbmctPmlkXS5zdGF0ZTsKPiAtCQlpZiAoaW50ZWxfZXhl Y2xpc3RzX2N0eF9pZChjdHhfb2JqKSA9PSByZXF1ZXN0X2lkKSB7Cj4gLQkJCVdBUk4oaGVhZF9y ZXEtPmVsc3Bfc3VibWl0dGVkID09IDAsCj4gLQkJCSAgICAgIk5ldmVyIHN1Ym1pdHRlZCBoZWFk IHJlcXVlc3RcbiIpOwo+IC0KPiAtCQkJaWYgKC0taGVhZF9yZXEtPmVsc3Bfc3VibWl0dGVkIDw9 IDApIHsKPiAtCQkJCWxpc3RfZGVsKCZoZWFkX3JlcS0+ZXhlY2xpc3RfbGluayk7Cj4gLQkJCQlx dWV1ZV93b3JrKGRldl9wcml2LT53cSwgJmhlYWRfcmVxLT53b3JrKTsKPiAtCQkJCXJldHVybiB0 cnVlOwo+IC0JCQl9Cj4gKwkJCWdvdG8gbmV3X3Nsb3Q7Cj4gICAJCX0KPiArCj4gKwkJLyogTW92 ZSB0byByZXF1ZXN0cyBpcyBzdGFnZWQgdmlhIHRoZSBzdWJtaXR0ZWQgbGlzdAo+ICsJCSAqIHNv IHRoYXQgd2UgY2FuIGtlZXAgdGhlIG1haW4gcmVxdWVzdCBsaXN0IG91dCBvZgo+ICsJCSAqIHRo ZSBzcGlubG9jayBjb3ZlcmFnZS4KPiArCQkgKi8KPiArCQlsaXN0X21vdmVfdGFpbCgmbmV4dC0+ ZW5naW5lX2xpc3QsICZlbmdpbmUtPnN1Ym1pdHRlZCk7Cj4gICAJfQo+ICAgCj4gLQlyZXR1cm4g ZmFsc2U7Cj4gKwlleGVjbGlzdHNfc3VibWl0X3BhaXIoZW5naW5lLCBycSk7Cj4gKwo+ICsJZW5n aW5lLT5leGVjbGlzdHNfc3VibWl0dGVkKys7Cj4gKwlpZiAocnFbMV0pCj4gKwkJZW5naW5lLT5l eGVjbGlzdHNfc3VibWl0dGVkKys7Cj4gICB9Cj4gICAKPiAgIC8qKgo+IEBAIC00MzgsMTMwOCAr MzQ5LDM3OCBAQCBzdGF0aWMgYm9vbCBleGVjbGlzdHNfY2hlY2tfcmVtb3ZlX3JlcXVlc3Qoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAgICAqIENoZWNrIHRoZSB1bnJlYWQgQ29udGV4 dCBTdGF0dXMgQnVmZmVycyBhbmQgbWFuYWdlIHRoZSBzdWJtaXNzaW9uIG9mIG5ldwo+ICAgICog Y29udGV4dHMgdG8gdGhlIEVMU1AgYWNjb3JkaW5nbHkuCj4gICAgKi8KPiAtdm9pZCBpbnRlbF9l eGVjbGlzdHNfaGFuZGxlX2N0eF9ldmVudHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykK PiArdm9pZCBpbnRlbF9leGVjbGlzdHNfaXJxX2hhbmRsZXIoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g cmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXUzMiBzdGF0dXNfcG9pbnRlcjsKPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiArCXVuc2lnbmVk IGxvbmcgZmxhZ3M7Cj4gICAJdTggcmVhZF9wb2ludGVyOwo+ICAgCXU4IHdyaXRlX3BvaW50ZXI7 Cj4gLQl1MzIgc3RhdHVzOwo+IC0JdTMyIHN0YXR1c19pZDsKPiAtCXUzMiBzdWJtaXRfY29udGV4 dHMgPSAwOwo+ICAgCj4gLQlzdGF0dXNfcG9pbnRlciA9IEk5MTVfUkVBRChSSU5HX0NPTlRFWFRf U1RBVFVTX1BUUihyaW5nKSk7Cj4gLQo+IC0JcmVhZF9wb2ludGVyID0gcmluZy0+bmV4dF9jb250 ZXh0X3N0YXR1c19idWZmZXI7Cj4gLQl3cml0ZV9wb2ludGVyID0gc3RhdHVzX3BvaW50ZXIgJiAw eDA3Owo+ICsJcmVhZF9wb2ludGVyID0gZW5naW5lLT5uZXh0X2NvbnRleHRfc3RhdHVzX2J1ZmZl cjsKPiArCXdyaXRlX3BvaW50ZXIgPSBJOTE1X1JFQUQoUklOR19DT05URVhUX1NUQVRVU19QVFIo ZW5naW5lKSkgJiAweDA3Owo+ICAgCWlmIChyZWFkX3BvaW50ZXIgPiB3cml0ZV9wb2ludGVyKQo+ ICAgCQl3cml0ZV9wb2ludGVyICs9IDY7Cj4gICAKPiAtCXNwaW5fbG9jaygmcmluZy0+ZXhlY2xp c3RfbG9jayk7Cj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5pcnFsb2NrLCBmbGFncyk7 Cj4gICAKPiAtCXdoaWxlIChyZWFkX3BvaW50ZXIgPCB3cml0ZV9wb2ludGVyKSB7Cj4gLQkJcmVh ZF9wb2ludGVyKys7Cj4gLQkJc3RhdHVzID0gSTkxNV9SRUFEKFJJTkdfQ09OVEVYVF9TVEFUVVNf QlVGKHJpbmcpICsKPiAtCQkJCShyZWFkX3BvaW50ZXIgJSA2KSAqIDgpOwo+IC0JCXN0YXR1c19p ZCA9IEk5MTVfUkVBRChSSU5HX0NPTlRFWFRfU1RBVFVTX0JVRihyaW5nKSArCj4gLQkJCQkocmVh ZF9wb2ludGVyICUgNikgKiA4ICsgNCk7Cj4gKwl3aGlsZSAocmVhZF9wb2ludGVyKysgPCB3cml0 ZV9wb2ludGVyKSB7Cj4gKwkJdTMyIHJlZyA9IChSSU5HX0NPTlRFWFRfU1RBVFVTX0JVRihlbmdp bmUpICsKPiArCQkJICAgKHJlYWRfcG9pbnRlciAlIDYpICogOCk7Cj4gKwkJdTMyIHN0YXR1cyA9 IEk5MTVfUkVBRChyZWcpOwo+ICAgCj4gICAJCWlmIChzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNf UFJFRU1QVEVEKSB7Cj4gLQkJCWlmIChzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfTElURV9SRVNU T1JFKSB7Cj4gLQkJCQlpZiAoZXhlY2xpc3RzX2NoZWNrX3JlbW92ZV9yZXF1ZXN0KHJpbmcsIHN0 YXR1c19pZCkpCj4gLQkJCQkJV0FSTigxLCAiTGl0ZSBSZXN0b3JlZCByZXF1ZXN0IHJlbW92ZWQg ZnJvbSBxdWV1ZVxuIik7Cj4gLQkJCX0gZWxzZQo+ICsJCQlpZiAoc3RhdHVzICYgR0VOOF9DVFhf U1RBVFVTX0xJVEVfUkVTVE9SRSkKPiArCQkJCVdBUk4oMSwgIkxpdGUgUmVzdG9yZWQgcmVxdWVz dCByZW1vdmVkIGZyb20gcXVldWVcbiIpOwo+ICsJCQllbHNlCj4gICAJCQkJV0FSTigxLCAiUHJl ZW1wdGlvbiB3aXRob3V0IExpdGUgUmVzdG9yZVxuIik7Cj4gICAJCX0KPiAgIAo+IC0JCSBpZiAo KHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19BQ1RJVkVfSURMRSkgfHwKPiAtCQkgICAgIChzdGF0 dXMgJiBHRU44X0NUWF9TVEFUVVNfRUxFTUVOVF9TV0lUQ0gpKSB7Cj4gLQkJCWlmIChleGVjbGlz dHNfY2hlY2tfcmVtb3ZlX3JlcXVlc3QocmluZywgc3RhdHVzX2lkKSkKPiAtCQkJCXN1Ym1pdF9j b250ZXh0cysrOwo+ICsJCWlmIChzdGF0dXMgJiAoR0VOOF9DVFhfU1RBVFVTX0FDVElWRV9JRExF IHwgR0VOOF9DVFhfU1RBVFVTX0VMRU1FTlRfU1dJVENIKSkgewo+ICsJCQllbmdpbmUtPnRhZyA9 IEk5MTVfUkVBRChyZWcgKyA0KTsKPiArCQkJZW5naW5lLT5leGVjbGlzdHNfc3VibWl0dGVkLS07 Cj4gICAJCX0KPiAgIAl9Cj4gICAKPiAtCWlmIChzdWJtaXRfY29udGV4dHMgIT0gMCkKPiAtCQll eGVjbGlzdHNfY29udGV4dF91bnF1ZXVlKHJpbmcpOwo+IC0KPiAtCXNwaW5fdW5sb2NrKCZyaW5n LT5leGVjbGlzdF9sb2NrKTsKPiArCWlmIChlbmdpbmUtPmV4ZWNsaXN0c19zdWJtaXR0ZWQgPCAy KQo+ICsJCWV4ZWNsaXN0c19zdWJtaXQoZW5naW5lKTsKPiAgIAo+IC0JV0FSTihzdWJtaXRfY29u dGV4dHMgPiAyLCAiTW9yZSB0aGFuIHR3byBjb250ZXh0IGNvbXBsZXRlIGV2ZW50cz9cbiIpOwo+ IC0JcmluZy0+bmV4dF9jb250ZXh0X3N0YXR1c19idWZmZXIgPSB3cml0ZV9wb2ludGVyICUgNjsK PiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+aXJxbG9jaywgZmxhZ3MpOwo+ICAg Cj4gLQlJOTE1X1dSSVRFKFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKHJpbmcpLAo+IC0JCSAgICgo dTMyKXJpbmctPm5leHRfY29udGV4dF9zdGF0dXNfYnVmZmVyICYgMHgwNykgPDwgOCk7Cj4gKwll bmdpbmUtPm5leHRfY29udGV4dF9zdGF0dXNfYnVmZmVyID0gd3JpdGVfcG9pbnRlciAlIDY7Cj4g KwlJOTE1X1dSSVRFKFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2luZSksCj4gKwkJICAgKCh1 MzIpZW5naW5lLT5uZXh0X2NvbnRleHRfc3RhdHVzX2J1ZmZlciAmIDB4MDcpIDw8IDgpOwo+ICAg fQo+ICAgCj4gLXN0YXRpYyB2b2lkIGV4ZWNsaXN0c19mcmVlX3JlcXVlc3RfdGFzayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCj4gK3N0YXRpYyBpbnQKPiArcG9wdWxhdGVfbHJfY29udGV4dChz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+ICsJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqY3R4X29iaiwKPiArCQkgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ ICAgewo+IC0Jc3RydWN0IGludGVsX2N0eF9zdWJtaXRfcmVxdWVzdCAqcmVxID0KPiAtCQljb250 YWluZXJfb2Yod29yaywgc3RydWN0IGludGVsX2N0eF9zdWJtaXRfcmVxdWVzdCwgd29yayk7Cj4g LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmVxLT5yaW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0KPiAtCWludGVs X3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPiAtCj4gLQltdXRleF9sb2NrKCZkZXYtPnN0cnVj dF9tdXRleCk7Cj4gLQlpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKHJlcS0+Y3R4KTsKPiAt CW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsJc3RydWN0IGludGVsX3Jpbmdi dWZmZXIgKnJpbmcgPSBjdHgtPnJpbmdbZW5naW5lLT5pZF0ucmluZzsKPiArCXN0cnVjdCBpOTE1 X2h3X3BwZ3R0ICpwcGd0dDsKPiArCXVpbnQzMl90ICpyZWdfc3RhdGU7Cj4gKwlpbnQgcmV0Owo+ ICAgCj4gLQlrZnJlZShyZXEpOwo+IC19Cj4gKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3Rv X2NwdV9kb21haW4oY3R4X29iaiwgdHJ1ZSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFQlVH X0RSSVZFUigiQ291bGQgbm90IHNldCB0byBDUFUgZG9tYWluXG4iKTsKPiArCQlyZXR1cm4gcmV0 Owo+ICsJfQo+ICAgCj4gLXN0YXRpYyBpbnQgZXhlY2xpc3RzX2NvbnRleHRfcXVldWUoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAtCQkJCSAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICp0 bywKPiAtCQkJCSAgIHUzMiB0YWlsKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfY3R4X3N1Ym1pdF9y ZXF1ZXN0ICpyZXEgPSBOVUxMLCAqY3Vyc29yOwo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXVuc2lnbmVkIGxvbmcgZmxh Z3M7Cj4gLQlpbnQgbnVtX2VsZW1lbnRzID0gMDsKPiArCXJldCA9IGk5MTVfZ2VtX29iamVjdF9n ZXRfcGFnZXMoY3R4X29iaik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFQlVHX0RSSVZFUigi Q291bGQgbm90IGdldCBvYmplY3QgcGFnZXNcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4g ICAKPiAtCXJlcSA9IGt6YWxsb2Moc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKPiAtCWlmIChy ZXEgPT0gTlVMTCkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCXJlcS0+Y3R4ID0gdG87Cj4gLQlp OTE1X2dlbV9jb250ZXh0X3JlZmVyZW5jZShyZXEtPmN0eCk7Cj4gLQlyZXEtPnJpbmcgPSByaW5n Owo+IC0JcmVxLT50YWlsID0gdGFpbDsKPiAtCUlOSVRfV09SSygmcmVxLT53b3JrLCBleGVjbGlz dHNfZnJlZV9yZXF1ZXN0X3Rhc2spOwo+ICsJLyogVGhlIHNlY29uZCBwYWdlIG9mIHRoZSBjb250 ZXh0IG9iamVjdCBjb250YWlucyBzb21lIGZpZWxkcyB3aGljaCBtdXN0Cj4gKwkgKiBiZSBzZXQg dXAgcHJpb3IgdG8gdGhlIGZpcnN0IGV4ZWN1dGlvbi4gKi8KPiArCXJlZ19zdGF0ZSA9IGttYXBf YXRvbWljKGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShjdHhfb2JqLCAxKSk7Cj4gICAKPiAtCWlu dGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiArCS8qIEEgY29udGV4dCBpcyBhY3R1YWxs eSBhIGJpZyBiYXRjaCBidWZmZXIgd2l0aCBzZXZlcmFsIE1JX0xPQURfUkVHSVNURVJfSU1NCj4g KwkgKiBjb21tYW5kcyBmb2xsb3dlZCBieSAocmVnLCB2YWx1ZSkgcGFpcnMuIFRoZSB2YWx1ZXMg d2UgYXJlIHNldHRpbmcgaGVyZSBhcmUKPiArCSAqIG9ubHkgZm9yIHRoZSBmaXJzdCBjb250ZXh0 IHJlc3RvcmU6IG9uIGEgc3Vic2VxdWVudCBzYXZlLCB0aGUgR1BVIHdpbGwKPiArCSAqIHJlY3Jl YXRlIHRoaXMgYmF0Y2hidWZmZXIgd2l0aCBuZXcgdmFsdWVzIChpbmNsdWRpbmcgYWxsIHRoZSBt aXNzaW5nCj4gKwkgKiBNSV9MT0FEX1JFR0lTVEVSX0lNTSBjb21tYW5kcyB0aGF0IHdlIGFyZSBu b3QgaW5pdGlhbGl6aW5nIGhlcmUpLiAqLwo+ICsJaWYgKGVuZ2luZS0+aWQgPT0gUkNTKQo+ICsJ CXJlZ19zdGF0ZVtDVFhfTFJJX0hFQURFUl8wXSA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDE0KTsK PiArCWVsc2UKPiArCQlyZWdfc3RhdGVbQ1RYX0xSSV9IRUFERVJfMF0gPSBNSV9MT0FEX1JFR0lT VEVSX0lNTSgxMSk7Cj4gKwlyZWdfc3RhdGVbQ1RYX0xSSV9IRUFERVJfMF0gfD0gTUlfTFJJX0ZP UkNFX1BPU1RFRDsKPiAgIAo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmV4ZWNsaXN0X2xv Y2ssIGZsYWdzKTsKPiArCXJlZ19zdGF0ZVtDVFhfQ09OVEVYVF9DT05UUk9MXSA9IFJJTkdfQ09O VEVYVF9DT05UUk9MKGVuZ2luZSk7Cj4gKwlyZWdfc3RhdGVbQ1RYX0NPTlRFWFRfQ09OVFJPTCsx XSA9Cj4gKwkJCV9NQVNLRURfQklUX0VOQUJMRSgoMTw8MykgfCBNSV9SRVNUT1JFX0lOSElCSVQp Owo+ICAgCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1cnNvciwgJnJpbmctPmV4ZWNsaXN0X3F1 ZXVlLCBleGVjbGlzdF9saW5rKQo+IC0JCWlmICgrK251bV9lbGVtZW50cyA+IDIpCj4gLQkJCWJy ZWFrOwo+ICsJcmVnX3N0YXRlW0NUWF9SSU5HX0hFQURdID0gUklOR19IRUFEKGVuZ2luZS0+bW1p b19iYXNlKTsKPiArCXJlZ19zdGF0ZVtDVFhfUklOR19IRUFEKzFdID0gMDsKPiArCXJlZ19zdGF0 ZVtDVFhfUklOR19UQUlMXSA9IFJJTkdfVEFJTChlbmdpbmUtPm1taW9fYmFzZSk7Cj4gKwlyZWdf c3RhdGVbQ1RYX1JJTkdfVEFJTCsxXSA9IDA7Cj4gKwlyZWdfc3RhdGVbQ1RYX1JJTkdfQlVGRkVS X1NUQVJUXSA9IFJJTkdfU1RBUlQoZW5naW5lLT5tbWlvX2Jhc2UpOwo+ICsJcmVnX3N0YXRlW0NU WF9SSU5HX0JVRkZFUl9TVEFSVCsxXSA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChyaW5nLT5v YmopOwo+ICsJcmVnX3N0YXRlW0NUWF9SSU5HX0JVRkZFUl9DT05UUk9MXSA9IFJJTkdfQ1RMKGVu Z2luZS0+bW1pb19iYXNlKTsKPiArCXJlZ19zdGF0ZVtDVFhfUklOR19CVUZGRVJfQ09OVFJPTCsx XSA9Cj4gKwkJCSgocmluZy0+c2l6ZSAtIFBBR0VfU0laRSkgJiBSSU5HX05SX1BBR0VTKSB8IFJJ TkdfVkFMSUQ7Cj4gICAKPiAtCWlmIChudW1fZWxlbWVudHMgPiAyKSB7Cj4gLQkJc3RydWN0IGlu dGVsX2N0eF9zdWJtaXRfcmVxdWVzdCAqdGFpbF9yZXE7Cj4gKwlyZWdfc3RhdGVbQ1RYX0JCX0hF QURfVV0gPSBlbmdpbmUtPm1taW9fYmFzZSArIDB4MTY4Owo+ICsJcmVnX3N0YXRlW0NUWF9CQl9I RUFEX1UrMV0gPSAwOwo+ICsJcmVnX3N0YXRlW0NUWF9CQl9IRUFEX0xdID0gZW5naW5lLT5tbWlv X2Jhc2UgKyAweDE0MDsKPiArCXJlZ19zdGF0ZVtDVFhfQkJfSEVBRF9MKzFdID0gMDsKPiArCXJl Z19zdGF0ZVtDVFhfQkJfU1RBVEVdID0gZW5naW5lLT5tbWlvX2Jhc2UgKyAweDExMDsKPiArCXJl Z19zdGF0ZVtDVFhfQkJfU1RBVEUrMV0gPSAoMTw8NSk7Cj4gICAKPiAtCQl0YWlsX3JlcSA9IGxp c3RfbGFzdF9lbnRyeSgmcmluZy0+ZXhlY2xpc3RfcXVldWUsCj4gLQkJCQkJICAgc3RydWN0IGlu dGVsX2N0eF9zdWJtaXRfcmVxdWVzdCwKPiAtCQkJCQkgICBleGVjbGlzdF9saW5rKTsKPiArCXJl Z19zdGF0ZVtDVFhfU0VDT05EX0JCX0hFQURfVV0gPSBlbmdpbmUtPm1taW9fYmFzZSArIDB4MTFj Owo+ICsJcmVnX3N0YXRlW0NUWF9TRUNPTkRfQkJfSEVBRF9VKzFdID0gMDsKPiArCXJlZ19zdGF0 ZVtDVFhfU0VDT05EX0JCX0hFQURfTF0gPSBlbmdpbmUtPm1taW9fYmFzZSArIDB4MTE0Owo+ICsJ cmVnX3N0YXRlW0NUWF9TRUNPTkRfQkJfSEVBRF9MKzFdID0gMDsKPiArCXJlZ19zdGF0ZVtDVFhf U0VDT05EX0JCX1NUQVRFXSA9IGVuZ2luZS0+bW1pb19iYXNlICsgMHgxMTg7Cj4gKwlyZWdfc3Rh dGVbQ1RYX1NFQ09ORF9CQl9TVEFURSsxXSA9IDA7Cj4gICAKPiAtCQlpZiAodG8gPT0gdGFpbF9y ZXEtPmN0eCkgewo+IC0JCQlXQVJOKHRhaWxfcmVxLT5lbHNwX3N1Ym1pdHRlZCAhPSAwLAo+IC0J CQkgICAgICJNb3JlIHRoYW4gMiBhbHJlYWR5LXN1Ym1pdHRlZCByZXFzIHF1ZXVlZFxuIik7Cj4g LQkJCWxpc3RfZGVsKCZ0YWlsX3JlcS0+ZXhlY2xpc3RfbGluayk7Cj4gLQkJCXF1ZXVlX3dvcmso ZGV2X3ByaXYtPndxLCAmdGFpbF9yZXEtPndvcmspOwo+IC0JCX0KPiArCWlmIChlbmdpbmUtPmlk ID09IFJDUykgewo+ICsJCS8qIFRPRE86IGFjY29yZGluZyB0byBCU3BlYywgdGhlIHJlZ2lzdGVy IHN0YXRlIGNvbnRleHQKPiArCQkgKiBmb3IgQ0hWIGRvZXMgbm90IGhhdmUgdGhlc2UuIE9UT0gs IHRoZXNlIHJlZ2lzdGVycyBkbwo+ICsJCSAqIGV4aXN0IGluIENIVi4gSSdtIHdhaXRpbmcgZm9y IGEgY2xhcmlmaWNhdGlvbiAqLwo+ICsJCXJlZ19zdGF0ZVtDVFhfQkJfUEVSX0NUWF9QVFJdID0g ZW5naW5lLT5tbWlvX2Jhc2UgKyAweDFjMDsKPiArCQlyZWdfc3RhdGVbQ1RYX0JCX1BFUl9DVFhf UFRSKzFdID0gMDsKPiArCQlyZWdfc3RhdGVbQ1RYX1JDU19JTkRJUkVDVF9DVFhdID0gZW5naW5l LT5tbWlvX2Jhc2UgKyAweDFjNDsKPiArCQlyZWdfc3RhdGVbQ1RYX1JDU19JTkRJUkVDVF9DVFgr MV0gPSAwOwo+ICsJCXJlZ19zdGF0ZVtDVFhfUkNTX0lORElSRUNUX0NUWF9PRkZTRVRdID0gZW5n aW5lLT5tbWlvX2Jhc2UgKyAweDFjODsKPiArCQlyZWdfc3RhdGVbQ1RYX1JDU19JTkRJUkVDVF9D VFhfT0ZGU0VUKzFdID0gMDsKPiAgIAl9Cj4gICAKPiAtCWxpc3RfYWRkX3RhaWwoJnJlcS0+ZXhl Y2xpc3RfbGluaywgJnJpbmctPmV4ZWNsaXN0X3F1ZXVlKTsKPiAtCWlmIChudW1fZWxlbWVudHMg PT0gMCkKPiAtCQlleGVjbGlzdHNfY29udGV4dF91bnF1ZXVlKHJpbmcpOwo+IC0KPiAtCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmV4ZWNsaXN0X2xvY2ssIGZsYWdzKTsKPiArCXJlZ19z dGF0ZVtDVFhfTFJJX0hFQURFUl8xXSA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDkpOwo+ICsJcmVn X3N0YXRlW0NUWF9MUklfSEVBREVSXzFdIHw9IE1JX0xSSV9GT1JDRV9QT1NURUQ7Cj4gKwlyZWdf c3RhdGVbQ1RYX0NUWF9USU1FU1RBTVBdID0gZW5naW5lLT5tbWlvX2Jhc2UgKyAweDNhODsKPiAr CXJlZ19zdGF0ZVtDVFhfQ1RYX1RJTUVTVEFNUCsxXSA9IDA7Cj4gICAKPiAtCXJldHVybiAwOwo+ IC19Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDNfVURXXSA9IEdFTjhfUklOR19QRFBfVURXKGVuZ2lu ZSwgMyk7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDNfTERXXSA9IEdFTjhfUklOR19QRFBfTERXKGVu Z2luZSwgMyk7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDJfVURXXSA9IEdFTjhfUklOR19QRFBfVURX KGVuZ2luZSwgMik7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDJfTERXXSA9IEdFTjhfUklOR19QRFBf TERXKGVuZ2luZSwgMik7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDFfVURXXSA9IEdFTjhfUklOR19Q RFBfVURXKGVuZ2luZSwgMSk7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDFfTERXXSA9IEdFTjhfUklO R19QRFBfTERXKGVuZ2luZSwgMSk7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDBfVURXXSA9IEdFTjhf UklOR19QRFBfVURXKGVuZ2luZSwgMCk7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDBfTERXXSA9IEdF TjhfUklOR19QRFBfTERXKGVuZ2luZSwgMCk7Cj4gICAKPiAtc3RhdGljIGludCBsb2dpY2FsX3Jp bmdfaW52YWxpZGF0ZV9hbGxfY2FjaGVzKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVm KQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nID0gcmluZ2J1Zi0+cmluZzsK PiAtCXVpbnQzMl90IGZsdXNoX2RvbWFpbnM7Cj4gLQlpbnQgcmV0Owo+ICsJcHBndHQgPSBjdHgt PnBwZ3R0ID86IGVuZ2luZS0+aTkxNS0+bW0uYWxpYXNpbmdfcHBndHQ7Cj4gKwlyZWdfc3RhdGVb Q1RYX1BEUDNfVURXKzFdID0gdXBwZXJfMzJfYml0cyhwcGd0dC0+cGRfZG1hX2FkZHJbM10pOwo+ ICsJcmVnX3N0YXRlW0NUWF9QRFAzX0xEVysxXSA9IGxvd2VyXzMyX2JpdHMocHBndHQtPnBkX2Rt YV9hZGRyWzNdKTsKPiArCXJlZ19zdGF0ZVtDVFhfUERQMl9VRFcrMV0gPSB1cHBlcl8zMl9iaXRz KHBwZ3R0LT5wZF9kbWFfYWRkclsyXSk7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDJfTERXKzFdID0g bG93ZXJfMzJfYml0cyhwcGd0dC0+cGRfZG1hX2FkZHJbMl0pOwo+ICsJcmVnX3N0YXRlW0NUWF9Q RFAxX1VEVysxXSA9IHVwcGVyXzMyX2JpdHMocHBndHQtPnBkX2RtYV9hZGRyWzFdKTsKPiArCXJl Z19zdGF0ZVtDVFhfUERQMV9MRFcrMV0gPSBsb3dlcl8zMl9iaXRzKHBwZ3R0LT5wZF9kbWFfYWRk clsxXSk7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDBfVURXKzFdID0gdXBwZXJfMzJfYml0cyhwcGd0 dC0+cGRfZG1hX2FkZHJbMF0pOwo+ICsJcmVnX3N0YXRlW0NUWF9QRFAwX0xEVysxXSA9IGxvd2Vy XzMyX2JpdHMocHBndHQtPnBkX2RtYV9hZGRyWzBdKTsKPiAgIAo+IC0JZmx1c2hfZG9tYWlucyA9 IDA7Cj4gLQlpZiAocmluZy0+Z3B1X2NhY2hlc19kaXJ0eSkKPiAtCQlmbHVzaF9kb21haW5zID0g STkxNV9HRU1fR1BVX0RPTUFJTlM7Cj4gKwlpZiAoZW5naW5lLT5pZCA9PSBSQ1MpIHsKPiArCQly ZWdfc3RhdGVbQ1RYX0xSSV9IRUFERVJfMl0gPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKTsKPiAr CQlyZWdfc3RhdGVbQ1RYX1JfUFdSX0NMS19TVEFURV0gPSAweDIwYzg7Cj4gKwkJcmVnX3N0YXRl W0NUWF9SX1BXUl9DTEtfU1RBVEUrMV0gPSAwOwo+ICsJfQo+ICAgCj4gLQlyZXQgPSByaW5nLT5l bWl0X2ZsdXNoKHJpbmdidWYsIEk5MTVfR0VNX0dQVV9ET01BSU5TLCBmbHVzaF9kb21haW5zKTsK PiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArCWt1bm1hcF9hdG9taWMocmVnX3N0YXRl KTsKPiAgIAo+IC0JcmluZy0+Z3B1X2NhY2hlc19kaXJ0eSA9IGZhbHNlOwo+ICAgCXJldHVybiAw Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgZXhlY2xpc3RzX21vdmVfdG9fZ3B1KHN0cnVjdCBp bnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAo+IC0JCQkJIHN0cnVjdCBsaXN0X2hlYWQgKnZtYXMp Cj4gK3N0YXRpYyB1aW50MzJfdCBnZXRfbHJfY29udGV4dF9zaXplKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSBy aW5nYnVmLT5yaW5nOwo+IC0Jc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gLQl1aW50MzJfdCBmbHVz aF9kb21haW5zID0gMDsKPiAtCWJvb2wgZmx1c2hfY2hpcHNldCA9IGZhbHNlOwo+IC0JaW50IHJl dDsKPiAtCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgdm1hcywgZXhlY19saXN0KSB7Cj4g LQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+b2JqOwo+IC0KPiAtCQly ZXQgPSBpOTE1X2dlbV9vYmplY3Rfc3luYyhvYmosIHJpbmcpOwo+IC0JCWlmIChyZXQpCj4gLQkJ CXJldHVybiByZXQ7Cj4gKwlpbnQgcmV0ID0gMDsKPiAgIAo+IC0JCWlmIChvYmotPmJhc2Uud3Jp dGVfZG9tYWluICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkKPiAtCQkJZmx1c2hfY2hpcHNldCB8PSBp OTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmosIGZhbHNlKTsKPiArCVdBUk5fT04oSU5URUxfSU5G TyhlbmdpbmUtPmk5MTUpLT5nZW4gIT0gOCk7Cj4gICAKPiAtCQlmbHVzaF9kb21haW5zIHw9IG9i ai0+YmFzZS53cml0ZV9kb21haW47Cj4gKwlzd2l0Y2ggKGVuZ2luZS0+aWQpIHsKPiArCWNhc2Ug UkNTOgo+ICsJCXJldCA9IEdFTjhfTFJfQ09OVEVYVF9SRU5ERVJfU0laRTsKPiArCQlicmVhazsK PiArCWNhc2UgVkNTOgo+ICsJY2FzZSBCQ1M6Cj4gKwljYXNlIFZFQ1M6Cj4gKwljYXNlIFZDUzI6 Cj4gKwkJcmV0ID0gR0VOOF9MUl9DT05URVhUX09USEVSX1NJWkU7Cj4gKwkJYnJlYWs7Cj4gICAJ fQo+ICAgCj4gLQlpZiAoZmx1c2hfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9HVFQpCj4gLQkJ d21iKCk7Cj4gLQo+IC0JLyogVW5jb25kaXRpb25hbGx5IGludmFsaWRhdGUgZ3B1IGNhY2hlcyBh bmQgZW5zdXJlIHRoYXQgd2UgZG8gZmx1c2gKPiAtCSAqIGFueSByZXNpZHVhbCB3cml0ZXMgZnJv bSB0aGUgcHJldmlvdXMgYmF0Y2guCj4gLQkgKi8KPiAtCXJldHVybiBsb2dpY2FsX3JpbmdfaW52 YWxpZGF0ZV9hbGxfY2FjaGVzKHJpbmdidWYpOwo+ICsJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ IC0vKioKPiAtICogZXhlY2xpc3RzX3N1Ym1pc3Npb24oKSAtIHN1Ym1pdCBhIGJhdGNoYnVmZmVy IGZvciBleGVjdXRpb24sIEV4ZWNsaXN0cyBzdHlsZQo+IC0gKiBAZGV2OiBEUk0gZGV2aWNlLgo+ IC0gKiBAZmlsZTogRFJNIGZpbGUuCj4gLSAqIEByaW5nOiBFbmdpbmUgQ29tbWFuZCBTdHJlYW1l ciB0byBzdWJtaXQgdG8uCj4gLSAqIEBjdHg6IENvbnRleHQgdG8gZW1wbG95IGZvciB0aGlzIHN1 Ym1pc3Npb24uCj4gLSAqIEBhcmdzOiBleGVjYnVmZmVyIGNhbGwgYXJndW1lbnRzLgo+IC0gKiBA dm1hczogbGlzdCBvZiB2bWFzLgo+IC0gKiBAYmF0Y2hfb2JqOiB0aGUgYmF0Y2hidWZmZXIgdG8g c3VibWl0Lgo+IC0gKiBAZXhlY19zdGFydDogYmF0Y2hidWZmZXIgc3RhcnQgdmlydHVhbCBhZGRy ZXNzIHBvaW50ZXIuCj4gLSAqIEBmbGFnczogdHJhbnNsYXRlZCBleGVjYnVmZmVyIGNhbGwgZmxh Z3MuCj4gLSAqCj4gLSAqIFRoaXMgaXMgdGhlIGV2aWwgdHdpbiB2ZXJzaW9uIG9mIGk5MTVfZ2Vt X3JpbmdidWZmZXJfc3VibWlzc2lvbi4gSXQgYWJzdHJhY3RzCj4gLSAqIGF3YXkgdGhlIHN1Ym1p c3Npb24gZGV0YWlscyBvZiB0aGUgZXhlY2J1ZmZlciBpb2N0bCBjYWxsLgo+IC0gKgo+IC0gKiBS ZXR1cm46IG5vbi16ZXJvIGlmIHRoZSBzdWJtaXNzaW9uIGZhaWxzLgo+IC0gKi8KPiAtaW50IGlu dGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSwKPiAtCQkJICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcs Cj4gLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+IC0JCQkgICAgICAgc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJncywKPiAtCQkJICAgICAgIHN0cnVjdCBs aXN0X2hlYWQgKnZtYXMsCj4gLQkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq YmF0Y2hfb2JqLAo+IC0JCQkgICAgICAgdTY0IGV4ZWNfc3RhcnQsIHUzMiBmbGFncykKPiArc3Rh dGljIHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICoKPiArZXhlY2xpc3RzX2dldF9yaW5nKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y3R4KQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmID0gY3R4LT5l bmdpbmVbcmluZy0+aWRdLnJpbmdidWY7Cj4gLQlpbnQgaW5zdHBfbW9kZTsKPiAtCXUzMiBpbnN0 cF9tYXNrOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmo7Cj4gKwlzdHJ1 Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZzsKPiArCXVpbnQzMl90IGNvbnRleHRfc2l6ZTsKPiAg IAlpbnQgcmV0Owo+ICAgCj4gLQlpbnN0cF9tb2RlID0gYXJncy0+ZmxhZ3MgJiBJOTE1X0VYRUNf Q09OU1RBTlRTX01BU0s7Cj4gLQlpbnN0cF9tYXNrID0gSTkxNV9FWEVDX0NPTlNUQU5UU19NQVNL Owo+IC0Jc3dpdGNoIChpbnN0cF9tb2RlKSB7Cj4gLQljYXNlIEk5MTVfRVhFQ19DT05TVEFOVFNf UkVMX0dFTkVSQUw6Cj4gLQljYXNlIEk5MTVfRVhFQ19DT05TVEFOVFNfQUJTT0xVVEU6Cj4gLQlj YXNlIEk5MTVfRVhFQ19DT05TVEFOVFNfUkVMX1NVUkZBQ0U6Cj4gLQkJaWYgKGluc3RwX21vZGUg IT0gMCAmJiByaW5nICE9ICZkZXZfcHJpdi0+cmluZ1tSQ1NdKSB7Cj4gLQkJCURSTV9ERUJVRygi bm9uLTAgcmVsIGNvbnN0YW50cyBtb2RlIG9uIG5vbi1SQ1NcbiIpOwo+IC0JCQlyZXR1cm4gLUVJ TlZBTDsKPiAtCQl9Cj4gLQo+IC0JCWlmIChpbnN0cF9tb2RlICE9IGRldl9wcml2LT5yZWxhdGl2 ZV9jb25zdGFudHNfbW9kZSkgewo+IC0JCQlpZiAoaW5zdHBfbW9kZSA9PSBJOTE1X0VYRUNfQ09O U1RBTlRTX1JFTF9TVVJGQUNFKSB7Cj4gLQkJCQlEUk1fREVCVUcoInJlbCBzdXJmYWNlIGNvbnN0 YW50cyBtb2RlIGludmFsaWQgb24gZ2VuNStcbiIpOwo+IC0JCQkJcmV0dXJuIC1FSU5WQUw7Cj4g LQkJCX0KPiAtCj4gLQkJCS8qIFRoZSBIVyBjaGFuZ2VkIHRoZSBtZWFuaW5nIG9uIHRoaXMgYml0 IG9uIGdlbjYgKi8KPiAtCQkJaW5zdHBfbWFzayAmPSB+STkxNV9FWEVDX0NPTlNUQU5UU19SRUxf U1VSRkFDRTsKPiAtCQl9Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCURSTV9ERUJVRygi ZXhlY2J1ZiB3aXRoIHVua25vd24gY29uc3RhbnRzOiAlZFxuIiwgaW5zdHBfbW9kZSk7Cj4gLQkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwlyaW5nID0gaW50ZWxfZW5naW5lX2FsbG9jX3JpbmcoZW5naW5l LCBjdHgsIDMyICogUEFHRV9TSVpFKTsKPiArCWlmIChJU19FUlIocmluZykpIHsKPiArCQlEUk1f RVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSByaW5nYnVmZmVyICVzOiAlbGRcbiIsCj4gKwkJCSAg ZW5naW5lLT5uYW1lLCBQVFJfRVJSKHJpbmcpKTsKPiArCQlyZXR1cm4gRVJSX0NBU1QocmluZyk7 Cj4gICAJfQo+ICAgCj4gLQlpZiAoYXJncy0+bnVtX2NsaXByZWN0cyAhPSAwKSB7Cj4gLQkJRFJN X0RFQlVHKCJjbGlwIHJlY3RhbmdsZXMgYXJlIG9ubHkgdmFsaWQgb24gcHJlLWdlbjVcbiIpOwo+ IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfSBlbHNlIHsKPiAtCQlpZiAoYXJncy0+RFI0ID09IDB4 ZmZmZmZmZmYpIHsKPiAtCQkJRFJNX0RFQlVHKCJVWEEgc3VibWl0dGluZyBnYXJiYWdlIERSNCwg Zml4aW5nIHVwXG4iKTsKPiAtCQkJYXJncy0+RFI0ID0gMDsKPiAtCQl9Cj4gKwljb250ZXh0X3Np emUgPSByb3VuZF91cChnZXRfbHJfY29udGV4dF9zaXplKGVuZ2luZSksIDQwOTYpOwo+ICAgCj4g LQkJaWYgKGFyZ3MtPkRSMSB8fCBhcmdzLT5EUjQgfHwgYXJncy0+Y2xpcHJlY3RzX3B0cikgewo+ IC0JCQlEUk1fREVCVUcoIjAgY2xpcHJlY3RzIGJ1dCBkaXJ0IGluIGNsaXByZWN0cyBmaWVsZHNc biIpOwo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gKwljdHhfb2JqID0gaTkxNV9nZW1f YWxsb2NfY29udGV4dF9vYmooZW5naW5lLT5pOTE1LT5kZXYsIGNvbnRleHRfc2l6ZSk7Cj4gKwlp ZiAoSVNfRVJSKGN0eF9vYmopKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihjdHhfb2JqKTsKPiArCQlE Uk1fREVCVUdfRFJJVkVSKCJBbGxvYyBMUkMgYmFja2luZyBvYmogZmFpbGVkOiAlZFxuIiwgcmV0 KTsKPiArCQlyZXR1cm4gRVJSX0NBU1QoY3R4X29iaik7Cj4gICAJfQo+ICAgCj4gLQlpZiAoYXJn cy0+ZmxhZ3MgJiBJOTE1X0VYRUNfR0VON19TT0xfUkVTRVQpIHsKPiAtCQlEUk1fREVCVUcoInNv bCByZXNldCBpcyBnZW43IG9ubHlcbiIpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+ICsJcmV0ID0g aTkxNV9nZW1fb2JqX2dndHRfcGluKGN0eF9vYmosIEdFTjhfTFJfQ09OVEVYVF9BTElHTiwgMCk7 Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiUGluIExSQyBiYWNraW5nIG9i aiBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+ICsJCWdvdG8gZXJyX3VucmVmOwo+ICAgCX0KPiAgIAo+ IC0JcmV0ID0gZXhlY2xpc3RzX21vdmVfdG9fZ3B1KHJpbmdidWYsIHZtYXMpOwo+IC0JaWYgKHJl dCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJcmV0ID0gcG9wdWxhdGVfbHJfY29udGV4dChjdHgsIGN0 eF9vYmosIGVuZ2luZSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiRmFp bGVkIHRvIHBvcHVsYXRlIExSQzogJWRcbiIsIHJldCk7Cj4gKwkJZ290byBlcnJfdW5waW47Cj4g Kwl9Cj4gICAKPiAtCWlmIChyaW5nID09ICZkZXZfcHJpdi0+cmluZ1tSQ1NdICYmCj4gLQkgICAg aW5zdHBfbW9kZSAhPSBkZXZfcHJpdi0+cmVsYXRpdmVfY29uc3RhbnRzX21vZGUpIHsKPiAtCQly ZXQgPSBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4ocmluZ2J1ZiwgNCk7Cj4gLQkJaWYgKHJldCkK PiAtCQkJcmV0dXJuIHJldDsKPiArCWN0eC0+cmluZ1tlbmdpbmUtPmlkXS5zdGF0ZSA9IGN0eF9v Ymo7Cj4gICAKPiAtCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBNSV9OT09QKTsK PiAtCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBNSV9MT0FEX1JFR0lTVEVSX0lN TSgxKSk7Cj4gLQkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgSU5TVFBNKTsKPiAt CQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBpbnN0cF9tYXNrIDw8IDE2IHwgaW5z dHBfbW9kZSk7Cj4gLQkJaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2UocmluZ2J1Zik7Cj4gKwlp ZiAoY3R4ID09IGVuZ2luZS0+ZGVmYXVsdF9jb250ZXh0KSB7Cj4gKwkJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ICsJCXUzMiByZWc7Cj4gICAKPiAt CQlkZXZfcHJpdi0+cmVsYXRpdmVfY29uc3RhbnRzX21vZGUgPSBpbnN0cF9tb2RlOwo+IC0JfQo+ ICsJCS8qIFRoZSBzdGF0dXMgcGFnZSBpcyBvZmZzZXQgMCBmcm9tIHRoZSBjb250ZXh0IG9iamVj dCBpbiBMUkNzLiAqLwo+ICsJCWVuZ2luZS0+c3RhdHVzX3BhZ2UuZ2Z4X2FkZHIgPSBpOTE1X2dl bV9vYmpfZ2d0dF9vZmZzZXQoY3R4X29iaik7Cj4gKwkJZW5naW5lLT5zdGF0dXNfcGFnZS5wYWdl X2FkZHIgPSBrbWFwKHNnX3BhZ2UoY3R4X29iai0+cGFnZXMtPnNnbCkpOwo+ICsJCWlmIChlbmdp bmUtPnN0YXR1c19wYWdlLnBhZ2VfYWRkciA9PSBOVUxMKSB7Cj4gKwkJCXJldCA9IC1FTk9NRU07 Cj4gKwkJCWdvdG8gZXJyX3VucGluOwo+ICsJCX0KPiAgIAo+IC0JcmV0ID0gcmluZy0+ZW1pdF9i Yl9zdGFydChyaW5nYnVmLCBleGVjX3N0YXJ0LCBmbGFncyk7Cj4gLQlpZiAocmV0KQo+IC0JCXJl dHVybiByZXQ7Cj4gKwkJZW5naW5lLT5zdGF0dXNfcGFnZS5vYmogPSBjdHhfb2JqOwo+ICAgCj4g LQlpOTE1X2dlbV9leGVjYnVmZmVyX21vdmVfdG9fYWN0aXZlKHZtYXMsIHJpbmcpOwo+IC0JaTkx NV9nZW1fZXhlY2J1ZmZlcl9yZXRpcmVfY29tbWFuZHMoZGV2LCBmaWxlLCByaW5nLCBiYXRjaF9v YmopOwo+ICsJCXJlZyA9IFJJTkdfSFdTX1BHQShlbmdpbmUtPm1taW9fYmFzZSk7Cj4gKwkJSTkx NV9XUklURShyZWcsIGVuZ2luZS0+c3RhdHVzX3BhZ2UuZ2Z4X2FkZHIpOwo+ICsJCVBPU1RJTkdf UkVBRChyZWcpOwo+ICsJfQo+ICAgCj4gICAJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfdW5waW46Cj4g KwlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihjdHhfb2JqKTsKPiArZXJyX3VucmVmOgo+ICsJ ZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmN0eF9vYmotPmJhc2UpOwo+ICsJcmV0dXJuIEVS Ul9QVFIocmV0KTsKPiAgIH0KPiAgIAo+IC12b2lkIGludGVsX2xvZ2ljYWxfcmluZ19zdG9wKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK3N0YXRpYyB2b2lkIGV4ZWNsaXN0c19wdXRf cmluZyhzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZywKPiArCQkJICAgICAgIHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjdHgpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSByaW5nLT5kZXYtPmRldl9wcml2YXRlOwo+IC0JaW50IHJldDsKPiAtCj4gLQlpZiAo IWludGVsX3JpbmdfaW5pdGlhbGl6ZWQocmluZykpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXJldCA9 IGludGVsX3JpbmdfaWRsZShyaW5nKTsKPiAtCWlmIChyZXQgJiYgIWk5MTVfcmVzZXRfaW5fcHJv Z3Jlc3MoJnRvX2k5MTUocmluZy0+ZGV2KS0+Z3B1X2Vycm9yKSkKPiAtCQlEUk1fRVJST1IoImZh aWxlZCB0byBxdWllc2NlICVzIHdoaWxzdCBjbGVhbmluZyB1cDogJWRcbiIsCj4gLQkJCSAgcmlu Zy0+bmFtZSwgcmV0KTsKPiAtCj4gLQkvKiBUT0RPOiBJcyB0aGlzIGNvcnJlY3Qgd2l0aCBFeGVj bGlzdHMgZW5hYmxlZD8gKi8KPiAtCUk5MTVfV1JJVEVfTU9ERShyaW5nLCBfTUFTS0VEX0JJVF9F TkFCTEUoU1RPUF9SSU5HKSk7Cj4gLQlpZiAod2FpdF9mb3JfYXRvbWljKChJOTE1X1JFQURfTU9E RShyaW5nKSAmIE1PREVfSURMRSkgIT0gMCwgMTAwMCkpIHsKPiAtCQlEUk1fRVJST1IoIiVzIDp0 aW1lZCBvdXQgdHJ5aW5nIHRvIHN0b3AgcmluZ1xuIiwgcmluZy0+bmFtZSk7Cj4gLQkJcmV0dXJu Owo+IC0JfQo+IC0JSTkxNV9XUklURV9NT0RFKHJpbmcsIF9NQVNLRURfQklUX0RJU0FCTEUoU1RP UF9SSU5HKSk7Cj4gKwlpbnRlbF9yaW5nX2ZyZWUocmluZyk7Cj4gICB9Cj4gICAKPiAtaW50IGxv Z2ljYWxfcmluZ19mbHVzaF9hbGxfY2FjaGVzKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5n YnVmKQo+ICtzdGF0aWMgaW50IGV4ZWNsaXN0c19hZGRfcmVxdWVzdChzdHJ1Y3QgaTkxNV9nZW1f cmVxdWVzdCAqcnEpCj4gICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nID0gcmlu Z2J1Zi0+cmluZzsKPiAtCWludCByZXQ7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICAgCj4g LQlpZiAoIXJpbmctPmdwdV9jYWNoZXNfZGlydHkpCj4gLQkJcmV0dXJuIDA7Cj4gKwlzcGluX2xv Y2tfaXJxc2F2ZSgmcnEtPmVuZ2luZS0+aXJxbG9jaywgZmxhZ3MpOwo+ICAgCj4gLQlyZXQgPSBy aW5nLT5lbWl0X2ZsdXNoKHJpbmdidWYsIDAsIEk5MTVfR0VNX0dQVV9ET01BSU5TKTsKPiAtCWlm IChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArCWxpc3RfYWRkX3RhaWwoJnJxLT5lbmdpbmVfbGlz dCwgJnJxLT5lbmdpbmUtPnBlbmRpbmcpOwo+ICsJaWYgKHJxLT5lbmdpbmUtPmV4ZWNsaXN0c19z dWJtaXR0ZWQgPCAyKQo+ICsJCWV4ZWNsaXN0c19zdWJtaXQocnEtPmVuZ2luZSk7Cj4gKwo+ICsJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmVuZ2luZS0+aXJxbG9jaywgZmxhZ3MpOwo+ICAg Cj4gLQlyaW5nLT5ncHVfY2FjaGVzX2RpcnR5ID0gZmFsc2U7Cj4gICAJcmV0dXJuIDA7Cj4gICB9 Cj4gICAKPiAtLyoqCj4gLSAqIGludGVsX2xvZ2ljYWxfcmluZ19hZHZhbmNlX2FuZF9zdWJtaXQo KSAtIGFkdmFuY2UgdGhlIHRhaWwgYW5kIHN1Ym1pdCB0aGUgd29ya2xvYWQKPiAtICogQHJpbmdi dWY6IExvZ2ljYWwgUmluZ2J1ZmZlciB0byBhZHZhbmNlLgo+IC0gKgo+IC0gKiBUaGUgdGFpbCBp cyB1cGRhdGVkIGluIG91ciBsb2dpY2FsIHJpbmdidWZmZXIgc3RydWN0LCBub3QgaW4gdGhlIGFj dHVhbCBjb250ZXh0LiBXaGF0Cj4gLSAqIHJlYWxseSBoYXBwZW5zIGR1cmluZyBzdWJtaXNzaW9u IGlzIHRoYXQgdGhlIGNvbnRleHQgYW5kIGN1cnJlbnQgdGFpbCB3aWxsIGJlIHBsYWNlZAo+IC0g KiBvbiBhIHF1ZXVlIHdhaXRpbmcgZm9yIHRoZSBFTFNQIHRvIGJlIHJlYWR5IHRvIGFjY2VwdCBh IG5ldyBjb250ZXh0IHN1Ym1pc3Npb24uIEF0IHRoYXQKPiAtICogcG9pbnQsIHRoZSB0YWlsICpp bnNpZGUqIHRoZSBjb250ZXh0IGlzIHVwZGF0ZWQgYW5kIHRoZSBFTFNQIHdyaXR0ZW4gdG8uCj4g LSAqLwo+IC12b2lkIGludGVsX2xvZ2ljYWxfcmluZ19hZHZhbmNlX2FuZF9zdWJtaXQoc3RydWN0 IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYpCj4gK3N0YXRpYyBib29sIGV4ZWNsaXN0c19ycV9p c19jb21wbGV0ZShzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gICB7Cj4gLQlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nID0gcmluZ2J1Zi0+cmluZzsKPiAtCXN0cnVjdCBpbnRlbF9j b250ZXh0ICpjdHggPSByaW5nYnVmLT5GSVhNRV9scmNfY3R4Owo+IC0KPiAtCWludGVsX2xvZ2lj YWxfcmluZ19hZHZhbmNlKHJpbmdidWYpOwo+IC0KPiAtCWlmIChpbnRlbF9yaW5nX3N0b3BwZWQo cmluZykpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWV4ZWNsaXN0c19jb250ZXh0X3F1ZXVlKHJpbmcs IGN0eCwgcmluZ2J1Zi0+dGFpbCk7Cj4gKwlyZXR1cm4gKHMxNikocnEtPmVuZ2luZS0+dGFnIC0g cnEtPnRhZykgPj0gMDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IGxvZ2ljYWxfcmluZ19hbGxv Y19zZXFubyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCQkJICAgIHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjdHgpCj4gK3N0YXRpYyBpbnQgZXhlY2xpc3RzX3N1c3BlbmQoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+IC0JaWYgKHJpbmctPm91dHN0YW5kaW5n X2xhenlfc2Vxbm8pCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JaWYgKHJpbmctPnByZWFsbG9jYXRl ZF9sYXp5X3JlcXVlc3QgPT0gTlVMTCkgewo+IC0JCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxdWVzdDsKPiAtCj4gLQkJcmVxdWVzdCA9IGttYWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSwg R0ZQX0tFUk5FTCk7Cj4gLQkJaWYgKHJlcXVlc3QgPT0gTlVMTCkKPiAtCQkJcmV0dXJuIC1FTk9N RU07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7 Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICAgCj4gLQkJLyogSG9sZCBhIHJlZmVyZW5jZSB0 byB0aGUgY29udGV4dCB0aGlzIHJlcXVlc3QgYmVsb25ncyB0bwo+IC0JCSAqICh3ZSB3aWxsIG5l ZWQgaXQgd2hlbiB0aGUgdGltZSBjb21lcyB0byBlbWl0L3JldGlyZSB0aGUKPiAtCQkgKiByZXF1 ZXN0KS4KPiAtCQkgKi8KPiAtCQlyZXF1ZXN0LT5jdHggPSBjdHg7Cj4gLQkJaTkxNV9nZW1fY29u dGV4dF9yZWZlcmVuY2UocmVxdWVzdC0+Y3R4KTsKPiArCS8qIGRpc2FibGUgc3VibWl0dGluZyBt b3JlIHJlcXVlc3RzIHVudGlsIHJlc3VtZSAqLwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2lu ZS0+aXJxbG9jaywgZmxhZ3MpOwo+ICsJZW5naW5lLT5leGVjbGlzdHNfc3VibWl0dGVkID0gfjA7 Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmlycWxvY2ssIGZsYWdzKTsKPiAg IAo+IC0JCXJpbmctPnByZWFsbG9jYXRlZF9sYXp5X3JlcXVlc3QgPSByZXF1ZXN0Owo+IC0JfQo+ ICsJSTkxNV9XUklURShSSU5HX01PREVfR0VONyhlbmdpbmUpLAo+ICsJCSAgIF9NQVNLRURfQklU X0VOQUJMRShHRlhfUkVQTEFZX01PREUpIHwKPiArCQkgICBfTUFTS0VEX0JJVF9ESVNBQkxFKEdG WF9SVU5fTElTVF9FTkFCTEUpKTsKPiArCVBPU1RJTkdfUkVBRChSSU5HX01PREVfR0VONyhlbmdp bmUpKTsKPiArCURSTV9ERUJVR19EUklWRVIoIkV4ZWNsaXN0cyBkaXNhYmxlZCBmb3IgJXNcbiIs IGVuZ2luZS0+bmFtZSk7Cj4gICAKPiAtCXJldHVybiBpOTE1X2dlbV9nZXRfc2Vxbm8ocmluZy0+ ZGV2LCAmcmluZy0+b3V0c3RhbmRpbmdfbGF6eV9zZXFubyk7Cj4gKwlyZXR1cm4gMDsKPiAgIH0K PiAgIAo+IC1zdGF0aWMgaW50IGxvZ2ljYWxfcmluZ193YWl0X3JlcXVlc3Qoc3RydWN0IGludGVs X3JpbmdidWZmZXIgKnJpbmdidWYsCj4gLQkJCQkgICAgIGludCBieXRlcykKPiArc3RhdGljIGlu dCBleGVjbGlzdHNfcmVzdW1lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsK PiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSByaW5nYnVmLT5yaW5nOwo+IC0Jc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0Owo+IC0JdTMyIHNlcW5vID0gMDsKPiAt CWludCByZXQ7Cj4gLQo+IC0JaWYgKHJpbmdidWYtPmxhc3RfcmV0aXJlZF9oZWFkICE9IC0xKSB7 Cj4gLQkJcmluZ2J1Zi0+aGVhZCA9IHJpbmdidWYtPmxhc3RfcmV0aXJlZF9oZWFkOwo+IC0JCXJp bmdidWYtPmxhc3RfcmV0aXJlZF9oZWFkID0gLTE7Cj4gLQo+IC0JCXJpbmdidWYtPnNwYWNlID0g aW50ZWxfcmluZ19zcGFjZShyaW5nYnVmKTsKPiAtCQlpZiAocmluZ2J1Zi0+c3BhY2UgPj0gYnl0 ZXMpCj4gLQkJCXJldHVybiAwOwo+IC0JfQo+IC0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkocmVx dWVzdCwgJnJpbmctPnJlcXVlc3RfbGlzdCwgbGlzdCkgewo+IC0JCWlmIChfX2ludGVsX3Jpbmdf c3BhY2UocmVxdWVzdC0+dGFpbCwgcmluZ2J1Zi0+dGFpbCwKPiAtCQkJCSAgICAgICByaW5nYnVm LT5zaXplKSA+PSBieXRlcykgewo+IC0JCQlzZXFubyA9IHJlcXVlc3QtPnNlcW5vOwo+IC0JCQli cmVhazsKPiAtCQl9Cj4gLQl9Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBlbmdpbmUtPmk5MTU7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICAgCj4gLQlpZiAoc2Vx bm8gPT0gMCkKPiAtCQlyZXR1cm4gLUVOT1NQQzsKPiArCS8qIFhYWCAqLwo+ICsJSTkxNV9XUklU RShSSU5HX0hXU1RBTShlbmdpbmUtPm1taW9fYmFzZSksIDB4ZmZmZmZmZmYpOwo+ICAgCj4gLQly ZXQgPSBpOTE1X3dhaXRfc2Vxbm8ocmluZywgc2Vxbm8pOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1 cm4gcmV0Owo+ICsJSTkxNV9XUklURShSSU5HX01PREVfR0VONyhlbmdpbmUpLAo+ICsJCSAgIF9N QVNLRURfQklUX0RJU0FCTEUoR0ZYX1JFUExBWV9NT0RFKSB8Cj4gKwkJICAgX01BU0tFRF9CSVRf RU5BQkxFKEdGWF9SVU5fTElTVF9FTkFCTEUpKTsKPiArCVBPU1RJTkdfUkVBRChSSU5HX01PREVf R0VONyhlbmdpbmUpKTsKPiArCURSTV9ERUJVR19EUklWRVIoIkV4ZWNsaXN0cyBlbmFibGVkIGZv ciAlc1xuIiwgZW5naW5lLT5uYW1lKTsKPiAgIAo+IC0JaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3Rz X3JpbmcocmluZyk7Cj4gLQlyaW5nYnVmLT5oZWFkID0gcmluZ2J1Zi0+bGFzdF9yZXRpcmVkX2hl YWQ7Cj4gLQlyaW5nYnVmLT5sYXN0X3JldGlyZWRfaGVhZCA9IC0xOwo+ICsJc3Bpbl9sb2NrX2ly cXNhdmUoJmVuZ2luZS0+aXJxbG9jaywgZmxhZ3MpOwo+ICsJZW5naW5lLT5leGVjbGlzdHNfc3Vi bWl0dGVkID0gMDsKPiArCWV4ZWNsaXN0c19zdWJtaXQoZW5naW5lKTsKPiArCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmVuZ2luZS0+aXJxbG9jaywgZmxhZ3MpOwo+ICAgCj4gLQlyaW5nYnVmLT5z cGFjZSA9IGludGVsX3Jpbmdfc3BhY2UocmluZ2J1Zik7Cj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4g ICAKPiAtc3RhdGljIGludCBsb2dpY2FsX3Jpbmdfd2FpdF9mb3Jfc3BhY2Uoc3RydWN0IGludGVs X3JpbmdidWZmZXIgKnJpbmdidWYsCj4gLQkJCQkgICAgICAgaW50IGJ5dGVzKQo+ICtzdGF0aWMg dm9pZCBleGVjbGlzdHNfcmV0aXJlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAr CQkJICAgICB1MzIgc2Vxbm8pCj4gICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5n ID0gcmluZ2J1Zi0+cmluZzsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Owo+IC0JdW5zaWduZWQgbG9uZyBlbmQ7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IGxvZ2lj YWxfcmluZ193YWl0X3JlcXVlc3QocmluZ2J1ZiwgYnl0ZXMpOwo+IC0JaWYgKHJldCAhPSAtRU5P U1BDKQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JLyogRm9yY2UgdGhlIGNvbnRleHQgc3VibWlz c2lvbiBpbiBjYXNlIHdlIGhhdmUgYmVlbiBza2lwcGluZyBpdCAqLwo+IC0JaW50ZWxfbG9naWNh bF9yaW5nX2FkdmFuY2VfYW5kX3N1Ym1pdChyaW5nYnVmKTsKPiAtCj4gLQkvKiBXaXRoIEdFTSB0 aGUgaGFuZ2NoZWNrIHRpbWVyIHNob3VsZCBraWNrIHVzIG91dCBvZiB0aGUgbG9vcCwKPiAtCSAq IGxlYXZpbmcgaXQgZWFybHkgcnVucyB0aGUgcmlzayBvZiBjb3JydXB0aW5nIEdFTSBzdGF0ZSAo ZHVlCj4gLQkgKiB0byBydW5uaW5nIG9uIGFsbW9zdCB1bnRlc3RlZCBjb2RlcGF0aHMpLiBCdXQg b24gcmVzdW1lCj4gLQkgKiB0aW1lcnMgZG9uJ3Qgd29yayB5ZXQsIHNvIHByZXZlbnQgYSBjb21w bGV0ZSBoYW5nIGluIHRoYXQKPiAtCSAqIGNhc2UgYnkgY2hvb3NpbmcgYW4gaW5zYW5lbHkgbGFy Z2UgdGltZW91dC4gKi8KPiAtCWVuZCA9IGppZmZpZXMgKyA2MCAqIEhaOwo+IC0KPiAtCWRvIHsK PiAtCQlyaW5nYnVmLT5oZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZyk7Cj4gLQkJcmluZ2J1Zi0+ c3BhY2UgPSBpbnRlbF9yaW5nX3NwYWNlKHJpbmdidWYpOwo+IC0JCWlmIChyaW5nYnVmLT5zcGFj ZSA+PSBieXRlcykgewo+IC0JCQlyZXQgPSAwOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQo+IC0J CW1zbGVlcCgxKTsKPiAtCj4gLQkJaWYgKGRldl9wcml2LT5tbS5pbnRlcnJ1cHRpYmxlICYmIHNp Z25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Cj4gLQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKPiAtCQkJ YnJlYWs7Cj4gLQkJfQo+IC0KPiAtCQlyZXQgPSBpOTE1X2dlbV9jaGVja193ZWRnZSgmZGV2X3By aXYtPmdwdV9lcnJvciwKPiAtCQkJCQkgICBkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZSk7Cj4g LQkJaWYgKHJldCkKPiAtCQkJYnJlYWs7Cj4gLQo+IC0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMs IGVuZCkpIHsKPiAtCQkJcmV0ID0gLUVCVVNZOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQl9IHdo aWxlICgxKTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gICAKPiAtCXJldHVybiByZXQ7Cj4g KwlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5pcnFsb2NrLCBmbGFncyk7Cj4gKwlsaXN0X3Nw bGljZV90YWlsX2luaXQoJmVuZ2luZS0+c3VibWl0dGVkLCAmZW5naW5lLT5yZXF1ZXN0cyk7Cj4g KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmlycWxvY2ssIGZsYWdzKTsKPiAgIH0K PiAgIAo+IC1zdGF0aWMgaW50IGxvZ2ljYWxfcmluZ193cmFwX2J1ZmZlcihzdHJ1Y3QgaW50ZWxf cmluZ2J1ZmZlciAqcmluZ2J1ZikKPiArc3RhdGljIHZvaWQgZXhlY2xpc3RzX3Jlc2V0KHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAtCXVpbnQzMl90IF9faW9tZW0gKnZp cnQ7Cj4gLQlpbnQgcmVtID0gcmluZ2J1Zi0+c2l6ZSAtIHJpbmdidWYtPnRhaWw7Cj4gLQo+IC0J aWYgKHJpbmdidWYtPnNwYWNlIDwgcmVtKSB7Cj4gLQkJaW50IHJldCA9IGxvZ2ljYWxfcmluZ193 YWl0X2Zvcl9zcGFjZShyaW5nYnVmLCByZW0pOwo+IC0KPiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1 cm4gcmV0Owo+IC0JfQo+IC0KPiAtCXZpcnQgPSByaW5nYnVmLT52aXJ0dWFsX3N0YXJ0ICsgcmlu Z2J1Zi0+dGFpbDsKPiAtCXJlbSAvPSA0Owo+IC0Jd2hpbGUgKHJlbS0tKQo+IC0JCWlvd3JpdGUz MihNSV9OT09QLCB2aXJ0KyspOwo+IC0KPiAtCXJpbmdidWYtPnRhaWwgPSAwOwo+IC0JcmluZ2J1 Zi0+c3BhY2UgPSBpbnRlbF9yaW5nX3NwYWNlKHJpbmdidWYpOwo+ICsJdW5zaWduZWQgbG9uZyBm bGFnczsKPiAgIAo+IC0JcmV0dXJuIDA7Cj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5p cnFsb2NrLCBmbGFncyk7Cj4gKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmVuZ2luZS0+cGVuZGlu ZywgJmVuZ2luZS0+c3VibWl0dGVkKTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2lu ZS0+aXJxbG9jaywgZmxhZ3MpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgbG9naWNhbF9yaW5n X3ByZXBhcmUoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsIGludCBieXRlcykKPiAr c3RhdGljIGJvb2wgZW5hYmxlX2V4ZWNsaXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gICB7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWlmICh1bmxpa2VseShyaW5nYnVmLT50 YWlsICsgYnl0ZXMgPiByaW5nYnVmLT5lZmZlY3RpdmVfc2l6ZSkpIHsKPiAtCQlyZXQgPSBsb2dp Y2FsX3Jpbmdfd3JhcF9idWZmZXIocmluZ2J1Zik7Cj4gLQkJaWYgKHVubGlrZWx5KHJldCkpCj4g LQkJCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JaWYgKHVubGlrZWx5KHJpbmdidWYtPnNwYWNl IDwgYnl0ZXMpKSB7Cj4gLQkJcmV0ID0gbG9naWNhbF9yaW5nX3dhaXRfZm9yX3NwYWNlKHJpbmdi dWYsIGJ5dGVzKTsKPiAtCQlpZiAodW5saWtlbHkocmV0KSkKPiAtCQkJcmV0dXJuIHJldDsKPiAt CX0KPiArCWlmICghSEFTX0xPR0lDQUxfUklOR19DT05URVhUUyhkZXZfcHJpdikgfHwKPiArCSAg ICAhVVNFU19QUEdUVChkZXZfcHJpdikpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICAgCj4gLQlyZXR1 cm4gMDsKPiArCXJldHVybiBpOTE1LmVuYWJsZV9leGVjbGlzdHM7Cj4gICB9Cj4gICAKPiAtLyoq Cj4gLSAqIGludGVsX2xvZ2ljYWxfcmluZ19iZWdpbigpIC0gcHJlcGFyZSB0aGUgbG9naWNhbCBy aW5nYnVmZmVyIHRvIGFjY2VwdCBzb21lIGNvbW1hbmRzCj4gLSAqCj4gLSAqIEByaW5nYnVmOiBM b2dpY2FsIHJpbmdidWZmZXIuCj4gLSAqIEBudW1fZHdvcmRzOiBudW1iZXIgb2YgRFdPUkRzIHRo YXQgd2UgcGxhbiB0byB3cml0ZSB0byB0aGUgcmluZ2J1ZmZlci4KPiAtICoKPiAtICogVGhlIHJp bmdidWZmZXIgbWlnaHQgbm90IGJlIHJlYWR5IHRvIGFjY2VwdCB0aGUgY29tbWFuZHMgcmlnaHQg YXdheSAobWF5YmUgaXQgbmVlZHMgdG8KPiAtICogYmUgd3JhcHBlZCwgb3Igd2FpdCBhIGJpdCBm b3IgdGhlIHRhaWwgdG8gYmUgdXBkYXRlZCkuIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiB0 aGF0Cj4gLSAqIGFuZCBhbHNvIHByZWFsbG9jYXRlcyBhIHJlcXVlc3QgKGV2ZXJ5IHdvcmtsb2Fk IHN1Ym1pc3Npb24gaXMgc3RpbGwgbWVkaWF0ZWQgdGhyb3VnaAo+IC0gKiByZXF1ZXN0cywgc2Ft ZSBhcyBpdCBkaWQgd2l0aCBsZWdhY3kgcmluZ2J1ZmZlciBzdWJtaXNzaW9uKS4KPiAtICoKPiAt ICogUmV0dXJuOiBub24temVybyBpZiB0aGUgcmluZ2J1ZmZlciBpcyBub3QgcmVhZHkgdG8gYmUg d3JpdHRlbiB0by4KPiAtICovCj4gLWludCBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4oc3RydWN0 IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsIGludCBudW1fZHdvcmRzKQo+ICtzdGF0aWMgY29u c3QgaW50IGdlbjhfaXJxX3NoaWZ0W10gPSB7Cj4gKwlbUkNTXSA9IEdFTjhfUkNTX0lSUV9TSElG VCwKPiArCVtWQ1NdID0gR0VOOF9WQ1MxX0lSUV9TSElGVCwKPiArCVtCQ1NdID0gR0VOOF9CQ1Nf SVJRX1NISUZULAo+ICsJW1ZFQ1NdID0gR0VOOF9WRUNTX0lSUV9TSElGVCwKPiArCVtWQ1MyXSA9 IEdFTjhfVkNTMl9JUlFfU0hJRlQsCj4gK307Cj4gKwo+ICtpbnQgaW50ZWxfZW5naW5lX2VuYWJs ZV9leGVjbGlzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+IC0Jc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9IHJpbmdidWYtPnJpbmc7Cj4gLQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCWludCByZXQ7Cj4gKwlpZiAoIWVuYWJsZV9l eGVjbGlzdHMoZW5naW5lLT5pOTE1KSkKPiArCQlyZXR1cm4gMDsKPiAgIAo+IC0JcmV0ID0gaTkx NV9nZW1fY2hlY2tfd2VkZ2UoJmRldl9wcml2LT5ncHVfZXJyb3IsCj4gLQkJCQkgICBkZXZfcHJp di0+bW0uaW50ZXJydXB0aWJsZSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlp ZiAoV0FSTl9PTighSVNfR0VOOChlbmdpbmUtPmk5MTUpKSkKPiArCQlyZXR1cm4gMDsKPiAgIAo+ IC0JcmV0ID0gbG9naWNhbF9yaW5nX3ByZXBhcmUocmluZ2J1ZiwgbnVtX2R3b3JkcyAqIHNpemVv Zih1aW50MzJfdCkpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJZW5naW5lLT5p cnFfa2VlcF9tYXNrIHw9Cj4gKwkJR1RfQ09OVEVYVF9TV0lUQ0hfSU5URVJSVVBUIDw8IGdlbjhf aXJxX3NoaWZ0W2VuZ2luZS0+aWRdOwo+ICAgCj4gLQkvKiBQcmVhbGxvY2F0ZSB0aGUgb2xyIGJl Zm9yZSB0b3VjaGluZyB0aGUgcmluZyAqLwo+IC0JcmV0ID0gbG9naWNhbF9yaW5nX2FsbG9jX3Nl cW5vKHJpbmcsIHJpbmdidWYtPkZJWE1FX2xyY19jdHgpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1 cm4gcmV0Owo+ICsJZW5naW5lLT5nZXRfcmluZyA9IGV4ZWNsaXN0c19nZXRfcmluZzsKPiArCWVu Z2luZS0+cHV0X3JpbmcgPSBleGVjbGlzdHNfcHV0X3Jpbmc7Cj4gKwllbmdpbmUtPmFkZF9yZXF1 ZXN0ID0gZXhlY2xpc3RzX2FkZF9yZXF1ZXN0Owo+ICsJZW5naW5lLT5pc19jb21wbGV0ZSA9IGV4 ZWNsaXN0c19ycV9pc19jb21wbGV0ZTsKPiAgIAo+IC0JcmluZ2J1Zi0+c3BhY2UgLT0gbnVtX2R3 b3JkcyAqIHNpemVvZih1aW50MzJfdCk7Cj4gLQlyZXR1cm4gMDsKPiAtfQo+ICsJLyogRGlzYWJs ZSBzZW1hcGhvcmVzIHVudGlsIGZ1cnRoZXIgbm90aWNlICovCj4gKwllbmdpbmUtPnNlbWFwaG9y ZS53YWl0ID0gTlVMTDsKPiAgIAo+IC1zdGF0aWMgaW50IGdlbjhfaW5pdF9jb21tb25fcmluZyhz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gcmluZy0+ZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCWVuZ2luZS0+c3VzcGVuZCA9IGV4ZWNsaXN0c19zdXNwZW5k Owo+ICsJZW5naW5lLT5yZXN1bWUgPSBleGVjbGlzdHNfcmVzdW1lOwo+ICsJZW5naW5lLT5yZXNl dCA9IGV4ZWNsaXN0c19yZXNldDsKPiArCWVuZ2luZS0+cmV0aXJlID0gZXhlY2xpc3RzX3JldGly ZTsKPiAgIAo+IC0JSTkxNV9XUklURV9JTVIocmluZywgfihyaW5nLT5pcnFfZW5hYmxlX21hc2sg fCByaW5nLT5pcnFfa2VlcF9tYXNrKSk7Cj4gLQlJOTE1X1dSSVRFKFJJTkdfSFdTVEFNKHJpbmct Pm1taW9fYmFzZSksIDB4ZmZmZmZmZmYpOwo+IC0KPiAtCUk5MTVfV1JJVEUoUklOR19NT0RFX0dF TjcocmluZyksCj4gLQkJICAgX01BU0tFRF9CSVRfRElTQUJMRShHRlhfUkVQTEFZX01PREUpIHwK PiAtCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0ZYX1JVTl9MSVNUX0VOQUJMRSkpOwo+IC0JUE9T VElOR19SRUFEKFJJTkdfTU9ERV9HRU43KHJpbmcpKTsKPiAtCURSTV9ERUJVR19EUklWRVIoIkV4 ZWNsaXN0cyBlbmFibGVkIGZvciAlc1xuIiwgcmluZy0+bmFtZSk7Cj4gLQo+IC0JbWVtc2V0KCZy aW5nLT5oYW5nY2hlY2ssIDAsIHNpemVvZihyaW5nLT5oYW5nY2hlY2spKTsKPiAtCj4gLQlyZXR1 cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBnZW44X2luaXRfcmVuZGVyX3Jpbmcoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IHJpbmctPmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IGdlbjhfaW5pdF9jb21tb25f cmluZyhyaW5nKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQkvKiBXZSBu ZWVkIHRvIGRpc2FibGUgdGhlIEFzeW5jRmxpcCBwZXJmb3JtYW5jZSBvcHRpbWlzYXRpb25zIGlu IG9yZGVyCj4gLQkgKiB0byB1c2UgTUlfV0FJVF9GT1JfRVZFTlQgd2l0aGluIHRoZSBDUy4gSXQg c2hvdWxkIGFscmVhZHkgYmUKPiAtCSAqIHByb2dyYW1tZWQgdG8gJzEnIG9uIGFsbCBwcm9kdWN0 cy4KPiAtCSAqCj4gLQkgKiBXYURpc2FibGVBc3luY0ZsaXBQZXJmTW9kZTpzbmIsaXZiLGhzdyx2 bHYsYmR3LGNodgo+IC0JICovCj4gLQlJOTE1X1dSSVRFKE1JX01PREUsIF9NQVNLRURfQklUX0VO QUJMRShBU1lOQ19GTElQX1BFUkZfRElTQUJMRSkpOwo+IC0KPiAtCXJldCA9IGludGVsX2luaXRf cGlwZV9jb250cm9sKHJpbmcpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAt CUk5MTVfV1JJVEUoSU5TVFBNLCBfTUFTS0VEX0JJVF9FTkFCTEUoSU5TVFBNX0ZPUkNFX09SREVS SU5HKSk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBnZW44X2Vt aXRfYmJfc3RhcnQoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4gLQkJCSAgICAg IHU2NCBvZmZzZXQsIHVuc2lnbmVkIGZsYWdzKQo+IC17Cj4gLQlib29sIHBwZ3R0ID0gIShmbGFn cyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKTsKPiAtCWludCByZXQ7Cj4gLQo+IC0JcmV0ID0gaW50 ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHJpbmdidWYsIDQpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1 cm4gcmV0Owo+IC0KPiAtCS8qIEZJWE1FKEJEVyk6IEFkZHJlc3Mgc3BhY2UgYW5kIHNlY3VyaXR5 IHNlbGVjdG9ycy4gKi8KPiAtCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX0JB VENIX0JVRkZFUl9TVEFSVF9HRU44IHwgKHBwZ3R0PDw4KSk7Cj4gLQlpbnRlbF9sb2dpY2FsX3Jp bmdfZW1pdChyaW5nYnVmLCBsb3dlcl8zMl9iaXRzKG9mZnNldCkpOwo+IC0JaW50ZWxfbG9naWNh bF9yaW5nX2VtaXQocmluZ2J1ZiwgdXBwZXJfMzJfYml0cyhvZmZzZXQpKTsKPiAtCWludGVsX2xv Z2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX05PT1ApOwo+IC0JaW50ZWxfbG9naWNhbF9yaW5n X2FkdmFuY2UocmluZ2J1Zik7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBi b29sIGdlbjhfbG9naWNhbF9yaW5nX2dldF9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmlu ZykKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKPiAtCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQl1bnNp Z25lZCBsb25nIGZsYWdzOwo+IC0KPiAtCWlmICghZGV2LT5pcnFfZW5hYmxlZCkKPiAtCQlyZXR1 cm4gZmFsc2U7Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywg ZmxhZ3MpOwo+IC0JaWYgKHJpbmctPmlycV9yZWZjb3VudCsrID09IDApIHsKPiAtCQlJOTE1X1dS SVRFX0lNUihyaW5nLCB+KHJpbmctPmlycV9lbmFibGVfbWFzayB8IHJpbmctPmlycV9rZWVwX21h c2spKTsKPiAtCQlQT1NUSU5HX1JFQUQoUklOR19JTVIocmluZy0+bW1pb19iYXNlKSk7Cj4gLQl9 Cj4gLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGZsYWdzKTsK PiAtCj4gLQlyZXR1cm4gdHJ1ZTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZ2VuOF9sb2dpY2Fs X3JpbmdfcHV0X2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+IC17Cj4gLQlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgZmxhZ3MpOwo+ IC0JaWYgKC0tcmluZy0+aXJxX3JlZmNvdW50ID09IDApIHsKPiAtCQlJOTE1X1dSSVRFX0lNUihy aW5nLCB+cmluZy0+aXJxX2tlZXBfbWFzayk7Cj4gLQkJUE9TVElOR19SRUFEKFJJTkdfSU1SKHJp bmctPm1taW9fYmFzZSkpOwo+IC0JfQo+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3By aXYtPmlycV9sb2NrLCBmbGFncyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZ2VuOF9lbWl0X2Zs dXNoKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAo+IC0JCQkgICB1MzIgaW52YWxp ZGF0ZV9kb21haW5zLAo+IC0JCQkgICB1MzIgdW51c2VkKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nID0gcmluZ2J1Zi0+cmluZzsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSByaW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwo+IC0JdWludDMyX3QgY21kOwo+IC0JaW50IHJldDsKPiAtCj4gLQly ZXQgPSBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4ocmluZ2J1ZiwgNCk7Cj4gLQlpZiAocmV0KQo+ IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JY21kID0gTUlfRkxVU0hfRFcgKyAxOwo+IC0KPiAtCWlm IChyaW5nID09ICZkZXZfcHJpdi0+cmluZ1tWQ1NdKSB7Cj4gLQkJaWYgKGludmFsaWRhdGVfZG9t YWlucyAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKQo+IC0JCQljbWQgfD0gTUlfSU5WQUxJREFURV9U TEIgfCBNSV9JTlZBTElEQVRFX0JTRCB8Cj4gLQkJCQlNSV9GTFVTSF9EV19TVE9SRV9JTkRFWCB8 Cj4gLQkJCQlNSV9GTFVTSF9EV19PUF9TVE9SRURXOwo+IC0JfSBlbHNlIHsKPiAtCQlpZiAoaW52 YWxpZGF0ZV9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUikKPiAtCQkJY21kIHw9IE1J X0lOVkFMSURBVEVfVExCIHwgTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVggfAo+IC0JCQkJTUlfRkxV U0hfRFdfT1BfU1RPUkVEVzsKPiAtCX0KPiAtCj4gLQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChy aW5nYnVmLCBjbWQpOwo+IC0JaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwKPiAtCQkJ CUk5MTVfR0VNX0hXU19TQ1JBVENIX0FERFIgfAo+IC0JCQkJTUlfRkxVU0hfRFdfVVNFX0dUVCk7 Cj4gLQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCAwKTsgLyogdXBwZXIgYWRkciAq Lwo+IC0JaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgMCk7IC8qIHZhbHVlICovCj4g LQlpbnRlbF9sb2dpY2FsX3JpbmdfYWR2YW5jZShyaW5nYnVmKTsKPiArCS8qIHN0YXJ0IHN1c3Bl bmRlZCAqLwo+ICsJZW5naW5lLT5leGVjbGlzdHNfZW5hYmxlZCA9IHRydWU7Cj4gKwllbmdpbmUt PmV4ZWNsaXN0c19zdWJtaXR0ZWQgPSB+MDsKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQo+IC0K PiAtc3RhdGljIGludCBnZW44X2VtaXRfZmx1c2hfcmVuZGVyKHN0cnVjdCBpbnRlbF9yaW5nYnVm ZmVyICpyaW5nYnVmLAo+IC0JCQkJICB1MzIgaW52YWxpZGF0ZV9kb21haW5zLAo+IC0JCQkJICB1 MzIgZmx1c2hfZG9tYWlucykKPiAtewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9 IHJpbmdidWYtPnJpbmc7Cj4gLQl1MzIgc2NyYXRjaF9hZGRyID0gcmluZy0+c2NyYXRjaC5ndHRf b2Zmc2V0ICsgMiAqIENBQ0hFTElORV9CWVRFUzsKPiAtCXUzMiBmbGFncyA9IDA7Cj4gLQlpbnQg cmV0Owo+IC0KPiAtCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DU19TVEFMTDsKPiAtCj4gLQlpZiAo Zmx1c2hfZG9tYWlucykgewo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VU X0NBQ0hFX0ZMVVNIOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9DQUNIRV9GTFVT SDsKPiAtCX0KPiAtCj4gLQlpZiAoaW52YWxpZGF0ZV9kb21haW5zKSB7Cj4gLQkJZmxhZ3MgfD0g UElQRV9DT05UUk9MX1RMQl9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9J TlNUUlVDVElPTl9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9U RVhUVVJFX0NBQ0hFX0lOVkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1ZGX0NB Q0hFX0lOVkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NPTlNUX0NBQ0hFX0lO VkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUQVRFX0NBQ0hFX0lOVkFMSURB VEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFOwo+IC0JCWZsYWdzIHw9IFBJ UEVfQ09OVFJPTF9HTE9CQUxfR1RUX0lWQjsKPiAtCX0KPiAtCj4gLQlyZXQgPSBpbnRlbF9sb2dp Y2FsX3JpbmdfYmVnaW4ocmluZ2J1ZiwgNik7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7 Cj4gLQo+IC0JaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgR0ZYX09QX1BJUEVfQ09O VFJPTCg2KSk7Cj4gLQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBmbGFncyk7Cj4g LQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBzY3JhdGNoX2FkZHIpOwo+IC0JaW50 ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgMCk7Cj4gLQlpbnRlbF9sb2dpY2FsX3Jpbmdf ZW1pdChyaW5nYnVmLCAwKTsKPiAtCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIDAp Owo+IC0JaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2UocmluZ2J1Zik7Cj4gLQo+IC0JcmV0dXJu IDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB1MzIgZ2VuOF9nZXRfc2Vxbm8oc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqcmluZywgYm9vbCBsYXp5X2NvaGVyZW5jeSkKPiAtewo+IC0JcmV0dXJuIGludGVs X3JlYWRfc3RhdHVzX3BhZ2UocmluZywgSTkxNV9HRU1fSFdTX0lOREVYKTsKPiAtfQo+IC0KPiAt c3RhdGljIHZvaWQgZ2VuOF9zZXRfc2Vxbm8oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywg dTMyIHNlcW5vKQo+IC17Cj4gLQlpbnRlbF93cml0ZV9zdGF0dXNfcGFnZShyaW5nLCBJOTE1X0dF TV9IV1NfSU5ERVgsIHNlcW5vKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBnZW44X2VtaXRfcmVx dWVzdChzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZikKPiAtewo+IC0Jc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZyA9IHJpbmdidWYtPnJpbmc7Cj4gLQl1MzIgY21kOwo+IC0JaW50 IHJldDsKPiAtCj4gLQlyZXQgPSBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4ocmluZ2J1ZiwgNik7 Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JY21kID0gTUlfU1RPUkVfRFdP UkRfSU1NX0dFTjg7Cj4gLQljbWQgfD0gTUlfR0xPQkFMX0dUVDsKPiAtCj4gLQlpbnRlbF9sb2dp Y2FsX3JpbmdfZW1pdChyaW5nYnVmLCBjbWQpOwo+IC0JaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQo cmluZ2J1ZiwKPiAtCQkJCShyaW5nLT5zdGF0dXNfcGFnZS5nZnhfYWRkciArCj4gLQkJCQkoSTkx NV9HRU1fSFdTX0lOREVYIDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKSkpOwo+IC0JaW50 ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgMCk7Cj4gLQlpbnRlbF9sb2dpY2FsX3Jpbmdf ZW1pdChyaW5nYnVmLCByaW5nLT5vdXRzdGFuZGluZ19sYXp5X3NlcW5vKTsKPiAtCWludGVsX2xv Z2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX1VTRVJfSU5URVJSVVBUKTsKPiAtCWludGVsX2xv Z2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX05PT1ApOwo+IC0JaW50ZWxfbG9naWNhbF9yaW5n X2FkdmFuY2VfYW5kX3N1Ym1pdChyaW5nYnVmKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0K PiAtLyoqCj4gLSAqIGludGVsX2xvZ2ljYWxfcmluZ19jbGVhbnVwKCkgLSBkZWFsbG9jYXRlIHRo ZSBFbmdpbmUgQ29tbWFuZCBTdHJlYW1lcgo+IC0gKgo+IC0gKiBAcmluZzogRW5naW5lIENvbW1h bmQgU3RyZWFtZXIuCj4gLSAqCj4gLSAqLwo+IC12b2lkIGludGVsX2xvZ2ljYWxfcmluZ19jbGVh bnVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7Cj4gLQo+IC0JaWYg KCFpbnRlbF9yaW5nX2luaXRpYWxpemVkKHJpbmcpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpbnRl bF9sb2dpY2FsX3Jpbmdfc3RvcChyaW5nKTsKPiAtCVdBUk5fT04oKEk5MTVfUkVBRF9NT0RFKHJp bmcpICYgTU9ERV9JRExFKSA9PSAwKTsKPiAtCXJpbmctPnByZWFsbG9jYXRlZF9sYXp5X3JlcXVl c3QgPSBOVUxMOwo+IC0JcmluZy0+b3V0c3RhbmRpbmdfbGF6eV9zZXFubyA9IDA7Cj4gLQo+IC0J aWYgKHJpbmctPmNsZWFudXApCj4gLQkJcmluZy0+Y2xlYW51cChyaW5nKTsKPiAtCj4gLQlpOTE1 X2NtZF9wYXJzZXJfZmluaV9yaW5nKHJpbmcpOwo+IC0KPiAtCWlmIChyaW5nLT5zdGF0dXNfcGFn ZS5vYmopIHsKPiAtCQlrdW5tYXAoc2dfcGFnZShyaW5nLT5zdGF0dXNfcGFnZS5vYmotPnBhZ2Vz LT5zZ2wpKTsKPiAtCQlyaW5nLT5zdGF0dXNfcGFnZS5vYmogPSBOVUxMOwo+IC0JfQo+IC19Cj4g LQo+IC1zdGF0aWMgaW50IGxvZ2ljYWxfcmluZ19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gLXsKPiAtCWludCByZXQ7Cj4gLQo+IC0J LyogSW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rLiAqLwo+IC0JcmluZy0+YnVmZmVyID0gTlVMTDsK PiAtCj4gLQlyaW5nLT5kZXYgPSBkZXY7Cj4gLQlJTklUX0xJU1RfSEVBRCgmcmluZy0+YWN0aXZl X2xpc3QpOwo+IC0JSU5JVF9MSVNUX0hFQUQoJnJpbmctPnJlcXVlc3RfbGlzdCk7Cj4gLQlpbml0 X3dhaXRxdWV1ZV9oZWFkKCZyaW5nLT5pcnFfcXVldWUpOwo+IC0KPiAtCUlOSVRfTElTVF9IRUFE KCZyaW5nLT5leGVjbGlzdF9xdWV1ZSk7Cj4gLQlzcGluX2xvY2tfaW5pdCgmcmluZy0+ZXhlY2xp c3RfbG9jayk7Cj4gLQlyaW5nLT5uZXh0X2NvbnRleHRfc3RhdHVzX2J1ZmZlciA9IDA7Cj4gLQo+ IC0JcmV0ID0gaTkxNV9jbWRfcGFyc2VyX2luaXRfcmluZyhyaW5nKTsKPiAtCWlmIChyZXQpCj4g LQkJcmV0dXJuIHJldDsKPiAtCj4gLQlpZiAocmluZy0+aW5pdCkgewo+IC0JCXJldCA9IHJpbmct PmluaXQocmluZyk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4g LQlyZXQgPSBpbnRlbF9scl9jb250ZXh0X2RlZmVycmVkX2NyZWF0ZShyaW5nLT5kZWZhdWx0X2Nv bnRleHQsIHJpbmcpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQg bG9naWNhbF9yZW5kZXJfcmluZ19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gLXsKPiAt CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4g LQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nID0gJmRldl9wcml2LT5yaW5nW1JDU107Cj4g LQo+IC0JcmluZy0+bmFtZSA9ICJyZW5kZXIgcmluZyI7Cj4gLQlyaW5nLT5pZCA9IFJDUzsKPiAt CXJpbmctPm1taW9fYmFzZSA9IFJFTkRFUl9SSU5HX0JBU0U7Cj4gLQlyaW5nLT5pcnFfZW5hYmxl X21hc2sgPQo+IC0JCUdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCA8PCBHRU44X1JDU19JUlFfU0hJ RlQ7Cj4gLQlyaW5nLT5pcnFfa2VlcF9tYXNrID0KPiAtCQlHVF9DT05URVhUX1NXSVRDSF9JTlRF UlJVUFQgPDwgR0VOOF9SQ1NfSVJRX1NISUZUOwo+IC0JaWYgKEhBU19MM19EUEYoZGV2KSkKPiAt CQlyaW5nLT5pcnFfa2VlcF9tYXNrIHw9IEdUX1JFTkRFUl9MM19QQVJJVFlfRVJST1JfSU5URVJS VVBUOwo+IC0KPiAtCXJpbmctPmluaXQgPSBnZW44X2luaXRfcmVuZGVyX3Jpbmc7Cj4gLQlyaW5n LT5jbGVhbnVwID0gaW50ZWxfZmluaV9waXBlX2NvbnRyb2w7Cj4gLQlyaW5nLT5nZXRfc2Vxbm8g PSBnZW44X2dldF9zZXFubzsKPiAtCXJpbmctPnNldF9zZXFubyA9IGdlbjhfc2V0X3NlcW5vOwo+ IC0JcmluZy0+ZW1pdF9yZXF1ZXN0ID0gZ2VuOF9lbWl0X3JlcXVlc3Q7Cj4gLQlyaW5nLT5lbWl0 X2ZsdXNoID0gZ2VuOF9lbWl0X2ZsdXNoX3JlbmRlcjsKPiAtCXJpbmctPmlycV9nZXQgPSBnZW44 X2xvZ2ljYWxfcmluZ19nZXRfaXJxOwo+IC0JcmluZy0+aXJxX3B1dCA9IGdlbjhfbG9naWNhbF9y aW5nX3B1dF9pcnE7Cj4gLQlyaW5nLT5lbWl0X2JiX3N0YXJ0ID0gZ2VuOF9lbWl0X2JiX3N0YXJ0 Owo+IC0KPiAtCXJldHVybiBsb2dpY2FsX3JpbmdfaW5pdChkZXYsIHJpbmcpOwo+IC19Cj4gLQo+ IC1zdGF0aWMgaW50IGxvZ2ljYWxfYnNkX3JpbmdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOwo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9ICZkZXZfcHJpdi0+cmlu Z1tWQ1NdOwo+IC0KPiAtCXJpbmctPm5hbWUgPSAiYnNkIHJpbmciOwo+IC0JcmluZy0+aWQgPSBW Q1M7Cj4gLQlyaW5nLT5tbWlvX2Jhc2UgPSBHRU42X0JTRF9SSU5HX0JBU0U7Cj4gLQlyaW5nLT5p cnFfZW5hYmxlX21hc2sgPQo+IC0JCUdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCA8PCBHRU44X1ZD UzFfSVJRX1NISUZUOwo+IC0JcmluZy0+aXJxX2tlZXBfbWFzayA9Cj4gLQkJR1RfQ09OVEVYVF9T V0lUQ0hfSU5URVJSVVBUIDw8IEdFTjhfVkNTMV9JUlFfU0hJRlQ7Cj4gLQo+IC0JcmluZy0+aW5p dCA9IGdlbjhfaW5pdF9jb21tb25fcmluZzsKPiAtCXJpbmctPmdldF9zZXFubyA9IGdlbjhfZ2V0 X3NlcW5vOwo+IC0JcmluZy0+c2V0X3NlcW5vID0gZ2VuOF9zZXRfc2Vxbm87Cj4gLQlyaW5nLT5l bWl0X3JlcXVlc3QgPSBnZW44X2VtaXRfcmVxdWVzdDsKPiAtCXJpbmctPmVtaXRfZmx1c2ggPSBn ZW44X2VtaXRfZmx1c2g7Cj4gLQlyaW5nLT5pcnFfZ2V0ID0gZ2VuOF9sb2dpY2FsX3JpbmdfZ2V0 X2lycTsKPiAtCXJpbmctPmlycV9wdXQgPSBnZW44X2xvZ2ljYWxfcmluZ19wdXRfaXJxOwo+IC0J cmluZy0+ZW1pdF9iYl9zdGFydCA9IGdlbjhfZW1pdF9iYl9zdGFydDsKPiAtCj4gLQlyZXR1cm4g bG9naWNhbF9yaW5nX2luaXQoZGV2LCByaW5nKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBsb2dp Y2FsX2JzZDJfcmluZ19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gLXsKPiAtCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nID0gJmRldl9wcml2LT5yaW5nW1ZDUzJdOwo+IC0KPiAt CXJpbmctPm5hbWUgPSAiYmRzMiByaW5nIjsKPiAtCXJpbmctPmlkID0gVkNTMjsKPiAtCXJpbmct Pm1taW9fYmFzZSA9IEdFTjhfQlNEMl9SSU5HX0JBU0U7Cj4gLQlyaW5nLT5pcnFfZW5hYmxlX21h c2sgPQo+IC0JCUdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCA8PCBHRU44X1ZDUzJfSVJRX1NISUZU Owo+IC0JcmluZy0+aXJxX2tlZXBfbWFzayA9Cj4gLQkJR1RfQ09OVEVYVF9TV0lUQ0hfSU5URVJS VVBUIDw8IEdFTjhfVkNTMl9JUlFfU0hJRlQ7Cj4gLQo+IC0JcmluZy0+aW5pdCA9IGdlbjhfaW5p dF9jb21tb25fcmluZzsKPiAtCXJpbmctPmdldF9zZXFubyA9IGdlbjhfZ2V0X3NlcW5vOwo+IC0J cmluZy0+c2V0X3NlcW5vID0gZ2VuOF9zZXRfc2Vxbm87Cj4gLQlyaW5nLT5lbWl0X3JlcXVlc3Qg PSBnZW44X2VtaXRfcmVxdWVzdDsKPiAtCXJpbmctPmVtaXRfZmx1c2ggPSBnZW44X2VtaXRfZmx1 c2g7Cj4gLQlyaW5nLT5pcnFfZ2V0ID0gZ2VuOF9sb2dpY2FsX3JpbmdfZ2V0X2lycTsKPiAtCXJp bmctPmlycV9wdXQgPSBnZW44X2xvZ2ljYWxfcmluZ19wdXRfaXJxOwo+IC0JcmluZy0+ZW1pdF9i Yl9zdGFydCA9IGdlbjhfZW1pdF9iYl9zdGFydDsKPiAtCj4gLQlyZXR1cm4gbG9naWNhbF9yaW5n X2luaXQoZGV2LCByaW5nKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBsb2dpY2FsX2JsdF9yaW5n X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbQkNTXTsKPiAtCj4gLQlyaW5nLT5uYW1lID0g ImJsaXR0ZXIgcmluZyI7Cj4gLQlyaW5nLT5pZCA9IEJDUzsKPiAtCXJpbmctPm1taW9fYmFzZSA9 IEJMVF9SSU5HX0JBU0U7Cj4gLQlyaW5nLT5pcnFfZW5hYmxlX21hc2sgPQo+IC0JCUdUX1JFTkRF Ul9VU0VSX0lOVEVSUlVQVCA8PCBHRU44X0JDU19JUlFfU0hJRlQ7Cj4gLQlyaW5nLT5pcnFfa2Vl cF9tYXNrID0KPiAtCQlHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQgPDwgR0VOOF9CQ1NfSVJR X1NISUZUOwo+IC0KPiAtCXJpbmctPmluaXQgPSBnZW44X2luaXRfY29tbW9uX3Jpbmc7Cj4gLQly aW5nLT5nZXRfc2Vxbm8gPSBnZW44X2dldF9zZXFubzsKPiAtCXJpbmctPnNldF9zZXFubyA9IGdl bjhfc2V0X3NlcW5vOwo+IC0JcmluZy0+ZW1pdF9yZXF1ZXN0ID0gZ2VuOF9lbWl0X3JlcXVlc3Q7 Cj4gLQlyaW5nLT5lbWl0X2ZsdXNoID0gZ2VuOF9lbWl0X2ZsdXNoOwo+IC0JcmluZy0+aXJxX2dl dCA9IGdlbjhfbG9naWNhbF9yaW5nX2dldF9pcnE7Cj4gLQlyaW5nLT5pcnFfcHV0ID0gZ2VuOF9s b2dpY2FsX3JpbmdfcHV0X2lycTsKPiAtCXJpbmctPmVtaXRfYmJfc3RhcnQgPSBnZW44X2VtaXRf YmJfc3RhcnQ7Cj4gLQo+IC0JcmV0dXJuIGxvZ2ljYWxfcmluZ19pbml0KGRldiwgcmluZyk7Cj4g LX0KPiAtCj4gLXN0YXRpYyBpbnQgbG9naWNhbF92ZWJveF9yaW5nX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSAmZGV2 X3ByaXYtPnJpbmdbVkVDU107Cj4gLQo+IC0JcmluZy0+bmFtZSA9ICJ2aWRlbyBlbmhhbmNlbWVu dCByaW5nIjsKPiAtCXJpbmctPmlkID0gVkVDUzsKPiAtCXJpbmctPm1taW9fYmFzZSA9IFZFQk9Y X1JJTkdfQkFTRTsKPiAtCXJpbmctPmlycV9lbmFibGVfbWFzayA9Cj4gLQkJR1RfUkVOREVSX1VT RVJfSU5URVJSVVBUIDw8IEdFTjhfVkVDU19JUlFfU0hJRlQ7Cj4gLQlyaW5nLT5pcnFfa2VlcF9t YXNrID0KPiAtCQlHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQgPDwgR0VOOF9WRUNTX0lSUV9T SElGVDsKPiAtCj4gLQlyaW5nLT5pbml0ID0gZ2VuOF9pbml0X2NvbW1vbl9yaW5nOwo+IC0Jcmlu Zy0+Z2V0X3NlcW5vID0gZ2VuOF9nZXRfc2Vxbm87Cj4gLQlyaW5nLT5zZXRfc2Vxbm8gPSBnZW44 X3NldF9zZXFubzsKPiAtCXJpbmctPmVtaXRfcmVxdWVzdCA9IGdlbjhfZW1pdF9yZXF1ZXN0Owo+ IC0JcmluZy0+ZW1pdF9mbHVzaCA9IGdlbjhfZW1pdF9mbHVzaDsKPiAtCXJpbmctPmlycV9nZXQg PSBnZW44X2xvZ2ljYWxfcmluZ19nZXRfaXJxOwo+IC0JcmluZy0+aXJxX3B1dCA9IGdlbjhfbG9n aWNhbF9yaW5nX3B1dF9pcnE7Cj4gLQlyaW5nLT5lbWl0X2JiX3N0YXJ0ID0gZ2VuOF9lbWl0X2Ji X3N0YXJ0Owo+IC0KPiAtCXJldHVybiBsb2dpY2FsX3JpbmdfaW5pdChkZXYsIHJpbmcpOwo+IC19 Cj4gLQo+IC0vKioKPiAtICogaW50ZWxfbG9naWNhbF9yaW5nc19pbml0KCkgLSBhbGxvY2F0ZSwg cG9wdWxhdGUgYW5kIGluaXQgdGhlIEVuZ2luZSBDb21tYW5kIFN0cmVhbWVycwo+IC0gKiBAZGV2 OiBEUk0gZGV2aWNlLgo+IC0gKgo+IC0gKiBUaGlzIGZ1bmN0aW9uIGluaXRzIHRoZSBlbmdpbmVz IGZvciBhbiBFeGVjbGlzdHMgc3VibWlzc2lvbiBzdHlsZSAodGhlIGVxdWl2YWxlbnQgaW4gdGhl Cj4gLSAqIGxlZ2FjeSByaW5nYnVmZmVyIHN1Ym1pc3Npb24gd29ybGQgd291bGQgYmUgaTkxNV9n ZW1faW5pdF9yaW5ncykuIEl0IGRvZXMgaXQgb25seSBmb3IKPiAtICogdGhvc2UgZW5naW5lcyB0 aGF0IGFyZSBwcmVzZW50IGluIHRoZSBoYXJkd2FyZS4KPiAtICoKPiAtICogUmV0dXJuOiBub24t emVybyBpZiB0aGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkLgo+IC0gKi8KPiAtaW50IGludGVsX2xv Z2ljYWxfcmluZ3NfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+IC17Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0JaW50IHJl dDsKPiAtCj4gLQlyZXQgPSBsb2dpY2FsX3JlbmRlcl9yaW5nX2luaXQoZGV2KTsKPiAtCWlmIChy ZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlpZiAoSEFTX0JTRChkZXYpKSB7Cj4gLQkJcmV0 ID0gbG9naWNhbF9ic2RfcmluZ19pbml0KGRldik7Cj4gLQkJaWYgKHJldCkKPiAtCQkJZ290byBj bGVhbnVwX3JlbmRlcl9yaW5nOwo+IC0JfQo+IC0KPiAtCWlmIChIQVNfQkxUKGRldikpIHsKPiAt CQlyZXQgPSBsb2dpY2FsX2JsdF9yaW5nX2luaXQoZGV2KTsKPiAtCQlpZiAocmV0KQo+IC0JCQln b3RvIGNsZWFudXBfYnNkX3Jpbmc7Cj4gLQl9Cj4gLQo+IC0JaWYgKEhBU19WRUJPWChkZXYpKSB7 Cj4gLQkJcmV0ID0gbG9naWNhbF92ZWJveF9yaW5nX2luaXQoZGV2KTsKPiAtCQlpZiAocmV0KQo+ IC0JCQlnb3RvIGNsZWFudXBfYmx0X3Jpbmc7Cj4gLQl9Cj4gLQo+IC0JaWYgKEhBU19CU0QyKGRl dikpIHsKPiAtCQlyZXQgPSBsb2dpY2FsX2JzZDJfcmluZ19pbml0KGRldik7Cj4gLQkJaWYgKHJl dCkKPiAtCQkJZ290byBjbGVhbnVwX3ZlYm94X3Jpbmc7Cj4gLQl9Cj4gLQo+IC0JcmV0ID0gaTkx NV9nZW1fc2V0X3NlcW5vKGRldiwgKCh1MzIpfjAgLSAweDEwMDApKTsKPiAtCWlmIChyZXQpCj4g LQkJZ290byBjbGVhbnVwX2JzZDJfcmluZzsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtCj4gLWNsZWFu dXBfYnNkMl9yaW5nOgo+IC0JaW50ZWxfbG9naWNhbF9yaW5nX2NsZWFudXAoJmRldl9wcml2LT5y aW5nW1ZDUzJdKTsKPiAtY2xlYW51cF92ZWJveF9yaW5nOgo+IC0JaW50ZWxfbG9naWNhbF9yaW5n X2NsZWFudXAoJmRldl9wcml2LT5yaW5nW1ZFQ1NdKTsKPiAtY2xlYW51cF9ibHRfcmluZzoKPiAt CWludGVsX2xvZ2ljYWxfcmluZ19jbGVhbnVwKCZkZXZfcHJpdi0+cmluZ1tCQ1NdKTsKPiAtY2xl YW51cF9ic2RfcmluZzoKPiAtCWludGVsX2xvZ2ljYWxfcmluZ19jbGVhbnVwKCZkZXZfcHJpdi0+ cmluZ1tWQ1NdKTsKPiAtY2xlYW51cF9yZW5kZXJfcmluZzoKPiAtCWludGVsX2xvZ2ljYWxfcmlu Z19jbGVhbnVwKCZkZXZfcHJpdi0+cmluZ1tSQ1NdKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19 Cj4gLQo+IC1pbnQgaW50ZWxfbHJfY29udGV4dF9yZW5kZXJfc3RhdGVfaW5pdChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCQkJICAgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj dHgpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmID0gY3R4LT5lbmdp bmVbcmluZy0+aWRdLnJpbmdidWY7Cj4gLQlzdHJ1Y3QgcmVuZGVyX3N0YXRlIHNvOwo+IC0Jc3Ry dWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2ID0gY3R4LT5maWxlX3ByaXY7Cj4g LQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUgPSBmaWxlX3ByaXYgPyBmaWxlX3ByaXYtPmZpbGUgOiBO VUxMOwo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQgPSBpOTE1X2dlbV9yZW5kZXJfc3RhdGVfcHJl cGFyZShyaW5nLCAmc28pOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCWlm IChzby5yb2RhdGEgPT0gTlVMTCkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlyZXQgPSByaW5nLT5l bWl0X2JiX3N0YXJ0KHJpbmdidWYsCj4gLQkJCXNvLmdndHRfb2Zmc2V0LAo+IC0JCQlJOTE1X0RJ U1BBVENIX1NFQ1VSRSk7Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gb3V0Owo+IC0KPiAtCWk5MTVf dm1hX21vdmVfdG9fYWN0aXZlKGk5MTVfZ2VtX29ial90b19nZ3R0KHNvLm9iaiksIHJpbmcpOwo+ IC0KPiAtCXJldCA9IF9faTkxNV9hZGRfcmVxdWVzdChyaW5nLCBmaWxlLCBzby5vYmosIE5VTEwp Owo+IC0JLyogaW50ZWxfbG9naWNhbF9yaW5nX2FkZF9yZXF1ZXN0IG1vdmVzIG9iamVjdCB0byBp bmFjdGl2ZSBpZiBpdAo+IC0JICogZmFpbHMgKi8KPiAtb3V0Ogo+IC0JaTkxNV9nZW1fcmVuZGVy X3N0YXRlX2ZpbmkoJnNvKTsKPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQK PiAtcG9wdWxhdGVfbHJfY29udGV4dChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LCBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqY3R4X29iaiwKPiAtCQkgICAgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZywgc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYpCj4gLXsKPiAtCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKnJpbmdfb2JqID0gcmluZ2J1Zi0+b2JqOwo+IC0Jc3RydWN0IGk5MTVfaHdfcHBn dHQgKnBwZ3R0ID0gY3R4LT5wcGd0dDsKPiAtCXN0cnVjdCBwYWdlICpwYWdlOwo+IC0JdWludDMy X3QgKnJlZ19zdGF0ZTsKPiAtCWludCByZXQ7Cj4gLQo+IC0JaWYgKCFwcGd0dCkKPiAtCQlwcGd0 dCA9IGRldl9wcml2LT5tbS5hbGlhc2luZ19wcGd0dDsKPiAtCj4gLQlyZXQgPSBpOTE1X2dlbV9v YmplY3Rfc2V0X3RvX2NwdV9kb21haW4oY3R4X29iaiwgdHJ1ZSk7Cj4gLQlpZiAocmV0KSB7Cj4g LQkJRFJNX0RFQlVHX0RSSVZFUigiQ291bGQgbm90IHNldCB0byBDUFUgZG9tYWluXG4iKTsKPiAt CQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAtCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFn ZXMoY3R4X29iaik7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigiQ291bGQg bm90IGdldCBvYmplY3QgcGFnZXNcbiIpOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0J aTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhjdHhfb2JqKTsKPiAtCj4gLQkvKiBUaGUgc2Vjb25k IHBhZ2Ugb2YgdGhlIGNvbnRleHQgb2JqZWN0IGNvbnRhaW5zIHNvbWUgZmllbGRzIHdoaWNoIG11 c3QKPiAtCSAqIGJlIHNldCB1cCBwcmlvciB0byB0aGUgZmlyc3QgZXhlY3V0aW9uLiAqLwo+IC0J cGFnZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShjdHhfb2JqLCAxKTsKPiAtCXJlZ19zdGF0 ZSA9IGttYXBfYXRvbWljKHBhZ2UpOwo+IC0KPiAtCS8qIEEgY29udGV4dCBpcyBhY3R1YWxseSBh IGJpZyBiYXRjaCBidWZmZXIgd2l0aCBzZXZlcmFsIE1JX0xPQURfUkVHSVNURVJfSU1NCj4gLQkg KiBjb21tYW5kcyBmb2xsb3dlZCBieSAocmVnLCB2YWx1ZSkgcGFpcnMuIFRoZSB2YWx1ZXMgd2Ug YXJlIHNldHRpbmcgaGVyZSBhcmUKPiAtCSAqIG9ubHkgZm9yIHRoZSBmaXJzdCBjb250ZXh0IHJl c3RvcmU6IG9uIGEgc3Vic2VxdWVudCBzYXZlLCB0aGUgR1BVIHdpbGwKPiAtCSAqIHJlY3JlYXRl IHRoaXMgYmF0Y2hidWZmZXIgd2l0aCBuZXcgdmFsdWVzIChpbmNsdWRpbmcgYWxsIHRoZSBtaXNz aW5nCj4gLQkgKiBNSV9MT0FEX1JFR0lTVEVSX0lNTSBjb21tYW5kcyB0aGF0IHdlIGFyZSBub3Qg aW5pdGlhbGl6aW5nIGhlcmUpLiAqLwo+IC0JaWYgKHJpbmctPmlkID09IFJDUykKPiAtCQlyZWdf c3RhdGVbQ1RYX0xSSV9IRUFERVJfMF0gPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxNCk7Cj4gLQll bHNlCj4gLQkJcmVnX3N0YXRlW0NUWF9MUklfSEVBREVSXzBdID0gTUlfTE9BRF9SRUdJU1RFUl9J TU0oMTEpOwo+IC0JcmVnX3N0YXRlW0NUWF9MUklfSEVBREVSXzBdIHw9IE1JX0xSSV9GT1JDRV9Q T1NURUQ7Cj4gLQlyZWdfc3RhdGVbQ1RYX0NPTlRFWFRfQ09OVFJPTF0gPSBSSU5HX0NPTlRFWFRf Q09OVFJPTChyaW5nKTsKPiAtCXJlZ19zdGF0ZVtDVFhfQ09OVEVYVF9DT05UUk9MKzFdID0KPiAt CQkJX01BU0tFRF9CSVRfRU5BQkxFKCgxPDwzKSB8IE1JX1JFU1RPUkVfSU5ISUJJVCk7Cj4gLQly ZWdfc3RhdGVbQ1RYX1JJTkdfSEVBRF0gPSBSSU5HX0hFQUQocmluZy0+bW1pb19iYXNlKTsKPiAt CXJlZ19zdGF0ZVtDVFhfUklOR19IRUFEKzFdID0gMDsKPiAtCXJlZ19zdGF0ZVtDVFhfUklOR19U QUlMXSA9IFJJTkdfVEFJTChyaW5nLT5tbWlvX2Jhc2UpOwo+IC0JcmVnX3N0YXRlW0NUWF9SSU5H X1RBSUwrMV0gPSAwOwo+IC0JcmVnX3N0YXRlW0NUWF9SSU5HX0JVRkZFUl9TVEFSVF0gPSBSSU5H X1NUQVJUKHJpbmctPm1taW9fYmFzZSk7Cj4gLQlyZWdfc3RhdGVbQ1RYX1JJTkdfQlVGRkVSX1NU QVJUKzFdID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KHJpbmdfb2JqKTsKPiAtCXJlZ19zdGF0 ZVtDVFhfUklOR19CVUZGRVJfQ09OVFJPTF0gPSBSSU5HX0NUTChyaW5nLT5tbWlvX2Jhc2UpOwo+ IC0JcmVnX3N0YXRlW0NUWF9SSU5HX0JVRkZFUl9DT05UUk9MKzFdID0KPiAtCQkJKChyaW5nYnVm LT5zaXplIC0gUEFHRV9TSVpFKSAmIFJJTkdfTlJfUEFHRVMpIHwgUklOR19WQUxJRDsKPiAtCXJl Z19zdGF0ZVtDVFhfQkJfSEVBRF9VXSA9IHJpbmctPm1taW9fYmFzZSArIDB4MTY4Owo+IC0JcmVn X3N0YXRlW0NUWF9CQl9IRUFEX1UrMV0gPSAwOwo+IC0JcmVnX3N0YXRlW0NUWF9CQl9IRUFEX0xd ID0gcmluZy0+bW1pb19iYXNlICsgMHgxNDA7Cj4gLQlyZWdfc3RhdGVbQ1RYX0JCX0hFQURfTCsx XSA9IDA7Cj4gLQlyZWdfc3RhdGVbQ1RYX0JCX1NUQVRFXSA9IHJpbmctPm1taW9fYmFzZSArIDB4 MTEwOwo+IC0JcmVnX3N0YXRlW0NUWF9CQl9TVEFURSsxXSA9ICgxPDw1KTsKPiAtCXJlZ19zdGF0 ZVtDVFhfU0VDT05EX0JCX0hFQURfVV0gPSByaW5nLT5tbWlvX2Jhc2UgKyAweDExYzsKPiAtCXJl Z19zdGF0ZVtDVFhfU0VDT05EX0JCX0hFQURfVSsxXSA9IDA7Cj4gLQlyZWdfc3RhdGVbQ1RYX1NF Q09ORF9CQl9IRUFEX0xdID0gcmluZy0+bW1pb19iYXNlICsgMHgxMTQ7Cj4gLQlyZWdfc3RhdGVb Q1RYX1NFQ09ORF9CQl9IRUFEX0wrMV0gPSAwOwo+IC0JcmVnX3N0YXRlW0NUWF9TRUNPTkRfQkJf U1RBVEVdID0gcmluZy0+bW1pb19iYXNlICsgMHgxMTg7Cj4gLQlyZWdfc3RhdGVbQ1RYX1NFQ09O RF9CQl9TVEFURSsxXSA9IDA7Cj4gLQlpZiAocmluZy0+aWQgPT0gUkNTKSB7Cj4gLQkJLyogVE9E TzogYWNjb3JkaW5nIHRvIEJTcGVjLCB0aGUgcmVnaXN0ZXIgc3RhdGUgY29udGV4dAo+IC0JCSAq IGZvciBDSFYgZG9lcyBub3QgaGF2ZSB0aGVzZS4gT1RPSCwgdGhlc2UgcmVnaXN0ZXJzIGRvCj4g LQkJICogZXhpc3QgaW4gQ0hWLiBJJ20gd2FpdGluZyBmb3IgYSBjbGFyaWZpY2F0aW9uICovCj4g LQkJcmVnX3N0YXRlW0NUWF9CQl9QRVJfQ1RYX1BUUl0gPSByaW5nLT5tbWlvX2Jhc2UgKyAweDFj MDsKPiAtCQlyZWdfc3RhdGVbQ1RYX0JCX1BFUl9DVFhfUFRSKzFdID0gMDsKPiAtCQlyZWdfc3Rh dGVbQ1RYX1JDU19JTkRJUkVDVF9DVFhdID0gcmluZy0+bW1pb19iYXNlICsgMHgxYzQ7Cj4gLQkJ cmVnX3N0YXRlW0NUWF9SQ1NfSU5ESVJFQ1RfQ1RYKzFdID0gMDsKPiAtCQlyZWdfc3RhdGVbQ1RY X1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUXSA9IHJpbmctPm1taW9fYmFzZSArIDB4MWM4Owo+IC0J CXJlZ19zdGF0ZVtDVFhfUkNTX0lORElSRUNUX0NUWF9PRkZTRVQrMV0gPSAwOwo+IC0JfQo+IC0J cmVnX3N0YXRlW0NUWF9MUklfSEVBREVSXzFdID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oOSk7Cj4g LQlyZWdfc3RhdGVbQ1RYX0xSSV9IRUFERVJfMV0gfD0gTUlfTFJJX0ZPUkNFX1BPU1RFRDsKPiAt CXJlZ19zdGF0ZVtDVFhfQ1RYX1RJTUVTVEFNUF0gPSByaW5nLT5tbWlvX2Jhc2UgKyAweDNhODsK PiAtCXJlZ19zdGF0ZVtDVFhfQ1RYX1RJTUVTVEFNUCsxXSA9IDA7Cj4gLQlyZWdfc3RhdGVbQ1RY X1BEUDNfVURXXSA9IEdFTjhfUklOR19QRFBfVURXKHJpbmcsIDMpOwo+IC0JcmVnX3N0YXRlW0NU WF9QRFAzX0xEV10gPSBHRU44X1JJTkdfUERQX0xEVyhyaW5nLCAzKTsKPiAtCXJlZ19zdGF0ZVtD VFhfUERQMl9VRFddID0gR0VOOF9SSU5HX1BEUF9VRFcocmluZywgMik7Cj4gLQlyZWdfc3RhdGVb Q1RYX1BEUDJfTERXXSA9IEdFTjhfUklOR19QRFBfTERXKHJpbmcsIDIpOwo+IC0JcmVnX3N0YXRl W0NUWF9QRFAxX1VEV10gPSBHRU44X1JJTkdfUERQX1VEVyhyaW5nLCAxKTsKPiAtCXJlZ19zdGF0 ZVtDVFhfUERQMV9MRFddID0gR0VOOF9SSU5HX1BEUF9MRFcocmluZywgMSk7Cj4gLQlyZWdfc3Rh dGVbQ1RYX1BEUDBfVURXXSA9IEdFTjhfUklOR19QRFBfVURXKHJpbmcsIDApOwo+IC0JcmVnX3N0 YXRlW0NUWF9QRFAwX0xEV10gPSBHRU44X1JJTkdfUERQX0xEVyhyaW5nLCAwKTsKPiAtCXJlZ19z dGF0ZVtDVFhfUERQM19VRFcrMV0gPSB1cHBlcl8zMl9iaXRzKHBwZ3R0LT5wZF9kbWFfYWRkclsz XSk7Cj4gLQlyZWdfc3RhdGVbQ1RYX1BEUDNfTERXKzFdID0gbG93ZXJfMzJfYml0cyhwcGd0dC0+ cGRfZG1hX2FkZHJbM10pOwo+IC0JcmVnX3N0YXRlW0NUWF9QRFAyX1VEVysxXSA9IHVwcGVyXzMy X2JpdHMocHBndHQtPnBkX2RtYV9hZGRyWzJdKTsKPiAtCXJlZ19zdGF0ZVtDVFhfUERQMl9MRFcr MV0gPSBsb3dlcl8zMl9iaXRzKHBwZ3R0LT5wZF9kbWFfYWRkclsyXSk7Cj4gLQlyZWdfc3RhdGVb Q1RYX1BEUDFfVURXKzFdID0gdXBwZXJfMzJfYml0cyhwcGd0dC0+cGRfZG1hX2FkZHJbMV0pOwo+ IC0JcmVnX3N0YXRlW0NUWF9QRFAxX0xEVysxXSA9IGxvd2VyXzMyX2JpdHMocHBndHQtPnBkX2Rt YV9hZGRyWzFdKTsKPiAtCXJlZ19zdGF0ZVtDVFhfUERQMF9VRFcrMV0gPSB1cHBlcl8zMl9iaXRz KHBwZ3R0LT5wZF9kbWFfYWRkclswXSk7Cj4gLQlyZWdfc3RhdGVbQ1RYX1BEUDBfTERXKzFdID0g bG93ZXJfMzJfYml0cyhwcGd0dC0+cGRfZG1hX2FkZHJbMF0pOwo+IC0JaWYgKHJpbmctPmlkID09 IFJDUykgewo+IC0JCXJlZ19zdGF0ZVtDVFhfTFJJX0hFQURFUl8yXSA9IE1JX0xPQURfUkVHSVNU RVJfSU1NKDEpOwo+IC0JCXJlZ19zdGF0ZVtDVFhfUl9QV1JfQ0xLX1NUQVRFXSA9IDB4MjBjODsK PiAtCQlyZWdfc3RhdGVbQ1RYX1JfUFdSX0NMS19TVEFURSsxXSA9IDA7Cj4gLQl9Cj4gLQo+IC0J a3VubWFwX2F0b21pYyhyZWdfc3RhdGUpOwo+IC0KPiAtCWN0eF9vYmotPmRpcnR5ID0gMTsKPiAt CXNldF9wYWdlX2RpcnR5KHBhZ2UpOwo+IC0JaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKGN0 eF9vYmopOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC0vKioKPiAtICogaW50ZWxfbHJf Y29udGV4dF9mcmVlKCkgLSBmcmVlIHRoZSBMUkMgc3BlY2lmaWMgYml0cyBvZiBhIGNvbnRleHQK PiAtICogQGN0eDogdGhlIExSIGNvbnRleHQgdG8gZnJlZS4KPiAtICoKPiAtICogVGhlIHJlYWwg Y29udGV4dCBmcmVlaW5nIGlzIGRvbmUgaW4gaTkxNV9nZW1fY29udGV4dF9mcmVlOiB0aGlzIG9u bHkKPiAtICogdGFrZXMgY2FyZSBvZiB0aGUgYml0cyB0aGF0IGFyZSBMUkMgcmVsYXRlZDogdGhl IHBlci1lbmdpbmUgYmFja2luZwo+IC0gKiBvYmplY3RzIGFuZCB0aGUgbG9naWNhbCByaW5nYnVm ZmVyLgo+IC0gKi8KPiAtdm9pZCBpbnRlbF9scl9jb250ZXh0X2ZyZWUoc3RydWN0IGludGVsX2Nv bnRleHQgKmN0eCkKPiAtewo+IC0JaW50IGk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IEk5MTVf TlVNX1JJTkdTOyBpKyspIHsKPiAtCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqY3R4X29i aiA9IGN0eC0+ZW5naW5lW2ldLnN0YXRlOwo+IC0JCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpy aW5nYnVmID0gY3R4LT5lbmdpbmVbaV0ucmluZ2J1ZjsKPiAtCj4gLQkJaWYgKGN0eF9vYmopIHsK PiAtCQkJaW50ZWxfZGVzdHJveV9yaW5nYnVmZmVyX29iaihyaW5nYnVmKTsKPiAtCQkJa2ZyZWUo cmluZ2J1Zik7Cj4gLQkJCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKGN0eF9vYmopOwo+IC0J CQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmY3R4X29iai0+YmFzZSk7Cj4gLQkJfQo+IC0J fQo+IC19Cj4gLQo+IC1zdGF0aWMgdWludDMyX3QgZ2V0X2xyX2NvbnRleHRfc2l6ZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nKQo+IC17Cj4gLQlpbnQgcmV0ID0gMDsKPiAtCj4gLQlXQVJO X09OKElOVEVMX0lORk8ocmluZy0+ZGV2KS0+Z2VuICE9IDgpOwo+IC0KPiAtCXN3aXRjaCAocmlu Zy0+aWQpIHsKPiAtCWNhc2UgUkNTOgo+IC0JCXJldCA9IEdFTjhfTFJfQ09OVEVYVF9SRU5ERVJf U0laRTsKPiAtCQlicmVhazsKPiAtCWNhc2UgVkNTOgo+IC0JY2FzZSBCQ1M6Cj4gLQljYXNlIFZF Q1M6Cj4gLQljYXNlIFZDUzI6Cj4gLQkJcmV0ID0gR0VOOF9MUl9DT05URVhUX09USEVSX1NJWkU7 Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtLyoqCj4g LSAqIGludGVsX2xyX2NvbnRleHRfZGVmZXJyZWRfY3JlYXRlKCkgLSBjcmVhdGUgdGhlIExSQyBz cGVjaWZpYyBiaXRzIG9mIGEgY29udGV4dAo+IC0gKiBAY3R4OiBMUiBjb250ZXh0IHRvIGNyZWF0 ZS4KPiAtICogQHJpbmc6IGVuZ2luZSB0byBiZSB1c2VkIHdpdGggdGhlIGNvbnRleHQuCj4gLSAq Cj4gLSAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSwgd2l0aCBk aWZmZXJlbnQgZW5naW5lcywgaWYgd2UgcGxhbgo+IC0gKiB0byB1c2UgdGhlIGNvbnRleHQgd2l0 aCB0aGVtLiBUaGUgY29udGV4dCBiYWNraW5nIG9iamVjdHMgYW5kIHRoZSByaW5nYnVmZmVycwo+ IC0gKiAoc3BlY2lhbGx5IHRoZSByaW5nYnVmZmVyIGJhY2tpbmcgb2JqZWN0cykgc3VjayBhIGxv dCBvZiBtZW1vcnkgdXAsIGFuZCB0aGF0J3Mgd2h5Cj4gLSAqIHRoZSBjcmVhdGlvbiBpcyBhIGRl ZmVycmVkIGNhbGw6IGl0J3MgYmV0dGVyIHRvIG1ha2Ugc3VyZSBmaXJzdCB0aGF0IHdlIG5lZWQg dG8gdXNlCj4gLSAqIGEgZ2l2ZW4gcmluZyB3aXRoIHRoZSBjb250ZXh0Lgo+IC0gKgo+IC0gKiBS ZXR1cm46IG5vbi16ZXJvIG9uIGVyb3IuCj4gLSAqLwo+IC1pbnQgaW50ZWxfbHJfY29udGV4dF9k ZWZlcnJlZF9jcmVhdGUoc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwKPiAtCQkJCSAgICAgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IHJpbmctPmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpjdHhfb2JqOwo+ IC0JdWludDMyX3QgY29udGV4dF9zaXplOwo+IC0Jc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJp bmdidWY7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCVdBUk5fT04oY3R4LT5sZWdhY3lfaHdfY3R4LnJj c19zdGF0ZSAhPSBOVUxMKTsKPiAtCWlmIChjdHgtPmVuZ2luZVtyaW5nLT5pZF0uc3RhdGUpCj4g LQkJcmV0dXJuIDA7Cj4gLQo+IC0JY29udGV4dF9zaXplID0gcm91bmRfdXAoZ2V0X2xyX2NvbnRl eHRfc2l6ZShyaW5nKSwgNDA5Nik7Cj4gLQo+IC0JY3R4X29iaiA9IGk5MTVfZ2VtX2FsbG9jX2Nv bnRleHRfb2JqKGRldiwgY29udGV4dF9zaXplKTsKPiAtCWlmIChJU19FUlIoY3R4X29iaikpIHsK PiAtCQlyZXQgPSBQVFJfRVJSKGN0eF9vYmopOwo+IC0JCURSTV9ERUJVR19EUklWRVIoIkFsbG9j IExSQyBiYWNraW5nIG9iaiBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+IC0JCXJldHVybiByZXQ7Cj4g LQl9Cj4gLQo+IC0JcmV0ID0gaTkxNV9nZW1fb2JqX2dndHRfcGluKGN0eF9vYmosIEdFTjhfTFJf Q09OVEVYVF9BTElHTiwgMCk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigi UGluIExSQyBiYWNraW5nIG9iaiBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+IC0JCWRybV9nZW1fb2Jq ZWN0X3VucmVmZXJlbmNlKCZjdHhfb2JqLT5iYXNlKTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+ IC0KPiAtCXJpbmdidWYgPSBremFsbG9jKHNpemVvZigqcmluZ2J1ZiksIEdGUF9LRVJORUwpOwo+ IC0JaWYgKCFyaW5nYnVmKSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigiRmFpbGVkIHRvIGFsbG9j YXRlIHJpbmdidWZmZXIgJXNcbiIsCj4gLQkJCQlyaW5nLT5uYW1lKTsKPiAtCQlpOTE1X2dlbV9v YmplY3RfZ2d0dF91bnBpbihjdHhfb2JqKTsKPiAtCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5j ZSgmY3R4X29iai0+YmFzZSk7Cj4gLQkJcmV0ID0gLUVOT01FTTsKPiAtCQlyZXR1cm4gcmV0Owo+ IC0JfQo+IC0KPiAtCXJpbmdidWYtPnJpbmcgPSByaW5nOwo+IC0JcmluZ2J1Zi0+RklYTUVfbHJj X2N0eCA9IGN0eDsKPiAtCj4gLQlyaW5nYnVmLT5zaXplID0gMzIgKiBQQUdFX1NJWkU7Cj4gLQly aW5nYnVmLT5lZmZlY3RpdmVfc2l6ZSA9IHJpbmdidWYtPnNpemU7Cj4gLQlyaW5nYnVmLT5oZWFk ID0gMDsKPiAtCXJpbmdidWYtPnRhaWwgPSAwOwo+IC0JcmluZ2J1Zi0+c3BhY2UgPSByaW5nYnVm LT5zaXplOwo+IC0JcmluZ2J1Zi0+bGFzdF9yZXRpcmVkX2hlYWQgPSAtMTsKPiAtCj4gLQkvKiBU T0RPOiBGb3Igbm93IHdlIHB1dCB0aGlzIGluIHRoZSBtYXBwYWJsZSByZWdpb24gc28gdGhhdCB3 ZSBjYW4gcmV1c2UKPiAtCSAqIHRoZSBleGlzdGluZyByaW5nYnVmZmVyIGNvZGUgd2hpY2ggaW9y ZW1hcHMgaXQuIFdoZW4gd2Ugc3RhcnQKPiAtCSAqIGNyZWF0aW5nIG1hbnkgY29udGV4dHMsIHRo aXMgd2lsbCBubyBsb25nZXIgd29yayBhbmQgd2UgbXVzdCBzd2l0Y2gKPiAtCSAqIHRvIGEga21h cGlzaCBpbnRlcmZhY2UuCj4gLQkgKi8KPiAtCXJldCA9IGludGVsX2FsbG9jX3JpbmdidWZmZXJf b2JqKGRldiwgcmluZ2J1Zik7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigi RmFpbGVkIHRvIGFsbG9jYXRlIHJpbmdidWZmZXIgb2JqICVzOiAlZFxuIiwKPiAtCQkJCXJpbmct Pm5hbWUsIHJldCk7Cj4gLQkJZ290byBlcnJvcjsKPiAtCX0KPiAtCj4gLQlyZXQgPSBwb3B1bGF0 ZV9scl9jb250ZXh0KGN0eCwgY3R4X29iaiwgcmluZywgcmluZ2J1Zik7Cj4gLQlpZiAocmV0KSB7 Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigiRmFpbGVkIHRvIHBvcHVsYXRlIExSQzogJWRcbiIsIHJl dCk7Cj4gLQkJaW50ZWxfZGVzdHJveV9yaW5nYnVmZmVyX29iaihyaW5nYnVmKTsKPiAtCQlnb3Rv IGVycm9yOwo+IC0JfQo+IC0KPiAtCWN0eC0+ZW5naW5lW3JpbmctPmlkXS5yaW5nYnVmID0gcmlu Z2J1ZjsKPiAtCWN0eC0+ZW5naW5lW3JpbmctPmlkXS5zdGF0ZSA9IGN0eF9vYmo7Cj4gLQo+IC0J aWYgKGN0eCA9PSByaW5nLT5kZWZhdWx0X2NvbnRleHQpIHsKPiAtCQkvKiBUaGUgc3RhdHVzIHBh Z2UgaXMgb2Zmc2V0IDAgZnJvbSB0aGUgZGVmYXVsdCBjb250ZXh0IG9iamVjdAo+IC0JCSAqIGlu IExSQyBtb2RlLiAqLwo+IC0JCXJpbmctPnN0YXR1c19wYWdlLmdmeF9hZGRyID0gaTkxNV9nZW1f b2JqX2dndHRfb2Zmc2V0KGN0eF9vYmopOwo+IC0JCXJpbmctPnN0YXR1c19wYWdlLnBhZ2VfYWRk ciA9Cj4gLQkJCQlrbWFwKHNnX3BhZ2UoY3R4X29iai0+cGFnZXMtPnNnbCkpOwo+IC0JCWlmIChy aW5nLT5zdGF0dXNfcGFnZS5wYWdlX2FkZHIgPT0gTlVMTCkKPiAtCQkJcmV0dXJuIC1FTk9NRU07 Cj4gLQkJcmluZy0+c3RhdHVzX3BhZ2Uub2JqID0gY3R4X29iajsKPiAtCX0KPiAtCj4gLQlpZiAo cmluZy0+aWQgPT0gUkNTICYmICFjdHgtPnJjc19pbml0aWFsaXplZCkgewo+IC0JCXJldCA9IGlu dGVsX2xyX2NvbnRleHRfcmVuZGVyX3N0YXRlX2luaXQocmluZywgY3R4KTsKPiAtCQlpZiAocmV0 KSB7Cj4gLQkJCURSTV9FUlJPUigiSW5pdCByZW5kZXIgc3RhdGUgZmFpbGVkOiAlZFxuIiwgcmV0 KTsKPiAtCQkJY3R4LT5lbmdpbmVbcmluZy0+aWRdLnJpbmdidWYgPSBOVUxMOwo+IC0JCQljdHgt PmVuZ2luZVtyaW5nLT5pZF0uc3RhdGUgPSBOVUxMOwo+IC0JCQlpbnRlbF9kZXN0cm95X3Jpbmdi dWZmZXJfb2JqKHJpbmdidWYpOwo+IC0JCQlnb3RvIGVycm9yOwo+IC0JCX0KPiAtCQljdHgtPnJj c19pbml0aWFsaXplZCA9IHRydWU7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLQo+IC1lcnJv cjoKPiAtCWtmcmVlKHJpbmdidWYpOwo+IC0JaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4oY3R4 X29iaik7Cj4gLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmY3R4X29iai0+YmFzZSk7Cj4g LQlyZXR1cm4gcmV0Owo+IC19Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xyYy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKPiBpbmRleCAzM2Mz YjRiZjI4YzUuLjhiOWY1YjE2NGVmMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9scmMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4g QEAgLTMxLDg0ICszMSw4IEBACj4gICAjZGVmaW5lIFJJTkdfQ09OVEVYVF9TVEFUVVNfQlVGKHJp bmcpCSgocmluZyktPm1taW9fYmFzZSsweDM3MCkKPiAgICNkZWZpbmUgUklOR19DT05URVhUX1NU QVRVU19QVFIocmluZykJKChyaW5nKS0+bW1pb19iYXNlKzB4M2EwKQo+ICAgCj4gLS8qIExvZ2lj YWwgUmluZ3MgKi8KPiAtdm9pZCBpbnRlbF9sb2dpY2FsX3Jpbmdfc3RvcChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nKTsKPiAtdm9pZCBpbnRlbF9sb2dpY2FsX3JpbmdfY2xlYW51cChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKPiAtaW50IGludGVsX2xvZ2ljYWxfcmluZ3NfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAtCj4gLWludCBsb2dpY2FsX3JpbmdfZmx1c2hf YWxsX2NhY2hlcyhzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1Zik7Cj4gLXZvaWQgaW50 ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2VfYW5kX3N1Ym1pdChzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZl ciAqcmluZ2J1Zik7Cj4gLS8qKgo+IC0gKiBpbnRlbF9sb2dpY2FsX3JpbmdfYWR2YW5jZSgpIC0g YWR2YW5jZSB0aGUgcmluZ2J1ZmZlciB0YWlsCj4gLSAqIEByaW5nYnVmOiBSaW5nYnVmZmVyIHRv IGFkdmFuY2UuCj4gLSAqCj4gLSAqIFRoZSB0YWlsIGlzIG9ubHkgdXBkYXRlZCBpbiBvdXIgbG9n aWNhbCByaW5nYnVmZmVyIHN0cnVjdC4KPiAtICovCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnRl bF9sb2dpY2FsX3JpbmdfYWR2YW5jZShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZikK PiAtewo+IC0JcmluZ2J1Zi0+dGFpbCAmPSByaW5nYnVmLT5zaXplIC0gMTsKPiAtfQo+IC0vKioK PiAtICogaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQoKSAtIHdyaXRlIGEgRFdPUkQgdG8gdGhlIHJp bmdidWZmZXIuCj4gLSAqIEByaW5nYnVmOiBSaW5nYnVmZmVyIHRvIHdyaXRlIHRvLgo+IC0gKiBA ZGF0YTogRFdPUkQgdG8gd3JpdGUuCj4gLSAqLwo+IC1zdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxf bG9naWNhbF9yaW5nX2VtaXQoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4gLQkJ CQkJICAgdTMyIGRhdGEpCj4gLXsKPiAtCWlvd3JpdGUzMihkYXRhLCByaW5nYnVmLT52aXJ0dWFs X3N0YXJ0ICsgcmluZ2J1Zi0+dGFpbCk7Cj4gLQlyaW5nYnVmLT50YWlsICs9IDQ7Cj4gLX0KPiAt aW50IGludGVsX2xvZ2ljYWxfcmluZ19iZWdpbihzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmlu Z2J1ZiwgaW50IG51bV9kd29yZHMpOwo+IC0KPiAtLyogTG9naWNhbCBSaW5nIENvbnRleHRzICov Cj4gLWludCBpbnRlbF9scl9jb250ZXh0X3JlbmRlcl9zdGF0ZV9pbml0KHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKnJpbmcsCj4gLQkJCQkgICAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCk7 Cj4gLXZvaWQgaW50ZWxfbHJfY29udGV4dF9mcmVlKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgp Owo+IC1pbnQgaW50ZWxfbHJfY29udGV4dF9kZWZlcnJlZF9jcmVhdGUoc3RydWN0IGludGVsX2Nv bnRleHQgKmN0eCwKPiAtCQkJCSAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4g LQo+ICAgLyogRXhlY2xpc3RzICovCj4gLWludCBpbnRlbF9zYW5pdGl6ZV9lbmFibGVfZXhlY2xp c3RzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBlbmFibGVfZXhlY2xpc3RzKTsKPiAtaW50 IGludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSwKPiAtCQkJICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcsCj4gLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+IC0JCQkgICAgICAg c3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJncywKPiAtCQkJICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgKnZtYXMsCj4gLQkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqYmF0Y2hfb2JqLAo+IC0JCQkgICAgICAgdTY0IGV4ZWNfc3RhcnQsIHUzMiBmbGFncyk7Cj4g LXUzMiBpbnRlbF9leGVjbGlzdHNfY3R4X2lkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpj dHhfb2JqKTsKPiAtCj4gLS8qKgo+IC0gKiBzdHJ1Y3QgaW50ZWxfY3R4X3N1Ym1pdF9yZXF1ZXN0 IC0gcXVldWVkIGNvbnRleHQgc3VibWlzc2lvbiByZXF1ZXN0Cj4gLSAqIEBjdHg6IENvbnRleHQg dG8gc3VibWl0IHRvIHRoZSBFTFNQLgo+IC0gKiBAcmluZzogRW5naW5lIHRvIHN1Ym1pdCBpdCB0 by4KPiAtICogQHRhaWw6IGhvdyBmYXIgaW4gdGhlIGNvbnRleHQncyByaW5nYnVmZmVyIHRoaXMg cmVxdWVzdCBnb2VzIHRvLgo+IC0gKiBAZXhlY2xpc3RfbGluazogbGluayBpbiB0aGUgc3VibWlz c2lvbiBxdWV1ZS4KPiAtICogQHdvcms6IHdvcmtxdWV1ZSBmb3IgcHJvY2Vzc2luZyB0aGlzIHJl cXVlc3QgaW4gYSBib3R0b20gaGFsZi4KPiAtICogQGVsc3Bfc3VibWl0dGVkOiBuby4gb2YgdGlt ZXMgdGhpcyByZXF1ZXN0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIEVMU1AuCj4gLSAqCj4gLSAqIFRo ZSBFTFNQIG9ubHkgYWNjZXB0cyB0d28gZWxlbWVudHMgYXQgYSB0aW1lLCBzbyB3ZSBxdWV1ZSBj b250ZXh0L3RhaWwKPiAtICogcGFpcnMgb24gYSBnaXZlbiBxdWV1ZSAocmluZy0+ZXhlY2xpc3Rf cXVldWUpIHVudGlsIHRoZSBoYXJkd2FyZSBpcwo+IC0gKiBhdmFpbGFibGUuIFRoZSBxdWV1ZSBz ZXJ2ZXMgYSBkb3VibGUgcHVycG9zZTogd2UgYWxzbyB1c2UgaXQgdG8ga2VlcCB0cmFjawo+IC0g KiBvZiB0aGUgdXAgdG8gMiBjb250ZXh0cyBjdXJyZW50bHkgaW4gdGhlIGhhcmR3YXJlICh1c3Vh bGx5IG9uZSBpbiBleGVjdXRpb24KPiAtICogYW5kIHRoZSBvdGhlciBxdWV1ZWQgdXAgYnkgdGhl IEdQVSk6IFdlIG9ubHkgcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGhlYWQKPiAtICogb2YgdGhl IHF1ZXVlIHdoZW4gdGhlIGhhcmR3YXJlIGluZm9ybXMgdXMgdGhhdCBhbiBlbGVtZW50IGhhcyBi ZWVuCj4gLSAqIGNvbXBsZXRlZC4KPiAtICoKPiAtICogQWxsIGFjY2Vzc2VzIHRvIHRoZSBxdWV1 ZSBhcmUgbWVkaWF0ZWQgYnkgYSBzcGlubG9jayAocmluZy0+ZXhlY2xpc3RfbG9jaykuCj4gLSAq Lwo+IC1zdHJ1Y3QgaW50ZWxfY3R4X3N1Ym1pdF9yZXF1ZXN0IHsKPiAtCXN0cnVjdCBpbnRlbF9j b250ZXh0ICpjdHg7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+IC0JdTMyIHRh aWw7Cj4gLQo+IC0Jc3RydWN0IGxpc3RfaGVhZCBleGVjbGlzdF9saW5rOwo+IC0Jc3RydWN0IHdv cmtfc3RydWN0IHdvcms7Cj4gLQo+IC0JaW50IGVsc3Bfc3VibWl0dGVkOwo+IC19Owo+IC0KPiAt dm9pZCBpbnRlbF9leGVjbGlzdHNfaGFuZGxlX2N0eF9ldmVudHMoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZyk7Cj4gK2ludCBpbnRlbF9lbmdpbmVfZW5hYmxlX2V4ZWNsaXN0cyhzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICt2b2lkIGludGVsX2V4ZWNsaXN0c19pcnFfaGFu ZGxlcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICAgCj4gICAjZW5kaWYgLyog X0lOVEVMX0xSQ19IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9vdmVybGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vdmVybGF5LmMKPiBpbmRl eCBkYzJmNGYyNmM5NjEuLmFlMGU1NzcxZjczMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9vdmVybGF5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9vdmVybGF5LmMKPiBAQCAtMTgyLDcgKzE4Miw3IEBAIHN0cnVjdCBpbnRlbF9vdmVybGF5IHsK PiAgIAl1MzIgZmxpcF9hZGRyOwo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpyZWdf Ym87Cj4gICAJLyogZmxpcCBoYW5kbGluZyAqLwo+IC0JdWludDMyX3QgbGFzdF9mbGlwX3JlcTsK PiArCXN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpmbGlwX3JlcXVlc3Q7Cj4gICAJdm9pZCAoKmZs aXBfdGFpbCkoc3RydWN0IGludGVsX292ZXJsYXkgKik7Cj4gICB9Owo+ICAgCj4gQEAgLTIwOCw1 MyArMjA4LDg2IEBAIHN0YXRpYyB2b2lkIGludGVsX292ZXJsYXlfdW5tYXBfcmVncyhzdHJ1Y3Qg aW50ZWxfb3ZlcmxheSAqb3ZlcmxheSwKPiAgIAkJaW9fbWFwcGluZ191bm1hcChyZWdzKTsKPiAg IH0KPiAgIAo+IC1zdGF0aWMgaW50IGludGVsX292ZXJsYXlfZG9fd2FpdF9yZXF1ZXN0KHN0cnVj dCBpbnRlbF9vdmVybGF5ICpvdmVybGF5LAo+IC0JCQkJCSB2b2lkICgqdGFpbCkoc3RydWN0IGlu dGVsX292ZXJsYXkgKikpCj4gKy8qIHJlY292ZXIgZnJvbSBhbiBpbnRlcnJ1cHRpb24gZHVlIHRv IGEgc2lnbmFsCj4gKyAqIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gcmVwZWF0IHdvcmsg Zm9yZXZlciBhbiBtYWtlIGZvcndhcmQgcHJvZ2Vzcy4gKi8KPiArc3RhdGljIGludCBpbnRlbF9v dmVybGF5X3JlY292ZXJfZnJvbV9pbnRlcnJ1cHQoc3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJs YXkpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb3ZlcmxheS0+ZGV2Owo+IC0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAt CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbUkNTXTsKPiAg IAlpbnQgcmV0Owo+ICAgCj4gLQlCVUdfT04ob3ZlcmxheS0+bGFzdF9mbGlwX3JlcSk7Cj4gLQly ZXQgPSBpOTE1X2FkZF9yZXF1ZXN0KHJpbmcsICZvdmVybGF5LT5sYXN0X2ZsaXBfcmVxKTsKPiAt CWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArCWlmIChvdmVybGF5LT5mbGlwX3JlcXVlc3Qg PT0gTlVMTCkKPiArCQlyZXR1cm4gMDsKPiAgIAo+IC0Jb3ZlcmxheS0+ZmxpcF90YWlsID0gdGFp bDsKPiAtCXJldCA9IGk5MTVfd2FpdF9zZXFubyhyaW5nLCBvdmVybGF5LT5sYXN0X2ZsaXBfcmVx KTsKPiArCXJldCA9IGk5MTVfcmVxdWVzdF93YWl0KG92ZXJsYXktPmZsaXBfcmVxdWVzdCk7Cj4g ICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAtCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0 cyhkZXYpOwo+ICAgCj4gLQlvdmVybGF5LT5sYXN0X2ZsaXBfcmVxID0gMDsKPiArCWk5MTVfcmVx dWVzdF9wdXQob3ZlcmxheS0+ZmxpcF9yZXF1ZXN0KTsKPiArCW92ZXJsYXktPmZsaXBfcmVxdWVz dCA9IE5VTEw7Cj4gKwo+ICsJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKG92ZXJsYXktPmRldik7 Cj4gKwo+ICsJaWYgKG92ZXJsYXktPmZsaXBfdGFpbCkKPiArCQlvdmVybGF5LT5mbGlwX3RhaWwo b3ZlcmxheSk7Cj4gKwo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbnQgaW50 ZWxfb3ZlcmxheV9hZGRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheSwKPiAr CQkJCSAgICAgc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxLAo+ICsJCQkJICAgICB2b2lkICgq dGFpbCkoc3RydWN0IGludGVsX292ZXJsYXkgKikpCj4gK3sKPiArCUJVR19PTihvdmVybGF5LT5m bGlwX3JlcXVlc3QpOwo+ICsJb3ZlcmxheS0+ZmxpcF9yZXF1ZXN0ID0gcnE7Cj4gKwlvdmVybGF5 LT5mbGlwX3RhaWwgPSB0YWlsOwo+ICsKPiArCXJldHVybiBpOTE1X3JlcXVlc3RfY29tbWl0KHJx KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpbnRlbF9vdmVybGF5X2RvX3dhaXRfcmVxdWVzdChz dHJ1Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheSwKPiArCQkJCQkgc3RydWN0IGk5MTVfZ2VtX3Jl cXVlc3QgKnJxLAo+ICsJCQkJCSB2b2lkICgqdGFpbCkoc3RydWN0IGludGVsX292ZXJsYXkgKikp Cj4gK3sKPiArCWludGVsX292ZXJsYXlfYWRkX3JlcXVlc3Qob3ZlcmxheSwgcnEsIHRhaWwpOwo+ ICsJcmV0dXJuIGludGVsX292ZXJsYXlfcmVjb3Zlcl9mcm9tX2ludGVycnVwdChvdmVybGF5KTsK PiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICoKPiAraW50ZWxfb3Zl cmxheV9hbGxvY19yZXF1ZXN0KHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5KQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob3ZlcmxheS0+ZGV2KTsK PiArCXJldHVybiBpbnRlbF9lbmdpbmVfYWxsb2NfcmVxdWVzdChSQ1NfRU5HSU5FKGk5MTUpLAo+ ICsJCQkJCSAgUkNTX0VOR0lORShpOTE1KS0+ZGVmYXVsdF9jb250ZXh0KTsKPiArfQo+ICsKPiAg IC8qIG92ZXJsYXkgbmVlZHMgdG8gYmUgZGlzYWJsZSBpbiBPQ01EIHJlZyAqLwo+ICAgc3RhdGlj IGludCBpbnRlbF9vdmVybGF5X29uKHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5KQo+ICAg ewo+ICAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvdmVybGF5LT5kZXY7Cj4gICAJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbUkNTXTsKPiAtCWludCBy ZXQ7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnE7Cj4gKwlzdHJ1Y3QgaW50ZWxfcmlu Z2J1ZmZlciAqcmluZzsKPiAgIAo+ICAgCUJVR19PTihvdmVybGF5LT5hY3RpdmUpOwo+ICAgCW92 ZXJsYXktPmFjdGl2ZSA9IDE7Cj4gICAKPiAgIAlXQVJOX09OKElTX0k4MzAoZGV2KSAmJiAhKGRl dl9wcml2LT5xdWlya3MgJiBRVUlSS19QSVBFQV9GT1JDRSkpOwo+ICAgCj4gLQlyZXQgPSBpbnRl bF9yaW5nX2JlZ2luKHJpbmcsIDQpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJ cnEgPSBpbnRlbF9vdmVybGF5X2FsbG9jX3JlcXVlc3Qob3ZlcmxheSk7Cj4gKwlpZiAoSVNfRVJS KHJxKSkKPiArCQlyZXR1cm4gUFRSX0VSUihycSk7Cj4gKwo+ICsJcmluZyA9IGludGVsX3Jpbmdf YmVnaW4ocnEsIDMpOwo+ICsJaWYgKElTX0VSUihyaW5nKSkgewo+ICsJCWk5MTVfcmVxdWVzdF9w dXQocnEpOwo+ICsJCXJldHVybiBQVFJfRVJSKHJpbmcpOwo+ICsJfQo+ICAgCj4gICAJaW50ZWxf cmluZ19lbWl0KHJpbmcsIE1JX09WRVJMQVlfRkxJUCB8IE1JX09WRVJMQVlfT04pOwo+ICAgCWlu dGVsX3JpbmdfZW1pdChyaW5nLCBvdmVybGF5LT5mbGlwX2FkZHIgfCBPRkNfVVBEQVRFKTsKPiAg IAlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfV0FJVF9GT1JfRVZFTlQgfCBNSV9XQUlUX0ZPUl9P VkVSTEFZX0ZMSVApOwo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOwo+ICAgCWlu dGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKPiAgIAo+IC0JcmV0dXJuIGludGVsX292ZXJsYXlfZG9f d2FpdF9yZXF1ZXN0KG92ZXJsYXksIE5VTEwpOwo+ICsJcmV0dXJuIGludGVsX292ZXJsYXlfZG9f d2FpdF9yZXF1ZXN0KG92ZXJsYXksIHJxLCBOVUxMKTsKPiAgIH0KPiAgIAo+ICAgLyogb3Zlcmxh eSBuZWVkcyB0byBiZSBlbmFibGVkIGluIE9DTUQgcmVnICovCj4gQEAgLTI2MywxMCArMjk2LDEw IEBAIHN0YXRpYyBpbnQgaW50ZWxfb3ZlcmxheV9jb250aW51ZShzdHJ1Y3QgaW50ZWxfb3Zlcmxh eSAqb3ZlcmxheSwKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb3ZlcmxheS0+ ZGV2Owo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nID0gJmRldl9wcml2LT5yaW5n W1JDU107Cj4gICAJdTMyIGZsaXBfYWRkciA9IG92ZXJsYXktPmZsaXBfYWRkcjsKPiArCXN0cnVj dCBpOTE1X2dlbV9yZXF1ZXN0ICpycTsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5n Owo+ICAgCXUzMiB0bXA7Cj4gLQlpbnQgcmV0Owo+ICAgCj4gICAJQlVHX09OKCFvdmVybGF5LT5h Y3RpdmUpOwo+ICAgCj4gQEAgLTI3OCwyMSArMzExLDMwIEBAIHN0YXRpYyBpbnQgaW50ZWxfb3Zl cmxheV9jb250aW51ZShzdHJ1Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheSwKPiAgIAlpZiAodG1w ICYgKDEgPDwgMTcpKQo+ICAgCQlEUk1fREVCVUcoIm92ZXJsYXkgdW5kZXJydW4sIERPVlNUQTog JXhcbiIsIHRtcCk7Cj4gICAKPiAtCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmluZywgMik7Cj4g LQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlycSA9IGludGVsX292ZXJsYXlfYWxsb2Nf cmVxdWVzdChvdmVybGF5KTsKPiArCWlmIChJU19FUlIocnEpKQo+ICsJCXJldHVybiBQVFJfRVJS KHJxKTsKPiArCj4gKwlyaW5nID0gaW50ZWxfcmluZ19iZWdpbihycSwgMik7Cj4gKwlpZiAoSVNf RVJSKHJpbmcpKSB7Cj4gKwkJaTkxNV9yZXF1ZXN0X3B1dChycSk7Cj4gKwkJcmV0dXJuIFBUUl9F UlIocmluZyk7Cj4gKwl9Cj4gICAKPiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfT1ZFUkxB WV9GTElQIHwgTUlfT1ZFUkxBWV9DT05USU5VRSk7Cj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcs IGZsaXBfYWRkcik7Cj4gICAJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+ICAgCj4gLQlyZXR1 cm4gaTkxNV9hZGRfcmVxdWVzdChyaW5nLCAmb3ZlcmxheS0+bGFzdF9mbGlwX3JlcSk7Cj4gKwly ZXR1cm4gaW50ZWxfb3ZlcmxheV9hZGRfcmVxdWVzdChvdmVybGF5LCBycSwgTlVMTCk7Cj4gICB9 Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGludGVsX292ZXJsYXlfcmVsZWFzZV9vbGRfdmlkX3RhaWwo c3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJsYXkpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiA9IG92ZXJsYXktPm9sZF92aWRfYm87Cj4gICAKPiArCWk5MTVfZ2Vt X3RyYWNrX2ZiKG9iaiwgTlVMTCwKPiArCQkJICBJTlRFTF9GUk9OVEJVRkZFUl9PVkVSTEFZKG92 ZXJsYXktPmNydGMtPnBpcGUpKTsKPiArCj4gICAJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4o b2JqKTsKPiAgIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKPiAgIAo+ IEBAIC0zMTksMTAgKzM2MSwxMCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9vdmVybGF5X29mZl90YWls KHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5KQo+ICAgc3RhdGljIGludCBpbnRlbF9vdmVy bGF5X29mZihzdHJ1Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheSkKPiAgIHsKPiAgIAlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gb3ZlcmxheS0+ZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbUkNTXTsKPiAgIAl1MzIgZmxpcF9hZGRyID0gb3Zl cmxheS0+ZmxpcF9hZGRyOwo+IC0JaW50IHJldDsKPiArCXN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0 ICpycTsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICsJaW50IGxlbjsKPiAg IAo+ICAgCUJVR19PTighb3ZlcmxheS0+YWN0aXZlKTsKPiAgIAo+IEBAIC0zMzIsNTMgKzM3NCwz NiBAQCBzdGF0aWMgaW50IGludGVsX292ZXJsYXlfb2ZmKHN0cnVjdCBpbnRlbF9vdmVybGF5ICpv dmVybGF5KQo+ICAgCSAqIG9mIHRoZSBody4gRG8gaXQgaW4gYm90aCBjYXNlcyAqLwo+ICAgCWZs aXBfYWRkciB8PSBPRkNfVVBEQVRFOwo+ICAgCj4gLQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJp bmcsIDYpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJcnEgPSBpbnRlbF9vdmVy bGF5X2FsbG9jX3JlcXVlc3Qob3ZlcmxheSk7Cj4gKwlpZiAoSVNfRVJSKHJxKSkKPiArCQlyZXR1 cm4gUFRSX0VSUihycSk7Cj4gKwo+ICsJbGVuID0gMzsKPiArCWlmICghSVNfSTgzMChkZXYpKQo+ ICsJCWxlbiArPSAzOwo+ICsKPiArCXJpbmcgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCBsZW4pOwo+ ICsJaWYgKElTX0VSUihyaW5nKSkgewo+ICsJCWk5MTVfcmVxdWVzdF9wdXQocnEpOwo+ICsJCXJl dHVybiBQVFJfRVJSKHJpbmcpOwo+ICsJfQo+ICAgCj4gICAJLyogd2FpdCBmb3Igb3ZlcmxheSB0 byBnbyBpZGxlICovCj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX09WRVJMQVlfRkxJUCB8 IE1JX09WRVJMQVlfQ09OVElOVUUpOwo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBmbGlwX2Fk ZHIpOwo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9XQUlUX0ZPUl9FVkVOVCB8IE1JX1dB SVRfRk9SX09WRVJMQVlfRkxJUCk7Cj4gLQkvKiB0dXJuIG92ZXJsYXkgb2ZmICovCj4gLQlpZiAo SVNfSTgzMChkZXYpKSB7Cj4gLQkJLyogV29ya2Fyb3VuZDogRG9uJ3QgZGlzYWJsZSB0aGUgb3Zl cmxheSBmdWxseSwgc2luY2Ugb3RoZXJ3aXNlCj4gLQkJICogaXQgZGllcyBvbiB0aGUgbmV4dCBP VkVSTEFZX09OIGNtZC4gKi8KPiAtCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7Cj4g LQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOwo+IC0JCWludGVsX3JpbmdfZW1pdChy aW5nLCBNSV9OT09QKTsKPiAtCX0gZWxzZSB7Cj4gKwkvKiB0dXJuIG92ZXJsYXkgb2ZmCj4gKwkg KiBXb3JrYXJvdW5kIGZvciBpODMwOiBEb24ndCBkaXNhYmxlIHRoZSBvdmVybGF5IGZ1bGx5LCBz aW5jZQo+ICsJICogb3RoZXJ3aXNlIGl0IGRpZXMgb24gdGhlIG5leHQgT1ZFUkxBWV9PTiBjbWQu Cj4gKwkgKi8KPiArCWlmICghSVNfSTgzMChkZXYpKSB7Cj4gICAJCWludGVsX3JpbmdfZW1pdChy aW5nLCBNSV9PVkVSTEFZX0ZMSVAgfCBNSV9PVkVSTEFZX09GRik7Cj4gICAJCWludGVsX3Jpbmdf ZW1pdChyaW5nLCBmbGlwX2FkZHIpOwo+ICAgCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfV0FJ VF9GT1JfRVZFTlQgfCBNSV9XQUlUX0ZPUl9PVkVSTEFZX0ZMSVApOwo+ICAgCX0KPiAgIAlpbnRl bF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gICAKPiAtCXJldHVybiBpbnRlbF9vdmVybGF5X2RvX3dh aXRfcmVxdWVzdChvdmVybGF5LCBpbnRlbF9vdmVybGF5X29mZl90YWlsKTsKPiAtfQo+IC0KPiAt LyogcmVjb3ZlciBmcm9tIGFuIGludGVycnVwdGlvbiBkdWUgdG8gYSBzaWduYWwKPiAtICogV2Ug aGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byByZXBlYXQgd29yayBmb3JldmVyIGFuIG1ha2UgZm9y d2FyZCBwcm9nZXNzLiAqLwo+IC1zdGF0aWMgaW50IGludGVsX292ZXJsYXlfcmVjb3Zlcl9mcm9t X2ludGVycnVwdChzdHJ1Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheSkKPiAtewo+IC0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IG92ZXJsYXktPmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nID0gJmRldl9wcml2LT5yaW5nW1JDU107Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWlm IChvdmVybGF5LT5sYXN0X2ZsaXBfcmVxID09IDApCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JcmV0 ID0gaTkxNV93YWl0X3NlcW5vKHJpbmcsIG92ZXJsYXktPmxhc3RfZmxpcF9yZXEpOwo+IC0JaWYg KHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0JaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldik7 Cj4gLQo+IC0JaWYgKG92ZXJsYXktPmZsaXBfdGFpbCkKPiAtCQlvdmVybGF5LT5mbGlwX3RhaWwo b3ZlcmxheSk7Cj4gLQo+IC0Jb3ZlcmxheS0+bGFzdF9mbGlwX3JlcSA9IDA7Cj4gLQlyZXR1cm4g MDsKPiArCXJldHVybiBpbnRlbF9vdmVybGF5X2RvX3dhaXRfcmVxdWVzdChvdmVybGF5LCBycSwg aW50ZWxfb3ZlcmxheV9vZmZfdGFpbCk7Cj4gICB9Cj4gICAKPiAgIC8qIFdhaXQgZm9yIHBlbmRp bmcgb3ZlcmxheSBmbGlwIGFuZCByZWxlYXNlIG9sZCBmcmFtZS4KPiBAQCAtMzg3LDEwICs0MTIs OCBAQCBzdGF0aWMgaW50IGludGVsX292ZXJsYXlfcmVjb3Zlcl9mcm9tX2ludGVycnVwdChzdHJ1 Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheSkKPiAgICAqLwo+ICAgc3RhdGljIGludCBpbnRlbF9v dmVybGF5X3JlbGVhc2Vfb2xkX3ZpZChzdHJ1Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheSkKPiAg IHsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvdmVybGF5LT5kZXY7Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcmluZyA9ICZkZXZfcHJpdi0+cmluZ1tSQ1NdOwo+IC0JaW50IHJl dDsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUob3Zlcmxh eS0+ZGV2KTsKPiArCWludCByZXQgPSAwOwo+ICAgCj4gICAJLyogT25seSB3YWl0IGlmIHRoZXJl IGlzIGFjdHVhbGx5IGFuIG9sZCBmcmFtZSB0byByZWxlYXNlIHRvCj4gICAJICogZ3VhcmFudGVl IGZvcndhcmQgcHJvZ3Jlc3MuCj4gQEAgLTM5OSwyNyArNDIyLDI5IEBAIHN0YXRpYyBpbnQgaW50 ZWxfb3ZlcmxheV9yZWxlYXNlX29sZF92aWQoc3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJsYXkp Cj4gICAJCXJldHVybiAwOwo+ICAgCj4gICAJaWYgKEk5MTVfUkVBRChJU1IpICYgSTkxNV9PVkVS TEFZX1BMQU5FX0ZMSVBfUEVORElOR19JTlRFUlJVUFQpIHsKPiArCQlzdHJ1Y3QgaTkxNV9nZW1f cmVxdWVzdCAqcnE7Cj4gKwkJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmc7Cj4gKwo+ICsJ CXJxID0gaW50ZWxfb3ZlcmxheV9hbGxvY19yZXF1ZXN0KG92ZXJsYXkpOwo+ICsJCWlmIChJU19F UlIocnEpKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihycSk7Cj4gKwo+ICAgCQkvKiBzeW5jaHJvbm91 cyBzbG93cGF0aCAqLwo+IC0JCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmluZywgMik7Cj4gLQkJ aWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiArCQlyaW5nID0gaW50ZWxfcmluZ19iZWdpbihy cSwgMSk7Cj4gKwkJaWYgKElTX0VSUihyaW5nKSkgewo+ICsJCQlpOTE1X3JlcXVlc3RfcHV0KHJx KTsKPiArCQkJcmV0dXJuIFBUUl9FUlIocmluZyk7Cj4gKwkJfQo+ICAgCj4gICAJCWludGVsX3Jp bmdfZW1pdChyaW5nLCBNSV9XQUlUX0ZPUl9FVkVOVCB8IE1JX1dBSVRfRk9SX09WRVJMQVlfRkxJ UCk7Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOwo+ICAgCQlpbnRlbF9yaW5n X2FkdmFuY2UocmluZyk7Cj4gICAKPiAtCQlyZXQgPSBpbnRlbF9vdmVybGF5X2RvX3dhaXRfcmVx dWVzdChvdmVybGF5LAo+ICsJCXJldCA9IGludGVsX292ZXJsYXlfZG9fd2FpdF9yZXF1ZXN0KG92 ZXJsYXksIHJxLAo+ICAgCQkJCQkJICAgIGludGVsX292ZXJsYXlfcmVsZWFzZV9vbGRfdmlkX3Rh aWwpOwo+IC0JCWlmIChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JaW50ZWxf b3ZlcmxheV9yZWxlYXNlX29sZF92aWRfdGFpbChvdmVybGF5KTsKPiAtCj4gKwl9IGVsc2UKPiAr CQlpbnRlbF9vdmVybGF5X3JlbGVhc2Vfb2xkX3ZpZF90YWlsKG92ZXJsYXkpOwo+ICAgCj4gLQlp OTE1X2dlbV90cmFja19mYihvdmVybGF5LT5vbGRfdmlkX2JvLCBOVUxMLAo+IC0JCQkgIElOVEVM X0ZST05UQlVGRkVSX09WRVJMQVkob3ZlcmxheS0+Y3J0Yy0+cGlwZSkpOwo+IC0JcmV0dXJuIDA7 Cj4gKwlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gICBzdHJ1Y3QgcHV0X2ltYWdlX3BhcmFtcyB7 Cj4gQEAgLTgyMSwxMiArODQ2LDcgQEAgaW50IGludGVsX292ZXJsYXlfc3dpdGNoX29mZihzdHJ1 Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheSkKPiAgIAlpb3dyaXRlMzIoMCwgJnJlZ3MtPk9DTUQp Owo+ICAgCWludGVsX292ZXJsYXlfdW5tYXBfcmVncyhvdmVybGF5LCByZWdzKTsKPiAgIAo+IC0J cmV0ID0gaW50ZWxfb3ZlcmxheV9vZmYob3ZlcmxheSk7Cj4gLQlpZiAocmV0ICE9IDApCj4gLQkJ cmV0dXJuIHJldDsKPiAtCj4gLQlpbnRlbF9vdmVybGF5X29mZl90YWlsKG92ZXJsYXkpOwo+IC0J cmV0dXJuIDA7Cj4gKwlyZXR1cm4gaW50ZWxfb3ZlcmxheV9vZmYob3ZlcmxheSk7Cj4gICB9Cj4g ICAKPiAgIHN0YXRpYyBpbnQgY2hlY2tfb3ZlcmxheV9wb3NzaWJsZV9vbl9jcnRjKHN0cnVjdCBp bnRlbF9vdmVybGF5ICpvdmVybGF5LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+IGluZGV4IDQ1 ZjcxZTZkYzU0NC4uNDZlN2NiYjVlNGQ4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3BtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4g QEAgLTM2MjgsOSArMzYyOCwxMSBAQCBzdGF0aWMgaW50IHNhbml0aXplX3JjNl9vcHRpb24oY29u c3Qgc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGVuYWJsZV9yYzYpCj4gICAJCXJldHVybiBl bmFibGVfcmM2ICYgbWFzazsKPiAgIAl9Cj4gICAKPiAtCS8qIERpc2FibGUgUkM2IG9uIElyb25s YWtlICovCj4gLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPT0gNSkKPiArI2lmZGVmIENPTkZJ R19JTlRFTF9JT01NVQo+ICsJLyogSXJvbmxha2UgKyBSQzYgKyBWVC1kIGVtcGlyaWNhbGx5IGJs b3dzIHVwICovCj4gKwlpZiAoSVNfR0VONShkZXYpICYmIGludGVsX2lvbW11X2dmeF9tYXBwZWQp Cj4gICAJCXJldHVybiAwOwo+ICsjZW5kaWYKPiAgIAo+ICAgCWlmIChJU19JVllCUklER0UoZGV2 KSkKPiAgIAkJcmV0dXJuIChJTlRFTF9SQzZfRU5BQkxFIHwgSU5URUxfUkM2cF9FTkFCTEUpOwo+ IEBAIC0zNzgxLDcgKzM3ODMsNyBAQCB2b2lkIGJkd19zb2Z0d2FyZV90dXJibyhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+ICAgc3RhdGljIHZvaWQgZ2VuOF9lbmFibGVfcnBzKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4g KwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gICAJdWludDMyX3QgcmM2X21hc2sg PSAwLCBycF9zdGF0ZV9jYXA7Cj4gICAJdWludDMyX3QgdGhyZXNob2xkX3VwX3BjdCwgdGhyZXNo b2xkX2Rvd25fcGN0Owo+ICAgCXVpbnQzMl90IGVpX3VwLCBlaV9kb3duOyAvKiB1cCBhbmQgZG93 biBldmFsdWF0aW9uIGludGVydmFsICovCj4gQEAgLTM4MDgsOCArMzgxMCw4IEBAIHN0YXRpYyB2 b2lkIGdlbjhfZW5hYmxlX3JwcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgCUk5MTVfV1JJ VEUoR0VONl9SQzZfV0FLRV9SQVRFX0xJTUlULCA0MCA8PCAxNik7Cj4gICAJSTkxNV9XUklURShH RU42X1JDX0VWQUxVQVRJT05fSU5URVJWQUwsIDEyNTAwMCk7IC8qIDEyNTAwICogMTI4MG5zICov Cj4gICAJSTkxNV9XUklURShHRU42X1JDX0lETEVfSFlTVEVSU0lTLCAyNSk7IC8qIDI1ICogMTI4 MG5zICovCj4gLQlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2LCB1bnVzZWQpCj4gLQkJSTkx NV9XUklURShSSU5HX01BWF9JRExFKHJpbmctPm1taW9fYmFzZSksIDEwKTsKPiArCWZvcl9lYWNo X2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCB1bnVzZWQpCj4gKwkJSTkxNV9XUklURShSSU5HX01B WF9JRExFKGVuZ2luZS0+bW1pb19iYXNlKSwgMTApOwo+ICAgCUk5MTVfV1JJVEUoR0VONl9SQ19T TEVFUCwgMCk7Cj4gICAJaWYgKElTX0JST0FEV0VMTChkZXYpKQo+ICAgCQlJOTE1X1dSSVRFKEdF TjZfUkM2X1RIUkVTSE9MRCwgNjI1KTsgLyogODAwdXMvMS4yOCBmb3IgVE8gKi8KPiBAQCAtMzkw OSw3ICszOTExLDcgQEAgc3RhdGljIHZvaWQgZ2VuOF9lbmFibGVfcnBzKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gICBzdGF0aWMgdm9pZCBnZW42X2VuYWJsZV9ycHMoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZzsKPiArCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAgIAl1MzIgcnBfc3RhdGVfY2FwOwo+ICAg CXUzMiByYzZ2aWRzLCBwY3VfbWJveCA9IDAsIHJjNl9tYXNrID0gMDsKPiAgIAl1MzIgZ3RmaWZv ZGJnOwo+IEBAIC0zOTQ3LDggKzM5NDksOCBAQCBzdGF0aWMgdm9pZCBnZW42X2VuYWJsZV9ycHMo c3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIAlJOTE1X1dSSVRFKEdFTjZfUkNfRVZBTFVBVElP Tl9JTlRFUlZBTCwgMTI1MDAwKTsKPiAgIAlJOTE1X1dSSVRFKEdFTjZfUkNfSURMRV9IWVNURVJT SVMsIDI1KTsKPiAgIAo+IC0JZm9yX2VhY2hfcmluZyhyaW5nLCBkZXZfcHJpdiwgaSkKPiAtCQlJ OTE1X1dSSVRFKFJJTkdfTUFYX0lETEUocmluZy0+bW1pb19iYXNlKSwgMTApOwo+ICsJZm9yX2Vh Y2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIGkpCj4gKwkJSTkxNV9XUklURShSSU5HX01BWF9J RExFKGVuZ2luZS0+bW1pb19iYXNlKSwgMTApOwo+ICAgCj4gICAJSTkxNV9XUklURShHRU42X1JD X1NMRUVQLCAwKTsKPiAgIAlJOTE1X1dSSVRFKEdFTjZfUkMxZV9USFJFU0hPTEQsIDEwMDApOwo+ IEBAIC00NDA4LDcgKzQ0MTAsNyBAQCBzdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2NsZWFudXBfZ3Rf cG93ZXJzYXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICBzdGF0aWMgdm9pZCBjaGVycnl2 aWV3X2VuYWJsZV9ycHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIHsKPiAgIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcmluZzsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZTsKPiAgIAl1MzIgZ3RmaWZvZGJnLCB2YWwsIHJjNl9tb2RlID0gMCwgcGNicjsKPiAgIAlpbnQg aTsKPiAgIAo+IEBAIC00NDMyLDggKzQ0MzQsOCBAQCBzdGF0aWMgdm9pZCBjaGVycnl2aWV3X2Vu YWJsZV9ycHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIAlJOTE1X1dSSVRFKEdFTjZfUkNf RVZBTFVBVElPTl9JTlRFUlZBTCwgMTI1MDAwKTsgLyogMTI1MDAgKiAxMjgwbnMgKi8KPiAgIAlJ OTE1X1dSSVRFKEdFTjZfUkNfSURMRV9IWVNURVJTSVMsIDI1KTsgLyogMjUgKiAxMjgwbnMgKi8K PiAgIAo+IC0JZm9yX2VhY2hfcmluZyhyaW5nLCBkZXZfcHJpdiwgaSkKPiAtCQlJOTE1X1dSSVRF KFJJTkdfTUFYX0lETEUocmluZy0+bW1pb19iYXNlKSwgMTApOwo+ICsJZm9yX2VhY2hfZW5naW5l KGVuZ2luZSwgZGV2X3ByaXYsIGkpCj4gKwkJSTkxNV9XUklURShSSU5HX01BWF9JRExFKGVuZ2lu ZS0+bW1pb19iYXNlKSwgMTApOwo+ICAgCUk5MTVfV1JJVEUoR0VONl9SQ19TTEVFUCwgMCk7Cj4g ICAKPiAgIAlJOTE1X1dSSVRFKEdFTjZfUkM2X1RIUkVTSE9MRCwgNTAwMDApOyAvKiA1MC8xMjVt cyBwZXIgRUkgKi8KPiBAQCAtNDUwMCw3ICs0NTAyLDcgQEAgc3RhdGljIHZvaWQgY2hlcnJ5dmll d19lbmFibGVfcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICBzdGF0aWMgdm9pZCB2YWxs ZXl2aWV3X2VuYWJsZV9ycHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIHsKPiAgIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZzsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZTsKPiAgIAl1MzIgZ3RmaWZvZGJnLCB2YWwsIHJjNl9tb2RlID0gMDsKPiAgIAlpbnQgaTsK PiAgIAo+IEBAIC00NTM3LDggKzQ1MzksOCBAQCBzdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2VuYWJs ZV9ycHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIAlJOTE1X1dSSVRFKEdFTjZfUkNfRVZB TFVBVElPTl9JTlRFUlZBTCwgMTI1MDAwKTsKPiAgIAlJOTE1X1dSSVRFKEdFTjZfUkNfSURMRV9I WVNURVJTSVMsIDI1KTsKPiAgIAo+IC0JZm9yX2VhY2hfcmluZyhyaW5nLCBkZXZfcHJpdiwgaSkK PiAtCQlJOTE1X1dSSVRFKFJJTkdfTUFYX0lETEUocmluZy0+bW1pb19iYXNlKSwgMTApOwo+ICsJ Zm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIGkpCj4gKwkJSTkxNV9XUklURShSSU5H X01BWF9JRExFKGVuZ2luZS0+bW1pb19iYXNlKSwgMTApOwo+ICAgCj4gICAJSTkxNV9XUklURShH RU42X1JDNl9USFJFU0hPTEQsIDB4NTU3KTsKPiAgIAo+IEBAIC00NTgxLDEyICs0NTgzLDYgQEAg dm9pZCBpcm9ubGFrZV90ZWFyZG93bl9yYzYoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIHsK PiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Owo+ICAgCj4gLQlpZiAoZGV2X3ByaXYtPmlwcy5yZW5kZXJjdHgpIHsKPiAtCQlpOTE1X2dlbV9v YmplY3RfZ2d0dF91bnBpbihkZXZfcHJpdi0+aXBzLnJlbmRlcmN0eCk7Cj4gLQkJZHJtX2dlbV9v YmplY3RfdW5yZWZlcmVuY2UoJmRldl9wcml2LT5pcHMucmVuZGVyY3R4LT5iYXNlKTsKPiAtCQlk ZXZfcHJpdi0+aXBzLnJlbmRlcmN0eCA9IE5VTEw7Cj4gLQl9Cj4gLQo+ICAgCWlmIChkZXZfcHJp di0+aXBzLnB3cmN0eCkgewo+ICAgCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihkZXZfcHJp di0+aXBzLnB3cmN0eCk7Cj4gICAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZkZXZfcHJp di0+aXBzLnB3cmN0eC0+YmFzZSk7Cj4gQEAgLTQ2MTYsMTEgKzQ2MTIsNiBAQCBzdGF0aWMgaW50 IGlyb25sYWtlX3NldHVwX3JjNihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgewo+ICAgCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gICAK PiAtCWlmIChkZXZfcHJpdi0+aXBzLnJlbmRlcmN0eCA9PSBOVUxMKQo+IC0JCWRldl9wcml2LT5p cHMucmVuZGVyY3R4ID0gaW50ZWxfYWxsb2NfY29udGV4dF9wYWdlKGRldik7Cj4gLQlpZiAoIWRl dl9wcml2LT5pcHMucmVuZGVyY3R4KQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAgIAlpZiAo ZGV2X3ByaXYtPmlwcy5wd3JjdHggPT0gTlVMTCkKPiAgIAkJZGV2X3ByaXYtPmlwcy5wd3JjdHgg PSBpbnRlbF9hbGxvY19jb250ZXh0X3BhZ2UoZGV2KTsKPiAgIAlpZiAoIWRldl9wcml2LT5pcHMu cHdyY3R4KSB7Cj4gQEAgLTQ2MzQsOSArNDYyNSw2IEBAIHN0YXRpYyBpbnQgaXJvbmxha2Vfc2V0 dXBfcmM2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICBzdGF0aWMgdm9pZCBpcm9ubGFrZV9l bmFibGVfcmM2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICB7Cj4gICAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbUkNTXTsKPiAtCWJvb2wgd2FzX2lu dGVycnVwdGlibGU7Cj4gLQlpbnQgcmV0Owo+ICAgCj4gICAJLyogcmM2IGRpc2FibGVkIGJ5IGRl ZmF1bHQgZHVlIHRvIHJlcGVhdGVkIHJlcG9ydHMgb2YgaGFuZ2luZyBkdXJpbmcKPiAgIAkgKiBi b290IGFuZCByZXN1bWUuCj4gQEAgLTQ2NDYsNDYgKzQ2MzQsOCBAQCBzdGF0aWMgdm9pZCBpcm9u bGFrZV9lbmFibGVfcmM2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAKPiAgIAlXQVJOX09O KCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4KSk7Cj4gICAKPiAtCXJldCA9IGly b25sYWtlX3NldHVwX3JjNihkZXYpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm47Cj4gLQo+IC0J d2FzX2ludGVycnVwdGlibGUgPSBkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZTsKPiAtCWRldl9w cml2LT5tbS5pbnRlcnJ1cHRpYmxlID0gZmFsc2U7Cj4gLQo+IC0JLyoKPiAtCSAqIEdQVSBjYW4g YXV0b21hdGljYWxseSBwb3dlciBkb3duIHRoZSByZW5kZXIgdW5pdCBpZiBnaXZlbiBhIHBhZ2UK PiAtCSAqIHRvIHNhdmUgc3RhdGUuCj4gLQkgKi8KPiAtCXJldCA9IGludGVsX3JpbmdfYmVnaW4o cmluZywgNik7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJaXJvbmxha2VfdGVhcmRvd25fcmM2KGRldik7 Cj4gLQkJZGV2X3ByaXYtPm1tLmludGVycnVwdGlibGUgPSB3YXNfaW50ZXJydXB0aWJsZTsKPiAt CQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX1NVU1BFTkRf RkxVU0ggfCBNSV9TVVNQRU5EX0ZMVVNIX0VOKTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBN SV9TRVRfQ09OVEVYVCk7Cj4gLQlpbnRlbF9yaW5nX2VtaXQocmluZywgaTkxNV9nZW1fb2JqX2dn dHRfb2Zmc2V0KGRldl9wcml2LT5pcHMucmVuZGVyY3R4KSB8Cj4gLQkJCU1JX01NX1NQQUNFX0dU VCB8Cj4gLQkJCU1JX1NBVkVfRVhUX1NUQVRFX0VOIHwKPiAtCQkJTUlfUkVTVE9SRV9FWFRfU1RB VEVfRU4gfAo+IC0JCQlNSV9SRVNUT1JFX0lOSElCSVQpOwo+IC0JaW50ZWxfcmluZ19lbWl0KHJp bmcsIE1JX1NVU1BFTkRfRkxVU0gpOwo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1Ap Owo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX0ZMVVNIKTsKPiAtCWludGVsX3JpbmdfYWR2 YW5jZShyaW5nKTsKPiAtCj4gLQkvKgo+IC0JICogV2FpdCBmb3IgdGhlIGNvbW1hbmQgcGFyc2Vy IHRvIGFkdmFuY2UgcGFzdCBNSV9TRVRfQ09OVEVYVC4gVGhlIEhXCj4gLQkgKiBkb2VzIGFuIGlt cGxpY2l0IGZsdXNoLCBjb21iaW5lZCB3aXRoIE1JX0ZMVVNIIGFib3ZlLCBpdCBzaG91bGQgYmUK PiAtCSAqIHNhZmUgdG8gYXNzdW1lIHRoYXQgcmVuZGVyY3R4IGlzIHZhbGlkCj4gLQkgKi8KPiAt CXJldCA9IGludGVsX3JpbmdfaWRsZShyaW5nKTsKPiAtCWRldl9wcml2LT5tbS5pbnRlcnJ1cHRp YmxlID0gd2FzX2ludGVycnVwdGlibGU7Cj4gLQlpZiAocmV0KSB7Cj4gKwlpZiAoaXJvbmxha2Vf c2V0dXBfcmM2KGRldikpIHsKPiAgIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxlIGlyb25s YWtlIHBvd2VyIHNhdmluZ3NcbiIpOwo+IC0JCWlyb25sYWtlX3RlYXJkb3duX3JjNihkZXYpOwo+ ICAgCQlyZXR1cm47Cj4gICAJfQo+ICAgCj4gQEAgLTUxNDQsNyArNTA5NCw3IEBAIEVYUE9SVF9T WU1CT0xfR1BMKGk5MTVfZ3B1X2xvd2VyKTsKPiAgIGJvb2wgaTkxNV9ncHVfYnVzeSh2b2lkKQo+ ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKPiAtCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7 Cj4gICAJYm9vbCByZXQgPSBmYWxzZTsKPiAgIAlpbnQgaTsKPiAgIAo+IEBAIC01MTUzLDggKzUx MDMsOCBAQCBib29sIGk5MTVfZ3B1X2J1c3kodm9pZCkKPiAgIAkJZ290byBvdXRfdW5sb2NrOwo+ ICAgCWRldl9wcml2ID0gaTkxNV9tY2hfZGV2Owo+ICAgCj4gLQlmb3JfZWFjaF9yaW5nKHJpbmcs IGRldl9wcml2LCBpKQo+IC0JCXJldCB8PSAhbGlzdF9lbXB0eSgmcmluZy0+cmVxdWVzdF9saXN0 KTsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpKQo+ICsJCXJldCB8PSBl bmdpbmUtPmxhc3RfcmVxdWVzdCAhPSBOVUxMOwo+ICAgCj4gICBvdXRfdW5sb2NrOgo+ICAgCXNw aW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9yZW5kZXJzdGF0ZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmVuZGVyc3RhdGUuaAo+IGluZGV4IDZjNzkyZDNhOWM5Yy4uZmQ0ZjY2MjMxZDMwIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JlbmRlcnN0YXRlLmgKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yZW5kZXJzdGF0ZS5oCj4gQEAgLTI0LDcgKzI0LDEz IEBACj4gICAjaWZuZGVmIF9JTlRFTF9SRU5ERVJTVEFURV9ICj4gICAjZGVmaW5lIF9JTlRFTF9S RU5ERVJTVEFURV9ICj4gICAKPiAtI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNpbmNsdWRlIDxs aW51eC90eXBlcy5oPgo+ICsKPiArc3RydWN0IGludGVsX3JlbmRlcnN0YXRlX3JvZGF0YSB7Cj4g Kwljb25zdCB1MzIgKnJlbG9jOwo+ICsJY29uc3QgdTMyICpiYXRjaDsKPiArCWNvbnN0IHUzMiBi YXRjaF9pdGVtczsKPiArfTsKPiAgIAo+ICAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbnRlbF9yZW5k ZXJzdGF0ZV9yb2RhdGEgZ2VuNl9udWxsX3N0YXRlOwo+ICAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBp bnRlbF9yZW5kZXJzdGF0ZV9yb2RhdGEgZ2VuN19udWxsX3N0YXRlOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiBpbmRleCAxYjExODA3OTc4NTEuLmFlMDJiMTc1Nzc0 NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiBAQCAtMzMs ODYgKzMzLDM0IEBACj4gICAjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgo+ICAgI2luY2x1ZGUgImlu dGVsX2Rydi5oIgo+ICAgCj4gLWJvb2wKPiAtaW50ZWxfcmluZ19pbml0aWFsaXplZChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g cmluZy0+ZGV2Owo+IC0KPiAtCWlmICghZGV2KQo+IC0JCXJldHVybiBmYWxzZTsKPiAtCj4gLQlp ZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKSB7Cj4gLQkJc3RydWN0IGludGVsX2NvbnRleHQgKmRj dHggPSByaW5nLT5kZWZhdWx0X2NvbnRleHQ7Cj4gLQkJc3RydWN0IGludGVsX3JpbmdidWZmZXIg KnJpbmdidWYgPSBkY3R4LT5lbmdpbmVbcmluZy0+aWRdLnJpbmdidWY7Cj4gLQo+IC0JCXJldHVy biByaW5nYnVmLT5vYmo7Cj4gLQl9IGVsc2UKPiAtCQlyZXR1cm4gcmluZy0+YnVmZmVyICYmIHJp bmctPmJ1ZmZlci0+b2JqOwo+IC19Cj4gLQo+IC1pbnQgX19pbnRlbF9yaW5nX3NwYWNlKGludCBo ZWFkLCBpbnQgdGFpbCwgaW50IHNpemUpCj4gLXsKPiAtCWludCBzcGFjZSA9IGhlYWQgLSAodGFp bCArIEk5MTVfUklOR19GUkVFX1NQQUNFKTsKPiAtCWlmIChzcGFjZSA8IDApCj4gLQkJc3BhY2Ug Kz0gc2l6ZTsKPiAtCXJldHVybiBzcGFjZTsKPiAtfQo+IC0KPiAtaW50IGludGVsX3Jpbmdfc3Bh Y2Uoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYpCj4gLXsKPiAtCXJldHVybiBfX2lu dGVsX3Jpbmdfc3BhY2UocmluZ2J1Zi0+aGVhZCAmIEhFQURfQUREUiwKPiAtCQkJCSAgcmluZ2J1 Zi0+dGFpbCwgcmluZ2J1Zi0+c2l6ZSk7Cj4gLX0KPiAtCj4gLWJvb2wgaW50ZWxfcmluZ19zdG9w cGVkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlyZXR1cm4g ZGV2X3ByaXYtPmdwdV9lcnJvci5zdG9wX3JpbmdzICYgaW50ZWxfcmluZ19mbGFnKHJpbmcpOwo+ IC19Cj4gLQo+IC12b2lkIF9faW50ZWxfcmluZ19hZHZhbmNlKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmID0gcmlu Zy0+YnVmZmVyOwo+IC0JcmluZ2J1Zi0+dGFpbCAmPSByaW5nYnVmLT5zaXplIC0gMTsKPiAtCWlm IChpbnRlbF9yaW5nX3N0b3BwZWQocmluZykpCj4gLQkJcmV0dXJuOwo+IC0JcmluZy0+d3JpdGVf dGFpbChyaW5nLCByaW5nYnVmLT50YWlsKTsKPiAtfQo+IC0KPiAgIHN0YXRpYyBpbnQKPiAtZ2Vu Ml9yZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCSAg ICAgICB1MzIJaW52YWxpZGF0ZV9kb21haW5zLAo+IC0JCSAgICAgICB1MzIJZmx1c2hfZG9tYWlu cykKPiArZ2VuMl9lbWl0X2ZsdXNoKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwgdTMyIGZs YWdzKQo+ICAgewo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmc7Cj4gICAJdTMyIGNt ZDsKPiAtCWludCByZXQ7Cj4gICAKPiAgIAljbWQgPSBNSV9GTFVTSDsKPiAtCWlmICgoKGludmFs aWRhdGVfZG9tYWluc3xmbHVzaF9kb21haW5zKSAmIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpID09 IDApCj4gKwlpZiAoKGZsYWdzICYgKEk5MTVfRkxVU0hfQ0FDSEVTIHwgSTkxNV9JTlZBTElEQVRF X0NBQ0hFUykpID09IDApCj4gICAJCWNtZCB8PSBNSV9OT19XUklURV9GTFVTSDsKPiAgIAo+IC0J aWYgKGludmFsaWRhdGVfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSKQo+ICsJaWYg KGZsYWdzICYgSTkxNV9JTlZBTElEQVRFX0NBQ0hFUykKPiAgIAkJY21kIHw9IE1JX1JFQURfRkxV U0g7Cj4gICAKPiAtCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmluZywgMik7Cj4gLQlpZiAocmV0 KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlyaW5nID0gaW50ZWxfcmluZ19iZWdpbihycSwgMSk7Cj4g KwlpZiAoSVNfRVJSKHJpbmcpKQo+ICsJCXJldHVybiBQVFJfRVJSKHJpbmcpOwo+ICAgCj4gICAJ aW50ZWxfcmluZ19lbWl0KHJpbmcsIGNtZCk7Cj4gLQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlf Tk9PUCk7Cj4gICAJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+ICAgCj4gICAJcmV0dXJuIDA7 Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQKPiAtZ2VuNF9yZW5kZXJfcmluZ19mbHVzaChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCSAgICAgICB1MzIJaW52YWxpZGF0ZV9kb21h aW5zLAo+IC0JCSAgICAgICB1MzIJZmx1c2hfZG9tYWlucykKPiArZ2VuNF9lbWl0X2ZsdXNoKHN0 cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwgdTMyIGZsYWdzKQo+ICAgewo+IC0Jc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpy aW5nOwo+ICAgCXUzMiBjbWQ7Cj4gLQlpbnQgcmV0Owo+ICAgCj4gICAJLyoKPiAgIAkgKiByZWFk L3dyaXRlIGNhY2hlczoKPiBAQCAtMTQyLDIyICs5MCwyMCBAQCBnZW40X3JlbmRlcl9yaW5nX2Zs dXNoKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gICAJICogYXJlIGZsdXNoZWQgYXQg YW55IE1JX0ZMVVNILgo+ICAgCSAqLwo+ICAgCj4gLQljbWQgPSBNSV9GTFVTSCB8IE1JX05PX1dS SVRFX0ZMVVNIOwo+IC0JaWYgKChpbnZhbGlkYXRlX2RvbWFpbnN8Zmx1c2hfZG9tYWlucykgJiBJ OTE1X0dFTV9ET01BSU5fUkVOREVSKQo+IC0JCWNtZCAmPSB+TUlfTk9fV1JJVEVfRkxVU0g7Cj4g LQlpZiAoaW52YWxpZGF0ZV9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OKQo+ ICsJY21kID0gTUlfRkxVU0g7Cj4gKwlpZiAoKGZsYWdzICYgKEk5MTVfRkxVU0hfQ0FDSEVTIHwg STkxNV9JTlZBTElEQVRFX0NBQ0hFUykpID09IDApCj4gKwkJY21kIHw9IE1JX05PX1dSSVRFX0ZM VVNIOwo+ICsJaWYgKGZsYWdzICYgSTkxNV9JTlZBTElEQVRFX0NBQ0hFUykgewo+ICAgCQljbWQg fD0gTUlfRVhFX0ZMVVNIOwo+ICsJCWlmIChJU19HNFgocnEtPmk5MTUpIHx8IElTX0dFTjUocnEt Pmk5MTUpKQo+ICsJCQljbWQgfD0gTUlfSU5WQUxJREFURV9JU1A7Cj4gKwl9Cj4gICAKPiAtCWlm IChpbnZhbGlkYXRlX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ09NTUFORCAmJgo+IC0JICAg IChJU19HNFgoZGV2KSB8fCBJU19HRU41KGRldikpKQo+IC0JCWNtZCB8PSBNSV9JTlZBTElEQVRF X0lTUDsKPiAtCj4gLQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDIpOwo+IC0JaWYgKHJl dCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJcmluZyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDEpOwo+ ICsJaWYgKElTX0VSUihyaW5nKSkKPiArCQlyZXR1cm4gUFRSX0VSUihyaW5nKTsKPiAgIAo+ICAg CWludGVsX3JpbmdfZW1pdChyaW5nLCBjbWQpOwo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1J X05PT1ApOwo+ICAgCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKPiAgIAo+ICAgCXJldHVybiAw Owo+IEBAIC0yMDEsMTAwICsxNDcsODkgQEAgZ2VuNF9yZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICAgICogcmVhbGx5IG91ciBidXNpbmVzcy4gIFRoYXQg bGVhdmVzIG9ubHkgc3RhbGwgYXQgc2NvcmVib2FyZC4KPiAgICAqLwo+ICAgc3RhdGljIGludAo+ IC1pbnRlbF9lbWl0X3Bvc3Rfc3luY19ub256ZXJvX2ZsdXNoKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcpCj4gK2dlbjZfZW1pdF9wb3N0X3N5bmNfbm9uemVyb19mbHVzaChzdHJ1Y3QgaTkx NV9nZW1fcmVxdWVzdCAqcnEpCj4gICB7Cj4gLQl1MzIgc2NyYXRjaF9hZGRyID0gcmluZy0+c2Ny YXRjaC5ndHRfb2Zmc2V0ICsgMiAqIENBQ0hFTElORV9CWVRFUzsKPiAtCWludCByZXQ7Cj4gKwlj b25zdCB1MzIgc2NyYXRjaCA9IHJxLT5lbmdpbmUtPnNjcmF0Y2guZ3R0X29mZnNldCArIDIqQ0FD SEVMSU5FX0JZVEVTOwo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmc7Cj4gICAKPiAr CXJpbmcgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA4KTsKPiArCWlmIChJU19FUlIocmluZykpCj4g KwkJcmV0dXJuIFBUUl9FUlIocmluZyk7Cj4gICAKPiAtCXJldCA9IGludGVsX3JpbmdfYmVnaW4o cmluZywgNik7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JaW50ZWxfcmlu Z19lbWl0KHJpbmcsIEdGWF9PUF9QSVBFX0NPTlRST0woNSkpOwo+ICsJaW50ZWxfcmluZ19lbWl0 KHJpbmcsIEdGWF9PUF9QSVBFX0NPTlRST0woNCkpOwo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5n LCBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfAo+ICAgCQkJUElQRV9DT05UUk9MX1NUQUxMX0FUX1ND T1JFQk9BUkQpOwo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIHNjcmF0Y2hfYWRkciB8IFBJUEVf Q09OVFJPTF9HTE9CQUxfR1RUKTsgLyogYWRkcmVzcyAqLwo+IC0JaW50ZWxfcmluZ19lbWl0KHJp bmcsIDApOyAvKiBsb3cgZHdvcmQgKi8KPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsgLyog aGlnaCBkd29yZCAqLwo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOwo+IC0JaW50 ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+IC0KPiAtCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmlu ZywgNik7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlpbnRlbF9yaW5nX2VtaXQo cmluZywgc2NyYXRjaCB8IFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUKTsKPiArCWludGVsX3Jpbmdf ZW1pdChyaW5nLCAwKTsKPiAgIAo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIEdGWF9PUF9QSVBF X0NPTlRST0woNSkpOwo+ICsJaW50ZWxfcmluZ19lbWl0KHJpbmcsIEdGWF9PUF9QSVBFX0NPTlRS T0woNCkpOwo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBQSVBFX0NPTlRST0xfUVdfV1JJVEUp Owo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIHNjcmF0Y2hfYWRkciB8IFBJUEVfQ09OVFJPTF9H TE9CQUxfR1RUKTsgLyogYWRkcmVzcyAqLwo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOwo+ ICsJaW50ZWxfcmluZ19lbWl0KHJpbmcsIHNjcmF0Y2ggfCBQSVBFX0NPTlRST0xfR0xPQkFMX0dU VCk7Cj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOwo+IC0JaW50ZWxfcmluZ19lbWl0KHJp bmcsIE1JX05PT1ApOwo+IC0JaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+ICAgCj4gKwlpbnRl bF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAgIHN0YXRp YyBpbnQKPiAtZ2VuNl9yZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpy aW5nLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGludmFsaWRhdGVfZG9tYWlucywg dTMyIGZsdXNoX2RvbWFpbnMpCj4gK2dlbjZfcmVuZGVyX2VtaXRfZmx1c2goc3RydWN0IGk5MTVf Z2VtX3JlcXVlc3QgKnJxLCB1MzIgZmxhZ3MpCj4gICB7Cj4gLQl1MzIgZmxhZ3MgPSAwOwo+IC0J dTMyIHNjcmF0Y2hfYWRkciA9IHJpbmctPnNjcmF0Y2guZ3R0X29mZnNldCArIDIgKiBDQUNIRUxJ TkVfQllURVM7Cj4gKwljb25zdCB1MzIgc2NyYXRjaCA9IHJxLT5lbmdpbmUtPnNjcmF0Y2guZ3R0 X29mZnNldCArIDIqQ0FDSEVMSU5FX0JZVEVTOwo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIg KnJpbmc7Cj4gKwl1MzIgY21kID0gMDsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gLQkvKiBGb3JjZSBT TkIgd29ya2Fyb3VuZHMgZm9yIFBJUEVfQ09OVFJPTCBmbHVzaGVzICovCj4gLQlyZXQgPSBpbnRl bF9lbWl0X3Bvc3Rfc3luY19ub256ZXJvX2ZsdXNoKHJpbmcpOwo+IC0JaWYgKHJldCkKPiAtCQly ZXR1cm4gcmV0Owo+ICsJaWYgKGZsYWdzICYgSTkxNV9GTFVTSF9DQUNIRVMpIHsKPiArCQkvKiBG b3JjZSBTTkIgd29ya2Fyb3VuZHMgZm9yIFBJUEVfQ09OVFJPTCBmbHVzaGVzICovCj4gKwkJcmV0 ID0gZ2VuNl9lbWl0X3Bvc3Rfc3luY19ub256ZXJvX2ZsdXNoKHJxKTsKPiArCQlpZiAocmV0KQo+ ICsJCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQkvKiBKdXN0IGZsdXNoIGV2ZXJ5dGhpbmcuICBFeHBl cmltZW50cyBoYXZlIHNob3duIHRoYXQgcmVkdWNpbmcgdGhlCj4gLQkgKiBudW1iZXIgb2YgYml0 cyBiYXNlZCBvbiB0aGUgd3JpdGUgZG9tYWlucyBoYXMgbGl0dGxlIHBlcmZvcm1hbmNlCj4gLQkg KiBpbXBhY3QuCj4gLQkgKi8KPiAtCWlmIChmbHVzaF9kb21haW5zKSB7Cj4gLQkJZmxhZ3MgfD0g UElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVfRkxVU0g7Cj4gLQkJZmxhZ3MgfD0gUElQ RV9DT05UUk9MX0RFUFRIX0NBQ0hFX0ZMVVNIOwo+IC0JCS8qCj4gLQkJICogRW5zdXJlIHRoYXQg YW55IGZvbGxvd2luZyBzZXFubyB3cml0ZXMgb25seSBoYXBwZW4KPiAtCQkgKiB3aGVuIHRoZSBy ZW5kZXIgY2FjaGUgaXMgaW5kZWVkIGZsdXNoZWQuCj4gLQkJICovCj4gLQkJZmxhZ3MgfD0gUElQ RV9DT05UUk9MX0NTX1NUQUxMOwo+IC0JfQo+IC0JaWYgKGludmFsaWRhdGVfZG9tYWlucykgewo+ IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9UTEJfSU5WQUxJREFURTsKPiAtCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfSU5TVFJVQ1RJT05fQ0FDSEVfSU5WQUxJREFURTsKPiAtCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfVEVYVFVSRV9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVf Q09OVFJPTF9WRl9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9D T05TVF9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVEFURV9D QUNIRV9JTlZBTElEQVRFOwo+ICsJCWNtZCB8PSBQSVBFX0NPTlRST0xfUkVOREVSX1RBUkdFVF9D QUNIRV9GTFVTSDsKPiArCQljbWQgfD0gUElQRV9DT05UUk9MX0RFUFRIX0NBQ0hFX0ZMVVNIOwo+ ICsJfQo+ICsJaWYgKGZsYWdzICYgSTkxNV9JTlZBTElEQVRFX0NBQ0hFUykgewo+ICsJCWNtZCB8 PSBQSVBFX0NPTlRST0xfVExCX0lOVkFMSURBVEU7Cj4gKwkJY21kIHw9IFBJUEVfQ09OVFJPTF9J TlNUUlVDVElPTl9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWNtZCB8PSBQSVBFX0NPTlRST0xfVEVY VFVSRV9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWNtZCB8PSBQSVBFX0NPTlRST0xfVkZfQ0FDSEVf SU5WQUxJREFURTsKPiArCQljbWQgfD0gUElQRV9DT05UUk9MX0NPTlNUX0NBQ0hFX0lOVkFMSURB VEU7Cj4gKwkJY21kIHw9IFBJUEVfQ09OVFJPTF9TVEFURV9DQUNIRV9JTlZBTElEQVRFOwo+ICAg CQkvKgo+ICAgCQkgKiBUTEIgaW52YWxpZGF0ZSByZXF1aXJlcyBhIHBvc3Qtc3luYyB3cml0ZS4K PiAgIAkJICovCj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFIHwgUElQRV9DT05U Uk9MX0NTX1NUQUxMOwo+ICsJCWNtZCB8PSBQSVBFX0NPTlRST0xfUVdfV1JJVEUgfCBQSVBFX0NP TlRST0xfQ1NfU1RBTEw7Cj4gICAJfQo+ICsJaWYgKGZsYWdzICYgSTkxNV9DT01NQU5EX0JBUlJJ RVIpCj4gKwkJLyoKPiArCQkgKiBFbnN1cmUgdGhhdCBhbnkgZm9sbG93aW5nIHNlcW5vIHdyaXRl cyBvbmx5IGhhcHBlbgo+ICsJCSAqIHdoZW4gdGhlIHJlbmRlciBjYWNoZSBpcyBpbmRlZWQgZmx1 c2hlZC4KPiArCQkgKi8KPiArCQljbWQgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOwo+ICAgCj4g LQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1 cm4gcmV0Owo+ICsJaWYgKGNtZCkgewo+ICsJCXJpbmcgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0 KTsKPiArCQlpZiAoSVNfRVJSKHJpbmcpKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihyaW5nKTsKPiAg IAo+IC0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIEdGWF9PUF9QSVBFX0NPTlRST0woNCkpOwo+IC0J aW50ZWxfcmluZ19lbWl0KHJpbmcsIGZsYWdzKTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBz Y3JhdGNoX2FkZHIgfCBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVCk7Cj4gLQlpbnRlbF9yaW5nX2Vt aXQocmluZywgMCk7Cj4gLQlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gKwkJaW50ZWxfcmlu Z19lbWl0KHJpbmcsIEdGWF9PUF9QSVBFX0NPTlRST0woNCkpOwo+ICsJCWludGVsX3JpbmdfZW1p dChyaW5nLCBjbWQpOwo+ICsJCWludGVsX3JpbmdfZW1pdChyaW5nLCBzY3JhdGNoIHwgUElQRV9D T05UUk9MX0dMT0JBTF9HVFQpOwo+ICsJCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKPiArCQlp bnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gKwl9Cj4gICAKPiAgIAlyZXR1cm4gMDsKPiAgIH0K PiAgIAo+ICAgc3RhdGljIGludAo+IC1nZW43X3JlbmRlcl9yaW5nX2NzX3N0YWxsX3dhKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK2dlbjdfcmVuZGVyX3JpbmdfY3Nfc3RhbGxfd2Eo c3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICAgewo+IC0JaW50IHJldDsKPiArCXN0cnVj dCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICAgCj4gLQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2lu KHJpbmcsIDQpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJcmluZyA9IGludGVs X3JpbmdfYmVnaW4ocnEsIDQpOwo+ICsJaWYgKElTX0VSUihyaW5nKSkKPiArCQlyZXR1cm4gUFRS X0VSUihyaW5nKTsKPiAgIAo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBHRlhfT1BfUElQRV9D T05UUk9MKDQpKTsKPiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywgUElQRV9DT05UUk9MX0NTX1NU QUxMIHwKPiBAQCAtMzA2LDM1ICsyNDEsMzIgQEAgZ2VuN19yZW5kZXJfcmluZ19jc19zdGFsbF93 YShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAg Cj4gLXN0YXRpYyBpbnQgZ2VuN19yaW5nX2ZiY19mbHVzaChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nLCB1MzIgdmFsdWUpCj4gK3N0YXRpYyBpbnQgZ2VuN19yaW5nX2ZiY19mbHVzaChzdHJ1 Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEsIHUzMiB2YWx1ZSkKPiAgIHsKPiAtCWludCByZXQ7Cj4g KwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZzsKPiAgIAo+IC0JaWYgKCFyaW5nLT5mYmNf ZGlydHkpCj4gLQkJcmV0dXJuIDA7Cj4gKwlyaW5nID0gaW50ZWxfcmluZ19iZWdpbihycSwgNik7 Cj4gKwlpZiAoSVNfRVJSKHJpbmcpKQo+ICsJCXJldHVybiBQVFJfRVJSKHJxKTsKPiAgIAo+IC0J cmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCA2KTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJu IHJldDsKPiAgIAkvKiBXYUZiY051a2VPbjNEQmx0Oml2Yi9oc3cgKi8KPiAgIAlpbnRlbF9yaW5n X2VtaXQocmluZywgTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkpOwo+ICAgCWludGVsX3JpbmdfZW1p dChyaW5nLCBNU0dfRkJDX1JFTkRfU1RBVEUpOwo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5nLCB2 YWx1ZSk7Cj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX1NUT1JFX1JFR0lTVEVSX01FTSgx KSB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVCk7Cj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1T R19GQkNfUkVORF9TVEFURSk7Cj4gLQlpbnRlbF9yaW5nX2VtaXQocmluZywgcmluZy0+c2NyYXRj aC5ndHRfb2Zmc2V0ICsgMjU2KTsKPiArCWludGVsX3JpbmdfZW1pdChyaW5nLCBycS0+ZW5naW5l LT5zY3JhdGNoLmd0dF9vZmZzZXQgKyAyNTYpOwo+ICAgCWludGVsX3JpbmdfYWR2YW5jZShyaW5n KTsKPiAgIAo+IC0JcmluZy0+ZmJjX2RpcnR5ID0gZmFsc2U7Cj4gICAJcmV0dXJuIDA7Cj4gICB9 Cj4gICAKPiAgIHN0YXRpYyBpbnQKPiAtZ2VuN19yZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCSAgICAgICB1MzIgaW52YWxpZGF0ZV9kb21haW5zLCB1 MzIgZmx1c2hfZG9tYWlucykKPiArZ2VuN19yZW5kZXJfZW1pdF9mbHVzaChzdHJ1Y3QgaTkxNV9n ZW1fcmVxdWVzdCAqcnEsIHUzMiBmbGFncykKPiAgIHsKPiAtCXUzMiBmbGFncyA9IDA7Cj4gLQl1 MzIgc2NyYXRjaF9hZGRyID0gcmluZy0+c2NyYXRjaC5ndHRfb2Zmc2V0ICsgMiAqIENBQ0hFTElO RV9CWVRFUzsKPiArCWNvbnN0IHUzMiBzY3JhdGNoX2FkZHIgPSBycS0+ZW5naW5lLT5zY3JhdGNo Lmd0dF9vZmZzZXQgKyAyICogQ0FDSEVMSU5FX0JZVEVTOwo+ICsJc3RydWN0IGludGVsX3Jpbmdi dWZmZXIgKnJpbmc7Cj4gKwl1MzIgY21kID0gMDsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gICAJLyoK PiBAQCAtMzQ1LDYzICsyNzcsNzEgQEAgZ2VuN19yZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nLAo+ICAgCSAqIHJlYWQtY2FjaGUgaW52YWxpZGF0ZSBiaXRzIHNl dCkgbXVzdCBoYXZlIHRoZSBDU19TVEFMTCBiaXQgc2V0LiBXZQo+ICAgCSAqIGRvbid0IHRyeSB0 byBiZSBjbGV2ZXIgYW5kIGp1c3Qgc2V0IGl0IHVuY29uZGl0aW9uYWxseS4KPiAgIAkgKi8KPiAt CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DU19TVEFMTDsKPiArCWNtZCB8PSBQSVBFX0NPTlRST0xf Q1NfU1RBTEw7Cj4gICAKPiAgIAkvKiBKdXN0IGZsdXNoIGV2ZXJ5dGhpbmcuICBFeHBlcmltZW50 cyBoYXZlIHNob3duIHRoYXQgcmVkdWNpbmcgdGhlCj4gICAJICogbnVtYmVyIG9mIGJpdHMgYmFz ZWQgb24gdGhlIHdyaXRlIGRvbWFpbnMgaGFzIGxpdHRsZSBwZXJmb3JtYW5jZQo+ICAgCSAqIGlt cGFjdC4KPiAgIAkgKi8KPiAtCWlmIChmbHVzaF9kb21haW5zKSB7Cj4gLQkJZmxhZ3MgfD0gUElQ RV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVfRkxVU0g7Cj4gLQkJZmxhZ3MgfD0gUElQRV9D T05UUk9MX0RFUFRIX0NBQ0hFX0ZMVVNIOwo+IC0JfQo+IC0JaWYgKGludmFsaWRhdGVfZG9tYWlu cykgewo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9UTEJfSU5WQUxJREFURTsKPiAtCQlmbGFn cyB8PSBQSVBFX0NPTlRST0xfSU5TVFJVQ1RJT05fQ0FDSEVfSU5WQUxJREFURTsKPiAtCQlmbGFn cyB8PSBQSVBFX0NPTlRST0xfVEVYVFVSRV9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9 IFBJUEVfQ09OVFJPTF9WRl9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09O VFJPTF9DT05TVF9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9T VEFURV9DQUNIRV9JTlZBTElEQVRFOwo+ICsJaWYgKGZsYWdzICYgSTkxNV9GTFVTSF9DQUNIRVMp IHsKPiArCQljbWQgfD0gUElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVfRkxVU0g7Cj4g KwkJY21kIHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9DQUNIRV9GTFVTSDsKPiArCX0KPiArCWlmIChm bGFncyAmIEk5MTVfSU5WQUxJREFURV9DQUNIRVMpIHsKPiArCQljbWQgfD0gUElQRV9DT05UUk9M X1RMQl9JTlZBTElEQVRFOwo+ICsJCWNtZCB8PSBQSVBFX0NPTlRST0xfSU5TVFJVQ1RJT05fQ0FD SEVfSU5WQUxJREFURTsKPiArCQljbWQgfD0gUElQRV9DT05UUk9MX1RFWFRVUkVfQ0FDSEVfSU5W QUxJREFURTsKPiArCQljbWQgfD0gUElQRV9DT05UUk9MX1ZGX0NBQ0hFX0lOVkFMSURBVEU7Cj4g KwkJY21kIHw9IFBJUEVfQ09OVFJPTF9DT05TVF9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWNtZCB8 PSBQSVBFX0NPTlRST0xfU1RBVEVfQ0FDSEVfSU5WQUxJREFURTsKPiAgIAkJLyoKPiAgIAkJICog VExCIGludmFsaWRhdGUgcmVxdWlyZXMgYSBwb3N0LXN5bmMgd3JpdGUuCj4gICAJCSAqLwo+IC0J CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKPiAtCQlmbGFncyB8PSBQSVBFX0NPTlRS T0xfR0xPQkFMX0dUVF9JVkI7Cj4gKwkJY21kIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKPiAr CQljbWQgfD0gUElQRV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCOwo+ICAgCj4gICAJCS8qIFdvcmth cm91bmQ6IHdlIG11c3QgaXNzdWUgYSBwaXBlX2NvbnRyb2wgd2l0aCBDUy1zdGFsbCBiaXQKPiAg IAkJICogc2V0IGJlZm9yZSBhIHBpcGVfY29udHJvbCBjb21tYW5kIHRoYXQgaGFzIHRoZSBzdGF0 ZSBjYWNoZQo+ICAgCQkgKiBpbnZhbGlkYXRlIGJpdCBzZXQuICovCj4gLQkJZ2VuN19yZW5kZXJf cmluZ19jc19zdGFsbF93YShyaW5nKTsKPiArCQlyZXQgPSBnZW43X3JlbmRlcl9yaW5nX2NzX3N0 YWxsX3dhKHJxKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICAgCX0KPiAgIAo+ IC0JcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCA0KTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0 dXJuIHJldDsKPiArCXJpbmcgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0KTsKPiArCWlmIChJU19F UlIocmluZykpCj4gKwkJcmV0dXJuIFBUUl9FUlIocmluZyk7Cj4gICAKPiAgIAlpbnRlbF9yaW5n X2VtaXQocmluZywgR0ZYX09QX1BJUEVfQ09OVFJPTCg0KSk7Cj4gLQlpbnRlbF9yaW5nX2VtaXQo cmluZywgZmxhZ3MpOwo+ICsJaW50ZWxfcmluZ19lbWl0KHJpbmcsIGNtZCk7Cj4gICAJaW50ZWxf cmluZ19lbWl0KHJpbmcsIHNjcmF0Y2hfYWRkcik7Cj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcs IDApOwo+ICAgCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKPiAgIAo+IC0JaWYgKCFpbnZhbGlk YXRlX2RvbWFpbnMgJiYgZmx1c2hfZG9tYWlucykKPiAtCQlyZXR1cm4gZ2VuN19yaW5nX2ZiY19m bHVzaChyaW5nLCBGQkNfUkVORF9OVUtFKTsKPiArCWlmIChmbGFncyAmIEk5MTVfS0lDS19GQkMp IHsKPiArCQlyZXQgPSBnZW43X3JpbmdfZmJjX2ZsdXNoKHJxLCBGQkNfUkVORF9OVUtFKTsKPiAr CQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICAgCj4gICAJcmV0dXJuIDA7Cj4g ICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQKPiAtZ2VuOF9lbWl0X3BpcGVfY29udHJvbChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCSAgICAgICB1MzIgZmxhZ3MsIHUzMiBzY3JhdGNo X2FkZHIpCj4gK2dlbjhfZW1pdF9waXBlX2NvbnRyb2woc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3Qg KnJxLAo+ICsJCSAgICAgICB1MzIgY21kLCB1MzIgc2NyYXRjaF9hZGRyKQo+ICAgewo+IC0JaW50 IHJldDsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICAgCj4gLQlyZXQgPSBp bnRlbF9yaW5nX2JlZ2luKHJpbmcsIDYpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ ICsJaWYgKGNtZCA9PSAwKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJpbmcgPSBpbnRlbF9yaW5n X2JlZ2luKHJxLCA2KTsKPiArCWlmIChJU19FUlIocnEpKQo+ICsJCXJldHVybiBQVFJfRVJSKHJx KTsKPiAgIAo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBHRlhfT1BfUElQRV9DT05UUk9MKDYp KTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBmbGFncyk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQo cmluZywgY21kKTsKPiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywgc2NyYXRjaF9hZGRyKTsKPiAg IAlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7Cj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDAp Owo+IEBAIC00MTIsMzEgKzM1MiwyOSBAQCBnZW44X2VtaXRfcGlwZV9jb250cm9sKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQKPiAtZ2VuOF9y ZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCSAgICAg ICB1MzIgaW52YWxpZGF0ZV9kb21haW5zLCB1MzIgZmx1c2hfZG9tYWlucykKPiArZ2VuOF9yZW5k ZXJfZW1pdF9mbHVzaChzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEsCj4gKwkJICAgICAgIHUz MiBmbGFncykKPiAgIHsKPiAtCXUzMiBmbGFncyA9IDA7Cj4gLQl1MzIgc2NyYXRjaF9hZGRyID0g cmluZy0+c2NyYXRjaC5ndHRfb2Zmc2V0ICsgMiAqIENBQ0hFTElORV9CWVRFUzsKPiArCWNvbnN0 IHUzMiBzY3JhdGNoX2FkZHIgPSBycS0+ZW5naW5lLT5zY3JhdGNoLmd0dF9vZmZzZXQgKyAyICog Q0FDSEVMSU5FX0JZVEVTOwo+ICsJdTMyIGNtZCA9IDA7Cj4gICAJaW50IHJldDsKPiAgIAo+IC0J ZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOwo+IC0KPiAtCWlmIChmbHVzaF9kb21haW5z KSB7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVfRkxVU0g7 Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0RFUFRIX0NBQ0hFX0ZMVVNIOwo+ICsJaWYgKGZs YWdzICYgSTkxNV9GTFVTSF9DQUNIRVMpIHsKPiArCQljbWQgfD0gUElQRV9DT05UUk9MX1JFTkRF Ul9UQVJHRVRfQ0FDSEVfRkxVU0g7Cj4gKwkJY21kIHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9DQUNI RV9GTFVTSDsKPiAgIAl9Cj4gLQlpZiAoaW52YWxpZGF0ZV9kb21haW5zKSB7Cj4gLQkJZmxhZ3Mg fD0gUElQRV9DT05UUk9MX1RMQl9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJP TF9JTlNUUlVDVElPTl9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJP TF9URVhUVVJFX0NBQ0hFX0lOVkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1ZG X0NBQ0hFX0lOVkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NPTlNUX0NBQ0hF X0lOVkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUQVRFX0NBQ0hFX0lOVkFM SURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFOwo+IC0JCWZsYWdzIHw9 IFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUX0lWQjsKPiArCWlmIChmbGFncyAmIEk5MTVfSU5WQUxJ REFURV9DQUNIRVMpIHsKPiArCQljbWQgfD0gUElQRV9DT05UUk9MX1RMQl9JTlZBTElEQVRFOwo+ ICsJCWNtZCB8PSBQSVBFX0NPTlRST0xfSU5TVFJVQ1RJT05fQ0FDSEVfSU5WQUxJREFURTsKPiAr CQljbWQgfD0gUElQRV9DT05UUk9MX1RFWFRVUkVfQ0FDSEVfSU5WQUxJREFURTsKPiArCQljbWQg fD0gUElQRV9DT05UUk9MX1ZGX0NBQ0hFX0lOVkFMSURBVEU7Cj4gKwkJY21kIHw9IFBJUEVfQ09O VFJPTF9DT05TVF9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWNtZCB8PSBQSVBFX0NPTlRST0xfU1RB VEVfQ0FDSEVfSU5WQUxJREFURTsKPiArCQljbWQgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFOwo+ ICsJCWNtZCB8PSBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVF9JVkI7Cj4gICAKPiAgIAkJLyogV2FD c1N0YWxsQmVmb3JlU3RhdGVDYWNoZUludmFsaWRhdGU6YmR3LGNodiAqLwo+IC0JCXJldCA9IGdl bjhfZW1pdF9waXBlX2NvbnRyb2wocmluZywKPiArCQlyZXQgPSBnZW44X2VtaXRfcGlwZV9jb250 cm9sKHJxLAo+ICAgCQkJCQkgICAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8Cj4gICAJCQkJCSAg ICAgUElQRV9DT05UUk9MX1NUQUxMX0FUX1NDT1JFQk9BUkQsCj4gICAJCQkJCSAgICAgMCk7Cj4g QEAgLTQ0NCwzMDQgKzM4Miw0MTkgQEAgZ2VuOF9yZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nLAo+ICAgCQkJcmV0dXJuIHJldDsKPiAgIAl9Cj4gICAKPiAtCXJl dCA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2wocmluZywgZmxhZ3MsIHNjcmF0Y2hfYWRkcik7Cj4g KwlpZiAoZmxhZ3MgJiBJOTE1X0NPTU1BTkRfQkFSUklFUikKPiArCQljbWQgfD0gUElQRV9DT05U Uk9MX0NTX1NUQUxMOwo+ICsKPiArCj4gKwlyZXQgPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKHJx LCBjbWQsIHNjcmF0Y2hfYWRkcik7Cj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAg IAo+IC0JaWYgKCFpbnZhbGlkYXRlX2RvbWFpbnMgJiYgZmx1c2hfZG9tYWlucykKPiAtCQlyZXR1 cm4gZ2VuN19yaW5nX2ZiY19mbHVzaChyaW5nLCBGQkNfUkVORF9OVUtFKTsKPiArCWlmIChmbGFn cyAmIEk5MTVfS0lDS19GQkMpIHsKPiArCQlyZXQgPSBnZW43X3JpbmdfZmJjX2ZsdXNoKHJxLCBG QkNfUkVORF9OVUtFKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICAg Cj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgcmluZ193cml0ZV90YWls KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gK3N0YXRpYyB2b2lkIHJpbmdfd3JpdGVf dGFpbChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICAJCQkgICAgdTMyIHZhbHVl KQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmluZy0+ZGV2 LT5kZXZfcHJpdmF0ZTsKPiAtCUk5MTVfV1JJVEVfVEFJTChyaW5nLCB2YWx1ZSk7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gKwlJOTE1X1dS SVRFX1RBSUwoZW5naW5lLCB2YWx1ZSk7Cj4gICB9Cj4gICAKPiAtdTY0IGludGVsX3JpbmdfZ2V0 X2FjdGl2ZV9oZWFkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK3U2NCBpbnRlbF9l bmdpbmVfZ2V0X2FjdGl2ZV9oZWFkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAg IHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2 X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUt Pmk5MTU7Cj4gICAJdTY0IGFjdGhkOwo+ICAgCj4gLQlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYp LT5nZW4gPj0gOCkKPiAtCQlhY3RoZCA9IEk5MTVfUkVBRDY0XzJ4MzIoUklOR19BQ1RIRChyaW5n LT5tbWlvX2Jhc2UpLAo+IC0JCQkJCSBSSU5HX0FDVEhEX1VEVyhyaW5nLT5tbWlvX2Jhc2UpKTsK PiAtCWVsc2UgaWYgKElOVEVMX0lORk8ocmluZy0+ZGV2KS0+Z2VuID49IDQpCj4gLQkJYWN0aGQg PSBJOTE1X1JFQUQoUklOR19BQ1RIRChyaW5nLT5tbWlvX2Jhc2UpKTsKPiArCWlmIChJTlRFTF9J TkZPKGRldl9wcml2KS0+Z2VuID49IDgpCj4gKwkJYWN0aGQgPSBJOTE1X1JFQUQ2NF8yeDMyKFJJ TkdfQUNUSEQoZW5naW5lLT5tbWlvX2Jhc2UpLAo+ICsJCQkJCSBSSU5HX0FDVEhEX1VEVyhlbmdp bmUtPm1taW9fYmFzZSkpOwo+ICsJZWxzZSBpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+ PSA0KQo+ICsJCWFjdGhkID0gSTkxNV9SRUFEKFJJTkdfQUNUSEQoZW5naW5lLT5tbWlvX2Jhc2Up KTsKPiAgIAllbHNlCj4gICAJCWFjdGhkID0gSTkxNV9SRUFEKEFDVEhEKTsKPiAgIAo+ICAgCXJl dHVybiBhY3RoZDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCByaW5nX3NldHVwX3BoeXNfc3Rh dHVzX3BhZ2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAtewo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXUz MiBhZGRyOwo+IC0KPiAtCWFkZHIgPSBkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haC0+YnVzYWRk cjsKPiAtCWlmIChJTlRFTF9JTkZPKHJpbmctPmRldiktPmdlbiA+PSA0KQo+IC0JCWFkZHIgfD0g KGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT5idXNhZGRyID4+IDI4KSAmIDB4ZjA7Cj4gLQlJ OTE1X1dSSVRFKEhXU19QR0EsIGFkZHIpOwo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBzdG9wX3Jp bmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArc3RhdGljIGJvb2wgZW5naW5lX3N0 b3Aoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShyaW5nLT5kZXYpOwo+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ICAgCj4gLQlpZiAoIUlT X0dFTjIocmluZy0+ZGV2KSkgewo+IC0JCUk5MTVfV1JJVEVfTU9ERShyaW5nLCBfTUFTS0VEX0JJ VF9FTkFCTEUoU1RPUF9SSU5HKSk7Cj4gLQkJaWYgKHdhaXRfZm9yKChJOTE1X1JFQURfTU9ERShy aW5nKSAmIE1PREVfSURMRSkgIT0gMCwgMTAwMCkpIHsKPiAtCQkJRFJNX0VSUk9SKCIlcyA6IHRp bWVkIG91dCB0cnlpbmcgdG8gc3RvcCByaW5nXG4iLCByaW5nLT5uYW1lKTsKPiArCWlmICghSVNf R0VOMihkZXZfcHJpdikpIHsKPiArCQlJOTE1X1dSSVRFX01PREUoZW5naW5lLCBfTUFTS0VEX0JJ VF9FTkFCTEUoU1RPUF9SSU5HKSk7Cj4gKwkJaWYgKHdhaXRfZm9yKChJOTE1X1JFQURfTU9ERShl bmdpbmUpICYgTU9ERV9JRExFKSAhPSAwLCAxMDAwKSkgewo+ICsJCQlEUk1fRVJST1IoIiVzIDog dGltZWQgb3V0IHRyeWluZyB0byBzdG9wIHJpbmdcbiIsIGVuZ2luZS0+bmFtZSk7Cj4gICAJCQkv KiBTb21ldGltZXMgd2Ugb2JzZXJ2ZSB0aGF0IHRoZSBpZGxlIGZsYWcgaXMgbm90Cj4gICAJCQkg KiBzZXQgZXZlbiB0aG91Z2ggdGhlIHJpbmcgaXMgZW1wdHkuIFNvIGRvdWJsZQo+ICAgCQkJICog Y2hlY2sgYmVmb3JlIGdpdmluZyB1cC4KPiAgIAkJCSAqLwo+IC0JCQlpZiAoSTkxNV9SRUFEX0hF QUQocmluZykgIT0gSTkxNV9SRUFEX1RBSUwocmluZykpCj4gKwkJCWlmIChJOTE1X1JFQURfSEVB RChlbmdpbmUpICE9IEk5MTVfUkVBRF9UQUlMKGVuZ2luZSkpCj4gICAJCQkJcmV0dXJuIGZhbHNl Owo+ICAgCQl9Cj4gICAJfQo+ICAgCj4gLQlJOTE1X1dSSVRFX0NUTChyaW5nLCAwKTsKPiAtCUk5 MTVfV1JJVEVfSEVBRChyaW5nLCAwKTsKPiAtCXJpbmctPndyaXRlX3RhaWwocmluZywgMCk7Cj4g KwlJOTE1X1dSSVRFX0NUTChlbmdpbmUsIDApOwo+ICsJSTkxNV9XUklURV9IRUFEKGVuZ2luZSwg MCk7Cj4gKwllbmdpbmUtPndyaXRlX3RhaWwoZW5naW5lLCAwKTsKPiAgIAo+IC0JaWYgKCFJU19H RU4yKHJpbmctPmRldikpIHsKPiAtCQkodm9pZClJOTE1X1JFQURfQ1RMKHJpbmcpOwo+IC0JCUk5 MTVfV1JJVEVfTU9ERShyaW5nLCBfTUFTS0VEX0JJVF9ESVNBQkxFKFNUT1BfUklORykpOwo+ICsJ aWYgKCFJU19HRU4yKGRldl9wcml2KSkgewo+ICsJCSh2b2lkKUk5MTVfUkVBRF9DVEwoZW5naW5l KTsKPiArCQlJOTE1X1dSSVRFX01PREUoZW5naW5lLCBfTUFTS0VEX0JJVF9ESVNBQkxFKFNUT1Bf UklORykpOwo+ICAgCX0KPiAgIAo+IC0JcmV0dXJuIChJOTE1X1JFQURfSEVBRChyaW5nKSAmIEhF QURfQUREUikgPT0gMDsKPiArCXJldHVybiAoSTkxNV9SRUFEX0hFQUQoZW5naW5lKSAmIEhFQURf QUREUikgPT0gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBlbmdpbmVfc3VzcGVuZChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCXJldHVybiBlbmdpbmVfc3RvcChlbmdp bmUpID8gMCA6IC1FSU87Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludCBpbml0X3JpbmdfY29tbW9u KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK3N0YXRpYyBpbnQgZW5hYmxlX3N0YXR1 c19wYWdlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAtCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGludGVsX3JpbmdidWZmZXIg KnJpbmdidWYgPSByaW5nLT5idWZmZXI7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqID0gcmluZ2J1Zi0+b2JqOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZW5naW5lLT5pOTE1Owo+ICsJdTMyIG1taW8sIGFkZHI7Cj4gICAJaW50IHJldCA9IDA7Cj4g ICAKPiAtCWdlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOwo+ ICsJaWYgKCFJOTE1X05FRURfR0ZYX0hXUyhkZXZfcHJpdikpIHsKPiArCQlhZGRyID0gZGV2X3By aXYtPnN0YXR1c19wYWdlX2RtYWgtPmJ1c2FkZHI7Cj4gKwkJaWYgKElOVEVMX0lORk8oZGV2X3By aXYpLT5nZW4gPj0gNCkKPiArCQkJYWRkciB8PSAoZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWgt PmJ1c2FkZHIgPj4gMjgpICYgMHhmMDsKPiArCQltbWlvID0gSFdTX1BHQTsKPiArCX0gZWxzZSB7 Cj4gKwkJYWRkciA9IGVuZ2luZS0+c3RhdHVzX3BhZ2UuZ2Z4X2FkZHI7Cj4gKwkJLyogVGhlIHJp bmcgc3RhdHVzIHBhZ2UgYWRkcmVzc2VzIGFyZSBubyBsb25nZXIgbmV4dCB0byB0aGUgcmVzdCBv Zgo+ICsJCSAqIHRoZSByaW5nIHJlZ2lzdGVycyBhcyBvZiBnZW43Lgo+ICsJCSAqLwo+ICsJCWlm IChJU19HRU43KGRldl9wcml2KSkgewo+ICsJCQlzd2l0Y2ggKGVuZ2luZS0+aWQpIHsKPiArCQkJ ZGVmYXVsdDoKPiArCQkJY2FzZSBSQ1M6Cj4gKwkJCQltbWlvID0gUkVOREVSX0hXU19QR0FfR0VO NzsKPiArCQkJCWJyZWFrOwo+ICsJCQljYXNlIEJDUzoKPiArCQkJCW1taW8gPSBCTFRfSFdTX1BH QV9HRU43Owo+ICsJCQkJYnJlYWs7Cj4gKwkJCQkvKgo+ICsJCQkJICogVkNTMiBhY3R1YWxseSBk b2Vzbid0IGV4aXN0IG9uIEdlbjcuIE9ubHkgc2h1dCB1cAo+ICsJCQkJICogZ2NjIHN3aXRjaCBj aGVjayB3YXJuaW5nCj4gKwkJCQkgKi8KPiArCQkJY2FzZSBWQ1MyOgo+ICsJCQljYXNlIFZDUzoK PiArCQkJCW1taW8gPSBCU0RfSFdTX1BHQV9HRU43Owo+ICsJCQkJYnJlYWs7Cj4gKwkJCWNhc2Ug VkVDUzoKPiArCQkJCW1taW8gPSBWRUJPWF9IV1NfUEdBX0dFTjc7Cj4gKwkJCQlicmVhazsKPiAr CQkJfQo+ICsJCX0gZWxzZSBpZiAoSVNfR0VONihkZXZfcHJpdikpIHsKPiArCQkJbW1pbyA9IFJJ TkdfSFdTX1BHQV9HRU42KGVuZ2luZS0+bW1pb19iYXNlKTsKPiArCQl9IGVsc2Ugewo+ICsJCQkv KiBYWFg6IGdlbjggcmV0dXJucyB0byBzYW5pdHkgKi8KPiArCQkJbW1pbyA9IFJJTkdfSFdTX1BH QShlbmdpbmUtPm1taW9fYmFzZSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCUk5MTVfV1JJVEUobW1p bywgYWRkcik7Cj4gKwlQT1NUSU5HX1JFQUQobW1pbyk7Cj4gKwo+ICsJLyoKPiArCSAqIEZsdXNo IHRoZSBUTEIgZm9yIHRoaXMgcGFnZQo+ICsJICoKPiArCSAqIEZJWE1FOiBUaGVzZSB0d28gYml0 cyBoYXZlIGRpc2FwcGVhcmVkIG9uIGdlbjgsIHNvIGEgcXVlc3Rpb24KPiArCSAqIGFyaXNlczog ZG8gd2Ugc3RpbGwgbmVlZCB0aGlzIGFuZCBpZiBzbyBob3cgc2hvdWxkIHdlIGdvIGFib3V0Cj4g KwkgKiBpbnZhbGlkYXRpbmcgdGhlIFRMQj8KPiArCSAqLwo+ICsJaWYgKElOVEVMX0lORk8oZGV2 X3ByaXYpLT5nZW4gPj0gNiAmJiBJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuIDwgOCkgewo+ICsJ CXUzMiByZWcgPSBSSU5HX0lOU1RQTShlbmdpbmUtPm1taW9fYmFzZSk7Cj4gKwo+ICsJCS8qIHJp bmcgc2hvdWxkIGJlIGlkbGUgYmVmb3JlIGlzc3VpbmcgYSBzeW5jIGZsdXNoKi8KPiArCQlXQVJO X09OKChJOTE1X1JFQURfTU9ERShlbmdpbmUpICYgTU9ERV9JRExFKSA9PSAwKTsKPiAgIAo+IC0J aWYgKCFzdG9wX3JpbmcocmluZykpIHsKPiArCQlJOTE1X1dSSVRFKHJlZywKPiArCQkJICAgX01B U0tFRF9CSVRfRU5BQkxFKElOU1RQTV9UTEJfSU5WQUxJREFURSB8Cj4gKwkJCQkJICAgICAgSU5T VFBNX1NZTkNfRkxVU0gpKTsKPiArCQlpZiAod2FpdF9mb3IoKEk5MTVfUkVBRChyZWcpICYgSU5T VFBNX1NZTkNfRkxVU0gpID09IDAsCj4gKwkJCSAgICAgMTAwMCkpIHsKPiArCQkJRFJNX0VSUk9S KCIlczogd2FpdCBmb3IgU3luY0ZsdXNoIHRvIGNvbXBsZXRlIGZvciBUTEIgaW52YWxpZGF0aW9u IHRpbWVkIG91dFxuIiwKPiArCQkJCSAgZW5naW5lLT5uYW1lKTsKPiArCQkJcmV0ID0gLUVJTzsK PiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVj dCBpbnRlbF9yaW5nYnVmZmVyICoKPiArZW5naW5lX2dldF9yaW5nKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKPiArCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4KQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gKwlzdHJ1 Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZzsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCXJpbmcg PSBlbmdpbmUtPmxlZ2FjeV9yaW5nOwo+ICsJaWYgKHJpbmcpCj4gKwkJcmV0dXJuIHJpbmc7Cj4g Kwo+ICsJcmluZyA9IGludGVsX2VuZ2luZV9hbGxvY19yaW5nKGVuZ2luZSwgY3R4LCAzMiAqIFBB R0VfU0laRSk7Cj4gKwlpZiAoSVNfRVJSKHJpbmcpKSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQg dG8gYWxsb2NhdGUgcmluZ2J1ZmZlciBmb3IgJXM6ICVsZFxuIiwgZW5naW5lLT5uYW1lLCBQVFJf RVJSKHJpbmcpKTsKPiArCQlyZXR1cm4gRVJSX0NBU1QocmluZyk7Cj4gKwl9Cj4gKwo+ICsJZ2Vu Nl9ndF9mb3JjZV93YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gKwlpZiAoIWVu Z2luZV9zdG9wKGVuZ2luZSkpIHsKPiAgIAkJLyogRzQ1IHJpbmcgaW5pdGlhbGl6YXRpb24gb2Z0 ZW4gZmFpbHMgdG8gcmVzZXQgaGVhZCB0byB6ZXJvICovCj4gICAJCURSTV9ERUJVR19LTVMoIiVz IGhlYWQgbm90IHJlc2V0IHRvIHplcm8gIgo+ICAgCQkJICAgICAgImN0bCAlMDh4IGhlYWQgJTA4 eCB0YWlsICUwOHggc3RhcnQgJTA4eFxuIiwKPiAtCQkJICAgICAgcmluZy0+bmFtZSwKPiAtCQkJ ICAgICAgSTkxNV9SRUFEX0NUTChyaW5nKSwKPiAtCQkJICAgICAgSTkxNV9SRUFEX0hFQUQocmlu ZyksCj4gLQkJCSAgICAgIEk5MTVfUkVBRF9UQUlMKHJpbmcpLAo+IC0JCQkgICAgICBJOTE1X1JF QURfU1RBUlQocmluZykpOwo+IC0KPiAtCQlpZiAoIXN0b3BfcmluZyhyaW5nKSkgewo+ICsJCQkg ICAgICBlbmdpbmUtPm5hbWUsCj4gKwkJCSAgICAgIEk5MTVfUkVBRF9DVEwoZW5naW5lKSwKPiAr CQkJICAgICAgSTkxNV9SRUFEX0hFQUQoZW5naW5lKSwKPiArCQkJICAgICAgSTkxNV9SRUFEX1RB SUwoZW5naW5lKSwKPiArCQkJICAgICAgSTkxNV9SRUFEX1NUQVJUKGVuZ2luZSkpOwo+ICsJCWlm ICghZW5naW5lX3N0b3AoZW5naW5lKSkgewo+ICAgCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0 ICVzIGhlYWQgdG8gemVybyAiCj4gICAJCQkJICAiY3RsICUwOHggaGVhZCAlMDh4IHRhaWwgJTA4 eCBzdGFydCAlMDh4XG4iLAo+IC0JCQkJICByaW5nLT5uYW1lLAo+IC0JCQkJICBJOTE1X1JFQURf Q1RMKHJpbmcpLAo+IC0JCQkJICBJOTE1X1JFQURfSEVBRChyaW5nKSwKPiAtCQkJCSAgSTkxNV9S RUFEX1RBSUwocmluZyksCj4gLQkJCQkgIEk5MTVfUkVBRF9TVEFSVChyaW5nKSk7Cj4gKwkJCQkg IGVuZ2luZS0+bmFtZSwKPiArCQkJCSAgSTkxNV9SRUFEX0NUTChlbmdpbmUpLAo+ICsJCQkJICBJ OTE1X1JFQURfSEVBRChlbmdpbmUpLAo+ICsJCQkJICBJOTE1X1JFQURfVEFJTChlbmdpbmUpLAo+ ICsJCQkJICBJOTE1X1JFQURfU1RBUlQoZW5naW5lKSk7Cj4gICAJCQlyZXQgPSAtRUlPOwo+IC0J CQlnb3RvIG91dDsKPiAgIAkJfQo+ICAgCX0KPiArCWdlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQoZGV2 X3ByaXYsIEZPUkNFV0FLRV9BTEwpOwo+ICAgCj4gLQlpZiAoSTkxNV9ORUVEX0dGWF9IV1MoZGV2 KSkKPiAtCQlpbnRlbF9yaW5nX3NldHVwX3N0YXR1c19wYWdlKHJpbmcpOwo+IC0JZWxzZQo+IC0J CXJpbmdfc2V0dXBfcGh5c19zdGF0dXNfcGFnZShyaW5nKTsKPiArCWlmIChyZXQgPT0gMCkgewo+ ICsJCWVuZ2luZS0+bGVnYWN5X3JpbmcgPSByaW5nOwo+ICsJfSBlbHNlIHsKPiArCQlpbnRlbF9y aW5nX2ZyZWUocmluZyk7Cj4gKwkJcmluZyA9IEVSUl9QVFIocmV0KTsKPiArCX0KPiArCj4gKwly ZXR1cm4gcmluZzsKPiArfQo+ICsKPiArc3RhdGljIGludCBlbmdpbmVfcmVzdW1lKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJp bmcgPSBlbmdpbmUtPmxlZ2FjeV9yaW5nOwo+ICsJaW50IHJldHJ5ID0gMywgcmV0Owo+ICsKPiAr CWlmIChXQVJOX09OKHJpbmcgPT0gTlVMTCkpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJ Z2VuNl9ndF9mb3JjZV93YWtlX2dldChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gKwo+ICsJ cmV0ID0gZW5hYmxlX3N0YXR1c19wYWdlKGVuZ2luZSk7Cj4gICAKPiArcmVzZXQ6Cj4gICAJLyog RW5mb3JjZSBvcmRlcmluZyBieSByZWFkaW5nIEhFQUQgcmVnaXN0ZXIgYmFjayAqLwo+IC0JSTkx NV9SRUFEX0hFQUQocmluZyk7Cj4gKwllbmdpbmUtPndyaXRlX3RhaWwoZW5naW5lLCByaW5nLT50 YWlsKTsKPiArCUk5MTVfV1JJVEVfSEVBRChlbmdpbmUsIHJpbmctPmhlYWQpOwo+ICsJKHZvaWQp STkxNV9SRUFEX0hFQUQoZW5naW5lKTsKPiAgIAo+ICAgCS8qIEluaXRpYWxpemUgdGhlIHJpbmcu IFRoaXMgbXVzdCBoYXBwZW4gX2FmdGVyXyB3ZSd2ZSBjbGVhcmVkIHRoZSByaW5nCj4gICAJICog cmVnaXN0ZXJzIHdpdGggdGhlIGFib3ZlIHNlcXVlbmNlICh0aGUgcmVhZGJhY2sgb2YgdGhlIEhF QUQgcmVnaXN0ZXJzCj4gICAJICogYWxzbyBlbmZvcmNlcyBvcmRlcmluZyksIG90aGVyd2lzZSB0 aGUgaHcgbWlnaHQgbG9zZSB0aGUgbmV3IHJpbmcKPiAgIAkgKiByZWdpc3RlciB2YWx1ZXMuICov Cj4gLQlJOTE1X1dSSVRFX1NUQVJUKHJpbmcsIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmop KTsKPiArCUk5MTVfV1JJVEVfU1RBUlQoZW5naW5lLCBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQo cmluZy0+b2JqKSk7Cj4gICAKPiAgIAkvKiBXYUNsZWFyUmluZ0J1ZkhlYWRSZWdBdEluaXQ6Y3Rn LGVsayAqLwo+IC0JaWYgKEk5MTVfUkVBRF9IRUFEKHJpbmcpKQo+ICsJaWYgKEk5MTVfUkVBRF9I RUFEKGVuZ2luZSkgIT0gcmluZy0+aGVhZCkKPiAgIAkJRFJNX0RFQlVHKCIlcyBpbml0aWFsaXph dGlvbiBmYWlsZWQgW2hlYWQ9JTA4eF0sIGZ1ZGdpbmdcbiIsCj4gLQkJCSAgcmluZy0+bmFtZSwg STkxNV9SRUFEX0hFQUQocmluZykpOwo+IC0JSTkxNV9XUklURV9IRUFEKHJpbmcsIDApOwo+IC0J KHZvaWQpSTkxNV9SRUFEX0hFQUQocmluZyk7Cj4gLQo+IC0JSTkxNV9XUklURV9DVEwocmluZywK PiAtCQkJKChyaW5nYnVmLT5zaXplIC0gUEFHRV9TSVpFKSAmIFJJTkdfTlJfUEFHRVMpCj4gLQkJ CXwgUklOR19WQUxJRCk7Cj4gLQo+IC0JLyogSWYgdGhlIGhlYWQgaXMgc3RpbGwgbm90IHplcm8s IHRoZSByaW5nIGlzIGRlYWQgKi8KPiAtCWlmICh3YWl0X2ZvcigoSTkxNV9SRUFEX0NUTChyaW5n KSAmIFJJTkdfVkFMSUQpICE9IDAgJiYKPiAtCQkgICAgIEk5MTVfUkVBRF9TVEFSVChyaW5nKSA9 PSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSAmJgo+IC0JCSAgICAgKEk5MTVfUkVBRF9I RUFEKHJpbmcpICYgSEVBRF9BRERSKSA9PSAwLCA1MCkpIHsKPiArCQkJICBlbmdpbmUtPm5hbWUs IEk5MTVfUkVBRF9IRUFEKGVuZ2luZSkpOwo+ICsJSTkxNV9XUklURV9IRUFEKGVuZ2luZSwgcmlu Zy0+aGVhZCk7Cj4gKwkodm9pZClJOTE1X1JFQURfSEVBRChlbmdpbmUpOwo+ICsKPiArCUk5MTVf V1JJVEVfQ1RMKGVuZ2luZSwKPiArCQkgICAgICAgKChyaW5nLT5zaXplIC0gUEFHRV9TSVpFKSAm IFJJTkdfTlJfUEFHRVMpCj4gKwkJICAgICAgIHwgUklOR19WQUxJRCk7Cj4gKwo+ICsJaWYgKHdh aXRfZm9yKChJOTE1X1JFQURfQ1RMKGVuZ2luZSkgJiBSSU5HX1ZBTElEKSAhPSAwLCA1MCkpIHsK PiArCQlpZiAocmV0cnktLSAmJiBlbmdpbmVfc3RvcChlbmdpbmUpKQo+ICsJCQlnb3RvIHJlc2V0 Owo+ICsJfQo+ICsKPiArCWlmICgoSTkxNV9SRUFEX0NUTChlbmdpbmUpICYgUklOR19WQUxJRCkg PT0gMCB8fAo+ICsJICAgIEk5MTVfUkVBRF9TVEFSVChlbmdpbmUpICE9IGk5MTVfZ2VtX29ial9n Z3R0X29mZnNldChyaW5nLT5vYmopKSB7Cj4gICAJCURSTV9FUlJPUigiJXMgaW5pdGlhbGl6YXRp b24gZmFpbGVkICIKPiAtCQkJICAiY3RsICUwOHggKHZhbGlkPyAlZCkgaGVhZCAlMDh4IHRhaWwg JTA4eCBzdGFydCAlMDh4IFtleHBlY3RlZCAlMDhseF1cbiIsCj4gLQkJCSAgcmluZy0+bmFtZSwK PiAtCQkJICBJOTE1X1JFQURfQ1RMKHJpbmcpLCBJOTE1X1JFQURfQ1RMKHJpbmcpICYgUklOR19W QUxJRCwKPiAtCQkJICBJOTE1X1JFQURfSEVBRChyaW5nKSwgSTkxNV9SRUFEX1RBSUwocmluZyks Cj4gLQkJCSAgSTkxNV9SRUFEX1NUQVJUKHJpbmcpLCAodW5zaWduZWQgbG9uZylpOTE1X2dlbV9v YmpfZ2d0dF9vZmZzZXQob2JqKSk7Cj4gKwkJCSAgImN0bCAlMDh4ICh2YWxpZD8gJWQpIGhlYWQg JTA4eCBbZXhwZWN0ZWQgJTA4eF0sIHRhaWwgJTA4eCBbZXhwZWN0ZWQgJTA4eF0sIHN0YXJ0ICUw OHggW2V4cGVjdGVkICUwOGx4XVxuIiwKPiArCQkJICBlbmdpbmUtPm5hbWUsCj4gKwkJCSAgSTkx NV9SRUFEX0NUTChlbmdpbmUpLCBJOTE1X1JFQURfQ1RMKGVuZ2luZSkgJiBSSU5HX1ZBTElELAo+ ICsJCQkgIEk5MTVfUkVBRF9IRUFEKGVuZ2luZSksIHJpbmctPmhlYWQsCj4gKwkJCSAgSTkxNV9S RUFEX1RBSUwoZW5naW5lKSwgcmluZy0+dGFpbCwKPiArCQkJICBJOTE1X1JFQURfU1RBUlQoZW5n aW5lKSwgKHVuc2lnbmVkIGxvbmcpaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KHJpbmctPm9iaikp Owo+ICAgCQlyZXQgPSAtRUlPOwo+IC0JCWdvdG8gb3V0Owo+ICAgCX0KPiAgIAo+IC0JcmluZ2J1 Zi0+aGVhZCA9IEk5MTVfUkVBRF9IRUFEKHJpbmcpOwo+IC0JcmluZ2J1Zi0+dGFpbCA9IEk5MTVf UkVBRF9UQUlMKHJpbmcpICYgVEFJTF9BRERSOwo+IC0JcmluZ2J1Zi0+c3BhY2UgPSBpbnRlbF9y aW5nX3NwYWNlKHJpbmdidWYpOwo+IC0JcmluZ2J1Zi0+bGFzdF9yZXRpcmVkX2hlYWQgPSAtMTsK PiArCWdlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOwo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICAgCj4gLQltZW1zZXQoJnJpbmctPmhhbmdjaGVjaywgMCwgc2l6 ZW9mKHJpbmctPmhhbmdjaGVjaykpOwo+ICtzdGF0aWMgdm9pZCBlbmdpbmVfcHV0X3Jpbmcoc3Ry dWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmcsCj4gKwkJCSAgICBzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY3R4KQo+ICt7Cj4gKwlpZiAocmluZy0+bGFzdF9jb250ZXh0ID09IGN0eCkgewo+ICsJCXN0 cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycTsKPiArCQlpbnQgcmV0ID0gLUVJTlZBTDsKPiAgIAo+ IC1vdXQ6Cj4gLQlnZW42X2d0X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxM KTsKPiArCQlycSA9IGludGVsX2VuZ2luZV9hbGxvY19yZXF1ZXN0KHJpbmctPmVuZ2luZSwKPiAr CQkJCQkJcmluZy0+ZW5naW5lLT5kZWZhdWx0X2NvbnRleHQpOwo+ICsJCWlmICghSVNfRVJSKHJx KSkgewo+ICsJCQlyZXQgPSBpOTE1X3JlcXVlc3RfY29tbWl0KHJxKTsKPiArCQkJaTkxNV9yZXF1 ZXN0X3B1dChycSk7Cj4gKwkJfQo+ICsJCWlmIChXQVJOX09OKHJldCkpCj4gKwkJCXJpbmctPmxh c3RfY29udGV4dCA9IHJpbmctPmVuZ2luZS0+ZGVmYXVsdF9jb250ZXh0Owo+ICsJfQo+ICt9Cj4g ICAKPiAtCXJldHVybiByZXQ7Cj4gK3N0YXRpYyBpbnQgZW5naW5lX2FkZF9yZXF1ZXN0KHN0cnVj dCBpOTE1X2dlbV9yZXF1ZXN0ICpycSkKPiArewo+ICsJcnEtPmVuZ2luZS0+d3JpdGVfdGFpbChy cS0+ZW5naW5lLCBycS0+dGFpbCk7Cj4gKwlsaXN0X2FkZF90YWlsKCZycS0+ZW5naW5lX2xpc3Qs ICZycS0+ZW5naW5lLT5yZXF1ZXN0cyk7Cj4gKwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC12b2lk Cj4gLWludGVsX2ZpbmlfcGlwZV9jb250cm9sKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcp Cj4gK3N0YXRpYyBib29sIGVuZ2luZV9ycV9pc19jb21wbGV0ZShzdHJ1Y3QgaTkxNV9nZW1fcmVx dWVzdCAqcnEpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owo+ ICsJcmV0dXJuIF9faTkxNV9zZXFub19wYXNzZWQocnEtPmVuZ2luZS0+Z2V0X3NlcW5vKHJxLT5l bmdpbmUpLAo+ICsJCQkJICAgcnEtPnNlcW5vKTsKPiArfQo+ICAgCj4gLQlpZiAocmluZy0+c2Ny YXRjaC5vYmogPT0gTlVMTCkKPiArc3RhdGljIHZvaWQKPiArZmluaV9waXBlX2NvbnRyb2woc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlpZiAoZW5naW5lLT5zY3JhdGNo Lm9iaiA9PSBOVUxMKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAtCWlmIChJTlRFTF9JTkZPKGRldikt PmdlbiA+PSA1KSB7Cj4gLQkJa3VubWFwKHNnX3BhZ2UocmluZy0+c2NyYXRjaC5vYmotPnBhZ2Vz LT5zZ2wpKTsKPiAtCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihyaW5nLT5zY3JhdGNoLm9i aik7Cj4gKwlpZiAoSU5URUxfSU5GTyhlbmdpbmUtPmk5MTUpLT5nZW4gPj0gNSkgewo+ICsJCWt1 bm1hcChzZ19wYWdlKGVuZ2luZS0+c2NyYXRjaC5vYmotPnBhZ2VzLT5zZ2wpKTsKPiArCQlpOTE1 X2dlbV9vYmplY3RfZ2d0dF91bnBpbihlbmdpbmUtPnNjcmF0Y2gub2JqKTsKPiAgIAl9Cj4gICAK PiAtCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZyaW5nLT5zY3JhdGNoLm9iai0+YmFzZSk7 Cj4gLQlyaW5nLT5zY3JhdGNoLm9iaiA9IE5VTEw7Cj4gKwlkcm1fZ2VtX29iamVjdF91bnJlZmVy ZW5jZSgmZW5naW5lLT5zY3JhdGNoLm9iai0+YmFzZSk7Cj4gKwllbmdpbmUtPnNjcmF0Y2gub2Jq ID0gTlVMTDsKPiAgIH0KPiAgIAo+IC1pbnQKPiAtaW50ZWxfaW5pdF9waXBlX2NvbnRyb2woc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArc3RhdGljIGludAo+ICtpbml0X3BpcGVfY29u dHJvbChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICB7Cj4gICAJaW50IHJldDsK PiAgIAo+IC0JaWYgKHJpbmctPnNjcmF0Y2gub2JqKQo+ICsJaWYgKGVuZ2luZS0+c2NyYXRjaC5v YmopCj4gICAJCXJldHVybiAwOwo+ICAgCj4gLQlyaW5nLT5zY3JhdGNoLm9iaiA9IGk5MTVfZ2Vt X2FsbG9jX29iamVjdChyaW5nLT5kZXYsIDQwOTYpOwo+IC0JaWYgKHJpbmctPnNjcmF0Y2gub2Jq ID09IE5VTEwpIHsKPiArCWVuZ2luZS0+c2NyYXRjaC5vYmogPSBpOTE1X2dlbV9hbGxvY19vYmpl Y3QoZW5naW5lLT5pOTE1LT5kZXYsIDQwOTYpOwo+ICsJaWYgKGVuZ2luZS0+c2NyYXRjaC5vYmog PT0gTlVMTCkgewo+ICAgCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBzZXFubyBwYWdl XG4iKTsKPiAgIAkJcmV0ID0gLUVOT01FTTsKPiAgIAkJZ290byBlcnI7Cj4gICAJfQo+ICAgCj4g LQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2xldmVsKHJpbmctPnNjcmF0Y2gub2Jq LCBJOTE1X0NBQ0hFX0xMQyk7Cj4gKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2xl dmVsKGVuZ2luZS0+c2NyYXRjaC5vYmosIEk5MTVfQ0FDSEVfTExDKTsKPiAgIAlpZiAocmV0KQo+ ICAgCQlnb3RvIGVycl91bnJlZjsKPiAgIAo+IC0JcmV0ID0gaTkxNV9nZW1fb2JqX2dndHRfcGlu KHJpbmctPnNjcmF0Y2gub2JqLCA0MDk2LCAwKTsKPiArCXJldCA9IGk5MTVfZ2VtX29ial9nZ3R0 X3BpbihlbmdpbmUtPnNjcmF0Y2gub2JqLCA0MDk2LCAwKTsKPiAgIAlpZiAocmV0KQo+ICAgCQln b3RvIGVycl91bnJlZjsKPiAgIAo+IC0JcmluZy0+c2NyYXRjaC5ndHRfb2Zmc2V0ID0gaTkxNV9n ZW1fb2JqX2dndHRfb2Zmc2V0KHJpbmctPnNjcmF0Y2gub2JqKTsKPiAtCXJpbmctPnNjcmF0Y2gu Y3B1X3BhZ2UgPSBrbWFwKHNnX3BhZ2UocmluZy0+c2NyYXRjaC5vYmotPnBhZ2VzLT5zZ2wpKTsK PiAtCWlmIChyaW5nLT5zY3JhdGNoLmNwdV9wYWdlID09IE5VTEwpIHsKPiArCWVuZ2luZS0+c2Ny YXRjaC5ndHRfb2Zmc2V0ID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRj aC5vYmopOwo+ICsJZW5naW5lLT5zY3JhdGNoLmNwdV9wYWdlID0ga21hcChzZ19wYWdlKGVuZ2lu ZS0+c2NyYXRjaC5vYmotPnBhZ2VzLT5zZ2wpKTsKPiArCWlmIChlbmdpbmUtPnNjcmF0Y2guY3B1 X3BhZ2UgPT0gTlVMTCkgewo+ICAgCQlyZXQgPSAtRU5PTUVNOwo+ICAgCQlnb3RvIGVycl91bnBp bjsKPiAgIAl9Cj4gICAKPiAgIAlEUk1fREVCVUdfRFJJVkVSKCIlcyBwaXBlIGNvbnRyb2wgb2Zm c2V0OiAweCUwOHhcbiIsCj4gLQkJCSByaW5nLT5uYW1lLCByaW5nLT5zY3JhdGNoLmd0dF9vZmZz ZXQpOwo+ICsJCQkgZW5naW5lLT5uYW1lLCBlbmdpbmUtPnNjcmF0Y2guZ3R0X29mZnNldCk7Cj4g ICAJcmV0dXJuIDA7Cj4gICAKPiAgIGVycl91bnBpbjoKPiAtCWk5MTVfZ2VtX29iamVjdF9nZ3R0 X3VucGluKHJpbmctPnNjcmF0Y2gub2JqKTsKPiArCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGlu KGVuZ2luZS0+c2NyYXRjaC5vYmopOwo+ICAgZXJyX3VucmVmOgo+IC0JZHJtX2dlbV9vYmplY3Rf dW5yZWZlcmVuY2UoJnJpbmctPnNjcmF0Y2gub2JqLT5iYXNlKTsKPiArCWRybV9nZW1fb2JqZWN0 X3VucmVmZXJlbmNlKCZlbmdpbmUtPnNjcmF0Y2gub2JqLT5iYXNlKTsKPiAgIGVycjoKPiArCWVu Z2luZS0+c2NyYXRjaC5vYmogPSBOVUxMOwo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAt c3RhdGljIGlubGluZSB2b2lkIGludGVsX3JpbmdfZW1pdF93YShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nLAo+IC0JCQkJICAgICAgIHUzMiBhZGRyLCB1MzIgdmFsdWUpCj4gK3N0YXRpYyBp bnQKPiArZW1pdF9scmkoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxLAo+ICsJIGludCBudW1f cmVnaXN0ZXJzLAo+ICsJIC4uLikKPiAgIHsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBy aW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmc7Cj4gKwl2YV9saXN0 IGFwOwo+ICAgCj4gLQlpZiAoV0FSTl9PTihkZXZfcHJpdi0+bnVtX3dhX3JlZ3MgPj0gSTkxNV9N QVhfV0FfUkVHUykpCj4gLQkJcmV0dXJuOwo+ICsJQlVHX09OKG51bV9yZWdpc3RlcnMgPiA2MCk7 Cj4gICAKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKSk7 Cj4gLQlpbnRlbF9yaW5nX2VtaXQocmluZywgYWRkcik7Cj4gLQlpbnRlbF9yaW5nX2VtaXQocmlu ZywgdmFsdWUpOwo+ICsJcmluZyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDIqbnVtX3JlZ2lzdGVy cyArIDEpOwo+ICsJaWYgKElTX0VSUihyaW5nKSkKPiArCQlyZXR1cm4gUFRSX0VSUihyaW5nKTsK PiAgIAo+IC0JZGV2X3ByaXYtPmludGVsX3dhX3JlZ3NbZGV2X3ByaXYtPm51bV93YV9yZWdzXS5h ZGRyID0gYWRkcjsKPiAtCWRldl9wcml2LT5pbnRlbF93YV9yZWdzW2Rldl9wcml2LT5udW1fd2Ff cmVnc10ubWFzayA9IHZhbHVlICYgMHhGRkZGOwo+IC0JLyogdmFsdWUgaXMgdXBkYXRlZCB3aXRo IHRoZSBzdGF0dXMgb2YgcmVtYWluaW5nIGJpdHMgb2YgdGhpcwo+IC0JICogcmVnaXN0ZXIgd2hl biBpdCBpcyByZWFkIGZyb20gZGVidWdmcyBmaWxlCj4gLQkgKi8KPiAtCWRldl9wcml2LT5pbnRl bF93YV9yZWdzW2Rldl9wcml2LT5udW1fd2FfcmVnc10udmFsdWUgPSB2YWx1ZTsKPiAtCWRldl9w cml2LT5udW1fd2FfcmVncysrOwo+ICsJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX0xPQURfUkVH SVNURVJfSU1NKG51bV9yZWdpc3RlcnMpKTsKPiArCXZhX3N0YXJ0KGFwLCBudW1fcmVnaXN0ZXJz KTsKPiArCXdoaWxlIChudW1fcmVnaXN0ZXJzLS0pIHsKPiArCQlpbnRlbF9yaW5nX2VtaXQocmlu ZywgdmFfYXJnKGFwLCB1MzIpKTsKPiArCQlpbnRlbF9yaW5nX2VtaXQocmluZywgdmFfYXJnKGFw LCB1MzIpKTsKPiArCX0KPiArCXZhX2VuZChhcCk7Cj4gKwlpbnRlbF9yaW5nX2FkdmFuY2Uocmlu Zyk7Cj4gICAKPiAtCXJldHVybjsKPiArCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBp bnQgYmR3X2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAr c3RhdGljIGludCBiZHdfcmVuZGVyX2luaXRfY29udGV4dChzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVz dCAqcnEpCj4gICB7Cj4gICAJaW50IHJldDsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBy aW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwo+ICAgCj4gLQkvKgo+IC0JICogd29ya2Fyb3VuZHMgYXBwbGllZCBpbiB0aGlz IGZuIGFyZSBwYXJ0IG9mIHJlZ2lzdGVyIHN0YXRlIGNvbnRleHQsCj4gLQkgKiB0aGV5IG5lZWQg dG8gYmUgcmUtaW5pdGlhbGl6ZWQgZm9sbG93ZWQgYnkgZ3B1IHJlc2V0LCBzdXNwZW5kL3Jlc3Vt ZSwKPiAtCSAqIG1vZHVsZSByZWxvYWQuCj4gLQkgKi8KPiAtCWRldl9wcml2LT5udW1fd2FfcmVn cyA9IDA7Cj4gLQltZW1zZXQoZGV2X3ByaXYtPmludGVsX3dhX3JlZ3MsIDAsIHNpemVvZihkZXZf cHJpdi0+aW50ZWxfd2FfcmVncykpOwo+IC0KPiAtCS8qCj4gLQkgKiB1cGRhdGUgdGhlIG51bWJl ciBvZiBkd29yZHMgcmVxdWlyZWQgYmFzZWQgb24gdGhlCj4gLQkgKiBhY3R1YWwgbnVtYmVyIG9m IHdvcmthcm91bmRzIGFwcGxpZWQKPiAtCSAqLwo+IC0JcmV0ID0gaW50ZWxfcmluZ19iZWdpbihy aW5nLCAyNCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBlbWl0X2xy aShycSwgOCwKPiAgIAo+ICsJLyogRklYTUU6IFVuY2xlYXIgd2hldGhlciB3ZSByZWFsbHkgbmVl ZCB0aGlzIG9uIHByb2R1Y3Rpb24gYmR3LiAqLwo+ICsJR0VOOF9ST1dfQ0hJQ0tFTiwKPiAgIAkv KiBXYURpc2FibGVQYXJ0aWFsSW5zdFNob290ZG93bjpiZHcgKi8KPiArCV9NQVNLRURfQklUX0VO QUJMRShQQVJUSUFMX0lOU1RSVUNUSU9OX1NIT09URE9XTl9ESVNBQkxFKSB8Cj4gICAJLyogV2FE aXNhYmxlVGhyZWFkU3RhbGxEb3BDbG9ja0dhdGluZzpiZHcgKi8KPiAtCS8qIEZJWE1FOiBVbmNs ZWFyIHdoZXRoZXIgd2UgcmVhbGx5IG5lZWQgdGhpcyBvbiBwcm9kdWN0aW9uIGJkdy4gKi8KPiAt CWludGVsX3JpbmdfZW1pdF93YShyaW5nLCBHRU44X1JPV19DSElDS0VOLAo+IC0JCQkgICBfTUFT S0VEX0JJVF9FTkFCTEUoUEFSVElBTF9JTlNUUlVDVElPTl9TSE9PVERPV05fRElTQUJMRQo+IC0J CQkJCSAgICAgfCBTVEFMTF9ET1BfR0FUSU5HX0RJU0FCTEUpKTsKPiArCV9NQVNLRURfQklUX0VO QUJMRShTVEFMTF9ET1BfR0FUSU5HX0RJU0FCTEUpLAo+ICAgCj4gKwlHRU43X1JPV19DSElDS0VO MiwKPiAgIAkvKiBXYURpc2FibGVEb3BDbG9ja0dhdGluZzpiZHcgTWF5IG5vdCBiZSBuZWVkZWQg Zm9yIHByb2R1Y3Rpb24gKi8KPiAtCWludGVsX3JpbmdfZW1pdF93YShyaW5nLCBHRU43X1JPV19D SElDS0VOMiwKPiAtCQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKERPUF9DTE9DS19HQVRJTkdfRElT QUJMRSkpOwo+ICsJX01BU0tFRF9CSVRfRU5BQkxFKERPUF9DTE9DS19HQVRJTkdfRElTQUJMRSks Cj4gICAKPiAgIAkvKgo+ICAgCSAqIFRoaXMgR0VOOF9DRU5UUk9JRF9QSVhFTF9PUFRfRElTIFcv QSBpcyBvbmx5IG5lZWRlZCBmb3IKPiAgIAkgKiBwcmUtcHJvZHVjdGlvbiBoYXJkd2FyZQo+ICAg CSAqLwo+IC0JaW50ZWxfcmluZ19lbWl0X3dhKHJpbmcsIEhBTEZfU0xJQ0VfQ0hJQ0tFTjMsCj4g LQkJCSAgIF9NQVNLRURfQklUX0VOQUJMRShHRU44X0NFTlRST0lEX1BJWEVMX09QVF9ESVMKPiAt CQkJCQkgICAgICB8IEdFTjhfU0FNUExFUl9QT1dFUl9CWVBBU1NfRElTKSk7Cj4gKwlIQUxGX1NM SUNFX0NISUNLRU4zLAo+ICsJX01BU0tFRF9CSVRfRU5BQkxFKEdFTjhfQ0VOVFJPSURfUElYRUxf T1BUX0RJUykgfAo+ICsJX01BU0tFRF9CSVRfRU5BQkxFKEdFTjhfU0FNUExFUl9QT1dFUl9CWVBB U1NfRElTKSwKPiAgIAo+IC0JaW50ZWxfcmluZ19lbWl0X3dhKHJpbmcsIEdFTjdfSEFMRl9TTElD RV9DSElDS0VOMSwKPiAtCQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdFTjdfU0lOR0xFX1NVQlND QU5fRElTUEFUQ0hfRU5BQkxFKSk7Cj4gKwlHRU43X0hBTEZfU0xJQ0VfQ0hJQ0tFTjEsCj4gKwlf TUFTS0VEX0JJVF9FTkFCTEUoR0VON19TSU5HTEVfU1VCU0NBTl9ESVNQQVRDSF9FTkFCTEUpLAo+ ICAgCj4gLQlpbnRlbF9yaW5nX2VtaXRfd2EocmluZywgQ09NTU9OX1NMSUNFX0NISUNLRU4yLAo+ IC0JCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VOOF9DU0MyX1NCRV9WVUVfQ0FDSEVfQ09OU0VS VkFUSVZFKSk7Cj4gKwlDT01NT05fU0xJQ0VfQ0hJQ0tFTjIsCj4gKwlfTUFTS0VEX0JJVF9FTkFC TEUoR0VOOF9DU0MyX1NCRV9WVUVfQ0FDSEVfQ09OU0VSVkFUSVZFKSwKPiAgIAo+ICAgCS8qIFVz ZSBGb3JjZSBOb24tQ29oZXJlbnQgd2hlbmV2ZXIgZXhlY3V0aW5nIGEgM0QgY29udGV4dC4gVGhp cyBpcyBhCj4gICAJICogd29ya2Fyb3VuZCBmb3IgZm9yIGEgcG9zc2libGUgaGFuZyBpbiB0aGUg dW5saWtlbHkgZXZlbnQgYSBUTEIKPiAgIAkgKiBpbnZhbGlkYXRpb24gb2NjdXJzIGR1cmluZyBh IFBTRCBmbHVzaC4KPiAgIAkgKi8KPiAtCWludGVsX3JpbmdfZW1pdF93YShyaW5nLCBIRENfQ0hJ Q0tFTjAsCj4gLQkJCSAgIF9NQVNLRURfQklUX0VOQUJMRShIRENfRk9SQ0VfTk9OX0NPSEVSRU5U KSk7Cj4gKwlIRENfQ0hJQ0tFTjAsCj4gKwlfTUFTS0VEX0JJVF9FTkFCTEUoSERDX0ZPUkNFX05P Tl9DT0hFUkVOVCksCj4gICAKPiArCUNBQ0hFX01PREVfMSwKPiAgIAkvKiBXYTR4NFNUQ09wdGlt aXphdGlvbkRpc2FibGU6YmR3ICovCj4gLQlpbnRlbF9yaW5nX2VtaXRfd2EocmluZywgQ0FDSEVf TU9ERV8xLAo+IC0JCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VOOF80eDRfU1RDX09QVElNSVpB VElPTl9ESVNBQkxFKSk7Cj4gKwlfTUFTS0VEX0JJVF9FTkFCTEUoR0VOOF80eDRfU1RDX09QVElN SVpBVElPTl9ESVNBQkxFKSwKPiAgIAo+ICAgCS8qCj4gICAJICogQlNwZWMgcmVjb21tZW5kcyA4 eDQgd2hlbiBNU0FBIGlzIHVzZWQsCj4gQEAgLTc1MSw2NiArODA0LDUxIEBAIHN0YXRpYyBpbnQg YmR3X2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAgIAkg KiBkaXNhYmxlIGJpdCwgd2hpY2ggd2UgZG9uJ3QgdG91Y2ggaGVyZSwgYnV0IGl0J3MgZ29vZAo+ ICAgCSAqIHRvIGtlZXAgaW4gbWluZCAoc2VlIDNEU1RBVEVfUFMgYW5kIDNEU1RBVEVfV00pLgo+ ICAgCSAqLwo+IC0JaW50ZWxfcmluZ19lbWl0X3dhKHJpbmcsIEdFTjdfR1RfTU9ERSwKPiAtCQkJ ICAgR0VONl9XSVpfSEFTSElOR19NQVNLIHwgR0VONl9XSVpfSEFTSElOR18xNng0KTsKPiAtCj4g LQlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gLQo+IC0JRFJNX0RFQlVHX0RSSVZFUigiTnVt YmVyIG9mIFdvcmthcm91bmRzIGFwcGxpZWQ6ICVkXG4iLAo+IC0JCQkgZGV2X3ByaXYtPm51bV93 YV9yZWdzKTsKPiArCUdFTjdfR1RfTU9ERSwKPiArCUdFTjZfV0laX0hBU0hJTkdfTUFTSyB8IEdF TjZfV0laX0hBU0hJTkdfMTZ4NCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gICAK PiAtCXJldHVybiAwOwo+ICsJcmV0dXJuIGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZV9pbml0KHJxKTsK PiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IGNodl9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcpCj4gK3N0YXRpYyBpbnQgY2h2X3JlbmRlcl9pbml0X2NvbnRleHQo c3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICAgewo+ICAgCWludCByZXQ7Cj4gLQlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCj4gLQkvKgo+IC0JICogd29ya2Fy b3VuZHMgYXBwbGllZCBpbiB0aGlzIGZuIGFyZSBwYXJ0IG9mIHJlZ2lzdGVyIHN0YXRlIGNvbnRl eHQsCj4gLQkgKiB0aGV5IG5lZWQgdG8gYmUgcmUtaW5pdGlhbGl6ZWQgZm9sbG93ZWQgYnkgZ3B1 IHJlc2V0LCBzdXNwZW5kL3Jlc3VtZSwKPiAtCSAqIG1vZHVsZSByZWxvYWQuCj4gLQkgKi8KPiAt CWRldl9wcml2LT5udW1fd2FfcmVncyA9IDA7Cj4gLQltZW1zZXQoZGV2X3ByaXYtPmludGVsX3dh X3JlZ3MsIDAsIHNpemVvZihkZXZfcHJpdi0+aW50ZWxfd2FfcmVncykpOwo+ICAgCj4gLQlyZXQg PSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDEyKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJl dDsKPiArCXJldCA9IGVtaXRfbHJpKHJxLCA4LAo+ICAgCj4gKwlHRU44X1JPV19DSElDS0VOLAo+ ICAgCS8qIFdhRGlzYWJsZVBhcnRpYWxJbnN0U2hvb3Rkb3duOmNodiAqLwo+IC0JaW50ZWxfcmlu Z19lbWl0X3dhKHJpbmcsIEdFTjhfUk9XX0NISUNLRU4sCj4gLQkJCSAgIF9NQVNLRURfQklUX0VO QUJMRShQQVJUSUFMX0lOU1RSVUNUSU9OX1NIT09URE9XTl9ESVNBQkxFKSk7Cj4gLQo+ICsJX01B U0tFRF9CSVRfRU5BQkxFKFBBUlRJQUxfSU5TVFJVQ1RJT05fU0hPT1RET1dOX0RJU0FCTEUpIHwK PiAgIAkvKiBXYURpc2FibGVUaHJlYWRTdGFsbERvcENsb2NrR2F0aW5nOmNodiAqLwo+IC0JaW50 ZWxfcmluZ19lbWl0X3dhKHJpbmcsIEdFTjhfUk9XX0NISUNLRU4sCj4gLQkJCSAgIF9NQVNLRURf QklUX0VOQUJMRShTVEFMTF9ET1BfR0FUSU5HX0RJU0FCTEUpKTsKPiArCV9NQVNLRURfQklUX0VO QUJMRShTVEFMTF9ET1BfR0FUSU5HX0RJU0FCTEUpLAo+ICAgCj4gICAJLyogV2FEaXNhYmxlRG9w Q2xvY2tHYXRpbmc6Y2h2IChwcmUtcHJvZHVjdGlvbiBodykgKi8KPiAtCWludGVsX3JpbmdfZW1p dF93YShyaW5nLCBHRU43X1JPV19DSElDS0VOMiwKPiAtCQkJICAgX01BU0tFRF9CSVRfRU5BQkxF KERPUF9DTE9DS19HQVRJTkdfRElTQUJMRSkpOwo+ICsJR0VON19ST1dfQ0hJQ0tFTjIsCj4gKwlf TUFTS0VEX0JJVF9FTkFCTEUoRE9QX0NMT0NLX0dBVElOR19ESVNBQkxFKSwKPiAgIAo+ICAgCS8q IFdhRGlzYWJsZVNhbXBsZXJQb3dlckJ5cGFzczpjaHYgKHByZS1wcm9kdWN0aW9uIGh3KSAqLwo+ IC0JaW50ZWxfcmluZ19lbWl0X3dhKHJpbmcsIEhBTEZfU0xJQ0VfQ0hJQ0tFTjMsCj4gLQkJCSAg IF9NQVNLRURfQklUX0VOQUJMRShHRU44X1NBTVBMRVJfUE9XRVJfQllQQVNTX0RJUykpOwo+ICsJ SEFMRl9TTElDRV9DSElDS0VOMywKPiArCV9NQVNLRURfQklUX0VOQUJMRShHRU44X1NBTVBMRVJf UE9XRVJfQllQQVNTX0RJUykpOwo+ICAgCj4gLQlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4g KwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gICAKPiAtCXJldHVybiAwOwo+ICsJcmV0dXJu IGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZV9pbml0KHJxKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50 IGluaXRfcmVuZGVyX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArc3RhdGlj IGludCByZW5kZXJfcmVzdW1lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsK PiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0JaW50IHJldCA9IGlu aXRfcmluZ19jb21tb24ocmluZyk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBlbmdpbmUtPmk5MTU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGVuZ2luZV9yZXN1 bWUoZW5naW5lKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4gICAJLyog V2FUaW1lZFNpbmdsZVZlcnRleERpc3BhdGNoOmNsLGJ3LGN0ZyxlbGssaWxrLHNuYiAqLwo+IC0J aWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQgJiYgSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA3 KQo+ICsJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4gPj0gNCAmJiBJTlRFTF9JTkZPKGRl dl9wcml2KS0+Z2VuIDwgNykKPiAgIAkJSTkxNV9XUklURShNSV9NT0RFLCBfTUFTS0VEX0JJVF9F TkFCTEUoVlNfVElNRVJfRElTUEFUQ0gpKTsKPiAgIAo+ICAgCS8qIFdlIG5lZWQgdG8gZGlzYWJs ZSB0aGUgQXN5bmNGbGlwIHBlcmZvcm1hbmNlIG9wdGltaXNhdGlvbnMgaW4gb3JkZXIKPiBAQCAt ODE5LDI4ICs4NTcsMjIgQEAgc3RhdGljIGludCBpbml0X3JlbmRlcl9yaW5nKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcpCj4gICAJICoKPiAgIAkgKiBXYURpc2FibGVBc3luY0ZsaXBQZXJm TW9kZTpzbmIsaXZiLGhzdyx2bHYsYmR3LGNodgo+ICAgCSAqLwo+IC0JaWYgKElOVEVMX0lORk8o ZGV2KS0+Z2VuID49IDYpCj4gKwlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA2KQo+ ICAgCQlJOTE1X1dSSVRFKE1JX01PREUsIF9NQVNLRURfQklUX0VOQUJMRShBU1lOQ19GTElQX1BF UkZfRElTQUJMRSkpOwo+ICAgCj4gICAJLyogUmVxdWlyZWQgZm9yIHRoZSBoYXJkd2FyZSB0byBw cm9ncmFtIHNjYW5saW5lIHZhbHVlcyBmb3Igd2FpdGluZyAqLwo+ICAgCS8qIFdhRW5hYmxlRmx1 c2hUbGJJbnZhbGlkYXRpb25Nb2RlOnNuYiAqLwo+IC0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2Vu ID09IDYpCj4gKwlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA9PSA2KQo+ICAgCQlJOTE1 X1dSSVRFKEdGWF9NT0RFLAo+ICAgCQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdGWF9UTEJfSU5W QUxJREFURV9FWFBMSUNJVCkpOwo+ICAgCj4gICAJLyogV2FCQ1NWQ1NUbGJJbnZhbGlkYXRpb25N b2RlOml2Yix2bHYsaHN3ICovCj4gLQlpZiAoSVNfR0VONyhkZXYpKQo+ICsJaWYgKElTX0dFTjco ZGV2X3ByaXYpKQo+ICAgCQlJOTE1X1dSSVRFKEdGWF9NT0RFX0dFTjcsCj4gICAJCQkgICBfTUFT S0VEX0JJVF9FTkFCTEUoR0ZYX1RMQl9JTlZBTElEQVRFX0VYUExJQ0lUKSB8Cj4gICAJCQkgICBf TUFTS0VEX0JJVF9FTkFCTEUoR0ZYX1JFUExBWV9NT0RFKSk7Cj4gICAKPiAtCWlmIChJTlRFTF9J TkZPKGRldiktPmdlbiA+PSA1KSB7Cj4gLQkJcmV0ID0gaW50ZWxfaW5pdF9waXBlX2NvbnRyb2wo cmluZyk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gLQlpZiAo SVNfR0VONihkZXYpKSB7Cj4gKwlpZiAoSVNfR0VONihkZXZfcHJpdikpIHsKPiAgIAkJLyogRnJv bSB0aGUgU2FuZHlicmlkZ2UgUFJNLCB2b2x1bWUgMSBwYXJ0IDMsIHBhZ2UgMjQ6Cj4gICAJCSAq ICJJZiB0aGlzIGJpdCBpcyBzZXQsIFNUQ3VuaXQgd2lsbCBoYXZlIExSQSBhcyByZXBsYWNlbWVu dAo+ICAgCQkgKiAgcG9saWN5LiBbLi4uXSBUaGlzIGJpdCBtdXN0IGJlIHJlc2V0LiAgTFJBIHJl cGxhY2VtZW50Cj4gQEAgLTg1MCwxOSArODgyLDQwIEBAIHN0YXRpYyBpbnQgaW5pdF9yZW5kZXJf cmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICAgCQkJICAgX01BU0tFRF9CSVRf RElTQUJMRShDTTBfU1RDX0VWSUNUX0RJU0FCTEVfTFJBX1NOQikpOwo+ICAgCX0KPiAgIAo+IC0J aWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDYpCj4gKwlpZiAoSU5URUxfSU5GTyhkZXZfcHJp diktPmdlbiA+PSA2KQo+ICAgCQlJOTE1X1dSSVRFKElOU1RQTSwgX01BU0tFRF9CSVRfRU5BQkxF KElOU1RQTV9GT1JDRV9PUkRFUklORykpOwo+ICAgCj4gLQlpZiAoSEFTX0wzX0RQRihkZXYpKQo+ IC0JCUk5MTVfV1JJVEVfSU1SKHJpbmcsIH5HVF9QQVJJVFlfRVJST1IoZGV2KSk7Cj4gKwlyZXR1 cm4gMDsKPiArfQo+ICAgCj4gLQlyZXR1cm4gcmV0Owo+ICtzdGF0aWMgdm9pZCBjbGVhbnVwX3N0 YXR1c19wYWdlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiArCj4gKwlvYmogPSBlbmdpbmUtPnN0YXR1c19w YWdlLm9iajsKPiArCWlmIChvYmogPT0gTlVMTCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJa3VubWFw KHNnX3BhZ2Uob2JqLT5wYWdlcy0+c2dsKSk7Cj4gKwlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBp bihvYmopOwo+ICsJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4gKwll bmdpbmUtPnN0YXR1c19wYWdlLm9iaiA9IE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGVu Z2luZV9jbGVhbnVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJaWYg KGVuZ2luZS0+bGVnYWN5X3JpbmcpCj4gKwkJaW50ZWxfcmluZ19mcmVlKGVuZ2luZS0+bGVnYWN5 X3JpbmcpOwo+ICsKPiArCWNsZWFudXBfc3RhdHVzX3BhZ2UoZW5naW5lKTsKPiArCWk5MTVfY21k X3BhcnNlcl9maW5pX2VuZ2luZShlbmdpbmUpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkIHJl bmRlcl9yaW5nX2NsZWFudXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArc3RhdGlj IHZvaWQgcmVuZGVyX2NsZWFudXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAg ewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gKwo+ICsJZW5naW5lX2Ns ZWFudXAoZW5naW5lKTsKPiAgIAo+ICAgCWlmIChkZXZfcHJpdi0+c2VtYXBob3JlX29iaikgewo+ ICAgCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihkZXZfcHJpdi0+c2VtYXBob3JlX29iaik7 Cj4gQEAgLTg3MCwxNTQgKzkyMyw4MiBAQCBzdGF0aWMgdm9pZCByZW5kZXJfcmluZ19jbGVhbnVw KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gICAJCWRldl9wcml2LT5zZW1hcGhvcmVf b2JqID0gTlVMTDsKPiAgIAl9Cj4gICAKPiAtCWludGVsX2ZpbmlfcGlwZV9jb250cm9sKHJpbmcp Owo+ICsJZmluaV9waXBlX2NvbnRyb2woZW5naW5lKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50 IGdlbjhfcmNzX3NpZ25hbChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWduYWxsZXIsCj4gLQkJ CSAgIHVuc2lnbmVkIGludCBudW1fZHdvcmRzKQo+ICtzdGF0aWMgaW50Cj4gK2dlbjhfcmNzX2Vt aXRfc2lnbmFsKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwgaW50IGlkKQo+ICAgewo+IC0j ZGVmaW5lIE1CT1hfVVBEQVRFX0RXT1JEUyA4Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g c2lnbmFsbGVyLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqd2FpdGVyOwo+IC0J aW50IGksIHJldCwgbnVtX3JpbmdzOwo+IC0KPiAtCW51bV9yaW5ncyA9IGh3ZWlnaHQzMihJTlRF TF9JTkZPKGRldiktPnJpbmdfbWFzayk7Cj4gLQludW1fZHdvcmRzICs9IChudW1fcmluZ3MtMSkg KiBNQk9YX1VQREFURV9EV09SRFM7Cj4gLSN1bmRlZiBNQk9YX1VQREFURV9EV09SRFMKPiAtCj4g LQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHNpZ25hbGxlciwgbnVtX2R3b3Jkcyk7Cj4gLQlpZiAo cmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwl1NjQgb2Zmc2V0ID0gR0VOOF9TRU1BUEhPUkVfT0ZG U0VUKHJxLT5pOTE1LCBycS0+ZW5naW5lLT5pZCwgaWQpOwo+ICsJc3RydWN0IGludGVsX3Jpbmdi dWZmZXIgKnJpbmc7Cj4gICAKPiAtCWZvcl9lYWNoX3Jpbmcod2FpdGVyLCBkZXZfcHJpdiwgaSkg ewo+IC0JCXU2NCBndHRfb2Zmc2V0ID0gc2lnbmFsbGVyLT5zZW1hcGhvcmUuc2lnbmFsX2dndHRb aV07Cj4gLQkJaWYgKGd0dF9vZmZzZXQgPT0gTUlfU0VNQVBIT1JFX1NZTkNfSU5WQUxJRCkKPiAt CQkJY29udGludWU7Cj4gKwlyaW5nID0gaW50ZWxfcmluZ19iZWdpbihycSwgOCk7Cj4gKwlpZiAo SVNfRVJSKHJpbmcpKQo+ICsJCXJldHVybiBQVFJfRVJSKHJpbmcpOwo+ICAgCj4gLQkJaW50ZWxf cmluZ19lbWl0KHNpZ25hbGxlciwgR0ZYX09QX1BJUEVfQ09OVFJPTCg2KSk7Cj4gLQkJaW50ZWxf cmluZ19lbWl0KHNpZ25hbGxlciwgUElQRV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCIHwKPiAtCQkJ CQkgICBQSVBFX0NPTlRST0xfUVdfV1JJVEUgfAo+IC0JCQkJCSAgIFBJUEVfQ09OVFJPTF9GTFVT SF9FTkFCTEUpOwo+IC0JCWludGVsX3JpbmdfZW1pdChzaWduYWxsZXIsIGxvd2VyXzMyX2JpdHMo Z3R0X29mZnNldCkpOwo+IC0JCWludGVsX3JpbmdfZW1pdChzaWduYWxsZXIsIHVwcGVyXzMyX2Jp dHMoZ3R0X29mZnNldCkpOwo+IC0JCWludGVsX3JpbmdfZW1pdChzaWduYWxsZXIsIHNpZ25hbGxl ci0+b3V0c3RhbmRpbmdfbGF6eV9zZXFubyk7Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHNpZ25hbGxl ciwgMCk7Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHNpZ25hbGxlciwgTUlfU0VNQVBIT1JFX1NJR05B TCB8Cj4gLQkJCQkJICAgTUlfU0VNQVBIT1JFX1RBUkdFVCh3YWl0ZXItPmlkKSk7Cj4gLQkJaW50 ZWxfcmluZ19lbWl0KHNpZ25hbGxlciwgMCk7Cj4gLQl9Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmlu ZywgR0ZYX09QX1BJUEVfQ09OVFJPTCg2KSk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywKPiAr CQkJUElQRV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCIHwKPiArCQkJUElQRV9DT05UUk9MX1FXX1dS SVRFIHwKPiArCQkJUElQRV9DT05UUk9MX0ZMVVNIX0VOQUJMRSk7Cj4gKwlpbnRlbF9yaW5nX2Vt aXQocmluZywgbG93ZXJfMzJfYml0cyhvZmZzZXQpKTsKPiArCWludGVsX3JpbmdfZW1pdChyaW5n LCB1cHBlcl8zMl9iaXRzKG9mZnNldCkpOwo+ICsJaW50ZWxfcmluZ19lbWl0KHJpbmcsIHJxLT5z ZXFubyk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQo cmluZywKPiArCQkJTUlfU0VNQVBIT1JFX1NJR05BTCB8Cj4gKwkJCU1JX1NFTUFQSE9SRV9UQVJH RVQoaWQpKTsKPiArCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKPiArCWludGVsX3JpbmdfYWR2 YW5jZShyaW5nKTsKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQg Z2VuOF94Y3Nfc2lnbmFsKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNpZ25hbGxlciwKPiAtCQkJ ICAgdW5zaWduZWQgaW50IG51bV9kd29yZHMpCj4gK3N0YXRpYyBpbnQKPiArZ2VuOF94Y3NfZW1p dF9zaWduYWwoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxLCBpbnQgaWQpCj4gICB7Cj4gLSNk ZWZpbmUgTUJPWF9VUERBVEVfRFdPUkRTIDYKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBz aWduYWxsZXItPmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICp3YWl0ZXI7Cj4gLQlp bnQgaSwgcmV0LCBudW1fcmluZ3M7Cj4gKwl1NjQgb2Zmc2V0ID0gR0VOOF9TRU1BUEhPUkVfT0ZG U0VUKHJxLT5pOTE1LCBycS0+ZW5naW5lLT5pZCwgaWQpOwo+ICsJc3RydWN0IGludGVsX3Jpbmdi dWZmZXIgKnJpbmc7Cj4gICAKPiAtCW51bV9yaW5ncyA9IGh3ZWlnaHQzMihJTlRFTF9JTkZPKGRl diktPnJpbmdfbWFzayk7Cj4gLQludW1fZHdvcmRzICs9IChudW1fcmluZ3MtMSkgKiBNQk9YX1VQ REFURV9EV09SRFM7Cj4gLSN1bmRlZiBNQk9YX1VQREFURV9EV09SRFMKPiArCXJpbmcgPSBpbnRl bF9yaW5nX2JlZ2luKHJxLCA2KTsKPiArCWlmIChJU19FUlIocmluZykpCj4gKwkJcmV0dXJuIFBU Ul9FUlIocmluZyk7Cj4gICAKPiAtCXJldCA9IGludGVsX3JpbmdfYmVnaW4oc2lnbmFsbGVyLCBu dW1fZHdvcmRzKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlmb3JfZWFj aF9yaW5nKHdhaXRlciwgZGV2X3ByaXYsIGkpIHsKPiAtCQl1NjQgZ3R0X29mZnNldCA9IHNpZ25h bGxlci0+c2VtYXBob3JlLnNpZ25hbF9nZ3R0W2ldOwo+IC0JCWlmIChndHRfb2Zmc2V0ID09IE1J X1NFTUFQSE9SRV9TWU5DX0lOVkFMSUQpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAtCQlpbnRlbF9y aW5nX2VtaXQoc2lnbmFsbGVyLCAoTUlfRkxVU0hfRFcgKyAxKSB8Cj4gLQkJCQkJICAgTUlfRkxV U0hfRFdfT1BfU1RPUkVEVyk7Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHNpZ25hbGxlciwgbG93ZXJf MzJfYml0cyhndHRfb2Zmc2V0KSB8Cj4gLQkJCQkJICAgTUlfRkxVU0hfRFdfVVNFX0dUVCk7Cj4g LQkJaW50ZWxfcmluZ19lbWl0KHNpZ25hbGxlciwgdXBwZXJfMzJfYml0cyhndHRfb2Zmc2V0KSk7 Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHNpZ25hbGxlciwgc2lnbmFsbGVyLT5vdXRzdGFuZGluZ19s YXp5X3NlcW5vKTsKPiAtCQlpbnRlbF9yaW5nX2VtaXQoc2lnbmFsbGVyLCBNSV9TRU1BUEhPUkVf U0lHTkFMIHwKPiAtCQkJCQkgICBNSV9TRU1BUEhPUkVfVEFSR0VUKHdhaXRlci0+aWQpKTsKPiAt CQlpbnRlbF9yaW5nX2VtaXQoc2lnbmFsbGVyLCAwKTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsK PiAtfQo+IC0KPiAtc3RhdGljIGludCBnZW42X3NpZ25hbChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpzaWduYWxsZXIsCj4gLQkJICAgICAgIHVuc2lnbmVkIGludCBudW1fZHdvcmRzKQo+IC17Cj4g LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gc2lnbmFsbGVyLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqdXNlbGVzczsKPiAtCWludCBpLCByZXQsIG51bV9yaW5nczsKPiAtCj4g LSNkZWZpbmUgTUJPWF9VUERBVEVfRFdPUkRTIDMKPiAtCW51bV9yaW5ncyA9IGh3ZWlnaHQzMihJ TlRFTF9JTkZPKGRldiktPnJpbmdfbWFzayk7Cj4gLQludW1fZHdvcmRzICs9IHJvdW5kX3VwKChu dW1fcmluZ3MtMSkgKiBNQk9YX1VQREFURV9EV09SRFMsIDIpOwo+IC0jdW5kZWYgTUJPWF9VUERB VEVfRFdPUkRTCj4gLQo+IC0JcmV0ID0gaW50ZWxfcmluZ19iZWdpbihzaWduYWxsZXIsIG51bV9k d29yZHMpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCWZvcl9lYWNoX3Jp bmcodXNlbGVzcywgZGV2X3ByaXYsIGkpIHsKPiAtCQl1MzIgbWJveF9yZWcgPSBzaWduYWxsZXIt PnNlbWFwaG9yZS5tYm94LnNpZ25hbFtpXTsKPiAtCQlpZiAobWJveF9yZWcgIT0gR0VONl9OT1NZ TkMpIHsKPiAtCQkJaW50ZWxfcmluZ19lbWl0KHNpZ25hbGxlciwgTUlfTE9BRF9SRUdJU1RFUl9J TU0oMSkpOwo+IC0JCQlpbnRlbF9yaW5nX2VtaXQoc2lnbmFsbGVyLCBtYm94X3JlZyk7Cj4gLQkJ CWludGVsX3JpbmdfZW1pdChzaWduYWxsZXIsIHNpZ25hbGxlci0+b3V0c3RhbmRpbmdfbGF6eV9z ZXFubyk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCS8qIElmIG51bV9kd29yZHMgd2FzIHJvdW5kZWQs IG1ha2Ugc3VyZSB0aGUgdGFpbCBwb2ludGVyIGlzIGNvcnJlY3QgKi8KPiAtCWlmIChudW1fcmlu Z3MgJSAyID09IDApCj4gLQkJaW50ZWxfcmluZ19lbWl0KHNpZ25hbGxlciwgTUlfTk9PUCk7Cj4g KwlpbnRlbF9yaW5nX2VtaXQocmluZywKPiArCQkJTUlfRkxVU0hfRFcgfAo+ICsJCQlNSV9GTFVT SF9EV19PUF9TVE9SRURXIHwKPiArCQkJKDQgLSAyKSk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmlu ZywKPiArCQkJbG93ZXJfMzJfYml0cyhvZmZzZXQpIHwKPiArCQkJTUlfRkxVU0hfRFdfVVNFX0dU VCk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywgdXBwZXJfMzJfYml0cyhvZmZzZXQpKTsKPiAr CWludGVsX3JpbmdfZW1pdChyaW5nLCBycS0+c2Vxbm8pOwo+ICsJaW50ZWxfcmluZ19lbWl0KHJp bmcsCj4gKwkJCU1JX1NFTUFQSE9SRV9TSUdOQUwgfAo+ICsJCQlNSV9TRU1BUEhPUkVfVEFSR0VU KGlkKSk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7Cj4gKwlpbnRlbF9yaW5nX2FkdmFu Y2UocmluZyk7Cj4gICAKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC0vKioKPiAtICogZ2Vu Nl9hZGRfcmVxdWVzdCAtIFVwZGF0ZSB0aGUgc2VtYXBob3JlIG1haWxib3ggcmVnaXN0ZXJzCj4g LSAqCj4gLSAqIEByaW5nIC0gcmluZyB0aGF0IGlzIGFkZGluZyBhIHJlcXVlc3QKPiAtICogQHNl cW5vIC0gcmV0dXJuIHNlcW5vIHN0dWNrIGludG8gdGhlIHJpbmcKPiAtICoKPiAtICogVXBkYXRl IHRoZSBtYWlsYm94IHJlZ2lzdGVycyBpbiB0aGUgKm90aGVyKiByaW5ncyB3aXRoIHRoZSBjdXJy ZW50IHNlcW5vLgo+IC0gKiBUaGlzIGFjdHMgbGlrZSBhIHNpZ25hbCBpbiB0aGUgY2Fub25pY2Fs IHNlbWFwaG9yZS4KPiAtICovCj4gICBzdGF0aWMgaW50Cj4gLWdlbjZfYWRkX3JlcXVlc3Qoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArZ2VuNl9lbWl0X3NpZ25hbChzdHJ1Y3QgaTkx NV9nZW1fcmVxdWVzdCAqcnEsIGludCBpZCkKPiAgIHsKPiAtCWludCByZXQ7Cj4gLQo+IC0JaWYg KHJpbmctPnNlbWFwaG9yZS5zaWduYWwpCj4gLQkJcmV0ID0gcmluZy0+c2VtYXBob3JlLnNpZ25h bChyaW5nLCA0KTsKPiAtCWVsc2UKPiAtCQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQp Owo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmc7Cj4gICAKPiAtCWlmIChyZXQpCj4g LQkJcmV0dXJuIHJldDsKPiArCXJpbmcgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCAzKTsKPiArCWlm IChJU19FUlIocmluZykpCj4gKwkJcmV0dXJuIFBUUl9FUlIocmluZyk7Cj4gICAKPiAtCWludGVs X3JpbmdfZW1pdChyaW5nLCBNSV9TVE9SRV9EV09SRF9JTkRFWCk7Cj4gLQlpbnRlbF9yaW5nX2Vt aXQocmluZywgSTkxNV9HRU1fSFdTX0lOREVYIDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZU KTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCByaW5nLT5vdXRzdGFuZGluZ19sYXp5X3NlcW5v KTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9VU0VSX0lOVEVSUlVQVCk7Cj4gLQlfX2lu dGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKPiArCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9MT0FE X1JFR0lTVEVSX0lNTSgxKSk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywgcnEtPmVuZ2luZS0+ c2VtYXBob3JlLm1ib3guc2lnbmFsW2lkXSk7Cj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywgcnEt PnNlcW5vKTsKPiArCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKPiAgIAo+ICAgCXJldHVybiAw Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X2dlbV9oYXNfc2Vxbm9fd3Jh cHBlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IC0JCQkJCSAgICAgIHUzMiBzZXFubykKPiAt ewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKPiAtCXJldHVybiBkZXZfcHJpdi0+bGFzdF9zZXFubyA8IHNlcW5vOwo+IC19Cj4gLQo+ICAg LyoqCj4gICAgKiBpbnRlbF9yaW5nX3N5bmMgLSBzeW5jIHRoZSB3YWl0ZXIgdG8gdGhlIHNpZ25h bGxlciBvbiBzZXFubwo+ICAgICoKPiBAQCAtMTAyNyw2NiArMTAwOCw1MiBAQCBzdGF0aWMgaW5s aW5lIGJvb2wgaTkxNV9nZW1faGFzX3NlcW5vX3dyYXBwZWQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiAgICAqLwo+ICAgCj4gICBzdGF0aWMgaW50Cj4gLWdlbjhfcmluZ19zeW5jKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKndhaXRlciwKPiAtCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpzaWduYWxsZXIsCj4gLQkgICAgICAgdTMyIHNlcW5vKQo+ICtnZW44X2VtaXRfd2FpdChzdHJ1 Y3QgaTkxNV9nZW1fcmVxdWVzdCAqd2FpdGVyLAo+ICsJICAgICAgIHN0cnVjdCBpOTE1X2dlbV9y ZXF1ZXN0ICpzaWduYWxsZXIpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB3YWl0ZXItPmRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlpbnQgcmV0Owo+ICsJdTY0IG9m ZnNldCA9IEdFTjhfU0VNQVBIT1JFX09GRlNFVCh3YWl0ZXItPmk5MTUsIHNpZ25hbGxlci0+ZW5n aW5lLT5pZCwgd2FpdGVyLT5lbmdpbmUtPmlkKTsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVy ICpyaW5nOwo+ICAgCj4gLQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHdhaXRlciwgNCk7Cj4gLQlp ZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlyaW5nID0gaW50ZWxfcmluZ19iZWdpbih3YWl0 ZXIsIDQpOwo+ICsJaWYgKElTX0VSUihyaW5nKSkKPiArCQlyZXR1cm4gUFRSX0VSUihyaW5nKTsK PiAgIAo+IC0JaW50ZWxfcmluZ19lbWl0KHdhaXRlciwgTUlfU0VNQVBIT1JFX1dBSVQgfAo+IC0J CQkJTUlfU0VNQVBIT1JFX0dMT0JBTF9HVFQgfAo+IC0JCQkJTUlfU0VNQVBIT1JFX1BPTEwgfAo+ IC0JCQkJTUlfU0VNQVBIT1JFX1NBRF9HVEVfU0REKTsKPiAtCWludGVsX3JpbmdfZW1pdCh3YWl0 ZXIsIHNlcW5vKTsKPiAtCWludGVsX3JpbmdfZW1pdCh3YWl0ZXIsCj4gLQkJCWxvd2VyXzMyX2Jp dHMoR0VOOF9XQUlUX09GRlNFVCh3YWl0ZXIsIHNpZ25hbGxlci0+aWQpKSk7Cj4gLQlpbnRlbF9y aW5nX2VtaXQod2FpdGVyLAo+IC0JCQl1cHBlcl8zMl9iaXRzKEdFTjhfV0FJVF9PRkZTRVQod2Fp dGVyLCBzaWduYWxsZXItPmlkKSkpOwo+IC0JaW50ZWxfcmluZ19hZHZhbmNlKHdhaXRlcik7Cj4g KwlpbnRlbF9yaW5nX2VtaXQocmluZywKPiArCQkJTUlfU0VNQVBIT1JFX1dBSVQgfAo+ICsJCQlN SV9TRU1BUEhPUkVfR0xPQkFMX0dUVCB8Cj4gKwkJCU1JX1NFTUFQSE9SRV9QT0xMIHwKPiArCQkJ TUlfU0VNQVBIT1JFX1NBRF9HVEVfU0REKTsKPiArCWludGVsX3JpbmdfZW1pdChyaW5nLCBzaWdu YWxsZXItPmJyZWFkY3J1bWJbd2FpdGVyLT5lbmdpbmUtPmlkXSk7Cj4gKwlpbnRlbF9yaW5nX2Vt aXQocmluZywgbG93ZXJfMzJfYml0cyhvZmZzZXQpKTsKPiArCWludGVsX3JpbmdfZW1pdChyaW5n LCB1cHBlcl8zMl9iaXRzKG9mZnNldCkpOwo+ICsJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+ ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50Cj4gLWdlbjZfcmluZ19zeW5j KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKndhaXRlciwKPiAtCSAgICAgICBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpzaWduYWxsZXIsCj4gLQkgICAgICAgdTMyIHNlcW5vKQo+ICtnZW42X2VtaXRf d2FpdChzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqd2FpdGVyLAo+ICsJICAgICAgIHN0cnVjdCBp OTE1X2dlbV9yZXF1ZXN0ICpzaWduYWxsZXIpCj4gICB7Cj4gICAJdTMyIGR3MSA9IE1JX1NFTUFQ SE9SRV9NQk9YIHwKPiAgIAkJICBNSV9TRU1BUEhPUkVfQ09NUEFSRSB8Cj4gICAJCSAgTUlfU0VN QVBIT1JFX1JFR0lTVEVSOwo+IC0JdTMyIHdhaXRfbWJveCA9IHNpZ25hbGxlci0+c2VtYXBob3Jl Lm1ib3gud2FpdFt3YWl0ZXItPmlkXTsKPiAtCWludCByZXQ7Cj4gKwl1MzIgd2FpdF9tYm94ID0g c2lnbmFsbGVyLT5lbmdpbmUtPnNlbWFwaG9yZS5tYm94LndhaXRbd2FpdGVyLT5lbmdpbmUtPmlk XTsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICsKPiArCVdBUk5fT04od2Fp dF9tYm94ID09IE1JX1NFTUFQSE9SRV9TWU5DX0lOVkFMSUQpOwo+ICsKPiArCXJpbmcgPSBpbnRl bF9yaW5nX2JlZ2luKHdhaXRlciwgMyk7Cj4gKwlpZiAoSVNfRVJSKHJpbmcpKQo+ICsJCXJldHVy biBQVFJfRVJSKHJpbmcpOwo+ICAgCj4gKwlpbnRlbF9yaW5nX2VtaXQocmluZywgZHcxIHwgd2Fp dF9tYm94KTsKPiAgIAkvKiBUaHJvdWdob3V0IGFsbCBvZiB0aGUgR0VNIGNvZGUsIHNlcW5vIHBh c3NlZCBpbXBsaWVzIG91ciBjdXJyZW50Cj4gICAJICogc2Vxbm8gaXMgPj0gdGhlIGxhc3Qgc2Vx bm8gZXhlY3V0ZWQuIEhvd2V2ZXIgZm9yIGhhcmR3YXJlIHRoZQo+ICAgCSAqIGNvbXBhcmlzb24g aXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuLgo+ICAgCSAqLwo+IC0Jc2Vxbm8gLT0gMTsKPiAtCj4g LQlXQVJOX09OKHdhaXRfbWJveCA9PSBNSV9TRU1BUEhPUkVfU1lOQ19JTlZBTElEKTsKPiAtCj4g LQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHdhaXRlciwgNCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJl dHVybiByZXQ7Cj4gLQo+IC0JLyogSWYgc2Vxbm8gd3JhcCBoYXBwZW5lZCwgb21pdCB0aGUgd2Fp dCB3aXRoIG5vLW9wcyAqLwo+IC0JaWYgKGxpa2VseSghaTkxNV9nZW1faGFzX3NlcW5vX3dyYXBw ZWQod2FpdGVyLT5kZXYsIHNlcW5vKSkpIHsKPiAtCQlpbnRlbF9yaW5nX2VtaXQod2FpdGVyLCBk dzEgfCB3YWl0X21ib3gpOwo+IC0JCWludGVsX3JpbmdfZW1pdCh3YWl0ZXIsIHNlcW5vKTsKPiAt CQlpbnRlbF9yaW5nX2VtaXQod2FpdGVyLCAwKTsKPiAtCQlpbnRlbF9yaW5nX2VtaXQod2FpdGVy LCBNSV9OT09QKTsKPiAtCX0gZWxzZSB7Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHdhaXRlciwgTUlf Tk9PUCk7Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHdhaXRlciwgTUlfTk9PUCk7Cj4gLQkJaW50ZWxf cmluZ19lbWl0KHdhaXRlciwgTUlfTk9PUCk7Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHdhaXRlciwg TUlfTk9PUCk7Cj4gLQl9Cj4gLQlpbnRlbF9yaW5nX2FkdmFuY2Uod2FpdGVyKTsKPiArCWludGVs X3JpbmdfZW1pdChyaW5nLCBzaWduYWxsZXItPmJyZWFkY3J1bWJbd2FpdGVyLT5lbmdpbmUtPmlk XSAtIDEpOwo+ICsJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOwo+ICsJaW50ZWxfcmluZ19hZHZh bmNlKHJpbmcpOwo+ICAgCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gQEAgLTExMDEsMTAgKzEwNjgs MTAgQEAgZG8gewkJCQkJCQkJCVwKPiAgIH0gd2hpbGUgKDApCj4gICAKPiAgIHN0YXRpYyBpbnQK PiAtcGNfcmVuZGVyX2FkZF9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4g K2dlbjVfZW1pdF9icmVhZGNydW1iKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSkKPiAgIHsK PiAtCXUzMiBzY3JhdGNoX2FkZHIgPSByaW5nLT5zY3JhdGNoLmd0dF9vZmZzZXQgKyAyICogQ0FD SEVMSU5FX0JZVEVTOwo+IC0JaW50IHJldDsKPiArCXUzMiBzY3JhdGNoX2FkZHIgPSBycS0+ZW5n aW5lLT5zY3JhdGNoLmd0dF9vZmZzZXQgKyAyICogQ0FDSEVMSU5FX0JZVEVTOwo+ICsJc3RydWN0 IGludGVsX3JpbmdidWZmZXIgKnJpbmc7Cj4gICAKPiAgIAkvKiBGb3IgSXJvbmxha2UsIE1JX1VT RVJfSU5URVJSVVBUIHdhcyBkZXByZWNhdGVkIGFuZCBhcHBhcmVudGx5Cj4gICAJICogaW5jb2hl cmVudCB3aXRoIHdyaXRlcyB0byBtZW1vcnksIGkuZS4gY29tcGxldGVseSBmdWJhciwKPiBAQCAt MTExNCwxNiArMTA4MSwxNyBAQCBwY19yZW5kZXJfYWRkX3JlcXVlc3Qoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqcmluZykKPiAgIAkgKiBpbmNvaGVyZW5jZSBieSBmbHVzaGluZyB0aGUgNiBQSVBF X05PVElGWSBidWZmZXJzIG91dCB0bwo+ICAgCSAqIG1lbW9yeSBiZWZvcmUgcmVxdWVzdGluZyBh biBpbnRlcnJ1cHQuCj4gICAJICovCj4gLQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDMy KTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArCXJpbmcgPSBpbnRlbF9yaW5nX2Jl Z2luKHJxLCAzMik7Cj4gKwlpZiAoSVNfRVJSKHJpbmcpKQo+ICsJCXJldHVybiBQVFJfRVJSKHJp bmcpOwo+ICAgCj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIEdGWF9PUF9QSVBFX0NPTlRST0wo NCkgfCBQSVBFX0NPTlRST0xfUVdfV1JJVEUgfAo+ICAgCQkJUElQRV9DT05UUk9MX1dSSVRFX0ZM VVNIIHwKPiAgIAkJCVBJUEVfQ09OVFJPTF9URVhUVVJFX0NBQ0hFX0lOVkFMSURBVEUpOwo+IC0J aW50ZWxfcmluZ19lbWl0KHJpbmcsIHJpbmctPnNjcmF0Y2guZ3R0X29mZnNldCB8IFBJUEVfQ09O VFJPTF9HTE9CQUxfR1RUKTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCByaW5nLT5vdXRzdGFu ZGluZ19sYXp5X3NlcW5vKTsKPiArCWludGVsX3JpbmdfZW1pdChyaW5nLCBycS0+ZW5naW5lLT5z Y3JhdGNoLmd0dF9vZmZzZXQgfCBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVCk7Cj4gKwlpbnRlbF9y aW5nX2VtaXQocmluZywgcnEtPnNlcW5vKTsKPiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7 Cj4gKwo+ICAgCVBJUEVfQ09OVFJPTF9GTFVTSChyaW5nLCBzY3JhdGNoX2FkZHIpOwo+ICAgCXNj cmF0Y2hfYWRkciArPSAyICogQ0FDSEVMSU5FX0JZVEVTOyAvKiB3cml0ZSB0byBzZXBhcmF0ZSBj YWNoZWxpbmVzICovCj4gICAJUElQRV9DT05UUk9MX0ZMVVNIKHJpbmcsIHNjcmF0Y2hfYWRkcik7 Cj4gQEAgLTExNDAsOTYgKzExMDgsODAgQEAgcGNfcmVuZGVyX2FkZF9yZXF1ZXN0KHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gICAJCQlQSVBFX0NPTlRST0xfV1JJVEVfRkxVU0ggfAo+ ICAgCQkJUElQRV9DT05UUk9MX1RFWFRVUkVfQ0FDSEVfSU5WQUxJREFURSB8Cj4gICAJCQlQSVBF X0NPTlRST0xfTk9USUZZKTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCByaW5nLT5zY3JhdGNo Lmd0dF9vZmZzZXQgfCBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVCk7Cj4gLQlpbnRlbF9yaW5nX2Vt aXQocmluZywgcmluZy0+b3V0c3RhbmRpbmdfbGF6eV9zZXFubyk7Cj4gKwlpbnRlbF9yaW5nX2Vt aXQocmluZywgcnEtPmVuZ2luZS0+c2NyYXRjaC5ndHRfb2Zmc2V0IHwgUElQRV9DT05UUk9MX0dM T0JBTF9HVFQpOwo+ICsJaW50ZWxfcmluZ19lbWl0KHJpbmcsIHJxLT5zZXFubyk7Cj4gICAJaW50 ZWxfcmluZ19lbWl0KHJpbmcsIDApOwo+IC0JX19pbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4g LQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAgIAo+IC1zdGF0aWMgdTMyCj4gLWdlbjZfcmluZ19nZXRf c2Vxbm8oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgYm9vbCBsYXp5X2NvaGVyZW5jeSkK PiAtewo+IC0JLyogV29ya2Fyb3VuZCB0byBmb3JjZSBjb3JyZWN0IG9yZGVyaW5nIGJldHdlZW4g aXJxIGFuZCBzZXFubyB3cml0ZXMgb24KPiAtCSAqIGl2YiAoYW5kIG1heWJlIGFsc28gb24gc25i KSBieSByZWFkaW5nIGZyb20gYSBDUyByZWdpc3RlciAobGlrZQo+IC0JICogQUNUSEQpIGJlZm9y ZSByZWFkaW5nIHRoZSBzdGF0dXMgcGFnZS4gKi8KPiAtCWlmICghbGF6eV9jb2hlcmVuY3kpIHsK PiAtCQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5nLT5kZXYtPmRldl9w cml2YXRlOwo+IC0JCVBPU1RJTkdfUkVBRChSSU5HX0FDVEhEKHJpbmctPm1taW9fYmFzZSkpOwo+ IC0JfQo+ICsJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+ICAgCj4gLQlyZXR1cm4gaW50ZWxf cmVhZF9zdGF0dXNfcGFnZShyaW5nLCBJOTE1X0dFTV9IV1NfSU5ERVgpOwo+ICsJcmV0dXJuIDA7 Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB1MzIKPiAtcmluZ19nZXRfc2Vxbm8oc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZywgYm9vbCBsYXp5X2NvaGVyZW5jeSkKPiArcmluZ19nZXRfc2Vxbm8o c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+IC0JcmV0dXJuIGludGVsX3Jl YWRfc3RhdHVzX3BhZ2UocmluZywgSTkxNV9HRU1fSFdTX0lOREVYKTsKPiArCXJldHVybiBpbnRl bF9yZWFkX3N0YXR1c19wYWdlKGVuZ2luZSwgSTkxNV9HRU1fSFdTX0lOREVYKTsKPiAgIH0KPiAg IAo+ICAgc3RhdGljIHZvaWQKPiAtcmluZ19zZXRfc2Vxbm8oc3RydWN0IGludGVsX2VuZ2luZV9j cyAqcmluZywgdTMyIHNlcW5vKQo+ICtyaW5nX3NldF9zZXFubyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsIHUzMiBzZXFubykKPiAgIHsKPiAtCWludGVsX3dyaXRlX3N0YXR1c19wYWdl KHJpbmcsIEk5MTVfR0VNX0hXU19JTkRFWCwgc2Vxbm8pOwo+ICsJaW50ZWxfd3JpdGVfc3RhdHVz X3BhZ2UoZW5naW5lLCBJOTE1X0dFTV9IV1NfSU5ERVgsIHNlcW5vKTsKPiAgIH0KPiAgIAo+ICAg c3RhdGljIHUzMgo+IC1wY19yZW5kZXJfZ2V0X3NlcW5vKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmcsIGJvb2wgbGF6eV9jb2hlcmVuY3kpCj4gK2dlbjVfcmVuZGVyX2dldF9zZXFubyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICB7Cj4gLQlyZXR1cm4gcmluZy0+c2NyYXRj aC5jcHVfcGFnZVswXTsKPiArCXJldHVybiBlbmdpbmUtPnNjcmF0Y2guY3B1X3BhZ2VbMF07Cj4g ICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkCj4gLXBjX3JlbmRlcl9zZXRfc2Vxbm8oc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZywgdTMyIHNlcW5vKQo+ICtnZW41X3JlbmRlcl9zZXRfc2Vxbm8o c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgc2Vxbm8pCj4gICB7Cj4gLQlyaW5n LT5zY3JhdGNoLmNwdV9wYWdlWzBdID0gc2Vxbm87Cj4gKwllbmdpbmUtPnNjcmF0Y2guY3B1X3Bh Z2VbMF0gPSBzZXFubzsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGJvb2wKPiAtZ2VuNV9yaW5nX2dl dF9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArZ2VuNV9pcnFfZ2V0KHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSByaW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbmdp bmUtPmk5MTU7Cj4gICAJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAgIAo+IC0JaWYgKCFkZXYtPmly cV9lbmFibGVkKQo+ICsJaWYgKCFpOTE1LT5kZXYtPmlycV9lbmFibGVkKQo+ICAgCQlyZXR1cm4g ZmFsc2U7Cj4gICAKPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGZs YWdzKTsKPiAtCWlmIChyaW5nLT5pcnFfcmVmY291bnQrKyA9PSAwKQo+IC0JCWdlbjVfZW5hYmxl X2d0X2lycShkZXZfcHJpdiwgcmluZy0+aXJxX2VuYWJsZV9tYXNrKTsKPiAtCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgZmxhZ3MpOwo+ICsJc3Bpbl9sb2NrX2ly cXNhdmUoJmk5MTUtPmlycV9sb2NrLCBmbGFncyk7Cj4gKwlpZiAoZW5naW5lLT5pcnFfcmVmY291 bnQrKyA9PSAwKQo+ICsJCWdlbjVfZW5hYmxlX2d0X2lycShpOTE1LCBlbmdpbmUtPmlycV9lbmFi bGVfbWFzayk7Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpOTE1LT5pcnFfbG9jaywgZmxh Z3MpOwo+ICAgCj4gICAJcmV0dXJuIHRydWU7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkCj4g LWdlbjVfcmluZ19wdXRfaXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK2dlbjVf aXJxX3B1dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICB7Cj4gLQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gZW5naW5lLT5pOTE1Owo+ICAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gICAKPiAt CXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGZsYWdzKTsKPiAtCWlmICgt LXJpbmctPmlycV9yZWZjb3VudCA9PSAwKQo+IC0JCWdlbjVfZGlzYWJsZV9ndF9pcnEoZGV2X3By aXYsIHJpbmctPmlycV9lbmFibGVfbWFzayk7Cj4gLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZk ZXZfcHJpdi0+aXJxX2xvY2ssIGZsYWdzKTsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZpOTE1LT5p cnFfbG9jaywgZmxhZ3MpOwo+ICsJaWYgKC0tZW5naW5lLT5pcnFfcmVmY291bnQgPT0gMCkKPiAr CQlnZW41X2Rpc2FibGVfZ3RfaXJxKGk5MTUsIGVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrKTsKPiAr CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk5MTUtPmlycV9sb2NrLCBmbGFncyk7Cj4gICB9Cj4g ICAKPiAgIHN0YXRpYyBib29sCj4gLWk5eHhfcmluZ19nZXRfaXJxKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcpCj4gK2k5eHhfaXJxX2dldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owo+IC0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiAgIAl1bnNp Z25lZCBsb25nIGZsYWdzOwo+ICAgCj4gLQlpZiAoIWRldi0+aXJxX2VuYWJsZWQpCj4gKwlpZiAo IWRldl9wcml2LT5kZXYtPmlycV9lbmFibGVkKQo+ICAgCQlyZXR1cm4gZmFsc2U7Cj4gICAKPiAg IAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBmbGFncyk7Cj4gLQlpZiAo cmluZy0+aXJxX3JlZmNvdW50KysgPT0gMCkgewo+IC0JCWRldl9wcml2LT5pcnFfbWFzayAmPSB+ cmluZy0+aXJxX2VuYWJsZV9tYXNrOwo+ICsJaWYgKGVuZ2luZS0+aXJxX3JlZmNvdW50KysgPT0g MCkgewo+ICsJCWRldl9wcml2LT5pcnFfbWFzayAmPSB+ZW5naW5lLT5pcnFfZW5hYmxlX21hc2s7 Cj4gICAJCUk5MTVfV1JJVEUoSU1SLCBkZXZfcHJpdi0+aXJxX21hc2spOwo+ICAgCQlQT1NUSU5H X1JFQUQoSU1SKTsKPiAgIAl9Cj4gQEAgLTEyMzksMTUgKzExOTEsMTQgQEAgaTl4eF9yaW5nX2dl dF9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAgIH0KPiAgIAo+ICAgc3RhdGlj IHZvaWQKPiAtaTl4eF9yaW5nX3B1dF9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykK PiAraTl4eF9pcnFfcHV0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAt CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ICAgCXVuc2lnbmVkIGxvbmcgZmxh Z3M7Cj4gICAKPiAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBmbGFn cyk7Cj4gLQlpZiAoLS1yaW5nLT5pcnFfcmVmY291bnQgPT0gMCkgewo+IC0JCWRldl9wcml2LT5p cnFfbWFzayB8PSByaW5nLT5pcnFfZW5hYmxlX21hc2s7Cj4gKwlpZiAoLS1lbmdpbmUtPmlycV9y ZWZjb3VudCA9PSAwKSB7Cj4gKwkJZGV2X3ByaXYtPmlycV9tYXNrIHw9IGVuZ2luZS0+aXJxX2Vu YWJsZV9tYXNrOwo+ICAgCQlJOTE1X1dSSVRFKElNUiwgZGV2X3ByaXYtPmlycV9tYXNrKTsKPiAg IAkJUE9TVElOR19SRUFEKElNUik7Cj4gICAJfQo+IEBAIC0xMjU1LDE4ICsxMjA2LDE3IEBAIGk5 eHhfcmluZ19wdXRfaXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gICB9Cj4gICAK PiAgIHN0YXRpYyBib29sCj4gLWk4eHhfcmluZ19nZXRfaXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcpCj4gK2k4eHhfaXJxX2dldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owo+IC0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiAgIAl1bnNpZ25l ZCBsb25nIGZsYWdzOwo+ICAgCj4gLQlpZiAoIWRldi0+aXJxX2VuYWJsZWQpCj4gKwlpZiAoIWRl dl9wcml2LT5kZXYtPmlycV9lbmFibGVkKQo+ICAgCQlyZXR1cm4gZmFsc2U7Cj4gICAKPiAgIAlz cGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBmbGFncyk7Cj4gLQlpZiAocmlu Zy0+aXJxX3JlZmNvdW50KysgPT0gMCkgewo+IC0JCWRldl9wcml2LT5pcnFfbWFzayAmPSB+cmlu Zy0+aXJxX2VuYWJsZV9tYXNrOwo+ICsJaWYgKGVuZ2luZS0+aXJxX3JlZmNvdW50KysgPT0gMCkg ewo+ICsJCWRldl9wcml2LT5pcnFfbWFzayAmPSB+ZW5naW5lLT5pcnFfZW5hYmxlX21hc2s7Cj4g ICAJCUk5MTVfV1JJVEUxNihJTVIsIGRldl9wcml2LT5pcnFfbWFzayk7Cj4gICAJCVBPU1RJTkdf UkVBRDE2KElNUik7Cj4gICAJfQo+IEBAIC0xMjc2LDE3NSArMTIyNiwxMjAgQEAgaTh4eF9yaW5n X2dldF9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAgIH0KPiAgIAo+ICAgc3Rh dGljIHZvaWQKPiAtaTh4eF9yaW5nX3B1dF9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmlu ZykKPiAraTh4eF9pcnFfcHV0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsK PiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ICAgCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7Cj4gICAKPiAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBm bGFncyk7Cj4gLQlpZiAoLS1yaW5nLT5pcnFfcmVmY291bnQgPT0gMCkgewo+IC0JCWRldl9wcml2 LT5pcnFfbWFzayB8PSByaW5nLT5pcnFfZW5hYmxlX21hc2s7Cj4gKwlpZiAoLS1lbmdpbmUtPmly cV9yZWZjb3VudCA9PSAwKSB7Cj4gKwkJZGV2X3ByaXYtPmlycV9tYXNrIHw9IGVuZ2luZS0+aXJx X2VuYWJsZV9tYXNrOwo+ICAgCQlJOTE1X1dSSVRFMTYoSU1SLCBkZXZfcHJpdi0+aXJxX21hc2sp Owo+ICAgCQlQT1NUSU5HX1JFQUQxNihJTVIpOwo+ICAgCX0KPiAgIAlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGZsYWdzKTsKPiAgIH0KPiAgIAo+IC12b2lkIGlu dGVsX3Jpbmdfc2V0dXBfc3RhdHVzX3BhZ2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykK PiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKPiAtCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7Cj4gLQl1 MzIgbW1pbyA9IDA7Cj4gLQo+IC0JLyogVGhlIHJpbmcgc3RhdHVzIHBhZ2UgYWRkcmVzc2VzIGFy ZSBubyBsb25nZXIgbmV4dCB0byB0aGUgcmVzdCBvZgo+IC0JICogdGhlIHJpbmcgcmVnaXN0ZXJz IGFzIG9mIGdlbjcuCj4gLQkgKi8KPiAtCWlmIChJU19HRU43KGRldikpIHsKPiAtCQlzd2l0Y2gg KHJpbmctPmlkKSB7Cj4gLQkJY2FzZSBSQ1M6Cj4gLQkJCW1taW8gPSBSRU5ERVJfSFdTX1BHQV9H RU43Owo+IC0JCQlicmVhazsKPiAtCQljYXNlIEJDUzoKPiAtCQkJbW1pbyA9IEJMVF9IV1NfUEdB X0dFTjc7Cj4gLQkJCWJyZWFrOwo+IC0JCS8qCj4gLQkJICogVkNTMiBhY3R1YWxseSBkb2Vzbid0 IGV4aXN0IG9uIEdlbjcuIE9ubHkgc2h1dCB1cAo+IC0JCSAqIGdjYyBzd2l0Y2ggY2hlY2sgd2Fy bmluZwo+IC0JCSAqLwo+IC0JCWNhc2UgVkNTMjoKPiAtCQljYXNlIFZDUzoKPiAtCQkJbW1pbyA9 IEJTRF9IV1NfUEdBX0dFTjc7Cj4gLQkJCWJyZWFrOwo+IC0JCWNhc2UgVkVDUzoKPiAtCQkJbW1p byA9IFZFQk9YX0hXU19QR0FfR0VONzsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+IC0JfSBlbHNlIGlm IChJU19HRU42KHJpbmctPmRldikpIHsKPiAtCQltbWlvID0gUklOR19IV1NfUEdBX0dFTjYocmlu Zy0+bW1pb19iYXNlKTsKPiAtCX0gZWxzZSB7Cj4gLQkJLyogWFhYOiBnZW44IHJldHVybnMgdG8g c2FuaXR5ICovCj4gLQkJbW1pbyA9IFJJTkdfSFdTX1BHQShyaW5nLT5tbWlvX2Jhc2UpOwo+IC0J fQo+IC0KPiAtCUk5MTVfV1JJVEUobW1pbywgKHUzMilyaW5nLT5zdGF0dXNfcGFnZS5nZnhfYWRk cik7Cj4gLQlQT1NUSU5HX1JFQUQobW1pbyk7Cj4gLQo+IC0JLyoKPiAtCSAqIEZsdXNoIHRoZSBU TEIgZm9yIHRoaXMgcGFnZQo+IC0JICoKPiAtCSAqIEZJWE1FOiBUaGVzZSB0d28gYml0cyBoYXZl IGRpc2FwcGVhcmVkIG9uIGdlbjgsIHNvIGEgcXVlc3Rpb24KPiAtCSAqIGFyaXNlczogZG8gd2Ug c3RpbGwgbmVlZCB0aGlzIGFuZCBpZiBzbyBob3cgc2hvdWxkIHdlIGdvIGFib3V0Cj4gLQkgKiBp bnZhbGlkYXRpbmcgdGhlIFRMQj8KPiAtCSAqLwo+IC0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2Vu ID49IDYgJiYgSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA4KSB7Cj4gLQkJdTMyIHJlZyA9IFJJTkdf SU5TVFBNKHJpbmctPm1taW9fYmFzZSk7Cj4gLQo+IC0JCS8qIHJpbmcgc2hvdWxkIGJlIGlkbGUg YmVmb3JlIGlzc3VpbmcgYSBzeW5jIGZsdXNoKi8KPiAtCQlXQVJOX09OKChJOTE1X1JFQURfTU9E RShyaW5nKSAmIE1PREVfSURMRSkgPT0gMCk7Cj4gLQo+IC0JCUk5MTVfV1JJVEUocmVnLAo+IC0J CQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoSU5TVFBNX1RMQl9JTlZBTElEQVRFIHwKPiAtCQkJCQkg ICAgICBJTlNUUE1fU1lOQ19GTFVTSCkpOwo+IC0JCWlmICh3YWl0X2ZvcigoSTkxNV9SRUFEKHJl ZykgJiBJTlNUUE1fU1lOQ19GTFVTSCkgPT0gMCwKPiAtCQkJICAgICAxMDAwKSkKPiAtCQkJRFJN X0VSUk9SKCIlczogd2FpdCBmb3IgU3luY0ZsdXNoIHRvIGNvbXBsZXRlIGZvciBUTEIgaW52YWxp ZGF0aW9uIHRpbWVkIG91dFxuIiwKPiAtCQkJCSAgcmluZy0+bmFtZSk7Cj4gLQl9Cj4gLX0KPiAt Cj4gICBzdGF0aWMgaW50Cj4gLWJzZF9yaW5nX2ZsdXNoKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmcsCj4gLQkgICAgICAgdTMyICAgICBpbnZhbGlkYXRlX2RvbWFpbnMsCj4gLQkgICAgICAg dTMyICAgICBmbHVzaF9kb21haW5zKQo+ICtic2RfZW1pdF9mbHVzaChzdHJ1Y3QgaTkxNV9nZW1f cmVxdWVzdCAqcnEsCj4gKwkgICAgICAgdTMyIGZsYWdzKQo+ICAgewo+IC0JaW50IHJldDsKPiAr CXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICAgCj4gLQlyZXQgPSBpbnRlbF9yaW5n X2JlZ2luKHJpbmcsIDIpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJcmluZyA9 IGludGVsX3JpbmdfYmVnaW4ocnEsIDEpOwo+ICsJaWYgKElTX0VSUihyaW5nKSkKPiArCQlyZXR1 cm4gUFRSX0VSUihyaW5nKTsKPiAgIAo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9GTFVT SCk7Cj4gLQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7Cj4gICAJaW50ZWxfcmluZ19h ZHZhbmNlKHJpbmcpOwo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50Cj4g LWk5eHhfYWRkX3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAraTl4eF9l bWl0X2JyZWFkY3J1bWIoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICAgewo+IC0JaW50 IHJldDsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICAgCj4gLQlyZXQgPSBp bnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ ICsJcmluZyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDUpOwo+ICsJaWYgKElTX0VSUihyaW5nKSkK PiArCQlyZXR1cm4gUFRSX0VSUihyaW5nKTsKPiAgIAo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5n LCBNSV9TVE9SRV9EV09SRF9JTkRFWCk7Cj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIEk5MTVf R0VNX0hXU19JTkRFWCA8PCBNSV9TVE9SRV9EV09SRF9JTkRFWF9TSElGVCk7Cj4gLQlpbnRlbF9y aW5nX2VtaXQocmluZywgcmluZy0+b3V0c3RhbmRpbmdfbGF6eV9zZXFubyk7Cj4gKwlpbnRlbF9y aW5nX2VtaXQocmluZywgcnEtPnNlcW5vKTsKPiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlf VVNFUl9JTlRFUlJVUFQpOwo+IC0JX19pbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gKwlpbnRl bF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7Cj4gKwlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7 Cj4gICAKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGJvb2wKPiAtZ2VuNl9y aW5nX2dldF9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArZ2VuNl9pcnFfZ2V0 KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZW5naW5lLT5pOTE1Owo+ICAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gICAKPiAtCWlm ICghZGV2LT5pcnFfZW5hYmxlZCkKPiArCWlmICghZGV2X3ByaXYtPmRldi0+aXJxX2VuYWJsZWQp Cj4gICAJICAgICAgIHJldHVybiBmYWxzZTsKPiAgIAo+ICAgCXNwaW5fbG9ja19pcnFzYXZlKCZk ZXZfcHJpdi0+aXJxX2xvY2ssIGZsYWdzKTsKPiAtCWlmIChyaW5nLT5pcnFfcmVmY291bnQrKyA9 PSAwKSB7Cj4gLQkJaWYgKEhBU19MM19EUEYoZGV2KSAmJiByaW5nLT5pZCA9PSBSQ1MpCj4gLQkJ CUk5MTVfV1JJVEVfSU1SKHJpbmcsCj4gLQkJCQkgICAgICAgfihyaW5nLT5pcnFfZW5hYmxlX21h c2sgfAo+IC0JCQkJCSBHVF9QQVJJVFlfRVJST1IoZGV2KSkpOwo+IC0JCWVsc2UKPiAtCQkJSTkx NV9XUklURV9JTVIocmluZywgfnJpbmctPmlycV9lbmFibGVfbWFzayk7Cj4gLQkJZ2VuNV9lbmFi bGVfZ3RfaXJxKGRldl9wcml2LCByaW5nLT5pcnFfZW5hYmxlX21hc2spOwo+ICsJaWYgKGVuZ2lu ZS0+aXJxX3JlZmNvdW50KysgPT0gMCkgewo+ICsJCUk5MTVfV1JJVEVfSU1SKGVuZ2luZSwKPiAr CQkJICAgICAgIH4oZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgfAo+ICsJCQkJIGVuZ2luZS0+aXJx X2tlZXBfbWFzaykpOwo+ICsJCWdlbjVfZW5hYmxlX2d0X2lycShkZXZfcHJpdiwgZW5naW5lLT5p cnFfZW5hYmxlX21hc2spOwo+ICAgCX0KPiAgIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZf cHJpdi0+aXJxX2xvY2ssIGZsYWdzKTsKPiAgIAo+ICsJLyogS2VlcCB0aGUgZGV2aWNlIGF3YWtl IHRvIHNhdmUgZXhwZW5zaXZlIENQVSBjeWNsZXMgd2hlbgo+ICsJICogcmVhZGluZyB0aGUgcmVn aXN0ZXJzLgo+ICsJICovCj4gKwlnZW42X2d0X2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2LCBlbmdp bmUtPnBvd2VyX2RvbWFpbnMpOwo+ICAgCXJldHVybiB0cnVlOwo+ICAgfQo+ICAgCj4gICBzdGF0 aWMgdm9pZAo+IC1nZW42X3JpbmdfcHV0X2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5n KQo+ICtnZW42X2lycV9iYXJyaWVyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAr ewo+ICsJLyogdy9hIGZvciBsYXggc2VyaWFsaXNhdGlvbiBvZiBHUFUgd3JpdGVzIHdpdGggSVJR cyAqLwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1 Owo+ICsJKHZvaWQpSTkxNV9SRUFEKFJJTkdfQUNUSEQoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQKPiArZ2VuNl9pcnFfcHV0KHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ ICAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gICAKPiArCWdlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQo ZGV2X3ByaXYsIGVuZ2luZS0+cG93ZXJfZG9tYWlucyk7Cj4gKwo+ICAgCXNwaW5fbG9ja19pcnFz YXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGZsYWdzKTsKPiAtCWlmICgtLXJpbmctPmlycV9yZWZj b3VudCA9PSAwKSB7Cj4gLQkJaWYgKEhBU19MM19EUEYoZGV2KSAmJiByaW5nLT5pZCA9PSBSQ1Mp Cj4gLQkJCUk5MTVfV1JJVEVfSU1SKHJpbmcsIH5HVF9QQVJJVFlfRVJST1IoZGV2KSk7Cj4gLQkJ ZWxzZQo+IC0JCQlJOTE1X1dSSVRFX0lNUihyaW5nLCB+MCk7Cj4gLQkJZ2VuNV9kaXNhYmxlX2d0 X2lycShkZXZfcHJpdiwgcmluZy0+aXJxX2VuYWJsZV9tYXNrKTsKPiArCWlmICgtLWVuZ2luZS0+ aXJxX3JlZmNvdW50ID09IDApIHsKPiArCQlJOTE1X1dSSVRFX0lNUihlbmdpbmUsIH5lbmdpbmUt PmlycV9rZWVwX21hc2spOwo+ICsJCWdlbjVfZGlzYWJsZV9ndF9pcnEoZGV2X3ByaXYsIGVuZ2lu ZS0+aXJxX2VuYWJsZV9tYXNrKTsKPiAgIAl9Cj4gICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZGV2X3ByaXYtPmlycV9sb2NrLCBmbGFncyk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBib29sCj4g LWhzd192ZWJveF9nZXRfaXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK2hzd192 ZWJveF9pcnFfZ2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAtCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ICAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Cj4gICAKPiAtCWlmICghZGV2LT5pcnFfZW5hYmxlZCkKPiArCWlmICghZGV2X3ByaXYtPmRldi0+ aXJxX2VuYWJsZWQpCj4gICAJCXJldHVybiBmYWxzZTsKPiAgIAo+ICsJZ2VuNl9ndF9mb3JjZV93 YWtlX2dldChkZXZfcHJpdiwgZW5naW5lLT5wb3dlcl9kb21haW5zKTsKPiArCj4gICAJc3Bpbl9s b2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgZmxhZ3MpOwo+IC0JaWYgKHJpbmctPmly cV9yZWZjb3VudCsrID09IDApIHsKPiAtCQlJOTE1X1dSSVRFX0lNUihyaW5nLCB+cmluZy0+aXJx X2VuYWJsZV9tYXNrKTsKPiAtCQlnZW42X2VuYWJsZV9wbV9pcnEoZGV2X3ByaXYsIHJpbmctPmly cV9lbmFibGVfbWFzayk7Cj4gKwlpZiAoZW5naW5lLT5pcnFfcmVmY291bnQrKyA9PSAwKSB7Cj4g KwkJSTkxNV9XUklURV9JTVIoZW5naW5lLAo+ICsJCQkgICAgICAgfihlbmdpbmUtPmlycV9lbmFi bGVfbWFzayB8Cj4gKwkJCQkgZW5naW5lLT5pcnFfa2VlcF9tYXNrKSk7Cj4gKwkJZ2VuNl9lbmFi bGVfcG1faXJxKGRldl9wcml2LCBlbmdpbmUtPmlycV9lbmFibGVfbWFzayk7Cj4gICAJfQo+ICAg CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgZmxhZ3MpOwo+ICAg Cj4gQEAgLTE0NTIsNDMgKzEzNDcsMzYgQEAgaHN3X3ZlYm94X2dldF9pcnEoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZykKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQKPiAtaHN3X3ZlYm94 X3B1dF9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAraHN3X3ZlYm94X2lycV9w dXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+IC0Jc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IHJpbmctPmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gICAJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAgIAo+IC0J aWYgKCFkZXYtPmlycV9lbmFibGVkKQo+IC0JCXJldHVybjsKPiAtCj4gICAJc3Bpbl9sb2NrX2ly cXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgZmxhZ3MpOwo+IC0JaWYgKC0tcmluZy0+aXJxX3Jl ZmNvdW50ID09IDApIHsKPiAtCQlJOTE1X1dSSVRFX0lNUihyaW5nLCB+MCk7Cj4gLQkJZ2VuNl9k aXNhYmxlX3BtX2lycShkZXZfcHJpdiwgcmluZy0+aXJxX2VuYWJsZV9tYXNrKTsKPiArCWlmICgt LWVuZ2luZS0+aXJxX3JlZmNvdW50ID09IDApIHsKPiArCQlJOTE1X1dSSVRFX0lNUihlbmdpbmUs IH5lbmdpbmUtPmlycV9rZWVwX21hc2spOwo+ICsJCWdlbjZfZGlzYWJsZV9wbV9pcnEoZGV2X3By aXYsIGVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrKTsKPiAgIAl9Cj4gICAJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBmbGFncyk7Cj4gKwo+ICsJZ2VuNl9ndF9mb3Jj ZV93YWtlX3B1dChkZXZfcHJpdiwgZW5naW5lLT5wb3dlcl9kb21haW5zKTsKPiAgIH0KPiAgIAo+ ICAgc3RhdGljIGJvb2wKPiAtZ2VuOF9yaW5nX2dldF9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqcmluZykKPiArZ2VuOF9pcnFfZ2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiAgIHsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ICAgCXVuc2lnbmVk IGxvbmcgZmxhZ3M7Cj4gICAKPiAtCWlmICghZGV2LT5pcnFfZW5hYmxlZCkKPiArCWlmICghZGV2 X3ByaXYtPmRldi0+aXJxX2VuYWJsZWQpCj4gICAJCXJldHVybiBmYWxzZTsKPiAgIAo+ICAgCXNw aW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGZsYWdzKTsKPiAtCWlmIChyaW5n LT5pcnFfcmVmY291bnQrKyA9PSAwKSB7Cj4gLQkJaWYgKEhBU19MM19EUEYoZGV2KSAmJiByaW5n LT5pZCA9PSBSQ1MpIHsKPiAtCQkJSTkxNV9XUklURV9JTVIocmluZywKPiAtCQkJCSAgICAgICB+ KHJpbmctPmlycV9lbmFibGVfbWFzayB8Cj4gLQkJCQkJIEdUX1JFTkRFUl9MM19QQVJJVFlfRVJS T1JfSU5URVJSVVBUKSk7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJSTkxNV9XUklURV9JTVIocmluZywg fnJpbmctPmlycV9lbmFibGVfbWFzayk7Cj4gLQkJfQo+IC0JCVBPU1RJTkdfUkVBRChSSU5HX0lN UihyaW5nLT5tbWlvX2Jhc2UpKTsKPiArCWlmIChlbmdpbmUtPmlycV9yZWZjb3VudCsrID09IDAp IHsKPiArCQlJOTE1X1dSSVRFX0lNUihlbmdpbmUsCj4gKwkJCSAgICAgICB+KGVuZ2luZS0+aXJx X2VuYWJsZV9tYXNrIHwKPiArCQkJCSBlbmdpbmUtPmlycV9rZWVwX21hc2spKTsKPiArCQlQT1NU SU5HX1JFQUQoUklOR19JTVIoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiAgIAl9Cj4gICAJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBmbGFncyk7Cj4gICAKPiBAQCAt MTQ5NiwzNSArMTM4NCwyOSBAQCBnZW44X3JpbmdfZ2V0X2lycShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nKQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZAo+IC1nZW44X3JpbmdfcHV0X2ly cShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICtnZW44X2lycV9wdXQoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IHJpbmctPmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdp bmUtPmk5MTU7Cj4gICAJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAgIAo+ICAgCXNwaW5fbG9ja19p cnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGZsYWdzKTsKPiAtCWlmICgtLXJpbmctPmlycV9y ZWZjb3VudCA9PSAwKSB7Cj4gLQkJaWYgKEhBU19MM19EUEYoZGV2KSAmJiByaW5nLT5pZCA9PSBS Q1MpIHsKPiAtCQkJSTkxNV9XUklURV9JTVIocmluZywKPiAtCQkJCSAgICAgICB+R1RfUkVOREVS X0wzX1BBUklUWV9FUlJPUl9JTlRFUlJVUFQpOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCUk5MTVfV1JJ VEVfSU1SKHJpbmcsIH4wKTsKPiAtCQl9Cj4gLQkJUE9TVElOR19SRUFEKFJJTkdfSU1SKHJpbmct Pm1taW9fYmFzZSkpOwo+ICsJaWYgKC0tZW5naW5lLT5pcnFfcmVmY291bnQgPT0gMCkgewo+ICsJ CUk5MTVfV1JJVEVfSU1SKGVuZ2luZSwgfmVuZ2luZS0+aXJxX2tlZXBfbWFzayk7Cj4gKwkJUE9T VElOR19SRUFEKFJJTkdfSU1SKGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4gICAJfQo+ICAgCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgZmxhZ3MpOwo+ICAgfQo+ICAg Cj4gICBzdGF0aWMgaW50Cj4gLWk5NjVfZGlzcGF0Y2hfZXhlY2J1ZmZlcihzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nLAo+IC0JCQkgdTY0IG9mZnNldCwgdTMyIGxlbmd0aCwKPiAtCQkJIHVu c2lnbmVkIGZsYWdzKQo+ICtpOTY1X2VtaXRfYmF0Y2hidWZmZXIoc3RydWN0IGk5MTVfZ2VtX3Jl cXVlc3QgKnJxLAo+ICsJCSAgICAgIHU2NCBvZmZzZXQsIHUzMiBsZW5ndGgsCj4gKwkJICAgICAg dW5zaWduZWQgZmxhZ3MpCj4gICB7Cj4gLQlpbnQgcmV0Owo+ICsJc3RydWN0IGludGVsX3Jpbmdi dWZmZXIgKnJpbmc7Cj4gICAKPiAtCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmluZywgMik7Cj4g LQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlyaW5nID0gaW50ZWxfcmluZ19iZWdpbihy cSwgMik7Cj4gKwlpZiAoSVNfRVJSKHJpbmcpKQo+ICsJCXJldHVybiBQVFJfRVJSKHJpbmcpOwo+ ICAgCj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsCj4gICAJCQlNSV9CQVRDSF9CVUZGRVJfU1RB UlQgfAo+IEBAIC0xNTM5LDMxICsxNDIxLDMxIEBAIGk5NjVfZGlzcGF0Y2hfZXhlY2J1ZmZlcihz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICAgLyogSnVzdCB1c2Vyc3BhY2UgQUJJIGNv bnZlbnRpb24gdG8gbGltaXQgdGhlIHdhIGJhdGNoIGJvIHRvIGEgcmVzb25hYmxlIHNpemUgKi8K PiAgICNkZWZpbmUgSTgzMF9CQVRDSF9MSU1JVCAoMjU2KjEwMjQpCj4gICBzdGF0aWMgaW50Cj4g LWk4MzBfZGlzcGF0Y2hfZXhlY2J1ZmZlcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ IC0JCQkJdTY0IG9mZnNldCwgdTMyIGxlbiwKPiAtCQkJCXVuc2lnbmVkIGZsYWdzKQo+ICtpODMw X2VtaXRfYmF0Y2hidWZmZXIoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxLAo+ICsJCSAgICAg IHU2NCBvZmZzZXQsIHUzMiBsZW4sCj4gKwkJICAgICAgdW5zaWduZWQgZmxhZ3MpCj4gICB7Cj4g LQlpbnQgcmV0Owo+ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmc7Cj4gICAKPiAgIAlp ZiAoZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1BJTk5FRCkgewo+IC0JCXJldCA9IGludGVsX3Jpbmdf YmVnaW4ocmluZywgNCk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiArCQlyaW5n ID0gaW50ZWxfcmluZ19iZWdpbihycSwgMyk7Cj4gKwkJaWYgKElTX0VSUihyaW5nKSkKPiArCQkJ cmV0dXJuIFBUUl9FUlIocmluZyk7Cj4gICAKPiAgIAkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1J X0JBVENIX0JVRkZFUik7Cj4gICAJCWludGVsX3JpbmdfZW1pdChyaW5nLCBvZmZzZXQgfCAoZmxh Z3MgJiBJOTE1X0RJU1BBVENIX1NFQ1VSRSA/IDAgOiBNSV9CQVRDSF9OT05fU0VDVVJFKSk7Cj4g ICAJCWludGVsX3JpbmdfZW1pdChyaW5nLCBvZmZzZXQgKyBsZW4gLSA4KTsKPiAtCQlpbnRlbF9y aW5nX2VtaXQocmluZywgTUlfTk9PUCk7Cj4gICAJCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsK PiAgIAl9IGVsc2Ugewo+IC0JCXUzMiBjc19vZmZzZXQgPSByaW5nLT5zY3JhdGNoLmd0dF9vZmZz ZXQ7Cj4gKwkJdTMyIGNzX29mZnNldCA9IHJxLT5lbmdpbmUtPnNjcmF0Y2guZ3R0X29mZnNldDsK PiAgIAo+ICAgCQlpZiAobGVuID4gSTgzMF9CQVRDSF9MSU1JVCkKPiAgIAkJCXJldHVybiAtRU5P U1BDOwo+ICAgCj4gLQkJcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCA5KzMpOwo+IC0JCWlm IChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gKwkJcmluZyA9IGludGVsX3JpbmdfYmVnaW4ocnEs IDkrMyk7Cj4gKwkJaWYgKElTX0VSUihyaW5nKSkKPiArCQkJcmV0dXJuIFBUUl9FUlIocmluZyk7 Cj4gKwo+ICAgCQkvKiBCbGl0IHRoZSBiYXRjaCAod2hpY2ggaGFzIG5vdyBhbGwgcmVsb2NzIGFw cGxpZWQpIHRvIHRoZSBzdGFibGUgYmF0Y2gKPiAgIAkJICogc2NyYXRjaCBibyBhcmVhIChzbyB0 aGF0IHRoZSBDUyBuZXZlciBzdHVtYmxlcyBvdmVyIGl0cyB0bGIKPiAgIAkJICogaW52YWxpZGF0 aW9uIGJ1ZykgLi4uICovCj4gQEAgLTE1OTAsMTUgKzE0NzIsMTUgQEAgaTgzMF9kaXNwYXRjaF9l eGVjYnVmZmVyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gICB9Cj4gICAKPiAgIHN0 YXRpYyBpbnQKPiAtaTkxNV9kaXNwYXRjaF9leGVjYnVmZmVyKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcsCj4gLQkJCSB1NjQgb2Zmc2V0LCB1MzIgbGVuLAo+IC0JCQkgdW5zaWduZWQgZmxh Z3MpCj4gK2k5MTVfZW1pdF9iYXRjaGJ1ZmZlcihzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEs Cj4gKwkJICAgICAgdTY0IG9mZnNldCwgdTMyIGxlbiwKPiArCQkgICAgICB1bnNpZ25lZCBmbGFn cykKPiAgIHsKPiAtCWludCByZXQ7Cj4gKwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZzsK PiAgIAo+IC0JcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCAyKTsKPiAtCWlmIChyZXQpCj4g LQkJcmV0dXJuIHJldDsKPiArCXJpbmcgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCAyKTsKPiArCWlm IChJU19FUlIocmluZykpCj4gKwkJcmV0dXJuIFBUUl9FUlIocmluZyk7Cj4gICAKPiAgIAlpbnRl bF9yaW5nX2VtaXQocmluZywgTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgTUlfQkFUQ0hfR1RUKTsK PiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywgb2Zmc2V0IHwgKGZsYWdzICYgSTkxNV9ESVNQQVRD SF9TRUNVUkUgPyAwIDogTUlfQkFUQ0hfTk9OX1NFQ1VSRSkpOwo+IEBAIC0xNjA3LDQ5MiArMTQ4 OSwyMzIgQEAgaTkxNV9kaXNwYXRjaF9leGVjYnVmZmVyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmcsCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgY2xlYW51cF9z dGF0dXNfcGFnZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+IC17Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+IC0KPiAtCW9iaiA9IHJpbmctPnN0YXR1c19wYWdl Lm9iajsKPiAtCWlmIChvYmogPT0gTlVMTCkKPiAtCQlyZXR1cm47Cj4gLQo+IC0Ja3VubWFwKHNn X3BhZ2Uob2JqLT5wYWdlcy0+c2dsKSk7Cj4gLQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihv YmopOwo+IC0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4gLQlyaW5n LT5zdGF0dXNfcGFnZS5vYmogPSBOVUxMOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGluaXRfc3Rh dHVzX3BhZ2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArc3RhdGljIGludCBzZXR1 cF9zdGF0dXNfcGFnZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICB7Cj4gICAJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiArCXVuc2lnbmVkIGZsYWdzOwo+ICsJ aW50IHJldDsKPiAgIAo+IC0JaWYgKChvYmogPSByaW5nLT5zdGF0dXNfcGFnZS5vYmopID09IE5V TEwpIHsKPiAtCQl1bnNpZ25lZCBmbGFnczsKPiAtCQlpbnQgcmV0Owo+ICsJb2JqID0gaTkxNV9n ZW1fYWxsb2Nfb2JqZWN0KGVuZ2luZS0+aTkxNS0+ZGV2LCA0MDk2KTsKPiArCWlmIChvYmogPT0g TlVMTCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIHN0YXR1cyBwYWdlXG4i KTsKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiAgIAo+IC0JCW9iaiA9IGk5MTVfZ2VtX2Fs bG9jX29iamVjdChyaW5nLT5kZXYsIDQwOTYpOwo+IC0JCWlmIChvYmogPT0gTlVMTCkgewo+IC0J CQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBzdGF0dXMgcGFnZVxuIik7Cj4gLQkJCXJl dHVybiAtRU5PTUVNOwo+IC0JCX0KPiArCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfY2FjaGVf bGV2ZWwob2JqLCBJOTE1X0NBQ0hFX0xMQyk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX3Vu cmVmOwo+ICAgCj4gLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9sZXZlbChvYmos IEk5MTVfQ0FDSEVfTExDKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlnb3RvIGVycl91bnJlZjsKPiAt Cj4gLQkJZmxhZ3MgPSAwOwo+IC0JCWlmICghSEFTX0xMQyhyaW5nLT5kZXYpKQo+IC0JCQkvKiBP biBnMzMsIHdlIGNhbm5vdCBwbGFjZSBIV1MgYWJvdmUgMjU2TWlCLCBzbwo+IC0JCQkgKiByZXN0 cmljdCBpdHMgcGlubmluZyB0byB0aGUgbG93IG1hcHBhYmxlIGFyZW5hLgo+IC0JCQkgKiBUaG91 Z2ggdGhpcyByZXN0cmljdGlvbiBpcyBub3QgZG9jdW1lbnRlZCBmb3IKPiAtCQkJICogZ2VuNCwg Z2VuNSwgb3IgYnl0LCB0aGV5IGFsc28gYmVoYXZlIHNpbWlsYXJseQo+IC0JCQkgKiBhbmQgaGFu ZyBpZiB0aGUgSFdTIGlzIHBsYWNlZCBhdCB0aGUgdG9wIG9mIHRoZQo+IC0JCQkgKiBHVFQuIFRv IGdlbmVyYWxpc2UsIGl0IGFwcGVhcnMgdGhhdCBhbGwgIWxsYwo+IC0JCQkgKiBwbGF0Zm9ybXMg aGF2ZSBpc3N1ZXMgd2l0aCB1cyBwbGFjaW5nIHRoZSBIV1MKPiAtCQkJICogYWJvdmUgdGhlIG1h cHBhYmxlIHJlZ2lvbiAoZXZlbiB0aG91Z2ggd2UgbmV2ZXIKPiAtCQkJICogYWN0dWFseSBtYXAg aXQpLgo+IC0JCQkgKi8KPiAtCQkJZmxhZ3MgfD0gUElOX01BUFBBQkxFOwo+IC0JCXJldCA9IGk5 MTVfZ2VtX29ial9nZ3R0X3BpbihvYmosIDQwOTYsIGZsYWdzKTsKPiAtCQlpZiAocmV0KSB7Cj4g KwlmbGFncyA9IDA7Cj4gKwlpZiAoIUhBU19MTEMoZW5naW5lLT5pOTE1KSkKPiArCQkvKiBPbiBn MzMsIHdlIGNhbm5vdCBwbGFjZSBIV1MgYWJvdmUgMjU2TWlCLCBzbwo+ICsJCSAqIHJlc3RyaWN0 IGl0cyBwaW5uaW5nIHRvIHRoZSBsb3cgbWFwcGFibGUgYXJlbmEuCj4gKwkJICogVGhvdWdoIHRo aXMgcmVzdHJpY3Rpb24gaXMgbm90IGRvY3VtZW50ZWQgZm9yCj4gKwkJICogZ2VuNCwgZ2VuNSwg b3IgYnl0LCB0aGV5IGFsc28gYmVoYXZlIHNpbWlsYXJseQo+ICsJCSAqIGFuZCBoYW5nIGlmIHRo ZSBIV1MgaXMgcGxhY2VkIGF0IHRoZSB0b3Agb2YgdGhlCj4gKwkJICogR1RULiBUbyBnZW5lcmFs aXNlLCBpdCBhcHBlYXJzIHRoYXQgYWxsICFsbGMKPiArCQkgKiBwbGF0Zm9ybXMgaGF2ZSBpc3N1 ZXMgd2l0aCB1cyBwbGFjaW5nIHRoZSBIV1MKPiArCQkgKiBhYm92ZSB0aGUgbWFwcGFibGUgcmVn aW9uIChldmVuIHRob3VnaCB3ZSBuZXZlcgo+ICsJCSAqIGFjdHVhbHkgbWFwIGl0KS4KPiArCQkg Ki8KPiArCQlmbGFncyB8PSBQSU5fTUFQUEFCTEU7Cj4gKwlyZXQgPSBpOTE1X2dlbV9vYmpfZ2d0 dF9waW4ob2JqLCA0MDk2LCBmbGFncyk7Cj4gKwlpZiAocmV0KSB7Cj4gICBlcnJfdW5yZWY6Cj4g LQkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwo+IC0JCQlyZXR1cm4g cmV0Owo+IC0JCX0KPiAtCj4gLQkJcmluZy0+c3RhdHVzX3BhZ2Uub2JqID0gb2JqOwo+ICsJCWRy bV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwo+ICsJCXJldHVybiByZXQ7Cj4g ICAJfQo+ICAgCj4gLQlyaW5nLT5zdGF0dXNfcGFnZS5nZnhfYWRkciA9IGk5MTVfZ2VtX29ial9n Z3R0X29mZnNldChvYmopOwo+IC0JcmluZy0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyID0ga21hcChz Z19wYWdlKG9iai0+cGFnZXMtPnNnbCkpOwo+IC0JbWVtc2V0KHJpbmctPnN0YXR1c19wYWdlLnBh Z2VfYWRkciwgMCwgUEFHRV9TSVpFKTsKPiArCWVuZ2luZS0+c3RhdHVzX3BhZ2Uub2JqID0gb2Jq Owo+ICAgCj4gLQlEUk1fREVCVUdfRFJJVkVSKCIlcyBod3Mgb2Zmc2V0OiAweCUwOHhcbiIsCj4g LQkJCXJpbmctPm5hbWUsIHJpbmctPnN0YXR1c19wYWdlLmdmeF9hZGRyKTsKPiArCWVuZ2luZS0+ c3RhdHVzX3BhZ2UuZ2Z4X2FkZHIgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKTsKPiAr CWVuZ2luZS0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyID0ga21hcChzZ19wYWdlKG9iai0+cGFnZXMt PnNnbCkpOwo+ICsJbWVtc2V0KGVuZ2luZS0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyLCAwLCBQQUdF X1NJWkUpOwo+ICAgCj4gKwlEUk1fREVCVUdfRFJJVkVSKCIlcyBod3Mgb2Zmc2V0OiAweCUwOHhc biIsCj4gKwkJCWVuZ2luZS0+bmFtZSwgZW5naW5lLT5zdGF0dXNfcGFnZS5nZnhfYWRkcik7Cj4g ICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludCBpbml0X3BoeXNfc3RhdHVzX3Bh Z2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArc3RhdGljIGludCBzZXR1cF9waHlz X3N0YXR1c19wYWdlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAtCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGVuZ2luZS0+aTkxNTsKPiAgIAo+ IC0JaWYgKCFkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCkgewo+IC0JCWRldl9wcml2LT5zdGF0 dXNfcGFnZV9kbWFoID0KPiAtCQkJZHJtX3BjaV9hbGxvYyhyaW5nLT5kZXYsIFBBR0VfU0laRSwg UEFHRV9TSVpFKTsKPiAtCQlpZiAoIWRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKQo+IC0JCQly ZXR1cm4gLUVOT01FTTsKPiAtCX0KPiArCWk5MTUtPnN0YXR1c19wYWdlX2RtYWggPQo+ICsJCWRy bV9wY2lfYWxsb2MoaTkxNS0+ZGV2LCBQQUdFX1NJWkUsIFBBR0VfU0laRSk7Cj4gKwlpZiAoIWk5 MTUtPnN0YXR1c19wYWdlX2RtYWgpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gICAKPiAtCXJpbmct PnN0YXR1c19wYWdlLnBhZ2VfYWRkciA9IGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT52YWRk cjsKPiAtCW1lbXNldChyaW5nLT5zdGF0dXNfcGFnZS5wYWdlX2FkZHIsIDAsIFBBR0VfU0laRSk7 Cj4gKwllbmdpbmUtPnN0YXR1c19wYWdlLnBhZ2VfYWRkciA9IGk5MTUtPnN0YXR1c19wYWdlX2Rt YWgtPnZhZGRyOwo+ICsJbWVtc2V0KGVuZ2luZS0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyLCAwLCBQ QUdFX1NJWkUpOwo+ICAgCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtdm9pZCBpbnRlbF9k ZXN0cm95X3JpbmdidWZmZXJfb2JqKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmKQo+ ICt2b2lkIGludGVsX3JpbmdfZnJlZShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZykKPiAg IHsKPiAtCWlmICghcmluZ2J1Zi0+b2JqKQo+IC0JCXJldHVybjsKPiArCWlmIChyaW5nLT5vYmop IHsKPiArCQlpb3VubWFwKHJpbmctPnZpcnR1YWxfc3RhcnQpOwo+ICsJCWk5MTVfZ2VtX29iamVj dF9nZ3R0X3VucGluKHJpbmctPm9iaik7Cj4gKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uo JnJpbmctPm9iai0+YmFzZSk7Cj4gKwl9Cj4gICAKPiAtCWlvdW5tYXAocmluZ2J1Zi0+dmlydHVh bF9zdGFydCk7Cj4gLQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihyaW5nYnVmLT5vYmopOwo+ IC0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJnJpbmdidWYtPm9iai0+YmFzZSk7Cj4gLQly aW5nYnVmLT5vYmogPSBOVUxMOwo+ICsJbGlzdF9kZWwoJnJpbmctPmVuZ2luZV9saXN0KTsKPiAr CWtmcmVlKHJpbmcpOwo+ICAgfQo+ICAgCj4gLWludCBpbnRlbF9hbGxvY19yaW5nYnVmZmVyX29i aihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IC0JCQkgICAgICAgc3RydWN0IGludGVsX3Jpbmdi dWZmZXIgKnJpbmdidWYpCj4gK3N0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICoKPiAraW50ZWxfZW5n aW5lX2FsbG9jX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQlzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+ICsJCQlpbnQgc2l6ZSkKPiAgIHsKPiAtCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gZW5naW5lLT5pOTE1Owo+ICsJc3RydWN0IGludGVsX3Jpbmdi dWZmZXIgKnJpbmc7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiAgIAlp bnQgcmV0Owo+ICAgCj4gLQlpZiAocmluZ2J1Zi0+b2JqKQo+IC0JCXJldHVybiAwOwo+ICsJRFJN X0RFQlVHKCJjcmVhdGluZyByaW5nYnVmZmVyIGZvciAlcywgc2l6ZSAlZFxuIiwgZW5naW5lLT5u YW1lLCBzaXplKTsKPiArCj4gKwlpZiAoV0FSTl9PTighaXNfcG93ZXJfb2ZfMihzaXplKSkpCj4g KwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwo+ICsJcmluZyA9IGt6YWxsb2Moc2l6ZW9m KCpyaW5nKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAocmluZyA9PSBOVUxMKQo+ICsJCXJldHVybiBF UlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCXJpbmctPmVuZ2luZSA9IGVuZ2luZTsKPiArCXJpbmct PmN0eCA9IGN0eDsKPiAgIAo+IC0Jb2JqID0gTlVMTDsKPiAtCWlmICghSEFTX0xMQyhkZXYpKQo+ IC0JCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc3RvbGVuKGRldiwgcmluZ2J1Zi0+c2l6 ZSk7Cj4gKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3N0b2xlbihpOTE1LT5kZXYsIHNp emUpOwo+ICAgCWlmIChvYmogPT0gTlVMTCkKPiAtCQlvYmogPSBpOTE1X2dlbV9hbGxvY19vYmpl Y3QoZGV2LCByaW5nYnVmLT5zaXplKTsKPiArCQlvYmogPSBpOTE1X2dlbV9hbGxvY19vYmplY3Qo aTkxNS0+ZGV2LCBzaXplKTsKPiAgIAlpZiAob2JqID09IE5VTEwpCj4gLQkJcmV0dXJuIC1FTk9N RU07Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gICAKPiAgIAkvKiBtYXJrIHJpbmcg YnVmZmVycyBhcyByZWFkLW9ubHkgZnJvbSBHUFUgc2lkZSBieSBkZWZhdWx0ICovCj4gICAJb2Jq LT5ndF9ybyA9IDE7Cj4gICAKPiAgIAlyZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9waW4ob2JqLCBQ QUdFX1NJWkUsIFBJTl9NQVBQQUJMRSk7Cj4gLQlpZiAocmV0KQo+ICsJaWYgKHJldCkgewo+ICsJ CURSTV9FUlJPUigiZmFpbGVkIHBpbiByaW5nYnVmZmVyIGludG8gR0dUVFxuIik7Cj4gICAJCWdv dG8gZXJyX3VucmVmOwo+ICsJfQo+ICAgCj4gICAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90 b19ndHRfZG9tYWluKG9iaiwgdHJ1ZSk7Cj4gLQlpZiAocmV0KQo+ICsJaWYgKHJldCkgewo+ICsJ CURSTV9FUlJPUigiZmFpbGVkIG1hcmsgcmluZ2J1ZmZlciBmb3IgR1RUIHdyaXRlc1xuIik7Cj4g ICAJCWdvdG8gZXJyX3VucGluOwo+ICsJfQo+ICAgCj4gLQlyaW5nYnVmLT52aXJ0dWFsX3N0YXJ0 ID0KPiAtCQlpb3JlbWFwX3djKGRldl9wcml2LT5ndHQubWFwcGFibGVfYmFzZSArIGk5MTVfZ2Vt X29ial9nZ3R0X29mZnNldChvYmopLAo+IC0JCQkJcmluZ2J1Zi0+c2l6ZSk7Cj4gLQlpZiAocmlu Z2J1Zi0+dmlydHVhbF9zdGFydCA9PSBOVUxMKSB7Cj4gKwlyaW5nLT52aXJ0dWFsX3N0YXJ0ID0K PiArCQlpb3JlbWFwX3djKGk5MTUtPmd0dC5tYXBwYWJsZV9iYXNlICsgaTkxNV9nZW1fb2JqX2dn dHRfb2Zmc2V0KG9iaiksCj4gKwkJCSAgIHNpemUpOwo+ICsJaWYgKHJpbmctPnZpcnR1YWxfc3Rh cnQgPT0gTlVMTCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCByaW5nYnVmZmVyIHRo cm91Z2ggR1RUXG4iKTsKPiAgIAkJcmV0ID0gLUVJTlZBTDsKPiAgIAkJZ290byBlcnJfdW5waW47 Cj4gICAJfQo+ICAgCj4gLQlyaW5nYnVmLT5vYmogPSBvYmo7Cj4gLQlyZXR1cm4gMDsKPiAtCj4g LWVycl91bnBpbjoKPiAtCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKG9iaik7Cj4gLWVycl91 bnJlZjoKPiAtCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwo+IC0JcmV0 dXJuIHJldDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBpbnRlbF9pbml0X3JpbmdfYnVmZmVyKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gLQkJCQkgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmID0gcmluZy0+YnVm ZmVyOwo+IC0JaW50IHJldDsKPiAtCj4gLQlpZiAocmluZ2J1ZiA9PSBOVUxMKSB7Cj4gLQkJcmlu Z2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpyaW5nYnVmKSwgR0ZQX0tFUk5FTCk7Cj4gLQkJaWYgKCFy aW5nYnVmKQo+IC0JCQlyZXR1cm4gLUVOT01FTTsKPiAtCQlyaW5nLT5idWZmZXIgPSByaW5nYnVm Owo+IC0JfQo+IC0KPiAtCXJpbmctPmRldiA9IGRldjsKPiAtCUlOSVRfTElTVF9IRUFEKCZyaW5n LT5hY3RpdmVfbGlzdCk7Cj4gLQlJTklUX0xJU1RfSEVBRCgmcmluZy0+cmVxdWVzdF9saXN0KTsK PiAtCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5leGVjbGlzdF9xdWV1ZSk7Cj4gLQlyaW5nYnVmLT5z aXplID0gMzIgKiBQQUdFX1NJWkU7Cj4gLQlyaW5nYnVmLT5yaW5nID0gcmluZzsKPiAtCW1lbXNl dChyaW5nLT5zZW1hcGhvcmUuc3luY19zZXFubywgMCwgc2l6ZW9mKHJpbmctPnNlbWFwaG9yZS5z eW5jX3NlcW5vKSk7Cj4gLQo+IC0JaW5pdF93YWl0cXVldWVfaGVhZCgmcmluZy0+aXJxX3F1ZXVl KTsKPiAtCj4gLQlpZiAoSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSkgewo+IC0JCXJldCA9IGluaXRf c3RhdHVzX3BhZ2UocmluZyk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJZ290byBlcnJvcjsKPiAtCX0g ZWxzZSB7Cj4gLQkJQlVHX09OKHJpbmctPmlkICE9IFJDUyk7Cj4gLQkJcmV0ID0gaW5pdF9waHlz X3N0YXR1c19wYWdlKHJpbmcpOwo+IC0JCWlmIChyZXQpCj4gLQkJCWdvdG8gZXJyb3I7Cj4gLQl9 Cj4gLQo+IC0JcmV0ID0gaW50ZWxfYWxsb2NfcmluZ2J1ZmZlcl9vYmooZGV2LCByaW5nYnVmKTsK PiAtCWlmIChyZXQpIHsKPiAtCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSByaW5nYnVm ZmVyICVzOiAlZFxuIiwgcmluZy0+bmFtZSwgcmV0KTsKPiAtCQlnb3RvIGVycm9yOwo+IC0JfQo+ ICsJcmluZy0+b2JqID0gb2JqOwo+ICsJcmluZy0+c2l6ZSA9IHNpemU7Cj4gICAKPiAgIAkvKiBX b3JrYXJvdW5kIGFuIGVycmF0dW0gb24gdGhlIGk4MzAgd2hpY2ggY2F1c2VzIGEgaGFuZyBpZgo+ ICAgCSAqIHRoZSBUQUlMIHBvaW50ZXIgcG9pbnRzIHRvIHdpdGhpbiB0aGUgbGFzdCAyIGNhY2hl bGluZXMKPiAgIAkgKiBvZiB0aGUgYnVmZmVyLgo+ICAgCSAqLwo+IC0JcmluZ2J1Zi0+ZWZmZWN0 aXZlX3NpemUgPSByaW5nYnVmLT5zaXplOwo+IC0JaWYgKElTX0k4MzAoZGV2KSB8fCBJU184NDVH KGRldikpCj4gLQkJcmluZ2J1Zi0+ZWZmZWN0aXZlX3NpemUgLT0gMiAqIENBQ0hFTElORV9CWVRF UzsKPiArCXJpbmctPmVmZmVjdGl2ZV9zaXplID0gc2l6ZTsKPiArCWlmIChJU19JODMwKGk5MTUp IHx8IElTXzg0NUcoaTkxNSkpCj4gKwkJcmluZy0+ZWZmZWN0aXZlX3NpemUgLT0gMiAqIENBQ0hF TElORV9CWVRFUzsKPiAgIAo+IC0JcmV0ID0gaTkxNV9jbWRfcGFyc2VyX2luaXRfcmluZyhyaW5n KTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBlcnJvcjsKPiArCXJpbmctPnNwYWNlID0gaW50ZWxf cmluZ19zcGFjZShyaW5nKTsKPiArCXJpbmctPnJldGlyZWRfaGVhZCA9IC0xOwo+ICAgCj4gLQly ZXQgPSByaW5nLT5pbml0KHJpbmcpOwo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIGVycm9yOwo+ICsJ SU5JVF9MSVNUX0hFQUQoJnJpbmctPnJlcXVlc3RzKTsKPiArCUlOSVRfTElTVF9IRUFEKCZyaW5n LT5icmVhZGNydW1icyk7Cj4gKwlsaXN0X2FkZF90YWlsKCZyaW5nLT5lbmdpbmVfbGlzdCwgJmVu Z2luZS0+cmluZ3MpOwo+ICAgCj4gLQlyZXR1cm4gMDsKPiArCXJldHVybiByaW5nOwo+ICAgCj4g LWVycm9yOgo+IC0Ja2ZyZWUocmluZ2J1Zik7Cj4gLQlyaW5nLT5idWZmZXIgPSBOVUxMOwo+IC0J cmV0dXJuIHJldDsKPiArZXJyX3VucGluOgo+ICsJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4o b2JqKTsKPiArZXJyX3VucmVmOgo+ICsJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+ YmFzZSk7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ ICtub3BfaXJxX2JhcnJpZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4g ICB9Cj4gICAKPiAtdm9pZCBpbnRlbF9jbGVhbnVwX3JpbmdfYnVmZmVyKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKnJpbmcpCj4gK3N0YXRpYyBpbnQgaW50ZWxfZW5naW5lX2luaXQoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1KQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShyaW5nLT5kZXYpOwo+IC0Jc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYgPSBy aW5nLT5idWZmZXI7Cj4gKwlpbnQgcmV0Owo+ICAgCj4gLQlpZiAoIWludGVsX3JpbmdfaW5pdGlh bGl6ZWQocmluZykpCj4gLQkJcmV0dXJuOwo+ICsJZW5naW5lLT5pOTE1ID0gaTkxNTsKPiAgIAo+ IC0JaW50ZWxfc3RvcF9yaW5nX2J1ZmZlcihyaW5nKTsKPiAtCVdBUk5fT04oIUlTX0dFTjIocmlu Zy0+ZGV2KSAmJiAoSTkxNV9SRUFEX01PREUocmluZykgJiBNT0RFX0lETEUpID09IDApOwo+ICsJ SU5JVF9MSVNUX0hFQUQoJmVuZ2luZS0+cmluZ3MpOwo+ICsJSU5JVF9MSVNUX0hFQUQoJmVuZ2lu ZS0+cmVhZF9saXN0KTsKPiArCUlOSVRfTElTVF9IRUFEKCZlbmdpbmUtPndyaXRlX2xpc3QpOwo+ ICsJSU5JVF9MSVNUX0hFQUQoJmVuZ2luZS0+cmVxdWVzdHMpOwo+ICsJSU5JVF9MSVNUX0hFQUQo JmVuZ2luZS0+cGVuZGluZyk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmZW5naW5lLT5zdWJtaXR0ZWQp Owo+ICAgCj4gLQlpbnRlbF9kZXN0cm95X3JpbmdidWZmZXJfb2JqKHJpbmdidWYpOwo+IC0Jcmlu Zy0+cHJlYWxsb2NhdGVkX2xhenlfcmVxdWVzdCA9IE5VTEw7Cj4gLQlyaW5nLT5vdXRzdGFuZGlu Z19sYXp5X3NlcW5vID0gMDsKPiArCXNwaW5fbG9ja19pbml0KCZlbmdpbmUtPmxvY2spOwo+ICsJ c3Bpbl9sb2NrX2luaXQoJmVuZ2luZS0+aXJxbG9jayk7Cj4gICAKPiAtCWlmIChyaW5nLT5jbGVh bnVwKQo+IC0JCXJpbmctPmNsZWFudXAocmluZyk7Cj4gKwllbmdpbmUtPnN1c3BlbmQgPSBlbmdp bmVfc3VzcGVuZDsKPiArCWVuZ2luZS0+cmVzdW1lID0gZW5naW5lX3Jlc3VtZTsKPiArCWVuZ2lu ZS0+Y2xlYW51cCA9IGVuZ2luZV9jbGVhbnVwOwo+ICAgCj4gLQljbGVhbnVwX3N0YXR1c19wYWdl KHJpbmcpOwo+ICsJZW5naW5lLT5nZXRfc2Vxbm8gPSByaW5nX2dldF9zZXFubzsKPiArCWVuZ2lu ZS0+c2V0X3NlcW5vID0gcmluZ19zZXRfc2Vxbm87Cj4gICAKPiAtCWk5MTVfY21kX3BhcnNlcl9m aW5pX3JpbmcocmluZyk7Cj4gKwllbmdpbmUtPmlycV9iYXJyaWVyID0gbm9wX2lycV9iYXJyaWVy Owo+ICAgCj4gLQlrZnJlZShyaW5nYnVmKTsKPiAtCXJpbmctPmJ1ZmZlciA9IE5VTEw7Cj4gLX0K PiArCWVuZ2luZS0+Z2V0X3JpbmcgPSBlbmdpbmVfZ2V0X3Jpbmc7Cj4gKwllbmdpbmUtPnB1dF9y aW5nID0gZW5naW5lX3B1dF9yaW5nOwo+ICAgCj4gLXN0YXRpYyBpbnQgaW50ZWxfcmluZ193YWl0 X3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgaW50IG4pCj4gLXsKPiAtCXN0 cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmID0gcmluZy0+YnVmZmVyOwo+IC0Jc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0Owo+IC0JdTMyIHNlcW5vID0gMDsKPiAtCWlu dCByZXQ7Cj4gKwllbmdpbmUtPnNlbWFwaG9yZS53YWl0ID0gTlVMTDsKPiAgIAo+IC0JaWYgKHJp bmdidWYtPmxhc3RfcmV0aXJlZF9oZWFkICE9IC0xKSB7Cj4gLQkJcmluZ2J1Zi0+aGVhZCA9IHJp bmdidWYtPmxhc3RfcmV0aXJlZF9oZWFkOwo+IC0JCXJpbmdidWYtPmxhc3RfcmV0aXJlZF9oZWFk ID0gLTE7Cj4gKwllbmdpbmUtPmFkZF9yZXF1ZXN0ID0gZW5naW5lX2FkZF9yZXF1ZXN0Owo+ICsJ ZW5naW5lLT53cml0ZV90YWlsID0gcmluZ193cml0ZV90YWlsOwo+ICsJZW5naW5lLT5pc19jb21w bGV0ZSA9IGVuZ2luZV9ycV9pc19jb21wbGV0ZTsKPiAgIAo+IC0JCXJpbmdidWYtPnNwYWNlID0g aW50ZWxfcmluZ19zcGFjZShyaW5nYnVmKTsKPiAtCQlpZiAocmluZ2J1Zi0+c3BhY2UgPj0gbikK PiAtCQkJcmV0dXJuIDA7Cj4gLQl9Cj4gKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlbmdpbmUtPmly cV9xdWV1ZSk7Cj4gICAKPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxdWVzdCwgJnJpbmctPnJl cXVlc3RfbGlzdCwgbGlzdCkgewo+IC0JCWlmIChfX2ludGVsX3Jpbmdfc3BhY2UocmVxdWVzdC0+ dGFpbCwgcmluZ2J1Zi0+dGFpbCwKPiAtCQkJCSAgICAgICByaW5nYnVmLT5zaXplKSA+PSBuKSB7 Cj4gLQkJCXNlcW5vID0gcmVxdWVzdC0+c2Vxbm87Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiArCWlm IChJOTE1X05FRURfR0ZYX0hXUyhpOTE1KSkgewo+ICsJCXJldCA9IHNldHVwX3N0YXR1c19wYWdl KGVuZ2luZSk7Cj4gKwl9IGVsc2Ugewo+ICsJCUJVR19PTihlbmdpbmUtPmlkICE9IFJDUyk7Cj4g KwkJcmV0ID0gc2V0dXBfcGh5c19zdGF0dXNfcGFnZShlbmdpbmUpOwo+ICAgCX0KPiAtCj4gLQlp ZiAoc2Vxbm8gPT0gMCkKPiAtCQlyZXR1cm4gLUVOT1NQQzsKPiAtCj4gLQlyZXQgPSBpOTE1X3dh aXRfc2Vxbm8ocmluZywgc2Vxbm8pOwo+ICAgCWlmIChyZXQpCj4gICAJCXJldHVybiByZXQ7Cj4g ICAKPiAtCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5nKHJpbmcpOwo+IC0JcmluZ2J1Zi0+ aGVhZCA9IHJpbmdidWYtPmxhc3RfcmV0aXJlZF9oZWFkOwo+IC0JcmluZ2J1Zi0+bGFzdF9yZXRp cmVkX2hlYWQgPSAtMTsKPiArCXJldCA9IGk5MTVfY21kX3BhcnNlcl9pbml0X2VuZ2luZShlbmdp bmUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQlyaW5nYnVmLT5zcGFj ZSA9IGludGVsX3Jpbmdfc3BhY2UocmluZ2J1Zik7Cj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAK PiAtc3RhdGljIGludCByaW5nX3dhaXRfZm9yX3NwYWNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmcsIGludCBuKQo+ICtzdGF0aWMgdm9pZCBnZW42X2JzZF9yaW5nX3dyaXRlX3RhaWwoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkJICAgICB1MzIgdmFsdWUpCj4gICB7 Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Owo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRl bF9yaW5nYnVmZmVyICpyaW5nYnVmID0gcmluZy0+YnVmZmVyOwo+IC0JdW5zaWduZWQgbG9uZyBl bmQ7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IGludGVsX3Jpbmdfd2FpdF9yZXF1ZXN0KHJp bmcsIG4pOwo+IC0JaWYgKHJldCAhPSAtRU5PU1BDKQo+IC0JCXJldHVybiByZXQ7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gICAKPiAtCS8q IGZvcmNlIHRoZSB0YWlsIHdyaXRlIGluIGNhc2Ugd2UgaGF2ZSBiZWVuIHNraXBwaW5nIHRoZW0g Ki8KPiAtCV9faW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+ICsgICAgICAgLyogRXZlcnkgdGFp bCBtb3ZlIG11c3QgZm9sbG93IHRoZSBzZXF1ZW5jZSBiZWxvdyAqLwo+ICAgCj4gLQkvKiBXaXRo IEdFTSB0aGUgaGFuZ2NoZWNrIHRpbWVyIHNob3VsZCBraWNrIHVzIG91dCBvZiB0aGUgbG9vcCwK PiAtCSAqIGxlYXZpbmcgaXQgZWFybHkgcnVucyB0aGUgcmlzayBvZiBjb3JydXB0aW5nIEdFTSBz dGF0ZSAoZHVlCj4gLQkgKiB0byBydW5uaW5nIG9uIGFsbW9zdCB1bnRlc3RlZCBjb2RlcGF0aHMp LiBCdXQgb24gcmVzdW1lCj4gLQkgKiB0aW1lcnMgZG9uJ3Qgd29yayB5ZXQsIHNvIHByZXZlbnQg YSBjb21wbGV0ZSBoYW5nIGluIHRoYXQKPiAtCSAqIGNhc2UgYnkgY2hvb3NpbmcgYW4gaW5zYW5l bHkgbGFyZ2UgdGltZW91dC4gKi8KPiAtCWVuZCA9IGppZmZpZXMgKyA2MCAqIEhaOwo+ICsJLyog RGlzYWJsZSBub3RpZmljYXRpb24gdGhhdCB0aGUgcmluZyBpcyBJRExFLiBUaGUgR1QKPiArCSAq IHdpbGwgdGhlbiBhc3N1bWUgdGhhdCBpdCBpcyBidXN5IGFuZCBicmluZyBpdCBvdXQgb2YgcmM2 Lgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKEdFTjZfQlNEX1NMRUVQX1BTTUlfQ09OVFJPTCwKPiAr CQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VONl9CU0RfU0xFRVBfTVNHX0RJU0FCTEUpKTsKPiAg IAo+IC0JdHJhY2VfaTkxNV9yaW5nX3dhaXRfYmVnaW4ocmluZyk7Cj4gLQlkbyB7Cj4gLQkJcmlu Z2J1Zi0+aGVhZCA9IEk5MTVfUkVBRF9IRUFEKHJpbmcpOwo+IC0JCXJpbmdidWYtPnNwYWNlID0g aW50ZWxfcmluZ19zcGFjZShyaW5nYnVmKTsKPiAtCQlpZiAocmluZ2J1Zi0+c3BhY2UgPj0gbikg ewo+IC0JCQlyZXQgPSAwOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQo+IC0JCW1zbGVlcCgxKTsK PiAtCj4gLQkJaWYgKGRldl9wcml2LT5tbS5pbnRlcnJ1cHRpYmxlICYmIHNpZ25hbF9wZW5kaW5n KGN1cnJlbnQpKSB7Cj4gLQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKPiAtCQkJYnJlYWs7Cj4gLQkJ fQo+IC0KPiAtCQlyZXQgPSBpOTE1X2dlbV9jaGVja193ZWRnZSgmZGV2X3ByaXYtPmdwdV9lcnJv ciwKPiAtCQkJCQkgICBkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZSk7Cj4gLQkJaWYgKHJldCkK PiAtCQkJYnJlYWs7Cj4gLQo+IC0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGVuZCkpIHsKPiAt CQkJcmV0ID0gLUVCVVNZOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQl9IHdoaWxlICgxKTsKPiAt CXRyYWNlX2k5MTVfcmluZ193YWl0X2VuZChyaW5nKTsKPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAt Cj4gLXN0YXRpYyBpbnQgaW50ZWxfd3JhcF9yaW5nX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nKQo+IC17Cj4gLQl1aW50MzJfdCBfX2lvbWVtICp2aXJ0Owo+IC0Jc3RydWN0IGlu dGVsX3JpbmdidWZmZXIgKnJpbmdidWYgPSByaW5nLT5idWZmZXI7Cj4gLQlpbnQgcmVtID0gcmlu Z2J1Zi0+c2l6ZSAtIHJpbmdidWYtPnRhaWw7Cj4gLQo+IC0JaWYgKHJpbmdidWYtPnNwYWNlIDwg cmVtKSB7Cj4gLQkJaW50IHJldCA9IHJpbmdfd2FpdF9mb3Jfc3BhY2UocmluZywgcmVtKTsKPiAt CQlpZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAtCXZpcnQgPSByaW5nYnVm LT52aXJ0dWFsX3N0YXJ0ICsgcmluZ2J1Zi0+dGFpbDsKPiAtCXJlbSAvPSA0Owo+IC0Jd2hpbGUg KHJlbS0tKQo+IC0JCWlvd3JpdGUzMihNSV9OT09QLCB2aXJ0KyspOwo+IC0KPiAtCXJpbmdidWYt PnRhaWwgPSAwOwo+IC0JcmluZ2J1Zi0+c3BhY2UgPSBpbnRlbF9yaW5nX3NwYWNlKHJpbmdidWYp Owo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1pbnQgaW50ZWxfcmluZ19pZGxlKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gLXsKPiAtCXUzMiBzZXFubzsKPiAtCWludCByZXQ7 Cj4gLQo+IC0JLyogV2UgbmVlZCB0byBhZGQgYW55IHJlcXVlc3RzIHJlcXVpcmVkIHRvIGZsdXNo IHRoZSBvYmplY3RzIGFuZCByaW5nICovCj4gLQlpZiAocmluZy0+b3V0c3RhbmRpbmdfbGF6eV9z ZXFubykgewo+IC0JCXJldCA9IGk5MTVfYWRkX3JlcXVlc3QocmluZywgTlVMTCk7Cj4gLQkJaWYg KHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gLQkvKiBXYWl0IHVwb24gdGhlIGxh c3QgcmVxdWVzdCB0byBiZSBjb21wbGV0ZWQgKi8KPiAtCWlmIChsaXN0X2VtcHR5KCZyaW5nLT5y ZXF1ZXN0X2xpc3QpKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCXNlcW5vID0gbGlzdF9lbnRyeShy aW5nLT5yZXF1ZXN0X2xpc3QucHJldiwKPiAtCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0LAo+IC0JCQkgICBsaXN0KS0+c2Vxbm87Cj4gLQo+IC0JcmV0dXJuIGk5MTVfd2FpdF9zZXFu byhyaW5nLCBzZXFubyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQKPiAtaW50ZWxfcmluZ19hbGxv Y19zZXFubyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+IC17Cj4gLQlpZiAocmluZy0+ b3V0c3RhbmRpbmdfbGF6eV9zZXFubykKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlpZiAocmluZy0+ cHJlYWxsb2NhdGVkX2xhenlfcmVxdWVzdCA9PSBOVUxMKSB7Cj4gLQkJc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0Owo+IC0KPiAtCQlyZXF1ZXN0ID0ga21hbGxvYyhzaXplb2Yo KnJlcXVlc3QpLCBHRlBfS0VSTkVMKTsKPiAtCQlpZiAocmVxdWVzdCA9PSBOVUxMKQo+IC0JCQly ZXR1cm4gLUVOT01FTTsKPiAtCj4gLQkJcmluZy0+cHJlYWxsb2NhdGVkX2xhenlfcmVxdWVzdCA9 IHJlcXVlc3Q7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIGk5MTVfZ2VtX2dldF9zZXFubyhyaW5nLT5k ZXYsICZyaW5nLT5vdXRzdGFuZGluZ19sYXp5X3NlcW5vKTsKPiAtfQo+IC0KPiAtc3RhdGljIGlu dCBfX2ludGVsX3JpbmdfcHJlcGFyZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0J CQkJaW50IGJ5dGVzKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiA9 IHJpbmctPmJ1ZmZlcjsKPiAtCWludCByZXQ7Cj4gLQo+IC0JaWYgKHVubGlrZWx5KHJpbmdidWYt PnRhaWwgKyBieXRlcyA+IHJpbmdidWYtPmVmZmVjdGl2ZV9zaXplKSkgewo+IC0JCXJldCA9IGlu dGVsX3dyYXBfcmluZ19idWZmZXIocmluZyk7Cj4gLQkJaWYgKHVubGlrZWx5KHJldCkpCj4gLQkJ CXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JaWYgKHVubGlrZWx5KHJpbmdidWYtPnNwYWNlIDwg Ynl0ZXMpKSB7Cj4gLQkJcmV0ID0gcmluZ193YWl0X2Zvcl9zcGFjZShyaW5nLCBieXRlcyk7Cj4g LQkJaWYgKHVubGlrZWx5KHJldCkpCj4gLQkJCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JcmV0 dXJuIDA7Cj4gLX0KPiAtCj4gLWludCBpbnRlbF9yaW5nX2JlZ2luKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcsCj4gLQkJICAgICBpbnQgbnVtX2R3b3JkcykKPiAtewo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCWlu dCByZXQ7Cj4gLQo+IC0JcmV0ID0gaTkxNV9nZW1fY2hlY2tfd2VkZ2UoJmRldl9wcml2LT5ncHVf ZXJyb3IsCj4gLQkJCQkgICBkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZSk7Cj4gLQlpZiAocmV0 KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JcmV0ID0gX19pbnRlbF9yaW5nX3ByZXBhcmUocmlu ZywgbnVtX2R3b3JkcyAqIHNpemVvZih1aW50MzJfdCkpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1 cm4gcmV0Owo+IC0KPiAtCS8qIFByZWFsbG9jYXRlIHRoZSBvbHIgYmVmb3JlIHRvdWNoaW5nIHRo ZSByaW5nICovCj4gLQlyZXQgPSBpbnRlbF9yaW5nX2FsbG9jX3NlcW5vKHJpbmcpOwo+IC0JaWYg KHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCXJpbmctPmJ1ZmZlci0+c3BhY2UgLT0gbnVt X2R3b3JkcyAqIHNpemVvZih1aW50MzJfdCk7Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtLyog QWxpZ24gdGhlIHJpbmcgdGFpbCB0byBhIGNhY2hlbGluZSBib3VuZGFyeSAqLwo+IC1pbnQgaW50 ZWxfcmluZ19jYWNoZWxpbmVfYWxpZ24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAt ewo+IC0JaW50IG51bV9kd29yZHMgPSAocmluZy0+YnVmZmVyLT50YWlsICYgKENBQ0hFTElORV9C WVRFUyAtIDEpKSAvIHNpemVvZih1aW50MzJfdCk7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWlmIChu dW1fZHdvcmRzID09IDApCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JbnVtX2R3b3JkcyA9IENBQ0hF TElORV9CWVRFUyAvIHNpemVvZih1aW50MzJfdCkgLSBudW1fZHdvcmRzOwo+IC0JcmV0ID0gaW50 ZWxfcmluZ19iZWdpbihyaW5nLCBudW1fZHdvcmRzKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJu IHJldDsKPiAtCj4gLQl3aGlsZSAobnVtX2R3b3Jkcy0tKQo+IC0JCWludGVsX3JpbmdfZW1pdChy aW5nLCBNSV9OT09QKTsKPiAtCj4gLQlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gLQo+IC0J cmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXZvaWQgaW50ZWxfcmluZ19pbml0X3NlcW5vKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnJpbmcsIHUzMiBzZXFubykKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IHJpbmctPmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQo+IC0JQlVHX09OKHJpbmctPm91dHN0YW5kaW5nX2xh enlfc2Vxbm8pOwo+IC0KPiAtCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA9PSA2IHx8IElOVEVM X0lORk8oZGV2KS0+Z2VuID09IDcpIHsKPiAtCQlJOTE1X1dSSVRFKFJJTkdfU1lOQ18wKHJpbmct Pm1taW9fYmFzZSksIDApOwo+IC0JCUk5MTVfV1JJVEUoUklOR19TWU5DXzEocmluZy0+bW1pb19i YXNlKSwgMCk7Cj4gLQkJaWYgKEhBU19WRUJPWChkZXYpKQo+IC0JCQlJOTE1X1dSSVRFKFJJTkdf U1lOQ18yKHJpbmctPm1taW9fYmFzZSksIDApOwo+IC0JfQo+IC0KPiAtCXJpbmctPnNldF9zZXFu byhyaW5nLCBzZXFubyk7Cj4gLQlyaW5nLT5oYW5nY2hlY2suc2Vxbm8gPSBzZXFubzsKPiAtfQo+ IC0KPiAtc3RhdGljIHZvaWQgZ2VuNl9ic2RfcmluZ193cml0ZV90YWlsKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKnJpbmcsCj4gLQkJCQkgICAgIHUzMiB2YWx1ZSkKPiAtewo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCj4g LSAgICAgICAvKiBFdmVyeSB0YWlsIG1vdmUgbXVzdCBmb2xsb3cgdGhlIHNlcXVlbmNlIGJlbG93 ICovCj4gLQo+IC0JLyogRGlzYWJsZSBub3RpZmljYXRpb24gdGhhdCB0aGUgcmluZyBpcyBJRExF LiBUaGUgR1QKPiAtCSAqIHdpbGwgdGhlbiBhc3N1bWUgdGhhdCBpdCBpcyBidXN5IGFuZCBicmlu ZyBpdCBvdXQgb2YgcmM2Lgo+IC0JICovCj4gLQlJOTE1X1dSSVRFKEdFTjZfQlNEX1NMRUVQX1BT TUlfQ09OVFJPTCwKPiAtCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VONl9CU0RfU0xFRVBfTVNH X0RJU0FCTEUpKTsKPiAtCj4gLQkvKiBDbGVhciB0aGUgY29udGV4dCBpZC4gSGVyZSBiZSBtYWdp YyEgKi8KPiAtCUk5MTVfV1JJVEU2NChHRU42X0JTRF9STkNJRCwgMHgwKTsKPiArCS8qIENsZWFy IHRoZSBjb250ZXh0IGlkLiBIZXJlIGJlIG1hZ2ljISAqLwo+ICsJSTkxNV9XUklURTY0KEdFTjZf QlNEX1JOQ0lELCAweDApOwo+ICAgCj4gICAJLyogV2FpdCBmb3IgdGhlIHJpbmcgbm90IHRvIGJl IGlkbGUsIGkuZS4gZm9yIGl0IHRvIHdha2UgdXAuICovCj4gICAJaWYgKHdhaXRfZm9yKChJOTE1 X1JFQUQoR0VONl9CU0RfU0xFRVBfUFNNSV9DT05UUk9MKSAmCj4gQEAgLTIxMDEsOCArMTcyMyw4 IEBAIHN0YXRpYyB2b2lkIGdlbjZfYnNkX3Jpbmdfd3JpdGVfdGFpbChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICpyaW5nLAo+ICAgCQlEUk1fRVJST1IoInRpbWVkIG91dCB3YWl0aW5nIGZvciB0aGUg QlNEIHJpbmcgdG8gd2FrZSB1cFxuIik7Cj4gICAKPiAgIAkvKiBOb3cgdGhhdCB0aGUgcmluZyBp cyBmdWxseSBwb3dlcmVkIHVwLCB1cGRhdGUgdGhlIHRhaWwgKi8KPiAtCUk5MTVfV1JJVEVfVEFJ TChyaW5nLCB2YWx1ZSk7Cj4gLQlQT1NUSU5HX1JFQUQoUklOR19UQUlMKHJpbmctPm1taW9fYmFz ZSkpOwo+ICsJSTkxNV9XUklURV9UQUlMKGVuZ2luZSwgdmFsdWUpOwo+ICsJUE9TVElOR19SRUFE KFJJTkdfVEFJTChlbmdpbmUtPm1taW9fYmFzZSkpOwo+ICAgCj4gICAJLyogTGV0IHRoZSByaW5n IHNlbmQgSURMRSBtZXNzYWdlcyB0byB0aGUgR1QgYWdhaW4sCj4gICAJICogYW5kIHNvIGxldCBp dCBzbGVlcCB0byBjb25zZXJ2ZSBwb3dlciB3aGVuIGlkbGUuCj4gQEAgLTIxMTEsNzMgKzE3MzMs NzIgQEAgc3RhdGljIHZvaWQgZ2VuNl9ic2RfcmluZ193cml0ZV90YWlsKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKnJpbmcsCj4gICAJCSAgIF9NQVNLRURfQklUX0RJU0FCTEUoR0VONl9CU0RfU0xF RVBfTVNHX0RJU0FCTEUpKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IGdlbjZfYnNkX3Jpbmdf Zmx1c2goc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAtCQkJICAgICAgIHUzMiBpbnZh bGlkYXRlLCB1MzIgZmx1c2gpCj4gK3N0YXRpYyBpbnQgZ2VuNl9ic2RfZW1pdF9mbHVzaChzdHJ1 Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEsCj4gKwkJCSAgICAgICB1MzIgZmxhZ3MpCj4gICB7Cj4g KwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZzsKPiAgIAl1aW50MzJfdCBjbWQ7Cj4gLQlp bnQgcmV0Owo+IC0KPiAtCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmluZywgNCk7Cj4gLQlpZiAo cmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gICAKPiAtCWNtZCA9IE1JX0ZMVVNIX0RXOwo+IC0JaWYg KElOVEVMX0lORk8ocmluZy0+ZGV2KS0+Z2VuID49IDgpCj4gKwljbWQgPSAzOwo+ICsJaWYgKElO VEVMX0lORk8ocnEtPmk5MTUpLT5nZW4gPj0gOCkKPiAgIAkJY21kICs9IDE7Cj4gKwo+ICsJcmlu ZyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIGNtZCk7Cj4gKwlpZiAoSVNfRVJSKHJpbmcpKQo+ICsJ CXJldHVybiBQVFJfRVJSKHJpbmcpOwo+ICsKPiAgIAkvKgo+ICAgCSAqIEJzcGVjIHZvbCAxYy41 IC0gdmlkZW8gZW5naW5lIGNvbW1hbmQgc3RyZWFtZXI6Cj4gICAJICogIklmIEVOQUJMRUQsIGFs bCBUTEJzIHdpbGwgYmUgaW52YWxpZGF0ZWQgb25jZSB0aGUgZmx1c2gKPiAgIAkgKiBvcGVyYXRp b24gaXMgY29tcGxldGUuIFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgd2hlbiB0aGUKPiAgIAkgKiBQ b3N0LVN5bmMgT3BlcmF0aW9uIGZpZWxkIGlzIGEgdmFsdWUgb2YgMWggb3IgM2guIgo+ICAgCSAq Lwo+IC0JaWYgKGludmFsaWRhdGUgJiBJOTE1X0dFTV9HUFVfRE9NQUlOUykKPiAtCQljbWQgfD0g TUlfSU5WQUxJREFURV9UTEIgfCBNSV9JTlZBTElEQVRFX0JTRCB8Cj4gLQkJCU1JX0ZMVVNIX0RX X1NUT1JFX0lOREVYIHwgTUlfRkxVU0hfRFdfT1BfU1RPUkVEVzsKPiArCWNtZCA9IE1JX0ZMVVNI X0RXIHwgKGNtZCAtIDIpOwo+ICsJaWYgKGZsYWdzICYgSTkxNV9JTlZBTElEQVRFX0NBQ0hFUykK PiArCQljbWQgfD0gKE1JX0lOVkFMSURBVEVfVExCIHwKPiArCQkJTUlfSU5WQUxJREFURV9CU0Qg fAo+ICsJCQlNSV9GTFVTSF9EV19TVE9SRV9JTkRFWCB8Cj4gKwkJCU1JX0ZMVVNIX0RXX09QX1NU T1JFRFcpOwo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBjbWQpOwo+ICAgCWludGVsX3Jpbmdf ZW1pdChyaW5nLCBJOTE1X0dFTV9IV1NfU0NSQVRDSF9BRERSIHwgTUlfRkxVU0hfRFdfVVNFX0dU VCk7Cj4gLQlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPj0gOCkgewo+ICsJaWYgKElO VEVMX0lORk8ocnEtPmk5MTUpLT5nZW4gPj0gOCkKPiAgIAkJaW50ZWxfcmluZ19lbWl0KHJpbmcs IDApOyAvKiB1cHBlciBhZGRyICovCj4gLQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOyAvKiB2 YWx1ZSAqLwo+IC0JfSBlbHNlICB7Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOwo+IC0J CWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKPiAtCX0KPiArCWludGVsX3JpbmdfZW1p dChyaW5nLCAwKTsgLyogdmFsdWUgKi8KPiAgIAlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4g ICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQKPiAtZ2VuOF9yaW5nX2Rpc3Bh dGNoX2V4ZWNidWZmZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAtCQkJICAgICAg dTY0IG9mZnNldCwgdTMyIGxlbiwKPiAtCQkJICAgICAgdW5zaWduZWQgZmxhZ3MpCj4gK2dlbjhf ZW1pdF9iYXRjaGJ1ZmZlcihzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEsCj4gKwkJICAgICAg dTY0IG9mZnNldCwgdTMyIGxlbiwKPiArCQkgICAgICB1bnNpZ25lZCBmbGFncykKPiAgIHsKPiAt CWJvb2wgcHBndHQgPSBVU0VTX1BQR1RUKHJpbmctPmRldikgJiYgIShmbGFncyAmIEk5MTVfRElT UEFUQ0hfU0VDVVJFKTsKPiAtCWludCByZXQ7Cj4gKwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAq cmluZzsKPiArCWJvb2wgcHBndHQgPSBVU0VTX1BQR1RUKHJxLT5pOTE1KSAmJiAhKGZsYWdzICYg STkxNV9ESVNQQVRDSF9TRUNVUkUpOwo+ICAgCj4gLQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJp bmcsIDQpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJcmluZyA9IGludGVsX3Jp bmdfYmVnaW4ocnEsIDMpOwo+ICsJaWYgKElTX0VSUihyaW5nKSkKPiArCQlyZXR1cm4gUFRSX0VS UihyaW5nKTsKPiAgIAo+ICAgCS8qIEZJWE1FKEJEVyk6IEFkZHJlc3Mgc3BhY2UgYW5kIHNlY3Vy aXR5IHNlbGVjdG9ycy4gKi8KPiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfQkFUQ0hfQlVG RkVSX1NUQVJUX0dFTjggfCAocHBndHQ8PDgpKTsKPiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywg bG93ZXJfMzJfYml0cyhvZmZzZXQpKTsKPiAgIAlpbnRlbF9yaW5nX2VtaXQocmluZywgdXBwZXJf MzJfYml0cyhvZmZzZXQpKTsKPiAtCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKPiAg IAlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7Cj4gICAKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAg IAo+ICAgc3RhdGljIGludAo+IC1oc3dfcmluZ19kaXNwYXRjaF9leGVjYnVmZmVyKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gLQkJCSAgICAgIHU2NCBvZmZzZXQsIHUzMiBsZW4sCj4g LQkJCSAgICAgIHVuc2lnbmVkIGZsYWdzKQo+ICtoc3dfZW1pdF9iYXRjaGJ1ZmZlcihzdHJ1Y3Qg aTkxNV9nZW1fcmVxdWVzdCAqcnEsCj4gKwkJICAgICB1NjQgb2Zmc2V0LCB1MzIgbGVuLAo+ICsJ CSAgICAgdW5zaWduZWQgZmxhZ3MpCj4gICB7Cj4gLQlpbnQgcmV0Owo+ICsJc3RydWN0IGludGVs X3JpbmdidWZmZXIgKnJpbmc7Cj4gICAKPiAtCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmluZywg Mik7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlyaW5nID0gaW50ZWxfcmluZ19i ZWdpbihycSwgMik7Cj4gKwlpZiAoSVNfRVJSKHJpbmcpKQo+ICsJCXJldHVybiBQVFJfRVJSKHJp bmcpOwo+ICAgCj4gICAJaW50ZWxfcmluZ19lbWl0KHJpbmcsCj4gICAJCQlNSV9CQVRDSF9CVUZG RVJfU1RBUlQgfCBNSV9CQVRDSF9QUEdUVF9IU1cgfAo+IEBAIC0yMTkwLDE1ICsxODExLDE1IEBA IGhzd19yaW5nX2Rpc3BhdGNoX2V4ZWNidWZmZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmlu ZywKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGludAo+IC1nZW42X3JpbmdfZGlzcGF0Y2hfZXhlY2J1 ZmZlcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCQkgICAgICB1NjQgb2Zmc2V0 LCB1MzIgbGVuLAo+IC0JCQkgICAgICB1bnNpZ25lZCBmbGFncykKPiArZ2VuNl9lbWl0X2JhdGNo YnVmZmVyKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwKPiArCQkgICAgICB1NjQgb2Zmc2V0 LCB1MzIgbGVuLAo+ICsJCSAgICAgIHVuc2lnbmVkIGZsYWdzKQo+ICAgewo+IC0JaW50IHJldDsK PiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICAgCj4gLQlyZXQgPSBpbnRlbF9y aW5nX2JlZ2luKHJpbmcsIDIpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJcmlu ZyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDIpOwo+ICsJaWYgKElTX0VSUihyaW5nKSkKPiArCQly ZXR1cm4gUFRSX0VSUihyaW5nKTsKPiAgIAo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5nLAo+ICAg CQkJTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwKPiBAQCAtMjIxMiw2MCArMTgzMywxMDIgQEAgZ2Vu Nl9yaW5nX2Rpc3BhdGNoX2V4ZWNidWZmZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywK PiAgIAo+ICAgLyogQmxpdHRlciBzdXBwb3J0IChTYW5keUJyaWRnZSspICovCj4gICAKPiAtc3Rh dGljIGludCBnZW42X3JpbmdfZmx1c2goc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAt CQkJICAgdTMyIGludmFsaWRhdGUsIHUzMiBmbHVzaCkKPiArc3RhdGljIGludCBnZW42X2JsdF9l bWl0X2ZsdXNoKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwKPiArCQkJICAgICAgIHUzMiBm bGFncykKPiAgIHsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Cj4gKwlz dHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZzsKPiAgIAl1aW50MzJfdCBjbWQ7Cj4gLQlpbnQg cmV0Owo+ICAgCj4gLQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQpOwo+IC0JaWYgKHJl dCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCWNtZCA9IE1JX0ZMVVNIX0RXOwo+IC0JaWYgKElO VEVMX0lORk8ocmluZy0+ZGV2KS0+Z2VuID49IDgpCj4gKwljbWQgPSAzOwo+ICsJaWYgKElOVEVM X0lORk8ocnEtPmk5MTUpLT5nZW4gPj0gOCkKPiAgIAkJY21kICs9IDE7Cj4gKwo+ICsJcmluZyA9 IGludGVsX3JpbmdfYmVnaW4ocnEsIGNtZCk7Cj4gKwlpZiAoSVNfRVJSKHJpbmcpKQo+ICsJCXJl dHVybiBQVFJfRVJSKHJpbmcpOwo+ICsKPiAgIAkvKgo+ICAgCSAqIEJzcGVjIHZvbCAxYy4zIC0g YmxpdHRlciBlbmdpbmUgY29tbWFuZCBzdHJlYW1lcjoKPiAgIAkgKiAiSWYgRU5BQkxFRCwgYWxs IFRMQnMgd2lsbCBiZSBpbnZhbGlkYXRlZCBvbmNlIHRoZSBmbHVzaAo+ICAgCSAqIG9wZXJhdGlv biBpcyBjb21wbGV0ZS4gVGhpcyBiaXQgaXMgb25seSB2YWxpZCB3aGVuIHRoZQo+ICAgCSAqIFBv c3QtU3luYyBPcGVyYXRpb24gZmllbGQgaXMgYSB2YWx1ZSBvZiAxaCBvciAzaC4iCj4gICAJICov Cj4gLQlpZiAoaW52YWxpZGF0ZSAmIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpCj4gLQkJY21kIHw9 IE1JX0lOVkFMSURBVEVfVExCIHwgTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVggfAo+IC0JCQlNSV9G TFVTSF9EV19PUF9TVE9SRURXOwo+ICsJY21kID0gTUlfRkxVU0hfRFcgfCAoY21kIC0gMik7Cj4g KwlpZiAoZmxhZ3MgJiBJOTE1X0lOVkFMSURBVEVfQ0FDSEVTKQo+ICsJCWNtZCB8PSAoTUlfSU5W QUxJREFURV9UTEIgfAo+ICsJCQlNSV9GTFVTSF9EV19TVE9SRV9JTkRFWCB8Cj4gKwkJCU1JX0ZM VVNIX0RXX09QX1NUT1JFRFcpOwo+ICAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBjbWQpOwo+ICAg CWludGVsX3JpbmdfZW1pdChyaW5nLCBJOTE1X0dFTV9IV1NfU0NSQVRDSF9BRERSIHwgTUlfRkxV U0hfRFdfVVNFX0dUVCk7Cj4gLQlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPj0gOCkg ewo+ICsJaWYgKElOVEVMX0lORk8ocnEtPmk5MTUpLT5nZW4gPj0gOCkKPiAgIAkJaW50ZWxfcmlu Z19lbWl0KHJpbmcsIDApOyAvKiB1cHBlciBhZGRyICovCj4gLQkJaW50ZWxfcmluZ19lbWl0KHJp bmcsIDApOyAvKiB2YWx1ZSAqLwo+IC0JfSBlbHNlICB7Cj4gLQkJaW50ZWxfcmluZ19lbWl0KHJp bmcsIDApOwo+IC0JCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKPiAtCX0KPiArCWlu dGVsX3JpbmdfZW1pdChyaW5nLCAwKTsgLyogdmFsdWUgKi8KPiAgIAlpbnRlbF9yaW5nX2FkdmFu Y2UocmluZyk7Cj4gICAKPiAtCWlmIChJU19HRU43KGRldikgJiYgIWludmFsaWRhdGUgJiYgZmx1 c2gpCj4gLQkJcmV0dXJuIGdlbjdfcmluZ19mYmNfZmx1c2gocmluZywgRkJDX1JFTkRfQ0FDSEVf Q0xFQU4pOwo+ICsJaWYgKElTX0dFTjcocnEtPmk5MTUpICYmIGZsYWdzICYgSTkxNV9LSUNLX0ZC QykKPiArCQlyZXR1cm4gZ2VuN19yaW5nX2ZiY19mbHVzaChycSwgRkJDX1JFTkRfQ0FDSEVfQ0xF QU4pOwo+ICAgCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtaW50IGludGVsX2luaXRfcmVu ZGVyX3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3N0YXRpYyB2b2lkIGdl bjhfZW5naW5lX2luaXRfc2VtYXBob3JlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiArewo+ICsJaWYgKGVuZ2luZS0+aTkxNS0+c2VtYXBob3JlX29iaiA9PSBOVUxMKQo+ICsJCXJl dHVybjsKPiArCj4gKwllbmdpbmUtPnNlbWFwaG9yZS53YWl0ID0gZ2VuOF9lbWl0X3dhaXQ7Cj4g KwllbmdpbmUtPnNlbWFwaG9yZS5zaWduYWwgPQo+ICsJCWVuZ2luZS0+aWQgPT0gUkNTID8gZ2Vu OF9yY3NfZW1pdF9zaWduYWwgOiBnZW44X3hjc19lbWl0X3NpZ25hbDsKPiArfQo+ICsKPiArc3Rh dGljIGJvb2wgc2VtYXBob3Jlc19lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiArewo+ICsJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4gPCA2KQo+ICsJCXJl dHVybiBmYWxzZTsKPiArCj4gKwlpZiAoaTkxNS5zZW1hcGhvcmVzID49IDApCj4gKwkJcmV0dXJu IGk5MTUuc2VtYXBob3JlczsKPiArCj4gKwkvKiBVbnRpbCB3ZSBnZXQgZnVydGhlciB0ZXN0aW5n Li4uICovCj4gKwlpZiAoSVNfR0VOOChkZXZfcHJpdikpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsK PiArI2lmZGVmIENPTkZJR19JTlRFTF9JT01NVQo+ICsJLyogRW5hYmxlIHNlbWFwaG9yZXMgb24g U05CIHdoZW4gSU8gcmVtYXBwaW5nIGlzIG9mZiAqLwo+ICsJaWYgKElOVEVMX0lORk8oZGV2X3By aXYpLT5nZW4gPT0gNiAmJiBpbnRlbF9pb21tdV9nZnhfbWFwcGVkKQo+ICsJCXJldHVybiBmYWxz ZTsKPiArI2VuZGlmCj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK2ludCBpbnRlbF9p bml0X3JlbmRlcl9lbmdpbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAg ewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbUkNT XTsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5l W1JDU107Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiAgIAlpbnQgcmV0 Owo+ICAgCj4gLQlyaW5nLT5uYW1lID0gInJlbmRlciByaW5nIjsKPiAtCXJpbmctPmlkID0gUkNT Owo+IC0JcmluZy0+bW1pb19iYXNlID0gUkVOREVSX1JJTkdfQkFTRTsKPiArCXJldCA9IGludGVs X2VuZ2luZV9pbml0KGVuZ2luZSwgZGV2X3ByaXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g cmV0Owo+ICsKPiArCWVuZ2luZS0+bmFtZSA9ICJyZW5kZXIgcmluZyI7Cj4gKwllbmdpbmUtPmlk ID0gUkNTOwo+ICsJZW5naW5lLT5wb3dlcl9kb21haW5zID0gRk9SQ0VXQUtFX1JFTkRFUjsKPiAr CWVuZ2luZS0+bW1pb19iYXNlID0gUkVOREVSX1JJTkdfQkFTRTsKPiArCj4gKwllbmdpbmUtPmlu aXRfY29udGV4dCA9IGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZV9pbml0Owo+ICsKPiArCWlmIChIQVNf TDNfRFBGKGRldl9wcml2KSkgewo+ICsJCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49 IDgpCj4gKwkJCWVuZ2luZS0+aXJxX2tlZXBfbWFzayB8PSBHVF9SRU5ERVJfTDNfUEFSSVRZX0VS Uk9SX0lOVEVSUlVQVDsKPiArCQllbHNlCj4gKwkJCWVuZ2luZS0+aXJxX2tlZXBfbWFzayB8PSBH VF9QQVJJVFlfRVJST1IoZGV2X3ByaXYpOwo+ICsJfQo+ICAgCj4gLQlpZiAoSU5URUxfSU5GTyhk ZXYpLT5nZW4gPj0gOCkgewo+IC0JCWlmIChpOTE1X3NlbWFwaG9yZV9pc19lbmFibGVkKGRldikp IHsKPiAtCQkJb2JqID0gaTkxNV9nZW1fYWxsb2Nfb2JqZWN0KGRldiwgNDA5Nik7Cj4gKwlpZiAo SU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA4KSB7Cj4gKwkJaWYgKHNlbWFwaG9yZXNfZW5h YmxlZChkZXZfcHJpdikpIHsKPiArCQkJb2JqID0gaTkxNV9nZW1fYWxsb2Nfb2JqZWN0KGRldl9w cml2LT5kZXYsIDQwOTYpOwo+ICAgCQkJaWYgKG9iaiA9PSBOVUxMKSB7Cj4gICAJCQkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgc2VtYXBob3JlIGJvLiBEaXNhYmxpbmcgc2VtYXBob3Jl c1xuIik7Cj4gICAJCQkJaTkxNS5zZW1hcGhvcmVzID0gMDsKPiBAQCAtMjI4MCwzNiArMTk0Mywy OCBAQCBpbnQgaW50ZWxfaW5pdF9yZW5kZXJfcmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPiAgIAkJCQkJZGV2X3ByaXYtPnNlbWFwaG9yZV9vYmogPSBvYmo7Cj4gICAJCQl9Cj4g ICAJCX0KPiAtCQlpZiAoSVNfQ0hFUlJZVklFVyhkZXYpKQo+IC0JCQlyaW5nLT5pbml0X2NvbnRl eHQgPSBjaHZfaW5pdF93b3JrYXJvdW5kczsKPiArCQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJp dikpCj4gKwkJCWVuZ2luZS0+aW5pdF9jb250ZXh0ID0gY2h2X3JlbmRlcl9pbml0X2NvbnRleHQ7 Cj4gICAJCWVsc2UKPiAtCQkJcmluZy0+aW5pdF9jb250ZXh0ID0gYmR3X2luaXRfd29ya2Fyb3Vu ZHM7Cj4gLQkJcmluZy0+YWRkX3JlcXVlc3QgPSBnZW42X2FkZF9yZXF1ZXN0Owo+IC0JCXJpbmct PmZsdXNoID0gZ2VuOF9yZW5kZXJfcmluZ19mbHVzaDsKPiAtCQlyaW5nLT5pcnFfZ2V0ID0gZ2Vu OF9yaW5nX2dldF9pcnE7Cj4gLQkJcmluZy0+aXJxX3B1dCA9IGdlbjhfcmluZ19wdXRfaXJxOwo+ IC0JCXJpbmctPmlycV9lbmFibGVfbWFzayA9IEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVDsKPiAt CQlyaW5nLT5nZXRfc2Vxbm8gPSBnZW42X3JpbmdfZ2V0X3NlcW5vOwo+IC0JCXJpbmctPnNldF9z ZXFubyA9IHJpbmdfc2V0X3NlcW5vOwo+IC0JCWlmIChpOTE1X3NlbWFwaG9yZV9pc19lbmFibGVk KGRldikpIHsKPiAtCQkJV0FSTl9PTighZGV2X3ByaXYtPnNlbWFwaG9yZV9vYmopOwo+IC0JCQly aW5nLT5zZW1hcGhvcmUuc3luY190byA9IGdlbjhfcmluZ19zeW5jOwo+IC0JCQlyaW5nLT5zZW1h cGhvcmUuc2lnbmFsID0gZ2VuOF9yY3Nfc2lnbmFsOwo+IC0JCQlHRU44X1JJTkdfU0VNQVBIT1JF X0lOSVQ7Cj4gLQkJfQo+IC0JfSBlbHNlIGlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA2KSB7 Cj4gLQkJcmluZy0+YWRkX3JlcXVlc3QgPSBnZW42X2FkZF9yZXF1ZXN0Owo+IC0JCXJpbmctPmZs dXNoID0gZ2VuN19yZW5kZXJfcmluZ19mbHVzaDsKPiAtCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5n ZW4gPT0gNikKPiAtCQkJcmluZy0+Zmx1c2ggPSBnZW42X3JlbmRlcl9yaW5nX2ZsdXNoOwo+IC0J CXJpbmctPmlycV9nZXQgPSBnZW42X3JpbmdfZ2V0X2lycTsKPiAtCQlyaW5nLT5pcnFfcHV0ID0g Z2VuNl9yaW5nX3B1dF9pcnE7Cj4gLQkJcmluZy0+aXJxX2VuYWJsZV9tYXNrID0gR1RfUkVOREVS X1VTRVJfSU5URVJSVVBUOwo+IC0JCXJpbmctPmdldF9zZXFubyA9IGdlbjZfcmluZ19nZXRfc2Vx bm87Cj4gLQkJcmluZy0+c2V0X3NlcW5vID0gcmluZ19zZXRfc2Vxbm87Cj4gLQkJaWYgKGk5MTVf c2VtYXBob3JlX2lzX2VuYWJsZWQoZGV2KSkgewo+IC0JCQlyaW5nLT5zZW1hcGhvcmUuc3luY190 byA9IGdlbjZfcmluZ19zeW5jOwo+IC0JCQlyaW5nLT5zZW1hcGhvcmUuc2lnbmFsID0gZ2VuNl9z aWduYWw7Cj4gKwkJCWVuZ2luZS0+aW5pdF9jb250ZXh0ID0gYmR3X3JlbmRlcl9pbml0X2NvbnRl eHQ7Cj4gKwkJZW5naW5lLT5lbWl0X2JyZWFkY3J1bWIgPSBpOXh4X2VtaXRfYnJlYWRjcnVtYjsK PiArCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW44X3JlbmRlcl9lbWl0X2ZsdXNoOwo+ICsJCWVu Z2luZS0+aXJxX2dldCA9IGdlbjhfaXJxX2dldDsKPiArCQllbmdpbmUtPmlycV9wdXQgPSBnZW44 X2lycV9wdXQ7Cj4gKwkJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBHVF9SRU5ERVJfVVNFUl9J TlRFUlJVUFQ7Cj4gKwkJZ2VuOF9lbmdpbmVfaW5pdF9zZW1hcGhvcmUoZW5naW5lKTsKPiArCX0g ZWxzZSBpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA2KSB7Cj4gKwkJZW5naW5lLT5l bWl0X2JyZWFkY3J1bWIgPSBpOXh4X2VtaXRfYnJlYWRjcnVtYjsKPiArCQllbmdpbmUtPmVtaXRf Zmx1c2ggPSBnZW43X3JlbmRlcl9lbWl0X2ZsdXNoOwo+ICsJCWlmIChJTlRFTF9JTkZPKGRldl9w cml2KS0+Z2VuID09IDYpCj4gKwkJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjZfcmVuZGVyX2Vt aXRfZmx1c2g7Cj4gKwkJZW5naW5lLT5pcnFfZ2V0ID0gZ2VuNl9pcnFfZ2V0Owo+ICsJCWVuZ2lu ZS0+aXJxX2JhcnJpZXIgPSBnZW42X2lycV9iYXJyaWVyOwo+ICsJCWVuZ2luZS0+aXJxX3B1dCA9 IGdlbjZfaXJxX3B1dDsKPiArCQllbmdpbmUtPmlycV9lbmFibGVfbWFzayA9IEdUX1JFTkRFUl9V U0VSX0lOVEVSUlVQVDsKPiArCQlpZiAoc2VtYXBob3Jlc19lbmFibGVkKGRldl9wcml2KSkgewo+ ICsJCQllbmdpbmUtPnNlbWFwaG9yZS53YWl0ID0gZ2VuNl9lbWl0X3dhaXQ7Cj4gKwkJCWVuZ2lu ZS0+c2VtYXBob3JlLnNpZ25hbCA9IGdlbjZfZW1pdF9zaWduYWw7Cj4gICAJCQkvKgo+ICAgCQkJ ICogVGhlIGN1cnJlbnQgc2VtYXBob3JlIGlzIG9ubHkgYXBwbGllZCBvbiBwcmUtZ2VuOAo+ICAg CQkJICogcGxhdGZvcm0uICBBbmQgdGhlcmUgaXMgbm8gVkNTMiByaW5nIG9uIHRoZSBwcmUtZ2Vu OAo+IEBAIC0yMzE3LDYzICsxOTcyLDYyIEBAIGludCBpbnRlbF9pbml0X3JlbmRlcl9yaW5nX2J1 ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgCQkJICogaW5pdGlhbGl6ZWQgYXMgSU5W QUxJRC4gIEdlbjggd2lsbCBpbml0aWFsaXplIHRoZQo+ICAgCQkJICogc2VtYSBiZXR3ZWVuIFZD UzIgYW5kIFJDUyBsYXRlci4KPiAgIAkJCSAqLwo+IC0JCQlyaW5nLT5zZW1hcGhvcmUubWJveC53 YWl0W1JDU10gPSBNSV9TRU1BUEhPUkVfU1lOQ19JTlZBTElEOwo+IC0JCQlyaW5nLT5zZW1hcGhv cmUubWJveC53YWl0W1ZDU10gPSBNSV9TRU1BUEhPUkVfU1lOQ19SVjsKPiAtCQkJcmluZy0+c2Vt YXBob3JlLm1ib3gud2FpdFtCQ1NdID0gTUlfU0VNQVBIT1JFX1NZTkNfUkI7Cj4gLQkJCXJpbmct PnNlbWFwaG9yZS5tYm94LndhaXRbVkVDU10gPSBNSV9TRU1BUEhPUkVfU1lOQ19SVkU7Cj4gLQkJ CXJpbmctPnNlbWFwaG9yZS5tYm94LndhaXRbVkNTMl0gPSBNSV9TRU1BUEhPUkVfU1lOQ19JTlZB TElEOwo+IC0JCQlyaW5nLT5zZW1hcGhvcmUubWJveC5zaWduYWxbUkNTXSA9IEdFTjZfTk9TWU5D Owo+IC0JCQlyaW5nLT5zZW1hcGhvcmUubWJveC5zaWduYWxbVkNTXSA9IEdFTjZfVlJTWU5DOwo+ IC0JCQlyaW5nLT5zZW1hcGhvcmUubWJveC5zaWduYWxbQkNTXSA9IEdFTjZfQlJTWU5DOwo+IC0J CQlyaW5nLT5zZW1hcGhvcmUubWJveC5zaWduYWxbVkVDU10gPSBHRU42X1ZFUlNZTkM7Cj4gLQkJ CXJpbmctPnNlbWFwaG9yZS5tYm94LnNpZ25hbFtWQ1MyXSA9IEdFTjZfTk9TWU5DOwo+ICsJCQll bmdpbmUtPnNlbWFwaG9yZS5tYm94LndhaXRbUkNTXSA9IE1JX1NFTUFQSE9SRV9TWU5DX0lOVkFM SUQ7Cj4gKwkJCWVuZ2luZS0+c2VtYXBob3JlLm1ib3gud2FpdFtWQ1NdID0gTUlfU0VNQVBIT1JF X1NZTkNfUlY7Cj4gKwkJCWVuZ2luZS0+c2VtYXBob3JlLm1ib3gud2FpdFtCQ1NdID0gTUlfU0VN QVBIT1JFX1NZTkNfUkI7Cj4gKwkJCWVuZ2luZS0+c2VtYXBob3JlLm1ib3gud2FpdFtWRUNTXSA9 IE1JX1NFTUFQSE9SRV9TWU5DX1JWRTsKPiArCQkJZW5naW5lLT5zZW1hcGhvcmUubWJveC53YWl0 W1ZDUzJdID0gTUlfU0VNQVBIT1JFX1NZTkNfSU5WQUxJRDsKPiArCQkJZW5naW5lLT5zZW1hcGhv cmUubWJveC5zaWduYWxbUkNTXSA9IEdFTjZfTk9TWU5DOwo+ICsJCQllbmdpbmUtPnNlbWFwaG9y ZS5tYm94LnNpZ25hbFtWQ1NdID0gR0VONl9WUlNZTkM7Cj4gKwkJCWVuZ2luZS0+c2VtYXBob3Jl Lm1ib3guc2lnbmFsW0JDU10gPSBHRU42X0JSU1lOQzsKPiArCQkJZW5naW5lLT5zZW1hcGhvcmUu bWJveC5zaWduYWxbVkVDU10gPSBHRU42X1ZFUlNZTkM7Cj4gKwkJCWVuZ2luZS0+c2VtYXBob3Jl Lm1ib3guc2lnbmFsW1ZDUzJdID0gR0VONl9OT1NZTkM7Cj4gICAJCX0KPiAtCX0gZWxzZSBpZiAo SVNfR0VONShkZXYpKSB7Cj4gLQkJcmluZy0+YWRkX3JlcXVlc3QgPSBwY19yZW5kZXJfYWRkX3Jl cXVlc3Q7Cj4gLQkJcmluZy0+Zmx1c2ggPSBnZW40X3JlbmRlcl9yaW5nX2ZsdXNoOwo+IC0JCXJp bmctPmdldF9zZXFubyA9IHBjX3JlbmRlcl9nZXRfc2Vxbm87Cj4gLQkJcmluZy0+c2V0X3NlcW5v ID0gcGNfcmVuZGVyX3NldF9zZXFubzsKPiAtCQlyaW5nLT5pcnFfZ2V0ID0gZ2VuNV9yaW5nX2dl dF9pcnE7Cj4gLQkJcmluZy0+aXJxX3B1dCA9IGdlbjVfcmluZ19wdXRfaXJxOwo+IC0JCXJpbmct PmlycV9lbmFibGVfbWFzayA9IEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCB8Cj4gLQkJCQkJR1Rf UkVOREVSX1BJUEVDVExfTk9USUZZX0lOVEVSUlVQVDsKPiArCX0gZWxzZSBpZiAoSVNfR0VONShk ZXZfcHJpdikpIHsKPiArCQllbmdpbmUtPmVtaXRfYnJlYWRjcnVtYiA9IGdlbjVfZW1pdF9icmVh ZGNydW1iOwo+ICsJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjRfZW1pdF9mbHVzaDsKPiArCQll bmdpbmUtPmdldF9zZXFubyA9IGdlbjVfcmVuZGVyX2dldF9zZXFubzsKPiArCQllbmdpbmUtPnNl dF9zZXFubyA9IGdlbjVfcmVuZGVyX3NldF9zZXFubzsKPiArCQllbmdpbmUtPmlycV9nZXQgPSBn ZW41X2lycV9nZXQ7Cj4gKwkJZW5naW5lLT5pcnFfcHV0ID0gZ2VuNV9pcnFfcHV0Owo+ICsJCWVu Z2luZS0+aXJxX2VuYWJsZV9tYXNrID0KPiArCQkJR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUIHwK PiArCQkJR1RfUkVOREVSX1BJUEVDVExfTk9USUZZX0lOVEVSUlVQVDsKPiAgIAl9IGVsc2Ugewo+ IC0JCXJpbmctPmFkZF9yZXF1ZXN0ID0gaTl4eF9hZGRfcmVxdWVzdDsKPiAtCQlpZiAoSU5URUxf SU5GTyhkZXYpLT5nZW4gPCA0KQo+IC0JCQlyaW5nLT5mbHVzaCA9IGdlbjJfcmVuZGVyX3Jpbmdf Zmx1c2g7Cj4gKwkJZW5naW5lLT5lbWl0X2JyZWFkY3J1bWIgPSBpOXh4X2VtaXRfYnJlYWRjcnVt YjsKPiArCQlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA8IDQpCj4gKwkJCWVuZ2luZS0+ ZW1pdF9mbHVzaCA9IGdlbjJfZW1pdF9mbHVzaDsKPiAgIAkJZWxzZQo+IC0JCQlyaW5nLT5mbHVz aCA9IGdlbjRfcmVuZGVyX3JpbmdfZmx1c2g7Cj4gLQkJcmluZy0+Z2V0X3NlcW5vID0gcmluZ19n ZXRfc2Vxbm87Cj4gLQkJcmluZy0+c2V0X3NlcW5vID0gcmluZ19zZXRfc2Vxbm87Cj4gLQkJaWYg KElTX0dFTjIoZGV2KSkgewo+IC0JCQlyaW5nLT5pcnFfZ2V0ID0gaTh4eF9yaW5nX2dldF9pcnE7 Cj4gLQkJCXJpbmctPmlycV9wdXQgPSBpOHh4X3JpbmdfcHV0X2lycTsKPiArCQkJZW5naW5lLT5l bWl0X2ZsdXNoID0gZ2VuNF9lbWl0X2ZsdXNoOwo+ICsJCWlmIChJU19HRU4yKGRldl9wcml2KSkg ewo+ICsJCQllbmdpbmUtPmlycV9nZXQgPSBpOHh4X2lycV9nZXQ7Cj4gKwkJCWVuZ2luZS0+aXJx X3B1dCA9IGk4eHhfaXJxX3B1dDsKPiAgIAkJfSBlbHNlIHsKPiAtCQkJcmluZy0+aXJxX2dldCA9 IGk5eHhfcmluZ19nZXRfaXJxOwo+IC0JCQlyaW5nLT5pcnFfcHV0ID0gaTl4eF9yaW5nX3B1dF9p cnE7Cj4gKwkJCWVuZ2luZS0+aXJxX2dldCA9IGk5eHhfaXJxX2dldDsKPiArCQkJZW5naW5lLT5p cnFfcHV0ID0gaTl4eF9pcnFfcHV0Owo+ICAgCQl9Cj4gLQkJcmluZy0+aXJxX2VuYWJsZV9tYXNr ID0gSTkxNV9VU0VSX0lOVEVSUlVQVDsKPiAtCX0KPiAtCXJpbmctPndyaXRlX3RhaWwgPSByaW5n X3dyaXRlX3RhaWw7Cj4gLQo+IC0JaWYgKElTX0hBU1dFTEwoZGV2KSkKPiAtCQlyaW5nLT5kaXNw YXRjaF9leGVjYnVmZmVyID0gaHN3X3JpbmdfZGlzcGF0Y2hfZXhlY2J1ZmZlcjsKPiAtCWVsc2Ug aWYgKElTX0dFTjgoZGV2KSkKPiAtCQlyaW5nLT5kaXNwYXRjaF9leGVjYnVmZmVyID0gZ2VuOF9y aW5nX2Rpc3BhdGNoX2V4ZWNidWZmZXI7Cj4gLQllbHNlIGlmIChJTlRFTF9JTkZPKGRldiktPmdl biA+PSA2KQo+IC0JCXJpbmctPmRpc3BhdGNoX2V4ZWNidWZmZXIgPSBnZW42X3JpbmdfZGlzcGF0 Y2hfZXhlY2J1ZmZlcjsKPiAtCWVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQpCj4g LQkJcmluZy0+ZGlzcGF0Y2hfZXhlY2J1ZmZlciA9IGk5NjVfZGlzcGF0Y2hfZXhlY2J1ZmZlcjsK PiAtCWVsc2UgaWYgKElTX0k4MzAoZGV2KSB8fCBJU184NDVHKGRldikpCj4gLQkJcmluZy0+ZGlz cGF0Y2hfZXhlY2J1ZmZlciA9IGk4MzBfZGlzcGF0Y2hfZXhlY2J1ZmZlcjsKPiArCQllbmdpbmUt PmlycV9lbmFibGVfbWFzayA9IEk5MTVfVVNFUl9JTlRFUlJVUFQ7Cj4gKwl9Cj4gKwo+ICsJaWYg KElTX0dFTjgoZGV2X3ByaXYpKQo+ICsJCWVuZ2luZS0+ZW1pdF9iYXRjaGJ1ZmZlciA9IGdlbjhf ZW1pdF9iYXRjaGJ1ZmZlcjsKPiArCWVsc2UgaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKQo+ICsJ CWVuZ2luZS0+ZW1pdF9iYXRjaGJ1ZmZlciA9IGhzd19lbWl0X2JhdGNoYnVmZmVyOwo+ICsJZWxz ZSBpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA2KQo+ICsJCWVuZ2luZS0+ZW1pdF9i YXRjaGJ1ZmZlciA9IGdlbjZfZW1pdF9iYXRjaGJ1ZmZlcjsKPiArCWVsc2UgaWYgKElOVEVMX0lO Rk8oZGV2X3ByaXYpLT5nZW4gPj0gNCkKPiArCQllbmdpbmUtPmVtaXRfYmF0Y2hidWZmZXIgPSBp OTY1X2VtaXRfYmF0Y2hidWZmZXI7Cj4gKwllbHNlIGlmIChJU19JODMwKGRldl9wcml2KSB8fCBJ U184NDVHKGRldl9wcml2KSkKPiArCQllbmdpbmUtPmVtaXRfYmF0Y2hidWZmZXIgPSBpODMwX2Vt aXRfYmF0Y2hidWZmZXI7Cj4gICAJZWxzZQo+IC0JCXJpbmctPmRpc3BhdGNoX2V4ZWNidWZmZXIg PSBpOTE1X2Rpc3BhdGNoX2V4ZWNidWZmZXI7Cj4gLQlyaW5nLT5pbml0ID0gaW5pdF9yZW5kZXJf cmluZzsKPiAtCXJpbmctPmNsZWFudXAgPSByZW5kZXJfcmluZ19jbGVhbnVwOwo+ICsJCWVuZ2lu ZS0+ZW1pdF9iYXRjaGJ1ZmZlciA9IGk5MTVfZW1pdF9iYXRjaGJ1ZmZlcjsKPiArCj4gKwllbmdp bmUtPnJlc3VtZSA9IHJlbmRlcl9yZXN1bWU7Cj4gKwllbmdpbmUtPmNsZWFudXAgPSByZW5kZXJf Y2xlYW51cDsKPiAgIAo+ICAgCS8qIFdvcmthcm91bmQgYmF0Y2hidWZmZXIgdG8gY29tYmF0IENT IHRsYiBidWcuICovCj4gLQlpZiAoSEFTX0JST0tFTl9DU19UTEIoZGV2KSkgewo+IC0JCW9iaiA9 IGk5MTVfZ2VtX2FsbG9jX29iamVjdChkZXYsIEk4MzBfQkFUQ0hfTElNSVQpOwo+ICsJaWYgKEhB U19CUk9LRU5fQ1NfVExCKGRldl9wcml2KSkgewo+ICsJCW9iaiA9IGk5MTVfZ2VtX2FsbG9jX29i amVjdChkZXZfcHJpdi0+ZGV2LCBJODMwX0JBVENIX0xJTUlUKTsKPiAgIAkJaWYgKG9iaiA9PSBO VUxMKSB7Cj4gICAJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBiYXRjaCBib1xuIik7 Cj4gICAJCQlyZXR1cm4gLUVOT01FTTsKPiBAQCAtMjM4NiwxNTggKzIwNDAsMTU1IEBAIGludCBp bnRlbF9pbml0X3JlbmRlcl9yaW5nX2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAg CQkJcmV0dXJuIHJldDsKPiAgIAkJfQo+ICAgCj4gLQkJcmluZy0+c2NyYXRjaC5vYmogPSBvYmo7 Cj4gLQkJcmluZy0+c2NyYXRjaC5ndHRfb2Zmc2V0ID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0 KG9iaik7Cj4gKwkJZW5naW5lLT5zY3JhdGNoLm9iaiA9IG9iajsKPiArCQllbmdpbmUtPnNjcmF0 Y2guZ3R0X29mZnNldCA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopOwo+ICsJfQo+ICsK PiArCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49IDUpIHsKPiArCQlyZXQgPSBpbml0 X3BpcGVfY29udHJvbChlbmdpbmUpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4g ICAJfQo+ICAgCj4gLQlyZXR1cm4gaW50ZWxfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIHJpbmcpOwo+ ICsJcmV0dXJuIGludGVsX2VuZ2luZV9lbmFibGVfZXhlY2xpc3RzKGVuZ2luZSk7Cj4gICB9Cj4g ICAKPiAtaW50IGludGVsX2luaXRfYnNkX3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCj4gK2ludCBpbnRlbF9pbml0X2JzZF9lbmdpbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSAmZGV2 X3ByaXYtPnJpbmdbVkNTXTsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9ICZk ZXZfcHJpdi0+ZW5naW5lW1ZDU107Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGludGVsX2Vu Z2luZV9pbml0KGVuZ2luZSwgZGV2X3ByaXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0 Owo+ICsKPiArCWVuZ2luZS0+bmFtZSA9ICJic2QgcmluZyI7Cj4gKwllbmdpbmUtPmlkID0gVkNT Owo+ICsJZW5naW5lLT5wb3dlcl9kb21haW5zID0gRk9SQ0VXQUtFX01FRElBOwo+ICAgCj4gLQly aW5nLT5uYW1lID0gImJzZCByaW5nIjsKPiAtCXJpbmctPmlkID0gVkNTOwo+ICsJaWYgKElOVEVM X0lORk8oZGV2X3ByaXYpLT5nZW4gPj0gNikgewo+ICsJCWVuZ2luZS0+bW1pb19iYXNlID0gR0VO Nl9CU0RfUklOR19CQVNFOwo+ICAgCj4gLQlyaW5nLT53cml0ZV90YWlsID0gcmluZ193cml0ZV90 YWlsOwo+IC0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDYpIHsKPiAtCQlyaW5nLT5tbWlv X2Jhc2UgPSBHRU42X0JTRF9SSU5HX0JBU0U7Cj4gICAJCS8qIGdlbjYgYnNkIG5lZWRzIGEgc3Bl Y2lhbCB3YSBmb3IgdGFpbCB1cGRhdGVzICovCj4gLQkJaWYgKElTX0dFTjYoZGV2KSkKPiAtCQkJ cmluZy0+d3JpdGVfdGFpbCA9IGdlbjZfYnNkX3Jpbmdfd3JpdGVfdGFpbDsKPiAtCQlyaW5nLT5m bHVzaCA9IGdlbjZfYnNkX3JpbmdfZmx1c2g7Cj4gLQkJcmluZy0+YWRkX3JlcXVlc3QgPSBnZW42 X2FkZF9yZXF1ZXN0Owo+IC0JCXJpbmctPmdldF9zZXFubyA9IGdlbjZfcmluZ19nZXRfc2Vxbm87 Cj4gLQkJcmluZy0+c2V0X3NlcW5vID0gcmluZ19zZXRfc2Vxbm87Cj4gLQkJaWYgKElOVEVMX0lO Rk8oZGV2KS0+Z2VuID49IDgpIHsKPiAtCQkJcmluZy0+aXJxX2VuYWJsZV9tYXNrID0KPiArCQlp ZiAoSVNfR0VONihkZXZfcHJpdikpCj4gKwkJCWVuZ2luZS0+d3JpdGVfdGFpbCA9IGdlbjZfYnNk X3Jpbmdfd3JpdGVfdGFpbDsKPiArCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW42X2JzZF9lbWl0 X2ZsdXNoOwo+ICsJCWVuZ2luZS0+ZW1pdF9icmVhZGNydW1iID0gaTl4eF9lbWl0X2JyZWFkY3J1 bWI7Cj4gKwkJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4gPj0gOCkgewo+ICsJCQllbmdp bmUtPmlycV9lbmFibGVfbWFzayA9Cj4gICAJCQkJR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUIDw8 IEdFTjhfVkNTMV9JUlFfU0hJRlQ7Cj4gLQkJCXJpbmctPmlycV9nZXQgPSBnZW44X3JpbmdfZ2V0 X2lycTsKPiAtCQkJcmluZy0+aXJxX3B1dCA9IGdlbjhfcmluZ19wdXRfaXJxOwo+IC0JCQlyaW5n LT5kaXNwYXRjaF9leGVjYnVmZmVyID0KPiAtCQkJCWdlbjhfcmluZ19kaXNwYXRjaF9leGVjYnVm ZmVyOwo+IC0JCQlpZiAoaTkxNV9zZW1hcGhvcmVfaXNfZW5hYmxlZChkZXYpKSB7Cj4gLQkJCQly aW5nLT5zZW1hcGhvcmUuc3luY190byA9IGdlbjhfcmluZ19zeW5jOwo+IC0JCQkJcmluZy0+c2Vt YXBob3JlLnNpZ25hbCA9IGdlbjhfeGNzX3NpZ25hbDsKPiAtCQkJCUdFTjhfUklOR19TRU1BUEhP UkVfSU5JVDsKPiAtCQkJfQo+ICsJCQllbmdpbmUtPmlycV9nZXQgPSBnZW44X2lycV9nZXQ7Cj4g KwkJCWVuZ2luZS0+aXJxX3B1dCA9IGdlbjhfaXJxX3B1dDsKPiArCQkJZW5naW5lLT5lbWl0X2Jh dGNoYnVmZmVyID0gZ2VuOF9lbWl0X2JhdGNoYnVmZmVyOwo+ICsJCQlnZW44X2VuZ2luZV9pbml0 X3NlbWFwaG9yZShlbmdpbmUpOwo+ICAgCQl9IGVsc2Ugewo+IC0JCQlyaW5nLT5pcnFfZW5hYmxl X21hc2sgPSBHVF9CU0RfVVNFUl9JTlRFUlJVUFQ7Cj4gLQkJCXJpbmctPmlycV9nZXQgPSBnZW42 X3JpbmdfZ2V0X2lycTsKPiAtCQkJcmluZy0+aXJxX3B1dCA9IGdlbjZfcmluZ19wdXRfaXJxOwo+ IC0JCQlyaW5nLT5kaXNwYXRjaF9leGVjYnVmZmVyID0KPiAtCQkJCWdlbjZfcmluZ19kaXNwYXRj aF9leGVjYnVmZmVyOwo+IC0JCQlpZiAoaTkxNV9zZW1hcGhvcmVfaXNfZW5hYmxlZChkZXYpKSB7 Cj4gLQkJCQlyaW5nLT5zZW1hcGhvcmUuc3luY190byA9IGdlbjZfcmluZ19zeW5jOwo+IC0JCQkJ cmluZy0+c2VtYXBob3JlLnNpZ25hbCA9IGdlbjZfc2lnbmFsOwo+IC0JCQkJcmluZy0+c2VtYXBo b3JlLm1ib3gud2FpdFtSQ1NdID0gTUlfU0VNQVBIT1JFX1NZTkNfVlI7Cj4gLQkJCQlyaW5nLT5z ZW1hcGhvcmUubWJveC53YWl0W1ZDU10gPSBNSV9TRU1BUEhPUkVfU1lOQ19JTlZBTElEOwo+IC0J CQkJcmluZy0+c2VtYXBob3JlLm1ib3gud2FpdFtCQ1NdID0gTUlfU0VNQVBIT1JFX1NZTkNfVkI7 Cj4gLQkJCQlyaW5nLT5zZW1hcGhvcmUubWJveC53YWl0W1ZFQ1NdID0gTUlfU0VNQVBIT1JFX1NZ TkNfVlZFOwo+IC0JCQkJcmluZy0+c2VtYXBob3JlLm1ib3gud2FpdFtWQ1MyXSA9IE1JX1NFTUFQ SE9SRV9TWU5DX0lOVkFMSUQ7Cj4gLQkJCQlyaW5nLT5zZW1hcGhvcmUubWJveC5zaWduYWxbUkNT XSA9IEdFTjZfUlZTWU5DOwo+IC0JCQkJcmluZy0+c2VtYXBob3JlLm1ib3guc2lnbmFsW1ZDU10g PSBHRU42X05PU1lOQzsKPiAtCQkJCXJpbmctPnNlbWFwaG9yZS5tYm94LnNpZ25hbFtCQ1NdID0g R0VONl9CVlNZTkM7Cj4gLQkJCQlyaW5nLT5zZW1hcGhvcmUubWJveC5zaWduYWxbVkVDU10gPSBH RU42X1ZFVlNZTkM7Cj4gLQkJCQlyaW5nLT5zZW1hcGhvcmUubWJveC5zaWduYWxbVkNTMl0gPSBH RU42X05PU1lOQzsKPiArCQkJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBHVF9CU0RfVVNFUl9J TlRFUlJVUFQ7Cj4gKwkJCWVuZ2luZS0+aXJxX2dldCA9IGdlbjZfaXJxX2dldDsKPiArCQkJZW5n aW5lLT5pcnFfYmFycmllciA9IGdlbjZfaXJxX2JhcnJpZXI7Cj4gKwkJCWVuZ2luZS0+aXJxX3B1 dCA9IGdlbjZfaXJxX3B1dDsKPiArCQkJZW5naW5lLT5lbWl0X2JhdGNoYnVmZmVyID0gZ2VuNl9l bWl0X2JhdGNoYnVmZmVyOwo+ICsJCQlpZiAoc2VtYXBob3Jlc19lbmFibGVkKGRldl9wcml2KSkg ewo+ICsJCQkJZW5naW5lLT5zZW1hcGhvcmUud2FpdCA9IGdlbjZfZW1pdF93YWl0Owo+ICsJCQkJ ZW5naW5lLT5zZW1hcGhvcmUuc2lnbmFsID0gZ2VuNl9lbWl0X3NpZ25hbDsKPiArCQkJCWVuZ2lu ZS0+c2VtYXBob3JlLm1ib3gud2FpdFtSQ1NdID0gTUlfU0VNQVBIT1JFX1NZTkNfVlI7Cj4gKwkJ CQllbmdpbmUtPnNlbWFwaG9yZS5tYm94LndhaXRbVkNTXSA9IE1JX1NFTUFQSE9SRV9TWU5DX0lO VkFMSUQ7Cj4gKwkJCQllbmdpbmUtPnNlbWFwaG9yZS5tYm94LndhaXRbQkNTXSA9IE1JX1NFTUFQ SE9SRV9TWU5DX1ZCOwo+ICsJCQkJZW5naW5lLT5zZW1hcGhvcmUubWJveC53YWl0W1ZFQ1NdID0g TUlfU0VNQVBIT1JFX1NZTkNfVlZFOwo+ICsJCQkJZW5naW5lLT5zZW1hcGhvcmUubWJveC53YWl0 W1ZDUzJdID0gTUlfU0VNQVBIT1JFX1NZTkNfSU5WQUxJRDsKPiArCQkJCWVuZ2luZS0+c2VtYXBo b3JlLm1ib3guc2lnbmFsW1JDU10gPSBHRU42X1JWU1lOQzsKPiArCQkJCWVuZ2luZS0+c2VtYXBo b3JlLm1ib3guc2lnbmFsW1ZDU10gPSBHRU42X05PU1lOQzsKPiArCQkJCWVuZ2luZS0+c2VtYXBo b3JlLm1ib3guc2lnbmFsW0JDU10gPSBHRU42X0JWU1lOQzsKPiArCQkJCWVuZ2luZS0+c2VtYXBo b3JlLm1ib3guc2lnbmFsW1ZFQ1NdID0gR0VONl9WRVZTWU5DOwo+ICsJCQkJZW5naW5lLT5zZW1h cGhvcmUubWJveC5zaWduYWxbVkNTMl0gPSBHRU42X05PU1lOQzsKPiAgIAkJCX0KPiAgIAkJfQo+ ICAgCX0gZWxzZSB7Cj4gLQkJcmluZy0+bW1pb19iYXNlID0gQlNEX1JJTkdfQkFTRTsKPiAtCQly aW5nLT5mbHVzaCA9IGJzZF9yaW5nX2ZsdXNoOwo+IC0JCXJpbmctPmFkZF9yZXF1ZXN0ID0gaTl4 eF9hZGRfcmVxdWVzdDsKPiAtCQlyaW5nLT5nZXRfc2Vxbm8gPSByaW5nX2dldF9zZXFubzsKPiAt CQlyaW5nLT5zZXRfc2Vxbm8gPSByaW5nX3NldF9zZXFubzsKPiAtCQlpZiAoSVNfR0VONShkZXYp KSB7Cj4gLQkJCXJpbmctPmlycV9lbmFibGVfbWFzayA9IElMS19CU0RfVVNFUl9JTlRFUlJVUFQ7 Cj4gLQkJCXJpbmctPmlycV9nZXQgPSBnZW41X3JpbmdfZ2V0X2lycTsKPiAtCQkJcmluZy0+aXJx X3B1dCA9IGdlbjVfcmluZ19wdXRfaXJxOwo+ICsJCWVuZ2luZS0+bW1pb19iYXNlID0gQlNEX1JJ TkdfQkFTRTsKPiArCj4gKwkJZW5naW5lLT5lbWl0X2ZsdXNoID0gYnNkX2VtaXRfZmx1c2g7Cj4g KwkJZW5naW5lLT5lbWl0X2JyZWFkY3J1bWIgPSBpOXh4X2VtaXRfYnJlYWRjcnVtYjsKPiArCQlp ZiAoSVNfR0VONShkZXZfcHJpdikpIHsKPiArCQkJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBJ TEtfQlNEX1VTRVJfSU5URVJSVVBUOwo+ICsJCQllbmdpbmUtPmlycV9nZXQgPSBnZW41X2lycV9n ZXQ7Cj4gKwkJCWVuZ2luZS0+aXJxX3B1dCA9IGdlbjVfaXJxX3B1dDsKPiAgIAkJfSBlbHNlIHsK PiAtCQkJcmluZy0+aXJxX2VuYWJsZV9tYXNrID0gSTkxNV9CU0RfVVNFUl9JTlRFUlJVUFQ7Cj4g LQkJCXJpbmctPmlycV9nZXQgPSBpOXh4X3JpbmdfZ2V0X2lycTsKPiAtCQkJcmluZy0+aXJxX3B1 dCA9IGk5eHhfcmluZ19wdXRfaXJxOwo+ICsJCQllbmdpbmUtPmlycV9lbmFibGVfbWFzayA9IEk5 MTVfQlNEX1VTRVJfSU5URVJSVVBUOwo+ICsJCQllbmdpbmUtPmlycV9nZXQgPSBpOXh4X2lycV9n ZXQ7Cj4gKwkJCWVuZ2luZS0+aXJxX3B1dCA9IGk5eHhfaXJxX3B1dDsKPiAgIAkJfQo+IC0JCXJp bmctPmRpc3BhdGNoX2V4ZWNidWZmZXIgPSBpOTY1X2Rpc3BhdGNoX2V4ZWNidWZmZXI7Cj4gKwkJ ZW5naW5lLT5lbWl0X2JhdGNoYnVmZmVyID0gaTk2NV9lbWl0X2JhdGNoYnVmZmVyOwo+ICAgCX0K PiAtCXJpbmctPmluaXQgPSBpbml0X3JpbmdfY29tbW9uOwo+ICAgCj4gLQlyZXR1cm4gaW50ZWxf aW5pdF9yaW5nX2J1ZmZlcihkZXYsIHJpbmcpOwo+ICsJcmV0dXJuIGludGVsX2VuZ2luZV9lbmFi bGVfZXhlY2xpc3RzKGVuZ2luZSk7Cj4gICB9Cj4gICAKPiAgIC8qKgo+ICAgICogSW5pdGlhbGl6 ZSB0aGUgc2Vjb25kIEJTRCByaW5nIGZvciBCcm9hZHdlbGwgR1QzLgo+ICAgICogSXQgaXMgbm90 ZWQgdGhhdCB0aGlzIG9ubHkgZXhpc3RzIG9uIEJyb2Fkd2VsbCBHVDMuCj4gICAgKi8KPiAtaW50 IGludGVsX2luaXRfYnNkMl9yaW5nX2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICtp bnQgaW50ZWxfaW5pdF9ic2QyX2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9ICZkZXZfcHJpdi0+ cmluZ1tWQ1MyXTsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9ICZkZXZfcHJp di0+ZW5naW5lW1ZDUzJdOwo+ICsJaW50IHJldDsKPiAgIAo+IC0JaWYgKChJTlRFTF9JTkZPKGRl diktPmdlbiAhPSA4KSkgewo+ICsJaWYgKChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuICE9IDgp KSB7Cj4gICAJCURSTV9FUlJPUigiTm8gZHVhbC1CU0QgcmluZyBvbiBub24tQkRXIG1hY2hpbmVc biIpOwo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAl9Cj4gICAKPiAtCXJpbmctPm5hbWUgPSAi YnNkMiByaW5nIjsKPiAtCXJpbmctPmlkID0gVkNTMjsKPiArCXJldCA9IGludGVsX2VuZ2luZV9p bml0KGVuZ2luZSwgZGV2X3ByaXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsK PiArCWVuZ2luZS0+bmFtZSA9ICJic2QyIHJpbmciOwo+ICsJZW5naW5lLT5pZCA9IFZDUzI7Cj4g KwllbmdpbmUtPnBvd2VyX2RvbWFpbnMgPSBGT1JDRVdBS0VfTUVESUE7Cj4gKwllbmdpbmUtPm1t aW9fYmFzZSA9IEdFTjhfQlNEMl9SSU5HX0JBU0U7Cj4gICAKPiAtCXJpbmctPndyaXRlX3RhaWwg PSByaW5nX3dyaXRlX3RhaWw7Cj4gLQlyaW5nLT5tbWlvX2Jhc2UgPSBHRU44X0JTRDJfUklOR19C QVNFOwo+IC0JcmluZy0+Zmx1c2ggPSBnZW42X2JzZF9yaW5nX2ZsdXNoOwo+IC0JcmluZy0+YWRk X3JlcXVlc3QgPSBnZW42X2FkZF9yZXF1ZXN0Owo+IC0JcmluZy0+Z2V0X3NlcW5vID0gZ2VuNl9y aW5nX2dldF9zZXFubzsKPiAtCXJpbmctPnNldF9zZXFubyA9IHJpbmdfc2V0X3NlcW5vOwo+IC0J cmluZy0+aXJxX2VuYWJsZV9tYXNrID0KPiArCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjZfYnNk X2VtaXRfZmx1c2g7Cj4gKwllbmdpbmUtPmVtaXRfYnJlYWRjcnVtYiA9IGk5eHhfZW1pdF9icmVh ZGNydW1iOwo+ICsJZW5naW5lLT5lbWl0X2JhdGNoYnVmZmVyID0gZ2VuOF9lbWl0X2JhdGNoYnVm ZmVyOwo+ICsJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPQo+ICAgCQkJR1RfUkVOREVSX1VTRVJf SU5URVJSVVBUIDw8IEdFTjhfVkNTMl9JUlFfU0hJRlQ7Cj4gLQlyaW5nLT5pcnFfZ2V0ID0gZ2Vu OF9yaW5nX2dldF9pcnE7Cj4gLQlyaW5nLT5pcnFfcHV0ID0gZ2VuOF9yaW5nX3B1dF9pcnE7Cj4g LQlyaW5nLT5kaXNwYXRjaF9leGVjYnVmZmVyID0KPiAtCQkJZ2VuOF9yaW5nX2Rpc3BhdGNoX2V4 ZWNidWZmZXI7Cj4gLQlpZiAoaTkxNV9zZW1hcGhvcmVfaXNfZW5hYmxlZChkZXYpKSB7Cj4gLQkJ cmluZy0+c2VtYXBob3JlLnN5bmNfdG8gPSBnZW44X3Jpbmdfc3luYzsKPiAtCQlyaW5nLT5zZW1h cGhvcmUuc2lnbmFsID0gZ2VuOF94Y3Nfc2lnbmFsOwo+IC0JCUdFTjhfUklOR19TRU1BUEhPUkVf SU5JVDsKPiAtCX0KPiAtCXJpbmctPmluaXQgPSBpbml0X3JpbmdfY29tbW9uOwo+ICsJZW5naW5l LT5pcnFfZ2V0ID0gZ2VuOF9pcnFfZ2V0Owo+ICsJZW5naW5lLT5pcnFfcHV0ID0gZ2VuOF9pcnFf cHV0Owo+ICsJZ2VuOF9lbmdpbmVfaW5pdF9zZW1hcGhvcmUoZW5naW5lKTsKPiAgIAo+IC0JcmV0 dXJuIGludGVsX2luaXRfcmluZ19idWZmZXIoZGV2LCByaW5nKTsKPiArCXJldHVybiBpbnRlbF9l bmdpbmVfZW5hYmxlX2V4ZWNsaXN0cyhlbmdpbmUpOwo+ICAgfQo+ICAgCj4gLWludCBpbnRlbF9p bml0X2JsdF9yaW5nX2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICtpbnQgaW50ZWxf aW5pdF9ibHRfZW5naW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIHsK PiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7 Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nID0gJmRldl9wcml2LT5yaW5nW0JDU107 Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSAmZGV2X3ByaXYtPmVuZ2luZVtC Q1NdOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBpbnRlbF9lbmdpbmVfaW5pdChlbmdpbmUs IGRldl9wcml2KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiAgIAo+IC0JcmluZy0+ bmFtZSA9ICJibGl0dGVyIHJpbmciOwo+IC0JcmluZy0+aWQgPSBCQ1M7Cj4gKwllbmdpbmUtPm5h bWUgPSAiYmxpdHRlciByaW5nIjsKPiArCWVuZ2luZS0+aWQgPSBCQ1M7Cj4gKwllbmdpbmUtPnBv d2VyX2RvbWFpbnMgPSBGT1JDRVdBS0VfTUVESUE7Cj4gKwllbmdpbmUtPm1taW9fYmFzZSA9IEJM VF9SSU5HX0JBU0U7Cj4gICAKPiAtCXJpbmctPm1taW9fYmFzZSA9IEJMVF9SSU5HX0JBU0U7Cj4g LQlyaW5nLT53cml0ZV90YWlsID0gcmluZ193cml0ZV90YWlsOwo+IC0JcmluZy0+Zmx1c2ggPSBn ZW42X3JpbmdfZmx1c2g7Cj4gLQlyaW5nLT5hZGRfcmVxdWVzdCA9IGdlbjZfYWRkX3JlcXVlc3Q7 Cj4gLQlyaW5nLT5nZXRfc2Vxbm8gPSBnZW42X3JpbmdfZ2V0X3NlcW5vOwo+IC0JcmluZy0+c2V0 X3NlcW5vID0gcmluZ19zZXRfc2Vxbm87Cj4gLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0g OCkgewo+IC0JCXJpbmctPmlycV9lbmFibGVfbWFzayA9Cj4gKwllbmdpbmUtPmVtaXRfZmx1c2gg PSBnZW42X2JsdF9lbWl0X2ZsdXNoOwo+ICsJZW5naW5lLT5lbWl0X2JyZWFkY3J1bWIgPSBpOXh4 X2VtaXRfYnJlYWRjcnVtYjsKPiArCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49IDgp IHsKPiArCQllbmdpbmUtPmlycV9lbmFibGVfbWFzayA9Cj4gICAJCQlHVF9SRU5ERVJfVVNFUl9J TlRFUlJVUFQgPDwgR0VOOF9CQ1NfSVJRX1NISUZUOwo+IC0JCXJpbmctPmlycV9nZXQgPSBnZW44 X3JpbmdfZ2V0X2lycTsKPiAtCQlyaW5nLT5pcnFfcHV0ID0gZ2VuOF9yaW5nX3B1dF9pcnE7Cj4g LQkJcmluZy0+ZGlzcGF0Y2hfZXhlY2J1ZmZlciA9IGdlbjhfcmluZ19kaXNwYXRjaF9leGVjYnVm ZmVyOwo+IC0JCWlmIChpOTE1X3NlbWFwaG9yZV9pc19lbmFibGVkKGRldikpIHsKPiAtCQkJcmlu Zy0+c2VtYXBob3JlLnN5bmNfdG8gPSBnZW44X3Jpbmdfc3luYzsKPiAtCQkJcmluZy0+c2VtYXBo b3JlLnNpZ25hbCA9IGdlbjhfeGNzX3NpZ25hbDsKPiAtCQkJR0VOOF9SSU5HX1NFTUFQSE9SRV9J TklUOwo+IC0JCX0KPiArCQllbmdpbmUtPmlycV9nZXQgPSBnZW44X2lycV9nZXQ7Cj4gKwkJZW5n aW5lLT5pcnFfcHV0ID0gZ2VuOF9pcnFfcHV0Owo+ICsJCWVuZ2luZS0+ZW1pdF9iYXRjaGJ1ZmZl ciA9IGdlbjhfZW1pdF9iYXRjaGJ1ZmZlcjsKPiArCQlnZW44X2VuZ2luZV9pbml0X3NlbWFwaG9y ZShlbmdpbmUpOwo+ICAgCX0gZWxzZSB7Cj4gLQkJcmluZy0+aXJxX2VuYWJsZV9tYXNrID0gR1Rf QkxUX1VTRVJfSU5URVJSVVBUOwo+IC0JCXJpbmctPmlycV9nZXQgPSBnZW42X3JpbmdfZ2V0X2ly cTsKPiAtCQlyaW5nLT5pcnFfcHV0ID0gZ2VuNl9yaW5nX3B1dF9pcnE7Cj4gLQkJcmluZy0+ZGlz cGF0Y2hfZXhlY2J1ZmZlciA9IGdlbjZfcmluZ19kaXNwYXRjaF9leGVjYnVmZmVyOwo+IC0JCWlm IChpOTE1X3NlbWFwaG9yZV9pc19lbmFibGVkKGRldikpIHsKPiAtCQkJcmluZy0+c2VtYXBob3Jl LnNpZ25hbCA9IGdlbjZfc2lnbmFsOwo+IC0JCQlyaW5nLT5zZW1hcGhvcmUuc3luY190byA9IGdl bjZfcmluZ19zeW5jOwo+ICsJCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gR1RfQkxUX1VTRVJf SU5URVJSVVBUOwo+ICsJCWVuZ2luZS0+aXJxX2dldCA9IGdlbjZfaXJxX2dldDsKPiArCQllbmdp bmUtPmlycV9iYXJyaWVyID0gZ2VuNl9pcnFfYmFycmllcjsKPiArCQllbmdpbmUtPmlycV9wdXQg PSBnZW42X2lycV9wdXQ7Cj4gKwkJZW5naW5lLT5lbWl0X2JhdGNoYnVmZmVyID0gZ2VuNl9lbWl0 X2JhdGNoYnVmZmVyOwo+ICsJCWlmIChzZW1hcGhvcmVzX2VuYWJsZWQoZGV2X3ByaXYpKSB7Cj4g KwkJCWVuZ2luZS0+c2VtYXBob3JlLnNpZ25hbCA9IGdlbjZfZW1pdF9zaWduYWw7Cj4gKwkJCWVu Z2luZS0+c2VtYXBob3JlLndhaXQgPSBnZW42X2VtaXRfd2FpdDsKPiAgIAkJCS8qCj4gICAJCQkg KiBUaGUgY3VycmVudCBzZW1hcGhvcmUgaXMgb25seSBhcHBsaWVkIG9uIHByZS1nZW44Cj4gICAJ CQkgKiBwbGF0Zm9ybS4gIEFuZCB0aGVyZSBpcyBubyBWQ1MyIHJpbmcgb24gdGhlIHByZS1nZW44 Cj4gQEAgLTI1NDUsMTI0ICsyMTk2LDUxMCBAQCBpbnQgaW50ZWxfaW5pdF9ibHRfcmluZ19idWZm ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIAkJCSAqIGluaXRpYWxpemVkIGFzIElOVkFM SUQuICBHZW44IHdpbGwgaW5pdGlhbGl6ZSB0aGUKPiAgIAkJCSAqIHNlbWEgYmV0d2VlbiBCQ1Mg YW5kIFZDUzIgbGF0ZXIuCj4gICAJCQkgKi8KPiAtCQkJcmluZy0+c2VtYXBob3JlLm1ib3gud2Fp dFtSQ1NdID0gTUlfU0VNQVBIT1JFX1NZTkNfQlI7Cj4gLQkJCXJpbmctPnNlbWFwaG9yZS5tYm94 LndhaXRbVkNTXSA9IE1JX1NFTUFQSE9SRV9TWU5DX0JWOwo+IC0JCQlyaW5nLT5zZW1hcGhvcmUu bWJveC53YWl0W0JDU10gPSBNSV9TRU1BUEhPUkVfU1lOQ19JTlZBTElEOwo+IC0JCQlyaW5nLT5z ZW1hcGhvcmUubWJveC53YWl0W1ZFQ1NdID0gTUlfU0VNQVBIT1JFX1NZTkNfQlZFOwo+IC0JCQly aW5nLT5zZW1hcGhvcmUubWJveC53YWl0W1ZDUzJdID0gTUlfU0VNQVBIT1JFX1NZTkNfSU5WQUxJ RDsKPiAtCQkJcmluZy0+c2VtYXBob3JlLm1ib3guc2lnbmFsW1JDU10gPSBHRU42X1JCU1lOQzsK PiAtCQkJcmluZy0+c2VtYXBob3JlLm1ib3guc2lnbmFsW1ZDU10gPSBHRU42X1ZCU1lOQzsKPiAt CQkJcmluZy0+c2VtYXBob3JlLm1ib3guc2lnbmFsW0JDU10gPSBHRU42X05PU1lOQzsKPiAtCQkJ cmluZy0+c2VtYXBob3JlLm1ib3guc2lnbmFsW1ZFQ1NdID0gR0VONl9WRUJTWU5DOwo+IC0JCQly aW5nLT5zZW1hcGhvcmUubWJveC5zaWduYWxbVkNTMl0gPSBHRU42X05PU1lOQzsKPiArCQkJZW5n aW5lLT5zZW1hcGhvcmUubWJveC53YWl0W1JDU10gPSBNSV9TRU1BUEhPUkVfU1lOQ19CUjsKPiAr CQkJZW5naW5lLT5zZW1hcGhvcmUubWJveC53YWl0W1ZDU10gPSBNSV9TRU1BUEhPUkVfU1lOQ19C VjsKPiArCQkJZW5naW5lLT5zZW1hcGhvcmUubWJveC53YWl0W0JDU10gPSBNSV9TRU1BUEhPUkVf U1lOQ19JTlZBTElEOwo+ICsJCQllbmdpbmUtPnNlbWFwaG9yZS5tYm94LndhaXRbVkVDU10gPSBN SV9TRU1BUEhPUkVfU1lOQ19CVkU7Cj4gKwkJCWVuZ2luZS0+c2VtYXBob3JlLm1ib3gud2FpdFtW Q1MyXSA9IE1JX1NFTUFQSE9SRV9TWU5DX0lOVkFMSUQ7Cj4gKwkJCWVuZ2luZS0+c2VtYXBob3Jl Lm1ib3guc2lnbmFsW1JDU10gPSBHRU42X1JCU1lOQzsKPiArCQkJZW5naW5lLT5zZW1hcGhvcmUu bWJveC5zaWduYWxbVkNTXSA9IEdFTjZfVkJTWU5DOwo+ICsJCQllbmdpbmUtPnNlbWFwaG9yZS5t Ym94LnNpZ25hbFtCQ1NdID0gR0VONl9OT1NZTkM7Cj4gKwkJCWVuZ2luZS0+c2VtYXBob3JlLm1i b3guc2lnbmFsW1ZFQ1NdID0gR0VONl9WRUJTWU5DOwo+ICsJCQllbmdpbmUtPnNlbWFwaG9yZS5t Ym94LnNpZ25hbFtWQ1MyXSA9IEdFTjZfTk9TWU5DOwo+ICAgCQl9Cj4gICAJfQo+IC0JcmluZy0+ aW5pdCA9IGluaXRfcmluZ19jb21tb247Cj4gICAKPiAtCXJldHVybiBpbnRlbF9pbml0X3Jpbmdf YnVmZmVyKGRldiwgcmluZyk7Cj4gKwlyZXR1cm4gaW50ZWxfZW5naW5lX2VuYWJsZV9leGVjbGlz dHMoZW5naW5lKTsKPiAgIH0KPiAgIAo+IC1pbnQgaW50ZWxfaW5pdF92ZWJveF9yaW5nX2J1ZmZl cihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICtpbnQgaW50ZWxfaW5pdF92ZWJveF9lbmdpbmUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgewo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbVkVDU107Cj4gKwlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUgPSAmZGV2X3ByaXYtPmVuZ2luZVtWRUNTXTsKPiArCWludCBy ZXQ7Cj4gICAKPiAtCXJpbmctPm5hbWUgPSAidmlkZW8gZW5oYW5jZW1lbnQgcmluZyI7Cj4gLQly aW5nLT5pZCA9IFZFQ1M7Cj4gKwlyZXQgPSBpbnRlbF9lbmdpbmVfaW5pdChlbmdpbmUsIGRldl9w cml2KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiAgIAo+IC0JcmluZy0+bW1pb19i YXNlID0gVkVCT1hfUklOR19CQVNFOwo+IC0JcmluZy0+d3JpdGVfdGFpbCA9IHJpbmdfd3JpdGVf dGFpbDsKPiAtCXJpbmctPmZsdXNoID0gZ2VuNl9yaW5nX2ZsdXNoOwo+IC0JcmluZy0+YWRkX3Jl cXVlc3QgPSBnZW42X2FkZF9yZXF1ZXN0Owo+IC0JcmluZy0+Z2V0X3NlcW5vID0gZ2VuNl9yaW5n X2dldF9zZXFubzsKPiAtCXJpbmctPnNldF9zZXFubyA9IHJpbmdfc2V0X3NlcW5vOwo+ICsJZW5n aW5lLT5uYW1lID0gInZpZGVvIGVuaGFuY2VtZW50IHJpbmciOwo+ICsJZW5naW5lLT5pZCA9IFZF Q1M7Cj4gKwllbmdpbmUtPnBvd2VyX2RvbWFpbnMgPSBGT1JDRVdBS0VfTUVESUE7Cj4gKwllbmdp bmUtPm1taW9fYmFzZSA9IFZFQk9YX1JJTkdfQkFTRTsKPiAgIAo+IC0JaWYgKElOVEVMX0lORk8o ZGV2KS0+Z2VuID49IDgpIHsKPiAtCQlyaW5nLT5pcnFfZW5hYmxlX21hc2sgPQo+ICsJZW5naW5l LT5lbWl0X2ZsdXNoID0gZ2VuNl9ibHRfZW1pdF9mbHVzaDsKPiArCWVuZ2luZS0+ZW1pdF9icmVh ZGNydW1iID0gaTl4eF9lbWl0X2JyZWFkY3J1bWI7Cj4gKwo+ICsJaWYgKElOVEVMX0lORk8oZGV2 X3ByaXYpLT5nZW4gPj0gOCkgewo+ICsJCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0KPiAgIAkJ CUdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCA8PCBHRU44X1ZFQ1NfSVJRX1NISUZUOwo+IC0JCXJp bmctPmlycV9nZXQgPSBnZW44X3JpbmdfZ2V0X2lycTsKPiAtCQlyaW5nLT5pcnFfcHV0ID0gZ2Vu OF9yaW5nX3B1dF9pcnE7Cj4gLQkJcmluZy0+ZGlzcGF0Y2hfZXhlY2J1ZmZlciA9IGdlbjhfcmlu Z19kaXNwYXRjaF9leGVjYnVmZmVyOwo+IC0JCWlmIChpOTE1X3NlbWFwaG9yZV9pc19lbmFibGVk KGRldikpIHsKPiAtCQkJcmluZy0+c2VtYXBob3JlLnN5bmNfdG8gPSBnZW44X3Jpbmdfc3luYzsK PiAtCQkJcmluZy0+c2VtYXBob3JlLnNpZ25hbCA9IGdlbjhfeGNzX3NpZ25hbDsKPiAtCQkJR0VO OF9SSU5HX1NFTUFQSE9SRV9JTklUOwo+IC0JCX0KPiArCQllbmdpbmUtPmlycV9nZXQgPSBnZW44 X2lycV9nZXQ7Cj4gKwkJZW5naW5lLT5pcnFfcHV0ID0gZ2VuOF9pcnFfcHV0Owo+ICsJCWVuZ2lu ZS0+ZW1pdF9iYXRjaGJ1ZmZlciA9IGdlbjhfZW1pdF9iYXRjaGJ1ZmZlcjsKPiArCQlnZW44X2Vu Z2luZV9pbml0X3NlbWFwaG9yZShlbmdpbmUpOwo+ICAgCX0gZWxzZSB7Cj4gLQkJcmluZy0+aXJx X2VuYWJsZV9tYXNrID0gUE1fVkVCT1hfVVNFUl9JTlRFUlJVUFQ7Cj4gLQkJcmluZy0+aXJxX2dl dCA9IGhzd192ZWJveF9nZXRfaXJxOwo+IC0JCXJpbmctPmlycV9wdXQgPSBoc3dfdmVib3hfcHV0 X2lycTsKPiAtCQlyaW5nLT5kaXNwYXRjaF9leGVjYnVmZmVyID0gZ2VuNl9yaW5nX2Rpc3BhdGNo X2V4ZWNidWZmZXI7Cj4gLQkJaWYgKGk5MTVfc2VtYXBob3JlX2lzX2VuYWJsZWQoZGV2KSkgewo+ IC0JCQlyaW5nLT5zZW1hcGhvcmUuc3luY190byA9IGdlbjZfcmluZ19zeW5jOwo+IC0JCQlyaW5n LT5zZW1hcGhvcmUuc2lnbmFsID0gZ2VuNl9zaWduYWw7Cj4gLQkJCXJpbmctPnNlbWFwaG9yZS5t Ym94LndhaXRbUkNTXSA9IE1JX1NFTUFQSE9SRV9TWU5DX1ZFUjsKPiAtCQkJcmluZy0+c2VtYXBo b3JlLm1ib3gud2FpdFtWQ1NdID0gTUlfU0VNQVBIT1JFX1NZTkNfVkVWOwo+IC0JCQlyaW5nLT5z ZW1hcGhvcmUubWJveC53YWl0W0JDU10gPSBNSV9TRU1BUEhPUkVfU1lOQ19WRUI7Cj4gLQkJCXJp bmctPnNlbWFwaG9yZS5tYm94LndhaXRbVkVDU10gPSBNSV9TRU1BUEhPUkVfU1lOQ19JTlZBTElE Owo+IC0JCQlyaW5nLT5zZW1hcGhvcmUubWJveC53YWl0W1ZDUzJdID0gTUlfU0VNQVBIT1JFX1NZ TkNfSU5WQUxJRDsKPiAtCQkJcmluZy0+c2VtYXBob3JlLm1ib3guc2lnbmFsW1JDU10gPSBHRU42 X1JWRVNZTkM7Cj4gLQkJCXJpbmctPnNlbWFwaG9yZS5tYm94LnNpZ25hbFtWQ1NdID0gR0VONl9W VkVTWU5DOwo+IC0JCQlyaW5nLT5zZW1hcGhvcmUubWJveC5zaWduYWxbQkNTXSA9IEdFTjZfQlZF U1lOQzsKPiAtCQkJcmluZy0+c2VtYXBob3JlLm1ib3guc2lnbmFsW1ZFQ1NdID0gR0VONl9OT1NZ TkM7Cj4gLQkJCXJpbmctPnNlbWFwaG9yZS5tYm94LnNpZ25hbFtWQ1MyXSA9IEdFTjZfTk9TWU5D Owo+ICsJCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gUE1fVkVCT1hfVVNFUl9JTlRFUlJVUFQ7 Cj4gKwkJZW5naW5lLT5pcnFfZ2V0ID0gaHN3X3ZlYm94X2lycV9nZXQ7Cj4gKwkJZW5naW5lLT5p cnFfYmFycmllciA9IGdlbjZfaXJxX2JhcnJpZXI7Cj4gKwkJZW5naW5lLT5pcnFfcHV0ID0gaHN3 X3ZlYm94X2lycV9wdXQ7Cj4gKwkJZW5naW5lLT5lbWl0X2JhdGNoYnVmZmVyID0gZ2VuNl9lbWl0 X2JhdGNoYnVmZmVyOwo+ICsJCWlmIChzZW1hcGhvcmVzX2VuYWJsZWQoZGV2X3ByaXYpKSB7Cj4g KwkJCWVuZ2luZS0+c2VtYXBob3JlLndhaXQgPSBnZW42X2VtaXRfd2FpdDsKPiArCQkJZW5naW5l LT5zZW1hcGhvcmUuc2lnbmFsID0gZ2VuNl9lbWl0X3NpZ25hbDsKPiArCQkJZW5naW5lLT5zZW1h cGhvcmUubWJveC53YWl0W1JDU10gPSBNSV9TRU1BUEhPUkVfU1lOQ19WRVI7Cj4gKwkJCWVuZ2lu ZS0+c2VtYXBob3JlLm1ib3gud2FpdFtWQ1NdID0gTUlfU0VNQVBIT1JFX1NZTkNfVkVWOwo+ICsJ CQllbmdpbmUtPnNlbWFwaG9yZS5tYm94LndhaXRbQkNTXSA9IE1JX1NFTUFQSE9SRV9TWU5DX1ZF QjsKPiArCQkJZW5naW5lLT5zZW1hcGhvcmUubWJveC53YWl0W1ZFQ1NdID0gTUlfU0VNQVBIT1JF X1NZTkNfSU5WQUxJRDsKPiArCQkJZW5naW5lLT5zZW1hcGhvcmUubWJveC53YWl0W1ZDUzJdID0g TUlfU0VNQVBIT1JFX1NZTkNfSU5WQUxJRDsKPiArCQkJZW5naW5lLT5zZW1hcGhvcmUubWJveC5z aWduYWxbUkNTXSA9IEdFTjZfUlZFU1lOQzsKPiArCQkJZW5naW5lLT5zZW1hcGhvcmUubWJveC5z aWduYWxbVkNTXSA9IEdFTjZfVlZFU1lOQzsKPiArCQkJZW5naW5lLT5zZW1hcGhvcmUubWJveC5z aWduYWxbQkNTXSA9IEdFTjZfQlZFU1lOQzsKPiArCQkJZW5naW5lLT5zZW1hcGhvcmUubWJveC5z aWduYWxbVkVDU10gPSBHRU42X05PU1lOQzsKPiArCQkJZW5naW5lLT5zZW1hcGhvcmUubWJveC5z aWduYWxbVkNTMl0gPSBHRU42X05PU1lOQzsKPiAgIAkJfQo+ICAgCX0KPiAtCXJpbmctPmluaXQg PSBpbml0X3JpbmdfY29tbW9uOwo+ICAgCj4gLQlyZXR1cm4gaW50ZWxfaW5pdF9yaW5nX2J1ZmZl cihkZXYsIHJpbmcpOwo+ICsJcmV0dXJuIGludGVsX2VuZ2luZV9lbmFibGVfZXhlY2xpc3RzKGVu Z2luZSk7Cj4gICB9Cj4gICAKPiAgIGludAo+IC1pbnRlbF9yaW5nX2ZsdXNoX2FsbF9jYWNoZXMo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAraW50ZWxfZW5naW5lX2ZsdXNoKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y3R4KQo+ICAgewo+ICsJc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxOwo+ICAgCWludCByZXQ7 Cj4gICAKPiAtCWlmICghcmluZy0+Z3B1X2NhY2hlc19kaXJ0eSkKPiArCXJxID0gaW50ZWxfZW5n aW5lX2FsbG9jX3JlcXVlc3QoZW5naW5lLCBjdHgpOwo+ICsJaWYgKElTX0VSUihycSkpCj4gKwkJ cmV0dXJuIFBUUl9FUlIocnEpOwo+ICsKPiArCXJldCA9IGk5MTVfcmVxdWVzdF9lbWl0X2JyZWFk Y3J1bWIocnEpOwo+ICsJaWYgKHJldCA9PSAwKQo+ICsJCXJldCA9IGk5MTVfcmVxdWVzdF9jb21t aXQocnEpOwo+ICsJaTkxNV9yZXF1ZXN0X3B1dChycSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiAraW50IGludGVsX2VuZ2luZV9zeW5jKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiArewo+ICsJLyogV2FpdCB1cG9uIHRoZSBsYXN0IHJlcXVlc3QgdG8gYmUgY29tcGxl dGVkICovCj4gKwlpZiAoZW5naW5lLT5sYXN0X3JlcXVlc3QgPT0gTlVMTCkKPiAgIAkJcmV0dXJu IDA7Cj4gICAKPiAtCXJldCA9IHJpbmctPmZsdXNoKHJpbmcsIDAsIEk5MTVfR0VNX0dQVV9ET01B SU5TKTsKPiArCXJldHVybiBpOTE1X3JlcXVlc3Rfd2FpdChlbmdpbmUtPmxhc3RfcmVxdWVzdCk7 Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIKPiArbmV4dF9zZXFubyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSkKPiArewo+ICsJLyogcmVzZXJ2ZSAwIGZvciBub24tc2Vxbm8gKi8KPiArCWlm ICgrK2k5MTUtPm5leHRfc2Vxbm8gPT0gMCkKPiArCQkrK2k5MTUtPm5leHRfc2Vxbm87Cj4gKwly ZXR1cm4gaTkxNS0+bmV4dF9zZXFubzsKPiArfQo+ICsKPiArc3RydWN0IGk5MTVfZ2VtX3JlcXVl c3QgKgo+ICtpbnRlbF9lbmdpbmVfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCj4gKwkJCSAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgpCj4gK3sKPiArCXN0 cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICsJc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3Qg KnJxOwo+ICsJaW50IHJldCwgbjsKPiArCj4gKwlyaW5nID0gY3R4LT5yaW5nW2VuZ2luZS0+aWRd LnJpbmc7Cj4gKwlpZiAocmluZyA9PSBOVUxMKSB7Cj4gKwkJcmluZyA9IGVuZ2luZS0+Z2V0X3Jp bmcoZW5naW5lLCBjdHgpOwo+ICsJCWlmIChJU19FUlIocmluZykpCj4gKwkJCXJldHVybiBFUlJf Q0FTVChyaW5nKTsKPiArCj4gKwkJY3R4LT5yaW5nW2VuZ2luZS0+aWRdLnJpbmcgPSByaW5nOwo+ ICsJfQo+ICsKPiArCXJxID0ga3phbGxvYyhzaXplb2YoKnJxKSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAocnEgPT0gTlVMTCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlrcmVm X2luaXQoJnJxLT5rcmVmKTsKPiArCUlOSVRfTElTVF9IRUFEKCZycS0+dm1hcyk7Cj4gKwlJTklU X0xJU1RfSEVBRCgmcnEtPmJyZWFkY3J1bWJfbGluayk7Cj4gKwo+ICsJcnEtPmk5MTUgPSBlbmdp bmUtPmk5MTU7Cj4gKwlycS0+cmluZyA9IHJpbmc7Cj4gKwlycS0+ZW5naW5lID0gZW5naW5lOwo+ ICsKPiArCXJxLT5yZXNldF9jb3VudGVyID0gYXRvbWljX3JlYWQoJnJxLT5pOTE1LT5ncHVfZXJy b3IucmVzZXRfY291bnRlcik7Cj4gKwlpZiAocnEtPnJlc2V0X2NvdW50ZXIgJiAoSTkxNV9SRVNF VF9JTl9QUk9HUkVTU19GTEFHIHwgSTkxNV9XRURHRUQpKSB7Cj4gKwkJcmV0ID0gcnEtPnJlc2V0 X2NvdW50ZXIgJiBJOTE1X1dFREdFRCA/IC1FSU8gOiAtRUFHQUlOOwo+ICsJCWdvdG8gZXJyOwo+ ICsJfQo+ICsKPiArCXJxLT5zZXFubyA9IG5leHRfc2Vxbm8ocnEtPmk5MTUpOwo+ICsJbWVtY3B5 KHJxLT5zZW1hcGhvcmUsIGVuZ2luZS0+c2VtYXBob3JlLnN5bmMsIHNpemVvZihycS0+c2VtYXBo b3JlKSk7Cj4gKwlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRShycS0+c2VtYXBob3JlKTsgbisr KQo+ICsJCWlmIChfX2k5MTVfc2Vxbm9fcGFzc2VkKHJxLT5zZW1hcGhvcmVbbl0sIHJxLT5zZXFu bykpCj4gKwkJCXJxLT5zZW1hcGhvcmVbbl0gPSAwOwo+ICsJcnEtPmhlYWQgPSByaW5nLT50YWls Owo+ICsJcnEtPm91dHN0YW5kaW5nID0gdHJ1ZTsKPiArCXJxLT5wZW5kaW5nX2ZsdXNoID0gcmlu Zy0+cGVuZGluZ19mbHVzaDsKPiArCj4gKwlycS0+Y3R4ID0gY3R4Owo+ICsJaTkxNV9nZW1fY29u dGV4dF9yZWZlcmVuY2UocnEtPmN0eCk7Cj4gKwo+ICsJcmV0ID0gaTkxNV9yZXF1ZXN0X3N3aXRj aF9jb250ZXh0KHJxKTsKPiAgIAlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwkJZ290byBl cnJfY3R4Owo+ICsKPiArCXJldHVybiBycTsKPiArCj4gK2Vycl9jdHg6Cj4gKwlpOTE1X2dlbV9j b250ZXh0X3VucmVmZXJlbmNlKGN0eCk7Cj4gK2VycjoKPiArCWtmcmVlKHJxKTsKPiArCXJldHVy biBFUlJfUFRSKHJldCk7Cj4gK30KPiArCj4gK3N0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICoKPiAr aW50ZWxfZW5naW5lX3NlcW5vX3RvX3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLAo+ICsJCQkgICAgICB1MzIgc2Vxbm8pCj4gK3sKPiArCXN0cnVjdCBpOTE1X2dlbV9yZXF1 ZXN0ICpycTsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJxLCAmZW5naW5lLT5yZXF1ZXN0 cywgZW5naW5lX2xpc3QpIHsKPiArCQlpZiAocnEtPnNlcW5vID09IHNlcW5vKQo+ICsJCQlyZXR1 cm4gcnE7Cj4gKwo+ICsJCWlmIChfX2k5MTVfc2Vxbm9fcGFzc2VkKHJxLT5zZXFubywgc2Vxbm8p KQo+ICsJCQlicmVhazsKPiArCX0KPiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArdm9p ZCBpbnRlbF9lbmdpbmVfY2xlYW51cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4g K3sKPiArCVdBUk5fT04oZW5naW5lLT5sYXN0X3JlcXVlc3QpOwo+ICsKPiArCWlmIChlbmdpbmUt PmNsZWFudXApCj4gKwkJZW5naW5lLT5jbGVhbnVwKGVuZ2luZSk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGludGVsX2VuZ2luZV9jbGVhcl9yaW5ncyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nOwo+ICsKPiArCWxp c3RfZm9yX2VhY2hfZW50cnkocmluZywgJmVuZ2luZS0+cmluZ3MsIGVuZ2luZV9saXN0KSB7Cj4g KwkJaWYgKHJpbmctPnJldGlyZWRfaGVhZCAhPSAtMSkgewo+ICsJCQlyaW5nLT5oZWFkID0gcmlu Zy0+cmV0aXJlZF9oZWFkOwo+ICsJCQlyaW5nLT5yZXRpcmVkX2hlYWQgPSAtMTsKPiArCj4gKwkJ CXJpbmctPnNwYWNlID0gaW50ZWxfcmluZ19zcGFjZShyaW5nKTsKPiArCQl9Cj4gKwo+ICsJCWlm IChyaW5nLT5sYXN0X2NvbnRleHQgIT0gTlVMTCkgewo+ICsJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqOwo+ICsKPiArCQkJb2JqID0gcmluZy0+bGFzdF9jb250ZXh0LT5yaW5nW2Vu Z2luZS0+aWRdLnN0YXRlOwo+ICsJCQlpZiAob2JqKQo+ICsJCQkJaTkxNV9nZW1fb2JqZWN0X2dn dHRfdW5waW4ob2JqKTsKPiArCj4gKwkJCXJpbmctPmxhc3RfY29udGV4dCA9IE5VTEw7Cj4gKwkJ fQo+ICsJfQo+ICt9Cj4gKwo+ICtpbnQgaW50ZWxfZW5naW5lX3N1c3BlbmQoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoV0FSTl9P TighaW50ZWxfZW5naW5lX2luaXRpYWxpemVkKGVuZ2luZSkpKQo+ICsJCXJldHVybiAwOwo+ICsK PiArCUk5MTVfV1JJVEVfSU1SKGVuZ2luZSwgfjApOwo+ICsKPiArCWlmIChlbmdpbmUtPnN1c3Bl bmQpCj4gKwkJcmV0ID0gZW5naW5lLT5zdXNwZW5kKGVuZ2luZSk7Cj4gKwo+ICsJaW50ZWxfZW5n aW5lX2NsZWFyX3JpbmdzKGVuZ2luZSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr aW50IGludGVsX2VuZ2luZV9yZXN1bWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7 Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoV0FSTl9PTighaW50ZWxfZW5naW5lX2luaXRp YWxpemVkKGVuZ2luZSkpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChlbmdpbmUtPnJlc3Vt ZSkKPiArCQlyZXQgPSBlbmdpbmUtPnJlc3VtZShlbmdpbmUpOwo+ICsKPiArCUk5MTVfV1JJVEVf SU1SKGVuZ2luZSwgfmVuZ2luZS0+aXJxX2tlZXBfbWFzayk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICtpbnQgaW50ZWxfZW5naW5lX3JldGlyZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsCj4gKwkJCXUzMiBzZXFubykKPiArewo+ICsJaW50IGNvdW50Owo+ICsKPiArCWlmIChl bmdpbmUtPnJldGlyZSkKPiArCQllbmdpbmUtPnJldGlyZShlbmdpbmUsIHNlcW5vKTsKPiArCj4g Kwljb3VudCA9IDA7Cj4gKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmVuZ2luZS0+cmVxdWVzdHMpKSB7 Cj4gKwkJc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxOwo+ICsKPiArCQlycSA9IGxpc3RfZmly c3RfZW50cnkoJmVuZ2luZS0+cmVxdWVzdHMsCj4gKwkJCQkgICAgICBzdHJ1Y3QgaTkxNV9nZW1f cmVxdWVzdCwKPiArCQkJCSAgICAgIGVuZ2luZV9saXN0KTsKPiArCj4gKwkJaWYgKCFfX2k5MTVf c2Vxbm9fcGFzc2VkKHNlcW5vLCBycS0+c2Vxbm8pKQo+ICsJCQlicmVhazsKPiArCj4gKwkJaTkx NV9yZXF1ZXN0X3JldGlyZShycSk7Cj4gKwkJY291bnQrKzsKPiArCX0KPiArCj4gKwlpZiAodW5s aWtlbHkoZW5naW5lLT50cmFjZV9pcnFfc2Vxbm8gJiYKPiArCQkgICAgIF9faTkxNV9zZXFub19w YXNzZWQoc2Vxbm8sIGVuZ2luZS0+dHJhY2VfaXJxX3NlcW5vKSkpIHsKPiArCQllbmdpbmUtPmly cV9wdXQoZW5naW5lKTsKPiArCQllbmdpbmUtPnRyYWNlX2lycV9zZXFubyA9IDA7Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIGNvdW50Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfZ2VtX3Jl cXVlc3QgKgo+ICtmaW5kX2FjdGl2ZV9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQo+ICt7 Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEsICpsYXN0ID0gTlVMTDsKPiArCj4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5KHJxLCBsaXN0LCBlbmdpbmVfbGlzdCkgewo+ICsJCWlmIChycS0+ YmF0Y2ggPT0gTlVMTCkKPiArCQkJY29udGludWU7Cj4gICAKPiAtCXRyYWNlX2k5MTVfZ2VtX3Jp bmdfZmx1c2gocmluZywgMCwgSTkxNV9HRU1fR1BVX0RPTUFJTlMpOwo+ICsJCWlmICghX19pOTE1 X3JlcXVlc3RfY29tcGxldGVfX3dhKHJxKSkKPiArCQkJcmV0dXJuIHJxOwo+ICsKPiArCQlsYXN0 ID0gcnE7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGxhc3Q7Cj4gK30KPiArCj4gK3N0YXRpYyBib29s IGNvbnRleHRfaXNfYmFubmVkKGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsCj4gKwkJ CSAgICAgIHVuc2lnbmVkIGxvbmcgbm93KQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgaTkxNV9jdHhf aGFuZ19zdGF0cyAqaHMgPSAmY3R4LT5oYW5nX3N0YXRzOwo+ICsKPiArCWlmIChocy0+YmFubmVk KQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCWlmIChocy0+YmFuX3BlcmlvZF9zZWNvbmRzID09 IDApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmIChub3cgLSBocy0+Z3VpbHR5X3RzIDw9 IGhzLT5iYW5fcGVyaW9kX3NlY29uZHMpIHsKPiArCQlpZiAoIWk5MTVfZ2VtX2NvbnRleHRfaXNf ZGVmYXVsdChjdHgpKSB7Cj4gKwkJCURSTV9ERUJVRygiY29udGV4dCBoYW5naW5nIHRvbyBmYXN0 LCBiYW5uaW5nIVxuIik7Cj4gKwkJCXJldHVybiB0cnVlOwo+ICsJCX0gZWxzZSBpZiAoaTkxNV9z dG9wX3JpbmdfYWxsb3dfYmFuKGN0eC0+aTkxNSkpIHsKPiArCQkJaWYgKGk5MTVfc3RvcF9yaW5n X2FsbG93X3dhcm4oY3R4LT5pOTE1KSkKPiArCQkJCURSTV9FUlJPUigiZ3B1IGhhbmdpbmcgdG9v IGZhc3QsIGJhbm5pbmchXG4iKTsKPiArCQkJcmV0dXJuIHRydWU7Cj4gKwkJfQo+ICsJfQo+ICsK PiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAraW50ZWxfZW5naW5l X2hhbmdzdGF0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCXN0cnVj dCBpOTE1X2N0eF9oYW5nX3N0YXRzICpoczsKPiArCXN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpy cTsKPiArCj4gKwlycSA9IGZpbmRfYWN0aXZlX2JhdGNoKCZlbmdpbmUtPnJlcXVlc3RzKTsKPiAr CWlmIChycSA9PSBOVUxMKQo+ICsJCXJldHVybjsKPiArCj4gKwlocyA9ICZycS0+Y3R4LT5oYW5n X3N0YXRzOwo+ICsJaWYgKGVuZ2luZS0+aGFuZ2NoZWNrLnNjb3JlID49IEhBTkdDSEVDS19TQ09S RV9SSU5HX0hVTkcpIHsKPiArCQl1bnNpZ25lZCBsb25nIG5vdyA9IGdldF9zZWNvbmRzKCk7Cj4g KwkJaHMtPmJhbm5lZCA9IGNvbnRleHRfaXNfYmFubmVkKHJxLT5jdHgsIG5vdyk7Cj4gKwkJaHMt Pmd1aWx0eV90cyA9IG5vdzsKPiArCQlocy0+YmF0Y2hfYWN0aXZlKys7Cj4gKwl9IGVsc2UKPiAr CQlocy0+YmF0Y2hfcGVuZGluZysrOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGlu dWUocnEsICZlbmdpbmUtPnJlcXVlc3RzLCBlbmdpbmVfbGlzdCkgewo+ICsJCWlmIChycS0+YmF0 Y2ggPT0gTlVMTCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlmIChfX2k5MTVfcmVxdWVzdF9j b21wbGV0ZV9fd2EocnEpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJcnEtPmN0eC0+aGFuZ19z dGF0cy5iYXRjaF9wZW5kaW5nKys7Cj4gKwl9Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfZW5naW5l X3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJaWYgKFdBUk5f T04oIWludGVsX2VuZ2luZV9pbml0aWFsaXplZChlbmdpbmUpKSkKPiArCQlyZXR1cm47Cj4gKwo+ ICsJaWYgKGVuZ2luZS0+cmVzZXQpCj4gKwkJZW5naW5lLT5yZXNldChlbmdpbmUpOwo+ICsKPiAr CW1lbXNldCgmZW5naW5lLT5oYW5nY2hlY2ssIDAsIHNpemVvZihlbmdpbmUtPmhhbmdjaGVjaykp Owo+ICsJaW50ZWxfZW5naW5lX2hhbmdzdGF0cyhlbmdpbmUpOwo+ICsKPiArCWludGVsX2VuZ2lu ZV9yZXRpcmUoZW5naW5lLCBlbmdpbmUtPmk5MTUtPm5leHRfc2Vxbm8pOwo+ICsJaW50ZWxfZW5n aW5lX2NsZWFyX3JpbmdzKGVuZ2luZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcmluZ193YWl0 KHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nLCBpbnQgbikKPiArewo+ICsJaW50IHJldDsK PiArCj4gKwl0cmFjZV9pbnRlbF9yaW5nYnVmZmVyX3dhaXQocmluZywgbik7Cj4gKwo+ICsJZG8g ewo+ICsJCXN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycTsKPiArCj4gKwkJaTkxNV9nZW1fcmV0 aXJlX3JlcXVlc3RzX19lbmdpbmUocmluZy0+ZW5naW5lKTsKPiArCQlpZiAocmluZy0+cmV0aXJl ZF9oZWFkICE9IC0xKSB7Cj4gKwkJCXJpbmctPmhlYWQgPSByaW5nLT5yZXRpcmVkX2hlYWQ7Cj4g KwkJCXJpbmctPnJldGlyZWRfaGVhZCA9IC0xOwo+ICsKPiArCQkJcmluZy0+c3BhY2UgPSBpbnRl bF9yaW5nX3NwYWNlKHJpbmcpOwo+ICsJCQlpZiAocmluZy0+c3BhY2UgPj0gbikKPiArCQkJCXJl dHVybiAwOwo+ICsJCX0KPiArCj4gKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShycSwgJnJpbmctPmJy ZWFkY3J1bWJzLCBicmVhZGNydW1iX2xpbmspCj4gKwkJCWlmIChfX2ludGVsX3Jpbmdfc3BhY2Uo cnEtPnRhaWwsIHJpbmctPnRhaWwsCj4gKwkJCQkJICAgICAgIHJpbmctPnNpemUsIEk5MTVfUklO R19SU1ZEKSA+PSBuKQo+ICsJCQkJYnJlYWs7Cj4gKwo+ICsJCWlmIChXQVJOX09OKCZycS0+YnJl YWRjcnVtYl9saW5rID09ICZyaW5nLT5icmVhZGNydW1icykpCj4gKwkJCXJldHVybiAtRURFQURM SzsKPiArCj4gKwkJcmV0ID0gaTkxNV9yZXF1ZXN0X3dhaXQocnEpOwo+ICsJfSB3aGlsZSAocmV0 ID09IDApOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcmluZ193 cmFwKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nLCBpbnQgYnl0ZXMpCj4gK3sKPiArCXVp bnQzMl90IF9faW9tZW0gKnZpcnQ7Cj4gKwlpbnQgcmVtOwo+ICsKPiArCXJlbSA9IHJpbmctPnNp emUgLSByaW5nLT50YWlsOwo+ICsJaWYgKHVubGlrZWx5KHJpbmctPnNwYWNlIDwgcmVtKSkgewo+ ICsJCXJlbSA9IHJpbmdfd2FpdChyaW5nLCByZW0pOwo+ICsJCWlmIChyZW0pCj4gKwkJCXJldHVy biByZW07Cj4gKwl9Cj4gKwo+ICsJdHJhY2VfaW50ZWxfcmluZ2J1ZmZlcl93cmFwKHJpbmcsIHJl bSk7Cj4gKwo+ICsJdmlydCA9IHJpbmctPnZpcnR1YWxfc3RhcnQgKyByaW5nLT50YWlsOwo+ICsJ cmVtID0gcmluZy0+c2l6ZSAtIHJpbmctPnRhaWw7Cj4gKwo+ICsJcmluZy0+c3BhY2UgLT0gcmVt Owo+ICsJcmluZy0+dGFpbCA9IDA7Cj4gKwo+ICsJcmVtIC89IDQ7Cj4gKwl3aGlsZSAocmVtLS0p Cj4gKwkJaW93cml0ZTMyKE1JX05PT1AsIHZpcnQrKyk7Cj4gICAKPiAtCXJpbmctPmdwdV9jYWNo ZXNfZGlydHkgPSBmYWxzZTsKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1pbnQKPiAtaW50 ZWxfcmluZ19pbnZhbGlkYXRlX2FsbF9jYWNoZXMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmlu ZykKPiArc3RhdGljIGludCBfX2ludGVsX3JpbmdfcHJlcGFyZShzdHJ1Y3QgaW50ZWxfcmluZ2J1 ZmZlciAqcmluZywKPiArCQkJCWludCBieXRlcykKPiAgIHsKPiAtCXVpbnQzMl90IGZsdXNoX2Rv bWFpbnM7Cj4gICAJaW50IHJldDsKPiAgIAo+IC0JZmx1c2hfZG9tYWlucyA9IDA7Cj4gLQlpZiAo cmluZy0+Z3B1X2NhY2hlc19kaXJ0eSkKPiAtCQlmbHVzaF9kb21haW5zID0gSTkxNV9HRU1fR1BV X0RPTUFJTlM7Cj4gKwl0cmFjZV9pbnRlbF9yaW5nYnVmZmVyX2JlZ2luKHJpbmcsIGJ5dGVzKTsK PiAgIAo+IC0JcmV0ID0gcmluZy0+Zmx1c2gocmluZywgSTkxNV9HRU1fR1BVX0RPTUFJTlMsIGZs dXNoX2RvbWFpbnMpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJaWYgKHVubGlr ZWx5KHJpbmctPnRhaWwgKyBieXRlcyA+IHJpbmctPmVmZmVjdGl2ZV9zaXplKSkgewo+ICsJCXJl dCA9IHJpbmdfd3JhcChyaW5nLCBieXRlcyk7Cj4gKwkJaWYgKHVubGlrZWx5KHJldCkpCj4gKwkJ CXJldHVybiByZXQ7Cj4gKwl9Cj4gICAKPiAtCXRyYWNlX2k5MTVfZ2VtX3JpbmdfZmx1c2gocmlu ZywgSTkxNV9HRU1fR1BVX0RPTUFJTlMsIGZsdXNoX2RvbWFpbnMpOwo+ICsJaWYgKHVubGlrZWx5 KHJpbmctPnNwYWNlIDwgYnl0ZXMpKSB7Cj4gKwkJcmV0ID0gcmluZ193YWl0KHJpbmcsIGJ5dGVz KTsKPiArCQlpZiAodW5saWtlbHkocmV0KSkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiAgIAo+ IC0JcmluZy0+Z3B1X2NhY2hlc19kaXJ0eSA9IGZhbHNlOwo+ICAgCXJldHVybiAwOwo+ICAgfQo+ ICAgCj4gLXZvaWQKPiAtaW50ZWxfc3RvcF9yaW5nX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nKQo+ICtzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqCj4gK2ludGVsX3JpbmdfYmVn aW4oc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKnJxLAo+ICsJCSBpbnQgbnVtX2R3b3JkcykKPiAg IHsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nID0gcnEtPnJpbmc7Cj4gICAJaW50 IHJldDsKPiAgIAo+IC0JaWYgKCFpbnRlbF9yaW5nX2luaXRpYWxpemVkKHJpbmcpKQo+IC0JCXJl dHVybjsKPiArCS8qIFRBSUwgdXBkYXRlcyBtdXN0IGJlIGFsaWduZWQgdG8gYSBxd29yZCwgc28g bWFrZSBzdXJlIHdlCj4gKwkgKiByZXNlcnZlIHNwYWNlIGZvciBhbnkgaW1wbGljaXQgcGFkZGlu ZyByZXF1aXJlZCBmb3IgdGhpcwo+ICsJICogY29tbWFuZC4KPiArCSAqLwo+ICsJcmV0ID0gX19p bnRlbF9yaW5nX3ByZXBhcmUocmluZywKPiArCQkJCSAgIEFMSUdOKG51bV9kd29yZHMsIDIpICog c2l6ZW9mKHVpbnQzMl90KSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7 Cj4gKwo+ICsJcmluZy0+c3BhY2UgLT0gbnVtX2R3b3JkcyAqIHNpemVvZih1aW50MzJfdCk7Cj4g Kwo+ICsJcmV0dXJuIHJpbmc7Cj4gK30KPiArCj4gKy8qIEFsaWduIHRoZSByaW5nIHRhaWwgdG8g YSBjYWNoZWxpbmUgYm91bmRhcnkgKi8KPiAraW50IGludGVsX3JpbmdfY2FjaGVsaW5lX2FsaWdu KHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSkKPiArewo+ICsJc3RydWN0IGludGVsX3Jpbmdi dWZmZXIgKnJpbmc7Cj4gKwlpbnQgdGFpbCwgbnVtX2R3b3JkczsKPiArCj4gKwlkbyB7Cj4gKwkJ dGFpbCA9IHJxLT5yaW5nLT50YWlsOwo+ICsJCW51bV9kd29yZHMgPSAodGFpbCAmIChDQUNIRUxJ TkVfQllURVMgLSAxKSkgLyBzaXplb2YodWludDMyX3QpOwo+ICsJCWlmIChudW1fZHdvcmRzID09 IDApCj4gKwkJCXJldHVybiAwOwo+ICsKPiArCQludW1fZHdvcmRzID0gQ0FDSEVMSU5FX0JZVEVT IC8gc2l6ZW9mKHVpbnQzMl90KSAtIG51bV9kd29yZHM7Cj4gKwkJcmluZyA9IGludGVsX3Jpbmdf YmVnaW4ocnEsIG51bV9kd29yZHMpOwo+ICsJCWlmIChJU19FUlIocmluZykpCj4gKwkJCXJldHVy biBQVFJfRVJSKHJpbmcpOwo+ICsJfSB3aGlsZSAodGFpbCAhPSBycS0+cmluZy0+dGFpbCk7Cj4g Kwo+ICsJd2hpbGUgKG51bV9kd29yZHMtLSkKPiArCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlf Tk9PUCk7Cj4gKwo+ICsJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqCj4gK2ludGVsX2VuZ2luZV9m aW5kX2FjdGl2ZV9iYXRjaChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiAr CXN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4g ICAKPiAtCXJldCA9IGludGVsX3JpbmdfaWRsZShyaW5nKTsKPiAtCWlmIChyZXQgJiYgIWk5MTVf cmVzZXRfaW5fcHJvZ3Jlc3MoJnRvX2k5MTUocmluZy0+ZGV2KS0+Z3B1X2Vycm9yKSkKPiAtCQlE Uk1fRVJST1IoImZhaWxlZCB0byBxdWllc2NlICVzIHdoaWxzdCBjbGVhbmluZyB1cDogJWRcbiIs Cj4gLQkJCSAgcmluZy0+bmFtZSwgcmV0KTsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUt PmlycWxvY2ssIGZsYWdzKTsKPiArCXJxID0gZmluZF9hY3RpdmVfYmF0Y2goJmVuZ2luZS0+c3Vi bWl0dGVkKTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+aXJxbG9jaywgZmxh Z3MpOwo+ICsJaWYgKHJxKQo+ICsJCXJldHVybiBycTsKPiAgIAo+IC0Jc3RvcF9yaW5nKHJpbmcp Owo+ICsJcmV0dXJuIGZpbmRfYWN0aXZlX2JhdGNoKCZlbmdpbmUtPnJlcXVlc3RzKTsKPiAgIH0K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gaW5kZXggZDY4OWJhYzVj ODRmLi40NmM4ZDIyODg4MjEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5oCj4gQEAgLTIwLDYxICsyMCw0NyBAQAo+ICAgICogIklmIHRoZSBSaW5nIEJ1ZmZlciBI ZWFkIFBvaW50ZXIgYW5kIHRoZSBUYWlsIFBvaW50ZXIgYXJlIG9uIHRoZSBzYW1lCj4gICAgKiBj YWNoZWxpbmUsIHRoZSBIZWFkIFBvaW50ZXIgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBU YWlsCj4gICAgKiBQb2ludGVyLiIKPiArICoKPiArICogVG8gYWxzbyBhY2NvbW1vZGF0ZSBlcnJh dGEgb24gODMwLzg0NSB3aGljaCBtYWtlcyB0aGUgbGFzdCBwYWlyIG9mIGNhY2hsaW5lcwo+ICsg KiBpbiB0aGUgcmluZ2J1ZmZlciB1bmF2YWlsYWJsZSwgcmVkdWNlIHRoZSBhdmFpbGFibGUgc3Bh Y2UgZnVydGhlci4KPiAgICAqLwo+IC0jZGVmaW5lIEk5MTVfUklOR19GUkVFX1NQQUNFIDY0Cj4g KyNkZWZpbmUgSTkxNV9SSU5HX1JTVkQgKDIqQ0FDSEVMSU5FX0JZVEVTKQo+ICAgCj4gLXN0cnVj dCAgaW50ZWxfaHdfc3RhdHVzX3BhZ2Ugewo+ICtzdHJ1Y3QgaW50ZWxfaHdfc3RhdHVzX3BhZ2Ug ewo+ICAgCXUzMgkJKnBhZ2VfYWRkcjsKPiAgIAl1bnNpZ25lZCBpbnQJZ2Z4X2FkZHI7Cj4gICAJ c3RydWN0CQlkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gICB9Owo+ICAgCj4gLSNkZWZpbmUg STkxNV9SRUFEX1RBSUwocmluZykgSTkxNV9SRUFEKFJJTkdfVEFJTCgocmluZyktPm1taW9fYmFz ZSkpCj4gLSNkZWZpbmUgSTkxNV9XUklURV9UQUlMKHJpbmcsIHZhbCkgSTkxNV9XUklURShSSU5H X1RBSUwoKHJpbmcpLT5tbWlvX2Jhc2UpLCB2YWwpCj4gKyNkZWZpbmUgSTkxNV9SRUFEX1RBSUwo ZW5naW5lKSBJOTE1X1JFQUQoUklOR19UQUlMKChlbmdpbmUpLT5tbWlvX2Jhc2UpKQo+ICsjZGVm aW5lIEk5MTVfV1JJVEVfVEFJTChlbmdpbmUsIHZhbCkgSTkxNV9XUklURShSSU5HX1RBSUwoKGVu Z2luZSktPm1taW9fYmFzZSksIHZhbCkKPiAgIAo+IC0jZGVmaW5lIEk5MTVfUkVBRF9TVEFSVChy aW5nKSBJOTE1X1JFQUQoUklOR19TVEFSVCgocmluZyktPm1taW9fYmFzZSkpCj4gLSNkZWZpbmUg STkxNV9XUklURV9TVEFSVChyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19TVEFSVCgocmluZykt Pm1taW9fYmFzZSksIHZhbCkKPiArI2RlZmluZSBJOTE1X1JFQURfU1RBUlQoZW5naW5lKSBJOTE1 X1JFQUQoUklOR19TVEFSVCgoZW5naW5lKS0+bW1pb19iYXNlKSkKPiArI2RlZmluZSBJOTE1X1dS SVRFX1NUQVJUKGVuZ2luZSwgdmFsKSBJOTE1X1dSSVRFKFJJTkdfU1RBUlQoKGVuZ2luZSktPm1t aW9fYmFzZSksIHZhbCkKPiAgIAo+IC0jZGVmaW5lIEk5MTVfUkVBRF9IRUFEKHJpbmcpICBJOTE1 X1JFQUQoUklOR19IRUFEKChyaW5nKS0+bW1pb19iYXNlKSkKPiAtI2RlZmluZSBJOTE1X1dSSVRF X0hFQUQocmluZywgdmFsKSBJOTE1X1dSSVRFKFJJTkdfSEVBRCgocmluZyktPm1taW9fYmFzZSks IHZhbCkKPiArI2RlZmluZSBJOTE1X1JFQURfSEVBRChlbmdpbmUpICBJOTE1X1JFQUQoUklOR19I RUFEKChlbmdpbmUpLT5tbWlvX2Jhc2UpKQo+ICsjZGVmaW5lIEk5MTVfV1JJVEVfSEVBRChlbmdp bmUsIHZhbCkgSTkxNV9XUklURShSSU5HX0hFQUQoKGVuZ2luZSktPm1taW9fYmFzZSksIHZhbCkK PiAgIAo+IC0jZGVmaW5lIEk5MTVfUkVBRF9DVEwocmluZykgSTkxNV9SRUFEKFJJTkdfQ1RMKChy aW5nKS0+bW1pb19iYXNlKSkKPiAtI2RlZmluZSBJOTE1X1dSSVRFX0NUTChyaW5nLCB2YWwpIEk5 MTVfV1JJVEUoUklOR19DVEwoKHJpbmcpLT5tbWlvX2Jhc2UpLCB2YWwpCj4gKyNkZWZpbmUgSTkx NV9SRUFEX0NUTChlbmdpbmUpIEk5MTVfUkVBRChSSU5HX0NUTCgoZW5naW5lKS0+bW1pb19iYXNl KSkKPiArI2RlZmluZSBJOTE1X1dSSVRFX0NUTChlbmdpbmUsIHZhbCkgSTkxNV9XUklURShSSU5H X0NUTCgoZW5naW5lKS0+bW1pb19iYXNlKSwgdmFsKQo+ICAgCj4gLSNkZWZpbmUgSTkxNV9SRUFE X0lNUihyaW5nKSBJOTE1X1JFQUQoUklOR19JTVIoKHJpbmcpLT5tbWlvX2Jhc2UpKQo+IC0jZGVm aW5lIEk5MTVfV1JJVEVfSU1SKHJpbmcsIHZhbCkgSTkxNV9XUklURShSSU5HX0lNUigocmluZykt Pm1taW9fYmFzZSksIHZhbCkKPiArI2RlZmluZSBJOTE1X1JFQURfSU1SKGVuZ2luZSkgSTkxNV9S RUFEKFJJTkdfSU1SKChlbmdpbmUpLT5tbWlvX2Jhc2UpKQo+ICsjZGVmaW5lIEk5MTVfV1JJVEVf SU1SKGVuZ2luZSwgdmFsKSBJOTE1X1dSSVRFKFJJTkdfSU1SKChlbmdpbmUpLT5tbWlvX2Jhc2Up LCB2YWwpCj4gICAKPiAtI2RlZmluZSBJOTE1X1JFQURfTU9ERShyaW5nKSBJOTE1X1JFQUQoUklO R19NSV9NT0RFKChyaW5nKS0+bW1pb19iYXNlKSkKPiAtI2RlZmluZSBJOTE1X1dSSVRFX01PREUo cmluZywgdmFsKSBJOTE1X1dSSVRFKFJJTkdfTUlfTU9ERSgocmluZyktPm1taW9fYmFzZSksIHZh bCkKPiArI2RlZmluZSBJOTE1X1JFQURfTU9ERShlbmdpbmUpIEk5MTVfUkVBRChSSU5HX01JX01P REUoKGVuZ2luZSktPm1taW9fYmFzZSkpCj4gKyNkZWZpbmUgSTkxNV9XUklURV9NT0RFKGVuZ2lu ZSwgdmFsKSBJOTE1X1dSSVRFKFJJTkdfTUlfTU9ERSgoZW5naW5lKS0+bW1pb19iYXNlKSwgdmFs KQo+ICAgCj4gICAvKiBzZXFubyBzaXplIGlzIGFjdHVhbGx5IG9ubHkgYSB1aW50MzIsIGJ1dCBz aW5jZSB3ZSBwbGFuIHRvIHVzZSBNSV9GTFVTSF9EVyB0bwo+ICAgICogZG8gdGhlIHdyaXRlcywg YW5kIHRoYXQgbXVzdCBoYXZlIHF3IGFsaWduZWQgb2Zmc2V0cywgc2ltcGx5IHByZXRlbmQgaXQn cyA4Yi4KPiAgICAqLwo+ICAgI2RlZmluZSBpOTE1X3NlbWFwaG9yZV9zZXFub19zaXplIHNpemVv Zih1aW50NjRfdCkKPiAtI2RlZmluZSBHRU44X1NJR05BTF9PRkZTRVQoX19yaW5nLCB0bykJCQkg ICAgIFwKPiAtCShpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQoZGV2X3ByaXYtPnNlbWFwaG9yZV9v YmopICsgXAo+IC0JKChfX3JpbmcpLT5pZCAqIEk5MTVfTlVNX1JJTkdTICogaTkxNV9zZW1hcGhv cmVfc2Vxbm9fc2l6ZSkgKwlcCj4gLQkoaTkxNV9zZW1hcGhvcmVfc2Vxbm9fc2l6ZSAqICh0bykp KQo+IC0KPiAtI2RlZmluZSBHRU44X1dBSVRfT0ZGU0VUKF9fcmluZywgZnJvbSkJCQkgICAgIFwK PiAtCShpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQoZGV2X3ByaXYtPnNlbWFwaG9yZV9vYmopICsg XAo+IC0JKChmcm9tKSAqIEk5MTVfTlVNX1JJTkdTICogaTkxNV9zZW1hcGhvcmVfc2Vxbm9fc2l6 ZSkgKyBcCj4gLQkoaTkxNV9zZW1hcGhvcmVfc2Vxbm9fc2l6ZSAqIChfX3JpbmcpLT5pZCkpCj4g LQo+IC0jZGVmaW5lIEdFTjhfUklOR19TRU1BUEhPUkVfSU5JVCBkbyB7IFwKPiAtCWlmICghZGV2 X3ByaXYtPnNlbWFwaG9yZV9vYmopIHsgXAo+IC0JCWJyZWFrOyBcCj4gLQl9IFwKPiAtCXJpbmct PnNlbWFwaG9yZS5zaWduYWxfZ2d0dFtSQ1NdID0gR0VOOF9TSUdOQUxfT0ZGU0VUKHJpbmcsIFJD Uyk7IFwKPiAtCXJpbmctPnNlbWFwaG9yZS5zaWduYWxfZ2d0dFtWQ1NdID0gR0VOOF9TSUdOQUxf T0ZGU0VUKHJpbmcsIFZDUyk7IFwKPiAtCXJpbmctPnNlbWFwaG9yZS5zaWduYWxfZ2d0dFtCQ1Nd ID0gR0VOOF9TSUdOQUxfT0ZGU0VUKHJpbmcsIEJDUyk7IFwKPiAtCXJpbmctPnNlbWFwaG9yZS5z aWduYWxfZ2d0dFtWRUNTXSA9IEdFTjhfU0lHTkFMX09GRlNFVChyaW5nLCBWRUNTKTsgXAo+IC0J cmluZy0+c2VtYXBob3JlLnNpZ25hbF9nZ3R0W1ZDUzJdID0gR0VOOF9TSUdOQUxfT0ZGU0VUKHJp bmcsIFZDUzIpOyBcCj4gLQlyaW5nLT5zZW1hcGhvcmUuc2lnbmFsX2dndHRbcmluZy0+aWRdID0g TUlfU0VNQVBIT1JFX1NZTkNfSU5WQUxJRDsgXAo+IC0JfSB3aGlsZSgwKQo+IC0KPiAtZW51bSBp bnRlbF9yaW5nX2hhbmdjaGVja19hY3Rpb24gewo+ICsjZGVmaW5lIEdFTjhfU0VNQVBIT1JFX09G RlNFVChfX2RwLCBfX2Zyb20sIF9fdG8pCQkJICAgICBcCj4gKwkoaTkxNV9nZW1fb2JqX2dndHRf b2Zmc2V0KChfX2RwKS0+c2VtYXBob3JlX29iaikgKyBcCj4gKwkgKChfX2Zyb20pICogSTkxNV9O VU1fRU5HSU5FUyArIChfX3RvKSkgKiBpOTE1X3NlbWFwaG9yZV9zZXFub19zaXplKQo+ICsKPiAr ZW51bSBpbnRlbF9lbmdpbmVfaGFuZ2NoZWNrX2FjdGlvbiB7Cj4gICAJSEFOR0NIRUNLX0lETEUg PSAwLAo+ICsJSEFOR0NIRUNLX0lETEVfV0FJVEVSUywKPiAgIAlIQU5HQ0hFQ0tfV0FJVCwKPiAg IAlIQU5HQ0hFQ0tfQUNUSVZFLAo+ICAgCUhBTkdDSEVDS19BQ1RJVkVfTE9PUCwKPiBAQCAtODQs NDcgKzcwLDYxIEBAIGVudW0gaW50ZWxfcmluZ19oYW5nY2hlY2tfYWN0aW9uIHsKPiAgIAo+ICAg I2RlZmluZSBIQU5HQ0hFQ0tfU0NPUkVfUklOR19IVU5HIDMxCj4gICAKPiAtc3RydWN0IGludGVs X3JpbmdfaGFuZ2NoZWNrIHsKPiArc3RydWN0IGludGVsX2VuZ2luZV9oYW5nY2hlY2sgewo+ICAg CXU2NCBhY3RoZDsKPiAgIAl1NjQgbWF4X2FjdGhkOwo+ICAgCXUzMiBzZXFubzsKPiArCXUzMiBp bnRlcnJ1cHRzOwo+ICAgCWludCBzY29yZTsKPiAtCWVudW0gaW50ZWxfcmluZ19oYW5nY2hlY2tf YWN0aW9uIGFjdGlvbjsKPiArCWVudW0gaW50ZWxfZW5naW5lX2hhbmdjaGVja19hY3Rpb24gYWN0 aW9uOwo+ICAgCWludCBkZWFkbG9jazsKPiAgIH07Cj4gICAKPiArc3RydWN0IGk5MTVfZ2VtX3Jl cXVlc3Q7Cj4gK3N0cnVjdCBpbnRlbF9jb250ZXh0Owo+ICtzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz Owo+ICsKPiAgIHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyIHsKPiArCXN0cnVjdCBpbnRlbF9jb250 ZXh0ICpsYXN0X2NvbnRleHQ7Cj4gKwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l Owo+ICsJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eDsKPiArCXN0cnVjdCBsaXN0X2hlYWQgZW5n aW5lX2xpc3Q7Cj4gKwo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAJ dm9pZCBfX2lvbWVtICp2aXJ0dWFsX3N0YXJ0Owo+ICAgCj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nOwo+IC0KPiAtCS8qCj4gLQkgKiBGSVhNRTogVGhpcyBiYWNrcG9pbnRlciBpcyBh biBhcnRpZmFjdCBvZiB0aGUgaGlzdG9yeSBvZiBob3cgdGhlCj4gLQkgKiBleGVjbGlzdCBwYXRj aGVzIGNhbWUgaW50byBiZWluZy4gSXQgd2lsbCBnZXQgcmVtb3ZlZCBvbmNlIHRoZSBiYXNpYwo+ IC0JICogY29kZSBoYXMgbGFuZGVkLgo+ICsJLyoqCj4gKwkgKiBMaXN0IG9mIGJyZWFkY3J1bWJz IGFzc29jaWF0ZWQgd2l0aCBHUFUgcmVxdWVzdHMgY3VycmVudGx5Cj4gKwkgKiBvdXRzdGFuZGlu Zy4KPiAgIAkgKi8KPiAtCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpGSVhNRV9scmNfY3R4Owo+ICsJ c3RydWN0IGxpc3RfaGVhZCByZXF1ZXN0czsKPiArCXN0cnVjdCBsaXN0X2hlYWQgYnJlYWRjcnVt YnM7Cj4gICAKPiAtCXUzMiBoZWFkOwo+IC0JdTMyIHRhaWw7Cj4gKwlpbnQgaGVhZDsKPiArCWlu dCB0YWlsOwo+ICAgCWludCBzcGFjZTsKPiArCj4gICAJaW50IHNpemU7Cj4gICAJaW50IGVmZmVj dGl2ZV9zaXplOwo+ICAgCj4gICAJLyoqIFdlIHRyYWNrIHRoZSBwb3NpdGlvbiBvZiB0aGUgcmVx dWVzdHMgaW4gdGhlIHJpbmcgYnVmZmVyLCBhbmQKPiAtCSAqIHdoZW4gZWFjaCBpcyByZXRpcmVk IHdlIGluY3JlbWVudCBsYXN0X3JldGlyZWRfaGVhZCBhcyB0aGUgR1BVCj4gKwkgKiB3aGVuIGVh Y2ggaXMgcmV0aXJlZCB3ZSBpbmNyZW1lbnQgcmV0aXJlZF9oZWFkIGFzIHRoZSBHUFUKPiAgIAkg KiBtdXN0IGhhdmUgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdCBhbmQgc28gd2Uga25v dyB3ZQo+ICAgCSAqIGNhbiBhZHZhbmNlIHRoZSByaW5nYnVmZmVyIHVwIHRvIHRoYXQgcG9zaXRp b24uCj4gICAJICoKPiAtCSAqIGxhc3RfcmV0aXJlZF9oZWFkIGlzIHNldCB0byAtMSBhZnRlciB0 aGUgdmFsdWUgaXMgY29uc3VtZWQgc28KPiArCSAqIHJldGlyZWRfaGVhZCBpcyBzZXQgdG8gLTEg YWZ0ZXIgdGhlIHZhbHVlIGlzIGNvbnN1bWVkIHNvCj4gICAJICogd2UgY2FuIGRldGVjdCBuZXcg cmV0aXJlbWVudHMuCj4gICAJICovCj4gLQl1MzIgbGFzdF9yZXRpcmVkX2hlYWQ7Cj4gKwlpbnQg cmV0aXJlZF9oZWFkOwo+ICsJaW50IGJyZWFkY3J1bWJfdGFpbDsKPiArCj4gKwl1bnNpZ25lZCBw ZW5kaW5nX2ZsdXNoOjQ7Cj4gICB9Owo+ICAgCj4gLXN0cnVjdCAgaW50ZWxfZW5naW5lX2NzIHsK PiAtCWNvbnN0IGNoYXIJKm5hbWU7Cj4gK3N0cnVjdCBpbnRlbF9lbmdpbmVfY3Mgewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gKwljb25zdCBjaGFyICpuYW1lOwo+ICAgCWVu dW0gaW50ZWxfcmluZ19pZCB7Cj4gICAJCVJDUyA9IDB4MCwKPiAgIAkJVkNTLAo+IEBAIC0xMzIs NDYgKzEzMiw4MiBAQCBzdHJ1Y3QgIGludGVsX2VuZ2luZV9jcyB7Cj4gICAJCVZFQ1MsCj4gICAJ CVZDUzIKPiAgIAl9IGlkOwo+IC0jZGVmaW5lIEk5MTVfTlVNX1JJTkdTIDUKPiArI2RlZmluZSBJ OTE1X05VTV9FTkdJTkVTIDUKPiArI2RlZmluZSBJOTE1X05VTV9FTkdJTkVfQklUUyA0Cj4gICAj ZGVmaW5lIExBU1RfVVNFUl9SSU5HIChWRUNTICsgMSkKPiAtCXUzMgkJbW1pb19iYXNlOwo+IC0J c3RydWN0CQlkcm1fZGV2aWNlICpkZXY7Cj4gLQlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqYnVm ZmVyOwo+ICsJdTMyIG1taW9fYmFzZTsKPiArCXUzMiBwb3dlcl9kb21haW5zOwo+ICAgCj4gLQlz dHJ1Y3QgaW50ZWxfaHdfc3RhdHVzX3BhZ2Ugc3RhdHVzX3BhZ2U7Cj4gKwkvKiBwcm90ZWN0cyBy ZXF1ZXN0cyBhZ2FpbnN0IGhhbmdjaGVjayAqLwo+ICsJc3BpbmxvY2tfdCBsb2NrOwo+ICsJLyog cHJvdGVjdHMgZXhsaXN0czogcGVuZGluZyArIHN1Ym1pdHRlZCAqLwo+ICsJc3BpbmxvY2tfdCBp cnFsb2NrOwo+ICAgCj4gLQl1bnNpZ25lZCBpcnFfcmVmY291bnQ7IC8qIHByb3RlY3RlZCBieSBk ZXZfcHJpdi0+aXJxX2xvY2sgKi8KPiAtCXUzMgkJaXJxX2VuYWJsZV9tYXNrOwkvKiBiaXRtYXNr IHRvIGVuYWJsZSByaW5nIGludGVycnVwdCAqLwo+IC0JdTMyCQl0cmFjZV9pcnFfc2Vxbm87Cj4g LQlib29sIF9fbXVzdF9jaGVjayAoKmlycV9nZXQpKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcpOwo+IC0Jdm9pZAkJKCppcnFfcHV0KShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsK PiArCWF0b21pY190IGludGVycnVwdHM7Cj4gKwl1MzIgYnJlYWRjcnVtYltJOTE1X05VTV9FTkdJ TkVTXTsKPiArCXUxNiB0YWcsIG5leHRfdGFnOwo+ICsKPiArCXN0cnVjdCBsaXN0X2hlYWQgcmlu Z3M7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlcXVlc3RzOwo+ICsJc3RydWN0IGxpc3RfaGVhZCBw ZW5kaW5nLCBzdWJtaXR0ZWQ7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqbGFzdF9yZXF1 ZXN0Owo+ICAgCj4gLQlpbnQJCSgqaW5pdCkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7 Cj4gKwlzdHJ1Y3QgaW50ZWxfaHdfc3RhdHVzX3BhZ2Ugc3RhdHVzX3BhZ2U7Cj4gICAKPiAtCWlu dAkJKCppbml0X2NvbnRleHQpKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+ICsJc3Ry dWN0IGludGVsX3JpbmdidWZmZXIgKmxlZ2FjeV9yaW5nOwo+ICsKPiArCXVuc2lnbmVkIGlycV9y ZWZjb3VudDsgLyogcHJvdGVjdGVkIGJ5IGk5MTUtPmlycV9sb2NrICovCj4gKwl1MzIJCWlycV9l bmFibGVfbWFzazsgLyogYml0bWFzayB0byBlbmFibGUgcmluZyBpbnRlcnJ1cHQgKi8KPiArCXUz MiAgICAgICAgICAgICBpcnFfa2VlcF9tYXNrOyAvKiBuZXZlciBtYXNrIHRoZXNlIGludGVycnVw dHMgKi8KPiArCXUzMgkJdHJhY2VfaXJxX3NlcW5vOwo+ICsJYm9vbCBfX211c3RfY2hlY2sgKCpp cnFfZ2V0KShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICsJdm9pZAkJKCppcnFf YmFycmllcikoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArCXZvaWQJCSgqaXJx X3B1dCkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArCj4gKwlzdHJ1Y3QgaW50 ZWxfcmluZ2J1ZmZlciAqCj4gKwkJCSgqZ2V0X3JpbmcpKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKPiArCQkJCSAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4KTsKPiArCXZvaWQJ CSgqcHV0X3JpbmcpKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nLAo+ICsJCQkJICAgIHN0 cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgpOwo+ICsKPiArCXZvaWQJCSgqcmV0aXJlKShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkgIHUzMiBzZXFubyk7Cj4gKwl2b2lkCQko KnJlc2V0KShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICsJaW50CQkoKnN1c3Bl bmQpKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gKwlpbnQJCSgqcmVzdW1lKShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICsJdm9pZAkJKCpjbGVhbnVwKShzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICAgCj4gLQl2b2lkCQkoKndyaXRlX3RhaWwp KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gLQkJCQkgICAgICB1MzIgdmFsdWUpOwo+ IC0JaW50IF9fbXVzdF9jaGVjayAoKmZsdXNoKShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5n LAo+IC0JCQkJICB1MzIJaW52YWxpZGF0ZV9kb21haW5zLAo+IC0JCQkJICB1MzIJZmx1c2hfZG9t YWlucyk7Cj4gLQlpbnQJCSgqYWRkX3JlcXVlc3QpKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcpOwo+ICAgCS8qIFNvbWUgY2hpcHNldHMgYXJlIG5vdCBxdWl0ZSBhcyBjb2hlcmVudCBhcyBh ZHZlcnRpc2VkIGFuZCBuZWVkCj4gICAJICogYW4gZXhwZW5zaXZlIGtpY2sgdG8gZm9yY2UgYSB0 cnVlIHJlYWQgb2YgdGhlIHVwLXRvLWRhdGUgc2Vxbm8uCj4gICAJICogSG93ZXZlciwgdGhlIHVw LXRvLWRhdGUgc2Vxbm8gaXMgbm90IGFsd2F5cyByZXF1aXJlZCBhbmQgdGhlIGxhc3QKPiAgIAkg KiBzZWVuIHZhbHVlIGlzIGdvb2QgZW5vdWdoLiBOb3RlIHRoYXQgdGhlIHNlcW5vIHdpbGwgYWx3 YXlzIGJlCj4gICAJICogbW9ub3RvbmljLCBldmVuIGlmIG5vdCBjb2hlcmVudC4KPiAgIAkgKi8K PiAtCXUzMgkJKCpnZXRfc2Vxbm8pKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gLQkJ CQkgICAgIGJvb2wgbGF6eV9jb2hlcmVuY3kpOwo+IC0Jdm9pZAkJKCpzZXRfc2Vxbm8pKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gKwl1MzIJCSgqZ2V0X3NlcW5vKShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICsJdm9pZAkJKCpzZXRfc2Vxbm8pKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgIAkJCQkgICAgIHUzMiBzZXFubyk7Cj4gLQlpbnQJCSgq ZGlzcGF0Y2hfZXhlY2J1ZmZlcikoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAtCQkJ CQkgICAgICAgdTY0IG9mZnNldCwgdTMyIGxlbmd0aCwKPiAtCQkJCQkgICAgICAgdW5zaWduZWQg ZmxhZ3MpOwo+ICsKPiArCWludAkJKCppbml0X2NvbnRleHQpKHN0cnVjdCBpOTE1X2dlbV9yZXF1 ZXN0ICpycSk7Cj4gKwo+ICsJaW50IF9fbXVzdF9jaGVjayAoKmVtaXRfZmx1c2gpKHN0cnVjdCBp OTE1X2dlbV9yZXF1ZXN0ICpycSwKPiArCQkJCSAgICAgICB1MzIgZG9tYWlucyk7Cj4gKyNkZWZp bmUgSTkxNV9GTFVTSF9DQUNIRVMgMHgxCj4gKyNkZWZpbmUgSTkxNV9JTlZBTElEQVRFX0NBQ0hF UyAweDIKPiArI2RlZmluZSBJOTE1X0tJQ0tfRkJDIDB4NAo+ICsjZGVmaW5lIEk5MTVfQ09NTUFO RF9CQVJSSUVSIDB4OAo+ICsJaW50IF9fbXVzdF9jaGVjayAoKmVtaXRfYmF0Y2hidWZmZXIpKHN0 cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwKPiArCQkJCQkgICAgIHU2NCBvZmZzZXQsIHUzMiBs ZW5ndGgsCj4gKwkJCQkJICAgICB1bnNpZ25lZCBmbGFncyk7Cj4gKwlpbnQgX19tdXN0X2NoZWNr ICgqZW1pdF9icmVhZGNydW1iKShzdHJ1Y3QgaTkxNV9nZW1fcmVxdWVzdCAqcnEpOwo+ICsKPiAr CWludCBfX211c3RfY2hlY2sgKCphZGRfcmVxdWVzdCkoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3Qg KnJxKTsKPiArCXZvaWQJCSgqd3JpdGVfdGFpbCkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLAo+ICsJCQkJICAgICAgdTMyIHZhbHVlKTsKPiArCj4gKwlib29sICgqaXNfY29tcGxldGUp KHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSk7Cj4gKwo+ICAgI2RlZmluZSBJOTE1X0RJU1BB VENIX1NFQ1VSRSAweDEKPiAgICNkZWZpbmUgSTkxNV9ESVNQQVRDSF9QSU5ORUQgMHgyCj4gLQl2 b2lkCQkoKmNsZWFudXApKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+ICAgCj4gICAJ LyogR0VOOCBzaWduYWwvd2FpdCB0YWJsZSAtIG5ldmVyIHRydXN0IGNvbW1lbnRzIQo+ICAgCSAq CSAgc2lnbmFsIHRvCXNpZ25hbCB0byAgICBzaWduYWwgdG8gICBzaWduYWwgdG8gICAgICBzaWdu YWwgdG8KPiBAQCAtMjExLDM4ICsyNDcsMjQgQEAgc3RydWN0ICBpbnRlbF9lbmdpbmVfY3Mgewo+ ICAgCSAqICBpZS4gdHJhbnNwb3NlIG9mIGYoeCwgeSkKPiAgIAkgKi8KPiAgIAlzdHJ1Y3Qgewo+ IC0JCXUzMglzeW5jX3NlcW5vW0k5MTVfTlVNX1JJTkdTLTFdOwo+IC0KPiAtCQl1bmlvbiB7Cj4g LQkJCXN0cnVjdCB7Cj4gLQkJCQkvKiBvdXIgbWJveCB3cml0dGVuIGJ5IG90aGVycyAqLwo+IC0J CQkJdTMyCQl3YWl0W0k5MTVfTlVNX1JJTkdTXTsKPiAtCQkJCS8qIG1ib3hlcyB0aGlzIHJpbmcg c2lnbmFscyB0byAqLwo+IC0JCQkJdTMyCQlzaWduYWxbSTkxNV9OVU1fUklOR1NdOwo+IC0JCQl9 IG1ib3g7Cj4gLQkJCXU2NAkJc2lnbmFsX2dndHRbSTkxNV9OVU1fUklOR1NdOwo+IC0JCX07Cj4g LQo+IC0JCS8qIEFLQSB3YWl0KCkgKi8KPiAtCQlpbnQJKCpzeW5jX3RvKShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nLAo+IC0JCQkJICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqdG8sCj4g LQkJCQkgICB1MzIgc2Vxbm8pOwo+IC0JCWludAkoKnNpZ25hbCkoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqc2lnbmFsbGVyLAo+IC0JCQkJICAvKiBudW1fZHdvcmRzIG5lZWRlZCBieSBjYWxsZXIg Ki8KPiAtCQkJCSAgdW5zaWduZWQgaW50IG51bV9kd29yZHMpOwo+ICsJCXN0cnVjdCB7Cj4gKwkJ CS8qIG91ciBtYm94IHdyaXR0ZW4gYnkgb3RoZXJzICovCj4gKwkJCXUzMgkJd2FpdFtJOTE1X05V TV9FTkdJTkVTXTsKPiArCQkJLyogbWJveGVzIHRoaXMgcmluZyBzaWduYWxzIHRvICovCj4gKwkJ CXUzMgkJc2lnbmFsW0k5MTVfTlVNX0VOR0lORVNdOwo+ICsJCX0gbWJveDsKPiArCj4gKwkJaW50 CSgqd2FpdCkoc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKndhaXRlciwKPiArCQkJCXN0cnVjdCBp OTE1X2dlbV9yZXF1ZXN0ICpzaWduYWxsZXIpOwo+ICsJCWludAkoKnNpZ25hbCkoc3RydWN0IGk5 MTVfZ2VtX3JlcXVlc3QgKnJxLCBpbnQgaWQpOwo+ICsKPiArCQl1MzIgc3luY1tJOTE1X05VTV9F TkdJTkVTXTsKPiAgIAl9IHNlbWFwaG9yZTsKPiAgIAo+ICAgCS8qIEV4ZWNsaXN0cyAqLwo+IC0J c3BpbmxvY2tfdCBleGVjbGlzdF9sb2NrOwo+IC0Jc3RydWN0IGxpc3RfaGVhZCBleGVjbGlzdF9x dWV1ZTsKPiArCWJvb2wgZXhlY2xpc3RzX2VuYWJsZWQ7Cj4gKwl1MzIgZXhlY2xpc3RzX3N1Ym1p dHRlZDsKPiAgIAl1OCBuZXh0X2NvbnRleHRfc3RhdHVzX2J1ZmZlcjsKPiAtCXUzMiAgICAgICAg ICAgICBpcnFfa2VlcF9tYXNrOyAvKiBiaXRtYXNrIGZvciBpbnRlcnJ1cHRzIHRoYXQgc2hvdWxk IG5vdCBiZSBtYXNrZWQgKi8KPiAtCWludAkJKCplbWl0X3JlcXVlc3QpKHN0cnVjdCBpbnRlbF9y aW5nYnVmZmVyICpyaW5nYnVmKTsKPiAtCWludAkJKCplbWl0X2ZsdXNoKShzdHJ1Y3QgaW50ZWxf cmluZ2J1ZmZlciAqcmluZ2J1ZiwKPiAtCQkJCSAgICAgIHUzMiBpbnZhbGlkYXRlX2RvbWFpbnMs Cj4gLQkJCQkgICAgICB1MzIgZmx1c2hfZG9tYWlucyk7Cj4gLQlpbnQJCSgqZW1pdF9iYl9zdGFy dCkoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4gLQkJCQkJIHU2NCBvZmZzZXQs IHVuc2lnbmVkIGZsYWdzKTsKPiAgIAo+ICAgCS8qKgo+ICAgCSAqIExpc3Qgb2Ygb2JqZWN0cyBj dXJyZW50bHkgaW52b2x2ZWQgaW4gcmVuZGVyaW5nIGZyb20gdGhlCj4gQEAgLTI1NCwyOCArMjc2 LDEzIEBAIHN0cnVjdCAgaW50ZWxfZW5naW5lX2NzIHsKPiAgIAkgKgo+ICAgCSAqIEEgcmVmZXJl bmNlIGlzIGhlbGQgb24gdGhlIGJ1ZmZlciB3aGlsZSBvbiB0aGlzIGxpc3QuCj4gICAJICovCj4g LQlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9saXN0Owo+IC0KPiAtCS8qKgo+IC0JICogTGlzdCBv ZiBicmVhZGNydW1icyBhc3NvY2lhdGVkIHdpdGggR1BVIHJlcXVlc3RzIGN1cnJlbnRseQo+IC0J ICogb3V0c3RhbmRpbmcuCj4gLQkgKi8KPiAtCXN0cnVjdCBsaXN0X2hlYWQgcmVxdWVzdF9saXN0 Owo+IC0KPiAtCS8qKgo+IC0JICogRG8gd2UgaGF2ZSBzb21lIG5vdCB5ZXQgZW1pdHRlZCByZXF1 ZXN0cyBvdXRzdGFuZGluZz8KPiAtCSAqLwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpwcmVhbGxvY2F0ZWRfbGF6eV9yZXF1ZXN0Owo+IC0JdTMyIG91dHN0YW5kaW5nX2xhenlfc2Vx bm87Cj4gLQlib29sIGdwdV9jYWNoZXNfZGlydHk7Cj4gLQlib29sIGZiY19kaXJ0eTsKPiArCXN0 cnVjdCBsaXN0X2hlYWQgcmVhZF9saXN0LCB3cml0ZV9saXN0LCBmZW5jZV9saXN0Owo+ICAgCj4g ICAJd2FpdF9xdWV1ZV9oZWFkX3QgaXJxX3F1ZXVlOwo+ICAgCj4gICAJc3RydWN0IGludGVsX2Nv bnRleHQgKmRlZmF1bHRfY29udGV4dDsKPiAtCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpsYXN0X2Nv bnRleHQ7Cj4gICAKPiAtCXN0cnVjdCBpbnRlbF9yaW5nX2hhbmdjaGVjayBoYW5nY2hlY2s7Cj4g KwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2hhbmdjaGVjayBoYW5nY2hlY2s7Cj4gICAKPiAgIAlzdHJ1 Y3Qgewo+ICAgCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+IEBAIC0zMTcsNDkg KzMyNCwzMiBAQCBzdHJ1Y3QgIGludGVsX2VuZ2luZV9jcyB7Cj4gICAJdTMyICgqZ2V0X2NtZF9s ZW5ndGhfbWFzaykodTMyIGNtZF9oZWFkZXIpOwo+ICAgfTsKPiAgIAo+IC1ib29sIGludGVsX3Jp bmdfaW5pdGlhbGl6ZWQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gLQo+IC1zdGF0 aWMgaW5saW5lIHVuc2lnbmVkCj4gLWludGVsX3JpbmdfZmxhZyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nKQo+ICtzdGF0aWMgaW5saW5lIGJvb2wKPiAraW50ZWxfZW5naW5lX2luaXRpYWxp emVkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAtCXJldHVybiAxIDw8 IHJpbmctPmlkOwo+ICsJcmV0dXJuIGVuZ2luZS0+ZGVmYXVsdF9jb250ZXh0Owo+ICAgfQo+ICAg Cj4gLXN0YXRpYyBpbmxpbmUgdTMyCj4gLWludGVsX3Jpbmdfc3luY19pbmRleChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCSAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKm90 aGVyKQo+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkCj4gK2ludGVsX2VuZ2luZV9mbGFnKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAtCWludCBpZHg7Cj4gLQo+IC0JLyoK PiAtCSAqIHJjcyAtPiAwID0gdmNzLCAxID0gYmNzLCAyID0gdmVjcywgMyA9IHZjczI7Cj4gLQkg KiB2Y3MgLT4gMCA9IGJjcywgMSA9IHZlY3MsIDIgPSB2Y3MyLCAzID0gcmNzOwo+IC0JICogYmNz IC0+IDAgPSB2ZWNzLCAxID0gdmNzMi4gMiA9IHJjcywgMyA9IHZjczsKPiAtCSAqIHZlY3MgLT4g MCA9IHZjczIsIDEgPSByY3MsIDIgPSB2Y3MsIDMgPSBiY3M7Cj4gLQkgKiB2Y3MyIC0+IDAgPSBy Y3MsIDEgPSB2Y3MsIDIgPSBiY3MsIDMgPSB2ZWNzOwo+IC0JICovCj4gLQo+IC0JaWR4ID0gKG90 aGVyIC0gcmluZykgLSAxOwo+IC0JaWYgKGlkeCA8IDApCj4gLQkJaWR4ICs9IEk5MTVfTlVNX1JJ TkdTOwo+IC0KPiAtCXJldHVybiBpZHg7Cj4gKwlyZXR1cm4gMSA8PCBlbmdpbmUtPmlkOwo+ICAg fQo+ICAgCj4gICBzdGF0aWMgaW5saW5lIHUzMgo+IC1pbnRlbF9yZWFkX3N0YXR1c19wYWdlKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gK2ludGVsX3JlYWRfc3RhdHVzX3BhZ2Uoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCQkgICAgICAgaW50IHJlZykKPiAgIHsK PiAgIAkvKiBFbnN1cmUgdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCBvcHRpbWl6ZSBhd2F5IHRo ZSBsb2FkLiAqLwo+ICAgCWJhcnJpZXIoKTsKPiAtCXJldHVybiByaW5nLT5zdGF0dXNfcGFnZS5w YWdlX2FkZHJbcmVnXTsKPiArCXJldHVybiBlbmdpbmUtPnN0YXR1c19wYWdlLnBhZ2VfYWRkclty ZWddOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW5saW5lIHZvaWQKPiAtaW50ZWxfd3JpdGVfc3Rh dHVzX3BhZ2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAraW50ZWxfd3JpdGVfc3Rh dHVzX3BhZ2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCQkJaW50IHJlZywg dTMyIHZhbHVlKQo+ICAgewo+IC0JcmluZy0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyW3JlZ10gPSB2 YWx1ZTsKPiArCWVuZ2luZS0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyW3JlZ10gPSB2YWx1ZTsKPiAg IH0KPiAgIAo+ICAgLyoqCj4gQEAgLTM4MSw2NCArMzcxLDc3IEBAIGludGVsX3dyaXRlX3N0YXR1 c19wYWdlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gICAjZGVmaW5lIEk5MTVfR0VN X0hXU19TQ1JBVENIX0lOREVYCTB4MzAKPiAgICNkZWZpbmUgSTkxNV9HRU1fSFdTX1NDUkFUQ0hf QUREUiAoSTkxNV9HRU1fSFdTX1NDUkFUQ0hfSU5ERVggPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhf U0hJRlQpCj4gICAKPiAtdm9pZCBpbnRlbF9kZXN0cm95X3JpbmdidWZmZXJfb2JqKHN0cnVjdCBp bnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmKTsKPiAtaW50IGludGVsX2FsbG9jX3JpbmdidWZmZXJf b2JqKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfcmlu Z2J1ZmZlciAqcmluZ2J1Zik7Cj4gK3N0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICoKPiAraW50ZWxf ZW5naW5lX2FsbG9jX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQlz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+ICsJCQlpbnQgc2l6ZSk7Cj4gK3ZvaWQgaW50ZWxf cmluZ19mcmVlKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nKTsKPiAgIAo+IC12b2lkIGlu dGVsX3N0b3BfcmluZ19idWZmZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gLXZv aWQgaW50ZWxfY2xlYW51cF9yaW5nX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5n KTsKPiAtCj4gLWludCBfX211c3RfY2hlY2sgaW50ZWxfcmluZ19iZWdpbihzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nLCBpbnQgbik7Cj4gLWludCBfX211c3RfY2hlY2sgaW50ZWxfcmluZ19j YWNoZWxpbmVfYWxpZ24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gLXN0YXRpYyBp bmxpbmUgdm9pZCBpbnRlbF9yaW5nX2VtaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywK PiArc3RydWN0IGludGVsX3JpbmdidWZmZXIgKl9fbXVzdF9jaGVjawo+ICtpbnRlbF9yaW5nX2Jl Z2luKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpycSwgaW50IG4pOwo+ICtpbnQgX19tdXN0X2No ZWNrIGludGVsX3JpbmdfY2FjaGVsaW5lX2FsaWduKHN0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICpy cSk7Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9yaW5nX2VtaXQoc3RydWN0IGludGVsX3Jp bmdidWZmZXIgKnJpbmcsCj4gICAJCQkJICAgdTMyIGRhdGEpCj4gICB7Cj4gLQlzdHJ1Y3QgaW50 ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiA9IHJpbmctPmJ1ZmZlcjsKPiAtCWlvd3JpdGUzMihkYXRh LCByaW5nYnVmLT52aXJ0dWFsX3N0YXJ0ICsgcmluZ2J1Zi0+dGFpbCk7Cj4gLQlyaW5nYnVmLT50 YWlsICs9IDQ7Cj4gKwlpb3dyaXRlMzIoZGF0YSwgcmluZy0+dmlydHVhbF9zdGFydCArIHJpbmct PnRhaWwpOwo+ICsJcmluZy0+dGFpbCArPSA0Owo+ICAgfQo+IC1zdGF0aWMgaW5saW5lIHZvaWQg aW50ZWxfcmluZ19hZHZhbmNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK3N0YXRp YyBpbmxpbmUgdm9pZCBpbnRlbF9yaW5nX2FkdmFuY2Uoc3RydWN0IGludGVsX3JpbmdidWZmZXIg KnJpbmcpCj4gICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiA9IHJpbmct PmJ1ZmZlcjsKPiAtCXJpbmdidWYtPnRhaWwgJj0gcmluZ2J1Zi0+c2l6ZSAtIDE7Cj4gKwlyaW5n LT50YWlsICY9IHJpbmctPnNpemUgLSAxOwo+ICAgfQo+IC1pbnQgX19pbnRlbF9yaW5nX3NwYWNl KGludCBoZWFkLCBpbnQgdGFpbCwgaW50IHNpemUpOwo+IC1pbnQgaW50ZWxfcmluZ19zcGFjZShz dHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1Zik7Cj4gLWJvb2wgaW50ZWxfcmluZ19zdG9w cGVkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+IC12b2lkIF9faW50ZWxfcmluZ19h ZHZhbmNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+IC0KPiAtaW50IF9fbXVzdF9j aGVjayBpbnRlbF9yaW5nX2lkbGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gLXZv aWQgaW50ZWxfcmluZ19pbml0X3NlcW5vKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsIHUz MiBzZXFubyk7Cj4gLWludCBpbnRlbF9yaW5nX2ZsdXNoX2FsbF9jYWNoZXMoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZyk7Cj4gLWludCBpbnRlbF9yaW5nX2ludmFsaWRhdGVfYWxsX2NhY2hl cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKPiAtCj4gLXZvaWQgaW50ZWxfZmluaV9w aXBlX2NvbnRyb2woc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gLWludCBpbnRlbF9p bml0X3BpcGVfY29udHJvbChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKPiAtCj4gLWlu dCBpbnRlbF9pbml0X3JlbmRlcl9yaW5nX2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK PiAtaW50IGludGVsX2luaXRfYnNkX3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Owo+IC1pbnQgaW50ZWxfaW5pdF9ic2QyX3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwo+IC1pbnQgaW50ZWxfaW5pdF9ibHRfcmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7Cj4gLWludCBpbnRlbF9pbml0X3ZlYm94X3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOwo+ICAgCj4gLXU2NCBpbnRlbF9yaW5nX2dldF9hY3RpdmVfaGVhZChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nKTsKPiAtdm9pZCBpbnRlbF9yaW5nX3NldHVwX3N0YXR1c19w YWdlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+IC0KPiAtc3RhdGljIGlubGluZSB1 MzIgaW50ZWxfcmluZ19nZXRfdGFpbChzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZikK PiArc3RhdGljIGlubGluZSBpbnQgX19pbnRlbF9yaW5nX3NwYWNlKGludCBoZWFkLCBpbnQgdGFp bCwgaW50IHNpemUsIGludCByc3ZkKQo+ICAgewo+IC0JcmV0dXJuIHJpbmdidWYtPnRhaWw7Cj4g KwlpbnQgc3BhY2UgPSBoZWFkIC0gKHRhaWwgKyA4KTsKPiArCWlmIChzcGFjZSA8IDApCj4gKwkJ c3BhY2UgKz0gc2l6ZTsKPiArCXJldHVybiBzcGFjZSAtIHJzdmQ7Cj4gICB9Cj4gICAKPiAtc3Rh dGljIGlubGluZSB1MzIgaW50ZWxfcmluZ19nZXRfc2Vxbm8oc3RydWN0IGludGVsX2VuZ2luZV9j cyAqcmluZykKPiArc3RhdGljIGlubGluZSBpbnQgaW50ZWxfcmluZ19zcGFjZShzdHJ1Y3QgaW50 ZWxfcmluZ2J1ZmZlciAqcmluZykKPiAgIHsKPiAtCUJVR19PTihyaW5nLT5vdXRzdGFuZGluZ19s YXp5X3NlcW5vID09IDApOwo+IC0JcmV0dXJuIHJpbmctPm91dHN0YW5kaW5nX2xhenlfc2Vxbm87 Cj4gKwlyZXR1cm4gX19pbnRlbF9yaW5nX3NwYWNlKHJpbmctPmhlYWQsIHJpbmctPnRhaWwsCj4g KwkJCQkgIHJpbmctPnNpemUsIEk5MTVfUklOR19SU1ZEKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMg aW5saW5lIHZvaWQgaTkxNV90cmFjZV9pcnFfZ2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcsIHUzMiBzZXFubykKPiArCj4gK3N0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICogX19tdXN0X2No ZWNrIF9fYXR0cmlidXRlX18oKG5vbm51bGwpKQo+ICtpbnRlbF9lbmdpbmVfYWxsb2NfcmVxdWVz dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCSAgIHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjdHgpOwo+ICsKPiArc3RydWN0IGk5MTVfZ2VtX3JlcXVlc3QgKgo+ICtpbnRlbF9l bmdpbmVfZmluZF9hY3RpdmVfYmF0Y2goc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsK PiArCj4gK3N0cnVjdCBpOTE1X2dlbV9yZXF1ZXN0ICoKPiAraW50ZWxfZW5naW5lX3NlcW5vX3Rv X3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkgICAgICB1MzIg c2Vxbm8pOwo+ICsKPiAraW50IGludGVsX2luaXRfcmVuZGVyX2VuZ2luZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gK2ludCBpbnRlbF9pbml0X2JzZF9lbmdpbmUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ICtpbnQgaW50ZWxfaW5pdF9ic2QyX2VuZ2luZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gK2ludCBpbnRlbF9pbml0X2JsdF9lbmdpbmUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ICtpbnQgaW50ZWxfaW5pdF92ZWJveF9l bmdpbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ICsKPiArI2RlZmluZSBpbnRl bF9lbmdpbmVfaGFuZyhlbmdpbmUpIFwKPiArCShlbmdpbmUtPmk5MTUtPmdwdV9lcnJvci5zdG9w X3JpbmdzICYgaW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKSkKPiAraW50IF9fbXVzdF9jaGVjayBp bnRlbF9lbmdpbmVfc3luYyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICtpbnQg X19tdXN0X2NoZWNrIGludGVsX2VuZ2luZV9mbHVzaChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsCj4gKwkJCQkgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCk7Cj4gKwo+ICtpbnQg aW50ZWxfZW5naW5lX3JldGlyZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBz ZXFubyk7Cj4gK3ZvaWQgaW50ZWxfZW5naW5lX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSk7Cj4gK2ludCBpbnRlbF9lbmdpbmVfc3VzcGVuZChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpOwo+ICtpbnQgaW50ZWxfZW5naW5lX3Jlc3VtZShzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpOwo+ICt2b2lkIGludGVsX2VuZ2luZV9jbGVhbnVwKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gKwo+ICsKPiArdTY0IGludGVsX2VuZ2luZV9nZXRfYWN0 aXZlX2hlYWQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArCj4gK3N0YXRpYyBp bmxpbmUgdm9pZCBpOTE1X3RyYWNlX2lycV9nZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLCB1MzIgc2Vxbm8pCj4gICB7Cj4gLQlpZiAocmluZy0+dHJhY2VfaXJxX3NlcW5vID09IDAg JiYgcmluZy0+aXJxX2dldChyaW5nKSkKPiAtCQlyaW5nLT50cmFjZV9pcnFfc2Vxbm8gPSBzZXFu bzsKPiArCWlmIChlbmdpbmUtPnRyYWNlX2lycV9zZXFubyB8fCBlbmdpbmUtPmlycV9nZXQoZW5n aW5lKSkKPiArCQllbmdpbmUtPnRyYWNlX2lycV9zZXFubyA9IHNlcW5vOwo+ICAgfQo+ICAgCj4g ICAjZW5kaWYgLyogX0lOVEVMX1JJTkdCVUZGRVJfSF8gKi8KCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==