From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v6 3/6] drm/dp_mst: Start tracking per-port VCPI allocations Date: Tue, 27 Nov 2018 10:07:12 +0100 Message-ID: <20181127090712.GY4266@phenom.ffwll.local> References: <20181116005008.7243-1-lyude@redhat.com> <20181116005008.7243-4-lyude@redhat.com> <20181126210421.GQ4266@phenom.ffwll.local> <62577f81fbccbbc1f2c06183abdb490e35a5b0d5.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: <62577f81fbccbbc1f2c06183abdb490e35a5b0d5.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Lyude Paul Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBOb3YgMjYsIDIwMTggYXQgMDQ6MzY6NDZQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBPbiBNb24sIDIwMTgtMTEtMjYgYXQgMjI6MDQgKzAxMDAsIERhbmllbCBWZXR0ZXIgd3Jv dGU6Cj4gPiBPbiBUaHUsIE5vdiAxNSwgMjAxOCBhdCAwNzo1MDowNVBNIC0wNTAwLCBMeXVkZSBQ YXVsIHdyb3RlOgo+ID4gPiBUaGVyZSBoYXMgYmVlbiBhIFRPRE8gd2FpdGluZyBmb3IgcXVpdGUg YSBsb25nIHRpbWUgaW4KPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neS5jOgo+ID4gPiAKPiA+ID4g CS8qIFdlIGNhbm5vdCByZWx5IG9uIHBvcnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQo+ID4g PiAJICogdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzIGFzIHRoZSBwb3J0IG1heSBub3QgZXhp c3QgaWYgdGhlIHBhcmVudAo+ID4gPiAJICogYnJhbmNoIGRldmljZSB3YXMgdW5wbHVnZ2VkLiBU aGlzIHNob3VsZCBiZSBmaXhlZCBieSB0cmFja2luZwo+ID4gPiAJICogcGVyLXBvcnQgc2xvdCBh bGxvY2F0aW9uIGluIGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgaW5zdGVhZCBvZgo+ID4gPiAJ ICogZGVwZW5kaW5nIG9uIHRoZSBjYWxsZXIgdG8gdGVsbCB1cyBob3cgbWFueSBzbG90cyB0byBy ZWxlYXNlLgo+ID4gPiAJICovCj4gPiA+IAo+ID4gPiBUaGF0J3Mgbm90IHRoZSBvbmx5IHJlYXNv biB3ZSBzaG91bGQgZml4IHRoaXM6IGZvcmNpbmcgdGhlIGRyaXZlciB0bwo+ID4gPiB0cmFjayB0 aGUgVkNQSSBhbGxvY2F0aW9ucyB0aHJvdWdob3V0IGEgc3RhdGUncyBhdG9taWMgY2hlY2sgaXMK PiA+ID4gZXJyb3IgcHJvbmUsIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBleHRyYSBjYXJlIGhhcyB0 byBiZSB0YWtlbiB3aXRoIHRoZQo+ID4gPiBvcmRlciB0aGF0IGRybV9kcF9hdG9taWNfZmluZF92 Y3BpX3Nsb3RzKCkgYW5kCj4gPiA+IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkg YXJlIGNhbGxlZCBpbiBpbiBvcmRlciB0byBlbnN1cmUKPiA+ID4gaWRlbXBvdGVuY3kuIEN1cnJl bnRseSB0aGUgb25seSBkcml2ZXIgYWN0dWFsbHkgdXNpbmcgdGhlc2UgaGVscGVycywKPiA+ID4g aTkxNSwgZG9lc24ndCBldmVuIGRvIHRoaXMgY29ycmVjdGx5OiBtdWx0aXBsZSAtPmJlc3RfZW5j b2RlcigpIGNoZWNrcwo+ID4gPiB3aXRoIGk5MTUncyBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdv dWxkIG5vdCBiZSBpZGVtcG90ZW50IGFuZCB3b3VsZAo+ID4gPiBvdmVyLWFsbG9jYXRlIFZDUEkg c2xvdHMsIHNvbWV0aGluZyBJIGxlYXJuZWQgdHJ5aW5nIHRvIGltcGxlbWVudAo+ID4gPiBmYWxs YmFjayByZXRyYWluaW5nIGluIE1TVC4KPiA+ID4gCj4gPiA+IFNvOiBzaW1wbGlmeSB0aGlzIHdo b2xlIG1lc3MsIGFuZCB0ZWFjaCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4gPiA+ IGFuZCBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIHRvIHRyYWNrIHRoZSBWQ1BJ IGFsbG9jYXRpb25zIGZvcgo+ID4gPiBlYWNoIHBvcnQuIFRoaXMgYWxsb3dzIHVzIHRvIGVuc3Vy ZSBpZGVtcG90ZW5jeSB3aXRob3V0IGhhdmluZyB0byByZWx5Cj4gPiA+IG9uIHRoZSBkcml2ZXIg YXMgbXVjaC4gQWRkaXRpb25hbGx5OiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnkK PiA+ID4ga2luZCBvZiBWQ1BJIHNsb3QgdHJhY2tpbmcgYW55bW9yZSBpZiBpdCBkb2Vzbid0IG5l ZWQgaXQgZm9yIGl0J3Mgb3duCj4gPiA+IGludGVybmFsIHN0YXRlLgo+ID4gPiAKPiA+ID4gQWRk aXRpb25hbGx5OyB0aGlzIGFkZHMgYSBuZXcgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKSBoZWxw ZXIgd2hpY2gKPiA+ID4gbXVzdCBiZSB1c2VkIGJ5IGF0b21pYyBkcml2ZXJzIHRvIHBlcmZvcm0g dmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgbmV3Cj4gPiA+IFZDUEkgYWxsb2NhdGlvbnMgaW5jdXJy ZWQgYnkgYSBzdGF0ZS4KPiA+ID4gCj4gPiA+IEFsc286IHVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlv biBhbmQgbWFrZSBpdCBtb3JlIG9idmlvdXMgdGhhdCB0aGVzZQo+ID4gPiAvbXVzdC8gYmUgY2Fs bGVkIGJ5IC9hbGwvIGF0b21pYyBkcml2ZXJzIHN1cHBvcnRpbmcgTVNULgo+ID4gPiAKPiA+ID4g Q2hhbmdlcyBzaW5jZSB2NjoKPiA+ID4gIC0gS2VlcCBhIGtyZWYgdG8gYWxsIG9mIHRoZSBwb3J0 cyB3ZSBoYXZlIGFsbG9jYXRpb25zIG9uLiBUaGlzIHJlcXVpcmVkCj4gPiA+ICAgIGEgZ29vZCBi aXQgb2YgY2hhbmdpbmcgdG8gd2hlbiB3ZSBjYWxsIGRybV9kcF9maW5kX3ZjcGlfc2xvdHMoKSwK PiA+ID4gICAgbWFpbmx5IHRoYXQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBvbmx5IHJlZG8g VkNQSSBhbGxvY2F0aW9ucyBvbgo+ID4gPiAgICBhY3R1YWwgbW9kZSBvciBDUlRDIGNoYW5nZXMs IG5vdCBjcnRjX3N0YXRlLT5hY3RpdmUgY2hhbmdlcy4KPiA+ID4gICAgQWRkaXRpb25hbGx5LCB3 ZSBubyBsb25nZXIgdGFrZSB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBEUk0gY29ubmVjdG9yCj4g PiA+ICAgIGZvciBlYWNoIHBvcnQgaW50byBhY2NvdW50IGJlY2F1c2Ugc28gbG9uZyBhcyB3ZSBo YXZlIGEga3JlZiB0byB0aGUKPiA+ID4gICAgcG9ydCBpbiB0aGUgbmV3IG9yIHByZXZpb3VzIGF0 b21pYyBzdGF0ZSwgdGhlIGNvbm5lY3RvciB3aWxsIHN0YXkKPiA+ID4gICAgcmVnaXN0ZXJlZC4K PiA+IAo+ID4gSSB3cml0ZSBhbiBlbnRpcmUgcGlsZSBvZiBzbWFsbCBuaXRwaXRzIChzdGlsbCBp bmNsdWRlZCBtb3N0IG9mIHRoZW0KPiA+IGJlbG93KSwgdW50aWwgSSByZWFsaXplZCB0aGlzIGhl cmUgd29udCB3b3JrLiBEZWxheWluZyB0aGUgY2FsbCB0byBkZXN0cm95Cj4gPiB0aGUgY29ubmVj dG9yICh3ZWxsLCB1bnJlZ2lzdGVyIGl0IHJlYWxseSkgd3JlYWtzIHRoZSBkZXNpZ24gd2UndmUg Y29tZSB1cAo+ID4gd2l0aCB0aHVzIGZhciwgcmVzdWx0aW5nIGluIG1vc3Qgb2YgbXkgY29tbWVu dHMgaGVyZS4KPiA+IAo+ID4gSW5zdGVhZCwgYWxsIHdlIG5lZWQgdG8gZG8gaXMgZGVsYXkgdGhl IGtmcmVlKHBvcnQpIGF0IHRoZSBib3R0b20gb2YKPiA+IGRybV9kcF9kZXN0cm95X3BvcnQoKS4g VGhlIHZjcGkgYWxsb2NhdGlvbiBzdHJ1Y3R1cmUgX29ubHlfIG5lZWRzIHRoZQo+ID4gcG9pbnRl ciB2YWx1ZSB0byBzdGF5IHZhbGlkLCBhcyBhIGxvb2t1cCBrZXkuIEl0IGRvZXNuJ3QgY2FyZSBh dCBhbGwgYWJvdXQKPiA+IGFueXRoaW5nIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGVyZS4gU28gdGhl IG9ubHkgdGhpbmcgd2UgbmVlZCB0byBkZWxheSBpcwo+ID4gdGhlIGtmcmVlLiBJIHRoaW5rIHRo ZSBzaW1wbGVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIGFkZCBhIDJuZCBrcmVmCj4gPiAo cG9ydC0+a2ZyZWVfcmVmIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQpLCB3aXRoIG9uIHJlZmVyZW5j ZSBoZWxkIGJ5IHRoZQo+ID4gcG9ydCBpdHNlbGYgKHJlbGVhc2VkIGluIGRybV9kcF9kZXN0cm95 X3BvcnQpLCBhbmQgdGhlIG90aGVyIG9uZSBoZWxkCj4gPiBhcy1uZWVkZWQgYnkgdGhlIHZjcGkg YWxsb2NhdGlvbiBsaXN0cy4KPiA+IAo+ID4gSSB0aGluayBpZiB3ZSBnbyB3aXRoIHRoaXMgZGVz aWduIGluc3RlYWQgb2YgcmV0cm9maXR0aW5nIGEgc2VtYW50aWMKPiA+IGNoYW5nZSBvZiB0aGUg cG9ydCBsaWZldGltZSBpdHNlbGYsIGFsbCB0aGUgY29tcGxpY2F0aW9ucyBJIGNvbXBsYWluIGFi b3V0Cj4gPiBiZWxvdyBzaG91bGQgZGlzYXBwZWFyLgo+ID4gCj4gPiBQaWxlcyBvZiBjb21tZW50 cyBiZWxvdy4KPiA+IAo+ID4gQ2hlZXJzLCBEYW5pZWwKPiA+IAo+ID4gPiAgLSBVc2UgdGhlIHNt YWxsIGNoYW5nZXMgdG8gZHJtX2RwX3B1dF9wb3J0KCkgdG8gYWRkIGV2ZW4gbW9yZSBlcnJvcgo+ ID4gPiAgICBjaGVja2luZyB0byBtYWtlIG1pc3VzYWdlIG9mIHRoZSBoZWxwZXJzIG1vcmUgb2J2 aW91cy4gSSBhZGRlZCB0aGlzCj4gPiA+ICAgIGFmdGVyIGhhdmluZyB0byBjaGFzZSBkb3duIHZh cmlvdXMgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0Cj4gPiA+ICAgIHN0YXJ0ZWQgcG9w cGluZyB1cCBmcm9tIHRoZSBuZXcgaGVscGVycyBzbyBubyBvbmUgZWxzZSBoYXMgdG8KPiA+ID4g ICAgdHJvdWJsZXNob290IHRoYXQuCj4gPiA+ICAtIE1vdmUgc29tZSBhY2NpZGVudGFsIERSTV9E RUJVR19LTVMoKSBjYWxscyB0byBEUk1fREVCVUdfQVRPTUlDKCkKPiA+ID4gIC0gVXBkYXRlIGRv Y3VtZW50YXRpb24gYWdhaW4sIG5vdGUgdGhhdCBmaW5kL3JlbGVhc2UoKSBzaG91bGQgYm90aCBu b3QgYmUKPiA+ID4gICAgY2FsbGVkIG9uIHRoZSBzYW1lIHBvcnQgaW4gYSBzaW5nbGUgYXRvbWlj IGNoZWNrIHBoYXNlIChidXQgbXVsdGlwbGUKPiA+ID4gICAgY2FsbHMgdG8gb25lIG9yIHRoZSBv dGhlciBpcyBPSykKPiA+ID4gCj4gPiA+IENoYW5nZXMgc2luY2UgdjQ6Cj4gPiA+ICAtIERvbid0 IHNraXAgdGhlIGF0b21pYyBjaGVja3MgZm9yIFZDUEkgYWxsb2NhdGlvbnMgaWYgbm8gbmV3IFZD UEkKPiA+ID4gICAgYWxsb2NhdGlvbnMgaGFwcGVuIGluIGEgc3RhdGUuIFRoaXMgbWFrZXMgdGhl IG5leHQgY2hhbmdlIEknbSBhYm91dAo+ID4gPiAgICB0byBsaXN0IGhlcmUgYSBsb3QgZWFzaWVy IHRvIGltcGxlbWVudC4KPiA+ID4gIC0gRG9uJ3QgaWdub3JlIFZDUEkgYWxsb2NhdGlvbnMgb24g ZGVzdHJveWVkIHBvcnRzLCBpbnN0ZWFkIGVuc3VyZSB0aGF0Cj4gPiA+ICAgIHdoZW4gcG9ydHMg YXJlIGRlc3Ryb3llZCBhbmQgc3RpbGwgaGF2ZSBWQ1BJIGFsbG9jYXRpb25zIGluIHRoZQo+ID4g PiAgICB0b3BvbG9neSBzdGF0ZSwgdGhlIG9ubHkgc3RhdGUgY2hhbmdlcyBhbGxvd2VkIGFyZSBy ZWxlYXNpbmcgc2FpZAo+ID4gPiAgICBwb3J0cycgVkNQSS4gVGhpcyBwcmV2ZW50cyBhIHN0YXRl IHdpdGggYSBtaXggb2YgVkNQSSBhbGxvY2F0aW9ucwo+ID4gPiAgICBmcm9tIGRlc3Ryb3llZCBw b3J0cywgYW5kIGFsbG9jYXRpb25zIGZyb20gdmFsaWQgcG9ydHMuCj4gPiA+IAo+ID4gPiBDaGFu Z2VzIHNpbmNlIHYzOgo+ID4gPiAgLSBEb24ndCByZWxlYXNlIFZDUEkgYWxsb2NhdGlvbnMgaW4g dGhlIHRvcG9sb2d5IHN0YXRlIGltbWVkaWF0ZWx5IGluCj4gPiA+ICAgIGRybV9kcF9hdG9taWNf cmVsZWFzZV92Y3BpX3Nsb3RzKCksIGluc3RlYWQgbWFyayB0aGVtIGFzIDAgYW5kIHNraXAKPiA+ ID4gICAgb3ZlciB0aGVtIGluIGRybV9kcF9tc3RfZHVwbGljYXRlX3N0YXRlKCkuIFRoaXMgbWFr ZXMgaXQgc28KPiA+ID4gICAgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSBpcyBz dGlsbCBpZGVtcG90ZW50IHdoaWxlIGFsc28KPiA+ID4gICAgdGhyb3dpbmcgd2FybmluZ3MgaWYg dGhlIGRyaXZlciBtZXNzZXMgdXAgaXQncyBib29rIGtlZXBpbmcgYW5kIHRyaWVzCj4gPiA+ICAg IHRvIHJlbGVhc2UgVkNQSSBzbG90cyBvbiBhIHBvcnQgdGhhdCBkb2Vzbid0IGhhdmUgYW55IHBy ZS1leGlzdGluZwo+ID4gPiAgICBWQ1BJIGFsbG9jYXRpb24gLSBkYW52ZXQKPiA+ID4gIC0gQ2hh bmdlIG1zdF9zdGF0ZS9zdGF0ZSBpbiBzb21lIGRlYnVnZ2luZyBtZXNzYWdlcyB0byAibXN0IHN0 YXRlIgo+ID4gPiAKPiA+ID4gQ2hhbmdlcyBzaW5jZSB2MjoKPiA+ID4gIC0gVXNlIGttZW1kdXAo KSBmb3IgZHVwbGljYXRpbmcgTVNUIHN0YXRlIC0gZGFudmV0Cj4gPiA+ICAtIE1vdmUgcG9ydCB2 YWxpZGF0aW9uIG91dCBvZiBkdXBsaWNhdGUgc3RhdGUgY2FsbGJhY2sgLSBkYW52ZXQKPiA+ID4g IC0gSGFuZGxlIGxvb3BpbmcgdGhyb3VnaCBNU1QgdG9wb2xvZ3kgc3RhdGVzIGluCj4gPiA+ICAg IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkgc28gdGhlIGRyaXZlciBkb2Vzbid0IGhhdmUgdG8g ZG8gaXQKPiA+ID4gIC0gRml4IGRvY3VtZW50YXRpb24gaW4gZHJtX2RwX2F0b21pY19maW5kX3Zj cGlfc2xvdHMoKQo+ID4gPiAgLSBNb3ZlIHRoZSBhdG9taWMgY2hlY2sgZm9yIGVhY2ggaW5kaXZp ZHVhbCB0b3BvbG9neSBzdGF0ZSBpbnRvIGl0J3MKPiA+ID4gICAgb3duIGZ1bmN0aW9uLCByZWR1 Y2VzIGluZGVudGluZwo+ID4gPiAgLSBEb24ndCBjb25zaWRlciAic3RhbGUiIE1TVCBwb3J0cyB3 aGVuIGNhbGN1bGF0aW5nIHRoZSBiYW5kd2lkdGgKPiA+ID4gICAgcmVxdWlyZW1lbnRzLiBUaGlz IGlzIG5lZWRlZCBiZWNhdXNlIG9yaWdpbmFsbHkgd2UgcmVsaWVkIG9uIHRoZQo+ID4gPiAgICBz dGF0ZSBkdXBsaWNhdGlvbiBmdW5jdGlvbnMgdG8gcHJ1bmUgYW55IHN0YWxlIHBvcnRzIGZyb20g dGhlIG5ldwo+ID4gPiAgICBzdGF0ZSwgd2hpY2ggd291bGQgcHJldmVudCB1cyBmcm9tIGluY29y cmVjdGx5IGNvbnNpZGVyaW5nIHRoZWlyCj4gPiA+ICAgIGJhbmR3aWR0aCByZXF1aXJlbWVudHMg YWxvbmdzaWRlIGxlZ2l0aW1hdGUgbmV3IHBheWxvYWRzLgo+ID4gPiAgLSBBZGQgZnVuY3Rpb24g cmVmZXJlbmNlcyBpbiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIC0gZGFudmV0 Cj4gPiA+ICAtIEFubm90YXRlIGF0b21pYyBWQ1BJIGFuZCBhdG9taWMgY2hlY2sgZnVuY3Rpb25z IHdpdGggX19tdXN0X2NoZWNrCj4gPiA+ICAgIC0gZGFudmV0Cj4gPiA+IAo+ID4gPiBDaGFuZ2Vz IHNpbmNlIHYxOgo+ID4gPiAgLSBEb24ndCB1c2UgdGhlIG5vdy1yZW1vdmVkIC0+YXRvbWljX2No ZWNrKCkgZm9yIHByaXZhdGUgb2JqZWN0cyBob29rLAo+ID4gPiAgICBqdXN0IGdpdmUgZHJpdmVy cyBhIGZ1bmN0aW9uIHRvIGNhbGwgdGhlbXNlbHZlcwo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1i eTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KPiA+ID4gQ2M6IERhbmllbCBWZXR0ZXIg PGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gPiA+IC0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJt L2RybV9kcF9tc3RfdG9wb2xvZ3kuYyB8IDI5NCArKysrKysrKysrKysrKysrKysrKysrKy0tLQo+ ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICB8ICAgNCArCj4gPiA+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYyAgIHwgIDY0ICsrKy0tLQo+ID4g PiAgaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaCAgICAgICB8ICAyNCArKy0KPiA+ID4g IDQgZmlsZXMgY2hhbmdlZCwgMzE5IGluc2VydGlvbnMoKyksIDY3IGRlbGV0aW9ucygtKQo+ID4g PiAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5 LmMKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiA+IGlu ZGV4IDAwZmJlN2EyNjk5ZC4uMTgzZDBlODMyY2VkIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4gQEAgLTI2MTcsMjEgKzI2MTcsNDIgQEAgc3Rh dGljIGludCBkcm1fZHBfaW5pdF92Y3BpKHN0cnVjdAo+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyLAo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ICAvKioKPiA+ID4gLSAqIGRybV9kcF9h dG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIGFuZCBhZGQgdmNwaSBzbG90cyB0byB0aGUg c3RhdGUKPiA+ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIGFu ZCBhZGQgVkNQSSBzbG90cyB0byB0aGUgc3RhdGUKPiA+ID4gICAqIEBzdGF0ZTogZ2xvYmFsIGF0 b21pYyBzdGF0ZQo+ID4gPiAgICogQG1ncjogTVNUIHRvcG9sb2d5IG1hbmFnZXIgZm9yIHRoZSBw b3J0Cj4gPiA+ICAgKiBAcG9ydDogcG9ydCB0byBmaW5kIHZjcGkgc2xvdHMgZm9yCj4gPiA+ICAg KiBAcGJuOiBiYW5kd2lkdGggcmVxdWlyZWQgZm9yIHRoZSBtb2RlIGluIFBCTgo+ID4gPiAgICoK PiA+ID4gLSAqIFJFVFVSTlM6Cj4gPiA+IC0gKiBUb3RhbCBzbG90cyBpbiB0aGUgYXRvbWljIHN0 YXRlIGFzc2lnbmVkIGZvciB0aGlzIHBvcnQgb3IgZXJyb3IKPiA+ID4gKyAqIEFsbG9jYXRlcyBW Q1BJIHNsb3RzIHRvIEBwb3J0LCByZXBsYWNpbmcgYW55IHByZXZpb3VzIFZDUEkgYWxsb2NhdGlv bnMKPiA+ID4gaXQKPiA+ID4gKyAqIG1heSBoYXZlIGhhZC4gQW55IGF0b21pYyBkcml2ZXJzIHdo aWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzCj4gPiA+IGZ1bmN0aW9uCj4gPiA+ICsgKiBp biB0aGVpciAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxiYWNr IHRvIGNoYW5nZQo+ID4gPiB0aGUKPiA+ID4gKyAqIGN1cnJlbnQgVkNQSSBhbGxvY2F0aW9uIGZv ciB0aGUgbmV3IHN0YXRlLCBidXQgb25seSB3aGVuCj4gPiA+ICsgKiAmZHJtX2NydGNfc3RhdGUu bW9kZV9jaGFuZ2VkIG9yICZkcm1fY3J0Y19zdGF0ZS5jb25uZWN0b3JzX2NoYW5nZWQgaXMKPiA+ ID4gc2V0Cj4gPiA+ICsgKiB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHVzZXJzcGFjZSBh cHBsaWNhdGlvbnMgdGhhdCBzdGlsbCB1c2UgdGhlCj4gPiA+ICsgKiBsZWdhY3kgbW9kZXNldHRp bmcgVUFQSS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBBbGxvY2F0aW9ucyBzZXQgYnkgdGhpcyBmdW5j dGlvbiBhcmUgbm90IGNoZWNrZWQgYWdhaW5zdCB0aGUgYmFuZHdpZHRoCj4gPiA+ICsgKiByZXN0 cmFpbnRzIG9mIEBtZ3IgdW50aWwgdGhlIGRyaXZlciBjYWxscyBkcm1fZHBfbXN0X2F0b21pY19j aGVjaygpLgo+ID4gPiArICoKPiA+ID4gKyAqIEFkZGl0aW9uYWxseSwgaXQgaXMgT0sgdG8gY2Fs bCB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIG9uIHRoZQo+ID4gPiBzYW1lCj4gPiA+ICsg KiBAcG9ydCBhcyBuZWVkZWQuIEl0IGlzIG5vdCBPSyBob3dldmVyLCB0byBjYWxsIHRoaXMgZnVu Y3Rpb24gYW5kCj4gPiA+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIGlu IHRoZSBzYW1lIGF0b21pYyBjaGVjayBwaGFzZS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBTZWUgYWxz bzoKPiA+ID4gKyAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkKPiA+ID4gKyAq IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKPiA+ID4gKyAqCj4gPiA+ICsgKiBSZXR1cm5zOgo+ ID4gPiArICogVG90YWwgc2xvdHMgaW4gdGhlIGF0b21pYyBzdGF0ZSBhc3NpZ25lZCBmb3IgdGhp cyBwb3J0LCBvciBhIG5lZ2F0aXZlCj4gPiA+IGVycm9yCj4gPiA+ICsgKiBjb2RlIGlmIHRoZSBw b3J0IG5vIGxvbmdlciBleGlzdHMKPiA+ID4gICAqLwo+ID4gPiAgaW50IGRybV9kcF9hdG9taWNf ZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ID4gIAkJ CQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiAgCQkJCSAgc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBibikKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqdG9wb2xvZ3lfc3RhdGU7Cj4gPiA+IC0JaW50 IHJlcV9zbG90czsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9zLCAq dmNwaSA9IE5VTEw7Cj4gPiA+ICsJaW50IHByZXZfc2xvdHMsIHJlcV9zbG90cywgcmV0Owo+ID4g PiAgCj4gPiA+ICAJdG9wb2xvZ3lfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lf c3RhdGUoc3RhdGUsIG1ncik7Cj4gPiA+ICAJaWYgKElTX0VSUih0b3BvbG9neV9zdGF0ZSkpCj4g PiA+IEBAIC0yNjQwLDIwICsyNjYxLDYwIEBAIGludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9z bG90cyhzdHJ1Y3QKPiA+ID4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiA+ICAJcG9ydCA9 IGRybV9kcF9nZXRfdmFsaWRhdGVkX3BvcnRfcmVmKG1nciwgcG9ydCk7Cj4gPiA+ICAJaWYgKHBv cnQgPT0gTlVMTCkKPiA+ID4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+IC0JcmVxX3Nsb3RzID0g RElWX1JPVU5EX1VQKHBibiwgbWdyLT5wYm5fZGl2KTsKPiA+ID4gLQlEUk1fREVCVUdfS01TKCJ2 Y3BpIHNsb3RzIHJlcT0lZCwgYXZhaWw9JWRcbiIsCj4gPiA+IC0JCQlyZXFfc2xvdHMsIHRvcG9s b2d5X3N0YXRlLT5hdmFpbF9zbG90cyk7Cj4gPiA+ICAKPiA+ID4gLQlpZiAocmVxX3Nsb3RzID4g dG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKSB7Cj4gPiA+IC0JCWRybV9kcF9wdXRfcG9ydChw b3J0KTsKPiA+ID4gLQkJcmV0dXJuIC1FTk9TUEM7Cj4gPiA+ICsJdG9wb2xvZ3lfc3RhdGUtPnZj cGlfYWxsb2NhdGVkID0gdHJ1ZTsKPiA+ID4gKwo+ID4gPiArCS8qIEZpbmQgdGhlIGN1cnJlbnQg YWxsb2NhdGlvbiBmb3IgdGhpcyBwb3J0LCBpZiBhbnkgKi8KPiA+ID4gKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KHBvcywgJnRvcG9sb2d5X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gPiArCQlpZiAo cG9zLT5wb3J0ID09IHBvcnQpIHsKPiA+ID4gKwkJCXZjcGkgPSBwb3M7Cj4gPiA+ICsJCQlwcmV2 X3Nsb3RzID0gdmNwaS0+dmNwaTsKPiA+ID4gKwo+ID4gPiArCQkJLyoKPiA+ID4gKwkJCSAqIFRo aXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgdW5sZXNzIHRoZSBkcml2ZXIgdHJpZXMKPiA+ID4gKwkJ CSAqIHJlbGVhc2luZyBhbmQgYWxsb2NhdGluZyB0aGUgc2FtZSBWQ1BJIGFsbG9jYXRpb24sCj4g PiA+ICsJCQkgKiB3aGljaCBpcyBhbiBlcnJvcgo+ID4gPiArCQkJICovCj4gPiA+ICsJCQlpZiAo V0FSTl9PTighcHJldl9zbG90cykpIHsKPiA+ID4gKwkJCQlEUk1fRVJST1IoImNhbm5vdCBhbGxv Y2F0ZSBhbmQgcmVsZWFzZSBWQ1BJIG9uCj4gPiA+IFtNU1QgUE9SVDolcF0gaW4gdGhlIHNhbWUg c3RhdGVcbiIsCj4gPiA+ICsJCQkJCSAgcG9ydCk7Cj4gPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7 Cj4gPiA+ICsJCQl9Cj4gPiAKPiA+IEFsbG93aW5nIGF0b21pYyBjaGFuZ2VzIHRvIG91dHB1dCBz dGF0ZSAobGlrZSBkaXNhYmxpbmcgaXQgb24gb25lIGNydGMsCj4gPiBhbmQgdGhlbiBlbmFibGlu ZyBvbiB0aGUgb3RoZXIsIHRodXMgYm90aCByZWxlYXNpbmcgYW5kIHJlLWFsbG9jYXRpbmcgdGhl Cj4gPiB2Y3BpIGluIG9uZSBnbykgaXMga2luZGEgdGhlIHBvaW50IG9mIGF0b21pYy4gU28gZGVm aW5pdGVseSBjYW4ndCBFSU5WQUwKPiA+IGhlcmUuCj4gQWN0dWFsbHktc28gbG9uZyB0aGUgb3Jp Z2luYWwgYXNzZXJ0aW9uIHdlIGhhZCBvZiBub3QgYWxsb3dpbmcgInN0YWxlIiAoZS5nLgo+IFZD UElzIGZyb20gbm93LWRlc3Ryb3llZCB0b3BvbG9naWVzKSBWQ1BJIGFsbG9jYXRpb25zIGFuZCBy ZWFsIFZDUEkKPiBhbGxvY2F0aW9ucyBpbiB0aGUgc2FtZSBhdG9taWMgc3RhdGUgaXMgaGVsZCB0 cnVlLCB0aGlzIHNob3VsZCBiZSBmaW5lLgo+IAo+IFNvOiAoYW5kIHRoaXMgYW5zd2VycyB0aGUg cXVlc3Rpb24gYmVsb3cgYXMgd2VsbCksIHRoZSB3YXkgdGhpcyBpcyBzdXBwb3NlZCB0bwo+IHdv cmsgaXMgdGhhdCB3ZSBqdXN0IHNraXAgdGhlIHdob2xlIFZDUEkgdmFsaWRhdGlvbiBzZXF1ZW5j ZSB1bmxlc3MgcGFydCBvZgo+IHRoZSBzdGF0ZSBhY3R1YWxseSB0cmllZCB0byBhZGQgVkNQSS4g VGhpcyBtZWFucyB1c2VybGFuZCBjYW4gc3RpbGwgZGlzYWJsZQo+IGRpc3BsYXlzIG9uZS1ieS1v bmUgb3Igc2V0IHRoZW0gYXMgaW5hY3RpdmUsIHNvIGxvbmcgYXMgaXQgZG9lc24ndCB0cnkgdG8K PiBlbmFibGUgbmV3IE1TVCBkaXNwbGF5cyB1bnRpbCB0aGUgcG9pbnQgYXQgd2hpY2ggaXQncyBk aXNhYmxlZCBldmVyeXRoaW5nCj4gbGVmdG92ZXIgZnJvbSB0aGUgcHJldmlvdXMgdG9wb2xvZ3kg LSBzaW5jZSBkaXNhYmxpbmcgZGlzcGxheXMgd29uJ3QgYWxsb2NhdGUKPiBWQ1BJIGFuZCB0aHVz IHNraXBzIHRoZSBwb3J0IHZhbGlkYXRpb24gY2hlY2tzIGhlcmUuCgpUaGlzIGRvZXNuJ3Qgc291 bmQgcm9idXN0IGlmIHRoZXJlJ3MgYSByYWNlLCBlLmcuIHVzZXJzcGFjZSB0cmllcyB0byBsaWdo dAp1cCBhIGRpc3BsYXkgcmlnaHQgYXQgdGhlIHRpbWUgd2hlbiB3ZSB1bnBsdWcgYSBkaWZmZXJl bnQgKGFscmVhZHkgZW5hYmxlZApvdXRwdXQpLiBJIHRoaW5rIHRvIGZpeCB0aGlzIHByb3Blcmx5 IHdlIG5lZWQgdG8gcmVwbGFjZSBhbGwgdGhlCmRwX2dldF92YWxpZGF0ZWRfcG9ydCBjYWxscyBp biBhbGwgdGhlIHZjcGkvcGF5bG9hZCBwbGFjZXMgd2l0aCB0aGUKbG93ZXItbGV2ZWwga3JlZiB0 aGF0IG9ubHkgcHJldmVudHMgdGhlIGtmcmVlLgoKRnVuZGFtZW50YWxseSBob3R1bnBsdWcgaXMg c3RpbGwgcmFjeSwgYnV0IHRoaXMgd2F5IEkgdGhpbmsgdGhlcmUncyBhdApsZWFzdCBubyBzdXJw cmlzZXMuIEFuZCB3ZSBjb3VsZCBwcm9iYWJseSByZW1vdmUgYSBidW5jaCBvZiB0aGUgaGFja3MK YXJvdW5kIGNsZWFudXAgcGF0aHMuCgo+ID4gU291bmRzIGxpa2Ugd2UgbmVlZCBtb3JlIHRlc3Rj YXNlcyBpbiBpZ3Q/Cj4gPiAKPiA+ID4gKwo+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ICsJCX0KPiA+ ID4gIAl9Cj4gPiA+ICsJaWYgKCF2Y3BpKQo+ID4gPiArCQlwcmV2X3Nsb3RzID0gMDsKPiA+ID4g IAo+ID4gPiAtCXRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyAtPSByZXFfc2xvdHM7Cj4gPiA+ IC0JRFJNX0RFQlVHX0tNUygidmNwaSBzbG90cyBhdmFpbD0lZCIsIHRvcG9sb2d5X3N0YXRlLT5h dmFpbF9zbG90cyk7Cj4gPiA+ICsJcmVxX3Nsb3RzID0gRElWX1JPVU5EX1VQKHBibiwgbWdyLT5w Ym5fZGl2KTsKPiA+ID4gKwo+ID4gPiArCURSTV9ERUJVR19BVE9NSUMoIltDT05ORUNUT1I6JWQ6 JXNdIFtNU1QgUE9SVDolcF0gVkNQSSAlZCAtPiAlZFxuIiwKPiA+ID4gKwkJCSBwb3J0LT5jb25u ZWN0b3ItPmJhc2UuaWQsIHBvcnQtPmNvbm5lY3Rvci0+bmFtZSwKPiA+ID4gKwkJCSBwb3J0LCBw cmV2X3Nsb3RzLCByZXFfc2xvdHMpOwo+ID4gPiArCj4gPiA+ICsJLyogQWRkIHRoZSBuZXcgYWxs b2NhdGlvbiB0byB0aGUgc3RhdGUgKi8KPiA+ID4gKwlpZiAoIXZjcGkpIHsKPiA+ID4gKwkJdmNw aSA9IGt6YWxsb2Moc2l6ZW9mKCp2Y3BpKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJCWlmICghdmNw aSkgewo+ID4gPiArCQkJcmV0ID0gLUVOT01FTTsKPiA+ID4gKwkJCWdvdG8gb3V0Owo+ID4gPiAr CQl9Cj4gPiA+ICAKPiA+ID4gKwkJdmNwaS0+cG9ydCA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX3Bv cnRfcmVmKG1nciwgcG9ydCk7Cj4gPiA+ICsJCWlmICghdmNwaS0+cG9ydCkgewo+ID4gPiArCQkJ cmV0ID0gLUVJTlZBTDsKPiA+ID4gKwkJCWtmcmVlKHZjcGkpOwo+ID4gPiArCQkJZ290byBvdXQ7 Cj4gPiA+ICsJCX0KPiA+ID4gKwkJbGlzdF9hZGQoJnZjcGktPm5leHQsICZ0b3BvbG9neV9zdGF0 ZS0+dmNwaXMpOwo+ID4gPiArCX0KPiA+ID4gKwl2Y3BpLT52Y3BpID0gcmVxX3Nsb3RzOwo+ID4g PiArCj4gPiA+ICsJcmV0ID0gcmVxX3Nsb3RzOwo+ID4gPiArb3V0Ogo+ID4gPiAgCWRybV9kcF9w dXRfcG9ydChwb3J0KTsKPiA+ID4gLQlyZXR1cm4gcmVxX3Nsb3RzOwo+ID4gPiArCXJldHVybiBy ZXQ7Cj4gPiA+ICB9Cj4gPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9hdG9taWNfZmluZF92Y3Bp X3Nsb3RzKTsKPiA+ID4gIAo+ID4gPiBAQCAtMjY2MSwzMSArMjcyMiw2NiBAQCBFWFBPUlRfU1lN Qk9MKGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKTsKPiA+ID4gICAqIGRybV9kcF9hdG9t aWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgLSBSZWxlYXNlIGFsbG9jYXRlZCB2Y3BpIHNsb3RzCj4g PiA+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUKPiA+ID4gICAqIEBtZ3I6IE1TVCB0 b3BvbG9neSBtYW5hZ2VyIGZvciB0aGUgcG9ydAo+ID4gPiAtICogQHNsb3RzOiBudW1iZXIgb2Yg dmNwaSBzbG90cyB0byByZWxlYXNlCj4gPiA+ICsgKiBAcG9ydDogVGhlIHBvcnQgdG8gcmVsZWFz ZSB0aGUgVkNQSSBzbG90cyBmcm9tCj4gPiA+ICAgKgo+ID4gPiAtICogUkVUVVJOUzoKPiA+ID4g LSAqIDAgaWYgQHNsb3RzIHdlcmUgYWRkZWQgYmFjayB0byAmZHJtX2RwX21zdF90b3BvbG9neV9z dGF0ZS0+YXZhaWxfc2xvdHMgCj4gPiA+IG9yCj4gPiA+IC0gKiBuZWdhdGl2ZSBlcnJvciBjb2Rl Cj4gPiA+ICsgKiBSZWxlYXNlcyBhbnkgVkNQSSBzbG90cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0 ZWQgdG8gYSBwb3J0IGluIHRoZQo+ID4gPiBhdG9taWMKPiA+ID4gKyAqIHN0YXRlLiBBbnkgYXRv bWljIGRyaXZlcnMgd2hpY2ggc3VwcG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4K PiA+ID4gKyAqIHRoZWlyICZkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2so KSBjYWxsYmFjayB3aGVuIHRoZQo+ID4gPiArICogY29ubmVjdG9yIHdpbGwgbm8gbG9uZ2VyIGhh dmUgVkNQSSBhbGxvY2F0ZWQgKGUuZy4gYmVjYXVzZSBpdCdzIENSVEMKPiA+ID4gd2FzCj4gPiA+ ICsgKiByZW1vdmVkKSB3aGVuIGl0IGhhZCBWQ1BJIGFsbG9jYXRlZCBpbiB0aGUgcHJldmlvdXMg YXRvbWljIHN0YXRlLgo+ID4gPiArICoKPiA+ID4gKyAqIEl0IGlzIE9LIHRvIGNhbGwgdGhpcyBl dmVuIGlmIEBwb3J0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLgo+ID4gPiArICog QWRkaXRpb25hbGx5LCBpdCBpcyBPSyB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUgdGlt ZXMgb24gdGhlCj4gPiA+IHNhbWUKPiA+ID4gKyAqIEBwb3J0IGFzIG5lZWRlZC4gSXQgaXMgbm90 IE9LIGhvd2V2ZXIsIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhbmQKPiA+ID4gKyAqIGRybV9kcF9h dG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgb24gdGhlIHNhbWUgQHBvcnQgaW4gYSBzaW5nbGUgYXRv bWljCj4gPiA+IGNoZWNrCj4gPiA+ICsgKiBwaGFzZS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBTZWUg YWxzbzoKPiA+ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkKPiA+ID4gKyAq IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKPiA+ID4gKyAqCj4gPiA+ICsgKiBSZXR1cm5zOgo+ ID4gPiArICogMCBpZiBhbGwgc2xvdHMgZm9yIHRoaXMgcG9ydCB3ZXJlIGFkZGVkIGJhY2sgdG8K PiA+ID4gKyAqICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLmF2YWlsX3Nsb3RzIG9yIG5lZ2F0 aXZlIGVycm9yIGNvZGUKPiA+ID4gICAqLwo+ID4gPiAgaW50IGRybV9kcF9hdG9taWNfcmVsZWFz ZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ID4gIAkJCQkg ICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiAtCQkJCSAgICAg aW50IHNsb3RzKQo+ID4gPiArCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkK PiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqdG9wb2xv Z3lfc3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvczsKPiA+ ID4gKwlib29sIGZvdW5kID0gZmFsc2U7Cj4gPiA+ICAKPiA+ID4gIAl0b3BvbG9neV9zdGF0ZSA9 IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbWdyKTsKPiA+ID4gIAlp ZiAoSVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkKPiA+ID4gIAkJcmV0dXJuIFBUUl9FUlIodG9wb2xv Z3lfc3RhdGUpOwo+ID4gPiAgCj4gPiA+IC0JLyogV2UgY2Fubm90IHJlbHkgb24gcG9ydC0+dmNw aS5udW1fc2xvdHMgdG8gdXBkYXRlCj4gPiA+IC0JICogdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Ns b3RzIGFzIHRoZSBwb3J0IG1heSBub3QgZXhpc3QgaWYgdGhlIHBhcmVudAo+ID4gPiAtCSAqIGJy YW5jaCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJhY2tp bmcKPiA+ID4gLQkgKiBwZXItcG9ydCBzbG90IGFsbG9jYXRpb24gaW4gZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZSBpbnN0ZWFkIG9mCj4gPiA+IC0JICogZGVwZW5kaW5nIG9uIHRoZSBjYWxsZXIg dG8gdGVsbCB1cyBob3cgbWFueSBzbG90cyB0byByZWxlYXNlLgo+ID4gPiAtCSAqLwo+ID4gPiAt CXRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyArPSBzbG90czsKPiA+ID4gLQlEUk1fREVCVUdf S01TKCJ2Y3BpIHNsb3RzIHJlbGVhc2VkPSVkLCBhdmFpbD0lZFxuIiwKPiA+ID4gLQkJCXNsb3Rz LCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ID4gPiArCWxpc3RfZm9yX2VhY2hfZW50 cnkocG9zLCAmdG9wb2xvZ3lfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gPiA+ICsJCWlmIChwb3Mt PnBvcnQgPT0gcG9ydCkgewo+ID4gPiArCQkJZm91bmQgPSB0cnVlOwo+ID4gPiArCQkJYnJlYWs7 Cj4gPiA+ICsJCX0KPiA+ID4gKwl9Cj4gPiA+ICsJaWYgKFdBUk5fT04oIWZvdW5kKSkgewo+ID4g PiArCQlEUk1fRVJST1IoIm5vIFZDUEkgZm9yIFtNU1QgUE9SVDolcF0gZm91bmQgaW4gbXN0IHN0 YXRlICVwXG4iLAo+ID4gPiArCQkJICBwb3J0LCAmdG9wb2xvZ3lfc3RhdGUtPmJhc2UpOwo+ID4g PiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlEUk1fREVCVUdf QVRPTUlDKCJbTVNUIFBPUlQ6JXBdIFZDUEkgJWQgLT4gMFxuIiwgcG9ydCwgcG9zLT52Y3BpKTsK PiA+ID4gKwlpZiAocG9zLT52Y3BpKSB7Cj4gPiA+ICsJCS8qCj4gPiA+ICsJCSAqIFRoaXMgc2hv dWxkIGJlIHNhZmUtYXMgdGhlIHByZXZpb3VzIHN0YXRlIHdpbGwgc3RpbGwgaG9sZCBhCj4gPiA+ ICsJCSAqIHJlZmVyZW5jZSB0byB0aGlzIHBvcnQgdW50aWwgd2Ugc3dhcCBzdGF0ZXMuIElmIGl0 J3Mgbm90LAo+ID4gPiArCQkgKiB0aGUgZHJpdmVyIGhhcyBhIGJvb2trZWVwaW5nIGVycm9yCj4g PiA+ICsJCSAqLwo+ID4gPiArCQlpZiAoV0FSTl9PTihkcm1fZHBfcHV0X3BvcnQocG9ydCkpKSB7 Cj4gPiAKPiA+IFRoZSB1c3VhbCB3YXkgdG8gZG8gdGhpcyAoaW5zdGVhZCBvZiBhZGRpbmcgYSBy ZXR1cm4gdmFsdWUgdG8gdGhlIG5vcm1hbAo+ID4gX3B1dCBmdW5jdGlvbikgaXMgc29tZXRoaW5n IGxpa2UKPiA+IAo+ID4gCWtyZWZfcHV0KHBvcnQsIGZ1bmN0aW9uX3RoYXRfd2l0aF9qdXN0X2Ff V0FSTklOR19EUk1fRVJST1IpCj4gPiAKPiA+IGF2b2lkcyB0aGUgbmVlZCBmb3IgcGF0Y2ggMi4K PiA+IAo+ID4gPiArCQkJRFJNX0VSUk9SKCJjYW5ub3QgYWxsb2NhdGUgYW5kIHJlbGVhc2UgVkNQ SSBvbiBbTVNUCj4gPiA+IFBPUlQ6JXBdIGluIHRoZSBzYW1lIHN0YXRlXG4iLAo+ID4gPiArCQkJ CSAgcG9ydCk7Cj4gPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gKwkJfQo+ID4gPiArCQlw b3MtPnZjcGkgPSAwOwo+ID4gPiArCX0KPiA+ID4gIAo+ID4gPiAgCXJldHVybiAwOwo+ID4gPiAg fQo+ID4gPiBAQCAtMzExNSwxNSArMzIxMSw0NSBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJv eV9jb25uZWN0b3Jfd29yayhzdHJ1Y3QKPiA+ID4gd29ya19zdHJ1Y3QgKndvcmspCj4gPiA+ICBz dGF0aWMgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlICoKPiA+ID4gIGRybV9kcF9tc3RfZHVwbGlj YXRlX3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaikKPiA+ID4gIHsKPiA+ID4gLQlz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqc3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0YXRlLCAqb2xkX3N0YXRlID0KPiA+ID4gKwkJdG9f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlKG9iai0+c3RhdGUpOwo+ID4gPiArCXN0cnVjdCBkcm1fZHBf dmNwaV9hbGxvY2F0aW9uICpwb3MsICp2Y3BpOwo+ID4gPiAgCj4gPiA+IC0Jc3RhdGUgPSBrbWVt ZHVwKG9iai0+c3RhdGUsIHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiA+ID4gKwlzdGF0 ZSA9IGttZW1kdXAob2xkX3N0YXRlLCBzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ ICAJaWYgKCFzdGF0ZSkKPiA+ID4gIAkJcmV0dXJuIE5VTEw7Cj4gPiA+ICAKPiA+ID4gIAlfX2Ry bV9hdG9taWNfaGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShvYmosICZzdGF0ZS0+ YmFzZSk7Cj4gPiA+ICAKPiA+ID4gKwlJTklUX0xJU1RfSEVBRCgmc3RhdGUtPnZjcGlzKTsKPiA+ ID4gKwlzdGF0ZS0+dmNwaV9hbGxvY2F0ZWQgPSBmYWxzZTsKPiA+ID4gKwo+ID4gPiArCWxpc3Rf Zm9yX2VhY2hfZW50cnkocG9zLCAmb2xkX3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gPiArCQkv KiBQcnVuZSBsZWZ0b3ZlciBmcmVlZCBWQ1BJIGFsbG9jYXRpb25zICovCj4gPiA+ICsJCWlmICgh cG9zLT52Y3BpKQo+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ICsKPiA+ID4gKwkJdmNwaSA9IGtt ZW1kdXAocG9zLCBzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsKPiA+ID4gKwkJaWYgKCF2Y3Bp KQo+ID4gPiArCQkJZ290byBmYWlsOwo+ID4gPiArCj4gPiA+ICsJCS8qIFRha2UgYSBwbGFpbiBv bGQga3JlZiBoZXJlIGFuZCBkb24ndCB2YWxpZGF0ZSB0aGUgcG9ydCwgYXMKPiA+ID4gKwkJICog aXQncyB0b3BvbG9neSBtaWdodCBub3QgZXZlbiBleGlzdCBhbnltb3JlCj4gPiA+ICsJCSAqLwo+ ID4gPiArCQlrcmVmX2dldCgmdmNwaS0+cG9ydC0+a3JlZik7Cj4gPiA+ICsJCWxpc3RfYWRkKCZ2 Y3BpLT5uZXh0LCAmc3RhdGUtPnZjcGlzKTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gIAlyZXR1 cm4gJnN0YXRlLT5iYXNlOwo+ID4gPiArCj4gPiA+ICtmYWlsOgo+ID4gPiArCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShwb3MsIHZjcGksICZzdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4gKwkJ ZHJtX2RwX3B1dF9wb3J0KHBvcy0+cG9ydCk7Cj4gPiA+ICsJCWtmcmVlKHBvcyk7Cj4gPiA+ICsJ fQo+ID4gPiArCWtmcmVlKHN0YXRlKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBOVUxMOwo+ID4g PiAgfQo+ID4gPiAgCj4gPiA+ICBzdGF0aWMgdm9pZCBkcm1fZHBfbXN0X2Rlc3Ryb3lfc3RhdGUo c3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqLAo+ID4gPiBAQCAtMzEzMSwxNCArMzI1NywxMTYg QEAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF9kZXN0cm95X3N0YXRlKHN0cnVjdAo+ID4gPiBkcm1f cHJpdmF0ZV9vYmogKm9iaiwKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZSAqbXN0X3N0YXRlID0KPiA+ID4gIAkJdG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRl KHN0YXRlKTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9zLCAqdG1w Owo+ID4gPiArCj4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdG1wLCAmbXN0 X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gPiArCQkvKiBXZSBvbmx5IGtlZXAgcmVmZXJlbmNl cyB0byBwb3J0cyB3aXRoIG5vbi16ZXJvIFZDUElzICovCj4gPiA+ICsJCWlmIChwb3MtPnZjcGkp Cj4gPiA+ICsJCQlkcm1fZHBfcHV0X3BvcnQocG9zLT5wb3J0KTsKPiA+ID4gKwkJa2ZyZWUocG9z KTsKPiA+ID4gKwl9Cj4gPiA+ICAKPiA+ID4gIAlrZnJlZShtc3Rfc3RhdGUpOwo+ID4gPiAgfQo+ ID4gPiAgCj4gPiA+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNz IG1zdF9zdGF0ZV9mdW5jcyA9IHsKPiA+ID4gK3N0YXRpYyBpbmxpbmUgaW50Cj4gPiA+ICtkcm1f ZHBfbXN0X2F0b21pY19jaGVja190b3BvbG9neV9zdGF0ZShzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IKPiA+ID4gKm1nciwKPiA+ID4gKwkJCQkgICAgICAgc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUKPiA+ID4gKm1zdF9zdGF0ZSkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3Qg ZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqdmNwaTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0Owo+ID4gPiArCWludCBhdmFpbF9zbG90cyA9IDYzLCByZXQ7Cj4gPiA+ICsKPiA+ ID4gKwkvKiBUaGVyZSdzIG5vIHBvc3NpYmxlIHNjZW5hcmlvIHdoZXJlIHJlbGVhc2luZyBWQ1BJ IG9yIGtlZXBpbmcgaXQgdGhlCj4gPiA+ICsJICogc2FtZSB3b3VsZCBtYWtlIHRoZSBzdGF0ZSBp bnZhbGlkCj4gPiA+ICsJICovCj4gPiA+ICsJaWYgKCFtc3Rfc3RhdGUtPnZjcGlfYWxsb2NhdGVk KSB7Cj4gPiAKPiA+IERvIHdlIG5lZWQgdGhpcz8gSWYgbm90IEknbSBhbHdheXMgaW4gZmF2b3Vy IG9mIHJlbW92aW5nIGNvZGUgaWYgaXQncyBub3QKPiA+IG5lZWRlZCA6LSkKPiBhbnN3ZXJlZCBi eSBteSBleHBsYW5hdGlvbiBhYm92ZSBeCgpJZiByZW1vdmluZyB0aGlzIGJyZWFrcyB0aGUgY29k ZSB0aGVuIEkgdGhpbmsgaXQncyBhIGJpdCBmcmFnaWxlLiBBbmQgc2VlCmFib3ZlLCBvcGVuIHRv IHJhY2VzICh5ZXMgdW5saWtlbHkgb25lcywgYnV0IHRoZW4gYWxsIG9mIG1zdCBpcyBmdWxsIG9m CnVubGlrZWx5IHJhY2VzIGl0IHRoYXQgc3RpbGwgc2VlbSB0byBoYXBwZW4gZXZlbnR1YWxseSku CgpJIHRoaW5rIGl0J3MgYmV0dGVyIGlmIHdlIGNhbiByZW1vdmUgYWxsIHRoZXNlIHNwZWNpYWwg Y2FzZXMgKHdoaWNoIHNob3VsZApiZSBwb3NzaWJsZSBpZiB3ZSBkcm9wIHRoZSBnZXRfdmFsaWRh dGVkX3BvcnQgYmVsb3cpLgoKPiA+IAo+ID4gPiArCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIE1H UjolcF0gc3RhdGUgJXAgYWxsb2NhdGVzIG5vIFZDUEksCj4gPiA+IGNoZWNrIHNraXBwZWRcbiIs Cj4gPiA+ICsJCQkJIG1nciwgJm1zdF9zdGF0ZS0+YmFzZSk7Cj4gPiA+ICsJCXJldHVybiAwOwo+ ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnkodmNwaSwgJm1zdF9z dGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4gKwkJLyogUmVsZWFzaW5nIFZDUEkgaXMgYWx3YXlz IE9LLWV2ZW4gaWYgdGhlIHBvcnQgaXMgZ29uZSAqLwo+ID4gPiArCQlpZiAoIXZjcGktPnZjcGkp IHsKPiA+ID4gKwkJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gcmVsZWFzZXMgYWxs IFZDUEkKPiA+ID4gc2xvdHNcbiIsCj4gPiA+ICsJCQkJCSB2Y3BpLT5wb3J0KTsKPiA+ID4gKwkJ CWNvbnRpbnVlOwo+ID4gPiArCQl9Cj4gPiA+ICsKPiA+ID4gKwkJcG9ydCA9IGRybV9kcF9nZXRf dmFsaWRhdGVkX3BvcnRfcmVmKG1nciwgdmNwaS0+cG9ydCk7Cj4gPiA+ICsJCWlmICghcG9ydCkg ewo+ID4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSBpcyBnb25lIGJ1dCBz dGlsbCBoYXMKPiA+ID4gVkNQSSwgY2Fubm90IGFkZCBuZXcgVkNQSVxuIiwKPiA+ID4gKwkJCQkJ IHZjcGktPnBvcnQpOwo+ID4gPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsJCX0KPiA+IAo+ ID4gRm9yIGZpbmRfdmNwaSB3ZSd2ZSBhbHJlYWR5IGRvbmUgdGhpcy4gRm9yIHVucGx1Z2dlZCB2 Y3BpLCB3ZSBjYW4ndCBkbwo+ID4gdGhpcyBoZXJlIEkgdGhpbmsgLSBvdGhlcndpc2UgaWYgeW91 IGVuYWJsZSAyIG1zdCBvdXRwdXRzIG9uIHRoZSBzYW1lCj4gPiBicmFuY2gsIGFuZCB1bnBsdWcg Ym90aCwgb2xkIG5vbi1hdG9taWMgdXNlcnNwYWNlIGNhbiBuZXZlciBldmVyIGFnYWluCj4gPiBk aXNhYmxlIHRoZW0gYmVjYXVzZSBpdCBjYW4ndCBkaXNhYmxlIGJvdGguIFRoZSBjaGVjayAodG8g c2tpcCBhbHJlYWR5Cj4gPiBkZWFsbG9jYXRlZCBwb3J0cykgYWJvdmUgaXNuJ3QgZW5vdWdoIHRv IGhhbmRsZSB0aGF0Lgo+IAo+IGFuc3dlcmVkIGJ5IG15IGV4cGxhbmF0aW9uIGFib3ZlIF4KPiA+ IAo+ID4gPiArCj4gPiA+ICsJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gcmVxdWly ZXMgJWQgdmNwaSBzbG90c1xuIiwKPiA+ID4gKwkJCQkgdmNwaS0+cG9ydCwgdmNwaS0+dmNwaSk7 Cj4gPiA+ICsKPiA+ID4gKwkJYXZhaWxfc2xvdHMgLT0gdmNwaS0+dmNwaTsKPiA+ID4gKwkJaWYg KGF2YWlsX3Nsb3RzIDwgMCkgewo+ID4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JU OiVwXSBub3QgZW5vdWdoIFZDUEkgc2xvdHMKPiA+ID4gaW4gbXN0IHN0YXRlICVwIChhdmFpbD0l ZClcbiIsCj4gPiA+ICsJCQkJCSB2Y3BpLT5wb3J0LCBtc3Rfc3RhdGUsCj4gPiA+ICsJCQkJCSBh dmFpbF9zbG90cyArIHZjcGktPnZjcGkpOwo+ID4gPiArCQkJcmV0ID0gLUVOT1NQQzsKPiA+ID4g KwkJCWdvdG8gcG9ydF9mYWlsOwo+ID4gPiArCQl9Cj4gPiA+ICsKPiA+ID4gKwkJZHJtX2RwX3B1 dF9wb3J0KHBvcnQpOwo+ID4gPiArCX0KPiA+ID4gKwlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIE1H UjolcF0gbXN0IHN0YXRlICVwIFZDUEkgYXZhaWw9JWQgdXNlZD0lZFxuIiwKPiA+ID4gKwkJCSBt Z3IsIG1zdF9zdGF0ZSwgYXZhaWxfc2xvdHMsCj4gPiA+ICsJCQkgNjMgLSBhdmFpbF9zbG90cyk7 Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK3BvcnRfZmFpbDoKPiA+ID4gKwlkcm1f ZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4gK30KPiA+ID4gKwo+ ID4gPiArLyoqCj4gPiA+ICsgKiBkcm1fZHBfbXN0X2F0b21pY19jaGVjayAtIENoZWNrIHRoYXQg dGhlIG5ldyBzdGF0ZSBvZiBhbiBNU1QgdG9wb2xvZ3kKPiA+ID4gaW4gYW4KPiA+ID4gKyAqIGF0 b21pYyB1cGRhdGUgaXMgdmFsaWQKPiA+ID4gKyAqIEBzdGF0ZTogUG9pbnRlciB0byB0aGUgbmV3 ICZzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZQo+ID4gPiArICoKPiA+ID4gKyAqIENo ZWNrcyB0aGUgZ2l2ZW4gdG9wb2xvZ3kgc3RhdGUgZm9yIGFuIGF0b21pYyB1cGRhdGUgdG8gZW5z dXJlIHRoYXQKPiA+ID4gaXQncwo+ID4gPiArICogdmFsaWQuIFRoaXMgaW5jbHVkZXMgY2hlY2tp bmcgd2hldGhlciB0aGVyZSdzIGVub3VnaCBiYW5kd2lkdGggdG8KPiA+ID4gc3VwcG9ydAo+ID4g PiArICogdGhlIG5ldyBWQ1BJIGFsbG9jYXRpb25zIGluIHRoZSBhdG9taWMgdXBkYXRlLgo+ID4g PiArICoKPiA+ID4gKyAqIEFueSBhdG9taWMgZHJpdmVycyBzdXBwb3J0aW5nIERQIE1TVCBtdXN0 IG1ha2Ugc3VyZSB0byBjYWxsIHRoaXMgYWZ0ZXIKPiA+ID4gKyAqIGNoZWNraW5nIHRoZSByZXN0 IG9mIHRoZWlyIHN0YXRlIGluIHRoZWlyCj4gPiA+ICsgKiAmZHJtX21vZGVfY29uZmlnX2Z1bmNz LmF0b21pY19jaGVjaygpIGNhbGxiYWNrLgo+ID4gPiArICoKPiA+ID4gKyAqIFNlZSBhbHNvOgo+ ID4gPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKQo+ID4gPiArICogZHJtX2Rw X2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKQo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6 Cj4gPiA+ICsgKgo+ID4gPiArICogMCBpZiB0aGUgbmV3IHN0YXRlIGlzIHZhbGlkLCBuZWdhdGl2 ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiA+ID4gKyAqLwo+ID4gPiAraW50IGRybV9kcF9tc3Rf YXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ID4gK3sKPiA+ ID4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncjsKPiA+ID4gKwlzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlOwo+ID4gPiArCWludCBpLCByZXQg PSAwOwo+ID4gPiArCj4gPiA+ICsJZm9yX2VhY2hfbmV3X21zdF9tZ3JfaW5fc3RhdGUoc3RhdGUs IG1nciwgbXN0X3N0YXRlLCBpKSB7Cj4gPiA+ICsJCXJldCA9IGRybV9kcF9tc3RfYXRvbWljX2No ZWNrX3RvcG9sb2d5X3N0YXRlKG1nciwgbXN0X3N0YXRlKTsKPiA+ID4gKwkJaWYgKHJldCkKPiA+ ID4gKwkJCWJyZWFrOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ ICt9Cj4gPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKTsKPiA+ID4g Kwo+ID4gPiArY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGVfZnVuY3MgPSB7Cj4gPiA+ICAJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUg PSBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9zdGF0ZSwKPiA+ID4gIAkuYXRvbWljX2Rlc3Ryb3lfc3Rh dGUgPSBkcm1fZHBfbXN0X2Rlc3Ryb3lfc3RhdGUsCj4gPiA+ICB9Owo+ID4gPiArRVhQT1JUX1NZ TUJPTChkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzKTsKPiA+ID4gIAo+ID4gPiAgLyoq Cj4gPiA+ICAgKiBkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGU6IGdldCBNU1QgdG9w b2xvZ3kgc3RhdGUKPiA+ID4gQEAgLTMyMTYsMTMgKzM0NDQsMTEgQEAgaW50IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyX2luaXQoc3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICpt Z3IsCj4gPiA+ICAJCXJldHVybiAtRU5PTUVNOwo+ID4gPiAgCj4gPiA+ICAJbXN0X3N0YXRlLT5t Z3IgPSBtZ3I7Cj4gPiA+IC0KPiA+ID4gLQkvKiBtYXguIHRpbWUgc2xvdHMgLSBvbmUgc2xvdCBm b3IgTVRQIGhlYWRlciAqLwo+ID4gPiAtCW1zdF9zdGF0ZS0+YXZhaWxfc2xvdHMgPSA2MzsKPiA+ ID4gKwlJTklUX0xJU1RfSEVBRCgmbXN0X3N0YXRlLT52Y3Bpcyk7Cj4gPiA+ICAKPiA+ID4gIAlk cm1fYXRvbWljX3ByaXZhdGVfb2JqX2luaXQoJm1nci0+YmFzZSwKPiA+ID4gIAkJCQkgICAgJm1z dF9zdGF0ZS0+YmFzZSwKPiA+ID4gLQkJCQkgICAgJm1zdF9zdGF0ZV9mdW5jcyk7Cj4gPiA+ICsJ CQkJICAgICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzKTsKPiA+ID4gIAo+ID4gPiAg CXJldHVybiAwOwo+ID4gPiAgfQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jCj4gPiA+IGluZGV4IDEzMmU5NzgyMjdmYi4uOGU4NWUwNGE1OTQ4IDEwMDY0NAo+ID4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiA+IEBAIC0xMjU5Miw2ICsx MjU5MiwxMCBAQCBzdGF0aWMgaW50IGludGVsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Rldmlj ZQo+ID4gPiAqZGV2LAo+ID4gPiAgCQkJCSAgICAgICAiW21vZGVzZXRdIiA6ICJbZmFzdHNldF0i KTsKPiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gKwlyZXQgPSBkcm1fZHBfbXN0X2F0b21pY19jaGVj ayhzdGF0ZSk7Cj4gPiA+ICsJaWYgKHJldCkKPiA+ID4gKwkJcmV0dXJuIHJldDsKPiA+ID4gKwo+ ID4gPiAgCWlmIChhbnlfbXMpIHsKPiA+ID4gIAkJcmV0ID0gaW50ZWxfbW9kZXNldF9jaGVja3Mo c3RhdGUpOwo+ID4gPiAgCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcF9tc3QuYwo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5j Cj4gPiA+IGluZGV4IDRkZTI0N2RkZjA1Zi4uYmUyZDFhYzdkODdkIDEwMDY0NAo+ID4gPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ID4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ID4gPiBAQCAtNDEsOCArNDEsMTMgQEAgc3Rh dGljIGJvb2wgaW50ZWxfZHBfbXN0X2NvbXB1dGVfY29uZmlnKHN0cnVjdAo+ID4gPiBpbnRlbF9l bmNvZGVyICplbmNvZGVyLAo+ID4gPiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ig PSBjb25uX3N0YXRlLT5jb25uZWN0b3I7Cj4gPiA+ICAJdm9pZCAqcG9ydCA9IHRvX2ludGVsX2Nv bm5lY3Rvcihjb25uZWN0b3IpLT5wb3J0Owo+ID4gPiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSA9IHBpcGVfY29uZmlnLT5iYXNlLnN0YXRlOwo+ID4gPiArCXN0cnVjdCBkcm1fY3J0 YyAqY3J0YyA9IHBpcGVfY29uZmlnLT5iYXNlLmNydGM7Cj4gPiA+ICsJc3RydWN0IGRybV9jcnRj X3N0YXRlICpvbGRfY3J0Y19zdGF0ZSA9Cj4gPiA+ICsJCWRybV9hdG9taWNfZ2V0X29sZF9jcnRj X3N0YXRlKHN0YXRlLCBjcnRjKTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm5ld19j cnRjX3N0YXRlID0gJnBpcGVfY29uZmlnLT5iYXNlOwo+ID4gPiAgCWludCBicHA7Cj4gPiA+IC0J aW50IGxhbmVfY291bnQsIHNsb3RzID0gMDsKPiA+ID4gKwlpbnQgbGFuZV9jb3VudCwgc2xvdHMg PQo+ID4gPiArCQl0b19pbnRlbF9jcnRjX3N0YXRlKG9sZF9jcnRjX3N0YXRlKS0+ZHBfbV9uLnR1 Owo+ID4gPiAgCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0g JnBpcGVfY29uZmlnLQo+ID4gPiA+YmFzZS5hZGp1c3RlZF9tb2RlOwo+ID4gPiAgCWludCBtc3Rf cGJuOwo+ID4gPiAgCWJvb2wgY29uc3RhbnRfbiA9IGRybV9kcF9oYXNfcXVpcmsoJmludGVsX2Rw LT5kZXNjLAo+ID4gPiBAQCAtNzcsOCArODIsMTIgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBfbXN0 X2NvbXB1dGVfY29uZmlnKHN0cnVjdAo+ID4gPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4g PiAgCW1zdF9wYm4gPSBkcm1fZHBfY2FsY19wYm5fbW9kZShhZGp1c3RlZF9tb2RlLT5jcnRjX2Ns b2NrLCBicHApOwo+ID4gPiAgCXBpcGVfY29uZmlnLT5wYm4gPSBtc3RfcGJuOwo+ID4gPiAgCj4g PiA+IC0JLyogWm9tYmllIGNvbm5lY3RvcnMgY2FuJ3QgaGF2ZSBWQ1BJIHNsb3RzICovCj4gPiA+ IC0JaWYgKCFkcm1fY29ubmVjdG9yX2lzX3VucmVnaXN0ZXJlZChjb25uZWN0b3IpKSB7Cj4gPiA+ ICsJLyogT25seSBjaGFuZ2UgVkNQSSBhbGxvY2F0aW9uIG9uIGFjdHVhbCBtb2RlIGNoYW5nZXMs IHRvIHByZXZlbnQgdXMKPiA+ID4gKwkgKiBmcm9tIHRyeWluZyB0byBhbGxvY2F0ZSBWQ1BJIHRv IHBvcnRzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0IHdoZW4gd2UKPiA+ID4gKwkgKiBtYXkganVzdCBi ZSB0cnlpbmcgdG8gZGlzYWJsZSBEUE1TIG9uIHRoZW0KPiA+ID4gKwkgKi8KPiA+ID4gKwlpZiAo bmV3X2NydGNfc3RhdGUtPm1vZGVfY2hhbmdlZCB8fAo+ID4gPiArCSAgICBuZXdfY3J0Y19zdGF0 ZS0+Y29ubmVjdG9yc19jaGFuZ2VkKSB7Cj4gPiAKPiA+IFdoeSBleGFjdGx5IGlzIHRoaXMgbmVl ZGVkPyBXZSBvbmx5IGNhbGwgY29tcHV0ZV9jb25maWcgb24gdGhlIGVub2NvZGVyCj4gPiB3aGVu IGVuYWJsaW5nIGFuIG91dHB1dC4gTm90IHdoZW4gZGlzYWJsaW5nIG9uZS4gU2ltaWxhciBmb3Ig dGhlIGF0b21pYwo+ID4gaGVscGVycyBhbmQgdGhlIHZhcmlvdXMgZW5jb2RlciBjYWxsYmFja3Mg KHlvdSBoYXZlIHRoZSBzYW1lIGNoYW5nZSBpbiB0aGUKPiA+IG5vdXZlYXUgY29kZSkuIERpZCB0 aGlzIGFjdHVhbGx5IGJsb3cgdXAgd2hpbGUgdGVzdGluZz8KPiAKPiB5ZXMtaXQgbG9va2VkIGxp a2Ugd2Ugd2VyZSBjYWxsaW5nIGNvbXB1dGVfY29uZmlnIG9uIHNpbXBsZSBEUE1TIG9uLT5vZmYK PiBjaG5nZXMgYXMgd2VsbCwgdGhpcyBlbmRlZCB1cCBtYWtpbmcgaXQgc28gd2Ugd291bGRuJ3Qg dHJ5IGNoYW5naW5nIHRoZSBWQ1BJCj4gYWxsb2NhdGlvbiBvbiBzdWNoIGNvbW1pdHMuCgpBaCBy aWdodCwgd2UgZGlzY3Vzc2VkIGFsbCB0aGlzIHdoZW4gYWRkaW5nIHRoZSBpc191bnJlZ2lzdGVy ZWQoKSBjaGVjay4KSWYgd2UgZG9uJ3QgY2hhbmdlIHRoZSBwb3J0IGxpZmV0aW1lIChidXQgb25s eSB3aGVuIGtmcmVlIGlzIGNhbGxlZCkgdGhlbgp0aGVyZSdzIG5vIG5lZWQgdG8gY2hhbmdlIGFu eXRoaW5nIGhlcmUuIEFsbG93cyB1cyB0byBrZWVwIHRoZSBuaWNlCmNvbnNpc3RlbmN5IG9mIHRo ZSBpc191bnJlZ2lzdGVyZWQoKSBjaGVjayBpbiBkcml2ZXIgY29kZS4KCkkgc2hvdWxkIGhhdmUg cmV3cml0dGVuIHRoaXMgd2hlbiBJIHJlYWxpemVkIHRoYXQgeW91J3ZlIGNoYW5nZWQgdGhlCmxp ZmV0aW1lIHJ1bGVzIGluIGEgZGlmZmVyZW50IHdheSB0aGFuIHdoYXQgSSBoYWQgaW4gbWluZCwg YXMtaXMgbXkKY29tbWVudCBkaWRuJ3QgbWFrZSBtdWNoIHNlbnNlLgotRGFuaWVsCgo+IEFDSyBv biBhbGwgb2YgdGhlIG90aGVyIGNvbW1lbnRzIGhlcmUuCj4gPiAKPiA+ID4gIAkJc2xvdHMgPSBk cm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdGF0ZSwKPiA+ID4gIAkJCQkJCSAgICAgICZp bnRlbF9kcC0+bXN0X21nciwKPiA+ID4gIAkJCQkJCSAgICAgIHBvcnQsCj4gPiA+IEBAIC0xMDcs MzYgKzExNiwzOSBAQCBzdGF0aWMgYm9vbCBpbnRlbF9kcF9tc3RfY29tcHV0ZV9jb25maWcoc3Ry dWN0Cj4gPiA+IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiA+ICAJcmV0dXJuIHRydWU7Cj4g PiA+ICB9Cj4gPiA+ICAKPiA+ID4gLXN0YXRpYyBpbnQgaW50ZWxfZHBfbXN0X2F0b21pY19jaGVj ayhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gPiAtCQlzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqbmV3X2Nvbm5fc3RhdGUpCj4gPiA+ICtzdGF0aWMgaW50Cj4gPiA+ICtp bnRlbF9kcF9tc3RfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is Cj4gPiA+ICsJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpuZXdfY29ubl9zdGF0ZSkK PiA+ID4gIHsKPiA+ID4gKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3Ig PQo+ID4gPiArCQl0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKPiA+ID4gKwlzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciA9Cj4gPiA+ICsJCSZpbnRlbF9jb25uZWN0b3It Pm1zdF9wb3J0LT5tc3RfbWdyOwo+ID4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQg PSBpbnRlbF9jb25uZWN0b3ItPnBvcnQ7Cj4gPiA+ICAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUg KnN0YXRlID0gbmV3X2Nvbm5fc3RhdGUtPnN0YXRlOwo+ID4gPiAtCXN0cnVjdCBkcm1fY29ubmVj dG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZTsKPiA+ID4gLQlzdHJ1Y3QgZHJtX2NydGMgKm9sZF9j cnRjOwo+ID4gPiAtCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+ID4gLQlp bnQgc2xvdHMsIHJldCA9IDA7Cj4gPiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9s ZF9jb25uX3N0YXRlID0KPiA+ID4gKwkJZHJtX2F0b21pY19nZXRfb2xkX2Nvbm5lY3Rvcl9zdGF0 ZShzdGF0ZSwgY29ubmVjdG9yKTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKm9sZF9jcnRjID0g b2xkX2Nvbm5fc3RhdGUtPmNydGMsCj4gPiA+ICsJCQkqbmV3X2NydGMgPSBuZXdfY29ubl9zdGF0 ZS0+Y3J0YzsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlLCAq bmV3X2NydGNfc3RhdGU7Cj4gPiA+ICAKPiA+ID4gLQlvbGRfY29ubl9zdGF0ZSA9IGRybV9hdG9t aWNfZ2V0X29sZF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gPiA+IC0Jb2xk X2NydGMgPSBvbGRfY29ubl9zdGF0ZS0+Y3J0YzsKPiA+IAo+ID4gQmlrZXNoZWQ6IFJld29ya2lu ZyBhbGwgdGhlIGFib3ZlIGhpZGVzIHRoZSByZWFsIGNoYW5nZXMgcXVpdGUgYSBiaXQuCj4gPiAK PiA+ID4gIAlpZiAoIW9sZF9jcnRjKQo+ID4gPiAtCQlyZXR1cm4gcmV0Owo+ID4gPiArCQlyZXR1 cm4gMDsKPiA+ID4gIAo+ID4gPiAtCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY3J0 Y19zdGF0ZShzdGF0ZSwgb2xkX2NydGMpOwo+ID4gPiAtCXNsb3RzID0gdG9faW50ZWxfY3J0Y19z dGF0ZShjcnRjX3N0YXRlKS0+ZHBfbV9uLnR1Owo+ID4gPiAtCWlmIChkcm1fYXRvbWljX2NydGNf bmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSAmJiBzbG90cyA+IDApIHsKPiA+ID4gLQkJc3RydWN0 IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiA+IC0JCXN0cnVjdCBkcm1fZW5jb2Rl ciAqb2xkX2VuY29kZXI7Cj4gPiA+ICsJb2xkX2NydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9v bGRfY3J0Y19zdGF0ZShzdGF0ZSwgb2xkX2NydGMpOwo+ID4gPiArCWlmICghb2xkX2NydGNfc3Rh dGUgfHwKPiA+IAo+ID4gIW9sZF9jcnRjX3N0YXRlIHdvdWxkIGJlIGEgZnJhbWV3b3JrIGJ1Zy4g SnVzdCByZW1vdmUgdGhhdCBjaGVjay4KPiA+IAo+ID4gPiArCSAgICAhdG9faW50ZWxfY3J0Y19z dGF0ZShvbGRfY3J0Y19zdGF0ZSktPmRwX21fbi50dSkKPiA+ID4gKwkJcmV0dXJuIDA7Cj4gPiAK PiA+IEhtLCB3aHkgZG8gd2UgbmVlZCB0aGlzPyBIYXZpbmcgYSBEUCBwb3J0IHByZXZpb3VzbHkg ZW5hYmxlZCB3aXRoIGEgMCB0dQo+ID4gc291bmRzIGxpa2UgYSBwcmV0dHkgYmlnIGRyaXZlciBi dWcuCj4gPiA+ICAKPiA+ID4gLQkJb2xkX2VuY29kZXIgPSBvbGRfY29ubl9zdGF0ZS0+YmVzdF9l bmNvZGVyOwo+ID4gPiAtCQltZ3IgPSAmZW5jX3RvX21zdChvbGRfZW5jb2RlciktPnByaW1hcnkt PmRwLm1zdF9tZ3I7Cj4gPiA+ICsJLyogSWYgd2Ugc3dpdGNoZWQgQ1JUQ3MsIGNsZWFyIHRoZSBw cmV2aW91cyBvbmUncyBhbGxvY2F0aW9uICovCj4gPiA+ICsJbmV3X2NydGNfc3RhdGUgPSBkcm1f YXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwgb2xkX2NydGMpOwo+ID4gPiArCWlmIChu ZXdfY3J0Y19zdGF0ZS0+Y29ubmVjdG9yc19jaGFuZ2VkICYmICFuZXdfY3J0Y19zdGF0ZS0+ZW5h YmxlKQo+ID4gPiArCQl0b19pbnRlbF9jcnRjX3N0YXRlKG5ld19jcnRjX3N0YXRlKS0+ZHBfbV9u LnR1ID0gMDsKPiA+IAo+ID4gTm8gaWRlYSB3aHkgd2UgbmVlZCB0byBjbGVhciB0aGlzIGhlcmU/ IFNob3VsZG4ndCB3ZSBqdXN0IGNsZWFyIHRoaXMKPiA+IHVuY29uZGl0aW9uYWxseSBpZiB3ZSBy ZWxlYXNlIHRoZSBhbGxvY2F0aW9uLgo+ID4gCj4gPiBBbHNvIG5hbWluZyBjb252ZW50aW9uLCBJ J2QgY2FsbCB0aGlzIG9sZF9jcnRjX25ld19zdGF0ZSwgYW5kIG1heWJlCj4gPiBvbGRfY3J0Y19v bGRfc3RhdGUuIFRvIG1ha2UgaXQgY2xlYXIgdGhlc2UgYXJlIHRoZSBvbGQvbmV3IHN0YXRlcyBm b3IKPiA+IG9sZF9jcnRjLiBJbnN0ZWFkIG9mIG9sZC9uZXcgc3RhdGUgZm9yIHRoZSBuZXcgY3J0 Yy4KPiA+IAo+ID4gPiAgCj4gPiA+IC0JCXJldCA9IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3Bp X3Nsb3RzKHN0YXRlLCBtZ3IsIHNsb3RzKTsKPiA+ID4gLQkJaWYgKHJldCkKPiA+ID4gLQkJCURS TV9ERUJVR19LTVMoImZhaWxlZCByZWxlYXNpbmcgJWQgdmNwaSBzbG90czolZFxuIiwKPiA+ID4g c2xvdHMsIHJldCk7Cj4gPiA+IC0JCWVsc2UKPiA+ID4gLQkJCXRvX2ludGVsX2NydGNfc3RhdGUo Y3J0Y19zdGF0ZSktPmRwX21fbi50dSA9IDA7Cj4gPiA+IC0JfQo+ID4gPiAtCXJldHVybiByZXQ7 Cj4gPiA+ICsJaWYgKG5ld19jcnRjKQo+ID4gPiArCQlyZXR1cm4gMDsKPiA+IAo+ID4gTm90IHN1 cmUgd2h5IHdlIHNob3VsZG4ndCByZWxlYXNlIHRoaXM/IElmIHdlIGhhbmRsZSB0aGlzIGluIGhl bHBlcnMsIGl0Cj4gPiB3b3VsZCByZW1vdmUgcGlsZXMgb2Ygc3BlY2lhbCBjYXNpbmcgY29kZSBo ZXJlIEkgdGhpbmsuIFBsdXMgcmVtb3ZlCj4gPiBzcGVjaWFsIGNvZGUgaW4gdGhlIGhscGVycy4K PiA+IAo+ID4gCj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gZHJtX2RwX2F0b21pY19yZWxlYXNlX3Zj cGlfc2xvdHMoc3RhdGUsIG1nciwgcG9ydCk7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gIHN0YXRp YyB2b2lkIGludGVsX21zdF9kaXNhYmxlX2RwKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVy LAo+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4g PiBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiA+ID4gaW5kZXggM2ZhY2ViNjZm NWNiLi4yMzkyZTEyYjZiY2UgMTAwNjQ0Cj4gPiA+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9kcF9t c3RfaGVscGVyLmgKPiA+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ ID4gPiBAQCAtNDA2LDkgKzQwNiwxNiBAQCBzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgewo+ID4gPiAg Cj4gPiA+ICAjZGVmaW5lIHRvX2RwX21zdF90b3BvbG9neV9zdGF0ZSh4KSBjb250YWluZXJfb2Yo eCwgc3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUsIGJhc2UpCj4gPiA+ICAK PiA+ID4gK3N0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uIHsKPiA+IAo+ID4gSSB0aGluayBh IGNvbW1lbnQgaGVyZSB0aGF0IHRoaXMgcG9pbnRlciBob2xkcyBhIGZ1bGwgcmVmZXJlbmNlIChl dmVuIHBhc3QKPiA+IHdoZW4gdGhlIGNvbm5lY3RvciBpcyB1bnBsdWdnZWQpIHdvdWxkIGJlIGdv b2QuIE90aGVyd2lzZSB0aGUgbG9vcCBpbgo+ID4gcmVsZWFzZV92Y3BpIHdvdWxkIGJlIGJ1Z2d5 Lgo+ID4gCj4gPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsKPiA+ID4gKwlpbnQg dmNwaTsKPiA+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7Cj4gPiA+ICt9Owo+ID4gPiArCj4g PiA+ICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSB7Cj4gPiA+ICAJc3RydWN0IGRy bV9wcml2YXRlX3N0YXRlIGJhc2U7Cj4gPiA+IC0JaW50IGF2YWlsX3Nsb3RzOwo+ID4gPiArCXN0 cnVjdCBsaXN0X2hlYWQgdmNwaXM7Cj4gPiA+ICsJdTggdmNwaV9hbGxvY2F0ZWQ7Cj4gPiA+ICAJ c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiA+ICB9Owo+ID4gPiAgCj4g PiA+IEBAIC02MTksMTQgKzYyNiwxNyBAQCB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3N1 c3BlbmQoc3RydWN0Cj4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOwo+ID4gPiAg aW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3Jlc3VtZShzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9tZ3IgKm1ncik7Cj4gPiA+ICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZQo+ ID4gPiAqZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSwKPiA+ID4gIAkJCQkJCQkJICAgIHN0cnVjdAo+ID4gPiBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyKTsKPiA+ID4gLWludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9z bG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiA+IC0JCQkJICBzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4gLQkJCQkgIHN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQsIGludCBwYm4pOwo+ID4gPiAtaW50IGRybV9kcF9hdG9taWNfcmVsZWFz ZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ID4gLQkJCQkg ICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiAtCQkJCSAgICAg aW50IHNsb3RzKTsKPiA+ID4gK2ludCBfX211c3RfY2hlY2sKPiA+ID4gK2RybV9kcF9hdG9taWNf ZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ID4gKwkJ CSAgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiArCQkJICAg ICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBibik7Cj4gPiA+ICtpbnQgX19t dXN0X2NoZWNrCj4gPiA+ICtkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiA+ICsJCQkJIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyLAo+ID4gPiArCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0 KTsKPiA+ID4gIGludCBkcm1fZHBfc2VuZF9wb3dlcl91cGRvd25fcGh5KHN0cnVjdCBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiAgCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0 ICpwb3J0LCBib29sIHBvd2VyX3VwKTsKPiA+ID4gK2ludCBfX211c3RfY2hlY2sgZHJtX2RwX21z dF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiA+ID4gIAo+ ID4gPiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcwo+ID4gPiBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzOwo+ID4gPiAgCj4gPiA+IC0tIAo+ID4gPiAy LjE5LjEKPiA+ID4gCj4gLS0gCj4gQ2hlZXJzLAo+IAlMeXVkZSBQYXVsCj4gCgotLSAKRGFuaWVs IFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cu ZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K Tm91dmVhdSBtYWlsaW5nIGxpc3QKTm91dmVhdUBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9ub3V2ZWF1Cg==