From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id A6B1E895B6 for ; Fri, 10 May 2019 08:55:40 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id n17so4465436edb.0 for ; Fri, 10 May 2019 01:55:40 -0700 (PDT) Date: Fri, 10 May 2019 10:55:36 +0200 From: Daniel Vetter Message-ID: <20190510085536.GK17751@phenom.ffwll.local> References: <20190508162906.20808-1-ville.syrjala@linux.intel.com> <20190510085351.GJ17751@phenom.ffwll.local> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190510085351.GJ17751@phenom.ffwll.local> Subject: Re: [igt-dev] [PATCH i-g-t v3] tests/kms_big_fb: Make sure huge fbs work correctly 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: Ville Syrjala Cc: igt-dev@lists.freedesktop.org List-ID: T24gRnJpLCBNYXkgMTAsIDIwMTkgYXQgMTA6NTM6NTFBTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBXZWQsIE1heSAwOCwgMjAxOSBhdCAwNzoyOTowNlBNICswMzAwLCBWaWxsZSBT eXJqYWxhIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbT4KPiA+IAo+ID4gQWRkIHZhcmlvdXMgdGVzdHMgdG8gZXhjZXJjaXNlIGh1 Z2UgZnJhbWVidWZmZXJzLiBGaXJzdCBzb21lIGJhc2ljCj4gPiBzYW5pdHkgY2hlY2tzIHRoYXQg dGhlIGtlcm5lbCBhY2NlcHRzL3JlamVjdHMgZ29vZC9iYWQgYWRkZmIyIGlvY3RscywKPiA+IGFu ZCBmaW5hbGx5IGFjdHVhbCBzY2Fub3V0IHRlc3RzIHRvIG1ha2Ugc3VyZSB3ZSBzY2FuIG91dCB0 aGUgY29ycmVjdAo+ID4gdGhpbmcgd2hlbiBwYW5uaW5nIGFyb3VuZCBpbnNpZGUgbGFyZ2UgZnJh bWVidWZmZXJzLgo+ID4gCj4gPiBUaGUgaW1wbGVtZW50YXRpb24gaXMgaTkxNSBzcGVjaWZpYyBm b3Igbm93IHNpbmNlIEkgY2hvc2UgdG8gdXNlCj4gPiByZW5kZXJjb3B5L2JsaXR0ZXIgd2hlbiBn ZW5lcmF0aW5nIHRoZSBmcmFtZWJ1ZmZlciBjb250ZW50cy4gVXNpbmcKPiA+IHRoZSBub3JtYWwg Y2Fpcm8gc3R1ZmYgd2FzIGp1c3QgdG9vIHNsb3cgd2hlbiBkZWFsaW5nIHdpdGggMUdpQisKPiA+ IGZyYW1lYnVmZmVycy4gSXQgc2hvdWxkbid0IGJlIHRvbyBoYXJkIHRvIHBsdWcgaW4gc29tZSBv dGhlciBtZWNoYW5pc21zCj4gPiBpZiBzb21lb25lIGVsc2Ugd2FudHMgdG8gcmV1c2UgdGhpcyB0 ZXN0Lgo+ID4gCj4gPiB2MjogQWRkIGlndF9yZXF1aXJlKGZvcm1hdCttb2QpIGZvciB0aGUgYWRk ZmIvb3ZlcmZsb3cgdGVzdHMKPiA+ICAgICBVbnNldCBwbGFuZSBmYiBhZnRlciBURVNUX09OTFkg ZmFpbAo+ID4gICAgIExpbWl0IG1heCBmYiB0byBhdCBtb3N0IDEvMiBSQU0gb3IgR1BVIGFkZHJl c3Mgc3BhY2UKPiA+ICAgICBUd2VhayBjb29yZHMgdG8gYXZvaWQgZmFpbHMgd2l0aCA2NGJwcCBs aW5lYXIgd2l0aCA0ayBzY3JlZW4KPiA+ICAgICBNYWtlIGNvb3JkcyBldmVuIGZvciA5MC8yNzAg cm90YXRlZCAxNmJwcAo+ID4gICAgIFN0b3JlIGJwcCBhcyB1aW50OF90IGluc3RlYWQgb2Ygd2Fz dGluZyBhbiBlbnRpcmUgY2hhcioKPiA+IHYzOiBBZGQgYmxpdHRlciBwYXRoIGZvciBnZW4zIChy ZW5kZXIgZW5naW5lIGlzIG5vdCBjYXBhYmxlIG9mCj4gPiAgICAgaGFuZGxpbmcgYmlnIGZicyku Cj4gPiAgICAgU2V0IGZlbmNlIHRpbGluZyBvbiBnZW4yLzMgaW4gcmF3IGFkZGZiIHRlc3RzLgo+ ID4gICAgIERlYWwgd2l0aCB3ZWFrIG1heCBmZW5jZSBzdHJpZGUgb24gZ2VuMy4KPiA+ICAgICBE b24ndCB0cnkgdG8gdXNlIHJvdGF0aW9uIHdoZW4gdGhlIHByb3AgaXNuJ3QgcHJlc2VudC4KPiA+ ICAgICBTa2lwIDkwLzI3MCB0ZXN0IGZvciBnZW40IChubyBhdG9taWMgb24gdGhvc2UgeWV0IHNv IHdlCj4gPiAgICAgY2FuJ3QgbmVhdGx5IGNoZWNrIHdoYXQncyBzdXBwb3J0ZWQpLgo+ID4gICAg IEtlcm5lbCByZXN0cmljdHMgc2Nhbm91dCB0byBtYXBwYWJsZSBwb3J0aW9uIG9mIGdndHQgb24K PiA+ICAgICBnbWNoIHBsYXRmb3Jtcywgc28gY2hlY2sgaXRzIHNpemUgYXMgd2VsbAo+ID4gICAg IFVzZSB0aGUgY29ycmVjdCBmYiBmb3IgdGhlIGxlZ2FjeSBzZXRjcnRjCj4gPiAKPiA+IFNpZ25l ZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ Cj4gPiAtLS0KPiA+ICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsKPiA+ICB0ZXN0cy9r bXNfYmlnX2ZiLmMgICAgIHwgNjY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCj4gPiAgdGVzdHMvbWVzb24uYnVpbGQgICAgICB8ICAgMSArCj4gPiAgMyBmaWxlcyBj aGFuZ2VkLCA2NjggaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9r bXNfYmlnX2ZiLmMKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiBpbmRleCA3ZjkyMWY2YzU5ODguLjJkNWM5Mjll MzJmYyAxMDA2NDQKPiA+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+ICsrKyBiL3Rl c3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+IEBAIC0yNyw2ICsyNyw3IEBAIFRFU1RTX3Byb2dzID0g XAo+ID4gIAlrbXNfYXRvbWljX2ludGVycnVwdGlibGUgXAo+ID4gIAlrbXNfYXRvbWljX3RyYW5z aXRpb24gXAo+ID4gIAlrbXNfYXZhaWxhYmxlX21vZGVzX2NyYyBcCj4gPiArCWttc19iaWdfZmIg XAo+ID4gIAlrbXNfYnVzeSBcCj4gPiAgCWttc19jY3MgXAo+ID4gIAlrbXNfY29sb3IgXAo+ID4g ZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19iaWdfZmIuYyBiL3Rlc3RzL2ttc19iaWdfZmIuYwo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNTIzNTk1NGUyZDhj Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi90ZXN0cy9rbXNfYmlnX2ZiLmMKPiA+IEBAIC0w LDAgKzEsNjY2IEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jw b3JhdGlvbgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK PiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiArICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAo+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2Fy ZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gPiArICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCj4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiA+ ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORwo+ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiA+ICsgKiBJ TiBUSEUgU09GVFdBUkUuCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgImlndC5oIgo+ID4g KyNpbmNsdWRlIDxlcnJuby5oPgo+ID4gKyNpbmNsdWRlIDxzdGRib29sLmg+Cj4gPiArI2luY2x1 ZGUgPHN0ZGlvLmg+Cj4gPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ID4gKwo+ID4gK0lHVF9URVNU X0RFU0NSSVBUSU9OKCJUZXN0IGJpZyBmcmFtZWJ1ZmZlcnMiKTsKPiA+ICsKPiA+ICt0eXBlZGVm IHN0cnVjdCB7Cj4gPiArCWludCBkcm1fZmQ7Cj4gPiArCXVpbnQzMl90IGRldmlkOwo+ID4gKwlp Z3RfZGlzcGxheV90IGRpc3BsYXk7Cj4gPiArCWVudW0gcGlwZSBwaXBlOwo+ID4gKwlpZ3Rfb3V0 cHV0X3QgKm91dHB1dDsKPiA+ICsJaWd0X3BsYW5lX3QgKnBsYW5lOwo+ID4gKwlpZ3RfcGlwZV9j cmNfdCAqcGlwZV9jcmM7Cj4gPiArCXN0cnVjdCBpZ3RfZmIgc21hbGxfZmIsIGJpZ19mYjsKPiA+ ICsJdWludDMyX3QgZm9ybWF0Owo+ID4gKwl1aW50NjRfdCBtb2RpZmllcjsKPiA+ICsJaW50IHdp ZHRoLCBoZWlnaHQ7Cj4gPiArCWlndF9yb3RhdGlvbl90IHJvdGF0aW9uOwo+ID4gKwlpbnQgbWF4 X2ZiX3dpZHRoLCBtYXhfZmJfaGVpZ2h0Owo+ID4gKwl1aW50NjRfdCByYW1fc2l6ZSwgYXBlcl9z aXplLCBtYXBwYWJsZV9zaXplOwo+ID4gKwlpZ3RfcmVuZGVyX2NvcHlmdW5jX3QgcmVuZGVyX2Nv cHk7Cj4gPiArCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKPiA+ICsJc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaDsKPiA+ICt9IGRhdGFfdDsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBp bml0X2J1ZihkYXRhX3QgKmRhdGEsCj4gPiArCQkgICAgIHN0cnVjdCBpZ3RfYnVmICpidWYsCj4g PiArCQkgICAgIGNvbnN0IHN0cnVjdCBpZ3RfZmIgKmZiLAo+ID4gKwkJICAgICBjb25zdCBjaGFy ICpuYW1lKQo+ID4gK3sKPiA+ICsJaWd0X2Fzc2VydF9lcShmYi0+b2Zmc2V0c1swXSwgMCk7Cj4g PiArCj4gPiArCWJ1Zi0+Ym8gPSBnZW1faGFuZGxlX3RvX2xpYmRybV9ibyhkYXRhLT5idWZtZ3Is IGRhdGEtPmRybV9mZCwKPiA+ICsJCQkJCSAgbmFtZSwgZmItPmdlbV9oYW5kbGUpOwo+ID4gKwli dWYtPnRpbGluZyA9IGlndF9mYl9tb2RfdG9fdGlsaW5nKGZiLT5tb2RpZmllcik7Cj4gPiArCWJ1 Zi0+c3RyaWRlID0gZmItPnN0cmlkZXNbMF07Cj4gPiArCWJ1Zi0+YnBwID0gZmItPnBsYW5lX2Jw cFswXTsKPiA+ICsJYnVmLT5zaXplID0gZmItPnNpemU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIGZpbmlfYnVmKHN0cnVjdCBpZ3RfYnVmICpidWYpCj4gPiArewo+ID4gKwlkcm1faW50 ZWxfYm9fdW5yZWZlcmVuY2UoYnVmLT5ibyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IGNvcHlfcGF0dGVybihkYXRhX3QgKmRhdGEsCj4gPiArCQkJIHN0cnVjdCBpZ3RfZmIgKmRzdF9m YiwgaW50IGR4LCBpbnQgZHksCj4gPiArCQkJIHN0cnVjdCBpZ3RfZmIgKnNyY19mYiwgaW50IHN4 LCBpbnQgc3ksCj4gPiArCQkJIGludCB3LCBpbnQgaCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBpZ3Rf YnVmIHNyYyA9IHt9LCBkc3QgPSB7fTsKPiA+ICsKPiA+ICsJaW5pdF9idWYoZGF0YSwgJnNyYywg c3JjX2ZiLCAiYmlnIGZiIHNyYyIpOwo+ID4gKwlpbml0X2J1ZihkYXRhLCAmZHN0LCBkc3RfZmIs ICJiaWcgZmIgZHN0Iik7Cj4gPiArCj4gPiArCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwg ZHN0X2ZiLT5nZW1faGFuZGxlLAo+ID4gKwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5 MTVfR0VNX0RPTUFJTl9HVFQpOwo+ID4gKwlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIHNy Y19mYi0+Z2VtX2hhbmRsZSwKPiA+ICsJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsK PiA+ICsKPiAKPiBNYXliZSBhIGNvbW1lbnQgaGVyZSB0aGF0IHdlIHJlbHkgb24gdGhlIGtlcm5l bCBub3QgYnVtcGluZyB0aGUgZmIgbGltaXRzCj4gcGFzdCB3aGF0IHdlIGNhbiByZW5kZXIgaW50 bz8KPiAKPiA+ICsJaWYgKGRhdGEtPnJlbmRlcl9jb3B5KSB7Cj4gPiArCQlkYXRhLT5yZW5kZXJf Y29weShkYXRhLT5iYXRjaCwgTlVMTCwgJnNyYywgc3gsIHN5LCB3LCBoLCAmZHN0LCBkeCwgZHkp Owo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJdyA9IG1pbih3LCBzcmNfZmItPndpZHRoIC0gc3gpOwo+ ID4gKwkJdyA9IG1pbih3LCBkc3RfZmItPndpZHRoIC0gZHgpOwo+ID4gKwo+ID4gKwkJaCA9IG1p bihoLCBzcmNfZmItPmhlaWdodCAtIHN5KTsKPiA+ICsJCWggPSBtaW4oaCwgZHN0X2ZiLT5oZWln aHQgLSBkeSk7Cj4gPiArCj4gPiArCQlpbnRlbF9ibHRfY29weShkYXRhLT5iYXRjaCwgc3JjLmJv LCBzeCwgc3ksIHNyYy5zdHJpZGUsCj4gPiArCQkJICAgICAgIGRzdC5ibywgZHgsIGR5LCBkc3Qu c3RyaWRlLCB3LCBoLCBkc3QuYnBwKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlmaW5pX2J1ZigmZHN0 KTsKPiA+ICsJZmluaV9idWYoJnNyYyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGdl bmVyYXRlX3BhdHRlcm4oZGF0YV90ICpkYXRhLAo+ID4gKwkJCSAgICAgc3RydWN0IGlndF9mYiAq ZmIsCj4gPiArCQkJICAgICBpbnQgdywgaW50IGgpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaWd0X2Zi IHBhdF9mYjsKPiA+ICsKPiA+ICsJaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRhdGEtPmRybV9mZCwg dywgaCwKPiA+ICsJCQkgICAgICBkYXRhLT5mb3JtYXQsIGRhdGEtPm1vZGlmaWVyLAo+ID4gKwkJ CSAgICAgICZwYXRfZmIpOwo+ID4gKwo+ID4gKwlmb3IgKGludCB5ID0gMDsgeSA8IGZiLT5oZWln aHQ7IHkgKz0gaCkgewo+ID4gKwkJZm9yIChpbnQgeCA9IDA7IHggPCBmYi0+d2lkdGg7IHggKz0g dykgewo+ID4gKwkJCWNvcHlfcGF0dGVybihkYXRhLCBmYiwgeCwgeSwKPiA+ICsJCQkJICAgICAm cGF0X2ZiLCAwLCAwLAo+ID4gKwkJCQkgICAgIHBhdF9mYi53aWR0aCwgcGF0X2ZiLmhlaWdodCk7 Cj4gPiArCQkJdysrOwo+ID4gKwkJCWgrKzsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlp Z3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJnBhdF9mYik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBib29sIHNpemVfb2soZGF0YV90ICpkYXRhLCB1aW50NjRfdCBzaXplKQo+ID4gK3sKPiA+ ICsJLyoKPiA+ICsJICogVGhlIGtlcm5lbCBsaW1pdHMgc2Nhbm91dCB0byB0aGUKPiA+ICsJICog bWFwcGFibGUgcG9ydGlvbiBvZiBnZ3R0IG9uIGdtY2ggcGxhdGZvcm1zLgo+ID4gKwkgKi8KPiA+ ICsJaWYgKChpbnRlbF9nZW4oZGF0YS0+ZGV2aWQpIDwgNSB8fAo+ID4gKwkgICAgIElTX1ZBTExF WVZJRVcoZGF0YS0+ZGV2aWQpIHx8Cj4gPiArCSAgICAgSVNfQ0hFUlJZVklFVyhkYXRhLT5kZXZp ZCkpICYmCj4gPiArCSAgICBzaXplID4gZGF0YS0+bWFwcGFibGVfc2l6ZSAvIDIpCj4gPiArCQly ZXR1cm4gZmFsc2U7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIExpbWl0IHRoZSBiaWcgZmIgc2l6 ZSB0byBhdCBtb3N0IGhhbGYgdGhlIFJBTSBvciBoYWxmCj4gPiArCSAqIHRoZSBhcGVydHVyZSBz aXplLiBDb3VsZCBnbyBhIGJpdCBoaWdoZXIgSSBzdXBwb3NlIHNpbmNlCj4gPiArCSAqIHdlIHNo b3VsZG4ndCBuZWVkIG1vcmUgdGhhbiBvbmUgYmlnIGZiIGF0IGEgdGltZS4KPiA+ICsJICovCj4g PiArCWlmIChzaXplID4gZGF0YS0+cmFtX3NpemUgLyAyIHx8IHNpemUgPiBkYXRhLT5hcGVyX3Np emUgLyAyKQo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gKwo+ID4gKwlyZXR1cm4gdHJ1ZTsKPiA+ ICt9Cj4gPiArCj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWF4X2ZiX3NpemUoZGF0YV90ICpkYXRh LCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCwKPiA+ICsJCQl1aW50MzJfdCBmb3JtYXQsIHVpbnQ2 NF90IG1vZGlmaWVyKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgaW50IHN0cmlkZTsKPiA+ICsJdWlu dDY0X3Qgc2l6ZTsKPiA+ICsJaW50IGkgPSAwOwo+ID4gKwo+ID4gKwkqd2lkdGggPSBkYXRhLT5t YXhfZmJfd2lkdGg7Cj4gPiArCSpoZWlnaHQgPSBkYXRhLT5tYXhfZmJfaGVpZ2h0Owo+ID4gKwo+ ID4gKwkvKiBtYXggZmVuY2Ugc3RyaWRlIGlzIG9ubHkgOGsgYnl0ZXMgb24gZ2VuMyAqLwo+ID4g KwlpZiAoaW50ZWxfZ2VuKGRhdGEtPmRldmlkKSA8IDQgJiYKPiA+ICsJICAgIGZvcm1hdCA9PSBE Uk1fRk9STUFUX1hSR0I4ODg4KQo+ID4gKwkJKndpZHRoID0gbWluKCp3aWR0aCwgODE5MiAvIDQp Owo+ID4gKwo+ID4gKwlpZ3RfY2FsY19mYl9zaXplKGRhdGEtPmRybV9mZCwgKndpZHRoLCAqaGVp Z2h0LAo+ID4gKwkJCSBmb3JtYXQsIG1vZGlmaWVyLCAmc2l6ZSwgJnN0cmlkZSk7Cj4gPiArCj4g PiArCXdoaWxlICghc2l6ZV9vayhkYXRhLCBzaXplKSkgewo+ID4gKwkJaWYgKGkrKyAmIDEpCj4g PiArCQkJKndpZHRoID4+PSAxOwo+ID4gKwkJZWxzZQo+ID4gKwkJCSpoZWlnaHQgPj49IDE7Cj4g PiArCj4gPiArCQlpZ3RfY2FsY19mYl9zaXplKGRhdGEtPmRybV9mZCwgKndpZHRoLCAqaGVpZ2h0 LAo+ID4gKwkJCQkgZm9ybWF0LCBtb2RpZmllciwgJnNpemUsICZzdHJpZGUpOwo+ID4gKwl9Cj4g PiArCj4gPiArCWlndF9pbmZvKCJNYXggdXNhYmxlIGZyYW1lYnVmZmVyIHNpemUgZm9yIGZvcm1h dCAiSUdUX0ZPUk1BVF9GTVQiIC8gbW9kaWZpZXIgMHglIlBSSXg2NCI6ICVkeCVkXG4iLAo+ID4g KwkJIElHVF9GT1JNQVRfQVJHUyhmb3JtYXQpLCBtb2RpZmllciwKPiA+ICsJCSAqd2lkdGgsICpo ZWlnaHQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbCB0ZXN0X3BsYW5lKGRhdGFfdCAq ZGF0YSkKPiA+ICt7Cj4gPiArCWlndF9wbGFuZV90ICpwbGFuZSA9IGRhdGEtPnBsYW5lOwo+ID4g KwlzdHJ1Y3QgaWd0X2ZiICpzbWFsbF9mYiA9ICZkYXRhLT5zbWFsbF9mYjsKPiA+ICsJc3RydWN0 IGlndF9mYiAqYmlnX2ZiID0gJmRhdGEtPmJpZ19mYjsKPiA+ICsJaW50IHcgPSBiaWdfZmItPndp ZHRoIC0gc21hbGxfZmItPndpZHRoOwo+ID4gKwlpbnQgaCA9IGJpZ19mYi0+aGVpZ2h0IC0gc21h bGxfZmItPmhlaWdodDsKPiA+ICsJc3RydWN0IHsKPiA+ICsJCWludCB4LCB5Owo+ID4gKwl9IGNv b3Jkc1tdID0gewo+ID4gKwkJLyogYnVuY2ggb2YgY29vcmRpbmF0ZXMgcHVsbGVkIG91dCBvZiB0 aGluIGFpciAqLwo+ID4gKwkJeyAwLCAwLCB9LAo+ID4gKwkJeyB3ICogNCAvIDcsIGggLyA1LCB9 LAo+ID4gKwkJeyB3ICogMyAvIDcsIGggLyAzLCB9LAo+ID4gKwkJeyB3IC8gMiwgaCAvIDIsIH0s Cj4gPiArCQl7IHcgLyAzLCBoICogMyAvIDQsIH0sCj4gPiArCQl7IHcsIGgsIH0sCgpBc2lkZTog Tm90IHN1cmUgdGhpcyBpcyB0aGUgc21hcnRlc3Qgb2Zmc2V0IHNlbGVjdGlvbiwgYnV0IGl0IGhh cyBzb21lCmZ1bm55IG51bWJlcnMgYW5kIEkgaG9wZSBvdXIgdmFyaWF0aW9uIGFjcm9zcyBkaWZm ZXJlbnQgc2NyZWVuJ3Mgc2l6ZXMgaW4KQ0kgaXMgZ29vZCBlbm91Z2ggdG8gaGl0IGFsbCB0aGUg Y29ybmVycyB3ZSBjYXJlIGFib3V0LiBUcnlpbmcgdG8gYmUKc21hcnRlciBoZXJlIHByb2JhYmx5 IG5vIGdvb2QgcmVhbGx5LgotRGFuaWVsCgoKPiA+ICsJfTsKPiA+ICsKPiA+ICsJaWYgKCFpZ3Rf cGxhbmVfaGFzX2Zvcm1hdF9tb2QocGxhbmUsIGRhdGEtPmZvcm1hdCwgZGF0YS0+bW9kaWZpZXIp KQo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gKwo+ID4gKwlpZiAoZGF0YS0+cm90YXRpb24gIT0g SUdUX1JPVEFUSU9OXzAgJiYKPiA+ICsJICAgICFpZ3RfcGxhbmVfaGFzX3Byb3AocGxhbmUsIElH VF9QTEFORV9ST1RBVElPTikpCj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiArCj4gPiArCS8qIEZJ WE1FIG5lZWQgYXRvbWljIG9uIGk5NjUvZzR4ICovCj4gPiArCWlmIChkYXRhLT5yb3RhdGlvbiAh PSBJR1RfUk9UQVRJT05fMCAmJgo+ID4gKwkgICAgZGF0YS0+cm90YXRpb24gIT0gSUdUX1JPVEFU SU9OXzE4MCAmJgo+ID4gKwkgICAgIWRhdGEtPmRpc3BsYXkuaXNfYXRvbWljKQo+ID4gKwkJcmV0 dXJuIGZhbHNlOwo+ID4gKwo+ID4gKwlpZiAoaWd0X3BsYW5lX2hhc19wcm9wKHBsYW5lLCBJR1Rf UExBTkVfUk9UQVRJT04pKQo+ID4gKwkJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgZGF0 YS0+cm90YXRpb24pOwo+ID4gKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCAwLCAwKTsK PiA+ICsKPiA+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvb3Jkcyk7IGkrKykg ewo+ID4gKwkJaWd0X2NyY190IHNtYWxsX2NyYywgYmlnX2NyYzsKPiA+ICsJCWludCB4ID0gY29v cmRzW2ldLng7Cj4gPiArCQlpbnQgeSA9IGNvb3Jkc1tpXS55Owo+ID4gKwo+ID4gKwkJLyogSGFy ZHdhcmUgbGltaXRhdGlvbiAqLwo+ID4gKwkJaWYgKGRhdGEtPmZvcm1hdCA9PSBEUk1fRk9STUFU X1JHQjU2NSAmJgo+ID4gKwkJICAgIChkYXRhLT5yb3RhdGlvbiA9PSBJR1RfUk9UQVRJT05fOTAg fHwKPiA+ICsJCSAgICAgZGF0YS0+cm90YXRpb24gPT0gSUdUX1JPVEFUSU9OXzI3MCkpIHsKPiA+ ICsJCQl4ICY9IH4xOwo+ID4gKwkJCXkgJj0gfjE7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQkvKgo+ ID4gKwkJICogTWFrZSBhIDE6MSBjb3B5IG9mIHRoZSBkZXNpcmVkIHBhcnQgb2YgdGhlIGJpZyBm Ygo+ID4gKwkJICogcmF0aGVyIHRoYW4gdHJ5IHRvIHJlbmRlciB0aGUgc2FtZSBwYXR0ZXJuICh0 cmFuc2xhdGVkCj4gPiArCQkgKiBhY2NvcmRpbmx5KSBhZ2FpbiB2aWEgY2Fpcm8uIFNvbWV0aGlu ZyBpbiBjYWlybydzCj4gPiArCQkgKiByZW5kZXJpbmcgcGlwZWxpbmUgaW50cm9kdWNlcyBzbGln aHQgZGlmZmVyZW5jZXMgaW50bwo+ID4gKwkJICogdGhlIHJlc3VsdCBpZiB3ZSB0cnkgdGhhdCwg YW5kIHNvIHRoZSBjcmMgd2lsbCBub3QgbWF0Y2guCj4gPiArCQkgKi8KPiA+ICsJCWNvcHlfcGF0 dGVybihkYXRhLCBzbWFsbF9mYiwgMCwgMCwgYmlnX2ZiLCB4LCB5LAo+ID4gKwkJCSAgICAgc21h bGxfZmItPndpZHRoLCBzbWFsbF9mYi0+aGVpZ2h0KTsKPiA+ICsKPiA+ICsJCWlndF9wbGFuZV9z ZXRfZmIocGxhbmUsIHNtYWxsX2ZiKTsKPiA+ICsJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwg ZGF0YS0+d2lkdGgsIGRhdGEtPmhlaWdodCk7Cj4gPiArCj4gPiArCQkvKgo+ID4gKwkJICogVHJ5 IHRvIGNoZWNrIHRoYXQgdGhlIHJvdGF0aW9uK2Zvcm1hdCttb2RpZmllcgo+ID4gKwkJICogY29t Ym8gaXMgc3VwcG9ydGVkLgo+ID4gKwkJICovCj4gPiArCQlpZiAoaSA9PSAwICYmIGRhdGEtPmRp c3BsYXkuaXNfYXRvbWljICYmCj4gPiArCQkgICAgaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9t aWMoJmRhdGEtPmRpc3BsYXksCj4gPiArCQkJCQkJICBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZ LAo+ID4gKwkJCQkJCSAgTlVMTCkgIT0gMCkgewo+ID4gKwkJCWlmIChpZ3RfcGxhbmVfaGFzX3By b3AocGxhbmUsIElHVF9QTEFORV9ST1RBVElPTikpCj4gPiArCQkJCWlndF9wbGFuZV9zZXRfcm90 YXRpb24ocGxhbmUsIElHVF9ST1RBVElPTl8wKTsKPiA+ICsJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBs YW5lLCBOVUxMKTsKPiA+ICsJCQlpZ3Rfc2tpcCgidW5zdXBwb3J0ZWQgcGxhbmUgY29uZmlndXJh dGlvblxuIik7Cj4gCj4gVGhpcyBpcyBraW5kYSB1bmNvb2wgaWYgd2UgaGF2ZSBhIHBsYW5lIGxh dGVyIG9uIHRoYXQgcHJvdm9rZXMgYSBza2lwLCBidXQKPiB3ZSd2ZSBhbHJlYWR5IHJ1biBzb21l IHRlc3RzLiBJdCdzIGEgZ2FwIGluIGlndCBpbmZyYXN0cnVjdHVyZSB0aGF0IEkgbmVlZAo+IHRv IGZpeCBldmVudHVhbGx5LCBidXQgbWVhbndoaWxlIHlvdSBuZWVkIHRvIGNvdW50IGhvdyBtYW55 IHNraXBzIHlvdQo+IGhhdmUsIGFuZCBvbmx5IHNraXAgYXQgdGhlIHZlcnkgZW5kIG9mIHlvdXIg c3VidGVzdCBpZiB5b3Ugc2tpcHBlZCBhbGwKPiBwb3NzaWJsZSBjb21iaW5hdGlvbnMgeW91IG1p Z2h0IHdhbnQgdG8gdGVzdC4KPiAKPiBJIHRoaW5rIGEgcmV0dXJuIGZhbHNlIGhlcmUgYW5kIGNo YW5naW5nIHRoZSBoaWdoZXIgbGV2ZWwgbG9naWMgdG8KPiBpZ3Rfc2tpcCBpZiB5b3UgZGlkbid0 IGJyZWFrIG91dCBvZiB0aGUgbG9vcCBzaG91bGQgZG8gdGhlIHRyaWNrLgo+IAo+ID4gKwkJfQo+ ID4gKwo+ID4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0+ZGlz cGxheS5pc19hdG9taWMgPwo+ID4gKwkJCQkgICAgQ09NTUlUX0FUT01JQyA6IENPTU1JVF9VTklW RVJTQUwpOwo+ID4gKwo+ID4gKwo+ID4gKwkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEt PnBpcGVfY3JjLCAmc21hbGxfY3JjKTsKPiA+ICsKPiA+ICsJCWlndF9wbGFuZV9zZXRfZmIocGxh bmUsIGJpZ19mYik7Cj4gPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGJpZ19mYiwgcGxhbmUsIHgs IHkpOwo+ID4gKwkJaWd0X2ZiX3NldF9zaXplKGJpZ19mYiwgcGxhbmUsIHNtYWxsX2ZiLT53aWR0 aCwgc21hbGxfZmItPmhlaWdodCk7Cj4gPiArCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGRh dGEtPndpZHRoLCBkYXRhLT5oZWlnaHQpOwo+ID4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0 YS0+ZGlzcGxheSwgZGF0YS0+ZGlzcGxheS5pc19hdG9taWMgPwo+ID4gKwkJCQkgICAgQ09NTUlU X0FUT01JQyA6IENPTU1JVF9VTklWRVJTQUwpOwo+ID4gKwo+ID4gKwkJaWd0X3BpcGVfY3JjX2Nv bGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmYmlnX2NyYyk7Cj4gPiArCj4gPiArCQlpZ3RfcGxh bmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKPiA+ICsKPiA+ICsJCWlndF9hc3NlcnRfY3JjX2VxdWFs KCZiaWdfY3JjLCAmc21hbGxfY3JjKTsKPiA+ICsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4g dHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgdGVzdF9waXBlKGRhdGFfdCAqZGF0 YSkKPiA+ICt7Cj4gPiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKPiA+ICsJaWd0X3BsYW5lX3Qg KnByaW1hcnk7Cj4gPiArCWludCB3aWR0aCwgaGVpZ2h0Owo+ID4gKwlib29sIHJldCA9IGZhbHNl Owo+ID4gKwo+ID4gKwltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShkYXRhLT5vdXRwdXQpOwo+ ID4gKwo+ID4gKwlkYXRhLT53aWR0aCA9IG1vZGUtPmhkaXNwbGF5Owo+ID4gKwlkYXRhLT5oZWln aHQgPSBtb2RlLT52ZGlzcGxheTsKPiA+ICsKPiA+ICsJd2lkdGggPSBtb2RlLT5oZGlzcGxheTsK PiA+ICsJaGVpZ2h0ID0gbW9kZS0+dmRpc3BsYXk7Cj4gPiArCWlmIChkYXRhLT5yb3RhdGlvbiA9 PSBJR1RfUk9UQVRJT05fOTAgfHwKPiA+ICsJICAgIGRhdGEtPnJvdGF0aW9uID09IElHVF9ST1RB VElPTl8yNzApCj4gPiArCQlpZ3Rfc3dhcCh3aWR0aCwgaGVpZ2h0KTsKPiA+ICsKPiA+ICsJaWd0 X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsIHdpZHRoLCBoZWlnaHQsCj4gPiArCQkJICAg IGRhdGEtPmZvcm1hdCwgZGF0YS0+bW9kaWZpZXIsCj4gPiArCQkJICAgIDAsIDEsIDAsICZkYXRh LT5zbWFsbF9mYik7Cj4gPiArCj4gPiArCWlndF9vdXRwdXRfc2V0X3BpcGUoZGF0YS0+b3V0cHV0 LCBkYXRhLT5waXBlKTsKPiA+ICsKPiA+ICsJcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5l X3R5cGUoZGF0YS0+b3V0cHV0LCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiA+ICsJaWd0X3Bs YW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKPiA+ICsKPiA+ICsJaWYgKCFkYXRhLT5kaXNwbGF5 LmlzX2F0b21pYykgewo+ID4gKwkJc3RydWN0IGlndF9mYiBmYjsKPiA+ICsKPiA+ICsJCWlndF9j cmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4g PiArCQkJICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgRFJNX0ZPUk1BVF9NT0RfTElORUFSLAo+ ID4gKwkJCSAgICAgICZmYik7Cj4gPiArCj4gPiArCQkvKiBsZWdhY3kgc2V0Y3J0YyBuZWVkcyBh biBmYiAqLwo+ID4gKwkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZmIpOwo+ID4gKwkJaWd0 X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX0xFR0FDWSk7Cj4gPiArCj4g PiArCQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOwo+ID4gKwkJaWd0X2Rpc3BsYXlf Y29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7Cj4gPiArCj4gPiArCQlp Z3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmZiKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZ3Rf ZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5kaXNwbGF5LmlzX2F0b21pYyA/ Cj4gPiArCQkJICAgIENPTU1JVF9BVE9NSUMgOiBDT01NSVRfVU5JVkVSU0FMKTsKPiA+ICsKPiA+ ICsJZGF0YS0+cGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmRybV9mZCwgZGF0YS0+ cGlwZSwKPiA+ICsJCQkJCSAgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOwo+ID4gKwo+ID4g Kwlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5waXBlLCBkYXRh LT5wbGFuZSkgewo+ID4gKwkJcmV0ID0gdGVzdF9wbGFuZShkYXRhKTsKPiA+ICsJCWlmIChyZXQp Cj4gPiArCQkJYnJlYWs7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWd0X3BpcGVfY3JjX2ZyZWUoZGF0 YS0+cGlwZV9jcmMpOwo+ID4gKwo+ID4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKGRhdGEtPm91dHB1 dCwgUElQRV9BTlkpOwo+ID4gKwlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBk YXRhLT5kaXNwbGF5LmlzX2F0b21pYyA/Cj4gPiArCQkJICAgIENPTU1JVF9BVE9NSUMgOiBDT01N SVRfVU5JVkVSU0FMKTsKPiA+ICsKPiA+ICsJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZk YXRhLT5zbWFsbF9mYik7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIHRlc3Rfc2Nhbm91dChkYXRhX3QgKmRhdGEpCj4gPiArewo+ID4gKwlmb3Jf ZWFjaF9waXBlX3dpdGhfdmFsaWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5waXBlLCBk YXRhLT5vdXRwdXQpIHsKPiA+ICsJCWlmICh0ZXN0X3BpcGUoZGF0YSkpCj4gPiArCQkJcmV0dXJu Owo+ID4gKwl9Cj4gPiArCj4gPiArCWlndF9za2lwKCJubyB2YWxpZCBjcnRjL2Nvbm5lY3RvciBj b21iaW5hdGlvbnMgZm91bmRcbiIpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBwcmVw X2ZiKGRhdGFfdCAqZGF0YSkKPiA+ICt7Cj4gPiArCWludCB3aWR0aCwgaGVpZ2h0Owo+ID4gKwo+ ID4gKwlpZiAoZGF0YS0+YmlnX2ZiLmZiX2lkKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlt YXhfZmJfc2l6ZShkYXRhLCAmd2lkdGgsICZoZWlnaHQsCj4gPiArCQkgICAgZGF0YS0+Zm9ybWF0 LCBkYXRhLT5tb2RpZmllcik7Cj4gPiArCj4gPiArCWlndF9jcmVhdGVfZmIoZGF0YS0+ZHJtX2Zk LCB3aWR0aCwgaGVpZ2h0LAo+ID4gKwkJICAgICAgZGF0YS0+Zm9ybWF0LCBkYXRhLT5tb2RpZmll ciwKPiA+ICsJCSAgICAgICZkYXRhLT5iaWdfZmIpOwo+ID4gKwo+ID4gKwlnZW5lcmF0ZV9wYXR0 ZXJuKGRhdGEsICZkYXRhLT5iaWdfZmIsIDY0MCwgNDgwKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQgY2xlYW51cF9mYihkYXRhX3QgKmRhdGEpCj4gPiArewo+ID4gKwlpZ3RfcmVtb3Zl X2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPmJpZ19mYik7Cj4gPiArCWRhdGEtPmJpZ19mYi5mYl9p ZCA9IDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArdGVzdF9zaXplX292ZXJm bG93KGRhdGFfdCAqZGF0YSkKPiA+ICt7Cj4gPiArCXVpbnQzMl90IGZiX2lkOwo+ID4gKwl1aW50 MzJfdCBibzsKPiA+ICsJdWludDMyX3Qgb2Zmc2V0c1s0XSA9IHt9Owo+ID4gKwl1aW50MzJfdCBz dHJpZGVzWzRdID0geyAyNTYqMTAyNCwgfTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJaWd0 X3JlcXVpcmUoaWd0X2Rpc3BsYXlfaGFzX2Zvcm1hdF9tb2QoJmRhdGEtPmRpc3BsYXksCj4gPiAr CQkJCQkgICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiA+ICsJCQkJCSAgICAgICBkYXRhLT5t b2RpZmllcikpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBUcnkgdG8gaGl0IGEgc3BlY2lmaWMg aW50ZWdlciBvdmVyZmxvdyBpbiBpOTE1IGZiIHNpemUKPiA+ICsJICogY2FsY3VsYXRpb25zLiAy NTZrICogMTZrID09IDE8PDMyIHdoaWNoIGlzIGNoZWNrZWQKPiA+ICsJICogYWdhaW5zdCB0aGUg Ym8gc2l6ZS4gVGhlIGNoZWNrIHNob3VsZCBmYWlsIG9uIGFjY291bnQKPiA+ICsJICogb2YgdGhl IGJvIGJlaW5nIHNtYWxsZXIsIGJ1dCBkdWUgdG8gdGhlIG92ZXJmbG93IHRoZQo+ID4gKwkgKiBj b21wdXRlZCBmYiBzaXplIGlzIDAgYW5kIHRodXMgdGhlIGNoZWNrIG5ldmVyIHRyaXBzLgo+ID4g KwkgKi8KPiA+ICsJaWd0X3JlcXVpcmUoZGF0YS0+bWF4X2ZiX3dpZHRoID49IDE2MzgzICYmCj4g PiArCQkgICAgZGF0YS0+bWF4X2ZiX2hlaWdodCA+PSAxNjM4Myk7Cj4gPiArCj4gPiArCWJvID0g Z2VtX2NyZWF0ZShkYXRhLT5kcm1fZmQsICgxVUxMIDw8IDMyKSAtIDQwOTYpOwo+ID4gKwlpZ3Rf cmVxdWlyZShibyk7Cj4gPiArCj4gPiArCXJldCA9IF9fa21zX2FkZGZiKGRhdGEtPmRybV9mZCwg Ym8sCj4gPiArCQkJICAxNjM4MywgMTYzODMsCj4gPiArCQkJICBEUk1fRk9STUFUX1hSR0I4ODg4 LAo+ID4gKwkJCSAgZGF0YS0+bW9kaWZpZXIsCj4gPiArCQkJICBzdHJpZGVzLCBvZmZzZXRzLCAx LAo+ID4gKwkJCSAgRFJNX01PREVfRkJfTU9ESUZJRVJTLCAmZmJfaWQpOwo+ID4gKwo+ID4gKwlp Z3RfYXNzZXJ0X25lcShyZXQsIDApOwo+ID4gKwo+ID4gKwlnZW1fY2xvc2UoZGF0YS0+ZHJtX2Zk LCBibyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArdGVzdF9zaXplX29mZnNl dF9vdmVyZmxvdyhkYXRhX3QgKmRhdGEpCj4gPiArewo+ID4gKwl1aW50MzJfdCBmYl9pZDsKPiA+ ICsJdWludDMyX3QgYm87Cj4gPiArCXVpbnQzMl90IG9mZnNldHNbNF0gPSB7fTsKPiA+ICsJdWlu dDMyX3Qgc3RyaWRlc1s0XSA9IHsgODE5MiwgfTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJ aWd0X3JlcXVpcmUoaWd0X2Rpc3BsYXlfaGFzX2Zvcm1hdF9tb2QoJmRhdGEtPmRpc3BsYXksCj4g PiArCQkJCQkgICAgICAgRFJNX0ZPUk1BVF9OVjEyLAo+ID4gKwkJCQkJICAgICAgIGRhdGEtPm1v ZGlmaWVyKSk7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFRyeSB0byBhIHNwZWNpZmljIGludGVn ZXIgb3ZlcmZsb3cgaW4gaTkxNSBmYiBzaXplCj4gPiArCSAqIGNhbGN1bGF0aW9ucy4gVGhpcyB0 aW1lIGl0J3Mgb2Zmc2V0c1sxXSArIHRoZSB0aWxlCj4gPiArCSAqIGFsaWduZWQgY2hyb21hIHBs YW5lIHNpemUgdGhhdCBvdmVyZmxvd3MgYW5kCj4gPiArCSAqIGluY29ycmVjdGx5IHBhc3NlcyB0 aGUgYm8gc2l6ZSBjaGVjay4KPiA+ICsJICovCj4gPiArCWlndF9yZXF1aXJlKGlndF9kaXNwbGF5 X2hhc19mb3JtYXRfbW9kKCZkYXRhLT5kaXNwbGF5LAo+ID4gKwkJCQkJICAgICAgIERSTV9GT1JN QVRfTlYxMiwKPiA+ICsJCQkJCSAgICAgICBkYXRhLT5tb2RpZmllcikpOwo+ID4gKwo+ID4gKwli byA9IGdlbV9jcmVhdGUoZGF0YS0+ZHJtX2ZkLCAoMVVMTCA8PCAzMikgLSA0MDk2KTsKPiA+ICsJ aWd0X3JlcXVpcmUoYm8pOwo+ID4gKwo+ID4gKwlvZmZzZXRzWzBdID0gMDsKPiA+ICsJb2Zmc2V0 c1sxXSA9ICgxVUxMIDw8IDMyKSAtIDgxOTIgKiA0MDk2Owo+ID4gKwo+ID4gKwlyZXQgPSBfX2tt c19hZGRmYihkYXRhLT5kcm1fZmQsIGJvLAo+ID4gKwkJCSAgODE5MiwgODE4OCwKPiA+ICsJCQkg IERSTV9GT1JNQVRfTlYxMiwKPiA+ICsJCQkgIGRhdGEtPm1vZGlmaWVyLAo+ID4gKwkJCSAgc3Ry aWRlcywgb2Zmc2V0cywgMSwKPiA+ICsJCQkgIERSTV9NT0RFX0ZCX01PRElGSUVSUywgJmZiX2lk KTsKPiA+ICsJaWd0X2Fzc2VydF9uZXEocmV0LCAwKTsKPiA+ICsKPiA+ICsJZ2VtX2Nsb3NlKGRh dGEtPmRybV9mZCwgYm8pOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHJtZmIoaW50IGZk LCB1aW50MzJfdCBpZCkKPiA+ICt7Cj4gPiArCWludCBlcnI7Cj4gPiArCj4gPiArCWVyciA9IDA7 Cj4gPiArCWlmIChpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9NT0RFX1JNRkIsICZpZCkpCj4gPiAr CQllcnIgPSAtZXJybm87Cj4gPiArCj4gPiArCWVycm5vID0gMDsKPiA+ICsJcmV0dXJuIGVycjsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQKPiA+ICt0ZXN0X2FkZGZiKGRhdGFfdCAqZGF0 YSkKPiA+ICt7Cj4gPiArCXVpbnQ2NF90IHNpemU7Cj4gPiArCXVpbnQzMl90IGZiX2lkOwo+ID4g Kwl1aW50MzJfdCBibzsKPiA+ICsJdWludDMyX3Qgb2Zmc2V0c1s0XSA9IHt9Owo+ID4gKwl1aW50 MzJfdCBzdHJpZGVzWzRdID0ge307Cj4gPiArCXVpbnQzMl90IGZvcm1hdDsKPiA+ICsJaW50IHJl dDsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogZ2VuMyBtYXggdGlsZWQgc3RyaWRlIGlzIDhrIGJ5 dGVzLCBidXQKPiA+ICsJICogbWF4IGZiIHNpemUgb2YgNGsgcGl4ZWxzLCBoZW5jZSB3ZSBjYW4n dCB0ZXN0Cj4gPiArCSAqIHdpdGggMzJicHAgYW5kIG11c3QgdXNlIDE2YnBwIGluc3RlYWQuCj4g PiArCSAqLwo+ID4gKwlpZiAoaW50ZWxfZ2VuKGRhdGEtPmRldmlkKSA9PSAzKQo+ID4gKwkJZm9y bWF0ID0gRFJNX0ZPUk1BVF9SR0I1NjU7Cj4gPiArCWVsc2UKPiA+ICsJCWZvcm1hdCA9IERSTV9G T1JNQVRfWFJHQjg4ODg7Cj4gPiArCj4gPiArCWlndF9yZXF1aXJlKGlndF9kaXNwbGF5X2hhc19m b3JtYXRfbW9kKCZkYXRhLT5kaXNwbGF5LAo+ID4gKwkJCQkJICAgICAgIGZvcm1hdCwgZGF0YS0+ bW9kaWZpZXIpKTsKPiA+ICsKPiA+ICsJaWd0X2NhbGNfZmJfc2l6ZShkYXRhLT5kcm1fZmQsCj4g PiArCQkJIGRhdGEtPm1heF9mYl93aWR0aCwKPiA+ICsJCQkgZGF0YS0+bWF4X2ZiX2hlaWdodCwK PiA+ICsJCQkgZm9ybWF0LCBkYXRhLT5tb2RpZmllciwKPiA+ICsJCQkgJnNpemUsICZzdHJpZGVz WzBdKTsKPiA+ICsKPiA+ICsJYm8gPSBnZW1fY3JlYXRlKGRhdGEtPmRybV9mZCwgc2l6ZSk7Cj4g PiArCWlndF9yZXF1aXJlKGJvKTsKPiA+ICsKPiA+ICsJaWYgKGludGVsX2dlbihkYXRhLT5kZXZp ZCkgPCA0KQo+ID4gKwkJZ2VtX3NldF90aWxpbmcoZGF0YS0+ZHJtX2ZkLCBibywKPiA+ICsJCQkg ICAgICAgaWd0X2ZiX21vZF90b190aWxpbmcoZGF0YS0+bW9kaWZpZXIpLCBzdHJpZGVzWzBdKTsK PiA+ICsKPiA+ICsJcmV0ID0gX19rbXNfYWRkZmIoZGF0YS0+ZHJtX2ZkLCBibywKPiA+ICsJCQkg IGRhdGEtPm1heF9mYl93aWR0aCwKPiA+ICsJCQkgIGRhdGEtPm1heF9mYl9oZWlnaHQsCj4gPiAr CQkJICBmb3JtYXQsIGRhdGEtPm1vZGlmaWVyLAo+ID4gKwkJCSAgc3RyaWRlcywgb2Zmc2V0cywg MSwKPiA+ICsJCQkgIERSTV9NT0RFX0ZCX01PRElGSUVSUywgJmZiX2lkKTsKPiA+ICsJaWd0X2Fz c2VydF9lcShyZXQsIDApOwo+ID4gKwo+ID4gKwlybWZiKGRhdGEtPmRybV9mZCwgZmJfaWQpOwo+ ID4gKwlnZW1fY2xvc2UoZGF0YS0+ZHJtX2ZkLCBibyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBkYXRhX3QgZGF0YTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiA+ICsJdWlu dDY0X3QgbW9kaWZpZXI7Cj4gPiArCWNvbnN0IGNoYXIgKm5hbWU7Cj4gPiArfSBtb2RpZmllcnNb XSA9IHsKPiA+ICsJeyBEUk1fRk9STUFUX01PRF9MSU5FQVIsICJsaW5lYXIiLCB9LAo+ID4gKwl7 IEk5MTVfRk9STUFUX01PRF9YX1RJTEVELCAieC10aWxlZCIsIH0sCj4gPiArCXsgSTkxNV9GT1JN QVRfTU9EX1lfVElMRUQsICJ5LXRpbGVkIiwgfSwKPiA+ICsJeyBJOTE1X0ZPUk1BVF9NT0RfWWZf VElMRUQsICJ5Zi10aWxlZCIsIH0sCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHsKPiA+ICsJdWludDMyX3QgZm9ybWF0Owo+ID4gKwl1aW50OF90IGJwcDsKPiA+ICt9IGZv cm1hdHNbXSA9IHsKPiA+ICsJLyogRklYTUUgaWd0X2ZiIGRvZXNuJ3Qgc3VwcG9ydCBDOCBjdXJy ZW50bHkgKi8KPiA+ICsJeyBEUk1fRk9STUFUX0M4LCA4LCB9LAo+ID4gKwl7IERSTV9GT1JNQVRf UkdCNTY1LCAxNiwgfSwKPiA+ICsJeyBEUk1fRk9STUFUX1hSR0I4ODg4LCAzMiwgfSwKPiA+ICsJ eyBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsIDY0LCB9LAo+ID4gK307Cj4gPiArCj4gPiArc3Rh dGljIGNvbnN0IHN0cnVjdCB7Cj4gPiArCWlndF9yb3RhdGlvbl90IHJvdGF0aW9uOwo+ID4gKwl1 aW50MTZfdCBhbmdsZTsKPiA+ICt9IHJvdGF0aW9uc1tdID0gewo+ID4gKwl7IElHVF9ST1RBVElP Tl8wLCAwLCB9LAo+ID4gKwl7IElHVF9ST1RBVElPTl85MCwgOTAsIH0sCj4gPiArCXsgSUdUX1JP VEFUSU9OXzE4MCwgMTgwLCB9LAo+ID4gKwl7IElHVF9ST1RBVElPTl8yNzAsIDI3MCwgfSwKPiA+ ICt9Owo+ID4gKwo+ID4gK2lndF9tYWluCj4gPiArewo+ID4gKwlpZ3RfZml4dHVyZSB7Cj4gPiAr CQlkcm1Nb2RlUmVzUHRyIHJlczsKPiA+ICsKPiA+ICsJCWlndF9za2lwX29uX3NpbXVsYXRpb24o KTsKPiA+ICsKPiA+ICsJCWRhdGEuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklW RVJfSU5URUwpOwo+ID4gKwo+ID4gKwkJaWd0X3JlcXVpcmUoaXNfaTkxNV9kZXZpY2UoZGF0YS5k cm1fZmQpKTsKPiA+ICsKPiA+ICsJCWRhdGEuZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGRh dGEuZHJtX2ZkKTsKPiA+ICsKPiA+ICsJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsK PiA+ICsKPiA+ICsJCWlndF9yZXF1aXJlX3BpcGVfY3JjKGRhdGEuZHJtX2ZkKTsKPiA+ICsJCWln dF9kaXNwbGF5X3JlcXVpcmUoJmRhdGEuZGlzcGxheSwgZGF0YS5kcm1fZmQpOwo+ID4gKwo+ID4g KwkJcmVzID0gZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLmRybV9mZCk7Cj4gPiArCQlpZ3RfYXNz ZXJ0KHJlcyk7Cj4gPiArCj4gPiArCQlkYXRhLm1heF9mYl93aWR0aCA9IHJlcy0+bWF4X3dpZHRo Owo+ID4gKwkJZGF0YS5tYXhfZmJfaGVpZ2h0ID0gcmVzLT5tYXhfaGVpZ2h0Owo+ID4gKwo+ID4g KwkJZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVzKTsKPiA+ICsKPiA+ICsJCWlndF9pbmZvKCJNYXgg ZHJpdmVyIGZyYW1lYnVmZmVyIHNpemUgJWR4JWRcbiIsCj4gPiArCQkJIGRhdGEubWF4X2ZiX3dp ZHRoLCBkYXRhLm1heF9mYl9oZWlnaHQpOwo+ID4gKwo+ID4gKwkJZGF0YS5yYW1fc2l6ZSA9IGlu dGVsX2dldF90b3RhbF9yYW1fbWIoKSA8PCAyMDsKPiA+ICsJCWRhdGEuYXBlcl9zaXplID0gZ2Vt X2FwZXJ0dXJlX3NpemUoZGF0YS5kcm1fZmQpOwo+ID4gKwkJZGF0YS5tYXBwYWJsZV9zaXplID0g Z2VtX21hcHBhYmxlX2FwZXJ0dXJlX3NpemUoKTsKPiA+ICsKPiA+ICsJCWlndF9pbmZvKCJSQU06 ICUiUFJJdTY0IiBNaUIsIEdQVSBhZGRyZXNzIHNwYWNlOiAlIlBSSWQ2NCIgTWlCLCBHR1RUIG1h cHBhYmxlIHNpemU6ICUiUFJJZDY0IiBNaUJcbiIsCj4gPiArCQkJIGRhdGEucmFtX3NpemUgPj4g MjAsIGRhdGEuYXBlcl9zaXplID4+IDIwLAo+ID4gKwkJCSBkYXRhLm1hcHBhYmxlX3NpemUgPj4g MjApOwo+ID4gKwo+ID4gKwkJLyoKPiA+ICsJCSAqIEdlbjMgcmVuZGVyIGVuZ2luZSBpcyBsaW1p dGVkIHRvIDJreDJrLCB3aGVyZWFzCj4gPiArCQkgKiB0aGUgZGlzcGxheSBlbmdpbmUgY2FuIGRv IDRreDRrLiBVc2UgdGhlIGJsaXR0ZXIKPiA+ICsJCSAqIG9uIGdlbjMgdG8gYXZvaWQgZXhjZWVk aW5nIHRoZSByZW5kZXIgZW5naW5lIGxpbWl0cy4KPiA+ICsJCSAqIE9uIGdlbjIgd2UgY291bGQg dXNlIGVpdGhlciwgYnV0IGxldCdzIGdvIGZvciB0aGUKPiA+ICsJCSAqIGJsaXR0ZXIgdGhlcmUg YXMgd2VsbC4KPiA+ICsJCSAqLwo+ID4gKwkJaWYgKGludGVsX2dlbihkYXRhLmRldmlkKSA+PSA0 KQo+ID4gKwkJCWRhdGEucmVuZGVyX2NvcHkgPSBpZ3RfZ2V0X3JlbmRlcl9jb3B5ZnVuYyhkYXRh LmRldmlkKTsKPiA+ICsKPiA+ICsJCWRhdGEuYnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1f aW5pdChkYXRhLmRybV9mZCwgNDA5Nik7Cj4gPiArCQlkYXRhLmJhdGNoID0gaW50ZWxfYmF0Y2hi dWZmZXJfYWxsb2MoZGF0YS5idWZtZ3IsIGRhdGEuZGV2aWQpOwo+ID4gKwl9Cj4gPiArCj4gPiAr CS8qCj4gPiArCSAqIFNraXAgbGluZWFyIGFzIGl0IGRvZXNuJ3QgaGl0IHRoZSBvdmVyZmxvdyB3 ZSB3YW50Cj4gPiArCSAqIG9uIGFjY291bnQgb2YgdGhlIHRpbGUgaGVpZ2h0IGJlaW5nIGVmZmVj dGl2ZWx5IG9uZSwKPiA+ICsJICogYW5kIHRodXMgdGhlIGtlbnJuZWwgcm91bmRpbmcgdXAgdG8g dGhlIG5leHQgdGlsZQo+ID4gKwkgKiBoZWlnaHQgd29uJ3QgZG8gYW55dGhpbmcuCj4gPiArCSAq Lwo+ID4gKwlmb3IgKGludCBpID0gMTsgaSA8IEFSUkFZX1NJWkUobW9kaWZpZXJzKTsgaSsrKSB7 Cj4gPiArCQlpZ3Rfc3VidGVzdF9mKCIlcy1hZGRmYi1zaXplLW92ZXJmbG93IiwKPiA+ICsJCQkg ICAgICBtb2RpZmllcnNbaV0ubmFtZSkgewo+ID4gKwkJCWRhdGEubW9kaWZpZXIgPSBtb2RpZmll cnNbaV0ubW9kaWZpZXI7Cj4gPiArCQkJdGVzdF9zaXplX292ZXJmbG93KCZkYXRhKTsKPiA+ICsJ CX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlmb3IgKGludCBpID0gMTsgaSA8IEFSUkFZX1NJWkUobW9k aWZpZXJzKTsgaSsrKSB7Cj4gPiArCQlpZ3Rfc3VidGVzdF9mKCIlcy1hZGRmYi1zaXplLW9mZnNl dC1vdmVyZmxvdyIsCj4gPiArCQkJICAgICAgbW9kaWZpZXJzW2ldLm5hbWUpIHsKPiA+ICsJCQlk YXRhLm1vZGlmaWVyID0gbW9kaWZpZXJzW2ldLm1vZGlmaWVyOwo+ID4gKwkJCXRlc3Rfc2l6ZV9v ZmZzZXRfb3ZlcmZsb3coJmRhdGEpOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWZvciAo aW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShtb2RpZmllcnMpOyBpKyspIHsKPiA+ICsJCWlndF9z dWJ0ZXN0X2YoIiVzLWFkZGZiIiwgbW9kaWZpZXJzW2ldLm5hbWUpIHsKPiA+ICsJCQlkYXRhLm1v ZGlmaWVyID0gbW9kaWZpZXJzW2ldLm1vZGlmaWVyOwo+ID4gKwo+ID4gKwkJCXRlc3RfYWRkZmIo JmRhdGEpOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWZvciAoaW50IGkgPSAwOyBpIDwg QVJSQVlfU0laRShtb2RpZmllcnMpOyBpKyspIHsKPiA+ICsJCWRhdGEubW9kaWZpZXIgPSBtb2Rp ZmllcnNbaV0ubW9kaWZpZXI7Cj4gPiArCj4gPiArCQlmb3IgKGludCBqID0gMDsgaiA8IEFSUkFZ X1NJWkUoZm9ybWF0cyk7IGorKykgewo+ID4gKwkJCWRhdGEuZm9ybWF0ID0gZm9ybWF0c1tqXS5m b3JtYXQ7Cj4gPiArCj4gPiArCQkJZm9yIChpbnQgayA9IDA7IGsgPCBBUlJBWV9TSVpFKHJvdGF0 aW9ucyk7IGsrKykgewo+ID4gKwkJCQlkYXRhLnJvdGF0aW9uID0gcm90YXRpb25zW2tdLnJvdGF0 aW9uOwo+ID4gKwo+ID4gKwkJCQlpZ3Rfc3VidGVzdF9mKCIlcy0lZGJwcC1yb3RhdGUtJWQiLCBt b2RpZmllcnNbaV0ubmFtZSwKPiA+ICsJCQkJCSAgICAgIGZvcm1hdHNbal0uYnBwLCByb3RhdGlv bnNba10uYW5nbGUpIHsKPiA+ICsJCQkJCWlndF9yZXF1aXJlKGlndF9mYl9zdXBwb3J0ZWRfZm9y bWF0KGRhdGEuZm9ybWF0KSk7Cj4gPiArCQkJCQlpZ3RfcmVxdWlyZShpZ3RfZGlzcGxheV9oYXNf Zm9ybWF0X21vZCgmZGF0YS5kaXNwbGF5LCBkYXRhLmZvcm1hdCwgZGF0YS5tb2RpZmllcikpOwo+ ID4gKwkJCQkJcHJlcF9mYigmZGF0YSk7Cj4gPiArCQkJCQl0ZXN0X3NjYW5vdXQoJmRhdGEpOwo+ ID4gKwkJCQl9Cj4gPiArCQkJfQo+ID4gKwo+ID4gKwkJCWlndF9maXh0dXJlCj4gPiArCQkJCWNs ZWFudXBfZmIoJmRhdGEpOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWlndF9maXh0dXJl IHsKPiA+ICsJCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxheSk7Cj4gPiArCj4gPiArCQlp bnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGRhdGEuYmF0Y2gpOwo+ID4gKwkJZHJtX2ludGVsX2J1Zm1n cl9kZXN0cm95KGRhdGEuYnVmbWdyKTsKPiA+ICsJfQo+ID4gK30KPiAKPiBsZ3RtCj4gCj4gUmV2 aWV3ZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gCj4gPiBk aWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAo+ID4gaW5k ZXggNzExOTc5YjRhMWMyLi5hZDg0NDQ4NzUzMDIgMTAwNjQ0Cj4gPiAtLS0gYS90ZXN0cy9tZXNv bi5idWlsZAo+ID4gKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPiA+IEBAIC0xNCw2ICsxNCw3IEBA IHRlc3RfcHJvZ3MgPSBbCj4gPiAgCSdrbXNfYXRvbWljX2ludGVycnVwdGlibGUnLAo+ID4gIAkn a21zX2F0b21pY190cmFuc2l0aW9uJywKPiA+ICAJJ2ttc19hdmFpbGFibGVfbW9kZXNfY3JjJywK PiA+ICsJJ2ttc19iaWdfZmInLAo+ID4gIAkna21zX2J1c3knLAo+ID4gIAkna21zX2NjcycsCj4g PiAgCSdrbXNfY29sb3InLAo+ID4gLS0gCj4gPiAyLjIxLjAKPiA+IAo+ID4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+IGlndC1kZXYgbWFpbGluZyBs aXN0Cj4gPiBpZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cj4gCj4gLS0gCj4gRGFuaWVs IFZldHRlcgo+IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgo+IGh0dHA6Ly9i bG9nLmZmd2xsLmNoCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwg Q29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pZ3QtZGV2