From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [RFC 11/28] drm/i915: Convert i915_ppgtt_init_hw to intel_gt Date: Thu, 13 Jun 2019 14:35:22 +0100 Message-ID: <20190613133539.12620-12-tvrtko.ursulin@linux.intel.com> References: <20190613133539.12620-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 mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 37CA889A92 for ; Thu, 13 Jun 2019 13:39:04 +0000 (UTC) In-Reply-To: <20190613133539.12620-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 aTkxNS9pOTE1X2dlbS5jCmluZGV4IDQ5YzdjN2I4N2JkYy4uZTU0Y2QzMDUzNGRjIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTEyNzAsNyArMTI3MCw3IEBAIGludCBpOTE1X2dlbV9pbml0 X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlpZiAocmV0KQogCQlnb3Rv IG91dDsKIAotCXJldCA9IGk5MTVfcHBndHRfaW5pdF9odyhkZXZfcHJpdik7CisJcmV0ID0gaTkx NV9wcGd0dF9pbml0X2h3KCZkZXZfcHJpdi0+Z3QpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9S KCJFbmFibGluZyBQUEdUVCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCmluZGV4IGFjNmVkNDU5NzIwZS4uNjUxY2E1ZWQwOGEx IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwpAQCAtNDMsNiArNDMsNyBAQAogI2lu Y2x1ZGUgImk5MTVfdmdwdS5oIgogI2luY2x1ZGUgImludGVsX2Rydi5oIgogI2luY2x1ZGUgImlu dGVsX2Zyb250YnVmZmVyLmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfZ3QuaCIKIAogI2RlZmluZSBJ OTE1X0dGUF9BTExPV19GQUlMIChHRlBfS0VSTkVMIHwgX19HRlBfUkVUUllfTUFZRkFJTCB8IF9f R0ZQX05PV0FSTikKIApAQCAtMTY5NCwyNSArMTY5NSwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQg Z2VuNl93cml0ZV9wZGUoY29uc3Qgc3RydWN0IGdlbjZfcHBndHQgKnBwZ3R0LAogCQkgIHBwZ3R0 LT5wZF9hZGRyICsgcGRlKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuN19wcGd0dF9lbmFibGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQgZ2VuN19wcGd0dF9l bmFibGUoc3RydWN0IGludGVsX2d0ICpndCkKIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9IGd0LT5pOTE1OworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0LT51bmNv cmU7CiAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwogCXUzMiBlY29jaGssIGVjb2Jp dHM7CiAJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7CiAKLQllY29iaXRzID0gSTkxNV9SRUFEKEdB Q19FQ09fQklUUyk7Ci0JSTkxNV9XUklURShHQUNfRUNPX0JJVFMsIGVjb2JpdHMgfCBFQ09CSVRT X1BQR1RUX0NBQ0hFNjRCKTsKKwllY29iaXRzID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBH QUNfRUNPX0JJVFMpOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsCisJCQkgICBHQUNfRUNP X0JJVFMsCisJCQkgICBlY29iaXRzIHwgRUNPQklUU19QUEdUVF9DQUNIRTY0Qik7CiAKLQllY29j aGsgPSBJOTE1X1JFQUQoR0FNX0VDT0NISyk7Ci0JaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKSB7 CisJZWNvY2hrID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHQU1fRUNPQ0hLKTsKKwlpZiAo SVNfSEFTV0VMTChpOTE1KSkgewogCQllY29jaGsgfD0gRUNPQ0hLX1BQR1RUX1dCX0hTVzsKIAl9 IGVsc2UgewogCQllY29jaGsgfD0gRUNPQ0hLX1BQR1RUX0xMQ19JVkI7CiAJCWVjb2NoayAmPSB+ RUNPQ0hLX1BQR1RUX0dGRFRfSVZCOwogCX0KLQlJOTE1X1dSSVRFKEdBTV9FQ09DSEssIGVjb2No ayk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0FNX0VDT0NISywgZWNvY2hrKTsKIAot CWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgeworCWZvcl9lYWNoX2VuZ2lu ZShlbmdpbmUsIGk5MTUsIGlkKSB7CiAJCS8qIEdGWF9NT0RFIGlzIHBlci1yaW5nIG9uIGdlbjcr ICovCiAJCUVOR0lORV9XUklURShlbmdpbmUsCiAJCQkgICAgIFJJTkdfTU9ERV9HRU43LApAQCAt MTcyMCwyMiArMTcyNSwzMCBAQCBzdGF0aWMgdm9pZCBnZW43X3BwZ3R0X2VuYWJsZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJfQogfQogCi1zdGF0aWMgdm9pZCBnZW42X3Bw Z3R0X2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9p ZCBnZW42X3BwZ3R0X2VuYWJsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQogeworCXN0cnVjdCBpbnRl bF91bmNvcmUgKnVuY29yZSA9IGd0LT51bmNvcmU7CiAJdTMyIGVjb2NoaywgZ2FiX2N0bCwgZWNv Yml0czsKIAotCWVjb2JpdHMgPSBJOTE1X1JFQUQoR0FDX0VDT19CSVRTKTsKLQlJOTE1X1dSSVRF KEdBQ19FQ09fQklUUywgZWNvYml0cyB8IEVDT0JJVFNfU05CX0JJVCB8Ci0JCSAgIEVDT0JJVFNf UFBHVFRfQ0FDSEU2NEIpOworCWVjb2JpdHMgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdB Q19FQ09fQklUUyk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKKwkJCSAgIEdBQ19FQ09f QklUUywKKwkJCSAgIGVjb2JpdHMgfCBFQ09CSVRTX1NOQl9CSVQgfCBFQ09CSVRTX1BQR1RUX0NB Q0hFNjRCKTsKIAotCWdhYl9jdGwgPSBJOTE1X1JFQUQoR0FCX0NUTCk7Ci0JSTkxNV9XUklURShH QUJfQ1RMLCBnYWJfY3RsIHwgR0FCX0NUTF9DT05UX0FGVEVSX1BBR0VGQVVMVCk7CisJZ2FiX2N0 bCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0FCX0NUTCk7CisJaW50ZWxfdW5jb3JlX3dy aXRlKHVuY29yZSwKKwkJCSAgIEdBQl9DVEwsCisJCQkgICBnYWJfY3RsIHwgR0FCX0NUTF9DT05U X0FGVEVSX1BBR0VGQVVMVCk7CiAKLQllY29jaGsgPSBJOTE1X1JFQUQoR0FNX0VDT0NISyk7Ci0J STkxNV9XUklURShHQU1fRUNPQ0hLLCBlY29jaGsgfCBFQ09DSEtfU05CX0JJVCB8IEVDT0NIS19Q UEdUVF9DQUNIRTY0Qik7CisJZWNvY2hrID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHQU1f RUNPQ0hLKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLAorCQkJICAgR0FNX0VDT0NISywK KwkJCSAgIGVjb2NoayB8IEVDT0NIS19TTkJfQklUIHwgRUNPQ0hLX1BQR1RUX0NBQ0hFNjRCKTsK IAotCWlmIChIQVNfUFBHVFQoZGV2X3ByaXYpKSAvKiBtYXkgYmUgZGlzYWJsZWQgZm9yIFZULWQg Ki8KLQkJSTkxNV9XUklURShHRlhfTU9ERSwgX01BU0tFRF9CSVRfRU5BQkxFKEdGWF9QUEdUVF9F TkFCTEUpKTsKKwlpZiAoSEFTX1BQR1RUKHVuY29yZV90b19pOTE1KHVuY29yZSkpKSAvKiBtYXkg YmUgZGlzYWJsZWQgZm9yIFZULWQgKi8KKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKKwkJ CQkgICBHRlhfTU9ERSwKKwkJCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0ZYX1BQR1RUX0VOQUJM RSkpOwogfQogCiAvKiBQUEdUVCBzdXBwb3J0IGZvciBTYW5keWJkcmlnZS9HZW42IGFuZCBsYXRl ciAqLwpAQCAtMjE4NywyMSArMjIwMCwzMiBAQCBzdGF0aWMgc3RydWN0IGk5MTVfcHBndHQgKmdl bjZfcHBndHRfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCXJldHVybiBF UlJfUFRSKGVycik7CiB9CiAKLXN0YXRpYyB2b2lkIGd0dF93cml0ZV93b3JrYXJvdW5kcyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBndHRfd3JpdGVfd29y a2Fyb3VuZHMoc3RydWN0IGludGVsX2d0ICpndCkKIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IGd0LT5pOTE1OworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0LT51 bmNvcmU7CisKIAkvKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBndHQgcmVsYXRlZCB3b3JrYXJvdW5k cy4gVGhpcyBmdW5jdGlvbiBpcwogCSAqIGNhbGxlZCBvbiBkcml2ZXIgbG9hZCBhbmQgYWZ0ZXIg YSBHUFUgcmVzZXQsIHNvIHlvdSBjYW4gcGxhY2UKIAkgKiB3b3JrYXJvdW5kcyBoZXJlIGV2ZW4g aWYgdGhleSBnZXQgb3ZlcndyaXR0ZW4gYnkgR1BVIHJlc2V0LgogCSAqLwogCS8qIFdhSW5jcmVh c2VEZWZhdWx0VExCRW50cmllczpjaHYsYmR3LHNrbCxieHQsa2JsLGdsayxjZmwsY25sLGljbCAq LwotCWlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKQotCQlJOTE1X1dSSVRFKEdFTjhfTDNfTFJB XzFfR1BHUFUsIEdFTjhfTDNfTFJBXzFfR1BHUFVfREVGQVVMVF9WQUxVRV9CRFcpOwotCWVsc2Ug aWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQlJOTE1X1dSSVRFKEdFTjhfTDNfTFJBXzFf R1BHUFUsIEdFTjhfTDNfTFJBXzFfR1BHUFVfREVGQVVMVF9WQUxVRV9DSFYpOwotCWVsc2UgaWYg KElTX0dFTjlfTFAoZGV2X3ByaXYpKQotCQlJOTE1X1dSSVRFKEdFTjhfTDNfTFJBXzFfR1BHUFUs IEdFTjlfTDNfTFJBXzFfR1BHUFVfREVGQVVMVF9WQUxVRV9CWFQpOwotCWVsc2UgaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gOSkKLQkJSTkxNV9XUklURShHRU44X0wzX0xSQV8xX0dQR1BVLCBH RU45X0wzX0xSQV8xX0dQR1BVX0RFRkFVTFRfVkFMVUVfU0tMKTsKKwlpZiAoSVNfQlJPQURXRUxM KGk5MTUpKQorCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLAorCQkJCSAgIEdFTjhfTDNfTFJB XzFfR1BHUFUsCisJCQkJICAgR0VOOF9MM19MUkFfMV9HUEdQVV9ERUZBVUxUX1ZBTFVFX0JEVyk7 CisJZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVu Y29yZSwKKwkJCQkgICBHRU44X0wzX0xSQV8xX0dQR1BVLAorCQkJCSAgIEdFTjhfTDNfTFJBXzFf R1BHUFVfREVGQVVMVF9WQUxVRV9DSFYpOworCWVsc2UgaWYgKElTX0dFTjlfTFAoaTkxNSkpCisJ CWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsCisJCQkJICAgR0VOOF9MM19MUkFfMV9HUEdQVSwK KwkJCQkgICBHRU45X0wzX0xSQV8xX0dQR1BVX0RFRkFVTFRfVkFMVUVfQlhUKTsKKwllbHNlIGlm IChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKKwkJ CQkgICBHRU44X0wzX0xSQV8xX0dQR1BVLAorCQkJCSAgIEdFTjlfTDNfTFJBXzFfR1BHUFVfREVG QVVMVF9WQUxVRV9TS0wpOwogCiAJLyoKIAkgKiBUbyBzdXBwb3J0IDY0SyBQVEVzIHdlIG5lZWQg dG8gZmlyc3QgZW5hYmxlIHRoZSB1c2Ugb2YgdGhlCkBAIC0yMjE0LDIxICsyMjM4LDI1IEBAIHN0 YXRpYyB2b2lkIGd0dF93cml0ZV93b3JrYXJvdW5kcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCiAJICogMzJLIHBhZ2VzLCBidXQgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYW55 IHN1cHBvcnQgZm9yIGl0IGluIG91cgogCSAqIGRyaXZlci4KIAkgKi8KLQlpZiAoSEFTX1BBR0Vf U0laRVMoZGV2X3ByaXYsIEk5MTVfR1RUX1BBR0VfU0laRV82NEspICYmCi0JICAgIElOVEVMX0dF TihkZXZfcHJpdikgPD0gMTApCi0JCUk5MTVfV1JJVEUoR0VOOF9HQU1XX0VDT19ERVZfUldfSUEs Ci0JCQkgICBJOTE1X1JFQUQoR0VOOF9HQU1XX0VDT19ERVZfUldfSUEpIHwKLQkJCSAgIEdBTVdf RUNPX0VOQUJMRV82NEtfSVBTX0ZJRUxEKTsKKwlpZiAoSEFTX1BBR0VfU0laRVMoaTkxNSwgSTkx NV9HVFRfUEFHRV9TSVpFXzY0SykgJiYKKwkgICAgSU5URUxfR0VOKGk5MTUpIDw9IDEwKQorCQlp bnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLAorCQkJCSAgIEdFTjhfR0FNV19FQ09fREVWX1JXX0lB LAorCQkJCSAgIGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwKKwkJCQkJCSAgICAgR0VOOF9HQU1X X0VDT19ERVZfUldfSUEpIHwKKwkJCQkgICBHQU1XX0VDT19FTkFCTEVfNjRLX0lQU19GSUVMRCk7 CiB9CiAKLWludCBpOTE1X3BwZ3R0X2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQoraW50IGk5MTVfcHBndHRfaW5pdF9odyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQogewot CWd0dF93cml0ZV93b3JrYXJvdW5kcyhkZXZfcHJpdik7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPSBndC0+aTkxNTsKKworCWd0dF93cml0ZV93b3JrYXJvdW5kcyhndCk7CiAKLQlp ZiAoSVNfR0VOKGRldl9wcml2LCA2KSkKLQkJZ2VuNl9wcGd0dF9lbmFibGUoZGV2X3ByaXYpOwot CWVsc2UgaWYgKElTX0dFTihkZXZfcHJpdiwgNykpCi0JCWdlbjdfcHBndHRfZW5hYmxlKGRldl9w cml2KTsKKwlpZiAoSVNfR0VOKGk5MTUsIDYpKQorCQlnZW42X3BwZ3R0X2VuYWJsZShndCk7CisJ ZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDcpKQorCQlnZW43X3BwZ3R0X2VuYWJsZShndCk7CiAKIAly ZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0 dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKaW5kZXggNjNmYTM1N2M2 OWRlLi5mOGMwNjI4OGJlNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2d0dC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCkBAIC02 NCw2ICs2NCw3IEBACiBzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlOwogc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3Q7CiBzdHJ1Y3QgaTkxNV92bWE7CitzdHJ1Y3QgaW50ZWxfZ3Q7CiAKIHR5 cGVkZWYgdTMyIGdlbjZfcHRlX3Q7CiB0eXBlZGVmIHU2NCBnZW44X3B0ZV90OwpAQCAtNjQ3LDcg KzY0OCw3IEBAIHZvaWQgaTkxNV9nZ3R0X2Rpc2FibGVfZ3VjKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KTsKIGludCBpOTE1X2dlbV9pbml0X2dndHQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKIHZvaWQgaTkxNV9nZ3R0X2NsZWFudXBfaHcoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKIAotaW50IGk5MTVfcHBndHRfaW5pdF9odyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50IGk5MTVfcHBndHRfaW5pdF9odyhzdHJ1Y3Qg aW50ZWxfZ3QgKmd0KTsKIAogc3RydWN0IGk5MTVfcHBndHQgKmk5MTVfcHBndHRfY3JlYXRlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiAKLS0gCjIuMjAuMQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4