From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC] drm/atomic+msm: add helper to implement legacy dirtyfb Date: Wed, 4 Apr 2018 12:03:00 +0200 Message-ID: <20180404100300.GE3881@phenom.ffwll.local> References: <20180403224225.26776-1-robdclark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180403224225.26776-1-robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Rob Clark Cc: Thomas Hellstrom , David Airlie , linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Maarten Lankhorst , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Sean Paul , Lukasz Spintzyk , Daniel Vetter , Gustavo Padovan , Deepak Singh Rawat , freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Ville =?iso-8859-1?Q?Syrj=E4l=E4?= List-Id: linux-arm-msm@vger.kernel.org T24gVHVlLCBBcHIgMDMsIDIwMTggYXQgMDY6NDI6MjNQTSAtMDQwMCwgUm9iIENsYXJrIHdyb3Rl Ogo+IEFkZCBhbiBhdG9taWMgaGVscGVyIHRvIGltcGxlbWVudCBkaXJ0eWZiIHN1cHBvcnQuICBU aGlzIGlzIG5lZWRlZCB0bwo+IHN1cHBvcnQgRFNJIGNvbW1hbmQtbW9kZSBwYW5lbHMgd2l0aCB4 MTEgdXNlcnNwYWNlIChpZS4gd2hlbiB3ZSBjYW4ndAo+IHJlbHkgb24gcGFnZWZsaXBzIHRvIHRy aWdnZXIgYSBmbHVzaCB0byB0aGUgcGFuZWwpLgo+IAo+IFRvIHNpZ25hbCB0byB0aGUgZHJpdmVy IHRoYXQgdGhlIGFzeW5jIGF0b21pYyB1cGRhdGUgbmVlZHMgdG8KPiBzeW5jaHJvbml6ZSB3aXRo IGZlbmNlcywgZXZlbiB0aG91Z2ggdGhlIGZiIGRpZG4ndCBjaGFuZ2UsIHRoZQo+IGRybV9hdG9t aWNfc3RhdGU6OmRpcnR5IGZsYWcgaXMgYWRkZWQuCj4gCj4gU2lnbmVkLW9mZi1ieTogUm9iIENs YXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgo+IC0tLQo+IEJhY2tncm91bmQ6IHRoZXJlIGFyZSBh IG51bWJlciBvZiBkaWZmZXJlbnQgZm9sa3Mgd29ya2luZyBvbiBnZXR0aW5nCj4gdXBzdHJlYW0g a2VybmVsIHdvcmtpbmcgb24gdmFyaW91cyBkaWZmZXJlbnQgcGhvbmVzL3RhYmxldHMgd2l0aCBx Y29tCj4gU29DJ3MuLiBtYW55IG9mIHRoZW0gaGF2ZSBjb21tYW5kIG1vZGUgcGFuZWxzLCBzbyB3 ZSBraW5kIG9mIG5lZWQgYQo+IHdheSB0byBzdXBwb3J0IHRoZSBsZWdhY3kgZGlydHlmYiBpb2N0 bCBmb3IgeDExIHN1cHBvcnQuCj4gCj4gSSBrbm93IHRoZXJlIGlzIHdvcmsgb24gYSBwcm9wcmVy IG5vbi1sZWdhY3kgYXRvbWljIHByb3BlcnR5IGZvcgo+IHVzZXJzcGFjZSB0byBjb21tdW5pY2F0 ZSBkaXJ0eS1yZWN0KHMpIHRvIHRoZSBrZXJuZWwsIHNvIHRoaXMgY2FuCj4gYmUgaW1wcm92ZWQg ZnJvbSB0cmlnZ2VyaW5nIGEgZnVsbC1mcmFtZSBmbHVzaCBvbmNlIHRoYXQgaXMgaW4KPiBwbGFj ZS4gIEJ1dCB3ZSBraW5kYSBuZWVkYSBhIHN0b3AtZ2FwIHNvbHV0aW9uLgo+IAo+IEkgaGFkIGNv bnNpZGVyZWQgYW4gaW4tZHJpdmVyIHNvbHV0aW9uIGZvciB0aGlzLCBidXQgdGhpbmdzIGdldCBh Cj4gYml0IHRyaWNreSBpZiB1c2Vyc3BhY2UgYW5kcyB1cCBjb21iaW5pbmcgZGlydHlmYiBpb2N0 bHMgd2l0aCBwYWdlLQo+IGZsaXBzLCBiZWNhdXNlIHdlIG5lZWQgdG8gc3luY2hyb25pemUgc2V0 dGluZyB2YXJpb3VzIENUTC5GTFVTSCBiaXRzCj4gd2l0aCBzZXR0aW5nIHRoZSBDVEwuU1RBUlQg Yml0LiAgKGllLiByZWFsbHkgYWxsIHdlIG5lZWQgdG8gZG8gZm9yCj4gY21kIG1vZGUgcGFuZWxz IGlzIGJhbmcgQ1RMLlNUQVJULCBidXQgaXMgdGhpcyBlbmRzIHVwIHJhY2luZyB3aXRoCj4gcGFn ZWZsaXBzIHNldHRpbmcgRkxVU0ggYml0cywgdGhlbiBiYWQgdGhpbmdzLikgIFRoZSBlYXNpZXN0 IHNvbG4KPiBpcyB0byB3cmFwIHRoaXMgdXAgYXMgYW4gYXRvbWljIGNvbW1pdCBhbmQgcmVseSBv biB0aGUgd29ya2VyIHRvCj4gc2VyaWFsaXplIHRoaW5ncy4gIEhlbmNlIGFkZGluZyBhbiBhdG9t aWMgZGlydHlmYiBoZWxwZXIuCj4gCj4gSSBndWVzcyBhdCBsZWFzdCB0aGUgaGVscGVyLCB3aXRo IHNvbWUgc21hbGwgYWRkaXRpb24gdG8gdHJhbnNsYXRlCj4gYW5kIHBhc3MtdGhydSB0aGUgZGly dHkgcmVjdChzKSBpcyB1c2VmdWwgdG8gdGhlIGZpbmFsIGF0b21pYyBkaXJ0eS0KPiByZWN0IHBy b3BlcnR5IHNvbHV0aW9uLiAgRGVwZW5kaW5nIG9uIGhvdyBmYXIgb2ZmIHRoYXQgaXMsIGEgc3Rv cC0KPiBnYXAgc29sdXRpb24gY291bGQgYmUgdXNlZnVsLgo+IAo+ICBkcml2ZXJzL2dwdS9kcm0v ZHJtX2F0b21pY19oZWxwZXIuYyB8IDY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9tc21fYXRvbWljLmMgICAgfCAgNSArKy0KPiAg ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZmIuYyAgICAgICAgfCAgMSArCj4gIGluY2x1ZGUvZHJt L2RybV9hdG9taWNfaGVscGVyLmggICAgIHwgIDQgKysrCj4gIGluY2x1ZGUvZHJtL2RybV9wbGFu ZS5oICAgICAgICAgICAgIHwgIDkgKysrKysKPiAgNSBmaWxlcyBjaGFuZ2VkLCA4NCBpbnNlcnRp b25zKCspLCAxIGRlbGV0aW9uKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9k cm1fYXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMK PiBpbmRleCBjMzU2NTQ1OTFjMTIuLmE1NzhkYzY4MWIyNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f YXRvbWljX2hlbHBlci5jCj4gQEAgLTM1MDQsNiArMzUwNCw3IEBAIHZvaWQgX19kcm1fYXRvbWlj X2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4g IAlpZiAoc3RhdGUtPmZiKQo+ICAJCWRybV9mcmFtZWJ1ZmZlcl9nZXQoc3RhdGUtPmZiKTsKPiAg Cj4gKwlzdGF0ZS0+ZGlydHkgPSBmYWxzZTsKPiAgCXN0YXRlLT5mZW5jZSA9IE5VTEw7Cj4gIAlz dGF0ZS0+Y29tbWl0ID0gTlVMTDsKPiAgfQo+IEBAIC0zODQ3LDYgKzM4NDgsNzEgQEAgaW50IGRy bV9hdG9taWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfbGVnYWN5X2dhbW1hX3NldCk7 Cj4gIAo+ICsvKioKPiArICogZHJtX2F0b21pY19oZWxwZXJfZGlydHlmYiAtIGhlbHBlciBmb3Ig ZGlydHlmYgo+ICsgKgo+ICsgKiBBIGhlbHBlciB0byBpbXBsZW1lbnQgZHJtX2ZyYW1lYnVmZmVy X2Z1bmNzOjpkaXJ0eQo+ICsgKi8KPiAraW50IGRybV9hdG9taWNfaGVscGVyX2RpcnR5ZmIoc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gKwkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2LCB1bnNpZ25lZCBmbGFncywKPiArCQkJICAgICAgdW5zaWduZWQgY29sb3IsIHN0cnVj dCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKPiArCQkJICAgICAgdW5zaWduZWQgbnVtX2NsaXBzKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggY3R4Owo+ICsJc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+ICsJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gKwlp bnQgcmV0ID0gMDsKPiArCj4gKwkvKgo+ICsJICogV2hlbiBjYWxsZWQgZnJvbSBpb2N0bCwgd2Ug YXJlIGludGVycnVwdGFibGUsIGJ1dCBub3Qgd2hlbgo+ICsJICogY2FsbGVkIGludGVybmFsbHkg KGllLiBkZWZpbyB3b3JrZXIpCj4gKwkgKi8KPiArCWRybV9tb2Rlc2V0X2FjcXVpcmVfaW5pdCgm Y3R4LAo+ICsJCWZpbGVfcHJpdiA/IERSTV9NT0RFU0VUX0FDUVVJUkVfSU5URVJSVVBUSUJMRSA6 IDApOwo+ICsKPiArCXN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhmYi0+ZGV2KTsKPiAr CWlmICghc3RhdGUpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ ICsJc3RhdGUtPmFjcXVpcmVfY3R4ID0gJmN0eDsKPiArCj4gK3JldHJ5Ogo+ICsJZHJtX2Zvcl9l YWNoX3BsYW5lKHBsYW5lLCBmYi0+ZGV2KSB7Cj4gKwkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq cGxhbmVfc3RhdGU7Cj4gKwo+ICsJCWlmIChwbGFuZS0+c3RhdGUtPmZiICE9IGZiKQo+ICsJCQlj b250aW51ZTsKPiArCj4gKwkJcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0 ZShzdGF0ZSwgcGxhbmUpOwo+ICsJCWlmIChJU19FUlIocGxhbmVfc3RhdGUpKSB7Cj4gKwkJCXJl dCA9IFBUUl9FUlIocGxhbmVfc3RhdGUpOwo+ICsJCQlnb3RvIG91dDsKPiArCQl9Cj4gKwo+ICsJ CXBsYW5lX3N0YXRlLT5kaXJ0eSA9IHRydWU7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX2F0b21p Y19ub25ibG9ja2luZ19jb21taXQoc3RhdGUpOwo+ICsKPiArb3V0Ogo+ICsJaWYgKHJldCA9PSAt RURFQURMSykgewo+ICsJCWRybV9hdG9taWNfc3RhdGVfY2xlYXIoc3RhdGUpOwo+ICsJCXJldCA9 IGRybV9tb2Rlc2V0X2JhY2tvZmYoJmN0eCk7Cj4gKwkJaWYgKCFyZXQpCj4gKwkJCWdvdG8gcmV0 cnk7Cj4gKwl9Cj4gKwo+ICsJZHJtX2F0b21pY19zdGF0ZV9wdXQoc3RhdGUpOwo+ICsKPiArCWRy bV9tb2Rlc2V0X2Ryb3BfbG9ja3MoJmN0eCk7Cj4gKwlkcm1fbW9kZXNldF9hY3F1aXJlX2Zpbmko JmN0eCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArCj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1f YXRvbWljX2hlbHBlcl9kaXJ0eWZiKTsKPiArCj4gIC8qKgo+ICAgKiBfX2RybV9hdG9taWNfaGVs cGVyX3ByaXZhdGVfZHVwbGljYXRlX3N0YXRlIC0gY29weSBhdG9taWMgcHJpdmF0ZSBzdGF0ZQo+ ICAgKiBAb2JqOiBDUlRDIG9iamVjdAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2F0b21pYy5jCj4gaW5kZXgg YmY1ZjhjMzlmMzRkLi5iYjU1YTA0OGU5OGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9tc21fYXRvbWljLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9taWMu Ywo+IEBAIC0yMDEsNyArMjAxLDEwIEBAIGludCBtc21fYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ICAJICogRmlndXJlIG91dCB3aGF0IGZlbmNlIHRvIHdhaXQgZm9yOgo+ ICAJICovCj4gIAlmb3JfZWFjaF9vbGRuZXdfcGxhbmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBv bGRfcGxhbmVfc3RhdGUsIG5ld19wbGFuZV9zdGF0ZSwgaSkgewo+IC0JCWlmICgobmV3X3BsYW5l X3N0YXRlLT5mYiAhPSBvbGRfcGxhbmVfc3RhdGUtPmZiKSAmJiBuZXdfcGxhbmVfc3RhdGUtPmZi KSB7Cj4gKwkJYm9vbCBzeW5jX2ZiID0gbmV3X3BsYW5lX3N0YXRlLT5mYiAmJgo+ICsJCQkoKG5l d19wbGFuZV9zdGF0ZS0+ZmIgIT0gb2xkX3BsYW5lX3N0YXRlLT5mYikgfHwKPiArCQkJIG5ld19w bGFuZV9zdGF0ZS0+ZGlydHkpOwoKV2h5IGRvIHlvdSBoYXZlIHRoaXMgb3B0aW1pemF0aW9uIGV2 ZW4gaGVyZT8gSW1vIGZsaXBwaW5nIHRvIHRoZSBzYW1lIGZiCnNob3VsZCByZXN1bHQgaW4gdGhl IGZiIGdldHRpbmcgZnVsbHkgdXBsb2FkZWQsIHdoZXRoZXIgeW91J3JlIGRvaW5nIGEKbGVnYWN5 IHBhZ2VfZmxpcCwgYW5kIGF0b21pYyBvbmUgb3IganVzdCBhIHBsYW5lIHVwZGF0ZS4KCklpcmMg c29tZSB1c2Vyc3BhY2UgZG9lcyB1c2UgdGhhdCBhcyBlc3NlbnRpYWxseSBhIGZ1bGwtcGxhbmUg ZnJvbnRidWZmZXIKcmVuZGVyaW5nIGZsdXNoIGFscmVhZHkuIElPVyBJIGRvbid0IHRoaW5rIHdl IG5lZWQgeW91cgpwbGFuZV9zdGF0ZS0+ZGlydHksIGl0J3MgaW1wbGllZCB0byBhbHdheXMgYmUg dHJ1ZSAtIHdoeSB3b3VsZCB1c2Vyc3BhY2UKZG8gYSBmbGlwIG90aGVyd2lzZT8KClRoZSBoZWxw ZXIgaXRzZWxmIHRvIG1hcCBkaXJ0eWZiIHRvIGEgbm9uYmxvY2tpbmcgYXRvbWljIGNvbW1pdCBs b29rcwpyZWFzb25hYmxlLCBidXQgbWlzc2VzIGEgYnVuY2ggb2YgdGhlIHRyaWNrZXJ5IGRpc2N1 c3NlZCB3aXRoIE5vcmFsZiBhbmQKb3RoZXJzIEkgdGhpbmsuCi1EYW5pZWwKCj4gKwkJaWYgKHN5 bmNfZmIpIHsKPiAgCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBtc21fZnJhbWVidWZm ZXJfYm8obmV3X3BsYW5lX3N0YXRlLT5mYiwgMCk7Cj4gIAkJCXN0cnVjdCBtc21fZ2VtX29iamVj dCAqbXNtX29iaiA9IHRvX21zbV9ibyhvYmopOwo+ICAJCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5j ZSA9IHJlc2VydmF0aW9uX29iamVjdF9nZXRfZXhjbF9yY3UobXNtX29iai0+cmVzdik7Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL21zbV9mYi5jCj4gaW5kZXggMGUwYzg3MjUyYWIwLi5hNWQ4ODJhMzRhMzMgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZmIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vbXNtX2ZiLmMKPiBAQCAtNjIsNiArNjIsNyBAQCBzdGF0aWMgdm9pZCBtc21fZnJhbWVi dWZmZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiAgc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgbXNtX2ZyYW1lYnVmZmVyX2Z1bmNzID0gewo+ ICAJLmNyZWF0ZV9oYW5kbGUgPSBtc21fZnJhbWVidWZmZXJfY3JlYXRlX2hhbmRsZSwKPiAgCS5k ZXN0cm95ID0gbXNtX2ZyYW1lYnVmZmVyX2Rlc3Ryb3ksCj4gKwkuZGlydHkgPSBkcm1fYXRvbWlj X2hlbHBlcl9kaXJ0eWZiLAo+ICB9Owo+ICAKPiAgI2lmZGVmIENPTkZJR19ERUJVR19GUwo+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0v ZHJtX2F0b21pY19oZWxwZXIuaAo+IGluZGV4IDI2YWFiYTU4ZDZjZS4uOWI3YTk1YzI2NDNkIDEw MDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9hdG9taWNfaGVscGVyLmgKPiArKysgYi9pbmNs dWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oCj4gQEAgLTE4Myw2ICsxODMsMTAgQEAgaW50IGRy bV9hdG9taWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ ICAJCQkJICAgICAgIHUxNiAqcmVkLCB1MTYgKmdyZWVuLCB1MTYgKmJsdWUsCj4gIAkJCQkgICAg ICAgdWludDMyX3Qgc2l6ZSwKPiAgCQkJCSAgICAgICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWly ZV9jdHggKmN0eCk7Cj4gK2ludCBkcm1fYXRvbWljX2hlbHBlcl9kaXJ0eWZiKHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwg dW5zaWduZWQgZmxhZ3MsCj4gKwkJCSAgICAgIHVuc2lnbmVkIGNvbG9yLCBzdHJ1Y3QgZHJtX2Ns aXBfcmVjdCAqY2xpcHMsCj4gKwkJCSAgICAgIHVuc2lnbmVkIG51bV9jbGlwcyk7Cj4gIHZvaWQg X19kcm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRy bV9wcml2YXRlX29iaiAqb2JqLAo+ICAJCQkJCQkgICAgIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0 ZSAqc3RhdGUpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BsYW5lLmggYi9p bmNsdWRlL2RybS9kcm1fcGxhbmUuaAo+IGluZGV4IGY3YmY0YTQ4YjFjMy4uMjk2ZmEyMmJkYTdh IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9wbGFuZS5oCj4gKysrIGIvaW5jbHVkZS9k cm0vZHJtX3BsYW5lLmgKPiBAQCAtNzYsNiArNzYsMTUgQEAgc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSB7Cj4gIAkgKi8KPiAgCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ICAKPiArCS8qKgo+ ICsJICogQGRpcnR5Ogo+ICsJICoKPiArCSAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhlIGZiIGNv bnRlbnRzIGhhdmUgY2hhbmdlZCBldmVuIHRob3VnaCB0aGUKPiArCSAqIGZiIGhhcyBub3QuICBU aGlzIGlzIG1vc3RseSBhIHN0b3AtZ2FwIHNvbHV0aW9uIHVudGlsIHdlIGhhdmUKPiArCSAqIGF0 b21pYyBkaXJ0eS1yZWN0KHMpIHByb3BlcnR5Lgo+ICsJICovCj4gKwlib29sIGRpcnR5Owo+ICsK PiAgCS8qKgo+ICAJICogQGZlbmNlOgo+ICAJICoKPiAtLSAKPiAyLjE0LjMKPiAKCi0tIApEYW5p ZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxv Zy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K