From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [RFC 10/14] drm/i915: Convert i915_ppgtt_init_hw to intel_gt Date: Mon, 10 Jun 2019 16:54:15 +0100 Message-ID: <20190610155419.23723-11-tvrtko.ursulin@linux.intel.com> References: <20190610155419.23723-1-tvrtko.ursulin@linux.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 ESMTPS id 5663E89187 for ; Mon, 10 Jun 2019 15:54:38 +0000 (UTC) In-Reply-To: <20190610155419.23723-1-tvrtko.ursulin@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: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCk1vcmUgcmVt b3ZhbCBvZiBpbXBsaWNpdCBkZXZfcHJpdiBmcm9tIHVzaW5nIG9sZCBtbWlvIGFjY2Vzc29ycy4K ClNpZ25lZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+ Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgfCAgIDIgKy0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIHwgMTAyICsrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIHwgICAzICstCiAz IGZpbGVzIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbS5jCmluZGV4IGZlYTZmYzM2NTliYS4uNzJlNTg0MTM2OTA5IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTEyNjYsNyArMTI2Niw3IEBAIGludCBpOTE1X2dlbV9pbml0 X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlpZiAocmV0KQogCQlnb3Rv IG91dDsKIAotCXJldCA9IGk5MTVfcHBndHRfaW5pdF9odyhkZXZfcHJpdik7CisJcmV0ID0gaTkx NV9wcGd0dF9pbml0X2h3KCZkZXZfcHJpdi0+Z3QpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9S KCJFbmFibGluZyBQUEdUVCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCmluZGV4IDUwYTc0Njc0YTJhNS4uN2QwYjdhNDdmNzYx IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwpAQCAtNDEsNiArNDEsNyBAQAogI2lu Y2x1ZGUgImk5MTVfdmdwdS5oIgogI2luY2x1ZGUgImludGVsX2Rydi5oIgogI2luY2x1ZGUgImlu dGVsX2Zyb250YnVmZmVyLmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfZ3QuaCIKIAogI2RlZmluZSBJ OTE1X0dGUF9BTExPV19GQUlMIChHRlBfS0VSTkVMIHwgX19HRlBfUkVUUllfTUFZRkFJTCB8IF9f R0ZQX05PV0FSTikKIApAQCAtMTY5MywyNSArMTY5NCwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQg Z2VuNl93cml0ZV9wZGUoY29uc3Qgc3RydWN0IGdlbjZfaHdfcHBndHQgKnBwZ3R0LAogCQkgIHBw Z3R0LT5wZF9hZGRyICsgcGRlKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuN19wcGd0dF9lbmFibGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQgZ2VuN19wcGd0 dF9lbmFibGUoc3RydWN0IGludGVsX2d0ICpndCkKIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IGd0X3RvX2k5MTUoZ3QpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9 IGd0X3RvX3VuY29yZShndCk7CiAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwogCXUz MiBlY29jaGssIGVjb2JpdHM7CiAJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7CiAKLQllY29iaXRz ID0gSTkxNV9SRUFEKEdBQ19FQ09fQklUUyk7Ci0JSTkxNV9XUklURShHQUNfRUNPX0JJVFMsIGVj b2JpdHMgfCBFQ09CSVRTX1BQR1RUX0NBQ0hFNjRCKTsKKwllY29iaXRzID0gaW50ZWxfdW5jb3Jl X3JlYWQodW5jb3JlLCBHQUNfRUNPX0JJVFMpOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUs CisJCQkgICBHQUNfRUNPX0JJVFMsCisJCQkgICBlY29iaXRzIHwgRUNPQklUU19QUEdUVF9DQUNI RTY0Qik7CiAKLQllY29jaGsgPSBJOTE1X1JFQUQoR0FNX0VDT0NISyk7Ci0JaWYgKElTX0hBU1dF TEwoZGV2X3ByaXYpKSB7CisJZWNvY2hrID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHQU1f RUNPQ0hLKTsKKwlpZiAoSVNfSEFTV0VMTChpOTE1KSkgewogCQllY29jaGsgfD0gRUNPQ0hLX1BQ R1RUX1dCX0hTVzsKIAl9IGVsc2UgewogCQllY29jaGsgfD0gRUNPQ0hLX1BQR1RUX0xMQ19JVkI7 CiAJCWVjb2NoayAmPSB+RUNPQ0hLX1BQR1RUX0dGRFRfSVZCOwogCX0KLQlJOTE1X1dSSVRFKEdB TV9FQ09DSEssIGVjb2Noayk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0FNX0VDT0NI SywgZWNvY2hrKTsKIAotCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgewor CWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7CiAJCS8qIEdGWF9NT0RFIGlzIHBl ci1yaW5nIG9uIGdlbjcrICovCiAJCUVOR0lORV9XUklURShlbmdpbmUsCiAJCQkgICAgIFJJTkdf TU9ERV9HRU43LApAQCAtMTcxOSwyMiArMTcyNCwzMCBAQCBzdGF0aWMgdm9pZCBnZW43X3BwZ3R0 X2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJfQogfQogCi1zdGF0 aWMgdm9pZCBnZW42X3BwZ3R0X2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCitzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2VuYWJsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQog eworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0X3RvX3VuY29yZShndCk7CiAJdTMy IGVjb2NoaywgZ2FiX2N0bCwgZWNvYml0czsKIAotCWVjb2JpdHMgPSBJOTE1X1JFQUQoR0FDX0VD T19CSVRTKTsKLQlJOTE1X1dSSVRFKEdBQ19FQ09fQklUUywgZWNvYml0cyB8IEVDT0JJVFNfU05C X0JJVCB8Ci0JCSAgIEVDT0JJVFNfUFBHVFRfQ0FDSEU2NEIpOworCWVjb2JpdHMgPSBpbnRlbF91 bmNvcmVfcmVhZCh1bmNvcmUsIEdBQ19FQ09fQklUUyk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVu Y29yZSwKKwkJCSAgIEdBQ19FQ09fQklUUywKKwkJCSAgIGVjb2JpdHMgfCBFQ09CSVRTX1NOQl9C SVQgfCBFQ09CSVRTX1BQR1RUX0NBQ0hFNjRCKTsKIAotCWdhYl9jdGwgPSBJOTE1X1JFQUQoR0FC X0NUTCk7Ci0JSTkxNV9XUklURShHQUJfQ1RMLCBnYWJfY3RsIHwgR0FCX0NUTF9DT05UX0FGVEVS X1BBR0VGQVVMVCk7CisJZ2FiX2N0bCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0FCX0NU TCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKKwkJCSAgIEdBQl9DVEwsCisJCQkgICBn YWJfY3RsIHwgR0FCX0NUTF9DT05UX0FGVEVSX1BBR0VGQVVMVCk7CiAKLQllY29jaGsgPSBJOTE1 X1JFQUQoR0FNX0VDT0NISyk7Ci0JSTkxNV9XUklURShHQU1fRUNPQ0hLLCBlY29jaGsgfCBFQ09D SEtfU05CX0JJVCB8IEVDT0NIS19QUEdUVF9DQUNIRTY0Qik7CisJZWNvY2hrID0gaW50ZWxfdW5j b3JlX3JlYWQodW5jb3JlLCBHQU1fRUNPQ0hLKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3Jl LAorCQkJICAgR0FNX0VDT0NISywKKwkJCSAgIGVjb2NoayB8IEVDT0NIS19TTkJfQklUIHwgRUNP Q0hLX1BQR1RUX0NBQ0hFNjRCKTsKIAotCWlmIChIQVNfUFBHVFQoZGV2X3ByaXYpKSAvKiBtYXkg YmUgZGlzYWJsZWQgZm9yIFZULWQgKi8KLQkJSTkxNV9XUklURShHRlhfTU9ERSwgX01BU0tFRF9C SVRfRU5BQkxFKEdGWF9QUEdUVF9FTkFCTEUpKTsKKwlpZiAoSEFTX1BQR1RUKHVuY29yZV90b19p OTE1KHVuY29yZSkpKSAvKiBtYXkgYmUgZGlzYWJsZWQgZm9yIFZULWQgKi8KKwkJaW50ZWxfdW5j b3JlX3dyaXRlKHVuY29yZSwKKwkJCQkgICBHRlhfTU9ERSwKKwkJCQkgICBfTUFTS0VEX0JJVF9F TkFCTEUoR0ZYX1BQR1RUX0VOQUJMRSkpOwogfQogCiAvKiBQUEdUVCBzdXBwb3J0IGZvciBTYW5k eWJkcmlnZS9HZW42IGFuZCBsYXRlciAqLwpAQCAtMjE4NiwyMSArMjE5OSwzMiBAQCBzdGF0aWMg c3RydWN0IGk5MTVfaHdfcHBndHQgKmdlbjZfcHBndHRfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKLXN0YXRpYyB2b2lkIGd0 dF93cml0ZV93b3JrYXJvdW5kcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitz dGF0aWMgdm9pZCBndHRfd3JpdGVfd29ya2Fyb3VuZHMoc3RydWN0IGludGVsX2d0ICpndCkKIHsK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGd0X3RvX2k5MTUoZ3QpOworCXN0cnVj dCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0X3RvX3VuY29yZShndCk7CisKIAkvKiBUaGlzIGZ1 bmN0aW9uIGlzIGZvciBndHQgcmVsYXRlZCB3b3JrYXJvdW5kcy4gVGhpcyBmdW5jdGlvbiBpcwog CSAqIGNhbGxlZCBvbiBkcml2ZXIgbG9hZCBhbmQgYWZ0ZXIgYSBHUFUgcmVzZXQsIHNvIHlvdSBj YW4gcGxhY2UKIAkgKiB3b3JrYXJvdW5kcyBoZXJlIGV2ZW4gaWYgdGhleSBnZXQgb3ZlcndyaXR0 ZW4gYnkgR1BVIHJlc2V0LgogCSAqLwogCS8qIFdhSW5jcmVhc2VEZWZhdWx0VExCRW50cmllczpj aHYsYmR3LHNrbCxieHQsa2JsLGdsayxjZmwsY25sLGljbCAqLwotCWlmIChJU19CUk9BRFdFTEwo ZGV2X3ByaXYpKQotCQlJOTE1X1dSSVRFKEdFTjhfTDNfTFJBXzFfR1BHUFUsIEdFTjhfTDNfTFJB XzFfR1BHUFVfREVGQVVMVF9WQUxVRV9CRFcpOwotCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2 X3ByaXYpKQotCQlJOTE1X1dSSVRFKEdFTjhfTDNfTFJBXzFfR1BHUFUsIEdFTjhfTDNfTFJBXzFf R1BHUFVfREVGQVVMVF9WQUxVRV9DSFYpOwotCWVsc2UgaWYgKElTX0dFTjlfTFAoZGV2X3ByaXYp KQotCQlJOTE1X1dSSVRFKEdFTjhfTDNfTFJBXzFfR1BHUFUsIEdFTjlfTDNfTFJBXzFfR1BHUFVf REVGQVVMVF9WQUxVRV9CWFQpOwotCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkK LQkJSTkxNV9XUklURShHRU44X0wzX0xSQV8xX0dQR1BVLCBHRU45X0wzX0xSQV8xX0dQR1BVX0RF RkFVTFRfVkFMVUVfU0tMKTsKKwlpZiAoSVNfQlJPQURXRUxMKGk5MTUpKQorCQlpbnRlbF91bmNv cmVfd3JpdGUodW5jb3JlLAorCQkJCSAgIEdFTjhfTDNfTFJBXzFfR1BHUFUsCisJCQkJICAgR0VO OF9MM19MUkFfMV9HUEdQVV9ERUZBVUxUX1ZBTFVFX0JEVyk7CisJZWxzZSBpZiAoSVNfQ0hFUlJZ VklFVyhpOTE1KSkKKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKKwkJCQkgICBHRU44X0wz X0xSQV8xX0dQR1BVLAorCQkJCSAgIEdFTjhfTDNfTFJBXzFfR1BHUFVfREVGQVVMVF9WQUxVRV9D SFYpOworCWVsc2UgaWYgKElTX0dFTjlfTFAoaTkxNSkpCisJCWludGVsX3VuY29yZV93cml0ZSh1 bmNvcmUsCisJCQkJICAgR0VOOF9MM19MUkFfMV9HUEdQVSwKKwkJCQkgICBHRU45X0wzX0xSQV8x X0dQR1BVX0RFRkFVTFRfVkFMVUVfQlhUKTsKKwllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0g OSkKKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKKwkJCQkgICBHRU44X0wzX0xSQV8xX0dQ R1BVLAorCQkJCSAgIEdFTjlfTDNfTFJBXzFfR1BHUFVfREVGQVVMVF9WQUxVRV9TS0wpOwogCiAJ LyoKIAkgKiBUbyBzdXBwb3J0IDY0SyBQVEVzIHdlIG5lZWQgdG8gZmlyc3QgZW5hYmxlIHRoZSB1 c2Ugb2YgdGhlCkBAIC0yMjEzLDIxICsyMjM3LDI1IEBAIHN0YXRpYyB2b2lkIGd0dF93cml0ZV93 b3JrYXJvdW5kcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJICogMzJLIHBh Z2VzLCBidXQgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYW55IHN1cHBvcnQgZm9yIGl0IGluIG91 cgogCSAqIGRyaXZlci4KIAkgKi8KLQlpZiAoSEFTX1BBR0VfU0laRVMoZGV2X3ByaXYsIEk5MTVf R1RUX1BBR0VfU0laRV82NEspICYmCi0JICAgIElOVEVMX0dFTihkZXZfcHJpdikgPD0gMTApCi0J CUk5MTVfV1JJVEUoR0VOOF9HQU1XX0VDT19ERVZfUldfSUEsCi0JCQkgICBJOTE1X1JFQUQoR0VO OF9HQU1XX0VDT19ERVZfUldfSUEpIHwKLQkJCSAgIEdBTVdfRUNPX0VOQUJMRV82NEtfSVBTX0ZJ RUxEKTsKKwlpZiAoSEFTX1BBR0VfU0laRVMoaTkxNSwgSTkxNV9HVFRfUEFHRV9TSVpFXzY0Sykg JiYKKwkgICAgSU5URUxfR0VOKGk5MTUpIDw9IDEwKQorCQlpbnRlbF91bmNvcmVfd3JpdGUodW5j b3JlLAorCQkJCSAgIEdFTjhfR0FNV19FQ09fREVWX1JXX0lBLAorCQkJCSAgIGludGVsX3VuY29y ZV9yZWFkKHVuY29yZSwKKwkJCQkJCSAgICAgR0VOOF9HQU1XX0VDT19ERVZfUldfSUEpIHwKKwkJ CQkgICBHQU1XX0VDT19FTkFCTEVfNjRLX0lQU19GSUVMRCk7CiB9CiAKLWludCBpOTE1X3BwZ3R0 X2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoraW50IGk5MTVfcHBn dHRfaW5pdF9odyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQogewotCWd0dF93cml0ZV93b3JrYXJvdW5k cyhkZXZfcHJpdik7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBndF90b19pOTE1 KGd0KTsKKworCWd0dF93cml0ZV93b3JrYXJvdW5kcyhndCk7CiAKLQlpZiAoSVNfR0VOKGRldl9w cml2LCA2KSkKLQkJZ2VuNl9wcGd0dF9lbmFibGUoZGV2X3ByaXYpOwotCWVsc2UgaWYgKElTX0dF TihkZXZfcHJpdiwgNykpCi0JCWdlbjdfcHBndHRfZW5hYmxlKGRldl9wcml2KTsKKwlpZiAoSVNf R0VOKGk5MTUsIDYpKQorCQlnZW42X3BwZ3R0X2VuYWJsZShndCk7CisJZWxzZSBpZiAoSVNfR0VO KGk5MTUsIDcpKQorCQlnZW43X3BwZ3R0X2VuYWJsZShndCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKaW5kZXggOTc3MDBhMzdjMTJiLi44MmE1MzU5YTEx ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCkBAIC02NCw2ICs2NCw3IEBAIHN0 cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGU7CiBzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnOwog c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Q7CiBzdHJ1Y3QgaTkxNV92bWE7CitzdHJ1Y3QgaW50 ZWxfZ3Q7CiAKIHR5cGVkZWYgdTMyIGdlbjZfcHRlX3Q7CiB0eXBlZGVmIHU2NCBnZW44X3B0ZV90 OwpAQCAtNjI1LDcgKzYyNiw3IEBAIHZvaWQgaTkxNV9nZ3R0X2Rpc2FibGVfZ3VjKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1KTsKIGludCBpOTE1X2dlbV9pbml0X2dndHQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaTkxNV9nZ3R0X2NsZWFudXBfaHcoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIAotaW50IGk5MTVfcHBndHRfaW5pdF9o dyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50IGk5MTVfcHBndHRfaW5p dF9odyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKIAogc3RydWN0IGk5MTVfaHdfcHBndHQgKmk5MTVf cHBndHRfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGk5 MTVfcHBndHRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZik7Ci0tIAoyLjIwLjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==