From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 34B886E0EB for ; Thu, 11 Jul 2019 17:47:04 +0000 (UTC) Date: Thu, 11 Jul 2019 20:46:59 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Message-ID: <20190711174659.GB5942@intel.com> References: <20190527171924.19493-1-nicholas.kazlauskas@amd.com> <933a82fd-730a-70f3-6d70-01053bf696a4@amd.com> <5a71efb3-98db-6fdf-d438-d1f748c56d13@amd.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Subject: Re: [igt-dev] [PATCH i-g-t] tests/amdgpu: Add color tests for amdgpu 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: Daniel Vetter Cc: "igt-dev@lists.freedesktop.org" List-ID: T24gVGh1LCBKdWwgMTEsIDIwMTkgYXQgMDc6MzA6MzlQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBUaHUsIEp1bCAxMSwgMjAxOSBhdCA3OjE5IFBNIEthemxhdXNrYXMsIE5pY2hv bGFzCj4gPE5pY2hvbGFzLkthemxhdXNrYXNAYW1kLmNvbT4gd3JvdGU6Cj4gPgo+ID4gT24gNy8x MS8xOSAxOjE1IFBNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4gPiBPbiBXZWQsIE1heSAyOSwg MjAxOSBhdCA4OjQzIFBNIExpLCBTdW4gcGVuZyAoTGVvKSA8U3VucGVuZy5MaUBhbWQuY29tPiB3 cm90ZToKPiA+ID4+Cj4gPiA+Pgo+ID4gPj4KPiA+ID4+IE9uIDIwMTktMDUtMjcgMToxOSBwLm0u LCBOaWNob2xhcyBLYXpsYXVza2FzIHdyb3RlOgo+ID4gPj4+IFRoZSBEUk0gY29sb3IgbWFuYWdl bWVudCBwaXBlbGluZSBkb2Vzbid0IGRpcmVjdGx5IG1hcCB0byBBTUQgaGFyZHdhcmUKPiA+ID4+ PiBzbyBjcmVhdGl2ZSBzb2x1dGlvbnMgdG8gaW1wbGVtZW50aW5nIENSVEMgcmVnYW1tYSwgQ1RN IGFuZCBnYW1tYSB3ZXJlCj4gPiA+Pj4gbmVlZGVkIGZvciBib3RoIERDRSBhbmQgRENOLiBBIGZl dyBtaXN0YWtlcyB3ZXJlIG1hZGUgaW4gdGhlIHByb2Nlc3MKPiA+ID4+PiB0aGF0IHdlcmVuJ3Qg Y2F1Z2h0IGJ5IGttc19jb2xvckAgdGVzdHM6Cj4gPiA+Pj4KPiA+ID4+PiAtIENhbid0IGdldCBs aW5lYXIgZGVnYW1tYSBvdXRwdXQgd2l0aG91dCBzZXR0aW5nIGEgY3VzdG9tIGRlZ2FtbWEKPiA+ ID4+PiAtIENhbid0IHNwZWNpZnkgYSBub24tbGluZWFyIGRlZ2FtbWEgdGhhdCBwcm9kdWNlcyBj b3JyZWN0IG91dHB1dAo+ID4gPj4+IC0gQ2FuJ3Qgc3BlY2lmeSBhIGNvcnJlY3QgZ2FtbWEgd2hl biBhIGxpbmVhciBkZWdhbW1hIGlzIHVzZWQKPiA+ID4+Pgo+ID4gPj4+IFRoZXNlIGFyZSBjYXVz ZWQgYnkgdXNpbmcgaW1wbGljaXQgc1JHQiBkZWdhbW1hIHRoZW4gc1JHQiBnYW1tYSB3aGVuIG5v Cj4gPiA+Pj4gbWF0cmljZXMgYXJlIHNldC4gVGhpcyBwcm9kdWNlcyB2aXN1YWxseSBjb3JyZWN0 IG91dHB1dCB3aGVuIHVzaW5nIGEKPiA+ID4+PiBDVE0gd2l0aCBubyBtYXRyaWNlcyBzZXQsIGJ1 dCBpdCdzIGFsc28gdGVjaG5pY2FsbHkgdGhlIGluY29ycmVjdAo+ID4gPj4+IG91dHB1dCBhY2Nv cmRpbmcgdG8gdGhlIERSTSBBUEkgZG9jdW1lbnRhdGlvbi4KPiA+ID4+Pgo+ID4gPj4+IFRoZXNl IHRlc3RzIGhlbHAgdmVyaWZ5IHRoYXQgQU1ER1BVIGZvbGxvd3MgdGhlIERSTSBzcGVjIHdoZW4g aXQgY29tZXMKPiA+ID4+PiB0byBzZXR0aW5nIGxpbmVhci9ieXBhc3MgZ2FtbWEgYW5kIHJlZ2Ft bWEgTFVULgo+ID4gPj4+Cj4gPiA+Pj4gVGhlIGV4aXN0aW5nIGttc19jb2xvckAgdGVzdHMgYXJl IHdyaXR0ZW4gY29ycmVjdGx5IGFscmVhZHksIHNvCj4gPiA+Pj4gYW55dGhpbmcgdGhhdCBsb29r cyBzaGFyZWQgaW4gdGhlc2UgaXMgcmVhbGx5IGp1c3QgdG8gdmVyaWZ5IHRoYXQgd2UncmUKPiA+ ID4+PiBubyBsb25nZXIgZG9pbmcgYW55IHN0cmFuZ2UgdGVzdCBzcGVjaWZpYyB3b3JrYXJvdW5k cyBvdXRzaWRlIG9mIHRoZQo+ID4gPj4+IHNwZWMgb3IgZG9jdW1lbnRhdGlvbi4KPiA+ID4+Pgo+ ID4gPj4+IENjOiBMZW8gTGkgPHN1bnBlbmcubGlAYW1kLmNvbT4KPiA+ID4+PiBDYzogSGFycnkg V2VudGxhbmQgPGhhcnJ5LndlbnRsYW5kQGFtZC5jb20+Cj4gPiA+Pj4gU2lnbmVkLW9mZi1ieTog TmljaG9sYXMgS2F6bGF1c2thcyA8bmljaG9sYXMua2F6bGF1c2thc0BhbWQuY29tPgo+ID4gPj4K PiA+ID4+IExHVE0sIHRoYW5rcyBmb3IgdGhlIHRlc3QhCj4gPiA+Pgo+ID4gPj4gUmV2aWV3ZWQt Ynk6IExlbyBMaSA8c3VucGVuZy5saUBhbWQuY29tPgo+ID4gPgo+ID4gPiBidHcgd2h5IGlzIHRo aXMgbm90IGEgbmV3IHN1YnRlc3QgZm9yIGttc19jb2xvcj8gRnJvbSBhIHF1aWNrIGxvb2sKPiA+ ID4gaXQncyBhbGwgZ2VuZXJpYy4gVGhlIHNwZWNpZmljIHRlc3RzY2FzZSBmb3IgYW1kcGdwdSAo bGlrZQo+ID4gPiBhbWRfYnlwYXNzLmMpIGFsbCBtYWtlIHNlbnNlLCBzaW5jZSB0aGV5IHVzZSBz cGVjaWZpYyBjcmMgdGFwIHBvaW50cwo+ID4gPiBhbmQgY2hlY2sgaHcgaW1wbGVtZW50YXRpb24g ZGV0YWlscy4gQnV0IHRoaXMgbG9va3MgbGlrZSBhIGdlbmVyaWMKPiA+ID4gaXNzdWUgd2l0aCB0 aGUgY29sb3IgY29ycmVjdGlvbiBrbXMgc3BlYyAuLi4gQWxzbyBhZGRpbmcgSGFycnkuCj4gPiA+ IC1EYW5pZWwKPiA+Cj4gPiBUaGUgdGVzdF9jcnRjX2x1dF9hY2N1cmFjeSB0ZXN0IGlzIHNwZWNp ZmljIHRvIG91ciBEQ04gaGFyZHdhcmUgaW4gdGVybXMKPiA+IG9mIHdoYXQgd2UgZXhwZWN0IGFu ZCB0aGF0IGl0IHJlcXVpcmVzIGEgaW5kZXBlbmRlbnQgcGVyIGNoYW5uZWwgQ1JDLgo+ID4KPiA+ IFRoZSBvdGhlciB0d28gdGVzdHMgY291bGQgcHJvYmFibHkgYmUgYWRkZWQgdG8ga21zX2NvbG9y IHdpdGggdGhlCj4gPiBleHBlY3RhdGlvbiB0aGF0IGEgbGluZWFyIExVVCBpcyBnb2luZyB0byBi ZSB0aGUgc2FtZSBhcyBub3Qgc2V0dGluZyBhbnkKPiA+IExVVCBhdCBhbGwgb24gdGhlIGhhcmR3 YXJlLgo+ID4KPiA+IEkgZG9uJ3QgdGhpbmsgdGhlcmUncyBhbnkgaXNzdWUgaGVyZSB3aXRoIHRo ZSBrbXMgc3BlYywgaXQncyBjbGVhcmx5Cj4gPiBkZWZpbmVkIC0gd2Ugd2VyZSBwcmV2aW91c2x5 IGJyZWFraW5nIHRoZSBzcGVjIGJ5IG5vdCBhY3R1YWxseSB1c2luZwo+ID4gYnlwYXNzIGZvciBh IE5VTEwgTFVULgo+IAo+IEkgbWVhbjogeW91IGZvdW5kIGEgZ2FwIGJldHdlZW4gdGhlIHNwZWMg YW5kIHRoZSBrbXNfY29sb3IgdGVzdAo+IGNvdmVyYWdlLiBJIHRoaW5rIGl0J3Mgd29ydGggZml4 aW5nIHRoaXMsIHNpbmNlIGlmIHlvdSBoaXQgdGhpcyBvbmUsCj4gdGhlbiBwcm9iYWJseSBzb21l b25lIGVsc2UgaGl0cyB0aGlzIHRvbyB3aXRoIHRoZWlyIGh3L2RyaXZlciBjb21iby4KPiBBbmQg dGhlIGxvbmcgdGVybSBnb2FsIHdpdGggaWd0IGlzIHRoYXQgYXQgbGVhc3QgZm9yIGttcywgaXQg d291bGQgYmUKPiBhIGNvbmZvcm1hbmNlIHRlc3Qgc3VpdGUuIFdvdWxkIGJlIGdyZWF0IGlmIHlv dSBjb3VsZCBwb3J0IHRoZXNlIHR3bwo+IHRlc3RzIHRvIGttc19jb2xvciAodGhlIG9uZSB0aGF0 IG1ha2VzIHNwZWNpZmljIGFzc3VtcHRpb25zIGFib3V0IERDTgo+IGh3IG9idmlvdXNseSBjYW4n dCBiZSBwb3J0ZWQpLiBBbmQgeWVhaCB0aGUgYXNzdW1wdGlvbiwgYXQgbGVhc3QgZm9yCj4gUkdC IGZvcm1hdHMgaXMgdGhhdCAibm8gZ2FtbSIgPT0gImxpbmVhciBnYW1tYSIsIGFuZCBoYXZpbmcg YSB0ZXN0Y2FzZQo+IGZvciB0aGlzIGV4cGxpY2l0bHkgc291bmRzIGxpa2UgYSBncmVhdCBpZGVh LgoKTm8gZ2FtbWEgIT0gbGluZWFyIGdhbW1hLiBPbiBvdXIgaHcgdGhlIGdhbW1hIExVVCB1c3Vh bGx5IGhhcyBsb3dlcgpwcmVjaXNpb24uCgo+IC1EYW5pZWwKPiAKPiA+IE5pY2hvbGFzIEthemxh dXNrYXMKPiA+Cj4gPiA+Cj4gPiA+Pgo+ID4gPj4+IC0tLQo+ID4gPj4+ICAgIHRlc3RzL01ha2Vm aWxlLnNvdXJjZXMgICB8ICAgMSArCj4gPiA+Pj4gICAgdGVzdHMvYW1kZ3B1L2FtZF9jb2xvci5j IHwgNDA1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gPj4+ICAg IHRlc3RzL2FtZGdwdS9tZXNvbi5idWlsZCB8ICAgMSArCj4gPiA+Pj4gICAgMyBmaWxlcyBjaGFu Z2VkLCA0MDcgaW5zZXJ0aW9ucygrKQo+ID4gPj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0 cy9hbWRncHUvYW1kX2NvbG9yLmMKPiA+ID4+Pgo+ID4gPj4+IGRpZmYgLS1naXQgYS90ZXN0cy9N YWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gPj4+IGluZGV4IDJk NWM5MjllLi5lZjNjMDNmMiAxMDA2NDQKPiA+ID4+PiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzCj4gPiA+Pj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gPj4+IEBAIC02LDYg KzYsNyBAQCBOT1VWRUFVX1RFU1RTID0gXAo+ID4gPj4+Cj4gPiA+Pj4gICAgQU1ER1BVX1RFU1RT ID0gXAo+ID4gPj4+ICAgICAgICBhbWRncHUvYW1kX2Jhc2ljIFwKPiA+ID4+PiArICAgICBhbWRn cHUvYW1kX2NvbG9yIFwKPiA+ID4+PiAgICAgICAgYW1kZ3B1L2FtZF9jc19ub3AgXAo+ID4gPj4+ ICAgICAgICBhbWRncHUvYW1kX3ByaW1lIFwKPiA+ID4+PiAgICAgICAgYW1kZ3B1L2FtZF9hYm0g XAo+ID4gPj4+IGRpZmYgLS1naXQgYS90ZXN0cy9hbWRncHUvYW1kX2NvbG9yLmMgYi90ZXN0cy9h bWRncHUvYW1kX2NvbG9yLmMKPiA+ID4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPj4+IGlu ZGV4IDAwMDAwMDAwLi4wYmJlZTQzZAo+ID4gPj4+IC0tLSAvZGV2L251bGwKPiA+ID4+PiArKysg Yi90ZXN0cy9hbWRncHUvYW1kX2NvbG9yLmMKPiA+ID4+PiBAQCAtMCwwICsxLDQwNSBAQAo+ID4g Pj4+ICsvKgo+ID4gPj4+ICsgKiBDb3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2Vz LCBJbmMuCj4gPiA+Pj4gKyAqCj4gPiA+Pj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gPiA+Pj4gKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCj4gPiA+Pj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+ID4+PiAr ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCj4gPiA+Pj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4gPj4+ICsgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgo+ID4gPj4+ICsgKgo+ID4gPj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgo+ID4g Pj4+ICsgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy ZS4KPiA+ID4+PiArICoKPiA+ID4+PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiA+ID4+PiArICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCj4gPiA+Pj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ID4gPj4+ICsgKiBU SEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IKPiA+ID4+PiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4gPiA+Pj4gKyAqIEFSSVNJ TkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUgo+ID4gPj4+ICsgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gPiA+ Pj4gKyAqLwo+ID4gPj4+ICsKPiA+ID4+PiArI2luY2x1ZGUgImlndC5oIgo+ID4gPj4+ICsKPiA+ ID4+PiArLyogKERlKWdhbW1hIExVVC4gKi8KPiA+ID4+PiArdHlwZWRlZiBzdHJ1Y3QgbHV0IHsK PiA+ID4+PiArICAgICBzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAqZGF0YTsKPiA+ID4+PiArICAgICB1 aW50MzJfdCBzaXplOwo+ID4gPj4+ICt9IGx1dF90Owo+ID4gPj4+ICsKPiA+ID4+PiArLyogUkdC IGNvbG9yLiAqLwo+ID4gPj4+ICt0eXBlZGVmIHN0cnVjdCBjb2xvciB7Cj4gPiA+Pj4gKyAgICAg ZG91YmxlIHI7Cj4gPiA+Pj4gKyAgICAgZG91YmxlIGc7Cj4gPiA+Pj4gKyAgICAgZG91YmxlIGI7 Cj4gPiA+Pj4gK30gY29sb3JfdDsKPiA+ID4+PiArCj4gPiA+Pj4gKy8qIENvbW1vbiB0ZXN0IGRh dGEuICovCj4gPiA+Pj4gK3R5cGVkZWYgc3RydWN0IGRhdGEgewo+ID4gPj4+ICsgICAgIGlndF9k aXNwbGF5X3QgZGlzcGxheTsKPiA+ID4+PiArICAgICBpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPiA+ ID4+PiArICAgICBpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiA+ID4+PiArICAgICBpZ3RfcGlwZV90 ICpwaXBlOwo+ID4gPj4+ICsgICAgIGlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKPiA+ID4+PiAr ICAgICBkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gPiA+Pj4gKyAgICAgZW51bSBwaXBlIHBpcGVf aWQ7Cj4gPiA+Pj4gKyAgICAgaW50IGZkOwo+ID4gPj4+ICsgICAgIGludCB3Owo+ID4gPj4+ICsg ICAgIGludCBoOwo+ID4gPj4+ICsgICAgIHVpbnQzMl90IHJlZ2FtbWFfbHV0X3NpemU7Cj4gPiA+ Pj4gKyAgICAgdWludDMyX3QgZGVnYW1tYV9sdXRfc2l6ZTsKPiA+ID4+PiArfSBkYXRhX3Q7Cj4g PiA+Pj4gKwo+ID4gPj4+ICtzdGF0aWMgdm9pZCBsdXRfaW5pdChsdXRfdCAqbHV0LCB1aW50MzJf dCBzaXplKQo+ID4gPj4+ICt7Cj4gPiA+Pj4gKyAgICAgaWd0X2Fzc2VydChzaXplID4gMCk7Cj4g PiA+Pj4gKwo+ID4gPj4+ICsgICAgIGx1dC0+c2l6ZSA9IHNpemU7Cj4gPiA+Pj4gKyAgICAgbHV0 LT5kYXRhID0gbWFsbG9jKHNpemUgKiBzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpKTsKPiA+ ID4+PiArICAgICBpZ3RfYXNzZXJ0KGx1dCk7Cj4gPiA+Pj4gK30KPiA+ID4+PiArCj4gPiA+Pj4g Ky8qIEdlbmVyYXRlcyB0aGUgbGluZWFyIGdhbW1hIExVVC4gKi8KPiA+ID4+PiArc3RhdGljIHZv aWQgbHV0X2dlbl9saW5lYXIobHV0X3QgKmx1dCwgdWludDE2X3QgbWFzaykKPiA+ID4+PiArewo+ ID4gPj4+ICsgICAgIHVpbnQzMl90IG4gPSBsdXQtPnNpemUgLSAxOwo+ID4gPj4+ICsgICAgIHVp bnQzMl90IGk7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBsdXQtPnNp emU7ICsraSkgewo+ID4gPj4+ICsgICAgICAgICAgICAgdWludDMyX3QgdiA9IChpICogMHhmZmZm IC8gbikgJiBtYXNrOwo+ID4gPj4+ICsKPiA+ID4+PiArICAgICAgICAgICAgIGx1dC0+ZGF0YVtp XS5yZWQgPSB2Owo+ID4gPj4+ICsgICAgICAgICAgICAgbHV0LT5kYXRhW2ldLmJsdWUgPSB2Owo+ ID4gPj4+ICsgICAgICAgICAgICAgbHV0LT5kYXRhW2ldLmdyZWVuID0gdjsKPiA+ID4+PiArICAg ICB9Cj4gPiA+Pj4gK30KPiA+ID4+PiArCj4gPiA+Pj4gKy8qIEdlbmVyYXRlcyB0aGUgc1JHQiBk ZWdhbW1hIExVVC4gKi8KPiA+ID4+PiArc3RhdGljIHZvaWQgbHV0X2dlbl9kZWdhbW1hX3NyZ2Io bHV0X3QgKmx1dCwgdWludDE2X3QgbWFzaykKPiA+ID4+PiArewo+ID4gPj4+ICsgICAgIGRvdWJs ZSByYW5nZSA9IGx1dC0+c2l6ZSAtIDE7Cj4gPiA+Pj4gKyAgICAgdWludDMyX3QgaTsKPiA+ID4+ PiArCj4gPiA+Pj4gKyAgICAgZm9yIChpID0gMDsgaSA8IGx1dC0+c2l6ZTsgKytpKSB7Cj4gPiA+ Pj4gKyAgICAgICAgICAgICBkb3VibGUgdSwgY29lZmY7Cj4gPiA+Pj4gKyAgICAgICAgICAgICB1 aW50MzJfdCB2Owo+ID4gPj4+ICsKPiA+ID4+PiArICAgICAgICAgICAgIHUgPSBpIC8gcmFuZ2U7 Cj4gPiA+Pj4gKyAgICAgICAgICAgICBjb2VmZiA9IHUgPD0gMC4wNDA0NDk5MzYgPyAodSAvIDEy LjkyKQo+ID4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHBv dygodSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpKTsKPiA+ID4+PiArICAgICAgICAgICAgIHYgPSAo dWludDMyX3QpKGNvZWZmICogMHhmZmZmKSAmIG1hc2s7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAg ICAgICAgICAgbHV0LT5kYXRhW2ldLnJlZCA9IHY7Cj4gPiA+Pj4gKyAgICAgICAgICAgICBsdXQt PmRhdGFbaV0uYmx1ZSA9IHY7Cj4gPiA+Pj4gKyAgICAgICAgICAgICBsdXQtPmRhdGFbaV0uZ3Jl ZW4gPSB2Owo+ID4gPj4+ICsgICAgIH0KPiA+ID4+PiArfQo+ID4gPj4+ICsKPiA+ID4+PiArLyog R2VuZXJhdGVzIHRoZSBzUkdCIGdhbW1hIExVVC4gKi8KPiA+ID4+PiArc3RhdGljIHZvaWQgbHV0 X2dlbl9yZWdhbW1hX3NyZ2IobHV0X3QgKmx1dCwgdWludDE2X3QgbWFzaykKPiA+ID4+PiArewo+ ID4gPj4+ICsgICAgIGRvdWJsZSByYW5nZSA9IGx1dC0+c2l6ZSAtIDE7Cj4gPiA+Pj4gKyAgICAg dWludDMyX3QgaTsKPiA+ID4+PiArCj4gPiA+Pj4gKyAgICAgZm9yIChpID0gMDsgaSA8IGx1dC0+ c2l6ZTsgKytpKSB7Cj4gPiA+Pj4gKyAgICAgICAgICAgICBkb3VibGUgdSwgY29lZmY7Cj4gPiA+ Pj4gKyAgICAgICAgICAgICB1aW50MzJfdCB2Owo+ID4gPj4+ICsKPiA+ID4+PiArICAgICAgICAg ICAgIHUgPSBpIC8gcmFuZ2U7Cj4gPiA+Pj4gKyAgICAgICAgICAgICBjb2VmZiA9IHUgPD0gMC4w MDMxMzA4MCA/ICgxMi45MiAqIHUpCj4gPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6ICgxLjA1NSAqIHBvdyh1LCAxLjAgLyAyLjQpIC0gMC4wNTUpOwo+ID4gPj4+ ICsgICAgICAgICAgICAgdiA9ICh1aW50MzJfdCkoY29lZmYgKiAweGZmZmYpICYgbWFzazsKPiA+ ID4+PiArCj4gPiA+Pj4gKyAgICAgICAgICAgICBsdXQtPmRhdGFbaV0ucmVkID0gdjsKPiA+ID4+ PiArICAgICAgICAgICAgIGx1dC0+ZGF0YVtpXS5ibHVlID0gdjsKPiA+ID4+PiArICAgICAgICAg ICAgIGx1dC0+ZGF0YVtpXS5ncmVlbiA9IHY7Cj4gPiA+Pj4gKyAgICAgfQo+ID4gPj4+ICt9Cj4g PiA+Pj4gKwo+ID4gPj4+ICtzdGF0aWMgdm9pZCBsdXRfZnJlZShsdXRfdCAqbHV0KQo+ID4gPj4+ ICt7Cj4gPiA+Pj4gKyAgICAgaWYgKGx1dC0+ZGF0YSkgewo+ID4gPj4+ICsgICAgICAgICAgICAg ZnJlZShsdXQtPmRhdGEpOwo+ID4gPj4+ICsgICAgICAgICAgICAgbHV0LT5kYXRhID0gTlVMTDsK PiA+ID4+PiArICAgICB9Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgIGx1dC0+c2l6ZSA9IDA7Cj4g PiA+Pj4gK30KPiA+ID4+PiArCj4gPiA+Pj4gKy8qIEZpbGxzIGEgRkIgd2l0aCB0aGUgc29saWQg Y29sb3IgZ2l2ZW4uICovCj4gPiA+Pj4gK3N0YXRpYyB2b2lkIGRyYXdfY29sb3IoaWd0X2ZiX3Qg KmZiLCBkb3VibGUgciwgZG91YmxlIGcsIGRvdWJsZSBiKQo+ID4gPj4+ICt7Cj4gPiA+Pj4gKyAg ICAgY2Fpcm9fdCAqY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChmYi0+ZmQsIGZiKTsKPiA+ID4+PiAr Cj4gPiA+Pj4gKyAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VS Q0UpOwo+ID4gPj4+ICsgICAgIGlndF9wYWludF9jb2xvcihjciwgMCwgMCwgZmItPndpZHRoLCBm Yi0+aGVpZ2h0LCByLCBnLCBiKTsKPiA+ID4+PiArICAgICBpZ3RfcHV0X2NhaXJvX2N0eChmYi0+ ZmQsIGZiLCBjcik7Cj4gPiA+Pj4gK30KPiA+ID4+PiArCj4gPiA+Pj4gKy8qIEdlbmVyYXRlcyB0 aGUgZ2FtbWEgdGVzdCBwYXR0ZXJuLiAqLwo+ID4gPj4+ICtzdGF0aWMgdm9pZCBkcmF3X2dhbW1h X3Rlc3QoaWd0X2ZiX3QgKmZiKQo+ID4gPj4+ICt7Cj4gPiA+Pj4gKyAgICAgY2Fpcm9fdCAqY3Ig PSBpZ3RfZ2V0X2NhaXJvX2N0eChmYi0+ZmQsIGZiKTsKPiA+ID4+PiArICAgICBpbnQgZ2ggPSBm Yi0+aGVpZ2h0IC8gNDsKPiA+ID4+PiArCj4gPiA+Pj4gKyAgICAgaWd0X3BhaW50X2NvbG9yX2dy YWRpZW50KGNyLCAwLCAwLCBmYi0+d2lkdGgsIGdoLCAxLCAxLCAxKTsKPiA+ID4+PiArICAgICBp Z3RfcGFpbnRfY29sb3JfZ3JhZGllbnQoY3IsIDAsIGdoLCBmYi0+d2lkdGgsIGdoLCAxLCAwLCAw KTsKPiA+ID4+PiArICAgICBpZ3RfcGFpbnRfY29sb3JfZ3JhZGllbnQoY3IsIDAsIGdoICogMiwg ZmItPndpZHRoLCBnaCwgMCwgMSwgMCk7Cj4gPiA+Pj4gKyAgICAgaWd0X3BhaW50X2NvbG9yX2dy YWRpZW50KGNyLCAwLCBnaCAqIDMsIGZiLT53aWR0aCwgZ2gsIDAsIDAsIDEpOwo+ID4gPj4+ICsK PiA+ID4+PiArICAgICBpZ3RfcHV0X2NhaXJvX2N0eChmYi0+ZmQsIGZiLCBjcik7Cj4gPiA+Pj4g K30KPiA+ID4+PiArCj4gPiA+Pj4gKy8qIFNldHMgdGhlIGRlZ2FtbWEgTFVULiAqLwo+ID4gPj4+ ICtzdGF0aWMgdm9pZCBzZXRfZGVnYW1tYV9sdXQoZGF0YV90ICpkYXRhLCBsdXRfdCBjb25zdCAq bHV0KQo+ID4gPj4+ICt7Cj4gPiA+Pj4gKyAgICAgc2l6ZV90IHNpemUgPSBsdXQgPyBzaXplb2Yo bHV0LT5kYXRhWzBdKSAqIGx1dC0+c2l6ZSA6IDA7Cj4gPiA+Pj4gKyAgICAgY29uc3Qgdm9pZCAq cHRyID0gbHV0ID8gbHV0LT5kYXRhIDogTlVMTDsKPiA+ID4+PiArCj4gPiA+Pj4gKyAgICAgaWd0 X3BpcGVfb2JqX3JlcGxhY2VfcHJvcF9ibG9iKGRhdGEtPnBpcGUsIElHVF9DUlRDX0RFR0FNTUFf TFVULCBwdHIsCj4gPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emUpOwo+ID4gPj4+ICt9Cj4gPiA+Pj4gKwo+ID4gPj4+ICsvKiBTZXRzIHRoZSByZWdhbW1hIExV VC4gKi8KPiA+ID4+PiArc3RhdGljIHZvaWQgc2V0X3JlZ2FtbWFfbHV0KGRhdGFfdCAqZGF0YSwg bHV0X3QgY29uc3QgKmx1dCkKPiA+ID4+PiArewo+ID4gPj4+ICsgICAgIHNpemVfdCBzaXplID0g bHV0ID8gc2l6ZW9mKGx1dC0+ZGF0YVswXSkgKiBsdXQtPnNpemUgOiAwOwo+ID4gPj4+ICsgICAg IGNvbnN0IHZvaWQgKnB0ciA9IGx1dCA/IGx1dC0+ZGF0YSA6IE5VTEw7Cj4gPiA+Pj4gKwo+ID4g Pj4+ICsgICAgIGlndF9waXBlX29ial9yZXBsYWNlX3Byb3BfYmxvYihkYXRhLT5waXBlLCBJR1Rf Q1JUQ19HQU1NQV9MVVQsIHB0ciwKPiA+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZSk7Cj4gPiA+Pj4gK30KPiA+ID4+PiArCj4gPiA+Pj4gKy8qIENvbW1vbiB0 ZXN0IHNldHVwLiAqLwo+ID4gPj4+ICtzdGF0aWMgdm9pZCB0ZXN0X2luaXQoZGF0YV90ICpkYXRh KQo+ID4gPj4+ICt7Cj4gPiA+Pj4gKyAgICAgaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRh LT5kaXNwbGF5Owo+ID4gPj4+ICsKPiA+ID4+PiArICAgICAvKiBJdCBkb2Vzbid0IG1hdHRlciB3 aGljaCBwaXBlIHdlIGNob29zZSBvbiBhbWRwZ3UuICovCj4gPiA+Pj4gKyAgICAgZGF0YS0+cGlw ZV9pZCA9IFBJUEVfQTsKPiA+ID4+PiArICAgICBkYXRhLT5waXBlID0gJmRhdGEtPmRpc3BsYXku cGlwZXNbZGF0YS0+cGlwZV9pZF07Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgIGlndF9kaXNwbGF5 X3Jlc2V0KGRpc3BsYXkpOwo+ID4gPj4+ICsKPiA+ID4+PiArICAgICBkYXRhLT5vdXRwdXQgPSBp Z3RfZ2V0X3NpbmdsZV9vdXRwdXRfZm9yX3BpcGUoZGlzcGxheSwgZGF0YS0+cGlwZV9pZCk7Cj4g PiA+Pj4gKyAgICAgaWd0X3JlcXVpcmUoZGF0YS0+b3V0cHV0KTsKPiA+ID4+PiArCj4gPiA+Pj4g KyAgICAgZGF0YS0+bW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUoZGF0YS0+b3V0cHV0KTsKPiA+ ID4+PiArICAgICBpZ3RfYXNzZXJ0KGRhdGEtPm1vZGUpOwo+ID4gPj4+ICsKPiA+ID4+PiArICAg ICBkYXRhLT5wcmltYXJ5ID0KPiA+ID4+PiArICAgICAgICAgICAgIGlndF9waXBlX2dldF9wbGFu ZV90eXBlKGRhdGEtPnBpcGUsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ID4gPj4+ICsKPiA+ ID4+PiArICAgICBkYXRhLT5waXBlX2NyYyA9IGlndF9waXBlX2NyY19uZXcoZGF0YS0+ZmQsIGRh dGEtPnBpcGVfaWQsCj4gPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9BVVRPKTsKPiA+ID4+PiArCj4gPiA+Pj4gKyAgICAg aWd0X291dHB1dF9zZXRfcGlwZShkYXRhLT5vdXRwdXQsIGRhdGEtPnBpcGVfaWQpOwo+ID4gPj4+ ICsKPiA+ID4+PiArICAgICBkYXRhLT5kZWdhbW1hX2x1dF9zaXplID0KPiA+ID4+PiArICAgICAg ICAgICAgIGlndF9waXBlX29ial9nZXRfcHJvcChkYXRhLT5waXBlLCBJR1RfQ1JUQ19ERUdBTU1B X0xVVF9TSVpFKTsKPiA+ID4+PiArICAgICBpZ3RfYXNzZXJ0X2x0KDAsIGRhdGEtPmRlZ2FtbWFf bHV0X3NpemUpOwo+ID4gPj4+ICsKPiA+ID4+PiArICAgICBkYXRhLT5yZWdhbW1hX2x1dF9zaXpl ID0KPiA+ID4+PiArICAgICAgICAgICAgIGlndF9waXBlX29ial9nZXRfcHJvcChkYXRhLT5waXBl LCBJR1RfQ1JUQ19HQU1NQV9MVVRfU0laRSk7Cj4gPiA+Pj4gKyAgICAgaWd0X2Fzc2VydF9sdCgw LCBkYXRhLT5yZWdhbW1hX2x1dF9zaXplKTsKPiA+ID4+PiArCj4gPiA+Pj4gKyAgICAgZGF0YS0+ dyA9IGRhdGEtPm1vZGUtPmhkaXNwbGF5Owo+ID4gPj4+ICsgICAgIGRhdGEtPmggPSBkYXRhLT5t b2RlLT52ZGlzcGxheTsKPiA+ID4+PiArfQo+ID4gPj4+ICsKPiA+ID4+PiArLyogQ29tbW9uIHRl c3QgY2xlYW51cC4gKi8KPiA+ID4+PiArc3RhdGljIHZvaWQgdGVzdF9maW5pKGRhdGFfdCAqZGF0 YSkKPiA+ID4+PiArewo+ID4gPj4+ICsgICAgIGlndF9waXBlX2NyY19mcmVlKGRhdGEtPnBpcGVf Y3JjKTsKPiA+ID4+PiArICAgICBpZ3RfZGlzcGxheV9yZXNldCgmZGF0YS0+ZGlzcGxheSk7Cj4g PiA+Pj4gK30KPiA+ID4+PiArCj4gPiA+Pj4gKy8qCj4gPiA+Pj4gKyAqIE9sZGVyIHZlcnNpb25z IG9mIGFtZGdwdSB3b3VsZCBwdXQgdGhlIHBpcGUgaW50byBieXBhc3MgbW9kZSBmb3IgZGVnYW1t YQo+ID4gPj4+ICsgKiB3aGVuIHBhc3NlZCBhIGxpbmVhciBzUkdCIG1hdHJpeCBidXQgd291bGQg c3RpbGwgdXNlIGFuIHNSR0IgcmVnYW1tYQo+ID4gPj4+ICsgKiBtYXRyaXggaWYgbm90IHBhc3Nl ZCBhbnkuIFRoZSB3aG9sZSBwaXBlIHNob3VsZCBiZSBpbiBsaW5lYXIgYnlwYXNzIG1vZGUKPiA+ ID4+PiArICogd2hlbiBhbGwgdGhlIG1hdHJpY2VzIGFyZSBOVUxMIC0gQ1JDcyBmb3IgYSBsaW5l YXIgZGVnYW1tYSBtYXRyaXggYW5kCj4gPiA+Pj4gKyAqIGEgTlVMTCBvbmUgc2hvdWxkIG1hdGNo Lgo+ID4gPj4+ICsgKi8KPiA+ID4+PiArc3RhdGljIHZvaWQgdGVzdF9jcnRjX2xpbmVhcl9kZWdh bW1hKGRhdGFfdCAqZGF0YSkKPiA+ID4+PiArewo+ID4gPj4+ICsgICAgIGlndF9kaXNwbGF5X3Qg KmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiA+ID4+PiArICAgICBpZ3RfY3JjX3QgcmVmX2Ny YywgbmV3X2NyYzsKPiA+ID4+PiArICAgICBpZ3RfZmJfdCBhZmI7Cj4gPiA+Pj4gKyAgICAgbHV0 X3QgbHV0X2xpbmVhcjsKPiA+ID4+PiArCj4gPiA+Pj4gKyAgICAgdGVzdF9pbml0KGRhdGEpOwo+ ID4gPj4+ICsKPiA+ID4+PiArICAgICBsdXRfaW5pdCgmbHV0X2xpbmVhciwgZGF0YS0+ZGVnYW1t YV9sdXRfc2l6ZSk7Cj4gPiA+Pj4gKyAgICAgbHV0X2dlbl9saW5lYXIoJmx1dF9saW5lYXIsIDB4 ZmZmZik7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgIGlndF9jcmVhdGVfZmIoZGF0YS0+ZmQsIGRh dGEtPncsIGRhdGEtPmgsIERSTV9GT1JNQVRfWFJHQjg4ODgsIDAsICZhZmIpOwo+ID4gPj4+ICsg ICAgIGRyYXdfZ2FtbWFfdGVzdCgmYWZiKTsKPiA+ID4+PiArCj4gPiA+Pj4gKyAgICAgLyogRHJh dyB0aGUgcmVmZXJlbmNlIGltYWdlLiAqLwo+ID4gPj4+ICsgICAgIGlndF9wbGFuZV9zZXRfZmIo ZGF0YS0+cHJpbWFyeSwgJmFmYik7Cj4gPiA+Pj4gKyAgICAgc2V0X3JlZ2FtbWFfbHV0KGRhdGEs IE5VTEwpOwo+ID4gPj4+ICsgICAgIHNldF9kZWdhbW1hX2x1dChkYXRhLCBOVUxMKTsKPiA+ID4+ PiArICAgICBpZ3RfZGlzcGxheV9jb21taXRfYXRvbWljKGRpc3BsYXksIERSTV9NT0RFX0FUT01J Q19BTExPV19NT0RFU0VULCBOVUxMKTsKPiA+ID4+PiArCj4gPiA+Pj4gKyAgICAgaWd0X3BpcGVf Y3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7Cj4gPiA+Pj4gKwo+ID4g Pj4+ICsgICAgIC8qIEFwcGx5IGEgbGluZWFyIGRlZ2FtbWEuIFRoZSByZXN1bHQgc2hvdWxkIHJl bWFpbiB0aGUgc2FtZS4gKi8KPiA+ID4+PiArICAgICBzZXRfZGVnYW1tYV9sdXQoZGF0YSwgJmx1 dF9saW5lYXIpOwo+ID4gPj4+ICsgICAgIGlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGlzcGxh eSwgMCwgTlVMTCk7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgIGlndF9waXBlX2NyY19jb2xsZWN0 X2NyYyhkYXRhLT5waXBlX2NyYywgJm5ld19jcmMpOwo+ID4gPj4+ICsgICAgIGlndF9hc3NlcnRf Y3JjX2VxdWFsKCZyZWZfY3JjLCAmbmV3X2NyYyk7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgIHRl c3RfZmluaShkYXRhKTsKPiA+ID4+PiArICAgICBpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmZkLCAmYWZi KTsKPiA+ID4+PiArICAgICBsdXRfZnJlZSgmbHV0X2xpbmVhcik7Cj4gPiA+Pj4gK30KPiA+ID4+ PiArCj4gPiA+Pj4gKy8qCj4gPiA+Pj4gKyAqIE9sZGVyIHZlcnNpb25zIG9mIGFtZGdwdSB3b3Vs ZCBhcHBseSB0aGUgQ1JUQyByZWdhbW1hIG9uIHRvcCBvZiBhIGN1c3RvbQo+ID4gPj4+ICsgKiBz UkdCIHJlZ2FtbWEgbWF0cml4IHdpdGggaW5jb3JyZWN0IGNhbGN1bGF0aW9ucyBvciByb3VuZGlu ZyBlcnJvcnMuCj4gPiA+Pj4gKyAqIElmIHdlIHB1dCB0aGUgcGlwZSBpbnRvIGJ5cGFzcyBvciB1 c2UgdGhlIGhhcmR3YXJlIGRlZmluZWQgc1JHQiByZWdhbW1hCj4gPiA+Pj4gKyAqIG9uIHRoZSBw bGFuZSB0aGVuIHdlIGNhbiBhbmQgc2hvdWxkIGdldCB0aGUgY29ycmVjdCBDUlRDIHdoZW4gcGFz c2luZyBhCj4gPiA+Pj4gKyAqIGxpbmVyIHJlZ2FtbWEgbWF0cml4IHRvIERSTS4KPiA+ID4+PiAr ICovCj4gPiA+Pj4gK3N0YXRpYyB2b2lkIHRlc3RfY3J0Y19saW5lYXJfcmVnYW1tYShkYXRhX3Qg KmRhdGEpCj4gPiA+Pj4gK3sKPiA+ID4+PiArICAgICBpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0g JmRhdGEtPmRpc3BsYXk7Cj4gPiA+Pj4gKyAgICAgaWd0X2NyY190IHJlZl9jcmMsIG5ld19jcmM7 Cj4gPiA+Pj4gKyAgICAgaWd0X2ZiX3QgYWZiOwo+ID4gPj4+ICsgICAgIGx1dF90IGx1dF9saW5l YXI7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgIHRlc3RfaW5pdChkYXRhKTsKPiA+ID4+PiArCj4g PiA+Pj4gKyAgICAgbHV0X2luaXQoJmx1dF9saW5lYXIsIGRhdGEtPnJlZ2FtbWFfbHV0X3NpemUp Owo+ID4gPj4+ICsgICAgIGx1dF9nZW5fbGluZWFyKCZsdXRfbGluZWFyLCAweGZmZmYpOwo+ID4g Pj4+ICsKPiA+ID4+PiArICAgICBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmZkLCBkYXRhLT53LCBkYXRh LT5oLCBEUk1fRk9STUFUX1hSR0I4ODg4LCAwLCAmYWZiKTsKPiA+ID4+PiArICAgICBkcmF3X2dh bW1hX3Rlc3QoJmFmYik7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgIC8qIERyYXcgdGhlIHJlZmVy ZW5jZSBpbWFnZS4gKi8KPiA+ID4+PiArICAgICBpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnByaW1h cnksICZhZmIpOwo+ID4gPj4+ICsgICAgIHNldF9yZWdhbW1hX2x1dChkYXRhLCBOVUxMKTsKPiA+ ID4+PiArICAgICBzZXRfZGVnYW1tYV9sdXQoZGF0YSwgTlVMTCk7Cj4gPiA+Pj4gKyAgICAgaWd0 X2Rpc3BsYXlfY29tbWl0X2F0b21pYyhkaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9E RVNFVCwgTlVMTCk7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgIGlndF9waXBlX2NyY19jb2xsZWN0 X2NyYyhkYXRhLT5waXBlX2NyYywgJnJlZl9jcmMpOwo+ID4gPj4+ICsKPiA+ID4+PiArICAgICAv KiBBcHBseSBhIGxpbmVhciBkZWdhbW1hLiBUaGUgcmVzdWx0IHNob3VsZCByZW1haW4gdGhlIHNh bWUuICovCj4gPiA+Pj4gKyAgICAgc2V0X3JlZ2FtbWFfbHV0KGRhdGEsICZsdXRfbGluZWFyKTsK PiA+ID4+PiArICAgICBpZ3RfZGlzcGxheV9jb21taXRfYXRvbWljKGRpc3BsYXksIDAsIE5VTEwp Owo+ID4gPj4+ICsKPiA+ID4+PiArICAgICBpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+ cGlwZV9jcmMsICZuZXdfY3JjKTsKPiA+ID4+PiArICAgICBpZ3RfYXNzZXJ0X2NyY19lcXVhbCgm cmVmX2NyYywgJm5ld19jcmMpOwo+ID4gPj4+ICsKPiA+ID4+PiArICAgICB0ZXN0X2ZpbmkoZGF0 YSk7Cj4gPiA+Pj4gKyAgICAgaWd0X3JlbW92ZV9mYihkYXRhLT5mZCwgJmFmYik7Cj4gPiA+Pj4g KyAgICAgbHV0X2ZyZWUoJmx1dF9saW5lYXIpOwo+ID4gPj4+ICt9Cj4gPiA+Pj4gKwo+ID4gPj4+ ICsvKgo+ID4gPj4+ICsgKiBUZXN0cyBMVVQgYWNjdXJhY3kuIENSVEMgcmVnYW1tYSBhbmQgQ1JU QyBkZWdhbW1hIHNob3VsZCBwcm9kdWNlIGEgdmlzdWFsbHkKPiA+ID4+PiArICogY29ycmVjdCBp bWFnZSB3aGVuIHVzZWQuIEhhcmR3YXJlIGxpbWl0YXRpb25zIG9uIGRlZ2FtbWEgcHJldmVudCB0 aGlzIGZyb20KPiA+ID4+PiArICogYmVpbmcgQ1JDIGxldmVsIGFjY3VyYXRlIGFjcm9zcyBhIGZ1 bGwgdGVzdCBncmFkaWVudCBidXQgbW9zdCB2YWx1ZXMgc2hvdWxkCj4gPiA+Pj4gKyAqIHN0aWxs IG1hdGNoLgo+ID4gPj4+ICsgKgo+ID4gPj4+ICsgKiBUaGlzIHRlc3QgY2FuJ3QgcGFzcyBvbiBE Q0UgYmVjYXVzZSBpdCBkb2Vzbid0IHN1cHBvcnQgbm9uLWxpbmVhciBkZWdhbW1hLgo+ID4gPj4+ ICsgKi8KPiA+ID4+PiArc3RhdGljIHZvaWQgdGVzdF9jcnRjX2x1dF9hY2N1cmFjeShkYXRhX3Qg KmRhdGEpCj4gPiA+Pj4gK3sKPiA+ID4+PiArICAgICAvKgo+ID4gPj4+ICsgICAgICAqIENoYW5u ZWxzIGFyZSBpbmRlcGVuZGVudCwgc28gd2UgY2FuIHZlcmlmeSBtdWx0aXBsZSBjb2xvcnMgYXQg dGhlCj4gPiA+Pj4gKyAgICAgICogc2FtZSB0aW1lIGZvciBpbXByb3ZlZCBwZXJmb3JtYW5jZS4K PiA+ID4+PiArICAgICAgKi8KPiA+ID4+PiArICAgICBzdGF0aWMgY29uc3QgY29sb3JfdCBjb2xv cnNbXSA9IHsKPiA+ID4+PiArICAgICAgICAgICAgIHsgMS4wMCwgMS4wMCwgMS4wMCB9LAo+ID4g Pj4+ICsgICAgICAgICAgICAgeyAwLjkwLCAwLjg1LCAwLjc1IH0sIC8qIDAuOTUgZmFpbHMgKi8K PiA+ID4+PiArICAgICAgICAgICAgIHsgMC43MCwgMC42NSwgMC42MCB9LAo+ID4gPj4+ICsgICAg ICAgICAgICAgeyAwLjU1LCAwLjUwLCAwLjQ1IH0sCj4gPiA+Pj4gKyAgICAgICAgICAgICB7IDAu NDAsIDAuMzUsIDAuMzAgfSwKPiA+ID4+PiArICAgICAgICAgICAgIHsgMC4yNSwgMC4yMCwgMC4x NSB9LAo+ID4gPj4+ICsgICAgICAgICAgICAgeyAwLjEwLCAwLjA0LCAwLjAyIH0sIC8qIDAuMDUg ZmFpbHMgKi8KPiA+ID4+PiArICAgICAgICAgICAgIHsgMC4wMCwgMC4wMCwgMC4wMCB9LAo+ID4g Pj4+ICsgICAgIH07Cj4gPiA+Pj4gKyAgICAgaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRh LT5kaXNwbGF5Owo+ID4gPj4+ICsgICAgIGlndF9jcmNfdCByZWZfY3JjLCBuZXdfY3JjOwo+ID4g Pj4+ICsgICAgIGlndF9mYl90IGFmYjsKPiA+ID4+PiArICAgICBsdXRfdCBsdXRfZGVnYW1tYSwg bHV0X3JlZ2FtbWE7Cj4gPiA+Pj4gKyAgICAgaW50IGksIHcsIGg7Cj4gPiA+Pj4gKwo+ID4gPj4+ ICsgICAgIHRlc3RfaW5pdChkYXRhKTsKPiA+ID4+PiArCj4gPiA+Pj4gKyAgICAgbHV0X2luaXQo Jmx1dF9kZWdhbW1hLCBkYXRhLT5kZWdhbW1hX2x1dF9zaXplKTsKPiA+ID4+PiArICAgICBsdXRf Z2VuX2RlZ2FtbWFfc3JnYigmbHV0X2RlZ2FtbWEsIDB4ZmZmZik7Cj4gPiA+Pj4gKwo+ID4gPj4+ ICsgICAgIGx1dF9pbml0KCZsdXRfcmVnYW1tYSwgZGF0YS0+cmVnYW1tYV9sdXRfc2l6ZSk7Cj4g PiA+Pj4gKyAgICAgbHV0X2dlbl9yZWdhbW1hX3NyZ2IoJmx1dF9yZWdhbW1hLCAweGZmZmYpOwo+ ID4gPj4+ICsKPiA+ID4+PiArICAgICAvKiBEb24ndCBkcmF3IGFjcm9zcyB0aGUgd2hvbGUgc2Ny ZWVuIHRvIGltcHJvdmUgcGVyZi4gKi8KPiA+ID4+PiArICAgICB3ID0gNjQ7Cj4gPiA+Pj4gKyAg ICAgaCA9IDY0Owo+ID4gPj4+ICsKPiA+ID4+PiArICAgICBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmZk LCB3LCBoLCBEUk1fRk9STUFUX1hSR0I4ODg4LCAwLCAmYWZiKTsKPiA+ID4+PiArICAgICBpZ3Rf cGxhbmVfc2V0X2ZiKGRhdGEtPnByaW1hcnksICZhZmIpOwo+ID4gPj4+ICsgICAgIGlndF9kaXNw bGF5X2NvbW1pdF9hdG9taWMoZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQs IE5VTEwpOwo+ID4gPj4+ICsKPiA+ID4+PiArICAgICAvKiBUZXN0IGNvbG9ycy4gKi8KPiA+ID4+ PiArICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb2xvcnMpOyArK2kpIHsKPiA+ID4+ PiArICAgICAgICAgICAgIGNvbG9yX3QgY29sID0gY29sb3JzW2ldOwo+ID4gPj4+ICsKPiA+ID4+ PiArICAgICAgICAgICAgIGlndF9pbmZvKCJUZXN0aW5nIGNvbG9yICglLjJmLCAlLjJmLCAlLjJm KSAuLi5cbiIsIGNvbC5yLCBjb2wuZywKPiA+ID4+PiArICAgICAgICAgICAgICAgICAgICAgIGNv bC5iKTsKPiA+ID4+PiArCj4gPiA+Pj4gKyAgICAgICAgICAgICBkcmF3X2NvbG9yKCZhZmIsIGNv bC5yLCBjb2wuZywgY29sLmIpOwo+ID4gPj4+ICsKPiA+ID4+PiArICAgICAgICAgICAgIHNldF9y ZWdhbW1hX2x1dChkYXRhLCBOVUxMKTsKPiA+ID4+PiArICAgICAgICAgICAgIHNldF9kZWdhbW1h X2x1dChkYXRhLCBOVUxMKTsKPiA+ID4+PiArICAgICAgICAgICAgIGlndF9kaXNwbGF5X2NvbW1p dF9hdG9taWMoZGlzcGxheSwgMCwgTlVMTCk7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgICAgICAg ICAgaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7Cj4g PiA+Pj4gKwo+ID4gPj4+ICsgICAgICAgICAgICAgc2V0X2RlZ2FtbWFfbHV0KGRhdGEsICZsdXRf ZGVnYW1tYSk7Cj4gPiA+Pj4gKyAgICAgICAgICAgICBzZXRfcmVnYW1tYV9sdXQoZGF0YSwgJmx1 dF9yZWdhbW1hKTsKPiA+ID4+PiArICAgICAgICAgICAgIGlndF9kaXNwbGF5X2NvbW1pdF9hdG9t aWMoZGlzcGxheSwgMCwgTlVMTCk7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgICAgICAgICAgaWd0 X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmbmV3X2NyYyk7Cj4gPiA+Pj4g Kwo+ID4gPj4+ICsgICAgICAgICAgICAgaWd0X2Fzc2VydF9jcmNfZXF1YWwoJnJlZl9jcmMsICZu ZXdfY3JjKTsKPiA+ID4+PiArICAgICB9Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgIHRlc3RfZmlu aShkYXRhKTsKPiA+ID4+PiArICAgICBpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmZkLCAmYWZiKTsKPiA+ ID4+PiArICAgICBsdXRfZnJlZSgmbHV0X3JlZ2FtbWEpOwo+ID4gPj4+ICsgICAgIGx1dF9mcmVl KCZsdXRfZGVnYW1tYSk7Cj4gPiA+Pj4gK30KPiA+ID4+PiArCj4gPiA+Pj4gK2lndF9tYWluCj4g PiA+Pj4gK3sKPiA+ID4+PiArICAgICBkYXRhX3QgZGF0YTsKPiA+ID4+PiArCj4gPiA+Pj4gKyAg ICAgaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOwo+ID4gPj4+ICsKPiA+ID4+PiArICAgICBtZW1z ZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgIGlndF9m aXh0dXJlCj4gPiA+Pj4gKyAgICAgewo+ID4gPj4+ICsgICAgICAgICAgICAgZGF0YS5mZCA9IGRy bV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVSX0FNREdQVSk7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsg ICAgICAgICAgICAga21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOwo+ID4gPj4+ICsKPiA+ ID4+PiArICAgICAgICAgICAgIGlndF9kaXNwbGF5X3JlcXVpcmUoJmRhdGEuZGlzcGxheSwgZGF0 YS5mZCk7Cj4gPiA+Pj4gKyAgICAgICAgICAgICBpZ3RfcmVxdWlyZShkYXRhLmRpc3BsYXkuaXNf YXRvbWljKTsKPiA+ID4+PiArICAgICAgICAgICAgIGlndF9kaXNwbGF5X3JlcXVpcmVfb3V0cHV0 KCZkYXRhLmRpc3BsYXkpOwo+ID4gPj4+ICsgICAgIH0KPiA+ID4+PiArCj4gPiA+Pj4gKyAgICAg aWd0X3N1YnRlc3QoImNydGMtbGluZWFyLWRlZ2FtbWEiKSB0ZXN0X2NydGNfbGluZWFyX2RlZ2Ft bWEoJmRhdGEpOwo+ID4gPj4+ICsgICAgIGlndF9zdWJ0ZXN0KCJjcnRjLWxpbmVhci1yZWdhbW1h IikgdGVzdF9jcnRjX2xpbmVhcl9yZWdhbW1hKCZkYXRhKTsKPiA+ID4+PiArICAgICBpZ3Rfc3Vi dGVzdCgiY3J0Yy1sdXQtYWNjdXJhY3kiKSB0ZXN0X2NydGNfbHV0X2FjY3VyYWN5KCZkYXRhKTsK PiA+ID4+PiArCj4gPiA+Pj4gKyAgICAgaWd0X2ZpeHR1cmUKPiA+ID4+PiArICAgICB7Cj4gPiA+ Pj4gKyAgICAgICAgICAgICBpZ3RfZGlzcGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOwo+ID4gPj4+ ICsgICAgIH0KPiA+ID4+PiArfQo+ID4gPj4+IGRpZmYgLS1naXQgYS90ZXN0cy9hbWRncHUvbWVz b24uYnVpbGQgYi90ZXN0cy9hbWRncHUvbWVzb24uYnVpbGQKPiA+ID4+PiBpbmRleCAxYWZlY2U4 Ni4uNDIwODYzNzQgMTAwNjQ0Cj4gPiA+Pj4gLS0tIGEvdGVzdHMvYW1kZ3B1L21lc29uLmJ1aWxk Cj4gPiA+Pj4gKysrIGIvdGVzdHMvYW1kZ3B1L21lc29uLmJ1aWxkCj4gPiA+Pj4gQEAgLTQsNiAr NCw3IEBAIGFtZGdwdV9kZXBzID0gdGVzdF9kZXBzCj4gPiA+Pj4gICAgaWYgbGliZHJtX2FtZGdw dS5mb3VuZCgpCj4gPiA+Pj4gICAgICAgIGFtZGdwdV9wcm9ncyArPSBbICdhbWRfYWJtJywKPiA+ ID4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FtZF9iYXNpYycsCj4gPiA+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgJ2FtZF9jb2xvcicsCj4gPiA+Pj4gICAgICAgICAgICAgICAgICAg ICAgICAgICdhbWRfY3Nfbm9wJywKPiA+ID4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Ft ZF9wcmltZScsCj4gPiA+Pj4gICAgICAgICAgICAgICAgICAgICAgICBdCj4gPiA+Pj4KPiA+ID4+ IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiA+PiBp Z3QtZGV2IG1haWxpbmcgbGlzdAo+ID4gPj4gaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcK PiA+ID4+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0 LWRldgo+ID4gPgo+ID4gPgo+ID4gPgo+ID4KPiAKPiAKPiAtLSAKPiBEYW5pZWwgVmV0dGVyCj4g U29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCj4gKzQxICgwKSA3OSAzNjUgNTcg NDggLSBodHRwOi8vYmxvZy5mZndsbC5jaAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCj4gaWd0LWRldiBtYWlsaW5nIGxpc3QKPiBpZ3QtZGV2QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaWd0LWRldgoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdApp Z3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=