From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Airlie Subject: [PATCH 3/7] sync_file: split out fence_file base class from sync_file. Date: Thu, 13 Apr 2017 11:41:40 +1000 Message-ID: <20170413014144.637-4-airlied@gmail.com> References: <20170413014144.637-1-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170413014144.637-1-airlied-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMganVzdCBzcGxpdHMg b3V0IGEgY29tbW9uIGJhc2Ugb2JqZWN0IHRvIGJlIHNoYXJlZApiZXR3ZWVuIHN5bmNfZmlsZSBh bmQgc2VtX2ZpbGVzLgoKU2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0 LmNvbT4KLS0tCiBkcml2ZXJzL2RtYS1idWYvc3luY19maWxlLmMgIHwgNDkgKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRv bWljLmMgfCAgNCArKy0tCiBpbmNsdWRlL2xpbnV4L3N5bmNfZmlsZS5oICAgIHwgMTcgKysrKysr KysrKy0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDQ0IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9zeW5jX2ZpbGUuYyBiL2RyaXZlcnMv ZG1hLWJ1Zi9zeW5jX2ZpbGUuYwppbmRleCA5YjdhZDdlLi4yMzQyZDhiIDEwMDY0NAotLS0gYS9k cml2ZXJzL2RtYS1idWYvc3luY19maWxlLmMKKysrIGIvZHJpdmVycy9kbWEtYnVmL3N5bmNfZmls ZS5jCkBAIC0yOCwxNyArMjgsMjggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJh dGlvbnMgc3luY19maWxlX2ZvcHM7CiAKK3N0YXRpYyBpbnQgZmVuY2VfZmlsZV9pbml0KHN0cnVj dCBmZW5jZV9maWxlICpmZW5jZV9maWxlLAorCQkJICAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0 aW9ucyAqZm9wcykKK3sKKwlmZW5jZV9maWxlLT5maWxlID0gYW5vbl9pbm9kZV9nZXRmaWxlKCJm ZW5jZV9maWxlIiwgZm9wcywKKwkJCQkJICAgICBmZW5jZV9maWxlLCAwKTsKKwlpZiAoSVNfRVJS KGZlbmNlX2ZpbGUtPmZpbGUpKQorCQlyZXR1cm4gUFRSX0VSUihmZW5jZV9maWxlLT5maWxlKTsK KwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZV9hbGxv Yyh2b2lkKQogewogCXN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZTsKKwlpbnQgcmV0OwogCiAJ c3luY19maWxlID0ga3phbGxvYyhzaXplb2YoKnN5bmNfZmlsZSksIEdGUF9LRVJORUwpOwogCWlm ICghc3luY19maWxlKQogCQlyZXR1cm4gTlVMTDsKIAotCXN5bmNfZmlsZS0+ZmlsZSA9IGFub25f aW5vZGVfZ2V0ZmlsZSgic3luY19maWxlIiwgJnN5bmNfZmlsZV9mb3BzLAotCQkJCQkgICAgIHN5 bmNfZmlsZSwgMCk7Ci0JaWYgKElTX0VSUihzeW5jX2ZpbGUtPmZpbGUpKQorCXJldCA9IGZlbmNl X2ZpbGVfaW5pdCgmc3luY19maWxlLT5iYXNlLAorCQkJICAgICAgJnN5bmNfZmlsZV9mb3BzKTsK KwlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN5bmNfZmls ZS0+d3EpOwpAQCAtNjcsNyArNzgsNyBAQCBzdGF0aWMgdm9pZCBmZW5jZV9jaGVja19jYl9mdW5j KHN0cnVjdCBkbWFfZmVuY2UgKmYsIHN0cnVjdCBkbWFfZmVuY2VfY2IgKmNiKQogICoKICAqIENy ZWF0ZXMgYSBzeW5jX2ZpbGUgY29udGFpbmcgQGZlbmNlLiBUaGlzIGZ1bmN0aW9uIGFjcXVpcmVz IGFuZCBhZGRpdGlvbmFsCiAgKiByZWZlcmVuY2Ugb2YgQGZlbmNlIGZvciB0aGUgbmV3bHktY3Jl YXRlZCAmc3luY19maWxlLCBpZiBpdCBzdWNjZWVkcy4gVGhlCi0gKiBzeW5jX2ZpbGUgY2FuIGJl IHJlbGVhc2VkIHdpdGggZnB1dChzeW5jX2ZpbGUtPmZpbGUpLiBSZXR1cm5zIHRoZQorICogc3lu Y19maWxlIGNhbiBiZSByZWxlYXNlZCB3aXRoIGZwdXQoc3luY19maWxlLT5iYXNlLmZpbGUpLiBS ZXR1cm5zIHRoZQogICogc3luY19maWxlIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KICAqLwog c3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlX2NyZWF0ZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5j ZSkKQEAgLTc4LDcgKzg5LDcgQEAgc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlX2NyZWF0ZShz dHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKIAlpZiAoIXN5bmNfZmlsZSkKIAkJcmV0dXJuIE5VTEw7 CiAKLQlSQ1VfSU5JVF9QT0lOVEVSKHN5bmNfZmlsZS0+ZmVuY2UsIGRtYV9mZW5jZV9nZXQoZmVu Y2UpKTsKKwlSQ1VfSU5JVF9QT0lOVEVSKHN5bmNfZmlsZS0+YmFzZS5mZW5jZSwgZG1hX2ZlbmNl X2dldChmZW5jZSkpOwogCiAJc25wcmludGYoc3luY19maWxlLT5uYW1lLCBzaXplb2Yoc3luY19m aWxlLT5uYW1lKSwgIiVzLSVzJWxsdS0lZCIsCiAJCSBmZW5jZS0+b3BzLT5nZXRfZHJpdmVyX25h bWUoZmVuY2UpLApAQCAtMTIyLDggKzEzMyw4IEBAIHN0cnVjdCBkbWFfZmVuY2UgKnN5bmNfZmls ZV9nZXRfZmVuY2UoaW50IGZkKQogCWlmICghc3luY19maWxlKQogCQlyZXR1cm4gTlVMTDsKIAot CWZlbmNlID0gZG1hX2ZlbmNlX2dldChyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN5bmNfZmls ZS0+ZmVuY2UsIDEpKTsKLQlmcHV0KHN5bmNfZmlsZS0+ZmlsZSk7CisJZmVuY2UgPSBkbWFfZmVu Y2VfZ2V0KHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3luY19maWxlLT5iYXNlLmZlbmNlLCAx KSk7CisJZnB1dChzeW5jX2ZpbGUtPmJhc2UuZmlsZSk7CiAKIAlyZXR1cm4gZmVuY2U7CiB9CkBA IC0xNDEsNyArMTUyLDcgQEAgc3RhdGljIGludCBzeW5jX2ZpbGVfc2V0X2ZlbmNlKHN0cnVjdCBz eW5jX2ZpbGUgKnN5bmNfZmlsZSwKIAkgKiB3ZSBvd24gdGhlIHJlZmVyZW5jZSBvZiB0aGUgZG1h X2ZlbmNlX2FycmF5IGNyZWF0aW9uLgogCSAqLwogCWlmIChudW1fZmVuY2VzID09IDEpIHsKLQkJ UkNVX0lOSVRfUE9JTlRFUihzeW5jX2ZpbGUtPmZlbmNlLCBmZW5jZXNbMF0pOworCQlSQ1VfSU5J VF9QT0lOVEVSKHN5bmNfZmlsZS0+YmFzZS5mZW5jZSwgZmVuY2VzWzBdKTsKIAkJa2ZyZWUoZmVu Y2VzKTsKIAl9IGVsc2UgewogCQlhcnJheSA9IGRtYV9mZW5jZV9hcnJheV9jcmVhdGUobnVtX2Zl bmNlcywgZmVuY2VzLApAQCAtMTUwLDcgKzE2MSw3IEBAIHN0YXRpYyBpbnQgc3luY19maWxlX3Nl dF9mZW5jZShzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUsCiAJCWlmICghYXJyYXkpCiAJCQly ZXR1cm4gLUVOT01FTTsKIAotCQlSQ1VfSU5JVF9QT0lOVEVSKHN5bmNfZmlsZS0+ZmVuY2UsICZh cnJheS0+YmFzZSk7CisJCVJDVV9JTklUX1BPSU5URVIoc3luY19maWxlLT5iYXNlLmZlbmNlLCAm YXJyYXktPmJhc2UpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTU5LDcgKzE3MCw3IEBAIHN0YXRp YyBpbnQgc3luY19maWxlX3NldF9mZW5jZShzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUsCiBz dGF0aWMgc3RydWN0IGRtYV9mZW5jZSAqKmdldF9mZW5jZXMoc3RydWN0IHN5bmNfZmlsZSAqc3lu Y19maWxlLAogCQkJCSAgICAgaW50ICpudW1fZmVuY2VzKQogewotCXN0cnVjdCBkbWFfZmVuY2Ug KmZlbmNlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzeW5jX2ZpbGUtPmZlbmNlLCAxKTsK KwlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3lu Y19maWxlLT5iYXNlLmZlbmNlLCAxKTsKIAlpZiAoZG1hX2ZlbmNlX2lzX2FycmF5KGZlbmNlKSkg ewogCQlzdHJ1Y3QgZG1hX2ZlbmNlX2FycmF5ICphcnJheSA9IHRvX2RtYV9mZW5jZV9hcnJheShm ZW5jZSk7CiAKQEAgLTE2OCw3ICsxNzksNyBAQCBzdGF0aWMgc3RydWN0IGRtYV9mZW5jZSAqKmdl dF9mZW5jZXMoc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlLAogCX0KIAogCSpudW1fZmVuY2Vz ID0gMTsKLQlyZXR1cm4gJnN5bmNfZmlsZS0+ZmVuY2U7CisJcmV0dXJuICZzeW5jX2ZpbGUtPmJh c2UuZmVuY2U7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF9mZW5jZShzdHJ1Y3QgZG1hX2ZlbmNlICoq ZmVuY2VzLApAQCAtMjcxLDcgKzI4Miw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3luY19maWxlICpzeW5j X2ZpbGVfbWVyZ2UoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN5bmNfZmlsZSAqYSwKIAlyZXR1 cm4gc3luY19maWxlOwogCiBlcnI6Ci0JZnB1dChzeW5jX2ZpbGUtPmZpbGUpOworCWZwdXQoc3lu Y19maWxlLT5iYXNlLmZpbGUpOwogCXJldHVybiBOVUxMOwogCiB9CkBAIC0yODEsNyArMjkyLDcg QEAgc3RhdGljIGludCBzeW5jX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1 Y3QgZmlsZSAqZmlsZSkKIAlzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUgPSBmaWxlLT5wcml2 YXRlX2RhdGE7CiAJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7CiAKLQlmZW5jZSA9IHJjdV9kZXJl ZmVyZW5jZV9wcm90ZWN0ZWQoc3luY19maWxlLT5mZW5jZSwgMSk7CisJZmVuY2UgPSByY3VfZGVy ZWZlcmVuY2VfcHJvdGVjdGVkKHN5bmNfZmlsZS0+YmFzZS5mZW5jZSwgMSk7CiAJaWYgKHRlc3Rf Yml0KFBPTExfRU5BQkxFRCwgJmZlbmNlLT5mbGFncykpCiAJCWRtYV9mZW5jZV9yZW1vdmVfY2Fs bGJhY2soZmVuY2UsICZzeW5jX2ZpbGUtPmNiKTsKIAlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKQEAg LTI5NSw3ICszMDYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHN5bmNfZmlsZV9wb2xsKHN0cnVj dCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogCXN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNf ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKIAot CWZlbmNlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzeW5jX2ZpbGUtPmZlbmNlLCAxKTsK KwlmZW5jZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3luY19maWxlLT5iYXNlLmZlbmNl LCAxKTsKIAogCXBvbGxfd2FpdChmaWxlLCAmc3luY19maWxlLT53cSwgd2FpdCk7CiAKQEAgLTM0 OCwxNSArMzU5LDE1IEBAIHN0YXRpYyBsb25nIHN5bmNfZmlsZV9pb2N0bF9tZXJnZShzdHJ1Y3Qg c3luY19maWxlICpzeW5jX2ZpbGUsCiAJCWdvdG8gZXJyX3B1dF9mZW5jZTM7CiAJfQogCi0JZmRf aW5zdGFsbChmZCwgZmVuY2UzLT5maWxlKTsKLQlmcHV0KGZlbmNlMi0+ZmlsZSk7CisJZmRfaW5z dGFsbChmZCwgZmVuY2UzLT5iYXNlLmZpbGUpOworCWZwdXQoZmVuY2UyLT5iYXNlLmZpbGUpOwog CXJldHVybiAwOwogCiBlcnJfcHV0X2ZlbmNlMzoKLQlmcHV0KGZlbmNlMy0+ZmlsZSk7CisJZnB1 dChmZW5jZTMtPmJhc2UuZmlsZSk7CiAKIGVycl9wdXRfZmVuY2UyOgotCWZwdXQoZmVuY2UyLT5m aWxlKTsKKwlmcHV0KGZlbmNlMi0+YmFzZS5maWxlKTsKIAogZXJyX3B1dF9mZDoKIAlwdXRfdW51 c2VkX2ZkKGZkKTsKQEAgLTQyMCw3ICs0MzEsNyBAQCBzdGF0aWMgbG9uZyBzeW5jX2ZpbGVfaW9j dGxfZmVuY2VfaW5mbyhzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUsCiAKIG5vX2ZlbmNlczoK IAlzdHJsY3B5KGluZm8ubmFtZSwgc3luY19maWxlLT5uYW1lLCBzaXplb2YoaW5mby5uYW1lKSk7 Ci0JaW5mby5zdGF0dXMgPSBkbWFfZmVuY2VfaXNfc2lnbmFsZWQocmN1X2RlcmVmZXJlbmNlX3By b3RlY3RlZChzeW5jX2ZpbGUtPmZlbmNlLCAxKSk7CisJaW5mby5zdGF0dXMgPSBkbWFfZmVuY2Vf aXNfc2lnbmFsZWQocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzeW5jX2ZpbGUtPmJhc2UuZmVu Y2UsIDEpKTsKIAlpbmZvLm51bV9mZW5jZXMgPSBudW1fZmVuY2VzOwogCiAJaWYgKGNvcHlfdG9f dXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpbmZvLCBzaXplb2YoaW5mbykpKQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRv bWljLmMKaW5kZXggYTU2NzMxMC4uMTYwNTNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2RybV9hdG9taWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCkBAIC0yMDEy LDcgKzIwMTIsNyBAQCBzdGF0aWMgdm9pZCBjb21wbGV0ZV9jcnRjX3NpZ25hbGluZyhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAogCWlmIChpbnN0YWxsX2ZkcykgewogCQlmb3IgKGkgPSAwOyBpIDwg bnVtX2ZlbmNlczsgaSsrKQogCQkJZmRfaW5zdGFsbChmZW5jZV9zdGF0ZVtpXS5mZCwKLQkJCQkg ICBmZW5jZV9zdGF0ZVtpXS5zeW5jX2ZpbGUtPmZpbGUpOworCQkJCSAgIGZlbmNlX3N0YXRlW2ld LnN5bmNfZmlsZS0+YmFzZS5maWxlKTsKIAogCQlrZnJlZShmZW5jZV9zdGF0ZSk7CiAJCXJldHVy bjsKQEAgLTIwMzYsNyArMjAzNiw3IEBAIHN0YXRpYyB2b2lkIGNvbXBsZXRlX2NydGNfc2lnbmFs aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZlbmNl czsgaSsrKSB7CiAJCWlmIChmZW5jZV9zdGF0ZVtpXS5zeW5jX2ZpbGUpCi0JCQlmcHV0KGZlbmNl X3N0YXRlW2ldLnN5bmNfZmlsZS0+ZmlsZSk7CisJCQlmcHV0KGZlbmNlX3N0YXRlW2ldLnN5bmNf ZmlsZS0+YmFzZS5maWxlKTsKIAkJaWYgKGZlbmNlX3N0YXRlW2ldLmZkID49IDApCiAJCQlwdXRf dW51c2VkX2ZkKGZlbmNlX3N0YXRlW2ldLmZkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51 eC9zeW5jX2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvc3luY19maWxlLmgKaW5kZXggYWRiYzBiOS4u YjBhZTFjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeW5jX2ZpbGUuaAorKysgYi9pbmNs dWRlL2xpbnV4L3N5bmNfZmlsZS5oCkBAIC0yMSwyNCArMjEsMzEgQEAKICNpbmNsdWRlIDxsaW51 eC9kbWEtZmVuY2UtYXJyYXkuaD4KIAogLyoqCi0gKiBzdHJ1Y3Qgc3luY19maWxlIC0gc3luYyBm aWxlIHRvIGV4cG9ydCB0byB0aGUgdXNlcnNwYWNlCisgKiBzdHJ1Y3QgZmVuY2VfZmlsZSAtIGJh c2ljIGZpbGUgdG8gZmVuY2UgbWFwcGluZwogICogQGZpbGU6CQlmaWxlIHJlcHJlc2VudGluZyB0 aGlzIGZlbmNlCisgKiBAZmVuY2U6CQlmZW5jZSB3aXRoIHRoZSBmZW5jZXMgaW4gdGhlIGZlbmNl X2ZpbGUKKyAqLworc3RydWN0IGZlbmNlX2ZpbGUgeworCXN0cnVjdCBmaWxlCQkqZmlsZTsKKwlz dHJ1Y3QgZG1hX2ZlbmNlCV9fcmN1ICpmZW5jZTsKK307CisKKy8qKgorICogc3RydWN0IHN5bmNf ZmlsZSAtIHN5bmMgZmlsZSB0byBleHBvcnQgdG8gdGhlIHVzZXJzcGFjZQorICogQGJhc2U6ICAg ICAgICAgICAgICAgYmFzZSBmZW5jZSBmaWxlCiAgKiBAbmFtZToJCW5hbWUgb2Ygc3luY19maWxl LiAgVXNlZnVsIGZvciBkZWJ1Z2dpbmcKICAqIEBzeW5jX2ZpbGVfbGlzdDoJbWVtYmVyc2hpcCBp biBnbG9iYWwgZmlsZSBsaXN0CiAgKiBAd3E6CQkJd2FpdCBxdWV1ZSBmb3IgZmVuY2Ugc2lnbmFs aW5nCi0gKiBAZmVuY2U6CQlmZW5jZSB3aXRoIHRoZSBmZW5jZXMgaW4gdGhlIHN5bmNfZmlsZQog ICogQGNiOgkJCWZlbmNlIGNhbGxiYWNrIGluZm9ybWF0aW9uCiAgKi8KIHN0cnVjdCBzeW5jX2Zp bGUgewotCXN0cnVjdCBmaWxlCQkqZmlsZTsKKwlzdHJ1Y3QgZmVuY2VfZmlsZSAgICAgICBiYXNl OwogCWNoYXIJCQluYW1lWzMyXTsKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIAlzdHJ1Y3QgbGlz dF9oZWFkCXN5bmNfZmlsZV9saXN0OwogI2VuZGlmCiAKIAl3YWl0X3F1ZXVlX2hlYWRfdAl3cTsK LQotCXN0cnVjdCBkbWFfZmVuY2UJX19yY3UgKmZlbmNlOwogCXN0cnVjdCBkbWFfZmVuY2VfY2Ig Y2I7CiB9OwogCi0tIAoyLjkuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQt Z2Z4Cg==