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 9A0476E0FC for ; Wed, 10 Jul 2019 16:35:47 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id e3so2785923edr.10 for ; Wed, 10 Jul 2019 09:35:47 -0700 (PDT) Date: Wed, 10 Jul 2019 18:35:42 +0200 From: Daniel Vetter Message-ID: <20190710163542.GX15868@phenom.ffwll.local> References: <20190704095604.16589-1-oleg.vasilev@intel.com> <20190704095604.16589-2-oleg.vasilev@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190704095604.16589-2-oleg.vasilev@intel.com> Subject: Re: [igt-dev] [PATCH 2/2] tests/prime_generic: add vendor-agnostic prime tests 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: Oleg Vasilev Cc: igt-dev@lists.freedesktop.org, Daniel Vetter List-ID: T24gVGh1LCBKdWwgMDQsIDIwMTkgYXQgMTI6NTY6MDRQTSArMDMwMCwgT2xlZyBWYXNpbGV2IHdy b3RlOgo+IEN1cnJlbnRseSwgd2UgaGF2ZSBkaWZmZXJlbnQgc2V0cyBvZiBwcmltZSB0ZXN0czoK PiAgLSB2Z2VtK2k5MTUKPiAgLSBhbWRncHUraTkxNQo+ICAtIG52K2k5MTUKPiAKPiBUaG9zZSB0 ZXN0cyB1c2UgdmVuZG9yLXNwZWNpZmljIGlvY3RscywgdGhlcmVmb3JlLCBub3QgaW50ZXJjaGFu Z2VhYmxlLgo+IFRoZSBpZGVhIGlzIHRvIGNyZWF0ZSBhIHNldCBvZiB0ZXN0cyB3aGljaCBhcmUg ZXhwZWN0ZWQgdG8gd29yayBvbiBhbnkKPiBwcmltZS1jb21wYXRpYmxlIGRyaXZlci4gSXQgY2Fu IGJlIHJ1biB3aXRoIGFueSBjb21iaW5hdGlvbiBvZgo+IGV4cG9ydGVyK2ltcG9ydGVyLCB3aGVy ZQo+IAo+IFRoZSBmaXJzdCB0ZXN0IGlzIHNpbXBsZToKPiAxLiBFeHBvcnRlciBjcmVhdGVzIGEg ZnJhbWVidWZmZXIgYW5kIGZpbGxzIGl0IHdpdGggYSBwbGFpbiBjb2xvcgo+IDIuIEZiIGlzIHRy YW5zZmVycmVkIHRvIHRoZSBpbXBvcnRlcgo+IDMuIEltcG9ydGVyIG1vZGVzZXRzIGFuZCBjb21w dXRlcyBwaXBlIENSQwo+IDQuIEltcG9ydGVyIGRyYXdzIHRoZSBzYW1lIGNvbG9yIHRocm91Z2gg Y2Fpcm8gYW5kIGNvbXBhcmVzIENSQwo+IAo+IFRoZSBpbml0aWFsIG1vdGl2YXRpb24gY29tZXMg ZnJvbSB0aGUgbmVlZCB0byB0ZXN0IHByaW1lIHN1cHBvcnQgaW4KPiB2a21zLgo+IAo+IENjOiBS b2RyaWdvIFNpcXVlaXJhIDxyb2RyaWdvc2lxdWVpcmFtZWxvQGdtYWlsLmNvbT4KPiBDYzogRGFu aWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPgo+IFNpZ25lZC1vZmYtYnk6IE9sZWcgVmFzaWxl diA8b2xlZy52YXNpbGV2QGludGVsLmNvbT4KPiAtLS0KPiAgdGVzdHMvbWVzb24uYnVpbGQgICAg IHwgICAxICsKPiAgdGVzdHMvcHJpbWVfZ2VuZXJpYy5jIHwgMjM4ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAyIGZpbGVzIGNoYW5nZWQsIDIzOSBpbnNlcnRp b25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9wcmltZV9nZW5lcmljLmMKPiAKPiBk aWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAo+IGluZGV4 IDM0YTc0MDI1Li4xYzkzOGU5NSAxMDA2NDQKPiAtLS0gYS90ZXN0cy9tZXNvbi5idWlsZAo+ICsr KyBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gQEAgLTc2LDYgKzc2LDcgQEAgdGVzdF9wcm9ncyA9IFsK PiAgCSdwcmltZV9zZWxmX2ltcG9ydCcsCj4gIAkncHJpbWVfdWRsJywKPiAgCSdwcmltZV92Z2Vt JywKPiArCSdwcmltZV9nZW5lcmljJywKPiAgCSdzeW5jb2JqX2Jhc2ljJywKPiAgCSdzeW5jb2Jq X3dhaXQnLAo+ICAJJ3RlbXBsYXRlJywKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvcHJpbWVfZ2VuZXJp Yy5jIGIvdGVzdHMvcHJpbWVfZ2VuZXJpYy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMC4uNjVlNDg3NjMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdGVzdHMvcHJpbWVf Z2VuZXJpYy5jCj4gQEAgLTAsMCArMSwyMzggQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIw MTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoK PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4g Kwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlICJpZ3RfdmdlbS5oIgo+ICsKPiArI2lu Y2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICsjaW5jbHVkZSA8c3lzL3BvbGwuaD4KPiArI2luY2x1ZGUg PHRpbWUuaD4KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgewo+ICsJZG91YmxlIHIsIGcsIGI7Cj4gKwl1 aW50MzJfdCBjb2xvcjsKPiArCWlndF9jcmNfdCBwcmltZV9jcmM7Cj4gKwlpZ3RfY3JjX3QgZGly ZWN0X2NyYzsKPiArCWNoYXIgKnByaW1lX3N0cjsKPiArCWNoYXIgKmRpcmVjdF9zdHI7Cj4gK30g Y29sb3JzWzNdID0gewo+ICsJeyAuciA9IDAuMCwgLmcgPSAwLjAsIC5iID0gMC4wLCAuY29sb3Ig PSAweGZmMDAwMDAwfSwKPiArCXsgLnIgPSAxLjAsIC5nID0gMS4wLCAuYiA9IDEuMCwgLmNvbG9y ID0gMHhmZmZmZmZmZn0sCj4gKwl7IC5yID0gMS4wLCAuZyA9IDAuMCwgLmIgPSAwLjAsIC5jb2xv ciA9IDB4ZmZmZjAwMDB9LAo+ICt9Owo+ICsKPiArSUdUX1RFU1RfREVTQ1JJUFRJT04oIkdlbmVy aWMgdGVzdHMsIHdvcmtpbmcgd2l0aCBhbnkgcHJpbWUgZGV2aWNlIik7Cj4gKwo+ICtzdGF0aWMg Ym9vbCBoYXNfcHJpbWVfaW1wb3J0KGludCBmZCkKPiArewo+ICsJdWludDY0X3QgdmFsdWU7Cj4g Kwo+ICsJaWYgKGRybUdldENhcChmZCwgRFJNX0NBUF9QUklNRSwgJnZhbHVlKSkKPiArCQlyZXR1 cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIHZhbHVlICYgRFJNX1BSSU1FX0NBUF9JTVBPUlQ7Cj4g K30KPiArCj4gK3N0YXRpYyBib29sIGhhc19wcmltZV9leHBvcnQoaW50IGZkKQo+ICt7Cj4gKwl1 aW50NjRfdCB2YWx1ZTsKPiArCj4gKwlpZiAoZHJtR2V0Q2FwKGZkLCBEUk1fQ0FQX1BSSU1FLCAm dmFsdWUpKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXR1cm4gdmFsdWUgJiBEUk1fUFJJ TUVfQ0FQX0VYUE9SVDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcHJlcGFyZV9zY3JhdGNoKGlu dCBleHBvcnRlciwgc3RydWN0IHZnZW1fYm8gKnNjcmF0Y2gsCj4gKwkJCSAgICBkcm1Nb2RlTW9k ZUluZm8gKm1vZGUsIHVpbnQzMl90IGNvbG9yKQo+ICt7Cj4gKwlpbnQgaTsKPiArCXVpbnQzMl90 ICpwdHI7Cj4gKwo+ICsJc2NyYXRjaC0+d2lkdGggPSBtb2RlLT5oZGlzcGxheTsKPiArCXNjcmF0 Y2gtPmhlaWdodCA9IG1vZGUtPnZkaXNwbGF5Owo+ICsJc2NyYXRjaC0+YnBwID0gMzI7Cj4gKwl2 Z2VtX2NyZWF0ZShleHBvcnRlciwgc2NyYXRjaCk7Cj4gKwo+ICsJcHRyID0gdmdlbV9tbWFwKGV4 cG9ydGVyLCBzY3JhdGNoLCBQUk9UX1dSSVRFKTsKPiArCWZvciAoaSA9IDA7IGkgPCBzY3JhdGNo LT5zaXplIC8gc2l6ZW9mKCpwdHIpOyArK2kpCj4gKwkJcHRyW2ldID0gY29sb3I7Cj4gKwo+ICsJ bXVubWFwKHB0ciwgc2NyYXRjaC0+c2l6ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHByZXBh cmVfZmIoaW50IGltcG9ydGVyLCBzdHJ1Y3QgdmdlbV9ibyAqc2NyYXRjaCwgc3RydWN0IGlndF9m YiAqZmIpCj4gK3sKPiArCWVudW0gaWd0X2NvbG9yX2VuY29kaW5nIGNvbG9yX2VuY29kaW5nID0g SUdUX0NPTE9SX1lDQkNSX0JUNzA5Owo+ICsJZW51bSBpZ3RfY29sb3JfcmFuZ2UgY29sb3JfcmFu Z2UgPSBJR1RfQ09MT1JfWUNCQ1JfTElNSVRFRF9SQU5HRTsKPiArCj4gKwlpZ3RfaW5pdF9mYihm YiwgaW1wb3J0ZXIsIHNjcmF0Y2gtPndpZHRoLCBzY3JhdGNoLT5oZWlnaHQsCj4gKwkJICAgIERS TV9GT1JNQVRfWFJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJICAgIGNv bG9yX2VuY29kaW5nLCBjb2xvcl9yYW5nZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGltcG9y dF9mYihpbnQgaW1wb3J0ZXIsIHN0cnVjdCBpZ3RfZmIgKmZiLAo+ICsJCSAgICAgIGludCBkbWFi dWZfZmQsIHVpbnQzMl90IHBpdGNoKQo+ICt7Cj4gKwl1aW50MzJfdCBvZmZzZXRzWzRdLCBwaXRj aGVzWzRdLCBoYW5kbGVzWzRdOwo+ICsJaW50IHJldDsKPiArCj4gKwlmYi0+Z2VtX2hhbmRsZSA9 IHByaW1lX2ZkX3RvX2hhbmRsZShpbXBvcnRlciwgZG1hYnVmX2ZkKTsKPiArCj4gKwloYW5kbGVz WzBdID0gZmItPmdlbV9oYW5kbGU7Cj4gKwlwaXRjaGVzWzBdID0gcGl0Y2g7Cj4gKwlvZmZzZXRz WzBdID0gMDsKPiArCj4gKwlyZXQgPSBkcm1Nb2RlQWRkRkIyKGltcG9ydGVyLCBmYi0+d2lkdGgs IGZiLT5oZWlnaHQsCj4gKwkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ICsJCQkgICAgaGFu ZGxlcywgcGl0Y2hlcywgb2Zmc2V0cywKPiArCQkJICAgICZmYi0+ZmJfaWQsIDApOwo+ICsJaWd0 X2Fzc2VydChyZXQgPT0gMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNldF9mYihzdHJ1Y3Qg aWd0X2ZiICpmYiwKPiArCQkgICBpZ3RfZGlzcGxheV90ICpkaXNwbGF5LAo+ICsJCSAgIGlndF9v dXRwdXRfdCAqb3V0cHV0KQo+ICt7Cj4gKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgMCk7Cj4g KwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIGZiKTsKPiArCXJldCA9IGlndF9kaXNwbGF5X2Nv bW1pdChkaXNwbGF5KTsKPiArCj4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgdGVzdF9jcmMoaW50IGV4cG9ydGVyLCBpbnQgaW1wb3J0ZXIpCj4gK3sKPiAr CWVudW0gcGlwZSBwaXBlID0gUElQRV9BOwo+ICsJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5Owo+ICsJ aWd0X291dHB1dF90ICpvdXRwdXQ7Cj4gKwlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7Cj4gKwlz dHJ1Y3QgaWd0X2ZiIGZiOwo+ICsJaW50IGRtYWJ1Zl9mZDsKPiArCXN0cnVjdCB2Z2VtX2JvIHNj cmF0Y2g7IC8qIGRlc3BpdGUgdGhlIG5hbWUsIGl0IHN1aXRzIGZvciBhbnkKPiArCQkJCSAgIGdl bS1jb21wYXRpYmxlIGRldmljZSAqLwo+ICsJaW50IGksIGo7Cj4gKwlkcm1Nb2RlTW9kZUluZm8g Km1vZGU7Cj4gKwo+ICsJYm9vbCBjcmNfZXF1YWw7Cj4gKwo+ICsJaWd0X2Rpc3BsYXlfcmVxdWly ZSgmZGlzcGxheSwgaW1wb3J0ZXIpOwo+ICsJaWd0X3NraXBfb24ocGlwZSA+PSBkaXNwbGF5Lm5f cGlwZXMpOwo+ICsJb3V0cHV0ID0gaWd0X2dldF9zaW5nbGVfb3V0cHV0X2Zvcl9waXBlKCZkaXNw bGF5LCBwaXBlKTsKPiArCWlndF9yZXF1aXJlX2Yob3V0cHV0LCAiTm8gY29ubmVjdG9yIGZvdW5k IGZvciBwaXBlICVzXG4iLAo+ICsJCSAgICAgIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKTsKPiAr Cj4gKwlpZ3RfZGlzcGxheV9yZXNldCgmZGlzcGxheSk7Cj4gKwlpZ3Rfb3V0cHV0X3NldF9waXBl KG91dHB1dCwgcGlwZSk7Cj4gKwo+ICsJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0 KTsKPiArCXBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhpbXBvcnRlciwgcGlwZSwgSU5URUxf UElQRV9DUkNfU09VUkNFX0FVVE8pOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGNvbG9ycyk7IGkrKykgewo+ICsJCXByZXBhcmVfc2NyYXRjaChleHBvcnRlciwgJnNjcmF0Y2gs IG1vZGUsIGNvbG9yc1tpXS5jb2xvcik7Cj4gKwkJZG1hYnVmX2ZkID0gcHJpbWVfaGFuZGxlX3Rv X2ZkKGV4cG9ydGVyLCBzY3JhdGNoLmhhbmRsZSk7Cj4gKwkJZ2VtX2Nsb3NlKGV4cG9ydGVyLCBz Y3JhdGNoLmhhbmRsZSk7Cj4gKwo+ICsJCXByZXBhcmVfZmIoaW1wb3J0ZXIsICZzY3JhdGNoLCAm ZmIpOwo+ICsJCWltcG9ydF9mYihpbXBvcnRlciwgJmZiLCBkbWFidWZfZmQsIHNjcmF0Y2gucGl0 Y2gpOwo+ICsJCWNsb3NlKGRtYWJ1Zl9mZCk7Cj4gKwo+ICsJCXNldF9mYigmZmIsICZkaXNwbGF5 LCBvdXRwdXQpOwo+ICsJCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhwaXBlX2NyYywgJmNvbG9y c1tpXS5wcmltZV9jcmMpOwo+ICsJCWNvbG9yc1tpXS5wcmltZV9zdHIgPSBpZ3RfY3JjX3RvX3N0 cmluZygmY29sb3JzW2ldLnByaW1lX2NyYyk7Cj4gKwkJaWd0X2RlYnVnKCJQcmltZSBDUkMgZm9y ICUjMDh4IGlzICVzXG4iLAo+ICsJCQkgIGNvbG9yc1tpXS5jb2xvciwgY29sb3JzW2ldLnByaW1l X3N0cik7Cj4gKwkJaWd0X3JlbW92ZV9mYihpbXBvcnRlciwgJmZiKTsKPiArCj4gKwkJaWd0X2Ny ZWF0ZV9jb2xvcl9mYihpbXBvcnRlciwKPiArCQkJCSAgICBtb2RlLT5oZGlzcGxheSwgbW9kZS0+ dmRpc3BsYXksCj4gKwkJCQkgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgTE9DQUxfRFJNX0ZPUk1B VF9NT0RfTk9ORSwKPiArCQkJCSAgICBjb2xvcnNbaV0uciwgY29sb3JzW2ldLmcsIGNvbG9yc1tp XS5iLAo+ICsJCQkJICAgICZmYik7Cj4gKwo+ICsJCXNldF9mYigmZmIsICZkaXNwbGF5LCBvdXRw dXQpOwo+ICsJCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhwaXBlX2NyYywgJmNvbG9yc1tpXS5k aXJlY3RfY3JjKTsKPiArCQljb2xvcnNbaV0uZGlyZWN0X3N0ciA9IGlndF9jcmNfdG9fc3RyaW5n KCZjb2xvcnNbaV0uZGlyZWN0X2NyYyk7Cj4gKwkJaWd0X2RlYnVnKCJEaXJlY3QgQ1JDIGZvciAl IzA4eCBpcyAlc1xuIiwKPiArCQkJICBjb2xvcnNbaV0uY29sb3IsIGNvbG9yc1tpXS5kaXJlY3Rf c3RyKTsKPiArCQlpZ3RfcmVtb3ZlX2ZiKGltcG9ydGVyLCAmZmIpOwo+ICsJfQo+ICsJaWd0X3Bp cGVfY3JjX2ZyZWUocGlwZV9jcmMpOwo+ICsKPiArCWlndF9kZWJ1ZygiQ1JDIHRhYmxlOlxuIik7 Cj4gKwlpZ3RfZGVidWcoIkNvbG9yXHRcdFByaW1lXHRcdERpcmVjdFxuIik7Cj4gKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShjb2xvcnMpOyBpKyspIHsKPiArCQlpZ3RfZGVidWcoIiUjMDh4 XHQlLjhzXHQlLjhzXG4iLCBjb2xvcnNbaV0uY29sb3IsCj4gKwkJCSAgY29sb3JzW2ldLnByaW1l X3N0ciwgY29sb3JzW2ldLmRpcmVjdF9zdHIpOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGNvbG9ycyk7IGkrKykgewo+ICsJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9T SVpFKGNvbG9ycyk7IGorKykgewo+ICsJCQlpZiAoaSA9PSBqKSB7Cj4gKwkJCQlpZ3RfYXNzZXJ0 X2NyY19lcXVhbCgmY29sb3JzW2ldLnByaW1lX2NyYywKPiArCQkJCQkJICAgICAmY29sb3JzW2pd LmRpcmVjdF9jcmMpOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJY3JjX2VxdWFsID0gaWd0X2NoZWNr X2NyY19lcXVhbCgmY29sb3JzW2ldLnByaW1lX2NyYywKPiArCQkJCQkJCQkmY29sb3JzW2pdLmRp cmVjdF9jcmMpOwo+ICsJCQkJaWd0X2Fzc2VydF9mKCFjcmNfZXF1YWwsICJDUkMgc2hvdWxkIGJl IGRpZmZlcmVudCIpOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBydW5fdGVzdF9jcmMoaW50IGV4cG9ydF9jaGlwc2V0LCBpbnQgaW1wb3J0X2NoaXBzZXQpCj4g K3sKPiArCWludCBpbXBvcnRlciA9IC0xOwo+ICsJaW50IGV4cG9ydGVyID0gLTE7Cj4gKwo+ICsJ ZXhwb3J0ZXIgPSBkcm1fb3Blbl9kcml2ZXIoZXhwb3J0X2NoaXBzZXQpOwo+ICsJaW1wb3J0ZXIg PSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKGltcG9ydF9jaGlwc2V0KTsKPiArCj4gKwlpZ3RfcmVx dWlyZShoYXNfcHJpbWVfZXhwb3J0KGV4cG9ydGVyKSk7Cj4gKwlpZ3RfcmVxdWlyZShoYXNfcHJp bWVfaW1wb3J0KGltcG9ydGVyKSk7Cj4gKwlpZ3RfcmVxdWlyZV9waXBlX2NyYyhpbXBvcnRlcik7 Cj4gKwo+ICsJdGVzdF9jcmMoZXhwb3J0ZXIsIGltcG9ydGVyKTsKPiArCWNsb3NlKGltcG9ydGVy KTsKPiArCWNsb3NlKGV4cG9ydGVyKTsKPiArfQo+ICsKPiAraWd0X21haW4KPiArewo+ICsJaWd0 X2ZpeHR1cmUgewo+ICsJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKPiArCX0KPiAr CWlndF9zdWJ0ZXN0KCJjcmMtdmdlbS12a21zIikKPiArCQlydW5fdGVzdF9jcmMoRFJJVkVSX1ZH RU0sIERSSVZFUl9WS01TKTsKPiArCWlndF9zdWJ0ZXN0KCJjcmMtaTkxNS12a21zIikKPiArCQly dW5fdGVzdF9jcmMoRFJJVkVSX0lOVEVMLCBEUklWRVJfVktNUyk7Cj4gKwlpZ3Rfc3VidGVzdCgi Y3JjLXZnZW0taTkxNSIpCj4gKwkJcnVuX3Rlc3RfY3JjKERSSVZFUl9WR0VNLCBEUklWRVJfSU5U RUwpOwo+ICsJaWd0X3N1YnRlc3QoImNyYy1hbWQtaTkxNSIpCj4gKwkJcnVuX3Rlc3RfY3JjKERS SVZFUl9BTURHUFUsIERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3Rfc3VidGVzdCgiY3JjLWk5MTUtYW1k IikKPiArCQlydW5fdGVzdF9jcmMoRFJJVkVSX0lOVEVMLCBEUklWRVJfQU1ER1BVKTsKClRoaXMg aXNuJ3QgYW55IG1vcmUgZ2VuZXJpYyB0aGFuIHdoYXQgd2UgaGF2ZSBlLmcuIGluIHByaW1lX3Zn ZW0gYWxyZWFkeS4KVGhlIHdheSB0byBkbyBhIGdlbmVyaWMga21zIHRlc3RjYXNlIGlzIHRvIHVz ZSBEUklWRVJfQU5ZICh5ZXMgc29tZSBvZiB0aGUKZWFybGllciBjb252ZXJzaW9uIHVuZm9ydHVu YXRlbHkgdXNlZCBzdHVmZiBsaWtlIERSSVZFUl9JTlRFTCB8CkRSSVZFUl9BTURHUFUpLiBXaXRo IHRoYXQgeW91IGFsc28gZG9uJ3QgbmVlZCB5b3VyIGxpYnJhcnkgcHJlcCBwYXRjaCwKYmVjYXVz ZSBubyBuZWVkIGZvciBhIERSSVZFUl9WS01TLgoKSW1vIGJlc3QgdG8gc3RhcnQgb3V0IGJ5IGNv bnZlcnRpbmcgcHJpbWVfdmdlbS5jIGZvciB0aGlzLCBhbmQgYWRkaW5nIGZvcgp0aGUgaTkxNSBz cGVjaWZpYyB0ZXN0cyAoYnV0IF9vbmx5XyBmb3IgdGhvc2UpIGEgc3BlY2lmaWMgImlzIHRoaXMg aTkxNSIKY2hlY2ssIHNvIHdlIHNraXAgdGhvc2UgdGVzdHMuIEFuZCByZXBsYWNlIERSSVZFUl9J TlRFTCBieSBEUklWRVJfQU5ZLgpXZWxsLCBhbnl0aGluZyBleGNlcHQgdmdlbSA6LSkKCkFsc28g dGhlIGNyYyB0ZXN0Y2FzZXMgc2hvdWxkIGJlIDEwMCUgZ2VuZXJpYy4KLURhbmllbAotLSAKRGFu aWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Js b2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2