From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id A3A1A6EC22 for ; Tue, 17 Sep 2019 12:24:49 +0000 (UTC) References: <20190822090411.17374-1-stanislav.lisovskiy@intel.com> From: Martin Peres Message-ID: Date: Tue, 17 Sep 2019 15:24:44 +0300 MIME-Version: 1.0 In-Reply-To: <20190822090411.17374-1-stanislav.lisovskiy@intel.com> Content-Language: en-PH Subject: Re: [igt-dev] [PATCH i-g-t v11] igt/tests: kms_plane_stress: Add plane stress test List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Stanislav Lisovskiy , igt-dev@lists.freedesktop.org Cc: ville.syrjala@intel.com List-ID: CgpPbiAyMi8wOC8yMDE5IDEyOjA0LCBTdGFuaXNsYXYgTGlzb3Zza2l5IHdyb3RlOgo+IFRoaXMg dGVzdCBhdHRlbXB0cyB0byB1dGlsaXplIGFsbCBjb25uZWN0ZWQKPiBvdXRwdXRzIGF0IHRoZSBz YW1lIHRpbWUsIHVzaW5nIG1heGltdW0gcG9zc2libGUKPiByZXNvbHV0aW9uIGFuZCBhbW91bnQg b2YgcGxhbmVzLCB0byBjaGVjayB3aGV0aGVyCj4gd2UgYXJlIGhpdGluZyBhbnkga2luZCBvZiBi YW5kd2lkdGgsIHdhdGVybWFyayBvcgo+IG90aGVyIGxpbWl0YXRpb25zLgo+IAo+IHYyOiBBZGRl ZCBjcHUgYW5kIGdwdSBsb2FkIHRocmVhZHMsIHdoaWNoIGNvbnN1bWUKPiAgICAgYWRkaXRpb25h bCBiYW5kd2lkdGguCj4gCj4gdjM6IFJlbW92ZWQgYmluYXJ5IHBpY3R1cmUgZmlsZSwgdXNpbmcg cGF0dGVybiBmYgo+ICAgICBpbnN0ZWFkLgo+IAo+IHY0OiBNb3ZlZCBGQiBjcmVhdGlvbi9yZW1v dmFsIHRvIGJldHRlciBwbGFjZS4KPiAKPiB2NTogRml4ZWQgcmViYXNlIGNvbmZsaWN0IGFuZCBj aGFuZ2VkICJmYi0+dGlsaW5nIgo+ICAgICB0byAiZmItPm1vZGlmaWVyIi4KPiAKPiB2NjogUmVt b3ZlZCB1bm5lY2Vzc2FyeSBuZXcgbWFjcm8gZm9yIGl0ZXJhdGluZyBvbgo+ICAgICBwaXBlcy4g VGFrZW4gaW50byB1c2UgaWd0X2dldHRpbWUgaW5zdGVhZCBvZgo+ICAgICBjbG9ja19nZXR0aW1l Lgo+IAo+IHY3OiBQdXQgZmIgcmVpbml0IGludG8gaWd0X2ZpeHR1cmUgdG8gYXZvaWQgcHJvYmxl bXMuCj4gICAgIE1vdmUgc3RyZXNzIGZ1bmN0aW9uIHVuZGVyIGlndF9zdWJ0ZXN0LiBSZWxlYXNl IHBsYW5lcywKPiAgICAgcmVtb3ZlIHJlZHVuZGFudCBjb21taXQsIGFzc2VydCBpZiBubyBwbGFu ZXMgY2FuIGJlIHVzZWQuCj4gCj4gdjg6IC0gQWRkIGJsaXR0aW5nIGFsc28sIHRvIGhhdmUgbW9y ZSBmdW4KPiAgICAgLSBOb3cgdXNpbmcgc2VwYXJhdGUgZnJhbWVidWZmZXIgcGVyIGVhY2ggcGxh bmUuCj4gICAgIC0gRml4ZWQgbWFnaWMgbnVtYmVyIGZvciBicHAgdmFsdWUobm93IGJhc2VkIG9u IGZvcm1hdCkKPiAgICAgLSBTb21lIG9wdGltaXphdGlvbnMsIGxpa2Ugbm90IGFwcGx5aW5nIHNh bWUgbW9kZSBpZiBpdAo+ICAgICAgIGhhc24ndCBjaGFuZ2UsIGFsc28gZG9uJ3QgZG8gaGlnaGVz dCBtb2RlIHNlYXJjaCBvbgo+ICAgICAgIGVhY2ggaXRlcmF0aW9uLCBqdXN0IGNhbGN1bGF0ZSBv bmNlIGFuZCB1c2UgaXQuCj4gICAgIC0gU29tZSBjb2RlIHJlZmFjdG9yaW5nOiBleHRyYWN0ZWQg c29tZSBsZW5ndGh5IGNvZGUKPiAgICAgICB0byBzZXBhcmF0ZSBmdW5jdGlvbnMuCj4gICAgIC0g Rml4ZWQgd3JvbmcgaW5kZXggZm9yIGN1cnNvciBGQihjdXJzb3IgRkIgaXMgb25lIHBlciBwaXBl KQo+IAo+IHY5Ogo+ICAgICAtIE1vcmUgaGVscGVyIGZ1bmN0aW9ucyhzdGFydC9zdG9wIHRocmVh ZHMsIHRlc3QgaW5pdCkKPiAgICAgLSBOb3cgZG9pbmcgR1BVIHdvcmsgaW4gcHRocmVhZHMgYWxz bwo+ICAgICAtIERvIEdQVSB3b3JrIGluIGEgc2VwYXJhdGUgZnJhbWVidWZmZXIobm90IGRpc3Bs YXllZCkKPiAKPiB2MTA6Cj4gICAgIC0gRml4IGlzc3VlIGluIG1haW4gdGVzdGluZyBjeWNsZSwg Y29kZSByZWZhY3RvcmluZwo+ICAgICAtIFJlYmFzZWQKPiAKPiB2MTE6Cj4gICAgIC0gRml4ZWQg aXNzdWUgd2l0aCBzdXNwZW5kaW5nL3Jlc3VtaW5nIEdQVSB0aHJlYWRzCj4gICAgICAgdG8gZ2V0 IGNyYy4gQWRkZWQgbnVtX3JlY3RhbmdsZXMgdG8gYmUgYWJsZSB0byBjdXN0b21pemUKPiAgICAg ICBudW1iZXIgb2YgZ3BncHVfZmlsbCBjYWxscy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBTdGFuaXNs YXYgTGlzb3Zza2l5IDxzdGFuaXNsYXYubGlzb3Zza2l5QGludGVsLmNvbT4KPiAtLS0KPiAgbGli L2dwdV9jbWRzLmMgICAgICAgICAgIHwgICA0ICstCj4gIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMg ICB8ICAgMSArCj4gIHRlc3RzL2ttc19wbGFuZV9zdHJlc3MuYyB8IDkwMiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgdGVzdHMvbWVzb24uYnVpbGQgICAgICAgIHwg ICAxICsKPiAgNCBmaWxlcyBjaGFuZ2VkLCA5MDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo LSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19wbGFuZV9zdHJlc3MuYwo+IAo+IGRp ZmYgLS1naXQgYS9saWIvZ3B1X2NtZHMuYyBiL2xpYi9ncHVfY21kcy5jCj4gaW5kZXggOGQyNzBl ZTguLjQ4ZGRmYTBjIDEwMDY0NAo+IC0tLSBhL2xpYi9ncHVfY21kcy5jCj4gKysrIGIvbGliL2dw dV9jbWRzLmMKPiBAQCAtNjgxLDEyICs2ODEsMTIgQEAgZ2VuOF9lbWl0X2dwZ3B1X3dhbGsoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKPiAgCQkgIDApOyAvKiB3aWR0aDoxICovCj4g IAo+ICAJLyogdGhyZWFkIGdyb3VwIFggKi8KPiAtCU9VVF9CQVRDSCgwKTsKPiArCU9VVF9CQVRD SCh4KTsKPiAgCU9VVF9CQVRDSCgwKTsKPiAgCU9VVF9CQVRDSCh4X2RpbSk7Cj4gIAo+ICAJLyog dGhyZWFkIGdyb3VwIFkgKi8KPiAtCU9VVF9CQVRDSCgwKTsKPiArCU9VVF9CQVRDSCh5KTsKPiAg CU9VVF9CQVRDSCgwKTsKPiAgCU9VVF9CQVRDSCh5X2RpbSk7CgpJSVJDLCB0aGlzIHdhcyB0byBm aXggYSBidWcsIGFuZCB0aHVzIHNob3VsZCBiZSBpbiBpdHMgb3duIGNvbW1pdC4KCj4gIAo+IGRp ZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNl cwo+IGluZGV4IGMwMmU0ZDk0Li5hNzM3MDc3MyAxMDA2NDQKPiAtLS0gYS90ZXN0cy9NYWtlZmls ZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IEBAIC02NSw2ICs2NSw3 IEBAIFRFU1RTX3Byb2dzID0gXAo+ICAJa21zX3BsYW5lX211bHRpcGxlIFwKPiAgCWttc19wbGFu ZV9zY2FsaW5nIFwKPiAgCWttc19wcmltZSBcCj4gKwlrbXNfcGxhbmVfc3RyZXNzIFwKPiAgCWtt c19wcm9wX2Jsb2IgXAo+ICAJa21zX3Byb3BlcnRpZXMgXAo+ICAJa21zX3BzciBcCj4gZGlmZiAt LWdpdCBhL3Rlc3RzL2ttc19wbGFuZV9zdHJlc3MuYyBiL3Rlc3RzL2ttc19wbGFuZV9zdHJlc3Mu Ywo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAuLjg3MzE4MDcwCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL3Rlc3RzL2ttc19wbGFuZV9zdHJlc3MuYwo+IEBAIC0wLDAgKzEs OTAyIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4g KyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S Cj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H Uwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImlndC5oIgo+ ICsjaW5jbHVkZSAiaWd0X3JhbmQuaCIKPiArI2luY2x1ZGUgImdwZ3B1X2ZpbGwuaCIKPiArI2lu Y2x1ZGUgImRybXRlc3QuaCIKPiArI2luY2x1ZGUgInN3X3N5bmMuaCIKPiArI2luY2x1ZGUgPGVy cm5vLmg+Cj4gKyNpbmNsdWRlIDxwdGhyZWFkLmg+Cj4gKyNpbmNsdWRlIDxzdGRib29sLmg+Cj4g KyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gKyNpbmNsdWRlIDx0 aW1lLmg+Cj4gKyNpbmNsdWRlIDxwb2xsLmg+Cj4gKyNpbmNsdWRlIDxwdGhyZWFkLmg+Cj4gKyNp bmNsdWRlIDxzZW1hcGhvcmUuaD4KPiArCj4gKyNpZm5kZWYgRFJNX0NBUF9DVVJTT1JfV0lEVEgK PiArI2RlZmluZSBEUk1fQ0FQX0NVUlNPUl9XSURUSCAweDgKPiArI2VuZGlmCj4gKyNpZm5kZWYg RFJNX0NBUF9DVVJTT1JfSEVJR0hUCj4gKyNkZWZpbmUgRFJNX0NBUF9DVVJTT1JfSEVJR0hUIDB4 OQo+ICsjZW5kaWYKPiArCj4gKwo+ICtkcm1Nb2RlTW9kZUluZm8gdWhkX21vZGVfNjBoeiA9IHsK PiArCS5uYW1lID0gIjM4NDB4MjE2MEA2MGh6IiwKPiArCS52cmVmcmVzaCA9IDYwLAo+ICsJLmNs b2NrID0gMTQyNjY3KjIsCj4gKwkuaGRpc3BsYXkgPSAzODQwLAo+ICsJLmhzeW5jX3N0YXJ0ID0g MTkzNioyLAo+ICsJLmhzeW5jX2VuZCA9IDE5NTIqMiwKPiArCS5odG90YWwgPSAyMTA0KjIsCj4g KwkudmRpc3BsYXkgPSAyMTYwLAo+ICsJLnZzeW5jX3N0YXJ0ID0gMTA4MyoyLAo+ICsJLnZzeW5j X2VuZCA9IDEwOTcqMiwKPiArCS52dG90YWwgPSAxMTI4KjIsCj4gKwkuZmxhZ3MgPSAweGEsCj4g K307Cj4gKwo+ICsjZGVmaW5lIE5fQkxJVFMgMTAKPiArCj4gKyNkZWZpbmUgTl9GT1JNQVRTIDMK PiArc3RhdGljIGNvbnN0IHVpbnQzMl90IGZvcm1hdHNbTl9GT1JNQVRTXSA9IHsKPiArCURSTV9G T1JNQVRfWFJHQjg4ODgsCj4gKwlEUk1fRk9STUFUX1JHQjU2NSwKPiArCURSTV9GT1JNQVRfWFJH QjIxMDEwMTAsCj4gK307Cj4gKwo+ICsjZGVmaW5lIE5fVElMSU5HX01FVEhPRFMgMwo+ICtzdGF0 aWMgY29uc3QgdWludDY0X3QgdGlsaW5nc1tOX1RJTElOR19NRVRIT0RTXSA9IHsKPiArCURSTV9G T1JNQVRfTU9EX0xJTkVBUiwKPiArCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAo+ICsJSTkxNV9G T1JNQVRfTU9EX1lfVElMRUQsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0 X3N0cihpbnQgZm9ybWF0X2luZGV4KQo+ICt7Cj4gKwlzd2l0Y2ggKGZvcm1hdHNbZm9ybWF0X2lu ZGV4XSkgewo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiArCQlyZXR1cm4gInJnYjU2NSI7 Cj4gKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gKwkJcmV0dXJuICJ4cmdiODg4OCI7Cj4g KwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6Cj4gKwkJcmV0dXJuICJ4cmdiMjEwMTAxMCI7 Cj4gKwlkZWZhdWx0Ogo+ICsJCWlndF9hc3NlcnQoZmFsc2UpOwo+ICsJfQo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3QgY2hhciAqdGlsaW5nX3N0cihpbnQgdGlsaW5nX2luZGV4KQo+ICt7Cj4gKwlz d2l0Y2ggKHRpbGluZ3NbdGlsaW5nX2luZGV4XSkgewo+ICsJY2FzZSBEUk1fRk9STUFUX01PRF9M SU5FQVI6Cj4gKwkJcmV0dXJuICJ1bnRpbGVkIjsKPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hf VElMRUQ6Cj4gKwkJcmV0dXJuICJ4dGlsZWQiOwo+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRDoKPiArCQlyZXR1cm4gInl0aWxlZCI7Cj4gKwlkZWZhdWx0Ogo+ICsJCWlndF9hc3NlcnQo ZmFsc2UpOwo+ICsJfQo+ICt9Cj4gKwo+ICsKPiArI2RlZmluZSBNQVhfQ09SRVMgOAo+ICsjZGVm aW5lIE1BWF9QTEFORVMgMTYKPiArCj4gK3N0cnVjdCBkYXRhOwo+ICsKPiArc3RydWN0IHRocmVh ZF9jb250ZXh0IHsKPiArCXN0cnVjdCBkYXRhICpkYXRhOwo+ICsJaW50IGlkOwo+ICsJdm9pZCAq YnVmMTsKPiArCXZvaWQgKmJ1ZjI7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgcmVjdCB7Cj4gKwlpbnQg eDsKPiArCWludCB5Owo+ICsJaW50IHc7Cj4gKwlpbnQgaDsKPiArfTsKPiArCj4gK3N0cnVjdCBn cHVfY29udGV4dCB7Cj4gKwlzdHJ1Y3QgZGF0YSAqZGF0YTsKPiArCWludCBwaXBlOwo+ICsJaW50 IGNvbG9yOwo+ICsJaW50IG51bV9yZWN0YW5nbGVzOwo+ICsJc3RydWN0IGlndF9mYiAqZmJfcHRy Owo+ICsJc3RydWN0IHJlY3QgYmx0X3JlY3Q7Cj4gKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoOwo+ICt9Owo+ICsKPiArZW51bSB7Cj4gKwlSVU5OSU5HLAo+ICsJU1RPUFBFRCwKPiAr CVBBVVNFRCwKPiArfSB0aHJlYWRfc3RhdGU7Cj4gKwo+ICtzdHJ1Y3QgZGF0YSB7Cj4gKwlpbnQg ZHJtX2ZkOwo+ICsJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5Owo+ICsJaW50IG51bV9wbGFuZXNbSUdU X01BWF9QSVBFU107Cj4gKwl1aW50MzJfdCBmb3JtYXQ7Cj4gKwl1aW50NjRfdCBtb2RpZmllcjsK PiArCXVpbnQzMl90IGRldmlkOwo+ICsJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOwo+ICsJZHJt TW9kZU1vZGVJbmZvICpsYXN0X21vZGVbSUdUX01BWF9QSVBFU107Cj4gKwlzdHJ1Y3QgaWd0X2Zi IGZiW0lHVF9NQVhfUElQRVMgKiBNQVhfUExBTkVTXTsKPiArCXN0cnVjdCBpZ3RfZmIgY3Vyc29y X2ZiW0lHVF9NQVhfUElQRVNdOwo+ICsJcHRocmVhZF90IGNwdV90aHJlYWRbTUFYX0NPUkVTXTsK PiArCXB0aHJlYWRfdCBncHVfdGhyZWFkW0lHVF9NQVhfUElQRVNdOwo+ICsJYm9vbCBjcHVfdGhy ZWFkX3N0b3BbTUFYX0NPUkVTXTsKPiArCWludCBncHVfdGhyZWFkX3N0YXRlW0lHVF9NQVhfUElQ RVNdOwo+ICsJc2VtX3QgZ3B1X3RocmVhZF9wYXVzZV9hY2tbSUdUX01BWF9QSVBFU107Cj4gKwlz dHJ1Y3QgdGhyZWFkX2NvbnRleHQgY3B1X2NvbnRleHRbTUFYX0NPUkVTXTsKPiArCXN0cnVjdCBn cHVfY29udGV4dCBncHVfY29udGV4dFtJR1RfTUFYX1BJUEVTXTsKPiArCWRybU1vZGVNb2RlSW5m byAqaGlnaGVzdF9tb2RlW0lHVF9NQVhfUElQRVNdOwo+ICsJZHJtTW9kZUNvbm5lY3RvclB0ciBj b25uZWN0b3JzW0lHVF9NQVhfUElQRVNdOwo+ICsJZHJtTW9kZVJlcyAqbW9kZV9yZXNvdXJjZXM7 Cj4gKwlpbnQgbnVtYmVyX29mX2NvcmVzOwo+ICt9Owo+ICsKPiArCj4gK3N0YXRpYyB2b2lkIHBh dXNlX2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKTsKPiArCj4gK3N0YXRpYyB2b2lkIHJl c3VtZV9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSk7Cj4gKwo+ICtzdGF0aWMgdm9pZCBz dG9wX2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKTsKPiArCj4gK3N0YXRpYyB2b2lkIHN0 YXJ0X2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKTsKPiArCj4gK3N0cnVjdCBiYXNlX2Ny YyB7Cj4gKwlib29sIHNldDsKPiArCWlndF9jcmNfdCBjcmM7Cj4gK307Cj4gKwo+ICtpZ3RfcGlw ZV9jcmNfdCAqcGlwZV9jcmM7Cj4gKwo+ICsjZGVmaW5lIEJVRl9TSVpFIDEyOCoxMDI0KjEwMjQK PiArCj4gK3N0YXRpYyB2b2lkICpjcHVfbG9hZCh2b2lkICpkKQo+ICt7Cj4gKwljaGFyICpidWYx LCAqYnVmMjsKPiArCXN0cnVjdCB0aHJlYWRfY29udGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgdGhy ZWFkX2NvbnRleHQgKilkOwo+ICsJc3RydWN0IGRhdGEgKmRhdGEgPSBjb250ZXh0LT5kYXRhOwo+ ICsKPiArCWJ1ZjEgPSBjb250ZXh0LT5idWYxOwo+ICsJYnVmMiA9IGNvbnRleHQtPmJ1ZjI7Cj4g Kwo+ICsJZGF0YS0+Y3B1X3RocmVhZF9zdG9wW2NvbnRleHQtPmlkXSA9IGZhbHNlOwo+ICsKPiAr CWlndF9pbmZvKCJDUFUgdGhyZWFkIGNwdSBpZCAlZCBzdGFydFxuIiwgY29udGV4dC0+aWQpOwo+ ICsKPiArCS8qIEp1c3QgdG8gbWFrZSBDUFUgYnVzeS4uLiAqLwo+ICsJd2hpbGUoIWRhdGEtPmNw dV90aHJlYWRfc3RvcFtjb250ZXh0LT5pZF0pIHsKPiArCQltZW1jcHkoYnVmMSwgYnVmMiwgQlVG X1NJWkUpOwo+ICsJCW1lbWNweShidWYyLCBidWYxLCBCVUZfU0laRSk7Cj4gKwl9Cj4gKwo+ICsJ aWd0X2luZm8oIkNQVSB0aHJlYWQgY3B1IGlkICVkIHN0b3BcbiIsIGNvbnRleHQtPmlkKTsKPiAr Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyB2b2lkIHNjcmF0Y2hfYnVm X2luaXQoc3RydWN0IGlndF9idWYgKmJ1ZiwKPiArCQkJZHJtX2ludGVsX2JvICpibywgaW50IHdp ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgdGlsaW5nLCBpbnQgYnBwKQo+ICt7Cj4g KwlidWYtPmJvID0gYm87Cj4gKwlidWYtPnN0cmlkZSA9IHN0cmlkZTsKPiArCWJ1Zi0+dGlsaW5n ID0gdGlsaW5nOwo+ICsJYnVmLT5zaXplID0gd2lkdGggKiBoZWlnaHQgKiBicHAgLyA4Owo+ICsJ YnVmLT5icHAgPSBicHA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkICpncHVfbG9hZCh2b2lkICpw dHIpCj4gK3sKPiArCXN0cnVjdCBncHVfY29udGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgZ3B1X2Nv bnRleHQgKilwdHI7Cj4gKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoID0gTlVMTDsK PiArCXN0cnVjdCBpZ3RfYnVmIGRzdDsKPiArCXN0cnVjdCBkYXRhICpkYXRhID0gY29udGV4dC0+ ZGF0YTsKPiArCWludCBwaXBlID0gY29udGV4dC0+cGlwZTsKPiArCWlndF9maWxsZnVuY190IGdw Z3B1X2ZpbGwgPSBOVUxMOwo+ICsJZHJtX2ludGVsX2JvICpibyA9IE5VTEw7Cj4gKwlzdHJ1Y3Qg aWd0X2ZiIGZiLCAqZmJfcHRyID0gTlVMTCwgKmxhc3RfZmJfcHRyID0gTlVMTDsKPiArCWludCBy ZWN0X2Rpdmlzb3I7Cj4gKwlpbnQgcmVjdF93aWR0aDsKPiArCWludCByZWN0X2hlaWdodDsKPiAr CWludCBmcmFtZV93aWR0aDsKPiArCWludCBmcmFtZV9oZWlnaHQ7Cj4gKwlpbnQgYnl0ZXNfcGVy X3BpeGVsOwo+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+ICsJaW50IGZyYW1lID0gMDsKPiAr CWludCB4LCB5Owo+ICsJaW50IGxhc3Rfc3RhdGUgPSAtMTsKPiArCWludCByZWN0Owo+ICsKPiAr CWdwZ3B1X2ZpbGwgPSBpZ3RfZ2V0X2dwZ3B1X2ZpbGxmdW5jKGRhdGEtPmRldmlkKTsKPiArCj4g KwlpZ3RfcmVxdWlyZV9mKGdwZ3B1X2ZpbGwsCj4gKwkgICAgICAibm8gZ3BncHUtZmlsbCBmdW5j dGlvblxuIik7Cj4gKwo+ICsJYmF0Y2ggPSBjb250ZXh0LT5iYXRjaDsKPiArCWlndF9hc3NlcnQo YmF0Y2gpOwo+ICsKPiArCW1vZGUgPSBkYXRhLT5oaWdoZXN0X21vZGVbcGlwZV07Cj4gKwlpZ3Rf YXNzZXJ0KG1vZGUpOwo+ICsKPiArCWlndF9jcmVhdGVfY29sb3JfcGF0dGVybl9mYihkYXRhLT5k cm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPiArCQkgICAgZGF0YS0+Zm9y bWF0LAo+ICsJCSAgICBkYXRhLT5tb2RpZmllciwKPiArCQkgICAgMC4wLCAxLjAsIDAuMCwgJmZi KTsKPiArCj4gKwlpZ3RfaW5mbygiR1BVIHRocmVhZCBwaXBlICVkIHN0YXJ0XG4iLCBwaXBlKTsK PiArCXdoaWxlIChkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW3BpcGVdICE9IFNUT1BQRUQpIHsKPiAr CQlpZiAobGFzdF9zdGF0ZSAhPSBkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW3BpcGVdKSB7Cj4gKwkJ CWxhc3Rfc3RhdGUgPSBkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW3BpcGVdOwo+ICsJCQlzZW1fcG9z dCgmZGF0YS0+Z3B1X3RocmVhZF9wYXVzZV9hY2tbcGlwZV0pOwo+ICsJCX0KPiArCQlpZiAoZGF0 YS0+Z3B1X3RocmVhZF9zdGF0ZVtwaXBlXSA9PSBQQVVTRUQpCj4gKwkJCWNvbnRpbnVlOwo+ICsK PiArCQlpZiAoIWNvbnRleHQtPmZiX3B0cikgewo+ICsJCQlmYl9wdHIgPSAmZmI7Cj4gKwkJfQo+ ICsJCWVsc2Ugewo+ICsJCQlmYl9wdHIgPSBjb250ZXh0LT5mYl9wdHI7Cj4gKwkJfQo+ICsKPiAr CQlpZiAobGFzdF9mYl9wdHIgIT0gZmJfcHRyKSB7Cj4gKwkJCWlndF9pbmZvKCJHUFUgdGhyZWFk IHBpcGUgJWQ6IENoYW5nZSBmcm9tIEZCICV4IHRvIEZCICV4XG4iLCBwaXBlLCBsYXN0X2ZiX3B0 ciwgZmJfcHRyKTsKPiArCQkJZnJhbWVfd2lkdGggPSBmYl9wdHItPndpZHRoOwo+ICsJCQlmcmFt ZV9oZWlnaHQgPSBmYl9wdHItPmhlaWdodDsKPiArCQkJYnl0ZXNfcGVyX3BpeGVsID0gZmJfcHRy LT5wbGFuZV9icHBbMF0gLyA4Owo+ICsJCQlibyA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRh dGEtPmJ1Zm1nciwgZGF0YS0+ZHJtX2ZkLCAiIiwgZmJfcHRyLT5nZW1faGFuZGxlKTsKPiArCQkJ aWd0X2Fzc2VydChibyk7Cj4gKwo+ICsJCQlzY3JhdGNoX2J1Zl9pbml0KCZkc3QsIGJvLCBmcmFt ZV93aWR0aCwgZnJhbWVfaGVpZ2h0LCBmYl9wdHItPnN0cmlkZXNbMF0sIGZiX3B0ci0+bW9kaWZp ZXIsIGZiX3B0ci0+cGxhbmVfYnBwWzBdKTsKPiArCQl9Cj4gKwkJbGFzdF9mYl9wdHIgPSBmYl9w dHI7Cj4gKwo+ICsJCS8qIEZpbGwgdGhlIGZyYW1lYnVmZmVyIHVzaW5nIHNoYWRlciAqLwo+ICsJ CXggPSAwOwo+ICsJCXkgPSBmcmFtZV9oZWlnaHQgLyAyOwo+ICsKPiArCQlncGdwdV9maWxsKGJh dGNoLAo+ICsJCSAgICZkc3QsIHgsIHksIChmcmFtZV93aWR0aCAqIGJ5dGVzX3Blcl9waXhlbCks IGZyYW1lX2hlaWdodCwKPiArCQkgICBjb250ZXh0LT5jb2xvcik7Cj4gKwo+ICsJCXJlY3QgPSAw Owo+ICsKPiArCQl3aGlsZSAocmVjdCA8IGNvbnRleHQtPm51bV9yZWN0YW5nbGVzKSB7Cj4gKwkJ CS8qIGRpdmlkZSBhdCBsZWFzdCBieSAyIGFuZCB1cCB0byA4ICovCj4gKwkJCXJlY3RfZGl2aXNv ciA9IDEgPDwgKGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tX3Vuc2FmZV9tYXgoMykgKyAxKTsK PiArCj4gKwkJCXJlY3Rfd2lkdGggPSBmcmFtZV93aWR0aCAvIHJlY3RfZGl2aXNvcjsKPiArCQkJ cmVjdF9oZWlnaHQgPSBmcmFtZV9oZWlnaHQgLyByZWN0X2Rpdmlzb3I7Cj4gKwo+ICsJCQljb250 ZXh0LT5ibHRfcmVjdC54ID0geCArIGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tX3Vuc2FmZV9t YXgoZnJhbWVfd2lkdGggLSByZWN0X3dpZHRoKTsKPiArCQkJY29udGV4dC0+Ymx0X3JlY3QueSA9 IHkgKyBoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNhZmVfbWF4KGZyYW1lX2hlaWdodC8y IC0gcmVjdF9oZWlnaHQpOwo+ICsKPiArCQkJLyogRmlsbCByYW5kb21seSBzaXplZCBhbmQgcG9z aXRpb25lZCByZWN0YW5nbGVzICovCj4gKwkJCWdwZ3B1X2ZpbGwoYmF0Y2gsCj4gKwkJCSAgICZk c3QsIGNvbnRleHQtPmJsdF9yZWN0LngsIGNvbnRleHQtPmJsdF9yZWN0LnksICgoY29udGV4dC0+ Ymx0X3JlY3QueCArIHJlY3Rfd2lkdGgpICogYnl0ZXNfcGVyX3BpeGVsKSwKPiArCQkJICAgY29u dGV4dC0+Ymx0X3JlY3QueSArIHJlY3RfaGVpZ2h0LAo+ICsJCQkgICBjb250ZXh0LT5jb2xvciAr IDB4ODApOwo+ICsKPiArCQkJY29udGV4dC0+Y29sb3IgKz0gNDsKPiArCj4gKwkJCSsrcmVjdDsK PiArCQl9Cj4gKwo+ICsJCWZyYW1lKys7Cj4gKwl9Cj4gKwo+ICsJc2VtX3Bvc3QoJmRhdGEtPmdw dV90aHJlYWRfcGF1c2VfYWNrW3BpcGVdKTsKPiArCj4gKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVu Y2UoYm8pOwo+ICsKPiArCWlndF9yZW1vdmVfZmIoZGF0YS0+ZGlzcGxheS5kcm1fZmQsICZmYik7 Cj4gKwo+ICsJaWd0X2luZm8oIkdQVSB0aHJlYWQgcGlwZSAlZCBzdG9wLiBGcmFtZXMgcmVuZGVy ZWQ6ICVkXG4iLCBwaXBlLCBmcmFtZSk7Cj4gKwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgdWludDMyX3QgcGlwZV9zZWxlY3QoZW51bSBwaXBlIHBpcGUpCj4gK3sK PiArCWlmIChwaXBlID4gMSkKPiArCQlyZXR1cm4gcGlwZSA8PCBEUk1fVkJMQU5LX0hJR0hfQ1JU Q19TSElGVDsKPiArCWVsc2UgaWYgKHBpcGUgPiAwKQo+ICsJCXJldHVybiBEUk1fVkJMQU5LX1NF Q09OREFSWTsKPiArCWVsc2UKPiArCQlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHVuc2ln bmVkIGdldF92YmxhbmsoaW50IGZkLCBlbnVtIHBpcGUgcGlwZSwgdW5zaWduZWQgZmxhZ3MpCj4g K3sKPiArCXVuaW9uIGRybV93YWl0X3ZibGFuayB2Ymw7Cj4gKwo+ICsJbWVtc2V0KCZ2YmwsIDAs IHNpemVvZih2YmwpKTsKPiArCXZibC5yZXF1ZXN0LnR5cGUgPSBEUk1fVkJMQU5LX1JFTEFUSVZF IHwgcGlwZV9zZWxlY3QocGlwZSkgfCBmbGFnczsKPiArCWlmIChkcm1Jb2N0bChmZCwgRFJNX0lP Q1RMX1dBSVRfVkJMQU5LLCAmdmJsKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXR1cm4gdmJs LnJlcGx5LnNlcXVlbmNlOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIGludCBwbGFuZV9zdHJlc3Mo c3RydWN0IGRhdGEgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBlbnVtIHBpcGUgcGlwZSwg ZHJtTW9kZU1vZGVJbmZvICptb2RlKQoKTG9va3MgbGlrZSBwaXBlX3N0cmVzcyB0byBtZSwgZG9u J3QgeW91IHRoaW5rPwoKPiArewo+ICsJaWd0X3BsYW5lX3QgKnBsYW5lOwo+ICsJaW50IGk7Cj4g KwlpbnQgcmV0Owo+ICsJaW50IGxhc3RfcGxhbmU7Cj4gKwlib29sIG5ld19tb2RlID0gZmFsc2U7 Cj4gKwl1aW50NjRfdCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQ7Cj4gKwo+ICsJZG9fb3Jf ZGllKGRybUdldENhcChkYXRhLT5kcm1fZmQsIERSTV9DQVBfQ1VSU09SX1dJRFRILCAmY3Vyc29y X3dpZHRoKSk7Cj4gKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwgRFJNX0NBUF9D VVJTT1JfSEVJR0hULCAmY3Vyc29yX2hlaWdodCkpOwo+ICsKPiArCWlmIChkYXRhLT5sYXN0X21v ZGVbcGlwZV0gIT0gbW9kZSkgewo+ICsJCWlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShvdXRwdXQs IG1vZGUpOwo+ICsJCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKPiArCj4gKwkJ cmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXksCj4gKwkJ CQlEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVT RVQsIE5VTEwpOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJaWd0X3dhcm4oIkNvdWxkIG5vdCBjb21t aXQgbW9kZTogXG4iKTsKPiArCQkJa21zdGVzdF9kdW1wX21vZGUobW9kZSk7Cj4gKwkJCXJldHVy biByZXQ7Cj4gKwkJfQo+ICsKPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5 LCBDT01NSVRfQVRPTUlDKTsKPiArCQlkYXRhLT5sYXN0X21vZGVbcGlwZV0gPSBtb2RlOwo+ICsJ CW5ld19tb2RlID0gdHJ1ZTsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogTG9va3MgbGlrZSB3ZSBj YW4ndCBoYXZlIHBsYW5lcyBvbiB0aGF0IHBpcGUgYXQgYWxsCj4gKwkgKi8KPiArCWlmICghZGF0 YS0+bnVtX3BsYW5lc1twaXBlXSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwltb2RlID0gaWd0X291 dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+ICsKPiArCWlmIChuZXdfbW9kZSkgewo+ICsJCWkgPSAw Owo+ICsJCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoJmRhdGEtPmRpc3BsYXksIHBpcGUsIHBsYW5l KSB7Cj4gKwkJCWludCBwbGFuZV93aWR0aCwgcGxhbmVfaGVpZ2h0Owo+ICsJCQlpZiAocGxhbmUt PnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKSB7Cj4gKwkJCQlpZ3RfcGxhbmVfc2V0X2Zi KHBsYW5lLCAmZGF0YS0+Y3Vyc29yX2ZiW3BpcGVdKTsKPiArCQkJCWlndF9mYl9zZXRfc2l6ZSgm ZGF0YS0+Y3Vyc29yX2ZiW3BpcGVdLCBwbGFuZSwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0 KTsKPiArCQkJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgY3Vyc29yX3dpZHRoLCBjdXJzb3Jf aGVpZ2h0KTsKPiArCQkJCXBsYW5lX3dpZHRoID0gY3Vyc29yX3dpZHRoOwo+ICsJCQkJcGxhbmVf aGVpZ2h0ID0gY3Vyc29yX2hlaWdodDsKPiArCQkJfSBlbHNlIHsKPiArCQkJCWlndF9wbGFuZV9z ZXRfZmIocGxhbmUsICZkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyArIGldKTsKPiArCQkJCWln dF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDAsIDApOwo+ICsJCQkJaWd0X2ZiX3NldF9zaXpl KCZkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyArIGldLCBwbGFuZSwgbW9kZS0+aGRpc3BsYXks IG1vZGUtPnZkaXNwbGF5KTsKPiArCQkJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgbW9kZS0+ aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKPiArCQkJCXBsYW5lX3dpZHRoID0gbW9kZS0+aGRp c3BsYXk7Cj4gKwkJCQlwbGFuZV9oZWlnaHQgPSBtb2RlLT52ZGlzcGxheTsKPiArCQkJfQo+ICsK PiArCQkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXks IERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgfCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNF VCwgTlVMTCk7Cj4gKwkJCXdoaWxlIChyZXQpIHsKPiArCQkJCWlmIChwbGFuZV93aWR0aCA8PSBj dXJzb3Jfd2lkdGggfHwgcGxhbmVfaGVpZ2h0IDw9IGN1cnNvcl9oZWlnaHQpCj4gKwkJCQkJYnJl YWs7Cj4gKwkJCQlwbGFuZV93aWR0aCAvPSAyOwo+ICsJCQkJcGxhbmVfaGVpZ2h0IC89IDI7Cj4g KwkJCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIHBsYW5lX3dpZHRoLCBwbGFuZV9oZWlnaHQp Owo+ICsJCQkJaWd0X2luZm8oIlJlZHVjZWQgcGxhbmUgJWQgc2l6ZSB0byAlZHglZFxuIiwgcGxh bmUtPmluZGV4LCBwbGFuZV93aWR0aCwgcGxhbmVfaGVpZ2h0KTsKPiArCQkJCXJldCA9IGlndF9k aXNwbGF5X3RyeV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNf VEVTVF9PTkxZIHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOwo+ICsJCQl9 Cj4gKwkJCWlmIChyZXQpIHsKPiArCQkJCWlndF9pbmZvKCJQbGFuZSAlZCBwaXBlICVkIHRyeSBj b21taXQgZmFpbGVkLCBleGl0aW5nXG4iLCBpLCBwaXBlKTsKPiArCQkJCWRhdGEtPm51bV9wbGFu ZXNbcGlwZV0gPSBpOwo+ICsJCQkJaWd0X2luZm8oIk1heCBudW0gcGxhbmVzIGZvciBwaXBlICVk IHNldCB0byAlZFxuIiwgcGlwZSwgaSk7Cj4gKwkJCQkvKgo+ICsJCQkJICogV2UgaGF2ZSBub3cg ZGV0ZXJtaW5lZCBtYXggYW1vdW50IG9mIGZ1bGwgc2l6ZWQgcGxhbmVzLCB3ZSB3aWxsIGp1c3QK PiArCQkJCSAqIGtlZXAgaXQgaW4gbWluZCBhbmQgYmUgc21hcnRlciBuZXh0IHRpbWUuIEFsc28g bGV0cyByZW1vdmUgdW5uZWVkZWQgZmJzLgo+ICsJCQkJICogRG9uJ3QgZGVzdHJveSBjdXJzb3Jf ZmIgYXMgd2lsbCB0YWtlIGNhcmUgYWJvdXQgaXQgYXQgdGhlIGVuZC4KPiArCQkJCSAqLwo+ICsJ CQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7Cj4gKwkJCQl3aGlsZSAoaSA8IE1BWF9Q TEFORVMpIHsKPiArCQkJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0 YS0+ZmJbcGlwZSAqIE1BWF9QTEFORVMgKyBpXSk7Cj4gKwkJCQkJZGF0YS0+ZmJbcGlwZSAqIE1B WF9QTEFORVMgKyBpXS5mYl9pZCA9IDA7Cj4gKwkJCQkJaSsrOwo+ICsJCQkJfQo+ICsJCQkJaSA9 IGRhdGEtPm51bV9wbGFuZXNbcGlwZV07Cj4gKwkJCX0KPiArCQkJaWYgKCsraSA+PSBkYXRhLT5u dW1fcGxhbmVzW3BpcGVdKQo+ICsJCQkJYnJlYWs7Cj4gKwkJfQo+ICsJCWlndF9kaXNwbGF5X2Nv bW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ICsJfQo+ICsKPiArCWxhc3Rf cGxhbmUgPSBkYXRhLT5udW1fcGxhbmVzW3BpcGVdIC0gMTsKPiArCWlmIChsYXN0X3BsYW5lID49 IDcpCj4gKwkJbGFzdF9wbGFuZSA9IDY7Cj4gKwo+ICsJaWYgKGRhdGEtPmdwdV9jb250ZXh0W3Bp cGVdLmZiX3B0ciAhPSAmZGF0YS0+ZmJbcGlwZSAqIE1BWF9QTEFORVMgKyBsYXN0X3BsYW5lXSkg ewo+ICsJCWRhdGEtPmdwdV9jb250ZXh0W3BpcGVdLmZiX3B0ciA9ICZkYXRhLT5mYltwaXBlICog TUFYX1BMQU5FUyArIGxhc3RfcGxhbmVdOwo+ICsJCWlndF9pbmZvKCJQbGFuZSBzdHJlc3MgZm9y IHBpcGUgJWQ6IFNldCBjb250ZXh0IGZiIHB0ciAleFxuIiwgcGlwZSwgZGF0YS0+Z3B1X2NvbnRl eHRbcGlwZV0uZmJfcHRyKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArCj4g K3N0YXRpYyBkcm1Nb2RlTW9kZUluZm8gKiBmaW5kX2hpZ2hlc3RfbW9kZShkcm1Nb2RlQ29ubmVj dG9yICpjb25uZWN0b3IpCj4gK3sKPiArCWRybU1vZGVNb2RlSW5mbyAqaGlnaGVzdF9tb2RlID0g TlVMTDsKPiArCWludCBqOwo+ICsKPiArCWZvciAoaiA9IDA7IGogPCBjb25uZWN0b3ItPmNvdW50 X21vZGVzOyBqKyspIHsKPiArCQlpZiAoIWhpZ2hlc3RfbW9kZSkgewo+ICsJCQloaWdoZXN0X21v ZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1tqXTsKPiArCQl9Cj4gKwkJZWxzZSBpZiAoY29ubmVjdG9y LT5tb2Rlc1tqXS52ZGlzcGxheSAmJiBjb25uZWN0b3ItPm1vZGVzW2pdLmhkaXNwbGF5KSB7Cj4g KwkJCWlmIChoaWdoZXN0X21vZGUtPmhkaXNwbGF5IDwgY29ubmVjdG9yLT5tb2Rlc1tqXS5oZGlz cGxheSkKPiArCQkJCWhpZ2hlc3RfbW9kZSA9ICZjb25uZWN0b3ItPm1vZGVzW2pdOwo+ICsJCQl9 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGhpZ2hlc3RfbW9kZTsKPiArfQo+ICsKPiArdHlwZWRlZiBk cm1Nb2RlQ29ubmVjdG9yICogZHJtTW9kZUNvbm5lY3RvclB0cjsKPiArCj4gK3N0YXRpYyB2b2lk IGZpbGxfY29ubmVjdG9yX3RvX3BpcGVfYXJyYXkoc3RydWN0IGRhdGEgKmRhdGEsIGRybU1vZGVS ZXMgKm1vZGVfcmVzb3VyY2VzLCBkcm1Nb2RlQ29ubmVjdG9yUHRyICpjb25uZWN0b3JzKQo+ICt7 Cj4gKwlpbnQgcGlwZSA9IDAsIGNydGNfaWQ7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiAr CWludCBpOwo+ICsKPiArCW1lbXNldChjb25uZWN0b3JzLCAwLCBzaXplb2YoZHJtTW9kZUNvbm5l Y3RvclB0cikgKiBJR1RfTUFYX1BJUEVTKTsKPiArCj4gKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0 cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsKPiArCQljcnRjX2lkID0gMDsKPiArCQlmb3Ig KGkgPSAwOyBpIDwgbW9kZV9yZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgewo+ICsJ CQlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7Cj4gKwo+ICsJCQljb25uZWN0b3IgPSBkcm1N b2RlR2V0Q29ubmVjdG9yQ3VycmVudChkYXRhLT5kcm1fZmQsCj4gKwkJCQkgICAgICAgbW9kZV9y ZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0pOwo+ICsKPiArCQkJaWYgKCFjb25uZWN0b3IpIHsKPiAr CQkJCWlndF93YXJuKCJjb3VsZCBub3QgZ2V0IGNvbm5lY3RvciAlaTogJXNcbiIsCj4gKwkJCQkJ bW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0sIHN0cmVycm9yKGVycm5vKSk7Cj4gKwkJCQlj b250aW51ZTsKPiArCQkJfQo+ICsKPiArCQkJaWYgKGNvbm5lY3Rvci0+Y29ubmVjdGlvbiA9PSBE Uk1fTU9ERV9DT05ORUNURUQpIHsKPiArCQkJCWlmIChjcnRjX2lkID09IHBpcGUpIHsKPiArCQkJ CQljb25uZWN0b3JzW3BpcGVdID0gKGRybU1vZGVDb25uZWN0b3JQdHIpY29ubmVjdG9yOwo+ICsJ CQkJfQo+ICsJCQkJY3J0Y19pZCsrOwo+ICsJCQl9Cj4gKwkJCWVsc2UKPiArCQkJCWRybU1vZGVG cmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gKwkJfQo+ICsJCWlmICgoKytwaXBlKSA9PSBJR1Rf TUFYX1BJUEVTKQo+ICsJCQlicmVhazsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmVs ZWFzZV9jb25uZWN0b3JzKGRybU1vZGVDb25uZWN0b3JQdHIgKmNvbm5lY3RvcnMpCj4gK3sKPiAr CWludCBpOwo+ICsJZm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgewo+ICsJCWlm IChjb25uZWN0b3JzW2ldKQo+ICsJCQlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3JzW2ld KTsKPiArCX0KPiArfQo+ICsKPiArI2RlZmluZSBNSU5fRFVSQVRJT05fU0VDIDUuMDAKPiArI2Rl ZmluZSBNSU5fSVRFUkFUSU9OUyAyMAo+ICsKPiArc3RhdGljIHZvaWQgc3RyZXNzKHN0cnVjdCBk YXRhICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIGVuZDsKPiArCWlndF9v dXRwdXRfdCAqb3V0cHV0Owo+ICsJaW50IHJldDsKPiArCWludCBwaXBlOwo+ICsJaW50IGl0ZXJh dGlvbnMgPSAwOwo+ICsJYm9vbCBuZWVkX2NvbnRpbnVlOwo+ICsJaWd0X2NyY190IGNyYywgY3Jj MjsKPiArCj4gKwlpZ3RfZ2V0dGltZSgmc3RhcnQpOwo+ICsKPiArCWRvIHsKPiArCQkvKgo+ICsJ CSAqIEluY3JlbWVudCBwaXBlIG9ubHkgZm9yIGNvbm5lY3RlZCBvdXRwdXRzLAo+ICsJCSAqIGZv ciBlYWNoIGNvbm5lY3RlZCBvdXRwdXQgd2Ugc2hvdWxkIGFzc2lnbiBhCj4gKwkJICogZGlmZmVy ZW50IHBpcGUuCj4gKwkJICovCj4gKwkJcGlwZSA9IDA7Cj4gKwkJZm9yX2VhY2hfY29ubmVjdGVk X291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7Cj4gKwkJCWlndF9hc3NlcnRfZihkYXRh LT5kaXNwbGF5LnBpcGVzW3BpcGVdLm5fcGxhbmVzIDwgTUFYX1BMQU5FUywKPiArCQkJCSJDdXJy ZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBtb3JlIHRoYW4gJWQgcGxhbmVzISIsIE1BWF9QTEFORVMp Owo+ICsKPiArCQkJcGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmRybV9mZCwgcGlw ZSwKPiArCQkJCUlOVEVMX1BJUEVfQ1JDX1NPVVJDRV9BVVRPKTsKPiArCj4gKwkJCXJldCA9IHBs YW5lX3N0cmVzcyhkYXRhLCBvdXRwdXQsIHBpcGUsIGRhdGEtPmhpZ2hlc3RfbW9kZVtwaXBlXSk7 Cj4gKwo+ICsJCQlpZiAoISgoaW50KWlndF90aW1lX2VsYXBzZWQoJnN0YXJ0LCAmZW5kKSAlICgo aW50KU1JTl9EVVJBVElPTl9TRUMvNCkpKSB7Cj4gKwkJCQlwYXVzZV9ncHVfdGhyZWFkcyhkYXRh KTsKCldoeSBkbyB5b3UgcGF1c2UgdGhlIGdwdSB0aHJlYWRzIGV2ZXI/IFRoZSBwb2ludCBpcyB0 byBrZWVwIHRoZSBtZW1vcnkKYnVzeSBhbmQgbWFraW5nIHN1cmUgd2UgYWx3YXlzIGdldCB0aGUg c2FtZSBjcmMuCgpJIHRoaW5rIHRoZSBleHBlY3RlZCBmbG93IG9mIHRoaXMgZnVuY3Rpb24gd291 bGQgYmU6CgppZiBncHVfbG9hZDogc3RhcnRfZ3BncHVfbG9hZCgpCmlmIGNwdV9sb2FkOiBzdGFy dF9jcHVfbG9hZCgpCgojIGVuYWJsZSBhcyBtYW55IHBsYW5lcyBvbiBhcyBtYW55IHBpcGVzIGFz IHBvc3NpYmxlIChpbmNsdWRpbmcgZm9yY2UKZW5hYmxpbmcgSERNSSBpZiBwb3NzaWJsZSkKY29u ZmlnID0gc2V0X3dvcnN0X3Bvc3NpYmxlX2Rpc3BsYXlfY29uZmlnKCkKCmZvciBwIGluIGNvbmZp Zy5hY3RpdmVfcGlwZXM6CiAgICBzdGFydF90aHJlYWRfY2hlY2tpbmdfY3JjX3N0YWJpbGl0eShw KQoKc2xlZXAoVEVTVF9EVVJBVElPTikKCmZvciBwIGluIGNvbmZpZy5hY3RpdmVfcGlwZXM6CiAg ICBzdG9wX3RocmVhZF9jaGVja2luZ19jcmNfc3RhYmlsaXR5KHApCgppZiBncHVfbG9hZDogc3Rv cF9ncGdwdV9sb2FkKCkKaWYgY3B1X2xvYWQ6IHN0b3BfY3B1X2xvYWQoKQoKU29ycnkgZm9yIHRo ZSBweXRob24gc3R5bGUsIGJ1dCBJIGhvcGUgaXQgaGVscHMgYmV0dGVyIGlsbHVzdHJhdGUgdGhl CmxvZ2ljIEkgd2FzIGdvaW5nIGZvciA6KQoKPiArCQkJCWlndF9pbmZvKCJDaGVja2luZyBjcmMu Li5cbiIpOwo+ICsJCQkJZ2V0X3ZibGFuayhkYXRhLT5kaXNwbGF5LmRybV9mZCwgcGlwZSwgRFJN X1ZCTEFOS19ORVhUT05NSVNTKTsKPiArCj4gKwkJCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMo cGlwZV9jcmMsICZjcmMpOwo+ICsKPiArCQkJCWdldF92YmxhbmsoZGF0YS0+ZGlzcGxheS5kcm1f ZmQsIHBpcGUsIERSTV9WQkxBTktfTkVYVE9OTUlTUyk7Cj4gKwo+ICsJCQkJaWd0X3BpcGVfY3Jj X2NvbGxlY3RfY3JjKHBpcGVfY3JjLCAmY3JjMik7Cj4gKwo+ICsJCQkJcmVzdW1lX2dwdV90aHJl YWRzKGRhdGEpOwo+ICsJCQkJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyYywgJmNyYzIpOwo+ICsJ CQl9Cj4gKwo+ICsJCQlpZ3RfcGlwZV9jcmNfZnJlZShwaXBlX2NyYyk7Cj4gKwo+ICsJCQlpZiAo cmV0IHx8ICgrK3BpcGUgPT0gSUdUX01BWF9QSVBFUykpCj4gKwkJCQlicmVhazsKPiArCQl9Cj4g KwkJaWd0X2dldHRpbWUoJmVuZCk7Cj4gKwkJaXRlcmF0aW9ucysrOwo+ICsJCW5lZWRfY29udGlu dWUgPSBpZ3RfdGltZV9lbGFwc2VkKCZzdGFydCwgJmVuZCkgPCBNSU5fRFVSQVRJT05fU0VDOwo+ ICsJfSB3aGlsZSAoKG5lZWRfY29udGludWUgfHwgaXRlcmF0aW9ucyA8IE1JTl9JVEVSQVRJT05T KSk7Cj4gKwo+ICsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3RhcnRfZ3B1X3RocmVhZHMoc3Ry dWN0IGRhdGEgKmRhdGEpCj4gK3sKPiArCWludCBpID0gMDsKPiArCWlndF9vdXRwdXRfdCAqb3V0 cHV0Owo+ICsKPiArCWlmICghZGF0YS0+ZGV2aWQpIHsKPiArCQlkYXRhLT5kZXZpZCA9IGludGVs X2dldF9kcm1fZGV2aWQoZGF0YS0+ZHJtX2ZkKTsKPiArCQlpZ3RfcmVxdWlyZV9nZW0oZGF0YS0+ ZHJtX2ZkKTsKPiArCj4gKwkJZGF0YS0+YnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5p dChkYXRhLT5kcm1fZmQsIDQwOTYpOwo+ICsJCWlndF9hc3NlcnQoZGF0YS0+YnVmbWdyKTsKPiAr CX0KPiArCj4gKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRw dXQpIHsKPiArCQlkYXRhLT5ncHVfY29udGV4dFtpXS5kYXRhID0gZGF0YTsKPiArCQlkYXRhLT5n cHVfY29udGV4dFtpXS5waXBlID0gaTsKPiArCQlkYXRhLT5ncHVfY29udGV4dFtpXS5mYl9wdHIg PSBOVUxMOwo+ICsJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0LnggPSAwOwo+ICsJCWRh dGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0LnkgPSAwOwo+ICsJCWRhdGEtPmdwdV9jb250ZXh0 W2ldLmJsdF9yZWN0LncgPSAwOwo+ICsJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0Lmgg PSAwOwo+ICsJCWRhdGEtPmdwdV9jb250ZXh0W2ldLm51bV9yZWN0YW5nbGVzID0gTl9CTElUUzsK PiArCQlkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW2ldID0gUlVOTklORzsKPiArCQlpZ3RfaW5mbygi U3RhcnRpbmcgR1BVIHRocmVhZCAlZFxuIiwgaSk7Cj4gKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0u YmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRldmlk KTsKPiArCQlwdGhyZWFkX2NyZWF0ZSgmZGF0YS0+Z3B1X3RocmVhZFtpXSwgTlVMTCwgZ3B1X2xv YWQsICh2b2lkKikmZGF0YS0+Z3B1X2NvbnRleHRbaV0pOwo+ICsJCXNlbV93YWl0KCZkYXRhLT5n cHVfdGhyZWFkX3BhdXNlX2Fja1tpXSk7Cj4gKwkJaWd0X2luZm8oIkdQVSB0aHJlYWQgJWQgc3Rh cnRlZFxuIiwgaSk7Cj4gKwkJaWYgKCsraSA9PSBJR1RfTUFYX1BJUEVTKQo+ICsJCQlicmVhazsK Ckl0IGlzIHBvc3NpYmxlIGhlcmUgdG8gZm9yY2UtY29ubmVjdCBIRE1JIG91dHB1dHMgTzotKSBU aGlzIHdvdWxkCmluY3JlYXNlIHRoZSBsb2FkIHdpdGhvdXQgcmVxdWlyaW5nIGEgbG90IG9mIGNv bm5lY3RlZCBzY3JlZW5zLiBUaGlzIGNhbgpiZSBjb21pbmcgaW4gYSBmb2xsb3cgdXAgcGF0Y2gg dGhvdWdoIQoKPiArCX0KPiArfQo+ICsKPiArCj4gK3N0YXRpYyB2b2lkIHBhdXNlX2dwdV90aHJl YWRzKHN0cnVjdCBkYXRhICpkYXRhKQo+ICt7Cj4gKwlpbnQgaSA9IDA7Cj4gKwlpZ3Rfb3V0cHV0 X3QgKm91dHB1dDsKPiArCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXks IG91dHB1dCkgewo+ICsJCWlmIChkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW2ldICE9IFJVTk5JTkcp IHsKPiArCQkJKytpOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwkJaWd0X2luZm8oIlBhdXNp bmcgR1BVIHRocmVhZCAlZCBcbiIsIGkpOwo+ICsJCWRhdGEtPmdwdV90aHJlYWRfc3RhdGVbaV0g PSBQQVVTRUQ7Cj4gKwkJc2VtX3dhaXQoJmRhdGEtPmdwdV90aHJlYWRfcGF1c2VfYWNrW2ldKTsK PiArCQlpZ3RfaW5mbygiR1BVIHRocmVhZCAlZCBwYXVzZWRcbiIsIGkpOwo+ICsJCWlmICgrK2kg PT0gSUdUX01BWF9QSVBFUykKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHJlc3VtZV9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKPiArewo+ICsJaW50IGkg PSAwOwo+ICsJaWd0X291dHB1dF90ICpvdXRwdXQ7Cj4gKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0 cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsKPiArCQlpZiAoZGF0YS0+Z3B1X3RocmVhZF9z dGF0ZVtpXSAhPSBQQVVTRUQpIHsKPiArCQkJKytpOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4g KwkJaWd0X2luZm8oIlJlc3VtaW5nIEdQVSB0aHJlYWQgJWRcbiIsIGkpOwo+ICsJCWRhdGEtPmdw dV90aHJlYWRfc3RhdGVbaV0gPSBSVU5OSU5HOwo+ICsJCXNlbV93YWl0KCZkYXRhLT5ncHVfdGhy ZWFkX3BhdXNlX2Fja1tpXSk7Cj4gKwkJaWd0X2luZm8oIkdQVSB0aHJlYWQgJWQgcmVzdW1lZFxu IiwgaSk7Cj4gKwkJaWYgKCsraSA9PSBJR1RfTUFYX1BJUEVTKQo+ICsJCQlicmVhazsKPiArCX0K PiArfQo+ICsKPiArCj4gK3N0YXRpYyB2b2lkIHN0b3BfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEg KmRhdGEpCj4gK3sKPiArCWludCBpID0gMDsKPiArCWlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ICsJ Zm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7Cj4gKwkJ aWd0X2luZm8oIlN0b3BpbmcgR1BVIHRocmVhZCAlZFxuIiwgaSk7Cj4gKwkJZGF0YS0+Z3B1X3Ro cmVhZF9zdGF0ZVtpXSA9IFNUT1BQRUQ7Cj4gKwkJcHRocmVhZF9qb2luKGRhdGEtPmdwdV90aHJl YWRbaV0sIE5VTEwpOwo+ICsJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmZiX3B0ciA9IE5VTEw7Cj4g KwkJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShkYXRhLT5ncHVfY29udGV4dFtpXS5iYXRjaCk7Cj4g KwkJaWYgKCsraSA9PSBJR1RfTUFYX1BJUEVTKQo+ICsJCQlicmVhazsKPiArCX0KPiArfQo+ICsK PiArc3RhdGljIHZvaWQgc3RhcnRfY3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCj4gK3sK PiArCWludCBpOwo+ICsJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bWJlcl9vZl9jb3JlcztpKysp IHsKPiArCQlkYXRhLT5jcHVfY29udGV4dFtpXS5idWYxID0gbWFsbG9jKEJVRl9TSVpFKTsKPiAr CQlkYXRhLT5jcHVfY29udGV4dFtpXS5idWYyID0gbWFsbG9jKEJVRl9TSVpFKTsKPiArCQlkYXRh LT5jcHVfY29udGV4dFtpXS5pZCA9IGk7Cj4gKwkJZGF0YS0+Y3B1X2NvbnRleHRbaV0uZGF0YSA9 IGRhdGE7Cj4gKwkJcHRocmVhZF9jcmVhdGUoJmRhdGEtPmNwdV90aHJlYWRbaV0sIE5VTEwsIGNw dV9sb2FkLCAodm9pZCopJmRhdGEtPmNwdV9jb250ZXh0W2ldKTsKPiArCX0KPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgc3RvcF9jcHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKPiArewo+ICsJ aW50IGk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVtYmVyX29mX2NvcmVzO2krKykgewo+ ICsJCWRhdGEtPmNwdV90aHJlYWRfc3RvcFtpXSA9IHRydWU7Cj4gKwkJcHRocmVhZF9qb2luKGRh dGEtPmNwdV90aHJlYWRbaV0sIE5VTEwpOwo+ICsJCWZyZWUoZGF0YS0+Y3B1X2NvbnRleHRbaV0u YnVmMSk7Cj4gKwkJZnJlZShkYXRhLT5jcHVfY29udGV4dFtpXS5idWYyKTsKPiArCX0KPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgY3JlYXRlX2ZyYW1lYnVmZmVycyhzdHJ1Y3QgZGF0YSAqZGF0YSkK PiArewo+ICsJaW50IGksIGo7Cj4gKwl1aW50NjRfdCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWln aHQ7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiArCj4gKwlkb19vcl9kaWUoZHJtR2V0Q2Fw KGRhdGEtPmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfV0lEVEgsICZjdXJzb3Jfd2lkdGgpKTsKPiAr CWRvX29yX2RpZShkcm1HZXRDYXAoZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9IRUlHSFQs ICZjdXJzb3JfaGVpZ2h0KSk7Cj4gKwo+ICsJaSA9IDA7Cj4gKwlmb3JfZWFjaF9jb25uZWN0ZWRf b3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsKPiArCQlpZiAoIWRhdGEtPmN1cnNvcl9m YltpXS5mYl9pZCkgewo+ICsJCQlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwgY3Vy c29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0LAo+ICsJCQkJCURSTV9GT1JNQVRfQVJHQjg4ODgsCgpG WUksIGluIGEgZm9sbG93IHVwIHBhdGNoLCB3ZSBwcm9iYWJseSB3YW50IHRvIGJlIGFibGUgdG8g Y2hhbmdlIHRoZQpwbGFuZSBmb3JtYXQgKG9yIHJhbmRvbWl6ZSBpdCksIGFuZCB0aWxpbmcgZm9y bWF0cy4gVGhpcyB3YXksIHdlIHdvdWxkCnJlYWxseSBzdHJlc3MgYWxsIHRoZSBzY2VuYXJpb3Mg OikKCj4gKwkJCQkJTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKPiArCQkJCQkxLjAsMC4wLDAu MCwKPiArCQkJCQkmZGF0YS0+Y3Vyc29yX2ZiW2ldKTsKPiArCQl9Cj4gKwkJZm9yIChqID0gMDsg aiA8IGRhdGEtPm51bV9wbGFuZXNbaV07aisrKSB7Cj4gKwkJCWlmICghZGF0YS0+ZmJbaSAqIE1B WF9QTEFORVMgKyBqXS5mYl9pZCkgewo+ICsJCQkJaWd0X2NyZWF0ZV9jb2xvcl9wYXR0ZXJuX2Zi KGRhdGEtPmRybV9mZCwKPiArCQkJCSAgICBkYXRhLT5oaWdoZXN0X21vZGVbaV0tPmhkaXNwbGF5 LAo+ICsJCQkJICAgIGRhdGEtPmhpZ2hlc3RfbW9kZVtpXS0+dmRpc3BsYXksCj4gKwkJCQkgICAg ZGF0YS0+Zm9ybWF0LAo+ICsJCQkJICAgIGRhdGEtPm1vZGlmaWVyLAo+ICsJCQkJICAgIDAuMCwg MS4wLCAwLjAsICZkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdKTsKPiArCQkJfQo+ICsJCX0K PiArCQlpZiAoKytpID09IElHVF9NQVhfUElQRVMpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBkZXN0cm95X2ZyYW1lYnVmZmVycyhzdHJ1Y3QgZGF0YSAqZGF0YSkK PiArewo+ICsJaW50IGksIGo7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiArCj4gKwlpID0g MDsKPiArCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXksIG91dHB1dCkg ewo+ICsJCWZvciAoaiA9IDA7aiA8IE1BWF9QTEFORVM7IGorKykgewo+ICsJCQlpZiAoZGF0YS0+ ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCkgewo+ICsJCQkJaWd0X3BsYW5lX3NldF9mYigm ZGF0YS0+ZGlzcGxheS5waXBlc1tpXS5wbGFuZXNbal0sIE5VTEwpOwo+ICsJCQkJaWd0X3JlbW92 ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmRhdGEtPmZiW2kgKiBNQVhfUExBTkVTICsgal0p Owo+ICsJCQkJZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCA9IDA7Cj4gKwkJCX0K PiArCQl9Cj4gKwkJaWYgKGRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCkgewo+ICsJCQlpZ3RfcmVt b3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+Y3Vyc29yX2ZiW2ldKTsKPiArCQkJ ZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkID0gMDsKPiArCQl9Cj4gKwkJaWYgKCsraSA9PSBJR1Rf TUFYX1BJUEVTKQo+ICsJCQlicmVhazsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcHJl cGFyZV90ZXN0KHN0cnVjdCBkYXRhICpkYXRhLCBib29sIG92ZXJyaWRlLCBib29sIGNwdSwgYm9v bCBncHUpCj4gK3sKPiArCWludCBpLGo7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiArCj4g KwlkYXRhLT5udW1iZXJfb2ZfY29yZXMgPSBtaW4oc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05M TiksIE1BWF9DT1JFUyk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkr Kykgewo+ICsJCWZvciAoaiA9IDA7aiA8IE1BWF9QTEFORVM7IGorKykKPiArCQkJZGF0YS0+ZmJb aSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCA9IDA7Cj4gKwkJZGF0YS0+Y3Vyc29yX2ZiW2ldLmZi X2lkID0gMDsKPiArCQlkYXRhLT5udW1fcGxhbmVzW2ldID0gLTE7Cj4gKwkJZGF0YS0+bGFzdF9t b2RlW2ldID0gTlVMTDsKPiArCQlzZW1faW5pdCgmZGF0YS0+Z3B1X3RocmVhZF9wYXVzZV9hY2tb aV0sIDAsIDApOwo+ICsJfQo+ICsJaWYgKGNwdSkgewo+ICsJCXN0YXJ0X2NwdV90aHJlYWRzKGRh dGEpOwo+ICsJfQo+ICsKPiArCWRhdGEtPm1vZGVfcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291 cmNlcyhkYXRhLT5kcm1fZmQpOwo+ICsJaWYgKCFkYXRhLT5tb2RlX3Jlc291cmNlcykgewo+ICsJ CWlndF93YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVy cm5vKSk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCW1lbXNldChkYXRhLT5oaWdoZXN0X21v ZGUsIDAsIHNpemVvZihkcm1Nb2RlTW9kZUluZm8gKikgKiBJR1RfTUFYX1BJUEVTKTsKPiArCj4g KwlmaWxsX2Nvbm5lY3Rvcl90b19waXBlX2FycmF5KGRhdGEsIGRhdGEtPm1vZGVfcmVzb3VyY2Vz LCBkYXRhLT5jb25uZWN0b3JzKTsKPiArCj4gKwlpID0gMDsKPiArCWZvcl9lYWNoX2Nvbm5lY3Rl ZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXksIG91dHB1dCkgewo+ICsJCWRybU1vZGVDb25uZWN0b3Ig KmNvbm5lY3RvciA9IChkcm1Nb2RlQ29ubmVjdG9yICopZGF0YS0+Y29ubmVjdG9yc1tpXTsKPiAr CQlpZiAoIWNvbm5lY3RvcikKPiArCQkJY29udGludWU7Cj4gKwkJaWYgKCFkYXRhLT5oaWdoZXN0 X21vZGVbaV0pIHsKPiArCQkJaWYgKCFvdmVycmlkZSAmJiBjb25uZWN0b3ItPmNvdW50X21vZGVz KSB7Cj4gKwkJCQlkYXRhLT5oaWdoZXN0X21vZGVbaV0gPSBmaW5kX2hpZ2hlc3RfbW9kZShjb25u ZWN0b3IpOwo+ICsJCQl9Cj4gKwkJCWVsc2UKPiArCQkJCWRhdGEtPmhpZ2hlc3RfbW9kZVtpXSA9 ICZ1aGRfbW9kZV82MGh6Owo+ICsJCX0KPiArCQlpZ3RfaW5mbygiVXNpbmcgbW9kZTogXG4iKTsK PiArCQlrbXN0ZXN0X2R1bXBfbW9kZShkYXRhLT5oaWdoZXN0X21vZGVbaV0pOwo+ICsKPiArCQlp ZiAoZGF0YS0+bnVtX3BsYW5lc1tpXSA9PSAtMSkKPiArCQkJZGF0YS0+bnVtX3BsYW5lc1tpXSA9 IGRhdGEtPmRpc3BsYXkucGlwZXNbaV0ubl9wbGFuZXM7Cj4gKwo+ICsJCWlndF9pbmZvKCJNYXgg bnVtYmVyIG9mIHBsYW5lcyBpcyAlZCBmb3IgcGlwZSAlZFxuIiwgZGF0YS0+bnVtX3BsYW5lc1tp XSwgaSk7Cj4gKwo+ICsJCWlmICgrK2kgPT0gSUdUX01BWF9QSVBFUykKPiArCQkJYnJlYWs7Cj4g Kwl9Cj4gKwo+ICsJY3JlYXRlX2ZyYW1lYnVmZmVycyhkYXRhKTsKPiArCWlmIChncHUpIHsKPiAr CQlzdGFydF9ncHVfdGhyZWFkcyhkYXRhKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQg ZmluaXNoX3Rlc3Qoc3RydWN0IGRhdGEgKmRhdGEsIGJvb2wgb3ZlcnJpZGUsIGJvb2wgY3B1LCBi b29sIGdwdSkKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJaWYgKGdwdSkgewo+ICsJCXN0b3BfZ3B1 X3RocmVhZHMoZGF0YSk7Cj4gKwl9Cj4gKwkvKgo+ICsJICogQXMgd2UgY2hhbmdlIHRpbGluZy9m b3JtYXQgd2UgbmVlZCBhIG5ldyBGQgo+ICsJICovCj4gKwlkZXN0cm95X2ZyYW1lYnVmZmVycyhk YXRhKTsKPiArCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKPiArCQlkYXRh LT5udW1fcGxhbmVzW2ldID0gLTE7Cj4gKwkJZGF0YS0+bGFzdF9tb2RlW2ldID0gTlVMTDsKPiAr CX0KPiArCWlmIChjcHUpIHsKPiArCQlzdG9wX2NwdV90aHJlYWRzKGRhdGEpOwo+ICsJfQo+ICsJ cmVsZWFzZV9jb25uZWN0b3JzKGRhdGEtPmNvbm5lY3RvcnMpOwo+ICsKPiArCWRybU1vZGVGcmVl UmVzb3VyY2VzKGRhdGEtPm1vZGVfcmVzb3VyY2VzKTsKPiArfQo+ICsKPiArc3RydWN0IGRhdGEg ZGF0YSA9IHsKPiArCS5mb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ICsJLm1vZGlmaWVy ID0gRFJNX0ZPUk1BVF9NT0RfTElORUFSLAo+ICsJLmRldmlkID0gMCwKPiArfTsKPiArCj4gK2Vu dW0gewo+ICsgICAgUExBTkVTX09OTFkgPSAwLAo+ICsgICAgQ1BVX0xPQUQsCj4gKyAgICBHUFVf TE9BRCwKPiArICAgIE1PREVfT1ZFUlJJREUsCj4gK30gdGVzdF9iaXRzOwo+ICsKPiArc3RhdGlj IHZvaWQgc2V0X3BhcmFtcyh1aW50OF90IGJpdHMsIGJvb2wgKm1vZGVfb3ZlcnJpZGUsIGJvb2wg KmNwdV9sb2FkLCBib29sICpncHVfbG9hZCkKPiArewo+ICsJKmNwdV9sb2FkID0gKGJpdHMgJiAo MSA8PCBDUFVfTE9BRCkpICE9IDAgPyB0cnVlIDogZmFsc2U7Cj4gKwkqZ3B1X2xvYWQgPSAoYml0 cyAmICgxIDw8IEdQVV9MT0FEKSkgIT0gMCA/IHRydWUgOiBmYWxzZTsKPiArCSptb2RlX292ZXJy aWRlID0gKGJpdHMgJiAoMSA8PCBNT0RFX09WRVJSSURFKSkgIT0gMCA/IHRydWUgOiBmYWxzZTsK PiArfQo+ICsKPiArCj4gK2lndF9tYWluCj4gK3sKPiArCWJvb2wgbW9kZV9vdmVycmlkZTsKCkkg dW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIGEgdXNlY2FzZSB3aGVyZSBhIHNjcmVlbiBkb2VzIHN1 cHBvcnQgNEsgYnV0CmRvZXMgbm90IGFkdmVydGlzZSBpdCwgYnV0IHRoaXMgaXMgcmVhbGx5IG5v dCB0aGUgcGxhY2UgZm9yIHRoaXMuCgpJbnN0ZWFkLCB3aGF0IHlvdSBzaG91bGQgZG8gaXMgc2V0 IHlvdXIgb3duIEVESUQgZm9yIHRoZSBjb25uZWN0b3IKYmVmb3JlIHJ1bm5pbmcgdGhlIHRlc3Qu CgpJcyB0aGF0IG1ha2luZyBzZW5zZT8KCj4gKwlib29sIGNwdV9sb2FkOwo+ICsJYm9vbCBncHVf bG9hZDsKPiArCXVpbnQ4X3QgZm9ybWF0X2lkeCA9IDAsIHRpbGluZ19pZHggPSAwOwo+ICsJdWlu dDY0X3QgbWF4X2NvbWJpbmF0aW9ucyA9IDEgPDwgKE1PREVfT1ZFUlJJREUgKyAxKTsKPiArCWlu dDhfdCB0ZXN0X2NvbWIgPSBtYXhfY29tYmluYXRpb25zIC0gMTsKPiArCj4gKwlpZ3RfZml4dHVy ZSB7Cj4gKwkJZGF0YS5kcm1fZmQgPSBkYXRhLmRpc3BsYXkuZHJtX2ZkID0gZHJtX29wZW5fZHJp dmVyX21hc3RlcihEUklWRVJfQU5ZKTsKPiArCj4gKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3Nf bW9kZSgpOwo+ICsKPiArCQlpZ3RfZGlzcGxheV9yZXF1aXJlKCZkYXRhLmRpc3BsYXksIGRhdGEu ZGlzcGxheS5kcm1fZmQpOwo+ICsJCWlndF9yZXF1aXJlKGRhdGEuZGlzcGxheS5pc19hdG9taWMp Owo+ICsJCWlndF9kaXNwbGF5X3JlcXVpcmVfb3V0cHV0KCZkYXRhLmRpc3BsYXkpOwo+ICsJfQo+ ICsKPiArCWRvIHsKPiArCQlzZXRfcGFyYW1zKHRlc3RfY29tYiwgJm1vZGVfb3ZlcnJpZGUsICZj cHVfbG9hZCwgJmdwdV9sb2FkKTsKPiArCQkvKgo+ICsJCSAqIERvIGFsbCBjb21iaW5hdGlvbnMg b2YgbW9kZV9vdmVycmlkZSwgY3B1X2xvYWQsIGdwdV9sb2FkIGFuZAo+ICsJCSAqIGFsbCBmb3Jt YXQgYW5kIHRpbGluZyBmb3IgZWFjaCBvZiB0aG9zZS4KPiArCQkgKi8KPiArCQlmb3IgKGZvcm1h dF9pZHggPSAwOyBmb3JtYXRfaWR4IDwgTl9GT1JNQVRTOyBmb3JtYXRfaWR4KyspCj4gKwkJCWZv ciAodGlsaW5nX2lkeCA9IDA7IHRpbGluZ19pZHggPCBOX1RJTElOR19NRVRIT0RTOyB0aWxpbmdf aWR4KyspIHsKPiArCQkJCWRhdGEuZm9ybWF0ID0gZm9ybWF0c1tmb3JtYXRfaWR4XTsKPiArCQkJ CWRhdGEubW9kaWZpZXIgPSB0aWxpbmdzW3RpbGluZ19pZHhdOwo+ICsKPiArCQkJCWlndF9maXh0 dXJlIHsKPiArCQkJCQlwcmVwYXJlX3Rlc3QoJmRhdGEsIG1vZGVfb3ZlcnJpZGUsIGNwdV9sb2Fk LCBncHVfbG9hZCk7Cj4gKwkJCQl9Cj4gKwo+ICsJCQkJaWd0X3N1YnRlc3RfZigic3RyZXNzJXMl cyVzLSVzLSVzIiwKPiArCQkJCSAgICAgIG1vZGVfb3ZlcnJpZGUgPT0gZmFsc2UgPyAiIiA6ICIt bW9kZS1vdmVycmlkZSIsCj4gKwkJCQkgICAgICBjcHVfbG9hZCA9PSBmYWxzZSA/ICIiIDogIi1j cHUtbG9hZCIsCj4gKwkJCQkgICAgICBncHVfbG9hZCA9PSBmYWxzZSA/ICIiIDogIi1ncHUtbG9h ZCIsCj4gKwkJCQkgICAgICBmb3JtYXRfc3RyKGZvcm1hdF9pZHgpLAo+ICsJCQkJICAgICAgdGls aW5nX3N0cih0aWxpbmdfaWR4KSkgewo+ICsKPiArCQkJCQlzdHJlc3MoJmRhdGEpOwoKVGhhbmtz IGZvciBoYXZpbmcgYSBzaW5nbGUgZW50cnkgcG9pbnQsIGJ1dCBwYXJhbWV0cml6ZWQhCgo+ICsK PiArCQkJCX0KPiArCj4gKwkJCQlpZ3RfZml4dHVyZSB7Cj4gKwkJCQkJZmluaXNoX3Rlc3QoJmRh dGEsIG1vZGVfb3ZlcnJpZGUsIGNwdV9sb2FkLCBncHVfbG9hZCk7Cj4gKwkJCQl9Cj4gKwkJCX0K PiArCX0gd2hpbGUgKC0tdGVzdF9jb21iID4gMCApOwo+ICsKPiArCWlndF9maXh0dXJlIHsKPiAr Cj4gKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKPiArCX0KPiArfQoKTmV3IHRl c3RzIG5lZWQgdG8gYmUgZG9jdW1lbnRlZCAoU2VlCmh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9w Lm9yZy9kcm0vaWd0LWdwdS10b29scy9ibG9iL21hc3Rlci9DT05UUklCVVRJTkcubWQjdGhlLWNv ZGUpLgoKU28sIGZyb20gdGhlIHF1aWNrIHJldmlldywgaXQgbG9va3MgbGlrZSB5b3UgZ290IHRo ZSBHUFUgYW5kIENQVSBsb2FkcwppbXBsZW1lbnRlZCB2ZXJ5IG5pY2VseSwgYW5kIHRoZSBvbmx5 IHRoaW5nIG5lZWRlZCBpcyB0byBjaGFuZ2UgdGhlCmxvZ2ljIGZvciB0aGUgQ1JDIHBvbGxpbmch IFNvIHdlIGFyZSBhbG1vc3QgdGhlcmUhCgpUaGFua3MgYSBsb3QgZm9yIHdvcmtpbmcgb24gdGhp cywgYW5kIHNvcnJ5IGZvciBteSBvdXRyYWdlb3VzIHNsb3duZXNzIQoKTWFydGluCgo+IFwgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQo+IGRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBi L3Rlc3RzL21lc29uLmJ1aWxkCj4gaW5kZXggYTdiMmIzMjIuLmI2ZDdlZDQ1IDEwMDY0NAo+IC0t LSBhL3Rlc3RzL21lc29uLmJ1aWxkCj4gKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPiBAQCAtNTAs NiArNTAsNyBAQCB0ZXN0X3Byb2dzID0gWwo+ICAJJ2ttc19wbGFuZV9tdWx0aXBsZScsCj4gIAkn a21zX3BsYW5lX3NjYWxpbmcnLAo+ICAJJ2ttc19wcmltZScsCj4gKwkna21zX3BsYW5lX3N0cmVz cycsCj4gIAkna21zX3Byb3BfYmxvYicsCj4gIAkna21zX3Byb3BlcnRpZXMnLAo+ICAJJ2ttc19w c3InLAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpp Z3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=