From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kahola Subject: Re: [PATCH i-g-t v4] tests/kms_plane_multiple: CRC based atomic correctness test Date: Mon, 31 Oct 2016 13:32:37 +0200 Message-ID: <1477913557.19030.2.camel@intel.com> References: <1476955643-7631-1-git-send-email-mika.kahola@intel.com> <20161024082813.GC20761@phenom.ffwll.local> Reply-To: mika.kahola@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8D28D89E2C for ; Mon, 31 Oct 2016 11:32:26 +0000 (UTC) In-Reply-To: <20161024082813.GC20761@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyMDE2LTEwLTI0IGF0IDEwOjI4ICswMjAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ IE9uIFRodSwgT2N0IDIwLCAyMDE2IGF0IDEyOjI3OjIzUE0gKzAzMDAsIE1pa2EgS2Fob2xhIHdy b3RlOgo+ID4gCj4gPiBUaGlzIGlzIGEgdGVzdGNhc2Ugd2l0aCBtdWx0aXBsZSBwbGFuZXMuIFRo ZSBpZGVhIGhlcmUgaXMgdGhlCj4gPiBmb2xsb3dpbmcKPiA+IAo+ID4gwqAtIGRyYXcgYSB1bmlm b3JtIGZyYW1lIHdpdGggYmx1ZSBjb2xvcgo+ID4gwqAtIGdyYWIgY3JjIGZvciByZWZlcmVuY2UK PiA+IMKgLSBwdXQgcGxhbmVzIHJhbmRvbWx5IG9uIHRvcCB3aXRoIHRoZSBzYW1lIGJsdWUgY29s b3IKPiA+IMKgLSBwdW5jaCBob2xlcyB3aXRoIGJsYWNrIGNvbG9yIGludG8gdGhlIHByaW1hcnkg ZnJhbWVidWZmZXIKPiA+IMKgLSBpZGVhbGx5IHRoZSBwbGFuZXMgc2hvdWxkIGNvdmVyIHRoZXNl IGhvbGVzIHNvIHRoYXQgdGhlIG91dHB1dAo+ID4gaXMgdGhlCj4gPiDCoMKgwqBpZGVudGljYWwg dG8gcmVmZXJlbmNlIGNyYwo+ID4gwqAtIGNvbXBvc2l0ZSBhbGwgd2l0aCBvbmUgaW9jdGwgY2Fs bAo+ID4gwqAtIGdyYWIgY3JjIGFuZCB2ZXJpZnkgdGhhdCB0aGUgcmVmZXJlbmNlIGNyYyBpcyBl cXVhbAo+ID4gwqAtIHJlcGVhdCB0aGlzIGZvciBkb3plbiBpdGVyYXRpb25zIHRvIG1heGltaXpl IGNvdmVyYWdlCj4gPiAKPiA+IHY0OiBGb3IgYXRvbWljIHRlc3QgZW5hYmxlIGNyYyBjYXB0dXJp bmcgYmVmb3JlIGVudGVyaW5nIGludG8gYQo+ID4gwqDCoMKgwqBpdGVyYXRpb24gbG9vcC4gQWZ0 ZXIgZWFjaCBpdGVyYXRpb24sIGNoZWNrIHRoYXQgcGFnZSBmbGlwCj4gPiDCoMKgwqDCoGRpZG4n dCB0YWtlIG5vIG1vcmUgdGhhbiAxIHZibGFuaywgZmV0Y2ggYWxsIGNyYydzIGFuZCBjaGVjawo+ ID4gwqDCoMKgwqB0aGUgdmFsdWVzLgo+ID4gCj4gPiDCoMKgwqDCoEludHJvZHVjZSBuZXcgY29t bWFuZCBsaW5lIHBhcmFtZXRlciBmb3IgdGhlIG51bWJlciBvZgo+ID4gaXRlcmF0aW9ucy4KPiA+ IMKgwqDCoMKgVGhlIHRlc3QgcnVuIGZyb20gMSB0byAyNTYgaXRlcmF0aW9ucy4KPiBUaGlzIHNl ZW1zIHJlYWwgbG93LiBTY3JlZW5zIHJ1biBhdCB1c3VhbGwgNTAtNjBIeiwgd2hpY2ggbWVhbnMg eW91Cj4ganVzdAo+IGFsbG93IGZvciBhIGZldyBzZWNvbmRzLiBJJ2Qgc2F5IGZvciBhIG5vcm1h bCB2YWxpZGF0aW9uIHJ1biB0aW1pbmcKPiBpdCB0bwo+IGJlIDEgc2Vjb25kIChmb3IgZWFjaCBz dWJ0ZXN0KSBpcyBhIHJlYXNvbmFibGUgc3RhcnQuCj4gCj4gQnV0IGZvciB0aGUga25vYiB3ZSBw cm9iYWJseSB3YW50IHRvIG1ha2UgdGhpcyB2aXJ0dWFsbHkgdW5saW1pdGVkLAo+IGUuZy4KPiAt MSA9PSBuZXZlciBzdG9wLiBUaGlzIHdvdWxkIGJlIHVzZWZ1bCBmb3IgY2hhc2luZyBoYXJkLXRv LXJlcHJvZHVjdAo+IHVuZGVycnVucyBhbmQgZXJyb3JzOiBSdW4gdGVzdGNhc2Ugd2l0aCB1bmxp bWl0ZWQgaXRlcmF0aW9ucywgaXQgd2lsbAo+IGRpZQo+IGFzIHNvb24gYXMgdGhlIGZpcnN0IGVy cm9yIHNob3dzIHVwLiBUaGVuIHRyeSB3aXRoIG5leHQgaGFjay9kZWJ1Zwo+IHRyaWNrCj4gdW50 aWwgdGhlIHRlc3Qgc3Vydml2ZXMgZm9yIGhvdXJzIGFuZCBpdCBhbGwgbG9va3MgZ29vZCA7LSkK PiAKSSB3YXMgdGhpbmtpbmcgdGhpcyB1bmxpbWl0ZWQgb3B0aW9uIHRvbyBidXQgdGhlbiBJIHRo b3VnaHQgaXQgd291bGQgYmUKc2FmZXIgaWYgdGhlIHRlc3Qgd291bGQgc3RvcCBhdCBzb21lIHBv aW50LiBBbnl3YXksIEkgY2FuIGFkZCB0aGlzCm9wdGlvbiB0byB0aGUgdGVzdC4KwqAKCj4gRm9y IHRoZSB0ZXN0Y29kZSBpdHNlbGYgSSB0aGluayBpdCdkIGJlIGdvb2QgaWYgYXQgbGVhc3QgVmls bGUgYW5kCj4gTWFhcnRlbgo+IHJldmlldyBpdCwgc2luY2UgdGhpcyB3aWxsIGJlIHRoZSBncm91 bmR3b3JrIGZvciBhZGRpbmcgYWxsIGtpbmRzIG9mCj4gYXRvbWljIHRlc3RzIChyb3RhdGlvbiwg eXV2LCBzY2FsaW5nLCBhbnl0aGluZyBlbHNlIHJlYWxseSkuCj4gLURhbmllbAo+IAo+ID4gCj4g PiAKPiA+IHYzOiBDbGVhbnVwIGJ5IHJlbW92aW5nIHNlcGFyYXRlIHBsYW5lIGFycmF5Cj4gPiDC oMKgwqDCoEZvciBhdG9taWMsIHBhc3MgRFJNX01PREVfUEFHRV9GTElQX0VWRU5UCj4gPiDCoMKg wqDCoEdyYWIgY3JjIGJ5IHVzaW5nIGlndF9waXBlX2NyY19nZXRfY3JjIGluc3RlYWQgb2YKPiA+ IGlndF9waXBlX2NyY19jb2xsZWN0X2NyYwo+ID4gwqDCoMKgwqBSZW5hbWUgbnBsYW5lcyB2YXJp YWJsZSB0byBtYXhfcGxhbmVzCj4gPiDCoMKgwqDCoFRvIG9wdGltaXplIHRlc3QgZXhlY3V0aW9u LCBydW4gaXRlcmF0aW9ucyBhZnRlciB0aGUgbW9kZXNldAo+ID4gCj4gPiB2MjogS2VlcCBhIGxv Z2ZpbGUgb24gcmFuZG9tIG51bWJlciBzZWVkcyBwZXIgc3VidGVzdCB0aGF0IGFyZSBub3QKPiA+ IHNraXBwZWQKPiA+IMKgwqDCoMKgZHVlIHRvIHVubWV0IHRlc3QgcmVxdWlyZW1lbnRzCj4gPiAK PiA+IFNpZ25lZC1vZmYtYnk6IE1pa2EgS2Fob2xhIDxtaWthLmthaG9sYUBpbnRlbC5jb20+Cj4g PiAtLS0KPiA+IMKgdGVzdHMvTWFrZWZpbGUuc291cmNlc8KgwqDCoMKgwqB8wqDCoMKgMSArCj4g PiDCoHRlc3RzL2ttc19wbGFuZV9tdWx0aXBsZS5jIHwgNDc1Cj4gPiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+IMKgMiBmaWxlcyBjaGFuZ2VkLCA0NzYg aW5zZXJ0aW9ucygrKQo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX3BsYW5lX211 bHRpcGxlLmMKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiBpbmRleCA2ZDA4MWMzLi5mZmQ1OWMxIDEwMDY0NAo+ ID4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gKysrIGIvdGVzdHMvTWFrZWZpbGUu c291cmNlcwo+ID4gQEAgLTEwNSw2ICsxMDUsNyBAQCBURVNUU19wcm9nc19NID0gXAo+ID4gwqAJ a21zX3BpcGVfY29sb3IgXAo+ID4gwqAJa21zX3BpcGVfY3JjX2Jhc2ljIFwKPiA+IMKgCWttc19w bGFuZSBcCj4gPiArCWttc19wbGFuZV9tdWx0aXBsZSBcCj4gPiDCoAlrbXNfcHJvcGVydGllcyBc Cj4gPiDCoAlrbXNfcHNyX3NpbmtfY3JjIFwKPiA+IMKgCWttc19yZW5kZXIgXAo+ID4gZGlmZiAt LWdpdCBhL3Rlc3RzL2ttc19wbGFuZV9tdWx0aXBsZS5jCj4gPiBiL3Rlc3RzL2ttc19wbGFuZV9t dWx0aXBsZS5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uYTE4 Y2RmZgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvdGVzdHMva21zX3BsYW5lX211bHRpcGxl LmMKPiA+IEBAIC0wLDAgKzEsNDc1IEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAx NiBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPiA+IG9idGFpbmluZyBhCj4g PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZQo+ID4gIlNvZnR3YXJlIiksCj4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQKPiA+IGxpbWl0YXRpb24K PiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwKPiA+IHN1YmxpY2Vuc2UsCj4gPiArICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvCj4gPiB3aG9tIHRoZQo+ID4g KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nCj4gPiBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKPiA+IChpbmNsdWRpbmcgdGhlIG5leHQK PiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwKPiA+IHBvcnRpb25zIG9mIHRoZQo+ID4gKyAqIFNvZnR3YXJlLgo+ID4gKyAqCj4g PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsCj4gPiBFWFBSRVNTIE9SCj4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+ID4gTUVSQ0hBTlRBQklMSVRZLAo+ ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuwqDCoElOIE5PCj4gPiBFVkVOVCBTSEFMTAo+ID4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAo+ID4gREFNQUdFUyBPUiBPVEhF Ugo+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLAo+ID4gQVJJU0lORwo+ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiA+IE9USEVSIERFQUxJ TkdTCj4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gKyAqCj4gPiArICovCj4gPiArCj4gPiAr I2luY2x1ZGUgImlndC5oIgo+ID4gKyNpbmNsdWRlICJkcm10ZXN0LmgiCj4gPiArI2luY2x1ZGUg PGVycm5vLmg+Cj4gPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiA+ICsjaW5jbHVkZSA8c3RkaW8u aD4KPiA+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gPiArI2luY2x1ZGUgPHRpbWUuaD4KPiA+ICsK PiA+ICtJR1RfVEVTVF9ERVNDUklQVElPTigiVGVzdCBhdG9taWMgbW9kZSBzZXR0aW5nIHdpdGgg bXVsdGlwbGUKPiA+IHBsYW5lcyAiKTsKPiA+ICsKPiA+ICsjZGVmaW5lIE1BWF9DUkNTIDEKPiA+ ICsjZGVmaW5lIFNJWkXCoMKgwqDCoMKgMTI4Cj4gPiArCj4gPiArI2RlZmluZSBJTl9SQU5HRShY LCBNSU4sIE1BWCkgKChYKSA8IChNSU4pIHx8IChYKSA+IChNQVgpID8gMTYgOgo+ID4gWCkKPiA+ ICsKPiA+ICt0eXBlZGVmIHN0cnVjdCB7Cj4gPiArCWZsb2F0IHJlZDsKPiA+ICsJZmxvYXQgZ3Jl ZW47Cj4gPiArCWZsb2F0IGJsdWU7Cj4gPiArfSBjb2xvcl90Owo+ID4gKwo+ID4gK3R5cGVkZWYg c3RydWN0IHsKPiA+ICsJaW50IGRybV9mZDsKPiA+ICsJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5Owo+ ID4gKwlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7Cj4gPiArCWlndF9wbGFuZV90ICpwbGFuZVtJ R1RfTUFYX1BMQU5FU107Cj4gPiArCXN0cnVjdCBpZ3RfZmIgZmJbSUdUX01BWF9QTEFORVNdOwo+ ID4gK30gZGF0YV90Owo+ID4gKwo+ID4gK3R5cGVkZWYgc3RydWN0IHsKPiA+ICsJZGF0YV90ICpk YXRhOwo+ID4gKwlpZ3RfY3JjX3QgcmVmZXJlbmNlX2NyYzsKPiA+ICt9IHRlc3RfcG9zaXRpb25f dDsKPiA+ICsKPiA+ICsvKiBDb21tYW5kIGxpbmUgcGFyYW1ldGVycy4gKi8KPiA+ICtzdHJ1Y3Qg ewo+ID4gKwl1bnNpZ25lZCBpdGVyYXRpb25zOwo+ID4gKwlib29sIHVzZXJfc2VlZDsKPiA+ICsJ aW50IHNlZWQ7Cj4gPiArCWJvb2wgdXNlcl9sb2dmaWxlOwo+ID4gKwljaGFyIGxvZ2ZpbGVbU0la RV07Cj4gPiArfSBvcHQgPSB7Cj4gPiArCS5pdGVyYXRpb25zID0gMTYsCj4gPiArCS51c2VyX3Nl ZWQgPSBmYWxzZSwKPiA+ICsJLnNlZWQgPSAxLAo+ID4gKwkudXNlcl9sb2dmaWxlID0gZmFsc2Us Cj4gPiArCS5sb2dmaWxlID0gImttc19wbGFuZV9tdWx0aXBsZS5sb2ciLAo+ID4gK307Cj4gPiAr Cj4gPiArc3RhdGljIGlubGluZSB1aW50MzJfdCBwaXBlX3NlbGVjdChpbnQgcGlwZSkKPiA+ICt7 Cj4gPiArCWlmIChwaXBlID4gMSkKPiA+ICsJCXJldHVybiBwaXBlIDw8IERSTV9WQkxBTktfSElH SF9DUlRDX1NISUZUOwo+ID4gKwllbHNlIGlmIChwaXBlID4gMCkKPiA+ICsJCXJldHVybiBEUk1f VkJMQU5LX1NFQ09OREFSWTsKPiA+ICsJZWxzZQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyB1bnNpZ25lZCBnZXRfdmJsYW5rKGludCBmZCwgaW50IHBpcGUsIHVuc2ln bmVkIGZsYWdzKQo+ID4gK3sKPiA+ICsJdW5pb24gZHJtX3dhaXRfdmJsYW5rIHZibDsKPiA+ICsK PiA+ICsJbWVtc2V0KCZ2YmwsIDAsIHNpemVvZih2YmwpKTsKPiA+ICsJdmJsLnJlcXVlc3QudHlw ZSA9IERSTV9WQkxBTktfUkVMQVRJVkUgfCBwaXBlX3NlbGVjdChwaXBlKQo+ID4gfCBmbGFnczsK PiA+ICsJaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9DVExfV0FJVF9WQkxBTkssICZ2YmwpKQo+ID4g KwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCXJldHVybiB2YmwucmVwbHkuc2VxdWVuY2U7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbG9nd3JpdGUoY29uc3QgY2hhciAqdGVzdG5hbWUpCj4g PiArewo+ID4gKwl0aW1lX3QgY3Vycl90aW1lOwo+ID4gKwlGSUxFICpmaWQ7Cj4gPiArCWNoYXIg KnRpbWVfc3RyOwo+ID4gKwo+ID4gKwlmaWQgPSBmb3BlbihvcHQubG9nZmlsZSwgImEiKTsKPiA+ ICsKPiA+ICsJaWYgKGZpZCA9PSBOVUxMKSB7Cj4gPiArCQlpZ3RfZGVidWcoIkNvdWxkIG5vdCBv cGVuIGZpbGUgJXNcbiIsCj4gPiBvcHQubG9nZmlsZSk7Cj4gPiArCQlyZXR1cm4gLTE7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJY3Vycl90aW1lID0gdGltZShOVUxMKTsKPiA+ICsKPiA+ICsJdGltZV9z dHIgPSBjdGltZSgmY3Vycl90aW1lKTsKPiA+ICsJdGltZV9zdHJbc3RybGVuKHRpbWVfc3RyKS0x XSA9ICdcMCc7Cj4gPiArCj4gPiArCWZwcmludGYoZmlkLCAiJXM6IGttc19wbGFuZV9tdWx0aXBs ZSAtLXJ1bi1zdWJ0ZXN0ICVzIC0tCj4gPiBzZWVkICVkXG4iLAo+ID4gKwkJdGltZV9zdHIsIHRl c3RuYW1lLCBvcHQuc2VlZCk7Cj4gPiArCj4gPiArCWZjbG9zZShmaWQpOwo+ID4gKwo+ID4gKwly ZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBDb21tb24gY29kZSBhY3Jvc3Mg YWxsIHRlc3RzLCBhY3Rpbmcgb24gZGF0YV90Cj4gPiArICovCj4gPiArc3RhdGljIHZvaWQgdGVz dF9pbml0KGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUpCj4gPiArewo+ID4gKwlkYXRhLT5w aXBlX2NyYyA9IGlndF9waXBlX2NyY19uZXcocGlwZSwKPiA+IElOVEVMX1BJUEVfQ1JDX1NPVVJD RV9BVVRPKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgdGVzdF9maW5pKGRhdGFfdCAq ZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGludAo+ID4gbWF4X3BsYW5lcykKPiA+ICt7Cj4g PiArCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cGxhbmVbSUdUX1BMQU5FX1BSSU1BUlldLCBOVUxM KTsKPiA+ICsKPiA+ICsJZm9yIChpbnQgaSA9IElHVF9QTEFORV8yOyBpIDw9IG1heF9wbGFuZXM7 IGkrKykKPiA+ICsJCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cGxhbmVbaV0sIE5VTEwpOwo+ID4g Kwo+ID4gKwkvKiByZXNldCB0aGUgY29uc3RyYWludCBvbiB0aGUgcGlwZSAqLwo+ID4gKwlpZ3Rf b3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9BTlkpOwo+ID4gKwo+ID4gKwlpZ3RfcGlwZV9j cmNfZnJlZShkYXRhLT5waXBlX2NyYyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBib29sIHRl c3RfaXNfYXRvbWljKGNvbnN0IGNoYXIgKnRlc3RuYW1lKQo+ID4gK3sKPiA+ICsJaWYgKHN0cm5j bXAodGVzdG5hbWUsICJhdG9taWMiLCA2KSA9PSAwKQo+ID4gKwkJcmV0dXJuIHRydWU7Cj4gPiAr Cj4gPiArCXJldHVybiBmYWxzZTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQKPiA+ICt0 ZXN0X2dyYWJfY3JjKGRhdGFfdCAqZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0gcGlw ZSBwaXBlLAo+ID4gKwnCoMKgwqDCoMKgwqBjb2xvcl90ICpjb2xvciwgdWludDY0X3QgdGlsaW5n LCBpZ3RfY3JjX3QgKmNyYyAvKgo+ID4gb3V0ICovKQo+ID4gK3sKPiA+ICsJc3RydWN0IGlndF9m YiBmYjsKPiA+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+ID4gKwlpZ3RfcGxhbmVfdCAqcHJp bWFyeTsKPiA+ICsJaW50IG47Cj4gPiArCWJvb2wgdGVzdF9hdG9taWMgPSB0ZXN0X2lzX2F0b21p YyhpZ3Rfc3VidGVzdF9uYW1lKCkpOwo+ID4gKwo+ID4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91 dHB1dCwgcGlwZSk7Cj4gPiArCj4gPiArCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShv dXRwdXQsIElHVF9QTEFORV9QUklNQVJZKTsKPiA+ICsKPiA+ICsJbW9kZSA9IGlndF9vdXRwdXRf Z2V0X21vZGUob3V0cHV0KTsKPiA+ICsKPiA+ICsJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5k cm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLQo+ID4gPnZkaXNwbGF5LAo+ID4gKwkJCcKgwqDC oMKgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiA+ICsJCQnCoMKgwqDCoExPQ0FMX0RSTV9GT1JNQVRf TU9EX05PTkUsCj4gPiArCQkJwqDCoMKgwqBjb2xvci0+cmVkLCBjb2xvci0+Z3JlZW4sIGNvbG9y LT5ibHVlLAo+ID4gKwkJCcKgwqDCoMKgJmZiKTsKPiA+ICsKPiA+ICsJaWd0X3BsYW5lX3NldF9m YihwcmltYXJ5LCAmZmIpOwo+ID4gKwo+ID4gKwlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5k aXNwbGF5LAo+ID4gKwkJCcKgwqDCoMKgdGVzdF9hdG9taWMgPyBDT01NSVRfQVRPTUlDIDoKPiA+ IENPTU1JVF9MRUdBQ1kpOwo+ID4gKwo+ID4gKwlpZ3RfcGlwZV9jcmNfc3RhcnQoZGF0YS0+cGlw ZV9jcmMpOwo+ID4gKwluID0gaWd0X3BpcGVfY3JjX2dldF9jcmNzKGRhdGEtPnBpcGVfY3JjLCAx LCAmY3JjKTsKPiA+ICsJaWd0X2Fzc2VydF9lcShuLCAxKTsKPiA+ICsJaWd0X3BpcGVfY3JjX3N0 b3AoZGF0YS0+cGlwZV9jcmMpOwo+ID4gKwo+ID4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnks IE5VTEwpOwo+ID4gKwo+ID4gKwlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LAo+ ID4gKwkJCcKgwqDCoMKgdGVzdF9hdG9taWMgPyBDT01NSVRfQVRPTUlDIDoKPiA+IENPTU1JVF9M RUdBQ1kpOwo+ID4gKwo+ID4gKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmZiKTsKPiA+ ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBNdWx0aXBsZSBwbGFuZSBwb3NpdGlvbiB0ZXN0Lgo+ ID4gKyAqwqDCoMKgLSBXZSBzdGFydCBieSBncmFiYmluZyBhIHJlZmVyZW5jZSBDUkMgb2YgYSBm dWxsIGJsdWUgZmIKPiA+IGJlaW5nIHNjYW5uZWQKPiA+ICsgKsKgwqDCoMKgwqBvdXQgb24gdGhl IHByaW1hcnkgcGxhbmUKPiA+ICsgKsKgwqDCoC0gVGhlbiB3ZSBzY2Fubm91dCBudW1iZXIgb2Yg cGxhbmVzOgo+ID4gKyAqwqDCoMKgwqDCoMKgKiB0aGUgcHJpbWFyeSBwbGFuZSB1c2VzIGEgYmx1 ZSBmYiB3aXRoIGEgYmxhY2sgcmVjdGFuZ2xlCj4gPiBob2xlCj4gPiArICrCoMKgwqDCoMKgwqAq IHBsYW5lcywgb24gdG9wIG9mIHRoZSBwcmltYXJ5IHBsYW5lLCB3aXRoIGEgYmx1ZSBmYiB0aGF0 Cj4gPiBpcyBzZXQtdXAKPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqB0byBjb3ZlciB0aGUgYmxhY2sg cmVjdGFuZ2xlcyBvZiB0aGUgcHJpbWFyeSBwbGFuZSBmYgo+ID4gKyAqwqDCoMKgwqDCoFRoZSBy ZXN1bHRpbmcgQ1JDIHNob3VsZCBiZSBpZGVudGljYWwgdG8gdGhlIHJlZmVyZW5jZSBDUkMKPiA+ ICsgKi8KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK2NyZWF0ZV9mYl9mb3JfbW9kZV9wb3Np dGlvbihkYXRhX3QgKmRhdGEsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPiA+ICsJCQnCoMKgwqDC oGNvbG9yX3QgKmNvbG9yLCBpbnQgKnJlY3RfeCwgaW50Cj4gPiAqcmVjdF95LAo+ID4gKwkJCcKg wqDCoMKgaW50IHJlY3RfdywgaW50IHJlY3RfaCwgdWludDY0X3QKPiA+IHRpbGluZywKPiA+ICsJ CQnCoMKgwqDCoGludCBtYXhfcGxhbmVzKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgaW50IGZiX2lk Owo+ID4gKwljYWlyb190ICpjcjsKPiA+ICsKPiA+ICsJZmJfaWQgPSBpZ3RfY3JlYXRlX2ZiKGRh dGEtPmRybV9mZCwKPiA+ICsJCQnCoMKgwqDCoMKgwqBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRp c3BsYXksCj4gPiArCQkJwqDCoMKgwqDCoMKgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiA+ICsJCQnC oMKgwqDCoMKgwqB0aWxpbmcsCj4gPiArCQkJwqDCoMKgwqDCoMKgJmRhdGEtPmZiW0lHVF9QTEFO RV9QUklNQVJZXSk7Cj4gPiArCWlndF9hc3NlcnQoZmJfaWQpOwo+ID4gKwo+ID4gKwljciA9IGln dF9nZXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9mZCwgJmRhdGEtCj4gPiA+ZmJbSUdUX1BMQU5FX1BS SU1BUlldKTsKPiA+ICsJaWd0X3BhaW50X2NvbG9yKGNyLCByZWN0X3hbMF0sIHJlY3RfeVswXSwK PiA+ICsJCQltb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gPiArCQkJY29sb3ItPnJl ZCwgY29sb3ItPmdyZWVuLCBjb2xvci0+Ymx1ZSk7Cj4gPiArCj4gPiArCWZvciAoaW50IGkgPSBJ R1RfUExBTkVfMjsgaSA8PSBtYXhfcGxhbmVzOyBpKyspCj4gPiArCQlpZ3RfcGFpbnRfY29sb3Io Y3IsIHJlY3RfeFtpXSwgcmVjdF95W2ldLAo+ID4gKwkJCQlyZWN0X3csIHJlY3RfaCwgMC4wLCAw LjAsIDAuMCk7Cj4gPiArCj4gPiArCWlndF9hc3NlcnQoY2Fpcm9fc3RhdHVzKGNyKSA9PSAwKTsK PiA+ICsJY2Fpcm9fZGVzdHJveShjcik7Cj4gPiArfQo+ID4gKwo+ID4gKwo+ID4gK3N0YXRpYyB2 b2lkCj4gPiArdGVzdF9wbGFuZXMoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgY29sb3Jf dCAqY29sb3IsCj4gPiArCcKgwqDCoMKgdWludDY0X3QgdGlsaW5nLCBpbnQgbWF4X3BsYW5lcywg aWd0X291dHB1dF90ICpvdXRwdXQpCj4gPiArewo+ID4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7 Cj4gPiArCWludCB4W0lHVF9NQVhfUExBTkVTXTsKPiA+ICsJaW50IHlbSUdUX01BWF9QTEFORVNd Owo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBp cGUpOwo+ID4gKwo+ID4gKwltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+ID4g Kwo+ID4gKwkvKiBzcHJpdGUgcGxhbmVzIHdpdGggcmFuZG9tIHBvc2l0aW9ucyAqLwo+ID4gKwl4 W0lHVF9QTEFORV9QUklNQVJZXSA9IDA7Cj4gPiArCXlbSUdUX1BMQU5FX1BSSU1BUlldID0gMDsK PiA+ICsJZm9yIChpID0gSUdUX1BMQU5FXzI7IGkgPD0gbWF4X3BsYW5lczsgaSsrKSB7Cj4gPiAr CQl4W2ldID0gcmFuZCgpICUgKG1vZGUtPmhkaXNwbGF5IC0gU0laRSk7Cj4gPiArCQl5W2ldID0g cmFuZCgpICUgKG1vZGUtPnZkaXNwbGF5IC0gU0laRSk7Cj4gPiArCj4gPiArCQlkYXRhLT5wbGFu ZVtpXSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgaSk7Cj4gPiArCj4gPiArCQlpZ3Rf Y3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwKPiA+ICsJCQkJwqDCoMKgwqBTSVpFLCBTSVpF LCAvKiB3aWR0aCwgaGVpZ2h0Cj4gPiAqLwo+ID4gKwkJCQnCoMKgwqDCoGRhdGEtPnBsYW5lW2ld LT5pc19jdXJzb3IgPwo+ID4gRFJNX0ZPUk1BVF9BUkdCODg4OCA6IERSTV9GT1JNQVRfWFJHQjg4 ODgsCj4gPiArCQkJCcKgwqDCoMKgdGlsaW5nLAo+ID4gKwkJCQnCoMKgwqDCoGNvbG9yLT5yZWQs IGNvbG9yLT5ncmVlbiwKPiA+IGNvbG9yLT5ibHVlLAo+ID4gKwkJCQnCoMKgwqDCoCZkYXRhLT5m YltpXSk7Cj4gPiArCj4gPiArCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGRhdGEtPnBsYW5lW2ld LCB4W2ldLAo+ID4geVtpXSk7Cj4gPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnBsYW5lW2ld LCAmZGF0YS0+ZmJbaV0pOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIHByaW1hcnkgcGxhbmUgKi8K PiA+ICsJZGF0YS0+cGxhbmVbSUdUX1BMQU5FX1BSSU1BUlldID0KPiA+IGlndF9vdXRwdXRfZ2V0 X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FX1BSSU1BUlkpOwo+ID4gKwljcmVhdGVfZmJfZm9yX21v ZGVfcG9zaXRpb24oZGF0YSwgbW9kZSwgY29sb3IsIHgsIHksCj4gPiArCQkJCcKgwqDCoMKgU0la RSwgU0laRSwgdGlsaW5nLAo+ID4gbWF4X3BsYW5lcyk7Cj4gPiArCWlndF9wbGFuZV9zZXRfZmIo ZGF0YS0+cGxhbmVbSUdUX1BMQU5FX1BSSU1BUlldLCAmZGF0YS0KPiA+ID5mYltJR1RfUExBTkVf UFJJTUFSWV0pOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3Rlc3RfcGxhbmVf cG9zaXRpb25fd2l0aF9vdXRwdXQoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwKPiA+IGln dF9vdXRwdXRfdCAqb3V0cHV0LAo+ID4gKwkJCQlpbnQgbWF4X3BsYW5lcywgdWludDY0X3QgdGls aW5nKQo+ID4gK3sKPiA+ICsJY2hhciBidWZbU0laRV07Cj4gPiArCXN0cnVjdCBkcm1fZXZlbnQg KmUgPSAodm9pZCAqKWJ1ZjsKPiA+ICsJdGVzdF9wb3NpdGlvbl90IHRlc3QgPSB7IC5kYXRhID0g ZGF0YSB9Owo+ID4gKwljb2xvcl90IGJsdWXCoMKgPSB7IDAuMGYsIDAuMGYsIDEuMGYgfTsKPiA+ ICsJYm9vbCB0ZXN0X2F0b21pYyA9IHRlc3RfaXNfYXRvbWljKGlndF9zdWJ0ZXN0X25hbWUoKSk7 Cj4gPiArCWlndF9jcmNfdCAqY3JjID0gTlVMTDsKPiA+ICsJaWd0X2NyY190IGNyY19sZWdhY3k7 Cj4gPiArCXVuc2lnbmVkIHZibGFua19zdGFydDsKPiA+ICsJaW50IG4sIHJldDsKPiA+ICsKPiA+ ICsJaWYgKHRlc3RfYXRvbWljKQo+ID4gKwkJaWd0X3JlcXVpcmUoZGF0YS0+ZGlzcGxheS5pc19h dG9taWMpOwo+ID4gKwo+ID4gKwlpZ3RfaW5mbygiVGVzdGluZyBjb25uZWN0b3IgJXMgdXNpbmcg cGlwZSAlcyB3aXRoICVkCj4gPiBwbGFuZXMgZm9yICVkICVzXG4iLAo+ID4gKwkJwqBpZ3Rfb3V0 cHV0X25hbWUob3V0cHV0KSwga21zdGVzdF9waXBlX25hbWUocGlwZSksCj4gPiBtYXhfcGxhbmVz LAo+ID4gKwkJwqBvcHQuaXRlcmF0aW9ucywgb3B0Lml0ZXJhdGlvbnMgPiAxID8gIml0ZXJhdGlv bnMiCj4gPiA6ICJpdGVyYXRpb24iKTsKPiA+ICsKPiA+ICsJdGVzdF9pbml0KGRhdGEsIHBpcGUp Owo+ID4gKwo+ID4gKwl0ZXN0X2dyYWJfY3JjKGRhdGEsIG91dHB1dCwgcGlwZSwgJmJsdWUsIHRp bGluZywKPiA+ICsJCcKgwqDCoMKgwqDCoCZ0ZXN0LnJlZmVyZW5jZV9jcmMpOwo+ID4gKwo+ID4g KwlpZiAodGVzdF9hdG9taWMpCj4gPiArCQlpZ3RfcGlwZV9jcmNfc3RhcnQoZGF0YS0+cGlwZV9j cmMpOwo+ID4gKwo+ID4gKwlmb3IgKGludCBpID0gMDsgaSA8IG9wdC5pdGVyYXRpb25zOyBpKysp IHsKPiA+ICsJCXRlc3RfcGxhbmVzKGRhdGEsIHBpcGUsICZibHVlLCB0aWxpbmcsIG1heF9wbGFu ZXMsCj4gPiBvdXRwdXQpOwo+ID4gKwo+ID4gKwkJaWYgKHRlc3RfYXRvbWljKSB7Cj4gPiArCQkJ dmJsYW5rX3N0YXJ0ID0gZ2V0X3ZibGFuayhkYXRhLQo+ID4gPmRpc3BsYXkuZHJtX2ZkLCBwaXBl LCBEUk1fVkJMQU5LX05FWFRPTk1JU1MpOwo+ID4gKwo+ID4gKwkJCWlndF9kaXNwbGF5X2NvbW1p dF9hdG9taWMoJmRhdGEtPmRpc3BsYXksCj4gPiArCQkJCQkJwqDCoERSTV9NT0RFX1BBR0VfRkwK PiA+IElQX0VWRU5ULAo+ID4gKwkJCQkJCcKgwqAmZGF0YS0+ZGlzcGxheSk7Cj4gPiArCj4gPiAr CQkJcmV0ID0gcmVhZChkYXRhLT5kaXNwbGF5LmRybV9mZCwgYnVmLAo+ID4gc2l6ZW9mKGJ1Zikp Owo+ID4gKwo+ID4gKwkJCWlndF9hc3NlcnRfZXEoZ2V0X3ZibGFuayhkYXRhLQo+ID4gPmRpc3Bs YXkuZHJtX2ZkLCBwaXBlLCAwKSwgdmJsYW5rX3N0YXJ0ICsgMSk7Cj4gPiArCQkJaWd0X3NldF90 aW1lb3V0KDEsICJTdHVjayBvbiBwYWdlIGZsaXAiKTsKPiA+ICsJCQlpZ3RfYXNzZXJ0X25lcShl cnJubywgRUlOVFIpOwo+ID4gKwkJCWlndF9hc3NlcnRfbmVxKGVycm5vLCBFQUdBSU4pOwo+ID4g KwkJCWlndF9hc3NlcnQocmV0ID49IDApOwo+ID4gKwkJCWlndF9hc3NlcnRfZXEoZS0+dHlwZSwK PiA+IERSTV9FVkVOVF9GTElQX0NPTVBMRVRFKTsKPiA+ICsKPiA+ICsJCQluID0gaWd0X3BpcGVf Y3JjX2dldF9jcmNzKGRhdGEtPnBpcGVfY3JjLAo+ID4gTUFYX0NSQ1MsICZjcmMpOwo+ID4gKwo+ ID4gKwkJCWlndF9hc3NlcnRfZXEobiwgTUFYX0NSQ1MpOwo+ID4gKwkJfSBlbHNlIHsKPiA+ICsJ CQlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LAo+ID4gQ09NTUlUX0xFR0FDWSk7 Cj4gPiArCj4gPiArCQkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLAo+ ID4gJmNyY19sZWdhY3kpOwo+ID4gKwkJCWNyYyA9ICZjcmNfbGVnYWN5Owo+ID4gKwkJfQo+ID4g Kwo+ID4gKwkJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJnRlc3QucmVmZXJlbmNlX2NyYywgY3JjKTsK PiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAodGVzdF9hdG9taWMpCj4gPiArCQlpZ3RfcGlwZV9jcmNf c3RvcChkYXRhLT5waXBlX2NyYyk7Cj4gPiArCj4gPiArCXRlc3RfZmluaShkYXRhLCBvdXRwdXQs IG1heF9wbGFuZXMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3Rlc3RfcGxh bmVfcG9zaXRpb24oZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaW50IG1heF9wbGFuZXMs Cj4gPiArCQnCoMKgwqDCoHVpbnQ2NF90IHRpbGluZykKPiA+ICt7Cj4gPiArCWlndF9vdXRwdXRf dCAqb3V0cHV0Owo+ID4gKwlpbnQgY29ubmVjdGVkX291dHM7Cj4gPiArCj4gPiArCWlndF9za2lw X29uKHBpcGUgPj0gZGF0YS0+ZGlzcGxheS5uX3BpcGVzKTsKPiA+ICsJaWd0X3NraXBfb24obWF4 X3BsYW5lcyA+PSBkYXRhLQo+ID4gPmRpc3BsYXkucGlwZXNbcGlwZV0ubl9wbGFuZXMpOwo+ID4g Kwo+ID4gKwlpZiAoIW9wdC51c2VyX3NlZWQpCj4gPiArCQlvcHQuc2VlZCA9IHRpbWUoTlVMTCk7 Cj4gPiArCj4gPiArCXNyYW5kKG9wdC5zZWVkKTsKPiA+ICsJbG9nd3JpdGUoaWd0X3N1YnRlc3Rf bmFtZSgpKTsKPiA+ICsKPiA+ICsJY29ubmVjdGVkX291dHMgPSAwOwo+ID4gKwlmb3JfZWFjaF9j b25uZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsKPiA+ICsJCXRlc3RfcGxh bmVfcG9zaXRpb25fd2l0aF9vdXRwdXQoZGF0YSwgcGlwZSwKPiA+IG91dHB1dCwKPiA+ICsJCQkJ CQltYXhfcGxhbmVzLAo+ID4gdGlsaW5nKTsKPiA+ICsJCWNvbm5lY3RlZF9vdXRzKys7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJaWd0X3NraXBfb24oY29ubmVjdGVkX291dHMgPT0gMCk7Cj4gPiArCj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArcnVuX3Rlc3RzX2Zvcl9waXBlX3BsYW5l KGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGludAo+ID4gbWF4X3BsYW5lcykKPiA+ICt7 Cj4gPiArCWlndF9zdWJ0ZXN0X2YoImxlZ2FjeS1waXBlLSVzLXRpbGluZy1ub25lLXBsYW5lcy0l ZCIsCj4gPiArCQnCoMKgwqDCoMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwgbWF4X3BsYW5l cykKPiA+ICsJCXRlc3RfcGxhbmVfcG9zaXRpb24oZGF0YSwgcGlwZSwgbWF4X3BsYW5lcywKPiA+ IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUpOwo+ID4gKwo+ID4gKwlpZ3Rfc3VidGVzdF9mKCJh dG9taWMtcGlwZS0lcy10aWxpbmctbm9uZS1wbGFuZXMtJWQiLAo+ID4gKwkJwqDCoMKgwqDCoMKg a21zdGVzdF9waXBlX25hbWUocGlwZSksIG1heF9wbGFuZXMpCj4gPiArCQl0ZXN0X3BsYW5lX3Bv c2l0aW9uKGRhdGEsIHBpcGUsIG1heF9wbGFuZXMsCj4gPiBMT0NBTF9JOTE1X0ZPUk1BVF9NT0Rf WF9USUxFRCk7Cj4gPiArCj4gPiArCWlndF9zdWJ0ZXN0X2YoImxlZ2FjeS1waXBlLSVzLXRpbGlu Zy14LXBsYW5lcy0lZCIsCj4gPiArCQnCoMKgwqDCoMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShwaXBl KSwgbWF4X3BsYW5lcykKPiA+ICsJCXRlc3RfcGxhbmVfcG9zaXRpb24oZGF0YSwgcGlwZSwgbWF4 X3BsYW5lcywKPiA+IExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVEKTsKPiA+ICsKPiA+ICsJ aWd0X3N1YnRlc3RfZigiYXRvbWljLXBpcGUtJXMtdGlsaW5nLXgtcGxhbmVzLSVkIiwKPiA+ICsJ CcKgwqDCoMKgwqDCoGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBtYXhfcGxhbmVzKQo+ID4gKwkJ dGVzdF9wbGFuZV9wb3NpdGlvbihkYXRhLCBwaXBlLCBtYXhfcGxhbmVzLAo+ID4gTE9DQUxfSTkx NV9GT1JNQVRfTU9EX1hfVElMRUQpOwo+ID4gKwo+ID4gKwlpZ3Rfc3VidGVzdF9mKCJsZWdhY3kt cGlwZS0lcy10aWxpbmcteS1wbGFuZXMtJWQiLAo+ID4gKwkJwqDCoMKgwqDCoMKga21zdGVzdF9w aXBlX25hbWUocGlwZSksIG1heF9wbGFuZXMpCj4gPiArCQl0ZXN0X3BsYW5lX3Bvc2l0aW9uKGRh dGEsIHBpcGUsIG1heF9wbGFuZXMsCj4gPiBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCk7 Cj4gPiArCj4gPiArCWlndF9zdWJ0ZXN0X2YoImF0b21pYy1waXBlLSVzLXRpbGluZy15LXBsYW5l cy0lZCIsCj4gPiArCQnCoMKgwqDCoMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwgbWF4X3Bs YW5lcykKPiA+ICsJCXRlc3RfcGxhbmVfcG9zaXRpb24oZGF0YSwgcGlwZSwgbWF4X3BsYW5lcywK PiA+IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVEKTsKPiA+ICsKPiA+ICsJaWd0X3N1YnRl c3RfZigibGVnYWN5LXBpcGUtJXMtdGlsaW5nLXlmLXBsYW5lcy0lZCIsCj4gPiArCQnCoMKgwqDC oMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwgbWF4X3BsYW5lcykKPiA+ICsJCXRlc3RfcGxh bmVfcG9zaXRpb24oZGF0YSwgcGlwZSwgbWF4X3BsYW5lcywKPiA+IExPQ0FMX0k5MTVfRk9STUFU X01PRF9ZZl9USUxFRCk7Cj4gPiArCj4gPiArCWlndF9zdWJ0ZXN0X2YoImF0b21pYy1waXBlLSVz LXRpbGluZy15Zi1wbGFuZXMtJWQiLAo+ID4gKwkJwqDCoMKgwqDCoMKga21zdGVzdF9waXBlX25h bWUocGlwZSksIG1heF9wbGFuZXMpCj4gPiArCQl0ZXN0X3BsYW5lX3Bvc2l0aW9uKGRhdGEsIHBp cGUsIG1heF9wbGFuZXMsCj4gPiBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQpOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3J1bl90ZXN0c19mb3JfcGlwZShkYXRhX3Qg KmRhdGEsIGVudW0gcGlwZSBwaXBlKQo+ID4gK3sKPiA+ICsJZm9yIChpbnQgcGxhbmVzID0gMTsg cGxhbmVzIDwgSUdUX01BWF9QTEFORVM7IHBsYW5lcysrKQo+ID4gKwkJcnVuX3Rlc3RzX2Zvcl9w aXBlX3BsYW5lKGRhdGEsIHBpcGUsIHBsYW5lcyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBk YXRhX3QgZGF0YTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IG9wdF9oYW5kbGVyKGludCBvcHRpb24s IGludCBvcHRpb25faW5kZXgsIHZvaWQgKmlucHV0KQo+ID4gK3sKPiA+ICsJc3dpdGNoIChvcHRp b24pIHsKPiA+ICsJY2FzZSAnaSc6Cj4gPiArCQlvcHQuaXRlcmF0aW9ucyA9IElOX1JBTkdFKHN0 cnRvbChvcHRhcmcsIE5VTEwsIDApLAo+ID4gMSwgMjU2KTsKPiA+ICsJCWJyZWFrOwo+ID4gKwlj YXNlICdzJzoKPiA+ICsJCW9wdC51c2VyX3NlZWQgPSB0cnVlOwo+ID4gKwkJb3B0LnNlZWQgPSBz dHJ0b2wob3B0YXJnLCBOVUxMLCAwKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlICdsJzoKPiA+ ICsJCW9wdC51c2VyX2xvZ2ZpbGUgPSB0cnVlOwo+ID4gKwkJc3RyY3B5KG9wdC5sb2dmaWxlLCBv cHRhcmcpOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlpZ3RfYXNzZXJ0KGZh bHNlKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArY29u c3QgY2hhciAqaGVscF9zdHIgPQo+ID4gKwkiwqDCoC0taXRlcmF0aW9ucyBOdW1iZXIgb2YgaXRl cmF0aW9ucyBmb3IgdGVzdCBjb3ZlcmFnZS4KPiA+IG1pbiAxLCBtYXggMjU2LCBkZWZhdWx0IDE2 IGl0ZXJhdGlvbnMgXG4iCj4gPiArCSLCoMKgLS1zZWVkwqDCoMKgwqDCoMKgwqBTZWVkIGZvciBy YW5kb20gbnVtYmVyIGdlbmVyYXRvclxuIgo+ID4gKwkiwqDCoC0tbG9nZmlsZcKgwqDCoMKgTG9n ZmlsZSB0byBzdG9yZSBzZWVkcyBmb3IgcmFuZG9tIG51bWJlcgo+ID4gZ2VuZXJhdG9yLCBkZWZh dWx0ICdrbXNfcGxhbmVfbXVsdGlwbGUubG9nJ1xuIjsKPiA+ICsKPiA+ICtpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQo+ID4gK3sKPiA+ICsJdGltZV90IHQgPSB0aW1lKE5VTEwpOwo+ ID4gKwlzdHJ1Y3QgdG0gdG0gPSAqbG9jYWx0aW1lKCZ0KTsKPiA+ICsKPiA+ICsJc3RydWN0IG9w dGlvbiBsb25nX29wdGlvbnNbXSA9IHsKPiA+ICsJCXsgIml0ZXJhdGlvbnMiLCByZXF1aXJlZF9h cmd1bWVudCwgTlVMTCwgJ2knfSwKPiA+ICsJCXsgInNlZWQiLMKgwqDCoMKgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsICdzJ30sCj4gPiArCQl7ICJsb2dmaWxlIiwgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsICdsJ30sCj4gPiArCQl7IDAsIDAsIDAsIDAgfQo+ID4gKwl9Owo+ID4gKwo+ID4gKwlp Z3Rfc3VidGVzdF9pbml0X3BhcnNlX29wdHMoJmFyZ2MsIGFyZ3YsICIiLCBsb25nX29wdGlvbnMs Cj4gPiBoZWxwX3N0ciwKPiA+ICsJCQkJwqDCoMKgwqBvcHRfaGFuZGxlciwgTlVMTCk7Cj4gPiAr Cj4gPiArCWlmICghb3B0LnVzZXJfbG9nZmlsZSkKPiA+ICsJCXNwcmludGYob3B0LmxvZ2ZpbGUs ICJrbXNfcGxhbmVfbXVsdGlwbGUtJTRkLSUyZC0KPiA+ICUyZC5sb2ciLAo+ID4gKwkJCXRtLnRt X3llYXIgKyAxOTAwLCB0bS50bV9tb24gKyAxLAo+ID4gdG0udG1fbWRheSk7Cj4gPiArCj4gPiAr CWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKPiA+ICsKPiA+ICsJaWd0X2ZpeHR1cmUgewo+ID4g KwkJZGF0YS5kcm1fZmQgPQo+ID4gZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfSU5URUwp Owo+ID4gKwo+ID4gKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOwo+ID4gKwo+ID4g KwkJaWd0X3JlcXVpcmVfcGlwZV9jcmMoKTsKPiA+ICsJCWlndF9kaXNwbGF5X2luaXQoJmRhdGEu ZGlzcGxheSwgZGF0YS5kcm1fZmQpOwo+ID4gKwl9Cj4gPiArCj4gPiArCWZvciAoaW50IHBpcGUg PSAwOyBwaXBlIDwgSTkxNV9NQVhfUElQRVM7IHBpcGUrKykKPiA+ICsJCXJ1bl90ZXN0c19mb3Jf cGlwZSgmZGF0YSwgcGlwZSk7Cj4gPiArCj4gPiArCWlndF9maXh0dXJlIHsKPiA+ICsJCWlndF9k aXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxheSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWd0X2V4aXQo KTsKPiA+ICt9Cj4gPiAtLcKgCj4gPiAyLjcuNAo+ID4gCi0tIApNaWthIEthaG9sYSAtIEludGVs IE9UQwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==