From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4AD5989123 for ; Tue, 23 Apr 2019 16:31:32 +0000 (UTC) From: Tvrtko Ursulin References: <20190423000554.32274-1-carlos.santa@intel.com> Message-ID: Date: Tue, 23 Apr 2019 17:31:29 +0100 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Subject: Re: [igt-dev] [RFC v3] tests/gem_watchdog: Initial set of tests for GPU watchdog List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Carlos Santa , igt-dev@lists.freedesktop.org Cc: Ursulin Tvrtko List-ID: Ck9uIDIzLzA0LzIwMTkgMTc6MjUsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+IAo+IEhpLAo+IAo+ IEhvdyBpcyB0aGUgdGVzdCBkb2luZyBhZ2FpbnN0IHRoZSBjb2RlIGluIHByb2dyZXNzPyBBbnkg aXNzdWVzIAo+IGRpc2NvdmVyZWQgZXRjPwo+IAo+IEluIGdlbmVyYWwgaXQgbG9va3MgYSBiaXQg dW50aWR5LiBDb2Rpbmcgc3R5bGUgaXMgb2ZmLCBhbGlnbm1lbnQgaXMgCj4gcmFuZG9tIGV0Yy4u IHNvIGEgYml0IGRpZmZpY3VsdCB0byByZWFkLiBCdXQgSSdsbCBtYWtlIGEgcGFzcyBhbmQgc2Vl IGlmIAo+IEkgY2FuIG1ha2Ugc2Vuc2Ugb2YgaXQuIEkgd29uJ3QgbGVhdmUgY29tbWVudHMgb24g Y29kaW5nIHN0eWxlIGFuZCAKPiBmb3JtYXR0aW5nIHNpbmNlIHRoZXJlIGFyZSB0b28gbWFueS4g QnV0IHBsZWFzZSBkbyBmaXggdGhhdCBiZWZvcmUgCj4gcmUtcG9zdGluZy4KPiAKPiBPbiAyMy8w NC8yMDE5IDAxOjA1LCBDYXJsb3MgU2FudGEgd3JvdGU6Cj4+IFRoaXMgdGVzdCBhZGRzIGJhc2lj IHNldCBvZiB0ZXN0cyB0byByZXNldCB0aGUgZGlmZmVyZW50Cj4+IEdQVSBlbmdpbmVzIHRocm91 Z2ggdGhlIGdwdSB3YXRjaGRvZyB0aW1lci4KPj4KPj4gQ3JlZGl0cyB0byBBbnRvbmlvIGZvciB0 aGUgb3JpZ2luYWwgY29kZWJhc2UgdGhpcyBpcyBiYXNlZCBvbi4KPj4KPj4gdjI6IHJlbW92ZSBn ZW1fY29udGV4dF9nZXRfcGFyYW0oKSBkdXJpbmcgc2V0IChBbnRvbmlvKQo+PiDCoMKgwqDCoCBy ZW1vdmUgY2xlYXJpbmcgb2YgdGhlIGVuZ2luZXNfdGhyZXNob2xkW10gaW4gdGhlIGRlZmF1bHQg Y2FzZQo+PiDCoMKgwqDCoCBpbnNpZGUgY29udGV4dF9zZXRfd2F0Y2hkb2coKS4gKEFudG9uaW8p Cj4+IMKgwqDCoMKgIGZpeCBpbmRleGluZyB3aGVuIGNyZWF0aW5nIGxvdy9oaWdoIHByaW9yaXR5 IGNvbnRleHRzCj4+IMKgwqDCoMKgIGdldCByaWQgb2YgMiB0aHJlYWRzIGlkZWEgKEFudG9uaW8p Cj4+IMKgwqDCoMKgIGZpeCBjb250ZXh0IHByaW8gYnVnIGR1ZSB0byB3cm9uZyBpbmRleGluZyAo QW50b25pbykKPj4gdjM6IG5vIG5lZWQgdG8gZm9yY2UgY2xlYXIgZHJtX2k5MTVfZ2VtX3dhdGNo ZG9nX3RpbWVvdXQgc3RydWN0Cj4+IMKgwqDCoMKgIHdoZW4gc2V0dGluZyB0aGUgd2F0Y2hkb2cg dGltZW91dHMgKEFudG9uaW8pCj4+IMKgwqDCoMKgIC11c2UgZ2VtX2NvbnRleHRfc2V0X3ByaW9y aXR5KCkgaW5zdGVhZCB0byB1c2UgZXJyb3IgY2hlY2tpbmcKPj4gwqDCoMKgwqAgLWFsd2F5cyB1 c2UgYSBsb29wZXIgdG8gdGVzdCBhbGwgZW5naW5lcyAoQW50b25pbykKPj4gwqDCoMKgwqAgLW1v ZGlmeSB0ZXN0IGdwdV93YXRjaG9kZ19oYW5nX2xvbmdfYmF0Y2hfc2luZ2xlX2VuZ2luZSgpCj4+ IMKgwqDCoMKgIHRvIHVzZSBhIGNvdXBsZSBvZiBiYXRjaGVzIGFuZCBzZXQgdGhlIHRpbWVvdXQg aW4gYmV0d2VlbiB0aGVtIAo+PiAoQW50b25pbykKPj4gwqDCoMKgwqAgLW1ha2UgdXNlIG9mIGZv cl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZSgpIChBbnRvbmlvKQo+Pgo+PiBDYzogVXJzdWxp biBUdnJ0a28gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPj4gQ2M6IEFudG9uaW8gQXJnZW56 aWFubyA8YW50b25pby5hcmdlbnppYW5vQGludGVsLmNvbT4KPj4gQ2M6IENocmlzIFdpbHNvbiA8 Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+PiBTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgU2FudGEg PGNhcmxvcy5zYW50YUBpbnRlbC5jb20+Cj4+IC0tLQo+PiDCoCB0ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzwqDCoMKgIHzCoMKgIDMgKwo+PiDCoCB0ZXN0cy9pOTE1L2dlbV93YXRjaGRvZy5jIHwgNTE3 IAo+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+IMKg IHRlc3RzL21lc29uLmJ1aWxkwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPj4gwqAgMyBmaWxl cyBjaGFuZ2VkLCA1MjEgaW5zZXJ0aW9ucygrKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgdGVz dHMvaTkxNS9nZW1fd2F0Y2hkb2cuYwo+Pgo+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUu c291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPj4gaW5kZXggMjE0Njk4ZC4uN2YxN2Yy MCAxMDA2NDQKPj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+PiArKysgYi90ZXN0cy9N YWtlZmlsZS5zb3VyY2VzCj4+IEBAIC00NDQsNiArNDQ0LDkgQEAgZ2VtX3VzZXJwdHJfYmxpdHNf U09VUkNFUyA9IGk5MTUvZ2VtX3VzZXJwdHJfYmxpdHMuYwo+PiDCoCBURVNUU19wcm9ncyArPSBn ZW1fd2FpdAo+PiDCoCBnZW1fd2FpdF9TT1VSQ0VTID0gaTkxNS9nZW1fd2FpdC5jCj4+ICtURVNU U19wcm9ncyArPSBnZW1fd2F0Y2hkb2cKPj4gK2dlbV93YXRjaGRvZ19TT1VSQ0VTID0gaTkxNS9n ZW1fd2F0Y2hkb2cuYwo+PiArCj4+IMKgIFRFU1RTX3Byb2dzICs9IGdlbV93b3JrYXJvdW5kcwo+ PiDCoCBnZW1fd29ya2Fyb3VuZHNfU09VUkNFUyA9IGk5MTUvZ2VtX3dvcmthcm91bmRzLmMKPj4g ZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX3dhdGNoZG9nLmMgYi90ZXN0cy9pOTE1L2dlbV93 YXRjaGRvZy5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjhmNzg5 YWIKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi90ZXN0cy9pOTE1L2dlbV93YXRjaGRvZy5jCj4+ IEBAIC0wLDAgKzEsNTE3IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwg Q29ycG9yYXRpb24KPj4gKyAqCj4+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiAKPj4gb2J0YWluaW5nIGEKPj4gKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg Cj4+ICJTb2Z0d2FyZSIpLAo+PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgCj4+IGxpbWl0YXRpb24KPj4gKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCAK Pj4gc3VibGljZW5zZSwKPj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+PiArICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPj4g KyAqCj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSAoaW5jbHVkaW5nIAo+PiB0aGUgbmV4dAo+PiArICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIAo+PiBvZiB0 aGUKPj4gKyAqIFNvZnR3YXJlLgo+PiArICoKPj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCAKPj4gRVhQUkVTUyBPUgo+ PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiAKPj4gTUVSQ0hBTlRBQklMSVRZLAo+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoCBJTiBOTyBFVkVOVCAKPj4gU0hBTEwKPj4g KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIAo+PiBPUiBPVEhFUgo+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIAo+PiBBUklTSU5HCj4+ICsg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIAo+PiBPVEhFUiBERUFMSU5HUwo+PiArICogSU4gVEhFIFNPRlRXQVJFLgo+PiArICov Cj4+ICsjaW5jbHVkZSAiaWd0LmgiCj4+ICsjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCj4+ICsjaW5j bHVkZSAic3dfc3luYy5oIgo+PiArCj4+ICsjaW5jbHVkZSA8cHRocmVhZC5oPgo+PiArI2luY2x1 ZGUgPGZjbnRsLmg+Cj4+ICsKPj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPj4gKyNpbmNsdWRl IDxzeXMvcG9sbC5oPgo+PiArI2luY2x1ZGUgPHN5cy9zaWduYWwuaD4KPj4gKyNpbmNsdWRlICJp OTE1L2dlbV9yaW5nLmgiCj4+ICsKPj4gKyNkZWZpbmUgTE9DQUxfSTkxNV9FWEVDX0JTRF9TSElG VMKgwqDCoCAoMTMpCj4+ICsjZGVmaW5lIExPQ0FMX0k5MTVfRVhFQ19CU0RfUklORzHCoMKgwqDC oCAoMSA8PCBMT0NBTF9JOTE1X0VYRUNfQlNEX1NISUZUKQo+PiArI2RlZmluZSBMT0NBTF9JOTE1 X0VYRUNfQlNEX1JJTkcywqDCoMKgwqAgKDIgPDwgTE9DQUxfSTkxNV9FWEVDX0JTRF9TSElGVCkK PiAKPiBUaGVzZSBhcmUgaW4gb2xkIHNvIG5vIG5lZWQgZm9yIGxvY2FsIGRlZmluaXRpb25zLgo+ IAo+PiArCj4+ICsjZGVmaW5lIE1BWF9QUklPIExPQ0FMX0k5MTVfQ09OVEVYVF9NQVhfVVNFUl9Q UklPUklUWQo+PiArI2RlZmluZSBNSU5fUFJJTyBMT0NBTF9JOTE1X0NPTlRFWFRfTUlOX1VTRVJf UFJJT1JJVFkKPj4gKyNkZWZpbmUgSElHSCAxCj4+ICsjZGVmaW5lIExPVyAwCj4+ICsjZGVmaW5l IFRSVUUgMQo+PiArI2RlZmluZSBGQUxTRSAwCj4gCj4gdHJ1ZSBhbmQgZmFsc2UgYXJlIGZhaXIg Z2FtZSBpbiBpZ3QuCj4gCj4+ICsjZGVmaW5lIFdBVENIRE9HX1RIUkVTSE9MRCAoMTAwKQo+PiAr I2RlZmluZSBNQVhfRU5HSU5FUyA1Cj4+ICsjZGVmaW5lIFJFTkRFUl9DTEFTUyAwCj4+ICsjZGVm aW5lIFZJREVPX0RFQ09ERV9DTEFTUyAxCj4+ICsjZGVmaW5lIFZJREVPX0VOSEFOQ0VNRU5UX0NM QVNTIDIKPj4gKyNkZWZpbmUgQ09QWV9FTkdJTkVfQ0xBU1MgMwo+IAo+IENsYXNzZXMgYXJlIGlu IGk5MTVfZHJtLmggYXMgd2VsbC4KPiAKPj4gKyNkZWZpbmUgTE9DQUxfSTkxNV9DT05URVhUX1BB UkFNX1dBVENIRE9HIDB4MTAKPj4gKwo+PiArI2RlZmluZSBSU19OT19FUlJPUsKgwqDCoMKgwqAg MAo+PiArI2RlZmluZSBSU19CQVRDSF9BQ1RJVkXCoCAoMSA8PCAwKQo+PiArI2RlZmluZSBSU19C QVRDSF9QRU5ESU5HICgxIDw8IDEpCj4+ICsjZGVmaW5lIFJTX1VOS05PV07CoMKgwqDCoMKgwqAg KDEgPDwgMikKPiAKPiBXaGF0IGFyZSB0aGVzZT8gTG9vayB1bnVzZWQgaW4gY29kZS4KPiAKPj4g Kwo+PiArI2RlZmluZSBHRVRfUkVTRVRfU1RBVFNfSU9DVEwgRFJNX0lPV1IoRFJNX0NPTU1BTkRf QkFTRSArIDB4MzIsIAo+PiBzdHJ1Y3QgbG9jYWxfZHJtX2k5MTVfcmVzZXRfc3RhdHMpCj4+ICtz dHJ1Y3QgbG9jYWxfZHJtX2k5MTVfcmVzZXRfc3RhdHMgewo+PiArwqDCoMKgIF9fdTMyIGN0eF9p ZDsKPj4gK8KgwqDCoCBfX3UzMiBmbGFnczsKPj4gK8KgwqDCoCBfX3UzMiByZXNldF9jb3VudDsK Pj4gK8KgwqDCoCBfX3UzMiBiYXRjaF9hY3RpdmU7Cj4+ICvCoMKgwqAgX191MzIgYmF0Y2hfcGVu ZGluZzsKPj4gK8KgwqDCoCBfX3UzMiBwYWQ7Cj4+ICt9Owo+PiArCj4+ICtjb25zdCB1aW50NjRf dCB0aW1lb3V0XzEwMG1zID0gMTAwMDAwMDAwTEw7Cj4+ICtpbnQgbnVtOwo+PiArCj4+ICtzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3dhdGNoZG9nX3RpbWVvdXQgewo+PiArwqDCoMKgIHVuaW9uIHsKPj4g K8KgwqDCoMKgwqDCoMKgIHN0cnVjdCB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBFbmdpbmUgY2xhc3MgJiBpbnN0YW5jZSB0byBi ZSBjb25maWd1cmVkIG9yIHF1ZXJpZWQuCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX191MTYgZW5naW5lX2NsYXNzOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBfX3UxNiBlbmdpbmVfaW5zdGFuY2U7Cj4+ICvCoMKgwqDCoMKgwqDC oCB9Owo+PiArwqDCoMKgwqDCoMKgwqAgLyogSW5kZXggYmFzZWQgYWRkcmVzc2luZyBtb2RlICov Cj4+ICvCoMKgwqDCoMKgwqDCoCBfX3UzMiBpbmRleDsKPj4gK8KgwqDCoCB9Owo+PiArwqDCoMKg IC8qIEdQVSBFbmdpbmUgd2F0Y2hkb2cgcmVzZXRzIHRpbWVvdXQgaW4gdXMgKi8KPj4gK8KgwqDC oCBfX3UzMiB0aW1lb3V0X3VzOwo+PiArfTsKPj4gKwo+PiArc3RhdGljIHZvaWQgY2xlYXJfZXJy b3Jfc3RhdGUoaW50IGZkKQo+PiArewo+PiArwqDCoMKgIGludCBkaXI7Cj4+ICsKPj4gK8KgwqDC oCBkaXIgPSBpZ3Rfc3lzZnNfb3BlbihmZCk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZGlyIDwgMCkK Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPiAKPiBpZ3RfcmVxdWlyZShkaXIgPj0gMCkgaWYg dGVzdCByZWxpZXMgb24gdGhpcyBiZWluZyBwcmVzZW50Pwo+IAo+PiArCj4+ICvCoMKgwqAgLyog QW55IHdyaXRlIHRvIHRoZSBlcnJvciBzdGF0ZSBjbGVhcnMgaXQgKi8KPj4gK8KgwqDCoCBpZ3Rf c3lzZnNfc2V0KGRpciwgImVycm9yIiwgIiIpOwo+PiArwqDCoMKgIGNsb3NlKGRpcik7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZTJyaW5nKGludCBmZCwgY29uc3Qgc3RydWN0 IAo+PiBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4g Z2VtX2NsYXNzX2luc3RhbmNlX3RvX2ViX2ZsYWdzKGZkLCBlLT5jbGFzcywgZS0+aW5zdGFuY2Up Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBjb250ZXh0X3NldF93YXRjaGRvZyhpbnQgZmQs IHVuc2lnbmVkIGVuZ2luZV9pZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgY3R4X2lkLCB1bnNpZ25l ZCB0aHJlc2hvbGQpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X2dlbV93YXRjaGRv Z190aW1lb3V0IGVuZ2luZXNfdGhyZXNob2xkW01BWF9FTkdJTkVTXTsKPj4gK8KgwqDCoCBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJnID0gewo+PiArwqDCoMKgwqDCoMKgwqAg LnBhcmFtID0gTE9DQUxfSTkxNV9DT05URVhUX1BBUkFNX1dBVENIRE9HLAo+PiArwqDCoMKgwqDC oMKgwqAgLmN0eF9pZCA9IGN0eF9pZCwKPj4gK8KgwqDCoMKgwqDCoMKgIC5zaXplID0gc2l6ZW9m KGVuZ2luZXNfdGhyZXNob2xkKSwKPj4gK8KgwqDCoMKgwqDCoMKgIC52YWx1ZSA9ICh1aW50NjRf dCkmZW5naW5lc190aHJlc2hvbGQKPj4gK8KgwqDCoCB9Owo+PiArCj4+ICvCoMKgwqAgbWVtc2V0 KCZlbmdpbmVzX3RocmVzaG9sZCwgMCwgc2l6ZW9mKGVuZ2luZXNfdGhyZXNob2xkKSk7Cj4+ICsK Pj4gK8KgwqDCoCBzd2l0Y2ggKGVuZ2luZV9pZCAmIEk5MTVfRVhFQ19SSU5HX01BU0spIHsKPj4g K8KgwqDCoCBjYXNlIEk5MTVfRVhFQ19SRU5ERVI6Cj4+ICvCoMKgwqDCoMKgwqDCoCBlbmdpbmVz X3RocmVzaG9sZFtSRU5ERVJfQ0xBU1NdLnRpbWVvdXRfdXMgPSB0aHJlc2hvbGQ7Cj4gCj4gTG9v a3MgbGlrZSB1QVBJIGlzIGluIHNvbWUgaW50ZXJpbSBzdGF0ZT8gSSB3YXMgZXhwZWN0aW5nIHRv IHNlZSBoZXJlIAo+IHNvbWV0aGluZyBsaWtlOgo+IAo+ICDCoMKgwqDCoGVuZ2luZXNfdGhyZXNo b2xkLmVuZ2luZV9jbGFzcyA9IFJFTkRFUl9DTEFTUzsKPiAgwqDCoMKgwqBlbmdpbmVzX3RocmVz aG9sZC5lbmdpbmVfaW5zdGFuY2UgPSAwOwo+ICDCoMKgwqDCoGVuZ2luZXNfdGhyZXNob2xkLnRp bWVvdXRfdXMgPSB0aHJlc2hvbGQ7Cj4gCj4gQnV0IHlvdSBzZWVtIHRvIGJlIHBhc3NpbmcgYW4g YXJyYXkgb2Ygc3RydWN0cyB3aGljaCBjYXJyeSAKPiBjbGFzcy9pbnN0YW5jZSBkYXRhLCBkb24n dCB1c2UgaXQgYnV0IGluc3RlYWQgaW5mZXIgdGhlIGNsYXNzIGZyb20gdGhlIAo+IHBvc2l0aW9u IGluIHRoZSBhcnJheS4KPiAKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNh c2UgSTkxNV9FWEVDX0JTRDoKPj4gK8KgwqDCoMKgwqDCoMKgIGVuZ2luZXNfdGhyZXNob2xkW1ZJ REVPX0RFQ09ERV9DTEFTU10udGltZW91dF91cyA9IHRocmVzaG9sZDsKPj4gK8KgwqDCoMKgwqDC oMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgSTkxNV9FWEVDX1ZFQk9YOgo+PiArwqDCoMKgwqDC oMKgwqAgZW5naW5lc190aHJlc2hvbGRbVklERU9fRU5IQU5DRU1FTlRfQ0xBU1NdLnRpbWVvdXRf dXMgPSAKPj4gdGhyZXNob2xkOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAg ZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIH0KPj4gKwo+PiAr wqDCoMKgIGdlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyk7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyB2b2lkIGJhdGNoX2J1ZmZlcl9mYWN0b3J5KHVpbnQzMl90IGZkLCB1aW50MzJfdCBjdHhf aWQsIAo+PiB1bnNpZ25lZCBleGVjX2lkLCB1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IG9mZnNl dCwgdWludDMyX3QgKmhhbmRsZSwgCj4+IHVpbnQ2NF90IHRpbWVvdXQsIGludCAqZmVuY2UsIGlu dCBmZW5jZV9pbmRleCkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNf b2JqZWN0MiBvYmpbMl07Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9u X2VudHJ5IHJlbG9jOwo+PiArwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIg ZXhlY2J1ZjsKPj4gK8KgwqDCoCBpZ3Rfc3Bpbl90ICpzcGluID0gTlVMTDsKPj4gK8KgwqDCoCBj b25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+PiArwqDCoMKgIGludCBp ID0gMDsKPj4gKwo+PiArwqDCoMKgIGdlbV9xdWllc2NlbnRfZ3B1KGZkKTsKPj4gKwo+PiArwqDC oMKgIG1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKPj4gK8KgwqDCoCBtZW1z ZXQoJm9iaiwgMCwgc2l6ZW9mKG9iaikpOwo+PiArwqDCoMKgIG1lbXNldCgmcmVsb2MsIDAsIHNp emVvZihyZWxvYykpOwo+PiArCj4+ICvCoMKgwqAgZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3Vz ZXJfcG9pbnRlcihvYmopOwo+PiArCj4+ICvCoMKgwqAgZXhlY2J1Zi5idWZmZXJfY291bnQgPSAy Owo+PiArwqDCoMKgIGV4ZWNidWYuZmxhZ3MgPSBleGVjX2lkIHwgSTkxNV9FWEVDX0ZFTkNFX09V VCA7Cj4+ICsKPj4gK8KgwqDCoCBvYmpbMF0uaGFuZGxlID0gdGFyZ2V0Owo+PiArwqDCoMKgIG9i alsxXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKPj4gKwo+PiArwqDCoMKgIG9ialsx XS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKPj4gK8KgwqDCoCBvYmpbMV0ucmVsb2NzX3B0ciA9IHRv X3VzZXJfcG9pbnRlcigmcmVsb2MpOwo+PiArCj4+ICvCoMKgwqAgcmVsb2MudGFyZ2V0X2hhbmRs ZSA9IG9ialswXS5oYW5kbGU7Cj4+ICvCoMKgwqAgcmVsb2MucmVhZF9kb21haW5zID0gSTkxNV9H RU1fRE9NQUlOX0NPTU1BTkQ7Cj4+ICvCoMKgwqAgcmVsb2Mud3JpdGVfZG9tYWluID0gSTkxNV9H RU1fRE9NQUlOX0NPTU1BTkQ7Cj4+ICvCoMKgwqAgcmVsb2MuZGVsdGEgPSBvZmZzZXQgKiBzaXpl b2YodWludDMyX3QpOwo+PiArCj4+ICvCoMKgwqAgcmVsb2Mub2Zmc2V0ID0gaSAqIHNpemVvZih1 aW50MzJfdCk7Cj4+ICvCoMKgwqAgZ2VtX3dyaXRlKGZkLCBvYmpbMV0uaGFuZGxlLCAwLCAmYmJl LCBzaXplb2YoYmJlKSk7Cj4+ICsKPj4gK8KgwqDCoCBfX3N5bmNfc3luY2hyb25pemUoKTsKPj4g Kwo+PiArwqDCoMKgIGlmIChoYW5kbGUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgICpoYW5kbGUgPSBv YmpbMV0uaGFuZGxlOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+IAo+IElzIHRoaXMgcGF0 aCB1c2VkIGJ5IHRoZSBjYWxsZXJzPwo+IAo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGdl bV9zeW5jKGZkLCBvYmpbMV0uaGFuZGxlKTsKPj4gK8KgwqDCoCBleGVjYnVmLnJzdmQxID0gY3R4 X2lkOwo+PiArwqDCoMKgIGV4ZWNidWYucnN2ZDIgPSAtMTsKPj4gKwo+PiArwqDCoMKgIHNwaW4g PSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIC5kZXBlbmRlbmN5ID0gb2JqWzBdLmhhbmRsZSk7Cj4+ ICvCoMKgwqAgaWd0X3NwaW5fYmF0Y2hfc2V0X3RpbWVvdXQoc3BpbiwgdGltZW91dCk7Cj4+ICvC oMKgwqAgaWd0X2Fzc2VydChnZW1fYm9fYnVzeShmZCwgb2JqWzBdLmhhbmRsZSkpOwo+PiArCj4+ ICvCoMKgwqAgZ2VtX2V4ZWNidWZfd3IoZmQsICZleGVjYnVmKTsKPj4gK8KgwqDCoCBpZ3Rfc3Bp bl9iYXRjaF9mcmVlKGZkLCBzcGluKTsKPj4gKwo+PiArwqDCoMKgIGZlbmNlW2ZlbmNlX2luZGV4 XSA9IGV4ZWNidWYucnN2ZDIgPj4gMzI7Cj4+ICsKPj4gK8KgwqDCoCBnZW1fY2xvc2UoZmQsIG9i alsxXS5oYW5kbGUpOwo+PiArwqDCoMKgIGdlbV9xdWllc2NlbnRfZ3B1KGZkKTsKPj4gK30KPj4g Kwo+PiArc3RhdGljIHVpbnQzMl90IGNyZWF0ZV9jdHhfd2l0aF9wcmlvcml0eShpbnQgZmQsIGlu dCBjdHhfcHJpbykKPj4gK3sKPj4gK8KgwqDCoCB1aW50MzJfdCBjdHggPSBnZW1fY29udGV4dF9j cmVhdGUoZmQpOwo+PiArCj4+ICvCoMKgwqAgc3dpdGNoIChjdHhfcHJpbykgewo+PiArwqDCoMKg IGNhc2UgSElHSDoKPj4gK8KgwqDCoMKgwqDCoMKgIGdlbV9jb250ZXh0X3NldF9wcmlvcml0eShm ZCwgY3R4LCBNQVhfUFJJTyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfaW5mbygiU2V0dGluZyBN QVggcHJpb3JpdHkgJWRcbiIsIGN0eF9wcmlvKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ PiArwqDCoMKgIGNhc2UgTE9XOgo+PiArwqDCoMKgwqDCoMKgwqAgZ2VtX2NvbnRleHRfc2V0X3By aW9yaXR5KGZkLCBjdHgsIE1JTl9QUklPKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9pbmZvKCJT ZXR0aW5nIE1JTiBwcmlvcml0eSAlZFxuIiwgY3R4X3ByaW8pOwo+PiArwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+ICvCoMKgwqAgZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9pbmZvKCJJ Z25vcmluZyBjb250ZXh0IHByaW9yaXR5ICVkXG4iLCBjdHhfcHJpbyk7Cj4+ICvCoMKgwqDCoMKg wqDCoCBicmVhazsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gY3R4Owo+IAo+ IFdoeSBkbyB5b3UgbmVlZCB0aGlzIGhlbHBlciB3aGljaCB0cmFuc2xhdGVzIGFuIGludGVnZXIg dG8gYW4gaW50ZWdlcj8gCj4gQ291bGRuJ3QgeW91IGp1c3QgcGFzcyBpbiB0aGUgcmVhbCBwcmlv cml0eSB0byBzdGFydCB3aXRoPwo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGdlbV9yZXNl dF9zdGF0cyhpbnQgZmQsIGludCBjdHhfaWQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBsb2NhbF9kcm1faTkxNV9yZXNldF9zdGF0cyAqcnMpCj4+ICt7Cj4+ICvCoMKg wqAgbWVtc2V0KHJzLCAwLCBzaXplb2YoKnJzKSk7Cj4+ICvCoMKgwqAgcnMtPmN0eF9pZCA9IGN0 eF9pZDsKPj4gK8KgwqDCoCBycy0+cmVzZXRfY291bnQgPSAtMTsKPj4gKwo+PiArwqDCoMKgIGlm IChkcm1Jb2N0bChmZCwgR0VUX1JFU0VUX1NUQVRTX0lPQ1RMLCBycykpIHsKPj4gK8KgwqDCoMKg wqDCoMKgIHByaW50ZigiZXJyb3I6JWRcbiIsLWVycm5vKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAtZXJybm87Cj4gCj4gTWFrZSBpdCBhc3NlcnQgc3VjY2VzcyBoZXJlIHNpbmNlIGFsbCBj YWxsZXJzIGRvIHRoYXQgYW55d2F5IGFuZCBpdCAKPiBtYXRjaGVzIHRoZSBjb252ZW50aW9uIGZv ciBnZW0gcHJlZml4ZWQgaW9jdGwgaGVscGVycz8KPiAKPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAg aWd0X2Fzc2VydChycy0+cmVzZXRfY291bnQgIT0gLTEpOwo+PiArwqDCoMKgIHJldHVybiAwOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgdW5zaWduZWQgaW5kZXhfdG9fZW5naW5lX2lkKGludCBmZCwg aW50IGluZGV4KQo+PiArewo+PiArwqDCoMKgIHVuc2lnbmVkIGVuZ2luZV9pZCA9IEk5MTVfRVhF Q19SRU5ERVI7Cj4+ICsKPj4gK8KgwqDCoCBzd2l0Y2ggKGluZGV4KSB7Cj4+ICvCoMKgwqAgY2Fz ZSAxOgo+PiArwqDCoMKgwqDCoMKgwqAgZW5naW5lX2lkID0gSTkxNV9FWEVDX1JFTkRFUjsKPj4g K8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgMjoKPj4gK8KgwqDCoMKgwqDC oMKgIGlmIChnZW1faGFzX2JzZDIoZmQpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbmdp bmVfaWQgPSBJOTE1X0VYRUNfQlNEIHwgSTkxNV9FWEVDX0JTRF9SSU5HMTsKPj4gK8KgwqDCoMKg wqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW5naW5lX2lkID0gSTkxNV9F WEVDX0JTRDsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgMzoKPj4g K8KgwqDCoMKgwqDCoMKgIGlmIChnZW1faGFzX2JzZDIoZmQpKQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBlbmdpbmVfaWQgPSBJOTE1X0VYRUNfQlNEIHwgSTkxNV9FWEVDX0JTRF9SSU5HMjsK Pj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW5naW5l X2lkID0gSTkxNV9FWEVDX0JTRDsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKg IGNhc2UgNDoKPj4gK8KgwqDCoMKgwqDCoMKgIGVuZ2luZV9pZCA9IEk5MTVfRVhFQ19WRUJPWDsK Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGRlZmF1bHQ6Cj4+ICvCoMKgwqDC oMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCB9Cj4gCj4gSSBob3BlIHdlIGNhbiBhdm9pZCB0aGlz IG1haW50ZW5hbmNlIGJ1cmRlbiwgd2lsbCBzZWUgbGF0ZXIgaW4gcGF0Y2ggaG93Lgo+IAo+PiAr Cj4+ICvCoMKgwqAgcmV0dXJuIGVuZ2luZV9pZDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQg aW5qZWN0X2hhbmcodWludDMyX3QgZmQsIHVuc2lnbmVkIGVuZ2luZV9pZCwgdWludDMyX3QgCj4+ IGN0eF9pZCzCoCB1bnNpZ25lZCBmbGFncykKPj4gK3sKPj4gK8KgwqDCoCBpZ3RfaGFuZ190IGhh bmc7Cj4+ICvCoMKgwqAgaGFuZyA9IGlndF9oYW5nX2N0eChmZCwgY3R4X2lkLCBlbmdpbmVfaWQs IGZsYWdzKTsKPj4gK8KgwqDCoCBnZW1fc3luYyhmZCwgaGFuZy5zcGluLT5oYW5kbGUpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCBncHVfd2F0Y2hkb2dfbG9uZ19iYXRjaF8yX2NvbnRleHRz KGludCBmZCwgaW50IG5lbmdpbmUsIAo+PiBpbnQgcHJpb19jdHgxLCBpbnQgcmVzZXRfY3R4MSwg aW50IHByaW9fY3R4MiwgaW50IHJlc2V0X2N0eDIpCj4+ICt7Cj4+ICvCoMKgwqAgdWludDMyX3Qg Y3R4WzQ4XTsKPj4gK8KgwqDCoCB1aW50MzJfdCBzY3JhdGNoWzQ4XTsKPj4gK8KgwqDCoCB1bnNp Z25lZCBmbGFncyA9IEhBTkdfQUxMT1dfQ0FQVFVSRTsKPj4gK8KgwqDCoCBjb25zdCB1aW50NjRf dCBiYXRjaF90aW1lb3V0X21zID0gdGltZW91dF8xMDBtcyAqIDM7Cj4gCj4gbXMgc3VmZml4IHVz dWFsbHkgbWVhbnMgdGhlIHVuaXQgc3RvcmVkIGlzIG1zLiBXaGlsZSBoZXJlIGl0IHNlZW1zIHRv IGJlIAo+IHNvbWV0aGluZyBlbHNlLgo+IAo+IGNvbnN0IHVuc2lnbmVkIGxvbmcgYmF0Y2hfdGlt ZW91dF9tcyA9IDMwMDsKPiBjb25zdCB1bnNpZ25lZCBsb25nIGJhdGNoX3RpbWVvdXRfdXMgPSAz MDBlMzsKPiBjb25zdCB1bnNpZ25lZCBsb25nIGJhdGNoX3RpbWVvdXRfbnMgPSAzMDBlNjsKPiAK PiBOb3Qgc3VyZSB3aGljaCBvbmUgeW91IHdhbnQuIFByb2JhYmx5IHVzZSBtcyBhbmQgc2NhbGUg dXAgYXQgdGhlIHVzZSBzaXRlLgo+IAo+PiArwqDCoMKgIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqZTsKPj4gK8KgwqDCoCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9u X2VuZ2luZTIgKmUyOwo+PiArwqDCoMKgIGludCBpID0gMCwgaW5kZXggPSAwLCBlbmdpbmVfaWQg PSAwLCBjdHhfY250ID0gMDsKPj4gK8KgwqDCoCBpbnQgKmZlbmNlID0gMCwgYWN0aXZlX2NvdW50 ID0gMDsKPj4gK8KgwqDCoCBzdHJ1Y3QgbG9jYWxfZHJtX2k5MTVfcmVzZXRfc3RhdHMgcnM7Cj4+ ICsKPj4gK8KgwqDCoCBpZ3RfcmVxdWlyZShuZW5naW5lKTsKPj4gKwo+PiArwqDCoMKgIGZlbmNl ID0gKGludCAqKW1hbGxvYyhzaXplb2YoaW50KSAqIDQ4KTsKPj4gKwo+PiArwqDCoMKgIGlmICgh ZmVuY2UpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9pbmZvKCJPdXQgb2YgbWVtb3J5XG4iKTsK Pj4gK8KgwqDCoMKgwqDCoMKgIGV4aXQoMSk7Cj4+ICvCoMKgwqAgfQo+IAo+IFJlcGxhY2Ugd2l0 aCBpZ3RfYXNzZXJ0KGZlbmNlKS4KPiAKPj4gKwo+PiArwqDCoMKgIC8qIEludGlhbGl6ZXMgcmFu ZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KPj4gK8KgwqDCoCBzcmFuZCgodW5zaWduZWQpIHRpbWUo TlVMTCkpOwo+PiArCj4+ICvCoMKgwqAgLyogVGhlIG91dGVyIGxvb3BlciBpcyBjdHgxIGFuZCB0 aGUgaW5uZXIgbG9vcGVyIGlzIGN0eDIKPj4gK8KgwqDCoMKgICogQm90aCBjb250ZXh0cyBjYW4g c2V0IHRoZWlyIHByaW9yaXR5LCBjcmVhdGUgd29yaywgYW5kIGNhbmNlbCAKPj4gdGhlbXNlbHZl cwo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFu Y2UoZmQsIGUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICggc3RyY21wKGUtPm5hbWUsICJiY3Mw IikgPT0gMCApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+IAo+IFVzZSAt RU5PREVWIG9yIC1FSU5WQUwgZnJvbSBjb250ZXh0X3NldF93YXRjaGRvZyB0byBza2lwLgo+IAo+ PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBzY3JhdGNoW2N0eF9jbnRdID0gZ2VtX2NyZWF0ZShmZCwg NDA5Nik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpbmRleCA9IHJhbmQoKSAlIDQgKyAxOwo+PiArwqDC oMKgwqDCoMKgwqAgZW5naW5lX2lkID0gaW5kZXhfdG9fZW5naW5lX2lkKGZkLCBpbmRleCk7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIGdldCBjdXJyZW50IGJhdGNoX2FjdGl2ZSBjb3VudCAq Lwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2Fzc2VydF9lcShnZW1fcmVzZXRfc3RhdHMoZmQsIDAs ICZycyksIDApOwo+PiArwqDCoMKgwqDCoMKgwqAgYWN0aXZlX2NvdW50ID0gcnMuYmF0Y2hfYWN0 aXZlOwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2Fzc2VydF9lcShycy5iYXRjaF9hY3RpdmUsIGFj dGl2ZV9jb3VudCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGN0eFtjdHhfY250XSA9IGNyZWF0 ZV9jdHhfd2l0aF9wcmlvcml0eShmZCwgcHJpb19jdHgxKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJh dGNoX2J1ZmZlcl9mYWN0b3J5KGZkLCBjdHhbY3R4X2NudF0sIGVuZ2luZV9pZCwgCj4+IHNjcmF0 Y2hbY3R4X2NudF0sIDAsIE5VTEwsIGJhdGNoX3RpbWVvdXRfbXMsIGZlbmNlLCBjdHhfY250KTsK Pj4gK8KgwqDCoMKgwqDCoMKgIGNvbnRleHRfc2V0X3dhdGNoZG9nKGZkLCBlbmdpbmVfaWQsIGN0 eFtjdHhfY250XSwgCj4+IFdBVENIRE9HX1RIUkVTSE9MRCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBz bGVlcCgxKTsKPiAKPiBXaGF0J3MgdGhlIHNsZWVwIGZvcj8gSWYgdW5hdm9pZGFibGUgYXQgbGVh c3QgbmVlZHMgYSBjb21tZW50Lgo+IAo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmVzZXRf Y3R4MSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjbGVhcl9lcnJvcl9zdGF0ZShmZCk7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluamVjdF9oYW5nKGZkLCBlbmdpbmVfaWQsIGN0 eFtjdHhfY250XSwgZmxhZ3MpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhY3RpdmVfY291 bnQrKzsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLyogY2hl Y2sgYmF0Y2hfYWN0aXZlIGNvdW50IG9uY2UgYWdhaW4gYWZ0ZXIgdGhlIGhhbmcgKi8KPj4gK8Kg wqDCoMKgwqDCoMKgIGlndF9hc3NlcnRfZXEoZ2VtX3Jlc2V0X3N0YXRzKGZkLCAwLCAmcnMpLCAw KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9hc3NlcnRfZXEocnMuYmF0Y2hfYWN0aXZlLCBhY3Rp dmVfY291bnQpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBjdHhfY250Kys7Cj4+ICvCoMKgwqDC oMKgwqDCoCBpID0gMTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgZm9yX2VhY2hfZW5naW5lX2Ns YXNzX2luc3RhbmNlKGZkLCBlMikgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIHN0 cmNtcChlLT5uYW1lLCAiYmNzMCIpID09IDAgKQo+IAo+IGUyLCBidXQgcmVtb3ZlIGl0IGFsdG9n ZXRoZXIgYXMgc2FpZCBhYm92ZS4KPiAKPiBJIGRvbid0IGdldCB3aGF0IGlzIHRoZSBwdXJwb3Nl IG9mIHR3byBmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgCj4gbG9vcHMgd2hlbiBuZWl0 aGVyIGUgb3IgZTIgYXBwZWFyIHRvIGJlIHVzZWQ/Cj4gCj4gU2luY2UgZWl0aGVyIEkgYW0gbWlz c2luZyBzb21ldGhpbmcgY3JpdGljYWwgb3IgdGhlIHRlc3QgcmVhbGx5IGlzIHZlcnkgCj4gY29u ZnVzZWQsIHVudGlsIGNsYXJpZmllZCwgSSBhbSBza2lwcGluZyBhIGJpdCBsb3dlciBkb3duLgo+ IAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNjcmF0Y2hbY3R4X2NudF0gPSBnZW1fY3JlYXRlKGZkLCA0 MDk2KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW5naW5lX2lkID0gaW5kZXhfdG9fZW5n aW5lX2lkKGZkLCBpKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBnZXQgY3Vy cmVudCBiYXRjaF9hY3RpdmUgY291bnQgKi8KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0 X2Fzc2VydF9lcShnZW1fcmVzZXRfc3RhdHMoZmQsIDAsICZycyksIDApOwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhY3RpdmVfY291bnQgPSBycy5iYXRjaF9hY3RpdmU7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlndF9hc3NlcnRfZXEocnMuYmF0Y2hfYWN0aXZlLCBhY3RpdmVfY291 bnQpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eFtjdHhfY250XSA9IGNyZWF0 ZV9jdHhfd2l0aF9wcmlvcml0eShmZCwgcHJpb19jdHgyKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYmF0Y2hfYnVmZmVyX2ZhY3RvcnkoZmQsIGN0eFtjdHhfY250XSwgZW5naW5lX2lkLCAK Pj4gc2NyYXRjaFtjdHhfY250XSwgMCwgTlVMTCwgYmF0Y2hfdGltZW91dF9tcywgZmVuY2UsIGN0 eF9jbnQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250ZXh0X3NldF93YXRjaGRvZyhm ZCwgZW5naW5lX2lkLCBjdHhbY3R4X2NudF0sIAo+PiBXQVRDSERPR19USFJFU0hPTEQpOwo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXNldF9jdHgyKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2xlYXJfZXJyb3Jfc3RhdGUoZmQpOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluamVjdF9oYW5nKGZkLCBlbmdpbmVfaWQsIGN0eFtj dHhfY250XSwgZmxhZ3MpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFjdGl2 ZV9jb3VudCsrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLyogY2hlY2sgYmF0Y2hfYWN0aXZlIGNvdW50IG9uY2UgYWdhaW4gYWZ0 ZXIgdGhlIGhhbmcgKi8KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2Fzc2VydF9lcShn ZW1fcmVzZXRfc3RhdHMoZmQsIDAsICZycyksIDApOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpZ3RfYXNzZXJ0X2VxKHJzLmJhdGNoX2FjdGl2ZSwgYWN0aXZlX2NvdW50KTsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHhfY250Kys7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGkrKzsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDC oCBmb3IgKGkgPSAwOyBpIDwgY3R4X2NudDsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBjbG9z ZShmZW5jZVtpXSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBnZW1fY29udGV4dF9kZXN0cm95KGZkLCBj dHhbaV0pOwo+PiArwqDCoMKgwqDCoMKgwqAgZ2VtX2Nsb3NlKGZkLCBzY3JhdGNoW2ldKTsKPj4g K8KgwqDCoCB9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGdwdV93YXRjaG9kZ19oYW5nX2xv bmdfYmF0Y2hfc2luZ2xlX2VuZ2luZShpbnQgZmQsIGNvbnN0IAo+PiBjaGFyICpuYW1lKQo+PiAr ewo+PiArwqDCoMKgIHVpbnQzMl90IGN0eFsxNl07Cj4+ICvCoMKgwqAgdWludDMyX3Qgc2NyYXRj aFsxNl07Cj4+ICvCoMKgwqAgaW50ICpmZW5jZTsKPj4gK8KgwqDCoCBjb25zdCBzdHJ1Y3QgaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmU7Cj4+ICvCoMKgwqAgdW5zaWduZWQgbmVuZ2luZSA9IDA7 Cj4+ICvCoMKgwqAgdW5zaWduZWQgZW5naW5lX2lkID0gMDsKPj4gK8KgwqDCoCBpbnQgYWN0aXZl X2NvdW50ID0gMDsKPj4gK8KgwqDCoCBzdHJ1Y3QgbG9jYWxfZHJtX2k5MTVfcmVzZXRfc3RhdHMg cnM7Cj4+ICvCoMKgwqAgaW50IGk7Cj4+ICvCoMKgwqAgdW5zaWduZWQgZmxhZ3MgPSBIQU5HX0FM TE9XX0NBUFRVUkU7Cj4+ICvCoMKgwqAgY29uc3QgdWludDY0X3QgYmF0Y2hfdGltZW91dF9tcyA9 IHRpbWVvdXRfMTAwbXMgKiA0Owo+PiArCj4+ICvCoMKgwqAgZmVuY2UgPSAoaW50ICopbWFsbG9j KHNpemVvZihpbnQpKjE2KTsKPj4gKwo+PiArwqDCoMKgIGlmICghZmVuY2UpIHsKPj4gK8KgwqDC oMKgwqDCoMKgIGlndF9pbmZvKCJPdXQgb2YgbWVtb3J5XG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKg IGV4aXQoMSk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgZm9yX2VhY2hfZW5naW5lX2Ns YXNzX2luc3RhbmNlKGZkLCBlKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIHN0cmNtcChlLT5u YW1lLCAiYmNzMCIpID09IDAgKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsK Pj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgZW5naW5lX2lkID0gZTJyaW5nKGZkLCBlKTsKPj4gKwo+ PiArwqDCoMKgwqDCoMKgwqAgc2NyYXRjaFtuZW5naW5lXSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYp Owo+PiArwqDCoMKgwqDCoMKgwqAgY3R4W25lbmdpbmVdID0gY3JlYXRlX2N0eF93aXRoX3ByaW9y aXR5KGZkLCAtMSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIGdldCBjdXJyZW50IGJhdGNo X2FjdGl2ZSBjb3VudCAqLwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2Fzc2VydF9lcShnZW1fcmVz ZXRfc3RhdHMoZmQsIDAsICZycyksIDApOwo+PiArwqDCoMKgwqDCoMKgwqAgYWN0aXZlX2NvdW50 ID0gcnMuYmF0Y2hfYWN0aXZlOwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2Fzc2VydF9lcShycy5i YXRjaF9hY3RpdmUsIGFjdGl2ZV9jb3VudCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIGNy ZWF0ZSBzb21lIHdvcmsgb24gdGhpcyBlbmdpbmUgdXNpbmcgdGhlIGFib3ZlIGN0eCovCj4+ICvC oMKgwqDCoMKgwqDCoCBiYXRjaF9idWZmZXJfZmFjdG9yeShmZCwgY3R4W25lbmdpbmVdLCBlbmdp bmVfaWQsIAo+PiBzY3JhdGNoW25lbmdpbmVdLCAwLCBOVUxMLCBiYXRjaF90aW1lb3V0X21zLCBm ZW5jZSwgbmVuZ2luZSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIHNldCB0aGUgZ3B1IHdh dGNoZG9nIHRpbWVvdXQgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGNvbnRleHRfc2V0X3dhdGNoZG9n KGZkLCBlbmdpbmVfaWQsIGN0eFtuZW5naW5lXSwgCj4+IFdBVENIRE9HX1RIUkVTSE9MRCk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBjbGVhcl9lcnJvcl9zdGF0ZShmZCk7Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgIC8qCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogZ2l2ZSBlbm91Z2ggdGltZSBmb3IgdGhl IGJhdGNoIGJ1ZmZlciB0byBydW4KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKi8KPj4gK8KgwqDCoMKg wqDCoMKgIG5hbm9zbGVlcCgmKHN0cnVjdCB0aW1lc3BlYyl7IC50dl9zZWMgPSAwLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLnR2X25zZWMg PSBiYXRjaF90aW1lb3V0X21zICogMiB9LCBOVUxMKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAg LyogY3JlYXRlIHNvbWUgd29yayBvbiB0aGlzIGVuZ2luZSB1c2luZyB0aGUgYWJvdmUgY3R4Ki8K Pj4gK8KgwqDCoMKgwqDCoMKgIGJhdGNoX2J1ZmZlcl9mYWN0b3J5KGZkLCBjdHhbbmVuZ2luZV0s IGVuZ2luZV9pZCwgCj4+IHNjcmF0Y2hbbmVuZ2luZV0sIDAsIE5VTEwsIGJhdGNoX3RpbWVvdXRf bXMsIGZlbmNlLCBuZW5naW5lKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGNvbnRleHRfc2V0X3dhdGNo ZG9nKGZkLCBlbmdpbmVfaWQsIGN0eFtuZW5naW5lXSwgCj4+IFdBVENIRE9HX1RIUkVTSE9MRCk7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBjbGVhcl9lcnJvcl9zdGF0ZShmZCk7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgIC8qIGNhbmNlbCBvbmx5IHRoZSBiYXRjaCByZXF1ZXN0ZWQgKi8KPj4gK8KgwqDC oMKgwqDCoMKgIGlmICggc3RyY21wKGUtPm5hbWUsIG5hbWUpID09IDAgKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGluamVjdF9oYW5nKGZkLCBlbmdpbmVfaWQsIGN0eFtuZW5naW5lXSwg ZmxhZ3MpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhY3RpdmVfY291bnQrKzsKPj4gK8Kg wqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLyogY2hlY2sgYmF0Y2hfYWN0 aXZlIGNvdW50IG9uY2UgYWdhaW4gYWZ0ZXIgdGhlIGhhbmcgKi8KPj4gK8KgwqDCoMKgwqDCoMKg IGlndF9hc3NlcnRfZXEoZ2VtX3Jlc2V0X3N0YXRzKGZkLCAwLCAmcnMpLCAwKTsKPj4gK8KgwqDC oMKgwqDCoMKgIGFjdGl2ZV9jb3VudCA9IHJzLmJhdGNoX2FjdGl2ZTsKPj4gK8KgwqDCoMKgwqDC oMKgIGlndF9hc3NlcnRfZXEocnMuYmF0Y2hfYWN0aXZlLCBhY3RpdmVfY291bnQpOwo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoCBuZW5naW5lKys7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAg Zm9yIChpID0gMDsgaSA8IG5lbmdpbmU7IGkrKykgewo+PiArwqDCoMKgwqDCoMKgwqAgY2xvc2Uo ZmVuY2VbaV0pOwo+PiArwqDCoMKgwqDCoMKgwqAgZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4 W2ldKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGdlbV9jbG9zZShmZCwgc2NyYXRjaFtpXSk7Cj4+ICvC oMKgwqAgfQo+PiArfQo+PiArCj4+ICtpZ3RfbWFpbgo+PiArewo+PiArwqDCoMKgIGludCBmZDsK Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgbmVuZ2luZSA9IDA7Cj4+ICvCoMKgwqAgdW5zaWduZWQg aW50IGVuZ2luZTsKPj4gK8KgwqDCoCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZTIgKmU7Cj4+ICsKPj4gK8KgwqDCoCBpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4+ICsKPj4g K8KgwqDCoCBpZ3RfZml4dHVyZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBmZCA9IGRybV9vcGVuX2Ry aXZlcihEUklWRVJfSU5URUwpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3JlcXVpcmVfZ2VtKGZk KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBl bmdpbmUpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5lbmdpbmUrKzsKPj4gK8KgwqDCoMKg wqDCoMKgIGlndF9yZXF1aXJlKG5lbmdpbmUpOwo+IAo+IERvIHdlIGhhdmUgR1BVcyB3aXRoIG5v IGVuZ2luZXM/Cj4gCj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgaWd0X3N1YnRlc3RfZ3Jv dXAgewo+PiArCj4+ICsgICAgICAgIAo+PiBpZ3Rfc3VidGVzdF9mKCJncHUtd2F0Y2hkb2ctbG9u Zy1iYXRjaC1sb3ctcHJpby1jdHgxLXJlc2V0LWN0eDItaGlnaC1wcmlvLWV4ZWN1dGUiKSAKPj4g ewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgcHJpb19jdHgxID0gTE9XOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgcHJpb19jdHgyID0gSElHSDsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaW50IHJlc2V0X2N0eDEgPSBUUlVFOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpbnQgcmVzZXRfY3R4MiA9IEZBTFNFOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBn cHVfd2F0Y2hkb2dfbG9uZ19iYXRjaF8yX2NvbnRleHRzKGZkLCBuZW5naW5lLCAKPj4gcHJpb19j dHgxLCByZXNldF9jdHgxLCBwcmlvX2N0eDIsIHJlc2V0X2N0eDIpOwo+PiArwqDCoMKgwqDCoMKg wqAgfQo+IAo+IFRoaXMgaXMga2luZCBvZiB2ZXJib3NlLiBJIHJlY29tbWVuZCBvdXQgdXN1YWwg cGF0dGVybiBhbG9uZyB0aGUgbGluZXMgb2Y6Cj4gCj4gc3RydWN0IHsKPiAgwqDCoMKgwqBjaGFy ICpuYW1lOwo+ICDCoMKgwqDCoGludCBwcmlvWzJdOwo+ICDCoMKgwqDCoGJvb2wgcmVzZXRbMl07 Cj4gfSB0ZXN0c1tdID0gewo+ICDCoMKgwqDCoHsgImNoYW5nZSBtZSIsIHswLCAwfSwge2ZhbHNl LCBmYWxzZX0gfSwKPiAgwqDCoMKgwqB7ICJjaGFuZ2UgbWUiLCB7LTEsIDB9LCB7dHJ1ZSwgZmFs c2V9IH0sCj4gIMKgwqDCoMKgLi4uCj4gfTsKPiAKPiBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RSh0ZXN0cyk7IGkrKykgewo+ICDCoMKgwqDCoGlndF9zdWJ0ZXN0X2YoImxvbmctYmF0Y2gtJXMi LCB0ZXN0c1tpXS0+bmFtZSkKPiAgwqDCoMKgwqDCoMKgwqAgbG9uZ19iYXRjaChmZCwgdGVzdHNb aV0ucHJpb1swXSwgdGVzdHNbaV0uY3R4WzBdLCAuLi4pOwo+IH0KPiAKPiBTbyB5b3UgcnVuIGFs bCBzdWJ0ZXN0cyBmcm9tIGEgc2luZ2xlIGxvb3AuCgpDbG9zZSBlbWFpbCB0b28gZWFybHksIHRo ZXJlIHdlcmUgbW9yZSBjb21tZW50cyBiZWxvdzoKCj4+ICsKPj4gKyAgICAgICAgCj4+IGlndF9z dWJ0ZXN0X2YoImdwdS13YXRjaGRvZy1sb25nLWJhdGNoLWhpZ2gtcHJpby1jdHgxLXJlc2V0LWN0 eDItbG93LXByaW8tZXhlY3V0ZSIpIAo+PiB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlu dCBwcmlvX2N0eDEgPSBISUdIOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgcHJpb19j dHgyID0gTE9XOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgcmVzZXRfY3R4MSA9IFRS VUU7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCByZXNldF9jdHgyID0gRkFMU0U7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdwdV93YXRjaGRvZ19sb25nX2JhdGNoXzJfY29udGV4 dHMoZmQsIG5lbmdpbmUsIAo+PiBwcmlvX2N0eDEsIHJlc2V0X2N0eDEsIHByaW9fY3R4MiwgcmVz ZXRfY3R4Mik7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gKyAgICAgICAgCj4+IGlndF9z dWJ0ZXN0X2YoImdwdS13YXRjaGRvZy1sb25nLWJhdGNoLWN0eDEtcmVzZXQtY3R4Mi1leGVjdXRl Iikgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgcHJpb19jdHgxID0gLTE7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBwcmlvX2N0eDIgPSAtMTsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaW50IHJlc2V0X2N0eDEgPSBUUlVFOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpbnQgcmVzZXRfY3R4MiA9IEZBTFNFOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBn cHVfd2F0Y2hkb2dfbG9uZ19iYXRjaF8yX2NvbnRleHRzKGZkLCBuZW5naW5lLCAKPj4gcHJpb19j dHgxLCByZXNldF9jdHgxLCBwcmlvX2N0eDIsIHJlc2V0X2N0eDIpOwo+PiArwqDCoMKgwqDCoMKg wqAgfQo+PiArCj4+ICsgICAgICAgIAo+PiBpZ3Rfc3VidGVzdF9mKCJncHUtd2F0Y2hkb2ctbG9u Zy1iYXRjaC1jdHgxLWV4ZWN1dGUtY3R4Mi1yZXNldCIpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaW50IHByaW9fY3R4MSA9IC0xOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQg cHJpb19jdHgyID0gLTE7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCByZXNldF9jdHgx ID0gRkFMU0U7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCByZXNldF9jdHgyID0gVFJV RTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3B1X3dhdGNoZG9nX2xvbmdfYmF0Y2hfMl9j b250ZXh0cyhmZCwgbmVuZ2luZSwgCj4+IHByaW9fY3R4MSwgcmVzZXRfY3R4MSwgcHJpb19jdHgy LCByZXNldF9jdHgyKTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArICAgICAgICAKPj4g aWd0X3N1YnRlc3RfZigiZ3B1LXdhdGNoZG9nLWxvbmctYmF0Y2gtY3R4MS1leGVjdXRlLWN0eDIt ZXhlY3V0ZSIpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IHByaW9fY3R4MSA9IC0x Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgcHJpb19jdHgyID0gLTE7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGludCByZXNldF9jdHgxID0gRkFMU0U7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGludCByZXNldF9jdHgyID0gRkFMU0U7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGdwdV93YXRjaGRvZ19sb25nX2JhdGNoXzJfY29udGV4dHMoZmQsIG5lbmdpbmUsIAo+ PiBwcmlvX2N0eDEsIHJlc2V0X2N0eDEsIHByaW9fY3R4MiwgcmVzZXRfY3R4Mik7Cj4+ICvCoMKg wqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZm9yX2VhY2hfZW5n aW5lX2NsYXNzX2luc3RhbmNlKGUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3N1 YnRlc3RfZ3JvdXAgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9maXh0 dXJlIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnZW1fcmVxdWlyZV9lbmdp bmUoZmQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlLT5jbGFz cywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGUtPmluc3RhbmNl KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC8qIG5vIHN1cHBvcnQgZm9yIGdwdSB3YXRjaGRvZyBvbiBiY3MwICovCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChzdHJjbXAoZS0+bmFtZSwgImJjczAiKSA9PSAwKQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+IAo+IFNvZnR3YXJl IGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0IGl0LiBTbyBkb24ndCBza2lwIGhlcmUgYnV0IHNr aXAgaW4gCj4gdGhlIHN1YnRlc3QgaWYgeW91IGdldCAtRU5PREVWIHdoZW4geW91IHRyeSB0byBj b25maWd1cmUgaXQuCgpIZXJlIF4KCj4+ICsKPj4gKyAgICAgICAgICAgICAgICAgICAgCj4+IGln dF9zdWJ0ZXN0X2YoImdwdS13YXRjaGRvZy1sb25nLWJhdGNoLXNpbmdsZS1lbmdpbmUtcmVzZXQt JXMiLCBlLT5uYW1lKQo+IAo+IERvbid0IHByZWZpeCBhbGwgdGVzdHMgd2l0aCBncHUtd2F0Y2hk b2csIGl0IGlzIHZlcnkgdmVyYm9zZSB0byByZWFkIGFuZCAKPiB0aGUgdGVzdCBpdHNlbGYgaXMg Y2FsbGVkIGdlbV93YXRjaGRvZyBhbHJlYWR5LgoKQW5kIGhlcmUgXgoKSSBkaWQgbm90IHJlYWxs eSBnZXQgdG8gZGlnIGludG8gdGhlIHRlc3QgY2FzZSBjb3ZlcmFnZSBkdWUgYWxsIHRoZSAKbm9p c2UgYW5kIGNvbmZ1c2lvbiB3aXRoIGVuZ2luZSBpdGVyYXRpb24uCgpSZWdhcmRzLAoKVHZydGtv Cgo+PiArICAgICAgICAgICAgICAgICAgICAgICAgCj4+IGdwdV93YXRjaG9kZ19oYW5nX2xvbmdf YmF0Y2hfc2luZ2xlX2VuZ2luZShmZCwgZS0+bmFtZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBp Z3RfZml4dHVyZSB7Cj4+ICvCoMKgwqAgY2xvc2UoZmQpOwo+PiArwqDCoMKgIH0KPj4gK30KPj4g ZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKPj4gaW5k ZXggNTE2N2E2Yy4uYjI4MWI3NSAxMDA2NDQKPj4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKPj4g KysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPj4gQEAgLTIxMCw2ICsyMTAsNyBAQCBpOTE1X3Byb2dz ID0gWwo+PiDCoMKgwqDCoMKgICdnZW1fdW5yZWZfYWN0aXZlX2J1ZmZlcnMnLAo+PiDCoMKgwqDC oMKgICdnZW1fdXNlcnB0cl9ibGl0cycsCj4+IMKgwqDCoMKgwqAgJ2dlbV93YWl0JywKPj4gK8Kg wqDCoMKgwqDCoMKgICdnZW1fd2F0Y2hkb2cnLAo+PiDCoMKgwqDCoMKgICdnZW1fd29ya2Fyb3Vu ZHMnLAo+PiDCoMKgwqDCoMKgICdnZW1fd3JpdGVfcmVhZF9yaW5nX3N3aXRjaCcsCj4+IMKgwqDC oMKgwqAgJ2k5MTVfZmJfdGlsaW5nJywKPj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pZ3QtZGV2