From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH] drm/i915: Move skl/bxt gt specific workarounds to ring init Date: Tue, 13 Oct 2015 16:08:10 +0300 Message-ID: <87twpu532d.fsf@intel.com> References: <1444645259-16840-1-git-send-email-mika.kuoppala@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id E93FE6E31E for ; Tue, 13 Oct 2015 06:05:47 -0700 (PDT) In-Reply-To: <1444645259-16840-1-git-send-email-mika.kuoppala@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Mika Kuoppala , intel-gfx@lists.freedesktop.org Cc: Tomi Sarvela List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAxMiBPY3QgMjAxNSwgTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5p bnRlbC5jb20+IHdyb3RlOgo+IFNvbWUgcmVnaXN0ZXJzIGFyZSwgbmF0dXJhbGx5LCBsb3N0IGlu IGdwdSByZXNldC9zdXNwZW5kIGN5Y2xlLgo+IEFuZCBzb21lIHJlZ2lzdGVycywgZm9yIGV4YW1w bGUgaW4gZGlzcGxheSBkb21haW4sIGFyZSBub3Qgc3ViamVjdAo+IHRvIGdwdSByZXNldCBzbyB0 aGV5IHJldGFpbiB0aGVpciBjb250ZW50cy4KPgo+IEFzIGhhbmcgcmVjb3ZlcnkgdHJpZ2dlcnMg YSByZXNldCwgcmVjb3ZlcmFibGUgZ3B1IGhhbmcgY2FuIGN1cnJlbnRseQo+IGZsdXNoIG91dCBl c3NlbnRpYWwgd29ya2Fyb3VuZHMgYW5kIGNhdXNlIGhhdm9jIGxhdGVyIG9uLgo+Cj4gV2hlbiBy ZWdpc3RlciBHRU44X0dBUkJOVEwgaXMgbWlzc2luZyB0aGUgV2FFbmFibGVHYXBzVHN2Q3JlZGl0 Rml4OnNrbCwKPiBpdCBjYW4gY2F1c2UgcmFuZG9tIHN5c3RlbSBoYW5ncyBbMV0uIFRoaXMgd29y a2Fyb3VuZCB3YXMgYWRkZWQgaW46Cj4gY29tbWl0IDI0NWQ5NjY3MGQyNiAoImRybS9pOTE1OnNr bDogQWRkIFdhRW5hYmxlR2Fwc1RzdkNyZWRpdEZpeCIpCj4gQnV0IGFub3RoZXIgc2V0IG9mIHN5 c3RlbSBoYW5ncyB3ZXJlIG9ic2VydmVkIGFuZCB0aGUgZmFpbHVyZSBwYXR0ZXJuCj4gaW5kaWNh dGVkIHRoYXQgdGhlcmUgd2FzIHJhbmRvbSBncHUgaGFuZyBwcmVjZWRpbmcgdGhlIHN5c3RlbSBo YW5nIFsyXS4KPiBUaGlzIGxlYWQgdG8gdGhlIHJlYWxpemF0aW9uIHRoYXQgd2UgbG9zZSB0aGlz IHdvcmthcm91bmQgYW5kIEJEV19TQ1JBVENIMQo+IG9uIHJlc2V0Lgo+Cj4gQWRkIHRoZXNlIHdv cmthcm91bmRzIHNldHVwIGluIGRpc3BsYXkgaW5pdCB0byBza2wvYnh0IHJpbmcgaW5pdAo+IHdo ZXJlIExSSSB3b3JrYXJvdW5kcyBhcmUgYWxzbyBzZXR1cC4gVGhpcyB3YXkgdGhlaXIgc2V0dXAg aXMgbm90Cj4gZGVwZW5kZW50IG9uIGRpc3BsYXkgc2lkZSBpbml0Lgo+Cj4gUmVmZXJlbmNlczog WzFdIGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTkwODU0Cj4g UmVmZXJlbmNlczogWzJdIGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dp P2lkPTkyMzE1Cj4gUmVwb3J0ZWQtYnk6IFRvbWkgU2FydmVsYSA8dG9taXgucC5zYXJ2ZWxhQGlu dGVsLmNvbT4KPiBDYzogVG9taSBTYXJ2ZWxhIDx0b21peC5wLnNhcnZlbGFAaW50ZWwuY29tPgo+ IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+IFNp Z25lZC1vZmYtYnk6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAaW50ZWwuY29tPgoKVGVz dGVkLWJ5OiBUb21pIFNhcnZlbGEgPHRvbWl4LnAuc2FydmVsYUBpbnRlbC5jb20+CgpNaWthLCB0 aGUgcGF0Y2ggZG9lc24ndCBhcHBseSB0byB2NC4zLXJjNSAtIGlzIGl0IG5lZWRlZCB0aGVyZSBv ciBpbgpkaW5xPwoKQlIsCkphbmkuCgoKCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3BtLmMgICAgICAgICB8IDYwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgfCA0NCArKysrKysrKysr KysrKysrKysrKysrKy0KPiAgMiBmaWxlcyBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspLCA2MSBk ZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+IGluZGV4IDNmOWIzYzAuLjI0 ODJjZmQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiBAQCAtNTIsNTYgKzUyLDEwIEBA Cj4gICNkZWZpbmUgSU5URUxfUkM2cF9FTkFCTEUJCQkoMTw8MSkKPiAgI2RlZmluZSBJTlRFTF9S QzZwcF9FTkFCTEUJCQkoMTw8MikKPiAgCj4gLXN0YXRpYyB2b2lkIGdlbjlfaW5pdF9jbG9ja19n YXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCj4gLQkvKiBXYUVuYWJsZUxi c1NsYVJldHJ5VGltZXJEZWNyZW1lbnQ6c2tsICovCj4gLQlJOTE1X1dSSVRFKEJEV19TQ1JBVENI MSwgSTkxNV9SRUFEKEJEV19TQ1JBVENIMSkgfAo+IC0JCSAgIEdFTjlfTEJTX1NMQV9SRVRSWV9U SU1FUl9ERUNSRU1FTlRfRU5BQkxFKTsKPiAtCj4gLQkvKiBXYURpc2FibGVLaWxsTG9naWM6Ynh0 LHNrbCAqLwo+IC0JSTkxNV9XUklURShHQU1fRUNPQ0hLLCBJOTE1X1JFQUQoR0FNX0VDT0NISykg fAo+IC0JCSAgIEVDT0NIS19ESVNfVExCKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgc2tsX2lu aXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gLXsKPiAtCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQo+IC0JZ2Vu OV9pbml0X2Nsb2NrX2dhdGluZyhkZXYpOwo+IC0KPiAtCWlmIChJTlRFTF9SRVZJRChkZXYpIDw9 IFNLTF9SRVZJRF9EMCkgewo+IC0JCS8qIFdhRGlzYWJsZUhEQ0ludmFsaWRhdGlvbjpza2wgKi8K PiAtCQlJOTE1X1dSSVRFKEdBTV9FQ09DSEssIEk5MTVfUkVBRChHQU1fRUNPQ0hLKSB8Cj4gLQkJ CSAgIEJEV19ESVNBQkxFX0hEQ19JTlZBTElEQVRJT04pOwo+IC0KPiAtCQkvKiBXYURpc2FibGVD aGlja2VuQml0VFNHQmFycmllckFja0ZvckZGU2xpY2VDUzpza2wgKi8KPiAtCQlJOTE1X1dSSVRF KEZGX1NMSUNFX0NTX0NISUNLRU4yLAo+IC0JCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VOOV9U U0dfQkFSUklFUl9BQ0tfRElTQUJMRSkpOwo+IC0JfQo+IC0KPiAtCS8qIEdFTjhfTDNTUUNSRUc0 IGhhcyBhIGRlcGVuZGVuY3kgd2l0aCBXQSBiYXRjaCBzbyBhbnkgbmV3IGNoYW5nZXMKPiAtCSAq IGludm9sdmluZyB0aGlzIHJlZ2lzdGVyIHNob3VsZCBhbHNvIGJlIGFkZGVkIHRvIFdBIGJhdGNo IGFzIHJlcXVpcmVkLgo+IC0JICovCj4gLQlpZiAoSU5URUxfUkVWSUQoZGV2KSA8PSBTS0xfUkVW SURfRTApCj4gLQkJLyogV2FEaXNhYmxlTFNRQ1JPUEVSRmZvck9DTDpza2wgKi8KPiAtCQlJOTE1 X1dSSVRFKEdFTjhfTDNTUUNSRUc0LCBJOTE1X1JFQUQoR0VOOF9MM1NRQ1JFRzQpIHwKPiAtCQkJ ICAgR0VOOF9MUVNDX1JPX1BFUkZfRElTKTsKPiAtCj4gLQkvKiBXYUVuYWJsZUdhcHNUc3ZDcmVk aXRGaXg6c2tsICovCj4gLQlpZiAoSVNfU0tZTEFLRShkZXYpICYmIChJTlRFTF9SRVZJRChkZXYp ID49IFNLTF9SRVZJRF9DMCkpIHsKPiAtCQlJOTE1X1dSSVRFKEdFTjhfR0FSQkNOVEwsIChJOTE1 X1JFQUQoR0VOOF9HQVJCQ05UTCkgfAo+IC0JCQkJCSAgIEdFTjlfR0FQU19UU1ZfQ1JFRElUX0RJ U0FCTEUpKTsKPiAtCX0KPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgYnh0X2luaXRfY2xvY2tfZ2F0 aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gIAo+IC0JZ2VuOV9pbml0X2Nsb2Nr X2dhdGluZyhkZXYpOwo+IC0KPiAgCS8qIFdhRGlzYWJsZVNERVVuaXRDbG9ja0dhdGluZzpieHQg Ki8KPiAgCUk5MTVfV1JJVEUoR0VOOF9VQ0dDVEw2LCBJOTE1X1JFQUQoR0VOOF9VQ0dDVEw2KSB8 Cj4gIAkJICAgR0VOOF9TREVVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Cj4gQEAgLTExMiwxNyAr NjYsNiBAQCBzdGF0aWMgdm9pZCBieHRfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiAgCSAqLwo+ICAJSTkxNV9XUklURShHRU44X1VDR0NUTDYsIEk5MTVfUkVBRChH RU44X1VDR0NUTDYpIHwKPiAgCQkgICBHRU44X0hEQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFX0hE Q1JFUSk7Cj4gLQo+IC0JLyogV2FTdG9yZU11bHRpcGxlUFRFZW5hYmxlOmJ4dCAqLwo+IC0JLyog VGhpcyBpcyBhIHJlcXVpcmVtZW50IGFjY29yZGluZyB0byBIYXJkd2FyZSBzcGVjaWZpY2F0aW9u ICovCj4gLQlpZiAoSU5URUxfUkVWSUQoZGV2KSA9PSBCWFRfUkVWSURfQTApCj4gLQkJSTkxNV9X UklURShUSUxFQ1RMLCBJOTE1X1JFQUQoVElMRUNUTCkgfCBUSUxFQ1RMX1RMQlBGKTsKPiAtCj4g LQkvKiBXYVNldENsY2tHYXRpbmdEaXNhYmxlTWVkaWE6Ynh0ICovCj4gLQlpZiAoSU5URUxfUkVW SUQoZGV2KSA9PSBCWFRfUkVWSURfQTApIHsKPiAtCQlJOTE1X1dSSVRFKEdFTjdfTUlTQ0NQQ1RM LCAoSTkxNV9SRUFEKEdFTjdfTUlTQ0NQQ1RMKSAmCj4gLQkJCQkJICAgIH5HRU44X0RPUF9DTE9D S19HQVRFX01FRElBX0VOQUJMRSkpOwo+IC0JfQo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBpOTE1 X3BpbmV2aWV3X2dldF9tZW1fZnJlcShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+IEBAIC02OTkx LDkgKzY5MzQsNiBAQCB2b2lkIGludGVsX2luaXRfcG0oc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiAgCQlpZiAoSVNfQlJPWFRPTihkZXYpKQo+ICAJCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0X2Ns b2NrX2dhdGluZyA9Cj4gIAkJCQlieHRfaW5pdF9jbG9ja19nYXRpbmc7Cj4gLQkJZWxzZSBpZiAo SVNfU0tZTEFLRShkZXYpKQo+IC0JCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0X2Nsb2NrX2dhdGlu ZyA9Cj4gLQkJCQlza2xfaW5pdF9jbG9ja19nYXRpbmc7Cj4gIAkJZGV2X3ByaXYtPmRpc3BsYXku dXBkYXRlX3dtID0gc2tsX3VwZGF0ZV93bTsKPiAgCX0gZWxzZSBpZiAoSEFTX1BDSF9TUExJVChk ZXYpKSB7Cj4gIAkJaWxrX3NldHVwX3dtX2xhdGVuY3koZGV2KTsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4gaW5kZXggNjU0YWU5OS4uMDM1OTczNiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiBAQCAtOTA2LDYgKzkwNiwxNCBA QCBzdGF0aWMgaW50IGdlbjlfaW5pdF93b3JrYXJvdW5kcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nKQo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKPiAgCXVpbnQzMl90IHRtcDsKPiAgCj4gKwkvKiBXYUVuYWJsZUxic1NsYVJldHJ5 VGltZXJEZWNyZW1lbnQ6c2tsICovCj4gKwlJOTE1X1dSSVRFKEJEV19TQ1JBVENIMSwgSTkxNV9S RUFEKEJEV19TQ1JBVENIMSkgfAo+ICsJCSAgIEdFTjlfTEJTX1NMQV9SRVRSWV9USU1FUl9ERUNS RU1FTlRfRU5BQkxFKTsKPiArCj4gKwkvKiBXYURpc2FibGVLaWxsTG9naWM6Ynh0LHNrbCAqLwo+ ICsJSTkxNV9XUklURShHQU1fRUNPQ0hLLCBJOTE1X1JFQUQoR0FNX0VDT0NISykgfAo+ICsJCSAg IEVDT0NIS19ESVNfVExCKTsKPiArCj4gIAkvKiBXYURpc2FibGVQYXJ0aWFsSW5zdFNob290ZG93 bjpza2wsYnh0ICovCj4gIAlXQV9TRVRfQklUX01BU0tFRChHRU44X1JPV19DSElDS0VOLAo+ICAJ CQkgIFBBUlRJQUxfSU5TVFJVQ1RJT05fU0hPT1RET1dOX0RJU0FCTEUpOwo+IEBAIC0xMDE4LDcg KzEwMjYsNiBAQCBzdGF0aWMgaW50IHNrbF90dW5lX2l6X2hhc2hpbmcoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqcmluZykKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC0KPiAgc3RhdGljIGludCBz a2xfaW5pdF93b3JrYXJvdW5kcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICB7Cj4g IAlpbnQgcmV0Owo+IEBAIC0xMDI5LDYgKzEwMzYsMzAgQEAgc3RhdGljIGludCBza2xfaW5pdF93 b3JrYXJvdW5kcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICAJaWYgKHJldCkKPiAg CQlyZXR1cm4gcmV0Owo+ICAKPiArCWlmIChJTlRFTF9SRVZJRChkZXYpIDw9IFNLTF9SRVZJRF9E MCkgewo+ICsJCS8qIFdhRGlzYWJsZUhEQ0ludmFsaWRhdGlvbjpza2wgKi8KPiArCQlJOTE1X1dS SVRFKEdBTV9FQ09DSEssIEk5MTVfUkVBRChHQU1fRUNPQ0hLKSB8Cj4gKwkJCSAgIEJEV19ESVNB QkxFX0hEQ19JTlZBTElEQVRJT04pOwo+ICsKPiArCQkvKiBXYURpc2FibGVDaGlja2VuQml0VFNH QmFycmllckFja0ZvckZGU2xpY2VDUzpza2wgKi8KPiArCQlJOTE1X1dSSVRFKEZGX1NMSUNFX0NT X0NISUNLRU4yLAo+ICsJCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VOOV9UU0dfQkFSUklFUl9B Q0tfRElTQUJMRSkpOwo+ICsJfQo+ICsKPiArCS8qIEdFTjhfTDNTUUNSRUc0IGhhcyBhIGRlcGVu ZGVuY3kgd2l0aCBXQSBiYXRjaCBzbyBhbnkgbmV3IGNoYW5nZXMKPiArCSAqIGludm9sdmluZyB0 aGlzIHJlZ2lzdGVyIHNob3VsZCBhbHNvIGJlIGFkZGVkIHRvIFdBIGJhdGNoIGFzIHJlcXVpcmVk Lgo+ICsJICovCj4gKwlpZiAoSU5URUxfUkVWSUQoZGV2KSA8PSBTS0xfUkVWSURfRTApCj4gKwkJ LyogV2FEaXNhYmxlTFNRQ1JPUEVSRmZvck9DTDpza2wgKi8KPiArCQlJOTE1X1dSSVRFKEdFTjhf TDNTUUNSRUc0LCBJOTE1X1JFQUQoR0VOOF9MM1NRQ1JFRzQpIHwKPiArCQkJICAgR0VOOF9MUVND X1JPX1BFUkZfRElTKTsKPiArCj4gKwkvKiBXYUVuYWJsZUdhcHNUc3ZDcmVkaXRGaXg6c2tsICov Cj4gKwlpZiAoSVNfU0tZTEFLRShkZXYpICYmIChJTlRFTF9SRVZJRChkZXYpID49IFNLTF9SRVZJ RF9DMCkpIHsKPiArCQlJOTE1X1dSSVRFKEdFTjhfR0FSQkNOVEwsIChJOTE1X1JFQUQoR0VOOF9H QVJCQ05UTCkgfAo+ICsJCQkJCSAgIEdFTjlfR0FQU19UU1ZfQ1JFRElUX0RJU0FCTEUpKTsKPiAr CX0KPiArCj4gIAkvKiBXYURpc2FibGVQb3dlckNvbXBpbGVyQ2xvY2tHYXRpbmc6c2tsICovCj4g IAlpZiAoSU5URUxfUkVWSUQoZGV2KSA9PSBTS0xfUkVWSURfQjApCj4gIAkJV0FfU0VUX0JJVF9N QVNLRUQoSElaX0NISUNLRU4sCj4gQEAgLTEwNzIsNiArMTEwMywxNyBAQCBzdGF0aWMgaW50IGJ4 dF9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gIAlpZiAo cmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+ICsJLyogV2FTdG9yZU11bHRpcGxlUFRFZW5hYmxl OmJ4dCAqLwo+ICsJLyogVGhpcyBpcyBhIHJlcXVpcmVtZW50IGFjY29yZGluZyB0byBIYXJkd2Fy ZSBzcGVjaWZpY2F0aW9uICovCj4gKwlpZiAoSU5URUxfUkVWSUQoZGV2KSA9PSBCWFRfUkVWSURf QTApCj4gKwkJSTkxNV9XUklURShUSUxFQ1RMLCBJOTE1X1JFQUQoVElMRUNUTCkgfCBUSUxFQ1RM X1RMQlBGKTsKPiArCj4gKwkvKiBXYVNldENsY2tHYXRpbmdEaXNhYmxlTWVkaWE6Ynh0ICovCj4g KwlpZiAoSU5URUxfUkVWSUQoZGV2KSA9PSBCWFRfUkVWSURfQTApIHsKPiArCQlJOTE1X1dSSVRF KEdFTjdfTUlTQ0NQQ1RMLCAoSTkxNV9SRUFEKEdFTjdfTUlTQ0NQQ1RMKSAmCj4gKwkJCQkJICAg IH5HRU44X0RPUF9DTE9DS19HQVRFX01FRElBX0VOQUJMRSkpOwo+ICsJfQo+ICsKPiAgCS8qIFdh RGlzYWJsZVRocmVhZFN0YWxsRG9wQ2xvY2tHYXRpbmc6Ynh0ICovCj4gIAlXQV9TRVRfQklUX01B U0tFRChHRU44X1JPV19DSElDS0VOLAo+ICAJCQkgIFNUQUxMX0RPUF9HQVRJTkdfRElTQUJMRSk7 Cj4gLS0gCj4gMi4xLjQKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4CgotLSAKSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNlIFRlY2hub2xv Z3kgQ2VudGVyCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==