From mboxrd@z Thu Jan 1 00:00:00 1970 From: Haozhong Zhang Subject: [RFC XEN PATCH v4 14/41] x86_64/mm: allow customized location of extended frametable and M2P table Date: Thu, 7 Dec 2017 18:10:03 +0800 Message-ID: <20171207101030.22364-15-haozhong.zhang@intel.com> References: <20171207101030.22364-1-haozhong.zhang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171207101030.22364-1-haozhong.zhang@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Haozhong Zhang , Andrew Cooper , Jan Beulich , Chao Peng , Dan Williams List-Id: xen-devel@lists.xenproject.org QXMgdGhlIGV4aXN0aW5nIGRhdGEgaW4gUE1FTSByZWdpb24gaXMgcGVyc2lzdGVudCwgWGVuIGh5 cGVydmlzb3IgaGFzCm5vIGtub3dsZWRnZSBvZiB3aGljaCBwYXJ0IGlzIGZyZWUgdG8gYmUgdXNl ZCBmb3IgdGhlIGZyYW1lIHRhYmxlIGFuZApNMlAgdGFibGUgb2YgdGhhdCBQTUVNIHJlZ2lvbi4g SW5zdGVhZCwgd2Ugd2lsbCBhbGxvdyB1c2VycyBvciBzeXN0ZW0KYWRtaW5zIHRvIHNwZWNpZnkg dGhlIGxvY2F0aW9uIG9mIHRob3NlIGZyYW1lIHRhYmxlIGFuZCBNMlAgdGFibGUuClRoZSBsb2Nh dGlvbiBpcyBub3QgbmVjZXNzYXJpbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgUE1FTSByZWdp b24sCndoaWNoIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjYXNlIG9mIGhvdHBsdWdnZWQgUkFNLgoK VGhpcyBjb21taXQgYWRkcyB0aGUgc3VwcG9ydCBmb3IgYSBjdXN0b21pemVkIHBhZ2UgYWxsb2Nh dGlvbgpmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZCB0byBhbGxvY2F0ZSB0aGUgbWVtb3J5IGZvciB0 aGUgZnJhbWUgdGFibGUgYW5kCk0yUCB0YWJsZS4gTm8gcGFnZSBmcmVlIGZ1bmN0aW9uIGlzIGFk ZGVkLCBhbmQgd2UgcmVxdWlyZSB0aGF0IGFsbAphbGxvY2F0ZWQgcGFnZXMgY2FuIGJlIHJlY2xh aW1lZCBvciBoYXMgbm8gZWZmZWN0IG91dCBvZgptZW1vcnlfYWRkX2NvbW1vbigpLCBpZiBtZW1v cnlfYWRkX2NvbW1vbigpIGZhaWxzLgoKU2lnbmVkLW9mZi1ieTogSGFvemhvbmcgWmhhbmcgPGhh b3pob25nLnpoYW5nQGludGVsLmNvbT4KLS0tCkNjOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3Vz ZS5jb20+CkNjOiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgotLS0K IHhlbi9hcmNoL3g4Ni94ODZfNjQvbW0uYyB8IDgzICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDY5IGluc2VydGlvbnMoKyks IDE0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni94ODZfNjQvbW0uYyBi L3hlbi9hcmNoL3g4Ni94ODZfNjQvbW0uYwppbmRleCA5MDM0MTI2N2Q5Li4zNmRjYjNmMWNiIDEw MDY0NAotLS0gYS94ZW4vYXJjaC94ODYveDg2XzY0L21tLmMKKysrIGIveGVuL2FyY2gveDg2L3g4 Nl82NC9tbS5jCkBAIC0xMDYsMTMgKzEwNiw0NCBAQCBzdHJ1Y3QgbWVtX2hvdGFkZF9pbmZvCiAg ICAgdW5zaWduZWQgbG9uZyBjdXI7CiB9OwogCitzdHJ1Y3QgbWVtX2hvdGFkZF9hbGxvYworewor ICAgIC8qCisgICAgICogQWxsb2NhdGUgMl5QQUdFVEFCTEVfT1JERVIgcGFnZXMuCisgICAgICoK KyAgICAgKiBObyBmcmVlIGZ1bmN0aW9uIGlzIGFkZGVkIHJpZ2h0IG5vdywgc28gd2UgcmVxdWly ZSB0aGF0IGFsbAorICAgICAqIGFsbG9jYXRlZCBwYWdlcyBjYW4gYmUgcmVjbGFpbWVkIGVhc2ls eSBvciBoYXMgbm8gZWZmZWN0IG91dCBvZgorICAgICAqIG1lbW9yeV9hZGRfY29tbW9uKCksIGlm IG1lbW9yeV9hZGRfY29tbW9uKCkgZmFpbHMuCisgICAgICoKKyAgICAgKiBGb3IgZXhhbXBsZSwg YWxsb2NfaG90YWRkX21mbigpLCB3aGljaCBpcyB1c2VkIGluIFJBTSBob3RwbHVnLAorICAgICAq IGFsbG9jYXRlcyBwYWdlcyBmcm9tIHRoZSBob3RwbHVnZ2VkIFJBTS4gSWYgbWVtb3J5X2FkZF9j b21tb24oKQorICAgICAqIGZhaWxzLCB0aGUgaG90cGx1Z2dlZCBSQU0gd2lsbCBub3QgYmUgYXZh aWxhYmxlIHRvIFhlbiwgc28KKyAgICAgKiBwYWdlcyBhbGxvY2F0ZWQgYnkgYWxsb2NfaG90YWRk X21mbnMoKSB3aWxsIG5ldmVyIGJlIHVzZWQgYW5kCisgICAgICogaGF2ZSBubyBlZmZlY3QuCisg ICAgICoKKyAgICAgKiBQYXJhbWV0ZXJzOgorICAgICAqICBvcGFxdWU6ICAgYXJndW1lbnRzIG9m IHRoZSBhbGxvY2F0b3IgKGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24pCisgICAgICoK KyAgICAgKiBSZXR1cm46CisgICAgICogIE9uIHN1Y2Nlc3MsIHJldHVybiBNRk4gb2YgdGhlIGZp cnN0IHBhZ2UuCisgICAgICogIE90aGVyd2lzZSwgcmV0dXJuIG1mbl94KElOVkFMSURfTUZOKS4K KyAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nICgqYWxsb2NfbWZucykodm9pZCAqb3BhcXVlKTsK KworICAgIC8qCisgICAgICogQWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIEBhbGxvY19t Zm5zKCkuCisgICAgICovCisgICAgdm9pZCAqb3BhcXVlOworfTsKKwogc3RhdGljIGludCBob3Rh ZGRfbWVtX3ZhbGlkKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgbWVtX2hvdGFkZF9pbmZvICpp bmZvKQogewogICAgIHJldHVybiAocGZuIDwgaW5mby0+ZXBmbiAmJiBwZm4gPj0gaW5mby0+c3Bm bik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX2hvdGFkZF9tZm4oc3RydWN0IG1l bV9ob3RhZGRfaW5mbyAqaW5mbykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX2hvdGFkZF9t Zm4odm9pZCAqb3BhcXVlKQogeworICAgIHN0cnVjdCBtZW1faG90YWRkX2luZm8gKmluZm8gPSBv cGFxdWU7CiAgICAgdW5zaWduZWQgbWZuOwogCiAgICAgQVNTRVJUKChpbmZvLT5jdXIgKyAoIDFV TCA8PCBQQUdFVEFCTEVfT1JERVIpIDwgaW5mby0+ZXBmbikgJiYKQEAgLTMxNSw3ICszNDYsOCBA QCBzdGF0aWMgdm9pZCBkZXN0cm95X20ycF9tYXBwaW5nKHN0cnVjdCBtZW1faG90YWRkX2luZm8g KmluZm8pCiAgKiBzcGZuL2VwZm46IHRoZSBwZm4gcmFuZ2VzIHRvIGJlIHNldHVwCiAgKiBmcmVl X3MvZnJlZV9lOiB0aGUgcGZuIHJhbmdlcyB0aGF0IGlzIGZyZWUgc3RpbGwKICAqLwotc3RhdGlj IGludCBzZXR1cF9jb21wYXRfbTJwX3RhYmxlKHN0cnVjdCBtZW1faG90YWRkX2luZm8gKmluZm8p CitzdGF0aWMgaW50IHNldHVwX2NvbXBhdF9tMnBfdGFibGUoc3RydWN0IG1lbV9ob3RhZGRfaW5m byAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWVtX2hv dGFkZF9hbGxvYyAqYWxsb2MpCiB7CiAgICAgdW5zaWduZWQgbG9uZyBpLCB2YSwgc21hcCwgZW1h cCwgcnd2YSwgZXBmbiA9IGluZm8tPmVwZm4sIG1mbjsKICAgICB1bnNpZ25lZCBpbnQgbjsKQEAg LTM2OSw3ICs0MDEsMTMgQEAgc3RhdGljIGludCBzZXR1cF9jb21wYXRfbTJwX3RhYmxlKHN0cnVj dCBtZW1faG90YWRkX2luZm8gKmluZm8pCiAgICAgICAgIGlmICggbiA9PSBDTlQgKQogICAgICAg ICAgICAgY29udGludWU7CiAKLSAgICAgICAgbWZuID0gYWxsb2NfaG90YWRkX21mbihpbmZvKTsK KyAgICAgICAgbWZuID0gYWxsb2MtPmFsbG9jX21mbnMoYWxsb2MtPm9wYXF1ZSk7CisgICAgICAg IGlmICggbWZuID09IG1mbl94KElOVkFMSURfTUZOKSApCisgICAgICAgIHsKKyAgICAgICAgICAg IGVyciA9IC1FTk9NRU07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAg IGVyciA9IG1hcF9wYWdlc190b194ZW4ocnd2YSwgbWZuLCAxVUwgPDwgUEFHRVRBQkxFX09SREVS LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBR0VfSFlQRVJWSVNPUik7CiAgICAg ICAgIGlmICggZXJyICkKQEAgLTM4OSw3ICs0MjcsOCBAQCBzdGF0aWMgaW50IHNldHVwX2NvbXBh dF9tMnBfdGFibGUoc3RydWN0IG1lbV9ob3RhZGRfaW5mbyAqaW5mbykKICAqIEFsbG9jYXRlIGFu ZCBtYXAgdGhlIG1hY2hpbmUtdG8tcGh5cyB0YWJsZS4KICAqIFRoZSBMMyBmb3IgUk8vUldSVyBN UFQgYW5kIHRoZSBMMiBmb3IgY29tcGF0aWJsZSBNUFQgc2hvdWxkIGJlIHNldHVwIGFscmVhZHkK ICAqLwotc3RhdGljIGludCBzZXR1cF9tMnBfdGFibGUoc3RydWN0IG1lbV9ob3RhZGRfaW5mbyAq aW5mbykKK3N0YXRpYyBpbnQgc2V0dXBfbTJwX3RhYmxlKHN0cnVjdCBtZW1faG90YWRkX2luZm8g KmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWVtX2hvdGFkZF9hbGxv YyAqYWxsb2MpCiB7CiAgICAgdW5zaWduZWQgbG9uZyBpLCB2YSwgc21hcCwgZW1hcDsKICAgICB1 bnNpZ25lZCBpbnQgbjsKQEAgLTQzOCw3ICs0NzcsMTMgQEAgc3RhdGljIGludCBzZXR1cF9tMnBf dGFibGUoc3RydWN0IG1lbV9ob3RhZGRfaW5mbyAqaW5mbykKICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgaWYgKCBuIDwgQ05UICkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBtZm4gPSBhbGxvY19ob3RhZGRfbWZuKGluZm8pOworICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBtZm4gPSBhbGxvYy0+YWxsb2NfbWZucyhhbGxvYy0+b3BhcXVlKTsKKworICAgICAg ICAgICAgaWYgKCBtZm4gPT0gbWZuX3goSU5WQUxJRF9NRk4pICkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICByZXQgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7 CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldCA9IG1hcF9wYWdlc190b194ZW4oCiAg ICAgICAgICAgICAgICAgICAgICAgICBSRFdSX01QVF9WSVJUX1NUQVJUICsgaSAqIHNpemVvZih1 bnNpZ25lZCBsb25nKSwKQEAgLTQ4Myw3ICs1MjgsNyBAQCBzdGF0aWMgaW50IHNldHVwX20ycF90 YWJsZShzdHJ1Y3QgbWVtX2hvdGFkZF9pbmZvICppbmZvKQogI3VuZGVmIENOVAogI3VuZGVmIE1G TgogCi0gICAgcmV0ID0gc2V0dXBfY29tcGF0X20ycF90YWJsZShpbmZvKTsKKyAgICByZXQgPSBz ZXR1cF9jb21wYXRfbTJwX3RhYmxlKGluZm8sIGFsbG9jKTsKIGVycm9yOgogICAgIHJldHVybiBy ZXQ7CiB9CkBAIC03NjIsNyArODA3LDcgQEAgc3RhdGljIHZvaWQgY2xlYW51cF9mcmFtZV90YWJs ZSh1bnNpZ25lZCBsb25nIHNwZm4sIHVuc2lnbmVkIGxvbmcgZXBmbikKIH0KIAogc3RhdGljIGlu dCBzZXR1cF9mcmFtZXRhYmxlX2NodW5rKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1lbV9ob3RhZGRfaW5mbyAqaW5mbykK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWVtX2hvdGFkZF9hbGxv YyAqYWxsb2MpCiB7CiAgICAgdW5zaWduZWQgbG9uZyBzID0gKHVuc2lnbmVkIGxvbmcpc3RhcnQ7 CiAgICAgdW5zaWduZWQgbG9uZyBlID0gKHVuc2lnbmVkIGxvbmcpZW5kOwpAQCAtNzc0LDcgKzgx OSwxMyBAQCBzdGF0aWMgaW50IHNldHVwX2ZyYW1ldGFibGVfY2h1bmsodm9pZCAqc3RhcnQsIHZv aWQgKmVuZCwKIAogICAgIGZvciAoIGN1ciA9IHM7IGN1ciA8IGU7IGN1ciArPSAoMVVMIDw8IEwy X1BBR0VUQUJMRV9TSElGVCkgKQogICAgIHsKLSAgICAgICAgbWZuID0gYWxsb2NfaG90YWRkX21m bihpbmZvKTsKKyAgICAgICAgbWZuID0gYWxsb2MtPmFsbG9jX21mbnMoYWxsb2MtPm9wYXF1ZSk7 CisgICAgICAgIGlmICggbWZuID09IG1mbl94KElOVkFMSURfTUZOKSApCisgICAgICAgIHsKKyAg ICAgICAgICAgIGVyciA9IC1FTk9NRU07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor CiAgICAgICAgIGVyciA9IG1hcF9wYWdlc190b194ZW4oY3VyLCBtZm4sIDFVTCA8PCBQQUdFVEFC TEVfT1JERVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9IWVBFUlZJU09S KTsKICAgICAgICAgaWYgKCBlcnIgKQpAQCAtNzg5LDcgKzg0MCw4IEBAIHN0YXRpYyBpbnQgc2V0 dXBfZnJhbWV0YWJsZV9jaHVuayh2b2lkICpzdGFydCwgdm9pZCAqZW5kLAogICAgIHJldHVybiBl cnI7CiB9CiAKLXN0YXRpYyBpbnQgZXh0ZW5kX2ZyYW1lX3RhYmxlKHN0cnVjdCBtZW1faG90YWRk X2luZm8gKmluZm8pCitzdGF0aWMgaW50IGV4dGVuZF9mcmFtZV90YWJsZShzdHJ1Y3QgbWVtX2hv dGFkZF9pbmZvICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1l bV9ob3RhZGRfYWxsb2MgKmFsbG9jKQogewogICAgIHVuc2lnbmVkIGxvbmcgY2lkeCwgbmlkeCwg ZWlkeCwgc3BmbiwgZXBmbjsKICAgICBpbnQgZXJyID0gMDsKQEAgLTgxNiw3ICs4NjgsNyBAQCBz dGF0aWMgaW50IGV4dGVuZF9mcmFtZV90YWJsZShzdHJ1Y3QgbWVtX2hvdGFkZF9pbmZvICppbmZv KQogICAgICAgICAgICAgbmlkeCA9IGVpZHg7CiAgICAgICAgIGVyciA9IHNldHVwX2ZyYW1ldGFi bGVfY2h1bmsocGR4X3RvX3BhZ2UoY2lkeCAqIFBEWF9HUk9VUF9DT1VOVCApLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkeF90b19wYWdlKG5pZHggKiBQRFhfR1JPVVBf Q09VTlQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8pOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jKTsKICAgICAgICAgaWYgKCBl cnIgKQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTEzMzgsNyArMTM5MCw4IEBAIHN0YXRpYyBp bnQgbWVtX2hvdGFkZF9jaGVjayh1bnNpZ25lZCBsb25nIHNwZm4sIHVuc2lnbmVkIGxvbmcgZXBm bikKIH0KIAogc3RhdGljIGludCBtZW1vcnlfYWRkX2NvbW1vbihzdHJ1Y3QgbWVtX2hvdGFkZF9p bmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHht LCBib29sIGRpcmVjdF9tYXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBweG0sIGJvb2wgZGlyZWN0X21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IG1lbV9ob3RhZGRfYWxsb2MgKmFsbG9jKQogewogICAgIHVuc2lnbmVkIGxvbmcgc3Bm biA9IGluZm8tPnNwZm4sIGVwZm4gPSBpbmZvLT5lcGZuOwogICAgIGludCByZXQ7CkBAIC0xNDAy LDcgKzE0NTUsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9hZGRfY29tbW9uKHN0cnVjdCBtZW1faG90 YWRkX2luZm8gKmluZm8sCiAgICAgICAgICAgICBOT0RFX0RBVEEobm9kZSktPm5vZGVfc3Bhbm5l ZF9wYWdlcyA9IGVwZm4gLSBub2RlX3N0YXJ0X3Bmbihub2RlKTsKICAgICB9CiAKLSAgICByZXQg PSBleHRlbmRfZnJhbWVfdGFibGUoaW5mbyk7CisgICAgcmV0ID0gZXh0ZW5kX2ZyYW1lX3RhYmxl KGluZm8sIGFsbG9jKTsKICAgICBpZiAoIHJldCApCiAgICAgICAgIGdvdG8gcmVzdG9yZV9ub2Rl X3N0YXR1czsKIApAQCAtMTQxNSw3ICsxNDY4LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYWRkX2Nv bW1vbihzdHJ1Y3QgbWVtX2hvdGFkZF9pbmZvICppbmZvLAogICAgIHRvdGFsX3BhZ2VzICs9IGVw Zm4gLSBzcGZuOwogCiAgICAgc2V0X3BkeF9yYW5nZShzcGZuLCBlcGZuKTsKLSAgICByZXQgPSBz ZXR1cF9tMnBfdGFibGUoaW5mbyk7CisgICAgcmV0ID0gc2V0dXBfbTJwX3RhYmxlKGluZm8sIGFs bG9jKTsKIAogICAgIGlmICggcmV0ICkKICAgICAgICAgZ290byBkZXN0cm95X20ycDsKQEAgLTE0 NjUsMTEgKzE1MTgsMTMgQEAgZGVzdHJveV9kaXJlY3RtYXA6CiBpbnQgbWVtb3J5X2FkZCh1bnNp Z25lZCBsb25nIHNwZm4sIHVuc2lnbmVkIGxvbmcgZXBmbiwgdW5zaWduZWQgaW50IHB4bSkKIHsK ICAgICBzdHJ1Y3QgbWVtX2hvdGFkZF9pbmZvIGluZm8gPSB7IC5zcGZuID0gc3BmbiwgLmVwZm4g PSBlcGZuLCAuY3VyID0gc3BmbiB9OworICAgIHN0cnVjdCBtZW1faG90YWRkX2FsbG9jIGFsbG9j ID0KKyAgICAgICAgeyAuYWxsb2NfbWZucyA9IGFsbG9jX2hvdGFkZF9tZm4sIC5vcGFxdWUgPSAm aW5mbyB9OwogICAgIGludCByZXQ7CiAKICAgICBkcHJpbnRrKFhFTkxPR19JTkZPLCAibWVtb3J5 X2FkZCAlbHggfiAlbHggd2l0aCBweG0gJXhcbiIsIHNwZm4sIGVwZm4sIHB4bSk7CiAKLSAgICBy ZXQgPSBtZW1vcnlfYWRkX2NvbW1vbigmaW5mbywgcHhtLCB0cnVlKTsKKyAgICByZXQgPSBtZW1v cnlfYWRkX2NvbW1vbigmaW5mbywgcHhtLCB0cnVlLCAmYWxsb2MpOwogICAgIGlmICggIXJldCAp CiAgICAgewogICAgICAgICAvKiBXZSBjYW4ndCByZXZlcnQgYW55IG1vcmUgKi8KLS0gCjIuMTUu MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=