From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH 2/2] drm/vc4: Switch to using the panel-bridge layer, and support bridges. Date: Thu, 27 Apr 2017 09:36:01 -0700 Message-ID: <20170427163601.7313-2-eric@anholt.net> References: <20170427163601.7313-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from anholt.net (anholt.net [50.246.234.109]) by gabe.freedesktop.org (Postfix) with ESMTP id 356866E69E for ; Thu, 27 Apr 2017 16:36:06 +0000 (UTC) In-Reply-To: <20170427163601.7313-1-eric@anholt.net> 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: Yannick Fertre , linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org VGhlIG5ld2VyIHZlcnNpb24gb2YgdGhlIFJQaSBwYW5lbCBkcml2ZXIgaXMgZ29pbmcgdG8gYmUg YSBjb21iaW5hdGlvbgpvZiBhIGJyaWRnZSBhbmQgYSBwYW5lbCwgYnV0IHdlIHNob3VsZCBhbHNv IHN1cHBvcnQgcGFuZWxzIHdpdGhvdXQgYQpicmlkZ2UsIHNvIHRoZSBwYW5lbC1icmlkZ2UgbGF5 ZXIgbGV0cyB1cyBkbyB0aGF0IGNsZWFubHkuCgpTaWduZWQtb2ZmLWJ5OiBFcmljIEFuaG9sdCA8 ZXJpY0BhbmhvbHQubmV0PgotLS0KIGRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyAgIHwgICAy ICstCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kc2kuYyB8IDE1OCArKysrKysrLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9u cygrKSwgMTM0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQv S2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZwppbmRleCA5NzNiNDIwM2MwYjIu LjExOGRlZjY3YzlhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnCisr KyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZwpAQCAtNyw3ICs3LDcgQEAgY29uZmlnIERS TV9WQzQKIAlzZWxlY3QgRFJNX0tNU19IRUxQRVIKIAlzZWxlY3QgRFJNX0tNU19DTUFfSEVMUEVS CiAJc2VsZWN0IERSTV9HRU1fQ01BX0hFTFBFUgotCXNlbGVjdCBEUk1fUEFORUwKKwlzZWxlY3Qg RFJNX1BBTkVMX0JSSURHRQogCXNlbGVjdCBTTkRfUENNCiAJc2VsZWN0IFNORF9QQ01fRUxECiAJ c2VsZWN0IFNORF9TT0NfR0VORVJJQ19ETUFFTkdJTkVfUENNCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF9kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RzaS5jCmlu ZGV4IGRlYmE2MjAwOGZkMC4uYTI3OTE4OGUzMTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9kc2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kc2kuYwpAQCAt NTAzLDggKzUwMyw4IEBAIHN0cnVjdCB2YzRfZHNpIHsKIAogCXN0cnVjdCBtaXBpX2RzaV9ob3N0 IGRzaV9ob3N0OwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yOwotCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2U7CisJYm9vbCBpc19wYW5lbF9icmlkZ2U7CiAKIAl2b2lkIF9faW9t ZW0gKnJlZ3M7CiAKQEAgLTYwNCwxOCArNjA0LDYgQEAgdG9fdmM0X2RzaV9lbmNvZGVyKHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIAlyZXR1cm4gY29udGFpbmVyX29mKGVuY29kZXIsIHN0 cnVjdCB2YzRfZHNpX2VuY29kZXIsIGJhc2UuYmFzZSk7CiB9CiAKLS8qIFZDNCBEU0kgY29ubmVj dG9yIEtNUyBzdHJ1Y3QgKi8KLXN0cnVjdCB2YzRfZHNpX2Nvbm5lY3RvciB7Ci0Jc3RydWN0IGRy bV9jb25uZWN0b3IgYmFzZTsKLQlzdHJ1Y3QgdmM0X2RzaSAqZHNpOwotfTsKLQotc3RhdGljIGlu bGluZSBzdHJ1Y3QgdmM0X2RzaV9jb25uZWN0b3IgKgotdG9fdmM0X2RzaV9jb25uZWN0b3Ioc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGNv bm5lY3Rvciwgc3RydWN0IHZjNF9kc2lfY29ubmVjdG9yLCBiYXNlKTsKLX0KLQogI2RlZmluZSBE U0lfUkVHKHJlZykgeyByZWcsICNyZWcgfQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJdTMyIHJl ZzsKQEAgLTcyMyw3OSArNzExLDYgQEAgaW50IHZjNF9kc2lfZGVidWdmc19yZWdzKHN0cnVjdCBz ZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogfQogI2VuZGlmCiAKLXN0YXRpYyBlbnVtIGRybV9j b25uZWN0b3Jfc3RhdHVzCi12YzRfZHNpX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKLXsKLQlzdHJ1Y3QgdmM0X2RzaV9jb25uZWN0 b3IgKnZjNF9jb25uZWN0b3IgPQotCQl0b192YzRfZHNpX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwot CXN0cnVjdCB2YzRfZHNpICpkc2kgPSB2YzRfY29ubmVjdG9yLT5kc2k7Ci0KLQlpZiAoZHNpLT5w YW5lbCkKLQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwotCWVsc2UKLQkJcmV0 dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwotfQotCi1zdGF0aWMgdm9pZCB2YzRf ZHNpX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17 Ci0JZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7Ci0JZHJtX2Nvbm5lY3Rvcl9j bGVhbnVwKGNvbm5lY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbnQgdmM0X2RzaV9jb25uZWN0b3JfZ2V0 X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IHZjNF9k c2lfY29ubmVjdG9yICp2YzRfY29ubmVjdG9yID0KLQkJdG9fdmM0X2RzaV9jb25uZWN0b3IoY29u bmVjdG9yKTsKLQlzdHJ1Y3QgdmM0X2RzaSAqZHNpID0gdmM0X2Nvbm5lY3Rvci0+ZHNpOwotCi0J aWYgKGRzaS0+cGFuZWwpCi0JCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRzaS0+cGFuZWwp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9m dW5jcyB2YzRfZHNpX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKLQkuZHBtcyA9IGRybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9kcG1zLAotCS5kZXRlY3QgPSB2YzRfZHNpX2Nvbm5lY3Rvcl9kZXRlY3Qs Ci0JLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMs Ci0JLmRlc3Ryb3kgPSB2YzRfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95LAotCS5yZXNldCA9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9 IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCi0JLmF0b21pY19k ZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUs Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHZj NF9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKLQkuZ2V0X21vZGVzID0gdmM0X2RzaV9j b25uZWN0b3JfZ2V0X21vZGVzLAotfTsKLQotc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yICp2 YzRfZHNpX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJCQkgICAg c3RydWN0IHZjNF9kc2kgKmRzaSkKLXsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y OwotCXN0cnVjdCB2YzRfZHNpX2Nvbm5lY3RvciAqZHNpX2Nvbm5lY3RvcjsKLQotCWRzaV9jb25u ZWN0b3IgPSBkZXZtX2t6YWxsb2MoZGV2LT5kZXYsIHNpemVvZigqZHNpX2Nvbm5lY3RvciksCi0J CQkJICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWRzaV9jb25uZWN0b3IpCi0JCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOwotCi0JY29ubmVjdG9yID0gJmRzaV9jb25uZWN0b3ItPmJhc2U7Ci0KLQlk c2lfY29ubmVjdG9yLT5kc2kgPSBkc2k7Ci0KLQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25u ZWN0b3IsICZ2YzRfZHNpX2Nvbm5lY3Rvcl9mdW5jcywKLQkJCSAgIERSTV9NT0RFX0NPTk5FQ1RP Ul9EU0kpOwotCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZ2YzRfZHNpX2Nv bm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwotCi0JY29ubmVjdG9yLT5wb2xsZWQgPSAwOwotCWNvbm5l Y3Rvci0+aW50ZXJsYWNlX2FsbG93ZWQgPSAwOwotCWNvbm5lY3Rvci0+ZG91Ymxlc2Nhbl9hbGxv d2VkID0gMDsKLQotCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3Is IGRzaS0+ZW5jb2Rlcik7Ci0KLQlyZXR1cm4gY29ubmVjdG9yOwotfQotCiBzdGF0aWMgdm9pZCB2 YzRfZHNpX2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiB7CiAJ ZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKQEAgLTg5MywxMiArODA4LDggQEAgc3RhdGlj IHZvaWQgdmM0X2RzaV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy KQogCXN0cnVjdCB2YzRfZHNpICpkc2kgPSB2YzRfZW5jb2Rlci0+ZHNpOwogCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZkc2ktPnBkZXYtPmRldjsKIAotCWRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFu ZWwpOwotCiAJdmM0X2RzaV91bHBzKGRzaSwgdHJ1ZSk7CiAKLQlkcm1fcGFuZWxfdW5wcmVwYXJl KGRzaS0+cGFuZWwpOwotCiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGxsX3BoeV9jbG9j ayk7CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZXNjYXBlX2Nsb2NrKTsKIAljbGtfZGlz YWJsZV91bnByZXBhcmUoZHNpLT5waXhlbF9jbG9jayk7CkBAIC05MjksMTIgKzg0MCw2IEBAIHN0 YXRpYyB2b2lkIHZjNF9kc2lfZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQogCQlyZXR1cm47CiAJfQogCi0JcmV0ID0gZHJtX3BhbmVsX3ByZXBhcmUoZHNpLT5wYW5l bCk7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoIlBhbmVsIGZhaWxlZCB0byBwcmVwYXJlXG4i KTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChkZWJ1Z19kdW1wX3JlZ3MpIHsKIAkJRFJNX0lORk8o IkRTSSByZWdzIGJlZm9yZTpcbiIpOwogCQl2YzRfZHNpX2R1bXBfcmVncyhkc2kpOwpAQCAtMTE4 NCwxMyArMTA4OSw2IEBAIHN0YXRpYyB2b2lkIHZjNF9kc2lfZW5jb2Rlcl9lbmFibGUoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyKQogCQlEUk1fSU5GTygiRFNJIHJlZ3MgYWZ0ZXI6XG4iKTsK IAkJdmM0X2RzaV9kdW1wX3JlZ3MoZHNpKTsKIAl9Ci0KLQlyZXQgPSBkcm1fcGFuZWxfZW5hYmxl KGRzaS0+cGFuZWwpOwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9SKCJQYW5lbCBmYWlsZWQgdG8g ZW5hYmxlXG4iKTsKLQkJZHJtX3BhbmVsX3VucHJlcGFyZShkc2ktPnBhbmVsKTsKLQkJcmV0dXJu OwotCX0KIH0KIAogc3RhdGljIHNzaXplX3QgdmM0X2RzaV9ob3N0X3RyYW5zZmVyKHN0cnVjdCBt aXBpX2RzaV9ob3N0ICpob3N0LApAQCAtMTM2NiwxNSArMTI2NCwyOCBAQCBzdGF0aWMgaW50IHZj NF9kc2lfaG9zdF9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCiAJCXJldHVybiAw OwogCX0KIAotCWRzaS0+cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChkZXZpY2UtPmRldi5vZl9u b2RlKTsKLQlpZiAoIWRzaS0+cGFuZWwpCi0JCXJldHVybiAwOworCWRzaS0+YnJpZGdlID0gb2Zf ZHJtX2ZpbmRfYnJpZGdlKGRldmljZS0+ZGV2Lm9mX25vZGUpOworCWlmICghZHNpLT5icmlkZ2Up IHsKKwkJc3RydWN0IGRybV9wYW5lbCAqcGFuZWwgPQorCQkJb2ZfZHJtX2ZpbmRfcGFuZWwoZGV2 aWNlLT5kZXYub2Zfbm9kZSk7CisKKwkJZHNpLT5icmlkZ2UgPSBkcm1fcGFuZWxfYnJpZGdlX2Fk ZCgmZGV2aWNlLT5kZXYsCisJCQkJCQkgICBwYW5lbCwKKwkJCQkJCSAgIERSTV9NT0RFX0NPTk5F Q1RPUl9EU0kpOworCQlpZiAoSVNfRVJSKGRzaS0+YnJpZGdlKSkgeworCQkJcmV0ID0gUFRSX0VS Uihkc2ktPmJyaWRnZSk7CisJCQlkc2ktPmJyaWRnZSA9IE5VTEw7CisJCQlyZXR1cm4gcmV0Owor CQl9CisJCWRzaS0+aXNfcGFuZWxfYnJpZGdlID0gdHJ1ZTsKKwl9CiAKLQlyZXQgPSBkcm1fcGFu ZWxfYXR0YWNoKGRzaS0+cGFuZWwsIGRzaS0+Y29ubmVjdG9yKTsKLQlpZiAocmV0ICE9IDApCisJ cmV0ID0gZHJtX2JyaWRnZV9hdHRhY2goZHNpLT5lbmNvZGVyLCBkc2ktPmJyaWRnZSwgTlVMTCk7 CisJaWYgKHJldCkgeworCQlpZiAoZHNpLT5pc19wYW5lbF9icmlkZ2UpCisJCQlkcm1fcGFuZWxf YnJpZGdlX3JlbW92ZSgmZGV2aWNlLT5kZXYsIGRzaS0+YnJpZGdlKTsKIAkJcmV0dXJuIHJldDsK LQotCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChkc2ktPmNvbm5lY3Rvci0+ZGV2KTsKKwl9CiAK IAlyZXR1cm4gMDsKIH0KQEAgLTEzODQsMTYgKzEyOTUsOCBAQCBzdGF0aWMgaW50IHZjNF9kc2lf aG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCiB7CiAJc3RydWN0IHZjNF9k c2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOwogCi0JaWYgKGRzaS0+cGFuZWwpIHsKLQkJaW50 IHJldCA9IGRybV9wYW5lbF9kZXRhY2goZHNpLT5wYW5lbCk7Ci0KLQkJaWYgKHJldCkKLQkJCXJl dHVybiByZXQ7Ci0KLQkJZHNpLT5wYW5lbCA9IE5VTEw7Ci0KLQkJZHJtX2hlbHBlcl9ocGRfaXJx X2V2ZW50KGRzaS0+Y29ubmVjdG9yLT5kZXYpOwotCX0KKwlpZiAoZHNpLT5pc19wYW5lbF9icmlk Z2UpCisJCWRybV9wYW5lbF9icmlkZ2VfcmVtb3ZlKCZkZXZpY2UtPmRldiwgZHNpLT5icmlkZ2Up OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjU4LDEyICsxNTYxLDYgQEAgc3RhdGljIGludCB2YzRf ZHNpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQg KmRhdGEpCiAJCQkgRFJNX01PREVfRU5DT0RFUl9EU0ksIE5VTEwpOwogCWRybV9lbmNvZGVyX2hl bHBlcl9hZGQoZHNpLT5lbmNvZGVyLCAmdmM0X2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CiAK LQlkc2ktPmNvbm5lY3RvciA9IHZjNF9kc2lfY29ubmVjdG9yX2luaXQoZHJtLCBkc2kpOwotCWlm IChJU19FUlIoZHNpLT5jb25uZWN0b3IpKSB7Ci0JCXJldCA9IFBUUl9FUlIoZHNpLT5jb25uZWN0 b3IpOwotCQlnb3RvIGVycl9kZXN0cm95X2VuY29kZXI7Ci0JfQotCiAJZHNpLT5kc2lfaG9zdC5v cHMgPSAmdmM0X2RzaV9ob3N0X29wczsKIAlkc2ktPmRzaV9ob3N0LmRldiA9IGRldjsKIApAQCAt MTY3NCwxMSArMTU3MSw2IEBAIHN0YXRpYyBpbnQgdmM0X2RzaV9iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQogCXBtX3J1bnRpbWVfZW5h YmxlKGRldik7CiAKIAlyZXR1cm4gMDsKLQotZXJyX2Rlc3Ryb3lfZW5jb2RlcjoKLQl2YzRfZHNp X2VuY29kZXJfZGVzdHJveShkc2ktPmVuY29kZXIpOwotCi0JcmV0dXJuIHJldDsKIH0KIAogc3Rh dGljIHZvaWQgdmM0X2RzaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNl ICptYXN0ZXIsCkBAIC0xNjkwLDcgKzE1ODIsNyBAQCBzdGF0aWMgdm9pZCB2YzRfZHNpX3VuYmlu ZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKIAogCXBtX3J1bnRp bWVfZGlzYWJsZShkZXYpOwogCi0JdmM0X2RzaV9jb25uZWN0b3JfZGVzdHJveShkc2ktPmNvbm5l Y3Rvcik7CisJZHJtX2JyaWRnZV9yZW1vdmUoZHNpLT5icmlkZ2UpOwogCXZjNF9kc2lfZW5jb2Rl cl9kZXN0cm95KGRzaS0+ZW5jb2Rlcik7CiAKIAltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRz aS0+ZHNpX2hvc3QpOwotLSAKMi4xMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK