From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [PATCH] drm: Global atomic state handling Date: Tue, 4 Nov 2014 17:32:30 -0500 Message-ID: References: <1415137030-16319-1-git-send-email-daniel.vetter@ffwll.ch> <1415138869-12060-1-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1415138869-12060-1-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: Intel Graphics Development , Fengguang Wu , DRI Development List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBOb3YgNCwgMjAxNCBhdCA1OjA3IFBNLCBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0 dGVyQGZmd2xsLmNoPiB3cm90ZToKPiBTb21lIGRpZmZlcmVuY2VzIGNvbXBhcmVkIHRvIFJvYidz IHBhdGNoZXMgYWdhaW46Cj4gLSBEcm9wcGVkIHRoZSBjb21taXR0ZWQgYW5kIGNoZWNrZWQgYm9v bGVhbnMuIENoZWNraW5nIHdpbGwgYmUKPiAgIGludGVybmFsbHkgZW5mb3JjZWQgYnkgYWx3YXlz IGNhbGxpbmcgLT5hdG9taWNfY2hlY2sgYmVmb3JlCj4gICAtPmF0b21pY19jb21taXQuIEFuZCBh c3luYyBoYW5kbGluZyBuZWVkcyB0byBiZSBzb2x2ZWQgZGlmZmVyZW50bHkKPiAgIGJlY2F1c2Ug dGhlIGN1cnJlbnQgc2NoZW1lIGNvbXBsZXRlbHkgc2lkZS1zdGVwcyB3dyBtdXRleCBkZWFkbG9j awo+ICAgYXZvaWRhbmNlIChhbmQgc28gZWl0aGVyIHJlaW52ZW50cyBhIG5ldyBkZWFkbG9jayBh dm9pZGFuY2Ugd2hlZWwgb3IKPiAgIGxpa2UgdGhlIGN1cnJlbnQgY29kZSBqdXN0IGRlYWRsb2Nr cykuCj4KPiAtIFN0YXRlIGZvciBjb25uZWN0b3JzIG5lZWRlZCB0byBiZSBhZGRlZCwgc2luY2Ug bm93IHRoZXkgaGF2ZSBhCj4gICBmdWxsLWJsb3duIGRybV9jb25uZWN0b3Jfc3RhdGUgKHNvIHRo YXQgZHJpdmVycyBoYXZlIHNvbWV0aGluZyB0bwo+ICAgYXR0YWNoIHRoZWlyIG93biBzdHVmZiB0 bykuCj4KPiAtIFJlZmNvdW50aW5nIGlzIGdvbmUuIEkgcGxhbmUgdG8gc29sdmUgYXN5bmMgdXBk YXRlcyBkaWZmZXJlbnRseSwKPiAgIHNpbmNlIHRoZSBsb2NrLXBhc3Npbmcgc2NoZW1lIGRvZXNu J3QgY3V0IGl0IChzaW5jZSBpdCBhYnVzZXMgd3cKPiAgIG11dGV4ZXMpLiBFc3NlbnRpYWxseSB3 aGF0IHdlIG5lZWQgZm9yIGFzeW5jIGlzIGEgc2ltcGxlIG93bmVyc2hpcAo+ICAgdHJhbnNmZXIg ZnJvbSB0aGUgY2FsbGVyIHRvIHRoZSBkcml2ZXIuIFRoYXQgZG9lc24ndCBuZWVkIGZ1bGwtYmxv d24KPiAgIHJlZmNvdW50aW5nLgo+Cj4gLSBUaGUgYWNxdWlyZSBjdHggaXMgYSBwb2ludGVyLiBS ZWFsIGF0b21pYyBjYWxsZXJzIHNob3VsZCBoYXZlIHRoYXQKPiAgIG9uIHRoZWlyIHN0YWNrLCBs ZWdhY3kgZW50cnkgcG9pbnRzIG5lZWQgdG8gcHV0IHRoZSByaWdodCBvbmUKPiAgIChvYnRhaW5l ZCBieSBkcm1fbW9kZXNldF9sZWdhY3lfYWN1aXJlX2N0eCkgaW4gdGhlcmUuCj4KPiAtIEkndmUg ZHJvcHBlZCBhbGwgaG9va3MgZXhjZXB0IGNoZWNrL2NvbW1pdC4gQWxsIHRoZSBiZWdpbi9lbmQK PiAgIGhhbmRsaW5nIGlzIGRvbmUgYnkgY29yZSBmdW5jdGlvbnMgYW5kIGlzIHRoZSBzYW1lLgo+ Cj4gLSBjb21taXQvY2hlY2sgYXJlIGp1c3QgdGhpbiB3cmFwcGVycyB0aGF0IGVuc3VyZSB0aGF0 IC0+Y2hlY2sgaXMKPiAgIGFsd2F5cyBjYWxsZWQuCj4KPiAtIFRvIGhlbHAgb3V0IHdpdGggbG9j a2luZyBpbiB0aGUgbGVnYWN5IGltcGxlbWVudGF0aW9ucyBJJ3ZlIGFkZGVkIGEKPiAgIGhlbHBl ciB0byBqdXN0IGdyYWIgYWxsIGxvY2tzIGluIHRoZSBiYWNrb2ZmIGNhc2UuCj4KPiB2MjogQWRk IG5vdGljZXMgdGhhdCBjaGVjay9jb21taXQgY2FuIGZhaWwgd2l0aCBFREVBRExLLgo+Cj4gdjM6 Cj4gLSBNb3JlIGNvbnNpc3RlbnQgbmFtaW5nIGZvciBzdGF0ZV9hbGxvYy4KPiAtIEFkZCBzdGF0 ZV9jbGVhciB3aGljaCBpcyBuZWVkZWQgZm9yIGJhY2tvZmYgYW5kIHJldHJ5Lgo+Cj4gdjQ6IFBs YW5lcy9jb25uZWN0b3JzIGNhbiBzd2l0Y2ggYmV0d2VlbiBjcnRjcywgYW5kIHdlIG5lZWQgdG8g YmUKPiBjYXJlZnVsIHRoYXQgd2UgZ3JhYiB0aGUgc3RhdGUgKGFuZCBsb2NrcykgZm9yIGJvdGgg dGhlIG9sZCBhbmQgbmV3Cj4gY3J0Yy4gSW1wcm92ZSB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyB0 byBlbnN1cmUgdGhpcy4KPgo+IHY1OiBBZGQgZnVuY3Rpb25zIHRvIGdyYWIgYWZmZWN0ZWQgY29u bmVjdG9ycyBmb3IgYSBjcnRjIGFuZCB0byByZWNvbXB1dGUKPiB0aGUgY3J0Yy0+ZW5hYmxlIHN0 YXRlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgYm90aCBoZWxwZXIgYW5kIGF0b21pYyBpb2N0bAo+IGNv ZGUgd2hlbiBlLmcuIHJlbW92aW5nIGEgY29ubmVjdG9yLgo+Cj4gdjY6IFNxdWFzaCBpbiBmaXh1 cCBmcm9tIEZlbmdndWFuZyB0byB1c2UgRVJSX0NBU1QuCj4KPiB2NzogQWRkIGRlYnVnIG91dHB1 dC4KPgo+IHY4OiBNYWtlIGNoZWNrcGF0Y2ggaGFwcHkgYWJvdXQga2NhbGxvYyBhcmd1bWVudCBv cmRlcmluZy4KPgo+IHY5OiBJbXByb3ZlIGtlcm5lbGRvYyBpbiBkcm1fY3J0Yy5oCj4KPiB2MTA6 Cj4gLSBGaXggYW5vdGhlciBrY2FsbG9jIGFyZ3VtZW50IG1pc29yZGVyIEkndmUgbWlzc2VkLgo+ IC0gTW9yZSBwb2xpc2ggZm9yIGtlcm5lbGRvYy4KPgo+IHYxMTogQ2xhcmlmeSB0aGUgb3duZXJz aGlwIHJ1bGVzIGZvciB0aGUgc3RhdGUgb2JqZWN0LiBUaGUgbmV3IHJ1bGUgaXMKPiB0aGF0IGEg c3VjY2Vzc2Z1bCBkcm1fYXRvbWljX2NvbW1pdCAod2hldGhlciBzeW5jaHJvbm91cyBvciBhc255 YykKPiBhbHdheXMgaW5oZXJpdHMgdGhlIHN0YXRlIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgdGhl IGNsZWFuLXVwLiBUaGF0Cj4gd2F5IGFzeW5jIGFuZCBzeW5jIC0+Y29tbWl0IGZ1bmN0aW9ucyBh cmUgbW9yZSBzaW1pbGFyLgo+Cj4gdjEyOiBBIGZldyBidWdmaXhlczoKPiAtIEFzc2lnbiBzdGF0 ZS0+c3RhdGUgcG9pbnRlcnMgY29ycmVjdGx5IHdoZW4gZ3JhYmJpbmcgc3RhdGUgb2JqZWN0cyAt Cj4gICB3ZSBuZWVkIHRvIGxpbmsgdGhlbSB1cCB3aXRoIHRoZSBnbG9iYWwgc3RhdGUuCj4gLSBI YW5kbGUgYSBOVUxMIGNydGMgaW4gc2V0X2NydGNfZm9yX3BsYW5lIHRvIHNpbXBsaWZ5IGNvZGUg ZmxvdyBhIGJpdAo+ICAgZm9yIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uCj4KPiB2MTM6 IFJldmlldyBmcm9tIFNlYW46Cj4gLSBrZXJuZWxkb2Mgc3BlbGxpbmcgZml4ZXMKPiAtIERvbid0 IG92ZXJhbGxvY2F0ZSBzdGF0ZXMtPnBsYW5lcy4KPiAtIEhhbmRsZSBOVUxMIGNydGMgaW4gc2V0 X2NydGNfZm9yX2Nvbm5lY3Rvci4KPgo+IHYxNDogU3ByaW5rbGUgX19tdXN0X2NoZWNrIG92ZXIg YWxsIGZ1bmN0aW9ucyB3aGljaCBkbyB3YWl0L3dvdW5kCj4gbG9ja2luZyB0byBtYWtlIHN1cmUg Y2FsbGVycyBkb24ndCBmb3JnZXQgdGhpcy4gU2luY2UgSSBoYXZlIDstKQo+CgpUaGFua3MgZm9y IHRoZSBxdWljayB0dXJuYXJvdW5kLgoKUmV2aWV3ZWQtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxA Y2hyb21pdW0ub3JnPgoKPiBDYzogRmVuZ2d1YW5nIFd1IDxmZW5nZ3Vhbmcud3VAaW50ZWwuY29t Pgo+IENjOiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KPiBDYzogTWF0dCBSb3Bl ciA8bWF0dGhldy5kLnJvcGVyQGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmV0 dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+Cj4gZml4dXAgZm9yIGdsb2JhbCBhdG9taWMg c3RhdGUgaGFuZGxpbmcKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICB8ICAg MiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jIHwgNTk0ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5o ICAgICB8ICA2NSArKysrKwo+ICBpbmNsdWRlL2RybS9kcm1fY3J0Yy5oICAgICAgIHwgIDM1ICsr Kwo+ICA0IGZpbGVzIGNoYW5nZWQsIDY5NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9kcm1fYXRvbWljLmgKPgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBpbmRl eCA5MjkyYTc2MWVhNmQuLmM1ZTM3ZGM0NTllZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBAQCAtMTQsNyAr MTQsNyBAQCBkcm0teSAgICAgICA6PSAgICAgICAgZHJtX2F1dGgubyBkcm1fYnVmcy5vIGRybV9j YWNoZS5vIFwKPiAgICAgICAgICAgICAgICAgZHJtX2luZm8ubyBkcm1fZGVidWdmcy5vIGRybV9l bmNvZGVyX3NsYXZlLm8gXAo+ICAgICAgICAgICAgICAgICBkcm1fdHJhY2VfcG9pbnRzLm8gZHJt X2dsb2JhbC5vIGRybV9wcmltZS5vIFwKPiAgICAgICAgICAgICAgICAgZHJtX3JlY3QubyBkcm1f dm1hX21hbmFnZXIubyBkcm1fZmxpcF93b3JrLm8gXAo+IC0gICAgICAgICAgICAgICBkcm1fbW9k ZXNldF9sb2NrLm8KPiArICAgICAgICAgICAgICAgZHJtX21vZGVzZXRfbG9jay5vIGRybV9hdG9t aWMubwo+Cj4gIGRybS0kKENPTkZJR19DT01QQVQpICs9IGRybV9pb2MzMi5vCj4gIGRybS0kKENP TkZJR19EUk1fR0VNX0NNQV9IRUxQRVIpICs9IGRybV9nZW1fY21hX2hlbHBlci5vCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJt X2F0b21pYy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmJm M2NkYzIxMzNlNAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0 b21pYy5jCj4gQEAgLTAsMCArMSw1OTQgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE0 IFJlZCBIYXQKPiArICogQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnAuCj4gKyAqCj4gKyAq IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgo+ICsgKiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ ICsgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IKPiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4gKyAqIEFSSVNJTkcgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP Ugo+ICsgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhv cnM6Cj4gKyAqIFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KPiArICogRGFuaWVsIFZl dHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiArICovCj4gKwo+ICsKPiArI2luY2x1ZGUg PGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KPiArCj4gK3N0YXRpYyB2b2lkIGtmcmVlX3N0YXRlKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICsgICAgICAga2ZyZWUoc3RhdGUt PmNvbm5lY3RvcnMpOwo+ICsgICAgICAga2ZyZWUoc3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXMpOwo+ ICsgICAgICAga2ZyZWUoc3RhdGUtPmNydGNzKTsKPiArICAgICAgIGtmcmVlKHN0YXRlLT5jcnRj X3N0YXRlcyk7Cj4gKyAgICAgICBrZnJlZShzdGF0ZS0+cGxhbmVzKTsKPiArICAgICAgIGtmcmVl KHN0YXRlLT5wbGFuZV9zdGF0ZXMpOwo+ICsgICAgICAga2ZyZWUoc3RhdGUpOwo+ICt9Cj4gKwo+ ICsvKioKPiArICogZHJtX2F0b21pY19zdGF0ZV9hbGxvYyAtIGFsbG9jYXRlIGF0b21pYyBzdGF0 ZQo+ICsgKiBAZGV2OiBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqIFRoaXMgYWxsb2NhdGVzIGFuIGVt cHR5IGF0b21pYyBzdGF0ZSB0byB0cmFjayB1cGRhdGVzLgo+ICsgKi8KPiArc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKgo+ICtkcm1fYXRvbWljX3N0YXRlX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCj4gK3sKPiArICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKPiAr Cj4gKyAgICAgICBzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwo+ ICsgICAgICAgaWYgKCFzdGF0ZSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gKwo+ ICsgICAgICAgc3RhdGUtPmNydGNzID0ga2NhbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRj LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKnN0YXRlLT5jcnRjcyks IEdGUF9LRVJORUwpOwo+ICsgICAgICAgaWYgKCFzdGF0ZS0+Y3J0Y3MpCj4gKyAgICAgICAgICAg ICAgIGdvdG8gZmFpbDsKPiArICAgICAgIHN0YXRlLT5jcnRjX3N0YXRlcyA9IGtjYWxsb2MoZGV2 LT5tb2RlX2NvbmZpZy5udW1fY3J0YywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKCpzdGF0ZS0+Y3J0Y19zdGF0ZXMpLCBHRlBfS0VSTkVMKTsKPiArICAgICAg IGlmICghc3RhdGUtPmNydGNfc3RhdGVzKQo+ICsgICAgICAgICAgICAgICBnb3RvIGZhaWw7Cj4g KyAgICAgICBzdGF0ZS0+cGxhbmVzID0ga2NhbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV90b3Rh bF9wbGFuZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqc3RhdGUt PnBsYW5lcyksIEdGUF9LRVJORUwpOwo+ICsgICAgICAgaWYgKCFzdGF0ZS0+cGxhbmVzKQo+ICsg ICAgICAgICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICAgICBzdGF0ZS0+cGxhbmVfc3RhdGVzID0g a2NhbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV90b3RhbF9wbGFuZSwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqc3RhdGUtPnBsYW5lX3N0YXRlcyksIEdG UF9LRVJORUwpOwo+ICsgICAgICAgaWYgKCFzdGF0ZS0+cGxhbmVfc3RhdGVzKQo+ICsgICAgICAg ICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICAgICBzdGF0ZS0+Y29ubmVjdG9ycyA9IGtjYWxsb2Mo ZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZigqc3RhdGUtPmNvbm5lY3RvcnMpLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwo+ICsgICAgICAgaWYgKCFzdGF0ZS0+ Y29ubmVjdG9ycykKPiArICAgICAgICAgICAgICAgZ290byBmYWlsOwo+ICsgICAgICAgc3RhdGUt PmNvbm5lY3Rvcl9zdGF0ZXMgPSBrY2FsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rv ciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKnN0 YXRlLT5jb25uZWN0b3Jfc3RhdGVzKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHRlBfS0VSTkVMKTsKPiArICAgICAgIGlmICghc3RhdGUtPmNvbm5lY3Rvcl9z dGF0ZXMpCj4gKyAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKPiArCj4gKyAgICAgICBzdGF0ZS0+ ZGV2ID0gZGV2Owo+ICsKPiArICAgICAgIERSTV9ERUJVR19LTVMoIkFsbG9jYXRlIGF0b21pYyBz dGF0ZSAlcFxuIiwgc3RhdGUpOwo+ICsKPiArICAgICAgIHJldHVybiBzdGF0ZTsKPiArZmFpbDoK PiArICAgICAgIGtmcmVlX3N0YXRlKHN0YXRlKTsKPiArCj4gKyAgICAgICByZXR1cm4gTlVMTDsK PiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc3RhdGVfYWxsb2MpOwo+ICsKPiArLyoq Cj4gKyAqIGRybV9hdG9taWNfc3RhdGVfY2xlYXIgLSBjbGVhciBzdGF0ZSBvYmplY3QKPiArICog QHN0YXRlOiBhdG9taWMgc3RhdGUKPiArICoKPiArICogV2hlbiB0aGUgdy93IG11dGV4IGFsZ29y aXRobSBkZXRlY3RzIGEgZGVhZGxvY2sgd2UgbmVlZCB0byBiYWNrIG9mZiBhbmQgZHJvcAo+ICsg KiBhbGwgbG9ja3MuIFNvIHNvbWVvbmUgZWxzZSBjb3VsZCBzbmVhayBpbiBhbmQgY2hhbmdlIHRo ZSBjdXJyZW50IG1vZGVzZXQKPiArICogY29uZmlndXJhdGlvbi4gV2hpY2ggbWVhbnMgdGhhdCBh bGwgdGhlIHN0YXRlIGFzc2VtYmxlZCBpbiBAc3RhdGUgaXMgbm8KPiArICogbG9uZ2VyIGFuIGF0 b21pYyB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgc3RhdGUsIGJ1dCB0byBzb21lIGFyYml0cmFyeSBl YXJsaWVyCj4gKyAqIHN0YXRlLiBXaGljaCBjb3VsZCBicmVhayBhc3N1bXB0aW9ucyB0aGUgZHJp dmVyJ3MgLT5hdG9taWNfY2hlY2sgbGlrZWx5Cj4gKyAqIHJlbGllcyBvbi4KPiArICoKPiArICog SGVuY2Ugd2UgbXVzdCBjbGVhciBhbGwgY2FjaGVkIHN0YXRlIGFuZCBjb21wbGV0ZWx5IHN0YXJ0 IG92ZXIsIHVzaW5nIHRoaXMKPiArICogZnVuY3Rpb24uCj4gKyAqLwo+ICt2b2lkIGRybV9hdG9t aWNfc3RhdGVfY2xlYXIoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKyAg ICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gc3RhdGUtPmRldjsKPiArICAgICAgIGludCBp Owo+ICsKPiArICAgICAgIERSTV9ERUJVR19LTVMoIkNsZWFyaW5nIGF0b21pYyBzdGF0ZSAlcFxu Iiwgc3RhdGUpOwo+ICsKPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZXYtPm1vZGVfY29uZmln Lm51bV9jb25uZWN0b3I7IGkrKykgewo+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yID0gc3RhdGUtPmNvbm5lY3RvcnNbaV07Cj4gKwo+ICsgICAgICAgICAg ICAgICBpZiAoIWNvbm5lY3RvcikKPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK PiArCj4gKyAgICAgICAgICAgICAgIGNvbm5lY3Rvci0+ZnVuY3MtPmF0b21pY19kZXN0cm95X3N0 YXRlKGNvbm5lY3RvciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXNbaV0pOwo+ICsgICAgICAgfQo+ ICsKPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjOyBp KyspIHsKPiArICAgICAgICAgICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRjID0gc3RhdGUtPmNy dGNzW2ldOwo+ICsKPiArICAgICAgICAgICAgICAgaWYgKCFjcnRjKQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgICAgY3J0Yy0+ZnVuY3MtPmF0 b21pY19kZXN0cm95X3N0YXRlKGNydGMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+Y3J0Y19zdGF0ZXNbaV0pOwo+ICsgICAgICAgfQo+ ICsKPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZXYtPm1vZGVfY29uZmlnLm51bV90b3RhbF9w bGFuZTsgaSsrKSB7Cj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0g c3RhdGUtPnBsYW5lc1tpXTsKPiArCj4gKyAgICAgICAgICAgICAgIGlmICghcGxhbmUpCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgICAgICAgICBwbGFu ZS0+ZnVuY3MtPmF0b21pY19kZXN0cm95X3N0YXRlKHBsYW5lLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wbGFuZV9zdGF0ZXNbaV0p Owo+ICsgICAgICAgfQo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19zdGF0ZV9jbGVh cik7Cj4gKwo+ICsvKioKPiArICogZHJtX2F0b21pY19zdGF0ZV9mcmVlIC0gZnJlZSBhbGwgbWVt b3J5IGZvciBhbiBhdG9taWMgc3RhdGUKPiArICogQHN0YXRlOiBhdG9taWMgc3RhdGUgdG8gZGVh bGxvY2F0ZQo+ICsgKgo+ICsgKiBUaGlzIGZyZWVzIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRo IGFuIGF0b21pYyBzdGF0ZSwgaW5jbHVkaW5nIGFsbCB0aGUKPiArICogcGVyLW9iamVjdCBzdGF0 ZSBmb3IgcGxhbmVzLCBjcnRjcyBhbmQgY29ubmVjdG9ycy4KPiArICovCj4gK3ZvaWQgZHJtX2F0 b21pY19zdGF0ZV9mcmVlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICsg ICAgICAgZHJtX2F0b21pY19zdGF0ZV9jbGVhcihzdGF0ZSk7Cj4gKwo+ICsgICAgICAgRFJNX0RF QlVHX0tNUygiRnJlZWluZyBhdG9taWMgc3RhdGUgJXBcbiIsIHN0YXRlKTsKPiArCj4gKyAgICAg ICBrZnJlZV9zdGF0ZShzdGF0ZSk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3N0 YXRlX2ZyZWUpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUgLSBn ZXQgY3J0YyBzdGF0ZQo+ICsgKiBAc3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUgb2JqZWN0Cj4g KyAqIEBjcnRjOiBjcnRjIHRvIGdldCBzdGF0ZSBvYmplY3QgZm9yCj4gKyAqCj4gKyAqIFRoaXMg ZnVuY3Rpb24gcmV0dXJucyB0aGUgY3J0YyBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNydGMsIGFsbG9j YXRpbmcgaXQgaWYKPiArICogbmVlZGVkLiBJdCB3aWxsIGFsc28gZ3JhYiB0aGUgcmVsZXZhbnQg Y3J0YyBsb2NrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdGF0ZQo+ICsgKiBpcyBjb25zaXN0ZW50 Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKgo+ICsgKiBFaXRoZXIgdGhlIGFsbG9jYXRlZCBz dGF0ZSBvciB0aGUgZXJyb3IgY29kZSBlbmNvZGVkIGludG8gdGhlIHBvaW50ZXIuIFdoZW4KPiAr ICogdGhlIGVycm9yIGlzIEVERUFETEsgdGhlbiB0aGUgdy93IG11dGV4IGNvZGUgaGFzIGRldGVj dGVkIGEgZGVhZGxvY2sgYW5kIHRoZQo+ICsgKiBlbnRpcmUgYXRvbWljIHNlcXVlbmNlIG11c3Qg YmUgcmVzdGFydGVkLiBBbGwgb3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4KPiArICovCj4gK3N0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqCj4gK2RybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKyAgICAgICBpbnQgcmV0LCBpbmRleDsKPiArICAgICAg IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiArCj4gKyAgICAgICBpbmRleCA9 IGRybV9jcnRjX2luZGV4KGNydGMpOwo+ICsKPiArICAgICAgIGlmIChzdGF0ZS0+Y3J0Y19zdGF0 ZXNbaW5kZXhdKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUtPmNydGNfc3RhdGVzW2lu ZGV4XTsKPiArCj4gKyAgICAgICByZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZjcnRjLT5tdXRleCwg c3RhdGUtPmFjcXVpcmVfY3R4KTsKPiArICAgICAgIGlmIChyZXQpCj4gKyAgICAgICAgICAgICAg IHJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwo+ICsgICAgICAgY3J0Y19zdGF0ZSA9IGNydGMtPmZ1 bmNzLT5hdG9taWNfZHVwbGljYXRlX3N0YXRlKGNydGMpOwo+ICsgICAgICAgaWYgKCFjcnRjX3N0 YXRlKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKyAg ICAgICBzdGF0ZS0+Y3J0Y19zdGF0ZXNbaW5kZXhdID0gY3J0Y19zdGF0ZTsKPiArICAgICAgIHN0 YXRlLT5jcnRjc1tpbmRleF0gPSBjcnRjOwo+ICsgICAgICAgY3J0Y19zdGF0ZS0+c3RhdGUgPSBz dGF0ZTsKPiArCj4gKyAgICAgICBEUk1fREVCVUdfS01TKCJBZGRlZCBbQ1JUQzolZF0gJXAgc3Rh dGUgdG8gJXBcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgIGNydGMtPmJhc2UuaWQsIGNydGNf c3RhdGUsIHN0YXRlKTsKPiArCj4gKyAgICAgICByZXR1cm4gY3J0Y19zdGF0ZTsKPiArfQo+ICtF WFBPUlRfU1lNQk9MKGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUpOwo+ICsKPiArLyoqCj4gKyAq IGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlIC0gZ2V0IHBsYW5lIHN0YXRlCj4gKyAqIEBzdGF0 ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZSBvYmplY3QKPiArICogQHBsYW5lOiBwbGFuZSB0byBnZXQg c3RhdGUgb2JqZWN0IGZvcgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBs YW5lIHN0YXRlIGZvciB0aGUgZ2l2ZW4gcGxhbmUsIGFsbG9jYXRpbmcgaXQgaWYKPiArICogbmVl ZGVkLiBJdCB3aWxsIGFsc28gZ3JhYiB0aGUgcmVsZXZhbnQgcGxhbmUgbG9jayB0byBtYWtlIHN1 cmUgdGhhdCB0aGUgc3RhdGUKPiArICogaXMgY29uc2lzdGVudC4KPiArICoKPiArICogUmV0dXJu czoKPiArICoKPiArICogRWl0aGVyIHRoZSBhbGxvY2F0ZWQgc3RhdGUgb3IgdGhlIGVycm9yIGNv ZGUgZW5jb2RlZCBpbnRvIHRoZSBwb2ludGVyLiBXaGVuCj4gKyAqIHRoZSBlcnJvciBpcyBFREVB RExLIHRoZW4gdGhlIHcvdyBtdXRleCBjb2RlIGhhcyBkZXRlY3RlZCBhIGRlYWRsb2NrIGFuZCB0 aGUKPiArICogZW50aXJlIGF0b21pYyBzZXF1ZW5jZSBtdXN0IGJlIHJlc3RhcnRlZC4gQWxsIG90 aGVyIGVycm9ycyBhcmUgZmF0YWwuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICoK PiArZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUp Cj4gK3sKPiArICAgICAgIGludCByZXQsIGluZGV4Owo+ICsgICAgICAgc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGU7Cj4gKwo+ICsgICAgICAgaW5kZXggPSBkcm1fcGxhbmVfaW5k ZXgocGxhbmUpOwo+ICsKPiArICAgICAgIGlmIChzdGF0ZS0+cGxhbmVfc3RhdGVzW2luZGV4XSkK PiArICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLT5wbGFuZV9zdGF0ZXNbaW5kZXhdOwo+ICsK PiArICAgICAgIC8qCj4gKyAgICAgICAgKiBUT0RPOiBXZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSBw ZXItcGxhbmUgbXV0ZXhlcy4gU28gaW5zdGVhZCBvZiB0cnlpbmcKPiArICAgICAgICAqIGNyYXp5 IHRyaWNrcyB3aXRoIGRlZmVycmluZyBwbGFuZS0+Y3J0YyBhbmQgaG9waW5nIGZvciB0aGUgYmVz dCBqdXN0Cj4gKyAgICAgICAgKiBncmFiIGFsbCBjcnRjIGxvY2tzLiBPbmNlIHdlIGhhdmUgcGVy LXBsYW5lIGxvY2tzIHdlIG11c3QgdXBkYXRlIHRoaXMKPiArICAgICAgICAqIHRvIG9ubHkgdGFr ZSB0aGUgcGxhbmUgbXV0ZXguCj4gKyAgICAgICAgKi8KPiArICAgICAgIHJldCA9IGRybV9tb2Rl c2V0X2xvY2tfYWxsX2NydGNzKHN0YXRlLT5kZXYsIHN0YXRlLT5hY3F1aXJlX2N0eCk7Cj4gKyAg ICAgICBpZiAocmV0KQo+ICsgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsK PiArICAgICAgIHBsYW5lX3N0YXRlID0gcGxhbmUtPmZ1bmNzLT5hdG9taWNfZHVwbGljYXRlX3N0 YXRlKHBsYW5lKTsKPiArICAgICAgIGlmICghcGxhbmVfc3RhdGUpCj4gKyAgICAgICAgICAgICAg IHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArICAgICAgIHN0YXRlLT5wbGFuZV9zdGF0 ZXNbaW5kZXhdID0gcGxhbmVfc3RhdGU7Cj4gKyAgICAgICBzdGF0ZS0+cGxhbmVzW2luZGV4XSA9 IHBsYW5lOwo+ICsgICAgICAgcGxhbmVfc3RhdGUtPnN0YXRlID0gc3RhdGU7Cj4gKwo+ICsgICAg ICAgRFJNX0RFQlVHX0tNUygiQWRkZWQgW1BMQU5FOiVkXSAlcCBzdGF0ZSB0byAlcFxuIiwKPiAr ICAgICAgICAgICAgICAgICAgICAgcGxhbmUtPmJhc2UuaWQsIHBsYW5lX3N0YXRlLCBzdGF0ZSk7 Cj4gKwo+ICsgICAgICAgaWYgKHBsYW5lX3N0YXRlLT5jcnRjKSB7Cj4gKyAgICAgICAgICAgICAg IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiArCj4gKyAgICAgICAgICAgICAg IGNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZV9zdGF0 ZS0+Y3J0Yyk7Cj4gKyAgICAgICAgICAgICAgIGlmIChJU19FUlIoY3J0Y19zdGF0ZSkpCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9DQVNUKGNydGNfc3RhdGUpOwo+ICsgICAg ICAgfQo+ICsKPiArICAgICAgIHJldHVybiBwbGFuZV9zdGF0ZTsKPiArfQo+ICtFWFBPUlRfU1lN Qk9MKGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fYXRv bWljX2dldF9jb25uZWN0b3Jfc3RhdGUgLSBnZXQgY29ubmVjdG9yIHN0YXRlCj4gKyAqIEBzdGF0 ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZSBvYmplY3QKPiArICogQGNvbm5lY3RvcjogY29ubmVjdG9y IHRvIGdldCBzdGF0ZSBvYmplY3QgZm9yCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJu cyB0aGUgY29ubmVjdG9yIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29ubmVjdG9yLAo+ICsgKiBhbGxv Y2F0aW5nIGl0IGlmIG5lZWRlZC4gSXQgd2lsbCBhbHNvIGdyYWIgdGhlIHJlbGV2YW50IGNvbm5l Y3RvciBsb2NrIHRvCj4gKyAqIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdGF0ZSBpcyBjb25zaXN0ZW50 Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKgo+ICsgKiBFaXRoZXIgdGhlIGFsbG9jYXRlZCBz dGF0ZSBvciB0aGUgZXJyb3IgY29kZSBlbmNvZGVkIGludG8gdGhlIHBvaW50ZXIuIFdoZW4KPiAr ICogdGhlIGVycm9yIGlzIEVERUFETEsgdGhlbiB0aGUgdy93IG11dGV4IGNvZGUgaGFzIGRldGVj dGVkIGEgZGVhZGxvY2sgYW5kIHRoZQo+ICsgKiBlbnRpcmUgYXRvbWljIHNlcXVlbmNlIG11c3Qg YmUgcmVzdGFydGVkLiBBbGwgb3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4KPiArICovCj4gK3N0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICoKPiArZHJtX2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRl KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArICAgICAgIGludCBy ZXQsIGluZGV4Owo+ICsgICAgICAgc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmNv bm5lY3Rvci0+ZGV2LT5tb2RlX2NvbmZpZzsKPiArICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9y X3N0YXRlICpjb25uZWN0b3Jfc3RhdGU7Cj4gKwo+ICsgICAgICAgaW5kZXggPSBkcm1fY29ubmVj dG9yX2luZGV4KGNvbm5lY3Rvcik7Cj4gKwo+ICsgICAgICAgaWYgKHN0YXRlLT5jb25uZWN0b3Jf c3RhdGVzW2luZGV4XSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLT5jb25uZWN0b3Jf c3RhdGVzW2luZGV4XTsKPiArCj4gKyAgICAgICByZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZjb25m aWctPmNvbm5lY3Rpb25fbXV0ZXgsIHN0YXRlLT5hY3F1aXJlX2N0eCk7Cj4gKyAgICAgICBpZiAo cmV0KQo+ICsgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsKPiArICAgICAg IGNvbm5lY3Rvcl9zdGF0ZSA9IGNvbm5lY3Rvci0+ZnVuY3MtPmF0b21pY19kdXBsaWNhdGVfc3Rh dGUoY29ubmVjdG9yKTsKPiArICAgICAgIGlmICghY29ubmVjdG9yX3N0YXRlKQo+ICsgICAgICAg ICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKyAgICAgICBzdGF0ZS0+Y29u bmVjdG9yX3N0YXRlc1tpbmRleF0gPSBjb25uZWN0b3Jfc3RhdGU7Cj4gKyAgICAgICBzdGF0ZS0+ Y29ubmVjdG9yc1tpbmRleF0gPSBjb25uZWN0b3I7Cj4gKyAgICAgICBjb25uZWN0b3Jfc3RhdGUt PnN0YXRlID0gc3RhdGU7Cj4gKwo+ICsgICAgICAgRFJNX0RFQlVHX0tNUygiQWRkZWQgW0NPTk5F Q1RPUjolZF0gJXAgc3RhdGUgdG8gJXBcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgIGNvbm5l Y3Rvci0+YmFzZS5pZCwgY29ubmVjdG9yX3N0YXRlLCBzdGF0ZSk7Cj4gKwo+ICsgICAgICAgaWYg KGNvbm5lY3Rvcl9zdGF0ZS0+Y3J0Yykgewo+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gKwo+ICsgICAgICAgICAgICAgICBjcnRjX3N0YXRlID0g ZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yX3N0YXRlLT5jcnRjKTsK PiArICAgICAgICAgICAgICAgaWYgKElTX0VSUihjcnRjX3N0YXRlKSkKPiArICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gRVJSX0NBU1QoY3J0Y19zdGF0ZSk7Cj4gKyAgICAgICB9Cj4gKwo+ ICsgICAgICAgcmV0dXJuIGNvbm5lY3Rvcl9zdGF0ZTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRy bV9hdG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0ZSk7Cj4gKwo+ICsvKioKPiArICogZHJtX2F0b21p Y19zZXRfY3J0Y19mb3JfcGxhbmUgLSBzZXQgY3J0YyBmb3IgcGxhbmUKPiArICogQHBsYW5lX3N0 YXRlOiBhdG9taWMgc3RhdGUgb2JqZWN0IGZvciB0aGUgcGxhbmUKPiArICogQGNydGM6IGNydGMg dG8gdXNlIGZvciB0aGUgcGxhbmUKPiArICoKPiArICogQ2hhbmdpbmcgdGhlIGFzc2lnbmVkIGNy dGMgZm9yIGEgcGxhbmUgcmVxdWlyZXMgdXMgdG8gZ3JhYiB0aGUgbG9jayBhbmQgc3RhdGUKPiAr ICogZm9yIHRoZSBuZXcgY3J0YywgYXMgbmVlZGVkLiBUaGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUg b2YgYWxsIHRoZXNlIGRldGFpbHMKPiArICogYmVzaWRlcyB1cGRhdGluZyB0aGUgcG9pbnRlciBp biB0aGUgc3RhdGUgb2JqZWN0IGl0c2VsZi4KPiArICoKPiArICogUmV0dXJuczoKPiArICogMCBv biBzdWNjZXNzIG9yIGNhbiBmYWlsIHdpdGggLUVERUFETEsgb3IgLUVOT01FTS4KPiArICovCj4g K2ludAo+ICtkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCj4gK3sKPiArICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZTsKPiArCj4gKyAgICAgICBpZiAoY3J0Yykgewo+ICsgICAgICAgICAgICAgICBjcnRj X3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShwbGFuZV9zdGF0ZS0+c3RhdGUsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy dGMpOwo+ICsgICAgICAgICAgICAgICBpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwo+ICsgICAgICAgfQo+ ICsKPiArICAgICAgIHBsYW5lX3N0YXRlLT5jcnRjID0gY3J0YzsKPiArCj4gKyAgICAgICBpZiAo Y3J0YykKPiArICAgICAgICAgICAgICAgRFJNX0RFQlVHX0tNUygiTGluayBwbGFuZSBzdGF0ZSAl cCB0byBbQ1JUQzolZF1cbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmVf c3RhdGUsIGNydGMtPmJhc2UuaWQpOwo+ICsgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICBE Uk1fREVCVUdfS01TKCJMaW5rIHBsYW5lIHN0YXRlICVwIHRvIFtOT0NSVENdXG4iLCBwbGFuZV9z dGF0ZSk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1f YXRvbWljX3NldF9jcnRjX2Zvcl9wbGFuZSk7Cj4gKwo+ICsvKioKPiArICogZHJtX2F0b21pY19z ZXRfY3J0Y19mb3JfY29ubmVjdG9yIC0gc2V0IGNydGMgZm9yIGNvbm5lY3Rvcgo+ICsgKiBAY29u bl9zdGF0ZTogYXRvbWljIHN0YXRlIG9iamVjdCBmb3IgdGhlIGNvbm5lY3Rvcgo+ICsgKiBAY3J0 YzogY3J0YyB0byB1c2UgZm9yIHRoZSBjb25uZWN0b3IKPiArICoKPiArICogQ2hhbmdpbmcgdGhl IGFzc2lnbmVkIGNydGMgZm9yIGEgY29ubmVjdG9yIHJlcXVpcmVzIHVzIHRvIGdyYWIgdGhlIGxv Y2sgYW5kCj4gKyAqIHN0YXRlIGZvciB0aGUgbmV3IGNydGMsIGFzIG5lZWRlZC4gVGhpcyBmdW5j dGlvbiB0YWtlcyBjYXJlIG9mIGFsbCB0aGVzZQo+ICsgKiBkZXRhaWxzIGJlc2lkZXMgdXBkYXRp bmcgdGhlIHBvaW50ZXIgaW4gdGhlIHN0YXRlIG9iamVjdCBpdHNlbGYuCj4gKyAqCj4gKyAqIFJl dHVybnM6Cj4gKyAqIDAgb24gc3VjY2VzcyBvciBjYW4gZmFpbCB3aXRoIC1FREVBRExLIG9yIC1F Tk9NRU0uCj4gKyAqLwo+ICtpbnQKPiArZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfY29ubmVjdG9y KHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArICAgICAg IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiArCj4gKyAgICAgICBpZiAoY3J0 Yykgewo+ICsgICAgICAgICAgICAgICBjcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19z dGF0ZShjb25uX3N0YXRlLT5zdGF0ZSwgY3J0Yyk7Cj4gKyAgICAgICAgICAgICAgIGlmIChJU19F UlIoY3J0Y19zdGF0ZSkpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIo Y3J0Y19zdGF0ZSk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgY29ubl9zdGF0ZS0+Y3J0YyA9 IGNydGM7Cj4gKwo+ICsgICAgICAgaWYgKGNydGMpCj4gKyAgICAgICAgICAgICAgIERSTV9ERUJV R19LTVMoIkxpbmsgY29ubmVjdG9yIHN0YXRlICVwIHRvIFtDUlRDOiVkXVxuIiwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25uX3N0YXRlLCBjcnRjLT5iYXNlLmlkKTsKPiArICAg ICAgIGVsc2UKPiArICAgICAgICAgICAgICAgRFJNX0RFQlVHX0tNUygiTGluayBjb25uZWN0b3Ig c3RhdGUgJXAgdG8gW05PQ1JUQ11cbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29ubl9zdGF0ZSk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJP TChkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3IpOwo+ICsKPiArLyoqCj4gKyAqIGRy bV9hdG9taWNfYWRkX2FmZmVjdGVkX2Nvbm5lY3RvcnMgLSBhZGQgY29ubmVjdG9ycyBmb3IgY3J0 Ywo+ICsgKiBAc3RhdGU6IGF0b21pYyBzdGF0ZQo+ICsgKiBAY3J0YzogRFJNIGNydGMKPiArICoK PiArICogVGhpcyBmdW5jdGlvbiB3YWxrcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBh ZGRzIGFsbCBjb25uZWN0b3JzCj4gKyAqIGN1cnJlbnRseSB1c2luZyBAY3J0YyB0byB0aGUgYXRv bWljIGNvbmZpZ3VyYXRpb24gQHN0YXRlLiBOb3RlIHRoYXQgdGhpcwo+ICsgKiBmdW5jdGlvbiBt dXN0IGFjcXVpcmUgdGhlIGNvbm5lY3Rpb24gbXV0ZXguIFRoaXMgY2FuIHBvdGVudGlhbGx5IGNh dXNlCj4gKyAqIHVubmVlZGVkIHNlcmFsaXphdGlvbiBpZiB0aGUgdXBkYXRlIGlzIGp1c3QgZm9y IHRoZSBwbGFuZXMgb24gb25lIGNydGMuIEhlbmNlCj4gKyAqIGRyaXZlcnMgYW5kIGhlbHBlcnMg c2hvdWxkIG9ubHkgY2FsbCB0aGlzIHdoZW4gcmVhbGx5IG5lZWRlZCAoZS5nLiB3aGVuIGEKPiAr ICogZnVsbCBtb2Rlc2V0IG5lZWRzIHRvIGhhcHBlbiBkdWUgdG8gc29tZSBjaGFuZ2UpLgo+ICsg Kgo+ICsgKiBSZXR1cm5zOgo+ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgY2FuIGZhaWwgd2l0aCAtRURF QURMSyBvciAtRU5PTUVNLgo+ICsgKi8KPiAraW50Cj4gK2RybV9hdG9taWNfYWRkX2FmZmVjdGVk X2Nvbm5lY3RvcnMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKyAg ICAgICBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmc3RhdGUtPmRldi0+bW9kZV9j b25maWc7Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsgICAg ICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7Cj4gKyAgICAgICBpbnQg cmV0Owo+ICsKPiArICAgICAgIHJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmNvbmZpZy0+Y29ubmVj dGlvbl9tdXRleCwgc3RhdGUtPmFjcXVpcmVfY3R4KTsKPiArICAgICAgIGlmIChyZXQpCj4gKyAg ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgICAgRFJNX0RFQlVHX0tNUygiQWRk aW5nIGFsbCBjdXJyZW50IGNvbm5lY3RvcnMgZm9yIFtDUlRDOiVkXSB0byAlcFxuIiwKPiArICAg ICAgICAgICAgICAgICAgICAgY3J0Yy0+YmFzZS5pZCwgc3RhdGUpOwo+ICsKPiArICAgICAgIC8q Cj4gKyAgICAgICAgKiBDaGFuZ2VkIGNvbm5lY3RvcnMgYXJlIGFscmVhZHkgaW4gQHN0YXRlLCBz byBvbmx5IG5lZWQgdG8gbG9vayBhdCB0aGUKPiArICAgICAgICAqIGN1cnJlbnQgY29uZmlndXJh dGlvbi4KPiArICAgICAgICAqLwo+ICsgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0 b3IsICZjb25maWctPmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7Cj4gKyAgICAgICAgICAgICAgIGlm IChjb25uZWN0b3ItPnN0YXRlLT5jcnRjICE9IGNydGMpCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgICAgICAgICBjb25uX3N0YXRlID0gZHJtX2F0b21p Y19nZXRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IpOwo+ICsgICAgICAgICAgICAg ICBpZiAoSVNfRVJSKGNvbm5fc3RhdGUpKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBQVFJfRVJSKGNvbm5fc3RhdGUpOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldHVybiAw Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9y cyk7Cj4gKwo+ICsvKioKPiArICogZHJtX2F0b21pY19jb25uZWN0b3JzX2Zvcl9jcnRjIC0gY291 bnQgbnVtYmVyIG9mIGNvbm5lY3RlZCBvdXRwdXRzCj4gKyAqIEBzdGF0ZTogYXRvbWljIHN0YXRl Cj4gKyAqIEBjcnRjOiBEUk0gY3J0Ywo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGNvdW50cyBh bGwgY29ubmVjdG9ycyB3aGljaCB3aWxsIGJlIGNvbm5lY3RlZCB0byBAY3J0Ywo+ICsgKiBhY2Nv cmRpbmcgdG8gQHN0YXRlLiBVc2VmdWwgdG8gcmVjb21wdXRlIHRoZSBlbmFibGUgc3RhdGUgZm9y IEBjcnRjLgo+ICsgKi8KPiAraW50Cj4gK2RybV9hdG9taWNfY29ubmVjdG9yc19mb3JfY3J0Yyhz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsgICAgICAgaW50IG5jb25uZWN0 b3JzID0gc3RhdGUtPmRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvcjsKPiArICAgICAgIGlu dCBpLCBudW1fY29ubmVjdGVkX2Nvbm5lY3RvcnMgPSAwOwo+ICsKPiArICAgICAgIGZvciAoaSA9 IDA7IGkgPCBuY29ubmVjdG9yczsgaSsrKSB7Cj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOwo+ICsKPiArICAgICAgICAgICAgICAgY29ubl9z dGF0ZSA9IHN0YXRlLT5jb25uZWN0b3Jfc3RhdGVzW2ldOwo+ICsKPiArICAgICAgICAgICAgICAg aWYgKGNvbm5fc3RhdGUgJiYgY29ubl9zdGF0ZS0+Y3J0YyA9PSBjcnRjKQo+ICsgICAgICAgICAg ICAgICAgICAgICAgIG51bV9jb25uZWN0ZWRfY29ubmVjdG9ycysrOwo+ICsgICAgICAgfQo+ICsK PiArICAgICAgIERSTV9ERUJVR19LTVMoIlN0YXRlICVwIGhhcyAlaSBjb25uZWN0b3JzIGZvciBb Q1JUQzolZF1cbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgIHN0YXRlLCBudW1fY29ubmVjdGVk X2Nvbm5lY3RvcnMsIGNydGMtPmJhc2UuaWQpOwo+ICsKPiArICAgICAgIHJldHVybiBudW1fY29u bmVjdGVkX2Nvbm5lY3RvcnM7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2Nvbm5l Y3RvcnNfZm9yX2NydGMpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9hdG9taWNfbGVnYWN5X2JhY2tv ZmYgLSBsb2NraW5nIGJhY2tvZmYgZm9yIGxlZ2FjeSBpb2N0bHMKPiArICogQHN0YXRlOiBhdG9t aWMgc3RhdGUKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBieSBsZWdh Y3kgZW50cnkgcG9pbnRzIHdoaWNoIGRvbid0IHVuZGVyc3RhbmQKPiArICogLUVERUFETEsgc2Vt YW50aWNzLiBGb3Igc2ltcGxpY2l0eSB0aGlzIG9uZSB3aWxsIGdyYWIgYWxsIG1vZGVzZXQgbG9j a3MgYWZ0ZXIKPiArICogIHRoZSBzbG93cGF0aCBjb21wbGV0ZWQuCj4gKyAqLwo+ICt2b2lkIGRy bV9hdG9taWNfbGVnYWN5X2JhY2tvZmYoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ ICt7Cj4gKyAgICAgICBpbnQgcmV0Owo+ICsKPiArcmV0cnk6Cj4gKyAgICAgICBkcm1fbW9kZXNl dF9iYWNrb2ZmKHN0YXRlLT5hY3F1aXJlX2N0eCk7Cj4gKwo+ICsgICAgICAgcmV0ID0gZHJtX21v ZGVzZXRfbG9jaygmc3RhdGUtPmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmFjcXVpcmVfY3R4KTsKPiArICAg ICAgIGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgIGdvdG8gcmV0cnk7Cj4gKyAgICAgICByZXQg PSBkcm1fbW9kZXNldF9sb2NrX2FsbF9jcnRjcyhzdGF0ZS0+ZGV2LAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmFjcXVpcmVfY3R4KTsKPiArICAgICAg IGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgIGdvdG8gcmV0cnk7Cj4gK30KPiArRVhQT1JUX1NZ TUJPTChkcm1fYXRvbWljX2xlZ2FjeV9iYWNrb2ZmKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fYXRv bWljX2NoZWNrX29ubHkgLSBjaGVjayB3aGV0aGVyIGEgZ2l2ZW4gY29uZmlnIHdvdWxkIHdvcmsK PiArICogQHN0YXRlOiBhdG9taWMgY29uZmlndXJhdGlvbiB0byBjaGVjawo+ICsgKgo+ICsgKiBO b3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gcmV0dXJuIC1FREVBRExLIGlmIHRoZSBkcml2ZXIg bmVlZGVkIHRvIGFjcXVpcmUKPiArICogbW9yZSBsb2NrcyBidXQgZW5jb3VudGVyZWQgYSBkZWFk bG9jay4gVGhlIGNhbGxlciBtdXN0IHRoZW4gZG8gdGhlIHVzdWFsIHcvdwo+ICsgKiBiYWNrb2Zm IGRhbmNlIGFuZCByZXN0YXJ0Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiAwIG9uIHN1Y2Nl c3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiArICovCj4gK2ludCBkcm1fYXRv bWljX2NoZWNrX29ubHkoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKyAg ICAgICBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmc3RhdGUtPmRldi0+bW9kZV9j b25maWc7Cj4gKwo+ICsgICAgICAgRFJNX0RFQlVHX0tNUygiY2hlY2tpbmcgJXBcbiIsIHN0YXRl KTsKPiArCj4gKyAgICAgICBpZiAoY29uZmlnLT5mdW5jcy0+YXRvbWljX2NoZWNrKQo+ICsgICAg ICAgICAgICAgICByZXR1cm4gY29uZmlnLT5mdW5jcy0+YXRvbWljX2NoZWNrKHN0YXRlLT5kZXYs IHN0YXRlKTsKPiArICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gK30K PiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2NoZWNrX29ubHkpOwo+ICsKPiArLyoqCj4gKyAq IGRybV9hdG9taWNfY29tbWl0IC0gY29tbWl0IGNvbmZpZ3VyYXRpb24gYXRvbWljYWxseQo+ICsg KiBAc3RhdGU6IGF0b21pYyBjb25maWd1cmF0aW9uIHRvIGNoZWNrCj4gKyAqCj4gKyAqIE5vdGUg dGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gLUVERUFETEsgaWYgdGhlIGRyaXZlciBuZWVk ZWQgdG8gYWNxdWlyZQo+ICsgKiBtb3JlIGxvY2tzIGJ1dCBlbmNvdW50ZXJlZCBhIGRlYWRsb2Nr LiBUaGUgY2FsbGVyIG11c3QgdGhlbiBkbyB0aGUgdXN1YWwgdy93Cj4gKyAqIGJhY2tvZmYgZGFu Y2UgYW5kIHJlc3RhcnQuCj4gKyAqCj4gKyAqIEFsc28gbm90ZSB0aGF0IG9uIHN1Y2Nlc3NmdWwg ZXhlY3V0aW9uIG93bmVyc2hpcCBvZiBAc3RhdGUgaXMgdHJhbnNmZXJyZWQKPiArICogZnJvbSB0 aGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gdG8gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gVGhlIGNh bGxlciBtdXN0IG5vdAo+ICsgKiBmcmVlIG9yIGluIGFueSBvdGhlciB3YXkgYWNjZXNzIEBzdGF0 ZS4gSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIHRoZW4gdGhlIGNhbGxlcgo+ICsgKiBtdXN0IGNsZWFu IHVwIEBzdGF0ZSBpdHNlbGYuCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIDAgb24gc3VjY2Vz cywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ICsgKi8KPiAraW50IGRybV9hdG9t aWNfY29tbWl0KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICsgICAgICAg c3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJnN0YXRlLT5kZXYtPm1vZGVfY29uZmln Owo+ICsgICAgICAgaW50IHJldDsKPiArCj4gKyAgICAgICByZXQgPSBkcm1fYXRvbWljX2NoZWNr X29ubHkoc3RhdGUpOwo+ICsgICAgICAgaWYgKHJldCkKPiArICAgICAgICAgICAgICAgcmV0dXJu IHJldDsKPiArCj4gKyAgICAgICBEUk1fREVCVUdfS01TKCJjb21taXRpbmcgJXBcbiIsIHN0YXRl KTsKPiArCj4gKyAgICAgICByZXR1cm4gY29uZmlnLT5mdW5jcy0+YXRvbWljX2NvbW1pdChzdGF0 ZS0+ZGV2LCBzdGF0ZSwgZmFsc2UpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19j b21taXQpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9hdG9taWNfYXN5bmNfY29tbWl0IC0gYXRvbWlj JmFzeW5jIGNvbmZpZ3VyYXRpb24gY29tbWl0Cj4gKyAqIEBzdGF0ZTogYXRvbWljIGNvbmZpZ3Vy YXRpb24gdG8gY2hlY2sKPiArICoKPiArICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHJl dHVybiAtRURFQURMSyBpZiB0aGUgZHJpdmVyIG5lZWRlZCB0byBhY3F1aXJlCj4gKyAqIG1vcmUg bG9ja3MgYnV0IGVuY291bnRlcmVkIGEgZGVhZGxvY2suIFRoZSBjYWxsZXIgbXVzdCB0aGVuIGRv IHRoZSB1c3VhbCB3L3cKPiArICogYmFja29mZiBkYW5jZSBhbmQgcmVzdGFydC4KPiArICoKPiAr ICogQWxzbyBub3RlIHRoYXQgb24gc3VjY2Vzc2Z1bCBleGVjdXRpb24gb3duZXJzaGlwIG9mIEBz dGF0ZSBpcyB0cmFuc2ZlcnJlZAo+ICsgKiBmcm9tIHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlv biB0byB0aGUgZnVuY3Rpb24gaXRzZWxmLiBUaGUgY2FsbGVyIG11c3Qgbm90Cj4gKyAqIGZyZWUg b3IgaW4gYW55IG90aGVyIHdheSBhY2Nlc3MgQHN0YXRlLiBJZiB0aGUgZnVuY3Rpb24gZmFpbHMg dGhlbiB0aGUgY2FsbGVyCj4gKyAqIG11c3QgY2xlYW4gdXAgQHN0YXRlIGl0c2VsZi4KPiArICoK PiArICogUmV0dXJuczoKPiArICogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9u IGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQgZHJtX2F0b21pY19hc3luY19jb21taXQoc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX21vZGVfY29u ZmlnICpjb25maWcgPSAmc3RhdGUtPmRldi0+bW9kZV9jb25maWc7Cj4gKyAgICAgICBpbnQgcmV0 Owo+ICsKPiArICAgICAgIHJldCA9IGRybV9hdG9taWNfY2hlY2tfb25seShzdGF0ZSk7Cj4gKyAg ICAgICBpZiAocmV0KQo+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgICAg IERSTV9ERUJVR19LTVMoImNvbW1pdGluZyAlcCBhc3luY2hyb25vdXNseVxuIiwgc3RhdGUpOwo+ ICsKPiArICAgICAgIHJldHVybiBjb25maWctPmZ1bmNzLT5hdG9taWNfY29tbWl0KHN0YXRlLT5k ZXYsIHN0YXRlLCB0cnVlKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfYXN5bmNf Y29tbWl0KTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oIGIvaW5jbHVk ZS9kcm0vZHJtX2F0b21pYy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLjViYjE1ZjU1MGM0Mgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL2RybS9k cm1fYXRvbWljLmgKPiBAQCAtMCwwICsxLDY1IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykg MjAxNCBSZWQgSGF0Cj4gKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3JwLgo+ICsgKgo+ ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KPiArICogYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKPiArICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCj4gKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ICsgKiBBUklTSU5H IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IKPiArICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBB dXRob3JzOgo+ICsgKiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+Cj4gKyAqIERhbmll bCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBE Uk1fQVRPTUlDX0hfCj4gKyNkZWZpbmUgRFJNX0FUT01JQ19IXwo+ICsKPiArc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKiBfX211c3RfY2hlY2sKPiArZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKPiArdm9pZCBkcm1fYXRvbWljX3N0YXRlX2NsZWFyKHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gK3ZvaWQgZHJtX2F0b21pY19zdGF0ZV9mcmVl KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gKwo+ICtzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKiBfX211c3RfY2hlY2sKPiArZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpOwo+ICtzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICogX19tdXN0X2No ZWNrCj4gK2RybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSk7Cj4gK3N0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICogX19tdXN0X2NoZWNrCj4gK2Ry bV9hdG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpOwo+ICsKPiAraW50IF9fbXVzdF9jaGVjawo+ICtkcm1fYXRvbWljX3NldF9j cnRjX2Zvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICtpbnQg X19tdXN0X2NoZWNrCj4gK2RybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nvbm5lY3RvcihzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiAraW50IF9fbXVzdF9jaGVjawo+ ICtkcm1fYXRvbWljX2FkZF9hZmZlY3RlZF9jb25uZWN0b3JzKHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk cm1fY3J0YyAqY3J0Yyk7Cj4gK2ludAo+ICtkcm1fYXRvbWljX2Nvbm5lY3RvcnNfZm9yX2NydGMo c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICsKPiArdm9pZCBkcm1fYXRvbWljX2xl Z2FjeV9iYWNrb2ZmKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gKwo+ICtpbnQg X19tdXN0X2NoZWNrIGRybV9hdG9taWNfY2hlY2tfb25seShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpOwo+ICtpbnQgX19tdXN0X2NoZWNrIGRybV9hdG9taWNfY29tbWl0KHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gK2ludCBfX211c3RfY2hlY2sgZHJtX2F0b21pY19h c3luY19jb21taXQoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiArCj4gKyNlbmRp ZiAvKiBEUk1fQVRPTUlDX0hfICovCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRj LmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCj4gaW5kZXggMzU1NDg2OGRiZjA5Li4wN2M4OGFk NjQyMzQgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAo+ICsrKyBiL2luY2x1 ZGUvZHJtL2RybV9jcnRjLmgKPiBAQCAtNzk0LDYgKzc5NCwzMiBAQCBzdHJ1Y3QgZHJtX2JyaWRn ZSB7Cj4gIH07Cj4KPiAgLyoqCj4gKyAqIHN0cnVjdCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAt IHRoZSBnbG9iYWwgc3RhdGUgb2JqZWN0IGZvciBhdG9taWMgdXBkYXRlcwo+ICsgKiBAZGV2OiBw YXJlbnQgRFJNIGRldmljZQo+ICsgKiBAZmxhZ3M6IHN0YXRlIGZsYWdzIGxpa2UgYXN5bmMgdXBk YXRlCj4gKyAqIEBwbGFuZXM6IHBvaW50ZXIgdG8gYXJyYXkgb2YgcGxhbmUgcG9pbnRlcnMKPiAr ICogQHBsYW5lX3N0YXRlczogcG9pbnRlciB0byBhcnJheSBvZiBwbGFuZSBzdGF0ZXMgcG9pbnRl cnMKPiArICogQGNydGNzOiBwb2ludGVyIHRvIGFycmF5IG9mIENSVEMgcG9pbnRlcnMKPiArICog QGNydGNfc3RhdGVzOiBwb2ludGVyIHRvIGFycmF5IG9mIENSVEMgc3RhdGVzIHBvaW50ZXJzCj4g KyAqIEBjb25uZWN0b3JzOiBwb2ludGVyIHRvIGFycmF5IG9mIGNvbm5lY3RvciBwb2ludGVycwo+ ICsgKiBAY29ubmVjdG9yX3N0YXRlczogcG9pbnRlciB0byBhcnJheSBvZiBjb25uZWN0b3Igc3Rh dGVzIHBvaW50ZXJzCj4gKyAqIEBhY3F1aXJlX2N0eDogYWNxdWlyZSBjb250ZXh0IGZvciB0aGlz IGF0b21pYyBtb2Rlc2V0IHN0YXRlIHVwZGF0ZQo+ICsgKi8KPiArc3RydWN0IGRybV9hdG9taWNf c3RhdGUgewo+ICsgICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldjsKPiArICAgICAgIHVpbnQz Ml90IGZsYWdzOwo+ICsgICAgICAgc3RydWN0IGRybV9wbGFuZSAqKnBsYW5lczsKPiArICAgICAg IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKipwbGFuZV9zdGF0ZXM7Cj4gKyAgICAgICBzdHJ1Y3Qg ZHJtX2NydGMgKipjcnRjczsKPiArICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqKmNydGNf c3RhdGVzOwo+ICsgICAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3JzOwo+ICsg ICAgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKipjb25uZWN0b3Jfc3RhdGVzOwo+ICsK PiArICAgICAgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqYWNxdWlyZV9jdHg7Cj4g K307Cj4gKwo+ICsKPiArLyoqCj4gICAqIHN0cnVjdCBkcm1fbW9kZV9zZXQgLSBuZXcgdmFsdWVz IGZvciBhIENSVEMgY29uZmlnIGNoYW5nZQo+ICAgKiBAZmI6IGZyYW1lYnVmZmVyIHRvIHVzZSBm b3IgbmV3IGNvbmZpZwo+ICAgKiBAY3J0YzogQ1JUQyB3aG9zZSBjb25maWd1cmF0aW9uIHdlJ3Jl IGFib3V0IHRvIGNoYW5nZQo+IEBAIC04MjQsNiArODUwLDkgQEAgc3RydWN0IGRybV9tb2RlX3Nl dCB7Cj4gICAqIHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgLSBiYXNpYyBkcml2ZXIgcHJv dmlkZWQgbW9kZSBzZXR0aW5nIGZ1bmN0aW9ucwo+ICAgKiBAZmJfY3JlYXRlOiBjcmVhdGUgYSBu ZXcgZnJhbWVidWZmZXIgb2JqZWN0Cj4gICAqIEBvdXRwdXRfcG9sbF9jaGFuZ2VkOiBmdW5jdGlv biB0byBoYW5kbGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24gY2hhbmdlcwo+ICsgKiBAYXRvbWljX2No ZWNrOiBjaGVjayB3aGV0aGVyIGEgZ2l2ZSBhdG9taWMgc3RhdGUgdXBkYXRlIGlzIHBvc3NpYmxl Cj4gKyAqIEBhdG9taWNfY29tbWl0OiBjb21taXQgYW4gYXRvbWljIHN0YXRlIHVwZGF0ZSBwcmV2 aW91c2x5IHZlcmlmaWVkIHdpdGgKPiArICogICAgIGF0b21pY19jaGVjaygpCj4gICAqCj4gICAq IFNvbWUgZ2xvYmFsIChpLmUuIG5vdCBwZXItQ1JUQywgY29ubmVjdG9yLCBldGMpIG1vZGUgc2V0 dGluZyBmdW5jdGlvbnMgdGhhdAo+ICAgKiBpbnZvbHZlIGRyaXZlcnMuCj4gQEAgLTgzMyw2ICs4 NjIsMTIgQEAgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyB7Cj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYs Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy bV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKTsKPiAgICAgICAgIHZvaWQgKCpvdXRwdXRfcG9sbF9j aGFuZ2VkKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiArCj4gKyAgICAgICBpbnQgKCphdG9t aWNfY2hlY2spKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICphKTsKPiArICAgICAgIGludCAoKmF0b21p Y19jb21taXQpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqYSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvb2wgYXN5bmMpOwo+ICB9Owo+Cj4gIC8qKgo+IC0tCj4gMi4xLjEKPgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=