From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Siqueira Subject: [PATCH V4 1/4] drm/vkms: Add dumb operations Date: Thu, 12 Jul 2018 10:40:41 -0300 Message-ID: <7dcd504d629c554596514e5277ed24f6e0b7b810.1531402095.git.rodrigosiqueiramelo@gmail.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qk0-x242.google.com (mail-qk0-x242.google.com [IPv6:2607:f8b0:400d:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 741806E21D for ; Thu, 12 Jul 2018 13:40:45 +0000 (UTC) Received: by mail-qk0-x242.google.com with SMTP id 27-v6so2399464qkv.0 for ; Thu, 12 Jul 2018 06:40:45 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , Gustavo Padovan , Sean Paul , Haneen Mohammed Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VktNUyBjdXJyZW50bHkgZG9lcyBub3QgaGFuZGxlIGR1bWIgZGF0YSwgYW5kIGFzIGEgY29uc2Vx dWVuY2UsIGl0IGRvZXMKbm90IHByb3ZpZGUgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgZ2VtLiBU aGlzIGNvbW1pdCBhZGRzIHRoZSBuZWNlc3NhcnkKc3VwcG9ydCBmb3IgZ2VtIG9iamVjdC9oYW5k bGVyIGFuZCB0aGUgZHVtYiBmdW5jdGlvbnMuCgpDaGFuZ2VzIHNpbmNlIFYxOgogRGFuaWVsIFZl dHRlcjoKIC0gQWRkIGR1bWIgYnVmZmVyIHN1cHBvcnQgdG8gdGhlIHNhbWUgcGF0Y2hzZXQKQ2hh bmdlcyBzaW5jZSBWMjoKIEhhbmVlbjoKIC0gQWRkIG1pc3NpbmcgZ2VtX2ZyZWVfb2JqZWN0X3Vu bG9ja2VkIGNhbGxiYWNrIHRvIGZpeCB0aGUgd2FybmluZwogICAiTWVtb3J5IG1hbmFnZXIgbm90 IGNsZWFuIGR1cmluZyB0YWtlZG93biIKQ2hhbmdlcyBzaW5jZSBWMzoKIC0gTm9uZQoKU2lnbmVk LW9mZi1ieTogUm9kcmlnbyBTaXF1ZWlyYSA8cm9kcmlnb3NpcXVlaXJhbWVsb0BnbWFpbC5jb20+ Ci0tLQogZHJpdmVycy9ncHUvZHJtL3ZrbXMvTWFrZWZpbGUgICB8ICAgMiArLQogZHJpdmVycy9n cHUvZHJtL3ZrbXMvdmttc19kcnYuYyB8ICAxMCArKwogZHJpdmVycy9ncHUvZHJtL3ZrbXMvdmtt c19kcnYuaCB8ICAyMyArKysrCiBkcml2ZXJzL2dwdS9kcm0vdmttcy92a21zX2dlbS5jIHwgMTc5 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDIxMyBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3ZrbXMvdmttc19nZW0uYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92a21z L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3ZrbXMvTWFrZWZpbGUKaW5kZXggM2Y3NzRhNmE5 YzU4Li45ODYyOTdkYTUxYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92a21zL01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92a21zL01ha2VmaWxlCkBAIC0xLDMgKzEsMyBAQAot dmttcy15IDo9IHZrbXNfZHJ2Lm8gdmttc19wbGFuZS5vIHZrbXNfb3V0cHV0Lm8gdmttc19jcnRj Lm8KK3ZrbXMteSA6PSB2a21zX2Rydi5vIHZrbXNfcGxhbmUubyB2a21zX291dHB1dC5vIHZrbXNf Y3J0Yy5vIHZrbXNfZ2VtLm8KIAogb2JqLSQoQ09ORklHX0RSTV9WS01TKSArPSB2a21zLm8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92a21zL3ZrbXNfZHJ2LmMgYi9kcml2ZXJzL2dwdS9k cm0vdmttcy92a21zX2Rydi5jCmluZGV4IDc0MGE0Y2JmZWQ5MS4uNmVhMmZkOTdiZWY5IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmttcy92a21zX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS92a21zL3ZrbXNfZHJ2LmMKQEAgLTM3LDYgKzM3LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZmlsZV9vcGVyYXRpb25zIHZrbXNfZHJpdmVyX2ZvcHMgPSB7CiAJLnJlbGVhc2UJPSBkcm1f cmVsZWFzZSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qg dmttc19nZW1fdm1fb3BzID0geworCS5mYXVsdCA9IHZrbXNfZ2VtX2ZhdWx0LAorCS5vcGVuID0g ZHJtX2dlbV92bV9vcGVuLAorCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCit9OworCiBzdGF0 aWMgdm9pZCB2a21zX3JlbGVhc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qg dmttc19kZXZpY2UgKnZrbXMgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgdmttc19kZXZpY2Us IGRybSk7CkBAIC01MCw2ICs1NiwxMCBAQCBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgdmttc19k cml2ZXIgPSB7CiAJLmRyaXZlcl9mZWF0dXJlcwk9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0FU T01JQyB8IERSSVZFUl9HRU0sCiAJLnJlbGVhc2UJCT0gdmttc19yZWxlYXNlLAogCS5mb3BzCQkJ PSAmdmttc19kcml2ZXJfZm9wcywKKwkuZHVtYl9jcmVhdGUJCT0gdmttc19kdW1iX2NyZWF0ZSwK KwkuZHVtYl9tYXBfb2Zmc2V0CT0gdmttc19kdW1iX21hcCwKKwkuZ2VtX3ZtX29wcwkJPSAmdmtt c19nZW1fdm1fb3BzLAorCS5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQgPSB2a21zX2dlbV9mcmVl X29iamVjdCwKIAogCS5uYW1lCQkJPSBEUklWRVJfTkFNRSwKIAkuZGVzYwkJCT0gRFJJVkVSX0RF U0MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmttcy92a21zX2Rydi5oIGIvZHJpdmVy cy9ncHUvZHJtL3ZrbXMvdmttc19kcnYuaAppbmRleCBiMGY5ZDJlNjFhNDIuLmNjZTQ2OTRjYWZi OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZrbXMvdmttc19kcnYuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vdmttcy92a21zX2Rydi5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSA8 ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vZHJtLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW0u aD4KICNpbmNsdWRlIDxkcm0vZHJtX2VuY29kZXIuaD4KIAogc3RhdGljIGNvbnN0IHUzMiB2a21z X2Zvcm1hdHNbXSA9IHsKQEAgLTIxLDYgKzIyLDEyIEBAIHN0cnVjdCB2a21zX2RldmljZSB7CiAJ c3RydWN0IHZrbXNfb3V0cHV0IG91dHB1dDsKIH07CiAKK3N0cnVjdCB2a21zX2dlbV9vYmplY3Qg eworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCBnZW07CisJc3RydWN0IG11dGV4IHBhZ2VzX2xvY2s7 IC8qIFBhZ2UgbG9jayB1c2VkIGluIHBhZ2UgZmF1bHQgaGFuZGxlciAqLworCXN0cnVjdCBwYWdl ICoqcGFnZXM7Cit9OworCiBpbnQgdmttc19jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkgICBzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5 LCBzdHJ1Y3QgZHJtX3BsYW5lICpjdXJzb3IpOwogCkBAIC0yOCw0ICszNSwyMCBAQCBpbnQgdmtt c19vdXRwdXRfaW5pdChzdHJ1Y3Qgdmttc19kZXZpY2UgKnZrbXNkZXYpOwogCiBzdHJ1Y3QgZHJt X3BsYW5lICp2a21zX3BsYW5lX2luaXQoc3RydWN0IHZrbXNfZGV2aWNlICp2a21zZGV2KTsKIAor LyogR2VtIHN0dWZmICovCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnZrbXNfZ2VtX2NyZWF0ZShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUs CisJCQkJICAgICAgIHUzMiAqaGFuZGxlLAorCQkJCSAgICAgICB1NjQgc2l6ZSk7CisKK2ludCB2 a21zX2dlbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7CisKK2ludCB2a21zX2R1bWJfY3Jl YXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAg ICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOworCitpbnQgdmttc19kdW1iX21h cChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgdTMy IGhhbmRsZSwgdTY0ICpvZmZzZXQpOworCit2b2lkIHZrbXNfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKwogI2VuZGlmIC8qIF9WS01TX0RSVl9IXyAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZrbXMvdmttc19nZW0uYyBiL2RyaXZlcnMvZ3B1L2Ry bS92a21zL3ZrbXNfZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li5jN2UzODM2ODYwMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmttcy92 a21zX2dlbS5jCkBAIC0wLDAgKzEsMTc5IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK KyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUg PGxpbnV4L3NobWVtX2ZzLmg+CisKKyNpbmNsdWRlICJ2a21zX2Rydi5oIgorCitzdGF0aWMgc3Ry dWN0IHZrbXNfZ2VtX29iamVjdCAqX192a21zX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKKwkJCQkJCSB1NjQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgdmttc19nZW1fb2JqZWN0ICpvYmo7 CisJaW50IHJldDsKKworCW9iaiA9IGt6YWxsb2Moc2l6ZW9mKCpvYmopLCBHRlBfS0VSTkVMKTsK KwlpZiAoIW9iaikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzaXplID0gcm91bmR1 cChzaXplLCBQQUdFX1NJWkUpOworCXJldCA9IGRybV9nZW1fb2JqZWN0X2luaXQoZGV2LCAmb2Jq LT5nZW0sIHNpemUpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUob2JqKTsKKwkJcmV0dXJuIEVSUl9Q VFIocmV0KTsKKwl9CisKKwltdXRleF9pbml0KCZvYmotPnBhZ2VzX2xvY2spOworCisJcmV0dXJu IG9iajsKK30KKwordm9pZCB2a21zX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKK3sKKwlzdHJ1Y3Qgdmttc19nZW1fb2JqZWN0ICpnZW0gPSBjb250YWluZXJfb2Yo b2JqLCBzdHJ1Y3Qgdmttc19nZW1fb2JqZWN0LAorCQkJCQkJICAgZ2VtKTsKKworCWt2ZnJlZShn ZW0tPnBhZ2VzKTsKKwltdXRleF9kZXN0cm95KCZnZW0tPnBhZ2VzX2xvY2spOworCWRybV9nZW1f b2JqZWN0X3JlbGVhc2Uob2JqKTsKKwlrZnJlZShnZW0pOworfQorCitpbnQgdmttc19nZW1fZmF1 bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEg PSB2bWYtPnZtYTsKKwlzdHJ1Y3Qgdmttc19nZW1fb2JqZWN0ICpvYmogPSB2bWEtPnZtX3ByaXZh dGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhZGRyID0gdm1mLT5hZGRyZXNzOworCXBnb2ZmX3Qg cGFnZV9vZmZzZXQ7CisJbG9mZl90IG51bV9wYWdlczsKKwlpbnQgcmV0OworCisJcGFnZV9vZmZz ZXQgPSAodmFkZHIgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCW51bV9wYWdlcyA9 IERJVl9ST1VORF9VUChvYmotPmdlbS5zaXplLCBQQUdFX1NJWkUpOworCisJaWYgKHBhZ2Vfb2Zm c2V0ID4gbnVtX3BhZ2VzKQorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCisJcmV0ID0gLUVO T0VOVDsKKwltdXRleF9sb2NrKCZvYmotPnBhZ2VzX2xvY2spOworCWlmIChvYmotPnBhZ2VzKSB7 CisJCWdldF9wYWdlKG9iai0+cGFnZXNbcGFnZV9vZmZzZXRdKTsKKwkJdm1mLT5wYWdlID0gb2Jq LT5wYWdlc1twYWdlX29mZnNldF07CisJCXJldCA9IDA7CisJfQorCW11dGV4X3VubG9jaygmb2Jq LT5wYWdlc19sb2NrKTsKKwlpZiAocmV0KSB7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCQlzdHJ1 Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKworCQltYXBwaW5nID0gZmlsZV9pbm9kZShvYmot PmdlbS5maWxwKS0+aV9tYXBwaW5nOworCQlwYWdlID0gc2htZW1fcmVhZF9tYXBwaW5nX3BhZ2Uo bWFwcGluZywgcGFnZV9vZmZzZXQpOworCisJCWlmICghSVNfRVJSKHBhZ2UpKSB7CisJCQl2bWYt PnBhZ2UgPSBwYWdlOworCQkJcmV0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoUFRSX0VS UihwYWdlKSkgeworCQkJY2FzZSAtRU5PU1BDOgorCQkJY2FzZSAtRU5PTUVNOgorCQkJCXJldCA9 IFZNX0ZBVUxUX09PTTsKKwkJCQlicmVhazsKKwkJCWNhc2UgLUVCVVNZOgorCQkJCXJldCA9IFZN X0ZBVUxUX1JFVFJZOworCQkJCWJyZWFrOworCQkJY2FzZSAtRUZBVUxUOgorCQkJY2FzZSAtRUlO VkFMOgorCQkJCXJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6 CisJCQkJV0FSTl9PTihQVFJfRVJSKHBhZ2UpKTsKKwkJCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7 CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGRy bV9nZW1fb2JqZWN0ICp2a21zX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAorCQkJCSAgICAgICB1MzIgKmhhbmRsZSwK KwkJCQkgICAgICAgdTY0IHNpemUpCit7CisJc3RydWN0IHZrbXNfZ2VtX29iamVjdCAqb2JqOwor CWludCByZXQ7CisKKwlpZiAoIWZpbGUgfHwgIWRldiB8fCAhaGFuZGxlKQorCQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKKworCW9iaiA9IF9fdmttc19nZW1fY3JlYXRlKGRldiwgc2l6ZSk7CisJ aWYgKElTX0VSUihvYmopKQorCQlyZXR1cm4gRVJSX0NBU1Qob2JqKTsKKworCXJldCA9IGRybV9n ZW1faGFuZGxlX2NyZWF0ZShmaWxlLCAmb2JqLT5nZW0sIGhhbmRsZSk7CisJZHJtX2dlbV9vYmpl Y3RfcHV0X3VubG9ja2VkKCZvYmotPmdlbSk7CisJaWYgKHJldCkgeworCQlkcm1fZ2VtX29iamVj dF9yZWxlYXNlKCZvYmotPmdlbSk7CisJCWtmcmVlKG9iaik7CisJCXJldHVybiBFUlJfUFRSKHJl dCk7CisJfQorCisJcmV0dXJuICZvYmotPmdlbTsKK30KKworaW50IHZrbXNfZHVtYl9jcmVhdGUo c3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICAgIHN0 cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKmdlbV9vYmo7CisJdTY0IHBpdGNoLCBzaXplOworCisJaWYgKCFhcmdzIHx8ICFkZXYgfHwg IWZpbGUpCisJCXJldHVybiAtRUlOVkFMOworCisJcGl0Y2ggPSBhcmdzLT53aWR0aCAqIERJVl9S T1VORF9VUChhcmdzLT5icHAsIDgpOworCXNpemUgPSBwaXRjaCAqIGFyZ3MtPmhlaWdodDsKKwor CWlmICghc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlnZW1fb2JqID0gdmttc19nZW1fY3Jl YXRlKGRldiwgZmlsZSwgJmFyZ3MtPmhhbmRsZSwgc2l6ZSk7CisJaWYgKElTX0VSUihnZW1fb2Jq KSkKKwkJcmV0dXJuIFBUUl9FUlIoZ2VtX29iaik7CisKKwlhcmdzLT5zaXplID0gZ2VtX29iai0+ c2l6ZTsKKwlhcmdzLT5waXRjaCA9IHBpdGNoOworCisJRFJNX0RFQlVHX0RSSVZFUigiQ3JlYXRl ZCBvYmplY3Qgb2Ygc2l6ZSAlbGxkXG4iLCBzaXplKTsKKworCXJldHVybiAwOworfQorCitpbnQg dmttc19kdW1iX21hcChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCisJCSAgdTMyIGhhbmRsZSwgdTY0ICpvZmZzZXQpCit7CisJc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmo7CisJaW50IHJldDsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxl LCBoYW5kbGUpOworCWlmICghb2JqKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWlmICghb2JqLT5m aWxwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWY7CisJfQorCisJcmV0ID0gZHJt X2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIHVucmVmOwor CisJKm9mZnNldCA9IGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigmb2JqLT52bWFfbm9kZSk7Cit1 bnJlZjoKKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQob2JqKTsKKworCXJldHVybiByZXQ7 Cit9Ci0tIAoyLjE4LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=