From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [WIP PATCH 03/15] drm/dp_mst: Introduce new refcounting scheme for mstbs and ports Date: Wed, 19 Dec 2018 13:48:11 +0100 Message-ID: <20181219124811.GN21184@phenom.ffwll.local> References: <20181214012604.13746-1-lyude@redhat.com> <20181214012604.13746-4-lyude@redhat.com> <20181214092900.GN21184@phenom.ffwll.local> <483ba47f152486005318ca2e1a2d8d2a65d29927.camel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <483ba47f152486005318ca2e1a2d8d2a65d29927.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Lyude Paul Cc: Sean Paul , Jonathan Corbet , Maxime Ripard , nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Maarten Lankhorst , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, David Airlie , Jerry Zuo , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Daniel Vetter , Harry Wentland , David Airlie , Dave Airlie , Juston Li T24gVHVlLCBEZWMgMTgsIDIwMTggYXQgMDQ6Mjc6NThQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBPbiBGcmksIDIwMTgtMTItMTQgYXQgMTA6MjkgKzAxMDAsIERhbmllbCBWZXR0ZXIgd3Jv dGU6Cj4gPiBPbiBUaHUsIERlYyAxMywgMjAxOCBhdCAwODoyNTozMlBNIC0wNTAwLCBMeXVkZSBQ YXVsIHdyb3RlOgo+ID4gPiBUaGUgY3VycmVudCB3YXkgb2YgaGFuZGxpbmcgcmVmY291bnRpbmcg aW4gdGhlIERQIE1TVCBoZWxwZXJzIGlzIHJlYWxseQo+ID4gPiBjb25mdXNpbmcgYW5kIHByb2Jh Ymx5IGp1c3QgcGxhaW4gd3JvbmcgYmVjYXVzZSBpdCdzIGJlZW4gaGFja2VkIHVwIG1hbnkKPiA+ ID4gdGltZXMgb3ZlciB0aGUgeWVhcnMgd2l0aG91dCBhbnlvbmUgYWN0dWFsbHkgZ29pbmcgb3Zl ciB0aGUgY29kZSBhbmQKPiA+ID4gc2VlaW5nIGlmIHRoaW5ncyBjb3VsZCBiZSBzaW1wbGlmaWVk Lgo+ID4gPiAKPiA+ID4gVG8gdGhlIGJlc3Qgb2YgbXkgdW5kZXJzdGFuZGluZywgdGhlIGN1cnJl bnQgc2NoZW1lIHdvcmtzIGxpa2UgdGhpczoKPiA+ID4gZHJtX2RwX21zdF9wb3J0IGFuZCBkcm1f ZHBfbXN0X2JyYW5jaCBib3RoIGhhdmUgYSBzaW5nbGUgcmVmY291bnQuIFdoZW4KPiA+ID4gdGhp cyByZWZjb3VudCBoaXRzIDAgZm9yIGVpdGhlciBvZiB0aGUgdHdvLCB0aGV5J3JlIHJlbW92ZWQg ZnJvbSB0aGUKPiA+ID4gdG9wb2xvZ3kgc3RhdGUsIGJ1dCBub3QgaW1tZWRpYXRlbHkgZnJlZWQu IEJvdGggcG9ydHMgYW5kIGJyYW5jaCBkZXZpY2VzCj4gPiA+IHdpbGwgcmVpbml0aWFsaXplIHRo ZWlyIGtyZWYgb25jZSBpdCdzIGhpdCAwIGJlZm9yZSBhY3R1YWxseSBkZXN0cm95aW5nCj4gPiA+ IHRoZW1zZWx2ZXMuIFRoZSBpbnRlbmRlZCBwdXJwb3NlIGJlaGluZCB0aGlzIGlzIHNvIHRoYXQg d2UgY2FuIGF2b2lkCj4gPiA+IHByb2JsZW1zIGxpa2Ugbm90IGJlaW5nIGFibGUgdG8gZnJlZSBh IHJlbW90ZSBwYXlsb2FkIHRoYXQgbWlnaHQgc3RpbGwKPiA+ID4gYmUgYWN0aXZlLCBkdWUgdG8g dXMgaGF2aW5nIHJlbW92ZWQgYWxsIG9mIHRoZSBwb3J0L2JyYW5jaCBkZXZpY2UKPiA+ID4gc3Ry dWN0dXJlcyBpbiBtZW1vcnksIGFzIHBlcjoKPiA+ID4gCj4gPiA+IDkxYTI1ZTQ2MzEzMCAoImRy bS9kcC9tc3Q6IGRlYWxsb2NhdGUgcGF5bG9hZCBvbiBwb3J0IGRlc3RydWN0aW9uIikKPiA+ID4g Cj4gPiA+IFdoaWNoIG1heSBoYXZlIHdvcmtlZCwgYnV0IHRoZW4gaXQgY2F1c2VkIHVzZS1hZnRl ci1mcmVlIGVycm9ycy4gQmVpbmcKPiA+ID4gbmV3IHRvIE1TVCBhdCB0aGUgdGltZSwgSSB0cmll ZCBmaXhpbmcgaXQ7Cj4gPiA+IAo+ID4gPiAyNjNlZmRlMzFmOTcgKCJkcm0vZHAvbXN0OiBHZXQg dmFsaWRhdGVkIHBvcnQgcmVmIGluCj4gPiA+IGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MSgp IikKPiA+ID4gCj4gPiA+IEJ1dCwgdGhhdCB3YXMgYnJva2VuOiBib3RoIGRybV9kcF9tc3RfcG9y dCBhbmQgZHJtX2RwX21zdF9icmFuY2ggc3RydWN0cwo+ID4gPiBhcmUgdmFsaWRhdGVkIGluIGFs bW9zdCBldmVyeSBEUCBNU1QgaGVscGVyIGZ1bmN0aW9uLiBTaW1wbHkgcHV0LCB0aGlzCj4gPiA+ IG1lYW5zIHdlIGdvIHRocm91Z2ggdGhlIHRvcG9sb2d5IGFuZCB0cnkgdG8gc2VlIGlmIHRoZSBn aXZlbgo+ID4gPiBkcm1fZHBfbXN0X2JyYW5jaCBvciBkcm1fZHBfbXN0X3BvcnQgaXMgc3RpbGwg YXR0YWNoZWQgdG8gc29tZXRoaW5nCj4gPiA+IGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0IGluIG9y ZGVyIHRvIGF2b2lkIGRlcmVmZXJlbmNpbmcgZnJlZWQgbWVtb3J5Cj4gPiA+IChzb21ldGhpbmcg dGhhdCBoYXMgaGFwcGVuZWQgYSBMT1QgaW4gdGhlIHBhc3Qgd2l0aCB0aGlzIGxpYnJhcnkpLgo+ ID4gPiBCZWNhdXNlIG9mIHRoaXMgaXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgd2hldGhlciBv ciBub3Qgd2Uga2VlcCBrZWVwCj4gPiA+IHRoZSBwb3J0cyBhbmQgYnJhbmNoZXMgYXJvdW5kIGlu IG1lbW9yeSBhcyB0aGF0J3Mgbm90IGVub3VnaCwgYmVjYXVzZQo+ID4gPiBhbnkgZnVuY3Rpb24g dGhhdCB2YWxpZGF0ZXMgdGhlIGJyYW5jaGVzIGFuZCBwb3J0cyBwYXNzZWQgdG8gaXQgd2lsbAo+ ID4gPiBzdGlsbCByZWplY3QgdGhlbSBhbnl3YXkgc2luY2UgdGhleSdyZSBubyBsb25nZXIgaW4g dGhlIHRvcG9sb2d5Cj4gPiA+IHN0cnVjdHVyZS4gU28sIHVzZS1hZnRlci1mcmVlIGVycm9ycyB3 ZXJlIGZpeGVkIGJ1dCBwYXlsb2FkIGRlYWxsb2NhdGlvbgo+ID4gPiB3YXMgY29tcGxldGVseSBi cm9rZW4uCj4gPiA+IAo+ID4gPiBUd28geWVhcnMgbGF0ZXIsIEFNRCBpbmZvcm1lZCBtZSBhYm91 dCB0aGlzIGlzc3VlIGFuZCBJIGF0dGVtcHRlZCB0bwo+ID4gPiBjb21lIHVwIHdpdGggYSB0ZW1w b3JhcnkgZml4LCBwZW5kaW5nIGEgbG9uZy1vdmVyZHVlIGNsZWFudXAgb2YgdGhpcwo+ID4gPiBs aWJyYXJ5Ogo+ID4gPiAKPiA+ID4gYzU0YzczNzRmZjQ0ICgiZHJtL2RwX21zdDogU2tpcCB2YWxp ZGF0aW5nIHBvcnRzIGR1cmluZyBkZXN0cnVjdGlvbiwganVzdAo+ID4gPiByZWYiKQo+ID4gPiAK PiA+ID4gQnV0IHRoZW4gdGhhdCBpbnRyb2R1Y2VkIHVzZS1hZnRlci1mcmVlIGVycm9ycywgc28g SSBxdWlja2x5IHJldmVydGVkCj4gPiA+IGl0Ogo+ID4gPiAKPiA+ID4gOTc2NTYzNWIzMDc1ICgi UmV2ZXJ0ICJkcm0vZHBfbXN0OiBTa2lwIHZhbGlkYXRpbmcgcG9ydHMgZHVyaW5nCj4gPiA+IGRl c3RydWN0aW9uLCBqdXN0IHJlZiIiKQo+ID4gPiAKPiA+ID4gQW5kIGluIHRoZSBwcm9jZXNzLCBs ZWFybmVkIHRoYXQgdGhlcmUgaXMganVzdCBubyBzaW1wbGUgZml4IGZvciB0aGlzOgo+ID4gPiB0 aGUgZGVzaWduIGlzIGp1c3QgYnJva2VuLiBVbmZvcnR1bnRlbHksIHRoZSB1c2FnZSBvZiB0aGVz ZSBoZWxwZXJzIGFyZQo+ID4gPiBxdWl0ZSBicm9rZW4gYXMgd2VsbC4gU29tZSBkcml2ZXJzIGxp a2UgaTkxNSBoYXZlIGJlZW4gc21hcnQgZW5vdWdoIHRvCj4gPiA+IGF2b2lkIGFjY2Vzc2luZyBh bnkga2luZCBvZiBpbmZvcm1hdGlvbiBmcm9tIE1TVCBwb3J0IHN0cnVjdHVyZXMsIGJ1dAo+ID4g PiBvdGhlcnMgbGlrZSBub3V2ZWF1IGhhdmUgYXNzdW1lZCwgdW5kZXJzdGFuZGFibHkgc28sIHRo YXQKPiA+ID4gZHJtX2RwX21zdF9wb3J0IHN0cnVjdHVyZXMgYXJlIG5vcm1hbCBhbmQgY2FuIGp1 c3QgYmUgYWNjZXNzZWQgYXQgYW55Cj4gPiA+IHRpbWUgd2l0aG91dCB3b3JyeWluZyBhYm91dCB1 c2UtYWZ0ZXItZnJlZSBlcnJvcnMuCj4gPiA+IAo+ID4gPiBBZnRlciBhIGxvdCBvZiBkaXNjdXNz aW9uLCBtZSBhbmQgRGFuaWVsIFZldHRlciBjYW1lIHVwIHdpdGggYSBiZXR0ZXIKPiA+ID4gaWRl YSB0byByZXBsYWNlIGFsbCBvZiB0aGlzLgo+ID4gPiAKPiA+ID4gVG8gc3VtbWFyaXplLCBzaW5j ZSB0aGlzIGlzIGRvY3VtZW50ZWQgZmFyIG1vcmUgaW5kZXB0aCBpbiB0aGUKPiA+ID4gZG9jdW1l bnRhdGlvbiB0aGlzIHBhdGNoIGludHJvZHVjZXMsIHdlIG1ha2UgaXQgc28gdGhhdCBkcm1fZHBf bXN0X3BvcnQKPiA+ID4gYW5kIGRybV9kcF9tc3RfYnJhbmNoIHN0cnVjdHVyZXMgaGF2ZSB0d28g ZGlmZmVyZW50IGNsYXNzZXMgb2YKPiA+ID4gcmVmY291bnRzOiB0b3BvbG9neV9rcmVmLCBhbmQg bWFsbG9jX2tyZWYuIHRvcG9sb2d5X2tyZWYgY29ycmVzcG9uZHMgdG8KPiA+ID4gdGhlIGxpZmV0 aW1lIG9mIHRoZSBnaXZlbiBkcm1fZHBfbXN0X3BvcnQgb3IgZHJtX2RwX21zdF9icmFuY2ggaW4g aXQncwo+ID4gPiBnaXZlbiB0b3BvbG9neS4gT25jZSBpdCBoaXRzIHplcm8sIGFueSBhc3NvY2lh dGVkIGNvbm5lY3RvcnMgYXJlIHJlbW92ZWQKPiA+ID4gYW5kIHRoZSBicmFuY2ggb3IgcG9ydCBj YW4gbm8gbG9uZ2VyIGJlIHZhbGlkYXRlZC4gbWFsbG9jX2tyZWYKPiA+ID4gY29ycmVzcG9uZHMg dG8gdGhlIGxpZmV0aW1lIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIGFjdHVhbAo+ ID4gPiBzdHJ1Y3R1cmUsIGFuZCB3aWxsIGFsd2F5cyBiZSBub24temVybyBzbyBsb25nIGFzIHRo ZSB0b3BvbG9neV9rcmVmIGlzCj4gPiA+IG5vbi16ZXJvLiBUaGlzIGdpdmVzIHVzIGEgd2F5IHRv IGFsbG93IGNhbGxlcnMgdG8gaG9sZCBvbnRvIHBvcnQgYW5kCj4gPiA+IGJyYW5jaCBkZXZpY2Ug c3RydWN0dXJlcyBwYXN0IHRoZWlyIHRvcG9sb2d5IGxpZmV0aW1lLCBhbmQgZHJhbWF0aWNhbGx5 Cj4gPiA+IHNpbXBsaWZpZXMgdGhlIGxpZmV0aW1lcyBvZiBib3RoIHN0cnVjdHVyZXMuIFRoaXMg YWxzbyBmaW5hbGx5IGZpeGVzIHRoZQo+ID4gPiBwb3J0IGRlYWxsb2NhdGlvbiBwcm9ibGVtLCBw cm9wZXJseS4KPiA+ID4gCj4gPiA+IEFkZGl0aW9uYWxseTogc2luY2UgdGhpcyBub3cgbWVhbnMg dGhhdCB3ZSBjYW4ga2VlcCBwb3J0cyBhbmQgYnJhbmNoCj4gPiA+IGRldmljZXMgYWxsb2NhdGVk IGluIG1lbW9yeSBmb3IgaG93ZXZlciBsb25nIHdlIG5lZWQsIHdlIG5vIGxvbmdlciBuZWVkCj4g PiA+IGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHRoZSBwb3J0IHZhbGlkYXRpb24gdGhhdCB3ZSBj dXJyZW50bHkgZG8uCj4gPiA+IAo+ID4gPiBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIG9uZSBsYXN0 IHNjZW5hcmlvIHRoYXQgdGhpcyBmaXhlcywgd2hpY2ggY291bGRuJ3QKPiA+ID4gaGF2ZSBiZWVu IGZpeGVkIHByb3Blcmx5IGJlZm9yZWhhbmQ6Cj4gPiA+IAo+ID4gPiAtIENQVTEgdW5yZWZzIHBv cnQgZnJvbSB0b3BvbG9neSAocmVmY291bnQgMS0+MCkKPiA+ID4gLSBDUFUyIHJlZnMgcG9ydCBp biB0b3BvbG9neShyZWZjb3VudCAwLT4xKQo+ID4gPiAKPiA+ID4gU2luY2Ugd2Ugbm93IGNhbiBn dWFyYW50ZWUgbWVtb3J5IHNhZmV0eSBmb3IgcG9ydHMgYW5kIGJyYW5jaGVzCj4gPiA+IGFzLW5l ZWRlZCwgd2UgYWxzbyBjYW4gbWFrZSBvdXIgbWFpbiByZWZlcmVuY2UgY291bnRpbmcgZnVuY3Rp b25zIGZpeAo+ID4gPiB0aGlzIHByb2JsZW0gYnkgdXNpbmcga3JlZl9nZXRfdW5sZXNzX3plcm8o KSBpbnRlcm5hbGx5IHNvIHRoYXQgdG9wb2xvZ3kKPiA+ID4gcmVmY291bnRzIGNhbiBvbmx5IGV2 ZXIgcmVhY2ggMCBvbmNlLgo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogTHl1ZGUgUGF1bCA8 bHl1ZGVAcmVkaGF0LmNvbT4KPiA+ID4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5j aD4KPiA+ID4gQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgo+ID4gPiBDYzog SmVycnkgWnVvIDxKZXJyeS5adW9AYW1kLmNvbT4KPiA+ID4gQ2M6IEhhcnJ5IFdlbnRsYW5kIDxo YXJyeS53ZW50bGFuZEBhbWQuY29tPgo+ID4gPiBDYzogSnVzdG9uIExpIDxqdXN0b24ubGlAaW50 ZWwuY29tPgo+ID4gPiAtLS0KPiA+ID4gIC4uLi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0x LmRvdCAgICAgICAgICB8ICAzMSArKwo+ID4gPiAgLi4uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmln dXJlLTIuZG90ICAgICAgICAgIHwgIDM3ICsrCj4gPiA+ICAuLi4vZ3B1L2RwLW1zdC90b3BvbG9n eS1maWd1cmUtMy5kb3QgICAgICAgICAgfCAgNDAgKysKPiA+ID4gIERvY3VtZW50YXRpb24vZ3B1 L2RybS1rbXMtaGVscGVycy5yc3QgICAgICAgICB8IDEyNSArKysrLQo+ID4gPiAgZHJpdmVycy9n cHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYyAgICAgICAgIHwgNTEyICsrKysrKysrKysrKyst LS0tLQo+ID4gPiAgaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaCAgICAgICAgICAgICAg IHwgIDE5ICstCj4gPiA+ICA2IGZpbGVzIGNoYW5nZWQsIDYzNyBpbnNlcnRpb25zKCspLCAxMjcg ZGVsZXRpb25zKC0pCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9ncHUv ZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0xLmRvdAo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IERv Y3VtZW50YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMi5kb3QKPiA+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTMu ZG90Cj4gPiAKPiA+IFlheSwgZG9jcywgYW5kIHByZXR0eSBvbmVzIGF0IHRoYXQhIEF3ZXNvbWUg c3R1ZmYgOi0pCj4gPiAKPiA+ID4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RwLW1z dC90b3BvbG9neS1maWd1cmUtMS5kb3QKPiA+ID4gYi9Eb2N1bWVudGF0aW9uL2dwdS9kcC1tc3Qv dG9wb2xvZ3ktZmlndXJlLTEuZG90Cj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uZmI4Mzc4OWUwYTNlCj4gPiA+IC0tLSAvZGV2L251bGwKPiA+ID4g KysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0xLmRvdAo+ID4g PiBAQCAtMCwwICsxLDMxIEBACj4gPiA+ICtkaWdyYXBoIFQgewo+ID4gPiArICAgIC8qIFRvcG9s b2d5IHJlZmVyZW5jZXMgKi8KPiA+ID4gKyAgICBub2RlIFtzaGFwZT1vdmFsXTsKPiA+ID4gKyAg ICBtc3RiMSAtPiB7cG9ydDEsIHBvcnQyfTsKPiA+ID4gKyAgICBwb3J0MSAtPiBtc3RiMjsKPiA+ ID4gKyAgICBwb3J0MiAtPiBtc3RiMyAtPiB7cG9ydDMsIHBvcnQ0fTsKPiA+ID4gKyAgICBwb3J0 MyAtPiBtc3RiNDsKPiA+ID4gKwo+ID4gPiArICAgIC8qIE1hbGxvYyByZWZlcmVuY2VzICovCj4g PiA+ICsgICAgZWRnZSBbc3R5bGU9ZGFzaGVkXTsKPiA+ID4gKyAgICBtc3RiNCAtPiBwb3J0MzsK PiA+ID4gKyAgICB7cG9ydDQsIHBvcnQzfSAtPiBtc3RiMzsKPiA+ID4gKyAgICBtc3RiMyAtPiBw b3J0MjsKPiA+ID4gKyAgICBtc3RiMiAtPiBwb3J0MTsKPiA+ID4gKyAgICB7cG9ydDEsIHBvcnQy fSAtPiBtc3RiMTsKPiA+ID4gKwo+ID4gPiArICAgIGVkZ2UgW2Rpcj1iYWNrXTsKPiA+ID4gKyAg ICBub2RlIFtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94O2ZpbGxjb2xvcj1saWdodGJsdWVdOwo+ID4g PiArICAgIHBvcnQxIC0+ICJQYXlsb2FkICMxIjsKPiA+ID4gKyAgICBwb3J0MyAtPiAiUGF5bG9h ZCAjMiI7Cj4gPiA+ICsKPiA+ID4gKyAgICBtc3RiMSBbbGFiZWw9Ik1TVEIgIzEiO3N0eWxlPWZp bGxlZDtmaWxsY29sb3I9cGFsZWdyZWVuXTsKPiA+ID4gKyAgICBtc3RiMiBbbGFiZWw9Ik1TVEIg IzIiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFsZWdyZWVuXTsKPiA+ID4gKyAgICBtc3RiMyBb bGFiZWw9Ik1TVEIgIzMiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFsZWdyZWVuXTsKPiA+ID4g KyAgICBtc3RiNCBbbGFiZWw9Ik1TVEIgIzQiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFsZWdy ZWVuXTsKPiA+ID4gKwo+ID4gPiArICAgIHBvcnQxIFtsYWJlbD0iUG9ydCAjMSJdOwo+ID4gPiAr ICAgIHBvcnQyIFtsYWJlbD0iUG9ydCAjMiJdOwo+ID4gPiArICAgIHBvcnQzIFtsYWJlbD0iUG9y dCAjMyJdOwo+ID4gPiArICAgIHBvcnQ0IFtsYWJlbD0iUG9ydCAjNCJdOwo+ID4gPiArfQo+ID4g PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0y LmRvdAo+ID4gPiBiL0RvY3VtZW50YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMi5k b3QKPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5l ZWJjZTU2MGJlNDAKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9Eb2N1bWVudGF0aW9u L2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTIuZG90Cj4gPiA+IEBAIC0wLDAgKzEsMzcgQEAK PiA+ID4gK2RpZ3JhcGggVCB7Cj4gPiA+ICsgICAgLyogVG9wb2xvZ3kgcmVmZXJlbmNlcyAqLwo+ ID4gPiArICAgIG5vZGUgW3NoYXBlPW92YWxdOwo+ID4gPiArCj4gPiA+ICsgICAgbXN0YjEgLT4g e3BvcnQxLCBwb3J0Mn07Cj4gPiA+ICsgICAgcG9ydDEgLT4gbXN0YjI7Cj4gPiA+ICsgICAgZWRn ZSBbY29sb3I9cmVkXTsKPiA+ID4gKyAgICBwb3J0MiAtPiBtc3RiMyAtPiB7cG9ydDMsIHBvcnQ0 fTsKPiA+ID4gKyAgICBwb3J0MyAtPiBtc3RiNDsKPiA+ID4gKyAgICBlZGdlIFtjb2xvcj0iIl07 Cj4gPiA+ICsKPiA+ID4gKyAgICAvKiBNYWxsb2MgcmVmZXJlbmNlcyAqLwo+ID4gPiArICAgIGVk Z2UgW3N0eWxlPWRhc2hlZF07Cj4gPiA+ICsgICAgcG9ydDMgLT4gbXN0YjM7Cj4gPiA+ICsgICAg bXN0YjMgLT4gcG9ydDI7Cj4gPiA+ICsgICAgbXN0YjIgLT4gcG9ydDE7Cj4gPiA+ICsgICAge3Bv cnQxLCBwb3J0Mn0gLT4gbXN0YjE7Cj4gPiA+ICsgICAgZWRnZSBbY29sb3I9cmVkXTsKPiA+ID4g KyAgICBtc3RiNCAtPiBwb3J0MzsKPiA+ID4gKyAgICBwb3J0NCAtPiBtc3RiMzsKPiA+ID4gKyAg ICBlZGdlIFtjb2xvcj0iIl07Cj4gPiA+ICsKPiA+ID4gKyAgICBlZGdlIFtkaXI9YmFja107Cj4g PiA+ICsgICAgbm9kZSBbc3R5bGU9ZmlsbGVkO3NoYXBlPWJveDtmaWxsY29sb3I9bGlnaHRibHVl XTsKPiA+ID4gKyAgICBwb3J0MSAtPiAiUGF5bG9hZCAjMSI7Cj4gPiA+ICsgICAgcG9ydDMgLT4g IlBheWxvYWQgIzIiOwo+ID4gPiArCj4gPiA+ICsgICAgbXN0YjEgW2xhYmVsPSJNU1RCICMxIjtz dHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbl07Cj4gPiA+ICsgICAgbXN0YjIgW2xhYmVs PSJNU1RCICMyIjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbl07Cj4gPiA+ICsgICAg bXN0YjMgW2xhYmVsPSJNU1RCICMzIjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbl07 Cj4gPiA+ICsgICAgbXN0YjQgW2xhYmVsPSJNU1RCICM0IjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9y PWdyZXldOwo+ID4gPiArCj4gPiA+ICsgICAgcG9ydDEgW2xhYmVsPSJQb3J0ICMxIl07Cj4gPiA+ ICsgICAgcG9ydDIgW2xhYmVsPSJQb3J0ICMyIl07Cj4gPiA+ICsgICAgcG9ydDMgW2xhYmVsPSJQ b3J0ICMzIl07Cj4gPiA+ICsgICAgcG9ydDQgW2xhYmVsPSJQb3J0ICM0IjtzdHlsZT1maWxsZWQ7 ZmlsbGNvbG9yPWdyZXldOwo+ID4gPiArfQo+ID4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0zLmRvdAo+ID4gPiBiL0RvY3VtZW50YXRpb24v Z3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMy5kb3QKPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi45YmYyOGQ4NzE0NGMKPiA+ID4gLS0tIC9kZXYv bnVsbAo+ID4gPiArKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJl LTMuZG90Cj4gPiA+IEBAIC0wLDAgKzEsNDAgQEAKPiA+ID4gK2RpZ3JhcGggVCB7Cj4gPiA+ICsg ICAgLyogVG9wb2xvZ3kgcmVmZXJlbmNlcyAqLwo+ID4gPiArICAgIG5vZGUgW3NoYXBlPW92YWxd Owo+ID4gPiArCj4gPiA+ICsgICAgbXN0YjEgLT4ge3BvcnQxLCBwb3J0Mn07Cj4gPiA+ICsgICAg cG9ydDEgLT4gbXN0YjI7Cj4gPiA+ICsgICAgZWRnZSBbY29sb3I9Z3JleV07Cj4gPiA+ICsgICAg cG9ydDIgLT4gbXN0YjMgLT4ge3BvcnQzLCBwb3J0NH07Cj4gPiA+ICsgICAgcG9ydDMgLT4gbXN0 YjQ7Cj4gPiA+ICsgICAgZWRnZSBbY29sb3I9IiJdOwo+ID4gPiArCj4gPiA+ICsgICAgLyogTWFs bG9jIHJlZmVyZW5jZXMgKi8KPiA+ID4gKyAgICBlZGdlIFtzdHlsZT1kYXNoZWRdOwo+ID4gPiAr ICAgIHBvcnQzIC0+IG1zdGIzIFtwZW53aWR0aD0zXTsKPiA+ID4gKyAgICBtc3RiMyAtPiBwb3J0 MiBbcGVud2lkdGg9M107Cj4gPiA+ICsgICAgbXN0YjIgLT4gcG9ydDE7Cj4gPiA+ICsgICAge3Bv cnQxLCBwb3J0Mn0gLT4gbXN0YjE7Cj4gPiA+ICsgICAgZWRnZSBbY29sb3I9Z3JleV07Cj4gPiA+ ICsgICAgbXN0YjQgLT4gcG9ydDM7Cj4gPiA+ICsgICAgcG9ydDQgLT4gbXN0YjM7Cj4gPiA+ICsg ICAgZWRnZSBbY29sb3I9IiJdOwo+ID4gPiArCj4gPiA+ICsgICAgZWRnZSBbZGlyPWJhY2tdOwo+ ID4gPiArICAgIG5vZGUgW3N0eWxlPWZpbGxlZDtzaGFwZT1ib3g7ZmlsbGNvbG9yPWxpZ2h0Ymx1 ZV07Cj4gPiA+ICsgICAgcG9ydDEgLT4gcGF5bG9hZDE7Cj4gPiA+ICsgICAgcG9ydDMgLT4gcGF5 bG9hZDIgW3BlbndpZHRoPTNdOwo+ID4gPiArCj4gPiA+ICsgICAgbXN0YjEgW2xhYmVsPSJNU1RC ICMxIjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbl07Cj4gPiA+ICsgICAgbXN0YjIg W2xhYmVsPSJNU1RCICMyIjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbl07Cj4gPiA+ ICsgICAgbXN0YjMgW2xhYmVsPSJNU1RCICMzIjtwZW53aWR0aD0zO3N0eWxlPWZpbGxlZDtmaWxs Y29sb3I9cGFsZWdyZWVuXTsKPiA+ID4gKyAgICBtc3RiNCBbbGFiZWw9Ik1TVEIgIzQiO3N0eWxl PWZpbGxlZDtmaWxsY29sb3I9Z3JleV07Cj4gPiA+ICsKPiA+ID4gKyAgICBwb3J0MSBbbGFiZWw9 IlBvcnQgIzEiXTsKPiA+ID4gKyAgICBwb3J0MiBbbGFiZWw9IlBvcnQgIzIiO3BlbndpZHRoPTNd Owo+ID4gPiArICAgIHBvcnQzIFtsYWJlbD0iUG9ydCAjMyI7cGVud2lkdGg9M107Cj4gPiA+ICsg ICAgcG9ydDQgW2xhYmVsPSJQb3J0ICM0IjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPWdyZXldOwo+ ID4gPiArCj4gPiA+ICsgICAgcGF5bG9hZDEgW2xhYmVsPSJQYXlsb2FkICMxIl07Cj4gPiA+ICsg ICAgcGF5bG9hZDIgW2xhYmVsPSJQYXlsb2FkICMyIjtwZW53aWR0aD0zXTsKPiA+ID4gK30KPiA+ ID4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QKPiA+ ID4gYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0Cj4gPiA+IGluZGV4IGI0 MjJlYjhlZGYxNi4uYzBmOTk0YzJjNzJmIDEwMDY0NAo+ID4gPiAtLS0gYS9Eb2N1bWVudGF0aW9u L2dwdS9kcm0ta21zLWhlbHBlcnMucnN0Cj4gPiA+ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2Ry bS1rbXMtaGVscGVycy5yc3QKPiA+ID4gQEAgLTIwOCw4ICsyMDgsMTEgQEAgRGlzcGxheSBQb3J0 IER1YWwgTW9kZSBBZGFwdG9yIEhlbHBlciBGdW5jdGlvbnMKPiA+ID4gUmVmZXJlbmNlCj4gPiA+ ICAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9kcF9kdWFsX21vZGVfaGVscGVy LmMKPiA+ID4gICAgIDpleHBvcnQ6Cj4gPiA+ICAKPiA+ID4gLURpc3BsYXkgUG9ydCBNU1QgSGVs cGVyIEZ1bmN0aW9ucyBSZWZlcmVuY2UKPiA+ID4gLT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KPiA+ID4gK0Rpc3BsYXkgUG9ydCBNU1QgSGVscGVycwo+ID4gPiAr PT09PT09PT09PT09PT09PT09PT09PT09Cj4gPiA+ICsKPiA+ID4gK0Z1bmN0aW9ucyBSZWZlcmVu Y2UKPiA+ID4gKy0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ID4gIAo+ID4gPiAgLi4ga2VybmVsLWRv Yzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4gICAgIDpkb2M6 IGRwIG1zdCBoZWxwZXIKPiA+ID4gQEAgLTIyMCw2ICsyMjMsMTI0IEBAIERpc3BsYXkgUG9ydCBN U1QgSGVscGVyIEZ1bmN0aW9ucyBSZWZlcmVuY2UKPiA+ID4gIC4uIGtlcm5lbC1kb2M6OiBkcml2 ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiA+ICAgICA6ZXhwb3J0Ogo+ID4g PiAgCj4gPiA+ICtCcmFuY2ggZGV2aWNlIGFuZCBwb3J0IHJlZmNvdW50aW5nCj4gPiA+ICstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiAKPiA+IEkgZ2VuZXJhbGx5IHRyeSB0 byBwdXQgdGhlIGxvbmctZm9ybSBleHBsYW5hdGlvbnMgYmVmb3JlIHRoZSBmdW5jdGlvbgo+ID4g cmVmZXJlbmNlcy4gU2luY2UgdXN1YWxseSB0aGUgcmVmZXJlbmNlcyBjb21wbGV0ZWx5IGRyb3du IG91dCBldmVyeXRoaW5nCj4gPiBlbHNlIGFuZCBtYWtlIGl0IGhhcmRlciB0byBzcG90IHRoZSBp bXBvcnRhbnQgb3ZlcnZpZXcgc3R1ZmYuCj4gPiAKPiA+IAo+ID4gPiArCj4gPiA+ICtPdmVydmll dwo+ID4gPiArfn5+fn5+fn4KPiA+ID4gKwo+ID4gPiArVGhlIHJlZmNvdW50aW5nIHNjaGVtZXMg Zm9yIDpjOnR5cGU6YHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaGAgYW5kCj4gPiA+ICs6Yzp0eXBl OmBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0YCBhcmUgc29tZXdoYXQgdW51c3VhbC4gQm90aCBwb3J0 cyBhbmQKPiA+ID4gYnJhbmNoCj4gPiA+ICtkZXZpY2VzIGhhdmUgdHdvIGRpZmZlcmVudCBraW5k cyBvZiByZWZjb3VudHM6IHRvcG9sb2d5IHJlZmNvdW50cywgYW5kCj4gPiA+IG1hbGxvYwo+ID4g PiArcmVmY291bnRzLgo+ID4gPiArCj4gPiA+ICtUb3BvbG9neSByZWZjb3VudCBvdmVydmlldwo+ ID4gPiArfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPiA+ID4gKwo+ID4gPiArVG9wb2xvZ3kg cmVmY291bnRzIGFyZSBub3QgZXhwb3NlZCB0byBkcml2ZXJzLCBhbmQgYXJlIGhhbmRsZWQgaW50 ZXJuYWxseQo+ID4gPiBieSB0aGUKPiA+ID4gK0RQIE1TVCBoZWxwZXJzLiBUaGUgaGVscGVycyB1 c2UgdGhlbSBpbiBvcmRlciB0byBwcmV2ZW50IHRoZSBpbi1tZW1vcnkKPiA+ID4gdG9wb2xvZ3kK PiA+ID4gK3N0YXRlIGZyb20gYmVpbmcgY2hhbmdlZCBpbiB0aGUgbWlkZGxlIG9mIGNyaXRpY2Fs IG9wZXJhdGlvbnMgbGlrZQo+ID4gPiBjaGFuZ2luZyB0aGUKPiA+ID4gK2ludGVybmFsIHN0YXRl IG9mIHBheWxvYWQgYWxsb2NhdGlvbnMuIFRoaXMgbWVhbnMgZWFjaCBicmFuY2ggYW5kIHBvcnQK PiA+ID4gd2lsbCBiZQo+ID4gPiArY29uc2lkZXJlZCB0byBiZSBjb25uZWN0ZWQgdG8gdGhlIHJl c3Qgb2YgdGhlIHRvcG9sb2d5IHVudGlsIGl0J3MKPiA+ID4gdG9wb2xvZ3kKPiA+ID4gK3JlZmNv dW50IHJlYWNoZXMgemVyby4gQWRkaXRpb25hbGx5LCBmb3IgcG9ydHMgdGhpcyBtZWFucyB0aGF0 IHRoZWlyCj4gPiA+IGFzc29jaWF0ZWQKPiA+ID4gKzpjOnR5cGU6YHN0cnVjdCBkcm1fY29ubmVj dG9yYCB3aWxsIHN0YXkgcmVnaXN0ZXJlZCB3aXRoIHVzZXJzcGFjZSB1bnRpbAo+ID4gPiB0aGUK PiA+ID4gK3BvcnQncyByZWZjb3VudCByZWFjaGVzIDAuCj4gPiA+ICsKPiA+ID4gKwo+ID4gPiAr VG9wb2xvZ3kgcmVmY291bnQgZnVuY3Rpb25zCj4gPiA+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn4KPiA+ID4gKwo+ID4gPiArVGhlIERQIE1TVCBoZWxwZXJzIHVzZSB0aGUgZm9sbG93aW5n IGZ1bmN0aW9ucyB0byBtYW5hZ2UgdG9wb2xvZ3kKPiA+ID4gcmVmY291bnRzOgo+ID4gPiArCj4g PiA+ICsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3ku Ywo+ID4gPiArICAgOmZ1bmN0aW9uczogZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0Cj4gPiA+ICsgICAgICAgICAgICAgICBkcm1fZHBfbXN0 X3RvcG9sb2d5X3JlZl9wb3J0IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGIKPiA+ID4gKyAg ICAgICAgICAgICAgIGRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIgZHJtX2RwX21zdF90b3Bv bG9neV9yZWZfbXN0Ygo+ID4gPiArCj4gPiA+ICtNYWxsb2MgcmVmY291bnQgb3ZlcnZpZXcKPiA+ ID4gK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgo+ID4gPiArCj4gPiA+ICtNYWxsb2MgcmVmZXJl bmNlcyBhcmUgdXNlZCB0byBrZWVwIGEgOmM6dHlwZTpgc3RydWN0IGRybV9kcF9tc3RfcG9ydGAg b3IKPiA+ID4gKzpjOnR5cGU6YHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaGAgYWxsb2NhdGVkIGV2 ZW4gYWZ0ZXIgYWxsIG9mIGl0cwo+ID4gPiB0b3BvbG9neQo+ID4gPiArcmVmZXJlbmNlcyBoYXZl IGJlZW4gZHJvcHBlZCwgc28gdGhhdCB0aGUgZHJpdmVyIG9yIE1TVCBoZWxwZXJzIGNhbgo+ID4g PiBzYWZlbHkKPiA+ID4gK2FjY2VzcyBlYWNoIGJyYW5jaCdzIGxhc3Qga25vd24gc3RhdGUgYmVm b3JlIGl0IHdhcyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUKPiA+ID4gK3RvcG9sb2d5LiBXaGVuIHRo ZSBtYWxsb2MgcmVmY291bnQgb2YgYSBwb3J0IG9yIGJyYW5jaCByZWFjaGVzIDAsIHRoZQo+ID4g PiBtZW1vcnkKPiA+ID4gK2FsbG9jYXRpb24gY29udGFpbmluZyB0aGUgOmM6dHlwZTpgc3RydWN0 IGRybV9kcF9tc3RfYnJhbmNoYCBvcgo+ID4gPiA6Yzp0eXBlOmBzdHJ1Y3QKPiA+ID4gK2RybV9k cF9tc3RfcG9ydGAgcmVzcGVjdGl2ZWx5IHdpbGwgYmUgZnJlZWQuCj4gPiA+ICsKPiA+ID4gK01h bGxvYyByZWZjb3VudHMgZm9yIHBvcnRzCj4gPiA+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fgo+ID4gPiArCj4gPiA+ICtGb3IgOmM6dHlwZTpgc3RydWN0IGRybV9kcF9tc3RfcG9ydGAsIG1h bGxvYyByZWZjb3VudHMgYXJlIGV4cG9zZWQgdG8KPiA+ID4gZHJpdmVycwo+ID4gPiArdGhyb3Vn aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKPiA+ID4gKwo+ID4gPiArLi4ga2VybmVsLWRvYzo6 IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4gKyAgIDpmdW5jdGlv bnM6IGRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jIGRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9j Cj4gPiA+ICsKPiA+ID4gK01hbGxvYyByZWZjb3VudHMgZm9yIGJyYW5jaCBkZXZpY2VzCj4gPiA+ ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgo+ID4gPiArCj4gPiA+ICtGb3Ig OmM6dHlwZTpgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoYCwgbWFsbG9jIHJlZmNvdW50cyBhcmUg bm90Cj4gPiA+IGN1cnJlbnRseQo+ID4gPiArZXhwb3NlZCB0byBkcml2ZXJzLiBBcyBvZiB3cml0 aW5nIHRoaXMgZG9jdW1lbnRhdGlvbiwgdGhlcmUgYXJlIG5vCj4gPiA+IGRyaXZlcnMgdGhhdAo+ ID4gPiAraGF2ZSBhIHVzZWNhc2UgZm9yIGFjY2Vzc2luZyA6Yzp0eXBlOmBzdHJ1Y3QgZHJtX2Rw X21zdF9icmFuY2hgIG91dHNpZGUKPiA+ID4gb2YgdGhlCj4gPiA+ICtNU1QgaGVscGVycy4gRXhw b3NpbmcgdGhpcyBBUEkgdG8gZHJpdmVycyBpbiBhIHJhY2UtZnJlZSBtYW5uZXIgd291bGQKPiA+ ID4gdGFrZSBtb3JlCj4gPiA+ICt0d2Vha2luZyBvZiB0aGUgcmVmY291bnRpbmcgc2NoZW1lLCBo b3dldmVyIHBhdGNoZXMgYXJlIHdlbGNvbWUgcHJvdmlkZWQKPiA+ID4gdGhlcmUKPiA+ID4gK2lz IGEgbGVnaXRpbWF0ZSBkcml2ZXIgdXNlY2FzZSBmb3IgdGhpcy4KPiA+ID4gKwo+ID4gPiArSW50 ZXJuYWxseSwgbWFsbG9jIHJlZmNvdW50cyBmb3IgOmM6dHlwZTpgc3RydWN0IGRybV9kcF9tc3Rf YnJhbmNoYCBhcmUKPiA+ID4gbWFuYWdlZAo+ID4gPiArYnkgdGhlIERQIE1TVCBjb3JlIHRocm91 Z2ggdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cj4gPiA+ICsKPiA+ID4gKy4uIGtlcm5lbC1kb2M6 OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiA+ICsgICA6ZnVuY3Rp b25zOiBkcm1fZHBfbXN0X2dldF9tc3RiX21hbGxvYyBkcm1fZHBfbXN0X3B1dF9tc3RiX21hbGxv Ywo+ID4gPiArCj4gPiA+ICtSZWZjb3VudCByZWxhdGlvbnNoaXBzIGluIGEgdG9wb2xvZ3kKPiA+ ID4gK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgo+ID4gPiArCj4gPiA+ICtM ZXQncyB0YWtlIGEgbG9vayBhdCB3aHkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRvcG9sb2d5 IGFuZCBtYWxsb2MKPiA+ID4gcmVmY291bnRzCj4gPiA+ICtpcyBkZXNpZ25lZCB0aGUgd2F5IGl0 IGlzLgo+ID4gPiArCj4gPiA+ICsuLiBrZXJuZWwtZmlndXJlOjogZHAtbXN0L3RvcG9sb2d5LWZp Z3VyZS0xLmRvdAo+ID4gPiArCj4gPiA+ICsgICBBbiBleGFtcGxlIG9mIHRvcG9sb2d5IGFuZCBt YWxsb2MgcmVmcyBpbiBhIERQIE1TVCB0b3BvbG9neSB3aXRoIHR3bwo+ID4gPiBhY3RpdmUKPiA+ ID4gKyAgIHBheWxvYWRzLiBUb3BvbG9neSByZWZjb3VudCBpbmNyZW1lbnRzIGFyZSBpbmRpY2F0 ZWQgYnkgc29saWQgbGluZXMsCj4gPiA+IGFuZAo+ID4gPiArICAgbWFsbG9jIHJlZmNvdW50IGlu Y3JlbWVudHMgYXJlIGluZGljYXRlZCBieSBkYXNoZWQgbGluZXMuIEVhY2ggc3RhcnRzCj4gPiA+ IGZyb20KPiA+ID4gKyAgIHRoZSBicmFuY2ggd2hpY2ggaW5jcmVtZW50ZWQgdGhlIHJlZmNvdW50 LCBhbmQgZW5kcyBhdCB0aGUgYnJhbmNoIHRvCj4gPiA+IHdoaWNoCj4gPiA+ICsgICB0aGUgcmVm Y291bnQgYmVsb25ncyB0by4KPiA+ID4gKwo+ID4gPiArQXMgeW91IGNhbiBzZWUgaW4gZmlndXJl IDEsIGV2ZXJ5IGJyYW5jaCBpbmNyZW1lbnRzIHRoZSB0b3BvbG9neQo+ID4gPiArcmVmY291bnQg b2YgaXQncyBjaGlsZHJlbiwgYW5kIGluY3JlbWVudHMgdGhlIG1hbGxvYyByZWZjb3VudCBvZiBp dCdzCj4gPiA+IHBhcmVudC4KPiA+ID4gK0FkZGl0aW9uYWxseSwgZXZlcnkgcGF5bG9hZCBpbmNy ZW1lbnRzIHRoZSBtYWxsb2MgcmVmY291bnQgb2YgaXQncwo+ID4gPiBhc3NpZ25lZCBwb3J0Cj4g PiA+ICtieSAxLgo+ID4gPiArCj4gPiA+ICtTbywgd2hhdCB3b3VsZCBoYXBwZW4gaWYgTVNUQiAj MyBmcm9tIHRoZSBhYm92ZSBmaWd1cmUgd2FzIHVucGx1Z2dlZCBmcm9tCj4gPiA+IHRoZQo+ID4g PiArc3lzdGVtLCBidXQgdGhlIGRyaXZlciBoYWRuJ3QgeWV0IHJlbW92ZWQgcGF5bG9hZCAjMiBm cm9tIHBvcnQgIzM/IFRoZQo+ID4gPiB0b3BvbG9neQo+ID4gPiArd291bGQgc3RhcnQgdG8gbG9v ayBsaWtlIGZpZ3VyZSAyLgo+ID4gPiArCj4gPiA+ICsuLiBrZXJuZWwtZmlndXJlOjogZHAtbXN0 L3RvcG9sb2d5LWZpZ3VyZS0yLmRvdAo+ID4gPiArCj4gPiA+ICsgICBQb3J0cyBhbmQgYnJhbmNo IGRldmljZXMgd2hpY2ggaGF2ZSBiZWVuIHJlbGVhc2VkIGZyb20gbWVtb3J5IGFyZQo+ID4gPiBj b2xvcmVkCj4gPiA+ICsgICBncmV5LCBhbmQgcmVmZXJlbmNlcyB3aGljaCBoYXZlIGJlZW4gcmVt b3ZlZCBhcmUgY29sb3JlZCByZWQuCj4gPiA+ICsKPiA+ID4gK1doZW5ldmVyIGEgcG9ydCBvciBi cmFuY2ggZGV2aWNlJ3MgdG9wb2xvZ3kgcmVmY291bnQgcmVhY2hlcyB6ZXJvLCBpdAo+ID4gPiB3 aWxsCj4gPiA+ICtkZWNyZW1lbnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50cyBvZiBhbGwgaXRzIGNo aWxkcmVuLCB0aGUgbWFsbG9jIHJlZmNvdW50Cj4gPiA+IG9mIGl0cwo+ID4gPiArcGFyZW50LCBh bmQgZmluYWxseSBpdHMgb3duIG1hbGxvYyByZWZjb3VudC4gRm9yIE1TVEIgIzQgYW5kIHBvcnQg IzQsCj4gPiA+IHRoaXMgbWVhbnMKPiA+ID4gK3RoZXkgYm90aCBoYXZlIGJlZW4gZGlzY29ubmVj dGVkIGZyb20gdGhlIHRvcG9sb2d5IGFuZCBmcmVlZCBmcm9tIG1lbW9yeS4KPiA+ID4gQnV0LAo+ ID4gPiArYmVjYXVzZSBwYXlsb2FkICMyIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8g cG9ydCAjMywgcG9ydCAjMyBpcwo+ID4gPiByZW1vdmVkCj4gPiA+ICtmcm9tIHRoZSB0b3BvbG9n eSBidXQgaXQncyA6Yzp0eXBlOmBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0YCBpcyBzdGlsbAo+ID4g PiBhY2Nlc3NpYmxlCj4gPiA+ICtmcm9tIG1lbW9yeS4gVGhpcyBhbHNvIG1lYW5zIHBvcnQgIzMg aGFzIG5vdCB5ZXQgZGVjcmVtZW50ZWQgdGhlIG1hbGxvYwo+ID4gPiByZWZjb3VudAo+ID4gPiAr b2YgTVNUQiAjMywgc28gaXQncyA6Yzp0eXBlOmBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2hgIHdp bGwgYWxzbyBzdGF5Cj4gPiA+IGFsbG9jYXRlZAo+ID4gPiAraW4gbWVtb3J5IHVudGlsIHBvcnQg IzMncyBtYWxsb2MgcmVmY291bnQgcmVhY2hlcyAwLgo+ID4gPiArCj4gPiA+ICtUaGlzIHJlbGF0 aW9uc2hpcCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBpbiBvcmRlciB0byByZWxlYXNlIHBheWxvYWQg IzIsIHdlCj4gPiA+ICtuZWVkIHRvIGJlIGFibGUgdG8gZmlndXJlIG91dCB0aGUgbGFzdCByZWxh dGl2ZSBvZiBwb3J0ICMzIHRoYXQncyBzdGlsbAo+ID4gPiArY29ubmVjdGVkIHRvIHRoZSB0b3Bv bG9neS4gSW4gdGhpcyBjYXNlLCB3ZSB3b3VsZCB0cmF2ZWwgdXAgdGhlIHRvcG9sb2d5Cj4gPiA+ IGFzCj4gPiA+ICtzaG93biBpbiBmaWd1cmUgMy4KPiA+ID4gKwo+ID4gPiArLi4ga2VybmVsLWZp Z3VyZTo6IGRwLW1zdC90b3BvbG9neS1maWd1cmUtMy5kb3QKPiA+ID4gKwo+ID4gPiArQW5kIGZp bmFsbHksIHJlbW92ZSBwYXlsb2FkICMyIGJ5IGNvbW11bmljYXRpbmcgd2l0aCBwb3J0ICMyIHRo cm91Z2gKPiA+ID4gc2lkZWJhbmQKPiA+ID4gK3RyYW5zYWN0aW9ucy4KPiA+IAo+ID4gKEJsaW5k IGd1ZXNzLCBJIGhhdmVuJ3QgbG9va2VkIGFoZWFkIGluIHRoZSBzZXJpZXMgeWV0KQo+ID4gCj4g PiBJIGFzc3VtZSB0aGF0IGRyaXZlcnMgYWxzbyB3YW50IHRvIGhvbGQgYSBtYWxsb2MgcmVmZXJl bmNlIGZyb20gdGhlaXIKPiA+IGNvbm5lY3RvciwgdW50aWwgdGhhdCBjb25uZWN0b3IgaXMgZGVz dHJveWVkIGNvbXBsZXRlZCAoYW5kIHdlIGhlbmNlIGtub3cKPiA+IGl0IHJlbGVhc2VkIGFsbCBp dHMgdmNwaSBhbmQgb3RoZXIgc3R1ZmYgYW5kIHJlYWxseSBkb2Vzbid0IG5lZWQgdGhlIHBvcnQK PiA+IGFueW1vcmUpLiBDb3VsZCB3ZSBpbnRlZ3JhdGVkIHRoYXQgaW50byB0aGVzZSBuZWF0IGdy YXBocyB0b28/IEFuc3dlcmluZwo+ID4gdGhlICJzbyBob3cgZG9lcyB0aGlzIGludGVncmF0ZSBp bnRvIG15IGRyaXZlcj8iIHF1ZXN0aW9uIGlzIGltbyB0aGUgbW9zdAo+ID4gaW1wb3J0YW50IHBh cnQgZm9yIGNvcmUgYXBpIGRvY3MuCj4gPiAKPiA+IEFub3RoZXIgb25lOiBBbnkgcmVhc29uIGZv ciBub3QgcHV0dGluZyB0aGlzIHJpZ2h0IGludG8gdGhlIGNvZGUgYXMgYSBET0M6Cj4gPiBzZWN0 aW9uPyBJbWUgbW92aW5nIGRvY3MgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIGNvZGUgaW1w cm92ZXMgdGhlCj4gPiBvZGRzIGl0J3Mga2VwdCB1cC10by1kYXRlLiBUaGUgb25seSBvdmVydmll dyB0ZXh0cyBJJ3ZlIGxlZnQgaW4gdGhlIC5yc3QKPiA+IGlzIHRoZSBzdHVmZiB0aGF0IGRlc2Ny aWJlcyBvdmVyYWxsIGNvbmNlcHRzIChlLmcuIGhvdyBhbGwgdGhlIGttcyBvYmplY3RzCj4gPiBm aXQgdG9nZXRoZXIpLgo+ID4gCj4gPiBBbGwgdGhlIHNwaGlueC9yc3Qgc3ludGF4IHNob3VsZCBj YXJyeSBvdmVyIDE6MSwgZXhjZXB0IGluIGtlcm5lbGRvYyB5b3UKPiA+IGFsc28gY2FuIGJlbmVm aXQgZnJvbSB0aGUgYWJicmV2aWF0ZWQgcmVmZXJlbmNlIHN5bnRheCBmcm9tIGtlcm5lbGRvYy4K PiA+IAo+ID4gQW55d2F5LCByZWFsbHkgZ3JlYXQgc3R1ZmYuCj4gPiAKPiA+ID4gKwo+ID4gPiAg TUlQSSBEU0kgSGVscGVyIEZ1bmN0aW9ucyBSZWZlcmVuY2UKPiA+ID4gID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Cj4gPiA+ICAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vZHJt X2RwX21zdF90b3BvbG9neS5jCj4gPiA+IGluZGV4IDJhYjE2YzllNjI0My4uYzE5NmZiNTgwYmVi IDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5j Cj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4g QEAgLTQ2LDcgKzQ2LDcgQEAgc3RhdGljIGJvb2wgZHVtcF9kcF9wYXlsb2FkX3RhYmxlKHN0cnVj dAo+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiAgCQkJCSAgY2hhciAq YnVmKTsKPiA+ID4gIHN0YXRpYyBpbnQgdGVzdF9jYWxjX3Bibl9tb2RlKHZvaWQpOwo+ID4gPiAg Cj4gPiA+IC1zdGF0aWMgdm9pZCBkcm1fZHBfcHV0X3BvcnQoc3RydWN0IGRybV9kcF9tc3RfcG9y dCAqcG9ydCk7Cj4gPiA+ICtzdGF0aWMgdm9pZCBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0 KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOwo+ID4gPiAgCj4gPiA+ICBzdGF0aWMgaW50 IGRybV9kcF9kcGNkX3dyaXRlX3BheWxvYWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy ICptZ3IsCj4gPiA+ICAJCQkJICAgICBpbnQgaWQsCj4gPiA+IEBAIC04NTAsNDYgKzg1MCwxMjAg QEAgc3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaAo+ID4gPiAqZHJtX2RwX2FkZF9tc3Rf YnJhbmNoX2RldmljZSh1OCBsY3QsIHU4ICpyYWQpCj4gPiA+ICAJaWYgKGxjdCA+IDEpCj4gPiA+ ICAJCW1lbWNweShtc3RiLT5yYWQsIHJhZCwgbGN0IC8gMik7Cj4gPiA+ICAJSU5JVF9MSVNUX0hF QUQoJm1zdGItPnBvcnRzKTsKPiA+ID4gLQlrcmVmX2luaXQoJm1zdGItPmtyZWYpOwo+ID4gPiAr CWtyZWZfaW5pdCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZik7Cj4gPiA+ICsJa3JlZl9pbml0KCZtc3Ri LT5tYWxsb2Nfa3JlZik7Cj4gPiA+ICAJcmV0dXJuIG1zdGI7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ ID4gIHN0YXRpYyB2b2lkIGRybV9kcF9mcmVlX21zdF9wb3J0KHN0cnVjdCBrcmVmICprcmVmKTsK PiA+ID4gK3N0YXRpYyB2b2lkIGRybV9kcF9mcmVlX21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdCBr cmVmICprcmVmKTsKPiA+IAo+ID4gSSdkIG1vdmUgdGhlIGZ1bmN0aW9ucyBhcm91bmQsIGZvcndh cmQgZGVjbGFyYXRpb25zIGZvciBzdGF0aWMgZnVuY3Rpb25zCj4gPiBpcyBhIGJpdCBzaWxseQo+ ID4gCj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogZHJtX2RwX21zdF9nZXRfbXN0Yl9tYWxs b2MoKSAtIEluY3JlbWVudCB0aGUgbWFsbG9jIHJlZmNvdW50IG9mIGEKPiA+ID4gYnJhbmNoCj4g PiA+ICsgKiBkZXZpY2UKPiA+ID4gKyAqIEBtc3RiOiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X2Jy YW5jaCB0byBpbmNyZW1lbnQgdGhlIG1hbGxvYyByZWZjb3VudAo+ID4gPiBvZgo+ID4gPiArICoK PiA+ID4gKyAqIEluY3JlbWVudHMgQG1zdGIubWFsbG9jX2tyZWYuIFdoZW4gQG1zdGIubWFsbG9j X2tyZWYgcmVhY2hlcyAwLCB0aGUKPiA+ID4gbWVtb3J5Cj4gPiAKPiA+IHMvQC8mLyBmb3Igc3Ry dWN0dXJlIG1lbWJlciByZWZlcmVuY2VzLiBAIHJlZmVyZW5jZXMgdG8gcGFyYW1ldGVycy9tZW1i ZXJzCj4gPiBpbiB0aGUgc2FtZSBrZXJuZWxkb2MgdHlwZSBvbmx5LiBXaXRoICYgeW91J2xsIGdl dCBhIG5pY2UgbGluaywgQCBpcyBqdXN0Cj4gPiBtYXJrdXAgKGFuZCB5ZXMgJiB3aXRoIGEgbWVt YmVyIHVuZm9ydHVuYXRlbHkgZG9lc24ndCBsaW5rIHRvIHRoZSBtZW1iZXIsCj4gPiBvbmx5IHRo ZSBvdmVyYWxsIHN0cnVjdHVyZSkuCj4gPiAKPiA+IFNpbWlsYXJseSBiZWxvdy4KPiA+IAo+ID4g PiArICogYWxsb2NhdGlvbiBmb3IgQG1zdGIgd2lsbCBiZSByZWxlYXNlZCBhbmQgQG1zdGIgbWF5 IG5vIGxvbmdlciBiZSB1c2VkLgo+ID4gPiArICoKPiA+ID4gKyAqIEFueSBtYWxsb2MgcmVmZXJl bmNlcyBhY3F1aXJlZCB3aXRoIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSByZWxlYXNlZAo+ID4gPiB3 aGVuCj4gPiA+ICsgKiB0aGV5IGFyZSBubyBsb25nZXIgYmVpbmcgdXNlZCBieSBjYWxsaW5nIGRy bV9kcF9tc3RfcHV0X21zdGJfbWFsbG9jKCkuCj4gPiAKPiA+IEknZCBkcm9wcGVkICJ3aGVuIHRo ZXkgYXJlIG5vIGxvbmdlciBiZWluZyB1c2VkIiwgYW5kIHRoZSBsaW5lIGJlbG93IHRvby4KPiA+ IFNob3J0IGRvY3MgYXJlIGJldHRlciBnZW5lcmFsbHkgYmVjYXVzZSBhdHRlbnRpb24gc3BhbiBv ZiByZWFkZXJzLgo+ID4gCj4gPiA+ICsgKgo+ID4gPiArICogU2VlIGFsc286IGRybV9kcF9tc3Rf cHV0X21zdGJfbWFsbG9jKCkKPiA+ID4gKyAqLwo+ID4gPiArc3RhdGljIHZvaWQKPiA+ID4gK2Ry bV9kcF9tc3RfZ2V0X21zdGJfbWFsbG9jKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YikK PiA+ID4gK3sKPiA+ID4gKwlrcmVmX2dldCgmbXN0Yi0+bWFsbG9jX2tyZWYpOwo+ID4gPiArCURS TV9ERUJVRygibXN0YiAlcCAoJWQpXG4iLCBtc3RiLCBrcmVmX3JlYWQoJm1zdGItPm1hbGxvY19r cmVmKSk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogZHJtX2RwX21zdF9w dXRfbXN0Yl9tYWxsb2MoKSAtIERlY3JlbWVudCB0aGUgbWFsbG9jIHJlZmNvdW50IG9mIGEKPiA+ ID4gYnJhbmNoCj4gPiA+ICsgKiBkZXZpY2UKPiA+ID4gKyAqIEBtc3RiOiBUaGUgJnN0cnVjdCBk cm1fZHBfbXN0X2JyYW5jaCB0byBkZWNyZW1lbnQgdGhlIG1hbGxvYyByZWZjb3VudAo+ID4gPiBv Zgo+ID4gPiArICoKPiA+ID4gKyAqIERlY3JlbWVudHMgQG1zdGIubWFsbG9jX2tyZWYuIFdoZW4g QG1zdGIubWFsbG9jX2tyZWYgcmVhY2hlcyAwLCB0aGUKPiA+ID4gbWVtb3J5Cj4gPiA+ICsgKiBh bGxvY2F0aW9uIGZvciBAbXN0YiB3aWxsIGJlIHJlbGVhc2VkIGFuZCBAbXN0YiBtYXkgbm8gbG9u Z2VyIGJlIHVzZWQuCj4gPiA+ICsgKgo+ID4gPiArICogU2VlIGFsc286IGRybV9kcF9tc3RfZ2V0 X21zdGJfbWFsbG9jKCkKPiA+ID4gKyAqLwo+ID4gPiArc3RhdGljIHZvaWQKPiA+ID4gK2RybV9k cF9tc3RfcHV0X21zdGJfbWFsbG9jKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YikKPiA+ ID4gK3sKPiA+ID4gKwlEUk1fREVCVUcoIm1zdGIgJXAgKCVkKVxuIiwgbXN0Yiwga3JlZl9yZWFk KCZtc3RiLT5tYWxsb2Nfa3JlZiktMSk7Cj4gPiA+ICsJa3JlZl9wdXQoJm1zdGItPm1hbGxvY19r cmVmLCBkcm1fZHBfZnJlZV9tc3RfYnJhbmNoX2RldmljZSk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ ID4gKy8qKgo+ID4gPiArICogZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2MoKSAtIEluY3JlbWVu dCB0aGUgbWFsbG9jIHJlZmNvdW50IG9mIGFuIE1TVAo+ID4gPiBwb3J0Cj4gPiA+ICsgKiBAcG9y dDogVGhlICZzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHRvIGluY3JlbWVudCB0aGUgbWFsbG9jIHJl ZmNvdW50IG9mCj4gPiA+ICsgKgo+ID4gPiArICogSW5jcmVtZW50cyBAcG9ydC5tYWxsb2Nfa3Jl Zi4gV2hlbiBAcG9ydC5tYWxsb2Nfa3JlZiByZWFjaGVzIDAsIHRoZQo+ID4gPiBtZW1vcnkKPiA+ ID4gKyAqIGFsbG9jYXRpb24gZm9yIEBwb3J0IHdpbGwgYmUgcmVsZWFzZWQgYW5kIEBwb3J0IG1h eSBubyBsb25nZXIgYmUgdXNlZC4KPiA+ID4gKyAqCj4gPiA+ICsgKiBCZWNhdXNlIEBwb3J0IGNv dWxkIHBvdGVudGlhbGx5IGJlIGZyZWVkIGF0IGFueSB0aW1lIGJ5IHRoZSBEUCBNU1QKPiA+ID4g aGVscGVycwo+ID4gPiArICogaWYgQHBvcnQubWFsbG9jX2tyZWYgcmVhY2hlcyAwLCBpbmNsdWRp bmcgZHVyaW5nIGEgY2FsbCB0byB0aGlzCj4gPiA+IGZ1bmN0aW9uLAo+ID4gPiArICogZHJpdmVy cyB0aGF0IHdoaWNoIHRvIG1ha2UgdXNlIG9mICZzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHNob3Vs ZAo+ID4gPiBlbnN1cmUKPiA+ID4gKyAqIHRoYXQgdGhleSBncmFiIGF0IGxlYXN0IG9uZSBtYWlu IG1hbGxvYyByZWZlcmVuY2UgdG8gdGhlaXIgTVNUIHBvcnRzCj4gPiA+IGluCj4gPiA+ICsgKiAm ZHJtX2RwX21zdF90b3BvbG9neV9jYnMuYWRkX2Nvbm5lY3Rvci4gVGhpcyBjYWxsYmFjayBpcyBj YWxsZWQgYmVmb3JlCj4gPiA+ICsgKiB0aGVyZSBpcyBhbnkgY2hhbmNlIGZvciBAcG9ydC5tYWxs b2Nfa3JlZiB0byByZWFjaCAwLgo+ID4gPiArICoKPiA+ID4gKyAqIEFueSBtYWxsb2MgcmVmZXJl bmNlcyBhY3F1aXJlZCB3aXRoIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSByZWxlYXNlZAo+ID4gPiB3 aGVuCj4gPiA+ICsgKiB0aGV5IGFyZSBubyBsb25nZXIgYmVpbmcgdXNlZCBieSBjYWxsaW5nIGRy bV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKCkuCj4gPiA+ICsgKgo+ID4gPiArICogU2VlIGFsc286 IGRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKCkKPiA+IAo+ID4gU2FtZSByZWR1Y3Rpb24gYXMg d2l0aCBtc3RiX21hbGxvYyB2ZXJzaW9uLgo+ID4gCj4gPiA+ICsgKi8KPiA+ID4gK3ZvaWQKPiA+ ID4gK2RybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBv cnQpCj4gPiA+ICt7Cj4gPiA+ICsJa3JlZl9nZXQoJnBvcnQtPm1hbGxvY19rcmVmKTsKPiA+ID4g KwlEUk1fREVCVUcoInBvcnQgJXAgKCVkKVxuIiwgcG9ydCwga3JlZl9yZWFkKCZwb3J0LT5tYWxs b2Nfa3JlZikpOwo+ID4gPiArfQo+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2dldF9w b3J0X21hbGxvYyk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogZHJtX2RwX21zdF9wdXRf cG9ydF9tYWxsb2MoKSAtIERlY3JlbWVudCB0aGUgbWFsbG9jIHJlZmNvdW50IG9mIGFuIE1TVAo+ ID4gPiBwb3J0Cj4gPiA+ICsgKiBAcG9ydDogVGhlICZzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHRv IGRlY3JlbWVudCB0aGUgbWFsbG9jIHJlZmNvdW50IG9mCj4gPiA+ICsgKgo+ID4gPiArICogRGVj cmVtZW50cyBAcG9ydC5tYWxsb2Nfa3JlZi4gV2hlbiBAcG9ydC5tYWxsb2Nfa3JlZiByZWFjaGVz IDAsIHRoZQo+ID4gPiBtZW1vcnkKPiA+ID4gKyAqIGFsbG9jYXRpb24gZm9yIEBwb3J0IHdpbGwg YmUgcmVsZWFzZWQgYW5kIEBwb3J0IG1heSBubyBsb25nZXIgYmUgdXNlZC4KPiA+ID4gKyAqCj4g PiA+ICsgKiBTZWUgYWxzbzogZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2MoKQo+ID4gPiArICov Cj4gPiA+ICt2b2lkCj4gPiA+ICtkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0ICpwb3J0KQo+ID4gPiArewo+ID4gPiArCURSTV9ERUJVRygicG9ydCAlcCAo JWQpXG4iLCBwb3J0LCBrcmVmX3JlYWQoJnBvcnQtPm1hbGxvY19rcmVmKS0xKTsKPiA+ID4gKwlr cmVmX3B1dCgmcG9ydC0+bWFsbG9jX2tyZWYsIGRybV9kcF9mcmVlX21zdF9wb3J0KTsKPiA+ID4g K30KPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2MpOwo+ID4g PiAgCj4gPiA+ICBzdGF0aWMgdm9pZCBkcm1fZHBfZnJlZV9tc3RfYnJhbmNoX2RldmljZShzdHJ1 Y3Qga3JlZiAqa3JlZikKPiA+ID4gIHsKPiA+ID4gLQlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gg Km1zdGIgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfYnJhbmNo LCBrcmVmKTsKPiA+ID4gLQlpZiAobXN0Yi0+cG9ydF9wYXJlbnQpIHsKPiA+ID4gLQkJaWYgKGxp c3RfZW1wdHkoJm1zdGItPnBvcnRfcGFyZW50LT5uZXh0KSkKPiA+ID4gLQkJCWtyZWZfcHV0KCZt c3RiLT5wb3J0X3BhcmVudC0+a3JlZiwKPiA+ID4gZHJtX2RwX2ZyZWVfbXN0X3BvcnQpOwo+ID4g PiAtCX0KPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIgPQo+ID4gPiArCQlj b250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoLCBtYWxsb2Nfa3JlZik7 Cj4gPiA+ICsKPiA+ID4gKwlpZiAobXN0Yi0+cG9ydF9wYXJlbnQpCj4gPiA+ICsJCWRybV9kcF9t c3RfcHV0X3BvcnRfbWFsbG9jKG1zdGItPnBvcnRfcGFyZW50KTsKPiA+ID4gKwo+ID4gPiAgCWtm cmVlKG1zdGIpOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ICBzdGF0aWMgdm9pZCBkcm1fZHBfZGVz dHJveV9tc3RfYnJhbmNoX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZikKPiA+ID4gIHsKPiA+ID4g LQlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIgPSBjb250YWluZXJfb2Yoa3JlZiwgc3Ry dWN0Cj4gPiA+IGRybV9kcF9tc3RfYnJhbmNoLCBrcmVmKTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2Rw X21zdF9icmFuY2ggKm1zdGIgPQo+ID4gPiArCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRy bV9kcF9tc3RfYnJhbmNoLCB0b3BvbG9neV9rcmVmKTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciA9IG1zdGItPm1ncjsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21z dF9wb3J0ICpwb3J0LCAqdG1wOwo+ID4gPiAgCWJvb2wgd2FrZV90eCA9IGZhbHNlOwo+ID4gPiAg Cj4gPiA+IC0JLyoKPiA+ID4gLQkgKiBpbml0IGtyZWYgYWdhaW4gdG8gYmUgdXNlZCBieSBwb3J0 cyB0byByZW1vdmUgbXN0IGJyYW5jaCB3aGVuIGl0IGlzCj4gPiA+IC0JICogbm90IG5lZWRlZCBh bnltb3JlCj4gPiA+IC0JICovCj4gPiA+IC0Ja3JlZl9pbml0KGtyZWYpOwo+ID4gPiAtCj4gPiA+ IC0JaWYgKG1zdGItPnBvcnRfcGFyZW50ICYmIGxpc3RfZW1wdHkoJm1zdGItPnBvcnRfcGFyZW50 LT5uZXh0KSkKPiA+ID4gLQkJa3JlZl9nZXQoJm1zdGItPnBvcnRfcGFyZW50LT5rcmVmKTsKPiA+ ID4gLQo+ID4gPiAtCS8qCj4gPiA+IC0JICogZGVzdHJveSBhbGwgcG9ydHMgLSBkb24ndCBuZWVk IGxvY2sKPiA+ID4gLQkgKiBhcyB0aGVyZSBhcmUgbm8gbW9yZSByZWZlcmVuY2VzIHRvIHRoZSBt c3QgYnJhbmNoCj4gPiA+IC0JICogZGV2aWNlIGF0IHRoaXMgcG9pbnQuCj4gPiA+IC0JICovCj4g PiA+ICsJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsKPiA+ID4gIAlsaXN0X2Zvcl9lYWNoX2VudHJ5 X3NhZmUocG9ydCwgdG1wLCAmbXN0Yi0+cG9ydHMsIG5leHQpIHsKPiA+ID4gIAkJbGlzdF9kZWwo JnBvcnQtPm5leHQpOwo+ID4gPiAtCQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ICsJCWRy bV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ICAJfQo+ID4gPiArCW11dGV4 X3VubG9jaygmbWdyLT5sb2NrKTsKPiA+IAo+ID4gV291bGQgYmUgbmljZSB0byBzcGxpdCB0aGlz IG91dCAodG8gaGlnaGxpZ2h0IHRoZSBidWdmaXggbW9yZSksIGJ1dAo+ID4gYmVjYXVzZSBvZiB0 aGUga3JlZl9pbml0KCkgaGFjayBub3QgcmVhbGx5IGZlYXNpYmxlIEkgdGhpbmsgOi0vCj4gPiA+ ICAKPiA+ID4gIAkvKiBkcm9wIGFueSB0eCBzbG90cyBtc2cgKi8KPiA+ID4gIAltdXRleF9sb2Nr KCZtc3RiLT5tZ3ItPnFsb2NrKTsKPiA+ID4gQEAgLTkwOCwxNCArOTgyLDgyIEBAIHN0YXRpYyB2 b2lkIGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdAo+ID4gPiBrcmVmICpr cmVmKQo+ID4gPiAgCWlmICh3YWtlX3R4KQo+ID4gPiAgCQl3YWtlX3VwX2FsbCgmbXN0Yi0+bWdy LT50eF93YWl0cSk7Cj4gPiA+ICAKPiA+ID4gLQlrcmVmX3B1dChrcmVmLCBkcm1fZHBfZnJlZV9t c3RfYnJhbmNoX2RldmljZSk7Cj4gPiA+ICsJZHJtX2RwX21zdF9wdXRfbXN0Yl9tYWxsb2MobXN0 Yik7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLXN0YXRpYyB2b2lkIGRybV9kcF9wdXRfbXN0X2Jy YW5jaF9kZXZpY2Uoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiKQo+ID4gPiArLyoqCj4g PiA+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiKCkgLSBJbmNyZW1lbnQgdGhlIHRv cG9sb2d5IHJlZmNvdW50IG9mIGEKPiA+ID4gKyAqIGJyYW5jaCBkZXZpY2UgdW5sZXNzIGl0cyB6 ZXJvCj4gPiA+ICsgKiBAbXN0YjogJnN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCB0byBpbmNyZW1l bnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50IG9mCj4gPiA+ICsgKgo+ID4gPiArICogQXR0ZW1wdHMg dG8gZ3JhYiBhIHRvcG9sb2d5IHJlZmVyZW5jZSB0byBAbXN0YiwgaWYgaXQgaGFzbid0IHlldCBi ZWVuCj4gPiA+ICsgKiByZW1vdmVkIGZyb20gdGhlIHRvcG9sb2d5IChlLmcuIEBtc3RiLnRvcG9s b2d5X2tyZWYgaGFzIHJlYWNoZWQgMCkuCj4gPiA+ICsgKgo+ID4gPiArICogQW55IHRvcG9sb2d5 IHJlZmVyZW5jZXMgYWNxdWlyZWQgd2l0aCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgcmVsZWFzZWQK PiA+ID4gd2hlbgo+ID4gPiArICogdGhleSBhcmUgbm8gbG9uZ2VyIGJlaW5nIHVzZWQgYnkgY2Fs bGluZwo+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3RiKCkuCj4gPiAKPiA+IEknZCBl eHBsYWluIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBtYWxsb2Nfa3JlZiBhIGJpdCBoZXJlOgo+ID4g Cj4gPiAtIHRvcG9sb2d5IHJlZiBpbXBsaWVzIGEgbWFsbG9jIHJlZiwgaGVuY2UgeW91IGNhbiBj YWxsIGdldF9tc3RiX21hbGxvYwo+ID4gICB3aXRoIG9ubHkgaG9sZGluZyBhIHRvcG9sb2d5IHJl ZiAobWlnaHQgYmUgYmV0dGVyIHRvIGV4cGxhaW4gdGhpcyBpbiB0aGUKPiA+ICAgZ2V0X21zdGJf bWFsbG9jIGtlcm5lbGRvYywgc2luY2UgaXQgYWxzbyBhcHBsaWVzIHRvIHRoZSB1bmNvbmRpdGlv bmFsCj4gPiAgIGtyZWZfZ2V0IGJlbG93KQo+ID4gLSBtYWxsb2NfcmVmIGlzIGVub3VnaCB0byBj YWxsIHRoaXMgZnVuY3Rpb24sIGJ1dCB0aGVuIGl0IGNhbiBmYWlsCj4gPiAKPiA+ID4gKyAqCj4g PiA+ICsgKiBTZWUgYWxzbzoKPiA+ID4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfcmVmX21zdGIo KQo+ID4gCj4gPiBJJ2Qgd3JpdGUgb3V0IHdoZW4geW91IHNob3VsZCB1c2UgdGhpcyBvbmUgaW5z dGVhZDoKPiA+IAo+ID4gIklmIHlvdSBhbHJlYWR5IGhhdmUgYSB0b3BvbG9neSByZWZlcmVuY2Ug eW91IHNob3VsZCB1c2Ugb3RoZXJfZnVuY3Rpb24oKQo+ID4gaW5zdGVhZC4iCj4gPiAKPiA+ID4g KyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGIoKQo+ID4gCj4gPiBUaGlzIGlzIHRoaXMg ZnVuY3Rpb24gaXRzZWxmIDotKQo+ID4gCj4gPiA+ICsgKgo+ID4gPiArICogUmV0dXJuczoKPiA+ ID4gKyAqICogMTogQSB0b3BvbG9neSByZWZlcmVuY2Ugd2FzIGdyYWJiZWQgc3VjY2Vzc2Z1bGx5 Cj4gPiA+ICsgKiAqIDA6IEBwb3J0IGlzIG5vIGxvbmdlciBpbiB0aGUgdG9wb2xvZ3ksIG5vIHJl ZmVyZW5jZSB3YXMgZ3JhYmJlZAo+ID4gPiArICovCj4gPiA+ICtzdGF0aWMgaW50IF9fbXVzdF9j aGVjawo+ID4gPiArZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0YihzdHJ1Y3QgZHJtX2RwX21z dF9icmFuY2ggKm1zdGIpCj4gPiAKPiA+IEhtIGlmIHlvdSBib3RoIHdhbnQgYSBrcmVmX2dldCBh bmQgYSBrcmVmX2dldF91bmxlc3NfemVybyB0aGVuIHdlIG5lZWQKPiA+IGJldHRlciBuYW1pbmcu IHRvcG9sb2d5X2dldF9tc3RiIHNob3VsZCBiZSB0aGUgdW5jb25kaXRpb25hbCBrcmVmX2dldCwg dGhlCj4gPiBjb25kaXRpb25hbCBrcmVmX2dldF91bmxlc3NfemVybyBuZWVkcyBzb21lIGluZGlj YXRpb24gdGhhdCBpdCBjb3VsZCBmYWlsLgo+ID4gV2UgbmVlZCBzb21lIHZlcmIgdGhhdCBpbmRp Y2F0ZXMgdGhhdCBpbnN0ZWFkIG9mICJnZXQiOgo+ID4gLSAidmFsaWRhdGUiIHNpbmNlIHdlJ3Zl IHVzZWQgdGhhdCBvbmUgYWxyZWFkeQo+ID4gLSAibG9va3VwIiB0aGF0J3MgdXNlZCBieSBhbGwg dGhlIGRybV9tb2RlX29iamVjdCBsb29rdXAgZnVuY3Rpb25zLCBmZWVscwo+ID4gICBhIGJpdCBt aXNsZWFkaW5nCj4gPiAtICJ0cnlfZ2V0Igo+ID4gCj4gPiA+ICB7Cj4gPiA+IC0Ja3JlZl9wdXQo Jm1zdGItPmtyZWYsIGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hfZGV2aWNlKTsKPiA+ID4gKwlp bnQgcmV0ID0ga3JlZl9nZXRfdW5sZXNzX3plcm8oJm1zdGItPnRvcG9sb2d5X2tyZWYpOwo+ID4g PiArCj4gPiA+ICsJaWYgKHJldCkKPiA+ID4gKwkJRFJNX0RFQlVHKCJtc3RiICVwICglZClcbiIs IG1zdGIsCj4gPiA+ICsJCQkgIGtyZWZfcmVhZCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZikpOwo+ID4g PiArCj4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3JlZl9tc3RiKCkgLSBJbmNyZW1lbnQgdGhlIHRvcG9s b2d5IHJlZmNvdW50IG9mIGEKPiA+ID4gKyAqIGJyYW5jaCBkZXZpY2UKPiA+ID4gKyAqIEBtc3Ri OiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCB0byBpbmNyZW1lbnQgdGhlIHRvcG9sb2d5 Cj4gPiA+IHJlZmNvdW50IG9mCj4gPiA+ICsgKgo+ID4gPiArICogSW5jcmVtZW50cyBAbXN0Yi50 b3BvbG9neV9yZWZjb3VudCB3aXRob3V0IGNoZWNraW5nIHdoZXRoZXIgb3Igbm90Cj4gPiA+IGl0 J3MKPiA+ID4gKyAqIGFscmVhZHkgcmVhY2hlZCAwLiBUaGlzIGlzIG9ubHkgdmFsaWQgdG8gdXNl IGluIHNjZW5hcmlvcyB3aGVyZSB5b3UKPiA+ID4gYXJlCj4gPiA+ICsgKiBhbHJlYWR5IGd1YXJh bnRlZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgYWN0aXZlIHRvcG9sb2d5IHJlZmVyZW5jZSB0bwo+ ID4gPiBAbXN0Yi4KPiA+ID4gKyAqIE90aGVyd2lzZSwgZHJtX2RwX21zdF90b3BvbG9neV9nZXRf bXN0YigpIHNob3VsZCBiZSB1c2VkLgo+ID4gCj4gPiBzL3Nob3VsZC9tdXN0LyAgKG9yIG15IEVu Z2xpc2ggdW5kZXJzdGFuZGluZyBpcyBvZmYsIGFmYWl1aSAic2hvdWxkIiBpc24ndAo+ID4gYSBz dHJpY3QgcmVxdWlyZW1lbnQgcGVyIHJmYzIxMTkpCj4gPiAKPiA+ID4gKyAqCj4gPiA+ICsgKiBB bnkgdG9wb2xvZ3kgcmVmZXJlbmNlcyBhY3F1aXJlZCB3aXRoIHRoaXMgZnVuY3Rpb24gbXVzdCBi ZSByZWxlYXNlZAo+ID4gPiB3aGVuCj4gPiA+ICsgKiB0aGV5IGFyZSBubyBsb25nZXIgYmVpbmcg dXNlZCBieSBjYWxsaW5nCj4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIoKS4KPiA+ ID4gKyAqCj4gPiA+ICsgKiBTZWUgYWxzbzoKPiA+ID4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lf Z2V0X21zdGIoKQo+ID4gPiArICogZHJtX2RwX21zdF90b3BvbG9neV9wdXRfbXN0YigpCj4gPiA+ ICsgKi8KPiA+ID4gK3N0YXRpYyB2b2lkCj4gPiA+ICtkcm1fZHBfbXN0X3RvcG9sb2d5X3JlZl9t c3RiKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YikKPiA+ID4gK3sKPiA+IAo+ID4gU2hv dWxkIHdlIGhhdmUgYSBXQVJOX09OKHJlZmNvdW50ID09IDApIGhlcmU/Cj4gPiAKPiA+ID4gKwlr cmVmX2dldCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZik7Cj4gPiA+ICsJRFJNX0RFQlVHKCJtc3RiICVw ICglZClcbiIsIG1zdGIsIGtyZWZfcmVhZCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZikpOwo+ID4gPiAg fQo+ID4gPiAgCj4gPiA+ICsvKioKPiA+ID4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21z dGIoKSAtIHJlbGVhc2UgYSB0b3BvbG9neSByZWZlcmVuY2UgdG8gYQo+ID4gPiBicmFuY2gKPiA+ ID4gKyAqIGRldmljZQo+ID4gPiArICogQG1zdGI6IFRoZSAmc3RydWN0IGRybV9kcF9tc3RfYnJh bmNoIHRvIHJlbGVhc2UgdGhlIHRvcG9sb2d5IHJlZmVyZW5jZQo+ID4gPiBmcm9tCj4gPiA+ICsg Kgo+ID4gPiArICogUmVsZWFzZXMgYSB0b3BvbG9neSByZWZlcmVuY2UgZnJvbSBAbXN0YiBieSBk ZWNyZW1lbnRpbmcKPiA+ID4gKyAqIEBtc3RiLnRvcG9sb2d5X2tyZWYuCj4gPiA+ICsgKgo+ID4g PiArICogU2VlIGFsc286Cj4gPiA+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiKCkK PiA+ID4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfcmVmX21zdGIoKQo+ID4gPiArICovCj4gPiA+ ICtzdGF0aWMgdm9pZAo+ID4gPiArZHJtX2RwX21zdF90b3BvbG9neV9wdXRfbXN0YihzdHJ1Y3Qg ZHJtX2RwX21zdF9icmFuY2ggKm1zdGIpCj4gPiA+ICt7Cj4gPiA+ICsJRFJNX0RFQlVHKCJtc3Ri ICVwICglZClcbiIsIG1zdGIsIGtyZWZfcmVhZCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZiktMSk7Cj4g PiA+ICsJa3JlZl9wdXQoJm1zdGItPnRvcG9sb2d5X2tyZWYsIGRybV9kcF9kZXN0cm95X21zdF9i cmFuY2hfZGV2aWNlKTsKPiA+ID4gK30KPiA+ID4gIAo+ID4gPiAgc3RhdGljIHZvaWQgZHJtX2Rw X3BvcnRfdGVhcmRvd25fcGR0KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGludAo+ID4g PiBvbGRfcGR0KQo+ID4gPiAgewo+ID4gPiBAQCAtOTMwLDE0ICsxMDcyLDE1IEBAIHN0YXRpYyB2 b2lkIGRybV9kcF9wb3J0X3RlYXJkb3duX3BkdChzdHJ1Y3QKPiA+ID4gZHJtX2RwX21zdF9wb3J0 ICpwb3J0LCBpbnQgb2xkX3BkdCkKPiA+ID4gIAljYXNlIERQX1BFRVJfREVWSUNFX01TVF9CUkFO Q0hJTkc6Cj4gPiA+ICAJCW1zdGIgPSBwb3J0LT5tc3RiOwo+ID4gPiAgCQlwb3J0LT5tc3RiID0g TlVMTDsKPiA+ID4gLQkJZHJtX2RwX3B1dF9tc3RfYnJhbmNoX2RldmljZShtc3RiKTsKPiA+ID4g KwkJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfbXN0Yihtc3RiKTsKPiA+ID4gIAkJYnJlYWs7Cj4g PiA+ICAJfQo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ICBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJv eV9wb3J0KHN0cnVjdCBrcmVmICprcmVmKQo+ID4gPiAgewo+ID4gPiAtCXN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0Cj4gPiA+IGRybV9kcF9t c3RfcG9ydCwga3JlZik7Cj4gPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCA9Cj4g PiA+ICsJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0LCB0b3BvbG9n eV9rcmVmKTsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciA9IHBv cnQtPm1ncjsKPiA+ID4gIAo+ID4gPiAgCWlmICghcG9ydC0+aW5wdXQpIHsKPiA+ID4gQEAgLTk1 Niw3ICsxMDk5LDYgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2Rlc3Ryb3lfcG9ydChzdHJ1Y3Qga3Jl ZiAqa3JlZikKPiA+ID4gIAkJCSAqIGZyb20gYW4gRURJRCByZXRyaWV2YWwgKi8KPiA+ID4gIAo+ ID4gPiAgCQkJbXV0ZXhfbG9jaygmbWdyLT5kZXN0cm95X2Nvbm5lY3Rvcl9sb2NrKTsKPiA+ID4g LQkJCWtyZWZfZ2V0KCZwb3J0LT5wYXJlbnQtPmtyZWYpOwo+ID4gPiAgCQkJbGlzdF9hZGQoJnBv cnQtPm5leHQsICZtZ3ItPmRlc3Ryb3lfY29ubmVjdG9yX2xpc3QpOwo+ID4gPiAgCQkJbXV0ZXhf dW5sb2NrKCZtZ3ItPmRlc3Ryb3lfY29ubmVjdG9yX2xvY2spOwo+ID4gPiAgCQkJc2NoZWR1bGVf d29yaygmbWdyLT5kZXN0cm95X2Nvbm5lY3Rvcl93b3JrKTsKPiA+ID4gQEAgLTk2NywyNSArMTEw OSw5MyBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9wb3J0KHN0cnVjdCBrcmVmICprcmVm KQo+ID4gPiAgCQlkcm1fZHBfcG9ydF90ZWFyZG93bl9wZHQocG9ydCwgcG9ydC0+cGR0KTsKPiA+ ID4gIAkJcG9ydC0+cGR0ID0gRFBfUEVFUl9ERVZJQ0VfTk9ORTsKPiA+ID4gIAl9Cj4gPiA+IC0J a2ZyZWUocG9ydCk7Cj4gPiA+ICsJZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2MocG9ydCk7Cj4g PiA+ICB9Cj4gPiA+ICAKPiA+ID4gLXN0YXRpYyB2b2lkIGRybV9kcF9wdXRfcG9ydChzdHJ1Y3Qg ZHJtX2RwX21zdF9wb3J0ICpwb3J0KQo+ID4gPiArLyoqCj4gPiA+ICsgKiBkcm1fZHBfbXN0X3Rv cG9sb2d5X2dldF9wb3J0KCkgLSBJbmNyZW1lbnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50IG9mIGEK PiA+ID4gKyAqIHBvcnQgdW5sZXNzIGl0cyB6ZXJvCj4gPiA+ICsgKiBAcG9ydDogJnN0cnVjdCBk cm1fZHBfbXN0X3BvcnQgdG8gaW5jcmVtZW50IHRoZSB0b3BvbG9neSByZWZjb3VudCBvZgo+ID4g PiArICoKPiA+ID4gKyAqIEF0dGVtcHRzIHRvIGdyYWIgYSB0b3BvbG9neSByZWZlcmVuY2UgdG8g QHBvcnQsIGlmIGl0IGhhc24ndCB5ZXQgYmVlbgo+ID4gPiArICogcmVtb3ZlZCBmcm9tIHRoZSB0 b3BvbG9neSAoZS5nLiBAcG9ydC50b3BvbG9neV9rcmVmIGhhcyByZWFjaGVkIDApLgo+ID4gPiAr ICoKPiA+ID4gKyAqIEFueSB0b3BvbG9neSByZWZlcmVuY2VzIGFjcXVpcmVkIHdpdGggdGhpcyBm dW5jdGlvbiBtdXN0IGJlIHJlbGVhc2VkCj4gPiA+IHdoZW4KPiA+ID4gKyAqIHRoZXkgYXJlIG5v IGxvbmdlciBiZWluZyB1c2VkIGJ5IGNhbGxpbmcKPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9w dXRfcG9ydCgpLgo+ID4gPiArICoKPiA+ID4gKyAqIFNlZSBhbHNvOgo+ID4gPiArICogZHJtX2Rw X21zdF90b3BvbG9neV9yZWZfcG9ydCgpCj4gPiA+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1 dF9wb3J0KCkKPiA+ID4gKyAqCj4gPiA+ICsgKiBSZXR1cm5zOgo+ID4gPiArICogKiAxOiBBIHRv cG9sb2d5IHJlZmVyZW5jZSB3YXMgZ3JhYmJlZCBzdWNjZXNzZnVsbHkKPiA+ID4gKyAqICogMDog QHBvcnQgaXMgbm8gbG9uZ2VyIGluIHRoZSB0b3BvbG9neSwgbm8gcmVmZXJlbmNlIHdhcyBncmFi YmVkCj4gPiA+ICsgKi8KPiA+ID4gK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrCj4gPiA+ICtkcm1f ZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpCj4g PiA+ICB7Cj4gPiA+IC0Ja3JlZl9wdXQoJnBvcnQtPmtyZWYsIGRybV9kcF9kZXN0cm95X3BvcnQp Owo+ID4gPiArCWludCByZXQgPSBrcmVmX2dldF91bmxlc3NfemVybygmcG9ydC0+dG9wb2xvZ3lf a3JlZik7Cj4gPiA+ICsKPiA+ID4gKwlpZiAocmV0KQo+ID4gPiArCQlEUk1fREVCVUcoInBvcnQg JXAgKCVkKVxuIiwgcG9ydCwKPiA+ID4gKwkJCSAga3JlZl9yZWFkKCZwb3J0LT50b3BvbG9neV9r cmVmKSk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ IC1zdGF0aWMgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoCj4gPiA+ICpkcm1fZHBfbXN0X2dldF92 YWxpZGF0ZWRfbXN0Yl9yZWZfbG9ja2VkKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwK PiA+ID4gc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICp0b19maW5kKQo+ID4gPiArLyoqCj4gPiA+ ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3JlZl9wb3J0KCkgLSBJbmNyZW1lbnQgdGhlIHRvcG9s b2d5IHJlZmNvdW50IG9mIGEKPiA+ID4gcG9ydAo+ID4gPiArICogQHBvcnQ6IFRoZSAmc3RydWN0 IGRybV9kcF9tc3RfcG9ydCB0byBpbmNyZW1lbnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50Cj4gPiA+ IG9mCj4gPiA+ICsgKgo+ID4gPiArICogSW5jcmVtZW50cyBAcG9ydC50b3BvbG9neV9yZWZjb3Vu dCB3aXRob3V0IGNoZWNraW5nIHdoZXRoZXIgb3Igbm90Cj4gPiA+IGl0J3MKPiA+ID4gKyAqIGFs cmVhZHkgcmVhY2hlZCAwLiBUaGlzIGlzIG9ubHkgdmFsaWQgdG8gdXNlIGluIHNjZW5hcmlvcyB3 aGVyZSB5b3UKPiA+ID4gYXJlCj4gPiA+ICsgKiBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gaGF2ZSBh dCBsZWFzdCBvbmUgYWN0aXZlIHRvcG9sb2d5IHJlZmVyZW5jZSB0bwo+ID4gPiBAcG9ydC4KPiA+ ID4gKyAqIE90aGVyd2lzZSwgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydCgpIHNob3VsZCBi ZSB1c2VkLgo+ID4gPiArICoKPiA+ID4gKyAqIEFueSB0b3BvbG9neSByZWZlcmVuY2VzIGFjcXVp cmVkIHdpdGggdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJlbGVhc2VkCj4gPiA+IHdoZW4KPiA+ID4g KyAqIHRoZXkgYXJlIG5vIGxvbmdlciBiZWluZyB1c2VkIGJ5IGNhbGxpbmcKPiA+ID4gZHJtX2Rw X21zdF90b3BvbG9neV9wdXRfcG9ydCgpLgo+ID4gPiArICoKPiA+ID4gKyAqIFNlZSBhbHNvOgo+ ID4gPiArICogZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydCgpCj4gPiA+ICsgKiBkcm1fZHBf bXN0X3RvcG9sb2d5X3B1dF9wb3J0KCkKPiA+ID4gKyAqLwo+ID4gPiArc3RhdGljIHZvaWQgZHJt X2RwX21zdF90b3BvbG9neV9yZWZfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQo+ ID4gPiArewo+ID4gPiArCWtyZWZfZ2V0KCZwb3J0LT50b3BvbG9neV9rcmVmKTsKPiA+ID4gKwlE Uk1fREVCVUcoInBvcnQgJXAgKCVkKVxuIiwgcG9ydCwga3JlZl9yZWFkKCZwb3J0LT50b3BvbG9n eV9rcmVmKSk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogZHJtX2RwX21z dF90b3BvbG9neV9wdXRfcG9ydCgpIC0gcmVsZWFzZSBhIHRvcG9sb2d5IHJlZmVyZW5jZSB0byBh Cj4gPiA+IHBvcnQKPiA+ID4gKyAqIEBwb3J0OiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X3BvcnQg dG8gcmVsZWFzZSB0aGUgdG9wb2xvZ3kgcmVmZXJlbmNlCj4gPiA+IGZyb20KPiA+ID4gKyAqCj4g PiA+ICsgKiBSZWxlYXNlcyBhIHRvcG9sb2d5IHJlZmVyZW5jZSBmcm9tIEBwb3J0IGJ5IGRlY3Jl bWVudGluZwo+ID4gPiArICogQHBvcnQudG9wb2xvZ3lfa3JlZi4KPiA+ID4gKyAqCj4gPiA+ICsg KiBTZWUgYWxzbzoKPiA+ID4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQoKQo+ID4g PiArICogZHJtX2RwX21zdF90b3BvbG9neV9yZWZfcG9ydCgpCj4gPiA+ICsgKi8KPiA+ID4gK3N0 YXRpYyB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQoc3RydWN0IGRybV9kcF9tc3Rf cG9ydCAqcG9ydCkKPiA+ID4gK3sKPiA+ID4gKwlEUk1fREVCVUcoInBvcnQgJXAgKCVkKVxuIiwg cG9ydCwga3JlZl9yZWFkKCZwb3J0LT50b3BvbG9neV9rcmVmKS0xKTsKPiA+ID4gKwlrcmVmX3B1 dCgmcG9ydC0+dG9wb2xvZ3lfa3JlZiwgZHJtX2RwX2Rlc3Ryb3lfcG9ydCk7Cj4gPiA+ICt9Cj4g PiA+ICsKPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKgo+ID4gPiArZHJt X2RwX21zdF90b3BvbG9neV9nZXRfbXN0Yl92YWxpZGF0ZWRfbG9ja2VkKHN0cnVjdCBkcm1fZHBf bXN0X2JyYW5jaAo+ID4gPiAqbXN0YiwKPiA+ID4gKwkJCQkJICAgICAgc3RydWN0IGRybV9kcF9t c3RfYnJhbmNoCj4gPiA+ICp0b19maW5kKQo+ID4gPiAgewo+ID4gPiAgCXN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQ7Cj4gPiA+ICAJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICpybXN0YjsK PiA+ID4gLQlpZiAodG9fZmluZCA9PSBtc3RiKSB7Cj4gPiA+IC0JCWtyZWZfZ2V0KCZtc3RiLT5r cmVmKTsKPiA+ID4gKwo+ID4gPiArCWlmICh0b19maW5kID09IG1zdGIpCj4gPiA+ICAJCXJldHVy biBtc3RiOwo+ID4gPiAtCX0KPiA+ID4gKwo+ID4gPiAgCWxpc3RfZm9yX2VhY2hfZW50cnkocG9y dCwgJm1zdGItPnBvcnRzLCBuZXh0KSB7Cj4gPiA+ICAJCWlmIChwb3J0LT5tc3RiKSB7Cj4gPiA+ IC0JCQlybXN0YiA9IGRybV9kcF9tc3RfZ2V0X3ZhbGlkYXRlZF9tc3RiX3JlZl9sb2NrZWQocG9y dC0KPiA+ID4gPm1zdGIsIHRvX2ZpbmQpOwo+ID4gPiArCQkJcm1zdGIgPSBkcm1fZHBfbXN0X3Rv cG9sb2d5X2dldF9tc3RiX3ZhbGlkYXRlZF9sb2NrZWQoCj4gPiAKPiA+IEkgdGhpbmsgYSBwcmVw IHBhdGNoIHdoaWNoIGp1c3QgcmVuYW1lcyB0aGUgY3VycmVudCBnZXRfdmFsaWRhdGVkL3B1dAo+ ID4gZnVuY3Rpb25zIHRvIHRoZSBuZXcgbmFtZXMgd291bGQgYmUgcmVhbGx5IGdvb2QuIFRoZW4g dGhpcyBwYXRjaCBoZXJlIHdpdGgKPiA+IHRoZSBuZXcgc3R1ZmYuCj4gPiAKPiA+IAo+ID4gPiAr CQkJICAgIHBvcnQtPm1zdGIsIHRvX2ZpbmQpOwo+ID4gPiAgCQkJaWYgKHJtc3RiKQo+ID4gPiAg CQkJCXJldHVybiBybXN0YjsKPiA+ID4gIAkJfQo+ID4gPiBAQCAtOTkzLDI3ICsxMjAzLDM3IEBA IHN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gKPiA+ID4gKmRybV9kcF9tc3RfZ2V0X3Zh bGlkYXRlZF9tc3RiX3JlZl9sb2NrZWQoc3RydWN0Cj4gPiA+ICAJcmV0dXJuIE5VTEw7Cj4gPiA+ ICB9Cj4gPiA+ICAKPiA+ID4gLXN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKmRybV9k cF9nZXRfdmFsaWRhdGVkX21zdGJfcmVmKHN0cnVjdAo+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyLCBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIpCj4gPiA+ICtzdGF0aWMg c3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICoKPiA+ID4gK2RybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0 X21zdGJfdmFsaWRhdGVkKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncgo+ID4gPiAqbWdy LAo+ID4gPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIpCj4gPiA+ ICB7Cj4gPiA+ICAJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICpybXN0YiA9IE5VTEw7Cj4gPiA+ ICsKPiA+ID4gIAltdXRleF9sb2NrKCZtZ3ItPmxvY2spOwo+ID4gPiAtCWlmIChtZ3ItPm1zdF9w cmltYXJ5KQo+ID4gPiAtCQlybXN0YiA9IGRybV9kcF9tc3RfZ2V0X3ZhbGlkYXRlZF9tc3RiX3Jl Zl9sb2NrZWQobWdyLQo+ID4gPiA+bXN0X3ByaW1hcnksIG1zdGIpOwo+ID4gPiArCWlmIChtZ3It Pm1zdF9wcmltYXJ5KSB7Cj4gPiA+ICsJCXJtc3RiID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRf bXN0Yl92YWxpZGF0ZWRfbG9ja2VkKAo+ID4gPiArCQkgICAgbWdyLT5tc3RfcHJpbWFyeSwgbXN0 Yik7Cj4gPiA+ICsKPiA+ID4gKwkJaWYgKHJtc3RiICYmICFkcm1fZHBfbXN0X3RvcG9sb2d5X2dl dF9tc3RiKHJtc3RiKSkKPiA+ID4gKwkJCXJtc3RiID0gTlVMTDsKPiA+ID4gKwl9Cj4gPiA+ICAJ bXV0ZXhfdW5sb2NrKCZtZ3ItPmxvY2spOwo+ID4gPiAgCXJldHVybiBybXN0YjsKPiA+ID4gIH0K PiA+ID4gIAo+ID4gPiAtc3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKmRybV9kcF9tc3Rf Z2V0X3BvcnRfcmVmX2xvY2tlZChzdHJ1Y3QKPiA+ID4gZHJtX2RwX21zdF9icmFuY2ggKm1zdGIs IHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnRvX2ZpbmQpCj4gPiA+ICtzdGF0aWMgc3RydWN0IGRy bV9kcF9tc3RfcG9ydCAqCj4gPiA+ICtkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlk YXRlZF9sb2NrZWQoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoCj4gPiA+ICptc3RiLAo+ID4gPiAr CQkJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICp0b19maW5kKQo+ID4gPiAgewo+ID4g PiAgCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsICptcG9ydDsKPiA+ID4gIAo+ID4gPiAg CWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJm1zdGItPnBvcnRzLCBuZXh0KSB7Cj4gPiA+IC0J CWlmIChwb3J0ID09IHRvX2ZpbmQpIHsKPiA+ID4gLQkJCWtyZWZfZ2V0KCZwb3J0LT5rcmVmKTsK PiA+ID4gKwkJaWYgKHBvcnQgPT0gdG9fZmluZCkKPiA+ID4gIAkJCXJldHVybiBwb3J0Owo+ID4g PiAtCQl9Cj4gPiA+ICsKPiA+ID4gIAkJaWYgKHBvcnQtPm1zdGIpIHsKPiA+ID4gLQkJCW1wb3J0 ID0gZHJtX2RwX21zdF9nZXRfcG9ydF9yZWZfbG9ja2VkKHBvcnQtPm1zdGIsCj4gPiA+IHRvX2Zp bmQpOwo+ID4gPiArCQkJbXBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlk YXRlZF9sb2NrZWQoCj4gPiA+ICsJCQkgICAgcG9ydC0+bXN0YiwgdG9fZmluZCk7Cj4gPiA+ICAJ CQlpZiAobXBvcnQpCj4gPiA+ICAJCQkJcmV0dXJuIG1wb3J0Owo+ID4gPiAgCQl9Cj4gPiA+IEBA IC0xMDIxLDEyICsxMjQxLDIwIEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0Cj4gPiA+ ICpkcm1fZHBfbXN0X2dldF9wb3J0X3JlZl9sb2NrZWQoc3RydWN0IGRybV9kcF9tc3RfCj4gPiA+ ICAJcmV0dXJuIE5VTEw7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLXN0YXRpYyBzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0ICpkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihzdHJ1Y3QKPiA+ID4g ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9y dCkKPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICoKPiA+ID4gK2RybV9kcF9t c3RfdG9wb2xvZ3lfZ2V0X3BvcnRfdmFsaWRhdGVkKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21ncgo+ID4gPiAqbWdyLAo+ID4gPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0 ICpwb3J0KQo+ID4gPiAgewo+ID4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnJwb3J0ID0g TlVMTDsKPiA+ID4gKwo+ID4gPiAgCW11dGV4X2xvY2soJm1nci0+bG9jayk7Cj4gPiA+IC0JaWYg KG1nci0+bXN0X3ByaW1hcnkpCj4gPiA+IC0JCXJwb3J0ID0gZHJtX2RwX21zdF9nZXRfcG9ydF9y ZWZfbG9ja2VkKG1nci0+bXN0X3ByaW1hcnksCj4gPiA+IHBvcnQpOwo+ID4gPiArCWlmIChtZ3It Pm1zdF9wcmltYXJ5KSB7Cj4gPiA+ICsJCXJwb3J0ID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRf cG9ydF92YWxpZGF0ZWRfbG9ja2VkKAo+ID4gPiArCQkgICAgbWdyLT5tc3RfcHJpbWFyeSwgcG9y dCk7Cj4gPiA+ICsKPiA+ID4gKwkJaWYgKHJwb3J0ICYmICFkcm1fZHBfbXN0X3RvcG9sb2d5X2dl dF9wb3J0KHJwb3J0KSkKPiA+ID4gKwkJCXJwb3J0ID0gTlVMTDsKPiA+ID4gKwl9Cj4gPiA+ICAJ bXV0ZXhfdW5sb2NrKCZtZ3ItPmxvY2spOwo+ID4gPiAgCXJldHVybiBycG9ydDsKPiA+ID4gIH0K PiA+ID4gQEAgLTEwMzQsMTEgKzEyNjIsMTIgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQKPiA+ID4gKmRybV9kcF9nZXRfdmFsaWRhdGVkX3BvcnRfcmVmKHN0cnVjdCBkcm1fZHBfbXN0 X3QKPiA+ID4gIHN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpkcm1fZHBfZ2V0X3BvcnQo c3RydWN0IGRybV9kcF9tc3RfYnJhbmNoCj4gPiA+ICptc3RiLCB1OCBwb3J0X251bSkKPiA+ID4g IHsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Owo+ID4gPiArCWludCByZXQ7 Cj4gPiA+ICAKPiA+ID4gIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZtc3RiLT5wb3J0cywg bmV4dCkgewo+ID4gPiAgCQlpZiAocG9ydC0+cG9ydF9udW0gPT0gcG9ydF9udW0pIHsKPiA+ID4g LQkJCWtyZWZfZ2V0KCZwb3J0LT5rcmVmKTsKPiA+ID4gLQkJCXJldHVybiBwb3J0Owo+ID4gPiAr CQkJcmV0ID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydChwb3J0KTsKPiA+ID4gKwkJCXJl dHVybiByZXQgPyBwb3J0IDogTlVMTDsKPiA+ID4gIAkJfQo+ID4gPiAgCX0KPiA+ID4gIAo+ID4g PiBAQCAtMTA4Nyw2ICsxMzE2LDExIEBAIHN0YXRpYyBib29sIGRybV9kcF9wb3J0X3NldHVwX3Bk dChzdHJ1Y3QKPiA+ID4gZHJtX2RwX21zdF9wb3J0ICpwb3J0KQo+ID4gPiAgCQlpZiAocG9ydC0+ bXN0Yikgewo+ID4gPiAgCQkJcG9ydC0+bXN0Yi0+bWdyID0gcG9ydC0+bWdyOwo+ID4gPiAgCQkJ cG9ydC0+bXN0Yi0+cG9ydF9wYXJlbnQgPSBwb3J0Owo+ID4gPiArCQkJLyoKPiA+ID4gKwkJCSAq IE1ha2Ugc3VyZSB0aGlzIHBvcnQncyBtZW1vcnkgYWxsb2NhdGlvbiBzdGF5cwo+ID4gPiArCQkJ ICogYXJvdW5kIHVudGlsIGl0J3MgY2hpbGQgTVNUQiByZWxlYXNlcyBpdAo+ID4gPiArCQkJICov Cj4gPiA+ICsJCQlkcm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYyhwb3J0KTsKPiA+ID4gIAo+ID4g PiAgCQkJc2VuZF9saW5rID0gdHJ1ZTsKPiA+ID4gIAkJfQo+ID4gPiBAQCAtMTE0NywxNyArMTM4 MSwyNiBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfYWRkX3BvcnQoc3RydWN0Cj4gPiA+IGRybV9kcF9t c3RfYnJhbmNoICptc3RiLAo+ID4gPiAgCWJvb2wgY3JlYXRlZCA9IGZhbHNlOwo+ID4gPiAgCWlu dCBvbGRfcGR0ID0gMDsKPiA+ID4gIAlpbnQgb2xkX2RkcHMgPSAwOwo+ID4gPiArCj4gPiA+ICAJ cG9ydCA9IGRybV9kcF9nZXRfcG9ydChtc3RiLCBwb3J0X21zZy0+cG9ydF9udW1iZXIpOwo+ID4g PiAgCWlmICghcG9ydCkgewo+ID4gPiAgCQlwb3J0ID0ga3phbGxvYyhzaXplb2YoKnBvcnQpLCBH RlBfS0VSTkVMKTsKPiA+ID4gIAkJaWYgKCFwb3J0KQo+ID4gPiAgCQkJcmV0dXJuOwo+ID4gPiAt CQlrcmVmX2luaXQoJnBvcnQtPmtyZWYpOwo+ID4gPiArCQlrcmVmX2luaXQoJnBvcnQtPnRvcG9s b2d5X2tyZWYpOwo+ID4gPiArCQlrcmVmX2luaXQoJnBvcnQtPm1hbGxvY19rcmVmKTsKPiA+ID4g IAkJcG9ydC0+cGFyZW50ID0gbXN0YjsKPiA+ID4gIAkJcG9ydC0+cG9ydF9udW0gPSBwb3J0X21z Zy0+cG9ydF9udW1iZXI7Cj4gPiA+ICAJCXBvcnQtPm1nciA9IG1zdGItPm1ncjsKPiA+ID4gIAkJ cG9ydC0+YXV4Lm5hbWUgPSAiRFBNU1QiOwo+ID4gPiAgCQlwb3J0LT5hdXguZGV2ID0gZGV2LT5k ZXY7Cj4gPiA+ICsKPiA+ID4gKwkJLyoKPiA+ID4gKwkJICogTWFrZSBzdXJlIHRoZSBtZW1vcnkg YWxsb2NhdGlvbiBmb3Igb3VyIHBhcmVudCBicmFuY2ggc3RheXMKPiA+ID4gKwkJICogYXJvdW5k IHVudGlsIG91ciBvd24gbWVtb3J5IGFsbG9jYXRpb24gaXMgcmVsZWFzZWQKPiA+ID4gKwkJICov Cj4gPiA+ICsJCWRybV9kcF9tc3RfZ2V0X21zdGJfbWFsbG9jKG1zdGIpOwo+ID4gPiArCj4gPiA+ ICAJCWNyZWF0ZWQgPSB0cnVlOwo+ID4gPiAgCX0gZWxzZSB7Cj4gPiA+ICAJCW9sZF9wZHQgPSBw b3J0LT5wZHQ7Cj4gPiA+IEBAIC0xMTc3LDcgKzE0MjAsNyBAQCBzdGF0aWMgdm9pZCBkcm1fZHBf YWRkX3BvcnQoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoCj4gPiA+ICptc3RiLAo+ID4gPiAgCSAg IGZvciB0aGlzIGxpc3QgKi8KPiA+ID4gIAlpZiAoY3JlYXRlZCkgewo+ID4gPiAgCQltdXRleF9s b2NrKCZtc3RiLT5tZ3ItPmxvY2spOwo+ID4gPiAtCQlrcmVmX2dldCgmcG9ydC0+a3JlZik7Cj4g PiA+ICsJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcmVmX3BvcnQocG9ydCk7Cj4gPiA+ICAJCWxpc3Rf YWRkKCZwb3J0LT5uZXh0LCAmbXN0Yi0+cG9ydHMpOwo+ID4gPiAgCQltdXRleF91bmxvY2soJm1z dGItPm1nci0+bG9jayk7Cj4gPiA+ICAJfQo+ID4gPiBAQCAtMTIwMiwxNyArMTQ0NSwyMSBAQCBz dGF0aWMgdm9pZCBkcm1fZHBfYWRkX3BvcnQoc3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfYnJhbmNo ICptc3RiLAo+ID4gPiAgCWlmIChjcmVhdGVkICYmICFwb3J0LT5pbnB1dCkgewo+ID4gPiAgCQlj aGFyIHByb3BwYXRoWzI1NV07Cj4gPiA+ICAKPiA+ID4gLQkJYnVpbGRfbXN0X3Byb3BfcGF0aCht c3RiLCBwb3J0LT5wb3J0X251bSwgcHJvcHBhdGgsCj4gPiA+IHNpemVvZihwcm9wcGF0aCkpOwo+ ID4gPiAtCQlwb3J0LT5jb25uZWN0b3IgPSAoKm1zdGItPm1nci0+Y2JzLT5hZGRfY29ubmVjdG9y KShtc3RiLT5tZ3IsCj4gPiA+IHBvcnQsIHByb3BwYXRoKTsKPiA+ID4gKwkJYnVpbGRfbXN0X3By b3BfcGF0aChtc3RiLCBwb3J0LT5wb3J0X251bSwgcHJvcHBhdGgsCj4gPiA+ICsJCQkJICAgIHNp emVvZihwcm9wcGF0aCkpOwo+ID4gPiArCQlwb3J0LT5jb25uZWN0b3IgPSAoKm1zdGItPm1nci0+ Y2JzLT5hZGRfY29ubmVjdG9yKShtc3RiLT5tZ3IsCj4gPiA+ICsJCQkJCQkJCSAgIHBvcnQsCj4g PiA+ICsJCQkJCQkJCSAgIHByb3BwYXRoKTsKPiA+ID4gIAkJaWYgKCFwb3J0LT5jb25uZWN0b3Ip IHsKPiA+ID4gIAkJCS8qIHJlbW92ZSBpdCBmcm9tIHRoZSBwb3J0IGxpc3QgKi8KPiA+ID4gIAkJ CW11dGV4X2xvY2soJm1zdGItPm1nci0+bG9jayk7Cj4gPiA+ICAJCQlsaXN0X2RlbCgmcG9ydC0+ bmV4dCk7Cj4gPiA+ICAJCQltdXRleF91bmxvY2soJm1zdGItPm1nci0+bG9jayk7Cj4gPiA+ICAJ CQkvKiBkcm9wIHBvcnQgbGlzdCByZWZlcmVuY2UgKi8KPiA+ID4gLQkJCWRybV9kcF9wdXRfcG9y dChwb3J0KTsKPiA+ID4gKwkJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4g PiA+ICAJCQlnb3RvIG91dDsKPiA+ID4gIAkJfQo+ID4gPiArCj4gPiA+ICAJCWlmICgocG9ydC0+ cGR0ID09IERQX1BFRVJfREVWSUNFX0RQX0xFR0FDWV9DT05WIHx8Cj4gPiA+ICAJCSAgICAgcG9y dC0+cGR0ID09IERQX1BFRVJfREVWSUNFX1NTVF9TSU5LKSAmJgo+ID4gPiAgCQkgICAgcG9ydC0+ cG9ydF9udW0gPj0gRFBfTVNUX0xPR0lDQUxfUE9SVF8wKSB7Cj4gPiA+IEBAIC0xMjI0LDcgKzE0 NzEsNyBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfYWRkX3BvcnQoc3RydWN0IGRybV9kcF9tc3RfYnJh bmNoCj4gPiA+ICptc3RiLAo+ID4gPiAgCj4gPiA+ICBvdXQ6Cj4gPiA+ICAJLyogcHV0IHJlZmVy ZW5jZSB0byB0aGlzIHBvcnQgKi8KPiA+ID4gLQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ ICsJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsKPiA+ID4gIH0KPiA+ID4gIAo+ ID4gPiAgc3RhdGljIHZvaWQgZHJtX2RwX3VwZGF0ZV9wb3J0KHN0cnVjdCBkcm1fZHBfbXN0X2Jy YW5jaCAqbXN0YiwKPiA+ID4gQEAgLTEyNTksNyArMTUwNiw3IEBAIHN0YXRpYyB2b2lkIGRybV9k cF91cGRhdGVfcG9ydChzdHJ1Y3QKPiA+ID4gZHJtX2RwX21zdF9icmFuY2ggKm1zdGIsCj4gPiA+ ICAJCQlkb3dvcmsgPSB0cnVlOwo+ID4gPiAgCX0KPiA+ID4gIAo+ID4gPiAtCWRybV9kcF9wdXRf cG9ydChwb3J0KTsKPiA+ID4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOwo+ ID4gPiAgCWlmIChkb3dvcmspCj4gPiA+ICAJCXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZt c3RiLT5tZ3ItPndvcmspOwo+ID4gPiAgCj4gPiA+IEBAIC0xMjcwLDcgKzE1MTcsNyBAQCBzdGF0 aWMgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoCj4gPiA+ICpkcm1fZHBfZ2V0X21zdF9icmFuY2hf ZGV2aWNlKHN0cnVjdCBkcm1fZHBfbXN0Xwo+ID4gPiAgewo+ID4gPiAgCXN0cnVjdCBkcm1fZHBf bXN0X2JyYW5jaCAqbXN0YjsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Owo+ ID4gPiAtCWludCBpOwo+ID4gPiArCWludCBpLCByZXQ7Cj4gPiA+ICAJLyogZmluZCB0aGUgcG9y dCBieSBpdGVyYXRpbmcgZG93biAqLwo+ID4gPiAgCj4gPiA+ICAJbXV0ZXhfbG9jaygmbWdyLT5s b2NrKTsKPiA+ID4gQEAgLTEyOTUsNyArMTU0Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21z dF9icmFuY2gKPiA+ID4gKmRybV9kcF9nZXRfbXN0X2JyYW5jaF9kZXZpY2Uoc3RydWN0IGRybV9k cF9tc3RfCj4gPiA+ICAJCQl9Cj4gPiA+ICAJCX0KPiA+ID4gIAl9Cj4gPiA+IC0Ja3JlZl9nZXQo Jm1zdGItPmtyZWYpOwo+ID4gPiArCXJldCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGIo bXN0Yik7Cj4gPiA+ICsJaWYgKCFyZXQpCj4gPiA+ICsJCW1zdGIgPSBOVUxMOwo+ID4gPiAgb3V0 Ogo+ID4gPiAgCW11dGV4X3VubG9jaygmbWdyLT5sb2NrKTsKPiA+ID4gIAlyZXR1cm4gbXN0YjsK PiA+ID4gQEAgLTEzMjUsMTkgKzE1NzQsMjIgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X2Jy YW5jaAo+ID4gPiAqZ2V0X21zdF9icmFuY2hfZGV2aWNlX2J5X2d1aWRfaGVscGVyKAo+ID4gPiAg CXJldHVybiBOVUxMOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC1zdGF0aWMgc3RydWN0IGRybV9k cF9tc3RfYnJhbmNoICpkcm1fZHBfZ2V0X21zdF9icmFuY2hfZGV2aWNlX2J5X2d1aWQoCj4gPiA+ IC0Jc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+IC0JdWludDhfdCAq Z3VpZCkKPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKgo+ID4gPiArZHJt X2RwX2dldF9tc3RfYnJhbmNoX2RldmljZV9ieV9ndWlkKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X21nciAqbWdyLAo+ID4gPiArCQkJCSAgICAgdWludDhfdCAqZ3VpZCkKPiA+ID4gIHsKPiA+ ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGI7Cj4gPiA+ICsJaW50IHJldDsKPiA+ ID4gIAo+ID4gPiAgCS8qIGZpbmQgdGhlIHBvcnQgYnkgaXRlcmF0aW5nIGRvd24gKi8KPiA+ID4g IAltdXRleF9sb2NrKCZtZ3ItPmxvY2spOwo+ID4gPiAgCj4gPiA+ICAJbXN0YiA9IGdldF9tc3Rf YnJhbmNoX2RldmljZV9ieV9ndWlkX2hlbHBlcihtZ3ItPm1zdF9wcmltYXJ5LCBndWlkKTsKPiA+ ID4gLQo+ID4gPiAtCWlmIChtc3RiKQo+ID4gPiAtCQlrcmVmX2dldCgmbXN0Yi0+a3JlZik7Cj4g PiA+ICsJaWYgKG1zdGIpIHsKPiA+ID4gKwkJcmV0ID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRf bXN0Yihtc3RiKTsKPiA+ID4gKwkJaWYgKCFyZXQpCj4gPiA+ICsJCQltc3RiID0gTlVMTDsKPiA+ ID4gKwl9Cj4gPiA+ICAKPiA+ID4gIAltdXRleF91bmxvY2soJm1nci0+bG9jayk7Cj4gPiA+ICAJ cmV0dXJuIG1zdGI7Cj4gPiA+IEBAIC0xMzYyLDEwICsxNjE0LDEwIEBAIHN0YXRpYyB2b2lkCj4g PiA+IGRybV9kcF9jaGVja19hbmRfc2VuZF9saW5rX2FkZHJlc3Moc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptCj4gPiA+ICAJCQlkcm1fZHBfc2VuZF9lbnVtX3BhdGhfcmVzb3VyY2Vz KG1nciwgbXN0YiwgcG9ydCk7Cj4gPiA+ICAKPiA+ID4gIAkJaWYgKHBvcnQtPm1zdGIpIHsKPiA+ ID4gLQkJCW1zdGJfY2hpbGQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9tc3RiX3JlZihtZ3IsIHBv cnQtCj4gPiA+ID5tc3RiKTsKPiA+ID4gKwkJCW1zdGJfY2hpbGQgPQo+ID4gPiBkcm1fZHBfbXN0 X3RvcG9sb2d5X2dldF9tc3RiX3ZhbGlkYXRlZChtZ3IsIHBvcnQtPm1zdGIpOwo+ID4gPiAgCQkJ aWYgKG1zdGJfY2hpbGQpIHsKPiA+ID4gIAkJCQlkcm1fZHBfY2hlY2tfYW5kX3NlbmRfbGlua19h ZGRyZXNzKG1nciwKPiA+ID4gbXN0Yl9jaGlsZCk7Cj4gPiA+IC0JCQkJZHJtX2RwX3B1dF9tc3Rf YnJhbmNoX2RldmljZShtc3RiX2NoaWxkKTsKPiA+ID4gKwkJCQlkcm1fZHBfbXN0X3RvcG9sb2d5 X3B1dF9tc3RiKG1zdGJfY2hpbGQpOwo+ID4gPiAgCQkJfQo+ID4gPiAgCQl9Cj4gPiA+ICAJfQo+ ID4gPiBAQCAtMTM3NSwxNiArMTYyNywxOSBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfbXN0X2xpbmtf cHJvYmVfd29yayhzdHJ1Y3QKPiA+ID4gd29ya19zdHJ1Y3QgKndvcmspCj4gPiA+ICB7Cj4gPiA+ ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IgPSBjb250YWluZXJfb2Yod29y aywgc3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyLCB3b3JrKTsKPiA+ID4gIAlz dHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGI7Cj4gPiA+ICsJaW50IHJldDsKPiA+ID4gIAo+ ID4gPiAgCW11dGV4X2xvY2soJm1nci0+bG9jayk7Cj4gPiA+ICAJbXN0YiA9IG1nci0+bXN0X3By aW1hcnk7Cj4gPiA+ICAJaWYgKG1zdGIpIHsKPiA+ID4gLQkJa3JlZl9nZXQoJm1zdGItPmtyZWYp Owo+ID4gPiArCQlyZXQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiKG1zdGIpOwo+ID4g PiArCQlpZiAoIXJldCkKPiA+ID4gKwkJCW1zdGIgPSBOVUxMOwo+ID4gPiAgCX0KPiA+ID4gIAlt dXRleF91bmxvY2soJm1nci0+bG9jayk7Cj4gPiA+ICAJaWYgKG1zdGIpIHsKPiA+ID4gIAkJZHJt X2RwX2NoZWNrX2FuZF9zZW5kX2xpbmtfYWRkcmVzcyhtZ3IsIG1zdGIpOwo+ID4gPiAtCQlkcm1f ZHBfcHV0X21zdF9icmFuY2hfZGV2aWNlKG1zdGIpOwo+ID4gPiArCQlkcm1fZHBfbXN0X3RvcG9s b2d5X3B1dF9tc3RiKG1zdGIpOwo+ID4gPiAgCX0KPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiBAQCAt MTY5NSwyMiArMTk1MCwzMiBAQCBzdGF0aWMgc3RydWN0IGRybV9kcF9tc3RfcG9ydAo+ID4gPiAq ZHJtX2RwX2dldF9sYXN0X2Nvbm5lY3RlZF9wb3J0X3RvX21zdGIoc3RydWN0IGRybQo+ID4gPiAg CXJldHVybiBkcm1fZHBfZ2V0X2xhc3RfY29ubmVjdGVkX3BvcnRfdG9fbXN0Yihtc3RiLT5wb3J0 X3BhcmVudC0KPiA+ID4gPnBhcmVudCk7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLXN0YXRpYyBz dHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gKPiA+ID4gKmRybV9kcF9nZXRfbGFzdF9jb25uZWN0ZWRf cG9ydF9hbmRfbXN0YihzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IKPiA+ID4gKm1nciwK PiA+ID4gLQkJCQkJCQkJCSBzdHJ1Ywo+ID4gPiB0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiLAo+ ID4gPiAtCQkJCQkJCQkJIGludAo+ID4gPiAqcG9ydF9udW0pCj4gPiA+ICtzdGF0aWMgc3RydWN0 IGRybV9kcF9tc3RfYnJhbmNoICoKPiA+ID4gK2RybV9kcF9nZXRfbGFzdF9jb25uZWN0ZWRfcG9y dF9hbmRfbXN0YihzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IKPiA+ID4gKm1nciwKPiA+ ID4gKwkJCQkJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiLAo+ID4gPiArCQkJCQlpbnQg KnBvcnRfbnVtKQo+ID4gPiAgewo+ID4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqcm1z dGIgPSBOVUxMOwo+ID4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKmZvdW5kX3BvcnQ7Cj4g PiA+ICsKPiA+ID4gIAltdXRleF9sb2NrKCZtZ3ItPmxvY2spOwo+ID4gPiAtCWlmIChtZ3ItPm1z dF9wcmltYXJ5KSB7Cj4gPiA+ICsJaWYgKCFtZ3ItPm1zdF9wcmltYXJ5KQo+ID4gPiArCQlnb3Rv IG91dDsKPiA+ID4gKwo+ID4gPiArCWRvIHsKPiA+ID4gIAkJZm91bmRfcG9ydCA9IGRybV9kcF9n ZXRfbGFzdF9jb25uZWN0ZWRfcG9ydF90b19tc3RiKG1zdGIpOwo+ID4gPiArCQlpZiAoIWZvdW5k X3BvcnQpCj4gPiA+ICsJCQlicmVhazsKPiA+ID4gIAo+ID4gPiAtCQlpZiAoZm91bmRfcG9ydCkg ewo+ID4gPiArCQlpZiAoZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0Yihmb3VuZF9wb3J0LT5w YXJlbnQpKSB7Cj4gPiA+ICAJCQlybXN0YiA9IGZvdW5kX3BvcnQtPnBhcmVudDsKPiA+ID4gLQkJ CWtyZWZfZ2V0KCZybXN0Yi0+a3JlZik7Cj4gPiA+ICAJCQkqcG9ydF9udW0gPSBmb3VuZF9wb3J0 LT5wb3J0X251bTsKPiA+ID4gKwkJfSBlbHNlIHsKPiA+ID4gKwkJCS8qIFNlYXJjaCBhZ2Fpbiwg c3RhcnRpbmcgZnJvbSB0aGlzIHBhcmVudCAqLwo+ID4gPiArCQkJbXN0YiA9IGZvdW5kX3BvcnQt PnBhcmVudDsKPiA+ID4gIAkJfQo+ID4gPiAtCX0KPiA+ID4gKwl9IHdoaWxlICghcm1zdGIpOwo+ ID4gCj4gPiBIbSwgaXMgdGhpcyBhIGJ1Z2ZpeCBvZiB2YWxpZGF0aW5nIHRoZSBlbnRpcmUgY2hh aW4/IEFmYWl1aSB0aGUgbmV3Cj4gPiB0b3BvbG9neV9nZXQgc3RpbGwgdmFsaWRhdGVzIHRoZSBl bnRpcmUgY2hhaW4sIHNvIEknbSBhIGJpdCBjb25mdXNlZCB3aGF0Cj4gPiB0aGlzIGRvZXMgaGVy ZS4KPiAKPiBKRllJOiBJJ20gYXNzdW1pbmcgeW91IG1lYW50IHRoZSBvbGQgZ2V0X3ZhbGlkYXRl ZCgpIGZ1bmN0aW9ucy4gSSBtZW50aW9uZWQgaW4KPiB0aGUgY292ZXIgbGV0dGVyIGZvciB0aGlz IHNlcmllcyB0aGF0IEkgd2Fzbid0IHN1cmUgaWYgd2Ugc3RpbGwgbmVlZGVkIHRoZW0sCj4gYnV0 IG9uIGNsb3NlciBpbnNwZWN0aW9uIEkgdGhpbmsgd2Ugc3RpbGwgZG8gc2luY2UgdGhleSBwZXJm b3JtIHRoZSBhY3R1YWwKPiB2YWxpZGF0aW9uIG9mIHRoZSB3aG9sZSB0b3BvbG9neSBjaGFpbi4g ZHJtX2RwX21zdF90b3BvbG9neV9nZXRfKHBvcnR8bXN0YikoKQo+IGp1c3QgaW5jcmVtZW50cyB0 aGUgdG9wb2xvZ3kgcmVmY291bnQgc2FmZWx5LgoKWWVhaCBJIG1peGVkIHRoaXMgdXAgd2l0aCB0 aGUgb2xkIGdldF92YWxpZGF0ZWQsIGJ1dCB0aGlzIGlzIG9ubHkgdXNlZCBpbgpwYXlsb2FkX3Nl bmRfbWdzLgoKPiBUaGUgY2hhbmdlIHlvdSdyZSBzZWVpbmcgaGVyZSBpcyBiZWNhdXNlIHNpbmNl IHdlIGRpZG4ndCB1c2UKPiBrcmVmX2dldF91bmxlc3NfemVybygpIGJlZm9yZSwgd2UnZCBqdXN0 IGdvIHVwIHRoZSB0b3BvbG9neSBwYXRoIGFib3ZlIG1zdGIoKSwKPiB0aGVuIGtyZWYgdGhlIGZp cnN0IHRoaW5nIHdlIGZpbmQgdGhhdCB3ZSB0aGluayBpcyBzdGlsbCBjb25uZWN0ZWQgdG8gdGhl Cj4gdG9wb2xvZ3kgKEkgaG9uZXN0bHkgZG9uJ3Qga25vdyBob3cvaWYgdGhpcyBldmVyIHdvcmtl ZCksIHRoZW4gZ2l2ZSBpdCBhIGtyZWYKPiBhbmQgcmV0dXJuIGl0LiBOb3cgdGhhdCB3ZSB1c2Ug a3JlZl9nZXRfdW5sZXNzX3plcm8oKSwgd2UgaGF2ZSB0byBkZWFsIHdpdGgKPiB0aGUgZmFjdCB0 aGF0IHRoZSBrcmVmIGNvdWxkIGZhaWwsIHdoaWNoIHdvdWxkIGhhcHBlbiBpZiB3ZSBqdXN0IHJl dHJpZXZlZCBhCj4gcGFyZW50IG1zdGIgb3IgcG9ydCB0aGF0IGlzIGFsc28gZGlzY29ubmVjdGVk IGZyb20gdGhlIHRvcG9sb2d5LiBTbywgdGhlIG9ubHkKPiB3YXkgdG8gZG8gdGhhdCBpcyB0byBm aW5kIHdoYXQgd2UgdGhpbmsgaXMgdGhlIGxhc3QgY29ubmVjdGVkIG1zdGIsIGNoZWNrIGlmCj4g aXQgYWN0dWFsbHkgaXMsIHRoZW4gcmVzdGFydCB0aGUgc2VhcmNoIGZyb20gdGhhdCBtc3RiIGlm IHRoZSBrcmVmIGZhaWxlZCBhbmQKPiBpdCdzIG5vdCBjb25uZWN0ZWQgdG8gdGhlIHRvcG9sb2d5 Lgo+IAo+IFRoYXQgYmVpbmcgc2FpZCwgSSd2ZSBiZWVuIHdvbmRlcmluZyBhYm91dCBmaWd1cmlu ZyBvdXQgc3BvdHMgbGlrZSB0aGlzIHdoZXJlCj4gd2UgcHJvYmFibHkgYWxzbyBuZWVkIHRvIGZv bGxvdyB0aGF0IHVwIHdpdGggImFsc28gbWFrZSBzdXJlIGFsbCBvZiB0aGUKPiBwYXJlbnRzIG9m IHRoaXMgJ2Nvbm5lY3RlZCcgdG9wb2xvZ3kgZGV2aWNlIGFyZSBhbHNvIHZhbGlkIiwgc2luY2Ug aXQncyBxdWl0ZQo+IHBvc3NpYmxlIHdlIGNvdWxkIHJ1biBpbnRvIGEgc2NlbmFyaW8gbGlrZSB0 aGlzOgo+IAo+IFN0ZXAgMToKPiBNU1RCIDEKPiAgIHwtIFBvcnQgMQo+ICAgfC0gUG9ydCAyCj4g ICB8LSBQb3J0IDMKPiAgICAgIHwtIE1TVEIgMiDihpAgKGp1c3QgdW5wbHVnZ2VkLCB0b3AgcmVm Y291bnQgPT0gMCkKPiAgICAgICAgIHwtIFBvcnQgNCDihpAgKGFsc28gdW5wbHVnZ2VkLCBidXQg dG9wIHJlZmNvdW50IG5vdCB1cGRhdGVkIHlldCkKPiAgICAgICAgIHwtIFBvcnQgNSDihpAgKHNh bWUgdGhpbmcgXikKPiAgICAgICAgIHwtIFBvcnQgNiDihpAgKHNhbWUgdGhpbmcgXikKPiAgICAg ICAgICAgIHwtIE1TVEIgMwo+ICAgICAgICAgICAgICAgfC0gUG9ydCA3Cj4gICAgICAgICAgICAg ICB8LSBQb3J0IDgKPiAgICAgICAgICAgICAgIHwtIFBvcnQgOQo+ICAgICAgICAgICAgICAgICAg Xgo+ICAgICAgIGRybV9kcF9nZXRfbGFzdF9jb25uZWN0ZWRfcG9ydF90b19tc3RiKCkKPiAgICAg ICB0cmF2ZWxzIHVwIHRvIFBvcnQgNiwgYXNzdW1lcyBQb3J0IDYgaXMgdmFsaWQgYmVjYXVzZSBp dCdzIHRvcCByZWZjb3VudAo+ICAgICAgICE9IDAKPiAKPiBOb3cgdGhhdCBJIHR5cGUgYWxsIG9m IHRoYXQgb3V0IHRob3VnaCwgSSB0aGluayB3ZSBjb3VsZCBhbHNvIGZpeCB0aGF0IGZhaXJseQo+ IGVhc2lseSBieSBpbnN0ZWFkIGp1c3QgYWRkaW5nIGEgdG9wb2xvZ3lfc3RhdGUgbXV0ZXgsIGFu ZCBhZGRpbmcgYSB2YXJpYWJsZSB0bwo+IGRlbm90ZSB3aGV0aGVyIG9yIG5vdCBhIHBvcnQgaXMg YWN0dWFsbHkgc3RpbGwgcGFydCBvZiBhIHRvcG9sb2d5Lgo+IAo+IE1heWJlIHRoYXQgYWxzbyBt ZWFucyB3ZSBzaG91bGQgY29tZSB1cCB3aXRoIGEgZGlmZmVyZW50IG5hbWUgZm9yCj4gdG9wb2xv Z3lfcmVmY291bnQsIHJlc291cmNlX3JlZmNvdW50IG1heWJlPwoKSG0uIEZpeGluZyByZWZjb3Vu dGluZy9saWZldGltZSBpc3N1ZXMgd2l0aCBsb2NraW5nIGlzIGltZSBhIGJhZCBpZGVhLgpJJ20g YWxzbyBub3Qgc3VyZSB3ZSBmdW5kYW1lbnRhbGx5IG5lZWQgdG8gZml4IHRoaXMsIHNpbmNlIGV2 ZW4gaWYgd2UgbWFrZQp0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gcmFjZS1mcmVlLCB0aGUg cmVhbCB3b3JsZCBjYW4gc3RpbGwgZ2V0CnVucGx1Z2dlZCB3aGVuZXZlciBpdCBmZWVscyBsaWtl LiBTbyBmdW5kYW1lbnRhbGx5IHRoZSBwYXlsb2FkX3NlbmRfbXNnCmZ1bmN0aW9uIG5lZWRzIHRv IGJlIGFibGUgdG8gZGVhbCB3aXRoIHJhY2VzLgoKU28gbm90IHN1cmUgd2hldGhlciAob3Igd2h5 KSB3ZSBuZWVkIHlvdXIgY2hhbmdlIGhlcmUuCgpDYW4gd2UgaW5zdGVhZCBqdXN0IGZhaWwgaWYg d2UndmUgcmFjZWQgYW5kIGdpdmUgdXA/IE5vdCBzdXJlIHdoeSB3ZSBuZWVkCnRvIHNlbmQgb3V0 IHRoZSBtZXNzYWdlIHN0aWxsIGlmIHRoZSByZWNpcGllbnQgaXMgZ29uZSAuLi4KLURhbmllbAoK PiA+IAo+IAo+ID4gPiArb3V0Ogo+ID4gPiAgCW11dGV4X3VubG9jaygmbWdyLT5sb2NrKTsKPiA+ ID4gIAlyZXR1cm4gcm1zdGI7Cj4gPiA+ICB9Cj4gPiA+IEBAIC0xNzI2LDE3ICsxOTkxLDE5IEBA IHN0YXRpYyBpbnQgZHJtX2RwX3BheWxvYWRfc2VuZF9tc2coc3RydWN0Cj4gPiA+IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ICAJdTggc2lua3NbRFJNX0RQX01BWF9TRFBfU1RS RUFNU107Cj4gPiA+ICAJaW50IGk7Cj4gPiA+ICAKPiA+ID4gLQlwb3J0ID0gZHJtX2RwX2dldF92 YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsKPiA+ID4gKwlwb3J0ID0gZHJtX2RwX21zdF90 b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQobWdyLCBwb3J0KTsKPiA+ID4gIAlpZiAoIXBvcnQp Cj4gPiA+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4gPiAgCj4gPiA+ICAJcG9ydF9udW0gPSBwb3J0 LT5wb3J0X251bTsKPiA+ID4gLQltc3RiID0gZHJtX2RwX2dldF92YWxpZGF0ZWRfbXN0Yl9yZWYo bWdyLCBwb3J0LT5wYXJlbnQpOwo+ID4gPiArCW1zdGIgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dl dF9tc3RiX3ZhbGlkYXRlZChtZ3IsIHBvcnQtPnBhcmVudCk7Cj4gPiA+ICAJaWYgKCFtc3RiKSB7 Cj4gPiA+IC0JCW1zdGIgPSBkcm1fZHBfZ2V0X2xhc3RfY29ubmVjdGVkX3BvcnRfYW5kX21zdGIo bWdyLCBwb3J0LQo+ID4gPiA+cGFyZW50LCAmcG9ydF9udW0pOwo+ID4gPiArCQltc3RiID0gZHJt X2RwX2dldF9sYXN0X2Nvbm5lY3RlZF9wb3J0X2FuZF9tc3RiKG1nciwKPiA+ID4gKwkJCQkJCQkg ICAgICAgcG9ydC0+cGFyZW50LAo+ID4gPiArCQkJCQkJCSAgICAgICAmcG9ydF9udW0pOwo+ID4g PiAgCj4gPiA+ICAJCWlmICghbXN0Yikgewo+ID4gPiAtCQkJZHJtX2RwX3B1dF9wb3J0KHBvcnQp Owo+ID4gPiArCQkJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsKPiA+ID4gIAkJ CXJldHVybiAtRUlOVkFMOwo+ID4gPiAgCQl9Cj4gPiA+ICAJfQo+ID4gPiBAQCAtMTc2Niw4ICsy MDMzLDggQEAgc3RhdGljIGludCBkcm1fZHBfcGF5bG9hZF9zZW5kX21zZyhzdHJ1Y3QKPiA+ID4g ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4gIAl9Cj4gPiA+ICAJa2ZyZWUodHht c2cpOwo+ID4gPiAgZmFpbF9wdXQ6Cj4gPiA+IC0JZHJtX2RwX3B1dF9tc3RfYnJhbmNoX2Rldmlj ZShtc3RiKTsKPiA+ID4gLQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ICsJZHJtX2RwX21z dF90b3BvbG9neV9wdXRfbXN0Yihtc3RiKTsKPiA+ID4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1 dF9wb3J0KHBvcnQpOwo+ID4gPiAgCXJldHVybiByZXQ7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4g QEAgLTE3NzcsMTMgKzIwNDQsMTMgQEAgaW50IGRybV9kcF9zZW5kX3Bvd2VyX3VwZG93bl9waHko c3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ICAJc3RydWN0 IGRybV9kcF9zaWRlYmFuZF9tc2dfdHggKnR4bXNnOwo+ID4gPiAgCWludCBsZW4sIHJldDsKPiA+ ID4gIAo+ID4gPiAtCXBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBv cnQpOwo+ID4gPiArCXBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRl ZChtZ3IsIHBvcnQpOwo+ID4gPiAgCWlmICghcG9ydCkKPiA+ID4gIAkJcmV0dXJuIC1FSU5WQUw7 Cj4gPiA+ICAKPiA+ID4gIAl0eG1zZyA9IGt6YWxsb2Moc2l6ZW9mKCp0eG1zZyksIEdGUF9LRVJO RUwpOwo+ID4gPiAgCWlmICghdHhtc2cpIHsKPiA+ID4gLQkJZHJtX2RwX3B1dF9wb3J0KHBvcnQp Owo+ID4gPiArCQlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOwo+ID4gPiAgCQly ZXR1cm4gLUVOT01FTTsKPiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gQEAgLTE3OTksNyArMjA2Niw3 IEBAIGludCBkcm1fZHBfc2VuZF9wb3dlcl91cGRvd25fcGh5KHN0cnVjdAo+ID4gPiBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiAgCQkJcmV0ID0gMDsKPiA+ID4gIAl9Cj4gPiA+ ICAJa2ZyZWUodHhtc2cpOwo+ID4gPiAtCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiA+ID4gKwlk cm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOwo+ID4gPiAgCj4gPiA+ICAJcmV0dXJu IHJldDsKPiA+ID4gIH0KPiA+ID4gQEAgLTE4ODgsNyArMjE1NSw4IEBAIGludCBkcm1fZHBfdXBk YXRlX3BheWxvYWRfcGFydDEoc3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICpt Z3IpCj4gPiA+ICAJCWlmICh2Y3BpKSB7Cj4gPiA+ICAJCQlwb3J0ID0gY29udGFpbmVyX29mKHZj cGksIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQsCj4gPiA+ICAJCQkJCSAgICB2Y3BpKTsKPiA+ID4g LQkJCXBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQpOwo+ID4g PiArCQkJcG9ydCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnRfdmFsaWRhdGVkKG1nciwK PiA+ID4gKwkJCQkJCQkJICAgICAgcG9ydCk7Cj4gPiA+ICAJCQlpZiAoIXBvcnQpIHsKPiA+ID4g IAkJCQltdXRleF91bmxvY2soJm1nci0+cGF5bG9hZF9sb2NrKTsKPiA+ID4gIAkJCQlyZXR1cm4g LUVJTlZBTDsKPiA+ID4gQEAgLTE5MjUsNyArMjE5Myw3IEBAIGludCBkcm1fZHBfdXBkYXRlX3Bh eWxvYWRfcGFydDEoc3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpCj4g PiA+ICAJCWN1cl9zbG90cyArPSByZXFfcGF5bG9hZC5udW1fc2xvdHM7Cj4gPiA+ICAKPiA+ID4g IAkJaWYgKHBvcnQpCj4gPiA+IC0JCQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ICsJCQlk cm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOwo+ID4gPiAgCX0KPiA+ID4gIAo+ID4g PiAgCWZvciAoaSA9IDA7IGkgPCBtZ3ItPm1heF9wYXlsb2FkczsgaSsrKSB7Cj4gPiA+IEBAIC0y MDI0LDcgKzIyOTIsNyBAQCBzdGF0aWMgaW50IGRybV9kcF9zZW5kX2RwY2Rfd3JpdGUoc3RydWN0 Cj4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ICAJc3RydWN0IGRybV9k cF9zaWRlYmFuZF9tc2dfdHggKnR4bXNnOwo+ID4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5j aCAqbXN0YjsKPiA+ID4gIAo+ID4gPiAtCW1zdGIgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9tc3Ri X3JlZihtZ3IsIHBvcnQtPnBhcmVudCk7Cj4gPiA+ICsJbXN0YiA9IGRybV9kcF9tc3RfdG9wb2xv Z3lfZ2V0X21zdGJfdmFsaWRhdGVkKG1nciwgcG9ydC0+cGFyZW50KTsKPiA+ID4gIAlpZiAoIW1z dGIpCj4gPiA+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4gPiAgCj4gPiA+IEBAIC0yMDQ4LDcgKzIz MTYsNyBAQCBzdGF0aWMgaW50IGRybV9kcF9zZW5kX2RwY2Rfd3JpdGUoc3RydWN0Cj4gPiA+IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ICAJfQo+ID4gPiAgCWtmcmVlKHR4bXNn KTsKPiA+ID4gIGZhaWxfcHV0Ogo+ID4gPiAtCWRybV9kcF9wdXRfbXN0X2JyYW5jaF9kZXZpY2Uo bXN0Yik7Cj4gPiA+ICsJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfbXN0Yihtc3RiKTsKPiA+ID4g IAlyZXR1cm4gcmV0Owo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+IEBAIC0yMTU4LDcgKzI0MjYsNyBA QCBpbnQgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Jfc2V0X21zdChzdHJ1Y3QKPiA+ID4gZHJtX2Rw X21zdF90b3BvbG9neV9tZ3IgKm1nciwgYm9vbCBtcwo+ID4gPiAgCj4gPiA+ICAJCS8qIGdpdmUg dGhpcyB0aGUgbWFpbiByZWZlcmVuY2UgKi8KPiA+ID4gIAkJbWdyLT5tc3RfcHJpbWFyeSA9IG1z dGI7Cj4gPiA+IC0JCWtyZWZfZ2V0KCZtZ3ItPm1zdF9wcmltYXJ5LT5rcmVmKTsKPiA+ID4gKwkJ ZHJtX2RwX21zdF90b3BvbG9neV9yZWZfbXN0YihtZ3ItPm1zdF9wcmltYXJ5KTsKPiA+ID4gIAo+ ID4gPiAgCQlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZWIobWdyLT5hdXgsIERQX01TVE1fQ1RSTCwK PiA+ID4gIAkJCQkJCQkgRFBfTVNUX0VOIHwKPiA+ID4gRFBfVVBfUkVRX0VOIHwgRFBfVVBTVFJF QU1fSVNfU1JDKTsKPiA+ID4gQEAgLTIxOTIsNyArMjQ2MCw3IEBAIGludCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21ncl9zZXRfbXN0KHN0cnVjdAo+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAq bWdyLCBib29sIG1zCj4gPiA+ICBvdXRfdW5sb2NrOgo+ID4gPiAgCW11dGV4X3VubG9jaygmbWdy LT5sb2NrKTsKPiA+ID4gIAlpZiAobXN0YikKPiA+ID4gLQkJZHJtX2RwX3B1dF9tc3RfYnJhbmNo X2RldmljZShtc3RiKTsKPiA+ID4gKwkJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfbXN0Yihtc3Ri KTsKPiA+ID4gIAlyZXR1cm4gcmV0Owo+ID4gPiAgCj4gPiA+ICB9Cj4gPiA+IEBAIC0yMzU3LDcg KzI2MjUsNyBAQCBzdGF0aWMgaW50IGRybV9kcF9tc3RfaGFuZGxlX2Rvd25fcmVwKHN0cnVjdAo+ ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKQo+ID4gPiAgCQkJICAgICAgIG1nci0+ ZG93bl9yZXBfcmVjdi5pbml0aWFsX2hkci5sY3QsCj4gPiA+ICAJCQkJICAgICAgbWdyLT5kb3du X3JlcF9yZWN2LmluaXRpYWxfaGRyLnJhZFswXSwKPiA+ID4gIAkJCQkgICAgICBtZ3ItPmRvd25f cmVwX3JlY3YubXNnWzBdKTsKPiA+ID4gLQkJCWRybV9kcF9wdXRfbXN0X2JyYW5jaF9kZXZpY2Uo bXN0Yik7Cj4gPiA+ICsJCQlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3RiKG1zdGIpOwo+ID4g PiAgCQkJbWVtc2V0KCZtZ3ItPmRvd25fcmVwX3JlY3YsIDAsIHNpemVvZihzdHJ1Y3QKPiA+ID4g ZHJtX2RwX3NpZGViYW5kX21zZ19yeCkpOwo+ID4gPiAgCQkJcmV0dXJuIDA7Cj4gPiA+ICAJCX0K PiA+ID4gQEAgLTIzNjgsNyArMjYzNiw3IEBAIHN0YXRpYyBpbnQgZHJtX2RwX21zdF9oYW5kbGVf ZG93bl9yZXAoc3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpCj4gPiA+ ICAJCX0KPiA+ID4gIAo+ID4gPiAgCQltZW1zZXQoJm1nci0+ZG93bl9yZXBfcmVjdiwgMCwgc2l6 ZW9mKHN0cnVjdAo+ID4gPiBkcm1fZHBfc2lkZWJhbmRfbXNnX3J4KSk7Cj4gPiA+IC0JCWRybV9k cF9wdXRfbXN0X2JyYW5jaF9kZXZpY2UobXN0Yik7Cj4gPiA+ICsJCWRybV9kcF9tc3RfdG9wb2xv Z3lfcHV0X21zdGIobXN0Yik7Cj4gPiA+ICAKPiA+ID4gIAkJbXV0ZXhfbG9jaygmbWdyLT5xbG9j ayk7Cj4gPiA+ICAJCXR4bXNnLT5zdGF0ZSA9IERSTV9EUF9TSURFQkFORF9UWF9SWDsKPiA+ID4g QEAgLTI0NDEsNyArMjcwOSw3IEBAIHN0YXRpYyBpbnQgZHJtX2RwX21zdF9oYW5kbGVfdXBfcmVx KHN0cnVjdAo+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKQo+ID4gPiAgCQl9Cj4g PiA+ICAKPiA+ID4gIAkJaWYgKG1zdGIpCj4gPiA+IC0JCQlkcm1fZHBfcHV0X21zdF9icmFuY2hf ZGV2aWNlKG1zdGIpOwo+ID4gPiArCQkJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfbXN0Yihtc3Ri KTsKPiA+ID4gIAo+ID4gPiAgCQltZW1zZXQoJm1nci0+dXBfcmVxX3JlY3YsIDAsIHNpemVvZihz dHJ1Y3QKPiA+ID4gZHJtX2RwX3NpZGViYW5kX21zZ19yeCkpOwo+ID4gPiAgCX0KPiA+ID4gQEAg LTI1MDEsNyArMjc2OSw3IEBAIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKPiA+ID4gZHJtX2Rw X21zdF9kZXRlY3RfcG9ydChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yCj4gPiA+ICAJ ZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nv bm5lY3RlZDsKPiA+ID4gIAo+ID4gPiAgCS8qIHdlIG5lZWQgdG8gc2VhcmNoIGZvciB0aGUgcG9y dCBpbiB0aGUgbWdyIGluIGNhc2UgaXRzIGdvbmUgKi8KPiA+ID4gLQlwb3J0ID0gZHJtX2RwX2dl dF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsKPiA+ID4gKwlwb3J0ID0gZHJtX2RwX21z dF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQobWdyLCBwb3J0KTsKPiA+ID4gIAlpZiAoIXBv cnQpCj4gPiA+ICAJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiA+ID4g IAo+ID4gPiBAQCAtMjUyNiw3ICsyNzk0LDcgQEAgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwo+ ID4gPiBkcm1fZHBfbXN0X2RldGVjdF9wb3J0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IKPiA+ID4gIAkJYnJlYWs7Cj4gPiA+ICAJfQo+ID4gPiAgb3V0Ogo+ID4gPiAtCWRybV9kcF9w dXRfcG9ydChwb3J0KTsKPiA+ID4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQp Owo+ID4gPiAgCXJldHVybiBzdGF0dXM7Cj4gPiA+ICB9Cj4gPiA+ICBFWFBPUlRfU1lNQk9MKGRy bV9kcF9tc3RfZGV0ZWN0X3BvcnQpOwo+ID4gPiBAQCAtMjU0MywxMSArMjgxMSwxMSBAQCBib29s IGRybV9kcF9tc3RfcG9ydF9oYXNfYXVkaW8oc3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyICptZ3IsCj4gPiA+ICB7Cj4gPiA+ICAJYm9vbCByZXQgPSBmYWxzZTsKPiA+ID4gIAo+ ID4gPiAtCXBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQpOwo+ ID4gPiArCXBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRlZChtZ3Is IHBvcnQpOwo+ID4gPiAgCWlmICghcG9ydCkKPiA+ID4gIAkJcmV0dXJuIHJldDsKPiA+ID4gIAly ZXQgPSBwb3J0LT5oYXNfYXVkaW87Cj4gPiA+IC0JZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4g PiArCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ICAJcmV0dXJuIHJl dDsKPiA+ID4gIH0KPiA+ID4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9wb3J0X2hhc19hdWRp byk7Cj4gPiA+IEBAIC0yNTY3LDcgKzI4MzUsNyBAQCBzdHJ1Y3QgZWRpZCAqZHJtX2RwX21zdF9n ZXRfZWRpZChzdHJ1Y3QKPiA+ID4gZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHJt X2RwXwo+ID4gPiAgCXN0cnVjdCBlZGlkICplZGlkID0gTlVMTDsKPiA+ID4gIAo+ID4gPiAgCS8q IHdlIG5lZWQgdG8gc2VhcmNoIGZvciB0aGUgcG9ydCBpbiB0aGUgbWdyIGluIGNhc2UgaXRzIGdv bmUgKi8KPiA+ID4gLQlwb3J0ID0gZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBw b3J0KTsKPiA+ID4gKwlwb3J0ID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0 ZWQobWdyLCBwb3J0KTsKPiA+ID4gIAlpZiAoIXBvcnQpCj4gPiA+ICAJCXJldHVybiBOVUxMOwo+ ID4gPiAgCj4gPiA+IEBAIC0yNTc4LDcgKzI4NDYsNyBAQCBzdHJ1Y3QgZWRpZCAqZHJtX2RwX21z dF9nZXRfZWRpZChzdHJ1Y3QKPiA+ID4gZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3Qg ZHJtX2RwXwo+ID4gPiAgCQlkcm1fY29ubmVjdG9yX3NldF90aWxlX3Byb3BlcnR5KGNvbm5lY3Rv cik7Cj4gPiA+ICAJfQo+ID4gPiAgCXBvcnQtPmhhc19hdWRpbyA9IGRybV9kZXRlY3RfbW9uaXRv cl9hdWRpbyhlZGlkKTsKPiA+ID4gLQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ICsJZHJt X2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsKPiA+ID4gIAlyZXR1cm4gZWRpZDsKPiA+ ID4gIH0KPiA+ID4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9nZXRfZWRpZCk7Cj4gPiA+IEBA IC0yNjQ5LDcgKzI5MTcsNyBAQCBpbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3Ry dWN0Cj4gPiA+IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiAgCWlmIChJU19FUlIodG9w b2xvZ3lfc3RhdGUpKQo+ID4gPiAgCQlyZXR1cm4gUFRSX0VSUih0b3BvbG9neV9zdGF0ZSk7Cj4g PiA+ICAKPiA+ID4gLQlwb3J0ID0gZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBw b3J0KTsKPiA+ID4gKwlwb3J0ID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0 ZWQobWdyLCBwb3J0KTsKPiA+ID4gIAlpZiAocG9ydCA9PSBOVUxMKQo+ID4gPiAgCQlyZXR1cm4g LUVJTlZBTDsKPiA+ID4gIAlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCBtZ3ItPnBibl9k aXYpOwo+ID4gPiBAQCAtMjY1NywxNCArMjkyNSwxNCBAQCBpbnQgZHJtX2RwX2F0b21pY19maW5k X3ZjcGlfc2xvdHMoc3RydWN0Cj4gPiA+IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiAg CQkJcmVxX3Nsb3RzLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ID4gPiAgCj4gPiA+ ICAJaWYgKHJlcV9zbG90cyA+IHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cykgewo+ID4gPiAt CQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ICsJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0 X3BvcnQocG9ydCk7Cj4gPiA+ICAJCXJldHVybiAtRU5PU1BDOwo+ID4gPiAgCX0KPiA+ID4gIAo+ ID4gPiAgCXRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyAtPSByZXFfc2xvdHM7Cj4gPiA+ICAJ RFJNX0RFQlVHX0tNUygidmNwaSBzbG90cyBhdmFpbD0lZCIsIHRvcG9sb2d5X3N0YXRlLT5hdmFp bF9zbG90cyk7Cj4gPiA+ICAKPiA+ID4gLQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ICsJ ZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsKPiA+ID4gIAlyZXR1cm4gcmVxX3Ns b3RzOwo+ID4gPiAgfQo+ID4gPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdmNw aV9zbG90cyk7Cj4gPiA+IEBAIC0yNzE1LDcgKzI5ODMsNyBAQCBib29sIGRybV9kcF9tc3RfYWxs b2NhdGVfdmNwaShzdHJ1Y3QKPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ ID4gIHsKPiA+ID4gIAlpbnQgcmV0Owo+ID4gPiAgCj4gPiA+IC0JcG9ydCA9IGRybV9kcF9nZXRf dmFsaWRhdGVkX3BvcnRfcmVmKG1nciwgcG9ydCk7Cj4gPiA+ICsJcG9ydCA9IGRybV9kcF9tc3Rf dG9wb2xvZ3lfZ2V0X3BvcnRfdmFsaWRhdGVkKG1nciwgcG9ydCk7Cj4gPiA+ICAJaWYgKCFwb3J0 KQo+ID4gPiAgCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICAKPiA+ID4gQEAgLTI3MjUsNyArMjk5Myw3 IEBAIGJvb2wgZHJtX2RwX21zdF9hbGxvY2F0ZV92Y3BpKHN0cnVjdAo+ID4gPiBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiAgCWlmIChwb3J0LT52Y3BpLnZjcGkgPiAwKSB7Cj4g PiA+ICAJCURSTV9ERUJVR19LTVMoInBheWxvYWQ6IHZjcGkgJWQgYWxyZWFkeSBhbGxvY2F0ZWQg Zm9yIHBibiAlZCAtCj4gPiA+IHJlcXVlc3RlZCBwYm4gJWRcbiIsIHBvcnQtPnZjcGkudmNwaSwg cG9ydC0+dmNwaS5wYm4sIHBibik7Cj4gPiA+ICAJCWlmIChwYm4gPT0gcG9ydC0+dmNwaS5wYm4p IHsKPiA+ID4gLQkJCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiA+ID4gKwkJCWRybV9kcF9tc3Rf dG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ICAJCQlyZXR1cm4gdHJ1ZTsKPiA+ID4gIAkJ fQo+ID4gPiAgCX0KPiA+ID4gQEAgLTI3MzMsMTMgKzMwMDEsMTMgQEAgYm9vbCBkcm1fZHBfbXN0 X2FsbG9jYXRlX3ZjcGkoc3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3Is Cj4gPiA+ICAJcmV0ID0gZHJtX2RwX2luaXRfdmNwaShtZ3IsICZwb3J0LT52Y3BpLCBwYm4sIHNs b3RzKTsKPiA+ID4gIAlpZiAocmV0KSB7Cj4gPiA+ICAJCURSTV9ERUJVR19LTVMoImZhaWxlZCB0 byBpbml0IHZjcGkgc2xvdHM9JWQgbWF4PTYzIHJldD0lZFxuIiwKPiA+ID4gLQkJCQlESVZfUk9V TkRfVVAocGJuLCBtZ3ItPnBibl9kaXYpLCByZXQpOwo+ID4gPiArCQkJICAgICAgRElWX1JPVU5E X1VQKHBibiwgbWdyLT5wYm5fZGl2KSwgcmV0KTsKPiA+ID4gIAkJZ290byBvdXQ7Cj4gPiA+ICAJ fQo+ID4gPiAgCURSTV9ERUJVR19LTVMoImluaXRpbmcgdmNwaSBmb3IgcGJuPSVkIHNsb3RzPSVk XG4iLAo+ID4gPiAtCQkJcGJuLCBwb3J0LT52Y3BpLm51bV9zbG90cyk7Cj4gPiA+ICsJCSAgICAg IHBibiwgcG9ydC0+dmNwaS5udW1fc2xvdHMpOwo+ID4gPiAgCj4gPiA+IC0JZHJtX2RwX3B1dF9w b3J0KHBvcnQpOwo+ID4gPiArCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4g PiA+ICAJcmV0dXJuIHRydWU7Cj4gPiA+ICBvdXQ6Cj4gPiA+ICAJcmV0dXJuIGZhbHNlOwo+ID4g PiBAQCAtMjc0OSwxMiArMzAxNywxMiBAQCBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfYWxsb2Nh dGVfdmNwaSk7Cj4gPiA+ICBpbnQgZHJtX2RwX21zdF9nZXRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwgc3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfcG9ydCAq cG9ydCkKPiA+ID4gIHsKPiA+ID4gIAlpbnQgc2xvdHMgPSAwOwo+ID4gPiAtCXBvcnQgPSBkcm1f ZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQpOwo+ID4gPiArCXBvcnQgPSBkcm1f ZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRlZChtZ3IsIHBvcnQpOwo+ID4gPiAgCWlm ICghcG9ydCkKPiA+ID4gIAkJcmV0dXJuIHNsb3RzOwo+ID4gPiAgCj4gPiA+ICAJc2xvdHMgPSBw b3J0LT52Y3BpLm51bV9zbG90czsKPiA+ID4gLQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ ICsJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsKPiA+ID4gIAlyZXR1cm4gc2xv dHM7Cj4gPiA+ICB9Cj4gPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfZ2V0X3ZjcGlfc2xv dHMpOwo+ID4gPiBAQCAtMjc2OCwxMSArMzAzNiwxMSBAQCBFWFBPUlRfU1lNQk9MKGRybV9kcF9t c3RfZ2V0X3ZjcGlfc2xvdHMpOwo+ID4gPiAgICovCj4gPiA+ICB2b2lkIGRybV9kcF9tc3RfcmVz ZXRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4g c3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKPiA+ID4gIHsKPiA+ID4gLQlwb3J0ID0gZHJt X2RwX2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsKPiA+ID4gKwlwb3J0ID0gZHJt X2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQobWdyLCBwb3J0KTsKPiA+ID4gIAlp ZiAoIXBvcnQpCj4gPiA+ICAJCXJldHVybjsKPiA+ID4gIAlwb3J0LT52Y3BpLm51bV9zbG90cyA9 IDA7Cj4gPiA+IC0JZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4gPiArCWRybV9kcF9tc3RfdG9w b2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ICB9Cj4gPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9k cF9tc3RfcmVzZXRfdmNwaV9zbG90cyk7Cj4gPiA+ICAKPiA+ID4gQEAgLTI3ODEsOSArMzA0OSwx MCBAQCBFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfcmVzZXRfdmNwaV9zbG90cyk7Cj4gPiA+ICAg KiBAbWdyOiBtYW5hZ2VyIGZvciB0aGlzIHBvcnQKPiA+ID4gICAqIEBwb3J0OiB1bnZlcmlmaWVk IHBvcnQgdG8gZGVhbGxvY2F0ZSB2Y3BpIGZvcgo+ID4gPiAgICovCj4gPiA+IC12b2lkIGRybV9k cF9tc3RfZGVhbGxvY2F0ZV92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LAo+ID4gPiBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQo+ID4gPiArdm9pZCBkcm1fZHBf bXN0X2RlYWxsb2NhdGVfdmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwK PiA+ID4gKwkJCQlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQo+ID4gPiAgewo+ID4gPiAt CXBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQpOwo+ID4gPiAr CXBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRlZChtZ3IsIHBvcnQp Owo+ID4gPiAgCWlmICghcG9ydCkKPiA+ID4gIAkJcmV0dXJuOwo+ID4gPiAgCj4gPiA+IEBAIC0y NzkyLDcgKzMwNjEsNyBAQCB2b2lkIGRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3BpKHN0cnVjdAo+ ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLCBzdHJ1Y3QgZHJtXwo+ID4gPiAgCXBv cnQtPnZjcGkucGJuID0gMDsKPiA+ID4gIAlwb3J0LT52Y3BpLmFsaWduZWRfcGJuID0gMDsKPiA+ ID4gIAlwb3J0LT52Y3BpLnZjcGkgPSAwOwo+ID4gPiAtCWRybV9kcF9wdXRfcG9ydChwb3J0KTsK PiA+ID4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOwo+ID4gPiAgfQo+ID4g PiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2RlYWxsb2NhdGVfdmNwaSk7Cj4gPiA+ICAKPiA+ ID4gQEAgLTMwNzgsOCArMzM0NywxMCBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfdHhfd29yayhzdHJ1 Y3Qgd29ya19zdHJ1Y3QKPiA+ID4gKndvcmspCj4gPiA+ICAKPiA+ID4gIHN0YXRpYyB2b2lkIGRy bV9kcF9mcmVlX21zdF9wb3J0KHN0cnVjdCBrcmVmICprcmVmKQo+ID4gPiAgewo+ID4gPiAtCXN0 cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0Cj4g PiA+IGRybV9kcF9tc3RfcG9ydCwga3JlZik7Cj4gPiA+IC0Ja3JlZl9wdXQoJnBvcnQtPnBhcmVu dC0+a3JlZiwgZHJtX2RwX2ZyZWVfbXN0X2JyYW5jaF9kZXZpY2UpOwo+ID4gPiArCXN0cnVjdCBk cm1fZHBfbXN0X3BvcnQgKnBvcnQgPQo+ID4gPiArCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0 IGRybV9kcF9tc3RfcG9ydCwgbWFsbG9jX2tyZWYpOwo+ID4gPiArCj4gPiA+ICsJZHJtX2RwX21z dF9wdXRfbXN0Yl9tYWxsb2MocG9ydC0+cGFyZW50KTsKPiA+ID4gIAlrZnJlZShwb3J0KTsKPiA+ ID4gIH0KPiA+ID4gIAo+ID4gPiBAQCAtMzEwMyw3ICszMzc0LDYgQEAgc3RhdGljIHZvaWQgZHJt X2RwX2Rlc3Ryb3lfY29ubmVjdG9yX3dvcmsoc3RydWN0Cj4gPiA+IHdvcmtfc3RydWN0ICp3b3Jr KQo+ID4gPiAgCQlsaXN0X2RlbCgmcG9ydC0+bmV4dCk7Cj4gPiA+ICAJCW11dGV4X3VubG9jaygm bWdyLT5kZXN0cm95X2Nvbm5lY3Rvcl9sb2NrKTsKPiA+ID4gIAo+ID4gPiAtCQlrcmVmX2luaXQo JnBvcnQtPmtyZWYpOwo+ID4gPiAgCQlJTklUX0xJU1RfSEVBRCgmcG9ydC0+bmV4dCk7Cj4gPiA+ ICAKPiA+ID4gIAkJbWdyLT5jYnMtPmRlc3Ryb3lfY29ubmVjdG9yKG1nciwgcG9ydC0+Y29ubmVj dG9yKTsKPiA+ID4gQEAgLTMxMTcsNyArMzM4Nyw3IEBAIHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0 cm95X2Nvbm5lY3Rvcl93b3JrKHN0cnVjdAo+ID4gPiB3b3JrX3N0cnVjdCAqd29yaykKPiA+ID4g IAkJCWRybV9kcF9tc3RfcHV0X3BheWxvYWRfaWQobWdyLCBwb3J0LT52Y3BpLnZjcGkpOwo+ID4g PiAgCQl9Cj4gPiA+ICAKPiA+ID4gLQkJa3JlZl9wdXQoJnBvcnQtPmtyZWYsIGRybV9kcF9mcmVl X21zdF9wb3J0KTsKPiA+ID4gKwkJZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2MocG9ydCk7Cj4g PiA+ICAJCXNlbmRfaG90cGx1ZyA9IHRydWU7Cj4gPiA+ICAJfQo+ID4gPiAgCWlmIChzZW5kX2hv dHBsdWcpCj4gPiA+IEBAIC0zMjkyLDcgKzM1NjIsNyBAQCBzdGF0aWMgaW50IGRybV9kcF9tc3Rf aTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyCj4gPiA+ICphZGFwdGVyLCBzdHJ1Y3QgaTJjX21z ZyAqbXNncwo+ID4gPiAgCXN0cnVjdCBkcm1fZHBfc2lkZWJhbmRfbXNnX3R4ICp0eG1zZyA9IE5V TEw7Cj4gPiA+ICAJaW50IHJldDsKPiA+ID4gIAo+ID4gPiAtCW1zdGIgPSBkcm1fZHBfZ2V0X3Zh bGlkYXRlZF9tc3RiX3JlZihtZ3IsIHBvcnQtPnBhcmVudCk7Cj4gPiA+ICsJbXN0YiA9IGRybV9k cF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGJfdmFsaWRhdGVkKG1nciwgcG9ydC0+cGFyZW50KTsKPiA+ ID4gIAlpZiAoIW1zdGIpCj4gPiA+ICAJCXJldHVybiAtRVJFTU9URUlPOwo+ID4gPiAgCj4gPiA+ IEBAIC0zMzQyLDcgKzM2MTIsNyBAQCBzdGF0aWMgaW50IGRybV9kcF9tc3RfaTJjX3hmZXIoc3Ry dWN0IGkyY19hZGFwdGVyCj4gPiA+ICphZGFwdGVyLCBzdHJ1Y3QgaTJjX21zZyAqbXNncwo+ID4g PiAgCX0KPiA+ID4gIG91dDoKPiA+ID4gIAlrZnJlZSh0eG1zZyk7Cj4gPiA+IC0JZHJtX2RwX3B1 dF9tc3RfYnJhbmNoX2RldmljZShtc3RiKTsKPiA+ID4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1 dF9tc3RiKG1zdGIpOwo+ID4gPiAgCXJldHVybiByZXQ7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiA+ID4gYi9pbmNs dWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gPiA+IGluZGV4IDM3MWNjMjgxNjQ3Ny4uNTA2 NDNhMzk3NjVkIDEwMDY0NAo+ID4gPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBl ci5oCj4gPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiA+ID4gQEAg LTQ0LDcgKzQ0LDEwIEBAIHN0cnVjdCBkcm1fZHBfdmNwaSB7Cj4gPiA+ICAKPiA+ID4gIC8qKgo+ ID4gPiAgICogc3RydWN0IGRybV9kcF9tc3RfcG9ydCAtIE1TVCBwb3J0Cj4gPiA+IC0gKiBAa3Jl ZjogcmVmZXJlbmNlIGNvdW50IGZvciB0aGlzIHBvcnQuCj4gPiA+ICsgKiBAdG9wb2xvZ3lfa3Jl ZjogcmVmY291bnQgZm9yIHRoaXMgcG9ydCdzIGxpZmV0aW1lIGluIHRoZSB0b3BvbG9neSwKPiA+ ID4gb25seSB0aGUKPiA+ID4gKyAqIERQIE1TVCBoZWxwZXJzIHNob3VsZCBuZWVkIHRvIHRvdWNo IHRoaXMKPiA+ID4gKyAqIEBtYWxsb2Nfa3JlZjogcmVmY291bnQgZm9yIHRoZSBtZW1vcnkgYWxs b2NhdGlvbiBjb250YWluaW5nIHRoaXMKPiA+ID4gc3RydWN0dXJlLgo+ID4gPiArICogU2VlIGRy bV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKCkgYW5kIGRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9j KCkuCj4gPiA+ICAgKiBAcG9ydF9udW06IHBvcnQgbnVtYmVyCj4gPiA+ICAgKiBAaW5wdXQ6IGlm IHRoaXMgcG9ydCBpcyBhbiBpbnB1dCBwb3J0Lgo+ID4gPiAgICogQG1jczogbWVzc2FnZSBjYXBh YmlsaXR5IHN0YXR1cyAtIERQIDEuMiBzcGVjLgo+ID4gPiBAQCAtNjcsNyArNzAsOCBAQCBzdHJ1 Y3QgZHJtX2RwX3ZjcGkgewo+ID4gPiAgICogaW4gdGhlIE1TVCB0b3BvbG9neS4KPiA+ID4gICAq Lwo+ID4gPiAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCB7Cj4gPiA+IC0Jc3RydWN0IGtyZWYga3Jl ZjsKPiA+ID4gKwlzdHJ1Y3Qga3JlZiB0b3BvbG9neV9rcmVmOwo+ID4gPiArCXN0cnVjdCBrcmVm IG1hbGxvY19rcmVmOwo+ID4gCj4gPiBJJ2QgdG8gaW5saW5lIG1lbWJlciBrZXJuZWxkb2MgaGVy ZSAoeW91IGNhbiBtaXgmbWF0Y2gsIHNvIG5vIG5lZWQgdG8KPiA+IHJld3JpdGUgdGhlbSBhbGwp IGFuZCBzcGVuZCBhIGZldyB3b3JkcyByZWZlcmVuY2UgdGhlIGZhbWlseSBvZiBnZXQvcHV0Cj4g PiBmdW5jdGlvbnMuIFNhbWUgZm9yIG1zdGIgYmVsb3cuCj4gPiAKPiA+ID4gIAo+ID4gPiAgCXU4 IHBvcnRfbnVtOwo+ID4gPiAgCWJvb2wgaW5wdXQ7Cj4gPiA+IEBAIC0xMDIsNyArMTA2LDEwIEBA IHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgewo+ID4gPiAgCj4gPiA+ICAvKioKPiA+ID4gICAqIHN0 cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAtIE1TVCBicmFuY2ggZGV2aWNlLgo+ID4gPiAtICogQGty ZWY6IHJlZmVyZW5jZSBjb3VudCBmb3IgdGhpcyBwb3J0Lgo+ID4gPiArICogQHRvcG9sb2d5X2ty ZWY6IHJlZmNvdW50IGZvciB0aGlzIGJyYW5jaCBkZXZpY2UncyBsaWZldGltZSBpbiB0aGUKPiA+ ID4gdG9wb2xvZ3ksCj4gPiA+ICsgKiBvbmx5IHRoZSBEUCBNU1QgaGVscGVycyBzaG91bGQgbmVl ZCB0byB0b3VjaCB0aGlzCj4gPiA+ICsgKiBAbWFsbG9jX2tyZWY6IHJlZmNvdW50IGZvciB0aGUg bWVtb3J5IGFsbG9jYXRpb24gY29udGFpbmluZyB0aGlzCj4gPiA+IHN0cnVjdHVyZS4KPiA+ID4g KyAqIFNlZSBkcm1fZHBfbXN0X2dldF9tc3RiX21hbGxvYygpIGFuZCBkcm1fZHBfbXN0X3B1dF9t c3RiX21hbGxvYygpLgo+ID4gPiAgICogQHJhZDogUmVsYXRpdmUgQWRkcmVzcyB0byB0YWxrIHRv IHRoaXMgYnJhbmNoIGRldmljZS4KPiA+ID4gICAqIEBsY3Q6IExpbmsgY291bnQgdG90YWwgdG8g dGFsayB0byB0aGlzIGJyYW5jaCBkZXZpY2UuCj4gPiA+ICAgKiBAbnVtX3BvcnRzOiBudW1iZXIg b2YgcG9ydHMgb24gdGhlIGJyYW5jaC4KPiA+ID4gQEAgLTEyMSw3ICsxMjgsOCBAQCBzdHJ1Y3Qg ZHJtX2RwX21zdF9wb3J0IHsKPiA+ID4gICAqIHRvIGRvd25zdHJlYW0gcG9ydCBvZiBwYXJlbnQg YnJhbmNoZXMuCj4gPiA+ICAgKi8KPiA+ID4gIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCB7Cj4g PiA+IC0Jc3RydWN0IGtyZWYga3JlZjsKPiA+ID4gKwlzdHJ1Y3Qga3JlZiB0b3BvbG9neV9rcmVm Owo+ID4gPiArCXN0cnVjdCBrcmVmIG1hbGxvY19rcmVmOwo+ID4gPiAgCXU4IHJhZFs4XTsKPiA+ ID4gIAl1OCBsY3Q7Cj4gPiA+ICAJaW50IG51bV9wb3J0czsKPiA+ID4gQEAgLTYyNiw0ICs2MzQs NyBAQCBpbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0Cj4gPiA+IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiAgaW50IGRybV9kcF9zZW5kX3Bvd2VyX3VwZG93 bl9waHkoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ICAJCQkJIHN0 cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGJvb2wgcG93ZXJfdXApOwo+ID4gPiAgCj4gPiA+ ICt2b2lkIGRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQg KnBvcnQpOwo+ID4gPiArdm9pZCBkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0ICpwb3J0KTsKPiA+ID4gKwo+ID4gPiAgI2VuZGlmCj4gPiA+IC0tIAo+ID4g PiAyLjE5LjIKPiA+IAo+ID4gSSByZWFsbHkgbGlrZS4gTW9zdGx5IGNvbmNlbnRyYXRlZCBvbiBs b29raW5nIGF0IHRoZSBkb2NzLiBBbHNvIHN0aWxsCj4gPiBuZWVkIHRvIGFwcGx5IGl0IGFuZCBi dWlsZCB0aGUgZG9jcywgc28gSSBjYW4gYXBwcmVjaWF0ZSB0aGUgRE9UIGdyYXBocy4KPiA+IC1E YW5pZWwKPiAtLSAKPiBDaGVlcnMsCj4gCUx5dWRlIFBhdWwKPiAKCi0tIApEYW5pZWwgVmV0dGVy ClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5j aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4 IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK