From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH i-g-t v3 1/4] chamelium: Calculate CRC from framebuffer instead of hardcoding it Date: Thu, 06 Jul 2017 18:33:32 -0400 Message-ID: <1499380412.20388.30.camel@redhat.com> References: <20170705080435.26789-1-paul.kocialkowski@linux.intel.com> <1499286840.20388.4.camel@redhat.com> <1499346855.1379.24.camel@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9F26A6E66E for ; Thu, 6 Jul 2017 22:33:34 +0000 (UTC) In-Reply-To: <1499346855.1379.24.camel@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Paul Kocialkowski , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAyMDE3LTA3LTA2IGF0IDE2OjE0ICswMzAwLCBQYXVsIEtvY2lhbGtvd3NraSB3cm90 ZToKPiBPbiBXZWQsIDIwMTctMDctMDUgYXQgMTY6MzQgLTA0MDAsIEx5dWRlIFBhdWwgd3JvdGU6 Cj4gPiBTbyBhIGNvdXBsZSBvZiBub3RlcyBoZXJlIHRoYXQgd2lsbCBtYWtlIGl0IGEgbG90IGVh c2llciBmb3IgbWUgdG8KPiA+IHJldmlldyB0aGVzZSBpbiB0aGUgZnV0dXJlCj4gPiAKPiA+IMKg KiBXaGVuIHlvdSdyZSBkb2luZyBhIG5ldyByZXZpc2lvbiBvZiBhIHBhdGNoIHNlcmllcywgaXQn cyBoZWxwZnVsCj4gPiB0bwo+ID4gwqDCoMKga2VlcCBpdCBpbiB0aGUgc2FtZSBlbWFpbCB0aHJl YWQgYXMgdGhlIG9yaWdpbmFsIHYxIHNvIGl0J3MKPiA+IGVhc2llcgo+ID4gwqDCoMKgdG8ga2Vl cCB0cmFjayBvZiBpbiBwZW9wbGUncyBtYWlsIGNsaWVudHMgKGFzIHdlbGwgYXMgYXZvaWRpbmcK PiA+IMKgwqDCoGFjY2lkZW50YWxseSByZXZpZXdpbmcgb2xkZXIgcGF0Y2ggdmVyc2lvbnMuIEkg dXN1YWxseSBkbwo+ID4gc29tZXRoaW5nCj4gPiDCoMKgwqBsaWtlIHRoaXMgKG90aGVyIHByb2pl Y3RzIG1pZ2h0IHJlcXVlc3QgeW91IGRvIHRoaXMgc2xpZ2h0bHkKPiA+IMKgwqDCoGRpZmZlcmVu dGx5LCBidXQgdGhpcyBzaG91bGQgYmUgZmluZSBoZXJlKToKPiA+IMKgwqDCoMKgKiBbUEFUQ0gg MC8yXSBDbGVhbmluZyB1cCB0aGUgYWxpZ25tZW50IG9mIHZhcmlvdXMgZm9vcwo+ID4gwqDCoMKg wqDCoMKgwqAqIFtQQVRDSCAxLzJdIEZvbyB0aGUgYmFyLCBub3QgdGhlIGJhego+ID4gwqDCoMKg wqDCoMKgwqAqIFtQQVRDSCAyLzJdIEludHJvZHVjZSB0aGUgYW1hemluZyBuZXcgZm9vX2Jhcgo+ ID4gwqDCoMKgwqDCoMKgwqAqIFtQQVRDSCB2MiAwLzJdIENsZWFuaW5nIHVwIHRoZSBhbGlnbm1l bnQgb2YgdmFyaW91cyBmb29zCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCogW1BBVENIIHYyIDEv Ml0gRm9vIHRoZSBiYXIsIG5vdCB0aGUgYmF6Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCogW1BB VENIIHYyIDIvMl0gSW50cm9kdWNlIHRoZSBhbWF6aW5nIG5ldyBmb29fYmFyCj4gPiDCoMKgwqDC oMKgwqDCoCogW1BBVENIIHYzIDAvMl0gQ2xlYW5pbmcgdXAgdGhlIGFsaWdubWVudCBvZiB2YXJp b3VzIGZvb3MKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgKiBbUEFUQ0ggdjMgMS8yXSBGb28gdGhl IGJhciwgbm90IHRoZSBiYXoKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgKiBbUEFUQ0ggdjMgMi8y XSBJbnRyb2R1Y2UgdGhlIGFtYXppbmcgbmV3IGZvb19iYXIKPiA+IMKgKiBUcnkgbm90IHRvIGdy b3VwIHVucmVsYXRlZCBwYXRjaGVzIHRvZ2V0aGVyIGluIHRoZSBzYW1lIHRocmVhZC4KPiA+IFRo aXMKPiA+IMKgwqDCoGFsc28gbWFrZXMgc29ydGluZyB0aHJvdWdoIGFsbCBvZiB0aGVtIGEgbGl0 dGxlIG1vcmUgZGlmZmljdWx0Lgo+ID4gwqAqIFdoZW4geW91IG1ha2UgbmV3IHJldmlzaW9ucyBv ZiBwYXRjaGVzLCBpdCdzIHZlcnkgdXNlZnVsIGlmIHlvdQo+ID4gYWxzbwo+ID4gwqDCoMKgaW5j bHVkZSBhIGxpc3Qgb2YgY2hhbmdlcyB5b3UgbWFkZSB0byB0aGUgcGF0Y2ggc2luY2UgdGhlIGxh c3QKPiA+IMKgwqDCoHJldmlzaW9uLiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgdmVyeSBmaW5lbHkg ZGV0YWlsZWQsIHNvbWV0aGluZwo+ID4gbGlrZQo+ID4gwqDCoMKgdGhpcyB3b3VsZCBzdWZmaWNl Ogo+ID4gwqDCoMKgwqAqIFZhcmlvdXMgc3R5bGUgZml4ZXMKPiA+IMKgwqDCoMKgKiBSZW5hbWUg YmF6IHRvIG1vbywgYWRkIGNvdyBub2lzZXMKPiA+IMKgwqDCoMKgKiBTcGxpdCBpbml0X2Nvdygp IGludG8gaW5pdF93aGl0ZV9jb3coKSBhbmQgaW5pdF9ibGFja19jb3coKQo+ID4gwqDCoMKgwqDC oMKgaW5zdGVhZCBvZiBoYW5kbGluZyBib3RoIGtpbmRzIG9mIGNvd3MgaW4gdGhlIHNhbWUgZnVu Y3Rpb24KPiA+IMKgwqDCoMKgKiBGaXggZG9jdW1lbnRhdGlvbgo+ID4gwqDCoMKgwqBGb3IgaW50 ZWwtZ3B1LXRvb2xzLCBpdCdzIGZpbmUgdG8ganVzdCBzdGljayB0aGlzIGluIHRoZSBjb21taXQK PiA+IMKgwqDCoMKgbWVzc2FnZS4gT3RoZXIgcHJvamVjdHMgbWF5IHJlcXVlc3QgeW91IHB1dCB0 aGUgY2hhbmdlbG9nIGJlbG93Cj4gPiB0aGUKPiA+IMKgwqDCoMKgLS0tLS0gcmlnaHQgYWJvdmUg dGhlIGRpZmYgc3RhdHMgKHRoaXMgYWxsb3dzIHRoZSBjb21tZW50cyBub3QKPiA+IHRvCj4gPiDC oMKgwqDCoGdldCBpbmNsdWRlZCBpbiB0aGUgZmluYWwgY29tbWl0IG1lc3NhZ2UpCj4gPiDCoCog VW5sZXNzIHRoZXkgYXJlIGFsbCB2ZXJ5IHNtYWxsIGFuZCBsZXNzIGltcG9ydGFudCBmaXhlcywK PiA+IGluY2x1ZGluZwo+ID4gwqDCoMKgY292ZXIgbGV0dGVycyBoZWxwcyBhcyB3ZWxsIHNpbmNl IGl0IGxldHMgcGF0Y2h3b3JrIGdyb3VwCj4gPiB0b2dldGhlcgo+ID4gwqDCoMKgcGF0Y2ggc2Vy aWVzIGxpa2UgdGhpcy4KPiAKPiBXaGF0IHdvdWxkIHlvdSBwcmVmZXIgdGhhdCBJIGRvIHJlZ2Fy ZGluZyBmb2xsb3ctdXAgdmVyc2lvbnMgdG8gdGhpcwo+IHBhdGNoc2V0IChhbmQgdGhlIG90aGVy IG9uZSB0aGF0IGlzIHN0aWxsIHVuZGVyIHJldmlldyk/CkRvbid0IHdvcnJ5IGFib3V0IHRoYXQs IEkgd2VudCB0aHJvdWdoIGFsbCB0aGUgb3RoZXIgcGF0Y2hlcyBhbmQKcmV2aWV3ZWQgdGhlbSBh bnl3YXkgc28gdGhlcmUgc2hvdWxkbid0IGJlIGFueXRoaW5nIGxlZnQgdG8gZG8gOikuIGp1c3QK dXNlIHRoZSBndWlkZWxpbmVzIGZvciB0aGUgZnV0dXJlLgo+IAo+IEkgY291bGQgc3BsaXQgdGhl IHNlcmllcyBwZXItdG9waWMgKGNyYywgZnJhbWUgc2F2ZSwgdGltZQo+IGltcHJvdmVtZW50cykK PiBhbmQga2VlcCB0aG9zZSBpbiB0aGUgc2FtZSBwYXJlbnQgdGhyZWFkIGFzIHRoZWlyIHYxLgo+ IAo+ID4gQW55d2F5LCBiYWNrIHRvIHRoZSBhY3R1YWwgcGF0Y2g6Cj4gPiBBIGdvb2Qgc3RhcnQh IFdpbGwgbmVlZCBhIGNvdXBsZSBvZiBjaGFuZ2VzIHRob3VnaAo+ID4gCj4gPiBPbiBXZWQsIDIw MTctMDctMDUgYXQgMTE6MDQgKzAzMDAsIFBhdWwgS29jaWFsa293c2tpIHdyb3RlOgo+ID4gPiBU aGlzIGludHJvZHVjZXMgQ1JDIGNhbGN1bGF0aW9uIGZvciByZWZlcmVuY2UgZnJhbWVzLCBpbnN0 ZWFkIG9mCj4gPiA+IHVzaW5nCj4gPiA+IGhhcmRjb2RlZCB2YWx1ZXMgZm9yIHRoZW0uIFRoZSBy ZW5kZXJpbmcgb2YgcmVmZXJlbmNlIGZyYW1lcyBtYXkKPiA+ID4gZGlmZmVyCj4gPiA+IGZyb20g bWFjaGluZSB0byBtYWNoaW5lLCBlc3BlY2lhbGx5IGR1ZSB0byBmb250IHJlbmRlcmluZywgYW5k Cj4gPiA+IHRoZQo+ID4gPiBmcmFtZSBpdHNlbGYgbWF5IGNoYW5nZSB3aXRoIHN1YnNlcXVlbnQg SUdUIGNoYW5nZXMuCj4gPiA+IAo+ID4gPiBUaGVzZSBkaWZmZXJlbmNlcyB3b3VsZCBjYXVzZSB0 aGUgQ1JDIGNoZWNrcyB0byBmYWlsIG9uIGRpZmZlcmVudAo+ID4gPiBzZXR1cHMuIFRoaXMgYWxs b3dzIHRoZW0gdG8gcGFzcyByZWdhcmRsZXNzIG9mIHRoZSBzZXR1cC4KPiA+ID4gCj4gPiA+IFNp Z25lZC1vZmYtYnk6IFBhdWwgS29jaWFsa293c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBsaW51eC5p bnRlbC5jCj4gPiA+IG9tPgo+ID4gPiAtLS0KPiA+ID4gwqBsaWIvaWd0X2NoYW1lbGl1bS5jIHwg MTYwCj4gPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiA+ID4gwqBsaWIvaWd0X2NoYW1lbGl1bS5oIHzCoMKgwqA1ICsrCj4gPiA+IMKgdGVz dHMvY2hhbWVsaXVtLmPCoMKgwqB8wqDCoDc2ICsrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ ID4gwqAzIGZpbGVzIGNoYW5nZWQsIDE4MyBpbnNlcnRpb25zKCspLCA1OCBkZWxldGlvbnMoLSkK PiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bS5jIGIvbGliL2lndF9j aGFtZWxpdW0uYwo+ID4gPiBpbmRleCBiZmYwOGMwZS4uYjlkODBiNmIgMTAwNjQ0Cj4gPiA+IC0t LSBhL2xpYi9pZ3RfY2hhbWVsaXVtLmMKPiA+ID4gKysrIGIvbGliL2lndF9jaGFtZWxpdW0uYwo+ ID4gPiBAQCAtOTQsNiArOTQsMTQgQEAgc3RydWN0IGNoYW1lbGl1bV9mcmFtZV9kdW1wIHsKPiA+ ID4gwqAJc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0Owo+ID4gPiDCoH07Cj4gPiA+IMKgCj4g PiA+ICtzdHJ1Y3QgY2hhbWVsaXVtX2ZiX2NyYyB7Cj4gPiA+ICsJaW50IGZkOwo+ID4gPiArCXN0 cnVjdCBpZ3RfZmIgKmZiOwo+ID4gPiArCj4gPiA+ICsJcHRocmVhZF90IHRocmVhZF9pZDsKPiA+ ID4gKwlpZ3RfY3JjX3QgKnJldDsKPiA+ID4gK307Cj4gPiA+ICsKPiA+IAo+ID4gVGhlIG5hbWUg b2YgdGhpcyBzdHJ1Y3R1cmUgaXMgYSBsaXR0bGUgbWlzbGVhZGluZywgYmVjYXVzZSBub3cgd2UK PiA+IGhhdmUKPiA+IGFuIEFQSSB0aGF0IGV4cG9zZXMgYm90aCBhIHN0cnVjdCBjaGFtZWxpdW1f ZmJfY3JjIHN0cnVjdCBpbgo+ID4gYWRkaXRpb24KPiA+IHRvIHRoZSBpZ3RfY3JjX3Qgc3RydWN0 LiBSZW5hbWUgdGhpcyB0byBzb21ldGhpbmcgbGlrZSBzdHJ1Y3QKPiA+IGNoYW1lbGl1bV9mYl9j cmNfd29yawo+ID4gCj4gPiA+IMKgc3RydWN0IGNoYW1lbGl1bSB7Cj4gPiA+IMKgCXhtbHJwY19l bnYgZW52Owo+ID4gPiDCoAl4bWxycGNfY2xpZW50ICpjbGllbnQ7Cj4gPiA+IEBAIC0xMDAzLDYg KzEwMTEsMTU4IEBAIGludCBjaGFtZWxpdW1fZ2V0X2ZyYW1lX2xpbWl0KHN0cnVjdAo+ID4gPiBj aGFtZWxpdW0gKmNoYW1lbGl1bSwKPiA+ID4gwqAJcmV0dXJuIHJldDsKPiA+ID4gwqB9Cj4gPiA+ IMKgCj4gPiA+ICtzdGF0aWMgdWludDMyX3QgY2hhbWVsaXVtX3hyZ2JfaGFzaDE2KHVuc2lnbmVk IGNoYXIgKmJ1ZmZlciwgaW50Cj4gPiA+IHdpZHRoLAo+ID4gPiArCQkJCcKgwqDCoMKgwqDCoGlu dCBoZWlnaHQsIGludCBrLCBpbnQgbSkKPiA+ID4gK3sKPiA+IAo+ID4gV2UncmUgbm90IG1vZGlm eWluZyBidWZmZXIsIHNvIG1ha2UgaXQgYSBjb25zdC4gQXMgd2VsbCwgZmVlbCBmcmVlCj4gPiB0 bwo+ID4gbWFyayB0aGlzIGZ1bmN0aW9uIGFzIGlubGluZS4KPiA+IAo+ID4gPiArCXVuc2lnbmVk IGNoYXIgciwgZywgYjsKPiA+ID4gKwl1aW50NjRfdCBzdW0gPSAwOwo+ID4gPiArCXVpbnQ2NF90 IGNvdW50ID0gMDsKPiA+ID4gKwl1aW50NjRfdCB2YWx1ZTsKPiA+ID4gKwl1aW50MzJfdCBoYXNo Owo+ID4gPiArCWludCBpbmRleDsKPiA+ID4gKwlpbnQgaTsKPiA+ID4gKwo+ID4gPiArCWZvciAo aT0wOyBpIDwgd2lkdGggKiBoZWlnaHQ7IGkrKykgewo+ID4gPiArCQlpZiAoKGkgJSBtKSAhPSBr KQo+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ICsKPiA+ID4gKwkJaW5kZXggPSBpICogNDsKPiA+ ID4gKwo+ID4gPiArCQlyID0gYnVmZmVyW2luZGV4ICsgMl07Cj4gPiA+ICsJCWcgPSBidWZmZXJb aW5kZXggKyAxXTsKPiA+ID4gKwkJYiA9IGJ1ZmZlcltpbmRleCArIDBdOwo+ID4gPiArCj4gPiA+ ICsJCXZhbHVlID0gciB8IChnIDw8IDgpIHwgKGIgPDwgMTYpOwo+ID4gPiArCQlzdW0gKz0gKytj b3VudCAqIHZhbHVlOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWhhc2ggPSAoKHN1bSA+PiAw KSBeIChzdW0gPj4gMTYpIF4gKHN1bSA+PiAzMikgXiAoc3VtID4+Cj4gPiA+IDQ4KSkgJiAweGZm ZmY7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gaGFzaDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiAr LyoqCj4gPiA+ICsgKiBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyYzoKPiA+ID4gKyAqIEBmZDog VGhlIGRybSBmaWxlIGRlc2NyaXB0b3IKPiA+ID4gKyAqIEBmYjogVGhlIGZyYW1lYnVmZmVyIHRv IGNhbGN1bGF0ZSB0aGUgQ1JDIGZvcgo+ID4gPiArICoKPiA+ID4gKyAqIENhbGN1bGF0ZXMgYSBD UkMgZm9yIHRoZSBwcm92aWRlZCBmcmFtZWJ1ZmZlciwgdGhlIHNhbWUgd2F5Cj4gPiA+IGFzCj4g PiA+IHRoZSBDaGFtZWxpdW0uCj4gPiAKPiA+IENhbGN1bGF0ZSB0aGUgQ1JDIGZvciB0aGUgcHJv dmlkZWQgZnJhbWVidWZmZXIsIHVzaW5nIHRoZQo+ID4gQ2hhbWVsaXVtJ3MKPiA+IENSQyBhbGdv cml0aG0KPiA+ID4gKyAqIFRoaXMgY2FsY3VsYXRlcyB0aGUgQ1JDIGluIGEgbm9uLXRocmVhZGVk IGZhc2hpb24uCj4gPiA+ICsgKgo+ID4gPiArICogUmV0dXJuczogVGhlIGNhbGN1bGF0ZWQgQ1JD Cj4gPiA+ICsgKi8KPiA+ID4gK2lndF9jcmNfdCAqY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmMo aW50IGZkLCBzdHJ1Y3QgaWd0X2ZiICpmYikKPiA+ID4gK3sKPiA+ID4gKwlpZ3RfY3JjX3QgKnJl dDsKPiA+ID4gKwljYWlyb190ICpjcjsKPiA+ID4gKwljYWlyb19zdXJmYWNlX3QgKmZiX3N1cmZh Y2U7Cj4gPiA+ICsJdW5zaWduZWQgY2hhciAqYnVmZmVyOwo+ID4gPiArCWludCBuID0gNDsKPiA+ ID4gKwlpbnQgdywgaDsKPiA+ID4gKwlpbnQgaSwgajsKPiA+ID4gKwo+ID4gPiArCXJldCA9IGNh bGxvYygxLCBzaXplb2YoaWd0X2NyY190KSk7Cj4gPiA+ICsKPiA+ID4gKwkvKiBHZXQgdGhlIGNh aXJvIHN1cmZhY2UgZm9yIHRoZSBmcmFtZWJ1ZmZlciAqLwo+ID4gPiArCWNyID0gaWd0X2dldF9j YWlyb19jdHgoZmQsIGZiKTsKPiA+ID4gKwlmYl9zdXJmYWNlID0gY2Fpcm9fZ2V0X3RhcmdldChj cik7Cj4gPiA+ICsJY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UoZmJfc3VyZmFjZSk7Cj4gPiA+ICsJ Y2Fpcm9fZGVzdHJveShjcik7Cj4gPiA+ICsKPiA+ID4gKwlidWZmZXIgPSBjYWlyb19pbWFnZV9z dXJmYWNlX2dldF9kYXRhKGZiX3N1cmZhY2UpOwo+ID4gPiArCXcgPSBmYi0+d2lkdGg7Cj4gPiA+ ICsJaCA9IGZiLT5oZWlnaHQ7Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsr KSB7Cj4gPiA+ICsJCWogPSBuIC0gaSAtIDE7Cj4gPiA+ICsJCXJldC0+Y3JjW2ldID0gY2hhbWVs aXVtX3hyZ2JfaGFzaDE2KGJ1ZmZlciwgdywKPiA+ID4gaCwKPiA+ID4gaiwKPiA+ID4gbik7Cj4g PiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJcmV0LT5uX3dvcmRzID0gbjsKPiA+ID4gKwljYWlyb19z dXJmYWNlX2Rlc3Ryb3koZmJfc3VyZmFjZSk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gcmV0Owo+ ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCAqY2hhbWVsaXVtX2NhbGN1bGF0ZV9m Yl9jcmNfdGhyZWFkKHZvaWQgKmRhdGEpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGNoYW1lbGl1 bV9mYl9jcmMgKmZiX2NyYyA9IChzdHJ1Y3QKPiA+ID4gY2hhbWVsaXVtX2ZiX2NyYwo+ID4gPiAq KSBkYXRhOwo+ID4gPiArCWNhaXJvX3QgKmNyOwo+ID4gPiArCWNhaXJvX3N1cmZhY2VfdCAqZmJf c3VyZmFjZTsKPiA+ID4gKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7Cj4gPiA+ICsJaW50IG4gPSA0 Owo+ID4gPiArCWludCB3LCBoOwo+ID4gPiArCWludCBpLCBqOwo+ID4gPiArCj4gPiA+ICsJLyog R2V0IHRoZSBjYWlybyBzdXJmYWNlIGZvciB0aGUgZnJhbWVidWZmZXIgKi8KPiA+ID4gKwljciA9 IGlndF9nZXRfY2Fpcm9fY3R4KGZiX2NyYy0+ZmQsIGZiX2NyYy0+ZmIpOwo+ID4gPiArCWZiX3N1 cmZhY2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNyKTsKPiA+ID4gKwljYWlyb19zdXJmYWNlX3JlZmVy ZW5jZShmYl9zdXJmYWNlKTsKPiA+ID4gKwljYWlyb19kZXN0cm95KGNyKTsKPiA+ID4gKwo+ID4g PiArCWJ1ZmZlciA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoZmJfc3VyZmFjZSk7Cj4g PiA+ICsJdyA9IGZiX2NyYy0+ZmItPndpZHRoOwo+ID4gPiArCWggPSBmYl9jcmMtPmZiLT5oZWln aHQ7Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4gPiA+ICsJCWog PSBuIC0gaSAtIDE7Cj4gPiA+ICsJCWZiX2NyYy0+cmV0LT5jcmNbaV0gPQo+ID4gPiBjaGFtZWxp dW1feHJnYl9oYXNoMTYoYnVmZmVyLAo+ID4gPiB3LCBoLCBqLCBuKTsKPiA+ID4gKwl9Cj4gPiA+ ICsKPiA+ID4gKwlmYl9jcmMtPnJldC0+bl93b3JkcyA9IG47Cj4gPiA+ICsJY2Fpcm9fc3VyZmFj ZV9kZXN0cm95KGZiX3N1cmZhY2UpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIE5VTEw7Cj4gPiA+ ICt9Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9j cmNfbGF1bmNoOgo+ID4gPiArICogQGZkOiBUaGUgZHJtIGZpbGUgZGVzY3JpcHRvcgo+ID4gPiAr ICogQGZiOiBUaGUgZnJhbWVidWZmZXIgdG8gY2FsY3VsYXRlIHRoZSBDUkMgZm9yCj4gPiA+ICsg Kgo+ID4gPiArICogTGF1bmNoZXMgdGhlIENSQyBjYWxjdWxhdGlvbiBmb3IgdGhlIHByb3ZpZGVk IGZyYW1lYnVmZmVyLAo+ID4gPiB0aGUKPiA+ID4gc2FtZSB3YXkgYXMKPiA+ID4gKyAqIHRoZSBD aGFtZWxpdW0uIFRoaXMgY2FsY3VsYXRlcyB0aGUgQ1JDIGluIGEgdGhyZWFkZWQgZmFzaGlvbi4K PiA+ID4gKyAqIFRocmVhZC1yZWxhdGVkIGluZm9ybWF0aW9uIGlzIHJldHVybmVkIGFuZCBzaG91 bGQgYmUgcGFzc2VkCj4gPiA+IHRvIGEKPiA+ID4gc3Vic2VxdWVudAo+ID4gPiArICogY2FsbCB0 byBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19yZXN1bHQuIEl0IHNob3VsZCBub3QgYmUKPiA+ ID4gZnJlZWQuCj4gPiA+ICsgKgo+ID4gPiArICogUmV0dXJuczogQW4gaW50ZXJtZWRpYXRlIHN0 cnVjdHVyZSB3aXRoIHRocmVhZC1yZWxhdGVkCj4gPiA+IGluZm9ybWF0aW9uCj4gPiAKPiA+IFRo ZSB1c2VyIGRvZXNuJ3QgbmVlZCB0byBrbm93IGFib3V0IHRoZSBtYWdpYyBpbnNpZGUgdGhlIHN0 cnVjdHVyZSwKPiA+IHNpbmNlIHdlJ3JlIG5vdCBnb2luZyB0byBleHBvc2UgaXQncyBkZWZpbml0 aW9uIG91dHNpZGUgb2YgdGhpcwo+ID4gZmlsZQo+ID4gYW55d2F5Lgo+ID4gPiArICovCj4gPiA+ ICtzdHJ1Y3QgY2hhbWVsaXVtX2ZiX2NyYyAqY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmNfbGF1 bmNoKGludAo+ID4gPiBmZCwKPiA+ID4gKwkJCQkJCQnCoMKgwqBzdHJ1Ywo+ID4gPiB0Cj4gPiA+ IGlndF9mYiAqZmIpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGNoYW1lbGl1bV9mYl9jcmMgKmZi X2NyYzsKPiA+ID4gKwo+ID4gPiArCWZiX2NyYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNo YW1lbGl1bV9mYl9jcmMpKTsKPiA+ID4gKwlmYl9jcmMtPnJldCA9IGNhbGxvYygxLCBzaXplb2Yo aWd0X2NyY190KSk7Cj4gPiA+ICsJZmJfY3JjLT5mZCA9IGZkOwo+ID4gPiArCWZiX2NyYy0+ZmIg PSBmYjsKPiA+ID4gKwo+ID4gPiArCXB0aHJlYWRfY3JlYXRlKCZmYl9jcmMtPnRocmVhZF9pZCwg TlVMTCwKPiA+ID4gKwkJwqDCoMKgwqDCoMKgwqBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY190 aHJlYWQsCj4gPiA+IGZiX2NyYyk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gZmJfY3JjOwo+ID4g PiArfQo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGNoYW1lbGl1bV9jYWxjdWxhdGVfZmJf Y3JjX3Jlc3VsdDoKPiA+ID4gKyAqIEBmYl9jcmM6IEFuIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUg d2l0aCB0aHJlYWQtcmVsYXRlZAo+ID4gPiBpbmZvcm1hdGlvbgo+ID4gPiArICoKPiA+ID4gKyAq IFByb3ZpZGVzIHRoZSByZXN1bHQgZm9yIHRoZSBwcmV2aW91c2x5LWxhdW5jaGVkIENSQwo+ID4g PiBjYWxjdWxhdGlvbi4KPiA+IAo+ID4gQmxvY2tzIHVudGlsIHRoZSBhc3luYyBDUkMgY2FsY3Vs YXRpb24gaXMgZmluaXNoZWQsIGFuZCB0aGVuCj4gPiByZXR1cm5zCj4gPiB0aGUgcmVzdWx0Lgo+ ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6IFRoZSBjYWxjdWxhdGVkIENSQwo+ID4gPiArICov Cj4gPiA+ICtpZ3RfY3JjX3QgKmNoYW1lbGl1bV9jYWxjdWxhdGVfZmJfY3JjX3Jlc3VsdChzdHJ1 Y3QKPiA+ID4gY2hhbWVsaXVtX2ZiX2NyYwo+ID4gPiAqZmJfY3JjKQo+ID4gPiArewo+ID4gPiAr CWlndF9jcmNfdCAqcmV0Owo+ID4gPiArCj4gPiA+ICsJcHRocmVhZF9qb2luKGZiX2NyYy0+dGhy ZWFkX2lkLCBOVUxMKTsKPiA+ID4gKwo+ID4gPiArCXJldCA9IGZiX2NyYy0+cmV0Owo+ID4gPiAr CWZyZWUoZmJfY3JjKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ ICsKPiA+ID4gwqBzdGF0aWMgdW5zaWduZWQgaW50IGNoYW1lbGl1bV9nZXRfcG9ydF90eXBlKHN0 cnVjdCBjaGFtZWxpdW0KPiA+ID4gKmNoYW1lbGl1bSwKPiA+ID4gwqAJCQkJCcKgwqDCoMKgc3Ry dWN0Cj4gPiA+IGNoYW1lbGl1bV9wb3J0Cj4gPiA+ICpwb3J0KQo+ID4gPiDCoHsKPiA+ID4gZGlm ZiAtLWdpdCBhL2xpYi9pZ3RfY2hhbWVsaXVtLmggYi9saWIvaWd0X2NoYW1lbGl1bS5oCj4gPiA+ IGluZGV4IDgxMzIyYWQyLi5lNTFjZjRmOSAxMDA2NDQKPiA+ID4gLS0tIGEvbGliL2lndF9jaGFt ZWxpdW0uaAo+ID4gPiArKysgYi9saWIvaWd0X2NoYW1lbGl1bS5oCj4gPiA+IEBAIC0zNiw2ICsz Niw3IEBACj4gPiA+IMKgc3RydWN0IGNoYW1lbGl1bTsKPiA+ID4gwqBzdHJ1Y3QgY2hhbWVsaXVt X3BvcnQ7Cj4gPiA+IMKgc3RydWN0IGNoYW1lbGl1bV9mcmFtZV9kdW1wOwo+ID4gPiArc3RydWN0 IGNoYW1lbGl1bV9mYl9jcmM7Cj4gPiA+IMKgCj4gPiA+IMKgc3RydWN0IGNoYW1lbGl1bSAqY2hh bWVsaXVtX2luaXQoaW50IGRybV9mZCk7Cj4gPiA+IMKgdm9pZCBjaGFtZWxpdW1fZGVpbml0KHN0 cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSk7Cj4gPiA+IEBAIC05Miw2ICs5MywxMCBAQCBzdHJ1 Y3QgY2hhbWVsaXVtX2ZyYW1lX2R1bXAKPiA+ID4gKmNoYW1lbGl1bV9wb3J0X2R1bXBfcGl4ZWxz KHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbAo+ID4gPiDCoAkJCQkJCQlzdHJ1Y3QKPiA+ID4gY2hh bWVsaXVtX3BvcnQgKnBvcnQsCj4gPiA+IMKgCQkJCQkJCWludCB4LAo+ID4gPiBpbnQKPiA+ID4g eSwKPiA+ID4gwqAJCQkJCQkJaW50IHcsCj4gPiA+IGludAo+ID4gPiBoKTsKPiA+ID4gK2lndF9j cmNfdCAqY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmMoaW50IGZkLCBzdHJ1Y3QgaWd0X2ZiCj4g PiA+ICpmYik7Cj4gPiA+ICtzdHJ1Y3QgY2hhbWVsaXVtX2ZiX2NyYyAqY2hhbWVsaXVtX2NhbGN1 bGF0ZV9mYl9jcmNfbGF1bmNoKGludAo+ID4gPiBmZCwKPiA+ID4gKwkJCQkJCQnCoMKgwqBzdHJ1 Ywo+ID4gPiB0Cj4gPiA+IGlndF9mYiAqZmIpOwo+ID4gPiAraWd0X2NyY190ICpjaGFtZWxpdW1f Y2FsY3VsYXRlX2ZiX2NyY19yZXN1bHQoc3RydWN0Cj4gPiA+IGNoYW1lbGl1bV9mYl9jcmMKPiA+ ID4gKmZiX2NyYyk7Cj4gPiA+IMKgaW50IGNoYW1lbGl1bV9nZXRfY2FwdHVyZWRfZnJhbWVfY291 bnQoc3RydWN0IGNoYW1lbGl1bQo+ID4gPiAqY2hhbWVsaXVtKTsKPiA+ID4gwqBpbnQgY2hhbWVs aXVtX2dldF9mcmFtZV9saW1pdChzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0sCj4gPiA+IMKg CQkJwqDCoMKgwqDCoMKgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAo+ID4gPiBkaWZmIC0t Z2l0IGEvdGVzdHMvY2hhbWVsaXVtLmMgYi90ZXN0cy9jaGFtZWxpdW0uYwo+ID4gPiBpbmRleCBl MzA2NzY2NC4uM2ZkMmIwMmMgMTAwNjQ0Cj4gPiA+IC0tLSBhL3Rlc3RzL2NoYW1lbGl1bS5jCj4g PiA+ICsrKyBiL3Rlc3RzL2NoYW1lbGl1bS5jCj4gPiA+IEBAIC00OSw0MyArNDksNiBAQCB0eXBl ZGVmIHN0cnVjdCB7Cj4gPiA+IMKgI2RlZmluZSBIUERfVE9HR0xFX0NPVU5UX1ZHQSA1Cj4gPiA+ IMKgI2RlZmluZSBIUERfVE9HR0xFX0NPVU5UX0RQX0hETUkgMTUKPiA+ID4gwqAKPiA+ID4gLS8q IFByZS1jYWxjdWxhdGVkIENSQ3MgZm9yIHRoZSBwYXR0ZXJuIGZiLCBmb3IgYWxsIHRoZSBtb2Rl cyBpbgo+ID4gPiB0aGUKPiA+ID4gZGVmYXVsdAo+ID4gPiAtICogY2hhbWVsaXVtIGVkaWQKPiA+ ID4gLSAqLwo+ID4gPiAtc3RydWN0IGNyY19lbnRyeSB7Cj4gPiA+IC0JaW50IHdpZHRoOwo+ID4g PiAtCWludCBoZWlnaHQ7Cj4gPiA+IC0JaWd0X2NyY190IGNyYzsKPiA+ID4gLX07Cj4gPiA+IC0K PiA+ID4gLSNkZWZpbmUgQ1JDX0VOVFJZKHdfLCBoXywgLi4uKSBcCj4gPiA+IC0JeyB3XywgaF8s IHsgLm5fd29yZHMgPSA0LCAuY3JjID0geyBfX1ZBX0FSR1NfXyB9IH0gfQo+ID4gPiAtCj4gPiA+ IC1zdGF0aWMgY29uc3Qgc3RydWN0IGNyY19lbnRyeSBwYXR0ZXJuX2ZiX2NyY3NbXSA9IHsKPiA+ ID4gLQlDUkNfRU5UUlkoMTkyMCwgMTA4MCwgMHhmODU5LCAweGE3NTEsIDB4OGM4MSwgMHg0NWEx KSwKPiA+ID4gLQlDUkNfRU5UUlkoMTI4MCzCoMKgNzIwLCAweGNlYzIsIDB4NDI0NiwgMHg2Y2Zk LCAweGViNDMpLAo+ID4gPiAtCUNSQ19FTlRSWSgxMDI0LMKgwqA3NjgsIDB4ODVlNSwgMHhmMGNk LCAweGFmZTMsIDB4N2YxOCksCj4gPiA+IC0JQ1JDX0VOVFJZKCA4MDAswqDCoDYwMCwgMHg2YjM5 LCAweDMyYjYsIDB4ODMxYSwgMHhiMDNlKSwKPiA+ID4gLQlDUkNfRU5UUlkoIDY0MCzCoMKgNDgw LCAweGExMjEsIDB4MjQ3MywgMHhiMTUwLCAweDhjNDcpLAo+ID4gPiAtfTsKPiA+ID4gLSN1bmRl ZiBDUkNfRU5UUlkKPiA+ID4gLQo+ID4gPiAtc3RhdGljIGNvbnN0IGlndF9jcmNfdCAqCj4gPiA+ IC1nZXRfcHJlY2FsY3VsYXRlZF9jcmMoc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LCBpbnQg dywgaW50IGgpCj4gPiA+IC17Cj4gPiA+IC0JaW50IGk7Cj4gPiA+IC0JY29uc3Qgc3RydWN0IGNy Y19lbnRyeSAqZW50cnk7Cj4gPiA+IC0KPiA+ID4gLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShwYXR0ZXJuX2ZiX2NyY3MpOyBpKyspIHsKPiA+ID4gLQkJZW50cnkgPSAmcGF0dGVybl9mYl9j cmNzW2ldOwo+ID4gPiAtCj4gPiA+IC0JCWlmIChlbnRyeS0+d2lkdGggPT0gdyAmJiBlbnRyeS0+ aGVpZ2h0ID09IGgpCj4gPiA+IC0JCQlyZXR1cm4gJmVudHJ5LT5jcmM7Cj4gPiA+IC0JfQo+ID4g PiAtCj4gPiA+IC0JcmV0dXJuIE5VTEw7Cj4gPiA+IC19Cj4gPiA+IC0KPiA+ID4gwqBzdGF0aWMg dm9pZAo+ID4gPiDCoHJlcXVpcmVfY29ubmVjdG9yX3ByZXNlbnQoZGF0YV90ICpkYXRhLCB1bnNp Z25lZCBpbnQgdHlwZSkKPiA+ID4gwqB7Cj4gPiA+IEBAIC00MjQsNyArMzg3LDggQEAgdGVzdF9k aXNwbGF5X2NyY19zaW5nbGUoZGF0YV90ICpkYXRhLCBzdHJ1Y3QKPiA+ID4gY2hhbWVsaXVtX3Bv cnQgKnBvcnQpCj4gPiA+IMKgCWlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ID4gPiDCoAlpZ3RfcGxh bmVfdCAqcHJpbWFyeTsKPiA+ID4gwqAJaWd0X2NyY190ICpjcmM7Cj4gPiA+IC0JY29uc3QgaWd0 X2NyY190ICpleHBlY3RlZF9jcmM7Cj4gPiA+ICsJaWd0X2NyY190ICpleHBlY3RlZF9jcmM7Cj4g PiA+ICsJc3RydWN0IGNoYW1lbGl1bV9mYl9jcmMgKmZiX2NyYzsKPiA+ID4gwqAJc3RydWN0IGln dF9mYiBmYjsKPiA+ID4gwqAJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+ID4gPiDCoAlkcm1Nb2Rl Q29ubmVjdG9yICpjb25uZWN0b3I7Cj4gPiA+IEBAIC00NDcsMjQgKzQxMSwyMSBAQCB0ZXN0X2Rp c3BsYXlfY3JjX3NpbmdsZShkYXRhX3QgKmRhdGEsCj4gPiA+IHN0cnVjdAo+ID4gPiBjaGFtZWxp dW1fcG9ydCAqcG9ydCkKPiA+ID4gwqAJCQkJCQnCoMKgwqDCoDAsIDAsIDAsCj4gPiA+ICZmYik7 Cj4gPiA+IMKgCQlpZ3RfYXNzZXJ0KGZiX2lkID4gMCk7Cj4gPiA+IMKgCj4gPiA+IC0JCWVuYWJs ZV9vdXRwdXQoZGF0YSwgcG9ydCwgb3V0cHV0LCBtb2RlLCAmZmIpOwo+ID4gPiArCQlmYl9jcmMg PSBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19sYXVuY2goZGF0YS0KPiA+ID4gPiBkcm1fZmQs ICZmYik7Cj4gPiA+IAo+ID4gPiDCoAo+ID4gPiAtCQlleHBlY3RlZF9jcmMgPSBnZXRfcHJlY2Fs Y3VsYXRlZF9jcmMocG9ydCwKPiA+ID4gLQkJCQkJCcKgwqDCoMKgwqBtb2RlLQo+ID4gPiA+IGhk aXNwbGF5LAo+ID4gPiAKPiA+ID4gLQkJCQkJCcKgwqDCoMKgwqBtb2RlLQo+ID4gPiA+IHZkaXNw bGF5KTsKPiA+ID4gCj4gPiA+IC0JCWlmICghZXhwZWN0ZWRfY3JjKSB7Cj4gPiA+IC0JCQlpZ3Rf d2FybigiTm8gcHJlY2FsY3VsYXRlZCBDUkMgZm91bmQgZm9yCj4gPiA+ICVkeCVkLCBza2lwcGlu ZyBDUkMgY2hlY2tcbiIsCj4gPiA+IC0JCQkJwqBtb2RlLT5oZGlzcGxheSwgbW9kZS0KPiA+ID4g PnZkaXNwbGF5KTsKPiA+ID4gLQkJCWdvdG8gbmV4dDsKPiA+ID4gLQkJfQo+ID4gPiArCQllbmFi bGVfb3V0cHV0KGRhdGEsIHBvcnQsIG91dHB1dCwgbW9kZSwgJmZiKTsKPiA+ID4gwqAKPiA+ID4g wqAJCWlndF9kZWJ1ZygiVGVzdGluZyBzaW5nbGUgQ1JDIGZldGNoXG4iKTsKPiA+ID4gKwo+ID4g PiDCoAkJY3JjID0gY2hhbWVsaXVtX2dldF9jcmNfZm9yX2FyZWEoZGF0YS0KPiA+ID4gPmNoYW1l bGl1bSwKPiA+ID4gcG9ydCwKPiA+ID4gwqAJCQkJCQnCoDAsIDAsIDAsIDApOwo+ID4gPiArCj4g PiA+ICsJCWV4cGVjdGVkX2NyYyA9Cj4gPiA+IGNoYW1lbGl1bV9jYWxjdWxhdGVfZmJfY3JjX3Jl c3VsdChmYl9jcmMpOwo+ID4gPiArCj4gPiA+IMKgCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbChjcmMs IGV4cGVjdGVkX2NyYyk7Cj4gPiA+ICsJCWZyZWUoZXhwZWN0ZWRfY3JjKTsKPiA+ID4gwqAJCWZy ZWUoY3JjKTsKPiA+ID4gwqAKPiA+ID4gLW5leHQ6Cj4gPiA+IMKgCQlkaXNhYmxlX291dHB1dChk YXRhLCBwb3J0LCBvdXRwdXQpOwo+ID4gPiDCoAkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQs ICZmYik7Cj4gPiA+IMKgCX0KPiA+ID4gQEAgLTQ4MCw3ICs0NDEsOCBAQCB0ZXN0X2Rpc3BsYXlf Y3JjX211bHRpcGxlKGRhdGFfdCAqZGF0YSwKPiA+ID4gc3RydWN0Cj4gPiA+IGNoYW1lbGl1bV9w b3J0ICpwb3J0KQo+ID4gPiDCoAlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiA+ID4gwqAJaWd0X3Bs YW5lX3QgKnByaW1hcnk7Cj4gPiA+IMKgCWlndF9jcmNfdCAqY3JjOwo+ID4gPiAtCWNvbnN0IGln dF9jcmNfdCAqZXhwZWN0ZWRfY3JjOwo+ID4gPiArCWlndF9jcmNfdCAqZXhwZWN0ZWRfY3JjOwo+ ID4gPiArCXN0cnVjdCBjaGFtZWxpdW1fZmJfY3JjICpmYl9jcmM7Cj4gPiA+IMKgCXN0cnVjdCBp Z3RfZmIgZmI7Cj4gPiA+IMKgCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKPiA+ID4gwqAJZHJtTW9k ZUNvbm5lY3RvciAqY29ubmVjdG9yOwo+ID4gPiBAQCAtNTAzLDE1ICs0NjUsOSBAQCB0ZXN0X2Rp c3BsYXlfY3JjX211bHRpcGxlKGRhdGFfdCAqZGF0YSwKPiA+ID4gc3RydWN0Cj4gPiA+IGNoYW1l bGl1bV9wb3J0ICpwb3J0KQo+ID4gPiDCoAkJCQkJCcKgwqDCoMKgMCwgMCwgMCwKPiA+ID4gJmZi KTsKPiA+ID4gwqAJCWlndF9hc3NlcnQoZmJfaWQgPiAwKTsKPiA+ID4gwqAKPiA+ID4gLQkJZW5h YmxlX291dHB1dChkYXRhLCBwb3J0LCBvdXRwdXQsIG1vZGUsICZmYik7Cj4gPiA+ICsJCWZiX2Ny YyA9IGNoYW1lbGl1bV9jYWxjdWxhdGVfZmJfY3JjX2xhdW5jaChkYXRhLQo+ID4gPiA+IGRybV9m ZCwgJmZiKTsKPiA+ID4gCj4gPiA+IMKgCj4gPiA+IC0JCWV4cGVjdGVkX2NyYyA9IGdldF9wcmVj YWxjdWxhdGVkX2NyYyhwb3J0LCBtb2RlLQo+ID4gPiA+IGhkaXNwbGF5LAo+ID4gPiAKPiA+ID4g LQkJCQkJCcKgwqDCoMKgwqBtb2RlLQo+ID4gPiA+IHZkaXNwbGF5KTsKPiA+ID4gCj4gPiA+IC0J CWlmICghZXhwZWN0ZWRfY3JjKSB7Cj4gPiA+IC0JCQlpZ3Rfd2FybigiTm8gcHJlY2FsY3VsYXRl ZCBDUkMgZm91bmQgZm9yCj4gPiA+ICVkeCVkLCBza2lwcGluZyBDUkMgY2hlY2tcbiIsCj4gPiA+ IC0JCQkJwqBtb2RlLT5oZGlzcGxheSwgbW9kZS0KPiA+ID4gPnZkaXNwbGF5KTsKPiA+ID4gLQkJ CWdvdG8gbmV4dDsKPiA+ID4gLQkJfQo+ID4gPiArCQllbmFibGVfb3V0cHV0KGRhdGEsIHBvcnQs IG91dHB1dCwgbW9kZSwgJmZiKTsKPiA+ID4gwqAKPiA+ID4gwqAJCS8qIFdlIHdhbnQgdG8ga2Vl cCB0aGUgZGlzcGxheSBydW5uaW5nIGZvciBhCj4gPiA+IGxpdHRsZQo+ID4gPiBiaXQsIHNpbmNl Cj4gPiA+IMKgCQnCoCogdGhlcmUncyBhbHdheXMgdGhlIHBvdGVudGlhbCB0aGUgZHJpdmVyIGlz bid0Cj4gPiA+IGFibGUgdG8ga2VlcAo+ID4gPiBAQCAtNTIyLDExICs0NzgsMTUgQEAgdGVzdF9k aXNwbGF5X2NyY19tdWx0aXBsZShkYXRhX3QgKmRhdGEsCj4gPiA+IHN0cnVjdAo+ID4gPiBjaGFt ZWxpdW1fcG9ydCAqcG9ydCkKPiA+ID4gwqAJCQkJCQnCoMKgwqAmY2FwdHVyZWRfZnJhCj4gPiA+ IG1lXwo+ID4gPiBjCj4gPiA+IG91bnQpOwo+ID4gPiDCoAo+ID4gPiDCoAkJaWd0X2RlYnVnKCJD YXB0dXJlZCAlZCBmcmFtZXNcbiIsCj4gPiA+IGNhcHR1cmVkX2ZyYW1lX2NvdW50KTsKPiA+ID4g Kwo+ID4gPiArCQlleHBlY3RlZF9jcmMgPQo+ID4gPiBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2Ny Y19yZXN1bHQoZmJfY3JjKTsKPiA+ID4gKwo+ID4gPiDCoAkJZm9yIChqID0gMDsgaiA8IGNhcHR1 cmVkX2ZyYW1lX2NvdW50OyBqKyspCj4gPiA+IMKgCQkJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNy Y1tqXSwKPiA+ID4gZXhwZWN0ZWRfY3JjKTsKPiA+ID4gKwo+ID4gPiArCQlmcmVlKGV4cGVjdGVk X2NyYyk7Cj4gPiA+IMKgCQlmcmVlKGNyYyk7Cj4gPiA+IMKgCj4gPiA+IC1uZXh0Ogo+ID4gPiDC oAkJZGlzYWJsZV9vdXRwdXQoZGF0YSwgcG9ydCwgb3V0cHV0KTsKPiA+ID4gwqAJCWlndF9yZW1v dmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZmIpOwo+ID4gPiDCoAl9Ci0tIApDaGVlcnMsCglMeXVkZQpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK