From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gustavo Padovan Subject: Re: [RFC v2 1/7] drm/atomic: initial support for asynchronous plane update Date: Fri, 28 Apr 2017 11:04:33 -0300 Message-ID: <20170428140433.GA2507@joana> References: <20170427151519.8308-1-gustavo@padovan.org> <20170427151519.8308-2-gustavo@padovan.org> <20170427153710.GO30290@intel.com> <20170427193537.GB2568@joana> <20170428085730.GU30290@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qt0-f193.google.com (mail-qt0-f193.google.com [209.85.216.193]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7587E6E7BC for ; Fri, 28 Apr 2017 14:04:37 +0000 (UTC) Received: by mail-qt0-f193.google.com with SMTP id c45so8548315qtb.0 for ; Fri, 28 Apr 2017 07:04:37 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20170428085730.GU30290@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: Gustavo Padovan , dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: dri-devel@lists.freedesktop.org SGkgVmlsbGUsCgoyMDE3LTA0LTI4IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51 eC5pbnRlbC5jb20+OgoKPiBPbiBUaHUsIEFwciAyNywgMjAxNyBhdCAwNDozNTozN1BNIC0wMzAw LCBHdXN0YXZvIFBhZG92YW4gd3JvdGU6Cj4gPiBIaSBWaWxsZSwKPiA+IAo+ID4gMjAxNy0wNC0y NyBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPjoKPiA+IAo+ ID4gPiBPbiBUaHUsIEFwciAyNywgMjAxNyBhdCAxMjoxNToxM1BNIC0wMzAwLCBHdXN0YXZvIFBh ZG92YW4gd3JvdGU6Cj4gPiA+ID4gRnJvbTogR3VzdGF2byBQYWRvdmFuIDxndXN0YXZvLnBhZG92 YW5AY29sbGFib3JhLmNvbT4KPiA+ID4gPiAKPiA+ID4gPiBJbiBzb21lIGNhc2VzLCBsaWtlIGN1 cnNvciB1cGRhdGVzLCBpdCBpcyBpbnRlcmVzdGluZyB0byB1cGRhdGUgdGhlCj4gPiA+ID4gcGxh bmUgaW4gYW4gYXN5bmNocm9ub3VzIGZhc2hpb24gdG8gYXZvaWQgYmlnIGRlbGF5cy4gVGhlIGN1 cnJlbnQgcXVldWVkCj4gPiA+ID4gdXBkYXRlIGNvdWxkIGJlIHN0aWxsIHdhaXRpbmcgZm9yIGEg ZmVuY2UgdG8gc2lnbmFsIGFuZCB0aHVzIGJsb2NrIGFueQo+ID4gPiA+IHN1YnNlcXVlbnQgdXBk YXRlIHVudGlsIGl0cyBzY2FuIG91dC4gSW4gY2FzZXMgbGlrZSB0aGlzIGlmIHdlIHVwZGF0ZSB0 aGUKPiA+ID4gPiBjdXJzb3Igc3luY2hyb25vdXNseSB0aHJvdWdoIHRoZSBhdG9taWMgQVBJIGl0 IHdpbGwgY2F1c2Ugc2lnbmlmaWNhbnQKPiA+ID4gPiBkZWxheXMgdGhhdCB3b3VsZCBldmVuIGJl IG5vdGljZWQgYnkgdGhlIGZpbmFsIHVzZXIuCj4gPiA+ID4gCj4gPiA+ID4gVGhpcyBwYXRjaCBj cmVhdGVzIGEgZmFzdCBwYXRoIHRvIGp1bXAgYWhlYWQgdGhlIGN1cnJlbnQgcXVldWVkIHN0YXRl IGFuZAo+ID4gPiA+IGRvIHNpbmdsZSBwbGFuZXMgdXBkYXRlcyB3aXRob3V0IGdvaW5nIHRocm91 Z2ggYWxsIGF0b21pYyBzdGVwIGluCj4gPiA+ID4gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0KCku Cj4gPiA+ID4gCj4gPiA+ID4gV2UgdGFrZSB0aGlzIHBhdGggZm9yIGxlZ2FjeSBjdXJzb3IgdXBk YXRlcy4gVXNlcnMgY2FuIGFsc28gc2V0IHRoZQo+ID4gPiA+IERSTV9NT0RFX0FUT01JQ19BU1lO Q19VUERBVEUgZmxhZyBvbiBhdG9taWMgdXBkYXRlcy4KPiA+ID4gPiAKPiA+ID4gPiBGb3Igbm93 IG9ubHkgc2luZ2xlIHBsYW5lIHVwZGF0ZXMgYXJlIHN1cHBvcnRlZCwgYnV0IHdlIHBsYW4gdG8g c3VwcG9ydAo+ID4gPiA+IG11bHRpcGxlIHBsYW5lcyB1cGRhdGVzIGFuZCBhc3luYyBQYWdlRmxp cHMgdGhyb3VnaCB0aGlzIGludGVyZmFjZSBhcyB3ZWxsCj4gPiA+ID4gaW4gdGhlIG5lYXIgZnV0 dXJlLgo+ID4gPiA+IAo+ID4gPiA+IHYyOgo+ID4gPiA+IAktIGFsbG93IHVwZGF0ZXMgZXZlbiBp ZiB0aGVyZSBpcyBhIHF1ZXVlZCB1cGRhdGUgZm9yIHRoZSBzYW1lCj4gPiA+ID4gCXBsYW5lLgo+ ID4gPiA+ICAgICAgICAgLSBmaXhlcyBvbiB0aGUgZG9jdW1lbnRhdGlvbiAoRW1pbCBWZWxpa292 KQo+ID4gPiA+ICAgICAgICAgLSB1bmNvbmRpdGlvbmFsbHkgY2FsbCAtPmF0b21pY19hc3luY191 cGRhdGUgKEVtaWwgVmVsaWtvdikKPiA+ID4gPiAgICAgICAgIC0gY2hlY2sgZm9yIC0+YXRvbWlj X2FzeW5jX3VwZGF0ZSBlYXJsaWVyIChEYW5pZWwgVmV0dGVyKQo+ID4gPiA+ICAgICAgICAgLSBt YWtlIC0+YXRvbWljX2FzeW5jX2NoZWNrKCkgdGhlIGxhc3Qgc3RlcCAoRGFuaWVsIFZldHRlcikK PiA+ID4gPiAgICAgICAgIC0gYWRkIEFTWU5DX1VQREFURSBmbGFnIChFcmljIEFuaG9sdCkKPiA+ ID4gPiAgICAgICAgIC0gdXBkYXRlIHN0YXRlIGluIGNvcmUgYWZ0ZXIgLT5hdG9taWNfYXN5bmNf dXBkYXRlIChFcmljIEFuaG9sdCkKPiA+ID4gPiAJLSB1cGRhdGUgZG9jcyAoRXJpYyBBbmhvbHQp Cj4gPiA+ID4gCj4gPiA+ID4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwu Y29tPgo+ID4gPiA+IENjOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+Cj4gPiA+ID4g Q2M6IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Cj4gPiA+ID4gU2lnbmVkLW9mZi1ieTog R3VzdGF2byBQYWRvdmFuIDxndXN0YXZvLnBhZG92YW5AY29sbGFib3JhLmNvbT4KPiA+ID4gPiAt LS0KPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYyAgICAgICAgICAgICB8IDUw ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiA+ID4gIGRyaXZlcnMvZ3B1L2Ry bS9kcm1fYXRvbWljX2hlbHBlci5jICAgICAgfCA0OCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiA+ID4gPiAgaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oICAgICAgICAgICAgICAgICB8 ICAyICsrCj4gPiA+ID4gIGluY2x1ZGUvZHJtL2RybV9hdG9taWNfaGVscGVyLmggICAgICAgICAg fCAgMiArKwo+ID4gPiA+ICBpbmNsdWRlL2RybS9kcm1fbW9kZXNldF9oZWxwZXJfdnRhYmxlcy5o IHwgNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gPiA+ICBpbmNsdWRlL3VhcGkv ZHJtL2RybV9tb2RlLmggICAgICAgICAgICAgIHwgIDQgKystCj4gPiA+ID4gIDYgZmlsZXMgY2hh bmdlZCwgMTUwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiA+ID4gPiAKPiA+ID4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fYXRvbWljLmMKPiA+ID4gPiBpbmRleCAzMDIyOWFiLi43YjYwY2Y4IDEwMDY0NAo+ID4g PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKPiA+ID4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gPiA+ID4gQEAgLTc3LDYgKzc3LDcgQEAgZHJtX2F0 b21pY19zdGF0ZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSkKPiA+ID4gPiAgCSAqIHNldHRpbmcgdGhpcyBhcHByb3ByaWF0ZWx5Pwo+ ID4gPiA+ICAJICovCj4gPiA+ID4gIAlzdGF0ZS0+YWxsb3dfbW9kZXNldCA9IHRydWU7Cj4gPiA+ ID4gKwlzdGF0ZS0+YXN5bmNfdXBkYXRlID0gdHJ1ZTsKPiA+ID4gPiAgCj4gPiA+ID4gIAlzdGF0 ZS0+Y3J0Y3MgPSBrY2FsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2NydGMsCj4gPiA+ID4gIAkJ CSAgICAgICBzaXplb2YoKnN0YXRlLT5jcnRjcyksIEdGUF9LRVJORUwpOwo+ID4gPiA+IEBAIC02 MzEsNiArNjMyLDUxIEBAIHN0YXRpYyBpbnQgZHJtX2F0b21pY19jcnRjX2NoZWNrKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKPiA+ID4gPiAgCXJldHVybiAwOwo+ID4gPiA+ICB9Cj4gPiA+ID4gIAo+ ID4gPiA+ICtzdGF0aWMgYm9vbCBkcm1fYXRvbWljX2FzeW5jX2NoZWNrKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSkKPiA+ID4gPiArewo+ID4gPiA+ICsJc3RydWN0IGRybV9jcnRjICpj cnRjOwo+ID4gPiA+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ID4gPiA+ ICsJc3RydWN0IGRybV9wbGFuZSAqX19wbGFuZSwgKnBsYW5lID0gTlVMTDsKPiA+ID4gPiArCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKl9fcGxhbmVfc3RhdGUsICpwbGFuZV9zdGF0ZSA9IE5VTEw7 Cj4gPiA+ID4gKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyAqZnVuY3M7Cj4g PiA+ID4gKwlpbnQgaSwgbl9wbGFuZXMgPSAwOwo+ID4gPiA+ICsKPiA+ID4gPiArCWZvcl9lYWNo X25ld19jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4gPiA+ID4g KwkJaWYgKGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpKQo+ID4gPiA+ ICsJCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJZm9yX2Vh Y2hfbmV3X3BsYW5lX2luX3N0YXRlKHN0YXRlLCBfX3BsYW5lLCBfX3BsYW5lX3N0YXRlLCBpKSB7 Cj4gPiA+ID4gKwkJbl9wbGFuZXMrKzsKPiA+ID4gPiArCQlwbGFuZSA9IF9fcGxhbmU7Cj4gPiA+ ID4gKwkJcGxhbmVfc3RhdGUgPSBfX3BsYW5lX3N0YXRlOwo+ID4gPiA+ICsJfQo+ID4gPiA+ICsK PiA+ID4gPiArCS8qIEZJWE1FOiB3ZSBzdXBwb3J0IHNpbmdsZSBwbGFuZSB1cGRhdGVzIGZvciBu b3cgKi8KPiA+ID4gPiArCWlmICghcGxhbmUgfHwgbl9wbGFuZXMgIT0gMSkKPiA+ID4gPiArCQly ZXR1cm4gZmFsc2U7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJZnVuY3MgPSBwbGFuZS0+aGVscGVyX3By aXZhdGU7Cj4gPiA+ID4gKwlpZiAoIWZ1bmNzLT5hdG9taWNfYXN5bmNfdXBkYXRlKQo+ID4gPiA+ ICsJCXJldHVybiBmYWxzZTsKPiA+ID4gPiArCj4gPiA+ID4gKwlpZiAocGxhbmVfc3RhdGUtPmZl bmNlKQo+ID4gPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ID4gPiArCj4gPiA+ID4gKwlpZiAoIXBs YW5lLT5zdGF0ZS0+Y3J0YyB8fCAocGxhbmUtPnN0YXRlLT5jcnRjICE9IHBsYW5lX3N0YXRlLT5j cnRjKSkKPiA+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJLyogTm8g Y29uZmlndXJpbmcgbmV3IHNjYWxpbmcgaW4gdGhlIGFzeW5jIHBhdGguICovCj4gPiA+IAo+ID4g PiBUaG9zZSBjaGVja3MgYXJlbid0IHJlYWxseSBhYm91dCBzY2FsaW5nLiBXZWxsLCB0aGV5IGFy ZSBhbHNvIGFib3V0Cj4gPiA+IHNjYWxpbmcsIGJ1dCB0aGV5J3JlIG1haW5seSBhYm91dCBjaGFu Z2luZyBzaXplLgo+ID4gCj4gPiBJIGp1c3QgY29waWVkIHRoZSBjb21tZW50IGZyb20gdGhlIHBy ZXZpb3VzIGNvZGUgaW4gdGhlIGRyaXZlcnMuLi4KPiA+IEkgY2FuIGZpeCBpdC4KPiA+IAo+ID4g PiAKPiA+ID4gV2hhdCBJIGRvbid0IHJlYWxseSB1bmRlcnN0YW5kIGlzIHdoeSB3ZSdyZSBlbmZv cmNpbmcgdGhlc2UgcmVzdHJpY3Rpb25zCj4gPiA+IGluIHRoZSBjb3JlIGJ1dCBsZWF2aW5nIG90 aGVyIHJlc3RyaWN0aW9ucyB1cCB0byB0aGUgZHJpdmVyLiBJIGRvbid0IHNlZQo+ID4gPiBzaXpl IGNoYW5nZXMgYXMgYW55dGhpbmcgcmVhbGx5IHNwZWNpYWwgY29tcGFyZWQgdG8gbWFueSBvZiB0 aGUgb3RoZXIKPiA+ID4gcmVzdHJpY3Rpb25zIHRoYXQgd291bGQgbm93IGJlIHVwIHRvIGVhY2gg ZHJpdmVyLgo+ID4gCj4gPiBCZWNhdXNlIEkgZXh0cmFjdGVkIHdoYXQgd2FzIGNvbW1vbiBiZXR3 ZWVuIG1zbSwgdmM0IGFuZCBpOTE1IG9uIHRoZWlyCj4gPiBsZWdhY3kgY3Vyc29yIHVwZGF0ZSBj YWxscy4gSSBkaWRuJ3Qgd2FudCB0byBlbmZvcmNlIGFueXRoaW5nIGVsc2UgaW4KPiA+IGNvcmUg Zm9yIG5vdy4KPiA+IAo+ID4gPiAKPiA+ID4gSWYgeW91J3JlIHJlYWxseSBhZnRlciBzb21lIGxv d2VzdCBjb21tb24gZGVub21pbmF0b3IgYXMgZmFyIGFzCj4gPiA+IGV4cG9zZWQgY2FwYWJpbGl0 aWVzIGFyZSBjb25jZXJuZWQgdGhlbiBJIHRoaW5rIHRoZSBjb3JlIHNob3VsZCBkbwo+ID4gPiBt b3JlIGNoZWNraW5nLiBPVE9IIGlmIHlvdSdyZSBub3QgaW50ZXJlc3RlZCBsaW1pdGluZyB3aGF0 IGVhY2gKPiA+ID4gZHJpdmVyIGV4cG9zZXMgdGhlbiBJIGRvbid0IHNlZSB3aHkgdGhlIGNvcmUg Y2hlY2tzIGFueXRoaW5nIGF0IGFsbC4KPiA+IAo+ID4gSSB0aGluayBhIGNvbW1vbiBkZW5vbWlu YXRvciBpcyB3aGF0IHdlIHdhbnQgYnV0IHdlIG9ubHkgaGF2ZSAzIGRyaXZlcnMKPiA+IHVzaW5n IGl0IGF0IHRoZSBtb21lbnQuIFdlIGNhbiBsb29rIGZvciBtb3JlIGNoZWNrcyB0aGF0IHNob3Vk IGJlIGRvbmUKPiA+IGlzIGNvcmUuIEFueSBzdWdnZXN0aW9ucz8KPiAKPiBNeSBzdWdnZXN0aW9u IGlzIHRoYXQgd2Ugc2hvdWxkIGNvbWUgdXAgd2l0aCBzb21lIHByb3BlciBqdXN0aWZpY2F0aW9u Cj4gZm9yIHRoZSBjaGVja3MgdGhhdCBhcmUgZG9uZSBieSB0aGUgY29yZS4gT3RoZXJ3aXNlIEkg dGhpbmsgYWxsIHRoZQo+IGNoZWNrcyBzaG91bGQgYmUgaW4gdGhlIGRyaXZlcnMgYmVjYXVzZSB0 aGUgZHJpdmVycyBjYW4gYWN0dWFsbHkKPiBqdXN0aWZ5IHRoZW0sIG9yIGF0IGxlYXN0IHRoZXkg c2hvdWxkIGJlIGFibGUgdG8uCgpJIGFncmVlIHdpdGggeW91LCB3ZSBjYW4ndCBqdXN0IG1peCB0 aGVzZSBjaGVja3MuIEknbGwgbW92ZSB0aGUgZHJpdmVycwpvbmUgYW5kIGtlZXAgb25seSB0aGUg Y29yZSBvbmVzIGhlcmUuCgo+IAo+ID4gCj4gPiA+IAo+ID4gPiA+ICsJaWYgKHBsYW5lLT5zdGF0 ZS0+Y3J0Y193ICE9IHBsYW5lX3N0YXRlLT5jcnRjX3cgfHwKPiA+ID4gPiArCSAgICBwbGFuZS0+ c3RhdGUtPmNydGNfaCAhPSBwbGFuZV9zdGF0ZS0+Y3J0Y19oIHx8Cj4gPiA+ID4gKwkgICAgcGxh bmUtPnN0YXRlLT5zcmNfdyAhPSBwbGFuZV9zdGF0ZS0+c3JjX3cgfHwKPiA+ID4gPiArCSAgICBw bGFuZS0+c3RhdGUtPnNyY19oICE9IHBsYW5lX3N0YXRlLT5zcmNfaCkgewo+ID4gPiA+ICsJCXJl dHVybiBmYWxzZTsKPiA+ID4gPiArCX0KPiA+ID4gPiArCj4gPiA+ID4gKwlyZXR1cm4gIWZ1bmNz LT5hdG9taWNfYXN5bmNfY2hlY2socGxhbmUsIHBsYW5lX3N0YXRlKTsKPiA+ID4gPiArfQo+ID4g PiA+ICsKPiA+ID4gPiAgc3RhdGljIHZvaWQgZHJtX2F0b21pY19jcnRjX3ByaW50X3N0YXRlKHN0 cnVjdCBkcm1fcHJpbnRlciAqcCwKPiA+ID4gPiAgCQljb25zdCBzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKnN0YXRlKQo+ID4gPiA+ICB7Cj4gPiA+IDxzbmlwPiAKPiA+ID4gPiAgLyoqCj4gPiA+ID4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaCBiL2luY2x1ZGUvdWFwaS9k cm0vZHJtX21vZGUuaAo+ID4gPiA+IGluZGV4IDhjNjdmYzAuLjdjMDY3Y2EgMTAwNjQ0Cj4gPiA+ ID4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5oCj4gPiA+ID4gKysrIGIvaW5jbHVk ZS91YXBpL2RybS9kcm1fbW9kZS5oCj4gPiA+ID4gQEAgLTY0NiwxMyArNjQ2LDE1IEBAIHN0cnVj dCBkcm1fbW9kZV9kZXN0cm95X2R1bWIgewo+ID4gPiA+ICAjZGVmaW5lIERSTV9NT0RFX0FUT01J Q19URVNUX09OTFkgMHgwMTAwCj4gPiA+ID4gICNkZWZpbmUgRFJNX01PREVfQVRPTUlDX05PTkJM T0NLICAweDAyMDAKPiA+ID4gPiAgI2RlZmluZSBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNF VCAweDA0MDAKPiA+ID4gPiArI2RlZmluZSBEUk1fTU9ERV9BVE9NSUNfQVNZTkNfVVBEQVRFIDB4 MDgwMAo+ID4gPiAKPiA+ID4gV2hhdCBleGFjdGx5IGlzIHRoYXQgZmxhZyBzdXBwb3NlZCB0byBt ZWFuPwo+ID4gCj4gPiBJIGRvbid0IHRoaW5rIEkgcHJvdmlkZWQgYSBnb29kIGV4cGxhbmF0aW9u IGZvciBpdCwgc29ycnkuIFRoaXMgZmxhZwo+ID4gdGVsbHMgY29yZSB0byBqdW1wIGFoZWFkIHRo ZSBxdWV1ZWQgdXBkYXRlIGlmIHRoZSBjb25kaXRpb25zIGluIAo+ID4gZHJtX2F0b21pY19hc3lu Y19jaGVjaygpIGFyZSBtZXQuIFVzZWZ1bCBmb3IgY3Vyc29ycyBhbmQgYXN5bmMgUGFnZUZsaXBz Cj4gPiBvdmVyIHRoZSBhdG9taWMgaW9jdGwuCj4gCj4gSU1PIG1peGluZyBuZWEgdWFwaSBpbiB0 aGlzIHBhdGNoIGlzIGEgbWlzdGFrZS4gSXQgc2hvdWxkIGJlIHNlcGFyYXRlCj4gYW5kIHRoZSBp bnRlbnQgb2YgdGhlIG5ldyBmbGFnIHNob3VsZCBiZSB3ZWxsIGRvY3VtZW50ZWQuCgpZZXMsIGEg c2VwYXJhdGVkIHBhdGNoIGlzIGEgZ29vZCBpZGVhLgoKR3VzdGF2bwpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK