From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from f455.i.mail.ru (f455.i.mail.ru [185.5.136.187]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id B3E74469719 for ; Fri, 18 Sep 2020 16:10:08 +0300 (MSK) From: =?UTF-8?B?SWx5YSBLb3NhcmV2?= MIME-Version: 1.0 Date: Fri, 18 Sep 2020 16:10:07 +0300 Reply-To: =?UTF-8?B?SWx5YSBLb3NhcmV2?= Message-ID: <1600434607.560398141@f455.i.mail.ru> Content-Type: multipart/alternative; boundary="--ALT--aFeFd7B7BaF221Ff1c03922b680E2a291600434607" In-Reply-To: <8ec92820-7cee-368b-cf5e-ed0ac9fccaeb@tarantool.org> References: <20200814104721.6962-1-i.kosarev@tarantool.org> <8ec92820-7cee-368b-cf5e-ed0ac9fccaeb@tarantool.org> Subject: Re: [Tarantool-patches] =?utf-8?q?=5BPATCH=5D_iproto=3A_make_iproto_t?= =?utf-8?q?hread_more_independent_from_tx?= List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?B?TGVvbmlkIFZhc2lsaWV2?= Cc: tarantool-patches@dev.tarantool.org ----ALT--aFeFd7B7BaF221Ff1c03922b680E2a291600434607 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 CkhpLArCoApUaGFua3MgZm9yIHlvdXIgcmV2aWV3IQrCoApTZWUgMTLCoGFuc3dlcnMgYmVsb3cu IFNlbnQgdjIgb2YgdGhlIHBhdGNoIGNvbnNpZGVyaW5nIHlvdXIgY29tbWVudHMuIAo+0J/QvtC9 0LXQtNC10LvRjNC90LjQuiwgMTQg0YHQtdC90YLRj9Cx0YDRjyAyMDIwLCAxOToxNyArMDM6MDAg 0L7RgiBMZW9uaWQgVmFzaWxpZXYgPCBsdmFzaWxpZXZAdGFyYW50b29sLm9yZyA+Ogo+wqAKPgo+ SGkhIFRoYW5rIHlvdSBmb3IgdGhlIHBhdGNoLgo+TG9vayBzb21lIGNvbW1lbnRzL3F1ZXN0aW9u cyBiZWxvdzoKPgo+LSBQbGVhc2UgYWRkIEBDaGFuZ2VMb2cKKiAgClJpZ2h0LCB3aWxsIGJlIGZp eGVkIGluIHYyLgo+LSBMb29rIGxpa2UgIkBUYXJhbnRvb2xCb3QgZG9jdW1lbnQiIG5lZWRzIHRv IGJlIGFkZGVkIHRvIHVwZGF0ZQo+aHR0cHM6Ly93d3cudGFyYW50b29sLmlvL2VuL2RvYy8yLjUv cmVmZXJlbmNlL3JlZmVyZW5jZV9sdWEvbmV0X2JveC8jbmV0LWJveC1vbi1jb25uZWN0CiogIApS aWdodCwgZG9jwqBib3QgcmVxdWVzdCB3aWxsIGJlIGluY2x1ZGVkIGluIHYyIG9mIHRoZSBwYXRj aC4KPgo+LSBIb3cgZG8geW91IGNoZWNrIHRoZSBwcm9ibGVtIGlzIGdvbmU/IEFueSBzdHJlc3Mg dGVzdD8KKiAgClllcywgaGVyZSBpcyB0aGUgdGVzdCBpIGFkYXB0ZWQgZnJvbSBZYXJvc2xhduKA mXMgdmVyc2lvbjoKaHR0cHM6Ly9naXRodWIuY29tL3RhcmFudG9vbC90YXJhbnRvb2wvaXNzdWVz LzM3NzYjaXNzdWVjb21tZW50LTYxNzczNjcyOQpJIGRpZG7igJl0IGZpbmQgdGhlIHdhecKgdG8g aW1wbGVtZW50IGl0IHVuZGVyIHRlc3QtcnVuLgo+T24gMTQuMDguMjAyMCAxMzo0NywgSWx5YSBL b3NhcmV2IHdyb3RlOgo+PiBPbiBjb25uZWN0aW9uLCBhbiBldmlvIHNlcnZpY2UgY2FsbGJhY2sg aXMgaW52b2tlZCB0byBhY2NlcHQgaXQuIFRoZQo+PiBuZXh0IHN0ZXAgYWZ0ZXIgYWNjZXB0aW9u IHdhcyB0byBwcm9jZXNzIGNvbm5lY3Rpb24gdG8gdHggdGhyZWFkCj4+IHRocm91Z2ggY2J1cy4g VGhpcyBtZWFudCB0aGF0IGFueSBjb25uZWN0aW9uIGludGVyYWN0aW9uIGludm9sdmVzCj4+IHR4 IHRocmVhZCBldmVuIGJlZm9yZSB3ZSBnZXQgdG8gZGVjb2RlIHdoYXQgZG9lcyB0aGUgY2xpZW50 IHdhbnQKPj4gZnJvbSB1cy4gQ29uc2VxdWVudGx5LCBhIG51bWJlciBvZiBwcm9ibGVtcyBhcHBl YXJzLiBUaGUgbWFpbiBvbmUKPj4gaXMgdGhhdCB3ZSBtaWdodCBnZXQgZGVzY3JpcHRvciBsZWFr IGluIGNhc2Ugb2YgdW5yZXNwb25zaXZlIHR4IHRocmVhZAo+PiAoZm9yIGV4YW1wbGUsIHdoZW4g YnVpbGRpbmcgc2Vjb25kYXJ5IGluZGV4KS4gVGhlcmUgYXJlIHNvbWUgb3RoZXIKPj4gY2FzZXMg d2hlcmUgd2UgbWlnaHQgbm90IHdhbnQgdG8gc3BlbmQgcHJlY2lvdXMgdHggdGltZSB0byBwcm9j ZXNzCj4+IHRoZSBjb25uZWN0aW9uIGluIGNhc2UgaXByb3RvIGNhbiBkbyBpdCBhbGwgYWxvbmUu Cj4+IFRoaXMgcGF0Y2ggYWxsb3dzIGlwcm90byB0byBhY2NlcHQgY29ubmVjdGlvbiBhbmQgc2Vu ZCBncmVldGluZyBieQo+PiBpdHNlbGYuIFRoZSBjb25uZWN0aW9uIGlzIGluaXRpYWxpemVkIGlu IHR4IHRocmVhZCB3aGVuIHRoZSByZWFsCj4+IHJlcXVlc3QgY29tZXMgdGhyb3VnaCBpcHJvdG9f bXNnX2RlY29kZSgpLiBJbiBjYXNlIHJlcXVlc3QgdHlwZSB3YXMgbm90Cj4+IHJlY29nbml6ZWQg d2UgY2FuIGFsc28gc2VuZCByZXBseSB3aXRoIGFuIGVycm9yIHdpdGhvdXQgdXNpbmcgdHguIEl0 IGlzCj4+IHBsYW5uZWQgdG8gYWRkIG1vcmUgaXByb3RvIGxvZ2ljIHRvIHByZXZlbnQgZXh0cmEg aW50ZXJhY3Rpb24gd2l0aAo+PiB0eCB0aHJlYWQuIFRoaXMgcGF0Y2ggYWxyZWFkeSB0byBzb21l IGV4dGVudCBzb2x2ZXMgZGVzY3JpcHRvcnMgbGVha2FnZQo+PiBwcm9ibGVtIGFzIGZhciBhcyBj b25uZWN0aW9uIGVzdGFibGlzaGVzIGFuZCBzdGF5cyBpbiBmZXRjaF9zY2hlbWEKPj4gc3RhdGUg d2hpbGUgdHggdGhyZWFkIGlzIHVucmVzcG9uc2l2ZS4KPj4gVGhlIG90aGVyIHVzZXIgdmlzaWJs ZSBjaGFuZ2UgaXMgdGhhdCBvbl9jb25uZWN0IHRyaWdnZXJzIHdvbid0IHJ1biBvbgo+PiBjb25u ZWN0aW9ucyB0aGF0IGRvbid0IHByb3ZpZGUgYW55IGlucHV0LCBhcyByZWZsZWN0ZWQgaW4KPj4g YmFkX3RyaWdnZXIudGVzdC5weS4KPgo+LSBJcyBpdCBvayBmcm9tIGV4cGxvaXRhdGlvbiBwb2lu dCBvZiB2aWV3PyBEaWQgeW91IGhhdmUgYSBjb252ZXJzYXRpb24KPndpdGggTW9ucz8KKiAgCldl bGwsIGl0IHdhcyBtZW50aW9uZWQgaW4gY29udmVyc2F0aW9uIHdpdGggTW9ucy4gSSB0aGluayBp IHdpbGwgY2xhcmlmeQppdCBvbmNlIG1vcmUgYXMgc29vbiBhcyBwb3NzaWJsZS4gVGhvdWdoIGkg YW0gcXVpdGUgc3VyZSBpdCBpcyBmaW5lIGFzIGZhcgphcyBhbnkgcmVhbCBhcHBsaWNhdGlvbiBw cm92aWRlcyBzb21lIGlucHV0IGltbWVkaWF0ZWx5IG9uIGNvbm5lY3Rpb24KdGh1cyDRgWF1c2lu ZyB0cmlnZ2VyIGV4ZWN1dGlvbi4KPgo+Pgo+PiBQYXJ0IG9mICMzNzc2Cj4+IC0tLQo+PiBCcmFu Y2g6ICBodHRwczovL2dpdGh1Yi5jb20vdGFyYW50b29sL3RhcmFudG9vbC90cmVlL2kua29zYXJl di9naC0zNzc2LWhhbmRsaW5nLWNvbm5lY3Rpb25zLWluLWlwcm90bwo+PiBJc3N1ZTogIGh0dHBz Oi8vZ2l0aHViLmNvbS90YXJhbnRvb2wvdGFyYW50b29sL2lzc3Vlcy8zNzc2Cj4+Cj4+IHNyYy9i b3gvaXByb3RvLmNjIHwgMjg3ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCj4+IHRl c3QvYm94LXB5L2JhZF90cmlnZ2VyLnJlc3VsdCB8IDEgKwo+PiB0ZXN0L2JveC1weS9iYWRfdHJp Z2dlci50ZXN0LnB5IHwgMjIgKystCj4+IDMgZmlsZXMgY2hhbmdlZCwgMjAyIGluc2VydGlvbnMo KyksIDEwOCBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL3NyYy9ib3gvaXByb3RvLmNj IGIvc3JjL2JveC9pcHJvdG8uY2MKPj4gaW5kZXggYjhmNjVlNWVjYS4uYTAyN2QxNWMxZCAxMDA2 NDQKPj4gLS0tIGEvc3JjL2JveC9pcHJvdG8uY2MKPj4gKysrIGIvc3JjL2JveC9pcHJvdG8uY2MK Pi0gIm9uX2Nvbm5lY3QgdHJpZ2dlciBtdXN0IGJlIHByb2Nlc3NlZCBiZWZvcmUgYW55IG90aGVy IHJlcXVlc3Qgb24gdGhpcwo+Y29ubmVjdGlvbi4iIChmcm9tIGNvbW1lbnQpIC0gSXQgbG9va3Mg bGlrZSBpdCdzIHdvcnRoIGNsYXJpZnlpbmcgdGhpcwo+Z3VhcmFudGVlLgoqICAKUmlnaHQuIFRo aXMgZ3VhcmFudGVlIGlzIGtlcHQuIFRyaWdnZXJzIGFyZSBiZWluZyBwcm9jZXNzZWQgaW4KdHhf aW5pdF9jb25uZWN0KCkgZnJvbSB0eF9hY2NlcHRfbXNnKCkgYmVmb3JlIGFueSBvdGhlciBhY3Rp b25zLgo+Cj4+IEBAIC0yNDUsNyArMjQ1LDcgQEAgaXByb3RvX21zZ19uZXcoc3RydWN0IGlwcm90 b19jb25uZWN0aW9uICpjb24pOwo+PiBzdGF0aWMgdm9pZAo+PiBpcHJvdG9fcmVzdW1lKHZvaWQp Owo+Pgo+PiAtc3RhdGljIHZvaWQKPj4gK3N0YXRpYyBpbnQKPj4gaXByb3RvX21zZ19kZWNvZGUo c3RydWN0IGlwcm90b19tc2cgKm1zZywgY29uc3QgY2hhciAqKnBvcywgY29uc3QgY2hhciAqcmVx ZW5kLAo+PiBib29sICpzdG9wX2lucHV0KTsKPj4KPj4gQEAgLTI1Niw2ICsyNTYsOSBAQCBpcHJv dG9fbXNnX2RlbGV0ZShzdHJ1Y3QgaXByb3RvX21zZyAqbXNnKQo+PiBpcHJvdG9fcmVzdW1lKCk7 Cj4+IH0KPj4KPj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+PiAraXByb3RvX2Nvbm5lY3Rpb25fZGVs ZXRlKHN0cnVjdCBpcHJvdG9fY29ubmVjdGlvbiAqY29uKTsKPj4gKwo+PiAvKioKPj4gKiBBIHNp bmdsZSBnbG9iYWwgcXVldWUgZm9yIGFsbCByZXF1ZXN0cyBpbiBhbGwgY29ubmVjdGlvbnMuIEFs bAo+PiAqIHJlcXVlc3RzIGZyb20gYWxsIGNvbm5lY3Rpb25zIGFyZSBwcm9jZXNzZWQgY29uY3Vy cmVudGx5Lgo+PiBAQCAtMjgwLDYgKzI4MywxMSBAQCBzdGF0aWMgc3RydWN0IGNvcmQgbmV0X2Nv cmQ7Cj4+ICogaW4gdGhlIHR4IHRocmVhZC4KPj4gKi8KPj4gc3RhdGljIHN0cnVjdCBzbGFiX2Nh Y2hlIG5ldF9zbGFiYzsKPj4gKy8qKgo+PiArICogU2xhYiBjYWNoZSB1c2VkIGZvciBhbGxvY2F0 aW5nIG1lbW9yeSBmb3Igb3V0cHV0IG5ldHdvcmsgYnVmZmVycwo+PiArICogaW4gdGhlIGlwcm90 byB0aHJlYWQuCj4+ICsgKi8KPj4gK3N0YXRpYyBzdHJ1Y3Qgc2xhYl9jYWNoZSBpcHJvdG9fc2xh YmM7Cj4+Cj4+IHN0cnVjdCBybWVhbiAqcm1lYW5fbmV0Owo+Pgo+PiBAQCAtMjk4LDYgKzMwNiw5 IEBAIGNvbnN0IGNoYXIgKnJtZWFuX25ldF9zdHJpbmdzW0lQUk9UT19MQVNUXSA9IHsKPj4gIlJF UVVFU1RTIiwKPj4gfTsKPj4KPj4gK3N0YXRpYyBpbnQKPj4gK3R4X2luaXRfY29ubmVjdChzdHJ1 Y3QgaXByb3RvX21zZyAqbXNnKTsKPj4gKwo+PiBzdGF0aWMgdm9pZAo+PiB0eF9wcm9jZXNzX2Rl c3Ryb3koc3RydWN0IGNtc2cgKm0pOwo+Pgo+PiBAQCAtNjUwLDcgKzY2MSwxOCBAQCBpcHJvdG9f Y29ubmVjdGlvbl90cnlfdG9fc3RhcnRfZGVzdHJveShzdHJ1Y3QgaXByb3RvX2Nvbm5lY3Rpb24g KmNvbikKPj4gKiBvdGhlciBwYXJ0cyBvZiB0aGUgY29ubmVjdGlvbi4KPj4gKi8KPj4gY29uLT5z dGF0ZSA9IElQUk9UT19DT05ORUNUSU9OX0RFU1RST1lFRDsKPj4gLSBjcGlwZV9wdXNoKCZ0eF9w aXBlLCAmY29uLT5kZXN0cm95X21zZyk7Cj4+ICsgaWYgKGNvbi0+c2Vzc2lvbiAhPSBOVUxMKQo+ PiArIGNwaXBlX3B1c2goJnR4X3BpcGUsICZjb24tPmRlc3Ryb3lfbXNnKTsKPj4gKyBlbHNlIHsK Pj4gKyAvKgo+PiArICogSW4gY2FzZSBzZXNzaW9uIHdhcyBub3QgY3JlYXRlZCB3ZSBjYW4gc2Fm ZWx5IGRlc3Ryb3kKPj4gKyAqIG5vdCBpbnZvbHZpbmcgdHggdGhyZWFkLiBUaHVzIHdlIGFsc28g bmVlZCB0byBkZXN0cm95Cj4+ICsgKiBvYnVmLCB3aGljaCBzdGlsbCBiZWxvbmdzIHRvIGlwcm90 byB0aHJlYWQuCj4+ICsgKi8KPj4gKyBvYnVmX2Rlc3Ryb3koJmNvbi0+b2J1ZlswXSk7Cj4+ICsg b2J1Zl9kZXN0cm95KCZjb24tPm9idWZbMV0pOwo+PiArIGlwcm90b19jb25uZWN0aW9uX2RlbGV0 ZShjb24pOwo+PiArIH0KPj4gfQo+Pgo+PiAvKioKPj4gQEAgLTY3Nyw5ICs2OTksMTggQEAgaXBy b3RvX2Nvbm5lY3Rpb25fY2xvc2Uoc3RydWN0IGlwcm90b19jb25uZWN0aW9uICpjb24pCj4+ICog aXMgZG9uZSBvbmx5IG9uY2UuCj4+ICovCj4+IGNvbi0+cF9pYnVmLT53cG9zIC09IGNvbi0+cGFy c2Vfc2l6ZTsKPj4gLSBjcGlwZV9wdXNoKCZ0eF9waXBlLCAmY29uLT5kaXNjb25uZWN0X21zZyk7 Cj4+IGFzc2VydChjb24tPnN0YXRlID09IElQUk9UT19DT05ORUNUSU9OX0FMSVZFKTsKPj4gY29u LT5zdGF0ZSA9IElQUk9UT19DT05ORUNUSU9OX0NMT1NFRDsKPj4gKyBybGlzdF9kZWwoJmNvbi0+ aW5fc3RvcF9saXN0KTsKPgo+LSBJcyBkb25lIGJlbG93KHJsaXN0X2RlbCgpKS4gT3IgaXMgdGhl cmUgc29tZSBraW5kIG9mIHRyaWNrPwoqICAKV2VsbCwgdGhpcyBvbmUgaXMgZmluZS4gcmxpc3Rf ZGVsKCkgd2FzIGNhbGxlZCBpbiB0aGUgZW5kIG9mCmlwcm90b19jb25uZWN0aW9uX2Nsb3NlKCkg YXMgZmFyIHRoZSBuZXh0IGRpc2Nvbm5lY3QgYWN0aW9ucwp3ZXJlIGRvbmUgbGF0ZXIgYW55d2F5 LiBOb3cgd2UgbWlnaHQgY2FsbCBpcHJvdG9fY29ubmVjdGlvbl90cnlfdG9fc3RhcnRfZGVzdHJv eSgpCmRpcmVjdGx5IGZyb20gdGhpcyBjb25kaXRpb25hbCBicmFuY2guIFRodXMgd2UgbmVlZCBy bGlzdF9kZWwoKSB0byBiZSBkb25lIGFscmVhZHkuClRoaXMgY29uZGl0aW9uYWwgYnJhbmNoIHJl dHVybnMgYXQgdGhlIGVuZCBhbmQgdGhlIHNlY29uZMKgcmxpc3RfZGVsKCkgaXMgbm90IGNhbGxl ZC4gSW4Kb3RoZXIgY2FzZXMgdGhlIHNlY29uZCBvbmUgaXMgc3RpbGwgdXNlZC4KPgo+PiArIGlm IChjb24tPnNlc3Npb24gIT0gTlVMTCkKPj4gKyBjcGlwZV9wdXNoKCZ0eF9waXBlLCAmY29uLT5k aXNjb25uZWN0X21zZyk7Cj4+ICsgZWxzZQo+PiArIC8qCj4+ICsgKiBJbiBjYXNlIHNlc3Npb24g d2FzIG5vdCBjcmVhdGVkIHdlIGNhbiBzYWZlbHkKPj4gKyAqIHRyeSB0byBzdGFydCBkZXN0cm95 IG5vdCBpbnZvbHZpbmcgdHggdGhyZWFkLgo+PiArICovCj4+ICsgaXByb3RvX2Nvbm5lY3Rpb25f dHJ5X3RvX3N0YXJ0X2Rlc3Ryb3koY29uKTsKPj4gKyByZXR1cm47Cj4+IH0gZWxzZSBpZiAoY29u LT5zdGF0ZSA9PSBJUFJPVE9fQ09OTkVDVElPTl9QRU5ESU5HX0RFU1RST1kpIHsKPj4gaXByb3Rv X2Nvbm5lY3Rpb25fdHJ5X3RvX3N0YXJ0X2Rlc3Ryb3koY29uKTsKPj4gfSBlbHNlIHsKPj4gQEAg LTgwOSw2ICs4NDAsNyBAQCBpcHJvdG9fZW5xdWV1ZV9iYXRjaChzdHJ1Y3QgaXByb3RvX2Nvbm5l Y3Rpb24gKmNvbiwgc3RydWN0IGlidWYgKmluKQo+PiBhc3NlcnQocmxpc3RfZW1wdHkoJmNvbi0+ aW5fc3RvcF9saXN0KSk7Cj4+IGludCBuX3JlcXVlc3RzID0gMDsKPj4gYm9vbCBzdG9wX2lucHV0 ID0gZmFsc2U7Cj4+ICsgYm9vbCBvYnVmX2luX2lwcm90byA9IChjb24tPnNlc3Npb24gPT0gTlVM TCk7Cj4+IGNvbnN0IGNoYXIgKmVycm1zZzsKPj4gd2hpbGUgKGNvbi0+cGFyc2Vfc2l6ZSAhPSAw ICYmICFzdG9wX2lucHV0KSB7Cj4+IGlmIChpcHJvdG9fY2hlY2tfbXNnX21heCgpKSB7Cj4+IEBA IC04NTMsMTIgKzg4NSwyMCBAQCBlcnJfbXNncGFjazoKPj4KPj4gbXNnLT5sZW4gPSByZXFlbmQg LSByZXFzdGFydDsgLyogdG90YWwgcmVxdWVzdCBsZW5ndGggKi8KPj4KPj4gLSBpcHJvdG9fbXNn X2RlY29kZShtc2csICZwb3MsIHJlcWVuZCwgJnN0b3BfaW5wdXQpOwo+PiAtIC8qCj4+IC0gKiBU aGlzIGNhbid0IHRocm93LCBidXQgc2hvdWxkIG5vdCBiZQo+PiAtICogZG9uZSBpbiBjYXNlIG9m IGV4Y2VwdGlvbi4KPj4gLSAqLwo+PiAtIGNwaXBlX3B1c2hfaW5wdXQoJnR4X3BpcGUsICZtc2ct PmJhc2UpOwo+PiArIGlmIChpcHJvdG9fbXNnX2RlY29kZShtc2csICZwb3MsIHJlcWVuZCwgJnN0 b3BfaW5wdXQpID09IDApIHsKPj4gKyBpZiAob2J1Zl9pbl9pcHJvdG8pIHsKPj4gKyAvKgo+PiAr ICogSWYgc2Vzc2lvbiB3YXMgbm90IGNyZWF0ZWQgeWV0IGFuZCBvYnVmIGlzCj4+ICsgKiBzdGls bCBpbiBpcHJvdG8gd2UgbmVlZCB0byBkZXN0cm95IGl0LiBOZXcKPj4gKyAqIG9uZSB3aWxsIGJl IGNyZWF0ZWQgaW4gdHggdGhyZWFkIGlmIG5lZWRlZC4KPj4gKyAqLwo+PiArIG9idWZfZGVzdHJv eSgmY29uLT5vYnVmWzBdKTsKPj4gKyBvYnVmX2Rlc3Ryb3koJmNvbi0+b2J1ZlsxXSk7Cj4+ICsg b2J1Zl9pbl9pcHJvdG8gPSBmYWxzZTsgPiArIH0KPj4gKyBjcGlwZV9wdXNoX2lucHV0KCZ0eF9w aXBlLCAmbXNnLT5iYXNlKTsKPj4gKyB9Cj4+ICsKPj4gbl9yZXF1ZXN0cysrOwo+PiAvKiBSZXF1 ZXN0IGlzIHBhcnNlZCAqLwo+PiBhc3NlcnQocmVxZW5kID4gcmVxc3RhcnQpOwo+PiBAQCAtMTEw NSw4ICsxMTQ1LDggQEAgaXByb3RvX2Nvbm5lY3Rpb25fbmV3KGludCBmZCkKPj4gZXZfaW9faW5p dCgmY29uLT5vdXRwdXQsIGlwcm90b19jb25uZWN0aW9uX29uX291dHB1dCwgZmQsIEVWX1dSSVRF KTsKPj4gaWJ1Zl9jcmVhdGUoJmNvbi0+aWJ1ZlswXSwgY29yZF9zbGFiX2NhY2hlKCksIGlwcm90 b19yZWFkYWhlYWQpOwo+PiBpYnVmX2NyZWF0ZSgmY29uLT5pYnVmWzFdLCBjb3JkX3NsYWJfY2Fj aGUoKSwgaXByb3RvX3JlYWRhaGVhZCk7Cj4+IC0gb2J1Zl9jcmVhdGUoJmNvbi0+b2J1ZlswXSwg Jm5ldF9zbGFiYywgaXByb3RvX3JlYWRhaGVhZCk7Cj4+IC0gb2J1Zl9jcmVhdGUoJmNvbi0+b2J1 ZlsxXSwgJm5ldF9zbGFiYywgaXByb3RvX3JlYWRhaGVhZCk7Cj4+ICsgb2J1Zl9jcmVhdGUoJmNv bi0+b2J1ZlswXSwgJmlwcm90b19zbGFiYywgaXByb3RvX3JlYWRhaGVhZCk7Cj4+ICsgb2J1Zl9j cmVhdGUoJmNvbi0+b2J1ZlsxXSwgJmlwcm90b19zbGFiYywgaXByb3RvX3JlYWRhaGVhZCk7Cj4+ IGNvbi0+cF9pYnVmID0gJmNvbi0+aWJ1ZlswXTsKPj4gY29uLT50eC5wX29idWYgPSAmY29uLT5v YnVmWzBdOwo+PiBpcHJvdG9fd3Bvc19jcmVhdGUoJmNvbi0+d3BvcywgY29uLT50eC5wX29idWYp Owo+PiBAQCAtMTEzNCwxMCArMTE3NCw2IEBAIGlwcm90b19jb25uZWN0aW9uX2RlbGV0ZShzdHJ1 Y3QgaXByb3RvX2Nvbm5lY3Rpb24gKmNvbikKPj4gYXNzZXJ0KCFldmlvX2hhc19mZCgmY29uLT5p bnB1dCkpOwo+PiBhc3NlcnQoY29uLT5zZXNzaW9uID09IE5VTEwpOwo+PiBhc3NlcnQoY29uLT5z dGF0ZSA9PSBJUFJPVE9fQ09OTkVDVElPTl9ERVNUUk9ZRUQpOwo+PiAtIC8qCj4+IC0gKiBUaGUg b3V0cHV0IGJ1ZmZlcnMgbXVzdCBoYXZlIGJlZW4gZGVsZXRlZAo+PiAtICogaW4gdHggdGhyZWFk Lgo+PiAtICovCj4+IGlidWZfZGVzdHJveSgmY29uLT5pYnVmWzBdKTsKPj4gaWJ1Zl9kZXN0cm95 KCZjb24tPmlidWZbMV0pOwo+PiBhc3NlcnQoY29uLT5vYnVmWzBdLnBvcyA9PSAwICYmCj4+IEBA IC0xMTcyLDYgKzEyMDgsOSBAQCB0eF9yZXBseV9lcnJvcihzdHJ1Y3QgaXByb3RvX21zZyAqbXNn KTsKPj4gc3RhdGljIHZvaWQKPj4gdHhfcmVwbHlfaXByb3RvX2Vycm9yKHN0cnVjdCBjbXNnICpt KTsKPj4KPj4gK3N0YXRpYyB2b2lkCj4+ICt0eF9hY2NlcHRfd3BvcyhzdHJ1Y3QgaXByb3RvX2Nv bm5lY3Rpb24gKmNvbiwgY29uc3Qgc3RydWN0IGlwcm90b193cG9zICp3cG9zKTsKPj4gKwo+PiBz dGF0aWMgdm9pZAo+PiBuZXRfc2VuZF9tc2coc3RydWN0IGNtc2cgKm1zZyk7Cj4+Cj4+IEBAIC0x MjQ0LDcgKzEyODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNtc2dfaG9wIGVycm9yX3JvdXRl W10gPSB7Cj4+IHsgbmV0X3NlbmRfZXJyb3IsIE5VTEwgfSwKPj4gfTsKPj4KPj4gLXN0YXRpYyB2 b2lkCj4+ICtzdGF0aWMgaW50Cj4+IGlwcm90b19tc2dfZGVjb2RlKHN0cnVjdCBpcHJvdG9fbXNn ICptc2csIGNvbnN0IGNoYXIgKipwb3MsIGNvbnN0IGNoYXIgKnJlcWVuZCwKPj4gYm9vbCAqc3Rv cF9pbnB1dCkKPj4gewo+PiBAQCAtMTMxNCwxMyArMTM1MywyNyBAQCBpcHJvdG9fbXNnX2RlY29k ZShzdHJ1Y3QgaXByb3RvX21zZyAqbXNnLCBjb25zdCBjaGFyICoqcG9zLCBjb25zdCBjaGFyICpy ZXFlbmQsCj4+ICh1aW50MzJfdCkgdHlwZSk7Cj4+IGdvdG8gZXJyb3I7Cj4+IH0KPj4gLSByZXR1 cm47Cj4+ICsgcmV0dXJuIDA7Cj4+IGVycm9yOgo+PiAvKiogTG9nIGFuZCBzZW5kIHRoZSBlcnJv ci4gKi8KPj4gZGlhZ19sb2coKTsKPj4gZGlhZ19jcmVhdGUoJm1zZy0+ZGlhZyk7Cj4+IGRpYWdf bW92ZSgmZmliZXIoKS0+ZGlhZywgJm1zZy0+ZGlhZyk7Cj4KPi0gVW5uZWVkZWQgaW4gY2FzZSBz ZXNzaW9uID09IE5VTEwuIFVzZSBuZXRfc2VuZF9tc2coKSBpbnN0ZWFkIG9mCj5uZXRfc2VuZF9l cnJvcigpLgoqICAKUmlnaHQsIHdpbGwgYmUgZml4ZWQgaW4gdjIuCj4KPj4gLSBjbXNnX2luaXQo Jm1zZy0+YmFzZSwgZXJyb3Jfcm91dGUpOwo+PiArIGlmIChtc2ctPmNvbm5lY3Rpb24tPnNlc3Np b24gIT0gTlVMTCkgewo+PiArIGNtc2dfaW5pdCgmbXNnLT5iYXNlLCBlcnJvcl9yb3V0ZSk7Cj4+ ICsgcmV0dXJuIDA7Cj4KPi0gTWF5IGJlIHJldHVybiAtMSAoZGVjb2RlIGZhaWwpLiBXaGF0IGRv ZXMgdGhlIHJldHVybiB2YWx1ZSBtZWFuCj5vdGhlcndpc2U/CiogIApXZWxsLCB5ZXMsIGkgc2Vl LCB0aGlzIGlzIGNvbmZ1c2luZy4gQmFzaWNhbGx5IC0xIG1lYW5zIHdlIGhhdmUgbm90aGluZyB0 byBkbyB3aXRoCnR4IGFueSBtb3JlLiBJIHRoaW5rIGl0IGlzIGJldHRlciB0byBpbnRyb2R1Y2Ug MiBlcnJvciBjb2RlcyBhbmQgcmV0dXJuIDEgaGVyZSB0byBzZXBhcmF0ZQp0aGlzIGNhc2UgZnJv bSB0aGUgcHVyZcKgaXByb3RvIGNhc2UuCj4KPj4gKyB9Cj4+ICsgLyoKPj4gKyAqIEluIGNhc2Ug c2Vzc2lvbiB3YXMgbm90IGNyZWF0ZWQgd2UgY2FuIHByb2Nlc3MgZXJyb3IgcGF0aAo+PiArICog d2l0aG91dCB0eCB0aHJlYWQuCj4+ICsgKi8KPj4gKyB0eF9hY2NlcHRfd3Bvcyhtc2ctPmNvbm5l Y3Rpb24sICZtc2ctPndwb3MpOwo+PiArIHN0cnVjdCBvYnVmICpvdXQgPSBtc2ctPmNvbm5lY3Rp b24tPnR4LnBfb2J1ZjsKPj4gKyBpcHJvdG9fcmVwbHlfZXJyb3Iob3V0LCBkaWFnX2xhc3RfZXJy b3IoJm1zZy0+ZGlhZyksCj4+ICsgbXNnLT5oZWFkZXIuc3luYywgOjpzY2hlbWFfdmVyc2lvbik7 Cj4+ICsgaXByb3RvX3dwb3NfY3JlYXRlKCZtc2ctPndwb3MsIG91dCk7Cj4+ICsgbmV0X3NlbmRf ZXJyb3IoJihtc2ctPmJhc2UpKTsKPj4gKyByZXR1cm4gLTE7Cj4+IH0KPj4KPj4gc3RhdGljIHZv aWQKPj4gQEAgLTEzODIsMTAgKzE0MzUsNiBAQCB0eF9wcm9jZXNzX2Rlc3Ryb3koc3RydWN0IGNt c2cgKm0pCj4+IHNlc3Npb25fZGVzdHJveShjb24tPnNlc3Npb24pOwo+PiBjb24tPnNlc3Npb24g PSBOVUxMOyAvKiBzYWZldHkgKi8KPj4gfQo+PiAtIC8qCj4+IC0gKiBHb3QgdG8gYmUgZG9uZSBp biBpcHJvdG8gdGhyZWFkIHNpbmNlCj4+IC0gKiB0aGF0J3Mgd2hlcmUgdGhlIG1lbW9yeSBpcyBh bGxvY2F0ZWQuCj4+IC0gKi8KPj4gb2J1Zl9kZXN0cm95KCZjb24tPm9idWZbMF0pOwo+PiBvYnVm X2Rlc3Ryb3koJmNvbi0+b2J1ZlsxXSk7Cj4+IH0KPj4gQEAgLTE0NzgsMTMgKzE1MjcsMjEgQEAg dHhfYWNjZXB0X3dwb3Moc3RydWN0IGlwcm90b19jb25uZWN0aW9uICpjb24sIGNvbnN0IHN0cnVj dCBpcHJvdG9fd3BvcyAqd3BvcykKPj4gfQo+PiB9Cj4+Cj4+IC1zdGF0aWMgaW5saW5lIHN0cnVj dCBpcHJvdG9fbXNnICoKPj4gLXR4X2FjY2VwdF9tc2coc3RydWN0IGNtc2cgKm0pCj4+ICtzdGF0 aWMgaW5saW5lIGludAo+PiArdHhfYWNjZXB0X21zZyhzdHJ1Y3QgY21zZyAqbSwgc3RydWN0IGlw cm90b19tc2cgKiptc2cpCj4+IHsKPj4gLSBzdHJ1Y3QgaXByb3RvX21zZyAqbXNnID0gKHN0cnVj dCBpcHJvdG9fbXNnICopIG07Cj4+IC0gdHhfYWNjZXB0X3dwb3MobXNnLT5jb25uZWN0aW9uLCAm bXNnLT53cG9zKTsKPj4gLSB0eF9maWJlcl9pbml0KG1zZy0+Y29ubmVjdGlvbi0+c2Vzc2lvbiwg bXNnLT5oZWFkZXIuc3luYyk7Cj4+IC0gcmV0dXJuIG1zZzsKPj4gKyAqbXNnID0gKHN0cnVjdCBp cHJvdG9fbXNnICopIG07Cj4+ICsgLyoKPj4gKyAqIEluIGNhc2Ugc2Vzc2lvbiB3YXMgbm90IGNy ZWF0ZWQgd2UgbmVlZCB0byBpbml0IGNvbm5lY3Rpb24gaW4gdHggYW5kCj4+ICsgKiBjcmVhdGUg aXQgaGVyZS4KPj4gKyAqLwo+PiArIGlmICgoKm1zZyktPmNvbm5lY3Rpb24tPnNlc3Npb24gPT0g TlVMTCAmJiB0eF9pbml0X2Nvbm5lY3QoKm1zZykgIT0gMCkgewo+PiArICgqbXNnKS0+Y2xvc2Vf Y29ubmVjdGlvbiA9IHRydWU7Cj4+ICsgcmV0dXJuIC0xOwo+PiArIH0KPj4gKyB0eF9hY2NlcHRf d3BvcygoKm1zZyktPmNvbm5lY3Rpb24sICYoKm1zZyktPndwb3MpOwo+PiArIHR4X2ZpYmVyX2lu aXQoKCptc2cpLT5jb25uZWN0aW9uLT5zZXNzaW9uLCAoKm1zZyktPmhlYWRlci5zeW5jKTsKPj4g KyByZXR1cm4gMDsKPj4gfQo+Pgo+PiAvKioKPj4gQEAgLTE1MDcsNyArMTU2NCw4IEBAIHR4X3Jl cGx5X2Vycm9yKHN0cnVjdCBpcHJvdG9fbXNnICptc2cpCj4+IHN0YXRpYyB2b2lkCj4+IHR4X3Jl cGx5X2lwcm90b19lcnJvcihzdHJ1Y3QgY21zZyAqbSkKPj4gewo+PiAtIHN0cnVjdCBpcHJvdG9f bXNnICptc2cgPSB0eF9hY2NlcHRfbXNnKG0pOwo+PiArIHN0cnVjdCBpcHJvdG9fbXNnICptc2c7 Cj4+ICsgdHhfYWNjZXB0X21zZyhtLCAmbXNnKTsKPgo+LSBQbGVhc2UgYWRkIGEgY29tbWVudCB3 aHkgdGhlIHJldHVybiB2YWx1ZSBjaGVjayBpcyB1bm5lY2Vzc2FyeS4KKiAgClJpZ2h0LCB3aWxs IGJlIGZpeGVkIGluIHYyLgo+Cj4+IHN0cnVjdCBvYnVmICpvdXQgPSBtc2ctPmNvbm5lY3Rpb24t PnR4LnBfb2J1ZjsKPj4gaXByb3RvX3JlcGx5X2Vycm9yKG91dCwgZGlhZ19sYXN0X2Vycm9yKCZt c2ctPmRpYWcpLAo+PiBtc2ctPmhlYWRlci5zeW5jLCA6OnNjaGVtYV92ZXJzaW9uKTsKPj4gQEAg LTE1MjcsNyArMTU4NSw5IEBAIHR4X2luamVjdF9kZWxheSh2b2lkKQo+PiBzdGF0aWMgdm9pZAo+ PiB0eF9wcm9jZXNzMShzdHJ1Y3QgY21zZyAqbSkKPj4gewo+PiAtIHN0cnVjdCBpcHJvdG9fbXNn ICptc2cgPSB0eF9hY2NlcHRfbXNnKG0pOwo+PiArIHN0cnVjdCBpcHJvdG9fbXNnICptc2c7Cj4+ ICsgaWYgKHR4X2FjY2VwdF9tc2cobSwgJm1zZykgIT0gMCkKPj4gKyBnb3RvIGVycm9yOwo+PiBp ZiAodHhfY2hlY2tfc2NoZW1hKG1zZy0+aGVhZGVyLnNjaGVtYV92ZXJzaW9uKSkKPj4gZ290byBl cnJvcjsKPj4KPj4gQEAgLTE1NTMsMTcgKzE2MTMsMjAgQEAgZXJyb3I6Cj4+IHN0YXRpYyB2b2lk Cj4+IHR4X3Byb2Nlc3Nfc2VsZWN0KHN0cnVjdCBjbXNnICptKQo+PiB7Cj4+IC0gc3RydWN0IGlw cm90b19tc2cgKm1zZyA9IHR4X2FjY2VwdF9tc2cobSk7Cj4+ICsgc3RydWN0IGlwcm90b19tc2cg Km1zZzsKPj4gKyBzdHJ1Y3QgcmVxdWVzdCAqcmVxOwo+Cj4tIFVubmVlZGVkIGNoYW5nZS4KKiAg ClRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhcyBmYXIgYXPCoHZhcmlhYmxlc8KgCmhhdmUgdG8gYmUg ZGVjbGFyZWQgYmVmb3JlIGdvdG8uCj4KPj4gc3RydWN0IG9idWYgKm91dDsKPj4gc3RydWN0IG9i dWZfc3ZwIHN2cDsKPj4gc3RydWN0IHBvcnQgcG9ydDsKPj4gaW50IGNvdW50Owo+PiBpbnQgcmM7 Cj4+IC0gc3RydWN0IHJlcXVlc3QgKnJlcSA9ICZtc2ctPmRtbDsKPj4gKyBpZiAodHhfYWNjZXB0 X21zZyhtLCAmbXNnKSAhPSAwKQo+PiArIGdvdG8gZXJyb3I7Cj4+IGlmICh0eF9jaGVja19zY2hl bWEobXNnLT5oZWFkZXIuc2NoZW1hX3ZlcnNpb24pKQo+PiBnb3RvIGVycm9yOwo+Pgo+PiB0eF9p bmplY3RfZGVsYXkoKTsKPj4gKyByZXEgPSAmbXNnLT5kbWw7Cj4+IHJjID0gYm94X3NlbGVjdChy ZXEtPnNwYWNlX2lkLCByZXEtPmluZGV4X2lkLAo+PiByZXEtPml0ZXJhdG9yLCByZXEtPm9mZnNl dCwgcmVxLT5saW1pdCwKPj4gcmVxLT5rZXksIHJlcS0+a2V5X2VuZCwgJnBvcnQpOwo+PiBAQCAt MTYwNyw3ICsxNjcwLDkgQEAgdHhfcHJvY2Vzc19jYWxsX29uX3lpZWxkKHN0cnVjdCB0cmlnZ2Vy ICp0cmlnZ2VyLCB2b2lkICpldmVudCkKPj4gc3RhdGljIHZvaWQKPj4gdHhfcHJvY2Vzc19jYWxs KHN0cnVjdCBjbXNnICptKQo+PiB7Cj4+IC0gc3RydWN0IGlwcm90b19tc2cgKm1zZyA9IHR4X2Fj Y2VwdF9tc2cobSk7Cj4+ICsgc3RydWN0IGlwcm90b19tc2cgKm1zZzsKPj4gKyBpZiAodHhfYWNj ZXB0X21zZyhtLCAmbXNnKSAhPSAwKQo+PiArIGdvdG8gZXJyb3I7Cj4+IGlmICh0eF9jaGVja19z Y2hlbWEobXNnLT5oZWFkZXIuc2NoZW1hX3ZlcnNpb24pKQo+PiBnb3RvIGVycm9yOwo+Pgo+PiBA QCAtMTY4NiwxMyArMTc1MSwxNSBAQCBlcnJvcjoKPj4gc3RhdGljIHZvaWQKPj4gdHhfcHJvY2Vz c19taXNjKHN0cnVjdCBjbXNnICptKQo+PiB7Cj4+IC0gc3RydWN0IGlwcm90b19tc2cgKm1zZyA9 IHR4X2FjY2VwdF9tc2cobSk7Cj4+IC0gc3RydWN0IGlwcm90b19jb25uZWN0aW9uICpjb24gPSBt c2ctPmNvbm5lY3Rpb247Cj4+IC0gc3RydWN0IG9idWYgKm91dCA9IGNvbi0+dHgucF9vYnVmOwo+ PiArIHN0cnVjdCBpcHJvdG9fbXNnICptc2c7Cj4+ICsgaWYgKHR4X2FjY2VwdF9tc2cobSwgJm1z ZykgIT0gMCkKPj4gKyBnb3RvIGVycm9yOwo+PiBpZiAodHhfY2hlY2tfc2NoZW1hKG1zZy0+aGVh ZGVyLnNjaGVtYV92ZXJzaW9uKSkKPj4gZ290byBlcnJvcjsKPj4KPj4gdHJ5IHsKPj4gKyBzdHJ1 Y3QgaXByb3RvX2Nvbm5lY3Rpb24gKmNvbiA9IG1zZy0+Y29ubmVjdGlvbjsKPj4gKyBzdHJ1Y3Qg b2J1ZiAqb3V0ID0gY29uLT50eC5wX29idWY7Cj4+IHN0cnVjdCBiYWxsb3QgYmFsbG90Owo+PiBz d2l0Y2ggKG1zZy0+aGVhZGVyLnR5cGUpIHsKPj4gY2FzZSBJUFJPVE9fQVVUSDoKPj4gQEAgLTE3 MjksNyArMTc5Niw3IEBAIGVycm9yOgo+PiBzdGF0aWMgdm9pZAo+PiB0eF9wcm9jZXNzX3NxbChz dHJ1Y3QgY21zZyAqbSkKPj4gewo+PiAtIHN0cnVjdCBpcHJvdG9fbXNnICptc2cgPSB0eF9hY2Nl cHRfbXNnKG0pOwo+PiArIHN0cnVjdCBpcHJvdG9fbXNnICptc2c7Cj4+IHN0cnVjdCBvYnVmICpv dXQ7Cj4+IHN0cnVjdCBwb3J0IHBvcnQ7Cj4+IHN0cnVjdCBzcWxfYmluZCAqYmluZCA9IE5VTEw7 Cj4+IEBAIC0xNzM4LDYgKzE4MDUsOCBAQCB0eF9wcm9jZXNzX3NxbChzdHJ1Y3QgY21zZyAqbSkK Pj4gdWludDMyX3QgbGVuOwo+PiBib29sIGlzX3VucHJlcGFyZSA9IGZhbHNlOwo+Pgo+PiArIGlm ICh0eF9hY2NlcHRfbXNnKG0sICZtc2cpICE9IDApCj4+ICsgZ290byBlcnJvcjsKPj4gaWYgKHR4 X2NoZWNrX3NjaGVtYShtc2ctPmhlYWRlci5zY2hlbWFfdmVyc2lvbikpCj4+IGdvdG8gZXJyb3I7 Cj4+IGFzc2VydChtc2ctPmhlYWRlci50eXBlID09IElQUk9UT19FWEVDVVRFIHx8Cj4+IEBAIC0x ODI1LDcgKzE4OTQsMTEgQEAgZXJyb3I6Cj4+IHN0YXRpYyB2b2lkCj4+IHR4X3Byb2Nlc3NfcmVw bGljYXRpb24oc3RydWN0IGNtc2cgKm0pCj4+IHsKPj4gLSBzdHJ1Y3QgaXByb3RvX21zZyAqbXNn ID0gdHhfYWNjZXB0X21zZyhtKTsKPj4gKyBzdHJ1Y3QgaXByb3RvX21zZyAqbXNnOwo+PiArIGlm ICh0eF9hY2NlcHRfbXNnKG0sICZtc2cpICE9IDApIHsKPj4gKyB0eF9yZXBseV9lcnJvcihtc2cp Owo+PiArIHJldHVybjsKPj4gKyB9Cj4+IHN0cnVjdCBpcHJvdG9fY29ubmVjdGlvbiAqY29uID0g bXNnLT5jb25uZWN0aW9uOwo+PiBzdHJ1Y3QgZXZfaW8gaW87Cj4+IGNvaW9fY3JlYXRlKCZpbywg Y29uLT5pbnB1dC5mZCk7Cj4+IEBAIC0xODY1LDYgKzE5MzgsMjkgQEAgdHhfcHJvY2Vzc19yZXBs aWNhdGlvbihzdHJ1Y3QgY21zZyAqbSkKPj4gfQo+PiB9Cj4+Cj4+ICtzdGF0aWMgaW50Cj4+ICtu ZXRfY2hlY2tfY29ubmVjdGlvbihzdHJ1Y3QgaXByb3RvX21zZyAqbXNnKQo+Cj4tIFNlZW1zIGxp a2UgdGhlICJib29sIiB0eXBlIHNob3VsZCBiZSB1c2VkIGZvciBuZXRfY2hlY2tfY29ubmVjdGlv bgo+KCBodHRwczovL3d3dy50YXJhbnRvb2wuaW8vZW4vZG9jLzEuMTAvZGV2X2d1aWRlL2Nfc3R5 bGVfZ3VpZGUvI2NoYXB0ZXItMTYtZnVuY3Rpb24tcmV0dXJuLXZhbHVlcy1hbmQtbmFtZXMgKS4K PkluIHRoZSBmdW5jdGlvbiwgeW91IG5vdCBvbmx5IGNoZWNrIGEgY29ubmVjdGlvbiBzdGF0dXMs IGJ1dCBhbHNvIGNsb3NlCj5pdCBpZiBuZWNlc3NhcnkuIEkgdGhpbmsgaXQgd291bGQgYmUgbmlj ZSB0byBhZGQgYSBkZXNjcmlwdGlvbiBvZiB0aGUKPmZ1bmN0aW9uLgoqICAKUmlnaHQuIEkgc2Vl LCBpdCBpc8KgY29uZnVzaW5nwqBub3cuIFdpbGwgYmUgZml4ZWTCoGluIHYyLgo+Cj4+ICt7Cj4+ ICsgaWYgKCFtc2ctPmNsb3NlX2Nvbm5lY3Rpb24pCj4+ICsgcmV0dXJuIDA7Cj4+ICsKPj4gKyBz dHJ1Y3QgaXByb3RvX2Nvbm5lY3Rpb24gKmNvbiA9IG1zZy0+Y29ubmVjdGlvbjsKPj4gKyBzdHJ1 Y3Qgb2J1ZiAqb3V0ID0gbXNnLT53cG9zLm9idWY7Cj4+ICsgaW50NjRfdCBud3IgPSBzaW9fd3Jp dGV2KGNvbi0+b3V0cHV0LmZkLCBvdXQtPmlvdiwKPj4gKyBvYnVmX2lvdmNudChvdXQpKTsKPj4g Kwo+PiArIGlmIChud3IgPiAwKSB7Cj4+ICsgLyogQ291bnQgc3RhdGlzdGljcy4gKi8KPj4gKyBy bWVhbl9jb2xsZWN0KHJtZWFuX25ldCwgSVBST1RPX1NFTlQsIG53cik7Cj4+ICsgfSBlbHNlIGlm IChud3IgPCAwICYmICEgc2lvX3dvdWxkYmxvY2soZXJybm8pKSB7Cj4+ICsgZGlhZ19sb2coKTsK Pj4gKyB9Cj4+ICsgYXNzZXJ0KGlwcm90b19jb25uZWN0aW9uX2lzX2lkbGUoY29uKSk7Cj4+ICsg aXByb3RvX2Nvbm5lY3Rpb25fY2xvc2UoY29uKTsKPj4gKyBpcHJvdG9fbXNnX2RlbGV0ZShtc2cp Owo+PiArIHJldHVybiAtMTsKPj4gK30KPj4gKwo+PiBzdGF0aWMgdm9pZAo+PiBuZXRfc2VuZF9t c2coc3RydWN0IGNtc2cgKm0pCj4+IHsKPj4gQEAgLTE4ODEsNiArMTk3Nyw5IEBAIG5ldF9zZW5k X21zZyhzdHJ1Y3QgY21zZyAqbSkKPj4gfQo+PiBjb24tPndlbmQgPSBtc2ctPndwb3M7Cj4+Cj4+ ICsgaWYgKG5ldF9jaGVja19jb25uZWN0aW9uKG1zZykgIT0gMCkKPj4gKyByZXR1cm47Cj4+ICsK Pj4gaWYgKGV2aW9faGFzX2ZkKCZjb24tPm91dHB1dCkpIHsKPj4gaWYgKCEgZXZfaXNfYWN0aXZl KCZjb24tPm91dHB1dCkpCj4+IGV2X2ZlZWRfZXZlbnQoY29uLT5sb29wLCAmY29uLT5vdXRwdXQs IEVWX1dSSVRFKTsKPj4gQEAgLTE5MTAsNiArMjAwOSwxMCBAQCBuZXRfZW5kX2pvaW4oc3RydWN0 IGNtc2cgKm0pCj4+IHN0cnVjdCBpcHJvdG9fY29ubmVjdGlvbiAqY29uID0gbXNnLT5jb25uZWN0 aW9uOwo+Pgo+PiBtc2ctPnBfaWJ1Zi0+cnBvcyArPSBtc2ctPmxlbjsKPj4gKwo+PiArIGlmIChu ZXRfY2hlY2tfY29ubmVjdGlvbihtc2cpICE9IDApCj4+ICsgcmV0dXJuOwo+PiArCj4+IGlwcm90 b19tc2dfZGVsZXRlKG1zZyk7Cj4+Cj4+IGFzc2VydCghIGV2X2lzX2FjdGl2ZSgmY29uLT5pbnB1 dCkpOwo+PiBAQCAtMTkyOCw2ICsyMDMxLDEwIEBAIG5ldF9lbmRfc3Vic2NyaWJlKHN0cnVjdCBj bXNnICptKQo+PiBzdHJ1Y3QgaXByb3RvX2Nvbm5lY3Rpb24gKmNvbiA9IG1zZy0+Y29ubmVjdGlv bjsKPj4KPj4gbXNnLT5wX2lidWYtPnJwb3MgKz0gbXNnLT5sZW47Cj4+ICsKPj4gKyBpZiAobmV0 X2NoZWNrX2Nvbm5lY3Rpb24obXNnKSAhPSAwKQo+PiArIHJldHVybjsKPj4gKwo+PiBpcHJvdG9f bXNnX2RlbGV0ZShtc2cpOwo+Pgo+PiBhc3NlcnQoISBldl9pc19hY3RpdmUoJmNvbi0+aW5wdXQp KTsKPj4gQEAgLTE5MzYsODEgKzIwNDMsNDkgQEAgbmV0X2VuZF9zdWJzY3JpYmUoc3RydWN0IGNt c2cgKm0pCj4+IH0KPj4KPj4gLyoqCj4+IC0gKiBIYW5kc2hha2UgYSBjb25uZWN0aW9uOiBpbnZv a2UgdGhlIG9uLWNvbm5lY3QgdHJpZ2dlcgo+PiAtICogYW5kIHBvc3NpYmx5IGF1dGhlbnRpY2F0 ZS4gVHJ5IHRvIHNlbmQgdGhlIGNsaWVudCBhbiBlcnJvcgo+PiAtICogdXBvbiBhIGZhaWx1cmUu Cj4+ICsgKiBIYW5kc2hha2UgYSBjb25uZWN0aW9uOiBwcmVwYXJlIGdyZWV0aW5nIGZvciBpdC4K Pj4gKi8KPj4gc3RhdGljIHZvaWQKPj4gLXR4X3Byb2Nlc3NfY29ubmVjdChzdHJ1Y3QgY21zZyAq bSkKPj4gK2lwcm90b19wcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IGlwcm90b19tc2cgKm1zZykKPj4g ewo+PiAtIHN0cnVjdCBpcHJvdG9fbXNnICptc2cgPSAoc3RydWN0IGlwcm90b19tc2cgKikgbTsK Pj4gc3RydWN0IGlwcm90b19jb25uZWN0aW9uICpjb24gPSBtc2ctPmNvbm5lY3Rpb247Cj4+IHN0 cnVjdCBvYnVmICpvdXQgPSBtc2ctPmNvbm5lY3Rpb24tPnR4LnBfb2J1ZjsKPj4gLSB0cnkgeyAv KiBjb25uZWN0LiAqLwo+Cj4tIFdoeSAidHJ5IC0gY2F0Y2giIGhhcyBiZWVuIGRlbGV0ZWQ/Ciog IApIbW0sIHJpZ2h0LCBJIGZvcmdvdCBhYm91dCB0aGUgb2J1Zl9kdXBfeGMoKSBmdW5jdGlvbi4g T3RoZXLCoHBvdGVudGlhbAp0aHJvd2VycyB3ZXJlIG1vdmVkLiBGYWlsIG9uwqBvYnVmX2R1cCgp IGlzIG5vdyBwcm9jZXNzZWQgY29ycmVjdGx5Lgo+Cj4+IC0gY29uLT5zZXNzaW9uID0gc2Vzc2lv bl9jcmVhdGUoU0VTU0lPTl9UWVBFX0JJTkFSWSk7Cj4+IC0gaWYgKGNvbi0+c2Vzc2lvbiA9PSBO VUxMKQo+PiAtIGRpYWdfcmFpc2UoKTsKPj4gLSBjb24tPnNlc3Npb24tPm1ldGEuY29ubmVjdGlv biA9IGNvbjsKPj4gLSB0eF9maWJlcl9pbml0KGNvbi0+c2Vzc2lvbiwgMCk7Cj4+IC0gY2hhciAq Z3JlZXRpbmcgPSAoY2hhciAqKSBzdGF0aWNfYWxsb2MoSVBST1RPX0dSRUVUSU5HX1NJWkUpOwo+ PiAtIC8qIFRPRE86IGRpcnR5IHJlYWQgZnJvbSB0eCB0aHJlYWQgKi8KPj4gLSBzdHJ1Y3QgdHRf dXVpZCB1dWlkID0gSU5TVEFOQ0VfVVVJRDsKPj4gLSByYW5kb21fYnl0ZXMoY29uLT5zYWx0LCBJ UFJPVE9fU0FMVF9TSVpFKTsKPj4gLSBncmVldGluZ19lbmNvZGUoZ3JlZXRpbmcsIHRhcmFudG9v bF92ZXJzaW9uX2lkKCksICZ1dWlkLAo+PiAtIGNvbi0+c2FsdCwgSVBST1RPX1NBTFRfU0laRSk7 Cj4+IC0gb2J1Zl9kdXBfeGMob3V0LCBncmVldGluZywgSVBST1RPX0dSRUVUSU5HX1NJWkUpOwo+ PiAtIGlmICghIHJsaXN0X2VtcHR5KCZzZXNzaW9uX29uX2Nvbm5lY3QpKSB7Cj4+IC0gaWYgKHNl c3Npb25fcnVuX29uX2Nvbm5lY3RfdHJpZ2dlcnMoY29uLT5zZXNzaW9uKSAhPSAwKQo+PiAtIGRp YWdfcmFpc2UoKTsKPj4gLSB9Cj4+IC0gaXByb3RvX3dwb3NfY3JlYXRlKCZtc2ctPndwb3MsIG91 dCk7Cj4+IC0gfSBjYXRjaCAoRXhjZXB0aW9uICplKSB7Cj4+IC0gdHhfcmVwbHlfZXJyb3IobXNn KTsKPj4gLSBtc2ctPmNsb3NlX2Nvbm5lY3Rpb24gPSB0cnVlOwo+PiAtIH0KPj4gLX0KPj4gLQo+ PiAtLyoqCj4+IC0gKiBTZW5kIGEgcmVzcG9uc2UgdG8gY29ubmVjdCB0byB0aGUgY2xpZW50IG9y IGNsb3NlIHRoZQo+PiAtICogY29ubmVjdGlvbiBpbiBjYXNlIG9uX2Nvbm5lY3QgdHJpZ2dlciBm YWlsZWQuCj4+IC0gKi8KPj4gLXN0YXRpYyB2b2lkCj4+IC1uZXRfc2VuZF9ncmVldGluZyhzdHJ1 Y3QgY21zZyAqbSkKPj4gLXsKPj4gLSBzdHJ1Y3QgaXByb3RvX21zZyAqbXNnID0gKHN0cnVjdCBp cHJvdG9fbXNnICopIG07Cj4+IC0gc3RydWN0IGlwcm90b19jb25uZWN0aW9uICpjb24gPSBtc2ct PmNvbm5lY3Rpb247Cj4+IC0gaWYgKG1zZy0+Y2xvc2VfY29ubmVjdGlvbikgewo+PiAtIHN0cnVj dCBvYnVmICpvdXQgPSBtc2ctPndwb3Mub2J1ZjsKPj4gLSBpbnQ2NF90IG53ciA9IHNpb193cml0 ZXYoY29uLT5vdXRwdXQuZmQsIG91dC0+aW92LAo+PiAtIG9idWZfaW92Y250KG91dCkpOwo+PiAt Cj4+IC0gaWYgKG53ciA+IDApIHsKPj4gLSAvKiBDb3VudCBzdGF0aXN0aWNzLiAqLwo+PiAtIHJt ZWFuX2NvbGxlY3Qocm1lYW5fbmV0LCBJUFJPVE9fU0VOVCwgbndyKTsKPj4gLSB9IGVsc2UgaWYg KG53ciA8IDAgJiYgISBzaW9fd291bGRibG9jayhlcnJubykpIHsKPj4gLSBkaWFnX2xvZygpOwo+ PiAtIH0KPj4gLSBhc3NlcnQoaXByb3RvX2Nvbm5lY3Rpb25faXNfaWRsZShjb24pKTsKPj4gLSBp cHJvdG9fY29ubmVjdGlvbl9jbG9zZShjb24pOwo+PiAtIGlwcm90b19tc2dfZGVsZXRlKG1zZyk7 Cj4+IC0gcmV0dXJuOwo+PiAtIH0KPj4gKyBjaGFyICpncmVldGluZyA9IChjaGFyICopIHN0YXRp Y19hbGxvYyhJUFJPVE9fR1JFRVRJTkdfU0laRSk7Cj4+ICsgc3RydWN0IHR0X3V1aWQgdXVpZCA9 IElOU1RBTkNFX1VVSUQ7Cj4+ICsgcmFuZG9tX2J5dGVzKGNvbi0+c2FsdCwgSVBST1RPX1NBTFRf U0laRSk7Cj4+ICsgZ3JlZXRpbmdfZW5jb2RlKGdyZWV0aW5nLCB0YXJhbnRvb2xfdmVyc2lvbl9p ZCgpLCAmdXVpZCwKPj4gKyBjb24tPnNhbHQsIElQUk9UT19TQUxUX1NJWkUpOwo+PiArIG9idWZf ZHVwX3hjKG91dCwgZ3JlZXRpbmcsIElQUk9UT19HUkVFVElOR19TSVpFKTsKPj4gKyBpcHJvdG9f d3Bvc19jcmVhdGUoJm1zZy0+d3Bvcywgb3V0KTsKPj4gY29uLT53ZW5kID0gbXNnLT53cG9zOwo+ PiAtIC8qCj4+IC0gKiBDb25uZWN0IGlzIHN5bmNocm9ub3VzLCBzbyBubyBvbmUgY291bGQgaGF2 ZSBiZWVuCj4+IC0gKiBtZXNzaW5nIHVwIHdpdGggdGhlIGNvbm5lY3Rpb24gd2hpbGUgaXQgd2Fz IGluCj4+IC0gKiBwcm9ncmVzcy4KPj4gLSAqLwo+PiBhc3NlcnQoZXZpb19oYXNfZmQoJmNvbi0+ b3V0cHV0KSk7Cj4+IC0gLyogSGFuZHNoYWtlIE9LLCBzdGFydCByZWFkaW5nIGlucHV0LiAqLwo+ PiBldl9mZWVkX2V2ZW50KGNvbi0+bG9vcCwgJmNvbi0+b3V0cHV0LCBFVl9XUklURSk7Cj4+IGlw cm90b19tc2dfZGVsZXRlKG1zZyk7Cj4+IH0KPj4KPj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY21z Z19ob3AgY29ubmVjdF9yb3V0ZVtdID0gewo+PiAtIHsgdHhfcHJvY2Vzc19jb25uZWN0LCAmbmV0 X3BpcGUgfSwKPj4gLSB7IG5ldF9zZW5kX2dyZWV0aW5nLCBOVUxMIH0sCj4+IC19Owo+PiArc3Rh dGljIGludAo+PiArdHhfaW5pdF9jb25uZWN0KHN0cnVjdCBpcHJvdG9fbXNnICptc2cpCj4+ICt7 Cj4+ICsgc3RydWN0IGlwcm90b19jb25uZWN0aW9uICpjb24gPSBtc2ctPmNvbm5lY3Rpb247Cj4+ ICsgb2J1Zl9jcmVhdGUoJmNvbi0+b2J1ZlswXSwgJm5ldF9zbGFiYywgaXByb3RvX3JlYWRhaGVh ZCk7Cj4+ICsgb2J1Zl9jcmVhdGUoJmNvbi0+b2J1ZlsxXSwgJm5ldF9zbGFiYywgaXByb3RvX3Jl YWRhaGVhZCk7Cj4+ICsgY29uLT50eC5wX29idWYgPSAmY29uLT5vYnVmWzBdOwo+PiArIGlwcm90 b193cG9zX2NyZWF0ZSgmY29uLT53cG9zLCBjb24tPnR4LnBfb2J1Zik7Cj4+ICsgaXByb3RvX3dw b3NfY3JlYXRlKCZjb24tPndlbmQsIGNvbi0+dHgucF9vYnVmKTsKPj4gKwo+PiArIGNvbi0+c2Vz c2lvbiA9IHNlc3Npb25fY3JlYXRlKFNFU1NJT05fVFlQRV9CSU5BUlkpOwo+PiArIGlmIChjb24t PnNlc3Npb24gPT0gTlVMTCkKPj4gKyByZXR1cm4gLTE7Cj4+ICsgY29uLT5zZXNzaW9uLT5tZXRh LmNvbm5lY3Rpb24gPSBjb247Cj4+ICsKPj4gKyB0eF9maWJlcl9pbml0KGNvbi0+c2Vzc2lvbiwg MCk7Cj4+ICsgaWYgKCEgcmxpc3RfZW1wdHkoJnNlc3Npb25fb25fY29ubmVjdCkpIHsKPj4gKyBp ZiAoc2Vzc2lvbl9ydW5fb25fY29ubmVjdF90cmlnZ2Vycyhjb24tPnNlc3Npb24pICE9IDApCj4+ ICsgcmV0dXJuIC0xOwo+PiArIH0KPj4gKwo+PiArIHJldHVybiAwOwo+PiArfQo+Pgo+PiAvKiog fX19ICovCj4+Cj4+IEBAIC0yMDM3LDExICsyMTEyLDEwIEBAIGlwcm90b19vbl9hY2NlcHQoc3Ry dWN0IGV2aW9fc2VydmljZSAqIC8qIHNlcnZpY2UgKi8sIGludCBmZCwKPj4gbWVtcG9vbF9mcmVl KCZpcHJvdG9fY29ubmVjdGlvbl9wb29sLCBjb24pOwo+PiByZXR1cm4gLTE7Cj4+IH0KPj4gLSBj bXNnX2luaXQoJm1zZy0+YmFzZSwgY29ubmVjdF9yb3V0ZSk7Cj4+IG1zZy0+cF9pYnVmID0gY29u LT5wX2lidWY7Cj4+IG1zZy0+d3BvcyA9IGNvbi0+d3BvczsKPj4gbXNnLT5jbG9zZV9jb25uZWN0 aW9uID0gZmFsc2U7Cj4+IC0gY3BpcGVfcHVzaCgmdHhfcGlwZSwgJm1zZy0+YmFzZSk7Cj4+ICsg aXByb3RvX3Byb2Nlc3NfY29ubmVjdChtc2cpOwo+PiByZXR1cm4gMDsKPj4gfQo+Pgo+PiBAQCAt MjA1NCw2ICsyMTI4LDggQEAgc3RhdGljIHN0cnVjdCBldmlvX3NlcnZpY2UgYmluYXJ5OyAvKiBp cHJvdG8gYmluYXJ5IGxpc3RlbmVyICovCj4+IHN0YXRpYyBpbnQKPj4gbmV0X2NvcmRfZih2YV9s aXN0IC8qIGFwICovKQo+PiB7Cj4+ICsgc2xhYl9jYWNoZV9jcmVhdGUoJmlwcm90b19zbGFiYywg JnJ1bnRpbWUpOwo+PiArCj4+IG1lbXBvb2xfY3JlYXRlKCZpcHJvdG9fbXNnX3Bvb2wsICZjb3Jk KCktPnNsYWJjLAo+PiBzaXplb2Yoc3RydWN0IGlwcm90b19tc2cpKTsKPj4gbWVtcG9vbF9jcmVh dGUoJmlwcm90b19jb25uZWN0aW9uX3Bvb2wsICZjb3JkKCktPnNsYWJjLAo+PiBAQCAtMjI5Nyw3 ICsyMzczLDggQEAgaXByb3RvX2xpc3Rlbihjb25zdCBjaGFyICp1cmkpCj4+IHNpemVfdAo+PiBp cHJvdG9fbWVtX3VzZWQodm9pZCkKPj4gewo+PiAtIHJldHVybiBzbGFiX2NhY2hlX3VzZWQoJm5l dF9jb3JkLnNsYWJjKSArIHNsYWJfY2FjaGVfdXNlZCgmbmV0X3NsYWJjKTsKPj4gKyByZXR1cm4g c2xhYl9jYWNoZV91c2VkKCZuZXRfY29yZC5zbGFiYykKPj4gKyArIHNsYWJfY2FjaGVfdXNlZCgm bmV0X3NsYWJjKSArIHNsYWJfY2FjaGVfdXNlZCgmaXByb3RvX3NsYWJjKTsKPj4gfQo+Pgo+PiBz aXplX3QKPj4gZGlmZiAtLWdpdCBhL3Rlc3QvYm94LXB5L2JhZF90cmlnZ2VyLnJlc3VsdCBiL3Rl c3QvYm94LXB5L2JhZF90cmlnZ2VyLnJlc3VsdAo+PiBpbmRleCA1ZDA2NGI3NjQ4Li5iZmE5YzJi NzU5IDEwMDY0NAo+PiAtLS0gYS90ZXN0L2JveC1weS9iYWRfdHJpZ2dlci5yZXN1bHQKPj4gKysr IGIvdGVzdC9ib3gtcHkvYmFkX3RyaWdnZXIucmVzdWx0Cj4+IEBAIC0xNCw2ICsxNCw3IEBAIHR5 cGUoYm94LnNlc3Npb24ub25fY29ubmVjdChmMSkpCj4+IC0gZnVuY3Rpb24KPj4gLi4uCj4+IGdy ZWV0aW5nOiBUcnVlCj4+ICtOb3RoaW5nIHRvIHJlYWQgeWV0OiBSZXNvdXJjZSB0ZW1wb3Jhcmls eSB1bmF2YWlsYWJsZQo+PiBmaXhoZWFkZXI6IFRydWUKPj4gZXJyb3IgY29kZSAzMgo+PiBlcnJv ciBtZXNzYWdlOiBbc3RyaW5nICJmdW5jdGlvbiBmMSgpIG5vc3VjaGZ1bmN0aW9uKCkgZW5kIl06 MTogYXR0ZW1wdCB0byBjYWxsIGdsb2JhbCAnbm9zdWNoZnVuY3Rpb24nIChhIG5pbCB2YWx1ZSkK Pj4gZGlmZiAtLWdpdCBhL3Rlc3QvYm94LXB5L2JhZF90cmlnZ2VyLnRlc3QucHkgYi90ZXN0L2Jv eC1weS9iYWRfdHJpZ2dlci50ZXN0LnB5Cj4+IGluZGV4IDdkMjAwYjkyMTguLjdmNDVmNWU3MTMg MTAwNjQ0Cj4+IC0tLSBhL3Rlc3QvYm94LXB5L2JhZF90cmlnZ2VyLnRlc3QucHkKPj4gKysrIGIv dGVzdC9ib3gtcHkvYmFkX3RyaWdnZXIudGVzdC5weQo+PiBAQCAtMiw3ICsyLDcgQEAgZnJvbSBs aWIuYm94X2Nvbm5lY3Rpb24gaW1wb3J0IEJveENvbm5lY3Rpb24KPj4gZnJvbSBsaWIudGFyYW50 b29sX2Nvbm5lY3Rpb24gaW1wb3J0IFRhcmFudG9vbENvbm5lY3Rpb24KPj4gZnJvbSB0YXJhbnRv b2wgaW1wb3J0IE5ldHdvcmtFcnJvcgo+PiBmcm9tIHRhcmFudG9vbC5jb25zdCBpbXBvcnQgSVBS T1RPX0dSRUVUSU5HX1NJWkUsIElQUk9UT19DT0RFLCBJUFJPVE9fRVJST1IsIFwKPj4gLSBSRVFV RVNUX1RZUEVfRVJST1IKPj4gKyBSRVFVRVNUX1RZUEVfRVJST1IsIFJFUVVFU1RfVFlQRV9QSU5H Cj4+IGltcG9ydCBzb2NrZXQKPj4gaW1wb3J0IG1zZ3BhY2sKPj4KPj4gQEAgLTI2LDkgKzI2LDI1 IEBAIHMgPSBjb25uLnNvY2tldAo+PiAjIFJlYWQgZ3JlZXRpbmcKPj4gcHJpbnQgJ2dyZWV0aW5n OiAnLCBsZW4ocy5yZWN2KElQUk9UT19HUkVFVElOR19TSVpFKSkgPT0gSVBST1RPX0dSRUVUSU5H X1NJWkUKPj4KPj4gLSMgUmVhZCBlcnJvciBwYWNrZXQKPj4gKyMgQ2hlY2sgc29zY2tldAo+Cj4t IFR5cG8gInNvY2tldCIKPj4gSVBST1RPX0ZJWEhFQURFUl9TSVpFID0gNQo+PiAtZml4aGVhZGVy ID0gcy5yZWN2KElQUk9UT19GSVhIRUFERVJfU0laRSkKPj4gK3Muc2V0YmxvY2tpbmcoRmFsc2Up Cj4+ICtmaXhoZWFkZXIgPSBOb25lCj4+ICt0cnk6Cj4+ICsgZml4aGVhZGVyID0gcy5yZWN2KElQ Uk9UT19GSVhIRUFERVJfU0laRSkKPj4gK2V4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgo+PiAr IHByaW50ICdOb3RoaW5nIHRvIHJlYWQgeWV0OicsIHN0cihlcnIpLnNwbGl0KCddJylbMV0KPj4g K2Vsc2U6Cj4+ICsgcHJpbnQgJ1JlY2VpdmVkIGZpeGhlYWRlcicKPj4gK3Muc2V0YmxvY2tpbmco VHJ1ZSkKPj4gKwo+PiArIyBTZW5kIHBpbmcKPj4gK3F1ZXJ5ID0gbXNncGFjay5kdW1wcyh7IElQ Uk9UT19DT0RFIDogUkVRVUVTVF9UWVBFX1BJTkcgfSkKPj4gK3Muc2VuZChtc2dwYWNrLmR1bXBz KGxlbihxdWVyeSkpICsgcXVlcnkpCj4+ICsKPj4gKyMgUmVhZCBlcnJvciBwYWNrZXQKPj4gK2lm IG5vdCBmaXhoZWFkZXI6Cj4+ICsgZml4aGVhZGVyID0gcy5yZWN2KElQUk9UT19GSVhIRUFERVJf U0laRSkKPj4gcHJpbnQgJ2ZpeGhlYWRlcjogJywgbGVuKGZpeGhlYWRlcikgPT0gSVBST1RPX0ZJ WEhFQURFUl9TSVpFCj4+IHVucGFja2VyLmZlZWQoZml4aGVhZGVyKQo+PiBwYWNrZXRfbGVuID0g dW5wYWNrZXIudW5wYWNrKCkKPj4KwqAKwqAKLS0KSWx5YSBLb3NhcmV2CsKgCsKg ----ALT--aFeFd7B7BaF221Ff1c03922b680E2a291600434607 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 CjxIVE1MPjxCT0RZPjxkaXYgY2xhc3M9ImpzLWhlbHBlciBqcy1yZWFkbXNnLW1zZyI+PHN0eWxl IHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjxkaXY+PGRpdiBpZD0ic3R5bGVfMTYwMDM3NTAzNjA5 NjcxMzY2NzdfQk9EWSI+PGRpdiBjbGFzcz0iY2xfMzkzNTQ4Ij48ZGl2PjxkaXY+SGksPC9kaXY+ PGRpdj4mbmJzcDs8L2Rpdj48ZGl2PlRoYW5rcyBmb3IgeW91ciByZXZpZXchPC9kaXY+PGRpdj4m bmJzcDs8L2Rpdj48ZGl2PlNlZSAxMiZuYnNwO2Fuc3dlcnMgYmVsb3cuIFNlbnQgdjIgb2YgdGhl IHBhdGNoIGNvbnNpZGVyaW5nIHlvdXIgY29tbWVudHMuPC9kaXY+PGJsb2NrcXVvdGUgc3R5bGU9 ImJvcmRlci1sZWZ0OjFweCBzb2xpZCAjMDg1N0E2O21hcmdpbjoxMHB4O3BhZGRpbmc6MCAwIDAg MTBweDsiPtCf0L7QvdC10LTQtdC70YzQvdC40LosIDE0INGB0LXQvdGC0Y/QsdGA0Y8gMjAyMCwg MTk6MTcgKzAzOjAwINC+0YIgTGVvbmlkIFZhc2lsaWV2ICZsdDs8YSBocmVmPSIvY29tcG9zZT9U bz1sdmFzaWxpZXZAdGFyYW50b29sLm9yZyI+bHZhc2lsaWV2QHRhcmFudG9vbC5vcmc8L2E+Jmd0 Ozo8YnI+Jm5ic3A7PGRpdiBpZD0iIj48ZGl2IGNsYXNzPSJqcy1oZWxwZXJfbXJfY3NzX2F0dHIg anMtcmVhZG1zZy1tc2dfbXJfY3NzX2F0dHIiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHls ZT48ZGl2PjxkaXYgaWQ9InN0eWxlXzE2MDAxMDAyNzgwMDYzNDk2NzM0X0JPRFlfbXJfY3NzX2F0 dHIiPjxicj5IaSEgVGhhbmsgeW91IGZvciB0aGUgcGF0Y2guPGJyPkxvb2sgc29tZSBjb21tZW50 cy9xdWVzdGlvbnMgYmVsb3c6PGJyPjxicj4tIFBsZWFzZSBhZGQgQENoYW5nZUxvZzwvZGl2Pjwv ZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48L2Rpdj48b2w+PGxpPlJpZ2h0LCB3aWxsIGJl IGZpeGVkIGluIHYyLjwvbGk+PC9vbD48ZGl2PjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVm dDoxcHggc29saWQgIzA4NTdBNjttYXJnaW46MTBweDtwYWRkaW5nOjAgMCAwIDEwcHg7Ij48ZGl2 PjxkaXYgY2xhc3M9ImpzLWhlbHBlcl9tcl9jc3NfYXR0ciBqcy1yZWFkbXNnLW1zZ19tcl9jc3Nf YXR0ciI+PGRpdj48ZGl2Pi0gTG9vayBsaWtlICJAVGFyYW50b29sQm90IGRvY3VtZW50IiBuZWVk cyB0byBiZSBhZGRlZCB0byB1cGRhdGU8YnI+PGEgaHJlZj0iaHR0cHM6Ly93d3cudGFyYW50b29s LmlvL2VuL2RvYy8yLjUvcmVmZXJlbmNlL3JlZmVyZW5jZV9sdWEvbmV0X2JveC8jbmV0LWJveC1v bi1jb25uZWN0IiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRw czovL3d3dy50YXJhbnRvb2wuaW8vZW4vZG9jLzIuNS9yZWZlcmVuY2UvcmVmZXJlbmNlX2x1YS9u ZXRfYm94LyNuZXQtYm94LW9uLWNvbm5lY3Q8L2E+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9i bG9ja3F1b3RlPjwvZGl2PjxvbCBzdGFydD0iMiI+PGxpPlJpZ2h0LCBkb2MmbmJzcDtib3QgcmVx dWVzdCB3aWxsIGJlIGluY2x1ZGVkIGluIHYyIG9mIHRoZSBwYXRjaC48L2xpPjwvb2w+PGRpdj48 YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICMwODU3QTY7bWFyZ2luOjEw cHg7cGFkZGluZzowIDAgMCAxMHB4OyI+PGRpdj48ZGl2IGNsYXNzPSJqcy1oZWxwZXJfbXJfY3Nz X2F0dHIganMtcmVhZG1zZy1tc2dfbXJfY3NzX2F0dHIiPjxkaXY+PGRpdj48YnI+LSBIb3cgZG8g eW91IGNoZWNrIHRoZSBwcm9ibGVtIGlzIGdvbmU/IEFueSBzdHJlc3MgdGVzdD88L2Rpdj48L2Rp dj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PC9kaXY+PG9sIHN0YXJ0PSIzIj48bGk+WWVzLCBo ZXJlIGlzIHRoZSB0ZXN0IGkgYWRhcHRlZCBmcm9tIFlhcm9zbGF24oCZcyB2ZXJzaW9uOjxicj48 YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGFyYW50b29sL3RhcmFudG9vbC9pc3N1ZXMvMzc3 NiNpc3N1ZWNvbW1lbnQtNjE3NzM2NzI5IiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdl dD0iX2JsYW5rIj5odHRwczovL2dpdGh1Yi5jb20vdGFyYW50b29sL3RhcmFudG9vbC9pc3N1ZXMv Mzc3NiNpc3N1ZWNvbW1lbnQtNjE3NzM2NzI5PC9hPjxicj5JIGRpZG7igJl0IGZpbmQgdGhlIHdh eSZuYnNwO3RvIGltcGxlbWVudCBpdCB1bmRlciB0ZXN0LXJ1bi48L2xpPjwvb2w+PGRpdj48Ymxv Y2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICMwODU3QTY7bWFyZ2luOjEwcHg7 cGFkZGluZzowIDAgMCAxMHB4OyI+PGRpdj48ZGl2IGNsYXNzPSJqcy1oZWxwZXJfbXJfY3NzX2F0 dHIganMtcmVhZG1zZy1tc2dfbXJfY3NzX2F0dHIiPjxkaXY+PGRpdj5PbiAxNC4wOC4yMDIwIDEz OjQ3LCBJbHlhIEtvc2FyZXYgd3JvdGU6PGJyPiZndDsgT24gY29ubmVjdGlvbiwgYW4gZXZpbyBz ZXJ2aWNlIGNhbGxiYWNrIGlzIGludm9rZWQgdG8gYWNjZXB0IGl0LiBUaGU8YnI+Jmd0OyBuZXh0 IHN0ZXAgYWZ0ZXIgYWNjZXB0aW9uIHdhcyB0byBwcm9jZXNzIGNvbm5lY3Rpb24gdG8gdHggdGhy ZWFkPGJyPiZndDsgdGhyb3VnaCBjYnVzLiBUaGlzIG1lYW50IHRoYXQgYW55IGNvbm5lY3Rpb24g aW50ZXJhY3Rpb24gaW52b2x2ZXM8YnI+Jmd0OyB0eCB0aHJlYWQgZXZlbiBiZWZvcmUgd2UgZ2V0 IHRvIGRlY29kZSB3aGF0IGRvZXMgdGhlIGNsaWVudCB3YW50PGJyPiZndDsgZnJvbSB1cy4gQ29u c2VxdWVudGx5LCBhIG51bWJlciBvZiBwcm9ibGVtcyBhcHBlYXJzLiBUaGUgbWFpbiBvbmU8YnI+ Jmd0OyBpcyB0aGF0IHdlIG1pZ2h0IGdldCBkZXNjcmlwdG9yIGxlYWsgaW4gY2FzZSBvZiB1bnJl c3BvbnNpdmUgdHggdGhyZWFkPGJyPiZndDsgKGZvciBleGFtcGxlLCB3aGVuIGJ1aWxkaW5nIHNl Y29uZGFyeSBpbmRleCkuIFRoZXJlIGFyZSBzb21lIG90aGVyPGJyPiZndDsgY2FzZXMgd2hlcmUg d2UgbWlnaHQgbm90IHdhbnQgdG8gc3BlbmQgcHJlY2lvdXMgdHggdGltZSB0byBwcm9jZXNzPGJy PiZndDsgdGhlIGNvbm5lY3Rpb24gaW4gY2FzZSBpcHJvdG8gY2FuIGRvIGl0IGFsbCBhbG9uZS48 YnI+Jmd0OyBUaGlzIHBhdGNoIGFsbG93cyBpcHJvdG8gdG8gYWNjZXB0IGNvbm5lY3Rpb24gYW5k IHNlbmQgZ3JlZXRpbmcgYnk8YnI+Jmd0OyBpdHNlbGYuIFRoZSBjb25uZWN0aW9uIGlzIGluaXRp YWxpemVkIGluIHR4IHRocmVhZCB3aGVuIHRoZSByZWFsPGJyPiZndDsgcmVxdWVzdCBjb21lcyB0 aHJvdWdoIGlwcm90b19tc2dfZGVjb2RlKCkuIEluIGNhc2UgcmVxdWVzdCB0eXBlIHdhcyBub3Q8 YnI+Jmd0OyByZWNvZ25pemVkIHdlIGNhbiBhbHNvIHNlbmQgcmVwbHkgd2l0aCBhbiBlcnJvciB3 aXRob3V0IHVzaW5nIHR4LiBJdCBpczxicj4mZ3Q7IHBsYW5uZWQgdG8gYWRkIG1vcmUgaXByb3Rv IGxvZ2ljIHRvIHByZXZlbnQgZXh0cmEgaW50ZXJhY3Rpb24gd2l0aDxicj4mZ3Q7IHR4IHRocmVh ZC4gVGhpcyBwYXRjaCBhbHJlYWR5IHRvIHNvbWUgZXh0ZW50IHNvbHZlcyBkZXNjcmlwdG9ycyBs ZWFrYWdlPGJyPiZndDsgcHJvYmxlbSBhcyBmYXIgYXMgY29ubmVjdGlvbiBlc3RhYmxpc2hlcyBh bmQgc3RheXMgaW4gZmV0Y2hfc2NoZW1hPGJyPiZndDsgc3RhdGUgd2hpbGUgdHggdGhyZWFkIGlz IHVucmVzcG9uc2l2ZS48YnI+Jmd0OyBUaGUgb3RoZXIgdXNlciB2aXNpYmxlIGNoYW5nZSBpcyB0 aGF0IG9uX2Nvbm5lY3QgdHJpZ2dlcnMgd29uJ3QgcnVuIG9uPGJyPiZndDsgY29ubmVjdGlvbnMg dGhhdCBkb24ndCBwcm92aWRlIGFueSBpbnB1dCwgYXMgcmVmbGVjdGVkIGluPGJyPiZndDsgYmFk X3RyaWdnZXIudGVzdC5weS48YnI+PGJyPi0gSXMgaXQgb2sgZnJvbSBleHBsb2l0YXRpb24gcG9p bnQgb2Ygdmlldz8gRGlkIHlvdSBoYXZlIGEgY29udmVyc2F0aW9uPGJyPndpdGggTW9ucz88L2Rp dj48L2Rpdj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PC9kaXY+PG9sIHN0YXJ0PSI0Ij48bGk+ V2VsbCwgaXQgd2FzIG1lbnRpb25lZCBpbiBjb252ZXJzYXRpb24gd2l0aCBNb25zLiBJIHRoaW5r IGkgd2lsbCBjbGFyaWZ5PGJyPml0IG9uY2UgbW9yZSBhcyBzb29uIGFzIHBvc3NpYmxlLiBUaG91 Z2ggaSBhbSBxdWl0ZSBzdXJlIGl0IGlzIGZpbmUgYXMgZmFyPGJyPmFzIGFueSByZWFsIGFwcGxp Y2F0aW9uIHByb3ZpZGVzIHNvbWUgaW5wdXQgaW1tZWRpYXRlbHkgb24gY29ubmVjdGlvbjxicj50 aHVzINGBYXVzaW5nIHRyaWdnZXIgZXhlY3V0aW9uLjwvbGk+PC9vbD48ZGl2PjxibG9ja3F1b3Rl IHN0eWxlPSJib3JkZXItbGVmdDoxcHggc29saWQgIzA4NTdBNjttYXJnaW46MTBweDtwYWRkaW5n OjAgMCAwIDEwcHg7Ij48ZGl2PjxkaXYgY2xhc3M9ImpzLWhlbHBlcl9tcl9jc3NfYXR0ciBqcy1y ZWFkbXNnLW1zZ19tcl9jc3NfYXR0ciI+PGRpdj48ZGl2Pjxicj4mZ3Q7PGJyPiZndDsgUGFydCBv ZiAjMzc3Njxicj4mZ3Q7IC0tLTxicj4mZ3Q7IEJyYW5jaDogPGEgaHJlZj0iaHR0cHM6Ly9naXRo dWIuY29tL3RhcmFudG9vbC90YXJhbnRvb2wvdHJlZS9pLmtvc2FyZXYvZ2gtMzc3Ni1oYW5kbGlu Zy1jb25uZWN0aW9ucy1pbi1pcHJvdG8iIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgdGFyZ2V0 PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS90YXJhbnRvb2wvdGFyYW50b29sL3RyZWUvaS5r b3NhcmV2L2doLTM3NzYtaGFuZGxpbmctY29ubmVjdGlvbnMtaW4taXByb3RvPC9hPjxicj4mZ3Q7 IElzc3VlOiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGFyYW50b29sL3RhcmFudG9vbC9p c3N1ZXMvMzc3NiIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0 cHM6Ly9naXRodWIuY29tL3RhcmFudG9vbC90YXJhbnRvb2wvaXNzdWVzLzM3NzY8L2E+PGJyPiZn dDs8YnI+Jmd0OyBzcmMvYm94L2lwcm90by5jYyB8IDI4NyArKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLTxicj4mZ3Q7IHRlc3QvYm94LXB5L2JhZF90cmlnZ2VyLnJlc3VsdCB8IDEgKzxi cj4mZ3Q7IHRlc3QvYm94LXB5L2JhZF90cmlnZ2VyLnRlc3QucHkgfCAyMiArKy08YnI+Jmd0OyAz IGZpbGVzIGNoYW5nZWQsIDIwMiBpbnNlcnRpb25zKCspLCAxMDggZGVsZXRpb25zKC0pPGJyPiZn dDs8YnI+Jmd0OyBkaWZmIC0tZ2l0IGEvc3JjL2JveC9pcHJvdG8uY2MgYi9zcmMvYm94L2lwcm90 by5jYzxicj4mZ3Q7IGluZGV4IGI4ZjY1ZTVlY2EuLmEwMjdkMTVjMWQgMTAwNjQ0PGJyPiZndDsg LS0tIGEvc3JjL2JveC9pcHJvdG8uY2M8YnI+Jmd0OyArKysgYi9zcmMvYm94L2lwcm90by5jYzxi cj4tICJvbl9jb25uZWN0IHRyaWdnZXIgbXVzdCBiZSBwcm9jZXNzZWQgYmVmb3JlIGFueSBvdGhl ciByZXF1ZXN0IG9uIHRoaXM8YnI+Y29ubmVjdGlvbi4iIChmcm9tIGNvbW1lbnQpIC0gSXQgbG9v a3MgbGlrZSBpdCdzIHdvcnRoIGNsYXJpZnlpbmcgdGhpczxicj5ndWFyYW50ZWUuPC9kaXY+PC9k aXY+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2PjxvbCBzdGFydD0iNSI+PGxpPlJpZ2h0 LiBUaGlzIGd1YXJhbnRlZSBpcyBrZXB0LiBUcmlnZ2VycyBhcmUgYmVpbmcgcHJvY2Vzc2VkIGlu PGRpdj48ZGl2PnR4X2luaXRfY29ubmVjdCgpIGZyb20gdHhfYWNjZXB0X21zZygpIGJlZm9yZSBh bnkgb3RoZXIgYWN0aW9ucy48L2Rpdj48L2Rpdj48L2xpPjwvb2w+PGRpdj48YmxvY2txdW90ZSBz dHlsZT0iYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICMwODU3QTY7bWFyZ2luOjEwcHg7cGFkZGluZzow IDAgMCAxMHB4OyI+PGRpdj48ZGl2IGNsYXNzPSJqcy1oZWxwZXJfbXJfY3NzX2F0dHIganMtcmVh ZG1zZy1tc2dfbXJfY3NzX2F0dHIiPjxkaXY+PGRpdj48YnI+Jmd0OyBAQCAtMjQ1LDcgKzI0NSw3 IEBAIGlwcm90b19tc2dfbmV3KHN0cnVjdCBpcHJvdG9fY29ubmVjdGlvbiAqY29uKTs8YnI+Jmd0 OyBzdGF0aWMgdm9pZDxicj4mZ3Q7IGlwcm90b19yZXN1bWUodm9pZCk7PGJyPiZndDs8YnI+Jmd0 OyAtc3RhdGljIHZvaWQ8YnI+Jmd0OyArc3RhdGljIGludDxicj4mZ3Q7IGlwcm90b19tc2dfZGVj b2RlKHN0cnVjdCBpcHJvdG9fbXNnICptc2csIGNvbnN0IGNoYXIgKipwb3MsIGNvbnN0IGNoYXIg KnJlcWVuZCw8YnI+Jmd0OyBib29sICpzdG9wX2lucHV0KTs8YnI+Jmd0Ozxicj4mZ3Q7IEBAIC0y NTYsNiArMjU2LDkgQEAgaXByb3RvX21zZ19kZWxldGUoc3RydWN0IGlwcm90b19tc2cgKm1zZyk8 YnI+Jmd0OyBpcHJvdG9fcmVzdW1lKCk7PGJyPiZndDsgfTxicj4mZ3Q7PGJyPiZndDsgK3N0YXRp YyBpbmxpbmUgdm9pZDxicj4mZ3Q7ICtpcHJvdG9fY29ubmVjdGlvbl9kZWxldGUoc3RydWN0IGlw cm90b19jb25uZWN0aW9uICpjb24pOzxicj4mZ3Q7ICs8YnI+Jmd0OyAvKio8YnI+Jmd0OyAqIEEg c2luZ2xlIGdsb2JhbCBxdWV1ZSBmb3IgYWxsIHJlcXVlc3RzIGluIGFsbCBjb25uZWN0aW9ucy4g QWxsPGJyPiZndDsgKiByZXF1ZXN0cyBmcm9tIGFsbCBjb25uZWN0aW9ucyBhcmUgcHJvY2Vzc2Vk IGNvbmN1cnJlbnRseS48YnI+Jmd0OyBAQCAtMjgwLDYgKzI4MywxMSBAQCBzdGF0aWMgc3RydWN0 IGNvcmQgbmV0X2NvcmQ7PGJyPiZndDsgKiBpbiB0aGUgdHggdGhyZWFkLjxicj4mZ3Q7ICovPGJy PiZndDsgc3RhdGljIHN0cnVjdCBzbGFiX2NhY2hlIG5ldF9zbGFiYzs8YnI+Jmd0OyArLyoqPGJy PiZndDsgKyAqIFNsYWIgY2FjaGUgdXNlZCBmb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIG91dHB1 dCBuZXR3b3JrIGJ1ZmZlcnM8YnI+Jmd0OyArICogaW4gdGhlIGlwcm90byB0aHJlYWQuPGJyPiZn dDsgKyAqLzxicj4mZ3Q7ICtzdGF0aWMgc3RydWN0IHNsYWJfY2FjaGUgaXByb3RvX3NsYWJjOzxi cj4mZ3Q7PGJyPiZndDsgc3RydWN0IHJtZWFuICpybWVhbl9uZXQ7PGJyPiZndDs8YnI+Jmd0OyBA QCAtMjk4LDYgKzMwNiw5IEBAIGNvbnN0IGNoYXIgKnJtZWFuX25ldF9zdHJpbmdzW0lQUk9UT19M QVNUXSA9IHs8YnI+Jmd0OyAiUkVRVUVTVFMiLDxicj4mZ3Q7IH07PGJyPiZndDs8YnI+Jmd0OyAr c3RhdGljIGludDxicj4mZ3Q7ICt0eF9pbml0X2Nvbm5lY3Qoc3RydWN0IGlwcm90b19tc2cgKm1z Zyk7PGJyPiZndDsgKzxicj4mZ3Q7IHN0YXRpYyB2b2lkPGJyPiZndDsgdHhfcHJvY2Vzc19kZXN0 cm95KHN0cnVjdCBjbXNnICptKTs8YnI+Jmd0Ozxicj4mZ3Q7IEBAIC02NTAsNyArNjYxLDE4IEBA IGlwcm90b19jb25uZWN0aW9uX3RyeV90b19zdGFydF9kZXN0cm95KHN0cnVjdCBpcHJvdG9fY29u bmVjdGlvbiAqY29uKTxicj4mZ3Q7ICogb3RoZXIgcGFydHMgb2YgdGhlIGNvbm5lY3Rpb24uPGJy PiZndDsgKi88YnI+Jmd0OyBjb24tJmd0O3N0YXRlID0gSVBST1RPX0NPTk5FQ1RJT05fREVTVFJP WUVEOzxicj4mZ3Q7IC0gY3BpcGVfcHVzaCgmYW1wO3R4X3BpcGUsICZhbXA7Y29uLSZndDtkZXN0 cm95X21zZyk7PGJyPiZndDsgKyBpZiAoY29uLSZndDtzZXNzaW9uICE9IE5VTEwpPGJyPiZndDsg KyBjcGlwZV9wdXNoKCZhbXA7dHhfcGlwZSwgJmFtcDtjb24tJmd0O2Rlc3Ryb3lfbXNnKTs8YnI+ Jmd0OyArIGVsc2Ugezxicj4mZ3Q7ICsgLyo8YnI+Jmd0OyArICogSW4gY2FzZSBzZXNzaW9uIHdh cyBub3QgY3JlYXRlZCB3ZSBjYW4gc2FmZWx5IGRlc3Ryb3k8YnI+Jmd0OyArICogbm90IGludm9s dmluZyB0eCB0aHJlYWQuIFRodXMgd2UgYWxzbyBuZWVkIHRvIGRlc3Ryb3k8YnI+Jmd0OyArICog b2J1Ziwgd2hpY2ggc3RpbGwgYmVsb25ncyB0byBpcHJvdG8gdGhyZWFkLjxicj4mZ3Q7ICsgKi88 YnI+Jmd0OyArIG9idWZfZGVzdHJveSgmYW1wO2Nvbi0mZ3Q7b2J1ZlswXSk7PGJyPiZndDsgKyBv YnVmX2Rlc3Ryb3koJmFtcDtjb24tJmd0O29idWZbMV0pOzxicj4mZ3Q7ICsgaXByb3RvX2Nvbm5l Y3Rpb25fZGVsZXRlKGNvbik7PGJyPiZndDsgKyB9PGJyPiZndDsgfTxicj4mZ3Q7PGJyPiZndDsg LyoqPGJyPiZndDsgQEAgLTY3Nyw5ICs2OTksMTggQEAgaXByb3RvX2Nvbm5lY3Rpb25fY2xvc2Uo c3RydWN0IGlwcm90b19jb25uZWN0aW9uICpjb24pPGJyPiZndDsgKiBpcyBkb25lIG9ubHkgb25j ZS48YnI+Jmd0OyAqLzxicj4mZ3Q7IGNvbi0mZ3Q7cF9pYnVmLSZndDt3cG9zIC09IGNvbi0mZ3Q7 cGFyc2Vfc2l6ZTs8YnI+Jmd0OyAtIGNwaXBlX3B1c2goJmFtcDt0eF9waXBlLCAmYW1wO2Nvbi0m Z3Q7ZGlzY29ubmVjdF9tc2cpOzxicj4mZ3Q7IGFzc2VydChjb24tJmd0O3N0YXRlID09IElQUk9U T19DT05ORUNUSU9OX0FMSVZFKTs8YnI+Jmd0OyBjb24tJmd0O3N0YXRlID0gSVBST1RPX0NPTk5F Q1RJT05fQ0xPU0VEOzxicj4mZ3Q7ICsgcmxpc3RfZGVsKCZhbXA7Y29uLSZndDtpbl9zdG9wX2xp c3QpOzxicj48YnI+LSBJcyBkb25lIGJlbG93KHJsaXN0X2RlbCgpKS4gT3IgaXMgdGhlcmUgc29t ZSBraW5kIG9mIHRyaWNrPzwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48L2Rp dj48b2wgc3RhcnQ9IjYiPjxsaT5XZWxsLCB0aGlzIG9uZSBpcyBmaW5lLiBybGlzdF9kZWwoKSB3 YXMgY2FsbGVkIGluIHRoZSBlbmQgb2Y8YnI+aXByb3RvX2Nvbm5lY3Rpb25fY2xvc2UoKSBhcyBm YXIgdGhlIG5leHQgZGlzY29ubmVjdCBhY3Rpb25zPGJyPndlcmUgZG9uZSBsYXRlciBhbnl3YXku IE5vdyB3ZSBtaWdodCBjYWxsIGlwcm90b19jb25uZWN0aW9uX3RyeV90b19zdGFydF9kZXN0cm95 KCk8YnI+ZGlyZWN0bHkgZnJvbSB0aGlzIGNvbmRpdGlvbmFsIGJyYW5jaC4gVGh1cyB3ZSBuZWVk IHJsaXN0X2RlbCgpIHRvIGJlIGRvbmUgYWxyZWFkeS48YnI+VGhpcyBjb25kaXRpb25hbCBicmFu Y2ggcmV0dXJucyBhdCB0aGUgZW5kIGFuZCB0aGUgc2Vjb25kJm5ic3A7cmxpc3RfZGVsKCkgaXMg bm90IGNhbGxlZC4gSW48YnI+b3RoZXIgY2FzZXMgdGhlIHNlY29uZCBvbmUgaXMgc3RpbGwgdXNl ZC48L2xpPjwvb2w+PGRpdj48YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MXB4IHNvbGlk ICMwODU3QTY7bWFyZ2luOjEwcHg7cGFkZGluZzowIDAgMCAxMHB4OyI+PGRpdj48ZGl2IGNsYXNz PSJqcy1oZWxwZXJfbXJfY3NzX2F0dHIganMtcmVhZG1zZy1tc2dfbXJfY3NzX2F0dHIiPjxkaXY+ PGRpdj48YnI+Jmd0OyArIGlmIChjb24tJmd0O3Nlc3Npb24gIT0gTlVMTCk8YnI+Jmd0OyArIGNw aXBlX3B1c2goJmFtcDt0eF9waXBlLCAmYW1wO2Nvbi0mZ3Q7ZGlzY29ubmVjdF9tc2cpOzxicj4m Z3Q7ICsgZWxzZTxicj4mZ3Q7ICsgLyo8YnI+Jmd0OyArICogSW4gY2FzZSBzZXNzaW9uIHdhcyBu b3QgY3JlYXRlZCB3ZSBjYW4gc2FmZWx5PGJyPiZndDsgKyAqIHRyeSB0byBzdGFydCBkZXN0cm95 IG5vdCBpbnZvbHZpbmcgdHggdGhyZWFkLjxicj4mZ3Q7ICsgKi88YnI+Jmd0OyArIGlwcm90b19j b25uZWN0aW9uX3RyeV90b19zdGFydF9kZXN0cm95KGNvbik7PGJyPiZndDsgKyByZXR1cm47PGJy PiZndDsgfSBlbHNlIGlmIChjb24tJmd0O3N0YXRlID09IElQUk9UT19DT05ORUNUSU9OX1BFTkRJ TkdfREVTVFJPWSkgezxicj4mZ3Q7IGlwcm90b19jb25uZWN0aW9uX3RyeV90b19zdGFydF9kZXN0 cm95KGNvbik7PGJyPiZndDsgfSBlbHNlIHs8YnI+Jmd0OyBAQCAtODA5LDYgKzg0MCw3IEBAIGlw cm90b19lbnF1ZXVlX2JhdGNoKHN0cnVjdCBpcHJvdG9fY29ubmVjdGlvbiAqY29uLCBzdHJ1Y3Qg aWJ1ZiAqaW4pPGJyPiZndDsgYXNzZXJ0KHJsaXN0X2VtcHR5KCZhbXA7Y29uLSZndDtpbl9zdG9w X2xpc3QpKTs8YnI+Jmd0OyBpbnQgbl9yZXF1ZXN0cyA9IDA7PGJyPiZndDsgYm9vbCBzdG9wX2lu cHV0ID0gZmFsc2U7PGJyPiZndDsgKyBib29sIG9idWZfaW5faXByb3RvID0gKGNvbi0mZ3Q7c2Vz c2lvbiA9PSBOVUxMKTs8YnI+Jmd0OyBjb25zdCBjaGFyICplcnJtc2c7PGJyPiZndDsgd2hpbGUg KGNvbi0mZ3Q7cGFyc2Vfc2l6ZSAhPSAwICZhbXA7JmFtcDsgIXN0b3BfaW5wdXQpIHs8YnI+Jmd0 OyBpZiAoaXByb3RvX2NoZWNrX21zZ19tYXgoKSkgezxicj4mZ3Q7IEBAIC04NTMsMTIgKzg4NSwy MCBAQCBlcnJfbXNncGFjazo8YnI+Jmd0Ozxicj4mZ3Q7IG1zZy0mZ3Q7bGVuID0gcmVxZW5kIC0g cmVxc3RhcnQ7IC8qIHRvdGFsIHJlcXVlc3QgbGVuZ3RoICovPGJyPiZndDs8YnI+Jmd0OyAtIGlw cm90b19tc2dfZGVjb2RlKG1zZywgJmFtcDtwb3MsIHJlcWVuZCwgJmFtcDtzdG9wX2lucHV0KTs8 YnI+Jmd0OyAtIC8qPGJyPiZndDsgLSAqIFRoaXMgY2FuJ3QgdGhyb3csIGJ1dCBzaG91bGQgbm90 IGJlPGJyPiZndDsgLSAqIGRvbmUgaW4gY2FzZSBvZiBleGNlcHRpb24uPGJyPiZndDsgLSAqLzxi cj4mZ3Q7IC0gY3BpcGVfcHVzaF9pbnB1dCgmYW1wO3R4X3BpcGUsICZhbXA7bXNnLSZndDtiYXNl KTs8YnI+Jmd0OyArIGlmIChpcHJvdG9fbXNnX2RlY29kZShtc2csICZhbXA7cG9zLCByZXFlbmQs ICZhbXA7c3RvcF9pbnB1dCkgPT0gMCkgezxicj4mZ3Q7ICsgaWYgKG9idWZfaW5faXByb3RvKSB7 PGJyPiZndDsgKyAvKjxicj4mZ3Q7ICsgKiBJZiBzZXNzaW9uIHdhcyBub3QgY3JlYXRlZCB5ZXQg YW5kIG9idWYgaXM8YnI+Jmd0OyArICogc3RpbGwgaW4gaXByb3RvIHdlIG5lZWQgdG8gZGVzdHJv eSBpdC4gTmV3PGJyPiZndDsgKyAqIG9uZSB3aWxsIGJlIGNyZWF0ZWQgaW4gdHggdGhyZWFkIGlm IG5lZWRlZC48YnI+Jmd0OyArICovPGJyPiZndDsgKyBvYnVmX2Rlc3Ryb3koJmFtcDtjb24tJmd0 O29idWZbMF0pOzxicj4mZ3Q7ICsgb2J1Zl9kZXN0cm95KCZhbXA7Y29uLSZndDtvYnVmWzFdKTs8 YnI+Jmd0OyArIG9idWZfaW5faXByb3RvID0gZmFsc2U7ICZndDsgKyB9PGJyPiZndDsgKyBjcGlw ZV9wdXNoX2lucHV0KCZhbXA7dHhfcGlwZSwgJmFtcDttc2ctJmd0O2Jhc2UpOzxicj4mZ3Q7ICsg fTxicj4mZ3Q7ICs8YnI+Jmd0OyBuX3JlcXVlc3RzKys7PGJyPiZndDsgLyogUmVxdWVzdCBpcyBw YXJzZWQgKi88YnI+Jmd0OyBhc3NlcnQocmVxZW5kICZndDsgcmVxc3RhcnQpOzxicj4mZ3Q7IEBA IC0xMTA1LDggKzExNDUsOCBAQCBpcHJvdG9fY29ubmVjdGlvbl9uZXcoaW50IGZkKTxicj4mZ3Q7 IGV2X2lvX2luaXQoJmFtcDtjb24tJmd0O291dHB1dCwgaXByb3RvX2Nvbm5lY3Rpb25fb25fb3V0 cHV0LCBmZCwgRVZfV1JJVEUpOzxicj4mZ3Q7IGlidWZfY3JlYXRlKCZhbXA7Y29uLSZndDtpYnVm WzBdLCBjb3JkX3NsYWJfY2FjaGUoKSwgaXByb3RvX3JlYWRhaGVhZCk7PGJyPiZndDsgaWJ1Zl9j cmVhdGUoJmFtcDtjb24tJmd0O2lidWZbMV0sIGNvcmRfc2xhYl9jYWNoZSgpLCBpcHJvdG9fcmVh ZGFoZWFkKTs8YnI+Jmd0OyAtIG9idWZfY3JlYXRlKCZhbXA7Y29uLSZndDtvYnVmWzBdLCAmYW1w O25ldF9zbGFiYywgaXByb3RvX3JlYWRhaGVhZCk7PGJyPiZndDsgLSBvYnVmX2NyZWF0ZSgmYW1w O2Nvbi0mZ3Q7b2J1ZlsxXSwgJmFtcDtuZXRfc2xhYmMsIGlwcm90b19yZWFkYWhlYWQpOzxicj4m Z3Q7ICsgb2J1Zl9jcmVhdGUoJmFtcDtjb24tJmd0O29idWZbMF0sICZhbXA7aXByb3RvX3NsYWJj LCBpcHJvdG9fcmVhZGFoZWFkKTs8YnI+Jmd0OyArIG9idWZfY3JlYXRlKCZhbXA7Y29uLSZndDtv YnVmWzFdLCAmYW1wO2lwcm90b19zbGFiYywgaXByb3RvX3JlYWRhaGVhZCk7PGJyPiZndDsgY29u LSZndDtwX2lidWYgPSAmYW1wO2Nvbi0mZ3Q7aWJ1ZlswXTs8YnI+Jmd0OyBjb24tJmd0O3R4LnBf b2J1ZiA9ICZhbXA7Y29uLSZndDtvYnVmWzBdOzxicj4mZ3Q7IGlwcm90b193cG9zX2NyZWF0ZSgm YW1wO2Nvbi0mZ3Q7d3BvcywgY29uLSZndDt0eC5wX29idWYpOzxicj4mZ3Q7IEBAIC0xMTM0LDEw ICsxMTc0LDYgQEAgaXByb3RvX2Nvbm5lY3Rpb25fZGVsZXRlKHN0cnVjdCBpcHJvdG9fY29ubmVj dGlvbiAqY29uKTxicj4mZ3Q7IGFzc2VydCghZXZpb19oYXNfZmQoJmFtcDtjb24tJmd0O2lucHV0 KSk7PGJyPiZndDsgYXNzZXJ0KGNvbi0mZ3Q7c2Vzc2lvbiA9PSBOVUxMKTs8YnI+Jmd0OyBhc3Nl cnQoY29uLSZndDtzdGF0ZSA9PSBJUFJPVE9fQ09OTkVDVElPTl9ERVNUUk9ZRUQpOzxicj4mZ3Q7 IC0gLyo8YnI+Jmd0OyAtICogVGhlIG91dHB1dCBidWZmZXJzIG11c3QgaGF2ZSBiZWVuIGRlbGV0 ZWQ8YnI+Jmd0OyAtICogaW4gdHggdGhyZWFkLjxicj4mZ3Q7IC0gKi88YnI+Jmd0OyBpYnVmX2Rl c3Ryb3koJmFtcDtjb24tJmd0O2lidWZbMF0pOzxicj4mZ3Q7IGlidWZfZGVzdHJveSgmYW1wO2Nv bi0mZ3Q7aWJ1ZlsxXSk7PGJyPiZndDsgYXNzZXJ0KGNvbi0mZ3Q7b2J1ZlswXS5wb3MgPT0gMCAm YW1wOyZhbXA7PGJyPiZndDsgQEAgLTExNzIsNiArMTIwOCw5IEBAIHR4X3JlcGx5X2Vycm9yKHN0 cnVjdCBpcHJvdG9fbXNnICptc2cpOzxicj4mZ3Q7IHN0YXRpYyB2b2lkPGJyPiZndDsgdHhfcmVw bHlfaXByb3RvX2Vycm9yKHN0cnVjdCBjbXNnICptKTs8YnI+Jmd0Ozxicj4mZ3Q7ICtzdGF0aWMg dm9pZDxicj4mZ3Q7ICt0eF9hY2NlcHRfd3BvcyhzdHJ1Y3QgaXByb3RvX2Nvbm5lY3Rpb24gKmNv biwgY29uc3Qgc3RydWN0IGlwcm90b193cG9zICp3cG9zKTs8YnI+Jmd0OyArPGJyPiZndDsgc3Rh dGljIHZvaWQ8YnI+Jmd0OyBuZXRfc2VuZF9tc2coc3RydWN0IGNtc2cgKm1zZyk7PGJyPiZndDs8 YnI+Jmd0OyBAQCAtMTI0NCw3ICsxMjgzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbXNnX2hv cCBlcnJvcl9yb3V0ZVtdID0gezxicj4mZ3Q7IHsgbmV0X3NlbmRfZXJyb3IsIE5VTEwgfSw8YnI+ Jmd0OyB9Ozxicj4mZ3Q7PGJyPiZndDsgLXN0YXRpYyB2b2lkPGJyPiZndDsgK3N0YXRpYyBpbnQ8 YnI+Jmd0OyBpcHJvdG9fbXNnX2RlY29kZShzdHJ1Y3QgaXByb3RvX21zZyAqbXNnLCBjb25zdCBj aGFyICoqcG9zLCBjb25zdCBjaGFyICpyZXFlbmQsPGJyPiZndDsgYm9vbCAqc3RvcF9pbnB1dCk8 YnI+Jmd0OyB7PGJyPiZndDsgQEAgLTEzMTQsMTMgKzEzNTMsMjcgQEAgaXByb3RvX21zZ19kZWNv ZGUoc3RydWN0IGlwcm90b19tc2cgKm1zZywgY29uc3QgY2hhciAqKnBvcywgY29uc3QgY2hhciAq cmVxZW5kLDxicj4mZ3Q7ICh1aW50MzJfdCkgdHlwZSk7PGJyPiZndDsgZ290byBlcnJvcjs8YnI+ Jmd0OyB9PGJyPiZndDsgLSByZXR1cm47PGJyPiZndDsgKyByZXR1cm4gMDs8YnI+Jmd0OyBlcnJv cjo8YnI+Jmd0OyAvKiogTG9nIGFuZCBzZW5kIHRoZSBlcnJvci4gKi88YnI+Jmd0OyBkaWFnX2xv ZygpOzxicj4mZ3Q7IGRpYWdfY3JlYXRlKCZhbXA7bXNnLSZndDtkaWFnKTs8YnI+Jmd0OyBkaWFn X21vdmUoJmFtcDtmaWJlcigpLSZndDtkaWFnLCAmYW1wO21zZy0mZ3Q7ZGlhZyk7PGJyPjxicj4t IFVubmVlZGVkIGluIGNhc2Ugc2Vzc2lvbiA9PSBOVUxMLiBVc2UgbmV0X3NlbmRfbXNnKCkgaW5z dGVhZCBvZjxicj5uZXRfc2VuZF9lcnJvcigpLjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxv Y2txdW90ZT48L2Rpdj48b2wgc3RhcnQ9IjciPjxsaT5SaWdodCwgd2lsbCBiZSBmaXhlZCBpbiB2 Mi48L2xpPjwvb2w+PGRpdj48YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MXB4IHNvbGlk ICMwODU3QTY7bWFyZ2luOjEwcHg7cGFkZGluZzowIDAgMCAxMHB4OyI+PGRpdj48ZGl2IGNsYXNz PSJqcy1oZWxwZXJfbXJfY3NzX2F0dHIganMtcmVhZG1zZy1tc2dfbXJfY3NzX2F0dHIiPjxkaXY+ PGRpdj48YnI+Jmd0OyAtIGNtc2dfaW5pdCgmYW1wO21zZy0mZ3Q7YmFzZSwgZXJyb3Jfcm91dGUp Ozxicj4mZ3Q7ICsgaWYgKG1zZy0mZ3Q7Y29ubmVjdGlvbi0mZ3Q7c2Vzc2lvbiAhPSBOVUxMKSB7 PGJyPiZndDsgKyBjbXNnX2luaXQoJmFtcDttc2ctJmd0O2Jhc2UsIGVycm9yX3JvdXRlKTs8YnI+ Jmd0OyArIHJldHVybiAwOzxicj48YnI+LSBNYXkgYmUgcmV0dXJuIC0xIChkZWNvZGUgZmFpbCku IFdoYXQgZG9lcyB0aGUgcmV0dXJuIHZhbHVlIG1lYW48YnI+b3RoZXJ3aXNlPzwvZGl2PjwvZGl2 PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48L2Rpdj48b2wgc3RhcnQ9IjgiPjxsaT5XZWxsLCB5 ZXMsIGkgc2VlLCB0aGlzIGlzIGNvbmZ1c2luZy4gQmFzaWNhbGx5IC0xIG1lYW5zIHdlIGhhdmUg bm90aGluZyB0byBkbyB3aXRoPGJyPnR4IGFueSBtb3JlLiBJIHRoaW5rIGl0IGlzIGJldHRlciB0 byBpbnRyb2R1Y2UgMiBlcnJvciBjb2RlcyBhbmQgcmV0dXJuIDEgaGVyZSB0byBzZXBhcmF0ZTxi cj50aGlzIGNhc2UgZnJvbSB0aGUgcHVyZSZuYnNwO2lwcm90byBjYXNlLjwvbGk+PC9vbD48ZGl2 PjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVmdDoxcHggc29saWQgIzA4NTdBNjttYXJnaW46 MTBweDtwYWRkaW5nOjAgMCAwIDEwcHg7Ij48ZGl2PjxkaXYgY2xhc3M9ImpzLWhlbHBlcl9tcl9j c3NfYXR0ciBqcy1yZWFkbXNnLW1zZ19tcl9jc3NfYXR0ciI+PGRpdj48ZGl2Pjxicj4mZ3Q7ICsg fTxicj4mZ3Q7ICsgLyo8YnI+Jmd0OyArICogSW4gY2FzZSBzZXNzaW9uIHdhcyBub3QgY3JlYXRl ZCB3ZSBjYW4gcHJvY2VzcyBlcnJvciBwYXRoPGJyPiZndDsgKyAqIHdpdGhvdXQgdHggdGhyZWFk Ljxicj4mZ3Q7ICsgKi88YnI+Jmd0OyArIHR4X2FjY2VwdF93cG9zKG1zZy0mZ3Q7Y29ubmVjdGlv biwgJmFtcDttc2ctJmd0O3dwb3MpOzxicj4mZ3Q7ICsgc3RydWN0IG9idWYgKm91dCA9IG1zZy0m Z3Q7Y29ubmVjdGlvbi0mZ3Q7dHgucF9vYnVmOzxicj4mZ3Q7ICsgaXByb3RvX3JlcGx5X2Vycm9y KG91dCwgZGlhZ19sYXN0X2Vycm9yKCZhbXA7bXNnLSZndDtkaWFnKSw8YnI+Jmd0OyArIG1zZy0m Z3Q7aGVhZGVyLnN5bmMsIDo6c2NoZW1hX3ZlcnNpb24pOzxicj4mZ3Q7ICsgaXByb3RvX3dwb3Nf Y3JlYXRlKCZhbXA7bXNnLSZndDt3cG9zLCBvdXQpOzxicj4mZ3Q7ICsgbmV0X3NlbmRfZXJyb3Io JmFtcDsobXNnLSZndDtiYXNlKSk7PGJyPiZndDsgKyByZXR1cm4gLTE7PGJyPiZndDsgfTxicj4m Z3Q7PGJyPiZndDsgc3RhdGljIHZvaWQ8YnI+Jmd0OyBAQCAtMTM4MiwxMCArMTQzNSw2IEBAIHR4 X3Byb2Nlc3NfZGVzdHJveShzdHJ1Y3QgY21zZyAqbSk8YnI+Jmd0OyBzZXNzaW9uX2Rlc3Ryb3ko Y29uLSZndDtzZXNzaW9uKTs8YnI+Jmd0OyBjb24tJmd0O3Nlc3Npb24gPSBOVUxMOyAvKiBzYWZl dHkgKi88YnI+Jmd0OyB9PGJyPiZndDsgLSAvKjxicj4mZ3Q7IC0gKiBHb3QgdG8gYmUgZG9uZSBp biBpcHJvdG8gdGhyZWFkIHNpbmNlPGJyPiZndDsgLSAqIHRoYXQncyB3aGVyZSB0aGUgbWVtb3J5 IGlzIGFsbG9jYXRlZC48YnI+Jmd0OyAtICovPGJyPiZndDsgb2J1Zl9kZXN0cm95KCZhbXA7Y29u LSZndDtvYnVmWzBdKTs8YnI+Jmd0OyBvYnVmX2Rlc3Ryb3koJmFtcDtjb24tJmd0O29idWZbMV0p Ozxicj4mZ3Q7IH08YnI+Jmd0OyBAQCAtMTQ3OCwxMyArMTUyNywyMSBAQCB0eF9hY2NlcHRfd3Bv cyhzdHJ1Y3QgaXByb3RvX2Nvbm5lY3Rpb24gKmNvbiwgY29uc3Qgc3RydWN0IGlwcm90b193cG9z ICp3cG9zKTxicj4mZ3Q7IH08YnI+Jmd0OyB9PGJyPiZndDs8YnI+Jmd0OyAtc3RhdGljIGlubGlu ZSBzdHJ1Y3QgaXByb3RvX21zZyAqPGJyPiZndDsgLXR4X2FjY2VwdF9tc2coc3RydWN0IGNtc2cg Km0pPGJyPiZndDsgK3N0YXRpYyBpbmxpbmUgaW50PGJyPiZndDsgK3R4X2FjY2VwdF9tc2coc3Ry dWN0IGNtc2cgKm0sIHN0cnVjdCBpcHJvdG9fbXNnICoqbXNnKTxicj4mZ3Q7IHs8YnI+Jmd0OyAt IHN0cnVjdCBpcHJvdG9fbXNnICptc2cgPSAoc3RydWN0IGlwcm90b19tc2cgKikgbTs8YnI+Jmd0 OyAtIHR4X2FjY2VwdF93cG9zKG1zZy0mZ3Q7Y29ubmVjdGlvbiwgJmFtcDttc2ctJmd0O3dwb3Mp Ozxicj4mZ3Q7IC0gdHhfZmliZXJfaW5pdChtc2ctJmd0O2Nvbm5lY3Rpb24tJmd0O3Nlc3Npb24s IG1zZy0mZ3Q7aGVhZGVyLnN5bmMpOzxicj4mZ3Q7IC0gcmV0dXJuIG1zZzs8YnI+Jmd0OyArICpt c2cgPSAoc3RydWN0IGlwcm90b19tc2cgKikgbTs8YnI+Jmd0OyArIC8qPGJyPiZndDsgKyAqIElu IGNhc2Ugc2Vzc2lvbiB3YXMgbm90IGNyZWF0ZWQgd2UgbmVlZCB0byBpbml0IGNvbm5lY3Rpb24g aW4gdHggYW5kPGJyPiZndDsgKyAqIGNyZWF0ZSBpdCBoZXJlLjxicj4mZ3Q7ICsgKi88YnI+Jmd0 OyArIGlmICgoKm1zZyktJmd0O2Nvbm5lY3Rpb24tJmd0O3Nlc3Npb24gPT0gTlVMTCAmYW1wOyZh bXA7IHR4X2luaXRfY29ubmVjdCgqbXNnKSAhPSAwKSB7PGJyPiZndDsgKyAoKm1zZyktJmd0O2Ns b3NlX2Nvbm5lY3Rpb24gPSB0cnVlOzxicj4mZ3Q7ICsgcmV0dXJuIC0xOzxicj4mZ3Q7ICsgfTxi cj4mZ3Q7ICsgdHhfYWNjZXB0X3dwb3MoKCptc2cpLSZndDtjb25uZWN0aW9uLCAmYW1wOygqbXNn KS0mZ3Q7d3Bvcyk7PGJyPiZndDsgKyB0eF9maWJlcl9pbml0KCgqbXNnKS0mZ3Q7Y29ubmVjdGlv bi0mZ3Q7c2Vzc2lvbiwgKCptc2cpLSZndDtoZWFkZXIuc3luYyk7PGJyPiZndDsgKyByZXR1cm4g MDs8YnI+Jmd0OyB9PGJyPiZndDs8YnI+Jmd0OyAvKio8YnI+Jmd0OyBAQCAtMTUwNyw3ICsxNTY0 LDggQEAgdHhfcmVwbHlfZXJyb3Ioc3RydWN0IGlwcm90b19tc2cgKm1zZyk8YnI+Jmd0OyBzdGF0 aWMgdm9pZDxicj4mZ3Q7IHR4X3JlcGx5X2lwcm90b19lcnJvcihzdHJ1Y3QgY21zZyAqbSk8YnI+ Jmd0OyB7PGJyPiZndDsgLSBzdHJ1Y3QgaXByb3RvX21zZyAqbXNnID0gdHhfYWNjZXB0X21zZyht KTs8YnI+Jmd0OyArIHN0cnVjdCBpcHJvdG9fbXNnICptc2c7PGJyPiZndDsgKyB0eF9hY2NlcHRf bXNnKG0sICZhbXA7bXNnKTs8YnI+PGJyPi0gUGxlYXNlIGFkZCBhIGNvbW1lbnQgd2h5IHRoZSBy ZXR1cm4gdmFsdWUgY2hlY2sgaXMgdW5uZWNlc3NhcnkuPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+ PC9ibG9ja3F1b3RlPjwvZGl2PjxvbCBzdGFydD0iOSI+PGxpPlJpZ2h0LCB3aWxsIGJlIGZpeGVk IGluIHYyLjwvbGk+PC9vbD48ZGl2PjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVmdDoxcHgg c29saWQgIzA4NTdBNjttYXJnaW46MTBweDtwYWRkaW5nOjAgMCAwIDEwcHg7Ij48ZGl2PjxkaXYg Y2xhc3M9ImpzLWhlbHBlcl9tcl9jc3NfYXR0ciBqcy1yZWFkbXNnLW1zZ19tcl9jc3NfYXR0ciI+ PGRpdj48ZGl2Pjxicj4mZ3Q7IHN0cnVjdCBvYnVmICpvdXQgPSBtc2ctJmd0O2Nvbm5lY3Rpb24t Jmd0O3R4LnBfb2J1Zjs8YnI+Jmd0OyBpcHJvdG9fcmVwbHlfZXJyb3Iob3V0LCBkaWFnX2xhc3Rf ZXJyb3IoJmFtcDttc2ctJmd0O2RpYWcpLDxicj4mZ3Q7IG1zZy0mZ3Q7aGVhZGVyLnN5bmMsIDo6 c2NoZW1hX3ZlcnNpb24pOzxicj4mZ3Q7IEBAIC0xNTI3LDcgKzE1ODUsOSBAQCB0eF9pbmplY3Rf ZGVsYXkodm9pZCk8YnI+Jmd0OyBzdGF0aWMgdm9pZDxicj4mZ3Q7IHR4X3Byb2Nlc3MxKHN0cnVj dCBjbXNnICptKTxicj4mZ3Q7IHs8YnI+Jmd0OyAtIHN0cnVjdCBpcHJvdG9fbXNnICptc2cgPSB0 eF9hY2NlcHRfbXNnKG0pOzxicj4mZ3Q7ICsgc3RydWN0IGlwcm90b19tc2cgKm1zZzs8YnI+Jmd0 OyArIGlmICh0eF9hY2NlcHRfbXNnKG0sICZhbXA7bXNnKSAhPSAwKTxicj4mZ3Q7ICsgZ290byBl cnJvcjs8YnI+Jmd0OyBpZiAodHhfY2hlY2tfc2NoZW1hKG1zZy0mZ3Q7aGVhZGVyLnNjaGVtYV92 ZXJzaW9uKSk8YnI+Jmd0OyBnb3RvIGVycm9yOzxicj4mZ3Q7PGJyPiZndDsgQEAgLTE1NTMsMTcg KzE2MTMsMjAgQEAgZXJyb3I6PGJyPiZndDsgc3RhdGljIHZvaWQ8YnI+Jmd0OyB0eF9wcm9jZXNz X3NlbGVjdChzdHJ1Y3QgY21zZyAqbSk8YnI+Jmd0OyB7PGJyPiZndDsgLSBzdHJ1Y3QgaXByb3Rv X21zZyAqbXNnID0gdHhfYWNjZXB0X21zZyhtKTs8YnI+Jmd0OyArIHN0cnVjdCBpcHJvdG9fbXNn ICptc2c7PGJyPiZndDsgKyBzdHJ1Y3QgcmVxdWVzdCAqcmVxOzxicj48YnI+LSBVbm5lZWRlZCBj aGFuZ2UuPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2PjxvbCBzdGFy dD0iMTAiPjxsaT5UaGlzIGNoYW5nZSBpcyBuZWVkZWQgYXMgZmFyIGFzJm5ic3A7dmFyaWFibGVz Jm5ic3A7PGJyPmhhdmUgdG8gYmUgZGVjbGFyZWQgYmVmb3JlIGdvdG8uPC9saT48L29sPjxkaXY+ PGJsb2NrcXVvdGUgc3R5bGU9ImJvcmRlci1sZWZ0OjFweCBzb2xpZCAjMDg1N0E2O21hcmdpbjox MHB4O3BhZGRpbmc6MCAwIDAgMTBweDsiPjxkaXY+PGRpdiBjbGFzcz0ianMtaGVscGVyX21yX2Nz c19hdHRyIGpzLXJlYWRtc2ctbXNnX21yX2Nzc19hdHRyIj48ZGl2PjxkaXY+PGJyPiZndDsgc3Ry dWN0IG9idWYgKm91dDs8YnI+Jmd0OyBzdHJ1Y3Qgb2J1Zl9zdnAgc3ZwOzxicj4mZ3Q7IHN0cnVj dCBwb3J0IHBvcnQ7PGJyPiZndDsgaW50IGNvdW50Ozxicj4mZ3Q7IGludCByYzs8YnI+Jmd0OyAt IHN0cnVjdCByZXF1ZXN0ICpyZXEgPSAmYW1wO21zZy0mZ3Q7ZG1sOzxicj4mZ3Q7ICsgaWYgKHR4 X2FjY2VwdF9tc2cobSwgJmFtcDttc2cpICE9IDApPGJyPiZndDsgKyBnb3RvIGVycm9yOzxicj4m Z3Q7IGlmICh0eF9jaGVja19zY2hlbWEobXNnLSZndDtoZWFkZXIuc2NoZW1hX3ZlcnNpb24pKTxi cj4mZ3Q7IGdvdG8gZXJyb3I7PGJyPiZndDs8YnI+Jmd0OyB0eF9pbmplY3RfZGVsYXkoKTs8YnI+ Jmd0OyArIHJlcSA9ICZhbXA7bXNnLSZndDtkbWw7PGJyPiZndDsgcmMgPSBib3hfc2VsZWN0KHJl cS0mZ3Q7c3BhY2VfaWQsIHJlcS0mZ3Q7aW5kZXhfaWQsPGJyPiZndDsgcmVxLSZndDtpdGVyYXRv ciwgcmVxLSZndDtvZmZzZXQsIHJlcS0mZ3Q7bGltaXQsPGJyPiZndDsgcmVxLSZndDtrZXksIHJl cS0mZ3Q7a2V5X2VuZCwgJmFtcDtwb3J0KTs8YnI+Jmd0OyBAQCAtMTYwNyw3ICsxNjcwLDkgQEAg dHhfcHJvY2Vzc19jYWxsX29uX3lpZWxkKHN0cnVjdCB0cmlnZ2VyICp0cmlnZ2VyLCB2b2lkICpl dmVudCk8YnI+Jmd0OyBzdGF0aWMgdm9pZDxicj4mZ3Q7IHR4X3Byb2Nlc3NfY2FsbChzdHJ1Y3Qg Y21zZyAqbSk8YnI+Jmd0OyB7PGJyPiZndDsgLSBzdHJ1Y3QgaXByb3RvX21zZyAqbXNnID0gdHhf YWNjZXB0X21zZyhtKTs8YnI+Jmd0OyArIHN0cnVjdCBpcHJvdG9fbXNnICptc2c7PGJyPiZndDsg KyBpZiAodHhfYWNjZXB0X21zZyhtLCAmYW1wO21zZykgIT0gMCk8YnI+Jmd0OyArIGdvdG8gZXJy b3I7PGJyPiZndDsgaWYgKHR4X2NoZWNrX3NjaGVtYShtc2ctJmd0O2hlYWRlci5zY2hlbWFfdmVy c2lvbikpPGJyPiZndDsgZ290byBlcnJvcjs8YnI+Jmd0Ozxicj4mZ3Q7IEBAIC0xNjg2LDEzICsx NzUxLDE1IEBAIGVycm9yOjxicj4mZ3Q7IHN0YXRpYyB2b2lkPGJyPiZndDsgdHhfcHJvY2Vzc19t aXNjKHN0cnVjdCBjbXNnICptKTxicj4mZ3Q7IHs8YnI+Jmd0OyAtIHN0cnVjdCBpcHJvdG9fbXNn ICptc2cgPSB0eF9hY2NlcHRfbXNnKG0pOzxicj4mZ3Q7IC0gc3RydWN0IGlwcm90b19jb25uZWN0 aW9uICpjb24gPSBtc2ctJmd0O2Nvbm5lY3Rpb247PGJyPiZndDsgLSBzdHJ1Y3Qgb2J1ZiAqb3V0 ID0gY29uLSZndDt0eC5wX29idWY7PGJyPiZndDsgKyBzdHJ1Y3QgaXByb3RvX21zZyAqbXNnOzxi cj4mZ3Q7ICsgaWYgKHR4X2FjY2VwdF9tc2cobSwgJmFtcDttc2cpICE9IDApPGJyPiZndDsgKyBn b3RvIGVycm9yOzxicj4mZ3Q7IGlmICh0eF9jaGVja19zY2hlbWEobXNnLSZndDtoZWFkZXIuc2No ZW1hX3ZlcnNpb24pKTxicj4mZ3Q7IGdvdG8gZXJyb3I7PGJyPiZndDs8YnI+Jmd0OyB0cnkgezxi cj4mZ3Q7ICsgc3RydWN0IGlwcm90b19jb25uZWN0aW9uICpjb24gPSBtc2ctJmd0O2Nvbm5lY3Rp b247PGJyPiZndDsgKyBzdHJ1Y3Qgb2J1ZiAqb3V0ID0gY29uLSZndDt0eC5wX29idWY7PGJyPiZn dDsgc3RydWN0IGJhbGxvdCBiYWxsb3Q7PGJyPiZndDsgc3dpdGNoIChtc2ctJmd0O2hlYWRlci50 eXBlKSB7PGJyPiZndDsgY2FzZSBJUFJPVE9fQVVUSDo8YnI+Jmd0OyBAQCAtMTcyOSw3ICsxNzk2 LDcgQEAgZXJyb3I6PGJyPiZndDsgc3RhdGljIHZvaWQ8YnI+Jmd0OyB0eF9wcm9jZXNzX3NxbChz dHJ1Y3QgY21zZyAqbSk8YnI+Jmd0OyB7PGJyPiZndDsgLSBzdHJ1Y3QgaXByb3RvX21zZyAqbXNn ID0gdHhfYWNjZXB0X21zZyhtKTs8YnI+Jmd0OyArIHN0cnVjdCBpcHJvdG9fbXNnICptc2c7PGJy PiZndDsgc3RydWN0IG9idWYgKm91dDs8YnI+Jmd0OyBzdHJ1Y3QgcG9ydCBwb3J0Ozxicj4mZ3Q7 IHN0cnVjdCBzcWxfYmluZCAqYmluZCA9IE5VTEw7PGJyPiZndDsgQEAgLTE3MzgsNiArMTgwNSw4 IEBAIHR4X3Byb2Nlc3Nfc3FsKHN0cnVjdCBjbXNnICptKTxicj4mZ3Q7IHVpbnQzMl90IGxlbjs8 YnI+Jmd0OyBib29sIGlzX3VucHJlcGFyZSA9IGZhbHNlOzxicj4mZ3Q7PGJyPiZndDsgKyBpZiAo dHhfYWNjZXB0X21zZyhtLCAmYW1wO21zZykgIT0gMCk8YnI+Jmd0OyArIGdvdG8gZXJyb3I7PGJy PiZndDsgaWYgKHR4X2NoZWNrX3NjaGVtYShtc2ctJmd0O2hlYWRlci5zY2hlbWFfdmVyc2lvbikp PGJyPiZndDsgZ290byBlcnJvcjs8YnI+Jmd0OyBhc3NlcnQobXNnLSZndDtoZWFkZXIudHlwZSA9 PSBJUFJPVE9fRVhFQ1VURSB8fDxicj4mZ3Q7IEBAIC0xODI1LDcgKzE4OTQsMTEgQEAgZXJyb3I6 PGJyPiZndDsgc3RhdGljIHZvaWQ8YnI+Jmd0OyB0eF9wcm9jZXNzX3JlcGxpY2F0aW9uKHN0cnVj dCBjbXNnICptKTxicj4mZ3Q7IHs8YnI+Jmd0OyAtIHN0cnVjdCBpcHJvdG9fbXNnICptc2cgPSB0 eF9hY2NlcHRfbXNnKG0pOzxicj4mZ3Q7ICsgc3RydWN0IGlwcm90b19tc2cgKm1zZzs8YnI+Jmd0 OyArIGlmICh0eF9hY2NlcHRfbXNnKG0sICZhbXA7bXNnKSAhPSAwKSB7PGJyPiZndDsgKyB0eF9y ZXBseV9lcnJvcihtc2cpOzxicj4mZ3Q7ICsgcmV0dXJuOzxicj4mZ3Q7ICsgfTxicj4mZ3Q7IHN0 cnVjdCBpcHJvdG9fY29ubmVjdGlvbiAqY29uID0gbXNnLSZndDtjb25uZWN0aW9uOzxicj4mZ3Q7 IHN0cnVjdCBldl9pbyBpbzs8YnI+Jmd0OyBjb2lvX2NyZWF0ZSgmYW1wO2lvLCBjb24tJmd0O2lu cHV0LmZkKTs8YnI+Jmd0OyBAQCAtMTg2NSw2ICsxOTM4LDI5IEBAIHR4X3Byb2Nlc3NfcmVwbGlj YXRpb24oc3RydWN0IGNtc2cgKm0pPGJyPiZndDsgfTxicj4mZ3Q7IH08YnI+Jmd0Ozxicj4mZ3Q7 ICtzdGF0aWMgaW50PGJyPiZndDsgK25ldF9jaGVja19jb25uZWN0aW9uKHN0cnVjdCBpcHJvdG9f bXNnICptc2cpPGJyPjxicj4tIFNlZW1zIGxpa2UgdGhlICJib29sIiB0eXBlIHNob3VsZCBiZSB1 c2VkIGZvciBuZXRfY2hlY2tfY29ubmVjdGlvbjxicj4oPGEgaHJlZj0iaHR0cHM6Ly93d3cudGFy YW50b29sLmlvL2VuL2RvYy8xLjEwL2Rldl9ndWlkZS9jX3N0eWxlX2d1aWRlLyNjaGFwdGVyLTE2 LWZ1bmN0aW9uLXJldHVybi12YWx1ZXMtYW5kLW5hbWVzIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJy ZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL3d3dy50YXJhbnRvb2wuaW8vZW4vZG9jLzEuMTAv ZGV2X2d1aWRlL2Nfc3R5bGVfZ3VpZGUvI2NoYXB0ZXItMTYtZnVuY3Rpb24tcmV0dXJuLXZhbHVl cy1hbmQtbmFtZXM8L2E+KS48YnI+SW4gdGhlIGZ1bmN0aW9uLCB5b3Ugbm90IG9ubHkgY2hlY2sg YSBjb25uZWN0aW9uIHN0YXR1cywgYnV0IGFsc28gY2xvc2U8YnI+aXQgaWYgbmVjZXNzYXJ5LiBJ IHRoaW5rIGl0IHdvdWxkIGJlIG5pY2UgdG8gYWRkIGEgZGVzY3JpcHRpb24gb2YgdGhlPGJyPmZ1 bmN0aW9uLjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48L2Rpdj48b2wgc3Rh cnQ9IjExIj48bGk+UmlnaHQuIEkgc2VlLCBpdCBpcyZuYnNwO2NvbmZ1c2luZyZuYnNwO25vdy4g V2lsbCBiZSBmaXhlZCZuYnNwO2luIHYyLjwvbGk+PC9vbD48ZGl2PjxibG9ja3F1b3RlIHN0eWxl PSJib3JkZXItbGVmdDoxcHggc29saWQgIzA4NTdBNjttYXJnaW46MTBweDtwYWRkaW5nOjAgMCAw IDEwcHg7Ij48ZGl2PjxkaXYgY2xhc3M9ImpzLWhlbHBlcl9tcl9jc3NfYXR0ciBqcy1yZWFkbXNn LW1zZ19tcl9jc3NfYXR0ciI+PGRpdj48ZGl2Pjxicj4mZ3Q7ICt7PGJyPiZndDsgKyBpZiAoIW1z Zy0mZ3Q7Y2xvc2VfY29ubmVjdGlvbik8YnI+Jmd0OyArIHJldHVybiAwOzxicj4mZ3Q7ICs8YnI+ Jmd0OyArIHN0cnVjdCBpcHJvdG9fY29ubmVjdGlvbiAqY29uID0gbXNnLSZndDtjb25uZWN0aW9u Ozxicj4mZ3Q7ICsgc3RydWN0IG9idWYgKm91dCA9IG1zZy0mZ3Q7d3Bvcy5vYnVmOzxicj4mZ3Q7 ICsgaW50NjRfdCBud3IgPSBzaW9fd3JpdGV2KGNvbi0mZ3Q7b3V0cHV0LmZkLCBvdXQtJmd0O2lv diw8YnI+Jmd0OyArIG9idWZfaW92Y250KG91dCkpOzxicj4mZ3Q7ICs8YnI+Jmd0OyArIGlmIChu d3IgJmd0OyAwKSB7PGJyPiZndDsgKyAvKiBDb3VudCBzdGF0aXN0aWNzLiAqLzxicj4mZ3Q7ICsg cm1lYW5fY29sbGVjdChybWVhbl9uZXQsIElQUk9UT19TRU5ULCBud3IpOzxicj4mZ3Q7ICsgfSBl bHNlIGlmIChud3IgJmx0OyAwICZhbXA7JmFtcDsgISBzaW9fd291bGRibG9jayhlcnJubykpIHs8 YnI+Jmd0OyArIGRpYWdfbG9nKCk7PGJyPiZndDsgKyB9PGJyPiZndDsgKyBhc3NlcnQoaXByb3Rv X2Nvbm5lY3Rpb25faXNfaWRsZShjb24pKTs8YnI+Jmd0OyArIGlwcm90b19jb25uZWN0aW9uX2Ns b3NlKGNvbik7PGJyPiZndDsgKyBpcHJvdG9fbXNnX2RlbGV0ZShtc2cpOzxicj4mZ3Q7ICsgcmV0 dXJuIC0xOzxicj4mZ3Q7ICt9PGJyPiZndDsgKzxicj4mZ3Q7IHN0YXRpYyB2b2lkPGJyPiZndDsg bmV0X3NlbmRfbXNnKHN0cnVjdCBjbXNnICptKTxicj4mZ3Q7IHs8YnI+Jmd0OyBAQCAtMTg4MSw2 ICsxOTc3LDkgQEAgbmV0X3NlbmRfbXNnKHN0cnVjdCBjbXNnICptKTxicj4mZ3Q7IH08YnI+Jmd0 OyBjb24tJmd0O3dlbmQgPSBtc2ctJmd0O3dwb3M7PGJyPiZndDs8YnI+Jmd0OyArIGlmIChuZXRf Y2hlY2tfY29ubmVjdGlvbihtc2cpICE9IDApPGJyPiZndDsgKyByZXR1cm47PGJyPiZndDsgKzxi cj4mZ3Q7IGlmIChldmlvX2hhc19mZCgmYW1wO2Nvbi0mZ3Q7b3V0cHV0KSkgezxicj4mZ3Q7IGlm ICghIGV2X2lzX2FjdGl2ZSgmYW1wO2Nvbi0mZ3Q7b3V0cHV0KSk8YnI+Jmd0OyBldl9mZWVkX2V2 ZW50KGNvbi0mZ3Q7bG9vcCwgJmFtcDtjb24tJmd0O291dHB1dCwgRVZfV1JJVEUpOzxicj4mZ3Q7 IEBAIC0xOTEwLDYgKzIwMDksMTAgQEAgbmV0X2VuZF9qb2luKHN0cnVjdCBjbXNnICptKTxicj4m Z3Q7IHN0cnVjdCBpcHJvdG9fY29ubmVjdGlvbiAqY29uID0gbXNnLSZndDtjb25uZWN0aW9uOzxi cj4mZ3Q7PGJyPiZndDsgbXNnLSZndDtwX2lidWYtJmd0O3Jwb3MgKz0gbXNnLSZndDtsZW47PGJy PiZndDsgKzxicj4mZ3Q7ICsgaWYgKG5ldF9jaGVja19jb25uZWN0aW9uKG1zZykgIT0gMCk8YnI+ Jmd0OyArIHJldHVybjs8YnI+Jmd0OyArPGJyPiZndDsgaXByb3RvX21zZ19kZWxldGUobXNnKTs8 YnI+Jmd0Ozxicj4mZ3Q7IGFzc2VydCghIGV2X2lzX2FjdGl2ZSgmYW1wO2Nvbi0mZ3Q7aW5wdXQp KTs8YnI+Jmd0OyBAQCAtMTkyOCw2ICsyMDMxLDEwIEBAIG5ldF9lbmRfc3Vic2NyaWJlKHN0cnVj dCBjbXNnICptKTxicj4mZ3Q7IHN0cnVjdCBpcHJvdG9fY29ubmVjdGlvbiAqY29uID0gbXNnLSZn dDtjb25uZWN0aW9uOzxicj4mZ3Q7PGJyPiZndDsgbXNnLSZndDtwX2lidWYtJmd0O3Jwb3MgKz0g bXNnLSZndDtsZW47PGJyPiZndDsgKzxicj4mZ3Q7ICsgaWYgKG5ldF9jaGVja19jb25uZWN0aW9u KG1zZykgIT0gMCk8YnI+Jmd0OyArIHJldHVybjs8YnI+Jmd0OyArPGJyPiZndDsgaXByb3RvX21z Z19kZWxldGUobXNnKTs8YnI+Jmd0Ozxicj4mZ3Q7IGFzc2VydCghIGV2X2lzX2FjdGl2ZSgmYW1w O2Nvbi0mZ3Q7aW5wdXQpKTs8YnI+Jmd0OyBAQCAtMTkzNiw4MSArMjA0Myw0OSBAQCBuZXRfZW5k X3N1YnNjcmliZShzdHJ1Y3QgY21zZyAqbSk8YnI+Jmd0OyB9PGJyPiZndDs8YnI+Jmd0OyAvKio8 YnI+Jmd0OyAtICogSGFuZHNoYWtlIGEgY29ubmVjdGlvbjogaW52b2tlIHRoZSBvbi1jb25uZWN0 IHRyaWdnZXI8YnI+Jmd0OyAtICogYW5kIHBvc3NpYmx5IGF1dGhlbnRpY2F0ZS4gVHJ5IHRvIHNl bmQgdGhlIGNsaWVudCBhbiBlcnJvcjxicj4mZ3Q7IC0gKiB1cG9uIGEgZmFpbHVyZS48YnI+Jmd0 OyArICogSGFuZHNoYWtlIGEgY29ubmVjdGlvbjogcHJlcGFyZSBncmVldGluZyBmb3IgaXQuPGJy PiZndDsgKi88YnI+Jmd0OyBzdGF0aWMgdm9pZDxicj4mZ3Q7IC10eF9wcm9jZXNzX2Nvbm5lY3Qo c3RydWN0IGNtc2cgKm0pPGJyPiZndDsgK2lwcm90b19wcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IGlw cm90b19tc2cgKm1zZyk8YnI+Jmd0OyB7PGJyPiZndDsgLSBzdHJ1Y3QgaXByb3RvX21zZyAqbXNn ID0gKHN0cnVjdCBpcHJvdG9fbXNnICopIG07PGJyPiZndDsgc3RydWN0IGlwcm90b19jb25uZWN0 aW9uICpjb24gPSBtc2ctJmd0O2Nvbm5lY3Rpb247PGJyPiZndDsgc3RydWN0IG9idWYgKm91dCA9 IG1zZy0mZ3Q7Y29ubmVjdGlvbi0mZ3Q7dHgucF9vYnVmOzxicj4mZ3Q7IC0gdHJ5IHsgLyogY29u bmVjdC4gKi88YnI+PGJyPi0gV2h5ICJ0cnkgLSBjYXRjaCIgaGFzIGJlZW4gZGVsZXRlZD88L2Rp dj48L2Rpdj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PC9kaXY+PG9sIHN0YXJ0PSIxMiI+PGxp PkhtbSwgcmlnaHQsIEkgZm9yZ290IGFib3V0IHRoZSBvYnVmX2R1cF94YygpIGZ1bmN0aW9uLiBP dGhlciZuYnNwO3BvdGVudGlhbDxicj50aHJvd2VycyB3ZXJlIG1vdmVkLiBGYWlsIG9uJm5ic3A7 b2J1Zl9kdXAoKSBpcyBub3cgcHJvY2Vzc2VkIGNvcnJlY3RseS48L2xpPjwvb2w+PGRpdj48Ymxv Y2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICMwODU3QTY7bWFyZ2luOjEwcHg7 cGFkZGluZzowIDAgMCAxMHB4OyI+PGRpdj48ZGl2IGNsYXNzPSJqcy1oZWxwZXJfbXJfY3NzX2F0 dHIganMtcmVhZG1zZy1tc2dfbXJfY3NzX2F0dHIiPjxkaXY+PGRpdj48YnI+Jmd0OyAtIGNvbi0m Z3Q7c2Vzc2lvbiA9IHNlc3Npb25fY3JlYXRlKFNFU1NJT05fVFlQRV9CSU5BUlkpOzxicj4mZ3Q7 IC0gaWYgKGNvbi0mZ3Q7c2Vzc2lvbiA9PSBOVUxMKTxicj4mZ3Q7IC0gZGlhZ19yYWlzZSgpOzxi cj4mZ3Q7IC0gY29uLSZndDtzZXNzaW9uLSZndDttZXRhLmNvbm5lY3Rpb24gPSBjb247PGJyPiZn dDsgLSB0eF9maWJlcl9pbml0KGNvbi0mZ3Q7c2Vzc2lvbiwgMCk7PGJyPiZndDsgLSBjaGFyICpn cmVldGluZyA9IChjaGFyICopIHN0YXRpY19hbGxvYyhJUFJPVE9fR1JFRVRJTkdfU0laRSk7PGJy PiZndDsgLSAvKiBUT0RPOiBkaXJ0eSByZWFkIGZyb20gdHggdGhyZWFkICovPGJyPiZndDsgLSBz dHJ1Y3QgdHRfdXVpZCB1dWlkID0gSU5TVEFOQ0VfVVVJRDs8YnI+Jmd0OyAtIHJhbmRvbV9ieXRl cyhjb24tJmd0O3NhbHQsIElQUk9UT19TQUxUX1NJWkUpOzxicj4mZ3Q7IC0gZ3JlZXRpbmdfZW5j b2RlKGdyZWV0aW5nLCB0YXJhbnRvb2xfdmVyc2lvbl9pZCgpLCAmYW1wO3V1aWQsPGJyPiZndDsg LSBjb24tJmd0O3NhbHQsIElQUk9UT19TQUxUX1NJWkUpOzxicj4mZ3Q7IC0gb2J1Zl9kdXBfeGMo b3V0LCBncmVldGluZywgSVBST1RPX0dSRUVUSU5HX1NJWkUpOzxicj4mZ3Q7IC0gaWYgKCEgcmxp c3RfZW1wdHkoJmFtcDtzZXNzaW9uX29uX2Nvbm5lY3QpKSB7PGJyPiZndDsgLSBpZiAoc2Vzc2lv bl9ydW5fb25fY29ubmVjdF90cmlnZ2Vycyhjb24tJmd0O3Nlc3Npb24pICE9IDApPGJyPiZndDsg LSBkaWFnX3JhaXNlKCk7PGJyPiZndDsgLSB9PGJyPiZndDsgLSBpcHJvdG9fd3Bvc19jcmVhdGUo JmFtcDttc2ctJmd0O3dwb3MsIG91dCk7PGJyPiZndDsgLSB9IGNhdGNoIChFeGNlcHRpb24gKmUp IHs8YnI+Jmd0OyAtIHR4X3JlcGx5X2Vycm9yKG1zZyk7PGJyPiZndDsgLSBtc2ctJmd0O2Nsb3Nl X2Nvbm5lY3Rpb24gPSB0cnVlOzxicj4mZ3Q7IC0gfTxicj4mZ3Q7IC19PGJyPiZndDsgLTxicj4m Z3Q7IC0vKio8YnI+Jmd0OyAtICogU2VuZCBhIHJlc3BvbnNlIHRvIGNvbm5lY3QgdG8gdGhlIGNs aWVudCBvciBjbG9zZSB0aGU8YnI+Jmd0OyAtICogY29ubmVjdGlvbiBpbiBjYXNlIG9uX2Nvbm5l Y3QgdHJpZ2dlciBmYWlsZWQuPGJyPiZndDsgLSAqLzxicj4mZ3Q7IC1zdGF0aWMgdm9pZDxicj4m Z3Q7IC1uZXRfc2VuZF9ncmVldGluZyhzdHJ1Y3QgY21zZyAqbSk8YnI+Jmd0OyAtezxicj4mZ3Q7 IC0gc3RydWN0IGlwcm90b19tc2cgKm1zZyA9IChzdHJ1Y3QgaXByb3RvX21zZyAqKSBtOzxicj4m Z3Q7IC0gc3RydWN0IGlwcm90b19jb25uZWN0aW9uICpjb24gPSBtc2ctJmd0O2Nvbm5lY3Rpb247 PGJyPiZndDsgLSBpZiAobXNnLSZndDtjbG9zZV9jb25uZWN0aW9uKSB7PGJyPiZndDsgLSBzdHJ1 Y3Qgb2J1ZiAqb3V0ID0gbXNnLSZndDt3cG9zLm9idWY7PGJyPiZndDsgLSBpbnQ2NF90IG53ciA9 IHNpb193cml0ZXYoY29uLSZndDtvdXRwdXQuZmQsIG91dC0mZ3Q7aW92LDxicj4mZ3Q7IC0gb2J1 Zl9pb3ZjbnQob3V0KSk7PGJyPiZndDsgLTxicj4mZ3Q7IC0gaWYgKG53ciAmZ3Q7IDApIHs8YnI+ Jmd0OyAtIC8qIENvdW50IHN0YXRpc3RpY3MuICovPGJyPiZndDsgLSBybWVhbl9jb2xsZWN0KHJt ZWFuX25ldCwgSVBST1RPX1NFTlQsIG53cik7PGJyPiZndDsgLSB9IGVsc2UgaWYgKG53ciAmbHQ7 IDAgJmFtcDsmYW1wOyAhIHNpb193b3VsZGJsb2NrKGVycm5vKSkgezxicj4mZ3Q7IC0gZGlhZ19s b2coKTs8YnI+Jmd0OyAtIH08YnI+Jmd0OyAtIGFzc2VydChpcHJvdG9fY29ubmVjdGlvbl9pc19p ZGxlKGNvbikpOzxicj4mZ3Q7IC0gaXByb3RvX2Nvbm5lY3Rpb25fY2xvc2UoY29uKTs8YnI+Jmd0 OyAtIGlwcm90b19tc2dfZGVsZXRlKG1zZyk7PGJyPiZndDsgLSByZXR1cm47PGJyPiZndDsgLSB9 PGJyPiZndDsgKyBjaGFyICpncmVldGluZyA9IChjaGFyICopIHN0YXRpY19hbGxvYyhJUFJPVE9f R1JFRVRJTkdfU0laRSk7PGJyPiZndDsgKyBzdHJ1Y3QgdHRfdXVpZCB1dWlkID0gSU5TVEFOQ0Vf VVVJRDs8YnI+Jmd0OyArIHJhbmRvbV9ieXRlcyhjb24tJmd0O3NhbHQsIElQUk9UT19TQUxUX1NJ WkUpOzxicj4mZ3Q7ICsgZ3JlZXRpbmdfZW5jb2RlKGdyZWV0aW5nLCB0YXJhbnRvb2xfdmVyc2lv bl9pZCgpLCAmYW1wO3V1aWQsPGJyPiZndDsgKyBjb24tJmd0O3NhbHQsIElQUk9UT19TQUxUX1NJ WkUpOzxicj4mZ3Q7ICsgb2J1Zl9kdXBfeGMob3V0LCBncmVldGluZywgSVBST1RPX0dSRUVUSU5H X1NJWkUpOzxicj4mZ3Q7ICsgaXByb3RvX3dwb3NfY3JlYXRlKCZhbXA7bXNnLSZndDt3cG9zLCBv dXQpOzxicj4mZ3Q7IGNvbi0mZ3Q7d2VuZCA9IG1zZy0mZ3Q7d3Bvczs8YnI+Jmd0OyAtIC8qPGJy PiZndDsgLSAqIENvbm5lY3QgaXMgc3luY2hyb25vdXMsIHNvIG5vIG9uZSBjb3VsZCBoYXZlIGJl ZW48YnI+Jmd0OyAtICogbWVzc2luZyB1cCB3aXRoIHRoZSBjb25uZWN0aW9uIHdoaWxlIGl0IHdh cyBpbjxicj4mZ3Q7IC0gKiBwcm9ncmVzcy48YnI+Jmd0OyAtICovPGJyPiZndDsgYXNzZXJ0KGV2 aW9faGFzX2ZkKCZhbXA7Y29uLSZndDtvdXRwdXQpKTs8YnI+Jmd0OyAtIC8qIEhhbmRzaGFrZSBP Sywgc3RhcnQgcmVhZGluZyBpbnB1dC4gKi88YnI+Jmd0OyBldl9mZWVkX2V2ZW50KGNvbi0mZ3Q7 bG9vcCwgJmFtcDtjb24tJmd0O291dHB1dCwgRVZfV1JJVEUpOzxicj4mZ3Q7IGlwcm90b19tc2df ZGVsZXRlKG1zZyk7PGJyPiZndDsgfTxicj4mZ3Q7PGJyPiZndDsgLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgY21zZ19ob3AgY29ubmVjdF9yb3V0ZVtdID0gezxicj4mZ3Q7IC0geyB0eF9wcm9jZXNzX2Nv bm5lY3QsICZhbXA7bmV0X3BpcGUgfSw8YnI+Jmd0OyAtIHsgbmV0X3NlbmRfZ3JlZXRpbmcsIE5V TEwgfSw8YnI+Jmd0OyAtfTs8YnI+Jmd0OyArc3RhdGljIGludDxicj4mZ3Q7ICt0eF9pbml0X2Nv bm5lY3Qoc3RydWN0IGlwcm90b19tc2cgKm1zZyk8YnI+Jmd0OyArezxicj4mZ3Q7ICsgc3RydWN0 IGlwcm90b19jb25uZWN0aW9uICpjb24gPSBtc2ctJmd0O2Nvbm5lY3Rpb247PGJyPiZndDsgKyBv YnVmX2NyZWF0ZSgmYW1wO2Nvbi0mZ3Q7b2J1ZlswXSwgJmFtcDtuZXRfc2xhYmMsIGlwcm90b19y ZWFkYWhlYWQpOzxicj4mZ3Q7ICsgb2J1Zl9jcmVhdGUoJmFtcDtjb24tJmd0O29idWZbMV0sICZh bXA7bmV0X3NsYWJjLCBpcHJvdG9fcmVhZGFoZWFkKTs8YnI+Jmd0OyArIGNvbi0mZ3Q7dHgucF9v YnVmID0gJmFtcDtjb24tJmd0O29idWZbMF07PGJyPiZndDsgKyBpcHJvdG9fd3Bvc19jcmVhdGUo JmFtcDtjb24tJmd0O3dwb3MsIGNvbi0mZ3Q7dHgucF9vYnVmKTs8YnI+Jmd0OyArIGlwcm90b193 cG9zX2NyZWF0ZSgmYW1wO2Nvbi0mZ3Q7d2VuZCwgY29uLSZndDt0eC5wX29idWYpOzxicj4mZ3Q7 ICs8YnI+Jmd0OyArIGNvbi0mZ3Q7c2Vzc2lvbiA9IHNlc3Npb25fY3JlYXRlKFNFU1NJT05fVFlQ RV9CSU5BUlkpOzxicj4mZ3Q7ICsgaWYgKGNvbi0mZ3Q7c2Vzc2lvbiA9PSBOVUxMKTxicj4mZ3Q7 ICsgcmV0dXJuIC0xOzxicj4mZ3Q7ICsgY29uLSZndDtzZXNzaW9uLSZndDttZXRhLmNvbm5lY3Rp b24gPSBjb247PGJyPiZndDsgKzxicj4mZ3Q7ICsgdHhfZmliZXJfaW5pdChjb24tJmd0O3Nlc3Np b24sIDApOzxicj4mZ3Q7ICsgaWYgKCEgcmxpc3RfZW1wdHkoJmFtcDtzZXNzaW9uX29uX2Nvbm5l Y3QpKSB7PGJyPiZndDsgKyBpZiAoc2Vzc2lvbl9ydW5fb25fY29ubmVjdF90cmlnZ2Vycyhjb24t Jmd0O3Nlc3Npb24pICE9IDApPGJyPiZndDsgKyByZXR1cm4gLTE7PGJyPiZndDsgKyB9PGJyPiZn dDsgKzxicj4mZ3Q7ICsgcmV0dXJuIDA7PGJyPiZndDsgK308YnI+Jmd0Ozxicj4mZ3Q7IC8qKiB9 fX0gKi88YnI+Jmd0Ozxicj4mZ3Q7IEBAIC0yMDM3LDExICsyMTEyLDEwIEBAIGlwcm90b19vbl9h Y2NlcHQoc3RydWN0IGV2aW9fc2VydmljZSAqIC8qIHNlcnZpY2UgKi8sIGludCBmZCw8YnI+Jmd0 OyBtZW1wb29sX2ZyZWUoJmFtcDtpcHJvdG9fY29ubmVjdGlvbl9wb29sLCBjb24pOzxicj4mZ3Q7 IHJldHVybiAtMTs8YnI+Jmd0OyB9PGJyPiZndDsgLSBjbXNnX2luaXQoJmFtcDttc2ctJmd0O2Jh c2UsIGNvbm5lY3Rfcm91dGUpOzxicj4mZ3Q7IG1zZy0mZ3Q7cF9pYnVmID0gY29uLSZndDtwX2li dWY7PGJyPiZndDsgbXNnLSZndDt3cG9zID0gY29uLSZndDt3cG9zOzxicj4mZ3Q7IG1zZy0mZ3Q7 Y2xvc2VfY29ubmVjdGlvbiA9IGZhbHNlOzxicj4mZ3Q7IC0gY3BpcGVfcHVzaCgmYW1wO3R4X3Bp cGUsICZhbXA7bXNnLSZndDtiYXNlKTs8YnI+Jmd0OyArIGlwcm90b19wcm9jZXNzX2Nvbm5lY3Qo bXNnKTs8YnI+Jmd0OyByZXR1cm4gMDs8YnI+Jmd0OyB9PGJyPiZndDs8YnI+Jmd0OyBAQCAtMjA1 NCw2ICsyMTI4LDggQEAgc3RhdGljIHN0cnVjdCBldmlvX3NlcnZpY2UgYmluYXJ5OyAvKiBpcHJv dG8gYmluYXJ5IGxpc3RlbmVyICovPGJyPiZndDsgc3RhdGljIGludDxicj4mZ3Q7IG5ldF9jb3Jk X2YodmFfbGlzdCAvKiBhcCAqLyk8YnI+Jmd0OyB7PGJyPiZndDsgKyBzbGFiX2NhY2hlX2NyZWF0 ZSgmYW1wO2lwcm90b19zbGFiYywgJmFtcDtydW50aW1lKTs8YnI+Jmd0OyArPGJyPiZndDsgbWVt cG9vbF9jcmVhdGUoJmFtcDtpcHJvdG9fbXNnX3Bvb2wsICZhbXA7Y29yZCgpLSZndDtzbGFiYyw8 YnI+Jmd0OyBzaXplb2Yoc3RydWN0IGlwcm90b19tc2cpKTs8YnI+Jmd0OyBtZW1wb29sX2NyZWF0 ZSgmYW1wO2lwcm90b19jb25uZWN0aW9uX3Bvb2wsICZhbXA7Y29yZCgpLSZndDtzbGFiYyw8YnI+ Jmd0OyBAQCAtMjI5Nyw3ICsyMzczLDggQEAgaXByb3RvX2xpc3Rlbihjb25zdCBjaGFyICp1cmkp PGJyPiZndDsgc2l6ZV90PGJyPiZndDsgaXByb3RvX21lbV91c2VkKHZvaWQpPGJyPiZndDsgezxi cj4mZ3Q7IC0gcmV0dXJuIHNsYWJfY2FjaGVfdXNlZCgmYW1wO25ldF9jb3JkLnNsYWJjKSArIHNs YWJfY2FjaGVfdXNlZCgmYW1wO25ldF9zbGFiYyk7PGJyPiZndDsgKyByZXR1cm4gc2xhYl9jYWNo ZV91c2VkKCZhbXA7bmV0X2NvcmQuc2xhYmMpPGJyPiZndDsgKyArIHNsYWJfY2FjaGVfdXNlZCgm YW1wO25ldF9zbGFiYykgKyBzbGFiX2NhY2hlX3VzZWQoJmFtcDtpcHJvdG9fc2xhYmMpOzxicj4m Z3Q7IH08YnI+Jmd0Ozxicj4mZ3Q7IHNpemVfdDxicj4mZ3Q7IGRpZmYgLS1naXQgYS90ZXN0L2Jv eC1weS9iYWRfdHJpZ2dlci5yZXN1bHQgYi90ZXN0L2JveC1weS9iYWRfdHJpZ2dlci5yZXN1bHQ8 YnI+Jmd0OyBpbmRleCA1ZDA2NGI3NjQ4Li5iZmE5YzJiNzU5IDEwMDY0NDxicj4mZ3Q7IC0tLSBh L3Rlc3QvYm94LXB5L2JhZF90cmlnZ2VyLnJlc3VsdDxicj4mZ3Q7ICsrKyBiL3Rlc3QvYm94LXB5 L2JhZF90cmlnZ2VyLnJlc3VsdDxicj4mZ3Q7IEBAIC0xNCw2ICsxNCw3IEBAIHR5cGUoYm94LnNl c3Npb24ub25fY29ubmVjdChmMSkpPGJyPiZndDsgLSBmdW5jdGlvbjxicj4mZ3Q7IC4uLjxicj4m Z3Q7IGdyZWV0aW5nOiBUcnVlPGJyPiZndDsgK05vdGhpbmcgdG8gcmVhZCB5ZXQ6IFJlc291cmNl IHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlPGJyPiZndDsgZml4aGVhZGVyOiBUcnVlPGJyPiZndDsg ZXJyb3IgY29kZSAzMjxicj4mZ3Q7IGVycm9yIG1lc3NhZ2U6IFtzdHJpbmcgImZ1bmN0aW9uIGYx KCkgbm9zdWNoZnVuY3Rpb24oKSBlbmQiXToxOiBhdHRlbXB0IHRvIGNhbGwgZ2xvYmFsICdub3N1 Y2hmdW5jdGlvbicgKGEgbmlsIHZhbHVlKTxicj4mZ3Q7IGRpZmYgLS1naXQgYS90ZXN0L2JveC1w eS9iYWRfdHJpZ2dlci50ZXN0LnB5IGIvdGVzdC9ib3gtcHkvYmFkX3RyaWdnZXIudGVzdC5weTxi cj4mZ3Q7IGluZGV4IDdkMjAwYjkyMTguLjdmNDVmNWU3MTMgMTAwNjQ0PGJyPiZndDsgLS0tIGEv dGVzdC9ib3gtcHkvYmFkX3RyaWdnZXIudGVzdC5weTxicj4mZ3Q7ICsrKyBiL3Rlc3QvYm94LXB5 L2JhZF90cmlnZ2VyLnRlc3QucHk8YnI+Jmd0OyBAQCAtMiw3ICsyLDcgQEAgZnJvbSBsaWIuYm94 X2Nvbm5lY3Rpb24gaW1wb3J0IEJveENvbm5lY3Rpb248YnI+Jmd0OyBmcm9tIGxpYi50YXJhbnRv b2xfY29ubmVjdGlvbiBpbXBvcnQgVGFyYW50b29sQ29ubmVjdGlvbjxicj4mZ3Q7IGZyb20gdGFy YW50b29sIGltcG9ydCBOZXR3b3JrRXJyb3I8YnI+Jmd0OyBmcm9tIHRhcmFudG9vbC5jb25zdCBp bXBvcnQgSVBST1RPX0dSRUVUSU5HX1NJWkUsIElQUk9UT19DT0RFLCBJUFJPVE9fRVJST1IsIFw8 YnI+Jmd0OyAtIFJFUVVFU1RfVFlQRV9FUlJPUjxicj4mZ3Q7ICsgUkVRVUVTVF9UWVBFX0VSUk9S LCBSRVFVRVNUX1RZUEVfUElORzxicj4mZ3Q7IGltcG9ydCBzb2NrZXQ8YnI+Jmd0OyBpbXBvcnQg bXNncGFjazxicj4mZ3Q7PGJyPiZndDsgQEAgLTI2LDkgKzI2LDI1IEBAIHMgPSBjb25uLnNvY2tl dDxicj4mZ3Q7ICMgUmVhZCBncmVldGluZzxicj4mZ3Q7IHByaW50ICdncmVldGluZzogJywgbGVu KHMucmVjdihJUFJPVE9fR1JFRVRJTkdfU0laRSkpID09IElQUk9UT19HUkVFVElOR19TSVpFPGJy PiZndDs8YnI+Jmd0OyAtIyBSZWFkIGVycm9yIHBhY2tldDxicj4mZ3Q7ICsjIENoZWNrIHNvc2Nr ZXQ8YnI+PGJyPi0gVHlwbyAic29ja2V0Ijxicj4mZ3Q7IElQUk9UT19GSVhIRUFERVJfU0laRSA9 IDU8YnI+Jmd0OyAtZml4aGVhZGVyID0gcy5yZWN2KElQUk9UT19GSVhIRUFERVJfU0laRSk8YnI+ Jmd0OyArcy5zZXRibG9ja2luZyhGYWxzZSk8YnI+Jmd0OyArZml4aGVhZGVyID0gTm9uZTxicj4m Z3Q7ICt0cnk6PGJyPiZndDsgKyBmaXhoZWFkZXIgPSBzLnJlY3YoSVBST1RPX0ZJWEhFQURFUl9T SVpFKTxicj4mZ3Q7ICtleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjo8YnI+Jmd0OyArIHByaW50 ICdOb3RoaW5nIHRvIHJlYWQgeWV0OicsIHN0cihlcnIpLnNwbGl0KCddJylbMV08YnI+Jmd0OyAr ZWxzZTo8YnI+Jmd0OyArIHByaW50ICdSZWNlaXZlZCBmaXhoZWFkZXInPGJyPiZndDsgK3Muc2V0 YmxvY2tpbmcoVHJ1ZSk8YnI+Jmd0OyArPGJyPiZndDsgKyMgU2VuZCBwaW5nPGJyPiZndDsgK3F1 ZXJ5ID0gbXNncGFjay5kdW1wcyh7IElQUk9UT19DT0RFIDogUkVRVUVTVF9UWVBFX1BJTkcgfSk8 YnI+Jmd0OyArcy5zZW5kKG1zZ3BhY2suZHVtcHMobGVuKHF1ZXJ5KSkgKyBxdWVyeSk8YnI+Jmd0 OyArPGJyPiZndDsgKyMgUmVhZCBlcnJvciBwYWNrZXQ8YnI+Jmd0OyAraWYgbm90IGZpeGhlYWRl cjo8YnI+Jmd0OyArIGZpeGhlYWRlciA9IHMucmVjdihJUFJPVE9fRklYSEVBREVSX1NJWkUpPGJy PiZndDsgcHJpbnQgJ2ZpeGhlYWRlcjogJywgbGVuKGZpeGhlYWRlcikgPT0gSVBST1RPX0ZJWEhF QURFUl9TSVpFPGJyPiZndDsgdW5wYWNrZXIuZmVlZChmaXhoZWFkZXIpPGJyPiZndDsgcGFja2V0 X2xlbiA9IHVucGFja2VyLnVucGFjaygpPGJyPiZndDs8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48 L2Jsb2NrcXVvdGU+PC9kaXY+PGRpdj4mbmJzcDs8ZGl2PiZuYnNwOzwvZGl2PjxkaXYgZGF0YS1z aWduYXR1cmUtd2lkZ2V0PSJjb250YWluZXIiPjxkaXYgZGF0YS1zaWduYXR1cmUtd2lkZ2V0PSJj b250ZW50Ij48ZGl2Pi0tPGJyPklseWEgS29zYXJldjwvZGl2PjwvZGl2PjwvZGl2PjxkaXY+Jm5i c3A7PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdj4mbmJzcDs8L2Rpdj48 L0JPRFk+PC9IVE1MPgo= ----ALT--aFeFd7B7BaF221Ff1c03922b680E2a291600434607--