From mboxrd@z Thu Jan 1 00:00:00 1970 From: Imre Deak Subject: Re: [PATCH 08/21] drm/i915: Keep track of preferred cdclk vco frequency on SKL Date: Thu, 19 May 2016 17:25:43 +0300 Message-ID: <1463667943.12342.37.camel@intel.com> References: <1463172100-24715-1-git-send-email-ville.syrjala@linux.intel.com> <1463172100-24715-9-git-send-email-ville.syrjala@linux.intel.com> Reply-To: imre.deak@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 050B86E17A for ; Thu, 19 May 2016 14:25:45 +0000 (UTC) In-Reply-To: <1463172100-24715-9-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gcGUsIDIwMTYtMDUtMTMgYXQgMjM6NDEgKzAzMDAsIHZpbGxlLnN5cmphbGFAbGludXguaW50 ZWwuY29tIHdyb3RlOgo+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51 eC5pbnRlbC5jb20+Cj4gCj4gTm93IHRoYXQgc2tsX3Zjb19mcmVxIHRyYWNrcyB0aGUgYWN0dWFs IERQTEwwIHZjbyBmcmVxdWVuY3ksIHdlJ2xsIG5lZWQKPiBzb21ldGhpbmcgdGhhdCBrZWVwcyB0 cmFjayBvZiB3aGljaCB2Y28gZnJlcXVlbmN5IHdlIHdhbnQgdG8gdXNlIGluIGNhc2UKPiB0aGUg Y3VycmVudCB2Y28gaXMgMC4gVGhpcyB3b3VsZCBiZSBpbXBvcnRhbnQgYWNyb3NzIHN1cGVuZC9y ZXN1bWUgc2luY2UKPiB3ZSdsbCBkaXNhYmxlIERQTEwwIGFyb3VuZCB0aG9zZSBwYXJ0cy4KPiAK PiBXZSdsbCBhbHNvIHVwZGF0ZSBvdXIgaWRlYSBvZiBtYXggY2RjbGsvZG90Y2xvY2sgd2hlbiB0 aGUgcHJlZmVycmVkCj4gdmNvIGNoYW5nZXMuIFRoYXQgY291bGQgaGFwcGVuIGlmIG91dCBpbml0 aWFsIGd1ZXNzIHdhcyB3cm9uZywgYW5kCj4gbGF0ZXIgZURQIHdvdWxkIGZvcmNlIHVzIHRvIGNo YW5nZSBpdC4gT25lIGlzc3VlIGhlcmUgY291bGQgYmUgdGhhdAo+IGNoYW5naW5nIHRoZSBtYXgg ZG90Y2xvY2sgY291bGQgY2F1c2Ugb3VyIG1vZGUgbGlzdCB0byBjaGFuZ2UgZHVyaW5nCj4gbmV4 dCB0aW1lIHRoZSBkaXNwbGF5cyBnZXQgcHJvYmVkLiBCdXQgSSBkb24ndCBzZWUgYSBnb29kIHdh eSB0byBhdm9pZAo+IHRoYXQsIGV4Y2VwdCBwZXJoYXBzIGJ5IGFsbG93aW5nIGVpdGhlciB2Y28g ZnJlcXVlbmN5IHRvIGJlIHVzZWQgYXMKPiBuZWVkZWQuIEJ1dCB0aGUgZG9jcyBzdWdnZXN0IHRo YXQgc3VjaCB1c2FnZSB3YXNuJ3QgcmVhbGx5IGludGVkZWQuCj4gCj4gQWxzbyBuZWVkIHRvIG1h a2Ugc3VyZSB3ZSBkb24ndCB1cGRhdGUgb3VyIG1heF9jZGNsayB2YWx1ZSBiZWZvcmUgd2UKPiBo YXZlIGEgcHJlZmVycmVkIHZjbyB2YWx1ZSwgd2hpY2ggbWVhbnMgbW92aW5nIHRoYXQgdG8gaGFw cGVuIGFmdGVyCj4gdGhlIGNkY2xrIHNhbml0YXRpb24uCj4gCj4gU2lnbmVkLW9mZi1ieTogVmls bGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClJldmlld2VkLWJ5 OiBJbXJlIERlYWsgPGltcmUuZGVha0BpbnRlbC5jb20+Cgo+IC0tLQo+IMKgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuY8KgwqB8IDQ4ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcGxsX21nci5jIHzC oMKgNSArKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaMKgwqDCoMKgwqDC oHzCoMKgMSArCj4gwqA0IGZpbGVzIGNoYW5nZWQsIDQ3IGluc2VydGlvbnMoKyksIDggZGVsZXRp b25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggYjMxOWRhOTcwYzhhLi40 NmEyMjczMjA4OGUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMTgyMSw2ICsx ODIxLDcgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+IMKgCj4gwqAJdW5zaWduZWQgaW50 IGZzYl9mcmVxLCBtZW1fZnJlcSwgaXNfZGRyMzsKPiDCoAl1bnNpZ25lZCBpbnQgc2tsX3Zjb19m cmVxOwo+ICsJdW5zaWduZWQgaW50IHNrbF9wcmVmZXJyZWRfdmNvX2ZyZXE7Cj4gwqAJdW5zaWdu ZWQgaW50IGNkY2xrX2ZyZXEsIG1heF9jZGNsa19mcmVxLCBhdG9taWNfY2RjbGtfZnJlcTsKPiDC oAl1bnNpZ25lZCBpbnQgbWF4X2RvdGNsa19mcmVxOwo+IMKgCXVuc2lnbmVkIGludCByYXdjbGtf ZnJlcTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gaW5kZXggY2QyODA5MTc5 MDQyLi4xMDdhNzc5OWJkZGUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j Cj4gQEAgLTUyNjUsMjEgKzUyNjUsMzQgQEAgc3RhdGljIGludCBpbnRlbF9jb21wdXRlX21heF9k b3RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IMKgCQlyZXR1cm4gbWF4 X2NkY2xrX2ZyZXEqOTAvMTAwOwo+IMKgfQo+IMKgCj4gK3N0YXRpYyBpbnQgc2tsX2NhbGNfY2Rj bGsoaW50IG1heF9waXhjbGssIGludCB2Y28pOwo+ICsKPiDCoHN0YXRpYyB2b2lkIGludGVsX3Vw ZGF0ZV9tYXhfY2RjbGsoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiDCoHsKPiDCoAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IMKgCj4gwqAJ aWYgKElTX1NLWUxBS0UoZGV2KSB8fCBJU19LQUJZTEFLRShkZXYpKSB7Cj4gwqAJCXUzMiBsaW1p dCA9IEk5MTVfUkVBRChTS0xfREZTTSkgJiBTS0xfREZTTV9DRENMS19MSU1JVF9NQVNLOwo+ICsJ CWludCBtYXhfY2RjbGssIHZjbzsKPiArCj4gKwkJdmNvID0gZGV2X3ByaXYtPnNrbF9wcmVmZXJy ZWRfdmNvX2ZyZXE7Cj4gKwkJV0FSTl9PTih2Y28gIT0gODEwMCAmJiB2Y28gIT0gODY0MCk7Cj4g wqAKPiArCQkvKgo+ICsJCcKgKiBVc2UgdGhlIGxvd2VyICh2Y28gODY0MCkgY2RjbGsgdmFsdWVz IGFzIGEKPiArCQnCoCogZmlyc3QgZ3Vlc3MuIHNrbF9jYWxjX2NkY2xrKCkgd2lsbCBjb3JyZWN0 IGl0Cj4gKwkJwqAqIGlmIHRoZSBwcmVmZXJyZWQgdmNvIGlzIDgxMDAgaW5zdGVhZC4KPiArCQnC oCovCj4gwqAJCWlmIChsaW1pdCA9PSBTS0xfREZTTV9DRENMS19MSU1JVF82NzUpCj4gLQkJCWRl dl9wcml2LT5tYXhfY2RjbGtfZnJlcSA9IDY3NTAwMDsKPiArCQkJbWF4X2NkY2xrID0gNjE3MTQw Owo+IMKgCQllbHNlIGlmIChsaW1pdCA9PSBTS0xfREZTTV9DRENMS19MSU1JVF81NDApCj4gLQkJ CWRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSA9IDU0MDAwMDsKPiArCQkJbWF4X2NkY2xrID0gNTQw MDAwOwo+IMKgCQllbHNlIGlmIChsaW1pdCA9PSBTS0xfREZTTV9DRENMS19MSU1JVF80NTApCj4g LQkJCWRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSA9IDQ1MDAwMDsKPiArCQkJbWF4X2NkY2xrID0g NDMyMDAwOwo+IMKgCQllbHNlCj4gLQkJCWRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSA9IDMzNzUw MDsKPiArCQkJbWF4X2NkY2xrID0gMzA4NTcwOwo+ICsKPiArCQlkZXZfcHJpdi0+bWF4X2NkY2xr X2ZyZXEgPSBza2xfY2FsY19jZGNsayhtYXhfY2RjbGssIHZjbyk7Cj4gwqAJfSBlbHNlIGlmIChJ U19CUk9YVE9OKGRldikpIHsKPiDCoAkJZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxID0gNjI0MDAw Owo+IMKgCX0gZWxzZSBpZiAoSVNfQlJPQURXRUxMKGRldikpwqDCoHsKPiBAQCAtNTMzNiw5ICs1 MzQ5LDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfdXBkYXRlX2NkY2xrKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCj4gwqAJwqAqLwo+IMKgCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19D SEVSUllWSUVXKGRldl9wcml2KSkKPiDCoAkJSTkxNV9XUklURShHTUJVU0ZSRVFfVkxWLCBESVZf Uk9VTkRfVVAoZGV2X3ByaXYtPmNkY2xrX2ZyZXEsIDEwMDApKTsKPiAtCj4gLQlpZiAoZGV2X3By aXYtPm1heF9jZGNsa19mcmVxID09IDApCj4gLQkJaW50ZWxfdXBkYXRlX21heF9jZGNsayhkZXYp Owo+IMKgfQo+IMKgCj4gwqAvKiBjb252ZXJ0IGZyb20ga0h6IHRvIC4xIGZpeHBvaW50IE1IeiB3 aXRoIC0xTUh6IG9mZnNldCAqLwo+IEBAIC01NTg3LDEyICs1NTk3LDI0IEBAIHNrbF9kcGxsMF91 cGRhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IMKgCX0KPiDCoH0KPiDC oAo+ICt2b2lkIHNrbF9zZXRfcHJlZmVycmVkX2NkY2xrX3ZjbyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsIGludCB2Y28pCj4gK3sKPiArCWJvb2wgY2hhbmdlZCA9IGRldl9wcml2 LT5za2xfcHJlZmVycmVkX3Zjb19mcmVxICE9IHZjbzsKPiArCj4gKwlkZXZfcHJpdi0+c2tsX3By ZWZlcnJlZF92Y29fZnJlcSA9IHZjbzsKPiArCj4gKwlpZiAoY2hhbmdlZCkKPiArCQlpbnRlbF91 cGRhdGVfbWF4X2NkY2xrKGRldl9wcml2LT5kZXYpOwo+ICt9Cj4gKwo+IMKgc3RhdGljIHZvaWQK PiDCoHNrbF9kcGxsMF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBp bnQgdmNvKQo+IMKgewo+IMKgCWludCBtaW5fY2RjbGsgPSBza2xfY2FsY19jZGNsaygwLCB2Y28p Owo+IMKgCXUzMiB2YWw7Cj4gwqAKPiArCVdBUk5fT04odmNvICE9IDgxMDAgJiYgdmNvICE9IDg2 NDApOwo+ICsKPiDCoAkvKiBzZWxlY3QgdGhlIG1pbmltdW0gQ0RDTEsgYmVmb3JlIGVuYWJsaW5n IERQTEwgMCAqLwo+IMKgCXZhbCA9IENEQ0xLX0ZSRVFfMzM3XzMwOCB8IHNrbF9jZGNsa19kZWNp bWFsKG1pbl9jZGNsayk7Cj4gwqAJSTkxNV9XUklURShDRENMS19DVEwsIHZhbCk7Cj4gQEAgLTU2 MjgsNiArNTY1MCw5IEBAIHNrbF9kcGxsMF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LCBpbnQgdmNvKQo+IMKgCQlEUk1fRVJST1IoIkRQTEwwIG5vdCBsb2NrZWRcbiIp Owo+IMKgCj4gwqAJZGV2X3ByaXYtPnNrbF92Y29fZnJlcSA9IHZjbzsKPiArCj4gKwkvKiBXZSds bCB3YW50IHRvIGtlZXAgdXNpbmcgdGhlIGN1cnJlbnQgdmNvIGZyb20gbm93IG9uLiAqLwo+ICsJ c2tsX3NldF9wcmVmZXJyZWRfY2RjbGtfdmNvKGRldl9wcml2LCB2Y28pOwo+IMKgfQo+IMKgCj4g wqBzdGF0aWMgdm9pZAo+IEBAIC01NzQ0LDcgKzU3NjksOSBAQCB2b2lkIHNrbF9pbml0X2NkY2xr KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiDCoAkJaW50IGNkY2xrLCB2Y287 Cj4gwqAKPiDCoAkJLyogc2V0IENEQ0xLIHRvIHRoZSBsb3dlc3QgZnJlcXVlbmN5LCBNb2Rlc2V0 IGZvbGxvd3MgKi8KPiAtCQl2Y28gPSA4MTAwOwo+ICsJCXZjbyA9IGRldl9wcml2LT5za2xfcHJl ZmVycmVkX3Zjb19mcmVxOwo+ICsJCWlmICh2Y28gPT0gMCkKPiArCQkJdmNvID0gODEwMDsKPiDC oAkJY2RjbGsgPSBza2xfY2FsY19jZGNsaygwLCB2Y28pOwo+IMKgCj4gwqAJCXNrbF9zZXRfY2Rj bGsoZGV2X3ByaXYsIGNkY2xrLCB2Y28pOwo+IEBAIC0xMzM1OSw2ICsxMzM4Niw4IEBAIHN0YXRp YyBpbnQgaW50ZWxfbW9kZXNldF9jaGVja3Moc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl KQo+IMKgCWlmIChkZXZfcHJpdi0+ZGlzcGxheS5tb2Rlc2V0X2NhbGNfY2RjbGspIHsKPiDCoAkJ aWYgKCFpbnRlbF9zdGF0ZS0+Y2RjbGtfcGxsX3ZjbykKPiDCoAkJCWludGVsX3N0YXRlLT5jZGNs a19wbGxfdmNvID0gZGV2X3ByaXYtPnNrbF92Y29fZnJlcTsKPiArCQlpZiAoIWludGVsX3N0YXRl LT5jZGNsa19wbGxfdmNvKQo+ICsJCQlpbnRlbF9zdGF0ZS0+Y2RjbGtfcGxsX3ZjbyA9IGRldl9w cml2LT5za2xfcHJlZmVycmVkX3Zjb19mcmVxOwo+IMKgCj4gwqAJCXJldCA9IGRldl9wcml2LT5k aXNwbGF5Lm1vZGVzZXRfY2FsY19jZGNsayhzdGF0ZSk7Cj4gwqAJCWlmIChyZXQgPCAwKQo+IEBA IC0xNTUyNSw2ICsxNTU1NCw5IEBAIHZvaWQgaW50ZWxfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCj4gwqAKPiDCoAlpbnRlbF9zaGFyZWRfZHBsbF9pbml0KGRldik7Cj4gwqAK PiArCWlmIChkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEgPT0gMCkKPiArCQlpbnRlbF91cGRhdGVf bWF4X2NkY2xrKGRldik7Cj4gKwo+IMKgCS8qIEp1c3QgZGlzYWJsZSBpdCBvbmNlIGF0IHN0YXJ0 dXAgKi8KPiDCoAlpOTE1X2Rpc2FibGVfdmdhKGRldik7Cj4gwqAJaW50ZWxfc2V0dXBfb3V0cHV0 cyhkZXYpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcGxsX21n ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBsbF9tZ3IuYwo+IGluZGV4IDUzOTFh YjY2YjY0ZC4uMzRlYzE0OWZkZTg1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2RwbGxfbWdyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcGxs X21nci5jCj4gQEAgLTE2MzUsNiArMTYzNSwxMSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9kZGlfcGxs X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiDCoAlpZiAoSVNfU0tZTEFLRShkZXYpIHx8 IElTX0tBQllMQUtFKGRldikpIHsKPiDCoAkJaWYgKHNrbF9zYW5pdGl6ZV9jZGNsayhkZXZfcHJp dikpCj4gwqAJCQlEUk1fREVCVUdfS01TKCJTYW5pdGl6ZWQgY2RjbGsgcHJvZ3JhbW1lZCBieSBw cmUtb3NcbiIpOwo+ICsKPiArCQkvKiBXZSdsbCB3YW50IHRvIGtlZXAgdXNpbmcgdGhlIGN1cnJl bnQgdmNvIGZyb20gbm93IG9uICovCj4gKwkJaWYgKGRldl9wcml2LT5za2xfdmNvX2ZyZXEgIT0g MCkKPiArCQkJc2tsX3NldF9wcmVmZXJyZWRfY2RjbGtfdmNvKGRldl9wcml2LAo+ICsJCQkJCQnC oMKgwqDCoGRldl9wcml2LT5za2xfdmNvX2ZyZXEpOwo+IMKgCX0gZWxzZSBpZiAoIUlTX0JST1hU T04oZGV2X3ByaXYpKSB7Cj4gwqAJCS8qCj4gwqAJCcKgKiBUaGUgTENQTEwgcmVnaXN0ZXIgc2hv dWxkIGJlIHR1cm5lZCBvbiBieSB0aGUgQklPUy4gRm9yIG5vdwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rydi5oCj4gaW5kZXggYzdjYjk4Mjk1NDdlLi44ZjQ4YTMyZTk5MWIgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcnYuaAo+IEBAIC0xMTQ1LDYgKzExNDUsNyBAQCB2b2lkIGk5MTVfYXVkaW9f Y29tcG9uZW50X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiDCoHZv aWQgaTkxNV9hdWRpb19jb21wb25lbnRfY2xlYW51cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwo+IMKgCj4gwqAvKiBpbnRlbF9kaXNwbGF5LmMgKi8KPiArdm9pZCBza2xfc2V0 X3ByZWZlcnJlZF9jZGNsa192Y28oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBp bnQgdmNvKTsKPiDCoHZvaWQgaW50ZWxfdXBkYXRlX3Jhd2NsayhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOwo+IMKgaW50IHZsdl9nZXRfY2NrX2Nsb2NrKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiDCoAkJwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqbmFtZSwg dTMyIHJlZywgaW50IHJlZl9mcmVxKTsKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg==