From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v3 04/28] xen/x86: Script to automatically process featureset information Date: Tue, 15 Mar 2016 15:35:00 +0000 Message-ID: <1458056124-8024-5-git-send-email-andrew.cooper3@citrix.com> References: <1458056124-8024-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: <1458056124-8024-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 List-Id: xen-devel@lists.xenproject.org VGhpcyBzY3JpcHQgY29uc3VtZXMgaW5jbHVkZS9wdWJsaWMvYXJjaC14ODYvY3B1ZmVhdHVyZXNl dC5oIGFuZCBnZW5lcmF0ZXMgYQpzaW5nbGUgaW5jbHVkZS9hc20teDg2L2NwdWlkLWF1dG9nZW4u aCBjb250YWluaW5nIGFsbCB0aGUgcHJvY2Vzc2VkCmluZm9ybWF0aW9uLgoKSXQgY3VycmVudGx5 IGdlbmVyYXRlcyBqdXN0IEZFQVRVUkVTRVRfTlJfRU5UUklFUy4gIEZ1dHVyZSBjaGFuZ2VzIHdp bGwKZ2VuZXJhdGUgbW9yZSBpbmZvcm1hdGlvbi4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29w ZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+CkFja2VkLWJ5OiBKYW4gQmV1bGljaCA8SkJl dWxpY2hAc3VzZS5jb20+Ci0tLQp2MzoKICogUmViYXNlZCBvdmVyIHRoZSBuZXcgbmFtZXNwYWNp bmcgaW4gY3B1ZmVhdHVyZXNldC5oCgpGb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzLCBuZXcg aW4gdjIuICBBbGwgZ2VuZXJhdGVkIGluZm9ybWF0aW9uIGlzIG5vdwpleHByZXNzZWQgYnkgI2Rl ZmluZXMgKHVzaW5nIEMgc3RydWN0dXJlIGluaXRpYWxpc2VycyBmb3IgbW9zdCkgYW5kIGNvbnRh aW5lZAppbiBhIHNpbmdsZSBoZWFkZXIgZmlsZS4KLS0tCiAuZ2l0aWdub3JlICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiB4ZW4vaW5jbHVkZS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAx MCArKwogeGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmggfCAgIDMgKy0KIHhlbi90b29s cy9nZW4tY3B1aWQucHkgICAgICAgICAgIHwgMTk3ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAyMTAgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHhlbi90b29scy9nZW4tY3B1aWQucHkKCmRpZmYg LS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCA5MWY2OTBjLi5iNDA0NTNlIDEw MDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTI1Miw2ICsyNTIsNyBA QCB4ZW4vaW5jbHVkZS9oZWFkZXJzLmNoawogeGVuL2luY2x1ZGUvaGVhZGVycysrLmNoawogeGVu L2luY2x1ZGUvYXNtCiB4ZW4vaW5jbHVkZS9hc20tKi9hc20tb2Zmc2V0cy5oCit4ZW4vaW5jbHVk ZS9hc20teDg2L2NwdWlkLWF1dG9nZW4uaAogeGVuL2luY2x1ZGUvY29tcGF0LyoKIHhlbi9pbmNs dWRlL2NvbmZpZy8KIHhlbi9pbmNsdWRlL2dlbmVyYXRlZC8KZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL01ha2VmaWxlIGIveGVuL2luY2x1ZGUvTWFrZWZpbGUKaW5kZXggOWM4MTg4Yi4uMjY4YmM5 ZCAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvTWFrZWZpbGUKKysrIGIveGVuL2luY2x1ZGUvTWFr ZWZpbGUKQEAgLTExNyw1ICsxMTcsMTUgQEAgaGVhZGVycysrLmNoazogJChQVUJMSUNfSEVBREVS UykgTWFrZWZpbGUKIAogZW5kaWYKIAoraWZlcSAoJChYRU5fVEFSR0VUX0FSQ0gpLHg4Nl82NCkK KworJChCQVNFRElSKS9pbmNsdWRlL2FzbS14ODYvY3B1aWQtYXV0b2dlbi5oOiAkKEJBU0VESVIp L2luY2x1ZGUvcHVibGljL2FyY2gteDg2L2NwdWZlYXR1cmVzZXQuaCAkKEJBU0VESVIpL3Rvb2xz L2dlbi1jcHVpZC5weSBGT1JDRQorCSQoUFlUSE9OKSAkKEJBU0VESVIpL3Rvb2xzL2dlbi1jcHVp ZC5weSAtaSAkXiAtbyAkQC5uZXcKKwkkKGNhbGwgbW92ZS1pZi1jaGFuZ2VkLCRALm5ldywkQCkK KworYWxsOiAkKEJBU0VESVIpL2luY2x1ZGUvYXNtLXg4Ni9jcHVpZC1hdXRvZ2VuLmgKK2VuZGlm CisKIGNsZWFuOjoKIAlybSAtcmYgY29tcGF0IGhlYWRlcnMuY2hrIGhlYWRlcnMrKy5jaGsKKwly bSAtZiAkKEJBU0VESVIpL2luY2x1ZGUvYXNtLXg4Ni9jcHVpZC1hdXRvZ2VuLmgKZGlmZiAtLWdp dCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvY3B1ZmVhdHVyZS5oIGIveGVuL2luY2x1ZGUvYXNtLXg4 Ni9jcHVmZWF0dXJlLmgKaW5kZXggZDlmZjkyYS4uYWFlMTVmYyAxMDA2NDQKLS0tIGEveGVuL2lu Y2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVm ZWF0dXJlLmgKQEAgLTExLDggKzExLDkgQEAKIAogI2luY2x1ZGUgPHhlbi9jb25zdC5oPgogI2lu Y2x1ZGUgPGFzbS9jcHVmZWF0dXJlc2V0Lmg+CisjaW5jbHVkZSA8YXNtL2NwdWlkLWF1dG9nZW4u aD4KIAotI2RlZmluZSBGU0NBUElOVFMgOQorI2RlZmluZSBGU0NBUElOVFMgRkVBVFVSRVNFVF9O Ul9FTlRSSUVTCiAjZGVmaW5lIE5DQVBJTlRTIChGU0NBUElOVFMgKyAxKSAvKiBOIDMyLWJpdCB3 b3JkcyB3b3J0aCBvZiBpbmZvICovCiAKIC8qIE90aGVyIGZlYXR1cmVzLCBMaW51eC1kZWZpbmVk IG1hcHBpbmcsIEZTTUFYKzEgKi8KZGlmZiAtLWdpdCBhL3hlbi90b29scy9nZW4tY3B1aWQucHkg Yi94ZW4vdG9vbHMvZ2VuLWNwdWlkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw MDAuLmZhMzJiZjUKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vdG9vbHMvZ2VuLWNwdWlkLnB5CkBA IC0wLDAgKzEsMTk3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgLSotIGNvZGluZzogdXRm LTggLSotCisKK2ltcG9ydCBzeXMsIG9zLCByZQorCitjbGFzcyBGYWlsKEV4Y2VwdGlvbik6Cisg ICAgcGFzcworCitjbGFzcyBTdGF0ZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs IGlucHV0LCBvdXRwdXQpOgorCisgICAgICAgIHNlbGYuc291cmNlID0gaW5wdXQKKyAgICAgICAg c2VsZi5pbnB1dCAgPSBvcGVuX2ZpbGVfb3JfZmQoaW5wdXQsICJyIiwgMikKKyAgICAgICAgc2Vs Zi5vdXRwdXQgPSBvcGVuX2ZpbGVfb3JfZmQob3V0cHV0LCAidyIsIDIpCisKKyAgICAgICAgIyBT dGF0ZSBwYXJzZWQgZnJvbSBpbnB1dAorICAgICAgICBzZWxmLm5hbWVzID0ge30gIyBOYW1lID0+ IHZhbHVlIG1hcHBpbmcKKworICAgICAgICAjIFN0YXRlIGNhbGN1bGF0ZWQKKyAgICAgICAgc2Vs Zi5ucl9lbnRyaWVzID0gMCAjIE51bWJlciBvZiB3b3JkcyBpbiBhIGZlYXR1cmVzZXQKKworZGVm IHBhcnNlX2RlZmluaXRpb25zKHN0YXRlKToKKyAgICAiIiIKKyAgICBQYXJzZSBmZWF0dXJlc2V0 IGluZm9ybWF0aW9uIGZyb20gQHBhcmFtIGYgYW5kIG11dGF0ZSB0aGUgZ2xvYmFsCisgICAgbmFt ZXNwYWNlIHdpdGggc3ltYm9scworICAgICIiIgorICAgIGZlYXRfcmVnZXggPSByZS5jb21waWxl KAorICAgICAgICByIl5YRU5fQ1BVRkVBVFVSRVwoKFtBLVowLTlfXSspLCIKKyAgICAgICAgIlxz KyhbXHNcZF0rXCpbXHNcZF0rXCtbXHNcZF0rKVwpLiokIikKKworICAgIHRoaXMgPSBzeXMubW9k dWxlc1tfX25hbWVfX10KKworICAgIGZvciBsIGluIHN0YXRlLmlucHV0LnJlYWRsaW5lcygpOgor ICAgICAgICAjIFNob3J0IGNpcmN1aXQgdGhlIHJlZ2V4Li4uCisgICAgICAgIGlmIG5vdCBsLnN0 YXJ0c3dpdGgoIlhFTl9DUFVGRUFUVVJFKCIpOgorICAgICAgICAgICAgY29udGludWUKKworICAg ICAgICByZXMgPSBmZWF0X3JlZ2V4Lm1hdGNoKGwpCisKKyAgICAgICAgaWYgcmVzIGlzIE5vbmU6 CisgICAgICAgICAgICByYWlzZSBGYWlsKCJGYWlsZWQgdG8gaW50ZXJwcmV0ICclcyciICUgKGwu c3RyaXAoKSwgKSkKKworICAgICAgICBuYW1lID0gcmVzLmdyb3VwcygpWzBdCisgICAgICAgIHZh bCA9IGV2YWwocmVzLmdyb3VwcygpWzFdKSAjIFJlZ2V4IGNvbmZpbmVzIHRoaXMgdG8gYSB2ZXJ5 IHNpbXBsZSBleHByZXNzaW9uCisKKyAgICAgICAgaWYgaGFzYXR0cih0aGlzLCBuYW1lKToKKyAg ICAgICAgICAgIHJhaXNlIEZhaWwoIkR1cGxpY2F0ZSBzeW1ib2wgJXMiICUgKG5hbWUsKSkKKwor ICAgICAgICBpZiB2YWwgaW4gc3RhdGUubmFtZXM6CisgICAgICAgICAgICByYWlzZSBGYWlsKCJB bGlhc2VkIHZhbHVlIGJldHdlZW4gJXMgYW5kICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAg IChuYW1lLCBzdGF0ZS5uYW1lc1t2YWxdKSkKKworICAgICAgICAjIE11dGF0ZSB0aGUgY3VycmVu dCBuYW1lc3BhY2UgdG8gaW5zZXJ0IGEgZmVhdHVyZSBsaXRlcmFsIHdpdGggaXRzCisgICAgICAg ICMgYml0IGluZGV4LiAgUHJlcGVuZCBhbiB1bmRlcnNjb3JlIGlmIHRoZSBuYW1lIHN0YXJ0cyB3 aXRoIGEgZGlnaXQuCisgICAgICAgIGlmIG5hbWVbMF0gaW4gIjAxMjM0NTY3ODkiOgorICAgICAg ICAgICAgdGhpc19uYW1lID0gIl8iICsgbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg dGhpc19uYW1lID0gbmFtZQorICAgICAgICBzZXRhdHRyKHRoaXMsIHRoaXNfbmFtZSwgdmFsKQor CisgICAgICAgICMgQ29uc3RydWN0IGEgcmV2ZXJzZSBtYXBwaW5nIG9mIHZhbHVlIHRvIG5hbWUK KyAgICAgICAgc3RhdGUubmFtZXNbdmFsXSA9IG5hbWUKKworICAgIGlmIGxlbihzdGF0ZS5uYW1l cykgPT0gMDoKKyAgICAgICAgcmFpc2UgRmFpbCgiTm8gZmVhdHVyZXMgZm91bmQiKQorCitkZWYg ZmVhdHVyZXNldF90b191aW50MzJzKGZzLCBucik6CisgICAgIiIiIFJlcHJlc2VudCBhIGZlYXR1 cmVzZXQgYXMgYSBsaXN0IG9mIEMtY29tcGF0aWJsZSB1aW50MzJfdCdzICIiIgorCisgICAgYml0 bWFwID0gMEwKKyAgICBmb3IgZiBpbiBmczoKKyAgICAgICAgYml0bWFwIHw9IDFMIDw8IGYKKwor ICAgIHdvcmRzID0gW10KKyAgICB3aGlsZSBiaXRtYXA6CisgICAgICAgIHdvcmRzLmFwcGVuZChi aXRtYXAgJiAoKDFMIDw8IDMyKSAtIDEpKQorICAgICAgICBiaXRtYXAgPj49IDMyCisKKyAgICBh c3NlcnQgbGVuKHdvcmRzKSA8PSBucgorCisgICAgaWYgbGVuKHdvcmRzKSA8IG5yOgorICAgICAg ICB3b3Jkcy5leHRlbmQoWzBdICogKG5yIC0gbGVuKHdvcmRzKSkpCisKKyAgICByZXR1cm4gWyAi MHglMDh4VSIgJSB4IGZvciB4IGluIHdvcmRzIF0KKworZGVmIGZvcm1hdF91aW50MzJzKHdvcmRz LCBpbmRlbnQpOgorICAgICIiIiBGb3JtYXQgYSBsaXN0IG9mIHVpbnQzMl90J3Mgc3V0YWJsZSBm b3IgYSBtYWNybyBkZWZpbml0aW9uICIiIgorICAgIHNwYWNlcyA9ICIgIiAqIGluZGVudAorICAg IHJldHVybiBzcGFjZXMgKyAoIiwgXFxcbiIgKyBzcGFjZXMpLmpvaW4od29yZHMpICsgIiwgXFwi CisKKworZGVmIGNydW5jaF9udW1iZXJzKHN0YXRlKToKKworICAgICMgU2l6ZSBvZiBiaXRtYXBz CisgICAgc3RhdGUubnJfZW50cmllcyA9IG5yX2VudHJpZXMgPSAobWF4KHN0YXRlLm5hbWVzLmtl eXMoKSkgPj4gNSkgKyAxCisKKworZGVmIHdyaXRlX3Jlc3VsdHMoc3RhdGUpOgorICAgIHN0YXRl Lm91dHB1dC53cml0ZSgKKyIiIi8qCisgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSAlcyAt IERvIG5vdCBlZGl0IQorICogU291cmNlIGRhdGE6ICVzCisgKi8KKyNpZm5kZWYgX19YRU5fWDg2 X19GRUFUVVJFU0VUX0RBVEFfXworI2RlZmluZSBfX1hFTl9YODZfX0ZFQVRVUkVTRVRfREFUQV9f CisiIiIgJSAoc3lzLmFyZ3ZbMF0sIHN0YXRlLnNvdXJjZSkpCisKKyAgICBzdGF0ZS5vdXRwdXQu d3JpdGUoCisiIiIKKyNkZWZpbmUgRkVBVFVSRVNFVF9OUl9FTlRSSUVTICVzVQorIiIiICUgKHN0 YXRlLm5yX2VudHJpZXMsCisgICAgICAgKSkKKworICAgIHN0YXRlLm91dHB1dC53cml0ZSgKKyIi IgorI2VuZGlmIC8qIF9fWEVOX1g4Nl9fRkVBVFVSRVNFVF9EQVRBX18gKi8KKyIiIikKKworCitk ZWYgb3Blbl9maWxlX29yX2ZkKHZhbCwgbW9kZSwgYnVmZmVyaW5nKToKKyAgICAiIiIKKyAgICBJ ZiAndmFsJyBsb29rcyBsaWtlIGEgZGVjaW1hbCBpbnRlZ2VyLCBvcGVuIGl0IGFzIGFuIGZkLiAg SWYgbm90LCB0cnkgdG8KKyAgICBvcGVuIGl0IGFzIGEgcmVndWxhciBmaWxlLgorICAgICIiIgor CisgICAgZmQgPSAtMQorICAgIHRyeToKKyAgICAgICAgIyBEb2VzIGl0IGxvb2sgbGlrZSBhbiBp bnRlZ2VyPworICAgICAgICB0cnk6CisgICAgICAgICAgICBmZCA9IGludCh2YWwsIDEwKQorICAg ICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBm ZCA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHN5cy5zdGRpbgorICAgICAgICBlbGlmIGZkID09 IDE6CisgICAgICAgICAgICByZXR1cm4gc3lzLnN0ZG91dAorICAgICAgICBlbGlmIGZkID09IDI6 CisgICAgICAgICAgICByZXR1cm4gc3lzLnN0ZGVycgorCisgICAgICAgICMgVHJ5IHRvIG9wZW4g aXQuLi4KKyAgICAgICAgaWYgZmQgIT0gLTE6CisgICAgICAgICAgICByZXR1cm4gb3MuZmRvcGVu KGZkLCBtb2RlLCBidWZmZXJpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4g b3Blbih2YWwsIG1vZGUsIGJ1ZmZlcmluZykKKworICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yLCBl OgorICAgICAgICBpZiBmZCAhPSAtMToKKyAgICAgICAgICAgIHJhaXNlIEZhaWwoIlVuYWJsZSB0 byBvcGVuIGZkICVkOiAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgKGZkLCBlLl9f Y2xhc3NfXy5fX25hbWVfXywgZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBG YWlsKCJVbmFibGUgdG8gb3BlbiBmaWxlICclcyc6ICVzOiAlcyIgJQorICAgICAgICAgICAgICAg ICAgICAgICAodmFsLCBlLl9fY2xhc3NfXy5fX25hbWVfXywgZSkpCisKKyAgICByYWlzZSBTeXN0 ZW1FeGl0KDIpCisKK2RlZiBtYWluKCk6CisgICAgZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9u UGFyc2VyCisKKyAgICAjIENoYW5nZSBzdGRvdXQgdG8gYmUgbGluZS1idWZmZXJlZC4KKyAgICBz eXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMSkKKworICAg IHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZSA9ICIlcHJvZyBbb3B0aW9uc10gLWkgSU5QVVQg LW8gT1VUUFVUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPQorICAg ICAgICAgICAgICAgICAgICAgICAgICAiUHJvY2VzcyBmZWF0dXJlc2V0IGluZm9ybWF0aW9uIikK KworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItaSIsICItLWluIiwgZGVzdCA9ICJmaW4iLCBtZXRh dmFyID0gIjxGRCBvciBGSUxFPiIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9ICIw IiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gIkZlYXR1cmVzZXQgZGVmaW5pdGlvbnMi KQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dCIsIGRlc3QgPSAiZm91dCIsIG1l dGF2YXIgPSAiPEZEIG9yIEZJTEU+IiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0g IjEiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAiRmVhdHVyZXNldCBjYWxjdWxhdGVk IGluZm9ybWF0aW9uIikKKworICAgIG9wdHMsIF8gPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAg ICBpZiBvcHRzLmZpbiBpcyBOb25lIG9yIG9wdHMuZm91dCBpcyBOb25lOgorICAgICAgICBwYXJz ZXIucHJpbnRfaGVscChzeXMuc3RkZXJyKQorICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDEpCisK KyAgICBzdGF0ZSA9IFN0YXRlKG9wdHMuZmluLCBvcHRzLmZvdXQpCisKKyAgICBwYXJzZV9kZWZp bml0aW9ucyhzdGF0ZSkKKyAgICBjcnVuY2hfbnVtYmVycyhzdGF0ZSkKKyAgICB3cml0ZV9yZXN1 bHRzKHN0YXRlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAg ICAgICBzeXMuZXhpdChtYWluKCkpCisgICAgZXhjZXB0IEZhaWwsIGU6CisgICAgICAgIHByaW50 ID4+c3lzLnN0ZGVyciwgIiVzOiIgJSAoc3lzLmFyZ3ZbMF0sKSwgZQorICAgICAgICBzeXMuZXhp dCgxKQorICAgIGV4Y2VwdCBTeXN0ZW1FeGl0LCBlOgorICAgICAgICBzeXMuZXhpdChlLmNvZGUp CisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBzeXMuZXhpdCgyKQotLSAK Mi4xLjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpY ZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0 cy54ZW4ub3JnL3hlbi1kZXZlbAo=