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: Mon, 26 Nov 2018 16:36:46 -0500 Message-ID: <62577f81fbccbbc1f2c06183abdb490e35a5b0d5.camel@redhat.com> References: <20181116005008.7243-1-lyude@redhat.com> <20181116005008.7243-4-lyude@redhat.com> <20181126210421.GQ4266@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qt1-f194.google.com (mail-qt1-f194.google.com [209.85.160.194]) by gabe.freedesktop.org (Postfix) with ESMTPS id D76AE89CD5 for ; Mon, 26 Nov 2018 21:36:48 +0000 (UTC) Received: by mail-qt1-f194.google.com with SMTP id t13so19461242qtn.3 for ; Mon, 26 Nov 2018 13:36:48 -0800 (PST) In-Reply-To: <20181126210421.GQ4266@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyMDE4LTExLTI2IGF0IDIyOjA0ICswMTAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ IE9uIFRodSwgTm92IDE1LCAyMDE4IGF0IDA3OjUwOjA1UE0gLTA1MDAsIEx5dWRlIFBhdWwgd3Jv dGU6Cj4gPiBUaGVyZSBoYXMgYmVlbiBhIFRPRE8gd2FpdGluZyBmb3IgcXVpdGUgYSBsb25nIHRp bWUgaW4KPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3kuYzoKPiA+IAo+ID4gCS8qIFdlIGNhbm5vdCBy ZWx5IG9uIHBvcnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQo+ID4gCSAqIHRvcG9sb2d5X3N0 YXRlLT5hdmFpbF9zbG90cyBhcyB0aGUgcG9ydCBtYXkgbm90IGV4aXN0IGlmIHRoZSBwYXJlbnQK PiA+IAkgKiBicmFuY2ggZGV2aWNlIHdhcyB1bnBsdWdnZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVk IGJ5IHRyYWNraW5nCj4gPiAJICogcGVyLXBvcnQgc2xvdCBhbGxvY2F0aW9uIGluIGRybV9kcF9t c3RfdG9wb2xvZ3lfc3RhdGUgaW5zdGVhZCBvZgo+ID4gCSAqIGRlcGVuZGluZyBvbiB0aGUgY2Fs bGVyIHRvIHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8gcmVsZWFzZS4KPiA+IAkgKi8KPiA+IAo+ ID4gVGhhdCdzIG5vdCB0aGUgb25seSByZWFzb24gd2Ugc2hvdWxkIGZpeCB0aGlzOiBmb3JjaW5n IHRoZSBkcml2ZXIgdG8KPiA+IHRyYWNrIHRoZSBWQ1BJIGFsbG9jYXRpb25zIHRocm91Z2hvdXQg YSBzdGF0ZSdzIGF0b21pYyBjaGVjayBpcwo+ID4gZXJyb3IgcHJvbmUsIGJlY2F1c2UgaXQgbWVh bnMgdGhhdCBleHRyYSBjYXJlIGhhcyB0byBiZSB0YWtlbiB3aXRoIHRoZQo+ID4gb3JkZXIgdGhh dCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIGFuZAo+ID4gZHJtX2RwX2F0b21pY19y ZWxlYXNlX3ZjcGlfc2xvdHMoKSBhcmUgY2FsbGVkIGluIGluIG9yZGVyIHRvIGVuc3VyZQo+ID4g aWRlbXBvdGVuY3kuIEN1cnJlbnRseSB0aGUgb25seSBkcml2ZXIgYWN0dWFsbHkgdXNpbmcgdGhl c2UgaGVscGVycywKPiA+IGk5MTUsIGRvZXNuJ3QgZXZlbiBkbyB0aGlzIGNvcnJlY3RseTogbXVs dGlwbGUgLT5iZXN0X2VuY29kZXIoKSBjaGVja3MKPiA+IHdpdGggaTkxNSdzIGN1cnJlbnQgaW1w bGVtZW50YXRpb24gd291bGQgbm90IGJlIGlkZW1wb3RlbnQgYW5kIHdvdWxkCj4gPiBvdmVyLWFs bG9jYXRlIFZDUEkgc2xvdHMsIHNvbWV0aGluZyBJIGxlYXJuZWQgdHJ5aW5nIHRvIGltcGxlbWVu dAo+ID4gZmFsbGJhY2sgcmV0cmFpbmluZyBpbiBNU1QuCj4gPiAKPiA+IFNvOiBzaW1wbGlmeSB0 aGlzIHdob2xlIG1lc3MsIGFuZCB0ZWFjaCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygp Cj4gPiBhbmQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSB0byB0cmFjayB0aGUg VkNQSSBhbGxvY2F0aW9ucyBmb3IKPiA+IGVhY2ggcG9ydC4gVGhpcyBhbGxvd3MgdXMgdG8gZW5z dXJlIGlkZW1wb3RlbmN5IHdpdGhvdXQgaGF2aW5nIHRvIHJlbHkKPiA+IG9uIHRoZSBkcml2ZXIg YXMgbXVjaC4gQWRkaXRpb25hbGx5OiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnkK PiA+IGtpbmQgb2YgVkNQSSBzbG90IHRyYWNraW5nIGFueW1vcmUgaWYgaXQgZG9lc24ndCBuZWVk IGl0IGZvciBpdCdzIG93bgo+ID4gaW50ZXJuYWwgc3RhdGUuCj4gPiAKPiA+IEFkZGl0aW9uYWxs eTsgdGhpcyBhZGRzIGEgbmV3IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkgaGVscGVyIHdoaWNo Cj4gPiBtdXN0IGJlIHVzZWQgYnkgYXRvbWljIGRyaXZlcnMgdG8gcGVyZm9ybSB2YWxpZGl0eSBj aGVja3MgZm9yIHRoZSBuZXcKPiA+IFZDUEkgYWxsb2NhdGlvbnMgaW5jdXJyZWQgYnkgYSBzdGF0 ZS4KPiA+IAo+ID4gQWxzbzogdXBkYXRlIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBtYWtlIGl0IG1v cmUgb2J2aW91cyB0aGF0IHRoZXNlCj4gPiAvbXVzdC8gYmUgY2FsbGVkIGJ5IC9hbGwvIGF0b21p YyBkcml2ZXJzIHN1cHBvcnRpbmcgTVNULgo+ID4gCj4gPiBDaGFuZ2VzIHNpbmNlIHY2Ogo+ID4g IC0gS2VlcCBhIGtyZWYgdG8gYWxsIG9mIHRoZSBwb3J0cyB3ZSBoYXZlIGFsbG9jYXRpb25zIG9u LiBUaGlzIHJlcXVpcmVkCj4gPiAgICBhIGdvb2QgYml0IG9mIGNoYW5naW5nIHRvIHdoZW4gd2Ug Y2FsbCBkcm1fZHBfZmluZF92Y3BpX3Nsb3RzKCksCj4gPiAgICBtYWlubHkgdGhhdCB3ZSBuZWVk IHRvIGVuc3VyZSB0aGF0IHdlIG9ubHkgcmVkbyBWQ1BJIGFsbG9jYXRpb25zIG9uCj4gPiAgICBh Y3R1YWwgbW9kZSBvciBDUlRDIGNoYW5nZXMsIG5vdCBjcnRjX3N0YXRlLT5hY3RpdmUgY2hhbmdl cy4KPiA+ICAgIEFkZGl0aW9uYWxseSwgd2Ugbm8gbG9uZ2VyIHRha2UgdGhlIHJlZ2lzdHJhdGlv biBvZiB0aGUgRFJNIGNvbm5lY3Rvcgo+ID4gICAgZm9yIGVhY2ggcG9ydCBpbnRvIGFjY291bnQg YmVjYXVzZSBzbyBsb25nIGFzIHdlIGhhdmUgYSBrcmVmIHRvIHRoZQo+ID4gICAgcG9ydCBpbiB0 aGUgbmV3IG9yIHByZXZpb3VzIGF0b21pYyBzdGF0ZSwgdGhlIGNvbm5lY3RvciB3aWxsIHN0YXkK PiA+ICAgIHJlZ2lzdGVyZWQuCj4gCj4gSSB3cml0ZSBhbiBlbnRpcmUgcGlsZSBvZiBzbWFsbCBu aXRwaXRzIChzdGlsbCBpbmNsdWRlZCBtb3N0IG9mIHRoZW0KPiBiZWxvdyksIHVudGlsIEkgcmVh bGl6ZWQgdGhpcyBoZXJlIHdvbnQgd29yay4gRGVsYXlpbmcgdGhlIGNhbGwgdG8gZGVzdHJveQo+ IHRoZSBjb25uZWN0b3IgKHdlbGwsIHVucmVnaXN0ZXIgaXQgcmVhbGx5KSB3cmVha3MgdGhlIGRl c2lnbiB3ZSd2ZSBjb21lIHVwCj4gd2l0aCB0aHVzIGZhciwgcmVzdWx0aW5nIGluIG1vc3Qgb2Yg bXkgY29tbWVudHMgaGVyZS4KPiAKPiBJbnN0ZWFkLCBhbGwgd2UgbmVlZCB0byBkbyBpcyBkZWxh eSB0aGUga2ZyZWUocG9ydCkgYXQgdGhlIGJvdHRvbSBvZgo+IGRybV9kcF9kZXN0cm95X3BvcnQo KS4gVGhlIHZjcGkgYWxsb2NhdGlvbiBzdHJ1Y3R1cmUgX29ubHlfIG5lZWRzIHRoZQo+IHBvaW50 ZXIgdmFsdWUgdG8gc3RheSB2YWxpZCwgYXMgYSBsb29rdXAga2V5LiBJdCBkb2Vzbid0IGNhcmUg YXQgYWxsIGFib3V0Cj4gYW55dGhpbmcgYWN0dWFsbHkgc3RvcmVkIGluIHRoZXJlLiBTbyB0aGUg b25seSB0aGluZyB3ZSBuZWVkIHRvIGRlbGF5IGlzCj4gdGhlIGtmcmVlLiBJIHRoaW5rIHRoZSBz aW1wbGVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIGFkZCBhIDJuZCBrcmVmCj4gKHBvcnQt PmtmcmVlX3JlZiBvciBzb21ldGhpbmcgbGlrZSB0aGF0KSwgd2l0aCBvbiByZWZlcmVuY2UgaGVs ZCBieSB0aGUKPiBwb3J0IGl0c2VsZiAocmVsZWFzZWQgaW4gZHJtX2RwX2Rlc3Ryb3lfcG9ydCks IGFuZCB0aGUgb3RoZXIgb25lIGhlbGQKPiBhcy1uZWVkZWQgYnkgdGhlIHZjcGkgYWxsb2NhdGlv biBsaXN0cy4KPiAKPiBJIHRoaW5rIGlmIHdlIGdvIHdpdGggdGhpcyBkZXNpZ24gaW5zdGVhZCBv ZiByZXRyb2ZpdHRpbmcgYSBzZW1hbnRpYwo+IGNoYW5nZSBvZiB0aGUgcG9ydCBsaWZldGltZSBp dHNlbGYsIGFsbCB0aGUgY29tcGxpY2F0aW9ucyBJIGNvbXBsYWluIGFib3V0Cj4gYmVsb3cgc2hv dWxkIGRpc2FwcGVhci4KPiAKPiBQaWxlcyBvZiBjb21tZW50cyBiZWxvdy4KPiAKPiBDaGVlcnMs IERhbmllbAo+IAo+ID4gIC0gVXNlIHRoZSBzbWFsbCBjaGFuZ2VzIHRvIGRybV9kcF9wdXRfcG9y dCgpIHRvIGFkZCBldmVuIG1vcmUgZXJyb3IKPiA+ICAgIGNoZWNraW5nIHRvIG1ha2UgbWlzdXNh Z2Ugb2YgdGhlIGhlbHBlcnMgbW9yZSBvYnZpb3VzLiBJIGFkZGVkIHRoaXMKPiA+ICAgIGFmdGVy IGhhdmluZyB0byBjaGFzZSBkb3duIHZhcmlvdXMgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0 aGF0Cj4gPiAgICBzdGFydGVkIHBvcHBpbmcgdXAgZnJvbSB0aGUgbmV3IGhlbHBlcnMgc28gbm8g b25lIGVsc2UgaGFzIHRvCj4gPiAgICB0cm91Ymxlc2hvb3QgdGhhdC4KPiA+ICAtIE1vdmUgc29t ZSBhY2NpZGVudGFsIERSTV9ERUJVR19LTVMoKSBjYWxscyB0byBEUk1fREVCVUdfQVRPTUlDKCkK PiA+ICAtIFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFnYWluLCBub3RlIHRoYXQgZmluZC9yZWxlYXNl KCkgc2hvdWxkIGJvdGggbm90IGJlCj4gPiAgICBjYWxsZWQgb24gdGhlIHNhbWUgcG9ydCBpbiBh IHNpbmdsZSBhdG9taWMgY2hlY2sgcGhhc2UgKGJ1dCBtdWx0aXBsZQo+ID4gICAgY2FsbHMgdG8g b25lIG9yIHRoZSBvdGhlciBpcyBPSykKPiA+IAo+ID4gQ2hhbmdlcyBzaW5jZSB2NDoKPiA+ICAt IERvbid0IHNraXAgdGhlIGF0b21pYyBjaGVja3MgZm9yIFZDUEkgYWxsb2NhdGlvbnMgaWYgbm8g bmV3IFZDUEkKPiA+ICAgIGFsbG9jYXRpb25zIGhhcHBlbiBpbiBhIHN0YXRlLiBUaGlzIG1ha2Vz IHRoZSBuZXh0IGNoYW5nZSBJJ20gYWJvdXQKPiA+ICAgIHRvIGxpc3QgaGVyZSBhIGxvdCBlYXNp ZXIgdG8gaW1wbGVtZW50Lgo+ID4gIC0gRG9uJ3QgaWdub3JlIFZDUEkgYWxsb2NhdGlvbnMgb24g ZGVzdHJveWVkIHBvcnRzLCBpbnN0ZWFkIGVuc3VyZSB0aGF0Cj4gPiAgICB3aGVuIHBvcnRzIGFy ZSBkZXN0cm95ZWQgYW5kIHN0aWxsIGhhdmUgVkNQSSBhbGxvY2F0aW9ucyBpbiB0aGUKPiA+ICAg IHRvcG9sb2d5IHN0YXRlLCB0aGUgb25seSBzdGF0ZSBjaGFuZ2VzIGFsbG93ZWQgYXJlIHJlbGVh c2luZyBzYWlkCj4gPiAgICBwb3J0cycgVkNQSS4gVGhpcyBwcmV2ZW50cyBhIHN0YXRlIHdpdGgg YSBtaXggb2YgVkNQSSBhbGxvY2F0aW9ucwo+ID4gICAgZnJvbSBkZXN0cm95ZWQgcG9ydHMsIGFu ZCBhbGxvY2F0aW9ucyBmcm9tIHZhbGlkIHBvcnRzLgo+ID4gCj4gPiBDaGFuZ2VzIHNpbmNlIHYz Ogo+ID4gIC0gRG9uJ3QgcmVsZWFzZSBWQ1BJIGFsbG9jYXRpb25zIGluIHRoZSB0b3BvbG9neSBz dGF0ZSBpbW1lZGlhdGVseSBpbgo+ID4gICAgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xv dHMoKSwgaW5zdGVhZCBtYXJrIHRoZW0gYXMgMCBhbmQgc2tpcAo+ID4gICAgb3ZlciB0aGVtIGlu IGRybV9kcF9tc3RfZHVwbGljYXRlX3N0YXRlKCkuIFRoaXMgbWFrZXMgaXQgc28KPiA+ICAgIGRy bV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgaXMgc3RpbGwgaWRlbXBvdGVudCB3aGls ZSBhbHNvCj4gPiAgICB0aHJvd2luZyB3YXJuaW5ncyBpZiB0aGUgZHJpdmVyIG1lc3NlcyB1cCBp dCdzIGJvb2sga2VlcGluZyBhbmQgdHJpZXMKPiA+ICAgIHRvIHJlbGVhc2UgVkNQSSBzbG90cyBv biBhIHBvcnQgdGhhdCBkb2Vzbid0IGhhdmUgYW55IHByZS1leGlzdGluZwo+ID4gICAgVkNQSSBh bGxvY2F0aW9uIC0gZGFudmV0Cj4gPiAgLSBDaGFuZ2UgbXN0X3N0YXRlL3N0YXRlIGluIHNvbWUg ZGVidWdnaW5nIG1lc3NhZ2VzIHRvICJtc3Qgc3RhdGUiCj4gPiAKPiA+IENoYW5nZXMgc2luY2Ug djI6Cj4gPiAgLSBVc2Uga21lbWR1cCgpIGZvciBkdXBsaWNhdGluZyBNU1Qgc3RhdGUgLSBkYW52 ZXQKPiA+ICAtIE1vdmUgcG9ydCB2YWxpZGF0aW9uIG91dCBvZiBkdXBsaWNhdGUgc3RhdGUgY2Fs bGJhY2sgLSBkYW52ZXQKPiA+ICAtIEhhbmRsZSBsb29waW5nIHRocm91Z2ggTVNUIHRvcG9sb2d5 IHN0YXRlcyBpbgo+ID4gICAgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKSBzbyB0aGUgZHJpdmVy IGRvZXNuJ3QgaGF2ZSB0byBkbyBpdAo+ID4gIC0gRml4IGRvY3VtZW50YXRpb24gaW4gZHJtX2Rw X2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKQo+ID4gIC0gTW92ZSB0aGUgYXRvbWljIGNoZWNrIGZv ciBlYWNoIGluZGl2aWR1YWwgdG9wb2xvZ3kgc3RhdGUgaW50byBpdCdzCj4gPiAgICBvd24gZnVu Y3Rpb24sIHJlZHVjZXMgaW5kZW50aW5nCj4gPiAgLSBEb24ndCBjb25zaWRlciAic3RhbGUiIE1T VCBwb3J0cyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBiYW5kd2lkdGgKPiA+ICAgIHJlcXVpcmVtZW50 cy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBvcmlnaW5hbGx5IHdlIHJlbGllZCBvbiB0aGUKPiA+ ICAgIHN0YXRlIGR1cGxpY2F0aW9uIGZ1bmN0aW9ucyB0byBwcnVuZSBhbnkgc3RhbGUgcG9ydHMg ZnJvbSB0aGUgbmV3Cj4gPiAgICBzdGF0ZSwgd2hpY2ggd291bGQgcHJldmVudCB1cyBmcm9tIGlu Y29ycmVjdGx5IGNvbnNpZGVyaW5nIHRoZWlyCj4gPiAgICBiYW5kd2lkdGggcmVxdWlyZW1lbnRz IGFsb25nc2lkZSBsZWdpdGltYXRlIG5ldyBwYXlsb2Fkcy4KPiA+ICAtIEFkZCBmdW5jdGlvbiBy ZWZlcmVuY2VzIGluIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgLSBkYW52ZXQK PiA+ICAtIEFubm90YXRlIGF0b21pYyBWQ1BJIGFuZCBhdG9taWMgY2hlY2sgZnVuY3Rpb25zIHdp dGggX19tdXN0X2NoZWNrCj4gPiAgICAtIGRhbnZldAo+ID4gCj4gPiBDaGFuZ2VzIHNpbmNlIHYx Ogo+ID4gIC0gRG9uJ3QgdXNlIHRoZSBub3ctcmVtb3ZlZCAtPmF0b21pY19jaGVjaygpIGZvciBw cml2YXRlIG9iamVjdHMgaG9vaywKPiA+ICAgIGp1c3QgZ2l2ZSBkcml2ZXJzIGEgZnVuY3Rpb24g dG8gY2FsbCB0aGVtc2VsdmVzCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IEx5dWRlIFBhdWwgPGx5 dWRlQHJlZGhhdC5jb20+Cj4gPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZnds bC5jaD4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMg fCAyOTQgKysrKysrKysrKysrKysrKysrKysrKystLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMgIHwgICA0ICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kcF9tc3QuYyAgIHwgIDY0ICsrKy0tLQo+ID4gIGluY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVs cGVyLmggICAgICAgfCAgMjQgKystCj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAzMTkgaW5zZXJ0aW9u cygrKSwgNjcgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0 X3RvcG9sb2d5LmMKPiA+IGluZGV4IDAwZmJlN2EyNjk5ZC4uMTgzZDBlODMyY2VkIDEwMDY0NAo+ ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ID4gQEAgLTI2MTcsMjEgKzI2 MTcsNDIgQEAgc3RhdGljIGludCBkcm1fZHBfaW5pdF92Y3BpKHN0cnVjdAo+ID4gZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ICB9Cj4gPiAgCj4gPiAgLyoqCj4gPiAtICogZHJtX2Rw X2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQgYW5kIGFkZCB2Y3BpIHNsb3RzIHRvIHRo ZSBzdGF0ZQo+ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIGFu ZCBhZGQgVkNQSSBzbG90cyB0byB0aGUgc3RhdGUKPiA+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9t aWMgc3RhdGUKPiA+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQK PiA+ICAgKiBAcG9ydDogcG9ydCB0byBmaW5kIHZjcGkgc2xvdHMgZm9yCj4gPiAgICogQHBibjog YmFuZHdpZHRoIHJlcXVpcmVkIGZvciB0aGUgbW9kZSBpbiBQQk4KPiA+ICAgKgo+ID4gLSAqIFJF VFVSTlM6Cj4gPiAtICogVG90YWwgc2xvdHMgaW4gdGhlIGF0b21pYyBzdGF0ZSBhc3NpZ25lZCBm b3IgdGhpcyBwb3J0IG9yIGVycm9yCj4gPiArICogQWxsb2NhdGVzIFZDUEkgc2xvdHMgdG8gQHBv cnQsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgVkNQSSBhbGxvY2F0aW9ucwo+ID4gaXQKPiA+ICsg KiBtYXkgaGF2ZSBoYWQuIEFueSBhdG9taWMgZHJpdmVycyB3aGljaCBzdXBwb3J0IE1TVCBtdXN0 IGNhbGwgdGhpcwo+ID4gZnVuY3Rpb24KPiA+ICsgKiBpbiB0aGVpciAmZHJtX2VuY29kZXJfaGVs cGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxiYWNrIHRvIGNoYW5nZQo+ID4gdGhlCj4gPiAr ICogY3VycmVudCBWQ1BJIGFsbG9jYXRpb24gZm9yIHRoZSBuZXcgc3RhdGUsIGJ1dCBvbmx5IHdo ZW4KPiA+ICsgKiAmZHJtX2NydGNfc3RhdGUubW9kZV9jaGFuZ2VkIG9yICZkcm1fY3J0Y19zdGF0 ZS5jb25uZWN0b3JzX2NoYW5nZWQgaXMKPiA+IHNldAo+ID4gKyAqIHRvIGVuc3VyZSBjb21wYXRp YmlsaXR5IHdpdGggdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyB0aGF0IHN0aWxsIHVzZSB0aGUKPiA+ ICsgKiBsZWdhY3kgbW9kZXNldHRpbmcgVUFQSS4KPiA+ICsgKgo+ID4gKyAqIEFsbG9jYXRpb25z IHNldCBieSB0aGlzIGZ1bmN0aW9uIGFyZSBub3QgY2hlY2tlZCBhZ2FpbnN0IHRoZSBiYW5kd2lk dGgKPiA+ICsgKiByZXN0cmFpbnRzIG9mIEBtZ3IgdW50aWwgdGhlIGRyaXZlciBjYWxscyBkcm1f ZHBfbXN0X2F0b21pY19jaGVjaygpLgo+ID4gKyAqCj4gPiArICogQWRkaXRpb25hbGx5LCBpdCBp cyBPSyB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgb24gdGhlCj4gPiBzYW1l Cj4gPiArICogQHBvcnQgYXMgbmVlZGVkLiBJdCBpcyBub3QgT0sgaG93ZXZlciwgdG8gY2FsbCB0 aGlzIGZ1bmN0aW9uIGFuZAo+ID4gKyAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3Rz KCkgaW4gdGhlIHNhbWUgYXRvbWljIGNoZWNrIHBoYXNlLgo+ID4gKyAqCj4gPiArICogU2VlIGFs c286Cj4gPiArICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKQo+ID4gKyAqIGRy bV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4gPiArICog VG90YWwgc2xvdHMgaW4gdGhlIGF0b21pYyBzdGF0ZSBhc3NpZ25lZCBmb3IgdGhpcyBwb3J0LCBv ciBhIG5lZ2F0aXZlCj4gPiBlcnJvcgo+ID4gKyAqIGNvZGUgaWYgdGhlIHBvcnQgbm8gbG9uZ2Vy IGV4aXN0cwo+ID4gICAqLwo+ID4gIGludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiAgCQkJCSAgc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiAgCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAq cG9ydCwgaW50IHBibikKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0 YXRlICp0b3BvbG9neV9zdGF0ZTsKPiA+IC0JaW50IHJlcV9zbG90czsKPiA+ICsJc3RydWN0IGRy bV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvcywgKnZjcGkgPSBOVUxMOwo+ID4gKwlpbnQgcHJldl9z bG90cywgcmVxX3Nsb3RzLCByZXQ7Cj4gPiAgCj4gPiAgCXRvcG9sb2d5X3N0YXRlID0gZHJtX2F0 b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCBtZ3IpOwo+ID4gIAlpZiAoSVNfRVJS KHRvcG9sb2d5X3N0YXRlKSkKPiA+IEBAIC0yNjQwLDIwICsyNjYxLDYwIEBAIGludCBkcm1fZHBf YXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QKPiA+IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl LAo+ID4gIAlwb3J0ID0gZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsK PiA+ICAJaWYgKHBvcnQgPT0gTlVMTCkKPiA+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4gLQlyZXFf c2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCBtZ3ItPnBibl9kaXYpOwo+ID4gLQlEUk1fREVCVUdf S01TKCJ2Y3BpIHNsb3RzIHJlcT0lZCwgYXZhaWw9JWRcbiIsCj4gPiAtCQkJcmVxX3Nsb3RzLCB0 b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ID4gIAo+ID4gLQlpZiAocmVxX3Nsb3RzID4g dG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKSB7Cj4gPiAtCQlkcm1fZHBfcHV0X3BvcnQocG9y dCk7Cj4gPiAtCQlyZXR1cm4gLUVOT1NQQzsKPiA+ICsJdG9wb2xvZ3lfc3RhdGUtPnZjcGlfYWxs b2NhdGVkID0gdHJ1ZTsKPiA+ICsKPiA+ICsJLyogRmluZCB0aGUgY3VycmVudCBhbGxvY2F0aW9u IGZvciB0aGlzIHBvcnQsIGlmIGFueSAqLwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywg JnRvcG9sb2d5X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gKwkJaWYgKHBvcy0+cG9ydCA9PSBw b3J0KSB7Cj4gPiArCQkJdmNwaSA9IHBvczsKPiA+ICsJCQlwcmV2X3Nsb3RzID0gdmNwaS0+dmNw aTsKPiA+ICsKPiA+ICsJCQkvKgo+ID4gKwkJCSAqIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwg dW5sZXNzIHRoZSBkcml2ZXIgdHJpZXMKPiA+ICsJCQkgKiByZWxlYXNpbmcgYW5kIGFsbG9jYXRp bmcgdGhlIHNhbWUgVkNQSSBhbGxvY2F0aW9uLAo+ID4gKwkJCSAqIHdoaWNoIGlzIGFuIGVycm9y Cj4gPiArCQkJICovCj4gPiArCQkJaWYgKFdBUk5fT04oIXByZXZfc2xvdHMpKSB7Cj4gPiArCQkJ CURSTV9FUlJPUigiY2Fubm90IGFsbG9jYXRlIGFuZCByZWxlYXNlIFZDUEkgb24KPiA+IFtNU1Qg UE9SVDolcF0gaW4gdGhlIHNhbWUgc3RhdGVcbiIsCj4gPiArCQkJCQkgIHBvcnQpOwo+ID4gKwkJ CQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJCQl9Cj4gCj4gQWxsb3dpbmcgYXRvbWljIGNoYW5nZXMg dG8gb3V0cHV0IHN0YXRlIChsaWtlIGRpc2FibGluZyBpdCBvbiBvbmUgY3J0YywKPiBhbmQgdGhl biBlbmFibGluZyBvbiB0aGUgb3RoZXIsIHRodXMgYm90aCByZWxlYXNpbmcgYW5kIHJlLWFsbG9j YXRpbmcgdGhlCj4gdmNwaSBpbiBvbmUgZ28pIGlzIGtpbmRhIHRoZSBwb2ludCBvZiBhdG9taWMu IFNvIGRlZmluaXRlbHkgY2FuJ3QgRUlOVkFMCj4gaGVyZS4KQWN0dWFsbHktc28gbG9uZyB0aGUg b3JpZ2luYWwgYXNzZXJ0aW9uIHdlIGhhZCBvZiBub3QgYWxsb3dpbmcgInN0YWxlIiAoZS5nLgpW Q1BJcyBmcm9tIG5vdy1kZXN0cm95ZWQgdG9wb2xvZ2llcykgVkNQSSBhbGxvY2F0aW9ucyBhbmQg cmVhbCBWQ1BJCmFsbG9jYXRpb25zIGluIHRoZSBzYW1lIGF0b21pYyBzdGF0ZSBpcyBoZWxkIHRy dWUsIHRoaXMgc2hvdWxkIGJlIGZpbmUuCgpTbzogKGFuZCB0aGlzIGFuc3dlcnMgdGhlIHF1ZXN0 aW9uIGJlbG93IGFzIHdlbGwpLCB0aGUgd2F5IHRoaXMgaXMgc3VwcG9zZWQgdG8Kd29yayBpcyB0 aGF0IHdlIGp1c3Qgc2tpcCB0aGUgd2hvbGUgVkNQSSB2YWxpZGF0aW9uIHNlcXVlbmNlIHVubGVz cyBwYXJ0IG9mCnRoZSBzdGF0ZSBhY3R1YWxseSB0cmllZCB0byBhZGQgVkNQSS4gVGhpcyBtZWFu cyB1c2VybGFuZCBjYW4gc3RpbGwgZGlzYWJsZQpkaXNwbGF5cyBvbmUtYnktb25lIG9yIHNldCB0 aGVtIGFzIGluYWN0aXZlLCBzbyBsb25nIGFzIGl0IGRvZXNuJ3QgdHJ5IHRvCmVuYWJsZSBuZXcg TVNUIGRpc3BsYXlzIHVudGlsIHRoZSBwb2ludCBhdCB3aGljaCBpdCdzIGRpc2FibGVkIGV2ZXJ5 dGhpbmcKbGVmdG92ZXIgZnJvbSB0aGUgcHJldmlvdXMgdG9wb2xvZ3kgLSBzaW5jZSBkaXNhYmxp bmcgZGlzcGxheXMgd29uJ3QgYWxsb2NhdGUKVkNQSSBhbmQgdGh1cyBza2lwcyB0aGUgcG9ydCB2 YWxpZGF0aW9uIGNoZWNrcyBoZXJlLgoKPiAKPiBTb3VuZHMgbGlrZSB3ZSBuZWVkIG1vcmUgdGVz dGNhc2VzIGluIGlndD8KPiAKPiA+ICsKPiA+ICsJCQlicmVhazsKPiA+ICsJCX0KPiA+ICAJfQo+ ID4gKwlpZiAoIXZjcGkpCj4gPiArCQlwcmV2X3Nsb3RzID0gMDsKPiA+ICAKPiA+IC0JdG9wb2xv Z3lfc3RhdGUtPmF2YWlsX3Nsb3RzIC09IHJlcV9zbG90czsKPiA+IC0JRFJNX0RFQlVHX0tNUygi dmNwaSBzbG90cyBhdmFpbD0lZCIsIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyk7Cj4gPiAr CXJlcV9zbG90cyA9IERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJuX2Rpdik7Cj4gPiArCj4gPiAr CURSTV9ERUJVR19BVE9NSUMoIltDT05ORUNUT1I6JWQ6JXNdIFtNU1QgUE9SVDolcF0gVkNQSSAl ZCAtPiAlZFxuIiwKPiA+ICsJCQkgcG9ydC0+Y29ubmVjdG9yLT5iYXNlLmlkLCBwb3J0LT5jb25u ZWN0b3ItPm5hbWUsCj4gPiArCQkJIHBvcnQsIHByZXZfc2xvdHMsIHJlcV9zbG90cyk7Cj4gPiAr Cj4gPiArCS8qIEFkZCB0aGUgbmV3IGFsbG9jYXRpb24gdG8gdGhlIHN0YXRlICovCj4gPiArCWlm ICghdmNwaSkgewo+ID4gKwkJdmNwaSA9IGt6YWxsb2Moc2l6ZW9mKCp2Y3BpKSwgR0ZQX0tFUk5F TCk7Cj4gPiArCQlpZiAoIXZjcGkpIHsKPiA+ICsJCQlyZXQgPSAtRU5PTUVNOwo+ID4gKwkJCWdv dG8gb3V0Owo+ID4gKwkJfQo+ID4gIAo+ID4gKwkJdmNwaS0+cG9ydCA9IGRybV9kcF9nZXRfdmFs aWRhdGVkX3BvcnRfcmVmKG1nciwgcG9ydCk7Cj4gPiArCQlpZiAoIXZjcGktPnBvcnQpIHsKPiA+ ICsJCQlyZXQgPSAtRUlOVkFMOwo+ID4gKwkJCWtmcmVlKHZjcGkpOwo+ID4gKwkJCWdvdG8gb3V0 Owo+ID4gKwkJfQo+ID4gKwkJbGlzdF9hZGQoJnZjcGktPm5leHQsICZ0b3BvbG9neV9zdGF0ZS0+ dmNwaXMpOwo+ID4gKwl9Cj4gPiArCXZjcGktPnZjcGkgPSByZXFfc2xvdHM7Cj4gPiArCj4gPiAr CXJldCA9IHJlcV9zbG90czsKPiA+ICtvdXQ6Cj4gPiAgCWRybV9kcF9wdXRfcG9ydChwb3J0KTsK PiA+IC0JcmV0dXJuIHJlcV9zbG90czsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICB9Cj4gPiAgRVhQ T1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyk7Cj4gPiAgCj4gPiBAQCAt MjY2MSwzMSArMjcyMiw2NiBAQCBFWFBPUlRfU1lNQk9MKGRybV9kcF9hdG9taWNfZmluZF92Y3Bp X3Nsb3RzKTsKPiA+ICAgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIC0gUmVs ZWFzZSBhbGxvY2F0ZWQgdmNwaSBzbG90cwo+ID4gICAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBz dGF0ZQo+ID4gICAqIEBtZ3I6IE1TVCB0b3BvbG9neSBtYW5hZ2VyIGZvciB0aGUgcG9ydAo+ID4g LSAqIEBzbG90czogbnVtYmVyIG9mIHZjcGkgc2xvdHMgdG8gcmVsZWFzZQo+ID4gKyAqIEBwb3J0 OiBUaGUgcG9ydCB0byByZWxlYXNlIHRoZSBWQ1BJIHNsb3RzIGZyb20KPiA+ICAgKgo+ID4gLSAq IFJFVFVSTlM6Cj4gPiAtICogMCBpZiBAc2xvdHMgd2VyZSBhZGRlZCBiYWNrIHRvICZkcm1fZHBf bXN0X3RvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyAKPiA+IG9yCj4gPiAtICogbmVnYXRpdmUg ZXJyb3IgY29kZQo+ID4gKyAqIFJlbGVhc2VzIGFueSBWQ1BJIHNsb3RzIHRoYXQgaGF2ZSBiZWVu IGFsbG9jYXRlZCB0byBhIHBvcnQgaW4gdGhlCj4gPiBhdG9taWMKPiA+ICsgKiBzdGF0ZS4gQW55 IGF0b21pYyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9u IGluCj4gPiArICogdGhlaXIgJmRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVj aygpIGNhbGxiYWNrIHdoZW4gdGhlCj4gPiArICogY29ubmVjdG9yIHdpbGwgbm8gbG9uZ2VyIGhh dmUgVkNQSSBhbGxvY2F0ZWQgKGUuZy4gYmVjYXVzZSBpdCdzIENSVEMKPiA+IHdhcwo+ID4gKyAq IHJlbW92ZWQpIHdoZW4gaXQgaGFkIFZDUEkgYWxsb2NhdGVkIGluIHRoZSBwcmV2aW91cyBhdG9t aWMgc3RhdGUuCj4gPiArICoKPiA+ICsgKiBJdCBpcyBPSyB0byBjYWxsIHRoaXMgZXZlbiBpZiBA cG9ydCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4KPiA+ICsgKiBBZGRpdGlvbmFs bHksIGl0IGlzIE9LIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyBvbiB0aGUK PiA+IHNhbWUKPiA+ICsgKiBAcG9ydCBhcyBuZWVkZWQuIEl0IGlzIG5vdCBPSyBob3dldmVyLCB0 byBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kCj4gPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlf c2xvdHMoKSBvbiB0aGUgc2FtZSBAcG9ydCBpbiBhIHNpbmdsZSBhdG9taWMKPiA+IGNoZWNrCj4g PiArICogcGhhc2UuCj4gPiArICoKPiA+ICsgKiBTZWUgYWxzbzoKPiA+ICsgKiBkcm1fZHBfYXRv bWljX2ZpbmRfdmNwaV9zbG90cygpCj4gPiArICogZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKQo+ ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiAwIGlmIGFsbCBzbG90cyBmb3IgdGhpcyBw b3J0IHdlcmUgYWRkZWQgYmFjayB0bwo+ID4gKyAqICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRl LmF2YWlsX3Nsb3RzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKPiA+ICAgKi8KPiA+ICBpbnQgZHJt X2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLAo+ID4gIAkJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ ID4gLQkJCQkgICAgIGludCBzbG90cykKPiA+ICsJCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0KQo+ID4gIHsKPiA+ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUg KnRvcG9sb2d5X3N0YXRlOwo+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9z Owo+ID4gKwlib29sIGZvdW5kID0gZmFsc2U7Cj4gPiAgCj4gPiAgCXRvcG9sb2d5X3N0YXRlID0g ZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCBtZ3IpOwo+ID4gIAlpZiAo SVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkKPiA+ICAJCXJldHVybiBQVFJfRVJSKHRvcG9sb2d5X3N0 YXRlKTsKPiA+ICAKPiA+IC0JLyogV2UgY2Fubm90IHJlbHkgb24gcG9ydC0+dmNwaS5udW1fc2xv dHMgdG8gdXBkYXRlCj4gPiAtCSAqIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyBhcyB0aGUg cG9ydCBtYXkgbm90IGV4aXN0IGlmIHRoZSBwYXJlbnQKPiA+IC0JICogYnJhbmNoIGRldmljZSB3 YXMgdW5wbHVnZ2VkLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBieSB0cmFja2luZwo+ID4gLQkgKiBw ZXItcG9ydCBzbG90IGFsbG9jYXRpb24gaW4gZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSBpbnN0 ZWFkIG9mCj4gPiAtCSAqIGRlcGVuZGluZyBvbiB0aGUgY2FsbGVyIHRvIHRlbGwgdXMgaG93IG1h bnkgc2xvdHMgdG8gcmVsZWFzZS4KPiA+IC0JICovCj4gPiAtCXRvcG9sb2d5X3N0YXRlLT5hdmFp bF9zbG90cyArPSBzbG90czsKPiA+IC0JRFJNX0RFQlVHX0tNUygidmNwaSBzbG90cyByZWxlYXNl ZD0lZCwgYXZhaWw9JWRcbiIsCj4gPiAtCQkJc2xvdHMsIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9z bG90cyk7Cj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmdG9wb2xvZ3lfc3RhdGUtPnZj cGlzLCBuZXh0KSB7Cj4gPiArCQlpZiAocG9zLT5wb3J0ID09IHBvcnQpIHsKPiA+ICsJCQlmb3Vu ZCA9IHRydWU7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsJaWYgKFdBUk5f T04oIWZvdW5kKSkgewo+ID4gKwkJRFJNX0VSUk9SKCJubyBWQ1BJIGZvciBbTVNUIFBPUlQ6JXBd IGZvdW5kIGluIG1zdCBzdGF0ZSAlcFxuIiwKPiA+ICsJCQkgIHBvcnQsICZ0b3BvbG9neV9zdGF0 ZS0+YmFzZSk7Cj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlEUk1f REVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIFZDUEkgJWQgLT4gMFxuIiwgcG9ydCwgcG9zLT52 Y3BpKTsKPiA+ICsJaWYgKHBvcy0+dmNwaSkgewo+ID4gKwkJLyoKPiA+ICsJCSAqIFRoaXMgc2hv dWxkIGJlIHNhZmUtYXMgdGhlIHByZXZpb3VzIHN0YXRlIHdpbGwgc3RpbGwgaG9sZCBhCj4gPiAr CQkgKiByZWZlcmVuY2UgdG8gdGhpcyBwb3J0IHVudGlsIHdlIHN3YXAgc3RhdGVzLiBJZiBpdCdz IG5vdCwKPiA+ICsJCSAqIHRoZSBkcml2ZXIgaGFzIGEgYm9va2tlZXBpbmcgZXJyb3IKPiA+ICsJ CSAqLwo+ID4gKwkJaWYgKFdBUk5fT04oZHJtX2RwX3B1dF9wb3J0KHBvcnQpKSkgewo+IAo+IFRo ZSB1c3VhbCB3YXkgdG8gZG8gdGhpcyAoaW5zdGVhZCBvZiBhZGRpbmcgYSByZXR1cm4gdmFsdWUg dG8gdGhlIG5vcm1hbAo+IF9wdXQgZnVuY3Rpb24pIGlzIHNvbWV0aGluZyBsaWtlCj4gCj4gCWty ZWZfcHV0KHBvcnQsIGZ1bmN0aW9uX3RoYXRfd2l0aF9qdXN0X2FfV0FSTklOR19EUk1fRVJST1Ip Cj4gCj4gYXZvaWRzIHRoZSBuZWVkIGZvciBwYXRjaCAyLgo+IAo+ID4gKwkJCURSTV9FUlJPUigi Y2Fubm90IGFsbG9jYXRlIGFuZCByZWxlYXNlIFZDUEkgb24gW01TVAo+ID4gUE9SVDolcF0gaW4g dGhlIHNhbWUgc3RhdGVcbiIsCj4gPiArCQkJCSAgcG9ydCk7Cj4gPiArCQkJcmV0dXJuIC1FSU5W QUw7Cj4gPiArCQl9Cj4gPiArCQlwb3MtPnZjcGkgPSAwOwo+ID4gKwl9Cj4gPiAgCj4gPiAgCXJl dHVybiAwOwo+ID4gIH0KPiA+IEBAIC0zMTE1LDE1ICszMjExLDQ1IEBAIHN0YXRpYyB2b2lkIGRy bV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrKHN0cnVjdAo+ID4gd29ya19zdHJ1Y3QgKndvcmsp Cj4gPiAgc3RhdGljIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqCj4gPiAgZHJtX2RwX21zdF9k dXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqKQo+ID4gIHsKPiA+IC0J c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0YXRlOwo+ID4gKwlzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9zdGF0ZSAqc3RhdGUsICpvbGRfc3RhdGUgPQo+ID4gKwkJdG9fZHBf bXN0X3RvcG9sb2d5X3N0YXRlKG9iai0+c3RhdGUpOwo+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlf YWxsb2NhdGlvbiAqcG9zLCAqdmNwaTsKPiA+ICAKPiA+IC0Jc3RhdGUgPSBrbWVtZHVwKG9iai0+ c3RhdGUsIHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiA+ICsJc3RhdGUgPSBrbWVtZHVw KG9sZF9zdGF0ZSwgc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwo+ID4gIAlpZiAoIXN0YXRl KQo+ID4gIAkJcmV0dXJuIE5VTEw7Cj4gPiAgCj4gPiAgCV9fZHJtX2F0b21pY19oZWxwZXJfcHJp dmF0ZV9vYmpfZHVwbGljYXRlX3N0YXRlKG9iaiwgJnN0YXRlLT5iYXNlKTsKPiA+ICAKPiA+ICsJ SU5JVF9MSVNUX0hFQUQoJnN0YXRlLT52Y3Bpcyk7Cj4gPiArCXN0YXRlLT52Y3BpX2FsbG9jYXRl ZCA9IGZhbHNlOwo+ID4gKwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJm9sZF9zdGF0 ZS0+dmNwaXMsIG5leHQpIHsKPiA+ICsJCS8qIFBydW5lIGxlZnRvdmVyIGZyZWVkIFZDUEkgYWxs b2NhdGlvbnMgKi8KPiA+ICsJCWlmICghcG9zLT52Y3BpKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4g Kwo+ID4gKwkJdmNwaSA9IGttZW1kdXAocG9zLCBzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsK PiA+ICsJCWlmICghdmNwaSkKPiA+ICsJCQlnb3RvIGZhaWw7Cj4gPiArCj4gPiArCQkvKiBUYWtl IGEgcGxhaW4gb2xkIGtyZWYgaGVyZSBhbmQgZG9uJ3QgdmFsaWRhdGUgdGhlIHBvcnQsIGFzCj4g PiArCQkgKiBpdCdzIHRvcG9sb2d5IG1pZ2h0IG5vdCBldmVuIGV4aXN0IGFueW1vcmUKPiA+ICsJ CSAqLwo+ID4gKwkJa3JlZl9nZXQoJnZjcGktPnBvcnQtPmtyZWYpOwo+ID4gKwkJbGlzdF9hZGQo JnZjcGktPm5leHQsICZzdGF0ZS0+dmNwaXMpOwo+ID4gKwl9Cj4gPiArCj4gPiAgCXJldHVybiAm c3RhdGUtPmJhc2U7Cj4gPiArCj4gPiArZmFpbDoKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKHBvcywgdmNwaSwgJnN0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gKwkJZHJtX2RwX3B1dF9w b3J0KHBvcy0+cG9ydCk7Cj4gPiArCQlrZnJlZShwb3MpOwo+ID4gKwl9Cj4gPiArCWtmcmVlKHN0 YXRlKTsKPiA+ICsKPiA+ICsJcmV0dXJuIE5VTEw7Cj4gPiAgfQo+ID4gIAo+ID4gIHN0YXRpYyB2 b2lkIGRybV9kcF9tc3RfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmos Cj4gPiBAQCAtMzEzMSwxNCArMzI1NywxMTYgQEAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF9kZXN0 cm95X3N0YXRlKHN0cnVjdAo+ID4gZHJtX3ByaXZhdGVfb2JqICpvYmosCj4gPiAgewo+ID4gIAlz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlID0KPiA+ICAJCXRvX2Rw X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSk7Cj4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxv Y2F0aW9uICpwb3MsICp0bXA7Cj4gPiArCj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShw b3MsIHRtcCwgJm1zdF9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ICsJCS8qIFdlIG9ubHkga2Vl cCByZWZlcmVuY2VzIHRvIHBvcnRzIHdpdGggbm9uLXplcm8gVkNQSXMgKi8KPiA+ICsJCWlmIChw b3MtPnZjcGkpCj4gPiArCQkJZHJtX2RwX3B1dF9wb3J0KHBvcy0+cG9ydCk7Cj4gPiArCQlrZnJl ZShwb3MpOwo+ID4gKwl9Cj4gPiAgCj4gPiAgCWtmcmVlKG1zdF9zdGF0ZSk7Cj4gPiAgfQo+ID4g IAo+ID4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGVfZnVuY3MgbXN0X3N0 YXRlX2Z1bmNzID0gewo+ID4gK3N0YXRpYyBpbmxpbmUgaW50Cj4gPiArZHJtX2RwX21zdF9hdG9t aWNfY2hlY2tfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyCj4g PiAqbWdyLAo+ID4gKwkJCQkgICAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUK PiA+ICptc3Rfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlv biAqdmNwaTsKPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsKPiA+ICsJaW50IGF2 YWlsX3Nsb3RzID0gNjMsIHJldDsKPiA+ICsKPiA+ICsJLyogVGhlcmUncyBubyBwb3NzaWJsZSBz Y2VuYXJpbyB3aGVyZSByZWxlYXNpbmcgVkNQSSBvciBrZWVwaW5nIGl0IHRoZQo+ID4gKwkgKiBz YW1lIHdvdWxkIG1ha2UgdGhlIHN0YXRlIGludmFsaWQKPiA+ICsJICovCj4gPiArCWlmICghbXN0 X3N0YXRlLT52Y3BpX2FsbG9jYXRlZCkgewo+IAo+IERvIHdlIG5lZWQgdGhpcz8gSWYgbm90IEkn bSBhbHdheXMgaW4gZmF2b3VyIG9mIHJlbW92aW5nIGNvZGUgaWYgaXQncyBub3QKPiBuZWVkZWQg Oi0pCmFuc3dlcmVkIGJ5IG15IGV4cGxhbmF0aW9uIGFib3ZlIF4KPiAKPiA+ICsJCURSTV9ERUJV R19BVE9NSUMoIltNU1QgTUdSOiVwXSBzdGF0ZSAlcCBhbGxvY2F0ZXMgbm8gVkNQSSwKPiA+IGNo ZWNrIHNraXBwZWRcbiIsCj4gPiArCQkJCSBtZ3IsICZtc3Rfc3RhdGUtPmJhc2UpOwo+ID4gKwkJ cmV0dXJuIDA7Cj4gPiArCX0KPiA+ICsKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeSh2Y3BpLCAm bXN0X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gKwkJLyogUmVsZWFzaW5nIFZDUEkgaXMgYWx3 YXlzIE9LLWV2ZW4gaWYgdGhlIHBvcnQgaXMgZ29uZSAqLwo+ID4gKwkJaWYgKCF2Y3BpLT52Y3Bp KSB7Cj4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSByZWxlYXNlcyBhbGwg VkNQSQo+ID4gc2xvdHNcbiIsCj4gPiArCQkJCQkgdmNwaS0+cG9ydCk7Cj4gPiArCQkJY29udGlu dWU7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlwb3J0ID0gZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9y dF9yZWYobWdyLCB2Y3BpLT5wb3J0KTsKPiA+ICsJCWlmICghcG9ydCkgewo+ID4gKwkJCURSTV9E RUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gaXMgZ29uZSBidXQgc3RpbGwgaGFzCj4gPiBWQ1BJ LCBjYW5ub3QgYWRkIG5ldyBWQ1BJXG4iLAo+ID4gKwkJCQkJIHZjcGktPnBvcnQpOwo+ID4gKwkJ CXJldHVybiAtRUlOVkFMOwo+ID4gKwkJfQo+IAo+IEZvciBmaW5kX3ZjcGkgd2UndmUgYWxyZWFk eSBkb25lIHRoaXMuIEZvciB1bnBsdWdnZWQgdmNwaSwgd2UgY2FuJ3QgZG8KPiB0aGlzIGhlcmUg SSB0aGluayAtIG90aGVyd2lzZSBpZiB5b3UgZW5hYmxlIDIgbXN0IG91dHB1dHMgb24gdGhlIHNh bWUKPiBicmFuY2gsIGFuZCB1bnBsdWcgYm90aCwgb2xkIG5vbi1hdG9taWMgdXNlcnNwYWNlIGNh biBuZXZlciBldmVyIGFnYWluCj4gZGlzYWJsZSB0aGVtIGJlY2F1c2UgaXQgY2FuJ3QgZGlzYWJs ZSBib3RoLiBUaGUgY2hlY2sgKHRvIHNraXAgYWxyZWFkeQo+IGRlYWxsb2NhdGVkIHBvcnRzKSBh Ym92ZSBpc24ndCBlbm91Z2ggdG8gaGFuZGxlIHRoYXQuCgphbnN3ZXJlZCBieSBteSBleHBsYW5h dGlvbiBhYm92ZSBeCj4gCj4gPiArCj4gPiArCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6 JXBdIHJlcXVpcmVzICVkIHZjcGkgc2xvdHNcbiIsCj4gPiArCQkJCSB2Y3BpLT5wb3J0LCB2Y3Bp LT52Y3BpKTsKPiA+ICsKPiA+ICsJCWF2YWlsX3Nsb3RzIC09IHZjcGktPnZjcGk7Cj4gPiArCQlp ZiAoYXZhaWxfc2xvdHMgPCAwKSB7Cj4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JU OiVwXSBub3QgZW5vdWdoIFZDUEkgc2xvdHMKPiA+IGluIG1zdCBzdGF0ZSAlcCAoYXZhaWw9JWQp XG4iLAo+ID4gKwkJCQkJIHZjcGktPnBvcnQsIG1zdF9zdGF0ZSwKPiA+ICsJCQkJCSBhdmFpbF9z bG90cyArIHZjcGktPnZjcGkpOwo+ID4gKwkJCXJldCA9IC1FTk9TUEM7Cj4gPiArCQkJZ290byBw b3J0X2ZhaWw7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4g PiArCX0KPiA+ICsJRFJNX0RFQlVHX0FUT01JQygiW01TVCBNR1I6JXBdIG1zdCBzdGF0ZSAlcCBW Q1BJIGF2YWlsPSVkIHVzZWQ9JWRcbiIsCj4gPiArCQkJIG1nciwgbXN0X3N0YXRlLCBhdmFpbF9z bG90cywKPiA+ICsJCQkgNjMgLSBhdmFpbF9zbG90cyk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ ID4gK3BvcnRfZmFpbDoKPiA+ICsJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4gKwlyZXR1cm4g cmV0Owo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZHBfbXN0X2F0b21pY19jaGVj ayAtIENoZWNrIHRoYXQgdGhlIG5ldyBzdGF0ZSBvZiBhbiBNU1QgdG9wb2xvZ3kKPiA+IGluIGFu Cj4gPiArICogYXRvbWljIHVwZGF0ZSBpcyB2YWxpZAo+ID4gKyAqIEBzdGF0ZTogUG9pbnRlciB0 byB0aGUgbmV3ICZzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZQo+ID4gKyAqCj4gPiAr ICogQ2hlY2tzIHRoZSBnaXZlbiB0b3BvbG9neSBzdGF0ZSBmb3IgYW4gYXRvbWljIHVwZGF0ZSB0 byBlbnN1cmUgdGhhdAo+ID4gaXQncwo+ID4gKyAqIHZhbGlkLiBUaGlzIGluY2x1ZGVzIGNoZWNr aW5nIHdoZXRoZXIgdGhlcmUncyBlbm91Z2ggYmFuZHdpZHRoIHRvCj4gPiBzdXBwb3J0Cj4gPiAr ICogdGhlIG5ldyBWQ1BJIGFsbG9jYXRpb25zIGluIHRoZSBhdG9taWMgdXBkYXRlLgo+ID4gKyAq Cj4gPiArICogQW55IGF0b21pYyBkcml2ZXJzIHN1cHBvcnRpbmcgRFAgTVNUIG11c3QgbWFrZSBz dXJlIHRvIGNhbGwgdGhpcyBhZnRlcgo+ID4gKyAqIGNoZWNraW5nIHRoZSByZXN0IG9mIHRoZWly IHN0YXRlIGluIHRoZWlyCj4gPiArICogJmRybV9tb2RlX2NvbmZpZ19mdW5jcy5hdG9taWNfY2hl Y2soKSBjYWxsYmFjay4KPiA+ICsgKgo+ID4gKyAqIFNlZSBhbHNvOgo+ID4gKyAqIGRybV9kcF9h dG9taWNfZmluZF92Y3BpX3Nsb3RzKCkKPiA+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNw aV9zbG90cygpCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqCj4gPiArICogMCBpZiB0 aGUgbmV3IHN0YXRlIGlzIHZhbGlkLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiA+ ICsgKi8KPiA+ICtpbnQgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy ICptZ3I7Cj4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7 Cj4gPiArCWludCBpLCByZXQgPSAwOwo+ID4gKwo+ID4gKwlmb3JfZWFjaF9uZXdfbXN0X21ncl9p bl9zdGF0ZShzdGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsKPiA+ICsJCXJldCA9IGRybV9kcF9t c3RfYXRvbWljX2NoZWNrX3RvcG9sb2d5X3N0YXRlKG1nciwgbXN0X3N0YXRlKTsKPiA+ICsJCWlm IChyZXQpCj4gPiArCQkJYnJlYWs7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2F0b21pY19jaGVjayk7Cj4gPiArCj4g PiArY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIGRybV9kcF9tc3RfdG9wb2xv Z3lfc3RhdGVfZnVuY3MgPSB7Cj4gPiAgCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2Rw X21zdF9kdXBsaWNhdGVfc3RhdGUsCj4gPiAgCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9k cF9tc3RfZGVzdHJveV9zdGF0ZSwKPiA+ICB9Owo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX21z dF90b3BvbG9neV9zdGF0ZV9mdW5jcyk7Cj4gPiAgCj4gPiAgLyoqCj4gPiAgICogZHJtX2F0b21p Y19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlOiBnZXQgTVNUIHRvcG9sb2d5IHN0YXRlCj4gPiBAQCAt MzIxNiwxMyArMzQ0NCwxMSBAQCBpbnQgZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdChzdHJ1 Y3QKPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiAgCQlyZXR1cm4gLUVOT01F TTsKPiA+ICAKPiA+ICAJbXN0X3N0YXRlLT5tZ3IgPSBtZ3I7Cj4gPiAtCj4gPiAtCS8qIG1heC4g dGltZSBzbG90cyAtIG9uZSBzbG90IGZvciBNVFAgaGVhZGVyICovCj4gPiAtCW1zdF9zdGF0ZS0+ YXZhaWxfc2xvdHMgPSA2MzsKPiA+ICsJSU5JVF9MSVNUX0hFQUQoJm1zdF9zdGF0ZS0+dmNwaXMp Owo+ID4gIAo+ID4gIAlkcm1fYXRvbWljX3ByaXZhdGVfb2JqX2luaXQoJm1nci0+YmFzZSwKPiA+ ICAJCQkJICAgICZtc3Rfc3RhdGUtPmJhc2UsCj4gPiAtCQkJCSAgICAmbXN0X3N0YXRlX2Z1bmNz KTsKPiA+ICsJCQkJICAgICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzKTsKPiA+ICAK PiA+ICAJcmV0dXJuIDA7Cj4gPiAgfQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKPiA+IGluZGV4IDEzMmU5NzgyMjdmYi4uOGU4NWUwNGE1OTQ4IDEwMDY0NAo+ID4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+IEBAIC0xMjU5Miw2ICsxMjU5MiwxMCBA QCBzdGF0aWMgaW50IGludGVsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZQo+ID4gKmRl diwKPiA+ICAJCQkJICAgICAgICJbbW9kZXNldF0iIDogIltmYXN0c2V0XSIpOwo+ID4gIAl9Cj4g PiAgCj4gPiArCXJldCA9IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKTsKPiA+ICsJaWYg KHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiAgCWlmIChhbnlfbXMpIHsKPiA+ICAJ CXJldCA9IGludGVsX21vZGVzZXRfY2hlY2tzKHN0YXRlKTsKPiA+ICAKPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ID4gYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ID4gaW5kZXggNGRlMjQ3ZGRmMDVmLi5iZTJkMWFjN2Q4 N2QgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKPiA+IEBAIC00MSw4 ICs0MSwxMyBAQCBzdGF0aWMgYm9vbCBpbnRlbF9kcF9tc3RfY29tcHV0ZV9jb25maWcoc3RydWN0 Cj4gPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yID0gY29ubl9zdGF0ZS0+Y29ubmVjdG9yOwo+ID4gIAl2b2lkICpwb3J0ID0gdG9f aW50ZWxfY29ubmVjdG9yKGNvbm5lY3RvciktPnBvcnQ7Cj4gPiAgCXN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSA9IHBpcGVfY29uZmlnLT5iYXNlLnN0YXRlOwo+ID4gKwlzdHJ1Y3QgZHJt X2NydGMgKmNydGMgPSBwaXBlX2NvbmZpZy0+YmFzZS5jcnRjOwo+ID4gKwlzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlID0KPiA+ICsJCWRybV9hdG9taWNfZ2V0X29sZF9jcnRj X3N0YXRlKHN0YXRlLCBjcnRjKTsKPiA+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpuZXdfY3J0 Y19zdGF0ZSA9ICZwaXBlX2NvbmZpZy0+YmFzZTsKPiA+ICAJaW50IGJwcDsKPiA+IC0JaW50IGxh bmVfY291bnQsIHNsb3RzID0gMDsKPiA+ICsJaW50IGxhbmVfY291bnQsIHNsb3RzID0KPiA+ICsJ CXRvX2ludGVsX2NydGNfc3RhdGUob2xkX2NydGNfc3RhdGUpLT5kcF9tX24udHU7Cj4gPiAgCWNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0gJnBpcGVfY29uZmln LQo+ID4gPmJhc2UuYWRqdXN0ZWRfbW9kZTsKPiA+ICAJaW50IG1zdF9wYm47Cj4gPiAgCWJvb2wg Y29uc3RhbnRfbiA9IGRybV9kcF9oYXNfcXVpcmsoJmludGVsX2RwLT5kZXNjLAo+ID4gQEAgLTc3 LDggKzgyLDEyIEBAIHN0YXRpYyBib29sIGludGVsX2RwX21zdF9jb21wdXRlX2NvbmZpZyhzdHJ1 Y3QKPiA+IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiAgCW1zdF9wYm4gPSBkcm1fZHBfY2Fs Y19wYm5fbW9kZShhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrLCBicHApOwo+ID4gIAlwaXBlX2Nv bmZpZy0+cGJuID0gbXN0X3BibjsKPiA+ICAKPiA+IC0JLyogWm9tYmllIGNvbm5lY3RvcnMgY2Fu J3QgaGF2ZSBWQ1BJIHNsb3RzICovCj4gPiAtCWlmICghZHJtX2Nvbm5lY3Rvcl9pc191bnJlZ2lz dGVyZWQoY29ubmVjdG9yKSkgewo+ID4gKwkvKiBPbmx5IGNoYW5nZSBWQ1BJIGFsbG9jYXRpb24g b24gYWN0dWFsIG1vZGUgY2hhbmdlcywgdG8gcHJldmVudCB1cwo+ID4gKwkgKiBmcm9tIHRyeWlu ZyB0byBhbGxvY2F0ZSBWQ1BJIHRvIHBvcnRzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0IHdoZW4gd2UK PiA+ICsJICogbWF5IGp1c3QgYmUgdHJ5aW5nIHRvIGRpc2FibGUgRFBNUyBvbiB0aGVtCj4gPiAr CSAqLwo+ID4gKwlpZiAobmV3X2NydGNfc3RhdGUtPm1vZGVfY2hhbmdlZCB8fAo+ID4gKwkgICAg bmV3X2NydGNfc3RhdGUtPmNvbm5lY3RvcnNfY2hhbmdlZCkgewo+IAo+IFdoeSBleGFjdGx5IGlz IHRoaXMgbmVlZGVkPyBXZSBvbmx5IGNhbGwgY29tcHV0ZV9jb25maWcgb24gdGhlIGVub2NvZGVy Cj4gd2hlbiBlbmFibGluZyBhbiBvdXRwdXQuIE5vdCB3aGVuIGRpc2FibGluZyBvbmUuIFNpbWls YXIgZm9yIHRoZSBhdG9taWMKPiBoZWxwZXJzIGFuZCB0aGUgdmFyaW91cyBlbmNvZGVyIGNhbGxi YWNrcyAoeW91IGhhdmUgdGhlIHNhbWUgY2hhbmdlIGluIHRoZQo+IG5vdXZlYXUgY29kZSkuIERp ZCB0aGlzIGFjdHVhbGx5IGJsb3cgdXAgd2hpbGUgdGVzdGluZz8KCnllcy1pdCBsb29rZWQgbGlr ZSB3ZSB3ZXJlIGNhbGxpbmcgY29tcHV0ZV9jb25maWcgb24gc2ltcGxlIERQTVMgb24tPm9mZgpj aG5nZXMgYXMgd2VsbCwgdGhpcyBlbmRlZCB1cCBtYWtpbmcgaXQgc28gd2Ugd291bGRuJ3QgdHJ5 IGNoYW5naW5nIHRoZSBWQ1BJCmFsbG9jYXRpb24gb24gc3VjaCBjb21taXRzLgoKQUNLIG9uIGFs bCBvZiB0aGUgb3RoZXIgY29tbWVudHMgaGVyZS4KPiAKPiA+ICAJCXNsb3RzID0gZHJtX2RwX2F0 b21pY19maW5kX3ZjcGlfc2xvdHMoc3RhdGUsCj4gPiAgCQkJCQkJICAgICAgJmludGVsX2RwLT5t c3RfbWdyLAo+ID4gIAkJCQkJCSAgICAgIHBvcnQsCj4gPiBAQCAtMTA3LDM2ICsxMTYsMzkgQEAg c3RhdGljIGJvb2wgaW50ZWxfZHBfbXN0X2NvbXB1dGVfY29uZmlnKHN0cnVjdAo+ID4gaW50ZWxf ZW5jb2RlciAqZW5jb2RlciwKPiA+ICAJcmV0dXJuIHRydWU7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0 YXRpYyBpbnQgaW50ZWxfZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLAo+ID4gLQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm5ld19jb25uX3N0 YXRlKQo+ID4gK3N0YXRpYyBpbnQKPiA+ICtpbnRlbF9kcF9tc3RfYXRvbWljX2NoZWNrKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiArCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqbmV3X2Nvbm5fc3RhdGUpCj4gPiAgewo+ID4gKwlzdHJ1Y3QgaW50ZWxfY29ubmVj dG9yICppbnRlbF9jb25uZWN0b3IgPQo+ID4gKwkJdG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3Rv cik7Cj4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyID0KPiA+ICsJCSZp bnRlbF9jb25uZWN0b3ItPm1zdF9wb3J0LT5tc3RfbWdyOwo+ID4gKwlzdHJ1Y3QgZHJtX2RwX21z dF9wb3J0ICpwb3J0ID0gaW50ZWxfY29ubmVjdG9yLT5wb3J0Owo+ID4gIAlzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUgPSBuZXdfY29ubl9zdGF0ZS0+c3RhdGU7Cj4gPiAtCXN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZTsKPiA+IC0Jc3RydWN0IGRybV9jcnRj ICpvbGRfY3J0YzsKPiA+IC0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ID4g LQlpbnQgc2xvdHMsIHJldCA9IDA7Cj4gPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpv bGRfY29ubl9zdGF0ZSA9Cj4gPiArCQlkcm1fYXRvbWljX2dldF9vbGRfY29ubmVjdG9yX3N0YXRl KHN0YXRlLCBjb25uZWN0b3IpOwo+ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKm9sZF9jcnRjID0gb2xk X2Nvbm5fc3RhdGUtPmNydGMsCj4gPiArCQkJKm5ld19jcnRjID0gbmV3X2Nvbm5fc3RhdGUtPmNy dGM7Cj4gPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsICpuZXdfY3J0 Y19zdGF0ZTsKPiA+ICAKPiA+IC0Jb2xkX2Nvbm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9vbGRf Y29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IpOwo+ID4gLQlvbGRfY3J0YyA9IG9sZF9j b25uX3N0YXRlLT5jcnRjOwo+IAo+IEJpa2VzaGVkOiBSZXdvcmtpbmcgYWxsIHRoZSBhYm92ZSBo aWRlcyB0aGUgcmVhbCBjaGFuZ2VzIHF1aXRlIGEgYml0Lgo+IAo+ID4gIAlpZiAoIW9sZF9jcnRj KQo+ID4gLQkJcmV0dXJuIHJldDsKPiA+ICsJCXJldHVybiAwOwo+ID4gIAo+ID4gLQljcnRjX3N0 YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsIG9sZF9jcnRjKTsKPiA+ IC0Jc2xvdHMgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpLT5kcF9tX24udHU7Cj4g PiAtCWlmIChkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSAmJiBzbG90 cyA+IDApIHsKPiA+IC0JCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwo+ID4g LQkJc3RydWN0IGRybV9lbmNvZGVyICpvbGRfZW5jb2RlcjsKPiA+ICsJb2xkX2NydGNfc3RhdGUg PSBkcm1fYXRvbWljX2dldF9vbGRfY3J0Y19zdGF0ZShzdGF0ZSwgb2xkX2NydGMpOwo+ID4gKwlp ZiAoIW9sZF9jcnRjX3N0YXRlIHx8Cj4gCj4gIW9sZF9jcnRjX3N0YXRlIHdvdWxkIGJlIGEgZnJh bWV3b3JrIGJ1Zy4gSnVzdCByZW1vdmUgdGhhdCBjaGVjay4KPiAKPiA+ICsJICAgICF0b19pbnRl bF9jcnRjX3N0YXRlKG9sZF9jcnRjX3N0YXRlKS0+ZHBfbV9uLnR1KQo+ID4gKwkJcmV0dXJuIDA7 Cj4gCj4gSG0sIHdoeSBkbyB3ZSBuZWVkIHRoaXM/IEhhdmluZyBhIERQIHBvcnQgcHJldmlvdXNs eSBlbmFibGVkIHdpdGggYSAwIHR1Cj4gc291bmRzIGxpa2UgYSBwcmV0dHkgYmlnIGRyaXZlciBi dWcuCj4gPiAgCj4gPiAtCQlvbGRfZW5jb2RlciA9IG9sZF9jb25uX3N0YXRlLT5iZXN0X2VuY29k ZXI7Cj4gPiAtCQltZ3IgPSAmZW5jX3RvX21zdChvbGRfZW5jb2RlciktPnByaW1hcnktPmRwLm1z dF9tZ3I7Cj4gPiArCS8qIElmIHdlIHN3aXRjaGVkIENSVENzLCBjbGVhciB0aGUgcHJldmlvdXMg b25lJ3MgYWxsb2NhdGlvbiAqLwo+ID4gKwluZXdfY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X25ld19jcnRjX3N0YXRlKHN0YXRlLCBvbGRfY3J0Yyk7Cj4gPiArCWlmIChuZXdfY3J0Y19zdGF0 ZS0+Y29ubmVjdG9yc19jaGFuZ2VkICYmICFuZXdfY3J0Y19zdGF0ZS0+ZW5hYmxlKQo+ID4gKwkJ dG9faW50ZWxfY3J0Y19zdGF0ZShuZXdfY3J0Y19zdGF0ZSktPmRwX21fbi50dSA9IDA7Cj4gCj4g Tm8gaWRlYSB3aHkgd2UgbmVlZCB0byBjbGVhciB0aGlzIGhlcmU/IFNob3VsZG4ndCB3ZSBqdXN0 IGNsZWFyIHRoaXMKPiB1bmNvbmRpdGlvbmFsbHkgaWYgd2UgcmVsZWFzZSB0aGUgYWxsb2NhdGlv bi4KPiAKPiBBbHNvIG5hbWluZyBjb252ZW50aW9uLCBJJ2QgY2FsbCB0aGlzIG9sZF9jcnRjX25l d19zdGF0ZSwgYW5kIG1heWJlCj4gb2xkX2NydGNfb2xkX3N0YXRlLiBUbyBtYWtlIGl0IGNsZWFy IHRoZXNlIGFyZSB0aGUgb2xkL25ldyBzdGF0ZXMgZm9yCj4gb2xkX2NydGMuIEluc3RlYWQgb2Yg b2xkL25ldyBzdGF0ZSBmb3IgdGhlIG5ldyBjcnRjLgo+IAo+ID4gIAo+ID4gLQkJcmV0ID0gZHJt X2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RhdGUsIG1nciwgc2xvdHMpOwo+ID4gLQkJ aWYgKHJldCkKPiA+IC0JCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgcmVsZWFzaW5nICVkIHZjcGkg c2xvdHM6JWRcbiIsCj4gPiBzbG90cywgcmV0KTsKPiA+IC0JCWVsc2UKPiA+IC0JCQl0b19pbnRl bF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpLT5kcF9tX24udHUgPSAwOwo+ID4gLQl9Cj4gPiAtCXJl dHVybiByZXQ7Cj4gPiArCWlmIChuZXdfY3J0YykKPiA+ICsJCXJldHVybiAwOwo+IAo+IE5vdCBz dXJlIHdoeSB3ZSBzaG91bGRuJ3QgcmVsZWFzZSB0aGlzPyBJZiB3ZSBoYW5kbGUgdGhpcyBpbiBo ZWxwZXJzLCBpdAo+IHdvdWxkIHJlbW92ZSBwaWxlcyBvZiBzcGVjaWFsIGNhc2luZyBjb2RlIGhl cmUgSSB0aGluay4gUGx1cyByZW1vdmUKPiBzcGVjaWFsIGNvZGUgaW4gdGhlIGhscGVycy4KPiAK PiAKPiA+ICsKPiA+ICsJcmV0dXJuIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0 YXRlLCBtZ3IsIHBvcnQpOwo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMgdm9pZCBpbnRlbF9tc3Rf ZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+IGRpZmYgLS1naXQg YS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gPiBiL2luY2x1ZGUvZHJtL2RybV9k cF9tc3RfaGVscGVyLmgKPiA+IGluZGV4IDNmYWNlYjY2ZjVjYi4uMjM5MmUxMmI2YmNlIDEwMDY0 NAo+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4gKysrIGIvaW5j bHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4gQEAgLTQwNiw5ICs0MDYsMTYgQEAgc3Ry dWN0IGRybV9kcF9wYXlsb2FkIHsKPiA+ICAKPiA+ICAjZGVmaW5lIHRvX2RwX21zdF90b3BvbG9n eV9zdGF0ZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0Cj4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlLCBiYXNlKQo+ID4gIAo+ID4gK3N0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uIHsK PiAKPiBJIHRoaW5rIGEgY29tbWVudCBoZXJlIHRoYXQgdGhpcyBwb2ludGVyIGhvbGRzIGEgZnVs bCByZWZlcmVuY2UgKGV2ZW4gcGFzdAo+IHdoZW4gdGhlIGNvbm5lY3RvciBpcyB1bnBsdWdnZWQp IHdvdWxkIGJlIGdvb2QuIE90aGVyd2lzZSB0aGUgbG9vcCBpbgo+IHJlbGVhc2VfdmNwaSB3b3Vs ZCBiZSBidWdneS4KPiAKPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsKPiA+ICsJ aW50IHZjcGk7Cj4gPiArCXN0cnVjdCBsaXN0X2hlYWQgbmV4dDsKPiA+ICt9Owo+ID4gKwo+ID4g IHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlIHsKPiA+ICAJc3RydWN0IGRybV9wcml2 YXRlX3N0YXRlIGJhc2U7Cj4gPiAtCWludCBhdmFpbF9zbG90czsKPiA+ICsJc3RydWN0IGxpc3Rf aGVhZCB2Y3BpczsKPiA+ICsJdTggdmNwaV9hbGxvY2F0ZWQ7Cj4gPiAgCXN0cnVjdCBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyOwo+ID4gIH07Cj4gPiAgCj4gPiBAQCAtNjE5LDE0ICs2MjYs MTcgQEAgdm9pZCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9zdXNwZW5kKHN0cnVjdAo+ID4gZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncik7Cj4gPiAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyX3Jlc3VtZShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncik7Cj4gPiAgc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUKPiA+ICpkcm1fYXRvbWljX2dldF9tc3RfdG9w b2xvZ3lfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gIAkJCQkJCQkJ ICAgIHN0cnVjdAo+ID4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncik7Cj4gPiAtaW50IGRy bV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwKPiA+IC0JCQkJICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+IC0J CQkJICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsKPiA+IC1pbnQgZHJt X2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLAo+ID4gLQkJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ ID4gLQkJCQkgICAgIGludCBzbG90cyk7Cj4gPiAraW50IF9fbXVzdF9jaGVjawo+ID4gK2RybV9k cF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwK PiA+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ICsJ CQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsKPiA+ICtpbnQg X19tdXN0X2NoZWNrCj4gPiArZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gKwkJCQkgc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyICptZ3IsCj4gPiArCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsK PiA+ICBpbnQgZHJtX2RwX3NlbmRfcG93ZXJfdXBkb3duX3BoeShzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3IgKm1nciwKPiA+ICAJCQkJIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQs IGJvb2wgcG93ZXJfdXApOwo+ID4gK2ludCBfX211c3RfY2hlY2sgZHJtX2RwX21zdF9hdG9taWNf Y2hlY2soc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiA+ICAKPiA+ICBleHRlcm4g Y29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzCj4gPiBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlX2Z1bmNzOwo+ID4gIAo+ID4gLS0gCj4gPiAyLjE5LjEKPiA+IAotLSAKQ2hlZXJz LAoJTHl1ZGUgUGF1bAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==