From mboxrd@z Thu Jan 1 00:00:00 1970 From: deepak.s@linux.intel.com Subject: [PATCH 2/7] drm/i915/chv: Added CHV specific register read and write and Streamline CHV forcewake stuff Date: Fri, 23 May 2014 21:00:16 +0530 Message-ID: <1400859021-32202-3-git-send-email-deepak.s@linux.intel.com> References: <1400859021-32202-1-git-send-email-deepak.s@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 51CE46EE3A for ; Fri, 23 May 2014 08:30:30 -0700 (PDT) In-Reply-To: <1400859021-32202-1-git-send-email-deepak.s@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 RnJvbTogRGVlcGFrIFMgPGRlZXBhay5zQGxpbnV4LmludGVsLmNvbT4KClN1cHBvcnQgdG8gaW5k aXZpZHVhbGx5IGNvbnRyb2wgTWVkaWEvUmVuZGVyIHdlbGwgYmFzZWQgb24gdGhlIHJlZ2lzdGVy IGFjY2Vzcy4KQWRkIENIViBzcGVjaWZpYyB3cml0ZSBmdW5jdGlvbiB0byBoYWJkbGUgZGlmZmVy ZW5jZSBiZXR3ZWVuIHJlZ2lzdGVycwp0aGF0IGFyZSBzYWRvd2VkIHZzIHRob3NlIHRoYXQgbmVl ZCBmb3JjZXdha2UgZXZlbiBmb3Igd3JpdGVzLgoKU3RyZWFtbGluZSB0aGUgQ0hWIGZvcmNld2Fr ZSBmdW5jdGlvbnMganVzdCBsaWtlIHdhcyBkb25lIGZvciBWTFYuCgpUaGlzIHdpbGwgYWxzbyBm aXggYSBidWcgaW4gYWNjZXNzaW5nIHRoZSBjb21tb24gd2VsbCByZWdpc3RlcnMsCndoZXJlIHdl J2QgZW5kIHVwIHRyeWluZyB0byB3YWtlIHVwIHRoZSB3ZWxscyB0b28gbWFueSB0aW1lcwpzaW5j ZSB3ZSdkIGNhbGwgZm9yY2Vfd2FrZV9nZXQvcHV0IHR3aWNlIHBlciByZWdpc3RlciBhY2Nlc3Ms IHdpdGgKRk9SQ0VGQUtFX0FMTCBib3RoIHRpbWVzLgoKdjI6IERyb3Agd3JpdGUgRklGTyBmb3Ig Q0hWIGFuZCBhZGQgY29tbWFuIHdlbGwgZm9yY2V3YWtlIChWaWxsZSkKICAgIFJlLWZhY3RvciBD SFYvVkxWIEZvcmNld2FrZSBvZmZzZXRzIChCZW4pCgp2MzogRml4IGZvciBkZWNyZW1lbnRpbmcg ZncgY291bnQgaW4gY2h2IHJlYWQvd3JpdGUuIChEZWVwYWspCgp2NDogU3F1YXNoIHRoZSBwYXRj aGVzIChNaWthKQoKUmV2aWV3ZWQtYnk6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAaW50 ZWwuY29tPgpbdnN5cmphbGE6IE1vdmUgdGhlIHJlZ2lzdGVyIHJhbmdlIG1hY3JvcyBpbnRvIGlu dGVsX3VuY29yZS5jXQpTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmph bGFAbGludXguaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBEZWVwYWsgUyA8ZGVlcGFrLnNAbGlu dXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VuY29yZS5jIHwg MTM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogMSBmaWxlIGNoYW5nZWQs IDExOCBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3VuY29yZS5jCmluZGV4IDJmNWQ1ZDMuLjc0MDlkZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3VuY29yZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3VuY29yZS5jCkBAIC00ODYsMTYgKzQ4Niw0MyBAQCB2b2lkIGFzc2VydF9mb3JjZV93YWtlX2lu YWN0aXZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKICNkZWZpbmUgTkVFRFNf Rk9SQ0VfV0FLRShkZXZfcHJpdiwgcmVnKSBcCiAJICgocmVnKSA8IDB4NDAwMDAgJiYgKHJlZykg IT0gRk9SQ0VXQUtFKQogCi0jZGVmaW5lIEZPUkNFV0FLRV9WTFZfUkVOREVSX1JBTkdFX09GRlNF VChyZWcpIFwKLQkoKChyZWcpID49IDB4MjAwMCAmJiAocmVnKSA8IDB4NDAwMCkgfHxcCi0JKChy ZWcpID49IDB4NTAwMCAmJiAocmVnKSA8IDB4ODAwMCkgfHxcCi0JKChyZWcpID49IDB4QjAwMCAm JiAocmVnKSA8IDB4MTIwMDApIHx8XAotCSgocmVnKSA+PSAweDJFMDAwICYmIChyZWcpIDwgMHgz MDAwMCkpCisjZGVmaW5lIFJFR19SQU5HRShyZWcsIHN0YXJ0LCBlbmQpICgocmVnKSA+PSAoc3Rh cnQpICYmIChyZWcpIDwgKGVuZCkpCiAKLSNkZWZpbmUgRk9SQ0VXQUtFX1ZMVl9NRURJQV9SQU5H RV9PRkZTRVQocmVnKVwKLQkoKChyZWcpID49IDB4MTIwMDAgJiYgKHJlZykgPCAweDE0MDAwKSB8 fFwKLQkoKHJlZykgPj0gMHgyMjAwMCAmJiAocmVnKSA8IDB4MjQwMDApIHx8XAotCSgocmVnKSA+ PSAweDMwMDAwICYmIChyZWcpIDwgMHg0MDAwMCkpCisjZGVmaW5lIEZPUkNFV0FLRV9WTFZfUkVO REVSX1JBTkdFX09GRlNFVChyZWcpIFwKKwkoUkVHX1JBTkdFKChyZWcpLCAweDIwMDAsIDB4NDAw MCkgfHwgXAorCSBSRUdfUkFOR0UoKHJlZyksIDB4NTAwMCwgMHg4MDAwKSB8fCBcCisJIFJFR19S QU5HRSgocmVnKSwgMHhCMDAwLCAweDEyMDAwKSB8fCBcCisJIFJFR19SQU5HRSgocmVnKSwgMHgy RTAwMCwgMHgzMDAwMCkpCisKKyNkZWZpbmUgRk9SQ0VXQUtFX1ZMVl9NRURJQV9SQU5HRV9PRkZT RVQocmVnKSBcCisJKFJFR19SQU5HRSgocmVnKSwgMHgxMjAwMCwgMHgxNDAwMCkgfHwgXAorCSBS RUdfUkFOR0UoKHJlZyksIDB4MjIwMDAsIDB4MjQwMDApIHx8IFwKKwkgUkVHX1JBTkdFKChyZWcp LCAweDMwMDAwLCAweDQwMDAwKSkKKworI2RlZmluZSBGT1JDRVdBS0VfQ0hWX1JFTkRFUl9SQU5H RV9PRkZTRVQocmVnKSBcCisJKFJFR19SQU5HRSgocmVnKSwgMHgyMDAwLCAweDQwMDApIHx8IFwK KwkgUkVHX1JBTkdFKChyZWcpLCAweDUwMDAsIDB4ODAwMCkgfHwgXAorCSBSRUdfUkFOR0UoKHJl ZyksIDB4ODMwMCwgMHg4NTAwKSB8fCBcCisJIFJFR19SQU5HRSgocmVnKSwgMHhCMDAwLCAweEMw MDApIHx8IFwKKwkgUkVHX1JBTkdFKChyZWcpLCAweEUwMDAsIDB4RTgwMCkpCisKKyNkZWZpbmUg Rk9SQ0VXQUtFX0NIVl9NRURJQV9SQU5HRV9PRkZTRVQocmVnKSBcCisJKFJFR19SQU5HRSgocmVn KSwgMHg4ODAwLCAweDg5MDApIHx8IFwKKwkgUkVHX1JBTkdFKChyZWcpLCAweEQwMDAsIDB4RDgw MCkgfHwgXAorCSBSRUdfUkFOR0UoKHJlZyksIDB4MTIwMDAsIDB4MTQwMDApIHx8IFwKKwkgUkVH X1JBTkdFKChyZWcpLCAweDFBMDAwLCAweDFDMDAwKSB8fCBcCisJIFJFR19SQU5HRSgocmVnKSwg MHgxRTgwMCwgMHgxRUEwMCkgfHwgXAorCSBSRUdfUkFOR0UoKHJlZyksIDB4MzAwMDAsIDB4NDAw MDApKQorCisjZGVmaW5lIEZPUkNFV0FLRV9DSFZfQ09NTU9OX1JBTkdFX09GRlNFVChyZWcpIFwK KwkoUkVHX1JBTkdFKChyZWcpLCAweDQwMDAsIDB4NTAwMCkgfHwgXAorCSBSRUdfUkFOR0UoKHJl ZyksIDB4ODAwMCwgMHg4MzAwKSB8fCBcCisJIFJFR19SQU5HRSgocmVnKSwgMHg4NTAwLCAweDg2 MDApIHx8IFwKKwkgUkVHX1JBTkdFKChyZWcpLCAweDkwMDAsIDB4QjAwMCkgfHwgXAorCSBSRUdf UkFOR0UoKHJlZyksIDB4QzAwMCwgMHhDODAwKSB8fCBcCisJIFJFR19SQU5HRSgocmVnKSwgMHhG MDAwLCAweDEwMDAwKSB8fCBcCisJIFJFR19SQU5HRSgocmVnKSwgMHgxNDAwMCwgMHgxNDQwMCkg fHwgXAorCSBSRUdfUkFOR0UoKHJlZyksIDB4MjIwMDAsIDB4MjQwMDApKQogCiBzdGF0aWMgdm9p ZAogaWxrX2R1bW15X3dyaXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKQEAg LTU5MCw3ICs2MTcsMzUgQEAgdmx2X3JlYWQjI3goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCBvZmZfdCByZWcsIGJvb2wgdHJhY2UpIHsgXAogCVJFR19SRUFEX0ZPT1RFUjsgXAog fQogCisjZGVmaW5lIF9fY2h2X3JlYWQoeCkgXAorc3RhdGljIHUjI3ggXAorY2h2X3JlYWQjI3go c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBvZmZfdCByZWcsIGJvb2wgdHJhY2Up IHsgXAorCXVuc2lnbmVkIGZ3ZW5naW5lID0gMDsgXAorCVJFR19SRUFEX0hFQURFUih4KTsgXAor CWlmIChGT1JDRVdBS0VfQ0hWX1JFTkRFUl9SQU5HRV9PRkZTRVQocmVnKSkgeyBcCisJCWlmIChk ZXZfcHJpdi0+dW5jb3JlLmZ3X3JlbmRlcmNvdW50ID09IDApIFwKKwkJCWZ3ZW5naW5lID0gRk9S Q0VXQUtFX1JFTkRFUjsgXAorCX0gZWxzZSBpZiAoRk9SQ0VXQUtFX0NIVl9NRURJQV9SQU5HRV9P RkZTRVQocmVnKSkgeyBcCisJCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlhY291bnQgPT0g MCkgXAorCQkJZndlbmdpbmUgPSBGT1JDRVdBS0VfTUVESUE7IFwKKwl9IGVsc2UgaWYgKEZPUkNF V0FLRV9DSFZfQ09NTU9OX1JBTkdFX09GRlNFVChyZWcpKSB7IFwKKwkJaWYgKGRldl9wcml2LT51 bmNvcmUuZndfcmVuZGVyY291bnQgPT0gMCkgXAorCQkJZndlbmdpbmUgfD0gRk9SQ0VXQUtFX1JF TkRFUjsgXAorCQlpZiAoZGV2X3ByaXYtPnVuY29yZS5md19tZWRpYWNvdW50ID09IDApIFwKKwkJ CWZ3ZW5naW5lIHw9IEZPUkNFV0FLRV9NRURJQTsgXAorCX0gXAorCWlmIChmd2VuZ2luZSkgXAor CQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfZ2V0KGRldl9wcml2LCBmd2VuZ2lu ZSk7IFwKKwl2YWwgPSBfX3Jhd19pOTE1X3JlYWQjI3goZGV2X3ByaXYsIHJlZyk7IFwKKwlpZiAo ZndlbmdpbmUpIFwKKwkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX3B1dChkZXZf cHJpdiwgZndlbmdpbmUpOyBcCisJUkVHX1JFQURfRk9PVEVSOyBcCit9CiAKK19fY2h2X3JlYWQo OCkKK19fY2h2X3JlYWQoMTYpCitfX2Nodl9yZWFkKDMyKQorX19jaHZfcmVhZCg2NCkKIF9fdmx2 X3JlYWQoOCkKIF9fdmx2X3JlYWQoMTYpCiBfX3Zsdl9yZWFkKDMyKQpAQCAtNjA4LDYgKzY2Myw3 IEBAIF9fZ2VuNF9yZWFkKDE2KQogX19nZW40X3JlYWQoMzIpCiBfX2dlbjRfcmVhZCg2NCkKIAor I3VuZGVmIF9fY2h2X3JlYWQKICN1bmRlZiBfX3Zsdl9yZWFkCiAjdW5kZWYgX19nZW42X3JlYWQK ICN1bmRlZiBfX2dlbjVfcmVhZApAQCAtNzEyLDYgKzc2OCwzOCBAQCBnZW44X3dyaXRlIyN4KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgb2ZmX3QgcmVnLCB1IyN4IHZhbCwgYm9v bCB0cmFjZQogCVJFR19XUklURV9GT09URVI7IFwKIH0KIAorI2RlZmluZSBfX2Nodl93cml0ZSh4 KSBcCitzdGF0aWMgdm9pZCBcCitjaHZfd3JpdGUjI3goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LCBvZmZfdCByZWcsIHUjI3ggdmFsLCBib29sIHRyYWNlKSB7IFwKKwl1bnNpZ25l ZCBmd2VuZ2luZSA9IDA7IFwKKwlib29sIHNoYWRvd2VkID0gaXNfZ2VuOF9zaGFkb3dlZChkZXZf cHJpdiwgcmVnKTsgXAorCVJFR19XUklURV9IRUFERVI7IFwKKwlpZiAoIXNoYWRvd2VkKSB7IFwK KwkJaWYgKEZPUkNFV0FLRV9DSFZfUkVOREVSX1JBTkdFX09GRlNFVChyZWcpKSB7IFwKKwkJCWlm IChkZXZfcHJpdi0+dW5jb3JlLmZ3X3JlbmRlcmNvdW50ID09IDApIFwKKwkJCQlmd2VuZ2luZSA9 IEZPUkNFV0FLRV9SRU5ERVI7IFwKKwkJfSBlbHNlIGlmIChGT1JDRVdBS0VfQ0hWX01FRElBX1JB TkdFX09GRlNFVChyZWcpKSB7IFwKKwkJCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlhY291 bnQgPT0gMCkgXAorCQkJCWZ3ZW5naW5lID0gRk9SQ0VXQUtFX01FRElBOyBcCisJCX0gZWxzZSBp ZiAoRk9SQ0VXQUtFX0NIVl9DT01NT05fUkFOR0VfT0ZGU0VUKHJlZykpIHsgXAorCQkJaWYgKGRl dl9wcml2LT51bmNvcmUuZndfcmVuZGVyY291bnQgPT0gMCkgXAorCQkJCWZ3ZW5naW5lIHw9IEZP UkNFV0FLRV9SRU5ERVI7IFwKKwkJCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZ3X21lZGlhY291bnQg PT0gMCkgXAorCQkJCWZ3ZW5naW5lIHw9IEZPUkNFV0FLRV9NRURJQTsgXAorCQl9IFwKKwl9IFwK KwlpZiAoZndlbmdpbmUpIFwKKwkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dl dChkZXZfcHJpdiwgZndlbmdpbmUpOyBcCisJX19yYXdfaTkxNV93cml0ZSMjeChkZXZfcHJpdiwg cmVnLCB2YWwpOyBcCisJaWYgKGZ3ZW5naW5lKSBcCisJCWRldl9wcml2LT51bmNvcmUuZnVuY3Mu Zm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYsIGZ3ZW5naW5lKTsgXAorCVJFR19XUklURV9GT09URVI7 IFwKK30KKworX19jaHZfd3JpdGUoOCkKK19fY2h2X3dyaXRlKDE2KQorX19jaHZfd3JpdGUoMzIp CitfX2Nodl93cml0ZSg2NCkKIF9fZ2VuOF93cml0ZSg4KQogX19nZW44X3dyaXRlKDE2KQogX19n ZW44X3dyaXRlKDMyKQpAQCAtNzMzLDYgKzgyMSw3IEBAIF9fZ2VuNF93cml0ZSgxNikKIF9fZ2Vu NF93cml0ZSgzMikKIF9fZ2VuNF93cml0ZSg2NCkKIAorI3VuZGVmIF9fY2h2X3dyaXRlCiAjdW5k ZWYgX19nZW44X3dyaXRlCiAjdW5kZWYgX19oc3dfd3JpdGUKICN1bmRlZiBfX2dlbjZfd3JpdGUK QEAgLTc5NiwxNCArODg1LDI2IEBAIHZvaWQgaW50ZWxfdW5jb3JlX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKIAogCXN3aXRjaCAoSU5URUxfSU5GTyhkZXYpLT5nZW4pIHsKIAlkZWZhdWx0 OgotCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLm1taW9fd3JpdGViICA9IGdlbjhfd3JpdGU4Owot CQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLm1taW9fd3JpdGV3ICA9IGdlbjhfd3JpdGUxNjsKLQkJ ZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5tbWlvX3dyaXRlbCAgPSBnZW44X3dyaXRlMzI7Ci0JCWRl dl9wcml2LT51bmNvcmUuZnVuY3MubW1pb193cml0ZXEgID0gZ2VuOF93cml0ZTY0OwotCQlkZXZf cHJpdi0+dW5jb3JlLmZ1bmNzLm1taW9fcmVhZGIgID0gZ2VuNl9yZWFkODsKLQkJZGV2X3ByaXYt PnVuY29yZS5mdW5jcy5tbWlvX3JlYWR3ICA9IGdlbjZfcmVhZDE2OwotCQlkZXZfcHJpdi0+dW5j b3JlLmZ1bmNzLm1taW9fcmVhZGwgID0gZ2VuNl9yZWFkMzI7Ci0JCWRldl9wcml2LT51bmNvcmUu ZnVuY3MubW1pb19yZWFkcSAgPSBnZW42X3JlYWQ2NDsKKwkJaWYgKElTX0NIRVJSWVZJRVcoZGV2 KSkgeworCQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5tbWlvX3dyaXRlYiAgPSBjaHZfd3JpdGU4 OworCQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5tbWlvX3dyaXRldyAgPSBjaHZfd3JpdGUxNjsK KwkJCWRldl9wcml2LT51bmNvcmUuZnVuY3MubW1pb193cml0ZWwgID0gY2h2X3dyaXRlMzI7CisJ CQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLm1taW9fd3JpdGVxICA9IGNodl93cml0ZTY0OworCQkJ ZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5tbWlvX3JlYWRiICA9IGNodl9yZWFkODsKKwkJCWRldl9w cml2LT51bmNvcmUuZnVuY3MubW1pb19yZWFkdyAgPSBjaHZfcmVhZDE2OworCQkJZGV2X3ByaXYt PnVuY29yZS5mdW5jcy5tbWlvX3JlYWRsICA9IGNodl9yZWFkMzI7CisJCQlkZXZfcHJpdi0+dW5j b3JlLmZ1bmNzLm1taW9fcmVhZHEgID0gY2h2X3JlYWQ2NDsKKworCQl9IGVsc2UgeworCQkJZGV2 X3ByaXYtPnVuY29yZS5mdW5jcy5tbWlvX3dyaXRlYiAgPSBnZW44X3dyaXRlODsKKwkJCWRldl9w cml2LT51bmNvcmUuZnVuY3MubW1pb193cml0ZXcgID0gZ2VuOF93cml0ZTE2OworCQkJZGV2X3By aXYtPnVuY29yZS5mdW5jcy5tbWlvX3dyaXRlbCAgPSBnZW44X3dyaXRlMzI7CisJCQlkZXZfcHJp di0+dW5jb3JlLmZ1bmNzLm1taW9fd3JpdGVxICA9IGdlbjhfd3JpdGU2NDsKKwkJCWRldl9wcml2 LT51bmNvcmUuZnVuY3MubW1pb19yZWFkYiAgPSBnZW42X3JlYWQ4OworCQkJZGV2X3ByaXYtPnVu Y29yZS5mdW5jcy5tbWlvX3JlYWR3ICA9IGdlbjZfcmVhZDE2OworCQkJZGV2X3ByaXYtPnVuY29y ZS5mdW5jcy5tbWlvX3JlYWRsICA9IGdlbjZfcmVhZDMyOworCQkJZGV2X3ByaXYtPnVuY29yZS5m dW5jcy5tbWlvX3JlYWRxICA9IGdlbjZfcmVhZDY0OworCQl9CiAJCWJyZWFrOwogCWNhc2UgNzoK IAljYXNlIDY6Ci0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK