From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v6 19/21] tools/libxc: Wire a featureset through to cpuid policy logic Date: Fri, 8 Apr 2016 21:31:55 +0100 Message-ID: <1460147517-11706-20-git-send-email-andrew.cooper3@citrix.com> References: <1460147517-11706-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1460147517-11706-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Ian Jackson List-Id: xen-devel@lists.xenproject.org TGF0ZXIgY2hhbmdlcyAoUGF0Y2ggdGl0bGVkICJ0b29scy9saWJ4YzogVXNlIGZlYXR1cmVzZXRz IHJhdGhlciB0aGFuCmd1ZXNzd29yayIpIHdpbGwgY2F1c2UgdGhlIGNwdWlkIGdlbmVyYXRpb24g bG9naWMgdG8gc2VlZCB0aGVpcgppbmZvcm1hdGlvbiBmcm9tIGEgZmVhdHVyZXNldC4gIFRoaXMg cGF0Y2ggYWRkcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgdG8Kc3BlY2lmeSBhIGZlYXR1cmVzZXQsIGFu ZCB3aWxsIG9idGFpbiB0aGUgYXBwcm9wcmlhdGUgZGVmYXVsdHMgZnJvbSBYZW4KaWYgb21pdHRl ZC4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5j b20+CkFja2VkLWJ5OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KQ0M6IElhbiBK YWNrc29uIDxJYW4uSmFja3NvbkBldS5jaXRyaXguY29tPgoKdjI6CiAqIE1vZGlmeSBleGlzdGlu ZyBjYWxsIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIGEgbmV3IG9uZS4KICogRml4IHVwIGluLXRy ZWUgY2FsbHNpdGVzLgotLS0KIHRvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oICAgICAgIHwg IDQgKystCiB0b29scy9saWJ4Yy94Y19jcHVpZF94ODYuYyAgICAgICAgICB8IDY5ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIHRvb2xzL2xpYnhsL2xpYnhsX2NwdWlkLmMg ICAgICAgICAgIHwgIDIgKy0KIHRvb2xzL29jYW1sL2xpYnMveGMveGVuY3RybF9zdHVicy5jIHwg IDIgKy0KIHRvb2xzL3B5dGhvbi94ZW4vbG93bGV2ZWwveGMveGMuYyAgIHwgIDIgKy0KIDUgZmls ZXMgY2hhbmdlZCwgNjYgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGMvaW5jbHVkZS94ZW5jdHJsLmggYi90b29scy9saWJ4Yy9pbmNsdWRlL3hl bmN0cmwuaAppbmRleCAzNzE1ZjUxLi5mNWEwMzRhIDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy9p bmNsdWRlL3hlbmN0cmwuaAorKysgYi90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmwuaApAQCAt MTk4NSw3ICsxOTg1LDkgQEAgaW50IHhjX2NwdWlkX3NldCh4Y19pbnRlcmZhY2UgKnhjaCwKICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmNvbmZpZywKICAgICAgICAgICAgICAgICAgY2hh ciAqKmNvbmZpZ190cmFuc2Zvcm1lZCk7CiBpbnQgeGNfY3B1aWRfYXBwbHlfcG9saWN5KHhjX2lu dGVyZmFjZSAqeGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkb21pZF90IGRvbWlkKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21pZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDMyX3QgKmZlYXR1cmVzZXQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBucl9mZWF0dXJlcyk7CiB2b2lkIHhjX2NwdWlkX3RvX3N0cihjb25z dCB1bnNpZ25lZCBpbnQgKnJlZ3MsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqc3Rycyk7 IC8qIHNvbWUgc3Ryc1tdIG1heSBiZSBOVUxMIGlmIEVOT01FTSAqLwogaW50IHhjX21jYV9vcCh4 Y19pbnRlcmZhY2UgKnhjaCwgc3RydWN0IHhlbl9tYyAqbWMpOwpkaWZmIC0tZ2l0IGEvdG9vbHMv bGlieGMveGNfY3B1aWRfeDg2LmMgYi90b29scy9saWJ4Yy94Y19jcHVpZF94ODYuYwppbmRleCAw Y2ZmYjM2Li5hOTJmNWU0IDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy94Y19jcHVpZF94ODYuYwor KysgYi90b29scy9saWJ4Yy94Y19jcHVpZF94ODYuYwpAQCAtMTY2LDYgKzE2Niw5IEBAIHN0cnVj dCBjcHVpZF9kb21haW5faW5mbwogICAgIGJvb2wgcHZoOwogICAgIHVpbnQ2NF90IHhmZWF0dXJl X21hc2s7CiAKKyAgICB1aW50MzJfdCAqZmVhdHVyZXNldDsKKyAgICB1bnNpZ25lZCBpbnQgbnJf ZmVhdHVyZXM7CisKICAgICAvKiBQVi1vbmx5IGluZm9ybWF0aW9uLiAqLwogICAgIGJvb2wgcHY2 NDsKIApAQCAtMTk3LDExICsyMDAsMTQgQEAgc3RhdGljIHZvaWQgY3B1aWQoY29uc3QgdW5zaWdu ZWQgaW50ICppbnB1dCwgdW5zaWduZWQgaW50ICpyZWdzKQogfQogCiBzdGF0aWMgaW50IGdldF9j cHVpZF9kb21haW5faW5mbyh4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVpZF9kb21haW5faW5mbyAqaW5m bykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVpZF9kb21haW5f aW5mbyAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpm ZWF0dXJlc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IG5yX2ZlYXR1cmVzKQogewogICAgIHN0cnVjdCB4ZW5fZG9tY3RsIGRvbWN0bCA9IHt9OwogICAg IHhjX2RvbWluZm9fdCBkaTsKICAgICB1bnNpZ25lZCBpbnQgaW5bMl0gPSB7IDAsIH4wVSB9LCBy ZWdzWzRdOworICAgIHVuc2lnbmVkIGludCBpLCBob3N0X25yX2ZlYXR1cmVzID0geGNfZ2V0X2Nw dV9mZWF0dXJlc2V0X3NpemUoKTsKICAgICBpbnQgcmM7CiAKICAgICBjcHVpZChpbiwgcmVncyk7 CkBAIC0yMjMsNiArMjI5LDIzIEBAIHN0YXRpYyBpbnQgZ2V0X2NwdWlkX2RvbWFpbl9pbmZvKHhj X2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkLAogICAgIGluZm8tPmh2bSA9IGRpLmh2bTsK ICAgICBpbmZvLT5wdmggPSBkaS5wdmg7CiAKKyAgICBpbmZvLT5mZWF0dXJlc2V0ID0gY2FsbG9j KGhvc3RfbnJfZmVhdHVyZXMsIHNpemVvZigqaW5mby0+ZmVhdHVyZXNldCkpOworICAgIGlmICgg IWluZm8tPmZlYXR1cmVzZXQgKQorICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgIGluZm8t Pm5yX2ZlYXR1cmVzID0gaG9zdF9ucl9mZWF0dXJlczsKKworICAgIGlmICggZmVhdHVyZXNldCAp CisgICAgeworICAgICAgICBtZW1jcHkoaW5mby0+ZmVhdHVyZXNldCwgZmVhdHVyZXNldCwKKyAg ICAgICAgICAgICAgIG1pbihob3N0X25yX2ZlYXR1cmVzLCBucl9mZWF0dXJlcykgKiBzaXplb2Yo KmluZm8tPmZlYXR1cmVzZXQpKTsKKworICAgICAgICAvKiBDaGVjayBmb3IgdHJ1bmNhdGVkIHNl dCBiaXRzLiAqLworICAgICAgICBmb3IgKCBpID0gbnJfZmVhdHVyZXM7IGkgPCBob3N0X25yX2Zl YXR1cmVzOyArK2kgKQorICAgICAgICAgICAgaWYgKCBmZWF0dXJlc2V0W2ldICE9IDAgKQorICAg ICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKKyAgICB9CisKICAgICAvKiBHZXQgeHN0 YXRlIGluZm9ybWF0aW9uLiAqLwogICAgIGRvbWN0bC5jbWQgPSBYRU5fRE9NQ1RMX2dldHZjcHVl eHRzdGF0ZTsKICAgICBkb21jdGwuZG9tYWluID0gZG9taWQ7CkBAIC0yNDcsNiArMjcwLDE0IEBA IHN0YXRpYyBpbnQgZ2V0X2NwdWlkX2RvbWFpbl9pbmZvKHhjX2ludGVyZmFjZSAqeGNoLCBkb21p ZF90IGRvbWlkLAogICAgICAgICAgICAgcmV0dXJuIHJjOwogCiAgICAgICAgIGluZm8tPm5lc3Rl ZGh2bSA9ICEhdmFsOworCisgICAgICAgIGlmICggIWZlYXR1cmVzZXQgKQorICAgICAgICB7Cisg ICAgICAgICAgICByYyA9IHhjX2dldF9jcHVfZmVhdHVyZXNldCh4Y2gsIFhFTl9TWVNDVExfY3B1 X2ZlYXR1cmVzZXRfaHZtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jmhvc3RfbnJfZmVhdHVyZXMsIGluZm8tPmZlYXR1cmVzZXQpOworICAgICAgICAgICAgaWYgKCBy YyApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CiAgICAgfQogICAgIGVs c2UKICAgICB7CkBAIC0yNTcsMTEgKzI4OCwyNCBAQCBzdGF0aWMgaW50IGdldF9jcHVpZF9kb21h aW5faW5mbyh4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCwKICAgICAgICAgICAgIHJl dHVybiByYzsKIAogICAgICAgICBpbmZvLT5wdjY0ID0gKHdpZHRoID09IDgpOworCisgICAgICAg IGlmICggIWZlYXR1cmVzZXQgKQorICAgICAgICB7CisgICAgICAgICAgICByYyA9IHhjX2dldF9j cHVfZmVhdHVyZXNldCh4Y2gsIFhFTl9TWVNDVExfY3B1X2ZlYXR1cmVzZXRfcHYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdF9ucl9mZWF0dXJlcywgaW5mby0+ ZmVhdHVyZXNldCk7CisgICAgICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgICAgICAgICByZXR1 cm4gcmM7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHZv aWQgZnJlZV9jcHVpZF9kb21haW5faW5mbyhzdHJ1Y3QgY3B1aWRfZG9tYWluX2luZm8gKmluZm8p Cit7CisgICAgZnJlZShpbmZvLT5mZWF0dXJlc2V0KTsKK30KKwogc3RhdGljIHZvaWQgYW1kX3hj X2NwdWlkX3BvbGljeSh4Y19pbnRlcmZhY2UgKnhjaCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IGNwdWlkX2RvbWFpbl9pbmZvICppbmZvLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmlucHV0LCB1bnNpZ25l ZCBpbnQgKnJlZ3MpCkBAIC03ODksMTYgKzgzMywxOCBAQCB2b2lkIHhjX2NwdWlkX3RvX3N0cihj b25zdCB1bnNpZ25lZCBpbnQgKnJlZ3MsIGNoYXIgKipzdHJzKQogICAgIH0KIH0KIAotaW50IHhj X2NwdWlkX2FwcGx5X3BvbGljeSh4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCkKK2lu dCB4Y19jcHVpZF9hcHBseV9wb2xpY3koeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpmZWF0dXJlc2V0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnJfZmVhdHVyZXMpCiB7CiAgICAgc3Ry dWN0IGNwdWlkX2RvbWFpbl9pbmZvIGluZm8gPSB7fTsKICAgICB1bnNpZ25lZCBpbnQgaW5wdXRb Ml0gPSB7IDAsIDAgfSwgcmVnc1s0XTsKICAgICB1bnNpZ25lZCBpbnQgYmFzZV9tYXgsIGV4dF9t YXg7CiAgICAgaW50IHJjOwogCi0gICAgcmMgPSBnZXRfY3B1aWRfZG9tYWluX2luZm8oeGNoLCBk b21pZCwgJmluZm8pOworICAgIHJjID0gZ2V0X2NwdWlkX2RvbWFpbl9pbmZvKHhjaCwgZG9taWQs ICZpbmZvLCBmZWF0dXJlc2V0LCBucl9mZWF0dXJlcyk7CiAgICAgaWYgKCByYyApCi0gICAgICAg IHJldHVybiByYzsKKyAgICAgICAgZ290byBvdXQ7CiAKICAgICBjcHVpZChpbnB1dCwgcmVncyk7 CiAgICAgYmFzZV9tYXggPSAocmVnc1swXSA8PSBERUZfTUFYX0JBU0UpID8gcmVnc1swXSA6IERF Rl9NQVhfQkFTRTsKQEAgLTgyMSw3ICs4NjcsNyBAQCBpbnQgeGNfY3B1aWRfYXBwbHlfcG9saWN5 KHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkKQogICAgICAgICB7CiAgICAgICAgICAg ICByYyA9IHhjX2NwdWlkX2RvX2RvbWN0bCh4Y2gsIGRvbWlkLCBpbnB1dCwgcmVncyk7CiAgICAg ICAgICAgICBpZiAoIHJjICkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgICAg ICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBJbnRlbCBjYWNoZSBkZXNj cmlwdG9yIGxlYXZlcy4gKi8KQEAgLTg0OSw3ICs4OTUsOSBAQCBpbnQgeGNfY3B1aWRfYXBwbHlf cG9saWN5KHhjX2ludGVyZmFjZSAqeGNoLCBkb21pZF90IGRvbWlkKQogICAgICAgICAgICAgYnJl YWs7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7Cisgb3V0OgorICAgIGZyZWVfY3B1aWRfZG9tYWlu X2luZm8oJmluZm8pOworICAgIHJldHVybiByYzsKIH0KIAogLyoKQEAgLTkzOCw5ICs5ODYsOSBA QCBpbnQgeGNfY3B1aWRfc2V0KAogCiAgICAgbWVtc2V0KGNvbmZpZ190cmFuc2Zvcm1lZCwgMCwg NCAqIHNpemVvZigqY29uZmlnX3RyYW5zZm9ybWVkKSk7CiAKLSAgICByYyA9IGdldF9jcHVpZF9k b21haW5faW5mbyh4Y2gsIGRvbWlkLCAmaW5mbyk7CisgICAgcmMgPSBnZXRfY3B1aWRfZG9tYWlu X2luZm8oeGNoLCBkb21pZCwgJmluZm8sIE5VTEwsIDApOwogICAgIGlmICggcmMgKQotICAgICAg ICByZXR1cm4gcmM7CisgICAgICAgIGdvdG8gb3V0OwogCiAgICAgY3B1aWQoaW5wdXQsIHJlZ3Mp OwogCkBAIC05OTEsNyArMTAzOSw3IEBAIGludCB4Y19jcHVpZF9zZXQoCiAKICAgICByYyA9IHhj X2NwdWlkX2RvX2RvbWN0bCh4Y2gsIGRvbWlkLCBpbnB1dCwgcmVncyk7CiAgICAgaWYgKCByYyA9 PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gb3V0OwogCiAgZmFpbDoKICAg ICBmb3IgKCBpID0gMDsgaSA8IDQ7IGkrKyApCkBAIC05OTksNSArMTA0Nyw4IEBAIGludCB4Y19j cHVpZF9zZXQoCiAgICAgICAgIGZyZWUoY29uZmlnX3RyYW5zZm9ybWVkW2ldKTsKICAgICAgICAg Y29uZmlnX3RyYW5zZm9ybWVkW2ldID0gTlVMTDsKICAgICB9CisKKyBvdXQ6CisgICAgZnJlZV9j cHVpZF9kb21haW5faW5mbygmaW5mbyk7CiAgICAgcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEv dG9vbHMvbGlieGwvbGlieGxfY3B1aWQuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NwdWlkLmMKaW5k ZXggYzY2ZTkxMi4uZmMyMDE1NyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfY3B1aWQu YworKysgYi90b29scy9saWJ4bC9saWJ4bF9jcHVpZC5jCkBAIC0zMzQsNyArMzM0LDcgQEAgaW50 IGxpYnhsX2NwdWlkX3BhcnNlX2NvbmZpZ194ZW5kKGxpYnhsX2NwdWlkX3BvbGljeV9saXN0ICpj cHVpZCwKIAogdm9pZCBsaWJ4bF9jcHVpZF9hcHBseV9wb2xpY3kobGlieGxfY3R4ICpjdHgsIHVp bnQzMl90IGRvbWlkKQogewotICAgIHhjX2NwdWlkX2FwcGx5X3BvbGljeShjdHgtPnhjaCwgZG9t aWQpOworICAgIHhjX2NwdWlkX2FwcGx5X3BvbGljeShjdHgtPnhjaCwgZG9taWQsIE5VTEwsIDAp OwogfQogCiB2b2lkIGxpYnhsX2NwdWlkX3NldChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9t aWQsCmRpZmYgLS1naXQgYS90b29scy9vY2FtbC9saWJzL3hjL3hlbmN0cmxfc3R1YnMuYyBiL3Rv b2xzL29jYW1sL2xpYnMveGMveGVuY3RybF9zdHVicy5jCmluZGV4IGU4N2YxNGYuLjIyNzQxZDUg MTAwNjQ0Ci0tLSBhL3Rvb2xzL29jYW1sL2xpYnMveGMveGVuY3RybF9zdHVicy5jCisrKyBiL3Rv b2xzL29jYW1sL2xpYnMveGMveGVuY3RybF9zdHVicy5jCkBAIC03OTYsNyArNzk2LDcgQEAgQ0FN THByaW0gdmFsdWUgc3R1Yl94Y19kb21haW5fY3B1aWRfYXBwbHlfcG9saWN5KHZhbHVlIHhjaCwg dmFsdWUgZG9taWQpCiAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9f KQogCWludCByOwogCi0JciA9IHhjX2NwdWlkX2FwcGx5X3BvbGljeShfSCh4Y2gpLCBfRChkb21p ZCkpOworCXIgPSB4Y19jcHVpZF9hcHBseV9wb2xpY3koX0goeGNoKSwgX0QoZG9taWQpLCBOVUxM LCAwKTsKIAlpZiAociA8IDApCiAJCWZhaWx3aXRoX3hjKF9IKHhjaCkpOwogI2Vsc2UKZGlmZiAt LWdpdCBhL3Rvb2xzL3B5dGhvbi94ZW4vbG93bGV2ZWwveGMveGMuYyBiL3Rvb2xzL3B5dGhvbi94 ZW4vbG93bGV2ZWwveGMveGMuYwppbmRleCBkNTM4NzBmLi44MTJhOTA1IDEwMDY0NAotLS0gYS90 b29scy9weXRob24veGVuL2xvd2xldmVsL3hjL3hjLmMKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi9s b3dsZXZlbC94Yy94Yy5jCkBAIC03MzEsNyArNzMxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpweXhj X2RvbV9zZXRfcG9saWN5X2NwdWlkKFhjT2JqZWN0ICpzZWxmLAogICAgIGlmICggIVB5QXJnX1Bh cnNlVHVwbGUoYXJncywgImkiLCAmZG9taWQpICkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAg ICBpZiAoIHhjX2NwdWlkX2FwcGx5X3BvbGljeShzZWxmLT54Y19oYW5kbGUsIGRvbWlkKSApCisg ICAgaWYgKCB4Y19jcHVpZF9hcHBseV9wb2xpY3koc2VsZi0+eGNfaGFuZGxlLCBkb21pZCwgTlVM TCwgMCkgKQogICAgICAgICByZXR1cm4gcHl4Y19lcnJvcl90b19leGNlcHRpb24oc2VsZi0+eGNf aGFuZGxlKTsKIAogICAgIFB5X0lOQ1JFRih6ZXJvKTsKLS0gCjIuMS40CgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK