From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: [PATCH 39/60] drm/omap: hdmi5: Move mode set, enable and disable operations to bridge Date: Sun, 7 Jul 2019 21:19:16 +0300 Message-ID: <20190707181937.6250-36-laurent.pinchart@ideasonboard.com> References: <20190707180852.5512-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by gabe.freedesktop.org (Postfix) with ESMTPS id 329C189B27 for ; Sun, 7 Jul 2019 18:34:29 +0000 (UTC) In-Reply-To: <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Maxime Ripard , Sebastian Reichel , Tomi Valkeinen , Sean Paul List-Id: dri-devel@lists.freedesktop.org TW92ZSB0aGUgb21hcF9kc3NfZGV2aWNlIC5zZXRfdGltaW5ncygpLCAuZW5hYmxlKCkgYW5kIC5k aXNhYmxlKCkKb3BlcmF0aW9ucyB0byB0aGUgZHJtX2JyaWRnZSBmdW5jdGlvbnMuIEFzIHRoZSBk cm1fYnJpZGdlIGZvciB0aGUgSERNSQplbmNvZGVyIGlzIHVuY29uZGl0aW9uYWxseSByZWdpc3Rl cmVkIGFuZCBhdHRhY2hlZCwgdGhvc2Ugb3BlcmF0aW9ucwp3aWxsIGJlIGNhbGxlZCBhdCB0aGUg YXBwcm9wcmlhdGUgdGltZS4KClNpZ25lZC1vZmYtYnk6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJl bnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vb21hcGRy bS9kc3MvaGRtaTUuYyB8IDIwNCArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgMTA2IGluc2VydGlvbnMoKyksIDk4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9oZG1pNS5jIGIvZHJpdmVycy9ncHUvZHJtL29t YXBkcm0vZHNzL2hkbWk1LmMKaW5kZXggZGQ2N2E2MDQ0NTNmLi5kMDNmMmE0MTVmZDQgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9oZG1pNS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9vbWFwZHJtL2Rzcy9oZG1pNS5jCkBAIC00Miw2ICs0Miw4IEBACiAjaW5jbHVkZSA8 bGludXgvb2ZfZ3JhcGguaD4KICNpbmNsdWRlIDxzb3VuZC9vbWFwLWhkbWktYXVkaW8uaD4KIAor I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisKICNpbmNsdWRlICJvbWFwZHNzLmgiCiAjaW5j bHVkZSAiaGRtaTVfY29yZS5oIgogI2luY2x1ZGUgImRzcy5oIgpAQCAtMjQ3LDIwICsyNDksNiBA QCBzdGF0aWMgdm9pZCBoZG1pX3Bvd2VyX29mZl9mdWxsKHN0cnVjdCBvbWFwX2hkbWkgKmhkbWkp CiAJaGRtaV9wb3dlcl9vZmZfY29yZShoZG1pKTsKIH0KIAotc3RhdGljIHZvaWQgaGRtaV9kaXNw bGF5X3NldF90aW1pbmdzKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJCQkgICAg IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQotewotCXN0cnVjdCBvbWFwX2hk bWkgKmhkbWkgPSBkc3NkZXZfdG9faGRtaShkc3NkZXYpOwotCi0JbXV0ZXhfbG9jaygmaGRtaS0+ bG9jayk7Ci0KLQlkcm1fZGlzcGxheV9tb2RlX3RvX3ZpZGVvbW9kZShtb2RlLCAmaGRtaS0+Y2Zn LnZtKTsKLQotCWRpc3BjX3NldF90dl9wY2xrKGhkbWktPmRzcy0+ZGlzcGMsIG1vZGUtPmNsb2Nr ICogMTAwMCk7Ci0KLQltdXRleF91bmxvY2soJmhkbWktPmxvY2spOwotfQotCiBzdGF0aWMgaW50 IGhkbWlfZHVtcF9yZWdzKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCkKIHsKIAlzdHJ1Y3Qg b21hcF9oZG1pICpoZG1pID0gcy0+cHJpdmF0ZTsKQEAgLTI5Niw2MiArMjg0LDYgQEAgc3RhdGlj IHZvaWQgaGRtaV9zdG9wX2F1ZGlvX3N0cmVhbShzdHJ1Y3Qgb21hcF9oZG1pICpoZCkKIAlSRUdf RkxEX01PRChoZC0+d3AuYmFzZSwgSERNSV9XUF9TWVNDT05GSUcsIGhkLT53cF9pZGxlbW9kZSwg MywgMik7CiB9CiAKLXN0YXRpYyB2b2lkIGhkbWlfZGlzcGxheV9lbmFibGUoc3RydWN0IG9tYXBf ZHNzX2RldmljZSAqZHNzZGV2KQotewotCXN0cnVjdCBvbWFwX2hkbWkgKmhkbWkgPSBkc3NkZXZf dG9faGRtaShkc3NkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHI7Ci0KLQlEU1NE QkcoIkVOVEVSIGhkbWlfZGlzcGxheV9lbmFibGVcbiIpOwotCi0JbXV0ZXhfbG9jaygmaGRtaS0+ bG9jayk7Ci0KLQlyID0gaGRtaV9wb3dlcl9vbl9mdWxsKGhkbWkpOwotCWlmIChyKSB7Ci0JCURT U0VSUigiZmFpbGVkIHRvIHBvd2VyIG9uIGRldmljZVxuIik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0K LQlpZiAoaGRtaS0+YXVkaW9fY29uZmlndXJlZCkgewotCQlyID0gaGRtaTVfYXVkaW9fY29uZmln KCZoZG1pLT5jb3JlLCAmaGRtaS0+d3AsCi0JCQkJICAgICAgICZoZG1pLT5hdWRpb19jb25maWcs Ci0JCQkJICAgICAgIGhkbWktPmNmZy52bS5waXhlbGNsb2NrKTsKLQkJaWYgKHIpIHsKLQkJCURT U0VSUigiRXJyb3IgcmVzdG9yaW5nIGF1ZGlvIGNvbmZpZ3VyYXRpb246ICVkIiwgcik7Ci0JCQlo ZG1pLT5hdWRpb19hYm9ydF9jYigmaGRtaS0+cGRldi0+ZGV2KTsKLQkJCWhkbWktPmF1ZGlvX2Nv bmZpZ3VyZWQgPSBmYWxzZTsKLQkJfQotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZoZG1pLT5h dWRpb19wbGF5aW5nX2xvY2ssIGZsYWdzKTsKLQlpZiAoaGRtaS0+YXVkaW9fY29uZmlndXJlZCAm JiBoZG1pLT5hdWRpb19wbGF5aW5nKQotCQloZG1pX3N0YXJ0X2F1ZGlvX3N0cmVhbShoZG1pKTsK LQloZG1pLT5kaXNwbGF5X2VuYWJsZWQgPSB0cnVlOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmhkbWktPmF1ZGlvX3BsYXlpbmdfbG9jaywgZmxhZ3MpOwotCi1kb25lOgotCW11dGV4X3VubG9j aygmaGRtaS0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhkbWlfZGlzcGxheV9kaXNhYmxlKHN0 cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlzdHJ1Y3Qgb21hcF9oZG1pICpoZG1p ID0gZHNzZGV2X3RvX2hkbWkoZHNzZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JRFNT REJHKCJFbnRlciBoZG1pX2Rpc3BsYXlfZGlzYWJsZVxuIik7Ci0KLQltdXRleF9sb2NrKCZoZG1p LT5sb2NrKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZoZG1pLT5hdWRpb19wbGF5aW5nX2xvY2ss IGZsYWdzKTsKLQloZG1pX3N0b3BfYXVkaW9fc3RyZWFtKGhkbWkpOwotCWhkbWktPmRpc3BsYXlf ZW5hYmxlZCA9IGZhbHNlOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhkbWktPmF1ZGlvX3Bs YXlpbmdfbG9jaywgZmxhZ3MpOwotCi0JaGRtaV9wb3dlcl9vZmZfZnVsbChoZG1pKTsKLQotCW11 dGV4X3VubG9jaygmaGRtaS0+bG9jayk7Ci19Ci0KIHN0YXRpYyBpbnQgaGRtaV9jb3JlX2VuYWJs ZShzdHJ1Y3Qgb21hcF9oZG1pICpoZG1pKQogewogCWludCByID0gMDsKQEAgLTQ4MiwzOSArNDE0 LDExIEBAIHN0YXRpYyBzdHJ1Y3QgZWRpZCAqaGRtaV9yZWFkX2VkaWQoc3RydWN0IG9tYXBfZHNz X2RldmljZSAqZHNzZGV2KQogCQkJCSBOVUxMKTsKIH0KIAotc3RhdGljIGludCBoZG1pX3NldF9p bmZvZnJhbWUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQljb25zdCBzdHJ1Y3Qg aGRtaV9hdmlfaW5mb2ZyYW1lICphdmkpCi17Ci0Jc3RydWN0IG9tYXBfaGRtaSAqaGRtaSA9IGRz c2Rldl90b19oZG1pKGRzc2Rldik7Ci0KLQloZG1pLT5jZmcuaW5mb2ZyYW1lID0gKmF2aTsKLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoZG1pX3NldF9oZG1pX21vZGUoc3RydWN0IG9tYXBf ZHNzX2RldmljZSAqZHNzZGV2LAotCQlib29sIGhkbWlfbW9kZSkKLXsKLQlzdHJ1Y3Qgb21hcF9o ZG1pICpoZG1pID0gZHNzZGV2X3RvX2hkbWkoZHNzZGV2KTsKLQotCWhkbWktPmNmZy5oZG1pX2R2 aV9tb2RlID0gaGRtaV9tb2RlID8gSERNSV9IRE1JIDogSERNSV9EVkk7Ci0JcmV0dXJuIDA7Ci19 Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlX29wcyBoZG1pX29wcyA9IHsK IAkuY29ubmVjdAkJPSBoZG1pX2Nvbm5lY3QsCiAJLmRpc2Nvbm5lY3QJCT0gaGRtaV9kaXNjb25u ZWN0LAogCi0JLmVuYWJsZQkJCT0gaGRtaV9kaXNwbGF5X2VuYWJsZSwKLQkuZGlzYWJsZQkJPSBo ZG1pX2Rpc3BsYXlfZGlzYWJsZSwKLQotCS5zZXRfdGltaW5ncwkJPSBoZG1pX2Rpc3BsYXlfc2V0 X3RpbWluZ3MsCi0KIAkucmVhZF9lZGlkCQk9IGhkbWlfcmVhZF9lZGlkLAotCi0JLmhkbWkgPSB7 Ci0JCS5zZXRfaW5mb2ZyYW1lCQk9IGhkbWlfc2V0X2luZm9mcmFtZSwKLQkJLnNldF9oZG1pX21v ZGUJCT0gaGRtaV9zZXRfaGRtaV9tb2RlLAotCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpAQCAtNTMyLDYgKzQzNiwxMDcgQEAgc3RhdGljIGludCBoZG1pNV9icmlkZ2VfYXR0YWNo KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsIGJvb2wgY3JlYXRlX2Nvbm5lY3RvcikKIAkJCQkg YnJpZGdlLCBmYWxzZSk7CiB9CiAKK3N0YXRpYyB2b2lkIGhkbWk1X2JyaWRnZV9tb2RlX3NldChz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUsCisJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0 ZWRfbW9kZSkKK3sKKwlzdHJ1Y3Qgb21hcF9oZG1pICpoZG1pID0gZHJtX2JyaWRnZV90b19oZG1p KGJyaWRnZSk7CisKKwltdXRleF9sb2NrKCZoZG1pLT5sb2NrKTsKKworCWRybV9kaXNwbGF5X21v ZGVfdG9fdmlkZW9tb2RlKGFkanVzdGVkX21vZGUsICZoZG1pLT5jZmcudm0pOworCisJZGlzcGNf c2V0X3R2X3BjbGsoaGRtaS0+ZHNzLT5kaXNwYywgYWRqdXN0ZWRfbW9kZS0+Y2xvY2sgKiAxMDAw KTsKKworCW11dGV4X3VubG9jaygmaGRtaS0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWk1 X2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQlzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG9tYXBfaGRtaSAqaGRtaSA9IGRybV9i cmlkZ2VfdG9faGRtaShicmlkZ2UpOworCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25u X3N0YXRlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsK KworCS8qCisJICogTm9uZSBvZiB0aGVzZSBzaG91bGQgZmFpbCwgYXMgdGhlIGJyaWRnZSBjYW4n dCBiZSBlbmFibGVkIHdpdGhvdXQgYQorCSAqIHZhbGlkIENSVEMgdG8gY29ubmVjdG9yIHBhdGgg d2l0aCBmdWxseSBwb3B1bGF0ZWQgbmV3IHN0YXRlcy4KKwkgKi8KKwljb25uZWN0b3IgPSBkcm1f YXRvbWljX2dldF9uZXdfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKHN0YXRlLAorCQkJCQkJCSAgICAg YnJpZGdlLT5lbmNvZGVyKTsKKwlpZiAoV0FSTl9PTighY29ubmVjdG9yKSkKKwkJcmV0dXJuOwor CWNvbm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBj b25uZWN0b3IpOworCWlmIChXQVJOX09OKCFjb25uX3N0YXRlKSkKKwkJcmV0dXJuOworCWNydGNf c3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwgY29ubl9zdGF0ZS0+ Y3J0Yyk7CisJaWYgKFdBUk5fT04oIWNydGNfc3RhdGUpKQorCQlyZXR1cm47CisKKwloZG1pLT5j ZmcuaGRtaV9kdmlfbW9kZSA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmlzX2hkbWkKKwkJCQk/ IEhETUlfSERNSSA6IEhETUlfRFZJOworCisJaWYgKGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmlz X2hkbWkpIHsKKwkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisJCXN0cnVj dCBoZG1pX2F2aV9pbmZvZnJhbWUgYXZpOworCisJCW1vZGUgPSAmY3J0Y19zdGF0ZS0+YWRqdXN0 ZWRfbW9kZTsKKwkJcmV0ID0gZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9k ZSgmYXZpLCBjb25uZWN0b3IsCisJCQkJCQkJICAgICAgIG1vZGUpOworCQlpZiAocmV0ID09IDAp CisJCQloZG1pLT5jZmcuaW5mb2ZyYW1lID0gYXZpOworCX0KKworCW11dGV4X2xvY2soJmhkbWkt PmxvY2spOworCisJcmV0ID0gaGRtaV9wb3dlcl9vbl9mdWxsKGhkbWkpOworCWlmIChyZXQpIHsK KwkJRFNTRVJSKCJmYWlsZWQgdG8gcG93ZXIgb24gZGV2aWNlXG4iKTsKKwkJZ290byBkb25lOwor CX0KKworCWlmIChoZG1pLT5hdWRpb19jb25maWd1cmVkKSB7CisJCXJldCA9IGhkbWk1X2F1ZGlv X2NvbmZpZygmaGRtaS0+Y29yZSwgJmhkbWktPndwLAorCQkJCQkgJmhkbWktPmF1ZGlvX2NvbmZp ZywKKwkJCQkJIGhkbWktPmNmZy52bS5waXhlbGNsb2NrKTsKKwkJaWYgKHJldCkgeworCQkJRFNT RVJSKCJFcnJvciByZXN0b3JpbmcgYXVkaW8gY29uZmlndXJhdGlvbjogJWQiLCByZXQpOworCQkJ aGRtaS0+YXVkaW9fYWJvcnRfY2IoJmhkbWktPnBkZXYtPmRldik7CisJCQloZG1pLT5hdWRpb19j b25maWd1cmVkID0gZmFsc2U7CisJCX0KKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGRtaS0+ YXVkaW9fcGxheWluZ19sb2NrLCBmbGFncyk7CisJaWYgKGhkbWktPmF1ZGlvX2NvbmZpZ3VyZWQg JiYgaGRtaS0+YXVkaW9fcGxheWluZykKKwkJaGRtaV9zdGFydF9hdWRpb19zdHJlYW0oaGRtaSk7 CisJaGRtaS0+ZGlzcGxheV9lbmFibGVkID0gdHJ1ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZoZG1pLT5hdWRpb19wbGF5aW5nX2xvY2ssIGZsYWdzKTsKKworZG9uZToKKwltdXRleF91bmxv Y2soJmhkbWktPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBoZG1pNV9icmlkZ2VfZGlzYWJsZShz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUpCit7CisJc3RydWN0IG9tYXBfaGRtaSAqaGRtaSA9IGRybV9icmlkZ2VfdG9faGRtaShi cmlkZ2UpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltdXRleF9sb2NrKCZoZG1pLT5sb2Nr KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZoZG1pLT5hdWRpb19wbGF5aW5nX2xvY2ssIGZsYWdz KTsKKwloZG1pX3N0b3BfYXVkaW9fc3RyZWFtKGhkbWkpOworCWhkbWktPmRpc3BsYXlfZW5hYmxl ZCA9IGZhbHNlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhkbWktPmF1ZGlvX3BsYXlpbmdf bG9jaywgZmxhZ3MpOworCisJaGRtaV9wb3dlcl9vZmZfZnVsbChoZG1pKTsKKworCW11dGV4X3Vu bG9jaygmaGRtaS0+bG9jayk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZWRpZCAqaGRtaTVfYnJpZGdl X3JlYWRfZWRpZChzdHJ1Y3Qgb21hcF9oZG1pICpoZG1pLAogCQkJCQkgICBzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQogewpAQCAtNTQ4LDYgKzU1Myw5IEBAIHN0YXRpYyBzdHJ1Y3Qg ZWRpZCAqaGRtaTVfYnJpZGdlX2dldF9lZGlkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCiAK IHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBoZG1pNV9icmlkZ2VfZnVuY3Mg PSB7CiAJLmF0dGFjaCA9IGhkbWk1X2JyaWRnZV9hdHRhY2gsCisJLm1vZGVfc2V0ID0gaGRtaTVf YnJpZGdlX21vZGVfc2V0LAorCS5hdG9taWNfZW5hYmxlID0gaGRtaTVfYnJpZGdlX2VuYWJsZSwK KwkuYXRvbWljX2Rpc2FibGUgPSBoZG1pNV9icmlkZ2VfZGlzYWJsZSwKIAkuZ2V0X2VkaWQgPSBo ZG1pNV9icmlkZ2VfZ2V0X2VkaWQsCiB9OwogCi0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFy dAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs