From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [passive aggressive RESEND 1/2] drm/i915: Mark CPU cache as dirty on every transition for CPU writes Date: Fri, 16 Jun 2017 13:59:38 +0100 Message-ID: <237d6aaa-e3c3-9331-53bd-3a865afd4df5@linux.intel.com> References: <20170615123850.26843-1-chris@chris-wilson.co.uk> <149761240214.20055.10161546174567842344@mail.alporthouse.com> <2c73fc1c-5d18-ff4c-1033-96f8c98798be@linux.intel.com> <149761523579.20055.12787594416278113763@mail.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 508EC6E8C3 for ; Fri, 16 Jun 2017 12:59:41 +0000 (UTC) In-Reply-To: <149761523579.20055.12787594416278113763@mail.alporthouse.com> Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: Dongwon Kim List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE2LzA2LzIwMTcgMTM6MTMsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdW90aW5nIFR2cnRr byBVcnN1bGluICgyMDE3LTA2LTE2IDEzOjA1OjIxKQo+Pgo+PiBPbiAxNi8wNi8yMDE3IDEyOjI2 LCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4+PiBRdW90aW5nIFR2cnRrbyBVcnN1bGluICgyMDE3LTA2 LTE1IDE1OjI4OjEwKQo+Pj4+Cj4+Pj4gT24gMTUvMDYvMjAxNyAxMzozOCwgQ2hyaXMgV2lsc29u IHdyb3RlOgo+Pj4+PiBDdXJyZW50bHksIHdlIG9ubHkgbWFyayB0aGUgQ1BVIGNhY2hlIGFzIGRp cnR5IGlmIHdlIHNraXAgYSBjbGZsdXNoLgo+Pj4+PiBUaGlzIGxlYWRzIHRvIHNvbWUgY29uZnVz aW9uIHdoZXJlIHdlIGhhdmUgdG8gYXNrIGlmIHRoZSBvYmplY3QgaXMgaW4KPj4+Pj4gdGhlIHdy aXRlIGRvbWFpbiBvciBtaXNzZWQgYSBjbGZsdXNoLiBJZiB3ZSBhbHdheXMgbWFyayB0aGUgY2Fj aGUgYXMKPj4+Pj4gZGlydHksIHRoaXMgYmVjb21lcyBhIG11Y2ggc2ltcGx5IHF1ZXN0aW9uIHRv IGFuc3dlci4KPj4+Pj4KPj4+Pj4gVGhlIGdvYWwgcmVtYWlucyB0byBkbyBhcyBmZXcgY2xmbHVz aGVzIGFzIHJlcXVpcmVkIGFuZCB0byBkbyB0aGVtIGFzCj4+Pj4+IGxhdGUgYXMgcG9zc2libGUs IGluIHRoZSBob3BlIG9mIGRlZmVycmluZyB0aGUgd29yayB0byBhIGt0aHJlYWQgYW5kIG5vdAo+ Pj4+PiBibG9jayB0aGUgY2FsbGVyIChlLmcuIGV4ZWNidWYsIGZsaXBzKS4KPj4+Pj4KPj4+Pj4g djI6IEFsd2F5cyBjYWxsIGNsZmx1c2ggYmVmb3JlIEdQVSBleGVjdXRpb24gd2hlbiB0aGUgY2Fj aGVfZGlydHkgZmxhZwo+Pj4+PiBpcyBzZXQuIFRoaXMgbWF5IGNhdXNlIHNvbWUgZXh0cmEgd29y ayBvbiBsbGMgc3lzdGVtcyB0aGF0IG1pZ3JhdGUgZGlydHkKPj4+Pj4gYnVmZmVycyBiYWNrIGFu ZCBmb3J0aCAtIGJ1dCB3ZSBkbyB0cnkgdG8gbGltaXQgdGhhdCBieSBvbmx5IHNldHRpbgo+Pj4+ Cj4+Pj4gc2V0dGluKmcqCj4+Pj4KPj4+PiBTdWJqZWN0IHNvdW5kZWQgbGlrZSByZXZpZXdlciBp cyB3YW50ZWQgc28gSSB0aG91Z2h0IHRvIGdpdmUgaXQgYSB0cnkuCj4+Pj4KPj4+Pj4gY2FjaGVf ZGlydHkgYXQgdGhlIGVuZCBvZiB0aGUgZ3B1IHNlcXVlbmNlLgo+Pj4+Pgo+Pj4+PiB2MzogQWx3 YXlzIG1hcmsgdGhlIGNhY2hlIGFzIGRpcnR5IHVwb24gYSBsZXZlbCBjaGFuZ2UsIGFzIHdlIG5l ZWQgdG8KPj4+Pj4gaW52YWxpZGF0ZSBhbnkgc3RhbGUgY2FjaGVsaW5lcyBkdWUgdG8gZXh0ZXJu YWwgd3JpdGVzLgo+Pj4+Pgo+Pj4+PiBSZXBvcnRlZC1ieTogRG9uZ3dvbiBLaW0gPGRvbmd3b24u a2ltQGludGVsLmNvbT4KPj4+Pj4gRml4ZXM6IGE2YTdjYzRiN2RiNiAoImRybS9pOTE1OiBBbHdh eXMgZmx1c2ggdGhlIGRpcnR5IENQVSBjYWNoZSB3aGVuIHBpbm5pbmcgdGhlIHNjYW5vdXQiKQo+ Pj4+PiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51 az4KPj4+Pj4gQ2M6IERvbmd3b24gS2ltIDxkb25nd29uLmtpbUBpbnRlbC5jb20+Cj4+Pj4+IENj OiBNYXR0IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgo+Pj4+PiBUZXN0ZWQtYnk6 IERvbmd3b24gS2ltIDxkb25nd29uLmtpbUBpbnRlbC5jb20+Cj4+Pj4+IC0tLQo+Pj4+PiAgICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgICAgICAgIHwgNzYgKysr KysrKysrKysrKystLS0tLS0tLS0tCj4+Pj4+ICAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9jbGZsdXNoLmMgICAgICAgICAgfCAxNSArKystLQo+Pj4+PiAgICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jICAgICAgIHwgMjEgKysrLS0tLQo+Pj4+PiAg ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1faW50ZXJuYWwuYyAgICAgICAgIHwgIDMg Ky0KPj4+Pj4gICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYyAgICAg ICAgICB8ICA1ICstCj4+Pj4+ICAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVn ZV9nZW1fb2JqZWN0LmMgfCAgMyArLQo+Pj4+PiAgICAgNiBmaWxlcyBjaGFuZ2VkLCA2NyBpbnNl cnRpb25zKCspLCA1NiBkZWxldGlvbnMoLSkKPj4+Pj4KPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jCj4+Pj4+IGluZGV4IDMxY2JlNzgxNzFhOS4uYjE1MDRhODI5YzZhIDEwMDY0NAo+Pj4+PiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPj4+Pj4gQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIHZv aWQgaTkxNV9nZW1fZmx1c2hfZnJlZV9vYmplY3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KTsKPj4+Pj4gICAgIAo+Pj4+PiAgICAgc3RhdGljIGJvb2wgY3B1X3dyaXRlX25lZWRzX2Ns Zmx1c2goc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4+Pj4gICAgIHsKPj4+Pj4g LSAgICAgaWYgKG9iai0+YmFzZS53cml0ZV9kb21haW4gPT0gSTkxNV9HRU1fRE9NQUlOX0NQVSkK Pj4+Pj4gKyAgICAgaWYgKG9iai0+Y2FjaGVfZGlydHkpCj4+Pj4+ICAgICAgICAgICAgICAgICBy ZXR1cm4gZmFsc2UgPgo+Pj4+PiAgICAgICAgIGlmICghaTkxNV9nZW1fb2JqZWN0X2lzX2NvaGVy ZW50KG9iaikpCj4+Pj4+IEBAIC0yMzMsNiArMjMzLDE0IEBAIGk5MTVfZ2VtX29iamVjdF9nZXRf cGFnZXNfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+Pj4+PiAgICAgICAg IHJldHVybiBzdDsKPj4+Pj4gICAgIH0KPj4+Pj4gICAgIAo+Pj4+PiArc3RhdGljIHZvaWQgX19z dGFydF9jcHVfd3JpdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4+Pj4gK3sK Pj4+Pj4gKyAgICAgb2JqLT5iYXNlLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7 Cj4+Pj4+ICsgICAgIG9iai0+YmFzZS53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BV Owo+Pj4+PiArICAgICBpZiAoY3B1X3dyaXRlX25lZWRzX2NsZmx1c2gob2JqKSkKPj4+Pj4gKyAg ICAgICAgICAgICBvYmotPmNhY2hlX2RpcnR5ID0gdHJ1ZTsKPj4+Pgo+Pj4+IEkgZmluZCB0aGUg bG9naWMgaGVyZSBxdWl0ZSBoYXJkIHRvIHVuZGVyc3RhbmQgYmVjYXVzZQo+Pj4+IGNwdV93cml0 ZV9uZWVkc19jbGZsdXNoIGlzIGFjdHVhbGx5IGNvbnN1bHRpbmcgb2JqLT5jYWNoZV9kaXJ0eSBz byBpdCdzCj4+Pj4gYWxsIGEgYml0IHJlY3Vyc2l2ZS4KPj4+Pgo+Pj4+IElmIHdlIHN0YXJ0IGEg Y3B1IHdyaXRlIG9uIGFuIG9iamVjdCB3aGljaCBoYXMgYmVlbiBjbGZsdXNoZWQsIGJ1dAo+Pj4+ IG90aGVyd2lzZSBuZWVkcyBjbGZsdXNoaW5nIGxpa2UgcGluX2Rpc3BsYXkgLSB3aGF0IGlzIHRo ZSBjb3JyZWN0IHRoaW5nCj4+Pj4gdG8gZG8/IE5vdCBzZXQgb2JqLT5jYWNoZV9kaXJ0eSB0byB0 cnVlPwo+Pj4KPj4+IE5vLCB3ZSB3YW50IGNhY2hlX2RpcnR5IHRvIGJlIHRydWUgYXMgd2Ugd2Fu dCBhIGNsZmx1c2ggYWZ0ZXIgdGhlIHdyaXRlLgo+Pgo+PiBSaWdodCwgYnV0IEkgdGhpbmsgaXQg d2lsbCBiZSBmYWxzZS4KPj4KPj4gMC4gcGluX2Rpc3BsYXk9dHJ1ZQo+PiAxLiBjbGZsdXNoIGZy b20gc29tZXdoZXJlOiBjYWNoZV9kaXJ0eT1mYWxzZQo+PiAyLiBfX3N0YXJ0X3dyaXRlOiBjcHVf d3JpdGVfbmVlZHNfY2xmbHVzaCByZXR1cm5zIGZhbHNlIC0+Cj4+IGNhY2hlX2RpcnR5PWZhbHNl IGFmdGVyIF9fc3RhcnRfd3JpdGUKPiAKPiA/IGNwdV93cml0ZV9uZWVkc19jbGZsdXNoKCkgcmV0 dXJucyB0cnVlIGlmIGVpdGhlciB0aGUgb2JqZWN0IGlzIG5vdAo+IGNhY2hlIGNvaGVyZW50IG9y IHBpbl9kaXNwbGF5IGlzIHNldC4gSXQncyB0aGF0IHdlIHJldHVybiB0cnVlIGZvcgo+IHBpbl9k aXNwbGF5IGJlaW5nIHNldCB0aGF0IGlzIHRoZSBiaWcgaGFtbWVyLgoKTXkgYmFkLi4gd2FzIGlt YWdpbmluZyB0aGluZ3MuIDooCgo+Pj4gUmVhbGx5IHRoYXQgb2JqLT5waW5fZGlzcGxheSBvbmx5 IGV4aXN0cyB0aGVyZSBmb3IgdGhlIHRyYW5zaXRpb24gaW5zaWRlCj4+PiBzZXQtY2FjaGUtbGV2 ZWwgZm9yIGk5MTVfZ2VtX29iamVjdF9waW5fdG9fZGlzcGxheV9wbGFuZS4gT3V0c2lkZSBvZgo+ Pj4gc2V0LWNhY2hlLWxldmVsIG9iai0+Y2FjaGVfY29oZXJlbnQgd2lsbCBiZSBhY2N1cmF0ZS4g SSBjYW4gcGVuY2lsIGluCj4+PiBtYWtpbmcgeWV0IGFub3RoZXIgY2hhbmdlIHRvIGxpbWl0IHVz ZSBvZiBvYmotPnBpbl9kaXNwbGF5IGFnYWluLgo+Pgo+PiBMaWtlIG1vZGlmeWluZyBvYmotPmNh Y2hlX2NvaGVyZW50IG9uIHBpbi91bnBpbiB0byBkaXNwbGF5Pwo+IAo+IFllcywgd2UganVzdCBo YXZlIHRvIGNvbnNpZGVyIHdoZW4gdG8gbWFyayB0aGUgY2FjaGUgYXMgZGlydHkgZm9yIHRoZQo+ IGNsZmx1c2ggYW5kIGZvciB0aGF0IHdlIHRha2UgcGluX2Rpc3BsYXkgaW50byBjb25zaWRlcmF0 aW9uIChtb3N0bHkgZm9yCj4gcGFyYW5vaWEpLgo+IAo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICAg ICBzdGF0aWMgdm9pZAo+Pj4+PiAgICAgX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+Pj4+PiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMsCj4+Pj4+IEBAIC0yNDgsOCArMjU2 LDcgQEAgX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAo+Pj4+PiAgICAgICAgICAgICAhaTkxNV9nZW1fb2JqZWN0X2lzX2NvaGVy ZW50KG9iaikpCj4+Pj4+ICAgICAgICAgICAgICAgICBkcm1fY2xmbHVzaF9zZyhwYWdlcyk7Cj4+ Pj4+ICAgICAKPj4+Pj4gLSAgICAgb2JqLT5iYXNlLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RP TUFJTl9DUFU7Cj4+Pj4+IC0gICAgIG9iai0+YmFzZS53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9E T01BSU5fQ1BVOwo+Pj4+PiArICAgICBfX3N0YXJ0X2NwdV93cml0ZShvYmopOwo+Pj4+PiAgICAg fQo+Pj4+PiAgICAgCj4+Pj4+ICAgICBzdGF0aWMgdm9pZAo+Pj4+PiBAQCAtNjg0LDYgKzY5MSwx MiBAQCBpOTE1X2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCj4+Pj4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5zaXplLCAmYXJncy0+aGFuZGxlKTsK Pj4+Pj4gICAgIH0KPj4+Pj4gICAgIAo+Pj4+PiArc3RhdGljIGJvb2wgZ3B1X3dyaXRlX25lZWRz X2NsZmx1c2goc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4+Pj4gK3sKPj4+Pj4g KyAgICAgcmV0dXJuICEob2JqLT5jYWNoZV9sZXZlbCA9PSBJOTE1X0NBQ0hFX05PTkUgfHwKPj4+ Pj4gKyAgICAgICAgICAgICAgb2JqLT5jYWNoZV9sZXZlbCA9PSBJOTE1X0NBQ0hFX1dUKTsKPj4+ Pgo+Pj4+IEhtLCBpcyB0aGlzIHJldmVyc2VkPyBPbiBMTEMgSSB3b3VsZCBhc3N1bWUgd2UgZG9u J3QgbmVlZCBleHBsaWNpdAo+Pj4+IGNsZmx1c2gsIGJ1dCBwZXJoYXBzIEkgYW0gbWlzdW5kZXJz dGFuZGluZyBzb21ldGhpbmcuCj4+Pgo+Pj4gSXQncyBhY2N1cmF0ZS4gV2UgYWxsIHNoYXJlZCB0 aGUgc2FtZSBtaXN1bmRlcnN0YW5kaW5nIGZvciBzZXZlcmFsCj4+PiB5ZWFycy4gVGhlIGdwdSB3 cml0ZXMgdmlhIHRoZSByaW5nIChhbmQgdGhlIHNoYXJlZCBsbGMpIHNvIGlmIHdlCj4+PiB0cmFu c2l0aW9uIHRvIGFjY2Vzc2luZyB0aGUgbWVtb3J5IGRpcmVjdGx5IGZyb20gdGhlIGNwdSwgd2Ug YnlwYXNzIHRoZQo+Pj4gc2hhcmVkIGxsYyBhbmQgb3VyIGRhdGEgaXMgc3RhbGUuIFNvIGFmdGVy IHVzaW5nIExMQywgYmUgdGhhdCBlaXRoZXIKPj4+IHdpdGggQ1BVIHdyaXRlcyBvciBHUFUgd3Jp dGVzLCB3ZSBuZWVkIHRvIGNsZmx1c2guCj4+Cj4+IFdoeSBkb2VzIGFjY2Vzc2luZyB0aGUgbWVt b3J5IGZyb20gdGhlIENQVSBieXBhc3NlcyB0aGUgTExDPyBPciB5b3UgbWVhbgo+PiBpZiB3ZSBh Y2Nlc3MgaW4gYSB3YXkgdGhhdCBieXBhc3NlcyB0aGUgTExDIGFuZCBpZiBzbyB3aGljaCB3YXlz IGFyZSB0aGF0Pwo+IAo+IEFueSB1bmNhY2hlZCBhY2Nlc3MgKFdDIGZyb20gQ1BVIG9yIGZyb20g c2Nhbm91dCkgYnlwYXNzIHRoZSBMTEMuCgpUaGluayBJIGdvdCBpdCBub3csIHRoYW5rcy4KCj4+ Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4gICAgIC8qKgo+Pj4+PiAgICAgICogQ3JlYXRlcyBhIG5ldyBt bSBvYmplY3QgYW5kIHJldHVybnMgYSBoYW5kbGUgdG8gaXQuCj4+Pj4+ICAgICAgKiBAZGV2OiBk cm0gZGV2aWNlIHBvaW50ZXIKPj4+Pj4gQEAgLTc1Myw2ICs3NjYsMTEgQEAgZmx1c2hfd3JpdGVf ZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIHVuc2lnbmVkIGludCBmbHVz aF9kb21haW5zKQo+Pj4+PiAgICAgICAgIGNhc2UgSTkxNV9HRU1fRE9NQUlOX0NQVToKPj4+Pj4g ICAgICAgICAgICAgICAgIGk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaiwgSTkxNV9DTEZMVVNI X1NZTkMpOwo+Pj4+PiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+Pj4+ICsKPj4+Pj4gKyAgICAg Y2FzZSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOgo+Pj4+PiArICAgICAgICAgICAgIGlmIChncHVf d3JpdGVfbmVlZHNfY2xmbHVzaChvYmopKQo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgb2Jq LT5jYWNoZV9kaXJ0eSA9IHRydWU7Cj4+Pj4+ICsgICAgICAgICAgICAgYnJlYWs7Cj4+Pj4+ICAg ICAgICAgfQo+Pj4+PiAgICAgCj4+Pj4+ICAgICAgICAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9 IDA7Cj4+Pj4+IEBAIC04NTQsNyArODcyLDggQEAgaW50IGk5MTVfZ2VtX29ial9wcmVwYXJlX3No bWVtX3JlYWQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPj4+Pj4gICAgICAgICAg KiBvcHRpbWl6ZXMgZm9yIHRoZSBjYXNlIHdoZW4gdGhlIGdwdSB3aWxsIGRpcnR5IHRoZSBkYXRh Cj4+Pj4+ICAgICAgICAgICogYW55d2F5IGFnYWluIGJlZm9yZSB0aGUgbmV4dCBwcmVhZCBoYXBw ZW5zLgo+Pj4+PiAgICAgICAgICAqLwo+Pj4+PiAtICAgICBpZiAoIShvYmotPmJhc2UucmVhZF9k b21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkpCj4+Pj4+ICsgICAgIGlmICghb2JqLT5jYWNo ZV9kaXJ0eSAmJgo+Pj4+PiArICAgICAgICAgIShvYmotPmJhc2UucmVhZF9kb21haW5zICYgSTkx NV9HRU1fRE9NQUlOX0NQVSkpCj4+Pj4+ICAgICAgICAgICAgICAgICAqbmVlZHNfY2xmbHVzaCA9 IENMRkxVU0hfQkVGT1JFOwo+Pj4+Cj4+Pj4gT2J2aW91c2x5IEkgZG9uJ3QgdW5kZXJzdGFuZCBz b21ldGhpbmcgY3JpdGljYWwgaGVyZSBzaW5jZSBvbmNlIG1vcmUgSQo+Pj4+IHdhcyBleHBlY3Rp bmcgdGhlIHJldmVyc2UgaGVyZSAtIGlmIHRoZSBjYWNoZSBpcyBub3QgZGlydHkgbm8gbmVlZCB0 bwo+Pj4+IGZsdXNoIGl0Lgo+Pj4KPj4+IFRoaXMgaXMgYW4gaW52YWxpZGF0ZS4gV2UgbmVlZCB0 byBtYWtlIHN1cmUgdGhhdCBhbnkgc3RyYXkgY2FjaGVsaW5lIHRoZQo+Pj4gQ1BVIHB1bGxlZCBp biBhcmUgaW52YWxpZGF0ZWQgcHJpb3IgdG8gYWNjZXNzaW5nIHRoZSBwaHlzaWNhbCBhZGRyZXNz Cj4+PiB3aGljaCB3YXMgd3JpdHRlbiB0byBieSB0aGUgR1BVIG91dCBvZiBzaWdodCBvZiB0aGUg Y3B1Lgo+Pgo+PiBXaHkgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGF0IGlmIENQVSBjYWNoZSBpcyBk aXJ0eT8KPiAKPiBJZiB0aGUgQ1BVIGNhY2hlIGlzIGRpcnR5IGl0IGFscmVhZHkgbWVhbnMgd2Ug aGF2ZSBwYXNzZWQgdGhlIGludmFsaWRhdGUKPiBwaGFzZSBhbmQgb3duIHRoZSBjYWNoZS4gV2Ug d2lsbCBiZSBkb2luZyB0aGUgY2xmbHVzaCBhdCB0aGUgY29tcGxldGlvbgo+IG9mIHRoZSB3cml0 ZSBwaGFzZS4KCk9rYXksIGdvdCB0aGlzIG9uZSBhcyB3ZWxsLiBUaGVyZSBpcyB3aGF0IGxvb2tz IHRvIGJlIGEgc3RhbGUgY29tbWVudCAKdGFsa2luZyBhYm91dCBtb3ZpbmcgdG8gZ3R0IGFib3Zl IHRoaXMgYmxvY2sgYnR3LgoKUmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJz dWxpbkBpbnRlbC5jb20+CgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=