From 173d847bb91f3deeb7ce551e5d7b1a3d46a72c7e Mon Sep 17 00:00:00 2001 From: Ari Archer Date: Thu, 29 Sep 2022 08:28:30 +0300 Subject: [PATCH] update @ Thu 29 Sep 08:28:30 EEST 2022 Signed-off-by: Ari Archer --- blog.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog.json b/blog.json index 0e9048b..a425034 100644 --- a/blog.json +++ b/blog.json @@ -461,7 +461,7 @@ }, "how-to-generate-a-report-for-songs-you-listen-to-using-mpv": { "title": "SG93IHRvIGdlbmVyYXRlIGEgcmVwb3J0IGZvciBzb25ncyB5b3UgbGlzdGVuIHRvIHVzaW5nIE1QVg==", - "content": "QSBkYXkgYWdvIEkgc3RhcnRlZCBjb2xsZWN0aW5nIGRhdGEgYWJvdXQgd2hhdCBJIGxpc3RlbiB0bwpvbiBteSBwbGF5bGlzdCwgYW5kIGN1cnJlbnRseSBpdCdzIHdvcmtpbmcgb3V0IGFtYXppbmcsIGl0J3MgdmVyeQpmdW4sIHNvIEkgdGhvdWdodCB0byBteXNlbGYsICd3aHkgbm90IHNoYXJlIGl0Jywgc28gaGVyZQp5b3UgZ28KCiMjIDEuIFNldCB1cCBgbXB2cGAgYWxpYXMKCmBtcHZwYCBhbGlhcyBpcyB3aGF0IHlvdSB3aWxsIGhhdmUgdG8gdXNlIHRvIGNvbGxlY3QgZGF0YSBhYm91dAp5b3VyIHBsYXlsaXN0LCB5b3UgY2FuIHNldCB1cCBhbm90aGVyIG5hbWUgYnV0IGNvZGUgc2hvdWxkIGJlCmFyb3VuZCB0aGUgc2FtZQoKQmFzaWNhbGx5LCBhZGQgdGhpcyB0byB5b3VyIGB+Ly5iYXNocmNgOgoKICAgIG1wdnBfY29sbGVjdCgpIHsKICAgICAgICBbICEgLWYgIiRIT01FLy5tcHZwIiBdICYmIDogPiIkSE9NRS8ubXB2cCIKCiAgICAgICAgc2xlZXAgMgoKICAgICAgICB3aGlsZSB0cnVlOyBkbwogICAgICAgICAgICBzbGVlcCA1CgogICAgICAgICAgICB4PSIkKGVjaG8gJ3sgImNvbW1hbmQiOiBbImdldF9wcm9wZXJ0eSIsICJwYXRoIl0gfScgfCBzb2NhdCAtIC90bXAvbXB2aXBjKSIKCiAgICAgICAgICAgIFsgISAiJHgiIF0gJiYgYnJlYWsKCiAgICAgICAgICAgIGlmIFsgIiR4IiBdICYmIFsgIiR4IiAhPSAiJCh0YWlsIC1uIDEgIiRIT01FLy5tcHZwIikiIF07IHRoZW4KICAgICAgICAgICAgICAgIHNsZWVwIDQKCiAgICAgICAgICAgICAgICB5PSIkKGVjaG8gJ3sgImNvbW1hbmQiOiBbImdldF9wcm9wZXJ0eSIsICJwYXRoIl0gfScgfCBzb2NhdCAtIC90bXAvbXB2aXBjKSIKICAgICAgICAgICAgICAgIFsgIiR4IiA9ICIkeSIgXSAmJiBlY2hvICIkeCIgPj4iJEhPTUUvLm1wdnAiCiAgICAgICAgICAgIGZpCiAgICAgICAgZG9uZQogICAgfQoKICAgIGFsaWFzIG1wdnA9J21wdnBfY29sbGVjdCAmIG1wdiAtLXNodWZmbGUgLS1sb29wLXBsYXlsaXN0IC0taW5wdXQtaXBjLXNlcnZlcj0vdG1wL21wdmlwYycKCldoZW4geW91IHVzZSB0aGUgYG1wdnBgIGFsaWFzIGl0J2xsIHN0YXJ0IHRoZSBkYXRhIGNvbGxlY3RvciBpbiB0aGUgYmFja2dyb3VuZCwKdGhlIElQQyB3aWxsIGJlIGFjY2Vzc2libGUgdGhvdWdoIGAvdG1wL21wdmlwY2AsIHRoaXMgd2lsbCBjb2xsZWN0IGFsbApkYXRhIHRvIGB+Ly5tcHZwYCwgbGlzdGVuIHRvIHNvbWUgbXVzaWMgYW5kIGlnbm9yZSBpdCBmb3IgYSBiaXQsIGFsc28sIGtlZXAgaW4gbWluZCwKdGhpcyBjb2RlIGlzIGJhZCBiZWNhdXNlIEknbSB0b28gbGF6eSB0byBpbXByb3ZlIGl0IGFuZCBJIG1hZGUgaXQgZmFzdCwgYW55d2F5LCB5b3UKbmVlZCB0byBpbnN0YWxsIGBzb2NhdGAgZm9yIHRoaXMgdG8gd29yawoKIyMgMi4gR2VuZXJhdGUgZGF0YSByZXBvcnQKCldlbGwgYXQgdGhpcyBwb2ludCB5b3UgY2FuIGRvIGFueXRoaW5nIHlvdSB3YW50IHdpdGggeW91ciBkYXRhLCBhbHRob3VnaApJIG1hZGUgYSBzaW1wbGUgZ2VuZXJhdG9yIGZvciBpdAoKU28gSSBtYWRlIHVzZSBvZiB0aGUgZGF0YSBJIGhhdmUgYW5kIG15IHBsYXlsaXN0IHN0cnVjdHVyZSwgaGVyZSdzIGFuIGV4YW1wbGUgZW50cnk6CgogICAgeyJkYXRhIjoicGxheWxpc3QvZ2lybCBpbiByZWQgLSBpJ2xsIGRpZSBhbnl3YXkuIFs4TU1hMzVCM0hUOF0ubXAzIiwicmVxdWVzdF9pZCI6MCwiZXJyb3IiOiJzdWNjZXNzIn0KClRoZXJlJ3MgYW4gSUQgdGhlcmUgc28gSSBhZGQgWW91VHViZSBhZGRpbmcgdG8gdGhlIGdlbmVyYXRvciBieQpkZWZhdWx0LCB5b3VycyBtaWdodCBub3QgaGF2ZSBpdCwgYnV0IEkgbWVhbiwgeW91IGNhbiBzdGlsbCBwcmV0dHkgbXVjaAp1c2UgaXQsIGp1c3QgbGlua3Mgd29uJ3Qgd29yawoKIyMjIDIuMSBUaGUgc2NyaXB0CgpJIG1hZGUgYSBweXRob24gc2NyaXB0IGFzIG15IGdlbmVyYXRvcjoKCiAgICAjIS91c3IvYmluL2VudiBweXRob24zCiAgICAjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQogICAgIiIiTVBWIHBsYXlsaXN0IHNvbmcgcmVwb3J0ZXIiIiIKCiAgICBpbXBvcnQgb3MKICAgIGltcG9ydCBzeXMKICAgIGZyb20gaHRtbCBpbXBvcnQgZXNjYXBlIGFzIGh0bWxfZXNjYXBlCiAgICBmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBMaXN0LCBUdXBsZQogICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgZmlsdGVyd2FybmluZ3MgYXMgZmlsdGVyX3dhcm5pbmdzCgogICAgaW1wb3J0IHVqc29uICAjIHR5cGU6IGlnbm9yZQogICAgZnJvbSBjc3NfaHRtbF9qc19taW5pZnkgaW1wb3J0IGh0bWxfbWluaWZ5ICAjIHR5cGU6IGlnbm9yZQoKICAgIFNPTkdfVE9fQVJUSVNUOiBEaWN0W3N0ciwgc3RyXSA9IHsKICAgICAgICAiMTk4NSI6ICJibyBidXJuaGFtIiwKICAgICAgICAiYXBvY2FseXBzZSI6ICJjaWdhcmV0dGVzIGFmdGVyIFNleCIsCiAgICAgICAgImFzdHJvbm9teSI6ICJjb25hbiBncmF5IiwKICAgICAgICAiYnJvb2tseW4gYmFieSI6ICJsYW5hIGRlbCByZXkiLAogICAgICAgICJjb21lIGhvbWUgdG8gbWUiOiAiY3Jhd2xlcnMiLAogICAgICAgICJkYWRkeSBpc3N1ZXMiOiAidGhlIG5laWdoYm91cmhvb2QiLAogICAgICAgICJmZWVsIGJldHRlciI6ICJwZW5lbG9wZSBzY290dCIsCiAgICAgICAgImhvcm55bG92ZXNpY2ttZXNzIjogImdpcmwgaW4gcmVkIiwKICAgICAgICAiaSB3YW5uYSBiZSB5b3VyIGdpcmxmcmllbmQiOiAiZ2lybCBpbiByZWQiLAogICAgICAgICJrLiI6ICJjaWdhcmV0dGVzIGFmdGVyIFNleCIsCiAgICAgICAgImxvb2thbGlrZSI6ICJjb25hbiBncmF5IiwKICAgICAgICAibG90dGEgdHJ1ZSBjcmltZSI6ICJwZW5lbG9wZSBzY290dCIsCiAgICAgICAgIm15IG1hbidzIGEgaGV4YWdvbiAobXVzaWMgdmlkZW8pIjogIm3DvG5lY2F0IiwKICAgICAgICAicsOkdCI6ICJwZW5lbG9wZSBzY290dCIsCiAgICAgICAgInNhcHBobyI6ICJidXNoaWVzIiwKICAgICAgICAic2VyaWFsIGtpbGxlciAtIGxhbmEgZGVsIHJleSBseXJpY3MiOiAibGFuYSBkZWwgcmV5IiwKICAgICAgICAic3VnYXIsIHdlJ3JlIGdvaW4gZG93biBidXQgaXQncyBjcmVlcGllciI6ICJrYWRlIiwKICAgICAgICAic3dlYXRlciB3ZWF0aGVyIjogInRoZSBuZWlnaGJvdXJob29kIiwKICAgICAgICAidGFsaWEg4qe44qe4IGdpcmwgaW4gcmVkIGNvdmVyIjogImdpcmwgaW4gcmVkIiwKICAgICAgICAidHYiOiAiYnVzaGllcyIsCiAgICAgICAgInVuaW9uaXplIC0gbcO8bmVjYXQgKG11c2ljIHZpZGVvKSI6ICJtw7xuZWNhdCIsCiAgICAgICAgIndhdGNoIHlvdSBzbGVlcC4iOiAiZ2lybCBpbiByZWQiLAogICAgICAgICJ5b3UgdXNlZCBtZSBmb3IgbXkgbG92ZV9naXJsIGluIHJlZCI6ICJnaXJsIGluIHJlZCIsCiAgICB9CgoKICAgIGNsYXNzIFVua25vd25NdXNpY0FydGlzdEVycm9yKEV4Y2VwdGlvbik6CiAgICAgICAgIiIiUmFpc2VkIHdoZW4gdGhlcmUgaXMgYW4gdW5rbm93biBtdXNpYyBhcnRpc3QiIiIKCgogICAgZGVmIHNvcnRfZGljdChkOiBEaWN0W3N0ciwgaW50XSkgLT4gRGljdFtzdHIsIGludF06CiAgICAgICAgcmV0dXJuIHtrOiB2IGZvciBrLCB2IGluIHNvcnRlZChkLml0ZW1zKCksIGtleT1sYW1iZGEgaXRlbTogaXRlbVsxXSwgcmV2ZXJzZT1UcnVlKX0KCgogICAgZGVmIGZzcGxpdF9kZWxzKHM6IHN0ciwgKmRlbHM6IHN0cikgLT4gc3RyOgogICAgICAgIGZvciBkZWxpbSBpbiBkZWxzOgogICAgICAgICAgICBzID0gcy5zcGxpdChkZWxpbSwgbWF4c3BsaXQ9MSlbMF0KCiAgICAgICAgcmV0dXJuIHMuc3RyaXAoKQoKCiAgICBkZWYgZ2V0X2FydGlzdF9mcm9tX3Nvbmcoc29uZzogc3RyKSAtPiBzdHI6CiAgICAgICAgc29uZyA9IHNvbmcubG93ZXIoKQogICAgICAgIGRlbGltczogVHVwbGVbc3RyLCAuLi5dID0gKAogICAgICAgICAgICAi4oCTIiwKICAgICAgICAgICAgIi0iLAogICAgICAgICAgICAiLCIsCiAgICAgICAgICAgICJmZWF0LiIsCiAgICAgICAgICAgICIuIiwKICAgICAgICAgICAgIiYiLAogICAgICAgICkKCiAgICAgICAgaWYgc29uZyBub3QgaW4gU09OR19UT19BUlRJU1QgYW5kIGFueShkIGluIHNvbmcgZm9yIGQgaW4gZGVsaW1zKToKICAgICAgICAgICAgcmV0dXJuIGZzcGxpdF9kZWxzKAogICAgICAgICAgICAgICAgc29uZywKICAgICAgICAgICAgICAgICpkZWxpbXMsCiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBzb25nIGluIFNPTkdfVE9fQVJUSVNUOgogICAgICAgICAgICAgICAgcmV0dXJuIFNPTkdfVE9fQVJUSVNUW3NvbmddLmxvd2VyKCkKCiAgICAgICAgICAgIHJhaXNlIFVua25vd25NdXNpY0FydGlzdEVycm9yKGYiTm8gaGFuZGxlZCBhcnRpc3QgZm9yIHNvbmc6IHtzb25nIXJ9IikKCgogICAgZGVmIGdldF9wbGF5ZWQoZGF0YTogTGlzdFtUdXBsZVtzdHIsIHN0cl1dKSAtPiBEaWN0W3N0ciwgaW50XToKICAgICAgICBwbGF5ZWQ6IERpY3Rbc3RyLCBpbnRdID0ge30KCiAgICAgICAgZm9yIHNvbmcsIF8gaW4gZGF0YToKICAgICAgICAgICAgaWYgc29uZyBub3QgaW4gcGxheWVkOgogICAgICAgICAgICAgICAgcGxheWVkW3NvbmddID0gMAoKICAgICAgICAgICAgcGxheWVkW3NvbmddICs9IDEKCiAgICAgICAgcmV0dXJuIHNvcnRfZGljdChwbGF5ZWQpCgoKICAgIGRlZiBnZXRfeXRfdXJsc19mcm9tX2RhdGEoZGF0YTogTGlzdFtUdXBsZVtzdHIsIHN0cl1dKSAtPiBEaWN0W3N0ciwgc3RyXToKICAgICAgICByZXR1cm4ge3Nvbmc6IGYiaHR0cHM6Ly9hcmktd2ViLnh5ei95dC93YXRjaD92PXt5dF9pZH0iIGZvciBzb25nLCB5dF9pZCBpbiBkYXRhfQoKCiAgICBkZWYgZ2V0X2FydGlzdHNfZnJvbV9wbGF5ZWQocGxheWVkOiBEaWN0W3N0ciwgaW50XSkgLT4gRGljdFtzdHIsIExpc3RbaW50XV06CiAgICAgICAgYXJ0aXN0czogRGljdFtzdHIsIExpc3RbaW50XV0gPSB7fQoKICAgICAgICBmb3Igc29uZyBpbiBwbGF5ZWQ6CiAgICAgICAgICAgIGFydGlzdCA9IGdldF9hcnRpc3RfZnJvbV9zb25nKHNvbmcpCgogICAgICAgICAgICBpZiBhcnRpc3Qgbm90IGluIGFydGlzdHM6CiAgICAgICAgICAgICAgICBhcnRpc3RzW2FydGlzdF0gPSBbMCwgcGxheWVkW3NvbmddXQoKICAgICAgICAgICAgYXJ0aXN0c1thcnRpc3RdWzBdICs9IDEKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgazogdgogICAgICAgICAgICBmb3IgaywgdiBpbiBzb3J0ZWQoYXJ0aXN0cy5pdGVtcygpLCBrZXk9bGFtYmRhIGl0ZW06IHN1bShpdGVtWzFdKSwgcmV2ZXJzZT1UcnVlKQogICAgICAgIH0KCgogICAgZGVmIHBhcnNlX3Nvbmcoc29uZzogc3RyKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICAgICAgYmFzZW5hbWU6IHN0ciA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShzb25nKSlbMF0KICAgICAgICByZXR1cm4gYmFzZW5hbWVbOi0xNF0sIGJhc2VuYW1lWy0xMjotMV0KCgogICAgZGVmIHBhcnNlX2RhdGEoZGF0YTogTGlzdFtUdXBsZVtzdHIsIHN0cl1dKSAtPiBEaWN0W3N0ciwgQW55XToKICAgICAgICBwbGF5ZWQ6IERpY3Rbc3RyLCBpbnRdID0gZ2V0X3BsYXllZChkYXRhKQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAidG90YWwiOiBsZW4oZGF0YSksCiAgICAgICAgICAgICJwbGF5ZWQiOiBwbGF5ZWQsCiAgICAgICAgICAgICJhcnRpc3RzIjogZ2V0X2FydGlzdHNfZnJvbV9wbGF5ZWQocGxheWVkKSwKICAgICAgICAgICAgInl0LXVybHMiOiBnZXRfeXRfdXJsc19mcm9tX2RhdGEoZGF0YSksCiAgICAgICAgfQoKCiAgICBkZWYgZ2VuZXJhdGVfaHRtbF9yZXBvcnQoZGF0YTogRGljdFtzdHIsIEFueV0pIC0+IHN0cjoKICAgICAgICBzdHlsZXM6IHN0ciA9ICIiIgogICAgQGltcG9ydCB1cmwoImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vaGFjay1mb250QDMvYnVpbGQvd2ViL2hhY2subWluLmNzcyIpOwoKICAgIDpyb290IHsKICAgICAgICBjb2xvci1zY2hlbWU6IGRhcms7CgogICAgICAgIC0tY2xyLWJnOiAjMjYyMjIwOwogICAgICAgIC0tY2xyLWZnOiAjZjlmNmU4OwoKICAgICAgICAtLWNsci1jb2RlLWJnOiAjMWYxYjFhOwogICAgICAgIC0tY2xyLWNvZGUtZmc6ICNmMGYzZTY7CiAgICAgICAgLS1jbHItY29kZS1iZy1kYXJrOiAjMTgxNDE0OwoKICAgICAgICAtLXNjcm9sbGJhci1oZWlnaHQ6IDZweDsgLyogVE9ETzogRmlyZWZveCAqLwogICAgfQoKICAgICosCiAgICAqOjpiZWZvcmUsCiAgICAqOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2xyLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tY2xyLWZnKTsKICAgICAgICBmb250LWZhbWlseTogSGFjaywgaGFjaywgbW9ub3NwYWNlOwoKICAgICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7CiAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOwoKICAgICAgICBzY3JvbGxiYXItY29sb3I6IHZhcigtLWNsci1jb2RlLWJnLWRhcmspIHRyYW5zcGFyZW50OwoKICAgICAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwoKICAgICAgICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDsKICAgIH0KCiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyLAogICAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1zY3JvbGxiYXItaGVpZ2h0KTsKICAgIH0KCiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jbHItY29kZS1iZy1kYXJrKTsKICAgIH0KCiAgICBodG1sOjotd2Via2l0LXNjcm9sbGJhciwKICAgIGJvZHk6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgYm9keSB7CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDJyZW07CiAgICAgICAgbWF4LXdpZHRoOiAxMTAwcHg7CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplU3BlZWQ7CiAgICB9CgogICAgaDEgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDFlbTsKICAgICAgICBmb250LXNpemU6IDJlbTsKICAgIH0KCiAgICBsaSB7CiAgICAgICAgbWFyZ2luOiAwLjVlbTsKICAgIH0KCiAgICBhIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgdGV4dC1zaGFkb3c6IDBweCAwcHggNHB4IHdoaXRlOwogICAgfQoKICAgIHByZSwKICAgIHByZSAqIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jbHItY29kZS1iZyk7CiAgICB9CgogICAgcHJlLAogICAgcHJlICosCiAgICBjb2RlIHsKICAgICAgICBjb2xvcjogdmFyKC0tY2xyLWNvZGUtZmcpOwogICAgfQoKICAgIHByZSwKICAgIHByZSBjb2RlIHsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvICFpbXBvcnRhbnQ7CgogICAgICAgIHNjcm9sbGJhci13aWR0aDogaW5pdGlhbDsKICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IGluaXRpYWw7CiAgICB9CgogICAgcHJlIHsKICAgICAgICBwYWRkaW5nOiAxZW07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgfQoKICAgIGNvZGU6bm90KHByZSBjb2RlKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2xyLWNvZGUtYmcpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBwYWRkaW5nOiAwLjJlbTsKICAgIH0KCiAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICAgICAgICosCiAgICAgICAgKjo6YmVmb3JlLAogICAgICAgICo6OmFmdGVyIHsKICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwogICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwoKICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDEgIWltcG9ydGFudDsKCiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4wMW1zICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIC1vLXRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwogICAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDsKCiAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogYXV0byAhaW1wb3J0YW50OwogICAgICAgIH0KICAgIH0KCiAgICBAbWVkaWEgKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIHsKICAgICAgICA6cm9vdCB7CiAgICAgICAgICAgIC0tY2xyLWJnOiBibGFjazsKICAgICAgICAgICAgLS1jbHItZmc6IHdoaXRlOwoKICAgICAgICAgICAgLS1jbHItY29kZS1iZzogIzE4MTgxODsKICAgICAgICAgICAgLS1jbHItY29kZS1mZzogd2hpdGVzbW9rZTsKCiAgICAgICAgICAgIC0tc2Nyb2xsYmFyLWhlaWdodDogMTJweDsgLyogVE9ETzogRmlyZWZveCAqLwogICAgICAgIH0KCiAgICAgICAgaHRtbDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgICAgICBkaXNwbGF5OiBpbml0aWFsICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICAqLAogICAgICAgICo6OmJlZm9yZSwKICAgICAgICAqOjphZnRlciB7CiAgICAgICAgICAgIHNjcm9sbGJhci13aWR0aDogaW5pdGlhbCAhaW1wb3J0YW50OwogICAgICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IGluaXRpYWwgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIGEgewogICAgICAgICAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwoKICAgICAgICAgICAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQgIWltcG9ydGFudDsKICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgfQogICAgIiIiCgogICAgICAgIHNvbmdzID0gYXJ0aXN0cyA9ICIiCgogICAgICAgIGZvciBzb25nLCB0aW1lcyBpbiBkYXRhWyJwbGF5ZWQiXS5pdGVtcygpOgogICAgICAgICAgICBzb25ncyArPSBmIjxsaT48YSBocmVmPVwie2RhdGFbJ3l0LXVybHMnXVtzb25nXX1cIj57aHRtbF9lc2NhcGUoc29uZyl9PC9hPiAocGxheWVkIDxjb2RlPnt0aW1lc308L2NvZGU+IHRpbWV7J3MnIGlmIHRpbWVzID4gMSBlbHNlICcnfSk8L2xpPiIKCiAgICAgICAgZm9yIGFydGlzdCwgc29uZ24gaW4gZGF0YVsiYXJ0aXN0cyJdLml0ZW1zKCk6CiAgICAgICAgICAgIHJwczogc3RyID0gZiIgKDxjb2RlPntzb25nblsxXX08L2NvZGU+IHJlcGVhdHMpIgogICAgICAgICAgICBhcnRpc3RzICs9IGYiPGxpPntodG1sX2VzY2FwZShhcnRpc3QpfSAoPGNvZGU+e3NvbmduWzBdfTwvY29kZT4gc29uZ3sncycgaWYgc29uZ25bMF0gPiAxIGVsc2UgJyd9IFwKICAgIHBsYXllZHtycHMgaWYgc29uZ25bMV0gPiAxIGVsc2UgJyd9KTwvbGk+IgoKICAgICAgICByZXR1cm4gaHRtbF9taW5pZnkoCiAgICAgICAgICAgIGYiIiI8IURPQ1RZUEUgaHRtbD4KICAgIDxodG1sIGxhbmc9ImVuIj4KICAgICAgICA8aGVhZD4KICAgICAgICAgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgogICAgICAgICAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICAgICAgICAgIDx0aXRsZT5IVE1MIG1wdiBzb25nIHJlcG9ydDwvdGl0bGU+CgogICAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iV2hhdCBkbyB5b3UgbGlzdGVuIHRvIiAvPgogICAgICAgICAgICA8bWV0YQogICAgICAgICAgICAgICAgbmFtZT0ia2V5d29yZHMiCiAgICAgICAgICAgICAgICBjb250ZW50PSJzb3J0LCByZXBvcnQsIG11c2ljLCBtdXNpYyByZXBvcnQsIGxpc3Rlbiwgc29uZyIKICAgICAgICAgICAgLz4KICAgICAgICAgICAgPG1ldGEKICAgICAgICAgICAgICAgIG5hbWU9InJvYm90cyIKICAgICAgICAgICAgICAgIGNvbnRlbnQ9ImZvbGxvdywgaW5kZXgsIG1heC1zbmlwcGV0Oi0xLCBtYXgtdmlkZW8tcHJldmlldzotMSwgbWF4LWltYWdlLXByZXZpZXc6bGFyZ2UiCiAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIiAvPgogICAgICAgICAgICA8bWV0YSBuYW1lPSJjb2xvci1zY2hlbWUiIGNvbnRlbnQ9ImRhcmsiIC8+CgogICAgICAgICAgICA8c3R5bGU+e3N0eWxlc308L3N0eWxlPgogICAgICAgIDwvaGVhZD4KCiAgICAgICAgPGJvZHk+CiAgICAgICAgICAgIDxtYWluPgogICAgICAgICAgICAgICAgPGgxPldoYXQgYXJlIHlvdSBsaXN0ZW5pbmcgdG8\/PC9oMT4KCiAgICAgICAgICAgICAgICA8aHIgLz4KCiAgICAgICAgICAgICAgICA8aDI+U3RhdHM8L2gyPgoKICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+U29uZ3MgcGxheWVkOiA8Y29kZT57ZGF0YVsndG90YWwnXX08L2NvZGU+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+VW5pcXVlIHNvbmdzIHBsYXllZDogPGNvZGU+e2xlbihkYXRhWydwbGF5ZWQnXSl9PC9jb2RlPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPkFydGlzdHM6IDxjb2RlPntsZW4oZGF0YVsnYXJ0aXN0cyddKX08L2NvZGU+PC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICAgICAgPGgyPlRvcCBzdGF0czwvaDI+CgogICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgIDxsaT5Ub3AgYXJ0aXN0OiA8Y29kZT57dHVwbGUoZGF0YVsnYXJ0aXN0cyddLmtleXMoKSlbMF19PC9jb2RlPiB3aXRoIDxjb2RlPnt0dXBsZShkYXRhWydhcnRpc3RzJ10udmFsdWVzKCkpWzBdWzBdfTwvY29kZT4gc29uZ3MgcGxheWVkIGFuZCBcCiAgICA8Y29kZT57dHVwbGUoZGF0YVsnYXJ0aXN0cyddLnZhbHVlcygpKVswXVsxXX08L2NvZGU+IHJlcGVhdHM8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT5Ub3Agc29uZzogPGNvZGU+e3R1cGxlKGRhdGFbJ3BsYXllZCddLmtleXMoKSlbMF19PC9jb2RlPiBieSA8Y29kZT57Z2V0X2FydGlzdF9mcm9tX3NvbmcodHVwbGUoZGF0YVsncGxheWVkJ10ua2V5cygpKVswXSl9PC9jb2RlPiBcCiAgICB3aXRoIDxjb2RlPnt0dXBsZShkYXRhWydwbGF5ZWQnXS52YWx1ZXMoKSlbMF19PC9jb2RlPiBwbGF5czwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgICAgIDxoMj5Tb25nczwvaDE+CgogICAgICAgICAgICAgICAgPGRldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+RXhwYW5kIGZvciB0aGUgbGlzdCBvZiBzb25nczwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICA8dWw+e3NvbmdzfTwvdWw+CiAgICAgICAgICAgICAgICA8L2RldGFpbHM+CgogICAgICAgICAgICAgICAgPGgyPkFydGlzdHM8L2gyPgoKICAgICAgICAgICAgICAgIDxkZXRhaWxzPgogICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PkV4cGFuZCBmb3IgdGhlIGxpc3Qgb2YgYXJ0aXN0czwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICA8dWw+e2FydGlzdHN9PC91bD4KICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KCiAgICAgICAgICAgICAgICA8aDI+UmF3IEpTT04gZGF0YTwvaDI+CgogICAgICAgICAgICAgICAgPGRldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+RXhwYW5kIGZvciB0aGUgcmF3IGRhdGE8L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgPHByZT48Y29kZT57dWpzb24uZHVtcHMoZGF0YSwgaW5kZW50PTQpfTwvY29kZT48L3ByZT4KICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAgICAgICAgPC9tYWluPgogICAgICAgIDwvYm9keT4KICAgIDwvaHRtbD4iIiIKICAgICAgICApCgoKICAgIGRlZiBtYWluKCkgLT4gaW50OgogICAgICAgICIiIkVudHJ5L21haW4gZnVuY3Rpb24iIiIKCiAgICAgICAgZGF0YTogTGlzdFtUdXBsZVtzdHIsIHN0cl1dID0gW10KCiAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguZXhwYW5kdXNlcigifi8ubXB2cCIpLCAiciIpIGFzIG1wdl9kYXRhOgogICAgICAgICAgICBmb3IgbGluZSBpbiBtcHZfZGF0YToKICAgICAgICAgICAgICAgIGlmICciZGF0YSInIG5vdCBpbiBsaW5lOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQocGFyc2Vfc29uZyh1anNvbi5sb2FkcyhsaW5lKVsiZGF0YSJdKSkKCiAgICAgICAgd2l0aCBvcGVuKCJpbmRleC5odG1sIiwgInciKSBhcyBoOgogICAgICAgICAgICBoLndyaXRlKGdlbmVyYXRlX2h0bWxfcmVwb3J0KHBhcnNlX2RhdGEoZGF0YSkpKQoKICAgICAgICByZXR1cm4gMAoKCiAgICBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgICAgIGFzc2VydCBtYWluLl9fYW5ub3RhdGlvbnNfXy5nZXQoInJldHVybiIpIGlzIGludCwgIm1haW4oKSBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIiCgogICAgICAgIGZpbHRlcl93YXJuaW5ncygiZXJyb3IiLCBjYXRlZ29yeT1XYXJuaW5nKQogICAgICAgIHN5cy5leGl0KG1haW4oKSkKClRoaXMgaXMgYSBwcmV0dHkgZWFzeSB0aGluZywgdmVyeSBzdHVwaWQgYW5kIG5vdCBmb29sLXByb29mIGJ1dCBlaCwKdGhpcyBnZW5lcmF0b3Igc2hvdWxkIHdvcmsgb3V0IG9mIHRoZSBib3ggd2l0aCB0aGUgc29uZyBuYW1lIGZvcm1hdApiZWluZyBgYXJ0aXN0IG5hbWUgLSBzb25nYCwgaWYgaXQncyBub3QgbWFrZSBzdXJlIHRvIGFkZCBhIGxvd2VyY2FzZQplbnRyeSB0byBgU09OR19UT19BUlRJU1RgLCBsaWtlIGlmIHlvdXIgc29uZyB3YXMgbmFtZWQgbGlrZSBgbmFNZSAtIEFydGlzdGAKeW91IHdpbGwgaGF2ZSB0byBhZGQgdGhpcyBlbnRyeToKCiAgICAibmFtZSAtIGFydGlzdCI6ICJhcnRpc3QiLAoKVGhlc2Ugc2V0dGluZ3MgdGhhdCB5b3Ugc2VlIGluIG15IHNjcmlwdCBhcmUgZm9yIG15IHBsYXlsaXN0CgojIyAyLjIgRGVwZW5kZW5jaWVzCgpIZXJlJ3MgdGhlIHB5dGhvbiBkZXBlbmRlbmNpZXMgeW91IG5lZWQ6CgogICAgY3NzLWh0bWwtanMtbWluaWZ5CiAgICB1anNvbgoKWW91IG5lZWQgdG8gaW5zdGFsbCB0aGVtIHVzaW5nCgogICAgcHl0aG9uMyAtbSBwaXAgaW5zdGFsbCAtLXVzZXIgY3NzLWh0bWwtanMtbWluaWZ5IHVqc29uCgojIyAyLjMgVGhlIGRhdGEgcmVwb3J0CgpPbmNlIHlvdSBoYXZlIGVub3VnaCBkYXRhIHRvIG1ha2UgYSByZXBvcnQgZnJvbSwgcnVuIHRoZSBzY3JpcHQsCmp1c3QKCiAgICBweXRob24zIG1haW4ucHkKCk9yIHdoYXRldmVyLCBpdCdsbCBnZW5lcmF0ZSBgaW5kZXguaHRtbGAgZmlsZSBhbmQgaXQnbGwgaW5jbHVkZSBhbGwgb2YKeW91ciByZXBvcnQgZGF0YSwgeW91IGNhbiBhbHNvIHN0eWxlIGl0IHVzaW5nIHRoZSBgc3R5bGVzYCB2YXJpYWJsZQoKIyMgMy4gRmluaXNoaW5nCgpUaGF0J3MgYWxsLCBlbmpveSB5b3VyIHN0YXRpc3RpY3MsIGFuZCBhcyBvZiBub3cgSSBzaGFsbCBnbyBjb2xsZWN0IG1vcmUgZGF0YSwKSSBhbHJlYWR5IGhhdmUgMThLQiBvZiBpdCEKClBsdXMsIEknbGwgYWRtaXQgaXQsIG1vc3Qgb2YgdGhpcyBjb2RlIGlzICoqZ2FyYmFnZSwgY29tcGxldGUgZG9nIHNoaXQqKiwKSSBqdXN0IHdhbnRlZCB0byBtYWtlIGl0IHdvcmsgYW5kIEkgZGlkLCBpdCdzIHJlYWRhYmxlIGVub3VnaApmb3IganVzdCBhIG1lc3N5IHNjcmlwdCBJJ20gbm90IGV2ZW4gcmVsZWFzaW5nIGFzIGFueXRoaW5nIGxlZ2l0Cg==", + "content": "QSBkYXkgYWdvIEkgc3RhcnRlZCBjb2xsZWN0aW5nIGRhdGEgYWJvdXQgd2hhdCBJIGxpc3RlbiB0bwpvbiBteSBwbGF5bGlzdCwgYW5kIGN1cnJlbnRseSBpdCdzIHdvcmtpbmcgb3V0IGFtYXppbmcsIGl0J3MgdmVyeQpmdW4sIHNvIEkgdGhvdWdodCB0byBteXNlbGYsICd3aHkgbm90IHNoYXJlIGl0Jywgc28gaGVyZQp5b3UgZ28KCiMjIDEuIFNldCB1cCBgbXB2cGAgYWxpYXMKCmBtcHZwYCBhbGlhcyBpcyB3aGF0IHlvdSB3aWxsIGhhdmUgdG8gdXNlIHRvIGNvbGxlY3QgZGF0YSBhYm91dAp5b3VyIHBsYXlsaXN0LCB5b3UgY2FuIHNldCB1cCBhbm90aGVyIG5hbWUgYnV0IGNvZGUgc2hvdWxkIGJlCmFyb3VuZCB0aGUgc2FtZQoKQmFzaWNhbGx5LCBhZGQgdGhpcyB0byB5b3VyIGB+Ly5iYXNocmNgOgoKICAgIG1wdnBfY29sbGVjdCgpIHsKICAgICAgICBbICEgLWYgIiRIT01FLy5tcHZwIiBdICYmIDogPiIkSE9NRS8ubXB2cCIKCiAgICAgICAgc2xlZXAgMgoKICAgICAgICB3aGlsZSB0cnVlOyBkbwogICAgICAgICAgICBzbGVlcCA1CgogICAgICAgICAgICB4PSIkKGVjaG8gJ3sgImNvbW1hbmQiOiBbImdldF9wcm9wZXJ0eSIsICJwYXRoIl0gfScgfCBzb2NhdCAtIC90bXAvbXB2aXBjKSIKCiAgICAgICAgICAgIFsgISAiJHgiIF0gJiYgYnJlYWsKCiAgICAgICAgICAgIGlmIFsgIiR4IiBdICYmIFsgIiR4IiAhPSAiJCh0YWlsIC1uIDEgIiRIT01FLy5tcHZwIikiIF07IHRoZW4KICAgICAgICAgICAgICAgIHNsZWVwIDQKCiAgICAgICAgICAgICAgICB5PSIkKGVjaG8gJ3sgImNvbW1hbmQiOiBbImdldF9wcm9wZXJ0eSIsICJwYXRoIl0gfScgfCBzb2NhdCAtIC90bXAvbXB2aXBjKSIKICAgICAgICAgICAgICAgIFsgIiR4IiA9ICIkeSIgXSAmJiBlY2hvICIkeCIgPj4iJEhPTUUvLm1wdnAiCiAgICAgICAgICAgIGZpCiAgICAgICAgZG9uZQogICAgfQoKICAgIGFsaWFzIG1wdnA9J21wdnBfY29sbGVjdCAmIG1wdiAtLXNodWZmbGUgLS1sb29wLXBsYXlsaXN0IC0taW5wdXQtaXBjLXNlcnZlcj0vdG1wL21wdmlwYycKCldoZW4geW91IHVzZSB0aGUgYG1wdnBgIGFsaWFzIGl0J2xsIHN0YXJ0IHRoZSBkYXRhIGNvbGxlY3RvciBpbiB0aGUgYmFja2dyb3VuZCwKdGhlIElQQyB3aWxsIGJlIGFjY2Vzc2libGUgdGhvdWdoIGAvdG1wL21wdmlwY2AsIHRoaXMgd2lsbCBjb2xsZWN0IGFsbApkYXRhIHRvIGB+Ly5tcHZwYCwgbGlzdGVuIHRvIHNvbWUgbXVzaWMgYW5kIGlnbm9yZSBpdCBmb3IgYSBiaXQsIGFsc28sIGtlZXAgaW4gbWluZCwKdGhpcyBjb2RlIGlzIGJhZCBiZWNhdXNlIEknbSB0b28gbGF6eSB0byBpbXByb3ZlIGl0IGFuZCBJIG1hZGUgaXQgZmFzdCwgYW55d2F5LCB5b3UKbmVlZCB0byBpbnN0YWxsIGBzb2NhdGAgZm9yIHRoaXMgdG8gd29yawoKIyMgMi4gR2VuZXJhdGUgZGF0YSByZXBvcnQKCldlbGwgYXQgdGhpcyBwb2ludCB5b3UgY2FuIGRvIGFueXRoaW5nIHlvdSB3YW50IHdpdGggeW91ciBkYXRhLCBhbHRob3VnaApJIG1hZGUgYSBzaW1wbGUgZ2VuZXJhdG9yIGZvciBpdAoKU28gSSBtYWRlIHVzZSBvZiB0aGUgZGF0YSBJIGhhdmUgYW5kIG15IHBsYXlsaXN0IHN0cnVjdHVyZSwgaGVyZSdzIGFuIGV4YW1wbGUgZW50cnk6CgogICAgeyJkYXRhIjoicGxheWxpc3QvZ2lybCBpbiByZWQgLSBpJ2xsIGRpZSBhbnl3YXkuIFs4TU1hMzVCM0hUOF0ubXAzIiwicmVxdWVzdF9pZCI6MCwiZXJyb3IiOiJzdWNjZXNzIn0KClRoZXJlJ3MgYW4gSUQgdGhlcmUgc28gSSBhZGQgWW91VHViZSBhZGRpbmcgdG8gdGhlIGdlbmVyYXRvciBieQpkZWZhdWx0LCB5b3VycyBtaWdodCBub3QgaGF2ZSBpdCwgYnV0IEkgbWVhbiwgeW91IGNhbiBzdGlsbCBwcmV0dHkgbXVjaAp1c2UgaXQsIGp1c3QgbGlua3Mgd29uJ3Qgd29yawoKIyMjIDIuMSBUaGUgc2NyaXB0CgpJIG1hZGUgYSBweXRob24gc2NyaXB0IGFzIG15IGdlbmVyYXRvcjoKCiAgICAjIS91c3IvYmluL2VudiBweXRob24zCiAgICAjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQogICAgIiIiTVBWIHBsYXlsaXN0IHNvbmcgcmVwb3J0ZXIiIiIKCiAgICBpbXBvcnQgb3MKICAgIGltcG9ydCBzeXMKICAgIGZyb20gaHRtbCBpbXBvcnQgZXNjYXBlIGFzIGh0bWxfZXNjYXBlCiAgICBmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBMaXN0LCBUdXBsZQogICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgZmlsdGVyd2FybmluZ3MgYXMgZmlsdGVyX3dhcm5pbmdzCgogICAgaW1wb3J0IHVqc29uICAjIHR5cGU6IGlnbm9yZQogICAgZnJvbSBjc3NfaHRtbF9qc19taW5pZnkgaW1wb3J0IGh0bWxfbWluaWZ5ICAjIHR5cGU6IGlnbm9yZQoKICAgIFNPTkdfVE9fQVJUSVNUOiBEaWN0W3N0ciwgc3RyXSA9IHsKICAgICAgICAiMTk4NSI6ICJibyBidXJuaGFtIiwKICAgICAgICAiYXBvY2FseXBzZSI6ICJjaWdhcmV0dGVzIGFmdGVyIFNleCIsCiAgICAgICAgImFzdHJvbm9teSI6ICJjb25hbiBncmF5IiwKICAgICAgICAiYnJvb2tseW4gYmFieSI6ICJsYW5hIGRlbCByZXkiLAogICAgICAgICJjb21lIGhvbWUgdG8gbWUiOiAiY3Jhd2xlcnMiLAogICAgICAgICJkYWRkeSBpc3N1ZXMiOiAidGhlIG5laWdoYm91cmhvb2QiLAogICAgICAgICJmZWVsIGJldHRlciI6ICJwZW5lbG9wZSBzY290dCIsCiAgICAgICAgImhvcm55bG92ZXNpY2ttZXNzIjogImdpcmwgaW4gcmVkIiwKICAgICAgICAiaSB3YW5uYSBiZSB5b3VyIGdpcmxmcmllbmQiOiAiZ2lybCBpbiByZWQiLAogICAgICAgICJrLiI6ICJjaWdhcmV0dGVzIGFmdGVyIFNleCIsCiAgICAgICAgImxvb2thbGlrZSI6ICJjb25hbiBncmF5IiwKICAgICAgICAibG90dGEgdHJ1ZSBjcmltZSI6ICJwZW5lbG9wZSBzY290dCIsCiAgICAgICAgIm15IG1hbidzIGEgaGV4YWdvbiAobXVzaWMgdmlkZW8pIjogIm3DvG5lY2F0IiwKICAgICAgICAicsOkdCI6ICJwZW5lbG9wZSBzY290dCIsCiAgICAgICAgInNhcHBobyI6ICJidXNoaWVzIiwKICAgICAgICAic2VyaWFsIGtpbGxlciAtIGxhbmEgZGVsIHJleSBseXJpY3MiOiAibGFuYSBkZWwgcmV5IiwKICAgICAgICAic3VnYXIsIHdlJ3JlIGdvaW4gZG93biBidXQgaXQncyBjcmVlcGllciI6ICJrYWRlIiwKICAgICAgICAic3dlYXRlciB3ZWF0aGVyIjogInRoZSBuZWlnaGJvdXJob29kIiwKICAgICAgICAidGFsaWEg4qe44qe4IGdpcmwgaW4gcmVkIGNvdmVyIjogImdpcmwgaW4gcmVkIiwKICAgICAgICAidHYiOiAiYnVzaGllcyIsCiAgICAgICAgInVuaW9uaXplIC0gbcO8bmVjYXQgKG11c2ljIHZpZGVvKSI6ICJtw7xuZWNhdCIsCiAgICAgICAgIndhdGNoIHlvdSBzbGVlcC4iOiAiZ2lybCBpbiByZWQiLAogICAgICAgICJ5b3UgdXNlZCBtZSBmb3IgbXkgbG92ZV9naXJsIGluIHJlZCI6ICJnaXJsIGluIHJlZCIsCiAgICB9CgoKICAgIGNsYXNzIFVua25vd25NdXNpY0FydGlzdEVycm9yKEV4Y2VwdGlvbik6CiAgICAgICAgIiIiUmFpc2VkIHdoZW4gdGhlcmUgaXMgYW4gdW5rbm93biBtdXNpYyBhcnRpc3QiIiIKCgogICAgZGVmIHNvcnRfZGljdChkOiBEaWN0W3N0ciwgaW50XSkgLT4gRGljdFtzdHIsIGludF06CiAgICAgICAgcmV0dXJuIHtrOiB2IGZvciBrLCB2IGluIHNvcnRlZChkLml0ZW1zKCksIGtleT1sYW1iZGEgaXRlbTogaXRlbVsxXSwgcmV2ZXJzZT1UcnVlKX0KCgogICAgZGVmIGZzcGxpdF9kZWxzKHM6IHN0ciwgKmRlbHM6IHN0cikgLT4gc3RyOgogICAgICAgIGZvciBkZWxpbSBpbiBkZWxzOgogICAgICAgICAgICBzID0gcy5zcGxpdChkZWxpbSwgbWF4c3BsaXQ9MSlbMF0KCiAgICAgICAgcmV0dXJuIHMuc3RyaXAoKQoKCiAgICBkZWYgZ2V0X2FydGlzdF9mcm9tX3Nvbmcoc29uZzogc3RyKSAtPiBzdHI6CiAgICAgICAgc29uZyA9IHNvbmcubG93ZXIoKQogICAgICAgIGRlbGltczogVHVwbGVbc3RyLCAuLi5dID0gKAogICAgICAgICAgICAi4oCTIiwKICAgICAgICAgICAgIi0iLAogICAgICAgICAgICAiLCIsCiAgICAgICAgICAgICJmZWF0LiIsCiAgICAgICAgICAgICIuIiwKICAgICAgICAgICAgIiYiLAogICAgICAgICkKCiAgICAgICAgaWYgc29uZyBub3QgaW4gU09OR19UT19BUlRJU1QgYW5kIGFueShkIGluIHNvbmcgZm9yIGQgaW4gZGVsaW1zKToKICAgICAgICAgICAgcmV0dXJuIGZzcGxpdF9kZWxzKAogICAgICAgICAgICAgICAgc29uZywKICAgICAgICAgICAgICAgICpkZWxpbXMsCiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBzb25nIGluIFNPTkdfVE9fQVJUSVNUOgogICAgICAgICAgICAgICAgcmV0dXJuIFNPTkdfVE9fQVJUSVNUW3NvbmddLmxvd2VyKCkKCiAgICAgICAgICAgIHJhaXNlIFVua25vd25NdXNpY0FydGlzdEVycm9yKGYiTm8gaGFuZGxlZCBhcnRpc3QgZm9yIHNvbmc6IHtzb25nIXJ9IikKCgogICAgZGVmIGdldF9wbGF5ZWQoZGF0YTogTGlzdFtUdXBsZVtzdHIsIHN0cl1dKSAtPiBEaWN0W3N0ciwgaW50XToKICAgICAgICBwbGF5ZWQ6IERpY3Rbc3RyLCBpbnRdID0ge30KCiAgICAgICAgZm9yIHNvbmcsIF8gaW4gZGF0YToKICAgICAgICAgICAgaWYgc29uZyBub3QgaW4gcGxheWVkOgogICAgICAgICAgICAgICAgcGxheWVkW3NvbmddID0gMAoKICAgICAgICAgICAgcGxheWVkW3NvbmddICs9IDEKCiAgICAgICAgcmV0dXJuIHNvcnRfZGljdChwbGF5ZWQpCgoKICAgIGRlZiBnZXRfeXRfdXJsc19mcm9tX2RhdGEoZGF0YTogTGlzdFtUdXBsZVtzdHIsIHN0cl1dKSAtPiBEaWN0W3N0ciwgc3RyXToKICAgICAgICByZXR1cm4ge3Nvbmc6IGYiaHR0cHM6Ly9hcmktd2ViLnh5ei95dC93YXRjaD92PXt5dF9pZH0iIGZvciBzb25nLCB5dF9pZCBpbiBkYXRhfQoKCiAgICBkZWYgZ2V0X2FydGlzdHNfZnJvbV9wbGF5ZWQocGxheWVkOiBEaWN0W3N0ciwgaW50XSkgLT4gRGljdFtzdHIsIExpc3RbaW50XV06CiAgICAgICAgYXJ0aXN0czogRGljdFtzdHIsIExpc3RbaW50XV0gPSB7fQoKICAgICAgICBmb3Igc29uZyBpbiBwbGF5ZWQ6CiAgICAgICAgICAgIGFydGlzdCA9IGdldF9hcnRpc3RfZnJvbV9zb25nKHNvbmcpCgogICAgICAgICAgICBpZiBhcnRpc3Qgbm90IGluIGFydGlzdHM6CiAgICAgICAgICAgICAgICBhcnRpc3RzW2FydGlzdF0gPSBbMCwgMF0KCiAgICAgICAgICAgIGFydGlzdHNbYXJ0aXN0XVswXSArPSAxCiAgICAgICAgICAgIGFydGlzdHNbYXJ0aXN0XVsxXSArPSBwbGF5ZWRbc29uZ10KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgazogdgogICAgICAgICAgICBmb3IgaywgdiBpbiBzb3J0ZWQoYXJ0aXN0cy5pdGVtcygpLCBrZXk9bGFtYmRhIGl0ZW06IHN1bShpdGVtWzFdKSwgcmV2ZXJzZT1UcnVlKQogICAgICAgIH0KCgogICAgZGVmIHBhcnNlX3Nvbmcoc29uZzogc3RyKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICAgICAgYmFzZW5hbWU6IHN0ciA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShzb25nKSlbMF0KICAgICAgICByZXR1cm4gYmFzZW5hbWVbOi0xNF0sIGJhc2VuYW1lWy0xMjotMV0KCgogICAgZGVmIHBhcnNlX2RhdGEoZGF0YTogTGlzdFtUdXBsZVtzdHIsIHN0cl1dKSAtPiBEaWN0W3N0ciwgQW55XToKICAgICAgICBwbGF5ZWQ6IERpY3Rbc3RyLCBpbnRdID0gZ2V0X3BsYXllZChkYXRhKQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAidG90YWwiOiBsZW4oZGF0YSksCiAgICAgICAgICAgICJwbGF5ZWQiOiBwbGF5ZWQsCiAgICAgICAgICAgICJhcnRpc3RzIjogZ2V0X2FydGlzdHNfZnJvbV9wbGF5ZWQocGxheWVkKSwKICAgICAgICAgICAgInl0LXVybHMiOiBnZXRfeXRfdXJsc19mcm9tX2RhdGEoZGF0YSksCiAgICAgICAgfQoKCiAgICBkZWYgZ2VuZXJhdGVfaHRtbF9yZXBvcnQoZGF0YTogRGljdFtzdHIsIEFueV0pIC0+IHN0cjoKICAgICAgICBzdHlsZXM6IHN0ciA9ICIiIgogICAgQGltcG9ydCB1cmwoImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vaGFjay1mb250QDMvYnVpbGQvd2ViL2hhY2subWluLmNzcyIpOwoKICAgIDpyb290IHsKICAgICAgICBjb2xvci1zY2hlbWU6IGRhcms7CgogICAgICAgIC0tY2xyLWJnOiAjMjYyMjIwOwogICAgICAgIC0tY2xyLWZnOiAjZjlmNmU4OwoKICAgICAgICAtLWNsci1jb2RlLWJnOiAjMWYxYjFhOwogICAgICAgIC0tY2xyLWNvZGUtZmc6ICNmMGYzZTY7CiAgICAgICAgLS1jbHItY29kZS1iZy1kYXJrOiAjMTgxNDE0OwoKICAgICAgICAtLXNjcm9sbGJhci1oZWlnaHQ6IDZweDsgLyogVE9ETzogRmlyZWZveCAqLwogICAgfQoKICAgICosCiAgICAqOjpiZWZvcmUsCiAgICAqOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2xyLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tY2xyLWZnKTsKICAgICAgICBmb250LWZhbWlseTogSGFjaywgaGFjaywgbW9ub3NwYWNlOwoKICAgICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7CiAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOwoKICAgICAgICBzY3JvbGxiYXItY29sb3I6IHZhcigtLWNsci1jb2RlLWJnLWRhcmspIHRyYW5zcGFyZW50OwoKICAgICAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwoKICAgICAgICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDsKICAgIH0KCiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyLAogICAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1zY3JvbGxiYXItaGVpZ2h0KTsKICAgIH0KCiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jbHItY29kZS1iZy1kYXJrKTsKICAgIH0KCiAgICBodG1sOjotd2Via2l0LXNjcm9sbGJhciwKICAgIGJvZHk6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgYm9keSB7CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDJyZW07CiAgICAgICAgbWF4LXdpZHRoOiAxMTAwcHg7CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplU3BlZWQ7CiAgICB9CgogICAgaDEgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDFlbTsKICAgICAgICBmb250LXNpemU6IDJlbTsKICAgIH0KCiAgICBsaSB7CiAgICAgICAgbWFyZ2luOiAwLjVlbTsKICAgIH0KCiAgICBhIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgdGV4dC1zaGFkb3c6IDBweCAwcHggNHB4IHdoaXRlOwogICAgfQoKICAgIHByZSwKICAgIHByZSAqIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jbHItY29kZS1iZyk7CiAgICB9CgogICAgcHJlLAogICAgcHJlICosCiAgICBjb2RlIHsKICAgICAgICBjb2xvcjogdmFyKC0tY2xyLWNvZGUtZmcpOwogICAgfQoKICAgIHByZSwKICAgIHByZSBjb2RlIHsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvICFpbXBvcnRhbnQ7CgogICAgICAgIHNjcm9sbGJhci13aWR0aDogaW5pdGlhbDsKICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IGluaXRpYWw7CiAgICB9CgogICAgcHJlIHsKICAgICAgICBwYWRkaW5nOiAxZW07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgfQoKICAgIGNvZGU6bm90KHByZSBjb2RlKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2xyLWNvZGUtYmcpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBwYWRkaW5nOiAwLjJlbTsKICAgIH0KCiAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICAgICAgICosCiAgICAgICAgKjo6YmVmb3JlLAogICAgICAgICo6OmFmdGVyIHsKICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwogICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwoKICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDEgIWltcG9ydGFudDsKCiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4wMW1zICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIC1vLXRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwogICAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDsKCiAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogYXV0byAhaW1wb3J0YW50OwogICAgICAgIH0KICAgIH0KCiAgICBAbWVkaWEgKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIHsKICAgICAgICA6cm9vdCB7CiAgICAgICAgICAgIC0tY2xyLWJnOiBibGFjazsKICAgICAgICAgICAgLS1jbHItZmc6IHdoaXRlOwoKICAgICAgICAgICAgLS1jbHItY29kZS1iZzogIzE4MTgxODsKICAgICAgICAgICAgLS1jbHItY29kZS1mZzogd2hpdGVzbW9rZTsKCiAgICAgICAgICAgIC0tc2Nyb2xsYmFyLWhlaWdodDogMTJweDsgLyogVE9ETzogRmlyZWZveCAqLwogICAgICAgIH0KCiAgICAgICAgaHRtbDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgICAgICBkaXNwbGF5OiBpbml0aWFsICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICAqLAogICAgICAgICo6OmJlZm9yZSwKICAgICAgICAqOjphZnRlciB7CiAgICAgICAgICAgIHNjcm9sbGJhci13aWR0aDogaW5pdGlhbCAhaW1wb3J0YW50OwogICAgICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IGluaXRpYWwgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIGEgewogICAgICAgICAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwoKICAgICAgICAgICAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQgIWltcG9ydGFudDsKICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgfQogICAgIiIiCgogICAgICAgIHNvbmdzID0gYXJ0aXN0cyA9ICIiCgogICAgICAgIGZvciBzb25nLCB0aW1lcyBpbiBkYXRhWyJwbGF5ZWQiXS5pdGVtcygpOgogICAgICAgICAgICBzb25ncyArPSBmIjxsaT48YSBocmVmPVwie2RhdGFbJ3l0LXVybHMnXVtzb25nXX1cIj57aHRtbF9lc2NhcGUoc29uZyl9PC9hPiAocGxheWVkIDxjb2RlPnt0aW1lc308L2NvZGU+IHRpbWV7J3MnIGlmIHRpbWVzID4gMSBlbHNlICcnfSk8L2xpPiIKCiAgICAgICAgZm9yIGFydGlzdCwgc29uZ24gaW4gZGF0YVsiYXJ0aXN0cyJdLml0ZW1zKCk6CiAgICAgICAgICAgIHJwczogc3RyID0gZiIgKDxjb2RlPntzb25nblsxXX08L2NvZGU+IHJlcGVhdHMpIgogICAgICAgICAgICBhcnRpc3RzICs9IGYiPGxpPntodG1sX2VzY2FwZShhcnRpc3QpfSAoPGNvZGU+e3NvbmduWzBdfTwvY29kZT4gc29uZ3sncycgaWYgc29uZ25bMF0gPiAxIGVsc2UgJyd9IFwKICAgIHBsYXllZHtycHMgaWYgc29uZ25bMV0gPiAxIGVsc2UgJyd9KTwvbGk+IgoKICAgICAgICByZXR1cm4gaHRtbF9taW5pZnkoCiAgICAgICAgICAgIGYiIiI8IURPQ1RZUEUgaHRtbD4KICAgIDxodG1sIGxhbmc9ImVuIj4KICAgICAgICA8aGVhZD4KICAgICAgICAgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgogICAgICAgICAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICAgICAgICAgIDx0aXRsZT5IVE1MIG1wdiBzb25nIHJlcG9ydDwvdGl0bGU+CgogICAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iV2hhdCBkbyB5b3UgbGlzdGVuIHRvIiAvPgogICAgICAgICAgICA8bWV0YQogICAgICAgICAgICAgICAgbmFtZT0ia2V5d29yZHMiCiAgICAgICAgICAgICAgICBjb250ZW50PSJzb3J0LCByZXBvcnQsIG11c2ljLCBtdXNpYyByZXBvcnQsIGxpc3Rlbiwgc29uZyIKICAgICAgICAgICAgLz4KICAgICAgICAgICAgPG1ldGEKICAgICAgICAgICAgICAgIG5hbWU9InJvYm90cyIKICAgICAgICAgICAgICAgIGNvbnRlbnQ9ImZvbGxvdywgaW5kZXgsIG1heC1zbmlwcGV0Oi0xLCBtYXgtdmlkZW8tcHJldmlldzotMSwgbWF4LWltYWdlLXByZXZpZXc6bGFyZ2UiCiAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIiAvPgogICAgICAgICAgICA8bWV0YSBuYW1lPSJjb2xvci1zY2hlbWUiIGNvbnRlbnQ9ImRhcmsiIC8+CgogICAgICAgICAgICA8c3R5bGU+e3N0eWxlc308L3N0eWxlPgogICAgICAgIDwvaGVhZD4KCiAgICAgICAgPGJvZHk+CiAgICAgICAgICAgIDxtYWluPgogICAgICAgICAgICAgICAgPGgxPldoYXQgYXJlIHlvdSBsaXN0ZW5pbmcgdG8\/PC9oMT4KCiAgICAgICAgICAgICAgICA8aHIgLz4KCiAgICAgICAgICAgICAgICA8aDI+U3RhdHM8L2gyPgoKICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+U29uZ3MgcGxheWVkOiA8Y29kZT57ZGF0YVsndG90YWwnXX08L2NvZGU+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+VW5pcXVlIHNvbmdzIHBsYXllZDogPGNvZGU+e2xlbihkYXRhWydwbGF5ZWQnXSl9PC9jb2RlPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPkFydGlzdHM6IDxjb2RlPntsZW4oZGF0YVsnYXJ0aXN0cyddKX08L2NvZGU+PC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICAgICAgPGgyPlRvcCBzdGF0czwvaDI+CgogICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgIDxsaT5Ub3AgYXJ0aXN0OiA8Y29kZT57dHVwbGUoZGF0YVsnYXJ0aXN0cyddLmtleXMoKSlbMF19PC9jb2RlPiB3aXRoIDxjb2RlPnt0dXBsZShkYXRhWydhcnRpc3RzJ10udmFsdWVzKCkpWzBdWzBdfTwvY29kZT4gc29uZ3MgcGxheWVkIGFuZCBcCiAgICA8Y29kZT57dHVwbGUoZGF0YVsnYXJ0aXN0cyddLnZhbHVlcygpKVswXVsxXX08L2NvZGU+IHJlcGVhdHM8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT5Ub3Agc29uZzogPGNvZGU+e3R1cGxlKGRhdGFbJ3BsYXllZCddLmtleXMoKSlbMF19PC9jb2RlPiBieSA8Y29kZT57Z2V0X2FydGlzdF9mcm9tX3NvbmcodHVwbGUoZGF0YVsncGxheWVkJ10ua2V5cygpKVswXSl9PC9jb2RlPiBcCiAgICB3aXRoIDxjb2RlPnt0dXBsZShkYXRhWydwbGF5ZWQnXS52YWx1ZXMoKSlbMF19PC9jb2RlPiBwbGF5czwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgICAgIDxoMj5Tb25nczwvaDE+CgogICAgICAgICAgICAgICAgPGRldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+RXhwYW5kIGZvciB0aGUgbGlzdCBvZiBzb25nczwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICA8dWw+e3NvbmdzfTwvdWw+CiAgICAgICAgICAgICAgICA8L2RldGFpbHM+CgogICAgICAgICAgICAgICAgPGgyPkFydGlzdHM8L2gyPgoKICAgICAgICAgICAgICAgIDxkZXRhaWxzPgogICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PkV4cGFuZCBmb3IgdGhlIGxpc3Qgb2YgYXJ0aXN0czwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICA8dWw+e2FydGlzdHN9PC91bD4KICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KCiAgICAgICAgICAgICAgICA8aDI+UmF3IEpTT04gZGF0YTwvaDI+CgogICAgICAgICAgICAgICAgPGRldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+RXhwYW5kIGZvciB0aGUgcmF3IGRhdGE8L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgPHByZT48Y29kZT57dWpzb24uZHVtcHMoZGF0YSwgaW5kZW50PTQpfTwvY29kZT48L3ByZT4KICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAgICAgICAgPC9tYWluPgogICAgICAgIDwvYm9keT4KICAgIDwvaHRtbD4iIiIKICAgICAgICApCgoKICAgIGRlZiBtYWluKCkgLT4gaW50OgogICAgICAgICIiIkVudHJ5L21haW4gZnVuY3Rpb24iIiIKCiAgICAgICAgZGF0YTogTGlzdFtUdXBsZVtzdHIsIHN0cl1dID0gW10KCiAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguZXhwYW5kdXNlcigifi8ubXB2cCIpLCAiciIpIGFzIG1wdl9kYXRhOgogICAgICAgICAgICBmb3IgbGluZSBpbiBtcHZfZGF0YToKICAgICAgICAgICAgICAgIGlmICciZGF0YSInIG5vdCBpbiBsaW5lOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQocGFyc2Vfc29uZyh1anNvbi5sb2FkcyhsaW5lKVsiZGF0YSJdKSkKCiAgICAgICAgd2l0aCBvcGVuKCJpbmRleC5odG1sIiwgInciKSBhcyBoOgogICAgICAgICAgICBoLndyaXRlKGdlbmVyYXRlX2h0bWxfcmVwb3J0KHBhcnNlX2RhdGEoZGF0YSkpKQoKICAgICAgICByZXR1cm4gMAoKCiAgICBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgICAgIGFzc2VydCBtYWluLl9fYW5ub3RhdGlvbnNfXy5nZXQoInJldHVybiIpIGlzIGludCwgIm1haW4oKSBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIiCgogICAgICAgIGZpbHRlcl93YXJuaW5ncygiZXJyb3IiLCBjYXRlZ29yeT1XYXJuaW5nKQogICAgICAgIHN5cy5leGl0KG1haW4oKSkKClRoaXMgaXMgYSBwcmV0dHkgZWFzeSB0aGluZywgdmVyeSBzdHVwaWQgYW5kIG5vdCBmb29sLXByb29mIGJ1dCBlaCwKdGhpcyBnZW5lcmF0b3Igc2hvdWxkIHdvcmsgb3V0IG9mIHRoZSBib3ggd2l0aCB0aGUgc29uZyBuYW1lIGZvcm1hdApiZWluZyBgYXJ0aXN0IG5hbWUgLSBzb25nYCwgaWYgaXQncyBub3QgbWFrZSBzdXJlIHRvIGFkZCBhIGxvd2VyY2FzZQplbnRyeSB0byBgU09OR19UT19BUlRJU1RgLCBsaWtlIGlmIHlvdXIgc29uZyB3YXMgbmFtZWQgbGlrZSBgbmFNZSAtIEFydGlzdGAKeW91IHdpbGwgaGF2ZSB0byBhZGQgdGhpcyBlbnRyeToKCiAgICAibmFtZSAtIGFydGlzdCI6ICJhcnRpc3QiLAoKVGhlc2Ugc2V0dGluZ3MgdGhhdCB5b3Ugc2VlIGluIG15IHNjcmlwdCBhcmUgZm9yIG15IHBsYXlsaXN0CgojIyAyLjIgRGVwZW5kZW5jaWVzCgpIZXJlJ3MgdGhlIHB5dGhvbiBkZXBlbmRlbmNpZXMgeW91IG5lZWQ6CgogICAgY3NzLWh0bWwtanMtbWluaWZ5CiAgICB1anNvbgoKWW91IG5lZWQgdG8gaW5zdGFsbCB0aGVtIHVzaW5nCgogICAgcHl0aG9uMyAtbSBwaXAgaW5zdGFsbCAtLXVzZXIgY3NzLWh0bWwtanMtbWluaWZ5IHVqc29uCgojIyAyLjMgVGhlIGRhdGEgcmVwb3J0CgpPbmNlIHlvdSBoYXZlIGVub3VnaCBkYXRhIHRvIG1ha2UgYSByZXBvcnQgZnJvbSwgcnVuIHRoZSBzY3JpcHQsCmp1c3QKCiAgICBweXRob24zIG1haW4ucHkKCk9yIHdoYXRldmVyLCBpdCdsbCBnZW5lcmF0ZSBgaW5kZXguaHRtbGAgZmlsZSBhbmQgaXQnbGwgaW5jbHVkZSBhbGwgb2YKeW91ciByZXBvcnQgZGF0YSwgeW91IGNhbiBhbHNvIHN0eWxlIGl0IHVzaW5nIHRoZSBgc3R5bGVzYCB2YXJpYWJsZQoKIyMgMy4gRmluaXNoaW5nCgpUaGF0J3MgYWxsLCBlbmpveSB5b3VyIHN0YXRpc3RpY3MsIGFuZCBhcyBvZiBub3cgSSBzaGFsbCBnbyBjb2xsZWN0IG1vcmUgZGF0YSwKSSBhbHJlYWR5IGhhdmUgMThLQiBvZiBpdCEKClBsdXMsIEknbGwgYWRtaXQgaXQsIG1vc3Qgb2YgdGhpcyBjb2RlIGlzICoqZ2FyYmFnZSwgY29tcGxldGUgZG9nIHNoaXQqKiwKSSBqdXN0IHdhbnRlZCB0byBtYWtlIGl0IHdvcmsgYW5kIEkgZGlkLCBpdCdzIHJlYWRhYmxlIGVub3VnaApmb3IganVzdCBhIG1lc3N5IHNjcmlwdCBJJ20gbm90IGV2ZW4gcmVsZWFzaW5nIGFzIGFueXRoaW5nIGxlZ2l0Cg==", "version": 1, "time": 1664422575.771071, "keywords": "song report song-report ststistics mpv mpv.io player music listening data html css python python3 generator",