From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH v6 3/6] drm/dp_mst: Start tracking per-port VCPI allocations Date: Tue, 27 Nov 2018 12:48:59 -0500 Message-ID: <8fe9a5708b2cafc74635688848ee082e54f739d5.camel@redhat.com> References: <20181116005008.7243-1-lyude@redhat.com> <20181116005008.7243-4-lyude@redhat.com> <20181126210421.GQ4266@phenom.ffwll.local> <20181126212250.GS4266@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181126212250.GS4266-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Daniel Vetter Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyMDE4LTExLTI2IGF0IDIyOjIyICswMTAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ IE9uIE1vbiwgTm92IDI2LCAyMDE4IGF0IDEwOjA0OjIxUE0gKzAxMDAsIERhbmllbCBWZXR0ZXIg d3JvdGU6Cj4gPiBPbiBUaHUsIE5vdiAxNSwgMjAxOCBhdCAwNzo1MDowNVBNIC0wNTAwLCBMeXVk ZSBQYXVsIHdyb3RlOgo+ID4gPiBUaGVyZSBoYXMgYmVlbiBhIFRPRE8gd2FpdGluZyBmb3IgcXVp dGUgYSBsb25nIHRpbWUgaW4KPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neS5jOgo+ID4gPiAKPiA+ ID4gCS8qIFdlIGNhbm5vdCByZWx5IG9uIHBvcnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQo+ ID4gPiAJICogdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzIGFzIHRoZSBwb3J0IG1heSBub3Qg ZXhpc3QgaWYgdGhlIHBhcmVudAo+ID4gPiAJICogYnJhbmNoIGRldmljZSB3YXMgdW5wbHVnZ2Vk LiBUaGlzIHNob3VsZCBiZSBmaXhlZCBieSB0cmFja2luZwo+ID4gPiAJICogcGVyLXBvcnQgc2xv dCBhbGxvY2F0aW9uIGluIGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgaW5zdGVhZCBvZgo+ID4g PiAJICogZGVwZW5kaW5nIG9uIHRoZSBjYWxsZXIgdG8gdGVsbCB1cyBob3cgbWFueSBzbG90cyB0 byByZWxlYXNlLgo+ID4gPiAJICovCj4gPiA+IAo+ID4gPiBUaGF0J3Mgbm90IHRoZSBvbmx5IHJl YXNvbiB3ZSBzaG91bGQgZml4IHRoaXM6IGZvcmNpbmcgdGhlIGRyaXZlciB0bwo+ID4gPiB0cmFj ayB0aGUgVkNQSSBhbGxvY2F0aW9ucyB0aHJvdWdob3V0IGEgc3RhdGUncyBhdG9taWMgY2hlY2sg aXMKPiA+ID4gZXJyb3IgcHJvbmUsIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBleHRyYSBjYXJlIGhh cyB0byBiZSB0YWtlbiB3aXRoIHRoZQo+ID4gPiBvcmRlciB0aGF0IGRybV9kcF9hdG9taWNfZmlu ZF92Y3BpX3Nsb3RzKCkgYW5kCj4gPiA+IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3Rz KCkgYXJlIGNhbGxlZCBpbiBpbiBvcmRlciB0byBlbnN1cmUKPiA+ID4gaWRlbXBvdGVuY3kuIEN1 cnJlbnRseSB0aGUgb25seSBkcml2ZXIgYWN0dWFsbHkgdXNpbmcgdGhlc2UgaGVscGVycywKPiA+ ID4gaTkxNSwgZG9lc24ndCBldmVuIGRvIHRoaXMgY29ycmVjdGx5OiBtdWx0aXBsZSAtPmJlc3Rf ZW5jb2RlcigpIGNoZWNrcwo+ID4gPiB3aXRoIGk5MTUncyBjdXJyZW50IGltcGxlbWVudGF0aW9u IHdvdWxkIG5vdCBiZSBpZGVtcG90ZW50IGFuZCB3b3VsZAo+ID4gPiBvdmVyLWFsbG9jYXRlIFZD UEkgc2xvdHMsIHNvbWV0aGluZyBJIGxlYXJuZWQgdHJ5aW5nIHRvIGltcGxlbWVudAo+ID4gPiBm YWxsYmFjayByZXRyYWluaW5nIGluIE1TVC4KPiA+ID4gCj4gPiA+IFNvOiBzaW1wbGlmeSB0aGlz IHdob2xlIG1lc3MsIGFuZCB0ZWFjaCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4g PiA+IGFuZCBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIHRvIHRyYWNrIHRoZSBW Q1BJIGFsbG9jYXRpb25zIGZvcgo+ID4gPiBlYWNoIHBvcnQuIFRoaXMgYWxsb3dzIHVzIHRvIGVu c3VyZSBpZGVtcG90ZW5jeSB3aXRob3V0IGhhdmluZyB0byByZWx5Cj4gPiA+IG9uIHRoZSBkcml2 ZXIgYXMgbXVjaC4gQWRkaXRpb25hbGx5OiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0byBkbyBh bnkKPiA+ID4ga2luZCBvZiBWQ1BJIHNsb3QgdHJhY2tpbmcgYW55bW9yZSBpZiBpdCBkb2Vzbid0 IG5lZWQgaXQgZm9yIGl0J3Mgb3duCj4gPiA+IGludGVybmFsIHN0YXRlLgo+ID4gPiAKPiA+ID4g QWRkaXRpb25hbGx5OyB0aGlzIGFkZHMgYSBuZXcgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKSBo ZWxwZXIgd2hpY2gKPiA+ID4gbXVzdCBiZSB1c2VkIGJ5IGF0b21pYyBkcml2ZXJzIHRvIHBlcmZv cm0gdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgbmV3Cj4gPiA+IFZDUEkgYWxsb2NhdGlvbnMgaW5j dXJyZWQgYnkgYSBzdGF0ZS4KPiA+ID4gCj4gPiA+IEFsc286IHVwZGF0ZSB0aGUgZG9jdW1lbnRh dGlvbiBhbmQgbWFrZSBpdCBtb3JlIG9idmlvdXMgdGhhdCB0aGVzZQo+ID4gPiAvbXVzdC8gYmUg Y2FsbGVkIGJ5IC9hbGwvIGF0b21pYyBkcml2ZXJzIHN1cHBvcnRpbmcgTVNULgo+ID4gPiAKPiA+ ID4gQ2hhbmdlcyBzaW5jZSB2NjoKPiA+ID4gIC0gS2VlcCBhIGtyZWYgdG8gYWxsIG9mIHRoZSBw b3J0cyB3ZSBoYXZlIGFsbG9jYXRpb25zIG9uLiBUaGlzIHJlcXVpcmVkCj4gPiA+ICAgIGEgZ29v ZCBiaXQgb2YgY2hhbmdpbmcgdG8gd2hlbiB3ZSBjYWxsIGRybV9kcF9maW5kX3ZjcGlfc2xvdHMo KSwKPiA+ID4gICAgbWFpbmx5IHRoYXQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBvbmx5IHJl ZG8gVkNQSSBhbGxvY2F0aW9ucyBvbgo+ID4gPiAgICBhY3R1YWwgbW9kZSBvciBDUlRDIGNoYW5n ZXMsIG5vdCBjcnRjX3N0YXRlLT5hY3RpdmUgY2hhbmdlcy4KPiA+ID4gICAgQWRkaXRpb25hbGx5 LCB3ZSBubyBsb25nZXIgdGFrZSB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBEUk0gY29ubmVjdG9y Cj4gPiA+ICAgIGZvciBlYWNoIHBvcnQgaW50byBhY2NvdW50IGJlY2F1c2Ugc28gbG9uZyBhcyB3 ZSBoYXZlIGEga3JlZiB0byB0aGUKPiA+ID4gICAgcG9ydCBpbiB0aGUgbmV3IG9yIHByZXZpb3Vz IGF0b21pYyBzdGF0ZSwgdGhlIGNvbm5lY3RvciB3aWxsIHN0YXkKPiA+ID4gICAgcmVnaXN0ZXJl ZC4KPiA+IAo+ID4gSSB3cml0ZSBhbiBlbnRpcmUgcGlsZSBvZiBzbWFsbCBuaXRwaXRzIChzdGls bCBpbmNsdWRlZCBtb3N0IG9mIHRoZW0KPiA+IGJlbG93KSwgdW50aWwgSSByZWFsaXplZCB0aGlz IGhlcmUgd29udCB3b3JrLiBEZWxheWluZyB0aGUgY2FsbCB0byBkZXN0cm95Cj4gPiB0aGUgY29u bmVjdG9yICh3ZWxsLCB1bnJlZ2lzdGVyIGl0IHJlYWxseSkgd3JlYWtzIHRoZSBkZXNpZ24gd2Un dmUgY29tZSB1cAo+ID4gd2l0aCB0aHVzIGZhciwgcmVzdWx0aW5nIGluIG1vc3Qgb2YgbXkgY29t bWVudHMgaGVyZS4KPiA+IAo+ID4gSW5zdGVhZCwgYWxsIHdlIG5lZWQgdG8gZG8gaXMgZGVsYXkg dGhlIGtmcmVlKHBvcnQpIGF0IHRoZSBib3R0b20gb2YKPiA+IGRybV9kcF9kZXN0cm95X3BvcnQo KS4gVGhlIHZjcGkgYWxsb2NhdGlvbiBzdHJ1Y3R1cmUgX29ubHlfIG5lZWRzIHRoZQo+ID4gcG9p bnRlciB2YWx1ZSB0byBzdGF5IHZhbGlkLCBhcyBhIGxvb2t1cCBrZXkuIEl0IGRvZXNuJ3QgY2Fy ZSBhdCBhbGwgYWJvdXQKPiA+IGFueXRoaW5nIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGVyZS4gU28g dGhlIG9ubHkgdGhpbmcgd2UgbmVlZCB0byBkZWxheSBpcwo+ID4gdGhlIGtmcmVlLiBJIHRoaW5r IHRoZSBzaW1wbGVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIGFkZCBhIDJuZCBrcmVmCj4g PiAocG9ydC0+a2ZyZWVfcmVmIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQpLCB3aXRoIG9uIHJlZmVy ZW5jZSBoZWxkIGJ5IHRoZQo+ID4gcG9ydCBpdHNlbGYgKHJlbGVhc2VkIGluIGRybV9kcF9kZXN0 cm95X3BvcnQpLCBhbmQgdGhlIG90aGVyIG9uZSBoZWxkCj4gPiBhcy1uZWVkZWQgYnkgdGhlIHZj cGkgYWxsb2NhdGlvbiBsaXN0cy4KPiA+IAo+ID4gSSB0aGluayBpZiB3ZSBnbyB3aXRoIHRoaXMg ZGVzaWduIGluc3RlYWQgb2YgcmV0cm9maXR0aW5nIGEgc2VtYW50aWMKPiA+IGNoYW5nZSBvZiB0 aGUgcG9ydCBsaWZldGltZSBpdHNlbGYsIGFsbCB0aGUgY29tcGxpY2F0aW9ucyBJIGNvbXBsYWlu IGFib3V0Cj4gPiBiZWxvdyBzaG91bGQgZGlzYXBwZWFyLgo+IAo+IEluIHRoZSBhYm92ZSBJIG1l YW50IGRybV9kcF9kZXN0cm95X3BvcnQgb3IgZHJtX2RwX2Rlc3Ryb3lfY29ubmVjdG9yX3dvcmsu Cj4gCj4gQXNpZGU6IEkgdGhpbmsgY3JlYXRpbmcgYSBrcmVmIGZvciB0aGUgZmluYWwga2ZyZWUg d291bGQgYWxzbyBzb2x2ZSBhCj4gYnVuY2ggb2Ygb3RoZXIgaXNzdWVzIGluIGEgbXVjaCBuZWF0 ZXIgd2F5OiBJbgo+IAo+IGNvbW1pdCBmMDM4YzViOTlmYzEzMzJmNTU4YjQ5NWQxMzZkNGY0MzNl ZTY1Y2FhCj4gQXV0aG9yOiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPgo+IERhdGU6ICAg VHVlIE5vdiAxMyAxNzo0NjoxNCAyMDE4IC0wNTAwCj4gCj4gICAgIGRybS9kcF9tc3Q6IFNraXAg dmFsaWRhdGluZyBwb3J0cyBkdXJpbmcgZGVzdHJ1Y3Rpb24sIGp1c3QgcmVmCj4gCj4gd2UgY291 bGQgdXNlIHRoYXQga2ZyZWUgcmVmZXJlbmNlIHRvIG1ha2Ugc3VyZSB0aGUgcG9ydCBwb2ludGVy IGlzIGFsaXZlLgo+IFRoaXMgb2YgY291cnNlIG1lYW5zIHRoYXQgZHJtX2RwX3VwZGF0ZV9wYXls b2FkX3BhcnQxKCkgd291bGQgYWxzbyBuZWVkIHRvCj4gdXNlIHRoZSBrZnJlZSByZWZlcmVuY2Ug Zm9yIHRoZSB2Y3BpIGFsbG9jYXRpb25zLiBBbmQgcHJvYmFibHkgZXZlcnl3aGVyZQo+IGVsc2Ug KGUuZy4gaW4geW91ciBub3V2ZWF1IHNlcmllcyBmb3IgcGF5bG9hZCBpbmZvcm1hdGlvbikuCj4g Cj4gVGhhdCB3b3VsZCBnaXZlIHVzIGEgdmVyeSBjbGVhciBzZXBhcmF0aW9uIG92ZXJhbGwgYmV0 d2VlbiAicG9ydCBjYW4gc3RpbGwKPiBiZSB1c2VkIGJlY2F1c2UgaXQncyBub3QgeWV0IHVucGx1 Z2dlZCIgdnMuICJwb3J0IG9ubHkgaGFuZ3MgYXJvdW5kCj4gYmVjYXVzZSBhIGJ1bmNoIG9mIHZj cGkgYWxsb2NhdGlvbnMgYW5kIG90aGVyIHBheWxvYWQgdGhpbmdzIHVwc3RyZWFtIG9mCj4gdGhl IHBvcnQgbWlnaHQgc3RpbGwgbmVlZCB0aGUgcG9ydCBsb29rdXAga2V5IHRvIGZyZWUgcmVzb3Vy Y2VzIi4gSW5zdGVhZAo+IG9mIGFnYWluIHNwcmlua2xpbmcgY29tcGxpY2F0ZWQgY29uZGl0aW9u cyBhbmQgbWFnaWMgdHJpY2tzIGFsbCBvdmVyIHRoZQo+IGNvZGUgdG8gZmlndXJlIG91dCB3aGV0 aGUgd2Ugc2hvdWxkIGFsbG93IHRoZSBnZXRfdmFsaWRhdGVfcG9ydCB0byBzdWNjZWVkCj4gb3Ig bm90LCBvciB0aGUgbW9kZXNldCB0byBzdWNjZWVkIG9yIG5vdC4KCm1obSwgSSd2ZSBiZWVuIGV4 cGVyaW1lbnRpbmcgd2l0aCB0aGlzIGFuZCBJIHRoaW5rIEkgYWdyZWUgdGhpcyBpcyBkZWZpbml0 ZWx5CnRoZSByaWdodCBzb2x1dGlvbiB0byBnbyB3aXRoLiBJdCdsbCBlbmQgdXAgZGVjb21wbGlj YXRpbmcgYSBsb3Qgb2YgdGhpcyA6KQo+IC1EYW5pZWwKPiAKPiA+IFBpbGVzIG9mIGNvbW1lbnRz IGJlbG93Lgo+ID4gCj4gPiBDaGVlcnMsIERhbmllbAo+ID4gCj4gPiA+ICAtIFVzZSB0aGUgc21h bGwgY2hhbmdlcyB0byBkcm1fZHBfcHV0X3BvcnQoKSB0byBhZGQgZXZlbiBtb3JlIGVycm9yCj4g PiA+ICAgIGNoZWNraW5nIHRvIG1ha2UgbWlzdXNhZ2Ugb2YgdGhlIGhlbHBlcnMgbW9yZSBvYnZp b3VzLiBJIGFkZGVkIHRoaXMKPiA+ID4gICAgYWZ0ZXIgaGF2aW5nIHRvIGNoYXNlIGRvd24gdmFy aW91cyB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHRoYXQKPiA+ID4gICAgc3RhcnRlZCBwb3Bw aW5nIHVwIGZyb20gdGhlIG5ldyBoZWxwZXJzIHNvIG5vIG9uZSBlbHNlIGhhcyB0bwo+ID4gPiAg ICB0cm91Ymxlc2hvb3QgdGhhdC4KPiA+ID4gIC0gTW92ZSBzb21lIGFjY2lkZW50YWwgRFJNX0RF QlVHX0tNUygpIGNhbGxzIHRvIERSTV9ERUJVR19BVE9NSUMoKQo+ID4gPiAgLSBVcGRhdGUgZG9j dW1lbnRhdGlvbiBhZ2Fpbiwgbm90ZSB0aGF0IGZpbmQvcmVsZWFzZSgpIHNob3VsZCBib3RoIG5v dAo+ID4gPiBiZQo+ID4gPiAgICBjYWxsZWQgb24gdGhlIHNhbWUgcG9ydCBpbiBhIHNpbmdsZSBh dG9taWMgY2hlY2sgcGhhc2UgKGJ1dCBtdWx0aXBsZQo+ID4gPiAgICBjYWxscyB0byBvbmUgb3Ig dGhlIG90aGVyIGlzIE9LKQo+ID4gPiAKPiA+ID4gQ2hhbmdlcyBzaW5jZSB2NDoKPiA+ID4gIC0g RG9uJ3Qgc2tpcCB0aGUgYXRvbWljIGNoZWNrcyBmb3IgVkNQSSBhbGxvY2F0aW9ucyBpZiBubyBu ZXcgVkNQSQo+ID4gPiAgICBhbGxvY2F0aW9ucyBoYXBwZW4gaW4gYSBzdGF0ZS4gVGhpcyBtYWtl cyB0aGUgbmV4dCBjaGFuZ2UgSSdtIGFib3V0Cj4gPiA+ICAgIHRvIGxpc3QgaGVyZSBhIGxvdCBl YXNpZXIgdG8gaW1wbGVtZW50Lgo+ID4gPiAgLSBEb24ndCBpZ25vcmUgVkNQSSBhbGxvY2F0aW9u cyBvbiBkZXN0cm95ZWQgcG9ydHMsIGluc3RlYWQgZW5zdXJlIHRoYXQKPiA+ID4gICAgd2hlbiBw b3J0cyBhcmUgZGVzdHJveWVkIGFuZCBzdGlsbCBoYXZlIFZDUEkgYWxsb2NhdGlvbnMgaW4gdGhl Cj4gPiA+ICAgIHRvcG9sb2d5IHN0YXRlLCB0aGUgb25seSBzdGF0ZSBjaGFuZ2VzIGFsbG93ZWQg YXJlIHJlbGVhc2luZyBzYWlkCj4gPiA+ICAgIHBvcnRzJyBWQ1BJLiBUaGlzIHByZXZlbnRzIGEg c3RhdGUgd2l0aCBhIG1peCBvZiBWQ1BJIGFsbG9jYXRpb25zCj4gPiA+ICAgIGZyb20gZGVzdHJv eWVkIHBvcnRzLCBhbmQgYWxsb2NhdGlvbnMgZnJvbSB2YWxpZCBwb3J0cy4KPiA+ID4gCj4gPiA+ IENoYW5nZXMgc2luY2UgdjM6Cj4gPiA+ICAtIERvbid0IHJlbGVhc2UgVkNQSSBhbGxvY2F0aW9u cyBpbiB0aGUgdG9wb2xvZ3kgc3RhdGUgaW1tZWRpYXRlbHkgaW4KPiA+ID4gICAgZHJtX2RwX2F0 b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSwgaW5zdGVhZCBtYXJrIHRoZW0gYXMgMCBhbmQgc2tp cAo+ID4gPiAgICBvdmVyIHRoZW0gaW4gZHJtX2RwX21zdF9kdXBsaWNhdGVfc3RhdGUoKS4gVGhp cyBtYWtlcyBpdCBzbwo+ID4gPiAgICBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygp IGlzIHN0aWxsIGlkZW1wb3RlbnQgd2hpbGUgYWxzbwo+ID4gPiAgICB0aHJvd2luZyB3YXJuaW5n cyBpZiB0aGUgZHJpdmVyIG1lc3NlcyB1cCBpdCdzIGJvb2sga2VlcGluZyBhbmQgdHJpZXMKPiA+ ID4gICAgdG8gcmVsZWFzZSBWQ1BJIHNsb3RzIG9uIGEgcG9ydCB0aGF0IGRvZXNuJ3QgaGF2ZSBh bnkgcHJlLWV4aXN0aW5nCj4gPiA+ICAgIFZDUEkgYWxsb2NhdGlvbiAtIGRhbnZldAo+ID4gPiAg LSBDaGFuZ2UgbXN0X3N0YXRlL3N0YXRlIGluIHNvbWUgZGVidWdnaW5nIG1lc3NhZ2VzIHRvICJt c3Qgc3RhdGUiCj4gPiA+IAo+ID4gPiBDaGFuZ2VzIHNpbmNlIHYyOgo+ID4gPiAgLSBVc2Uga21l bWR1cCgpIGZvciBkdXBsaWNhdGluZyBNU1Qgc3RhdGUgLSBkYW52ZXQKPiA+ID4gIC0gTW92ZSBw b3J0IHZhbGlkYXRpb24gb3V0IG9mIGR1cGxpY2F0ZSBzdGF0ZSBjYWxsYmFjayAtIGRhbnZldAo+ ID4gPiAgLSBIYW5kbGUgbG9vcGluZyB0aHJvdWdoIE1TVCB0b3BvbG9neSBzdGF0ZXMgaW4KPiA+ ID4gICAgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKSBzbyB0aGUgZHJpdmVyIGRvZXNuJ3QgaGF2 ZSB0byBkbyBpdAo+ID4gPiAgLSBGaXggZG9jdW1lbnRhdGlvbiBpbiBkcm1fZHBfYXRvbWljX2Zp bmRfdmNwaV9zbG90cygpCj4gPiA+ICAtIE1vdmUgdGhlIGF0b21pYyBjaGVjayBmb3IgZWFjaCBp bmRpdmlkdWFsIHRvcG9sb2d5IHN0YXRlIGludG8gaXQncwo+ID4gPiAgICBvd24gZnVuY3Rpb24s IHJlZHVjZXMgaW5kZW50aW5nCj4gPiA+ICAtIERvbid0IGNvbnNpZGVyICJzdGFsZSIgTVNUIHBv cnRzIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGJhbmR3aWR0aAo+ID4gPiAgICByZXF1aXJlbWVudHMu IFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb3JpZ2luYWxseSB3ZSByZWxpZWQgb24gdGhlCj4gPiA+ ICAgIHN0YXRlIGR1cGxpY2F0aW9uIGZ1bmN0aW9ucyB0byBwcnVuZSBhbnkgc3RhbGUgcG9ydHMg ZnJvbSB0aGUgbmV3Cj4gPiA+ICAgIHN0YXRlLCB3aGljaCB3b3VsZCBwcmV2ZW50IHVzIGZyb20g aW5jb3JyZWN0bHkgY29uc2lkZXJpbmcgdGhlaXIKPiA+ID4gICAgYmFuZHdpZHRoIHJlcXVpcmVt ZW50cyBhbG9uZ3NpZGUgbGVnaXRpbWF0ZSBuZXcgcGF5bG9hZHMuCj4gPiA+ICAtIEFkZCBmdW5j dGlvbiByZWZlcmVuY2VzIGluIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgLQo+ ID4gPiBkYW52ZXQKPiA+ID4gIC0gQW5ub3RhdGUgYXRvbWljIFZDUEkgYW5kIGF0b21pYyBjaGVj ayBmdW5jdGlvbnMgd2l0aCBfX211c3RfY2hlY2sKPiA+ID4gICAgLSBkYW52ZXQKPiA+ID4gCj4g PiA+IENoYW5nZXMgc2luY2UgdjE6Cj4gPiA+ICAtIERvbid0IHVzZSB0aGUgbm93LXJlbW92ZWQg LT5hdG9taWNfY2hlY2soKSBmb3IgcHJpdmF0ZSBvYmplY3RzIGhvb2ssCj4gPiA+ICAgIGp1c3Qg Z2l2ZSBkcml2ZXJzIGEgZnVuY3Rpb24gdG8gY2FsbCB0aGVtc2VsdmVzCj4gPiA+IAo+ID4gPiBT aWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPgo+ID4gPiBDYzogRGFu aWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiA+ID4gLS0tCj4gPiA+ICBkcml2 ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jIHwgMjk0ICsrKysrKysrKysrKysrKysr KysrKysrLS0tCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgIHwg ICA0ICsKPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jICAgfCAgNjQg KysrLS0tCj4gPiA+ICBpbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgIDI0 ICsrLQo+ID4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAzMTkgaW5zZXJ0aW9ucygrKSwgNjcgZGVsZXRp b25zKC0pCj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9t c3RfdG9wb2xvZ3kuYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5 LmMKPiA+ID4gaW5kZXggMDBmYmU3YTI2OTlkLi4xODNkMGU4MzJjZWQgMTAwNjQ0Cj4gPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ID4gPiBAQCAtMjYxNywyMSArMjYx Nyw0MiBAQCBzdGF0aWMgaW50IGRybV9kcF9pbml0X3ZjcGkoc3RydWN0Cj4gPiA+IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gIC8qKgo+ID4gPiAt ICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQgYW5kIGFkZCB2Y3BpIHNs b3RzIHRvIHRoZQo+ID4gPiBzdGF0ZQo+ID4gPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlf c2xvdHMoKSAtIEZpbmQgYW5kIGFkZCBWQ1BJIHNsb3RzIHRvIHRoZQo+ID4gPiBzdGF0ZQo+ID4g PiAgICogQHN0YXRlOiBnbG9iYWwgYXRvbWljIHN0YXRlCj4gPiA+ICAgKiBAbWdyOiBNU1QgdG9w b2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQKPiA+ID4gICAqIEBwb3J0OiBwb3J0IHRvIGZpbmQg dmNwaSBzbG90cyBmb3IKPiA+ID4gICAqIEBwYm46IGJhbmR3aWR0aCByZXF1aXJlZCBmb3IgdGhl IG1vZGUgaW4gUEJOCj4gPiA+ICAgKgo+ID4gPiAtICogUkVUVVJOUzoKPiA+ID4gLSAqIFRvdGFs IHNsb3RzIGluIHRoZSBhdG9taWMgc3RhdGUgYXNzaWduZWQgZm9yIHRoaXMgcG9ydCBvciBlcnJv cgo+ID4gPiArICogQWxsb2NhdGVzIFZDUEkgc2xvdHMgdG8gQHBvcnQsIHJlcGxhY2luZyBhbnkg cHJldmlvdXMgVkNQSQo+ID4gPiBhbGxvY2F0aW9ucyBpdAo+ID4gPiArICogbWF5IGhhdmUgaGFk LiBBbnkgYXRvbWljIGRyaXZlcnMgd2hpY2ggc3VwcG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMKPiA+ ID4gZnVuY3Rpb24KPiA+ID4gKyAqIGluIHRoZWlyICZkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3Mu YXRvbWljX2NoZWNrKCkgY2FsbGJhY2sgdG8gY2hhbmdlCj4gPiA+IHRoZQo+ID4gPiArICogY3Vy cmVudCBWQ1BJIGFsbG9jYXRpb24gZm9yIHRoZSBuZXcgc3RhdGUsIGJ1dCBvbmx5IHdoZW4KPiA+ ID4gKyAqICZkcm1fY3J0Y19zdGF0ZS5tb2RlX2NoYW5nZWQgb3IgJmRybV9jcnRjX3N0YXRlLmNv bm5lY3RvcnNfY2hhbmdlZAo+ID4gPiBpcyBzZXQKPiA+ID4gKyAqIHRvIGVuc3VyZSBjb21wYXRp YmlsaXR5IHdpdGggdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyB0aGF0IHN0aWxsIHVzZQo+ID4gPiB0 aGUKPiA+ID4gKyAqIGxlZ2FjeSBtb2Rlc2V0dGluZyBVQVBJLgo+ID4gPiArICoKPiA+ID4gKyAq IEFsbG9jYXRpb25zIHNldCBieSB0aGlzIGZ1bmN0aW9uIGFyZSBub3QgY2hlY2tlZCBhZ2FpbnN0 IHRoZQo+ID4gPiBiYW5kd2lkdGgKPiA+ID4gKyAqIHJlc3RyYWludHMgb2YgQG1nciB1bnRpbCB0 aGUgZHJpdmVyIGNhbGxzIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkuCj4gPiA+ICsgKgo+ID4g PiArICogQWRkaXRpb25hbGx5LCBpdCBpcyBPSyB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlw bGUgdGltZXMgb24gdGhlCj4gPiA+IHNhbWUKPiA+ID4gKyAqIEBwb3J0IGFzIG5lZWRlZC4gSXQg aXMgbm90IE9LIGhvd2V2ZXIsIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhbmQKPiA+ID4gKyAqIGRy bV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgaW4gdGhlIHNhbWUgYXRvbWljIGNoZWNr IHBoYXNlLgo+ID4gPiArICoKPiA+ID4gKyAqIFNlZSBhbHNvOgo+ID4gPiArICogZHJtX2RwX2F0 b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKQo+ID4gPiArICogZHJtX2RwX21zdF9hdG9taWNfY2hl Y2soKQo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ICsgKiBUb3RhbCBzbG90cyBp biB0aGUgYXRvbWljIHN0YXRlIGFzc2lnbmVkIGZvciB0aGlzIHBvcnQsIG9yIGEKPiA+ID4gbmVn YXRpdmUgZXJyb3IKPiA+ID4gKyAqIGNvZGUgaWYgdGhlIHBvcnQgbm8gbG9uZ2VyIGV4aXN0cwo+ ID4gPiAgICovCj4gPiA+ICBpbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiAgCQkJCSAgc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ICAJCQkJICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpw b3J0LCBpbnQgcGJuKQo+ID4gPiAgewo+ID4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlICp0b3BvbG9neV9zdGF0ZTsKPiA+ID4gLQlpbnQgcmVxX3Nsb3RzOwo+ID4gPiArCXN0 cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uICpwb3MsICp2Y3BpID0gTlVMTDsKPiA+ID4gKwlp bnQgcHJldl9zbG90cywgcmVxX3Nsb3RzLCByZXQ7Cj4gPiA+ICAKPiA+ID4gIAl0b3BvbG9neV9z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbWdyKTsKPiA+ ID4gIAlpZiAoSVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkKPiA+ID4gQEAgLTI2NDAsMjAgKzI2NjEs NjAgQEAgaW50IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdAo+ID4gPiBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ID4gIAlwb3J0ID0gZHJtX2RwX2dldF92YWxpZGF0ZWRf cG9ydF9yZWYobWdyLCBwb3J0KTsKPiA+ID4gIAlpZiAocG9ydCA9PSBOVUxMKQo+ID4gPiAgCQly ZXR1cm4gLUVJTlZBTDsKPiA+ID4gLQlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCBtZ3It PnBibl9kaXYpOwo+ID4gPiAtCURSTV9ERUJVR19LTVMoInZjcGkgc2xvdHMgcmVxPSVkLCBhdmFp bD0lZFxuIiwKPiA+ID4gLQkJCXJlcV9zbG90cywgdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3Rz KTsKPiA+ID4gIAo+ID4gPiAtCWlmIChyZXFfc2xvdHMgPiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxf c2xvdHMpIHsKPiA+ID4gLQkJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4gPiAtCQlyZXR1cm4g LUVOT1NQQzsKPiA+ID4gKwl0b3BvbG9neV9zdGF0ZS0+dmNwaV9hbGxvY2F0ZWQgPSB0cnVlOwo+ ID4gPiArCj4gPiA+ICsJLyogRmluZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uIGZvciB0aGlzIHBv cnQsIGlmIGFueSAqLwo+ID4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmdG9wb2xvZ3lf c3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gPiA+ICsJCWlmIChwb3MtPnBvcnQgPT0gcG9ydCkgewo+ ID4gPiArCQkJdmNwaSA9IHBvczsKPiA+ID4gKwkJCXByZXZfc2xvdHMgPSB2Y3BpLT52Y3BpOwo+ ID4gPiArCj4gPiA+ICsJCQkvKgo+ID4gPiArCQkJICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVu LCB1bmxlc3MgdGhlIGRyaXZlciB0cmllcwo+ID4gPiArCQkJICogcmVsZWFzaW5nIGFuZCBhbGxv Y2F0aW5nIHRoZSBzYW1lIFZDUEkgYWxsb2NhdGlvbiwKPiA+ID4gKwkJCSAqIHdoaWNoIGlzIGFu IGVycm9yCj4gPiA+ICsJCQkgKi8KPiA+ID4gKwkJCWlmIChXQVJOX09OKCFwcmV2X3Nsb3RzKSkg ewo+ID4gPiArCQkJCURSTV9FUlJPUigiY2Fubm90IGFsbG9jYXRlIGFuZCByZWxlYXNlIFZDUEkg b24KPiA+ID4gW01TVCBQT1JUOiVwXSBpbiB0aGUgc2FtZSBzdGF0ZVxuIiwKPiA+ID4gKwkJCQkJ ICBwb3J0KTsKPiA+ID4gKwkJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gKwkJCX0KPiA+IAo+ID4g QWxsb3dpbmcgYXRvbWljIGNoYW5nZXMgdG8gb3V0cHV0IHN0YXRlIChsaWtlIGRpc2FibGluZyBp dCBvbiBvbmUgY3J0YywKPiA+IGFuZCB0aGVuIGVuYWJsaW5nIG9uIHRoZSBvdGhlciwgdGh1cyBi b3RoIHJlbGVhc2luZyBhbmQgcmUtYWxsb2NhdGluZyB0aGUKPiA+IHZjcGkgaW4gb25lIGdvKSBp cyBraW5kYSB0aGUgcG9pbnQgb2YgYXRvbWljLiBTbyBkZWZpbml0ZWx5IGNhbid0IEVJTlZBTAo+ ID4gaGVyZS4KPiA+IAo+ID4gU291bmRzIGxpa2Ugd2UgbmVlZCBtb3JlIHRlc3RjYXNlcyBpbiBp Z3Q/Cj4gPiAKPiA+ID4gKwo+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ICsJCX0KPiA+ID4gIAl9Cj4g PiA+ICsJaWYgKCF2Y3BpKQo+ID4gPiArCQlwcmV2X3Nsb3RzID0gMDsKPiA+ID4gIAo+ID4gPiAt CXRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyAtPSByZXFfc2xvdHM7Cj4gPiA+IC0JRFJNX0RF QlVHX0tNUygidmNwaSBzbG90cyBhdmFpbD0lZCIsIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90 cyk7Cj4gPiA+ICsJcmVxX3Nsb3RzID0gRElWX1JPVU5EX1VQKHBibiwgbWdyLT5wYm5fZGl2KTsK PiA+ID4gKwo+ID4gPiArCURSTV9ERUJVR19BVE9NSUMoIltDT05ORUNUT1I6JWQ6JXNdIFtNU1Qg UE9SVDolcF0gVkNQSSAlZCAtPiAlZFxuIiwKPiA+ID4gKwkJCSBwb3J0LT5jb25uZWN0b3ItPmJh c2UuaWQsIHBvcnQtPmNvbm5lY3Rvci0+bmFtZSwKPiA+ID4gKwkJCSBwb3J0LCBwcmV2X3Nsb3Rz LCByZXFfc2xvdHMpOwo+ID4gPiArCj4gPiA+ICsJLyogQWRkIHRoZSBuZXcgYWxsb2NhdGlvbiB0 byB0aGUgc3RhdGUgKi8KPiA+ID4gKwlpZiAoIXZjcGkpIHsKPiA+ID4gKwkJdmNwaSA9IGt6YWxs b2Moc2l6ZW9mKCp2Y3BpKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJCWlmICghdmNwaSkgewo+ID4g PiArCQkJcmV0ID0gLUVOT01FTTsKPiA+ID4gKwkJCWdvdG8gb3V0Owo+ID4gPiArCQl9Cj4gPiA+ ICAKPiA+ID4gKwkJdmNwaS0+cG9ydCA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX3BvcnRfcmVmKG1n ciwgcG9ydCk7Cj4gPiA+ICsJCWlmICghdmNwaS0+cG9ydCkgewo+ID4gPiArCQkJcmV0ID0gLUVJ TlZBTDsKPiA+ID4gKwkJCWtmcmVlKHZjcGkpOwo+ID4gPiArCQkJZ290byBvdXQ7Cj4gPiA+ICsJ CX0KPiA+ID4gKwkJbGlzdF9hZGQoJnZjcGktPm5leHQsICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMp Owo+ID4gPiArCX0KPiA+ID4gKwl2Y3BpLT52Y3BpID0gcmVxX3Nsb3RzOwo+ID4gPiArCj4gPiA+ ICsJcmV0ID0gcmVxX3Nsb3RzOwo+ID4gPiArb3V0Ogo+ID4gPiAgCWRybV9kcF9wdXRfcG9ydChw b3J0KTsKPiA+ID4gLQlyZXR1cm4gcmVxX3Nsb3RzOwo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ ICB9Cj4gPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKTsK PiA+ID4gIAo+ID4gPiBAQCAtMjY2MSwzMSArMjcyMiw2NiBAQCBFWFBPUlRfU1lNQk9MKGRybV9k cF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKTsKPiA+ID4gICAqIGRybV9kcF9hdG9taWNfcmVsZWFz ZV92Y3BpX3Nsb3RzKCkgLSBSZWxlYXNlIGFsbG9jYXRlZCB2Y3BpIHNsb3RzCj4gPiA+ICAgKiBA c3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUKPiA+ID4gICAqIEBtZ3I6IE1TVCB0b3BvbG9neSBt YW5hZ2VyIGZvciB0aGUgcG9ydAo+ID4gPiAtICogQHNsb3RzOiBudW1iZXIgb2YgdmNwaSBzbG90 cyB0byByZWxlYXNlCj4gPiA+ICsgKiBAcG9ydDogVGhlIHBvcnQgdG8gcmVsZWFzZSB0aGUgVkNQ SSBzbG90cyBmcm9tCj4gPiA+ICAgKgo+ID4gPiAtICogUkVUVVJOUzoKPiA+ID4gLSAqIDAgaWYg QHNsb3RzIHdlcmUgYWRkZWQgYmFjayB0byAmZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS0KPiA+ ID4gPmF2YWlsX3Nsb3RzIG9yCj4gPiA+IC0gKiBuZWdhdGl2ZSBlcnJvciBjb2RlCj4gPiA+ICsg KiBSZWxlYXNlcyBhbnkgVkNQSSBzbG90cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgdG8gYSBw b3J0IGluIHRoZQo+ID4gPiBhdG9taWMKPiA+ID4gKyAqIHN0YXRlLiBBbnkgYXRvbWljIGRyaXZl cnMgd2hpY2ggc3VwcG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24KPiA+ID4gaW4KPiA+ ID4gKyAqIHRoZWlyICZkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2soKSBj YWxsYmFjayB3aGVuIHRoZQo+ID4gPiArICogY29ubmVjdG9yIHdpbGwgbm8gbG9uZ2VyIGhhdmUg VkNQSSBhbGxvY2F0ZWQgKGUuZy4gYmVjYXVzZSBpdCdzIENSVEMKPiA+ID4gd2FzCj4gPiA+ICsg KiByZW1vdmVkKSB3aGVuIGl0IGhhZCBWQ1BJIGFsbG9jYXRlZCBpbiB0aGUgcHJldmlvdXMgYXRv bWljIHN0YXRlLgo+ID4gPiArICoKPiA+ID4gKyAqIEl0IGlzIE9LIHRvIGNhbGwgdGhpcyBldmVu IGlmIEBwb3J0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKPiA+ID4gc3lzdGVtLgo+ID4gPiAr ICogQWRkaXRpb25hbGx5LCBpdCBpcyBPSyB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUg dGltZXMgb24gdGhlCj4gPiA+IHNhbWUKPiA+ID4gKyAqIEBwb3J0IGFzIG5lZWRlZC4gSXQgaXMg bm90IE9LIGhvd2V2ZXIsIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhbmQKPiA+ID4gKyAqIGRybV9k cF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgb24gdGhlIHNhbWUgQHBvcnQgaW4gYSBzaW5nbGUg YXRvbWljCj4gPiA+IGNoZWNrCj4gPiA+ICsgKiBwaGFzZS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBT ZWUgYWxzbzoKPiA+ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkKPiA+ID4g KyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKPiA+ID4gKyAqCj4gPiA+ICsgKiBSZXR1cm5z Ogo+ID4gPiArICogMCBpZiBhbGwgc2xvdHMgZm9yIHRoaXMgcG9ydCB3ZXJlIGFkZGVkIGJhY2sg dG8KPiA+ID4gKyAqICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLmF2YWlsX3Nsb3RzIG9yIG5l Z2F0aXZlIGVycm9yIGNvZGUKPiA+ID4gICAqLwo+ID4gPiAgaW50IGRybV9kcF9hdG9taWNfcmVs ZWFzZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ID4gIAkJ CQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiAtCQkJCSAg ICAgaW50IHNsb3RzKQo+ID4gPiArCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9y dCkKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqdG9w b2xvZ3lfc3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvczsK PiA+ID4gKwlib29sIGZvdW5kID0gZmFsc2U7Cj4gPiA+ICAKPiA+ID4gIAl0b3BvbG9neV9zdGF0 ZSA9IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbWdyKTsKPiA+ID4g IAlpZiAoSVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkKPiA+ID4gIAkJcmV0dXJuIFBUUl9FUlIodG9w b2xvZ3lfc3RhdGUpOwo+ID4gPiAgCj4gPiA+IC0JLyogV2UgY2Fubm90IHJlbHkgb24gcG9ydC0+ dmNwaS5udW1fc2xvdHMgdG8gdXBkYXRlCj4gPiA+IC0JICogdG9wb2xvZ3lfc3RhdGUtPmF2YWls X3Nsb3RzIGFzIHRoZSBwb3J0IG1heSBub3QgZXhpc3QgaWYgdGhlIHBhcmVudAo+ID4gPiAtCSAq IGJyYW5jaCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJh Y2tpbmcKPiA+ID4gLQkgKiBwZXItcG9ydCBzbG90IGFsbG9jYXRpb24gaW4gZHJtX2RwX21zdF90 b3BvbG9neV9zdGF0ZSBpbnN0ZWFkIG9mCj4gPiA+IC0JICogZGVwZW5kaW5nIG9uIHRoZSBjYWxs ZXIgdG8gdGVsbCB1cyBob3cgbWFueSBzbG90cyB0byByZWxlYXNlLgo+ID4gPiAtCSAqLwo+ID4g PiAtCXRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyArPSBzbG90czsKPiA+ID4gLQlEUk1fREVC VUdfS01TKCJ2Y3BpIHNsb3RzIHJlbGVhc2VkPSVkLCBhdmFpbD0lZFxuIiwKPiA+ID4gLQkJCXNs b3RzLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ID4gPiArCWxpc3RfZm9yX2VhY2hf ZW50cnkocG9zLCAmdG9wb2xvZ3lfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gPiA+ICsJCWlmIChw b3MtPnBvcnQgPT0gcG9ydCkgewo+ID4gPiArCQkJZm91bmQgPSB0cnVlOwo+ID4gPiArCQkJYnJl YWs7Cj4gPiA+ICsJCX0KPiA+ID4gKwl9Cj4gPiA+ICsJaWYgKFdBUk5fT04oIWZvdW5kKSkgewo+ ID4gPiArCQlEUk1fRVJST1IoIm5vIFZDUEkgZm9yIFtNU1QgUE9SVDolcF0gZm91bmQgaW4gbXN0 IHN0YXRlICVwXG4iLAo+ID4gPiArCQkJICBwb3J0LCAmdG9wb2xvZ3lfc3RhdGUtPmJhc2UpOwo+ ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlEUk1fREVC VUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIFZDUEkgJWQgLT4gMFxuIiwgcG9ydCwgcG9zLT52Y3Bp KTsKPiA+ID4gKwlpZiAocG9zLT52Y3BpKSB7Cj4gPiA+ICsJCS8qCj4gPiA+ICsJCSAqIFRoaXMg c2hvdWxkIGJlIHNhZmUtYXMgdGhlIHByZXZpb3VzIHN0YXRlIHdpbGwgc3RpbGwgaG9sZCBhCj4g PiA+ICsJCSAqIHJlZmVyZW5jZSB0byB0aGlzIHBvcnQgdW50aWwgd2Ugc3dhcCBzdGF0ZXMuIElm IGl0J3Mgbm90LAo+ID4gPiArCQkgKiB0aGUgZHJpdmVyIGhhcyBhIGJvb2trZWVwaW5nIGVycm9y Cj4gPiA+ICsJCSAqLwo+ID4gPiArCQlpZiAoV0FSTl9PTihkcm1fZHBfcHV0X3BvcnQocG9ydCkp KSB7Cj4gPiAKPiA+IFRoZSB1c3VhbCB3YXkgdG8gZG8gdGhpcyAoaW5zdGVhZCBvZiBhZGRpbmcg YSByZXR1cm4gdmFsdWUgdG8gdGhlIG5vcm1hbAo+ID4gX3B1dCBmdW5jdGlvbikgaXMgc29tZXRo aW5nIGxpa2UKPiA+IAo+ID4gCWtyZWZfcHV0KHBvcnQsIGZ1bmN0aW9uX3RoYXRfd2l0aF9qdXN0 X2FfV0FSTklOR19EUk1fRVJST1IpCj4gPiAKPiA+IGF2b2lkcyB0aGUgbmVlZCBmb3IgcGF0Y2gg Mi4KPiA+IAo+ID4gPiArCQkJRFJNX0VSUk9SKCJjYW5ub3QgYWxsb2NhdGUgYW5kIHJlbGVhc2Ug VkNQSSBvbiBbTVNUCj4gPiA+IFBPUlQ6JXBdIGluIHRoZSBzYW1lIHN0YXRlXG4iLAo+ID4gPiAr CQkJCSAgcG9ydCk7Cj4gPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gKwkJfQo+ID4gPiAr CQlwb3MtPnZjcGkgPSAwOwo+ID4gPiArCX0KPiA+ID4gIAo+ID4gPiAgCXJldHVybiAwOwo+ID4g PiAgfQo+ID4gPiBAQCAtMzExNSwxNSArMzIxMSw0NSBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVz dHJveV9jb25uZWN0b3Jfd29yayhzdHJ1Y3QKPiA+ID4gd29ya19zdHJ1Y3QgKndvcmspCj4gPiA+ ICBzdGF0aWMgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlICoKPiA+ID4gIGRybV9kcF9tc3RfZHVw bGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaikKPiA+ID4gIHsKPiA+ID4g LQlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqc3RhdGU7Cj4gPiA+ICsJc3RydWN0 IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0YXRlLCAqb2xkX3N0YXRlID0KPiA+ID4gKwkJ dG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKG9iai0+c3RhdGUpOwo+ID4gPiArCXN0cnVjdCBkcm1f ZHBfdmNwaV9hbGxvY2F0aW9uICpwb3MsICp2Y3BpOwo+ID4gPiAgCj4gPiA+IC0Jc3RhdGUgPSBr bWVtZHVwKG9iai0+c3RhdGUsIHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiA+ID4gKwlz dGF0ZSA9IGttZW1kdXAob2xkX3N0YXRlLCBzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4g PiA+ICAJaWYgKCFzdGF0ZSkKPiA+ID4gIAkJcmV0dXJuIE5VTEw7Cj4gPiA+ICAKPiA+ID4gIAlf X2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShvYmosICZzdGF0 ZS0+YmFzZSk7Cj4gPiA+ICAKPiA+ID4gKwlJTklUX0xJU1RfSEVBRCgmc3RhdGUtPnZjcGlzKTsK PiA+ID4gKwlzdGF0ZS0+dmNwaV9hbGxvY2F0ZWQgPSBmYWxzZTsKPiA+ID4gKwo+ID4gPiArCWxp c3RfZm9yX2VhY2hfZW50cnkocG9zLCAmb2xkX3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gPiAr CQkvKiBQcnVuZSBsZWZ0b3ZlciBmcmVlZCBWQ1BJIGFsbG9jYXRpb25zICovCj4gPiA+ICsJCWlm ICghcG9zLT52Y3BpKQo+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ICsKPiA+ID4gKwkJdmNwaSA9 IGttZW1kdXAocG9zLCBzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsKPiA+ID4gKwkJaWYgKCF2 Y3BpKQo+ID4gPiArCQkJZ290byBmYWlsOwo+ID4gPiArCj4gPiA+ICsJCS8qIFRha2UgYSBwbGFp biBvbGQga3JlZiBoZXJlIGFuZCBkb24ndCB2YWxpZGF0ZSB0aGUgcG9ydCwgYXMKPiA+ID4gKwkJ ICogaXQncyB0b3BvbG9neSBtaWdodCBub3QgZXZlbiBleGlzdCBhbnltb3JlCj4gPiA+ICsJCSAq Lwo+ID4gPiArCQlrcmVmX2dldCgmdmNwaS0+cG9ydC0+a3JlZik7Cj4gPiA+ICsJCWxpc3RfYWRk KCZ2Y3BpLT5uZXh0LCAmc3RhdGUtPnZjcGlzKTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gIAly ZXR1cm4gJnN0YXRlLT5iYXNlOwo+ID4gPiArCj4gPiA+ICtmYWlsOgo+ID4gPiArCWxpc3RfZm9y X2VhY2hfZW50cnlfc2FmZShwb3MsIHZjcGksICZzdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4g KwkJZHJtX2RwX3B1dF9wb3J0KHBvcy0+cG9ydCk7Cj4gPiA+ICsJCWtmcmVlKHBvcyk7Cj4gPiA+ ICsJfQo+ID4gPiArCWtmcmVlKHN0YXRlKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBOVUxMOwo+ ID4gPiAgfQo+ID4gPiAgCj4gPiA+ICBzdGF0aWMgdm9pZCBkcm1fZHBfbXN0X2Rlc3Ryb3lfc3Rh dGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqLAo+ID4gPiBAQCAtMzEzMSwxNCArMzI1Nywx MTYgQEAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF9kZXN0cm95X3N0YXRlKHN0cnVjdAo+ID4gPiBk cm1fcHJpdmF0ZV9vYmogKm9iaiwKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0KPiA+ID4gIAkJdG9fZHBfbXN0X3RvcG9sb2d5X3N0 YXRlKHN0YXRlKTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9zLCAq dG1wOwo+ID4gPiArCj4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdG1wLCAm bXN0X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gPiArCQkvKiBXZSBvbmx5IGtlZXAgcmVmZXJl bmNlcyB0byBwb3J0cyB3aXRoIG5vbi16ZXJvIFZDUElzICovCj4gPiA+ICsJCWlmIChwb3MtPnZj cGkpCj4gPiA+ICsJCQlkcm1fZHBfcHV0X3BvcnQocG9zLT5wb3J0KTsKPiA+ID4gKwkJa2ZyZWUo cG9zKTsKPiA+ID4gKwl9Cj4gPiA+ICAKPiA+ID4gIAlrZnJlZShtc3Rfc3RhdGUpOwo+ID4gPiAg fQo+ID4gPiAgCj4gPiA+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1 bmNzIG1zdF9zdGF0ZV9mdW5jcyA9IHsKPiA+ID4gK3N0YXRpYyBpbmxpbmUgaW50Cj4gPiA+ICtk cm1fZHBfbXN0X2F0b21pY19jaGVja190b3BvbG9neV9zdGF0ZShzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3IKPiA+ID4gKm1nciwKPiA+ID4gKwkJCQkgICAgICAgc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfc3RhdGUKPiA+ID4gKm1zdF9zdGF0ZSkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1 Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqdmNwaTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX21z dF9wb3J0ICpwb3J0Owo+ID4gPiArCWludCBhdmFpbF9zbG90cyA9IDYzLCByZXQ7Cj4gPiA+ICsK PiA+ID4gKwkvKiBUaGVyZSdzIG5vIHBvc3NpYmxlIHNjZW5hcmlvIHdoZXJlIHJlbGVhc2luZyBW Q1BJIG9yIGtlZXBpbmcgaXQgdGhlCj4gPiA+ICsJICogc2FtZSB3b3VsZCBtYWtlIHRoZSBzdGF0 ZSBpbnZhbGlkCj4gPiA+ICsJICovCj4gPiA+ICsJaWYgKCFtc3Rfc3RhdGUtPnZjcGlfYWxsb2Nh dGVkKSB7Cj4gPiAKPiA+IERvIHdlIG5lZWQgdGhpcz8gSWYgbm90IEknbSBhbHdheXMgaW4gZmF2 b3VyIG9mIHJlbW92aW5nIGNvZGUgaWYgaXQncyBub3QKPiA+IG5lZWRlZCA6LSkKPiA+IAo+ID4g PiArCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIE1HUjolcF0gc3RhdGUgJXAgYWxsb2NhdGVzIG5v IFZDUEksCj4gPiA+IGNoZWNrIHNraXBwZWRcbiIsCj4gPiA+ICsJCQkJIG1nciwgJm1zdF9zdGF0 ZS0+YmFzZSk7Cj4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWxp c3RfZm9yX2VhY2hfZW50cnkodmNwaSwgJm1zdF9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4g KwkJLyogUmVsZWFzaW5nIFZDUEkgaXMgYWx3YXlzIE9LLWV2ZW4gaWYgdGhlIHBvcnQgaXMgZ29u ZSAqLwo+ID4gPiArCQlpZiAoIXZjcGktPnZjcGkpIHsKPiA+ID4gKwkJCURSTV9ERUJVR19BVE9N SUMoIltNU1QgUE9SVDolcF0gcmVsZWFzZXMgYWxsIFZDUEkKPiA+ID4gc2xvdHNcbiIsCj4gPiA+ ICsJCQkJCSB2Y3BpLT5wb3J0KTsKPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiArCQl9Cj4gPiA+ ICsKPiA+ID4gKwkJcG9ydCA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX3BvcnRfcmVmKG1nciwgdmNw aS0+cG9ydCk7Cj4gPiA+ICsJCWlmICghcG9ydCkgewo+ID4gPiArCQkJRFJNX0RFQlVHX0FUT01J QygiW01TVCBQT1JUOiVwXSBpcyBnb25lIGJ1dCBzdGlsbCBoYXMKPiA+ID4gVkNQSSwgY2Fubm90 IGFkZCBuZXcgVkNQSVxuIiwKPiA+ID4gKwkJCQkJIHZjcGktPnBvcnQpOwo+ID4gPiArCQkJcmV0 dXJuIC1FSU5WQUw7Cj4gPiA+ICsJCX0KPiA+IAo+ID4gRm9yIGZpbmRfdmNwaSB3ZSd2ZSBhbHJl YWR5IGRvbmUgdGhpcy4gRm9yIHVucGx1Z2dlZCB2Y3BpLCB3ZSBjYW4ndCBkbwo+ID4gdGhpcyBo ZXJlIEkgdGhpbmsgLSBvdGhlcndpc2UgaWYgeW91IGVuYWJsZSAyIG1zdCBvdXRwdXRzIG9uIHRo ZSBzYW1lCj4gPiBicmFuY2gsIGFuZCB1bnBsdWcgYm90aCwgb2xkIG5vbi1hdG9taWMgdXNlcnNw YWNlIGNhbiBuZXZlciBldmVyIGFnYWluCj4gPiBkaXNhYmxlIHRoZW0gYmVjYXVzZSBpdCBjYW4n dCBkaXNhYmxlIGJvdGguIFRoZSBjaGVjayAodG8gc2tpcCBhbHJlYWR5Cj4gPiBkZWFsbG9jYXRl ZCBwb3J0cykgYWJvdmUgaXNuJ3QgZW5vdWdoIHRvIGhhbmRsZSB0aGF0Lgo+ID4gCj4gPiA+ICsK PiA+ID4gKwkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSByZXF1aXJlcyAlZCB2Y3Bp IHNsb3RzXG4iLAo+ID4gPiArCQkJCSB2Y3BpLT5wb3J0LCB2Y3BpLT52Y3BpKTsKPiA+ID4gKwo+ ID4gPiArCQlhdmFpbF9zbG90cyAtPSB2Y3BpLT52Y3BpOwo+ID4gPiArCQlpZiAoYXZhaWxfc2xv dHMgPCAwKSB7Cj4gPiA+ICsJCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIG5vdCBl bm91Z2ggVkNQSSBzbG90cwo+ID4gPiBpbiBtc3Qgc3RhdGUgJXAgKGF2YWlsPSVkKVxuIiwKPiA+ ID4gKwkJCQkJIHZjcGktPnBvcnQsIG1zdF9zdGF0ZSwKPiA+ID4gKwkJCQkJIGF2YWlsX3Nsb3Rz ICsgdmNwaS0+dmNwaSk7Cj4gPiA+ICsJCQlyZXQgPSAtRU5PU1BDOwo+ID4gPiArCQkJZ290byBw b3J0X2ZhaWw7Cj4gPiA+ICsJCX0KPiA+ID4gKwo+ID4gPiArCQlkcm1fZHBfcHV0X3BvcnQocG9y dCk7Cj4gPiA+ICsJfQo+ID4gPiArCURSTV9ERUJVR19BVE9NSUMoIltNU1QgTUdSOiVwXSBtc3Qg c3RhdGUgJXAgVkNQSSBhdmFpbD0lZCB1c2VkPSVkXG4iLAo+ID4gPiArCQkJIG1nciwgbXN0X3N0 YXRlLCBhdmFpbF9zbG90cywKPiA+ID4gKwkJCSA2MyAtIGF2YWlsX3Nsb3RzKTsKPiA+ID4gKwo+ ID4gPiArCXJldHVybiAwOwo+ID4gPiArcG9ydF9mYWlsOgo+ID4gPiArCWRybV9kcF9wdXRfcG9y dChwb3J0KTsKPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsvKioK PiA+ID4gKyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrIC0gQ2hlY2sgdGhhdCB0aGUgbmV3IHN0 YXRlIG9mIGFuIE1TVAo+ID4gPiB0b3BvbG9neSBpbiBhbgo+ID4gPiArICogYXRvbWljIHVwZGF0 ZSBpcyB2YWxpZAo+ID4gPiArICogQHN0YXRlOiBQb2ludGVyIHRvIHRoZSBuZXcgJnN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlCj4gPiA+ICsgKgo+ID4gPiArICogQ2hlY2tzIHRoZSBn aXZlbiB0b3BvbG9neSBzdGF0ZSBmb3IgYW4gYXRvbWljIHVwZGF0ZSB0byBlbnN1cmUgdGhhdAo+ ID4gPiBpdCdzCj4gPiA+ICsgKiB2YWxpZC4gVGhpcyBpbmNsdWRlcyBjaGVja2luZyB3aGV0aGVy IHRoZXJlJ3MgZW5vdWdoIGJhbmR3aWR0aCB0bwo+ID4gPiBzdXBwb3J0Cj4gPiA+ICsgKiB0aGUg bmV3IFZDUEkgYWxsb2NhdGlvbnMgaW4gdGhlIGF0b21pYyB1cGRhdGUuCj4gPiA+ICsgKgo+ID4g PiArICogQW55IGF0b21pYyBkcml2ZXJzIHN1cHBvcnRpbmcgRFAgTVNUIG11c3QgbWFrZSBzdXJl IHRvIGNhbGwgdGhpcwo+ID4gPiBhZnRlcgo+ID4gPiArICogY2hlY2tpbmcgdGhlIHJlc3Qgb2Yg dGhlaXIgc3RhdGUgaW4gdGhlaXIKPiA+ID4gKyAqICZkcm1fbW9kZV9jb25maWdfZnVuY3MuYXRv bWljX2NoZWNrKCkgY2FsbGJhY2suCj4gPiA+ICsgKgo+ID4gPiArICogU2VlIGFsc286Cj4gPiA+ ICsgKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4gPiA+ICsgKiBkcm1fZHBfYXRv bWljX3JlbGVhc2VfdmNwaV9zbG90cygpCj4gPiA+ICsgKgo+ID4gPiArICogUmV0dXJuczoKPiA+ ID4gKyAqCj4gPiA+ICsgKiAwIGlmIHRoZSBuZXcgc3RhdGUgaXMgdmFsaWQsIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb3RoZXJ3aXNlLgo+ID4gPiArICovCj4gPiA+ICtpbnQgZHJtX2RwX21zdF9hdG9t aWNfY2hlY2soc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gPiArewo+ID4gPiAr CXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwo+ID4gPiArCXN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7Cj4gPiA+ICsJaW50IGksIHJldCA9IDA7 Cj4gPiA+ICsKPiA+ID4gKwlmb3JfZWFjaF9uZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdy LCBtc3Rfc3RhdGUsIGkpIHsKPiA+ID4gKwkJcmV0ID0gZHJtX2RwX21zdF9hdG9taWNfY2hlY2tf dG9wb2xvZ3lfc3RhdGUobWdyLCBtc3Rfc3RhdGUpOwo+ID4gPiArCQlpZiAocmV0KQo+ID4gPiAr CQkJYnJlYWs7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4gK30K PiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9hdG9taWNfY2hlY2spOwo+ID4gPiArCj4g PiA+ICtjb25zdCBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGVfZnVuY3MgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZV9mdW5jcyA9Cj4gPiA+IHsKPiA+ID4gIAkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0 ZSA9IGRybV9kcF9tc3RfZHVwbGljYXRlX3N0YXRlLAo+ID4gPiAgCS5hdG9taWNfZGVzdHJveV9z dGF0ZSA9IGRybV9kcF9tc3RfZGVzdHJveV9zdGF0ZSwKPiA+ID4gIH07Cj4gPiA+ICtFWFBPUlRf U1lNQk9MKGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVfZnVuY3MpOwo+ID4gPiAgCj4gPiA+ICAv KioKPiA+ID4gICAqIGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZTogZ2V0IE1TVCB0 b3BvbG9neSBzdGF0ZQo+ID4gPiBAQCAtMzIxNiwxMyArMzQ0NCwxMSBAQCBpbnQgZHJtX2RwX21z dF90b3BvbG9neV9tZ3JfaW5pdChzdHJ1Y3QKPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwKPiA+ID4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gPiA+ICAKPiA+ID4gIAltc3Rfc3RhdGUt Pm1nciA9IG1ncjsKPiA+ID4gLQo+ID4gPiAtCS8qIG1heC4gdGltZSBzbG90cyAtIG9uZSBzbG90 IGZvciBNVFAgaGVhZGVyICovCj4gPiA+IC0JbXN0X3N0YXRlLT5hdmFpbF9zbG90cyA9IDYzOwo+ ID4gPiArCUlOSVRfTElTVF9IRUFEKCZtc3Rfc3RhdGUtPnZjcGlzKTsKPiA+ID4gIAo+ID4gPiAg CWRybV9hdG9taWNfcHJpdmF0ZV9vYmpfaW5pdCgmbWdyLT5iYXNlLAo+ID4gPiAgCQkJCSAgICAm bXN0X3N0YXRlLT5iYXNlLAo+ID4gPiAtCQkJCSAgICAmbXN0X3N0YXRlX2Z1bmNzKTsKPiA+ID4g KwkJCQkgICAgJmRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVfZnVuY3MpOwo+ID4gPiAgCj4gPiA+ ICAJcmV0dXJuIDA7Cj4gPiA+ICB9Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k aXNwbGF5LmMKPiA+ID4gaW5kZXggMTMyZTk3ODIyN2ZiLi44ZTg1ZTA0YTU5NDggMTAwNjQ0Cj4g PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ID4gQEAgLTEyNTkyLDYg KzEyNTkyLDEwIEBAIHN0YXRpYyBpbnQgaW50ZWxfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZGV2 aWNlCj4gPiA+ICpkZXYsCj4gPiA+ICAJCQkJICAgICAgICJbbW9kZXNldF0iIDogIltmYXN0c2V0 XSIpOwo+ID4gPiAgCX0KPiA+ID4gIAo+ID4gPiArCXJldCA9IGRybV9kcF9tc3RfYXRvbWljX2No ZWNrKHN0YXRlKTsKPiA+ID4gKwlpZiAocmV0KQo+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4gPiAr Cj4gPiA+ICAJaWYgKGFueV9tcykgewo+ID4gPiAgCQlyZXQgPSBpbnRlbF9tb2Rlc2V0X2NoZWNr cyhzdGF0ZSk7Cj4gPiA+ICAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2RwX21zdC5jCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0 LmMKPiA+ID4gaW5kZXggNGRlMjQ3ZGRmMDVmLi5iZTJkMWFjN2Q4N2QgMTAwNjQ0Cj4gPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jCj4gPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jCj4gPiA+IEBAIC00MSw4ICs0MSwxMyBAQCBz dGF0aWMgYm9vbCBpbnRlbF9kcF9tc3RfY29tcHV0ZV9jb25maWcoc3RydWN0Cj4gPiA+IGludGVs X2VuY29kZXIgKmVuY29kZXIsCj4gPiA+ICAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciA9IGNvbm5fc3RhdGUtPmNvbm5lY3RvcjsKPiA+ID4gIAl2b2lkICpwb3J0ID0gdG9faW50ZWxf Y29ubmVjdG9yKGNvbm5lY3RvciktPnBvcnQ7Cj4gPiA+ICAJc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlID0gcGlwZV9jb25maWctPmJhc2Uuc3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRybV9j cnRjICpjcnRjID0gcGlwZV9jb25maWctPmJhc2UuY3J0YzsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlID0KPiA+ID4gKwkJZHJtX2F0b21pY19nZXRfb2xkX2Ny dGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+ID4gPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3 X2NydGNfc3RhdGUgPSAmcGlwZV9jb25maWctPmJhc2U7Cj4gPiA+ICAJaW50IGJwcDsKPiA+ID4g LQlpbnQgbGFuZV9jb3VudCwgc2xvdHMgPSAwOwo+ID4gPiArCWludCBsYW5lX2NvdW50LCBzbG90 cyA9Cj4gPiA+ICsJCXRvX2ludGVsX2NydGNfc3RhdGUob2xkX2NydGNfc3RhdGUpLT5kcF9tX24u dHU7Cj4gPiA+ICAJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUg PSAmcGlwZV9jb25maWctCj4gPiA+ID5iYXNlLmFkanVzdGVkX21vZGU7Cj4gPiA+ICAJaW50IG1z dF9wYm47Cj4gPiA+ICAJYm9vbCBjb25zdGFudF9uID0gZHJtX2RwX2hhc19xdWlyaygmaW50ZWxf ZHAtPmRlc2MsCj4gPiA+IEBAIC03Nyw4ICs4MiwxMiBAQCBzdGF0aWMgYm9vbCBpbnRlbF9kcF9t c3RfY29tcHV0ZV9jb25maWcoc3RydWN0Cj4gPiA+IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4g PiA+ICAJbXN0X3BibiA9IGRybV9kcF9jYWxjX3Bibl9tb2RlKGFkanVzdGVkX21vZGUtPmNydGNf Y2xvY2ssIGJwcCk7Cj4gPiA+ICAJcGlwZV9jb25maWctPnBibiA9IG1zdF9wYm47Cj4gPiA+ICAK PiA+ID4gLQkvKiBab21iaWUgY29ubmVjdG9ycyBjYW4ndCBoYXZlIFZDUEkgc2xvdHMgKi8KPiA+ ID4gLQlpZiAoIWRybV9jb25uZWN0b3JfaXNfdW5yZWdpc3RlcmVkKGNvbm5lY3RvcikpIHsKPiA+ ID4gKwkvKiBPbmx5IGNoYW5nZSBWQ1BJIGFsbG9jYXRpb24gb24gYWN0dWFsIG1vZGUgY2hhbmdl cywgdG8gcHJldmVudCB1cwo+ID4gPiArCSAqIGZyb20gdHJ5aW5nIHRvIGFsbG9jYXRlIFZDUEkg dG8gcG9ydHMgdGhhdCBubyBsb25nZXIgZXhpc3Qgd2hlbiB3ZQo+ID4gPiArCSAqIG1heSBqdXN0 IGJlIHRyeWluZyB0byBkaXNhYmxlIERQTVMgb24gdGhlbQo+ID4gPiArCSAqLwo+ID4gPiArCWlm IChuZXdfY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkIHx8Cj4gPiA+ICsJICAgIG5ld19jcnRjX3N0 YXRlLT5jb25uZWN0b3JzX2NoYW5nZWQpIHsKPiA+IAo+ID4gV2h5IGV4YWN0bHkgaXMgdGhpcyBu ZWVkZWQ/IFdlIG9ubHkgY2FsbCBjb21wdXRlX2NvbmZpZyBvbiB0aGUgZW5vY29kZXIKPiA+IHdo ZW4gZW5hYmxpbmcgYW4gb3V0cHV0LiBOb3Qgd2hlbiBkaXNhYmxpbmcgb25lLiBTaW1pbGFyIGZv ciB0aGUgYXRvbWljCj4gPiBoZWxwZXJzIGFuZCB0aGUgdmFyaW91cyBlbmNvZGVyIGNhbGxiYWNr cyAoeW91IGhhdmUgdGhlIHNhbWUgY2hhbmdlIGluIHRoZQo+ID4gbm91dmVhdSBjb2RlKS4gRGlk IHRoaXMgYWN0dWFsbHkgYmxvdyB1cCB3aGlsZSB0ZXN0aW5nPwo+ID4gCj4gPiA+ICAJCXNsb3Rz ID0gZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RhdGUsCj4gPiA+ICAJCQkJCQkgICAg ICAmaW50ZWxfZHAtPm1zdF9tZ3IsCj4gPiA+ICAJCQkJCQkgICAgICBwb3J0LAo+ID4gPiBAQCAt MTA3LDM2ICsxMTYsMzkgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBfbXN0X2NvbXB1dGVfY29uZmln KHN0cnVjdAo+ID4gPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gPiAgCXJldHVybiB0cnVl Owo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC1zdGF0aWMgaW50IGludGVsX2RwX21zdF9hdG9taWNf Y2hlY2soc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ID4gLQkJc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKm5ld19jb25uX3N0YXRlKQo+ID4gPiArc3RhdGljIGludAo+ID4g PiAraW50ZWxfZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAo+ID4gPiArCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqbmV3X2Nvbm5fc3Rh dGUpCj4gPiA+ICB7Cj4gPiA+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVj dG9yID0KPiA+ID4gKwkJdG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gPiA+ICsJc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IgPQo+ID4gPiArCQkmaW50ZWxfY29ubmVj dG9yLT5tc3RfcG9ydC0+bXN0X21ncjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpw b3J0ID0gaW50ZWxfY29ubmVjdG9yLT5wb3J0Owo+ID4gPiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSA9IG5ld19jb25uX3N0YXRlLT5zdGF0ZTsKPiA+ID4gLQlzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGU7Cj4gPiA+IC0Jc3RydWN0IGRybV9jcnRjICpv bGRfY3J0YzsKPiA+ID4gLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gPiA+ IC0JaW50IHNsb3RzLCByZXQgPSAwOwo+ID4gPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl ICpvbGRfY29ubl9zdGF0ZSA9Cj4gPiA+ICsJCWRybV9hdG9taWNfZ2V0X29sZF9jb25uZWN0b3Jf c3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gPiA+ICsJc3RydWN0IGRybV9jcnRjICpvbGRfY3J0 YyA9IG9sZF9jb25uX3N0YXRlLT5jcnRjLAo+ID4gPiArCQkJKm5ld19jcnRjID0gbmV3X2Nvbm5f c3RhdGUtPmNydGM7Cj4gPiA+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0 ZSwgKm5ld19jcnRjX3N0YXRlOwo+ID4gPiAgCj4gPiA+IC0Jb2xkX2Nvbm5fc3RhdGUgPSBkcm1f YXRvbWljX2dldF9vbGRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IpOwo+ID4gPiAt CW9sZF9jcnRjID0gb2xkX2Nvbm5fc3RhdGUtPmNydGM7Cj4gPiAKPiA+IEJpa2VzaGVkOiBSZXdv cmtpbmcgYWxsIHRoZSBhYm92ZSBoaWRlcyB0aGUgcmVhbCBjaGFuZ2VzIHF1aXRlIGEgYml0Lgo+ ID4gCj4gPiA+ICAJaWYgKCFvbGRfY3J0YykKPiA+ID4gLQkJcmV0dXJuIHJldDsKPiA+ID4gKwkJ cmV0dXJuIDA7Cj4gPiA+ICAKPiA+ID4gLQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3 X2NydGNfc3RhdGUoc3RhdGUsIG9sZF9jcnRjKTsKPiA+ID4gLQlzbG90cyA9IHRvX2ludGVsX2Ny dGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dTsKPiA+ID4gLQlpZiAoZHJtX2F0b21pY19j cnRjX25lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkgJiYgc2xvdHMgPiAwKSB7Cj4gPiA+IC0JCXN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwo+ID4gPiAtCQlzdHJ1Y3QgZHJtX2Vu Y29kZXIgKm9sZF9lbmNvZGVyOwo+ID4gPiArCW9sZF9jcnRjX3N0YXRlID0gZHJtX2F0b21pY19n ZXRfb2xkX2NydGNfc3RhdGUoc3RhdGUsIG9sZF9jcnRjKTsKPiA+ID4gKwlpZiAoIW9sZF9jcnRj X3N0YXRlIHx8Cj4gPiAKPiA+ICFvbGRfY3J0Y19zdGF0ZSB3b3VsZCBiZSBhIGZyYW1ld29yayBi dWcuIEp1c3QgcmVtb3ZlIHRoYXQgY2hlY2suCj4gPiAKPiA+ID4gKwkgICAgIXRvX2ludGVsX2Ny dGNfc3RhdGUob2xkX2NydGNfc3RhdGUpLT5kcF9tX24udHUpCj4gPiA+ICsJCXJldHVybiAwOwo+ ID4gCj4gPiBIbSwgd2h5IGRvIHdlIG5lZWQgdGhpcz8gSGF2aW5nIGEgRFAgcG9ydCBwcmV2aW91 c2x5IGVuYWJsZWQgd2l0aCBhIDAgdHUKPiA+IHNvdW5kcyBsaWtlIGEgcHJldHR5IGJpZyBkcml2 ZXIgYnVnLgo+ID4gPiAgCj4gPiA+IC0JCW9sZF9lbmNvZGVyID0gb2xkX2Nvbm5fc3RhdGUtPmJl c3RfZW5jb2RlcjsKPiA+ID4gLQkJbWdyID0gJmVuY190b19tc3Qob2xkX2VuY29kZXIpLT5wcmlt YXJ5LT5kcC5tc3RfbWdyOwo+ID4gPiArCS8qIElmIHdlIHN3aXRjaGVkIENSVENzLCBjbGVhciB0 aGUgcHJldmlvdXMgb25lJ3MgYWxsb2NhdGlvbiAqLwo+ID4gPiArCW5ld19jcnRjX3N0YXRlID0g ZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsIG9sZF9jcnRjKTsKPiA+ID4gKwlp ZiAobmV3X2NydGNfc3RhdGUtPmNvbm5lY3RvcnNfY2hhbmdlZCAmJiAhbmV3X2NydGNfc3RhdGUt PmVuYWJsZSkKPiA+ID4gKwkJdG9faW50ZWxfY3J0Y19zdGF0ZShuZXdfY3J0Y19zdGF0ZSktPmRw X21fbi50dSA9IDA7Cj4gPiAKPiA+IE5vIGlkZWEgd2h5IHdlIG5lZWQgdG8gY2xlYXIgdGhpcyBo ZXJlPyBTaG91bGRuJ3Qgd2UganVzdCBjbGVhciB0aGlzCj4gPiB1bmNvbmRpdGlvbmFsbHkgaWYg d2UgcmVsZWFzZSB0aGUgYWxsb2NhdGlvbi4KPiA+IAo+ID4gQWxzbyBuYW1pbmcgY29udmVudGlv biwgSSdkIGNhbGwgdGhpcyBvbGRfY3J0Y19uZXdfc3RhdGUsIGFuZCBtYXliZQo+ID4gb2xkX2Ny dGNfb2xkX3N0YXRlLiBUbyBtYWtlIGl0IGNsZWFyIHRoZXNlIGFyZSB0aGUgb2xkL25ldyBzdGF0 ZXMgZm9yCj4gPiBvbGRfY3J0Yy4gSW5zdGVhZCBvZiBvbGQvbmV3IHN0YXRlIGZvciB0aGUgbmV3 IGNydGMuCj4gPiAKPiA+ID4gIAo+ID4gPiAtCQlyZXQgPSBkcm1fZHBfYXRvbWljX3JlbGVhc2Vf dmNwaV9zbG90cyhzdGF0ZSwgbWdyLCBzbG90cyk7Cj4gPiA+IC0JCWlmIChyZXQpCj4gPiA+IC0J CQlEUk1fREVCVUdfS01TKCJmYWlsZWQgcmVsZWFzaW5nICVkIHZjcGkgc2xvdHM6JWRcbiIsCj4g PiA+IHNsb3RzLCByZXQpOwo+ID4gPiAtCQllbHNlCj4gPiA+IC0JCQl0b19pbnRlbF9jcnRjX3N0 YXRlKGNydGNfc3RhdGUpLT5kcF9tX24udHUgPSAwOwo+ID4gPiAtCX0KPiA+ID4gLQlyZXR1cm4g cmV0Owo+ID4gPiArCWlmIChuZXdfY3J0YykKPiA+ID4gKwkJcmV0dXJuIDA7Cj4gPiAKPiA+IE5v dCBzdXJlIHdoeSB3ZSBzaG91bGRuJ3QgcmVsZWFzZSB0aGlzPyBJZiB3ZSBoYW5kbGUgdGhpcyBp biBoZWxwZXJzLCBpdAo+ID4gd291bGQgcmVtb3ZlIHBpbGVzIG9mIHNwZWNpYWwgY2FzaW5nIGNv ZGUgaGVyZSBJIHRoaW5rLiBQbHVzIHJlbW92ZQo+ID4gc3BlY2lhbCBjb2RlIGluIHRoZSBobHBl cnMuCj4gPiAKPiA+IAo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIGRybV9kcF9hdG9taWNfcmVsZWFz ZV92Y3BpX3Nsb3RzKHN0YXRlLCBtZ3IsIHBvcnQpOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ICBz dGF0aWMgdm9pZCBpbnRlbF9tc3RfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5j b2RlciwKPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgK PiA+ID4gYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gPiA+IGluZGV4IDNmYWNl YjY2ZjVjYi4uMjM5MmUxMmI2YmNlIDEwMDY0NAo+ID4gPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1f ZHBfbXN0X2hlbHBlci5oCj4gPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVy LmgKPiA+ID4gQEAgLTQwNiw5ICs0MDYsMTYgQEAgc3RydWN0IGRybV9kcF9wYXlsb2FkIHsKPiA+ ID4gIAo+ID4gPiAgI2RlZmluZSB0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUoeCkgY29udGFpbmVy X29mKHgsIHN0cnVjdAo+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLCBiYXNlKQo+ID4g PiAgCj4gPiA+ICtzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiB7Cj4gPiAKPiA+IEkgdGhp bmsgYSBjb21tZW50IGhlcmUgdGhhdCB0aGlzIHBvaW50ZXIgaG9sZHMgYSBmdWxsIHJlZmVyZW5j ZSAoZXZlbiBwYXN0Cj4gPiB3aGVuIHRoZSBjb25uZWN0b3IgaXMgdW5wbHVnZ2VkKSB3b3VsZCBi ZSBnb29kLiBPdGhlcndpc2UgdGhlIGxvb3AgaW4KPiA+IHJlbGVhc2VfdmNwaSB3b3VsZCBiZSBi dWdneS4KPiA+IAo+ID4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7Cj4gPiA+ICsJ aW50IHZjcGk7Cj4gPiA+ICsJc3RydWN0IGxpc3RfaGVhZCBuZXh0Owo+ID4gPiArfTsKPiA+ID4g Kwo+ID4gPiAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgewo+ID4gPiAgCXN0cnVj dCBkcm1fcHJpdmF0ZV9zdGF0ZSBiYXNlOwo+ID4gPiAtCWludCBhdmFpbF9zbG90czsKPiA+ID4g KwlzdHJ1Y3QgbGlzdF9oZWFkIHZjcGlzOwo+ID4gPiArCXU4IHZjcGlfYWxsb2NhdGVkOwo+ID4g PiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwo+ID4gPiAgfTsKPiA+ID4g IAo+ID4gPiBAQCAtNjE5LDE0ICs2MjYsMTcgQEAgdm9pZCBkcm1fZHBfbXN0X3RvcG9sb2d5X21n cl9zdXNwZW5kKHN0cnVjdAo+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsKPiA+ ID4gIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9yZXN1bWUoc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyCj4gPiA+ICptZ3IpOwo+ID4gPiAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfc3RhdGUKPiA+ID4gKmRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiA+ICAJCQkJCQkJCSAgICBzdHJ1Y3QKPiA+ID4g ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncik7Cj4gPiA+IC1pbnQgZHJtX2RwX2F0b21pY19m aW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiAtCQkJ CSAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+IC0JCQkJICBzdHJ1 Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsKPiA+ID4gLWludCBkcm1fZHBfYXRv bWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4g PiA+IC0JCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4g LQkJCQkgICAgIGludCBzbG90cyk7Cj4gPiA+ICtpbnQgX19tdXN0X2NoZWNrCj4gPiA+ICtkcm1f ZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs Cj4gPiA+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ ID4gKwkJCSAgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGludCBwYm4pOwo+ID4g PiAraW50IF9fbXVzdF9jaGVjawo+ID4gPiArZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xv dHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiArCQkJCSBzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4gKwkJCQkgc3RydWN0IGRybV9kcF9tc3Rf cG9ydCAqcG9ydCk7Cj4gPiA+ICBpbnQgZHJtX2RwX3NlbmRfcG93ZXJfdXBkb3duX3BoeShzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4gIAkJCQkgc3RydWN0IGRybV9k cF9tc3RfcG9ydCAqcG9ydCwgYm9vbCBwb3dlcl91cCk7Cj4gPiA+ICtpbnQgX19tdXN0X2NoZWNr IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlCj4gPiA+ICpz dGF0ZSk7Cj4gPiA+ICAKPiA+ID4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3Rh dGVfZnVuY3MKPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5jczsKPiA+ID4gIAo+ ID4gPiAtLSAKPiA+ID4gMi4xOS4xCj4gPiA+IAo+ID4gCj4gPiAtLSAKPiA+IERhbmllbCBWZXR0 ZXIKPiA+IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gaHR0cDovL2Js b2cuZmZ3bGwuY2gKLS0gCkNoZWVycywKCUx5dWRlIFBhdWwKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCk5vdXZlYXUgbWFpbGluZyBsaXN0Ck5vdXZlYXVA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vbm91dmVhdQo=