From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x543.google.com (mail-ed1-x543.google.com [IPv6:2a00:1450:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9F1CB89D9A for ; Wed, 17 Apr 2019 11:40:22 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id i13so9985619edf.11 for ; Wed, 17 Apr 2019 04:40:22 -0700 (PDT) Date: Wed, 17 Apr 2019 13:40:18 +0200 From: Daniel Vetter Message-ID: <20190417114018.GQ13337@phenom.ffwll.local> References: <20190416232548.13755-1-lyude@redhat.com> <20190416232548.13755-4-lyude@redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190416232548.13755-4-lyude@redhat.com> Subject: Re: [igt-dev] [PATCH i-g-t v2 3/8] lib: Stop using assert() for runtime checks 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: Lyude Cc: igt-dev@lists.freedesktop.org List-ID: T24gVHVlLCBBcHIgMTYsIDIwMTkgYXQgMDc6MjU6NDNQTSAtMDQwMCwgTHl1ZGUgd3JvdGU6Cj4g RnJvbTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KPiAKPiBJbiB0aGUgcHJvY2VzcyBv ZiB0cnlpbmcgdG8gZ2V0IGFuIHVwIHRvIGRhdGUgdmVyc2lvbiBvZiBpZ3QgcGFja2FnZWQKPiBm b3IgRmVkb3JhIEkgZGlzY292ZXJlZCB0aGF0IGlmIGlndCB3YXMgYnVpbHQgd2l0aCAtRGJfbmRl YnVnPXRydWUsIGEKPiBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSB0ZXN0IGluZnJhc3RydWN0 dXJlIHVuaXQgdGVzdHMgd291bGQgc3RhcnQKPiBmYWlsaW5nOgo+IAo+ICAgMS8yNjUgbGliOiBp Z3RfYXNzZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgIE9LICAgICAgIDAuMTEgcwo+ICAgMi8y NjUgbGliOiBpZ3RfY2FuX2ZhaWwgICAgICAgICAgICAgICAgICAgICAgIE9LICAgICAgIDAuMDgg cwo+ICAgMy8yNjUgbGliOiBpZ3RfY2FuX2ZhaWxfc2ltcGxlICAgICAgICAgICAgICAgIE9LICAg ICAgIDAuMDggcwo+ICAgNC8yNjUgbGliOiBpZ3RfZXhpdF9oYW5kbGVyICAgICAgICAgICAgICAg ICAgIE9LICAgICAgIDAuMDUgcwo+ICAgNS8yNjUgbGliOiBpZ3RfZm9yayAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZBSUwgICAgIDAuMDUgcyAoa2lsbGVkIGJ5IHNpZ25hbCA5IFNJR0tJTEwp Cj4gICA2LzI2NSBsaWI6IGlndF9mb3JrX2hlbHBlciAgICAgICAgICAgICAgICAgICAgT0sgICAg ICAgMC40MiBzCj4gICA3LzI2NSBsaWI6IGlndF9oZG1pX2luamVjdCAgICAgICAgICAgICAgICAg ICAgT0sgICAgICAgMC4wNSBzCj4gICA4LzI2NSBsaWI6IGlndF9saXN0X29ubHkgICAgICAgICAg ICAgICAgICAgICAgT0sgICAgICAgMC4wMSBzCj4gICA5LzI2NSBsaWI6IGlndF9pbnZhbGlkX3N1 YnRlc3RfbmFtZSAgICAgICAgICAgT0sgICAgICAgMC4wNSBzCj4gIDEwLzI2NSBsaWI6IGlndF9u b19leGl0ICAgICAgICAgICAgICAgICAgICAgICAgT0sgICAgICAgMC4wNCBzCj4gIDExLzI2NSBs aWI6IGlndF9zZWdmYXVsdCAgICAgICAgICAgICAgICAgICAgICAgT0sgICAgICAgMC4zOCBzCj4g IDEyLzI2NSBsaWI6IGlndF9zaW11bGF0aW9uICAgICAgICAgICAgICAgICAgICAgT0sgICAgICAg MC4wMiBzCj4gIDEzLzI2NSBsaWI6IGlndF9zdGF0cyAgICAgICAgICAgICAgICAgICAgICAgICAg T0sgICAgICAgMC4wNCBzCj4gIDE0LzI2NSBsaWI6IGlndF9zdWJ0ZXN0X2dyb3VwICAgICAgICAg ICAgICAgICAgT0sgICAgICAgMC4wMyBzCj4gIDE1LzI2NSBsaWI6IGlndF9ub19zdWJ0ZXN0ICAg ICAgICAgICAgICAgICAgICAgU0tJUCAgICAgMC4wMiBzCj4gIDE2LzI2NSBsaWI6IGlndF9zaW1w bGVfdGVzdF9zdWJ0ZXN0cyAgICAgICAgICAgVU5FWFBFQ1RFRFBBU1MgMC4wMiBzCj4gIDE3LzI2 NSBsaWI6IGlndF90aW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURGQUlMIDEu MDIgcwo+IAo+IFdoaWNoIGFwcGVhcmVkIHRvIHN0ZW0gZnJvbSB0aGUgZmFjdCB0aGF0IC1EYl9u ZGVidWc9dHJ1ZSB3b3VsZCBzdHJpcAo+IGFzc2VydCgpIGNhbGxzLiBXaGlsZSBvbiBhIGZpcnN0 IGdsYW5jZSBvZiBsaWIvdGVzdHMvaWd0X3Rlc3RzX2NvbW1vbi5oCj4gb25lIHdvdWxkIGFzc3Vt ZSB0aGF0IHRoZSBvbmx5IHVzZXIgb2YgYXNzZXJ0KCkgd2FzIHRoZSB0ZXN0Cj4gaW5mcmFzdHJ1 Y3R1cmUgdW5pdCB0ZXN0cyB0aGVtc2VsdmVzLCBpdCB0dXJucyBvdXQgd2UndmUgYWN0dWFsbHkg YmVlbgo+IHVzaW5nIHRoaXMgaW4gbXVsdGlwbGUgc3BvdHMgdGhhdCBzZWVtIHRvIGV4cGVjdCBh biB1bmNvbmRpdGlvbmFsCj4gcnVudGltZSBjaGVjay4KPiAKPiBTbyBpbiBvcmRlciB0byBmaXgg dGhpcywgd2UgaW50cm9kdWNlIGlndF9pbnRlcm5hbF9hc3NlcnQoKS4gVGhlIHB1cnBvc2UKPiBv ZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIHByb3ZpZGUgc2ltcGxlIHJ1bnRpbWUgZXJyb3ItY2hlY2tp bmcgZm9yCj4gY29uZGl0aW9ucyB0aGF0IHdhcnJhbnQgYWJvcnQoKWluZyBJR1QgdW5kZXIgYW55 IGNpcmN1bXN0YW5jZXMsIGFuZCB0bwo+IHByb3ZpZGUgYSBpbnRlcm5hbF9hc3NlcnQoKSByZXBs YWNlbWVudCBmb3Igb3VyIHRlc3QgaW5mcmFzdHJ1Y3R1cmUKPiB0ZXN0cyB0byB1c2UuIFRoZW4s IHJlbW92ZSBhbGwgb2YgdGhlIGFzc2VydCgpIHVzYWdlcyBpbiBsaWIvdGVzdHMvKgo+IGFsb25n IHdpdGggYW55IG9mIHRoZSBhc3NlcnQoKSBjYWxscyBpbiBsaWIvaWd0X2NvcmUuYyB0aGF0IGFm ZmVjdCB0ZXN0Cj4gYmVoYXZpb3IuCj4gCj4gU2lnbmVkLW9mZi1ieTogTHl1ZGUgUGF1bCA8bHl1 ZGVAcmVkaGF0LmNvbT4KPiAtLS0KPiAgbGliL2lndF9jb3JlLmMgICAgICAgICAgICAgICAgICAg ICAgIHwgMjQgKysrKystLS0tLS0KPiAgbGliL2lndF9jb3JlLmggICAgICAgICAgICAgICAgICAg ICAgIHwgMTggKysrKysrKysrCj4gIGxpYi90ZXN0cy9pZ3RfYXNzZXJ0LmMgICAgICAgICAgICAg ICB8ICAyICstCj4gIGxpYi90ZXN0cy9pZ3RfY2FuX2ZhaWwuYyAgICAgICAgICAgICB8IDEwICsr LS0tCj4gIGxpYi90ZXN0cy9pZ3RfY2FuX2ZhaWxfc2ltcGxlLmMgICAgICB8ICAyICstCj4gIGxp Yi90ZXN0cy9pZ3RfZXhpdF9oYW5kbGVyLmMgICAgICAgICB8IDE4ICsrKystLS0tLQo+ICBsaWIv dGVzdHMvaWd0X2ZvcmsuYyAgICAgICAgICAgICAgICAgfCAgNCArLQo+ICBsaWIvdGVzdHMvaWd0 X2ludmFsaWRfc3VidGVzdF9uYW1lLmMgfCAgMiArLQo+ICBsaWIvdGVzdHMvaWd0X25vX2V4aXQu YyAgICAgICAgICAgICAgfCAgMiArLQo+ICBsaWIvdGVzdHMvaWd0X3NlZ2ZhdWx0LmMgICAgICAg ICAgICAgfCAgMiArLQo+ICBsaWIvdGVzdHMvaWd0X3NpbXVsYXRpb24uYyAgICAgICAgICAgfCA2 MCArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCj4gIGxpYi90ZXN0cy9pZ3Rfc3VidGVzdF9n cm91cC5jICAgICAgICB8IDE2ICsrKystLS0tCj4gIGxpYi90ZXN0cy9pZ3RfdGVzdHNfY29tbW9u LmggICAgICAgICB8IDE5ICsrKystLS0tLQo+ICAxMyBmaWxlcyBjaGFuZ2VkLCA5NyBpbnNlcnRp b25zKCspLCA4MiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9jb3JlLmMg Yi9saWIvaWd0X2NvcmUuYwo+IGluZGV4IGFlMDNlOTA5Li5hNjM3Yjk0ZSAxMDA2NDQKPiAtLS0g YS9saWIvaWd0X2NvcmUuYwo+ICsrKyBiL2xpYi9pZ3RfY29yZS5jCj4gQEAgLTUyMSw3ICs1MjEs NyBAQCBzdGF0aWMgdm9pZCBjb21tb25fZXhpdF9oYW5kbGVyKGludCBzaWcpCj4gIAo+ICAJLyog V2hlbiBub3Qga2lsbGVkIGJ5IGEgc2lnbmFsIGNoZWNrIHRoYXQgaWd0X2V4aXQoKSBoYXMgYmVl biBwcm9wZXJseQo+ICAJICogY2FsbGVkLiAqLwo+IC0JYXNzZXJ0KHNpZyAhPSAwIHx8IGlndF9l eGl0X2NhbGxlZCk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KHNpZyAhPSAwIHx8IGlndF9leGl0 X2NhbGxlZCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIHByaW50X3Rlc3RfZGVzY3JpcHRpb24o dm9pZCkKPiBAQCAtNjExLDcgKzYxMSw3IEBAIHN0YXRpYyB2b2lkIGNvbW1vbl9pbml0X2NvbmZp Zyh2b2lkKQo+ICAKPiAgCXJldCA9IGdfa2V5X2ZpbGVfZ2V0X2ludGVnZXIoaWd0X2tleV9maWxl LCAiRFVUIiwgIlN1c3BlbmRSZXN1bWVEZWxheSIsCj4gIAkJCQkgICAgICZlcnJvcik7Cj4gLQlh c3NlcnQoIWVycm9yIHx8IGVycm9yLT5jb2RlICE9IEdfS0VZX0ZJTEVfRVJST1JfSU5WQUxJRF9W QUxVRSk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KCFlcnJvciB8fCBlcnJvci0+Y29kZSAhPSBH X0tFWV9GSUxFX0VSUk9SX0lOVkFMSURfVkFMVUUpOwo+ICAKPiAgCWdfY2xlYXJfZXJyb3IoJmVy cm9yKTsKPiAgCj4gQEAgLTkwMyw5ICs5MDMsOSBAQCBib29sIF9faWd0X3J1bl9zdWJ0ZXN0KGNv bnN0IGNoYXIgKnN1YnRlc3RfbmFtZSkKPiAgewo+ICAJaW50IGk7Cj4gIAo+IC0JYXNzZXJ0KCFp bl9zdWJ0ZXN0KTsKPiAtCWFzc2VydCghaW5fZml4dHVyZSk7Cj4gLQlhc3NlcnQodGVzdF93aXRo X3N1YnRlc3RzKTsKPiArCWlndF9pbnRlcm5hbF9hc3NlcnQoIWluX3N1YnRlc3QpOwo+ICsJaWd0 X2ludGVybmFsX2Fzc2VydCghaW5fZml4dHVyZSk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KHRl c3Rfd2l0aF9zdWJ0ZXN0cyk7Cj4gIAo+ICAJLyogY2hlY2sgdGhlIHN1YnRlc3QgbmFtZSBvbmx5 IGNvbnRhaW5zIGEteiwgQS1aLCAwLTksICctJyBhbmQgJ18nICovCj4gIAlmb3IgKGkgPSAwOyBz dWJ0ZXN0X25hbWVbaV0gIT0gJ1wwJzsgaSsrKQo+IEBAIC05NzgsNyArOTc4LDcgQEAgYm9vbCBp Z3Rfb25seV9saXN0X3N1YnRlc3RzKHZvaWQpCj4gIAo+ICB2b2lkIF9faWd0X3N1YnRlc3RfZ3Jv dXBfc2F2ZShpbnQgKnNhdmUpCj4gIHsKPiAtCWFzc2VydCh0ZXN0X3dpdGhfc3VidGVzdHMpOwo+ ICsJaWd0X2ludGVybmFsX2Fzc2VydCh0ZXN0X3dpdGhfc3VidGVzdHMpOwo+ICAKPiAgCSpzYXZl ID0gc2tpcF9zdWJ0ZXN0c19oZW5jZWZvcnRoOwo+ICB9Cj4gQEAgLTEwMzIsNyArMTAzMiw3IEBA IHZvaWQgaWd0X3NraXAoY29uc3QgY2hhciAqZiwgLi4uKQo+ICAJdmFfbGlzdCBhcmdzOwo+ICAJ c2tpcHBlZF9vbmUgPSB0cnVlOwo+ICAKPiAtCWFzc2VydCghdGVzdF9jaGlsZCk7Cj4gKwlpZ3Rf aW50ZXJuYWxfYXNzZXJ0KCF0ZXN0X2NoaWxkKTsKPiAgCj4gIAlpZiAoIWlndF9vbmx5X2xpc3Rf c3VidGVzdHMoKSkgewo+ICAJCXZhX3N0YXJ0KGFyZ3MsIGYpOwo+IEBAIC0xNTEwLDEwICsxNTEw LDEwIEBAIHZvaWQgaWd0X2V4aXQodm9pZCkKPiAgCQlleGl0KElHVF9FWElUX1NVQ0NFU1MpOwo+ ICAKPiAgCS8qIENhbGxpbmcgdGhpcyB3aXRob3V0IGNhbGxpbmcgb25lIG9mIHRoZSBhYm92ZSBp cyBhIGZhaWx1cmUgKi8KPiAtCWFzc2VydCghdGVzdF93aXRoX3N1YnRlc3RzIHx8Cj4gLQkgICAg ICAgc2tpcHBlZF9vbmUgfHwKPiAtCSAgICAgICBzdWNjZWVkZWRfb25lIHx8Cj4gLQkgICAgICAg ZmFpbGVkX29uZSk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KCF0ZXN0X3dpdGhfc3VidGVzdHMg fHwKPiArCQkJICAgIHNraXBwZWRfb25lIHx8Cj4gKwkJCSAgICBzdWNjZWVkZWRfb25lIHx8Cj4g KwkJCSAgICBmYWlsZWRfb25lKTsKPiAgCj4gIAlpZiAodGVzdF93aXRoX3N1YnRlc3RzICYmICFm YWlsZWRfb25lKSB7Cj4gIAkJaWYgKHN1Y2NlZWRlZF9vbmUpCj4gQEAgLTE1MzEsNyArMTUzMSw3 IEBAIHZvaWQgaWd0X2V4aXQodm9pZCkKPiAgCQlraWxsKHRlc3RfY2hpbGRyZW5bY10sIFNJR0tJ TEwpOwo+ICAJYXNzZXJ0KCFudW1fdGVzdF9jaGlsZHJlbik7Cj4gIAo+IC0JYXNzZXJ0KHdhaXRw aWQoLTEsICZ0bXAsIFdOT0hBTkcpID09IC0xICYmIGVycm5vID09IEVDSElMRCk7Cj4gKwlpZ3Rf aW50ZXJuYWxfYXNzZXJ0KHdhaXRwaWQoLTEsICZ0bXAsIFdOT0hBTkcpID09IC0xICYmIGVycm5v ID09IEVDSElMRCk7Cj4gIAo+ICAJaWYgKCF0ZXN0X3dpdGhfc3VidGVzdHMpIHsKPiAgCQlzdHJ1 Y3QgdGltZXNwZWMgbm93Owo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2NvcmUuaCBiL2xpYi9pZ3Rf Y29yZS5oCj4gaW5kZXggNDdmZmQ5ZTcuLmVlZDM5YmJmIDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3Rf Y29yZS5oCj4gKysrIGIvbGliL2lndF9jb3JlLmgKPiBAQCAtNzQ3LDYgKzc0NywyNCBAQCBzdGF0 aWMgaW5saW5lIHZvaWQgaWd0X2lnbm9yZV93YXJuKGJvb2wgdmFsdWUpCj4gIAllbHNlIGlndF9k ZWJ1ZygiVGVzdCByZXF1aXJlbWVudCBwYXNzZWQ6ICEoJXMpXG4iLCAjZXhwcik7IFwKPiAgfSB3 aGlsZSAoMCkKPiAgCj4gKy8qKgo+ICsgKiBpZ3RfaW50ZXJuYWxfYXNzZXJ0Ogo+ICsgKiBAZXhw cjogY29uZGl0aW9uIHRvIHRlc3QKPiArICoKPiArICogSWYgdGhlIGdpdmVuIGV4cHJlc3Npb24g ZmFpbHMsIHByaW50IGFuIGVycm9yIHRvIHN0ZGVyciBhbmQgYWJvcnQoKQo+ICsgKiBpbW1lZGlh dGVseS4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgdXNlIG9ubHkgYnkgdGhlIGlndCBoZWxwZXJzIGlu IG9yZGVyIHRvCj4gKyAqIGNoZWNrIGZvciBpbmNvcnJlY3QgdXNhZ2VzIG9mIHRoZSBoZWxwZXJz IG9yIG90aGVyIGV4dHJhb3JkaW5hcnkgY29uZGl0aW9ucy4KPiArICoKPiArICogVGhpcyBzaG91 bGQgbmV2ZXIgYmUgdXNlZCB3aXRoaW4gYSBub3JtYWwgdGVzdC4gRG9pbmcgc28gd2lsbCBhbGVy dAo+ICsgKiB2ZWxvY2lyYXB0b3JzIHRvIHlvdXIgbG9jYXRpb24uCj4gKyAqLwo+ICsjZGVmaW5l IGlndF9pbnRlcm5hbF9hc3NlcnQoZXhwcikgZG8geyBcCj4gKwlpZiAoIShleHByKSkgeyBcCj4g KwkJaWd0X2NyaXRpY2FsKCJJbnRlcm5hbCBhc3NlcnRpb24gZmFpbGVkOiBgJXNgXG4iLCAjZXhw cik7IFwKPiArCQlhYm9ydCgpOyBcCgpJIHRoaW5rIHRoaXMgc2hvdWxkIF9leGl0KCksIHRvIGF2 b2lkIGhpbGFyaXR5IHdpdGggb3VyIGV4aXQgaGFuZGxlcnMKKHdoaWNoIGFyZSBhYm9ydCBoYW5k bGVycyB0b28pLgoKPiArCX0gXAo+ICt9IHdoaWxlICgwKQoKSG0sIGtpbmRhIGF3a3dhcmQgaWYg d2UgcHV0IHRoaXMgaW50byBhIGhlYWRlciB0ZXN0cyBoYXZlIHRvIHVzZS4gSSdkIGxpa2UKdG8g aGF2ZSBhbiBlYXN5IGNoZWNrIHRoYXQgbm90aGluZyBpbiB0ZXN0cy8gdXNlcyBwbGFpbiBhc3Nl cnQoKS4gTWF5YmUKYWRkIGEgbmV3IGlndF9pbnRlcm5hbC5oLiBVcCB0byB5b3UgSSdkIHNheS4K CkFzaWRlIGZyb20gdGhlc2Ugbml0cyBsZ3RtLCB3aXRoIHRoZW0gYWRkcmVzc2VkIHNvbWVob3c6 CgpSZXZpZXdlZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KCj4g Kwo+ICAvKiBmb3JrIHN1cHBvcnQgY29kZSAqLwo+ICBib29sIF9faWd0X2Zvcmsodm9pZCk7Cj4g IAo+IGRpZmYgLS1naXQgYS9saWIvdGVzdHMvaWd0X2Fzc2VydC5jIGIvbGliL3Rlc3RzL2lndF9h c3NlcnQuYwo+IGluZGV4IDFjYWY1ZDg4Li5hOGNhMWEzMSAxMDA2NDQKPiAtLS0gYS9saWIvdGVz dHMvaWd0X2Fzc2VydC5jCj4gKysrIGIvbGliL3Rlc3RzL2lndF9hc3NlcnQuYwo+IEBAIC02Miw3 ICs2Miw3IEBAIHN0YXRpYyBpbnQgZG9fZm9yayh2b2lkKQo+ICAKPiAgCXN3aXRjaCAocGlkID0g Zm9yaygpKSB7Cj4gIAljYXNlIC0xOgo+IC0JCWludGVybmFsX2Fzc2VydCgwKTsKPiArCQlpZ3Rf aW50ZXJuYWxfYXNzZXJ0KDApOwo+ICAJY2FzZSAwOgo+ICAJCWFyZ2MgPSBBUlJBWV9TSVpFKGFy Z3ZfcnVuKTsKPiAgCQlpZ3Rfc2ltcGxlX2luaXQoYXJnYywgYXJndl9ydW4pOwo+IGRpZmYgLS1n aXQgYS9saWIvdGVzdHMvaWd0X2Nhbl9mYWlsLmMgYi9saWIvdGVzdHMvaWd0X2Nhbl9mYWlsLmMK PiBpbmRleCAxZTNkOTU1OC4uYWU1NDY2NDQgMTAwNjQ0Cj4gLS0tIGEvbGliL3Rlc3RzL2lndF9j YW5fZmFpbC5jCj4gKysrIGIvbGliL3Rlc3RzL2lndF9jYW5fZmFpbC5jCj4gQEAgLTI4LDE3ICsy OCwxNyBAQAo+ICAKPiAgaWd0X21haW4KPiAgewo+IC0JaW50ZXJuYWxfYXNzZXJ0KGlndF9jYW5f ZmFpbCgpID09IGZhbHNlKTsKPiArCWlndF9pbnRlcm5hbF9hc3NlcnQoaWd0X2Nhbl9mYWlsKCkg PT0gZmFsc2UpOwo+ICAKPiAgCWlndF9maXh0dXJlIHsKPiAtCQlpbnRlcm5hbF9hc3NlcnQoaWd0 X2Nhbl9mYWlsKCkpOwo+ICsJCWlndF9pbnRlcm5hbF9hc3NlcnQoaWd0X2Nhbl9mYWlsKCkpOwo+ ICAJfQo+ICAKPiAtCWludGVybmFsX2Fzc2VydChpZ3RfY2FuX2ZhaWwoKSA9PSBmYWxzZSk7Cj4g KwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KGlndF9jYW5fZmFpbCgpID09IGZhbHNlKTsKPiAgCj4gIAlp Z3Rfc3VidGVzdCgic3VidGVzdCIpIHsKPiAtCQlpbnRlcm5hbF9hc3NlcnQoaWd0X2Nhbl9mYWls KCkpOwo+ICsJCWlndF9pbnRlcm5hbF9hc3NlcnQoaWd0X2Nhbl9mYWlsKCkpOwo+ICAJfQo+ICAK PiAtCWludGVybmFsX2Fzc2VydChpZ3RfY2FuX2ZhaWwoKSA9PSBmYWxzZSk7Cj4gKwlpZ3RfaW50 ZXJuYWxfYXNzZXJ0KGlndF9jYW5fZmFpbCgpID09IGZhbHNlKTsKPiAgfQo+IGRpZmYgLS1naXQg YS9saWIvdGVzdHMvaWd0X2Nhbl9mYWlsX3NpbXBsZS5jIGIvbGliL3Rlc3RzL2lndF9jYW5fZmFp bF9zaW1wbGUuYwo+IGluZGV4IDhmZjQzZDE1Li40ZjJlNGE3OCAxMDA2NDQKPiAtLS0gYS9saWIv dGVzdHMvaWd0X2Nhbl9mYWlsX3NpbXBsZS5jCj4gKysrIGIvbGliL3Rlc3RzL2lndF9jYW5fZmFp bF9zaW1wbGUuYwo+IEBAIC0yOCw1ICsyOCw1IEBACj4gIAo+ICBpZ3Rfc2ltcGxlX21haW4KPiAg ewo+IC0JaW50ZXJuYWxfYXNzZXJ0KGlndF9jYW5fZmFpbCgpKTsKPiArCWlndF9pbnRlcm5hbF9h c3NlcnQoaWd0X2Nhbl9mYWlsKCkpOwo+ICB9Cj4gZGlmZiAtLWdpdCBhL2xpYi90ZXN0cy9pZ3Rf ZXhpdF9oYW5kbGVyLmMgYi9saWIvdGVzdHMvaWd0X2V4aXRfaGFuZGxlci5jCj4gaW5kZXggODky YTdmMTQuLjIyMGM5MDg1IDEwMDY0NAo+IC0tLSBhL2xpYi90ZXN0cy9pZ3RfZXhpdF9oYW5kbGVy LmMKPiArKysgYi9saWIvdGVzdHMvaWd0X2V4aXRfaGFuZGxlci5jCj4gQEAgLTM1LDcgKzM1LDcg QEAgaW50IHBpcGVzWzJdOwo+ICAKPiAgc3RhdGljIHZvaWQgZXhpdF9oYW5kbGVyMShpbnQgc2ln KQo+ICB7Cj4gLQlpbnRlcm5hbF9hc3NlcnQodGVzdCA9PSAxKTsKPiArCWlndF9pbnRlcm5hbF9h c3NlcnQodGVzdCA9PSAxKTsKPiAgCXRlc3QrKzsKPiAgfQo+ICAKPiBAQCAtNDQsMTIgKzQ0LDEy IEBAIHN0YXRpYyB2b2lkIGV4aXRfaGFuZGxlcjIoaW50IHNpZykKPiAgCWNoYXIgdG1wID0gMTsK PiAgCj4gIAkvKiBlbnN1cmUgZXhpdCBoYW5kbGVycyBhcmUgY2FsbGVkIGluIHJldmVyc2UgKi8K PiAtCWludGVybmFsX2Fzc2VydCh0ZXN0ID09IDApOwo+ICsJaWd0X2ludGVybmFsX2Fzc2VydCh0 ZXN0ID09IDApOwo+ICAJdGVzdCsrOwo+ICAKPiAgCS8qIHdlIG5lZWQgdG8gZ2V0IGEgc2lkZSBl ZmZlY3QgdG8gdGhlIHBhcmVudCB0byBtYWtlIHN1cmUgZXhpdCBoYW5kbGVycwo+ICAJICogYWN0 dWFsbHkgcnVuLiAqLwo+IC0JaW50ZXJuYWxfYXNzZXJ0KHdyaXRlKHBpcGVzWzFdLCAmdG1wLCAx KSA9PSAxKTsKPiArCWlndF9pbnRlcm5hbF9hc3NlcnQod3JpdGUocGlwZXNbMV0sICZ0bXAsIDEp ID09IDEpOwo+ICB9Cj4gIAo+ICBlbnVtIHRlc3RfdHlwZSB7Cj4gQEAgLTY5LDcgKzY5LDcgQEAg c3RhdGljIGludCB0ZXN0ZnVuYyhlbnVtIHRlc3RfdHlwZSB0ZXN0X3R5cGUpCj4gIAlpbnQgc3Rh dHVzOwo+ICAJY2hhciB0bXAgPSAwOwo+ICAKPiAtCWludGVybmFsX2Fzc2VydChwaXBlMihwaXBl cywgT19OT05CTE9DSykgPT0gMCk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KHBpcGUyKHBpcGVz LCBPX05PTkJMT0NLKSA9PSAwKTsKPiAgCj4gIAlwaWQgPSBmb3JrKCk7Cj4gIAo+IEBAIC0xMDIs MTAgKzEwMiwxMCBAQCBzdGF0aWMgaW50IHRlc3RmdW5jKGVudW0gdGVzdF90eXBlIHRlc3RfdHlw ZSkKPiAgCQlpZ3RfZXhpdCgpOwo+ICAJfQo+ICAKPiAtCWludGVybmFsX2Fzc2VydCh3YWl0cGlk KHBpZCwgJnN0YXR1cywgMCkgIT0gLTEpOwo+ICsJaWd0X2ludGVybmFsX2Fzc2VydCh3YWl0cGlk KHBpZCwgJnN0YXR1cywgMCkgIT0gLTEpOwo+ICAKPiAtCWludGVybmFsX2Fzc2VydChyZWFkKHBp cGVzWzBdLCAmdG1wLCAxKSA9PSAxKTsKPiAtCWludGVybmFsX2Fzc2VydCh0bXAgPT0gMSk7Cj4g KwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KHJlYWQocGlwZXNbMF0sICZ0bXAsIDEpID09IDEpOwo+ICsJ aWd0X2ludGVybmFsX2Fzc2VydCh0bXAgPT0gMSk7Cj4gIAo+ICAJcmV0dXJuIHN0YXR1czsKPiAg fQo+IEBAIC0xMTQsOSArMTE0LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ ICB7Cj4gIAlpbnQgc3RhdHVzOwo+ICAKPiAtCWludGVybmFsX2Fzc2VydCh0ZXN0ZnVuYyhTVUMp ID09IDApOwo+ICsJaWd0X2ludGVybmFsX2Fzc2VydCh0ZXN0ZnVuYyhTVUMpID09IDApOwo+ICAK PiAtCWludGVybmFsX2Fzc2VydCh0ZXN0ZnVuYyhOT1JNQUwpID09IDApOwo+ICsJaWd0X2ludGVy bmFsX2Fzc2VydCh0ZXN0ZnVuYyhOT1JNQUwpID09IDApOwo+ICAKPiAgCXN0YXR1cyA9IHRlc3Rm dW5jKEZBSUwpOwo+ICAJaW50ZXJuYWxfYXNzZXJ0X3dleGl0ZWQoc3RhdHVzLCAxKTsKPiBkaWZm IC0tZ2l0IGEvbGliL3Rlc3RzL2lndF9mb3JrLmMgYi9saWIvdGVzdHMvaWd0X2ZvcmsuYwo+IGlu ZGV4IDdlOGI0ZjliLi5iOGU0MzdlMCAxMDA2NDQKPiAtLS0gYS9saWIvdGVzdHMvaWd0X2Zvcmsu Ywo+ICsrKyBiL2xpYi90ZXN0cy9pZ3RfZm9yay5jCj4gQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGlj IHZvaWQgcGxhaW5fZm9ya19sZWFrKHZvaWQpCj4gIAo+ICAJc3dpdGNoIChwaWQgPSBmb3JrKCkp IHsKPiAgCWNhc2UgLTE6Cj4gLQkJaW50ZXJuYWxfYXNzZXJ0KDApOwo+ICsJCWlndF9pbnRlcm5h bF9hc3NlcnQoMCk7Cj4gIAljYXNlIDA6Cj4gIAkJc2xlZXAoMSk7Cj4gIAlkZWZhdWx0Ogo+IEBA IC05Miw3ICs5Miw3IEBAIHN0YXRpYyBpbnQgZG9fZm9yayh2b2lkICgqdGVzdF90b19ydW4pKHZv aWQpKQo+ICAKPiAgCXN3aXRjaCAocGlkID0gZm9yaygpKSB7Cj4gIAljYXNlIC0xOgo+IC0JCWlu dGVybmFsX2Fzc2VydCgwKTsKPiArCQlpZ3RfaW50ZXJuYWxfYXNzZXJ0KDApOwo+ICAJY2FzZSAw Ogo+ICAJCWFyZ2MgPSBBUlJBWV9TSVpFKGFyZ3ZfcnVuKTsKPiAgCQlpZ3Rfc2ltcGxlX2luaXQo YXJnYywgYXJndl9ydW4pOwo+IGRpZmYgLS1naXQgYS9saWIvdGVzdHMvaWd0X2ludmFsaWRfc3Vi dGVzdF9uYW1lLmMgYi9saWIvdGVzdHMvaWd0X2ludmFsaWRfc3VidGVzdF9uYW1lLmMKPiBpbmRl eCA5MmU3NjdhYi4uNjk2Njg3ZmMgMTAwNjQ0Cj4gLS0tIGEvbGliL3Rlc3RzL2lndF9pbnZhbGlk X3N1YnRlc3RfbmFtZS5jCj4gKysrIGIvbGliL3Rlc3RzL2lndF9pbnZhbGlkX3N1YnRlc3RfbmFt ZS5jCj4gQEAgLTY2LDcgKzY2LDcgQEAgc3RhdGljIGludCBkb19mb3JrKHZvaWQgKCp0ZXN0X3Rv X3J1bikodm9pZCkpCj4gIAo+ICAJc3dpdGNoIChwaWQgPSBmb3JrKCkpIHsKPiAgCWNhc2UgLTE6 Cj4gLQkJaW50ZXJuYWxfYXNzZXJ0KDApOwo+ICsJCWlndF9pbnRlcm5hbF9hc3NlcnQoMCk7Cj4g IAljYXNlIDA6Cj4gIAkJdGVzdF90b19ydW4oKTsKPiAgCWRlZmF1bHQ6Cj4gZGlmZiAtLWdpdCBh L2xpYi90ZXN0cy9pZ3Rfbm9fZXhpdC5jIGIvbGliL3Rlc3RzL2lndF9ub19leGl0LmMKPiBpbmRl eCA4MmYwMGI1Mi4uM2VlZWY1YTQgMTAwNjQ0Cj4gLS0tIGEvbGliL3Rlc3RzL2lndF9ub19leGl0 LmMKPiArKysgYi9saWIvdGVzdHMvaWd0X25vX2V4aXQuYwo+IEBAIC02Miw3ICs2Miw3IEBAIHN0 YXRpYyBpbnQgZG9fZm9yayh2b2lkICgqdGVzdF90b19ydW4pKHZvaWQpKQo+ICAKPiAgCXN3aXRj aCAocGlkID0gZm9yaygpKSB7Cj4gIAljYXNlIC0xOgo+IC0JCWludGVybmFsX2Fzc2VydCgwKTsK PiArCQlpZ3RfaW50ZXJuYWxfYXNzZXJ0KDApOwo+ICAJY2FzZSAwOgo+ICAJCXRlc3RfdG9fcnVu KCk7Cj4gIAlkZWZhdWx0Ogo+IGRpZmYgLS1naXQgYS9saWIvdGVzdHMvaWd0X3NlZ2ZhdWx0LmMg Yi9saWIvdGVzdHMvaWd0X3NlZ2ZhdWx0LmMKPiBpbmRleCAwZDg3MmY2Ny4uYjRjNWJjYmQgMTAw NjQ0Cj4gLS0tIGEvbGliL3Rlc3RzL2lndF9zZWdmYXVsdC5jCj4gKysrIGIvbGliL3Rlc3RzL2ln dF9zZWdmYXVsdC5jCj4gQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIGludCBkb19mb3JrKHZvaWQp Cj4gIAo+ICAJc3dpdGNoIChwaWQgPSBmb3JrKCkpIHsKPiAgCWNhc2UgLTE6Cj4gLQkJaW50ZXJu YWxfYXNzZXJ0KDApOwo+ICsJCWlndF9pbnRlcm5hbF9hc3NlcnQoMCk7Cj4gIAljYXNlIDA6Cj4g IAkJYXJnYyA9IEFSUkFZX1NJWkUoYXJndl9ydW4pOwo+ICAJCWlmIChzaW1wbGUpIHsKPiBkaWZm IC0tZ2l0IGEvbGliL3Rlc3RzL2lndF9zaW11bGF0aW9uLmMgYi9saWIvdGVzdHMvaWd0X3NpbXVs YXRpb24uYwo+IGluZGV4IDNmM2NkODhmLi44OTk2NjVkMyAxMDA2NDQKPiAtLS0gYS9saWIvdGVz dHMvaWd0X3NpbXVsYXRpb24uYwo+ICsrKyBiL2xpYi90ZXN0cy9pZ3Rfc2ltdWxhdGlvbi5jCj4g QEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIGludCBkb19mb3JrKHZvaWQpCj4gIAo+ICAJc3dpdGNo IChwaWQgPSBmb3JrKCkpIHsKPiAgCWNhc2UgLTE6Cj4gLQkJaW50ZXJuYWxfYXNzZXJ0KDApOwo+ ICsJCWlndF9pbnRlcm5hbF9hc3NlcnQoMCk7Cj4gIAljYXNlIDA6Cj4gIAkJaWYgKHNpbXBsZSkg ewo+ICAJCQlhcmdjID0gMTsKPiBAQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMgaW50IGRvX2Zvcmso dm9pZCkKPiAgCQkgICAgICAgZXJybm8gPT0gRUlOVFIpCj4gIAkJCTsKPiAgCj4gLQkJaW50ZXJu YWxfYXNzZXJ0KFdJRkVYSVRFRChzdGF0dXMpKTsKPiArCQlpZ3RfaW50ZXJuYWxfYXNzZXJ0KFdJ RkVYSVRFRChzdGF0dXMpKTsKPiAgCj4gIAkJcmV0dXJuIHN0YXR1czsKPiAgCX0KPiBAQCAtMTAw LDQwICsxMDAsNDAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICB7Cj4gIAkv KiBzaW1wbGUgdGVzdHMgKi8KPiAgCXNpbXBsZSA9IHRydWU7Cj4gLQlpbnRlcm5hbF9hc3NlcnQo c2V0ZW52KCJJTlRFTF9TSU1VTEFUSU9OIiwgIjEiLCAxKSA9PSAwKTsKPiAtCWludGVybmFsX2Fz c2VydChXRVhJVFNUQVRVUyhkb19mb3JrKCkpID09IElHVF9FWElUX1NLSVApOwo+ICsJaWd0X2lu dGVybmFsX2Fzc2VydChzZXRlbnYoIklOVEVMX1NJTVVMQVRJT04iLCAiMSIsIDEpID09IDApOwo+ ICsJaWd0X2ludGVybmFsX2Fzc2VydChXRVhJVFNUQVRVUyhkb19mb3JrKCkpID09IElHVF9FWElU X1NLSVApOwo+ICAKPiAtCWludGVybmFsX2Fzc2VydChzZXRlbnYoIklOVEVMX1NJTVVMQVRJT04i LCAiMCIsIDEpID09IDApOwo+IC0JaW50ZXJuYWxfYXNzZXJ0KFdFWElUU1RBVFVTKGRvX2Zvcmso KSkgPT0gSUdUX0VYSVRfU1VDQ0VTUyk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KHNldGVudigi SU5URUxfU0lNVUxBVElPTiIsICIwIiwgMSkgPT0gMCk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0 KFdFWElUU1RBVFVTKGRvX2ZvcmsoKSkgPT0gSUdUX0VYSVRfU1VDQ0VTUyk7Cj4gIAo+ICAJLyog c3VidGVzdHMsIGxpc3QgbW9kZSAqLwo+ICAJc2ltcGxlID0gZmFsc2U7Cj4gIAlsaXN0X3N1YnRl c3RzID0gdHJ1ZTsKPiAgCj4gIAlpbl9maXh0dXJlID0gZmFsc2U7Cj4gLQlpbnRlcm5hbF9hc3Nl cnQoc2V0ZW52KCJJTlRFTF9TSU1VTEFUSU9OIiwgIjEiLCAxKSA9PSAwKTsKPiAtCWludGVybmFs X2Fzc2VydChXRVhJVFNUQVRVUyhkb19mb3JrKCkpID09IElHVF9FWElUX1NVQ0NFU1MpOwo+ICsJ aWd0X2ludGVybmFsX2Fzc2VydChzZXRlbnYoIklOVEVMX1NJTVVMQVRJT04iLCAiMSIsIDEpID09 IDApOwo+ICsJaWd0X2ludGVybmFsX2Fzc2VydChXRVhJVFNUQVRVUyhkb19mb3JrKCkpID09IElH VF9FWElUX1NVQ0NFU1MpOwo+ICAKPiAtCWludGVybmFsX2Fzc2VydChzZXRlbnYoIklOVEVMX1NJ TVVMQVRJT04iLCAiMCIsIDEpID09IDApOwo+IC0JaW50ZXJuYWxfYXNzZXJ0KFdFWElUU1RBVFVT KGRvX2ZvcmsoKSkgPT0gSUdUX0VYSVRfU1VDQ0VTUyk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0 KHNldGVudigiSU5URUxfU0lNVUxBVElPTiIsICIwIiwgMSkgPT0gMCk7Cj4gKwlpZ3RfaW50ZXJu YWxfYXNzZXJ0KFdFWElUU1RBVFVTKGRvX2ZvcmsoKSkgPT0gSUdUX0VYSVRfU1VDQ0VTUyk7Cj4g IAo+ICAJaW5fZml4dHVyZSA9IHRydWU7Cj4gLQlpbnRlcm5hbF9hc3NlcnQoc2V0ZW52KCJJTlRF TF9TSU1VTEFUSU9OIiwgIjEiLCAxKSA9PSAwKTsKPiAtCWludGVybmFsX2Fzc2VydChXRVhJVFNU QVRVUyhkb19mb3JrKCkpID09IElHVF9FWElUX1NVQ0NFU1MpOwo+ICsJaWd0X2ludGVybmFsX2Fz c2VydChzZXRlbnYoIklOVEVMX1NJTVVMQVRJT04iLCAiMSIsIDEpID09IDApOwo+ICsJaWd0X2lu dGVybmFsX2Fzc2VydChXRVhJVFNUQVRVUyhkb19mb3JrKCkpID09IElHVF9FWElUX1NVQ0NFU1Mp Owo+ICAKPiAgCj4gLQlpbnRlcm5hbF9hc3NlcnQoc2V0ZW52KCJJTlRFTF9TSU1VTEFUSU9OIiwg IjAiLCAxKSA9PSAwKTsKPiAtCWludGVybmFsX2Fzc2VydChXRVhJVFNUQVRVUyhkb19mb3JrKCkp ID09IElHVF9FWElUX1NVQ0NFU1MpOwo+ICsJaWd0X2ludGVybmFsX2Fzc2VydChzZXRlbnYoIklO VEVMX1NJTVVMQVRJT04iLCAiMCIsIDEpID09IDApOwo+ICsJaWd0X2ludGVybmFsX2Fzc2VydChX RVhJVFNUQVRVUyhkb19mb3JrKCkpID09IElHVF9FWElUX1NVQ0NFU1MpOwo+ICAKPiAgCj4gIAlp bl9maXh0dXJlID0gZmFsc2U7Cj4gIAlpbl9zdWJ0ZXN0ID0gdHJ1ZTsKPiAtCWludGVybmFsX2Fz c2VydChzZXRlbnYoIklOVEVMX1NJTVVMQVRJT04iLCAiMSIsIDEpID09IDApOwo+IC0JaW50ZXJu YWxfYXNzZXJ0KFdFWElUU1RBVFVTKGRvX2ZvcmsoKSkgPT0gSUdUX0VYSVRfU1VDQ0VTUyk7Cj4g KwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KHNldGVudigiSU5URUxfU0lNVUxBVElPTiIsICIxIiwgMSkg PT0gMCk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KFdFWElUU1RBVFVTKGRvX2ZvcmsoKSkgPT0g SUdUX0VYSVRfU1VDQ0VTUyk7Cj4gIAo+ICAKPiAtCWludGVybmFsX2Fzc2VydChzZXRlbnYoIklO VEVMX1NJTVVMQVRJT04iLCAiMCIsIDEpID09IDApOwo+IC0JaW50ZXJuYWxfYXNzZXJ0KFdFWElU U1RBVFVTKGRvX2ZvcmsoKSkgPT0gSUdUX0VYSVRfU1VDQ0VTUyk7Cj4gKwlpZ3RfaW50ZXJuYWxf YXNzZXJ0KHNldGVudigiSU5URUxfU0lNVUxBVElPTiIsICIwIiwgMSkgPT0gMCk7Cj4gKwlpZ3Rf aW50ZXJuYWxfYXNzZXJ0KFdFWElUU1RBVFVTKGRvX2ZvcmsoKSkgPT0gSUdUX0VYSVRfU1VDQ0VT Uyk7Cj4gIAo+ICAKPiAgCS8qIHN1YnRlc3QsIHJ1biBtb2RlICovCj4gQEAgLTE0MSwzMCArMTQx LDMwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKPiAgCWxpc3Rfc3VidGVzdHMg PSBmYWxzZTsKPiAgCj4gIAlpbl9maXh0dXJlID0gZmFsc2U7Cj4gLQlpbnRlcm5hbF9hc3NlcnQo c2V0ZW52KCJJTlRFTF9TSU1VTEFUSU9OIiwgIjEiLCAxKSA9PSAwKTsKPiAtCWludGVybmFsX2Fz c2VydChXRVhJVFNUQVRVUyhkb19mb3JrKCkpID09IElHVF9FWElUX1NLSVApOwo+ICsJaWd0X2lu dGVybmFsX2Fzc2VydChzZXRlbnYoIklOVEVMX1NJTVVMQVRJT04iLCAiMSIsIDEpID09IDApOwo+ ICsJaWd0X2ludGVybmFsX2Fzc2VydChXRVhJVFNUQVRVUyhkb19mb3JrKCkpID09IElHVF9FWElU X1NLSVApOwo+ICAKPiAtCWludGVybmFsX2Fzc2VydChzZXRlbnYoIklOVEVMX1NJTVVMQVRJT04i LCAiMCIsIDEpID09IDApOwo+IC0JaW50ZXJuYWxfYXNzZXJ0KFdFWElUU1RBVFVTKGRvX2Zvcmso KSkgPT0gSUdUX0VYSVRfU1VDQ0VTUyk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KHNldGVudigi SU5URUxfU0lNVUxBVElPTiIsICIwIiwgMSkgPT0gMCk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0 KFdFWElUU1RBVFVTKGRvX2ZvcmsoKSkgPT0gSUdUX0VYSVRfU1VDQ0VTUyk7Cj4gIAo+ICAKPiAg CWluX2ZpeHR1cmUgPSB0cnVlOwo+IC0JaW50ZXJuYWxfYXNzZXJ0KHNldGVudigiSU5URUxfU0lN VUxBVElPTiIsICIxIiwgMSkgPT0gMCk7Cj4gLQlpbnRlcm5hbF9hc3NlcnQoV0VYSVRTVEFUVVMo ZG9fZm9yaygpKSA9PSBJR1RfRVhJVF9TS0lQKTsKPiArCWlndF9pbnRlcm5hbF9hc3NlcnQoc2V0 ZW52KCJJTlRFTF9TSU1VTEFUSU9OIiwgIjEiLCAxKSA9PSAwKTsKPiArCWlndF9pbnRlcm5hbF9h c3NlcnQoV0VYSVRTVEFUVVMoZG9fZm9yaygpKSA9PSBJR1RfRVhJVF9TS0lQKTsKPiAgCj4gIAo+ IC0JaW50ZXJuYWxfYXNzZXJ0KHNldGVudigiSU5URUxfU0lNVUxBVElPTiIsICIwIiwgMSkgPT0g MCk7Cj4gLQlpbnRlcm5hbF9hc3NlcnQoV0VYSVRTVEFUVVMoZG9fZm9yaygpKSA9PSBJR1RfRVhJ VF9TVUNDRVNTKTsKPiArCWlndF9pbnRlcm5hbF9hc3NlcnQoc2V0ZW52KCJJTlRFTF9TSU1VTEFU SU9OIiwgIjAiLCAxKSA9PSAwKTsKPiArCWlndF9pbnRlcm5hbF9hc3NlcnQoV0VYSVRTVEFUVVMo ZG9fZm9yaygpKSA9PSBJR1RfRVhJVF9TVUNDRVNTKTsKPiAgCj4gIAo+ICAJaW5fZml4dHVyZSA9 IGZhbHNlOwo+ICAJaW5fc3VidGVzdCA9IHRydWU7Cj4gLQlpbnRlcm5hbF9hc3NlcnQoc2V0ZW52 KCJJTlRFTF9TSU1VTEFUSU9OIiwgIjEiLCAxKSA9PSAwKTsKPiAtCWludGVybmFsX2Fzc2VydChX RVhJVFNUQVRVUyhkb19mb3JrKCkpID09IElHVF9FWElUX1NLSVApOwo+ICsJaWd0X2ludGVybmFs X2Fzc2VydChzZXRlbnYoIklOVEVMX1NJTVVMQVRJT04iLCAiMSIsIDEpID09IDApOwo+ICsJaWd0 X2ludGVybmFsX2Fzc2VydChXRVhJVFNUQVRVUyhkb19mb3JrKCkpID09IElHVF9FWElUX1NLSVAp Owo+ICAKPiAgCj4gLQlpbnRlcm5hbF9hc3NlcnQoc2V0ZW52KCJJTlRFTF9TSU1VTEFUSU9OIiwg IjAiLCAxKSA9PSAwKTsKPiAtCWludGVybmFsX2Fzc2VydChXRVhJVFNUQVRVUyhkb19mb3JrKCkp ID09IElHVF9FWElUX1NVQ0NFU1MpOwo+ICsJaWd0X2ludGVybmFsX2Fzc2VydChzZXRlbnYoIklO VEVMX1NJTVVMQVRJT04iLCAiMCIsIDEpID09IDApOwo+ICsJaWd0X2ludGVybmFsX2Fzc2VydChX RVhJVFNUQVRVUyhkb19mb3JrKCkpID09IElHVF9FWElUX1NVQ0NFU1MpOwo+ICAKPiAgCj4gIAly ZXR1cm4gMDsKPiBkaWZmIC0tZ2l0IGEvbGliL3Rlc3RzL2lndF9zdWJ0ZXN0X2dyb3VwLmMgYi9s aWIvdGVzdHMvaWd0X3N1YnRlc3RfZ3JvdXAuYwo+IGluZGV4IDc3ODNkMDIxLi5kNDFhYzVmYiAx MDA2NDQKPiAtLS0gYS9saWIvdGVzdHMvaWd0X3N1YnRlc3RfZ3JvdXAuYwo+ICsrKyBiL2xpYi90 ZXN0cy9pZ3Rfc3VidGVzdF9ncm91cC5jCj4gQEAgLTQyLDcgKzQyLDcgQEAgaWd0X21haW4KPiAg CQkJfQo+ICAKPiAgCQkJaWd0X3N1YnRlc3QoIm5vdC1ydW4iKSB7Cj4gLQkJCQlpbnRlcm5hbF9h c3NlcnQoMCk7Cj4gKwkJCQlpZ3RfaW50ZXJuYWxfYXNzZXJ0KDApOwo+ICAJCQl9Cj4gIAo+ICAJ CQlpZ3Rfc3VidGVzdF9ncm91cCB7Cj4gQEAgLTUwLDM1ICs1MCwzNSBAQCBpZ3RfbWFpbgo+ICAJ CQkJICogcmVzdG9yZSB0byAicnVuIHRlc3RjYXNlcyIgd2hlbiBhbiBvdXRlcgo+ICAJCQkJICog Z3JvdXAgaXMgYWxyZWFkeSBpbiBTS0lQIHN0YXRlLiAqLwo+ICAJCQkJaWd0X3N1YnRlc3QoInN0 aWxsLW5vdC1ydW4iKSB7Cj4gLQkJCQkJaW50ZXJuYWxfYXNzZXJ0KDApOwo+ICsJCQkJCWlndF9p bnRlcm5hbF9hc3NlcnQoMCk7Cj4gIAkJCQl9Cj4gIAkJCX0KPiAgCQl9Cj4gIAo+ICAJCWlndF9z dWJ0ZXN0KCJydW4iKSB7Cj4gIAkJCXQxID0gdHJ1ZTsKPiAtCQkJaW50ZXJuYWxfYXNzZXJ0KDEp Owo+ICsJCQlpZ3RfaW50ZXJuYWxfYXNzZXJ0KDEpOwo+ICAJCX0KPiAgCX0KPiAgCj4gIAlpZ3Rf c3VidGVzdF9ncm91cCB7Cj4gIAkJaWd0X2ZpeHR1cmUgewo+IC0JCQlpbnRlcm5hbF9hc3NlcnQo dDIgPT0gMCk7Cj4gKwkJCWlndF9pbnRlcm5hbF9hc3NlcnQodDIgPT0gMCk7Cj4gIAkJCXQyID0g MTsKPiAgCQl9Cj4gIAo+ICAJCWlndF9zdWJ0ZXN0KCJydW4tYWdhaW4iKSB7Cj4gLQkJCWludGVy bmFsX2Fzc2VydCh0MiA9PSAxKTsKPiArCQkJaWd0X2ludGVybmFsX2Fzc2VydCh0MiA9PSAxKTsK PiAgCQkJdDIgPSAyOwo+ICAJCX0KPiAgCj4gIAkJaWd0X2ZpeHR1cmUgewo+IC0JCQlpbnRlcm5h bF9hc3NlcnQodDIgPT0gMik7Cj4gKwkJCWlndF9pbnRlcm5hbF9hc3NlcnQodDIgPT0gMik7Cj4g IAkJCXQyID0gMzsKPiAgCj4gIAkJfQo+ICAJfQo+ICAKPiAtCWludGVybmFsX2Fzc2VydCh0MSk7 Cj4gLQlpbnRlcm5hbF9hc3NlcnQodDIgPT0gMyk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KHQx KTsKPiArCWlndF9pbnRlcm5hbF9hc3NlcnQodDIgPT0gMyk7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEv bGliL3Rlc3RzL2lndF90ZXN0c19jb21tb24uaCBiL2xpYi90ZXN0cy9pZ3RfdGVzdHNfY29tbW9u LmgKPiBpbmRleCBlNjZlZTM3Yy4uYzQ0YmZjM2MgMTAwNjQ0Cj4gLS0tIGEvbGliL3Rlc3RzL2ln dF90ZXN0c19jb21tb24uaAo+ICsrKyBiL2xpYi90ZXN0cy9pZ3RfdGVzdHNfY29tbW9uLmgKPiBA QCAtMjUsMjUgKzI1LDIyIEBACj4gICNpZm5kZWYgSUdUX0xJQl9URVNUU19DT01NT05fSAo+ICAj ZGVmaW5lIElHVF9MSUJfVEVTVFNfQ09NTU9OX0gKPiAgCj4gLSNpbmNsdWRlIDxhc3NlcnQuaD4K PiArI2luY2x1ZGUgImlndF9jb3JlLmgiCj4gIAo+ICAvKgo+IC0gKiBXZSBuZWVkIHRvIGhpZGUg YXNzZXJ0IGZyb20gdGhlIGNvY2NpIGlndCB0ZXN0IHJlZmFjdG9yIHNwYXRjaC4KPiAtICoKPiAt ICogSU1QT1JUQU5UOiBUZXN0IGluZnJhc3RydWN0dXJlIHRlc3RzIGFyZSB0aGUgb25seSB2YWxp ZCBwbGFjZXMgd2hlcmUgdXNpbmcKPiAtICogYXNzZXJ0IGlzIGFsbG93ZWQuCj4gKyAqIElNUE9S VEFOVDogV2UgdXNlZCB0byBkZWZpbmUgYSB3cmFwcGVyIGFyb3VuZCBhc3NlcnQoKSBoZXJlLCBi dXQgc2luY2UgdGhpcwo+ICsgKiBicmVha3MgYWxsIG9mIG91ciB0ZXN0cyBpZiBkZWJ1ZyBhc3Nl cnRpb25zIGFyZSB0dXJuZWQgb2ZmIHRoaXMgdHVybmVkIG91dCB0bwo+ICsgKiBiZSBhIHJlYWxs eSBiYWQgaWRlYS4gRG9uJ3QgYWRkIGl0IGJhY2shCj4gICAqLwo+IC0jZGVmaW5lIGludGVybmFs X2Fzc2VydCBhc3NlcnQKPiAtCj4gIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnRlcm5hbF9hc3NlcnRf d2V4aXRlZChpbnQgd3N0YXR1cywgaW50IGV4aXRjb2RlKQo+ICB7Cj4gLQlpbnRlcm5hbF9hc3Nl cnQoV0lGRVhJVEVEKHdzdGF0dXMpICYmCj4gLQkJCVdFWElUU1RBVFVTKHdzdGF0dXMpID09IGV4 aXRjb2RlKTsKPiArCWlndF9pbnRlcm5hbF9hc3NlcnQoV0lGRVhJVEVEKHdzdGF0dXMpICYmCj4g KwkJCSAgICBXRVhJVFNUQVRVUyh3c3RhdHVzKSA9PSBleGl0Y29kZSk7Cj4gIH0KPiAgCj4gIHN0 YXRpYyBpbmxpbmUgdm9pZCBpbnRlcm5hbF9hc3NlcnRfd3NpZ25hbGVkKGludCB3c3RhdHVzLCBp bnQgc2lnbmFsKQo+ICB7Cj4gLQlpbnRlcm5hbF9hc3NlcnQoV0lGU0lHTkFMRUQod3N0YXR1cykg JiYKPiAtCQkJV1RFUk1TSUcod3N0YXR1cykgPT0gc2lnbmFsKTsKPiArCWlndF9pbnRlcm5hbF9h c3NlcnQoV0lGU0lHTkFMRUQod3N0YXR1cykgJiYKPiArCQkJICAgIFdURVJNU0lHKHdzdGF0dXMp ID09IHNpZ25hbCk7Cj4gIH0KPiAgI2VuZGlmCj4gLS0gCj4gMi4yMC4xCj4gCj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBpZ3QtZGV2IG1haWxpbmcg bGlzdAo+IGlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2CgotLSAKRGFuaWVsIFZldHRlcgpT b2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBt YWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2