UNPKG

easymina

Version:

![CircleCI](https://img.shields.io/circleci/build/github/EasyMina/easyMina/main)

1 lines 49.8 kB
data:application/json;base64,ewogICAgIm5hbWUiOiAiaGVsbG8td29ybGQiLAogICAgImRlc2NyaXB0aW9uIjogIiIsCiAgICAiZW5jcnlwdCI6IGZhbHNlLAogICAgImNyZWF0ZWQiOiAiMjAyNC0wMi0wOSAwMzo1NjoxNyBBTSIsCiAgICAiY29udGVudCI6IHsKICAgICAgICAiY3JlYXRlZCI6ICIyMDI0LTAyLTA5IDAzOjU2OjE3IEFNIiwKICAgICAgICAicHJvamVjdE5hbWUiOiAiaGVsbG8td29ybGQiLAogICAgICAgICJyb290UGF0aCI6ICJwcm9qZWN0cy9oZWxsby13b3JsZCIsCiAgICAgICAgImZvbGRlcnMiOiB7CiAgICAgICAgICAgICJyb290IjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICJ0c2NvbmZpZy5qc29uIiwKICAgICAgICAgICAgICAgICAgICAiY29udGVudCI6ICJ7XG4gICAgXCJjb21waWxlck9wdGlvbnNcIjoge1xuICAgICAgICBcInRhcmdldFwiOiBcIkVTMjAxOVwiLFxuICAgICAgICBcIm1vZHVsZVwiOiBcImVzMjAyMlwiLFxuICAgICAgICBcImxpYlwiOiBbXG4gICAgICAgICAgICBcImRvbVwiLFxuICAgICAgICAgICAgXCJlc25leHRcIlxuICAgICAgICBdLFxuICAgICAgICBcIm91dERpclwiOiBcIi4vY29udHJhY3RzL2J1aWxkXCIsXG4gICAgICAgIFwicm9vdERpclwiOiBcIi4vY29udHJhY3RzXCIsXG4gICAgICAgIFwic3RyaWN0XCI6IHRydWUsXG4gICAgICAgIFwic3RyaWN0UHJvcGVydHlJbml0aWFsaXphdGlvblwiOiBmYWxzZSxcbiAgICAgICAgXCJza2lwTGliQ2hlY2tcIjogdHJ1ZSxcbiAgICAgICAgXCJmb3JjZUNvbnNpc3RlbnRDYXNpbmdJbkZpbGVOYW1lc1wiOiB0cnVlLFxuICAgICAgICBcImVzTW9kdWxlSW50ZXJvcFwiOiB0cnVlLFxuICAgICAgICBcInJlc29sdmVKc29uTW9kdWxlXCI6IHRydWUsXG4gICAgICAgIFwibW9kdWxlUmVzb2x1dGlvblwiOiBcIm5vZGVcIixcbiAgICAgICAgXCJleHBlcmltZW50YWxEZWNvcmF0b3JzXCI6IHRydWUsXG4gICAgICAgIFwiZW1pdERlY29yYXRvck1ldGFkYXRhXCI6IHRydWUsXG4gICAgICAgIFwiYWxsb3dKc1wiOiB0cnVlLFxuICAgICAgICBcImRlY2xhcmF0aW9uXCI6IGZhbHNlLFxuICAgICAgICBcInNvdXJjZU1hcFwiOiBmYWxzZSxcbiAgICAgICAgXCJub0ZhbGx0aHJvdWdoQ2FzZXNJblN3aXRjaFwiOiB0cnVlLFxuICAgICAgICBcImFsbG93U3ludGhldGljRGVmYXVsdEltcG9ydHNcIjogdHJ1ZSxcbiAgICAgICAgXCJpc29sYXRlZE1vZHVsZXNcIjogdHJ1ZVxuICAgIH0sXG4gICAgXCJpbmNsdWRlXCI6IFtcbiAgICAgICAgXCIuL2NvbnRyYWN0cy8qKi8qLnRzXCJcbiAgICBdLFxuICAgIFwiZXhjbHVkZVwiOiBbXG4gICAgICAgIFwiLi9jb250cmFjdHMvYnVpbGRcIlxuICAgIF1cbn0iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJiYWNrZW5kIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICJiYWNrZW5kLzAtY3JlYXRlLWFjY291bnRzLm1kIiwKICAgICAgICAgICAgICAgICAgICAiY29udGVudCI6ICIjIFVzaW5nIEVhc3lNaW5hIHRvIENyZWF0ZSBBY2NvdW50c1xuXG5UaGlzIHNjcmlwdCBkZW1vbnN0cmF0ZXMgdGhlIHVzYWdlIG9mIHRoZSBgRWFzeU1pbmFgIG1vZHVsZSB0byBjcmVhdGUgYWNjb3VudHMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIE1pbmEgUHJvdG9jb2wgYmxvY2tjaGFpbi4gVGhlIHNjcmlwdCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4jIyBJbXBvcnRpbmcgdGhlIEVhc3lNaW5hIE1vZHVsZVxuXG5gYGBqYXZhc2NyaXB0XG5pbXBvcnQgeyBFYXN5TWluYSB9IGZyb20gJ2Vhc3ltaW5hJ1xuYGBgXG5cbkluIHRoaXMgbGluZSwgd2UgaW1wb3J0IHRoZSBgRWFzeU1pbmFgIGNsYXNzIGZyb20gYSBtb2R1bGUgbG9jYXRlZCBhdCBgZWFzeW1pbmFgLiBUaGUgYEVhc3lNaW5hYCBjbGFzcyBpcyBhIHV0aWxpdHkgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIE1pbmEgUHJvdG9jb2wuXG5cbiMjIEluaXRpYWxpemluZyBFYXN5TWluYVxuXG5gYGBqYXZhc2NyaXB0XG5jb25zb2xlLmxvZygn4pyoIEFkZGluZyBFYXN5TWluYS4uLicpXG5jb25zdCBlYXN5TWluYSA9IG5ldyBFYXN5TWluYSggeyAnbmV0d29ya05hbWUnOiAnYmVya2VsZXknIH0pXG5gYGBcblxuSGVyZSwgd2UgaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYEVhc3lNaW5hYCBjbGFzcyBieSBwcm92aWRpbmcgYW4gb2JqZWN0IHdpdGggdGhlIGAnbmV0d29ya05hbWUnYCBzZXQgdG8gYCdiZXJrZWxleSdgLiBUaGlzIGNvbmZpZ3VyYXRpb24gbGlrZWx5IHNwZWNpZmllcyB0aGUgbmV0d29yayBlbnZpcm9ubWVudCB0byBpbnRlcmFjdCB3aXRoLlxuXG4jIyBDcmVhdGluZyBBY2NvdW50c1xuXG5gYGBqYXZhc2NyaXB0XG5jb25zb2xlLmxvZygn8J+UkSBDcmVhdGluZyBBY2NvdW50cy4uLicpXG5jb25zdCBkZXBsb3llcnMgPSBhd2FpdCBlYXN5TWluYS5jcmVhdGVBY2NvdW50cyh7XG4gICAgJ25hbWVzJzogWydhbGljZScsICdib2InLCAnY2hhcmxpZSddLFxuICAgICdncm91cE5hbWUnOiAnYSdcbn0pXG5gYGBcblxuVGhpcyBzZWN0aW9uIGluaXRpYWxpemVzIHRoZSBhY2NvdW50IGNyZWF0aW9uIHByb2Nlc3MgYnkgdXRpbGl6aW5nIHRoZSBgY3JlYXRlQWNjb3VudHNgIG1ldGhvZCBwcm92aWRlZCBieSB0aGUgYGVhc3lNaW5hYCBpbnN0YW5jZS4gSXQgY3JlYXRlcyB0aHJlZSBhY2NvdW50cyBuYW1lZCAnYWxpY2UsJyAnYm9iLCcgYW5kICdjaGFybGllJyBhbmQgYXNzaWducyB0aGVtIHRvIHRoZSAnYScgZ3JvdXAuIElmIHRoZSBhY2NvdW50IGFscmVhZHkgZXhpc3RzLCB0aGUgcHJvY2VzcyBpcyBza2lwcGVkLiBUaGUgdXNlIG9mIHRoZSBgYXdhaXRgIGtleXdvcmQgaW5kaWNhdGVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYXN5bmNocm9ub3VzIGFuZCByZXR1cm5zIGEgbGlzdCBvZiB0aGUgY3JlYXRlZCBhY2NvdW50cy5cblxuIyMgUmVhZHkgdG8gRGVwbG95XG5cbmBgYGphdmFzY3JpcHRcbmNvbnNvbGUubG9nKCfwn5qAIERlcGxveWVycyBSZWFkeS4nKVxuYGBgXG5cbkZpbmFsbHksIHRoZSBzY3JpcHQgaW5kaWNhdGVzIHRoYXQgdGhlIGRlcGxveWVycyAoY3JlYXRlZCBhY2NvdW50cykgYXJlIHJlYWR5IGZvciB1c2UuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiYmFja2VuZC8wLWNyZWF0ZS1hY2NvdW50cy5tanMiLAogICAgICAgICAgICAgICAgICAgICJjb250ZW50IjogIlxuaW1wb3J0ICogYXMgbzFqcyBmcm9tICdvMWpzJ1xuaW1wb3J0IHsgRWFzeU1pbmEgfSBmcm9tICdlYXN5bWluYSdcblxuY29uc29sZS5sb2coJ+KcqCBBZGRpbmcgRWFzeU1pbmEuLi4nKVxuY29uc3QgZWFzeU1pbmEgPSBuZXcgRWFzeU1pbmEoIHsgJ25ldHdvcmtOYW1lJzogJ2JlcmtlbGV5JywgbzFqcyB9KVxuXG5jb25zb2xlLmxvZygn8J+UkSBDcmVhdGluZyBBY2NvdW50cy4uLicpXG5jb25zdCBkZXBsb3llcnMgPSBhd2FpdCBlYXN5TWluYS5jcmVhdGVBY2NvdW50cyh7XG4gICAgJ25hbWVzJzogWydhbGljZScsICdib2InLCAnY2hhcmxpZSddLFxuICAgICdncm91cE5hbWUnOiAnYSdcbn0pXG5cbmNvbnNvbGUubG9nKCfwn5qAIERlcGxveWVycyBSZWFkeS4nKVxuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiYmFja2VuZC8xLWRlcGxveS1zbWFydC1jb250cmFjdC5tZCIsCiAgICAgICAgICAgICAgICAgICAgImNvbnRlbnQiOiAiIyBEZXBsb3lpbmcgYSBTbWFydCBDb250cmFjdCBvbiBNaW5hIFByb3RvY29sXG5cblRoaXMgc2NyaXB0IGRlbW9uc3RyYXRlcyB0aGUgcHJvY2VzcyBvZiBkZXBsb3lpbmcgYSBzbWFydCBjb250cmFjdCBvbiB0aGUgTWluYSBQcm90b2NvbCBibG9ja2NoYWluIHVzaW5nIHRoZSBgbzFqc2AgbGlicmFyeS4gSXQgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBzdGVwczpcblxuIyMgSW1wb3J0aW5nIE5lY2Vzc2FyeSBNb2R1bGVzXG5cbmBgYGphdmFzY3JpcHRcbmltcG9ydCB7IE1pbmEsIEFjY291bnRVcGRhdGUgfSBmcm9tICdvMWpzJ1xuaW1wb3J0IHsgRWFzeU1pbmEgfSBmcm9tICdlYXN5bWluYSdcbmltcG9ydCB7IFNxdWFyZSB9IGZyb20gJy4uL2NvbnRyYWN0cy9idWlsZC9TcXVhcmUuanMnXG5gYGBcblxuSW4gdGhpcyBzZWN0aW9uLCB3ZSBpbXBvcnQgdGhlIHJlcXVpcmVkIG1vZHVsZXMgYW5kIGxpYnJhcmllcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTWluYSBQcm90b2NvbC4gYG8xanNgIHByb3ZpZGVzIGVzc2VudGlhbCBmdW5jdGlvbmFsaXR5LCBhbmQgd2UgYWxzbyBpbXBvcnQgdGhlIGBFYXN5TWluYWAgY2xhc3MgYW5kIGEgc21hcnQgY29udHJhY3QgY2xhc3MgbmFtZWQgYFNxdWFyZWAuXG5cbiMjIFNldHRpbmcgVXAgdGhlIE1pbmEgTmV0d29ya1xuXG5gYGBqYXZhc2NyaXB0XG5jb25zb2xlLmxvZygn8J+MkCBBZGRpbmcgTmV0d29yaycpXG5jb25zdCBCZXJrZWxleSA9IE1pbmEuTmV0d29yayggXG4gICAgICdodHRwczovL3Byb3h5LmJlcmtlbGV5Lm1pbmFleHBsb3Jlci5jb20vZ3JhcGhxbCcgXG4gICAgLy8naHR0cHM6Ly9hcGkubWluYXNjYW4uaW8vbm9kZS9iZXJrZWxleS92MS9ncmFwaHFsJ1xuKVxuTWluYS5zZXRBY3RpdmVJbnN0YW5jZShCZXJrZWxleSlcbmBgYFxuXG5IZXJlLCB3ZSBzcGVjaWZ5IGFuZCBhY3RpdmF0ZSB0aGUgTWluYSBuZXR3b3JrIGJ5IHByb3ZpZGluZyB0aGUgR3JhcGhRTCBlbmRwb2ludC4gVGhlIHNjcmlwdCBpcyBjb25maWd1cmVkIHRvIGludGVyYWN0IHdpdGggdGhlIEJlcmtlbGV5IG5ldHdvcmsgb2YgdGhlIE1pbmEgUHJvdG9jb2wuXG5cbiMjIEluaXRpYWxpemluZyBFYXN5TWluYVxuXG5gYGBqYXZhc2NyaXB0XG5jb25zb2xlLmxvZygn4pyoIEFkZGluZyBFYXN5TWluYScpXG5jb25zdCBlYXN5TWluYSA9IG5ldyBFYXN5TWluYSggeyAnbmV0d29ya05hbWUnOiAnYmVya2VsZXknIH0gKVxuYGBgXG5cbldlIGluaXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgdGhlIGBFYXN5TWluYWAgY2xhc3MsIHNwZWNpZnlpbmcgdGhlIG5ldHdvcmsgbmFtZSBhcyAnYmVya2VsZXkuJyBUaGlzIGluc3RhbmNlIHNpbXBsaWZpZXMgdmFyaW91cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgTWluYSBQcm90b2NvbC5cblxuIyMgSW1wb3J0aW5nIEFjY291bnRzXG5cbmBgYGphdmFzY3JpcHRcbmNvbnNvbGUubG9nKCfwn5SRIEltcG9ydGluZyBBY2NvdW50cycpXG5jb25zdCBkZXBsb3llciA9IGF3YWl0IGVhc3lNaW5hLmdldEFjY291bnQoIHtcbiAgICAnbmFtZSc6ICdhbGljZScsXG4gICAgJ2dyb3VwTmFtZSc6ICdhJyxcbiAgICAnY2hlY2tTdGF0dXMnOiB0cnVlLCAvLyBvcHRpb25hbCwgY2hlY2tzIGlmIGFjY291bnQgaGFzIGJhbGFuY2VcbiAgICAnc3RyaWN0JzogdHJ1ZSAvLyBvcHRpb25hbCwgdGhyb3cgYW4gZXJyb3IgaWYgYWNjb3VudCBoYXMgbm8gYmFsYW5jZVxufSApXG5jb25zb2xlLmxvZygnICAgRXhwbG9yZXI6JywgZGVwbG95ZXJbJ2V4cGxvcmVyJ10pXG5gYGBcblxuVGhpcyBzZWN0aW9uIGltcG9ydHMgYW4gYWNjb3VudCBuYW1lZCAnYWxpY2UnIGZyb20gdGhlICdhJyBncm91cCB1c2luZyB0aGUgYGdldEFjY291bnRgIG1ldGhvZC4gSXQgb3B0aW9uYWxseSBjaGVja3MgdGhlIGFjY291bnQncyBzdGF0dXMgYW5kIHRocm93cyBhbiBlcnJvciBpZiB0aGUgYWNjb3VudCBoYXMgbm8gYmFsYW5jZS4gVGhlIGFjY291bnQgaW5mb3JtYXRpb24sIGluY2x1ZGluZyB0aGUgJ2V4cGxvcmVyJyBwcm9wZXJ0eSwgaXMgbG9nZ2VkLlxuXG4jIyBJbXBvcnRpbmcgYW5kIENvbXBpbGluZyB0aGUgQ29udHJhY3RcblxuYGBgamF2YXNjcmlwdFxuY29uc29sZS5sb2coJ/Cfk5wgSW1wb3J0aW5nIENvbnRyYWN0JylcbmNvbnN0IGNvbnRyYWN0ID0gYXdhaXQgZWFzeU1pbmEucmVxdWVzdENvbnRyYWN0KCB7XG4gICAgJ25hbWUnOiAnc3F1YXJlJyxcbiAgICAnc291cmNlUGF0aCc6ICcuLi9jb250cmFjdHMvYnVpbGQvU3F1YXJlLmpzJyxcbiAgICBkZXBsb3llclxufSApXG5cbmNvbnNvbGUubG9nKCfwn6ewIENvbXBpbGluZyBDbGFzcycpXG5jb25zdCB6a0FwcCA9IG5ldyBTcXVhcmUoY29udHJhY3RbJ3B1YmxpY0tleSddWydmaWVsZCddKVxuY29uc3QgeyB2ZXJpZmljYXRpb25LZXkgfSA9IGF3YWl0IFNxdWFyZS5jb21waWxlKClcbmBgYFxuXG5JbiB0aGlzIHBhcnQsIHRoZSBzY3JpcHQgaW1wb3J0cyB0aGUgJ3NxdWFyZScgY29udHJhY3QgYW5kIGNvbXBpbGVzIGl0LiBUaGUgY29udHJhY3QncyBwdWJsaWMga2V5IGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYHprQXBwYCBvYmplY3QuIFRoZSB2ZXJpZmljYXRpb24ga2V5IGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb21waWxlZCBjb250cmFjdC5cblxuIyMgUHJlcGFyaW5nIGFuZCBQcm92aW5nIFRyYW5zYWN0aW9uc1xuXG5gYGBqYXZhc2NyaXB0XG5jb25zb2xlLmxvZygn8J+agCBQcmVwYXJpbmcgVHJhbnNhY3Rpb25zJylcbmNvbnN0IHR4ID0gYXdhaXQgTWluYS50cmFuc2FjdGlvbihcbiAgICB7XG4gICAgICAgICdmZWVQYXllcktleSc6IGRlcGxveWVyWydwcml2YXRlS2V5J11bJ2ZpZWxkJ10sXG4gICAgICAgICdmZWUnOiAxMDBfMDAwXzAwMCxcbiAgICAgICAgJ21lbW8nOiAnaGVsbG8gd29ybGQhJ1xuICAgIH0sXG4gICAgKCkgPT4ge1xuICAgICAgICBBY2NvdW50VXBkYXRlLmZ1bmROZXdBY2NvdW50KGRlcGxveWVyWydwcml2YXRlS2V5J11bJ2ZpZWxkJ10pXG4gICAgICAgIHprQXBwLmRlcGxveSh7XG4gICAgICAgICAgICAnemthcHBLZXknOiBjb250cmFjdFsncHJpdmF0ZUtleSddWydmaWVsZCddLFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uS2V5LFxuICAgICAgICAgICAgJ3prQXBwVXJpJzogJ2hlbGxvLXdvcmxkJ1xuICAgICAgICB9KVxuICAgICAgICB6a0FwcC5pbml0KClcbiAgICB9XG4pXG5cbmNvbnNvbGUubG9nKCfwn5SNIFByb3ZpbmcgVHJhbnNhY3Rpb24nKVxuYXdhaXQgdHgucHJvdmUoKVxuYGBgXG5cbkhlcmUsIHRoZSBzY3JpcHQgcHJlcGFyZXMgYW5kIGNvbmZpZ3VyZXMgYSB0cmFuc2FjdGlvbiwgc3BlY2lmeWluZyB0aGUgZmVlLCBmZWUgcGF5ZXIsIGFuZCBtZW1vLiBJdCBmdW5kcyB0aGUgZGVwbG95ZXIgYWNjb3VudCBhbmQgZGVwbG95cyB0aGUgJ3prQXBwJyB3aXRoIGl0cyBhc3NvY2lhdGVkIGtleXMgYW5kIGEgJ3prQXBwVXJpLicgQWZ0ZXJ3YXJkLCBpdCBwcm92ZXMgdGhlIHRyYW5zYWN0aW9uLlxuXG4jIyBTaWduaW5nIGFuZCBTZW5kaW5nIFRyYW5zYWN0aW9uc1xuXG5gYGBqYXZhc2NyaXB0XG5jb25zb2xlLmxvZygn4pyN77iPICBTaWduaW5nIFRyYW5zYWN0aW9uJylcbmNvbnN0IHNpZ25lZE1lc3NhZ2UgPSB0eC5zaWduKFsgXG4gICAgZGVwbG95ZXJbJ3ByaXZhdGVLZXknXVsnZmllbGQnXSwgXG4gICAgY29udHJhY3RbJ3ByaXZhdGVLZXknXVsnZmllbGQnXSBcbl0pXG5cbmNvbnNvbGUubG9nKCfwn5qaIFNlbmRpbmcgVHJhbnNhY3Rpb24nKVxuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzaWduZWRNZXNzYWdlLnNlbmQoKVxuYGBgXG5cblRoaXMgc2VjdGlvbiBzaWducyB0aGUgdHJhbnNhY3Rpb24gd2l0aCB0aGUgZGVwbG95ZXIncyBhbmQgY29udHJhY3QncyBwcml2YXRlIGtleXMuIFRoZW4sIGl0IHNlbmRzIHRoZSBzaWduZWQgdHJhbnNhY3Rpb24uXG5cbiMjIFNhdmluZyB0aGUgRGVwbG95ZWQgQ29udHJhY3RcblxuYGBgamF2YXNjcmlwdFxuY29uc29sZS5sb2coJ/Cfkr4gU2F2aW5nIENvbnRyYWN0JylcbmNvbnN0IGRlcGxveWVkQ29udHJhY3QgPSBhd2FpdCBlYXN5TWluYS5zYXZlQ29udHJhY3QoeyBcbiAgICByZXNwb25zZSxcbiAgICB2ZXJpZmljYXRpb25LZXlcbn0pXG5cbmNvbnNvbGUubG9nKCcgICBFeHBsb3JlcjonLCBkZXBsb3llZENvbnRyYWN0WydoZWFkZXInXVsndHhIYXNoRXhwbG9yZXInXSlcbmBgYFxuXG5GaW5hbGx5LCB0aGUgc2NyaXB0IHNhdmVzIHRoZSBkZXBsb3llZCBjb250cmFjdCBhbmQgbG9ncyBpdHMgYXNzb2NpYXRlZCB0cmFuc2FjdGlvbiBoYXNoIGluIHRoZSBleHBsb3Jlci4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICJiYWNrZW5kLzEtZGVwbG95LXNtYXJ0LWNvbnRyYWN0Lm1qcyIsCiAgICAgICAgICAgICAgICAgICAgImNvbnRlbnQiOiAiaW1wb3J0ICogYXMgbzFqcyBmcm9tICdvMWpzJ1xuaW1wb3J0IHsgTWluYSwgQWNjb3VudFVwZGF0ZSB9IGZyb20gJ28xanMnXG5cbmltcG9ydCB7IEVhc3lNaW5hIH0gZnJvbSAnZWFzeW1pbmEnXG5pbXBvcnQgeyBTcXVhcmUgfSBmcm9tICcuLi9jb250cmFjdHMvYnVpbGQvU3F1YXJlLmpzJ1xuXG5jb25zb2xlLmxvZygn8J+MkCBBZGRpbmcgTmV0d29yaycpXG5jb25zdCBCZXJrZWxleSA9IE1pbmEuTmV0d29yayggXG4gICAgLy8gJ2h0dHBzOi8vcHJveHkuYmVya2VsZXkubWluYWV4cGxvcmVyLmNvbS9ncmFwaHFsJyBcbiAgICAnaHR0cHM6Ly9hcGkubWluYXNjYW4uaW8vbm9kZS9iZXJrZWxleS92MS9ncmFwaHFsJ1xuKVxuTWluYS5zZXRBY3RpdmVJbnN0YW5jZSggQmVya2VsZXkgKVxuXG5jb25zb2xlLmxvZygn4pyoIEFkZGluZyBFYXN5TWluYScpXG5jb25zdCBlYXN5TWluYSA9IG5ldyBFYXN5TWluYSggeyAnbmV0d29ya05hbWUnOiAnYmVya2VsZXknLCBvMWpzIH0gKVxuXG5jb25zb2xlLmxvZygn8J+UkSBJbXBvcnRpbmcgQWNjb3VudHMnKVxuY29uc3QgZGVwbG95ZXIgPSBhd2FpdCBlYXN5TWluYS5nZXRBY2NvdW50KCB7XG4gICAgJ25hbWUnOiAnYWxpY2UnLFxuICAgICdncm91cE5hbWUnOiAnYScsXG4gICAgJ2NoZWNrU3RhdHVzJzogdHJ1ZSwgLy8gb3B0aW9uYWwsIGNoZWNrcyBpZiBhY2NvdW50IGhhcyBiYWxhbmNlXG4gICAgJ3N0cmljdCc6IHRydWUgLy8gb3B0aW9uYWwsIHRocm93IGFuIGVycm9yIGlmIGFjY291bnQgaGFzIG5vIGJhbGFuY2Vcbn0gKVxuY29uc29sZS5sb2coJyAgIEV4cGxvcmVyOicsIGRlcGxveWVyWydleHBsb3JlciddKVxuXG5jb25zb2xlLmxvZygn8J+TnCBJbXBvcnRpbmcgQ29udHJhY3QnKVxuY29uc3QgY29udHJhY3QgPSBhd2FpdCBlYXN5TWluYS5yZXF1ZXN0Q29udHJhY3QoIHtcbiAgICAnbmFtZSc6ICdzcXVhcmUnLFxuICAgICdzb3VyY2VQYXRoJzogJy4uL2NvbnRyYWN0cy9idWlsZC9TcXVhcmUuanMnLFxuICAgIGRlcGxveWVyXG59IClcblxuY29uc29sZS5sb2coJ/Cfp7AgQ29tcGlsaW5nIENsYXNzJylcbmNvbnN0IHprQXBwID0gbmV3IFNxdWFyZShjb250cmFjdFsncHVibGljS2V5J11bJ2ZpZWxkJ10pXG5jb25zdCB7IHZlcmlmaWNhdGlvbktleSB9ID0gYXdhaXQgU3F1YXJlLmNvbXBpbGUoKVxuXG5jb25zb2xlLmxvZygn8J+agCBQcmVwYXJpbmcgVHJhbnNhY3Rpb25zJylcbmNvbnN0IHR4ID0gYXdhaXQgTWluYS50cmFuc2FjdGlvbihcbiAgICB7XG4gICAgICAgICdmZWVQYXllcktleSc6IGRlcGxveWVyWydwcml2YXRlS2V5J11bJ2ZpZWxkJ10sXG4gICAgICAgICdmZWUnOiAxMDBfMDAwXzAwMCxcbiAgICAgICAgJ21lbW8nOiAnaGVsbG8gd29ybGQhJ1xuICAgIH0sXG4gICAgKCkgPT4ge1xuICAgICAgICBBY2NvdW50VXBkYXRlLmZ1bmROZXdBY2NvdW50KGRlcGxveWVyWydwcml2YXRlS2V5J11bJ2ZpZWxkJ10pXG4gICAgICAgIHprQXBwLmRlcGxveSh7XG4gICAgICAgICAgICAnemthcHBLZXknOiBjb250cmFjdFsncHJpdmF0ZUtleSddWydmaWVsZCddLFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uS2V5LFxuICAgICAgICAgICAgJ3prQXBwVXJpJzogJ2hlbGxvLXdvcmxkJ1xuICAgICAgICB9KVxuICAgICAgICB6a0FwcC5pbml0KClcbiAgICB9XG4pXG5cbmNvbnNvbGUubG9nKCfwn5SNIFByb3ZpbmcgVHJhbnNhY3Rpb24nKVxuYXdhaXQgdHgucHJvdmUoKVxuXG5jb25zb2xlLmxvZygn4pyN77iPICBTaWduaW5nIFRyYW5zYWN0aW9uJylcbmNvbnN0IHNpZ25lZE1lc3NhZ2UgPSB0eC5zaWduKFsgXG4gICAgZGVwbG95ZXJbJ3ByaXZhdGVLZXknXVsnZmllbGQnXSwgXG4gICAgY29udHJhY3RbJ3ByaXZhdGVLZXknXVsnZmllbGQnXSBcbl0pXG5cbmNvbnNvbGUubG9nKCfwn5qaIFNlbmRpbmcgVHJhbnNhY3Rpb24nKVxuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzaWduZWRNZXNzYWdlLnNlbmQoKVxuXG5jb25zb2xlLmxvZygn8J+SviBTYXZpbmcgQ29udHJhY3QnKVxuY29uc3QgZGVwbG95ZWRDb250cmFjdCA9IGF3YWl0IGVhc3lNaW5hLnNhdmVDb250cmFjdCh7IFxuICAgIHJlc3BvbnNlLFxuICAgIHZlcmlmaWNhdGlvbktleVxufSlcblxuY29uc29sZS5sb2coJyAgIEV4cGxvcmVyOicsIGRlcGxveWVkQ29udHJhY3RbJ2hlYWRlciddWyd0eEhhc2hFeHBsb3JlciddKVxuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiYmFja2VuZC8yLWNhbGwtbWV0aG9kLm1kIiwKICAgICAgICAgICAgICAgICAgICAiY29udGVudCI6ICIjIEludGVyYWN0aW5nIHdpdGggTWluYSBQcm90b2NvbCBVc2luZyBFYXN5TWluYVxuXG5UaGlzIHNjcmlwdCBkZW1vbnN0cmF0ZXMgaG93IHRvIGludGVyYWN0IHdpdGggdGhlIE1pbmEgUHJvdG9jb2wgYmxvY2tjaGFpbiB1c2luZyB0aGUgYG8xanNgIGxpYnJhcnkgYW5kIHRoZSBgRWFzeU1pbmFgIG1vZHVsZS4gSXQgcGVyZm9ybXMgdmFyaW91cyB0YXNrcywgaW5jbHVkaW5nIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgaW1wb3J0aW5nIGFuIGFjY291bnQsIHdvcmtpbmcgd2l0aCBhIGRlcGxveWVkIHNtYXJ0IGNvbnRyYWN0LCBhbmQgZXhlY3V0aW5nIHRyYW5zYWN0aW9ucy4gSGVyZSdzIGEgYnJlYWtkb3duIG9mIHRoZSBzY3JpcHQncyBrZXkgc3RlcHM6XG5cbiMjIEltcG9ydGluZyBOZWNlc3NhcnkgTW9kdWxlc1xuXG5gYGBqYXZhc2NyaXB0XG5pbXBvcnQgeyBNaW5hLCBGaWVsZCB9IGZyb20gJ28xanMnXG5pbXBvcnQgeyBFYXN5TWluYSB9IGZyb20gJ2Vhc3ltaW5hJ1xuYGBgXG5cbkluIHRoaXMgc2VjdGlvbiwgdGhlIHNjcmlwdCBpbXBvcnRzIHJlcXVpcmVkIG1vZHVsZXMgYW5kIGxpYnJhcmllcywgaW5jbHVkaW5nIGBNaW5hYCBhbmQgYEZpZWxkYCBmcm9tIGBvMWpzYCwgYXMgd2VsbCBhcyB0aGUgY3VzdG9tIGBFYXN5TWluYWAgbW9kdWxlLlxuXG4jIyBTZXR0aW5nIFVwIHRoZSBNaW5hIE5ldHdvcmtcblxuYGBgamF2YXNjcmlwdFxuY29uc29sZS5sb2coJ/CfjJAgQWRkaW5nIE5ldHdvcmsuLi4nKVxuY29uc3QgQmVya2VsZXkgPSBNaW5hLk5ldHdvcmsoIFxuICAgICdodHRwczovL3Byb3h5LmJlcmtlbGV5Lm1pbmFleHBsb3Jlci5jb20vZ3JhcGhxbCcgXG4gICAgLy8gJ2h0dHBzOi8vYXBpLm1pbmFzY2FuLmlvL25vZGUvYmVya2VsZXkvdjEvZ3JhcGhxbCdcbilcbk1pbmEuc2V0QWN0aXZlSW5zdGFuY2UoQmVya2VsZXkpXG5gYGBcblxuSGVyZSwgdGhlIHNjcmlwdCBzZXRzIHVwIHRoZSBNaW5hIG5ldHdvcmsgYnkgc3BlY2lmeWluZyB0aGUgR3JhcGhRTCBlbmRwb2ludCwgZW5hYmxpbmcgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBCZXJrZWxleSBuZXR3b3JrIG9mIHRoZSBNaW5hIFByb3RvY29sLlxuXG4jIyBJbml0aWFsaXppbmcgRWFzeU1pbmFcblxuYGBgamF2YXNjcmlwdFxuY29uc29sZS5sb2coJ+KcqCBBZGRpbmcgRWFzeU1pbmEuLi4nKVxuY29uc3QgZWFzeU1pbmEgPSBuZXcgRWFzeU1pbmEoeyAnbmV0d29ya05hbWUnOiAnYmVya2VsZXknIH0pXG5gYGBcblxuQW4gaW5zdGFuY2Ugb2YgYEVhc3lNaW5hYCBpcyBjcmVhdGVkLCBzaW1wbGlmeWluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgTWluYSBQcm90b2NvbC4gVGhlIG5ldHdvcmsgbmFtZSBpcyBzZXQgdG8gJ2JlcmtlbGV5JyB0byBpbmRpY2F0ZSB0aGUgdGFyZ2V0IG5ldHdvcmsuXG5cbiMjIEltcG9ydGluZyBhbiBBY2NvdW50XG5cbmBgYGphdmFzY3JpcHRcbmNvbnNvbGUubG9nKCfwn5SRIEltcG9ydGluZyBBY2NvdW50Li4uJylcbmNvbnN0IGRlcGxveWVyID0gYXdhaXQgZWFzeU1pbmEuZ2V0QWNjb3VudCh7XG4gICAgJ25hbWUnOiAnYm9iJyxcbiAgICAnZ3JvdXBOYW1lJzogJ2EnLFxuICAgICdjaGVja1N0YXR1cyc6IHRydWUsXG4gICAgJ3N0cmljdCc6IHRydWVcbn0pXG5jb25zb2xlLmxvZygnICAgRXhwbG9yZXI6JywgZGVwbG95ZXJbJ2V4cGxvcmVyJ10pXG5gYGBcblxuVGhpcyBzZWN0aW9uIGltcG9ydHMgYW4gYWNjb3VudCBuYW1lZCAnYm9iJyBmcm9tIHRoZSAnYScgZ3JvdXAgdXNpbmcgdGhlIGBnZXRBY2NvdW50YCBtZXRob2QuIEl0IGNoZWNrcyB0aGUgYWNjb3VudCdzIHN0YXR1cyBhbmQgbG9ncyB0aGUgYWNjb3VudCdzICdleHBsb3JlcicgcHJvcGVydHkuXG5cbiMjIEltcG9ydGluZyBhIERlcGxveWVkIENvbnRyYWN0XG5cbmBgYGphdmFzY3JpcHRcbmNvbnNvbGUubG9nKCfwn5OdIEFkZGluZyBDb250cmFjdC4uLicpXG5jb25zdCBjb250cmFjdCA9IGF3YWl0IGVhc3lNaW5hLmdldERlcGxveWVkQ29udHJhY3Qoe1xuICAgICduYW1lJzogJ3NxdWFyZScsXG4gICAgJ3Byb2plY3ROYW1lJzogJ2dldHRpbmctc3RhcnRlZCdcbn0pXG5jb25zb2xlLmxvZygnICAgRXhwbG9yZXI6JywgY29udHJhY3RbJ2V4cGxvcmVyJ10pXG5gYGBcblxuVGhlIHNjcmlwdCBpbXBvcnRzIGEgZGVwbG95ZWQgc21hcnQgY29udHJhY3QgbmFtZWQgJ3NxdWFyZScgd2l0aCB0aGUgcHJvamVjdCBuYW1lICdnZXR0aW5nLXN0YXJ0ZWQnIHVzaW5nIHRoZSBgZ2V0RGVwbG95ZWRDb250cmFjdGAgbWV0aG9kLiBJdCBsb2dzIHRoZSBjb250cmFjdCdzICdleHBsb3JlcicgcHJvcGVydHkuXG5cbiMjIExvYWRpbmcgU21hcnQgQ29udHJhY3QgQ29kZVxuXG5gYGBqYXZhc2NyaXB0XG5jb25zb2xlLmxvZygn8J+ThCBMb2FkaW5nIFNtYXJ0IENvbnRyYWN0IENvZGUuLi4nKVxuY29uc3QgeyBzb3VyY2VDb2RlIH0gPSBjb250cmFjdFxuY29uc3QgeyBTcXVhcmUgfSA9IGF3YWl0IGVhc3lNaW5hLmxvYWRNb2R1bGVFeHBlcmltZW50YWwoeyBzb3VyY2VDb2RlIH0pXG5gYGBcblxuVGhpcyBwYXJ0IGxvYWRzIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgc21hcnQgY29udHJhY3QgYW5kIGV4dHJhY3RzIHRoZSBgU3F1YXJlYCBjbGFzcyB1c2luZyBgbG9hZE1vZHVsZUV4cGVyaW1lbnRhbGAuIEl0IHByZXBhcmVzIHRoZSBjb250cmFjdCBjb2RlIGZvciBmdXJ0aGVyIHVzZS5cblxuIyMgQ29tcGlsaW5nIGFuZCBQcmVwYXJpbmcgVHJhbnNhY3Rpb25zXG5cbmBgYGphdmFzY3JpcHRcbmNvbnNvbGUubG9nKCfwn5qAIENvbXBpbGluZy4uLicpXG5jb25zdCB6a0FwcEluc3RhbmNlID0gbmV3IFNxdWFyZShjb250cmFjdFsncHVibGljS2V5J11bJ2ZpZWxkJ10pXG5cbmNvbnNvbGUubG9nKCfwn6eqIENvbXBpbGluZyAoYXdhaXRlZCkuLi4nKVxuYXdhaXQgU3F1YXJlLmNvbXBpbGUoKVxuXG5jb25zb2xlLmxvZygn8J+TnCBQcmVwYXJlIFRyYW5zYWN0aW9ucy4uLicpXG5jb25zdCB0eCA9IGF3YWl0IE1pbmEudHJhbnNhY3Rpb24oXG4gICAge1xuICAgICAgICAnZmVlUGF5ZXJLZXknOiBkZXBsb3llclsncHJpdmF0ZUtleSddWydmaWVsZCddLFxuICAgICAgICAnZmVlJzogMTAwXzAwMF8wMDAsXG4gICAgICAgICdtZW1vJzogJ2FiYydcbiAgICB9LFxuICAgICgpID0+IHtcbiAgICAgICAgemtBcHBJbnN0YW5jZS51cGRhdGUoIEZpZWxkKCA5ICkgKSBcbiAgICB9XG4pXG5gYGBcblxuSW4gdGhpcyBzZWN0aW9uLCB0aGUgc2NyaXB0IGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGBTcXVhcmVgIGNsYXNzLCBhd2FpdHMgdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBjb250cmFjdCwgYW5kIHByZXBhcmVzIGEgdHJhbnNhY3Rpb24uIFRoZSB0cmFuc2FjdGlvbiBpbmNsdWRlcyBkZXRhaWxzIHN1Y2ggYXMgdGhlIGZlZSBwYXllciwgZmVlIGFtb3VudCwgbWVtbywgYW5kIHBlcmZvcm1zIGFuIHVwZGF0ZSBvcGVyYXRpb24gb24gdGhlIHNtYXJ0IGNvbnRyYWN0LiBOb3RlIHRoYXQgd2l0aCBlYWNoIGV4ZWN1dGlvbiwgdGhlIG51bWJlciBpbiB0aGUgYEZpZWxkYCBjbGFzcyBuZWVkcyB0byBiZSBhZGp1c3RlZCwgZm9yIGV4YW1wbGUsIDksIDgxLCA2NTYxLCA0MzA0NjcyMS4uLlxuXG4jIyBQcm92aW5nLCBTaWduaW5nLCBhbmQgU2VuZGluZyBUcmFuc2FjdGlvbnNcblxuYGBgamF2YXNjcmlwdFxuY29uc29sZS5sb2coJ/CflI0gUHJvdmluZyBUcmFuc2FjdGlvbi4uLicpXG5hd2FpdCB0eC5wcm92ZSgpXG5cbmNvbnNvbGUubG9nKCfinI3vuI8gU2lnbmluZyBUcmFuc2FjdGlvbi4uLicpXG5jb25zdCBzaWduZWRNZXNzYWdlID0gdHguc2lnbihbZGVwbG95ZXJbJ3ByaXZhdGVLZXknXVsnZmllbGQnXV0pXG5cbmNvbnNvbGUubG9nKCfwn5qaIFNlbmRpbmcgVHJhbnNhY3Rpb24uLi4nKVxuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzaWduZWRNZXNzYWdlLnNlbmQoKVxuY29uc29sZS5sb2coYCAgIEV4cGxvcmVyIFVSTDogaHR0cHM6Ly9taW5hc2Nhbi5pby9iZXJrZWxleS90eC8ke3Jlc3BvbnNlLmhhc2goKX1gKVxuYGBgXG5cblRoZSBzY3JpcHQgcHJvdmVzIHRoZSB0cmFuc2FjdGlvbiwgc2lnbnMgaXQgdXNpbmcgdGhlIGRlcGxveWVyJ3MgcHJpdmF0ZSBrZXksIGFuZCBzZW5kcyB0aGUgdHJhbnNhY3Rpb24uIEl0IGFsc28gbG9ncyB0aGUgZXhwbG9yZXIgVVJMIG9mIHRoZSB0cmFuc2FjdGlvbiBmb3IgcmVmZXJlbmNlLiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogImJhY2tlbmQvMi1jYWxsLW1ldGhvZC5tanMiLAogICAgICAgICAgICAgICAgICAgICJjb250ZW50IjogImltcG9ydCAqIGFzIG8xanMgZnJvbSAnbzFqcydcbmNvbnN0IHsgTWluYSwgRmllbGQgfSA9IG8xanNcblxuaW1wb3J0IHsgRWFzeU1pbmEgfSBmcm9tICdlYXN5bWluYSdcblxuXG5jb25zb2xlLmxvZygn8J+MkCBBZGRpbmcgTmV0d29yay4uLicpXG5jb25zdCBCZXJrZWxleSA9IE1pbmEuTmV0d29yayggXG4gICAgLy8gJ2h0dHBzOi8vcHJveHkuYmVya2VsZXkubWluYWV4cGxvcmVyLmNvbS9ncmFwaHFsJyBcbiAgICAnaHR0cHM6Ly9hcGkubWluYXNjYW4uaW8vbm9kZS9iZXJrZWxleS92MS9ncmFwaHFsJ1xuKVxuTWluYS5zZXRBY3RpdmVJbnN0YW5jZShCZXJrZWxleSlcbiBcbmNvbnNvbGUubG9nKCfinKggQWRkaW5nIEVhc3lNaW5hLi4uJylcbmNvbnN0IGVhc3lNaW5hID0gbmV3IEVhc3lNaW5hKHsgJ25ldHdvcmtOYW1lJzogJ2JlcmtlbGV5JywgbzFqcyB9KVxuXG5jb25zb2xlLmxvZygn8J+UkSBJbXBvcnRpbmcgQWNjb3VudC4uLicpXG5jb25zdCBkZXBsb3llciA9IGF3YWl0IGVhc3lNaW5hLmdldEFjY291bnQoe1xuICAgICduYW1lJzogJ2FsaWNlJyxcbiAgICAnZ3JvdXBOYW1lJzogJ2EnLFxuICAgICdjaGVja1N0YXR1cyc6IHRydWUsXG4gICAgJ3N0cmljdCc6IHRydWVcbn0pXG5jb25zb2xlLmxvZygnICAgRXhwbG9yZXI6JywgZGVwbG95ZXJbJ2V4cGxvcmVyJ10pXG5cbmNvbnNvbGUubG9nKCfwn5OdIEFkZGluZyBDb250cmFjdC4uLicpXG5jb25zdCBjb250cmFjdCA9IGF3YWl0IGVhc3lNaW5hLmdldERlcGxveWVkQ29udHJhY3Qoe1xuICAgICduYW1lJzogJ3NxdWFyZScsXG4gICAgJ3Byb2plY3ROYW1lJzogJ2hlbGxvLXdvcmxkJyxcbiAgICAnY2hlY2tTdGF0dXMnOiB0cnVlLFxuICAgICdzdHJpY3QnOiB0cnVlXG59KVxuY29uc29sZS5sb2coICdDJywgIGNvbnRyYWN0KVxuY29uc29sZS5sb2coJyAgIEV4cGxvcmVyOicsIGNvbnRyYWN0WydleHBsb3JlciddKVxuXG5jb25zb2xlLmxvZygn8J+ThCBMb2FkaW5nIFNtYXJ0IENvbnRyYWN0IENvZGUuLi4nKVxuY29uc3QgeyBzb3VyY2VDb2RlIH0gPSBjb250cmFjdFxuY29uc3QgeyBTcXVhcmUgfSA9IGF3YWl0IGVhc3lNaW5hLmxvYWRNb2R1bGVFeHBlcmltZW50YWwoeyBzb3VyY2VDb2RlIH0pXG5cbmNvbnNvbGUubG9nKCfwn5qAIENvbXBpbGluZy4uLicpXG5jb25zdCB6a0FwcEluc3RhbmNlID0gbmV3IFNxdWFyZShjb250cmFjdFsncHVibGljS2V5J11bJ2ZpZWxkJ10pXG5cbmNvbnNvbGUubG9nKCfwn6eqIENvbXBpbGluZyAoYXdhaXRlZCkuLi4nKVxuYXdhaXQgU3F1YXJlLmNvbXBpbGUoKVxuXG5jb25zb2xlLmxvZygn8J+TnCBQcmVwYXJlIFRyYW5zYWN0aW9ucy4uLicpXG5jb25zdCB0eCA9IGF3YWl0IE1pbmEudHJhbnNhY3Rpb24oXG4gICAge1xuICAgICAgICAnZmVlUGF5ZXJLZXknOiBkZXBsb3llclsncHJpdmF0ZUtleSddWydmaWVsZCddLFxuICAgICAgICAnZmVlJzogMTAwXzAwMF8wMDAsXG4gICAgICAgICdtZW1vJzogJ2FiYydcbiAgICB9LFxuICAgICgpID0+IHtcbiAgICAgICAgemtBcHBJbnN0YW5jZS51cGRhdGUoIEZpZWxkKCA5ICkgKSBcbiAgICB9XG4pXG5cbmNvbnNvbGUubG9nKCfwn5SNIFByb3ZpbmcgVHJhbnNhY3Rpb24uLi4nKVxuYXdhaXQgdHgucHJvdmUoKVxuXG5jb25zb2xlLmxvZygn4pyN77iPIFNpZ25pbmcgVHJhbnNhY3Rpb24uLi4nKVxuY29uc3Qgc2lnbmVkTWVzc2FnZSA9IHR4LnNpZ24oW2RlcGxveWVyWydwcml2YXRlS2V5J11bJ2ZpZWxkJ11dKVxuXG5jb25zb2xlLmxvZygn8J+amiBTZW5kaW5nIFRyYW5zYWN0aW9uLi4uJylcbmNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2lnbmVkTWVzc2FnZS5zZW5kKClcbmNvbnNvbGUubG9nKGAgICBFeHBsb3JlciBVUkw6IGh0dHBzOi8vbWluYXNjYW4uaW8vYmVya2VsZXkvdHgvJHtyZXNwb25zZS5oYXNoKCl9YClcbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImNvbnRyYWN0cyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiY29udHJhY3RzL1NxdWFyZS50cyIsCiAgICAgICAgICAgICAgICAgICAgImNvbnRlbnQiOiAiaW1wb3J0IHtcbiAgICBGaWVsZCxcbiAgICBTbWFydENvbnRyYWN0LFxuICAgIHN0YXRlLFxuICAgIFN0YXRlLFxuICAgIG1ldGhvZCxcbiAgICBQZXJtaXNzaW9uc1xuICB9IGZyb20gJ28xanMnO1xuXG5cbmV4cG9ydCBjbGFzcyBTcXVhcmUgZXh0ZW5kcyBTbWFydENvbnRyYWN0IHtcbiAgICBAc3RhdGUoRmllbGQpIG51bSA9IFN0YXRlPEZpZWxkPigpO1xuXG5cbiAgICBpbml0KCkge1xuICAgICAgc3VwZXIuaW5pdCgpO1xuICAgICAgdGhpcy5hY2NvdW50LnBlcm1pc3Npb25zLnNldCh7XG4gICAgICAgIC4uLlBlcm1pc3Npb25zLmRlZmF1bHQoKVxuICAgICAgfSk7XG4gICAgICB0aGlzLm51bS5zZXQoRmllbGQoMykpO1xuICAgIH1cblxuXG4gICAgQG1ldGhvZCB1cGRhdGUoc3F1YXJlOiBGaWVsZCkge1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5udW0uZ2V0KCk7XG4gICAgICB0aGlzLm51bS5hc3NlcnRFcXVhbHMoY3VycmVudFN0YXRlKTtcbiAgICAgIHNxdWFyZS5hc3NlcnRFcXVhbHMoY3VycmVudFN0YXRlLm11bChjdXJyZW50U3RhdGUpKTtcbiAgICAgIHRoaXMubnVtLnNldChzcXVhcmUpO1xuICAgIH1cbn0iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICJjb250cmFjdHMvYnVpbGQvU3F1YXJlLmpzIiwKICAgICAgICAgICAgICAgICAgICAiY29udGVudCI6ICJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xuaW1wb3J0IHsgRmllbGQsIFNtYXJ0Q29udHJhY3QsIHN0YXRlLCBTdGF0ZSwgbWV0aG9kLCBQZXJtaXNzaW9ucyB9IGZyb20gJ28xanMnO1xuZXhwb3J0IGNsYXNzIFNxdWFyZSBleHRlbmRzIFNtYXJ0Q29udHJhY3Qge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm51bSA9IFN0YXRlKCk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHN1cGVyLmluaXQoKTtcbiAgICAgICAgdGhpcy5hY2NvdW50LnBlcm1pc3Npb25zLnNldCh7XG4gICAgICAgICAgICAuLi5QZXJtaXNzaW9ucy5kZWZhdWx0KClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubnVtLnNldChGaWVsZCgzKSk7XG4gICAgfVxuICAgIHVwZGF0ZShzcXVhcmUpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5udW0uZ2V0KCk7XG4gICAgICAgIHRoaXMubnVtLmFzc2VydEVxdWFscyhjdXJyZW50U3RhdGUpO1xuICAgICAgICBzcXVhcmUuYXNzZXJ0RXF1YWxzKGN1cnJlbnRTdGF0ZS5tdWwoY3VycmVudFN0YXRlKSk7XG4gICAgICAgIHRoaXMubnVtLnNldChzcXVhcmUpO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIHN0YXRlKEZpZWxkKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgU3F1YXJlLnByb3RvdHlwZSwgXCJudW1cIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIG1ldGhvZCxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRnVuY3Rpb24pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbRmllbGRdKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnJldHVybnR5cGVcIiwgdm9pZCAwKVxuXSwgU3F1YXJlLnByb3RvdHlwZSwgXCJ1cGRhdGVcIiwgbnVsbCk7XG4iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJmcm9udGVuZCI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiZnJvbnRlbmQvc2VuZC5odG1sIiwKICAgICAgICAgICAgICAgICAgICAiY29udGVudCI6ICI8IURPQ1RZUEUgaHRtbD5cbjxodG1sIGxhbmc9XCJlblwiPlxuPGhlYWQ+XG4gICAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XG4gICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjBcIj5cbiAgICA8c3R5bGU+XG4gICAgICAgIC5wcm9jZXNzLWNvbnRhaW5lciB7XG4gICAgICAgICAgICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IC8qIFNwZWNpZnkgYSBub24tc2VyaWYgZm9udCAqL1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgLyogQWxpZ24gc3RlcHMgdG8gdGhlIGxlZnQgKi9cbiAgICAgICAgfVxuICAgICAgICAuc3RlcCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIHdpZHRoOiA0MDBweDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICBjb2xvcjogIzc3NzsgLyogVXNlIGEgZGlmZmVyZW50IHNoYWRlIG9mIGdyYXkgKCM3NzcpICovXG4gICAgICAgIH1cbiAgICAgICAgLmFjdGl2ZS1zdGVwIHtcbiAgICAgICAgICAgIGNvbG9yOiBibGFjazsgLyogVGV4dCBjb2xvciBmb3IgYWN0aXZlIHN0ZXBzICovXG4gICAgICAgIH1cbiAgICAgICAgLmRvbmUtc3RlcCB7XG4gICAgICAgICAgICBjb2xvcjogIzc3NzsgLyogVXNlIHRoZSBzYW1lIGdyYXkgKCM3NzcpIGZvciBkb25lIHN0ZXBzICovXG4gICAgICAgIH1cbiAgICAgICAgLmVycm9yLXN0ZXAge1xuICAgICAgICAgICAgY29sb3I6IHJlZDsgLyogVGV4dCBjb2xvciBmb3IgZXJyb3Igc3RlcHMgKi9cbiAgICAgICAgfVxuICAgICAgICAuc3RlcC1jaXJjbGUge1xuICAgICAgICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjOyAvKiBEZWZhdWx0IGNpcmNsZSBjb2xvciAqL1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOyAvKiBNYWtlIGl0IGNpcmN1bGFyICovXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7IC8qIFNwYWNlIGJldHdlZW4gY2lyY2xlIGFuZCBzdGVwIHRleHQgKi9cbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgLyogQ2VudGVyIHRoZSBjb250ZW50IChzdGF0dXMpIGluIHRoZSBjaXJjbGUgKi9cbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cbiAgICAgICAgLmRvbmUtc3RlcCAuc3RlcC1jaXJjbGUge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzRDQUY1MDsgLyogR3JlZW4gY29sb3IgZm9yIGRvbmUgc3RlcHMgKi9cbiAgICAgICAgfVxuICAgICAgICAuc3RlcC1jb250ZW50IHtcbiAgICAgICAgICAgIGZsZXgtZ3JvdzogMTsgLyogRXhwYW5kIHRvIGZpbGwgYXZhaWxhYmxlIHNwYWNlICovXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OyAvKiBBZGQgcmlnaHQgcGFkZGluZyBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJ1dHRvbiAqL1xuICAgICAgICB9XG4gICAgICAgIC5zdGVwLXRpdGxlIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICB9XG4gICAgICAgIC5zdGVwLWRlc2NyaXB0aW9uIHtcbiAgICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgfVxuICAgICAgICAuc3RlcC1tZXNzYWdlIHtcbiAgICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgfVxuICAgICAgICAuc3RlcC1kcm9wZG93biB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgIH1cbiAgICAgICAgLnN0ZXAtYnV0dG9uIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAxMHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2NjYzsgLyogRGVmYXVsdCBidXR0b24gY29sb3IgZm9yIGluYWN0aXZlIHN0ZXBzICovXG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7IC8qIFNldCB0ZXh0IGNvbG9yIHRvIHdoaXRlIGZvciBpbmFjdGl2ZSBidXR0b25zICovXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOyAvKiBDaGFuZ2UgY3Vyc29yIGZvciBpbmFjdGl2ZSBidXR0b25zICovXG4gICAgICAgIH1cbiAgICAgICAgLmFjdGl2ZS1zdGVwIC5zdGVwLWJ1dHRvbiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3QkZGOyAvKiBBY3RpdmUgc3RlcCBidXR0b24gY29sb3IgKi9cbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsgLyogQ2hhbmdlIGN1cnNvciBmb3IgYWN0aXZlIGJ1dHRvbnMgKi9cbiAgICAgICAgfVxuICAgIDwvc3R5bGU+XG4gICAgPHNjcmlwdCBzcmM9XCIuL3NyYy9VSS5qc1wiPjwvc2NyaXB0PlxuICAgIDxzY3JpcHQgc3JjPVwiLi9zcmMvU3RlcC5qc1wiPjwvc2NyaXB0PlxuPC9oZWFkPlxuPGJvZHk+XG4gICAgPGRpdiBjbGFzcz1cInByb2Nlc3MtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgaWQ9XCJhdXJvXCIgY2xhc3M9XCJzdGVwIGRvbmUtc3RlcFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtY2lyY2xlIGRvbmUtc3RlcFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLXRpdGxlXCI+Q29ubmVjdCBBdXJvIFdhbGxldDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWRlc2NyaXB0aW9uXCI+Q2hvb3NlIE5ldHdvcms8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwic3RlcC1kcm9wZG93blwiIG9uY2hhbmdlPVwiaGFuZGxlRHJvcGRvd25DaGFuZ2UodGhpcylcIiBkaXNhYmxlZD48L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcC1tZXNzYWdlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtbWVzc2FnZVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic3RlcC1idXR0b25cIiAgb25jbGljaz1cImhhbmRsZUJ1dHRvbkNsaWNrKCdhdXJvJylcIiBkaXNhYmxlZD5Db25uZWN0PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwibzFqc1wiIGNsYXNzPVwic3RlcCBhY3RpdmUtc3RlcFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtY2lyY2xlXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtdGl0bGVcIj5JbXBvcnQgbzFqczwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWRlc2NyaXB0aW9uXCI+Q2hvb3NlIGxvY2F0aW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInN0ZXAtZHJvcGRvd25cIiBvbmNoYW5nZT1cImhhbmRsZURyb3Bkb3duQ2hhbmdlKHRoaXMpXCI+PC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtbWVzc2FnZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLW1lc3NhZ2VcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInN0ZXAtYnV0dG9uXCIgb25jbGljaz1cImhhbmRsZUJ1dHRvbkNsaWNrKCdvMWpzJylcIj5JbXBvcnQ8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJzbWFydENvbnRyYWN0XCIgY2xhc3M9XCJzdGVwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcC1jaXJjbGVcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcC10aXRsZVwiPkltcG9ydCBTbWFydCBDb250cmFjdDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWRlc2NyaXB0aW9uXCI+Q2hvb3NlIFByb2plY3Q8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwic3RlcC1kcm9wZG93blwiIG9uY2hhbmdlPVwiaGFuZGxlRHJvcGRvd25DaGFuZ2UodGhpcylcIiBkaXNhYmxlZD48L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcC1tZXNzYWdlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtbWVzc2FnZVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic3RlcC1idXR0b25cIiBvbmNsaWNrPVwiaGFuZGxlQnV0dG9uQ2xpY2soJ3NtYXJ0Q29udHJhY3QnKVwiIGRpc2FibGVkPkltcG9ydDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxzY3JpcHQ+XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZUJ1dHRvbkNsaWNrKCBrZXkgKSB7XG4gICAgICAgICAgICBpZiggdHlwZW9mIHN0ZXAgIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgICAgIHN0ZXAuYnV0dG9uUHJlc3NlZCggeyBrZXkgfSApXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCBhID0+IGEgKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goIGUgPT4gY29uc29sZS5sb2coIGUgKSApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhbGwgMyB2YXJpYWJsZXMgYXJlIGdsb2JhbCBhbmQgYXZhaWxhYmxlIGluIHRoZSBjb25zb2xlLlxuICAgICAgICB2YXIgZWFzeW1pbmFcbiAgICAgICAgdmFyIG8xanNcbiAgICAgICAgdmFyIHNtYXJ0Q29udHJhY3RcblxuICAgICAgICB2YXIgc3RlcCA9IG5ldyBTdGVwKClcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgICAgICAgICAgIGF3YWl0IHN0ZXAuaW5pdCgpXG4gICAgICAgIH1cblxuICAgICAgICBtYWluKClcbiAgICAgICAgICAgIC50aGVuKCBhID0+IGNvbnNvbGUubG9nKCBhICkgKVxuICAgICAgICAgICAgLmNhdGNoKCBlID0+IGNvbnNvbGUubG9nKCBlICkgKVxuICAgIDwvc2NyaXB0PlxuPC9ib2R5PlxuPC9odG1sPlxuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiZnJvbnRlbmQvc3JjL1N0ZXAuanMiLAogICAgICAgICAgICAgICAgICAgICJjb250ZW50IjogImNvbnN0IHVpID0gbmV3IFVJKClcblxuXG5jb25zdCBTdGVwID0gY2xhc3MgU3RlcCBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgICAjY29uZmlnXG4gICAgI3N0YXRlXG5cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpXG4gICAgICAgIHRoaXMuI2NvbmZpZyA9IHtcbiAgICAgICAgICAgICdhdXJvJzoge1xuICAgICAgICAgICAgICAgICd2YWxpZE5ldHdvcmtzJzogWyAnZGV2bmV0JywgJ2JlcmtlbGV5JywgJ3Rlc3R3b3JsZDInLCAnbWFpbm5ldCcgXSxcbiAgICAgICAgICAgICAgICAnb3B0aW9ucyc6IFtcbiAgICAgICAgICAgICAgICAgICAgeyAndGV4dCc6ICdCZXJrZWxleScsICd2YWx1ZSc6ICdiZXJrZWxleScgfSxcbi8qXG4gICAgICAgICAgICAgICAgICAgIHsgJ3RleHQnOiAnVGVzdHdvcmxkIDInLCAndmFsdWUnOiAndGVzdHdvcmxkMicgfSxcbiAgICAgICAgICAgICAgICAgICAgeyAndGV4dCc6ICdNYWlubmV0JywgJ3ZhbHVlJzogJ21haW5uZXQnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgJ3RleHQnOiAnRGV2IE5ldCcsICd2YWx1ZSc6ICdkZXZuZXQnIH1cbiovXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdvMWpzJzoge1xuICAgICAgICAgICAgICAgICdvcHRpb25zJzogW1xuICAgICAgICAgICAgICAgICAgICB7ICd0ZXh0JzogJ0xvY2FsJywgJ3ZhbHVlJzogJy9hcGkvZ2V0TG9jYWxPMWpzJyB9LFxuICAgICAgICAgICAgICAgICAgICB7ICd0ZXh0JzogJ0NETicsICd2YWx1ZSc6ICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL28xanMnIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3NtYXJ0Q29udHJhY3QnOiB7XG4gICAgICAgICAgICAgICAgJ29wdGlvbnMnOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICB0aGlzLiNzdGF0ZSA9IHtcbiAgICAgICAgICAgICdhdXJvJzoge1xuICAgICAgICAgICAgICAgICdleGlzdHMnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnYWNjb3VudCc6IG51bGwsXG4gICAgICAgICAgICAgICAgJ25ldHdvcmsnOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ28xanMnOiB7XG4gICAgICAgICAgICAgICAgJ3VybCc6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnc21hcnRDb250cmFjdCc6IHtcbiAgICAgICAgICAgICAgICAndXJsJzogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9nZXRDb250cmFjdHMnKVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG5cbiAgICAgICAgdGhpcy4jY29uZmlnWydzbWFydENvbnRyYWN0J11bJ29wdGlvbnMnXSA9IGRhdGFbJ2RhdGEnXVxuICAgICAgICAgICAgLm1hcCggY29udHJhY3ROYW1lID0+IHsgXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0ID0geyBcbiAgICAgICAgICAgICAgICAgICAgJ3RleHQnOiBjb250cmFjdE5hbWUsIFxuICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBgL2FwaS9nZXRDb250cmFjdFNvdXJjZUNvZGUvJHtjb250cmFjdE5hbWV9LmpzYCBcbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgIHJldHVybiBzdHJ1Y3RcbiAgICAgICAgICAgIH0gKVxuXG4gICAgICAgIHRoaXMuI2FkZFNlbGVjdE9wdGlvbnMoKVxuICAgICAgICB1aS5jaGFuZ2VTdGF0dXNSb3dzKCB7ICdzdGF0ZSc6ICd3YWl0aW5nJyB9IClcbiAgICAgICAgdWkuY2hhbmdlU3RhdHVzUm93KCB7ICdzdGF0ZSc6ICdhY3RpdmUnLCAna2V5JzogJ2F1cm8nIH0gKVxuXG5cblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuXG4gICAgYXN5bmMgYnV0dG9uUHJlc3NlZCggeyBrZXkgfSApIHtcbiAgICAgICAgc3dpdGNoKCBrZXkgKSB7XG4gICAgICAgICAgICBjYXNlICdhdXJvJzpcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiNzZXRBdXJvKClcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgY2FzZSAnbzFqcyc6XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy4jc2V0SW1wb3J0KClcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgY2FzZSAnc21hcnRDb250cmFjdCc6IFxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuI3NldFNtYXJ0Q29udHJhY3QoKVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBjYXNlICdjb21waWxlJzpcbiAgICAgICAgICAgICAgICAvLyBhd2FpdCB0aGlzLiNjb21waWxlU21hcnRDb250cmFjdCgpXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coIGBCdXR0b24gd2l0aCB0aGUga2V5ICcke2tleX0nIG5vdCBrbm93bi5gIClcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jdXBkYXRlR2xvYmFsVmFyaWFibGUoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuXG4gICAgI2NvbXBpbGVTbWFydENvbnRyYWN0KCkge1xuICAgICAgICBjb25zdCB7IFNxdWFyZSB9ID0gc21hcnRDb250cmFjdFxuICAgIH1cblxuXG4gICAgI2FkZFNlbGVjdE9wdGlvbnMoKSB7XG4gICAgICAgIHVpLnNldFNlbGVjdE9wdGlvbnMoIHsgXG4gICAgICAgICAgICAna2V5JzogJ2F1cm8nLCBcbiAgICAgICAgICAgICdvcHRpb25zJzogdGhpcy4jY29uZmlnWydhdXJvJ11bJ29wdGlvbnMnXSBcbiAgICAgICAgfSApXG5cbiAgICAgICAgdWkuc2V0U2VsZWN0T3B0aW9ucyggeyBcbiAgICAgICAgICAgICdrZXknOiAnbzFqcycsIFxuICAgICAgICAgICAgJ29wdGlvbnMnOiB0aGlzLiNjb25maWdbJ28xanMnXVsnb3B0aW9ucyddXG4gICAgICAgIH0gKVxuXG4gICAgICAgIHVpLnNldFNlbGVjdE9wdGlvbnMoIHsgXG4gICAgICAgICAgICAna2V5JzogJ3NtYXJ0Q29udHJhY3QnLCBcbiAgICAgICAgICAgICdvcHRpb25zJzogdGhpcy4jY29uZmlnWydzbWFydENvbnRyYWN0J11bJ29wdGlvbnMnXVxuICAgICAgICB9IClcbiAgICB9XG5cblxuICAgIGFzeW5jICNzZXRBdXJvKCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gYXdhaXQgdGhpcy4jdmFsaWRhdGVTZXRBdXJvKClcbiAgICAgICAgY29uc3QgWyBtZXNzYWdlcywgY29tbWVudHMsIGFjY291bnRzLCBuZXR3b3JrIF0gPSB2YWxpZGF0aW9uXG4gICAgICAgIHRoaXMuI3ByaW50TWVzc2FnZXMoIHsgbWVzc2FnZXMsIGNvbW1lbnRzIH0gKVxuICAgICAgICB0aGlzLiNzdGF0ZVsnYXVybyddWydleGlzdHMnXSA9IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCA/IHRydWUgOiBmYWxzZVxuICAgICAgICBpZiggIXRoaXMuI3N0YXRlWydhdXJvJ11bJ2V4aXN0cyddICkgeyBcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBbIG1lc3NhZ2VzLmpvaW4oJywgJyApLCAnJyBdXG4gICAgICAgICAgICB1aS5zZXRSZXNwb25zZVRleHQoIHsgJ2tleSc6ICdhdXJvJywgcm93cyB9IClcbiAgICAgICAgICAgIHJldHVybiB0cnVlIFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jc3RhdGVbJ2F1cm8nXVsnYWNjb3VudCddID0gYWNjb3VudHNbIDAgXVxuXG4gICAgICAgIGNvbnN0IHRhcmdldENoYWluID0gdWkuZ2V0U2VsZWN0T3B0aW9uKCB7ICdrZXknOiAnYXVybycgfSApXG4gICAgICAgIGlmKCBuZXR3b3JrWydjaGFpbklkJ10gIT09IHRhcmdldENoYWluICkge1xuICAgICAgICAgICAgYXdhaXQgbWluYS5zd2l0Y2hDaGFpbiggeyAnY2hhaW5JZCc6IHRhcmdldENoYWluIH0gKVxuICAgICAgICAgICAgY29uc3QgbmV3TmV0d29yayA9IGF3YWl0IG1pbmEucmVxdWVzdE5ldHdvcmsoKVxuICAgICAgICAgICAgdGhpcy4jc3RhdGVbJ2F1cm8nXVsnbmV0d29yayddID0gbmV3TmV0d29ya1snY2hhaW5JZCddXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNzdGF0ZVsnYXVybyddWyduZXR3b3JrJ10gPSBuZXR3b3JrWydjaGFpbklkJ11cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQWNjb3VudDogJHt0aGlzLiNzdGF0ZVsnYXVybyddWydhY2NvdW50J119LCBOZXR3b3JrOiAke3RoaXMuI3N0YXRlWydhdXJvJ11bJ25ldHdvcmsnXX0uYFxuICAgICAgICBjb25zdCBhZGRyZXNzID0gYCR7dGhpcy4jc3RhdGVbJ2F1cm8nXVsnYWNjb3VudCddLnN1YnN0cmluZygwLCA4KX0uLi4ke3RoaXMuI3N0YXRlWydhdXJvJ11bJ2FjY291bnQnXS5zdWJzdHJpbmcoIDUxLCA1NSApfWBcbiAgICAgICAgdWkuc2V0UmVzcG9uc2VUZXh0KCB7XG4gICAgICAgICAgICAna2V5JzogJ2F1cm8nLFxuICAgICAgICAgICAgJ3Jvd3MnOiBbIGBBY2NvdW50OiAke2FkZHJlc3N9YCwgYE5ldHdvcms6ICR7dGhpcy4jc3RhdGVbJ2F1cm8nXVsnbmV0d29yayddfWBdXG4gICAgICAgIH0gKVxuICAgICAgICB1aS5uZXh0U3RlcCgpXG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cblxuICAgIGFzeW5jICN2YWxpZGF0ZVNldEF1cm8oKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gW11cbiAgICAgICAgY29uc3QgY29tbWVudHMgPSBbXVxuICAgICAgICBsZXQgYWNjb3VudHNcbiAgICAgICAgbGV0IG5ldHdvcmtcblxuICAgICAgICBpZiggdHlwZW9mIG1pbmEgPT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgbWVzc2FnZXMucHVzaCggYEF1cm8gV2FsbGV0IGlzIG5vdCBhdmFpbGFibGUuYCApXG4gICAgICAgIH1cblxuICAgICAgIGlmKCBtZXNzYWdlcy5sZW5ndGggPT09IDAgKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGFjY291bnRzID0gYXdhaXQgbWluYS5yZXF1ZXN0QWNjb3VudHMoKVxuICAgICAgICAgICAgfSBjYXRjaCggZSApIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKCBgQXVybyAucmVxdWVzdEFjY291bnRzKCkgZmFpbGVkLiAke2V9YCApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbmV0d29yayA9IGF3YWl0IG1pbmEucmVxdWVzdE5ldHdvcmsoKVxuICAgICAgICAgICAgfSBjYXRjaCggZSApIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKCBgQXVybyAucmVxdWVzdE5ldHdvcmsoKSBmYWlsZWQuICR7ZX1gIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoICFBcnJheS5pc0FycmF5KCBhY2NvdW50cyApICkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goIGBBY2NvdW50IGlzIG5vdCBhcnJheS5gIClcbiAgICAgICAgICAgIH0gZWxzZSBpZiggYWNjb3VudHMubGVuZ3RoID09PSAwICkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goIGBOb3QgYWNjb3VudCBjb25uZWN0ZWQuYCApIFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb21tZW50cy5wdXNoKCBgJHthY2NvdW50cy5sZW5ndGh9IEFjY291bnQke2FjY291bnRzLmxlbmd0aCA9PT0gMCA/ICcnIDogJ3MnIH0gY29ubmVjdGVkICgke2FjY291bnRzLmpvaW4oICcsICcgKX0pLmApXG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYoIHR5cGVvZiBuZXR3b3JrICE9PSAnb2JqZWN0JyApIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKCBgTmV0d29yayBpcyBub3Qgb2JqZWN0LmAgKVxuICAgICAgICAgICAgfSBlbHNlIGlmKCAhbmV0d29yay5oYXNPd25Qcm9wZXJ0eSggJ2NoYWluSWQnICkgKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaCggYE5ldHdvcmsgaGFzIG5vdCB0aGUga2V5ICdjaGFpbklkJy5gICkgXG4gICAgICAgICAgICB9IGVsc2UgaWYoICF0aGlzLiNjb25maWdbJ2F1cm8nXVsndmFsaWROZXR3b3JrcyddLmluY2x1ZGVzKCBuZXR3b3JrWydjaGFpbklkJ10gKSApIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKCBgTmV0d29yayB3aXRoIHRoZSB2YWx1ZSAnJHtuZXR3b3JrfScgaXMgbm90IHZhbGlkLmAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb21tZW50cy5wdXNoKCBgTmV0d29yayBpcyBzZXQgdG8gJHtuZXR3b3JrWydjaGFpbklkJ119LmAgKVxuICAgICAgICAgICAgfVxuICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWyBtZXNzYWdlcywgY29tbWVudHMsIGFjY291bnRzLCBuZXR3b3JrIF1cbiAgICB9XG5cblxuICAgIGFzeW5jICNzZXRJbXBvcnQoKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHVpLmdldFNlbGVjdE9wdGlvbiggeyAna2V5JzogJ28xanMnIH0gKVxuICAgICAgICBvMWpzID0gYXdhaXQgaW1wb3J0KCB1cmwgKVxuXG4gICAgICAgIHRoaXMuI3N0YXRlWydvMWpzJ11bJ3VybCddID0gdXJsXG5cbiAgICAgICAgdWkuc2V0UmVzcG9uc2VUZXh0KCB7XG4gICAgICAgICAgICAna2V5JzogJ28xanMnLFxuICAgICAgICAgICAgJ3Jvd3MnOiBbIGBTdWNjZXNmdWwgbG9hZGVkLmAgXVxuICAgICAgICB9IClcbiAgICAgICAgdWkubmV4dFN0ZXAoKVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG5cbiAgICBhc3luYyAjc2V0U21hcnRDb250cmFjdCgpIHtcbiAgICAgICAgY29uc3QgdXJsID0gdWkuZ2V0U2VsZWN0T3B0aW9uKCB7ICdrZXknOiAnc21hcnRDb250cmFjdCcgfSApXG4gICAgICAgIHNtYXJ0Q29udHJhY3QgPSBhd2FpdCBpbXBvcnQoIHVybCApXG5cbiAgICAgICAgdWkuc2V0UmVzcG9uc2VUZXh0KCB7XG4gICAgICAgICAgICAna2V5JzogJ3NtYXJ0Q29udHJhY3QnLFxuICAgICAgICAgICAgJ3Jvd3MnOiBbIGBTdWNjZXNmdWwgbG9hZGVkLmAgXVxuICAgICAgICB9IClcblxuICAgICAgICAvLyB1aS5uZXh0U3RlcCgpXG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cblxuICAgICN1cGRhdGVHbG9iYWxWYXJpYWJsZSgpIHtcbiAgICAgICAgZWFzeW1pbmEgPSBPYmplY3RcbiAgICAgICAgICAgIC5lbnRyaWVzKCB0aGlzLiNzdGF0ZSApXG4gICAgICAgICAgICAucmVkdWNlKCAoIGFjYywgYSwgaW5kZXggKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgWyBrZXksIHZhbHVlIF0gPSBhXG4gICAgICAgICAgICAgICAgIU9iamVjdC5oYXNPd24oIGFjYywga2V5ICkgPyBhY2NbIGtleSBdID0ge30gOiAnJ1xuICAgICAgICAgICAgICAgIE9iamVjdFxuICAgICAgICAgICAgICAgICAgICAuZW50cmllcyggdmFsdWUgKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCggYiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbIGssIHYgXSA9IGJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY1sga2V5IF1bIGsgXSA9IHZcbiAgICAgICAgICAgICAgICAgICAgfSApXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgICAgfSwge30gKVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG5cbiAgICAjcHJpbnRNZXNzYWdlcyggeyBtZXNzYWdlcz1bXSwgY29tbWVudHM9W10gfSApIHtcbiAgICAgICAgY29uc3QgbiA9IFtcbiAgICAgICAgICAgIFsgY29tbWVudHMsICdDb21tZW50JywgZmFsc2UgXSxcbiAgICAgICAgICAgIFsgbWVzc2FnZXMsICdFcnJvcicsIHRydWUgXVxuICAgICAgICBdXG4gICAgICAgICAgICAuZm9yRWFjaCggKCBhLCBpbmRleCApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbIG1zZ3MsIGhlYWRsaW5lLCBzdG9wIF0gPSBhXG4gICAgICAgICAgICAgICAgbXNnc1xuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCggKCBtc2csIHJpbmRleCwgYWxsICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmluZGV4ID09PSAwID8gY29uc29sZS5sb2coIGBcXG4ke2hlYWRsaW5lfSR7YWxsLmxlbmd0aCA+IDEgPyAncycgOiAnJ306YCApIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCBgICAtICR7bXNnfWAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoICggYWxsLmxlbmd0aCAtIDEgKSA9PT0gcmluZGV4ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBzdG9wID09PSB0cnVlICkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IClcbiAgICAgICAgICAgIH0gKVxuICAgIFxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbn0iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICJmcm9udGVuZC9zcmMvVUkuanMiLAogICAgICAgICAgICAgICAgICAgICJjb250ZW50IjogImNvbnN0IFVJID0gY2xhc3MgVUkgZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gICAgI2NvbmZpZ1xuICAgICNzdGF0ZVxuXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKVxuICAgICAgICB0aGlzLiNjb25maWcgPSB7XG4gICAgICAgICAgICAnc3RhdGVzJzoge1xuICAgICAgICAgICAgICAgICdkb25lJzoge1xuICAgICAgICAgICAgICAgICAgICAnY2xhc3NOYW1lJzogJ3N0ZXAgZG9uZS1zdGVwJyxcbiAgICAgICAgICAgICAgICAgICAgJ2NpcmNsZUNsYXNzTmFtZSc6ICdzdGVwLWNpcmNsZSBkb25lLXN0ZXAnLFxuICAgICAgICAgICAgICAgICAgICAnc2VsZWN0RGlzYWJsZSc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICdidXR0b25EaXNhYmxlJzogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2FjdGl2ZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2NsYXNzTmFtZSc6ICdzdGVwIGFjdGl2ZS1zdGVwJyxcbiAgICAgICAgICAgICAgICAgICAgJ2NpcmNsZUNsYXNzTmFtZSc6ICdzdGVwLWNpcmNsZSBkb25lLXN0ZXAnLFxuICAgICAgICAgICAgICAgICAgICAnc2VsZWN0RGlzYWJsZSc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAnYnV0dG9uRGlzYWJsZSc6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnd2FpdGluZyc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2NsYXNzTmFtZSc6ICdzdGVwJyxcbiAgICAgICAgICAgICAgICAgICAgJ2NpcmNsZUNsYXNzTmFtZSc6ICdzdGVwLWNpcmNsZScsXG4gICAgICAgICAgICAgICAgICAgICdzZWxlY3REaXNhYmxlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ2J1dHRvbkRpc2FibGUnOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkb20nOiB7XG4gICAgICAgICAgICAgICAgJ2F1cm8nOiB7XG4gICAgICAgICAgICAgICAgICAgICdzZWxlY3QnOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnbzFqcyc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3NlbGVjdCc6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICdzbWFydENvbnRyYWN0Jzoge1xuICAgICAgICAgICAgICAgICAgICAnc2VsZWN0JzogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI3N0YXRlID0ge1xuICAgICAgICAgICAgJ2FjdGl2ZUtleSc6IG51bGxcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgY2hhbmdlU3RhdHVzUm93cyggeyBzdGF0ZSB9ICkge1xuICAgICAgICBjb25zb2xlLmxvZyggJ2Rpc2FibGUnKVxuICAgICAgICBPYmplY3RcbiAgICAgICAgICAgIC5rZXlzKCB0aGlzLiNjb25maWdbJ2RvbSddIClcbiAgICAgICAgICAgIC5mb3JFYWNoKCBrZXkgPT4gdGhpcy5jaGFuZ2VTdGF0dXNSb3coIHsga2V5LCBzdGF0ZSB9ICkgKVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG5cbiAgICBjaGFuZ2VTdGF0dXNSb3coIHsga2V5LCBzdGF0ZSB9ICkge1xuICAgICAgICBpZiggc3RhdGUgPT09ICdhY3RpdmUnICkge1xuICAgICAgICAgICAgdGhpcy4jc3RhdGVbJ2FjdGl2ZUtleSddID0ga2V5XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBrZXkgKVxuICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuI2NvbmZpZ1snc3RhdGVzJ11bIHN0YXRlIF1bJ2NsYXNzTmFtZSddXG5cbiAgICAgICAgaWYoIHRoaXMuI2NvbmZpZ1snZG9tJ11bIGtleSBdWydzZWxlY3QnXSApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50XG4gICAgICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoIGAjJHtrZXl9IHNlbGVjdC5zdGVwLWRyb3Bkb3duYCApXG4gICAgICAgICAgICBzZWxlY3QuZGlzYWJsZWQgPSB0aGlzLiNjb25maWdbJ3N0YXRlcyddWyBzdGF0ZSBdWydzZWxlY3REaXNhYmxlJ11cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50XG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvciggYCMke2tleX0gYnV0dG9uLnN0ZXAtYnV0dG9uYCApXG4gICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRoaXMuI2NvbmZpZ1snc3RhdGVzJ11bIHN0YXRlIF1bJ2J1dHRvbkRpc2FibGUnXVxuXG4gICAgICAgIGNvbnN0IGNpcmNsZSA9IGVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgIGNpcmNsZS5jbGFzc05hbWUgPSB0aGlzLiNjb25maWdbJ3N0YXRlcyddWyBzdGF0ZSBdWydjaXJjbGVDbGFzc05hbWUnXVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG5cbiAgICBzZXRTZWxlY3RPcHRpb25zKCB7IGtleSwgb3B0aW9ucyB9ICkge1xuICAgICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudFxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoIGAjJHtrZXl9IHNlbGVjdC5zdGVwLWRyb3Bkb3duYCApXG5cbiAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgLmZvckVhY2goIG9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnb3B0aW9uJyApXG4gICAgICAgICAgICAgICAgZWwudGV4dCA9IG9wdGlvblsndGV4dCddXG4gICAgICAgICAgICAgICAgZWwudmFsdWUgPSBvcHRpb25bJ3ZhbHVlJ11cbiAgICAgICAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQoIGVsIClcbiAgICAgICAgICAgIH0gKVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfSBcblxuXG4gICAgc2V0UmVzcG9uc2VUZXh0KCB7IGtleSwgcm93cyB9ICkge1xuICAgICAgICBjb25zdCBkaXZzID0gZG9jdW1lbnRcbiAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCBgIyR7a2V5fSBkaXYuc3RlcC1tZXNzYWdlYCApXG5cbiAgICAgICAgcm93c1xuICAgICAgICAgICAgLmZvckVhY2goICggcm93LCBpbmRleCApID0+IHtcbiAgICAgICAgICAgICAgICBkaXZzWyBpbmRleCBdLnRleHRDb250ZW50ID0gcm93XG4gICAgICAgICAgICB9IClcblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBcbiAgICBcbiAgICBnZXRTZWxlY3RPcHRpb24oIHsga2V5IH0gKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50XG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvciggYCMke2tleX0gc2VsZWN0LnN0ZXAtZHJvcGRvd25gIClcbiAgICAgICAgcmV0dXJuIHNlbGVjdC5vcHRpb25zWyBzZWxlY3Quc2VsZWN0ZWRJbmRleCBdLnZhbHVlXG4gICAgfVxuXG5cbiAgICBuZXh0U3RlcCgpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdFxuICAgICAgICAgICAgLmtleXMoIHRoaXMuI2NvbmZpZ1snZG9tJ10gKVxuICAgICAgICBjb25zdCBpbmRleCA9IGtleXNcbiAgICAgICAgICAgIC5maW5kSW5kZXgoIGEgPT4gYSA9PT0gdGhpcy4jc3RhdGVbJ2FjdGl2ZUtleSddIClcblxuICAgICAgICBpZigga2V5cy5sZW5ndGggPT09IGluZGV4ICkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdGF0dXNSb3coIHsgXG4gICAgICAgICAgICAgICAgJ2tleSc6IGtleXNbIGluZGV4IF0sIFxuICAgICAgICAgICAgICAgICdzdGF0ZSc6ICdkb25lJ1xuICAgICAgICAgICAgfSApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVN0YXR1c1JvdyggeyBcbiAgICAgICAgICAgICAgICAna2V5Jzoga2V5c1sgaW5kZXggXSwgXG4gICAgICAgICAgICAgICAgJ3N0YXRlJzogJ2RvbmUnXG4gICAgICAgICAgICB9IClcblxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdGF0dXNSb3coIHsgXG4gICAgICAgICAgICAgICAgJ2tleSc6IGtleXNbIGluZGV4ICsgMSBdLCBcbiAgICAgICAgICAgICAgICAnc3RhdGUnOiAnYWN0aXZlJ1xuICAgICAgICAgICAgfSApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbn0iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICB9Cn0=