From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniele Ceraolo Spurio Subject: Re: [PATCH 2/5] drm/i915/wopcm: Check WOPCM layout separately from calculations Date: Thu, 15 Aug 2019 17:28:34 -0700 Message-ID: <8098fbe7-4d1d-f767-94ac-fbbc19a44879@intel.com> References: <20190815171228.31920-3-michal.wajdeczko@intel.com> <20190815214841.17856-1-michal.wajdeczko@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6C6196E1CE for ; Fri, 16 Aug 2019 00:28:35 +0000 (UTC) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Michal Wajdeczko , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiA4LzE1LzE5IDU6MjEgUE0sIE1pY2hhbCBXYWpkZWN6a28gd3JvdGU6Cj4gT24gRnJpLCAx NiBBdWcgMjAxOSAwMjoxMDoyNiArMDIwMCwgRGFuaWVsZSBDZXJhb2xvIFNwdXJpbyAKPiA8ZGFu aWVsZS5jZXJhb2xvc3B1cmlvQGludGVsLmNvbT4gd3JvdGU6Cj4gCj4+Cj4+Cj4+IE9uIDgvMTUv MTkgMjo0OCBQTSwgTWljaGFsIFdhamRlY3prbyB3cm90ZToKPj4+IFdlIGNhbiBkbyBXT1BDTSBw YXJ0aXRpb25pbmcgdXNpbmcgcm91Z2ggZXN0aW1hdGVzIGFuZCBsaW1pdHMKPj4+IGFuZCBwZXJm b3JtIGRldGFpbGVkIGNoZWNrIGFzIHNlcGFyYXRlIHN0ZXAuCj4+PiDCoHYyOiBvb3BzISBzL21h eC9taW4KPj4+IMKgU2lnbmVkLW9mZi1ieTogTWljaGFsIFdhamRlY3prbyA8bWljaGFsLndhamRl Y3prb0BpbnRlbC5jb20+Cj4+PiBDYzogRGFuaWVsZSBDZXJhb2xvIFNwdXJpbyA8ZGFuaWVsZS5j ZXJhb2xvc3B1cmlvQGludGVsLmNvbT4KPj4+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlz LXdpbHNvbi5jby51az4KPj4+IC0tLQo+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf d29wY20uYyB8IDEwNSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQo+Pj4gwqAgMSBmaWxl IGNoYW5nZWQsIDc0IGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQo+Pj4gwqBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29wY20uYyAKPj4+IGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfd29wY20uYwo+Pj4gaW5kZXggMjk3NWUwMGY1N2Y1Li4zOWYyNzY0 Y2EzYTggMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3BjbS5j Cj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3BjbS5jCj4+PiBAQCAtODcs NyArODcsOCBAQCB2b2lkIGludGVsX3dvcGNtX2luaXRfZWFybHkoc3RydWN0IGludGVsX3dvcGNt ICp3b3BjbSkKPj4+IMKgwqDCoMKgwqAgZWxzZQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHdvcGNt LT5zaXplID0gR0VOOV9XT1BDTV9TSVpFOwo+Pj4gwqAgLcKgwqDCoCBEUk1fREVCVUdfRFJJVkVS KCJXT1BDTSBzaXplOiAldUtpQlxuIiwgd29wY20tPnNpemUgLyAxMDI0KTsKPj4+ICvCoMKgwqAg RFJNX0RFVl9ERUJVR19EUklWRVIoaTkxNS0+ZHJtLmRldiwgIldPUENNOiBzaXplICV1S2lCXG4i LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdvcGNtLT5zaXplIC8gU1pf MUspOwo+Pj4gwqAgfQo+Pj4gwqDCoMKgIHN0YXRpYyBpbmxpbmUgdTMyIGNvbnRleHRfcmVzZXJ2 ZWRfc2l6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAKPj4+ICppOTE1KQo+Pj4gQEAgLTEzOCw5 ICsxMzksOSBAQCBzdGF0aWMgaW5saW5lIGludCBnZW45X2NoZWNrX2h1Y19md19maXRzKHUzMiAK Pj4+IGd1Y193b3BjbV9zaXplLCB1MzIgaHVjX2Z3X3NpemUpCj4+PiDCoMKgwqDCoMKgIHJldHVy biAwOwo+Pj4gwqAgfQo+Pj4gwqAgLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2h3X3Jlc3RyaWN0 aW9uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBndWNfd29wY21fYmFzZSwgdTMyIGd1Y193 b3BjbV9zaXplLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHUzMiBodWNfZndfc2l6ZSkKPj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfaHdfcmVz dHJpY3Rpb25zKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGd1Y193b3BjbV9iYXNlLCB1MzIgZ3Vj X3dvcGNtX3NpemUsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1MzIgaHVjX2Z3X3NpemUpCj4+PiDCoCB7Cj4+PiDCoMKgwqDCoMKgIGludCBlcnIgPSAwOwo+ Pj4gwqAgQEAgLTE1MSw3ICsxNTIsNjQgQEAgc3RhdGljIGlubGluZSBpbnQgY2hlY2tfaHdfcmVz dHJpY3Rpb24oc3RydWN0IAo+Pj4gZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPj4+IMKgwqDCoMKg wqDCoMKgwqDCoCAoSVNfR0VOKGk5MTUsIDkpIHx8IElTX0NOTF9SRVZJRChpOTE1LCBDTkxfUkVW SURfQTAsIAo+Pj4gQ05MX1JFVklEX0EwKSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0g Z2VuOV9jaGVja19odWNfZndfZml0cyhndWNfd29wY21fc2l6ZSwgaHVjX2Z3X3NpemUpOwo+Pj4g wqAgLcKgwqDCoCByZXR1cm4gZXJyOwo+Pj4gK8KgwqDCoCByZXR1cm4gIWVycjsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIGlubGluZSBib29sIF9fY2hlY2tfbGF5b3V0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1LCB1MzIgCj4+PiB3b3BjbV9zaXplLAo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGd1Y193b3BjbV9iYXNlLCB1MzIgZ3VjX3dvcGNtX3Np emUsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgZ3VjX2Z3X3Np emUsIHUzMiBodWNfZndfc2l6ZSkKPj4+ICt7Cj4+PiArwqDCoMKgIGNvbnN0IHUzMiBjdHhfcnN2 ZCA9IGNvbnRleHRfcmVzZXJ2ZWRfc2l6ZShpOTE1KTsKPj4+ICvCoMKgwqAgdTMyIHNpemU7Cj4+ PiArCj4+PiArwqDCoMKgIGlmICh1bmxpa2VseShndWNfd29wY21fYmFzZSA+IHdvcGNtX3NpemUp KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihpOTE1LT5kcm0uZGV2LAo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgIldPUENNOiBpbnZhbGlkIEd1QyByZWdpb24gYmFzZTogJXVLID4g JXVLXG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3VjX3dvcGNtX2Jhc2UgLyBTWl8x Sywgd29wY21fc2l6ZSAvIFNaXzFLKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7 Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgc2l6ZSA9IHdvcGNtX3NpemUgLSBjdHhf cnN2ZDsKPj4+ICvCoMKgwqAgaWYgKHVubGlrZWx5KGd1Y193b3BjbV9iYXNlID4gc2l6ZSkpIHsK Pj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGk5MTUtPmRybS5kZXYsCj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAiV09QQ006IGludmFsaWQgR3VDIHJlZ2lvbiBiYXNlOiAldUsgPiAldUtc biIsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBndWNfd29wY21fYmFzZSAvIFNaXzFLLCBz aXplIC8gU1pfMUspOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPj4+ICvCoMKg wqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAodW5saWtlbHkoZ3VjX3dvcGNtX3NpemUgPiB3b3Bj bV9zaXplKSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIoaTkxNS0+ZHJtLmRldiwKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJXT1BDTTogaW52YWxpZCBHdUMgcmVnaW9uIHNpemU6 ICV1SyA+ICV1S1xuIiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGd1Y193b3BjbV9zaXpl IC8gU1pfMUssIHdvcGNtX3NpemUgLyBTWl8xSyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IGZhbHNlOwo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIHNpemUgPSB3b3BjbV9zaXpl IC0gZ3VjX3dvcGNtX2Jhc2UgLSBjdHhfcnN2ZDsKPj4+ICvCoMKgwqAgaWYgKHVubGlrZWx5KGd1 Y193b3BjbV9zaXplID4gc2l6ZSkpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGk5MTUt PmRybS5kZXYsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiV09QQ006IGludmFsaWQgR3VD IHJlZ2lvbiBzaXplOiAldUsgPiAldUtcbiIsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBn dWNfd29wY21fc2l6ZSAvIFNaXzFLLCBzaXplIC8gU1pfMUspOwo+Pj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiBmYWxzZTsKPj4+ICvCoMKgwqAgfQo+Pgo+Pgo+PiBJIHRoaW5rIHdlIGNhbiBjb25z b2xpZGF0ZSBhbGwgdGhlIGNoZWNrcyBhYm92ZSBpbiBqdXN0Ogo+Pgo+PiB3b3BjbV9ndWNfbWF4 ID0gd29wY21fc2l6ZSAtIGN0eF9yc3ZkOwo+PiBpZiAocmFuZ2Vfb3ZlcmZsb3dzKGd1Y193b3Bj bV9iYXNlLCBndWNfd29wY21fc2l6ZSwgd29wY21fZ3VjX21heCkKPj4gwqDCoMKgwqDCoMKgwqAg cmV0dXJuIGZhbHNlOwo+IAo+IGlmIHdlIGNvbnNvbGlkYXRlLCB0aGVuIGl0IHdpbGwgYmUgaGFy ZCB0byB0ZWxsIHdoYXQgd2VudCB3cm9uZy4KPiB3aXRoIHNlcGFyYXRlIGxvZ3Mgd2UgY2FuIGZp bmQgd2hpY2ggY2hlY2sgZmFpbGVkICh0aGV5IGFsbCBhcmUKPiB1bmxpa2VseSwgYnV0IHN0aWxs IHBvc3NpYmxlKQo+IAoKQXMgbG9uZyBhcyB3ZSBwcmludCBndWNfd29wY21fYmFzZSwgZ3VjX3dv cGNtX3NpemUgYW5kIHdvcGNtX2d1Y19tYXggb24gCmVycm9yIHdlIHNob3VsZCBiZSBhYmxlIHRv IGVhc2lseSBzZWUgd2hhdCdzIGdvaW5nIHdyb25nLCBpdCdzIGVhc3kgdG8gCnNlZSBpZiBndWNf d29wY21fYmFzZSBvciBndWNfd29wY21fc2l6ZSBhcmUgZ3JlYXRlciB0aGFuIHdvcGNtX2d1Y19t YXgsIAp3aGljaCBjb3ZlcnMgMyBvZiB0aGUgNCBjaGVja3MgYWJvdmUuCgo+Pgo+Pgo+Pj4gKwo+ Pj4gK8KgwqDCoCBzaXplID0gZ3VjX2Z3X3NpemUgKyBHVUNfV09QQ01fUkVTRVJWRUQgKyBHVUNf V09QQ01fU1RBQ0tfUkVTRVJWRUQ7Cj4+PiArwqDCoMKgIGlmICh1bmxpa2VseShndWNfd29wY21f c2l6ZSA8IHNpemUpKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihpOTE1LT5kcm0uZGV2 LCAiV09QQ006IG5vIHNwYWNlIGZvciAlczogJXVLIDwgJXVLXG4iLAo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaW50ZWxfdWNfZndfdHlwZV9yZXByKElOVEVMX1VDX0ZXX1RZUEVfR1VDKSwK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGd1Y193b3BjbV9zaXplIC8gU1pfMUssIHNpemUg LyBTWl8xSyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNlOwo+Pj4gK8KgwqDCoCB9 Cj4+PiArCj4+PiArwqDCoMKgIHNpemUgPSBodWNfZndfc2l6ZSArIFdPUENNX1JFU0VSVkVEX1NJ WkU7Cj4+PiArwqDCoMKgIGlmICh1bmxpa2VseShndWNfd29wY21fYmFzZSA8IHNpemUpKSB7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihpOTE1LT5kcm0uZGV2LCAiV09QQ006IG5vIHNwYWNl IGZvciAlczogJXVLIDwgJXVLXG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZWxf dWNfZndfdHlwZV9yZXByKElOVEVMX1VDX0ZXX1RZUEVfSFVDKSwKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGd1Y193b3BjbV9iYXNlIC8gU1pfMUssIHNpemUgLyBTWl8xSyk7Cj4+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNlOwo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKg IHJldHVybiBjaGVja19od19yZXN0cmljdGlvbnMoaTkxNSwgZ3VjX3dvcGNtX2Jhc2UsIGd1Y193 b3BjbV9zaXplLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aHVjX2Z3X3NpemUpOwo+Pj4gwqAgfQo+Pj4gwqDCoMKgIC8qKgo+Pj4gQEAgLTE3Miw4ICsyMzAs NiBAQCB2b2lkIGludGVsX3dvcGNtX2luaXQoc3RydWN0IGludGVsX3dvcGNtICp3b3BjbSkKPj4+ IMKgwqDCoMKgwqAgdTMyIGN0eF9yc3ZkID0gY29udGV4dF9yZXNlcnZlZF9zaXplKGk5MTUpOwo+ Pj4gwqDCoMKgwqDCoCB1MzIgZ3VjX3dvcGNtX2Jhc2U7Cj4+PiDCoMKgwqDCoMKgIHUzMiBndWNf d29wY21fc2l6ZTsKPj4+IC3CoMKgwqAgdTMyIGd1Y193b3BjbV9yc3ZkOwo+Pj4gLcKgwqDCoCBp bnQgZXJyOwo+Pj4gwqDCoMKgwqDCoMKgwqAgaWYgKCFndWNfZndfc2l6ZSkKPj4+IMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm47Cj4+PiBAQCAtMTgzLDM5ICsyMzksMjYgQEAgdm9pZCBpbnRlbF93 b3BjbV9pbml0KHN0cnVjdCBpbnRlbF93b3BjbSAqd29wY20pCj4+PiDCoMKgwqDCoMKgIEdFTV9C VUdfT04od29wY20tPmd1Yy5zaXplKTsKPj4+IMKgwqDCoMKgwqAgR0VNX0JVR19PTihndWNfZndf c2l6ZSA+PSB3b3BjbS0+c2l6ZSk7Cj4+PiDCoMKgwqDCoMKgIEdFTV9CVUdfT04oaHVjX2Z3X3Np emUgPj0gd29wY20tPnNpemUpOwo+Pj4gK8KgwqDCoCBHRU1fQlVHX09OKGN0eF9yc3ZkICsgV09Q Q01fUkVTRVJWRURfU0laRSA+PSB3b3BjbS0+c2l6ZSk7Cj4+PiDCoMKgwqDCoMKgwqDCoCBpZiAo aTkxNV9pbmplY3RfcHJvYmVfZmFpbHVyZShpOTE1KSkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm47Cj4+PiDCoMKgwqDCoMKgwqDCoCBndWNfd29wY21fYmFzZSA9IEFMSUdOKGh1Y19md19z aXplICsgV09QQ01fUkVTRVJWRURfU0laRSwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgR1VDX1dPUENNX09GRlNFVF9BTElHTk1FTlQpOwo+Pj4gLcKgwqDCoCBp ZiAoKGd1Y193b3BjbV9iYXNlICsgY3R4X3JzdmQpID49IHdvcGNtLT5zaXplKSB7Cj4+PiAtwqDC oMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJHdUMgV09QQ00gYmFzZSAoJXVLaUIpIGlzIHRvbyBiaWcu XG4iLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGd1Y193b3BjbV9iYXNlIC8gMTAy NCk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4gLcKgwqDCoCB9Cj4+PiAtCj4+PiAr wqDCoMKgIGd1Y193b3BjbV9iYXNlID0gbWluKHdvcGNtLT5zaXplIC0gY3R4X3JzdmQsIGd1Y193 b3BjbV9iYXNlKTsKPj4KPj4gVGhpcyBsaW5lIGNvbmZ1c2VkIG1lIHF1aXRlIGEgYml0IHVudGls IHdlIGNoYXR0ZWQgb24gSU0gYWJvdXQgaXQuIAo+PiBtYXliZSBhZGQgYSBjb21tZW50LCBlLmcu Ogo+Pgo+PiAvKgo+PiDCoCAqIHdlIHdhbnQgdG8ga2VlcCBhbGwgdGhlIGNoZWNrcyBpbiB0aGUg c2FtZSBwbGFjZSB0byBiZSBhYmxlIHRvIHJlLXVzZQo+PiDCoCAqIHRoZW0gd2hlbiB3ZSBmaW5k IGxvY2tlZCB2YWx1ZXMgaW4gV09QQ00gc28gd2UgZG9uJ3QgdmFsaWRhdGUKPj4gwqAgKiBndWNf d29wY21fYmFzZSBoZXJlLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBjbGFtcCBpdCB0byBtYWtlIHN1 cmUgdGhlCj4+IMKgICogZm9sbG93aW5nIG1hdGggaXMgc2FuZS4KPj4gwqAgKi8KPiAKPiBvawo+ IAo+Pgo+PiBBbHNvLCB3aXRoIG15IHN1Z2dlc3Rpb24gZm9yIGNvbnNvbGlkYXRpb24gYWJvdmUs IGZvciB0aGUgY2hlY2tzIHdlIAo+PiBhbHdheXMgY2FyZSBhYm91dCB3b3BjbS0+c2l6ZSAtIGN0 eF9yc3ZkLCBzbyBtYXliZSBzdG9yZSB0aGF0IGluIGEgCj4+IGxvY2FsIHZhciB0byB1c2UgaXQg aGVyZSBhbmQgYmVsb3cgYW5kIHBhc3MgdGhhdCBpbnRvIF9fY2hlY2tfbGF5b3V0KCkuCj4gCj4g YWxsIG1hdGggdHJpZXMgdG8gdXNlIHNpemVzIGZyb20gdGhlIGRpYWdyYW0gYWJvdmUsIGludHJv ZHVjaW5nIG9uZQo+IHN1Yi1zaXplIGhlbHBlciBtaWdodCBiZSBvdmVyIGVuZ2luZWVyaW5nIDsp Cj4gCgpJdCBqdXN0IG1hZGUgdGhlIGNvZGUgc2xpZ2h0bHkgZWFzaWVyIHRvIGZvbGxvdyBJTU8g YnkgYXZvaWRpbmcgZG9pbmcgCnRoZSBzdWJ0cmFjdGlvbiBpbiBtdWx0aXBsZSBwbGFjZXMsIGJ1 dCBpdCB3YXMganVzdCBhIHByZWZlcmVuY2UgYW5kIEknbSAKb2sgaWYgeW91IHByZWZlciB0byBr ZWVwIGl0IGFzLWlzLgoKRGFuaWVsZQoKPj4KPj4gRGFuaWVsZQo+Pgo+Pj4gwqDCoMKgwqDCoCBn dWNfd29wY21fc2l6ZSA9IHdvcGNtLT5zaXplIC0gZ3VjX3dvcGNtX2Jhc2UgLSBjdHhfcnN2ZDsK Pj4+IMKgwqDCoMKgwqAgZ3VjX3dvcGNtX3NpemUgJj0gR1VDX1dPUENNX1NJWkVfTUFTSzsKPj4+ IMKgIC3CoMKgwqAgRFJNX0RFQlVHX0RSSVZFUigiQ2FsY3VsYXRlZCBHdUMgV09QQ00gUmVnaW9u OiBbJXVLaUIsICV1S2lCKVxuIiwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3VjX3dv cGNtX2Jhc2UgLyAxMDI0LCBndWNfd29wY21fc2l6ZSAvIDEwMjQpOwo+Pj4gK8KgwqDCoCBEUk1f REVWX0RFQlVHX0RSSVZFUihpOTE1LT5kcm0uZGV2LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICJDYWxjdWxhdGVkIEd1QyBXT1BDTSBSZWdpb246IFsldUtpQiwgJXVLaUIp XG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGd1Y193b3BjbV9iYXNl IC8gU1pfMUssIGd1Y193b3BjbV9zaXplIC8gU1pfMUspOwo+Pj4gwqAgLcKgwqDCoCBndWNfd29w Y21fcnN2ZCA9IEdVQ19XT1BDTV9SRVNFUlZFRCArIEdVQ19XT1BDTV9TVEFDS19SRVNFUlZFRDsK Pj4+IC3CoMKgwqAgaWYgKChndWNfZndfc2l6ZSArIGd1Y193b3BjbV9yc3ZkKSA+IGd1Y193b3Bj bV9zaXplKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJOZWVkICV1S2lCIFdPUENN IGZvciBHdUMsICV1S2lCIGF2YWlsYWJsZS5cbiIsCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKGd1Y19md19zaXplICsgZ3VjX3dvcGNtX3JzdmQpIC8gMTAyNCwKPj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBndWNfd29wY21fc2l6ZSAvIDEwMjQpOwo+Pj4gLcKgwqDCoMKg wqDCoMKgIHJldHVybjsKPj4+ICvCoMKgwqAgaWYgKF9fY2hlY2tfbGF5b3V0KGk5MTUsIHdvcGNt LT5zaXplLCBndWNfd29wY21fYmFzZSwgCj4+PiBndWNfd29wY21fc2l6ZSwKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGd1Y19md19zaXplLCBodWNfZndfc2l6ZSkpIHsKPj4+ICvC oMKgwqDCoMKgwqDCoCB3b3BjbS0+Z3VjLmJhc2UgPSBndWNfd29wY21fYmFzZTsKPj4+ICvCoMKg wqDCoMKgwqDCoCB3b3BjbS0+Z3VjLnNpemUgPSBndWNfd29wY21fc2l6ZTsKPj4+ICvCoMKgwqDC oMKgwqDCoCBHRU1fQlVHX09OKCF3b3BjbS0+Z3VjLmJhc2UpOwo+Pj4gK8KgwqDCoMKgwqDCoMKg IEdFTV9CVUdfT04oIXdvcGNtLT5ndWMuc2l6ZSk7Cj4+PiDCoMKgwqDCoMKgIH0KPj4+IC0KPj4+ IC3CoMKgwqAgZXJyID0gY2hlY2tfaHdfcmVzdHJpY3Rpb24oaTkxNSwgZ3VjX3dvcGNtX2Jhc2Us IGd1Y193b3BjbV9zaXplLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBodWNfZndfc2l6ZSk7Cj4+PiAtwqDCoMKgIGlmIChlcnIpCj4+PiAtwqDCoMKgwqDCoMKgwqAg cmV0dXJuOwo+Pj4gLQo+Pj4gLcKgwqDCoCB3b3BjbS0+Z3VjLmJhc2UgPSBndWNfd29wY21fYmFz ZTsKPj4+IC3CoMKgwqAgd29wY20tPmd1Yy5zaXplID0gZ3VjX3dvcGNtX3NpemU7Cj4+PiAtwqDC oMKgIEdFTV9CVUdfT04oIXdvcGNtLT5ndWMuYmFzZSk7Cj4+PiAtwqDCoMKgIEdFTV9CVUdfT04o IXdvcGNtLT5ndWMuc2l6ZSk7Cj4+PiDCoCB9Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeA==