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: Mon, 26 Nov 2018 22:22:50 +0100 Message-ID: <20181126212250.GS4266@phenom.ffwll.local> 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: Content-Disposition: inline In-Reply-To: <20181126210421.GQ4266@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Lyude Paul Cc: nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBOb3YgMjYsIDIwMTggYXQgMTA6MDQ6MjFQTSArMDEwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBUaHUsIE5vdiAxNSwgMjAxOCBhdCAwNzo1MDowNVBNIC0wNTAwLCBMeXVkZSBQ YXVsIHdyb3RlOgo+ID4gVGhlcmUgaGFzIGJlZW4gYSBUT0RPIHdhaXRpbmcgZm9yIHF1aXRlIGEg bG9uZyB0aW1lIGluCj4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5LmM6Cj4gPiAKPiA+IAkvKiBXZSBj YW5ub3QgcmVseSBvbiBwb3J0LT52Y3BpLm51bV9zbG90cyB0byB1cGRhdGUKPiA+IAkgKiB0b3Bv bG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBleGlzdCBpZiB0aGUg cGFyZW50Cj4gPiAJICogYnJhbmNoIGRldmljZSB3YXMgdW5wbHVnZ2VkLiBUaGlzIHNob3VsZCBi ZSBmaXhlZCBieSB0cmFja2luZwo+ID4gCSAqIHBlci1wb3J0IHNsb3QgYWxsb2NhdGlvbiBpbiBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlIGluc3RlYWQgb2YKPiA+IAkgKiBkZXBlbmRpbmcgb24g dGhlIGNhbGxlciB0byB0ZWxsIHVzIGhvdyBtYW55IHNsb3RzIHRvIHJlbGVhc2UuCj4gPiAJICov Cj4gPiAKPiA+IFRoYXQncyBub3QgdGhlIG9ubHkgcmVhc29uIHdlIHNob3VsZCBmaXggdGhpczog Zm9yY2luZyB0aGUgZHJpdmVyIHRvCj4gPiB0cmFjayB0aGUgVkNQSSBhbGxvY2F0aW9ucyB0aHJv dWdob3V0IGEgc3RhdGUncyBhdG9taWMgY2hlY2sgaXMKPiA+IGVycm9yIHByb25lLCBiZWNhdXNl IGl0IG1lYW5zIHRoYXQgZXh0cmEgY2FyZSBoYXMgdG8gYmUgdGFrZW4gd2l0aCB0aGUKPiA+IG9y ZGVyIHRoYXQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSBhbmQKPiA+IGRybV9kcF9h dG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgYXJlIGNhbGxlZCBpbiBpbiBvcmRlciB0byBlbnN1 cmUKPiA+IGlkZW1wb3RlbmN5LiBDdXJyZW50bHkgdGhlIG9ubHkgZHJpdmVyIGFjdHVhbGx5IHVz aW5nIHRoZXNlIGhlbHBlcnMsCj4gPiBpOTE1LCBkb2Vzbid0IGV2ZW4gZG8gdGhpcyBjb3JyZWN0 bHk6IG11bHRpcGxlIC0+YmVzdF9lbmNvZGVyKCkgY2hlY2tzCj4gPiB3aXRoIGk5MTUncyBjdXJy ZW50IGltcGxlbWVudGF0aW9uIHdvdWxkIG5vdCBiZSBpZGVtcG90ZW50IGFuZCB3b3VsZAo+ID4g b3Zlci1hbGxvY2F0ZSBWQ1BJIHNsb3RzLCBzb21ldGhpbmcgSSBsZWFybmVkIHRyeWluZyB0byBp bXBsZW1lbnQKPiA+IGZhbGxiYWNrIHJldHJhaW5pbmcgaW4gTVNULgo+ID4gCj4gPiBTbzogc2lt cGxpZnkgdGhpcyB3aG9sZSBtZXNzLCBhbmQgdGVhY2ggZHJtX2RwX2F0b21pY19maW5kX3ZjcGlf c2xvdHMoKQo+ID4gYW5kIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgdG8gdHJh Y2sgdGhlIFZDUEkgYWxsb2NhdGlvbnMgZm9yCj4gPiBlYWNoIHBvcnQuIFRoaXMgYWxsb3dzIHVz IHRvIGVuc3VyZSBpZGVtcG90ZW5jeSB3aXRob3V0IGhhdmluZyB0byByZWx5Cj4gPiBvbiB0aGUg ZHJpdmVyIGFzIG11Y2guIEFkZGl0aW9uYWxseTogdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQgdG8g ZG8gYW55Cj4gPiBraW5kIG9mIFZDUEkgc2xvdCB0cmFja2luZyBhbnltb3JlIGlmIGl0IGRvZXNu J3QgbmVlZCBpdCBmb3IgaXQncyBvd24KPiA+IGludGVybmFsIHN0YXRlLgo+ID4gCj4gPiBBZGRp dGlvbmFsbHk7IHRoaXMgYWRkcyBhIG5ldyBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpIGhlbHBl ciB3aGljaAo+ID4gbXVzdCBiZSB1c2VkIGJ5IGF0b21pYyBkcml2ZXJzIHRvIHBlcmZvcm0gdmFs aWRpdHkgY2hlY2tzIGZvciB0aGUgbmV3Cj4gPiBWQ1BJIGFsbG9jYXRpb25zIGluY3VycmVkIGJ5 IGEgc3RhdGUuCj4gPiAKPiA+IEFsc286IHVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgbWFr ZSBpdCBtb3JlIG9idmlvdXMgdGhhdCB0aGVzZQo+ID4gL211c3QvIGJlIGNhbGxlZCBieSAvYWxs LyBhdG9taWMgZHJpdmVycyBzdXBwb3J0aW5nIE1TVC4KPiA+IAo+ID4gQ2hhbmdlcyBzaW5jZSB2 NjoKPiA+ICAtIEtlZXAgYSBrcmVmIHRvIGFsbCBvZiB0aGUgcG9ydHMgd2UgaGF2ZSBhbGxvY2F0 aW9ucyBvbi4gVGhpcyByZXF1aXJlZAo+ID4gICAgYSBnb29kIGJpdCBvZiBjaGFuZ2luZyB0byB3 aGVuIHdlIGNhbGwgZHJtX2RwX2ZpbmRfdmNwaV9zbG90cygpLAo+ID4gICAgbWFpbmx5IHRoYXQg d2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBvbmx5IHJlZG8gVkNQSSBhbGxvY2F0aW9ucyBvbgo+ ID4gICAgYWN0dWFsIG1vZGUgb3IgQ1JUQyBjaGFuZ2VzLCBub3QgY3J0Y19zdGF0ZS0+YWN0aXZl IGNoYW5nZXMuCj4gPiAgICBBZGRpdGlvbmFsbHksIHdlIG5vIGxvbmdlciB0YWtlIHRoZSByZWdp c3RyYXRpb24gb2YgdGhlIERSTSBjb25uZWN0b3IKPiA+ICAgIGZvciBlYWNoIHBvcnQgaW50byBh Y2NvdW50IGJlY2F1c2Ugc28gbG9uZyBhcyB3ZSBoYXZlIGEga3JlZiB0byB0aGUKPiA+ICAgIHBv cnQgaW4gdGhlIG5ldyBvciBwcmV2aW91cyBhdG9taWMgc3RhdGUsIHRoZSBjb25uZWN0b3Igd2ls bCBzdGF5Cj4gPiAgICByZWdpc3RlcmVkLgo+IAo+IEkgd3JpdGUgYW4gZW50aXJlIHBpbGUgb2Yg c21hbGwgbml0cGl0cyAoc3RpbGwgaW5jbHVkZWQgbW9zdCBvZiB0aGVtCj4gYmVsb3cpLCB1bnRp bCBJIHJlYWxpemVkIHRoaXMgaGVyZSB3b250IHdvcmsuIERlbGF5aW5nIHRoZSBjYWxsIHRvIGRl c3Ryb3kKPiB0aGUgY29ubmVjdG9yICh3ZWxsLCB1bnJlZ2lzdGVyIGl0IHJlYWxseSkgd3JlYWtz IHRoZSBkZXNpZ24gd2UndmUgY29tZSB1cAo+IHdpdGggdGh1cyBmYXIsIHJlc3VsdGluZyBpbiBt b3N0IG9mIG15IGNvbW1lbnRzIGhlcmUuCj4gCj4gSW5zdGVhZCwgYWxsIHdlIG5lZWQgdG8gZG8g aXMgZGVsYXkgdGhlIGtmcmVlKHBvcnQpIGF0IHRoZSBib3R0b20gb2YKPiBkcm1fZHBfZGVzdHJv eV9wb3J0KCkuIFRoZSB2Y3BpIGFsbG9jYXRpb24gc3RydWN0dXJlIF9vbmx5XyBuZWVkcyB0aGUK PiBwb2ludGVyIHZhbHVlIHRvIHN0YXkgdmFsaWQsIGFzIGEgbG9va3VwIGtleS4gSXQgZG9lc24n dCBjYXJlIGF0IGFsbCBhYm91dAo+IGFueXRoaW5nIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGVyZS4g U28gdGhlIG9ubHkgdGhpbmcgd2UgbmVlZCB0byBkZWxheSBpcwo+IHRoZSBrZnJlZS4gSSB0aGlu ayB0aGUgc2ltcGxlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBhZGQgYSAybmQga3JlZgo+ IChwb3J0LT5rZnJlZV9yZWYgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCksIHdpdGggb24gcmVmZXJl bmNlIGhlbGQgYnkgdGhlCj4gcG9ydCBpdHNlbGYgKHJlbGVhc2VkIGluIGRybV9kcF9kZXN0cm95 X3BvcnQpLCBhbmQgdGhlIG90aGVyIG9uZSBoZWxkCj4gYXMtbmVlZGVkIGJ5IHRoZSB2Y3BpIGFs bG9jYXRpb24gbGlzdHMuCj4gCj4gSSB0aGluayBpZiB3ZSBnbyB3aXRoIHRoaXMgZGVzaWduIGlu c3RlYWQgb2YgcmV0cm9maXR0aW5nIGEgc2VtYW50aWMKPiBjaGFuZ2Ugb2YgdGhlIHBvcnQgbGlm ZXRpbWUgaXRzZWxmLCBhbGwgdGhlIGNvbXBsaWNhdGlvbnMgSSBjb21wbGFpbiBhYm91dAo+IGJl bG93IHNob3VsZCBkaXNhcHBlYXIuCgpJbiB0aGUgYWJvdmUgSSBtZWFudCBkcm1fZHBfZGVzdHJv eV9wb3J0IG9yIGRybV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrLgoKQXNpZGU6IEkgdGhpbmsg Y3JlYXRpbmcgYSBrcmVmIGZvciB0aGUgZmluYWwga2ZyZWUgd291bGQgYWxzbyBzb2x2ZSBhCmJ1 bmNoIG9mIG90aGVyIGlzc3VlcyBpbiBhIG11Y2ggbmVhdGVyIHdheTogSW4KCmNvbW1pdCBmMDM4 YzViOTlmYzEzMzJmNTU4YjQ5NWQxMzZkNGY0MzNlZTY1Y2FhCkF1dGhvcjogTHl1ZGUgUGF1bCA8 bHl1ZGVAcmVkaGF0LmNvbT4KRGF0ZTogICBUdWUgTm92IDEzIDE3OjQ2OjE0IDIwMTggLTA1MDAK CiAgICBkcm0vZHBfbXN0OiBTa2lwIHZhbGlkYXRpbmcgcG9ydHMgZHVyaW5nIGRlc3RydWN0aW9u LCBqdXN0IHJlZgoKd2UgY291bGQgdXNlIHRoYXQga2ZyZWUgcmVmZXJlbmNlIHRvIG1ha2Ugc3Vy ZSB0aGUgcG9ydCBwb2ludGVyIGlzIGFsaXZlLgpUaGlzIG9mIGNvdXJzZSBtZWFucyB0aGF0IGRy bV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MSgpIHdvdWxkIGFsc28gbmVlZCB0bwp1c2UgdGhlIGtm cmVlIHJlZmVyZW5jZSBmb3IgdGhlIHZjcGkgYWxsb2NhdGlvbnMuIEFuZCBwcm9iYWJseSBldmVy eXdoZXJlCmVsc2UgKGUuZy4gaW4geW91ciBub3V2ZWF1IHNlcmllcyBmb3IgcGF5bG9hZCBpbmZv cm1hdGlvbikuCgpUaGF0IHdvdWxkIGdpdmUgdXMgYSB2ZXJ5IGNsZWFyIHNlcGFyYXRpb24gb3Zl cmFsbCBiZXR3ZWVuICJwb3J0IGNhbiBzdGlsbApiZSB1c2VkIGJlY2F1c2UgaXQncyBub3QgeWV0 IHVucGx1Z2dlZCIgdnMuICJwb3J0IG9ubHkgaGFuZ3MgYXJvdW5kCmJlY2F1c2UgYSBidW5jaCBv ZiB2Y3BpIGFsbG9jYXRpb25zIGFuZCBvdGhlciBwYXlsb2FkIHRoaW5ncyB1cHN0cmVhbSBvZgp0 aGUgcG9ydCBtaWdodCBzdGlsbCBuZWVkIHRoZSBwb3J0IGxvb2t1cCBrZXkgdG8gZnJlZSByZXNv dXJjZXMiLiBJbnN0ZWFkCm9mIGFnYWluIHNwcmlua2xpbmcgY29tcGxpY2F0ZWQgY29uZGl0aW9u cyBhbmQgbWFnaWMgdHJpY2tzIGFsbCBvdmVyIHRoZQpjb2RlIHRvIGZpZ3VyZSBvdXQgd2hldGhl IHdlIHNob3VsZCBhbGxvdyB0aGUgZ2V0X3ZhbGlkYXRlX3BvcnQgdG8gc3VjY2VlZApvciBub3Qs IG9yIHRoZSBtb2Rlc2V0IHRvIHN1Y2NlZWQgb3Igbm90LgotRGFuaWVsCgo+IAo+IFBpbGVzIG9m IGNvbW1lbnRzIGJlbG93Lgo+IAo+IENoZWVycywgRGFuaWVsCj4gCj4gPiAgLSBVc2UgdGhlIHNt YWxsIGNoYW5nZXMgdG8gZHJtX2RwX3B1dF9wb3J0KCkgdG8gYWRkIGV2ZW4gbW9yZSBlcnJvcgo+ ID4gICAgY2hlY2tpbmcgdG8gbWFrZSBtaXN1c2FnZSBvZiB0aGUgaGVscGVycyBtb3JlIG9idmlv dXMuIEkgYWRkZWQgdGhpcwo+ID4gICAgYWZ0ZXIgaGF2aW5nIHRvIGNoYXNlIGRvd24gdmFyaW91 cyB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHRoYXQKPiA+ICAgIHN0YXJ0ZWQgcG9wcGluZyB1 cCBmcm9tIHRoZSBuZXcgaGVscGVycyBzbyBubyBvbmUgZWxzZSBoYXMgdG8KPiA+ICAgIHRyb3Vi bGVzaG9vdCB0aGF0Lgo+ID4gIC0gTW92ZSBzb21lIGFjY2lkZW50YWwgRFJNX0RFQlVHX0tNUygp IGNhbGxzIHRvIERSTV9ERUJVR19BVE9NSUMoKQo+ID4gIC0gVXBkYXRlIGRvY3VtZW50YXRpb24g YWdhaW4sIG5vdGUgdGhhdCBmaW5kL3JlbGVhc2UoKSBzaG91bGQgYm90aCBub3QgYmUKPiA+ICAg IGNhbGxlZCBvbiB0aGUgc2FtZSBwb3J0IGluIGEgc2luZ2xlIGF0b21pYyBjaGVjayBwaGFzZSAo YnV0IG11bHRpcGxlCj4gPiAgICBjYWxscyB0byBvbmUgb3IgdGhlIG90aGVyIGlzIE9LKQo+ID4g Cj4gPiBDaGFuZ2VzIHNpbmNlIHY0Ogo+ID4gIC0gRG9uJ3Qgc2tpcCB0aGUgYXRvbWljIGNoZWNr cyBmb3IgVkNQSSBhbGxvY2F0aW9ucyBpZiBubyBuZXcgVkNQSQo+ID4gICAgYWxsb2NhdGlvbnMg aGFwcGVuIGluIGEgc3RhdGUuIFRoaXMgbWFrZXMgdGhlIG5leHQgY2hhbmdlIEknbSBhYm91dAo+ ID4gICAgdG8gbGlzdCBoZXJlIGEgbG90IGVhc2llciB0byBpbXBsZW1lbnQuCj4gPiAgLSBEb24n dCBpZ25vcmUgVkNQSSBhbGxvY2F0aW9ucyBvbiBkZXN0cm95ZWQgcG9ydHMsIGluc3RlYWQgZW5z dXJlIHRoYXQKPiA+ICAgIHdoZW4gcG9ydHMgYXJlIGRlc3Ryb3llZCBhbmQgc3RpbGwgaGF2ZSBW Q1BJIGFsbG9jYXRpb25zIGluIHRoZQo+ID4gICAgdG9wb2xvZ3kgc3RhdGUsIHRoZSBvbmx5IHN0 YXRlIGNoYW5nZXMgYWxsb3dlZCBhcmUgcmVsZWFzaW5nIHNhaWQKPiA+ICAgIHBvcnRzJyBWQ1BJ LiBUaGlzIHByZXZlbnRzIGEgc3RhdGUgd2l0aCBhIG1peCBvZiBWQ1BJIGFsbG9jYXRpb25zCj4g PiAgICBmcm9tIGRlc3Ryb3llZCBwb3J0cywgYW5kIGFsbG9jYXRpb25zIGZyb20gdmFsaWQgcG9y dHMuCj4gPiAKPiA+IENoYW5nZXMgc2luY2UgdjM6Cj4gPiAgLSBEb24ndCByZWxlYXNlIFZDUEkg YWxsb2NhdGlvbnMgaW4gdGhlIHRvcG9sb2d5IHN0YXRlIGltbWVkaWF0ZWx5IGluCj4gPiAgICBk cm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpLCBpbnN0ZWFkIG1hcmsgdGhlbSBhcyAw IGFuZCBza2lwCj4gPiAgICBvdmVyIHRoZW0gaW4gZHJtX2RwX21zdF9kdXBsaWNhdGVfc3RhdGUo KS4gVGhpcyBtYWtlcyBpdCBzbwo+ID4gICAgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xv dHMoKSBpcyBzdGlsbCBpZGVtcG90ZW50IHdoaWxlIGFsc28KPiA+ICAgIHRocm93aW5nIHdhcm5p bmdzIGlmIHRoZSBkcml2ZXIgbWVzc2VzIHVwIGl0J3MgYm9vayBrZWVwaW5nIGFuZCB0cmllcwo+ ID4gICAgdG8gcmVsZWFzZSBWQ1BJIHNsb3RzIG9uIGEgcG9ydCB0aGF0IGRvZXNuJ3QgaGF2ZSBh bnkgcHJlLWV4aXN0aW5nCj4gPiAgICBWQ1BJIGFsbG9jYXRpb24gLSBkYW52ZXQKPiA+ICAtIENo YW5nZSBtc3Rfc3RhdGUvc3RhdGUgaW4gc29tZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gIm1zdCBz dGF0ZSIKPiA+IAo+ID4gQ2hhbmdlcyBzaW5jZSB2MjoKPiA+ICAtIFVzZSBrbWVtZHVwKCkgZm9y IGR1cGxpY2F0aW5nIE1TVCBzdGF0ZSAtIGRhbnZldAo+ID4gIC0gTW92ZSBwb3J0IHZhbGlkYXRp b24gb3V0IG9mIGR1cGxpY2F0ZSBzdGF0ZSBjYWxsYmFjayAtIGRhbnZldAo+ID4gIC0gSGFuZGxl IGxvb3BpbmcgdGhyb3VnaCBNU1QgdG9wb2xvZ3kgc3RhdGVzIGluCj4gPiAgICBkcm1fZHBfbXN0 X2F0b21pY19jaGVjaygpIHNvIHRoZSBkcml2ZXIgZG9lc24ndCBoYXZlIHRvIGRvIGl0Cj4gPiAg LSBGaXggZG9jdW1lbnRhdGlvbiBpbiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4g PiAgLSBNb3ZlIHRoZSBhdG9taWMgY2hlY2sgZm9yIGVhY2ggaW5kaXZpZHVhbCB0b3BvbG9neSBz dGF0ZSBpbnRvIGl0J3MKPiA+ICAgIG93biBmdW5jdGlvbiwgcmVkdWNlcyBpbmRlbnRpbmcKPiA+ ICAtIERvbid0IGNvbnNpZGVyICJzdGFsZSIgTVNUIHBvcnRzIHdoZW4gY2FsY3VsYXRpbmcgdGhl IGJhbmR3aWR0aAo+ID4gICAgcmVxdWlyZW1lbnRzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIG9y aWdpbmFsbHkgd2UgcmVsaWVkIG9uIHRoZQo+ID4gICAgc3RhdGUgZHVwbGljYXRpb24gZnVuY3Rp b25zIHRvIHBydW5lIGFueSBzdGFsZSBwb3J0cyBmcm9tIHRoZSBuZXcKPiA+ICAgIHN0YXRlLCB3 aGljaCB3b3VsZCBwcmV2ZW50IHVzIGZyb20gaW5jb3JyZWN0bHkgY29uc2lkZXJpbmcgdGhlaXIK PiA+ICAgIGJhbmR3aWR0aCByZXF1aXJlbWVudHMgYWxvbmdzaWRlIGxlZ2l0aW1hdGUgbmV3IHBh eWxvYWRzLgo+ID4gIC0gQWRkIGZ1bmN0aW9uIHJlZmVyZW5jZXMgaW4gZHJtX2RwX2F0b21pY19y ZWxlYXNlX3ZjcGlfc2xvdHMoKSAtIGRhbnZldAo+ID4gIC0gQW5ub3RhdGUgYXRvbWljIFZDUEkg YW5kIGF0b21pYyBjaGVjayBmdW5jdGlvbnMgd2l0aCBfX211c3RfY2hlY2sKPiA+ICAgIC0gZGFu dmV0Cj4gPiAKPiA+IENoYW5nZXMgc2luY2UgdjE6Cj4gPiAgLSBEb24ndCB1c2UgdGhlIG5vdy1y ZW1vdmVkIC0+YXRvbWljX2NoZWNrKCkgZm9yIHByaXZhdGUgb2JqZWN0cyBob29rLAo+ID4gICAg anVzdCBnaXZlIGRyaXZlcnMgYSBmdW5jdGlvbiB0byBjYWxsIHRoZW1zZWx2ZXMKPiA+IAo+ID4g U2lnbmVkLW9mZi1ieTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KPiA+IENjOiBEYW5p ZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9n cHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYyB8IDI5NCArKysrKysrKysrKysrKysrKysrKysr Ky0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgfCAgIDQgKwo+ ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jICAgfCAgNjQgKysrLS0tCj4g PiAgaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaCAgICAgICB8ICAyNCArKy0KPiA+ICA0 IGZpbGVzIGNoYW5nZWQsIDMxOSBpbnNlcnRpb25zKCspLCA2NyBkZWxldGlvbnMoLSkKPiA+IAo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiBpbmRleCAwMGZiZTdhMjY5 OWQuLjE4M2QwZTgzMmNlZCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBf bXN0X3RvcG9sb2d5LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9s b2d5LmMKPiA+IEBAIC0yNjE3LDIxICsyNjE3LDQyIEBAIHN0YXRpYyBpbnQgZHJtX2RwX2luaXRf dmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ICB9Cj4gPiAgCj4g PiAgLyoqCj4gPiAtICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQgYW5k IGFkZCB2Y3BpIHNsb3RzIHRvIHRoZSBzdGF0ZQo+ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92 Y3BpX3Nsb3RzKCkgLSBGaW5kIGFuZCBhZGQgVkNQSSBzbG90cyB0byB0aGUgc3RhdGUKPiA+ICAg KiBAc3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUKPiA+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kg bWFuYWdlciBmb3IgdGhlIHBvcnQKPiA+ICAgKiBAcG9ydDogcG9ydCB0byBmaW5kIHZjcGkgc2xv dHMgZm9yCj4gPiAgICogQHBibjogYmFuZHdpZHRoIHJlcXVpcmVkIGZvciB0aGUgbW9kZSBpbiBQ Qk4KPiA+ICAgKgo+ID4gLSAqIFJFVFVSTlM6Cj4gPiAtICogVG90YWwgc2xvdHMgaW4gdGhlIGF0 b21pYyBzdGF0ZSBhc3NpZ25lZCBmb3IgdGhpcyBwb3J0IG9yIGVycm9yCj4gPiArICogQWxsb2Nh dGVzIFZDUEkgc2xvdHMgdG8gQHBvcnQsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgVkNQSSBhbGxv Y2F0aW9ucyBpdAo+ID4gKyAqIG1heSBoYXZlIGhhZC4gQW55IGF0b21pYyBkcml2ZXJzIHdoaWNo IHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uCj4gPiArICogaW4gdGhlaXIgJmRy bV9lbmNvZGVyX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2soKSBjYWxsYmFjayB0byBjaGFuZ2Ug dGhlCj4gPiArICogY3VycmVudCBWQ1BJIGFsbG9jYXRpb24gZm9yIHRoZSBuZXcgc3RhdGUsIGJ1 dCBvbmx5IHdoZW4KPiA+ICsgKiAmZHJtX2NydGNfc3RhdGUubW9kZV9jaGFuZ2VkIG9yICZkcm1f Y3J0Y19zdGF0ZS5jb25uZWN0b3JzX2NoYW5nZWQgaXMgc2V0Cj4gPiArICogdG8gZW5zdXJlIGNv bXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIHRoYXQgc3RpbGwgdXNlIHRo ZQo+ID4gKyAqIGxlZ2FjeSBtb2Rlc2V0dGluZyBVQVBJLgo+ID4gKyAqCj4gPiArICogQWxsb2Nh dGlvbnMgc2V0IGJ5IHRoaXMgZnVuY3Rpb24gYXJlIG5vdCBjaGVja2VkIGFnYWluc3QgdGhlIGJh bmR3aWR0aAo+ID4gKyAqIHJlc3RyYWludHMgb2YgQG1nciB1bnRpbCB0aGUgZHJpdmVyIGNhbGxz IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkuCj4gPiArICoKPiA+ICsgKiBBZGRpdGlvbmFsbHks IGl0IGlzIE9LIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2Ft ZQo+ID4gKyAqIEBwb3J0IGFzIG5lZWRlZC4gSXQgaXMgbm90IE9LIGhvd2V2ZXIsIHRvIGNhbGwg dGhpcyBmdW5jdGlvbiBhbmQKPiA+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90 cygpIGluIHRoZSBzYW1lIGF0b21pYyBjaGVjayBwaGFzZS4KPiA+ICsgKgo+ID4gKyAqIFNlZSBh bHNvOgo+ID4gKyAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkKPiA+ICsgKiBk cm1fZHBfbXN0X2F0b21pY19jaGVjaygpCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAq IFRvdGFsIHNsb3RzIGluIHRoZSBhdG9taWMgc3RhdGUgYXNzaWduZWQgZm9yIHRoaXMgcG9ydCwg b3IgYSBuZWdhdGl2ZSBlcnJvcgo+ID4gKyAqIGNvZGUgaWYgdGhlIHBvcnQgbm8gbG9uZ2VyIGV4 aXN0cwo+ID4gICAqLwo+ID4gIGludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiAgCQkJCSAgc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptZ3IsCj4gPiAgCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9y dCwgaW50IHBibikKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRl ICp0b3BvbG9neV9zdGF0ZTsKPiA+IC0JaW50IHJlcV9zbG90czsKPiA+ICsJc3RydWN0IGRybV9k cF92Y3BpX2FsbG9jYXRpb24gKnBvcywgKnZjcGkgPSBOVUxMOwo+ID4gKwlpbnQgcHJldl9zbG90 cywgcmVxX3Nsb3RzLCByZXQ7Cj4gPiAgCj4gPiAgCXRvcG9sb2d5X3N0YXRlID0gZHJtX2F0b21p Y19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCBtZ3IpOwo+ID4gIAlpZiAoSVNfRVJSKHRv cG9sb2d5X3N0YXRlKSkKPiA+IEBAIC0yNjQwLDIwICsyNjYxLDYwIEBAIGludCBkcm1fZHBfYXRv bWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiAg CXBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQpOwo+ID4gIAlp ZiAocG9ydCA9PSBOVUxMKQo+ID4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAtCXJlcV9zbG90cyA9 IERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJuX2Rpdik7Cj4gPiAtCURSTV9ERUJVR19LTVMoInZj cGkgc2xvdHMgcmVxPSVkLCBhdmFpbD0lZFxuIiwKPiA+IC0JCQlyZXFfc2xvdHMsIHRvcG9sb2d5 X3N0YXRlLT5hdmFpbF9zbG90cyk7Cj4gPiAgCj4gPiAtCWlmIChyZXFfc2xvdHMgPiB0b3BvbG9n eV9zdGF0ZS0+YXZhaWxfc2xvdHMpIHsKPiA+IC0JCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiA+ IC0JCXJldHVybiAtRU5PU1BDOwo+ID4gKwl0b3BvbG9neV9zdGF0ZS0+dmNwaV9hbGxvY2F0ZWQg PSB0cnVlOwo+ID4gKwo+ID4gKwkvKiBGaW5kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24gZm9yIHRo aXMgcG9ydCwgaWYgYW55ICovCj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmdG9wb2xv Z3lfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gPiArCQlpZiAocG9zLT5wb3J0ID09IHBvcnQpIHsK PiA+ICsJCQl2Y3BpID0gcG9zOwo+ID4gKwkJCXByZXZfc2xvdHMgPSB2Y3BpLT52Y3BpOwo+ID4g Kwo+ID4gKwkJCS8qCj4gPiArCQkJICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCB1bmxlc3Mg dGhlIGRyaXZlciB0cmllcwo+ID4gKwkJCSAqIHJlbGVhc2luZyBhbmQgYWxsb2NhdGluZyB0aGUg c2FtZSBWQ1BJIGFsbG9jYXRpb24sCj4gPiArCQkJICogd2hpY2ggaXMgYW4gZXJyb3IKPiA+ICsJ CQkgKi8KPiA+ICsJCQlpZiAoV0FSTl9PTighcHJldl9zbG90cykpIHsKPiAKPiAKPiA+ICsJCQkJ RFJNX0VSUk9SKCJjYW5ub3QgYWxsb2NhdGUgYW5kIHJlbGVhc2UgVkNQSSBvbiBbTVNUIFBPUlQ6 JXBdIGluIHRoZSBzYW1lIHN0YXRlXG4iLAo+ID4gKwkJCQkJICBwb3J0KTsKPiA+ICsJCQkJcmV0 dXJuIC1FSU5WQUw7Cj4gPiArCQkJfQo+IAo+IEFsbG93aW5nIGF0b21pYyBjaGFuZ2VzIHRvIG91 dHB1dCBzdGF0ZSAobGlrZSBkaXNhYmxpbmcgaXQgb24gb25lIGNydGMsCj4gYW5kIHRoZW4gZW5h Ymxpbmcgb24gdGhlIG90aGVyLCB0aHVzIGJvdGggcmVsZWFzaW5nIGFuZCByZS1hbGxvY2F0aW5n IHRoZQo+IHZjcGkgaW4gb25lIGdvKSBpcyBraW5kYSB0aGUgcG9pbnQgb2YgYXRvbWljLiBTbyBk ZWZpbml0ZWx5IGNhbid0IEVJTlZBTAo+IGhlcmUuCj4gCj4gU291bmRzIGxpa2Ugd2UgbmVlZCBt b3JlIHRlc3RjYXNlcyBpbiBpZ3Q/Cj4gCj4gPiArCj4gPiArCQkJYnJlYWs7Cj4gPiArCQl9Cj4g PiAgCX0KPiA+ICsJaWYgKCF2Y3BpKQo+ID4gKwkJcHJldl9zbG90cyA9IDA7Cj4gPiAgCj4gPiAt CXRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyAtPSByZXFfc2xvdHM7Cj4gPiAtCURSTV9ERUJV R19LTVMoInZjcGkgc2xvdHMgYXZhaWw9JWQiLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMp Owo+ID4gKwlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCBtZ3ItPnBibl9kaXYpOwo+ID4g Kwo+ID4gKwlEUk1fREVCVUdfQVRPTUlDKCJbQ09OTkVDVE9SOiVkOiVzXSBbTVNUIFBPUlQ6JXBd IFZDUEkgJWQgLT4gJWRcbiIsCj4gPiArCQkJIHBvcnQtPmNvbm5lY3Rvci0+YmFzZS5pZCwgcG9y dC0+Y29ubmVjdG9yLT5uYW1lLAo+ID4gKwkJCSBwb3J0LCBwcmV2X3Nsb3RzLCByZXFfc2xvdHMp Owo+ID4gKwo+ID4gKwkvKiBBZGQgdGhlIG5ldyBhbGxvY2F0aW9uIHRvIHRoZSBzdGF0ZSAqLwo+ ID4gKwlpZiAoIXZjcGkpIHsKPiA+ICsJCXZjcGkgPSBremFsbG9jKHNpemVvZigqdmNwaSksIEdG UF9LRVJORUwpOwo+ID4gKwkJaWYgKCF2Y3BpKSB7Cj4gPiArCQkJcmV0ID0gLUVOT01FTTsKPiA+ ICsJCQlnb3RvIG91dDsKPiA+ICsJCX0KPiA+ICAKPiA+ICsJCXZjcGktPnBvcnQgPSBkcm1fZHBf Z2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQpOwo+ID4gKwkJaWYgKCF2Y3BpLT5wb3J0 KSB7Cj4gPiArCQkJcmV0ID0gLUVJTlZBTDsKPiA+ICsJCQlrZnJlZSh2Y3BpKTsKPiA+ICsJCQln b3RvIG91dDsKPiA+ICsJCX0KPiA+ICsJCWxpc3RfYWRkKCZ2Y3BpLT5uZXh0LCAmdG9wb2xvZ3lf c3RhdGUtPnZjcGlzKTsKPiA+ICsJfQo+ID4gKwl2Y3BpLT52Y3BpID0gcmVxX3Nsb3RzOwo+ID4g Kwo+ID4gKwlyZXQgPSByZXFfc2xvdHM7Cj4gPiArb3V0Ogo+ID4gIAlkcm1fZHBfcHV0X3BvcnQo cG9ydCk7Cj4gPiAtCXJldHVybiByZXFfc2xvdHM7Cj4gPiArCXJldHVybiByZXQ7Cj4gPiAgfQo+ ID4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMpOwo+ID4gIAo+ ID4gQEAgLTI2NjEsMzEgKzI3MjIsNjYgQEAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2Zp bmRfdmNwaV9zbG90cyk7Cj4gPiAgICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMo KSAtIFJlbGVhc2UgYWxsb2NhdGVkIHZjcGkgc2xvdHMKPiA+ICAgKiBAc3RhdGU6IGdsb2JhbCBh dG9taWMgc3RhdGUKPiA+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBv cnQKPiA+IC0gKiBAc2xvdHM6IG51bWJlciBvZiB2Y3BpIHNsb3RzIHRvIHJlbGVhc2UKPiA+ICsg KiBAcG9ydDogVGhlIHBvcnQgdG8gcmVsZWFzZSB0aGUgVkNQSSBzbG90cyBmcm9tCj4gPiAgICoK PiA+IC0gKiBSRVRVUk5TOgo+ID4gLSAqIDAgaWYgQHNsb3RzIHdlcmUgYWRkZWQgYmFjayB0byAm ZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgb3IKPiA+IC0gKiBuZWdhdGl2 ZSBlcnJvciBjb2RlCj4gPiArICogUmVsZWFzZXMgYW55IFZDUEkgc2xvdHMgdGhhdCBoYXZlIGJl ZW4gYWxsb2NhdGVkIHRvIGEgcG9ydCBpbiB0aGUgYXRvbWljCj4gPiArICogc3RhdGUuIEFueSBh dG9taWMgZHJpdmVycyB3aGljaCBzdXBwb3J0IE1TVCBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBp bgo+ID4gKyAqIHRoZWlyICZkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2so KSBjYWxsYmFjayB3aGVuIHRoZQo+ID4gKyAqIGNvbm5lY3RvciB3aWxsIG5vIGxvbmdlciBoYXZl IFZDUEkgYWxsb2NhdGVkIChlLmcuIGJlY2F1c2UgaXQncyBDUlRDIHdhcwo+ID4gKyAqIHJlbW92 ZWQpIHdoZW4gaXQgaGFkIFZDUEkgYWxsb2NhdGVkIGluIHRoZSBwcmV2aW91cyBhdG9taWMgc3Rh dGUuCj4gPiArICoKPiA+ICsgKiBJdCBpcyBPSyB0byBjYWxsIHRoaXMgZXZlbiBpZiBAcG9ydCBo YXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4KPiA+ICsgKiBBZGRpdGlvbmFsbHksIGl0 IGlzIE9LIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZQo+ ID4gKyAqIEBwb3J0IGFzIG5lZWRlZC4gSXQgaXMgbm90IE9LIGhvd2V2ZXIsIHRvIGNhbGwgdGhp cyBmdW5jdGlvbiBhbmQKPiA+ICsgKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIG9u IHRoZSBzYW1lIEBwb3J0IGluIGEgc2luZ2xlIGF0b21pYyBjaGVjawo+ID4gKyAqIHBoYXNlLgo+ ID4gKyAqCj4gPiArICogU2VlIGFsc286Cj4gPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlf c2xvdHMoKQo+ID4gKyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKPiA+ICsgKgo+ID4gKyAq IFJldHVybnM6Cj4gPiArICogMCBpZiBhbGwgc2xvdHMgZm9yIHRoaXMgcG9ydCB3ZXJlIGFkZGVk IGJhY2sgdG8KPiA+ICsgKiAmZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS5hdmFpbF9zbG90cyBv ciBuZWdhdGl2ZSBlcnJvciBjb2RlCj4gPiAgICovCj4gPiAgaW50IGRybV9kcF9hdG9taWNfcmVs ZWFzZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ICAJCQkJ ICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+IC0JCQkJICAgICBp bnQgc2xvdHMpCj4gPiArCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKPiA+ ICB7Cj4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICp0b3BvbG9neV9zdGF0 ZTsKPiA+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvczsKPiA+ICsJYm9vbCBm b3VuZCA9IGZhbHNlOwo+ID4gIAo+ID4gIAl0b3BvbG9neV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbWdyKTsKPiA+ICAJaWYgKElTX0VSUih0b3BvbG9n eV9zdGF0ZSkpCj4gPiAgCQlyZXR1cm4gUFRSX0VSUih0b3BvbG9neV9zdGF0ZSk7Cj4gPiAgCj4g PiAtCS8qIFdlIGNhbm5vdCByZWx5IG9uIHBvcnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQo+ ID4gLQkgKiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBl eGlzdCBpZiB0aGUgcGFyZW50Cj4gPiAtCSAqIGJyYW5jaCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4g VGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJhY2tpbmcKPiA+IC0JICogcGVyLXBvcnQgc2xvdCBh bGxvY2F0aW9uIGluIGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgaW5zdGVhZCBvZgo+ID4gLQkg KiBkZXBlbmRpbmcgb24gdGhlIGNhbGxlciB0byB0ZWxsIHVzIGhvdyBtYW55IHNsb3RzIHRvIHJl bGVhc2UuCj4gPiAtCSAqLwo+ID4gLQl0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgKz0gc2xv dHM7Cj4gPiAtCURSTV9ERUJVR19LTVMoInZjcGkgc2xvdHMgcmVsZWFzZWQ9JWQsIGF2YWlsPSVk XG4iLAo+ID4gLQkJCXNsb3RzLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ID4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnRvcG9sb2d5X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ IAo+ID4gKwkJaWYgKHBvcy0+cG9ydCA9PSBwb3J0KSB7Cj4gPiArCQkJZm91bmQgPSB0cnVlOwo+ ID4gKwkJCWJyZWFrOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCWlmIChXQVJOX09OKCFmb3VuZCkp IHsKPiA+ICsJCURSTV9FUlJPUigibm8gVkNQSSBmb3IgW01TVCBQT1JUOiVwXSBmb3VuZCBpbiBt c3Qgc3RhdGUgJXBcbiIsCj4gPiArCQkJICBwb3J0LCAmdG9wb2xvZ3lfc3RhdGUtPmJhc2UpOwo+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJRFJNX0RFQlVHX0FUT01J QygiW01TVCBQT1JUOiVwXSBWQ1BJICVkIC0+IDBcbiIsIHBvcnQsIHBvcy0+dmNwaSk7Cj4gPiAr CWlmIChwb3MtPnZjcGkpIHsKPiA+ICsJCS8qCj4gPiArCQkgKiBUaGlzIHNob3VsZCBiZSBzYWZl LWFzIHRoZSBwcmV2aW91cyBzdGF0ZSB3aWxsIHN0aWxsIGhvbGQgYQo+ID4gKwkJICogcmVmZXJl bmNlIHRvIHRoaXMgcG9ydCB1bnRpbCB3ZSBzd2FwIHN0YXRlcy4gSWYgaXQncyBub3QsCj4gPiAr CQkgKiB0aGUgZHJpdmVyIGhhcyBhIGJvb2trZWVwaW5nIGVycm9yCj4gPiArCQkgKi8KPiA+ICsJ CWlmIChXQVJOX09OKGRybV9kcF9wdXRfcG9ydChwb3J0KSkpIHsKPiAKPiBUaGUgdXN1YWwgd2F5 IHRvIGRvIHRoaXMgKGluc3RlYWQgb2YgYWRkaW5nIGEgcmV0dXJuIHZhbHVlIHRvIHRoZSBub3Jt YWwKPiBfcHV0IGZ1bmN0aW9uKSBpcyBzb21ldGhpbmcgbGlrZQo+IAo+IAlrcmVmX3B1dChwb3J0 LCBmdW5jdGlvbl90aGF0X3dpdGhfanVzdF9hX1dBUk5JTkdfRFJNX0VSUk9SKQo+IAo+IGF2b2lk cyB0aGUgbmVlZCBmb3IgcGF0Y2ggMi4KPiAKPiA+ICsJCQlEUk1fRVJST1IoImNhbm5vdCBhbGxv Y2F0ZSBhbmQgcmVsZWFzZSBWQ1BJIG9uIFtNU1QgUE9SVDolcF0gaW4gdGhlIHNhbWUgc3RhdGVc biIsCj4gPiArCQkJCSAgcG9ydCk7Cj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCQl9Cj4g PiArCQlwb3MtPnZjcGkgPSAwOwo+ID4gKwl9Cj4gPiAgCj4gPiAgCXJldHVybiAwOwo+ID4gIH0K PiA+IEBAIC0zMTE1LDE1ICszMjExLDQ1IEBAIHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0cm95X2Nv bm5lY3Rvcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiA+ICBzdGF0aWMgc3RydWN0 IGRybV9wcml2YXRlX3N0YXRlICoKPiA+ICBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9zdGF0ZShzdHJ1 Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmopCj4gPiAgewo+ID4gLQlzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9zdGF0ZSAqc3RhdGU7Cj4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0 YXRlICpzdGF0ZSwgKm9sZF9zdGF0ZSA9Cj4gPiArCQl0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUo b2JqLT5zdGF0ZSk7Cj4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uICpwb3MsICp2 Y3BpOwo+ID4gIAo+ID4gLQlzdGF0ZSA9IGttZW1kdXAob2JqLT5zdGF0ZSwgc2l6ZW9mKCpzdGF0 ZSksIEdGUF9LRVJORUwpOwo+ID4gKwlzdGF0ZSA9IGttZW1kdXAob2xkX3N0YXRlLCBzaXplb2Yo KnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiAgCWlmICghc3RhdGUpCj4gPiAgCQlyZXR1cm4gTlVM TDsKPiA+ICAKPiA+ICAJX19kcm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVf c3RhdGUob2JqLCAmc3RhdGUtPmJhc2UpOwo+ID4gIAo+ID4gKwlJTklUX0xJU1RfSEVBRCgmc3Rh dGUtPnZjcGlzKTsKPiA+ICsJc3RhdGUtPnZjcGlfYWxsb2NhdGVkID0gZmFsc2U7Cj4gPiArCj4g PiArCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmb2xkX3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ ID4gKwkJLyogUHJ1bmUgbGVmdG92ZXIgZnJlZWQgVkNQSSBhbGxvY2F0aW9ucyAqLwo+ID4gKwkJ aWYgKCFwb3MtPnZjcGkpCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiArCQl2Y3BpID0ga21l bWR1cChwb3MsIHNpemVvZigqdmNwaSksIEdGUF9LRVJORUwpOwo+ID4gKwkJaWYgKCF2Y3BpKQo+ ID4gKwkJCWdvdG8gZmFpbDsKPiA+ICsKPiA+ICsJCS8qIFRha2UgYSBwbGFpbiBvbGQga3JlZiBo ZXJlIGFuZCBkb24ndCB2YWxpZGF0ZSB0aGUgcG9ydCwgYXMKPiA+ICsJCSAqIGl0J3MgdG9wb2xv Z3kgbWlnaHQgbm90IGV2ZW4gZXhpc3QgYW55bW9yZQo+ID4gKwkJICovCj4gPiArCQlrcmVmX2dl dCgmdmNwaS0+cG9ydC0+a3JlZik7Cj4gPiArCQlsaXN0X2FkZCgmdmNwaS0+bmV4dCwgJnN0YXRl LT52Y3Bpcyk7Cj4gPiArCX0KPiA+ICsKPiA+ICAJcmV0dXJuICZzdGF0ZS0+YmFzZTsKPiA+ICsK PiA+ICtmYWlsOgo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB2Y3BpLCAmc3Rh dGUtPnZjcGlzLCBuZXh0KSB7Cj4gPiArCQlkcm1fZHBfcHV0X3BvcnQocG9zLT5wb3J0KTsKPiA+ ICsJCWtmcmVlKHBvcyk7Cj4gPiArCX0KPiA+ICsJa2ZyZWUoc3RhdGUpOwo+ID4gKwo+ID4gKwly ZXR1cm4gTlVMTDsKPiA+ICB9Cj4gPiAgCj4gPiAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF9kZXN0 cm95X3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaiwKPiA+IEBAIC0zMTMxLDE0ICsz MjU3LDExNiBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfbXN0X2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRy bV9wcml2YXRlX29iaiAqb2JqLAo+ID4gIHsKPiA+ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfc3RhdGUgKm1zdF9zdGF0ZSA9Cj4gPiAgCQl0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3Rh dGUpOwo+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9zLCAqdG1wOwo+ID4g Kwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0bXAsICZtc3Rfc3RhdGUtPnZj cGlzLCBuZXh0KSB7Cj4gPiArCQkvKiBXZSBvbmx5IGtlZXAgcmVmZXJlbmNlcyB0byBwb3J0cyB3 aXRoIG5vbi16ZXJvIFZDUElzICovCj4gPiArCQlpZiAocG9zLT52Y3BpKQo+ID4gKwkJCWRybV9k cF9wdXRfcG9ydChwb3MtPnBvcnQpOwo+ID4gKwkJa2ZyZWUocG9zKTsKPiA+ICsJfQo+ID4gIAo+ ID4gIAlrZnJlZShtc3Rfc3RhdGUpOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIG1zdF9zdGF0ZV9mdW5jcyA9IHsKPiA+ICtzdGF0 aWMgaW5saW5lIGludAo+ID4gK2RybV9kcF9tc3RfYXRvbWljX2NoZWNrX3RvcG9sb2d5X3N0YXRl KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gKwkJCQkgICAgICAgc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSkKPiA+ICt7Cj4gPiArCXN0 cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uICp2Y3BpOwo+ID4gKwlzdHJ1Y3QgZHJtX2RwX21z dF9wb3J0ICpwb3J0Owo+ID4gKwlpbnQgYXZhaWxfc2xvdHMgPSA2MywgcmV0Owo+ID4gKwo+ID4g KwkvKiBUaGVyZSdzIG5vIHBvc3NpYmxlIHNjZW5hcmlvIHdoZXJlIHJlbGVhc2luZyBWQ1BJIG9y IGtlZXBpbmcgaXQgdGhlCj4gPiArCSAqIHNhbWUgd291bGQgbWFrZSB0aGUgc3RhdGUgaW52YWxp ZAo+ID4gKwkgKi8KPiA+ICsJaWYgKCFtc3Rfc3RhdGUtPnZjcGlfYWxsb2NhdGVkKSB7Cj4gCj4g RG8gd2UgbmVlZCB0aGlzPyBJZiBub3QgSSdtIGFsd2F5cyBpbiBmYXZvdXIgb2YgcmVtb3Zpbmcg Y29kZSBpZiBpdCdzIG5vdAo+IG5lZWRlZCA6LSkKPiAKPiA+ICsJCURSTV9ERUJVR19BVE9NSUMo IltNU1QgTUdSOiVwXSBzdGF0ZSAlcCBhbGxvY2F0ZXMgbm8gVkNQSSwgY2hlY2sgc2tpcHBlZFxu IiwKPiA+ICsJCQkJIG1nciwgJm1zdF9zdGF0ZS0+YmFzZSk7Cj4gPiArCQlyZXR1cm4gMDsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZjcGksICZtc3Rfc3RhdGUtPnZj cGlzLCBuZXh0KSB7Cj4gPiArCQkvKiBSZWxlYXNpbmcgVkNQSSBpcyBhbHdheXMgT0stZXZlbiBp ZiB0aGUgcG9ydCBpcyBnb25lICovCj4gPiArCQlpZiAoIXZjcGktPnZjcGkpIHsKPiA+ICsJCQlE Uk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIHJlbGVhc2VzIGFsbCBWQ1BJIHNsb3RzXG4i LAo+ID4gKwkJCQkJIHZjcGktPnBvcnQpOwo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJfQo+ID4g Kwo+ID4gKwkJcG9ydCA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX3BvcnRfcmVmKG1nciwgdmNwaS0+ cG9ydCk7Cj4gPiArCQlpZiAoIXBvcnQpIHsKPiA+ICsJCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNU IFBPUlQ6JXBdIGlzIGdvbmUgYnV0IHN0aWxsIGhhcyBWQ1BJLCBjYW5ub3QgYWRkIG5ldyBWQ1BJ XG4iLAo+ID4gKwkJCQkJIHZjcGktPnBvcnQpOwo+ID4gKwkJCXJldHVybiAtRUlOVkFMOwo+ID4g KwkJfQo+IAo+IEZvciBmaW5kX3ZjcGkgd2UndmUgYWxyZWFkeSBkb25lIHRoaXMuIEZvciB1bnBs dWdnZWQgdmNwaSwgd2UgY2FuJ3QgZG8KPiB0aGlzIGhlcmUgSSB0aGluayAtIG90aGVyd2lzZSBp ZiB5b3UgZW5hYmxlIDIgbXN0IG91dHB1dHMgb24gdGhlIHNhbWUKPiBicmFuY2gsIGFuZCB1bnBs dWcgYm90aCwgb2xkIG5vbi1hdG9taWMgdXNlcnNwYWNlIGNhbiBuZXZlciBldmVyIGFnYWluCj4g ZGlzYWJsZSB0aGVtIGJlY2F1c2UgaXQgY2FuJ3QgZGlzYWJsZSBib3RoLiBUaGUgY2hlY2sgKHRv IHNraXAgYWxyZWFkeQo+IGRlYWxsb2NhdGVkIHBvcnRzKSBhYm92ZSBpc24ndCBlbm91Z2ggdG8g aGFuZGxlIHRoYXQuCj4gCj4gPiArCj4gPiArCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6 JXBdIHJlcXVpcmVzICVkIHZjcGkgc2xvdHNcbiIsCj4gPiArCQkJCSB2Y3BpLT5wb3J0LCB2Y3Bp LT52Y3BpKTsKPiA+ICsKPiA+ICsJCWF2YWlsX3Nsb3RzIC09IHZjcGktPnZjcGk7Cj4gPiArCQlp ZiAoYXZhaWxfc2xvdHMgPCAwKSB7Cj4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JU OiVwXSBub3QgZW5vdWdoIFZDUEkgc2xvdHMgaW4gbXN0IHN0YXRlICVwIChhdmFpbD0lZClcbiIs Cj4gPiArCQkJCQkgdmNwaS0+cG9ydCwgbXN0X3N0YXRlLAo+ID4gKwkJCQkJIGF2YWlsX3Nsb3Rz ICsgdmNwaS0+dmNwaSk7Cj4gPiArCQkJcmV0ID0gLUVOT1NQQzsKPiA+ICsJCQlnb3RvIHBvcnRf ZmFpbDsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiA+ICsJ fQo+ID4gKwlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIE1HUjolcF0gbXN0IHN0YXRlICVwIFZDUEkg YXZhaWw9JWQgdXNlZD0lZFxuIiwKPiA+ICsJCQkgbWdyLCBtc3Rfc3RhdGUsIGF2YWlsX3Nsb3Rz LAo+ID4gKwkJCSA2MyAtIGF2YWlsX3Nsb3RzKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiAr cG9ydF9mYWlsOgo+ID4gKwlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiArCXJldHVybiByZXQ7 Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrIC0g Q2hlY2sgdGhhdCB0aGUgbmV3IHN0YXRlIG9mIGFuIE1TVCB0b3BvbG9neSBpbiBhbgo+ID4gKyAq IGF0b21pYyB1cGRhdGUgaXMgdmFsaWQKPiA+ICsgKiBAc3RhdGU6IFBvaW50ZXIgdG8gdGhlIG5l dyAmc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUKPiA+ICsgKgo+ID4gKyAqIENoZWNr cyB0aGUgZ2l2ZW4gdG9wb2xvZ3kgc3RhdGUgZm9yIGFuIGF0b21pYyB1cGRhdGUgdG8gZW5zdXJl IHRoYXQgaXQncwo+ID4gKyAqIHZhbGlkLiBUaGlzIGluY2x1ZGVzIGNoZWNraW5nIHdoZXRoZXIg dGhlcmUncyBlbm91Z2ggYmFuZHdpZHRoIHRvIHN1cHBvcnQKPiA+ICsgKiB0aGUgbmV3IFZDUEkg YWxsb2NhdGlvbnMgaW4gdGhlIGF0b21pYyB1cGRhdGUuCj4gPiArICoKPiA+ICsgKiBBbnkgYXRv bWljIGRyaXZlcnMgc3VwcG9ydGluZyBEUCBNU1QgbXVzdCBtYWtlIHN1cmUgdG8gY2FsbCB0aGlz IGFmdGVyCj4gPiArICogY2hlY2tpbmcgdGhlIHJlc3Qgb2YgdGhlaXIgc3RhdGUgaW4gdGhlaXIK PiA+ICsgKiAmZHJtX21vZGVfY29uZmlnX2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxiYWNrLgo+ ID4gKyAqCj4gPiArICogU2VlIGFsc286Cj4gPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlf c2xvdHMoKQo+ID4gKyAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkKPiA+ICsg Kgo+ID4gKyAqIFJldHVybnM6Cj4gPiArICoKPiA+ICsgKiAwIGlmIHRoZSBuZXcgc3RhdGUgaXMg dmFsaWQsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgo+ID4gKyAqLwo+ID4gK2ludCBk cm1fZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4g PiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncjsKPiA+ICsJc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZTsKPiA+ICsJaW50IGksIHJl dCA9IDA7Cj4gPiArCj4gPiArCWZvcl9lYWNoX25ld19tc3RfbWdyX2luX3N0YXRlKHN0YXRlLCBt Z3IsIG1zdF9zdGF0ZSwgaSkgewo+ID4gKwkJcmV0ID0gZHJtX2RwX21zdF9hdG9taWNfY2hlY2tf dG9wb2xvZ3lfc3RhdGUobWdyLCBtc3Rfc3RhdGUpOwo+ID4gKwkJaWYgKHJldCkKPiA+ICsJCQli cmVhazsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICtFWFBPUlRf U1lNQk9MKGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKTsKPiA+ICsKPiA+ICtjb25zdCBzdHJ1Y3Qg ZHJtX3ByaXZhdGVfc3RhdGVfZnVuY3MgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5jcyA9 IHsKPiA+ICAJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9z dGF0ZSwKPiA+ICAJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2RwX21zdF9kZXN0cm95X3N0 YXRlLAo+ID4gIH07Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRl X2Z1bmNzKTsKPiA+ICAKPiA+ICAvKioKPiA+ICAgKiBkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xv Z3lfc3RhdGU6IGdldCBNU1QgdG9wb2xvZ3kgc3RhdGUKPiA+IEBAIC0zMjE2LDEzICszNDQ0LDEx IEBAIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9pbml0KHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyLAo+ID4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gPiAgCj4gPiAgCW1zdF9z dGF0ZS0+bWdyID0gbWdyOwo+ID4gLQo+ID4gLQkvKiBtYXguIHRpbWUgc2xvdHMgLSBvbmUgc2xv dCBmb3IgTVRQIGhlYWRlciAqLwo+ID4gLQltc3Rfc3RhdGUtPmF2YWlsX3Nsb3RzID0gNjM7Cj4g PiArCUlOSVRfTElTVF9IRUFEKCZtc3Rfc3RhdGUtPnZjcGlzKTsKPiA+ICAKPiA+ICAJZHJtX2F0 b21pY19wcml2YXRlX29ial9pbml0KCZtZ3ItPmJhc2UsCj4gPiAgCQkJCSAgICAmbXN0X3N0YXRl LT5iYXNlLAo+ID4gLQkJCQkgICAgJm1zdF9zdGF0ZV9mdW5jcyk7Cj4gPiArCQkJCSAgICAmZHJt X2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5jcyk7Cj4gPiAgCj4gPiAgCXJldHVybiAwOwo+ID4g IH0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+IGluZGV4IDEzMmU5Nzgy MjdmYi4uOGU4NWUwNGE1OTQ4IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKPiA+IEBAIC0xMjU5Miw2ICsxMjU5MiwxMCBAQCBzdGF0aWMgaW50IGludGVsX2F0b21p Y19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gIAkJCQkgICAgICAgIlttb2Rlc2V0 XSIgOiAiW2Zhc3RzZXRdIik7Cj4gPiAgCX0KPiA+ICAKPiA+ICsJcmV0ID0gZHJtX2RwX21zdF9h dG9taWNfY2hlY2soc3RhdGUpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ ICsKPiA+ICAJaWYgKGFueV9tcykgewo+ID4gIAkJcmV0ID0gaW50ZWxfbW9kZXNldF9jaGVja3Mo c3RhdGUpOwo+ID4gIAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RwX21zdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKPiA+IGluZGV4 IDRkZTI0N2RkZjA1Zi4uYmUyZDFhYzdkODdkIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RwX21zdC5jCj4gPiBAQCAtNDEsOCArNDEsMTMgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBf bXN0X2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gIAlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gY29ubl9zdGF0ZS0+Y29ubmVjdG9yOwo+ ID4gIAl2b2lkICpwb3J0ID0gdG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3RvciktPnBvcnQ7Cj4g PiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IHBpcGVfY29uZmlnLT5iYXNlLnN0 YXRlOwo+ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBwaXBlX2NvbmZpZy0+YmFzZS5jcnRj Owo+ID4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlID0KPiA+ICsJCWRy bV9hdG9taWNfZ2V0X29sZF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKPiA+ICsJc3RydWN0IGRy bV9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSA9ICZwaXBlX2NvbmZpZy0+YmFzZTsKPiA+ICAJ aW50IGJwcDsKPiA+IC0JaW50IGxhbmVfY291bnQsIHNsb3RzID0gMDsKPiA+ICsJaW50IGxhbmVf Y291bnQsIHNsb3RzID0KPiA+ICsJCXRvX2ludGVsX2NydGNfc3RhdGUob2xkX2NydGNfc3RhdGUp LT5kcF9tX24udHU7Cj4gPiAgCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3Rl ZF9tb2RlID0gJnBpcGVfY29uZmlnLT5iYXNlLmFkanVzdGVkX21vZGU7Cj4gPiAgCWludCBtc3Rf cGJuOwo+ID4gIAlib29sIGNvbnN0YW50X24gPSBkcm1fZHBfaGFzX3F1aXJrKCZpbnRlbF9kcC0+ ZGVzYywKPiA+IEBAIC03Nyw4ICs4MiwxMiBAQCBzdGF0aWMgYm9vbCBpbnRlbF9kcF9tc3RfY29t cHV0ZV9jb25maWcoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiAgCW1zdF9wYm4g PSBkcm1fZHBfY2FsY19wYm5fbW9kZShhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrLCBicHApOwo+ ID4gIAlwaXBlX2NvbmZpZy0+cGJuID0gbXN0X3BibjsKPiA+ICAKPiA+IC0JLyogWm9tYmllIGNv bm5lY3RvcnMgY2FuJ3QgaGF2ZSBWQ1BJIHNsb3RzICovCj4gPiAtCWlmICghZHJtX2Nvbm5lY3Rv cl9pc191bnJlZ2lzdGVyZWQoY29ubmVjdG9yKSkgewo+ID4gKwkvKiBPbmx5IGNoYW5nZSBWQ1BJ IGFsbG9jYXRpb24gb24gYWN0dWFsIG1vZGUgY2hhbmdlcywgdG8gcHJldmVudCB1cwo+ID4gKwkg KiBmcm9tIHRyeWluZyB0byBhbGxvY2F0ZSBWQ1BJIHRvIHBvcnRzIHRoYXQgbm8gbG9uZ2VyIGV4 aXN0IHdoZW4gd2UKPiA+ICsJICogbWF5IGp1c3QgYmUgdHJ5aW5nIHRvIGRpc2FibGUgRFBNUyBv biB0aGVtCj4gPiArCSAqLwo+ID4gKwlpZiAobmV3X2NydGNfc3RhdGUtPm1vZGVfY2hhbmdlZCB8 fAo+ID4gKwkgICAgbmV3X2NydGNfc3RhdGUtPmNvbm5lY3RvcnNfY2hhbmdlZCkgewo+IAo+IFdo eSBleGFjdGx5IGlzIHRoaXMgbmVlZGVkPyBXZSBvbmx5IGNhbGwgY29tcHV0ZV9jb25maWcgb24g dGhlIGVub2NvZGVyCj4gd2hlbiBlbmFibGluZyBhbiBvdXRwdXQuIE5vdCB3aGVuIGRpc2FibGlu ZyBvbmUuIFNpbWlsYXIgZm9yIHRoZSBhdG9taWMKPiBoZWxwZXJzIGFuZCB0aGUgdmFyaW91cyBl bmNvZGVyIGNhbGxiYWNrcyAoeW91IGhhdmUgdGhlIHNhbWUgY2hhbmdlIGluIHRoZQo+IG5vdXZl YXUgY29kZSkuIERpZCB0aGlzIGFjdHVhbGx5IGJsb3cgdXAgd2hpbGUgdGVzdGluZz8KPiAKPiA+ ICAJCXNsb3RzID0gZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RhdGUsCj4gPiAgCQkJ CQkJICAgICAgJmludGVsX2RwLT5tc3RfbWdyLAo+ID4gIAkJCQkJCSAgICAgIHBvcnQsCj4gPiBA QCAtMTA3LDM2ICsxMTYsMzkgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBfbXN0X2NvbXB1dGVfY29u ZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gIAlyZXR1cm4gdHJ1ZTsKPiA+ ICB9Cj4gPiAgCj4gPiAtc3RhdGljIGludCBpbnRlbF9kcF9tc3RfYXRvbWljX2NoZWNrKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiAtCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqbmV3X2Nvbm5fc3RhdGUpCj4gPiArc3RhdGljIGludAo+ID4gK2ludGVsX2RwX21zdF9h dG9taWNfY2hlY2soc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ICsJCQkgIHN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpuZXdfY29ubl9zdGF0ZSkKPiA+ICB7Cj4gPiArCXN0 cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciA9Cj4gPiArCQl0b19pbnRlbF9j b25uZWN0b3IoY29ubmVjdG9yKTsKPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy ICptZ3IgPQo+ID4gKwkJJmludGVsX2Nvbm5lY3Rvci0+bXN0X3BvcnQtPm1zdF9tZ3I7Cj4gPiAr CXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQgPSBpbnRlbF9jb25uZWN0b3ItPnBvcnQ7Cj4g PiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IG5ld19jb25uX3N0YXRlLT5zdGF0 ZTsKPiA+IC0Jc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlOwo+ID4g LQlzdHJ1Y3QgZHJtX2NydGMgKm9sZF9jcnRjOwo+ID4gLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KmNydGNfc3RhdGU7Cj4gPiAtCWludCBzbG90cywgcmV0ID0gMDsKPiA+ICsJc3RydWN0IGRybV9j b25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlID0KPiA+ICsJCWRybV9hdG9taWNfZ2V0X29s ZF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gPiArCXN0cnVjdCBkcm1fY3J0 YyAqb2xkX2NydGMgPSBvbGRfY29ubl9zdGF0ZS0+Y3J0YywKPiA+ICsJCQkqbmV3X2NydGMgPSBu ZXdfY29ubl9zdGF0ZS0+Y3J0YzsKPiA+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0 Y19zdGF0ZSwgKm5ld19jcnRjX3N0YXRlOwo+ID4gIAo+ID4gLQlvbGRfY29ubl9zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X29sZF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gPiAt CW9sZF9jcnRjID0gb2xkX2Nvbm5fc3RhdGUtPmNydGM7Cj4gCj4gQmlrZXNoZWQ6IFJld29ya2lu ZyBhbGwgdGhlIGFib3ZlIGhpZGVzIHRoZSByZWFsIGNoYW5nZXMgcXVpdGUgYSBiaXQuCj4gCj4g PiAgCWlmICghb2xkX2NydGMpCj4gPiAtCQlyZXR1cm4gcmV0Owo+ID4gKwkJcmV0dXJuIDA7Cj4g PiAgCj4gPiAtCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0 ZSwgb2xkX2NydGMpOwo+ID4gLQlzbG90cyA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0 ZSktPmRwX21fbi50dTsKPiA+IC0JaWYgKGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KGNy dGNfc3RhdGUpICYmIHNsb3RzID4gMCkgewo+ID4gLQkJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyICptZ3I7Cj4gPiAtCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKm9sZF9lbmNvZGVyOwo+ID4g KwlvbGRfY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X29sZF9jcnRjX3N0YXRlKHN0YXRlLCBv bGRfY3J0Yyk7Cj4gPiArCWlmICghb2xkX2NydGNfc3RhdGUgfHwKPiAKPiAhb2xkX2NydGNfc3Rh dGUgd291bGQgYmUgYSBmcmFtZXdvcmsgYnVnLiBKdXN0IHJlbW92ZSB0aGF0IGNoZWNrLgo+IAo+ ID4gKwkgICAgIXRvX2ludGVsX2NydGNfc3RhdGUob2xkX2NydGNfc3RhdGUpLT5kcF9tX24udHUp Cj4gPiArCQlyZXR1cm4gMDsKPiAKPiBIbSwgd2h5IGRvIHdlIG5lZWQgdGhpcz8gSGF2aW5nIGEg RFAgcG9ydCBwcmV2aW91c2x5IGVuYWJsZWQgd2l0aCBhIDAgdHUKPiBzb3VuZHMgbGlrZSBhIHBy ZXR0eSBiaWcgZHJpdmVyIGJ1Zy4KPiA+ICAKPiA+IC0JCW9sZF9lbmNvZGVyID0gb2xkX2Nvbm5f c3RhdGUtPmJlc3RfZW5jb2RlcjsKPiA+IC0JCW1nciA9ICZlbmNfdG9fbXN0KG9sZF9lbmNvZGVy KS0+cHJpbWFyeS0+ZHAubXN0X21ncjsKPiA+ICsJLyogSWYgd2Ugc3dpdGNoZWQgQ1JUQ3MsIGNs ZWFyIHRoZSBwcmV2aW91cyBvbmUncyBhbGxvY2F0aW9uICovCj4gPiArCW5ld19jcnRjX3N0YXRl ID0gZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsIG9sZF9jcnRjKTsKPiA+ICsJ aWYgKG5ld19jcnRjX3N0YXRlLT5jb25uZWN0b3JzX2NoYW5nZWQgJiYgIW5ld19jcnRjX3N0YXRl LT5lbmFibGUpCj4gPiArCQl0b19pbnRlbF9jcnRjX3N0YXRlKG5ld19jcnRjX3N0YXRlKS0+ZHBf bV9uLnR1ID0gMDsKPiAKPiBObyBpZGVhIHdoeSB3ZSBuZWVkIHRvIGNsZWFyIHRoaXMgaGVyZT8g U2hvdWxkbid0IHdlIGp1c3QgY2xlYXIgdGhpcwo+IHVuY29uZGl0aW9uYWxseSBpZiB3ZSByZWxl YXNlIHRoZSBhbGxvY2F0aW9uLgo+IAo+IEFsc28gbmFtaW5nIGNvbnZlbnRpb24sIEknZCBjYWxs IHRoaXMgb2xkX2NydGNfbmV3X3N0YXRlLCBhbmQgbWF5YmUKPiBvbGRfY3J0Y19vbGRfc3RhdGUu IFRvIG1ha2UgaXQgY2xlYXIgdGhlc2UgYXJlIHRoZSBvbGQvbmV3IHN0YXRlcyBmb3IKPiBvbGRf Y3J0Yy4gSW5zdGVhZCBvZiBvbGQvbmV3IHN0YXRlIGZvciB0aGUgbmV3IGNydGMuCj4gCj4gPiAg Cj4gPiAtCQlyZXQgPSBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdGF0ZSwgbWdy LCBzbG90cyk7Cj4gPiAtCQlpZiAocmV0KQo+ID4gLQkJCURSTV9ERUJVR19LTVMoImZhaWxlZCBy ZWxlYXNpbmcgJWQgdmNwaSBzbG90czolZFxuIiwgc2xvdHMsIHJldCk7Cj4gPiAtCQllbHNlCj4g PiAtCQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKS0+ZHBfbV9uLnR1ID0gMDsKPiA+ IC0JfQo+ID4gLQlyZXR1cm4gcmV0Owo+ID4gKwlpZiAobmV3X2NydGMpCj4gPiArCQlyZXR1cm4g MDsKPiAKPiBOb3Qgc3VyZSB3aHkgd2Ugc2hvdWxkbid0IHJlbGVhc2UgdGhpcz8gSWYgd2UgaGFu ZGxlIHRoaXMgaW4gaGVscGVycywgaXQKPiB3b3VsZCByZW1vdmUgcGlsZXMgb2Ygc3BlY2lhbCBj YXNpbmcgY29kZSBoZXJlIEkgdGhpbmsuIFBsdXMgcmVtb3ZlCj4gc3BlY2lhbCBjb2RlIGluIHRo ZSBobHBlcnMuCj4gCj4gCj4gPiArCj4gPiArCXJldHVybiBkcm1fZHBfYXRvbWljX3JlbGVhc2Vf dmNwaV9zbG90cyhzdGF0ZSwgbWdyLCBwb3J0KTsKPiA+ICB9Cj4gPiAgCj4gPiAgc3RhdGljIHZv aWQgaW50ZWxfbXN0X2Rpc2FibGVfZHAoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4g PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaCBiL2luY2x1ZGUv ZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiA+IGluZGV4IDNmYWNlYjY2ZjVjYi4uMjM5MmUxMmI2 YmNlIDEwMDY0NAo+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4g KysrIGIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4gQEAgLTQwNiw5ICs0MDYs MTYgQEAgc3RydWN0IGRybV9kcF9wYXlsb2FkIHsKPiA+ICAKPiA+ICAjZGVmaW5lIHRvX2RwX21z dF90b3BvbG9neV9zdGF0ZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUsIGJhc2UpCj4gPiAgCj4gPiArc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRp b24gewo+IAo+IEkgdGhpbmsgYSBjb21tZW50IGhlcmUgdGhhdCB0aGlzIHBvaW50ZXIgaG9sZHMg YSBmdWxsIHJlZmVyZW5jZSAoZXZlbiBwYXN0Cj4gd2hlbiB0aGUgY29ubmVjdG9yIGlzIHVucGx1 Z2dlZCkgd291bGQgYmUgZ29vZC4gT3RoZXJ3aXNlIHRoZSBsb29wIGluCj4gcmVsZWFzZV92Y3Bp IHdvdWxkIGJlIGJ1Z2d5Lgo+IAo+ID4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Owo+ ID4gKwlpbnQgdmNwaTsKPiA+ICsJc3RydWN0IGxpc3RfaGVhZCBuZXh0Owo+ID4gK307Cj4gPiAr Cj4gPiAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgewo+ID4gIAlzdHJ1Y3QgZHJt X3ByaXZhdGVfc3RhdGUgYmFzZTsKPiA+IC0JaW50IGF2YWlsX3Nsb3RzOwo+ID4gKwlzdHJ1Y3Qg bGlzdF9oZWFkIHZjcGlzOwo+ID4gKwl1OCB2Y3BpX2FsbG9jYXRlZDsKPiA+ICAJc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiAgfTsKPiA+ICAKPiA+IEBAIC02MTksMTQg KzYyNiwxNyBAQCB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3N1c3BlbmQoc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOwo+ID4gIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21ncl9yZXN1bWUoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOwo+ID4gIHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xv Z3lfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gIAkJCQkJCQkJICAg IHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsKPiA+IC1pbnQgZHJtX2RwX2F0 b21pY19maW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4g LQkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gLQkJCQkgIHN0 cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGludCBwYm4pOwo+ID4gLWludCBkcm1fZHBfYXRv bWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4g PiAtCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiAtCQkJ CSAgICAgaW50IHNsb3RzKTsKPiA+ICtpbnQgX19tdXN0X2NoZWNrCj4gPiArZHJtX2RwX2F0b21p Y19maW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gKwkJ CSAgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gKwkJCSAgICAg IHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGludCBwYm4pOwo+ID4gK2ludCBfX211c3Rf Y2hlY2sKPiA+ICtkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUsCj4gPiArCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3IgKm1nciwKPiA+ICsJCQkJIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOwo+ID4gIGlu dCBkcm1fZHBfc2VuZF9wb3dlcl91cGRvd25fcGh5KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyLAo+ID4gIAkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgYm9vbCBw b3dlcl91cCk7Cj4gPiAraW50IF9fbXVzdF9jaGVjayBkcm1fZHBfbXN0X2F0b21pY19jaGVjayhz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ID4gIAo+ID4gIGV4dGVybiBjb25zdCBz dHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGVfZnVuY3MgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9m dW5jczsKPiA+ICAKPiA+IC0tIAo+ID4gMi4xOS4xCj4gPiAKPiAKPiAtLSAKPiBEYW5pZWwgVmV0 dGVyCj4gU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCj4gaHR0cDovL2Jsb2cu ZmZ3bGwuY2gKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jw b3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK