From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC v3 09/12] drm: Add API for in-kernel clients Date: Mon, 12 Mar 2018 17:51:49 +0100 Message-ID: <20180312165148.GI8589@phenom.ffwll.local> References: <20180222200653.19453-1-noralf@tronnes.org> <20180222200653.19453-10-noralf@tronnes.org> <20180306085604.GH22212@phenom.ffwll.local> <4dd894ad-c62a-418f-353b-2c04cb9325ec@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <4dd894ad-c62a-418f-353b-2c04cb9325ec@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Noralf Tr??nnes Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, laurent.pinchart@ideasonboard.com, dh.herrmann@gmail.com List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBNYXIgMDgsIDIwMTggYXQgMDY6MTI6MTFQTSArMDEwMCwgTm9yYWxmIFRyPz9ubmVz IHdyb3RlOgo+IAo+IERlbiAwNi4wMy4yMDE4IDA5LjU2LCBza3JldiBEYW5pZWwgVmV0dGVyOgo+ ID4gT24gVGh1LCBGZWIgMjIsIDIwMTggYXQgMDk6MDY6NTBQTSArMDEwMCwgTm9yYWxmIFRyPz9u bmVzIHdyb3RlOgo+ID4gPiBUaGlzIGFkZHMgYW4gQVBJIGZvciB3cml0aW5nIGluLWtlcm5lbCBj bGllbnRzLgo+ID4gPiAKPiA+ID4gVE9ETzoKPiA+ID4gLSBGbGVzaCBvdXQgYW5kIGNvbXBsZXRl IGRvY3VtZW50YXRpb24uCj4gPiA+IC0gQ2xvbmVkIGRpc3BsYXlzIGlzIG5vdCB0ZXN0ZWQuCj4g PiA+IC0gQ29tcGxldGUgdGlsZWQgZGlzcGxheSBzdXBwb3J0IGFuZCB0ZXN0IGl0Lgo+ID4gPiAt IFRlc3QgcGx1Zy91bnBsdWcgZGlmZmVyZW50IG1vbml0b3JzLgo+ID4gPiAtIEEgcnVudGltZSBr bm9iIHRvIHByZXZlbnQgY2xpZW50cyBmcm9tIGF0dGFjaGluZyBmb3IgZGVidWdnaW5nIHB1cnBv c2VzLgo+ID4gPiAtIE1heWJlIGEgd2F5IHRvIHVuYmluZCBpbmRpdmlkdWFsIGNsaWVudCBpbnN0 YW5jZXMuCj4gPiA+IC0gTWF5YmUgdGFrZSB0aGUgc3lzcnEgc3VwcG9ydCBpbiBkcm1fZmJfaGVs cGVyIGFuZCBtb3ZlIGl0IGhlcmUgc29tZWhvdy4KPiA+ID4gLSBBZGQgc3VzcGVuZC9yZXN1bWUg Y2FsbGJhY2tzLgo+ID4gPiAgICBEb2VzIGFueW9uZSBrbm93IHdoeSBmYmRldiByZXF1aXJlcyBz dXNwZW5kL3Jlc3VtZT8KPiA+ID4gCj4gPiA+IFNpZ25lZC1vZmYtYnk6IE5vcmFsZiBUcj8/bm5l cyA8bm9yYWxmQHRyb25uZXMub3JnPgo+ID4gVGhlIGNvcmUgY2xpZW50IGFwaSBJIGxpa2UuIFNv bWUgb2YgdGhlIG9wZW5zIEknbSBzZWVpbmc6Cj4gPiAKPiA+IC0gSWYgd2UgZ28gd2l0aCB1c2lu ZyB0aGUgaW50ZXJuYWwga21zIGFwaSBkaXJlY3RseSBpbnN0ZWFkIG9mIElPQ1RMCj4gPiAgICB3 cmFwcGVycyB0aGVuIGEgaHVnZSBwaWxlIG9mIHRoZSBmdW5jdGlvbnMgeW91IGhhdmUgaGVyZSBh cmVuJ3QgbmVlZGVkCj4gPiAgICAoZS5nLiBhbGwgdGhlIGV2ZW50IHN0dWZmIHdlIGNhbiBqdXN0 IGRpcmVjdGx5IHVzZSB2YmxhbmsgZXZlbnRzIGluc3RlYWQKPiA+ICAgIG9mIGFsbCB0aGUgd3Jh cHBpbmcpLiBJJ20gbGVhbmluZyBldmVyIG1vcmUgaW50byB0aGF0IGRpcmVjdGlvbiwgc2luY2UK PiA+ICAgIG11Y2ggbGVzcyBjb2RlIHRvIGFkZC4KPiAKPiBMb29raW5nIGF0IGRybV9mYl9oZWxw ZXIgb25jZSBhZ2FpbiBJIG5vdyBzZWUgYW4gb3Bwb3J0dW5pdHkgdG8gc2ltcGxpZnkKPiB0aGUg bW9kZXNldHRpbmcgY29kZSBieSBudWtpbmcgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgYW5kIHN0 b3AKPiBtYWludGFpbmluZyBhbiBhcnJheSBvZiBjb25uZWN0b3JzLiBJdCBsb29rcyB0byBiZSBw b3NzaWJsZSB0byBqdXN0Cj4gY3JlYXRlIGFuIGFycmF5IHRlbXBvcmFyaWx5IGluIGRybV9zZXR1 cF9jcnRjcygpIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlCj4gZnVuY3Rpb24uIFRoZSBjb25uZWN0 b3JzIHdlIGNhcmUgYWJvdXQgYXJlIHJlZiBjb3VudGVkIGFuZCBhdHRhY2hlZCB0bwo+IG1vZGVz ZXRzLiBUaGlzIHdvdWxkIHJlbW92ZSB0aGUgbmVlZCBmb3IgZHJtX2ZiX2hlbHBlcl9hZGRfb25l X2Nvbm5lY3RvcigpLgo+IAo+IFNvIEkgbWlnaHQgYmUgYWJsZSB0byBkbyBzdHJ1Y3QgZHJtX2Zi X2hlbHBlcl9jcnRjIC0+IGRybV9jbGllbnRfY3J0Ywo+IGFuZCBsZXQgdGhlIGNsaWVudCBBUEkg dGFrZSBvdmVyIGRybV9zZXR1cF9jcnRjcygpLiBJJ2xsIGdpdmUgaXQgYSB0cnkuCgpJJ20gbW9y ZSB3b25kZXJpbmcgd2h5IHdlIG5lZWQgZHJtX2NsaWVudF9jcnRjIGF0IGFsbCwgd2h5IGlzIGRy bV9jcnRjIG5vdApnb29kIGVub3VnaC4gT3IgbWF5YmUgSSdtIG1pc3Npbmcgc29tZXRoaW5nLiBJ bW8gaW9jdGwgd3JhcHBlcnMgc2hvdWxkIGJlCnRoZSBleGNlcHRpb24gd2hlcmUgd2UgcmVhbGx5 LCByZWFsbHkgbmVlZCB0aGVtIChiZWNhdXNlIHRoZSBiYWNrZW5kIG9mCnRoZSBpb2N0bCBpc24n dCBpbXBsZW1lbnRlZCBpbiBhIGdlbmVyaWMgd2F5LCBlLmcuIGR1bWIgYnVmZmVycyksIG5vdCBm b3IKc3R1ZmYgd2hlcmUgd2UgYWxyZWFkeSBoYXZlIGEgcGVyZmVjdGx5IHVzZWFibGUgaW4ta2Vy bmVsIGFiaSAoYW55dGhpbmcKcmVsYXRlZCB0byBtb2Rlc2V0dGluZykuCgpBbmQgaW4gYSB3YXkg dGhlIGlvY3RsIHdyYXBwZXJzIHdvdWxkbid0IHJlYWxseSBiZSBpb2N0bCB3cmFwcGVycwpjb25j ZXB0dWFsbHksIGJ1dCBzaW1wbGUgc2hhcmUgc29tZSBvZiB0aGUgc2FtZSBjb2RlIHdpdGggdGhl IGlvY3RsIGNhbGwKY2hhaW4uIFRoZSBpZGVhIGlzIHRvIHByb3ZpZGUgc29tZSBtaW5pbWFsIHdy YXBwYXIgYXJvdW5kIHRoZSAtPmR1bWIqCmNhbGxiYWNrcy4KCkFueXRoaW5nIGVsc2UgaXMgbm90 IG5lZWRlZCwgSSB0aGluay4KCj4gVGhlcmUgaXMgb25lIGNoYWxsZW5nZSBJIHNlZSB1cGZyb250 IGFuZCB0aGF0J3MgdGhlIGk5MTUgZmJfaGVscGVyCj4gY2FsbGJhY2sgaW4gZHJtX3NldHVwX2Ny dGNzKCkuCj4gCj4gPiAtIFRoZSByZWdpc3Rlci91bnJlZ2lzdGVyIG1vZGVsIG5lZWRzIG1vcmUg dGhvdWdodC4gQWxsb3dpbmcgYm90aCBjbGllbnRzCj4gPiAgICB0byByZWdpc3RlciB3aGVuZXZl ciB0aGV5IHdhbnQgdG8sIGFuZCBkcm1fZGV2aWNlIGluc3RhbmNlcyB0byBjb21lIGFuZAo+ID4g ICAgZ28gaXMgd2hhdCBmYmNvbiBoYXMgZG9uZSwgYW5kIHRoZSByZXN1bHRpbmcgbG9ja2luZyBp cyBhIGhvcnJvciBzaG93Lgo+ID4gCj4gPiAgICBJIHRoaW5rIGlmIHdlIHJlcXVpcmUgdGhhdCBh bGwgaW4ta2VybmVsIGRybV9jbGllbnRzIGFyZSByZWdpc3RlcnMgd2hlbgo+ID4gICAgbG9hZGlu ZyBkcm0ua28gKGFuZCBlbmFibGVkL2Rpc2FibGVkIG9ubHkgcGVyIG1vZHVsZSBvcHRpb25zIGFu ZAo+ID4gICAgS2NvbmZpZyksIHRoZW4gd2UgY2FuIHRocm93IG91dCBhbGwgdGhlIGxvY2tpbmcu IFRoYXQgYXZvaWRzIGEgbG90IG9mCj4gPiAgICB0aGUgaGVhZGFjaGVzLgo+ID4gCj4gPiAgICAy bmQsIGlmIHRoZSBsaXN0IG9mIGNsaWVudHMgaXMgc3RhdGljIG92ZXIgdGhlIGxpZmV0aW1lIG9m IGRybS5rbywgd2UKPiA+ICAgIGFsc28gZG9uJ3QgbmVlZCB0byBpdGVyYXRlIGV4aXN0aW5nIGRy aXZlcnMuIFdoaWNoIGF2b2lkcyBtZSBoYXZpbmcgdG8KPiA+ICAgIHJldmlldyB0aGUgaXRlcmF0 b3IgcGF0Y2ggKHRoYXQncyB0aGUgb3RoZXIgYXNwZWN0IHdoZXJlIGZiY29uIHRvdGFsbHkKPiA+ ICAgIGZhbGxzIG92ZXIgYW5kIGVzc2VudGlhbGx5IGp1c3QgaWdub3JlcyBhIGJ1bmNoIG9mIHJh Y2VzKS4KPiAKPiBBcmUgeW91IHRhbGtpbmcgYWJvdXQgbGlua2luZyB0aGUgY2xpZW50cyBpbnRv IGRybS5rbz8KPiAKPiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6Cj4gCj4gZHJtLSQoQ09ORklH X0RSTV9DTElFTlRfQk9PVFNQTEFTSCkgKz0gY2xpZW50L2RybV9ib290c3BsYXNoLm8KPiAKPiBk cml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jOgo+IAo+ID8/c3RhdGljIGludCBfX2luaXQgZHJtX2Nv cmVfaW5pdCh2b2lkKQo+ID8/ewo+ICs/Pz8/Pz8gZHJtX2Jvb3RzcGxhc2hfcmVnaXN0ZXIoKTsK PiArPz8/Pz8/IGRybV9mYmRldl9yZWdpc3RlcigpOwo+ID8/fQo+IAo+IGRyaXZlcnMvZ3B1L2Ry bS9kcm1faW50ZXJuYWwuaDoKPiAKPiAjaWZkZWYgRFJNX0NMSUVOVF9CT09UU1BMQVNICj4gdm9p ZCBkcm1fYm9vdHNwbGFzaF9yZWdpc3Rlcih2b2lkKTsKPiAjZWxzZQo+IHN0YXRpYyBpbmxpbmUg dm9pZCBkcm1fYm9vdHNwbGFzaF9yZWdpc3Rlcih2b2lkKQo+IHsKPiB9Cj4gI2VuZGlmCj4gCj4g ZHJpdmVycy9ncHUvZHJtL2NsaWVudC9kcm1fYm9vdHNwbGFzaC5jOgo+IAo+IHN0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2NsaWVudF9mdW5jcyBkcm1fYm9vdHNwbGFzaF9mdW5jcyA9IHsKPiA/Pz8/ Pz8gLm5hbWU/Pz8/Pz8gPz8/Pz8/ID0gImRybV9ib290c3BsYXNoIiwKPiA/Pz8/Pz8gLm5ldz8/ Pz8/PyA/Pz8/Pz8gPSBkcm1fYm9vdHNwbGFzaF9uZXcsCj4gPz8/Pz8/IC5yZW1vdmU/Pz8/Pz8g Pz8/Pz8/ID0gZHJtX2Jvb3RzcGxhc2hfcmVtb3ZlLAo+ID8/Pz8/PyAuaG90cGx1Zz8/Pz8/PyA9 IGRybV9ib290c3BsYXNoX2hvdHBsdWcsCj4gfTsKPiAKPiB2b2lkIGRybV9ib290c3BsYXNoX3Jl Z2lzdGVyKHZvaWQpCj4gewo+ID8/Pz8/PyBkcm1fY2xpZW50X3JlZ2lzdGVyKCZkcm1fYm9vdHNw bGFzaF9mdW5jcyk7Cj4gfQo+IAo+IGRyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmM6Cj4gCj4g c3RhdGljIExJU1RfSEVBRChkcm1fY2xpZW50X2Z1bmNzX2xpc3QpOwo+IAo+IHZvaWQgZHJtX2Ns aWVudF9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZHJtX2NsaWVudF9mdW5jcyAqZnVuY3MpCj4gewo+ ID8/Pz8/PyBzdHJ1Y3QgZHJtX2NsaWVudF9mdW5jc19lbnRyeSAqZnVuY3NfZW50cnk7Cj4gCj4g Pz8/Pz8/IGZ1bmNzX2VudHJ5ID0ga3phbGxvYyhzaXplb2YoKmZ1bmNzX2VudHJ5KSwgR0ZQX0tF Uk5FTCk7Cj4gPz8/Pz8/IGlmICghZnVuY3NfZW50cnkpIHsKPiA/Pz8/Pz8gPz8/Pz8/IERSTV9F UlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIiwgZnVuY3MtPm5hbWUpOwo+ID8/Pz8/PyA/ Pz8/Pz8gcmV0dXJuOwo+ID8/Pz8/PyB9Cj4gCj4gPz8/Pz8/IGZ1bmNzX2VudHJ5LT5mdW5jcyA9 IGZ1bmNzOwo+IAo+ID8/Pz8/PyBsaXN0X2FkZCgmZnVuY3NfZW50cnktPmxpc3QsICZkcm1fY2xp ZW50X2Z1bmNzX2xpc3QpOwo+IAo+ID8/Pz8/PyBEUk1fREVCVUdfS01TKCIlc1xuIiwgZnVuY3Mt Pm5hbWUpOwo+IH0KPiAKPiAKPiBBbmQgZWFjaCBjbGllbnQgaGF2aW5nIGEgcnVudGltZSBlbmFi bGUvZGlzYWJsZSBrbm9iOgo+IAo+IGRyaXZlcnMvZ3B1L2RybS9jbGllbnQvZHJtX2Jvb3RzcGxh c2guYzoKPiAKPiBzdGF0aWMgYm9vbCBkcm1fYm9vdHNwbGFzaF9lbmFibGVkID0gdHJ1ZTsKPiBt b2R1bGVfcGFyYW1fbmFtZWQoYm9vdHNwbGFzaF9lbmFibGVkLCBkcm1fYm9vdHNwbGFzaF9lbmFi bGVkLCBib29sLCAwNjAwKTsKPiBNT0RVTEVfUEFSTV9ERVNDKGJvb3RzcGxhc2hfZW5hYmxlZCwg IkVuYWJsZSBib290c3BsYXNoIGNsaWVudAo+IFtkZWZhdWx0PXRydWVdIik7CgoKWXVwLCBwcmV0 dHkgbXVjaC4KCj4gU2ltcGxlIFVTQiBEaXNwbGF5Cj4gQSBmZXcgbW9udGhzIGJhY2sgd2hpbGUg bG9va2luZyBhdCB0aGUgdWRsIHNobWVtIGNvZGUsIEkgZ290IHRoZSBpZGVhCj4gdGhhdCBJIGNv dWxkIHR1cm4gYSBSYXNwYmVycnkgUGkgWmVybyBpbnRvIGEgJDUgVVNCIHRvIEhETUkvRFNJL0RQ SS9EQkkvVFYKPiBhZGFwdGVyLiBUaGUgaG9zdCBzaWRlIHdvdWxkIGJlIGEgc2ltcGxlIHRpbnlk cm0gZHJpdmVyIHVzaW5nIHRoZSBrZXJuZWwKPiBjb21wcmVzc2lvbiBsaWIgdG8gc3BlZWQgdXAg dHJhbnNmZXJzLiBUaGUgZ2FkZ2V0L2RldmljZSBzaWRlIHdvdWxkIGJlIGEKPiB1c2Vyc3BhY2Ug YXBwIGRlY29tcHJlc3NpbmcgdGhlIGJ1ZmZlciBpbnRvIGFuIGV4cG9ydGVkIGR1bWIgYnVmZmVy Lgo+IAo+IFdoaWxlIHdvcmtpbmcgd2l0aCB0aGlzIGNsaWVudCBBUEkgSSByZWFsaXplZCB0aGF0 IEkgY291bGQgdXNlIGl0IGFuZAo+IHdyaXRlIGEga2VybmVsIGdhZGdldCBkcml2ZXIgaW5zdGVh ZCBhdm9pZGluZyB0aGUgY2hhbGxlbmdlIG9mIGdvaW5nCj4gYmFjayBhbmQgZm9ydGggdG8gdXNl cnNwYWNlIHdpdGggdGhlIGZyYW1lYnVmZmVyLiBGb3Igc3VjaCBhIGNsaWVudCBJCj4gd291bGQg aGF2ZSBwcmVmZXJyZWQgaXQgdG8gYmUgYSBsb2FkYWJsZSBtb2R1bGUgbm90IGxpbmtlZCBpbnRv IGRybS5rbwo+IHRvIGluY3JlYXNlIHRoZSBjaGFuY2UgdGhhdCBkaXN0cmlidXRpb25zIHdvdWxk IGVuYWJsZSBpdC4KCkkgdGhpbmsgdGhhdCB3ZSBjYW4gZG8gYXMgYSBsb2FkYWJsZSBjbGllbnQs IHNpbmNlIHlvdSBwcm9iYWJseSB3YW50IHNvbWUKY29uZmlnZnMgaW50ZXJmYWNlIHRvIGRlZmlu ZSB3aGljaCBkcm0gZHJpdmVyIGl0IHNob3VsZCBjb250cm9sLiBUaGUKcmVhc29uIGJlaGluZCB0 aGUgc3RhdGljIGxpc3Qgb2YgYnVpbHQtaW4gY2xpZW50cyBpcyBwdXJlbHkgZm9yIHRoZQphdXRv LXJlZ2lzdGVyIHN0dWZmIHRoYXQgd2Ugd2FudCBmb3IgZmJkZXYgZW11bGF0aW9uIGFuZCBvdGhl ciB0aGluZ3MuCkF1dG8tcmVnaXN0cmF0aW9uIHdoZXJlIGJvdGggc2lkZXMgY2FuIGJlIGxvYWRl ZCBpbiBhbnkgb3JkZXIgaXMgcmVhbCBwYWluCndydCBsb2NraW5nLiBFeHBsaWNpdCByZWdpc3Ry YXRpb24gd2hlcmUgeW91IGNhbiBsb2FkIGJvdGggc2lkZXMgaXMKdG90YWxseSBmaW5lIGFuZCBJ IHRoaW5rIHdvdWxkIGNvdmVyIHlvdXIgdXNiIGdhZGdldCBkaXNwbGF5IGRyaXZlcgp1c2UtY2Fz ZS4KCmJ0dyB1c2IgZ2FkZ2V0IGRyaXZlciB0byBkcml2ZSBkcm0ga21zIGRyaXZlcnMgc291bmRz IGxpa2UgYSByZWFsbHkgY29vbAp0aGluZy4KLURhbmllbAoKPiAKPiBOb3JhbGYuCj4gCj4gPiA+ IC0tLQo+ID4gPiAgIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgIHwgICAgMiAr Cj4gPiA+ICAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgfCAgICAzICstCj4g PiA+ICAgZHJpdmVycy9ncHUvZHJtL2NsaWVudC9LY29uZmlnICAgICAgfCAgICA0ICsKPiA+ID4g ICBkcml2ZXJzL2dwdS9kcm0vY2xpZW50L01ha2VmaWxlICAgICB8ICAgIDEgKwo+ID4gPiAgIGRy aXZlcnMvZ3B1L2RybS9jbGllbnQvZHJtX2NsaWVudC5jIHwgMTYxMiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+ID4gSSdkIG1vdmUgdGhpcyBpbnRvIG1haW4gZHJtLyBkaXJl Y3RvcnksIGl0J3MgZmFpcmx5IGNvcmUgc3R1ZmYuCj4gPiAKPiA+ID4gICBkcml2ZXJzL2dwdS9k cm0vZHJtX2Rydi5jICAgICAgICAgICB8ICAgIDYgKwo+ID4gPiAgIGRyaXZlcnMvZ3B1L2RybS9k cm1fZmlsZS5jICAgICAgICAgIHwgICAgMyArCj4gPiA+ICAgZHJpdmVycy9ncHUvZHJtL2RybV9w cm9iZV9oZWxwZXIuYyAgfCAgICAzICsKPiA+ID4gICBpbmNsdWRlL2RybS9kcm1fY2xpZW50Lmgg ICAgICAgICAgICB8ICAxOTIgKysrKysKPiA+ID4gICBpbmNsdWRlL2RybS9kcm1fZGV2aWNlLmgg ICAgICAgICAgICB8ICAgIDEgKwo+ID4gPiAgIGluY2x1ZGUvZHJtL2RybV9maWxlLmggICAgICAg ICAgICAgIHwgICAgNyArCj4gPiA+ICAgMTEgZmlsZXMgY2hhbmdlZCwgMTgzMyBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pCj4gPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9jbGllbnQvS2NvbmZpZwo+ID4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vY2xpZW50L01ha2VmaWxlCj4gPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9jbGllbnQvZHJtX2NsaWVudC5jCj4gPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGlu Y2x1ZGUvZHJtL2RybV9jbGllbnQuaAo+ID4gPiAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiA+ID4gaW5kZXggZGVl ZWZhN2ExNzczLi5kNGFlMTVmOWVlOWYgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gPiA+IEBAIC0x NTQsNiArMTU0LDggQEAgY29uZmlnIERSTV9TQ0hFRAo+ID4gPiAgIAl0cmlzdGF0ZQo+ID4gPiAg IAlkZXBlbmRzIG9uIERSTQo+ID4gPiArc291cmNlICJkcml2ZXJzL2dwdS9kcm0vY2xpZW50L0tj b25maWciCj4gPiA+ICsKPiA+ID4gICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9pMmMvS2NvbmZp ZyIKPiA+ID4gICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZpZyIKPiA+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZQo+ID4gPiBpbmRleCA1MDA5M2ZmNDQ3OWIuLjhlMDZkYzdlZWNhMSAxMDA2NDQKPiA+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZQo+ID4gPiBAQCAtMTgsNyArMTgsNyBAQCBkcm0teSAgICAgICA6PQlkcm1fYXV0 aC5vIGRybV9idWZzLm8gZHJtX2NhY2hlLm8gXAo+ID4gPiAgIAkJZHJtX2VuY29kZXIubyBkcm1f bW9kZV9vYmplY3QubyBkcm1fcHJvcGVydHkubyBcCj4gPiA+ICAgCQlkcm1fcGxhbmUubyBkcm1f Y29sb3JfbWdtdC5vIGRybV9wcmludC5vIFwKPiA+ID4gICAJCWRybV9kdW1iX2J1ZmZlcnMubyBk cm1fbW9kZV9jb25maWcubyBkcm1fdmJsYW5rLm8gXAo+ID4gPiAtCQlkcm1fc3luY29iai5vIGRy bV9sZWFzZS5vCj4gPiA+ICsJCWRybV9zeW5jb2JqLm8gZHJtX2xlYXNlLm8gY2xpZW50L2RybV9j bGllbnQubwo+ID4gPiAgIGRybS0kKENPTkZJR19EUk1fTElCX1JBTkRPTSkgKz0gbGliL2RybV9y YW5kb20ubwo+ID4gPiAgIGRybS0kKENPTkZJR19EUk1fVk0pICs9IGRybV92bS5vCj4gPiA+IEBA IC0xMDMsMyArMTAzLDQgQEAgb2JqLSQoQ09ORklHX0RSTV9NWFNGQikJKz0gbXhzZmIvCj4gPiA+ ICAgb2JqLSQoQ09ORklHX0RSTV9USU5ZRFJNKSArPSB0aW55ZHJtLwo+ID4gPiAgIG9iai0kKENP TkZJR19EUk1fUEwxMTEpICs9IHBsMTExLwo+ID4gPiAgIG9iai0kKENPTkZJR19EUk1fVFZFMjAw KSArPSB0dmUyMDAvCj4gPiA+ICtvYmoteQkJCSs9IGNsaWVudC8KPiA+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9jbGllbnQvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9jbGllbnQv S2NvbmZpZwo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBpbmRleCAwMDAwMDAwMDAw MDAuLjRiYjhlNDY1NWZmNwo+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9jbGllbnQvS2NvbmZpZwo+ID4gPiBAQCAtMCwwICsxLDQgQEAKPiA+ID4gK21lbnUg IkRSTSBDbGllbnRzIgo+ID4gPiArCWRlcGVuZHMgb24gRFJNCj4gPiA+ICsKPiA+ID4gK2VuZG1l bnUKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9jbGllbnQvTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vY2xpZW50L01ha2VmaWxlCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uZjY2NTU0Y2Q1YzQ1Cj4gPiA+IC0tLSAvZGV2L251 bGwKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2NsaWVudC9NYWtlZmlsZQo+ID4gPiBAQCAt MCwwICsxIEBACj4gPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vY2xpZW50L2RybV9jbGllbnQuYyBiL2RyaXZl cnMvZ3B1L2RybS9jbGllbnQvZHJtX2NsaWVudC5jCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYTYzM2JmNzQ3MzE2Cj4gPiA+IC0tLSAvZGV2L251 bGwKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2NsaWVudC9kcm1fY2xpZW50LmMKPiA+ID4g QEAgLTAsMCArMSwxNjEyIEBACj4gPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMAo+ID4gPiArLy8gQ29weXJpZ2h0IDIwMTggTm9yYWxmIFRyPz9ubmVzCj4gPiA+ICsKPiA+ ID4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvbGlz dC5oPgo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ID4gPiArCj4gPiA+ ICsjaW5jbHVkZSA8ZHJtL2RybV9jbGllbnQuaD4KPiA+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2Nv bm5lY3Rvci5oPgo+ID4gPiArI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+Cj4gPiA+ICsjaW5jbHVk ZSA8ZHJtL2RybV9maWxlLmg+Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9pb2N0bC5oPgo+ID4g PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiA+ICsKPiA+ID4gKyNpbmNsdWRlICJkcm1fY3J0 Y19pbnRlcm5hbC5oIgo+ID4gPiArI2luY2x1ZGUgImRybV9pbnRlcm5hbC5oIgo+ID4gPiArCj4g PiA+ICtzdHJ1Y3QgZHJtX2NsaWVudF9mdW5jc19lbnRyeSB7Cj4gPiA+ICsJc3RydWN0IGxpc3Rf aGVhZCBsaXN0Owo+ID4gPiArCWNvbnN0IHN0cnVjdCBkcm1fY2xpZW50X2Z1bmNzICpmdW5jczsK PiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBMSVNUX0hFQUQoZHJtX2NsaWVudF9saXN0 KTsKPiA+IEkgdGhpbmsgdGhlIGNsaWVudCBsaXN0IGl0c2VsZiBzaG91bGQgYmUgb24gdGhlIGRy bV9kZXZpY2UsIG5vdCBpbiBvbmUKPiA+IGdsb2JhbCBsaXN0IHRoYXQgbWl4ZXMgdXAgYWxsIHRo ZSBjbGllbnRzIG9mIGFsbCB0aGUgZHJtX2RldmljZXMuCj4gPiAKPiA+IEknbGwgc2tpcCByZXZp ZXdpbmcgZGV0YWlscyBzaW5jZSB3ZSBoYXZlIGEgYnVuY2ggb2YgaGlnaC1sZXZlbCBxdWVzdGlv bnMKPiA+IHRvIGZpZ3VyZSBvdXQgZmlyc3QuCj4gPiAtRGFuaWVsCj4gPiAKPiA+ID4gK3N0YXRp YyBMSVNUX0hFQUQoZHJtX2NsaWVudF9mdW5jc19saXN0KTsKPiA+ID4gK3N0YXRpYyBERUZJTkVf TVVURVgoZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBk cm1fY2xpZW50X25ldyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gPiArCQkJICAgY29uc3Qg c3RydWN0IGRybV9jbGllbnRfZnVuY3MgKmZ1bmNzKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBk cm1fY2xpZW50X2RldiAqY2xpZW50Owo+ID4gPiArCWludCByZXQ7Cj4gPiA+ICsKPiA+ID4gKwls b2NrZGVwX2Fzc2VydF9oZWxkKCZkcm1fY2xpZW50X2xpc3RfbG9jayk7Cj4gPiA+ICsKPiA+ID4g KwljbGllbnQgPSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJ aWYgKCFjbGllbnQpCj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwo+ID4gPiArCW11dGV4X2luaXQo JmNsaWVudC0+bG9jayk7Cj4gPiA+ICsJY2xpZW50LT5kZXYgPSBkZXY7Cj4gPiA+ICsJY2xpZW50 LT5mdW5jcyA9IGZ1bmNzOwo+ID4gPiArCj4gPiA+ICsJcmV0ID0gZnVuY3MtPm5ldyhjbGllbnQp Owo+ID4gPiArCURSTV9ERVZfREVCVUdfS01TKGRldi0+ZGV2LCAiJXM6IHJldD0lZFxuIiwgZnVu Y3MtPm5hbWUsIHJldCk7Cj4gPiA+ICsJaWYgKHJldCkgewo+ID4gPiArCQlkcm1fY2xpZW50X2Zy ZWUoY2xpZW50KTsKPiA+ID4gKwkJcmV0dXJuOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWxp c3RfYWRkKCZjbGllbnQtPmxpc3QsICZkcm1fY2xpZW50X2xpc3QpOwo+ID4gPiArfQo+ID4gPiAr Cj4gPiA+ICsvKioKPiA+ID4gKyAqIGRybV9jbGllbnRfZnJlZSAtIEZyZWUgRFJNIGNsaWVudCBy ZXNvdXJjZXMKPiA+ID4gKyAqIEBjbGllbnQ6IERSTSBjbGllbnQKPiA+ID4gKyAqCj4gPiA+ICsg KiBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IG9uIGNsaWVudCByZW1vdmFsIHVubGVzcyB0 aGUgY2xpZW50IHJldHVybnMKPiA+ID4gKyAqIG5vbi16ZXJvIGluIHRoZSAmZHJtX2NsaWVudF9m dW5jcy0+cmVtb3ZlIGNhbGxiYWNrLiBUaGUgZmJkZXYgY2xpZW50IGRvZXMKPiA+ID4gKyAqIHRo aXMgd2hlbiBpdCBjYW4ndCBjbG9zZSAmZHJtX2ZpbGUgYmVjYXVzZSB1c2Vyc3BhY2UgaGFzIGFu IG9wZW4gZmQuCj4gPiA+ICsgKi8KPiA+ID4gK3ZvaWQgZHJtX2NsaWVudF9mcmVlKHN0cnVjdCBk cm1fY2xpZW50X2RldiAqY2xpZW50KQo+ID4gPiArewo+ID4gPiArCURSTV9ERVZfREVCVUdfS01T KGNsaWVudC0+ZGV2LT5kZXYsICIlc1xuIiwgY2xpZW50LT5mdW5jcy0+bmFtZSk7Cj4gPiA+ICsJ aWYgKFdBUk5fT04oY2xpZW50LT5maWxlKSkgewo+ID4gPiArCQljbGllbnQtPmZpbGVfcmVmX2Nv dW50ID0gMTsKPiA+ID4gKwkJZHJtX2NsaWVudF9wdXRfZmlsZShjbGllbnQpOwo+ID4gPiArCX0K PiA+ID4gKwltdXRleF9kZXN0cm95KCZjbGllbnQtPmxvY2spOwo+ID4gPiArCWtmcmVlKGNsaWVu dC0+Y3J0Y3MpOwo+ID4gPiArCWtmcmVlKGNsaWVudCk7Cj4gPiA+ICt9Cj4gPiA+ICtFWFBPUlRf U1lNQk9MKGRybV9jbGllbnRfZnJlZSk7Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIGRybV9j bGllbnRfcmVtb3ZlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KQo+ID4gPiArewo+ID4g PiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRybV9jbGllbnRfbGlzdF9sb2NrKTsKPiA+ID4gKwo+ ID4gPiArCWxpc3RfZGVsKCZjbGllbnQtPmxpc3QpOwo+ID4gPiArCj4gPiA+ICsJaWYgKCFjbGll bnQtPmZ1bmNzLT5yZW1vdmUgfHwgIWNsaWVudC0+ZnVuY3MtPnJlbW92ZShjbGllbnQpKQo+ID4g PiArCQlkcm1fY2xpZW50X2ZyZWUoY2xpZW50KTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArLyoq Cj4gPiA+ICsgKiBkcm1fY2xpZW50X3JlZ2lzdGVyIC0gUmVnaXN0ZXIgYSBEUk0gY2xpZW50Cj4g PiA+ICsgKiBAZnVuY3M6IENsaWVudCBjYWxsYmFja3MKPiA+ID4gKyAqCj4gPiA+ICsgKiBSZXR1 cm5zOgo+ID4gPiArICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZh aWx1cmUuCj4gPiA+ICsgKi8KPiA+ID4gK2ludCBkcm1fY2xpZW50X3JlZ2lzdGVyKGNvbnN0IHN0 cnVjdCBkcm1fY2xpZW50X2Z1bmNzICpmdW5jcykKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJt X2NsaWVudF9mdW5jc19lbnRyeSAqZnVuY3NfZW50cnk7Cj4gPiA+ICsJc3RydWN0IGRybV9kZXZp Y2VfbGlzdF9pdGVyIGl0ZXI7Cj4gPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKPiA+ID4g Kwo+ID4gPiArCWZ1bmNzX2VudHJ5ID0ga3phbGxvYyhzaXplb2YoKmZ1bmNzX2VudHJ5KSwgR0ZQ X0tFUk5FTCk7Cj4gPiA+ICsJaWYgKCFmdW5jc19lbnRyeSkKPiA+ID4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gPiA+ICsKPiA+ID4gKwlmdW5jc19lbnRyeS0+ZnVuY3MgPSBmdW5jczsKPiA+ID4gKwo+ ID4gPiArCW11dGV4X2xvY2soJmRybV9nbG9iYWxfbXV0ZXgpOwo+ID4gPiArCW11dGV4X2xvY2so JmRybV9jbGllbnRfbGlzdF9sb2NrKTsKPiA+ID4gKwo+ID4gPiArCWRybV9kZXZpY2VfbGlzdF9p dGVyX2JlZ2luKCZpdGVyKTsKPiA+ID4gKwlkcm1fZm9yX2VhY2hfZGV2aWNlX2l0ZXIoZGV2LCAm aXRlcikKPiA+ID4gKwkJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9E RVNFVCkpCj4gPiA+ICsJCQlkcm1fY2xpZW50X25ldyhkZXYsIGZ1bmNzKTsKPiA+ID4gKwlkcm1f ZGV2aWNlX2xpc3RfaXRlcl9lbmQoJml0ZXIpOwo+ID4gPiArCj4gPiA+ICsJbGlzdF9hZGQoJmZ1 bmNzX2VudHJ5LT5saXN0LCAmZHJtX2NsaWVudF9mdW5jc19saXN0KTsKPiA+ID4gKwo+ID4gPiAr CW11dGV4X3VubG9jaygmZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ID4gPiArCW11dGV4X3VubG9j aygmZHJtX2dsb2JhbF9tdXRleCk7Cj4gPiA+ICsKPiA+ID4gKwlEUk1fREVCVUdfS01TKCIlc1xu IiwgZnVuY3MtPm5hbWUpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ ICtFWFBPUlRfU1lNQk9MKGRybV9jbGllbnRfcmVnaXN0ZXIpOwo+ID4gPiArCj4gPiA+ICsvKioK PiA+ID4gKyAqIGRybV9jbGllbnRfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXIgYSBEUk0gY2xpZW50 Cj4gPiA+ICsgKiBAZnVuY3M6IENsaWVudCBjYWxsYmFja3MKPiA+ID4gKyAqLwo+ID4gPiArdm9p ZCBkcm1fY2xpZW50X3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IGRybV9jbGllbnRfZnVuY3MgKmZ1 bmNzKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2Z1bmNzX2VudHJ5ICpmdW5j c19lbnRyeTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgKnRtcDsKPiA+ ID4gKwo+ID4gPiArCW11dGV4X2xvY2soJmRybV9jbGllbnRfbGlzdF9sb2NrKTsKPiA+ID4gKwo+ ID4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbGllbnQsIHRtcCwgJmRybV9jbGllbnRf bGlzdCwgbGlzdCkgewo+ID4gPiArCQlpZiAoY2xpZW50LT5mdW5jcyA9PSBmdW5jcykKPiA+ID4g KwkJCWRybV9jbGllbnRfcmVtb3ZlKGNsaWVudCk7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJ bGlzdF9mb3JfZWFjaF9lbnRyeShmdW5jc19lbnRyeSwgJmRybV9jbGllbnRfZnVuY3NfbGlzdCwg bGlzdCkgewo+ID4gPiArCQlpZiAoZnVuY3NfZW50cnktPmZ1bmNzID09IGZ1bmNzKSB7Cj4gPiA+ ICsJCQlsaXN0X2RlbCgmZnVuY3NfZW50cnktPmxpc3QpOwo+ID4gPiArCQkJa2ZyZWUoZnVuY3Nf ZW50cnkpOwo+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ICsJCX0KPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ ID4gKwltdXRleF91bmxvY2soJmRybV9jbGllbnRfbGlzdF9sb2NrKTsKPiA+ID4gKwo+ID4gPiAr CURSTV9ERUJVR19LTVMoIiVzXG4iLCBmdW5jcy0+bmFtZSk7Cj4gPiA+ICt9Cj4gPiA+ICtFWFBP UlRfU1lNQk9MKGRybV9jbGllbnRfdW5yZWdpc3Rlcik7Cj4gPiA+ICsKPiA+ID4gK3ZvaWQgZHJt X2NsaWVudF9kZXZfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ID4gK3sKPiA+ ID4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9mdW5jc19lbnRyeSAqZnVuY3NfZW50cnk7Cj4gPiA+ICsK PiA+ID4gKwkvKgo+ID4gPiArCSAqIE1pbm9ycyBhcmUgY3JlYXRlZCBhdCB0aGUgYmVnaW5uaW5n IG9mIGRybV9kZXZfcmVnaXN0ZXIoKSwgYnV0IGNhbgo+ID4gPiArCSAqIGJlIHJlbW92ZWQgYWdh aW4gaWYgdGhlIGZ1bmN0aW9uIGZhaWxzLiBTaW5jZSB3ZSBpdGVyYXRlIERSTSBkZXZpY2VzCj4g PiA+ICsJICogYnkgd2Fsa2luZyBEUk0gbWlub3JzLCB3ZSBuZWVkIHRvIHN0YXkgdW5kZXIgdGhp cyBsb2NrLgo+ID4gPiArCSAqLwo+ID4gPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRybV9nbG9i YWxfbXV0ZXgpOwo+ID4gPiArCj4gPiA+ICsJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRl diwgRFJJVkVSX01PREVTRVQpKQo+ID4gPiArCQlyZXR1cm47Cj4gPiA+ICsKPiA+ID4gKwltdXRl eF9sb2NrKCZkcm1fY2xpZW50X2xpc3RfbG9jayk7Cj4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRy eShmdW5jc19lbnRyeSwgJmRybV9jbGllbnRfZnVuY3NfbGlzdCwgbGlzdCkKPiA+ID4gKwkJZHJt X2NsaWVudF9uZXcoZGV2LCBmdW5jc19lbnRyeS0+ZnVuY3MpOwo+ID4gPiArCW11dGV4X3VubG9j aygmZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICt2b2lkIGRy bV9jbGllbnRfZGV2X3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ID4gK3sK PiA+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgKnRtcDsKPiA+ID4gKwo+ID4g PiArCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKPiA+ ID4gKwkJcmV0dXJuOwo+ID4gPiArCj4gPiA+ICsJbXV0ZXhfbG9jaygmZHJtX2NsaWVudF9saXN0 X2xvY2spOwo+ID4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbGllbnQsIHRtcCwgJmRy bV9jbGllbnRfbGlzdCwgbGlzdCkKPiA+ID4gKwkJaWYgKGNsaWVudC0+ZGV2ID09IGRldikKPiA+ ID4gKwkJCWRybV9jbGllbnRfcmVtb3ZlKGNsaWVudCk7Cj4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZk cm1fY2xpZW50X2xpc3RfbG9jayk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3ZvaWQgZHJtX2Ns aWVudF9kZXZfaG90cGx1ZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gPiArewo+ID4gPiAr CXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50Owo+ID4gPiArCWludCByZXQ7Cj4gPiA+ICsK PiA+ID4gKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkp Cj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwo+ID4gPiArCW11dGV4X2xvY2soJmRybV9jbGllbnRf bGlzdF9sb2NrKTsKPiA+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJmRybV9jbGll bnRfbGlzdCwgbGlzdCkKPiA+ID4gKwkJaWYgKGNsaWVudC0+ZGV2ID09IGRldiAmJiBjbGllbnQt PmZ1bmNzLT5ob3RwbHVnKSB7Cj4gPiA+ICsJCQlyZXQgPSBjbGllbnQtPmZ1bmNzLT5ob3RwbHVn KGNsaWVudCk7Cj4gPiA+ICsJCQlEUk1fREVWX0RFQlVHX0tNUyhkZXYtPmRldiwgIiVzOiByZXQ9 JWRcbiIsCj4gPiA+ICsJCQkJCSAgY2xpZW50LT5mdW5jcy0+bmFtZSwgcmV0KTsKPiA+ID4gKwkJ fQo+ID4gPiArCW11dGV4X3VubG9jaygmZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ID4gPiArfQo+ ID4gPiArCj4gPiA+ICt2b2lkIGRybV9jbGllbnRfZGV2X2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50 Owo+ID4gPiArCWludCByZXQ7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoIWRybV9jb3JlX2NoZWNrX2Zl YXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwo+ID4g PiArCW11dGV4X2xvY2soJmRybV9jbGllbnRfbGlzdF9sb2NrKTsKPiA+ID4gKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KGNsaWVudCwgJmRybV9jbGllbnRfbGlzdCwgbGlzdCkKPiA+ID4gKwkJaWYgKGNs aWVudC0+ZGV2ID09IGRldiAmJiBjbGllbnQtPmZ1bmNzLT5sYXN0Y2xvc2UpIHsKPiA+ID4gKwkJ CXJldCA9IGNsaWVudC0+ZnVuY3MtPmxhc3RjbG9zZShjbGllbnQpOwo+ID4gPiArCQkJRFJNX0RF Vl9ERUJVR19LTVMoZGV2LT5kZXYsICIlczogcmV0PSVkXG4iLAo+ID4gPiArCQkJCQkgIGNsaWVu dC0+ZnVuY3MtPm5hbWUsIHJldCk7Cj4gPiA+ICsJCX0KPiA+ID4gKwltdXRleF91bmxvY2soJmRy bV9jbGllbnRfbGlzdF9sb2NrKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArLyogR2V0IHN0YXRp YyBpbmZvICovCj4gPiA+ICtzdGF0aWMgaW50IGRybV9jbGllbnRfaW5pdChzdHJ1Y3QgZHJtX2Ns aWVudF9kZXYgKmNsaWVudCwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ID4gPiArewo+ID4gPiAr CXN0cnVjdCBkcm1fbW9kZV9jYXJkX3JlcyBjYXJkX3JlcyA9IHt9Owo+ID4gPiArCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjbGllbnQtPmRldjsKPiA+ID4gKwl1MzIgKmNydGNzOwo+ID4gPiAr CWludCByZXQ7Cj4gPiA+ICsKPiA+ID4gKwlyZXQgPSBkcm1fbW9kZV9nZXRyZXNvdXJjZXMoZGV2 LCAmY2FyZF9yZXMsIGZpbGUsIGZhbHNlKTsKPiA+ID4gKwlpZiAocmV0KQo+ID4gPiArCQlyZXR1 cm4gcmV0Owo+ID4gPiArCWlmICghY2FyZF9yZXMuY291bnRfY3J0Y3MpCj4gPiA+ICsJCXJldHVy biAtRU5PRU5UOwo+ID4gPiArCj4gPiA+ICsJY3J0Y3MgPSBrbWFsbG9jX2FycmF5KGNhcmRfcmVz LmNvdW50X2NydGNzLCBzaXplb2YoKmNydGNzKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJaWYgKCFj cnRjcykKPiA+ID4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gPiA+ICsKPiA+ID4gKwljYXJkX3Jlcy5j b3VudF9mYnMgPSAwOwo+ID4gPiArCWNhcmRfcmVzLmNvdW50X2Nvbm5lY3RvcnMgPSAwOwo+ID4g PiArCWNhcmRfcmVzLmNvdW50X2VuY29kZXJzID0gMDsKPiA+ID4gKwljYXJkX3Jlcy5jcnRjX2lk X3B0ciA9ICh1bnNpZ25lZCBsb25nKWNydGNzOwo+ID4gPiArCj4gPiA+ICsJcmV0ID0gZHJtX21v ZGVfZ2V0cmVzb3VyY2VzKGRldiwgJmNhcmRfcmVzLCBmaWxlLCBmYWxzZSk7Cj4gPiA+ICsJaWYg KHJldCkgewo+ID4gPiArCQlrZnJlZShjcnRjcyk7Cj4gPiA+ICsJCXJldHVybiByZXQ7Cj4gPiA+ ICsJfQo+ID4gPiArCj4gPiA+ICsJY2xpZW50LT5jcnRjcyA9IGNydGNzOwo+ID4gPiArCWNsaWVu dC0+bnVtX2NydGNzID0gY2FyZF9yZXMuY291bnRfY3J0Y3M7Cj4gPiA+ICsJY2xpZW50LT5taW5f d2lkdGggPSBjYXJkX3Jlcy5taW5fd2lkdGg7Cj4gPiA+ICsJY2xpZW50LT5tYXhfd2lkdGggPSBj YXJkX3Jlcy5tYXhfd2lkdGg7Cj4gPiA+ICsJY2xpZW50LT5taW5faGVpZ2h0ID0gY2FyZF9yZXMu bWluX2hlaWdodDsKPiA+ID4gKwljbGllbnQtPm1heF9oZWlnaHQgPSBjYXJkX3Jlcy5tYXhfaGVp Z2h0Owo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKy8q Kgo+ID4gPiArICogZHJtX2NsaWVudF9nZXRfZmlsZSAtIEdldCBhIERSTSBmaWxlCj4gPiA+ICsg KiBAY2xpZW50OiBEUk0gY2xpZW50Cj4gPiA+ICsgKgo+ID4gPiArICogVGhpcyBmdW5jdGlvbiBt YWtlcyBzdXJlIHRoZSBjbGllbnQgaGFzIGEgJmRybV9maWxlIGF2YWlsYWJsZS4gVGhlIGNsaWVu dAo+ID4gPiArICogZG9lc24ndCBub3JtYWxseSBuZWVkIHRvIGNhbGwgdGhpcywgc2luY2UgYWxs IGNsaWVudCBmdW5jdGlvbnMgdGhhdCBkZXBlbmRzCj4gPiA+ICsgKiBvbiBhIERSTSBmaWxlIHdp bGwgY2FsbCBpdC4gQSBtYXRjaGluZyBjYWxsIHRvIGRybV9jbGllbnRfcHV0X2ZpbGUoKSBpcwo+ ID4gPiArICogbmVjZXNzYXJ5Lgo+ID4gPiArICoKPiA+ID4gKyAqIFRoZSByZWFzb24gZm9yIG5v dCBvcGVuaW5nIGEgRFJNIGZpbGUgd2hlbiBhIEBjbGllbnQgaXMgY3JlYXRlZCBpcyBiZWNhdXNl Cj4gPiA+ICsgKiB3ZSBoYXZlIHRvIHRha2UgYSByZWYgb24gdGhlIGRyaXZlciBtb2R1bGUgZHVl IHRvICZkcm1fZHJpdmVyLT5wb3N0Y2xvc2UKPiA+ID4gKyAqIGJlaW5nIGNhbGxlZCBpbiBkcm1f ZmlsZV9mcmVlKCkuIEhhdmluZyBhIERSTSBmaWxlIG9wZW4gZm9yIHRoZSBsaWZldGltZSBvZgo+ ID4gPiArICogdGhlIGNsaWVudCBpbnN0YW5jZSB3b3VsZCBibG9jayBkcml2ZXIgbW9kdWxlIHVu bG9hZC4KPiA+ID4gKyAqCj4gPiA+ICsgKiBSZXR1cm5zOgo+ID4gPiArICogWmVybyBvbiBzdWNj ZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiA+ICsgKi8KPiA+ID4gK2lu dCBkcm1fY2xpZW50X2dldF9maWxlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KQo+ID4g PiArewo+ID4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjbGllbnQtPmRldjsKPiA+ID4g KwlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGU7Cj4gPiA+ICsJaW50IHJldCA9IDA7Cj4gPiA+ICsKPiA+ ID4gKwltdXRleF9sb2NrKCZjbGllbnQtPmxvY2spOwo+ID4gPiArCj4gPiA+ICsJaWYgKGNsaWVu dC0+ZmlsZV9yZWZfY291bnQrKykgewo+ID4gPiArCQltdXRleF91bmxvY2soJmNsaWVudC0+bG9j ayk7Cj4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWlmICghdHJ5 X21vZHVsZV9nZXQoZGV2LT5kcml2ZXItPmZvcHMtPm93bmVyKSkgewo+ID4gPiArCQlyZXQgPSAt RU5PREVWOwo+ID4gPiArCQlnb3RvIGVycl91bmxvY2s7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ ICsJZHJtX2Rldl9nZXQoZGV2KTsKPiA+ID4gKwo+ID4gPiArCWZpbGUgPSBkcm1fZmlsZV9hbGxv YyhkZXYtPnByaW1hcnkpOwo+ID4gPiArCWlmIChJU19FUlIoZmlsZSkpIHsKPiA+ID4gKwkJcmV0 ID0gUFRSX0VSUihmaWxlKTsKPiA+ID4gKwkJZ290byBlcnJfcHV0Owo+ID4gPiArCX0KPiA+ID4g Kwo+ID4gPiArCWlmICghY2xpZW50LT5jcnRjcykgewo+ID4gPiArCQlyZXQgPSBkcm1fY2xpZW50 X2luaXQoY2xpZW50LCBmaWxlKTsKPiA+ID4gKwkJaWYgKHJldCkKPiA+ID4gKwkJCWdvdG8gZXJy X2ZyZWU7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJbXV0ZXhfbG9jaygmZGV2LT5maWxlbGlz dF9tdXRleCk7Cj4gPiA+ICsJbGlzdF9hZGQoJmZpbGUtPmxoZWFkLCAmZGV2LT5maWxlbGlzdF9p bnRlcm5hbCk7Cj4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPmZpbGVsaXN0X211dGV4KTsKPiA+ ID4gKwo+ID4gPiArCWNsaWVudC0+ZmlsZSA9IGZpbGU7Cj4gPiA+ICsKPiA+ID4gKwltdXRleF91 bmxvY2soJmNsaWVudC0+bG9jayk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gKwo+ ID4gPiArZXJyX2ZyZWU6Cj4gPiA+ICsJZHJtX2ZpbGVfZnJlZShmaWxlKTsKPiA+ID4gK2Vycl9w dXQ6Cj4gPiA+ICsJZHJtX2Rldl9wdXQoZGV2KTsKPiA+ID4gKwltb2R1bGVfcHV0KGRldi0+ZHJp dmVyLT5mb3BzLT5vd25lcik7Cj4gPiA+ICtlcnJfdW5sb2NrOgo+ID4gPiArCWNsaWVudC0+Zmls ZV9yZWZfY291bnQgPSAwOwo+ID4gPiArCW11dGV4X3VubG9jaygmY2xpZW50LT5sb2NrKTsKPiA+ ID4gKwo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICtFWFBPUlRfU1lNQk9MKGRy bV9jbGllbnRfZ2V0X2ZpbGUpOwo+ID4gPiArCj4gPiA+ICt2b2lkIGRybV9jbGllbnRfcHV0X2Zp bGUoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNsaWVudC0+ZGV2Owo+ID4gPiArCj4gPiA+ICsJaWYgKCFjbGll bnQpCj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwo+ID4gPiArCW11dGV4X2xvY2soJmNsaWVudC0+ bG9jayk7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoV0FSTl9PTighY2xpZW50LT5maWxlX3JlZl9jb3Vu dCkpCj4gPiA+ICsJCWdvdG8gb3V0X3VubG9jazsKPiA+ID4gKwo+ID4gPiArCWlmICgtLWNsaWVu dC0+ZmlsZV9yZWZfY291bnQpCj4gPiA+ICsJCWdvdG8gb3V0X3VubG9jazsKPiA+ID4gKwo+ID4g PiArCW11dGV4X2xvY2soJmRldi0+ZmlsZWxpc3RfbXV0ZXgpOwo+ID4gPiArCWxpc3RfZGVsKCZj bGllbnQtPmZpbGUtPmxoZWFkKTsKPiA+ID4gKwltdXRleF91bmxvY2soJmRldi0+ZmlsZWxpc3Rf bXV0ZXgpOwo+ID4gPiArCj4gPiA+ICsJZHJtX2ZpbGVfZnJlZShjbGllbnQtPmZpbGUpOwo+ID4g PiArCWNsaWVudC0+ZmlsZSA9IE5VTEw7Cj4gPiA+ICsJZHJtX2Rldl9wdXQoZGV2KTsKPiA+ID4g Kwltb2R1bGVfcHV0KGRldi0+ZHJpdmVyLT5mb3BzLT5vd25lcik7Cj4gPiA+ICtvdXRfdW5sb2Nr Ogo+ID4gPiArCW11dGV4X3VubG9jaygmY2xpZW50LT5sb2NrKTsKPiA+ID4gK30KPiA+ID4gK0VY UE9SVF9TWU1CT0woZHJtX2NsaWVudF9wdXRfZmlsZSk7Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBz dHJ1Y3QgZHJtX3BlbmRpbmdfZXZlbnQgKgo+ID4gPiArZHJtX2NsaWVudF9yZWFkX2dldF9wZW5k aW5nX2V2ZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkK PiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfZXZlbnQgKmUgPSBOVUxMOwo+ID4g PiArCWludCByZXQ7Cj4gPiA+ICsKPiA+ID4gKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGli bGUoJmZpbGUtPmV2ZW50X3JlYWRfbG9jayk7Cj4gPiA+ICsJaWYgKHJldCkKPiA+ID4gKwkJcmV0 dXJuIEVSUl9QVFIocmV0KTsKPiA+ID4gKwo+ID4gPiArCXNwaW5fbG9ja19pcnEoJmRldi0+ZXZl bnRfbG9jayk7Cj4gPiA+ICsJaWYgKCFsaXN0X2VtcHR5KCZmaWxlLT5ldmVudF9saXN0KSkgewo+ ID4gPiArCQllID0gbGlzdF9maXJzdF9lbnRyeSgmZmlsZS0+ZXZlbnRfbGlzdCwKPiA+ID4gKwkJ CQkgICAgIHN0cnVjdCBkcm1fcGVuZGluZ19ldmVudCwgbGluayk7Cj4gPiA+ICsJCWZpbGUtPmV2 ZW50X3NwYWNlICs9IGUtPmV2ZW50LT5sZW5ndGg7Cj4gPiA+ICsJCWxpc3RfZGVsKCZlLT5saW5r KTsKPiA+ID4gKwl9Cj4gPiA+ICsJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPmV2ZW50X2xvY2spOwo+ ID4gPiArCj4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZmaWxlLT5ldmVudF9yZWFkX2xvY2spOwo+ID4g PiArCj4gPiA+ICsJcmV0dXJuIGU7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0cnVjdCBkcm1f ZXZlbnQgKgo+ID4gPiArZHJtX2NsaWVudF9yZWFkX2V2ZW50KHN0cnVjdCBkcm1fY2xpZW50X2Rl diAqY2xpZW50LCBib29sIGJsb2NrKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fZmlsZSAq ZmlsZSA9IGNsaWVudC0+ZmlsZTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2xp ZW50LT5kZXY7Cj4gPiA+ICsJc3RydWN0IGRybV9wZW5kaW5nX2V2ZW50ICplOwo+ID4gPiArCXN0 cnVjdCBkcm1fZXZlbnQgKmV2ZW50Owo+ID4gPiArCWludCByZXQ7Cj4gPiA+ICsKPiA+ID4gKwkv KiBBbGxvY2F0ZSBzbyBpdCBmaXRzIGFsbCBldmVudHMsIHRoZXJlJ3MgYSBzYW5pdHkgY2hlY2sg bGF0ZXIgKi8KPiA+ID4gKwlldmVudCA9IGt6YWxsb2MoMTI4LCBHRlBfS0VSTkVMKTsKPiA+ID4g KwlpZiAoIWV2ZW50KQo+ID4gPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+ID4gKwo+ ID4gPiArCWUgPSBkcm1fY2xpZW50X3JlYWRfZ2V0X3BlbmRpbmdfZXZlbnQoZGV2LCBmaWxlKTsK PiA+ID4gKwlpZiAoSVNfRVJSKGUpKSB7Cj4gPiA+ICsJCXJldCA9IFBUUl9FUlIoZSk7Cj4gPiA+ ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJaWYgKCFlICYmICFi bG9jaykgewo+ID4gPiArCQlyZXQgPSAwOwo+ID4gPiArCQlnb3RvIGVycl9mcmVlOwo+ID4gPiAr CX0KPiA+ID4gKwo+ID4gPiArCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0 KGZpbGUtPmV2ZW50X3dhaXQsCj4gPiA+ICsJCQkJCSAgICAgICAhbGlzdF9lbXB0eSgmZmlsZS0+ ZXZlbnRfbGlzdCksCj4gPiA+ICsJCQkJCSAgICAgICA1ICogSFopOwo+ID4gPiArCWlmICghcmV0 KQo+ID4gPiArCQlyZXQgPSAtRVRJTUVET1VUOwo+ID4gPiArCWlmIChyZXQgPCAwKQo+ID4gPiAr CQlnb3RvIGVycl9mcmVlOwo+ID4gPiArCj4gPiA+ICsJZSA9IGRybV9jbGllbnRfcmVhZF9nZXRf cGVuZGluZ19ldmVudChkZXYsIGZpbGUpOwo+ID4gPiArCWlmIChJU19FUlJfT1JfTlVMTChlKSkg ewo+ID4gPiArCQlyZXQgPSBQVFJfRVJSX09SX1pFUk8oZSk7Cj4gPiA+ICsJCWdvdG8gZXJyX2Zy ZWU7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJaWYgKFdBUk5fT04oZS0+ZXZlbnQtPmxlbmd0 aCA+IDEyOCkpIHsKPiA+ID4gKwkJLyogSW5jcmVhc2UgYnVmZmVyIGlmIHRoaXMgaGFwcGVucyAq Lwo+ID4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4gPiArCQlnb3RvIGVycl9mcmVlOwo+ID4gPiAr CX0KPiA+ID4gKwo+ID4gPiArCW1lbWNweShldmVudCwgZS0+ZXZlbnQsIGUtPmV2ZW50LT5sZW5n dGgpOwo+ID4gPiArCWtmcmVlKGUpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIGV2ZW50Owo+ID4g PiArCj4gPiA+ICtlcnJfZnJlZToKPiA+ID4gKwlrZnJlZShldmVudCk7Cj4gPiA+ICsKPiA+ID4g KwlyZXR1cm4gcmV0ID8gRVJSX1BUUihyZXQpIDogTlVMTDsKPiA+ID4gK30KPiA+ID4gK0VYUE9S VF9TWU1CT0woZHJtX2NsaWVudF9yZWFkX2V2ZW50KTsKPiA+ID4gKwo+ID4gPiArc3RhdGljIHZv aWQgZHJtX2NsaWVudF9jb25uZWN0b3JfZnJlZShzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3Ig KmNvbm5lY3RvcikKPiA+ID4gK3sKPiA+ID4gKwlpZiAoIWNvbm5lY3RvcikKPiA+ID4gKwkJcmV0 dXJuOwo+ID4gPiArCWtmcmVlKGNvbm5lY3Rvci0+bW9kZXMpOwo+ID4gPiArCWtmcmVlKGNvbm5l Y3Rvcik7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2NsaWVudF9j b25uZWN0b3IgKgo+ID4gPiArZHJtX2NsaWVudF9nZXRfY29ubmVjdG9yKHN0cnVjdCBkcm1fY2xp ZW50X2RldiAqY2xpZW50LCB1bnNpZ25lZCBpbnQgaWQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0 IGRybV9tb2RlX2dldF9jb25uZWN0b3IgcmVxID0gewo+ID4gPiArCQkuY29ubmVjdG9yX2lkID0g aWQsCj4gPiA+ICsJfTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3IgKmNvbm5l Y3RvcjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGVzID0gTlVMTDsKPiA+ ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7Cj4gPiA+ICsJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm47Cj4gPiA+ICsJYm9vbCBub25fZGVza3RvcDsKPiA+ID4gKwlp bnQgcmV0Owo+ID4gPiArCj4gPiA+ICsJY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2YoKmNvbm5l Y3RvciksIEdGUF9LRVJORUwpOwo+ID4gPiArCWlmICghY29ubmVjdG9yKQo+ID4gPiArCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+ID4gKwo+ID4gPiArCXJldCA9IGRybV9tb2RlX2dldGNv bm5lY3RvcihkZXYsICZyZXEsIGNsaWVudC0+ZmlsZSwgZmFsc2UpOwo+ID4gPiArCWlmIChyZXQp Cj4gPiA+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gPiA+ICsKPiA+ID4gKwljb25uZWN0b3ItPmNvbm5f aWQgPSBpZDsKPiA+ID4gKwljb25uZWN0b3ItPnN0YXR1cyA9IHJlcS5jb25uZWN0aW9uOwo+ID4g PiArCj4gPiA+ICsJY29ubiA9IGRybV9jb25uZWN0b3JfbG9va3VwKGRldiwgY2xpZW50LT5maWxl LCBpZCk7Cj4gPiA+ICsJaWYgKCFjb25uKSB7Cj4gPiA+ICsJCXJldCA9IC1FTk9FTlQ7Cj4gPiA+ ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJbm9uX2Rlc2t0b3Ag PSBjb25uLT5kaXNwbGF5X2luZm8ubm9uX2Rlc2t0b3A7Cj4gPiA+ICsKPiA+ID4gKwljb25uZWN0 b3ItPmhhc190aWxlID0gY29ubi0+aGFzX3RpbGU7Cj4gPiA+ICsJY29ubmVjdG9yLT50aWxlX2hf bG9jID0gY29ubi0+dGlsZV9oX2xvYzsKPiA+ID4gKwljb25uZWN0b3ItPnRpbGVfdl9sb2MgPSBj b25uLT50aWxlX3ZfbG9jOwo+ID4gPiArCWlmIChjb25uLT50aWxlX2dyb3VwKQo+ID4gPiArCQlj b25uZWN0b3ItPnRpbGVfZ3JvdXAgPSBjb25uLT50aWxlX2dyb3VwLT5pZDsKPiA+ID4gKwo+ID4g PiArCWRybV9jb25uZWN0b3JfcHV0KGNvbm4pOwo+ID4gPiArCj4gPiA+ICsJaWYgKG5vbl9kZXNr dG9wKSB7Cj4gPiA+ICsJCWtmcmVlKGNvbm5lY3Rvcik7Cj4gPiA+ICsJCXJldHVybiBOVUxMOwo+ ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWlmICghcmVxLmNvdW50X21vZGVzKQo+ID4gPiArCQly ZXR1cm4gY29ubmVjdG9yOwo+ID4gPiArCj4gPiA+ICsJbW9kZXMgPSBrY2FsbG9jKHJlcS5jb3Vu dF9tb2Rlcywgc2l6ZW9mKCptb2RlcyksIEdGUF9LRVJORUwpOwo+ID4gPiArCWlmICghbW9kZXMp IHsKPiA+ID4gKwkJcmV0ID0gLUVOT01FTTsKPiA+ID4gKwkJZ290byBlcnJfZnJlZTsKPiA+ID4g Kwl9Cj4gPiA+ICsKPiA+ID4gKwljb25uZWN0b3ItPm1vZGVzID0gbW9kZXM7Cj4gPiA+ICsJY29u bmVjdG9yLT5udW1fbW9kZXMgPSByZXEuY291bnRfbW9kZXM7Cj4gPiA+ICsKPiA+ID4gKwlyZXEu Y291bnRfcHJvcHMgPSAwOwo+ID4gPiArCXJlcS5jb3VudF9lbmNvZGVycyA9IDA7Cj4gPiA+ICsJ cmVxLm1vZGVzX3B0ciA9ICh1bnNpZ25lZCBsb25nKW1vZGVzOwo+ID4gPiArCj4gPiA+ICsJcmV0 ID0gZHJtX21vZGVfZ2V0Y29ubmVjdG9yKGRldiwgJnJlcSwgY2xpZW50LT5maWxlLCBmYWxzZSk7 Cj4gPiA+ICsJaWYgKHJldCkKPiA+ID4gKwkJZ290byBlcnJfZnJlZTsKPiA+ID4gKwo+ID4gPiAr CXJldHVybiBjb25uZWN0b3I7Cj4gPiA+ICsKPiA+ID4gK2Vycl9mcmVlOgo+ID4gPiArCWtmcmVl KG1vZGVzKTsKPiA+ID4gKwlrZnJlZShjb25uZWN0b3IpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJu IEVSUl9QVFIocmV0KTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBkcm1fY2xp ZW50X2dldF9jb25uZWN0b3JzKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LAo+ID4gPiAr CQkJCSAgICAgc3RydWN0IGRybV9jbGllbnRfY29ubmVjdG9yICoqKmNvbm5lY3RvcnMpCj4gPiA+ ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9tb2RlX2NhcmRfcmVzIGNhcmRfcmVzID0ge307Cj4gPiA+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNsaWVudC0+ZGV2Owo+ID4gPiArCWludCByZXQs IG51bV9jb25uZWN0b3JzOwo+ID4gPiArCXUzMiAqY29ubmVjdG9yX2lkczsKPiA+ID4gKwl1bnNp Z25lZCBpbnQgaTsKPiA+ID4gKwo+ID4gPiArCXJldCA9IGRybV9tb2RlX2dldHJlc291cmNlcyhk ZXYsICZjYXJkX3JlcywgY2xpZW50LT5maWxlLCBmYWxzZSk7Cj4gPiA+ICsJaWYgKHJldCkKPiA+ ID4gKwkJcmV0dXJuIHJldDsKPiA+ID4gKwlpZiAoIWNhcmRfcmVzLmNvdW50X2Nvbm5lY3RvcnMp Cj4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiArCj4gPiA+ICsJbnVtX2Nvbm5lY3RvcnMgPSBjYXJk X3Jlcy5jb3VudF9jb25uZWN0b3JzOwo+ID4gPiArCWNvbm5lY3Rvcl9pZHMgPSBrY2FsbG9jKG51 bV9jb25uZWN0b3JzLAo+ID4gPiArCQkJCXNpemVvZigqY29ubmVjdG9yX2lkcyksIEdGUF9LRVJO RUwpOwo+ID4gPiArCWlmICghY29ubmVjdG9yX2lkcykKPiA+ID4gKwkJcmV0dXJuIC1FTk9NRU07 Cj4gPiA+ICsKPiA+ID4gKwljYXJkX3Jlcy5jb3VudF9mYnMgPSAwOwo+ID4gPiArCWNhcmRfcmVz LmNvdW50X2NydGNzID0gMDsKPiA+ID4gKwljYXJkX3Jlcy5jb3VudF9lbmNvZGVycyA9IDA7Cj4g PiA+ICsJY2FyZF9yZXMuY29ubmVjdG9yX2lkX3B0ciA9ICh1bnNpZ25lZCBsb25nKWNvbm5lY3Rv cl9pZHM7Cj4gPiA+ICsKPiA+ID4gKwlyZXQgPSBkcm1fbW9kZV9nZXRyZXNvdXJjZXMoZGV2LCAm Y2FyZF9yZXMsIGNsaWVudC0+ZmlsZSwgZmFsc2UpOwo+ID4gPiArCWlmIChyZXQpCj4gPiA+ICsJ CWdvdG8gZXJyX2ZyZWU7Cj4gPiA+ICsKPiA+ID4gKwkqY29ubmVjdG9ycyA9IGtjYWxsb2MobnVt X2Nvbm5lY3RvcnMsIHNpemVvZigqKmNvbm5lY3RvcnMpLCBHRlBfS0VSTkVMKTsKPiA+ID4gKwlp ZiAoISgqY29ubmVjdG9ycykpIHsKPiA+ID4gKwkJcmV0ID0gLUVOT01FTTsKPiA+ID4gKwkJZ290 byBlcnJfZnJlZTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVt X2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gPiArCQlzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3Ig KmNvbm5lY3RvcjsKPiA+ID4gKwo+ID4gPiArCQljb25uZWN0b3IgPSBkcm1fY2xpZW50X2dldF9j b25uZWN0b3IoY2xpZW50LCBjb25uZWN0b3JfaWRzW2ldKTsKPiA+ID4gKwkJaWYgKElTX0VSUihj b25uZWN0b3IpKSB7Cj4gPiA+ICsJCQlyZXQgPSBQVFJfRVJSKGNvbm5lY3Rvcik7Cj4gPiA+ICsJ CQlnb3RvIGVycl9mcmVlOwo+ID4gPiArCQl9Cj4gPiA+ICsJCWlmIChjb25uZWN0b3IpCj4gPiA+ ICsJCQkoKmNvbm5lY3RvcnMpW2ldID0gY29ubmVjdG9yOwo+ID4gPiArCQllbHNlCj4gPiA+ICsJ CQludW1fY29ubmVjdG9ycy0tOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWlmICghbnVtX2Nv bm5lY3RvcnMpIHsKPiA+ID4gKwkJcmV0ID0gMDsKPiA+ID4gKwkJZ290byBlcnJfZnJlZTsKPiA+ ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gbnVtX2Nvbm5lY3RvcnM7Cj4gPiA+ICsKPiA+ ID4gK2Vycl9mcmVlOgo+ID4gPiArCWlmIChjb25uZWN0b3JzKQo+ID4gPiArCQlmb3IgKGkgPSAw OyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykKPiA+ID4gKwkJCWRybV9jbGllbnRfY29ubmVjdG9y X2ZyZWUoKCpjb25uZWN0b3JzKVtpXSk7Cj4gPiA+ICsKPiA+ID4gKwlrZnJlZShjb25uZWN0b3Jz KTsKPiA+ID4gKwlrZnJlZShjb25uZWN0b3JfaWRzKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBy ZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBib29sCj4gPiA+ICtkcm1fY2xpZW50 X2Nvbm5lY3Rvcl9pc19lbmFibGVkKHN0cnVjdCBkcm1fY2xpZW50X2Nvbm5lY3RvciAqY29ubmVj dG9yLAo+ID4gPiArCQkJCWJvb2wgc3RyaWN0KQo+ID4gPiArewo+ID4gPiArCWlmIChzdHJpY3Qp Cj4gPiA+ICsJCXJldHVybiBjb25uZWN0b3ItPnN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nv bm5lY3RlZDsKPiA+ID4gKwllbHNlCj4gPiA+ICsJCXJldHVybiBjb25uZWN0b3ItPnN0YXR1cyAh PSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiAr c3RydWN0IGRybV9tb2RlX21vZGVpbmZvICoKPiA+ID4gK2RybV9jbGllbnRfZGlzcGxheV9maXJz dF9tb2RlKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXkpCj4gPiA+ICt7Cj4gPiA+ ICsJaWYgKCFkaXNwbGF5LT5udW1fbW9kZXMpCj4gPiA+ICsJCXJldHVybiBOVUxMOwo+ID4gPiAr CXJldHVybiBkaXNwbGF5LT5tb2RlczsKPiA+ID4gK30KPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJt X2NsaWVudF9kaXNwbGF5X2ZpcnN0X21vZGUpOwo+ID4gPiArCj4gPiA+ICtzdHJ1Y3QgZHJtX21v ZGVfbW9kZWluZm8gKgo+ID4gPiArZHJtX2NsaWVudF9kaXNwbGF5X25leHRfbW9kZShzdHJ1Y3Qg ZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5LAo+ID4gPiArCQkJICAgICBzdHJ1Y3QgZHJtX21v ZGVfbW9kZWluZm8gKm1vZGUpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9tb2RlX21vZGVp bmZvICptb2RlcyA9IGRpc3BsYXktPm1vZGVzOwo+ID4gPiArCj4gPiA+ICsJaWYgKCsrbW9kZSA8 ICZtb2Rlc1tkaXNwbGF5LT5udW1fbW9kZXNdKQo+ID4gPiArCQlyZXR1cm4gbW9kZTsKPiA+ID4g Kwo+ID4gPiArCXJldHVybiBOVUxMOwo+ID4gPiArfQo+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1f Y2xpZW50X2Rpc3BsYXlfbmV4dF9tb2RlKTsKPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQKPiA+ ID4gK2RybV9jbGllbnRfZGlzcGxheV9maWxsX3RpbGVfbW9kZXMoc3RydWN0IGRybV9jbGllbnRf ZGlzcGxheSAqZGlzcGxheSwKPiA+ID4gKwkJCQkgICBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8g KnRpbGVfbW9kZXMpCj4gPiA+ICt7Cj4gPiA+ICsJdW5zaWduZWQgaW50IGksIGosIG51bV9tb2Rl cyA9IGRpc3BsYXktPmNvbm5lY3RvcnNbMF0tPm51bV9tb2RlczsKPiA+ID4gKwlzdHJ1Y3QgZHJt X21vZGVfbW9kZWluZm8gKnRpbGVfbW9kZSwgKmNvbm5fbW9kZTsKPiA+ID4gKwo+ID4gPiArCWlm ICghbnVtX21vZGVzKSB7Cj4gPiA+ICsJCWtmcmVlKHRpbGVfbW9kZXMpOwo+ID4gPiArCQlrZnJl ZShkaXNwbGF5LT5tb2Rlcyk7Cj4gPiA+ICsJCWRpc3BsYXktPm1vZGVzID0gTlVMTDsKPiA+ID4g KwkJZGlzcGxheS0+bnVtX21vZGVzID0gMDsKPiA+ID4gKwkJcmV0dXJuOwo+ID4gPiArCX0KPiA+ ID4gKwo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fbW9kZXM7IGkrKykgewo+ID4gPiArCQl0 aWxlX21vZGUgPSAmdGlsZV9tb2Rlc1tpXTsKPiA+ID4gKwo+ID4gPiArCQljb25uX21vZGUgPSAm ZGlzcGxheS0+Y29ubmVjdG9yc1swXS0+bW9kZXNbaV07Cj4gPiA+ICsJCXRpbGVfbW9kZS0+Y2xv Y2sgPSBjb25uX21vZGUtPmNsb2NrOwo+ID4gPiArCQl0aWxlX21vZGUtPnZzY2FuID0gY29ubl9t b2RlLT52c2NhbjsKPiA+ID4gKwkJdGlsZV9tb2RlLT52cmVmcmVzaCA9IGNvbm5fbW9kZS0+dnJl ZnJlc2g7Cj4gPiA+ICsJCXRpbGVfbW9kZS0+ZmxhZ3MgPSBjb25uX21vZGUtPmZsYWdzOwo+ID4g PiArCQl0aWxlX21vZGUtPnR5cGUgPSBjb25uX21vZGUtPnR5cGU7Cj4gPiA+ICsKPiA+ID4gKwkJ Zm9yIChqID0gMDsgaiA8IGRpc3BsYXktPm51bV9jb25uZWN0b3JzOyBqKyspIHsKPiA+ID4gKwkJ CWNvbm5fbW9kZSA9ICZkaXNwbGF5LT5jb25uZWN0b3JzW2pdLT5tb2Rlc1tpXTsKPiA+ID4gKwo+ ID4gPiArCQkJaWYgKCFkaXNwbGF5LT5jb25uZWN0b3JzW2pdLT50aWxlX2hfbG9jKSB7Cj4gPiA+ ICsJCQkJdGlsZV9tb2RlLT5oZGlzcGxheSArPSBjb25uX21vZGUtPmhkaXNwbGF5Owo+ID4gPiAr CQkJCXRpbGVfbW9kZS0+aHN5bmNfc3RhcnQgKz0gY29ubl9tb2RlLT5oc3luY19zdGFydDsKPiA+ ID4gKwkJCQl0aWxlX21vZGUtPmhzeW5jX2VuZCArPSBjb25uX21vZGUtPmhzeW5jX2VuZDsKPiA+ ID4gKwkJCQl0aWxlX21vZGUtPmh0b3RhbCArPSBjb25uX21vZGUtPmh0b3RhbDsKPiA+ID4gKwkJ CX0KPiA+ID4gKwo+ID4gPiArCQkJaWYgKCFkaXNwbGF5LT5jb25uZWN0b3JzW2pdLT50aWxlX3Zf bG9jKSB7Cj4gPiA+ICsJCQkJdGlsZV9tb2RlLT52ZGlzcGxheSArPSBjb25uX21vZGUtPnZkaXNw bGF5Owo+ID4gPiArCQkJCXRpbGVfbW9kZS0+dnN5bmNfc3RhcnQgKz0gY29ubl9tb2RlLT52c3lu Y19zdGFydDsKPiA+ID4gKwkJCQl0aWxlX21vZGUtPnZzeW5jX2VuZCArPSBjb25uX21vZGUtPnZz eW5jX2VuZDsKPiA+ID4gKwkJCQl0aWxlX21vZGUtPnZ0b3RhbCArPSBjb25uX21vZGUtPnZ0b3Rh bDsKPiA+ID4gKwkJCX0KPiA+ID4gKwkJfQo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWtmcmVl KGRpc3BsYXktPm1vZGVzKTsKPiA+ID4gKwlkaXNwbGF5LT5tb2RlcyA9IHRpbGVfbW9kZXM7Cj4g PiA+ICsJZGlzcGxheS0+bnVtX21vZGVzID0gbnVtX21vZGVzOwo+ID4gPiArfQo+ID4gPiArCj4g PiA+ICsvKioKPiA+ID4gKyAqIGRybV9jbGllbnRfZGlzcGxheV91cGRhdGVfbW9kZXMgLSBGZXRj aCBkaXNwbGF5IG1vZGVzCj4gPiA+ICsgKiBAZGlzcGxheTogQ2xpZW50IGRpc3BsYXkKPiA+ID4g KyAqIEBtb2RlX2NoYW5nZWQ6IE9wdGlvbmFsIHBvaW50ZXIgdG8gYm9vbGVuIHdoaWNoIHJldHVy biB3aGV0aGVyIHRoZSBtb2Rlcwo+ID4gPiArICogICAgICAgICAgICAgICAgaGF2ZSBjaGFuZ2Vk IG9yIG5vdC4KPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGlu IHRoZSBjbGllbnQgaG90cGx1ZyBjYWxsYmFjayB0byBjaGVjayBpZiB0aGUKPiA+ID4gKyAqIHZp ZGVvIG1vZGVzIGhhdmUgY2hhbmdlZCBhbmQgZ2V0IHRoZW0gdXAtdG8tZGF0ZS4KPiA+ID4gKyAq Cj4gPiA+ICsgKiBSZXR1cm5zOgo+ID4gPiArICogTnVtYmVyIG9mIG1vZGVzIG9uIHN1Y2Nlc3Ms IG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ID4gKyAqLwo+ID4gPiAraW50IGRy bV9jbGllbnRfZGlzcGxheV91cGRhdGVfbW9kZXMoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAq ZGlzcGxheSwKPiA+ID4gKwkJCQkgICAgYm9vbCAqbW9kZV9jaGFuZ2VkKQo+ID4gPiArewo+ID4g PiArCXVuc2lnbmVkIGludCBudW1fY29ubmVjdG9ycyA9IGRpc3BsYXktPm51bV9jb25uZWN0b3Jz Owo+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50ID0gZGlzcGxheS0+Y2xpZW50 Owo+ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqZGlzcGxheV90aWxlX21vZGVzOwo+ ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2Nvbm5lY3RvciAqKmNvbm5lY3RvcnM7Cj4gPiA+ICsJ dW5zaWduZWQgaW50IGksIG51bV9tb2RlcyA9IDA7Cj4gPiA+ICsJYm9vbCBkdW1teV9jaGFuZ2Vk ID0gZmFsc2U7Cj4gPiA+ICsJaW50IHJldDsKPiA+ID4gKwo+ID4gPiArCWlmIChtb2RlX2NoYW5n ZWQpCj4gPiA+ICsJCSptb2RlX2NoYW5nZWQgPSBmYWxzZTsKPiA+ID4gKwllbHNlCj4gPiA+ICsJ CW1vZGVfY2hhbmdlZCA9ICZkdW1teV9jaGFuZ2VkOwo+ID4gPiArCj4gPiA+ICsJaWYgKGRpc3Bs YXktPmNsb25lZCkKPiA+ID4gKwkJcmV0dXJuIDI7Cj4gPiA+ICsKPiA+ID4gKwlyZXQgPSBkcm1f Y2xpZW50X2dldF9maWxlKGNsaWVudCk7Cj4gPiA+ICsJaWYgKHJldCkKPiA+ID4gKwkJcmV0dXJu IHJldDsKPiA+ID4gKwo+ID4gPiArCWNvbm5lY3RvcnMgPSBrY2FsbG9jKG51bV9jb25uZWN0b3Jz LCBzaXplb2YoKmNvbm5lY3RvcnMpLCBHRlBfS0VSTkVMKTsKPiA+ID4gKwlpZiAoIWNvbm5lY3Rv cnMpIHsKPiA+ID4gKwkJcmV0ID0gLUVOT01FTTsKPiA+ID4gKwkJZ290byBvdXRfcHV0X2ZpbGU7 Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJLyogR2V0IGEgbmV3IHNldCBmb3IgY29tcGFyaXNv biAqLwo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fY29ubmVjdG9yczsgaSsrKSB7Cj4gPiA+ ICsJCWNvbm5lY3RvcnNbaV0gPSBkcm1fY2xpZW50X2dldF9jb25uZWN0b3IoY2xpZW50LCBkaXNw bGF5LT5jb25uZWN0b3JzW2ldLT5jb25uX2lkKTsKPiA+ID4gKwkJaWYgKElTX0VSUl9PUl9OVUxM KGNvbm5lY3RvcnNbaV0pKSB7Cj4gPiA+ICsJCQlyZXQgPSBQVFJfRVJSX09SX1pFUk8oY29ubmVj dG9yc1tpXSk7Cj4gPiA+ICsJCQlpZiAoIXJldCkKPiA+ID4gKwkJCQlyZXQgPSAtRU5PRU5UOwo+ ID4gPiArCQkJZ290byBvdXRfY2xlYW51cDsKPiA+ID4gKwkJfQo+ID4gPiArCX0KPiA+ID4gKwo+ ID4gPiArCS8qIEFsbCBjb25uZWN0b3JzIHNob3VsZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBt b2RlcyAqLwo+ID4gPiArCW51bV9tb2RlcyA9IGNvbm5lY3RvcnNbMF0tPm51bV9tb2RlczsKPiA+ ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gPiArCQlpZiAo bnVtX21vZGVzICE9IGNvbm5lY3RvcnNbaV0tPm51bV9tb2Rlcykgewo+ID4gPiArCQkJcmV0ID0g LUVJTlZBTDsKPiA+ID4gKwkJCWdvdG8gb3V0X2NsZWFudXA7Cj4gPiA+ICsJCX0KPiA+ID4gKwl9 Cj4gPiA+ICsKPiA+ID4gKwlpZiAobnVtX2Nvbm5lY3RvcnMgPiAxKSB7Cj4gPiA+ICsJCWRpc3Bs YXlfdGlsZV9tb2RlcyA9IGtjYWxsb2MobnVtX21vZGVzLCBzaXplb2YoKmRpc3BsYXlfdGlsZV9t b2RlcyksIEdGUF9LRVJORUwpOwo+ID4gPiArCQlpZiAoIWRpc3BsYXlfdGlsZV9tb2Rlcykgewo+ ID4gPiArCQkJcmV0ID0gLUVOT01FTTsKPiA+ID4gKwkJCWdvdG8gb3V0X2NsZWFudXA7Cj4gPiA+ ICsJCX0KPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwltdXRleF9sb2NrKCZkaXNwbGF5LT5tb2Rl c19sb2NrKTsKPiA+ID4gKwo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fY29ubmVjdG9yczsg aSsrKSB7Cj4gPiA+ICsJCWRpc3BsYXktPmNvbm5lY3RvcnNbaV0tPnN0YXR1cyA9IGNvbm5lY3Rv cnNbaV0tPnN0YXR1czsKPiA+ID4gKwkJaWYgKGRpc3BsYXktPmNvbm5lY3RvcnNbaV0tPm51bV9t b2RlcyAhPSBjb25uZWN0b3JzW2ldLT5udW1fbW9kZXMpIHsKPiA+ID4gKwkJCWRpc3BsYXktPmNv bm5lY3RvcnNbaV0tPm51bV9tb2RlcyA9IGNvbm5lY3RvcnNbaV0tPm51bV9tb2RlczsKPiA+ID4g KwkJCWtmcmVlKGRpc3BsYXktPmNvbm5lY3RvcnNbaV0tPm1vZGVzKTsKPiA+ID4gKwkJCWRpc3Bs YXktPmNvbm5lY3RvcnNbaV0tPm1vZGVzID0gY29ubmVjdG9yc1tpXS0+bW9kZXM7Cj4gPiA+ICsJ CQljb25uZWN0b3JzW2ldLT5tb2RlcyA9IE5VTEw7Cj4gPiA+ICsJCQkqbW9kZV9jaGFuZ2VkID0g dHJ1ZTsKPiA+ID4gKwkJfQo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWlmIChudW1fY29ubmVj dG9ycyA+IDEpCj4gPiA+ICsJCWRybV9jbGllbnRfZGlzcGxheV9maWxsX3RpbGVfbW9kZXMoZGlz cGxheSwgZGlzcGxheV90aWxlX21vZGVzKTsKPiA+ID4gKwllbHNlCj4gPiA+ICsJCWRpc3BsYXkt Pm1vZGVzID0gZGlzcGxheS0+Y29ubmVjdG9yc1swXS0+bW9kZXM7Cj4gPiA+ICsKPiA+ID4gKwlt dXRleF91bmxvY2soJmRpc3BsYXktPm1vZGVzX2xvY2spOwo+ID4gPiArCj4gPiA+ICtvdXRfY2xl YW51cDoKPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykKPiA+ID4g KwkJZHJtX2NsaWVudF9jb25uZWN0b3JfZnJlZShjb25uZWN0b3JzW2ldKTsKPiA+ID4gKwlrZnJl ZShjb25uZWN0b3JzKTsKPiA+ID4gK291dF9wdXRfZmlsZToKPiA+ID4gKwlkcm1fY2xpZW50X3B1 dF9maWxlKGNsaWVudCk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gcmV0ID8gcmV0IDogbnVtX21v ZGVzOwo+ID4gPiArfQo+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfdXBk YXRlX21vZGVzKTsKPiA+ID4gKwo+ID4gPiArdm9pZCBkcm1fY2xpZW50X2Rpc3BsYXlfZnJlZShz dHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5KQo+ID4gPiArewo+ID4gPiArCXVuc2ln bmVkIGludCBpOwo+ID4gPiArCj4gPiA+ICsJaWYgKCFkaXNwbGF5KQo+ID4gPiArCQlyZXR1cm47 Cj4gPiA+ICsKPiA+ID4gKwkvKiB0aWxlIG1vZGVzPyAqLwo+ID4gPiArCWlmIChkaXNwbGF5LT5t b2RlcyAhPSBkaXNwbGF5LT5jb25uZWN0b3JzWzBdLT5tb2RlcykKPiA+ID4gKwkJa2ZyZWUoZGlz cGxheS0+bW9kZXMpOwo+ID4gPiArCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm51 bV9jb25uZWN0b3JzOyBpKyspCj4gPiA+ICsJCWRybV9jbGllbnRfY29ubmVjdG9yX2ZyZWUoZGlz cGxheS0+Y29ubmVjdG9yc1tpXSk7Cj4gPiA+ICsKPiA+ID4gKwlrZnJlZShkaXNwbGF5LT5jb25u ZWN0b3JzKTsKPiA+ID4gKwltdXRleF9kZXN0cm95KCZkaXNwbGF5LT5tb2Rlc19sb2NrKTsKPiA+ ID4gKwlrZnJlZShkaXNwbGF5KTsKPiA+ID4gK30KPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2Ns aWVudF9kaXNwbGF5X2ZyZWUpOwo+ID4gPiArCj4gPiA+ICtzdGF0aWMgc3RydWN0IGRybV9jbGll bnRfZGlzcGxheSAqCj4gPiA+ICtkcm1fY2xpZW50X2Rpc3BsYXlfYWxsb2Moc3RydWN0IGRybV9j bGllbnRfZGV2ICpjbGllbnQsCj4gPiA+ICsJCQkgdW5zaWduZWQgaW50IG51bV9jb25uZWN0b3Jz KQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXk7Cj4g PiA+ICsJc3RydWN0IGRybV9jbGllbnRfY29ubmVjdG9yICoqY29ubmVjdG9yczsKPiA+ID4gKwo+ ID4gPiArCWRpc3BsYXkgPSBremFsbG9jKHNpemVvZigqZGlzcGxheSksIEdGUF9LRVJORUwpOwo+ ID4gPiArCWNvbm5lY3RvcnMgPSBrY2FsbG9jKG51bV9jb25uZWN0b3JzLCBzaXplb2YoKmNvbm5l Y3RvcnMpLCBHRlBfS0VSTkVMKTsKPiA+ID4gKwlpZiAoIWRpc3BsYXkgfHwgIWNvbm5lY3RvcnMp IHsKPiA+ID4gKwkJa2ZyZWUoZGlzcGxheSk7Cj4gPiA+ICsJCWtmcmVlKGNvbm5lY3RvcnMpOwo+ ID4gPiArCQlyZXR1cm4gTlVMTDsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwltdXRleF9pbml0 KCZkaXNwbGF5LT5tb2Rlc19sb2NrKTsKPiA+ID4gKwlkaXNwbGF5LT5jbGllbnQgPSBjbGllbnQ7 Cj4gPiA+ICsJZGlzcGxheS0+Y29ubmVjdG9ycyA9IGNvbm5lY3RvcnM7Cj4gPiA+ICsJZGlzcGxh eS0+bnVtX2Nvbm5lY3RvcnMgPSBudW1fY29ubmVjdG9yczsKPiA+ID4gKwo+ID4gPiArCXJldHVy biBkaXNwbGF5Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsvKiBMb2dpYyBpcyBmcm9tIGRybV9m Yl9oZWxwZXIgKi8KPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICoKPiA+ ID4gK2RybV9jbGllbnRfY29ubmVjdG9yX3BpY2tfY2xvbmVkKHN0cnVjdCBkcm1fY2xpZW50X2Rl diAqY2xpZW50LAo+ID4gPiArCQkJCSBzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3IgKipjb25u ZWN0b3JzLAo+ID4gPiArCQkJCSB1bnNpZ25lZCBpbnQgbnVtX2Nvbm5lY3RvcnMpCj4gPiA+ICt7 Cj4gPiA+ICsJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIG1vZGVzWzJdLCB1ZG10X21vZGUsICpt b2RlLCAqdG1wOwo+ID4gPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkbXRfZGlzcGxheV9t b2RlID0gTlVMTDsKPiA+ID4gKwl1bnNpZ25lZCBpbnQgaSwgaiwgY29ubnNbMl0sIG51bV9jb25u cyA9IDA7Cj4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfY29ubmVjdG9yICpjb25uZWN0b3I7Cj4g PiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNsaWVudC0+ZGV2Owo+ID4gPiArCXN0cnVj dCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXk7Cj4gPiA+ICsKPiA+ID4gKwkvKiBvbmx5IGNv bnRlbXBsYXRlIGNsb25pbmcgaW4gdGhlIHNpbmdsZSBjcnRjIGNhc2UgKi8KPiA+ID4gKwlpZiAo ZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YyA+IDEpCj4gPiA+ICsJCXJldHVybiBOVUxMOwo+ID4g PiArcmV0cnk6Cj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jb25uZWN0b3JzOyBpKyspIHsK PiA+ID4gKwkJY29ubmVjdG9yID0gY29ubmVjdG9yc1tpXTsKPiA+ID4gKwkJaWYgKCFjb25uZWN0 b3IgfHwgY29ubmVjdG9yLT5oYXNfdGlsZSB8fCAhY29ubmVjdG9yLT5udW1fbW9kZXMpCj4gPiA+ ICsJCQljb250aW51ZTsKPiA+ID4gKwo+ID4gPiArCQlmb3IgKGogPSAwOyBqIDwgY29ubmVjdG9y LT5udW1fbW9kZXM7IGorKykgewo+ID4gPiArCQkJbW9kZSA9ICZjb25uZWN0b3ItPm1vZGVzW2pd Owo+ID4gPiArCQkJaWYgKGRtdF9kaXNwbGF5X21vZGUpIHsKPiA+ID4gKwkJCQlpZiAoZHJtX3Vt b2RlX2VxdWFsKCZ1ZG10X21vZGUsIG1vZGUpKSB7Cj4gPiA+ICsJCQkJCWNvbm5zW251bV9jb25u c10gPSBpOwo+ID4gPiArCQkJCQltb2Rlc1tudW1fY29ubnMrK10gPSAqbW9kZTsKPiA+ID4gKwkJ CQkJYnJlYWs7Cj4gPiA+ICsJCQkJfQo+ID4gPiArCQkJfSBlbHNlIHsKPiA+ID4gKwkJCQlpZiAo bW9kZS0+dHlwZSAmIERSTV9NT0RFX1RZUEVfVVNFUkRFRikgewo+ID4gPiArCQkJCQljb25uc1tu dW1fY29ubnNdID0gaTsKPiA+ID4gKwkJCQkJbW9kZXNbbnVtX2Nvbm5zKytdID0gKm1vZGU7Cj4g PiA+ICsJCQkJCWJyZWFrOwo+ID4gPiArCQkJCX0KPiA+ID4gKwkJCX0KPiA+ID4gKwkJfQo+ID4g PiArCQlpZiAobnVtX2Nvbm5zID09IDIpCj4gPiA+ICsJCQlicmVhazsKPiA+ID4gKwl9Cj4gPiA+ ICsKPiA+ID4gKwlpZiAobnVtX2Nvbm5zID09IDIpCj4gPiA+ICsJCWdvdG8gZm91bmQ7Cj4gPiA+ ICsKPiA+ID4gKwlpZiAoZG10X2Rpc3BsYXlfbW9kZSkKPiA+ID4gKwkJcmV0dXJuIE5VTEw7Cj4g PiA+ICsKPiA+ID4gKwlkbXRfZGlzcGxheV9tb2RlID0gZHJtX21vZGVfZmluZF9kbXQoZGV2LCAx MDI0LCA3NjgsIDYwLCBmYWxzZSk7Cj4gPiA+ICsJZHJtX21vZGVfY29udmVydF90b191bW9kZSgm dWRtdF9tb2RlLCBkbXRfZGlzcGxheV9tb2RlKTsKPiA+ID4gKwlkcm1fbW9kZV9kZXN0cm95KGRl diwgZG10X2Rpc3BsYXlfbW9kZSk7Cj4gPiA+ICsKPiA+ID4gKwlnb3RvIHJldHJ5Owo+ID4gPiAr Cj4gPiA+ICtmb3VuZDoKPiA+ID4gKwl0bXAgPSBrY2FsbG9jKDIsIHNpemVvZigqdG1wKSwgR0ZQ X0tFUk5FTCk7Cj4gPiA+ICsJaWYgKCF0bXApCj4gPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOwo+ID4gPiArCj4gPiA+ICsJZGlzcGxheSA9IGRybV9jbGllbnRfZGlzcGxheV9hbGxvYyhj bGllbnQsIDIpOwo+ID4gPiArCWlmICghZGlzcGxheSkgewo+ID4gPiArCQlrZnJlZSh0bXApOwo+ ID4gPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4g Kwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Cj4gPiA+ICsJCWNvbm5lY3RvciA9IGNvbm5lY3Rv cnNbY29ubnNbaV1dOwo+ID4gPiArCQlkaXNwbGF5LT5jb25uZWN0b3JzW2ldID0gY29ubmVjdG9y Owo+ID4gPiArCQljb25uZWN0b3JzW2Nvbm5zW2ldXSA9IE5VTEw7Cj4gPiA+ICsJCWtmcmVlKGNv bm5lY3Rvci0+bW9kZXMpOwo+ID4gPiArCQl0bXBbaV0gPSBtb2Rlc1tpXTsKPiA+ID4gKwkJY29u bmVjdG9yLT5tb2RlcyA9ICZ0bXBbaV07Cj4gPiA+ICsJCWNvbm5lY3Rvci0+bnVtX21vZGVzID0g MTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlkaXNwbGF5LT5jbG9uZWQgPSB0cnVlOwo+ID4g PiArCWRpc3BsYXktPm1vZGVzID0gJnRtcFswXTsKPiA+ID4gKwlkaXNwbGF5LT5udW1fbW9kZXMg PSAxOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIGRpc3BsYXk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICoKPiA+ID4gK2RybV9jbGllbnRf Y29ubmVjdG9yX3BpY2tfdGlsZShzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwKPiA+ID4g KwkJCSAgICAgICBzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3IgKipjb25uZWN0b3JzLAo+ID4g PiArCQkJICAgICAgIHVuc2lnbmVkIGludCBudW1fY29ubmVjdG9ycykKPiA+ID4gK3sKPiA+ID4g Kwl1bnNpZ25lZCBpbnQgaSwgbnVtX2Nvbm5zLCBudW1fbW9kZXMsIHRpbGVfZ3JvdXAgPSAwOwo+ ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqdGlsZV9tb2RlcyA9IE5VTEw7Cj4gPiA+ ICsJc3RydWN0IGRybV9jbGllbnRfY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gPiA+ICsJc3RydWN0 IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheTsKPiA+ID4gKwl1MTYgY29ubnNbMzJdOwo+ID4g PiArCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jb25uZWN0b3JzOyBpKyspIHsKPiA+ID4g KwkJY29ubmVjdG9yID0gY29ubmVjdG9yc1tpXTsKPiA+ID4gKwkJaWYgKCFjb25uZWN0b3IgfHwg IWNvbm5lY3Rvci0+dGlsZV9ncm91cCkKPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ ICsJCWlmICghdGlsZV9ncm91cCkgewo+ID4gPiArCQkJdGlsZV9ncm91cCA9IGNvbm5lY3Rvci0+ dGlsZV9ncm91cDsKPiA+ID4gKwkJCW51bV9tb2RlcyA9IGNvbm5lY3Rvci0+bnVtX21vZGVzOwo+ ID4gPiArCQl9Cj4gPiA+ICsKPiA+ID4gKwkJaWYgKGNvbm5lY3Rvci0+dGlsZV9ncm91cCAhPSB0 aWxlX2dyb3VwKQo+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ICsKPiA+ID4gKwkJaWYgKG51bV9t b2RlcyAhPSBjb25uZWN0b3ItPm51bV9tb2Rlcykgewo+ID4gPiArCQkJRFJNX0VSUk9SKCJUaWxl IGNvbm5lY3RvcnMgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBtb2Rlc1xuIik7Cj4gPiA+ ICsJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+ID4gKwkJfQo+ID4gPiArCj4gPiA+ICsJ CWNvbm5zW251bV9jb25ucysrXSA9IGk7Cj4gPiA+ICsJCWlmIChXQVJOX09OKG51bV9jb25ucyA9 PSAzMykpCj4gPiA+ICsJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+ID4gKwl9Cj4gPiA+ ICsKPiA+ID4gKwlpZiAoIW51bV9jb25ucykKPiA+ID4gKwkJcmV0dXJuIE5VTEw7Cj4gPiA+ICsK PiA+ID4gKwlpZiAobnVtX21vZGVzKSB7Cj4gPiA+ICsJCXRpbGVfbW9kZXMgPSBrY2FsbG9jKG51 bV9tb2Rlcywgc2l6ZW9mKCp0aWxlX21vZGVzKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJCWlmICgh dGlsZV9tb2RlcykKPiA+ID4gKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gPiArCX0K PiA+ID4gKwo+ID4gPiArCWRpc3BsYXkgPSBkcm1fY2xpZW50X2Rpc3BsYXlfYWxsb2MoY2xpZW50 LCBudW1fY29ubnMpOwo+ID4gPiArCWlmICghZGlzcGxheSkgewo+ID4gPiArCQlrZnJlZSh0aWxl X21vZGVzKTsKPiA+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPiA+ICsJfQo+ID4g PiArCj4gPiA+ICsJaWYgKG51bV9tb2RlcykKPiA+ID4gKwkJZHJtX2NsaWVudF9kaXNwbGF5X2Zp bGxfdGlsZV9tb2RlcyhkaXNwbGF5LCB0aWxlX21vZGVzKTsKPiA+ID4gKwo+ID4gPiArCXJldHVy biBkaXNwbGF5Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgc3RydWN0IGRybV9jbGll bnRfZGlzcGxheSAqCj4gPiA+ICtkcm1fY2xpZW50X2Nvbm5lY3Rvcl9waWNrX25vdF90aWxlKHN0 cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LAo+ID4gPiArCQkJCSAgIHN0cnVjdCBkcm1fY2xp ZW50X2Nvbm5lY3RvciAqKmNvbm5lY3RvcnMsCj4gPiA+ICsJCQkJICAgdW5zaWduZWQgaW50IG51 bV9jb25uZWN0b3JzKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkg KmRpc3BsYXk7Cj4gPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGkg PSAwOyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gPiArCQlpZiAoIWNvbm5lY3RvcnNb aV0gfHwgY29ubmVjdG9yc1tpXS0+aGFzX3RpbGUpCj4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4g KwkJYnJlYWs7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJaWYgKGkgPT0gbnVtX2Nvbm5lY3Rv cnMpCj4gPiA+ICsJCXJldHVybiBOVUxMOwo+ID4gPiArCj4gPiA+ICsJZGlzcGxheSA9IGRybV9j bGllbnRfZGlzcGxheV9hbGxvYyhjbGllbnQsIDEpOwo+ID4gPiArCWlmICghZGlzcGxheSkKPiA+ ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPiA+ICsKPiA+ID4gKwlkaXNwbGF5LT5j b25uZWN0b3JzWzBdID0gY29ubmVjdG9yc1tpXTsKPiA+ID4gKwljb25uZWN0b3JzW2ldID0gTlVM TDsKPiA+ID4gKwlkaXNwbGF5LT5tb2RlcyA9IGRpc3BsYXktPmNvbm5lY3RvcnNbMF0tPm1vZGVz Owo+ID4gPiArCWRpc3BsYXktPm51bV9tb2RlcyA9IGRpc3BsYXktPmNvbm5lY3RvcnNbMF0tPm51 bV9tb2RlczsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBkaXNwbGF5Owo+ID4gPiArfQo+ID4gPiAr Cj4gPiA+ICsvKiBHZXQgY29ubmVjdG9ycyBhbmQgYnVuZGxlIHRoZW0gdXAgaW50byBkaXNwbGF5 cyAqLwo+ID4gPiArc3RhdGljIGludCBkcm1fY2xpZW50X2dldF9kaXNwbGF5cyhzdHJ1Y3QgZHJt X2NsaWVudF9kZXYgKmNsaWVudCwKPiA+ID4gKwkJCQkgICBzdHJ1Y3QgZHJtX2NsaWVudF9kaXNw bGF5ICoqKmRpc3BsYXlzKQo+ID4gPiArewo+ID4gPiArCWludCByZXQsIG51bV9jb25uZWN0b3Jz LCBudW1fZGlzcGxheXMgPSAwOwo+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2Nvbm5lY3RvciAq KmNvbm5lY3RvcnM7Cj4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheTsK PiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ID4gKwo+ID4gPiArCXJldCA9IGRybV9jbGllbnRf Z2V0X2ZpbGUoY2xpZW50KTsKPiA+ID4gKwlpZiAocmV0KQo+ID4gPiArCQlyZXR1cm4gcmV0Owo+ ID4gPiArCj4gPiA+ICsJbnVtX2Nvbm5lY3RvcnMgPSBkcm1fY2xpZW50X2dldF9jb25uZWN0b3Jz KGNsaWVudCwgJmNvbm5lY3RvcnMpOwo+ID4gPiArCWlmIChudW1fY29ubmVjdG9ycyA8PSAwKSB7 Cj4gPiA+ICsJCXJldCA9IG51bV9jb25uZWN0b3JzOwo+ID4gPiArCQlnb3RvIGVycl9wdXRfZmls ZTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwkqZGlzcGxheXMgPSBrY2FsbG9jKG51bV9jb25u ZWN0b3JzLCBzaXplb2YoKmRpc3BsYXlzKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJaWYgKCEoKmRp c3BsYXlzKSkgewo+ID4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4gPiArCQlnb3RvIGVycl9mcmVl Owo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWRpc3BsYXkgPSBkcm1fY2xpZW50X2Nvbm5lY3Rv cl9waWNrX2Nsb25lZChjbGllbnQsIGNvbm5lY3RvcnMsCj4gPiA+ICsJCQkJCQkgICBudW1fY29u bmVjdG9ycyk7Cj4gPiA+ICsJaWYgKElTX0VSUihkaXNwbGF5KSkgewo+ID4gPiArCQlyZXQgPSBQ VFJfRVJSKGRpc3BsYXkpOwo+ID4gPiArCQlnb3RvIGVycl9mcmVlOwo+ID4gPiArCX0KPiA+ID4g KwlpZiAoZGlzcGxheSkKPiA+ID4gKwkJKCpkaXNwbGF5cylbbnVtX2Rpc3BsYXlzKytdID0gZGlz cGxheTsKPiA+ID4gKwo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fY29ubmVjdG9yczsgaSsr KSB7Cj4gPiA+ICsJCWRpc3BsYXkgPSBkcm1fY2xpZW50X2Nvbm5lY3Rvcl9waWNrX3RpbGUoY2xp ZW50LCBjb25uZWN0b3JzLAo+ID4gPiArCQkJCQkJCSBudW1fY29ubmVjdG9ycyk7Cj4gPiA+ICsJ CWlmIChJU19FUlIoZGlzcGxheSkpIHsKPiA+ID4gKwkJCXJldCA9IFBUUl9FUlIoZGlzcGxheSk7 Cj4gPiA+ICsJCQlnb3RvIGVycl9mcmVlOwo+ID4gPiArCQl9Cj4gPiA+ICsJCWlmICghZGlzcGxh eSkKPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiArCQkoKmRpc3BsYXlzKVtudW1fZGlzcGxheXMrK10g PSBkaXNwbGF5Owo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1f Y29ubmVjdG9yczsgaSsrKSB7Cj4gPiA+ICsJCWRpc3BsYXkgPSBkcm1fY2xpZW50X2Nvbm5lY3Rv cl9waWNrX25vdF90aWxlKGNsaWVudCwgY29ubmVjdG9ycywKPiA+ID4gKwkJCQkJCQkgICAgIG51 bV9jb25uZWN0b3JzKTsKPiA+ID4gKwkJaWYgKElTX0VSUihkaXNwbGF5KSkgewo+ID4gPiArCQkJ cmV0ID0gUFRSX0VSUihkaXNwbGF5KTsKPiA+ID4gKwkJCWdvdG8gZXJyX2ZyZWU7Cj4gPiA+ICsJ CX0KPiA+ID4gKwkJaWYgKCFkaXNwbGF5KQo+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ICsJCSgqZGlz cGxheXMpW251bV9kaXNwbGF5cysrXSA9IGRpc3BsYXk7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ ICsJZm9yIChpID0gMDsgaSA8IG51bV9jb25uZWN0b3JzOyBpKyspIHsKPiA+ID4gKwkJaWYgKGNv bm5lY3RvcnNbaV0pIHsKPiA+ID4gKwkJCURSTV9JTkZPKCJDb25uZWN0b3IgJXUgZmVsbCB0aHJv dWdoIHRoZSBjcmFja3MuXG4iLAo+ID4gPiArCQkJCSBjb25uZWN0b3JzW2ldLT5jb25uX2lkKTsK PiA+ID4gKwkJCWRybV9jbGllbnRfY29ubmVjdG9yX2ZyZWUoY29ubmVjdG9yc1tpXSk7Cj4gPiA+ ICsJCX0KPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlkcm1fY2xpZW50X3B1dF9maWxlKGNsaWVu dCk7Cj4gPiA+ICsJa2ZyZWUoY29ubmVjdG9ycyk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gbnVt X2Rpc3BsYXlzOwo+ID4gPiArCj4gPiA+ICtlcnJfZnJlZToKPiA+ID4gKwlmb3IgKGkgPSAwOyBp IDwgbnVtX2Rpc3BsYXlzOyBpKyspCj4gPiA+ICsJCWRybV9jbGllbnRfZGlzcGxheV9mcmVlKCgq ZGlzcGxheXMpW2ldKTsKPiA+ID4gKwlrZnJlZSgqZGlzcGxheXMpOwo+ID4gPiArCSpkaXNwbGF5 cyA9IE5VTEw7Cj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jb25uZWN0b3JzOyBpKyspCj4g PiA+ICsJCWRybV9jbGllbnRfY29ubmVjdG9yX2ZyZWUoY29ubmVjdG9yc1tpXSk7Cj4gPiA+ICsJ a2ZyZWUoY29ubmVjdG9ycyk7Cj4gPiA+ICtlcnJfcHV0X2ZpbGU6Cj4gPiA+ICsJZHJtX2NsaWVu dF9wdXRfZmlsZShjbGllbnQpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4gK30K PiA+ID4gKwo+ID4gPiArc3RhdGljIGJvb2wKPiA+ID4gK2RybV9jbGllbnRfZGlzcGxheV9pc19l bmFibGVkKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXksIGJvb2wgc3RyaWN0KQo+ ID4gPiArewo+ID4gPiArCXVuc2lnbmVkIGludCBpOwo+ID4gPiArCj4gPiA+ICsJaWYgKCFkaXNw bGF5LT5udW1fbW9kZXMpCj4gPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ID4gKwo+ID4gPiArCWZv ciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5udW1fY29ubmVjdG9yczsgaSsrKQo+ID4gPiArCQlpZiAo IWRybV9jbGllbnRfY29ubmVjdG9yX2lzX2VuYWJsZWQoZGlzcGxheS0+Y29ubmVjdG9yc1tpXSwg c3RyaWN0KSkKPiA+ID4gKwkJCXJldHVybiBmYWxzZTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiB0 cnVlOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGRybV9jbGllbnRfZGlz cGxheV9nZXRfZmlyc3RfZW5hYmxlZCAtIEdldCBmaXJzdCBlbmFibGVkIGRpc3BsYXkKPiA+ID4g KyAqIEBjbGllbnQ6IERSTSBjbGllbnQKPiA+ID4gKyAqIEBzdHJpY3Q6IElmIHRydWUgdGhlIGNv bm5lY3RvcihzKSBoYXZlIHRvIGJlIGNvbm5lY3RlZCwgaWYgZmFsc2UgdGhleSBjYW4KPiA+ID4g KyAqICAgICAgICAgIGFsc28gaGF2ZSB1bmtub3duIHN0YXR1cy4KPiA+ID4gKyAqCj4gPiA+ICsg KiBUaGlzIGZ1bmN0aW9uIGdldHMgYWxsIGNvbm5lY3RvcnMgYW5kIGJ1bmRsZXMgdGhlbSBpbnRv IGRpc3BsYXlzCj4gPiA+ICsgKiAodGlsZWQvY2xvbmVkKS4gSXQgdGhlbiBwaWNrcyB0aGUgZmly c3Qgb25lIHdpdGggY29ubmVjdG9ycyB0aGF0IGlzIGVuYWJsZWQKPiA+ID4gKyAqIGFjY29yZGlu ZyB0byBAc3RyaWN0Lgo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ICsgKiBQb2lu dGVyIHRvIGEgY2xpZW50IGRpc3BsYXkgaWYgc3VjaCBhIGRpc3BsYXkgd2FzIGZvdW5kLCBOVUxM IGlmIG5vdCBmb3VuZAo+ID4gPiArICogb3IgYW4gZXJyb3IgcG9pbnRlciBvbiBmYWlsdXJlLgo+ ID4gPiArICovCj4gPiA+ICtzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICoKPiA+ID4gK2RybV9j bGllbnRfZGlzcGxheV9nZXRfZmlyc3RfZW5hYmxlZChzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNs aWVudCwgYm9vbCBzdHJpY3QpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfZGlz cGxheSAqKmRpc3BsYXlzLCAqZGlzcGxheSA9IE5VTEw7Cj4gPiA+ICsJaW50IG51bV9kaXNwbGF5 czsKPiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ID4gKwo+ID4gPiArCW51bV9kaXNwbGF5cyA9 IGRybV9jbGllbnRfZ2V0X2Rpc3BsYXlzKGNsaWVudCwgJmRpc3BsYXlzKTsKPiA+ID4gKwlpZiAo bnVtX2Rpc3BsYXlzIDwgMCkKPiA+ID4gKwkJcmV0dXJuIEVSUl9QVFIobnVtX2Rpc3BsYXlzKTsK PiA+ID4gKwlpZiAoIW51bV9kaXNwbGF5cykKPiA+ID4gKwkJcmV0dXJuIE5VTEw7Cj4gPiA+ICsK PiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Rpc3BsYXlzOyBpKyspIHsKPiA+ID4gKwkJaWYg KCFkaXNwbGF5ICYmCj4gPiA+ICsJCSAgICBkcm1fY2xpZW50X2Rpc3BsYXlfaXNfZW5hYmxlZChk aXNwbGF5c1tpXSwgc3RyaWN0KSkgewo+ID4gPiArCQkJZGlzcGxheSA9IGRpc3BsYXlzW2ldOwo+ ID4gPiArCQkJY29udGludWU7Cj4gPiA+ICsJCX0KPiA+ID4gKwkJZHJtX2NsaWVudF9kaXNwbGF5 X2ZyZWUoZGlzcGxheXNbaV0pOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWtmcmVlKGRpc3Bs YXlzKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBkaXNwbGF5Owo+ID4gPiArfQo+ID4gPiArRVhQ T1JUX1NZTUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfZ2V0X2ZpcnN0X2VuYWJsZWQpOwo+ID4gPiAr Cj4gPiA+ICt1bnNpZ25lZCBpbnQKPiA+ID4gK2RybV9jbGllbnRfZGlzcGxheV9wcmVmZXJyZWRf ZGVwdGgoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSkKPiA+ID4gK3sKPiA+ID4g KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsKPiA+ID4gKwl1bnNpZ25lZCBpbnQgcmV0Owo+ ID4gPiArCj4gPiA+ICsJY29ubiA9IGRybV9jb25uZWN0b3JfbG9va3VwKGRpc3BsYXktPmNsaWVu dC0+ZGV2LCBOVUxMLAo+ID4gPiArCQkJCSAgICBkaXNwbGF5LT5jb25uZWN0b3JzWzBdLT5jb25u X2lkKTsKPiA+ID4gKwlpZiAoIWNvbm4pCj4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiArCj4gPiA+ ICsJaWYgKGNvbm4tPmNtZGxpbmVfbW9kZS5icHBfc3BlY2lmaWVkKQo+ID4gPiArCQlyZXQgPSBj b25uLT5jbWRsaW5lX21vZGUuYnBwOwo+ID4gPiArCWVsc2UKPiA+ID4gKwkJcmV0ID0gZGlzcGxh eS0+Y2xpZW50LT5kZXYtPm1vZGVfY29uZmlnLnByZWZlcnJlZF9kZXB0aDsKPiA+ID4gKwo+ID4g PiArCWRybV9jb25uZWN0b3JfcHV0KGNvbm4pOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIHJldDsK PiA+ID4gK30KPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9kaXNwbGF5X3ByZWZlcnJl ZF9kZXB0aCk7Cj4gPiA+ICsKPiA+ID4gK2ludCBkcm1fY2xpZW50X2Rpc3BsYXlfZHBtcyhzdHJ1 Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5LCBpbnQgbW9kZSkKPiA+ID4gK3sKPiA+ID4g KwlzdHJ1Y3QgZHJtX21vZGVfb2JqX3NldF9wcm9wZXJ0eSBwcm9wOwo+ID4gPiArCj4gPiA+ICsJ cHJvcC52YWx1ZSA9IG1vZGU7Cj4gPiA+ICsJcHJvcC5wcm9wX2lkID0gZGlzcGxheS0+Y2xpZW50 LT5kZXYtPm1vZGVfY29uZmlnLmRwbXNfcHJvcGVydHktPmJhc2UuaWQ7Cj4gPiA+ICsJcHJvcC5v YmpfaWQgPSBkaXNwbGF5LT5jb25uZWN0b3JzWzBdLT5jb25uX2lkOwo+ID4gPiArCXByb3Aub2Jq X3R5cGUgPSBEUk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJu IGRybV9tb2RlX29ial9zZXRfcHJvcGVydHkoZGlzcGxheS0+Y2xpZW50LT5kZXYsICZwcm9wLAo+ ID4gPiArCQkJCQkgZGlzcGxheS0+Y2xpZW50LT5maWxlKTsKPiA+ID4gK30KPiA+ID4gK0VYUE9S VF9TWU1CT0woZHJtX2NsaWVudF9kaXNwbGF5X2RwbXMpOwo+ID4gPiArCj4gPiA+ICtpbnQgZHJt X2NsaWVudF9kaXNwbGF5X3dhaXRfdmJsYW5rKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRp c3BsYXkpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ID4gPiArCXVu aW9uIGRybV93YWl0X3ZibGFuayB2YmxhbmtfcmVxID0gewo+ID4gPiArCQkucmVxdWVzdCA9IHsK PiA+ID4gKwkJCS50eXBlID0gX0RSTV9WQkxBTktfUkVMQVRJVkUsCj4gPiA+ICsJCQkuc2VxdWVu Y2UgPSAxLAo+ID4gPiArCQl9LAo+ID4gPiArCX07Cj4gPiA+ICsKPiA+ID4gKwljcnRjID0gZHJt X2NydGNfZmluZChkaXNwbGF5LT5jbGllbnQtPmRldiwgZGlzcGxheS0+Y2xpZW50LT5maWxlLAo+ ID4gPiArCQkJICAgICBkaXNwbGF5LT5jb25uZWN0b3JzWzBdLT5jcnRjX2lkKTsKPiA+ID4gKwlp ZiAoIWNydGMpCj4gPiA+ICsJCXJldHVybiAtRU5PRU5UOwo+ID4gPiArCj4gPiA+ICsJdmJsYW5r X3JlcS5yZXF1ZXN0LnR5cGUgfD0gZHJtX2NydGNfaW5kZXgoY3J0YykgPDwgX0RSTV9WQkxBTktf SElHSF9DUlRDX1NISUZUOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIGRybV93YWl0X3ZibGFuayhk aXNwbGF5LT5jbGllbnQtPmRldiwgJnZibGFua19yZXEsCj4gPiA+ICsJCQkgICAgICAgZGlzcGxh eS0+Y2xpZW50LT5maWxlKTsKPiA+ID4gK30KPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2NsaWVu dF9kaXNwbGF5X3dhaXRfdmJsYW5rKTsKPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBkcm1fY2xp ZW50X2dldF9jcnRjX2luZGV4KHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LCB1MzIgaWQp Cj4gPiA+ICt7Cj4gPiA+ICsJaW50IGk7Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwg Y2xpZW50LT5udW1fY3J0Y3M7IGkrKykKPiA+ID4gKwkJaWYgKGNsaWVudC0+Y3J0Y3NbaV0gPT0g aWQpCj4gPiA+ICsJCQlyZXR1cm4gaTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiAtRU5PRU5UOwo+ ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IGRybV9jbGllbnRfZGlzcGxheV9maW5k X2NydGNzKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXkpCj4gPiA+ICt7Cj4gPiA+ ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQgPSBkaXNwbGF5LT5jbGllbnQ7Cj4gPiA+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNsaWVudC0+ZGV2Owo+ID4gPiArCXN0cnVjdCBk cm1fZmlsZSAqZmlsZSA9IGNsaWVudC0+ZmlsZTsKPiA+ID4gKwl1MzIgZW5jb2Rlcl9pZHNbRFJN X0NPTk5FQ1RPUl9NQVhfRU5DT0RFUl07Cj4gPiA+ICsJdW5zaWduZWQgaW50IGksIGosIGF2YWls YWJsZV9jcnRjcyA9IH4wOwo+ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9nZXRfY29ubmVjdG9yIGNv bm5fcmVxOwo+ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9nZXRfZW5jb2RlciBlbmNfcmVxOwo+ID4g PiArCWludCByZXQ7Cj4gPiA+ICsKPiA+ID4gKwkvKiBBbHJlYWR5IGRvbmU/ICovCj4gPiA+ICsJ aWYgKGRpc3BsYXktPmNvbm5lY3RvcnNbMF0tPmNydGNfaWQpCj4gPiA+ICsJCXJldHVybiAwOwo+ ID4gPiArCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm51bV9jb25uZWN0b3JzOyBp KyspIHsKPiA+ID4gKwkJdTMyIGFjdGl2ZV9jcnRjcyA9IDAsIGNydGNzX2Zvcl9jb25uZWN0b3Ig PSAwOwo+ID4gPiArCQlpbnQgY3J0Y19pZHg7Cj4gPiA+ICsKPiA+ID4gKwkJbWVtc2V0KCZjb25u X3JlcSwgMCwgc2l6ZW9mKGNvbm5fcmVxKSk7Cj4gPiA+ICsJCWNvbm5fcmVxLmNvbm5lY3Rvcl9p ZCA9IGRpc3BsYXktPmNvbm5lY3RvcnNbaV0tPmNvbm5faWQ7Cj4gPiA+ICsJCWNvbm5fcmVxLmVu Y29kZXJzX3B0ciA9ICh1bnNpZ25lZCBsb25nKShlbmNvZGVyX2lkcyk7Cj4gPiA+ICsJCWNvbm5f cmVxLmNvdW50X2VuY29kZXJzID0gRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUjsKPiA+ID4gKwkJ cmV0ID0gZHJtX21vZGVfZ2V0Y29ubmVjdG9yKGRldiwgJmNvbm5fcmVxLCBmaWxlLCBmYWxzZSk7 Cj4gPiA+ICsJCWlmIChyZXQpCj4gPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gPiArCj4gPiA+ICsJ CWlmIChjb25uX3JlcS5lbmNvZGVyX2lkKSB7Cj4gPiA+ICsJCQltZW1zZXQoJmVuY19yZXEsIDAs IHNpemVvZihlbmNfcmVxKSk7Cj4gPiA+ICsJCQllbmNfcmVxLmVuY29kZXJfaWQgPSBjb25uX3Jl cS5lbmNvZGVyX2lkOwo+ID4gPiArCQkJcmV0ID0gZHJtX21vZGVfZ2V0ZW5jb2RlcihkZXYsICZl bmNfcmVxLCBmaWxlKTsKPiA+ID4gKwkJCWlmIChyZXQpCj4gPiA+ICsJCQkJcmV0dXJuIHJldDsK PiA+ID4gKwkJCWNydGNzX2Zvcl9jb25uZWN0b3IgfD0gZW5jX3JlcS5wb3NzaWJsZV9jcnRjczsK PiA+ID4gKwkJCWlmIChjcnRjc19mb3JfY29ubmVjdG9yICYgYXZhaWxhYmxlX2NydGNzKQo+ID4g PiArCQkJCWdvdG8gZm91bmQ7Cj4gPiA+ICsJCX0KPiA+ID4gKwo+ID4gPiArCQlmb3IgKGogPSAw OyBqIDwgY29ubl9yZXEuY291bnRfZW5jb2RlcnM7IGorKykgewo+ID4gPiArCQkJbWVtc2V0KCZl bmNfcmVxLCAwLCBzaXplb2YoZW5jX3JlcSkpOwo+ID4gPiArCQkJZW5jX3JlcS5lbmNvZGVyX2lk ID0gZW5jb2Rlcl9pZHNbal07Cj4gPiA+ICsJCQlyZXQgPSBkcm1fbW9kZV9nZXRlbmNvZGVyKGRl diwgJmVuY19yZXEsIGZpbGUpOwo+ID4gPiArCQkJaWYgKHJldCkKPiA+ID4gKwkJCQlyZXR1cm4g cmV0Owo+ID4gPiArCj4gPiA+ICsJCQljcnRjc19mb3JfY29ubmVjdG9yIHw9IGVuY19yZXEucG9z c2libGVfY3J0Y3M7Cj4gPiA+ICsKPiA+ID4gKwkJCWlmIChlbmNfcmVxLmNydGNfaWQpIHsKPiA+ ID4gKwkJCQljcnRjX2lkeCA9IGRybV9jbGllbnRfZ2V0X2NydGNfaW5kZXgoY2xpZW50LCBlbmNf cmVxLmNydGNfaWQpOwo+ID4gPiArCQkJCWlmIChjcnRjX2lkeCA+PSAwKQo+ID4gPiArCQkJCQlh Y3RpdmVfY3J0Y3MgfD0gMSA8PCBjcnRjX2lkeDsKPiA+ID4gKwkJCX0KPiA+ID4gKwkJfQo+ID4g PiArCj4gPiA+ICtmb3VuZDoKPiA+ID4gKwkJY3J0Y3NfZm9yX2Nvbm5lY3RvciAmPSBhdmFpbGFi bGVfY3J0Y3M7Cj4gPiA+ICsJCWFjdGl2ZV9jcnRjcyAmPSBhdmFpbGFibGVfY3J0Y3M7Cj4gPiA+ ICsKPiA+ID4gKwkJaWYgKCFjcnRjc19mb3JfY29ubmVjdG9yKQo+ID4gPiArCQkJcmV0dXJuIC1F Tk9FTlQ7Cj4gPiA+ICsKPiA+ID4gKwkJaWYgKGFjdGl2ZV9jcnRjcykKPiA+ID4gKwkJCWNydGNf aWR4ID0gZmZzKGFjdGl2ZV9jcnRjcykgLSAxOwo+ID4gPiArCQllbHNlCj4gPiA+ICsJCQljcnRj X2lkeCA9IGZmcyhjcnRjc19mb3JfY29ubmVjdG9yKSAtIDE7Cj4gPiA+ICsKPiA+ID4gKwkJaWYg KGNydGNfaWR4ID49IGNsaWVudC0+bnVtX2NydGNzKQo+ID4gPiArCQkJcmV0dXJuIC1FSU5WQUw7 Cj4gPiA+ICsKPiA+ID4gKwkJZGlzcGxheS0+Y29ubmVjdG9yc1tpXS0+Y3J0Y19pZCA9IGNsaWVu dC0+Y3J0Y3NbY3J0Y19pZHhdOwo+ID4gPiArCQlhdmFpbGFibGVfY3J0Y3MgJj0gfkJJVChjcnRj X2lkeCk7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ ICsKPiA+ID4gKy8qKgo+ID4gPiArICogZHJtX2NsaWVudF9kaXNwbGF5X2NvbW1pdF9tb2RlIC0g Q29tbWl0IGEgbW9kZSB0byB0aGUgY3J0YyhzKQo+ID4gPiArICogQGRpc3BsYXk6IENsaWVudCBk aXNwbGF5Cj4gPiA+ICsgKiBAZmJfaWQ6IEZyYW1lYnVmZmVyIGlkCj4gPiA+ICsgKiBAbW9kZTog VmlkZW8gbW9kZQo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ICsgKiBaZXJvIG9u IHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ID4gKyAqLwo+ID4g PiAraW50IGRybV9jbGllbnRfZGlzcGxheV9jb21taXRfbW9kZShzdHJ1Y3QgZHJtX2NsaWVudF9k aXNwbGF5ICpkaXNwbGF5LAo+ID4gPiArCQkJCSAgIHUzMiBmYl9pZCwgc3RydWN0IGRybV9tb2Rl X21vZGVpbmZvICptb2RlKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAq Y2xpZW50ID0gZGlzcGxheS0+Y2xpZW50Owo+ID4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjbGllbnQtPmRldjsKPiA+ID4gKwl1bnNpZ25lZCBpbnQgbnVtX2NydGNzID0gY2xpZW50LT5u dW1fY3J0Y3M7Cj4gPiA+ICsJc3RydWN0IGRybV9maWxlICpmaWxlID0gY2xpZW50LT5maWxlOwo+ ID4gPiArCXVuc2lnbmVkIGludCAqeG9mZnNldHMgPSBOVUxMLCAqeW9mZnNldHMgPSBOVUxMOwo+ ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9jcnRjICpjcnRjX3JlcXMsICpyZXE7Cj4gPiA+ICsJdTMy IGNsb25lZF9jb25uX2lkc1syXTsKPiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ID4gKwlpbnQg aWR4LCByZXQ7Cj4gPiA+ICsKPiA+ID4gKwlyZXQgPSBkcm1fY2xpZW50X2Rpc3BsYXlfZmluZF9j cnRjcyhkaXNwbGF5KTsKPiA+ID4gKwlpZiAocmV0KQo+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4g PiArCj4gPiA+ICsJY3J0Y19yZXFzID0ga2NhbGxvYyhudW1fY3J0Y3MsIHNpemVvZigqY3J0Y19y ZXFzKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJaWYgKCFjcnRjX3JlcXMpCj4gPiA+ICsJCXJldHVy biAtRU5PTUVNOwo+ID4gPiArCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jcnRjczsgaSsr KQo+ID4gPiArCQljcnRjX3JlcXNbaV0uY3J0Y19pZCA9IGNsaWVudC0+Y3J0Y3NbaV07Cj4gPiA+ ICsKPiA+ID4gKwlpZiAoZHJtX2NsaWVudF9kaXNwbGF5X2lzX3RpbGVkKGRpc3BsYXkpKSB7Cj4g PiA+ICsJCS8qIFRPRE8gY2FsY3VsYXRlIHRpbGUgY3J0YyBvZmZzZXRzICovCj4gPiA+ICsJfQo+ ID4gPiArCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm51bV9jb25uZWN0b3JzOyBp KyspIHsKPiA+ID4gKwkJaWR4ID0gZHJtX2NsaWVudF9nZXRfY3J0Y19pbmRleChjbGllbnQsIGRp c3BsYXktPmNvbm5lY3RvcnNbaV0tPmNydGNfaWQpOwo+ID4gPiArCQlpZiAoaWR4IDwgMCkKPiA+ ID4gKwkJCXJldHVybiAtRU5PRU5UOwo+ID4gPiArCj4gPiA+ICsJCXJlcSA9ICZjcnRjX3JlcXNb aWR4XTsKPiA+ID4gKwo+ID4gPiArCQlyZXEtPmZiX2lkID0gZmJfaWQ7Cj4gPiA+ICsJCWlmICh4 b2Zmc2V0cykgewo+ID4gPiArCQkJcmVxLT54ID0geG9mZnNldHNbaV07Cj4gPiA+ICsJCQlyZXEt PnkgPSB5b2Zmc2V0c1tpXTsKPiA+ID4gKwkJfQo+ID4gPiArCQlyZXEtPm1vZGVfdmFsaWQgPSAx Owo+ID4gPiArCQlyZXEtPm1vZGUgPSAqbW9kZTsKPiA+ID4gKwo+ID4gPiArCQlpZiAoZGlzcGxh eS0+Y2xvbmVkKSB7Cj4gPiA+ICsJCQljbG9uZWRfY29ubl9pZHNbMF0gPSBkaXNwbGF5LT5jb25u ZWN0b3JzWzBdLT5jb25uX2lkOwo+ID4gPiArCQkJY2xvbmVkX2Nvbm5faWRzWzFdID0gZGlzcGxh eS0+Y29ubmVjdG9yc1sxXS0+Y29ubl9pZDsKPiA+ID4gKwkJCXJlcS0+c2V0X2Nvbm5lY3RvcnNf cHRyID0gKHVuc2lnbmVkIGxvbmcpKGNsb25lZF9jb25uX2lkcyk7Cj4gPiA+ICsJCQlyZXEtPmNv dW50X2Nvbm5lY3RvcnMgPSAyOwo+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ICsJCX0KPiA+ID4gKwo+ ID4gPiArCQlyZXEtPnNldF9jb25uZWN0b3JzX3B0ciA9ICh1bnNpZ25lZCBsb25nKSgmZGlzcGxh eS0+Y29ubmVjdG9yc1tpXS0+Y29ubl9pZCk7Cj4gPiA+ICsJCXJlcS0+Y291bnRfY29ubmVjdG9y cyA9IDE7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jcnRj czsgaSsrKSB7Cj4gPiA+ICsJCXJldCA9IGRybV9tb2RlX3NldGNydGMoZGV2LCAmY3J0Y19yZXFz W2ldLCBmaWxlLCBmYWxzZSk7Cj4gPiA+ICsJCWlmIChyZXQpCj4gPiA+ICsJCQlicmVhazsKPiA+ ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlrZnJlZSh4b2Zmc2V0cyk7Cj4gPiA+ICsJa2ZyZWUoeW9m ZnNldHMpOwo+ID4gPiArCWtmcmVlKGNydGNfcmVxcyk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4g cmV0Owo+ID4gPiArfQo+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfY29t bWl0X21vZGUpOwo+ID4gPiArCj4gPiA+ICt1bnNpZ25lZCBpbnQgZHJtX2NsaWVudF9kaXNwbGF5 X2N1cnJlbnRfZmIoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSkKPiA+ID4gK3sK PiA+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCA9IGRpc3BsYXktPmNsaWVudDsK PiA+ID4gKwlpbnQgcmV0Owo+ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9jcnRjIGNydGNfcmVxID0g ewo+ID4gPiArCQkuY3J0Y19pZCA9IGRpc3BsYXktPmNvbm5lY3RvcnNbMF0tPmNydGNfaWQsCj4g PiA+ICsJfTsKPiA+ID4gKwo+ID4gPiArCXJldCA9IGRybV9tb2RlX2dldGNydGMoY2xpZW50LT5k ZXYsICZjcnRjX3JlcSwgY2xpZW50LT5maWxlKTsKPiA+ID4gKwlpZiAocmV0KQo+ID4gPiArCQly ZXR1cm4gMDsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBjcnRjX3JlcS5mYl9pZDsKPiA+ID4gK30K PiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9kaXNwbGF5X2N1cnJlbnRfZmIpOwo+ID4g PiArCj4gPiA+ICtpbnQgZHJtX2NsaWVudF9kaXNwbGF5X2ZsdXNoKHN0cnVjdCBkcm1fY2xpZW50 X2Rpc3BsYXkgKmRpc3BsYXksIHUzMiBmYl9pZCwKPiA+ID4gKwkJCSAgICAgc3RydWN0IGRybV9j bGlwX3JlY3QgKmNsaXBzLCB1bnNpZ25lZCBpbnQgbnVtX2NsaXBzKQo+ID4gPiArewo+ID4gPiAr CXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50ID0gZGlzcGxheS0+Y2xpZW50Owo+ID4gPiAr CXN0cnVjdCBkcm1fbW9kZV9mYl9kaXJ0eV9jbWQgZGlydHlfcmVxID0gewo+ID4gPiArCQkuZmJf aWQgPSBmYl9pZCwKPiA+ID4gKwkJLmNsaXBzX3B0ciA9ICh1bnNpZ25lZCBsb25nKWNsaXBzLAo+ ID4gPiArCQkubnVtX2NsaXBzID0gbnVtX2NsaXBzLAo+ID4gPiArCX07Cj4gPiA+ICsJaW50IHJl dDsKPiA+ID4gKwo+ID4gPiArCWlmIChkaXNwbGF5LT5ub19mbHVzaGluZykKPiA+ID4gKwkJcmV0 dXJuIDA7Cj4gPiA+ICsKPiA+ID4gKwlyZXQgPSBkcm1fbW9kZV9kaXJ0eWZiKGNsaWVudC0+ZGV2 LCAmZGlydHlfcmVxLCBjbGllbnQtPmZpbGUsIGZhbHNlKTsKPiA+ID4gKwlpZiAocmV0ID09IC1F Tk9TWVMpIHsKPiA+ID4gKwkJcmV0ID0gMDsKPiA+ID4gKwkJZGlzcGxheS0+bm9fZmx1c2hpbmcg PSB0cnVlOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ICt9Cj4g PiA+ICtFWFBPUlRfU1lNQk9MKGRybV9jbGllbnRfZGlzcGxheV9mbHVzaCk7Cj4gPiA+ICsKPiA+ ID4gK2ludCBkcm1fY2xpZW50X2Rpc3BsYXlfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY2xpZW50X2Rp c3BsYXkgKmRpc3BsYXksIHUzMiBmYl9pZCwKPiA+ID4gKwkJCQkgYm9vbCBldmVudCkKPiA+ID4g K3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCA9IGRpc3BsYXktPmNsaWVu dDsKPiA+ID4gKwlzdHJ1Y3QgZHJtX21vZGVfY3J0Y19wYWdlX2ZsaXBfdGFyZ2V0IHBhZ2VfZmxp cF9yZXEgPSB7Cj4gPiA+ICsJCS5jcnRjX2lkID0gZGlzcGxheS0+Y29ubmVjdG9yc1swXS0+Y3J0 Y19pZCwKPiA+ID4gKwkJLmZiX2lkID0gZmJfaWQsCj4gPiA+ICsJfTsKPiA+ID4gKwo+ID4gPiAr CWlmIChldmVudCkKPiA+ID4gKwkJcGFnZV9mbGlwX3JlcS5mbGFncyA9IERSTV9NT0RFX1BBR0Vf RkxJUF9FVkVOVDsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBkcm1fbW9kZV9wYWdlX2ZsaXAoY2xp ZW50LT5kZXYsICZwYWdlX2ZsaXBfcmVxLCBjbGllbnQtPmZpbGUpOwo+ID4gPiArCS8qCj4gPiA+ ICsJICogVE9ETzoKPiA+ID4gKwkgKiBXaGVyZSBkbyB3ZSBmbHVzaCBvbiBwYWdlIGZsaXA/IFNo b3VsZCB0aGUgZHJpdmVyIGhhbmRsZSB0aGF0Pwo+ID4gPiArCSAqLwo+ID4gPiArfQo+ID4gPiAr RVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfcGFnZV9mbGlwKTsKPiA+ID4gKwo+ID4g PiArLyoqCj4gPiA+ICsgKiBkcm1fY2xpZW50X2ZyYW1lYnVmZmVyX2NyZWF0ZSAtIENyZWF0ZSBh IGNsaWVudCBmcmFtZWJ1ZmZlcgo+ID4gPiArICogQGNsaWVudDogRFJNIGNsaWVudAo+ID4gPiAr ICogQG1vZGU6IERpc3BsYXkgbW9kZSB0byBjcmVhdGUgYSBidWZmZXIgZm9yCj4gPiA+ICsgKiBA Zm9ybWF0OiBCdWZmZXIgZm9ybWF0Cj4gPiA+ICsgKgo+ID4gPiArICogVGhpcyBmdW5jdGlvbiBj cmVhdGVzIGEgJmRybV9jbGllbnRfYnVmZmVyIHdoaWNoIGNvbnNpc3RzIG9mIGEKPiA+ID4gKyAq ICZkcm1fZnJhbWVidWZmZXIgYmFja2VkIGJ5IGEgZHVtYiBidWZmZXIuIFRoZSBkdW1iIGJ1ZmZl ciBpcyAmZG1hX2J1Zgo+ID4gPiArICogZXhwb3J0ZWQgdG8gYXF1aXJlIGEgdmlydHVhbCBhZGRy ZXNzIHdoaWNoIGlzIHN0b3JlZCBpbgo+ID4gPiArICogJmRybV9jbGllbnRfYnVmZmVyLT52YWRk ci4KPiA+ID4gKyAqIENhbGwgZHJtX2NsaWVudF9mcmFtZWJ1ZmZlcl9kZWxldGUoKSB0byBmcmVl IHRoZSBidWZmZXIuCj4gPiA+ICsgKgo+ID4gPiArICogUmV0dXJuczoKPiA+ID4gKyAqIFBvaW50 ZXIgdG8gYSBjbGllbnQgYnVmZmVyIG9yIGFuIGVycm9yIHBvaW50ZXIgb24gZmFpbHVyZS4KPiA+ ID4gKyAqLwo+ID4gPiArc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICoKPiA+ID4gK2RybV9jbGll bnRfZnJhbWVidWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LAo+ID4g PiArCQkJICAgICAgc3RydWN0IGRybV9tb2RlX21vZGVpbmZvICptb2RlLCB1MzIgZm9ybWF0KQo+ ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyOwo+ID4gPiAr CWludCByZXQ7Cj4gPiA+ICsKPiA+ID4gKwlidWZmZXIgPSBkcm1fY2xpZW50X2J1ZmZlcl9jcmVh dGUoY2xpZW50LCBtb2RlLT5oZGlzcGxheSwKPiA+ID4gKwkJCQkJICBtb2RlLT52ZGlzcGxheSwg Zm9ybWF0KTsKPiA+ID4gKwlpZiAoSVNfRVJSKGJ1ZmZlcikpCj4gPiA+ICsJCXJldHVybiBidWZm ZXI7Cj4gPiA+ICsKPiA+ID4gKwlyZXQgPSBkcm1fY2xpZW50X2J1ZmZlcl9hZGRmYihidWZmZXIs IG1vZGUpOwo+ID4gPiArCWlmIChyZXQpIHsKPiA+ID4gKwkJZHJtX2NsaWVudF9idWZmZXJfZGVs ZXRlKGJ1ZmZlcik7Cj4gPiA+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiA+ICsJfQo+ID4g PiArCj4gPiA+ICsJcmV0dXJuIGJ1ZmZlcjsKPiA+ID4gK30KPiA+ID4gK0VYUE9SVF9TWU1CT0wo ZHJtX2NsaWVudF9mcmFtZWJ1ZmZlcl9jcmVhdGUpOwo+ID4gPiArCj4gPiA+ICt2b2lkIGRybV9j bGllbnRfZnJhbWVidWZmZXJfZGVsZXRlKHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVy KQo+ID4gPiArewo+ID4gPiArCWRybV9jbGllbnRfYnVmZmVyX3JtZmIoYnVmZmVyKTsKPiA+ID4g Kwlkcm1fY2xpZW50X2J1ZmZlcl9kZWxldGUoYnVmZmVyKTsKPiA+ID4gK30KPiA+ID4gK0VYUE9S VF9TWU1CT0woZHJtX2NsaWVudF9mcmFtZWJ1ZmZlcl9kZWxldGUpOwo+ID4gPiArCj4gPiA+ICtz dHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKgo+ID4gPiArZHJtX2NsaWVudF9idWZmZXJfY3JlYXRl KHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQsCj4g PiA+ICsJCQkgdTMyIGZvcm1hdCkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX21vZGVfY3Jl YXRlX2R1bWIgZHVtYl9hcmdzID0geyAwIH07Cj4gPiA+ICsJc3RydWN0IGRybV9wcmltZV9oYW5k bGUgcHJpbWVfYXJncyA9IHsgMCB9Owo+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAq YnVmZmVyOwo+ID4gPiArCXN0cnVjdCBkbWFfYnVmICpkbWFfYnVmOwo+ID4gPiArCXZvaWQgKnZh ZGRyOwo+ID4gPiArCWludCByZXQ7Cj4gPiA+ICsKPiA+ID4gKwlidWZmZXIgPSBremFsbG9jKHNp emVvZigqYnVmZmVyKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJaWYgKCFidWZmZXIpCj4gPiA+ICsJ CXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gPiArCj4gPiA+ICsJcmV0ID0gZHJtX2NsaWVu dF9nZXRfZmlsZShjbGllbnQpOwo+ID4gPiArCWlmIChyZXQpCj4gPiA+ICsJCWdvdG8gZXJyX2Zy ZWU7Cj4gPiA+ICsKPiA+ID4gKwlidWZmZXItPmNsaWVudCA9IGNsaWVudDsKPiA+ID4gKwlidWZm ZXItPndpZHRoID0gd2lkdGg7Cj4gPiA+ICsJYnVmZmVyLT5oZWlnaHQgPSBoZWlnaHQ7Cj4gPiA+ ICsJYnVmZmVyLT5mb3JtYXQgPSBmb3JtYXQ7Cj4gPiA+ICsKPiA+ID4gKwlkdW1iX2FyZ3Mud2lk dGggPSBidWZmZXItPndpZHRoOwo+ID4gPiArCWR1bWJfYXJncy5oZWlnaHQgPSBidWZmZXItPmhl aWdodDsKPiA+ID4gKwlkdW1iX2FyZ3MuYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZm9ybWF0 LCAwKSAqIDg7Cj4gPiA+ICsJcmV0ID0gZHJtX21vZGVfY3JlYXRlX2R1bWIoY2xpZW50LT5kZXYs ICZkdW1iX2FyZ3MsIGNsaWVudC0+ZmlsZSk7Cj4gPiA+ICsJaWYgKHJldCkKPiA+ID4gKwkJZ290 byBlcnJfcHV0X2ZpbGU7Cj4gPiA+ICsKPiA+ID4gKwlidWZmZXItPmhhbmRsZSA9IGR1bWJfYXJn cy5oYW5kbGU7Cj4gPiA+ICsJYnVmZmVyLT5waXRjaCA9IGR1bWJfYXJncy5waXRjaDsKPiA+ID4g KwlidWZmZXItPnNpemUgPSBkdW1iX2FyZ3Muc2l6ZTsKPiA+ID4gKwo+ID4gPiArCXByaW1lX2Fy Z3MuaGFuZGxlID0gZHVtYl9hcmdzLmhhbmRsZTsKPiA+ID4gKwlyZXQgPSBkcm1fcHJpbWVfaGFu ZGxlX3RvX2ZkKGNsaWVudC0+ZGV2LCAmcHJpbWVfYXJncywgY2xpZW50LT5maWxlKTsKPiA+ID4g KwlpZiAocmV0KQo+ID4gPiArCQlnb3RvIGVycl9kZWxldGU7Cj4gPiA+ICsKPiA+ID4gKwlkbWFf YnVmID0gZG1hX2J1Zl9nZXQocHJpbWVfYXJncy5mZCk7Cj4gPiA+ICsJaWYgKElTX0VSUihkbWFf YnVmKSkgewo+ID4gPiArCQlyZXQgPSBQVFJfRVJSKGRtYV9idWYpOwo+ID4gPiArCQlnb3RvIGVy cl9kZWxldGU7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJYnVmZmVyLT5kbWFfYnVmID0gZG1h X2J1ZjsKPiA+ID4gKwo+ID4gPiArCXZhZGRyID0gZG1hX2J1Zl92bWFwKGRtYV9idWYpOwo+ID4g PiArCWlmICghdmFkZHIpIHsKPiA+ID4gKwkJcmV0ID0gLUVOT01FTTsKPiA+ID4gKwkJZ290byBl cnJfZGVsZXRlOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWJ1ZmZlci0+dmFkZHIgPSB2YWRk cjsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBidWZmZXI7Cj4gPiA+ICsKPiA+ID4gK2Vycl9kZWxl dGU6Cj4gPiA+ICsJZHJtX2NsaWVudF9idWZmZXJfZGVsZXRlKGJ1ZmZlcik7Cj4gPiA+ICtlcnJf cHV0X2ZpbGU6Cj4gPiA+ICsJZHJtX2NsaWVudF9wdXRfZmlsZShjbGllbnQpOwo+ID4gPiArZXJy X2ZyZWU6Cj4gPiA+ICsJa2ZyZWUoYnVmZmVyKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBFUlJf UFRSKHJldCk7Cj4gPiA+ICt9Cj4gPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9jbGllbnRfYnVmZmVy X2NyZWF0ZSk7Cj4gPiA+ICsKPiA+ID4gK3ZvaWQgZHJtX2NsaWVudF9idWZmZXJfZGVsZXRlKHN0 cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyKQo+ID4gPiArewo+ID4gPiArCWlmICghYnVm ZmVyKQo+ID4gPiArCQlyZXR1cm47Cj4gPiA+ICsKPiA+ID4gKwlpZiAoYnVmZmVyLT52YWRkcikK PiA+ID4gKwkJZG1hX2J1Zl92dW5tYXAoYnVmZmVyLT5kbWFfYnVmLCBidWZmZXItPnZhZGRyKTsK PiA+ID4gKwo+ID4gPiArCWlmIChidWZmZXItPmRtYV9idWYpCj4gPiA+ICsJCWRtYV9idWZfcHV0 KGJ1ZmZlci0+ZG1hX2J1Zik7Cj4gPiA+ICsKPiA+ID4gKwlkcm1fbW9kZV9kZXN0cm95X2R1bWIo YnVmZmVyLT5jbGllbnQtPmRldiwgYnVmZmVyLT5oYW5kbGUsCj4gPiA+ICsJCQkgICAgICBidWZm ZXItPmNsaWVudC0+ZmlsZSk7Cj4gPiA+ICsJZHJtX2NsaWVudF9wdXRfZmlsZShidWZmZXItPmNs aWVudCk7Cj4gPiA+ICsJa2ZyZWUoYnVmZmVyKTsKPiA+ID4gK30KPiA+ID4gK0VYUE9SVF9TWU1C T0woZHJtX2NsaWVudF9idWZmZXJfZGVsZXRlKTsKPiA+ID4gKwo+ID4gPiAraW50IGRybV9jbGll bnRfYnVmZmVyX2FkZGZiKHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyLAo+ID4gPiAr CQkJICAgIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqbW9kZSkKPiA+ID4gK3sKPiA+ID4gKwlz dHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCA9IGJ1ZmZlci0+Y2xpZW50Owo+ID4gPiArCXN0 cnVjdCBkcm1fbW9kZV9mYl9jbWQyIGZiX3JlcSA9IHsgfTsKPiA+ID4gKwl1bnNpZ25lZCBpbnQg bnVtX2ZicywgKmZiX2lkczsKPiA+ID4gKwlpbnQgaSwgcmV0Owo+ID4gPiArCj4gPiA+ICsJaWYg KGJ1ZmZlci0+bnVtX2ZicykKPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsKPiA+ID4g KwlpZiAobW9kZS0+aGRpc3BsYXkgPiBidWZmZXItPndpZHRoIHx8IG1vZGUtPnZkaXNwbGF5ID4g YnVmZmVyLT5oZWlnaHQpCj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiArCj4gPiA+ICsJ bnVtX2ZicyA9IGJ1ZmZlci0+aGVpZ2h0IC8gbW9kZS0+dmRpc3BsYXk7Cj4gPiA+ICsJZmJfaWRz ID0ga2NhbGxvYyhudW1fZmJzLCBzaXplb2YoKmZiX2lkcyksIEdGUF9LRVJORUwpOwo+ID4gPiAr CWlmICghZmJfaWRzKQo+ID4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ID4gKwo+ID4gPiArCWZi X3JlcS53aWR0aCA9IG1vZGUtPmhkaXNwbGF5Owo+ID4gPiArCWZiX3JlcS5oZWlnaHQgPSBtb2Rl LT52ZGlzcGxheTsKPiA+ID4gKwlmYl9yZXEucGl4ZWxfZm9ybWF0ID0gYnVmZmVyLT5mb3JtYXQ7 Cj4gPiA+ICsJZmJfcmVxLmhhbmRsZXNbMF0gPSBidWZmZXItPmhhbmRsZTsKPiA+ID4gKwlmYl9y ZXEucGl0Y2hlc1swXSA9IGJ1ZmZlci0+cGl0Y2g7Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGkgPSAw OyBpIDwgbnVtX2ZiczsgaSsrKSB7Cj4gPiA+ICsJCWZiX3JlcS5vZmZzZXRzWzBdID0gaSAqIG1v ZGUtPnZkaXNwbGF5ICogYnVmZmVyLT5waXRjaDsKPiA+ID4gKwkJcmV0ID0gZHJtX21vZGVfYWRk ZmIyKGNsaWVudC0+ZGV2LCAmZmJfcmVxLCBjbGllbnQtPmZpbGUsCj4gPiA+ICsJCQkJICAgICAg Y2xpZW50LT5mdW5jcy0+bmFtZSk7Cj4gPiA+ICsJCWlmIChyZXQpCj4gPiA+ICsJCQlnb3RvIGVy cl9yZW1vdmU7Cj4gPiA+ICsJCWZiX2lkc1tpXSA9IGZiX3JlcS5mYl9pZDsKPiA+ID4gKwl9Cj4g PiA+ICsKPiA+ID4gKwlidWZmZXItPmZiX2lkcyA9IGZiX2lkczsKPiA+ID4gKwlidWZmZXItPm51 bV9mYnMgPSBudW1fZmJzOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICsKPiA+ID4g K2Vycl9yZW1vdmU6Cj4gPiA+ICsJZm9yIChpLS07IGkgPj0gMDsgaS0tKQo+ID4gPiArCQlkcm1f bW9kZV9ybWZiKGNsaWVudC0+ZGV2LCBmYl9pZHNbaV0sIGNsaWVudC0+ZmlsZSk7Cj4gPiA+ICsJ a2ZyZWUoZmJfaWRzKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ ICtFWFBPUlRfU1lNQk9MKGRybV9jbGllbnRfYnVmZmVyX2FkZGZiKTsKPiA+ID4gKwo+ID4gPiAr aW50IGRybV9jbGllbnRfYnVmZmVyX3JtZmIoc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZm ZXIpCj4gPiA+ICt7Cj4gPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiA+ICsJaW50IHJldDsKPiA+ ID4gKwo+ID4gPiArCWlmICghYnVmZmVyIHx8ICFidWZmZXItPm51bV9mYnMpCj4gPiA+ICsJCXJl dHVybiAwOwo+ID4gPiArCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IGJ1ZmZlci0+bnVtX2Ziczsg aSsrKSB7Cj4gPiA+ICsJCXJldCA9IGRybV9tb2RlX3JtZmIoYnVmZmVyLT5jbGllbnQtPmRldiwg YnVmZmVyLT5mYl9pZHNbaV0sCj4gPiA+ICsJCQkJICAgIGJ1ZmZlci0+Y2xpZW50LT5maWxlKTsK PiA+ID4gKwkJaWYgKHJldCkKPiA+ID4gKwkJCURSTV9ERVZfRVJST1IoYnVmZmVyLT5jbGllbnQt PmRldi0+ZGV2LAo+ID4gPiArCQkJCSAgICAgICJFcnJvciByZW1vdmluZyBGQjoldSAoJWQpXG4i LAo+ID4gPiArCQkJCSAgICAgIGJ1ZmZlci0+ZmJfaWRzW2ldLCByZXQpOwo+ID4gPiArCX0KPiA+ ID4gKwo+ID4gPiArCWtmcmVlKGJ1ZmZlci0+ZmJfaWRzKTsKPiA+ID4gKwlidWZmZXItPmZiX2lk cyA9IE5VTEw7Cj4gPiA+ICsJYnVmZmVyLT5udW1fZmJzID0gMDsKPiA+ID4gKwo+ID4gPiArCXJl dHVybiAwOwo+ID4gPiArfQo+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2J1ZmZlcl9y bWZiKTsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCj4gPiA+IGluZGV4IGY4NjlkZTE4NTk4Ni4uZGIxNjEzMzdk ODdjIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCj4gPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKPiA+ID4gQEAgLTMzLDYgKzMzLDcgQEAKPiA+ ID4gICAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KPiA+ID4gICAjaW5jbHVkZSA8bGludXgvc2xh Yi5oPgo+ID4gPiArI2luY2x1ZGUgPGRybS9kcm1fY2xpZW50Lmg+Cj4gPiA+ICAgI2luY2x1ZGUg PGRybS9kcm1fZHJ2Lmg+Cj4gPiA+ICAgI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiA+IEBAIC00 NjMsNiArNDY0LDcgQEAgaW50IGRybV9kZXZfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ID4gPiAgIAlkZXYtPmRyaXZlciA9IGRyaXZlcjsKPiA+ID4gICAJSU5JVF9MSVNUX0hFQUQoJmRl di0+ZmlsZWxpc3QpOwo+ID4gPiArCUlOSVRfTElTVF9IRUFEKCZkZXYtPmZpbGVsaXN0X2ludGVy bmFsKTsKPiA+ID4gICAJSU5JVF9MSVNUX0hFQUQoJmRldi0+Y3R4bGlzdCk7Cj4gPiA+ICAgCUlO SVRfTElTVF9IRUFEKCZkZXYtPnZtYWxpc3QpOwo+ID4gPiAgIAlJTklUX0xJU1RfSEVBRCgmZGV2 LT5tYXBsaXN0KTsKPiA+ID4gQEAgLTc4Nyw2ICs3ODksOCBAQCBpbnQgZHJtX2Rldl9yZWdpc3Rl cihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+ID4gPiAgIAkJ IGRldi0+ZGV2ID8gZGV2X25hbWUoZGV2LT5kZXYpIDogInZpcnR1YWwgZGV2aWNlIiwKPiA+ID4g ICAJCSBkZXYtPnByaW1hcnktPmluZGV4KTsKPiA+ID4gKwlkcm1fY2xpZW50X2Rldl9yZWdpc3Rl cihkZXYpOwo+ID4gPiArCj4gPiA+ICAgCWdvdG8gb3V0X3VubG9jazsKPiA+ID4gICBlcnJfbWlu b3JzOgo+ID4gPiBAQCAtODM5LDYgKzg0Myw4IEBAIHZvaWQgZHJtX2Rldl91bnJlZ2lzdGVyKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiA+ICAgCWRybV9taW5vcl91bnJlZ2lzdGVyKGRldiwg RFJNX01JTk9SX1BSSU1BUlkpOwo+ID4gPiAgIAlkcm1fbWlub3JfdW5yZWdpc3RlcihkZXYsIERS TV9NSU5PUl9SRU5ERVIpOwo+ID4gPiAgIAlkcm1fbWlub3JfdW5yZWdpc3RlcihkZXYsIERSTV9N SU5PUl9DT05UUk9MKTsKPiA+ID4gKwo+ID4gPiArCWRybV9jbGllbnRfZGV2X3VucmVnaXN0ZXIo ZGV2KTsKPiA+ID4gICB9Cj4gPiA+ICAgRVhQT1JUX1NZTUJPTChkcm1fZGV2X3VucmVnaXN0ZXIp Owo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9maWxlLmMgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2ZpbGUuYwo+ID4gPiBpbmRleCA1NTUwNTM3OGRmNDcuLmJjYzY4OGU1ODc3 NiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9maWxlLmMKPiA+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2RybV9maWxlLmMKPiA+ID4gQEAgLTM1LDYgKzM1LDcgQEAKPiA+ ID4gICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ID4gPiAgICNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KPiA+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2NsaWVudC5oPgo+ID4gPiAgICNpbmNsdWRl IDxkcm0vZHJtX2ZpbGUuaD4KPiA+ID4gICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ID4gQEAg LTQ0Myw2ICs0NDQsOCBAQCB2b2lkIGRybV9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBk ZXYpCj4gPiA+ICAgCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0xFR0FD WSkpCj4gPiA+ICAgCQlkcm1fbGVnYWN5X2Rldl9yZWluaXQoZGV2KTsKPiA+ID4gKwo+ID4gPiAr CWRybV9jbGllbnRfZGV2X2xhc3RjbG9zZShkZXYpOwo+ID4gPiAgIH0KPiA+ID4gICAvKioKPiA+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYmVfaGVscGVyLmMgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX3Byb2JlX2hlbHBlci5jCj4gPiA+IGluZGV4IDJkMTY0M2JkYWU3OC4u NWQyYTZjNjcxN2Y1IDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2Jl X2hlbHBlci5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYmVfaGVscGVyLmMK PiA+ID4gQEAgLTMzLDYgKzMzLDcgQEAKPiA+ID4gICAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFy YW0uaD4KPiA+ID4gICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ID4gKyNpbmNsdWRlIDxkcm0v ZHJtX2NsaWVudC5oPgo+ID4gPiAgICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiA+ID4gICAj aW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KPiA+ID4gICAjaW5jbHVkZSA8ZHJtL2RybV9jcnRj X2hlbHBlci5oPgo+ID4gPiBAQCAtNTYzLDYgKzU2NCw4IEBAIHZvaWQgZHJtX2ttc19oZWxwZXJf aG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gPiAgIAlkcm1fc3lzZnNf aG90cGx1Z19ldmVudChkZXYpOwo+ID4gPiAgIAlpZiAoZGV2LT5tb2RlX2NvbmZpZy5mdW5jcy0+ b3V0cHV0X3BvbGxfY2hhbmdlZCkKPiA+ID4gICAJCWRldi0+bW9kZV9jb25maWcuZnVuY3MtPm91 dHB1dF9wb2xsX2NoYW5nZWQoZGV2KTsKPiA+ID4gKwo+ID4gPiArCWRybV9jbGllbnRfZGV2X2hv dHBsdWcoZGV2KTsKPiA+ID4gICB9Cj4gPiA+ICAgRVhQT1JUX1NZTUJPTChkcm1fa21zX2hlbHBl cl9ob3RwbHVnX2V2ZW50KTsKPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jbGll bnQuaCBiL2luY2x1ZGUvZHJtL2RybV9jbGllbnQuaAo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjg4ZjZmODc5MTljNQo+ID4gPiAtLS0gL2Rldi9u dWxsCj4gPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9jbGllbnQuaAo+ID4gPiBAQCAtMCwwICsx LDE5MiBAQAo+ID4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiA+ ID4gKwo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gPiA+ICsKPiA+ID4gK3N0cnVj dCBkbWFfYnVmOwo+ID4gPiArc3RydWN0IGRybV9jbGlwX3JlY3Q7Cj4gPiA+ICtzdHJ1Y3QgZHJt X2RldmljZTsKPiA+ID4gK3N0cnVjdCBkcm1fZmlsZTsKPiA+ID4gK3N0cnVjdCBkcm1fbW9kZV9t b2RlaW5mbzsKPiA+ID4gKwo+ID4gPiArc3RydWN0IGRybV9jbGllbnRfZGV2Owo+ID4gPiArCj4g PiA+ICsvKioKPiA+ID4gKyAqIHN0cnVjdCBkcm1fY2xpZW50X2Z1bmNzIC0gRFJNIGNsaWVudCAg Y2FsbGJhY2tzCj4gPiA+ICsgKi8KPiA+ID4gK3N0cnVjdCBkcm1fY2xpZW50X2Z1bmNzIHsKPiA+ ID4gKwkvKioKPiA+ID4gKwkgKiBAbmFtZToKPiA+ID4gKwkgKgo+ID4gPiArCSAqIE5hbWUgb2Yg dGhlIGNsaWVudC4KPiA+ID4gKwkgKi8KPiA+ID4gKwljb25zdCBjaGFyICpuYW1lOwo+ID4gPiAr Cj4gPiA+ICsJLyoqCj4gPiA+ICsJICogQG5ldzoKPiA+ID4gKwkgKgo+ID4gPiArCSAqIENhbGxl ZCB3aGVuIGEgY2xpZW50IG9yIGEgJmRybV9kZXZpY2UgaXMgcmVnaXN0ZXJlZC4KPiA+ID4gKwkg KiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhbnl0aGluZyBidXQgemVybywgdGhlbiB0aGlzIGNs aWVudCBpbnN0YW5jZQo+ID4gPiArCSAqIGlzIGRyb3BwZWQuCj4gPiA+ICsJICoKPiA+ID4gKwkg KiBUaGlzIGNhbGxiYWNrIGlzIG1hbmRhdG9yeS4KPiA+ID4gKwkgKi8KPiA+ID4gKwlpbnQgKCpu ZXcpKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KTsKPiA+ID4gKwo+ID4gPiArCS8qKgo+ ID4gPiArCSAqIEByZW1vdmU6Cj4gPiA+ICsJICoKPiA+ID4gKwkgKiBDYWxsZWQgd2hlbiBhICZk cm1fZGV2aWNlIGlzIHVucmVnaXN0ZXJlZCBvciB0aGUgY2xpZW50IGlzCj4gPiA+ICsJICogdW5y ZWdpc3RlcmVkLiBJZiB6ZXJvIGlzIHJldHVybmVkIGRybV9jbGllbnRfZnJlZSgpIGlzIGNhbGxl ZAo+ID4gPiArCSAqIGF1dG9tYXRpY2FsbHkuIElmIHRoZSBjbGllbnQgY2FuJ3QgZHJvcCBpdCdz IHJlc291cmNlcyBpdCBzaG91bGQKPiA+ID4gKwkgKiByZXR1cm4gbm9uLXplcm8gYW5kIGNhbGwg ZHJtX2NsaWVudF9mcmVlKCkgbGF0ZXIuCj4gPiA+ICsJICoKPiA+ID4gKwkgKiBUaGlzIGNhbGxi YWNrIGlzIG9wdGlvbmFsLgo+ID4gPiArCSAqLwo+ID4gPiArCWludCAoKnJlbW92ZSkoc3RydWN0 IGRybV9jbGllbnRfZGV2ICpjbGllbnQpOwo+ID4gPiArCj4gPiA+ICsJLyoqCj4gPiA+ICsJICog QGxhc3RjbG9zZToKPiA+ID4gKwkgKgo+ID4gPiArCSAqIENhbGxlZCBvbiBkcm1fbGFzdGNsb3Nl KCkuIFRoZSBmaXJzdCBjbGllbnQgaW5zdGFuY2UgaW4gdGhlIGxpc3QKPiA+ID4gKwkgKiB0aGF0 IHJldHVybnMgemVybyBnZXRzIHRoZSBwcml2aWxlZ2UgdG8gcmVzdG9yZSBhbmQgbm8gbW9yZSBj bGllbnRzCj4gPiA+ICsJICogYXJlIGNhbGxlZC4KPiA+ID4gKwkgKgo+ID4gPiArCSAqIFRoaXMg Y2FsbGJhY2sgaXMgb3B0aW9uYWwuCj4gPiA+ICsJICovCj4gPiA+ICsJaW50ICgqbGFzdGNsb3Nl KShzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCk7Cj4gPiA+ICsKPiA+ID4gKwkvKioKPiA+ ID4gKwkgKiBAaG90cGx1ZzoKPiA+ID4gKwkgKgo+ID4gPiArCSAqIENhbGxlZCBvbiBkcm1fa21z X2hlbHBlcl9ob3RwbHVnX2V2ZW50KCkuCj4gPiA+ICsJICoKPiA+ID4gKwkgKiBUaGlzIGNhbGxi YWNrIGlzIG9wdGlvbmFsLgo+ID4gPiArCSAqLwo+ID4gPiArCWludCAoKmhvdHBsdWcpKHN0cnVj dCBkcm1fY2xpZW50X2RldiAqY2xpZW50KTsKPiA+ID4gKwo+ID4gPiArLy8gVE9ETwo+ID4gPiAr Ly8Jdm9pZCAoKnN1c3BlbmQpKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KTsKPiA+ID4g Ky8vCXZvaWQgKCpyZXN1bWUpKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KTsKPiA+ID4g K307Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogc3RydWN0IGRybV9jbGllbnRfZGV2IC0g RFJNIGNsaWVudCBpbnN0YW5jZQo+ID4gPiArICovCj4gPiA+ICtzdHJ1Y3QgZHJtX2NsaWVudF9k ZXYgewo+ID4gPiArCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2Owo+ID4gPiArCWNvbnN0IHN0cnVjdCBkcm1fY2xpZW50X2Z1bmNzICpmdW5jczsK PiA+ID4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGU7 Cj4gPiA+ICsJdW5zaWduZWQgaW50IGZpbGVfcmVmX2NvdW50Owo+ID4gPiArCXUzMiAqY3J0Y3M7 Cj4gPiA+ICsJdW5zaWduZWQgaW50IG51bV9jcnRjczsKPiA+ID4gKwl1MzIgbWluX3dpZHRoOwo+ ID4gPiArCXUzMiBtYXhfd2lkdGg7Cj4gPiA+ICsJdTMyIG1pbl9oZWlnaHQ7Cj4gPiA+ICsJdTMy IG1heF9oZWlnaHQ7Cj4gPiA+ICsJdm9pZCAqcHJpdmF0ZTsKPiA+ID4gK307Cj4gPiA+ICsKPiA+ ID4gK3ZvaWQgZHJtX2NsaWVudF9mcmVlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KTsK PiA+ID4gK2ludCBkcm1fY2xpZW50X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBkcm1fY2xpZW50X2Z1 bmNzICpmdW5jcyk7Cj4gPiA+ICt2b2lkIGRybV9jbGllbnRfdW5yZWdpc3Rlcihjb25zdCBzdHJ1 Y3QgZHJtX2NsaWVudF9mdW5jcyAqZnVuY3MpOwo+ID4gPiArCj4gPiA+ICt2b2lkIGRybV9jbGll bnRfZGV2X3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ID4gPiArdm9pZCBkcm1f Y2xpZW50X2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ID4gPiArdm9p ZCBkcm1fY2xpZW50X2Rldl9ob3RwbHVnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ID4gPiAr dm9pZCBkcm1fY2xpZW50X2Rldl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4g PiA+ICsKPiA+ID4gK2ludCBkcm1fY2xpZW50X2dldF9maWxlKHN0cnVjdCBkcm1fY2xpZW50X2Rl diAqY2xpZW50KTsKPiA+ID4gK3ZvaWQgZHJtX2NsaWVudF9wdXRfZmlsZShzdHJ1Y3QgZHJtX2Ns aWVudF9kZXYgKmNsaWVudCk7Cj4gPiA+ICtzdHJ1Y3QgZHJtX2V2ZW50ICoKPiA+ID4gK2RybV9j bGllbnRfcmVhZF9ldmVudChzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgYm9vbCBibG9j ayk7Cj4gPiA+ICsKPiA+ID4gK3N0cnVjdCBkcm1fY2xpZW50X2Nvbm5lY3RvciB7Cj4gPiA+ICsJ dW5zaWduZWQgaW50IGNvbm5faWQ7Cj4gPiA+ICsJdW5zaWduZWQgaW50IHN0YXR1czsKPiA+ID4g Kwl1bnNpZ25lZCBpbnQgY3J0Y19pZDsKPiA+ID4gKwlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8g Km1vZGVzOwo+ID4gPiArCXVuc2lnbmVkIGludCBudW1fbW9kZXM7Cj4gPiA+ICsJYm9vbCBoYXNf dGlsZTsKPiA+ID4gKwlpbnQgdGlsZV9ncm91cDsKPiA+ID4gKwl1OCB0aWxlX2hfbG9jLCB0aWxl X3ZfbG9jOwo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArc3RydWN0IGRybV9jbGllbnRfZGlzcGxh eSB7Cj4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQ7Cj4gPiA+ICsKPiA+ID4g KwlzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3IgKipjb25uZWN0b3JzOwo+ID4gPiArCXVuc2ln bmVkIGludCBudW1fY29ubmVjdG9yczsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBtdXRleCBtb2Rl c19sb2NrOwo+ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqbW9kZXM7Cj4gPiA+ICsJ dW5zaWduZWQgaW50IG51bV9tb2RlczsKPiA+ID4gKwo+ID4gPiArCWJvb2wgY2xvbmVkOwo+ID4g PiArCWJvb2wgbm9fZmx1c2hpbmc7Cj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICt2b2lkIGRybV9j bGllbnRfZGlzcGxheV9mcmVlKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXkpOwo+ ID4gPiArc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqCj4gPiA+ICtkcm1fY2xpZW50X2Rpc3Bs YXlfZ2V0X2ZpcnN0X2VuYWJsZWQoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsIGJvb2wg c3RyaWN0KTsKPiA+ID4gKwo+ID4gPiAraW50IGRybV9jbGllbnRfZGlzcGxheV91cGRhdGVfbW9k ZXMoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSwKPiA+ID4gKwkJCQkgICAgYm9v bCAqbW9kZV9jaGFuZ2VkKTsKPiA+ID4gKwo+ID4gPiArc3RhdGljIGlubGluZSBib29sCj4gPiA+ ICtkcm1fY2xpZW50X2Rpc3BsYXlfaXNfdGlsZWQoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAq ZGlzcGxheSkKPiA+ID4gK3sKPiA+ID4gKwlyZXR1cm4gIWRpc3BsYXktPmNsb25lZCAmJiBkaXNw bGF5LT5udW1fY29ubmVjdG9ycyA+IDE7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK2ludCBkcm1f Y2xpZW50X2Rpc3BsYXlfZHBtcyhzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5LCBp bnQgbW9kZSk7Cj4gPiA+ICtpbnQgZHJtX2NsaWVudF9kaXNwbGF5X3dhaXRfdmJsYW5rKHN0cnVj dCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXkpOwo+ID4gPiArCj4gPiA+ICtzdHJ1Y3QgZHJt X21vZGVfbW9kZWluZm8gKgo+ID4gPiArZHJtX2NsaWVudF9kaXNwbGF5X2ZpcnN0X21vZGUoc3Ry dWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSk7Cj4gPiA+ICtzdHJ1Y3QgZHJtX21vZGVf bW9kZWluZm8gKgo+ID4gPiArZHJtX2NsaWVudF9kaXNwbGF5X25leHRfbW9kZShzdHJ1Y3QgZHJt X2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5LAo+ID4gPiArCQkJICAgICBzdHJ1Y3QgZHJtX21vZGVf bW9kZWluZm8gKm1vZGUpOwo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIGRybV9jbGllbnRfZGlzcGxh eV9mb3JfZWFjaF9tb2RlKGRpc3BsYXksIG1vZGUpIFwKPiA+ID4gKwlmb3IgKG1vZGUgPSBkcm1f Y2xpZW50X2Rpc3BsYXlfZmlyc3RfbW9kZShkaXNwbGF5KTsgbW9kZTsgXAo+ID4gPiArCSAgICAg bW9kZSA9IGRybV9jbGllbnRfZGlzcGxheV9uZXh0X21vZGUoZGlzcGxheSwgbW9kZSkpCj4gPiA+ ICsKPiA+ID4gK3Vuc2lnbmVkIGludAo+ID4gPiArZHJtX2NsaWVudF9kaXNwbGF5X3ByZWZlcnJl ZF9kZXB0aChzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5KTsKPiA+ID4gKwo+ID4g PiAraW50IGRybV9jbGllbnRfZGlzcGxheV9jb21taXRfbW9kZShzdHJ1Y3QgZHJtX2NsaWVudF9k aXNwbGF5ICpkaXNwbGF5LAo+ID4gPiArCQkJCSAgIHUzMiBmYl9pZCwgc3RydWN0IGRybV9tb2Rl X21vZGVpbmZvICptb2RlKTsKPiA+ID4gK3Vuc2lnbmVkIGludCBkcm1fY2xpZW50X2Rpc3BsYXlf Y3VycmVudF9mYihzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5KTsKPiA+ID4gK2lu dCBkcm1fY2xpZW50X2Rpc3BsYXlfZmx1c2goc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlz cGxheSwgdTMyIGZiX2lkLAo+ID4gPiArCQkJICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xp cHMsIHVuc2lnbmVkIGludCBudW1fY2xpcHMpOwo+ID4gPiAraW50IGRybV9jbGllbnRfZGlzcGxh eV9wYWdlX2ZsaXAoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSwgdTMyIGZiX2lk LAo+ID4gPiArCQkJCSBib29sIGV2ZW50KTsKPiA+ID4gKwo+ID4gPiArc3RydWN0IGRybV9jbGll bnRfYnVmZmVyIHsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudDsKPiA+ID4g Kwl1MzIgd2lkdGg7Cj4gPiA+ICsJdTMyIGhlaWdodDsKPiA+ID4gKwl1MzIgZm9ybWF0Owo+ID4g PiArCXUzMiBoYW5kbGU7Cj4gPiA+ICsJdTMyIHBpdGNoOwo+ID4gPiArCXU2NCBzaXplOwo+ID4g PiArCXN0cnVjdCBkbWFfYnVmICpkbWFfYnVmOwo+ID4gPiArCXZvaWQgKnZhZGRyOwo+ID4gPiAr Cj4gPiA+ICsJdW5zaWduZWQgaW50ICpmYl9pZHM7Cj4gPiA+ICsJdW5zaWduZWQgaW50IG51bV9m YnM7Cj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICtzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKgo+ ID4gPiArZHJtX2NsaWVudF9mcmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGRybV9jbGllbnRfZGV2 ICpjbGllbnQsCj4gPiA+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGUs IHUzMiBmb3JtYXQpOwo+ID4gPiArdm9pZCBkcm1fY2xpZW50X2ZyYW1lYnVmZmVyX2RlbGV0ZShz dHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZlcik7Cj4gPiA+ICtzdHJ1Y3QgZHJtX2NsaWVu dF9idWZmZXIgKgo+ID4gPiArZHJtX2NsaWVudF9idWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fY2xp ZW50X2RldiAqY2xpZW50LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQsCj4gPiA+ICsJCQkgdTMyIGZv cm1hdCk7Cj4gPiA+ICt2b2lkIGRybV9jbGllbnRfYnVmZmVyX2RlbGV0ZShzdHJ1Y3QgZHJtX2Ns aWVudF9idWZmZXIgKmJ1ZmZlcik7Cj4gPiA+ICtpbnQgZHJtX2NsaWVudF9idWZmZXJfYWRkZmIo c3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXIsCj4gPiA+ICsJCQkgICAgc3RydWN0IGRy bV9tb2RlX21vZGVpbmZvICptb2RlKTsKPiA+ID4gK2ludCBkcm1fY2xpZW50X2J1ZmZlcl9ybWZi KHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyKTsKPiA+ID4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvZHJtL2RybV9kZXZpY2UuaCBiL2luY2x1ZGUvZHJtL2RybV9kZXZpY2UuaAo+ID4gPiBp bmRleCA3YzRmYTMyZjNmYzYuLjMyZGZlZDNkNWE4NiAxMDA2NDQKPiA+ID4gLS0tIGEvaW5jbHVk ZS9kcm0vZHJtX2RldmljZS5oCj4gPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9kZXZpY2UuaAo+ ID4gPiBAQCAtNjcsNiArNjcsNyBAQCBzdHJ1Y3QgZHJtX2RldmljZSB7Cj4gPiA+ICAgCXN0cnVj dCBtdXRleCBmaWxlbGlzdF9tdXRleDsKPiA+ID4gICAJc3RydWN0IGxpc3RfaGVhZCBmaWxlbGlz dDsKPiA+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVsaXN0X2ludGVybmFsOwo+ID4gPiAgIAkv KiogXG5hbWUgTWVtb3J5IG1hbmFnZW1lbnQgKi8KPiA+ID4gICAJLypAeyAqLwo+ID4gPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZpbGUuaCBiL2luY2x1ZGUvZHJtL2RybV9maWxlLmgK PiA+ID4gaW5kZXggNTE3NmMzNzk3NjgwLi4zOWFmOGE0YmU3YjMgMTAwNjQ0Cj4gPiA+IC0tLSBh L2luY2x1ZGUvZHJtL2RybV9maWxlLmgKPiA+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZpbGUu aAo+ID4gPiBAQCAtMjQ4LDYgKzI0OCwxMyBAQCBzdHJ1Y3QgZHJtX2ZpbGUgewo+ID4gPiAgIAkg Ki8KPiA+ID4gICAJdm9pZCAqZHJpdmVyX3ByaXY7Cj4gPiA+ICsJLyoqCj4gPiA+ICsJICogQHVz ZXJfcHJpdjoKPiA+ID4gKwkgKgo+ID4gPiArCSAqIE9wdGlvbmFsIHBvaW50ZXIgZm9yIHVzZXIg cHJpdmF0ZSBkYXRhLiBVc2VmdWwgZm9yIGluLWtlcm5lbCBjbGllbnRzLgo+ID4gPiArCSAqLwo+ ID4gPiArCXZvaWQgKnVzZXJfcHJpdjsKPiA+ID4gKwo+ID4gPiAgIAkvKioKPiA+ID4gICAJICog QGZiczoKPiA+ID4gICAJICoKPiA+ID4gLS0gCj4gPiA+IDIuMTUuMQo+ID4gPiAKPiAKCi0tIApE YW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8v YmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK