From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: [PATCH 1/4 v3] drm/i915: mark GEM object pages dirty when mapped & written by the CPU Date: Thu, 10 Dec 2015 18:51:23 +0000 Message-ID: <1449773486-30822-2-git-send-email-david.s.gordon@intel.com> References: <1449773486-30822-1-git-send-email-david.s.gordon@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 F10DA7A1D7 for ; Thu, 10 Dec 2015 10:51:34 -0800 (PST) In-Reply-To: <1449773486-30822-1-git-send-email-david.s.gordon@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 SW4gdmFyaW91cyBwbGFjZXMsIGEgc2luZ2xlIHBhZ2Ugb2YgYSAocmVndWxhcikgR0VNIG9iamVj dCBpcyBtYXBwZWQgaW50bwpDUFUgYWRkcmVzcyBzcGFjZSBhbmQgdXBkYXRlZC4gSW4gZWFjaCBz dWNoIGNhc2UsIGVpdGhlciB0aGUgcGFnZSBvciB0aGUKdGhlIG9iamVjdCBzaG91bGQgYmUgbWFy a2VkIGRpcnR5LCB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUKbm90IGRpc2Nh cmRlZCBpZiB0aGUgb2JqZWN0IGlzIGV2aWN0ZWQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgoKVGhl IHR5cGljYWwgc2VxdWVuY2UgaXM6Cgl2YSA9IGttYXBfYXRvbWljKGk5MTVfZ2VtX29iamVjdF9n ZXRfcGFnZShvYmosIHBhZ2VubykpOwoJKih2YStvZmZzZXQpID0gLi4uCglrdW5tYXBfYXRvbWlj KHZhKTsKCkhlcmUgd2UgaW50cm9kdWNlIGk5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZSgp LCB3aGljaCBwZXJmb3JtcyB0aGUKc2FtZSBvcGVyYXRpb24gYXMgaTkxNV9nZW1fb2JqZWN0X2dl dF9wYWdlKCkgYnV0IHdpdGggdGhlIHNpZGUtZWZmZWN0Cm9mIG1hcmtpbmcgdGhlIHJldHVybmVk IHBhZ2UgZGlydHkgaW4gdGhlIHBhZ2VjYWNoZS4gIFRoaXMgd2lsbCBlbnN1cmUKdGhhdCBpZiB0 aGUgb2JqZWN0IGlzIHN1YnNlcXVlbnRseSBldmljdGVkIChkdWUgdG8gbWVtb3J5IHByZXNzdXJl KSwKdGhlIGNoYW5nZXMgYXJlIHdyaXR0ZW4gdG8gYmFja2luZyBzdG9yZSByYXRoZXIgdGhhbiBk aXNjYXJkZWQuCgpOb3RlIHRoYXQgaXQgd29ya3Mgb25seSBmb3IgcmVndWxhciAoc2htZnMtYmFj a2VkKSBHRU0gb2JqZWN0cywgYnV0IChhdApsZWFzdCBmb3Igbm93KSB0aG9zZSBhcmUgdGhlIG9u bHkgb25lcyB0aGF0IGFyZSB1cGRhdGVkIGluIHRoaXMgd2F5IC0tCnRoZSBvYmplY3RzIGluIHF1 ZXN0aW9uIGFyZSBjb250ZXh0cyBhbmQgYmF0Y2hidWZmZXJzLCB3aGljaCBhcmUgYWx3YXlzCnNo bWZzLWJhY2tlZC4KClNlcGFyYXRlIHBhdGNoZXMgZGVhbCB3aXRoIHRoZSBjYXNlcyB3aGVyZSB3 aG9sZSBvYmplY3RzIGFyZSAob3IgbWF5CmJlKSBkaXJ0aWVkLgoKdjM6IE1hcmsgdHdvIG1vcmUg cGFnZXMgZGlydHkgaW4gdGhlIHBhZ2UtYm91bmRhcnktY3Jvc3NpbmcKICAgIGNhc2VzIG9mIHRo ZSBleGVjYnVmZmVyIHJlbG9jYXRpb24gY29kZSBbQ2hyaXMgV2lsc29uXQoKU2lnbmVkLW9mZi1i eTogRGF2ZSBHb3Jkb24gPGRhdmlkLnMuZ29yZG9uQGludGVsLmNvbT4KQ2M6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmggICAgICAgICAgICAgIHwgIDMgKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jICAgICAgICAgICAgICB8IDE1ICsrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jICAgfCAgOCArKysrLS0tLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fcmVuZGVyX3N0YXRlLmMgfCAgMiArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jICAgfCAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbHJjLmMgICAgICAgICAgICAgfCAxMSArKysrLS0tLS0tLQogNiBmaWxlcyBjaGFu Z2VkLCAyOCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAppbmRleCBmMWE4YTUzLi5jYTc3MzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAg LTI4OTQsNiArMjg5NCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fc2dfcGFnZV9jb3VudChzdHJ1 Y3Qgc2NhdHRlcmxpc3QgKnNnKQogCXJldHVybiBzZy0+bGVuZ3RoID4+IFBBR0VfU0hJRlQ7CiB9 CiAKK3N0cnVjdCBwYWdlICoKK2k5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBpbnQgbik7CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0 IHBhZ2UgKgogaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosIGludCBuKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggZGZhZjI1Yi4u MDZhNWYzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC01MTg0LDYgKzUxODQsMjEgQEAg Ym9vbCBpOTE1X2dlbV9vYmpfaXNfcGlubmVkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCiAJcmV0dXJuIGZhbHNlOwogfQogCisvKiBMaWtlIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFn ZSgpLCBidXQgbWFyayB0aGUgcmV0dXJuZWQgcGFnZSBkaXJ0eSAqLworc3RydWN0IHBhZ2UgKgor aTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosIGludCBuKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCisJLyogT25seSBkZWZhdWx0 IG9iamVjdHMgaGF2ZSBwZXItcGFnZSBkaXJ0eSB0cmFja2luZyAqLworCWlmIChXQVJOX09OKG9i ai0+b3BzICE9ICZpOTE1X2dlbV9vYmplY3Rfb3BzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwYWdl ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKG9iaiwgbik7CisJc2V0X3BhZ2VfZGlydHkocGFn ZSk7CisJcmV0dXJuIHBhZ2U7Cit9CisKIC8qIEFsbG9jYXRlIGEgbmV3IEdFTSBvYmplY3QgYW5k IGZpbGwgaXQgd2l0aCB0aGUgc3VwcGxpZWQgZGF0YSAqLwogc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKgogaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9mcm9tX2RhdGEoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNi dWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwppbmRl eCBhNGMyNDNjLi4xYTFiOTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9leGVjYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhl Y2J1ZmZlci5jCkBAIC0yNjQsNyArMjY0LDcgQEAgcmVsb2NhdGVfZW50cnlfY3B1KHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXZh ZGRyID0ga21hcF9hdG9taWMoaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKG9iaiwKKwl2YWRkciA9 IGttYXBfYXRvbWljKGk5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShvYmosCiAJCQkJcmVs b2MtPm9mZnNldCA+PiBQQUdFX1NISUZUKSk7CiAJKih1aW50MzJfdCAqKSh2YWRkciArIHBhZ2Vf b2Zmc2V0KSA9IGxvd2VyXzMyX2JpdHMoZGVsdGEpOwogCkBAIC0yNzMsNyArMjczLDcgQEAgcmVs b2NhdGVfZW50cnlfY3B1KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAKIAkJaWYg KHBhZ2Vfb2Zmc2V0ID09IDApIHsKIAkJCWt1bm1hcF9hdG9taWModmFkZHIpOwotCQkJdmFkZHIg PSBrbWFwX2F0b21pYyhpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Uob2JqLAorCQkJdmFkZHIgPSBr bWFwX2F0b21pYyhpOTE1X2dlbV9vYmplY3RfZ2V0X2RpcnR5X3BhZ2Uob2JqLAogCQkJICAgIChy ZWxvYy0+b2Zmc2V0ICsgc2l6ZW9mKHVpbnQzMl90KSkgPj4gUEFHRV9TSElGVCkpOwogCQl9CiAK QEAgLTM1NSw3ICszNTUsNyBAQCByZWxvY2F0ZV9lbnRyeV9jbGZsdXNoKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXZhZGRyID0g a21hcF9hdG9taWMoaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKG9iaiwKKwl2YWRkciA9IGttYXBf YXRvbWljKGk5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShvYmosCiAJCQkJcmVsb2MtPm9m ZnNldCA+PiBQQUdFX1NISUZUKSk7CiAJY2xmbHVzaF93cml0ZTMyKHZhZGRyICsgcGFnZV9vZmZz ZXQsIGxvd2VyXzMyX2JpdHMoZGVsdGEpKTsKIApAQCAtMzY0LDcgKzM2NCw3IEBAIHJlbG9jYXRl X2VudHJ5X2NsZmx1c2goc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAogCQlpZiAo cGFnZV9vZmZzZXQgPT0gMCkgewogCQkJa3VubWFwX2F0b21pYyh2YWRkcik7Ci0JCQl2YWRkciA9 IGttYXBfYXRvbWljKGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShvYmosCisJCQl2YWRkciA9IGtt YXBfYXRvbWljKGk5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShvYmosCiAJCQkgICAgKHJl bG9jLT5vZmZzZXQgKyBzaXplb2YodWludDMyX3QpKSA+PiBQQUdFX1NISUZUKSk7CiAJCX0KIApk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVuZGVyX3N0YXRlLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZW5kZXJfc3RhdGUuYwppbmRleCA1MDI2 YTYyLi5mYzdlNmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9y ZW5kZXJfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZW5kZXJf c3RhdGUuYwpAQCAtMTAzLDcgKzEwMyw3IEBAIHN0YXRpYyBpbnQgcmVuZGVyX3N0YXRlX3NldHVw KHN0cnVjdCByZW5kZXJfc3RhdGUgKnNvKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlw YWdlID0gc2dfcGFnZShzby0+b2JqLT5wYWdlcy0+c2dsKTsKKwlwYWdlID0gaTkxNV9nZW1fb2Jq ZWN0X2dldF9kaXJ0eV9wYWdlKHNvLT5vYmosIDApOwogCWQgPSBrbWFwKHBhZ2UpOwogCiAJd2hp bGUgKGkgPCByb2RhdGEtPmJhdGNoX2l0ZW1zKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2d1Y19zdWJtaXNzaW9uLmMKaW5kZXggMGQyMzc4NWIuLjA1YWE3ZTYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKQEAgLTU2OCw3ICs1NjgsNyBAQCBzdGF0 aWMgdm9pZCBscl9jb250ZXh0X3VwZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJx KQogCVdBUk5fT04oIWk5MTVfZ2VtX29ial9pc19waW5uZWQoY3R4X29iaikpOwogCVdBUk5fT04o IWk5MTVfZ2VtX29ial9pc19waW5uZWQocmJfb2JqKSk7CiAKLQlwYWdlID0gaTkxNV9nZW1fb2Jq ZWN0X2dldF9wYWdlKGN0eF9vYmosIExSQ19TVEFURV9QTik7CisJcGFnZSA9IGk5MTVfZ2VtX29i amVjdF9nZXRfZGlydHlfcGFnZShjdHhfb2JqLCBMUkNfU1RBVEVfUE4pOwogCXJlZ19zdGF0ZSA9 IGttYXBfYXRvbWljKHBhZ2UpOwogCiAJcmVnX3N0YXRlW0NUWF9SSU5HX0JVRkZFUl9TVEFSVCsx XSA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChyYl9vYmopOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuYwppbmRleCA0ZWJhZmFiLi5jZWNjZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwpA QCAtMzcyLDcgKzM3Miw3IEBAIHN0YXRpYyBpbnQgZXhlY2xpc3RzX3VwZGF0ZV9jb250ZXh0KHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCiAJV0FSTl9PTighaTkxNV9nZW1fb2JqX2lz X3Bpbm5lZChjdHhfb2JqKSk7CiAJV0FSTl9PTighaTkxNV9nZW1fb2JqX2lzX3Bpbm5lZChyYl9v YmopKTsKIAotCXBhZ2UgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2UoY3R4X29iaiwgTFJDX1NU QVRFX1BOKTsKKwlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKGN0eF9vYmos IExSQ19TVEFURV9QTik7CiAJcmVnX3N0YXRlID0ga21hcF9hdG9taWMocGFnZSk7CiAKIAlyZWdf c3RhdGVbQ1RYX1JJTkdfVEFJTCsxXSA9IHJxLT50YWlsOwpAQCAtMTQyNSw3ICsxNDI1LDcgQEAg c3RhdGljIGludCBpbnRlbF9pbml0X3dvcmthcm91bmRfYmIoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqcmluZykKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dl dF9wYWdlKHdhX2N0eC0+b2JqLCAwKTsKKwlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0 eV9wYWdlKHdhX2N0eC0+b2JqLCAwKTsKIAliYXRjaCA9IGttYXBfYXRvbWljKHBhZ2UpOwogCW9m ZnNldCA9IDA7CiAKQEAgLTIyNTcsNyArMjI1Nyw3IEBAIHBvcHVsYXRlX2xyX2NvbnRleHQoc3Ry dWN0IGludGVsX2NvbnRleHQgKmN0eCwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9v CiAKIAkvKiBUaGUgc2Vjb25kIHBhZ2Ugb2YgdGhlIGNvbnRleHQgb2JqZWN0IGNvbnRhaW5zIHNv bWUgZmllbGRzIHdoaWNoIG11c3QKIAkgKiBiZSBzZXQgdXAgcHJpb3IgdG8gdGhlIGZpcnN0IGV4 ZWN1dGlvbi4gKi8KLQlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGN0eF9vYmosIExS Q19TVEFURV9QTik7CisJcGFnZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShjdHhf b2JqLCBMUkNfU1RBVEVfUE4pOwogCXJlZ19zdGF0ZSA9IGttYXBfYXRvbWljKHBhZ2UpOwogCiAJ LyogQSBjb250ZXh0IGlzIGFjdHVhbGx5IGEgYmlnIGJhdGNoIGJ1ZmZlciB3aXRoIHNldmVyYWwg TUlfTE9BRF9SRUdJU1RFUl9JTU0KQEAgLTIzNDMsOSArMjM0Myw2IEBAIHBvcHVsYXRlX2xyX2Nv bnRleHQoc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKmN0eF9vCiAJfQogCiAJa3VubWFwX2F0b21pYyhyZWdfc3RhdGUpOwotCi0JY3R4X29iai0+ ZGlydHkgPSAxOwotCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCWk5MTVfZ2VtX29iamVjdF91bnBp bl9wYWdlcyhjdHhfb2JqKTsKIAogCXJldHVybiAwOwpAQCAtMjUyOSw3ICsyNTI2LDcgQEAgdm9p ZCBpbnRlbF9scl9jb250ZXh0X3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQlXQVJO KDEsICJGYWlsZWQgZ2V0X3BhZ2VzIGZvciBjb250ZXh0IG9ialxuIik7CiAJCQljb250aW51ZTsK IAkJfQotCQlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGN0eF9vYmosIExSQ19TVEFU RV9QTik7CisJCXBhZ2UgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2RpcnR5X3BhZ2UoY3R4X29iaiwg TFJDX1NUQVRFX1BOKTsKIAkJcmVnX3N0YXRlID0ga21hcF9hdG9taWMocGFnZSk7CiAKIAkJcmVn X3N0YXRlW0NUWF9SSU5HX0hFQUQrMV0gPSAwOwotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==