From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ramalingam C Subject: Re: [PATCH i-g-t v12] tests/kms_frontbuffer_tracking: Including DRRS test coverage Date: Sat, 6 Jan 2018 19:07:48 +0530 Message-ID: References: <1514991727-6817-1-git-send-email-lohith.bs@intel.com> <1515152429-3157-1-git-send-email-lohith.bs@intel.com> <20180105175521.z5ocjubtc5hvcqnt@intel.com> <266a2372-5ffb-fd5a-87c3-ec889023a9e8@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 08C2C89B3B for ; Sat, 6 Jan 2018 13:41:43 +0000 (UTC) In-Reply-To: <266a2372-5ffb-fd5a-87c3-ec889023a9e8@intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Rodrigo Vivi , Lohith BS Cc: paulo.r.zanoni@intel.com, jari.tahvanainen@intel.com, daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, ankit.k.nautiyal@intel.com List-Id: intel-gfx@lists.freedesktop.org CgpPbiBTYXR1cmRheSAwNiBKYW51YXJ5IDIwMTggMDQ6MTggUE0sIFJhbWFsaW5nYW0gQyB3cm90 ZToKPgo+Cj4gT24gRnJpZGF5IDA1IEphbnVhcnkgMjAxOCAxMToyNSBQTSwgUm9kcmlnbyBWaXZp IHdyb3RlOgo+PiBPbiBGcmksIEphbiAwNSwgMjAxOCBhdCAxMTo0MDoyOUFNICswMDAwLCBMb2hp dGggQlMgd3JvdGU6Cj4+PiBEeW5hbWljIFJlZnJlc2ggUmF0ZSBTd2l0Y2goRFJSUykgaXMgdXNl ZCB0byBzd2l0Y2ggdGhlIHBhbmVsJ3MKPj4+IHJlZnJlc2ggcmF0ZSB0byB0aGUgbG93ZXN0IHZy ZWZyZXNoIHN1cHBvcnRlZCBieSBwYW5lbCwgd2hlbiBmcmFtZSBpcwo+Pj4gbm90IGZsaXBwZWQg Zm9yIG1vcmUgdGhhbiBhIFNlYy4KPj4+Cj4+PiBJbiBrZXJuZWwsIERSUlMgdXNlcyB0aGUgZnJv bnQgYnVmZmVyIHRyYWNraW5nIGluZnJhc3RydWN0dXJlLgo+Pj4gSGVuY2UgRFJSUyB0ZXN0IGNv dmVyYWdlIGlzIGFkZGVkIGFsb25nIHdpdGggb3RoZXIgZnJvbnRidWZmZXIgdHJhY2tpbmcKPj4+ IGJhc2VkIGZlYXR1cmVzIHN1Y2ggYXMgRkJDIGFuZCBQU1IgdGVzdHMuCj4+Pgo+Pj4gSGVyZSwg d2UgYXJlIHRlc3RpbmcgRFJSUyB3aXRoIG90aGVyIGZlYXR1cmVzIGluIGFsbCBwb3NzaWJsZQo+ Pj4gY29tYmluYXRpb25zLCBpbiBhbGwgcmVxdWlyZWQgdGVzdCBjYXNlcywgdG8gY2FwdHVyZSBh bnkgcG9zc2libGUKPj4+IHJlZ3Jlc3Npb24uCj4+Pgo+Pj4gdjI6IEFkZHJlc3NlZCB0aGUgY29t bWVudHMgYW5kIHN1Z2dlc3Rpb25zIGZyb20gVmxhZCwgTWFyaXVzLgo+Pj4gwqDCoMKgwqAgVGhl IHNpZ25vZmYgZGV0YWlscyBmcm9tIHRoZSBlYXJsaWVyIHdvcmsgYXJlIGFsc28gaW5jbHVkZWQu Cj4+Pgo+Pj4gdjM6IE1vZGlmaWVkIHZibGFuayByYXRlIGNhbGN1bGF0aW9uIGJ5IHVzaW5nIHJl cGx5LXNlcXVlbmNlLAo+Pj4gwqDCoMKgwqAgcHJvdmlkZWQgYnkgZHJtV2FpdFZCbGFuaywgYXMg c3VnZ2VzdGVkIGJ5IENocmlzIFdpbHNvbi4KPj4+Cj4+PiB2NDogQXMgc3VnZ2VzdGVkIGZyb20g Q2hyaXMgV2lsc29uIGFuZCBEYW5pZWwgVmV0dGVyCj4+PiDCoMKgwqDCoCAxKSBBdm9pZGVkIHVz aW5nIHB0aHJlYWQgZm9yIGNhbGN1bGF0aW5nIHZibGFuayByZWZyZXNoIHJhdGUsCj4+PiDCoMKg wqDCoMKgwqDCoCBpbnN0ZWFkIHVzZWQgZHJtV2FpdFZCbGFuayByZXBseSBzZXF1ZW5jZS4KPj4+ IMKgwqDCoMKgIDIpIEF2b2lkZWQgdXNpbmcga2VybmVsLXNwZWNpZmljIGluZm8gbGlrZSB0cmFu c2l0aW9uYWwgZGVsYXlzLAo+Pj4gwqDCoMKgwqDCoMKgwqAgaW5zdGVhZCBwb2xsaW5nIG1lY2hh bmlzbSB3aXRoIHRpbWVvdXQgaXMgdXNlZC4KPj4+IMKgwqDCoMKgIDMpIEluY2x1ZGVkIGVkcC1E UlJTIGFzIGEgc3VidGVzdCBpbiBrbXNfZnJvbnRidWZmZXJfdHJhY2tpbmcuYywKPj4+IMKgwqDC oMKgwqDCoMKgIGluc3RlYWQgb2YgaGF2aW5nIGEgc2VwYXJhdGUgdGVzdC4KPj4+Cj4+PiB2NTog VGhpcyBwYXRjaCBhZGRzIERSUlMgYXMgYSBuZXcgZmVhdHVyZSBpbiB0aGUKPj4+IMKgwqDCoMKg IGttc19mcm9udGJ1ZmZlcl90cmFja2luZyBJR1QuCj4+PiDCoMKgwqDCoCBEUlJTIHN3aXRjaCB0 byBsb3dlciB2cmVmcmVzaCByYXRlIGlzIHRlc3RlZCBhdCBzbG93LWRyYXcgc3VidGVzdC4KPj4+ Cj4+PiDCoMKgwqDCoCBOb3RlOgo+Pj4gwqDCoMKgwqAgMSkgQ3VycmVudGx5IGtlcm5lbCBkb2Vz bid0IGhhdmUgc3VwcG9ydCB0byBlbmFibGUgYW5kIGRpc2FibGUKPj4+IMKgwqDCoMKgwqDCoMKg IHRoZSBEUlJTIGZlYXR1cmUgZHluYW1pY2FsbHkoYXMgaW4gY2FzZSBvZiBQU1IpLiBIZW5jZSBp ZiB0aGUKPj4+IMKgwqDCoMKgwqDCoMKgIHBhbmVsIHN1cHBvcnRzIERSUlMgaXQgd2lsbCBiZSBl bmFibGVkIGJ5IGRlZmF1bHQuCj4+Pgo+Pj4gwqDCoMKgwqAgVGhpcyBpcyBpbiBjb250aW51YXRp b24gb2YgbGFzdCBwYXRjaAo+Pj4gwqDCoMKgwqAiaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0 b3Aub3JnL3BhdGNoLzE2MjcyNi8iCj4+Pgo+Pj4gdjY6IFRoaXMgcGF0Y2ggYWRkcyBydW50aW1l IGVuYWJsZSBhbmQgZGlzYWJsZSBmZWF0dXJlIGZvciB0ZXN0aW5nIERSUlMKPj4+Cj4+PiB2Nzog VGhpcyBwYXRjaCBhZGRzIHJ1bnRpbWUgZW5hYmxlIGFuZCBkaXNhYmxlIGZlYXR1cmUgZm9yIHRl c3RpbmcgRFJSUwo+Pj4gwqDCoMKgwqAgdGhyb3VnaCBkZWJ1Z2ZzIGVudHJ5ICJpOTE1X2RycnNf Y3RsIi4KPj4+Cj4+PiB2ODogQ29tbWl0IG1lc3NhZ2UgaXMgdXBkYXRlZCB0byByZWZsZWN0IGN1 cnJlbnQgaW1wbGVtZW50YXRpb24uCj4+Pgo+Pj4gdjk6IEFkZHJlc3NlZCBQYXVsbyBaYW5vbmkg Y29tbWVudHMuCj4+PiDCoMKgwqDCoCBDaGVjayBmb3IgRFJSU19MT1cgYXQgdGVzdHMgd2l0aCBP RkZTQ1JFRU4gKyBGQlNfSU5ESVZJRFVBTC4KPj4+Cj4+PiB2MTA6IENvcnJlY3RlZCBEUlJTIHN0 YXRlIGV4cGVjdGF0aW9uIGluIHN1c3BlbmQgcmVsYXRlZCBzdWJ0ZXN0cy4KPj4+Cj4+PiB2MTE6 IFJlbW92aW5nIHRoZSBnbG9iYWwgZmxhZyBpc19wc3JfZHJyc19jb21ibyBbUm9kcmlnb10uCj4+ Pgo+Pj4gdjEyOiBSZXdyaXRpbmcgdGhlIERSUlMgaW5hY3RpdmUgZGVkdWN0aW9uIFtSb2RyaWdv XS4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBMb2hpdGggQlMgPGxvaGl0aC5ic0BpbnRlbC5jb20+ Cj4+PiBTaWduZWQtb2ZmLWJ5OiBha25hdXRpeSA8YW5raXQuay5uYXV0aXlhbEBpbnRlbC5jb20+ Cj4+IEkgd2FzIGFsbW9zdCBhZGRpbmcgdGhlIHJ2LWIgaGVyZSwgYnV0IEkgd2lsbCBzdGVwIGJh Y2sgd2hpbGUgQ0kgaXMgbm90Cj4+IGZ1bGx5IGhhcHB5IHdpdGggdGhlIHBhdGNoOgo+Pgo+PiBo dHRwczovL3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvc2VyaWVzLzMyODg4Lwo+Pgo+PiByZWdy ZXNzZWQgbWFueSBzdWItdGVzdHMgb24gc25iIGFuZCBoc3cuLi4KPiBSb2RyaWdvLCBwbGVhc2Ug c2hhcmUgdGhlIGxvZ3MgZm9yIHJlZ3Jlc3Npb25zLiBXZSB3aWxsIGFuYWx5emUgaXQuClBsZWFz ZSBpZ25vcmUgdGhpcy4gZm91bmQgaW4gdGhlIGFscmVhZHkgc2hhcmVkIGxpbmsuCi1SYW0KPgo+ IFRoYW5rcwo+IC1SYW0KPj4KPj4+IC0tLQo+Pj4gwqAgdGVzdHMva21zX2Zyb250YnVmZmVyX3Ry YWNraW5nLmMgfCAxNzggCj4+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0KPj4+IMKgIDEgZmlsZSBjaGFuZ2VkLCAxNzAgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMo LSkKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX2Zyb250YnVmZmVyX3RyYWNraW5nLmMg Cj4+PiBiL3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90cmFja2luZy5jCj4+PiBpbmRleCAxNjAxY2Fi Li40Yjg3MjczIDEwMDY0NAo+Pj4gLS0tIGEvdGVzdHMva21zX2Zyb250YnVmZmVyX3RyYWNraW5n LmMKPj4+ICsrKyBiL3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90cmFja2luZy5jCj4+PiBAQCAtMzQs NyArMzQsNyBAQAo+Pj4gwqAgwqAgwqAgSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3QgdGhlIEtl cm5lbCdzIGZyb250YnVmZmVyIHRyYWNraW5nIAo+Pj4gbWVjaGFuaXNtIGFuZCAiCj4+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICJpdHMgcmVsYXRlZCBmZWF0dXJlczogRkJDIGFuZCBQU1Ii KTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIml0cyByZWxhdGVkIGZlYXR1cmVzOiBG QkMsIFBTUiBhbmQgRFJSUyIpOwo+Pj4gwqAgwqAgLyoKPj4+IMKgwqAgKiBPbmUgb2YgdGhlIGFz cGVjdHMgb2YgdGhpcyB0ZXN0IGlzIHRoYXQsIGZvciBldmVyeSBzdWJ0ZXN0LCB3ZSAKPj4+IHRy eSBkaWZmZXJlbnQKPj4+IEBAIC0xMDUsOCArMTA1LDkgQEAgc3RydWN0IHRlc3RfbW9kZSB7Cj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgRkVBVFVSRV9OT05FwqAgPSAwLAo+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIEZFQVRVUkVfRkJDwqDCoCA9IDEsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgRkVBVFVS RV9QU1LCoMKgID0gMiwKPj4+IC3CoMKgwqDCoMKgwqDCoCBGRUFUVVJFX0NPVU5UID0gNCwKPj4+ IC3CoMKgwqDCoMKgwqDCoCBGRUFUVVJFX0RFRkFVTFQgPSA0LAo+Pj4gK8KgwqDCoMKgwqDCoMKg IEZFQVRVUkVfRFJSU8KgID0gNCwKPj4+ICvCoMKgwqDCoMKgwqDCoCBGRUFUVVJFX0NPVU5UID0g OCwKPj4+ICvCoMKgwqDCoMKgwqDCoCBGRUFUVVJFX0RFRkFVTFQgPSA4LAo+Pj4gwqDCoMKgwqDC oCB9IGZlYXR1cmU7Cj4+PiDCoCDCoMKgwqDCoMKgIC8qIFBvc3NpYmxlIHBpeGVsIGZvcm1hdHMu IFdlIGp1c3QgdXNlIEZPUk1BVF9ERUZBVUxUIGZvciAKPj4+IG1vc3QgdGVzdHMgYW5kCj4+PiBA QCAtMTU2LDYgKzE1Nyw3IEBAIHN0cnVjdCByZWN0IHsKPj4+IMKgIHN0cnVjdCB7Cj4+PiDCoMKg wqDCoMKgIGludCBmZDsKPj4+IMKgwqDCoMKgwqAgaW50IGRlYnVnZnM7Cj4+PiArwqDCoMKgIGlu dCBkcnJzX2RlYnVnZnNfZmQ7Cj4+PiDCoMKgwqDCoMKgIGRybU1vZGVSZXNQdHIgcmVzOwo+Pj4g wqDCoMKgwqDCoCBkcm1Nb2RlQ29ubmVjdG9yUHRyIGNvbm5lY3RvcnNbTUFYX0NPTk5FQ1RPUlNd Owo+Pj4gwqDCoMKgwqDCoCBkcm1Nb2RlRW5jb2RlclB0ciBlbmNvZGVyc1tNQVhfRU5DT0RFUlNd Owo+Pj4gQEAgLTE4Miw2ICsxODQsMTMgQEAgc3RydWN0IHsKPj4+IMKgwqDCoMKgwqAgLmNhbl90 ZXN0ID0gZmFsc2UsCj4+PiDCoCB9Owo+Pj4gwqAgKyNkZWZpbmUgTUFYX0RSUlNfU1RBVFVTX0JV Rl9MRU4gMjU2Cj4+PiArCj4+PiArc3RydWN0IHsKPj4+ICvCoMKgwqAgYm9vbCBjYW5fdGVzdDsK Pj4+ICt9IGRycnMgPSB7Cj4+PiArwqDCoMKgIC5jYW5fdGVzdCA9IGZhbHNlLAo+Pj4gK307Cj4+ PiDCoCDCoCAjZGVmaW5lIFNJTktfQ1JDX1NJWkUgMTIKPj4+IMKgIHR5cGVkZWYgc3RydWN0IHsK Pj4+IEBAIC04MjUsNiArODM0LDYwIEBAIHN0YXRpYyB2b2lkIHBzcl9wcmludF9zdGF0dXModm9p ZCkKPj4+IMKgwqDCoMKgwqAgaWd0X2luZm8oIlBTUiBzdGF0dXM6XG4lc1xuIiwgYnVmKTsKPj4+ IMKgIH0KPj4+IMKgICt2b2lkIGRycnNfc2V0KHVuc2lnbmVkIGludCB2YWwpCj4+PiArewo+Pj4g K8KgwqDCoCBjaGFyIGJ1ZlsyXTsKPj4+ICsKPj4+ICvCoMKgwqAgaWd0X2RlYnVnKCJNYW51YWxs eSAlc2FibGluZyBEUlJTLiAlbGx1XG4iLCB2YWwgPyAiZW4iIDogImRpcyIsIAo+Pj4gdmFsKTsK Pj4+ICvCoMKgwqAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgdmFsKTsKPj4+ICvC oMKgwqAgaWd0X2Fzc2VydF9lcSh3cml0ZShkcm0uZHJyc19kZWJ1Z2ZzX2ZkLAo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1Ziwgc3RybGVuKGJ1ZikpLCBzdHJsZW4oYnVmKSk7Cj4+ PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBib29sIGlzX2RycnNfaGlnaCh2b2lkKQo+Pj4gK3sKPj4+ ICvCoMKgwqAgY2hhciBidWZbTUFYX0RSUlNfU1RBVFVTX0JVRl9MRU5dOwo+Pj4gKwo+Pj4gK8Kg wqDCoCBkZWJ1Z2ZzX3JlYWQoImk5MTVfZHJyc19zdGF0dXMiLCBidWYpOwo+Pj4gK8KgwqDCoCBy ZXR1cm4gc3Ryc3RyKGJ1ZiwgIkRSUlNfSElHSF9SUiIpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0 aWMgYm9vbCBpc19kcnJzX2xvdyh2b2lkKQo+Pj4gK3sKPj4+ICvCoMKgwqAgY2hhciBidWZbTUFY X0RSUlNfU1RBVFVTX0JVRl9MRU5dOwo+Pj4gKwo+Pj4gK8KgwqDCoCBkZWJ1Z2ZzX3JlYWQoImk5 MTVfZHJyc19zdGF0dXMiLCBidWYpOwo+Pj4gK8KgwqDCoCByZXR1cm4gc3Ryc3RyKGJ1ZiwgIkRS UlNfTE9XX1JSIik7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBib29sIGlzX2RycnNfc3VwcG9y dGVkKHZvaWQpCj4+PiArewo+Pj4gK8KgwqDCoCBjaGFyIGJ1ZltNQVhfRFJSU19TVEFUVVNfQlVG X0xFTl07Cj4+PiArCj4+PiArwqDCoMKgIGRlYnVnZnNfcmVhZCgiaTkxNV9kcnJzX3N0YXR1cyIs IGJ1Zik7Cj4+PiArwqDCoMKgIHJldHVybiBzdHJzdHIoYnVmLCAiRFJSUyBTdXBwb3J0ZWQ6IFll cyIpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgYm9vbCBpc19kcnJzX2luYWN0aXZlKHZvaWQp Cj4+PiArewo+Pj4gK8KgwqDCoCBjaGFyIGJ1ZltNQVhfRFJSU19TVEFUVVNfQlVGX0xFTl07Cj4+ PiArCj4+PiArwqDCoMKgIGRlYnVnZnNfcmVhZCgiaTkxNV9kcnJzX3N0YXR1cyIsIGJ1Zik7Cj4+ PiArCj4+PiArwqDCoMKgIGlmIChzdHJzdHIoYnVmLCAiRFJSU19TdGF0ZTogIikpCj4+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNlOwo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gdHJ1ZTsK Pj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgZHJyc19wcmludF9zdGF0dXModm9pZCkKPj4+ ICt7Cj4+PiArwqDCoMKgIGNoYXIgYnVmW01BWF9EUlJTX1NUQVRVU19CVUZfTEVOXTsKPj4+ICsK Pj4+ICvCoMKgwqAgZGVidWdmc19yZWFkKCJpOTE1X2RycnNfc3RhdHVzIiwgYnVmKTsKPj4+ICvC oMKgwqAgaWd0X2luZm8oIkRSUlMgU1RBVFVTIDpcbiVzXG4iLCBidWYpOwo+Pj4gK30KPj4+ICsK Pj4+IMKgIHN0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgZmJjX2dldF9sYXN0X2FjdGlvbih2b2lkKQo+ Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgdGltZXNwZWMgcmV0ID0geyAwLCAwIH07Cj4+ PiBAQCAtOTM1LDEwICs5OTgsMTcgQEAgc3RhdGljIGJvb2wgcHNyX3dhaXRfdW50aWxfZW5hYmxl ZCh2b2lkKQo+Pj4gwqDCoMKgwqDCoCByZXR1cm4gaWd0X3dhaXQocHNyX2lzX2VuYWJsZWQoKSwg NTAwMCwgMSk7Cj4+PiDCoCB9Cj4+PiDCoCArc3RhdGljIGJvb2wgZHJyc193YWl0X3VudGlsX3Jy X3N3aXRjaF90b19sb3codm9pZCkKPj4+ICt7Cj4+PiArwqDCoMKgIHJldHVybiBpZ3Rfd2FpdChp c19kcnJzX2xvdygpLCA1MDAwLCAxKTsKPj4+ICt9Cj4+PiArCj4+PiDCoCAjZGVmaW5lIGZiY19l bmFibGUoKSBpZ3Rfc2V0X21vZHVsZV9wYXJhbV9pbnQoImVuYWJsZV9mYmMiLCAxKQo+Pj4gwqAg I2RlZmluZSBmYmNfZGlzYWJsZSgpIGlndF9zZXRfbW9kdWxlX3BhcmFtX2ludCgiZW5hYmxlX2Zi YyIsIDApCj4+PiDCoCAjZGVmaW5lIHBzcl9lbmFibGUoKSBpZ3Rfc2V0X21vZHVsZV9wYXJhbV9p bnQoImVuYWJsZV9wc3IiLCAxKQo+Pj4gwqAgI2RlZmluZSBwc3JfZGlzYWJsZSgpIGlndF9zZXRf bW9kdWxlX3BhcmFtX2ludCgiZW5hYmxlX3BzciIsIDApCj4+PiArI2RlZmluZSBkcnJzX2VuYWJs ZSgpwqDCoMKgIGRycnNfc2V0KDEpCj4+PiArI2RlZmluZSBkcnJzX2Rpc2FibGUoKcKgwqDCoCBk cnJzX3NldCgwKQo+Pj4gwqAgwqAgc3RhdGljIHZvaWQgZ2V0X3NpbmtfY3JjKHNpbmtfY3JjX3Qg KmNyYywgYm9vbCBtYW5kYXRvcnkpCj4+PiDCoCB7Cj4+PiBAQCAtMTE4NCw2ICsxMjU0LDcgQEAg c3RhdGljIHZvaWQgZGlzYWJsZV9mZWF0dXJlcyhjb25zdCBzdHJ1Y3QgCj4+PiB0ZXN0X21vZGUg KnQpCj4+PiDCoCDCoMKgwqDCoMKgIGZiY19kaXNhYmxlKCk7Cj4+PiDCoMKgwqDCoMKgIHBzcl9k aXNhYmxlKCk7Cj4+PiArwqDCoMKgIGRycnNfZGlzYWJsZSgpOwo+Pj4gwqAgfQo+Pj4gwqAgwqAg c3RhdGljIHZvaWQgKmJ1c3lfdGhyZWFkX2Z1bmModm9pZCAqZGF0YSkKPj4+IEBAIC0xNTA4LDYg KzE1NzksMTIgQEAgc3RhdGljIHZvaWQgdGVhcmRvd25fY3Jjcyh2b2lkKQo+Pj4gwqDCoMKgwqDC oCBpZ3RfcGlwZV9jcmNfZnJlZShwaXBlX2NyYyk7Cj4+PiDCoCB9Cj4+PiDCoCArc3RhdGljIHZv aWQgdGVhcmRvd25fZHJycyh2b2lkKQo+Pj4gK3sKPj4+ICvCoMKgwqAgaWYgKGRybS5kcnJzX2Rl YnVnZnNfZmQgIT0gLTEpCj4+PiArwqDCoMKgwqDCoMKgwqAgY2xvc2UoZHJtLmRycnNfZGVidWdm c19mZCk7Cj4+PiArfQo+Pj4gKwo+Pj4gwqAgc3RhdGljIGJvb2wgZmJjX3N1cHBvcnRlZF9vbl9j aGlwc2V0KHZvaWQpCj4+PiDCoCB7Cj4+PiDCoMKgwqDCoMKgIGNoYXIgYnVmWzEyOF07Cj4+PiBA QCAtMTU3Nyw2ICsxNjU0LDI5IEBAIHN0YXRpYyB2b2lkIHRlYXJkb3duX3Bzcih2b2lkKQo+Pj4g wqAgewo+Pj4gwqAgfQo+Pj4gwqAgK3N0YXRpYyB2b2lkIHNldHVwX2RycnModm9pZCkKPj4+ICt7 Cj4+PiArwqDCoMKgIGlmIAo+Pj4gKGdldF9jb25uZWN0b3IocHJpbV9tb2RlX3BhcmFtcy5jb25u ZWN0b3JfaWQpLT5jb25uZWN0b3JfdHlwZSAhPQo+Pj4gK8KgwqDCoMKgwqDCoMKgIERSTV9NT0RF X0NPTk5FQ1RPUl9lRFApIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfaW5mbygiQ2FuJ3QgdGVz dCBEUlJTOiBubyB1c2FibGUgZURQIHNjcmVlbi5cbiIpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybjsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoIWlzX2RycnNfc3VwcG9y dGVkKCkpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfaW5mbygiQ2FuJ3QgdGVzdCBEUlJTOiBO b3Qgc3VwcG9ydGVkLlxuIik7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4gK8KgwqDC oCB9Cj4+PiArCj4+PiArwqDCoMKgIGRybS5kcnJzX2RlYnVnZnNfZmQgPSBvcGVuYXQoZHJtLmRl YnVnZnMsICJpOTE1X2RycnNfY3RsIiwgCj4+PiBPX1dST05MWSk7Cj4+PiArCj4+PiArwqDCoMKg IGlmIChkcm0uZHJyc19kZWJ1Z2ZzX2ZkID4gMCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRycnMu Y2FuX3Rlc3QgPSB0cnVlOwo+Pj4gK8KgwqDCoCB9IGVsc2Ugewo+Pj4gK8KgwqDCoMKgwqDCoMKg IGlndF9pbmZvKCJDYW4ndCB0ZXN0IERSUlM6IERlYnVnZnMgZW50cnkgaTkxNV9kcnJzX2N0bCBu b3QgCj4+PiBmb3VuZC5cbiIpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRycnMuY2FuX3Rlc3QgPSBm YWxzZTsKPj4+ICvCoMKgwqAgfQo+Pj4gK30KPj4+ICsKPj4+IMKgIHN0YXRpYyB2b2lkIHNldHVw X2Vudmlyb25tZW50KHZvaWQpCj4+PiDCoCB7Cj4+PiDCoMKgwqDCoMKgIHNldHVwX2RybSgpOwo+ Pj4gQEAgLTE1ODQsNiArMTY4NCw3IEBAIHN0YXRpYyB2b2lkIHNldHVwX2Vudmlyb25tZW50KHZv aWQpCj4+PiDCoCDCoMKgwqDCoMKgIHNldHVwX2ZiYygpOwo+Pj4gwqDCoMKgwqDCoCBzZXR1cF9w c3IoKTsKPj4+ICvCoMKgwqAgc2V0dXBfZHJycygpOwo+Pj4gwqAgwqDCoMKgwqDCoCBzZXR1cF9j cmNzKCk7Cj4+PiDCoCB9Cj4+PiBAQCAtMTU5Niw2ICsxNjk3LDcgQEAgc3RhdGljIHZvaWQgdGVh cmRvd25fZW52aXJvbm1lbnQodm9pZCkKPj4+IMKgwqDCoMKgwqAgdGVhcmRvd25fcHNyKCk7Cj4+ PiDCoMKgwqDCoMKgIHRlYXJkb3duX2ZiYygpOwo+Pj4gwqDCoMKgwqDCoCB0ZWFyZG93bl9tb2Rl c2V0KCk7Cj4+PiArwqDCoMKgIHRlYXJkb3duX2RycnMoKTsKPj4+IMKgwqDCoMKgwqAgdGVhcmRv d25fZHJtKCk7Cj4+PiDCoCB9Cj4+PiDCoCBAQCAtMTY2Miw2ICsxNzY0LDExIEBAIHN0YXRpYyB2 b2lkIGRvX2ZsdXNoKGNvbnN0IHN0cnVjdCB0ZXN0X21vZGUgCj4+PiAqdCkKPj4+IMKgICNkZWZp bmUgQVNTRVJUX1BTUl9FTkFCTEVEwqDCoMKgwqDCoMKgwqAgKDEgPDwgNikKPj4+IMKgICNkZWZp bmUgQVNTRVJUX1BTUl9ESVNBQkxFRMKgwqDCoMKgwqDCoMKgICgxIDw8IDcpCj4+PiDCoCArI2Rl ZmluZSBEUlJTX0FTU0VSVF9GTEFHU8KgwqDCoMKgwqDCoMKgICg3IDw8IDgpCj4+PiArI2RlZmlu ZSBBU1NFUlRfRFJSU19ISUdIwqDCoMKgwqDCoMKgwqAgKDEgPDwgOCkKPj4+ICsjZGVmaW5lIEFT U0VSVF9EUlJTX0xPV8KgwqDCoMKgwqDCoMKgICgxIDw8IDkpCj4+PiArI2RlZmluZSBBU1NFUlRf RFJSU19JTkFDVElWRcKgwqDCoMKgwqDCoMKgICgxIDw8IDEwKQo+Pj4gKwo+Pj4gwqAgc3RhdGlj IGludCBhZGp1c3RfYXNzZXJ0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCB0ZXN0X21vZGUgKnQsIGlu dCAKPj4+IGZsYWdzKQo+Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBpZiAoIShmbGFncyAmIERPTlRf QVNTRVJUX0ZFQVRVUkVfU1RBVFVTKSkgewo+Pj4gQEAgLTE2NjksMTIgKzE3NzYsMTcgQEAgc3Rh dGljIGludCBhZGp1c3RfYXNzZXJ0aW9uX2ZsYWdzKGNvbnN0IAo+Pj4gc3RydWN0IHRlc3RfbW9k ZSAqdCwgaW50IGZsYWdzKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmxhZ3MgfD0g QVNTRVJUX0ZCQ19FTkFCTEVEOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghKGZsYWdzICYg QVNTRVJUX1BTUl9ESVNBQkxFRCkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmbGFn cyB8PSBBU1NFUlRfUFNSX0VOQUJMRUQ7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCEoKGZsYWdz ICYgQVNTRVJUX0RSUlNfTE9XKSB8fAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGZsYWdz ICYgQVNTRVJUX0RSUlNfSU5BQ1RJVkUpKSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZs YWdzIHw9IEFTU0VSVF9EUlJTX0hJR0g7Cj4+PiDCoMKgwqDCoMKgIH0KPj4+IMKgIMKgwqDCoMKg wqAgaWYgKCh0LT5mZWF0dXJlICYgRkVBVFVSRV9GQkMpID09IDApCj4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgZmxhZ3MgJj0gfkZCQ19BU1NFUlRfRkxBR1M7Cj4+PiDCoMKgwqDCoMKgIGlmICgodC0+ ZmVhdHVyZSAmIEZFQVRVUkVfUFNSKSA9PSAwKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGZsYWdz ICY9IH5QU1JfQVNTRVJUX0ZMQUdTOwo+Pj4gK8KgwqDCoCBpZiAoKHQtPmZlYXR1cmUgJiBGRUFU VVJFX0RSUlMpID09IDApCj4+PiArwqDCoMKgwqDCoMKgwqAgZmxhZ3MgJj0gfkRSUlNfQVNTRVJU X0ZMQUdTOwo+Pj4gwqAgwqDCoMKgwqDCoCByZXR1cm4gZmxhZ3M7Cj4+PiDCoCB9Cj4+PiBAQCAt MTcwNiw2ICsxODE4LDIzIEBAIHN0YXRpYyB2b2lkIGRvX3N0YXR1c19hc3NlcnRpb25zKGludCBm bGFncykKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+PiDCoMKgwqDCoMKgIH0KPj4+ IMKgICvCoMKgwqAgaWYgKGZsYWdzICYgQVNTRVJUX0RSUlNfSElHSCkgewo+Pj4gK8KgwqDCoMKg wqDCoMKgIGlmICghaXNfZHJyc19oaWdoKCkpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGRycnNfcHJpbnRfc3RhdHVzKCk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfYXNz ZXJ0X2YoZmFsc2UsICJEUlJTIEhJR0hcbiIpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ICvC oMKgwqAgfSBlbHNlIGlmIChmbGFncyAmIEFTU0VSVF9EUlJTX0xPVykgewo+Pj4gK8KgwqDCoMKg wqDCoMKgIGlmICghZHJyc193YWl0X3VudGlsX3JyX3N3aXRjaF90b19sb3coKSkgewo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJyc19wcmludF9zdGF0dXMoKTsKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlndF9hc3NlcnRfZihmYWxzZSwgIkRSUlMgTE9XXG4iKTsKPj4+ICvCoMKg wqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgIH0gZWxzZSBpZiAoZmxhZ3MgJiBBU1NFUlRfRFJSU19J TkFDVElWRSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghaXNfZHJyc19pbmFjdGl2ZSgpKSB7 Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcnJzX3ByaW50X3N0YXR1cygpOwo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2Fzc2VydF9mKGZhbHNlLCAiRFJSUyBJTkFDVElWRVxu Iik7Cj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiDCoMKgwqDC oMKgIGlmIChmbGFncyAmIEFTU0VSVF9GQkNfRU5BQkxFRCkgewo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIGlndF9yZXF1aXJlKCFmYmNfbm90X2Vub3VnaF9zdG9sZW4oKSk7Cj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgaWd0X3JlcXVpcmUoIWZiY19zdHJpZGVfbm90X3N1cHBvcnRlZCgpKTsKPj4+IEBA IC0xODMzLDYgKzE5NjIsOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfZmVhdHVyZXNfZm9yX3Rlc3Qo Y29uc3QgCj4+PiBzdHJ1Y3QgdGVzdF9tb2RlICp0KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGZi Y19lbmFibGUoKTsKPj4+IMKgwqDCoMKgwqAgaWYgKHQtPmZlYXR1cmUgJiBGRUFUVVJFX1BTUikK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBwc3JfZW5hYmxlKCk7Cj4+PiArwqDCoMKgIGlmICh0LT5m ZWF0dXJlICYgRkVBVFVSRV9EUlJTKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRycnNfZW5hYmxlKCk7 Cj4+PiDCoCB9Cj4+PiDCoCDCoCBzdGF0aWMgdm9pZCBjaGVja190ZXN0X3JlcXVpcmVtZW50cyhj b25zdCBzdHJ1Y3QgdGVzdF9tb2RlICp0KQo+Pj4gQEAgLTE4NTIsNiArMTk4MywxOCBAQCBzdGF0 aWMgdm9pZCBjaGVja190ZXN0X3JlcXVpcmVtZW50cyhjb25zdCAKPj4+IHN0cnVjdCB0ZXN0X21v ZGUgKnQpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiQ2FuJ3Qg dGVzdCBQU1Igd2l0aG91dCBzaW5rIENSQ3NcbiIpOwo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiDCoCAr wqDCoMKgIGlmICh0LT5mZWF0dXJlICYgRkVBVFVSRV9EUlJTKQo+Pj4gK8KgwqDCoMKgwqDCoMKg IGlndF9yZXF1aXJlX2YoZHJycy5jYW5fdGVzdCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICJDYW4ndCB0ZXN0IERSUlMgd2l0aCB0aGUgY3VycmVudCBvdXRwdXRzXG4i KTsKPj4+ICsKPj4+ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIEluIGtlcm5lbCwgV2hlbiBQ U1IgaXMgZW5hYmxlZCwgRFJSUyB3aWxsIGJlIGRpc2FibGVkLiBTbyBJZiAKPj4+IGEgdGVzdAo+ Pj4gK8KgwqDCoMKgICogY2FzZSBuZWVkcyBEUlJTICsgUFNSIGVuYWJsZWQsIHRoYXQgd2lsbCBi ZSBza2lwcGVkLgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIGlndF9yZXF1aXJlX2YoISgo dC0+ZmVhdHVyZSAmIEZFQVRVUkVfUFNSKSAmJgo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICh0LT5mZWF0dXJlICYgRkVBVFVSRV9EUlJTKSksCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgIkNhbid0IHRlc3QgUFNSIGFuZCBEUlJTIHRvZ2V0aGVyXG4iKTsKPj4+ICsKPj4+ IMKgwqDCoMKgwqAgaWYgKG9wdC5vbmx5X3BpcGVzICE9IFBJUEVfQ09VTlQpCj4+PiDCoMKgwqDC oMKgwqDCoMKgwqAgaWd0X3JlcXVpcmUodC0+cGlwZXMgPT0gb3B0Lm9ubHlfcGlwZXMpOwo+Pj4g wqAgfQo+Pj4gQEAgLTE5NzMsNyArMjExNiw3IEBAIHN0YXRpYyB2b2lkIHJ0ZV9zdWJ0ZXN0KGNv bnN0IHN0cnVjdCB0ZXN0X21vZGUgCj4+PiAqdCkKPj4+IMKgIMKgwqDCoMKgwqAgdW5zZXRfYWxs X2NydGNzKCk7Cj4+PiDCoMKgwqDCoMKgIGRvX2Fzc2VydGlvbnMoQVNTRVJUX0ZCQ19ESVNBQkxF RCB8IEFTU0VSVF9QU1JfRElTQUJMRUQgfAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IERPTlRfQVNTRVJUX0NSQyk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRE9OVF9B U1NFUlRfQ1JDIHwgQVNTRVJUX0RSUlNfSU5BQ1RJVkUpOwo+Pj4gwqAgwqDCoMKgwqDCoCBlbmFi bGVfcHJpbV9zY3JlZW5fYW5kX3dhaXQodCk7Cj4+PiDCoMKgwqDCoMKgIHNldF9jdXJzb3JfZm9y X3Rlc3QodCwgJnByaW1fbW9kZV9wYXJhbXMpOwo+Pj4gQEAgLTIwNjUsNiArMjIwOCwxMyBAQCBz dGF0aWMgdm9pZCBkcmF3X3N1YnRlc3QoY29uc3Qgc3RydWN0IAo+Pj4gdGVzdF9tb2RlICp0KQo+ Pj4gwqDCoMKgwqDCoCBpZiAob3BfZGlzYWJsZXNfcHNyKHQsIHQtPm1ldGhvZCkpCj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgYXNzZXJ0aW9ucyB8PSBBU1NFUlRfUFNSX0RJU0FCTEVEOwo+Pj4gwqAg K8KgwqDCoCAvKgo+Pj4gK8KgwqDCoMKgICogT24gRkJTX0lORElWSURVQUwsIHdyaXRlIHRvIG9m ZnNjcmVlbiBwbGFuZSB3aWxsIG5vdCB0b3VjaCB0aGUKPj4+ICvCoMKgwqDCoCAqIGN1cnJlbnQg ZnJhbWJ1ZmZlci4gSGVuY2UgYXNzZXJ0IGZvciBEUlJTX0xPVy4KPj4+ICvCoMKgwqDCoCAqLwo+ Pj4gK8KgwqDCoCBpZiAoKHQtPmZicyA9PSBGQlNfSU5ESVZJRFVBTCkgJiYgKHQtPnNjcmVlbiA9 PSBTQ1JFRU5fT0ZGU0NSRUVOKSkKPj4+ICvCoMKgwqDCoMKgwqDCoCBhc3NlcnRpb25zIHw9IEFT U0VSVF9EUlJTX0xPVzsKPj4+ICsKPj4+IMKgwqDCoMKgwqAgcHJlcGFyZV9zdWJ0ZXN0KHQsIHBh dHRlcm4pOwo+Pj4gwqDCoMKgwqDCoCB0YXJnZXQgPSBwaWNrX3RhcmdldCh0LCBwYXJhbXMpOwo+ Pj4gwqAgQEAgLTIyNzMsNyArMjQyMywxMSBAQCBzdGF0aWMgdm9pZCBzbG93X2RyYXdfc3VidGVz dChjb25zdCBzdHJ1Y3QgCj4+PiB0ZXN0X21vZGUgKnQpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg c2xlZXAoMik7Cj4+PiDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgdXBkYXRlX3dhbnRlZF9jcmModCwg JnBhdHRlcm4tPmNyY3NbdC0+Zm9ybWF0XVtyXSk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgZG9fYXNz ZXJ0aW9ucygwKTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAodC0+ZmVhdHVyZSAmIEZF QVRVUkVfRFJSUykKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRvX2Fzc2VydGlvbnMoQVNT RVJUX0RSUlNfTE9XKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBlbHNlCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkb19hc3NlcnRpb25zKDApOwo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiDCoCB9Cj4+ PiDCoCBAQCAtMjg4MiwxNCArMzAzNiwxNCBAQCBzdGF0aWMgdm9pZCBzdXNwZW5kX3N1YnRlc3Qo Y29uc3Qgc3RydWN0IAo+Pj4gdGVzdF9tb2RlICp0KQo+Pj4gwqDCoMKgwqDCoCBzbGVlcCg1KTsK Pj4+IMKgwqDCoMKgwqAgaWd0X3N5c3RlbV9zdXNwZW5kX2F1dG9yZXN1bWUoU1VTUEVORF9TVEFU RV9NRU0sIAo+Pj4gU1VTUEVORF9URVNUX05PTkUpOwo+Pj4gwqDCoMKgwqDCoCBzbGVlcCg1KTsK Pj4+IC3CoMKgwqAgZG9fYXNzZXJ0aW9ucygwKTsKPj4+ICvCoMKgwqAgZG9fYXNzZXJ0aW9ucyhB U1NFUlRfRFJSU19MT1cpOwo+Pj4gwqAgwqDCoMKgwqDCoCB1bnNldF9hbGxfY3J0Y3MoKTsKPj4+ IMKgwqDCoMKgwqAgc2xlZXAoNSk7Cj4+PiDCoMKgwqDCoMKgIGlndF9zeXN0ZW1fc3VzcGVuZF9h dXRvcmVzdW1lKFNVU1BFTkRfU1RBVEVfTUVNLCAKPj4+IFNVU1BFTkRfVEVTVF9OT05FKTsKPj4+ IMKgwqDCoMKgwqAgc2xlZXAoNSk7Cj4+PiDCoMKgwqDCoMKgIGRvX2Fzc2VydGlvbnMoQVNTRVJU X0ZCQ19ESVNBQkxFRCB8IEFTU0VSVF9QU1JfRElTQUJMRUQgfAo+Pj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIERPTlRfQVNTRVJUX0NSQyk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRE9OVF9BU1NFUlRfQ1JDIHwgQVNTRVJUX0RSUlNfSU5BQ1RJVkUpOwo+Pj4gwqAgwqDC oMKgwqDCoCBzZXRfbW9kZV9mb3JfcGFyYW1zKHBhcmFtcyk7Cj4+PiDCoMKgwqDCoMKgIGRvX2Fz c2VydGlvbnMoMCk7Cj4+PiBAQCAtMzM3MSw2ICszNTI1LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFy ICpmZWF0dXJlX3N0cihpbnQgZmVhdHVyZSkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g InBzciI7Cj4+PiDCoMKgwqDCoMKgIGNhc2UgRkVBVFVSRV9GQkMgfCBGRUFUVVJFX1BTUjoKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gImZiY3BzciI7Cj4+PiArwqDCoMKgIGNhc2UgRkVB VFVSRV9EUlJTOgo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAiZHJycyI7Cj4+PiArwqDCoMKg IGNhc2UgRkVBVFVSRV9GQkMgfCBGRUFUVVJFX0RSUlM6Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuICJmYmNkcnJzIjsKPj4+ICvCoMKgwqAgY2FzZSBGRUFUVVJFX1BTUiB8IEZFQVRVUkVfRFJS UzoKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gInBzcmRycnMiOwo+Pj4gK8KgwqDCoCBjYXNl IEZFQVRVUkVfRkJDIHwgRkVBVFVSRV9QU1IgfCBGRUFUVVJFX0RSUlM6Cj4+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuICJmYmNwc3JkcnJzIjsKPj4+IMKgwqDCoMKgwqAgZGVmYXVsdDoKPj4+IMKg wqDCoMKgwqDCoMKgwqDCoCBpZ3RfYXNzZXJ0KGZhbHNlKTsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4g QEAgLTM2MzUsNyArMzc5Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRpbGluZ2NoYW5nZV9zdWJ0ZXN0 KCZ0KTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoCAtwqDCoMKgwqDCoMKgwqAgaWYg KHQuZmVhdHVyZSAmIEZFQVRVUkVfUFNSKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICgodC5mZWF0 dXJlICYgRkVBVFVSRV9QU1IpIHx8ICh0LmZlYXR1cmUgJiBGRUFUVVJFX0RSUlMpKQo+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3N1YnRlc3RfZigiJXMtc2xvd2RyYXciLCBmZWF0 dXJlX3N0cih0LmZlYXR1cmUpKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzbG93X2RyYXdfc3VidGVzdCgmdCk7Cj4+PiDCoCAtLQo+Pj4gMS45LjEKPj4+Cj4KCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=