diff --git a/src/chart.ts b/src/chart.ts index 9a061147b..e4c48b0d6 100644 --- a/src/chart.ts +++ b/src/chart.ts @@ -14,9 +14,10 @@ export function analysisChart (ctrl) { name: turn + dots + ' ' + step.san, y: povChances(step.turnColor, score) }; + if (ply === 0) point.name = 'Initial position'; return point; - } else return 0; - } else return 0; + } else return null; + } else return null; }) ctrl.analysisChart = Highcharts.chart('chart', { chart: { type: 'area', diff --git a/static/pychess-variants.js b/static/pychess-variants.js index d198309b4..34bb36350 100644 --- a/static/pychess-variants.js +++ b/static/pychess-variants.js @@ -4174,13 +4174,15 @@ function analysisChart(ctrl) { name: turn + dots + ' ' + step.san, y: movelist_1.povChances(step.turnColor, score) }; + if (ply === 0) + point.name = 'Initial position'; return point; } else - return 0; + return null; } else - return 0; + return null; }); ctrl.analysisChart = highcharts_1.default.chart('chart', { chart: { type: 'area', @@ -7685,4 +7687,4 @@ exports.renderUsername = renderUsername; },{"snabbdom":27,"snabbdom/h":20,"snabbdom/modules/attributes":23,"snabbdom/modules/class":24,"snabbdom/modules/eventlisteners":25,"snabbdom/modules/props":26}]},{},[43])(43) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvY2hlc3Nncm91bmR4L3NyYy9hbmltLnRzIiwibm9kZV9tb2R1bGVzL2NoZXNzZ3JvdW5keC9zcmMvYXBpLnRzIiwibm9kZV9tb2R1bGVzL2NoZXNzZ3JvdW5keC9zcmMvYm9hcmQudHMiLCJub2RlX21vZHVsZXMvY2hlc3Nncm91bmR4L3NyYy9jaGVzc2dyb3VuZC50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL2NvbmZpZy50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL2RyYWcudHMiLCJub2RlX21vZHVsZXMvY2hlc3Nncm91bmR4L3NyYy9kcmF3LnRzIiwibm9kZV9tb2R1bGVzL2NoZXNzZ3JvdW5keC9zcmMvZHJvcC50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL2V2ZW50cy50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL2V4cGxvc2lvbi50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL2Zlbi50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL3ByZW1vdmUudHMiLCJub2RlX21vZHVsZXMvY2hlc3Nncm91bmR4L3NyYy9yZW5kZXIudHMiLCJub2RlX21vZHVsZXMvY2hlc3Nncm91bmR4L3NyYy9zdGF0ZS50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL3N2Zy50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL3R5cGVzLnRzIiwibm9kZV9tb2R1bGVzL2NoZXNzZ3JvdW5keC9zcmMvdXRpbC50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL3dyYXAudHMiLCJub2RlX21vZHVsZXMvaGlnaGNoYXJ0cy9oaWdoY2hhcnRzLmpzIiwibm9kZV9tb2R1bGVzL3NuYWJiZG9tL2guanMiLCJub2RlX21vZHVsZXMvc25hYmJkb20vaHRtbGRvbWFwaS5qcyIsIm5vZGVfbW9kdWxlcy9zbmFiYmRvbS9pcy5qcyIsIm5vZGVfbW9kdWxlcy9zbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMuanMiLCJub2RlX21vZHVsZXMvc25hYmJkb20vbW9kdWxlcy9jbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9zbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzLmpzIiwibm9kZV9tb2R1bGVzL3NuYWJiZG9tL21vZHVsZXMvcHJvcHMuanMiLCJub2RlX21vZHVsZXMvc25hYmJkb20vc25hYmJkb20uanMiLCJub2RlX21vZHVsZXMvc25hYmJkb20vdGh1bmsuanMiLCJub2RlX21vZHVsZXMvc25hYmJkb20vdG92bm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9zbmFiYmRvbS92bm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9zb2NrZXR0ZS9kaXN0L3NvY2tldHRlLmpzIiwic3JjL2Fib3V0LnRzIiwic3JjL2FuYWx5c2lzLnRzIiwic3JjL2FuYWx5c2lzQ3RybC50cyIsInNyYy9jaGFydC50cyIsInNyYy9jaGF0LnRzIiwic3JjL2NoZXNzLnRzIiwic3JjL2NsaXBib2FyZC50cyIsInNyYy9jbG9jay50cyIsInNyYy9nYW1lcy50cyIsInNyYy9nYXRpbmcudHMiLCJzcmMvbG9iYnkudHMiLCJzcmMvbWFpbi50cyIsInNyYy9tb3ZlbGlzdC50cyIsInNyYy9wbGF5ZXIudHMiLCJzcmMvcGxheWVycy50cyIsInNyYy9wb2NrZXQudHMiLCJzcmMvcHJvZmlsZS50cyIsInNyYy9wcm9tb3Rpb24udHMiLCJzcmMvcmVzaXplLnRzIiwic3JjL3JvdW5kLnRzIiwic3JjL3JvdW5kQ3RybC50cyIsInNyYy9zZXR0aW5ncy50cyIsInNyYy9zb3VuZC50cyIsInNyYy91c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNDQSwrQkFBOEI7QUE0QjlCLFNBQWdCLElBQUksQ0FBSSxRQUFxQixFQUFFLEtBQVk7SUFDekQsT0FBTyxLQUFLLENBQUMsU0FBUyxD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TSxFQUFFLENBQUMsRUFBRSxVQUFVO0NBQUUsQ0FBQztBQUV6SyxNQUFNLE1BQU0sR0FBa0M7SUFDMUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsT0FBTztDQUFFLENBQUM7QUFFcEcsTUFBTSxPQUFPLEdBQWtDO0lBQzNDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTO0NBQUUsQ0FBQztBQUczRixNQUFNLFFBQVEsR0FBRztJQUNiLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0NBQUUsQ0FBQztBQUV6SyxNQUFNLFFBQVEsR0FBRztJQUNiLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUc7SUFDN0YsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFP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QUN6QixDQUFDO0FBRUQsU0FBUyxJQUFJLENBQUMsS0FBZTtJQUMzQixPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUM3QyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUVsQixFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDM0QsQ0FBQyxDQUFDLENBQUMsQ0FDRixFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDM0QsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDMUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQTtBQUVELE1BQU0sTUFBTSxHQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDMUMsT0FBTyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUks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LEVBQUUsSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEcsQ0FBQztBQUdELFNBQVMsT0FBTyxDQUFDLEtBQWU7SUFDOUIsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBR0QsTUFBTSxLQUFLLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUN6QyxPQUFPLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQyxDQUFBO0FBR0QsTUFBTSxPQUFPLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUMzQyxPQUFPLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQyxDQUFBO0FBR0QsTUFBTSxLQUFLLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUN6QyxPQUFPLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQTtBQUdELFNBQVMsS0FBSyxDQUFDLEtBQWU7SUFDNUIsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDekIsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUN0RixDQUFDO0FBQ04sQ0FBQztBQUdELE1BQU0sT0FBTyxHQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDM0MsT0FBTyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FB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RUFBc0I7SUFDckUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVHLENBQUM7Ozs7O0FDbktZLFFBQUEsS0FBSyxHQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkUsUUFBQSxLQUFLLEdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFPUCxDQUFDO0FBRW5FLFFBQUEsVUFBVSxHQUFzQixDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFDLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7Ozs7O0FDdEc1TCw4QkFBOEI7QUFFakIsUUFBQSxNQUFNLEdBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFeEMsUUFBQSxNQUFNLEdBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxRQUFBLFNBQVMsR0FBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRW5FLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUV0QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVyQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFdEMsTUFBTSxVQUFVLEdBQWEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUYsTUFBTSxVQUFVLEdBQWEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUYsTUFBTSxVQUFVLEdBQWEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUYsTUFBTSxXQUFXLEdBQWEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEcsTUFBTSxXQUFXLEdBQWEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEcsTUFBTSxZQUFZLEdBQWEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFP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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1ZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUN4REEsbURBQTJCO0FBRzNCLGlDQUF3QztBQUd4QyxNQUFNLFFBQVEsR0FBRztJQUNqQix5UUFBeVE7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QUFLLENBQUMsQ0FBQztnQkFBRSxPQUFPLE9BQU8sQ0FBQztZQUM5QyxNQUFNO1FBQ1YsS0FBSyxJQUFJO1lBQ0wsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFBRSxPQUFPLE9BQU8sQ0FBQztZQUM5QyxNQUFNO1FBQ1YsS0FBSyxJQUFJO1lBQ0wsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFBRSxPQUFPLE9BQU8sQ0FBQztZQUM5QyxNQUFNO1FBQ1YsS0FBSyxJQUFJO1lBQ0wsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtnQkFDdkIsT0FBTyxPQUFPLENBQUM7YUFDbEI7aUJBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbEcsT0FBTyxPQUFPLENBQUM7YUFDbEI7WUFBQSxDQUFDO1lBQ0YsTUFBTTtRQUNWLEtBQUssSUFBSTtZQUNMLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxPQUFPLENBQUM7WUFDOUMsTUFBTTtRQUNWLEtBQUssSUFBSTtZQUNMLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxPQUFPLENBQUM7WUFDOUMsTUFBTTtRQUNWLEtBQUssSUFBSTtZQUNMLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFBRSxPQUFPLE9BQU8sQ0FBQztZQUMzRSxNQUFNO0tBQ1Q7SUFBQSxDQUFDO0lBQ0YsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssS0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxLQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEtBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssS0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxLQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEtBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRS9DLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUF6RkQsMEJBeUZDO0FBRUQsU0FBZ0IsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVTtJQUNwRSxJQUFJLE9BQU8sS0FBSyxTQUFTO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFD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QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1QjtJQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFN0IsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ2xCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDN0U7SUFDRCxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDdkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3QyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDNUQ7U0FBTTtRQUNILEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFD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Q2hHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTVGLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtB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RUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7Z0NBQ3JELFdBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDO2dDQUNoSCxXQUFDLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7Z0NBQ3JELFdBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDO2dDQUNoSCxXQUFDLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7Z0NBQ3JELFdBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDO2dDQUNoSCxXQUFDLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7Z0NBQ3JELFdBQUMsQ0FBQyxXQUFXLEVBQUUs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QUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JELEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25ELEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JELEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9DLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakQsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFH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LEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUMsRUFBRSxDQUFFLEVBQUcsQ0FBQztRQUM1SCxXQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBQyxFQUFFLENBQUUsRUFBRyxDQUFDO1FBQ3BKLFdBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFDLEVBQUUsQ0FBRSxFQUFHLENBQUM7UUFDdkssV0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBQyxFQUFFLENBQUUsRUFB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SSxFQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUcsQ0FBQyxFQUFDO1lBQzFELE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFHLENBQUMsRUFBRSxJQUFJLEVBQUcsRUFBRSxFQUFFLEtBQUssRUFBRyxDQUFDLEVBQUM7WUFDeEQsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUcsQ0FBQyxFQUFFLElBQUksRUFBRyxFQUFFLEVBQUUsS0FBSyxFQUFHLENBQUMsRUFBQztZQUM3RCxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRyxDQUFDLEVBQUUsSUFBSSxFQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUcsQ0FBQyxFQUFDO1NBQ3ZELENBQUE7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBMEJELGFBQWEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDM0QsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUN6QyxPQUFPLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQy9DLEtBQUssS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDM0MsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUN6QyxPQUFPLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQy9DLE1BQU0sS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDN0MsU0FBUyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUNuRCxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0NBQzVDO0FBRVksUUFBQSxLQUFLLEdBQUcsSUFBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7Ozs7OztBQ3hEakMsdUNBQWdDO0FBQ2hDLG1FQUEyQztBQUMzQyw2RUFBcUQ7QUFDckQsbUVBQWdEO0FBQ2hELHFGQUF3RDtBQUV4RCxNQUFNLEtBQUssR0FBRyxlQUFJLENBQUMsQ0FBQyxlQUFLLEVBQUUsb0JBQVUsRUFBRSxlQUFVLEVBQUUsd0JBQVMsQ0FBQyxDQUFDLENBQUM7QUFFL0QsbURBQTJCO0FBRTNCLDRDQUE0QztBQUM1Qzs7Ozs7RUFLRTtBQUNGLFNBQWdCLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUTtJQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRCxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25ELElBQUksUUFBUSxZQUFZLE9BQU8sRUFBRTtRQUM3QixRQUFRLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsUUFBdUIsRUFBRSxXQUFDLENBQUMsY0FBYyxFQUFFLFdBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLFFBQVEsRUFBQyxFQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25IO0lBQUEsQ0FBQztJQUNOOzs7Ozs7O01BT0U7QUFDRixDQUFDO0FBZkQsd0NBZUMiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJpbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vc3RhdGUnXG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbCdcbmltcG9ydCAqIGFzIGNnIGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIE11dGF0aW9uPEE+ID0gKHN0YXRlOiBTdGF0ZSkgPT4gQTtcblxuLy8gMCwxIGFuaW1hdGlvbiBnb2FsXG4vLyAyLDMgYW5pbWF0aW9uIGN1cnJlbnQgc3RhdHVzXG5leHBvcnQgdHlwZSBBbmltVmVjdG9yID0gY2cuTnVtYmVyUXVhZFxuXG5leHBvcnQgaW50ZXJmYWNlIEFuaW1WZWN0b3JzIHtcbiAgW2tleTogc3RyaW5nXTogQW5pbVZlY3RvclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFuaW1GYWRpbmdzIHtcbiAgW2tleTogc3RyaW5nXTogY2cuUGllY2Vcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmltUGxhbiB7XG4gIGFuaW1zOiBBbmltVmVjdG9ycztcbiAgZmFkaW5nczogQW5pbUZhZGluZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5pbUN1cnJlbnQge1xuICBzdGFydDogRE9NSGlnaFJlc1RpbWVTdGFtcDtcbiAgZnJlcXVlbmN5OiBjZy5LSHo7XG4gIHBsYW46IEFuaW1QbGFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5pbTxBPihtdXRhdGlvbjogTXV0YXRpb248QT4sIHN0YXRlOiBTdGF0ZSk6IEEge1xuICByZXR1cm4gc3RhdGUuYW5pbWF0aW9uLmVuYWJsZWQgPyBhbmltYXRlKG11dGF0aW9uLCBzdGF0ZSkgOiByZW5kZXIobXV0YXRpb24sIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcjxBPihtdXRhdGlvbjogTXV0YXRpb248QT4sIHN0YXRlOiBTdGF0ZSk6IEEge1xuICBjb25zdCByZXN1bHQgPSBtdXRhdGlvbihzdGF0ZSk7XG4gIHN0YXRlLmRvbS5yZWRyYXcoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuaW50ZXJmYWNlIEFuaW1QaWVjZSB7XG4gIGtleTogY2cuS2V5O1xuICBwb3M6IGNnLlBvcztcbiAgcGllY2U6IGNnLlBpZWNlO1xufVxuaW50ZXJmYWNlIEFuaW1QaWVjZXMge1xuICBba2V5OiBzdHJpbmddOiBBbmltUGllY2Vcbn1cblxuZnVuY3Rpb24gbWFrZVBpZWNlKGtleTogY2cuS2V5LCBwaWVjZTogY2cuUGllY2UsIGZpcnN0UmFua0lzMDogYm9vbGVhbik6IEFuaW1QaWVjZSB7XG4gIHJldHVybiB7XG4gICAga2V5OiBrZXksXG4gICAgcG9zOiB1dGlsLmtleTJwb3Moa2V5LCBmaXJzdFJhbmtJczApLFxuICAgIHBpZWNlOiBwaWVjZVxuICB9O1xufVxuXG5mdW5jdGlvbiBjbG9zZXIocGllY2U6IEFuaW1QaWVjZSwgcGllY2VzOiBBbmltUGllY2VbXSk6IEFuaW1QaWVjZSB7XG4gIHJldHVybiBwaWVjZXMuc29ydCgocDEsIHAyKSA9PiB7XG4gICAgcmV0dXJuIHV0aWwuZGlzdGFuY2VTcShwaWVjZS5wb3MsIHAxLnBvcykgLSB1dGlsLmRpc3RhbmNlU3EocGllY2UucG9zLCBwMi5wb3MpO1xuICB9KVswXTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVBsYW4ocHJldlBpZWNlczogY2cuUGllY2VzLCBjdXJyZW50OiBTdGF0ZSk6IEFuaW1QbGFuIHtcbiAgY29uc3QgZmlyc3RSYW5rSXMwID0gY3VycmVudC5kaW1lbnNpb25zLmhlaWdodCA9PT0gMTA7XG4gIGNvbnN0IGFuaW1zOiBBbmltVmVjdG9ycyA9IHt9LFxuICBhbmltZWRPcmlnczogY2cuS2V5W10gPSBbXSxcbiAgZmFkaW5nczogQW5pbUZhZGluZ3MgPSB7fSxcbiAgbWlzc2luZ3M6IEFuaW1QaWVjZVtdID0gW10sXG4gIG5ld3M6IEFuaW1QaWVjZVtdID0gW10sXG4gIHByZVBpZWNlczogQW5pbVBpZWNlcyA9IHt9O1xuICBsZXQgY3VyUDogY2cuUGllY2UgfCB1bmRlZmluZWQsIHByZVA6IEFuaW1QaWVjZSB8IHVuZGVmaW5lZCwgaTogYW55LCB2ZWN0b3I6IGNnLk51bWJlclBhaXI7XG4gIGZvciAoaSBpbiBwcmV2UGllY2VzKSB7XG4gICAgcHJlUGllY2VzW2ldID0gbWFrZVBpZWNlKGkgYXMgY2cuS2V5LCBwcmV2UGllY2VzW2ldISwgZmlyc3RSYW5rSXMwKTtcbiAgfVxuICBmb3IgKGNvbnN0IGtleSBvZiB1dGlsLmFsbEtleXNbY3VycmVudC5nZW9tZXRyeV0pIHtcbiAgICBjdXJQID0gY3VycmVudC5waWVjZXNba2V5XTtcbiAgICBwcmVQID0gcHJlUGllY2VzW2tleV07XG4gICAgaWYgKGN1clApIHtcbiAgICAgIGlmIChwcmVQKSB7XG4gICAgICAgIGlmICghdXRpbC5zYW1lUGllY2UoY3VyUCwgcHJlUC5waWVjZSkpIHtcbiAgICAgICAgICBtaXNzaW5ncy5wdXNoKHByZVApO1xuICAgICAgICAgIG5ld3MucHVzaChtYWtlUGllY2Uoa2V5LCBjdXJQLCBmaXJzdFJhbmtJczApKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIG5ld3MucHVzaChtYWtlUGllY2Uoa2V5LCBjdXJQLCBmaXJzdFJhbmtJczApKTtcbiAgICB9IGVsc2UgaWYgKHByZVApIG1pc3NpbmdzLnB1c2gocHJlUCk7XG4gIH1cbiAgbmV3cy5mb3JFYWNoKG5ld1AgPT4ge1xuICAgIHByZVAgPSBjbG9zZXIobmV3UCwgbWlzc2luZ3MuZmlsdGVyKHAgPT4gdXRpbC5zYW1lUGllY2UobmV3UC5waWVjZSwgcC5waWVjZSkpKTtcbiAgICBpZiAocHJlUCkge1xuICAgICAgdmVjdG9yID0gW3ByZVAucG9zWzBdIC0gbmV3UC5wb3NbMF0sIHByZVAucG9zWzFdIC0gbmV3UC5wb3NbMV1dO1xuICAgICAgYW5pbXNbbmV3UC5rZXldID0gdmVjdG9yLmNvbmNhdCh2ZWN0b3IpIGFzIEFuaW1WZWN0b3I7XG4gICAgICBhbmltZWRPcmlncy5wdXNoKHByZVAua2V5KTtcbiAgICB9XG4gIH0pO1xuICBtaXNzaW5ncy5mb3JFYWNoKHAgPT4ge1xuICAgIGlmICghdXRpbC5jb250YWluc1goYW5pbWVkT3JpZ3MsIHAua2V5KSkgZmFkaW5nc1twLmtleV0gPSBwLnBpZWNlO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGFuaW1zOiBhbmltcyxcbiAgICBmYWRpbmdzOiBmYWRpbmdzXG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0ZXAoc3RhdGU6IFN0YXRlLCBub3c6IERPTUhpZ2hSZXNUaW1lU3RhbXApOiB2b2lkIHtcbiAgY29uc3QgY3VyID0gc3RhdGUuYW5pbWF0aW9uLmN1cnJlbnQ7XG4gIGlmIChjdXIgPT09IHVuZGVmaW5lZCkgeyAvLyBhbmltYXRpb24gd2FzIGNhbmNlbGVkIDooXG4gICAgaWYgKCFzdGF0ZS5kb20uZGVzdHJveWVkKSBzdGF0ZS5kb20ucmVkcmF3Tm93KCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlc3QgPSAxIC0gKG5vdyAtIGN1ci5zdGFydCkgKiBjdXIuZnJlcXVlbmN5O1xuICBpZiAocmVzdCA8PSAwKSB7XG4gICAgc3RhdGUuYW5pbWF0aW9uLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgc3RhdGUuZG9tLnJlZHJhd05vdygpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVhc2UgPSBlYXNpbmcocmVzdCk7XG4gICAgZm9yIChsZXQgaSBpbiBjdXIucGxhbi5hbmltcykge1xuICAgICAgY29uc3QgY2ZnID0gY3VyLnBsYW4uYW5pbXNbaV07XG4gICAgICBjZmdbMl0gPSBjZmdbMF0gKiBlYXNlO1xuICAgICAgY2ZnWzNdID0gY2ZnWzFdICogZWFzZTtcbiAgICB9XG4gICAgc3RhdGUuZG9tLnJlZHJhd05vdyh0cnVlKTsgLy8gb3B0aW1pc2F0aW9uOiBkb24ndCByZW5kZXIgU1ZHIGNoYW5nZXMgZHVyaW5nIGFuaW1hdGlvbnNcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpKSA9PiBzdGVwKHN0YXRlLCBub3cpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhbmltYXRlPEE+KG11dGF0aW9uOiBNdXRhdGlvbjxBPiwgc3RhdGU6IFN0YXRlKTogQSB7XG4gIC8vIGNsb25lIHN0YXRlIGJlZm9yZSBtdXRhdGluZyBpdFxuICBjb25zdCBwcmV2UGllY2VzOiBjZy5QaWVjZXMgPSB7Li4uc3RhdGUucGllY2VzfTtcblxuICBjb25zdCByZXN1bHQgPSBtdXRhdGlvbihzdGF0ZSk7XG4gIGNvbnN0IHBsYW4gPSBjb21wdXRlUGxhbihwcmV2UGllY2VzLCBzdGF0ZSk7XG4gIGlmICghaXNPYmplY3RFbXB0eShwbGFuLmFuaW1zKSB8fCAhaXNPYmplY3RFbXB0eShwbGFuLmZhZGluZ3MpKSB7XG4gICAgY29uc3QgYWxyZWFkeVJ1bm5pbmcgPSBzdGF0ZS5hbmltYXRpb24uY3VycmVudCAmJiBzdGF0ZS5hbmltYXRpb24uY3VycmVudC5zdGFydDtcbiAgICBzdGF0ZS5hbmltYXRpb24uY3VycmVudCA9IHtcbiAgICAgIHN0YXJ0OiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgIGZyZXF1ZW5jeTogMSAvIHN0YXRlLmFuaW1hdGlvbi5kdXJhdGlvbixcbiAgICAgIHBsYW46IHBsYW5cbiAgICB9O1xuICAgIGlmICghYWxyZWFkeVJ1bm5pbmcpIHN0ZXAoc3RhdGUsIHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBkb24ndCBhbmltYXRlLCBqdXN0IHJlbmRlciByaWdodCBhd2F5XG4gICAgc3RhdGUuZG9tLnJlZHJhdygpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkobzogYW55KTogYm9vbGVhbiB7XG4gIGZvciAobGV0IF8gaW4gbykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2dyZS8xNjUwMjk0XG5mdW5jdGlvbiBlYXNpbmcodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIHQgPCAwLjUgPyA0ICogdCAqIHQgKiB0IDogKHQgLSAxKSAqICgyICogdCAtIDIpICogKDIgKiB0IC0gMikgKyAxO1xufVxuIiwiaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL3N0YXRlJ1xuaW1wb3J0ICogYXMgYm9hcmQgZnJvbSAnLi9ib2FyZCdcbmltcG9ydCB7IHdyaXRlIGFzIGZlbldyaXRlIH0gZnJvbSAnLi9mZW4nXG5pbXBvcnQgeyBDb25maWcsIGNvbmZpZ3VyZSB9IGZyb20gJy4vY29uZmlnJ1xuaW1wb3J0IHsgYW5pbSwgcmVuZGVyIH0gZnJvbSAnLi9hbmltJ1xuaW1wb3J0IHsgY2FuY2VsIGFzIGRyYWdDYW5jZWwsIGRyYWdOZXdQaWVjZSB9IGZyb20gJy4vZHJhZydcbmltcG9ydCB7IERyYXdTaGFwZSB9IGZyb20gJy4vZHJhdydcbmltcG9ydCBleHBsb3Npb24gZnJvbSAnLi9leHBsb3Npb24nXG5pbXBvcnQgKiBhcyBjZyBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaSB7XG5cbiAgLy8gcmVjb25maWd1cmUgdGhlIGluc3RhbmNlLiBBY2NlcHRzIGFsbCBjb25maWcgb3B0aW9ucywgZXhjZXB0IGZvciB2aWV3T25seSAmIGRyYXdhYmxlLnZpc2libGUuXG4gIC8vIGJvYXJkIHdpbGwgYmUgYW5pbWF0ZWQgYWNjb3JkaW5nbHksIGlmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQuXG4gIHNldChjb25maWc6IENvbmZpZyk6IHZvaWQ7XG5cbiAgLy8gcmVhZCBjaGVzc2dyb3VuZCBzdGF0ZTsgd3JpdGUgYXQgeW91ciBvd24gcmlza3MuXG4gIHN0YXRlOiBTdGF0ZTtcblxuICAvLyBnZXQgdGhlIHBvc2l0aW9uIGFzIGEgRkVOIHN0cmluZyAob25seSBjb250YWlucyBwaWVjZXMsIG5vIGZsYWdzKVxuICAvLyBlLmcuIHJuYnFrYm5yL3BwcHBwcHBwLzgvOC84LzgvUFBQUFBQUFAvUk5CUUtCTlJcbiAgZ2V0RmVuKCk6IGNnLkZFTjtcblxuICAvLyBjaGFuZ2UgdGhlIHZpZXcgYW5nbGVcbiAgdG9nZ2xlT3JpZW50YXRpb24oKTogdm9pZDtcblxuICAvLyBwZXJmb3JtIGEgbW92ZSBwcm9ncmFtbWF0aWNhbGx5XG4gIG1vdmUob3JpZzogY2cuS2V5LCBkZXN0OiBjZy5LZXkpOiB2b2lkO1xuXG4gIC8vIGFkZCBhbmQvb3IgcmVtb3ZlIGFyYml0cmFyeSBwaWVjZXMgb24gdGhlIGJvYXJkXG4gIHNldFBpZWNlcyhwaWVjZXM6IGNnLlBpZWNlc0RpZmYpOiB2b2lkO1xuXG4gIC8vIGNsaWNrIGEgc3F1YXJlIHByb2dyYW1tYXRpY2FsbHlcbiAgc2VsZWN0U3F1YXJlKGtleTogY2cuS2V5IHwgbnVsbCwgZm9yY2U/OiBib29sZWFuKTogdm9pZDtcblxuICAvLyBwdXQgYSBuZXcgcGllY2Ugb24gdGhlIGJvYXJkXG4gIG5ld1BpZWNlKHBpZWNlOiBjZy5QaWVjZSwga2V5OiBjZy5LZXkpOiB2b2lkO1xuXG4gIC8vIHBsYXkgdGhlIGN1cnJlbnQgcHJlbW92ZSwgaWYgYW55OyByZXR1cm5zIHRydWUgaWYgcHJlbW92ZSB3YXMgcGxheWVkXG4gIHBsYXlQcmVtb3ZlKCk6IGJvb2xlYW47XG5cbiAgLy8gY2FuY2VsIHRoZSBjdXJyZW50IHByZW1vdmUsIGlmIGFueVxuICBjYW5jZWxQcmVtb3ZlKCk6IHZvaWQ7XG5cbiAgLy8gcGxheSB0aGUgY3VycmVudCBwcmVkcm9wLCBpZiBhbnk7IHJldHVybnMgdHJ1ZSBpZiBwcmVtb3ZlIHdhcyBwbGF5ZWRcbiAgcGxheVByZWRyb3AodmFsaWRhdGU6IChkcm9wOiBjZy5Ecm9wKSA9PiBib29sZWFuKTogYm9vbGVhbjtcblxuICAvLyBjYW5jZWwgdGhlIGN1cnJlbnQgcHJlZHJvcCwgaWYgYW55XG4gIGNhbmNlbFByZWRyb3AoKTogdm9pZDtcblxuICAvLyBjYW5jZWwgdGhlIGN1cnJlbnQgbW92ZSBiZWluZyBtYWRlXG4gIGNhbmNlbE1vdmUoKTogdm9pZDtcblxuICAvLyBjYW5jZWwgY3VycmVudCBtb3ZlIGFuZCBwcmV2ZW50IGZ1cnRoZXIgb25lc1xuICBzdG9wKCk6IHZvaWQ7XG5cbiAgLy8gbWFrZSBzcXVhcmVzIGV4cGxvZGUgKGF0b21pYyBjaGVzcylcbiAgZXhwbG9kZShrZXlzOiBjZy5LZXlbXSk6IHZvaWQ7XG5cbiAgLy8gcHJvZ3JhbW1hdGljYWxseSBkcmF3IHVzZXIgc2hhcGVzXG4gIHNldFNoYXBlcyhzaGFwZXM6IERyYXdTaGFwZVtdKTogdm9pZDtcblxuICAvLyBwcm9ncmFtbWF0aWNhbGx5IGRyYXcgYXV0byBzaGFwZXNcbiAgc2V0QXV0b1NoYXBlcyhzaGFwZXM6IERyYXdTaGFwZVtdKTogdm9pZDtcblxuICAvLyBzcXVhcmUgbmFtZSBhdCB0aGlzIERPTSBwb3NpdGlvbiAobGlrZSBcImU0XCIpXG4gIGdldEtleUF0RG9tUG9zKHBvczogY2cuTnVtYmVyUGFpcik6IGNnLktleSB8IHVuZGVmaW5lZDtcblxuICAvLyBvbmx5IHVzZWZ1bCB3aGVuIENTUyBjaGFuZ2VzIHRoZSBib2FyZCB3aWR0aC9oZWlnaHQgcmF0aW8gKGZvciAzRClcbiAgcmVkcmF3QWxsOiBjZy5SZWRyYXc7XG5cbiAgLy8gZm9yIGNyYXp5aG91c2UgYW5kIGJvYXJkIGVkaXRvcnNcbiAgZHJhZ05ld1BpZWNlKHBpZWNlOiBjZy5QaWVjZSwgZXZlbnQ6IGNnLk1vdWNoRXZlbnQsIGZvcmNlPzogYm9vbGVhbik6IHZvaWQ7XG5cbiAgLy8gdW5iaW5kcyBhbGwgZXZlbnRzXG4gIC8vIChpbXBvcnRhbnQgZm9yIGRvY3VtZW50LXdpZGUgZXZlbnRzIGxpa2Ugc2Nyb2xsIGFuZCBtb3VzZW1vdmUpXG4gIGRlc3Ryb3k6IGNnLlVuYmluZFxufVxuXG4vLyBzZWUgQVBJIHR5cGVzIGFuZCBkb2N1bWVudGF0aW9ucyBpbiBkdHMvYXBpLmQudHNcbmV4cG9ydCBmdW5jdGlvbiBzdGFydChzdGF0ZTogU3RhdGUsIHJlZHJhd0FsbDogY2cuUmVkcmF3KTogQXBpIHtcblxuICBmdW5jdGlvbiB0b2dnbGVPcmllbnRhdGlvbigpIHtcbiAgICBib2FyZC50b2dnbGVPcmllbnRhdGlvbihzdGF0ZSk7XG4gICAgcmVkcmF3QWxsKCk7XG4gIH07XG5cbiAgcmV0dXJuIHtcblxuICAgIHNldChjb25maWcpIHtcbiAgICAgIGlmIChjb25maWcub3JpZW50YXRpb24gJiYgY29uZmlnLm9yaWVudGF0aW9uICE9PSBzdGF0ZS5vcmllbnRhdGlvbikgdG9nZ2xlT3JpZW50YXRpb24oKTtcbiAgICAgIChjb25maWcuZmVuID8gYW5pbSA6IHJlbmRlcikoc3RhdGUgPT4gY29uZmlndXJlKHN0YXRlLCBjb25maWcpLCBzdGF0ZSk7XG4gICAgfSxcblxuICAgIHN0YXRlLFxuXG4gICAgZ2V0RmVuOiAoKSA9PiBmZW5Xcml0ZShzdGF0ZS5waWVjZXMsIHN0YXRlLmdlb21ldHJ5KSxcblxuICAgIHRvZ2dsZU9yaWVudGF0aW9uLFxuXG4gICAgc2V0UGllY2VzKHBpZWNlcykge1xuICAgICAgYW5pbShzdGF0ZSA9PiBib2FyZC5zZXRQaWVjZXMoc3RhdGUsIHBpZWNlcyksIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgc2VsZWN0U3F1YXJlKGtleSwgZm9yY2UpIHtcbiAgICAgIGlmIChrZXkpIGFuaW0oc3RhdGUgPT4gYm9hcmQuc2VsZWN0U3F1YXJlKHN0YXRlLCBrZXksIGZvcmNlKSwgc3RhdGUpO1xuICAgICAgZWxzZSBpZiAoc3RhdGUuc2VsZWN0ZWQpIHtcbiAgICAgICAgYm9hcmQudW5zZWxlY3Qoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5kb20ucmVkcmF3KCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1vdmUob3JpZywgZGVzdCkge1xuICAgICAgYW5pbShzdGF0ZSA9PiBib2FyZC5iYXNlTW92ZShzdGF0ZSwgb3JpZywgZGVzdCksIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgbmV3UGllY2UocGllY2UsIGtleSkge1xuICAgICAgYW5pbShzdGF0ZSA9PiBib2FyZC5iYXNlTmV3UGllY2Uoc3RhdGUsIHBpZWNlLCBrZXkpLCBzdGF0ZSk7XG4gICAgfSxcblxuICAgIHBsYXlQcmVtb3ZlKCkge1xuICAgICAgaWYgKHN0YXRlLnByZW1vdmFibGUuY3VycmVudCkge1xuICAgICAgICBpZiAoYW5pbShib2FyZC5wbGF5UHJlbW92ZSwgc3RhdGUpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gaWYgdGhlIHByZW1vdmUgY291bGRuJ3QgYmUgcGxheWVkLCByZWRyYXcgdG8gY2xlYXIgaXQgdXBcbiAgICAgICAgc3RhdGUuZG9tLnJlZHJhdygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICBwbGF5UHJlZHJvcCh2YWxpZGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLnByZWRyb3BwYWJsZS5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGJvYXJkLnBsYXlQcmVkcm9wKHN0YXRlLCB2YWxpZGF0ZSk7XG4gICAgICAgIHN0YXRlLmRvbS5yZWRyYXcoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgY2FuY2VsUHJlbW92ZSgpIHtcbiAgICAgIHJlbmRlcihib2FyZC51bnNldFByZW1vdmUsIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgY2FuY2VsUHJlZHJvcCgpIHtcbiAgICAgIHJlbmRlcihib2FyZC51bnNldFByZWRyb3AsIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgY2FuY2VsTW92ZSgpIHtcbiAgICAgIHJlbmRlcihzdGF0ZSA9PiB7IGJvYXJkLmNhbmNlbE1vdmUoc3RhdGUpOyBkcmFnQ2FuY2VsKHN0YXRlKTsgfSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBzdG9wKCkge1xuICAgICAgcmVuZGVyKHN0YXRlID0+IHsgYm9hcmQuc3RvcChzdGF0ZSk7IGRyYWdDYW5jZWwoc3RhdGUpOyB9LCBzdGF0ZSk7XG4gICAgfSxcblxuICAgIGV4cGxvZGUoa2V5czogY2cuS2V5W10pIHtcbiAgICAgIGV4cGxvc2lvbihzdGF0ZSwga2V5cyk7XG4gICAgfSxcblxuICAgIHNldEF1dG9TaGFwZXMoc2hhcGVzOiBEcmF3U2hhcGVbXSkge1xuICAgICAgcmVuZGVyKHN0YXRlID0+IHN0YXRlLmRyYXdhYmxlLmF1dG9TaGFwZXMgPSBzaGFwZXMsIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgc2V0U2hhcGVzKHNoYXBlczogRHJhd1NoYXBlW10pIHtcbiAgICAgIHJlbmRlcihzdGF0ZSA9PiBzdGF0ZS5kcmF3YWJsZS5zaGFwZXMgPSBzaGFwZXMsIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgZ2V0S2V5QXREb21Qb3MocG9zKSB7XG4gICAgICByZXR1cm4gYm9hcmQuZ2V0S2V5QXREb21Qb3MocG9zLCBib2FyZC53aGl0ZVBvdihzdGF0ZSksIHN0YXRlLmRvbS5ib3VuZHMoKSwgc3RhdGUuZ2VvbWV0cnkpO1xuICAgIH0sXG5cbiAgICByZWRyYXdBbGwsXG5cbiAgICBkcmFnTmV3UGllY2UocGllY2UsIGV2ZW50LCBmb3JjZSkge1xuICAgICAgZHJhZ05ld1BpZWNlKHN0YXRlLCBwaWVjZSwgZXZlbnQsIGZvcmNlKVxuICAgIH0sXG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgYm9hcmQuc3RvcChzdGF0ZSk7XG4gICAgICBzdGF0ZS5kb20udW5iaW5kICYmIHN0YXRlLmRvbS51bmJpbmQoKTtcbiAgICAgIHN0YXRlLmRvbS5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCB7IHBvczJrZXksIGtleTJwb3MsIG9wcG9zaXRlLCBjb250YWluc1ggfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgcHJlbW92ZSBmcm9tICcuL3ByZW1vdmUnXG5pbXBvcnQgKiBhcyBjZyBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSBDYWxsYmFjayA9ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxVc2VyRnVuY3Rpb24oZjogQ2FsbGJhY2sgfCB1bmRlZmluZWQsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gIGlmIChmKSBzZXRUaW1lb3V0KCgpID0+IGYoLi4uYXJncyksIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlT3JpZW50YXRpb24oc3RhdGU6IFN0YXRlKTogdm9pZCB7XG4gIHN0YXRlLm9yaWVudGF0aW9uID0gb3Bwb3NpdGUoc3RhdGUub3JpZW50YXRpb24pO1xuICBzdGF0ZS5hbmltYXRpb24uY3VycmVudCA9XG4gIHN0YXRlLmRyYWdnYWJsZS5jdXJyZW50ID1cbiAgc3RhdGUuc2VsZWN0ZWQgPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldChzdGF0ZTogU3RhdGUpOiB2b2lkIHtcbiAgc3RhdGUubGFzdE1vdmUgPSB1bmRlZmluZWQ7XG4gIHVuc2VsZWN0KHN0YXRlKTtcbiAgdW5zZXRQcmVtb3ZlKHN0YXRlKTtcbiAgdW5zZXRQcmVkcm9wKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFBpZWNlcyhzdGF0ZTogU3RhdGUsIHBpZWNlczogY2cuUGllY2VzRGlmZik6IHZvaWQge1xuICBmb3IgKGxldCBrZXkgaW4gcGllY2VzKSB7XG4gICAgY29uc3QgcGllY2UgPSBwaWVjZXNba2V5XTtcbiAgICBpZiAocGllY2UpIHN0YXRlLnBpZWNlc1trZXldID0gcGllY2U7XG4gICAgZWxzZSBkZWxldGUgc3RhdGUucGllY2VzW2tleV07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENoZWNrKHN0YXRlOiBTdGF0ZSwgY29sb3I6IGNnLkNvbG9yIHwgYm9vbGVhbik6IHZvaWQge1xuICBzdGF0ZS5jaGVjayA9IHVuZGVmaW5lZDtcbiAgaWYgKGNvbG9yID09PSB0cnVlKSBjb2xvciA9IHN0YXRlLnR1cm5Db2xvcjtcbiAgaWYgKGNvbG9yKSBmb3IgKGxldCBrIGluIHN0YXRlLnBpZWNlcykge1xuICAgIGlmIChzdGF0ZS5waWVjZXNba10hLnJvbGUgPT09ICdraW5nJyAmJiBzdGF0ZS5waWVjZXNba10hLmNvbG9yID09PSBjb2xvcikge1xuICAgICAgc3RhdGUuY2hlY2sgPSBrIGFzIGNnLktleTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UHJlbW92ZShzdGF0ZTogU3RhdGUsIG9yaWc6IGNnLktleSwgZGVzdDogY2cuS2V5LCBtZXRhOiBjZy5TZXRQcmVtb3ZlTWV0YWRhdGEpOiB2b2lkIHtcbiAgdW5zZXRQcmVkcm9wKHN0YXRlKTtcbiAgc3RhdGUucHJlbW92YWJsZS5jdXJyZW50ID0gW29yaWcsIGRlc3RdO1xuICBjYWxsVXNlckZ1bmN0aW9uKHN0YXRlLnByZW1vdmFibGUuZXZlbnRzLnNldCwgb3JpZywgZGVzdCwgbWV0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNldFByZW1vdmUoc3RhdGU6IFN0YXRlKTogdm9pZCB7XG4gIGlmIChzdGF0ZS5wcmVtb3ZhYmxlLmN1cnJlbnQpIHtcbiAgICBzdGF0ZS5wcmVtb3ZhYmxlLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgY2FsbFVzZXJGdW5jdGlvbihzdGF0ZS5wcmVtb3ZhYmxlLmV2ZW50cy51bnNldCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UHJlZHJvcChzdGF0ZTogU3RhdGUsIHJvbGU6IGNnLlJvbGUsIGtleTogY2cuS2V5KTogdm9pZCB7XG4gIHVuc2V0UHJlbW92ZShzdGF0ZSk7XG4gIHN0YXRlLnByZWRyb3BwYWJsZS5jdXJyZW50ID0geyByb2xlLCBrZXkgfTtcbiAgY2FsbFVzZXJGdW5jdGlvbihzdGF0ZS5wcmVkcm9wcGFibGUuZXZlbnRzLnNldCwgcm9sZSwga2V5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0UHJlZHJvcChzdGF0ZTogU3RhdGUpOiB2b2lkIHtcbiAgY29uc3QgcGQgPSBzdGF0ZS5wcmVkcm9wcGFibGU7XG4gIGlmIChwZC5jdXJyZW50KSB7XG4gICAgcGQuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICBjYWxsVXNlckZ1bmN0aW9uKHBkLmV2ZW50cy51bnNldCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5QXV0b0Nhc3RsZShzdGF0ZTogU3RhdGUsIG9yaWc6IGNnLktleSwgZGVzdDogY2cuS2V5KTogYm9vbGVhbiB7XG4gIGlmICghc3RhdGUuYXV0b0Nhc3RsZSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBraW5nID0gc3RhdGUucGllY2VzW29yaWddO1xuICBpZiAoIWtpbmcgfHwga2luZy5yb2xlICE9PSAna2luZycpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZmlyc3RSYW5rSXMwID0gc3RhdGUuZGltZW5zaW9ucy5oZWlnaHQgPT09IDEwO1xuICBjb25zdCBvcmlnUG9zID0ga2V5MnBvcyhvcmlnLCBmaXJzdFJhbmtJczApO1xuICBpZiAob3JpZ1Bvc1swXSAhPT0gNSkgcmV0dXJuIGZhbHNlO1xuICBpZiAob3JpZ1Bvc1sxXSAhPT0gMSAmJiBvcmlnUG9zWzFdICE9PSA4KSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGRlc3RQb3MgPSBrZXkycG9zKGRlc3QsIGZpcnN0UmFua0lzMCk7XG4gIGxldCBvbGRSb29rUG9zLCBuZXdSb29rUG9zLCBuZXdLaW5nUG9zO1xuICBpZiAoZGVzdFBvc1swXSA9PT0gNyB8fCBkZXN0UG9zWzBdID09PSA4KSB7XG4gICAgb2xkUm9va1BvcyA9IHBvczJrZXkoWzgsIG9yaWdQb3NbMV1dLCBzdGF0ZS5nZW9tZXRyeSk7XG4gICAgbmV3Um9va1BvcyA9IHBvczJrZXkoWzYsIG9yaWdQb3NbMV1dLCBzdGF0ZS5nZW9tZXRyeSk7XG4gICAgbmV3S2luZ1BvcyA9IHBvczJrZXkoWzcsIG9yaWdQb3NbMV1dLCBzdGF0ZS5nZW9tZXRyeSk7XG4gIH0gZWxzZSBpZiAoZGVzdFBvc1swXSA9PT0gMyB8fCBkZXN0UG9zWzBdID09PSAxKSB7XG4gICAgb2xkUm9va1BvcyA9IHBvczJrZXkoWzEsIG9yaWdQb3NbMV1dLCBzdGF0ZS5nZW9tZXRyeSk7XG4gICAgbmV3Um9va1BvcyA9IHBvczJrZXkoWzQsIG9yaWdQb3NbMV1dLCBzdGF0ZS5nZW9tZXRyeSk7XG4gICAgbmV3S2luZ1BvcyA9IHBvczJrZXkoWzMsIG9yaWdQb3NbMV1dLCBzdGF0ZS5nZW9tZXRyeSk7XG4gIH0gZWxzZSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3Qgcm9vayA9IHN0YXRlLnBpZWNlc1tvbGRSb29rUG9zXTtcbiAgaWYgKCFyb29rIHx8IHJvb2sucm9sZSAhPT0gJ3Jvb2snKSByZXR1cm4gZmFsc2U7XG5cbiAgZGVsZXRlIHN0YXRlLnBpZWNlc1tvcmlnXTtcbiAgZGVsZXRlIHN0YXRlLnBpZWNlc1tvbGRSb29rUG9zXTtcblxuICBzdGF0ZS5waWVjZXNbbmV3S2luZ1Bvc10gPSBraW5nXG4gIHN0YXRlLnBpZWNlc1tuZXdSb29rUG9zXSA9IHJvb2s7XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzZU1vdmUoc3RhdGU6IFN0YXRlLCBvcmlnOiBjZy5LZXksIGRlc3Q6IGNnLktleSk6IGNnLlBpZWNlIHwgYm9vbGVhbiB7XG4gIGNvbnN0IG9yaWdQaWVjZSA9IHN0YXRlLnBpZWNlc1tvcmlnXSwgZGVzdFBpZWNlID0gc3RhdGUucGllY2VzW2Rlc3RdO1xuICBpZiAob3JpZyA9PT0gZGVzdCB8fCAhb3JpZ1BpZWNlKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNhcHR1cmVkID0gKGRlc3RQaWVjZSAmJiBkZXN0UGllY2UuY29sb3IgIT09IG9yaWdQaWVjZS5jb2xvcikgPyBkZXN0UGllY2UgOiB1bmRlZmluZWQ7XG4gIGlmIChkZXN0ID09IHN0YXRlLnNlbGVjdGVkKSB1bnNlbGVjdChzdGF0ZSk7XG4gIGNhbGxVc2VyRnVuY3Rpb24oc3RhdGUuZXZlbnRzLm1vdmUsIG9yaWcsIGRlc3QsIGNhcHR1cmVkKTtcbiAgaWYgKCF0cnlBdXRvQ2FzdGxlKHN0YXRlLCBvcmlnLCBkZXN0KSkge1xuICAgIHN0YXRlLnBpZWNlc1tkZXN0XSA9IG9yaWdQaWVjZTtcbiAgICBkZWxldGUgc3RhdGUucGllY2VzW29yaWddO1xuICB9XG4gIHN0YXRlLmxhc3RNb3ZlID0gW29yaWcsIGRlc3RdO1xuICBzdGF0ZS5jaGVjayA9IHVuZGVmaW5lZDtcbiAgY2FsbFVzZXJGdW5jdGlvbihzdGF0ZS5ldmVudHMuY2hhbmdlKTtcbiAgcmV0dXJuIGNhcHR1cmVkIHx8IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlTmV3UGllY2Uoc3RhdGU6IFN0YXRlLCBwaWVjZTogY2cuUGllY2UsIGtleTogY2cuS2V5LCBmb3JjZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgaWYgKHN0YXRlLnBpZWNlc1trZXldKSB7XG4gICAgaWYgKGZvcmNlKSBkZWxldGUgc3RhdGUucGllY2VzW2tleV07XG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY2FsbFVzZXJGdW5jdGlvbihzdGF0ZS5ldmVudHMuZHJvcE5ld1BpZWNlLCBwaWVjZSwga2V5KTtcbiAgc3RhdGUucGllY2VzW2tleV0gPSBwaWVjZTtcbiAgc3RhdGUubGFzdE1vdmUgPSBba2V5XTtcbiAgc3RhdGUuY2hlY2sgPSB1bmRlZmluZWQ7XG4gIGNhbGxVc2VyRnVuY3Rpb24oc3RhdGUuZXZlbnRzLmNoYW5nZSk7XG4gIHN0YXRlLm1vdmFibGUuZGVzdHMgPSB1bmRlZmluZWQ7XG4gIHN0YXRlLnR1cm5Db2xvciA9IG9wcG9zaXRlKHN0YXRlLnR1cm5Db2xvcik7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBiYXNlVXNlck1vdmUoc3RhdGU6IFN0YXRlLCBvcmlnOiBjZy5LZXksIGRlc3Q6IGNnLktleSk6IGNnLlBpZWNlIHwgYm9vbGVhbiB7XG4gIGNvbnN0IHJlc3VsdCA9IGJhc2VNb3ZlKHN0YXRlLCBvcmlnLCBkZXN0KTtcbiAgaWYgKHJlc3VsdCkge1xuICAgIHN0YXRlLm1vdmFibGUuZGVzdHMgPSB1bmRlZmluZWQ7XG4gICAgc3RhdGUudHVybkNvbG9yID0gb3Bwb3NpdGUoc3RhdGUudHVybkNvbG9yKTtcbiAgICBzdGF0ZS5hbmltYXRpb24uY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlck1vdmUoc3RhdGU6IFN0YXRlLCBvcmlnOiBjZy5LZXksIGRlc3Q6IGNnLktleSk6IGJvb2xlYW4ge1xuICBpZiAoY2FuTW92ZShzdGF0ZSwgb3JpZywgZGVzdCkpIHtcbiAgICBjb25zdCByZXN1bHQgPSBiYXNlVXNlck1vdmUoc3RhdGUsIG9yaWcsIGRlc3QpO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGNvbnN0IGhvbGRUaW1lID0gc3RhdGUuaG9sZC5zdG9wKCk7XG4gICAgICB1bnNlbGVjdChzdGF0ZSk7XG4gICAgICBjb25zdCBtZXRhZGF0YTogY2cuTW92ZU1ldGFkYXRhID0ge1xuICAgICAgICBwcmVtb3ZlOiBmYWxzZSxcbiAgICAgICAgY3RybEtleTogc3RhdGUuc3RhdHMuY3RybEtleSxcbiAgICAgICAgaG9sZFRpbWVcbiAgICAgIH07XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSBtZXRhZGF0YS5jYXB0dXJlZCA9IHJlc3VsdDtcbiAgICAgIGNhbGxVc2VyRnVuY3Rpb24oc3RhdGUubW92YWJsZS5ldmVudHMuYWZ0ZXIsIG9yaWcsIGRlc3QsIG1ldGFkYXRhKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjYW5QcmVtb3ZlKHN0YXRlLCBvcmlnLCBkZXN0KSkge1xuICAgIHNldFByZW1vdmUoc3RhdGUsIG9yaWcsIGRlc3QsIHtcbiAgICAgIGN0cmxLZXk6IHN0YXRlLnN0YXRzLmN0cmxLZXlcbiAgICB9KTtcbiAgICB1bnNlbGVjdChzdGF0ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdW5zZWxlY3Qoc3RhdGUpO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcm9wTmV3UGllY2Uoc3RhdGU6IFN0YXRlLCBvcmlnOiBjZy5LZXksIGRlc3Q6IGNnLktleSwgZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XG4gIGlmIChjYW5Ecm9wKHN0YXRlLCBvcmlnLCBkZXN0KSB8fCBmb3JjZSkge1xuICAgIGNvbnN0IHBpZWNlID0gc3RhdGUucGllY2VzW29yaWddITtcbiAgICBkZWxldGUgc3RhdGUucGllY2VzW29yaWddO1xuICAgIGJhc2VOZXdQaWVjZShzdGF0ZSwgcGllY2UsIGRlc3QsIGZvcmNlKTtcbiAgICBjYWxsVXNlckZ1bmN0aW9uKHN0YXRlLm1vdmFibGUuZXZlbnRzLmFmdGVyTmV3UGllY2UsIHBpZWNlLnJvbGUsIGRlc3QsIHtcbiAgICAgIHByZWRyb3A6IGZhbHNlXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoY2FuUHJlZHJvcChzdGF0ZSwgb3JpZywgZGVzdCkpIHtcbiAgICBzZXRQcmVkcm9wKHN0YXRlLCBzdGF0ZS5waWVjZXNbb3JpZ10hLnJvbGUsIGRlc3QpO1xuICB9IGVsc2Uge1xuICAgIHVuc2V0UHJlbW92ZShzdGF0ZSk7XG4gICAgdW5zZXRQcmVkcm9wKHN0YXRlKTtcbiAgfVxuICBkZWxldGUgc3RhdGUucGllY2VzW29yaWddO1xuICB1bnNlbGVjdChzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RTcXVhcmUoc3RhdGU6IFN0YXRlLCBrZXk6IGNnLktleSwgZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XG4gIGNhbGxVc2VyRnVuY3Rpb24oc3RhdGUuZXZlbnRzLnNlbGVjdCwga2V5KTtcbiAgaWYgKHN0YXRlLnNlbGVjdGVkKSB7XG4gICAgaWYgKHN0YXRlLnNlbGVjdGVkID09PSBrZXkgJiYgIXN0YXRlLmRyYWdnYWJsZS5lbmFibGVkKSB7XG4gICAgICB1bnNlbGVjdChzdGF0ZSk7XG4gICAgICBzdGF0ZS5ob2xkLmNhbmNlbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoKHN0YXRlLnNlbGVjdGFibGUuZW5hYmxlZCB8fCBmb3JjZSkgJiYgc3RhdGUuc2VsZWN0ZWQgIT09IGtleSkge1xuICAgICAgaWYgKHVzZXJNb3ZlKHN0YXRlLCBzdGF0ZS5zZWxlY3RlZCwga2V5KSkge1xuICAgICAgICBzdGF0ZS5zdGF0cy5kcmFnZ2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGlzTW92YWJsZShzdGF0ZSwga2V5KSB8fCBpc1ByZW1vdmFibGUoc3RhdGUsIGtleSkpIHtcbiAgICBzZXRTZWxlY3RlZChzdGF0ZSwga2V5KTtcbiAgICBzdGF0ZS5ob2xkLnN0YXJ0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNlbGVjdGVkKHN0YXRlOiBTdGF0ZSwga2V5OiBjZy5LZXkpOiB2b2lkIHtcbiAgc3RhdGUuc2VsZWN0ZWQgPSBrZXk7XG4gIGlmIChpc1ByZW1vdmFibGUoc3RhdGUsIGtleSkpIHtcbiAgICBzdGF0ZS5wcmVtb3ZhYmxlLmRlc3RzID0gcHJlbW92ZShzdGF0ZS5waWVjZXMsIGtleSwgc3RhdGUucHJlbW92YWJsZS5jYXN0bGUsIHN0YXRlLmdlb21ldHJ5KTtcbiAgfVxuICBlbHNlIHN0YXRlLnByZW1vdmFibGUuZGVzdHMgPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNlbGVjdChzdGF0ZTogU3RhdGUpOiB2b2lkIHtcbiAgc3RhdGUuc2VsZWN0ZWQgPSB1bmRlZmluZWQ7XG4gIHN0YXRlLnByZW1vdmFibGUuZGVzdHMgPSB1bmRlZmluZWQ7XG4gIHN0YXRlLmhvbGQuY2FuY2VsKCk7XG59XG5cbmZ1bmN0aW9uIGlzTW92YWJsZShzdGF0ZTogU3RhdGUsIG9yaWc6IGNnLktleSk6IGJvb2xlYW4ge1xuICBjb25zdCBwaWVjZSA9IHN0YXRlLnBpZWNlc1tvcmlnXTtcbiAgcmV0dXJuICEhcGllY2UgJiYgKFxuICAgIHN0YXRlLm1vdmFibGUuY29sb3IgPT09ICdib3RoJyB8fCAoXG4gICAgICBzdGF0ZS5tb3ZhYmxlLmNvbG9yID09PSBwaWVjZS5jb2xvciAmJlxuICAgICAgICBzdGF0ZS50dXJuQ29sb3IgPT09IHBpZWNlLmNvbG9yXG4gICAgKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5Nb3ZlKHN0YXRlOiBTdGF0ZSwgb3JpZzogY2cuS2V5LCBkZXN0OiBjZy5LZXkpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9yaWcgIT09IGRlc3QgJiYgaXNNb3ZhYmxlKHN0YXRlLCBvcmlnKSAmJiAoXG4gICAgc3RhdGUubW92YWJsZS5mcmVlIHx8ICghIXN0YXRlLm1vdmFibGUuZGVzdHMgJiYgY29udGFpbnNYKHN0YXRlLm1vdmFibGUuZGVzdHNbb3JpZ10sIGRlc3QpKVxuICApO1xufVxuXG5mdW5jdGlvbiBjYW5Ecm9wKHN0YXRlOiBTdGF0ZSwgb3JpZzogY2cuS2V5LCBkZXN0OiBjZy5LZXkpOiBib29sZWFuIHtcbiAgY29uc3QgcGllY2UgPSBzdGF0ZS5waWVjZXNbb3JpZ107XG4gIHJldHVybiAhIXBpZWNlICYmIGRlc3QgJiYgKG9yaWcgPT09IGRlc3QgfHwgIXN0YXRlLnBpZWNlc1tkZXN0XSkgJiYgKFxuICAgIHN0YXRlLm1vdmFibGUuY29sb3IgPT09ICdib3RoJyB8fCAoXG4gICAgICBzdGF0ZS5tb3ZhYmxlLmNvbG9yID09PSBwaWVjZS5jb2xvciAmJlxuICAgICAgICBzdGF0ZS50dXJuQ29sb3IgPT09IHBpZWNlLmNvbG9yXG4gICAgKSk7XG59XG5cblxuZnVuY3Rpb24gaXNQcmVtb3ZhYmxlKHN0YXRlOiBTdGF0ZSwgb3JpZzogY2cuS2V5KTogYm9vbGVhbiB7XG4gIGNvbnN0IHBpZWNlID0gc3RhdGUucGllY2VzW29yaWddO1xuICByZXR1cm4gISFwaWVjZSAmJiBzdGF0ZS5wcmVtb3ZhYmxlLmVuYWJsZWQgJiZcbiAgc3RhdGUubW92YWJsZS5jb2xvciA9PT0gcGllY2UuY29sb3IgJiZcbiAgICBzdGF0ZS50dXJuQ29sb3IgIT09IHBpZWNlLmNvbG9yO1xufVxuXG5mdW5jdGlvbiBjYW5QcmVtb3ZlKHN0YXRlOiBTdGF0ZSwgb3JpZzogY2cuS2V5LCBkZXN0OiBjZy5LZXkpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9yaWcgIT09IGRlc3QgJiZcbiAgaXNQcmVtb3ZhYmxlKHN0YXRlLCBvcmlnKSAmJlxuICBjb250YWluc1gocHJlbW92ZShzdGF0ZS5waWVjZXMsIG9yaWcsIHN0YXRlLnByZW1vdmFibGUuY2FzdGxlLCBzdGF0ZS5nZW9tZXRyeSksIGRlc3QpO1xufVxuXG5mdW5jdGlvbiBjYW5QcmVkcm9wKHN0YXRlOiBTdGF0ZSwgb3JpZzogY2cuS2V5LCBkZXN0OiBjZy5LZXkpOiBib29sZWFuIHtcbiAgY29uc3QgcGllY2UgPSBzdGF0ZS5waWVjZXNbb3JpZ107XG4gIGNvbnN0IGRlc3RQaWVjZSA9IHN0YXRlLnBpZWNlc1tkZXN0XTtcbiAgcmV0dXJuICEhcGllY2UgJiYgZGVzdCAmJlxuICAoIWRlc3RQaWVjZSB8fCBkZXN0UGllY2UuY29sb3IgIT09IHN0YXRlLm1vdmFibGUuY29sb3IpICYmXG4gIHN0YXRlLnByZWRyb3BwYWJsZS5lbmFibGVkICYmXG4gIChwaWVjZS5yb2xlICE9PSAncGF3bicgfHwgKGRlc3RbMV0gIT09ICcxJyAmJiBkZXN0WzFdICE9PSAnOCcpKSAmJlxuICBzdGF0ZS5tb3ZhYmxlLmNvbG9yID09PSBwaWVjZS5jb2xvciAmJlxuICAgIHN0YXRlLnR1cm5Db2xvciAhPT0gcGllY2UuY29sb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RyYWdnYWJsZShzdGF0ZTogU3RhdGUsIG9yaWc6IGNnLktleSk6IGJvb2xlYW4ge1xuICBjb25zdCBwaWVjZSA9IHN0YXRlLnBpZWNlc1tvcmlnXTtcbiAgcmV0dXJuICEhcGllY2UgJiYgc3RhdGUuZHJhZ2dhYmxlLmVuYWJsZWQgJiYgKFxuICAgIHN0YXRlLm1vdmFibGUuY29sb3IgPT09ICdib3RoJyB8fCAoXG4gICAgICBzdGF0ZS5tb3ZhYmxlLmNvbG9yID09PSBwaWVjZS5jb2xvciAmJiAoXG4gICAgICAgIHN0YXRlLnR1cm5Db2xvciA9PT0gcGllY2UuY29sb3IgfHwgc3RhdGUucHJlbW92YWJsZS5lbmFibGVkXG4gICAgICApXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGxheVByZW1vdmUoc3RhdGU6IFN0YXRlKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1vdmUgPSBzdGF0ZS5wcmVtb3ZhYmxlLmN1cnJlbnQ7XG4gIGlmICghbW92ZSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBvcmlnID0gbW92ZVswXSwgZGVzdCA9IG1vdmVbMV07XG4gIGxldCBzdWNjZXNzID0gZmFsc2U7XG4gIGlmIChjYW5Nb3ZlKHN0YXRlLCBvcmlnLCBkZXN0KSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGJhc2VVc2VyTW92ZShzdGF0ZSwgb3JpZywgZGVzdCk7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY29uc3QgbWV0YWRhdGE6IGNnLk1vdmVNZXRhZGF0YSA9IHsgcHJlbW92ZTogdHJ1ZSB9O1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkgbWV0YWRhdGEuY2FwdHVyZWQgPSByZXN1bHQ7XG4gICAgICBjYWxsVXNlckZ1bmN0aW9uKHN0YXRlLm1vdmFibGUuZXZlbnRzLmFmdGVyLCBvcmlnLCBkZXN0LCBtZXRhZGF0YSk7XG4gICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgdW5zZXRQcmVtb3ZlKHN0YXRlKTtcbiAgcmV0dXJuIHN1Y2Nlc3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwbGF5UHJlZHJvcChzdGF0ZTogU3RhdGUsIHZhbGlkYXRlOiAoZHJvcDogY2cuRHJvcCkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuICBsZXQgZHJvcCA9IHN0YXRlLnByZWRyb3BwYWJsZS5jdXJyZW50LFxuICBzdWNjZXNzID0gZmFsc2U7XG4gIGlmICghZHJvcCkgcmV0dXJuIGZhbHNlO1xuICBpZiAodmFsaWRhdGUoZHJvcCkpIHtcbiAgICBjb25zdCBwaWVjZSA9IHtcbiAgICAgIHJvbGU6IGRyb3Aucm9sZSxcbiAgICAgIGNvbG9yOiBzdGF0ZS5tb3ZhYmxlLmNvbG9yXG4gICAgfSBhcyBjZy5QaWVjZTtcbiAgICBpZiAoYmFzZU5ld1BpZWNlKHN0YXRlLCBwaWVjZSwgZHJvcC5rZXkpKSB7XG4gICAgICBjYWxsVXNlckZ1bmN0aW9uKHN0YXRlLm1vdmFibGUuZXZlbnRzLmFmdGVyTmV3UGllY2UsIGRyb3Aucm9sZSwgZHJvcC5rZXksIHtcbiAgICAgICAgcHJlZHJvcDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgdW5zZXRQcmVkcm9wKHN0YXRlKTtcbiAgcmV0dXJuIHN1Y2Nlc3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWxNb3ZlKHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICB1bnNldFByZW1vdmUoc3RhdGUpO1xuICB1bnNldFByZWRyb3Aoc3RhdGUpO1xuICB1bnNlbGVjdChzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wKHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICBzdGF0ZS5tb3ZhYmxlLmNvbG9yID1cbiAgc3RhdGUubW92YWJsZS5kZXN0cyA9XG4gIHN0YXRlLmFuaW1hdGlvbi5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICBjYW5jZWxNb3ZlKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleUF0RG9tUG9zKHBvczogY2cuTnVtYmVyUGFpciwgYXNXaGl0ZTogYm9vbGVhbiwgYm91bmRzOiBDbGllbnRSZWN0LCBnZW9tOiBjZy5HZW9tZXRyeSk6IGNnLktleSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJkID0gY2cuZGltZW5zaW9uc1tnZW9tXTtcbiAgbGV0IGZpbGUgPSBNYXRoLmNlaWwoYmQud2lkdGggKiAoKHBvc1swXSAtIGJvdW5kcy5sZWZ0KSAvIGJvdW5kcy53aWR0aCkpO1xuICBpZiAoIWFzV2hpdGUpIGZpbGUgPSBiZC53aWR0aCArIDEgLSBmaWxlO1xuICBsZXQgcmFuayA9IE1hdGguY2VpbChiZC5oZWlnaHQgLSAoYmQuaGVpZ2h0ICogKChwb3NbMV0gLSBib3VuZHMudG9wKSAvIGJvdW5kcy5oZWlnaHQpKSk7XG4gIGlmICghYXNXaGl0ZSkgcmFuayA9IGJkLmhlaWdodCArIDEgLSByYW5rO1xuICByZXR1cm4gKGZpbGUgPiAwICYmIGZpbGUgPCBiZC53aWR0aCArIDEgJiYgcmFuayA+IDAgJiYgcmFuayA8IGJkLmhlaWdodCArIDEpID8gcG9zMmtleShbZmlsZSwgcmFua10sIGdlb20pIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2hpdGVQb3YoczogU3RhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHMub3JpZW50YXRpb24gPT09ICd3aGl0ZSc7XG59XG4iLCJpbXBvcnQgeyBBcGksIHN0YXJ0IH0gZnJvbSAnLi9hcGknXG5pbXBvcnQgeyBDb25maWcsIGNvbmZpZ3VyZSB9IGZyb20gJy4vY29uZmlnJ1xuaW1wb3J0IHsgU3RhdGUsIGRlZmF1bHRzIH0gZnJvbSAnLi9zdGF0ZSdcblxuaW1wb3J0IHJlbmRlcldyYXAgZnJvbSAnLi93cmFwJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICcuL2V2ZW50cydcbmltcG9ydCByZW5kZXIgZnJvbSAnLi9yZW5kZXInO1xuaW1wb3J0ICogYXMgc3ZnIGZyb20gJy4vc3ZnJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIENoZXNzZ3JvdW5kKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb25maWc/OiBDb25maWcpOiBBcGkge1xuXG4gIGNvbnN0IHN0YXRlID0gZGVmYXVsdHMoKSBhcyBTdGF0ZTtcblxuICBjb25maWd1cmUoc3RhdGUsIGNvbmZpZyB8fCB7fSk7XG5cbiAgZnVuY3Rpb24gcmVkcmF3QWxsKCkge1xuICAgIGxldCBwcmV2VW5iaW5kID0gc3RhdGUuZG9tICYmIHN0YXRlLmRvbS51bmJpbmQ7XG4gICAgLy8gY29tcHV0ZSBib3VuZHMgZnJvbSBleGlzdGluZyBib2FyZCBlbGVtZW50IGlmIHBvc3NpYmxlXG4gICAgLy8gdGhpcyBhbGxvd3Mgbm9uLXNxdWFyZSBib2FyZHMgZnJvbSBDU1MgdG8gYmUgaGFuZGxlZCAoZm9yIDNEKVxuICAgIGNvbnN0IHJlbGF0aXZlID0gc3RhdGUudmlld09ubHkgJiYgIXN0YXRlLmRyYXdhYmxlLnZpc2libGUsXG4gICAgZWxlbWVudHMgPSByZW5kZXJXcmFwKGVsZW1lbnQsIHN0YXRlLCByZWxhdGl2ZSksXG4gICAgYm91bmRzID0gdXRpbC5tZW1vKCgpID0+IGVsZW1lbnRzLmJvYXJkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICByZWRyYXdOb3cgPSAoc2tpcFN2Zz86IGJvb2xlYW4pID0+IHtcbiAgICAgIHJlbmRlcihzdGF0ZSk7XG4gICAgICBpZiAoIXNraXBTdmcgJiYgZWxlbWVudHMuc3ZnKSBzdmcucmVuZGVyU3ZnKHN0YXRlLCBlbGVtZW50cy5zdmcpO1xuICAgIH07XG4gICAgc3RhdGUuZG9tID0ge1xuICAgICAgZWxlbWVudHMsXG4gICAgICBib3VuZHMsXG4gICAgICByZWRyYXc6IGRlYm91bmNlUmVkcmF3KHJlZHJhd05vdyksXG4gICAgICByZWRyYXdOb3csXG4gICAgICB1bmJpbmQ6IHByZXZVbmJpbmQsXG4gICAgICByZWxhdGl2ZVxuICAgIH07XG4gICAgc3RhdGUuZHJhd2FibGUucHJldlN2Z0hhc2ggPSAnJztcbiAgICByZWRyYXdOb3coZmFsc2UpO1xuICAgIGV2ZW50cy5iaW5kQm9hcmQoc3RhdGUpO1xuICAgIGlmICghcHJldlVuYmluZCkgc3RhdGUuZG9tLnVuYmluZCA9IGV2ZW50cy5iaW5kRG9jdW1lbnQoc3RhdGUsIHJlZHJhd0FsbCk7XG4gICAgc3RhdGUuZXZlbnRzLmluc2VydCAmJiBzdGF0ZS5ldmVudHMuaW5zZXJ0KGVsZW1lbnRzKTtcbiAgfVxuICByZWRyYXdBbGwoKTtcblxuICByZXR1cm4gc3RhcnQoc3RhdGUsIHJlZHJhd0FsbCk7XG59O1xuXG5mdW5jdGlvbiBkZWJvdW5jZVJlZHJhdyhyZWRyYXdOb3c6IChza2lwU3ZnPzogYm9vbGVhbikgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICBsZXQgcmVkcmF3aW5nID0gZmFsc2U7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKHJlZHJhd2luZykgcmV0dXJuO1xuICAgIHJlZHJhd2luZyA9IHRydWU7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHJlZHJhd05vdygpO1xuICAgICAgcmVkcmF3aW5nID0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG59XG4iLCJpbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vc3RhdGUnXG5pbXBvcnQgeyBzZXRDaGVjaywgc2V0U2VsZWN0ZWQgfSBmcm9tICcuL2JvYXJkJ1xuaW1wb3J0IHsgcmVhZCBhcyBmZW5SZWFkIH0gZnJvbSAnLi9mZW4nXG5pbXBvcnQgeyBEcmF3U2hhcGUsIERyYXdCcnVzaCB9IGZyb20gJy4vZHJhdydcbmltcG9ydCAqIGFzIGNnIGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgZmVuPzogY2cuRkVOOyAvLyBjaGVzcyBwb3NpdGlvbiBpbiBGb3JzeXRoIG5vdGF0aW9uXG4gIG9yaWVudGF0aW9uPzogY2cuQ29sb3I7IC8vIGJvYXJkIG9yaWVudGF0aW9uLiB3aGl0ZSB8IGJsYWNrXG4gIHR1cm5Db2xvcj86IGNnLkNvbG9yOyAvLyB0dXJuIHRvIHBsYXkuIHdoaXRlIHwgYmxhY2tcbiAgY2hlY2s/OiBjZy5Db2xvciB8IGJvb2xlYW47IC8vIHRydWUgZm9yIGN1cnJlbnQgY29sb3IsIGZhbHNlIHRvIHVuc2V0XG4gIGxhc3RNb3ZlPzogY2cuS2V5W107IC8vIHNxdWFyZXMgcGFydCBvZiB0aGUgbGFzdCBtb3ZlIFtcImMzXCIsIFwiYzRcIl1cbiAgc2VsZWN0ZWQ/OiBjZy5LZXk7IC8vIHNxdWFyZSBjdXJyZW50bHkgc2VsZWN0ZWQgXCJhMVwiXG4gIGNvb3JkaW5hdGVzPzogYm9vbGVhbjsgLy8gaW5jbHVkZSBjb29yZHMgYXR0cmlidXRlc1xuICBhdXRvQ2FzdGxlPzogYm9vbGVhbjsgLy8gaW1tZWRpYXRlbHkgY29tcGxldGUgdGhlIGNhc3RsZSBieSBtb3ZpbmcgdGhlIHJvb2sgYWZ0ZXIga2luZyBtb3ZlXG4gIHZpZXdPbmx5PzogYm9vbGVhbjsgLy8gZG9uJ3QgYmluZCBldmVudHM6IHRoZSB1c2VyIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBtb3ZlIHBpZWNlcyBhcm91bmRcbiAgZGlzYWJsZUNvbnRleHRNZW51PzogYm9vbGVhbjsgLy8gYmVjYXVzZSB3aG8gbmVlZHMgYSBjb250ZXh0IG1lbnUgb24gYSBjaGVzc2JvYXJkXG4gIHJlc2l6YWJsZT86IGJvb2xlYW47IC8vIGxpc3RlbnMgdG8gY2hlc3Nncm91bmQucmVzaXplIG9uIGRvY3VtZW50LmJvZHkgdG8gY2xlYXIgYm91bmRzIGNhY2hlXG4gIGFkZFBpZWNlWkluZGV4PzogYm9vbGVhbjsgLy8gYWRkcyB6LWluZGV4IHZhbHVlcyB0byBwaWVjZXMgKGZvciAzRClcbiAgLy8gcGllY2VLZXk6IGJvb2xlYW47IC8vIGFkZCBhIGRhdGEta2V5IGF0dHJpYnV0ZSB0byBwaWVjZSBlbGVtZW50c1xuICBoaWdobGlnaHQ/OiB7XG4gICAgbGFzdE1vdmU/OiBib29sZWFuOyAvLyBhZGQgbGFzdC1tb3ZlIGNsYXNzIHRvIHNxdWFyZXNcbiAgICBjaGVjaz86IGJvb2xlYW47IC8vIGFkZCBjaGVjayBjbGFzcyB0byBzcXVhcmVzXG4gIH07XG4gIGFuaW1hdGlvbj86IHtcbiAgICBlbmFibGVkPzogYm9vbGVhbjtcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcbiAgfTtcbiAgbW92YWJsZT86IHtcbiAgICBmcmVlPzogYm9vbGVhbjsgLy8gYWxsIG1vdmVzIGFyZSB2YWxpZCAtIGJvYXJkIGVkaXRvclxuICAgIGNvbG9yPzogY2cuQ29sb3IgfCAnYm90aCc7IC8vIGNvbG9yIHRoYXQgY2FuIG1vdmUuIHdoaXRlIHwgYmxhY2sgfCBib3RoIHwgdW5kZWZpbmVkXG4gICAgZGVzdHM/OiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBjZy5LZXlbXVxuICAgIH07IC8vIHZhbGlkIG1vdmVzLiB7XCJhMlwiIFtcImEzXCIgXCJhNFwiXSBcImIxXCIgW1wiYTNcIiBcImMzXCJdfVxuICAgIHNob3dEZXN0cz86IGJvb2xlYW47IC8vIHdoZXRoZXIgdG8gYWRkIHRoZSBtb3ZlLWRlc3QgY2xhc3Mgb24gc3F1YXJlc1xuICAgIGV2ZW50cz86IHtcbiAgICAgIGFmdGVyPzogKG9yaWc6IGNnLktleSwgZGVzdDogY2cuS2V5LCBtZXRhZGF0YTogY2cuTW92ZU1ldGFkYXRhKSA9PiB2b2lkOyAvLyBjYWxsZWQgYWZ0ZXIgdGhlIG1vdmUgaGFzIGJlZW4gcGxheWVkXG4gICAgICBhZnRlck5ld1BpZWNlPzogKHJvbGU6IGNnLlJvbGUsIGtleTogY2cuS2V5LCBtZXRhZGF0YTogY2cuTW92ZU1ldGFkYXRhKSA9PiB2b2lkOyAvLyBjYWxsZWQgYWZ0ZXIgYSBuZXcgcGllY2UgaXMgZHJvcHBlZCBvbiB0aGUgYm9hcmRcbiAgICB9O1xuICAgIHJvb2tDYXN0bGU/OiBib29sZWFuIC8vIGNhc3RsZSBieSBtb3ZpbmcgdGhlIGtpbmcgdG8gdGhlIHJvb2tcbiAgfTtcbiAgcHJlbW92YWJsZT86IHtcbiAgICBlbmFibGVkPzogYm9vbGVhbjsgLy8gYWxsb3cgcHJlbW92ZXMgZm9yIGNvbG9yIHRoYXQgY2FuIG5vdCBtb3ZlXG4gICAgc2hvd0Rlc3RzPzogYm9vbGVhbjsgLy8gd2hldGhlciB0byBhZGQgdGhlIHByZW1vdmUtZGVzdCBjbGFzcyBvbiBzcXVhcmVzXG4gICAgY2FzdGxlPzogYm9vbGVhbjsgLy8gd2hldGhlciB0byBhbGxvdyBraW5nIGNhc3RsZSBwcmVtb3Zlc1xuICAgIGRlc3RzPzogY2cuS2V5W107IC8vIHByZW1vdmUgZGVzdGluYXRpb25zIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICBldmVudHM/OiB7XG4gICAgICBzZXQ/OiAob3JpZzogY2cuS2V5LCBkZXN0OiBjZy5LZXksIG1ldGFkYXRhPzogY2cuU2V0UHJlbW92ZU1ldGFkYXRhKSA9PiB2b2lkOyAvLyBjYWxsZWQgYWZ0ZXIgdGhlIHByZW1vdmUgaGFzIGJlZW4gc2V0XG4gICAgICB1bnNldD86ICgpID0+IHZvaWQ7ICAvLyBjYWxsZWQgYWZ0ZXIgdGhlIHByZW1vdmUgaGFzIGJlZW4gdW5zZXRcbiAgICB9XG4gIH07XG4gIHByZWRyb3BwYWJsZT86IHtcbiAgICBlbmFibGVkPzogYm9vbGVhbjsgLy8gYWxsb3cgcHJlZHJvcHMgZm9yIGNvbG9yIHRoYXQgY2FuIG5vdCBtb3ZlXG4gICAgZXZlbnRzPzoge1xuICAgICAgc2V0PzogKHJvbGU6IGNnLlJvbGUsIGtleTogY2cuS2V5KSA9PiB2b2lkOyAvLyBjYWxsZWQgYWZ0ZXIgdGhlIHByZWRyb3AgaGFzIGJlZW4gc2V0XG4gICAgICB1bnNldD86ICgpID0+IHZvaWQ7IC8vIGNhbGxlZCBhZnRlciB0aGUgcHJlZHJvcCBoYXMgYmVlbiB1bnNldFxuICAgIH1cbiAgfTtcbiAgZHJhZ2dhYmxlPzoge1xuICAgIGVuYWJsZWQ/OiBib29sZWFuOyAvLyBhbGxvdyBtb3ZlcyAmIHByZW1vdmVzIHRvIHVzZSBkcmFnJ24gZHJvcFxuICAgIGRpc3RhbmNlPzogbnVtYmVyOyAvLyBtaW5pbXVtIGRpc3RhbmNlIHRvIGluaXRpYXRlIGEgZHJhZzsgaW4gcGl4ZWxzXG4gICAgYXV0b0Rpc3RhbmNlPzogYm9vbGVhbjsgLy8gbGV0cyBjaGVzc2dyb3VuZCBzZXQgZGlzdGFuY2UgdG8gemVybyB3aGVuIHVzZXIgZHJhZ3MgcGllY2VzXG4gICAgY2VudGVyUGllY2U/OiBib29sZWFuOyAvLyBjZW50ZXIgdGhlIHBpZWNlIG9uIGN1cnNvciBhdCBkcmFnIHN0YXJ0XG4gICAgc2hvd0dob3N0PzogYm9vbGVhbjsgLy8gc2hvdyBnaG9zdCBvZiBwaWVjZSBiZWluZyBkcmFnZ2VkXG4gICAgZGVsZXRlT25Ecm9wT2ZmPzogYm9vbGVhbjsgLy8gZGVsZXRlIGEgcGllY2Ugd2hlbiBpdCBpcyBkcm9wcGVkIG9mZiB0aGUgYm9hcmRcbiAgfTtcbiAgc2VsZWN0YWJsZT86IHtcbiAgICAvLyBkaXNhYmxlIHRvIGVuZm9yY2UgZHJhZ2dpbmcgb3ZlciBjbGljay1jbGljayBtb3ZlXG4gICAgZW5hYmxlZD86IGJvb2xlYW5cbiAgfTtcbiAgZXZlbnRzPzoge1xuICAgIGNoYW5nZT86ICgpID0+IHZvaWQ7IC8vIGNhbGxlZCBhZnRlciB0aGUgc2l0dWF0aW9uIGNoYW5nZXMgb24gdGhlIGJvYXJkXG4gICAgLy8gY2FsbGVkIGFmdGVyIGEgcGllY2UgaGFzIGJlZW4gbW92ZWQuXG4gICAgLy8gY2FwdHVyZWRQaWVjZSBpcyB1bmRlZmluZWQgb3IgbGlrZSB7Y29sb3I6ICd3aGl0ZSc7ICdyb2xlJzogJ3F1ZWVuJ31cbiAgICBtb3ZlPzogKG9yaWc6IGNnLktleSwgZGVzdDogY2cuS2V5LCBjYXB0dXJlZFBpZWNlPzogY2cuUGllY2UpID0+IHZvaWQ7XG4gICAgZHJvcE5ld1BpZWNlPzogKHBpZWNlOiBjZy5QaWVjZSwga2V5OiBjZy5LZXkpID0+IHZvaWQ7XG4gICAgc2VsZWN0PzogKGtleTogY2cuS2V5KSA9PiB2b2lkOyAvLyBjYWxsZWQgd2hlbiBhIHNxdWFyZSBpcyBzZWxlY3RlZFxuICAgIGluc2VydD86IChlbGVtZW50czogY2cuRWxlbWVudHMpID0+IHZvaWQ7IC8vIHdoZW4gdGhlIGJvYXJkIERPTSBoYXMgYmVlbiAocmUpaW5zZXJ0ZWRcbiAgfTtcbiAgZHJhd2FibGU/OiB7XG4gICAgZW5hYmxlZD86IGJvb2xlYW47IC8vIGNhbiBkcmF3XG4gICAgdmlzaWJsZT86IGJvb2xlYW47IC8vIGNhbiB2aWV3XG4gICAgZXJhc2VPbkNsaWNrPzogYm9vbGVhbjtcbiAgICBzaGFwZXM/OiBEcmF3U2hhcGVbXTtcbiAgICBhdXRvU2hhcGVzPzogRHJhd1NoYXBlW107XG4gICAgYnJ1c2hlcz86IERyYXdCcnVzaFtdO1xuICAgIHBpZWNlcz86IHtcbiAgICAgIGJhc2VVcmw/OiBzdHJpbmc7XG4gICAgfVxuICB9O1xuICBnZW9tZXRyeT86IGNnLkdlb21ldHJ5OyAvLyBkaW04eDggfCBkaW05eDkgfCBkaW0xMHg4IHwgZGltOXgxMFxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlKHN0YXRlOiBTdGF0ZSwgY29uZmlnOiBDb25maWcpIHtcblxuICAvLyBkb24ndCBtZXJnZSBkZXN0aW5hdGlvbnMuIEp1c3Qgb3ZlcnJpZGUuXG4gIGlmIChjb25maWcubW92YWJsZSAmJiBjb25maWcubW92YWJsZS5kZXN0cykgc3RhdGUubW92YWJsZS5kZXN0cyA9IHVuZGVmaW5lZDtcblxuICBtZXJnZShzdGF0ZSwgY29uZmlnKTtcblxuICBpZiAoY29uZmlnLmdlb21ldHJ5KSBzdGF0ZS5kaW1lbnNpb25zID0gY2cuZGltZW5zaW9uc1tjb25maWcuZ2VvbWV0cnldO1xuXG4gIC8vIGlmIGEgZmVuIHdhcyBwcm92aWRlZCwgcmVwbGFjZSB0aGUgcGllY2VzXG4gIGlmIChjb25maWcuZmVuKSB7XG4gICAgc3RhdGUucGllY2VzID0gZmVuUmVhZChjb25maWcuZmVuLCBzdGF0ZS5nZW9tZXRyeSk7XG4gICAgc3RhdGUuZHJhd2FibGUuc2hhcGVzID0gW107XG4gIH1cblxuICAvLyBhcHBseSBjb25maWcgdmFsdWVzIHRoYXQgY291bGQgYmUgdW5kZWZpbmVkIHlldCBtZWFuaW5nZnVsXG4gIGlmIChjb25maWcuaGFzT3duUHJvcGVydHkoJ2NoZWNrJykpIHNldENoZWNrKHN0YXRlLCBjb25maWcuY2hlY2sgfHwgZmFsc2UpO1xuICBpZiAoY29uZmlnLmhhc093blByb3BlcnR5KCdsYXN0TW92ZScpICYmICFjb25maWcubGFzdE1vdmUpIHN0YXRlLmxhc3RNb3ZlID0gdW5kZWZpbmVkO1xuICAvLyBpbiBjYXNlIG9mIFpIIGRyb3AgbGFzdCBtb3ZlLCB0aGVyZSdzIGEgc2luZ2xlIHNxdWFyZS5cbiAgLy8gaWYgdGhlIHByZXZpb3VzIGxhc3QgbW92ZSBoYWQgdHdvIHNxdWFyZXMsXG4gIC8vIHRoZSBtZXJnZSBhbGdvcml0aG0gd2lsbCBpbmNvcnJlY3RseSBrZWVwIHRoZSBzZWNvbmQgc3F1YXJlLlxuICBlbHNlIGlmIChjb25maWcubGFzdE1vdmUpIHN0YXRlLmxhc3RNb3ZlID0gY29uZmlnLmxhc3RNb3ZlO1xuXG4gIC8vIGZpeCBtb3ZlL3ByZW1vdmUgZGVzdHNcbiAgaWYgKHN0YXRlLnNlbGVjdGVkKSBzZXRTZWxlY3RlZChzdGF0ZSwgc3RhdGUuc2VsZWN0ZWQpO1xuXG4gIC8vIG5vIG5lZWQgZm9yIHN1Y2ggc2hvcnQgYW5pbWF0aW9uc1xuICBpZiAoIXN0YXRlLmFuaW1hdGlvbi5kdXJhdGlvbiB8fCBzdGF0ZS5hbmltYXRpb24uZHVyYXRpb24gPCAxMDApIHN0YXRlLmFuaW1hdGlvbi5lbmFibGVkID0gZmFsc2U7XG5cbiAgaWYgKCFzdGF0ZS5tb3ZhYmxlLnJvb2tDYXN0bGUgJiYgc3RhdGUubW92YWJsZS5kZXN0cykge1xuICAgIGNvbnN0IHJhbmsgPSBzdGF0ZS5tb3ZhYmxlLmNvbG9yID09PSAnd2hpdGUnID8gMSA6IDgsXG4gICAga2luZ1N0YXJ0UG9zID0gJ2UnICsgcmFuayxcbiAgICBkZXN0cyA9IHN0YXRlLm1vdmFibGUuZGVzdHNba2luZ1N0YXJ0UG9zXSxcbiAgICBraW5nID0gc3RhdGUucGllY2VzW2tpbmdTdGFydFBvc107XG4gICAgaWYgKCFkZXN0cyB8fCAha2luZyB8fCBraW5nLnJvbGUgIT09ICdraW5nJykgcmV0dXJuO1xuICAgIHN0YXRlLm1vdmFibGUuZGVzdHNba2luZ1N0YXJ0UG9zXSA9IGRlc3RzLmZpbHRlcihkID0+XG4gICAgICAhKChkID09PSAnYScgKyByYW5rKSAmJiBkZXN0cy5pbmRleE9mKCdjJyArIHJhbmsgYXMgY2cuS2V5KSAhPT0gLTEpICYmXG4gICAgICAgICEoKGQgPT09ICdoJyArIHJhbmspICYmIGRlc3RzLmluZGV4T2YoJ2cnICsgcmFuayBhcyBjZy5LZXkpICE9PSAtMSlcbiAgICApO1xuICB9XG59O1xuXG5mdW5jdGlvbiBtZXJnZShiYXNlOiBhbnksIGV4dGVuZDogYW55KSB7XG4gIGZvciAobGV0IGtleSBpbiBleHRlbmQpIHtcbiAgICBpZiAoaXNPYmplY3QoYmFzZVtrZXldKSAmJiBpc09iamVjdChleHRlbmRba2V5XSkpIG1lcmdlKGJhc2Vba2V5XSwgZXh0ZW5kW2tleV0pO1xuICAgIGVsc2UgYmFzZVtrZXldID0gZXh0ZW5kW2tleV07XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNPYmplY3QobzogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCc7XG59XG4iLCJpbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vc3RhdGUnXG5pbXBvcnQgKiBhcyBib2FyZCBmcm9tICcuL2JvYXJkJ1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwnXG5pbXBvcnQgeyBjbGVhciBhcyBkcmF3Q2xlYXIgfSBmcm9tICcuL2RyYXcnXG5pbXBvcnQgKiBhcyBjZyBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgYW5pbSB9IGZyb20gJy4vYW5pbSdcblxuZXhwb3J0IGludGVyZmFjZSBEcmFnQ3VycmVudCB7XG4gIG9yaWc6IGNnLktleTsgLy8gb3JpZyBrZXkgb2YgZHJhZ2dpbmcgcGllY2VcbiAgb3JpZ1BvczogY2cuUG9zO1xuICBwaWVjZTogY2cuUGllY2U7XG4gIHJlbDogY2cuTnVtYmVyUGFpcjsgLy8geDsgeSBvZiB0aGUgcGllY2UgYXQgb3JpZ2luYWwgcG9zaXRpb25cbiAgZXBvczogY2cuTnVtYmVyUGFpcjsgLy8gaW5pdGlhbCBldmVudCBwb3NpdGlvblxuICBwb3M6IGNnLk51bWJlclBhaXI7IC8vIHJlbGF0aXZlIGN1cnJlbnQgcG9zaXRpb25cbiAgZGVjOiBjZy5OdW1iZXJQYWlyOyAvLyBwaWVjZSBjZW50ZXIgZGVjYXlcbiAgc3RhcnRlZDogYm9vbGVhbjsgLy8gd2hldGhlciB0aGUgZHJhZyBoYXMgc3RhcnRlZDsgYXMgcGVyIHRoZSBkaXN0YW5jZSBzZXR0aW5nXG4gIGVsZW1lbnQ6IGNnLlBpZWNlTm9kZSB8ICgoKSA9PiBjZy5QaWVjZU5vZGUgfCB1bmRlZmluZWQpO1xuICBuZXdQaWVjZT86IGJvb2xlYW47IC8vIGl0IGl0IGEgbmV3IHBpZWNlIGZyb20gb3V0c2lkZSB0aGUgYm9hcmRcbiAgZm9yY2U/OiBib29sZWFuOyAvLyBjYW4gdGhlIG5ldyBwaWVjZSByZXBsYWNlIGFuIGV4aXN0aW5nIG9uZSAoZWRpdG9yKVxuICBwcmV2aW91c2x5U2VsZWN0ZWQ/OiBjZy5LZXk7XG4gIG9yaWdpblRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnQoczogU3RhdGUsIGU6IGNnLk1vdWNoRXZlbnQpOiB2b2lkIHtcbiAgaWYgKGUuYnV0dG9uICE9PSB1bmRlZmluZWQgJiYgZS5idXR0b24gIT09IDApIHJldHVybjsgLy8gb25seSB0b3VjaCBvciBsZWZ0IGNsaWNrXG4gIGlmIChlLnRvdWNoZXMgJiYgZS50b3VjaGVzLmxlbmd0aCA+IDEpIHJldHVybjsgLy8gc3VwcG9ydCBvbmUgZmluZ2VyIHRvdWNoIG9ubHlcbiAgY29uc3QgYm91bmRzID0gcy5kb20uYm91bmRzKCksXG4gIHBvc2l0aW9uID0gdXRpbC5ldmVudFBvc2l0aW9uKGUpIGFzIGNnLk51bWJlclBhaXIsXG4gIG9yaWcgPSBib2FyZC5nZXRLZXlBdERvbVBvcyhwb3NpdGlvbiwgYm9hcmQud2hpdGVQb3YocyksIGJvdW5kcywgcy5nZW9tZXRyeSk7XG4gIGlmICghb3JpZykgcmV0dXJuO1xuICBjb25zdCBwaWVjZSA9IHMucGllY2VzW29yaWddO1xuICBjb25zdCBwcmV2aW91c2x5U2VsZWN0ZWQgPSBzLnNlbGVjdGVkO1xuICBpZiAoIXByZXZpb3VzbHlTZWxlY3RlZCAmJiBzLmRyYXdhYmxlLmVuYWJsZWQgJiYgKFxuICAgIHMuZHJhd2FibGUuZXJhc2VPbkNsaWNrIHx8ICghcGllY2UgfHwgcGllY2UuY29sb3IgIT09IHMudHVybkNvbG9yKVxuICApKSBkcmF3Q2xlYXIocyk7XG4gIC8vIFByZXZlbnQgdG91Y2ggc2Nyb2xsIGFuZCBjcmVhdGUgbm8gY29ycmVzcG9uZGluZyBtb3VzZSBldmVudCwgaWYgdGhlcmVcbiAgLy8gaXMgYW4gaW50ZW50IHRvIGludGVyYWN0IHdpdGggdGhlIGJvYXJkLiBJZiBubyBjb2xvciBpcyBtb3ZhYmxlXG4gIC8vIChhbmQgdGhlIGJvYXJkIGlzIG5vdCBmb3Igdmlld2luZyBvbmx5KSwgdG91Y2hlcyBhcmUgbGlrZWx5IGludGVuZGVkIHRvXG4gIC8vIHNlbGVjdCBzcXVhcmVzLlxuICBpZiAoZS5jYW5jZWxhYmxlICE9PSBmYWxzZSAmJlxuICAgICAgKCFlLnRvdWNoZXMgfHwgIXMubW92YWJsZS5jb2xvciB8fCBwaWVjZSB8fCBwcmV2aW91c2x5U2VsZWN0ZWQgfHwgcGllY2VDbG9zZVRvKHMsIHBvc2l0aW9uKSkpXG4gICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICBjb25zdCBoYWRQcmVtb3ZlID0gISFzLnByZW1vdmFibGUuY3VycmVudDtcbiAgY29uc3QgaGFkUHJlZHJvcCA9ICEhcy5wcmVkcm9wcGFibGUuY3VycmVudDtcbiAgcy5zdGF0cy5jdHJsS2V5ID0gZS5jdHJsS2V5O1xuICBpZiAocy5zZWxlY3RlZCAmJiBib2FyZC5jYW5Nb3ZlKHMsIHMuc2VsZWN0ZWQsIG9yaWcpKSB7XG4gICAgYW5pbShzdGF0ZSA9PiBib2FyZC5zZWxlY3RTcXVhcmUoc3RhdGUsIG9yaWcpLCBzKTtcbiAgfSBlbHNlIHtcbiAgICBib2FyZC5zZWxlY3RTcXVhcmUocywgb3JpZyk7XG4gIH1cbiAgY29uc3Qgc3RpbGxTZWxlY3RlZCA9IHMuc2VsZWN0ZWQgPT09IG9yaWc7XG4gIGNvbnN0IGVsZW1lbnQgPSBwaWVjZUVsZW1lbnRCeUtleShzLCBvcmlnKTtcbiAgY29uc3QgZmlyc3RSYW5rSXMwID0gcy5kaW1lbnNpb25zLmhlaWdodCA9PT0gMTA7XG4gIGlmIChwaWVjZSAmJiBlbGVtZW50ICYmIHN0aWxsU2VsZWN0ZWQgJiYgYm9hcmQuaXNEcmFnZ2FibGUocywgb3JpZykpIHtcbiAgICBjb25zdCBzcXVhcmVCb3VuZHMgPSBjb21wdXRlU3F1YXJlQm91bmRzKG9yaWcsIGJvYXJkLndoaXRlUG92KHMpLCBib3VuZHMsIHMuZGltZW5zaW9ucyk7XG4gICAgcy5kcmFnZ2FibGUuY3VycmVudCA9IHtcbiAgICAgIG9yaWcsXG4gICAgICBvcmlnUG9zOiB1dGlsLmtleTJwb3Mob3JpZywgZmlyc3RSYW5rSXMwKSxcbiAgICAgIHBpZWNlLFxuICAgICAgcmVsOiBwb3NpdGlvbixcbiAgICAgIGVwb3M6IHBvc2l0aW9uLFxuICAgICAgcG9zOiBbMCwgMF0sXG4gICAgICBkZWM6IHMuZHJhZ2dhYmxlLmNlbnRlclBpZWNlID8gW1xuICAgICAgICBwb3NpdGlvblswXSAtIChzcXVhcmVCb3VuZHMubGVmdCArIHNxdWFyZUJvdW5kcy53aWR0aCAvIDIpLFxuICAgICAgICBwb3NpdGlvblsxXSAtIChzcXVhcmVCb3VuZHMudG9wICsgc3F1YXJlQm91bmRzLmhlaWdodCAvIDIpXG4gICAgICBdIDogWzAsIDBdLFxuICAgICAgc3RhcnRlZDogcy5kcmFnZ2FibGUuYXV0b0Rpc3RhbmNlICYmIHMuc3RhdHMuZHJhZ2dlZCxcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwcmV2aW91c2x5U2VsZWN0ZWQsXG4gICAgICBvcmlnaW5UYXJnZXQ6IGUudGFyZ2V0XG4gICAgfTtcbiAgICBlbGVtZW50LmNnRHJhZ2dpbmcgPSB0cnVlO1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZHJhZ2dpbmcnKTtcbiAgICAvLyBwbGFjZSBnaG9zdFxuICAgIGNvbnN0IGdob3N0ID0gcy5kb20uZWxlbWVudHMuZ2hvc3Q7XG4gICAgaWYgKGdob3N0KSB7XG4gICAgICBnaG9zdC5jbGFzc05hbWUgPSBgZ2hvc3QgJHtwaWVjZS5jb2xvcn0gJHtwaWVjZS5yb2xlfWA7XG4gICAgICB1dGlsLnRyYW5zbGF0ZUFicyhnaG9zdCwgdXRpbC5wb3NUb1RyYW5zbGF0ZUFicyhib3VuZHMsIHMuZGltZW5zaW9ucykodXRpbC5rZXkycG9zKG9yaWcsIGZpcnN0UmFua0lzMCksIGJvYXJkLndoaXRlUG92KHMpKSk7XG4gICAgICB1dGlsLnNldFZpc2libGUoZ2hvc3QsIHRydWUpO1xuICAgIH1cbiAgICBwcm9jZXNzRHJhZyhzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaGFkUHJlbW92ZSkgYm9hcmQudW5zZXRQcmVtb3ZlKHMpO1xuICAgIGlmIChoYWRQcmVkcm9wKSBib2FyZC51bnNldFByZWRyb3Aocyk7XG4gIH1cbiAgcy5kb20ucmVkcmF3KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaWVjZUNsb3NlVG8oczogU3RhdGUsIHBvczogY2cuUG9zKTogYm9vbGVhbiB7XG4gIGNvbnN0IGFzV2hpdGUgPSBib2FyZC53aGl0ZVBvdihzKSxcbiAgYm91bmRzID0gcy5kb20uYm91bmRzKCksXG4gIHJhZGl1c1NxID0gTWF0aC5wb3coYm91bmRzLndpZHRoIC8gOCwgMik7XG4gIGZvciAobGV0IGtleSBpbiBzLnBpZWNlcykge1xuICAgIGNvbnN0IHNxdWFyZUJvdW5kcyA9IGNvbXB1dGVTcXVhcmVCb3VuZHMoa2V5IGFzIGNnLktleSwgYXNXaGl0ZSwgYm91bmRzLCBzLmRpbWVuc2lvbnMpLFxuICAgIGNlbnRlcjogY2cuUG9zID0gW1xuICAgICAgc3F1YXJlQm91bmRzLmxlZnQgKyBzcXVhcmVCb3VuZHMud2lkdGggLyAyLFxuICAgICAgc3F1YXJlQm91bmRzLnRvcCArIHNxdWFyZUJvdW5kcy5oZWlnaHQgLyAyXG4gICAgXTtcbiAgICBpZiAodXRpbC5kaXN0YW5jZVNxKGNlbnRlciwgcG9zKSA8PSByYWRpdXNTcSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJhZ05ld1BpZWNlKHM6IFN0YXRlLCBwaWVjZTogY2cuUGllY2UsIGU6IGNnLk1vdWNoRXZlbnQsIGZvcmNlPzogYm9vbGVhbik6IHZvaWQge1xuXG4gIGNvbnN0IGtleTogY2cuS2V5ID0gJ3owJztcblxuICBzLnBpZWNlc1trZXldID0gcGllY2U7XG5cbiAgcy5kb20ucmVkcmF3KCk7XG5cbiAgY29uc3QgcG9zaXRpb24gPSB1dGlsLmV2ZW50UG9zaXRpb24oZSkgYXMgY2cuTnVtYmVyUGFpcixcbiAgYXNXaGl0ZSA9IGJvYXJkLndoaXRlUG92KHMpLFxuICBib3VuZHMgPSBzLmRvbS5ib3VuZHMoKSxcbiAgc3F1YXJlQm91bmRzID0gY29tcHV0ZVNxdWFyZUJvdW5kcyhrZXksIGFzV2hpdGUsIGJvdW5kcywgcy5kaW1lbnNpb25zKTtcblxuICBjb25zdCByZWw6IGNnLk51bWJlclBhaXIgPSBbXG4gICAgKGFzV2hpdGUgPyAwIDogcy5kaW1lbnNpb25zLndpZHRoIC0gMSkgKiBzcXVhcmVCb3VuZHMud2lkdGggKyBib3VuZHMubGVmdCxcbiAgICAoYXNXaGl0ZSA/IHMuZGltZW5zaW9ucy5oZWlnaHQgOiAtMSkgKiBzcXVhcmVCb3VuZHMuaGVpZ2h0ICsgYm91bmRzLnRvcFxuICBdO1xuXG4gIGNvbnN0IGZpcnN0UmFua0lzMCA9IHMuZ2VvbWV0cnkgPT09IGNnLkdlb21ldHJ5LmRpbTl4MTA7XG4gIHMuZHJhZ2dhYmxlLmN1cnJlbnQgPSB7XG4gICAgb3JpZzoga2V5LFxuICAgIG9yaWdQb3M6IHV0aWwua2V5MnBvcygnYTAnLCBmaXJzdFJhbmtJczApLFxuICAgIHBpZWNlLFxuICAgIHJlbCxcbiAgICBlcG9zOiBwb3NpdGlvbixcbiAgICBwb3M6IFtwb3NpdGlvblswXSAtIHJlbFswXSwgcG9zaXRpb25bMV0gLSByZWxbMV1dLFxuICAgIGRlYzogWy1zcXVhcmVCb3VuZHMud2lkdGggLyAyLCAtc3F1YXJlQm91bmRzLmhlaWdodCAvIDJdLFxuICAgIHN0YXJ0ZWQ6IHRydWUsXG4gICAgZWxlbWVudDogKCkgPT4gcGllY2VFbGVtZW50QnlLZXkocywga2V5KSxcbiAgICBvcmlnaW5UYXJnZXQ6IGUudGFyZ2V0LFxuICAgIG5ld1BpZWNlOiB0cnVlLFxuICAgIGZvcmNlOiAhIWZvcmNlXG4gIH07XG4gIHByb2Nlc3NEcmFnKHMpO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzRHJhZyhzOiBTdGF0ZSk6IHZvaWQge1xuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgIGNvbnN0IGN1ciA9IHMuZHJhZ2dhYmxlLmN1cnJlbnQ7XG4gICAgaWYgKCFjdXIpIHJldHVybjtcbiAgICAvLyBjYW5jZWwgYW5pbWF0aW9ucyB3aGlsZSBkcmFnZ2luZ1xuICAgIGlmIChzLmFuaW1hdGlvbi5jdXJyZW50ICYmIHMuYW5pbWF0aW9uLmN1cnJlbnQucGxhbi5hbmltc1tjdXIub3JpZ10pIHMuYW5pbWF0aW9uLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgLy8gaWYgbW92aW5nIHBpZWNlIGlzIGdvbmUsIGNhbmNlbFxuICAgIGNvbnN0IG9yaWdQaWVjZSA9IHMucGllY2VzW2N1ci5vcmlnXTtcbiAgICBpZiAoIW9yaWdQaWVjZSB8fCAhdXRpbC5zYW1lUGllY2Uob3JpZ1BpZWNlLCBjdXIucGllY2UpKSBjYW5jZWwocyk7XG4gICAgZWxzZSB7XG4gICAgICBpZiAoIWN1ci5zdGFydGVkICYmIHV0aWwuZGlzdGFuY2VTcShjdXIuZXBvcywgY3VyLnJlbCkgPj0gTWF0aC5wb3cocy5kcmFnZ2FibGUuZGlzdGFuY2UsIDIpKSBjdXIuc3RhcnRlZCA9IHRydWU7XG4gICAgICBpZiAoY3VyLnN0YXJ0ZWQpIHtcblxuICAgICAgICAvLyBzdXBwb3J0IGxhenkgZWxlbWVudHNcbiAgICAgICAgaWYgKHR5cGVvZiBjdXIuZWxlbWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IGZvdW5kID0gY3VyLmVsZW1lbnQoKTtcbiAgICAgICAgICBpZiAoIWZvdW5kKSByZXR1cm47XG4gICAgICAgICAgZm91bmQuY2dEcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgZm91bmQuY2xhc3NMaXN0LmFkZCgnZHJhZ2dpbmcnKTtcbiAgICAgICAgICBjdXIuZWxlbWVudCA9IGZvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VyLnBvcyA9IFtcbiAgICAgICAgICBjdXIuZXBvc1swXSAtIGN1ci5yZWxbMF0sXG4gICAgICAgICAgY3VyLmVwb3NbMV0gLSBjdXIucmVsWzFdXG4gICAgICAgIF07XG5cbiAgICAgICAgLy8gbW92ZSBwaWVjZVxuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHV0aWwucG9zVG9UcmFuc2xhdGVBYnMocy5kb20uYm91bmRzKCksIHMuZGltZW5zaW9ucykoY3VyLm9yaWdQb3MsIGJvYXJkLndoaXRlUG92KHMpKTtcbiAgICAgICAgdHJhbnNsYXRpb25bMF0gKz0gY3VyLnBvc1swXSArIGN1ci5kZWNbMF07XG4gICAgICAgIHRyYW5zbGF0aW9uWzFdICs9IGN1ci5wb3NbMV0gKyBjdXIuZGVjWzFdO1xuICAgICAgICB1dGlsLnRyYW5zbGF0ZUFicyhjdXIuZWxlbWVudCwgdHJhbnNsYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzRHJhZyhzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlKHM6IFN0YXRlLCBlOiBjZy5Nb3VjaEV2ZW50KTogdm9pZCB7XG4gIC8vIHN1cHBvcnQgb25lIGZpbmdlciB0b3VjaCBvbmx5XG4gIGlmIChzLmRyYWdnYWJsZS5jdXJyZW50ICYmICghZS50b3VjaGVzIHx8IGUudG91Y2hlcy5sZW5ndGggPCAyKSkge1xuICAgIHMuZHJhZ2dhYmxlLmN1cnJlbnQuZXBvcyA9IHV0aWwuZXZlbnRQb3NpdGlvbihlKSBhcyBjZy5OdW1iZXJQYWlyO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmQoczogU3RhdGUsIGU6IGNnLk1vdWNoRXZlbnQpOiB2b2lkIHtcbiAgY29uc3QgY3VyID0gcy5kcmFnZ2FibGUuY3VycmVudDtcbiAgaWYgKCFjdXIpIHJldHVybjtcbiAgLy8gY3JlYXRlIG5vIGNvcnJlc3BvbmRpbmcgbW91c2UgZXZlbnRcbiAgaWYgKGUudHlwZSA9PT0gJ3RvdWNoZW5kJyAmJiBlLmNhbmNlbGFibGUgIT09IGZhbHNlKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gIC8vIGNvbXBhcmluZyB3aXRoIHRoZSBvcmlnaW4gdGFyZ2V0IGlzIGFuIGVhc3kgd2F5IHRvIHRlc3QgdGhhdCB0aGUgZW5kIGV2ZW50XG4gIC8vIGhhcyB0aGUgc2FtZSB0b3VjaCBvcmlnaW5cbiAgaWYgKGUudHlwZSA9PT0gJ3RvdWNoZW5kJyAmJiBjdXIgJiYgY3VyLm9yaWdpblRhcmdldCAhPT0gZS50YXJnZXQgJiYgIWN1ci5uZXdQaWVjZSkge1xuICAgIHMuZHJhZ2dhYmxlLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJvYXJkLnVuc2V0UHJlbW92ZShzKTtcbiAgYm9hcmQudW5zZXRQcmVkcm9wKHMpO1xuICAvLyB0b3VjaGVuZCBoYXMgbm8gcG9zaXRpb247IHNvIHVzZSB0aGUgbGFzdCB0b3VjaG1vdmUgcG9zaXRpb24gaW5zdGVhZFxuICBjb25zdCBldmVudFBvczogY2cuTnVtYmVyUGFpciA9IHV0aWwuZXZlbnRQb3NpdGlvbihlKSB8fCBjdXIuZXBvcztcbiAgY29uc3QgZGVzdCA9IGJvYXJkLmdldEtleUF0RG9tUG9zKGV2ZW50UG9zLCBib2FyZC53aGl0ZVBvdihzKSwgcy5kb20uYm91bmRzKCksIHMuZ2VvbWV0cnkpO1xuICBpZiAoZGVzdCAmJiBjdXIuc3RhcnRlZCAmJiBjdXIub3JpZyAhPT0gZGVzdCkge1xuICAgIGlmIChjdXIubmV3UGllY2UpIGJvYXJkLmRyb3BOZXdQaWVjZShzLCBjdXIub3JpZywgZGVzdCwgY3VyLmZvcmNlKTtcbiAgICBlbHNlIHtcbiAgICAgIHMuc3RhdHMuY3RybEtleSA9IGUuY3RybEtleTtcbiAgICAgIGlmIChib2FyZC51c2VyTW92ZShzLCBjdXIub3JpZywgZGVzdCkpIHMuc3RhdHMuZHJhZ2dlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGN1ci5uZXdQaWVjZSkge1xuICAgIGRlbGV0ZSBzLnBpZWNlc1tjdXIub3JpZ107XG4gIH0gZWxzZSBpZiAocy5kcmFnZ2FibGUuZGVsZXRlT25Ecm9wT2ZmICYmICFkZXN0KSB7XG4gICAgZGVsZXRlIHMucGllY2VzW2N1ci5vcmlnXTtcbiAgICBib2FyZC5jYWxsVXNlckZ1bmN0aW9uKHMuZXZlbnRzLmNoYW5nZSk7XG4gIH1cbiAgaWYgKGN1ciAmJiBjdXIub3JpZyA9PT0gY3VyLnByZXZpb3VzbHlTZWxlY3RlZCAmJiAoY3VyLm9yaWcgPT09IGRlc3QgfHwgIWRlc3QpKVxuICAgIGJvYXJkLnVuc2VsZWN0KHMpO1xuICBlbHNlIGlmICghcy5zZWxlY3RhYmxlLmVuYWJsZWQpIGJvYXJkLnVuc2VsZWN0KHMpO1xuXG4gIHJlbW92ZURyYWdFbGVtZW50cyhzKTtcblxuICBzLmRyYWdnYWJsZS5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICBzLmRvbS5yZWRyYXcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbmNlbChzOiBTdGF0ZSk6IHZvaWQge1xuICBjb25zdCBjdXIgPSBzLmRyYWdnYWJsZS5jdXJyZW50O1xuICBpZiAoY3VyKSB7XG4gICAgaWYgKGN1ci5uZXdQaWVjZSkgZGVsZXRlIHMucGllY2VzW2N1ci5vcmlnXTtcbiAgICBzLmRyYWdnYWJsZS5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgIGJvYXJkLnVuc2VsZWN0KHMpO1xuICAgIHJlbW92ZURyYWdFbGVtZW50cyhzKTtcbiAgICBzLmRvbS5yZWRyYXcoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVEcmFnRWxlbWVudHMoczogU3RhdGUpIHtcbiAgY29uc3QgZSA9IHMuZG9tLmVsZW1lbnRzO1xuICBpZiAoZS5naG9zdCkgdXRpbC5zZXRWaXNpYmxlKGUuZ2hvc3QsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVNxdWFyZUJvdW5kcyhrZXk6IGNnLktleSwgYXNXaGl0ZTogYm9vbGVhbiwgYm91bmRzOiBDbGllbnRSZWN0LCBiZDogY2cuQm9hcmREaW1lbnNpb25zKSB7XG4gIGNvbnN0IGZpcnN0UmFua0lzMCA9IGJkLmhlaWdodCA9PT0gMTA7XG4gIGNvbnN0IHBvcyA9IHV0aWwua2V5MnBvcyhrZXksIGZpcnN0UmFua0lzMCk7XG4gIGlmICghYXNXaGl0ZSkge1xuICAgIHBvc1swXSA9IGJkLndpZHRoICsgMSAtIHBvc1swXTtcbiAgICBwb3NbMV0gPSBiZC5oZWlnaHQgKyAxIC0gcG9zWzFdO1xuICB9XG4gIHJldHVybiB7XG4gICAgbGVmdDogYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggKiAocG9zWzBdIC0gMSkgLyBiZC53aWR0aCxcbiAgICB0b3A6IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0ICogKGJkLmhlaWdodCAtIHBvc1sxXSkgLyBiZC5oZWlnaHQsXG4gICAgd2lkdGg6IGJvdW5kcy53aWR0aCAvIGJkLndpZHRoLFxuICAgIGhlaWdodDogYm91bmRzLmhlaWdodCAvIGJkLmhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBwaWVjZUVsZW1lbnRCeUtleShzOiBTdGF0ZSwga2V5OiBjZy5LZXkpOiBjZy5QaWVjZU5vZGUgfCB1bmRlZmluZWQge1xuICBsZXQgZWwgPSBzLmRvbS5lbGVtZW50cy5ib2FyZC5maXJzdENoaWxkIGFzIGNnLlBpZWNlTm9kZTtcbiAgd2hpbGUgKGVsKSB7XG4gICAgaWYgKGVsLmNnS2V5ID09PSBrZXkgJiYgZWwudGFnTmFtZSA9PT0gJ1BJRUNFJykgcmV0dXJuIGVsO1xuICAgIGVsID0gZWwubmV4dFNpYmxpbmcgYXMgY2cuUGllY2VOb2RlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iLCJpbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vc3RhdGUnXG5pbXBvcnQgeyB1bnNlbGVjdCwgY2FuY2VsTW92ZSwgZ2V0S2V5QXREb21Qb3MsIHdoaXRlUG92IH0gZnJvbSAnLi9ib2FyZCdcbmltcG9ydCB7IGV2ZW50UG9zaXRpb24sIGlzUmlnaHRCdXR0b24gfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgKiBhcyBjZyBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIERyYXdTaGFwZSB7XG4gIG9yaWc6IGNnLktleTtcbiAgZGVzdD86IGNnLktleTtcbiAgYnJ1c2g6IHN0cmluZztcbiAgbW9kaWZpZXJzPzogRHJhd01vZGlmaWVycztcbiAgcGllY2U/OiBEcmF3U2hhcGVQaWVjZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcmF3U2hhcGVQaWVjZSB7XG4gIHJvbGU6IGNnLlJvbGU7XG4gIGNvbG9yOiBjZy5Db2xvcjtcbiAgc2NhbGU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJhd0JydXNoIHtcbiAga2V5OiBzdHJpbmc7XG4gIGNvbG9yOiBzdHJpbmc7XG4gIG9wYWNpdHk6IG51bWJlcjtcbiAgbGluZVdpZHRoOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcmF3QnJ1c2hlcyB7XG4gIFtuYW1lOiBzdHJpbmddOiBEcmF3QnJ1c2g7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJhd01vZGlmaWVycyB7XG4gIGxpbmVXaWR0aD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcmF3YWJsZSB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47IC8vIGNhbiBkcmF3XG4gIHZpc2libGU6IGJvb2xlYW47IC8vIGNhbiB2aWV3XG4gIGVyYXNlT25DbGljazogYm9vbGVhbjtcbiAgb25DaGFuZ2U/OiAoc2hhcGVzOiBEcmF3U2hhcGVbXSkgPT4gdm9pZDtcbiAgc2hhcGVzOiBEcmF3U2hhcGVbXTsgLy8gdXNlciBzaGFwZXNcbiAgYXV0b1NoYXBlczogRHJhd1NoYXBlW107IC8vIGNvbXB1dGVyIHNoYXBlc1xuICBjdXJyZW50PzogRHJhd0N1cnJlbnQ7XG4gIGJydXNoZXM6IERyYXdCcnVzaGVzO1xuICAvLyBkcmF3YWJsZSBTVkcgcGllY2VzOyB1c2VkIGZvciBjcmF6eWhvdXNlIGRyb3BcbiAgcGllY2VzOiB7XG4gICAgYmFzZVVybDogc3RyaW5nXG4gIH0sXG4gIHByZXZTdmdIYXNoOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcmF3Q3VycmVudCB7XG4gIG9yaWc6IGNnLktleTsgLy8gb3JpZyBrZXkgb2YgZHJhd2luZ1xuICBkZXN0PzogY2cuS2V5OyAvLyBzaGFwZSBkZXN0LCBvciB1bmRlZmluZWQgZm9yIGNpcmNsZVxuICBtb3VzZVNxPzogY2cuS2V5OyAvLyBzcXVhcmUgYmVpbmcgbW91c2VkIG92ZXJcbiAgcG9zOiBjZy5OdW1iZXJQYWlyOyAvLyByZWxhdGl2ZSBjdXJyZW50IHBvc2l0aW9uXG4gIGJydXNoOiBzdHJpbmc7IC8vIGJydXNoIG5hbWUgZm9yIHNoYXBlXG59XG5cbmNvbnN0IGJydXNoZXMgPSBbJ2dyZWVuJywgJ3JlZCcsICdibHVlJywgJ3llbGxvdyddO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnQoc3RhdGU6IFN0YXRlLCBlOiBjZy5Nb3VjaEV2ZW50KTogdm9pZCB7XG4gIGlmIChlLnRvdWNoZXMgJiYgZS50b3VjaGVzLmxlbmd0aCA+IDEpIHJldHVybjsgLy8gc3VwcG9ydCBvbmUgZmluZ2VyIHRvdWNoIG9ubHlcbiAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICBlLmN0cmxLZXkgPyB1bnNlbGVjdChzdGF0ZSkgOiBjYW5jZWxNb3ZlKHN0YXRlKTtcbiAgY29uc3QgcG9zID0gZXZlbnRQb3NpdGlvbihlKSBhcyBjZy5OdW1iZXJQYWlyLFxuICBvcmlnID0gZ2V0S2V5QXREb21Qb3MocG9zLCB3aGl0ZVBvdihzdGF0ZSksIHN0YXRlLmRvbS5ib3VuZHMoKSwgc3RhdGUuZ2VvbWV0cnkpO1xuICBpZiAoIW9yaWcpIHJldHVybjtcbiAgc3RhdGUuZHJhd2FibGUuY3VycmVudCA9IHtcbiAgICBvcmlnLFxuICAgIHBvcyxcbiAgICBicnVzaDogZXZlbnRCcnVzaChlKVxuICB9O1xuICBwcm9jZXNzRHJhdyhzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRHJhdyhzdGF0ZTogU3RhdGUpOiB2b2lkIHtcbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICBjb25zdCBjdXIgPSBzdGF0ZS5kcmF3YWJsZS5jdXJyZW50O1xuICAgIGlmIChjdXIpIHtcbiAgICAgIGNvbnN0IG1vdXNlU3EgPSBnZXRLZXlBdERvbVBvcyhjdXIucG9zLCB3aGl0ZVBvdihzdGF0ZSksIHN0YXRlLmRvbS5ib3VuZHMoKSwgc3RhdGUuZ2VvbWV0cnkpO1xuICAgICAgaWYgKG1vdXNlU3EgIT09IGN1ci5tb3VzZVNxKSB7XG4gICAgICAgIGN1ci5tb3VzZVNxID0gbW91c2VTcTtcbiAgICAgICAgY3VyLmRlc3QgPSBtb3VzZVNxICE9PSBjdXIub3JpZyA/IG1vdXNlU3EgOiB1bmRlZmluZWQ7XG4gICAgICAgIHN0YXRlLmRvbS5yZWRyYXdOb3coKTtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3NEcmF3KHN0YXRlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW92ZShzdGF0ZTogU3RhdGUsIGU6IGNnLk1vdWNoRXZlbnQpOiB2b2lkIHtcbiAgaWYgKHN0YXRlLmRyYXdhYmxlLmN1cnJlbnQpIHN0YXRlLmRyYXdhYmxlLmN1cnJlbnQucG9zID0gZXZlbnRQb3NpdGlvbihlKSBhcyBjZy5OdW1iZXJQYWlyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kKHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICBjb25zdCBjdXIgPSBzdGF0ZS5kcmF3YWJsZS5jdXJyZW50O1xuICBpZiAoY3VyKSB7XG4gICAgaWYgKGN1ci5tb3VzZVNxKSBhZGRTaGFwZShzdGF0ZS5kcmF3YWJsZSwgY3VyKTtcbiAgICBjYW5jZWwoc3RhdGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWwoc3RhdGU6IFN0YXRlKTogdm9pZCB7XG4gIGlmIChzdGF0ZS5kcmF3YWJsZS5jdXJyZW50KSB7XG4gICAgc3RhdGUuZHJhd2FibGUuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICBzdGF0ZS5kb20ucmVkcmF3KCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyKHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICBpZiAoc3RhdGUuZHJhd2FibGUuc2hhcGVzLmxlbmd0aCkge1xuICAgIHN0YXRlLmRyYXdhYmxlLnNoYXBlcyA9IFtdO1xuICAgIHN0YXRlLmRvbS5yZWRyYXcoKTtcbiAgICBvbkNoYW5nZShzdGF0ZS5kcmF3YWJsZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRCcnVzaChlOiBjZy5Nb3VjaEV2ZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGJydXNoZXNbKGUuc2hpZnRLZXkgJiYgaXNSaWdodEJ1dHRvbihlKSA/IDEgOiAwKSArIChlLmFsdEtleSA/IDIgOiAwKV07XG59XG5cbmZ1bmN0aW9uIGFkZFNoYXBlKGRyYXdhYmxlOiBEcmF3YWJsZSwgY3VyOiBEcmF3Q3VycmVudCk6IHZvaWQge1xuICBjb25zdCBzYW1lU2hhcGUgPSAoczogRHJhd1NoYXBlKSA9PiBzLm9yaWcgPT09IGN1ci5vcmlnICYmIHMuZGVzdCA9PT0gY3VyLmRlc3Q7XG4gIGNvbnN0IHNpbWlsYXIgPSBkcmF3YWJsZS5zaGFwZXMuZmlsdGVyKHNhbWVTaGFwZSlbMF07XG4gIGlmIChzaW1pbGFyKSBkcmF3YWJsZS5zaGFwZXMgPSBkcmF3YWJsZS5zaGFwZXMuZmlsdGVyKHMgPT4gIXNhbWVTaGFwZShzKSk7XG4gIGlmICghc2ltaWxhciB8fCBzaW1pbGFyLmJydXNoICE9PSBjdXIuYnJ1c2gpIGRyYXdhYmxlLnNoYXBlcy5wdXNoKGN1cik7XG4gIG9uQ2hhbmdlKGRyYXdhYmxlKTtcbn1cblxuZnVuY3Rpb24gb25DaGFuZ2UoZHJhd2FibGU6IERyYXdhYmxlKTogdm9pZCB7XG4gIGlmIChkcmF3YWJsZS5vbkNoYW5nZSkgZHJhd2FibGUub25DaGFuZ2UoZHJhd2FibGUuc2hhcGVzKTtcbn1cbiIsImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCAqIGFzIGNnIGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgKiBhcyBib2FyZCBmcm9tICcuL2JvYXJkJ1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwnXG5pbXBvcnQgeyBjYW5jZWwgYXMgY2FuY2VsRHJhZyB9IGZyb20gJy4vZHJhZydcblxuZXhwb3J0IGZ1bmN0aW9uIHNldERyb3BNb2RlKHM6IFN0YXRlLCBwaWVjZT86IGNnLlBpZWNlKTogdm9pZCB7XG4gIHMuZHJvcG1vZGUgPSB7XG4gICAgYWN0aXZlOiB0cnVlLFxuICAgIHBpZWNlXG4gIH07XG4gIGNhbmNlbERyYWcocyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWxEcm9wTW9kZShzOiBTdGF0ZSk6IHZvaWQge1xuICBzLmRyb3Btb2RlID0ge1xuICAgIGFjdGl2ZTogZmFsc2VcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRyb3AoczogU3RhdGUsIGU6IGNnLk1vdWNoRXZlbnQpOiB2b2lkIHtcbiAgaWYgKCFzLmRyb3Btb2RlLmFjdGl2ZSkgcmV0dXJuO1xuXG4gIGJvYXJkLnVuc2V0UHJlbW92ZShzKTtcbiAgYm9hcmQudW5zZXRQcmVkcm9wKHMpO1xuXG4gIGNvbnN0IHBpZWNlID0gcy5kcm9wbW9kZS5waWVjZTtcblxuICBpZiAocGllY2UpIHtcbiAgICBzLnBpZWNlcy56MCA9IHBpZWNlO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdXRpbC5ldmVudFBvc2l0aW9uKGUpO1xuICAgIGNvbnN0IGRlc3QgPSBwb3NpdGlvbiAmJiBib2FyZC5nZXRLZXlBdERvbVBvcyhcbiAgICAgIHBvc2l0aW9uLCBib2FyZC53aGl0ZVBvdihzKSwgcy5kb20uYm91bmRzKCksIHMuZ2VvbWV0cnkpO1xuICAgIGlmIChkZXN0KSBib2FyZC5kcm9wTmV3UGllY2UocywgJ3owJywgZGVzdCk7XG4gIH1cbiAgcy5kb20ucmVkcmF3KCk7XG59XG4iLCJpbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vc3RhdGUnXG5pbXBvcnQgKiBhcyBkcmFnIGZyb20gJy4vZHJhZydcbmltcG9ydCAqIGFzIGRyYXcgZnJvbSAnLi9kcmF3J1xuaW1wb3J0IHsgZHJvcCB9IGZyb20gJy4vZHJvcCdcbmltcG9ydCB7IGlzUmlnaHRCdXR0b24gfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgKiBhcyBjZyBmcm9tICcuL3R5cGVzJ1xuXG50eXBlIE1vdWNoQmluZCA9IChlOiBjZy5Nb3VjaEV2ZW50KSA9PiB2b2lkO1xudHlwZSBTdGF0ZU1vdWNoQmluZCA9IChkOiBTdGF0ZSwgZTogY2cuTW91Y2hFdmVudCkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRCb2FyZChzOiBTdGF0ZSk6IHZvaWQge1xuXG4gIGlmIChzLnZpZXdPbmx5KSByZXR1cm47XG5cbiAgY29uc3QgYm9hcmRFbCA9IHMuZG9tLmVsZW1lbnRzLmJvYXJkLFxuICBvblN0YXJ0ID0gc3RhcnREcmFnT3JEcmF3KHMpO1xuXG4gIC8vIENhbm5vdCBiZSBwYXNzaXZlLCBiZWNhdXNlIHdlIHByZXZlbnQgdG91Y2ggc2Nyb2xsaW5nIGFuZCBkcmFnZ2luZyBvZlxuICAvLyBzZWxlY3RlZCBlbGVtZW50cy5cbiAgYm9hcmRFbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25TdGFydCBhcyBFdmVudExpc3RlbmVyLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICBib2FyZEVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uU3RhcnQgYXMgRXZlbnRMaXN0ZW5lciwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcblxuICBpZiAocy5kaXNhYmxlQ29udGV4dE1lbnUgfHwgcy5kcmF3YWJsZS5lbmFibGVkKSB7XG4gICAgYm9hcmRFbC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKTtcbiAgfVxufVxuXG4vLyByZXR1cm5zIHRoZSB1bmJpbmQgZnVuY3Rpb25cbmV4cG9ydCBmdW5jdGlvbiBiaW5kRG9jdW1lbnQoczogU3RhdGUsIHJlZHJhd0FsbDogY2cuUmVkcmF3KTogY2cuVW5iaW5kIHtcblxuICBjb25zdCB1bmJpbmRzOiBjZy5VbmJpbmRbXSA9IFtdO1xuXG4gIGlmICghcy5kb20ucmVsYXRpdmUgJiYgcy5yZXNpemFibGUpIHtcbiAgICBjb25zdCBvblJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHMuZG9tLmJvdW5kcy5jbGVhcigpO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlZHJhd0FsbCk7XG4gICAgfTtcbiAgICB1bmJpbmRzLnB1c2godW5iaW5kYWJsZShkb2N1bWVudC5ib2R5LCAnY2hlc3Nncm91bmQucmVzaXplJywgb25SZXNpemUpKTtcbiAgfVxuXG4gIGlmICghcy52aWV3T25seSkge1xuXG4gICAgY29uc3Qgb25tb3ZlOiBNb3VjaEJpbmQgPSBkcmFnT3JEcmF3KHMsIGRyYWcubW92ZSwgZHJhdy5tb3ZlKTtcbiAgICBjb25zdCBvbmVuZDogTW91Y2hCaW5kID0gZHJhZ09yRHJhdyhzLCBkcmFnLmVuZCwgZHJhdy5lbmQpO1xuXG4gICAgWyd0b3VjaG1vdmUnLCAnbW91c2Vtb3ZlJ10uZm9yRWFjaChldiA9PiB1bmJpbmRzLnB1c2godW5iaW5kYWJsZShkb2N1bWVudCwgZXYsIG9ubW92ZSkpKTtcbiAgICBbJ3RvdWNoZW5kJywgJ21vdXNldXAnXS5mb3JFYWNoKGV2ID0+IHVuYmluZHMucHVzaCh1bmJpbmRhYmxlKGRvY3VtZW50LCBldiwgb25lbmQpKSk7XG5cbiAgICBjb25zdCBvblNjcm9sbCA9ICgpID0+IHMuZG9tLmJvdW5kcy5jbGVhcigpO1xuICAgIHVuYmluZHMucHVzaCh1bmJpbmRhYmxlKHdpbmRvdywgJ3Njcm9sbCcsIG9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSkpO1xuICAgIHVuYmluZHMucHVzaCh1bmJpbmRhYmxlKHdpbmRvdywgJ3Jlc2l6ZScsIG9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSkpO1xuICB9XG5cbiAgcmV0dXJuICgpID0+IHVuYmluZHMuZm9yRWFjaChmID0+IGYoKSk7XG59XG5cbmZ1bmN0aW9uIHVuYmluZGFibGUoZWw6IEV2ZW50VGFyZ2V0LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IE1vdWNoQmluZCwgb3B0aW9ucz86IGFueSk6IGNnLlVuYmluZCB7XG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjayBhcyBFdmVudExpc3RlbmVyLCBvcHRpb25zKTtcbiAgcmV0dXJuICgpID0+IGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjayBhcyBFdmVudExpc3RlbmVyKTtcbn1cblxuZnVuY3Rpb24gc3RhcnREcmFnT3JEcmF3KHM6IFN0YXRlKTogTW91Y2hCaW5kIHtcbiAgcmV0dXJuIGUgPT4ge1xuICAgIGlmIChzLmRyYWdnYWJsZS5jdXJyZW50KSBkcmFnLmNhbmNlbChzKTtcbiAgICBlbHNlIGlmIChzLmRyYXdhYmxlLmN1cnJlbnQpIGRyYXcuY2FuY2VsKHMpO1xuICAgIGVsc2UgaWYgKGUuc2hpZnRLZXkgfHwgaXNSaWdodEJ1dHRvbihlKSkgeyBpZiAocy5kcmF3YWJsZS5lbmFibGVkKSBkcmF3LnN0YXJ0KHMsIGUpOyB9XG4gICAgZWxzZSBpZiAoIXMudmlld09ubHkpIHtcbiAgICAgIGlmIChzLmRyb3Btb2RlLmFjdGl2ZSkgZHJvcChzLCBlKTtcbiAgICAgIGVsc2UgZHJhZy5zdGFydChzLCBlKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRyYWdPckRyYXcoczogU3RhdGUsIHdpdGhEcmFnOiBTdGF0ZU1vdWNoQmluZCwgd2l0aERyYXc6IFN0YXRlTW91Y2hCaW5kKTogTW91Y2hCaW5kIHtcbiAgcmV0dXJuIGUgPT4ge1xuICAgIGlmIChlLnNoaWZ0S2V5IHx8IGlzUmlnaHRCdXR0b24oZSkpIHsgaWYgKHMuZHJhd2FibGUuZW5hYmxlZCkgd2l0aERyYXcocywgZSk7IH1cbiAgICBlbHNlIGlmICghcy52aWV3T25seSkgd2l0aERyYWcocywgZSk7XG4gIH07XG59XG4iLCJpbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vc3RhdGUnXG5pbXBvcnQgeyBLZXkgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBsb3Npb24oc3RhdGU6IFN0YXRlLCBrZXlzOiBLZXlbXSk6IHZvaWQge1xuICBzdGF0ZS5leHBsb2RpbmcgPSB7IHN0YWdlOiAxLCBrZXlzIH07XG4gIHN0YXRlLmRvbS5yZWRyYXcoKTtcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgc2V0U3RhZ2Uoc3RhdGUsIDIpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0U3RhZ2Uoc3RhdGUsIHVuZGVmaW5lZCksIDEyMCk7XG4gIH0sIDEyMCk7XG59XG5cbmZ1bmN0aW9uIHNldFN0YWdlKHN0YXRlOiBTdGF0ZSwgc3RhZ2U6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBpZiAoc3RhdGUuZXhwbG9kaW5nKSB7XG4gICAgaWYgKHN0YWdlKSBzdGF0ZS5leHBsb2Rpbmcuc3RhZ2UgPSBzdGFnZTtcbiAgICBlbHNlIHN0YXRlLmV4cGxvZGluZyA9IHVuZGVmaW5lZDtcbiAgICBzdGF0ZS5kb20ucmVkcmF3KCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IHBvczJrZXksIE5SYW5rcywgaW52TlJhbmtzIH0gZnJvbSAnLi91dGlsJ1xuaW1wb3J0ICogYXMgY2cgZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IGluaXRpYWw6IGNnLkZFTiA9ICdybmJxa2Juci9wcHBwcHBwcC84LzgvOC84L1BQUFBQUFBQL1JOQlFLQk5SJztcblxuY29uc3Qgcm9sZXM4OiB7IFtsZXR0ZXI6IHN0cmluZ106IGNnLlJvbGUgfSA9IHtcbiAgICBwOiAncGF3bicsIHI6ICdyb29rJywgbjogJ2tuaWdodCcsIGI6ICdiaXNob3AnLCBxOiAncXVlZW4nLCBrOiAna2luZycsIG06ICdtZXQnLCBmOiAnZmVyeicsIHM6ICdzaWx2ZXInLCBjOiAnY2FuY2VsbG9yJywgYTogJ2FyY2hiaXNob3AnLCBoOiAnaGF3aycsIGU6ICdlbGVwaGFudCcgfTtcbi8vIHNob2dpXG5jb25zdCByb2xlczk6IHsgW2xldHRlcjogc3RyaW5nXTogY2cuUm9sZSB9ID0ge1xuICAgIHA6ICdwYXduJywgcjogJ3Jvb2snLCBuOiAna25pZ2h0JywgYjogJ2Jpc2hvcCcsIGs6ICdraW5nJywgZzogJ2dvbGQnLCBzOiAnc2lsdmVyJywgbDogJ2xhbmNlJyB9O1xuLy8geGlhbmdxaVxuY29uc3Qgcm9sZXMxMDogeyBbbGV0dGVyOiBzdHJpbmddOiBjZy5Sb2xlIH0gPSB7XG4gICAgcDogJ3Bhd24nLCByOiAncm9vaycsIG46ICdrbmlnaHQnLCBiOiAnYmlzaG9wJywgazogJ2tpbmcnLCBjOiAnY2Fubm9uJywgYTogJ2Fkdmlzb3InIH07XG5cblxuY29uc3QgbGV0dGVyczggPSB7XG4gICAgcGF3bjogJ3AnLCByb29rOiAncicsIGtuaWdodDogJ24nLCBiaXNob3A6ICdiJywgcXVlZW46ICdxJywga2luZzogJ2snLCBtZXQ6ICdtJywgZmVyejogJ2YnLCBzaWx2ZXI6ICdzJywgY2FuY2VsbG9yOiAnYycsIGFyY2hiaXNob3A6ICdhJywgaGF3azogJ2gnLCBlbGVwaGFudDogJ2UnIH07XG4vLyBzaG9naVxuY29uc3QgbGV0dGVyczkgPSB7XG4gICAgcGF3bjogJ3AnLCByb29rOiAncicsIGtuaWdodDogJ24nLCBiaXNob3A6ICdiJywga2luZzogJ2snLCBnb2xkOiAnZycsIHNpbHZlcjogJ3MnLCBsYW5jZTogJ2wnLFxuICAgIHBwYXduOiAnK3AnLCBwa25pZ2h0OiAnK24nLCBwYmlzaG9wOiAnK2InLCBwcm9vazogJytyJywgcHNpbHZlcjogJytzJywgcGxhbmNlOiAnK2wnIH07XG4vLyB4aWFuZ3FpXG5jb25zdCBsZXR0ZXJzMTAgPSB7XG4gICAgcGF3bjogJ3AnLCByb29rOiAncicsIGtuaWdodDogJ24nLCBiaXNob3A6ICdiJywga2luZzogJ2snLCBjYW5ub246ICdjJywgYWR2aXNvcjogJ2EnfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWQoZmVuOiBjZy5GRU4sIGdlb206IGNnLkdlb21ldHJ5KTogY2cuUGllY2VzIHtcbiAgaWYgKGZlbiA9PT0gJ3N0YXJ0JykgZmVuID0gaW5pdGlhbDtcbiAgaWYgKGZlbi5pbmRleE9mKCdbJykgIT09IC0xKSBmZW4gPSBmZW4uc2xpY2UoMCwgZmVuLmluZGV4T2YoJ1snKSk7XG4gIGNvbnN0IHBpZWNlczogY2cuUGllY2VzID0ge307XG4gIGxldCByb3c6IG51bWJlciA9IGZlbi5zcGxpdChcIi9cIikubGVuZ3RoO1xuICBsZXQgY29sOiBudW1iZXIgPSAwO1xuICBsZXQgcHJvbW90ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3Qgcm9sZXMgPSAoZ2VvbSA9PT0gY2cuR2VvbWV0cnkuZGltOXgxMCkgPyByb2xlczEwIDogKGdlb20gPT09IGNnLkdlb21ldHJ5LmRpbTl4OSB8fCBnZW9tID09PSBjZy5HZW9tZXRyeS5kaW01eDUpID8gcm9sZXM5IDogcm9sZXM4O1xuICBjb25zdCBmaXJzdFJhbmtJczAgPSByb3cgPT09IDEwO1xuICBjb25zdCBzaG9naSA9IChyb3cgPT09IDkgfHwgcm93ID09PSA1KTtcbiAgY29uc3QgbWluaSA9IHJvdyA9PT0gNTtcbiAgZm9yIChjb25zdCBjIG9mIGZlbikge1xuICAgIHN3aXRjaCAoYykge1xuICAgICAgY2FzZSAnICc6IHJldHVybiBwaWVjZXM7XG4gICAgICBjYXNlICcvJzpcbiAgICAgICAgLS1yb3c7XG4gICAgICAgIGlmIChyb3cgPT09IDApIHJldHVybiBwaWVjZXM7XG4gICAgICAgIGNvbCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnKyc6XG4gICAgICAgIHByb21vdGVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd+JzpcbiAgICAgICAgY29uc3QgcGllY2UgPSBwaWVjZXNbY2cuZmlsZXNbY29sXSArIGNnLnJhbmtzW2ZpcnN0UmFua0lzMCA/IHJvdyA6IHJvdyArIDFdXTtcbiAgICAgICAgaWYgKHBpZWNlKSBwaWVjZS5wcm9tb3RlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc3QgbmIgPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIGlmIChuYiA8IDU4KSBjb2wgKz0gKGMgPT09ICcwJykgPyA5IDogbmIgLSA0ODtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgKytjb2w7XG4gICAgICAgICAgY29uc3Qgcm9sZSA9IGMudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBsZXQgcGllY2UgPSB7XG4gICAgICAgICAgICByb2xlOiByb2xlc1tyb2xlXSxcbiAgICAgICAgICAgIGNvbG9yOiAoYyA9PT0gcm9sZSA/IHNob2dpID8gJ3doaXRlJzogJ2JsYWNrJyA6IHNob2dpID8gJ2JsYWNrJyA6ICd3aGl0ZScpIGFzIGNnLkNvbG9yXG4gICAgICAgICAgfSBhcyBjZy5QaWVjZTtcbiAgICAgICAgICBpZiAocHJvbW90ZWQpIHtcbiAgICAgICAgICAgIHBpZWNlLnJvbGUgPSAncCcgKyBwaWVjZS5yb2xlIGFzIGNnLlJvbGU7XG4gICAgICAgICAgICBwaWVjZS5wcm9tb3RlZCA9IHRydWU7XG4gICAgICAgICAgICBwcm9tb3RlZCA9IGZhbHNlO1xuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKG1pbmkpIHtcbiAgICAgICAgICAgICAgcGllY2VzW2NnLmZpbGVzWzYgLSBjb2wgLSAxXSArIGNnLnJhbmtzWzYgLSByb3ddXSA9IHBpZWNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc2hvZ2kpIHtcbiAgICAgICAgICAgICAgcGllY2VzW2NnLmZpbGVzWzEwIC0gY29sIC0gMV0gKyBjZy5yYW5rc1sxMCAtIHJvd11dID0gcGllY2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGllY2VzW2NnLmZpbGVzW2NvbCAtIDFdICsgY2cucmFua3NbZmlyc3RSYW5rSXMwID8gcm93IC0gMSA6IHJvd11dID0gcGllY2U7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGllY2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGUocGllY2VzOiBjZy5QaWVjZXMsIGdlb206IGNnLkdlb21ldHJ5KTogY2cuRkVOIHtcbiAgdmFyIGxldHRlcnM6IGFueSA9IHt9O1xuICBzd2l0Y2ggKGdlb20pIHtcbiAgY2FzZSBjZy5HZW9tZXRyeS5kaW05eDEwOlxuICAgIGxldHRlcnMgPSBsZXR0ZXJzMTA7XG4gICAgYnJlYWs7XG4gIGNhc2UgY2cuR2VvbWV0cnkuZGltOXg5OlxuICAgIGxldHRlcnMgPSBsZXR0ZXJzOTtcbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICBsZXR0ZXJzID0gbGV0dGVyczg7XG4gICAgYnJlYWtcbiAgfTtcbiAgcmV0dXJuIGludk5SYW5rcy5tYXAoeSA9PiBOUmFua3MubWFwKHggPT4ge1xuICAgICAgY29uc3QgcGllY2UgPSBwaWVjZXNbcG9zMmtleShbeCwgeV0sIGdlb20pXTtcbiAgICAgIGlmIChwaWVjZSkge1xuICAgICAgICBjb25zdCBsZXR0ZXI6IHN0cmluZyA9IGxldHRlcnNbcGllY2Uucm9sZV07XG4gICAgICAgIHJldHVybiBwaWVjZS5jb2xvciA9PT0gJ3doaXRlJyA/IGxldHRlci50b1VwcGVyQ2FzZSgpIDogbGV0dGVyO1xuICAgICAgfSBlbHNlIHJldHVybiAnMSc7XG4gICAgfSkuam9pbignJylcbiAgKS5qb2luKCcvJykucmVwbGFjZSgvMXsyLH0vZywgcyA9PiBzLmxlbmd0aC50b1N0cmluZygpKTtcbn1cbiIsImltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsJ1xuaW1wb3J0ICogYXMgY2cgZnJvbSAnLi90eXBlcydcblxudHlwZSBNb2JpbGl0eSA9ICh4MTpudW1iZXIsIHkxOm51bWJlciwgeDI6bnVtYmVyLCB5MjpudW1iZXIpID0+IGJvb2xlYW47XG5cbmZ1bmN0aW9uIGRpZmYoYTogbnVtYmVyLCBiOm51bWJlcik6bnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKTtcbn1cblxuZnVuY3Rpb24gcGF3bihjb2xvcjogY2cuQ29sb3IpOiBNb2JpbGl0eSB7XG4gIHJldHVybiAoeDEsIHkxLCB4MiwgeTIpID0+IGRpZmYoeDEsIHgyKSA8IDIgJiYgKFxuICAgIGNvbG9yID09PSAnd2hpdGUnID8gKFxuICAgICAgLy8gYWxsb3cgMiBzcXVhcmVzIGZyb20gMSBhbmQgOCwgZm9yIGhvcmRlXG4gICAgICB5MiA9PT0geTEgKyAxIHx8ICh5MSA8PSAyICYmIHkyID09PSAoeTEgKyAyKSAmJiB4MSA9PT0geDIpXG4gICAgKSA6IChcbiAgICAgIHkyID09PSB5MSAtIDEgfHwgKHkxID49IDcgJiYgeTIgPT09ICh5MSAtIDIpICYmIHgxID09PSB4MilcbiAgICApXG4gICk7XG59XG5cbmNvbnN0IGtuaWdodDogTW9iaWxpdHkgPSAoeDEsIHkxLCB4MiwgeTIpID0+IHtcbiAgY29uc3QgeGQgPSBkaWZmKHgxLCB4Mik7XG4gIGNvbnN0IHlkID0gZGlmZih5MSwgeTIpO1xuICByZXR1cm4gKHhkID09PSAxICYmIHlkID09PSAyKSB8fCAoeGQgPT09IDIgJiYgeWQgPT09IDEpO1xufVxuXG5jb25zdCBiaXNob3A6IE1vYmlsaXR5ID0gKHgxLCB5MSwgeDIsIHkyKSA9PiB7XG4gIHJldHVybiBkaWZmKHgxLCB4MikgPT09IGRpZmYoeTEsIHkyKTtcbn1cblxuY29uc3Qgcm9vazogTW9iaWxpdHkgPSAoeDEsIHkxLCB4MiwgeTIpID0+IHtcbiAgcmV0dXJuIHgxID09PSB4MiB8fCB5MSA9PT0geTI7XG59XG5cbmNvbnN0IHF1ZWVuOiBNb2JpbGl0eSA9ICh4MSwgeTEsIHgyLCB5MikgPT4ge1xuICByZXR1cm4gYmlzaG9wKHgxLCB5MSwgeDIsIHkyKSB8fCByb29rKHgxLCB5MSwgeDIsIHkyKTtcbn1cblxuZnVuY3Rpb24ga2luZyhjb2xvcjogY2cuQ29sb3IsIHJvb2tGaWxlczogbnVtYmVyW10sIGNhbkNhc3RsZTogYm9vbGVhbik6IE1vYmlsaXR5IHtcbiAgcmV0dXJuICh4MSwgeTEsIHgyLCB5MikgID0+IChcbiAgICBkaWZmKHgxLCB4MikgPCAyICYmIGRpZmYoeTEsIHkyKSA8IDJcbiAgKSB8fCAoXG4gICAgY2FuQ2FzdGxlICYmIHkxID09PSB5MiAmJiB5MSA9PT0gKGNvbG9yID09PSAnd2hpdGUnID8gMSA6IDgpICYmIChcbiAgICAgICh4MSA9PT0gNSAmJiAoeDIgPT09IDMgfHwgeDIgPT09IDcpKSB8fCB1dGlsLmNvbnRhaW5zWChyb29rRmlsZXMsIHgyKVxuICAgIClcbiAgKTtcbn1cblxuLy8gbWFrcnVrL3NpdHR1eWluIHF1ZWVuXG5jb25zdCBtZXQ6IE1vYmlsaXR5ID0gKHgxLCB5MSwgeDIsIHkyKSA9PiB7XG4gIHJldHVybiBkaWZmKHgxLCB4MikgPT09IGRpZmYoeTEsIHkyKSAmJiBkaWZmKHgxLCB4MikgPT09IDE7XG59XG5cbi8vIGNhcGFibGFuY2EgYXJjaGJpc2hvcCwgc2VpcmF3YW4gaGF3a1xuY29uc3QgYXJjaGJpc2hvcDogTW9iaWxpdHkgPSAoeDEsIHkxLCB4MiwgeTIpID0+IHtcbiAgcmV0dXJuIGJpc2hvcCh4MSwgeTEsIHgyLCB5MikgfHwga25pZ2h0KHgxLCB5MSwgeDIsIHkyKTtcbn1cblxuLy8gY2FwYWJsYW5jYSBjYW5jZWxsb3IsIHNlaXJhd2FuIGVsZXBoYW50XG5jb25zdCBjYW5jZWxsb3I6IE1vYmlsaXR5ID0gKHgxLCB5MSwgeDIsIHkyKSA9PiB7XG4gIHJldHVybiByb29rKHgxLCB5MSwgeDIsIHkyKSB8fCBrbmlnaHQoeDEsIHkxLCB4MiwgeTIpO1xufVxuXG4vLyBzaG9naSBsYW5jZVxuZnVuY3Rpb24gbGFuY2UoY29sb3I6IGNnLkNvbG9yKTogTW9iaWxpdHkge1xuICByZXR1cm4gKHgxLCB5MSwgeDIsIHkyKSA9PiAoXG4gICAgeDIgPT09IHgxICYmIChjb2xvciA9PT0gJ3doaXRlJyA/IHkyID4geTEgOiB5MiA8IHkxKVxuICApO1xufVxuXG4vLyBzaG9naSBzaWx2ZXIsIG1ha3J1ay9zaXR0dXlpbiBiaXNob3BcbmZ1bmN0aW9uIHNpbHZlcihjb2xvcjogY2cuQ29sb3IpOiBNb2JpbGl0eSB7XG4gIHJldHVybiAoeDEsIHkxLCB4MiwgeTIpICA9PiAoXG4gICAgbWV0KHgxLCB5MSwgeDIsIHkyKSB8fCAoeDEgPT09IHgyICYmIChjb2xvciA9PT0gJ3doaXRlJyA/IHkyID09PSB5MSArIDEgOiB5MiA9PT0geTEgLSAxKSlcbiAgKTtcbn1cblxuLy8gc2hvZ2kgZ29sZCwgcHJvbW90ZWQgcGF3bi9rbmlnaHQvbGFuY2Uvc2lsdmVyXG5mdW5jdGlvbiBnb2xkKGNvbG9yOiBjZy5Db2xvcik6IE1vYmlsaXR5IHtcbiAgcmV0dXJuICh4MSwgeTEsIHgyLCB5MikgID0+IChcbiAgICBkaWZmKHgxLCB4MikgPCAyICYmIGRpZmYoeTEsIHkyKSA8IDIgJiYgKFxuICAgICAgY29sb3IgPT09ICd3aGl0ZScgP1xuICAgICAgICAhKCh4MiA9PT0geDEgLSAxICYmIHkyID09PSB5MSAtIDEpIHx8ICh4MiA9PT0geDEgKyAxICYmIHkyID09PSB5MSAtIDEpKSA6XG4gICAgICAgICEoKHgyID09PSB4MSArIDEgJiYgeTIgPT09IHkxICsgMSkgfHwgKHgyID09PSB4MSAtIDEgJiYgeTIgPT09IHkxICsgMSkpXG4gICAgKVxuICApO1xufVxuXG4vLyBzaG9naSBwYXduXG5mdW5jdGlvbiBzcGF3bihjb2xvcjogY2cuQ29sb3IpOiBNb2JpbGl0eSB7XG4gIHJldHVybiAoeDEsIHkxLCB4MiwgeTIpID0+ICh4MiA9PT0geDEgJiYgKGNvbG9yID09PSAnd2hpdGUnID8geTIgPT09IHkxICsgMSA6IHkyID09PSB5MSAtIDEpKTtcbn1cblxuLy8gc2hvZ2kga25pZ2h0XG5mdW5jdGlvbiBza25pZ2h0KGNvbG9yOiBjZy5Db2xvcik6IE1vYmlsaXR5IHtcbiAgcmV0dXJuICh4MSwgeTEsIHgyLCB5MikgPT4gY29sb3IgPT09ICd3aGl0ZScgP1xuICAgICh5MiA9PT0geTEgKyAyICYmIHgyID09PSB4MSAtIDEgfHwgeTIgPT09IHkxICsgMiAmJiB4MiA9PT0geDEgKyAxKSA6XG4gICAgKHkyID09PSB5MSAtIDIgJiYgeDIgPT09IHgxIC0gMSB8fCB5MiA9PT0geTEgLSAyICYmIHgyID09PSB4MSArIDEpO1xufVxuXG4vLyBzaG9naSBwcm9tb3RlZCByb29rXG5jb25zdCBwcm9vazogTW9iaWxpdHkgPSAoeDEsIHkxLCB4MiwgeTIpID0+IHtcbiAgcmV0dXJuIHJvb2soeDEsIHkxLCB4MiwgeTIpIHx8IChkaWZmKHgxLCB4MikgPCAyICYmIGRpZmYoeTEsIHkyKSA8IDIpO1xufVxuXG4vLyBzaG9naSBwcm9tb3RlZCBiaXNob3BcbmNvbnN0IHBiaXNob3A6IE1vYmlsaXR5ID0gKHgxLCB5MSwgeDIsIHkyKSA9PiB7XG4gIHJldHVybiBiaXNob3AoeDEsIHkxLCB4MiwgeTIpIHx8IChkaWZmKHgxLCB4MikgPCAyICYmIGRpZmYoeTEsIHkyKSA8IDIpO1xufVxuXG4vLyBzaG9naSBraW5nXG5jb25zdCBza2luZzogTW9iaWxpdHkgPSAoeDEsIHkxLCB4MiwgeTIpID0+IHtcbiAgcmV0dXJuIGRpZmYoeDEsIHgyKSA8IDIgJiYgZGlmZih5MSwgeTIpIDwgMjtcbn1cblxuLy8geGlhbmdxaSBwYXduXG5mdW5jdGlvbiB4cGF3bihjb2xvcjogY2cuQ29sb3IpOiBNb2JpbGl0eSB7XG4gIHJldHVybiAoeDEsIHkxLCB4MiwgeTIpID0+IChcbiAgICAoeDIgPT09IHgxICYmIChjb2xvciA9PT0gJ3doaXRlJyA/IHkyID09PSB5MSArIDEgOiB5MiA9PT0geTEgLSAxKSkgfHxcbiAgICAoeTIgPT09IHkxICYmICh4MiA9PT0geDEgKyAxIHx8IHgyID09PSB4MSAtIDEpICYmIChjb2xvciA9PT0gJ3doaXRlJyA/IHkxID4gNTogeTEgPCA2KSlcbiAgICApO1xufVxuXG4vLyB4aWFuZ3FpIGJpc2hvcFxuY29uc3QgeGJpc2hvcDogTW9iaWxpdHkgPSAoeDEsIHkxLCB4MiwgeTIpID0+IHtcbiAgcmV0dXJuIGRpZmYoeDEsIHgyKSA9PT0gZGlmZih5MSwgeTIpICYmIGRpZmYoeDEsIHgyKSA9PT0gMjtcbn1cblxuLy8geGlhbmdxaSBhZHZpc29yXG5jb25zdCBhZHZpc29yOiBNb2JpbGl0eSA9ICh4MSwgeTEsIHgyLCB5MikgPT4ge1xuICByZXR1cm4gZGlmZih4MSwgeDIpID09PSBkaWZmKHkxLCB5MikgJiYgZGlmZih4MSwgeDIpID09PSAxO1xufVxuXG4vLyB4aWFuZ3FpIGdlbmVyYWwoa2luZylcbmNvbnN0IHhraW5nOiBNb2JpbGl0eSA9ICh4MSwgeTEsIHgyLCB5MikgPT4ge1xuICAvLyBUT0RPOiBmbHlpbmcgZ2VuZXJhbCBjYW4gY2FwdHVyZSBvcHAgZ2VuZXJhbFxuICByZXR1cm4gKHgxID09PSB4MiB8fCB5MSA9PT0geTIpICYmIGRpZmYoeDEsIHgyKSA9PT0gMTtcbn1cblxuZnVuY3Rpb24gcm9va0ZpbGVzT2YocGllY2VzOiBjZy5QaWVjZXMsIGNvbG9yOiBjZy5Db2xvciwgZmlyc3RSYW5rSXMwOiBib29sZWFuKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhwaWVjZXMpLmZpbHRlcihrZXkgPT4ge1xuICAgIGNvbnN0IHBpZWNlID0gcGllY2VzW2tleV07XG4gICAgcmV0dXJuIHBpZWNlICYmIHBpZWNlLmNvbG9yID09PSBjb2xvciAmJiBwaWVjZS5yb2xlID09PSAncm9vayc7XG4gIH0pLm1hcCgoa2V5OiBzdHJpbmcgKSA9PiB1dGlsLmtleTJwb3Moa2V5IGFzIGNnLktleSwgZmlyc3RSYW5rSXMwKVswXSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByZW1vdmUocGllY2VzOiBjZy5QaWVjZXMsIGtleTogY2cuS2V5LCBjYW5DYXN0bGU6IGJvb2xlYW4sIGdlb206IGNnLkdlb21ldHJ5KTogY2cuS2V5W10ge1xuICBjb25zdCBmaXJzdFJhbmtJczAgPSBjZy5kaW1lbnNpb25zW2dlb21dLmhlaWdodCA9PT0gMTA7XG4gIGNvbnN0IHBpZWNlID0gcGllY2VzW2tleV0hLFxuICBwb3MgPSB1dGlsLmtleTJwb3Moa2V5LCBmaXJzdFJhbmtJczApO1xuICBsZXQgbW9iaWxpdHk6IE1vYmlsaXR5O1xuICAvLyBQaWVjZSBwcmVtb3ZlIGRlcGVuZHMgb24gY2hlc3MgdmFyaWFudCBub3Qgb24gYm9hcmQgZ2VvbWV0cnksIGJ1dCB3ZSB3aWxsIHVzZSBpdCBoZXJlXG4gIC8vIEYuZS4gc2hvZ2kgaXMgbm90IHRoZSBvbmx5IDl4OSB2YXJpYW50LCBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmVzb25fTW9yXG4gIHN3aXRjaCAoZ2VvbSkge1xuICBjYXNlIGNnLkdlb21ldHJ5LmRpbTl4MTA6XG4gICAgc3dpdGNoIChwaWVjZS5yb2xlKSB7XG4gICAgY2FzZSAncGF3bic6XG4gICAgICBtb2JpbGl0eSA9IHhwYXduKHBpZWNlLmNvbG9yKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Nhbm5vbic6XG4gICAgY2FzZSAncm9vayc6XG4gICAgICBtb2JpbGl0eSA9IHJvb2s7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdrbmlnaHQnOlxuICAgICAgbW9iaWxpdHkgPSBrbmlnaHQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiaXNob3AnOlxuICAgICAgbW9iaWxpdHkgPSB4YmlzaG9wO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYWR2aXNvcic6XG4gICAgICBtb2JpbGl0eSA9IGFkdmlzb3I7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdraW5nJzpcbiAgICAgIG1vYmlsaXR5ID0geGtpbmc7XG4gICAgICBicmVhaztcbiAgICB9O1xuICAgIGJyZWFrO1xuICBjYXNlIGNnLkdlb21ldHJ5LmRpbTl4OTpcbiAgICBzd2l0Y2ggKHBpZWNlLnJvbGUpIHtcbiAgICBjYXNlICdwYXduJzpcbiAgICAgIG1vYmlsaXR5ID0gc3Bhd24ocGllY2UuY29sb3IpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAna25pZ2h0JzpcbiAgICAgIG1vYmlsaXR5ID0gc2tuaWdodChwaWVjZS5jb2xvcik7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiaXNob3AnOlxuICAgICAgbW9iaWxpdHkgPSBiaXNob3A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyb29rJzpcbiAgICAgIG1vYmlsaXR5ID0gcm9vaztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2tpbmcnOlxuICAgICAgbW9iaWxpdHkgPSBza2luZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NpbHZlcic6XG4gICAgICBtb2JpbGl0eSA9IHNpbHZlcihwaWVjZS5jb2xvcik7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwcGF3bic6XG4gICAgY2FzZSAncGxhbmNlJzpcbiAgICBjYXNlICdwa25pZ2h0JzpcbiAgICBjYXNlICdwc2lsdmVyJzpcbiAgICBjYXNlICdnb2xkJzpcbiAgICAgIG1vYmlsaXR5ID0gZ29sZChwaWVjZS5jb2xvcik7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsYW5jZSc6XG4gICAgICBtb2JpbGl0eSA9IGxhbmNlKHBpZWNlLmNvbG9yKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Byb29rJzpcbiAgICAgIG1vYmlsaXR5ID0gcHJvb2s7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYmlzaG9wJzpcbiAgICAgIG1vYmlsaXR5ID0gcGJpc2hvcDtcbiAgICAgIGJyZWFrO1xuICAgIH07XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgc3dpdGNoIChwaWVjZS5yb2xlKSB7XG4gICAgY2FzZSAncGF3bic6XG4gICAgICBtb2JpbGl0eSA9IHBhd24ocGllY2UuY29sb3IpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAna25pZ2h0JzpcbiAgICAgIG1vYmlsaXR5ID0ga25pZ2h0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYmlzaG9wJzpcbiAgICAgIG1vYmlsaXR5ID0gYmlzaG9wO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncm9vayc6XG4gICAgICBtb2JpbGl0eSA9IHJvb2s7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdxdWVlbic6XG4gICAgICBtb2JpbGl0eSA9IHF1ZWVuO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAna2luZyc6XG4gICAgICBtb2JpbGl0eSA9IGtpbmcocGllY2UuY29sb3IsIHJvb2tGaWxlc09mKHBpZWNlcywgcGllY2UuY29sb3IsIGZpcnN0UmFua0lzMCksIGNhbkNhc3RsZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdoYXdrJzpcbiAgICBjYXNlICdhcmNoYmlzaG9wJzpcbiAgICAgIG1vYmlsaXR5ID0gYXJjaGJpc2hvcDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VsZXBoYW50JzpcbiAgICBjYXNlICdjYW5jZWxsb3InOlxuICAgICAgbW9iaWxpdHkgPSBjYW5jZWxsb3I7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdtZXQnOlxuICAgIGNhc2UgJ2ZlcnonOlxuICAgICAgbW9iaWxpdHkgPSBtZXQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzaWx2ZXInOlxuICAgICAgbW9iaWxpdHkgPSBzaWx2ZXIocGllY2UuY29sb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfTtcbiAgICBicmVhaztcbiAgfTtcbiAgY29uc3QgYWxsa2V5cyA9IHV0aWwuYWxsS2V5c1tnZW9tXTtcblxuICBjb25zdCBwb3Mya2V5R2VvbSA9IChnZW9tOiBjZy5HZW9tZXRyeSkgPT4gKCAocG9zOiBjZy5Qb3MpID0+IHV0aWwucG9zMmtleShwb3MsIGdlb20pICk7XG4gIGNvbnN0IHBvczJrZXkgPSBwb3Mya2V5R2VvbShnZW9tKTtcblxuICBjb25zdCBrZXkycG9zUmFuazAgPSAoZmlyc3RyYW5rMDogYm9vbGVhbikgPT4gKCAoa2V5OiBjZy5LZXkpID0+IHV0aWwua2V5MnBvcyhrZXksIGZpcnN0cmFuazApICk7XG4gIGNvbnN0IGtleTJwb3MgPSBrZXkycG9zUmFuazAoZmlyc3RSYW5rSXMwKTtcblxuICByZXR1cm4gYWxsa2V5cy5tYXAoa2V5MnBvcykuZmlsdGVyKHBvczIgPT4ge1xuICAgIHJldHVybiAocG9zWzBdICE9PSBwb3MyWzBdIHx8IHBvc1sxXSAhPT0gcG9zMlsxXSkgJiYgbW9iaWxpdHkocG9zWzBdLCBwb3NbMV0sIHBvczJbMF0sIHBvczJbMV0pO1xuICB9KS5tYXAocG9zMmtleSk7XG59O1xuIiwiaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL3N0YXRlJ1xuaW1wb3J0IHsga2V5MnBvcywgY3JlYXRlRWwgfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgeyB3aGl0ZVBvdiB9IGZyb20gJy4vYm9hcmQnXG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbCdcbmltcG9ydCB7IEFuaW1DdXJyZW50LCBBbmltVmVjdG9ycywgQW5pbVZlY3RvciwgQW5pbUZhZGluZ3MgfSBmcm9tICcuL2FuaW0nXG5pbXBvcnQgeyBEcmFnQ3VycmVudCB9IGZyb20gJy4vZHJhZydcbmltcG9ydCAqIGFzIGNnIGZyb20gJy4vdHlwZXMnXG5cbi8vIGAkY29sb3IgJHJvbGVgXG50eXBlIFBpZWNlTmFtZSA9IHN0cmluZztcblxuaW50ZXJmYWNlIFNhbWVQaWVjZXMgeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH1cbmludGVyZmFjZSBTYW1lU3F1YXJlcyB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfVxuaW50ZXJmYWNlIE1vdmVkUGllY2VzIHsgW3BpZWNlTmFtZTogc3RyaW5nXTogY2cuUGllY2VOb2RlW10gfVxuaW50ZXJmYWNlIE1vdmVkU3F1YXJlcyB7IFtjbGFzc05hbWU6IHN0cmluZ106IGNnLlNxdWFyZU5vZGVbXSB9XG5pbnRlcmZhY2UgU3F1YXJlQ2xhc3NlcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG5cbi8vIHBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS92ZWxvY2UvbGljaG9iaWxlL2Jsb2IvbWFzdGVyL3NyYy9qcy9jaGVzc2dyb3VuZC92aWV3LmpzXG4vLyBpbiBjYXNlIG9mIGJ1Z3MsIGJsYW1lIEB2ZWxvY2VcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmRlcihzOiBTdGF0ZSk6IHZvaWQge1xuICBjb25zdCBmaXJzdFJhbmtJczAgPSBzLmRpbWVuc2lvbnMuaGVpZ2h0ID09PSAxMDtcbiAgY29uc3QgYXNXaGl0ZTogYm9vbGVhbiA9IHdoaXRlUG92KHMpLFxuICBwb3NUb1RyYW5zbGF0ZSA9IHMuZG9tLnJlbGF0aXZlID8gdXRpbC5wb3NUb1RyYW5zbGF0ZVJlbCA6IHV0aWwucG9zVG9UcmFuc2xhdGVBYnMocy5kb20uYm91bmRzKCksIHMuZGltZW5zaW9ucyksXG4gIHRyYW5zbGF0ZSA9IHMuZG9tLnJlbGF0aXZlID8gdXRpbC50cmFuc2xhdGVSZWwgOiB1dGlsLnRyYW5zbGF0ZUFicyxcbiAgYm9hcmRFbDogSFRNTEVsZW1lbnQgPSBzLmRvbS5lbGVtZW50cy5ib2FyZCxcbiAgcGllY2VzOiBjZy5QaWVjZXMgPSBzLnBpZWNlcyxcbiAgY3VyQW5pbTogQW5pbUN1cnJlbnQgfCB1bmRlZmluZWQgPSBzLmFuaW1hdGlvbi5jdXJyZW50LFxuICBhbmltczogQW5pbVZlY3RvcnMgPSBjdXJBbmltID8gY3VyQW5pbS5wbGFuLmFuaW1zIDoge30sXG4gIGZhZGluZ3M6IEFuaW1GYWRpbmdzID0gY3VyQW5pbSA/IGN1ckFuaW0ucGxhbi5mYWRpbmdzIDoge30sXG4gIGN1ckRyYWc6IERyYWdDdXJyZW50IHwgdW5kZWZpbmVkID0gcy5kcmFnZ2FibGUuY3VycmVudCxcbiAgc3F1YXJlczogU3F1YXJlQ2xhc3NlcyA9IGNvbXB1dGVTcXVhcmVDbGFzc2VzKHMpLFxuICBzYW1lUGllY2VzOiBTYW1lUGllY2VzID0ge30sXG4gIHNhbWVTcXVhcmVzOiBTYW1lU3F1YXJlcyA9IHt9LFxuICBtb3ZlZFBpZWNlczogTW92ZWRQaWVjZXMgPSB7fSxcbiAgbW92ZWRTcXVhcmVzOiBNb3ZlZFNxdWFyZXMgPSB7fSxcbiAgcGllY2VzS2V5czogY2cuS2V5W10gPSBPYmplY3Qua2V5cyhwaWVjZXMpIGFzIGNnLktleVtdO1xuICBsZXQgazogY2cuS2V5LFxuICBwOiBjZy5QaWVjZSB8IHVuZGVmaW5lZCxcbiAgZWw6IGNnLlBpZWNlTm9kZSB8IGNnLlNxdWFyZU5vZGUsXG4gIHBpZWNlQXRLZXk6IGNnLlBpZWNlIHwgdW5kZWZpbmVkLFxuICBlbFBpZWNlTmFtZTogUGllY2VOYW1lLFxuICBhbmltOiBBbmltVmVjdG9yIHwgdW5kZWZpbmVkLFxuICBmYWRpbmc6IGNnLlBpZWNlIHwgdW5kZWZpbmVkLFxuICBwTXZkc2V0OiBjZy5QaWVjZU5vZGVbXSxcbiAgcE12ZDogY2cuUGllY2VOb2RlIHwgdW5kZWZpbmVkLFxuICBzTXZkc2V0OiBjZy5TcXVhcmVOb2RlW10sXG4gIHNNdmQ6IGNnLlNxdWFyZU5vZGUgfCB1bmRlZmluZWQ7XG5cbiAgLy8gd2FsayBvdmVyIGFsbCBib2FyZCBkb20gZWxlbWVudHMsIGFwcGx5IGFuaW1hdGlvbnMgYW5kIGZsYWcgbW92ZWQgcGllY2VzXG4gIGVsID0gYm9hcmRFbC5maXJzdENoaWxkIGFzIGNnLlBpZWNlTm9kZSB8IGNnLlNxdWFyZU5vZGU7XG4gIHdoaWxlIChlbCkge1xuICAgIGsgPSBlbC5jZ0tleTtcbiAgICBpZiAoaXNQaWVjZU5vZGUoZWwpKSB7XG4gICAgICBwaWVjZUF0S2V5ID0gcGllY2VzW2tdO1xuICAgICAgYW5pbSA9IGFuaW1zW2tdO1xuICAgICAgZmFkaW5nID0gZmFkaW5nc1trXTtcbiAgICAgIGVsUGllY2VOYW1lID0gZWwuY2dQaWVjZTtcbiAgICAgIC8vIGlmIHBpZWNlIG5vdCBiZWluZyBkcmFnZ2VkIGFueW1vcmUsIHJlbW92ZSBkcmFnZ2luZyBzdHlsZVxuICAgICAgaWYgKGVsLmNnRHJhZ2dpbmcgJiYgKCFjdXJEcmFnIHx8IGN1ckRyYWcub3JpZyAhPT0gaykpIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dpbmcnKTtcbiAgICAgICAgdHJhbnNsYXRlKGVsLCBwb3NUb1RyYW5zbGF0ZShrZXkycG9zKGssIGZpcnN0UmFua0lzMCksIGFzV2hpdGUsIHMuZGltZW5zaW9ucykpO1xuICAgICAgICBlbC5jZ0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyByZW1vdmUgZmFkaW5nIGNsYXNzIGlmIGl0IHN0aWxsIHJlbWFpbnNcbiAgICAgIGlmICghZmFkaW5nICYmIGVsLmNnRmFkaW5nKSB7XG4gICAgICAgIGVsLmNnRmFkaW5nID0gZmFsc2U7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2ZhZGluZycpO1xuICAgICAgfVxuICAgICAgLy8gdGhlcmUgaXMgbm93IGEgcGllY2UgYXQgdGhpcyBkb20ga2V5XG4gICAgICBpZiAocGllY2VBdEtleSkge1xuICAgICAgICAvLyBjb250aW51ZSBhbmltYXRpb24gaWYgYWxyZWFkeSBhbmltYXRpbmcgYW5kIHNhbWUgcGllY2VcbiAgICAgICAgLy8gKG90aGVyd2lzZSBpdCBjb3VsZCBhbmltYXRlIGEgY2FwdHVyZWQgcGllY2UpXG4gICAgICAgIGlmIChhbmltICYmIGVsLmNnQW5pbWF0aW5nICYmIGVsUGllY2VOYW1lID09PSBwaWVjZU5hbWVPZihwaWVjZUF0S2V5KSkge1xuICAgICAgICAgIGNvbnN0IHBvcyA9IGtleTJwb3MoaywgZmlyc3RSYW5rSXMwKTtcbiAgICAgICAgICBwb3NbMF0gKz0gYW5pbVsyXTtcbiAgICAgICAgICBwb3NbMV0gKz0gYW5pbVszXTtcbiAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdhbmltJyk7XG4gICAgICAgICAgdHJhbnNsYXRlKGVsLCBwb3NUb1RyYW5zbGF0ZShwb3MsIGFzV2hpdGUsIHMuZGltZW5zaW9ucykpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsLmNnQW5pbWF0aW5nKSB7XG4gICAgICAgICAgZWwuY2dBbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdhbmltJyk7XG4gICAgICAgICAgdHJhbnNsYXRlKGVsLCBwb3NUb1RyYW5zbGF0ZShrZXkycG9zKGssIGZpcnN0UmFua0lzMCksIGFzV2hpdGUsIHMuZGltZW5zaW9ucykpO1xuICAgICAgICAgIGlmIChzLmFkZFBpZWNlWkluZGV4KSBlbC5zdHlsZS56SW5kZXggPSBwb3NaSW5kZXgoa2V5MnBvcyhrLCBmaXJzdFJhbmtJczApLCBhc1doaXRlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzYW1lIHBpZWNlOiBmbGFnIGFzIHNhbWVcbiAgICAgICAgaWYgKGVsUGllY2VOYW1lID09PSBwaWVjZU5hbWVPZihwaWVjZUF0S2V5KSAmJiAoIWZhZGluZyB8fCAhZWwuY2dGYWRpbmcpKSB7XG4gICAgICAgICAgc2FtZVBpZWNlc1trXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlmZmVyZW50IHBpZWNlOiBmbGFnIGFzIG1vdmVkIHVubGVzcyBpdCBpcyBhIGZhZGluZyBwaWVjZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoZmFkaW5nICYmIGVsUGllY2VOYW1lID09PSBwaWVjZU5hbWVPZihmYWRpbmcpKSB7XG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdmYWRpbmcnKTtcbiAgICAgICAgICAgIGVsLmNnRmFkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG1vdmVkUGllY2VzW2VsUGllY2VOYW1lXSkgbW92ZWRQaWVjZXNbZWxQaWVjZU5hbWVdLnB1c2goZWwpO1xuICAgICAgICAgICAgZWxzZSBtb3ZlZFBpZWNlc1tlbFBpZWNlTmFtZV0gPSBbZWxdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gbm8gcGllY2U6IGZsYWcgYXMgbW92ZWRcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAobW92ZWRQaWVjZXNbZWxQaWVjZU5hbWVdKSBtb3ZlZFBpZWNlc1tlbFBpZWNlTmFtZV0ucHVzaChlbCk7XG4gICAgICAgIGVsc2UgbW92ZWRQaWVjZXNbZWxQaWVjZU5hbWVdID0gW2VsXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTcXVhcmVOb2RlKGVsKSkge1xuICAgICAgY29uc3QgY24gPSBlbC5jbGFzc05hbWU7XG4gICAgICBpZiAoc3F1YXJlc1trXSA9PT0gY24pIHNhbWVTcXVhcmVzW2tdID0gdHJ1ZTtcbiAgICAgIGVsc2UgaWYgKG1vdmVkU3F1YXJlc1tjbl0pIG1vdmVkU3F1YXJlc1tjbl0ucHVzaChlbCk7XG4gICAgICBlbHNlIG1vdmVkU3F1YXJlc1tjbl0gPSBbZWxdO1xuICAgIH1cbiAgICBlbCA9IGVsLm5leHRTaWJsaW5nIGFzIGNnLlBpZWNlTm9kZSB8IGNnLlNxdWFyZU5vZGU7XG4gIH1cblxuICAvLyB3YWxrIG92ZXIgYWxsIHNxdWFyZXMgaW4gY3VycmVudCBzZXQsIGFwcGx5IGRvbSBjaGFuZ2VzIHRvIG1vdmVkIHNxdWFyZXNcbiAgLy8gb3IgYXBwZW5kIG5ldyBzcXVhcmVzXG4gIGZvciAoY29uc3Qgc2sgaW4gc3F1YXJlcykge1xuICAgIGlmICghc2FtZVNxdWFyZXNbc2tdKSB7XG4gICAgICBzTXZkc2V0ID0gbW92ZWRTcXVhcmVzW3NxdWFyZXNbc2tdXTtcbiAgICAgIHNNdmQgPSBzTXZkc2V0ICYmIHNNdmRzZXQucG9wKCk7XG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHBvc1RvVHJhbnNsYXRlKGtleTJwb3Moc2sgYXMgY2cuS2V5LCBmaXJzdFJhbmtJczApLCBhc1doaXRlLCBzLmRpbWVuc2lvbnMpO1xuICAgICAgaWYgKHNNdmQpIHtcbiAgICAgICAgc012ZC5jZ0tleSA9IHNrIGFzIGNnLktleTtcbiAgICAgICAgdHJhbnNsYXRlKHNNdmQsIHRyYW5zbGF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBzcXVhcmVOb2RlID0gY3JlYXRlRWwoJ3NxdWFyZScsIHNxdWFyZXNbc2tdKSBhcyBjZy5TcXVhcmVOb2RlO1xuICAgICAgICBzcXVhcmVOb2RlLmNnS2V5ID0gc2sgYXMgY2cuS2V5O1xuICAgICAgICB0cmFuc2xhdGUoc3F1YXJlTm9kZSwgdHJhbnNsYXRpb24pO1xuICAgICAgICBib2FyZEVsLmluc2VydEJlZm9yZShzcXVhcmVOb2RlLCBib2FyZEVsLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHdhbGsgb3ZlciBhbGwgcGllY2VzIGluIGN1cnJlbnQgc2V0LCBhcHBseSBkb20gY2hhbmdlcyB0byBtb3ZlZCBwaWVjZXNcbiAgLy8gb3IgYXBwZW5kIG5ldyBwaWVjZXNcbiAgZm9yIChjb25zdCBqIGluIHBpZWNlc0tleXMpIHtcbiAgICBrID0gcGllY2VzS2V5c1tqXTtcbiAgICBwID0gcGllY2VzW2tdITtcbiAgICBhbmltID0gYW5pbXNba107XG4gICAgaWYgKCFzYW1lUGllY2VzW2tdKSB7XG4gICAgICBwTXZkc2V0ID0gbW92ZWRQaWVjZXNbcGllY2VOYW1lT2YocCldO1xuICAgICAgcE12ZCA9IHBNdmRzZXQgJiYgcE12ZHNldC5wb3AoKTtcbiAgICAgIC8vIGEgc2FtZSBwaWVjZSB3YXMgbW92ZWRcbiAgICAgIGlmIChwTXZkKSB7XG4gICAgICAgIC8vIGFwcGx5IGRvbSBjaGFuZ2VzXG4gICAgICAgIHBNdmQuY2dLZXkgPSBrO1xuICAgICAgICBpZiAocE12ZC5jZ0ZhZGluZykge1xuICAgICAgICAgIHBNdmQuY2xhc3NMaXN0LnJlbW92ZSgnZmFkaW5nJyk7XG4gICAgICAgICAgcE12ZC5jZ0ZhZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvcyA9IGtleTJwb3MoaywgZmlyc3RSYW5rSXMwKTtcbiAgICAgICAgaWYgKHMuYWRkUGllY2VaSW5kZXgpIHBNdmQuc3R5bGUuekluZGV4ID0gcG9zWkluZGV4KHBvcywgYXNXaGl0ZSk7XG4gICAgICAgIGlmIChhbmltKSB7XG4gICAgICAgICAgcE12ZC5jZ0FuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgcE12ZC5jbGFzc0xpc3QuYWRkKCdhbmltJyk7XG4gICAgICAgICAgcG9zWzBdICs9IGFuaW1bMl07XG4gICAgICAgICAgcG9zWzFdICs9IGFuaW1bM107XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNsYXRlKHBNdmQsIHBvc1RvVHJhbnNsYXRlKHBvcywgYXNXaGl0ZSwgcy5kaW1lbnNpb25zKSk7XG4gICAgICB9XG4gICAgICAvLyBubyBwaWVjZSBpbiBtb3ZlZCBvYmo6IGluc2VydCB0aGUgbmV3IHBpZWNlXG4gICAgICAvLyBhc3N1bWVzIHRoZSBuZXcgcGllY2UgaXMgbm90IGJlaW5nIGRyYWdnZWRcbiAgICAgIGVsc2Uge1xuXG4gICAgICAgIGNvbnN0IHBpZWNlTmFtZSA9IHBpZWNlTmFtZU9mKHApLFxuICAgICAgICBwaWVjZU5vZGUgPSBjcmVhdGVFbCgncGllY2UnLCBwaWVjZU5hbWUpIGFzIGNnLlBpZWNlTm9kZSxcbiAgICAgICAgcG9zID0ga2V5MnBvcyhrLCBmaXJzdFJhbmtJczApO1xuXG4gICAgICAgIHBpZWNlTm9kZS5jZ1BpZWNlID0gcGllY2VOYW1lO1xuICAgICAgICBwaWVjZU5vZGUuY2dLZXkgPSBrO1xuICAgICAgICBpZiAoYW5pbSkge1xuICAgICAgICAgIHBpZWNlTm9kZS5jZ0FuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgcG9zWzBdICs9IGFuaW1bMl07XG4gICAgICAgICAgcG9zWzFdICs9IGFuaW1bM107XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNsYXRlKHBpZWNlTm9kZSwgcG9zVG9UcmFuc2xhdGUocG9zLCBhc1doaXRlLCBzLmRpbWVuc2lvbnMpKTtcblxuICAgICAgICBpZiAocy5hZGRQaWVjZVpJbmRleCkgcGllY2VOb2RlLnN0eWxlLnpJbmRleCA9IHBvc1pJbmRleChwb3MsIGFzV2hpdGUpO1xuXG4gICAgICAgIGJvYXJkRWwuYXBwZW5kQ2hpbGQocGllY2VOb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyByZW1vdmUgYW55IGVsZW1lbnQgdGhhdCByZW1haW5zIGluIHRoZSBtb3ZlZCBzZXRzXG4gIGZvciAoY29uc3QgaSBpbiBtb3ZlZFBpZWNlcykgcmVtb3ZlTm9kZXMocywgbW92ZWRQaWVjZXNbaV0pO1xuICBmb3IgKGNvbnN0IGkgaW4gbW92ZWRTcXVhcmVzKSByZW1vdmVOb2RlcyhzLCBtb3ZlZFNxdWFyZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBpc1BpZWNlTm9kZShlbDogY2cuUGllY2VOb2RlIHwgY2cuU3F1YXJlTm9kZSk6IGVsIGlzIGNnLlBpZWNlTm9kZSB7XG4gIHJldHVybiBlbC50YWdOYW1lID09PSAnUElFQ0UnO1xufVxuZnVuY3Rpb24gaXNTcXVhcmVOb2RlKGVsOiBjZy5QaWVjZU5vZGUgfCBjZy5TcXVhcmVOb2RlKTogZWwgaXMgY2cuU3F1YXJlTm9kZSB7XG4gIHJldHVybiBlbC50YWdOYW1lID09PSAnU1FVQVJFJztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZXMoczogU3RhdGUsIG5vZGVzOiBIVE1MRWxlbWVudFtdKTogdm9pZCB7XG4gIGZvciAoY29uc3QgaSBpbiBub2Rlcykgcy5kb20uZWxlbWVudHMuYm9hcmQucmVtb3ZlQ2hpbGQobm9kZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBwb3NaSW5kZXgocG9zOiBjZy5Qb3MsIGFzV2hpdGU6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBsZXQgeiA9IDIgKyAocG9zWzFdIC0gMSkgKiA4ICsgKDggLSBwb3NbMF0pO1xuICBpZiAoYXNXaGl0ZSkgeiA9IDY3IC0gejtcbiAgcmV0dXJuIHogKyAnJztcbn1cblxuZnVuY3Rpb24gcGllY2VOYW1lT2YocGllY2U6IGNnLlBpZWNlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3BpZWNlLmNvbG9yfSAke3BpZWNlLnJvbGV9YDtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVNxdWFyZUNsYXNzZXMoczogU3RhdGUpOiBTcXVhcmVDbGFzc2VzIHtcbiAgY29uc3Qgc3F1YXJlczogU3F1YXJlQ2xhc3NlcyA9IHt9O1xuICBsZXQgaTogYW55LCBrOiBjZy5LZXk7XG4gIGlmIChzLmxhc3RNb3ZlICYmIHMuaGlnaGxpZ2h0Lmxhc3RNb3ZlKSBmb3IgKGkgaW4gcy5sYXN0TW92ZSkge1xuICAgIGlmIChzLmxhc3RNb3ZlW2ldICE9ICd6MCcpIHtcbiAgICAgIGFkZFNxdWFyZShzcXVhcmVzLCBzLmxhc3RNb3ZlW2ldLCAnbGFzdC1tb3ZlJyk7XG4gICAgfVxuICB9XG4gIGlmIChzLmNoZWNrICYmIHMuaGlnaGxpZ2h0LmNoZWNrKSBhZGRTcXVhcmUoc3F1YXJlcywgcy5jaGVjaywgJ2NoZWNrJyk7XG4gIGlmIChzLnNlbGVjdGVkKSB7XG4gICAgaWYgKHMuc2VsZWN0ZWQgIT0gJ3owJykge1xuICAgICAgYWRkU3F1YXJlKHNxdWFyZXMsIHMuc2VsZWN0ZWQsICdzZWxlY3RlZCcpO1xuICAgIH1cbiAgICBpZiAocy5tb3ZhYmxlLnNob3dEZXN0cykge1xuICAgICAgY29uc3QgZGVzdHMgPSBzLm1vdmFibGUuZGVzdHMgJiYgcy5tb3ZhYmxlLmRlc3RzW3Muc2VsZWN0ZWRdO1xuICAgICAgaWYgKGRlc3RzKSBmb3IgKGkgaW4gZGVzdHMpIHtcbiAgICAgICAgayA9IGRlc3RzW2ldO1xuICAgICAgICBhZGRTcXVhcmUoc3F1YXJlcywgaywgJ21vdmUtZGVzdCcgKyAocy5waWVjZXNba10gPyAnIG9jJyA6ICcnKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBwRGVzdHMgPSBzLnByZW1vdmFibGUuZGVzdHM7XG4gICAgICBpZiAocERlc3RzKSBmb3IgKGkgaW4gcERlc3RzKSB7XG4gICAgICAgIGsgPSBwRGVzdHNbaV07XG4gICAgICAgIGFkZFNxdWFyZShzcXVhcmVzLCBrLCAncHJlbW92ZS1kZXN0JyArIChzLnBpZWNlc1trXSA/ICcgb2MnIDogJycpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgcHJlbW92ZSA9IHMucHJlbW92YWJsZS5jdXJyZW50O1xuICBpZiAocHJlbW92ZSkgZm9yIChpIGluIHByZW1vdmUpIGFkZFNxdWFyZShzcXVhcmVzLCBwcmVtb3ZlW2ldLCAnY3VycmVudC1wcmVtb3ZlJyk7XG4gIGVsc2UgaWYgKHMucHJlZHJvcHBhYmxlLmN1cnJlbnQpIGFkZFNxdWFyZShzcXVhcmVzLCBzLnByZWRyb3BwYWJsZS5jdXJyZW50LmtleSwgJ2N1cnJlbnQtcHJlbW92ZScpO1xuXG4gIGNvbnN0IG8gPSBzLmV4cGxvZGluZztcbiAgaWYgKG8pIGZvciAoaSBpbiBvLmtleXMpIGFkZFNxdWFyZShzcXVhcmVzLCBvLmtleXNbaV0sICdleHBsb2RpbmcnICsgby5zdGFnZSk7XG5cbiAgcmV0dXJuIHNxdWFyZXM7XG59XG5cbmZ1bmN0aW9uIGFkZFNxdWFyZShzcXVhcmVzOiBTcXVhcmVDbGFzc2VzLCBrZXk6IGNnLktleSwga2xhc3M6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoc3F1YXJlc1trZXldKSBzcXVhcmVzW2tleV0gKz0gJyAnICsga2xhc3M7XG4gIGVsc2Ugc3F1YXJlc1trZXldID0ga2xhc3M7XG59XG4iLCJpbXBvcnQgKiBhcyBmZW4gZnJvbSAnLi9mZW4nXG5pbXBvcnQgeyBBbmltQ3VycmVudCB9IGZyb20gJy4vYW5pbSdcbmltcG9ydCB7IERyYWdDdXJyZW50IH0gZnJvbSAnLi9kcmFnJ1xuaW1wb3J0IHsgRHJhd2FibGUgfSBmcm9tICcuL2RyYXcnXG5pbXBvcnQgeyB0aW1lciB9IGZyb20gJy4vdXRpbCdcbmltcG9ydCAqIGFzIGNnIGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlIHtcbiAgcGllY2VzOiBjZy5QaWVjZXM7XG4gIG9yaWVudGF0aW9uOiBjZy5Db2xvcjsgLy8gYm9hcmQgb3JpZW50YXRpb24uIHdoaXRlIHwgYmxhY2tcbiAgdHVybkNvbG9yOiBjZy5Db2xvcjsgLy8gdHVybiB0byBwbGF5LiB3aGl0ZSB8IGJsYWNrXG4gIGNoZWNrPzogY2cuS2V5OyAvLyBzcXVhcmUgY3VycmVudGx5IGluIGNoZWNrIFwiYTJcIlxuICBsYXN0TW92ZT86IGNnLktleVtdOyAvLyBzcXVhcmVzIHBhcnQgb2YgdGhlIGxhc3QgbW92ZSBbXCJjM1wiOyBcImM0XCJdXG4gIHNlbGVjdGVkPzogY2cuS2V5OyAvLyBzcXVhcmUgY3VycmVudGx5IHNlbGVjdGVkIFwiYTFcIlxuICBjb29yZGluYXRlczogYm9vbGVhbjsgLy8gaW5jbHVkZSBjb29yZHMgYXR0cmlidXRlc1xuICBhdXRvQ2FzdGxlOiBib29sZWFuOyAvLyBpbW1lZGlhdGVseSBjb21wbGV0ZSB0aGUgY2FzdGxlIGJ5IG1vdmluZyB0aGUgcm9vayBhZnRlciBraW5nIG1vdmVcbiAgdmlld09ubHk6IGJvb2xlYW47IC8vIGRvbid0IGJpbmQgZXZlbnRzOiB0aGUgdXNlciB3aWxsIG5ldmVyIGJlIGFibGUgdG8gbW92ZSBwaWVjZXMgYXJvdW5kXG4gIGRpc2FibGVDb250ZXh0TWVudTogYm9vbGVhbjsgLy8gYmVjYXVzZSB3aG8gbmVlZHMgYSBjb250ZXh0IG1lbnUgb24gYSBjaGVzc2JvYXJkXG4gIHJlc2l6YWJsZTogYm9vbGVhbjsgLy8gbGlzdGVucyB0byBjaGVzc2dyb3VuZC5yZXNpemUgb24gZG9jdW1lbnQuYm9keSB0byBjbGVhciBib3VuZHMgY2FjaGVcbiAgYWRkUGllY2VaSW5kZXg6IGJvb2xlYW47IC8vIGFkZHMgei1pbmRleCB2YWx1ZXMgdG8gcGllY2VzIChmb3IgM0QpXG4gIHBpZWNlS2V5OiBib29sZWFuOyAvLyBhZGQgYSBkYXRhLWtleSBhdHRyaWJ1dGUgdG8gcGllY2UgZWxlbWVudHNcbiAgaGlnaGxpZ2h0OiB7XG4gICAgbGFzdE1vdmU6IGJvb2xlYW47IC8vIGFkZCBsYXN0LW1vdmUgY2xhc3MgdG8gc3F1YXJlc1xuICAgIGNoZWNrOiBib29sZWFuOyAvLyBhZGQgY2hlY2sgY2xhc3MgdG8gc3F1YXJlc1xuICB9O1xuICBhbmltYXRpb246IHtcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGR1cmF0aW9uOiBudW1iZXI7XG4gICAgY3VycmVudD86IEFuaW1DdXJyZW50O1xuICB9O1xuICBtb3ZhYmxlOiB7XG4gICAgZnJlZTogYm9vbGVhbjsgLy8gYWxsIG1vdmVzIGFyZSB2YWxpZCAtIGJvYXJkIGVkaXRvclxuICAgIGNvbG9yPzogY2cuQ29sb3IgfCAnYm90aCc7IC8vIGNvbG9yIHRoYXQgY2FuIG1vdmUuIHdoaXRlIHwgYmxhY2sgfCBib3RoXG4gICAgZGVzdHM/OiBjZy5EZXN0czsgLy8gdmFsaWQgbW92ZXMuIHtcImEyXCIgW1wiYTNcIiBcImE0XCJdIFwiYjFcIiBbXCJhM1wiIFwiYzNcIl19XG4gICAgc2hvd0Rlc3RzOiBib29sZWFuOyAvLyB3aGV0aGVyIHRvIGFkZCB0aGUgbW92ZS1kZXN0IGNsYXNzIG9uIHNxdWFyZXNcbiAgICBldmVudHM6IHtcbiAgICAgIGFmdGVyPzogKG9yaWc6IGNnLktleSwgZGVzdDogY2cuS2V5LCBtZXRhZGF0YTogY2cuTW92ZU1ldGFkYXRhKSA9PiB2b2lkOyAvLyBjYWxsZWQgYWZ0ZXIgdGhlIG1vdmUgaGFzIGJlZW4gcGxheWVkXG4gICAgICBhZnRlck5ld1BpZWNlPzogKHJvbGU6IGNnLlJvbGUsIGtleTogY2cuS2V5LCBtZXRhZGF0YTogY2cuTW92ZU1ldGFkYXRhKSA9PiB2b2lkOyAvLyBjYWxsZWQgYWZ0ZXIgYSBuZXcgcGllY2UgaXMgZHJvcHBlZCBvbiB0aGUgYm9hcmRcbiAgICB9O1xuICAgIHJvb2tDYXN0bGU6IGJvb2xlYW4gLy8gY2FzdGxlIGJ5IG1vdmluZyB0aGUga2luZyB0byB0aGUgcm9va1xuICB9O1xuICBwcmVtb3ZhYmxlOiB7XG4gICAgZW5hYmxlZDogYm9vbGVhbjsgLy8gYWxsb3cgcHJlbW92ZXMgZm9yIGNvbG9yIHRoYXQgY2FuIG5vdCBtb3ZlXG4gICAgc2hvd0Rlc3RzOiBib29sZWFuOyAvLyB3aGV0aGVyIHRvIGFkZCB0aGUgcHJlbW92ZS1kZXN0IGNsYXNzIG9uIHNxdWFyZXNcbiAgICBjYXN0bGU6IGJvb2xlYW47IC8vIHdoZXRoZXIgdG8gYWxsb3cga2luZyBjYXN0bGUgcHJlbW92ZXNcbiAgICBkZXN0cz86IGNnLktleVtdOyAvLyBwcmVtb3ZlIGRlc3RpbmF0aW9ucyBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgY3VycmVudD86IGNnLktleVBhaXI7IC8vIGtleXMgb2YgdGhlIGN1cnJlbnQgc2F2ZWQgcHJlbW92ZSBbXCJlMlwiIFwiZTRcIl1cbiAgICBldmVudHM6IHtcbiAgICAgIHNldD86IChvcmlnOiBjZy5LZXksIGRlc3Q6IGNnLktleSwgbWV0YWRhdGE/OiBjZy5TZXRQcmVtb3ZlTWV0YWRhdGEpID0+IHZvaWQ7IC8vIGNhbGxlZCBhZnRlciB0aGUgcHJlbW92ZSBoYXMgYmVlbiBzZXRcbiAgICAgIHVuc2V0PzogKCkgPT4gdm9pZDsgIC8vIGNhbGxlZCBhZnRlciB0aGUgcHJlbW92ZSBoYXMgYmVlbiB1bnNldFxuICAgIH1cbiAgfTtcbiAgcHJlZHJvcHBhYmxlOiB7XG4gICAgZW5hYmxlZDogYm9vbGVhbjsgLy8gYWxsb3cgcHJlZHJvcHMgZm9yIGNvbG9yIHRoYXQgY2FuIG5vdCBtb3ZlXG4gICAgY3VycmVudD86IHsgLy8gY3VycmVudCBzYXZlZCBwcmVkcm9wIHtyb2xlOiAna25pZ2h0Jzsga2V5OiAnZTQnfVxuICAgICAgcm9sZTogY2cuUm9sZTtcbiAgICAgIGtleTogY2cuS2V5XG4gICAgfTtcbiAgICBldmVudHM6IHtcbiAgICAgIHNldD86IChyb2xlOiBjZy5Sb2xlLCBrZXk6IGNnLktleSkgPT4gdm9pZDsgLy8gY2FsbGVkIGFmdGVyIHRoZSBwcmVkcm9wIGhhcyBiZWVuIHNldFxuICAgICAgdW5zZXQ/OiAoKSA9PiB2b2lkOyAvLyBjYWxsZWQgYWZ0ZXIgdGhlIHByZWRyb3AgaGFzIGJlZW4gdW5zZXRcbiAgICB9XG4gIH07XG4gIGRyYWdnYWJsZToge1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47IC8vIGFsbG93IG1vdmVzICYgcHJlbW92ZXMgdG8gdXNlIGRyYWcnbiBkcm9wXG4gICAgZGlzdGFuY2U6IG51bWJlcjsgLy8gbWluaW11bSBkaXN0YW5jZSB0byBpbml0aWF0ZSBhIGRyYWc7IGluIHBpeGVsc1xuICAgIGF1dG9EaXN0YW5jZTogYm9vbGVhbjsgLy8gbGV0cyBjaGVzc2dyb3VuZCBzZXQgZGlzdGFuY2UgdG8gemVybyB3aGVuIHVzZXIgZHJhZ3MgcGllY2VzXG4gICAgY2VudGVyUGllY2U6IGJvb2xlYW47IC8vIGNlbnRlciB0aGUgcGllY2Ugb24gY3Vyc29yIGF0IGRyYWcgc3RhcnRcbiAgICBzaG93R2hvc3Q6IGJvb2xlYW47IC8vIHNob3cgZ2hvc3Qgb2YgcGllY2UgYmVpbmcgZHJhZ2dlZFxuICAgIGRlbGV0ZU9uRHJvcE9mZjogYm9vbGVhbjsgLy8gZGVsZXRlIGEgcGllY2Ugd2hlbiBpdCBpcyBkcm9wcGVkIG9mZiB0aGUgYm9hcmRcbiAgICBjdXJyZW50PzogRHJhZ0N1cnJlbnQ7XG4gIH07XG4gIGRyb3Btb2RlOiB7XG4gICAgYWN0aXZlOiBib29sZWFuO1xuICAgIHBpZWNlPzogY2cuUGllY2U7XG4gIH1cbiAgc2VsZWN0YWJsZToge1xuICAgIC8vIGRpc2FibGUgdG8gZW5mb3JjZSBkcmFnZ2luZyBvdmVyIGNsaWNrLWNsaWNrIG1vdmVcbiAgICBlbmFibGVkOiBib29sZWFuXG4gIH07XG4gIHN0YXRzOiB7XG4gICAgLy8gd2FzIGxhc3QgcGllY2UgZHJhZ2dlZCBvciBjbGlja2VkP1xuICAgIC8vIG5lZWRzIGRlZmF1bHQgdG8gZmFsc2UgZm9yIHRvdWNoXG4gICAgZHJhZ2dlZDogYm9vbGVhbixcbiAgICBjdHJsS2V5PzogYm9vbGVhblxuICB9O1xuICBldmVudHM6IHtcbiAgICBjaGFuZ2U/OiAoKSA9PiB2b2lkOyAvLyBjYWxsZWQgYWZ0ZXIgdGhlIHNpdHVhdGlvbiBjaGFuZ2VzIG9uIHRoZSBib2FyZFxuICAgIC8vIGNhbGxlZCBhZnRlciBhIHBpZWNlIGhhcyBiZWVuIG1vdmVkLlxuICAgIC8vIGNhcHR1cmVkUGllY2UgaXMgdW5kZWZpbmVkIG9yIGxpa2Uge2NvbG9yOiAnd2hpdGUnOyAncm9sZSc6ICdxdWVlbid9XG4gICAgbW92ZT86IChvcmlnOiBjZy5LZXksIGRlc3Q6IGNnLktleSwgY2FwdHVyZWRQaWVjZT86IGNnLlBpZWNlKSA9PiB2b2lkO1xuICAgIGRyb3BOZXdQaWVjZT86IChwaWVjZTogY2cuUGllY2UsIGtleTogY2cuS2V5KSA9PiB2b2lkO1xuICAgIHNlbGVjdD86IChrZXk6IGNnLktleSkgPT4gdm9pZCAvLyBjYWxsZWQgd2hlbiBhIHNxdWFyZSBpcyBzZWxlY3RlZFxuICAgIGluc2VydD86IChlbGVtZW50czogY2cuRWxlbWVudHMpID0+IHZvaWQ7IC8vIHdoZW4gdGhlIGJvYXJkIERPTSBoYXMgYmVlbiAocmUpaW5zZXJ0ZWRcbiAgfTtcbiAgZHJhd2FibGU6IERyYXdhYmxlLFxuICBleHBsb2Rpbmc/OiBjZy5FeHBsb2Rpbmc7XG4gIGRvbTogY2cuRG9tLFxuICBob2xkOiBjZy5UaW1lcixcbiAgZGltZW5zaW9uczogY2cuQm9hcmREaW1lbnNpb25zLCAvLyBudW1iZXIgb2YgbGluZXMgYW5kIHJhbmtzIG9mIHRoZSBib2FyZCB7d2lkdGg6IDEwLCBoZWlnaHQ6IDh9XG4gIGdlb21ldHJ5OiBjZy5HZW9tZXRyeSwgLy8gZGltOHg4IHwgZGltOXg5IHwgZGltMTB4OCB8IGRpbTl4MTBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRzKCk6IFBhcnRpYWw8U3RhdGU+IHtcbiAgcmV0dXJuIHtcbiAgICBwaWVjZXM6IGZlbi5yZWFkKGZlbi5pbml0aWFsLCBjZy5HZW9tZXRyeS5kaW04eDgpLFxuICAgIG9yaWVudGF0aW9uOiAnd2hpdGUnLFxuICAgIHR1cm5Db2xvcjogJ3doaXRlJyxcbiAgICBjb29yZGluYXRlczogdHJ1ZSxcbiAgICBhdXRvQ2FzdGxlOiB0cnVlLFxuICAgIHZpZXdPbmx5OiBmYWxzZSxcbiAgICBkaXNhYmxlQ29udGV4dE1lbnU6IGZhbHNlLFxuICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICBhZGRQaWVjZVpJbmRleDogZmFsc2UsXG4gICAgcGllY2VLZXk6IGZhbHNlLFxuICAgIGhpZ2hsaWdodDoge1xuICAgICAgbGFzdE1vdmU6IHRydWUsXG4gICAgICBjaGVjazogdHJ1ZVxuICAgIH0sXG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgZHVyYXRpb246IDIwMFxuICAgIH0sXG4gICAgbW92YWJsZToge1xuICAgICAgZnJlZTogdHJ1ZSxcbiAgICAgIGNvbG9yOiAnYm90aCcsXG4gICAgICBzaG93RGVzdHM6IHRydWUsXG4gICAgICBldmVudHM6IHt9LFxuICAgICAgcm9va0Nhc3RsZTogdHJ1ZVxuICAgIH0sXG4gICAgcHJlbW92YWJsZToge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIHNob3dEZXN0czogdHJ1ZSxcbiAgICAgIGNhc3RsZTogdHJ1ZSxcbiAgICAgIGV2ZW50czoge31cbiAgICB9LFxuICAgIHByZWRyb3BwYWJsZToge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBldmVudHM6IHt9XG4gICAgfSxcbiAgICBkcmFnZ2FibGU6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBkaXN0YW5jZTogMyxcbiAgICAgIGF1dG9EaXN0YW5jZTogdHJ1ZSxcbiAgICAgIGNlbnRlclBpZWNlOiB0cnVlLFxuICAgICAgc2hvd0dob3N0OiB0cnVlLFxuICAgICAgZGVsZXRlT25Ecm9wT2ZmOiBmYWxzZVxuICAgIH0sXG4gICAgZHJvcG1vZGU6IHtcbiAgICAgIGFjdGl2ZTogZmFsc2VcbiAgICB9LFxuICAgIHNlbGVjdGFibGU6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICB9LFxuICAgIHN0YXRzOiB7XG4gICAgICAvLyBvbiB0b3VjaHNjcmVlbiwgZGVmYXVsdCB0byBcInRhcC10YXBcIiBtb3Zlc1xuICAgICAgLy8gaW5zdGVhZCBvZiBkcmFnXG4gICAgICBkcmFnZ2VkOiAhKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdylcbiAgICB9LFxuICAgIGV2ZW50czoge30sXG4gICAgZHJhd2FibGU6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsIC8vIGNhbiBkcmF3XG4gICAgICB2aXNpYmxlOiB0cnVlLCAvLyBjYW4gdmlld1xuICAgICAgZXJhc2VPbkNsaWNrOiB0cnVlLFxuICAgICAgc2hhcGVzOiBbXSxcbiAgICAgIGF1dG9TaGFwZXM6IFtdLFxuICAgICAgYnJ1c2hlczoge1xuICAgICAgICBncmVlbjogeyBrZXk6ICdnJywgY29sb3I6ICcjMTU3ODFCJywgb3BhY2l0eTogMSwgbGluZVdpZHRoOiAxMCB9LFxuICAgICAgICByZWQ6IHsga2V5OiAncicsIGNvbG9yOiAnIzg4MjAyMCcsIG9wYWNpdHk6IDEsIGxpbmVXaWR0aDogMTAgfSxcbiAgICAgICAgYmx1ZTogeyBrZXk6ICdiJywgY29sb3I6ICcjMDAzMDg4Jywgb3BhY2l0eTogMSwgbGluZVdpZHRoOiAxMCB9LFxuICAgICAgICB5ZWxsb3c6IHsga2V5OiAneScsIGNvbG9yOiAnI2U2OGYwMCcsIG9wYWNpdHk6IDEsIGxpbmVXaWR0aDogMTAgfSxcbiAgICAgICAgcGFsZUJsdWU6IHsga2V5OiAncGInLCBjb2xvcjogJyMwMDMwODgnLCBvcGFjaXR5OiAwLjQsIGxpbmVXaWR0aDogMTUgfSxcbiAgICAgICAgcGFsZUdyZWVuOiB7IGtleTogJ3BnJywgY29sb3I6ICcjMTU3ODFCJywgb3BhY2l0eTogMC40LCBsaW5lV2lkdGg6IDE1IH0sXG4gICAgICAgIHBhbGVSZWQ6IHsga2V5OiAncHInLCBjb2xvcjogJyM4ODIwMjAnLCBvcGFjaXR5OiAwLjQsIGxpbmVXaWR0aDogMTUgfSxcbiAgICAgICAgcGFsZUdyZXk6IHsga2V5OiAncGdyJywgY29sb3I6ICcjNGE0YTRhJywgb3BhY2l0eTogMC4zNSwgbGluZVdpZHRoOiAxNSB9XG4gICAgICB9LFxuICAgICAgcGllY2VzOiB7XG4gICAgICAgIGJhc2VVcmw6ICdodHRwczovL2xpY2hlc3MxLm9yZy9hc3NldHMvcGllY2UvY2J1cm5ldHQvJ1xuICAgICAgfSxcbiAgICAgIHByZXZTdmdIYXNoOiAnJ1xuICAgIH0sXG4gICAgaG9sZDogdGltZXIoKSxcbiAgICBkaW1lbnNpb25zOiB7d2lkdGg6IDgsIGhlaWdodDogOH0sXG4gICAgZ2VvbWV0cnk6IGNnLkdlb21ldHJ5LmRpbTh4OCxcbiAgfTtcbn1cbiIsImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCB7IGtleTJwb3MgfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgeyBEcmF3YWJsZSwgRHJhd1NoYXBlLCBEcmF3U2hhcGVQaWVjZSwgRHJhd0JydXNoLCBEcmF3QnJ1c2hlcywgRHJhd01vZGlmaWVycyB9IGZyb20gJy4vZHJhdydcbmltcG9ydCAqIGFzIGNnIGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWU6IHN0cmluZyk6IFNWR0VsZW1lbnQge1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsIHRhZ05hbWUpO1xufVxuXG5pbnRlcmZhY2UgU2hhcGUge1xuICBzaGFwZTogRHJhd1NoYXBlO1xuICBjdXJyZW50OiBib29sZWFuO1xuICBoYXNoOiBIYXNoO1xufVxuXG5pbnRlcmZhY2UgQ3VzdG9tQnJ1c2hlcyB7XG4gIFtoYXNoOiBzdHJpbmddOiBEcmF3QnJ1c2hcbn1cblxuaW50ZXJmYWNlIEFycm93RGVzdHMge1xuICBba2V5OiBzdHJpbmddOiBudW1iZXI7IC8vIGhvdyBtYW55IGFycm93cyBsYW5kIG9uIGEgc3F1YXJlXG59XG5cbnR5cGUgSGFzaCA9IHN0cmluZztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclN2ZyhzdGF0ZTogU3RhdGUsIHJvb3Q6IFNWR0VsZW1lbnQpOiB2b2lkIHtcblxuICBjb25zdCBkID0gc3RhdGUuZHJhd2FibGUsXG4gIGN1ckQgPSBkLmN1cnJlbnQsXG4gIGN1ciA9IGN1ckQgJiYgY3VyRC5tb3VzZVNxID8gY3VyRCBhcyBEcmF3U2hhcGUgOiB1bmRlZmluZWQsXG4gIGFycm93RGVzdHM6IEFycm93RGVzdHMgPSB7fTtcblxuICBkLnNoYXBlcy5jb25jYXQoZC5hdXRvU2hhcGVzKS5jb25jYXQoY3VyID8gW2N1cl0gOiBbXSkuZm9yRWFjaChzID0+IHtcbiAgICBpZiAocy5kZXN0KSBhcnJvd0Rlc3RzW3MuZGVzdF0gPSAoYXJyb3dEZXN0c1tzLmRlc3RdIHx8IDApICsgMTtcbiAgfSk7XG5cbiAgY29uc3Qgc2hhcGVzOiBTaGFwZVtdID0gZC5zaGFwZXMuY29uY2F0KGQuYXV0b1NoYXBlcykubWFwKChzOiBEcmF3U2hhcGUpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hhcGU6IHMsXG4gICAgICBjdXJyZW50OiBmYWxzZSxcbiAgICAgIGhhc2g6IHNoYXBlSGFzaChzLCBhcnJvd0Rlc3RzLCBmYWxzZSlcbiAgICB9O1xuICB9KTtcbiAgaWYgKGN1cikgc2hhcGVzLnB1c2goe1xuICAgIHNoYXBlOiBjdXIsXG4gICAgY3VycmVudDogdHJ1ZSxcbiAgICBoYXNoOiBzaGFwZUhhc2goY3VyLCBhcnJvd0Rlc3RzLCB0cnVlKVxuICB9KTtcblxuICBjb25zdCBmdWxsSGFzaCA9IHNoYXBlcy5tYXAoc2MgPT4gc2MuaGFzaCkuam9pbignJyk7XG4gIGlmIChmdWxsSGFzaCA9PT0gc3RhdGUuZHJhd2FibGUucHJldlN2Z0hhc2gpIHJldHVybjtcbiAgc3RhdGUuZHJhd2FibGUucHJldlN2Z0hhc2ggPSBmdWxsSGFzaDtcblxuICBjb25zdCBkZWZzRWwgPSByb290LmZpcnN0Q2hpbGQgYXMgU1ZHRWxlbWVudDtcblxuICBzeW5jRGVmcyhkLCBzaGFwZXMsIGRlZnNFbCk7XG4gIHN5bmNTaGFwZXMoc3RhdGUsIHNoYXBlcywgZC5icnVzaGVzLCBhcnJvd0Rlc3RzLCByb290LCBkZWZzRWwpO1xufVxuXG4vLyBhcHBlbmQgb25seS4gRG9uJ3QgdHJ5IHRvIHVwZGF0ZS9yZW1vdmUuXG5mdW5jdGlvbiBzeW5jRGVmcyhkOiBEcmF3YWJsZSwgc2hhcGVzOiBTaGFwZVtdLCBkZWZzRWw6IFNWR0VsZW1lbnQpIHtcbiAgY29uc3QgYnJ1c2hlczogQ3VzdG9tQnJ1c2hlcyA9IHt9O1xuICBsZXQgYnJ1c2g6IERyYXdCcnVzaDtcbiAgc2hhcGVzLmZvckVhY2gocyA9PiB7XG4gICAgaWYgKHMuc2hhcGUuZGVzdCkge1xuICAgICAgYnJ1c2ggPSBkLmJydXNoZXNbcy5zaGFwZS5icnVzaF07XG4gICAgICBpZiAocy5zaGFwZS5tb2RpZmllcnMpIGJydXNoID0gbWFrZUN1c3RvbUJydXNoKGJydXNoLCBzLnNoYXBlLm1vZGlmaWVycyk7XG4gICAgICBicnVzaGVzW2JydXNoLmtleV0gPSBicnVzaDtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBrZXlzSW5Eb206IHtba2V5OiBzdHJpbmddOiBib29sZWFufSA9IHt9O1xuICBsZXQgZWw6IFNWR0VsZW1lbnQgPSBkZWZzRWwuZmlyc3RDaGlsZCBhcyBTVkdFbGVtZW50O1xuICB3aGlsZShlbCkge1xuICAgIGtleXNJbkRvbVtlbC5nZXRBdHRyaWJ1dGUoJ2NnS2V5JykgYXMgc3RyaW5nXSA9IHRydWU7XG4gICAgZWwgPSBlbC5uZXh0U2libGluZyBhcyBTVkdFbGVtZW50O1xuICB9XG4gIGZvciAobGV0IGtleSBpbiBicnVzaGVzKSB7XG4gICAgaWYgKCFrZXlzSW5Eb21ba2V5XSkgZGVmc0VsLmFwcGVuZENoaWxkKHJlbmRlck1hcmtlcihicnVzaGVzW2tleV0pKTtcbiAgfVxufVxuXG4vLyBhcHBlbmQgYW5kIHJlbW92ZSBvbmx5LiBObyB1cGRhdGVzLlxuZnVuY3Rpb24gc3luY1NoYXBlcyhzdGF0ZTogU3RhdGUsIHNoYXBlczogU2hhcGVbXSwgYnJ1c2hlczogRHJhd0JydXNoZXMsIGFycm93RGVzdHM6IEFycm93RGVzdHMsIHJvb3Q6IFNWR0VsZW1lbnQsIGRlZnNFbDogU1ZHRWxlbWVudCk6IHZvaWQge1xuICBjb25zdCBib3VuZHMgPSBzdGF0ZS5kb20uYm91bmRzKCksXG4gIGhhc2hlc0luRG9tOiB7W2hhc2g6IHN0cmluZ106IGJvb2xlYW59ID0ge30sXG4gIHRvUmVtb3ZlOiBTVkdFbGVtZW50W10gPSBbXTtcbiAgc2hhcGVzLmZvckVhY2goc2MgPT4geyBoYXNoZXNJbkRvbVtzYy5oYXNoXSA9IGZhbHNlOyB9KTtcbiAgbGV0IGVsOiBTVkdFbGVtZW50ID0gZGVmc0VsLm5leHRTaWJsaW5nIGFzIFNWR0VsZW1lbnQsIGVsSGFzaDogSGFzaDtcbiAgd2hpbGUoZWwpIHtcbiAgICBlbEhhc2ggPSBlbC5nZXRBdHRyaWJ1dGUoJ2NnSGFzaCcpIGFzIEhhc2g7XG4gICAgLy8gZm91bmQgYSBzaGFwZSBlbGVtZW50IHRoYXQncyBoZXJlIHRvIHN0YXlcbiAgICBpZiAoaGFzaGVzSW5Eb20uaGFzT3duUHJvcGVydHkoZWxIYXNoKSkgaGFzaGVzSW5Eb21bZWxIYXNoXSA9IHRydWU7XG4gICAgLy8gb3IgcmVtb3ZlIGl0XG4gICAgZWxzZSB0b1JlbW92ZS5wdXNoKGVsKTtcbiAgICBlbCA9IGVsLm5leHRTaWJsaW5nIGFzIFNWR0VsZW1lbnQ7XG4gIH1cbiAgLy8gcmVtb3ZlIG9sZCBzaGFwZXNcbiAgdG9SZW1vdmUuZm9yRWFjaChlbCA9PiByb290LnJlbW92ZUNoaWxkKGVsKSk7XG4gIC8vIGluc2VydCBzaGFwZXMgdGhhdCBhcmUgbm90IHlldCBpbiBkb21cbiAgc2hhcGVzLmZvckVhY2goc2MgPT4ge1xuICAgIGlmICghaGFzaGVzSW5Eb21bc2MuaGFzaF0pIHJvb3QuYXBwZW5kQ2hpbGQocmVuZGVyU2hhcGUoc3RhdGUsIHNjLCBicnVzaGVzLCBhcnJvd0Rlc3RzLCBib3VuZHMpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNoYXBlSGFzaCh7b3JpZywgZGVzdCwgYnJ1c2gsIHBpZWNlLCBtb2RpZmllcnN9OiBEcmF3U2hhcGUsIGFycm93RGVzdHM6IEFycm93RGVzdHMsIGN1cnJlbnQ6IGJvb2xlYW4pOiBIYXNoIHtcbiAgcmV0dXJuIFtjdXJyZW50LCBvcmlnLCBkZXN0LCBicnVzaCwgZGVzdCAmJiBhcnJvd0Rlc3RzW2Rlc3RdID4gMSxcbiAgICBwaWVjZSAmJiBwaWVjZUhhc2gocGllY2UpLFxuICAgIG1vZGlmaWVycyAmJiBtb2RpZmllcnNIYXNoKG1vZGlmaWVycylcbiAgXS5maWx0ZXIoeCA9PiB4KS5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gcGllY2VIYXNoKHBpZWNlOiBEcmF3U2hhcGVQaWVjZSk6IEhhc2gge1xuICByZXR1cm4gW3BpZWNlLmNvbG9yLCBwaWVjZS5yb2xlLCBwaWVjZS5zY2FsZV0uZmlsdGVyKHggPT4geCkuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIG1vZGlmaWVyc0hhc2gobTogRHJhd01vZGlmaWVycyk6IEhhc2gge1xuICByZXR1cm4gJycgKyAobS5saW5lV2lkdGggfHwgJycpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTaGFwZShzdGF0ZTogU3RhdGUsIHtzaGFwZSwgY3VycmVudCwgaGFzaH06IFNoYXBlLCBicnVzaGVzOiBEcmF3QnJ1c2hlcywgYXJyb3dEZXN0czogQXJyb3dEZXN0cywgYm91bmRzOiBDbGllbnRSZWN0KTogU1ZHRWxlbWVudCB7XG4gIGNvbnN0IGZpcnN0UmFua0lzMCA9IHN0YXRlLmRpbWVuc2lvbnMuaGVpZ2h0ID09PSAxMDtcbiAgbGV0IGVsOiBTVkdFbGVtZW50O1xuICBpZiAoc2hhcGUucGllY2UpIGVsID0gcmVuZGVyUGllY2UoXG4gICAgc3RhdGUuZHJhd2FibGUucGllY2VzLmJhc2VVcmwsXG4gICAgb3JpZW50KGtleTJwb3Moc2hhcGUub3JpZywgZmlyc3RSYW5rSXMwKSwgc3RhdGUub3JpZW50YXRpb24sIHN0YXRlLmRpbWVuc2lvbnMpLFxuICAgIHNoYXBlLnBpZWNlLFxuICAgIGJvdW5kcyxcbiAgICBzdGF0ZS5kaW1lbnNpb25zKTtcbiAgZWxzZSB7XG4gICAgY29uc3Qgb3JpZyA9IG9yaWVudChrZXkycG9zKHNoYXBlLm9yaWcsIGZpcnN0UmFua0lzMCksIHN0YXRlLm9yaWVudGF0aW9uLCBzdGF0ZS5kaW1lbnNpb25zKTtcbiAgICBpZiAoc2hhcGUub3JpZyAmJiBzaGFwZS5kZXN0KSB7XG4gICAgICBsZXQgYnJ1c2g6IERyYXdCcnVzaCA9IGJydXNoZXNbc2hhcGUuYnJ1c2hdO1xuICAgICAgaWYgKHNoYXBlLm1vZGlmaWVycykgYnJ1c2ggPSBtYWtlQ3VzdG9tQnJ1c2goYnJ1c2gsIHNoYXBlLm1vZGlmaWVycyk7XG4gICAgICBlbCA9IHJlbmRlckFycm93KFxuICAgICAgICBicnVzaCxcbiAgICAgICAgb3JpZyxcbiAgICAgICAgb3JpZW50KGtleTJwb3Moc2hhcGUuZGVzdCwgZmlyc3RSYW5rSXMwKSwgc3RhdGUub3JpZW50YXRpb24sIHN0YXRlLmRpbWVuc2lvbnMpLFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICBhcnJvd0Rlc3RzW3NoYXBlLmRlc3RdID4gMSxcbiAgICAgICAgYm91bmRzLFxuICAgICAgICBzdGF0ZS5kaW1lbnNpb25zKTtcbiAgICB9XG4gICAgZWxzZSBlbCA9IHJlbmRlckNpcmNsZShicnVzaGVzW3NoYXBlLmJydXNoXSwgb3JpZywgY3VycmVudCwgYm91bmRzLCBzdGF0ZS5kaW1lbnNpb25zKTtcbiAgfVxuICBlbC5zZXRBdHRyaWJ1dGUoJ2NnSGFzaCcsIGhhc2gpO1xuICByZXR1cm4gZWw7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNpcmNsZShicnVzaDogRHJhd0JydXNoLCBwb3M6IGNnLlBvcywgY3VycmVudDogYm9vbGVhbiwgYm91bmRzOiBDbGllbnRSZWN0LCBiZDogY2cuQm9hcmREaW1lbnNpb25zKTogU1ZHRWxlbWVudCB7XG4gIGNvbnN0IG8gPSBwb3MycHgocG9zLCBib3VuZHMsIGJkKSxcbiAgd2lkdGhzID0gY2lyY2xlV2lkdGgoYm91bmRzLCBiZCksXG4gIHJhZGl1cyA9IChib3VuZHMud2lkdGggLyBiZC53aWR0aCkgLyAyO1xuICByZXR1cm4gc2V0QXR0cmlidXRlcyhjcmVhdGVFbGVtZW50KCdjaXJjbGUnKSwge1xuICAgIHN0cm9rZTogYnJ1c2guY29sb3IsXG4gICAgJ3N0cm9rZS13aWR0aCc6IHdpZHRoc1tjdXJyZW50ID8gMCA6IDFdLFxuICAgIGZpbGw6ICdub25lJyxcbiAgICBvcGFjaXR5OiBvcGFjaXR5KGJydXNoLCBjdXJyZW50KSxcbiAgICBjeDogb1swXSxcbiAgICBjeTogb1sxXSxcbiAgICByOiByYWRpdXMgLSB3aWR0aHNbMV0gLyAyXG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW5kZXJBcnJvdyhicnVzaDogRHJhd0JydXNoLCBvcmlnOiBjZy5Qb3MsIGRlc3Q6IGNnLlBvcywgY3VycmVudDogYm9vbGVhbiwgc2hvcnRlbjogYm9vbGVhbiwgYm91bmRzOiBDbGllbnRSZWN0LCBiZDogY2cuQm9hcmREaW1lbnNpb25zKTogU1ZHRWxlbWVudCB7XG4gIGNvbnN0IG0gPSBhcnJvd01hcmdpbihib3VuZHMsIHNob3J0ZW4gJiYgIWN1cnJlbnQsIGJkKSxcbiAgYSA9IHBvczJweChvcmlnLCBib3VuZHMsIGJkKSxcbiAgYiA9IHBvczJweChkZXN0LCBib3VuZHMsIGJkKSxcbiAgZHggPSBiWzBdIC0gYVswXSxcbiAgZHkgPSBiWzFdIC0gYVsxXSxcbiAgYW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCksXG4gIHhvID0gTWF0aC5jb3MoYW5nbGUpICogbSxcbiAgeW8gPSBNYXRoLnNpbihhbmdsZSkgKiBtO1xuICByZXR1cm4gc2V0QXR0cmlidXRlcyhjcmVhdGVFbGVtZW50KCdsaW5lJyksIHtcbiAgICBzdHJva2U6IGJydXNoLmNvbG9yLFxuICAgICdzdHJva2Utd2lkdGgnOiBsaW5lV2lkdGgoYnJ1c2gsIGN1cnJlbnQsIGJvdW5kcywgYmQpLFxuICAgICdzdHJva2UtbGluZWNhcCc6ICdyb3VuZCcsXG4gICAgJ21hcmtlci1lbmQnOiAndXJsKCNhcnJvd2hlYWQtJyArIGJydXNoLmtleSArICcpJyxcbiAgICBvcGFjaXR5OiBvcGFjaXR5KGJydXNoLCBjdXJyZW50KSxcbiAgICB4MTogYVswXSxcbiAgICB5MTogYVsxXSxcbiAgICB4MjogYlswXSAtIHhvLFxuICAgIHkyOiBiWzFdIC0geW9cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclBpZWNlKGJhc2VVcmw6IHN0cmluZywgcG9zOiBjZy5Qb3MsIHBpZWNlOiBEcmF3U2hhcGVQaWVjZSwgYm91bmRzOiBDbGllbnRSZWN0LCBiZDogY2cuQm9hcmREaW1lbnNpb25zKTogU1ZHRWxlbWVudCB7XG4gIGNvbnN0IG8gPSBwb3MycHgocG9zLCBib3VuZHMsIGJkKSxcbiAgd2lkdGggPSBib3VuZHMud2lkdGggLyBiZC53aWR0aCAqIChwaWVjZS5zY2FsZSB8fCAxKSxcbiAgaGVpZ2h0ID0gYm91bmRzLndpZHRoIC8gYmQuaGVpZ2h0ICogKHBpZWNlLnNjYWxlIHx8IDEpLFxuICBuYW1lID0gcGllY2UuY29sb3JbMF0gKyAocGllY2Uucm9sZSA9PT0gJ2tuaWdodCcgPyAnbicgOiBwaWVjZS5yb2xlWzBdKS50b1VwcGVyQ2FzZSgpO1xuICByZXR1cm4gc2V0QXR0cmlidXRlcyhjcmVhdGVFbGVtZW50KCdpbWFnZScpLCB7XG4gICAgY2xhc3NOYW1lOiBgJHtwaWVjZS5yb2xlfSAke3BpZWNlLmNvbG9yfWAsXG4gICAgeDogb1swXSAtIHdpZHRoIC8gMixcbiAgICB5OiBvWzFdIC0gaGVpZ2h0IC8gMixcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgaHJlZjogYmFzZVVybCArIG5hbWUgKyAnLnN2ZydcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlck1hcmtlcihicnVzaDogRHJhd0JydXNoKTogU1ZHRWxlbWVudCB7XG4gIGNvbnN0IG1hcmtlciA9IHNldEF0dHJpYnV0ZXMoY3JlYXRlRWxlbWVudCgnbWFya2VyJyksIHtcbiAgICBpZDogJ2Fycm93aGVhZC0nICsgYnJ1c2gua2V5LFxuICAgIG9yaWVudDogJ2F1dG8nLFxuICAgIG1hcmtlcldpZHRoOiA0LFxuICAgIG1hcmtlckhlaWdodDogOCxcbiAgICByZWZYOiAyLjA1LFxuICAgIHJlZlk6IDIuMDFcbiAgfSk7XG4gIG1hcmtlci5hcHBlbmRDaGlsZChzZXRBdHRyaWJ1dGVzKGNyZWF0ZUVsZW1lbnQoJ3BhdGgnKSwge1xuICAgIGQ6ICdNMCwwIFY0IEwzLDIgWicsXG4gICAgZmlsbDogYnJ1c2guY29sb3JcbiAgfSkpO1xuICBtYXJrZXIuc2V0QXR0cmlidXRlKCdjZ0tleScsIGJydXNoLmtleSk7XG4gIHJldHVybiBtYXJrZXI7XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoZWw6IFNWR0VsZW1lbnQsIGF0dHJzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogU1ZHRWxlbWVudCB7XG4gIGZvciAobGV0IGtleSBpbiBhdHRycykgZWwuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XG4gIHJldHVybiBlbDtcbn1cblxuZnVuY3Rpb24gb3JpZW50KHBvczogY2cuUG9zLCBjb2xvcjogY2cuQ29sb3IsIGJkOiBjZy5Cb2FyZERpbWVuc2lvbnMpOiBjZy5Qb3Mge1xuICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwb3MgOiBbYmQud2lkdGggKyAxIC0gcG9zWzBdLCBiZC5oZWlnaHQgKyAxIC0gcG9zWzFdXTtcbn1cblxuZnVuY3Rpb24gbWFrZUN1c3RvbUJydXNoKGJhc2U6IERyYXdCcnVzaCwgbW9kaWZpZXJzOiBEcmF3TW9kaWZpZXJzKTogRHJhd0JydXNoIHtcbiAgY29uc3QgYnJ1c2g6IFBhcnRpYWw8RHJhd0JydXNoPiA9IHtcbiAgICBjb2xvcjogYmFzZS5jb2xvcixcbiAgICBvcGFjaXR5OiBNYXRoLnJvdW5kKGJhc2Uub3BhY2l0eSAqIDEwKSAvIDEwLFxuICAgIGxpbmVXaWR0aDogTWF0aC5yb3VuZChtb2RpZmllcnMubGluZVdpZHRoIHx8IGJhc2UubGluZVdpZHRoKVxuICB9O1xuICBicnVzaC5rZXkgPSBbYmFzZS5rZXksIG1vZGlmaWVycy5saW5lV2lkdGhdLmZpbHRlcih4ID0+IHgpLmpvaW4oJycpO1xuICByZXR1cm4gYnJ1c2ggYXMgRHJhd0JydXNoO1xufVxuXG5mdW5jdGlvbiBjaXJjbGVXaWR0aChib3VuZHM6IENsaWVudFJlY3QsIGJkOiBjZy5Cb2FyZERpbWVuc2lvbnMpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYmFzZSA9IGJvdW5kcy53aWR0aCAvIChiZC53aWR0aCAqIDY0KTtcbiAgcmV0dXJuIFszICogYmFzZSwgNCAqIGJhc2VdO1xufVxuXG5mdW5jdGlvbiBsaW5lV2lkdGgoYnJ1c2g6IERyYXdCcnVzaCwgY3VycmVudDogYm9vbGVhbiwgYm91bmRzOiBDbGllbnRSZWN0LCBiZDogY2cuQm9hcmREaW1lbnNpb25zKTogbnVtYmVyIHtcbiAgcmV0dXJuIChicnVzaC5saW5lV2lkdGggfHwgMTApICogKGN1cnJlbnQgPyAwLjg1IDogMSkgLyAoYmQud2lkdGggKiA2NCkgKiBib3VuZHMud2lkdGg7XG59XG5cbmZ1bmN0aW9uIG9wYWNpdHkoYnJ1c2g6IERyYXdCcnVzaCwgY3VycmVudDogYm9vbGVhbik6IG51bWJlciB7XG4gIHJldHVybiAoYnJ1c2gub3BhY2l0eSB8fCAxKSAqIChjdXJyZW50ID8gMC45IDogMSk7XG59XG5cbmZ1bmN0aW9uIGFycm93TWFyZ2luKGJvdW5kczogQ2xpZW50UmVjdCwgc2hvcnRlbjogYm9vbGVhbiwgYmQ6IGNnLkJvYXJkRGltZW5zaW9ucyk6IG51bWJlciB7XG4gIHJldHVybiAoc2hvcnRlbiA/IDIwIDogMTApIC8gKGJkLndpZHRoICogNjQpICogYm91bmRzLndpZHRoO1xufVxuXG5mdW5jdGlvbiBwb3MycHgocG9zOiBjZy5Qb3MsIGJvdW5kczogQ2xpZW50UmVjdCwgYmQ6IGNnLkJvYXJkRGltZW5zaW9ucyk6IGNnLk51bWJlclBhaXIge1xuICByZXR1cm4gWyhwb3NbMF0gLSAwLjUpICogYm91bmRzLndpZHRoIC8gYmQud2lkdGgsIChiZC5oZWlnaHQgKyAwLjUgLSBwb3NbMV0pICogYm91bmRzLmhlaWdodCAvIGJkLmhlaWdodF07XG59XG4iLCJleHBvcnQgdHlwZSBDb2xvciA9ICd3aGl0ZScgfCAnYmxhY2snO1xuZXhwb3J0IHR5cGUgUm9sZSA9ICdraW5nJyB8ICdxdWVlbicgfCAncm9vaycgfCAnYmlzaG9wJyB8ICdrbmlnaHQnIHwgJ3Bhd24nIHwgJ2NhbmNlbGxvcicgfCAnYXJjaGJpc2hvcCcgfCAnZmVyeicgfCAnbWV0JyB8ICdnb2xkJyB8ICdzaWx2ZXInIHwgJ2xhbmNlJ3wgJ3BwYXduJyB8ICdwa25pZ2h0JyB8ICdwYmlzaG9wJyB8ICdwcm9vaycgfCAncHNpbHZlcicgfCAncGxhbmNlJyB8ICdhZHZpc29yJyB8ICdjYW5ub24nIHwgJ2hhd2snIHwgJ2VsZXBoYW50JztcbmV4cG9ydCB0eXBlIEtleSA9ICAnejAnIHwgJ2EwJyB8ICdiMCcgfCAnYzAnIHwgJ2QwJyB8ICdlMCcgfCAnZjAnIHwgJ2cwJyB8ICdoMCcgfCAnaTAnIHwgJ2owJyB8ICdhMScgfCAnYjEnIHwgJ2MxJyB8ICdkMScgfCAnZTEnIHwgJ2YxJyB8ICdnMScgfCAnaDEnIHwgJ2kxJyB8ICdqMScgfCAnYTInIHwgJ2IyJyB8ICdjMicgfCAnZDInIHwgJ2UyJyB8ICdmMicgfCAnZzInIHwgJ2gyJyB8ICdpMicgfCAnajInIHwgJ2EzJyB8ICdiMycgfCAnYzMnIHwgJ2QzJyB8ICdlMycgfCAnZjMnIHwgJ2czJyB8ICdoMycgfCAnaTMnIHwgJ2ozJyB8ICdhNCcgfCAnYjQnIHwgJ2M0JyB8ICdkNCcgfCAnZTQnIHwgJ2Y0JyB8ICdnNCcgfCAnaDQnIHwgJ2k0JyB8ICdqNCcgfCAnYTUnIHwgJ2I1JyB8ICdjNScgfCAnZDUnIHwgJ2U1JyB8ICdmNScgfCAnZzUnIHwgJ2g1JyB8ICdpNScgfCAnajUnIHwgJ2E2JyB8ICdiNicgfCAnYzYnIHwgJ2Q2JyB8ICdlNicgfCAnZjYnIHwgJ2c2JyB8ICdoNicgfCAnaTYnIHwgJ2o2JyB8ICdhNycgfCAnYjcnIHwgJ2M3JyB8ICdkNycgfCAnZTcnIHwgJ2Y3JyB8ICdnNycgfCAnaDcnIHwgJ2k3JyB8ICdqNycgfCAnYTgnIHwgJ2I4JyB8ICdjOCcgfCAnZDgnIHwgJ2U4JyB8ICdmOCcgfCAnZzgnIHwgJ2g4JyB8ICdpOCcgfCAnajgnIHwgJ2E5JyB8ICdiOScgfCAnYzknIHwgJ2Q5JyB8ICdlOScgfCAnZjknIHwgJ2c5JyB8ICdoOScgfCAnaTknIHwgJ2o5JztcbmV4cG9ydCB0eXBlIEZpbGUgPSAnYScgfCAnYicgfCAnYycgfCAnZCcgfCAnZScgfCAnZicgfCAnZycgfCAnaCcgfCAnaScgfCAnaic7XG5leHBvcnQgdHlwZSBSYW5rID0gJzAnIHwgJzEnIHwgJzInIHwgJzMnIHwgJzQnIHwgJzUnIHwgJzYnIHwgJzcnIHwgJzgnIHwgJzknIHwgJzEwJztcbmV4cG9ydCB0eXBlIEZFTiA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFBvcyA9IFtudW1iZXIsIG51bWJlcl07XG5leHBvcnQgaW50ZXJmYWNlIFBpZWNlIHtcbiAgcm9sZTogUm9sZTtcbiAgY29sb3I6IENvbG9yO1xuICBwcm9tb3RlZD86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIERyb3Age1xuICByb2xlOiBSb2xlO1xuICBrZXk6IEtleTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGllY2VzIHtcbiAgW2tleTogc3RyaW5nXTogUGllY2UgfCB1bmRlZmluZWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIFBpZWNlc0RpZmYge1xuICBba2V5OiBzdHJpbmddOiBQaWVjZSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHR5cGUgS2V5UGFpciA9IFtLZXksIEtleV07XG5cbmV4cG9ydCB0eXBlIE51bWJlclBhaXIgPSBbbnVtYmVyLCBudW1iZXJdO1xuXG5leHBvcnQgdHlwZSBOdW1iZXJRdWFkID0gW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHMge1xuICBba2V5OiBzdHJpbmddOiBLZXlbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRzIHtcbiAgYm9hcmQ6IEhUTUxFbGVtZW50O1xuICBjb250YWluZXI6IEhUTUxFbGVtZW50O1xuICBnaG9zdD86IEhUTUxFbGVtZW50O1xuICBzdmc/OiBTVkdFbGVtZW50O1xufVxuZXhwb3J0IGludGVyZmFjZSBEb20ge1xuICBlbGVtZW50czogRWxlbWVudHMsXG4gIGJvdW5kczogTWVtbzxDbGllbnRSZWN0PjtcbiAgcmVkcmF3OiAoKSA9PiB2b2lkO1xuICByZWRyYXdOb3c6IChza2lwU3ZnPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgdW5iaW5kPzogVW5iaW5kO1xuICBkZXN0cm95ZWQ/OiBib29sZWFuO1xuICByZWxhdGl2ZT86IGJvb2xlYW47IC8vIGRvbid0IGNvbXB1dGUgYm91bmRzLCB1c2UgcmVsYXRpdmUgJSB0byBwbGFjZSBwaWVjZXNcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbG9kaW5nIHtcbiAgc3RhZ2U6IG51bWJlcjtcbiAga2V5czogS2V5W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW92ZU1ldGFkYXRhIHtcbiAgcHJlbW92ZTogYm9vbGVhbjtcbiAgY3RybEtleT86IGJvb2xlYW47XG4gIGhvbGRUaW1lPzogbnVtYmVyO1xuICBjYXB0dXJlZD86IFBpZWNlO1xuICBwcmVkcm9wPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2V0UHJlbW92ZU1ldGFkYXRhIHtcbiAgY3RybEtleT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFdpbmRvd0V2ZW50ID0gJ29uc2Nyb2xsJyB8ICdvbnJlc2l6ZSc7XG5cbmV4cG9ydCB0eXBlIE1vdWNoRXZlbnQgPSBNb3VzZUV2ZW50ICYgVG91Y2hFdmVudDtcblxuZXhwb3J0IGludGVyZmFjZSBLZXllZE5vZGUgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gIGNnS2V5OiBLZXk7XG59XG5leHBvcnQgaW50ZXJmYWNlIFBpZWNlTm9kZSBleHRlbmRzIEtleWVkTm9kZSB7XG4gIGNnUGllY2U6IHN0cmluZztcbiAgY2dBbmltYXRpbmc/OiBib29sZWFuO1xuICBjZ0ZhZGluZz86IGJvb2xlYW47XG4gIGNnRHJhZ2dpbmc/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBTcXVhcmVOb2RlIGV4dGVuZHMgS2V5ZWROb2RlIHsgfVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW88QT4geyAoKTogQTsgY2xlYXI6ICgpID0+IHZvaWQ7IH1cblxuZXhwb3J0IGludGVyZmFjZSBUaW1lciB7XG4gIHN0YXJ0OiAoKSA9PiB2b2lkO1xuICBjYW5jZWw6ICgpID0+IHZvaWQ7XG4gIHN0b3A6ICgpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgUmVkcmF3ID0gKCkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFVuYmluZCA9ICgpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBNaWxsaXNlY29uZHMgPSBudW1iZXI7XG5leHBvcnQgdHlwZSBLSHogPSBudW1iZXI7XG5cbmV4cG9ydCBjb25zdCBmaWxlczogRmlsZVtdID0gWydhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAnaScsICdqJ107XG5leHBvcnQgY29uc3QgcmFua3M6IFJhbmtbXSA9IFsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICcxMCddO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJvYXJkRGltZW5zaW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBHZW9tZXRyeSB7ZGltOHg4LCBkaW05eDksIGRpbTEweDgsIGRpbTl4MTAsIGRpbTEweDEwLCBkaW01eDV9O1xuXG5leHBvcnQgY29uc3QgZGltZW5zaW9uczogQm9hcmREaW1lbnNpb25zW10gPSBbe3dpZHRoOiA4LCBoZWlnaHQ6IDh9LCB7d2lkdGg6IDksIGhlaWdodDogOX0sIHt3aWR0aDogMTAsIGhlaWdodDogOH0sIHt3aWR0aDogOSwgaGVpZ2h0OiAxMH0sIHt3aWR0aDogMTAsIGhlaWdodDogMTB9LCB7d2lkdGg6IDUsIGhlaWdodDogNX1dO1xuIiwiaW1wb3J0ICogYXMgY2cgZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBjb2xvcnM6IGNnLkNvbG9yW10gPSBbJ3doaXRlJywgJ2JsYWNrJ107XG5cbmV4cG9ydCBjb25zdCBOUmFua3M6IG51bWJlcltdID0gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXTtcbmV4cG9ydCBjb25zdCBpbnZOUmFua3M6IG51bWJlcltdID0gWzEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxXTtcblxuY29uc3QgZmlsZXM1ID0gY2cuZmlsZXMuc2xpY2UoMCwgNSk7XG5jb25zdCBmaWxlczggPSBjZy5maWxlcy5zbGljZSgwLCA4KTtcbmNvbnN0IGZpbGVzOSA9IGNnLmZpbGVzLnNsaWNlKDAsIDkpO1xuY29uc3QgZmlsZXMxMCA9IGNnLmZpbGVzLnNsaWNlKDAsIDEwKTtcblxuY29uc3QgcmFua3M1ID0gY2cucmFua3Muc2xpY2UoMSwgNik7XG5jb25zdCByYW5rczggPSBjZy5yYW5rcy5zbGljZSgxLCA5KTtcbmNvbnN0IHJhbmtzOSA9IGNnLnJhbmtzLnNsaWNlKDEsIDEwKTtcbi8vIHdlIGhhdmUgdG8gY291bnQgcmFua3Mgc3RhcnRpbmcgZnJvbSAwIGFzIGluIFVDQ0lcbmNvbnN0IHJhbmtzMTAgPSBjZy5yYW5rcy5zbGljZSgwLCAxMCk7XG5cbmNvbnN0IGFsbEtleXM1eDU6IGNnLktleVtdID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5maWxlczUubWFwKGMgPT4gcmFua3M1Lm1hcChyID0+IGMrcikpKTtcbmNvbnN0IGFsbEtleXM4eDg6IGNnLktleVtdID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5maWxlczgubWFwKGMgPT4gcmFua3M4Lm1hcChyID0+IGMrcikpKTtcbmNvbnN0IGFsbEtleXM5eDk6IGNnLktleVtdID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5maWxlczkubWFwKGMgPT4gcmFua3M5Lm1hcChyID0+IGMrcikpKTtcbmNvbnN0IGFsbEtleXMxMHg4OiBjZy5LZXlbXSA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQoLi4uZmlsZXMxMC5tYXAoYyA9PiByYW5rczgubWFwKHIgPT4gYytyKSkpO1xuY29uc3QgYWxsS2V5czl4MTA6IGNnLktleVtdID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5maWxlczkubWFwKGMgPT4gcmFua3MxMC5tYXAociA9PiBjK3IpKSk7XG5jb25zdCBhbGxLZXlzMTB4MTA6IGNnLktleVtdID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5maWxlczEwLm1hcChjID0+IHJhbmtzMTAubWFwKHIgPT4gYytyKSkpO1xuXG5leHBvcnQgY29uc3QgYWxsS2V5cyA9IFthbGxLZXlzOHg4LCBhbGxLZXlzOXg5LCBhbGxLZXlzMTB4OCwgYWxsS2V5czl4MTAsIGFsbEtleXMxMHgxMCwgYWxsS2V5czV4NV07XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3Mya2V5KHBvczogY2cuUG9zLCBnZW9tOiBjZy5HZW9tZXRyeSkge1xuICAgIGNvbnN0IGJkID0gY2cuZGltZW5zaW9uc1tnZW9tXTtcbiAgICByZXR1cm4gYWxsS2V5c1tnZW9tXVtiZC5oZWlnaHQgKiBwb3NbMF0gKyBwb3NbMV0gLSBiZC5oZWlnaHQgLSAxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGtleTJwb3MoazogY2cuS2V5LCBmaXJzdFJhbmtJczA6IGJvb2xlYW4pIHtcbiAgY29uc3Qgc2hpZnQgPSBmaXJzdFJhbmtJczAgPyAxIDogMDtcbiAgcmV0dXJuIFtrLmNoYXJDb2RlQXQoMCkgLSA5Niwgay5jaGFyQ29kZUF0KDEpIC0gNDggKyBzaGlmdF0gYXMgY2cuUG9zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVtbzxBPihmOiAoKSA9PiBBKTogY2cuTWVtbzxBPiB7XG4gIGxldCB2OiBBIHwgdW5kZWZpbmVkO1xuICBjb25zdCByZXQ6IGFueSA9ICgpID0+IHtcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB2ID0gZigpO1xuICAgIHJldHVybiB2O1xuICB9O1xuICByZXQuY2xlYXIgPSAoKSA9PiB7IHYgPSB1bmRlZmluZWQgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGNvbnN0IHRpbWVyOiAoKSA9PiBjZy5UaW1lciA9ICgpID0+IHtcbiAgbGV0IHN0YXJ0QXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHtcbiAgICBzdGFydCgpIHsgc3RhcnRBdCA9IHBlcmZvcm1hbmNlLm5vdygpIH0sXG4gICAgY2FuY2VsKCkgeyBzdGFydEF0ID0gdW5kZWZpbmVkIH0sXG4gICAgc3RvcCgpIHtcbiAgICAgIGlmICghc3RhcnRBdCkgcmV0dXJuIDA7XG4gICAgICBjb25zdCB0aW1lID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydEF0O1xuICAgICAgc3RhcnRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB0aW1lO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IG9wcG9zaXRlID0gKGM6IGNnLkNvbG9yKSA9PiBjID09PSAnd2hpdGUnID8gJ2JsYWNrJyA6ICd3aGl0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc1g8WD4oeHM6IFhbXSB8IHVuZGVmaW5lZCwgeDogWCk6IGJvb2xlYW4ge1xuICByZXR1cm4geHMgIT09IHVuZGVmaW5lZCAmJiB4cy5pbmRleE9mKHgpICE9PSAtMTtcbn1cblxuZXhwb3J0IGNvbnN0IGRpc3RhbmNlU3E6IChwb3MxOiBjZy5Qb3MsIHBvczI6IGNnLlBvcykgPT4gbnVtYmVyID0gKHBvczEsIHBvczIpID0+IHtcbiAgcmV0dXJuIE1hdGgucG93KHBvczFbMF0gLSBwb3MyWzBdLCAyKSArIE1hdGgucG93KHBvczFbMV0gLSBwb3MyWzFdLCAyKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNhbWVQaWVjZTogKHAxOiBjZy5QaWVjZSwgcDI6IGNnLlBpZWNlKSA9PiBib29sZWFuID0gKHAxLCBwMikgPT5cbiAgcDEucm9sZSA9PT0gcDIucm9sZSAmJiBwMS5jb2xvciA9PT0gcDIuY29sb3I7XG5cbmNvbnN0IHBvc1RvVHJhbnNsYXRlQmFzZTogKHBvczogY2cuUG9zLCBhc1doaXRlOiBib29sZWFuLCB4RmFjdG9yOiBudW1iZXIsIHlGYWN0b3I6IG51bWJlciwgYnQ6IGNnLkJvYXJkRGltZW5zaW9ucykgPT4gY2cuTnVtYmVyUGFpciA9XG4ocG9zLCBhc1doaXRlLCB4RmFjdG9yLCB5RmFjdG9yLCBidCkgPT4gW1xuICAoYXNXaGl0ZSA/IHBvc1swXSAtIDEgOiBidC53aWR0aCAtIHBvc1swXSkgKiB4RmFjdG9yLFxuICAoYXNXaGl0ZSA/IGJ0LmhlaWdodCAtIHBvc1sxXSA6IHBvc1sxXSAtIDEpICogeUZhY3RvclxuXTtcblxuZXhwb3J0IGNvbnN0IHBvc1RvVHJhbnNsYXRlQWJzID0gKGJvdW5kczogQ2xpZW50UmVjdCwgYnQ6IGNnLkJvYXJkRGltZW5zaW9ucykgPT4ge1xuICBjb25zdCB4RmFjdG9yID0gYm91bmRzLndpZHRoIC8gYnQud2lkdGgsXG4gIHlGYWN0b3IgPSBib3VuZHMuaGVpZ2h0IC8gYnQuaGVpZ2h0O1xuICByZXR1cm4gKHBvczogY2cuUG9zLCBhc1doaXRlOiBib29sZWFuKSA9PiBwb3NUb1RyYW5zbGF0ZUJhc2UocG9zLCBhc1doaXRlLCB4RmFjdG9yLCB5RmFjdG9yLCBidCk7XG59O1xuXG5leHBvcnQgY29uc3QgcG9zVG9UcmFuc2xhdGVSZWw6IChwb3M6IGNnLlBvcywgYXNXaGl0ZTogYm9vbGVhbiwgYnQ6IGNnLkJvYXJkRGltZW5zaW9ucykgPT4gY2cuTnVtYmVyUGFpciA9XG4gIChwb3MsIGFzV2hpdGUsIGJ0KSA9PiBwb3NUb1RyYW5zbGF0ZUJhc2UocG9zLCBhc1doaXRlLCAxMDAgLyBidC53aWR0aCwgMTAwIC8gYnQuaGVpZ2h0LCBidCk7XG5cbmV4cG9ydCBjb25zdCB0cmFuc2xhdGVBYnMgPSAoZWw6IEhUTUxFbGVtZW50LCBwb3M6IGNnLlBvcykgPT4ge1xuICBlbC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7cG9zWzBdfXB4LCR7cG9zWzFdfXB4KWA7XG59XG5cbmV4cG9ydCBjb25zdCB0cmFuc2xhdGVSZWwgPSAoZWw6IEhUTUxFbGVtZW50LCBwZXJjZW50czogY2cuTnVtYmVyUGFpcikgPT4ge1xuICBlbC5zdHlsZS5sZWZ0ID0gcGVyY2VudHNbMF0gKyAnJSc7XG4gIGVsLnN0eWxlLnRvcCA9IHBlcmNlbnRzWzFdICsgJyUnO1xufVxuXG5leHBvcnQgY29uc3Qgc2V0VmlzaWJsZSA9IChlbDogSFRNTEVsZW1lbnQsIHY6IGJvb2xlYW4pID0+IHtcbiAgZWwuc3R5bGUudmlzaWJpbGl0eSA9IHYgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcbn1cblxuLy8gdG91Y2hlbmQgaGFzIG5vIHBvc2l0aW9uIVxuZXhwb3J0IGNvbnN0IGV2ZW50UG9zaXRpb246IChlOiBjZy5Nb3VjaEV2ZW50KSA9PiBjZy5OdW1iZXJQYWlyIHwgdW5kZWZpbmVkID0gZSA9PiB7XG4gIGlmIChlLmNsaWVudFggfHwgZS5jbGllbnRYID09PSAwKSByZXR1cm4gW2UuY2xpZW50WCwgZS5jbGllbnRZXTtcbiAgaWYgKGUudG91Y2hlcyAmJiBlLnRhcmdldFRvdWNoZXNbMF0pIHJldHVybiBbZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFgsIGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZXTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNvbnN0IGlzUmlnaHRCdXR0b24gPSAoZTogTW91c2VFdmVudCkgPT4gZS5idXR0b25zID09PSAyIHx8IGUuYnV0dG9uID09PSAyO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRWwgPSAodGFnTmFtZTogc3RyaW5nLCBjbGFzc05hbWU/OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAoY2xhc3NOYW1lKSBlbC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gIHJldHVybiBlbDtcbn1cbiIsImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCB7IGNvbG9ycywgc2V0VmlzaWJsZSwgY3JlYXRlRWwgfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgeyBmaWxlcywgcmFua3MgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCBhcyBjcmVhdGVTVkcgfSBmcm9tICcuL3N2ZydcbmltcG9ydCB7IEVsZW1lbnRzLCBHZW9tZXRyeSB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdyYXAoZWxlbWVudDogSFRNTEVsZW1lbnQsIHM6IFN0YXRlLCByZWxhdGl2ZTogYm9vbGVhbik6IEVsZW1lbnRzIHtcblxuICAvLyAuY2ctd3JhcCAoZWxlbWVudCBwYXNzZWQgdG8gQ2hlc3Nncm91bmQpXG4gIC8vICAgY2ctaGVscGVyICgxMi41JSlcbiAgLy8gICAgIGNnLWNvbnRhaW5lciAoODAwJSlcbiAgLy8gICAgICAgY2ctYm9hcmRcbiAgLy8gICAgICAgc3ZnXG4gIC8vICAgICAgIGNvb3Jkcy5yYW5rc1xuICAvLyAgICAgICBjb29yZHMuZmlsZXNcbiAgLy8gICAgICAgcGllY2UuZ2hvc3RcblxuICBlbGVtZW50LmlubmVySFRNTCA9ICcnO1xuXG4gIC8vIGVuc3VyZSB0aGUgY2ctd3JhcCBjbGFzcyBpcyBzZXRcbiAgLy8gc28gYm91bmRzIGNhbGN1bGF0aW9uIGNhbiB1c2UgdGhlIENTUyB3aWR0aC9oZWlnaHQgdmFsdWVzXG4gIC8vIGFkZCB0aGF0IGNsYXNzIHlvdXJzZWxmIHRvIHRoZSBlbGVtZW50IGJlZm9yZSBjYWxsaW5nIGNoZXNzZ3JvdW5kXG4gIC8vIGZvciBhIHNsaWdodCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCEgKGF2b2lkcyByZWNvbXB1dGluZyBzdHlsZSlcbiAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjZy13cmFwJyk7XG5cbiAgY29sb3JzLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoJ29yaWVudGF0aW9uLScgKyBjLCBzLm9yaWVudGF0aW9uID09PSBjKSk7XG4gIGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnbWFuaXB1bGFibGUnLCAhcy52aWV3T25seSk7XG5cbiAgY29uc3QgaGVscGVyID0gY3JlYXRlRWwoJ2NnLWhlbHBlcicpO1xuICBlbGVtZW50LmFwcGVuZENoaWxkKGhlbHBlcik7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGNyZWF0ZUVsKCdjZy1jb250YWluZXInKTtcbiAgaGVscGVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cbiAgY29uc3QgZXh0ZW5zaW9uID0gY3JlYXRlRWwoJ2V4dGVuc2lvbicpO1xuICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZXh0ZW5zaW9uKTtcbiAgY29uc3QgYm9hcmQgPSBjcmVhdGVFbCgnY2ctYm9hcmQnKTtcbiAgY29udGFpbmVyLmFwcGVuZENoaWxkKGJvYXJkKTtcblxuICBsZXQgc3ZnOiBTVkdFbGVtZW50IHwgdW5kZWZpbmVkO1xuICBpZiAocy5kcmF3YWJsZS52aXNpYmxlICYmICFyZWxhdGl2ZSkge1xuICAgIHN2ZyA9IGNyZWF0ZVNWRygnc3ZnJyk7XG4gICAgc3ZnLmFwcGVuZENoaWxkKGNyZWF0ZVNWRygnZGVmcycpKTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc3ZnKTtcbiAgfVxuXG4gIGlmIChzLmNvb3JkaW5hdGVzKSB7XG4gICAgY29uc3Qgb3JpZW50Q2xhc3MgPSBzLm9yaWVudGF0aW9uID09PSAnYmxhY2snID8gJyBibGFjaycgOiAnJztcbiAgICBjb25zdCBmaXJzdFJhbmtJczAgPSBzLmdlb21ldHJ5ID09PSBHZW9tZXRyeS5kaW05eDEwO1xuICAgIGNvbnN0IHNoaWZ0ID0gZmlyc3RSYW5rSXMwID8gMCA6IDE7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHJlbmRlckNvb3JkcyhyYW5rcy5zbGljZShzaGlmdCwgcy5kaW1lbnNpb25zLmhlaWdodCArIHNoaWZ0KSwgJ3JhbmtzJyArIG9yaWVudENsYXNzKSk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHJlbmRlckNvb3JkcyhmaWxlcy5zbGljZSgwLCBzLmRpbWVuc2lvbnMud2lkdGgpLCAnZmlsZXMnICsgb3JpZW50Q2xhc3MpKTtcbiAgfVxuXG4gIGxldCBnaG9zdDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gIGlmIChzLmRyYWdnYWJsZS5zaG93R2hvc3QgJiYgIXJlbGF0aXZlKSB7XG4gICAgZ2hvc3QgPSBjcmVhdGVFbCgncGllY2UnLCAnZ2hvc3QnKTtcbiAgICBzZXRWaXNpYmxlKGdob3N0LCBmYWxzZSk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGdob3N0KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYm9hcmQsXG4gICAgY29udGFpbmVyLFxuICAgIGdob3N0LFxuICAgIHN2Z1xuICB9O1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb29yZHMoZWxlbXM6IGFueVtdLCBjbGFzc05hbWU6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgY29uc3QgZWwgPSBjcmVhdGVFbCgnY29vcmRzJywgY2xhc3NOYW1lKTtcbiAgbGV0IGY6IEhUTUxFbGVtZW50O1xuICBmb3IgKGxldCBpIGluIGVsZW1zKSB7XG4gICAgZiA9IGNyZWF0ZUVsKCdjb29yZCcpO1xuICAgIGYudGV4dENvbnRlbnQgPSBlbGVtc1tpXTtcbiAgICBlbC5hcHBlbmRDaGlsZChmKTtcbiAgfVxuICByZXR1cm4gZWw7XG59XG4iLCIvKlxuIEhpZ2hjaGFydHMgSlMgdjcuMi4xICgyMDE5LTEwLTMxKVxuXG4gKGMpIDIwMDktMjAxOCBUb3JzdGVpbiBIb25zaVxuXG4gTGljZW5zZTogd3d3LmhpZ2hjaGFydHMuY29tL2xpY2Vuc2VcbiovXG4oZnVuY3Rpb24oUCxNKXtcIm9iamVjdFwiPT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/KE1bXCJkZWZhdWx0XCJdPU0sbW9kdWxlLmV4cG9ydHM9UC5kb2N1bWVudD9NKFApOk0pOlwiZnVuY3Rpb25cIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFwiaGlnaGNoYXJ0cy9oaWdoY2hhcnRzXCIsZnVuY3Rpb24oKXtyZXR1cm4gTShQKX0pOihQLkhpZ2hjaGFydHMmJlAuSGlnaGNoYXJ0cy5lcnJvcigxNiwhMCksUC5IaWdoY2hhcnRzPU0oUCkpfSkoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oUCl7ZnVuY3Rpb24gTShjLGYsRixHKXtjLmhhc093blByb3BlcnR5KGYpfHwoY1tmXT1HLmFwcGx5KG51bGwsRikpfXZhciBJPXt9O00oSSxcInBhcnRzL0dsb2JhbHMuanNcIixbXSxmdW5jdGlvbigpe3ZhciBjPVwidW5kZWZpbmVkXCIhPT10eXBlb2YgUD9QOlwidW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxmPWMuZG9jdW1lbnQsXG5GPWMubmF2aWdhdG9yJiZjLm5hdmlnYXRvci51c2VyQWdlbnR8fFwiXCIsRz1mJiZmLmNyZWF0ZUVsZW1lbnROUyYmISFmLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJzdmdcIikuY3JlYXRlU1ZHUmVjdCx6PS8oZWRnZXxtc2llfHRyaWRlbnQpL2kudGVzdChGKSYmIWMub3BlcmEsQj0tMSE9PUYuaW5kZXhPZihcIkZpcmVmb3hcIiksdD0tMSE9PUYuaW5kZXhPZihcIkNocm9tZVwiKSx2PUImJjQ+cGFyc2VJbnQoRi5zcGxpdChcIkZpcmVmb3gvXCIpWzFdLDEwKTtyZXR1cm57cHJvZHVjdDpcIkhpZ2hjaGFydHNcIix2ZXJzaW9uOlwiNy4yLjFcIixkZWcycmFkOjIqTWF0aC5QSS8zNjAsZG9jOmYsaGFzQmlkaUJ1Zzp2LGhhc1RvdWNoOiEhYy5Ub3VjaEV2ZW50LGlzTVM6eixpc1dlYktpdDotMSE9PUYuaW5kZXhPZihcIkFwcGxlV2ViS2l0XCIpLGlzRmlyZWZveDpCLGlzQ2hyb21lOnQsaXNTYWZhcmk6IXQmJi0xIT09Ri5pbmRleE9mKFwiU2FmYXJpXCIpLGlzVG91Y2hEZXZpY2U6LyhNb2JpbGV8QW5kcm9pZHxXaW5kb3dzIFBob25lKS8udGVzdChGKSxcblNWR19OUzpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hhcnRDb3VudDowLHNlcmllc1R5cGVzOnt9LHN5bWJvbFNpemVzOnt9LHN2ZzpHLHdpbjpjLG1hcmdpbk5hbWVzOltcInBsb3RUb3BcIixcIm1hcmdpblJpZ2h0XCIsXCJtYXJnaW5Cb3R0b21cIixcInBsb3RMZWZ0XCJdLG5vb3A6ZnVuY3Rpb24oKXt9LGNoYXJ0czpbXSxkYXRlRm9ybWF0czp7fX19KTtNKEksXCJwYXJ0cy9VdGlsaXRpZXMuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl1dLGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGYoYSxkKXtyZXR1cm4gcGFyc2VJbnQoYSxkfHwxMCl9ZnVuY3Rpb24gRihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF9ZnVuY3Rpb24gRyhhKXthPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKTtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1hfHxcIltvYmplY3QgQXJyYXkgSXRlcmF0b3JdXCI9PT1hfWZ1bmN0aW9uIHooYSxkKXtyZXR1cm4hIWEmJlwib2JqZWN0XCI9PT10eXBlb2YgYSYmKCFkfHxcbiFHKGEpKX1mdW5jdGlvbiBCKGEpe3JldHVybiB6KGEpJiZcIm51bWJlclwiPT09dHlwZW9mIGEubm9kZVR5cGV9ZnVuY3Rpb24gdChhKXt2YXIgZD1hJiZhLmNvbnN0cnVjdG9yO3JldHVybiEoIXooYSwhMCl8fEIoYSl8fCFkfHwhZC5uYW1lfHxcIk9iamVjdFwiPT09ZC5uYW1lKX1mdW5jdGlvbiB2KGEpe3JldHVyblwibnVtYmVyXCI9PT10eXBlb2YgYSYmIWlzTmFOKGEpJiZJbmZpbml0eT5hJiYtSW5maW5pdHk8YX1mdW5jdGlvbiBDKGEpe3JldHVyblwidW5kZWZpbmVkXCIhPT10eXBlb2YgYSYmbnVsbCE9PWF9ZnVuY3Rpb24gSChhLGQsZSl7dmFyIGI7RihkKT9DKGUpP2Euc2V0QXR0cmlidXRlKGQsZSk6YSYmYS5nZXRBdHRyaWJ1dGUmJigoYj1hLmdldEF0dHJpYnV0ZShkKSl8fFwiY2xhc3NcIiE9PWR8fChiPWEuZ2V0QXR0cmlidXRlKGQrXCJOYW1lXCIpKSk6bihkLGZ1bmN0aW9uKGQsZSl7YS5zZXRBdHRyaWJ1dGUoZSxkKX0pO3JldHVybiBifWZ1bmN0aW9uIHkoYSxkKXt2YXIgZTthfHwoYT1cbnt9KTtmb3IoZSBpbiBkKWFbZV09ZFtlXTtyZXR1cm4gYX1mdW5jdGlvbiBoKCl7Zm9yKHZhciBhPWFyZ3VtZW50cyxkPWEubGVuZ3RoLGU9MDtlPGQ7ZSsrKXt2YXIgYj1hW2VdO2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgYiYmbnVsbCE9PWIpcmV0dXJuIGJ9fWZ1bmN0aW9uIG4oYSxkLGUpe2Zvcih2YXIgYiBpbiBhKU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYikmJmQuY2FsbChlfHxhW2JdLGFbYl0sYixhKX1jLnRpbWVycz1bXTt2YXIgcT1jLmNoYXJ0cyxnPWMuZG9jLGI9Yy53aW47Yy5lcnJvcj1mdW5jdGlvbihhLGQsZSxsKXt2YXIgZz12KGEpLGg9Zz9cIkhpZ2hjaGFydHMgZXJyb3IgI1wiK2ErXCI6IHd3dy5oaWdoY2hhcnRzLmNvbS9lcnJvcnMvXCIrYStcIi9cIjphLnRvU3RyaW5nKCkscD1mdW5jdGlvbigpe2lmKGQpdGhyb3cgRXJyb3IoaCk7Yi5jb25zb2xlJiZjb25zb2xlLmxvZyhoKX07aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBsKXt2YXIgdT1cIlwiO2cmJihoKz1cIj9cIik7XG5jLm9iamVjdEVhY2gobCxmdW5jdGlvbihhLGQpe3UrPVwiXFxuXCIrZCtcIjogXCIrYTtnJiYoaCs9ZW5jb2RlVVJJKGQpK1wiPVwiK2VuY29kZVVSSShhKSl9KTtoKz11fWU/Yy5maXJlRXZlbnQoZSxcImRpc3BsYXlFcnJvclwiLHtjb2RlOmEsbWVzc2FnZTpoLHBhcmFtczpsfSxwKTpwKCl9O2MuRng9ZnVuY3Rpb24oYSxkLGUpe3RoaXMub3B0aW9ucz1kO3RoaXMuZWxlbT1hO3RoaXMucHJvcD1lfTtjLkZ4LnByb3RvdHlwZT17ZFNldHRlcjpmdW5jdGlvbigpe3ZhciBhPXRoaXMucGF0aHNbMF0sZD10aGlzLnBhdGhzWzFdLGU9W10sYj10aGlzLm5vdyxnPWEubGVuZ3RoO2lmKDE9PT1iKWU9dGhpcy50b0Q7ZWxzZSBpZihnPT09ZC5sZW5ndGgmJjE+Yilmb3IoO2ctLTspe3ZhciBjPXBhcnNlRmxvYXQoYVtnXSk7ZVtnXT1pc05hTihjKXx8XCJBXCI9PT1kW2ctNF18fFwiQVwiPT09ZFtnLTVdP2RbZ106YipwYXJzZUZsb2F0KFwiXCIrKGRbZ10tYykpK2N9ZWxzZSBlPWQ7dGhpcy5lbGVtLmF0dHIoXCJkXCIsZSxcbm51bGwsITApfSx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmVsZW0sZD10aGlzLnByb3AsZT10aGlzLm5vdyxiPXRoaXMub3B0aW9ucy5zdGVwO2lmKHRoaXNbZCtcIlNldHRlclwiXSl0aGlzW2QrXCJTZXR0ZXJcIl0oKTtlbHNlIGEuYXR0cj9hLmVsZW1lbnQmJmEuYXR0cihkLGUsbnVsbCwhMCk6YS5zdHlsZVtkXT1lK3RoaXMudW5pdDtiJiZiLmNhbGwoYSxlLHRoaXMpfSxydW46ZnVuY3Rpb24oYSxkLGUpe3ZhciBsPXRoaXMsZz1sLm9wdGlvbnMsaD1mdW5jdGlvbihhKXtyZXR1cm4gaC5zdG9wcGVkPyExOmwuc3RlcChhKX0scD1iLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oYSl7c2V0VGltZW91dChhLDEzKX0sdT1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8Yy50aW1lcnMubGVuZ3RoO2ErKyljLnRpbWVyc1thXSgpfHxjLnRpbWVycy5zcGxpY2UoYS0tLDEpO2MudGltZXJzLmxlbmd0aCYmcCh1KX07YSE9PWR8fHRoaXMuZWxlbVtcImZvcmNlQW5pbWF0ZTpcIit0aGlzLnByb3BdP1xuKHRoaXMuc3RhcnRUaW1lPStuZXcgRGF0ZSx0aGlzLnN0YXJ0PWEsdGhpcy5lbmQ9ZCx0aGlzLnVuaXQ9ZSx0aGlzLm5vdz10aGlzLnN0YXJ0LHRoaXMucG9zPTAsaC5lbGVtPXRoaXMuZWxlbSxoLnByb3A9dGhpcy5wcm9wLGgoKSYmMT09PWMudGltZXJzLnB1c2goaCkmJnAodSkpOihkZWxldGUgZy5jdXJBbmltW3RoaXMucHJvcF0sZy5jb21wbGV0ZSYmMD09PU9iamVjdC5rZXlzKGcuY3VyQW5pbSkubGVuZ3RoJiZnLmNvbXBsZXRlLmNhbGwodGhpcy5lbGVtKSl9LHN0ZXA6ZnVuY3Rpb24oYSl7dmFyIGQ9K25ldyBEYXRlLGU9dGhpcy5vcHRpb25zLGI9dGhpcy5lbGVtLGc9ZS5jb21wbGV0ZSxjPWUuZHVyYXRpb24scD1lLmN1ckFuaW07aWYoYi5hdHRyJiYhYi5lbGVtZW50KWE9ITE7ZWxzZSBpZihhfHxkPj1jK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz10aGlzLmVuZDt0aGlzLnBvcz0xO3RoaXMudXBkYXRlKCk7dmFyIHU9cFt0aGlzLnByb3BdPSEwO24ocCxmdW5jdGlvbihhKXshMCE9PVxuYSYmKHU9ITEpfSk7dSYmZyYmZy5jYWxsKGIpO2E9ITF9ZWxzZSB0aGlzLnBvcz1lLmVhc2luZygoZC10aGlzLnN0YXJ0VGltZSkvYyksdGhpcy5ub3c9dGhpcy5zdGFydCsodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3MsdGhpcy51cGRhdGUoKSxhPSEwO3JldHVybiBhfSxpbml0UGF0aDpmdW5jdGlvbihhLGQsZSl7ZnVuY3Rpb24gYihhKXtmb3IoQT1hLmxlbmd0aDtBLS07KXt2YXIgZD1cIk1cIj09PWFbQV18fFwiTFwiPT09YVtBXTt2YXIgZT0vW2EtekEtWl0vLnRlc3QoYVtBKzNdKTtkJiZlJiZhLnNwbGljZShBKzEsMCxhW0ErMV0sYVtBKzJdLGFbQSsxXSxhW0ErMl0pfX1mdW5jdGlvbiBnKGEsZCl7Zm9yKDthLmxlbmd0aDxoOyl7YVswXT1kW2gtYS5sZW5ndGhdO3ZhciBlPWEuc2xpY2UoMCxyKTtbXS5zcGxpY2UuYXBwbHkoYSxbMCwwXS5jb25jYXQoZSkpO3cmJihlPWEuc2xpY2UoYS5sZW5ndGgtciksW10uc3BsaWNlLmFwcGx5KGEsW2EubGVuZ3RoLDBdLmNvbmNhdChlKSksXG5BLS0pfWFbMF09XCJNXCJ9ZnVuY3Rpb24gYyhhLGQpe2Zvcih2YXIgZT0oaC1hLmxlbmd0aCkvcjswPGUmJmUtLTspeD1hLnNsaWNlKCkuc3BsaWNlKGEubGVuZ3RoL20tcixyKm0pLHhbMF09ZFtoLXItZSpyXSxrJiYoeFtyLTZdPXhbci0yXSx4W3ItNV09eFtyLTFdKSxbXS5zcGxpY2UuYXBwbHkoYSxbYS5sZW5ndGgvbSwwXS5jb25jYXQoeCkpLHcmJmUtLX1kPWR8fFwiXCI7dmFyIHA9YS5zdGFydFgsdT1hLmVuZFgsaz0tMTxkLmluZGV4T2YoXCJDXCIpLHI9az83OjMseCxBO2Q9ZC5zcGxpdChcIiBcIik7ZT1lLnNsaWNlKCk7dmFyIHc9YS5pc0FyZWEsbT13PzI6MTtrJiYoYihkKSxiKGUpKTtpZihwJiZ1KXtmb3IoQT0wO0E8cC5sZW5ndGg7QSsrKWlmKHBbQV09PT11WzBdKXt2YXIgSz1BO2JyZWFrfWVsc2UgaWYocFswXT09PXVbdS5sZW5ndGgtcC5sZW5ndGgrQV0pe0s9QTt2YXIgSj0hMDticmVha31lbHNlIGlmKHBbcC5sZW5ndGgtMV09PT11W3UubGVuZ3RoLXAubGVuZ3RoK0FdKXtLPVxucC5sZW5ndGgtQTticmVha31cInVuZGVmaW5lZFwiPT09dHlwZW9mIEsmJihkPVtdKX1pZihkLmxlbmd0aCYmdihLKSl7dmFyIGg9ZS5sZW5ndGgrSyptKnI7Sj8oZyhkLGUpLGMoZSxkKSk6KGcoZSxkKSxjKGQsZSkpfXJldHVybltkLGVdfSxmaWxsU2V0dGVyOmZ1bmN0aW9uKCl7Yy5GeC5wcm90b3R5cGUuc3Ryb2tlU2V0dGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sc3Ryb2tlU2V0dGVyOmZ1bmN0aW9uKCl7dGhpcy5lbGVtLmF0dHIodGhpcy5wcm9wLGMuY29sb3IodGhpcy5zdGFydCkudHdlZW5UbyhjLmNvbG9yKHRoaXMuZW5kKSx0aGlzLnBvcyksbnVsbCwhMCl9fTtjLm1lcmdlPWZ1bmN0aW9uKCl7dmFyIGEsZD1hcmd1bWVudHMsZT17fSxiPWZ1bmN0aW9uKGEsZCl7XCJvYmplY3RcIiE9PXR5cGVvZiBhJiYoYT17fSk7bihkLGZ1bmN0aW9uKGUsayl7IXooZSwhMCl8fHQoZSl8fEIoZSk/YVtrXT1kW2tdOmFba109YihhW2tdfHx7fSxlKX0pO3JldHVybiBhfTshMD09PWRbMF0mJlxuKGU9ZFsxXSxkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGQsMikpO3ZhciBnPWQubGVuZ3RoO2ZvcihhPTA7YTxnO2ErKyllPWIoZSxkW2FdKTtyZXR1cm4gZX07Yy5jbGVhclRpbWVvdXQ9ZnVuY3Rpb24oYSl7QyhhKSYmY2xlYXJUaW1lb3V0KGEpfTtjLmNzcz1mdW5jdGlvbihhLGQpe2MuaXNNUyYmIWMuc3ZnJiZkJiZcInVuZGVmaW5lZFwiIT09dHlwZW9mIGQub3BhY2l0eSYmKGQuZmlsdGVyPVwiYWxwaGEob3BhY2l0eT1cIisxMDAqZC5vcGFjaXR5K1wiKVwiKTt5KGEuc3R5bGUsZCl9O2MuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihhLGQsZSxiLEwpe2E9Zy5jcmVhdGVFbGVtZW50KGEpO3ZhciBsPWMuY3NzO2QmJnkoYSxkKTtMJiZsKGEse3BhZGRpbmc6XCIwXCIsYm9yZGVyOlwibm9uZVwiLG1hcmdpbjpcIjBcIn0pO2UmJmwoYSxlKTtiJiZiLmFwcGVuZENoaWxkKGEpO3JldHVybiBhfTtjLmV4dGVuZENsYXNzPWZ1bmN0aW9uKGEsZCl7dmFyIGU9ZnVuY3Rpb24oKXt9O2UucHJvdG90eXBlPVxubmV3IGE7eShlLnByb3RvdHlwZSxkKTtyZXR1cm4gZX07Yy5wYWQ9ZnVuY3Rpb24oYSxkLGUpe3JldHVybiBBcnJheSgoZHx8MikrMS1TdHJpbmcoYSkucmVwbGFjZShcIi1cIixcIlwiKS5sZW5ndGgpLmpvaW4oZXx8XCIwXCIpK2F9O2MucmVsYXRpdmVMZW5ndGg9ZnVuY3Rpb24oYSxkLGUpe3JldHVybi8lJC8udGVzdChhKT9kKnBhcnNlRmxvYXQoYSkvMTAwKyhlfHwwKTpwYXJzZUZsb2F0KGEpfTtjLndyYXA9ZnVuY3Rpb24oYSxkLGUpe3ZhciBiPWFbZF07YVtkXT1mdW5jdGlvbigpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksZD1hcmd1bWVudHMsbD10aGlzO2wucHJvY2VlZD1mdW5jdGlvbigpe2IuYXBwbHkobCxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50czpkKX07YS51bnNoaWZ0KGIpO2E9ZS5hcHBseSh0aGlzLGEpO2wucHJvY2VlZD1udWxsO3JldHVybiBhfX07Yy5kYXRlUHJvcHNUb1RpbWVzdGFtcHM9ZnVuY3Rpb24oYSl7bihhLGZ1bmN0aW9uKGQsXG5lKXt6KGQpJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5nZXRUaW1lP2FbZV09ZC5nZXRUaW1lKCk6KHooZCl8fEcoZCkpJiZjLmRhdGVQcm9wc1RvVGltZXN0YW1wcyhkKX0pfTtjLmZvcm1hdFNpbmdsZT1mdW5jdGlvbihhLGQsZSl7dmFyIGI9L1xcLihbMC05XSkvLGc9Yy5kZWZhdWx0T3B0aW9ucy5sYW5nOy9mJC8udGVzdChhKT8oZT0oZT1hLm1hdGNoKGIpKT9lWzFdOi0xLG51bGwhPT1kJiYoZD1jLm51bWJlckZvcm1hdChkLGUsZy5kZWNpbWFsUG9pbnQsLTE8YS5pbmRleE9mKFwiLFwiKT9nLnRob3VzYW5kc1NlcDpcIlwiKSkpOmQ9KGV8fGMudGltZSkuZGF0ZUZvcm1hdChhLGQpO3JldHVybiBkfTtjLmZvcm1hdD1mdW5jdGlvbihhLGQsZSl7Zm9yKHZhciBiPVwie1wiLGc9ITEsaCxwLHUsayxyPVtdLHg7YTspe2I9YS5pbmRleE9mKGIpO2lmKC0xPT09YilicmVhaztoPWEuc2xpY2UoMCxiKTtpZihnKXtoPWguc3BsaXQoXCI6XCIpO3A9aC5zaGlmdCgpLnNwbGl0KFwiLlwiKTtrPXAubGVuZ3RoO1xueD1kO2Zvcih1PTA7dTxrO3UrKyl4JiYoeD14W3BbdV1dKTtoLmxlbmd0aCYmKHg9Yy5mb3JtYXRTaW5nbGUoaC5qb2luKFwiOlwiKSx4LGUpKTtyLnB1c2goeCl9ZWxzZSByLnB1c2goaCk7YT1hLnNsaWNlKGIrMSk7Yj0oZz0hZyk/XCJ9XCI6XCJ7XCJ9ci5wdXNoKGEpO3JldHVybiByLmpvaW4oXCJcIil9O2MuZ2V0TWFnbml0dWRlPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGEpL01hdGguTE4xMCkpfTtjLm5vcm1hbGl6ZVRpY2tJbnRlcnZhbD1mdW5jdGlvbihhLGQsZSxiLGcpe3ZhciBsPWE7ZT1oKGUsMSk7dmFyIHA9YS9lO2R8fChkPWc/WzEsMS4yLDEuNSwyLDIuNSwzLDQsNSw2LDgsMTBdOlsxLDIsMi41LDUsMTBdLCExPT09YiYmKDE9PT1lP2Q9ZC5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIDA9PT1hJTF9KTouMT49ZSYmKGQ9WzEvZV0pKSk7Zm9yKGI9MDtiPGQubGVuZ3RoJiYhKGw9ZFtiXSxnJiZsKmU+PWF8fCFnJiZwPD0oZFtiXStcbihkW2IrMV18fGRbYl0pKS8yKTtiKyspO3JldHVybiBsPWMuY29ycmVjdEZsb2F0KGwqZSwtTWF0aC5yb3VuZChNYXRoLmxvZyguMDAxKS9NYXRoLkxOMTApKX07Yy5zdGFibGVTb3J0PWZ1bmN0aW9uKGEsZCl7dmFyIGI9YS5sZW5ndGgsbCxnO2ZvcihnPTA7ZzxiO2crKylhW2ddLnNhZmVJPWc7YS5zb3J0KGZ1bmN0aW9uKGEsYil7bD1kKGEsYik7cmV0dXJuIDA9PT1sP2Euc2FmZUktYi5zYWZlSTpsfSk7Zm9yKGc9MDtnPGI7ZysrKWRlbGV0ZSBhW2ddLnNhZmVJfTtjLmNvcnJlY3RGbG9hdD1mdW5jdGlvbihhLGQpe3JldHVybiBwYXJzZUZsb2F0KGEudG9QcmVjaXNpb24oZHx8MTQpKX07Yy5hbmltT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpP2MubWVyZ2UoYSk6e2R1cmF0aW9uOmE/NTAwOjB9fTtjLnRpbWVVbml0cz17bWlsbGlzZWNvbmQ6MSxzZWNvbmQ6MUUzLG1pbnV0ZTo2RTQsaG91cjozNkU1LGRheTo4NjRFNSx3ZWVrOjYwNDhFNSxtb250aDoyNDE5MkU1LHllYXI6MzE0NDk2RTV9O1xuYy5udW1iZXJGb3JtYXQ9ZnVuY3Rpb24oYSxkLGIsbCl7YT0rYXx8MDtkPStkO3ZhciBlPWMuZGVmYXVsdE9wdGlvbnMubGFuZyxnPShhLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdfHxcIlwiKS5zcGxpdChcImVcIilbMF0ubGVuZ3RoLHA9YS50b1N0cmluZygpLnNwbGl0KFwiZVwiKTtpZigtMT09PWQpZD1NYXRoLm1pbihnLDIwKTtlbHNlIGlmKCF2KGQpKWQ9MjtlbHNlIGlmKGQmJnBbMV0mJjA+cFsxXSl7dmFyIHU9ZCsgK3BbMV07MDw9dT8ocFswXT0oK3BbMF0pLnRvRXhwb25lbnRpYWwodSkuc3BsaXQoXCJlXCIpWzBdLGQ9dSk6KHBbMF09cFswXS5zcGxpdChcIi5cIilbMF18fDAsYT0yMD5kPyhwWzBdKk1hdGgucG93KDEwLHBbMV0pKS50b0ZpeGVkKGQpOjAscFsxXT0wKX12YXIgaz0oTWF0aC5hYnMocFsxXT9wWzBdOmEpK01hdGgucG93KDEwLC1NYXRoLm1heChkLGcpLTEpKS50b0ZpeGVkKGQpO2c9U3RyaW5nKGYoaykpO3U9MzxnLmxlbmd0aD9nLmxlbmd0aCUzOjA7Yj1oKGIsZS5kZWNpbWFsUG9pbnQpO1xubD1oKGwsZS50aG91c2FuZHNTZXApO2E9KDA+YT9cIi1cIjpcIlwiKSsodT9nLnN1YnN0cigwLHUpK2w6XCJcIik7YSs9Zy5zdWJzdHIodSkucmVwbGFjZSgvKFxcZHszfSkoPz1cXGQpL2csXCIkMVwiK2wpO2QmJihhKz1iK2suc2xpY2UoLWQpKTtwWzFdJiYwIT09K2EmJihhKz1cImVcIitwWzFdKTtyZXR1cm4gYX07TWF0aC5lYXNlSW5PdXRTaW5lPWZ1bmN0aW9uKGEpe3JldHVybi0uNSooTWF0aC5jb3MoTWF0aC5QSSphKS0xKX07Yy5nZXRTdHlsZT1mdW5jdGlvbihhLGQsZSl7aWYoXCJ3aWR0aFwiPT09ZClyZXR1cm4gZD1NYXRoLm1pbihhLm9mZnNldFdpZHRoLGEuc2Nyb2xsV2lkdGgpLGU9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QmJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsZTxkJiZlPj1kLTEmJihkPU1hdGguZmxvb3IoZSkpLE1hdGgubWF4KDAsZC1jLmdldFN0eWxlKGEsXCJwYWRkaW5nLWxlZnRcIiktYy5nZXRTdHlsZShhLFwicGFkZGluZy1yaWdodFwiKSk7aWYoXCJoZWlnaHRcIj09PWQpcmV0dXJuIE1hdGgubWF4KDAsXG5NYXRoLm1pbihhLm9mZnNldEhlaWdodCxhLnNjcm9sbEhlaWdodCktYy5nZXRTdHlsZShhLFwicGFkZGluZy10b3BcIiktYy5nZXRTdHlsZShhLFwicGFkZGluZy1ib3R0b21cIikpO2IuZ2V0Q29tcHV0ZWRTdHlsZXx8Yy5lcnJvcigyNywhMCk7aWYoYT1iLmdldENvbXB1dGVkU3R5bGUoYSx2b2lkIDApKWE9YS5nZXRQcm9wZXJ0eVZhbHVlKGQpLGgoZSxcIm9wYWNpdHlcIiE9PWQpJiYoYT1mKGEpKTtyZXR1cm4gYX07Yy5pbkFycmF5PWZ1bmN0aW9uKGEsZCxiKXtyZXR1cm4gZC5pbmRleE9mKGEsYil9O2MuZmluZD1BcnJheS5wcm90b3R5cGUuZmluZD9mdW5jdGlvbihhLGQpe3JldHVybiBhLmZpbmQoZCl9OmZ1bmN0aW9uKGEsZCl7dmFyIGIsbD1hLmxlbmd0aDtmb3IoYj0wO2I8bDtiKyspaWYoZChhW2JdLGIpKXJldHVybiBhW2JdfTtjLmtleXM9T2JqZWN0LmtleXM7Yy5vZmZzZXQ9ZnVuY3Rpb24oYSl7dmFyIGQ9Zy5kb2N1bWVudEVsZW1lbnQ7YT1hLnBhcmVudEVsZW1lbnR8fGEucGFyZW50Tm9kZT9cbmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6e3RvcDowLGxlZnQ6MH07cmV0dXJue3RvcDphLnRvcCsoYi5wYWdlWU9mZnNldHx8ZC5zY3JvbGxUb3ApLShkLmNsaWVudFRvcHx8MCksbGVmdDphLmxlZnQrKGIucGFnZVhPZmZzZXR8fGQuc2Nyb2xsTGVmdCktKGQuY2xpZW50TGVmdHx8MCl9fTtjLnN0b3A9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGQ9Yy50aW1lcnMubGVuZ3RoO2QtLTspYy50aW1lcnNbZF0uZWxlbSE9PWF8fGImJmIhPT1jLnRpbWVyc1tkXS5wcm9wfHwoYy50aW1lcnNbZF0uc3RvcHBlZD0hMCl9O24oe21hcDpcIm1hcFwiLGVhY2g6XCJmb3JFYWNoXCIsZ3JlcDpcImZpbHRlclwiLHJlZHVjZTpcInJlZHVjZVwiLHNvbWU6XCJzb21lXCJ9LGZ1bmN0aW9uKGEsYil7Y1tiXT1mdW5jdGlvbihiKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlW2FdLmFwcGx5KGIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfX0pO2MuYWRkRXZlbnQ9ZnVuY3Rpb24oYSxiLGUsbCl7dm9pZCAwPT09bCYmKGw9XG57fSk7dmFyIGQ9YS5hZGRFdmVudExpc3RlbmVyfHxjLmFkZEV2ZW50TGlzdGVuZXJQb2x5ZmlsbDt2YXIgZz1cImZ1bmN0aW9uXCI9PT10eXBlb2YgYSYmYS5wcm90b3R5cGU/YS5wcm90b3R5cGUucHJvdG9FdmVudHM9YS5wcm90b3R5cGUucHJvdG9FdmVudHN8fHt9OmEuaGNFdmVudHM9YS5oY0V2ZW50c3x8e307Yy5Qb2ludCYmYSBpbnN0YW5jZW9mIGMuUG9pbnQmJmEuc2VyaWVzJiZhLnNlcmllcy5jaGFydCYmKGEuc2VyaWVzLmNoYXJ0LnJ1blRyYWNrZXJDbGljaz0hMCk7ZCYmZC5jYWxsKGEsYixlLCExKTtnW2JdfHwoZ1tiXT1bXSk7Z1tiXS5wdXNoKHtmbjplLG9yZGVyOlwibnVtYmVyXCI9PT10eXBlb2YgbC5vcmRlcj9sLm9yZGVyOkluZmluaXR5fSk7Z1tiXS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub3JkZXItYi5vcmRlcn0pO3JldHVybiBmdW5jdGlvbigpe2MucmVtb3ZlRXZlbnQoYSxiLGUpfX07Yy5yZW1vdmVFdmVudD1mdW5jdGlvbihhLGIsZSl7ZnVuY3Rpb24gZChiLFxuZCl7dmFyIGU9YS5yZW1vdmVFdmVudExpc3RlbmVyfHxjLnJlbW92ZUV2ZW50TGlzdGVuZXJQb2x5ZmlsbDtlJiZlLmNhbGwoYSxiLGQsITEpfWZ1bmN0aW9uIGcoZSl7dmFyIGw7aWYoYS5ub2RlTmFtZSl7aWYoYil7dmFyIGs9e307a1tiXT0hMH1lbHNlIGs9ZTtuKGssZnVuY3Rpb24oYSxiKXtpZihlW2JdKWZvcihsPWVbYl0ubGVuZ3RoO2wtLTspZChiLGVbYl1bbF0uZm4pfSl9fXZhciBoO1tcInByb3RvRXZlbnRzXCIsXCJoY0V2ZW50c1wiXS5mb3JFYWNoKGZ1bmN0aW9uKGwsYyl7dmFyIGs9KGM9Yz9hOmEucHJvdG90eXBlKSYmY1tsXTtrJiYoYj8oaD1rW2JdfHxbXSxlPyhrW2JdPWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBlIT09YS5mbn0pLGQoYixlKSk6KGcoayksa1tiXT1bXSkpOihnKGspLGNbbF09e30pKX0pfTtjLmZpcmVFdmVudD1mdW5jdGlvbihhLGIsZSxsKXt2YXIgZDtlPWV8fHt9O2lmKGcuY3JlYXRlRXZlbnQmJihhLmRpc3BhdGNoRXZlbnR8fGEuZmlyZUV2ZW50KSl7dmFyIGM9XG5nLmNyZWF0ZUV2ZW50KFwiRXZlbnRzXCIpO2MuaW5pdEV2ZW50KGIsITAsITApO3koYyxlKTthLmRpc3BhdGNoRXZlbnQ/YS5kaXNwYXRjaEV2ZW50KGMpOmEuZmlyZUV2ZW50KGIsYyl9ZWxzZSBlLnRhcmdldHx8eShlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe2UuZGVmYXVsdFByZXZlbnRlZD0hMH0sdGFyZ2V0OmEsdHlwZTpifSksZnVuY3Rpb24oYixsKXt2b2lkIDA9PT1iJiYoYj1bXSk7dm9pZCAwPT09bCYmKGw9W10pO3ZhciBrPTAscj0wLGc9Yi5sZW5ndGgrbC5sZW5ndGg7Zm9yKGQ9MDtkPGc7ZCsrKSExPT09KGJba10/bFtyXT9iW2tdLm9yZGVyPD1sW3JdLm9yZGVyP2JbaysrXTpsW3IrK106YltrKytdOmxbcisrXSkuZm4uY2FsbChhLGUpJiZlLnByZXZlbnREZWZhdWx0KCl9KGEucHJvdG9FdmVudHMmJmEucHJvdG9FdmVudHNbYl0sYS5oY0V2ZW50cyYmYS5oY0V2ZW50c1tiXSk7bCYmIWUuZGVmYXVsdFByZXZlbnRlZCYmbC5jYWxsKGEsZSl9O2MuYW5pbWF0ZT1mdW5jdGlvbihhLFxuYixlKXt2YXIgZCxnPVwiXCIsaCxwO2lmKCF6KGUpKXt2YXIgdT1hcmd1bWVudHM7ZT17ZHVyYXRpb246dVsyXSxlYXNpbmc6dVszXSxjb21wbGV0ZTp1WzRdfX12KGUuZHVyYXRpb24pfHwoZS5kdXJhdGlvbj00MDApO2UuZWFzaW5nPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmVhc2luZz9lLmVhc2luZzpNYXRoW2UuZWFzaW5nXXx8TWF0aC5lYXNlSW5PdXRTaW5lO2UuY3VyQW5pbT1jLm1lcmdlKGIpO24oYixmdW5jdGlvbihrLGwpe2Muc3RvcChhLGwpO3A9bmV3IGMuRngoYSxlLGwpO2g9bnVsbDtcImRcIj09PWw/KHAucGF0aHM9cC5pbml0UGF0aChhLGEuZCxiLmQpLHAudG9EPWIuZCxkPTAsaD0xKTphLmF0dHI/ZD1hLmF0dHIobCk6KGQ9cGFyc2VGbG9hdChjLmdldFN0eWxlKGEsbCkpfHwwLFwib3BhY2l0eVwiIT09bCYmKGc9XCJweFwiKSk7aHx8KGg9ayk7aCYmaC5tYXRjaCYmaC5tYXRjaChcInB4XCIpJiYoaD1oLnJlcGxhY2UoL3B4L2csXCJcIikpO3AucnVuKGQsaCxnKX0pfTtjLnNlcmllc1R5cGU9XG5mdW5jdGlvbihhLGIsZSxsLGcpe3ZhciBkPWMuZ2V0T3B0aW9ucygpLHA9Yy5zZXJpZXNUeXBlcztkLnBsb3RPcHRpb25zW2FdPWMubWVyZ2UoZC5wbG90T3B0aW9uc1tiXSxlKTtwW2FdPWMuZXh0ZW5kQ2xhc3MocFtiXXx8ZnVuY3Rpb24oKXt9LGwpO3BbYV0ucHJvdG90eXBlLnR5cGU9YTtnJiYocFthXS5wcm90b3R5cGUucG9pbnRDbGFzcz1jLmV4dGVuZENsYXNzKGMuUG9pbnQsZykpO3JldHVybiBwW2FdfTtjLnVuaXF1ZUtleT1mdW5jdGlvbigpe3ZhciBhPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpLGI9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm5cImhpZ2hjaGFydHMtXCIrYStcIi1cIitiKyt9fSgpO2MuaXNGdW5jdGlvbj1mdW5jdGlvbihhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYX07Yi5qUXVlcnkmJihiLmpRdWVyeS5mbi5oaWdoY2hhcnRzPWZ1bmN0aW9uKCl7dmFyIGE9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKHRoaXNbMF0pcmV0dXJuIGFbMF0/XG4obmV3IChjW0YoYVswXSk/YS5zaGlmdCgpOlwiQ2hhcnRcIl0pKHRoaXNbMF0sYVswXSxhWzFdKSx0aGlzKTpxW0godGhpc1swXSxcImRhdGEtaGlnaGNoYXJ0cy1jaGFydFwiKV19KTtyZXR1cm57YXJyYXlNYXg6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGU9YVswXTtiLS07KWFbYl0+ZSYmKGU9YVtiXSk7cmV0dXJuIGV9LGFycmF5TWluOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLmxlbmd0aCxlPWFbMF07Yi0tOylhW2JdPGUmJihlPWFbYl0pO3JldHVybiBlfSxhdHRyOkgsZGVmaW5lZDpDLGRlc3Ryb3lPYmplY3RQcm9wZXJ0aWVzOmZ1bmN0aW9uKGEsYil7bihhLGZ1bmN0aW9uKGQsbCl7ZCYmZCE9PWImJmQuZGVzdHJveSYmZC5kZXN0cm95KCk7ZGVsZXRlIGFbbF19KX0sZGlzY2FyZEVsZW1lbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9Yy5nYXJiYWdlQmluO2J8fChiPWMuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7YSYmYi5hcHBlbmRDaGlsZChhKTtiLmlubmVySFRNTD1cIlwifSxlcmFzZTpmdW5jdGlvbihhLFxuYil7Zm9yKHZhciBkPWEubGVuZ3RoO2QtLTspaWYoYVtkXT09PWIpe2Euc3BsaWNlKGQsMSk7YnJlYWt9fSxleHRlbmQ6eSxpc0FycmF5OkcsaXNDbGFzczp0LGlzRE9NRWxlbWVudDpCLGlzTnVtYmVyOnYsaXNPYmplY3Q6eixpc1N0cmluZzpGLG9iamVjdEVhY2g6bixwaWNrOmgscEludDpmLHNldEFuaW1hdGlvbjpmdW5jdGlvbihhLGIpe2IucmVuZGVyZXIuZ2xvYmFsQW5pbWF0aW9uPWgoYSxiLm9wdGlvbnMuY2hhcnQuYW5pbWF0aW9uLCEwKX0sc3BsYXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEcoYSk/YTpbYV19LHN5bmNUaW1lb3V0OmZ1bmN0aW9uKGEsYixlKXtpZigwPGIpcmV0dXJuIHNldFRpbWVvdXQoYSxiLGUpO2EuY2FsbCgwLGUpO3JldHVybi0xfX19KTtNKEksXCJwYXJ0cy9Db2xvci5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuaXNOdW1iZXIsRz1mLnBJbnQsej1jLm1lcmdlO2MuQ29sb3I9XG5mdW5jdGlvbihmKXtpZighKHRoaXMgaW5zdGFuY2VvZiBjLkNvbG9yKSlyZXR1cm4gbmV3IGMuQ29sb3IoZik7dGhpcy5pbml0KGYpfTtjLkNvbG9yLnByb3RvdHlwZT17cGFyc2Vyczpbe3JlZ2V4Oi9yZ2JhXFwoXFxzKihbMC05XXsxLDN9KVxccyosXFxzKihbMC05XXsxLDN9KVxccyosXFxzKihbMC05XXsxLDN9KVxccyosXFxzKihbMC05XT8oPzpcXC5bMC05XSspPylcXHMqXFwpLyxwYXJzZTpmdW5jdGlvbihjKXtyZXR1cm5bRyhjWzFdKSxHKGNbMl0pLEcoY1szXSkscGFyc2VGbG9hdChjWzRdLDEwKV19fSx7cmVnZXg6L3JnYlxcKFxccyooWzAtOV17MSwzfSlcXHMqLFxccyooWzAtOV17MSwzfSlcXHMqLFxccyooWzAtOV17MSwzfSlcXHMqXFwpLyxwYXJzZTpmdW5jdGlvbihjKXtyZXR1cm5bRyhjWzFdKSxHKGNbMl0pLEcoY1szXSksMV19fV0sbmFtZXM6e3doaXRlOlwiI2ZmZmZmZlwiLGJsYWNrOlwiIzAwMDAwMFwifSxpbml0OmZ1bmN0aW9uKGYpe3ZhciB0LHY7aWYoKHRoaXMuaW5wdXQ9Zj10aGlzLm5hbWVzW2YmJlxuZi50b0xvd2VyQ2FzZT9mLnRvTG93ZXJDYXNlKCk6XCJcIl18fGYpJiZmLnN0b3BzKXRoaXMuc3RvcHM9Zi5zdG9wcy5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIG5ldyBjLkNvbG9yKGZbMV0pfSk7ZWxzZXtpZihmJiZmLmNoYXJBdCYmXCIjXCI9PT1mLmNoYXJBdCgpKXt2YXIgQz1mLmxlbmd0aDtmPXBhcnNlSW50KGYuc3Vic3RyKDEpLDE2KTs3PT09Qz90PVsoZiYxNjcxMTY4MCk+PjE2LChmJjY1MjgwKT4+OCxmJjI1NSwxXTo0PT09QyYmKHQ9WyhmJjM4NDApPj40fChmJjM4NDApPj44LChmJjI0MCk+PjR8ZiYyNDAsKGYmMTUpPDw0fGYmMTUsMV0pfWlmKCF0KWZvcih2PXRoaXMucGFyc2Vycy5sZW5ndGg7di0tJiYhdDspe3ZhciBCPXRoaXMucGFyc2Vyc1t2XTsoQz1CLnJlZ2V4LmV4ZWMoZikpJiYodD1CLnBhcnNlKEMpKX19dGhpcy5yZ2JhPXR8fFtdfSxnZXQ6ZnVuY3Rpb24oYyl7dmFyIGY9dGhpcy5pbnB1dCx2PXRoaXMucmdiYTtpZih0aGlzLnN0b3BzKXt2YXIgQz16KGYpO0Muc3RvcHM9XG5bXS5jb25jYXQoQy5zdG9wcyk7dGhpcy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGYsdil7Qy5zdG9wc1t2XT1bQy5zdG9wc1t2XVswXSxmLmdldChjKV19KX1lbHNlIEM9diYmRih2WzBdKT9cInJnYlwiPT09Y3x8IWMmJjE9PT12WzNdP1wicmdiKFwiK3ZbMF0rXCIsXCIrdlsxXStcIixcIit2WzJdK1wiKVwiOlwiYVwiPT09Yz92WzNdOlwicmdiYShcIit2LmpvaW4oXCIsXCIpK1wiKVwiOmY7cmV0dXJuIEN9LGJyaWdodGVuOmZ1bmN0aW9uKGMpe3ZhciBmLHY9dGhpcy5yZ2JhO2lmKHRoaXMuc3RvcHMpdGhpcy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGYpe2YuYnJpZ2h0ZW4oYyl9KTtlbHNlIGlmKEYoYykmJjAhPT1jKWZvcihmPTA7Mz5mO2YrKyl2W2ZdKz1HKDI1NSpjKSwwPnZbZl0mJih2W2ZdPTApLDI1NTx2W2ZdJiYodltmXT0yNTUpO3JldHVybiB0aGlzfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKGMpe3RoaXMucmdiYVszXT1jO3JldHVybiB0aGlzfSx0d2VlblRvOmZ1bmN0aW9uKGMsZil7dmFyIHY9dGhpcy5yZ2JhLFxudD1jLnJnYmE7dC5sZW5ndGgmJnYmJnYubGVuZ3RoPyhjPTEhPT10WzNdfHwxIT09dlszXSxmPShjP1wicmdiYShcIjpcInJnYihcIikrTWF0aC5yb3VuZCh0WzBdKyh2WzBdLXRbMF0pKigxLWYpKStcIixcIitNYXRoLnJvdW5kKHRbMV0rKHZbMV0tdFsxXSkqKDEtZikpK1wiLFwiK01hdGgucm91bmQodFsyXSsodlsyXS10WzJdKSooMS1mKSkrKGM/XCIsXCIrKHRbM10rKHZbM10tdFszXSkqKDEtZikpOlwiXCIpK1wiKVwiKTpmPWMuaW5wdXR8fFwibm9uZVwiO3JldHVybiBmfX07Yy5jb2xvcj1mdW5jdGlvbihmKXtyZXR1cm4gbmV3IGMuQ29sb3IoZil9fSk7TShJLFwicGFydHMvU3ZnUmVuZGVyZXIuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmF0dHIsRz1mLmRlZmluZWQsej1mLmRlc3Ryb3lPYmplY3RQcm9wZXJ0aWVzLEI9Zi5lcmFzZSx0PWYuZXh0ZW5kLHY9Zi5pc0FycmF5LEM9Zi5pc051bWJlcixIPWYuaXNPYmplY3QsXG55PWYuaXNTdHJpbmcsaD1mLm9iamVjdEVhY2gsbj1mLnBpY2sscT1mLnBJbnQsZz1mLnNwbGF0LGI9Yy5hZGRFdmVudCxhPWMuYW5pbWF0ZSxkPWMuY2hhcnRzLGU9Yy5jb2xvcixsPWMuY3NzLEw9Yy5jcmVhdGVFbGVtZW50LEU9Yy5kZWcycmFkLHA9Yy5kb2MsdT1jLmhhc1RvdWNoLGs9Yy5pc0ZpcmVmb3gscj1jLmlzTVMseD1jLmlzV2ViS2l0LEE9Yy5tZXJnZSx3PWMubm9vcCxtPWMucmVtb3ZlRXZlbnQsSz1jLnN0b3AsSj1jLnN2ZyxVPWMuU1ZHX05TLFM9Yy5zeW1ib2xTaXplcyxRPWMud2luO3ZhciBPPWMuU1ZHRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0KE8ucHJvdG90eXBlLHtvcGFjaXR5OjEsU1ZHX05TOlUsdGV4dFByb3BzOlwiZGlyZWN0aW9uIGZvbnRTaXplIGZvbnRXZWlnaHQgZm9udEZhbWlseSBmb250U3R5bGUgY29sb3IgbGluZUhlaWdodCB3aWR0aCB0ZXh0QWxpZ24gdGV4dERlY29yYXRpb24gdGV4dE92ZXJmbG93IHRleHRPdXRsaW5lIGN1cnNvclwiLnNwbGl0KFwiIFwiKSxcbmluaXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLmVsZW1lbnQ9XCJzcGFuXCI9PT1iP0woYik6cC5jcmVhdGVFbGVtZW50TlModGhpcy5TVkdfTlMsYik7dGhpcy5yZW5kZXJlcj1hO2MuZmlyZUV2ZW50KHRoaXMsXCJhZnRlckluaXRcIil9LGFuaW1hdGU6ZnVuY3Rpb24oYixkLG0pe3ZhciBEPWMuYW5pbU9iamVjdChuKGQsdGhpcy5yZW5kZXJlci5nbG9iYWxBbmltYXRpb24sITApKTtuKHAuaGlkZGVuLHAubXNIaWRkZW4scC53ZWJraXRIaWRkZW4sITEpJiYoRC5kdXJhdGlvbj0wKTswIT09RC5kdXJhdGlvbj8obSYmKEQuY29tcGxldGU9bSksYSh0aGlzLGIsRCkpOih0aGlzLmF0dHIoYix2b2lkIDAsbSksaChiLGZ1bmN0aW9uKGEsYil7RC5zdGVwJiZELnN0ZXAuY2FsbCh0aGlzLGEse3Byb3A6Yixwb3M6MX0pfSx0aGlzKSk7cmV0dXJuIHRoaXN9LGNvbXBsZXhDb2xvcjpmdW5jdGlvbihhLGIsZCl7dmFyIEQ9dGhpcy5yZW5kZXJlcixtLGUsdyxOLGssbCxnLHIseCxwLEssSj1bXSxUO2MuZmlyZUV2ZW50KHRoaXMucmVuZGVyZXIsXG5cImNvbXBsZXhDb2xvclwiLHthcmdzOmFyZ3VtZW50c30sZnVuY3Rpb24oKXthLnJhZGlhbEdyYWRpZW50P2U9XCJyYWRpYWxHcmFkaWVudFwiOmEubGluZWFyR3JhZGllbnQmJihlPVwibGluZWFyR3JhZGllbnRcIik7ZSYmKHc9YVtlXSxrPUQuZ3JhZGllbnRzLGc9YS5zdG9wcyxwPWQucmFkaWFsUmVmZXJlbmNlLHYodykmJihhW2VdPXc9e3gxOndbMF0seTE6d1sxXSx4Mjp3WzJdLHkyOndbM10sZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCJ9KSxcInJhZGlhbEdyYWRpZW50XCI9PT1lJiZwJiYhRyh3LmdyYWRpZW50VW5pdHMpJiYoTj13LHc9QSh3LEQuZ2V0UmFkaWFsQXR0cihwLE4pLHtncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0pKSxoKHcsZnVuY3Rpb24oYSxiKXtcImlkXCIhPT1iJiZKLnB1c2goYixhKX0pLGgoZyxmdW5jdGlvbihhKXtKLnB1c2goYSl9KSxKPUouam9pbihcIixcIiksa1tKXT9LPWtbSl0uYXR0cihcImlkXCIpOih3LmlkPUs9Yy51bmlxdWVLZXkoKSxrW0pdPWw9XG5ELmNyZWF0ZUVsZW1lbnQoZSkuYXR0cih3KS5hZGQoRC5kZWZzKSxsLnJhZEF0dHI9TixsLnN0b3BzPVtdLGcuZm9yRWFjaChmdW5jdGlvbihhKXswPT09YVsxXS5pbmRleE9mKFwicmdiYVwiKT8obT1jLmNvbG9yKGFbMV0pLHI9bS5nZXQoXCJyZ2JcIikseD1tLmdldChcImFcIikpOihyPWFbMV0seD0xKTthPUQuY3JlYXRlRWxlbWVudChcInN0b3BcIikuYXR0cih7b2Zmc2V0OmFbMF0sXCJzdG9wLWNvbG9yXCI6cixcInN0b3Atb3BhY2l0eVwiOnh9KS5hZGQobCk7bC5zdG9wcy5wdXNoKGEpfSkpLFQ9XCJ1cmwoXCIrRC51cmwrXCIjXCIrSytcIilcIixkLnNldEF0dHJpYnV0ZShiLFQpLGQuZ3JhZGllbnQ9SixhLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFR9KX0pfSxhcHBseVRleHRPdXRsaW5lOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudCxEOy0xIT09YS5pbmRleE9mKFwiY29udHJhc3RcIikmJihhPWEucmVwbGFjZSgvY29udHJhc3QvZyx0aGlzLnJlbmRlcmVyLmdldENvbnRyYXN0KGIuc3R5bGUuZmlsbCkpKTtcbmE9YS5zcGxpdChcIiBcIik7dmFyIGQ9YVthLmxlbmd0aC0xXTtpZigoRD1hWzBdKSYmXCJub25lXCIhPT1EJiZjLnN2Zyl7dGhpcy5mYWtlVFM9ITA7YT1bXS5zbGljZS5jYWxsKGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0c3BhblwiKSk7dGhpcy55U2V0dGVyPXRoaXMueFNldHRlcjtEPUQucmVwbGFjZSgvKF5bXFxkXFwuXSspKC4qPykkL2csZnVuY3Rpb24oYSxiLEQpe3JldHVybiAyKmIrRH0pO3RoaXMucmVtb3ZlVGV4dE91dGxpbmUoYSk7dmFyIG09Yi5maXJzdENoaWxkO2EuZm9yRWFjaChmdW5jdGlvbihhLGUpezA9PT1lJiYoYS5zZXRBdHRyaWJ1dGUoXCJ4XCIsYi5nZXRBdHRyaWJ1dGUoXCJ4XCIpKSxlPWIuZ2V0QXR0cmlidXRlKFwieVwiKSxhLnNldEF0dHJpYnV0ZShcInlcIixlfHwwKSxudWxsPT09ZSYmYi5zZXRBdHRyaWJ1dGUoXCJ5XCIsMCkpO2E9YS5jbG9uZU5vZGUoMSk7RihhLHtcImNsYXNzXCI6XCJoaWdoY2hhcnRzLXRleHQtb3V0bGluZVwiLGZpbGw6ZCxzdHJva2U6ZCxcInN0cm9rZS13aWR0aFwiOkQsXG5cInN0cm9rZS1saW5lam9pblwiOlwicm91bmRcIn0pO2IuaW5zZXJ0QmVmb3JlKGEsbSl9KX19LHJlbW92ZVRleHRPdXRsaW5lOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLmxlbmd0aCxEO2ItLTspRD1hW2JdLFwiaGlnaGNoYXJ0cy10ZXh0LW91dGxpbmVcIj09PUQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikmJkIoYSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQoRCkpfSxzeW1ib2xDdXN0b21BdHRyaWJzOlwieCB5IHdpZHRoIGhlaWdodCByIHN0YXJ0IGVuZCBpbm5lclIgYW5jaG9yWCBhbmNob3JZIHJvdW5kZWRcIi5zcGxpdChcIiBcIiksYXR0cjpmdW5jdGlvbihhLGIsZCxlKXt2YXIgRD10aGlzLmVsZW1lbnQsbSx3PXRoaXMsTixrLGw9dGhpcy5zeW1ib2xDdXN0b21BdHRyaWJzO2lmKFwic3RyaW5nXCI9PT10eXBlb2YgYSYmdm9pZCAwIT09Yil7dmFyIGc9YTthPXt9O2FbZ109Yn1cInN0cmluZ1wiPT09dHlwZW9mIGE/dz0odGhpc1thK1wiR2V0dGVyXCJdfHx0aGlzLl9kZWZhdWx0R2V0dGVyKS5jYWxsKHRoaXMsXG5hLEQpOihoKGEsZnVuY3Rpb24oYixkKXtOPSExO2V8fEsodGhpcyxkKTt0aGlzLnN5bWJvbE5hbWUmJi0xIT09Yy5pbkFycmF5KGQsbCkmJihtfHwodGhpcy5zeW1ib2xBdHRyKGEpLG09ITApLE49ITApOyF0aGlzLnJvdGF0aW9ufHxcInhcIiE9PWQmJlwieVwiIT09ZHx8KHRoaXMuZG9UcmFuc2Zvcm09ITApO058fChrPXRoaXNbZCtcIlNldHRlclwiXXx8dGhpcy5fZGVmYXVsdFNldHRlcixrLmNhbGwodGhpcyxiLGQsRCksIXRoaXMuc3R5bGVkTW9kZSYmdGhpcy5zaGFkb3dzJiYvXih3aWR0aHxoZWlnaHR8dmlzaWJpbGl0eXx4fHl8ZHx0cmFuc2Zvcm18Y3h8Y3l8cikkLy50ZXN0KGQpJiZ0aGlzLnVwZGF0ZVNoYWRvd3MoZCxiLGspKX0sdGhpcyksdGhpcy5hZnRlclNldHRlcnMoKSk7ZCYmZC5jYWxsKHRoaXMpO3JldHVybiB3fSxhZnRlclNldHRlcnM6ZnVuY3Rpb24oKXt0aGlzLmRvVHJhbnNmb3JtJiYodGhpcy51cGRhdGVUcmFuc2Zvcm0oKSx0aGlzLmRvVHJhbnNmb3JtPSExKX0sdXBkYXRlU2hhZG93czpmdW5jdGlvbihhLFxuYixkKXtmb3IodmFyIEQ9dGhpcy5zaGFkb3dzLGU9RC5sZW5ndGg7ZS0tOylkLmNhbGwoRFtlXSxcImhlaWdodFwiPT09YT9NYXRoLm1heChiLShEW2VdLmN1dEhlaWdodHx8MCksMCk6XCJkXCI9PT1hP3RoaXMuZDpiLGEsRFtlXSl9LGFkZENsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIEQ9Yj9cIlwiOnRoaXMuYXR0cihcImNsYXNzXCIpfHxcIlwiO2E9KGF8fFwiXCIpLnNwbGl0KC8gL2cpLnJlZHVjZShmdW5jdGlvbihhLGIpey0xPT09RC5pbmRleE9mKGIpJiZhLnB1c2goYik7cmV0dXJuIGF9LEQ/W0RdOltdKS5qb2luKFwiIFwiKTthIT09RCYmdGhpcy5hdHRyKFwiY2xhc3NcIixhKTtyZXR1cm4gdGhpc30saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuLTEhPT0odGhpcy5hdHRyKFwiY2xhc3NcIil8fFwiXCIpLnNwbGl0KFwiIFwiKS5pbmRleE9mKGEpfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hdHRyKFwiY2xhc3NcIiwodGhpcy5hdHRyKFwiY2xhc3NcIil8fFwiXCIpLnJlcGxhY2UoeShhKT9uZXcgUmVnRXhwKFwiID9cIitcbmErXCIgP1wiKTphLFwiXCIpKX0sc3ltYm9sQXR0cjpmdW5jdGlvbihhKXt2YXIgYj10aGlzO1wieCB5IHIgc3RhcnQgZW5kIHdpZHRoIGhlaWdodCBpbm5lclIgYW5jaG9yWCBhbmNob3JZIGNsb2Nrd2lzZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKEQpe2JbRF09bihhW0RdLGJbRF0pfSk7Yi5hdHRyKHtkOmIucmVuZGVyZXIuc3ltYm9sc1tiLnN5bWJvbE5hbWVdKGIueCxiLnksYi53aWR0aCxiLmhlaWdodCxiKX0pfSxjbGlwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmF0dHIoXCJjbGlwLXBhdGhcIixhP1widXJsKFwiK3RoaXMucmVuZGVyZXIudXJsK1wiI1wiK2EuaWQrXCIpXCI6XCJub25lXCIpfSxjcmlzcDpmdW5jdGlvbihhLGIpe2I9Ynx8YS5zdHJva2VXaWR0aHx8MDt2YXIgRD1NYXRoLnJvdW5kKGIpJTIvMjthLng9TWF0aC5mbG9vcihhLnh8fHRoaXMueHx8MCkrRDthLnk9TWF0aC5mbG9vcihhLnl8fHRoaXMueXx8MCkrRDthLndpZHRoPU1hdGguZmxvb3IoKGEud2lkdGh8fHRoaXMud2lkdGh8fFxuMCktMipEKTthLmhlaWdodD1NYXRoLmZsb29yKChhLmhlaWdodHx8dGhpcy5oZWlnaHR8fDApLTIqRCk7RyhhLnN0cm9rZVdpZHRoKSYmKGEuc3Ryb2tlV2lkdGg9Yik7cmV0dXJuIGF9LGNzczpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnN0eWxlcyxEPXt9LGQ9dGhpcy5lbGVtZW50LGU9XCJcIixtPSFiLHc9W1widGV4dE91dGxpbmVcIixcInRleHRPdmVyZmxvd1wiLFwid2lkdGhcIl07YSYmYS5jb2xvciYmKGEuZmlsbD1hLmNvbG9yKTtiJiZoKGEsZnVuY3Rpb24oYSxkKXthIT09YltkXSYmKERbZF09YSxtPSEwKX0pO2lmKG0pe2ImJihhPXQoYixEKSk7aWYoYSlpZihudWxsPT09YS53aWR0aHx8XCJhdXRvXCI9PT1hLndpZHRoKWRlbGV0ZSB0aGlzLnRleHRXaWR0aDtlbHNlIGlmKFwidGV4dFwiPT09ZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZhLndpZHRoKXZhciBrPXRoaXMudGV4dFdpZHRoPXEoYS53aWR0aCk7dGhpcy5zdHlsZXM9YTtrJiYhSiYmdGhpcy5yZW5kZXJlci5mb3JFeHBvcnQmJmRlbGV0ZSBhLndpZHRoO1xuaWYoZC5uYW1lc3BhY2VVUkk9PT10aGlzLlNWR19OUyl7dmFyIGc9ZnVuY3Rpb24oYSxiKXtyZXR1cm5cIi1cIitiLnRvTG93ZXJDYXNlKCl9O2goYSxmdW5jdGlvbihhLGIpey0xPT09dy5pbmRleE9mKGIpJiYoZSs9Yi5yZXBsYWNlKC8oW0EtWl0pL2csZykrXCI6XCIrYStcIjtcIil9KTtlJiZGKGQsXCJzdHlsZVwiLGUpfWVsc2UgbChkLGEpO3RoaXMuYWRkZWQmJihcInRleHRcIj09PXRoaXMuZWxlbWVudC5ub2RlTmFtZSYmdGhpcy5yZW5kZXJlci5idWlsZFRleHQodGhpcyksYSYmYS50ZXh0T3V0bGluZSYmdGhpcy5hcHBseVRleHRPdXRsaW5lKGEudGV4dE91dGxpbmUpKX1yZXR1cm4gdGhpc30sZ2V0U3R5bGU6ZnVuY3Rpb24oYSl7cmV0dXJuIFEuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnR8fHRoaXMsXCJcIikuZ2V0UHJvcGVydHlWYWx1ZShhKX0sc3Ryb2tlV2lkdGg6ZnVuY3Rpb24oKXtpZighdGhpcy5yZW5kZXJlci5zdHlsZWRNb2RlKXJldHVybiB0aGlzW1wic3Ryb2tlLXdpZHRoXCJdfHxcbjA7dmFyIGE9dGhpcy5nZXRTdHlsZShcInN0cm9rZS13aWR0aFwiKTtpZihhLmluZGV4T2YoXCJweFwiKT09PWEubGVuZ3RoLTIpYT1xKGEpO2Vsc2V7dmFyIGI9cC5jcmVhdGVFbGVtZW50TlMoVSxcInJlY3RcIik7RihiLHt3aWR0aDphLFwic3Ryb2tlLXdpZHRoXCI6MH0pO3RoaXMuZWxlbWVudC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGIpO2E9Yi5nZXRCQm94KCkud2lkdGg7Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpfXJldHVybiBhfSxvbjpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMsRD1kLmVsZW1lbnQ7dSYmXCJjbGlja1wiPT09YT8oRC5vbnRvdWNoc3RhcnQ9ZnVuY3Rpb24oYSl7ZC50b3VjaEV2ZW50RmlyZWQ9RGF0ZS5ub3coKTthLnByZXZlbnREZWZhdWx0KCk7Yi5jYWxsKEQsYSl9LEQub25jbGljaz1mdW5jdGlvbihhKXsoLTE9PT1RLm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIkFuZHJvaWRcIil8fDExMDA8RGF0ZS5ub3coKS0oZC50b3VjaEV2ZW50RmlyZWR8fDApKSYmYi5jYWxsKEQsXG5hKX0pOkRbXCJvblwiK2FdPWI7cmV0dXJuIHRoaXN9LHNldFJhZGlhbFJlZmVyZW5jZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnJlbmRlcmVyLmdyYWRpZW50c1t0aGlzLmVsZW1lbnQuZ3JhZGllbnRdO3RoaXMuZWxlbWVudC5yYWRpYWxSZWZlcmVuY2U9YTtiJiZiLnJhZEF0dHImJmIuYW5pbWF0ZSh0aGlzLnJlbmRlcmVyLmdldFJhZGlhbEF0dHIoYSxiLnJhZEF0dHIpKTtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYXR0cih7dHJhbnNsYXRlWDphLHRyYW5zbGF0ZVk6Yn0pfSxpbnZlcnQ6ZnVuY3Rpb24oYSl7dGhpcy5pbnZlcnRlZD1hO3RoaXMudXBkYXRlVHJhbnNmb3JtKCk7cmV0dXJuIHRoaXN9LHVwZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbigpe3ZhciBhPXRoaXMudHJhbnNsYXRlWHx8MCxiPXRoaXMudHJhbnNsYXRlWXx8MCxkPXRoaXMuc2NhbGVYLGU9dGhpcy5zY2FsZVksbT10aGlzLmludmVydGVkLHc9dGhpcy5yb3RhdGlvbixrPVxudGhpcy5tYXRyaXgsbD10aGlzLmVsZW1lbnQ7bSYmKGErPXRoaXMud2lkdGgsYis9dGhpcy5oZWlnaHQpO2E9W1widHJhbnNsYXRlKFwiK2ErXCIsXCIrYitcIilcIl07RyhrKSYmYS5wdXNoKFwibWF0cml4KFwiK2suam9pbihcIixcIikrXCIpXCIpO20/YS5wdXNoKFwicm90YXRlKDkwKSBzY2FsZSgtMSwxKVwiKTp3JiZhLnB1c2goXCJyb3RhdGUoXCIrdytcIiBcIituKHRoaXMucm90YXRpb25PcmlnaW5YLGwuZ2V0QXR0cmlidXRlKFwieFwiKSwwKStcIiBcIituKHRoaXMucm90YXRpb25PcmlnaW5ZLGwuZ2V0QXR0cmlidXRlKFwieVwiKXx8MCkrXCIpXCIpOyhHKGQpfHxHKGUpKSYmYS5wdXNoKFwic2NhbGUoXCIrbihkLDEpK1wiIFwiK24oZSwxKStcIilcIik7YS5sZW5ndGgmJmwuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsYS5qb2luKFwiIFwiKSl9LHRvRnJvbnQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmVsZW1lbnQ7YS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGEpO3JldHVybiB0aGlzfSxhbGlnbjpmdW5jdGlvbihhLGIsZCl7dmFyIGUsXG5tPXt9O3ZhciBEPXRoaXMucmVuZGVyZXI7dmFyIHc9RC5hbGlnbmVkT2JqZWN0czt2YXIgayxsO2lmKGEpe2lmKHRoaXMuYWxpZ25PcHRpb25zPWEsdGhpcy5hbGlnbkJ5VHJhbnNsYXRlPWIsIWR8fHkoZCkpdGhpcy5hbGlnblRvPWU9ZHx8XCJyZW5kZXJlclwiLEIodyx0aGlzKSx3LnB1c2godGhpcyksZD1udWxsfWVsc2UgYT10aGlzLmFsaWduT3B0aW9ucyxiPXRoaXMuYWxpZ25CeVRyYW5zbGF0ZSxlPXRoaXMuYWxpZ25UbztkPW4oZCxEW2VdLEQpO2U9YS5hbGlnbjtEPWEudmVydGljYWxBbGlnbjt3PShkLnh8fDApKyhhLnh8fDApO3ZhciBOPShkLnl8fDApKyhhLnl8fDApO1wicmlnaHRcIj09PWU/az0xOlwiY2VudGVyXCI9PT1lJiYoaz0yKTtrJiYodys9KGQud2lkdGgtKGEud2lkdGh8fDApKS9rKTttW2I/XCJ0cmFuc2xhdGVYXCI6XCJ4XCJdPU1hdGgucm91bmQodyk7XCJib3R0b21cIj09PUQ/bD0xOlwibWlkZGxlXCI9PT1EJiYobD0yKTtsJiYoTis9KGQuaGVpZ2h0LShhLmhlaWdodHx8MCkpL1xubCk7bVtiP1widHJhbnNsYXRlWVwiOlwieVwiXT1NYXRoLnJvdW5kKE4pO3RoaXNbdGhpcy5wbGFjZWQ/XCJhbmltYXRlXCI6XCJhdHRyXCJdKG0pO3RoaXMucGxhY2VkPSEwO3RoaXMuYWxpZ25BdHRyPW07cmV0dXJuIHRoaXN9LGdldEJCb3g6ZnVuY3Rpb24oYSxiKXt2YXIgZCxlPXRoaXMucmVuZGVyZXIsbT10aGlzLmVsZW1lbnQsRD10aGlzLnN0eWxlcyx3PXRoaXMudGV4dFN0cixrLGw9ZS5jYWNoZSxOPWUuY2FjaGVLZXlzLGc9bS5uYW1lc3BhY2VVUkk9PT10aGlzLlNWR19OUztiPW4oYix0aGlzLnJvdGF0aW9uLDApO3ZhciByPWUuc3R5bGVkTW9kZT9tJiZPLnByb3RvdHlwZS5nZXRTdHlsZS5jYWxsKG0sXCJmb250LXNpemVcIik6RCYmRC5mb250U2l6ZTtpZihHKHcpKXt2YXIgYz13LnRvU3RyaW5nKCk7LTE9PT1jLmluZGV4T2YoXCI8XCIpJiYoYz1jLnJlcGxhY2UoL1swLTldL2csXCIwXCIpKTtjKz1bXCJcIixiLHIsdGhpcy50ZXh0V2lkdGgsRCYmRC50ZXh0T3ZlcmZsb3ddLmpvaW4oKX1jJiYhYSYmXG4oZD1sW2NdKTtpZighZCl7aWYoZ3x8ZS5mb3JFeHBvcnQpe3RyeXsoaz10aGlzLmZha2VUUyYmZnVuY3Rpb24oYSl7W10uZm9yRWFjaC5jYWxsKG0ucXVlcnlTZWxlY3RvckFsbChcIi5oaWdoY2hhcnRzLXRleHQtb3V0bGluZVwiKSxmdW5jdGlvbihiKXtiLnN0eWxlLmRpc3BsYXk9YX0pfSkmJmsoXCJub25lXCIpLGQ9bS5nZXRCQm94P3Qoe30sbS5nZXRCQm94KCkpOnt3aWR0aDptLm9mZnNldFdpZHRoLGhlaWdodDptLm9mZnNldEhlaWdodH0sayYmayhcIlwiKX1jYXRjaChhYSl7XCJcIn1pZighZHx8MD5kLndpZHRoKWQ9e3dpZHRoOjAsaGVpZ2h0OjB9fWVsc2UgZD10aGlzLmh0bWxHZXRCQm94KCk7ZS5pc1NWRyYmKGE9ZC53aWR0aCxlPWQuaGVpZ2h0LGcmJihkLmhlaWdodD1lPXtcIjExcHgsMTdcIjoxNCxcIjEzcHgsMjBcIjoxNn1bRCYmRC5mb250U2l6ZStcIixcIitNYXRoLnJvdW5kKGUpXXx8ZSksYiYmKEQ9YipFLGQud2lkdGg9TWF0aC5hYnMoZSpNYXRoLnNpbihEKSkrTWF0aC5hYnMoYSpNYXRoLmNvcyhEKSksXG5kLmhlaWdodD1NYXRoLmFicyhlKk1hdGguY29zKEQpKStNYXRoLmFicyhhKk1hdGguc2luKEQpKSkpO2lmKGMmJjA8ZC5oZWlnaHQpe2Zvcig7MjUwPE4ubGVuZ3RoOylkZWxldGUgbFtOLnNoaWZ0KCldO2xbY118fE4ucHVzaChjKTtsW2NdPWR9fXJldHVybiBkfSxzaG93OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmF0dHIoe3Zpc2liaWxpdHk6YT9cImluaGVyaXRcIjpcInZpc2libGVcIn0pfSxoaWRlOmZ1bmN0aW9uKGEpe2E/dGhpcy5hdHRyKHt5Oi05OTk5fSk6dGhpcy5hdHRyKHt2aXNpYmlsaXR5OlwiaGlkZGVuXCJ9KTtyZXR1cm4gdGhpc30sZmFkZU91dDpmdW5jdGlvbihhKXt2YXIgYj10aGlzO2IuYW5pbWF0ZSh7b3BhY2l0eTowfSx7ZHVyYXRpb246YXx8MTUwLGNvbXBsZXRlOmZ1bmN0aW9uKCl7Yi5hdHRyKHt5Oi05OTk5fSl9fSl9LGFkZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnJlbmRlcmVyLGQ9dGhpcy5lbGVtZW50O2EmJih0aGlzLnBhcmVudEdyb3VwPWEpO3RoaXMucGFyZW50SW52ZXJ0ZWQ9XG5hJiZhLmludmVydGVkO3ZvaWQgMCE9PXRoaXMudGV4dFN0ciYmYi5idWlsZFRleHQodGhpcyk7dGhpcy5hZGRlZD0hMDtpZighYXx8YS5oYW5kbGVafHx0aGlzLnpJbmRleCl2YXIgZT10aGlzLnpJbmRleFNldHRlcigpO2V8fChhP2EuZWxlbWVudDpiLmJveCkuYXBwZW5kQ2hpbGQoZCk7aWYodGhpcy5vbkFkZCl0aGlzLm9uQWRkKCk7cmV0dXJuIHRoaXN9LHNhZmVSZW1vdmVDaGlsZDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7YiYmYi5yZW1vdmVDaGlsZChhKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmVsZW1lbnR8fHt9LGQ9YS5yZW5kZXJlcixlPWQuaXNTVkcmJlwiU1BBTlwiPT09Yi5ub2RlTmFtZSYmYS5wYXJlbnRHcm91cCxtPWIub3duZXJTVkdFbGVtZW50LHc9YS5jbGlwUGF0aDtiLm9uY2xpY2s9Yi5vbm1vdXNlb3V0PWIub25tb3VzZW92ZXI9Yi5vbm1vdXNlbW92ZT1iLnBvaW50PW51bGw7SyhhKTt3JiZtJiYoW10uZm9yRWFjaC5jYWxsKG0ucXVlcnlTZWxlY3RvckFsbChcIltjbGlwLXBhdGhdLFtDTElQLVBBVEhdXCIpLFxuZnVuY3Rpb24oYSl7LTE8YS5nZXRBdHRyaWJ1dGUoXCJjbGlwLXBhdGhcIikuaW5kZXhPZih3LmVsZW1lbnQuaWQpJiZhLnJlbW92ZUF0dHJpYnV0ZShcImNsaXAtcGF0aFwiKX0pLGEuY2xpcFBhdGg9dy5kZXN0cm95KCkpO2lmKGEuc3RvcHMpe2ZvcihtPTA7bTxhLnN0b3BzLmxlbmd0aDttKyspYS5zdG9wc1ttXT1hLnN0b3BzW21dLmRlc3Ryb3koKTthLnN0b3BzPW51bGx9YS5zYWZlUmVtb3ZlQ2hpbGQoYik7Zm9yKGQuc3R5bGVkTW9kZXx8YS5kZXN0cm95U2hhZG93cygpO2UmJmUuZGl2JiYwPT09ZS5kaXYuY2hpbGROb2Rlcy5sZW5ndGg7KWI9ZS5wYXJlbnRHcm91cCxhLnNhZmVSZW1vdmVDaGlsZChlLmRpdiksZGVsZXRlIGUuZGl2LGU9YjthLmFsaWduVG8mJkIoZC5hbGlnbmVkT2JqZWN0cyxhKTtoKGEsZnVuY3Rpb24oYixkKXthW2RdJiZhW2RdLnBhcmVudEdyb3VwPT09YSYmYVtkXS5kZXN0cm95JiZhW2RdLmRlc3Ryb3koKTtkZWxldGUgYVtkXX0pfSxzaGFkb3c6ZnVuY3Rpb24oYSxcbmIsZCl7dmFyIGU9W10sbSx3PXRoaXMuZWxlbWVudDtpZighYSl0aGlzLmRlc3Ryb3lTaGFkb3dzKCk7ZWxzZSBpZighdGhpcy5zaGFkb3dzKXt2YXIgRD1uKGEud2lkdGgsMyk7dmFyIGs9KGEub3BhY2l0eXx8LjE1KS9EO3ZhciBsPXRoaXMucGFyZW50SW52ZXJ0ZWQ/XCIoLTEsLTEpXCI6XCIoXCIrbihhLm9mZnNldFgsMSkrXCIsIFwiK24oYS5vZmZzZXRZLDEpK1wiKVwiO2ZvcihtPTE7bTw9RDttKyspe3ZhciBnPXcuY2xvbmVOb2RlKDApO3ZhciByPTIqRCsxLTIqbTtGKGcse3N0cm9rZTphLmNvbG9yfHxcIiMwMDAwMDBcIixcInN0cm9rZS1vcGFjaXR5XCI6ayptLFwic3Ryb2tlLXdpZHRoXCI6cix0cmFuc2Zvcm06XCJ0cmFuc2xhdGVcIitsLGZpbGw6XCJub25lXCJ9KTtnLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsKGcuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpK1wiIGhpZ2hjaGFydHMtc2hhZG93XCIpO2QmJihGKGcsXCJoZWlnaHRcIixNYXRoLm1heChGKGcsXCJoZWlnaHRcIiktciwwKSksZy5jdXRIZWlnaHQ9cik7XG5iP2IuZWxlbWVudC5hcHBlbmRDaGlsZChnKTp3LnBhcmVudE5vZGUmJncucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyx3KTtlLnB1c2goZyl9dGhpcy5zaGFkb3dzPWV9cmV0dXJuIHRoaXN9LGRlc3Ryb3lTaGFkb3dzOmZ1bmN0aW9uKCl7KHRoaXMuc2hhZG93c3x8W10pLmZvckVhY2goZnVuY3Rpb24oYSl7dGhpcy5zYWZlUmVtb3ZlQ2hpbGQoYSl9LHRoaXMpO3RoaXMuc2hhZG93cz12b2lkIDB9LHhHZXR0ZXI6ZnVuY3Rpb24oYSl7XCJjaXJjbGVcIj09PXRoaXMuZWxlbWVudC5ub2RlTmFtZSYmKFwieFwiPT09YT9hPVwiY3hcIjpcInlcIj09PWEmJihhPVwiY3lcIikpO3JldHVybiB0aGlzLl9kZWZhdWx0R2V0dGVyKGEpfSxfZGVmYXVsdEdldHRlcjpmdW5jdGlvbihhKXthPW4odGhpc1thK1wiVmFsdWVcIl0sdGhpc1thXSx0aGlzLmVsZW1lbnQ/dGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZShhKTpudWxsLDApOy9eW1xcLTAtOVxcLl0rJC8udGVzdChhKSYmKGE9cGFyc2VGbG9hdChhKSk7cmV0dXJuIGF9LFxuZFNldHRlcjpmdW5jdGlvbihhLGIsZCl7YSYmYS5qb2luJiYoYT1hLmpvaW4oXCIgXCIpKTsvKE5hTnwgezJ9fF4kKS8udGVzdChhKSYmKGE9XCJNIDAgMFwiKTt0aGlzW2JdIT09YSYmKGQuc2V0QXR0cmlidXRlKGIsYSksdGhpc1tiXT1hKX0sZGFzaHN0eWxlU2V0dGVyOmZ1bmN0aW9uKGEpe3ZhciBiLGQ9dGhpc1tcInN0cm9rZS13aWR0aFwiXTtcImluaGVyaXRcIj09PWQmJihkPTEpO2lmKGE9YSYmYS50b0xvd2VyQ2FzZSgpKXthPWEucmVwbGFjZShcInNob3J0ZGFzaGRvdGRvdFwiLFwiMywxLDEsMSwxLDEsXCIpLnJlcGxhY2UoXCJzaG9ydGRhc2hkb3RcIixcIjMsMSwxLDFcIikucmVwbGFjZShcInNob3J0ZG90XCIsXCIxLDEsXCIpLnJlcGxhY2UoXCJzaG9ydGRhc2hcIixcIjMsMSxcIikucmVwbGFjZShcImxvbmdkYXNoXCIsXCI4LDMsXCIpLnJlcGxhY2UoL2RvdC9nLFwiMSwzLFwiKS5yZXBsYWNlKFwiZGFzaFwiLFwiNCwzLFwiKS5yZXBsYWNlKC8sJC8sXCJcIikuc3BsaXQoXCIsXCIpO2ZvcihiPWEubGVuZ3RoO2ItLTspYVtiXT1xKGFbYl0pKlxuZDthPWEuam9pbihcIixcIikucmVwbGFjZSgvTmFOL2csXCJub25lXCIpO3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtZGFzaGFycmF5XCIsYSl9fSxhbGlnblNldHRlcjpmdW5jdGlvbihhKXt2YXIgYj17bGVmdDpcInN0YXJ0XCIsY2VudGVyOlwibWlkZGxlXCIscmlnaHQ6XCJlbmRcIn07YlthXSYmKHRoaXMuYWxpZ25WYWx1ZT1hLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0ZXh0LWFuY2hvclwiLGJbYV0pKX0sb3BhY2l0eVNldHRlcjpmdW5jdGlvbihhLGIsZCl7dGhpc1tiXT1hO2Quc2V0QXR0cmlidXRlKGIsYSl9LHRpdGxlU2V0dGVyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRpdGxlXCIpWzBdO2J8fChiPXAuY3JlYXRlRWxlbWVudE5TKHRoaXMuU1ZHX05TLFwidGl0bGVcIiksdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGIpKTtiLmZpcnN0Q2hpbGQmJmIucmVtb3ZlQ2hpbGQoYi5maXJzdENoaWxkKTtiLmFwcGVuZENoaWxkKHAuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKG4oYSxcblwiXCIpKS5yZXBsYWNlKC88W14+XSo+L2csXCJcIikucmVwbGFjZSgvJmx0Oy9nLFwiPFwiKS5yZXBsYWNlKC8mZ3Q7L2csXCI+XCIpKSl9LHRleHRTZXR0ZXI6ZnVuY3Rpb24oYSl7YSE9PXRoaXMudGV4dFN0ciYmKGRlbGV0ZSB0aGlzLmJCb3gsZGVsZXRlIHRoaXMudGV4dFB4TGVuZ3RoLHRoaXMudGV4dFN0cj1hLHRoaXMuYWRkZWQmJnRoaXMucmVuZGVyZXIuYnVpbGRUZXh0KHRoaXMpKX0sc2V0VGV4dFBhdGg6ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzLmVsZW1lbnQsZT17dGV4dEFuY2hvcjpcInRleHQtYW5jaG9yXCJ9LG09ITEsRD10aGlzLnRleHRQYXRoV3JhcHBlcixrPSFEO2I9QSghMCx7ZW5hYmxlZDohMCxhdHRyaWJ1dGVzOntkeTotNSxzdGFydE9mZnNldDpcIjUwJVwiLHRleHRBbmNob3I6XCJtaWRkbGVcIn19LGIpO3ZhciBsPWIuYXR0cmlidXRlcztpZihhJiZiJiZiLmVuYWJsZWQpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLnBhZGRpbmcmJihsLmR4PS10aGlzLm9wdGlvbnMucGFkZGluZyk7XG5EfHwodGhpcy50ZXh0UGF0aFdyYXBwZXI9RD10aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0UGF0aFwiKSxtPSEwKTt2YXIgZz1ELmVsZW1lbnQ7KGI9YS5lbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpKXx8YS5lbGVtZW50LnNldEF0dHJpYnV0ZShcImlkXCIsYj1jLnVuaXF1ZUtleSgpKTtpZihrKWZvcihhPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0c3BhblwiKTthLmxlbmd0aDspYVswXS5zZXRBdHRyaWJ1dGUoXCJ5XCIsMCksZy5hcHBlbmRDaGlsZChhWzBdKTttJiZELmFkZCh7ZWxlbWVudDp0aGlzLnRleHQ/dGhpcy50ZXh0LmVsZW1lbnQ6ZH0pO2cuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJocmVmXCIsdGhpcy5yZW5kZXJlci51cmwrXCIjXCIrYik7RyhsLmR5KSYmKGcucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoXCJkeVwiLGwuZHkpLGRlbGV0ZSBsLmR5KTtHKGwuZHgpJiYoZy5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZShcImR4XCIsbC5keCksXG5kZWxldGUgbC5keCk7aChsLGZ1bmN0aW9uKGEsYil7Zy5zZXRBdHRyaWJ1dGUoZVtiXXx8YixhKX0pO2QucmVtb3ZlQXR0cmlidXRlKFwidHJhbnNmb3JtXCIpO3RoaXMucmVtb3ZlVGV4dE91dGxpbmUuY2FsbChELFtdLnNsaWNlLmNhbGwoZC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRzcGFuXCIpKSk7dGhpcy50ZXh0JiYhdGhpcy5yZW5kZXJlci5zdHlsZWRNb2RlJiZ0aGlzLmF0dHIoe2ZpbGw6XCJub25lXCIsXCJzdHJva2Utd2lkdGhcIjowfSk7dGhpcy5hcHBseVRleHRPdXRsaW5lPXRoaXMudXBkYXRlVHJhbnNmb3JtPXd9ZWxzZSBEJiYoZGVsZXRlIHRoaXMudXBkYXRlVHJhbnNmb3JtLGRlbGV0ZSB0aGlzLmFwcGx5VGV4dE91dGxpbmUsdGhpcy5kZXN0cm95VGV4dFBhdGgoZCxhKSk7cmV0dXJuIHRoaXN9LGRlc3Ryb3lUZXh0UGF0aDpmdW5jdGlvbihhLGIpe3ZhciBkO2IuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLFwiXCIpO2ZvcihkPXRoaXMudGV4dFBhdGhXcmFwcGVyLmVsZW1lbnQuY2hpbGROb2RlcztkLmxlbmd0aDspYS5maXJzdENoaWxkLmFwcGVuZENoaWxkKGRbMF0pO1xuYS5maXJzdENoaWxkLnJlbW92ZUNoaWxkKHRoaXMudGV4dFBhdGhXcmFwcGVyLmVsZW1lbnQpO2RlbGV0ZSBiLnRleHRQYXRoV3JhcHBlcn0sZmlsbFNldHRlcjpmdW5jdGlvbihhLGIsZCl7XCJzdHJpbmdcIj09PXR5cGVvZiBhP2Quc2V0QXR0cmlidXRlKGIsYSk6YSYmdGhpcy5jb21wbGV4Q29sb3IoYSxiLGQpfSx2aXNpYmlsaXR5U2V0dGVyOmZ1bmN0aW9uKGEsYixkKXtcImluaGVyaXRcIj09PWE/ZC5yZW1vdmVBdHRyaWJ1dGUoYik6dGhpc1tiXSE9PWEmJmQuc2V0QXR0cmlidXRlKGIsYSk7dGhpc1tiXT1hfSx6SW5kZXhTZXR0ZXI6ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzLnJlbmRlcmVyLGU9dGhpcy5wYXJlbnRHcm91cCxtPShlfHxkKS5lbGVtZW50fHxkLmJveCx3PXRoaXMuZWxlbWVudCxrPSExO2Q9bT09PWQuYm94O3ZhciBEPXRoaXMuYWRkZWQ7dmFyIGw7RyhhKT8ody5zZXRBdHRyaWJ1dGUoXCJkYXRhLXotaW5kZXhcIixhKSxhPSthLHRoaXNbYl09PT1hJiYoRD0hMSkpOkcodGhpc1tiXSkmJlxudy5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXotaW5kZXhcIik7dGhpc1tiXT1hO2lmKEQpeyhhPXRoaXMuekluZGV4KSYmZSYmKGUuaGFuZGxlWj0hMCk7Yj1tLmNoaWxkTm9kZXM7Zm9yKGw9Yi5sZW5ndGgtMTswPD1sJiYhaztsLS0pe2U9YltsXTtEPWUuZ2V0QXR0cmlidXRlKFwiZGF0YS16LWluZGV4XCIpO3ZhciBnPSFHKEQpO2lmKGUhPT13KWlmKDA+YSYmZyYmIWQmJiFsKW0uaW5zZXJ0QmVmb3JlKHcsYltsXSksaz0hMDtlbHNlIGlmKHEoRCk8PWF8fGcmJighRyhhKXx8MDw9YSkpbS5pbnNlcnRCZWZvcmUodyxiW2wrMV18fG51bGwpLGs9ITB9a3x8KG0uaW5zZXJ0QmVmb3JlKHcsYltkPzM6MF18fG51bGwpLGs9ITApfXJldHVybiBrfSxfZGVmYXVsdFNldHRlcjpmdW5jdGlvbihhLGIsZCl7ZC5zZXRBdHRyaWJ1dGUoYixhKX19KTtPLnByb3RvdHlwZS55R2V0dGVyPU8ucHJvdG90eXBlLnhHZXR0ZXI7Ty5wcm90b3R5cGUudHJhbnNsYXRlWFNldHRlcj1PLnByb3RvdHlwZS50cmFuc2xhdGVZU2V0dGVyPVxuTy5wcm90b3R5cGUucm90YXRpb25TZXR0ZXI9Ty5wcm90b3R5cGUudmVydGljYWxBbGlnblNldHRlcj1PLnByb3RvdHlwZS5yb3RhdGlvbk9yaWdpblhTZXR0ZXI9Ty5wcm90b3R5cGUucm90YXRpb25PcmlnaW5ZU2V0dGVyPU8ucHJvdG90eXBlLnNjYWxlWFNldHRlcj1PLnByb3RvdHlwZS5zY2FsZVlTZXR0ZXI9Ty5wcm90b3R5cGUubWF0cml4U2V0dGVyPWZ1bmN0aW9uKGEsYil7dGhpc1tiXT1hO3RoaXMuZG9UcmFuc2Zvcm09ITB9O08ucHJvdG90eXBlW1wic3Ryb2tlLXdpZHRoU2V0dGVyXCJdPU8ucHJvdG90eXBlLnN0cm9rZVNldHRlcj1mdW5jdGlvbihhLGIsZCl7dGhpc1tiXT1hO3RoaXMuc3Ryb2tlJiZ0aGlzW1wic3Ryb2tlLXdpZHRoXCJdPyhPLnByb3RvdHlwZS5maWxsU2V0dGVyLmNhbGwodGhpcyx0aGlzLnN0cm9rZSxcInN0cm9rZVwiLGQpLGQuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsdGhpc1tcInN0cm9rZS13aWR0aFwiXSksdGhpcy5oYXNTdHJva2U9ITApOlwic3Ryb2tlLXdpZHRoXCI9PT1cbmImJjA9PT1hJiZ0aGlzLmhhc1N0cm9rZT8oZC5yZW1vdmVBdHRyaWJ1dGUoXCJzdHJva2VcIiksdGhpcy5oYXNTdHJva2U9ITEpOnRoaXMucmVuZGVyZXIuc3R5bGVkTW9kZSYmdGhpc1tcInN0cm9rZS13aWR0aFwiXSYmKGQuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsdGhpc1tcInN0cm9rZS13aWR0aFwiXSksdGhpcy5oYXNTdHJva2U9ITApfTtmPWMuU1ZHUmVuZGVyZXI9ZnVuY3Rpb24oKXt0aGlzLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt0KGYucHJvdG90eXBlLHtFbGVtZW50Ok8sU1ZHX05TOlUsaW5pdDpmdW5jdGlvbihhLGQsZSxtLHcsZyxyKXt2YXIgRD10aGlzLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIikuYXR0cih7dmVyc2lvbjpcIjEuMVwiLFwiY2xhc3NcIjpcImhpZ2hjaGFydHMtcm9vdFwifSk7cnx8RC5jc3ModGhpcy5nZXRTdHlsZShtKSk7bT1ELmVsZW1lbnQ7YS5hcHBlbmRDaGlsZChtKTtGKGEsXCJkaXJcIixcImx0clwiKTstMT09PWEuaW5uZXJIVE1MLmluZGV4T2YoXCJ4bWxuc1wiKSYmXG5GKG0sXCJ4bWxuc1wiLHRoaXMuU1ZHX05TKTt0aGlzLmlzU1ZHPSEwO3RoaXMuYm94PW07dGhpcy5ib3hXcmFwcGVyPUQ7dGhpcy5hbGlnbmVkT2JqZWN0cz1bXTt0aGlzLnVybD0oa3x8eCkmJnAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJiYXNlXCIpLmxlbmd0aD9RLmxvY2F0aW9uLmhyZWYuc3BsaXQoXCIjXCIpWzBdLnJlcGxhY2UoLzxbXj5dKj4vZyxcIlwiKS5yZXBsYWNlKC8oW1xcKCdcXCldKS9nLFwiXFxcXCQxXCIpLnJlcGxhY2UoLyAvZyxcIiUyMFwiKTpcIlwiO3RoaXMuY3JlYXRlRWxlbWVudChcImRlc2NcIikuYWRkKCkuZWxlbWVudC5hcHBlbmRDaGlsZChwLmNyZWF0ZVRleHROb2RlKFwiQ3JlYXRlZCB3aXRoIEhpZ2hjaGFydHMgNy4yLjFcIikpO3RoaXMuZGVmcz10aGlzLmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIpLmFkZCgpO3RoaXMuYWxsb3dIVE1MPWc7dGhpcy5mb3JFeHBvcnQ9dzt0aGlzLnN0eWxlZE1vZGU9cjt0aGlzLmdyYWRpZW50cz17fTt0aGlzLmNhY2hlPXt9O3RoaXMuY2FjaGVLZXlzPVtdO3RoaXMuaW1nQ291bnQ9XG4wO3RoaXMuc2V0U2l6ZShkLGUsITEpO3ZhciBjO2smJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYoZD1mdW5jdGlvbigpe2woYSx7bGVmdDowLHRvcDowfSk7Yz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2woYSx7bGVmdDpNYXRoLmNlaWwoYy5sZWZ0KS1jLmxlZnQrXCJweFwiLHRvcDpNYXRoLmNlaWwoYy50b3ApLWMudG9wK1wicHhcIn0pfSxkKCksdGhpcy51blN1YlBpeGVsRml4PWIoUSxcInJlc2l6ZVwiLGQpKX0sZGVmaW5pdGlvbjpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsZSl7dmFyIG07ZyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciB3PWQuY3JlYXRlRWxlbWVudChhLnRhZ05hbWUpLGs9e307aChhLGZ1bmN0aW9uKGEsYil7XCJ0YWdOYW1lXCIhPT1iJiZcImNoaWxkcmVuXCIhPT1iJiZcInRleHRDb250ZW50XCIhPT1iJiYoa1tiXT1hKX0pO3cuYXR0cihrKTt3LmFkZChlfHxkLmRlZnMpO2EudGV4dENvbnRlbnQmJncuZWxlbWVudC5hcHBlbmRDaGlsZChwLmNyZWF0ZVRleHROb2RlKGEudGV4dENvbnRlbnQpKTtcbmIoYS5jaGlsZHJlbnx8W10sdyk7bT13fSk7cmV0dXJuIG19dmFyIGQ9dGhpcztyZXR1cm4gYihhKX0sZ2V0U3R5bGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc3R5bGU9dCh7Zm9udEZhbWlseTonXCJMdWNpZGEgR3JhbmRlXCIsIFwiTHVjaWRhIFNhbnMgVW5pY29kZVwiLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmJyxmb250U2l6ZTpcIjEycHhcIn0sYSl9LHNldFN0eWxlOmZ1bmN0aW9uKGEpe3RoaXMuYm94V3JhcHBlci5jc3ModGhpcy5nZXRTdHlsZShhKSl9LGlzSGlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYm94V3JhcHBlci5nZXRCQm94KCkud2lkdGh9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRlZnM7dGhpcy5ib3g9bnVsbDt0aGlzLmJveFdyYXBwZXI9dGhpcy5ib3hXcmFwcGVyLmRlc3Ryb3koKTt6KHRoaXMuZ3JhZGllbnRzfHx7fSk7dGhpcy5ncmFkaWVudHM9bnVsbDthJiYodGhpcy5kZWZzPWEuZGVzdHJveSgpKTt0aGlzLnVuU3ViUGl4ZWxGaXgmJlxudGhpcy51blN1YlBpeGVsRml4KCk7cmV0dXJuIHRoaXMuYWxpZ25lZE9iamVjdHM9bnVsbH0sY3JlYXRlRWxlbWVudDpmdW5jdGlvbihhKXt2YXIgYj1uZXcgdGhpcy5FbGVtZW50O2IuaW5pdCh0aGlzLGEpO3JldHVybiBifSxkcmF3OncsZ2V0UmFkaWFsQXR0cjpmdW5jdGlvbihhLGIpe3JldHVybntjeDphWzBdLWFbMl0vMitiLmN4KmFbMl0sY3k6YVsxXS1hWzJdLzIrYi5jeSphWzJdLHI6Yi5yKmFbMl19fSx0cnVuY2F0ZTpmdW5jdGlvbihhLGIsZCxlLG0sdyxrKXt2YXIgbD10aGlzLEQ9YS5yb3RhdGlvbixnLHI9ZT8xOjAsYz0oZHx8ZSkubGVuZ3RoLHg9YyxKPVtdLEs9ZnVuY3Rpb24oYSl7Yi5maXJzdENoaWxkJiZiLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCk7YSYmYi5hcHBlbmRDaGlsZChwLmNyZWF0ZVRleHROb2RlKGEpKX0sTj1mdW5jdGlvbih3LEQpe0Q9RHx8dztpZih2b2lkIDA9PT1KW0RdKWlmKGIuZ2V0U3ViU3RyaW5nTGVuZ3RoKXRyeXtKW0RdPW0rYi5nZXRTdWJTdHJpbmdMZW5ndGgoMCxcbmU/RCsxOkQpfWNhdGNoKGJhKXtcIlwifWVsc2UgbC5nZXRTcGFuV2lkdGgmJihLKGsoZHx8ZSx3KSksSltEXT1tK2wuZ2V0U3BhbldpZHRoKGEsYikpO3JldHVybiBKW0RdfSxBO2Eucm90YXRpb249MDt2YXIgaD1OKGIudGV4dENvbnRlbnQubGVuZ3RoKTtpZihBPW0raD53KXtmb3IoO3I8PWM7KXg9TWF0aC5jZWlsKChyK2MpLzIpLGUmJihnPWsoZSx4KSksaD1OKHgsZyYmZy5sZW5ndGgtMSkscj09PWM/cj1jKzE6aD53P2M9eC0xOnI9eDswPT09Yz9LKFwiXCIpOmQmJmM9PT1kLmxlbmd0aC0xfHxLKGd8fGsoZHx8ZSx4KSl9ZSYmZS5zcGxpY2UoMCx4KTthLmFjdHVhbFdpZHRoPWg7YS5yb3RhdGlvbj1EO3JldHVybiBBfSxlc2NhcGVzOntcIiZcIjpcIiZhbXA7XCIsXCI8XCI6XCImbHQ7XCIsXCI+XCI6XCImZ3Q7XCIsXCInXCI6XCImIzM5O1wiLCdcIic6XCImcXVvdDtcIn0sYnVpbGRUZXh0OmZ1bmN0aW9uKGEpe3ZhciBiPWEuZWxlbWVudCxkPXRoaXMsZT1kLmZvckV4cG9ydCxtPW4oYS50ZXh0U3RyLFwiXCIpLnRvU3RyaW5nKCksXG53PS0xIT09bS5pbmRleE9mKFwiPFwiKSxrPWIuY2hpbGROb2RlcyxELGc9RihiLFwieFwiKSxyPWEuc3R5bGVzLGM9YS50ZXh0V2lkdGgseD1yJiZyLmxpbmVIZWlnaHQsSz1yJiZyLnRleHRPdXRsaW5lLEE9ciYmXCJlbGxpcHNpc1wiPT09ci50ZXh0T3ZlcmZsb3csdT1yJiZcIm5vd3JhcFwiPT09ci53aGl0ZVNwYWNlLEw9ciYmci5mb250U2l6ZSxFLGY9ay5sZW5ndGg7cj1jJiYhYS5hZGRlZCYmdGhpcy5ib3g7dmFyIFM9ZnVuY3Rpb24oYSl7dmFyIG07ZC5zdHlsZWRNb2RlfHwobT0vKHB4fGVtKSQvLnRlc3QoYSYmYS5zdHlsZS5mb250U2l6ZSk/YS5zdHlsZS5mb250U2l6ZTpMfHxkLnN0eWxlLmZvbnRTaXplfHwxMik7cmV0dXJuIHg/cSh4KTpkLmZvbnRNZXRyaWNzKG0sYS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKT9hOmIpLmh9LHY9ZnVuY3Rpb24oYSxiKXtoKGQuZXNjYXBlcyxmdW5jdGlvbihkLG0pe2ImJi0xIT09Yi5pbmRleE9mKGQpfHwoYT1hLnRvU3RyaW5nKCkucmVwbGFjZShuZXcgUmVnRXhwKGQsXG5cImdcIiksbSkpfSk7cmV0dXJuIGF9LE89ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLmluZGV4T2YoXCI8XCIpO2E9YS5zdWJzdHJpbmcoZCxhLmluZGV4T2YoXCI+XCIpLWQpO2Q9YS5pbmRleE9mKGIrXCI9XCIpO2lmKC0xIT09ZCYmKGQ9ZCtiLmxlbmd0aCsxLGI9YS5jaGFyQXQoZCksJ1wiJz09PWJ8fFwiJ1wiPT09YikpcmV0dXJuIGE9YS5zdWJzdHJpbmcoZCsxKSxhLnN1YnN0cmluZygwLGEuaW5kZXhPZihiKSl9LFE9Lzxici4qPz4vZzt2YXIgdD1bbSxBLHUseCxLLEwsY10uam9pbigpO2lmKHQhPT1hLnRleHRDYWNoZSl7Zm9yKGEudGV4dENhY2hlPXQ7Zi0tOyliLnJlbW92ZUNoaWxkKGtbZl0pO3d8fEt8fEF8fGN8fC0xIT09bS5pbmRleE9mKFwiIFwiKSYmKCF1fHxRLnRlc3QobSkpPyhyJiZyLmFwcGVuZENoaWxkKGIpLHc/KG09ZC5zdHlsZWRNb2RlP20ucmVwbGFjZSgvPChifHN0cm9uZyk+L2csJzxzcGFuIGNsYXNzPVwiaGlnaGNoYXJ0cy1zdHJvbmdcIj4nKS5yZXBsYWNlKC88KGl8ZW0pPi9nLCc8c3BhbiBjbGFzcz1cImhpZ2hjaGFydHMtZW1waGFzaXplZFwiPicpOlxubS5yZXBsYWNlKC88KGJ8c3Ryb25nKT4vZywnPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDpib2xkXCI+JykucmVwbGFjZSgvPChpfGVtKT4vZywnPHNwYW4gc3R5bGU9XCJmb250LXN0eWxlOml0YWxpY1wiPicpLG09bS5yZXBsYWNlKC88YS9nLFwiPHNwYW5cIikucmVwbGFjZSgvPFxcLyhifHN0cm9uZ3xpfGVtfGEpPi9nLFwiPC9zcGFuPlwiKS5zcGxpdChRKSk6bT1bbV0sbT1tLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm5cIlwiIT09YX0pLG0uZm9yRWFjaChmdW5jdGlvbihtLHcpe3ZhciBrPTAscj0wO209bS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLFwiXCIpLnJlcGxhY2UoLzxzcGFuL2csXCJ8fHw8c3BhblwiKS5yZXBsYWNlKC88XFwvc3Bhbj4vZyxcIjwvc3Bhbj58fHxcIik7dmFyIHg9bS5zcGxpdChcInx8fFwiKTt4LmZvckVhY2goZnVuY3Rpb24obSl7aWYoXCJcIiE9PW18fDE9PT14Lmxlbmd0aCl7dmFyIEs9e30sTj1wLmNyZWF0ZUVsZW1lbnROUyhkLlNWR19OUyxcInRzcGFuXCIpLGgsbjsoaD1PKG0sXCJjbGFzc1wiKSkmJlxuRihOLFwiY2xhc3NcIixoKTtpZihoPU8obSxcInN0eWxlXCIpKWg9aC5yZXBsYWNlKC8oO3wgfF4pY29sb3IoWyA6XSkvLFwiJDFmaWxsJDJcIiksRihOLFwic3R5bGVcIixoKTsobj1PKG0sXCJocmVmXCIpKSYmIWUmJihGKE4sXCJvbmNsaWNrXCIsJ2xvY2F0aW9uLmhyZWY9XCInK24rJ1wiJyksRihOLFwiY2xhc3NcIixcImhpZ2hjaGFydHMtYW5jaG9yXCIpLGQuc3R5bGVkTW9kZXx8bChOLHtjdXJzb3I6XCJwb2ludGVyXCJ9KSk7bT12KG0ucmVwbGFjZSgvPFthLXpBLVpcXC9dKC58XFxuKSo/Pi9nLFwiXCIpfHxcIiBcIik7aWYoXCIgXCIhPT1tKXtOLmFwcGVuZENoaWxkKHAuY3JlYXRlVGV4dE5vZGUobSkpO2s/Sy5keD0wOncmJm51bGwhPT1nJiYoSy54PWcpO0YoTixLKTtiLmFwcGVuZENoaWxkKE4pOyFrJiZFJiYoIUomJmUmJmwoTix7ZGlzcGxheTpcImJsb2NrXCJ9KSxGKE4sXCJkeVwiLFMoTikpKTtpZihjKXt2YXIgVD1tLnJlcGxhY2UoLyhbXlxcXl0pLS9nLFwiJDEtIFwiKS5zcGxpdChcIiBcIik7Sz0hdSYmKDE8eC5sZW5ndGh8fFxud3x8MTxULmxlbmd0aCk7bj0wO3ZhciBmPVMoTik7aWYoQSlEPWQudHJ1bmNhdGUoYSxOLG0sdm9pZCAwLDAsTWF0aC5tYXgoMCxjLXBhcnNlSW50KEx8fDEyLDEwKSksZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdWJzdHJpbmcoMCxiKStcIlxcdTIwMjZcIn0pO2Vsc2UgaWYoSylmb3IoO1QubGVuZ3RoOylULmxlbmd0aCYmIXUmJjA8biYmKE49cC5jcmVhdGVFbGVtZW50TlMoVSxcInRzcGFuXCIpLEYoTix7ZHk6Zix4Omd9KSxoJiZGKE4sXCJzdHlsZVwiLGgpLE4uYXBwZW5kQ2hpbGQocC5jcmVhdGVUZXh0Tm9kZShULmpvaW4oXCIgXCIpLnJlcGxhY2UoLy0gL2csXCItXCIpKSksYi5hcHBlbmRDaGlsZChOKSksZC50cnVuY2F0ZShhLE4sbnVsbCxULDA9PT1uP3I6MCxjLGZ1bmN0aW9uKGEsYil7cmV0dXJuIFQuc2xpY2UoMCxiKS5qb2luKFwiIFwiKS5yZXBsYWNlKC8tIC9nLFwiLVwiKX0pLHI9YS5hY3R1YWxXaWR0aCxuKyt9aysrfX19KTtFPUV8fGIuY2hpbGROb2Rlcy5sZW5ndGh9KSxBJiZEJiZhLmF0dHIoXCJ0aXRsZVwiLFxudihhLnRleHRTdHIsW1wiJmx0O1wiLFwiJmd0O1wiXSkpLHImJnIucmVtb3ZlQ2hpbGQoYiksSyYmYS5hcHBseVRleHRPdXRsaW5lJiZhLmFwcGx5VGV4dE91dGxpbmUoSykpOmIuYXBwZW5kQ2hpbGQocC5jcmVhdGVUZXh0Tm9kZSh2KG0pKSl9fSxnZXRDb250cmFzdDpmdW5jdGlvbihhKXthPWUoYSkucmdiYTthWzBdKj0xO2FbMV0qPTEuMjthWzJdKj0uNTtyZXR1cm4gNDU5PGFbMF0rYVsxXSthWzJdP1wiIzAwMDAwMFwiOlwiI0ZGRkZGRlwifSxidXR0b246ZnVuY3Rpb24oYSxkLG0sZSx3LGssbCxnLGMseCl7dmFyIEQ9dGhpcy5sYWJlbChhLGQsbSxjLG51bGwsbnVsbCx4LG51bGwsXCJidXR0b25cIikscD0wLEs9dGhpcy5zdHlsZWRNb2RlO0QuYXR0cihBKHtwYWRkaW5nOjgscjoyfSx3KSk7aWYoIUspe3c9QSh7ZmlsbDpcIiNmN2Y3ZjdcIixzdHJva2U6XCIjY2NjY2NjXCIsXCJzdHJva2Utd2lkdGhcIjoxLHN0eWxlOntjb2xvcjpcIiMzMzMzMzNcIixjdXJzb3I6XCJwb2ludGVyXCIsZm9udFdlaWdodDpcIm5vcm1hbFwifX0sXG53KTt2YXIgSj13LnN0eWxlO2RlbGV0ZSB3LnN0eWxlO2s9QSh3LHtmaWxsOlwiI2U2ZTZlNlwifSxrKTt2YXIgTj1rLnN0eWxlO2RlbGV0ZSBrLnN0eWxlO2w9QSh3LHtmaWxsOlwiI2U2ZWJmNVwiLHN0eWxlOntjb2xvcjpcIiMwMDAwMDBcIixmb250V2VpZ2h0OlwiYm9sZFwifX0sbCk7dmFyIGg9bC5zdHlsZTtkZWxldGUgbC5zdHlsZTtnPUEodyx7c3R5bGU6e2NvbG9yOlwiI2NjY2NjY1wifX0sZyk7dmFyIHU9Zy5zdHlsZTtkZWxldGUgZy5zdHlsZX1iKEQuZWxlbWVudCxyP1wibW91c2VvdmVyXCI6XCJtb3VzZWVudGVyXCIsZnVuY3Rpb24oKXszIT09cCYmRC5zZXRTdGF0ZSgxKX0pO2IoRC5lbGVtZW50LHI/XCJtb3VzZW91dFwiOlwibW91c2VsZWF2ZVwiLGZ1bmN0aW9uKCl7MyE9PXAmJkQuc2V0U3RhdGUocCl9KTtELnNldFN0YXRlPWZ1bmN0aW9uKGEpezEhPT1hJiYoRC5zdGF0ZT1wPWEpO0QucmVtb3ZlQ2xhc3MoL2hpZ2hjaGFydHMtYnV0dG9uLShub3JtYWx8aG92ZXJ8cHJlc3NlZHxkaXNhYmxlZCkvKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtYnV0dG9uLVwiK1xuW1wibm9ybWFsXCIsXCJob3ZlclwiLFwicHJlc3NlZFwiLFwiZGlzYWJsZWRcIl1bYXx8MF0pO0t8fEQuYXR0cihbdyxrLGwsZ11bYXx8MF0pLmNzcyhbSixOLGgsdV1bYXx8MF0pfTtLfHxELmF0dHIodykuY3NzKHQoe2N1cnNvcjpcImRlZmF1bHRcIn0sSikpO3JldHVybiBELm9uKFwiY2xpY2tcIixmdW5jdGlvbihhKXszIT09cCYmZS5jYWxsKEQsYSl9KX0sY3Jpc3BMaW5lOmZ1bmN0aW9uKGEsYil7YVsxXT09PWFbNF0mJihhWzFdPWFbNF09TWF0aC5yb3VuZChhWzFdKS1iJTIvMik7YVsyXT09PWFbNV0mJihhWzJdPWFbNV09TWF0aC5yb3VuZChhWzJdKStiJTIvMik7cmV0dXJuIGF9LHBhdGg6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zdHlsZWRNb2RlP3t9OntmaWxsOlwibm9uZVwifTt2KGEpP2IuZD1hOkgoYSkmJnQoYixhKTtyZXR1cm4gdGhpcy5jcmVhdGVFbGVtZW50KFwicGF0aFwiKS5hdHRyKGIpfSxjaXJjbGU6ZnVuY3Rpb24oYSxiLGQpe2E9SChhKT9hOnZvaWQgMD09PWE/e306e3g6YSx5OmIscjpkfTtcbmI9dGhpcy5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIpO2IueFNldHRlcj1iLnlTZXR0ZXI9ZnVuY3Rpb24oYSxiLGQpe2Quc2V0QXR0cmlidXRlKFwiY1wiK2IsYSl9O3JldHVybiBiLmF0dHIoYSl9LGFyYzpmdW5jdGlvbihhLGIsZCxtLGUsdyl7SChhKT8obT1hLGI9bS55LGQ9bS5yLGE9bS54KTptPXtpbm5lclI6bSxzdGFydDplLGVuZDp3fTthPXRoaXMuc3ltYm9sKFwiYXJjXCIsYSxiLGQsZCxtKTthLnI9ZDtyZXR1cm4gYX0scmVjdDpmdW5jdGlvbihhLGIsZCxtLGUsdyl7ZT1IKGEpP2EucjplO3ZhciBrPXRoaXMuY3JlYXRlRWxlbWVudChcInJlY3RcIik7YT1IKGEpP2E6dm9pZCAwPT09YT97fTp7eDphLHk6Yix3aWR0aDpNYXRoLm1heChkLDApLGhlaWdodDpNYXRoLm1heChtLDApfTt0aGlzLnN0eWxlZE1vZGV8fCh2b2lkIDAhPT13JiYoYS5zdHJva2VXaWR0aD13LGE9ay5jcmlzcChhKSksYS5maWxsPVwibm9uZVwiKTtlJiYoYS5yPWUpO2suclNldHRlcj1mdW5jdGlvbihhLGIsZCl7ay5yPVxuYTtGKGQse3J4OmEscnk6YX0pfTtrLnJHZXR0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gay5yfTtyZXR1cm4gay5hdHRyKGEpfSxzZXRTaXplOmZ1bmN0aW9uKGEsYixkKXt2YXIgbT10aGlzLmFsaWduZWRPYmplY3RzLGU9bS5sZW5ndGg7dGhpcy53aWR0aD1hO3RoaXMuaGVpZ2h0PWI7Zm9yKHRoaXMuYm94V3JhcHBlci5hbmltYXRlKHt3aWR0aDphLGhlaWdodDpifSx7c3RlcDpmdW5jdGlvbigpe3RoaXMuYXR0cih7dmlld0JveDpcIjAgMCBcIit0aGlzLmF0dHIoXCJ3aWR0aFwiKStcIiBcIit0aGlzLmF0dHIoXCJoZWlnaHRcIil9KX0sZHVyYXRpb246bihkLCEwKT92b2lkIDA6MH0pO2UtLTspbVtlXS5hbGlnbigpfSxnOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY3JlYXRlRWxlbWVudChcImdcIik7cmV0dXJuIGE/Yi5hdHRyKHtcImNsYXNzXCI6XCJoaWdoY2hhcnRzLVwiK2F9KTpifSxpbWFnZTpmdW5jdGlvbihhLGQsbSxlLHcsayl7dmFyIGw9e3ByZXNlcnZlQXNwZWN0UmF0aW86XCJub25lXCJ9LGc9ZnVuY3Rpb24oYSxcbmIpe2Euc2V0QXR0cmlidXRlTlM/YS5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcImhyZWZcIixiKTphLnNldEF0dHJpYnV0ZShcImhjLXN2Zy1ocmVmXCIsYil9LHI9ZnVuY3Rpb24oYil7ZyhjLmVsZW1lbnQsYSk7ay5jYWxsKGMsYil9OzE8YXJndW1lbnRzLmxlbmd0aCYmdChsLHt4OmQseTptLHdpZHRoOmUsaGVpZ2h0Ond9KTt2YXIgYz10aGlzLmNyZWF0ZUVsZW1lbnQoXCJpbWFnZVwiKS5hdHRyKGwpO2s/KGcoYy5lbGVtZW50LFwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBQUFBQ0g1QkFFS0FBRUFMQUFBQUFBQkFBRUFBQUlDVEFFQU93PT1cIiksbD1uZXcgUS5JbWFnZSxiKGwsXCJsb2FkXCIsciksbC5zcmM9YSxsLmNvbXBsZXRlJiZyKHt9KSk6ZyhjLmVsZW1lbnQsYSk7cmV0dXJuIGN9LHN5bWJvbDpmdW5jdGlvbihhLGIsbSxlLHcsayl7dmFyIGc9dGhpcyxyPS9edXJsXFwoKC4qPylcXCkkLyxjPXIudGVzdChhKSxEPSFjJiYodGhpcy5zeW1ib2xzW2FdP1xuYTpcImNpcmNsZVwiKSx4PUQmJnRoaXMuc3ltYm9sc1tEXSxLPUcoYikmJngmJnguY2FsbCh0aGlzLnN5bWJvbHMsTWF0aC5yb3VuZChiKSxNYXRoLnJvdW5kKG0pLGUsdyxrKTtpZih4KXt2YXIgSj10aGlzLnBhdGgoSyk7Zy5zdHlsZWRNb2RlfHxKLmF0dHIoXCJmaWxsXCIsXCJub25lXCIpO3QoSix7c3ltYm9sTmFtZTpELHg6Yix5Om0sd2lkdGg6ZSxoZWlnaHQ6d30pO2smJnQoSixrKX1lbHNlIGlmKGMpe3ZhciBBPWEubWF0Y2gocilbMV07Sj10aGlzLmltYWdlKEEpO0ouaW1nd2lkdGg9bihTW0FdJiZTW0FdLndpZHRoLGsmJmsud2lkdGgpO0ouaW1naGVpZ2h0PW4oU1tBXSYmU1tBXS5oZWlnaHQsayYmay5oZWlnaHQpO3ZhciBoPWZ1bmN0aW9uKCl7Si5hdHRyKHt3aWR0aDpKLndpZHRoLGhlaWdodDpKLmhlaWdodH0pfTtbXCJ3aWR0aFwiLFwiaGVpZ2h0XCJdLmZvckVhY2goZnVuY3Rpb24oYSl7SlthK1wiU2V0dGVyXCJdPWZ1bmN0aW9uKGEsYil7dmFyIGQ9e30sbT10aGlzW1wiaW1nXCIrYl0sZT1cblwid2lkdGhcIj09PWI/XCJ0cmFuc2xhdGVYXCI6XCJ0cmFuc2xhdGVZXCI7dGhpc1tiXT1hO0cobSkmJihrJiZcIndpdGhpblwiPT09ay5iYWNrZ3JvdW5kU2l6ZSYmdGhpcy53aWR0aCYmdGhpcy5oZWlnaHQmJihtPU1hdGgucm91bmQobSpNYXRoLm1pbih0aGlzLndpZHRoL3RoaXMuaW1nd2lkdGgsdGhpcy5oZWlnaHQvdGhpcy5pbWdoZWlnaHQpKSksdGhpcy5lbGVtZW50JiZ0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKGIsbSksdGhpcy5hbGlnbkJ5VHJhbnNsYXRlfHwoZFtlXT0oKHRoaXNbYl18fDApLW0pLzIsdGhpcy5hdHRyKGQpKSl9fSk7RyhiKSYmSi5hdHRyKHt4OmIseTptfSk7Si5pc0ltZz0hMDtHKEouaW1nd2lkdGgpJiZHKEouaW1naGVpZ2h0KT9oKCk6KEouYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLEwoXCJpbWdcIix7b25sb2FkOmZ1bmN0aW9uKCl7dmFyIGE9ZFtnLmNoYXJ0SW5kZXhdOzA9PT10aGlzLndpZHRoJiYobCh0aGlzLHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOlwiLTk5OWVtXCJ9KSxcbnAuYm9keS5hcHBlbmRDaGlsZCh0aGlzKSk7U1tBXT17d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9O0ouaW1nd2lkdGg9dGhpcy53aWR0aDtKLmltZ2hlaWdodD10aGlzLmhlaWdodDtKLmVsZW1lbnQmJmgoKTt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTtnLmltZ0NvdW50LS07aWYoIWcuaW1nQ291bnQmJmEmJmEub25sb2FkKWEub25sb2FkKCl9LHNyYzpBfSksdGhpcy5pbWdDb3VudCsrKX1yZXR1cm4gSn0sc3ltYm9sczp7Y2lyY2xlOmZ1bmN0aW9uKGEsYixkLG0pe3JldHVybiB0aGlzLmFyYyhhK2QvMixiK20vMixkLzIsbS8yLHtzdGFydDouNSpNYXRoLlBJLGVuZDoyLjUqTWF0aC5QSSxvcGVuOiExfSl9LHNxdWFyZTpmdW5jdGlvbihhLGIsZCxtKXtyZXR1cm5bXCJNXCIsYSxiLFwiTFwiLGErZCxiLGErZCxiK20sYSxiK20sXCJaXCJdfSx0cmlhbmdsZTpmdW5jdGlvbihhLGIsZCxtKXtyZXR1cm5bXCJNXCIsYStkLzIsYixcIkxcIixcbmErZCxiK20sYSxiK20sXCJaXCJdfSxcInRyaWFuZ2xlLWRvd25cIjpmdW5jdGlvbihhLGIsZCxtKXtyZXR1cm5bXCJNXCIsYSxiLFwiTFwiLGErZCxiLGErZC8yLGIrbSxcIlpcIl19LGRpYW1vbmQ6ZnVuY3Rpb24oYSxiLGQsbSl7cmV0dXJuW1wiTVwiLGErZC8yLGIsXCJMXCIsYStkLGIrbS8yLGErZC8yLGIrbSxhLGIrbS8yLFwiWlwiXX0sYXJjOmZ1bmN0aW9uKGEsYixkLG0sZSl7dmFyIHc9ZS5zdGFydCxrPWUucnx8ZCxsPWUucnx8bXx8ZCxnPWUuZW5kLS4wMDE7ZD1lLmlubmVyUjttPW4oZS5vcGVuLC4wMDE+TWF0aC5hYnMoZS5lbmQtZS5zdGFydC0yKk1hdGguUEkpKTt2YXIgcj1NYXRoLmNvcyh3KSxjPU1hdGguc2luKHcpLHg9TWF0aC5jb3MoZyk7Zz1NYXRoLnNpbihnKTt3PS4wMDE+ZS5lbmQtdy1NYXRoLlBJPzA6MTtlPVtcIk1cIixhK2sqcixiK2wqYyxcIkFcIixrLGwsMCx3LG4oZS5jbG9ja3dpc2UsMSksYStrKngsYitsKmddO0coZCkmJmUucHVzaChtP1wiTVwiOlwiTFwiLGErZCp4LGIrZCpnLFwiQVwiLGQsXG5kLDAsdywwLGErZCpyLGIrZCpjKTtlLnB1c2gobT9cIlwiOlwiWlwiKTtyZXR1cm4gZX0sY2FsbG91dDpmdW5jdGlvbihhLGIsZCxtLGUpe3ZhciB3PU1hdGgubWluKGUmJmUucnx8MCxkLG0pLGs9dys2LGw9ZSYmZS5hbmNob3JYO2U9ZSYmZS5hbmNob3JZO3ZhciBnPVtcIk1cIixhK3csYixcIkxcIixhK2QtdyxiLFwiQ1wiLGErZCxiLGErZCxiLGErZCxiK3csXCJMXCIsYStkLGIrbS13LFwiQ1wiLGErZCxiK20sYStkLGIrbSxhK2QtdyxiK20sXCJMXCIsYSt3LGIrbSxcIkNcIixhLGIrbSxhLGIrbSxhLGIrbS13LFwiTFwiLGEsYit3LFwiQ1wiLGEsYixhLGIsYSt3LGJdO2wmJmw+ZD9lPmIrayYmZTxiK20taz9nLnNwbGljZSgxMywzLFwiTFwiLGErZCxlLTYsYStkKzYsZSxhK2QsZSs2LGErZCxiK20tdyk6Zy5zcGxpY2UoMTMsMyxcIkxcIixhK2QsbS8yLGwsZSxhK2QsbS8yLGErZCxiK20tdyk6bCYmMD5sP2U+YitrJiZlPGIrbS1rP2cuc3BsaWNlKDMzLDMsXCJMXCIsYSxlKzYsYS02LGUsYSxlLTYsYSxiK3cpOmcuc3BsaWNlKDMzLFxuMyxcIkxcIixhLG0vMixsLGUsYSxtLzIsYSxiK3cpOmUmJmU+bSYmbD5hK2smJmw8YStkLWs/Zy5zcGxpY2UoMjMsMyxcIkxcIixsKzYsYittLGwsYittKzYsbC02LGIrbSxhK3csYittKTplJiYwPmUmJmw+YStrJiZsPGErZC1rJiZnLnNwbGljZSgzLDMsXCJMXCIsbC02LGIsbCxiLTYsbCs2LGIsZC13LGIpO3JldHVybiBnfX0sY2xpcFJlY3Q6ZnVuY3Rpb24oYSxiLGQsbSl7dmFyIGU9Yy51bmlxdWVLZXkoKStcIi1cIix3PXRoaXMuY3JlYXRlRWxlbWVudChcImNsaXBQYXRoXCIpLmF0dHIoe2lkOmV9KS5hZGQodGhpcy5kZWZzKTthPXRoaXMucmVjdChhLGIsZCxtLDApLmFkZCh3KTthLmlkPWU7YS5jbGlwUGF0aD13O2EuY291bnQ9MDtyZXR1cm4gYX0sdGV4dDpmdW5jdGlvbihhLGIsZCxtKXt2YXIgZT17fTtpZihtJiYodGhpcy5hbGxvd0hUTUx8fCF0aGlzLmZvckV4cG9ydCkpcmV0dXJuIHRoaXMuaHRtbChhLGIsZCk7ZS54PU1hdGgucm91bmQoYnx8MCk7ZCYmKGUueT1NYXRoLnJvdW5kKGQpKTtcbkcoYSkmJihlLnRleHQ9YSk7YT10aGlzLmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0XCIpLmF0dHIoZSk7bXx8KGEueFNldHRlcj1mdW5jdGlvbihhLGIsZCl7dmFyIG09ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRzcGFuXCIpLGU9ZC5nZXRBdHRyaWJ1dGUoYiksdztmb3Iodz0wO3c8bS5sZW5ndGg7dysrKXt2YXIgaz1tW3ddO2suZ2V0QXR0cmlidXRlKGIpPT09ZSYmay5zZXRBdHRyaWJ1dGUoYixhKX1kLnNldEF0dHJpYnV0ZShiLGEpfSk7cmV0dXJuIGF9LGZvbnRNZXRyaWNzOmZ1bmN0aW9uKGEsYil7YT0hdGhpcy5zdHlsZWRNb2RlJiYvcHgvLnRlc3QoYSl8fCFRLmdldENvbXB1dGVkU3R5bGU/YXx8YiYmYi5zdHlsZSYmYi5zdHlsZS5mb250U2l6ZXx8dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5mb250U2l6ZTpiJiZPLnByb3RvdHlwZS5nZXRTdHlsZS5jYWxsKGIsXCJmb250LXNpemVcIik7YT0vcHgvLnRlc3QoYSk/cShhKToxMjtiPTI0PmE/YSszOk1hdGgucm91bmQoMS4yKmEpO3JldHVybntoOmIsXG5iOk1hdGgucm91bmQoLjgqYiksZjphfX0scm90Q29ycjpmdW5jdGlvbihhLGIsZCl7dmFyIG09YTtiJiZkJiYobT1NYXRoLm1heChtKk1hdGguY29zKGIqRSksNCkpO3JldHVybnt4Oi1hLzMqTWF0aC5zaW4oYipFKSx5Om19fSxsYWJlbDpmdW5jdGlvbihhLGIsZCxlLHcsayxsLGcscil7dmFyIGM9dGhpcyx4PWMuc3R5bGVkTW9kZSxKPWMuZyhcImJ1dHRvblwiIT09ciYmXCJsYWJlbFwiKSxwPUoudGV4dD1jLnRleHQoXCJcIiwwLDAsbCkuYXR0cih7ekluZGV4OjF9KSxLLGgsRD0wLHU9MyxMPTAsbixOLEUsVSxmLHE9e30sVCxTLHY9L151cmxcXCgoLio/KVxcKSQvLnRlc3QoZSksUT14fHx2LHk9ZnVuY3Rpb24oKXtyZXR1cm4geD9LLnN0cm9rZVdpZHRoKCklMi8yOihUP3BhcnNlSW50KFQsMTApOjApJTIvMn07ciYmSi5hZGRDbGFzcyhcImhpZ2hjaGFydHMtXCIrcik7dmFyIFI9ZnVuY3Rpb24oKXt2YXIgYT1wLmVsZW1lbnQuc3R5bGUsYj17fTtoPSh2b2lkIDA9PT1ufHx2b2lkIDA9PT1OfHxmKSYmXG5HKHAudGV4dFN0cikmJnAuZ2V0QkJveCgpO0oud2lkdGg9KG58fGgud2lkdGh8fDApKzIqdStMO0ouaGVpZ2h0PShOfHxoLmhlaWdodHx8MCkrMip1O1M9dStNYXRoLm1pbihjLmZvbnRNZXRyaWNzKGEmJmEuZm9udFNpemUscCkuYixoP2guaGVpZ2h0OkluZmluaXR5KTtRJiYoS3x8KEouYm94PUs9Yy5zeW1ib2xzW2VdfHx2P2Muc3ltYm9sKGUpOmMucmVjdCgpLEsuYWRkQ2xhc3MoKFwiYnV0dG9uXCI9PT1yP1wiXCI6XCJoaWdoY2hhcnRzLWxhYmVsLWJveFwiKSsocj9cIiBoaWdoY2hhcnRzLVwiK3IrXCItYm94XCI6XCJcIikpLEsuYWRkKEopLGE9eSgpLGIueD1hLGIueT0oZz8tUzowKSthKSxiLndpZHRoPU1hdGgucm91bmQoSi53aWR0aCksYi5oZWlnaHQ9TWF0aC5yb3VuZChKLmhlaWdodCksSy5hdHRyKHQoYixxKSkscT17fSl9O3ZhciBCPWZ1bmN0aW9uKCl7dmFyIGE9TCt1O3ZhciBiPWc/MDpTO0cobikmJmgmJihcImNlbnRlclwiPT09Znx8XCJyaWdodFwiPT09ZikmJihhKz17Y2VudGVyOi41LHJpZ2h0OjF9W2ZdKlxuKG4taC53aWR0aCkpO2lmKGEhPT1wLnh8fGIhPT1wLnkpcC5hdHRyKFwieFwiLGEpLHAuaGFzQm94V2lkdGhDaGFuZ2VkJiYoaD1wLmdldEJCb3goITApLFIoKSksdm9pZCAwIT09YiYmcC5hdHRyKFwieVwiLGIpO3AueD1hO3AueT1ifTt2YXIgVj1mdW5jdGlvbihhLGIpe0s/Sy5hdHRyKGEsYik6cVthXT1ifTtKLm9uQWRkPWZ1bmN0aW9uKCl7cC5hZGQoSik7Si5hdHRyKHt0ZXh0OmF8fDA9PT1hP2E6XCJcIix4OmIseTpkfSk7SyYmRyh3KSYmSi5hdHRyKHthbmNob3JYOncsYW5jaG9yWTprfSl9O0oud2lkdGhTZXR0ZXI9ZnVuY3Rpb24oYSl7bj1DKGEpP2E6bnVsbH07Si5oZWlnaHRTZXR0ZXI9ZnVuY3Rpb24oYSl7Tj1hfTtKW1widGV4dC1hbGlnblNldHRlclwiXT1mdW5jdGlvbihhKXtmPWF9O0oucGFkZGluZ1NldHRlcj1mdW5jdGlvbihhKXtHKGEpJiZhIT09dSYmKHU9Si5wYWRkaW5nPWEsQigpKX07Si5wYWRkaW5nTGVmdFNldHRlcj1mdW5jdGlvbihhKXtHKGEpJiZhIT09TCYmKEw9YSxcbkIoKSl9O0ouYWxpZ25TZXR0ZXI9ZnVuY3Rpb24oYSl7YT17bGVmdDowLGNlbnRlcjouNSxyaWdodDoxfVthXTthIT09RCYmKEQ9YSxoJiZKLmF0dHIoe3g6RX0pKX07Si50ZXh0U2V0dGVyPWZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEmJnAuYXR0cih7dGV4dDphfSk7UigpO0IoKX07SltcInN0cm9rZS13aWR0aFNldHRlclwiXT1mdW5jdGlvbihhLGIpe2EmJihRPSEwKTtUPXRoaXNbXCJzdHJva2Utd2lkdGhcIl09YTtWKGIsYSl9O3g/Si5yU2V0dGVyPWZ1bmN0aW9uKGEsYil7VihiLGEpfTpKLnN0cm9rZVNldHRlcj1KLmZpbGxTZXR0ZXI9Si5yU2V0dGVyPWZ1bmN0aW9uKGEsYil7XCJyXCIhPT1iJiYoXCJmaWxsXCI9PT1iJiZhJiYoUT0hMCksSltiXT1hKTtWKGIsYSl9O0ouYW5jaG9yWFNldHRlcj1mdW5jdGlvbihhLGIpe3c9Si5hbmNob3JYPWE7VihiLE1hdGgucm91bmQoYSkteSgpLUUpfTtKLmFuY2hvcllTZXR0ZXI9ZnVuY3Rpb24oYSxiKXtrPUouYW5jaG9yWT1hO1YoYixhLVUpfTtKLnhTZXR0ZXI9XG5mdW5jdGlvbihhKXtKLng9YTtEJiYoYS09RCooKG58fGgud2lkdGgpKzIqdSksSltcImZvcmNlQW5pbWF0ZTp4XCJdPSEwKTtFPU1hdGgucm91bmQoYSk7Si5hdHRyKFwidHJhbnNsYXRlWFwiLEUpfTtKLnlTZXR0ZXI9ZnVuY3Rpb24oYSl7VT1KLnk9TWF0aC5yb3VuZChhKTtKLmF0dHIoXCJ0cmFuc2xhdGVZXCIsVSl9O3ZhciBIPUouY3NzO2w9e2NzczpmdW5jdGlvbihhKXtpZihhKXt2YXIgYj17fTthPUEoYSk7Si50ZXh0UHJvcHMuZm9yRWFjaChmdW5jdGlvbihkKXt2b2lkIDAhPT1hW2RdJiYoYltkXT1hW2RdLGRlbGV0ZSBhW2RdKX0pO3AuY3NzKGIpO1wid2lkdGhcImluIGImJlIoKTtcImZvbnRTaXplXCJpbiBiJiYoUigpLEIoKSl9cmV0dXJuIEguY2FsbChKLGEpfSxnZXRCQm94OmZ1bmN0aW9uKCl7cmV0dXJue3dpZHRoOmgud2lkdGgrMip1LGhlaWdodDpoLmhlaWdodCsyKnUseDpoLngtdSx5OmgueS11fX0sZGVzdHJveTpmdW5jdGlvbigpe20oSi5lbGVtZW50LFwibW91c2VlbnRlclwiKTtcbm0oSi5lbGVtZW50LFwibW91c2VsZWF2ZVwiKTtwJiYocD1wLmRlc3Ryb3koKSk7SyYmKEs9Sy5kZXN0cm95KCkpO08ucHJvdG90eXBlLmRlc3Ryb3kuY2FsbChKKTtKPWM9Uj1CPVY9bnVsbH19O3h8fChsLnNoYWRvdz1mdW5jdGlvbihhKXthJiYoUigpLEsmJksuc2hhZG93KGEpKTtyZXR1cm4gSn0pO3JldHVybiB0KEosbCl9fSk7Yy5SZW5kZXJlcj1mfSk7TShJLFwicGFydHMvSHRtbC5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuYXR0cixHPWYuZGVmaW5lZCx6PWYuZXh0ZW5kLEI9Zi5waWNrLHQ9Zi5wSW50LHY9Yy5jcmVhdGVFbGVtZW50LEM9Yy5jc3MsSD1jLmlzRmlyZWZveCx5PWMuaXNNUyxoPWMuaXNXZWJLaXQsbj1jLlNWR0VsZW1lbnQ7Zj1jLlNWR1JlbmRlcmVyO3ZhciBxPWMud2luO3oobi5wcm90b3R5cGUse2h0bWxDc3M6ZnVuY3Rpb24oZyl7dmFyIGI9XCJTUEFOXCI9PT10aGlzLmVsZW1lbnQudGFnTmFtZSYmXG5nJiZcIndpZHRoXCJpbiBnLGE9QihiJiZnLndpZHRoLHZvaWQgMCk7aWYoYil7ZGVsZXRlIGcud2lkdGg7dGhpcy50ZXh0V2lkdGg9YTt2YXIgZD0hMH1nJiZcImVsbGlwc2lzXCI9PT1nLnRleHRPdmVyZmxvdyYmKGcud2hpdGVTcGFjZT1cIm5vd3JhcFwiLGcub3ZlcmZsb3c9XCJoaWRkZW5cIik7dGhpcy5zdHlsZXM9eih0aGlzLnN0eWxlcyxnKTtDKHRoaXMuZWxlbWVudCxnKTtkJiZ0aGlzLmh0bWxVcGRhdGVUcmFuc2Zvcm0oKTtyZXR1cm4gdGhpc30saHRtbEdldEJCb3g6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmVsZW1lbnQ7cmV0dXJue3g6Zy5vZmZzZXRMZWZ0LHk6Zy5vZmZzZXRUb3Asd2lkdGg6Zy5vZmZzZXRXaWR0aCxoZWlnaHQ6Zy5vZmZzZXRIZWlnaHR9fSxodG1sVXBkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKCl7aWYodGhpcy5hZGRlZCl7dmFyIGc9dGhpcy5yZW5kZXJlcixiPXRoaXMuZWxlbWVudCxhPXRoaXMudHJhbnNsYXRlWHx8MCxkPXRoaXMudHJhbnNsYXRlWXx8MCxlPXRoaXMueHx8XG4wLGw9dGhpcy55fHwwLGM9dGhpcy50ZXh0QWxpZ258fFwibGVmdFwiLGg9e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX1bY10scD10aGlzLnN0eWxlcyx1PXAmJnAud2hpdGVTcGFjZTtDKGIse21hcmdpbkxlZnQ6YSxtYXJnaW5Ub3A6ZH0pOyFnLnN0eWxlZE1vZGUmJnRoaXMuc2hhZG93cyYmdGhpcy5zaGFkb3dzLmZvckVhY2goZnVuY3Rpb24oYil7QyhiLHttYXJnaW5MZWZ0OmErMSxtYXJnaW5Ub3A6ZCsxfSl9KTt0aGlzLmludmVydGVkJiZbXS5mb3JFYWNoLmNhbGwoYi5jaGlsZE5vZGVzLGZ1bmN0aW9uKGEpe2cuaW52ZXJ0Q2hpbGQoYSxiKX0pO2lmKFwiU1BBTlwiPT09Yi50YWdOYW1lKXtwPXRoaXMucm90YXRpb247dmFyIGs9dGhpcy50ZXh0V2lkdGgmJnQodGhpcy50ZXh0V2lkdGgpLHI9W3AsYyxiLmlubmVySFRNTCx0aGlzLnRleHRXaWR0aCx0aGlzLnRleHRBbGlnbl0uam9pbigpLHg7KHg9ayE9PXRoaXMub2xkVGV4dFdpZHRoKSYmISh4PWs+dGhpcy5vbGRUZXh0V2lkdGgpJiZcbigoeD10aGlzLnRleHRQeExlbmd0aCl8fChDKGIse3dpZHRoOlwiXCIsd2hpdGVTcGFjZTp1fHxcIm5vd3JhcFwifSkseD1iLm9mZnNldFdpZHRoKSx4PXg+ayk7eCYmKC9bIFxcLV0vLnRlc3QoYi50ZXh0Q29udGVudHx8Yi5pbm5lclRleHQpfHxcImVsbGlwc2lzXCI9PT1iLnN0eWxlLnRleHRPdmVyZmxvdyk/KEMoYix7d2lkdGg6aytcInB4XCIsZGlzcGxheTpcImJsb2NrXCIsd2hpdGVTcGFjZTp1fHxcIm5vcm1hbFwifSksdGhpcy5vbGRUZXh0V2lkdGg9ayx0aGlzLmhhc0JveFdpZHRoQ2hhbmdlZD0hMCk6dGhpcy5oYXNCb3hXaWR0aENoYW5nZWQ9ITE7ciE9PXRoaXMuY1RUJiYodT1nLmZvbnRNZXRyaWNzKGIuc3R5bGUuZm9udFNpemUsYikuYiwhRyhwKXx8cD09PSh0aGlzLm9sZFJvdGF0aW9ufHwwKSYmYz09PXRoaXMub2xkQWxpZ258fHRoaXMuc2V0U3BhblJvdGF0aW9uKHAsaCx1KSx0aGlzLmdldFNwYW5Db3JyZWN0aW9uKCFHKHApJiZ0aGlzLnRleHRQeExlbmd0aHx8Yi5vZmZzZXRXaWR0aCxcbnUsaCxwLGMpKTtDKGIse2xlZnQ6ZSsodGhpcy54Q29ycnx8MCkrXCJweFwiLHRvcDpsKyh0aGlzLnlDb3JyfHwwKStcInB4XCJ9KTt0aGlzLmNUVD1yO3RoaXMub2xkUm90YXRpb249cDt0aGlzLm9sZEFsaWduPWN9fWVsc2UgdGhpcy5hbGlnbk9uQWRkPSEwfSxzZXRTcGFuUm90YXRpb246ZnVuY3Rpb24oZyxiLGEpe3ZhciBkPXt9LGU9dGhpcy5yZW5kZXJlci5nZXRUcmFuc2Zvcm1LZXkoKTtkW2VdPWQudHJhbnNmb3JtPVwicm90YXRlKFwiK2crXCJkZWcpXCI7ZFtlKyhIP1wiT3JpZ2luXCI6XCItb3JpZ2luXCIpXT1kLnRyYW5zZm9ybU9yaWdpbj0xMDAqYitcIiUgXCIrYStcInB4XCI7Qyh0aGlzLmVsZW1lbnQsZCl9LGdldFNwYW5Db3JyZWN0aW9uOmZ1bmN0aW9uKGcsYixhKXt0aGlzLnhDb3JyPS1nKmE7dGhpcy55Q29ycj0tYn19KTt6KGYucHJvdG90eXBlLHtnZXRUcmFuc2Zvcm1LZXk6ZnVuY3Rpb24oKXtyZXR1cm4geSYmIS9FZGdlLy50ZXN0KHEubmF2aWdhdG9yLnVzZXJBZ2VudCk/XCItbXMtdHJhbnNmb3JtXCI6XG5oP1wiLXdlYmtpdC10cmFuc2Zvcm1cIjpIP1wiTW96VHJhbnNmb3JtXCI6cS5vcGVyYT9cIi1vLXRyYW5zZm9ybVwiOlwiXCJ9LGh0bWw6ZnVuY3Rpb24oZyxiLGEpe3ZhciBkPXRoaXMuY3JlYXRlRWxlbWVudChcInNwYW5cIiksZT1kLmVsZW1lbnQsbD1kLnJlbmRlcmVyLGM9bC5pc1NWRyxoPWZ1bmN0aW9uKGEsYil7W1wib3BhY2l0eVwiLFwidmlzaWJpbGl0eVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2FbZCtcIlNldHRlclwiXT1mdW5jdGlvbihlLGssbCl7dmFyIHc9YS5kaXY/YS5kaXYuc3R5bGU6YjtuLnByb3RvdHlwZVtkK1wiU2V0dGVyXCJdLmNhbGwodGhpcyxlLGssbCk7dyYmKHdba109ZSl9fSk7YS5hZGRlZFNldHRlcnM9ITB9O2QudGV4dFNldHRlcj1mdW5jdGlvbihhKXthIT09ZS5pbm5lckhUTUwmJihkZWxldGUgdGhpcy5iQm94LGRlbGV0ZSB0aGlzLm9sZFRleHRXaWR0aCk7dGhpcy50ZXh0U3RyPWE7ZS5pbm5lckhUTUw9QihhLFwiXCIpO2QuZG9UcmFuc2Zvcm09ITB9O2MmJmgoZCxkLmVsZW1lbnQuc3R5bGUpO1xuZC54U2V0dGVyPWQueVNldHRlcj1kLmFsaWduU2V0dGVyPWQucm90YXRpb25TZXR0ZXI9ZnVuY3Rpb24oYSxiKXtcImFsaWduXCI9PT1iJiYoYj1cInRleHRBbGlnblwiKTtkW2JdPWE7ZC5kb1RyYW5zZm9ybT0hMH07ZC5hZnRlclNldHRlcnM9ZnVuY3Rpb24oKXt0aGlzLmRvVHJhbnNmb3JtJiYodGhpcy5odG1sVXBkYXRlVHJhbnNmb3JtKCksdGhpcy5kb1RyYW5zZm9ybT0hMSl9O2QuYXR0cih7dGV4dDpnLHg6TWF0aC5yb3VuZChiKSx5Ok1hdGgucm91bmQoYSl9KS5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIn0pO2wuc3R5bGVkTW9kZXx8ZC5jc3Moe2ZvbnRGYW1pbHk6dGhpcy5zdHlsZS5mb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3R5bGUuZm9udFNpemV9KTtlLnN0eWxlLndoaXRlU3BhY2U9XCJub3dyYXBcIjtkLmNzcz1kLmh0bWxDc3M7YyYmKGQuYWRkPWZ1bmN0aW9uKGEpe3ZhciBiPWwuYm94LnBhcmVudE5vZGUsaz1bXTtpZih0aGlzLnBhcmVudEdyb3VwPWEpe3ZhciBnPWEuZGl2O1xuaWYoIWcpe2Zvcig7YTspay5wdXNoKGEpLGE9YS5wYXJlbnRHcm91cDtrLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGUoYixkKXthW2RdPWI7XCJ0cmFuc2xhdGVYXCI9PT1kP20ubGVmdD1iK1wicHhcIjptLnRvcD1iK1wicHhcIjthLmRvVHJhbnNmb3JtPSEwfXZhciB3PUYoYS5lbGVtZW50LFwiY2xhc3NcIik7Zz1hLmRpdj1hLmRpdnx8dihcImRpdlwiLHc/e2NsYXNzTmFtZTp3fTp2b2lkIDAse3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixsZWZ0OihhLnRyYW5zbGF0ZVh8fDApK1wicHhcIix0b3A6KGEudHJhbnNsYXRlWXx8MCkrXCJweFwiLGRpc3BsYXk6YS5kaXNwbGF5LG9wYWNpdHk6YS5vcGFjaXR5LHBvaW50ZXJFdmVudHM6YS5zdHlsZXMmJmEuc3R5bGVzLnBvaW50ZXJFdmVudHN9LGd8fGIpO3ZhciBtPWcuc3R5bGU7eihhLHtjbGFzc1NldHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsYik7YS5jbGFzc05hbWU9XG5ifX0oZyksb246ZnVuY3Rpb24oKXtrWzBdLmRpdiYmZC5vbi5hcHBseSh7ZWxlbWVudDprWzBdLmRpdn0sYXJndW1lbnRzKTtyZXR1cm4gYX0sdHJhbnNsYXRlWFNldHRlcjplLHRyYW5zbGF0ZVlTZXR0ZXI6ZX0pO2EuYWRkZWRTZXR0ZXJzfHxoKGEpfSl9fWVsc2UgZz1iO2cuYXBwZW5kQ2hpbGQoZSk7ZC5hZGRlZD0hMDtkLmFsaWduT25BZGQmJmQuaHRtbFVwZGF0ZVRyYW5zZm9ybSgpO3JldHVybiBkfSk7cmV0dXJuIGR9fSl9KTtNKEksXCJwYXJ0cy9UaW1lLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5kZWZpbmVkLEc9Zi5leHRlbmQsej1mLmlzT2JqZWN0LEI9Zi5vYmplY3RFYWNoLHQ9Zi5waWNrLHY9Zi5zcGxhdCxDPWMubWVyZ2UsSD1jLnRpbWVVbml0cyx5PWMud2luO2MuVGltZT1mdW5jdGlvbihjKXt0aGlzLnVwZGF0ZShjLCExKX07Yy5UaW1lLnByb3RvdHlwZT17ZGVmYXVsdE9wdGlvbnM6e0RhdGU6dm9pZCAwLFxuZ2V0VGltZXpvbmVPZmZzZXQ6dm9pZCAwLHRpbWV6b25lOnZvaWQgMCx0aW1lem9uZU9mZnNldDowLHVzZVVUQzohMH0sdXBkYXRlOmZ1bmN0aW9uKGMpe3ZhciBoPXQoYyYmYy51c2VVVEMsITApLGY9dGhpczt0aGlzLm9wdGlvbnM9Yz1DKCEwLHRoaXMub3B0aW9uc3x8e30sYyk7dGhpcy5EYXRlPWMuRGF0ZXx8eS5EYXRlfHxEYXRlO3RoaXMudGltZXpvbmVPZmZzZXQ9KHRoaXMudXNlVVRDPWgpJiZjLnRpbWV6b25lT2Zmc2V0O3RoaXMuZ2V0VGltZXpvbmVPZmZzZXQ9dGhpcy50aW1lem9uZU9mZnNldEZ1bmN0aW9uKCk7KHRoaXMudmFyaWFibGVUaW1lem9uZT0hKGgmJiFjLmdldFRpbWV6b25lT2Zmc2V0JiYhYy50aW1lem9uZSkpfHx0aGlzLnRpbWV6b25lT2Zmc2V0Pyh0aGlzLmdldD1mdW5jdGlvbihnLGIpe3ZhciBhPWIuZ2V0VGltZSgpLGQ9YS1mLmdldFRpbWV6b25lT2Zmc2V0KGIpO2Iuc2V0VGltZShkKTtnPWJbXCJnZXRVVENcIitnXSgpO2Iuc2V0VGltZShhKTtyZXR1cm4gZ30sXG50aGlzLnNldD1mdW5jdGlvbihnLGIsYSl7aWYoXCJNaWxsaXNlY29uZHNcIj09PWd8fFwiU2Vjb25kc1wiPT09Z3x8XCJNaW51dGVzXCI9PT1nJiYwPT09Yi5nZXRUaW1lem9uZU9mZnNldCgpJTYwKWJbXCJzZXRcIitnXShhKTtlbHNle3ZhciBkPWYuZ2V0VGltZXpvbmVPZmZzZXQoYik7ZD1iLmdldFRpbWUoKS1kO2Iuc2V0VGltZShkKTtiW1wic2V0VVRDXCIrZ10oYSk7Zz1mLmdldFRpbWV6b25lT2Zmc2V0KGIpO2Q9Yi5nZXRUaW1lKCkrZztiLnNldFRpbWUoZCl9fSk6aD8odGhpcy5nZXQ9ZnVuY3Rpb24oZyxiKXtyZXR1cm4gYltcImdldFVUQ1wiK2ddKCl9LHRoaXMuc2V0PWZ1bmN0aW9uKGcsYixhKXtyZXR1cm4gYltcInNldFVUQ1wiK2ddKGEpfSk6KHRoaXMuZ2V0PWZ1bmN0aW9uKGcsYil7cmV0dXJuIGJbXCJnZXRcIitnXSgpfSx0aGlzLnNldD1mdW5jdGlvbihnLGIsYSl7cmV0dXJuIGJbXCJzZXRcIitnXShhKX0pfSxtYWtlVGltZTpmdW5jdGlvbihoLG4sZixnLGIsYSl7aWYodGhpcy51c2VVVEMpe3ZhciBkPVxudGhpcy5EYXRlLlVUQy5hcHBseSgwLGFyZ3VtZW50cyk7dmFyIGU9dGhpcy5nZXRUaW1lem9uZU9mZnNldChkKTtkKz1lO3ZhciBsPXRoaXMuZ2V0VGltZXpvbmVPZmZzZXQoZCk7ZSE9PWw/ZCs9bC1lOmUtMzZFNSE9PXRoaXMuZ2V0VGltZXpvbmVPZmZzZXQoZC0zNkU1KXx8Yy5pc1NhZmFyaXx8KGQtPTM2RTUpfWVsc2UgZD0obmV3IHRoaXMuRGF0ZShoLG4sdChmLDEpLHQoZywwKSx0KGIsMCksdChhLDApKSkuZ2V0VGltZSgpO3JldHVybiBkfSx0aW1lem9uZU9mZnNldEZ1bmN0aW9uOmZ1bmN0aW9uKCl7dmFyIGg9dGhpcyxuPXRoaXMub3B0aW9ucyxmPXkubW9tZW50O2lmKCF0aGlzLnVzZVVUQylyZXR1cm4gZnVuY3Rpb24oZyl7cmV0dXJuIDZFNCoobmV3IERhdGUoZykpLmdldFRpbWV6b25lT2Zmc2V0KCl9O2lmKG4udGltZXpvbmUpe2lmKGYpcmV0dXJuIGZ1bmN0aW9uKGcpe3JldHVybiA2RTQqLWYudHooZyxuLnRpbWV6b25lKS51dGNPZmZzZXQoKX07Yy5lcnJvcigyNSl9cmV0dXJuIHRoaXMudXNlVVRDJiZcbm4uZ2V0VGltZXpvbmVPZmZzZXQ/ZnVuY3Rpb24oZyl7cmV0dXJuIDZFNCpuLmdldFRpbWV6b25lT2Zmc2V0KGcpfTpmdW5jdGlvbigpe3JldHVybiA2RTQqKGgudGltZXpvbmVPZmZzZXR8fDApfX0sZGF0ZUZvcm1hdDpmdW5jdGlvbihoLG4sZil7aWYoIUYobil8fGlzTmFOKG4pKXJldHVybiBjLmRlZmF1bHRPcHRpb25zLmxhbmcuaW52YWxpZERhdGV8fFwiXCI7aD10KGgsXCIlWS0lbS0lZCAlSDolTTolU1wiKTt2YXIgZz10aGlzLGI9bmV3IHRoaXMuRGF0ZShuKSxhPXRoaXMuZ2V0KFwiSG91cnNcIixiKSxkPXRoaXMuZ2V0KFwiRGF5XCIsYiksZT10aGlzLmdldChcIkRhdGVcIixiKSxsPXRoaXMuZ2V0KFwiTW9udGhcIixiKSxMPXRoaXMuZ2V0KFwiRnVsbFllYXJcIixiKSxFPWMuZGVmYXVsdE9wdGlvbnMubGFuZyxwPUUud2Vla2RheXMsdT1FLnNob3J0V2Vla2RheXMsaz1jLnBhZDtiPUcoe2E6dT91W2RdOnBbZF0uc3Vic3RyKDAsMyksQTpwW2RdLGQ6ayhlKSxlOmsoZSwyLFwiIFwiKSx3OmQsYjpFLnNob3J0TW9udGhzW2xdLFxuQjpFLm1vbnRoc1tsXSxtOmsobCsxKSxvOmwrMSx5OkwudG9TdHJpbmcoKS5zdWJzdHIoMiwyKSxZOkwsSDprKGEpLGs6YSxJOmsoYSUxMnx8MTIpLGw6YSUxMnx8MTIsTTprKGcuZ2V0KFwiTWludXRlc1wiLGIpKSxwOjEyPmE/XCJBTVwiOlwiUE1cIixQOjEyPmE/XCJhbVwiOlwicG1cIixTOmsoYi5nZXRTZWNvbmRzKCkpLEw6ayhNYXRoLmZsb29yKG4lMUUzKSwzKX0sYy5kYXRlRm9ybWF0cyk7QihiLGZ1bmN0aW9uKGEsYil7Zm9yKDstMSE9PWguaW5kZXhPZihcIiVcIitiKTspaD1oLnJlcGxhY2UoXCIlXCIrYixcImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hLmNhbGwoZyxuKTphKX0pO3JldHVybiBmP2guc3Vic3RyKDAsMSkudG9VcHBlckNhc2UoKStoLnN1YnN0cigxKTpofSxyZXNvbHZlRFRMRm9ybWF0OmZ1bmN0aW9uKGMpe3JldHVybiB6KGMsITApP2M6KGM9dihjKSx7bWFpbjpjWzBdLGZyb206Y1sxXSx0bzpjWzJdfSl9LGdldFRpbWVUaWNrczpmdW5jdGlvbihjLG4sZixnKXt2YXIgYj10aGlzLGE9W10sXG5kPXt9O3ZhciBlPW5ldyBiLkRhdGUobik7dmFyIGw9Yy51bml0UmFuZ2UsaD1jLmNvdW50fHwxLEU7Zz10KGcsMSk7aWYoRihuKSl7Yi5zZXQoXCJNaWxsaXNlY29uZHNcIixlLGw+PUguc2Vjb25kPzA6aCpNYXRoLmZsb29yKGIuZ2V0KFwiTWlsbGlzZWNvbmRzXCIsZSkvaCkpO2w+PUguc2Vjb25kJiZiLnNldChcIlNlY29uZHNcIixlLGw+PUgubWludXRlPzA6aCpNYXRoLmZsb29yKGIuZ2V0KFwiU2Vjb25kc1wiLGUpL2gpKTtsPj1ILm1pbnV0ZSYmYi5zZXQoXCJNaW51dGVzXCIsZSxsPj1ILmhvdXI/MDpoKk1hdGguZmxvb3IoYi5nZXQoXCJNaW51dGVzXCIsZSkvaCkpO2w+PUguaG91ciYmYi5zZXQoXCJIb3Vyc1wiLGUsbD49SC5kYXk/MDpoKk1hdGguZmxvb3IoYi5nZXQoXCJIb3Vyc1wiLGUpL2gpKTtsPj1ILmRheSYmYi5zZXQoXCJEYXRlXCIsZSxsPj1ILm1vbnRoPzE6TWF0aC5tYXgoMSxoKk1hdGguZmxvb3IoYi5nZXQoXCJEYXRlXCIsZSkvaCkpKTtpZihsPj1ILm1vbnRoKXtiLnNldChcIk1vbnRoXCIsZSxsPj1cbkgueWVhcj8wOmgqTWF0aC5mbG9vcihiLmdldChcIk1vbnRoXCIsZSkvaCkpO3ZhciBwPWIuZ2V0KFwiRnVsbFllYXJcIixlKX1sPj1ILnllYXImJmIuc2V0KFwiRnVsbFllYXJcIixlLHAtcCVoKTtsPT09SC53ZWVrJiYocD1iLmdldChcIkRheVwiLGUpLGIuc2V0KFwiRGF0ZVwiLGUsYi5nZXQoXCJEYXRlXCIsZSktcCtnKyhwPGc/LTc6MCkpKTtwPWIuZ2V0KFwiRnVsbFllYXJcIixlKTtnPWIuZ2V0KFwiTW9udGhcIixlKTt2YXIgdT1iLmdldChcIkRhdGVcIixlKSxrPWIuZ2V0KFwiSG91cnNcIixlKTtuPWUuZ2V0VGltZSgpO2IudmFyaWFibGVUaW1lem9uZSYmKEU9Zi1uPjQqSC5tb250aHx8Yi5nZXRUaW1lem9uZU9mZnNldChuKSE9PWIuZ2V0VGltZXpvbmVPZmZzZXQoZikpO249ZS5nZXRUaW1lKCk7Zm9yKGU9MTtuPGY7KWEucHVzaChuKSxuPWw9PT1ILnllYXI/Yi5tYWtlVGltZShwK2UqaCwwKTpsPT09SC5tb250aD9iLm1ha2VUaW1lKHAsZytlKmgpOiFFfHxsIT09SC5kYXkmJmwhPT1ILndlZWs/RSYmbD09PVxuSC5ob3VyJiYxPGg/Yi5tYWtlVGltZShwLGcsdSxrK2UqaCk6bitsKmg6Yi5tYWtlVGltZShwLGcsdStlKmgqKGw9PT1ILmRheT8xOjcpKSxlKys7YS5wdXNoKG4pO2w8PUguaG91ciYmMUU0PmEubGVuZ3RoJiZhLmZvckVhY2goZnVuY3Rpb24oYSl7MD09PWElMThFNSYmXCIwMDAwMDAwMDBcIj09PWIuZGF0ZUZvcm1hdChcIiVIJU0lUyVMXCIsYSkmJihkW2FdPVwiZGF5XCIpfSl9YS5pbmZvPUcoYyx7aGlnaGVyUmFua3M6ZCx0b3RhbFJhbmdlOmwqaH0pO3JldHVybiBhfX19KTtNKEksXCJwYXJ0cy9PcHRpb25zLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdXSxmdW5jdGlvbihjKXt2YXIgZj1jLmNvbG9yLEY9Yy5tZXJnZTtjLmRlZmF1bHRPcHRpb25zPXtjb2xvcnM6XCIjN2NiNWVjICM0MzQzNDggIzkwZWQ3ZCAjZjdhMzVjICM4MDg1ZTkgI2YxNWM4MCAjZTRkMzU0ICMyYjkwOGYgI2Y0NWI1YiAjOTFlOGUxXCIuc3BsaXQoXCIgXCIpLHN5bWJvbHM6W1wiY2lyY2xlXCIsXCJkaWFtb25kXCIsXCJzcXVhcmVcIixcblwidHJpYW5nbGVcIixcInRyaWFuZ2xlLWRvd25cIl0sbGFuZzp7bG9hZGluZzpcIkxvYWRpbmcuLi5cIixtb250aHM6XCJKYW51YXJ5IEZlYnJ1YXJ5IE1hcmNoIEFwcmlsIE1heSBKdW5lIEp1bHkgQXVndXN0IFNlcHRlbWJlciBPY3RvYmVyIE5vdmVtYmVyIERlY2VtYmVyXCIuc3BsaXQoXCIgXCIpLHNob3J0TW9udGhzOlwiSmFuIEZlYiBNYXIgQXByIE1heSBKdW4gSnVsIEF1ZyBTZXAgT2N0IE5vdiBEZWNcIi5zcGxpdChcIiBcIiksd2Vla2RheXM6XCJTdW5kYXkgTW9uZGF5IFR1ZXNkYXkgV2VkbmVzZGF5IFRodXJzZGF5IEZyaWRheSBTYXR1cmRheVwiLnNwbGl0KFwiIFwiKSxkZWNpbWFsUG9pbnQ6XCIuXCIsbnVtZXJpY1N5bWJvbHM6XCJrTUdUUEVcIi5zcGxpdChcIlwiKSxyZXNldFpvb206XCJSZXNldCB6b29tXCIscmVzZXRab29tVGl0bGU6XCJSZXNldCB6b29tIGxldmVsIDE6MVwiLHRob3VzYW5kc1NlcDpcIiBcIn0sZ2xvYmFsOnt9LHRpbWU6Yy5UaW1lLnByb3RvdHlwZS5kZWZhdWx0T3B0aW9ucyxjaGFydDp7c3R5bGVkTW9kZTohMSxcbmJvcmRlclJhZGl1czowLGNvbG9yQ291bnQ6MTAsZGVmYXVsdFNlcmllc1R5cGU6XCJsaW5lXCIsaWdub3JlSGlkZGVuU2VyaWVzOiEwLHNwYWNpbmc6WzEwLDEwLDE1LDEwXSxyZXNldFpvb21CdXR0b246e3RoZW1lOnt6SW5kZXg6Nn0scG9zaXRpb246e2FsaWduOlwicmlnaHRcIix4Oi0xMCx5OjEwfX0sd2lkdGg6bnVsbCxoZWlnaHQ6bnVsbCxib3JkZXJDb2xvcjpcIiMzMzVjYWRcIixiYWNrZ3JvdW5kQ29sb3I6XCIjZmZmZmZmXCIscGxvdEJvcmRlckNvbG9yOlwiI2NjY2NjY1wifSx0aXRsZTp7dGV4dDpcIkNoYXJ0IHRpdGxlXCIsYWxpZ246XCJjZW50ZXJcIixtYXJnaW46MTUsd2lkdGhBZGp1c3Q6LTQ0fSxzdWJ0aXRsZTp7dGV4dDpcIlwiLGFsaWduOlwiY2VudGVyXCIsd2lkdGhBZGp1c3Q6LTQ0fSxjYXB0aW9uOnttYXJnaW46MTUsdGV4dDpcIlwiLGFsaWduOlwibGVmdFwiLHZlcnRpY2FsQWxpZ246XCJib3R0b21cIn0scGxvdE9wdGlvbnM6e30sbGFiZWxzOntzdHlsZTp7cG9zaXRpb246XCJhYnNvbHV0ZVwiLGNvbG9yOlwiIzMzMzMzM1wifX0sXG5sZWdlbmQ6e2VuYWJsZWQ6ITAsYWxpZ246XCJjZW50ZXJcIixhbGlnbkNvbHVtbnM6ITAsbGF5b3V0OlwiaG9yaXpvbnRhbFwiLGxhYmVsRm9ybWF0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0sYm9yZGVyQ29sb3I6XCIjOTk5OTk5XCIsYm9yZGVyUmFkaXVzOjAsbmF2aWdhdGlvbjp7YWN0aXZlQ29sb3I6XCIjMDAzMzk5XCIsaW5hY3RpdmVDb2xvcjpcIiNjY2NjY2NcIn0saXRlbVN0eWxlOntjb2xvcjpcIiMzMzMzMzNcIixjdXJzb3I6XCJwb2ludGVyXCIsZm9udFNpemU6XCIxMnB4XCIsZm9udFdlaWdodDpcImJvbGRcIix0ZXh0T3ZlcmZsb3c6XCJlbGxpcHNpc1wifSxpdGVtSG92ZXJTdHlsZTp7Y29sb3I6XCIjMDAwMDAwXCJ9LGl0ZW1IaWRkZW5TdHlsZTp7Y29sb3I6XCIjY2NjY2NjXCJ9LHNoYWRvdzohMSxpdGVtQ2hlY2tib3hTdHlsZTp7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHdpZHRoOlwiMTNweFwiLGhlaWdodDpcIjEzcHhcIn0sc3F1YXJlU3ltYm9sOiEwLHN5bWJvbFBhZGRpbmc6NSx2ZXJ0aWNhbEFsaWduOlwiYm90dG9tXCIsXG54OjAseTowLHRpdGxlOntzdHlsZTp7Zm9udFdlaWdodDpcImJvbGRcIn19fSxsb2FkaW5nOntsYWJlbFN0eWxlOntmb250V2VpZ2h0OlwiYm9sZFwiLHBvc2l0aW9uOlwicmVsYXRpdmVcIix0b3A6XCI0NSVcIn0sc3R5bGU6e3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixiYWNrZ3JvdW5kQ29sb3I6XCIjZmZmZmZmXCIsb3BhY2l0eTouNSx0ZXh0QWxpZ246XCJjZW50ZXJcIn19LHRvb2x0aXA6e2VuYWJsZWQ6ITAsYW5pbWF0aW9uOmMuc3ZnLGJvcmRlclJhZGl1czozLGRhdGVUaW1lTGFiZWxGb3JtYXRzOnttaWxsaXNlY29uZDpcIiVBLCAlYiAlZSwgJUg6JU06JVMuJUxcIixzZWNvbmQ6XCIlQSwgJWIgJWUsICVIOiVNOiVTXCIsbWludXRlOlwiJUEsICViICVlLCAlSDolTVwiLGhvdXI6XCIlQSwgJWIgJWUsICVIOiVNXCIsZGF5OlwiJUEsICViICVlLCAlWVwiLHdlZWs6XCJXZWVrIGZyb20gJUEsICViICVlLCAlWVwiLG1vbnRoOlwiJUIgJVlcIix5ZWFyOlwiJVlcIn0sZm9vdGVyRm9ybWF0OlwiXCIscGFkZGluZzo4LHNuYXA6Yy5pc1RvdWNoRGV2aWNlP1xuMjU6MTAsaGVhZGVyRm9ybWF0Oic8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMTBweFwiPntwb2ludC5rZXl9PC9zcGFuPjxici8+Jyxwb2ludEZvcm1hdDonPHNwYW4gc3R5bGU9XCJjb2xvcjp7cG9pbnQuY29sb3J9XCI+XFx1MjVjZjwvc3Bhbj4ge3Nlcmllcy5uYW1lfTogPGI+e3BvaW50Lnl9PC9iPjxici8+JyxiYWNrZ3JvdW5kQ29sb3I6ZihcIiNmN2Y3ZjdcIikuc2V0T3BhY2l0eSguODUpLmdldCgpLGJvcmRlcldpZHRoOjEsc2hhZG93OiEwLHN0eWxlOntjb2xvcjpcIiMzMzMzMzNcIixjdXJzb3I6XCJkZWZhdWx0XCIsZm9udFNpemU6XCIxMnB4XCIscG9pbnRlckV2ZW50czpcIm5vbmVcIix3aGl0ZVNwYWNlOlwibm93cmFwXCJ9fSxjcmVkaXRzOntlbmFibGVkOiEwLGhyZWY6XCJodHRwczovL3d3dy5oaWdoY2hhcnRzLmNvbT9jcmVkaXRzXCIscG9zaXRpb246e2FsaWduOlwicmlnaHRcIix4Oi0xMCx2ZXJ0aWNhbEFsaWduOlwiYm90dG9tXCIseTotNX0sc3R5bGU6e2N1cnNvcjpcInBvaW50ZXJcIixjb2xvcjpcIiM5OTk5OTlcIixcbmZvbnRTaXplOlwiOXB4XCJ9LHRleHQ6XCJIaWdoY2hhcnRzLmNvbVwifX07Yy5zZXRPcHRpb25zPWZ1bmN0aW9uKGYpe2MuZGVmYXVsdE9wdGlvbnM9RighMCxjLmRlZmF1bHRPcHRpb25zLGYpOyhmLnRpbWV8fGYuZ2xvYmFsKSYmYy50aW1lLnVwZGF0ZShGKGMuZGVmYXVsdE9wdGlvbnMuZ2xvYmFsLGMuZGVmYXVsdE9wdGlvbnMudGltZSxmLmdsb2JhbCxmLnRpbWUpKTtyZXR1cm4gYy5kZWZhdWx0T3B0aW9uc307Yy5nZXRPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGMuZGVmYXVsdE9wdGlvbnN9O2MuZGVmYXVsdFBsb3RPcHRpb25zPWMuZGVmYXVsdE9wdGlvbnMucGxvdE9wdGlvbnM7Yy50aW1lPW5ldyBjLlRpbWUoRihjLmRlZmF1bHRPcHRpb25zLmdsb2JhbCxjLmRlZmF1bHRPcHRpb25zLnRpbWUpKTtjLmRhdGVGb3JtYXQ9ZnVuY3Rpb24oZix6LEIpe3JldHVybiBjLnRpbWUuZGF0ZUZvcm1hdChmLHosQil9O1wiXCJ9KTtNKEksXCJwYXJ0cy9UaWNrLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLFxuSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmRlZmluZWQsRz1mLmRlc3Ryb3lPYmplY3RQcm9wZXJ0aWVzLHo9Zi5leHRlbmQsQj1mLmlzTnVtYmVyLHQ9Zi5waWNrLHY9Yy5jb3JyZWN0RmxvYXQsQz1jLmZpcmVFdmVudCxIPWMubWVyZ2UseT1jLmRlZzJyYWQ7Yy5UaWNrPWZ1bmN0aW9uKGMsbixmLGcsYil7dGhpcy5heGlzPWM7dGhpcy5wb3M9bjt0aGlzLnR5cGU9Znx8XCJcIjt0aGlzLmlzTmV3TGFiZWw9dGhpcy5pc05ldz0hMDt0aGlzLnBhcmFtZXRlcnM9Ynx8e307dGhpcy50aWNrbWFya09mZnNldD10aGlzLnBhcmFtZXRlcnMudGlja21hcmtPZmZzZXQ7dGhpcy5vcHRpb25zPXRoaXMucGFyYW1ldGVycy5vcHRpb25zO2Z8fGd8fHRoaXMuYWRkTGFiZWwoKX07Yy5UaWNrLnByb3RvdHlwZT17YWRkTGFiZWw6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLG49Yy5heGlzLGY9bi5vcHRpb25zLGc9bi5jaGFydCxiPW4uY2F0ZWdvcmllcyxhPW4ubmFtZXMsXG5kPWMucG9zLGU9dChjLm9wdGlvbnMmJmMub3B0aW9ucy5sYWJlbHMsZi5sYWJlbHMpLGw9bi50aWNrUG9zaXRpb25zLEw9ZD09PWxbMF0sRT1kPT09bFtsLmxlbmd0aC0xXTtiPXRoaXMucGFyYW1ldGVycy5jYXRlZ29yeXx8KGI/dChiW2RdLGFbZF0sZCk6ZCk7dmFyIHA9Yy5sYWJlbDtsPWwuaW5mbzt2YXIgdSxrO2lmKG4uaXNEYXRldGltZUF4aXMmJmwpe3ZhciByPWcudGltZS5yZXNvbHZlRFRMRm9ybWF0KGYuZGF0ZVRpbWVMYWJlbEZvcm1hdHNbIWYuZ3JpZCYmbC5oaWdoZXJSYW5rc1tkXXx8bC51bml0TmFtZV0pO3ZhciB4PXIubWFpbn1jLmlzRmlyc3Q9TDtjLmlzTGFzdD1FO2MuZm9ybWF0Q3R4PXtheGlzOm4sY2hhcnQ6Zyxpc0ZpcnN0OkwsaXNMYXN0OkUsZGF0ZVRpbWVMYWJlbEZvcm1hdDp4LHRpY2tQb3NpdGlvbkluZm86bCx2YWx1ZTpuLmlzTG9nP3Yobi5saW4ybG9nKGIpKTpiLHBvczpkfTtmPW4ubGFiZWxGb3JtYXR0ZXIuY2FsbChjLmZvcm1hdEN0eCx0aGlzLmZvcm1hdEN0eCk7XG5pZihrPXImJnIubGlzdCljLnNob3J0ZW5MYWJlbD1mdW5jdGlvbigpe2Zvcih1PTA7dTxrLmxlbmd0aDt1KyspaWYocC5hdHRyKHt0ZXh0Om4ubGFiZWxGb3JtYXR0ZXIuY2FsbCh6KGMuZm9ybWF0Q3R4LHtkYXRlVGltZUxhYmVsRm9ybWF0OmtbdV19KSl9KSxwLmdldEJCb3goKS53aWR0aDxuLmdldFNsb3RXaWR0aChjKS0yKnQoZS5wYWRkaW5nLDUpKXJldHVybjtwLmF0dHIoe3RleHQ6XCJcIn0pfTtpZihGKHApKXAmJnAudGV4dFN0ciE9PWYmJighcC50ZXh0V2lkdGh8fGUuc3R5bGUmJmUuc3R5bGUud2lkdGh8fHAuc3R5bGVzLndpZHRofHxwLmNzcyh7d2lkdGg6bnVsbH0pLHAuYXR0cih7dGV4dDpmfSkscC50ZXh0UHhMZW5ndGg9cC5nZXRCQm94KCkud2lkdGgpO2Vsc2V7aWYoYy5sYWJlbD1wPUYoZikmJmUuZW5hYmxlZD9nLnJlbmRlcmVyLnRleHQoZiwwLDAsZS51c2VIVE1MKS5hZGQobi5sYWJlbEdyb3VwKTpudWxsKWcuc3R5bGVkTW9kZXx8cC5jc3MoSChlLnN0eWxlKSkscC50ZXh0UHhMZW5ndGg9XG5wLmdldEJCb3goKS53aWR0aDtjLnJvdGF0aW9uPTB9fSxnZXRMYWJlbFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYWJlbD90aGlzLmxhYmVsLmdldEJCb3goKVt0aGlzLmF4aXMuaG9yaXo/XCJoZWlnaHRcIjpcIndpZHRoXCJdOjB9LGhhbmRsZU92ZXJmbG93OmZ1bmN0aW9uKGMpe3ZhciBoPXRoaXMuYXhpcyxmPWgub3B0aW9ucy5sYWJlbHMsZz1jLngsYj1oLmNoYXJ0LmNoYXJ0V2lkdGgsYT1oLmNoYXJ0LnNwYWNpbmcsZD10KGgubGFiZWxMZWZ0LE1hdGgubWluKGgucG9zLGFbM10pKTthPXQoaC5sYWJlbFJpZ2h0LE1hdGgubWF4KGguaXNSYWRpYWw/MDpoLnBvcytoLmxlbixiLWFbMV0pKTt2YXIgZT10aGlzLmxhYmVsLGw9dGhpcy5yb3RhdGlvbixMPXtsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjF9W2gubGFiZWxBbGlnbnx8ZS5hdHRyKFwiYWxpZ25cIildLEU9ZS5nZXRCQm94KCkud2lkdGgscD1oLmdldFNsb3RXaWR0aCh0aGlzKSx1PXAsaz0xLHIseD17fTtpZihsfHxcImp1c3RpZnlcIiE9PVxudChmLm92ZXJmbG93LFwianVzdGlmeVwiKSkwPmwmJmctTCpFPGQ/cj1NYXRoLnJvdW5kKGcvTWF0aC5jb3MobCp5KS1kKTowPGwmJmcrTCpFPmEmJihyPU1hdGgucm91bmQoKGItZykvTWF0aC5jb3MobCp5KSkpO2Vsc2UgaWYoYj1nKygxLUwpKkUsZy1MKkU8ZD91PWMueCt1KigxLUwpLWQ6Yj5hJiYodT1hLWMueCt1Kkwsaz0tMSksdT1NYXRoLm1pbihwLHUpLHU8cCYmXCJjZW50ZXJcIj09PWgubGFiZWxBbGlnbiYmKGMueCs9ayoocC11LUwqKHAtTWF0aC5taW4oRSx1KSkpKSxFPnV8fGguYXV0b1JvdGF0aW9uJiYoZS5zdHlsZXN8fHt9KS53aWR0aClyPXU7ciYmKHRoaXMuc2hvcnRlbkxhYmVsP3RoaXMuc2hvcnRlbkxhYmVsKCk6KHgud2lkdGg9TWF0aC5mbG9vcihyKSwoZi5zdHlsZXx8e30pLnRleHRPdmVyZmxvd3x8KHgudGV4dE92ZXJmbG93PVwiZWxsaXBzaXNcIiksZS5jc3MoeCkpKX0sZ2V0UG9zaXRpb246ZnVuY3Rpb24oaCxuLGYsZyl7dmFyIGI9dGhpcy5heGlzLGE9Yi5jaGFydCxcbmQ9ZyYmYS5vbGRDaGFydEhlaWdodHx8YS5jaGFydEhlaWdodDtoPXt4Omg/Yy5jb3JyZWN0RmxvYXQoYi50cmFuc2xhdGUobitmLG51bGwsbnVsbCxnKStiLnRyYW5zQik6Yi5sZWZ0K2Iub2Zmc2V0KyhiLm9wcG9zaXRlPyhnJiZhLm9sZENoYXJ0V2lkdGh8fGEuY2hhcnRXaWR0aCktYi5yaWdodC1iLmxlZnQ6MCkseTpoP2QtYi5ib3R0b20rYi5vZmZzZXQtKGIub3Bwb3NpdGU/Yi5oZWlnaHQ6MCk6Yy5jb3JyZWN0RmxvYXQoZC1iLnRyYW5zbGF0ZShuK2YsbnVsbCxudWxsLGcpLWIudHJhbnNCKX07aC55PU1hdGgubWF4KE1hdGgubWluKGgueSwxRTUpLC0xRTUpO0ModGhpcyxcImFmdGVyR2V0UG9zaXRpb25cIix7cG9zOmh9KTtyZXR1cm4gaH0sZ2V0TGFiZWxQb3NpdGlvbjpmdW5jdGlvbihjLG4sZixnLGIsYSxkLGUpe3ZhciBsPXRoaXMuYXhpcyxoPWwudHJhbnNBLEU9bC5pc0xpbmtlZCYmbC5saW5rZWRQYXJlbnQ/bC5saW5rZWRQYXJlbnQucmV2ZXJzZWQ6bC5yZXZlcnNlZCxwPVxubC5zdGFnZ2VyTGluZXMsdT1sLnRpY2tSb3RDb3JyfHx7eDowLHk6MH0saz1iLnkscj1nfHxsLnJlc2VydmVTcGFjZURlZmF1bHQ/MDotbC5sYWJlbE9mZnNldCooXCJjZW50ZXJcIj09PWwubGFiZWxBbGlnbj8uNToxKSx4PXt9O0Yoayl8fChrPTA9PT1sLnNpZGU/Zi5yb3RhdGlvbj8tODotZi5nZXRCQm94KCkuaGVpZ2h0OjI9PT1sLnNpZGU/dS55Kzg6TWF0aC5jb3MoZi5yb3RhdGlvbip5KSoodS55LWYuZ2V0QkJveCghMSwwKS5oZWlnaHQvMikpO2M9YytiLngrcit1LngtKGEmJmc/YSpoKihFPy0xOjEpOjApO249bitrLShhJiYhZz9hKmgqKEU/MTotMSk6MCk7cCYmKGY9ZC8oZXx8MSklcCxsLm9wcG9zaXRlJiYoZj1wLWYtMSksbis9bC5sYWJlbE9mZnNldC9wKmYpO3gueD1jO3gueT1NYXRoLnJvdW5kKG4pO0ModGhpcyxcImFmdGVyR2V0TGFiZWxQb3NpdGlvblwiLHtwb3M6eCx0aWNrbWFya09mZnNldDphLGluZGV4OmR9KTtyZXR1cm4geH0sZ2V0TWFya1BhdGg6ZnVuY3Rpb24oYyxcbm4sZixnLGIsYSl7cmV0dXJuIGEuY3Jpc3BMaW5lKFtcIk1cIixjLG4sXCJMXCIsYysoYj8wOi1mKSxuKyhiP2Y6MCldLGcpfSxyZW5kZXJHcmlkTGluZTpmdW5jdGlvbihjLG4sZil7dmFyIGc9dGhpcy5heGlzLGI9Zy5vcHRpb25zLGE9dGhpcy5ncmlkTGluZSxkPXt9LGU9dGhpcy5wb3MsbD10aGlzLnR5cGUsaD10KHRoaXMudGlja21hcmtPZmZzZXQsZy50aWNrbWFya09mZnNldCksRT1nLmNoYXJ0LnJlbmRlcmVyLHA9bD9sK1wiR3JpZFwiOlwiZ3JpZFwiLHU9YltwK1wiTGluZVdpZHRoXCJdLGs9YltwK1wiTGluZUNvbG9yXCJdO2I9YltwK1wiTGluZURhc2hTdHlsZVwiXTthfHwoZy5jaGFydC5zdHlsZWRNb2RlfHwoZC5zdHJva2U9ayxkW1wic3Ryb2tlLXdpZHRoXCJdPXUsYiYmKGQuZGFzaHN0eWxlPWIpKSxsfHwoZC56SW5kZXg9MSksYyYmKG49MCksdGhpcy5ncmlkTGluZT1hPUUucGF0aCgpLmF0dHIoZCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLVwiKyhsP2wrXCItXCI6XCJcIikrXCJncmlkLWxpbmVcIikuYWRkKGcuZ3JpZEdyb3VwKSk7XG5pZihhJiYoZj1nLmdldFBsb3RMaW5lUGF0aCh7dmFsdWU6ZStoLGxpbmVXaWR0aDphLnN0cm9rZVdpZHRoKCkqZixmb3JjZTpcInBhc3NcIixvbGQ6Y30pKSlhW2N8fHRoaXMuaXNOZXc/XCJhdHRyXCI6XCJhbmltYXRlXCJdKHtkOmYsb3BhY2l0eTpufSl9LHJlbmRlck1hcms6ZnVuY3Rpb24oYyxuLGYpe3ZhciBnPXRoaXMuYXhpcyxiPWcub3B0aW9ucyxhPWcuY2hhcnQucmVuZGVyZXIsZD10aGlzLnR5cGUsZT1kP2QrXCJUaWNrXCI6XCJ0aWNrXCIsbD1nLnRpY2tTaXplKGUpLGg9dGhpcy5tYXJrLEU9IWgscD1jLng7Yz1jLnk7dmFyIHU9dChiW2UrXCJXaWR0aFwiXSwhZCYmZy5pc1hBeGlzPzE6MCk7Yj1iW2UrXCJDb2xvclwiXTtsJiYoZy5vcHBvc2l0ZSYmKGxbMF09LWxbMF0pLEUmJih0aGlzLm1hcms9aD1hLnBhdGgoKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtXCIrKGQ/ZCtcIi1cIjpcIlwiKStcInRpY2tcIikuYWRkKGcuYXhpc0dyb3VwKSxnLmNoYXJ0LnN0eWxlZE1vZGV8fGguYXR0cih7c3Ryb2tlOmIsXCJzdHJva2Utd2lkdGhcIjp1fSkpLFxuaFtFP1wiYXR0clwiOlwiYW5pbWF0ZVwiXSh7ZDp0aGlzLmdldE1hcmtQYXRoKHAsYyxsWzBdLGguc3Ryb2tlV2lkdGgoKSpmLGcuaG9yaXosYSksb3BhY2l0eTpufSkpfSxyZW5kZXJMYWJlbDpmdW5jdGlvbihjLG4sZixnKXt2YXIgYj10aGlzLmF4aXMsYT1iLmhvcml6LGQ9Yi5vcHRpb25zLGU9dGhpcy5sYWJlbCxsPWQubGFiZWxzLGg9bC5zdGVwO2I9dCh0aGlzLnRpY2ttYXJrT2Zmc2V0LGIudGlja21hcmtPZmZzZXQpO3ZhciBFPSEwLHA9Yy54O2M9Yy55O2UmJkIocCkmJihlLnh5PWM9dGhpcy5nZXRMYWJlbFBvc2l0aW9uKHAsYyxlLGEsbCxiLGcsaCksdGhpcy5pc0ZpcnN0JiYhdGhpcy5pc0xhc3QmJiF0KGQuc2hvd0ZpcnN0TGFiZWwsMSl8fHRoaXMuaXNMYXN0JiYhdGhpcy5pc0ZpcnN0JiYhdChkLnNob3dMYXN0TGFiZWwsMSk/RT0hMTohYXx8bC5zdGVwfHxsLnJvdGF0aW9ufHxufHwwPT09Znx8dGhpcy5oYW5kbGVPdmVyZmxvdyhjKSxoJiZnJWgmJihFPSExKSxFJiZCKGMueSk/XG4oYy5vcGFjaXR5PWYsZVt0aGlzLmlzTmV3TGFiZWw/XCJhdHRyXCI6XCJhbmltYXRlXCJdKGMpLHRoaXMuaXNOZXdMYWJlbD0hMSk6KGUuYXR0cihcInlcIiwtOTk5OSksdGhpcy5pc05ld0xhYmVsPSEwKSl9LHJlbmRlcjpmdW5jdGlvbihoLG4sZil7dmFyIGc9dGhpcy5heGlzLGI9Zy5ob3JpeixhPXRoaXMucG9zLGQ9dCh0aGlzLnRpY2ttYXJrT2Zmc2V0LGcudGlja21hcmtPZmZzZXQpO2E9dGhpcy5nZXRQb3NpdGlvbihiLGEsZCxuKTtkPWEueDt2YXIgZT1hLnk7Zz1iJiZkPT09Zy5wb3MrZy5sZW58fCFiJiZlPT09Zy5wb3M/LTE6MTtmPXQoZiwxKTt0aGlzLmlzQWN0aXZlPSEwO3RoaXMucmVuZGVyR3JpZExpbmUobixmLGcpO3RoaXMucmVuZGVyTWFyayhhLGYsZyk7dGhpcy5yZW5kZXJMYWJlbChhLG4sZixoKTt0aGlzLmlzTmV3PSExO2MuZmlyZUV2ZW50KHRoaXMsXCJhZnRlclJlbmRlclwiKX0sZGVzdHJveTpmdW5jdGlvbigpe0codGhpcyx0aGlzLmF4aXMpfX19KTtNKEksXCJwYXJ0cy9BeGlzLmpzXCIsXG5bSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmFycmF5TWF4LEc9Zi5hcnJheU1pbix6PWYuZGVmaW5lZCxCPWYuZGVzdHJveU9iamVjdFByb3BlcnRpZXMsdD1mLmV4dGVuZCx2PWYuaXNBcnJheSxDPWYuaXNOdW1iZXIsSD1mLmlzU3RyaW5nLHk9Zi5vYmplY3RFYWNoLGg9Zi5waWNrLG49Zi5zcGxhdCxxPWYuc3luY1RpbWVvdXQsZz1jLmFkZEV2ZW50LGI9Yy5hbmltT2JqZWN0LGE9Yy5jb2xvcixkPWMuY29ycmVjdEZsb2F0LGU9Yy5kZWZhdWx0T3B0aW9ucyxsPWMuZGVnMnJhZCxMPWMuZmlyZUV2ZW50LEU9Yy5mb3JtYXQscD1jLmdldE1hZ25pdHVkZSx1PWMubWVyZ2Usaz1jLm5vcm1hbGl6ZVRpY2tJbnRlcnZhbCxyPWMucmVtb3ZlRXZlbnQseD1jLnNlcmllc1R5cGVzLEE9Yy5UaWNrO2Y9ZnVuY3Rpb24oKXt0aGlzLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt0KGYucHJvdG90eXBlLHtkZWZhdWx0T3B0aW9uczp7ZGF0ZVRpbWVMYWJlbEZvcm1hdHM6e21pbGxpc2Vjb25kOnttYWluOlwiJUg6JU06JVMuJUxcIixcbnJhbmdlOiExfSxzZWNvbmQ6e21haW46XCIlSDolTTolU1wiLHJhbmdlOiExfSxtaW51dGU6e21haW46XCIlSDolTVwiLHJhbmdlOiExfSxob3VyOnttYWluOlwiJUg6JU1cIixyYW5nZTohMX0sZGF5OnttYWluOlwiJWUuICViXCJ9LHdlZWs6e21haW46XCIlZS4gJWJcIn0sbW9udGg6e21haW46XCIlYiAnJXlcIn0seWVhcjp7bWFpbjpcIiVZXCJ9fSxlbmRPblRpY2s6ITEsbGFiZWxzOntlbmFibGVkOiEwLGluZGVudGF0aW9uOjEwLHg6MCxzdHlsZTp7Y29sb3I6XCIjNjY2NjY2XCIsY3Vyc29yOlwiZGVmYXVsdFwiLGZvbnRTaXplOlwiMTFweFwifX0sbWF4UGFkZGluZzouMDEsbWlub3JUaWNrTGVuZ3RoOjIsbWlub3JUaWNrUG9zaXRpb246XCJvdXRzaWRlXCIsbWluUGFkZGluZzouMDEsc2hvd0VtcHR5OiEwLHN0YXJ0T2ZXZWVrOjEsc3RhcnRPblRpY2s6ITEsdGlja0xlbmd0aDoxMCx0aWNrUGl4ZWxJbnRlcnZhbDoxMDAsdGlja21hcmtQbGFjZW1lbnQ6XCJiZXR3ZWVuXCIsdGlja1Bvc2l0aW9uOlwib3V0c2lkZVwiLHRpdGxlOnthbGlnbjpcIm1pZGRsZVwiLFxuc3R5bGU6e2NvbG9yOlwiIzY2NjY2NlwifX0sdHlwZTpcImxpbmVhclwiLG1pbm9yR3JpZExpbmVDb2xvcjpcIiNmMmYyZjJcIixtaW5vckdyaWRMaW5lV2lkdGg6MSxtaW5vclRpY2tDb2xvcjpcIiM5OTk5OTlcIixsaW5lQ29sb3I6XCIjY2NkNmViXCIsbGluZVdpZHRoOjEsZ3JpZExpbmVDb2xvcjpcIiNlNmU2ZTZcIix0aWNrQ29sb3I6XCIjY2NkNmViXCJ9LGRlZmF1bHRZQXhpc09wdGlvbnM6e2VuZE9uVGljazohMCxtYXhQYWRkaW5nOi4wNSxtaW5QYWRkaW5nOi4wNSx0aWNrUGl4ZWxJbnRlcnZhbDo3MixzaG93TGFzdExhYmVsOiEwLGxhYmVsczp7eDotOH0sc3RhcnRPblRpY2s6ITAsdGl0bGU6e3JvdGF0aW9uOjI3MCx0ZXh0OlwiVmFsdWVzXCJ9LHN0YWNrTGFiZWxzOnthbGxvd092ZXJsYXA6ITEsZW5hYmxlZDohMSxjcm9wOiEwLG92ZXJmbG93OlwianVzdGlmeVwiLGZvcm1hdHRlcjpmdW5jdGlvbigpe3JldHVybiBjLm51bWJlckZvcm1hdCh0aGlzLnRvdGFsLC0xKX0sc3R5bGU6e2NvbG9yOlwiIzAwMDAwMFwiLFxuZm9udFNpemU6XCIxMXB4XCIsZm9udFdlaWdodDpcImJvbGRcIix0ZXh0T3V0bGluZTpcIjFweCBjb250cmFzdFwifX0sZ3JpZExpbmVXaWR0aDoxLGxpbmVXaWR0aDowfSxkZWZhdWx0TGVmdEF4aXNPcHRpb25zOntsYWJlbHM6e3g6LTE1fSx0aXRsZTp7cm90YXRpb246MjcwfX0sZGVmYXVsdFJpZ2h0QXhpc09wdGlvbnM6e2xhYmVsczp7eDoxNX0sdGl0bGU6e3JvdGF0aW9uOjkwfX0sZGVmYXVsdEJvdHRvbUF4aXNPcHRpb25zOntsYWJlbHM6e2F1dG9Sb3RhdGlvbjpbLTQ1XSx4OjB9LG1hcmdpbjoxNSx0aXRsZTp7cm90YXRpb246MH19LGRlZmF1bHRUb3BBeGlzT3B0aW9uczp7bGFiZWxzOnthdXRvUm90YXRpb246Wy00NV0seDowfSxtYXJnaW46MTUsdGl0bGU6e3JvdGF0aW9uOjB9fSxpbml0OmZ1bmN0aW9uKGEsYil7dmFyIGQ9Yi5pc1gsbT10aGlzO20uY2hhcnQ9YTttLmhvcml6PWEuaW52ZXJ0ZWQmJiFtLmlzWkF4aXM/IWQ6ZDttLmlzWEF4aXM9ZDttLmNvbGw9bS5jb2xsfHwoZD9cInhBeGlzXCI6XG5cInlBeGlzXCIpO0wodGhpcyxcImluaXRcIix7dXNlck9wdGlvbnM6Yn0pO20ub3Bwb3NpdGU9Yi5vcHBvc2l0ZTttLnNpZGU9Yi5zaWRlfHwobS5ob3Jpej9tLm9wcG9zaXRlPzA6MjptLm9wcG9zaXRlPzE6Myk7bS5zZXRPcHRpb25zKGIpO3ZhciBlPXRoaXMub3B0aW9ucyx3PWUudHlwZTttLmxhYmVsRm9ybWF0dGVyPWUubGFiZWxzLmZvcm1hdHRlcnx8bS5kZWZhdWx0TGFiZWxGb3JtYXR0ZXI7bS51c2VyT3B0aW9ucz1iO20ubWluUGl4ZWxQYWRkaW5nPTA7bS5yZXZlcnNlZD1lLnJldmVyc2VkO20udmlzaWJsZT0hMSE9PWUudmlzaWJsZTttLnpvb21FbmFibGVkPSExIT09ZS56b29tRW5hYmxlZDttLmhhc05hbWVzPVwiY2F0ZWdvcnlcIj09PXd8fCEwPT09ZS5jYXRlZ29yaWVzO20uY2F0ZWdvcmllcz1lLmNhdGVnb3JpZXN8fG0uaGFzTmFtZXM7bS5uYW1lc3x8KG0ubmFtZXM9W10sbS5uYW1lcy5rZXlzPXt9KTttLnBsb3RMaW5lc0FuZEJhbmRzR3JvdXBzPXt9O20uaXNMb2c9XCJsb2dhcml0aG1pY1wiPT09XG53O20uaXNEYXRldGltZUF4aXM9XCJkYXRldGltZVwiPT09dzttLnBvc2l0aXZlVmFsdWVzT25seT1tLmlzTG9nJiYhbS5hbGxvd05lZ2F0aXZlTG9nO20uaXNMaW5rZWQ9eihlLmxpbmtlZFRvKTttLnRpY2tzPXt9O20ubGFiZWxFZGdlPVtdO20ubWlub3JUaWNrcz17fTttLnBsb3RMaW5lc0FuZEJhbmRzPVtdO20uYWx0ZXJuYXRlQmFuZHM9e307bS5sZW49MDttLm1pblJhbmdlPW0udXNlck1pblJhbmdlPWUubWluUmFuZ2V8fGUubWF4Wm9vbTttLnJhbmdlPWUucmFuZ2U7bS5vZmZzZXQ9ZS5vZmZzZXR8fDA7bS5zdGFja3M9e307bS5vbGRTdGFja3M9e307bS5zdGFja3NUb3VjaGVkPTA7bS5tYXg9bnVsbDttLm1pbj1udWxsO20uY3Jvc3NoYWlyPWgoZS5jcm9zc2hhaXIsbihhLm9wdGlvbnMudG9vbHRpcC5jcm9zc2hhaXJzKVtkPzA6MV0sITEpO2I9bS5vcHRpb25zLmV2ZW50czstMT09PWEuYXhlcy5pbmRleE9mKG0pJiYoZD9hLmF4ZXMuc3BsaWNlKGEueEF4aXMubGVuZ3RoLDAsbSk6XG5hLmF4ZXMucHVzaChtKSxhW20uY29sbF0ucHVzaChtKSk7bS5zZXJpZXM9bS5zZXJpZXN8fFtdO2EuaW52ZXJ0ZWQmJiFtLmlzWkF4aXMmJmQmJnZvaWQgMD09PW0ucmV2ZXJzZWQmJihtLnJldmVyc2VkPSEwKTt5KGIsZnVuY3Rpb24oYSxiKXtjLmlzRnVuY3Rpb24oYSkmJmcobSxiLGEpfSk7bS5saW4ybG9nPWUubGluZWFyVG9Mb2dDb252ZXJ0ZXJ8fG0ubGluMmxvZzttLmlzTG9nJiYobS52YWwybGluPW0ubG9nMmxpbixtLmxpbjJ2YWw9bS5saW4ybG9nKTtMKHRoaXMsXCJhZnRlckluaXRcIil9LHNldE9wdGlvbnM6ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zPXUodGhpcy5kZWZhdWx0T3B0aW9ucyxcInlBeGlzXCI9PT10aGlzLmNvbGwmJnRoaXMuZGVmYXVsdFlBeGlzT3B0aW9ucyxbdGhpcy5kZWZhdWx0VG9wQXhpc09wdGlvbnMsdGhpcy5kZWZhdWx0UmlnaHRBeGlzT3B0aW9ucyx0aGlzLmRlZmF1bHRCb3R0b21BeGlzT3B0aW9ucyx0aGlzLmRlZmF1bHRMZWZ0QXhpc09wdGlvbnNdW3RoaXMuc2lkZV0sXG51KGVbdGhpcy5jb2xsXSxhKSk7TCh0aGlzLFwiYWZ0ZXJTZXRPcHRpb25zXCIse3VzZXJPcHRpb25zOmF9KX0sZGVmYXVsdExhYmVsRm9ybWF0dGVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5heGlzLGI9dGhpcy52YWx1ZSxkPWEuY2hhcnQudGltZSxrPWEuY2F0ZWdvcmllcyxsPXRoaXMuZGF0ZVRpbWVMYWJlbEZvcm1hdCxnPWUubGFuZyxyPWcubnVtZXJpY1N5bWJvbHM7Zz1nLm51bWVyaWNTeW1ib2xNYWduaXR1ZGV8fDFFMzt2YXIgeD1yJiZyLmxlbmd0aCxwPWEub3B0aW9ucy5sYWJlbHMuZm9ybWF0O2E9YS5pc0xvZz9NYXRoLmFicyhiKTphLnRpY2tJbnRlcnZhbDtpZihwKXZhciBoPUUocCx0aGlzLGQpO2Vsc2UgaWYoayloPWI7ZWxzZSBpZihsKWg9ZC5kYXRlRm9ybWF0KGwsYik7ZWxzZSBpZih4JiYxRTM8PWEpZm9yKDt4LS0mJnZvaWQgMD09PWg7KWQ9TWF0aC5wb3coZyx4KzEpLGE+PWQmJjA9PT0xMCpiJWQmJm51bGwhPT1yW3hdJiYwIT09YiYmKGg9Yy5udW1iZXJGb3JtYXQoYi9cbmQsLTEpK3JbeF0pO3ZvaWQgMD09PWgmJihoPTFFNDw9TWF0aC5hYnMoYik/Yy5udW1iZXJGb3JtYXQoYiwtMSk6Yy5udW1iZXJGb3JtYXQoYiwtMSx2b2lkIDAsXCJcIikpO3JldHVybiBofSxnZXRTZXJpZXNFeHRyZW1lczpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmNoYXJ0LGQ7TCh0aGlzLFwiZ2V0U2VyaWVzRXh0cmVtZXNcIixudWxsLGZ1bmN0aW9uKCl7YS5oYXNWaXNpYmxlU2VyaWVzPSExO2EuZGF0YU1pbj1hLmRhdGFNYXg9YS50aHJlc2hvbGQ9bnVsbDthLnNvZnRUaHJlc2hvbGQ9IWEuaXNYQXhpczthLmJ1aWxkU3RhY2tzJiZhLmJ1aWxkU3RhY2tzKCk7YS5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihtKXtpZihtLnZpc2libGV8fCFiLm9wdGlvbnMuY2hhcnQuaWdub3JlSGlkZGVuU2VyaWVzKXt2YXIgZT1tLm9wdGlvbnMsdz1lLnRocmVzaG9sZDthLmhhc1Zpc2libGVTZXJpZXM9ITA7YS5wb3NpdGl2ZVZhbHVlc09ubHkmJjA+PXcmJih3PW51bGwpO2lmKGEuaXNYQXhpcyl7aWYoZT1cbm0ueERhdGEsZS5sZW5ndGgpe2Q9bS5nZXRYRXh0cmVtZXMoZSk7dmFyIGs9ZC5taW47dmFyIGM9ZC5tYXg7QyhrKXx8ayBpbnN0YW5jZW9mIERhdGV8fChlPWUuZmlsdGVyKEMpLGQ9bS5nZXRYRXh0cmVtZXMoZSksaz1kLm1pbixjPWQubWF4KTtlLmxlbmd0aCYmKGEuZGF0YU1pbj1NYXRoLm1pbihoKGEuZGF0YU1pbixrKSxrKSxhLmRhdGFNYXg9TWF0aC5tYXgoaChhLmRhdGFNYXgsYyksYykpfX1lbHNlIGlmKG0uZ2V0RXh0cmVtZXMoKSxjPW0uZGF0YU1heCxrPW0uZGF0YU1pbix6KGspJiZ6KGMpJiYoYS5kYXRhTWluPU1hdGgubWluKGgoYS5kYXRhTWluLGspLGspLGEuZGF0YU1heD1NYXRoLm1heChoKGEuZGF0YU1heCxjKSxjKSkseih3KSYmKGEudGhyZXNob2xkPXcpLCFlLnNvZnRUaHJlc2hvbGR8fGEucG9zaXRpdmVWYWx1ZXNPbmx5KWEuc29mdFRocmVzaG9sZD0hMX19KX0pO0wodGhpcyxcImFmdGVyR2V0U2VyaWVzRXh0cmVtZXNcIil9LHRyYW5zbGF0ZTpmdW5jdGlvbihhLFxuYixkLGUsayxjKXt2YXIgbT10aGlzLmxpbmtlZFBhcmVudHx8dGhpcyx3PTEsbD0wLGc9ZT9tLm9sZFRyYW5zQTptLnRyYW5zQTtlPWU/bS5vbGRNaW46bS5taW47dmFyIHI9bS5taW5QaXhlbFBhZGRpbmc7az0obS5pc09yZGluYWx8fG0uaXNCcm9rZW58fG0uaXNMb2cmJmspJiZtLmxpbjJ2YWw7Z3x8KGc9bS50cmFuc0EpO2QmJih3Kj0tMSxsPW0ubGVuKTttLnJldmVyc2VkJiYodyo9LTEsbC09dyoobS5zZWN0b3J8fG0ubGVuKSk7Yj8oYT0oYSp3K2wtcikvZytlLGsmJihhPW0ubGluMnZhbChhKSkpOihrJiYoYT1tLnZhbDJsaW4oYSkpLGE9QyhlKT93KihhLWUpKmcrbCt3KnIrKEMoYyk/ZypjOjApOnZvaWQgMCk7cmV0dXJuIGF9LHRvUGl4ZWxzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMudHJhbnNsYXRlKGEsITEsIXRoaXMuaG9yaXosbnVsbCwhMCkrKGI/MDp0aGlzLnBvcyl9LHRvVmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy50cmFuc2xhdGUoYS0oYj8wOnRoaXMucG9zKSxcbiEwLCF0aGlzLmhvcml6LG51bGwsITApfSxnZXRQbG90TGluZVBhdGg6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxkPWIuY2hhcnQsZT1iLmxlZnQsdz1iLnRvcCxrPWEub2xkLGM9YS52YWx1ZSxsPWEudHJhbnNsYXRlZFZhbHVlLGc9YS5saW5lV2lkdGgscj1hLmZvcmNlLHgscCxBLHUsbj1rJiZkLm9sZENoYXJ0SGVpZ2h0fHxkLmNoYXJ0SGVpZ2h0LGY9ayYmZC5vbGRDaGFydFdpZHRofHxkLmNoYXJ0V2lkdGgsRSxxPWIudHJhbnNCLHY9ZnVuY3Rpb24oYSxiLGQpe2lmKFwicGFzc1wiIT09ciYmYTxifHxhPmQpcj9hPU1hdGgubWluKE1hdGgubWF4KGIsYSksZCk6RT0hMDtyZXR1cm4gYX07YT17dmFsdWU6YyxsaW5lV2lkdGg6ZyxvbGQ6ayxmb3JjZTpyLGFjcm9zc1BhbmVzOmEuYWNyb3NzUGFuZXMsdHJhbnNsYXRlZFZhbHVlOmx9O0wodGhpcyxcImdldFBsb3RMaW5lUGF0aFwiLGEsZnVuY3Rpb24oYSl7bD1oKGwsYi50cmFuc2xhdGUoYyxudWxsLG51bGwsaykpO2w9TWF0aC5taW4oTWF0aC5tYXgoLTFFNSxcbmwpLDFFNSk7eD1BPU1hdGgucm91bmQobCtxKTtwPXU9TWF0aC5yb3VuZChuLWwtcSk7QyhsKT9iLmhvcml6PyhwPXcsdT1uLWIuYm90dG9tLHg9QT12KHgsZSxlK2Iud2lkdGgpKTooeD1lLEE9Zi1iLnJpZ2h0LHA9dT12KHAsdyx3K2IuaGVpZ2h0KSk6KEU9ITAscj0hMSk7YS5wYXRoPUUmJiFyP251bGw6ZC5yZW5kZXJlci5jcmlzcExpbmUoW1wiTVwiLHgscCxcIkxcIixBLHVdLGd8fDEpfSk7cmV0dXJuIGEucGF0aH0sZ2V0TGluZWFyVGlja1Bvc2l0aW9uczpmdW5jdGlvbihhLGIsZSl7dmFyIG09ZChNYXRoLmZsb29yKGIvYSkqYSk7ZT1kKE1hdGguY2VpbChlL2EpKmEpO3ZhciB3PVtdLGs7ZChtK2EpPT09bSYmKGs9MjApO2lmKHRoaXMuc2luZ2xlKXJldHVybltiXTtmb3IoYj1tO2I8PWU7KXt3LnB1c2goYik7Yj1kKGIrYSxrKTtpZihiPT09YylicmVhazt2YXIgYz1ifXJldHVybiB3fSxnZXRNaW5vclRpY2tJbnRlcnZhbDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucztyZXR1cm4hMD09PVxuYS5taW5vclRpY2tzP2goYS5taW5vclRpY2tJbnRlcnZhbCxcImF1dG9cIik6ITE9PT1hLm1pbm9yVGlja3M/bnVsbDphLm1pbm9yVGlja0ludGVydmFsfSxnZXRNaW5vclRpY2tQb3NpdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5vcHRpb25zLGQ9YS50aWNrUG9zaXRpb25zLGU9YS5taW5vclRpY2tJbnRlcnZhbCxrPVtdLGM9YS5wb2ludFJhbmdlUGFkZGluZ3x8MCxsPWEubWluLWM7Yz1hLm1heCtjO3ZhciBnPWMtbDtpZihnJiZnL2U8YS5sZW4vMylpZihhLmlzTG9nKXRoaXMucGFkZGVkVGlja3MuZm9yRWFjaChmdW5jdGlvbihiLGQsbSl7ZCYmay5wdXNoLmFwcGx5KGssYS5nZXRMb2dUaWNrUG9zaXRpb25zKGUsbVtkLTFdLG1bZF0sITApKX0pO2Vsc2UgaWYoYS5pc0RhdGV0aW1lQXhpcyYmXCJhdXRvXCI9PT10aGlzLmdldE1pbm9yVGlja0ludGVydmFsKCkpaz1rLmNvbmNhdChhLmdldFRpbWVUaWNrcyhhLm5vcm1hbGl6ZVRpbWVUaWNrSW50ZXJ2YWwoZSksbCxjLGIuc3RhcnRPZldlZWspKTtcbmVsc2UgZm9yKGI9bCsoZFswXS1sKSVlO2I8PWMmJmIhPT1rWzBdO2IrPWUpay5wdXNoKGIpOzAhPT1rLmxlbmd0aCYmYS50cmltVGlja3Moayk7cmV0dXJuIGt9LGFkanVzdEZvck1pblJhbmdlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLGI9dGhpcy5taW4sZD10aGlzLm1heCxlLGssYyxsLGc7dGhpcy5pc1hBeGlzJiZ2b2lkIDA9PT10aGlzLm1pblJhbmdlJiYhdGhpcy5pc0xvZyYmKHooYS5taW4pfHx6KGEubWF4KT90aGlzLm1pblJhbmdlPW51bGw6KHRoaXMuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7bD1hLnhEYXRhO2ZvcihrPWc9YS54SW5jcmVtZW50PzE6bC5sZW5ndGgtMTswPGs7ay0tKWlmKGM9bFtrXS1sW2stMV0sdm9pZCAwPT09ZXx8YzxlKWU9Y30pLHRoaXMubWluUmFuZ2U9TWF0aC5taW4oNSplLHRoaXMuZGF0YU1heC10aGlzLmRhdGFNaW4pKSk7aWYoZC1iPHRoaXMubWluUmFuZ2Upe3ZhciByPXRoaXMuZGF0YU1heC10aGlzLmRhdGFNaW4+PXRoaXMubWluUmFuZ2U7XG52YXIgeD10aGlzLm1pblJhbmdlO3ZhciBwPSh4LWQrYikvMjtwPVtiLXAsaChhLm1pbixiLXApXTtyJiYocFsyXT10aGlzLmlzTG9nP3RoaXMubG9nMmxpbih0aGlzLmRhdGFNaW4pOnRoaXMuZGF0YU1pbik7Yj1GKHApO2Q9W2IreCxoKGEubWF4LGIreCldO3ImJihkWzJdPXRoaXMuaXNMb2c/dGhpcy5sb2cybGluKHRoaXMuZGF0YU1heCk6dGhpcy5kYXRhTWF4KTtkPUcoZCk7ZC1iPHgmJihwWzBdPWQteCxwWzFdPWgoYS5taW4sZC14KSxiPUYocCkpfXRoaXMubWluPWI7dGhpcy5tYXg9ZH0sZ2V0Q2xvc2VzdDpmdW5jdGlvbigpe3ZhciBhO3RoaXMuY2F0ZWdvcmllcz9hPTE6dGhpcy5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgZD1iLmNsb3Nlc3RQb2ludFJhbmdlLG09Yi52aXNpYmxlfHwhYi5jaGFydC5vcHRpb25zLmNoYXJ0Lmlnbm9yZUhpZGRlblNlcmllczshYi5ub1NoYXJlZFRvb2x0aXAmJnooZCkmJm0mJihhPXooYSk/TWF0aC5taW4oYSxkKTpkKX0pO3JldHVybiBhfSxcbm5hbWVUb1g6ZnVuY3Rpb24oYSl7dmFyIGI9dih0aGlzLmNhdGVnb3JpZXMpLGQ9Yj90aGlzLmNhdGVnb3JpZXM6dGhpcy5uYW1lcyxlPWEub3B0aW9ucy54O2Euc2VyaWVzLnJlcXVpcmVTb3J0aW5nPSExO3ooZSl8fChlPSExPT09dGhpcy5vcHRpb25zLnVuaXF1ZU5hbWVzP2Euc2VyaWVzLmF1dG9JbmNyZW1lbnQoKTpiP2QuaW5kZXhPZihhLm5hbWUpOmgoZC5rZXlzW2EubmFtZV0sLTEpKTtpZigtMT09PWUpe2lmKCFiKXZhciBrPWQubGVuZ3RofWVsc2Ugaz1lO3ZvaWQgMCE9PWsmJih0aGlzLm5hbWVzW2tdPWEubmFtZSx0aGlzLm5hbWVzLmtleXNbYS5uYW1lXT1rKTtyZXR1cm4ga30sdXBkYXRlTmFtZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5uYW1lczswPGIubGVuZ3RoJiYoT2JqZWN0LmtleXMoYi5rZXlzKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2RlbGV0ZSBiLmtleXNbYV19KSxiLmxlbmd0aD0wLHRoaXMubWluUmFuZ2U9dGhpcy51c2VyTWluUmFuZ2UsKHRoaXMuc2VyaWVzfHxcbltdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IueEluY3JlbWVudD1udWxsO2lmKCFiLnBvaW50c3x8Yi5pc0RpcnR5RGF0YSlhLm1heD1NYXRoLm1heChhLm1heCxiLnhEYXRhLmxlbmd0aC0xKSxiLnByb2Nlc3NEYXRhKCksYi5nZW5lcmF0ZVBvaW50cygpO2IuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGQsZSl7aWYoZCYmZC5vcHRpb25zJiZ2b2lkIDAhPT1kLm5hbWUpe3ZhciBtPWEubmFtZVRvWChkKTt2b2lkIDAhPT1tJiZtIT09ZC54JiYoZC54PW0sYi54RGF0YVtlXT1tKX19KX0pKX0sc2V0QXhpc1RyYW5zbGF0aW9uOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsZD1iLm1heC1iLm1pbixlPWIuYXhpc1BvaW50UmFuZ2V8fDAsaz0wLHc9MCxjPWIubGlua2VkUGFyZW50LGw9ISFiLmNhdGVnb3JpZXMsZz1iLnRyYW5zQSxyPWIuaXNYQXhpcztpZihyfHxsfHxlKXt2YXIgcD1iLmdldENsb3Nlc3QoKTtjPyhrPWMubWluUG9pbnRPZmZzZXQsdz1jLnBvaW50UmFuZ2VQYWRkaW5nKTpiLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBkPVxubD8xOnI/aChhLm9wdGlvbnMucG9pbnRSYW5nZSxwLDApOmIuYXhpc1BvaW50UmFuZ2V8fDAsbT1hLm9wdGlvbnMucG9pbnRQbGFjZW1lbnQ7ZT1NYXRoLm1heChlLGQpO2lmKCFiLnNpbmdsZXx8bClhPXgueHJhbmdlJiZhIGluc3RhbmNlb2YgeC54cmFuZ2U/IXI6cixrPU1hdGgubWF4KGssYSYmSChtKT8wOmQvMiksdz1NYXRoLm1heCh3LGEmJlwib25cIj09PW0/MDpkKX0pO2M9Yi5vcmRpbmFsU2xvcGUmJnA/Yi5vcmRpbmFsU2xvcGUvcDoxO2IubWluUG9pbnRPZmZzZXQ9ayo9YztiLnBvaW50UmFuZ2VQYWRkaW5nPXcqPWM7Yi5wb2ludFJhbmdlPU1hdGgubWluKGUsYi5zaW5nbGUmJmw/MTpkKTtyJiYoYi5jbG9zZXN0UG9pbnRSYW5nZT1wKX1hJiYoYi5vbGRUcmFuc0E9Zyk7Yi50cmFuc2xhdGlvblNsb3BlPWIudHJhbnNBPWc9Yi5zdGF0aWNTY2FsZXx8Yi5sZW4vKGQrd3x8MSk7Yi50cmFuc0I9Yi5ob3Jpej9iLmxlZnQ6Yi5ib3R0b207Yi5taW5QaXhlbFBhZGRpbmc9ZyprO0wodGhpcyxcblwiYWZ0ZXJTZXRBeGlzVHJhbnNsYXRpb25cIil9LG1pbkZyb21SYW5nZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heC10aGlzLnJhbmdlfSxzZXRUaWNrSW50ZXJ2YWw6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxlPWIuY2hhcnQsdz1iLm9wdGlvbnMsbD1iLmlzTG9nLGc9Yi5pc0RhdGV0aW1lQXhpcyxyPWIuaXNYQXhpcyx4PWIuaXNMaW5rZWQsQT13Lm1heFBhZGRpbmcsdT13Lm1pblBhZGRpbmcsbj13LnRpY2tJbnRlcnZhbCxmPXcudGlja1BpeGVsSW50ZXJ2YWwsRT1iLmNhdGVnb3JpZXMscT1DKGIudGhyZXNob2xkKT9iLnRocmVzaG9sZDpudWxsLHY9Yi5zb2Z0VGhyZXNob2xkO2d8fEV8fHh8fHRoaXMuZ2V0VGlja0Ftb3VudCgpO3ZhciB0PWgoYi51c2VyTWluLHcubWluKTt2YXIgeT1oKGIudXNlck1heCx3Lm1heCk7aWYoeCl7Yi5saW5rZWRQYXJlbnQ9ZVtiLmNvbGxdW3cubGlua2VkVG9dO3ZhciBCPWIubGlua2VkUGFyZW50LmdldEV4dHJlbWVzKCk7Yi5taW49aChCLm1pbixcbkIuZGF0YU1pbik7Yi5tYXg9aChCLm1heCxCLmRhdGFNYXgpO3cudHlwZSE9PWIubGlua2VkUGFyZW50Lm9wdGlvbnMudHlwZSYmYy5lcnJvcigxMSwxLGUpfWVsc2V7aWYoIXYmJnoocSkpaWYoYi5kYXRhTWluPj1xKUI9cSx1PTA7ZWxzZSBpZihiLmRhdGFNYXg8PXEpe3ZhciBIPXE7QT0wfWIubWluPWgodCxCLGIuZGF0YU1pbik7Yi5tYXg9aCh5LEgsYi5kYXRhTWF4KX1sJiYoYi5wb3NpdGl2ZVZhbHVlc09ubHkmJiFhJiYwPj1NYXRoLm1pbihiLm1pbixoKGIuZGF0YU1pbixiLm1pbikpJiZjLmVycm9yKDEwLDEsZSksYi5taW49ZChiLmxvZzJsaW4oYi5taW4pLDE2KSxiLm1heD1kKGIubG9nMmxpbihiLm1heCksMTYpKTtiLnJhbmdlJiZ6KGIubWF4KSYmKGIudXNlck1pbj1iLm1pbj10PU1hdGgubWF4KGIuZGF0YU1pbixiLm1pbkZyb21SYW5nZSgpKSxiLnVzZXJNYXg9eT1iLm1heCxiLnJhbmdlPW51bGwpO0woYixcImZvdW5kRXh0cmVtZXNcIik7Yi5iZWZvcmVQYWRkaW5nJiZiLmJlZm9yZVBhZGRpbmcoKTtcbmIuYWRqdXN0Rm9yTWluUmFuZ2UoKTshKEV8fGIuYXhpc1BvaW50UmFuZ2V8fGIudXNlUGVyY2VudGFnZXx8eCkmJnooYi5taW4pJiZ6KGIubWF4KSYmKGU9Yi5tYXgtYi5taW4pJiYoIXoodCkmJnUmJihiLm1pbi09ZSp1KSwheih5KSYmQSYmKGIubWF4Kz1lKkEpKTtDKHcuc29mdE1pbikmJiFDKGIudXNlck1pbikmJncuc29mdE1pbjxiLm1pbiYmKGIubWluPXQ9dy5zb2Z0TWluKTtDKHcuc29mdE1heCkmJiFDKGIudXNlck1heCkmJncuc29mdE1heD5iLm1heCYmKGIubWF4PXk9dy5zb2Z0TWF4KTtDKHcuZmxvb3IpJiYoYi5taW49TWF0aC5taW4oTWF0aC5tYXgoYi5taW4sdy5mbG9vciksTnVtYmVyLk1BWF9WQUxVRSkpO0Mody5jZWlsaW5nKSYmKGIubWF4PU1hdGgubWF4KE1hdGgubWluKGIubWF4LHcuY2VpbGluZyksaChiLnVzZXJNYXgsLU51bWJlci5NQVhfVkFMVUUpKSk7diYmeihiLmRhdGFNaW4pJiYocT1xfHwwLCF6KHQpJiZiLm1pbjxxJiZiLmRhdGFNaW4+PXE/Yi5taW49XG5iLm9wdGlvbnMubWluUmFuZ2U/TWF0aC5taW4ocSxiLm1heC1iLm1pblJhbmdlKTpxOiF6KHkpJiZiLm1heD5xJiZiLmRhdGFNYXg8PXEmJihiLm1heD1iLm9wdGlvbnMubWluUmFuZ2U/TWF0aC5tYXgocSxiLm1pbitiLm1pblJhbmdlKTpxKSk7Yi50aWNrSW50ZXJ2YWw9Yi5taW49PT1iLm1heHx8dm9pZCAwPT09Yi5taW58fHZvaWQgMD09PWIubWF4PzE6eCYmIW4mJmY9PT1iLmxpbmtlZFBhcmVudC5vcHRpb25zLnRpY2tQaXhlbEludGVydmFsP249Yi5saW5rZWRQYXJlbnQudGlja0ludGVydmFsOmgobix0aGlzLnRpY2tBbW91bnQ/KGIubWF4LWIubWluKS9NYXRoLm1heCh0aGlzLnRpY2tBbW91bnQtMSwxKTp2b2lkIDAsRT8xOihiLm1heC1iLm1pbikqZi9NYXRoLm1heChiLmxlbixmKSk7ciYmIWEmJmIuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5wcm9jZXNzRGF0YShiLm1pbiE9PWIub2xkTWlufHxiLm1heCE9PWIub2xkTWF4KX0pO2Iuc2V0QXhpc1RyYW5zbGF0aW9uKCEwKTtcbmIuYmVmb3JlU2V0VGlja1Bvc2l0aW9ucyYmYi5iZWZvcmVTZXRUaWNrUG9zaXRpb25zKCk7Yi5wb3N0UHJvY2Vzc1RpY2tJbnRlcnZhbCYmKGIudGlja0ludGVydmFsPWIucG9zdFByb2Nlc3NUaWNrSW50ZXJ2YWwoYi50aWNrSW50ZXJ2YWwpKTtiLnBvaW50UmFuZ2UmJiFuJiYoYi50aWNrSW50ZXJ2YWw9TWF0aC5tYXgoYi5wb2ludFJhbmdlLGIudGlja0ludGVydmFsKSk7YT1oKHcubWluVGlja0ludGVydmFsLGIuaXNEYXRldGltZUF4aXMmJmIuY2xvc2VzdFBvaW50UmFuZ2UpOyFuJiZiLnRpY2tJbnRlcnZhbDxhJiYoYi50aWNrSW50ZXJ2YWw9YSk7Z3x8bHx8bnx8KGIudGlja0ludGVydmFsPWsoYi50aWNrSW50ZXJ2YWwsbnVsbCxwKGIudGlja0ludGVydmFsKSxoKHcuYWxsb3dEZWNpbWFscywhKC41PGIudGlja0ludGVydmFsJiY1PmIudGlja0ludGVydmFsJiYxRTM8Yi5tYXgmJjk5OTk+Yi5tYXgpKSwhIXRoaXMudGlja0Ftb3VudCkpO3RoaXMudGlja0Ftb3VudHx8KGIudGlja0ludGVydmFsPVxuYi51bnNxdWlzaCgpKTt0aGlzLnNldFRpY2tQb3NpdGlvbnMoKX0sc2V0VGlja1Bvc2l0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucyxiPWEudGlja1Bvc2l0aW9uczt2YXIgZD10aGlzLmdldE1pbm9yVGlja0ludGVydmFsKCk7dmFyIGU9YS50aWNrUG9zaXRpb25lcixrPWEuc3RhcnRPblRpY2ssbD1hLmVuZE9uVGljazt0aGlzLnRpY2ttYXJrT2Zmc2V0PXRoaXMuY2F0ZWdvcmllcyYmXCJiZXR3ZWVuXCI9PT1hLnRpY2ttYXJrUGxhY2VtZW50JiYxPT09dGhpcy50aWNrSW50ZXJ2YWw/LjU6MDt0aGlzLm1pbm9yVGlja0ludGVydmFsPVwiYXV0b1wiPT09ZCYmdGhpcy50aWNrSW50ZXJ2YWw/dGhpcy50aWNrSW50ZXJ2YWwvNTpkO3RoaXMuc2luZ2xlPXRoaXMubWluPT09dGhpcy5tYXgmJnoodGhpcy5taW4pJiYhdGhpcy50aWNrQW1vdW50JiYocGFyc2VJbnQodGhpcy5taW4sMTApPT09dGhpcy5taW58fCExIT09YS5hbGxvd0RlY2ltYWxzKTt0aGlzLnRpY2tQb3NpdGlvbnM9XG5kPWImJmIuc2xpY2UoKTshZCYmKCF0aGlzLm9yZGluYWxQb3NpdGlvbnMmJih0aGlzLm1heC10aGlzLm1pbikvdGhpcy50aWNrSW50ZXJ2YWw+TWF0aC5tYXgoMip0aGlzLmxlbiwyMDApPyhkPVt0aGlzLm1pbix0aGlzLm1heF0sYy5lcnJvcigxOSwhMSx0aGlzLmNoYXJ0KSk6ZD10aGlzLmlzRGF0ZXRpbWVBeGlzP3RoaXMuZ2V0VGltZVRpY2tzKHRoaXMubm9ybWFsaXplVGltZVRpY2tJbnRlcnZhbCh0aGlzLnRpY2tJbnRlcnZhbCxhLnVuaXRzKSx0aGlzLm1pbix0aGlzLm1heCxhLnN0YXJ0T2ZXZWVrLHRoaXMub3JkaW5hbFBvc2l0aW9ucyx0aGlzLmNsb3Nlc3RQb2ludFJhbmdlLCEwKTp0aGlzLmlzTG9nP3RoaXMuZ2V0TG9nVGlja1Bvc2l0aW9ucyh0aGlzLnRpY2tJbnRlcnZhbCx0aGlzLm1pbix0aGlzLm1heCk6dGhpcy5nZXRMaW5lYXJUaWNrUG9zaXRpb25zKHRoaXMudGlja0ludGVydmFsLHRoaXMubWluLHRoaXMubWF4KSxkLmxlbmd0aD50aGlzLmxlbiYmKGQ9W2RbMF0sXG5kLnBvcCgpXSxkWzBdPT09ZFsxXSYmKGQubGVuZ3RoPTEpKSx0aGlzLnRpY2tQb3NpdGlvbnM9ZCxlJiYoZT1lLmFwcGx5KHRoaXMsW3RoaXMubWluLHRoaXMubWF4XSkpKSYmKHRoaXMudGlja1Bvc2l0aW9ucz1kPWUpO3RoaXMucGFkZGVkVGlja3M9ZC5zbGljZSgwKTt0aGlzLnRyaW1UaWNrcyhkLGssbCk7dGhpcy5pc0xpbmtlZHx8KHRoaXMuc2luZ2xlJiYyPmQubGVuZ3RoJiYhdGhpcy5jYXRlZ29yaWVzJiYodGhpcy5taW4tPS41LHRoaXMubWF4Kz0uNSksYnx8ZXx8dGhpcy5hZGp1c3RUaWNrQW1vdW50KCkpO0wodGhpcyxcImFmdGVyU2V0VGlja1Bvc2l0aW9uc1wiKX0sdHJpbVRpY2tzOmZ1bmN0aW9uKGEsYixkKXt2YXIgZT1hWzBdLG09YVthLmxlbmd0aC0xXSxrPXRoaXMubWluUG9pbnRPZmZzZXR8fDA7TCh0aGlzLFwidHJpbVRpY2tzXCIpO2lmKCF0aGlzLmlzTGlua2VkKXtpZihiJiYtSW5maW5pdHkhPT1lKXRoaXMubWluPWU7ZWxzZSBmb3IoO3RoaXMubWluLWs+YVswXTspYS5zaGlmdCgpO1xuaWYoZCl0aGlzLm1heD1tO2Vsc2UgZm9yKDt0aGlzLm1heCtrPGFbYS5sZW5ndGgtMV07KWEucG9wKCk7MD09PWEubGVuZ3RoJiZ6KGUpJiYhdGhpcy5vcHRpb25zLnRpY2tQb3NpdGlvbnMmJmEucHVzaCgobStlKS8yKX19LGFsaWduVG9PdGhlcnM6ZnVuY3Rpb24oKXt2YXIgYT17fSxiLGQ9dGhpcy5vcHRpb25zOyExPT09dGhpcy5jaGFydC5vcHRpb25zLmNoYXJ0LmFsaWduVGlja3N8fCExPT09ZC5hbGlnblRpY2tzfHwhMT09PWQuc3RhcnRPblRpY2t8fCExPT09ZC5lbmRPblRpY2t8fHRoaXMuaXNMb2d8fHRoaXMuY2hhcnRbdGhpcy5jb2xsXS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWQub3B0aW9ucztlPVtkLmhvcml6P2UubGVmdDplLnRvcCxlLndpZHRoLGUuaGVpZ2h0LGUucGFuZV0uam9pbigpO2Quc2VyaWVzLmxlbmd0aCYmKGFbZV0/Yj0hMDphW2VdPTEpfSk7cmV0dXJuIGJ9LGdldFRpY2tBbW91bnQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMsYj1hLnRpY2tBbW91bnQsXG5kPWEudGlja1BpeGVsSW50ZXJ2YWw7IXooYS50aWNrSW50ZXJ2YWwpJiZ0aGlzLmxlbjxkJiYhdGhpcy5pc1JhZGlhbCYmIXRoaXMuaXNMb2cmJmEuc3RhcnRPblRpY2smJmEuZW5kT25UaWNrJiYoYj0yKTshYiYmdGhpcy5hbGlnblRvT3RoZXJzKCkmJihiPU1hdGguY2VpbCh0aGlzLmxlbi9kKSsxKTs0PmImJih0aGlzLmZpbmFsVGlja0FtdD1iLGI9NSk7dGhpcy50aWNrQW1vdW50PWJ9LGFkanVzdFRpY2tBbW91bnQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMsYj10aGlzLnRpY2tJbnRlcnZhbCxlPXRoaXMudGlja1Bvc2l0aW9ucyxrPXRoaXMudGlja0Ftb3VudCxjPXRoaXMuZmluYWxUaWNrQW10LGw9ZSYmZS5sZW5ndGgsZz1oKHRoaXMudGhyZXNob2xkLHRoaXMuc29mdFRocmVzaG9sZD8wOm51bGwpLHI7aWYodGhpcy5oYXNEYXRhKCkpe2lmKGw8ayl7Zm9yKHI9dGhpcy5taW47ZS5sZW5ndGg8azspZS5sZW5ndGglMnx8cj09PWc/ZS5wdXNoKGQoZVtlLmxlbmd0aC1cbjFdK2IpKTplLnVuc2hpZnQoZChlWzBdLWIpKTt0aGlzLnRyYW5zQSo9KGwtMSkvKGstMSk7dGhpcy5taW49YS5zdGFydE9uVGljaz9lWzBdOk1hdGgubWluKHRoaXMubWluLGVbMF0pO3RoaXMubWF4PWEuZW5kT25UaWNrP2VbZS5sZW5ndGgtMV06TWF0aC5tYXgodGhpcy5tYXgsZVtlLmxlbmd0aC0xXSl9ZWxzZSBsPmsmJih0aGlzLnRpY2tJbnRlcnZhbCo9Mix0aGlzLnNldFRpY2tQb3NpdGlvbnMoKSk7aWYoeihjKSl7Zm9yKGI9YT1lLmxlbmd0aDtiLS07KSgzPT09YyYmMT09PWIlMnx8Mj49YyYmMDxiJiZiPGEtMSkmJmUuc3BsaWNlKGIsMSk7dGhpcy5maW5hbFRpY2tBbXQ9dm9pZCAwfX19LHNldFNjYWxlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZXJpZXMuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gYS5pc0RpcnR5RGF0YXx8YS5pc0RpcnR5fHxhLnhBeGlzJiZhLnhBeGlzLmlzRGlydHl9KSxiO3RoaXMub2xkTWluPXRoaXMubWluO3RoaXMub2xkTWF4PXRoaXMubWF4O3RoaXMub2xkQXhpc0xlbmd0aD1cbnRoaXMubGVuO3RoaXMuc2V0QXhpc1NpemUoKTsoYj10aGlzLmxlbiE9PXRoaXMub2xkQXhpc0xlbmd0aCl8fGF8fHRoaXMuaXNMaW5rZWR8fHRoaXMuZm9yY2VSZWRyYXd8fHRoaXMudXNlck1pbiE9PXRoaXMub2xkVXNlck1pbnx8dGhpcy51c2VyTWF4IT09dGhpcy5vbGRVc2VyTWF4fHx0aGlzLmFsaWduVG9PdGhlcnMoKT8odGhpcy5yZXNldFN0YWNrcyYmdGhpcy5yZXNldFN0YWNrcygpLHRoaXMuZm9yY2VSZWRyYXc9ITEsdGhpcy5nZXRTZXJpZXNFeHRyZW1lcygpLHRoaXMuc2V0VGlja0ludGVydmFsKCksdGhpcy5vbGRVc2VyTWluPXRoaXMudXNlck1pbix0aGlzLm9sZFVzZXJNYXg9dGhpcy51c2VyTWF4LHRoaXMuaXNEaXJ0eXx8KHRoaXMuaXNEaXJ0eT1ifHx0aGlzLm1pbiE9PXRoaXMub2xkTWlufHx0aGlzLm1heCE9PXRoaXMub2xkTWF4KSk6dGhpcy5jbGVhblN0YWNrcyYmdGhpcy5jbGVhblN0YWNrcygpO0wodGhpcyxcImFmdGVyU2V0U2NhbGVcIil9LHNldEV4dHJlbWVzOmZ1bmN0aW9uKGEsXG5iLGQsZSxrKXt2YXIgbT10aGlzLHc9bS5jaGFydDtkPWgoZCwhMCk7bS5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihhKXtkZWxldGUgYS5rZFRyZWV9KTtrPXQoayx7bWluOmEsbWF4OmJ9KTtMKG0sXCJzZXRFeHRyZW1lc1wiLGssZnVuY3Rpb24oKXttLnVzZXJNaW49YTttLnVzZXJNYXg9YjttLmV2ZW50QXJncz1rO2QmJncucmVkcmF3KGUpfSl9LHpvb206ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzLmRhdGFNaW4sZT10aGlzLmRhdGFNYXgsbT10aGlzLm9wdGlvbnMsaz1NYXRoLm1pbihkLGgobS5taW4sZCkpLHc9TWF0aC5tYXgoZSxoKG0ubWF4LGUpKTthPXtuZXdNaW46YSxuZXdNYXg6Yn07TCh0aGlzLFwiem9vbVwiLGEsZnVuY3Rpb24oYSl7dmFyIGI9YS5uZXdNaW4sbT1hLm5ld01heDtpZihiIT09dGhpcy5taW58fG0hPT10aGlzLm1heCl0aGlzLmFsbG93Wm9vbU91dHNpZGV8fCh6KGQpJiYoYjxrJiYoYj1rKSxiPncmJihiPXcpKSx6KGUpJiYobTxrJiYobT1rKSxtPncmJihtPXcpKSksXG50aGlzLmRpc3BsYXlCdG49dm9pZCAwIT09Ynx8dm9pZCAwIT09bSx0aGlzLnNldEV4dHJlbWVzKGIsbSwhMSx2b2lkIDAse3RyaWdnZXI6XCJ6b29tXCJ9KTthLnpvb21lZD0hMH0pO3JldHVybiBhLnpvb21lZH0sc2V0QXhpc1NpemU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNoYXJ0LGI9dGhpcy5vcHRpb25zLGQ9Yi5vZmZzZXRzfHxbMCwwLDAsMF0sZT10aGlzLmhvcml6LGs9dGhpcy53aWR0aD1NYXRoLnJvdW5kKGMucmVsYXRpdmVMZW5ndGgoaChiLndpZHRoLGEucGxvdFdpZHRoLWRbM10rZFsxXSksYS5wbG90V2lkdGgpKSxsPXRoaXMuaGVpZ2h0PU1hdGgucm91bmQoYy5yZWxhdGl2ZUxlbmd0aChoKGIuaGVpZ2h0LGEucGxvdEhlaWdodC1kWzBdK2RbMl0pLGEucGxvdEhlaWdodCkpLGc9dGhpcy50b3A9TWF0aC5yb3VuZChjLnJlbGF0aXZlTGVuZ3RoKGgoYi50b3AsYS5wbG90VG9wK2RbMF0pLGEucGxvdEhlaWdodCxhLnBsb3RUb3ApKTtiPXRoaXMubGVmdD1NYXRoLnJvdW5kKGMucmVsYXRpdmVMZW5ndGgoaChiLmxlZnQsXG5hLnBsb3RMZWZ0K2RbM10pLGEucGxvdFdpZHRoLGEucGxvdExlZnQpKTt0aGlzLmJvdHRvbT1hLmNoYXJ0SGVpZ2h0LWwtZzt0aGlzLnJpZ2h0PWEuY2hhcnRXaWR0aC1rLWI7dGhpcy5sZW49TWF0aC5tYXgoZT9rOmwsMCk7dGhpcy5wb3M9ZT9iOmd9LGdldEV4dHJlbWVzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5pc0xvZztyZXR1cm57bWluOmE/ZCh0aGlzLmxpbjJsb2codGhpcy5taW4pKTp0aGlzLm1pbixtYXg6YT9kKHRoaXMubGluMmxvZyh0aGlzLm1heCkpOnRoaXMubWF4LGRhdGFNaW46dGhpcy5kYXRhTWluLGRhdGFNYXg6dGhpcy5kYXRhTWF4LHVzZXJNaW46dGhpcy51c2VyTWluLHVzZXJNYXg6dGhpcy51c2VyTWF4fX0sZ2V0VGhyZXNob2xkOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaXNMb2csZD1iP3RoaXMubGluMmxvZyh0aGlzLm1pbik6dGhpcy5taW47Yj1iP3RoaXMubGluMmxvZyh0aGlzLm1heCk6dGhpcy5tYXg7bnVsbD09PWF8fC1JbmZpbml0eT09PWE/YT1kOkluZmluaXR5PT09XG5hP2E9YjpkPmE/YT1kOmI8YSYmKGE9Yik7cmV0dXJuIHRoaXMudHJhbnNsYXRlKGEsMCwxLDAsMSl9LGF1dG9MYWJlbEFsaWduOmZ1bmN0aW9uKGEpe3ZhciBiPShoKGEsMCktOTAqdGhpcy5zaWRlKzcyMCklMzYwO2E9e2FsaWduOlwiY2VudGVyXCJ9O0wodGhpcyxcImF1dG9MYWJlbEFsaWduXCIsYSxmdW5jdGlvbihhKXsxNTxiJiYxNjU+Yj9hLmFsaWduPVwicmlnaHRcIjoxOTU8YiYmMzQ1PmImJihhLmFsaWduPVwibGVmdFwiKX0pO3JldHVybiBhLmFsaWdufSx0aWNrU2l6ZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLm9wdGlvbnMsZD1iW2ErXCJMZW5ndGhcIl0sZT1oKGJbYStcIldpZHRoXCJdLFwidGlja1wiPT09YSYmdGhpcy5pc1hBeGlzJiYhdGhpcy5jYXRlZ29yaWVzPzE6MCk7aWYoZSYmZCl7XCJpbnNpZGVcIj09PWJbYStcIlBvc2l0aW9uXCJdJiYoZD0tZCk7dmFyIGs9W2QsZV19YT17dGlja1NpemU6a307TCh0aGlzLFwiYWZ0ZXJUaWNrU2l6ZVwiLGEpO3JldHVybiBhLnRpY2tTaXplfSxsYWJlbE1ldHJpY3M6ZnVuY3Rpb24oKXt2YXIgYT1cbnRoaXMudGlja1Bvc2l0aW9ucyYmdGhpcy50aWNrUG9zaXRpb25zWzBdfHwwO3JldHVybiB0aGlzLmNoYXJ0LnJlbmRlcmVyLmZvbnRNZXRyaWNzKHRoaXMub3B0aW9ucy5sYWJlbHMuc3R5bGUmJnRoaXMub3B0aW9ucy5sYWJlbHMuc3R5bGUuZm9udFNpemUsdGhpcy50aWNrc1thXSYmdGhpcy50aWNrc1thXS5sYWJlbCl9LHVuc3F1aXNoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLmxhYmVscyxiPXRoaXMuaG9yaXosZT10aGlzLnRpY2tJbnRlcnZhbCxrPWUsYz10aGlzLmxlbi8oKCh0aGlzLmNhdGVnb3JpZXM/MTowKSt0aGlzLm1heC10aGlzLm1pbikvZSksZyxyPWEucm90YXRpb24seD10aGlzLmxhYmVsTWV0cmljcygpLHAsQT1OdW1iZXIuTUFYX1ZBTFVFLHUsbj10aGlzLm1heC10aGlzLm1pbixmPWZ1bmN0aW9uKGEpe3ZhciBiPWEvKGN8fDEpO2I9MTxiP01hdGguY2VpbChiKToxO2IqZT5uJiZJbmZpbml0eSE9PWEmJkluZmluaXR5IT09YyYmbiYmKGI9TWF0aC5jZWlsKG4vXG5lKSk7cmV0dXJuIGQoYiplKX07Yj8odT0hYS5zdGFnZ2VyTGluZXMmJiFhLnN0ZXAmJih6KHIpP1tyXTpjPGgoYS5hdXRvUm90YXRpb25MaW1pdCw4MCkmJmEuYXV0b1JvdGF0aW9uKSkmJnUuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhPT09cnx8YSYmLTkwPD1hJiY5MD49YSl7cD1mKE1hdGguYWJzKHguaC9NYXRoLnNpbihsKmEpKSk7dmFyIGI9cCtNYXRoLmFicyhhLzM2MCk7YjxBJiYoQT1iLGc9YSxrPXApfX0pOmEuc3RlcHx8KGs9Zih4LmgpKTt0aGlzLmF1dG9Sb3RhdGlvbj11O3RoaXMubGFiZWxSb3RhdGlvbj1oKGcscik7cmV0dXJuIGt9LGdldFNsb3RXaWR0aDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNoYXJ0LGQ9dGhpcy5ob3JpeixlPXRoaXMub3B0aW9ucy5sYWJlbHMsaz1NYXRoLm1heCh0aGlzLnRpY2tQb3NpdGlvbnMubGVuZ3RoLSh0aGlzLmNhdGVnb3JpZXM/MDoxKSwxKSxjPWIubWFyZ2luWzNdO3JldHVybiBhJiZhLnNsb3RXaWR0aHx8ZCYmMj4oZS5zdGVwfHxcbjApJiYhZS5yb3RhdGlvbiYmKHRoaXMuc3RhZ2dlckxpbmVzfHwxKSp0aGlzLmxlbi9rfHwhZCYmKGUuc3R5bGUmJnBhcnNlSW50KGUuc3R5bGUud2lkdGgsMTApfHxjJiZjLWIuc3BhY2luZ1szXXx8LjMzKmIuY2hhcnRXaWR0aCl9LHJlbmRlclVuc3F1aXNoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jaGFydCxiPWEucmVuZGVyZXIsZD10aGlzLnRpY2tQb3NpdGlvbnMsZT10aGlzLnRpY2tzLGs9dGhpcy5vcHRpb25zLmxhYmVscyxjPWsmJmsuc3R5bGV8fHt9LGw9dGhpcy5ob3JpeixnPXRoaXMuZ2V0U2xvdFdpZHRoKCkscj1NYXRoLm1heCgxLE1hdGgucm91bmQoZy0yKihrLnBhZGRpbmd8fDUpKSkseD17fSxwPXRoaXMubGFiZWxNZXRyaWNzKCksaD1rLnN0eWxlJiZrLnN0eWxlLnRleHRPdmVyZmxvdyxBPTA7SChrLnJvdGF0aW9uKXx8KHgucm90YXRpb249ay5yb3RhdGlvbnx8MCk7ZC5mb3JFYWNoKGZ1bmN0aW9uKGEpeyhhPWVbYV0pJiZhLmxhYmVsJiZhLmxhYmVsLnRleHRQeExlbmd0aD5cbkEmJihBPWEubGFiZWwudGV4dFB4TGVuZ3RoKX0pO3RoaXMubWF4TGFiZWxMZW5ndGg9QTtpZih0aGlzLmF1dG9Sb3RhdGlvbilBPnImJkE+cC5oP3gucm90YXRpb249dGhpcy5sYWJlbFJvdGF0aW9uOnRoaXMubGFiZWxSb3RhdGlvbj0wO2Vsc2UgaWYoZyl7dmFyIHU9cjtpZighaCl7dmFyIG49XCJjbGlwXCI7Zm9yKHI9ZC5sZW5ndGg7IWwmJnItLTspe3ZhciBmPWRbcl07aWYoZj1lW2ZdLmxhYmVsKWYuc3R5bGVzJiZcImVsbGlwc2lzXCI9PT1mLnN0eWxlcy50ZXh0T3ZlcmZsb3c/Zi5jc3Moe3RleHRPdmVyZmxvdzpcImNsaXBcIn0pOmYudGV4dFB4TGVuZ3RoPmcmJmYuY3NzKHt3aWR0aDpnK1wicHhcIn0pLGYuZ2V0QkJveCgpLmhlaWdodD50aGlzLmxlbi9kLmxlbmd0aC0ocC5oLXAuZikmJihmLnNwZWNpZmljVGV4dE92ZXJmbG93PVwiZWxsaXBzaXNcIil9fX14LnJvdGF0aW9uJiYodT1BPi41KmEuY2hhcnRIZWlnaHQ/LjMzKmEuY2hhcnRIZWlnaHQ6QSxofHwobj1cImVsbGlwc2lzXCIpKTtpZih0aGlzLmxhYmVsQWxpZ249XG5rLmFsaWdufHx0aGlzLmF1dG9MYWJlbEFsaWduKHRoaXMubGFiZWxSb3RhdGlvbikpeC5hbGlnbj10aGlzLmxhYmVsQWxpZ247ZC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPShhPWVbYV0pJiZhLmxhYmVsLGQ9Yy53aWR0aCxrPXt9O2ImJihiLmF0dHIoeCksYS5zaG9ydGVuTGFiZWw/YS5zaG9ydGVuTGFiZWwoKTp1JiYhZCYmXCJub3dyYXBcIiE9PWMud2hpdGVTcGFjZSYmKHU8Yi50ZXh0UHhMZW5ndGh8fFwiU1BBTlwiPT09Yi5lbGVtZW50LnRhZ05hbWUpPyhrLndpZHRoPXUsaHx8KGsudGV4dE92ZXJmbG93PWIuc3BlY2lmaWNUZXh0T3ZlcmZsb3d8fG4pLGIuY3NzKGspKTpiLnN0eWxlcyYmYi5zdHlsZXMud2lkdGgmJiFrLndpZHRoJiYhZCYmYi5jc3Moe3dpZHRoOm51bGx9KSxkZWxldGUgYi5zcGVjaWZpY1RleHRPdmVyZmxvdyxhLnJvdGF0aW9uPXgucm90YXRpb24pfSx0aGlzKTt0aGlzLnRpY2tSb3RDb3JyPWIucm90Q29ycihwLmIsdGhpcy5sYWJlbFJvdGF0aW9ufHwwLDAhPT1cbnRoaXMuc2lkZSl9LGhhc0RhdGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXJpZXMuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gYS5oYXNEYXRhKCl9KXx8dGhpcy5vcHRpb25zLnNob3dFbXB0eSYmeih0aGlzLm1pbikmJnoodGhpcy5tYXgpfSxhZGRUaXRsZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNoYXJ0LnJlbmRlcmVyLGQ9dGhpcy5ob3JpeixlPXRoaXMub3Bwb3NpdGUsaz10aGlzLm9wdGlvbnMudGl0bGUsYyxsPXRoaXMuY2hhcnQuc3R5bGVkTW9kZTt0aGlzLmF4aXNUaXRsZXx8KChjPWsudGV4dEFsaWduKXx8KGM9KGQ/e2xvdzpcImxlZnRcIixtaWRkbGU6XCJjZW50ZXJcIixoaWdoOlwicmlnaHRcIn06e2xvdzplP1wicmlnaHRcIjpcImxlZnRcIixtaWRkbGU6XCJjZW50ZXJcIixoaWdoOmU/XCJsZWZ0XCI6XCJyaWdodFwifSlbay5hbGlnbl0pLHRoaXMuYXhpc1RpdGxlPWIudGV4dChrLnRleHQsMCwwLGsudXNlSFRNTCkuYXR0cih7ekluZGV4Ojcscm90YXRpb246ay5yb3RhdGlvbnx8MCxhbGlnbjpjfSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWF4aXMtdGl0bGVcIiksXG5sfHx0aGlzLmF4aXNUaXRsZS5jc3ModShrLnN0eWxlKSksdGhpcy5heGlzVGl0bGUuYWRkKHRoaXMuYXhpc0dyb3VwKSx0aGlzLmF4aXNUaXRsZS5pc05ldz0hMCk7bHx8ay5zdHlsZS53aWR0aHx8dGhpcy5pc1JhZGlhbHx8dGhpcy5heGlzVGl0bGUuY3NzKHt3aWR0aDp0aGlzLmxlbn0pO3RoaXMuYXhpc1RpdGxlW2E/XCJzaG93XCI6XCJoaWRlXCJdKGEpfSxnZW5lcmF0ZVRpY2s6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50aWNrcztiW2FdP2JbYV0uYWRkTGFiZWwoKTpiW2FdPW5ldyBBKHRoaXMsYSl9LGdldE9mZnNldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmNoYXJ0LGQ9Yi5yZW5kZXJlcixlPWEub3B0aW9ucyxrPWEudGlja1Bvc2l0aW9ucyxjPWEudGlja3MsbD1hLmhvcml6LGc9YS5zaWRlLHI9Yi5pbnZlcnRlZCYmIWEuaXNaQXhpcz9bMSwwLDMsMl1bZ106Zyx4LHA9MCxBPTAsdT1lLnRpdGxlLG49ZS5sYWJlbHMsZj0wLEU9Yi5heGlzT2Zmc2V0O2I9Yi5jbGlwT2Zmc2V0O1xudmFyIHE9Wy0xLDEsMSwtMV1bZ10sdj1lLmNsYXNzTmFtZSx0PWEuYXhpc1BhcmVudDt2YXIgQz1hLmhhc0RhdGEoKTthLnNob3dBeGlzPXg9Q3x8aChlLnNob3dFbXB0eSwhMCk7YS5zdGFnZ2VyTGluZXM9YS5ob3JpeiYmbi5zdGFnZ2VyTGluZXM7YS5heGlzR3JvdXB8fChhLmdyaWRHcm91cD1kLmcoXCJncmlkXCIpLmF0dHIoe3pJbmRleDplLmdyaWRaSW5kZXh8fDF9KS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtXCIrdGhpcy5jb2xsLnRvTG93ZXJDYXNlKCkrXCItZ3JpZCBcIisodnx8XCJcIikpLmFkZCh0KSxhLmF4aXNHcm91cD1kLmcoXCJheGlzXCIpLmF0dHIoe3pJbmRleDplLnpJbmRleHx8Mn0pLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1cIit0aGlzLmNvbGwudG9Mb3dlckNhc2UoKStcIiBcIisodnx8XCJcIikpLmFkZCh0KSxhLmxhYmVsR3JvdXA9ZC5nKFwiYXhpcy1sYWJlbHNcIikuYXR0cih7ekluZGV4Om4uekluZGV4fHw3fSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLVwiK2EuY29sbC50b0xvd2VyQ2FzZSgpK1xuXCItbGFiZWxzIFwiKyh2fHxcIlwiKSkuYWRkKHQpKTtDfHxhLmlzTGlua2VkPyhrLmZvckVhY2goZnVuY3Rpb24oYixkKXthLmdlbmVyYXRlVGljayhiLGQpfSksYS5yZW5kZXJVbnNxdWlzaCgpLGEucmVzZXJ2ZVNwYWNlRGVmYXVsdD0wPT09Z3x8Mj09PWd8fHsxOlwibGVmdFwiLDM6XCJyaWdodFwifVtnXT09PWEubGFiZWxBbGlnbixoKG4ucmVzZXJ2ZVNwYWNlLFwiY2VudGVyXCI9PT1hLmxhYmVsQWxpZ24/ITA6bnVsbCxhLnJlc2VydmVTcGFjZURlZmF1bHQpJiZrLmZvckVhY2goZnVuY3Rpb24oYSl7Zj1NYXRoLm1heChjW2FdLmdldExhYmVsU2l6ZSgpLGYpfSksYS5zdGFnZ2VyTGluZXMmJihmKj1hLnN0YWdnZXJMaW5lcyksYS5sYWJlbE9mZnNldD1mKihhLm9wcG9zaXRlPy0xOjEpKTp5KGMsZnVuY3Rpb24oYSxiKXthLmRlc3Ryb3koKTtkZWxldGUgY1tiXX0pO2lmKHUmJnUudGV4dCYmITEhPT11LmVuYWJsZWQmJihhLmFkZFRpdGxlKHgpLHgmJiExIT09dS5yZXNlcnZlU3BhY2UpKXthLnRpdGxlT2Zmc2V0PVxucD1hLmF4aXNUaXRsZS5nZXRCQm94KClbbD9cImhlaWdodFwiOlwid2lkdGhcIl07dmFyIEI9dS5vZmZzZXQ7QT16KEIpPzA6aCh1Lm1hcmdpbixsPzU6MTApfWEucmVuZGVyTGluZSgpO2Eub2Zmc2V0PXEqaChlLm9mZnNldCxFW2ddP0VbZ10rKGUubWFyZ2lufHwwKTowKTthLnRpY2tSb3RDb3JyPWEudGlja1JvdENvcnJ8fHt4OjAseTowfTtkPTA9PT1nPy1hLmxhYmVsTWV0cmljcygpLmg6Mj09PWc/YS50aWNrUm90Q29yci55OjA7QT1NYXRoLmFicyhmKStBO2YmJihBPUEtZCtxKihsP2gobi55LGEudGlja1JvdENvcnIueSs4KnEpOm4ueCkpO2EuYXhpc1RpdGxlTWFyZ2luPWgoQixBKTthLmdldE1heExhYmVsRGltZW5zaW9ucyYmKGEubWF4TGFiZWxEaW1lbnNpb25zPWEuZ2V0TWF4TGFiZWxEaW1lbnNpb25zKGMsaykpO2w9dGhpcy50aWNrU2l6ZShcInRpY2tcIik7RVtnXT1NYXRoLm1heChFW2ddLGEuYXhpc1RpdGxlTWFyZ2luK3ArcSphLm9mZnNldCxBLGsmJmsubGVuZ3RoJiZsP2xbMF0rXG5xKmEub2Zmc2V0OjApO2U9ZS5vZmZzZXQ/MDoyKk1hdGguZmxvb3IoYS5heGlzTGluZS5zdHJva2VXaWR0aCgpLzIpO2Jbcl09TWF0aC5tYXgoYltyXSxlKTtMKHRoaXMsXCJhZnRlckdldE9mZnNldFwiKX0sZ2V0TGluZVBhdGg6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jaGFydCxkPXRoaXMub3Bwb3NpdGUsZT10aGlzLm9mZnNldCxrPXRoaXMuaG9yaXosYz10aGlzLmxlZnQrKGQ/dGhpcy53aWR0aDowKStlO2U9Yi5jaGFydEhlaWdodC10aGlzLmJvdHRvbS0oZD90aGlzLmhlaWdodDowKStlO2QmJihhKj0tMSk7cmV0dXJuIGIucmVuZGVyZXIuY3Jpc3BMaW5lKFtcIk1cIixrP3RoaXMubGVmdDpjLGs/ZTp0aGlzLnRvcCxcIkxcIixrP2IuY2hhcnRXaWR0aC10aGlzLnJpZ2h0OmMsaz9lOmIuY2hhcnRIZWlnaHQtdGhpcy5ib3R0b21dLGEpfSxyZW5kZXJMaW5lOmZ1bmN0aW9uKCl7dGhpcy5heGlzTGluZXx8KHRoaXMuYXhpc0xpbmU9dGhpcy5jaGFydC5yZW5kZXJlci5wYXRoKCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWF4aXMtbGluZVwiKS5hZGQodGhpcy5heGlzR3JvdXApLFxudGhpcy5jaGFydC5zdHlsZWRNb2RlfHx0aGlzLmF4aXNMaW5lLmF0dHIoe3N0cm9rZTp0aGlzLm9wdGlvbnMubGluZUNvbG9yLFwic3Ryb2tlLXdpZHRoXCI6dGhpcy5vcHRpb25zLmxpbmVXaWR0aCx6SW5kZXg6N30pKX0sZ2V0VGl0bGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuaG9yaXosYj10aGlzLmxlZnQsZD10aGlzLnRvcCxlPXRoaXMubGVuLGs9dGhpcy5vcHRpb25zLnRpdGxlLGM9YT9iOmQsbD10aGlzLm9wcG9zaXRlLGc9dGhpcy5vZmZzZXQscj1rLnh8fDAseD1rLnl8fDAscD10aGlzLmF4aXNUaXRsZSxBPXRoaXMuY2hhcnQucmVuZGVyZXIuZm9udE1ldHJpY3Moay5zdHlsZSYmay5zdHlsZS5mb250U2l6ZSxwKTtwPU1hdGgubWF4KHAuZ2V0QkJveChudWxsLDApLmhlaWdodC1BLmgtMSwwKTtlPXtsb3c6YysoYT8wOmUpLG1pZGRsZTpjK2UvMixoaWdoOmMrKGE/ZTowKX1bay5hbGlnbl07Yj0oYT9kK3RoaXMuaGVpZ2h0OmIpKyhhPzE6LTEpKihsPy0xOjEpKnRoaXMuYXhpc1RpdGxlTWFyZ2luK1xuWy1wLHAsQS5mLC1wXVt0aGlzLnNpZGVdO2E9e3g6YT9lK3I6YisobD90aGlzLndpZHRoOjApK2crcix5OmE/Yit4LShsP3RoaXMuaGVpZ2h0OjApK2c6ZSt4fTtMKHRoaXMsXCJhZnRlckdldFRpdGxlUG9zaXRpb25cIix7dGl0bGVQb3NpdGlvbjphfSk7cmV0dXJuIGF9LHJlbmRlck1pbm9yVGljazpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNoYXJ0Lmhhc1JlbmRlcmVkJiZDKHRoaXMub2xkTWluKSxkPXRoaXMubWlub3JUaWNrcztkW2FdfHwoZFthXT1uZXcgQSh0aGlzLGEsXCJtaW5vclwiKSk7YiYmZFthXS5pc05ldyYmZFthXS5yZW5kZXIobnVsbCwhMCk7ZFthXS5yZW5kZXIobnVsbCwhMSwxKX0scmVuZGVyVGljazpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuaXNMaW5rZWQsZT10aGlzLnRpY2tzLGs9dGhpcy5jaGFydC5oYXNSZW5kZXJlZCYmQyh0aGlzLm9sZE1pbik7aWYoIWR8fGE+PXRoaXMubWluJiZhPD10aGlzLm1heCllW2FdfHwoZVthXT1uZXcgQSh0aGlzLGEpKSxrJiZlW2FdLmlzTmV3JiZcbmVbYV0ucmVuZGVyKGIsITAsLTEpLGVbYV0ucmVuZGVyKGIpfSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGQ9YS5jaGFydCxlPWEub3B0aW9ucyxrPWEuaXNMb2csbD1hLmlzTGlua2VkLGc9YS50aWNrUG9zaXRpb25zLHI9YS5heGlzVGl0bGUseD1hLnRpY2tzLHA9YS5taW5vclRpY2tzLGg9YS5hbHRlcm5hdGVCYW5kcyx1PWUuc3RhY2tMYWJlbHMsbj1lLmFsdGVybmF0ZUdyaWRDb2xvcixmPWEudGlja21hcmtPZmZzZXQsRT1hLmF4aXNMaW5lLHY9YS5zaG93QXhpcyx0PWIoZC5yZW5kZXJlci5nbG9iYWxBbmltYXRpb24pLEIsSDthLmxhYmVsRWRnZS5sZW5ndGg9MDthLm92ZXJsYXA9ITE7W3gscCxoXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3koYSxmdW5jdGlvbihhKXthLmlzQWN0aXZlPSExfSl9KTtpZihhLmhhc0RhdGEoKXx8bClhLm1pbm9yVGlja0ludGVydmFsJiYhYS5jYXRlZ29yaWVzJiZhLmdldE1pbm9yVGlja1Bvc2l0aW9ucygpLmZvckVhY2goZnVuY3Rpb24oYil7YS5yZW5kZXJNaW5vclRpY2soYil9KSxcbmcubGVuZ3RoJiYoZy5mb3JFYWNoKGZ1bmN0aW9uKGIsZCl7YS5yZW5kZXJUaWNrKGIsZCl9KSxmJiYoMD09PWEubWlufHxhLnNpbmdsZSkmJih4Wy0xXXx8KHhbLTFdPW5ldyBBKGEsLTEsbnVsbCwhMCkpLHhbLTFdLnJlbmRlcigtMSkpKSxuJiZnLmZvckVhY2goZnVuY3Rpb24oYixlKXtIPXZvaWQgMCE9PWdbZSsxXT9nW2UrMV0rZjphLm1heC1mOzA9PT1lJTImJmI8YS5tYXgmJkg8PWEubWF4KyhkLnBvbGFyPy1mOmYpJiYoaFtiXXx8KGhbYl09bmV3IGMuUGxvdExpbmVPckJhbmQoYSkpLEI9YitmLGhbYl0ub3B0aW9ucz17ZnJvbTprP2EubGluMmxvZyhCKTpCLHRvOms/YS5saW4ybG9nKEgpOkgsY29sb3I6bn0saFtiXS5yZW5kZXIoKSxoW2JdLmlzQWN0aXZlPSEwKX0pLGEuX2FkZGVkUGxvdExCfHwoKGUucGxvdExpbmVzfHxbXSkuY29uY2F0KGUucGxvdEJhbmRzfHxbXSkuZm9yRWFjaChmdW5jdGlvbihiKXthLmFkZFBsb3RCYW5kT3JMaW5lKGIpfSksYS5fYWRkZWRQbG90TEI9XG4hMCk7W3gscCxoXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiLGU9W10saz10LmR1cmF0aW9uO3koYSxmdW5jdGlvbihhLGIpe2EuaXNBY3RpdmV8fChhLnJlbmRlcihiLCExLDApLGEuaXNBY3RpdmU9ITEsZS5wdXNoKGIpKX0pO3EoZnVuY3Rpb24oKXtmb3IoYj1lLmxlbmd0aDtiLS07KWFbZVtiXV0mJiFhW2VbYl1dLmlzQWN0aXZlJiYoYVtlW2JdXS5kZXN0cm95KCksZGVsZXRlIGFbZVtiXV0pfSxhIT09aCYmZC5oYXNSZW5kZXJlZCYmaz9rOjApfSk7RSYmKEVbRS5pc1BsYWNlZD9cImFuaW1hdGVcIjpcImF0dHJcIl0oe2Q6dGhpcy5nZXRMaW5lUGF0aChFLnN0cm9rZVdpZHRoKCkpfSksRS5pc1BsYWNlZD0hMCxFW3Y/XCJzaG93XCI6XCJoaWRlXCJdKHYpKTtyJiZ2JiYoZT1hLmdldFRpdGxlUG9zaXRpb24oKSxDKGUueSk/KHJbci5pc05ldz9cImF0dHJcIjpcImFuaW1hdGVcIl0oZSksci5pc05ldz0hMSk6KHIuYXR0cihcInlcIiwtOTk5OSksci5pc05ldz0hMCkpO3UmJnUuZW5hYmxlZCYmYS5yZW5kZXJTdGFja1RvdGFscygpO1xuYS5pc0RpcnR5PSExO0wodGhpcyxcImFmdGVyUmVuZGVyXCIpfSxyZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLnZpc2libGUmJih0aGlzLnJlbmRlcigpLHRoaXMucGxvdExpbmVzQW5kQmFuZHMuZm9yRWFjaChmdW5jdGlvbihhKXthLnJlbmRlcigpfSkpO3RoaXMuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5pc0RpcnR5PSEwfSl9LGtlZXBQcm9wczpcImV4dEtleSBoY0V2ZW50cyBuYW1lcyBzZXJpZXMgdXNlck1heCB1c2VyTWluXCIuc3BsaXQoXCIgXCIpLGRlc3Ryb3k6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxkPWIuc3RhY2tzLGU9Yi5wbG90TGluZXNBbmRCYW5kcyxrO0wodGhpcyxcImRlc3Ryb3lcIix7a2VlcEV2ZW50czphfSk7YXx8cihiKTt5KGQsZnVuY3Rpb24oYSxiKXtCKGEpO2RbYl09bnVsbH0pO1tiLnRpY2tzLGIubWlub3JUaWNrcyxiLmFsdGVybmF0ZUJhbmRzXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0IoYSl9KTtpZihlKWZvcihhPWUubGVuZ3RoO2EtLTspZVthXS5kZXN0cm95KCk7XG5cInN0YWNrVG90YWxHcm91cCBheGlzTGluZSBheGlzVGl0bGUgYXhpc0dyb3VwIGdyaWRHcm91cCBsYWJlbEdyb3VwIGNyb3NzIHNjcm9sbGJhclwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2JbYV0mJihiW2FdPWJbYV0uZGVzdHJveSgpKX0pO2ZvcihrIGluIGIucGxvdExpbmVzQW5kQmFuZHNHcm91cHMpYi5wbG90TGluZXNBbmRCYW5kc0dyb3Vwc1trXT1iLnBsb3RMaW5lc0FuZEJhbmRzR3JvdXBzW2tdLmRlc3Ryb3koKTt5KGIsZnVuY3Rpb24oYSxkKXstMT09PWIua2VlcFByb3BzLmluZGV4T2YoZCkmJmRlbGV0ZSBiW2RdfSl9LGRyYXdDcm9zc2hhaXI6ZnVuY3Rpb24oYixkKXt2YXIgZSxrPXRoaXMuY3Jvc3NoYWlyLGM9aChrLnNuYXAsITApLGwsZz10aGlzLmNyb3NzO0wodGhpcyxcImRyYXdDcm9zc2hhaXJcIix7ZTpiLHBvaW50OmR9KTtifHwoYj10aGlzLmNyb3NzJiZ0aGlzLmNyb3NzLmUpO2lmKHRoaXMuY3Jvc3NoYWlyJiYhMSE9PSh6KGQpfHwhYykpe2M/eihkKSYmXG4obD1oKFwiY29sb3JBeGlzXCIhPT10aGlzLmNvbGw/ZC5jcm9zc2hhaXJQb3M6bnVsbCx0aGlzLmlzWEF4aXM/ZC5wbG90WDp0aGlzLmxlbi1kLnBsb3RZKSk6bD1iJiYodGhpcy5ob3Jpej9iLmNoYXJ0WC10aGlzLnBvczp0aGlzLmxlbi1iLmNoYXJ0WSt0aGlzLnBvcyk7eihsKSYmKGU9dGhpcy5nZXRQbG90TGluZVBhdGgoe3ZhbHVlOmQmJih0aGlzLmlzWEF4aXM/ZC54OmgoZC5zdGFja1ksZC55KSksdHJhbnNsYXRlZFZhbHVlOmx9KXx8bnVsbCk7aWYoIXooZSkpe3RoaXMuaGlkZUNyb3NzaGFpcigpO3JldHVybn1jPXRoaXMuY2F0ZWdvcmllcyYmIXRoaXMuaXNSYWRpYWw7Z3x8KHRoaXMuY3Jvc3M9Zz10aGlzLmNoYXJ0LnJlbmRlcmVyLnBhdGgoKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtY3Jvc3NoYWlyIGhpZ2hjaGFydHMtY3Jvc3NoYWlyLVwiKyhjP1wiY2F0ZWdvcnkgXCI6XCJ0aGluIFwiKStrLmNsYXNzTmFtZSkuYXR0cih7ekluZGV4Omgoay56SW5kZXgsMil9KS5hZGQoKSx0aGlzLmNoYXJ0LnN0eWxlZE1vZGV8fFxuKGcuYXR0cih7c3Ryb2tlOmsuY29sb3J8fChjP2EoXCIjY2NkNmViXCIpLnNldE9wYWNpdHkoLjI1KS5nZXQoKTpcIiNjY2NjY2NcIiksXCJzdHJva2Utd2lkdGhcIjpoKGsud2lkdGgsMSl9KS5jc3Moe1wicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pLGsuZGFzaFN0eWxlJiZnLmF0dHIoe2Rhc2hzdHlsZTprLmRhc2hTdHlsZX0pKSk7Zy5zaG93KCkuYXR0cih7ZDplfSk7YyYmIWsud2lkdGgmJmcuYXR0cih7XCJzdHJva2Utd2lkdGhcIjp0aGlzLnRyYW5zQX0pO3RoaXMuY3Jvc3MuZT1ifWVsc2UgdGhpcy5oaWRlQ3Jvc3NoYWlyKCk7TCh0aGlzLFwiYWZ0ZXJEcmF3Q3Jvc3NoYWlyXCIse2U6Yixwb2ludDpkfSl9LGhpZGVDcm9zc2hhaXI6ZnVuY3Rpb24oKXt0aGlzLmNyb3NzJiZ0aGlzLmNyb3NzLmhpZGUoKTtMKHRoaXMsXCJhZnRlckhpZGVDcm9zc2hhaXJcIil9fSk7cmV0dXJuIGMuQXhpcz1mfSk7TShJLFwicGFydHMvRGF0ZVRpbWVBeGlzLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdXSxmdW5jdGlvbihjKXt2YXIgZj1cbmMuQXhpcyxGPWMuZ2V0TWFnbml0dWRlLEc9Yy5ub3JtYWxpemVUaWNrSW50ZXJ2YWwsej1jLnRpbWVVbml0cztmLnByb3RvdHlwZS5nZXRUaW1lVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGFydC50aW1lLmdldFRpbWVUaWNrcy5hcHBseSh0aGlzLmNoYXJ0LnRpbWUsYXJndW1lbnRzKX07Zi5wcm90b3R5cGUubm9ybWFsaXplVGltZVRpY2tJbnRlcnZhbD1mdW5jdGlvbihjLGYpe3ZhciB2PWZ8fFtbXCJtaWxsaXNlY29uZFwiLFsxLDIsNSwxMCwyMCwyNSw1MCwxMDAsMjAwLDUwMF1dLFtcInNlY29uZFwiLFsxLDIsNSwxMCwxNSwzMF1dLFtcIm1pbnV0ZVwiLFsxLDIsNSwxMCwxNSwzMF1dLFtcImhvdXJcIixbMSwyLDMsNCw2LDgsMTJdXSxbXCJkYXlcIixbMSwyXV0sW1wid2Vla1wiLFsxLDJdXSxbXCJtb250aFwiLFsxLDIsMyw0LDZdXSxbXCJ5ZWFyXCIsbnVsbF1dO2Y9dlt2Lmxlbmd0aC0xXTt2YXIgdD16W2ZbMF1dLEI9ZlsxXSx5O2Zvcih5PTA7eTx2Lmxlbmd0aCYmIShmPXZbeV0sdD16W2ZbMF1dLFxuQj1mWzFdLHZbeSsxXSYmYzw9KHQqQltCLmxlbmd0aC0xXSt6W3ZbeSsxXVswXV0pLzIpO3krKyk7dD09PXoueWVhciYmYzw1KnQmJihCPVsxLDIsNV0pO2M9RyhjL3QsQixcInllYXJcIj09PWZbMF0/TWF0aC5tYXgoRihjL3QpLDEpOjEpO3JldHVybnt1bml0UmFuZ2U6dCxjb3VudDpjLHVuaXROYW1lOmZbMF19fX0pO00oSSxcInBhcnRzL0xvZ2FyaXRobWljQXhpcy5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYucGljaztmPWMuQXhpczt2YXIgRz1jLmdldE1hZ25pdHVkZSx6PWMubm9ybWFsaXplVGlja0ludGVydmFsO2YucHJvdG90eXBlLmdldExvZ1RpY2tQb3NpdGlvbnM9ZnVuY3Rpb24oYyxmLHYsQyl7dmFyIHQ9dGhpcy5vcHRpb25zLHk9dGhpcy5sZW4saD1bXTtDfHwodGhpcy5fbWlub3JBdXRvSW50ZXJ2YWw9bnVsbCk7aWYoLjU8PWMpYz1NYXRoLnJvdW5kKGMpLGg9dGhpcy5nZXRMaW5lYXJUaWNrUG9zaXRpb25zKGMsXG5mLHYpO2Vsc2UgaWYoLjA4PD1jKXt5PU1hdGguZmxvb3IoZik7dmFyIG4scTtmb3IodD0uMzxjP1sxLDIsNF06LjE1PGM/WzEsMiw0LDYsOF06WzEsMiwzLDQsNSw2LDcsOCw5XTt5PHYrMSYmIXE7eSsrKXt2YXIgZz10Lmxlbmd0aDtmb3Iobj0wO248ZyYmIXE7bisrKXt2YXIgYj10aGlzLmxvZzJsaW4odGhpcy5saW4ybG9nKHkpKnRbbl0pO2I+ZiYmKCFDfHxhPD12KSYmdm9pZCAwIT09YSYmaC5wdXNoKGEpO2E+diYmKHE9ITApO3ZhciBhPWJ9fX1lbHNlIGY9dGhpcy5saW4ybG9nKGYpLHY9dGhpcy5saW4ybG9nKHYpLGM9Qz90aGlzLmdldE1pbm9yVGlja0ludGVydmFsKCk6dC50aWNrSW50ZXJ2YWwsYz1GKFwiYXV0b1wiPT09Yz9udWxsOmMsdGhpcy5fbWlub3JBdXRvSW50ZXJ2YWwsdC50aWNrUGl4ZWxJbnRlcnZhbC8oQz81OjEpKih2LWYpLygoQz95L3RoaXMudGlja1Bvc2l0aW9ucy5sZW5ndGg6eSl8fDEpKSxjPXooYyxudWxsLEcoYykpLGg9dGhpcy5nZXRMaW5lYXJUaWNrUG9zaXRpb25zKGMsXG5mLHYpLm1hcCh0aGlzLmxvZzJsaW4pLEN8fCh0aGlzLl9taW5vckF1dG9JbnRlcnZhbD1jLzUpO0N8fCh0aGlzLnRpY2tJbnRlcnZhbD1jKTtyZXR1cm4gaH07Zi5wcm90b3R5cGUubG9nMmxpbj1mdW5jdGlvbihjKXtyZXR1cm4gTWF0aC5sb2coYykvTWF0aC5MTjEwfTtmLnByb3RvdHlwZS5saW4ybG9nPWZ1bmN0aW9uKGMpe3JldHVybiBNYXRoLnBvdygxMCxjKX19KTtNKEksXCJwYXJ0cy9QbG90TGluZU9yQmFuZC5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvQXhpcy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYsRil7dmFyIEc9Ri5hcnJheU1heCx6PUYuYXJyYXlNaW4sQj1GLmRlZmluZWQsdD1GLmRlc3Ryb3lPYmplY3RQcm9wZXJ0aWVzLHY9Ri5lcmFzZSxDPUYuZXh0ZW5kLEg9Ri5vYmplY3RFYWNoLHk9Ri5waWNrLGg9Yy5tZXJnZTtjLlBsb3RMaW5lT3JCYW5kPWZ1bmN0aW9uKGMsaCl7dGhpcy5heGlzPWM7aCYmKHRoaXMub3B0aW9ucz1cbmgsdGhpcy5pZD1oLmlkKX07Yy5QbG90TGluZU9yQmFuZC5wcm90b3R5cGU9e3JlbmRlcjpmdW5jdGlvbigpe2MuZmlyZUV2ZW50KHRoaXMsXCJyZW5kZXJcIik7dmFyIGY9dGhpcyxxPWYuYXhpcyxnPXEuaG9yaXosYj1mLm9wdGlvbnMsYT1iLmxhYmVsLGQ9Zi5sYWJlbCxlPWIudG8sbD1iLmZyb20sTD1iLnZhbHVlLEU9QihsKSYmQihlKSxwPUIoTCksdT1mLnN2Z0VsZW0saz0hdSxyPVtdLHg9Yi5jb2xvcixBPXkoYi56SW5kZXgsMCksdz1iLmV2ZW50cztyPXtcImNsYXNzXCI6XCJoaWdoY2hhcnRzLXBsb3QtXCIrKEU/XCJiYW5kIFwiOlwibGluZSBcIikrKGIuY2xhc3NOYW1lfHxcIlwiKX07dmFyIG09e30sSz1xLmNoYXJ0LnJlbmRlcmVyLEo9RT9cImJhbmRzXCI6XCJsaW5lc1wiO3EuaXNMb2cmJihsPXEubG9nMmxpbihsKSxlPXEubG9nMmxpbihlKSxMPXEubG9nMmxpbihMKSk7cS5jaGFydC5zdHlsZWRNb2RlfHwocD8oci5zdHJva2U9eHx8XCIjOTk5OTk5XCIscltcInN0cm9rZS13aWR0aFwiXT15KGIud2lkdGgsXG4xKSxiLmRhc2hTdHlsZSYmKHIuZGFzaHN0eWxlPWIuZGFzaFN0eWxlKSk6RSYmKHIuZmlsbD14fHxcIiNlNmViZjVcIixiLmJvcmRlcldpZHRoJiYoci5zdHJva2U9Yi5ib3JkZXJDb2xvcixyW1wic3Ryb2tlLXdpZHRoXCJdPWIuYm9yZGVyV2lkdGgpKSk7bS56SW5kZXg9QTtKKz1cIi1cIitBOyh4PXEucGxvdExpbmVzQW5kQmFuZHNHcm91cHNbSl0pfHwocS5wbG90TGluZXNBbmRCYW5kc0dyb3Vwc1tKXT14PUsuZyhcInBsb3QtXCIrSikuYXR0cihtKS5hZGQoKSk7ayYmKGYuc3ZnRWxlbT11PUsucGF0aCgpLmF0dHIocikuYWRkKHgpKTtpZihwKXI9cS5nZXRQbG90TGluZVBhdGgoe3ZhbHVlOkwsbGluZVdpZHRoOnUuc3Ryb2tlV2lkdGgoKSxhY3Jvc3NQYW5lczpiLmFjcm9zc1BhbmVzfSk7ZWxzZSBpZihFKXI9cS5nZXRQbG90QmFuZFBhdGgobCxlLGIpO2Vsc2UgcmV0dXJuOyhrfHwhdS5kKSYmciYmci5sZW5ndGg/KHUuYXR0cih7ZDpyfSksdyYmSCh3LGZ1bmN0aW9uKGEsYil7dS5vbihiLFxuZnVuY3Rpb24oYSl7d1tiXS5hcHBseShmLFthXSl9KX0pKTp1JiYocj8odS5zaG93KCEwKSx1LmFuaW1hdGUoe2Q6cn0pKTp1LmQmJih1LmhpZGUoKSxkJiYoZi5sYWJlbD1kPWQuZGVzdHJveSgpKSkpO2EmJihCKGEudGV4dCl8fEIoYS5mb3JtYXR0ZXIpKSYmciYmci5sZW5ndGgmJjA8cS53aWR0aCYmMDxxLmhlaWdodCYmIXIuaXNGbGF0PyhhPWgoe2FsaWduOmcmJkUmJlwiY2VudGVyXCIseDpnPyFFJiY0OjEwLHZlcnRpY2FsQWxpZ246IWcmJkUmJlwibWlkZGxlXCIseTpnP0U/MTY6MTA6RT82Oi00LHJvdGF0aW9uOmcmJiFFJiY5MH0sYSksdGhpcy5yZW5kZXJMYWJlbChhLHIsRSxBKSk6ZCYmZC5oaWRlKCk7cmV0dXJuIGZ9LHJlbmRlckxhYmVsOmZ1bmN0aW9uKGMsaCxnLGIpe3ZhciBhPXRoaXMubGFiZWwsZD10aGlzLmF4aXMuY2hhcnQucmVuZGVyZXI7YXx8KGE9e2FsaWduOmMudGV4dEFsaWdufHxjLmFsaWduLHJvdGF0aW9uOmMucm90YXRpb24sXCJjbGFzc1wiOlwiaGlnaGNoYXJ0cy1wbG90LVwiK1xuKGc/XCJiYW5kXCI6XCJsaW5lXCIpK1wiLWxhYmVsIFwiKyhjLmNsYXNzTmFtZXx8XCJcIil9LGEuekluZGV4PWIsYj10aGlzLmdldExhYmVsVGV4dChjKSx0aGlzLmxhYmVsPWE9ZC50ZXh0KGIsMCwwLGMudXNlSFRNTCkuYXR0cihhKS5hZGQoKSx0aGlzLmF4aXMuY2hhcnQuc3R5bGVkTW9kZXx8YS5jc3MoYy5zdHlsZSkpO2Q9aC54Qm91bmRzfHxbaFsxXSxoWzRdLGc/aFs2XTpoWzFdXTtoPWgueUJvdW5kc3x8W2hbMl0saFs1XSxnP2hbN106aFsyXV07Zz16KGQpO2I9eihoKTthLmFsaWduKGMsITEse3g6Zyx5OmIsd2lkdGg6RyhkKS1nLGhlaWdodDpHKGgpLWJ9KTthLnNob3coITApfSxnZXRMYWJlbFRleHQ6ZnVuY3Rpb24oYyl7cmV0dXJuIEIoYy5mb3JtYXR0ZXIpP2MuZm9ybWF0dGVyLmNhbGwodGhpcyk6Yy50ZXh0fSxkZXN0cm95OmZ1bmN0aW9uKCl7dih0aGlzLmF4aXMucGxvdExpbmVzQW5kQmFuZHMsdGhpcyk7ZGVsZXRlIHRoaXMuYXhpczt0KHRoaXMpfX07QyhmLnByb3RvdHlwZSxcbntnZXRQbG90QmFuZFBhdGg6ZnVuY3Rpb24oYyxoKXt2YXIgZz10aGlzLmdldFBsb3RMaW5lUGF0aCh7dmFsdWU6aCxmb3JjZTohMCxhY3Jvc3NQYW5lczp0aGlzLm9wdGlvbnMuYWNyb3NzUGFuZXN9KSxiPXRoaXMuZ2V0UGxvdExpbmVQYXRoKHt2YWx1ZTpjLGZvcmNlOiEwLGFjcm9zc1BhbmVzOnRoaXMub3B0aW9ucy5hY3Jvc3NQYW5lc30pLGE9W10sZD10aGlzLmhvcml6LGU9MTtjPWM8dGhpcy5taW4mJmg8dGhpcy5taW58fGM+dGhpcy5tYXgmJmg+dGhpcy5tYXg7aWYoYiYmZyl7aWYoYyl7dmFyIGw9Yi50b1N0cmluZygpPT09Zy50b1N0cmluZygpO2U9MH1mb3IoYz0wO2M8Yi5sZW5ndGg7Yys9NilkJiZnW2MrMV09PT1iW2MrMV0/KGdbYysxXSs9ZSxnW2MrNF0rPWUpOmR8fGdbYysyXSE9PWJbYysyXXx8KGdbYysyXSs9ZSxnW2MrNV0rPWUpLGEucHVzaChcIk1cIixiW2MrMV0sYltjKzJdLFwiTFwiLGJbYys0XSxiW2MrNV0sZ1tjKzRdLGdbYys1XSxnW2MrMV0sZ1tjKzJdLFwielwiKSxcbmEuaXNGbGF0PWx9cmV0dXJuIGF9LGFkZFBsb3RCYW5kOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmFkZFBsb3RCYW5kT3JMaW5lKGMsXCJwbG90QmFuZHNcIil9LGFkZFBsb3RMaW5lOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmFkZFBsb3RCYW5kT3JMaW5lKGMsXCJwbG90TGluZXNcIil9LGFkZFBsb3RCYW5kT3JMaW5lOmZ1bmN0aW9uKGgsZil7dmFyIGc9KG5ldyBjLlBsb3RMaW5lT3JCYW5kKHRoaXMsaCkpLnJlbmRlcigpLGI9dGhpcy51c2VyT3B0aW9ucztpZihnKXtpZihmKXt2YXIgYT1iW2ZdfHxbXTthLnB1c2goaCk7YltmXT1hfXRoaXMucGxvdExpbmVzQW5kQmFuZHMucHVzaChnKX1yZXR1cm4gZ30scmVtb3ZlUGxvdEJhbmRPckxpbmU6ZnVuY3Rpb24oYyl7Zm9yKHZhciBoPXRoaXMucGxvdExpbmVzQW5kQmFuZHMsZz10aGlzLm9wdGlvbnMsYj10aGlzLnVzZXJPcHRpb25zLGE9aC5sZW5ndGg7YS0tOyloW2FdLmlkPT09YyYmaFthXS5kZXN0cm95KCk7W2cucGxvdExpbmVzfHxcbltdLGIucGxvdExpbmVzfHxbXSxnLnBsb3RCYW5kc3x8W10sYi5wbG90QmFuZHN8fFtdXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2ZvcihhPWIubGVuZ3RoO2EtLTspYlthXS5pZD09PWMmJnYoYixiW2FdKX0pfSxyZW1vdmVQbG90QmFuZDpmdW5jdGlvbihjKXt0aGlzLnJlbW92ZVBsb3RCYW5kT3JMaW5lKGMpfSxyZW1vdmVQbG90TGluZTpmdW5jdGlvbihjKXt0aGlzLnJlbW92ZVBsb3RCYW5kT3JMaW5lKGMpfX0pfSk7TShJLFwicGFydHMvVG9vbHRpcC5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuZGVmaW5lZCxHPWYuZGlzY2FyZEVsZW1lbnQsej1mLmV4dGVuZCxCPWYuaXNOdW1iZXIsdD1mLmlzU3RyaW5nLHY9Zi5waWNrLEM9Zi5zcGxhdCxIPWYuc3luY1RpbWVvdXQ7XCJcIjt2YXIgeT1jLmRvYyxoPWMuZm9ybWF0LG49Yy5tZXJnZSxxPWMudGltZVVuaXRzO2MuVG9vbHRpcD1mdW5jdGlvbigpe3RoaXMuaW5pdC5hcHBseSh0aGlzLFxuYXJndW1lbnRzKX07Yy5Ub29sdGlwLnByb3RvdHlwZT17aW5pdDpmdW5jdGlvbihjLGIpe3RoaXMuY2hhcnQ9Yzt0aGlzLm9wdGlvbnM9Yjt0aGlzLmNyb3NzaGFpcnM9W107dGhpcy5ub3c9e3g6MCx5OjB9O3RoaXMuaXNIaWRkZW49ITA7dGhpcy5zcGxpdD1iLnNwbGl0JiYhYy5pbnZlcnRlZDt0aGlzLnNoYXJlZD1iLnNoYXJlZHx8dGhpcy5zcGxpdDt0aGlzLm91dHNpZGU9dihiLm91dHNpZGUsISghYy5zY3JvbGxhYmxlUGl4ZWxzWCYmIWMuc2Nyb2xsYWJsZVBpeGVsc1kpKX0sY2xlYW5TcGxpdDpmdW5jdGlvbihjKXt0aGlzLmNoYXJ0LnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBhPWImJmIudHQ7YSYmKCFhLmlzQWN0aXZlfHxjP2IudHQ9YS5kZXN0cm95KCk6YS5pc0FjdGl2ZT0hMSl9KX0sYXBwbHlGaWx0ZXI6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmNoYXJ0O2MucmVuZGVyZXIuZGVmaW5pdGlvbih7dGFnTmFtZTpcImZpbHRlclwiLGlkOlwiZHJvcC1zaGFkb3ctXCIrYy5pbmRleCxcbm9wYWNpdHk6LjUsY2hpbGRyZW46W3t0YWdOYW1lOlwiZmVHYXVzc2lhbkJsdXJcIixcImluXCI6XCJTb3VyY2VBbHBoYVwiLHN0ZERldmlhdGlvbjoxfSx7dGFnTmFtZTpcImZlT2Zmc2V0XCIsZHg6MSxkeToxfSx7dGFnTmFtZTpcImZlQ29tcG9uZW50VHJhbnNmZXJcIixjaGlsZHJlbjpbe3RhZ05hbWU6XCJmZUZ1bmNBXCIsdHlwZTpcImxpbmVhclwiLHNsb3BlOi4zfV19LHt0YWdOYW1lOlwiZmVNZXJnZVwiLGNoaWxkcmVuOlt7dGFnTmFtZTpcImZlTWVyZ2VOb2RlXCJ9LHt0YWdOYW1lOlwiZmVNZXJnZU5vZGVcIixcImluXCI6XCJTb3VyY2VHcmFwaGljXCJ9XX1dfSk7Yy5yZW5kZXJlci5kZWZpbml0aW9uKHt0YWdOYW1lOlwic3R5bGVcIix0ZXh0Q29udGVudDpcIi5oaWdoY2hhcnRzLXRvb2x0aXAtXCIrYy5pbmRleCtcIntmaWx0ZXI6dXJsKCNkcm9wLXNoYWRvdy1cIitjLmluZGV4K1wiKX1cIn0pfSxnZXRMYWJlbDpmdW5jdGlvbigpe3ZhciBnPXRoaXMsYj10aGlzLmNoYXJ0LnJlbmRlcmVyLGE9dGhpcy5jaGFydC5zdHlsZWRNb2RlLFxuZD10aGlzLm9wdGlvbnMsZT1cInRvb2x0aXBcIisoRihkLmNsYXNzTmFtZSk/XCIgXCIrZC5jbGFzc05hbWU6XCJcIiksbDtpZighdGhpcy5sYWJlbCl7dGhpcy5vdXRzaWRlJiYodGhpcy5jb250YWluZXI9bD1jLmRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGwuY2xhc3NOYW1lPVwiaGlnaGNoYXJ0cy10b29sdGlwLWNvbnRhaW5lclwiLGMuY3NzKGwse3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6XCIxcHhcIixwb2ludGVyRXZlbnRzOmQuc3R5bGUmJmQuc3R5bGUucG9pbnRlckV2ZW50cyx6SW5kZXg6M30pLGMuZG9jLmJvZHkuYXBwZW5kQ2hpbGQobCksdGhpcy5yZW5kZXJlcj1iPW5ldyBjLlJlbmRlcmVyKGwsMCwwLHt9LHZvaWQgMCx2b2lkIDAsYi5zdHlsZWRNb2RlKSk7dGhpcy5zcGxpdD90aGlzLmxhYmVsPWIuZyhlKToodGhpcy5sYWJlbD1iLmxhYmVsKFwiXCIsMCwwLGQuc2hhcGV8fFwiY2FsbG91dFwiLG51bGwsbnVsbCxkLnVzZUhUTUwsbnVsbCxlKS5hdHRyKHtwYWRkaW5nOmQucGFkZGluZyxyOmQuYm9yZGVyUmFkaXVzfSksXG5hfHx0aGlzLmxhYmVsLmF0dHIoe2ZpbGw6ZC5iYWNrZ3JvdW5kQ29sb3IsXCJzdHJva2Utd2lkdGhcIjpkLmJvcmRlcldpZHRofSkuY3NzKGQuc3R5bGUpLnNoYWRvdyhkLnNoYWRvdykpO2EmJih0aGlzLmFwcGx5RmlsdGVyKCksdGhpcy5sYWJlbC5hZGRDbGFzcyhcImhpZ2hjaGFydHMtdG9vbHRpcC1cIit0aGlzLmNoYXJ0LmluZGV4KSk7aWYoZy5vdXRzaWRlJiYhZy5zcGxpdCl7dmFyIGg9e3g6dGhpcy5sYWJlbC54U2V0dGVyLHk6dGhpcy5sYWJlbC55U2V0dGVyfTt0aGlzLmxhYmVsLnhTZXR0ZXI9ZnVuY3Rpb24oYSxiKXtoW2JdLmNhbGwodGhpcy5sYWJlbCxnLmRpc3RhbmNlKTtsLnN0eWxlLmxlZnQ9YStcInB4XCJ9O3RoaXMubGFiZWwueVNldHRlcj1mdW5jdGlvbihhLGIpe2hbYl0uY2FsbCh0aGlzLmxhYmVsLGcuZGlzdGFuY2UpO2wuc3R5bGUudG9wPWErXCJweFwifX10aGlzLmxhYmVsLmF0dHIoe3pJbmRleDo4fSkuYWRkKCl9cmV0dXJuIHRoaXMubGFiZWx9LHVwZGF0ZTpmdW5jdGlvbihjKXt0aGlzLmRlc3Ryb3koKTtcbm4oITAsdGhpcy5jaGFydC5vcHRpb25zLnRvb2x0aXAudXNlck9wdGlvbnMsYyk7dGhpcy5pbml0KHRoaXMuY2hhcnQsbighMCx0aGlzLm9wdGlvbnMsYykpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5sYWJlbCYmKHRoaXMubGFiZWw9dGhpcy5sYWJlbC5kZXN0cm95KCkpO3RoaXMuc3BsaXQmJnRoaXMudHQmJih0aGlzLmNsZWFuU3BsaXQodGhpcy5jaGFydCwhMCksdGhpcy50dD10aGlzLnR0LmRlc3Ryb3koKSk7dGhpcy5yZW5kZXJlciYmKHRoaXMucmVuZGVyZXI9dGhpcy5yZW5kZXJlci5kZXN0cm95KCksRyh0aGlzLmNvbnRhaW5lcikpO2MuY2xlYXJUaW1lb3V0KHRoaXMuaGlkZVRpbWVyKTtjLmNsZWFyVGltZW91dCh0aGlzLnRvb2x0aXBUaW1lb3V0KX0sbW92ZTpmdW5jdGlvbihnLGIsYSxkKXt2YXIgZT10aGlzLGw9ZS5ub3csaD0hMSE9PWUub3B0aW9ucy5hbmltYXRpb24mJiFlLmlzSGlkZGVuJiYoMTxNYXRoLmFicyhnLWwueCl8fDE8TWF0aC5hYnMoYi1sLnkpKSxmPVxuZS5mb2xsb3dQb2ludGVyfHwxPGUubGVuO3oobCx7eDpoPygyKmwueCtnKS8zOmcseTpoPyhsLnkrYikvMjpiLGFuY2hvclg6Zj92b2lkIDA6aD8oMipsLmFuY2hvclgrYSkvMzphLGFuY2hvclk6Zj92b2lkIDA6aD8obC5hbmNob3JZK2QpLzI6ZH0pO2UuZ2V0TGFiZWwoKS5hdHRyKGwpO2gmJihjLmNsZWFyVGltZW91dCh0aGlzLnRvb2x0aXBUaW1lb3V0KSx0aGlzLnRvb2x0aXBUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlLm1vdmUoZyxiLGEsZCl9LDMyKSl9LGhpZGU6ZnVuY3Rpb24oZyl7dmFyIGI9dGhpcztjLmNsZWFyVGltZW91dCh0aGlzLmhpZGVUaW1lcik7Zz12KGcsdGhpcy5vcHRpb25zLmhpZGVEZWxheSw1MDApO3RoaXMuaXNIaWRkZW58fCh0aGlzLmhpZGVUaW1lcj1IKGZ1bmN0aW9uKCl7Yi5nZXRMYWJlbCgpW2c/XCJmYWRlT3V0XCI6XCJoaWRlXCJdKCk7Yi5pc0hpZGRlbj0hMH0sZykpfSxnZXRBbmNob3I6ZnVuY3Rpb24oYyxiKXt2YXIgYT10aGlzLmNoYXJ0LFxuZD1hLnBvaW50ZXIsZT1hLmludmVydGVkLGw9YS5wbG90VG9wLGc9YS5wbG90TGVmdCxoPTAscD0wLGYsaztjPUMoYyk7dGhpcy5mb2xsb3dQb2ludGVyJiZiPyh2b2lkIDA9PT1iLmNoYXJ0WCYmKGI9ZC5ub3JtYWxpemUoYikpLGM9W2IuY2hhcnRYLWEucGxvdExlZnQsYi5jaGFydFktbF0pOmNbMF0udG9vbHRpcFBvcz9jPWNbMF0udG9vbHRpcFBvczooYy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Y9YS5zZXJpZXMueUF4aXM7az1hLnNlcmllcy54QXhpcztoKz1hLnBsb3RYKyghZSYmaz9rLmxlZnQtZzowKTtwKz0oYS5wbG90TG93PyhhLnBsb3RMb3crYS5wbG90SGlnaCkvMjphLnBsb3RZKSsoIWUmJmY/Zi50b3AtbDowKX0pLGgvPWMubGVuZ3RoLHAvPWMubGVuZ3RoLGM9W2U/YS5wbG90V2lkdGgtcDpoLHRoaXMuc2hhcmVkJiYhZSYmMTxjLmxlbmd0aCYmYj9iLmNoYXJ0WS1sOmU/YS5wbG90SGVpZ2h0LWg6cF0pO3JldHVybiBjLm1hcChNYXRoLnJvdW5kKX0sZ2V0UG9zaXRpb246ZnVuY3Rpb24oYyxcbmIsYSl7dmFyIGQ9dGhpcy5jaGFydCxlPXRoaXMuZGlzdGFuY2UsbD17fSxnPWQuaW52ZXJ0ZWQmJmEuaHx8MCxoLHA9dGhpcy5vdXRzaWRlLGY9cD95LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aC0yKmU6ZC5jaGFydFdpZHRoLGs9cD9NYXRoLm1heCh5LmJvZHkuc2Nyb2xsSGVpZ2h0LHkuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCx5LmJvZHkub2Zmc2V0SGVpZ2h0LHkuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCx5LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpOmQuY2hhcnRIZWlnaHQscj1kLnBvaW50ZXIuZ2V0Q2hhcnRQb3NpdGlvbigpLHg9ZC5jb250YWluZXJTY2FsaW5nLEE9ZnVuY3Rpb24oYSl7cmV0dXJuIHg/YSp4LnNjYWxlWDphfSx3PWZ1bmN0aW9uKGEpe3JldHVybiB4P2EqeC5zY2FsZVk6YX0sbT1mdW5jdGlvbihsKXt2YXIgbT1cInhcIj09PWw7cmV0dXJuW2wsbT9mOmssbT9jOmJdLmNvbmNhdChwP1ttP0EoYyk6dyhiKSxtP3IubGVmdC1lK1xuQShhLnBsb3RYK2QucGxvdExlZnQpOnIudG9wLWUrdyhhLnBsb3RZK2QucGxvdFRvcCksMCxtP2Y6a106W20/YzpiLG0/YS5wbG90WCtkLnBsb3RMZWZ0OmEucGxvdFkrZC5wbG90VG9wLG0/ZC5wbG90TGVmdDpkLnBsb3RUb3AsbT9kLnBsb3RMZWZ0K2QucGxvdFdpZHRoOmQucGxvdFRvcCtkLnBsb3RIZWlnaHRdKX0sbj1tKFwieVwiKSxKPW0oXCJ4XCIpLHE9IXRoaXMuZm9sbG93UG9pbnRlciYmdihhLnR0QmVsb3csIWQuaW52ZXJ0ZWQ9PT0hIWEubmVnYXRpdmUpLHQ9ZnVuY3Rpb24oYSxiLGQsYyxrLG0scil7dmFyIHg9XCJ5XCI9PT1hP3coZSk6QShlKSxwPShkLWMpLzIsaD1jPGstZSxmPWsrZStjPGIsdT1rLXgtZCtwO2s9ayt4LXA7aWYocSYmZilsW2FdPWs7ZWxzZSBpZighcSYmaClsW2FdPXU7ZWxzZSBpZihoKWxbYV09TWF0aC5taW4oci1jLDA+dS1nP3U6dS1nKTtlbHNlIGlmKGYpbFthXT1NYXRoLm1heChtLGsrZytkPmI/azprK2cpO2Vsc2UgcmV0dXJuITF9LEM9ZnVuY3Rpb24oYSxcbmIsZCxrLGMpe3ZhciBtO2M8ZXx8Yz5iLWU/bT0hMTpsW2FdPWM8ZC8yPzE6Yz5iLWsvMj9iLWstMjpjLWQvMjtyZXR1cm4gbX0sTz1mdW5jdGlvbihhKXt2YXIgYj1uO249SjtKPWI7aD1hfSxEPWZ1bmN0aW9uKCl7ITEhPT10LmFwcGx5KDAsbik/ITEhPT1DLmFwcGx5KDAsSil8fGh8fChPKCEwKSxEKCkpOmg/bC54PWwueT0wOihPKCEwKSxEKCkpfTsoZC5pbnZlcnRlZHx8MTx0aGlzLmxlbikmJk8oKTtEKCk7cmV0dXJuIGx9LGRlZmF1bHRGb3JtYXR0ZXI6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcy5wb2ludHN8fEModGhpcyk7dmFyIGE9W2MudG9vbHRpcEZvb3RlckhlYWRlckZvcm1hdHRlcihiWzBdKV07YT1hLmNvbmNhdChjLmJvZHlGb3JtYXR0ZXIoYikpO2EucHVzaChjLnRvb2x0aXBGb290ZXJIZWFkZXJGb3JtYXR0ZXIoYlswXSwhMCkpO3JldHVybiBhfSxyZWZyZXNoOmZ1bmN0aW9uKGcsYil7dmFyIGE9dGhpcy5jaGFydCxkPXRoaXMub3B0aW9ucyxlPWcsbD17fSxoPVtdLFxuZj1kLmZvcm1hdHRlcnx8dGhpcy5kZWZhdWx0Rm9ybWF0dGVyO2w9dGhpcy5zaGFyZWQ7dmFyIHA9YS5zdHlsZWRNb2RlO2lmKGQuZW5hYmxlZCl7Yy5jbGVhclRpbWVvdXQodGhpcy5oaWRlVGltZXIpO3RoaXMuZm9sbG93UG9pbnRlcj1DKGUpWzBdLnNlcmllcy50b29sdGlwT3B0aW9ucy5mb2xsb3dQb2ludGVyO3ZhciB1PXRoaXMuZ2V0QW5jaG9yKGUsYik7Yj11WzBdO3ZhciBrPXVbMV07IWx8fGUuc2VyaWVzJiZlLnNlcmllcy5ub1NoYXJlZFRvb2x0aXA/bD1lLmdldExhYmVsQ29uZmlnKCk6KGEucG9pbnRlci5hcHBseUluYWN0aXZlU3RhdGUoZSksZS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0U3RhdGUoXCJob3ZlclwiKTtoLnB1c2goYS5nZXRMYWJlbENvbmZpZygpKX0pLGw9e3g6ZVswXS5jYXRlZ29yeSx5OmVbMF0ueX0sbC5wb2ludHM9aCxlPWVbMF0pO3RoaXMubGVuPWgubGVuZ3RoO2E9Zi5jYWxsKGwsdGhpcyk7Zj1lLnNlcmllczt0aGlzLmRpc3RhbmNlPXYoZi50b29sdGlwT3B0aW9ucy5kaXN0YW5jZSxcbjE2KTshMT09PWE/dGhpcy5oaWRlKCk6KHRoaXMuc3BsaXQ/dGhpcy5yZW5kZXJTcGxpdChhLEMoZykpOihnPXRoaXMuZ2V0TGFiZWwoKSxkLnN0eWxlLndpZHRoJiYhcHx8Zy5jc3Moe3dpZHRoOnRoaXMuY2hhcnQuc3BhY2luZ0JveC53aWR0aH0pLGcuYXR0cih7dGV4dDphJiZhLmpvaW4/YS5qb2luKFwiXCIpOmF9KSxnLnJlbW92ZUNsYXNzKC9oaWdoY2hhcnRzLWNvbG9yLVtcXGRdKy9nKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtY29sb3ItXCIrdihlLmNvbG9ySW5kZXgsZi5jb2xvckluZGV4KSkscHx8Zy5hdHRyKHtzdHJva2U6ZC5ib3JkZXJDb2xvcnx8ZS5jb2xvcnx8Zi5jb2xvcnx8XCIjNjY2NjY2XCJ9KSx0aGlzLnVwZGF0ZVBvc2l0aW9uKHtwbG90WDpiLHBsb3RZOmssbmVnYXRpdmU6ZS5uZWdhdGl2ZSx0dEJlbG93OmUudHRCZWxvdyxoOnVbMl18fDB9KSksdGhpcy5pc0hpZGRlbiYmdGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5hdHRyKHtvcGFjaXR5OjF9KS5zaG93KCksdGhpcy5pc0hpZGRlbj1cbiExKTtjLmZpcmVFdmVudCh0aGlzLFwicmVmcmVzaFwiKX19LHJlbmRlclNwbGl0OmZ1bmN0aW9uKGcsYil7dmFyIGE9dGhpcyxkPVtdLGU9dGhpcy5jaGFydCxsPWUucmVuZGVyZXIsaD0hMCxmPXRoaXMub3B0aW9ucyxwPTAsdSxrPXRoaXMuZ2V0TGFiZWwoKSxyPWUucGxvdFRvcDt0KGcpJiYoZz1bITEsZ10pO2cuc2xpY2UoMCxiLmxlbmd0aCsxKS5mb3JFYWNoKGZ1bmN0aW9uKGMsbSl7aWYoITEhPT1jJiZcIlwiIT09Yyl7bT1iW20tMV18fHtpc0hlYWRlcjohMCxwbG90WDpiWzBdLnBsb3RYLHBsb3RZOmUucGxvdEhlaWdodH07dmFyIGc9bS5zZXJpZXN8fGEseD1nLnR0LHc9bS5zZXJpZXN8fHt9LEE9XCJoaWdoY2hhcnRzLWNvbG9yLVwiK3YobS5jb2xvckluZGV4LHcuY29sb3JJbmRleCxcIm5vbmVcIik7eHx8KHg9e3BhZGRpbmc6Zi5wYWRkaW5nLHI6Zi5ib3JkZXJSYWRpdXN9LGUuc3R5bGVkTW9kZXx8KHguZmlsbD1mLmJhY2tncm91bmRDb2xvcix4W1wic3Ryb2tlLXdpZHRoXCJdPWYuYm9yZGVyV2lkdGgpLFxuZy50dD14PWwubGFiZWwobnVsbCxudWxsLG51bGwsKG0uaXNIZWFkZXI/Zi5oZWFkZXJTaGFwZTpmLnNoYXBlKXx8XCJjYWxsb3V0XCIsbnVsbCxudWxsLGYudXNlSFRNTCkuYWRkQ2xhc3MobS5pc0hlYWRlcj9cImhpZ2hjaGFydHMtdG9vbHRpcC1oZWFkZXIgXCI6XCJoaWdoY2hhcnRzLXRvb2x0aXAtYm94IFwiK0EpLmF0dHIoeCkuYWRkKGspKTt4LmlzQWN0aXZlPSEwO3guYXR0cih7dGV4dDpjfSk7ZS5zdHlsZWRNb2RlfHx4LmNzcyhmLnN0eWxlKS5zaGFkb3coZi5zaGFkb3cpLmF0dHIoe3N0cm9rZTpmLmJvcmRlckNvbG9yfHxtLmNvbG9yfHx3LmNvbG9yfHxcIiMzMzMzMzNcIn0pO2M9eC5nZXRCQm94KCk7QT1jLndpZHRoK3guc3Ryb2tlV2lkdGgoKTttLmlzSGVhZGVyPyhwPWMuaGVpZ2h0LGUueEF4aXNbMF0ub3Bwb3NpdGUmJih1PSEwLHItPXApLGM9TWF0aC5tYXgoMCxNYXRoLm1pbihtLnBsb3RYK2UucGxvdExlZnQtQS8yLGUuY2hhcnRXaWR0aCsoZS5zY3JvbGxhYmxlUGl4ZWxzWD9cbmUuc2Nyb2xsYWJsZVBpeGVsc1gtZS5tYXJnaW5SaWdodDowKS1BKSkpOmM9bS5wbG90WCtlLnBsb3RMZWZ0LXYoZi5kaXN0YW5jZSwxNiktQTswPmMmJihoPSExKTttLmlzSGVhZGVyP3c9dT8tcDplLnBsb3RIZWlnaHQrcDoodz13LnlBeGlzLHc9dy5wb3MtcitNYXRoLm1heCgwLE1hdGgubWluKG0ucGxvdFl8fDAsdy5sZW4pKSk7ZC5wdXNoKHt0YXJnZXQ6dyxyYW5rOm0uaXNIZWFkZXI/MTowLHNpemU6Zy50dC5nZXRCQm94KCkuaGVpZ2h0KzEscG9pbnQ6bSx4OmMsdHQ6eH0pfX0pO3RoaXMuY2xlYW5TcGxpdCgpO2YucG9zaXRpb25lciYmZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPWYucG9zaXRpb25lci5jYWxsKGEsYi50dC5nZXRCQm94KCkud2lkdGgsYi5zaXplLGIucG9pbnQpO2IueD1kLng7Yi5hbGlnbj0wO2IudGFyZ2V0PWQueTtiLnJhbms9dihkLnJhbmssYi5yYW5rKX0pO2MuZGlzdHJpYnV0ZShkLGUucGxvdEhlaWdodCtwKTtkLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGQ9XG5iLnBvaW50LGM9ZC5zZXJpZXMsaz1jJiZjLnlBeGlzO2IudHQuYXR0cih7dmlzaWJpbGl0eTp2b2lkIDA9PT1iLnBvcz9cImhpZGRlblwiOlwiaW5oZXJpdFwiLHg6aHx8ZC5pc0hlYWRlcnx8Zi5wb3NpdGlvbmVyP2IueDpkLnBsb3RYK2UucGxvdExlZnQrYS5kaXN0YW5jZSx5OmIucG9zK3IsYW5jaG9yWDpkLmlzSGVhZGVyP2QucGxvdFgrZS5wbG90TGVmdDpkLnBsb3RYK2MueEF4aXMucG9zLGFuY2hvclk6ZC5pc0hlYWRlcj9lLnBsb3RUb3ArZS5wbG90SGVpZ2h0LzI6ay5wb3MrTWF0aC5tYXgoMCxNYXRoLm1pbihkLnBsb3RZLGsubGVuKSl9KX0pO3ZhciB4PWEuY29udGFpbmVyO2c9YS5yZW5kZXJlcjtpZihhLm91dHNpZGUmJngmJmcpe3ZhciBBPWUucG9pbnRlci5nZXRDaGFydFBvc2l0aW9uKCk7eC5zdHlsZS5sZWZ0PUEubGVmdCtcInB4XCI7eC5zdHlsZS50b3A9QS50b3ArXCJweFwiO3g9ay5nZXRCQm94KCk7Zy5zZXRTaXplKHgud2lkdGgreC54LHguaGVpZ2h0K3gueSwhMSl9fSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbihnKXt2YXIgYj1cbnRoaXMuY2hhcnQsYT1iLnBvaW50ZXIsZD10aGlzLmdldExhYmVsKCksZT1nLnBsb3RYK2IucGxvdExlZnQsbD1nLnBsb3RZK2IucGxvdFRvcDthPWEuZ2V0Q2hhcnRQb3NpdGlvbigpO2c9KHRoaXMub3B0aW9ucy5wb3NpdGlvbmVyfHx0aGlzLmdldFBvc2l0aW9uKS5jYWxsKHRoaXMsZC53aWR0aCxkLmhlaWdodCxnKTtpZih0aGlzLm91dHNpZGUpe3ZhciBoPSh0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGh8fDApKzIqdGhpcy5kaXN0YW5jZTt0aGlzLnJlbmRlcmVyLnNldFNpemUoZC53aWR0aCtoLGQuaGVpZ2h0K2gsITEpO2lmKGI9Yi5jb250YWluZXJTY2FsaW5nKWMuY3NzKHRoaXMuY29udGFpbmVyLHt0cmFuc2Zvcm06XCJzY2FsZShcIitiLnNjYWxlWCtcIiwgXCIrYi5zY2FsZVkrXCIpXCJ9KSxlKj1iLnNjYWxlWCxsKj1iLnNjYWxlWTtlKz1hLmxlZnQtZy54O2wrPWEudG9wLWcueX10aGlzLm1vdmUoTWF0aC5yb3VuZChnLngpLE1hdGgucm91bmQoZy55fHwwKSxlLGwpfSxnZXREYXRlRm9ybWF0OmZ1bmN0aW9uKGMsXG5iLGEsZCl7dmFyIGU9dGhpcy5jaGFydC50aW1lLGw9ZS5kYXRlRm9ybWF0KFwiJW0tJWQgJUg6JU06JVMuJUxcIixiKSxnPXttaWxsaXNlY29uZDoxNSxzZWNvbmQ6MTIsbWludXRlOjksaG91cjo2LGRheTozfSxoPVwibWlsbGlzZWNvbmRcIjtmb3IocCBpbiBxKXtpZihjPT09cS53ZWVrJiYrZS5kYXRlRm9ybWF0KFwiJXdcIixiKT09PWEmJlwiMDA6MDA6MDAuMDAwXCI9PT1sLnN1YnN0cig2KSl7dmFyIHA9XCJ3ZWVrXCI7YnJlYWt9aWYocVtwXT5jKXtwPWg7YnJlYWt9aWYoZ1twXSYmbC5zdWJzdHIoZ1twXSkhPT1cIjAxLTAxIDAwOjAwOjAwLjAwMFwiLnN1YnN0cihnW3BdKSlicmVhaztcIndlZWtcIiE9PXAmJihoPXApfWlmKHApdmFyIGY9ZS5yZXNvbHZlRFRMRm9ybWF0KGRbcF0pLm1haW47cmV0dXJuIGZ9LGdldFhEYXRlRm9ybWF0OmZ1bmN0aW9uKGMsYixhKXtiPWIuZGF0ZVRpbWVMYWJlbEZvcm1hdHM7dmFyIGQ9YSYmYS5jbG9zZXN0UG9pbnRSYW5nZTtyZXR1cm4oZD90aGlzLmdldERhdGVGb3JtYXQoZCxcbmMueCxhLm9wdGlvbnMuc3RhcnRPZldlZWssYik6Yi5kYXkpfHxiLnllYXJ9LHRvb2x0aXBGb290ZXJIZWFkZXJGb3JtYXR0ZXI6ZnVuY3Rpb24oZyxiKXt2YXIgYT1iP1wiZm9vdGVyXCI6XCJoZWFkZXJcIixkPWcuc2VyaWVzLGU9ZC50b29sdGlwT3B0aW9ucyxsPWUueERhdGVGb3JtYXQsZj1kLnhBeGlzLG49ZiYmXCJkYXRldGltZVwiPT09Zi5vcHRpb25zLnR5cGUmJkIoZy5rZXkpLHA9ZVthK1wiRm9ybWF0XCJdO2I9e2lzRm9vdGVyOmIsbGFiZWxDb25maWc6Z307Yy5maXJlRXZlbnQodGhpcyxcImhlYWRlckZvcm1hdHRlclwiLGIsZnVuY3Rpb24oYSl7biYmIWwmJihsPXRoaXMuZ2V0WERhdGVGb3JtYXQoZyxlLGYpKTtuJiZsJiYoZy5wb2ludCYmZy5wb2ludC50b29sdGlwRGF0ZUtleXN8fFtcImtleVwiXSkuZm9yRWFjaChmdW5jdGlvbihhKXtwPXAucmVwbGFjZShcIntwb2ludC5cIithK1wifVwiLFwie3BvaW50LlwiK2ErXCI6XCIrbCtcIn1cIil9KTtkLmNoYXJ0LnN0eWxlZE1vZGUmJihwPXRoaXMuc3R5bGVkTW9kZUZvcm1hdChwKSk7XG5hLnRleHQ9aChwLHtwb2ludDpnLHNlcmllczpkfSx0aGlzLmNoYXJ0LnRpbWUpfSk7cmV0dXJuIGIudGV4dH0sYm9keUZvcm1hdHRlcjpmdW5jdGlvbihjKXtyZXR1cm4gYy5tYXAoZnVuY3Rpb24oYil7dmFyIGE9Yi5zZXJpZXMudG9vbHRpcE9wdGlvbnM7cmV0dXJuKGFbKGIucG9pbnQuZm9ybWF0UHJlZml4fHxcInBvaW50XCIpK1wiRm9ybWF0dGVyXCJdfHxiLnBvaW50LnRvb2x0aXBGb3JtYXR0ZXIpLmNhbGwoYi5wb2ludCxhWyhiLnBvaW50LmZvcm1hdFByZWZpeHx8XCJwb2ludFwiKStcIkZvcm1hdFwiXXx8XCJcIil9KX0sc3R5bGVkTW9kZUZvcm1hdDpmdW5jdGlvbihjKXtyZXR1cm4gYy5yZXBsYWNlKCdzdHlsZT1cImZvbnQtc2l6ZTogMTBweFwiJywnY2xhc3M9XCJoaWdoY2hhcnRzLWhlYWRlclwiJykucmVwbGFjZSgvc3R5bGU9XCJjb2xvcjp7KHBvaW50fHNlcmllcylcXC5jb2xvcn1cIi9nLCdjbGFzcz1cImhpZ2hjaGFydHMtY29sb3IteyQxLmNvbG9ySW5kZXh9XCInKX19fSk7TShJLFwicGFydHMvUG9pbnRlci5qc1wiLFxuW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5hdHRyLEc9Zi5kZWZpbmVkLHo9Zi5leHRlbmQsQj1mLmlzTnVtYmVyLHQ9Zi5pc09iamVjdCx2PWYub2JqZWN0RWFjaCxDPWYucGljayxIPWYuc3BsYXQseT1jLmFkZEV2ZW50LGg9Yy5jaGFydHMsbj1jLmNvbG9yLHE9Yy5jc3MsZz1jLmZpbmQsYj1jLmZpcmVFdmVudCxhPWMub2Zmc2V0LGQ9Yy5Ub29sdGlwO2MuUG9pbnRlcj1mdW5jdGlvbihhLGIpe3RoaXMuaW5pdChhLGIpfTtjLlBvaW50ZXIucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKGEsYil7dGhpcy5vcHRpb25zPWI7dGhpcy5jaGFydD1hO3RoaXMucnVuQ2hhcnRDbGljaz1iLmNoYXJ0LmV2ZW50cyYmISFiLmNoYXJ0LmV2ZW50cy5jbGljazt0aGlzLnBpbmNoRG93bj1bXTt0aGlzLmxhc3RWYWxpZFRvdWNoPXt9O2QmJihhLnRvb2x0aXA9bmV3IGQoYSxiLnRvb2x0aXApLHRoaXMuZm9sbG93VG91Y2hNb3ZlPVxuQyhiLnRvb2x0aXAuZm9sbG93VG91Y2hNb3ZlLCEwKSk7dGhpcy5zZXRET01FdmVudHMoKX0sem9vbU9wdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNoYXJ0LGQ9Yi5vcHRpb25zLmNoYXJ0LGU9ZC56b29tVHlwZXx8XCJcIjtiPWIuaW52ZXJ0ZWQ7L3RvdWNoLy50ZXN0KGEudHlwZSkmJihlPUMoZC5waW5jaFR5cGUsZSkpO3RoaXMuem9vbVg9YT0veC8udGVzdChlKTt0aGlzLnpvb21ZPWU9L3kvLnRlc3QoZSk7dGhpcy56b29tSG9yPWEmJiFifHxlJiZiO3RoaXMuem9vbVZlcnQ9ZSYmIWJ8fGEmJmI7dGhpcy5oYXNab29tPWF8fGV9LGdldENoYXJ0UG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGFydFBvc2l0aW9ufHwodGhpcy5jaGFydFBvc2l0aW9uPWEodGhpcy5jaGFydC5jb250YWluZXIpKX0sbm9ybWFsaXplOmZ1bmN0aW9uKGEsYil7dmFyIGQ9YS50b3VjaGVzP2EudG91Y2hlcy5sZW5ndGg/YS50b3VjaGVzLml0ZW0oMCk6YS5jaGFuZ2VkVG91Y2hlc1swXTpcbmE7Ynx8KGI9dGhpcy5nZXRDaGFydFBvc2l0aW9uKCkpO3ZhciBlPWQucGFnZVgtYi5sZWZ0O2I9ZC5wYWdlWS1iLnRvcDtpZihkPXRoaXMuY2hhcnQuY29udGFpbmVyU2NhbGluZyllLz1kLnNjYWxlWCxiLz1kLnNjYWxlWTtyZXR1cm4geihhLHtjaGFydFg6TWF0aC5yb3VuZChlKSxjaGFydFk6TWF0aC5yb3VuZChiKX0pfSxnZXRDb29yZGluYXRlczpmdW5jdGlvbihhKXt2YXIgYj17eEF4aXM6W10seUF4aXM6W119O3RoaXMuY2hhcnQuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGQpe2JbZC5pc1hBeGlzP1wieEF4aXNcIjpcInlBeGlzXCJdLnB1c2goe2F4aXM6ZCx2YWx1ZTpkLnRvVmFsdWUoYVtkLmhvcml6P1wiY2hhcnRYXCI6XCJjaGFydFlcIl0pfSl9KTtyZXR1cm4gYn0sZmluZE5lYXJlc3RLRFBvaW50OmZ1bmN0aW9uKGEsYixkKXt2YXIgZTthLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9IShhLm5vU2hhcmVkVG9vbHRpcCYmYikmJjA+YS5vcHRpb25zLmZpbmROZWFyZXN0UG9pbnRCeS5pbmRleE9mKFwieVwiKTtcbmE9YS5zZWFyY2hQb2ludChkLGMpO2lmKChjPXQoYSwhMCkpJiYhKGM9IXQoZSwhMCkpKXtjPWUuZGlzdFgtYS5kaXN0WDt2YXIgaz1lLmRpc3QtYS5kaXN0LGw9KGEuc2VyaWVzLmdyb3VwJiZhLnNlcmllcy5ncm91cC56SW5kZXgpLShlLnNlcmllcy5ncm91cCYmZS5zZXJpZXMuZ3JvdXAuekluZGV4KTtjPTA8KDAhPT1jJiZiP2M6MCE9PWs/azowIT09bD9sOmUuc2VyaWVzLmluZGV4PmEuc2VyaWVzLmluZGV4Py0xOjEpfWMmJihlPWEpfSk7cmV0dXJuIGV9LGdldFBvaW50RnJvbUV2ZW50OmZ1bmN0aW9uKGEpe2E9YS50YXJnZXQ7Zm9yKHZhciBiO2EmJiFiOyliPWEucG9pbnQsYT1hLnBhcmVudE5vZGU7cmV0dXJuIGJ9LGdldENoYXJ0Q29vcmRpbmF0ZXNGcm9tUG9pbnQ6ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLnNlcmllcyxlPWQueEF4aXM7ZD1kLnlBeGlzO3ZhciBjPUMoYS5jbGllbnRYLGEucGxvdFgpLGw9YS5zaGFwZUFyZ3M7aWYoZSYmZClyZXR1cm4gYj97Y2hhcnRYOmUubGVuK1xuZS5wb3MtYyxjaGFydFk6ZC5sZW4rZC5wb3MtYS5wbG90WX06e2NoYXJ0WDpjK2UucG9zLGNoYXJ0WTphLnBsb3RZK2QucG9zfTtpZihsJiZsLngmJmwueSlyZXR1cm57Y2hhcnRYOmwueCxjaGFydFk6bC55fX0sZ2V0SG92ZXJEYXRhOmZ1bmN0aW9uKGEsYixkLGMsaCxmKXt2YXIgZSxsPVtdO2M9ISghY3x8IWEpO3ZhciB4PWImJiFiLnN0aWNreVRyYWNraW5nP1tiXTpkLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS52aXNpYmxlJiYhKCFoJiZhLmRpcmVjdFRvdWNoKSYmQyhhLm9wdGlvbnMuZW5hYmxlTW91c2VUcmFja2luZywhMCkmJmEuc3RpY2t5VHJhY2tpbmd9KTtiPShlPWN8fCFmP2E6dGhpcy5maW5kTmVhcmVzdEtEUG9pbnQoeCxoLGYpKSYmZS5zZXJpZXM7ZSYmKGgmJiFiLm5vU2hhcmVkVG9vbHRpcD8oeD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS52aXNpYmxlJiYhKCFoJiZhLmRpcmVjdFRvdWNoKSYmQyhhLm9wdGlvbnMuZW5hYmxlTW91c2VUcmFja2luZyxcbiEwKSYmIWEubm9TaGFyZWRUb29sdGlwfSkseC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWcoYS5wb2ludHMsZnVuY3Rpb24oYSl7cmV0dXJuIGEueD09PWUueCYmIWEuaXNOdWxsfSk7dChiKSYmKGEuY2hhcnQuaXNCb29zdGluZyYmKGI9YS5nZXRQb2ludChiKSksbC5wdXNoKGIpKX0pKTpsLnB1c2goZSkpO3JldHVybntob3ZlclBvaW50OmUsaG92ZXJTZXJpZXM6Yixob3ZlclBvaW50czpsfX0scnVuUG9pbnRBY3Rpb25zOmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcy5jaGFydCxlPWQudG9vbHRpcCYmZC50b29sdGlwLm9wdGlvbnMuZW5hYmxlZD9kLnRvb2x0aXA6dm9pZCAwLGw9ZT9lLnNoYXJlZDohMSxnPWJ8fGQuaG92ZXJQb2ludCxrPWcmJmcuc2VyaWVzfHxkLmhvdmVyU2VyaWVzO2s9dGhpcy5nZXRIb3ZlckRhdGEoZyxrLGQuc2VyaWVzLCghYXx8XCJ0b3VjaG1vdmVcIiE9PWEudHlwZSkmJighIWJ8fGsmJmsuZGlyZWN0VG91Y2gmJnRoaXMuaXNEaXJlY3RUb3VjaCksbCxhKTtcbmc9ay5ob3ZlclBvaW50O3ZhciByPWsuaG92ZXJQb2ludHM7Yj0oaz1rLmhvdmVyU2VyaWVzKSYmay50b29sdGlwT3B0aW9ucy5mb2xsb3dQb2ludGVyO2w9bCYmayYmIWsubm9TaGFyZWRUb29sdGlwO2lmKGcmJihnIT09ZC5ob3ZlclBvaW50fHxlJiZlLmlzSGlkZGVuKSl7KGQuaG92ZXJQb2ludHN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpey0xPT09ci5pbmRleE9mKGEpJiZhLnNldFN0YXRlKCl9KTtpZihkLmhvdmVyU2VyaWVzIT09aylrLm9uTW91c2VPdmVyKCk7dGhpcy5hcHBseUluYWN0aXZlU3RhdGUocik7KHJ8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0U3RhdGUoXCJob3ZlclwiKX0pO2QuaG92ZXJQb2ludCYmZC5ob3ZlclBvaW50LmZpcmVQb2ludEV2ZW50KFwibW91c2VPdXRcIik7aWYoIWcuc2VyaWVzKXJldHVybjtnLmZpcmVQb2ludEV2ZW50KFwibW91c2VPdmVyXCIpO2QuaG92ZXJQb2ludHM9cjtkLmhvdmVyUG9pbnQ9ZztlJiZlLnJlZnJlc2gobD9yOmcsYSl9ZWxzZSBiJiZcbmUmJiFlLmlzSGlkZGVuJiYoZz1lLmdldEFuY2hvcihbe31dLGEpLGUudXBkYXRlUG9zaXRpb24oe3Bsb3RYOmdbMF0scGxvdFk6Z1sxXX0pKTt0aGlzLnVuRG9jTW91c2VNb3ZlfHwodGhpcy51bkRvY01vdXNlTW92ZT15KGQuY29udGFpbmVyLm93bmVyRG9jdW1lbnQsXCJtb3VzZW1vdmVcIixmdW5jdGlvbihhKXt2YXIgYj1oW2MuaG92ZXJDaGFydEluZGV4XTtpZihiKWIucG9pbnRlci5vbkRvY3VtZW50TW91c2VNb3ZlKGEpfSkpO2QuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPUMoYi5jcm9zc2hhaXIuc25hcCwhMCksZT1kP2MuZmluZChyLGZ1bmN0aW9uKGEpe3JldHVybiBhLnNlcmllc1tiLmNvbGxdPT09Yn0pOnZvaWQgMDtlfHwhZD9iLmRyYXdDcm9zc2hhaXIoYSxlKTpiLmhpZGVDcm9zc2hhaXIoKX0pfSxhcHBseUluYWN0aXZlU3RhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9W10sZDsoYXx8W10pLmZvckVhY2goZnVuY3Rpb24oYSl7ZD1hLnNlcmllcztiLnB1c2goZCk7XG5kLmxpbmtlZFBhcmVudCYmYi5wdXNoKGQubGlua2VkUGFyZW50KTtkLmxpbmtlZFNlcmllcyYmKGI9Yi5jb25jYXQoZC5saW5rZWRTZXJpZXMpKTtkLm5hdmlnYXRvclNlcmllcyYmYi5wdXNoKGQubmF2aWdhdG9yU2VyaWVzKX0pO3RoaXMuY2hhcnQuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7LTE9PT1iLmluZGV4T2YoYSk/YS5zZXRTdGF0ZShcImluYWN0aXZlXCIsITApOmEub3B0aW9ucy5pbmFjdGl2ZU90aGVyUG9pbnRzJiZhLnNldEFsbFBvaW50c1RvU3RhdGUoXCJpbmFjdGl2ZVwiKX0pfSxyZXNldDpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuY2hhcnQsZT1kLmhvdmVyU2VyaWVzLGM9ZC5ob3ZlclBvaW50LGc9ZC5ob3ZlclBvaW50cyxrPWQudG9vbHRpcCxsPWsmJmsuc2hhcmVkP2c6YzthJiZsJiZIKGwpLmZvckVhY2goZnVuY3Rpb24oYil7Yi5zZXJpZXMuaXNDYXJ0ZXNpYW4mJnZvaWQgMD09PWIucGxvdFgmJihhPSExKX0pO2lmKGEpayYmbCYmSChsKS5sZW5ndGgmJihrLnJlZnJlc2gobCksXG5rLnNoYXJlZCYmZz9nLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zZXRTdGF0ZShhLnN0YXRlLCEwKTthLnNlcmllcy5pc0NhcnRlc2lhbiYmKGEuc2VyaWVzLnhBeGlzLmNyb3NzaGFpciYmYS5zZXJpZXMueEF4aXMuZHJhd0Nyb3NzaGFpcihudWxsLGEpLGEuc2VyaWVzLnlBeGlzLmNyb3NzaGFpciYmYS5zZXJpZXMueUF4aXMuZHJhd0Nyb3NzaGFpcihudWxsLGEpKX0pOmMmJihjLnNldFN0YXRlKGMuc3RhdGUsITApLGQuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuY3Jvc3NoYWlyJiZhLmRyYXdDcm9zc2hhaXIobnVsbCxjKX0pKSk7ZWxzZXtpZihjKWMub25Nb3VzZU91dCgpO2cmJmcuZm9yRWFjaChmdW5jdGlvbihhKXthLnNldFN0YXRlKCl9KTtpZihlKWUub25Nb3VzZU91dCgpO2smJmsuaGlkZShiKTt0aGlzLnVuRG9jTW91c2VNb3ZlJiYodGhpcy51bkRvY01vdXNlTW92ZT10aGlzLnVuRG9jTW91c2VNb3ZlKCkpO2QuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuaGlkZUNyb3NzaGFpcigpfSk7XG50aGlzLmhvdmVyWD1kLmhvdmVyUG9pbnRzPWQuaG92ZXJQb2ludD1udWxsfX0sc2NhbGVHcm91cHM6ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzLmNoYXJ0LGU7ZC5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihjKXtlPWF8fGMuZ2V0UGxvdEJveCgpO2MueEF4aXMmJmMueEF4aXMuem9vbUVuYWJsZWQmJmMuZ3JvdXAmJihjLmdyb3VwLmF0dHIoZSksYy5tYXJrZXJHcm91cCYmKGMubWFya2VyR3JvdXAuYXR0cihlKSxjLm1hcmtlckdyb3VwLmNsaXAoYj9kLmNsaXBSZWN0Om51bGwpKSxjLmRhdGFMYWJlbHNHcm91cCYmYy5kYXRhTGFiZWxzR3JvdXAuYXR0cihlKSl9KTtkLmNsaXBSZWN0LmF0dHIoYnx8ZC5jbGlwQm94KX0sZHJhZ1N0YXJ0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhcnQ7Yi5tb3VzZUlzRG93bj1hLnR5cGU7Yi5jYW5jZWxDbGljaz0hMTtiLm1vdXNlRG93blg9dGhpcy5tb3VzZURvd25YPWEuY2hhcnRYO2IubW91c2VEb3duWT10aGlzLm1vdXNlRG93blk9YS5jaGFydFl9LFxuZHJhZzpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNoYXJ0LGQ9Yi5vcHRpb25zLmNoYXJ0LGU9YS5jaGFydFgsYz1hLmNoYXJ0WSxnPXRoaXMuem9vbUhvcixrPXRoaXMuem9vbVZlcnQscj1iLnBsb3RMZWZ0LGg9Yi5wbG90VG9wLEE9Yi5wbG90V2lkdGgsdz1iLnBsb3RIZWlnaHQsbT10aGlzLnNlbGVjdGlvbk1hcmtlcixmPXRoaXMubW91c2VEb3duWCxKPXRoaXMubW91c2VEb3duWSx2PWQucGFuS2V5JiZhW2QucGFuS2V5K1wiS2V5XCJdO2lmKCFtfHwhbS50b3VjaClpZihlPHI/ZT1yOmU+citBJiYoZT1yK0EpLGM8aD9jPWg6Yz5oK3cmJihjPWgrdyksdGhpcy5oYXNEcmFnZ2VkPU1hdGguc3FydChNYXRoLnBvdyhmLWUsMikrTWF0aC5wb3coSi1jLDIpKSwxMDx0aGlzLmhhc0RyYWdnZWQpe3ZhciBxPWIuaXNJbnNpZGVQbG90KGYtcixKLWgpO2IuaGFzQ2FydGVzaWFuU2VyaWVzJiYodGhpcy56b29tWHx8dGhpcy56b29tWSkmJnEmJiF2JiYhbSYmKHRoaXMuc2VsZWN0aW9uTWFya2VyPVxubT1iLnJlbmRlcmVyLnJlY3QocixoLGc/MTpBLGs/MTp3LDApLmF0dHIoe1wiY2xhc3NcIjpcImhpZ2hjaGFydHMtc2VsZWN0aW9uLW1hcmtlclwiLHpJbmRleDo3fSkuYWRkKCksYi5zdHlsZWRNb2RlfHxtLmF0dHIoe2ZpbGw6ZC5zZWxlY3Rpb25NYXJrZXJGaWxsfHxuKFwiIzMzNWNhZFwiKS5zZXRPcGFjaXR5KC4yNSkuZ2V0KCl9KSk7bSYmZyYmKGUtPWYsbS5hdHRyKHt3aWR0aDpNYXRoLmFicyhlKSx4OigwPGU/MDplKStmfSkpO20mJmsmJihlPWMtSixtLmF0dHIoe2hlaWdodDpNYXRoLmFicyhlKSx5OigwPGU/MDplKStKfSkpO3EmJiFtJiZkLnBhbm5pbmcmJmIucGFuKGEsZC5wYW5uaW5nKX19LGRyb3A6ZnVuY3Rpb24oYSl7dmFyIGQ9dGhpcyxlPXRoaXMuY2hhcnQsYz10aGlzLmhhc1BpbmNoZWQ7aWYodGhpcy5zZWxlY3Rpb25NYXJrZXIpe3ZhciBnPXtvcmlnaW5hbEV2ZW50OmEseEF4aXM6W10seUF4aXM6W119LGg9dGhpcy5zZWxlY3Rpb25NYXJrZXIsaz1oLmF0dHI/aC5hdHRyKFwieFwiKTpcbmgueCxyPWguYXR0cj9oLmF0dHIoXCJ5XCIpOmgueSx4PWguYXR0cj9oLmF0dHIoXCJ3aWR0aFwiKTpoLndpZHRoLEE9aC5hdHRyP2guYXR0cihcImhlaWdodFwiKTpoLmhlaWdodCx3O2lmKHRoaXMuaGFzRHJhZ2dlZHx8YyllLmF4ZXMuZm9yRWFjaChmdW5jdGlvbihiKXtpZihiLnpvb21FbmFibGVkJiZHKGIubWluKSYmKGN8fGRbe3hBeGlzOlwiem9vbVhcIix5QXhpczpcInpvb21ZXCJ9W2IuY29sbF1dKSl7dmFyIGU9Yi5ob3JpeixtPVwidG91Y2hlbmRcIj09PWEudHlwZT9iLm1pblBpeGVsUGFkZGluZzowLGw9Yi50b1ZhbHVlKChlP2s6cikrbSk7ZT1iLnRvVmFsdWUoKGU/ayt4OnIrQSktbSk7Z1tiLmNvbGxdLnB1c2goe2F4aXM6YixtaW46TWF0aC5taW4obCxlKSxtYXg6TWF0aC5tYXgobCxlKX0pO3c9ITB9fSksdyYmYihlLFwic2VsZWN0aW9uXCIsZyxmdW5jdGlvbihhKXtlLnpvb20oeihhLGM/e2FuaW1hdGlvbjohMX06bnVsbCkpfSk7QihlLmluZGV4KSYmKHRoaXMuc2VsZWN0aW9uTWFya2VyPVxudGhpcy5zZWxlY3Rpb25NYXJrZXIuZGVzdHJveSgpKTtjJiZ0aGlzLnNjYWxlR3JvdXBzKCl9ZSYmQihlLmluZGV4KSYmKHEoZS5jb250YWluZXIse2N1cnNvcjplLl9jdXJzb3J9KSxlLmNhbmNlbENsaWNrPTEwPHRoaXMuaGFzRHJhZ2dlZCxlLm1vdXNlSXNEb3duPXRoaXMuaGFzRHJhZ2dlZD10aGlzLmhhc1BpbmNoZWQ9ITEsdGhpcy5waW5jaERvd249W10pfSxvbkNvbnRhaW5lck1vdXNlRG93bjpmdW5jdGlvbihhKXthPXRoaXMubm9ybWFsaXplKGEpOzIhPT1hLmJ1dHRvbiYmKHRoaXMuem9vbU9wdGlvbihhKSxhLnByZXZlbnREZWZhdWx0JiZhLnByZXZlbnREZWZhdWx0KCksdGhpcy5kcmFnU3RhcnQoYSkpfSxvbkRvY3VtZW50TW91c2VVcDpmdW5jdGlvbihhKXtoW2MuaG92ZXJDaGFydEluZGV4XSYmaFtjLmhvdmVyQ2hhcnRJbmRleF0ucG9pbnRlci5kcm9wKGEpfSxvbkRvY3VtZW50TW91c2VNb3ZlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhcnQsZD10aGlzLmNoYXJ0UG9zaXRpb247XG5hPXRoaXMubm9ybWFsaXplKGEsZCk7IWR8fHRoaXMuaW5DbGFzcyhhLnRhcmdldCxcImhpZ2hjaGFydHMtdHJhY2tlclwiKXx8Yi5pc0luc2lkZVBsb3QoYS5jaGFydFgtYi5wbG90TGVmdCxhLmNoYXJ0WS1iLnBsb3RUb3ApfHx0aGlzLnJlc2V0KCl9LG9uQ29udGFpbmVyTW91c2VMZWF2ZTpmdW5jdGlvbihhKXt2YXIgYj1oW2MuaG92ZXJDaGFydEluZGV4XTtiJiYoYS5yZWxhdGVkVGFyZ2V0fHxhLnRvRWxlbWVudCkmJihiLnBvaW50ZXIucmVzZXQoKSxiLnBvaW50ZXIuY2hhcnRQb3NpdGlvbj12b2lkIDApfSxvbkNvbnRhaW5lck1vdXNlTW92ZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNoYXJ0O0coYy5ob3ZlckNoYXJ0SW5kZXgpJiZoW2MuaG92ZXJDaGFydEluZGV4XSYmaFtjLmhvdmVyQ2hhcnRJbmRleF0ubW91c2VJc0Rvd258fChjLmhvdmVyQ2hhcnRJbmRleD1iLmluZGV4KTthPXRoaXMubm9ybWFsaXplKGEpO2EucHJldmVudERlZmF1bHR8fChhLnJldHVyblZhbHVlPSExKTtcblwibW91c2Vkb3duXCI9PT1iLm1vdXNlSXNEb3duJiZ0aGlzLmRyYWcoYSk7IXRoaXMuaW5DbGFzcyhhLnRhcmdldCxcImhpZ2hjaGFydHMtdHJhY2tlclwiKSYmIWIuaXNJbnNpZGVQbG90KGEuY2hhcnRYLWIucGxvdExlZnQsYS5jaGFydFktYi5wbG90VG9wKXx8Yi5vcGVuTWVudXx8dGhpcy5ydW5Qb2ludEFjdGlvbnMoYSl9LGluQ2xhc3M6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGQ7YTspe2lmKGQ9RihhLFwiY2xhc3NcIikpe2lmKC0xIT09ZC5pbmRleE9mKGIpKXJldHVybiEwO2lmKC0xIT09ZC5pbmRleE9mKFwiaGlnaGNoYXJ0cy1jb250YWluZXJcIikpcmV0dXJuITF9YT1hLnBhcmVudE5vZGV9fSxvblRyYWNrZXJNb3VzZU91dDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNoYXJ0LmhvdmVyU2VyaWVzO2E9YS5yZWxhdGVkVGFyZ2V0fHxhLnRvRWxlbWVudDt0aGlzLmlzRGlyZWN0VG91Y2g9ITE7aWYoISghYnx8IWF8fGIuc3RpY2t5VHJhY2tpbmd8fHRoaXMuaW5DbGFzcyhhLFwiaGlnaGNoYXJ0cy10b29sdGlwXCIpfHxcbnRoaXMuaW5DbGFzcyhhLFwiaGlnaGNoYXJ0cy1zZXJpZXMtXCIrYi5pbmRleCkmJnRoaXMuaW5DbGFzcyhhLFwiaGlnaGNoYXJ0cy10cmFja2VyXCIpKSliLm9uTW91c2VPdXQoKX0sb25Db250YWluZXJDbGljazpmdW5jdGlvbihhKXt2YXIgZD10aGlzLmNoYXJ0LGU9ZC5ob3ZlclBvaW50LGM9ZC5wbG90TGVmdCxnPWQucGxvdFRvcDthPXRoaXMubm9ybWFsaXplKGEpO2QuY2FuY2VsQ2xpY2t8fChlJiZ0aGlzLmluQ2xhc3MoYS50YXJnZXQsXCJoaWdoY2hhcnRzLXRyYWNrZXJcIik/KGIoZS5zZXJpZXMsXCJjbGlja1wiLHooYSx7cG9pbnQ6ZX0pKSxkLmhvdmVyUG9pbnQmJmUuZmlyZVBvaW50RXZlbnQoXCJjbGlja1wiLGEpKTooeihhLHRoaXMuZ2V0Q29vcmRpbmF0ZXMoYSkpLGQuaXNJbnNpZGVQbG90KGEuY2hhcnRYLWMsYS5jaGFydFktZykmJmIoZCxcImNsaWNrXCIsYSkpKX0sc2V0RE9NRXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuY2hhcnQuY29udGFpbmVyLGQ9Yi5vd25lckRvY3VtZW50O1xuYi5vbm1vdXNlZG93bj1mdW5jdGlvbihiKXthLm9uQ29udGFpbmVyTW91c2VEb3duKGIpfTtiLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKGIpe2Eub25Db250YWluZXJNb3VzZU1vdmUoYil9O2Iub25jbGljaz1mdW5jdGlvbihiKXthLm9uQ29udGFpbmVyQ2xpY2soYil9O3RoaXMudW5iaW5kQ29udGFpbmVyTW91c2VMZWF2ZT15KGIsXCJtb3VzZWxlYXZlXCIsYS5vbkNvbnRhaW5lck1vdXNlTGVhdmUpO2MudW5iaW5kRG9jdW1lbnRNb3VzZVVwfHwoYy51bmJpbmREb2N1bWVudE1vdXNlVXA9eShkLFwibW91c2V1cFwiLGEub25Eb2N1bWVudE1vdXNlVXApKTtjLmhhc1RvdWNoJiYoeShiLFwidG91Y2hzdGFydFwiLGZ1bmN0aW9uKGIpe2Eub25Db250YWluZXJUb3VjaFN0YXJ0KGIpfSkseShiLFwidG91Y2htb3ZlXCIsZnVuY3Rpb24oYil7YS5vbkNvbnRhaW5lclRvdWNoTW92ZShiKX0pLGMudW5iaW5kRG9jdW1lbnRUb3VjaEVuZHx8KGMudW5iaW5kRG9jdW1lbnRUb3VjaEVuZD15KGQsXCJ0b3VjaGVuZFwiLFxuYS5vbkRvY3VtZW50VG91Y2hFbmQpKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2EudW5Eb2NNb3VzZU1vdmUmJmEudW5Eb2NNb3VzZU1vdmUoKTt0aGlzLnVuYmluZENvbnRhaW5lck1vdXNlTGVhdmUoKTtjLmNoYXJ0Q291bnR8fChjLnVuYmluZERvY3VtZW50TW91c2VVcCYmKGMudW5iaW5kRG9jdW1lbnRNb3VzZVVwPWMudW5iaW5kRG9jdW1lbnRNb3VzZVVwKCkpLGMudW5iaW5kRG9jdW1lbnRUb3VjaEVuZCYmKGMudW5iaW5kRG9jdW1lbnRUb3VjaEVuZD1jLnVuYmluZERvY3VtZW50VG91Y2hFbmQoKSkpO2NsZWFySW50ZXJ2YWwoYS50b29sdGlwVGltZW91dCk7dihhLGZ1bmN0aW9uKGIsZCl7YVtkXT1udWxsfSl9fX0pO00oSSxcInBhcnRzL1RvdWNoUG9pbnRlci5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuZXh0ZW5kLEc9Zi5waWNrLHo9Yy5jaGFydHMsQj1jLm5vb3A7RihjLlBvaW50ZXIucHJvdG90eXBlLFxue3BpbmNoVHJhbnNsYXRlOmZ1bmN0aW9uKGMsZixDLEIseSxoKXt0aGlzLnpvb21Ib3ImJnRoaXMucGluY2hUcmFuc2xhdGVEaXJlY3Rpb24oITAsYyxmLEMsQix5LGgpO3RoaXMuem9vbVZlcnQmJnRoaXMucGluY2hUcmFuc2xhdGVEaXJlY3Rpb24oITEsYyxmLEMsQix5LGgpfSxwaW5jaFRyYW5zbGF0ZURpcmVjdGlvbjpmdW5jdGlvbihjLGYsQyxCLHksaCxuLHEpe3ZhciBnPXRoaXMuY2hhcnQsYj1jP1wieFwiOlwieVwiLGE9Yz9cIlhcIjpcIllcIixkPVwiY2hhcnRcIithLGU9Yz9cIndpZHRoXCI6XCJoZWlnaHRcIixsPWdbXCJwbG90XCIrKGM/XCJMZWZ0XCI6XCJUb3BcIildLHYsdCxwPXF8fDEsdT1nLmludmVydGVkLGs9Zy5ib3VuZHNbYz9cImhcIjpcInZcIl0scj0xPT09Zi5sZW5ndGgseD1mWzBdW2RdLEE9Q1swXVtkXSx3PSFyJiZmWzFdW2RdLG09IXImJkNbMV1bZF07Qz1mdW5jdGlvbigpeyFyJiYyMDxNYXRoLmFicyh4LXcpJiYocD1xfHxNYXRoLmFicyhBLW0pL01hdGguYWJzKHgtdykpO3Q9KGwtQSkvcCt4O1xudj1nW1wicGxvdFwiKyhjP1wiV2lkdGhcIjpcIkhlaWdodFwiKV0vcH07QygpO2Y9dDtpZihmPGsubWluKXtmPWsubWluO3ZhciBLPSEwfWVsc2UgZit2PmsubWF4JiYoZj1rLm1heC12LEs9ITApO0s/KEEtPS44KihBLW5bYl1bMF0pLHJ8fChtLT0uOCoobS1uW2JdWzFdKSksQygpKTpuW2JdPVtBLG1dO3V8fChoW2JdPXQtbCxoW2VdPXYpO2g9dT8xL3A6cDt5W2VdPXY7eVtiXT1mO0JbdT9jP1wic2NhbGVZXCI6XCJzY2FsZVhcIjpcInNjYWxlXCIrYV09cDtCW1widHJhbnNsYXRlXCIrYV09aCpsKyhBLWgqeCl9LHBpbmNoOmZ1bmN0aW9uKGMpe3ZhciBmPXRoaXMsdD1mLmNoYXJ0LHo9Zi5waW5jaERvd24seT1jLnRvdWNoZXMsaD15Lmxlbmd0aCxuPWYubGFzdFZhbGlkVG91Y2gscT1mLmhhc1pvb20sZz1mLnNlbGVjdGlvbk1hcmtlcixiPXt9LGE9MT09PWgmJihmLmluQ2xhc3MoYy50YXJnZXQsXCJoaWdoY2hhcnRzLXRyYWNrZXJcIikmJnQucnVuVHJhY2tlckNsaWNrfHxmLnJ1bkNoYXJ0Q2xpY2spLGQ9e307XG4xPGgmJihmLmluaXRpYXRlZD0hMCk7cSYmZi5pbml0aWF0ZWQmJiFhJiZjLnByZXZlbnREZWZhdWx0KCk7W10ubWFwLmNhbGwoeSxmdW5jdGlvbihhKXtyZXR1cm4gZi5ub3JtYWxpemUoYSl9KTtcInRvdWNoc3RhcnRcIj09PWMudHlwZT8oW10uZm9yRWFjaC5jYWxsKHksZnVuY3Rpb24oYSxiKXt6W2JdPXtjaGFydFg6YS5jaGFydFgsY2hhcnRZOmEuY2hhcnRZfX0pLG4ueD1belswXS5jaGFydFgselsxXSYmelsxXS5jaGFydFhdLG4ueT1belswXS5jaGFydFkselsxXSYmelsxXS5jaGFydFldLHQuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKGEuem9vbUVuYWJsZWQpe3ZhciBiPXQuYm91bmRzW2EuaG9yaXo/XCJoXCI6XCJ2XCJdLGQ9YS5taW5QaXhlbFBhZGRpbmcsZT1hLnRvUGl4ZWxzKE1hdGgubWluKEcoYS5vcHRpb25zLm1pbixhLmRhdGFNaW4pLGEuZGF0YU1pbikpLGM9YS50b1BpeGVscyhNYXRoLm1heChHKGEub3B0aW9ucy5tYXgsYS5kYXRhTWF4KSxhLmRhdGFNYXgpKSxnPU1hdGgubWF4KGUsXG5jKTtiLm1pbj1NYXRoLm1pbihhLnBvcyxNYXRoLm1pbihlLGMpLWQpO2IubWF4PU1hdGgubWF4KGEucG9zK2EubGVuLGcrZCl9fSksZi5yZXM9ITApOmYuZm9sbG93VG91Y2hNb3ZlJiYxPT09aD90aGlzLnJ1blBvaW50QWN0aW9ucyhmLm5vcm1hbGl6ZShjKSk6ei5sZW5ndGgmJihnfHwoZi5zZWxlY3Rpb25NYXJrZXI9Zz1GKHtkZXN0cm95OkIsdG91Y2g6ITB9LHQucGxvdEJveCkpLGYucGluY2hUcmFuc2xhdGUoeix5LGIsZyxkLG4pLGYuaGFzUGluY2hlZD1xLGYuc2NhbGVHcm91cHMoYixkKSxmLnJlcyYmKGYucmVzPSExLHRoaXMucmVzZXQoITEsMCkpKX0sdG91Y2g6ZnVuY3Rpb24oZix2KXt2YXIgdD10aGlzLmNoYXJ0LHo7aWYodC5pbmRleCE9PWMuaG92ZXJDaGFydEluZGV4KXRoaXMub25Db250YWluZXJNb3VzZUxlYXZlKHtyZWxhdGVkVGFyZ2V0OiEwfSk7Yy5ob3ZlckNoYXJ0SW5kZXg9dC5pbmRleDtpZigxPT09Zi50b3VjaGVzLmxlbmd0aClpZihmPXRoaXMubm9ybWFsaXplKGYpLFxuKHo9dC5pc0luc2lkZVBsb3QoZi5jaGFydFgtdC5wbG90TGVmdCxmLmNoYXJ0WS10LnBsb3RUb3ApKSYmIXQub3Blbk1lbnUpe3YmJnRoaXMucnVuUG9pbnRBY3Rpb25zKGYpO2lmKFwidG91Y2htb3ZlXCI9PT1mLnR5cGUpe3Y9dGhpcy5waW5jaERvd247dmFyIHk9dlswXT80PD1NYXRoLnNxcnQoTWF0aC5wb3codlswXS5jaGFydFgtZi5jaGFydFgsMikrTWF0aC5wb3codlswXS5jaGFydFktZi5jaGFydFksMikpOiExfUcoeSwhMCkmJnRoaXMucGluY2goZil9ZWxzZSB2JiZ0aGlzLnJlc2V0KCk7ZWxzZSAyPT09Zi50b3VjaGVzLmxlbmd0aCYmdGhpcy5waW5jaChmKX0sb25Db250YWluZXJUb3VjaFN0YXJ0OmZ1bmN0aW9uKGMpe3RoaXMuem9vbU9wdGlvbihjKTt0aGlzLnRvdWNoKGMsITApfSxvbkNvbnRhaW5lclRvdWNoTW92ZTpmdW5jdGlvbihjKXt0aGlzLnRvdWNoKGMpfSxvbkRvY3VtZW50VG91Y2hFbmQ6ZnVuY3Rpb24oZil7eltjLmhvdmVyQ2hhcnRJbmRleF0mJnpbYy5ob3ZlckNoYXJ0SW5kZXhdLnBvaW50ZXIuZHJvcChmKX19KX0pO1xuTShJLFwicGFydHMvTVNQb2ludGVyLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5leHRlbmQsRz1mLm9iamVjdEVhY2gsej1jLmFkZEV2ZW50LEI9Yy5jaGFydHMsdD1jLmNzcyx2PWMuZG9jLEM9Yy5ub29wO2Y9Yy5Qb2ludGVyO3ZhciBIPWMucmVtb3ZlRXZlbnQseT1jLndpbixoPWMud3JhcDtpZighYy5oYXNUb3VjaCYmKHkuUG9pbnRlckV2ZW50fHx5Lk1TUG9pbnRlckV2ZW50KSl7dmFyIG49e30scT0hIXkuUG9pbnRlckV2ZW50LGc9ZnVuY3Rpb24oKXt2YXIgYT1bXTthLml0ZW09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXNbYV19O0cobixmdW5jdGlvbihiKXthLnB1c2goe3BhZ2VYOmIucGFnZVgscGFnZVk6Yi5wYWdlWSx0YXJnZXQ6Yi50YXJnZXR9KX0pO3JldHVybiBhfSxiPWZ1bmN0aW9uKGEsYixlLGwpe1widG91Y2hcIiE9PWEucG9pbnRlclR5cGUmJmEucG9pbnRlclR5cGUhPT1hLk1TUE9JTlRFUl9UWVBFX1RPVUNIfHxcbiFCW2MuaG92ZXJDaGFydEluZGV4XXx8KGwoYSksbD1CW2MuaG92ZXJDaGFydEluZGV4XS5wb2ludGVyLGxbYl0oe3R5cGU6ZSx0YXJnZXQ6YS5jdXJyZW50VGFyZ2V0LHByZXZlbnREZWZhdWx0OkMsdG91Y2hlczpnKCl9KSl9O0YoZi5wcm90b3R5cGUse29uQ29udGFpbmVyUG9pbnRlckRvd246ZnVuY3Rpb24oYSl7YihhLFwib25Db250YWluZXJUb3VjaFN0YXJ0XCIsXCJ0b3VjaHN0YXJ0XCIsZnVuY3Rpb24oYSl7blthLnBvaW50ZXJJZF09e3BhZ2VYOmEucGFnZVgscGFnZVk6YS5wYWdlWSx0YXJnZXQ6YS5jdXJyZW50VGFyZ2V0fX0pfSxvbkNvbnRhaW5lclBvaW50ZXJNb3ZlOmZ1bmN0aW9uKGEpe2IoYSxcIm9uQ29udGFpbmVyVG91Y2hNb3ZlXCIsXCJ0b3VjaG1vdmVcIixmdW5jdGlvbihhKXtuW2EucG9pbnRlcklkXT17cGFnZVg6YS5wYWdlWCxwYWdlWTphLnBhZ2VZfTtuW2EucG9pbnRlcklkXS50YXJnZXR8fChuW2EucG9pbnRlcklkXS50YXJnZXQ9YS5jdXJyZW50VGFyZ2V0KX0pfSxvbkRvY3VtZW50UG9pbnRlclVwOmZ1bmN0aW9uKGEpe2IoYSxcblwib25Eb2N1bWVudFRvdWNoRW5kXCIsXCJ0b3VjaGVuZFwiLGZ1bmN0aW9uKGEpe2RlbGV0ZSBuW2EucG9pbnRlcklkXX0pfSxiYXRjaE1TRXZlbnRzOmZ1bmN0aW9uKGEpe2EodGhpcy5jaGFydC5jb250YWluZXIscT9cInBvaW50ZXJkb3duXCI6XCJNU1BvaW50ZXJEb3duXCIsdGhpcy5vbkNvbnRhaW5lclBvaW50ZXJEb3duKTthKHRoaXMuY2hhcnQuY29udGFpbmVyLHE/XCJwb2ludGVybW92ZVwiOlwiTVNQb2ludGVyTW92ZVwiLHRoaXMub25Db250YWluZXJQb2ludGVyTW92ZSk7YSh2LHE/XCJwb2ludGVydXBcIjpcIk1TUG9pbnRlclVwXCIsdGhpcy5vbkRvY3VtZW50UG9pbnRlclVwKX19KTtoKGYucHJvdG90eXBlLFwiaW5pdFwiLGZ1bmN0aW9uKGEsYixlKXthLmNhbGwodGhpcyxiLGUpO3RoaXMuaGFzWm9vbSYmdChiLmNvbnRhaW5lcix7XCItbXMtdG91Y2gtYWN0aW9uXCI6XCJub25lXCIsXCJ0b3VjaC1hY3Rpb25cIjpcIm5vbmVcIn0pfSk7aChmLnByb3RvdHlwZSxcInNldERPTUV2ZW50c1wiLGZ1bmN0aW9uKGEpe2EuYXBwbHkodGhpcyk7XG4odGhpcy5oYXNab29tfHx0aGlzLmZvbGxvd1RvdWNoTW92ZSkmJnRoaXMuYmF0Y2hNU0V2ZW50cyh6KX0pO2goZi5wcm90b3R5cGUsXCJkZXN0cm95XCIsZnVuY3Rpb24oYSl7dGhpcy5iYXRjaE1TRXZlbnRzKEgpO2EuY2FsbCh0aGlzKX0pfX0pO00oSSxcInBhcnRzL0xlZ2VuZC5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuZGVmaW5lZCxHPWYuZGlzY2FyZEVsZW1lbnQsej1mLmlzTnVtYmVyLEI9Zi5waWNrLHQ9Zi5zZXRBbmltYXRpb24sdj1jLmFkZEV2ZW50LEM9Yy5jc3MsSD1jLmZpcmVFdmVudDtmPWMuaXNGaXJlZm94O3ZhciB5PWMubWFyZ2luTmFtZXMsaD1jLm1lcmdlLG49Yy5zdGFibGVTb3J0LHE9Yy53aW4sZz1jLndyYXA7Yy5MZWdlbmQ9ZnVuY3Rpb24oYixhKXt0aGlzLmluaXQoYixhKX07Yy5MZWdlbmQucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKGIsYSl7dGhpcy5jaGFydD1iO3RoaXMuc2V0T3B0aW9ucyhhKTtcbmEuZW5hYmxlZCYmKHRoaXMucmVuZGVyKCksdih0aGlzLmNoYXJ0LFwiZW5kUmVzaXplXCIsZnVuY3Rpb24oKXt0aGlzLmxlZ2VuZC5wb3NpdGlvbkNoZWNrYm94ZXMoKX0pLHRoaXMucHJveGltYXRlP3RoaXMudW5jaGFydHJlbmRlcj12KHRoaXMuY2hhcnQsXCJyZW5kZXJcIixmdW5jdGlvbigpe3RoaXMubGVnZW5kLnByb3hpbWF0ZVBvc2l0aW9ucygpO3RoaXMubGVnZW5kLnBvc2l0aW9uSXRlbXMoKX0pOnRoaXMudW5jaGFydHJlbmRlciYmdGhpcy51bmNoYXJ0cmVuZGVyKCkpfSxzZXRPcHRpb25zOmZ1bmN0aW9uKGIpe3ZhciBhPUIoYi5wYWRkaW5nLDgpO3RoaXMub3B0aW9ucz1iO3RoaXMuY2hhcnQuc3R5bGVkTW9kZXx8KHRoaXMuaXRlbVN0eWxlPWIuaXRlbVN0eWxlLHRoaXMuaXRlbUhpZGRlblN0eWxlPWgodGhpcy5pdGVtU3R5bGUsYi5pdGVtSGlkZGVuU3R5bGUpKTt0aGlzLml0ZW1NYXJnaW5Ub3A9Yi5pdGVtTWFyZ2luVG9wfHwwO3RoaXMuaXRlbU1hcmdpbkJvdHRvbT1iLml0ZW1NYXJnaW5Cb3R0b218fFxuMDt0aGlzLnBhZGRpbmc9YTt0aGlzLmluaXRpYWxJdGVtWT1hLTU7dGhpcy5zeW1ib2xXaWR0aD1CKGIuc3ltYm9sV2lkdGgsMTYpO3RoaXMucGFnZXM9W107dGhpcy5wcm94aW1hdGU9XCJwcm94aW1hdGVcIj09PWIubGF5b3V0JiYhdGhpcy5jaGFydC5pbnZlcnRlZH0sdXBkYXRlOmZ1bmN0aW9uKGIsYSl7dmFyIGQ9dGhpcy5jaGFydDt0aGlzLnNldE9wdGlvbnMoaCghMCx0aGlzLm9wdGlvbnMsYikpO3RoaXMuZGVzdHJveSgpO2QuaXNEaXJ0eUxlZ2VuZD1kLmlzRGlydHlCb3g9ITA7QihhLCEwKSYmZC5yZWRyYXcoKTtIKHRoaXMsXCJhZnRlclVwZGF0ZVwiKX0sY29sb3JpemVJdGVtOmZ1bmN0aW9uKGIsYSl7Yi5sZWdlbmRHcm91cFthP1wicmVtb3ZlQ2xhc3NcIjpcImFkZENsYXNzXCJdKFwiaGlnaGNoYXJ0cy1sZWdlbmQtaXRlbS1oaWRkZW5cIik7aWYoIXRoaXMuY2hhcnQuc3R5bGVkTW9kZSl7dmFyIGQ9dGhpcy5vcHRpb25zLGU9Yi5sZWdlbmRJdGVtLGM9Yi5sZWdlbmRMaW5lLGc9Yi5sZWdlbmRTeW1ib2wsXG5oPXRoaXMuaXRlbUhpZGRlblN0eWxlLmNvbG9yO2Q9YT9kLml0ZW1TdHlsZS5jb2xvcjpoO3ZhciBmPWE/Yi5jb2xvcnx8aDpoLHU9Yi5vcHRpb25zJiZiLm9wdGlvbnMubWFya2VyLGs9e2ZpbGw6Zn07ZSYmZS5jc3Moe2ZpbGw6ZCxjb2xvcjpkfSk7YyYmYy5hdHRyKHtzdHJva2U6Zn0pO2cmJih1JiZnLmlzTWFya2VyJiYoaz1iLnBvaW50QXR0cmlicygpLGF8fChrLnN0cm9rZT1rLmZpbGw9aCkpLGcuYXR0cihrKSl9SCh0aGlzLFwiYWZ0ZXJDb2xvcml6ZUl0ZW1cIix7aXRlbTpiLHZpc2libGU6YX0pfSxwb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5hbGxJdGVtcy5mb3JFYWNoKHRoaXMucG9zaXRpb25JdGVtLHRoaXMpO3RoaXMuY2hhcnQuaXNSZXNpemluZ3x8dGhpcy5wb3NpdGlvbkNoZWNrYm94ZXMoKX0scG9zaXRpb25JdGVtOmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMub3B0aW9ucyxkPWEuc3ltYm9sUGFkZGluZzthPSFhLnJ0bDt2YXIgZT1iLl9sZWdlbmRJdGVtUG9zLFxuYz1lWzBdO2U9ZVsxXTt2YXIgZz1iLmNoZWNrYm94O2lmKChiPWIubGVnZW5kR3JvdXApJiZiLmVsZW1lbnQpYltGKGIudHJhbnNsYXRlWSk/XCJhbmltYXRlXCI6XCJhdHRyXCJdKHt0cmFuc2xhdGVYOmE/Yzp0aGlzLmxlZ2VuZFdpZHRoLWMtMipkLTQsdHJhbnNsYXRlWTplfSk7ZyYmKGcueD1jLGcueT1lKX0sZGVzdHJveUl0ZW06ZnVuY3Rpb24oYil7dmFyIGE9Yi5jaGVja2JveDtbXCJsZWdlbmRJdGVtXCIsXCJsZWdlbmRMaW5lXCIsXCJsZWdlbmRTeW1ib2xcIixcImxlZ2VuZEdyb3VwXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7YlthXSYmKGJbYV09YlthXS5kZXN0cm95KCkpfSk7YSYmRyhiLmNoZWNrYm94KX0sZGVzdHJveTpmdW5jdGlvbigpe2Z1bmN0aW9uIGIoYSl7dGhpc1thXSYmKHRoaXNbYV09dGhpc1thXS5kZXN0cm95KCkpfXRoaXMuZ2V0QWxsSXRlbXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe1tcImxlZ2VuZEl0ZW1cIixcImxlZ2VuZEdyb3VwXCJdLmZvckVhY2goYixhKX0pO1wiY2xpcFJlY3QgdXAgZG93biBwYWdlciBuYXYgYm94IHRpdGxlIGdyb3VwXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goYixcbnRoaXMpO3RoaXMuZGlzcGxheT1udWxsfSxwb3NpdGlvbkNoZWNrYm94ZXM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdyb3VwJiZ0aGlzLmdyb3VwLmFsaWduQXR0cixhPXRoaXMuY2xpcEhlaWdodHx8dGhpcy5sZWdlbmRIZWlnaHQsZD10aGlzLnRpdGxlSGVpZ2h0O2lmKGIpe3ZhciBlPWIudHJhbnNsYXRlWTt0aGlzLmFsbEl0ZW1zLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGc9Yy5jaGVja2JveDtpZihnKXt2YXIgbD1lK2QrZy55Kyh0aGlzLnNjcm9sbE9mZnNldHx8MCkrMztDKGcse2xlZnQ6Yi50cmFuc2xhdGVYK2MuY2hlY2tib3hPZmZzZXQrZy54LTIwK1wicHhcIix0b3A6bCtcInB4XCIsZGlzcGxheTp0aGlzLnByb3hpbWF0ZXx8bD5lLTYmJmw8ZSthLTY/XCJcIjpcIm5vbmVcIn0pfX0sdGhpcyl9fSxyZW5kZXJUaXRsZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9ucyxhPXRoaXMucGFkZGluZyxkPWIudGl0bGUsZT0wO2QudGV4dCYmKHRoaXMudGl0bGV8fCh0aGlzLnRpdGxlPXRoaXMuY2hhcnQucmVuZGVyZXIubGFiZWwoZC50ZXh0LFxuYS0zLGEtNCxudWxsLG51bGwsbnVsbCxiLnVzZUhUTUwsbnVsbCxcImxlZ2VuZC10aXRsZVwiKS5hdHRyKHt6SW5kZXg6MX0pLHRoaXMuY2hhcnQuc3R5bGVkTW9kZXx8dGhpcy50aXRsZS5jc3MoZC5zdHlsZSksdGhpcy50aXRsZS5hZGQodGhpcy5ncm91cCkpLGQud2lkdGh8fHRoaXMudGl0bGUuY3NzKHt3aWR0aDp0aGlzLm1heExlZ2VuZFdpZHRoK1wicHhcIn0pLGI9dGhpcy50aXRsZS5nZXRCQm94KCksZT1iLmhlaWdodCx0aGlzLm9mZnNldFdpZHRoPWIud2lkdGgsdGhpcy5jb250ZW50R3JvdXAuYXR0cih7dHJhbnNsYXRlWTplfSkpO3RoaXMudGl0bGVIZWlnaHQ9ZX0sc2V0VGV4dDpmdW5jdGlvbihiKXt2YXIgYT10aGlzLm9wdGlvbnM7Yi5sZWdlbmRJdGVtLmF0dHIoe3RleHQ6YS5sYWJlbEZvcm1hdD9jLmZvcm1hdChhLmxhYmVsRm9ybWF0LGIsdGhpcy5jaGFydC50aW1lKTphLmxhYmVsRm9ybWF0dGVyLmNhbGwoYil9KX0scmVuZGVySXRlbTpmdW5jdGlvbihiKXt2YXIgYT10aGlzLmNoYXJ0LFxuZD1hLnJlbmRlcmVyLGU9dGhpcy5vcHRpb25zLGM9dGhpcy5zeW1ib2xXaWR0aCxnPWUuc3ltYm9sUGFkZGluZyxmPXRoaXMuaXRlbVN0eWxlLHA9dGhpcy5pdGVtSGlkZGVuU3R5bGUsdT1cImhvcml6b250YWxcIj09PWUubGF5b3V0P0IoZS5pdGVtRGlzdGFuY2UsMjApOjAsaz0hZS5ydGwscj1iLmxlZ2VuZEl0ZW0seD0hYi5zZXJpZXMsQT0heCYmYi5zZXJpZXMuZHJhd0xlZ2VuZFN5bWJvbD9iLnNlcmllczpiLHc9QS5vcHRpb25zO3c9dGhpcy5jcmVhdGVDaGVja2JveEZvckl0ZW0mJncmJncuc2hvd0NoZWNrYm94O3U9YytnK3UrKHc/MjA6MCk7dmFyIG09ZS51c2VIVE1MLG49Yi5vcHRpb25zLmNsYXNzTmFtZTtyfHwoYi5sZWdlbmRHcm91cD1kLmcoXCJsZWdlbmQtaXRlbVwiKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtXCIrQS50eXBlK1wiLXNlcmllcyBoaWdoY2hhcnRzLWNvbG9yLVwiK2IuY29sb3JJbmRleCsobj9cIiBcIituOlwiXCIpKyh4P1wiIGhpZ2hjaGFydHMtc2VyaWVzLVwiK2IuaW5kZXg6XG5cIlwiKSkuYXR0cih7ekluZGV4OjF9KS5hZGQodGhpcy5zY3JvbGxHcm91cCksYi5sZWdlbmRJdGVtPXI9ZC50ZXh0KFwiXCIsaz9jK2c6LWcsdGhpcy5iYXNlbGluZXx8MCxtKSxhLnN0eWxlZE1vZGV8fHIuY3NzKGgoYi52aXNpYmxlP2Y6cCkpLHIuYXR0cih7YWxpZ246az9cImxlZnRcIjpcInJpZ2h0XCIsekluZGV4OjJ9KS5hZGQoYi5sZWdlbmRHcm91cCksdGhpcy5iYXNlbGluZXx8KHRoaXMuZm9udE1ldHJpY3M9ZC5mb250TWV0cmljcyhhLnN0eWxlZE1vZGU/MTI6Zi5mb250U2l6ZSxyKSx0aGlzLmJhc2VsaW5lPXRoaXMuZm9udE1ldHJpY3MuZiszK3RoaXMuaXRlbU1hcmdpblRvcCxyLmF0dHIoXCJ5XCIsdGhpcy5iYXNlbGluZSkpLHRoaXMuc3ltYm9sSGVpZ2h0PWUuc3ltYm9sSGVpZ2h0fHx0aGlzLmZvbnRNZXRyaWNzLmYsQS5kcmF3TGVnZW5kU3ltYm9sKHRoaXMsYiksdGhpcy5zZXRJdGVtRXZlbnRzJiZ0aGlzLnNldEl0ZW1FdmVudHMoYixyLG0pKTt3JiYhYi5jaGVja2JveCYmdGhpcy5jcmVhdGVDaGVja2JveEZvckl0ZW0oYik7XG50aGlzLmNvbG9yaXplSXRlbShiLGIudmlzaWJsZSk7IWEuc3R5bGVkTW9kZSYmZi53aWR0aHx8ci5jc3Moe3dpZHRoOihlLml0ZW1XaWR0aHx8dGhpcy53aWR0aE9wdGlvbnx8YS5zcGFjaW5nQm94LndpZHRoKS11fSk7dGhpcy5zZXRUZXh0KGIpO2E9ci5nZXRCQm94KCk7Yi5pdGVtV2lkdGg9Yi5jaGVja2JveE9mZnNldD1lLml0ZW1XaWR0aHx8Yi5sZWdlbmRJdGVtV2lkdGh8fGEud2lkdGgrdTt0aGlzLm1heEl0ZW1XaWR0aD1NYXRoLm1heCh0aGlzLm1heEl0ZW1XaWR0aCxiLml0ZW1XaWR0aCk7dGhpcy50b3RhbEl0ZW1XaWR0aCs9Yi5pdGVtV2lkdGg7dGhpcy5pdGVtSGVpZ2h0PWIuaXRlbUhlaWdodD1NYXRoLnJvdW5kKGIubGVnZW5kSXRlbUhlaWdodHx8YS5oZWlnaHR8fHRoaXMuc3ltYm9sSGVpZ2h0KX0sbGF5b3V0SXRlbTpmdW5jdGlvbihiKXt2YXIgYT10aGlzLm9wdGlvbnMsZD10aGlzLnBhZGRpbmcsZT1cImhvcml6b250YWxcIj09PWEubGF5b3V0LGM9Yi5pdGVtSGVpZ2h0LFxuZz10aGlzLml0ZW1NYXJnaW5Cb3R0b20saD10aGlzLml0ZW1NYXJnaW5Ub3AsZj1lP0IoYS5pdGVtRGlzdGFuY2UsMjApOjAsdT10aGlzLm1heExlZ2VuZFdpZHRoO2E9YS5hbGlnbkNvbHVtbnMmJnRoaXMudG90YWxJdGVtV2lkdGg+dT90aGlzLm1heEl0ZW1XaWR0aDpiLml0ZW1XaWR0aDtlJiZ0aGlzLml0ZW1YLWQrYT51JiYodGhpcy5pdGVtWD1kLHRoaXMubGFzdExpbmVIZWlnaHQmJih0aGlzLml0ZW1ZKz1oK3RoaXMubGFzdExpbmVIZWlnaHQrZyksdGhpcy5sYXN0TGluZUhlaWdodD0wKTt0aGlzLmxhc3RJdGVtWT1oK3RoaXMuaXRlbVkrZzt0aGlzLmxhc3RMaW5lSGVpZ2h0PU1hdGgubWF4KGMsdGhpcy5sYXN0TGluZUhlaWdodCk7Yi5fbGVnZW5kSXRlbVBvcz1bdGhpcy5pdGVtWCx0aGlzLml0ZW1ZXTtlP3RoaXMuaXRlbVgrPWE6KHRoaXMuaXRlbVkrPWgrYytnLHRoaXMubGFzdExpbmVIZWlnaHQ9Yyk7dGhpcy5vZmZzZXRXaWR0aD10aGlzLndpZHRoT3B0aW9ufHxNYXRoLm1heCgoZT9cbnRoaXMuaXRlbVgtZC0oYi5jaGVja2JveD8wOmYpOmEpK2QsdGhpcy5vZmZzZXRXaWR0aCl9LGdldEFsbEl0ZW1zOmZ1bmN0aW9uKCl7dmFyIGI9W107dGhpcy5jaGFydC5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgZD1hJiZhLm9wdGlvbnM7YSYmQihkLnNob3dJbkxlZ2VuZCxGKGQubGlua2VkVG8pPyExOnZvaWQgMCwhMCkmJihiPWIuY29uY2F0KGEubGVnZW5kSXRlbXN8fChcInBvaW50XCI9PT1kLmxlZ2VuZFR5cGU/YS5kYXRhOmEpKSl9KTtIKHRoaXMsXCJhZnRlckdldEFsbEl0ZW1zXCIse2FsbEl0ZW1zOmJ9KTtyZXR1cm4gYn0sZ2V0QWxpZ25tZW50OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLnByb3hpbWF0ZT9iLmFsaWduLmNoYXJBdCgwKStcInR2XCI6Yi5mbG9hdGluZz9cIlwiOmIuYWxpZ24uY2hhckF0KDApK2IudmVydGljYWxBbGlnbi5jaGFyQXQoMCkrYi5sYXlvdXQuY2hhckF0KDApfSxhZGp1c3RNYXJnaW5zOmZ1bmN0aW9uKGIsYSl7dmFyIGQ9XG50aGlzLmNoYXJ0LGU9dGhpcy5vcHRpb25zLGM9dGhpcy5nZXRBbGlnbm1lbnQoKTtjJiZbLyhsdGh8Y3R8cnRoKS8sLyhydHZ8cm18cmJ2KS8sLyhyYmh8Y2J8bGJoKS8sLyhsYnZ8bG18bHR2KS9dLmZvckVhY2goZnVuY3Rpb24oZyxsKXtnLnRlc3QoYykmJiFGKGJbbF0pJiYoZFt5W2xdXT1NYXRoLm1heChkW3lbbF1dLGQubGVnZW5kWyhsKzEpJTI/XCJsZWdlbmRIZWlnaHRcIjpcImxlZ2VuZFdpZHRoXCJdK1sxLC0xLC0xLDFdW2xdKmVbbCUyP1wieFwiOlwieVwiXStCKGUubWFyZ2luLDEyKSthW2xdKyhkLnRpdGxlT2Zmc2V0W2xdfHwwKSkpfSl9LHByb3hpbWF0ZVBvc2l0aW9uczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuY2hhcnQsYT1bXSxkPVwibGVmdFwiPT09dGhpcy5vcHRpb25zLmFsaWduO3RoaXMuYWxsSXRlbXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgZz1kO2lmKGUueUF4aXMmJmUucG9pbnRzKXtlLnhBeGlzLm9wdGlvbnMucmV2ZXJzZWQmJihnPSFnKTt2YXIgaD1jLmZpbmQoZz9lLnBvaW50czpcbmUucG9pbnRzLnNsaWNlKDApLnJldmVyc2UoKSxmdW5jdGlvbihhKXtyZXR1cm4geihhLnBsb3RZKX0pO2c9dGhpcy5pdGVtTWFyZ2luVG9wK2UubGVnZW5kSXRlbS5nZXRCQm94KCkuaGVpZ2h0K3RoaXMuaXRlbU1hcmdpbkJvdHRvbTt2YXIgZj1lLnlBeGlzLnRvcC1iLnBsb3RUb3A7ZS52aXNpYmxlPyhoPWg/aC5wbG90WTplLnlBeGlzLmhlaWdodCxoKz1mLS4zKmcpOmg9ZitlLnlBeGlzLmhlaWdodDthLnB1c2goe3RhcmdldDpoLHNpemU6ZyxpdGVtOmV9KX19LHRoaXMpO2MuZGlzdHJpYnV0ZShhLGIucGxvdEhlaWdodCk7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuaXRlbS5fbGVnZW5kSXRlbVBvc1sxXT1iLnBsb3RUb3AtYi5zcGFjaW5nWzBdK2EucG9zfSl9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuY2hhcnQsYT1iLnJlbmRlcmVyLGQ9dGhpcy5ncm91cCxlLGc9dGhpcy5ib3gsZj10aGlzLm9wdGlvbnMscT10aGlzLnBhZGRpbmc7dGhpcy5pdGVtWD1xO3RoaXMuaXRlbVk9XG50aGlzLmluaXRpYWxJdGVtWTt0aGlzLmxhc3RJdGVtWT10aGlzLm9mZnNldFdpZHRoPTA7dGhpcy53aWR0aE9wdGlvbj1jLnJlbGF0aXZlTGVuZ3RoKGYud2lkdGgsYi5zcGFjaW5nQm94LndpZHRoLXEpO3ZhciBwPWIuc3BhY2luZ0JveC53aWR0aC0yKnEtZi54Oy0xPFtcInJtXCIsXCJsbVwiXS5pbmRleE9mKHRoaXMuZ2V0QWxpZ25tZW50KCkuc3Vic3RyaW5nKDAsMikpJiYocC89Mik7dGhpcy5tYXhMZWdlbmRXaWR0aD10aGlzLndpZHRoT3B0aW9ufHxwO2R8fCh0aGlzLmdyb3VwPWQ9YS5nKFwibGVnZW5kXCIpLmF0dHIoe3pJbmRleDo3fSkuYWRkKCksdGhpcy5jb250ZW50R3JvdXA9YS5nKCkuYXR0cih7ekluZGV4OjF9KS5hZGQoZCksdGhpcy5zY3JvbGxHcm91cD1hLmcoKS5hZGQodGhpcy5jb250ZW50R3JvdXApKTt0aGlzLnJlbmRlclRpdGxlKCk7cD10aGlzLmdldEFsbEl0ZW1zKCk7bihwLGZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3B0aW9ucyYmYS5vcHRpb25zLmxlZ2VuZEluZGV4fHxcbjApLShiLm9wdGlvbnMmJmIub3B0aW9ucy5sZWdlbmRJbmRleHx8MCl9KTtmLnJldmVyc2VkJiZwLnJldmVyc2UoKTt0aGlzLmFsbEl0ZW1zPXA7dGhpcy5kaXNwbGF5PWU9ISFwLmxlbmd0aDt0aGlzLml0ZW1IZWlnaHQ9dGhpcy50b3RhbEl0ZW1XaWR0aD10aGlzLm1heEl0ZW1XaWR0aD10aGlzLmxhc3RMaW5lSGVpZ2h0PTA7cC5mb3JFYWNoKHRoaXMucmVuZGVySXRlbSx0aGlzKTtwLmZvckVhY2godGhpcy5sYXlvdXRJdGVtLHRoaXMpO3A9KHRoaXMud2lkdGhPcHRpb258fHRoaXMub2Zmc2V0V2lkdGgpK3E7dmFyIHU9dGhpcy5sYXN0SXRlbVkrdGhpcy5sYXN0TGluZUhlaWdodCt0aGlzLnRpdGxlSGVpZ2h0O3U9dGhpcy5oYW5kbGVPdmVyZmxvdyh1KTt1Kz1xO2d8fCh0aGlzLmJveD1nPWEucmVjdCgpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1sZWdlbmQtYm94XCIpLmF0dHIoe3I6Zi5ib3JkZXJSYWRpdXN9KS5hZGQoZCksZy5pc05ldz0hMCk7Yi5zdHlsZWRNb2RlfHxnLmF0dHIoe3N0cm9rZTpmLmJvcmRlckNvbG9yLFxuXCJzdHJva2Utd2lkdGhcIjpmLmJvcmRlcldpZHRofHwwLGZpbGw6Zi5iYWNrZ3JvdW5kQ29sb3J8fFwibm9uZVwifSkuc2hhZG93KGYuc2hhZG93KTswPHAmJjA8dSYmKGdbZy5pc05ldz9cImF0dHJcIjpcImFuaW1hdGVcIl0oZy5jcmlzcC5jYWxsKHt9LHt4OjAseTowLHdpZHRoOnAsaGVpZ2h0OnV9LGcuc3Ryb2tlV2lkdGgoKSkpLGcuaXNOZXc9ITEpO2dbZT9cInNob3dcIjpcImhpZGVcIl0oKTtiLnN0eWxlZE1vZGUmJlwibm9uZVwiPT09ZC5nZXRTdHlsZShcImRpc3BsYXlcIikmJihwPXU9MCk7dGhpcy5sZWdlbmRXaWR0aD1wO3RoaXMubGVnZW5kSGVpZ2h0PXU7ZSYmKGE9Yi5zcGFjaW5nQm94LGc9YS55LC8obHRofGN0fHJ0aCkvLnRlc3QodGhpcy5nZXRBbGlnbm1lbnQoKSkmJjA8Yi50aXRsZU9mZnNldFswXT9nKz1iLnRpdGxlT2Zmc2V0WzBdOi8obGJofGNifHJiaCkvLnRlc3QodGhpcy5nZXRBbGlnbm1lbnQoKSkmJjA8Yi50aXRsZU9mZnNldFsyXSYmKGctPWIudGl0bGVPZmZzZXRbMl0pLGchPT1cbmEueSYmKGE9aChhLHt5Omd9KSksZC5hbGlnbihoKGYse3dpZHRoOnAsaGVpZ2h0OnUsdmVydGljYWxBbGlnbjp0aGlzLnByb3hpbWF0ZT9cInRvcFwiOmYudmVydGljYWxBbGlnbn0pLCEwLGEpKTt0aGlzLnByb3hpbWF0ZXx8dGhpcy5wb3NpdGlvbkl0ZW1zKCk7SCh0aGlzLFwiYWZ0ZXJSZW5kZXJcIil9LGhhbmRsZU92ZXJmbG93OmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMsZD10aGlzLmNoYXJ0LGU9ZC5yZW5kZXJlcixjPXRoaXMub3B0aW9ucyxnPWMueSxoPXRoaXMucGFkZGluZztnPWQuc3BhY2luZ0JveC5oZWlnaHQrKFwidG9wXCI9PT1jLnZlcnRpY2FsQWxpZ24/LWc6ZyktaDt2YXIgZj1jLm1heEhlaWdodCx1LGs9dGhpcy5jbGlwUmVjdCxyPWMubmF2aWdhdGlvbix4PUIoci5hbmltYXRpb24sITApLEE9ci5hcnJvd1NpemV8fDEyLHc9dGhpcy5uYXYsbT10aGlzLnBhZ2VzLG4sSj10aGlzLmFsbEl0ZW1zLHE9ZnVuY3Rpb24oYil7XCJudW1iZXJcIj09PXR5cGVvZiBiP2suYXR0cih7aGVpZ2h0OmJ9KTpcbmsmJihhLmNsaXBSZWN0PWsuZGVzdHJveSgpLGEuY29udGVudEdyb3VwLmNsaXAoKSk7YS5jb250ZW50R3JvdXAuZGl2JiYoYS5jb250ZW50R3JvdXAuZGl2LnN0eWxlLmNsaXA9Yj9cInJlY3QoXCIraCtcInB4LDk5OTlweCxcIisoaCtiKStcInB4LDApXCI6XCJhdXRvXCIpfSx2PWZ1bmN0aW9uKGIpe2FbYl09ZS5jaXJjbGUoMCwwLDEuMypBKS50cmFuc2xhdGUoQS8yLEEvMikuYWRkKHcpO2Quc3R5bGVkTW9kZXx8YVtiXS5hdHRyKFwiZmlsbFwiLFwicmdiYSgwLDAsMCwwLjAwMDEpXCIpO3JldHVybiBhW2JdfTtcImhvcml6b250YWxcIiE9PWMubGF5b3V0fHxcIm1pZGRsZVwiPT09Yy52ZXJ0aWNhbEFsaWdufHxjLmZsb2F0aW5nfHwoZy89Mik7ZiYmKGc9TWF0aC5taW4oZyxmKSk7bS5sZW5ndGg9MDtiPmcmJiExIT09ci5lbmFibGVkPyh0aGlzLmNsaXBIZWlnaHQ9dT1NYXRoLm1heChnLTIwLXRoaXMudGl0bGVIZWlnaHQtaCwwKSx0aGlzLmN1cnJlbnRQYWdlPUIodGhpcy5jdXJyZW50UGFnZSwxKSx0aGlzLmZ1bGxIZWlnaHQ9XG5iLEouZm9yRWFjaChmdW5jdGlvbihhLGIpe3ZhciBkPWEuX2xlZ2VuZEl0ZW1Qb3NbMV0sZT1NYXRoLnJvdW5kKGEubGVnZW5kSXRlbS5nZXRCQm94KCkuaGVpZ2h0KSxjPW0ubGVuZ3RoO2lmKCFjfHxkLW1bYy0xXT51JiYobnx8ZCkhPT1tW2MtMV0pbS5wdXNoKG58fGQpLGMrKzthLnBhZ2VJeD1jLTE7biYmKEpbYi0xXS5wYWdlSXg9Yy0xKTtiPT09Si5sZW5ndGgtMSYmZCtlLW1bYy0xXT51JiZkIT09biYmKG0ucHVzaChkKSxhLnBhZ2VJeD1jKTtkIT09biYmKG49ZCl9KSxrfHwoaz1hLmNsaXBSZWN0PWUuY2xpcFJlY3QoMCxoLDk5OTksMCksYS5jb250ZW50R3JvdXAuY2xpcChrKSkscSh1KSx3fHwodGhpcy5uYXY9dz1lLmcoKS5hdHRyKHt6SW5kZXg6MX0pLmFkZCh0aGlzLmdyb3VwKSx0aGlzLnVwPWUuc3ltYm9sKFwidHJpYW5nbGVcIiwwLDAsQSxBKS5hZGQodyksdihcInVwVHJhY2tlclwiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXthLnNjcm9sbCgtMSx4KX0pLHRoaXMucGFnZXI9XG5lLnRleHQoXCJcIiwxNSwxMCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWxlZ2VuZC1uYXZpZ2F0aW9uXCIpLGQuc3R5bGVkTW9kZXx8dGhpcy5wYWdlci5jc3Moci5zdHlsZSksdGhpcy5wYWdlci5hZGQodyksdGhpcy5kb3duPWUuc3ltYm9sKFwidHJpYW5nbGUtZG93blwiLDAsMCxBLEEpLmFkZCh3KSx2KFwiZG93blRyYWNrZXJcIikub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7YS5zY3JvbGwoMSx4KX0pKSxhLnNjcm9sbCgwKSxiPWcpOncmJihxKCksdGhpcy5uYXY9dy5kZXN0cm95KCksdGhpcy5zY3JvbGxHcm91cC5hdHRyKHt0cmFuc2xhdGVZOjF9KSx0aGlzLmNsaXBIZWlnaHQ9MCk7cmV0dXJuIGJ9LHNjcm9sbDpmdW5jdGlvbihiLGEpe3ZhciBkPXRoaXMucGFnZXMsZT1kLmxlbmd0aCxjPXRoaXMuY3VycmVudFBhZ2UrYjtiPXRoaXMuY2xpcEhlaWdodDt2YXIgZz10aGlzLm9wdGlvbnMubmF2aWdhdGlvbixoPXRoaXMucGFnZXIsZj10aGlzLnBhZGRpbmc7Yz5lJiYoYz1lKTswPGMmJih2b2lkIDAhPT1cbmEmJnQoYSx0aGlzLmNoYXJ0KSx0aGlzLm5hdi5hdHRyKHt0cmFuc2xhdGVYOmYsdHJhbnNsYXRlWTpiK3RoaXMucGFkZGluZys3K3RoaXMudGl0bGVIZWlnaHQsdmlzaWJpbGl0eTpcInZpc2libGVcIn0pLFt0aGlzLnVwLHRoaXMudXBUcmFja2VyXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuYXR0cih7XCJjbGFzc1wiOjE9PT1jP1wiaGlnaGNoYXJ0cy1sZWdlbmQtbmF2LWluYWN0aXZlXCI6XCJoaWdoY2hhcnRzLWxlZ2VuZC1uYXYtYWN0aXZlXCJ9KX0pLGguYXR0cih7dGV4dDpjK1wiL1wiK2V9KSxbdGhpcy5kb3duLHRoaXMuZG93blRyYWNrZXJdLmZvckVhY2goZnVuY3Rpb24oYSl7YS5hdHRyKHt4OjE4K3RoaXMucGFnZXIuZ2V0QkJveCgpLndpZHRoLFwiY2xhc3NcIjpjPT09ZT9cImhpZ2hjaGFydHMtbGVnZW5kLW5hdi1pbmFjdGl2ZVwiOlwiaGlnaGNoYXJ0cy1sZWdlbmQtbmF2LWFjdGl2ZVwifSl9LHRoaXMpLHRoaXMuY2hhcnQuc3R5bGVkTW9kZXx8KHRoaXMudXAuYXR0cih7ZmlsbDoxPT09Yz9nLmluYWN0aXZlQ29sb3I6XG5nLmFjdGl2ZUNvbG9yfSksdGhpcy51cFRyYWNrZXIuY3NzKHtjdXJzb3I6MT09PWM/XCJkZWZhdWx0XCI6XCJwb2ludGVyXCJ9KSx0aGlzLmRvd24uYXR0cih7ZmlsbDpjPT09ZT9nLmluYWN0aXZlQ29sb3I6Zy5hY3RpdmVDb2xvcn0pLHRoaXMuZG93blRyYWNrZXIuY3NzKHtjdXJzb3I6Yz09PWU/XCJkZWZhdWx0XCI6XCJwb2ludGVyXCJ9KSksdGhpcy5zY3JvbGxPZmZzZXQ9LWRbYy0xXSt0aGlzLmluaXRpYWxJdGVtWSx0aGlzLnNjcm9sbEdyb3VwLmFuaW1hdGUoe3RyYW5zbGF0ZVk6dGhpcy5zY3JvbGxPZmZzZXR9KSx0aGlzLmN1cnJlbnRQYWdlPWMsdGhpcy5wb3NpdGlvbkNoZWNrYm94ZXMoKSl9fTtjLkxlZ2VuZFN5bWJvbE1peGluPXtkcmF3UmVjdGFuZ2xlOmZ1bmN0aW9uKGIsYSl7dmFyIGQ9Yi5zeW1ib2xIZWlnaHQsZT1iLm9wdGlvbnMuc3F1YXJlU3ltYm9sO2EubGVnZW5kU3ltYm9sPXRoaXMuY2hhcnQucmVuZGVyZXIucmVjdChlPyhiLnN5bWJvbFdpZHRoLWQpLzI6MCxiLmJhc2VsaW5lLVxuZCsxLGU/ZDpiLnN5bWJvbFdpZHRoLGQsQihiLm9wdGlvbnMuc3ltYm9sUmFkaXVzLGQvMikpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1wb2ludFwiKS5hdHRyKHt6SW5kZXg6M30pLmFkZChhLmxlZ2VuZEdyb3VwKX0sZHJhd0xpbmVNYXJrZXI6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5vcHRpb25zLGQ9YS5tYXJrZXIsZT1iLnN5bWJvbFdpZHRoLGM9Yi5zeW1ib2xIZWlnaHQsZz1jLzIsZj10aGlzLmNoYXJ0LnJlbmRlcmVyLHA9dGhpcy5sZWdlbmRHcm91cDtiPWIuYmFzZWxpbmUtTWF0aC5yb3VuZCguMypiLmZvbnRNZXRyaWNzLmIpO3ZhciB1PXt9O3RoaXMuY2hhcnQuc3R5bGVkTW9kZXx8KHU9e1wic3Ryb2tlLXdpZHRoXCI6YS5saW5lV2lkdGh8fDB9LGEuZGFzaFN0eWxlJiYodS5kYXNoc3R5bGU9YS5kYXNoU3R5bGUpKTt0aGlzLmxlZ2VuZExpbmU9Zi5wYXRoKFtcIk1cIiwwLGIsXCJMXCIsZSxiXSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWdyYXBoXCIpLmF0dHIodSkuYWRkKHApO2QmJiExIT09XG5kLmVuYWJsZWQmJmUmJihhPU1hdGgubWluKEIoZC5yYWRpdXMsZyksZyksMD09PXRoaXMuc3ltYm9sLmluZGV4T2YoXCJ1cmxcIikmJihkPWgoZCx7d2lkdGg6YyxoZWlnaHQ6Y30pLGE9MCksdGhpcy5sZWdlbmRTeW1ib2w9ZD1mLnN5bWJvbCh0aGlzLnN5bWJvbCxlLzItYSxiLWEsMiphLDIqYSxkKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtcG9pbnRcIikuYWRkKHApLGQuaXNNYXJrZXI9ITApfX07KC9UcmlkZW50XFwvN1xcLjAvLnRlc3QocS5uYXZpZ2F0b3ImJnEubmF2aWdhdG9yLnVzZXJBZ2VudCl8fGYpJiZnKGMuTGVnZW5kLnByb3RvdHlwZSxcInBvc2l0aW9uSXRlbVwiLGZ1bmN0aW9uKGIsYSl7dmFyIGQ9dGhpcyxlPWZ1bmN0aW9uKCl7YS5fbGVnZW5kSXRlbVBvcyYmYi5jYWxsKGQsYSl9O2UoKTtkLmJ1YmJsZUxlZ2VuZHx8c2V0VGltZW91dChlKX0pfSk7TShJLFwicGFydHMvQ2hhcnQuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxcbmYpe3ZhciBGPWYuYXR0cixHPWYuZGVmaW5lZCx6PWYuZGlzY2FyZEVsZW1lbnQsQj1mLmVyYXNlLHQ9Zi5leHRlbmQsdj1mLmlzQXJyYXksQz1mLmlzTnVtYmVyLEg9Zi5pc09iamVjdCx5PWYuaXNTdHJpbmcsaD1mLm9iamVjdEVhY2gsbj1mLnBpY2sscT1mLnBJbnQsZz1mLnNldEFuaW1hdGlvbixiPWYuc3BsYXQsYT1mLnN5bmNUaW1lb3V0LGQ9Yy5hZGRFdmVudCxlPWMuYW5pbWF0ZSxsPWMuYW5pbU9iamVjdCxMPWMuZG9jLEU9Yy5BeGlzLHA9Yy5jcmVhdGVFbGVtZW50LHU9Yy5kZWZhdWx0T3B0aW9ucyxrPWMuY2hhcnRzLHI9Yy5jc3MseD1jLmZpbmQsQT1jLmZpcmVFdmVudCx3PWMuTGVnZW5kLG09Yy5tYXJnaW5OYW1lcyxLPWMubWVyZ2UsSj1jLlBvaW50ZXIsVT1jLnJlbW92ZUV2ZW50LFM9Yy5zZXJpZXNUeXBlcyxRPWMud2luLE89Yy5DaGFydD1mdW5jdGlvbigpe3RoaXMuZ2V0QXJncy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2MuY2hhcnQ9ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBuZXcgTyhhLFxuYixkKX07dChPLnByb3RvdHlwZSx7Y2FsbGJhY2tzOltdLGdldEFyZ3M6ZnVuY3Rpb24oKXt2YXIgYT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYoeShhWzBdKXx8YVswXS5ub2RlTmFtZSl0aGlzLnJlbmRlclRvPWEuc2hpZnQoKTt0aGlzLmluaXQoYVswXSxhWzFdKX0saW5pdDpmdW5jdGlvbihhLGIpe3ZhciBlLGc9YS5zZXJpZXMsbT1hLnBsb3RPcHRpb25zfHx7fTtBKHRoaXMsXCJpbml0XCIse2FyZ3M6YXJndW1lbnRzfSxmdW5jdGlvbigpe2Euc2VyaWVzPW51bGw7ZT1LKHUsYSk7aChlLnBsb3RPcHRpb25zLGZ1bmN0aW9uKGEsYil7SChhKSYmKGEudG9vbHRpcD1tW2JdJiZLKG1bYl0udG9vbHRpcCl8fHZvaWQgMCl9KTtlLnRvb2x0aXAudXNlck9wdGlvbnM9YS5jaGFydCYmYS5jaGFydC5mb3JFeHBvcnQmJmEudG9vbHRpcC51c2VyT3B0aW9uc3x8YS50b29sdGlwO2Uuc2VyaWVzPWEuc2VyaWVzPWc7dGhpcy51c2VyT3B0aW9ucz1hO3ZhciByPWUuY2hhcnQsbD1yLmV2ZW50cztcbnRoaXMubWFyZ2luPVtdO3RoaXMuc3BhY2luZz1bXTt0aGlzLmJvdW5kcz17aDp7fSx2Ont9fTt0aGlzLmxhYmVsQ29sbGVjdG9ycz1bXTt0aGlzLmNhbGxiYWNrPWI7dGhpcy5pc1Jlc2l6aW5nPTA7dGhpcy5vcHRpb25zPWU7dGhpcy5heGVzPVtdO3RoaXMuc2VyaWVzPVtdO3RoaXMudGltZT1hLnRpbWUmJk9iamVjdC5rZXlzKGEudGltZSkubGVuZ3RoP25ldyBjLlRpbWUoYS50aW1lKTpjLnRpbWU7dGhpcy5zdHlsZWRNb2RlPXIuc3R5bGVkTW9kZTt0aGlzLmhhc0NhcnRlc2lhblNlcmllcz1yLnNob3dBeGVzO3ZhciBmPXRoaXM7Zi5pbmRleD1rLmxlbmd0aDtrLnB1c2goZik7Yy5jaGFydENvdW50Kys7bCYmaChsLGZ1bmN0aW9uKGEsYil7Yy5pc0Z1bmN0aW9uKGEpJiZkKGYsYixhKX0pO2YueEF4aXM9W107Zi55QXhpcz1bXTtmLnBvaW50Q291bnQ9Zi5jb2xvckNvdW50ZXI9Zi5zeW1ib2xDb3VudGVyPTA7QShmLFwiYWZ0ZXJJbml0XCIpO2YuZmlyc3RSZW5kZXIoKX0pfSxpbml0U2VyaWVzOmZ1bmN0aW9uKGEpe3ZhciBiPVxudGhpcy5vcHRpb25zLmNoYXJ0O2I9YS50eXBlfHxiLnR5cGV8fGIuZGVmYXVsdFNlcmllc1R5cGU7dmFyIGQ9U1tiXTtkfHxjLmVycm9yKDE3LCEwLHRoaXMse21pc3NpbmdNb2R1bGVGb3I6Yn0pO2I9bmV3IGQ7Yi5pbml0KHRoaXMsYSk7cmV0dXJuIGJ9LG9yZGVyU2VyaWVzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc2VyaWVzO2ZvcihhPWF8fDA7YTxiLmxlbmd0aDthKyspYlthXSYmKGJbYV0uaW5kZXg9YSxiW2FdLm5hbWU9YlthXS5nZXROYW1lKCkpfSxpc0luc2lkZVBsb3Q6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWQ/YjphO2E9ZD9hOmI7cmV0dXJuIDA8PWUmJmU8PXRoaXMucGxvdFdpZHRoJiYwPD1hJiZhPD10aGlzLnBsb3RIZWlnaHR9LHJlZHJhdzpmdW5jdGlvbihhKXtBKHRoaXMsXCJiZWZvcmVSZWRyYXdcIik7dmFyIGI9dGhpcy5heGVzLGQ9dGhpcy5zZXJpZXMsZT10aGlzLnBvaW50ZXIsYz10aGlzLmxlZ2VuZCxrPXRoaXMudXNlck9wdGlvbnMubGVnZW5kLG09dGhpcy5pc0RpcnR5TGVnZW5kLFxucj10aGlzLmhhc0NhcnRlc2lhblNlcmllcyxoPXRoaXMuaXNEaXJ0eUJveCxsPXRoaXMucmVuZGVyZXIsZj1sLmlzSGlkZGVuKCkseD1bXTt0aGlzLnNldFJlc3BvbnNpdmUmJnRoaXMuc2V0UmVzcG9uc2l2ZSghMSk7ZyhhLHRoaXMpO2YmJnRoaXMudGVtcG9yYXJ5RGlzcGxheSgpO3RoaXMubGF5T3V0VGl0bGVzKCk7Zm9yKGE9ZC5sZW5ndGg7YS0tOyl7dmFyIHc9ZFthXTtpZih3Lm9wdGlvbnMuc3RhY2tpbmcpe3ZhciBwPSEwO2lmKHcuaXNEaXJ0eSl7dmFyIHU9ITA7YnJlYWt9fX1pZih1KWZvcihhPWQubGVuZ3RoO2EtLTspdz1kW2FdLHcub3B0aW9ucy5zdGFja2luZyYmKHcuaXNEaXJ0eT0hMCk7ZC5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuaXNEaXJ0eSYmKFwicG9pbnRcIj09PWEub3B0aW9ucy5sZWdlbmRUeXBlPyhhLnVwZGF0ZVRvdGFscyYmYS51cGRhdGVUb3RhbHMoKSxtPSEwKTprJiYoay5sYWJlbEZvcm1hdHRlcnx8ay5sYWJlbEZvcm1hdCkmJihtPSEwKSk7YS5pc0RpcnR5RGF0YSYmXG5BKGEsXCJ1cGRhdGVkRGF0YVwiKX0pO20mJmMmJmMub3B0aW9ucy5lbmFibGVkJiYoYy5yZW5kZXIoKSx0aGlzLmlzRGlydHlMZWdlbmQ9ITEpO3AmJnRoaXMuZ2V0U3RhY2tzKCk7ciYmYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EudXBkYXRlTmFtZXMoKTthLnNldFNjYWxlKCl9KTt0aGlzLmdldE1hcmdpbnMoKTtyJiYoYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuaXNEaXJ0eSYmKGg9ITApfSksYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEubWluK1wiLFwiK2EubWF4O2EuZXh0S2V5IT09YiYmKGEuZXh0S2V5PWIseC5wdXNoKGZ1bmN0aW9uKCl7QShhLFwiYWZ0ZXJTZXRFeHRyZW1lc1wiLHQoYS5ldmVudEFyZ3MsYS5nZXRFeHRyZW1lcygpKSk7ZGVsZXRlIGEuZXZlbnRBcmdzfSkpOyhofHxwKSYmYS5yZWRyYXcoKX0pKTtoJiZ0aGlzLmRyYXdDaGFydEJveCgpO0EodGhpcyxcInByZWRyYXdcIik7ZC5mb3JFYWNoKGZ1bmN0aW9uKGEpeyhofHxhLmlzRGlydHkpJiZhLnZpc2libGUmJmEucmVkcmF3KCk7XG5hLmlzRGlydHlEYXRhPSExfSk7ZSYmZS5yZXNldCghMCk7bC5kcmF3KCk7QSh0aGlzLFwicmVkcmF3XCIpO0EodGhpcyxcInJlbmRlclwiKTtmJiZ0aGlzLnRlbXBvcmFyeURpc3BsYXkoITApO3guZm9yRWFjaChmdW5jdGlvbihhKXthLmNhbGwoKX0pfSxnZXQ6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtyZXR1cm4gYi5pZD09PWF8fGIub3B0aW9ucyYmYi5vcHRpb25zLmlkPT09YX12YXIgZD10aGlzLnNlcmllcyxlO3ZhciBjPXgodGhpcy5heGVzLGIpfHx4KHRoaXMuc2VyaWVzLGIpO2ZvcihlPTA7IWMmJmU8ZC5sZW5ndGg7ZSsrKWM9eChkW2VdLnBvaW50c3x8W10sYik7cmV0dXJuIGN9LGdldEF4ZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGQ9dGhpcy5vcHRpb25zLGU9ZC54QXhpcz1iKGQueEF4aXN8fHt9KTtkPWQueUF4aXM9YihkLnlBeGlzfHx7fSk7QSh0aGlzLFwiZ2V0QXhlc1wiKTtlLmZvckVhY2goZnVuY3Rpb24oYSxiKXthLmluZGV4PWI7YS5pc1g9ITB9KTtkLmZvckVhY2goZnVuY3Rpb24oYSxcbmIpe2EuaW5kZXg9Yn0pO2UuY29uY2F0KGQpLmZvckVhY2goZnVuY3Rpb24oYil7bmV3IEUoYSxiKX0pO0EodGhpcyxcImFmdGVyR2V0QXhlc1wiKX0sZ2V0U2VsZWN0ZWRQb2ludHM6ZnVuY3Rpb24oKXt2YXIgYT1bXTt0aGlzLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe2E9YS5jb25jYXQoKGJbYi5oYXNHcm91cGVkRGF0YT9cInBvaW50c1wiOlwiZGF0YVwiXXx8W10pLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gbihhLnNlbGVjdGVkU3RhZ2luZyxhLnNlbGVjdGVkKX0pKX0pO3JldHVybiBhfSxnZXRTZWxlY3RlZFNlcmllczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcmllcy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuc2VsZWN0ZWR9KX0sc2V0VGl0bGU6ZnVuY3Rpb24oYSxiLGQpe3RoaXMuYXBwbHlEZXNjcmlwdGlvbihcInRpdGxlXCIsYSk7dGhpcy5hcHBseURlc2NyaXB0aW9uKFwic3VidGl0bGVcIixiKTt0aGlzLmFwcGx5RGVzY3JpcHRpb24oXCJjYXB0aW9uXCIsdm9pZCAwKTtcbnRoaXMubGF5T3V0VGl0bGVzKGQpfSxhcHBseURlc2NyaXB0aW9uOmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcyxlPVwidGl0bGVcIj09PWE/e2NvbG9yOlwiIzMzMzMzM1wiLGZvbnRTaXplOnRoaXMub3B0aW9ucy5pc1N0b2NrP1wiMTZweFwiOlwiMThweFwifTp7Y29sb3I6XCIjNjY2NjY2XCJ9O2U9dGhpcy5vcHRpb25zW2FdPUsoIXRoaXMuc3R5bGVkTW9kZSYme3N0eWxlOmV9LHRoaXMub3B0aW9uc1thXSxiKTt2YXIgYz10aGlzW2FdO2MmJmImJih0aGlzW2FdPWM9Yy5kZXN0cm95KCkpO2UmJiFjJiYoYz10aGlzLnJlbmRlcmVyLnRleHQoZS50ZXh0LDAsMCxlLnVzZUhUTUwpLmF0dHIoe2FsaWduOmUuYWxpZ24sXCJjbGFzc1wiOlwiaGlnaGNoYXJ0cy1cIithLHpJbmRleDplLnpJbmRleHx8NH0pLmFkZCgpLGMudXBkYXRlPWZ1bmN0aW9uKGIpe2Rbe3RpdGxlOlwic2V0VGl0bGVcIixzdWJ0aXRsZTpcInNldFN1YnRpdGxlXCIsY2FwdGlvbjpcInNldENhcHRpb25cIn1bYV1dKGIpfSx0aGlzLnN0eWxlZE1vZGV8fFxuYy5jc3MoZS5zdHlsZSksdGhpc1thXT1jKX0sbGF5T3V0VGl0bGVzOmZ1bmN0aW9uKGEpe3ZhciBiPVswLDAsMF0sZD10aGlzLnJlbmRlcmVyLGU9dGhpcy5zcGFjaW5nQm94O1tcInRpdGxlXCIsXCJzdWJ0aXRsZVwiLFwiY2FwdGlvblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjPXRoaXNbYV0saz10aGlzLm9wdGlvbnNbYV0sZz1rLnZlcnRpY2FsQWxpZ258fFwidG9wXCI7YT1cInRpdGxlXCI9PT1hPy0zOlwidG9wXCI9PT1nP2JbMF0rMjowO2lmKGMpe2lmKCF0aGlzLnN0eWxlZE1vZGUpdmFyIG09ay5zdHlsZS5mb250U2l6ZTttPWQuZm9udE1ldHJpY3MobSxjKS5iO2MuY3NzKHt3aWR0aDooay53aWR0aHx8ZS53aWR0aCsoay53aWR0aEFkanVzdHx8MCkpK1wicHhcIn0pO3ZhciByPU1hdGgucm91bmQoYy5nZXRCQm94KGsudXNlSFRNTCkuaGVpZ2h0KTtjLmFsaWduKHQoe3k6XCJib3R0b21cIj09PWc/bTphK20saGVpZ2h0OnJ9LGspLCExLFwic3BhY2luZ0JveFwiKTtrLmZsb2F0aW5nfHwoXCJ0b3BcIj09PVxuZz9iWzBdPU1hdGguY2VpbChiWzBdK3IpOlwiYm90dG9tXCI9PT1nJiYoYlsyXT1NYXRoLmNlaWwoYlsyXStyKSkpfX0sdGhpcyk7YlswXSYmXCJ0b3BcIj09PSh0aGlzLm9wdGlvbnMudGl0bGUudmVydGljYWxBbGlnbnx8XCJ0b3BcIikmJihiWzBdKz10aGlzLm9wdGlvbnMudGl0bGUubWFyZ2luKTtiWzJdJiZcImJvdHRvbVwiPT09dGhpcy5vcHRpb25zLmNhcHRpb24udmVydGljYWxBbGlnbiYmKGJbMl0rPXRoaXMub3B0aW9ucy5jYXB0aW9uLm1hcmdpbik7dmFyIGM9IXRoaXMudGl0bGVPZmZzZXR8fHRoaXMudGl0bGVPZmZzZXQuam9pbihcIixcIikhPT1iLmpvaW4oXCIsXCIpO3RoaXMudGl0bGVPZmZzZXQ9YjtBKHRoaXMsXCJhZnRlckxheU91dFRpdGxlc1wiKTshdGhpcy5pc0RpcnR5Qm94JiZjJiYodGhpcy5pc0RpcnR5Qm94PXRoaXMuaXNEaXJ0eUxlZ2VuZD1jLHRoaXMuaGFzUmVuZGVyZWQmJm4oYSwhMCkmJnRoaXMuaXNEaXJ0eUJveCYmdGhpcy5yZWRyYXcoKSl9LGdldENoYXJ0U2l6ZTpmdW5jdGlvbigpe3ZhciBhPVxudGhpcy5vcHRpb25zLmNoYXJ0LGI9YS53aWR0aDthPWEuaGVpZ2h0O3ZhciBkPXRoaXMucmVuZGVyVG87RyhiKXx8KHRoaXMuY29udGFpbmVyV2lkdGg9Yy5nZXRTdHlsZShkLFwid2lkdGhcIikpO0coYSl8fCh0aGlzLmNvbnRhaW5lckhlaWdodD1jLmdldFN0eWxlKGQsXCJoZWlnaHRcIikpO3RoaXMuY2hhcnRXaWR0aD1NYXRoLm1heCgwLGJ8fHRoaXMuY29udGFpbmVyV2lkdGh8fDYwMCk7dGhpcy5jaGFydEhlaWdodD1NYXRoLm1heCgwLGMucmVsYXRpdmVMZW5ndGgoYSx0aGlzLmNoYXJ0V2lkdGgpfHwoMTx0aGlzLmNvbnRhaW5lckhlaWdodD90aGlzLmNvbnRhaW5lckhlaWdodDo0MDApKX0sdGVtcG9yYXJ5RGlzcGxheTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnJlbmRlclRvO2lmKGEpZm9yKDtiJiZiLnN0eWxlOyliLmhjT3JpZ1N0eWxlJiYoYy5jc3MoYixiLmhjT3JpZ1N0eWxlKSxkZWxldGUgYi5oY09yaWdTdHlsZSksYi5oY09yaWdEZXRhY2hlZCYmKEwuYm9keS5yZW1vdmVDaGlsZChiKSxcbmIuaGNPcmlnRGV0YWNoZWQ9ITEpLGI9Yi5wYXJlbnROb2RlO2Vsc2UgZm9yKDtiJiZiLnN0eWxlOyl7TC5ib2R5LmNvbnRhaW5zKGIpfHxiLnBhcmVudE5vZGV8fChiLmhjT3JpZ0RldGFjaGVkPSEwLEwuYm9keS5hcHBlbmRDaGlsZChiKSk7aWYoXCJub25lXCI9PT1jLmdldFN0eWxlKGIsXCJkaXNwbGF5XCIsITEpfHxiLmhjT3JpY0RldGFjaGVkKWIuaGNPcmlnU3R5bGU9e2Rpc3BsYXk6Yi5zdHlsZS5kaXNwbGF5LGhlaWdodDpiLnN0eWxlLmhlaWdodCxvdmVyZmxvdzpiLnN0eWxlLm92ZXJmbG93fSxhPXtkaXNwbGF5OlwiYmxvY2tcIixvdmVyZmxvdzpcImhpZGRlblwifSxiIT09dGhpcy5yZW5kZXJUbyYmKGEuaGVpZ2h0PTApLGMuY3NzKGIsYSksYi5vZmZzZXRXaWR0aHx8Yi5zdHlsZS5zZXRQcm9wZXJ0eShcImRpc3BsYXlcIixcImJsb2NrXCIsXCJpbXBvcnRhbnRcIik7Yj1iLnBhcmVudE5vZGU7aWYoYj09PUwuYm9keSlicmVha319LHNldENsYXNzTmFtZTpmdW5jdGlvbihhKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9XG5cImhpZ2hjaGFydHMtY29udGFpbmVyIFwiKyhhfHxcIlwiKX0sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLGI9YS5jaGFydDt2YXIgZD10aGlzLnJlbmRlclRvO3ZhciBlPWMudW5pcXVlS2V5KCksZyxtO2R8fCh0aGlzLnJlbmRlclRvPWQ9Yi5yZW5kZXJUbyk7eShkKSYmKHRoaXMucmVuZGVyVG89ZD1MLmdldEVsZW1lbnRCeUlkKGQpKTtkfHxjLmVycm9yKDEzLCEwLHRoaXMpO3ZhciBoPXEoRihkLFwiZGF0YS1oaWdoY2hhcnRzLWNoYXJ0XCIpKTtDKGgpJiZrW2hdJiZrW2hdLmhhc1JlbmRlcmVkJiZrW2hdLmRlc3Ryb3koKTtGKGQsXCJkYXRhLWhpZ2hjaGFydHMtY2hhcnRcIix0aGlzLmluZGV4KTtkLmlubmVySFRNTD1cIlwiO2Iuc2tpcENsb25lfHxkLm9mZnNldFdpZHRofHx0aGlzLnRlbXBvcmFyeURpc3BsYXkoKTt0aGlzLmdldENoYXJ0U2l6ZSgpO2g9dGhpcy5jaGFydFdpZHRoO3ZhciBsPXRoaXMuY2hhcnRIZWlnaHQ7cihkLHtvdmVyZmxvdzpcImhpZGRlblwifSk7XG50aGlzLnN0eWxlZE1vZGV8fChnPXQoe3Bvc2l0aW9uOlwicmVsYXRpdmVcIixvdmVyZmxvdzpcImhpZGRlblwiLHdpZHRoOmgrXCJweFwiLGhlaWdodDpsK1wicHhcIix0ZXh0QWxpZ246XCJsZWZ0XCIsbGluZUhlaWdodDpcIm5vcm1hbFwiLHpJbmRleDowLFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCI6XCJyZ2JhKDAsMCwwLDApXCJ9LGIuc3R5bGUpKTt0aGlzLmNvbnRhaW5lcj1kPXAoXCJkaXZcIix7aWQ6ZX0sZyxkKTt0aGlzLl9jdXJzb3I9ZC5zdHlsZS5jdXJzb3I7dGhpcy5yZW5kZXJlcj1uZXcgKGNbYi5yZW5kZXJlcl18fGMuUmVuZGVyZXIpKGQsaCxsLG51bGwsYi5mb3JFeHBvcnQsYS5leHBvcnRpbmcmJmEuZXhwb3J0aW5nLmFsbG93SFRNTCx0aGlzLnN0eWxlZE1vZGUpO3RoaXMuc2V0Q2xhc3NOYW1lKGIuY2xhc3NOYW1lKTtpZih0aGlzLnN0eWxlZE1vZGUpZm9yKG0gaW4gYS5kZWZzKXRoaXMucmVuZGVyZXIuZGVmaW5pdGlvbihhLmRlZnNbbV0pO2Vsc2UgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShiLnN0eWxlKTtcbnRoaXMucmVuZGVyZXIuY2hhcnRJbmRleD10aGlzLmluZGV4O0EodGhpcyxcImFmdGVyR2V0Q29udGFpbmVyXCIpfSxnZXRNYXJnaW5zOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc3BhY2luZyxkPXRoaXMubWFyZ2luLGU9dGhpcy50aXRsZU9mZnNldDt0aGlzLnJlc2V0TWFyZ2lucygpO2VbMF0mJiFHKGRbMF0pJiYodGhpcy5wbG90VG9wPU1hdGgubWF4KHRoaXMucGxvdFRvcCxlWzBdK2JbMF0pKTtlWzJdJiYhRyhkWzJdKSYmKHRoaXMubWFyZ2luQm90dG9tPU1hdGgubWF4KHRoaXMubWFyZ2luQm90dG9tLGVbMl0rYlsyXSkpO3RoaXMubGVnZW5kJiZ0aGlzLmxlZ2VuZC5kaXNwbGF5JiZ0aGlzLmxlZ2VuZC5hZGp1c3RNYXJnaW5zKGQsYik7QSh0aGlzLFwiZ2V0TWFyZ2luc1wiKTthfHx0aGlzLmdldEF4aXNNYXJnaW5zKCl9LGdldEF4aXNNYXJnaW5zOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuYXhpc09mZnNldD1bMCwwLDAsMF0sZD1hLmNvbG9yQXhpcyxlPWEubWFyZ2luLGM9ZnVuY3Rpb24oYSl7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EudmlzaWJsZSYmXG5hLmdldE9mZnNldCgpfSl9O2EuaGFzQ2FydGVzaWFuU2VyaWVzP2MoYS5heGVzKTpkJiZkLmxlbmd0aCYmYyhkKTttLmZvckVhY2goZnVuY3Rpb24oZCxjKXtHKGVbY10pfHwoYVtkXSs9YltjXSl9KTthLnNldENoYXJ0U2l6ZSgpfSxyZWZsb3c6ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPWQub3B0aW9ucy5jaGFydCxrPWQucmVuZGVyVG8sZz1HKGUud2lkdGgpJiZHKGUuaGVpZ2h0KSxtPWUud2lkdGh8fGMuZ2V0U3R5bGUoayxcIndpZHRoXCIpO2U9ZS5oZWlnaHR8fGMuZ2V0U3R5bGUoayxcImhlaWdodFwiKTtrPWI/Yi50YXJnZXQ6UTtpZighZyYmIWQuaXNQcmludGluZyYmbSYmZSYmKGs9PT1RfHxrPT09TCkpe2lmKG0hPT1kLmNvbnRhaW5lcldpZHRofHxlIT09ZC5jb250YWluZXJIZWlnaHQpYy5jbGVhclRpbWVvdXQoZC5yZWZsb3dUaW1lb3V0KSxkLnJlZmxvd1RpbWVvdXQ9YShmdW5jdGlvbigpe2QuY29udGFpbmVyJiZkLnNldFNpemUodm9pZCAwLHZvaWQgMCwhMSl9LGI/MTAwOlxuMCk7ZC5jb250YWluZXJXaWR0aD1tO2QuY29udGFpbmVySGVpZ2h0PWV9fSxzZXRSZWZsb3c6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczshMT09PWF8fHRoaXMudW5iaW5kUmVmbG93PyExPT09YSYmdGhpcy51bmJpbmRSZWZsb3cmJih0aGlzLnVuYmluZFJlZmxvdz10aGlzLnVuYmluZFJlZmxvdygpKToodGhpcy51bmJpbmRSZWZsb3c9ZChRLFwicmVzaXplXCIsZnVuY3Rpb24oYSl7Yi5vcHRpb25zJiZiLnJlZmxvdyhhKX0pLGQodGhpcyxcImRlc3Ryb3lcIix0aGlzLnVuYmluZFJlZmxvdykpfSxzZXRTaXplOmZ1bmN0aW9uKGIsZCxjKXt2YXIgaz10aGlzLG09ay5yZW5kZXJlcjtrLmlzUmVzaXppbmcrPTE7ZyhjLGspO2sub2xkQ2hhcnRIZWlnaHQ9ay5jaGFydEhlaWdodDtrLm9sZENoYXJ0V2lkdGg9ay5jaGFydFdpZHRoO3ZvaWQgMCE9PWImJihrLm9wdGlvbnMuY2hhcnQud2lkdGg9Yik7dm9pZCAwIT09ZCYmKGsub3B0aW9ucy5jaGFydC5oZWlnaHQ9ZCk7ay5nZXRDaGFydFNpemUoKTtcbmlmKCFrLnN0eWxlZE1vZGUpe3ZhciBoPW0uZ2xvYmFsQW5pbWF0aW9uOyhoP2U6cikoay5jb250YWluZXIse3dpZHRoOmsuY2hhcnRXaWR0aCtcInB4XCIsaGVpZ2h0OmsuY2hhcnRIZWlnaHQrXCJweFwifSxoKX1rLnNldENoYXJ0U2l6ZSghMCk7bS5zZXRTaXplKGsuY2hhcnRXaWR0aCxrLmNoYXJ0SGVpZ2h0LGMpO2suYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuaXNEaXJ0eT0hMDthLnNldFNjYWxlKCl9KTtrLmlzRGlydHlMZWdlbmQ9ITA7ay5pc0RpcnR5Qm94PSEwO2subGF5T3V0VGl0bGVzKCk7ay5nZXRNYXJnaW5zKCk7ay5yZWRyYXcoYyk7ay5vbGRDaGFydEhlaWdodD1udWxsO0EoayxcInJlc2l6ZVwiKTthKGZ1bmN0aW9uKCl7ayYmQShrLFwiZW5kUmVzaXplXCIsbnVsbCxmdW5jdGlvbigpey0tay5pc1Jlc2l6aW5nfSl9LGwoaCkuZHVyYXRpb258fDApfSxzZXRDaGFydFNpemU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pbnZlcnRlZCxkPXRoaXMucmVuZGVyZXIsZT10aGlzLmNoYXJ0V2lkdGgsXG5jPXRoaXMuY2hhcnRIZWlnaHQsaz10aGlzLm9wdGlvbnMuY2hhcnQsZz10aGlzLnNwYWNpbmcsbT10aGlzLmNsaXBPZmZzZXQscixoLGwsZjt0aGlzLnBsb3RMZWZ0PXI9TWF0aC5yb3VuZCh0aGlzLnBsb3RMZWZ0KTt0aGlzLnBsb3RUb3A9aD1NYXRoLnJvdW5kKHRoaXMucGxvdFRvcCk7dGhpcy5wbG90V2lkdGg9bD1NYXRoLm1heCgwLE1hdGgucm91bmQoZS1yLXRoaXMubWFyZ2luUmlnaHQpKTt0aGlzLnBsb3RIZWlnaHQ9Zj1NYXRoLm1heCgwLE1hdGgucm91bmQoYy1oLXRoaXMubWFyZ2luQm90dG9tKSk7dGhpcy5wbG90U2l6ZVg9Yj9mOmw7dGhpcy5wbG90U2l6ZVk9Yj9sOmY7dGhpcy5wbG90Qm9yZGVyV2lkdGg9ay5wbG90Qm9yZGVyV2lkdGh8fDA7dGhpcy5zcGFjaW5nQm94PWQuc3BhY2luZ0JveD17eDpnWzNdLHk6Z1swXSx3aWR0aDplLWdbM10tZ1sxXSxoZWlnaHQ6Yy1nWzBdLWdbMl19O3RoaXMucGxvdEJveD1kLnBsb3RCb3g9e3g6cix5Omgsd2lkdGg6bCxoZWlnaHQ6Zn07XG5lPTIqTWF0aC5mbG9vcih0aGlzLnBsb3RCb3JkZXJXaWR0aC8yKTtiPU1hdGguY2VpbChNYXRoLm1heChlLG1bM10pLzIpO2Q9TWF0aC5jZWlsKE1hdGgubWF4KGUsbVswXSkvMik7dGhpcy5jbGlwQm94PXt4OmIseTpkLHdpZHRoOk1hdGguZmxvb3IodGhpcy5wbG90U2l6ZVgtTWF0aC5tYXgoZSxtWzFdKS8yLWIpLGhlaWdodDpNYXRoLm1heCgwLE1hdGguZmxvb3IodGhpcy5wbG90U2l6ZVktTWF0aC5tYXgoZSxtWzJdKS8yLWQpKX07YXx8dGhpcy5heGVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zZXRBeGlzU2l6ZSgpO2Euc2V0QXhpc1RyYW5zbGF0aW9uKCl9KTtBKHRoaXMsXCJhZnRlclNldENoYXJ0U2l6ZVwiLHtza2lwQXhlczphfSl9LHJlc2V0TWFyZ2luczpmdW5jdGlvbigpe0EodGhpcyxcInJlc2V0TWFyZ2luc1wiKTt2YXIgYT10aGlzLGI9YS5vcHRpb25zLmNoYXJ0O1tcIm1hcmdpblwiLFwic3BhY2luZ1wiXS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWJbZF0sYz1IKGUpP2U6W2UsXG5lLGUsZV07W1wiVG9wXCIsXCJSaWdodFwiLFwiQm90dG9tXCIsXCJMZWZ0XCJdLmZvckVhY2goZnVuY3Rpb24oZSxrKXthW2RdW2tdPW4oYltkK2VdLGNba10pfSl9KTttLmZvckVhY2goZnVuY3Rpb24oYixkKXthW2JdPW4oYS5tYXJnaW5bZF0sYS5zcGFjaW5nW2RdKX0pO2EuYXhpc09mZnNldD1bMCwwLDAsMF07YS5jbGlwT2Zmc2V0PVswLDAsMCwwXX0sZHJhd0NoYXJ0Qm94OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLmNoYXJ0LGI9dGhpcy5yZW5kZXJlcixkPXRoaXMuY2hhcnRXaWR0aCxlPXRoaXMuY2hhcnRIZWlnaHQsYz10aGlzLmNoYXJ0QmFja2dyb3VuZCxrPXRoaXMucGxvdEJhY2tncm91bmQsZz10aGlzLnBsb3RCb3JkZXIsbT10aGlzLnN0eWxlZE1vZGUscj10aGlzLnBsb3RCR0ltYWdlLGg9YS5iYWNrZ3JvdW5kQ29sb3IsbD1hLnBsb3RCYWNrZ3JvdW5kQ29sb3IsZj1hLnBsb3RCYWNrZ3JvdW5kSW1hZ2UseCx3PXRoaXMucGxvdExlZnQscD10aGlzLnBsb3RUb3AsdT10aGlzLnBsb3RXaWR0aCxcbm49dGhpcy5wbG90SGVpZ2h0LEo9dGhpcy5wbG90Qm94LEs9dGhpcy5jbGlwUmVjdCxxPXRoaXMuY2xpcEJveCx2PVwiYW5pbWF0ZVwiO2N8fCh0aGlzLmNoYXJ0QmFja2dyb3VuZD1jPWIucmVjdCgpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1iYWNrZ3JvdW5kXCIpLmFkZCgpLHY9XCJhdHRyXCIpO2lmKG0pdmFyIHk9eD1jLnN0cm9rZVdpZHRoKCk7ZWxzZXt5PWEuYm9yZGVyV2lkdGh8fDA7eD15KyhhLnNoYWRvdz84OjApO2g9e2ZpbGw6aHx8XCJub25lXCJ9O2lmKHl8fGNbXCJzdHJva2Utd2lkdGhcIl0paC5zdHJva2U9YS5ib3JkZXJDb2xvcixoW1wic3Ryb2tlLXdpZHRoXCJdPXk7Yy5hdHRyKGgpLnNoYWRvdyhhLnNoYWRvdyl9Y1t2XSh7eDp4LzIseTp4LzIsd2lkdGg6ZC14LXklMixoZWlnaHQ6ZS14LXklMixyOmEuYm9yZGVyUmFkaXVzfSk7dj1cImFuaW1hdGVcIjtrfHwodj1cImF0dHJcIix0aGlzLnBsb3RCYWNrZ3JvdW5kPWs9Yi5yZWN0KCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXBsb3QtYmFja2dyb3VuZFwiKS5hZGQoKSk7XG5rW3ZdKEopO218fChrLmF0dHIoe2ZpbGw6bHx8XCJub25lXCJ9KS5zaGFkb3coYS5wbG90U2hhZG93KSxmJiYocj9yLmFuaW1hdGUoSik6dGhpcy5wbG90QkdJbWFnZT1iLmltYWdlKGYsdyxwLHUsbikuYWRkKCkpKTtLP0suYW5pbWF0ZSh7d2lkdGg6cS53aWR0aCxoZWlnaHQ6cS5oZWlnaHR9KTp0aGlzLmNsaXBSZWN0PWIuY2xpcFJlY3QocSk7dj1cImFuaW1hdGVcIjtnfHwodj1cImF0dHJcIix0aGlzLnBsb3RCb3JkZXI9Zz1iLnJlY3QoKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtcGxvdC1ib3JkZXJcIikuYXR0cih7ekluZGV4OjF9KS5hZGQoKSk7bXx8Zy5hdHRyKHtzdHJva2U6YS5wbG90Qm9yZGVyQ29sb3IsXCJzdHJva2Utd2lkdGhcIjphLnBsb3RCb3JkZXJXaWR0aHx8MCxmaWxsOlwibm9uZVwifSk7Z1t2XShnLmNyaXNwKHt4OncseTpwLHdpZHRoOnUsaGVpZ2h0Om59LC1nLnN0cm9rZVdpZHRoKCkpKTt0aGlzLmlzRGlydHlCb3g9ITE7QSh0aGlzLFwiYWZ0ZXJEcmF3Q2hhcnRCb3hcIil9LHByb3BGcm9tU2VyaWVzOmZ1bmN0aW9uKCl7dmFyIGE9XG50aGlzLGI9YS5vcHRpb25zLmNoYXJ0LGQsZT1hLm9wdGlvbnMuc2VyaWVzLGMsaztbXCJpbnZlcnRlZFwiLFwiYW5ndWxhclwiLFwicG9sYXJcIl0uZm9yRWFjaChmdW5jdGlvbihnKXtkPVNbYi50eXBlfHxiLmRlZmF1bHRTZXJpZXNUeXBlXTtrPWJbZ118fGQmJmQucHJvdG90eXBlW2ddO2ZvcihjPWUmJmUubGVuZ3RoOyFrJiZjLS07KShkPVNbZVtjXS50eXBlXSkmJmQucHJvdG90eXBlW2ddJiYoaz0hMCk7YVtnXT1rfSl9LGxpbmtTZXJpZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5zZXJpZXM7Yi5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EubGlua2VkU2VyaWVzLmxlbmd0aD0wfSk7Yi5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPWIub3B0aW9ucy5saW5rZWRUbzt5KGQpJiYoZD1cIjpwcmV2aW91c1wiPT09ZD9hLnNlcmllc1tiLmluZGV4LTFdOmEuZ2V0KGQpKSYmZC5saW5rZWRQYXJlbnQhPT1iJiYoZC5saW5rZWRTZXJpZXMucHVzaChiKSxiLmxpbmtlZFBhcmVudD1kLGIudmlzaWJsZT1cbm4oYi5vcHRpb25zLnZpc2libGUsZC5vcHRpb25zLnZpc2libGUsYi52aXNpYmxlKSl9KTtBKHRoaXMsXCJhZnRlckxpbmtTZXJpZXNcIil9LHJlbmRlclNlcmllczpmdW5jdGlvbigpe3RoaXMuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS50cmFuc2xhdGUoKTthLnJlbmRlcigpfSl9LHJlbmRlckxhYmVsczpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLm9wdGlvbnMubGFiZWxzO2IuaXRlbXMmJmIuaXRlbXMuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgZT10KGIuc3R5bGUsZC5zdHlsZSksYz1xKGUubGVmdCkrYS5wbG90TGVmdCxrPXEoZS50b3ApK2EucGxvdFRvcCsxMjtkZWxldGUgZS5sZWZ0O2RlbGV0ZSBlLnRvcDthLnJlbmRlcmVyLnRleHQoZC5odG1sLGMsaykuYXR0cih7ekluZGV4OjJ9KS5jc3MoZSkuYWRkKCl9KX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5heGVzLGI9dGhpcy5jb2xvckF4aXMsZD10aGlzLnJlbmRlcmVyLGU9dGhpcy5vcHRpb25zLGM9MCxrPVxuZnVuY3Rpb24oYSl7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EudmlzaWJsZSYmYS5yZW5kZXIoKX0pfTt0aGlzLnNldFRpdGxlKCk7dGhpcy5sZWdlbmQ9bmV3IHcodGhpcyxlLmxlZ2VuZCk7dGhpcy5nZXRTdGFja3MmJnRoaXMuZ2V0U3RhY2tzKCk7dGhpcy5nZXRNYXJnaW5zKCEwKTt0aGlzLnNldENoYXJ0U2l6ZSgpO2U9dGhpcy5wbG90V2lkdGg7YS5zb21lKGZ1bmN0aW9uKGEpe2lmKGEuaG9yaXomJmEudmlzaWJsZSYmYS5vcHRpb25zLmxhYmVscy5lbmFibGVkJiZhLnNlcmllcy5sZW5ndGgpcmV0dXJuIGM9MjEsITB9KTt2YXIgZz10aGlzLnBsb3RIZWlnaHQ9TWF0aC5tYXgodGhpcy5wbG90SGVpZ2h0LWMsMCk7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0U2NhbGUoKX0pO3RoaXMuZ2V0QXhpc01hcmdpbnMoKTt2YXIgbT0xLjE8ZS90aGlzLnBsb3RXaWR0aDt2YXIgcj0xLjA1PGcvdGhpcy5wbG90SGVpZ2h0O2lmKG18fHIpYS5mb3JFYWNoKGZ1bmN0aW9uKGEpeyhhLmhvcml6JiZcbm18fCFhLmhvcml6JiZyKSYmYS5zZXRUaWNrSW50ZXJ2YWwoITApfSksdGhpcy5nZXRNYXJnaW5zKCk7dGhpcy5kcmF3Q2hhcnRCb3goKTt0aGlzLmhhc0NhcnRlc2lhblNlcmllcz9rKGEpOmImJmIubGVuZ3RoJiZrKGIpO3RoaXMuc2VyaWVzR3JvdXB8fCh0aGlzLnNlcmllc0dyb3VwPWQuZyhcInNlcmllcy1ncm91cFwiKS5hdHRyKHt6SW5kZXg6M30pLmFkZCgpKTt0aGlzLnJlbmRlclNlcmllcygpO3RoaXMucmVuZGVyTGFiZWxzKCk7dGhpcy5hZGRDcmVkaXRzKCk7dGhpcy5zZXRSZXNwb25zaXZlJiZ0aGlzLnNldFJlc3BvbnNpdmUoKTt0aGlzLnVwZGF0ZUNvbnRhaW5lclNjYWxpbmcoKTt0aGlzLmhhc1JlbmRlcmVkPSEwfSxhZGRDcmVkaXRzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7YT1LKCEwLHRoaXMub3B0aW9ucy5jcmVkaXRzLGEpO2EuZW5hYmxlZCYmIXRoaXMuY3JlZGl0cyYmKHRoaXMuY3JlZGl0cz10aGlzLnJlbmRlcmVyLnRleHQoYS50ZXh0Kyh0aGlzLm1hcENyZWRpdHN8fFxuXCJcIiksMCwwKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtY3JlZGl0c1wiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXthLmhyZWYmJihRLmxvY2F0aW9uLmhyZWY9YS5ocmVmKX0pLmF0dHIoe2FsaWduOmEucG9zaXRpb24uYWxpZ24sekluZGV4Ojh9KSxiLnN0eWxlZE1vZGV8fHRoaXMuY3JlZGl0cy5jc3MoYS5zdHlsZSksdGhpcy5jcmVkaXRzLmFkZCgpLmFsaWduKGEucG9zaXRpb24pLHRoaXMuY3JlZGl0cy51cGRhdGU9ZnVuY3Rpb24oYSl7Yi5jcmVkaXRzPWIuY3JlZGl0cy5kZXN0cm95KCk7Yi5hZGRDcmVkaXRzKGEpfSl9LHVwZGF0ZUNvbnRhaW5lclNjYWxpbmc6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvbnRhaW5lcjtpZihhLm9mZnNldFdpZHRoJiZhLm9mZnNldEhlaWdodCYmYS5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBiPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1iLndpZHRoL2Eub2Zmc2V0V2lkdGg7YT1iLmhlaWdodC9hLm9mZnNldEhlaWdodDsxIT09ZHx8MSE9PVxuYT90aGlzLmNvbnRhaW5lclNjYWxpbmc9e3NjYWxlWDpkLHNjYWxlWTphfTpkZWxldGUgdGhpcy5jb250YWluZXJTY2FsaW5nfX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmF4ZXMsZD1hLnNlcmllcyxlPWEuY29udGFpbmVyLGcsbT1lJiZlLnBhcmVudE5vZGU7QShhLFwiZGVzdHJveVwiKTthLnJlbmRlcmVyLmZvckV4cG9ydD9CKGssYSk6a1thLmluZGV4XT12b2lkIDA7Yy5jaGFydENvdW50LS07YS5yZW5kZXJUby5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLWhpZ2hjaGFydHMtY2hhcnRcIik7VShhKTtmb3IoZz1iLmxlbmd0aDtnLS07KWJbZ109YltnXS5kZXN0cm95KCk7dGhpcy5zY3JvbGxlciYmdGhpcy5zY3JvbGxlci5kZXN0cm95JiZ0aGlzLnNjcm9sbGVyLmRlc3Ryb3koKTtmb3IoZz1kLmxlbmd0aDtnLS07KWRbZ109ZFtnXS5kZXN0cm95KCk7XCJ0aXRsZSBzdWJ0aXRsZSBjaGFydEJhY2tncm91bmQgcGxvdEJhY2tncm91bmQgcGxvdEJHSW1hZ2UgcGxvdEJvcmRlciBzZXJpZXNHcm91cCBjbGlwUmVjdCBjcmVkaXRzIHBvaW50ZXIgcmFuZ2VTZWxlY3RvciBsZWdlbmQgcmVzZXRab29tQnV0dG9uIHRvb2x0aXAgcmVuZGVyZXJcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgZD1cbmFbYl07ZCYmZC5kZXN0cm95JiYoYVtiXT1kLmRlc3Ryb3koKSl9KTtlJiYoZS5pbm5lckhUTUw9XCJcIixVKGUpLG0mJnooZSkpO2goYSxmdW5jdGlvbihiLGQpe2RlbGV0ZSBhW2RdfSl9LGZpcnN0UmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEub3B0aW9ucztpZighYS5pc1JlYWR5VG9SZW5kZXJ8fGEuaXNSZWFkeVRvUmVuZGVyKCkpe2EuZ2V0Q29udGFpbmVyKCk7YS5yZXNldE1hcmdpbnMoKTthLnNldENoYXJ0U2l6ZSgpO2EucHJvcEZyb21TZXJpZXMoKTthLmdldEF4ZXMoKTsodihiLnNlcmllcyk/Yi5zZXJpZXM6W10pLmZvckVhY2goZnVuY3Rpb24oYil7YS5pbml0U2VyaWVzKGIpfSk7YS5saW5rU2VyaWVzKCk7QShhLFwiYmVmb3JlUmVuZGVyXCIpO0omJihhLnBvaW50ZXI9bmV3IEooYSxiKSk7YS5yZW5kZXIoKTtpZighYS5yZW5kZXJlci5pbWdDb3VudCYmYS5vbmxvYWQpYS5vbmxvYWQoKTthLnRlbXBvcmFyeURpc3BsYXkoITApfX0sb25sb2FkOmZ1bmN0aW9uKCl7dGhpcy5jYWxsYmFja3MuY29uY2F0KFt0aGlzLmNhbGxiYWNrXSkuZm9yRWFjaChmdW5jdGlvbihhKXthJiZcbnZvaWQgMCE9PXRoaXMuaW5kZXgmJmEuYXBwbHkodGhpcyxbdGhpc10pfSx0aGlzKTtBKHRoaXMsXCJsb2FkXCIpO0EodGhpcyxcInJlbmRlclwiKTtHKHRoaXMuaW5kZXgpJiZ0aGlzLnNldFJlZmxvdyh0aGlzLm9wdGlvbnMuY2hhcnQucmVmbG93KTt0aGlzLm9ubG9hZD1udWxsfX0pfSk7TShJLFwicGFydHMvU2Nyb2xsYWJsZVBsb3RBcmVhLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5waWNrLEc9Yy5hZGRFdmVudDtmPWMuQ2hhcnQ7XCJcIjtHKGYsXCJhZnRlclNldENoYXJ0U2l6ZVwiLGZ1bmN0aW9uKGYpe3ZhciB6PXRoaXMub3B0aW9ucy5jaGFydC5zY3JvbGxhYmxlUGxvdEFyZWEsdD16JiZ6Lm1pbldpZHRoO3o9eiYmei5taW5IZWlnaHQ7aWYoIXRoaXMucmVuZGVyZXIuZm9yRXhwb3J0KXtpZih0KXtpZih0aGlzLnNjcm9sbGFibGVQaXhlbHNYPXQ9TWF0aC5tYXgoMCx0LXRoaXMuY2hhcnRXaWR0aCkpe3RoaXMucGxvdFdpZHRoKz1cbnQ7dGhpcy5pbnZlcnRlZD8odGhpcy5jbGlwQm94LmhlaWdodCs9dCx0aGlzLnBsb3RCb3guaGVpZ2h0Kz10KToodGhpcy5jbGlwQm94LndpZHRoKz10LHRoaXMucGxvdEJveC53aWR0aCs9dCk7dmFyIHY9ezE6e25hbWU6XCJyaWdodFwiLHZhbHVlOnR9fX19ZWxzZSB6JiYodGhpcy5zY3JvbGxhYmxlUGl4ZWxzWT10PU1hdGgubWF4KDAsei10aGlzLmNoYXJ0SGVpZ2h0KSkmJih0aGlzLnBsb3RIZWlnaHQrPXQsdGhpcy5pbnZlcnRlZD8odGhpcy5jbGlwQm94LndpZHRoKz10LHRoaXMucGxvdEJveC53aWR0aCs9dCk6KHRoaXMuY2xpcEJveC5oZWlnaHQrPXQsdGhpcy5wbG90Qm94LmhlaWdodCs9dCksdj17Mjp7bmFtZTpcImJvdHRvbVwiLHZhbHVlOnR9fSk7diYmIWYuc2tpcEF4ZXMmJnRoaXMuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGYpe3ZbZi5zaWRlXT9mLmdldFBsb3RMaW5lUGF0aD1mdW5jdGlvbigpe3ZhciB0PXZbZi5zaWRlXS5uYW1lLHk9dGhpc1t0XTt0aGlzW3RdPXktdltmLnNpZGVdLnZhbHVlO1xudmFyIGg9Yy5BeGlzLnByb3RvdHlwZS5nZXRQbG90TGluZVBhdGguYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXNbdF09eTtyZXR1cm4gaH06KGYuc2V0QXhpc1NpemUoKSxmLnNldEF4aXNUcmFuc2xhdGlvbigpKX0pfX0pO0coZixcInJlbmRlclwiLGZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxhYmxlUGl4ZWxzWHx8dGhpcy5zY3JvbGxhYmxlUGl4ZWxzWT8odGhpcy5zZXRVcFNjcm9sbGluZyYmdGhpcy5zZXRVcFNjcm9sbGluZygpLHRoaXMuYXBwbHlGaXhlZCgpKTp0aGlzLmZpeGVkRGl2JiZ0aGlzLmFwcGx5Rml4ZWQoKX0pO2YucHJvdG90eXBlLnNldFVwU2Nyb2xsaW5nPWZ1bmN0aW9uKCl7dmFyIGY9e1dlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOlwidG91Y2hcIixvdmVyZmxvd1g6XCJoaWRkZW5cIixvdmVyZmxvd1k6XCJoaWRkZW5cIn07dGhpcy5zY3JvbGxhYmxlUGl4ZWxzWCYmKGYub3ZlcmZsb3dYPVwiYXV0b1wiKTt0aGlzLnNjcm9sbGFibGVQaXhlbHNZJiYoZi5vdmVyZmxvd1k9XCJhdXRvXCIpO1xudGhpcy5zY3JvbGxpbmdDb250YWluZXI9Yy5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcImhpZ2hjaGFydHMtc2Nyb2xsaW5nXCJ9LGYsdGhpcy5yZW5kZXJUbyk7dGhpcy5pbm5lckNvbnRhaW5lcj1jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiaGlnaGNoYXJ0cy1pbm5lci1jb250YWluZXJcIn0sbnVsbCx0aGlzLnNjcm9sbGluZ0NvbnRhaW5lcik7dGhpcy5pbm5lckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7dGhpcy5zZXRVcFNjcm9sbGluZz1udWxsfTtmLnByb3RvdHlwZS5tb3ZlRml4ZWRFbGVtZW50cz1mdW5jdGlvbigpe3ZhciBjPXRoaXMuY29udGFpbmVyLGY9dGhpcy5maXhlZFJlbmRlcmVyLHQ9XCIuaGlnaGNoYXJ0cy1jb250ZXh0YnV0dG9uIC5oaWdoY2hhcnRzLWNyZWRpdHMgLmhpZ2hjaGFydHMtbGVnZW5kIC5oaWdoY2hhcnRzLWxlZ2VuZC1jaGVja2JveCAuaGlnaGNoYXJ0cy1uYXZpZ2F0b3Itc2VyaWVzIC5oaWdoY2hhcnRzLW5hdmlnYXRvci14YXhpcyAuaGlnaGNoYXJ0cy1uYXZpZ2F0b3IteWF4aXMgLmhpZ2hjaGFydHMtbmF2aWdhdG9yIC5oaWdoY2hhcnRzLXJlc2V0LXpvb20gLmhpZ2hjaGFydHMtc2Nyb2xsYmFyIC5oaWdoY2hhcnRzLXN1YnRpdGxlIC5oaWdoY2hhcnRzLXRpdGxlXCIuc3BsaXQoXCIgXCIpLFxudjt0aGlzLnNjcm9sbGFibGVQaXhlbHNYJiYhdGhpcy5pbnZlcnRlZD92PVwiLmhpZ2hjaGFydHMteWF4aXNcIjp0aGlzLnNjcm9sbGFibGVQaXhlbHNYJiZ0aGlzLmludmVydGVkP3Y9XCIuaGlnaGNoYXJ0cy14YXhpc1wiOnRoaXMuc2Nyb2xsYWJsZVBpeGVsc1kmJiF0aGlzLmludmVydGVkP3Y9XCIuaGlnaGNoYXJ0cy14YXhpc1wiOnRoaXMuc2Nyb2xsYWJsZVBpeGVsc1kmJnRoaXMuaW52ZXJ0ZWQmJih2PVwiLmhpZ2hjaGFydHMteWF4aXNcIik7dC5wdXNoKHYsditcIi1sYWJlbHNcIik7dC5mb3JFYWNoKGZ1bmN0aW9uKHYpe1tdLmZvckVhY2guY2FsbChjLnF1ZXJ5U2VsZWN0b3JBbGwodiksZnVuY3Rpb24oYyl7KGMubmFtZXNwYWNlVVJJPT09Zi5TVkdfTlM/Zi5ib3g6Zi5ib3gucGFyZW50Tm9kZSkuYXBwZW5kQ2hpbGQoYyk7Yy5zdHlsZS5wb2ludGVyRXZlbnRzPVwiYXV0b1wifSl9KX07Zi5wcm90b3R5cGUuYXBwbHlGaXhlZD1mdW5jdGlvbigpe3ZhciBmLEI9IXRoaXMuZml4ZWREaXYsdD10aGlzLm9wdGlvbnMuY2hhcnQuc2Nyb2xsYWJsZVBsb3RBcmVhO1xuQj8odGhpcy5maXhlZERpdj1jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiaGlnaGNoYXJ0cy1maXhlZFwifSx7cG9zaXRpb246XCJhYnNvbHV0ZVwiLG92ZXJmbG93OlwiaGlkZGVuXCIscG9pbnRlckV2ZW50czpcIm5vbmVcIix6SW5kZXg6Mn0sbnVsbCwhMCksdGhpcy5yZW5kZXJUby5pbnNlcnRCZWZvcmUodGhpcy5maXhlZERpdix0aGlzLnJlbmRlclRvLmZpcnN0Q2hpbGQpLHRoaXMucmVuZGVyVG8uc3R5bGUub3ZlcmZsb3c9XCJ2aXNpYmxlXCIsdGhpcy5maXhlZFJlbmRlcmVyPWY9bmV3IGMuUmVuZGVyZXIodGhpcy5maXhlZERpdix0aGlzLmNoYXJ0V2lkdGgsdGhpcy5jaGFydEhlaWdodCksdGhpcy5zY3JvbGxhYmxlTWFzaz1mLnBhdGgoKS5hdHRyKHtmaWxsOmMuY29sb3IodGhpcy5vcHRpb25zLmNoYXJ0LmJhY2tncm91bmRDb2xvcnx8XCIjZmZmXCIpLnNldE9wYWNpdHkoRih0Lm9wYWNpdHksLjg1KSkuZ2V0KCksekluZGV4Oi0xfSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXNjcm9sbGFibGUtbWFza1wiKS5hZGQoKSxcbnRoaXMubW92ZUZpeGVkRWxlbWVudHMoKSxHKHRoaXMsXCJhZnRlclNob3dSZXNldFpvb21cIix0aGlzLm1vdmVGaXhlZEVsZW1lbnRzKSxHKHRoaXMsXCJhZnRlckxheU91dFRpdGxlc1wiLHRoaXMubW92ZUZpeGVkRWxlbWVudHMpKTp0aGlzLmZpeGVkUmVuZGVyZXIuc2V0U2l6ZSh0aGlzLmNoYXJ0V2lkdGgsdGhpcy5jaGFydEhlaWdodCk7Zj10aGlzLmNoYXJ0V2lkdGgrKHRoaXMuc2Nyb2xsYWJsZVBpeGVsc1h8fDApO3ZhciB2PXRoaXMuY2hhcnRIZWlnaHQrKHRoaXMuc2Nyb2xsYWJsZVBpeGVsc1l8fDApO2Muc3RvcCh0aGlzLmNvbnRhaW5lcik7dGhpcy5jb250YWluZXIuc3R5bGUud2lkdGg9ZitcInB4XCI7dGhpcy5jb250YWluZXIuc3R5bGUuaGVpZ2h0PXYrXCJweFwiO3RoaXMucmVuZGVyZXIuYm94V3JhcHBlci5hdHRyKHt3aWR0aDpmLGhlaWdodDp2LHZpZXdCb3g6WzAsMCxmLHZdLmpvaW4oXCIgXCIpfSk7dGhpcy5jaGFydEJhY2tncm91bmQuYXR0cih7d2lkdGg6ZixoZWlnaHQ6dn0pO1xudGhpcy5zY3JvbGxhYmxlUGl4ZWxzWSYmKHRoaXMuc2Nyb2xsaW5nQ29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmNoYXJ0SGVpZ2h0K1wicHhcIik7QiYmKHQuc2Nyb2xsUG9zaXRpb25YJiYodGhpcy5zY3JvbGxpbmdDb250YWluZXIuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbGFibGVQaXhlbHNYKnQuc2Nyb2xsUG9zaXRpb25YKSx0LnNjcm9sbFBvc2l0aW9uWSYmKHRoaXMuc2Nyb2xsaW5nQ29udGFpbmVyLnNjcm9sbFRvcD10aGlzLnNjcm9sbGFibGVQaXhlbHNZKnQuc2Nyb2xsUG9zaXRpb25ZKSk7dj10aGlzLmF4aXNPZmZzZXQ7Qj10aGlzLnBsb3RUb3AtdlswXS0xO3Q9dGhpcy5wbG90TGVmdC12WzNdLTE7Zj10aGlzLnBsb3RUb3ArdGhpcy5wbG90SGVpZ2h0K3ZbMl0rMTt2PXRoaXMucGxvdExlZnQrdGhpcy5wbG90V2lkdGgrdlsxXSsxO3ZhciBDPXRoaXMucGxvdExlZnQrdGhpcy5wbG90V2lkdGgtKHRoaXMuc2Nyb2xsYWJsZVBpeGVsc1h8fDApLEg9dGhpcy5wbG90VG9wK3RoaXMucGxvdEhlaWdodC1cbih0aGlzLnNjcm9sbGFibGVQaXhlbHNZfHwwKTtCPXRoaXMuc2Nyb2xsYWJsZVBpeGVsc1g/W1wiTVwiLDAsQixcIkxcIix0aGlzLnBsb3RMZWZ0LTEsQixcIkxcIix0aGlzLnBsb3RMZWZ0LTEsZixcIkxcIiwwLGYsXCJaXCIsXCJNXCIsQyxCLFwiTFwiLHRoaXMuY2hhcnRXaWR0aCxCLFwiTFwiLHRoaXMuY2hhcnRXaWR0aCxmLFwiTFwiLEMsZixcIlpcIl06dGhpcy5zY3JvbGxhYmxlUGl4ZWxzWT9bXCJNXCIsdCwwLFwiTFwiLHQsdGhpcy5wbG90VG9wLTEsXCJMXCIsdix0aGlzLnBsb3RUb3AtMSxcIkxcIix2LDAsXCJaXCIsXCJNXCIsdCxILFwiTFwiLHQsdGhpcy5jaGFydEhlaWdodCxcIkxcIix2LHRoaXMuY2hhcnRIZWlnaHQsXCJMXCIsdixILFwiWlwiXTpbXCJNXCIsMCwwXTtcImFkanVzdEhlaWdodFwiIT09dGhpcy5yZWRyYXdUcmlnZ2VyJiZ0aGlzLnNjcm9sbGFibGVNYXNrLmF0dHIoe2Q6Qn0pfX0pO00oSSxcInBhcnRzL1BvaW50LmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9XG5mLmRlZmluZWQsRz1mLmVyYXNlLHo9Zi5leHRlbmQsQj1mLmlzQXJyYXksdD1mLmlzTnVtYmVyLHY9Zi5pc09iamVjdCxDPWYucGljayxILHk9Yy5maXJlRXZlbnQsaD1jLmZvcm1hdCxuPWMudW5pcXVlS2V5LHE9Yy5yZW1vdmVFdmVudDtjLlBvaW50PUg9ZnVuY3Rpb24oKXt9O2MuUG9pbnQucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKGMsYixhKXt0aGlzLnNlcmllcz1jO3RoaXMuYXBwbHlPcHRpb25zKGIsYSk7dGhpcy5pZD1GKHRoaXMuaWQpP3RoaXMuaWQ6bigpO3RoaXMucmVzb2x2ZUNvbG9yKCk7Yy5jaGFydC5wb2ludENvdW50Kys7eSh0aGlzLFwiYWZ0ZXJJbml0XCIpO3JldHVybiB0aGlzfSxyZXNvbHZlQ29sb3I6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLnNlcmllczt2YXIgYj1jLmNoYXJ0Lm9wdGlvbnMuY2hhcnQuY29sb3JDb3VudDt2YXIgYT1jLmNoYXJ0LnN0eWxlZE1vZGU7YXx8dGhpcy5vcHRpb25zLmNvbG9yfHwodGhpcy5jb2xvcj1jLmNvbG9yKTtjLm9wdGlvbnMuY29sb3JCeVBvaW50P1xuKGF8fChiPWMub3B0aW9ucy5jb2xvcnN8fGMuY2hhcnQub3B0aW9ucy5jb2xvcnMsdGhpcy5jb2xvcj10aGlzLmNvbG9yfHxiW2MuY29sb3JDb3VudGVyXSxiPWIubGVuZ3RoKSxhPWMuY29sb3JDb3VudGVyLGMuY29sb3JDb3VudGVyKyssYy5jb2xvckNvdW50ZXI9PT1iJiYoYy5jb2xvckNvdW50ZXI9MCkpOmE9Yy5jb2xvckluZGV4O3RoaXMuY29sb3JJbmRleD1DKHRoaXMuY29sb3JJbmRleCxhKX0sYXBwbHlPcHRpb25zOmZ1bmN0aW9uKGMsYil7dmFyIGE9dGhpcy5zZXJpZXMsZD1hLm9wdGlvbnMucG9pbnRWYWxLZXl8fGEucG9pbnRWYWxLZXk7Yz1ILnByb3RvdHlwZS5vcHRpb25zVG9PYmplY3QuY2FsbCh0aGlzLGMpO3oodGhpcyxjKTt0aGlzLm9wdGlvbnM9dGhpcy5vcHRpb25zP3oodGhpcy5vcHRpb25zLGMpOmM7Yy5ncm91cCYmZGVsZXRlIHRoaXMuZ3JvdXA7Yy5kYXRhTGFiZWxzJiZkZWxldGUgdGhpcy5kYXRhTGFiZWxzO2QmJih0aGlzLnk9dGhpc1tkXSk7dGhpcy5mb3JtYXRQcmVmaXg9XG4odGhpcy5pc051bGw9Qyh0aGlzLmlzVmFsaWQmJiF0aGlzLmlzVmFsaWQoKSxudWxsPT09dGhpcy54fHwhdCh0aGlzLnkpKSk/XCJudWxsXCI6XCJwb2ludFwiO3RoaXMuc2VsZWN0ZWQmJih0aGlzLnN0YXRlPVwic2VsZWN0XCIpO1wibmFtZVwiaW4gdGhpcyYmdm9pZCAwPT09YiYmYS54QXhpcyYmYS54QXhpcy5oYXNOYW1lcyYmKHRoaXMueD1hLnhBeGlzLm5hbWVUb1godGhpcykpO3ZvaWQgMD09PXRoaXMueCYmYSYmKHRoaXMueD12b2lkIDA9PT1iP2EuYXV0b0luY3JlbWVudCh0aGlzKTpiKTtyZXR1cm4gdGhpc30sc2V0TmVzdGVkUHJvcGVydHk6ZnVuY3Rpb24oYyxiLGEpe2Euc3BsaXQoXCIuXCIpLnJlZHVjZShmdW5jdGlvbihhLGUsYyxnKXthW2VdPWcubGVuZ3RoLTE9PT1jP2I6dihhW2VdLCEwKT9hW2VdOnt9O3JldHVybiBhW2VdfSxjKTtyZXR1cm4gY30sb3B0aW9uc1RvT2JqZWN0OmZ1bmN0aW9uKGcpe3ZhciBiPXt9LGE9dGhpcy5zZXJpZXMsZD1hLm9wdGlvbnMua2V5cyxlPWR8fGEucG9pbnRBcnJheU1hcHx8XG5bXCJ5XCJdLGg9ZS5sZW5ndGgsZj0wLG49MDtpZih0KGcpfHxudWxsPT09ZyliW2VbMF1dPWc7ZWxzZSBpZihCKGcpKWZvcighZCYmZy5sZW5ndGg+aCYmKGE9dHlwZW9mIGdbMF0sXCJzdHJpbmdcIj09PWE/Yi5uYW1lPWdbMF06XCJudW1iZXJcIj09PWEmJihiLng9Z1swXSksZisrKTtuPGg7KWQmJnZvaWQgMD09PWdbZl18fCgwPGVbbl0uaW5kZXhPZihcIi5cIik/Yy5Qb2ludC5wcm90b3R5cGUuc2V0TmVzdGVkUHJvcGVydHkoYixnW2ZdLGVbbl0pOmJbZVtuXV09Z1tmXSksZisrLG4rKztlbHNlXCJvYmplY3RcIj09PXR5cGVvZiBnJiYoYj1nLGcuZGF0YUxhYmVscyYmKGEuX2hhc1BvaW50TGFiZWxzPSEwKSxnLm1hcmtlciYmKGEuX2hhc1BvaW50TWFya2Vycz0hMCkpO3JldHVybiBifSxnZXRDbGFzc05hbWU6ZnVuY3Rpb24oKXtyZXR1cm5cImhpZ2hjaGFydHMtcG9pbnRcIisodGhpcy5zZWxlY3RlZD9cIiBoaWdoY2hhcnRzLXBvaW50LXNlbGVjdFwiOlwiXCIpKyh0aGlzLm5lZ2F0aXZlP1wiIGhpZ2hjaGFydHMtbmVnYXRpdmVcIjpcblwiXCIpKyh0aGlzLmlzTnVsbD9cIiBoaWdoY2hhcnRzLW51bGwtcG9pbnRcIjpcIlwiKSsodm9pZCAwIT09dGhpcy5jb2xvckluZGV4P1wiIGhpZ2hjaGFydHMtY29sb3ItXCIrdGhpcy5jb2xvckluZGV4OlwiXCIpKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lP1wiIFwiK3RoaXMub3B0aW9ucy5jbGFzc05hbWU6XCJcIikrKHRoaXMuem9uZSYmdGhpcy56b25lLmNsYXNzTmFtZT9cIiBcIit0aGlzLnpvbmUuY2xhc3NOYW1lLnJlcGxhY2UoXCJoaWdoY2hhcnRzLW5lZ2F0aXZlXCIsXCJcIik6XCJcIil9LGdldFpvbmU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLnNlcmllcyxiPWMuem9uZXM7Yz1jLnpvbmVBeGlzfHxcInlcIjt2YXIgYT0wLGQ7Zm9yKGQ9YlthXTt0aGlzW2NdPj1kLnZhbHVlOylkPWJbKythXTt0aGlzLm5vblpvbmVkQ29sb3J8fCh0aGlzLm5vblpvbmVkQ29sb3I9dGhpcy5jb2xvcik7dGhpcy5jb2xvcj1kJiZkLmNvbG9yJiYhdGhpcy5vcHRpb25zLmNvbG9yP2QuY29sb3I6dGhpcy5ub25ab25lZENvbG9yO3JldHVybiBkfSxcbmhhc05ld1NoYXBlVHlwZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoaWMmJnRoaXMuZ3JhcGhpYy5lbGVtZW50Lm5vZGVOYW1lIT09dGhpcy5zaGFwZVR5cGV9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLnNlcmllcy5jaGFydCxiPWMuaG92ZXJQb2ludHMsYTtjLnBvaW50Q291bnQtLTtiJiYodGhpcy5zZXRTdGF0ZSgpLEcoYix0aGlzKSxiLmxlbmd0aHx8KGMuaG92ZXJQb2ludHM9bnVsbCkpO2lmKHRoaXM9PT1jLmhvdmVyUG9pbnQpdGhpcy5vbk1vdXNlT3V0KCk7aWYodGhpcy5ncmFwaGljfHx0aGlzLmRhdGFMYWJlbHx8dGhpcy5kYXRhTGFiZWxzKXEodGhpcyksdGhpcy5kZXN0cm95RWxlbWVudHMoKTt0aGlzLmxlZ2VuZEl0ZW0mJmMubGVnZW5kLmRlc3Ryb3lJdGVtKHRoaXMpO2ZvcihhIGluIHRoaXMpdGhpc1thXT1udWxsfSxkZXN0cm95RWxlbWVudHM6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcyxhPVtdLGQ7Yz1jfHx7Z3JhcGhpYzoxLGRhdGFMYWJlbDoxfTtcbmMuZ3JhcGhpYyYmYS5wdXNoKFwiZ3JhcGhpY1wiLFwic2hhZG93R3JvdXBcIik7Yy5kYXRhTGFiZWwmJmEucHVzaChcImRhdGFMYWJlbFwiLFwiZGF0YUxhYmVsVXBwZXJcIixcImNvbm5lY3RvclwiKTtmb3IoZD1hLmxlbmd0aDtkLS07KXt2YXIgZT1hW2RdO2JbZV0mJihiW2VdPWJbZV0uZGVzdHJveSgpKX1bXCJkYXRhTGFiZWxcIixcImNvbm5lY3RvclwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBkPWErXCJzXCI7Y1thXSYmYltkXSYmKGJbZF0uZm9yRWFjaChmdW5jdGlvbihhKXthLmVsZW1lbnQmJmEuZGVzdHJveSgpfSksZGVsZXRlIGJbZF0pfSl9LGdldExhYmVsQ29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJue3g6dGhpcy5jYXRlZ29yeSx5OnRoaXMueSxjb2xvcjp0aGlzLmNvbG9yLGNvbG9ySW5kZXg6dGhpcy5jb2xvckluZGV4LGtleTp0aGlzLm5hbWV8fHRoaXMuY2F0ZWdvcnksc2VyaWVzOnRoaXMuc2VyaWVzLHBvaW50OnRoaXMscGVyY2VudGFnZTp0aGlzLnBlcmNlbnRhZ2UsdG90YWw6dGhpcy50b3RhbHx8XG50aGlzLnN0YWNrVG90YWx9fSx0b29sdGlwRm9ybWF0dGVyOmZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMuc2VyaWVzLGE9Yi50b29sdGlwT3B0aW9ucyxkPUMoYS52YWx1ZURlY2ltYWxzLFwiXCIpLGU9YS52YWx1ZVByZWZpeHx8XCJcIixnPWEudmFsdWVTdWZmaXh8fFwiXCI7Yi5jaGFydC5zdHlsZWRNb2RlJiYoYz1iLmNoYXJ0LnRvb2x0aXAuc3R5bGVkTW9kZUZvcm1hdChjKSk7KGIucG9pbnRBcnJheU1hcHx8W1wieVwiXSkuZm9yRWFjaChmdW5jdGlvbihhKXthPVwie3BvaW50LlwiK2E7aWYoZXx8ZyljPWMucmVwbGFjZShSZWdFeHAoYStcIn1cIixcImdcIiksZSthK1wifVwiK2cpO2M9Yy5yZXBsYWNlKFJlZ0V4cChhK1wifVwiLFwiZ1wiKSxhK1wiOiwuXCIrZCtcImZ9XCIpfSk7cmV0dXJuIGgoYyx7cG9pbnQ6dGhpcyxzZXJpZXM6dGhpcy5zZXJpZXN9LGIuY2hhcnQudGltZSl9LGZpcmVQb2ludEV2ZW50OmZ1bmN0aW9uKGMsYixhKXt2YXIgZD10aGlzLGU9dGhpcy5zZXJpZXMub3B0aW9uczsoZS5wb2ludC5ldmVudHNbY118fFxuZC5vcHRpb25zJiZkLm9wdGlvbnMuZXZlbnRzJiZkLm9wdGlvbnMuZXZlbnRzW2NdKSYmdGhpcy5pbXBvcnRFdmVudHMoKTtcImNsaWNrXCI9PT1jJiZlLmFsbG93UG9pbnRTZWxlY3QmJihhPWZ1bmN0aW9uKGEpe2Quc2VsZWN0JiZkLnNlbGVjdChudWxsLGEuY3RybEtleXx8YS5tZXRhS2V5fHxhLnNoaWZ0S2V5KX0pO3kodGhpcyxjLGIsYSl9LHZpc2libGU6ITB9fSk7TShJLFwicGFydHMvU2VyaWVzLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5hcnJheU1heCxHPWYuYXJyYXlNaW4sej1mLmRlZmluZWQsQj1mLmVyYXNlLHQ9Zi5leHRlbmQsdj1mLmlzQXJyYXksQz1mLmlzTnVtYmVyLEg9Zi5pc1N0cmluZyx5PWYub2JqZWN0RWFjaCxoPWYucGljayxuPWYuc3BsYXQscT1mLnN5bmNUaW1lb3V0LGc9Yy5hZGRFdmVudCxiPWMuYW5pbU9iamVjdCxhPWMuY29ycmVjdEZsb2F0LGQ9Yy5kZWZhdWx0T3B0aW9ucyxcbmU9Yy5kZWZhdWx0UGxvdE9wdGlvbnMsbD1jLmZpcmVFdmVudCxMPWMubWVyZ2UsRT1jLnJlbW92ZUV2ZW50LHA9Yy5TVkdFbGVtZW50LHU9Yy53aW47Yy5TZXJpZXM9Yy5zZXJpZXNUeXBlKFwibGluZVwiLG51bGwse2xpbmVXaWR0aDoyLGFsbG93UG9pbnRTZWxlY3Q6ITEsc2hvd0NoZWNrYm94OiExLGFuaW1hdGlvbjp7ZHVyYXRpb246MUUzfSxldmVudHM6e30sbWFya2VyOntsaW5lV2lkdGg6MCxsaW5lQ29sb3I6XCIjZmZmZmZmXCIsZW5hYmxlZFRocmVzaG9sZDoyLHJhZGl1czo0LHN0YXRlczp7bm9ybWFsOnthbmltYXRpb246ITB9LGhvdmVyOnthbmltYXRpb246e2R1cmF0aW9uOjUwfSxlbmFibGVkOiEwLHJhZGl1c1BsdXM6MixsaW5lV2lkdGhQbHVzOjF9LHNlbGVjdDp7ZmlsbENvbG9yOlwiI2NjY2NjY1wiLGxpbmVDb2xvcjpcIiMwMDAwMDBcIixsaW5lV2lkdGg6Mn19fSxwb2ludDp7ZXZlbnRzOnt9fSxkYXRhTGFiZWxzOnthbGlnbjpcImNlbnRlclwiLGZvcm1hdHRlcjpmdW5jdGlvbigpe3JldHVybiBudWxsPT09XG50aGlzLnk/XCJcIjpjLm51bWJlckZvcm1hdCh0aGlzLnksLTEpfSxwYWRkaW5nOjUsc3R5bGU6e2ZvbnRTaXplOlwiMTFweFwiLGZvbnRXZWlnaHQ6XCJib2xkXCIsY29sb3I6XCJjb250cmFzdFwiLHRleHRPdXRsaW5lOlwiMXB4IGNvbnRyYXN0XCJ9LHZlcnRpY2FsQWxpZ246XCJib3R0b21cIix4OjAseTowfSxjcm9wVGhyZXNob2xkOjMwMCxvcGFjaXR5OjEscG9pbnRSYW5nZTowLHNvZnRUaHJlc2hvbGQ6ITAsc3RhdGVzOntub3JtYWw6e2FuaW1hdGlvbjohMH0saG92ZXI6e2FuaW1hdGlvbjp7ZHVyYXRpb246NTB9LGxpbmVXaWR0aFBsdXM6MSxtYXJrZXI6e30saGFsbzp7c2l6ZToxMCxvcGFjaXR5Oi4yNX19LHNlbGVjdDp7YW5pbWF0aW9uOntkdXJhdGlvbjowfX0saW5hY3RpdmU6e2FuaW1hdGlvbjp7ZHVyYXRpb246NTB9LG9wYWNpdHk6LjJ9fSxzdGlja3lUcmFja2luZzohMCx0dXJib1RocmVzaG9sZDoxRTMsZmluZE5lYXJlc3RQb2ludEJ5OlwieFwifSx7YXhpc1R5cGVzOltcInhBeGlzXCIsXCJ5QXhpc1wiXSxcbmNvbGw6XCJzZXJpZXNcIixjb2xvckNvdW50ZXI6MCxjcm9wU2hvdWxkZXI6MSxkaXJlY3RUb3VjaDohMSxpc0NhcnRlc2lhbjohMCxwYXJhbGxlbEFycmF5czpbXCJ4XCIsXCJ5XCJdLHBvaW50Q2xhc3M6Yy5Qb2ludCxyZXF1aXJlU29ydGluZzohMCxzb3J0ZWQ6ITAsaW5pdDpmdW5jdGlvbihhLGIpe2wodGhpcyxcImluaXRcIix7b3B0aW9uczpifSk7dmFyIGQ9dGhpcyxlPWEuc2VyaWVzLGs7dGhpcy5ldmVudE9wdGlvbnM9dGhpcy5ldmVudE9wdGlvbnN8fHt9O2QuY2hhcnQ9YTtkLm9wdGlvbnM9Yj1kLnNldE9wdGlvbnMoYik7ZC5saW5rZWRTZXJpZXM9W107ZC5iaW5kQXhlcygpO3QoZCx7bmFtZTpiLm5hbWUsc3RhdGU6XCJcIix2aXNpYmxlOiExIT09Yi52aXNpYmxlLHNlbGVjdGVkOiEwPT09Yi5zZWxlY3RlZH0pO3ZhciBtPWIuZXZlbnRzO3kobSxmdW5jdGlvbihhLGIpe2MuaXNGdW5jdGlvbihhKSYmZC5ldmVudE9wdGlvbnNbYl0hPT1hJiYoYy5pc0Z1bmN0aW9uKGQuZXZlbnRPcHRpb25zW2JdKSYmXG5FKGQsYixkLmV2ZW50T3B0aW9uc1tiXSksZC5ldmVudE9wdGlvbnNbYl09YSxnKGQsYixhKSl9KTtpZihtJiZtLmNsaWNrfHxiLnBvaW50JiZiLnBvaW50LmV2ZW50cyYmYi5wb2ludC5ldmVudHMuY2xpY2t8fGIuYWxsb3dQb2ludFNlbGVjdClhLnJ1blRyYWNrZXJDbGljaz0hMDtkLmdldENvbG9yKCk7ZC5nZXRTeW1ib2woKTtkLnBhcmFsbGVsQXJyYXlzLmZvckVhY2goZnVuY3Rpb24oYSl7ZFthK1wiRGF0YVwiXXx8KGRbYStcIkRhdGFcIl09W10pfSk7ZC5wb2ludHN8fGQuZGF0YXx8ZC5zZXREYXRhKGIuZGF0YSwhMSk7ZC5pc0NhcnRlc2lhbiYmKGEuaGFzQ2FydGVzaWFuU2VyaWVzPSEwKTtlLmxlbmd0aCYmKGs9ZVtlLmxlbmd0aC0xXSk7ZC5faT1oKGsmJmsuX2ksLTEpKzE7YS5vcmRlclNlcmllcyh0aGlzLmluc2VydChlKSk7bCh0aGlzLFwiYWZ0ZXJJbml0XCIpfSxpbnNlcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5vcHRpb25zLmluZGV4LGQ7aWYoQyhiKSl7Zm9yKGQ9YS5sZW5ndGg7ZC0tOylpZihiPj1cbmgoYVtkXS5vcHRpb25zLmluZGV4LGFbZF0uX2kpKXthLnNwbGljZShkKzEsMCx0aGlzKTticmVha30tMT09PWQmJmEudW5zaGlmdCh0aGlzKTtkKz0xfWVsc2UgYS5wdXNoKHRoaXMpO3JldHVybiBoKGQsYS5sZW5ndGgtMSl9LGJpbmRBeGVzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEub3B0aW9ucyxkPWEuY2hhcnQsZTtsKHRoaXMsXCJiaW5kQXhlc1wiLG51bGwsZnVuY3Rpb24oKXsoYS5heGlzVHlwZXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe2Rba10uZm9yRWFjaChmdW5jdGlvbihkKXtlPWQub3B0aW9ucztpZihiW2tdPT09ZS5pbmRleHx8dm9pZCAwIT09YltrXSYmYltrXT09PWUuaWR8fHZvaWQgMD09PWJba10mJjA9PT1lLmluZGV4KWEuaW5zZXJ0KGQuc2VyaWVzKSxhW2tdPWQsZC5pc0RpcnR5PSEwfSk7YVtrXXx8YS5vcHRpb25hbEF4aXM9PT1rfHxjLmVycm9yKDE4LCEwLGQpfSl9KX0sdXBkYXRlUGFyYWxsZWxBcnJheXM6ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLnNlcmllcyxcbmM9YXJndW1lbnRzLGU9QyhiKT9mdW5jdGlvbihjKXt2YXIgZT1cInlcIj09PWMmJmQudG9ZRGF0YT9kLnRvWURhdGEoYSk6YVtjXTtkW2MrXCJEYXRhXCJdW2JdPWV9OmZ1bmN0aW9uKGEpe0FycmF5LnByb3RvdHlwZVtiXS5hcHBseShkW2ErXCJEYXRhXCJdLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMsMikpfTtkLnBhcmFsbGVsQXJyYXlzLmZvckVhY2goZSl9LGhhc0RhdGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aXNpYmxlJiZ2b2lkIDAhPT10aGlzLmRhdGFNYXgmJnZvaWQgMCE9PXRoaXMuZGF0YU1pbnx8dGhpcy52aXNpYmxlJiZ0aGlzLnlEYXRhJiYwPHRoaXMueURhdGEubGVuZ3RofSxhdXRvSW5jcmVtZW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLGI9dGhpcy54SW5jcmVtZW50LGQsYz1hLnBvaW50SW50ZXJ2YWxVbml0LGU9dGhpcy5jaGFydC50aW1lO2I9aChiLGEucG9pbnRTdGFydCwwKTt0aGlzLnBvaW50SW50ZXJ2YWw9ZD1oKHRoaXMucG9pbnRJbnRlcnZhbCxcbmEucG9pbnRJbnRlcnZhbCwxKTtjJiYoYT1uZXcgZS5EYXRlKGIpLFwiZGF5XCI9PT1jP2Uuc2V0KFwiRGF0ZVwiLGEsZS5nZXQoXCJEYXRlXCIsYSkrZCk6XCJtb250aFwiPT09Yz9lLnNldChcIk1vbnRoXCIsYSxlLmdldChcIk1vbnRoXCIsYSkrZCk6XCJ5ZWFyXCI9PT1jJiZlLnNldChcIkZ1bGxZZWFyXCIsYSxlLmdldChcIkZ1bGxZZWFyXCIsYSkrZCksZD1hLmdldFRpbWUoKS1iKTt0aGlzLnhJbmNyZW1lbnQ9YitkO3JldHVybiBifSxzZXRPcHRpb25zOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhcnQsYz1iLm9wdGlvbnMsZT1jLnBsb3RPcHRpb25zLGs9Yi51c2VyT3B0aW9uc3x8e307YT1MKGEpO2I9Yi5zdHlsZWRNb2RlO3ZhciBnPXtwbG90T3B0aW9uczplLHVzZXJPcHRpb25zOmF9O2wodGhpcyxcInNldE9wdGlvbnNcIixnKTt2YXIgZj1nLnBsb3RPcHRpb25zW3RoaXMudHlwZV0scD1rLnBsb3RPcHRpb25zfHx7fTt0aGlzLnVzZXJPcHRpb25zPWcudXNlck9wdGlvbnM7az1MKGYsZS5zZXJpZXMsay5wbG90T3B0aW9ucyYmXG5rLnBsb3RPcHRpb25zW3RoaXMudHlwZV0sYSk7dGhpcy50b29sdGlwT3B0aW9ucz1MKGQudG9vbHRpcCxkLnBsb3RPcHRpb25zLnNlcmllcyYmZC5wbG90T3B0aW9ucy5zZXJpZXMudG9vbHRpcCxkLnBsb3RPcHRpb25zW3RoaXMudHlwZV0udG9vbHRpcCxjLnRvb2x0aXAudXNlck9wdGlvbnMsZS5zZXJpZXMmJmUuc2VyaWVzLnRvb2x0aXAsZVt0aGlzLnR5cGVdLnRvb2x0aXAsYS50b29sdGlwKTt0aGlzLnN0aWNreVRyYWNraW5nPWgoYS5zdGlja3lUcmFja2luZyxwW3RoaXMudHlwZV0mJnBbdGhpcy50eXBlXS5zdGlja3lUcmFja2luZyxwLnNlcmllcyYmcC5zZXJpZXMuc3RpY2t5VHJhY2tpbmcsdGhpcy50b29sdGlwT3B0aW9ucy5zaGFyZWQmJiF0aGlzLm5vU2hhcmVkVG9vbHRpcD8hMDprLnN0aWNreVRyYWNraW5nKTtudWxsPT09Zi5tYXJrZXImJmRlbGV0ZSBrLm1hcmtlcjt0aGlzLnpvbmVBeGlzPWsuem9uZUF4aXM7Yz10aGlzLnpvbmVzPShrLnpvbmVzfHxbXSkuc2xpY2UoKTtcbiFrLm5lZ2F0aXZlQ29sb3ImJiFrLm5lZ2F0aXZlRmlsbENvbG9yfHxrLnpvbmVzfHwoZT17dmFsdWU6a1t0aGlzLnpvbmVBeGlzK1wiVGhyZXNob2xkXCJdfHxrLnRocmVzaG9sZHx8MCxjbGFzc05hbWU6XCJoaWdoY2hhcnRzLW5lZ2F0aXZlXCJ9LGJ8fChlLmNvbG9yPWsubmVnYXRpdmVDb2xvcixlLmZpbGxDb2xvcj1rLm5lZ2F0aXZlRmlsbENvbG9yKSxjLnB1c2goZSkpO2MubGVuZ3RoJiZ6KGNbYy5sZW5ndGgtMV0udmFsdWUpJiZjLnB1c2goYj97fTp7Y29sb3I6dGhpcy5jb2xvcixmaWxsQ29sb3I6dGhpcy5maWxsQ29sb3J9KTtsKHRoaXMsXCJhZnRlclNldE9wdGlvbnNcIix7b3B0aW9uczprfSk7cmV0dXJuIGt9LGdldE5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLm9wdGlvbnMubmFtZSxcIlNlcmllcyBcIisodGhpcy5pbmRleCsxKSl9LGdldEN5Y2xpYzpmdW5jdGlvbihhLGIsZCl7dmFyIGM9dGhpcy5jaGFydCxlPXRoaXMudXNlck9wdGlvbnMsaz1hK1wiSW5kZXhcIixnPWErXCJDb3VudGVyXCIsXG5mPWQ/ZC5sZW5ndGg6aChjLm9wdGlvbnMuY2hhcnRbYStcIkNvdW50XCJdLGNbYStcIkNvdW50XCJdKTtpZighYil7dmFyIHI9aChlW2tdLGVbXCJfXCIra10pO3oocil8fChjLnNlcmllcy5sZW5ndGh8fChjW2ddPTApLGVbXCJfXCIra109cj1jW2ddJWYsY1tnXSs9MSk7ZCYmKGI9ZFtyXSl9dm9pZCAwIT09ciYmKHRoaXNba109cik7dGhpc1thXT1ifSxnZXRDb2xvcjpmdW5jdGlvbigpe3RoaXMuY2hhcnQuc3R5bGVkTW9kZT90aGlzLmdldEN5Y2xpYyhcImNvbG9yXCIpOnRoaXMub3B0aW9ucy5jb2xvckJ5UG9pbnQ/dGhpcy5vcHRpb25zLmNvbG9yPW51bGw6dGhpcy5nZXRDeWNsaWMoXCJjb2xvclwiLHRoaXMub3B0aW9ucy5jb2xvcnx8ZVt0aGlzLnR5cGVdLmNvbG9yLHRoaXMuY2hhcnQub3B0aW9ucy5jb2xvcnMpfSxnZXRTeW1ib2w6ZnVuY3Rpb24oKXt0aGlzLmdldEN5Y2xpYyhcInN5bWJvbFwiLHRoaXMub3B0aW9ucy5tYXJrZXIuc3ltYm9sLHRoaXMuY2hhcnQub3B0aW9ucy5zeW1ib2xzKX0sZmluZFBvaW50SW5kZXg6ZnVuY3Rpb24oYSxcbmIpe3ZhciBkPWEuaWQ7YT1hLng7dmFyIGM9dGhpcy5wb2ludHMsZTtpZihkKXt2YXIgaz0oZD10aGlzLmNoYXJ0LmdldChkKSkmJmQuaW5kZXg7dm9pZCAwIT09ayYmKGU9ITApfXZvaWQgMD09PWsmJkMoYSkmJihrPXRoaXMueERhdGEuaW5kZXhPZihhLGIpKTstMSE9PWsmJnZvaWQgMCE9PWsmJnRoaXMuY3JvcHBlZCYmKGs9az49dGhpcy5jcm9wU3RhcnQ/ay10aGlzLmNyb3BTdGFydDprKTshZSYmY1trXSYmY1trXS50b3VjaGVkJiYoaz12b2lkIDApO3JldHVybiBrfSxkcmF3TGVnZW5kU3ltYm9sOmMuTGVnZW5kU3ltYm9sTWl4aW4uZHJhd0xpbmVNYXJrZXIsdXBkYXRlRGF0YTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLm9wdGlvbnMsZD10aGlzLnBvaW50cyxjPVtdLGUsayxnLGg9dGhpcy5yZXF1aXJlU29ydGluZyxmPWEubGVuZ3RoPT09ZC5sZW5ndGgsbD0hMDt0aGlzLnhJbmNyZW1lbnQ9bnVsbDthLmZvckVhY2goZnVuY3Rpb24oYSxrKXt2YXIgbT16KGEpJiZ0aGlzLnBvaW50Q2xhc3MucHJvdG90eXBlLm9wdGlvbnNUb09iamVjdC5jYWxsKHtzZXJpZXM6dGhpc30sXG5hKXx8e307dmFyIHI9bS54O2lmKG0uaWR8fEMocikpaWYocj10aGlzLmZpbmRQb2ludEluZGV4KG0sZyksLTE9PT1yfHx2b2lkIDA9PT1yP2MucHVzaChhKTpkW3JdJiZhIT09Yi5kYXRhW3JdPyhkW3JdLnVwZGF0ZShhLCExLG51bGwsITEpLGRbcl0udG91Y2hlZD0hMCxoJiYoZz1yKzEpKTpkW3JdJiYoZFtyXS50b3VjaGVkPSEwKSwhZnx8ayE9PXJ8fHRoaXMuaGFzRGVyaXZlZERhdGEpZT0hMH0sdGhpcyk7aWYoZSlmb3IoYT1kLmxlbmd0aDthLS07KShrPWRbYV0pJiYhay50b3VjaGVkJiZrLnJlbW92ZSghMSk7ZWxzZSBmP2EuZm9yRWFjaChmdW5jdGlvbihhLGIpe2RbYl0udXBkYXRlJiZhIT09ZFtiXS55JiZkW2JdLnVwZGF0ZShhLCExLG51bGwsITEpfSk6bD0hMTtkLmZvckVhY2goZnVuY3Rpb24oYSl7YSYmKGEudG91Y2hlZD0hMSl9KTtpZighbClyZXR1cm4hMTtjLmZvckVhY2goZnVuY3Rpb24oYSl7dGhpcy5hZGRQb2ludChhLCExLG51bGwsbnVsbCwhMSl9LHRoaXMpO3JldHVybiEwfSxcbnNldERhdGE6ZnVuY3Rpb24oYSxiLGQsZSl7dmFyIGs9dGhpcyxnPWsucG9pbnRzLGY9ZyYmZy5sZW5ndGh8fDAscixsPWsub3B0aW9ucyxwPWsuY2hhcnQseD1udWxsLEE9ay54QXhpczt4PWwudHVyYm9UaHJlc2hvbGQ7dmFyIHU9dGhpcy54RGF0YSxuPXRoaXMueURhdGEscT0ocj1rLnBvaW50QXJyYXlNYXApJiZyLmxlbmd0aCx5PWwua2V5cyx0PTAsRT0xLEw7YT1hfHxbXTtyPWEubGVuZ3RoO2I9aChiLCEwKTshMSE9PWUmJnImJmYmJiFrLmNyb3BwZWQmJiFrLmhhc0dyb3VwZWREYXRhJiZrLnZpc2libGUmJiFrLmlzU2VyaWVzQm9vc3RpbmcmJihMPXRoaXMudXBkYXRlRGF0YShhKSk7aWYoIUwpe2sueEluY3JlbWVudD1udWxsO2suY29sb3JDb3VudGVyPTA7dGhpcy5wYXJhbGxlbEFycmF5cy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2tbYStcIkRhdGFcIl0ubGVuZ3RoPTB9KTtpZih4JiZyPngpaWYoeD1rLmdldEZpcnN0VmFsaWRQb2ludChhKSxDKHgpKWZvcihkPTA7ZDxyO2QrKyl1W2RdPVxudGhpcy5hdXRvSW5jcmVtZW50KCksbltkXT1hW2RdO2Vsc2UgaWYodih4KSlpZihxKWZvcihkPTA7ZDxyO2QrKyllPWFbZF0sdVtkXT1lWzBdLG5bZF09ZS5zbGljZSgxLHErMSk7ZWxzZSBmb3IoeSYmKHQ9eS5pbmRleE9mKFwieFwiKSxFPXkuaW5kZXhPZihcInlcIiksdD0wPD10P3Q6MCxFPTA8PUU/RToxKSxkPTA7ZDxyO2QrKyllPWFbZF0sdVtkXT1lW3RdLG5bZF09ZVtFXTtlbHNlIGMuZXJyb3IoMTIsITEscCk7ZWxzZSBmb3IoZD0wO2Q8cjtkKyspdm9pZCAwIT09YVtkXSYmKGU9e3NlcmllczprfSxrLnBvaW50Q2xhc3MucHJvdG90eXBlLmFwcGx5T3B0aW9ucy5hcHBseShlLFthW2RdXSksay51cGRhdGVQYXJhbGxlbEFycmF5cyhlLGQpKTtuJiZIKG5bMF0pJiZjLmVycm9yKDE0LCEwLHApO2suZGF0YT1bXTtrLm9wdGlvbnMuZGF0YT1rLnVzZXJPcHRpb25zLmRhdGE9YTtmb3IoZD1mO2QtLTspZ1tkXSYmZ1tkXS5kZXN0cm95JiZnW2RdLmRlc3Ryb3koKTtBJiYoQS5taW5SYW5nZT1cbkEudXNlck1pblJhbmdlKTtrLmlzRGlydHk9cC5pc0RpcnR5Qm94PSEwO2suaXNEaXJ0eURhdGE9ISFnO2Q9ITF9XCJwb2ludFwiPT09bC5sZWdlbmRUeXBlJiYodGhpcy5wcm9jZXNzRGF0YSgpLHRoaXMuZ2VuZXJhdGVQb2ludHMoKSk7YiYmcC5yZWRyYXcoZCl9LHByb2Nlc3NEYXRhOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueERhdGEsZD10aGlzLnlEYXRhLGU9Yi5sZW5ndGg7dmFyIGs9MDt2YXIgZz10aGlzLnhBeGlzLGg9dGhpcy5vcHRpb25zO3ZhciBmPWguY3JvcFRocmVzaG9sZDt2YXIgbD10aGlzLmdldEV4dHJlbWVzRnJvbUFsbHx8aC5nZXRFeHRyZW1lc0Zyb21BbGwscD10aGlzLmlzQ2FydGVzaWFuO2g9ZyYmZy52YWwybGluO3ZhciB1PWcmJmcuaXNMb2csbj10aGlzLnJlcXVpcmVTb3J0aW5nO2lmKHAmJiF0aGlzLmlzRGlydHkmJiFnLmlzRGlydHkmJiF0aGlzLnlBeGlzLmlzRGlydHkmJiFhKXJldHVybiExO2lmKGcpe2E9Zy5nZXRFeHRyZW1lcygpO3ZhciBxPWEubWluO1xudmFyIHY9YS5tYXh9aWYocCYmdGhpcy5zb3J0ZWQmJiFsJiYoIWZ8fGU+Znx8dGhpcy5mb3JjZUNyb3ApKWlmKGJbZS0xXTxxfHxiWzBdPnYpYj1bXSxkPVtdO2Vsc2UgaWYodGhpcy55RGF0YSYmKGJbMF08cXx8YltlLTFdPnYpKXtrPXRoaXMuY3JvcERhdGEodGhpcy54RGF0YSx0aGlzLnlEYXRhLHEsdik7Yj1rLnhEYXRhO2Q9ay55RGF0YTtrPWsuc3RhcnQ7dmFyIHk9ITB9Zm9yKGY9Yi5sZW5ndGh8fDE7LS1mOylpZihlPXU/aChiW2ZdKS1oKGJbZi0xXSk6YltmXS1iW2YtMV0sMDxlJiYodm9pZCAwPT09dHx8ZTx0KSl2YXIgdD1lO2Vsc2UgMD5lJiZuJiYoYy5lcnJvcigxNSwhMSx0aGlzLmNoYXJ0KSxuPSExKTt0aGlzLmNyb3BwZWQ9eTt0aGlzLmNyb3BTdGFydD1rO3RoaXMucHJvY2Vzc2VkWERhdGE9Yjt0aGlzLnByb2Nlc3NlZFlEYXRhPWQ7dGhpcy5jbG9zZXN0UG9pbnRSYW5nZT10aGlzLmJhc2VQb2ludFJhbmdlPXR9LGNyb3BEYXRhOmZ1bmN0aW9uKGEsYixkLGUsYyl7dmFyIGs9XG5hLmxlbmd0aCxnPTAsZj1rLHI7Yz1oKGMsdGhpcy5jcm9wU2hvdWxkZXIpO2ZvcihyPTA7cjxrO3IrKylpZihhW3JdPj1kKXtnPU1hdGgubWF4KDAsci1jKTticmVha31mb3IoZD1yO2Q8aztkKyspaWYoYVtkXT5lKXtmPWQrYzticmVha31yZXR1cm57eERhdGE6YS5zbGljZShnLGYpLHlEYXRhOmIuc2xpY2UoZyxmKSxzdGFydDpnLGVuZDpmfX0sZ2VuZXJhdGVQb2ludHM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMsYj1hLmRhdGEsZD10aGlzLmRhdGEsZSxjPXRoaXMucHJvY2Vzc2VkWERhdGEsZz10aGlzLnByb2Nlc3NlZFlEYXRhLGY9dGhpcy5wb2ludENsYXNzLGg9Yy5sZW5ndGgscD10aGlzLmNyb3BTdGFydHx8MCx1PXRoaXMuaGFzR3JvdXBlZERhdGE7YT1hLmtleXM7dmFyIHE9W10sdjtkfHx1fHwoZD1bXSxkLmxlbmd0aD1iLmxlbmd0aCxkPXRoaXMuZGF0YT1kKTthJiZ1JiYodGhpcy5vcHRpb25zLmtleXM9ITEpO2Zvcih2PTA7djxoO3YrKyl7dmFyIHk9cCt2O2lmKHUpe3ZhciBFPVxuKG5ldyBmKS5pbml0KHRoaXMsW2Nbdl1dLmNvbmNhdChuKGdbdl0pKSk7RS5kYXRhR3JvdXA9dGhpcy5ncm91cE1hcFt2XTtFLmRhdGFHcm91cC5vcHRpb25zJiYoRS5vcHRpb25zPUUuZGF0YUdyb3VwLm9wdGlvbnMsdChFLEUuZGF0YUdyb3VwLm9wdGlvbnMpLGRlbGV0ZSBFLmRhdGFMYWJlbHMpfWVsc2UoRT1kW3ldKXx8dm9pZCAwPT09Ylt5XXx8KGRbeV09RT0obmV3IGYpLmluaXQodGhpcyxiW3ldLGNbdl0pKTtFJiYoRS5pbmRleD15LHFbdl09RSl9dGhpcy5vcHRpb25zLmtleXM9YTtpZihkJiYoaCE9PShlPWQubGVuZ3RoKXx8dSkpZm9yKHY9MDt2PGU7disrKXYhPT1wfHx1fHwodis9aCksZFt2XSYmKGRbdl0uZGVzdHJveUVsZW1lbnRzKCksZFt2XS5wbG90WD12b2lkIDApO3RoaXMuZGF0YT1kO3RoaXMucG9pbnRzPXE7bCh0aGlzLFwiYWZ0ZXJHZW5lcmF0ZVBvaW50c1wiKX0sZ2V0WEV4dHJlbWVzOmZ1bmN0aW9uKGEpe3JldHVybnttaW46RyhhKSxtYXg6RihhKX19LGdldEV4dHJlbWVzOmZ1bmN0aW9uKGEpe3ZhciBiPVxudGhpcy54QXhpcyxkPXRoaXMueUF4aXMsZT10aGlzLnByb2Nlc3NlZFhEYXRhfHx0aGlzLnhEYXRhLGM9W10saz0wLGc9MDt2YXIgZj0wO3ZhciBoPXRoaXMucmVxdWlyZVNvcnRpbmc/dGhpcy5jcm9wU2hvdWxkZXI6MCxwPWQ/ZC5wb3NpdGl2ZVZhbHVlc09ubHk6ITEsdTthPWF8fHRoaXMuc3RhY2tlZFlEYXRhfHx0aGlzLnByb2Nlc3NlZFlEYXRhfHxbXTtkPWEubGVuZ3RoO2ImJihmPWIuZ2V0RXh0cmVtZXMoKSxnPWYubWluLGY9Zi5tYXgpO2Zvcih1PTA7dTxkO3UrKyl7dmFyIG49ZVt1XTt2YXIgcT1hW3VdO3ZhciB5PShDKHEpfHx2KHEpKSYmKHEubGVuZ3RofHwwPHF8fCFwKTtuPXRoaXMuZ2V0RXh0cmVtZXNGcm9tQWxsfHx0aGlzLm9wdGlvbnMuZ2V0RXh0cmVtZXNGcm9tQWxsfHx0aGlzLmNyb3BwZWR8fCFifHwoZVt1K2hdfHxuKT49ZyYmKGVbdS1oXXx8bik8PWY7aWYoeSYmbilpZih5PXEubGVuZ3RoKWZvcig7eS0tOylDKHFbeV0pJiYoY1trKytdPXFbeV0pO2Vsc2UgY1trKytdPVxucX10aGlzLmRhdGFNaW49RyhjKTt0aGlzLmRhdGFNYXg9RihjKTtsKHRoaXMsXCJhZnRlckdldEV4dHJlbWVzXCIpfSxnZXRGaXJzdFZhbGlkUG9pbnQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW51bGwsZD1hLmxlbmd0aCxlPTA7bnVsbD09PWImJmU8ZDspYj1hW2VdLGUrKztyZXR1cm4gYn0sdHJhbnNsYXRlOmZ1bmN0aW9uKCl7dGhpcy5wcm9jZXNzZWRYRGF0YXx8dGhpcy5wcm9jZXNzRGF0YSgpO3RoaXMuZ2VuZXJhdGVQb2ludHMoKTt2YXIgYj10aGlzLm9wdGlvbnMsZD1iLnN0YWNraW5nLGU9dGhpcy54QXhpcyxjPWUuY2F0ZWdvcmllcyxnPXRoaXMueUF4aXMsbT10aGlzLnBvaW50cyxmPW0ubGVuZ3RoLHA9ISF0aGlzLm1vZGlmeVZhbHVlLHUsbj10aGlzLnBvaW50UGxhY2VtZW50VG9YVmFsdWUoKSxxPUMobikseT1iLnRocmVzaG9sZCx0PWIuc3RhcnRGcm9tVGhyZXNob2xkP3k6MCxFLEw9dGhpcy56b25lQXhpc3x8XCJ5XCIsQj1OdW1iZXIuTUFYX1ZBTFVFO2Zvcih1PTA7dTxmO3UrKyl7dmFyIEg9XG5tW3VdLEc9SC54O3ZhciBGPUgueTt2YXIgST1ILmxvdyxNPWQmJmcuc3RhY2tzWyh0aGlzLm5lZ1N0YWNrcyYmRjwodD8wOnkpP1wiLVwiOlwiXCIpK3RoaXMuc3RhY2tLZXldO2cucG9zaXRpdmVWYWx1ZXNPbmx5JiZudWxsIT09RiYmMD49RiYmKEguaXNOdWxsPSEwKTtILnBsb3RYPUU9YShNYXRoLm1pbihNYXRoLm1heCgtMUU1LGUudHJhbnNsYXRlKEcsMCwwLDAsMSxuLFwiZmxhZ3NcIj09PXRoaXMudHlwZSkpLDFFNSkpO2lmKGQmJnRoaXMudmlzaWJsZSYmTSYmTVtHXSl7dmFyIFg9dGhpcy5nZXRTdGFja0luZGljYXRvcihYLEcsdGhpcy5pbmRleCk7aWYoIUguaXNOdWxsKXt2YXIgUD1NW0ddO3ZhciBZPVAucG9pbnRzW1gua2V5XX19dihZKSYmKEk9WVswXSxGPVlbMV0sST09PXQmJlgua2V5PT09TVtHXS5iYXNlJiYoST1oKEMoeSkmJnksZy5taW4pKSxnLnBvc2l0aXZlVmFsdWVzT25seSYmMD49SSYmKEk9bnVsbCksSC50b3RhbD1ILnN0YWNrVG90YWw9UC50b3RhbCxILnBlcmNlbnRhZ2U9XG5QLnRvdGFsJiZILnkvUC50b3RhbCoxMDAsSC5zdGFja1k9Rix0aGlzLmlycmVndWxhcldpZHRoc3x8UC5zZXRPZmZzZXQodGhpcy5wb2ludFhPZmZzZXR8fDAsdGhpcy5iYXJXfHwwKSk7SC55Qm90dG9tPXooSSk/TWF0aC5taW4oTWF0aC5tYXgoLTFFNSxnLnRyYW5zbGF0ZShJLDAsMSwwLDEpKSwxRTUpOm51bGw7cCYmKEY9dGhpcy5tb2RpZnlWYWx1ZShGLEgpKTtILnBsb3RZPUY9XCJudW1iZXJcIj09PXR5cGVvZiBGJiZJbmZpbml0eSE9PUY/TWF0aC5taW4oTWF0aC5tYXgoLTFFNSxnLnRyYW5zbGF0ZShGLDAsMSwwLDEpKSwxRTUpOnZvaWQgMDtILmlzSW5zaWRlPXZvaWQgMCE9PUYmJjA8PUYmJkY8PWcubGVuJiYwPD1FJiZFPD1lLmxlbjtILmNsaWVudFg9cT9hKGUudHJhbnNsYXRlKEcsMCwwLDAsMSxuKSk6RTtILm5lZ2F0aXZlPUhbTF08KGJbTCtcIlRocmVzaG9sZFwiXXx8eXx8MCk7SC5jYXRlZ29yeT1jJiZ2b2lkIDAhPT1jW0gueF0/Y1tILnhdOkgueDtpZighSC5pc051bGwpe3ZvaWQgMCE9PVxuWiYmKEI9TWF0aC5taW4oQixNYXRoLmFicyhFLVopKSk7dmFyIFo9RX1ILnpvbmU9dGhpcy56b25lcy5sZW5ndGgmJkguZ2V0Wm9uZSgpfXRoaXMuY2xvc2VzdFBvaW50UmFuZ2VQeD1CO2wodGhpcyxcImFmdGVyVHJhbnNsYXRlXCIpfSxnZXRWYWxpZFBvaW50czpmdW5jdGlvbihhLGIsZCl7dmFyIGU9dGhpcy5jaGFydDtyZXR1cm4oYXx8dGhpcy5wb2ludHN8fFtdKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGImJiFlLmlzSW5zaWRlUGxvdChhLnBsb3RYLGEucGxvdFksZS5pbnZlcnRlZCk/ITE6ZHx8IWEuaXNOdWxsfSl9LGdldENsaXBCb3g6ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzLm9wdGlvbnMsZT10aGlzLmNoYXJ0LGM9ZS5pbnZlcnRlZCxrPXRoaXMueEF4aXMsZz1rJiZ0aGlzLnlBeGlzO2EmJiExPT09ZC5jbGlwJiZnP2E9Yz97eTotZS5jaGFydFdpZHRoK2cubGVuK2cucG9zLGhlaWdodDplLmNoYXJ0V2lkdGgsd2lkdGg6ZS5jaGFydEhlaWdodCx4Oi1lLmNoYXJ0SGVpZ2h0K1xuay5sZW4ray5wb3N9Ont5Oi1nLnBvcyxoZWlnaHQ6ZS5jaGFydEhlaWdodCx3aWR0aDplLmNoYXJ0V2lkdGgseDotay5wb3N9OihhPXRoaXMuY2xpcEJveHx8ZS5jbGlwQm94LGImJihhLndpZHRoPWUucGxvdFNpemVYLGEueD0wKSk7cmV0dXJuIGI/e3dpZHRoOmEud2lkdGgseDphLnh9OmF9LHNldENsaXA6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jaGFydCxkPXRoaXMub3B0aW9ucyxlPWIucmVuZGVyZXIsYz1iLmludmVydGVkLGs9dGhpcy5jbGlwQm94LGc9dGhpcy5nZXRDbGlwQm94KGEpLGY9dGhpcy5zaGFyZWRDbGlwS2V5fHxbXCJfc2hhcmVkQ2xpcFwiLGEmJmEuZHVyYXRpb24sYSYmYS5lYXNpbmcsZy5oZWlnaHQsZC54QXhpcyxkLnlBeGlzXS5qb2luKCksaD1iW2ZdLGw9YltmK1wibVwiXTtofHwoYSYmKGcud2lkdGg9MCxjJiYoZy54PWIucGxvdFNpemVYKyghMSE9PWQuY2xpcD8wOmIucGxvdFRvcCkpLGJbZitcIm1cIl09bD1lLmNsaXBSZWN0KGM/Yi5wbG90U2l6ZVgrOTk6LTk5LFxuYz8tYi5wbG90TGVmdDotYi5wbG90VG9wLDk5LGM/Yi5jaGFydFdpZHRoOmIuY2hhcnRIZWlnaHQpKSxiW2ZdPWg9ZS5jbGlwUmVjdChnKSxoLmNvdW50PXtsZW5ndGg6MH0pO2EmJiFoLmNvdW50W3RoaXMuaW5kZXhdJiYoaC5jb3VudFt0aGlzLmluZGV4XT0hMCxoLmNvdW50Lmxlbmd0aCs9MSk7aWYoITEhPT1kLmNsaXB8fGEpdGhpcy5ncm91cC5jbGlwKGF8fGs/aDpiLmNsaXBSZWN0KSx0aGlzLm1hcmtlckdyb3VwLmNsaXAobCksdGhpcy5zaGFyZWRDbGlwS2V5PWY7YXx8KGguY291bnRbdGhpcy5pbmRleF0mJihkZWxldGUgaC5jb3VudFt0aGlzLmluZGV4XSwtLWguY291bnQubGVuZ3RoKSwwPT09aC5jb3VudC5sZW5ndGgmJmYmJmJbZl0mJihrfHwoYltmXT1iW2ZdLmRlc3Ryb3koKSksYltmK1wibVwiXSYmKGJbZitcIm1cIl09YltmK1wibVwiXS5kZXN0cm95KCkpKSl9LGFuaW1hdGU6ZnVuY3Rpb24oYSl7dmFyIGQ9dGhpcy5jaGFydCxlPWIodGhpcy5vcHRpb25zLmFuaW1hdGlvbik7XG5pZihhKXRoaXMuc2V0Q2xpcChlKTtlbHNle3ZhciBjPXRoaXMuc2hhcmVkQ2xpcEtleTthPWRbY107dmFyIGs9dGhpcy5nZXRDbGlwQm94KGUsITApO2EmJmEuYW5pbWF0ZShrLGUpO2RbYytcIm1cIl0mJmRbYytcIm1cIl0uYW5pbWF0ZSh7d2lkdGg6ay53aWR0aCs5OSx4OmsueC0oZC5pbnZlcnRlZD8wOjk5KX0sZSk7dGhpcy5hbmltYXRlPW51bGx9fSxhZnRlckFuaW1hdGU6ZnVuY3Rpb24oKXt0aGlzLnNldENsaXAoKTtsKHRoaXMsXCJhZnRlckFuaW1hdGVcIik7dGhpcy5maW5pc2hlZEFuaW1hdGluZz0hMH0sZHJhd1BvaW50czpmdW5jdGlvbigpe3ZhciBhPXRoaXMucG9pbnRzLGI9dGhpcy5jaGFydCxkLGU9dGhpcy5vcHRpb25zLm1hcmtlcixjPXRoaXNbdGhpcy5zcGVjaWFsR3JvdXBdfHx0aGlzLm1hcmtlckdyb3VwO3ZhciBnPXRoaXMueEF4aXM7dmFyIGY9aChlLmVuYWJsZWQsIWd8fGcuaXNSYWRpYWw/ITA6bnVsbCx0aGlzLmNsb3Nlc3RQb2ludFJhbmdlUHg+PWUuZW5hYmxlZFRocmVzaG9sZCpcbmUucmFkaXVzKTtpZighMSE9PWUuZW5hYmxlZHx8dGhpcy5faGFzUG9pbnRNYXJrZXJzKWZvcihnPTA7ZzxhLmxlbmd0aDtnKyspe3ZhciBsPWFbZ107dmFyIHA9KGQ9bC5ncmFwaGljKT9cImFuaW1hdGVcIjpcImF0dHJcIjt2YXIgdT1sLm1hcmtlcnx8e307dmFyIG49ISFsLm1hcmtlcjt2YXIgcT1mJiZ2b2lkIDA9PT11LmVuYWJsZWR8fHUuZW5hYmxlZDt2YXIgdj0hMSE9PWwuaXNJbnNpZGU7aWYocSYmIWwuaXNOdWxsKXt2YXIgeT1oKHUuc3ltYm9sLHRoaXMuc3ltYm9sKTtxPXRoaXMubWFya2VyQXR0cmlicyhsLGwuc2VsZWN0ZWQmJlwic2VsZWN0XCIpO2Q/ZFt2P1wic2hvd1wiOlwiaGlkZVwiXSh2KS5hbmltYXRlKHEpOnYmJigwPHEud2lkdGh8fGwuaGFzSW1hZ2UpJiYobC5ncmFwaGljPWQ9Yi5yZW5kZXJlci5zeW1ib2woeSxxLngscS55LHEud2lkdGgscS5oZWlnaHQsbj91OmUpLmFkZChjKSk7aWYoZCYmIWIuc3R5bGVkTW9kZSlkW3BdKHRoaXMucG9pbnRBdHRyaWJzKGwsbC5zZWxlY3RlZCYmXG5cInNlbGVjdFwiKSk7ZCYmZC5hZGRDbGFzcyhsLmdldENsYXNzTmFtZSgpLCEwKX1lbHNlIGQmJihsLmdyYXBoaWM9ZC5kZXN0cm95KCkpfX0sbWFya2VyQXR0cmliczpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMub3B0aW9ucy5tYXJrZXIsZT1hLm1hcmtlcnx8e30sYz1lLnN5bWJvbHx8ZC5zeW1ib2wsaz1oKGUucmFkaXVzLGQucmFkaXVzKTtiJiYoZD1kLnN0YXRlc1tiXSxiPWUuc3RhdGVzJiZlLnN0YXRlc1tiXSxrPWgoYiYmYi5yYWRpdXMsZCYmZC5yYWRpdXMsaysoZCYmZC5yYWRpdXNQbHVzfHwwKSkpO2EuaGFzSW1hZ2U9YyYmMD09PWMuaW5kZXhPZihcInVybFwiKTthLmhhc0ltYWdlJiYoaz0wKTthPXt4Ok1hdGguZmxvb3IoYS5wbG90WCktayx5OmEucGxvdFkta307ayYmKGEud2lkdGg9YS5oZWlnaHQ9MiprKTtyZXR1cm4gYX0scG9pbnRBdHRyaWJzOmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcy5vcHRpb25zLm1hcmtlcixlPWEmJmEub3B0aW9ucyxjPWUmJmUubWFya2VyfHx7fSxcbms9dGhpcy5jb2xvcixnPWUmJmUuY29sb3IsZj1hJiZhLmNvbG9yO2U9aChjLmxpbmVXaWR0aCxkLmxpbmVXaWR0aCk7dmFyIGw9YSYmYS56b25lJiZhLnpvbmUuY29sb3I7YT0xO2s9Z3x8bHx8Znx8aztnPWMuZmlsbENvbG9yfHxkLmZpbGxDb2xvcnx8aztrPWMubGluZUNvbG9yfHxkLmxpbmVDb2xvcnx8aztiPWJ8fFwibm9ybWFsXCI7ZD1kLnN0YXRlc1tiXTtiPWMuc3RhdGVzJiZjLnN0YXRlc1tiXXx8e307ZT1oKGIubGluZVdpZHRoLGQubGluZVdpZHRoLGUraChiLmxpbmVXaWR0aFBsdXMsZC5saW5lV2lkdGhQbHVzLDApKTtnPWIuZmlsbENvbG9yfHxkLmZpbGxDb2xvcnx8ZztrPWIubGluZUNvbG9yfHxkLmxpbmVDb2xvcnx8azthPWgoYi5vcGFjaXR5LGQub3BhY2l0eSxhKTtyZXR1cm57c3Ryb2tlOmssXCJzdHJva2Utd2lkdGhcIjplLGZpbGw6ZyxvcGFjaXR5OmF9fSxkZXN0cm95OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsZD1iLmNoYXJ0LGU9L0FwcGxlV2ViS2l0XFwvNTMzLy50ZXN0KHUubmF2aWdhdG9yLnVzZXJBZ2VudCksXG5rLGcsZj1iLmRhdGF8fFtdLGgsbjtsKGIsXCJkZXN0cm95XCIpO2F8fEUoYik7KGIuYXhpc1R5cGVzfHxbXSkuZm9yRWFjaChmdW5jdGlvbihhKXsobj1iW2FdKSYmbi5zZXJpZXMmJihCKG4uc2VyaWVzLGIpLG4uaXNEaXJ0eT1uLmZvcmNlUmVkcmF3PSEwKX0pO2IubGVnZW5kSXRlbSYmYi5jaGFydC5sZWdlbmQuZGVzdHJveUl0ZW0oYik7Zm9yKGc9Zi5sZW5ndGg7Zy0tOykoaD1mW2ddKSYmaC5kZXN0cm95JiZoLmRlc3Ryb3koKTtiLnBvaW50cz1udWxsO2MuY2xlYXJUaW1lb3V0KGIuYW5pbWF0aW9uVGltZW91dCk7eShiLGZ1bmN0aW9uKGEsYil7YSBpbnN0YW5jZW9mIHAmJiFhLnN1cnZpdmUmJihrPWUmJlwiZ3JvdXBcIj09PWI/XCJoaWRlXCI6XCJkZXN0cm95XCIsYVtrXSgpKX0pO2QuaG92ZXJTZXJpZXM9PT1iJiYoZC5ob3ZlclNlcmllcz1udWxsKTtCKGQuc2VyaWVzLGIpO2Qub3JkZXJTZXJpZXMoKTt5KGIsZnVuY3Rpb24oZCxlKXthJiZcImhjRXZlbnRzXCI9PT1lfHxkZWxldGUgYltlXX0pfSxcbmdldEdyYXBoUGF0aDpmdW5jdGlvbihhLGIsZCl7dmFyIGU9dGhpcyxjPWUub3B0aW9ucyxrPWMuc3RlcCxnLGY9W10saD1bXSxsO2E9YXx8ZS5wb2ludHM7KGc9YS5yZXZlcnNlZCkmJmEucmV2ZXJzZSgpOyhrPXtyaWdodDoxLGNlbnRlcjoyfVtrXXx8ayYmMykmJmcmJihrPTQtayk7IWMuY29ubmVjdE51bGxzfHxifHxkfHwoYT10aGlzLmdldFZhbGlkUG9pbnRzKGEpKTthLmZvckVhY2goZnVuY3Rpb24oZyxtKXt2YXIgcj1nLnBsb3RYLHA9Zy5wbG90WSx1PWFbbS0xXTsoZy5sZWZ0Q2xpZmZ8fHUmJnUucmlnaHRDbGlmZikmJiFkJiYobD0hMCk7Zy5pc051bGwmJiF6KGIpJiYwPG0/bD0hYy5jb25uZWN0TnVsbHM6Zy5pc051bGwmJiFiP2w9ITA6KDA9PT1tfHxsP209W1wiTVwiLGcucGxvdFgsZy5wbG90WV06ZS5nZXRQb2ludFNwbGluZT9tPWUuZ2V0UG9pbnRTcGxpbmUoYSxnLG0pOms/KG09MT09PWs/W1wiTFwiLHUucGxvdFgscF06Mj09PWs/W1wiTFwiLCh1LnBsb3RYK3IpLzIsdS5wbG90WSxcblwiTFwiLCh1LnBsb3RYK3IpLzIscF06W1wiTFwiLHIsdS5wbG90WV0sbS5wdXNoKFwiTFwiLHIscCkpOm09W1wiTFwiLHIscF0saC5wdXNoKGcueCksayYmKGgucHVzaChnLngpLDI9PT1rJiZoLnB1c2goZy54KSksZi5wdXNoLmFwcGx5KGYsbSksbD0hMSl9KTtmLnhNYXA9aDtyZXR1cm4gZS5ncmFwaFBhdGg9Zn0sZHJhd0dyYXBoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPXRoaXMub3B0aW9ucyxkPSh0aGlzLmdhcHBlZFBhdGh8fHRoaXMuZ2V0R3JhcGhQYXRoKS5jYWxsKHRoaXMpLGU9dGhpcy5jaGFydC5zdHlsZWRNb2RlLGM9W1tcImdyYXBoXCIsXCJoaWdoY2hhcnRzLWdyYXBoXCJdXTtlfHxjWzBdLnB1c2goYi5saW5lQ29sb3J8fHRoaXMuY29sb3J8fFwiI2NjY2NjY1wiLGIuZGFzaFN0eWxlKTtjPWEuZ2V0Wm9uZXNHcmFwaHMoYyk7Yy5mb3JFYWNoKGZ1bmN0aW9uKGMsayl7dmFyIGc9Y1swXSxmPWFbZ10saD1mP1wiYW5pbWF0ZVwiOlwiYXR0clwiO2Y/KGYuZW5kWD1hLnByZXZlbnRHcmFwaEFuaW1hdGlvbj9cbm51bGw6ZC54TWFwLGYuYW5pbWF0ZSh7ZDpkfSkpOmQubGVuZ3RoJiYoYVtnXT1mPWEuY2hhcnQucmVuZGVyZXIucGF0aChkKS5hZGRDbGFzcyhjWzFdKS5hdHRyKHt6SW5kZXg6MX0pLmFkZChhLmdyb3VwKSk7ZiYmIWUmJihnPXtzdHJva2U6Y1syXSxcInN0cm9rZS13aWR0aFwiOmIubGluZVdpZHRoLGZpbGw6YS5maWxsR3JhcGgmJmEuY29sb3J8fFwibm9uZVwifSxjWzNdP2cuZGFzaHN0eWxlPWNbM106XCJzcXVhcmVcIiE9PWIubGluZWNhcCYmKGdbXCJzdHJva2UtbGluZWNhcFwiXT1nW1wic3Ryb2tlLWxpbmVqb2luXCJdPVwicm91bmRcIiksZltoXShnKS5zaGFkb3coMj5rJiZiLnNoYWRvdykpO2YmJihmLnN0YXJ0WD1kLnhNYXAsZi5pc0FyZWE9ZC5pc0FyZWEpfSl9LGdldFpvbmVzR3JhcGhzOmZ1bmN0aW9uKGEpe3RoaXMuem9uZXMuZm9yRWFjaChmdW5jdGlvbihiLGQpe2Q9W1wiem9uZS1ncmFwaC1cIitkLFwiaGlnaGNoYXJ0cy1ncmFwaCBoaWdoY2hhcnRzLXpvbmUtZ3JhcGgtXCIrZCtcIiBcIisoYi5jbGFzc05hbWV8fFxuXCJcIildO3RoaXMuY2hhcnQuc3R5bGVkTW9kZXx8ZC5wdXNoKGIuY29sb3J8fHRoaXMuY29sb3IsYi5kYXNoU3R5bGV8fHRoaXMub3B0aW9ucy5kYXNoU3R5bGUpO2EucHVzaChkKX0sdGhpcyk7cmV0dXJuIGF9LGFwcGx5Wm9uZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5jaGFydCxkPWIucmVuZGVyZXIsZT10aGlzLnpvbmVzLGMsZyxmPXRoaXMuY2xpcHN8fFtdLGwscD10aGlzLmdyYXBoLHU9dGhpcy5hcmVhLG49TWF0aC5tYXgoYi5jaGFydFdpZHRoLGIuY2hhcnRIZWlnaHQpLHE9dGhpc1sodGhpcy56b25lQXhpc3x8XCJ5XCIpK1wiQXhpc1wiXSx2PWIuaW52ZXJ0ZWQseSx0LEUsQz0hMTtpZihlLmxlbmd0aCYmKHB8fHUpJiZxJiZ2b2lkIDAhPT1xLm1pbil7dmFyIEw9cS5yZXZlcnNlZDt2YXIgej1xLmhvcml6O3AmJiF0aGlzLnNob3dMaW5lJiZwLmhpZGUoKTt1JiZ1LmhpZGUoKTt2YXIgQj1xLmdldEV4dHJlbWVzKCk7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsayl7Yz1MP3o/XG5iLnBsb3RXaWR0aDowOno/MDpxLnRvUGl4ZWxzKEIubWluKXx8MDtjPU1hdGgubWluKE1hdGgubWF4KGgoZyxjKSwwKSxuKTtnPU1hdGgubWluKE1hdGgubWF4KE1hdGgucm91bmQocS50b1BpeGVscyhoKGUudmFsdWUsQi5tYXgpLCEwKXx8MCksMCksbik7QyYmKGM9Zz1xLnRvUGl4ZWxzKEIubWF4KSk7eT1NYXRoLmFicyhjLWcpO3Q9TWF0aC5taW4oYyxnKTtFPU1hdGgubWF4KGMsZyk7cS5pc1hBeGlzPyhsPXt4OnY/RTp0LHk6MCx3aWR0aDp5LGhlaWdodDpufSx6fHwobC54PWIucGxvdEhlaWdodC1sLngpKToobD17eDowLHk6dj9FOnQsd2lkdGg6bixoZWlnaHQ6eX0seiYmKGwueT1iLnBsb3RXaWR0aC1sLnkpKTt2JiZkLmlzVk1MJiYobD1xLmlzWEF4aXM/e3g6MCx5Okw/dDpFLGhlaWdodDpsLndpZHRoLHdpZHRoOmIuY2hhcnRXaWR0aH06e3g6bC55LWIucGxvdExlZnQtYi5zcGFjaW5nQm94LngseTowLHdpZHRoOmwuaGVpZ2h0LGhlaWdodDpiLmNoYXJ0SGVpZ2h0fSk7ZltrXT9cbmZba10uYW5pbWF0ZShsKTpmW2tdPWQuY2xpcFJlY3QobCk7cCYmYVtcInpvbmUtZ3JhcGgtXCIra10uY2xpcChmW2tdKTt1JiZhW1wiem9uZS1hcmVhLVwiK2tdLmNsaXAoZltrXSk7Qz1lLnZhbHVlPkIubWF4O2EucmVzZXRab25lcyYmMD09PWcmJihnPXZvaWQgMCl9KTt0aGlzLmNsaXBzPWZ9ZWxzZSBhLnZpc2libGUmJihwJiZwLnNob3coITApLHUmJnUuc2hvdyghMCkpfSxpbnZlcnRHcm91cHM6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe1tcImdyb3VwXCIsXCJtYXJrZXJHcm91cFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2RbYl0mJihlLnJlbmRlcmVyLmlzVk1MJiZkW2JdLmF0dHIoe3dpZHRoOmQueUF4aXMubGVuLGhlaWdodDpkLnhBeGlzLmxlbn0pLGRbYl0ud2lkdGg9ZC55QXhpcy5sZW4sZFtiXS5oZWlnaHQ9ZC54QXhpcy5sZW4sZFtiXS5pbnZlcnQoYSkpfSl9dmFyIGQ9dGhpcyxlPWQuY2hhcnQ7aWYoZC54QXhpcyl7dmFyIGM9ZyhlLFwicmVzaXplXCIsYik7ZyhkLFwiZGVzdHJveVwiLFxuYyk7YihhKTtkLmludmVydEdyb3Vwcz1ifX0scGxvdEdyb3VwOmZ1bmN0aW9uKGEsYixkLGUsYyl7dmFyIGs9dGhpc1thXSxnPSFrO2cmJih0aGlzW2FdPWs9dGhpcy5jaGFydC5yZW5kZXJlci5nKCkuYXR0cih7ekluZGV4OmV8fC4xfSkuYWRkKGMpKTtrLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1cIitiK1wiIGhpZ2hjaGFydHMtc2VyaWVzLVwiK3RoaXMuaW5kZXgrXCIgaGlnaGNoYXJ0cy1cIit0aGlzLnR5cGUrXCItc2VyaWVzIFwiKyh6KHRoaXMuY29sb3JJbmRleCk/XCJoaWdoY2hhcnRzLWNvbG9yLVwiK3RoaXMuY29sb3JJbmRleCtcIiBcIjpcIlwiKSsodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8XCJcIikrKGsuaGFzQ2xhc3MoXCJoaWdoY2hhcnRzLXRyYWNrZXJcIik/XCIgaGlnaGNoYXJ0cy10cmFja2VyXCI6XCJcIiksITApO2suYXR0cih7dmlzaWJpbGl0eTpkfSlbZz9cImF0dHJcIjpcImFuaW1hdGVcIl0odGhpcy5nZXRQbG90Qm94KCkpO3JldHVybiBrfSxnZXRQbG90Qm94OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jaGFydCxcbmI9dGhpcy54QXhpcyxkPXRoaXMueUF4aXM7YS5pbnZlcnRlZCYmKGI9ZCxkPXRoaXMueEF4aXMpO3JldHVybnt0cmFuc2xhdGVYOmI/Yi5sZWZ0OmEucGxvdExlZnQsdHJhbnNsYXRlWTpkP2QudG9wOmEucGxvdFRvcCxzY2FsZVg6MSxzY2FsZVk6MX19LHJlbmRlcjpmdW5jdGlvbigpe3ZhciBhPXRoaXMsZD1hLmNoYXJ0LGU9YS5vcHRpb25zLGM9ISFhLmFuaW1hdGUmJmQucmVuZGVyZXIuaXNTVkcmJmIoZS5hbmltYXRpb24pLmR1cmF0aW9uLGc9YS52aXNpYmxlP1wiaW5oZXJpdFwiOlwiaGlkZGVuXCIsZj1lLnpJbmRleCxoPWEuaGFzUmVuZGVyZWQscD1kLnNlcmllc0dyb3VwLHU9ZC5pbnZlcnRlZDtsKHRoaXMsXCJyZW5kZXJcIik7dmFyIG49YS5wbG90R3JvdXAoXCJncm91cFwiLFwic2VyaWVzXCIsZyxmLHApO2EubWFya2VyR3JvdXA9YS5wbG90R3JvdXAoXCJtYXJrZXJHcm91cFwiLFwibWFya2Vyc1wiLGcsZixwKTtjJiZhLmFuaW1hdGUoITApO24uaW52ZXJ0ZWQ9YS5pc0NhcnRlc2lhbnx8YS5pbnZlcnRhYmxlP1xudTohMTthLmRyYXdHcmFwaCYmKGEuZHJhd0dyYXBoKCksYS5hcHBseVpvbmVzKCkpO2EudmlzaWJsZSYmYS5kcmF3UG9pbnRzKCk7YS5kcmF3RGF0YUxhYmVscyYmYS5kcmF3RGF0YUxhYmVscygpO2EucmVkcmF3UG9pbnRzJiZhLnJlZHJhd1BvaW50cygpO2EuZHJhd1RyYWNrZXImJiExIT09YS5vcHRpb25zLmVuYWJsZU1vdXNlVHJhY2tpbmcmJmEuZHJhd1RyYWNrZXIoKTthLmludmVydEdyb3Vwcyh1KTshMT09PWUuY2xpcHx8YS5zaGFyZWRDbGlwS2V5fHxofHxuLmNsaXAoZC5jbGlwUmVjdCk7YyYmYS5hbmltYXRlKCk7aHx8KGEuYW5pbWF0aW9uVGltZW91dD1xKGZ1bmN0aW9uKCl7YS5hZnRlckFuaW1hdGUoKX0sY3x8MCkpO2EuaXNEaXJ0eT0hMTthLmhhc1JlbmRlcmVkPSEwO2woYSxcImFmdGVyUmVuZGVyXCIpfSxyZWRyYXc6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNoYXJ0LGI9dGhpcy5pc0RpcnR5fHx0aGlzLmlzRGlydHlEYXRhLGQ9dGhpcy5ncm91cCxlPXRoaXMueEF4aXMsXG5jPXRoaXMueUF4aXM7ZCYmKGEuaW52ZXJ0ZWQmJmQuYXR0cih7d2lkdGg6YS5wbG90V2lkdGgsaGVpZ2h0OmEucGxvdEhlaWdodH0pLGQuYW5pbWF0ZSh7dHJhbnNsYXRlWDpoKGUmJmUubGVmdCxhLnBsb3RMZWZ0KSx0cmFuc2xhdGVZOmgoYyYmYy50b3AsYS5wbG90VG9wKX0pKTt0aGlzLnRyYW5zbGF0ZSgpO3RoaXMucmVuZGVyKCk7YiYmZGVsZXRlIHRoaXMua2RUcmVlfSxrZEF4aXNBcnJheTpbXCJjbGllbnRYXCIsXCJwbG90WVwiXSxzZWFyY2hQb2ludDpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMueEF4aXMsZT10aGlzLnlBeGlzLGM9dGhpcy5jaGFydC5pbnZlcnRlZDtyZXR1cm4gdGhpcy5zZWFyY2hLRFRyZWUoe2NsaWVudFg6Yz9kLmxlbi1hLmNoYXJ0WStkLnBvczphLmNoYXJ0WC1kLnBvcyxwbG90WTpjP2UubGVuLWEuY2hhcnRYK2UucG9zOmEuY2hhcnRZLWUucG9zfSxiLGEpfSxidWlsZEtEVHJlZTpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsZSxjKXt2YXIgZztpZihnPWEmJlxuYS5sZW5ndGgpe3ZhciBrPWQua2RBeGlzQXJyYXlbZSVjXTthLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVtrXS1iW2tdfSk7Zz1NYXRoLmZsb29yKGcvMik7cmV0dXJue3BvaW50OmFbZ10sbGVmdDpiKGEuc2xpY2UoMCxnKSxlKzEsYykscmlnaHQ6YihhLnNsaWNlKGcrMSksZSsxLGMpfX19dGhpcy5idWlsZGluZ0tkVHJlZT0hMDt2YXIgZD10aGlzLGU9LTE8ZC5vcHRpb25zLmZpbmROZWFyZXN0UG9pbnRCeS5pbmRleE9mKFwieVwiKT8yOjE7ZGVsZXRlIGQua2RUcmVlO3EoZnVuY3Rpb24oKXtkLmtkVHJlZT1iKGQuZ2V0VmFsaWRQb2ludHMobnVsbCwhZC5kaXJlY3RUb3VjaCksZSxlKTtkLmJ1aWxkaW5nS2RUcmVlPSExfSxkLm9wdGlvbnMua2ROb3d8fGEmJlwidG91Y2hzdGFydFwiPT09YS50eXBlPzA6MSl9LHNlYXJjaEtEVHJlZTpmdW5jdGlvbihhLGIsZCl7ZnVuY3Rpb24gZShhLGIsZCxoKXt2YXIgbD1iLnBvaW50LG09Yy5rZEF4aXNBcnJheVtkJWhdLHA9bDt2YXIgcj16KGFbZ10pJiZcbnoobFtnXSk/TWF0aC5wb3coYVtnXS1sW2ddLDIpOm51bGw7dmFyIHU9eihhW2tdKSYmeihsW2tdKT9NYXRoLnBvdyhhW2tdLWxba10sMik6bnVsbDt1PShyfHwwKSsodXx8MCk7bC5kaXN0PXoodSk/TWF0aC5zcXJ0KHUpOk51bWJlci5NQVhfVkFMVUU7bC5kaXN0WD16KHIpP01hdGguc3FydChyKTpOdW1iZXIuTUFYX1ZBTFVFO209YVttXS1sW21dO3U9MD5tP1wibGVmdFwiOlwicmlnaHRcIjtyPTA+bT9cInJpZ2h0XCI6XCJsZWZ0XCI7Ylt1XSYmKHU9ZShhLGJbdV0sZCsxLGgpLHA9dVtmXTxwW2ZdP3U6bCk7YltyXSYmTWF0aC5zcXJ0KG0qbSk8cFtmXSYmKGE9ZShhLGJbcl0sZCsxLGgpLHA9YVtmXTxwW2ZdP2E6cCk7cmV0dXJuIHB9dmFyIGM9dGhpcyxnPXRoaXMua2RBeGlzQXJyYXlbMF0saz10aGlzLmtkQXhpc0FycmF5WzFdLGY9Yj9cImRpc3RYXCI6XCJkaXN0XCI7Yj0tMTxjLm9wdGlvbnMuZmluZE5lYXJlc3RQb2ludEJ5LmluZGV4T2YoXCJ5XCIpPzI6MTt0aGlzLmtkVHJlZXx8dGhpcy5idWlsZGluZ0tkVHJlZXx8XG50aGlzLmJ1aWxkS0RUcmVlKGQpO2lmKHRoaXMua2RUcmVlKXJldHVybiBlKGEsdGhpcy5rZFRyZWUsYixiKX0scG9pbnRQbGFjZW1lbnRUb1hWYWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMueEF4aXMsYj10aGlzLm9wdGlvbnMucG9pbnRQbGFjZW1lbnQ7XCJiZXR3ZWVuXCI9PT1iJiYoYj1hLnJldmVyc2VkPy0uNTouNSk7QyhiKSYmKGIqPWgodGhpcy5vcHRpb25zLnBvaW50UmFuZ2V8fGEucG9pbnRSYW5nZSkpO3JldHVybiBifX0pO1wiXCJ9KTtNKEksXCJwYXJ0cy9TdGFja2luZy5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuZGVmaW5lZCxHPWYuZGVzdHJveU9iamVjdFByb3BlcnRpZXMsej1mLm9iamVjdEVhY2gsQj1mLnBpY2s7Zj1jLkF4aXM7dmFyIHQ9Yy5DaGFydCx2PWMuY29ycmVjdEZsb2F0LEM9Yy5mb3JtYXQsSD1jLlNlcmllcztjLlN0YWNrSXRlbT1mdW5jdGlvbihjLGYsbixxLGcpe3ZhciBiPVxuYy5jaGFydC5pbnZlcnRlZDt0aGlzLmF4aXM9Yzt0aGlzLmlzTmVnYXRpdmU9bjt0aGlzLm9wdGlvbnM9Zj1mfHx7fTt0aGlzLng9cTt0aGlzLnRvdGFsPW51bGw7dGhpcy5wb2ludHM9e307dGhpcy5zdGFjaz1nO3RoaXMucmlnaHRDbGlmZj10aGlzLmxlZnRDbGlmZj0wO3RoaXMuYWxpZ25PcHRpb25zPXthbGlnbjpmLmFsaWdufHwoYj9uP1wibGVmdFwiOlwicmlnaHRcIjpcImNlbnRlclwiKSx2ZXJ0aWNhbEFsaWduOmYudmVydGljYWxBbGlnbnx8KGI/XCJtaWRkbGVcIjpuP1wiYm90dG9tXCI6XCJ0b3BcIikseTpmLnkseDpmLnh9O3RoaXMudGV4dEFsaWduPWYudGV4dEFsaWdufHwoYj9uP1wicmlnaHRcIjpcImxlZnRcIjpcImNlbnRlclwiKX07Yy5TdGFja0l0ZW0ucHJvdG90eXBlPXtkZXN0cm95OmZ1bmN0aW9uKCl7Ryh0aGlzLHRoaXMuYXhpcyl9LHJlbmRlcjpmdW5jdGlvbihjKXt2YXIgZj10aGlzLmF4aXMuY2hhcnQsbj10aGlzLm9wdGlvbnMscT1uLmZvcm1hdDtxPXE/QyhxLHRoaXMsZi50aW1lKTpuLmZvcm1hdHRlci5jYWxsKHRoaXMpO1xudGhpcy5sYWJlbD90aGlzLmxhYmVsLmF0dHIoe3RleHQ6cSx2aXNpYmlsaXR5OlwiaGlkZGVuXCJ9KToodGhpcy5sYWJlbD1mLnJlbmRlcmVyLmxhYmVsKHEsbnVsbCxudWxsLG4uc2hhcGUsbnVsbCxudWxsLG4udXNlSFRNTCwhMSxcInN0YWNrLWxhYmVsc1wiKSxxPXt0ZXh0OnEsYWxpZ246dGhpcy50ZXh0QWxpZ24scm90YXRpb246bi5yb3RhdGlvbixwYWRkaW5nOkIobi5wYWRkaW5nLDApLHZpc2liaWxpdHk6XCJoaWRkZW5cIn0sdGhpcy5sYWJlbC5hdHRyKHEpLGYuc3R5bGVkTW9kZXx8dGhpcy5sYWJlbC5jc3Mobi5zdHlsZSksdGhpcy5sYWJlbC5hZGRlZHx8dGhpcy5sYWJlbC5hZGQoYykpO3RoaXMubGFiZWwubGFiZWxyYW5rPWYucGxvdEhlaWdodH0sc2V0T2Zmc2V0OmZ1bmN0aW9uKGMsZixuLHEsZyl7dmFyIGI9dGhpcy5heGlzLGE9Yi5jaGFydDtxPWIudHJhbnNsYXRlKGIudXNlUGVyY2VudGFnZT8xMDA6cT9xOnRoaXMudG90YWwsMCwwLDAsMSk7bj1iLnRyYW5zbGF0ZShuP246XG4wKTtuPUYocSkmJk1hdGguYWJzKHEtbik7Yz1CKGcsYS54QXhpc1swXS50cmFuc2xhdGUodGhpcy54KSkrYztiPUYocSkmJnRoaXMuZ2V0U3RhY2tCb3goYSx0aGlzLGMscSxmLG4sYik7Zj10aGlzLmxhYmVsO2M9dGhpcy5pc05lZ2F0aXZlO2c9XCJqdXN0aWZ5XCI9PT1CKHRoaXMub3B0aW9ucy5vdmVyZmxvdyxcImp1c3RpZnlcIik7aWYoZiYmYil7bj1mLmdldEJCb3goKTt2YXIgZD1hLmludmVydGVkP2M/bi53aWR0aDowOm4ud2lkdGgvMixlPWEuaW52ZXJ0ZWQ/bi5oZWlnaHQvMjpjPy00Om4uaGVpZ2h0KzQ7dGhpcy5hbGlnbk9wdGlvbnMueD1CKHRoaXMub3B0aW9ucy54LDApO2YuYWxpZ24odGhpcy5hbGlnbk9wdGlvbnMsbnVsbCxiKTtxPWYuYWxpZ25BdHRyO2Yuc2hvdygpO3EueS09ZTtnJiYocS54LT1kLEgucHJvdG90eXBlLmp1c3RpZnlEYXRhTGFiZWwuY2FsbCh0aGlzLmF4aXMsZix0aGlzLmFsaWduT3B0aW9ucyxxLG4sYikscS54Kz1kKTtxLng9Zi5hbGlnbkF0dHIueDtmLmF0dHIoe3g6cS54LFxueTpxLnl9KTtCKCFnJiZ0aGlzLm9wdGlvbnMuY3JvcCwhMCkmJigoYT1hLmlzSW5zaWRlUGxvdChmLngrKGEuaW52ZXJ0ZWQ/MDotbi53aWR0aC8yKSxmLnkpJiZhLmlzSW5zaWRlUGxvdChmLngrKGEuaW52ZXJ0ZWQ/Yz8tbi53aWR0aDpuLndpZHRoOm4ud2lkdGgvMiksZi55K24uaGVpZ2h0KSl8fGYuaGlkZSgpKX19LGdldFN0YWNrQm94OmZ1bmN0aW9uKGMsZixuLHEsZyxiLGEpe3ZhciBkPWYuYXhpcy5yZXZlcnNlZCxlPWMuaW52ZXJ0ZWQ7Yz1hLmhlaWdodCthLnBvcy0oZT9jLnBsb3RMZWZ0OmMucGxvdFRvcCk7Zj1mLmlzTmVnYXRpdmUmJiFkfHwhZi5pc05lZ2F0aXZlJiZkO3JldHVybnt4OmU/Zj9xOnEtYjpuLHk6ZT9jLW4tZzpmP2MtcS1iOmMtcSx3aWR0aDplP2I6ZyxoZWlnaHQ6ZT9nOmJ9fX07dC5wcm90b3R5cGUuZ2V0U3RhY2tzPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxmPWMuaW52ZXJ0ZWQ7Yy55QXhpcy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2Muc3RhY2tzJiZjLmhhc1Zpc2libGVTZXJpZXMmJlxuKGMub2xkU3RhY2tzPWMuc3RhY2tzKX0pO2Muc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIG49aC54QXhpcyYmaC54QXhpcy5vcHRpb25zfHx7fTshaC5vcHRpb25zLnN0YWNraW5nfHwhMCE9PWgudmlzaWJsZSYmITEhPT1jLm9wdGlvbnMuY2hhcnQuaWdub3JlSGlkZGVuU2VyaWVzfHwoaC5zdGFja0tleT1baC50eXBlLEIoaC5vcHRpb25zLnN0YWNrLFwiXCIpLGY/bi50b3A6bi5sZWZ0LGY/bi5oZWlnaHQ6bi53aWR0aF0uam9pbigpKX0pfTtmLnByb3RvdHlwZS5idWlsZFN0YWNrcz1mdW5jdGlvbigpe3ZhciBjPXRoaXMuc2VyaWVzLGY9Qih0aGlzLm9wdGlvbnMucmV2ZXJzZWRTdGFja3MsITApLG49Yy5sZW5ndGgscTtpZighdGhpcy5pc1hBeGlzKXt0aGlzLnVzZVBlcmNlbnRhZ2U9ITE7Zm9yKHE9bjtxLS07KWNbZj9xOm4tcS0xXS5zZXRTdGFja2VkUG9pbnRzKCk7Zm9yKHE9MDtxPG47cSsrKWNbcV0ubW9kaWZ5U3RhY2tzKCl9fTtmLnByb3RvdHlwZS5yZW5kZXJTdGFja1RvdGFscz1cbmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5jaGFydCxmPWMucmVuZGVyZXIsbj10aGlzLnN0YWNrcyxxPXRoaXMuc3RhY2tUb3RhbEdyb3VwO3F8fCh0aGlzLnN0YWNrVG90YWxHcm91cD1xPWYuZyhcInN0YWNrLWxhYmVsc1wiKS5hdHRyKHt2aXNpYmlsaXR5OlwidmlzaWJsZVwiLHpJbmRleDo2fSkuYWRkKCkpO3EudHJhbnNsYXRlKGMucGxvdExlZnQsYy5wbG90VG9wKTt6KG4sZnVuY3Rpb24oYyl7eihjLGZ1bmN0aW9uKGIpe2IucmVuZGVyKHEpfSl9KX07Zi5wcm90b3R5cGUucmVzZXRTdGFja3M9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGY9Yy5zdGFja3M7Yy5pc1hBeGlzfHx6KGYsZnVuY3Rpb24oZil7eihmLGZ1bmN0aW9uKGgsZyl7aC50b3VjaGVkPGMuc3RhY2tzVG91Y2hlZD8oaC5kZXN0cm95KCksZGVsZXRlIGZbZ10pOihoLnRvdGFsPW51bGwsaC5jdW11bGF0aXZlPW51bGwpfSl9KX07Zi5wcm90b3R5cGUuY2xlYW5TdGFja3M9ZnVuY3Rpb24oKXtpZighdGhpcy5pc1hBeGlzKXtpZih0aGlzLm9sZFN0YWNrcyl2YXIgYz1cbnRoaXMuc3RhY2tzPXRoaXMub2xkU3RhY2tzO3ooYyxmdW5jdGlvbihjKXt6KGMsZnVuY3Rpb24oYyl7Yy5jdW11bGF0aXZlPWMudG90YWx9KX0pfX07SC5wcm90b3R5cGUuc2V0U3RhY2tlZFBvaW50cz1mdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5zdGFja2luZyYmKCEwPT09dGhpcy52aXNpYmxlfHwhMT09PXRoaXMuY2hhcnQub3B0aW9ucy5jaGFydC5pZ25vcmVIaWRkZW5TZXJpZXMpKXt2YXIgZj10aGlzLnByb2Nlc3NlZFhEYXRhLGg9dGhpcy5wcm9jZXNzZWRZRGF0YSxuPVtdLHE9aC5sZW5ndGgsZz10aGlzLm9wdGlvbnMsYj1nLnRocmVzaG9sZCxhPUIoZy5zdGFydEZyb21UaHJlc2hvbGQmJmIsMCksZD1nLnN0YWNrO2c9Zy5zdGFja2luZzt2YXIgZT10aGlzLnN0YWNrS2V5LGw9XCItXCIrZSx0PXRoaXMubmVnU3RhY2tzLEU9dGhpcy55QXhpcyxwPUUuc3RhY2tzLHU9RS5vbGRTdGFja3MsayxyO0Uuc3RhY2tzVG91Y2hlZCs9MTtmb3Iocj0wO3I8cTtyKyspe3ZhciB4PWZbcl07XG52YXIgQT1oW3JdO3ZhciB3PXRoaXMuZ2V0U3RhY2tJbmRpY2F0b3Iodyx4LHRoaXMuaW5kZXgpO3ZhciBtPXcua2V5O3ZhciBLPShrPXQmJkE8KGE/MDpiKSk/bDplO3BbS118fChwW0tdPXt9KTtwW0tdW3hdfHwodVtLXSYmdVtLXVt4XT8ocFtLXVt4XT11W0tdW3hdLHBbS11beF0udG90YWw9bnVsbCk6cFtLXVt4XT1uZXcgYy5TdGFja0l0ZW0oRSxFLm9wdGlvbnMuc3RhY2tMYWJlbHMsayx4LGQpKTtLPXBbS11beF07bnVsbCE9PUE/KEsucG9pbnRzW21dPUsucG9pbnRzW3RoaXMuaW5kZXhdPVtCKEsuY3VtdWxhdGl2ZSxhKV0sRihLLmN1bXVsYXRpdmUpfHwoSy5iYXNlPW0pLEsudG91Y2hlZD1FLnN0YWNrc1RvdWNoZWQsMDx3LmluZGV4JiYhMT09PXRoaXMuc2luZ2xlU3RhY2tzJiYoSy5wb2ludHNbbV1bMF09Sy5wb2ludHNbdGhpcy5pbmRleCtcIixcIit4K1wiLDBcIl1bMF0pKTpLLnBvaW50c1ttXT1LLnBvaW50c1t0aGlzLmluZGV4XT1udWxsO1wicGVyY2VudFwiPT09Zz8oaz1rP2U6XG5sLHQmJnBba10mJnBba11beF0/KGs9cFtrXVt4XSxLLnRvdGFsPWsudG90YWw9TWF0aC5tYXgoay50b3RhbCxLLnRvdGFsKStNYXRoLmFicyhBKXx8MCk6Sy50b3RhbD12KEsudG90YWwrKE1hdGguYWJzKEEpfHwwKSkpOksudG90YWw9dihLLnRvdGFsKyhBfHwwKSk7Sy5jdW11bGF0aXZlPUIoSy5jdW11bGF0aXZlLGEpKyhBfHwwKTtudWxsIT09QSYmKEsucG9pbnRzW21dLnB1c2goSy5jdW11bGF0aXZlKSxuW3JdPUsuY3VtdWxhdGl2ZSl9XCJwZXJjZW50XCI9PT1nJiYoRS51c2VQZXJjZW50YWdlPSEwKTt0aGlzLnN0YWNrZWRZRGF0YT1uO0Uub2xkU3RhY2tzPXt9fX07SC5wcm90b3R5cGUubW9kaWZ5U3RhY2tzPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxmPWMuc3RhY2tLZXksbj1jLnlBeGlzLnN0YWNrcyxxPWMucHJvY2Vzc2VkWERhdGEsZyxiPWMub3B0aW9ucy5zdGFja2luZztjW2IrXCJTdGFja2VyXCJdJiZbZixcIi1cIitmXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Zvcih2YXIgZD1xLmxlbmd0aCxcbmUsZjtkLS07KWlmKGU9cVtkXSxnPWMuZ2V0U3RhY2tJbmRpY2F0b3IoZyxlLGMuaW5kZXgsYSksZj0oZT1uW2FdJiZuW2FdW2VdKSYmZS5wb2ludHNbZy5rZXldKWNbYitcIlN0YWNrZXJcIl0oZixlLGQpfSl9O0gucHJvdG90eXBlLnBlcmNlbnRTdGFja2VyPWZ1bmN0aW9uKGMsZixuKXtmPWYudG90YWw/MTAwL2YudG90YWw6MDtjWzBdPXYoY1swXSpmKTtjWzFdPXYoY1sxXSpmKTt0aGlzLnN0YWNrZWRZRGF0YVtuXT1jWzFdfTtILnByb3RvdHlwZS5nZXRTdGFja0luZGljYXRvcj1mdW5jdGlvbihjLGYsbixxKXshRihjKXx8Yy54IT09Znx8cSYmYy5rZXkhPT1xP2M9e3g6ZixpbmRleDowLGtleTpxfTpjLmluZGV4Kys7Yy5rZXk9W24sZixjLmluZGV4XS5qb2luKCk7cmV0dXJuIGN9fSk7TShJLFwicGFydHMvRHluYW1pY3MuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmRlZmluZWQsRz1mLmVyYXNlLFxuej1mLmV4dGVuZCxCPWYuaXNBcnJheSx0PWYuaXNOdW1iZXIsdj1mLmlzT2JqZWN0LEM9Zi5pc1N0cmluZyxIPWYub2JqZWN0RWFjaCx5PWYucGljayxoPWYuc2V0QW5pbWF0aW9uLG49Zi5zcGxhdCxxPWMuYWRkRXZlbnQsZz1jLmFuaW1hdGUsYj1jLkF4aXM7Zj1jLkNoYXJ0O3ZhciBhPWMuY3JlYXRlRWxlbWVudCxkPWMuY3NzLGU9Yy5maXJlRXZlbnQsbD1jLm1lcmdlLEw9Yy5Qb2ludCxFPWMuU2VyaWVzLHA9Yy5zZXJpZXNUeXBlcztjLmNsZWFuUmVjdXJzaXZlbHk9ZnVuY3Rpb24oYSxiKXt2YXIgZD17fTtIKGEsZnVuY3Rpb24oZSxnKXtpZih2KGFbZ10sITApJiYhYS5ub2RlVHlwZSYmYltnXSllPWMuY2xlYW5SZWN1cnNpdmVseShhW2ddLGJbZ10pLE9iamVjdC5rZXlzKGUpLmxlbmd0aCYmKGRbZ109ZSk7ZWxzZSBpZih2KGFbZ10pfHxhW2ddIT09YltnXSlkW2ddPWFbZ119KTtyZXR1cm4gZH07eihmLnByb3RvdHlwZSx7YWRkU2VyaWVzOmZ1bmN0aW9uKGEsYixkKXt2YXIgYyxcbmc9dGhpczthJiYoYj15KGIsITApLGUoZyxcImFkZFNlcmllc1wiLHtvcHRpb25zOmF9LGZ1bmN0aW9uKCl7Yz1nLmluaXRTZXJpZXMoYSk7Zy5pc0RpcnR5TGVnZW5kPSEwO2cubGlua1NlcmllcygpO2UoZyxcImFmdGVyQWRkU2VyaWVzXCIse3NlcmllczpjfSk7YiYmZy5yZWRyYXcoZCl9KSk7cmV0dXJuIGN9LGFkZEF4aXM6ZnVuY3Rpb24oYSxiLGQsYyl7cmV0dXJuIHRoaXMuY3JlYXRlQXhpcyhiP1wieEF4aXNcIjpcInlBeGlzXCIse2F4aXM6YSxyZWRyYXc6ZCxhbmltYXRpb246Y30pfSxhZGRDb2xvckF4aXM6ZnVuY3Rpb24oYSxiLGQpe3JldHVybiB0aGlzLmNyZWF0ZUF4aXMoXCJjb2xvckF4aXNcIix7YXhpczphLHJlZHJhdzpiLGFuaW1hdGlvbjpkfSl9LGNyZWF0ZUF4aXM6ZnVuY3Rpb24oYSxkKXt2YXIgZT10aGlzLm9wdGlvbnMsZz1cImNvbG9yQXhpc1wiPT09YSxrPWQucmVkcmF3LGY9ZC5hbmltYXRpb247ZD1sKGQuYXhpcyx7aW5kZXg6dGhpc1thXS5sZW5ndGgsaXNYOlwieEF4aXNcIj09PVxuYX0pO3ZhciBoPWc/bmV3IGMuQ29sb3JBeGlzKHRoaXMsZCk6bmV3IGIodGhpcyxkKTtlW2FdPW4oZVthXXx8e30pO2VbYV0ucHVzaChkKTtnJiYodGhpcy5pc0RpcnR5TGVnZW5kPSEwLHRoaXMuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2VyaWVzPVtdfSksdGhpcy5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihhKXthLmJpbmRBeGVzKCk7YS5pc0RpcnR5RGF0YT0hMH0pKTt5KGssITApJiZ0aGlzLnJlZHJhdyhmKTtyZXR1cm4gaH0sc2hvd0xvYWRpbmc6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcyxlPWMub3B0aW9ucyxmPWMubG9hZGluZ0RpdixoPWUubG9hZGluZyxsPWZ1bmN0aW9uKCl7ZiYmZChmLHtsZWZ0OmMucGxvdExlZnQrXCJweFwiLHRvcDpjLnBsb3RUb3ArXCJweFwiLHdpZHRoOmMucGxvdFdpZHRoK1wicHhcIixoZWlnaHQ6Yy5wbG90SGVpZ2h0K1wicHhcIn0pfTtmfHwoYy5sb2FkaW5nRGl2PWY9YShcImRpdlwiLHtjbGFzc05hbWU6XCJoaWdoY2hhcnRzLWxvYWRpbmcgaGlnaGNoYXJ0cy1sb2FkaW5nLWhpZGRlblwifSxcbm51bGwsYy5jb250YWluZXIpLGMubG9hZGluZ1NwYW49YShcInNwYW5cIix7Y2xhc3NOYW1lOlwiaGlnaGNoYXJ0cy1sb2FkaW5nLWlubmVyXCJ9LG51bGwsZikscShjLFwicmVkcmF3XCIsbCkpO2YuY2xhc3NOYW1lPVwiaGlnaGNoYXJ0cy1sb2FkaW5nXCI7Yy5sb2FkaW5nU3Bhbi5pbm5lckhUTUw9eShiLGUubGFuZy5sb2FkaW5nLFwiXCIpO2Muc3R5bGVkTW9kZXx8KGQoZix6KGguc3R5bGUse3pJbmRleDoxMH0pKSxkKGMubG9hZGluZ1NwYW4saC5sYWJlbFN0eWxlKSxjLmxvYWRpbmdTaG93bnx8KGQoZix7b3BhY2l0eTowLGRpc3BsYXk6XCJcIn0pLGcoZix7b3BhY2l0eTpoLnN0eWxlLm9wYWNpdHl8fC41fSx7ZHVyYXRpb246aC5zaG93RHVyYXRpb258fDB9KSkpO2MubG9hZGluZ1Nob3duPSEwO2woKX0saGlkZUxvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMsYj10aGlzLmxvYWRpbmdEaXY7YiYmKGIuY2xhc3NOYW1lPVwiaGlnaGNoYXJ0cy1sb2FkaW5nIGhpZ2hjaGFydHMtbG9hZGluZy1oaWRkZW5cIixcbnRoaXMuc3R5bGVkTW9kZXx8ZyhiLHtvcGFjaXR5OjB9LHtkdXJhdGlvbjphLmxvYWRpbmcuaGlkZUR1cmF0aW9ufHwxMDAsY29tcGxldGU6ZnVuY3Rpb24oKXtkKGIse2Rpc3BsYXk6XCJub25lXCJ9KX19KSk7dGhpcy5sb2FkaW5nU2hvd249ITF9LHByb3BzUmVxdWlyZURpcnR5Qm94OlwiYmFja2dyb3VuZENvbG9yIGJvcmRlckNvbG9yIGJvcmRlcldpZHRoIGJvcmRlclJhZGl1cyBwbG90QmFja2dyb3VuZENvbG9yIHBsb3RCYWNrZ3JvdW5kSW1hZ2UgcGxvdEJvcmRlckNvbG9yIHBsb3RCb3JkZXJXaWR0aCBwbG90U2hhZG93IHNoYWRvd1wiLnNwbGl0KFwiIFwiKSxwcm9wc1JlcXVpcmVSZWZsb3c6XCJtYXJnaW4gbWFyZ2luVG9wIG1hcmdpblJpZ2h0IG1hcmdpbkJvdHRvbSBtYXJnaW5MZWZ0IHNwYWNpbmcgc3BhY2luZ1RvcCBzcGFjaW5nUmlnaHQgc3BhY2luZ0JvdHRvbSBzcGFjaW5nTGVmdFwiLnNwbGl0KFwiIFwiKSxwcm9wc1JlcXVpcmVVcGRhdGVTZXJpZXM6XCJjaGFydC5pbnZlcnRlZCBjaGFydC5wb2xhciBjaGFydC5pZ25vcmVIaWRkZW5TZXJpZXMgY2hhcnQudHlwZSBjb2xvcnMgcGxvdE9wdGlvbnMgdGltZSB0b29sdGlwXCIuc3BsaXQoXCIgXCIpLFxuY29sbGVjdGlvbnNXaXRoVXBkYXRlOlwieEF4aXMgeUF4aXMgekF4aXMgY29sb3JBeGlzIHNlcmllcyBwYW5lXCIuc3BsaXQoXCIgXCIpLHVwZGF0ZTpmdW5jdGlvbihhLGIsZCxnKXt2YXIgaz10aGlzLGY9e2NyZWRpdHM6XCJhZGRDcmVkaXRzXCIsdGl0bGU6XCJzZXRUaXRsZVwiLHN1YnRpdGxlOlwic2V0U3VidGl0bGVcIixjYXB0aW9uOlwic2V0Q2FwdGlvblwifSxoLHAscix1PWEuaXNSZXNwb25zaXZlT3B0aW9ucyxxPVtdO2UoayxcInVwZGF0ZVwiLHtvcHRpb25zOmF9KTt1fHxrLnNldFJlc3BvbnNpdmUoITEsITApO2E9Yy5jbGVhblJlY3Vyc2l2ZWx5KGEsay5vcHRpb25zKTtsKCEwLGsudXNlck9wdGlvbnMsYSk7aWYoaD1hLmNoYXJ0KXtsKCEwLGsub3B0aW9ucy5jaGFydCxoKTtcImNsYXNzTmFtZVwiaW4gaCYmay5zZXRDbGFzc05hbWUoaC5jbGFzc05hbWUpO1wicmVmbG93XCJpbiBoJiZrLnNldFJlZmxvdyhoLnJlZmxvdyk7aWYoXCJpbnZlcnRlZFwiaW4gaHx8XCJwb2xhclwiaW4gaHx8XCJ0eXBlXCJpbiBoKXtrLnByb3BGcm9tU2VyaWVzKCk7XG52YXIgeD0hMH1cImFsaWduVGlja3NcImluIGgmJih4PSEwKTtIKGgsZnVuY3Rpb24oYSxiKXstMSE9PWsucHJvcHNSZXF1aXJlVXBkYXRlU2VyaWVzLmluZGV4T2YoXCJjaGFydC5cIitiKSYmKHA9ITApOy0xIT09ay5wcm9wc1JlcXVpcmVEaXJ0eUJveC5pbmRleE9mKGIpJiYoay5pc0RpcnR5Qm94PSEwKTt1fHwtMT09PWsucHJvcHNSZXF1aXJlUmVmbG93LmluZGV4T2YoYil8fChyPSEwKX0pOyFrLnN0eWxlZE1vZGUmJlwic3R5bGVcImluIGgmJmsucmVuZGVyZXIuc2V0U3R5bGUoaC5zdHlsZSl9IWsuc3R5bGVkTW9kZSYmYS5jb2xvcnMmJih0aGlzLm9wdGlvbnMuY29sb3JzPWEuY29sb3JzKTthLnBsb3RPcHRpb25zJiZsKCEwLHRoaXMub3B0aW9ucy5wbG90T3B0aW9ucyxhLnBsb3RPcHRpb25zKTthLnRpbWUmJnRoaXMudGltZT09PWMudGltZSYmKHRoaXMudGltZT1uZXcgYy5UaW1lKGEudGltZSkpO0goYSxmdW5jdGlvbihhLGIpe2lmKGtbYl0mJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBrW2JdLnVwZGF0ZSlrW2JdLnVwZGF0ZShhLFxuITEpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGtbZltiXV0pa1tmW2JdXShhKTtcImNoYXJ0XCIhPT1iJiYtMSE9PWsucHJvcHNSZXF1aXJlVXBkYXRlU2VyaWVzLmluZGV4T2YoYikmJihwPSEwKX0pO3RoaXMuY29sbGVjdGlvbnNXaXRoVXBkYXRlLmZvckVhY2goZnVuY3Rpb24oYil7aWYoYVtiXSl7aWYoXCJzZXJpZXNcIj09PWIpe3ZhciBjPVtdO2tbYl0uZm9yRWFjaChmdW5jdGlvbihhLGIpe2Eub3B0aW9ucy5pc0ludGVybmFsfHxjLnB1c2goeShhLm9wdGlvbnMuaW5kZXgsYikpfSl9bihhW2JdKS5mb3JFYWNoKGZ1bmN0aW9uKGEsZSl7KGU9RihhLmlkKSYmay5nZXQoYS5pZCl8fGtbYl1bYz9jW2VdOmVdKSYmZS5jb2xsPT09YiYmKGUudXBkYXRlKGEsITEpLGQmJihlLnRvdWNoZWQ9ITApKTshZSYmZCYmay5jb2xsZWN0aW9uc1dpdGhJbml0W2JdJiYoay5jb2xsZWN0aW9uc1dpdGhJbml0W2JdWzBdLmFwcGx5KGssW2FdLmNvbmNhdChrLmNvbGxlY3Rpb25zV2l0aEluaXRbYl1bMV18fFxuW10pLmNvbmNhdChbITFdKSkudG91Y2hlZD0hMCl9KTtkJiZrW2JdLmZvckVhY2goZnVuY3Rpb24oYSl7YS50b3VjaGVkfHxhLm9wdGlvbnMuaXNJbnRlcm5hbD9kZWxldGUgYS50b3VjaGVkOnEucHVzaChhKX0pfX0pO3EuZm9yRWFjaChmdW5jdGlvbihhKXthLnJlbW92ZSYmYS5yZW1vdmUoITEpfSk7eCYmay5heGVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS51cGRhdGUoe30sITEpfSk7cCYmay5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihhKXthLnVwZGF0ZSh7fSwhMSl9KTthLmxvYWRpbmcmJmwoITAsay5vcHRpb25zLmxvYWRpbmcsYS5sb2FkaW5nKTt4PWgmJmgud2lkdGg7aD1oJiZoLmhlaWdodDtDKGgpJiYoaD1jLnJlbGF0aXZlTGVuZ3RoKGgseHx8ay5jaGFydFdpZHRoKSk7cnx8dCh4KSYmeCE9PWsuY2hhcnRXaWR0aHx8dChoKSYmaCE9PWsuY2hhcnRIZWlnaHQ/ay5zZXRTaXplKHgsaCxnKTp5KGIsITApJiZrLnJlZHJhdyhnKTtlKGssXCJhZnRlclVwZGF0ZVwiLHtvcHRpb25zOmEsXG5yZWRyYXc6YixhbmltYXRpb246Z30pfSxzZXRTdWJ0aXRsZTpmdW5jdGlvbihhLGIpe3RoaXMuYXBwbHlEZXNjcmlwdGlvbihcInN1YnRpdGxlXCIsYSk7dGhpcy5sYXlPdXRUaXRsZXMoYil9LHNldENhcHRpb246ZnVuY3Rpb24oYSxiKXt0aGlzLmFwcGx5RGVzY3JpcHRpb24oXCJjYXB0aW9uXCIsYSk7dGhpcy5sYXlPdXRUaXRsZXMoYil9fSk7Zi5wcm90b3R5cGUuY29sbGVjdGlvbnNXaXRoSW5pdD17eEF4aXM6W2YucHJvdG90eXBlLmFkZEF4aXMsWyEwXV0seUF4aXM6W2YucHJvdG90eXBlLmFkZEF4aXMsWyExXV0sY29sb3JBeGlzOltmLnByb3RvdHlwZS5hZGRDb2xvckF4aXMsWyExXV0sc2VyaWVzOltmLnByb3RvdHlwZS5hZGRTZXJpZXNdfTt6KEwucHJvdG90eXBlLHt1cGRhdGU6ZnVuY3Rpb24oYSxiLGQsYyl7ZnVuY3Rpb24gZSgpe2cuYXBwbHlPcHRpb25zKGEpO251bGw9PT1nLnkmJmYmJihnLmdyYXBoaWM9Zi5kZXN0cm95KCkpO3YoYSwhMCkmJihmJiZmLmVsZW1lbnQmJmEmJlxuYS5tYXJrZXImJnZvaWQgMCE9PWEubWFya2VyLnN5bWJvbCYmKGcuZ3JhcGhpYz1mLmRlc3Ryb3koKSksYSYmYS5kYXRhTGFiZWxzJiZnLmRhdGFMYWJlbCYmKGcuZGF0YUxhYmVsPWcuZGF0YUxhYmVsLmRlc3Ryb3koKSksZy5jb25uZWN0b3ImJihnLmNvbm5lY3Rvcj1nLmNvbm5lY3Rvci5kZXN0cm95KCkpKTtoPWcuaW5kZXg7ay51cGRhdGVQYXJhbGxlbEFycmF5cyhnLGgpO3AuZGF0YVtoXT12KHAuZGF0YVtoXSwhMCl8fHYoYSwhMCk/Zy5vcHRpb25zOnkoYSxwLmRhdGFbaF0pO2suaXNEaXJ0eT1rLmlzRGlydHlEYXRhPSEwOyFrLmZpeGVkQm94JiZrLmhhc0NhcnRlc2lhblNlcmllcyYmKGwuaXNEaXJ0eUJveD0hMCk7XCJwb2ludFwiPT09cC5sZWdlbmRUeXBlJiYobC5pc0RpcnR5TGVnZW5kPSEwKTtiJiZsLnJlZHJhdyhkKX12YXIgZz10aGlzLGs9Zy5zZXJpZXMsZj1nLmdyYXBoaWMsaCxsPWsuY2hhcnQscD1rLm9wdGlvbnM7Yj15KGIsITApOyExPT09Yz9lKCk6Zy5maXJlUG9pbnRFdmVudChcInVwZGF0ZVwiLFxue29wdGlvbnM6YX0sZSl9LHJlbW92ZTpmdW5jdGlvbihhLGIpe3RoaXMuc2VyaWVzLnJlbW92ZVBvaW50KHRoaXMuc2VyaWVzLmRhdGEuaW5kZXhPZih0aGlzKSxhLGIpfX0pO3ooRS5wcm90b3R5cGUse2FkZFBvaW50OmZ1bmN0aW9uKGEsYixkLGMsZyl7dmFyIGs9dGhpcy5vcHRpb25zLGY9dGhpcy5kYXRhLGg9dGhpcy5jaGFydCxsPXRoaXMueEF4aXM7bD1sJiZsLmhhc05hbWVzJiZsLm5hbWVzO3ZhciBwPWsuZGF0YSxyPXRoaXMueERhdGEsbjtiPXkoYiwhMCk7dmFyIHU9e3Nlcmllczp0aGlzfTt0aGlzLnBvaW50Q2xhc3MucHJvdG90eXBlLmFwcGx5T3B0aW9ucy5hcHBseSh1LFthXSk7dmFyIHE9dS54O3ZhciB4PXIubGVuZ3RoO2lmKHRoaXMucmVxdWlyZVNvcnRpbmcmJnE8clt4LTFdKWZvcihuPSEwO3gmJnJbeC0xXT5xOyl4LS07dGhpcy51cGRhdGVQYXJhbGxlbEFycmF5cyh1LFwic3BsaWNlXCIseCwwLDApO3RoaXMudXBkYXRlUGFyYWxsZWxBcnJheXModSx4KTtsJiZ1Lm5hbWUmJlxuKGxbcV09dS5uYW1lKTtwLnNwbGljZSh4LDAsYSk7biYmKHRoaXMuZGF0YS5zcGxpY2UoeCwwLG51bGwpLHRoaXMucHJvY2Vzc0RhdGEoKSk7XCJwb2ludFwiPT09ay5sZWdlbmRUeXBlJiZ0aGlzLmdlbmVyYXRlUG9pbnRzKCk7ZCYmKGZbMF0mJmZbMF0ucmVtb3ZlP2ZbMF0ucmVtb3ZlKCExKTooZi5zaGlmdCgpLHRoaXMudXBkYXRlUGFyYWxsZWxBcnJheXModSxcInNoaWZ0XCIpLHAuc2hpZnQoKSkpOyExIT09ZyYmZSh0aGlzLFwiYWRkUG9pbnRcIix7cG9pbnQ6dX0pO3RoaXMuaXNEaXJ0eURhdGE9dGhpcy5pc0RpcnR5PSEwO2ImJmgucmVkcmF3KGMpfSxyZW1vdmVQb2ludDpmdW5jdGlvbihhLGIsZCl7dmFyIGM9dGhpcyxlPWMuZGF0YSxnPWVbYV0saz1jLnBvaW50cyxmPWMuY2hhcnQsbD1mdW5jdGlvbigpe2smJmsubGVuZ3RoPT09ZS5sZW5ndGgmJmsuc3BsaWNlKGEsMSk7ZS5zcGxpY2UoYSwxKTtjLm9wdGlvbnMuZGF0YS5zcGxpY2UoYSwxKTtjLnVwZGF0ZVBhcmFsbGVsQXJyYXlzKGd8fFxue3NlcmllczpjfSxcInNwbGljZVwiLGEsMSk7ZyYmZy5kZXN0cm95KCk7Yy5pc0RpcnR5PSEwO2MuaXNEaXJ0eURhdGE9ITA7YiYmZi5yZWRyYXcoKX07aChkLGYpO2I9eShiLCEwKTtnP2cuZmlyZVBvaW50RXZlbnQoXCJyZW1vdmVcIixudWxsLGwpOmwoKX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixkLGMpe2Z1bmN0aW9uIGcoKXtrLmRlc3Ryb3koYyk7ay5yZW1vdmU9bnVsbDtmLmlzRGlydHlMZWdlbmQ9Zi5pc0RpcnR5Qm94PSEwO2YubGlua1NlcmllcygpO3koYSwhMCkmJmYucmVkcmF3KGIpfXZhciBrPXRoaXMsZj1rLmNoYXJ0OyExIT09ZD9lKGssXCJyZW1vdmVcIixudWxsLGcpOmcoKX0sdXBkYXRlOmZ1bmN0aW9uKGEsYil7YT1jLmNsZWFuUmVjdXJzaXZlbHkoYSx0aGlzLnVzZXJPcHRpb25zKTtlKHRoaXMsXCJ1cGRhdGVcIix7b3B0aW9uczphfSk7dmFyIGQ9dGhpcyxnPWQuY2hhcnQsaz1kLnVzZXJPcHRpb25zLGY9ZC5pbml0aWFsVHlwZXx8ZC50eXBlLGg9YS50eXBlfHxrLnR5cGV8fGcub3B0aW9ucy5jaGFydC50eXBlLFxubj0hKHRoaXMuaGFzRGVyaXZlZERhdGF8fGEuZGF0YUdyb3VwaW5nfHxoJiZoIT09dGhpcy50eXBlfHx2b2lkIDAhPT1hLnBvaW50U3RhcnR8fGEucG9pbnRJbnRlcnZhbHx8YS5wb2ludEludGVydmFsVW5pdHx8YS5rZXlzKSx1PXBbZl0ucHJvdG90eXBlLHEsdj1bXCJncm91cFwiLFwibWFya2VyR3JvdXBcIixcImRhdGFMYWJlbHNHcm91cFwiLFwidHJhbnNmb3JtR3JvdXBcIl0sdD1bXCJldmVudE9wdGlvbnNcIixcIm5hdmlnYXRvclNlcmllc1wiLFwiYmFzZVNlcmllc1wiXSxFPWQuZmluaXNoZWRBbmltYXRpbmcmJnthbmltYXRpb246ITF9LEM9e307biYmKHQucHVzaChcImRhdGFcIixcImlzRGlydHlEYXRhXCIsXCJwb2ludHNcIixcInByb2Nlc3NlZFhEYXRhXCIsXCJwcm9jZXNzZWRZRGF0YVwiLFwieEluY3JlbWVudFwiLFwiX2hhc1BvaW50TWFya2Vyc1wiLFwiX2hhc1BvaW50TGFiZWxzXCIsXCJtYXBNYXBcIixcIm1hcERhdGFcIixcIm1pbllcIixcIm1heFlcIixcIm1pblhcIixcIm1heFhcIiksITEhPT1hLnZpc2libGUmJnQucHVzaChcImFyZWFcIixcblwiZ3JhcGhcIiksZC5wYXJhbGxlbEFycmF5cy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3QucHVzaChhK1wiRGF0YVwiKX0pLGEuZGF0YSYmdGhpcy5zZXREYXRhKGEuZGF0YSwhMSkpO2E9bChrLEUse2luZGV4OnZvaWQgMD09PWsuaW5kZXg/ZC5pbmRleDprLmluZGV4LHBvaW50U3RhcnQ6eShrLnBvaW50U3RhcnQsZC54RGF0YVswXSl9LCFuJiZ7ZGF0YTpkLm9wdGlvbnMuZGF0YX0sYSk7biYmYS5kYXRhJiYoYS5kYXRhPWQub3B0aW9ucy5kYXRhKTt0PXYuY29uY2F0KHQpO3QuZm9yRWFjaChmdW5jdGlvbihhKXt0W2FdPWRbYV07ZGVsZXRlIGRbYV19KTtkLnJlbW92ZSghMSxudWxsLCExLCEwKTtmb3IocSBpbiB1KWRbcV09dm9pZCAwO3BbaHx8Zl0/eihkLHBbaHx8Zl0ucHJvdG90eXBlKTpjLmVycm9yKDE3LCEwLGcse21pc3NpbmdNb2R1bGVGb3I6aHx8Zn0pO3QuZm9yRWFjaChmdW5jdGlvbihhKXtkW2FdPXRbYV19KTtkLmluaXQoZyxhKTtpZihuJiZ0aGlzLnBvaW50cyl7dmFyIEw9ZC5vcHRpb25zO1xuITE9PT1MLnZpc2libGU/KEMuZ3JhcGhpYz0xLEMuZGF0YUxhYmVsPTEpOmQuX2hhc1BvaW50TGFiZWxzfHwoaD1MLm1hcmtlcix1PUwuZGF0YUxhYmVscyxoJiYoITE9PT1oLmVuYWJsZWR8fFwic3ltYm9sXCJpbiBoKSYmKEMuZ3JhcGhpYz0xKSx1JiYhMT09PXUuZW5hYmxlZCYmKEMuZGF0YUxhYmVsPTEpKTt0aGlzLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EmJmEuc2VyaWVzJiYoYS5yZXNvbHZlQ29sb3IoKSxPYmplY3Qua2V5cyhDKS5sZW5ndGgmJmEuZGVzdHJveUVsZW1lbnRzKEMpLCExPT09TC5zaG93SW5MZWdlbmQmJmEubGVnZW5kSXRlbSYmZy5sZWdlbmQuZGVzdHJveUl0ZW0oYSkpfSx0aGlzKX1hLnpJbmRleCE9PWsuekluZGV4JiZ2LmZvckVhY2goZnVuY3Rpb24oYil7ZFtiXSYmZFtiXS5hdHRyKHt6SW5kZXg6YS56SW5kZXh9KX0pO2QuaW5pdGlhbFR5cGU9ZjtnLmxpbmtTZXJpZXMoKTtlKHRoaXMsXCJhZnRlclVwZGF0ZVwiKTt5KGIsITApJiZnLnJlZHJhdyhuP1xudm9pZCAwOiExKX0sc2V0TmFtZTpmdW5jdGlvbihhKXt0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWU9dGhpcy51c2VyT3B0aW9ucy5uYW1lPWE7dGhpcy5jaGFydC5pc0RpcnR5TGVnZW5kPSEwfX0pO3ooYi5wcm90b3R5cGUse3VwZGF0ZTpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuY2hhcnQsYz1hJiZhLmV2ZW50c3x8e307YT1sKHRoaXMudXNlck9wdGlvbnMsYSk7ZC5vcHRpb25zW3RoaXMuY29sbF0uaW5kZXhPZiYmKGQub3B0aW9uc1t0aGlzLmNvbGxdW2Qub3B0aW9uc1t0aGlzLmNvbGxdLmluZGV4T2YodGhpcy51c2VyT3B0aW9ucyldPWEpO0goZC5vcHRpb25zW3RoaXMuY29sbF0uZXZlbnRzLGZ1bmN0aW9uKGEsYil7XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBjW2JdJiYoY1tiXT12b2lkIDApfSk7dGhpcy5kZXN0cm95KCEwKTt0aGlzLmluaXQoZCx6KGEse2V2ZW50czpjfSkpO2QuaXNEaXJ0eUJveD0hMDt5KGIsITApJiZkLnJlZHJhdygpfSxyZW1vdmU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVxudGhpcy5jaGFydCxkPXRoaXMuY29sbCxjPXRoaXMuc2VyaWVzLGU9Yy5sZW5ndGg7ZS0tOyljW2VdJiZjW2VdLnJlbW92ZSghMSk7RyhiLmF4ZXMsdGhpcyk7RyhiW2RdLHRoaXMpO0IoYi5vcHRpb25zW2RdKT9iLm9wdGlvbnNbZF0uc3BsaWNlKHRoaXMub3B0aW9ucy5pbmRleCwxKTpkZWxldGUgYi5vcHRpb25zW2RdO2JbZF0uZm9yRWFjaChmdW5jdGlvbihhLGIpe2Eub3B0aW9ucy5pbmRleD1hLnVzZXJPcHRpb25zLmluZGV4PWJ9KTt0aGlzLmRlc3Ryb3koKTtiLmlzRGlydHlCb3g9ITA7eShhLCEwKSYmYi5yZWRyYXcoKX0sc2V0VGl0bGU6ZnVuY3Rpb24oYSxiKXt0aGlzLnVwZGF0ZSh7dGl0bGU6YX0sYil9LHNldENhdGVnb3JpZXM6ZnVuY3Rpb24oYSxiKXt0aGlzLnVwZGF0ZSh7Y2F0ZWdvcmllczphfSxiKX19KX0pO00oSSxcInBhcnRzL0FyZWFTZXJpZXMuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1cbmYub2JqZWN0RWFjaCxHPWYucGljayx6PWMuY29sb3IsQj1jLlNlcmllcztmPWMuc2VyaWVzVHlwZTtmKFwiYXJlYVwiLFwibGluZVwiLHtzb2Z0VGhyZXNob2xkOiExLHRocmVzaG9sZDowfSx7c2luZ2xlU3RhY2tzOiExLGdldFN0YWNrUG9pbnRzOmZ1bmN0aW9uKGMpe3ZhciBmPVtdLHQ9W10sej10aGlzLnhBeGlzLHk9dGhpcy55QXhpcyxoPXkuc3RhY2tzW3RoaXMuc3RhY2tLZXldLG49e30scT10aGlzLmluZGV4LGc9eS5zZXJpZXMsYj1nLmxlbmd0aCxhPUcoeS5vcHRpb25zLnJldmVyc2VkU3RhY2tzLCEwKT8xOi0xLGQ7Yz1jfHx0aGlzLnBvaW50cztpZih0aGlzLm9wdGlvbnMuc3RhY2tpbmcpe2ZvcihkPTA7ZDxjLmxlbmd0aDtkKyspY1tkXS5sZWZ0TnVsbD1jW2RdLnJpZ2h0TnVsbD12b2lkIDAsbltjW2RdLnhdPWNbZF07RihoLGZ1bmN0aW9uKGEsYil7bnVsbCE9PWEudG90YWwmJnQucHVzaChiKX0pO3Quc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLWJ9KTt2YXIgZT1nLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS52aXNpYmxlfSk7XG50LmZvckVhY2goZnVuY3Rpb24oYyxnKXt2YXIgbD0wLHAsdTtpZihuW2NdJiYhbltjXS5pc051bGwpZi5wdXNoKG5bY10pLFstMSwxXS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBmPTE9PT1rP1wicmlnaHROdWxsXCI6XCJsZWZ0TnVsbFwiLGw9MCx2PWhbdFtnK2tdXTtpZih2KWZvcihkPXE7MDw9ZCYmZDxiOylwPXYucG9pbnRzW2RdLHB8fChkPT09cT9uW2NdW2ZdPSEwOmVbZF0mJih1PWhbY10ucG9pbnRzW2RdKSYmKGwtPXVbMV0tdVswXSkpLGQrPWE7bltjXVsxPT09az9cInJpZ2h0Q2xpZmZcIjpcImxlZnRDbGlmZlwiXT1sfSk7ZWxzZXtmb3IoZD1xOzA8PWQmJmQ8Yjspe2lmKHA9aFtjXS5wb2ludHNbZF0pe2w9cFsxXTticmVha31kKz1hfWw9eS50cmFuc2xhdGUobCwwLDEsMCwxKTtmLnB1c2goe2lzTnVsbDohMCxwbG90WDp6LnRyYW5zbGF0ZShjLDAsMCwwLDEpLHg6YyxwbG90WTpsLHlCb3R0b206bH0pfX0pfXJldHVybiBmfSxnZXRHcmFwaFBhdGg6ZnVuY3Rpb24oYyl7dmFyIGY9Qi5wcm90b3R5cGUuZ2V0R3JhcGhQYXRoLFxudD10aGlzLm9wdGlvbnMsej10LnN0YWNraW5nLHk9dGhpcy55QXhpcyxoLG49W10scT1bXSxnPXRoaXMuaW5kZXgsYj15LnN0YWNrc1t0aGlzLnN0YWNrS2V5XSxhPXQudGhyZXNob2xkLGQ9TWF0aC5yb3VuZCh5LmdldFRocmVzaG9sZCh0LnRocmVzaG9sZCkpO3Q9Ryh0LmNvbm5lY3ROdWxscyxcInBlcmNlbnRcIj09PXopO3ZhciBlPWZ1bmN0aW9uKGUsZixrKXt2YXIgaD1jW2VdO2U9eiYmYltoLnhdLnBvaW50c1tnXTt2YXIgbD1oW2srXCJOdWxsXCJdfHwwO2s9aFtrK1wiQ2xpZmZcIl18fDA7aD0hMDtpZihrfHxsKXt2YXIgcD0obD9lWzBdOmVbMV0pK2s7dmFyIHU9ZVswXStrO2g9ISFsfWVsc2UheiYmY1tmXSYmY1tmXS5pc051bGwmJihwPXU9YSk7dm9pZCAwIT09cCYmKHEucHVzaCh7cGxvdFg6TCxwbG90WTpudWxsPT09cD9kOnkuZ2V0VGhyZXNob2xkKHApLGlzTnVsbDpoLGlzQ2xpZmY6ITB9KSxuLnB1c2goe3Bsb3RYOkwscGxvdFk6bnVsbD09PXU/ZDp5LmdldFRocmVzaG9sZCh1KSxcbmRvQ3VydmU6ITF9KSl9O2M9Y3x8dGhpcy5wb2ludHM7eiYmKGM9dGhpcy5nZXRTdGFja1BvaW50cyhjKSk7Zm9yKGg9MDtoPGMubGVuZ3RoO2grKyl7enx8KGNbaF0ubGVmdENsaWZmPWNbaF0ucmlnaHRDbGlmZj1jW2hdLmxlZnROdWxsPWNbaF0ucmlnaHROdWxsPXZvaWQgMCk7dmFyIGw9Y1toXS5pc051bGw7dmFyIEw9RyhjW2hdLnJlY3RQbG90WCxjW2hdLnBsb3RYKTt2YXIgRT1HKGNbaF0ueUJvdHRvbSxkKTtpZighbHx8dCl0fHxlKGgsaC0xLFwibGVmdFwiKSxsJiYheiYmdHx8KHEucHVzaChjW2hdKSxuLnB1c2goe3g6aCxwbG90WDpMLHBsb3RZOkV9KSksdHx8ZShoLGgrMSxcInJpZ2h0XCIpfWg9Zi5jYWxsKHRoaXMscSwhMCwhMCk7bi5yZXZlcnNlZD0hMDtsPWYuY2FsbCh0aGlzLG4sITAsITApO2wubGVuZ3RoJiYobFswXT1cIkxcIik7bD1oLmNvbmNhdChsKTtmPWYuY2FsbCh0aGlzLHEsITEsdCk7bC54TWFwPWgueE1hcDt0aGlzLmFyZWFQYXRoPWw7cmV0dXJuIGZ9LGRyYXdHcmFwaDpmdW5jdGlvbigpe3RoaXMuYXJlYVBhdGg9XG5bXTtCLnByb3RvdHlwZS5kcmF3R3JhcGguYXBwbHkodGhpcyk7dmFyIGM9dGhpcyxmPXRoaXMuYXJlYVBhdGgsQz10aGlzLm9wdGlvbnMsSD1bW1wiYXJlYVwiLFwiaGlnaGNoYXJ0cy1hcmVhXCIsdGhpcy5jb2xvcixDLmZpbGxDb2xvcl1dO3RoaXMuem9uZXMuZm9yRWFjaChmdW5jdGlvbihmLGgpe0gucHVzaChbXCJ6b25lLWFyZWEtXCIraCxcImhpZ2hjaGFydHMtYXJlYSBoaWdoY2hhcnRzLXpvbmUtYXJlYS1cIitoK1wiIFwiK2YuY2xhc3NOYW1lLGYuY29sb3J8fGMuY29sb3IsZi5maWxsQ29sb3J8fEMuZmlsbENvbG9yXSl9KTtILmZvckVhY2goZnVuY3Rpb24odil7dmFyIGg9dlswXSxuPWNbaF0scT1uP1wiYW5pbWF0ZVwiOlwiYXR0clwiLGc9e307bj8obi5lbmRYPWMucHJldmVudEdyYXBoQW5pbWF0aW9uP251bGw6Zi54TWFwLG4uYW5pbWF0ZSh7ZDpmfSkpOihnLnpJbmRleD0wLG49Y1toXT1jLmNoYXJ0LnJlbmRlcmVyLnBhdGgoZikuYWRkQ2xhc3ModlsxXSkuYWRkKGMuZ3JvdXApLG4uaXNBcmVhPVxuITApO2MuY2hhcnQuc3R5bGVkTW9kZXx8KGcuZmlsbD1HKHZbM10seih2WzJdKS5zZXRPcGFjaXR5KEcoQy5maWxsT3BhY2l0eSwuNzUpKS5nZXQoKSkpO25bcV0oZyk7bi5zdGFydFg9Zi54TWFwO24uc2hpZnRVbml0PUMuc3RlcD8yOjF9KX0sZHJhd0xlZ2VuZFN5bWJvbDpjLkxlZ2VuZFN5bWJvbE1peGluLmRyYXdSZWN0YW5nbGV9KTtcIlwifSk7TShJLFwicGFydHMvU3BsaW5lU2VyaWVzLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5waWNrO2M9Yy5zZXJpZXNUeXBlO2MoXCJzcGxpbmVcIixcImxpbmVcIix7fSx7Z2V0UG9pbnRTcGxpbmU6ZnVuY3Rpb24oYyxmLEIpe3ZhciB0PWYucGxvdFgsdj1mLnBsb3RZLEM9Y1tCLTFdO0I9Y1tCKzFdO2lmKEMmJiFDLmlzTnVsbCYmITEhPT1DLmRvQ3VydmUmJiFmLmlzQ2xpZmYmJkImJiFCLmlzTnVsbCYmITEhPT1CLmRvQ3VydmUmJiFmLmlzQ2xpZmYpe2M9Qy5wbG90WTtcbnZhciB6PUIucGxvdFg7Qj1CLnBsb3RZO3ZhciB5PTA7dmFyIGg9KDEuNSp0K0MucGxvdFgpLzIuNTt2YXIgbj0oMS41KnYrYykvMi41O3o9KDEuNSp0K3opLzIuNTt2YXIgcT0oMS41KnYrQikvMi41O3ohPT1oJiYoeT0ocS1uKSooei10KS8oei1oKSt2LXEpO24rPXk7cSs9eTtuPmMmJm4+dj8obj1NYXRoLm1heChjLHYpLHE9Mip2LW4pOm48YyYmbjx2JiYobj1NYXRoLm1pbihjLHYpLHE9Mip2LW4pO3E+QiYmcT52PyhxPU1hdGgubWF4KEIsdiksbj0yKnYtcSk6cTxCJiZxPHYmJihxPU1hdGgubWluKEIsdiksbj0yKnYtcSk7Zi5yaWdodENvbnRYPXo7Zi5yaWdodENvbnRZPXF9Zj1bXCJDXCIsRihDLnJpZ2h0Q29udFgsQy5wbG90WCksRihDLnJpZ2h0Q29udFksQy5wbG90WSksRihoLHQpLEYobix2KSx0LHZdO0MucmlnaHRDb250WD1DLnJpZ2h0Q29udFk9bnVsbDtyZXR1cm4gZn19KTtcIlwifSk7TShJLFwicGFydHMvQXJlYVNwbGluZVNlcmllcy5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXV0sXG5mdW5jdGlvbihjKXt2YXIgZj1jLnNlcmllc1R5cGVzLmFyZWEucHJvdG90eXBlLEY9Yy5zZXJpZXNUeXBlO0YoXCJhcmVhc3BsaW5lXCIsXCJzcGxpbmVcIixjLmRlZmF1bHRQbG90T3B0aW9ucy5hcmVhLHtnZXRTdGFja1BvaW50czpmLmdldFN0YWNrUG9pbnRzLGdldEdyYXBoUGF0aDpmLmdldEdyYXBoUGF0aCxkcmF3R3JhcGg6Zi5kcmF3R3JhcGgsZHJhd0xlZ2VuZFN5bWJvbDpjLkxlZ2VuZFN5bWJvbE1peGluLmRyYXdSZWN0YW5nbGV9KTtcIlwifSk7TShJLFwicGFydHMvQ29sdW1uU2VyaWVzLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5kZWZpbmVkLEc9Zi5leHRlbmQsej1mLmlzTnVtYmVyLEI9Zi5waWNrLHQ9Yy5hbmltT2JqZWN0LHY9Yy5jb2xvcixDPWMubWVyZ2UsSD1jLlNlcmllcztmPWMuc2VyaWVzVHlwZTt2YXIgeT1jLnN2ZztmKFwiY29sdW1uXCIsXCJsaW5lXCIse2JvcmRlclJhZGl1czowLGNyaXNwOiEwLFxuZ3JvdXBQYWRkaW5nOi4yLG1hcmtlcjpudWxsLHBvaW50UGFkZGluZzouMSxtaW5Qb2ludExlbmd0aDowLGNyb3BUaHJlc2hvbGQ6NTAscG9pbnRSYW5nZTpudWxsLHN0YXRlczp7aG92ZXI6e2hhbG86ITEsYnJpZ2h0bmVzczouMX0sc2VsZWN0Ontjb2xvcjpcIiNjY2NjY2NcIixib3JkZXJDb2xvcjpcIiMwMDAwMDBcIn19LGRhdGFMYWJlbHM6e2FsaWduOm51bGwsdmVydGljYWxBbGlnbjpudWxsLHk6bnVsbH0sc29mdFRocmVzaG9sZDohMSxzdGFydEZyb21UaHJlc2hvbGQ6ITAsc3RpY2t5VHJhY2tpbmc6ITEsdG9vbHRpcDp7ZGlzdGFuY2U6Nn0sdGhyZXNob2xkOjAsYm9yZGVyQ29sb3I6XCIjZmZmZmZmXCJ9LHtjcm9wU2hvdWxkZXI6MCxkaXJlY3RUb3VjaDohMCx0cmFja2VyR3JvdXBzOltcImdyb3VwXCIsXCJkYXRhTGFiZWxzR3JvdXBcIl0sbmVnU3RhY2tzOiEwLGluaXQ6ZnVuY3Rpb24oKXtILnByb3RvdHlwZS5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgYz10aGlzLGY9Yy5jaGFydDtcbmYuaGFzUmVuZGVyZWQmJmYuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oZil7Zi50eXBlPT09Yy50eXBlJiYoZi5pc0RpcnR5PSEwKX0pfSxnZXRDb2x1bW5NZXRyaWNzOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxmPWMub3B0aW9ucyxxPWMueEF4aXMsZz1jLnlBeGlzLGI9cS5vcHRpb25zLnJldmVyc2VkU3RhY2tzO2I9cS5yZXZlcnNlZCYmIWJ8fCFxLnJldmVyc2VkJiZiO3ZhciBhLGQ9e30sZT0wOyExPT09Zi5ncm91cGluZz9lPTE6Yy5jaGFydC5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgZj1iLnlBeGlzLGs9Yi5vcHRpb25zO2lmKGIudHlwZT09PWMudHlwZSYmKGIudmlzaWJsZXx8IWMuY2hhcnQub3B0aW9ucy5jaGFydC5pZ25vcmVIaWRkZW5TZXJpZXMpJiZnLmxlbj09PWYubGVuJiZnLnBvcz09PWYucG9zKXtpZihrLnN0YWNraW5nKXthPWIuc3RhY2tLZXk7dm9pZCAwPT09ZFthXSYmKGRbYV09ZSsrKTt2YXIgaD1kW2FdfWVsc2UhMSE9PWsuZ3JvdXBpbmcmJihoPVxuZSsrKTtiLmNvbHVtbkluZGV4PWh9fSk7dmFyIGw9TWF0aC5taW4oTWF0aC5hYnMocS50cmFuc0EpKihxLm9yZGluYWxTbG9wZXx8Zi5wb2ludFJhbmdlfHxxLmNsb3Nlc3RQb2ludFJhbmdlfHxxLnRpY2tJbnRlcnZhbHx8MSkscS5sZW4pLHY9bCpmLmdyb3VwUGFkZGluZyx0PShsLTIqdikvKGV8fDEpO2Y9TWF0aC5taW4oZi5tYXhQb2ludFdpZHRofHxxLmxlbixCKGYucG9pbnRXaWR0aCx0KigxLTIqZi5wb2ludFBhZGRpbmcpKSk7Yy5jb2x1bW5NZXRyaWNzPXt3aWR0aDpmLG9mZnNldDoodC1mKS8yKyh2KygoYy5jb2x1bW5JbmRleHx8MCkrKGI/MTowKSkqdC1sLzIpKihiPy0xOjEpfTtyZXR1cm4gYy5jb2x1bW5NZXRyaWNzfSxjcmlzcENvbDpmdW5jdGlvbihjLGYscSxnKXt2YXIgYj10aGlzLmNoYXJ0LGE9dGhpcy5ib3JkZXJXaWR0aCxkPS0oYSUyPy41OjApO2E9YSUyPy41OjE7Yi5pbnZlcnRlZCYmYi5yZW5kZXJlci5pc1ZNTCYmKGErPTEpO3RoaXMub3B0aW9ucy5jcmlzcCYmXG4ocT1NYXRoLnJvdW5kKGMrcSkrZCxjPU1hdGgucm91bmQoYykrZCxxLT1jKTtnPU1hdGgucm91bmQoZitnKSthO2Q9LjU+PU1hdGguYWJzKGYpJiYuNTxnO2Y9TWF0aC5yb3VuZChmKSthO2ctPWY7ZCYmZyYmKC0tZixnKz0xKTtyZXR1cm57eDpjLHk6Zix3aWR0aDpxLGhlaWdodDpnfX0sdHJhbnNsYXRlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxmPWMuY2hhcnQscT1jLm9wdGlvbnMsZz1jLmRlbnNlPTI+Yy5jbG9zZXN0UG9pbnRSYW5nZSpjLnhBeGlzLnRyYW5zQTtnPWMuYm9yZGVyV2lkdGg9QihxLmJvcmRlcldpZHRoLGc/MDoxKTt2YXIgYj1jLnlBeGlzLGE9cS50aHJlc2hvbGQsZD1jLnRyYW5zbGF0ZWRUaHJlc2hvbGQ9Yi5nZXRUaHJlc2hvbGQoYSksZT1CKHEubWluUG9pbnRMZW5ndGgsNSksbD1jLmdldENvbHVtbk1ldHJpY3MoKSx2PWwud2lkdGgsdD1jLmJhclc9TWF0aC5tYXgodiwxKzIqZykscD1jLnBvaW50WE9mZnNldD1sLm9mZnNldCx1PWMuZGF0YU1pbixrPWMuZGF0YU1heDtcbmYuaW52ZXJ0ZWQmJihkLT0uNSk7cS5wb2ludFBhZGRpbmcmJih0PU1hdGguY2VpbCh0KSk7SC5wcm90b3R5cGUudHJhbnNsYXRlLmFwcGx5KGMpO2MucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oZyl7dmFyIGg9QihnLnlCb3R0b20sZCksbD05OTkrTWF0aC5hYnMoaCkscj12O2w9TWF0aC5taW4oTWF0aC5tYXgoLWwsZy5wbG90WSksYi5sZW4rbCk7dmFyIG09Zy5wbG90WCtwLG49dCxxPU1hdGgubWluKGwsaCkseT1NYXRoLm1heChsLGgpLXE7aWYoZSYmTWF0aC5hYnMoeSk8ZSl7eT1lO3ZhciBFPSFiLnJldmVyc2VkJiYhZy5uZWdhdGl2ZXx8Yi5yZXZlcnNlZCYmZy5uZWdhdGl2ZTtnLnk9PT1hJiZjLmRhdGFNYXg8PWEmJmIubWluPGEmJnUhPT1rJiYoRT0hRSk7cT1NYXRoLmFicyhxLWQpPmU/aC1lOmQtKEU/ZTowKX1GKGcub3B0aW9ucy5wb2ludFdpZHRoKSYmKHI9bj1NYXRoLmNlaWwoZy5vcHRpb25zLnBvaW50V2lkdGgpLG0tPU1hdGgucm91bmQoKHItdikvMikpO2cuYmFyWD1cbm07Zy5wb2ludFdpZHRoPXI7Zy50b29sdGlwUG9zPWYuaW52ZXJ0ZWQ/W2IubGVuK2IucG9zLWYucGxvdExlZnQtbCxjLnhBeGlzLmxlbi1tLW4vMix5XTpbbStuLzIsbCtiLnBvcy1mLnBsb3RUb3AseV07Zy5zaGFwZVR5cGU9Yy5wb2ludENsYXNzLnByb3RvdHlwZS5zaGFwZVR5cGV8fFwicmVjdFwiO2cuc2hhcGVBcmdzPWMuY3Jpc3BDb2wuYXBwbHkoYyxnLmlzTnVsbD9bbSxkLG4sMF06W20scSxuLHldKX0pfSxnZXRTeW1ib2w6Yy5ub29wLGRyYXdMZWdlbmRTeW1ib2w6Yy5MZWdlbmRTeW1ib2xNaXhpbi5kcmF3UmVjdGFuZ2xlLGRyYXdHcmFwaDpmdW5jdGlvbigpe3RoaXMuZ3JvdXBbdGhpcy5kZW5zZT9cImFkZENsYXNzXCI6XCJyZW1vdmVDbGFzc1wiXShcImhpZ2hjaGFydHMtZGVuc2UtZGF0YVwiKX0scG9pbnRBdHRyaWJzOmZ1bmN0aW9uKGMsZil7dmFyIGg9dGhpcy5vcHRpb25zLGc9dGhpcy5wb2ludEF0dHJUb09wdGlvbnN8fHt9O3ZhciBiPWcuc3Ryb2tlfHxcImJvcmRlckNvbG9yXCI7XG52YXIgYT1nW1wic3Ryb2tlLXdpZHRoXCJdfHxcImJvcmRlcldpZHRoXCIsZD1jJiZjLmNvbG9yfHx0aGlzLmNvbG9yLGU9YyYmY1tiXXx8aFtiXXx8dGhpcy5jb2xvcnx8ZCxsPWMmJmNbYV18fGhbYV18fHRoaXNbYV18fDA7Zz1jJiZjLm9wdGlvbnMuZGFzaFN0eWxlfHxoLmRhc2hTdHlsZTt2YXIgbj1CKGgub3BhY2l0eSwxKTtpZihjJiZ0aGlzLnpvbmVzLmxlbmd0aCl7dmFyIHQ9Yy5nZXRab25lKCk7ZD1jLm9wdGlvbnMuY29sb3J8fHQmJih0LmNvbG9yfHxjLm5vblpvbmVkQ29sb3IpfHx0aGlzLmNvbG9yO3QmJihlPXQuYm9yZGVyQ29sb3J8fGUsZz10LmRhc2hTdHlsZXx8ZyxsPXQuYm9yZGVyV2lkdGh8fGwpfWYmJihjPUMoaC5zdGF0ZXNbZl0sYy5vcHRpb25zLnN0YXRlcyYmYy5vcHRpb25zLnN0YXRlc1tmXXx8e30pLGY9Yy5icmlnaHRuZXNzLGQ9Yy5jb2xvcnx8dm9pZCAwIT09ZiYmdihkKS5icmlnaHRlbihjLmJyaWdodG5lc3MpLmdldCgpfHxkLGU9Y1tiXXx8ZSxsPWNbYV18fFxubCxnPWMuZGFzaFN0eWxlfHxnLG49QihjLm9wYWNpdHksbikpO2I9e2ZpbGw6ZCxzdHJva2U6ZSxcInN0cm9rZS13aWR0aFwiOmwsb3BhY2l0eTpufTtnJiYoYi5kYXNoc3R5bGU9Zyk7cmV0dXJuIGJ9LGRyYXdQb2ludHM6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGY9dGhpcy5jaGFydCxxPWMub3B0aW9ucyxnPWYucmVuZGVyZXIsYj1xLmFuaW1hdGlvbkxpbWl0fHwyNTAsYTtjLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWQuZ3JhcGhpYyxsPWUmJmYucG9pbnRDb3VudDxiP1wiYW5pbWF0ZVwiOlwiYXR0clwiO2lmKHooZC5wbG90WSkmJm51bGwhPT1kLnkpe2E9ZC5zaGFwZUFyZ3M7ZSYmZC5oYXNOZXdTaGFwZVR5cGUoKSYmKGU9ZS5kZXN0cm95KCkpO2lmKGUpZVtsXShDKGEpKTtlbHNlIGQuZ3JhcGhpYz1lPWdbZC5zaGFwZVR5cGVdKGEpLmFkZChkLmdyb3VwfHxjLmdyb3VwKTtpZihxLmJvcmRlclJhZGl1cyllW2xdKHtyOnEuYm9yZGVyUmFkaXVzfSk7Zi5zdHlsZWRNb2RlfHxcbmVbbF0oYy5wb2ludEF0dHJpYnMoZCxkLnNlbGVjdGVkJiZcInNlbGVjdFwiKSkuc2hhZG93KCExIT09ZC5hbGxvd1NoYWRvdyYmcS5zaGFkb3csbnVsbCxxLnN0YWNraW5nJiYhcS5ib3JkZXJSYWRpdXMpO2UuYWRkQ2xhc3MoZC5nZXRDbGFzc05hbWUoKSwhMCl9ZWxzZSBlJiYoZC5ncmFwaGljPWUuZGVzdHJveSgpKX0pfSxhbmltYXRlOmZ1bmN0aW9uKGMpe3ZhciBmPXRoaXMsaD10aGlzLnlBeGlzLGc9Zi5vcHRpb25zLGI9dGhpcy5jaGFydC5pbnZlcnRlZCxhPXt9LGQ9Yj9cInRyYW5zbGF0ZVhcIjpcInRyYW5zbGF0ZVlcIjtpZih5KWlmKGMpYS5zY2FsZVk9LjAwMSxjPU1hdGgubWluKGgucG9zK2gubGVuLE1hdGgubWF4KGgucG9zLGgudG9QaXhlbHMoZy50aHJlc2hvbGQpKSksYj9hLnRyYW5zbGF0ZVg9Yy1oLmxlbjphLnRyYW5zbGF0ZVk9YyxmLmNsaXBCb3gmJmYuc2V0Q2xpcCgpLGYuZ3JvdXAuYXR0cihhKTtlbHNle3ZhciBlPWYuZ3JvdXAuYXR0cihkKTtmLmdyb3VwLmFuaW1hdGUoe3NjYWxlWToxfSxcbkcodChmLm9wdGlvbnMuYW5pbWF0aW9uKSx7c3RlcDpmdW5jdGlvbihiLGMpe2FbZF09ZStjLnBvcyooaC5wb3MtZSk7Zi5ncm91cC5hdHRyKGEpfX0pKTtmLmFuaW1hdGU9bnVsbH19LHJlbW92ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMsZj1jLmNoYXJ0O2YuaGFzUmVuZGVyZWQmJmYuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oZil7Zi50eXBlPT09Yy50eXBlJiYoZi5pc0RpcnR5PSEwKX0pO0gucHJvdG90eXBlLnJlbW92ZS5hcHBseShjLGFyZ3VtZW50cyl9fSk7XCJcIn0pO00oSSxcInBhcnRzL0JhclNlcmllcy5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXV0sZnVuY3Rpb24oYyl7Yz1jLnNlcmllc1R5cGU7YyhcImJhclwiLFwiY29sdW1uXCIsbnVsbCx7aW52ZXJ0ZWQ6ITB9KTtcIlwifSk7TShJLFwicGFydHMvU2NhdHRlclNlcmllcy5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXV0sZnVuY3Rpb24oYyl7dmFyIGY9Yy5TZXJpZXMsRj1jLnNlcmllc1R5cGU7RihcInNjYXR0ZXJcIixcImxpbmVcIix7bGluZVdpZHRoOjAsXG5maW5kTmVhcmVzdFBvaW50Qnk6XCJ4eVwiLGppdHRlcjp7eDowLHk6MH0sbWFya2VyOntlbmFibGVkOiEwfSx0b29sdGlwOntoZWFkZXJGb3JtYXQ6JzxzcGFuIHN0eWxlPVwiY29sb3I6e3BvaW50LmNvbG9yfVwiPlxcdTI1Y2Y8L3NwYW4+IDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4XCI+IHtzZXJpZXMubmFtZX08L3NwYW4+PGJyLz4nLHBvaW50Rm9ybWF0OlwieDogPGI+e3BvaW50Lnh9PC9iPjxici8+eTogPGI+e3BvaW50Lnl9PC9iPjxici8+XCJ9fSx7c29ydGVkOiExLHJlcXVpcmVTb3J0aW5nOiExLG5vU2hhcmVkVG9vbHRpcDohMCx0cmFja2VyR3JvdXBzOltcImdyb3VwXCIsXCJtYXJrZXJHcm91cFwiLFwiZGF0YUxhYmVsc0dyb3VwXCJdLHRha2VPcmRpbmFsUG9zaXRpb246ITEsZHJhd0dyYXBoOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmxpbmVXaWR0aCYmZi5wcm90b3R5cGUuZHJhd0dyYXBoLmNhbGwodGhpcyl9LGFwcGx5Sml0dGVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxmPXRoaXMub3B0aW9ucy5qaXR0ZXIsXG5CPXRoaXMucG9pbnRzLmxlbmd0aDtmJiZ0aGlzLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQsdil7W1wieFwiLFwieVwiXS5mb3JFYWNoKGZ1bmN0aW9uKEMseil7dmFyIHk9XCJwbG90XCIrQy50b1VwcGVyQ2FzZSgpO2lmKGZbQ10mJiF0LmlzTnVsbCl7dmFyIGg9Y1tDK1wiQXhpc1wiXTt2YXIgbj1mW0NdKmgudHJhbnNBO2lmKGgmJiFoLmlzTG9nKXt2YXIgcT1NYXRoLm1heCgwLHRbeV0tbik7aD1NYXRoLm1pbihoLmxlbix0W3ldK24pO3o9MUU0Kk1hdGguc2luKHYreipCKTt0W3ldPXErKGgtcSkqKHotTWF0aC5mbG9vcih6KSk7XCJ4XCI9PT1DJiYodC5jbGllbnRYPXQucGxvdFgpfX19KX0pfX0pO2MuYWRkRXZlbnQoZixcImFmdGVyVHJhbnNsYXRlXCIsZnVuY3Rpb24oKXt0aGlzLmFwcGx5Sml0dGVyJiZ0aGlzLmFwcGx5Sml0dGVyKCl9KTtcIlwifSk7TShJLFwibWl4aW5zL2NlbnRlcmVkLXNlcmllcy5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLFxuZil7dmFyIEY9Zi5pc051bWJlcixHPWYucGljayx6PWMuZGVnMnJhZCxCPWMucmVsYXRpdmVMZW5ndGg7Yy5DZW50ZXJlZFNlcmllc01peGluPXtnZXRDZW50ZXI6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLm9wdGlvbnMsZj10aGlzLmNoYXJ0LEM9MiooYy5zbGljZWRPZmZzZXR8fDApLHo9Zi5wbG90V2lkdGgtMipDO2Y9Zi5wbG90SGVpZ2h0LTIqQzt2YXIgeT1jLmNlbnRlcjt5PVtHKHlbMF0sXCI1MCVcIiksRyh5WzFdLFwiNTAlXCIpLGMuc2l6ZXx8XCIxMDAlXCIsYy5pbm5lclNpemV8fDBdO3ZhciBoPU1hdGgubWluKHosZiksbjtmb3Iobj0wOzQ+bjsrK24pe3ZhciBxPXlbbl07Yz0yPm58fDI9PT1uJiYvJSQvLnRlc3QocSk7eVtuXT1CKHEsW3osZixoLHlbMl1dW25dKSsoYz9DOjApfXlbM10+eVsyXSYmKHlbM109eVsyXSk7cmV0dXJuIHl9LGdldFN0YXJ0QW5kRW5kUmFkaWFuczpmdW5jdGlvbihjLGYpe2M9RihjKT9jOjA7Zj1GKGYpJiZmPmMmJjM2MD5mLWM/ZjpjKzM2MDtyZXR1cm57c3RhcnQ6eipcbihjKy05MCksZW5kOnoqKGYrLTkwKX19fX0pO00oSSxcInBhcnRzL1BpZVNlcmllcy5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuZGVmaW5lZCxHPWYuaXNOdW1iZXIsej1mLnBpY2ssQj1mLnNldEFuaW1hdGlvbix0PWMuYWRkRXZlbnQ7Zj1jLkNlbnRlcmVkU2VyaWVzTWl4aW47dmFyIHY9Zi5nZXRTdGFydEFuZEVuZFJhZGlhbnMsQz1jLm1lcmdlLEg9Yy5ub29wLHk9Yy5Qb2ludCxoPWMuU2VyaWVzLG49Yy5zZXJpZXNUeXBlLHE9Yy5maXJlRXZlbnQ7bihcInBpZVwiLFwibGluZVwiLHtjZW50ZXI6W251bGwsbnVsbF0sY2xpcDohMSxjb2xvckJ5UG9pbnQ6ITAsZGF0YUxhYmVsczp7YWxsb3dPdmVybGFwOiEwLGNvbm5lY3RvclBhZGRpbmc6NSxkaXN0YW5jZTozMCxlbmFibGVkOiEwLGZvcm1hdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvaW50LmlzTnVsbD92b2lkIDA6dGhpcy5wb2ludC5uYW1lfSxcbnNvZnRDb25uZWN0b3I6ITAseDowLGNvbm5lY3RvclNoYXBlOlwiZml4ZWRPZmZzZXRcIixjcm9va0Rpc3RhbmNlOlwiNzAlXCJ9LGZpbGxDb2xvcjp2b2lkIDAsaWdub3JlSGlkZGVuUG9pbnQ6ITAsaW5hY3RpdmVPdGhlclBvaW50czohMCxsZWdlbmRUeXBlOlwicG9pbnRcIixtYXJrZXI6bnVsbCxzaXplOm51bGwsc2hvd0luTGVnZW5kOiExLHNsaWNlZE9mZnNldDoxMCxzdGlja3lUcmFja2luZzohMSx0b29sdGlwOntmb2xsb3dQb2ludGVyOiEwfSxib3JkZXJDb2xvcjpcIiNmZmZmZmZcIixib3JkZXJXaWR0aDoxLGxpbmVXaWR0aDp2b2lkIDAsc3RhdGVzOntob3Zlcjp7YnJpZ2h0bmVzczouMX19fSx7aXNDYXJ0ZXNpYW46ITEscmVxdWlyZVNvcnRpbmc6ITEsZGlyZWN0VG91Y2g6ITAsbm9TaGFyZWRUb29sdGlwOiEwLHRyYWNrZXJHcm91cHM6W1wiZ3JvdXBcIixcImRhdGFMYWJlbHNHcm91cFwiXSxheGlzVHlwZXM6W10scG9pbnRBdHRyaWJzOmMuc2VyaWVzVHlwZXMuY29sdW1uLnByb3RvdHlwZS5wb2ludEF0dHJpYnMsXG5hbmltYXRlOmZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMsYT1iLnBvaW50cyxkPWIuc3RhcnRBbmdsZVJhZDtjfHwoYS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjPWEuZ3JhcGhpYyxlPWEuc2hhcGVBcmdzO2MmJihjLmF0dHIoe3I6YS5zdGFydFJ8fGIuY2VudGVyWzNdLzIsc3RhcnQ6ZCxlbmQ6ZH0pLGMuYW5pbWF0ZSh7cjplLnIsc3RhcnQ6ZS5zdGFydCxlbmQ6ZS5lbmR9LGIub3B0aW9ucy5hbmltYXRpb24pKX0pLGIuYW5pbWF0ZT1udWxsKX0saGFzRGF0YTpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5wcm9jZXNzZWRYRGF0YS5sZW5ndGh9LHVwZGF0ZVRvdGFsczpmdW5jdGlvbigpe3ZhciBjLGI9MCxhPXRoaXMucG9pbnRzLGQ9YS5sZW5ndGgsZT10aGlzLm9wdGlvbnMuaWdub3JlSGlkZGVuUG9pbnQ7Zm9yKGM9MDtjPGQ7YysrKXt2YXIgZj1hW2NdO2IrPWUmJiFmLnZpc2libGU/MDpmLmlzTnVsbD8wOmYueX10aGlzLnRvdGFsPWI7Zm9yKGM9MDtjPGQ7YysrKWY9YVtjXSxmLnBlcmNlbnRhZ2U9XG4wPGImJihmLnZpc2libGV8fCFlKT9mLnkvYioxMDA6MCxmLnRvdGFsPWJ9LGdlbmVyYXRlUG9pbnRzOmZ1bmN0aW9uKCl7aC5wcm90b3R5cGUuZ2VuZXJhdGVQb2ludHMuY2FsbCh0aGlzKTt0aGlzLnVwZGF0ZVRvdGFscygpfSxnZXRYOmZ1bmN0aW9uKGMsYixhKXt2YXIgZD10aGlzLmNlbnRlcixlPXRoaXMucmFkaWk/dGhpcy5yYWRpaVthLmluZGV4XTpkWzJdLzI7cmV0dXJuIGRbMF0rKGI/LTE6MSkqTWF0aC5jb3MoTWF0aC5hc2luKE1hdGgubWF4KE1hdGgubWluKChjLWRbMV0pLyhlK2EubGFiZWxEaXN0YW5jZSksMSksLTEpKSkqKGUrYS5sYWJlbERpc3RhbmNlKSsoMDxhLmxhYmVsRGlzdGFuY2U/KGI/LTE6MSkqdGhpcy5vcHRpb25zLmRhdGFMYWJlbHMucGFkZGluZzowKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGcpe3RoaXMuZ2VuZXJhdGVQb2ludHMoKTt2YXIgYj0wLGE9dGhpcy5vcHRpb25zLGQ9YS5zbGljZWRPZmZzZXQsZT1kKyhhLmJvcmRlcldpZHRofHwwKSxmPXYoYS5zdGFydEFuZ2xlLFxuYS5lbmRBbmdsZSksaD10aGlzLnN0YXJ0QW5nbGVSYWQ9Zi5zdGFydDtmPSh0aGlzLmVuZEFuZ2xlUmFkPWYuZW5kKS1oO3ZhciBuPXRoaXMucG9pbnRzLHA9YS5kYXRhTGFiZWxzLmRpc3RhbmNlO2E9YS5pZ25vcmVIaWRkZW5Qb2ludDt2YXIgdSxrPW4ubGVuZ3RoO2d8fCh0aGlzLmNlbnRlcj1nPXRoaXMuZ2V0Q2VudGVyKCkpO2Zvcih1PTA7dTxrO3UrKyl7dmFyIHI9blt1XTt2YXIgeD1oK2IqZjtpZighYXx8ci52aXNpYmxlKWIrPXIucGVyY2VudGFnZS8xMDA7dmFyIEE9aCtiKmY7ci5zaGFwZVR5cGU9XCJhcmNcIjtyLnNoYXBlQXJncz17eDpnWzBdLHk6Z1sxXSxyOmdbMl0vMixpbm5lclI6Z1szXS8yLHN0YXJ0Ok1hdGgucm91bmQoMUUzKngpLzFFMyxlbmQ6TWF0aC5yb3VuZCgxRTMqQSkvMUUzfTtyLmxhYmVsRGlzdGFuY2U9eihyLm9wdGlvbnMuZGF0YUxhYmVscyYmci5vcHRpb25zLmRhdGFMYWJlbHMuZGlzdGFuY2UscCk7ci5sYWJlbERpc3RhbmNlPWMucmVsYXRpdmVMZW5ndGgoci5sYWJlbERpc3RhbmNlLFxuci5zaGFwZUFyZ3Mucik7dGhpcy5tYXhMYWJlbERpc3RhbmNlPU1hdGgubWF4KHRoaXMubWF4TGFiZWxEaXN0YW5jZXx8MCxyLmxhYmVsRGlzdGFuY2UpO0E9KEEreCkvMjtBPjEuNSpNYXRoLlBJP0EtPTIqTWF0aC5QSTpBPC1NYXRoLlBJLzImJihBKz0yKk1hdGguUEkpO3Iuc2xpY2VkVHJhbnNsYXRpb249e3RyYW5zbGF0ZVg6TWF0aC5yb3VuZChNYXRoLmNvcyhBKSpkKSx0cmFuc2xhdGVZOk1hdGgucm91bmQoTWF0aC5zaW4oQSkqZCl9O3ZhciB3PU1hdGguY29zKEEpKmdbMl0vMjt2YXIgbT1NYXRoLnNpbihBKSpnWzJdLzI7ci50b29sdGlwUG9zPVtnWzBdKy43KncsZ1sxXSsuNyptXTtyLmhhbGY9QTwtTWF0aC5QSS8yfHxBPk1hdGguUEkvMj8xOjA7ci5hbmdsZT1BO3g9TWF0aC5taW4oZSxyLmxhYmVsRGlzdGFuY2UvNSk7ci5sYWJlbFBvc2l0aW9uPXtuYXR1cmFsOnt4OmdbMF0rdytNYXRoLmNvcyhBKSpyLmxhYmVsRGlzdGFuY2UseTpnWzFdK20rTWF0aC5zaW4oQSkqci5sYWJlbERpc3RhbmNlfSxcblwiZmluYWxcIjp7fSxhbGlnbm1lbnQ6MD5yLmxhYmVsRGlzdGFuY2U/XCJjZW50ZXJcIjpyLmhhbGY/XCJyaWdodFwiOlwibGVmdFwiLGNvbm5lY3RvclBvc2l0aW9uOnticmVha0F0Ont4OmdbMF0rdytNYXRoLmNvcyhBKSp4LHk6Z1sxXSttK01hdGguc2luKEEpKnh9LHRvdWNoaW5nU2xpY2VBdDp7eDpnWzBdK3cseTpnWzFdK219fX19cSh0aGlzLFwiYWZ0ZXJUcmFuc2xhdGVcIil9LGRyYXdFbXB0eTpmdW5jdGlvbigpe3ZhciBjPXRoaXMub3B0aW9ucztpZigwPT09dGhpcy50b3RhbCl7dmFyIGI9dGhpcy5jZW50ZXJbMF07dmFyIGE9dGhpcy5jZW50ZXJbMV07dGhpcy5ncmFwaHx8KHRoaXMuZ3JhcGg9dGhpcy5jaGFydC5yZW5kZXJlci5jaXJjbGUoYixhLDApLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1ncmFwaFwiKS5hZGQodGhpcy5ncm91cCkpO3RoaXMuZ3JhcGguYW5pbWF0ZSh7XCJzdHJva2Utd2lkdGhcIjpjLmJvcmRlcldpZHRoLGN4OmIsY3k6YSxyOnRoaXMuY2VudGVyWzJdLzIsZmlsbDpjLmZpbGxDb2xvcnx8XG5cIm5vbmVcIixzdHJva2U6Yy5jb2xvcnx8XCIjY2NjY2NjXCJ9KX1lbHNlIHRoaXMuZ3JhcGgmJih0aGlzLmdyYXBoPXRoaXMuZ3JhcGguZGVzdHJveSgpKX0scmVkcmF3UG9pbnRzOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxiPWMuY2hhcnQsYT1iLnJlbmRlcmVyLGQsZSxmLGgsbj1jLm9wdGlvbnMuc2hhZG93O3RoaXMuZHJhd0VtcHR5KCk7IW58fGMuc2hhZG93R3JvdXB8fGIuc3R5bGVkTW9kZXx8KGMuc2hhZG93R3JvdXA9YS5nKFwic2hhZG93XCIpLmF0dHIoe3pJbmRleDotMX0pLmFkZChjLmdyb3VwKSk7Yy5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihnKXt2YXIgbD17fTtlPWcuZ3JhcGhpYztpZighZy5pc051bGwmJmUpe2g9Zy5zaGFwZUFyZ3M7ZD1nLmdldFRyYW5zbGF0ZSgpO2lmKCFiLnN0eWxlZE1vZGUpe3ZhciBrPWcuc2hhZG93R3JvdXA7biYmIWsmJihrPWcuc2hhZG93R3JvdXA9YS5nKFwic2hhZG93XCIpLmFkZChjLnNoYWRvd0dyb3VwKSk7ayYmay5hdHRyKGQpO2Y9Yy5wb2ludEF0dHJpYnMoZyxcbmcuc2VsZWN0ZWQmJlwic2VsZWN0XCIpfWcuZGVsYXllZFJlbmRlcmluZz8oZS5zZXRSYWRpYWxSZWZlcmVuY2UoYy5jZW50ZXIpLmF0dHIoaCkuYXR0cihkKSxiLnN0eWxlZE1vZGV8fGUuYXR0cihmKS5hdHRyKHtcInN0cm9rZS1saW5lam9pblwiOlwicm91bmRcIn0pLnNoYWRvdyhuLGspLGcuZGVsYXllZFJlbmRlcmluZz0hMSk6KGUuc2V0UmFkaWFsUmVmZXJlbmNlKGMuY2VudGVyKSxiLnN0eWxlZE1vZGV8fEMoITAsbCxmKSxDKCEwLGwsaCxkKSxlLmFuaW1hdGUobCkpO2UuYXR0cih7dmlzaWJpbGl0eTpnLnZpc2libGU/XCJpbmhlcml0XCI6XCJoaWRkZW5cIn0pO2UuYWRkQ2xhc3MoZy5nZXRDbGFzc05hbWUoKSl9ZWxzZSBlJiYoZy5ncmFwaGljPWUuZGVzdHJveSgpKX0pfSxkcmF3UG9pbnRzOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5jaGFydC5yZW5kZXJlcjt0aGlzLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuZ3JhcGhpY3x8KGIuZ3JhcGhpYz1jW2Iuc2hhcGVUeXBlXShiLnNoYXBlQXJncykuYWRkKGIuc2VyaWVzLmdyb3VwKSxcbmIuZGVsYXllZFJlbmRlcmluZz0hMCl9KX0sc2VhcmNoUG9pbnQ6SCxzb3J0QnlBbmdsZTpmdW5jdGlvbihjLGIpe2Muc29ydChmdW5jdGlvbihhLGQpe3JldHVybiB2b2lkIDAhPT1hLmFuZ2xlJiYoZC5hbmdsZS1hLmFuZ2xlKSpifSl9LGRyYXdMZWdlbmRTeW1ib2w6Yy5MZWdlbmRTeW1ib2xNaXhpbi5kcmF3UmVjdGFuZ2xlLGdldENlbnRlcjpmLmdldENlbnRlcixnZXRTeW1ib2w6SCxkcmF3R3JhcGg6bnVsbH0se2luaXQ6ZnVuY3Rpb24oKXt5LnByb3RvdHlwZS5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgYz10aGlzO2MubmFtZT16KGMubmFtZSxcIlNsaWNlXCIpO3ZhciBiPWZ1bmN0aW9uKGEpe2Muc2xpY2UoXCJzZWxlY3RcIj09PWEudHlwZSl9O3QoYyxcInNlbGVjdFwiLGIpO3QoYyxcInVuc2VsZWN0XCIsYik7cmV0dXJuIGN9LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gRyh0aGlzLnkpJiYwPD10aGlzLnl9LHNldFZpc2libGU6ZnVuY3Rpb24oYyxiKXt2YXIgYT10aGlzLFxuZD1hLnNlcmllcyxlPWQuY2hhcnQsZj1kLm9wdGlvbnMuaWdub3JlSGlkZGVuUG9pbnQ7Yj16KGIsZik7YyE9PWEudmlzaWJsZSYmKGEudmlzaWJsZT1hLm9wdGlvbnMudmlzaWJsZT1jPXZvaWQgMD09PWM/IWEudmlzaWJsZTpjLGQub3B0aW9ucy5kYXRhW2QuZGF0YS5pbmRleE9mKGEpXT1hLm9wdGlvbnMsW1wiZ3JhcGhpY1wiLFwiZGF0YUxhYmVsXCIsXCJjb25uZWN0b3JcIixcInNoYWRvd0dyb3VwXCJdLmZvckVhY2goZnVuY3Rpb24oYil7aWYoYVtiXSlhW2JdW2M/XCJzaG93XCI6XCJoaWRlXCJdKCEwKX0pLGEubGVnZW5kSXRlbSYmZS5sZWdlbmQuY29sb3JpemVJdGVtKGEsYyksY3x8XCJob3ZlclwiIT09YS5zdGF0ZXx8YS5zZXRTdGF0ZShcIlwiKSxmJiYoZC5pc0RpcnR5PSEwKSxiJiZlLnJlZHJhdygpKX0sc2xpY2U6ZnVuY3Rpb24oYyxiLGEpe3ZhciBkPXRoaXMuc2VyaWVzO0IoYSxkLmNoYXJ0KTt6KGIsITApO3RoaXMuc2xpY2VkPXRoaXMub3B0aW9ucy5zbGljZWQ9RihjKT9jOiF0aGlzLnNsaWNlZDtcbmQub3B0aW9ucy5kYXRhW2QuZGF0YS5pbmRleE9mKHRoaXMpXT10aGlzLm9wdGlvbnM7dGhpcy5ncmFwaGljLmFuaW1hdGUodGhpcy5nZXRUcmFuc2xhdGUoKSk7dGhpcy5zaGFkb3dHcm91cCYmdGhpcy5zaGFkb3dHcm91cC5hbmltYXRlKHRoaXMuZ2V0VHJhbnNsYXRlKCkpfSxnZXRUcmFuc2xhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbGljZWQ/dGhpcy5zbGljZWRUcmFuc2xhdGlvbjp7dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MH19LGhhbG9QYXRoOmZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMuc2hhcGVBcmdzO3JldHVybiB0aGlzLnNsaWNlZHx8IXRoaXMudmlzaWJsZT9bXTp0aGlzLnNlcmllcy5jaGFydC5yZW5kZXJlci5zeW1ib2xzLmFyYyhiLngsYi55LGIucitjLGIucitjLHtpbm5lclI6Yi5yLTEsc3RhcnQ6Yi5zdGFydCxlbmQ6Yi5lbmR9KX0sY29ubmVjdG9yU2hhcGVzOntmaXhlZE9mZnNldDpmdW5jdGlvbihjLGIsYSl7dmFyIGQ9Yi5icmVha0F0O2I9Yi50b3VjaGluZ1NsaWNlQXQ7XG5yZXR1cm5bXCJNXCIsYy54LGMueV0uY29uY2F0KGEuc29mdENvbm5lY3Rvcj9bXCJDXCIsYy54KyhcImxlZnRcIj09PWMuYWxpZ25tZW50Py01OjUpLGMueSwyKmQueC1iLngsMipkLnktYi55LGQueCxkLnldOltcIkxcIixkLngsZC55XSkuY29uY2F0KFtcIkxcIixiLngsYi55XSl9LHN0cmFpZ2h0OmZ1bmN0aW9uKGMsYil7Yj1iLnRvdWNoaW5nU2xpY2VBdDtyZXR1cm5bXCJNXCIsYy54LGMueSxcIkxcIixiLngsYi55XX0sY3Jvb2tlZExpbmU6ZnVuY3Rpb24oZixiLGEpe2I9Yi50b3VjaGluZ1NsaWNlQXQ7dmFyIGQ9dGhpcy5zZXJpZXMsZT1kLmNlbnRlclswXSxnPWQuY2hhcnQucGxvdFdpZHRoLGg9ZC5jaGFydC5wbG90TGVmdDtkPWYuYWxpZ25tZW50O3ZhciBuPXRoaXMuc2hhcGVBcmdzLnI7YT1jLnJlbGF0aXZlTGVuZ3RoKGEuY3Jvb2tEaXN0YW5jZSwxKTthPVwibGVmdFwiPT09ZD9lK24rKGcraC1lLW4pKigxLWEpOmgrKGUtbikqYTtlPVtcIkxcIixhLGYueV07aWYoXCJsZWZ0XCI9PT1kP2E+Zi54fHxhPFxuYi54OmE8Zi54fHxhPmIueCllPVtdO3JldHVybltcIk1cIixmLngsZi55XS5jb25jYXQoZSkuY29uY2F0KFtcIkxcIixiLngsYi55XSl9fSxnZXRDb25uZWN0b3JQYXRoOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5sYWJlbFBvc2l0aW9uLGI9dGhpcy5zZXJpZXMub3B0aW9ucy5kYXRhTGFiZWxzLGE9Yi5jb25uZWN0b3JTaGFwZSxkPXRoaXMuY29ubmVjdG9yU2hhcGVzO2RbYV0mJihhPWRbYV0pO3JldHVybiBhLmNhbGwodGhpcyx7eDpjLmZpbmFsLngseTpjLmZpbmFsLnksYWxpZ25tZW50OmMuYWxpZ25tZW50fSxjLmNvbm5lY3RvclBvc2l0aW9uLGIpfX0pO1wiXCJ9KTtNKEksXCJwYXJ0cy9EYXRhTGFiZWxzLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5hcnJheU1heCxHPWYuZGVmaW5lZCx6PWYuZXh0ZW5kLEI9Zi5pc0FycmF5LHQ9Zi5vYmplY3RFYWNoLHY9Zi5waWNrLEM9Zi5zcGxhdCxIPWMuZm9ybWF0LFxueT1jLm1lcmdlO2Y9Yy5ub29wO3ZhciBoPWMucmVsYXRpdmVMZW5ndGgsbj1jLlNlcmllcyxxPWMuc2VyaWVzVHlwZXMsZz1jLnN0YWJsZVNvcnQ7Yy5kaXN0cmlidXRlPWZ1bmN0aW9uKGIsYSxkKXtmdW5jdGlvbiBlKGEsYil7cmV0dXJuIGEudGFyZ2V0LWIudGFyZ2V0fXZhciBmLGg9ITAsbj1iLHA9W107dmFyIHU9MDt2YXIgaz1uLnJlZHVjZWRMZW58fGE7Zm9yKGY9Yi5sZW5ndGg7Zi0tOyl1Kz1iW2ZdLnNpemU7aWYodT5rKXtnKGIsZnVuY3Rpb24oYSxiKXtyZXR1cm4oYi5yYW5rfHwwKS0oYS5yYW5rfHwwKX0pO2Zvcih1PWY9MDt1PD1rOyl1Kz1iW2ZdLnNpemUsZisrO3A9Yi5zcGxpY2UoZi0xLGIubGVuZ3RoKX1nKGIsZSk7Zm9yKGI9Yi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJue3NpemU6YS5zaXplLHRhcmdldHM6W2EudGFyZ2V0XSxhbGlnbjp2KGEuYWxpZ24sLjUpfX0pO2g7KXtmb3IoZj1iLmxlbmd0aDtmLS07KWg9YltmXSx1PShNYXRoLm1pbi5hcHBseSgwLGgudGFyZ2V0cykrXG5NYXRoLm1heC5hcHBseSgwLGgudGFyZ2V0cykpLzIsaC5wb3M9TWF0aC5taW4oTWF0aC5tYXgoMCx1LWguc2l6ZSpoLmFsaWduKSxhLWguc2l6ZSk7Zj1iLmxlbmd0aDtmb3IoaD0hMTtmLS07KTA8ZiYmYltmLTFdLnBvcytiW2YtMV0uc2l6ZT5iW2ZdLnBvcyYmKGJbZi0xXS5zaXplKz1iW2ZdLnNpemUsYltmLTFdLnRhcmdldHM9YltmLTFdLnRhcmdldHMuY29uY2F0KGJbZl0udGFyZ2V0cyksYltmLTFdLmFsaWduPS41LGJbZi0xXS5wb3MrYltmLTFdLnNpemU+YSYmKGJbZi0xXS5wb3M9YS1iW2YtMV0uc2l6ZSksYi5zcGxpY2UoZiwxKSxoPSEwKX1uLnB1c2guYXBwbHkobixwKTtmPTA7Yi5zb21lKGZ1bmN0aW9uKGIpe3ZhciBlPTA7aWYoYi50YXJnZXRzLnNvbWUoZnVuY3Rpb24oKXtuW2ZdLnBvcz1iLnBvcytlO2lmKE1hdGguYWJzKG5bZl0ucG9zLW5bZl0udGFyZ2V0KT5kKXJldHVybiBuLnNsaWNlKDAsZisxKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2RlbGV0ZSBhLnBvc30pLG4ucmVkdWNlZExlbj1cbihuLnJlZHVjZWRMZW58fGEpLS4xKmEsbi5yZWR1Y2VkTGVuPi4xKmEmJmMuZGlzdHJpYnV0ZShuLGEsZCksITA7ZSs9bltmXS5zaXplO2YrK30pKXJldHVybiEwfSk7ZyhuLGUpfTtuLnByb3RvdHlwZS5kcmF3RGF0YUxhYmVscz1mdW5jdGlvbigpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgZD1iLmZpbHRlcjtyZXR1cm4gZD8oYj1kLm9wZXJhdG9yLGE9YVtkLnByb3BlcnR5XSxkPWQudmFsdWUsXCI+XCI9PT1iJiZhPmR8fFwiPFwiPT09YiYmYTxkfHxcIj49XCI9PT1iJiZhPj1kfHxcIjw9XCI9PT1iJiZhPD1kfHxcIj09XCI9PT1iJiZhPT1kfHxcIj09PVwiPT09YiYmYT09PWQ/ITA6ITEpOiEwfWZ1bmN0aW9uIGEoYSxiKXt2YXIgZD1bXSxjO2lmKEIoYSkmJiFCKGIpKWQ9YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSxiKX0pO2Vsc2UgaWYoQihiKSYmIUIoYSkpZD1iLm1hcChmdW5jdGlvbihiKXtyZXR1cm4geShhLGIpfSk7ZWxzZSBpZihCKGEpfHxCKGIpKWZvcihjPU1hdGgubWF4KGEubGVuZ3RoLFxuYi5sZW5ndGgpO2MtLTspZFtjXT15KGFbY10sYltjXSk7ZWxzZSBkPXkoYSxiKTtyZXR1cm4gZH12YXIgZD10aGlzLGU9ZC5jaGFydCxmPWQub3B0aW9ucyxnPWYuZGF0YUxhYmVscyxoPWQucG9pbnRzLHAsbj1kLmhhc1JlbmRlcmVkfHwwLGs9Yy5hbmltT2JqZWN0KGYuYW5pbWF0aW9uKS5kdXJhdGlvbixyPU1hdGgubWluKGssMjAwKSxxPSFlLnJlbmRlcmVyLmZvckV4cG9ydCYmdihnLmRlZmVyLDA8ciksQT1lLnJlbmRlcmVyO2c9YShhKGUub3B0aW9ucy5wbG90T3B0aW9ucyYmZS5vcHRpb25zLnBsb3RPcHRpb25zLnNlcmllcyYmZS5vcHRpb25zLnBsb3RPcHRpb25zLnNlcmllcy5kYXRhTGFiZWxzLGUub3B0aW9ucy5wbG90T3B0aW9ucyYmZS5vcHRpb25zLnBsb3RPcHRpb25zW2QudHlwZV0mJmUub3B0aW9ucy5wbG90T3B0aW9uc1tkLnR5cGVdLmRhdGFMYWJlbHMpLGcpO2MuZmlyZUV2ZW50KHRoaXMsXCJkcmF3RGF0YUxhYmVsc1wiKTtpZihCKGcpfHxnLmVuYWJsZWR8fGQuX2hhc1BvaW50TGFiZWxzKXt2YXIgdz1cbmQucGxvdEdyb3VwKFwiZGF0YUxhYmVsc0dyb3VwXCIsXCJkYXRhLWxhYmVsc1wiLHEmJiFuP1wiaGlkZGVuXCI6XCJpbmhlcml0XCIsZy56SW5kZXh8fDYpO3EmJih3LmF0dHIoe29wYWNpdHk6K259KSxufHxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGE9ZC5kYXRhTGFiZWxzR3JvdXA7YSYmKGQudmlzaWJsZSYmdy5zaG93KCEwKSxhW2YuYW5pbWF0aW9uP1wiYW5pbWF0ZVwiOlwiYXR0clwiXSh7b3BhY2l0eToxfSx7ZHVyYXRpb246cn0pKX0say1yKSk7aC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3A9QyhhKGcsYy5kbE9wdGlvbnN8fGMub3B0aW9ucyYmYy5vcHRpb25zLmRhdGFMYWJlbHMpKTtwLmZvckVhY2goZnVuY3Rpb24oYSxnKXt2YXIgaz1hLmVuYWJsZWQmJighYy5pc051bGx8fGMuZGF0YUxhYmVsT25OdWxsKSYmYihjLGEpLGg9Yy5kYXRhTGFiZWxzP2MuZGF0YUxhYmVsc1tnXTpjLmRhdGFMYWJlbCxsPWMuY29ubmVjdG9ycz9jLmNvbm5lY3RvcnNbZ106Yy5jb25uZWN0b3IscD12KGEuZGlzdGFuY2UsXG5jLmxhYmVsRGlzdGFuY2UpLG09IWg7aWYoayl7dmFyIHI9Yy5nZXRMYWJlbENvbmZpZygpO3ZhciBuPXYoYVtjLmZvcm1hdFByZWZpeCtcIkZvcm1hdFwiXSxhLmZvcm1hdCk7cj1HKG4pP0gobixyLGUudGltZSk6KGFbYy5mb3JtYXRQcmVmaXgrXCJGb3JtYXR0ZXJcIl18fGEuZm9ybWF0dGVyKS5jYWxsKHIsYSk7bj1hLnN0eWxlO3ZhciB1PWEucm90YXRpb247ZS5zdHlsZWRNb2RlfHwobi5jb2xvcj12KGEuY29sb3Isbi5jb2xvcixkLmNvbG9yLFwiIzAwMDAwMFwiKSxcImNvbnRyYXN0XCI9PT1uLmNvbG9yJiYoYy5jb250cmFzdENvbG9yPUEuZ2V0Q29udHJhc3QoYy5jb2xvcnx8ZC5jb2xvciksbi5jb2xvcj0hRyhwKSYmYS5pbnNpZGV8fDA+cHx8Zi5zdGFja2luZz9jLmNvbnRyYXN0Q29sb3I6XCIjMDAwMDAwXCIpLGYuY3Vyc29yJiYobi5jdXJzb3I9Zi5jdXJzb3IpKTt2YXIgcT17cjphLmJvcmRlclJhZGl1c3x8MCxyb3RhdGlvbjp1LHBhZGRpbmc6YS5wYWRkaW5nLHpJbmRleDoxfTtlLnN0eWxlZE1vZGV8fFxuKHEuZmlsbD1hLmJhY2tncm91bmRDb2xvcixxLnN0cm9rZT1hLmJvcmRlckNvbG9yLHFbXCJzdHJva2Utd2lkdGhcIl09YS5ib3JkZXJXaWR0aCk7dChxLGZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmZGVsZXRlIHFbYl19KX0haHx8ayYmRyhyKT9rJiZHKHIpJiYoaD9xLnRleHQ9cjooYy5kYXRhTGFiZWxzPWMuZGF0YUxhYmVsc3x8W10saD1jLmRhdGFMYWJlbHNbZ109dT9BLnRleHQociwwLC05OTk5KS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtZGF0YS1sYWJlbFwiKTpBLmxhYmVsKHIsMCwtOTk5OSxhLnNoYXBlLG51bGwsbnVsbCxhLnVzZUhUTUwsbnVsbCxcImRhdGEtbGFiZWxcIiksZ3x8KGMuZGF0YUxhYmVsPWgpLGguYWRkQ2xhc3MoXCIgaGlnaGNoYXJ0cy1kYXRhLWxhYmVsLWNvbG9yLVwiK2MuY29sb3JJbmRleCtcIiBcIisoYS5jbGFzc05hbWV8fFwiXCIpKyhhLnVzZUhUTUw/XCIgaGlnaGNoYXJ0cy10cmFja2VyXCI6XCJcIikpKSxoLm9wdGlvbnM9YSxoLmF0dHIocSksZS5zdHlsZWRNb2RlfHxoLmNzcyhuKS5zaGFkb3coYS5zaGFkb3cpLFxuaC5hZGRlZHx8aC5hZGQodyksYS50ZXh0UGF0aCYmIWEudXNlSFRNTCYmaC5zZXRUZXh0UGF0aChjLmdldERhdGFMYWJlbFBhdGgmJmMuZ2V0RGF0YUxhYmVsUGF0aChoKXx8Yy5ncmFwaGljLGEudGV4dFBhdGgpLGQuYWxpZ25EYXRhTGFiZWwoYyxoLGEsbnVsbCxtKSk6KGMuZGF0YUxhYmVsPWMuZGF0YUxhYmVsJiZjLmRhdGFMYWJlbC5kZXN0cm95KCksYy5kYXRhTGFiZWxzJiYoMT09PWMuZGF0YUxhYmVscy5sZW5ndGg/ZGVsZXRlIGMuZGF0YUxhYmVsczpkZWxldGUgYy5kYXRhTGFiZWxzW2ddKSxnfHxkZWxldGUgYy5kYXRhTGFiZWwsbCYmKGMuY29ubmVjdG9yPWMuY29ubmVjdG9yLmRlc3Ryb3koKSxjLmNvbm5lY3RvcnMmJigxPT09Yy5jb25uZWN0b3JzLmxlbmd0aD9kZWxldGUgYy5jb25uZWN0b3JzOmRlbGV0ZSBjLmNvbm5lY3RvcnNbZ10pKSl9KX0pfWMuZmlyZUV2ZW50KHRoaXMsXCJhZnRlckRyYXdEYXRhTGFiZWxzXCIpfTtuLnByb3RvdHlwZS5hbGlnbkRhdGFMYWJlbD1cbmZ1bmN0aW9uKGIsYSxkLGMsZil7dmFyIGU9dGhpcy5jaGFydCxnPXRoaXMuaXNDYXJ0ZXNpYW4mJmUuaW52ZXJ0ZWQsaD12KGIuZGxCb3gmJmIuZGxCb3guY2VudGVyWCxiLnBsb3RYLC05OTk5KSxsPXYoYi5wbG90WSwtOTk5OSksaz1hLmdldEJCb3goKSxuPWQucm90YXRpb24scT1kLmFsaWduLEE9dGhpcy52aXNpYmxlJiYoYi5zZXJpZXMuZm9yY2VETHx8ZS5pc0luc2lkZVBsb3QoaCxNYXRoLnJvdW5kKGwpLGcpfHxjJiZlLmlzSW5zaWRlUGxvdChoLGc/Yy54KzE6Yy55K2MuaGVpZ2h0LTEsZykpLHc9XCJqdXN0aWZ5XCI9PT12KGQub3ZlcmZsb3csXCJqdXN0aWZ5XCIpO2lmKEEpe3ZhciBtPWUucmVuZGVyZXIuZm9udE1ldHJpY3MoZS5zdHlsZWRNb2RlP3ZvaWQgMDpkLnN0eWxlLmZvbnRTaXplLGEpLmI7Yz16KHt4Omc/dGhpcy55QXhpcy5sZW4tbDpoLHk6TWF0aC5yb3VuZChnP3RoaXMueEF4aXMubGVuLWg6bCksd2lkdGg6MCxoZWlnaHQ6MH0sYyk7eihkLHt3aWR0aDprLndpZHRoLFxuaGVpZ2h0OmsuaGVpZ2h0fSk7bj8odz0hMSxoPWUucmVuZGVyZXIucm90Q29ycihtLG4pLGg9e3g6Yy54K2QueCtjLndpZHRoLzIraC54LHk6Yy55K2QueSt7dG9wOjAsbWlkZGxlOi41LGJvdHRvbToxfVtkLnZlcnRpY2FsQWxpZ25dKmMuaGVpZ2h0fSxhW2Y/XCJhdHRyXCI6XCJhbmltYXRlXCJdKGgpLmF0dHIoe2FsaWduOnF9KSxsPShuKzcyMCklMzYwLGw9MTgwPGwmJjM2MD5sLFwibGVmdFwiPT09cT9oLnktPWw/ay5oZWlnaHQ6MDpcImNlbnRlclwiPT09cT8oaC54LT1rLndpZHRoLzIsaC55LT1rLmhlaWdodC8yKTpcInJpZ2h0XCI9PT1xJiYoaC54LT1rLndpZHRoLGgueS09bD8wOmsuaGVpZ2h0KSxhLnBsYWNlZD0hMCxhLmFsaWduQXR0cj1oKTooYS5hbGlnbihkLG51bGwsYyksaD1hLmFsaWduQXR0cik7dyYmMDw9Yy5oZWlnaHQ/dGhpcy5qdXN0aWZ5RGF0YUxhYmVsKGEsZCxoLGssYyxmKTp2KGQuY3JvcCwhMCkmJihBPWUuaXNJbnNpZGVQbG90KGgueCxoLnkpJiZlLmlzSW5zaWRlUGxvdChoLngrXG5rLndpZHRoLGgueStrLmhlaWdodCkpO2lmKGQuc2hhcGUmJiFuKWFbZj9cImF0dHJcIjpcImFuaW1hdGVcIl0oe2FuY2hvclg6Zz9lLnBsb3RXaWR0aC1iLnBsb3RZOmIucGxvdFgsYW5jaG9yWTpnP2UucGxvdEhlaWdodC1iLnBsb3RYOmIucGxvdFl9KX1BfHwoYS5oaWRlKCEwKSxhLnBsYWNlZD0hMSl9O24ucHJvdG90eXBlLmp1c3RpZnlEYXRhTGFiZWw9ZnVuY3Rpb24oYixhLGQsYyxmLGcpe3ZhciBlPXRoaXMuY2hhcnQsaD1hLmFsaWduLGw9YS52ZXJ0aWNhbEFsaWduLGs9Yi5ib3g/MDpiLnBhZGRpbmd8fDA7dmFyIG49ZC54K2s7aWYoMD5uKXtcInJpZ2h0XCI9PT1oPyhhLmFsaWduPVwibGVmdFwiLGEuaW5zaWRlPSEwKTphLng9LW47dmFyIHE9ITB9bj1kLngrYy53aWR0aC1rO24+ZS5wbG90V2lkdGgmJihcImxlZnRcIj09PWg/KGEuYWxpZ249XCJyaWdodFwiLGEuaW5zaWRlPSEwKTphLng9ZS5wbG90V2lkdGgtbixxPSEwKTtuPWQueStrOzA+biYmKFwiYm90dG9tXCI9PT1sPyhhLnZlcnRpY2FsQWxpZ249XG5cInRvcFwiLGEuaW5zaWRlPSEwKTphLnk9LW4scT0hMCk7bj1kLnkrYy5oZWlnaHQtaztuPmUucGxvdEhlaWdodCYmKFwidG9wXCI9PT1sPyhhLnZlcnRpY2FsQWxpZ249XCJib3R0b21cIixhLmluc2lkZT0hMCk6YS55PWUucGxvdEhlaWdodC1uLHE9ITApO3EmJihiLnBsYWNlZD0hZyxiLmFsaWduKGEsbnVsbCxmKSk7cmV0dXJuIHF9O3EucGllJiYocS5waWUucHJvdG90eXBlLmRhdGFMYWJlbFBvc2l0aW9uZXJzPXtyYWRpYWxEaXN0cmlidXRpb25ZOmZ1bmN0aW9uKGIpe3JldHVybiBiLnRvcCtiLmRpc3RyaWJ1dGVCb3gucG9zfSxyYWRpYWxEaXN0cmlidXRpb25YOmZ1bmN0aW9uKGIsYSxkLGMpe3JldHVybiBiLmdldFgoZDxhLnRvcCsyfHxkPmEuYm90dG9tLTI/YzpkLGEuaGFsZixhKX0sanVzdGlmeTpmdW5jdGlvbihiLGEsZCl7cmV0dXJuIGRbMF0rKGIuaGFsZj8tMToxKSooYStiLmxhYmVsRGlzdGFuY2UpfSxhbGlnblRvUGxvdEVkZ2VzOmZ1bmN0aW9uKGIsYSxkLGMpe2I9Yi5nZXRCQm94KCkud2lkdGg7XG5yZXR1cm4gYT9iK2M6ZC1iLWN9LGFsaWduVG9Db25uZWN0b3JzOmZ1bmN0aW9uKGIsYSxkLGMpe3ZhciBlPTAsZjtiLmZvckVhY2goZnVuY3Rpb24oYSl7Zj1hLmRhdGFMYWJlbC5nZXRCQm94KCkud2lkdGg7Zj5lJiYoZT1mKX0pO3JldHVybiBhP2UrYzpkLWUtY319LHEucGllLnByb3RvdHlwZS5kcmF3RGF0YUxhYmVscz1mdW5jdGlvbigpe3ZhciBiPXRoaXMsYT1iLmRhdGEsZCxlPWIuY2hhcnQsZj1iLm9wdGlvbnMuZGF0YUxhYmVscyxnPWYuY29ubmVjdG9yUGFkZGluZyxoLHA9ZS5wbG90V2lkdGgsdT1lLnBsb3RIZWlnaHQsaz1lLnBsb3RMZWZ0LHI9TWF0aC5yb3VuZChlLmNoYXJ0V2lkdGgvMykscSxBPWIuY2VudGVyLHc9QVsyXS8yLG09QVsxXSx0LHosQyxCLEg9W1tdLFtdXSxJLEQsTixNLFI9WzAsMCwwLDBdLFA9Yi5kYXRhTGFiZWxQb3NpdGlvbmVycyxXO2IudmlzaWJsZSYmKGYuZW5hYmxlZHx8Yi5faGFzUG9pbnRMYWJlbHMpJiYoYS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuZGF0YUxhYmVsJiZcbmEudmlzaWJsZSYmYS5kYXRhTGFiZWwuc2hvcnRlbmVkJiYoYS5kYXRhTGFiZWwuYXR0cih7d2lkdGg6XCJhdXRvXCJ9KS5jc3Moe3dpZHRoOlwiYXV0b1wiLHRleHRPdmVyZmxvdzpcImNsaXBcIn0pLGEuZGF0YUxhYmVsLnNob3J0ZW5lZD0hMSl9KSxuLnByb3RvdHlwZS5kcmF3RGF0YUxhYmVscy5hcHBseShiKSxhLmZvckVhY2goZnVuY3Rpb24oYSl7YS5kYXRhTGFiZWwmJihhLnZpc2libGU/KEhbYS5oYWxmXS5wdXNoKGEpLGEuZGF0YUxhYmVsLl9wb3M9bnVsbCwhRyhmLnN0eWxlLndpZHRoKSYmIUcoYS5vcHRpb25zLmRhdGFMYWJlbHMmJmEub3B0aW9ucy5kYXRhTGFiZWxzLnN0eWxlJiZhLm9wdGlvbnMuZGF0YUxhYmVscy5zdHlsZS53aWR0aCkmJmEuZGF0YUxhYmVsLmdldEJCb3goKS53aWR0aD5yJiYoYS5kYXRhTGFiZWwuY3NzKHt3aWR0aDouNypyfSksYS5kYXRhTGFiZWwuc2hvcnRlbmVkPSEwKSk6KGEuZGF0YUxhYmVsPWEuZGF0YUxhYmVsLmRlc3Ryb3koKSxhLmRhdGFMYWJlbHMmJlxuMT09PWEuZGF0YUxhYmVscy5sZW5ndGgmJmRlbGV0ZSBhLmRhdGFMYWJlbHMpKX0pLEguZm9yRWFjaChmdW5jdGlvbihhLGgpe3ZhciBsPWEubGVuZ3RoLG49W10scjtpZihsKXtiLnNvcnRCeUFuZ2xlKGEsaC0uNSk7aWYoMDxiLm1heExhYmVsRGlzdGFuY2Upe3ZhciBxPU1hdGgubWF4KDAsbS13LWIubWF4TGFiZWxEaXN0YW5jZSk7dmFyIHg9TWF0aC5taW4obSt3K2IubWF4TGFiZWxEaXN0YW5jZSxlLnBsb3RIZWlnaHQpO2EuZm9yRWFjaChmdW5jdGlvbihhKXswPGEubGFiZWxEaXN0YW5jZSYmYS5kYXRhTGFiZWwmJihhLnRvcD1NYXRoLm1heCgwLG0tdy1hLmxhYmVsRGlzdGFuY2UpLGEuYm90dG9tPU1hdGgubWluKG0rdythLmxhYmVsRGlzdGFuY2UsZS5wbG90SGVpZ2h0KSxyPWEuZGF0YUxhYmVsLmdldEJCb3goKS5oZWlnaHR8fDIxLGEuZGlzdHJpYnV0ZUJveD17dGFyZ2V0OmEubGFiZWxQb3NpdGlvbi5uYXR1cmFsLnktYS50b3Arci8yLHNpemU6cixyYW5rOmEueX0sbi5wdXNoKGEuZGlzdHJpYnV0ZUJveCkpfSk7XG5xPXgrci1xO2MuZGlzdHJpYnV0ZShuLHEscS81KX1mb3IoTT0wO008bDtNKyspe2Q9YVtNXTtDPWQubGFiZWxQb3NpdGlvbjt0PWQuZGF0YUxhYmVsO049ITE9PT1kLnZpc2libGU/XCJoaWRkZW5cIjpcImluaGVyaXRcIjtEPXE9Qy5uYXR1cmFsLnk7biYmRyhkLmRpc3RyaWJ1dGVCb3gpJiYodm9pZCAwPT09ZC5kaXN0cmlidXRlQm94LnBvcz9OPVwiaGlkZGVuXCI6KEI9ZC5kaXN0cmlidXRlQm94LnNpemUsRD1QLnJhZGlhbERpc3RyaWJ1dGlvblkoZCkpKTtkZWxldGUgZC5wb3NpdGlvbkluZGV4O2lmKGYuanVzdGlmeSlJPVAuanVzdGlmeShkLHcsQSk7ZWxzZSBzd2l0Y2goZi5hbGlnblRvKXtjYXNlIFwiY29ubmVjdG9yc1wiOkk9UC5hbGlnblRvQ29ubmVjdG9ycyhhLGgscCxrKTticmVhaztjYXNlIFwicGxvdEVkZ2VzXCI6ST1QLmFsaWduVG9QbG90RWRnZXModCxoLHAsayk7YnJlYWs7ZGVmYXVsdDpJPVAucmFkaWFsRGlzdHJpYnV0aW9uWChiLGQsRCxxKX10Ll9hdHRyPXt2aXNpYmlsaXR5Ok4sXG5hbGlnbjpDLmFsaWdubWVudH07dC5fcG9zPXt4OkkrZi54Kyh7bGVmdDpnLHJpZ2h0Oi1nfVtDLmFsaWdubWVudF18fDApLHk6RCtmLnktMTB9O0MuZmluYWwueD1JO0MuZmluYWwueT1EO3YoZi5jcm9wLCEwKSYmKHo9dC5nZXRCQm94KCkud2lkdGgscT1udWxsLEktejxnJiYxPT09aD8ocT1NYXRoLnJvdW5kKHotSStnKSxSWzNdPU1hdGgubWF4KHEsUlszXSkpOkkrej5wLWcmJjA9PT1oJiYocT1NYXRoLnJvdW5kKEkrei1wK2cpLFJbMV09TWF0aC5tYXgocSxSWzFdKSksMD5ELUIvMj9SWzBdPU1hdGgubWF4KE1hdGgucm91bmQoLUQrQi8yKSxSWzBdKTpEK0IvMj51JiYoUlsyXT1NYXRoLm1heChNYXRoLnJvdW5kKEQrQi8yLXUpLFJbMl0pKSx0LnNpZGVPdmVyZmxvdz1xKX19fSksMD09PUYoUil8fHRoaXMudmVyaWZ5RGF0YUxhYmVsT3ZlcmZsb3coUikpJiYodGhpcy5wbGFjZURhdGFMYWJlbHMoKSx0aGlzLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGEpe1c9eShmLGEub3B0aW9ucy5kYXRhTGFiZWxzKTtcbmlmKGg9dihXLmNvbm5lY3RvcldpZHRoLDEpKXt2YXIgZDtxPWEuY29ubmVjdG9yO2lmKCh0PWEuZGF0YUxhYmVsKSYmdC5fcG9zJiZhLnZpc2libGUmJjA8YS5sYWJlbERpc3RhbmNlKXtOPXQuX2F0dHIudmlzaWJpbGl0eTtpZihkPSFxKWEuY29ubmVjdG9yPXE9ZS5yZW5kZXJlci5wYXRoKCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWRhdGEtbGFiZWwtY29ubmVjdG9yICBoaWdoY2hhcnRzLWNvbG9yLVwiK2EuY29sb3JJbmRleCsoYS5jbGFzc05hbWU/XCIgXCIrYS5jbGFzc05hbWU6XCJcIikpLmFkZChiLmRhdGFMYWJlbHNHcm91cCksZS5zdHlsZWRNb2RlfHxxLmF0dHIoe1wic3Ryb2tlLXdpZHRoXCI6aCxzdHJva2U6Vy5jb25uZWN0b3JDb2xvcnx8YS5jb2xvcnx8XCIjNjY2NjY2XCJ9KTtxW2Q/XCJhdHRyXCI6XCJhbmltYXRlXCJdKHtkOmEuZ2V0Q29ubmVjdG9yUGF0aCgpfSk7cS5hdHRyKFwidmlzaWJpbGl0eVwiLE4pfWVsc2UgcSYmKGEuY29ubmVjdG9yPXEuZGVzdHJveSgpKX19KSl9LHEucGllLnByb3RvdHlwZS5wbGFjZURhdGFMYWJlbHM9XG5mdW5jdGlvbigpe3RoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGE9Yi5kYXRhTGFiZWwsZDthJiZiLnZpc2libGUmJigoZD1hLl9wb3MpPyhhLnNpZGVPdmVyZmxvdyYmKGEuX2F0dHIud2lkdGg9TWF0aC5tYXgoYS5nZXRCQm94KCkud2lkdGgtYS5zaWRlT3ZlcmZsb3csMCksYS5jc3Moe3dpZHRoOmEuX2F0dHIud2lkdGgrXCJweFwiLHRleHRPdmVyZmxvdzoodGhpcy5vcHRpb25zLmRhdGFMYWJlbHMuc3R5bGV8fHt9KS50ZXh0T3ZlcmZsb3d8fFwiZWxsaXBzaXNcIn0pLGEuc2hvcnRlbmVkPSEwKSxhLmF0dHIoYS5fYXR0ciksYVthLm1vdmVkP1wiYW5pbWF0ZVwiOlwiYXR0clwiXShkKSxhLm1vdmVkPSEwKTphJiZhLmF0dHIoe3k6LTk5OTl9KSk7ZGVsZXRlIGIuZGlzdHJpYnV0ZUJveH0sdGhpcyl9LHEucGllLnByb3RvdHlwZS5hbGlnbkRhdGFMYWJlbD1mLHEucGllLnByb3RvdHlwZS52ZXJpZnlEYXRhTGFiZWxPdmVyZmxvdz1mdW5jdGlvbihiKXt2YXIgYT10aGlzLmNlbnRlcixcbmQ9dGhpcy5vcHRpb25zLGM9ZC5jZW50ZXIsZj1kLm1pblNpemV8fDgwLGc9bnVsbCE9PWQuc2l6ZTtpZighZyl7aWYobnVsbCE9PWNbMF0pdmFyIG49TWF0aC5tYXgoYVsyXS1NYXRoLm1heChiWzFdLGJbM10pLGYpO2Vsc2Ugbj1NYXRoLm1heChhWzJdLWJbMV0tYlszXSxmKSxhWzBdKz0oYlszXS1iWzFdKS8yO251bGwhPT1jWzFdP249TWF0aC5tYXgoTWF0aC5taW4obixhWzJdLU1hdGgubWF4KGJbMF0sYlsyXSkpLGYpOihuPU1hdGgubWF4KE1hdGgubWluKG4sYVsyXS1iWzBdLWJbMl0pLGYpLGFbMV0rPShiWzBdLWJbMl0pLzIpO248YVsyXT8oYVsyXT1uLGFbM109TWF0aC5taW4oaChkLmlubmVyU2l6ZXx8MCxuKSxuKSx0aGlzLnRyYW5zbGF0ZShhKSx0aGlzLmRyYXdEYXRhTGFiZWxzJiZ0aGlzLmRyYXdEYXRhTGFiZWxzKCkpOmc9ITB9cmV0dXJuIGd9KTtxLmNvbHVtbiYmKHEuY29sdW1uLnByb3RvdHlwZS5hbGlnbkRhdGFMYWJlbD1mdW5jdGlvbihiLGEsZCxjLGYpe3ZhciBlPVxudGhpcy5jaGFydC5pbnZlcnRlZCxnPWIuc2VyaWVzLGg9Yi5kbEJveHx8Yi5zaGFwZUFyZ3MsbD12KGIuYmVsb3csYi5wbG90WT52KHRoaXMudHJhbnNsYXRlZFRocmVzaG9sZCxnLnlBeGlzLmxlbikpLGs9dihkLmluc2lkZSwhIXRoaXMub3B0aW9ucy5zdGFja2luZyk7aCYmKGM9eShoKSwwPmMueSYmKGMuaGVpZ2h0Kz1jLnksYy55PTApLGg9Yy55K2MuaGVpZ2h0LWcueUF4aXMubGVuLDA8aCYmKGMuaGVpZ2h0LT1oKSxlJiYoYz17eDpnLnlBeGlzLmxlbi1jLnktYy5oZWlnaHQseTpnLnhBeGlzLmxlbi1jLngtYy53aWR0aCx3aWR0aDpjLmhlaWdodCxoZWlnaHQ6Yy53aWR0aH0pLGt8fChlPyhjLngrPWw/MDpjLndpZHRoLGMud2lkdGg9MCk6KGMueSs9bD9jLmhlaWdodDowLGMuaGVpZ2h0PTApKSk7ZC5hbGlnbj12KGQuYWxpZ24sIWV8fGs/XCJjZW50ZXJcIjpsP1wicmlnaHRcIjpcImxlZnRcIik7ZC52ZXJ0aWNhbEFsaWduPXYoZC52ZXJ0aWNhbEFsaWduLGV8fGs/XCJtaWRkbGVcIjpsP1widG9wXCI6XG5cImJvdHRvbVwiKTtuLnByb3RvdHlwZS5hbGlnbkRhdGFMYWJlbC5jYWxsKHRoaXMsYixhLGQsYyxmKTtkLmluc2lkZSYmYi5jb250cmFzdENvbG9yJiZhLmNzcyh7Y29sb3I6Yi5jb250cmFzdENvbG9yfSl9KX0pO00oSSxcIm1vZHVsZXMvb3ZlcmxhcHBpbmctZGF0YWxhYmVscy5zcmMuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmlzQXJyYXksRz1mLm9iamVjdEVhY2gsej1mLnBpY2s7Zj1jLkNoYXJ0O3ZhciBCPWMuYWRkRXZlbnQsdD1jLmZpcmVFdmVudDtCKGYsXCJyZW5kZXJcIixmdW5jdGlvbigpe3ZhciBjPVtdOyh0aGlzLmxhYmVsQ29sbGVjdG9yc3x8W10pLmZvckVhY2goZnVuY3Rpb24oZil7Yz1jLmNvbmNhdChmKCkpfSk7KHRoaXMueUF4aXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2Yub3B0aW9ucy5zdGFja0xhYmVscyYmIWYub3B0aW9ucy5zdGFja0xhYmVscy5hbGxvd092ZXJsYXAmJlxuRyhmLnN0YWNrcyxmdW5jdGlvbihmKXtHKGYsZnVuY3Rpb24oZil7Yy5wdXNoKGYubGFiZWwpfSl9KX0pOyh0aGlzLnNlcmllc3x8W10pLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIHY9Zi5vcHRpb25zLmRhdGFMYWJlbHM7Zi52aXNpYmxlJiYoITEhPT12LmVuYWJsZWR8fGYuX2hhc1BvaW50TGFiZWxzKSYmZi5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihmKXtmLnZpc2libGUmJihGKGYuZGF0YUxhYmVscyk/Zi5kYXRhTGFiZWxzOmYuZGF0YUxhYmVsP1tmLmRhdGFMYWJlbF06W10pLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIG49aC5vcHRpb25zO2gubGFiZWxyYW5rPXoobi5sYWJlbHJhbmssZi5sYWJlbHJhbmssZi5zaGFwZUFyZ3MmJmYuc2hhcGVBcmdzLmhlaWdodCk7bi5hbGxvd092ZXJsYXB8fGMucHVzaChoKX0pfSl9KTt0aGlzLmhpZGVPdmVybGFwcGluZ0xhYmVscyhjKX0pO2YucHJvdG90eXBlLmhpZGVPdmVybGFwcGluZ0xhYmVscz1mdW5jdGlvbihjKXt2YXIgZj10aGlzLFxudj1jLmxlbmd0aCx5PWYucmVuZGVyZXIsaCxuLHE7dmFyIGc9ZnVuY3Rpb24oYSl7dmFyIGI9YS5ib3g/MDphLnBhZGRpbmd8fDA7dmFyIGQ9MDtpZihhJiYoIWEuYWxpZ25BdHRyfHxhLnBsYWNlZCkpe3ZhciBjPWEuYXR0cihcInhcIik7dmFyIGY9YS5hdHRyKFwieVwiKTtjPVwibnVtYmVyXCI9PT10eXBlb2YgYyYmXCJudW1iZXJcIj09PXR5cGVvZiBmP3t4OmMseTpmfTphLmFsaWduQXR0cjtmPWEucGFyZW50R3JvdXA7YS53aWR0aHx8KGQ9YS5nZXRCQm94KCksYS53aWR0aD1kLndpZHRoLGEuaGVpZ2h0PWQuaGVpZ2h0LGQ9eS5mb250TWV0cmljcyhudWxsLGEuZWxlbWVudCkuaCk7cmV0dXJue3g6Yy54KyhmLnRyYW5zbGF0ZVh8fDApK2IseTpjLnkrKGYudHJhbnNsYXRlWXx8MCkrYi1kLHdpZHRoOmEud2lkdGgtMipiLGhlaWdodDphLmhlaWdodC0yKmJ9fX07Zm9yKG49MDtuPHY7bisrKWlmKGg9Y1tuXSloLm9sZE9wYWNpdHk9aC5vcGFjaXR5LGgubmV3T3BhY2l0eT0xLGguYWJzb2x1dGVCb3g9XG5nKGgpO2Muc29ydChmdW5jdGlvbihhLGIpe3JldHVybihiLmxhYmVscmFua3x8MCktKGEubGFiZWxyYW5rfHwwKX0pO2ZvcihuPTA7bjx2O24rKyl7dmFyIGI9KGc9Y1tuXSkmJmcuYWJzb2x1dGVCb3g7Zm9yKGg9bisxO2g8djsrK2gpe3ZhciBhPShxPWNbaF0pJiZxLmFic29sdXRlQm94OyFifHwhYXx8Zz09PXF8fDA9PT1nLm5ld09wYWNpdHl8fDA9PT1xLm5ld09wYWNpdHl8fGEueD5iLngrYi53aWR0aHx8YS54K2Eud2lkdGg8Yi54fHxhLnk+Yi55K2IuaGVpZ2h0fHxhLnkrYS5oZWlnaHQ8Yi55fHwoKGcubGFiZWxyYW5rPHEubGFiZWxyYW5rP2c6cSkubmV3T3BhY2l0eT0wKX19Yy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpe3ZhciBkPWEubmV3T3BhY2l0eTthLm9sZE9wYWNpdHkhPT1kJiYoYS5hbGlnbkF0dHImJmEucGxhY2VkPyhkP2Euc2hvdyghMCk6Yj1mdW5jdGlvbigpe2EuaGlkZSghMCk7YS5wbGFjZWQ9ITF9LGEuYWxpZ25BdHRyLm9wYWNpdHk9ZCxhW2EuaXNPbGQ/XG5cImFuaW1hdGVcIjpcImF0dHJcIl0oYS5hbGlnbkF0dHIsbnVsbCxiKSx0KGYsXCJhZnRlckhpZGVPdmVybGFwcGluZ0xhYmVsc1wiKSk6YS5hdHRyKHtvcGFjaXR5OmR9KSk7YS5pc09sZD0hMH19KX19KTtNKEksXCJwYXJ0cy9JbnRlcmFjdGlvbi5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuZGVmaW5lZCxHPWYuZXh0ZW5kLHo9Zi5pc0FycmF5LEI9Zi5pc09iamVjdCx0PWYub2JqZWN0RWFjaCx2PWYucGljayxDPWMuYWRkRXZlbnQ7Zj1jLkNoYXJ0O3ZhciBIPWMuY3JlYXRlRWxlbWVudCx5PWMuY3NzLGg9Yy5kZWZhdWx0T3B0aW9ucyxuPWMuZGVmYXVsdFBsb3RPcHRpb25zLHE9Yy5maXJlRXZlbnQsZz1jLmhhc1RvdWNoLGI9Yy5MZWdlbmQsYT1jLm1lcmdlLGQ9Yy5Qb2ludCxlPWMuU2VyaWVzLGw9Yy5zZXJpZXNUeXBlcyxJPWMuc3ZnO3ZhciBFPWMuVHJhY2tlck1peGluPXtkcmF3VHJhY2tlclBvaW50OmZ1bmN0aW9uKCl7dmFyIGE9XG50aGlzLGI9YS5jaGFydCxkPWIucG9pbnRlcixjPWZ1bmN0aW9uKGEpe3ZhciBiPWQuZ2V0UG9pbnRGcm9tRXZlbnQoYSk7dm9pZCAwIT09YiYmKGQuaXNEaXJlY3RUb3VjaD0hMCxiLm9uTW91c2VPdmVyKGEpKX0sZTthLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2U9eihhLmRhdGFMYWJlbHMpP2EuZGF0YUxhYmVsczphLmRhdGFMYWJlbD9bYS5kYXRhTGFiZWxdOltdO2EuZ3JhcGhpYyYmKGEuZ3JhcGhpYy5lbGVtZW50LnBvaW50PWEpO2UuZm9yRWFjaChmdW5jdGlvbihiKXtiLmRpdj9iLmRpdi5wb2ludD1hOmIuZWxlbWVudC5wb2ludD1hfSl9KTthLl9oYXNUcmFja2luZ3x8KGEudHJhY2tlckdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGFbZV0pe2FbZV0uYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXRyYWNrZXJcIikub24oXCJtb3VzZW92ZXJcIixjKS5vbihcIm1vdXNlb3V0XCIsZnVuY3Rpb24oYSl7ZC5vblRyYWNrZXJNb3VzZU91dChhKX0pO2lmKGcpYVtlXS5vbihcInRvdWNoc3RhcnRcIixcbmMpOyFiLnN0eWxlZE1vZGUmJmEub3B0aW9ucy5jdXJzb3ImJmFbZV0uY3NzKHkpLmNzcyh7Y3Vyc29yOmEub3B0aW9ucy5jdXJzb3J9KX19KSxhLl9oYXNUcmFja2luZz0hMCk7cSh0aGlzLFwiYWZ0ZXJEcmF3VHJhY2tlclwiKX0sZHJhd1RyYWNrZXJHcmFwaDpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLm9wdGlvbnMsZD1iLnRyYWNrQnlBcmVhLGM9W10uY29uY2F0KGQ/YS5hcmVhUGF0aDphLmdyYXBoUGF0aCksZT1jLmxlbmd0aCxmPWEuY2hhcnQsaD1mLnBvaW50ZXIsbD1mLnJlbmRlcmVyLG49Zi5vcHRpb25zLnRvb2x0aXAuc25hcCx2PWEudHJhY2tlcix0LHk9ZnVuY3Rpb24oKXtpZihmLmhvdmVyU2VyaWVzIT09YSlhLm9uTW91c2VPdmVyKCl9LHo9XCJyZ2JhKDE5MiwxOTIsMTkyLFwiKyhJPy4wMDAxOi4wMDIpK1wiKVwiO2lmKGUmJiFkKWZvcih0PWUrMTt0LS07KVwiTVwiPT09Y1t0XSYmYy5zcGxpY2UodCsxLDAsY1t0KzFdLW4sY1t0KzJdLFwiTFwiKSwodCYmXCJNXCI9PT1jW3RdfHx0PT09XG5lKSYmYy5zcGxpY2UodCwwLFwiTFwiLGNbdC0yXStuLGNbdC0xXSk7dj92LmF0dHIoe2Q6Y30pOmEuZ3JhcGgmJihhLnRyYWNrZXI9bC5wYXRoKGMpLmF0dHIoe3Zpc2liaWxpdHk6YS52aXNpYmxlP1widmlzaWJsZVwiOlwiaGlkZGVuXCIsekluZGV4OjJ9KS5hZGRDbGFzcyhkP1wiaGlnaGNoYXJ0cy10cmFja2VyLWFyZWFcIjpcImhpZ2hjaGFydHMtdHJhY2tlci1saW5lXCIpLmFkZChhLmdyb3VwKSxmLnN0eWxlZE1vZGV8fGEudHJhY2tlci5hdHRyKHtcInN0cm9rZS1saW5lam9pblwiOlwicm91bmRcIixzdHJva2U6eixmaWxsOmQ/ejpcIm5vbmVcIixcInN0cm9rZS13aWR0aFwiOmEuZ3JhcGguc3Ryb2tlV2lkdGgoKSsoZD8wOjIqbil9KSxbYS50cmFja2VyLGEubWFya2VyR3JvdXBdLmZvckVhY2goZnVuY3Rpb24oYSl7YS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtdHJhY2tlclwiKS5vbihcIm1vdXNlb3ZlclwiLHkpLm9uKFwibW91c2VvdXRcIixmdW5jdGlvbihhKXtoLm9uVHJhY2tlck1vdXNlT3V0KGEpfSk7Yi5jdXJzb3ImJlxuIWYuc3R5bGVkTW9kZSYmYS5jc3Moe2N1cnNvcjpiLmN1cnNvcn0pO2lmKGcpYS5vbihcInRvdWNoc3RhcnRcIix5KX0pKTtxKHRoaXMsXCJhZnRlckRyYXdUcmFja2VyXCIpfX07bC5jb2x1bW4mJihsLmNvbHVtbi5wcm90b3R5cGUuZHJhd1RyYWNrZXI9RS5kcmF3VHJhY2tlclBvaW50KTtsLnBpZSYmKGwucGllLnByb3RvdHlwZS5kcmF3VHJhY2tlcj1FLmRyYXdUcmFja2VyUG9pbnQpO2wuc2NhdHRlciYmKGwuc2NhdHRlci5wcm90b3R5cGUuZHJhd1RyYWNrZXI9RS5kcmF3VHJhY2tlclBvaW50KTtHKGIucHJvdG90eXBlLHtzZXRJdGVtRXZlbnRzOmZ1bmN0aW9uKGIsYyxlKXt2YXIgZj10aGlzLGc9Zi5jaGFydC5yZW5kZXJlci5ib3hXcmFwcGVyLGs9YiBpbnN0YW5jZW9mIGQsaD1cImhpZ2hjaGFydHMtbGVnZW5kLVwiKyhrP1wicG9pbnRcIjpcInNlcmllc1wiKStcIi1hY3RpdmVcIixsPWYuY2hhcnQuc3R5bGVkTW9kZTsoZT9jOmIubGVnZW5kR3JvdXApLm9uKFwibW91c2VvdmVyXCIsZnVuY3Rpb24oKXtiLnZpc2libGUmJlxuZi5hbGxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IhPT1hJiZhLnNldFN0YXRlKFwiaW5hY3RpdmVcIiwhayl9KTtiLnNldFN0YXRlKFwiaG92ZXJcIik7Yi52aXNpYmxlJiZnLmFkZENsYXNzKGgpO2x8fGMuY3NzKGYub3B0aW9ucy5pdGVtSG92ZXJTdHlsZSl9KS5vbihcIm1vdXNlb3V0XCIsZnVuY3Rpb24oKXtmLmNoYXJ0LnN0eWxlZE1vZGV8fGMuY3NzKGEoYi52aXNpYmxlP2YuaXRlbVN0eWxlOmYuaXRlbUhpZGRlblN0eWxlKSk7Zi5hbGxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IhPT1hJiZhLnNldFN0YXRlKFwiXCIsIWspfSk7Zy5yZW1vdmVDbGFzcyhoKTtiLnNldFN0YXRlKCl9KS5vbihcImNsaWNrXCIsZnVuY3Rpb24oYSl7dmFyIGM9ZnVuY3Rpb24oKXtiLnNldFZpc2libGUmJmIuc2V0VmlzaWJsZSgpO2YuYWxsSXRlbXMuZm9yRWFjaChmdW5jdGlvbihhKXtiIT09YSYmYS5zZXRTdGF0ZShiLnZpc2libGU/XCJpbmFjdGl2ZVwiOlwiXCIsIWspfSl9O2cucmVtb3ZlQ2xhc3MoaCk7YT1cbnticm93c2VyRXZlbnQ6YX07Yi5maXJlUG9pbnRFdmVudD9iLmZpcmVQb2ludEV2ZW50KFwibGVnZW5kSXRlbUNsaWNrXCIsYSxjKTpxKGIsXCJsZWdlbmRJdGVtQ2xpY2tcIixhLGMpfSl9LGNyZWF0ZUNoZWNrYm94Rm9ySXRlbTpmdW5jdGlvbihhKXthLmNoZWNrYm94PUgoXCJpbnB1dFwiLHt0eXBlOlwiY2hlY2tib3hcIixjbGFzc05hbWU6XCJoaWdoY2hhcnRzLWxlZ2VuZC1jaGVja2JveFwiLGNoZWNrZWQ6YS5zZWxlY3RlZCxkZWZhdWx0Q2hlY2tlZDphLnNlbGVjdGVkfSx0aGlzLm9wdGlvbnMuaXRlbUNoZWNrYm94U3R5bGUsdGhpcy5jaGFydC5jb250YWluZXIpO0MoYS5jaGVja2JveCxcImNsaWNrXCIsZnVuY3Rpb24oYil7cShhLnNlcmllc3x8YSxcImNoZWNrYm94Q2xpY2tcIix7Y2hlY2tlZDpiLnRhcmdldC5jaGVja2VkLGl0ZW06YX0sZnVuY3Rpb24oKXthLnNlbGVjdCgpfSl9KX19KTtHKGYucHJvdG90eXBlLHtzaG93UmVzZXRab29tOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2Iuem9vbU91dCgpfVxudmFyIGI9dGhpcyxjPWgubGFuZyxkPWIub3B0aW9ucy5jaGFydC5yZXNldFpvb21CdXR0b24sZT1kLnRoZW1lLGY9ZS5zdGF0ZXMsZz1cImNoYXJ0XCI9PT1kLnJlbGF0aXZlVG98fFwic3BhY2VCb3hcIj09PWQucmVsYXRpdmVUbz9udWxsOlwicGxvdEJveFwiO3EodGhpcyxcImJlZm9yZVNob3dSZXNldFpvb21cIixudWxsLGZ1bmN0aW9uKCl7Yi5yZXNldFpvb21CdXR0b249Yi5yZW5kZXJlci5idXR0b24oYy5yZXNldFpvb20sbnVsbCxudWxsLGEsZSxmJiZmLmhvdmVyKS5hdHRyKHthbGlnbjpkLnBvc2l0aW9uLmFsaWduLHRpdGxlOmMucmVzZXRab29tVGl0bGV9KS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtcmVzZXQtem9vbVwiKS5hZGQoKS5hbGlnbihkLnBvc2l0aW9uLCExLGcpfSk7cSh0aGlzLFwiYWZ0ZXJTaG93UmVzZXRab29tXCIpfSx6b29tT3V0OmZ1bmN0aW9uKCl7cSh0aGlzLFwic2VsZWN0aW9uXCIse3Jlc2V0U2VsZWN0aW9uOiEwfSx0aGlzLnpvb20pfSx6b29tOmZ1bmN0aW9uKGEpe3ZhciBiPVxudGhpcyxjLGQ9Yi5wb2ludGVyLGU9ITEsZj1iLmludmVydGVkP2QubW91c2VEb3duWDpkLm1vdXNlRG93blk7IWF8fGEucmVzZXRTZWxlY3Rpb24/KGIuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2M9YS56b29tKCl9KSxkLmluaXRpYXRlZD0hMSk6YS54QXhpcy5jb25jYXQoYS55QXhpcykuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgZz1hLmF4aXMsaz1iLmludmVydGVkP2cubGVmdDpnLnRvcCxoPWIuaW52ZXJ0ZWQ/aytnLndpZHRoOmsrZy5oZWlnaHQsbD1nLmlzWEF4aXMsbT0hMTtpZighbCYmZj49ayYmZjw9aHx8bHx8IUYoZikpbT0hMDtkW2w/XCJ6b29tWFwiOlwiem9vbVlcIl0mJm0mJihjPWcuem9vbShhLm1pbixhLm1heCksZy5kaXNwbGF5QnRuJiYoZT0hMCkpfSk7dmFyIGc9Yi5yZXNldFpvb21CdXR0b247ZSYmIWc/Yi5zaG93UmVzZXRab29tKCk6IWUmJkIoZykmJihiLnJlc2V0Wm9vbUJ1dHRvbj1nLmRlc3Ryb3koKSk7YyYmYi5yZWRyYXcodihiLm9wdGlvbnMuY2hhcnQuYW5pbWF0aW9uLFxuYSYmYS5hbmltYXRpb24sMTAwPmIucG9pbnRDb3VudCkpfSxwYW46ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9Yy5ob3ZlclBvaW50cyxlO3EodGhpcyxcInBhblwiLHtvcmlnaW5hbEV2ZW50OmF9LGZ1bmN0aW9uKCl7ZCYmZC5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0U3RhdGUoKX0pOyhcInh5XCI9PT1iP1sxLDBdOlsxXSkuZm9yRWFjaChmdW5jdGlvbihiKXtiPWNbYj9cInhBeGlzXCI6XCJ5QXhpc1wiXVswXTt2YXIgZD1iLmhvcml6LGY9YVtkP1wiY2hhcnRYXCI6XCJjaGFydFlcIl07ZD1kP1wibW91c2VEb3duWFwiOlwibW91c2VEb3duWVwiO3ZhciBnPWNbZF0saz0oYi5wb2ludFJhbmdlfHwwKS8yLGg9Yi5yZXZlcnNlZCYmIWMuaW52ZXJ0ZWR8fCFiLnJldmVyc2VkJiZjLmludmVydGVkPy0xOjEsbD1iLmdldEV4dHJlbWVzKCkscD1iLnRvVmFsdWUoZy1mLCEwKStrKmg7aD1iLnRvVmFsdWUoZytiLmxlbi1mLCEwKS1rKmg7dmFyIG49aDxwO2c9bj9oOnA7cD1uP3A6aDtoPU1hdGgubWluKGwuZGF0YU1pbixcbms/bC5taW46Yi50b1ZhbHVlKGIudG9QaXhlbHMobC5taW4pLWIubWluUGl4ZWxQYWRkaW5nKSk7az1NYXRoLm1heChsLmRhdGFNYXgsaz9sLm1heDpiLnRvVmFsdWUoYi50b1BpeGVscyhsLm1heCkrYi5taW5QaXhlbFBhZGRpbmcpKTtuPWgtZzswPG4mJihwKz1uLGc9aCk7bj1wLWs7MDxuJiYocD1rLGctPW4pO2Iuc2VyaWVzLmxlbmd0aCYmZyE9PWwubWluJiZwIT09bC5tYXgmJihiLnNldEV4dHJlbWVzKGcscCwhMSwhMSx7dHJpZ2dlcjpcInBhblwifSksZT0hMCk7Y1tkXT1mfSk7ZSYmYy5yZWRyYXcoITEpO3koYy5jb250YWluZXIse2N1cnNvcjpcIm1vdmVcIn0pfSl9fSk7RyhkLnByb3RvdHlwZSx7c2VsZWN0OmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxkPWMuc2VyaWVzLGU9ZC5jaGFydDt0aGlzLnNlbGVjdGVkU3RhZ2luZz1hPXYoYSwhYy5zZWxlY3RlZCk7Yy5maXJlUG9pbnRFdmVudChhP1wic2VsZWN0XCI6XCJ1bnNlbGVjdFwiLHthY2N1bXVsYXRlOmJ9LGZ1bmN0aW9uKCl7Yy5zZWxlY3RlZD1cbmMub3B0aW9ucy5zZWxlY3RlZD1hO2Qub3B0aW9ucy5kYXRhW2QuZGF0YS5pbmRleE9mKGMpXT1jLm9wdGlvbnM7Yy5zZXRTdGF0ZShhJiZcInNlbGVjdFwiKTtifHxlLmdldFNlbGVjdGVkUG9pbnRzKCkuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1hLnNlcmllczthLnNlbGVjdGVkJiZhIT09YyYmKGEuc2VsZWN0ZWQ9YS5vcHRpb25zLnNlbGVjdGVkPSExLGIub3B0aW9ucy5kYXRhW2IuZGF0YS5pbmRleE9mKGEpXT1hLm9wdGlvbnMsYS5zZXRTdGF0ZShlLmhvdmVyUG9pbnRzJiZiLm9wdGlvbnMuaW5hY3RpdmVPdGhlclBvaW50cz9cImluYWN0aXZlXCI6XCJcIiksYS5maXJlUG9pbnRFdmVudChcInVuc2VsZWN0XCIpKX0pfSk7ZGVsZXRlIHRoaXMuc2VsZWN0ZWRTdGFnaW5nfSxvbk1vdXNlT3ZlcjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnNlcmllcy5jaGFydCxjPWIucG9pbnRlcjthPWE/Yy5ub3JtYWxpemUoYSk6Yy5nZXRDaGFydENvb3JkaW5hdGVzRnJvbVBvaW50KHRoaXMsYi5pbnZlcnRlZCk7XG5jLnJ1blBvaW50QWN0aW9ucyhhLHRoaXMpfSxvbk1vdXNlT3V0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZXJpZXMuY2hhcnQ7dGhpcy5maXJlUG9pbnRFdmVudChcIm1vdXNlT3V0XCIpO3RoaXMuc2VyaWVzLm9wdGlvbnMuaW5hY3RpdmVPdGhlclBvaW50c3x8KGEuaG92ZXJQb2ludHN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0U3RhdGUoKX0pO2EuaG92ZXJQb2ludHM9YS5ob3ZlclBvaW50PW51bGx9LGltcG9ydEV2ZW50czpmdW5jdGlvbigpe2lmKCF0aGlzLmhhc0ltcG9ydGVkRXZlbnRzKXt2YXIgYj10aGlzLGQ9YShiLnNlcmllcy5vcHRpb25zLnBvaW50LGIub3B0aW9ucykuZXZlbnRzO2IuZXZlbnRzPWQ7dChkLGZ1bmN0aW9uKGEsZCl7Yy5pc0Z1bmN0aW9uKGEpJiZDKGIsZCxhKX0pO3RoaXMuaGFzSW1wb3J0ZWRFdmVudHM9ITB9fSxzZXRTdGF0ZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuc2VyaWVzLGQ9dGhpcy5zdGF0ZSxlPWMub3B0aW9ucy5zdGF0ZXNbYXx8XG5cIm5vcm1hbFwiXXx8e30sZj1uW2MudHlwZV0ubWFya2VyJiZjLm9wdGlvbnMubWFya2VyLGc9ZiYmITE9PT1mLmVuYWJsZWQsaD1mJiZmLnN0YXRlcyYmZi5zdGF0ZXNbYXx8XCJub3JtYWxcIl18fHt9LGw9ITE9PT1oLmVuYWJsZWQscD1jLnN0YXRlTWFya2VyR3JhcGhpYyx1PXRoaXMubWFya2VyfHx7fSx0PWMuY2hhcnQseT1jLmhhbG8seixCPWYmJmMubWFya2VyQXR0cmliczthPWF8fFwiXCI7aWYoIShhPT09dGhpcy5zdGF0ZSYmIWJ8fHRoaXMuc2VsZWN0ZWQmJlwic2VsZWN0XCIhPT1hfHwhMT09PWUuZW5hYmxlZHx8YSYmKGx8fGcmJiExPT09aC5lbmFibGVkKXx8YSYmdS5zdGF0ZXMmJnUuc3RhdGVzW2FdJiYhMT09PXUuc3RhdGVzW2FdLmVuYWJsZWQpKXt0aGlzLnN0YXRlPWE7QiYmKHo9Yy5tYXJrZXJBdHRyaWJzKHRoaXMsYSkpO2lmKHRoaXMuZ3JhcGhpYyl7ZCYmdGhpcy5ncmFwaGljLnJlbW92ZUNsYXNzKFwiaGlnaGNoYXJ0cy1wb2ludC1cIitkKTthJiZ0aGlzLmdyYXBoaWMuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXBvaW50LVwiK1xuYSk7aWYoIXQuc3R5bGVkTW9kZSl7dmFyIEM9Yy5wb2ludEF0dHJpYnModGhpcyxhKTt2YXIgSD12KHQub3B0aW9ucy5jaGFydC5hbmltYXRpb24sZS5hbmltYXRpb24pO2Mub3B0aW9ucy5pbmFjdGl2ZU90aGVyUG9pbnRzJiYoKHRoaXMuZGF0YUxhYmVsc3x8W10pLmZvckVhY2goZnVuY3Rpb24oYSl7YSYmYS5hbmltYXRlKHtvcGFjaXR5OkMub3BhY2l0eX0sSCl9KSx0aGlzLmNvbm5lY3RvciYmdGhpcy5jb25uZWN0b3IuYW5pbWF0ZSh7b3BhY2l0eTpDLm9wYWNpdHl9LEgpKTt0aGlzLmdyYXBoaWMuYW5pbWF0ZShDLEgpfXomJnRoaXMuZ3JhcGhpYy5hbmltYXRlKHosdih0Lm9wdGlvbnMuY2hhcnQuYW5pbWF0aW9uLGguYW5pbWF0aW9uLGYuYW5pbWF0aW9uKSk7cCYmcC5oaWRlKCl9ZWxzZXtpZihhJiZoKXtkPXUuc3ltYm9sfHxjLnN5bWJvbDtwJiZwLmN1cnJlbnRTeW1ib2whPT1kJiYocD1wLmRlc3Ryb3koKSk7aWYoeilpZihwKXBbYj9cImFuaW1hdGVcIjpcImF0dHJcIl0oe3g6ei54LFxueTp6Lnl9KTtlbHNlIGQmJihjLnN0YXRlTWFya2VyR3JhcGhpYz1wPXQucmVuZGVyZXIuc3ltYm9sKGQsei54LHoueSx6LndpZHRoLHouaGVpZ2h0KS5hZGQoYy5tYXJrZXJHcm91cCkscC5jdXJyZW50U3ltYm9sPWQpOyF0LnN0eWxlZE1vZGUmJnAmJnAuYXR0cihjLnBvaW50QXR0cmlicyh0aGlzLGEpKX1wJiYocFthJiZ0aGlzLmlzSW5zaWRlP1wic2hvd1wiOlwiaGlkZVwiXSgpLHAuZWxlbWVudC5wb2ludD10aGlzKX1hPWUuaGFsbztlPShwPXRoaXMuZ3JhcGhpY3x8cCkmJnAudmlzaWJpbGl0eXx8XCJpbmhlcml0XCI7YSYmYS5zaXplJiZwJiZcImhpZGRlblwiIT09ZT8oeXx8KGMuaGFsbz15PXQucmVuZGVyZXIucGF0aCgpLmFkZChwLnBhcmVudEdyb3VwKSkseS5zaG93KClbYj9cImFuaW1hdGVcIjpcImF0dHJcIl0oe2Q6dGhpcy5oYWxvUGF0aChhLnNpemUpfSkseS5hdHRyKHtcImNsYXNzXCI6XCJoaWdoY2hhcnRzLWhhbG8gaGlnaGNoYXJ0cy1jb2xvci1cIit2KHRoaXMuY29sb3JJbmRleCxjLmNvbG9ySW5kZXgpK1xuKHRoaXMuY2xhc3NOYW1lP1wiIFwiK3RoaXMuY2xhc3NOYW1lOlwiXCIpLHZpc2liaWxpdHk6ZSx6SW5kZXg6LTF9KSx5LnBvaW50PXRoaXMsdC5zdHlsZWRNb2RlfHx5LmF0dHIoRyh7ZmlsbDp0aGlzLmNvbG9yfHxjLmNvbG9yLFwiZmlsbC1vcGFjaXR5XCI6YS5vcGFjaXR5fSxhLmF0dHJpYnV0ZXMpKSk6eSYmeS5wb2ludCYmeS5wb2ludC5oYWxvUGF0aCYmeS5hbmltYXRlKHtkOnkucG9pbnQuaGFsb1BhdGgoMCl9LG51bGwseS5oaWRlKTtxKHRoaXMsXCJhZnRlclNldFN0YXRlXCIpfX0saGFsb1BhdGg6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2VyaWVzLmNoYXJ0LnJlbmRlcmVyLnN5bWJvbHMuY2lyY2xlKE1hdGguZmxvb3IodGhpcy5wbG90WCktYSx0aGlzLnBsb3RZLWEsMiphLDIqYSl9fSk7RyhlLnByb3RvdHlwZSx7b25Nb3VzZU92ZXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNoYXJ0LGI9YS5ob3ZlclNlcmllcztpZihiJiZiIT09dGhpcyliLm9uTW91c2VPdXQoKTt0aGlzLm9wdGlvbnMuZXZlbnRzLm1vdXNlT3ZlciYmXG5xKHRoaXMsXCJtb3VzZU92ZXJcIik7dGhpcy5zZXRTdGF0ZShcImhvdmVyXCIpO2EuaG92ZXJTZXJpZXM9dGhpc30sb25Nb3VzZU91dDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucyxiPXRoaXMuY2hhcnQsYz1iLnRvb2x0aXAsZD1iLmhvdmVyUG9pbnQ7Yi5ob3ZlclNlcmllcz1udWxsO2lmKGQpZC5vbk1vdXNlT3V0KCk7dGhpcyYmYS5ldmVudHMubW91c2VPdXQmJnEodGhpcyxcIm1vdXNlT3V0XCIpOyFjfHx0aGlzLnN0aWNreVRyYWNraW5nfHxjLnNoYXJlZCYmIXRoaXMubm9TaGFyZWRUb29sdGlwfHxjLmhpZGUoKTtiLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0U3RhdGUoXCJcIiwhMCl9KX0sc2V0U3RhdGU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9Yy5vcHRpb25zLGU9Yy5ncmFwaCxmPWQuaW5hY3RpdmVPdGhlclBvaW50cyxnPWQuc3RhdGVzLGg9ZC5saW5lV2lkdGgsbD1kLm9wYWNpdHksbj12KGdbYXx8XCJub3JtYWxcIl0mJmdbYXx8XCJub3JtYWxcIl0uYW5pbWF0aW9uLFxuYy5jaGFydC5vcHRpb25zLmNoYXJ0LmFuaW1hdGlvbik7ZD0wO2E9YXx8XCJcIjtpZihjLnN0YXRlIT09YSYmKFtjLmdyb3VwLGMubWFya2VyR3JvdXAsYy5kYXRhTGFiZWxzR3JvdXBdLmZvckVhY2goZnVuY3Rpb24oYil7YiYmKGMuc3RhdGUmJmIucmVtb3ZlQ2xhc3MoXCJoaWdoY2hhcnRzLXNlcmllcy1cIitjLnN0YXRlKSxhJiZiLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1zZXJpZXMtXCIrYSkpfSksYy5zdGF0ZT1hLCFjLmNoYXJ0LnN0eWxlZE1vZGUpKXtpZihnW2FdJiYhMT09PWdbYV0uZW5hYmxlZClyZXR1cm47YSYmKGg9Z1thXS5saW5lV2lkdGh8fGgrKGdbYV0ubGluZVdpZHRoUGx1c3x8MCksbD12KGdbYV0ub3BhY2l0eSxsKSk7aWYoZSYmIWUuZGFzaHN0eWxlKWZvcihnPXtcInN0cm9rZS13aWR0aFwiOmh9LGUuYW5pbWF0ZShnLG4pO2NbXCJ6b25lLWdyYXBoLVwiK2RdOyljW1wiem9uZS1ncmFwaC1cIitkXS5hdHRyKGcpLGQrPTE7Znx8W2MuZ3JvdXAsYy5tYXJrZXJHcm91cCxjLmRhdGFMYWJlbHNHcm91cCxcbmMubGFiZWxCeVNlcmllc10uZm9yRWFjaChmdW5jdGlvbihhKXthJiZhLmFuaW1hdGUoe29wYWNpdHk6bH0sbil9KX1iJiZmJiZjLnBvaW50cyYmYy5zZXRBbGxQb2ludHNUb1N0YXRlKGEpfSxzZXRBbGxQb2ludHNUb1N0YXRlOmZ1bmN0aW9uKGEpe3RoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oYil7Yi5zZXRTdGF0ZSYmYi5zZXRTdGF0ZShhKX0pfSxzZXRWaXNpYmxlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxkPWMuY2hhcnQsZT1jLmxlZ2VuZEl0ZW0sZj1kLm9wdGlvbnMuY2hhcnQuaWdub3JlSGlkZGVuU2VyaWVzLGc9Yy52aXNpYmxlO3ZhciBoPShjLnZpc2libGU9YT1jLm9wdGlvbnMudmlzaWJsZT1jLnVzZXJPcHRpb25zLnZpc2libGU9dm9pZCAwPT09YT8hZzphKT9cInNob3dcIjpcImhpZGVcIjtbXCJncm91cFwiLFwiZGF0YUxhYmVsc0dyb3VwXCIsXCJtYXJrZXJHcm91cFwiLFwidHJhY2tlclwiLFwidHRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtpZihjW2FdKWNbYV1baF0oKX0pO2lmKGQuaG92ZXJTZXJpZXM9PT1cbmN8fChkLmhvdmVyUG9pbnQmJmQuaG92ZXJQb2ludC5zZXJpZXMpPT09YyljLm9uTW91c2VPdXQoKTtlJiZkLmxlZ2VuZC5jb2xvcml6ZUl0ZW0oYyxhKTtjLmlzRGlydHk9ITA7Yy5vcHRpb25zLnN0YWNraW5nJiZkLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Eub3B0aW9ucy5zdGFja2luZyYmYS52aXNpYmxlJiYoYS5pc0RpcnR5PSEwKX0pO2MubGlua2VkU2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYil7Yi5zZXRWaXNpYmxlKGEsITEpfSk7ZiYmKGQuaXNEaXJ0eUJveD0hMCk7cShjLGgpOyExIT09YiYmZC5yZWRyYXcoKX0sc2hvdzpmdW5jdGlvbigpe3RoaXMuc2V0VmlzaWJsZSghMCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLnNldFZpc2libGUoITEpfSxzZWxlY3Q6ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3RlZD1hPXRoaXMub3B0aW9ucy5zZWxlY3RlZD12b2lkIDA9PT1hPyF0aGlzLnNlbGVjdGVkOmE7dGhpcy5jaGVja2JveCYmKHRoaXMuY2hlY2tib3guY2hlY2tlZD1hKTtcbnEodGhpcyxhP1wic2VsZWN0XCI6XCJ1bnNlbGVjdFwiKX0sZHJhd1RyYWNrZXI6RS5kcmF3VHJhY2tlckdyYXBofSl9KTtNKEksXCJwYXJ0cy9SZXNwb25zaXZlLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5pc0FycmF5LEc9Zi5pc09iamVjdCx6PWYub2JqZWN0RWFjaCxCPWYucGljayx0PWYuc3BsYXQ7Zj1jLkNoYXJ0O2YucHJvdG90eXBlLnNldFJlc3BvbnNpdmU9ZnVuY3Rpb24oZix0KXt2YXIgdj10aGlzLm9wdGlvbnMucmVzcG9uc2l2ZSx5PVtdLGg9dGhpcy5jdXJyZW50UmVzcG9uc2l2ZTshdCYmdiYmdi5ydWxlcyYmdi5ydWxlcy5mb3JFYWNoKGZ1bmN0aW9uKGYpe3ZvaWQgMD09PWYuX2lkJiYoZi5faWQ9Yy51bmlxdWVLZXkoKSk7dGhpcy5tYXRjaFJlc3BvbnNpdmVSdWxlKGYseSl9LHRoaXMpO3Q9Yy5tZXJnZS5hcHBseSgwLHkubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBjLmZpbmQodi5ydWxlcyxcbmZ1bmN0aW9uKGMpe3JldHVybiBjLl9pZD09PWZ9KS5jaGFydE9wdGlvbnN9KSk7dC5pc1Jlc3BvbnNpdmVPcHRpb25zPSEwO3k9eS50b1N0cmluZygpfHx2b2lkIDA7eSE9PShoJiZoLnJ1bGVJZHMpJiYoaCYmdGhpcy51cGRhdGUoaC51bmRvT3B0aW9ucyxmLCEwKSx5PyhoPXRoaXMuY3VycmVudE9wdGlvbnModCksaC5pc1Jlc3BvbnNpdmVPcHRpb25zPSEwLHRoaXMuY3VycmVudFJlc3BvbnNpdmU9e3J1bGVJZHM6eSxtZXJnZWRPcHRpb25zOnQsdW5kb09wdGlvbnM6aH0sdGhpcy51cGRhdGUodCxmLCEwKSk6dGhpcy5jdXJyZW50UmVzcG9uc2l2ZT12b2lkIDApfTtmLnByb3RvdHlwZS5tYXRjaFJlc3BvbnNpdmVSdWxlPWZ1bmN0aW9uKGMsZil7dmFyIHQ9Yy5jb25kaXRpb247KHQuY2FsbGJhY2t8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hhcnRXaWR0aDw9Qih0Lm1heFdpZHRoLE51bWJlci5NQVhfVkFMVUUpJiZ0aGlzLmNoYXJ0SGVpZ2h0PD1CKHQubWF4SGVpZ2h0LE51bWJlci5NQVhfVkFMVUUpJiZcbnRoaXMuY2hhcnRXaWR0aD49Qih0Lm1pbldpZHRoLDApJiZ0aGlzLmNoYXJ0SGVpZ2h0Pj1CKHQubWluSGVpZ2h0LDApfSkuY2FsbCh0aGlzKSYmZi5wdXNoKGMuX2lkKX07Zi5wcm90b3R5cGUuY3VycmVudE9wdGlvbnM9ZnVuY3Rpb24oYyl7ZnVuY3Rpb24gZihjLG4scSxnKXt2YXIgYjt6KGMsZnVuY3Rpb24oYSxjKXtpZighZyYmLTE8di5jb2xsZWN0aW9uc1dpdGhVcGRhdGUuaW5kZXhPZihjKSlmb3IoYT10KGEpLHFbY109W10sYj0wO2I8YS5sZW5ndGg7YisrKW5bY11bYl0mJihxW2NdW2JdPXt9LGYoYVtiXSxuW2NdW2JdLHFbY11bYl0sZysxKSk7ZWxzZSBHKGEpPyhxW2NdPUYoYSk/W106e30sZihhLG5bY118fHt9LHFbY10sZysxKSk6cVtjXT12b2lkIDA9PT1uW2NdP251bGw6bltjXX0pfXZhciB2PXRoaXMseT17fTtmKGMsdGhpcy5vcHRpb25zLHksMCk7cmV0dXJuIHl9fSk7TShJLFwibWFzdGVycy9oaWdoY2hhcnRzLnNyYy5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxcbklbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5leHRlbmQ7RihjLHthcnJheU1heDpmLmFycmF5TWF4LGFycmF5TWluOmYuYXJyYXlNaW4sYXR0cjpmLmF0dHIsZGVmaW5lZDpmLmRlZmluZWQsZXJhc2U6Zi5lcmFzZSxleHRlbmQ6Zi5leHRlbmQsaXNBcnJheTpmLmlzQXJyYXksaXNDbGFzczpmLmlzQ2xhc3MsaXNET01FbGVtZW50OmYuaXNET01FbGVtZW50LGlzTnVtYmVyOmYuaXNOdW1iZXIsaXNPYmplY3Q6Zi5pc09iamVjdCxpc1N0cmluZzpmLmlzU3RyaW5nLG9iamVjdEVhY2g6Zi5vYmplY3RFYWNoLHBpY2s6Zi5waWNrLHBJbnQ6Zi5wSW50LHNldEFuaW1hdGlvbjpmLnNldEFuaW1hdGlvbixzcGxhdDpmLnNwbGF0LHN5bmNUaW1lb3V0OmYuc3luY1RpbWVvdXR9KTtyZXR1cm4gY30pO0lbXCJtYXN0ZXJzL2hpZ2hjaGFydHMuc3JjLmpzXCJdLl9tb2R1bGVzPUk7cmV0dXJuIElbXCJtYXN0ZXJzL2hpZ2hjaGFydHMuc3JjLmpzXCJdfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oaWdoY2hhcnRzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZub2RlXzEgPSByZXF1aXJlKFwiLi92bm9kZVwiKTtcbnZhciBpcyA9IHJlcXVpcmUoXCIuL2lzXCIpO1xuZnVuY3Rpb24gYWRkTlMoZGF0YSwgY2hpbGRyZW4sIHNlbCkge1xuICAgIGRhdGEubnMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuICAgIGlmIChzZWwgIT09ICdmb3JlaWduT2JqZWN0JyAmJiBjaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBjaGlsZERhdGEgPSBjaGlsZHJlbltpXS5kYXRhO1xuICAgICAgICAgICAgaWYgKGNoaWxkRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYWRkTlMoY2hpbGREYXRhLCBjaGlsZHJlbltpXS5jaGlsZHJlbiwgY2hpbGRyZW5baV0uc2VsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGgoc2VsLCBiLCBjKSB7XG4gICAgdmFyIGRhdGEgPSB7fSwgY2hpbGRyZW4sIHRleHQsIGk7XG4gICAgaWYgKGMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkYXRhID0gYjtcbiAgICAgICAgaWYgKGlzLmFycmF5KGMpKSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXMucHJpbWl0aXZlKGMpKSB7XG4gICAgICAgICAgICB0ZXh0ID0gYztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjICYmIGMuc2VsKSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IFtjXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChiICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzLmFycmF5KGIpKSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXMucHJpbWl0aXZlKGIpKSB7XG4gICAgICAgICAgICB0ZXh0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiICYmIGIuc2VsKSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IFtiXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKGlzLnByaW1pdGl2ZShjaGlsZHJlbltpXSkpXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0gPSB2bm9kZV8xLnZub2RlKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNoaWxkcmVuW2ldLCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChzZWxbMF0gPT09ICdzJyAmJiBzZWxbMV0gPT09ICd2JyAmJiBzZWxbMl0gPT09ICdnJyAmJlxuICAgICAgICAoc2VsLmxlbmd0aCA9PT0gMyB8fCBzZWxbM10gPT09ICcuJyB8fCBzZWxbM10gPT09ICcjJykpIHtcbiAgICAgICAgYWRkTlMoZGF0YSwgY2hpbGRyZW4sIHNlbCk7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZV8xLnZub2RlKHNlbCwgZGF0YSwgY2hpbGRyZW4sIHRleHQsIHVuZGVmaW5lZCk7XG59XG5leHBvcnRzLmggPSBoO1xuO1xuZXhwb3J0cy5kZWZhdWx0ID0gaDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpO1xufVxuZnVuY3Rpb24gY3JlYXRlQ29tbWVudCh0ZXh0KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dCk7XG59XG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgbmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSkge1xuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQobm9kZSwgY2hpbGQpIHtcbiAgICBub2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkKG5vZGUsIGNoaWxkKSB7XG4gICAgbm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBwYXJlbnROb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlO1xufVxuZnVuY3Rpb24gbmV4dFNpYmxpbmcobm9kZSkge1xuICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xufVxuZnVuY3Rpb24gdGFnTmFtZShlbG0pIHtcbiAgICByZXR1cm4gZWxtLnRhZ05hbWU7XG59XG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudChub2RlLCB0ZXh0KSB7XG4gICAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59XG5mdW5jdGlvbiBnZXRUZXh0Q29udGVudChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudGV4dENvbnRlbnQ7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSAxO1xufVxuZnVuY3Rpb24gaXNUZXh0KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gMztcbn1cbmZ1bmN0aW9uIGlzQ29tbWVudChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IDg7XG59XG5leHBvcnRzLmh0bWxEb21BcGkgPSB7XG4gICAgY3JlYXRlRWxlbWVudDogY3JlYXRlRWxlbWVudCxcbiAgICBjcmVhdGVFbGVtZW50TlM6IGNyZWF0ZUVsZW1lbnROUyxcbiAgICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gICAgY3JlYXRlQ29tbWVudDogY3JlYXRlQ29tbWVudCxcbiAgICBpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcbiAgICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gICAgYXBwZW5kQ2hpbGQ6IGFwcGVuZENoaWxkLFxuICAgIHBhcmVudE5vZGU6IHBhcmVudE5vZGUsXG4gICAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICAgIHRhZ05hbWU6IHRhZ05hbWUsXG4gICAgc2V0VGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuICAgIGdldFRleHRDb250ZW50OiBnZXRUZXh0Q29udGVudCxcbiAgICBpc0VsZW1lbnQ6IGlzRWxlbWVudCxcbiAgICBpc1RleHQ6IGlzVGV4dCxcbiAgICBpc0NvbW1lbnQ6IGlzQ29tbWVudCxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLmh0bWxEb21BcGk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1odG1sZG9tYXBpLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hcnJheSA9IEFycmF5LmlzQXJyYXk7XG5mdW5jdGlvbiBwcmltaXRpdmUocykge1xuICAgIHJldHVybiB0eXBlb2YgcyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHMgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5wcmltaXRpdmUgPSBwcmltaXRpdmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB4bGlua05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnO1xudmFyIHhtbE5TID0gJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSc7XG52YXIgY29sb25DaGFyID0gNTg7XG52YXIgeENoYXIgPSAxMjA7XG5mdW5jdGlvbiB1cGRhdGVBdHRycyhvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIga2V5LCBlbG0gPSB2bm9kZS5lbG0sIG9sZEF0dHJzID0gb2xkVm5vZGUuZGF0YS5hdHRycywgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzO1xuICAgIGlmICghb2xkQXR0cnMgJiYgIWF0dHJzKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKG9sZEF0dHJzID09PSBhdHRycylcbiAgICAgICAgcmV0dXJuO1xuICAgIG9sZEF0dHJzID0gb2xkQXR0cnMgfHwge307XG4gICAgYXR0cnMgPSBhdHRycyB8fCB7fTtcbiAgICAvLyB1cGRhdGUgbW9kaWZpZWQgYXR0cmlidXRlcywgYWRkIG5ldyBhdHRyaWJ1dGVzXG4gICAgZm9yIChrZXkgaW4gYXR0cnMpIHtcbiAgICAgICAgdmFyIGN1ciA9IGF0dHJzW2tleV07XG4gICAgICAgIHZhciBvbGQgPSBvbGRBdHRyc1trZXldO1xuICAgICAgICBpZiAob2xkICE9PSBjdXIpIHtcbiAgICAgICAgICAgIGlmIChjdXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBlbG0uc2V0QXR0cmlidXRlKGtleSwgXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjdXIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleS5jaGFyQ29kZUF0KDApICE9PSB4Q2hhcikge1xuICAgICAgICAgICAgICAgICAgICBlbG0uc2V0QXR0cmlidXRlKGtleSwgY3VyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5LmNoYXJDb2RlQXQoMykgPT09IGNvbG9uQ2hhcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBBc3N1bWUgeG1sIG5hbWVzcGFjZVxuICAgICAgICAgICAgICAgICAgICBlbG0uc2V0QXR0cmlidXRlTlMoeG1sTlMsIGtleSwgY3VyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5LmNoYXJDb2RlQXQoNSkgPT09IGNvbG9uQ2hhcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBBc3N1bWUgeGxpbmsgbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgICAgIGVsbS5zZXRBdHRyaWJ1dGVOUyh4bGlua05TLCBrZXksIGN1cik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbG0uc2V0QXR0cmlidXRlKGtleSwgY3VyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gcmVtb3ZlIHJlbW92ZWQgYXR0cmlidXRlc1xuICAgIC8vIHVzZSBgaW5gIG9wZXJhdG9yIHNpbmNlIHRoZSBwcmV2aW91cyBgZm9yYCBpdGVyYXRpb24gdXNlcyBpdCAoLmkuZS4gYWRkIGV2ZW4gYXR0cmlidXRlcyB3aXRoIHVuZGVmaW5lZCB2YWx1ZSlcbiAgICAvLyB0aGUgb3RoZXIgb3B0aW9uIGlzIHRvIHJlbW92ZSBhbGwgYXR0cmlidXRlcyB3aXRoIHZhbHVlID09IHVuZGVmaW5lZFxuICAgIGZvciAoa2V5IGluIG9sZEF0dHJzKSB7XG4gICAgICAgIGlmICghKGtleSBpbiBhdHRycykpIHtcbiAgICAgICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuYXR0cmlidXRlc01vZHVsZSA9IHsgY3JlYXRlOiB1cGRhdGVBdHRycywgdXBkYXRlOiB1cGRhdGVBdHRycyB9O1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5hdHRyaWJ1dGVzTW9kdWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXR0cmlidXRlcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBjdXIsIG5hbWUsIGVsbSA9IHZub2RlLmVsbSwgb2xkQ2xhc3MgPSBvbGRWbm9kZS5kYXRhLmNsYXNzLCBrbGFzcyA9IHZub2RlLmRhdGEuY2xhc3M7XG4gICAgaWYgKCFvbGRDbGFzcyAmJiAha2xhc3MpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAob2xkQ2xhc3MgPT09IGtsYXNzKVxuICAgICAgICByZXR1cm47XG4gICAgb2xkQ2xhc3MgPSBvbGRDbGFzcyB8fCB7fTtcbiAgICBrbGFzcyA9IGtsYXNzIHx8IHt9O1xuICAgIGZvciAobmFtZSBpbiBvbGRDbGFzcykge1xuICAgICAgICBpZiAoIWtsYXNzW25hbWVdKSB7XG4gICAgICAgICAgICBlbG0uY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKG5hbWUgaW4ga2xhc3MpIHtcbiAgICAgICAgY3VyID0ga2xhc3NbbmFtZV07XG4gICAgICAgIGlmIChjdXIgIT09IG9sZENsYXNzW25hbWVdKSB7XG4gICAgICAgICAgICBlbG0uY2xhc3NMaXN0W2N1ciA/ICdhZGQnIDogJ3JlbW92ZSddKG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5jbGFzc01vZHVsZSA9IHsgY3JlYXRlOiB1cGRhdGVDbGFzcywgdXBkYXRlOiB1cGRhdGVDbGFzcyB9O1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5jbGFzc01vZHVsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsYXNzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gaW52b2tlSGFuZGxlcihoYW5kbGVyLCB2bm9kZSwgZXZlbnQpIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyBjYWxsIGZ1bmN0aW9uIGhhbmRsZXJcbiAgICAgICAgaGFuZGxlci5jYWxsKHZub2RlLCBldmVudCwgdm5vZGUpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAvLyBjYWxsIGhhbmRsZXIgd2l0aCBhcmd1bWVudHNcbiAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3Igc2luZ2xlIGFyZ3VtZW50IGZvciBwZXJmb3JtYW5jZVxuICAgICAgICAgICAgaWYgKGhhbmRsZXIubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlclswXS5jYWxsKHZub2RlLCBoYW5kbGVyWzFdLCBldmVudCwgdm5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBoYW5kbGVyLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChldmVudCk7XG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKHZub2RlKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyWzBdLmFwcGx5KHZub2RlLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNhbGwgbXVsdGlwbGUgaGFuZGxlcnNcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGludm9rZUhhbmRsZXIoaGFuZGxlcltpXSwgdm5vZGUsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50KGV2ZW50LCB2bm9kZSkge1xuICAgIHZhciBuYW1lID0gZXZlbnQudHlwZSwgb24gPSB2bm9kZS5kYXRhLm9uO1xuICAgIC8vIGNhbGwgZXZlbnQgaGFuZGxlcihzKSBpZiBleGlzdHNcbiAgICBpZiAob24gJiYgb25bbmFtZV0pIHtcbiAgICAgICAgaW52b2tlSGFuZGxlcihvbltuYW1lXSwgdm5vZGUsIGV2ZW50KTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVMaXN0ZW5lcigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgICAgICBoYW5kbGVFdmVudChldmVudCwgaGFuZGxlci52bm9kZSk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUV2ZW50TGlzdGVuZXJzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBvbGRPbiA9IG9sZFZub2RlLmRhdGEub24sIG9sZExpc3RlbmVyID0gb2xkVm5vZGUubGlzdGVuZXIsIG9sZEVsbSA9IG9sZFZub2RlLmVsbSwgb24gPSB2bm9kZSAmJiB2bm9kZS5kYXRhLm9uLCBlbG0gPSAodm5vZGUgJiYgdm5vZGUuZWxtKSwgbmFtZTtcbiAgICAvLyBvcHRpbWl6YXRpb24gZm9yIHJldXNlZCBpbW11dGFibGUgaGFuZGxlcnNcbiAgICBpZiAob2xkT24gPT09IG9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIGV4aXN0aW5nIGxpc3RlbmVycyB3aGljaCBubyBsb25nZXIgdXNlZFxuICAgIGlmIChvbGRPbiAmJiBvbGRMaXN0ZW5lcikge1xuICAgICAgICAvLyBpZiBlbGVtZW50IGNoYW5nZWQgb3IgZGVsZXRlZCB3ZSByZW1vdmUgYWxsIGV4aXN0aW5nIGxpc3RlbmVycyB1bmNvbmRpdGlvbmFsbHlcbiAgICAgICAgaWYgKCFvbikge1xuICAgICAgICAgICAgZm9yIChuYW1lIGluIG9sZE9uKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGxpc3RlbmVyIGlmIGVsZW1lbnQgd2FzIGNoYW5nZWQgb3IgZXhpc3RpbmcgbGlzdGVuZXJzIHJlbW92ZWRcbiAgICAgICAgICAgICAgICBvbGRFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBvbGRMaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChuYW1lIGluIG9sZE9uKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGxpc3RlbmVyIGlmIGV4aXN0aW5nIGxpc3RlbmVyIHJlbW92ZWRcbiAgICAgICAgICAgICAgICBpZiAoIW9uW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZEVsbS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIG9sZExpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGFkZCBuZXcgbGlzdGVuZXJzIHdoaWNoIGhhcyBub3QgYWxyZWFkeSBhdHRhY2hlZFxuICAgIGlmIChvbikge1xuICAgICAgICAvLyByZXVzZSBleGlzdGluZyBsaXN0ZW5lciBvciBjcmVhdGUgbmV3XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IHZub2RlLmxpc3RlbmVyID0gb2xkVm5vZGUubGlzdGVuZXIgfHwgY3JlYXRlTGlzdGVuZXIoKTtcbiAgICAgICAgLy8gdXBkYXRlIHZub2RlIGZvciBsaXN0ZW5lclxuICAgICAgICBsaXN0ZW5lci52bm9kZSA9IHZub2RlO1xuICAgICAgICAvLyBpZiBlbGVtZW50IGNoYW5nZWQgb3IgYWRkZWQgd2UgYWRkIGFsbCBuZWVkZWQgbGlzdGVuZXJzIHVuY29uZGl0aW9uYWxseVxuICAgICAgICBpZiAoIW9sZE9uKSB7XG4gICAgICAgICAgICBmb3IgKG5hbWUgaW4gb24pIHtcbiAgICAgICAgICAgICAgICAvLyBhZGQgbGlzdGVuZXIgaWYgZWxlbWVudCB3YXMgY2hhbmdlZCBvciBuZXcgbGlzdGVuZXJzIGFkZGVkXG4gICAgICAgICAgICAgICAgZWxtLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobmFtZSBpbiBvbikge1xuICAgICAgICAgICAgICAgIC8vIGFkZCBsaXN0ZW5lciBpZiBuZXcgbGlzdGVuZXIgYWRkZWRcbiAgICAgICAgICAgICAgICBpZiAoIW9sZE9uW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsbS5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5ldmVudExpc3RlbmVyc01vZHVsZSA9IHtcbiAgICBjcmVhdGU6IHVwZGF0ZUV2ZW50TGlzdGVuZXJzLFxuICAgIHVwZGF0ZTogdXBkYXRlRXZlbnRMaXN0ZW5lcnMsXG4gICAgZGVzdHJveTogdXBkYXRlRXZlbnRMaXN0ZW5lcnNcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLmV2ZW50TGlzdGVuZXJzTW9kdWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlbnRsaXN0ZW5lcnMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiB1cGRhdGVQcm9wcyhvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIga2V5LCBjdXIsIG9sZCwgZWxtID0gdm5vZGUuZWxtLCBvbGRQcm9wcyA9IG9sZFZub2RlLmRhdGEucHJvcHMsIHByb3BzID0gdm5vZGUuZGF0YS5wcm9wcztcbiAgICBpZiAoIW9sZFByb3BzICYmICFwcm9wcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChvbGRQcm9wcyA9PT0gcHJvcHMpXG4gICAgICAgIHJldHVybjtcbiAgICBvbGRQcm9wcyA9IG9sZFByb3BzIHx8IHt9O1xuICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgZm9yIChrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICAgICAgaWYgKCFwcm9wc1trZXldKSB7XG4gICAgICAgICAgICBkZWxldGUgZWxtW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgY3VyID0gcHJvcHNba2V5XTtcbiAgICAgICAgb2xkID0gb2xkUHJvcHNba2V5XTtcbiAgICAgICAgaWYgKG9sZCAhPT0gY3VyICYmIChrZXkgIT09ICd2YWx1ZScgfHwgZWxtW2tleV0gIT09IGN1cikpIHtcbiAgICAgICAgICAgIGVsbVtrZXldID0gY3VyO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5wcm9wc01vZHVsZSA9IHsgY3JlYXRlOiB1cGRhdGVQcm9wcywgdXBkYXRlOiB1cGRhdGVQcm9wcyB9O1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5wcm9wc01vZHVsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb3BzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZub2RlXzEgPSByZXF1aXJlKFwiLi92bm9kZVwiKTtcbnZhciBpcyA9IHJlcXVpcmUoXCIuL2lzXCIpO1xudmFyIGh0bWxkb21hcGlfMSA9IHJlcXVpcmUoXCIuL2h0bWxkb21hcGlcIik7XG5mdW5jdGlvbiBpc1VuZGVmKHMpIHsgcmV0dXJuIHMgPT09IHVuZGVmaW5lZDsgfVxuZnVuY3Rpb24gaXNEZWYocykgeyByZXR1cm4gcyAhPT0gdW5kZWZpbmVkOyB9XG52YXIgZW1wdHlOb2RlID0gdm5vZGVfMS5kZWZhdWx0KCcnLCB7fSwgW10sIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbmZ1bmN0aW9uIHNhbWVWbm9kZSh2bm9kZTEsIHZub2RlMikge1xuICAgIHJldHVybiB2bm9kZTEua2V5ID09PSB2bm9kZTIua2V5ICYmIHZub2RlMS5zZWwgPT09IHZub2RlMi5zZWw7XG59XG5mdW5jdGlvbiBpc1Zub2RlKHZub2RlKSB7XG4gICAgcmV0dXJuIHZub2RlLnNlbCAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gY3JlYXRlS2V5VG9PbGRJZHgoY2hpbGRyZW4sIGJlZ2luSWR4LCBlbmRJZHgpIHtcbiAgICB2YXIgaSwgbWFwID0ge30sIGtleSwgY2g7XG4gICAgZm9yIChpID0gYmVnaW5JZHg7IGkgPD0gZW5kSWR4OyArK2kpIHtcbiAgICAgICAgY2ggPSBjaGlsZHJlbltpXTtcbiAgICAgICAgaWYgKGNoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGtleSA9IGNoLmtleTtcbiAgICAgICAgICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBtYXBba2V5XSA9IGk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbn1cbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveScsICdwcmUnLCAncG9zdCddO1xudmFyIGhfMSA9IHJlcXVpcmUoXCIuL2hcIik7XG5leHBvcnRzLmggPSBoXzEuaDtcbnZhciB0aHVua18xID0gcmVxdWlyZShcIi4vdGh1bmtcIik7XG5leHBvcnRzLnRodW5rID0gdGh1bmtfMS50aHVuaztcbmZ1bmN0aW9uIGluaXQobW9kdWxlcywgZG9tQXBpKSB7XG4gICAgdmFyIGksIGosIGNicyA9IHt9O1xuICAgIHZhciBhcGkgPSBkb21BcGkgIT09IHVuZGVmaW5lZCA/IGRvbUFwaSA6IGh0bWxkb21hcGlfMS5kZWZhdWx0O1xuICAgIGZvciAoaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjYnNbaG9va3NbaV1dID0gW107XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBtb2R1bGVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB2YXIgaG9vayA9IG1vZHVsZXNbal1baG9va3NbaV1dO1xuICAgICAgICAgICAgaWYgKGhvb2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNic1tob29rc1tpXV0ucHVzaChob29rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlbXB0eU5vZGVBdChlbG0pIHtcbiAgICAgICAgdmFyIGlkID0gZWxtLmlkID8gJyMnICsgZWxtLmlkIDogJyc7XG4gICAgICAgIHZhciBjID0gZWxtLmNsYXNzTmFtZSA/ICcuJyArIGVsbS5jbGFzc05hbWUuc3BsaXQoJyAnKS5qb2luKCcuJykgOiAnJztcbiAgICAgICAgcmV0dXJuIHZub2RlXzEuZGVmYXVsdChhcGkudGFnTmFtZShlbG0pLnRvTG93ZXJDYXNlKCkgKyBpZCArIGMsIHt9LCBbXSwgdW5kZWZpbmVkLCBlbG0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVSbUNiKGNoaWxkRWxtLCBsaXN0ZW5lcnMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJtQ2IoKSB7XG4gICAgICAgICAgICBpZiAoLS1saXN0ZW5lcnMgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBhcGkucGFyZW50Tm9kZShjaGlsZEVsbSk7XG4gICAgICAgICAgICAgICAgYXBpLnJlbW92ZUNoaWxkKHBhcmVudF8xLCBjaGlsZEVsbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUVsbSh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICAgIHZhciBpLCBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLmluaXQpKSB7XG4gICAgICAgICAgICAgICAgaSh2bm9kZSk7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW4sIHNlbCA9IHZub2RlLnNlbDtcbiAgICAgICAgaWYgKHNlbCA9PT0gJyEnKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZih2bm9kZS50ZXh0KSkge1xuICAgICAgICAgICAgICAgIHZub2RlLnRleHQgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZub2RlLmVsbSA9IGFwaS5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBQYXJzZSBzZWxlY3RvclxuICAgICAgICAgICAgdmFyIGhhc2hJZHggPSBzZWwuaW5kZXhPZignIycpO1xuICAgICAgICAgICAgdmFyIGRvdElkeCA9IHNlbC5pbmRleE9mKCcuJywgaGFzaElkeCk7XG4gICAgICAgICAgICB2YXIgaGFzaCA9IGhhc2hJZHggPiAwID8gaGFzaElkeCA6IHNlbC5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZG90ID0gZG90SWR4ID4gMCA/IGRvdElkeCA6IHNlbC5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgdGFnID0gaGFzaElkeCAhPT0gLTEgfHwgZG90SWR4ICE9PSAtMSA/IHNlbC5zbGljZSgwLCBNYXRoLm1pbihoYXNoLCBkb3QpKSA6IHNlbDtcbiAgICAgICAgICAgIHZhciBlbG0gPSB2bm9kZS5lbG0gPSBpc0RlZihkYXRhKSAmJiBpc0RlZihpID0gZGF0YS5ucykgPyBhcGkuY3JlYXRlRWxlbWVudE5TKGksIHRhZylcbiAgICAgICAgICAgICAgICA6IGFwaS5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgICAgICAgICBpZiAoaGFzaCA8IGRvdClcbiAgICAgICAgICAgICAgICBlbG0uc2V0QXR0cmlidXRlKCdpZCcsIHNlbC5zbGljZShoYXNoICsgMSwgZG90KSk7XG4gICAgICAgICAgICBpZiAoZG90SWR4ID4gMClcbiAgICAgICAgICAgICAgICBlbG0uc2V0QXR0cmlidXRlKCdjbGFzcycsIHNlbC5zbGljZShkb3QgKyAxKS5yZXBsYWNlKC9cXC4vZywgJyAnKSk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmNyZWF0ZS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICBjYnMuY3JlYXRlW2ldKGVtcHR5Tm9kZSwgdm5vZGUpO1xuICAgICAgICAgICAgaWYgKGlzLmFycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSBjaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5hcHBlbmRDaGlsZChlbG0sIGNyZWF0ZUVsbShjaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpcy5wcmltaXRpdmUodm5vZGUudGV4dCkpIHtcbiAgICAgICAgICAgICAgICBhcGkuYXBwZW5kQ2hpbGQoZWxtLCBhcGkuY3JlYXRlVGV4dE5vZGUodm5vZGUudGV4dCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSA9IHZub2RlLmRhdGEuaG9vazsgLy8gUmV1c2UgdmFyaWFibGVcbiAgICAgICAgICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgICAgICAgICAgIGlmIChpLmNyZWF0ZSlcbiAgICAgICAgICAgICAgICAgICAgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKGkuaW5zZXJ0KVxuICAgICAgICAgICAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2bm9kZS5lbG0gPSBhcGkuY3JlYXRlVGV4dE5vZGUodm5vZGUudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZub2RlLmVsbTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkVm5vZGVzKHBhcmVudEVsbSwgYmVmb3JlLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgICAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICAgICAgICB2YXIgY2ggPSB2bm9kZXNbc3RhcnRJZHhdO1xuICAgICAgICAgICAgaWYgKGNoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhcGkuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgY3JlYXRlRWxtKGNoLCBpbnNlcnRlZFZub2RlUXVldWUpLCBiZWZvcmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGludm9rZURlc3Ryb3lIb29rKHZub2RlKSB7XG4gICAgICAgIHZhciBpLCBqLCBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLmRlc3Ryb3kpKVxuICAgICAgICAgICAgICAgIGkodm5vZGUpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgIGNicy5kZXN0cm95W2ldKHZub2RlKTtcbiAgICAgICAgICAgIGlmICh2bm9kZS5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHZub2RlLmNoaWxkcmVuLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSB2bm9kZS5jaGlsZHJlbltqXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gbnVsbCAmJiB0eXBlb2YgaSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlRGVzdHJveUhvb2soaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlVm5vZGVzKHBhcmVudEVsbSwgdm5vZGVzLCBzdGFydElkeCwgZW5kSWR4KSB7XG4gICAgICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgICAgICAgIHZhciBpXzEgPSB2b2lkIDAsIGxpc3RlbmVycyA9IHZvaWQgMCwgcm0gPSB2b2lkIDAsIGNoID0gdm5vZGVzW3N0YXJ0SWR4XTtcbiAgICAgICAgICAgIGlmIChjaCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKGNoLnNlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlRGVzdHJveUhvb2soY2gpO1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMgPSBjYnMucmVtb3ZlLmxlbmd0aCArIDE7XG4gICAgICAgICAgICAgICAgICAgIHJtID0gY3JlYXRlUm1DYihjaC5lbG0sIGxpc3RlbmVycyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoaV8xID0gMDsgaV8xIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraV8xKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2JzLnJlbW92ZVtpXzFdKGNoLCBybSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RlZihpXzEgPSBjaC5kYXRhKSAmJiBpc0RlZihpXzEgPSBpXzEuaG9vaykgJiYgaXNEZWYoaV8xID0gaV8xLnJlbW92ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlfMShjaCwgcm0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXBpLnJlbW92ZUNoaWxkKHBhcmVudEVsbSwgY2guZWxtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4ocGFyZW50RWxtLCBvbGRDaCwgbmV3Q2gsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgICAgICB2YXIgb2xkU3RhcnRJZHggPSAwLCBuZXdTdGFydElkeCA9IDA7XG4gICAgICAgIHZhciBvbGRFbmRJZHggPSBvbGRDaC5sZW5ndGggLSAxO1xuICAgICAgICB2YXIgb2xkU3RhcnRWbm9kZSA9IG9sZENoWzBdO1xuICAgICAgICB2YXIgb2xkRW5kVm5vZGUgPSBvbGRDaFtvbGRFbmRJZHhdO1xuICAgICAgICB2YXIgbmV3RW5kSWR4ID0gbmV3Q2gubGVuZ3RoIC0gMTtcbiAgICAgICAgdmFyIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFswXTtcbiAgICAgICAgdmFyIG5ld0VuZFZub2RlID0gbmV3Q2hbbmV3RW5kSWR4XTtcbiAgICAgICAgdmFyIG9sZEtleVRvSWR4O1xuICAgICAgICB2YXIgaWR4SW5PbGQ7XG4gICAgICAgIHZhciBlbG1Ub01vdmU7XG4gICAgICAgIHZhciBiZWZvcmU7XG4gICAgICAgIHdoaWxlIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggJiYgbmV3U3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICAgICAgICBpZiAob2xkU3RhcnRWbm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdOyAvLyBWbm9kZSBtaWdodCBoYXZlIGJlZW4gbW92ZWQgbGVmdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob2xkRW5kVm5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobmV3U3RhcnRWbm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobmV3RW5kVm5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlKSkge1xuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICAgICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlKSkge1xuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgICAgYXBpLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBhcGkubmV4dFNpYmxpbmcob2xkRW5kVm5vZGUuZWxtKSk7XG4gICAgICAgICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICAgICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgICAgYXBpLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZEVuZFZub2RlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChvbGRLZXlUb0lkeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZEtleVRvSWR4ID0gY3JlYXRlS2V5VG9PbGRJZHgob2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZHhJbk9sZCA9IG9sZEtleVRvSWR4W25ld1N0YXJ0Vm5vZGUua2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZihpZHhJbk9sZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBpLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsbVRvTW92ZSA9IG9sZENoW2lkeEluT2xkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsbVRvTW92ZS5zZWwgIT09IG5ld1N0YXJ0Vm5vZGUuc2VsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGkuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSksIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUoZWxtVG9Nb3ZlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2xkQ2hbaWR4SW5PbGRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBpLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIGVsbVRvTW92ZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggfHwgbmV3U3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICAgICAgICBpZiAob2xkU3RhcnRJZHggPiBvbGRFbmRJZHgpIHtcbiAgICAgICAgICAgICAgICBiZWZvcmUgPSBuZXdDaFtuZXdFbmRJZHggKyAxXSA9PSBudWxsID8gbnVsbCA6IG5ld0NoW25ld0VuZElkeCArIDFdLmVsbTtcbiAgICAgICAgICAgICAgICBhZGRWbm9kZXMocGFyZW50RWxtLCBiZWZvcmUsIG5ld0NoLCBuZXdTdGFydElkeCwgbmV3RW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlVm5vZGVzKHBhcmVudEVsbSwgb2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgICAgdmFyIGksIGhvb2s7XG4gICAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuZGF0YSkgJiYgaXNEZWYoaG9vayA9IGkuaG9vaykgJiYgaXNEZWYoaSA9IGhvb2sucHJlcGF0Y2gpKSB7XG4gICAgICAgICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVsbSA9IHZub2RlLmVsbSA9IG9sZFZub2RlLmVsbTtcbiAgICAgICAgdmFyIG9sZENoID0gb2xkVm5vZGUuY2hpbGRyZW47XG4gICAgICAgIHZhciBjaCA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgICBpZiAob2xkVm5vZGUgPT09IHZub2RlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodm5vZGUuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnVwZGF0ZS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgICAgICBpID0gdm5vZGUuZGF0YS5ob29rO1xuICAgICAgICAgICAgaWYgKGlzRGVmKGkpICYmIGlzRGVmKGkgPSBpLnVwZGF0ZSkpXG4gICAgICAgICAgICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1VuZGVmKHZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYob2xkQ2gpICYmIGlzRGVmKGNoKSkge1xuICAgICAgICAgICAgICAgIGlmIChvbGRDaCAhPT0gY2gpXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKGVsbSwgb2xkQ2gsIGNoLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKVxuICAgICAgICAgICAgICAgICAgICBhcGkuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7XG4gICAgICAgICAgICAgICAgYWRkVm5vZGVzKGVsbSwgbnVsbCwgY2gsIDAsIGNoLmxlbmd0aCAtIDEsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0RlZihvbGRDaCkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVWbm9kZXMoZWxtLCBvbGRDaCwgMCwgb2xkQ2gubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkge1xuICAgICAgICAgICAgICAgIGFwaS5zZXRUZXh0Q29udGVudChlbG0sICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvbGRWbm9kZS50ZXh0ICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYob2xkQ2gpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlVm5vZGVzKGVsbSwgb2xkQ2gsIDAsIG9sZENoLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXBpLnNldFRleHRDb250ZW50KGVsbSwgdm5vZGUudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKGhvb2spICYmIGlzRGVmKGkgPSBob29rLnBvc3RwYXRjaCkpIHtcbiAgICAgICAgICAgIGkob2xkVm5vZGUsIHZub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2gob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgICAgIHZhciBpLCBlbG0sIHBhcmVudDtcbiAgICAgICAgdmFyIGluc2VydGVkVm5vZGVRdWV1ZSA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnByZS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGNicy5wcmVbaV0oKTtcbiAgICAgICAgaWYgKCFpc1Zub2RlKG9sZFZub2RlKSkge1xuICAgICAgICAgICAgb2xkVm5vZGUgPSBlbXB0eU5vZGVBdChvbGRWbm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsbSA9IG9sZFZub2RlLmVsbTtcbiAgICAgICAgICAgIHBhcmVudCA9IGFwaS5wYXJlbnROb2RlKGVsbSk7XG4gICAgICAgICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYXBpLmluc2VydEJlZm9yZShwYXJlbnQsIHZub2RlLmVsbSwgYXBpLm5leHRTaWJsaW5nKGVsbSkpO1xuICAgICAgICAgICAgICAgIHJlbW92ZVZub2RlcyhwYXJlbnQsIFtvbGRWbm9kZV0sIDAsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbnNlcnRlZFZub2RlUXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZVtpXS5kYXRhLmhvb2suaW5zZXJ0KGluc2VydGVkVm5vZGVRdWV1ZVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5wb3N0Lmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgY2JzLnBvc3RbaV0oKTtcbiAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgIH07XG59XG5leHBvcnRzLmluaXQgPSBpbml0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c25hYmJkb20uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgaF8xID0gcmVxdWlyZShcIi4vaFwiKTtcbmZ1bmN0aW9uIGNvcHlUb1RodW5rKHZub2RlLCB0aHVuaykge1xuICAgIHRodW5rLmVsbSA9IHZub2RlLmVsbTtcbiAgICB2bm9kZS5kYXRhLmZuID0gdGh1bmsuZGF0YS5mbjtcbiAgICB2bm9kZS5kYXRhLmFyZ3MgPSB0aHVuay5kYXRhLmFyZ3M7XG4gICAgdGh1bmsuZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgdGh1bmsuY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICB0aHVuay50ZXh0ID0gdm5vZGUudGV4dDtcbiAgICB0aHVuay5lbG0gPSB2bm9kZS5lbG07XG59XG5mdW5jdGlvbiBpbml0KHRodW5rKSB7XG4gICAgdmFyIGN1ciA9IHRodW5rLmRhdGE7XG4gICAgdmFyIHZub2RlID0gY3VyLmZuLmFwcGx5KHVuZGVmaW5lZCwgY3VyLmFyZ3MpO1xuICAgIGNvcHlUb1RodW5rKHZub2RlLCB0aHVuayk7XG59XG5mdW5jdGlvbiBwcmVwYXRjaChvbGRWbm9kZSwgdGh1bmspIHtcbiAgICB2YXIgaSwgb2xkID0gb2xkVm5vZGUuZGF0YSwgY3VyID0gdGh1bmsuZGF0YTtcbiAgICB2YXIgb2xkQXJncyA9IG9sZC5hcmdzLCBhcmdzID0gY3VyLmFyZ3M7XG4gICAgaWYgKG9sZC5mbiAhPT0gY3VyLmZuIHx8IG9sZEFyZ3MubGVuZ3RoICE9PSBhcmdzLmxlbmd0aCkge1xuICAgICAgICBjb3B5VG9UaHVuayhjdXIuZm4uYXBwbHkodW5kZWZpbmVkLCBhcmdzKSwgdGh1bmspO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvbGRBcmdzW2ldICE9PSBhcmdzW2ldKSB7XG4gICAgICAgICAgICBjb3B5VG9UaHVuayhjdXIuZm4uYXBwbHkodW5kZWZpbmVkLCBhcmdzKSwgdGh1bmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvcHlUb1RodW5rKG9sZFZub2RlLCB0aHVuayk7XG59XG5leHBvcnRzLnRodW5rID0gZnVuY3Rpb24gdGh1bmsoc2VsLCBrZXksIGZuLCBhcmdzKSB7XG4gICAgaWYgKGFyZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhcmdzID0gZm47XG4gICAgICAgIGZuID0ga2V5O1xuICAgICAgICBrZXkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBoXzEuaChzZWwsIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGhvb2s6IHsgaW5pdDogaW5pdCwgcHJlcGF0Y2g6IHByZXBhdGNoIH0sXG4gICAgICAgIGZuOiBmbixcbiAgICAgICAgYXJnczogYXJnc1xuICAgIH0pO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMudGh1bms7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHVuay5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2bm9kZV8xID0gcmVxdWlyZShcIi4vdm5vZGVcIik7XG52YXIgaHRtbGRvbWFwaV8xID0gcmVxdWlyZShcIi4vaHRtbGRvbWFwaVwiKTtcbmZ1bmN0aW9uIHRvVk5vZGUobm9kZSwgZG9tQXBpKSB7XG4gICAgdmFyIGFwaSA9IGRvbUFwaSAhPT0gdW5kZWZpbmVkID8gZG9tQXBpIDogaHRtbGRvbWFwaV8xLmRlZmF1bHQ7XG4gICAgdmFyIHRleHQ7XG4gICAgaWYgKGFwaS5pc0VsZW1lbnQobm9kZSkpIHtcbiAgICAgICAgdmFyIGlkID0gbm9kZS5pZCA/ICcjJyArIG5vZGUuaWQgOiAnJztcbiAgICAgICAgdmFyIGNuID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgICAgIHZhciBjID0gY24gPyAnLicgKyBjbi5zcGxpdCgnICcpLmpvaW4oJy4nKSA6ICcnO1xuICAgICAgICB2YXIgc2VsID0gYXBpLnRhZ05hbWUobm9kZSkudG9Mb3dlckNhc2UoKSArIGlkICsgYztcbiAgICAgICAgdmFyIGF0dHJzID0ge307XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IFtdO1xuICAgICAgICB2YXIgbmFtZV8xO1xuICAgICAgICB2YXIgaSA9IHZvaWQgMCwgbiA9IHZvaWQgMDtcbiAgICAgICAgdmFyIGVsbUF0dHJzID0gbm9kZS5hdHRyaWJ1dGVzO1xuICAgICAgICB2YXIgZWxtQ2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXM7XG4gICAgICAgIGZvciAoaSA9IDAsIG4gPSBlbG1BdHRycy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIG5hbWVfMSA9IGVsbUF0dHJzW2ldLm5vZGVOYW1lO1xuICAgICAgICAgICAgaWYgKG5hbWVfMSAhPT0gJ2lkJyAmJiBuYW1lXzEgIT09ICdjbGFzcycpIHtcbiAgICAgICAgICAgICAgICBhdHRyc1tuYW1lXzFdID0gZWxtQXR0cnNbaV0ubm9kZVZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDAsIG4gPSBlbG1DaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2godG9WTm9kZShlbG1DaGlsZHJlbltpXSwgZG9tQXBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZub2RlXzEuZGVmYXVsdChzZWwsIHsgYXR0cnM6IGF0dHJzIH0sIGNoaWxkcmVuLCB1bmRlZmluZWQsIG5vZGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcGkuaXNUZXh0KG5vZGUpKSB7XG4gICAgICAgIHRleHQgPSBhcGkuZ2V0VGV4dENvbnRlbnQobm9kZSk7XG4gICAgICAgIHJldHVybiB2bm9kZV8xLmRlZmF1bHQodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGV4dCwgbm9kZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFwaS5pc0NvbW1lbnQobm9kZSkpIHtcbiAgICAgICAgdGV4dCA9IGFwaS5nZXRUZXh0Q29udGVudChub2RlKTtcbiAgICAgICAgcmV0dXJuIHZub2RlXzEuZGVmYXVsdCgnIScsIHt9LCBbXSwgdGV4dCwgbm9kZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdm5vZGVfMS5kZWZhdWx0KCcnLCB7fSwgW10sIHVuZGVmaW5lZCwgbm9kZSk7XG4gICAgfVxufVxuZXhwb3J0cy50b1ZOb2RlID0gdG9WTm9kZTtcbmV4cG9ydHMuZGVmYXVsdCA9IHRvVk5vZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10b3Zub2RlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gdm5vZGUoc2VsLCBkYXRhLCBjaGlsZHJlbiwgdGV4dCwgZWxtKSB7XG4gICAgdmFyIGtleSA9IGRhdGEgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGRhdGEua2V5O1xuICAgIHJldHVybiB7IHNlbDogc2VsLCBkYXRhOiBkYXRhLCBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICAgIHRleHQ6IHRleHQsIGVsbTogZWxtLCBrZXk6IGtleSB9O1xufVxuZXhwb3J0cy52bm9kZSA9IHZub2RlO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm5vZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12bm9kZS5qcy5tYXAiLCJmdW5jdGlvbiBub29wKCkge31cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodXJsLCBvcHRzKSB7XG5cdG9wdHMgPSBvcHRzIHx8IHt9O1xuXG5cdHZhciB3cywgbnVtPTAsIHRpbWVyPTEsICQ9e307XG5cdHZhciBtYXggPSBvcHRzLm1heEF0dGVtcHRzIHx8IEluZmluaXR5O1xuXG5cdCQub3BlbiA9IGZ1bmN0aW9uICgpIHtcblx0XHR3cyA9IG5ldyBXZWJTb2NrZXQodXJsLCBvcHRzLnByb3RvY29scyB8fCBbXSk7XG5cblx0XHR3cy5vbm1lc3NhZ2UgPSBvcHRzLm9ubWVzc2FnZSB8fCBub29wO1xuXG5cdFx0d3Mub25vcGVuID0gZnVuY3Rpb24gKGUpIHtcblx0XHRcdChvcHRzLm9ub3BlbiB8fCBub29wKShlKTtcblx0XHRcdG51bSA9IDA7XG5cdFx0fTtcblxuXHRcdHdzLm9uY2xvc2UgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0ZS5jb2RlID09PSAxZTMgfHwgZS5jb2RlID09PSAxMDAxIHx8IGUuY29kZSA9PT0gMTAwNSB8fCAkLnJlY29ubmVjdChlKTtcblx0XHRcdChvcHRzLm9uY2xvc2UgfHwgbm9vcCkoZSk7XG5cdFx0fTtcblxuXHRcdHdzLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0KGUgJiYgZS5jb2RlPT09J0VDT05OUkVGVVNFRCcpID8gJC5yZWNvbm5lY3QoZSkgOiAob3B0cy5vbmVycm9yIHx8IG5vb3ApKGUpO1xuXHRcdH07XG5cdH07XG5cblx0JC5yZWNvbm5lY3QgPSBmdW5jdGlvbiAoZSkge1xuXHRcdGlmICh0aW1lciAmJiBudW0rKyA8IG1heCkge1xuXHRcdFx0dGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0KG9wdHMub25yZWNvbm5lY3QgfHwgbm9vcCkoZSk7XG5cdFx0XHRcdCQub3BlbigpO1xuXHRcdFx0fSwgb3B0cy50aW1lb3V0IHx8IDFlMyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdChvcHRzLm9ubWF4aW11bSB8fCBub29wKShlKTtcblx0XHR9XG5cdH07XG5cblx0JC5qc29uID0gZnVuY3Rpb24gKHgpIHtcblx0XHR3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHgpKTtcblx0fTtcblxuXHQkLnNlbmQgPSBmdW5jdGlvbiAoeCkge1xuXHRcdHdzLnNlbmQoeCk7XG5cdH07XG5cblx0JC5jbG9zZSA9IGZ1bmN0aW9uICh4LCB5KSB7XG5cdFx0dGltZXIgPSBjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdHdzLmNsb3NlKHggfHwgMWUzLCB5KTtcblx0fTtcblxuXHQkLm9wZW4oKTsgLy8gaW5pdFxuXG5cdHJldHVybiAkO1xufVxuIiwiaW1wb3J0IGggZnJvbSAnc25hYmJkb20vaCc7XG5pbXBvcnQgeyBWTm9kZSB9IGZyb20gJ3NuYWJiZG9tL3Zub2RlJztcblxuaW1wb3J0IHsgcmVuZGVyVXNlcm5hbWUgfSBmcm9tICcuL3VzZXInO1xuXG5cbmNvbnN0IHVudGl0bGVkID0gW1xuXCJcXFwiVG8gbWUsIGhvdyB3ZSd2ZSBnb3QgaGVyZSB0b2RheSBpcyBvd2luZyB0byBTdG9ja2Zpc2ggaW4gYSBCSUcgd2F5LiBUaGV5IHJhbGxpZWQgZ2xvYmFsIHZvbHVudGVlcnMgdG8gY29tZSB0b2dldGhlciBpbiB0aGUgb3Blbi1zb3VyY2Ugc3Bpcml0IGFuZCBjcmVhdGUgc3VjaCBhIHBvd2VyZnVsIGVuZ2luZSBmb3IgRlJFRS4gVGhhdCdzIGEgbG90IG9mIGdyZWF0IG1pbmRzIGFuZCBjb21wdXRpbmcgcG93ZXIgdGhleSd2ZSBtYW5hZ2VkIHRvIGhhcm5lc3MuXCIsXG5cIlRoZW4gd2UndmUgZ290IExpY2hlc3MgdG8gdGhhbmsuIExpY2hlc3Mgd2FzIGFsc28gYm9ybiBvdXQgb2YgdGhlIHNhbWUgb3Blbi1zb3VyY2Ugc3Bpcml0LCBhbmQgaXQgdG9vIGRyZXcgaW4gZ3JlYXQgcGVvcGxlIGFzIHdlbGwuIE9uY2UgTGljaGVzcyBpbmNvcnBvcmF0ZWQgU3RvY2tmaXNoIGFzIGl0cyBicmFpbnMsIHRoZSByZXN0IGlzIGhpc3RvcnkuXCIsXG5cIkxpY2hlc3MgZW5hYmxlcyB0aGUgb25saW5lLCByZWFsLXRpbWUsIGFuZCBjb21wZXRpdGl2ZSBhc3BlY3RzIG9mIGdhbWUtcGxheS4gVGhleSBhbHNvIGJyaW5nIHRoZSBlbm9ybW91cyBwb3dlciBvZiBTdG9ja2Zpc2ggdG8gdGhlIG1hc3Nlcywgd2hvIGNhbiBub3cgYmVuZWZpdCBmcm9tIGl0IHdpdGhvdXQgY29uZmlndXJpbmcgYSBsb2NhbCBHVUkuIEkgYmVsaWV2ZSB0aGlzIGRldmVsb3BtZW50IHR1cm5zIG91dCB0byBiZSBvZiBncmVhdCBjb25zZXF1ZW5jZSBhbmQgc2lnbmlmaWNhbmNlLlwiLFxuXCJMYXRlciBvbiwgZGV2ZWxvcGVycyBjbG9zZSB0byB0aGUgTGljaGVzcyBwcm9qZWN0IGV2ZW50dWFsbHkgZXh0ZW5kZWQgU3RvY2tmaXNoIGludG8gTXVsdGl2YXJpYW50LVN0b2NrZmlzaCwgaW4gb3JkZXIgdG8gc3VwcG9ydCBDcmF6eWhvdXNlIGV0IGFsLiBUaGUgZmF0aGVyIG9mIEZhaXJ5LVN0b2NrZmlzaCwgRmFiaWFuLCBpcyBhbHNvIG9uZSBvZiB0aG9zZSBkZXZzIChzdGlsbCkgd29ya2luZyBvbiB0aGF0IGZvcmssIGFuZCBoZSBsYXRlciB0b29rIHNldmVyYWwgc3RlcHMgZnVydGhlciBpbiB0ZXJtcyBvZiB2YXJpYW50IHN1cHBvcnQgYW5kIGV4dGVuc2liaWxpdHkuIFRodXMgRmFpcnktU3RvY2tmaXNoIHdhcyBib3JuLCBzbyBwb3dlcmZ1bCBiZWNhdXNlIGl0IGJ1aWxkcyBvbiB0aGUgU3RvY2tmaXNoIHByb2plY3QuXCIsXG5cIlRoZW4gY29tZXMgb3VyIGJlbG92ZWQgcHljaGVzcy12YXJpYW50cywgd2hpY2ggYWdhaW4gdmVyeSBzbWFydGx5IGhhcm5lc3NlcyB0aGUgdW5kZXJseWluZyBzdXBlcnBvd2VycyBvZiB0aGUgYmlnIHByb2plY3RzLiBTYW1lIG9ubGluZSwgcmVhbC10aW1lLCBhbmQgY29tcGV0aXRpdmUgYXNwZWN0cy4gU2FtZSBjbGVhbiBhbmQgZmFtaWxpYXIgTGljaGVzcyBsb29rIGFuZCBmZWVsLiBQbHVzIHRoZSBwb3dlciBvZiBTdG9ja2Zpc2ghXFxcIlwiLFxuXVxuXG5leHBvcnQgZnVuY3Rpb24gYWJvdXRWaWV3KG1vZGVsKTogVk5vZGVbXSB7XG4gICAgcmVuZGVyVXNlcm5hbWUobW9kZWxbXCJob21lXCJdLCBtb2RlbFtcInVzZXJuYW1lXCJdKTtcblxuICAgIGNvbnNvbGUubG9nKG1vZGVsKTtcbiAgICByZXR1cm4gW2goJ2FzaWRlLnNpZGViYXItZmlyc3QnKSxcbiAgICAgICAgICAgIGgoJ21haW4ubWFpbicsIFtcbiAgICAgICAgICAgICAgICBoKCdkaXYuYWJvdXQnLCBbXG4gICAgICAgICAgICAgICAgICAgIGgoJ2ltZy5jZW50ZXInLCB7YXR0cnM6IHtzcmM6ICcvc3RhdGljL2Zhdmljb24vZmF2aWNvbi05Nng5Ni5wbmcnfX0pLFxuICAgICAgICAgICAgICAgICAgICBoKCdoMScsIHthdHRyczoge2FsaWduOiAnY2VudGVyJ319LCAnQWJvdXQgcHljaGVzcy12YXJpYW50cycpLFxuICAgICAgICAgICAgICAgICAgICBoKCdwJywgJ3B5Y2hlc3MtdmFyaWFudHMgaXMgYSBmcmVlLCBvcGVuLXNvdXJjZSBjaGVzcyBzZXJ2ZXIgZGVzaWduZWQgdG8gcGxheSBzZXZlcmFsIGNoZXNzIHZhcmlhbnQuJyksXG4gICAgICAgICAgICAgICAgICAgIGgoJ3AnLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkN1cnJlbnRseSBzdXBwb3J0ZWQgZ2FtZXMgYXJlIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWtydWsnfX0sICdNYWtydWsnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWFrcnVrI0NhbWJvZGlhbl9jaGVzcyd9fSwgJ091ayBDaGF0cmFuZycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaXR0dXlpbid9fSwgJ1NpdHR1eWluJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Nob2dpJ319LCAnU2hvZ2knKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWluaXNob2dpJ319LCAnTWluaXNob2dpJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1hpYW5ncWknfX0sICdYaWFuZ3FpJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHA6Ly93d3cucXVhbnR1bWdhbWJpdHouY29tL2Jsb2cvY2hlc3MvY2dhL2Jyb25zdGVpbi1jaGVzcy1wcmUtY2hlc3Mtc2h1ZmZsZS1jaGVzcyd9fSwgJ1BsYWNlbWVudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DcmF6eWhvdXNlJ319LCAnQ3Jhenlob3VzZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TZWlyYXdhbl9DaGVzcyd9fSwgJ1NlaXJhd2FuJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NhcGFibGFuY2FfQ2hlc3MnfX0sICdDYXBhYmxhbmNhJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dvdGhpY19jaGVzcyd9fSwgJ0dvdGhpYycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmFuZF9DaGVzcyd9fSwgJ0dyYW5kJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vcHljaGVzcy12YXJpYW50cy5oZXJva3VhcHAuY29tL0lSVnhNRzcyJ319LCAnU2hvdXNlIChTZWlyYXdhbitDcmF6eWhvdXNlKScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL3d3dy50d2l0Y2gudHYvdmlkZW9zLzQ2NjI1MzgxNSd9fSwgJ0NhcGFob3VzZSAoQ2FwYWJsYW5jYStDcmF6eWhvdXNlKScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL3B5Y2hlc3MtdmFyaWFudHMuaGVyb2t1YXBwLmNvbS9rR09jd2VIMyd9fSwgJ0dvdGhob3VzZSAoR290aGljK0NyYXp5aG91c2UpJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8veW91dHUuYmUvSW45Tk9CQ3BTXzQnfX0sICdHcmFuZGhvdXNlIChHcmFuZCtDcmF6eWhvdXNlKScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYW5kIHN0YW5kYXJkIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DaGVzcyd9fSwgJ0NoZXNzLicpLFxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgaCgncCcsIFsnQWRkaXRpb25hbGx5IHlvdSBjYW4gY2hlY2sgQ2hlc3M5NjAgb3B0aW9uIGluIGZvciBTdGFuZGFyZCwgQ3Jhenlob3VzZSwgQ2FwYWJsYW5jYSBhbmQgQ2FwYWhvdXNlIHRvIHN0YXJ0IGdhbWVzIGZyb20gcmFuZG9tIHBvc2l0aW9ucyB3aXRoICcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DaGVzczk2MCNDYXN0bGluZ19ydWxlcyd9fSwgJ0NoZXNzOTYwIGNhc3RsaW5nIHJ1bGVzLicpXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgaCgncCcsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICdGb3IgbW92ZSBnZW5lcmF0aW9uLCB2YWxpZGF0aW9uLCBhbmFseXNpcyBhbmQgZW5naW5lIHBsYXkgaXQgdXNlcyAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2dpdGh1Yi5jb20vZ2J0YW1pL0ZhaXJ5LVN0b2NrZmlzaCd9fSwgJ0ZhaXJ5LVN0b2NrZmlzaCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2dpdGh1Yi5jb20veHFiYXNlL2VsZWV5ZSd9fSwgJ0VsZXBoYW50RXllJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZ2l0aHViLmNvbS93YWxrZXI4MDg4L21vb25maXNoJ319LCAnbW9vbmZpc2gnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9naXRodWIuY29tL2didGFtaS9mYWlyeWZpc2huZXQnfX0sICdmYWlyeWZpc2huZXQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGFuZCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9naXRodWIuY29tL2didGFtaS9saWNoZXNzLWJvdC12YXJpYW50cyd9fSwgJ2xpY2hlc3MtYm90LXZhcmlhbnRzLicpLFxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgaCgncCcsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICdPbiBjbGllbnQgc2lkZSBpdCBpcyBiYXNlZCBvbiAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2dpdGh1Yi5jb20vZ2J0YW1pL2NoZXNzZ3JvdW5keCd9fSwgJ2NoZXNzZ3JvdW5keC4nKSxcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIGgoJ3AnLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAnU291cmNlIGNvZGUgb2Ygc2VydmVyIGlzIGF2YWlsYWJsZSBhdCAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2dpdGh1Yi5jb20vZ2J0YW1pL3B5Y2hlc3MtdmFyaWFudHMnfX0sICdHaXRIdWIuJyksXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBoKCdocicpLFxuICAgICAgICAgICAgICAgICAgICBoKCdwJywgdW50aXRsZWQubWFwKChwYXJhZ3JhcGgpID0+IHtyZXR1cm4gaCgncCcsIHBhcmFncmFwaCl9KSksXG4gICAgICAgICAgICAgICAgICAgIGgoJ3AnLCAnVW50aXRsZWRfRW50aXR5JyksXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgaCgnYXNpZGUuc2lkZWJhci1zZWNvbmQnKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICBdO1xufSIsImltcG9ydCB7IGggfSBmcm9tIFwic25hYmJkb21cIjtcclxuaW1wb3J0IHsgVk5vZGUgfSBmcm9tICdzbmFiYmRvbS92bm9kZSc7XHJcblxyXG5pbXBvcnQgQW5hbHlzaXNDb250cm9sbGVyIGZyb20gJy4vYW5hbHlzaXNDdHJsJztcclxuaW1wb3J0IHsgVkFSSUFOVFMgfSBmcm9tICcuL2NoZXNzJztcclxuaW1wb3J0IHsgdGltZWFnbywgcmVuZGVyVGltZWFnbyB9IGZyb20gJy4vY2xvY2snO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHJ1bkdyb3VuZCh2bm9kZTogVk5vZGUsIG1vZGVsKSB7XHJcbiAgICBjb25zdCBlbCA9IHZub2RlLmVsbSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IGN0cmwgPSBuZXcgQW5hbHlzaXNDb250cm9sbGVyKGVsLCBtb2RlbCk7XHJcbiAgICBjb25zdCBjZyA9IGN0cmwuY2hlc3Nncm91bmQ7XHJcbiAgICB3aW5kb3dbJ2NnJ10gPSBjZztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5c2lzVmlldyhtb2RlbCk6IFZOb2RlW10ge1xyXG4gICAgY29uc29sZS5sb2coXCJhbmFseXNpc1ZpZXcgbW9kZWw9XCIsIG1vZGVsKTtcclxuICAgIGNvbnN0IGRhdGFJY29uID0gVkFSSUFOVFNbbW9kZWxbXCJ2YXJpYW50XCJdXS5pY29uO1xyXG4gICAgcmVuZGVyVGltZWFnbygpO1xyXG4gICAgcmV0dXJuIFtoKCdhc2lkZS5zaWRlYmFyLWZpcnN0JywgW1xyXG4gICAgICAgICAgICAgICAgaCgnZGl2LmdhbWUtaW5mbycsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYuaW5mbzAnLCB7YXR0cnM6IHtcImRhdGEtaWNvblwiOiBkYXRhSWNvbn0sIGNsYXNzOiB7XCJpY29uXCI6IHRydWV9fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdkaXYuaW5mbzEnLCB7YXR0cnM6IHtcImRhdGEtaWNvblwiOiAobW9kZWxbXCJjaGVzczk2MFwiXSA9PT0gJ1RydWUnKSA/IFwiVlwiIDogXCJcIn0sIGNsYXNzOiB7XCJpY29uXCI6IHRydWV9fSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi5pbmZvMicsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi50YycsIG1vZGVsW1wiYmFzZVwiXSArIFwiK1wiICsgbW9kZWxbXCJpbmNcIl0gKyBcIiDigKIgQ2FzdWFsIOKAoiBcIiArIG1vZGVsW1widmFyaWFudFwiXSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIobW9kZWxbXCJzdGF0dXNcIl0pID49IDAgPyBoKCdpbmZvLWRhdGUnLCB7YXR0cnM6IHt0aW1lc3RhbXA6IG1vZGVsW1wiZGF0ZVwiXX19LCB0aW1lYWdvKG1vZGVsW1wiZGF0ZVwiXSkpIDogXCJQbGF5aW5nIHJpZ2h0IG5vd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYucGxheWVyLWRhdGEnLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2ktc2lkZS5vbmxpbmUnLCB7Y2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLXdoaXRlXCI6IHRydWV9IH0gKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgncGxheWVyJywgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnYS51c2VyLWxpbmsnLCB7YXR0cnM6IHtocmVmOiAnL0AvJyArIG1vZGVsW1wid3BsYXllclwiXX19LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgncGxheWVyLXRpdGxlJywgXCIgXCIgKyBtb2RlbFtcInd0aXRsZVwiXSArIFwiIFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbFtcIndwbGF5ZXJcIl0gKyBcIiAoMTUwMD8pXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2LnBsYXllci1kYXRhJywgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdpLXNpZGUub25saW5lJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1ibGFja1wiOiB0cnVlfSB9ICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ3BsYXllcicsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EudXNlci1saW5rJywge2F0dHJzOiB7aHJlZjogJy9ALycgKyBtb2RlbFtcImJwbGF5ZXJcIl19fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ3BsYXllci10aXRsZScsIFwiIFwiICsgbW9kZWxbXCJidGl0bGVcIl0gKyBcIiBcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxbXCJicGxheWVyXCJdICsgXCIgKDE1MDA/KVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYucm91bmRjaGF0I3JvdW5kY2hhdCcpLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgaCgnbWFpbi5hbmFseXNpcycsIFtcclxuICAgICAgICAgICAgICAgIGgoJ3NlbGVjdGlvbi4nICsgVkFSSUFOVFNbbW9kZWxbXCJ2YXJpYW50XCJdXS5ib2FyZCArICcuJyArIFZBUklBTlRTW21vZGVsW1widmFyaWFudFwiXV0ucGllY2VzLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2LmNnLXdyYXAuJyArIFZBUklBTlRTW21vZGVsW1widmFyaWFudFwiXV0uY2csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaG9vazogeyBpbnNlcnQ6ICh2bm9kZSkgPT4gcnVuR3JvdW5kKHZub2RlLCBtb2RlbCl9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYnLCB7YXR0cnM6IHtpZDogXCJnYXVnZVwifX0sIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYuYmxhY2snLCB7cHJvcHM6IHtzdHlsZTogXCJoZWlnaHQ6IDUwJTtcIn19KSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYudGljaycsIHtwcm9wczoge3N0eWxlOiBcImhlaWdodDogMTIuNSU7XCJ9fSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2LnRpY2snLCB7cHJvcHM6IHtzdHlsZTogXCJoZWlnaHQ6IDI1JTtcIn19KSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYudGljaycsIHtwcm9wczoge3N0eWxlOiBcImhlaWdodDogMzcuNSU7XCJ9fSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2LnRpY2sgemVybycsIHtwcm9wczoge3N0eWxlOiBcImhlaWdodDogNTAlO1wifX0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi50aWNrJywge3Byb3BzOiB7c3R5bGU6IFwiaGVpZ2h0OiA2Mi41JTtcIn19KSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYudGljaycsIHtwcm9wczoge3N0eWxlOiBcImhlaWdodDogNzUlO1wifX0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi50aWNrJywge3Byb3BzOiB7c3R5bGU6IFwiaGVpZ2h0OiA4Ny41JTtcIn19KSxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgaCgnYXNpZGUuc2lkZWJhci1zZWNvbmQnLCBbXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYjcG9ja2V0LXdyYXBwZXInLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2LicgKyBWQVJJQU5UU1ttb2RlbFtcInZhcmlhbnRcIl1dLnBpZWNlcyArICcuJyArIG1vZGVsW1widmFyaWFudFwiXSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdkaXYuY2ctd3JhcC5wb2NrZXQnLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdkaXYjcG9ja2V0MCcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2LnJvdW5kLWRhdGEnLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2I2JvYXJkLXNldHRpbmdzJyksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2I3B2JyksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2I21vdmVsaXN0LWJsb2NrJywgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdkaXYjbW92ZWxpc3QnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnZGl2I3Jlc3VsdCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNtb3ZlLWNvbnRyb2xzJyksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgIGgoJ2RpdiNwb2NrZXQtd3JhcHBlcicsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYuJyArIFZBUklBTlRTW21vZGVsW1widmFyaWFudFwiXV0ucGllY2VzICsgJy4nICsgbW9kZWxbXCJ2YXJpYW50XCJdLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi5jZy13cmFwLnBvY2tldCcsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNwb2NrZXQxJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCd1bmRlci1sZWZ0JyksXHJcbiAgICAgICAgICAgIGgoJ3VuZGVyLWJvYXJkJywgW1xyXG4gICAgICAgICAgICAgICAgaCgnZGl2I3BnbicsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYjY2hhcnQnKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYjZmVuJyksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2I2NvcHlmZW4nKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYjcGdudGV4dCcpLFxyXG4gICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICBdO1xyXG59XHJcbiIsImltcG9ydCBTb2NrZXR0ZSBmcm9tICdzb2NrZXR0ZSc7XHJcblxyXG5pbXBvcnQgeyBpbml0IH0gZnJvbSAnc25hYmJkb20nO1xyXG5pbXBvcnQgeyBoIH0gZnJvbSAnc25hYmJkb20vaCc7XHJcbmltcG9ydCBrbGFzcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2NsYXNzJztcclxuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcclxuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9wcm9wcyc7XHJcbmltcG9ydCBsaXN0ZW5lcnMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9ldmVudGxpc3RlbmVycyc7XHJcblxyXG5pbXBvcnQgeyBrZXkycG9zLCBwb3Mya2V5IH0gZnJvbSAnY2hlc3Nncm91bmR4L3V0aWwnO1xyXG5pbXBvcnQgeyBDaGVzc2dyb3VuZCB9IGZyb20gJ2NoZXNzZ3JvdW5keCc7XHJcbmltcG9ydCB7IEFwaSB9IGZyb20gJ2NoZXNzZ3JvdW5keC9hcGknO1xyXG5pbXBvcnQgeyBDb2xvciwgRGVzdHMsIFBpZWNlc0RpZmYsIFJvbGUsIEtleSwgUG9zLCBQaWVjZSB9IGZyb20gJ2NoZXNzZ3JvdW5keC90eXBlcyc7XHJcbmltcG9ydCB7IERyYXdTaGFwZSB9IGZyb20gJ2NoZXNzZ3JvdW5keC9kcmF3JztcclxuXHJcbmltcG9ydCBtYWtlR2F0aW5nIGZyb20gJy4vZ2F0aW5nJztcclxuaW1wb3J0IG1ha2VQcm9tb3Rpb24gZnJvbSAnLi9wcm9tb3Rpb24nO1xyXG5pbXBvcnQgeyBkcm9wSXNWYWxpZCwgcG9ja2V0VmlldywgdXBkYXRlUG9ja2V0cyB9IGZyb20gJy4vcG9ja2V0JztcclxuaW1wb3J0IHsgc291bmQgfSBmcm9tICcuL3NvdW5kJztcclxuaW1wb3J0IHsgdmFyaWFudHMsIGhhc0VwLCBuZWVkUG9ja2V0cywgcm9sZVRvU2FuLCB1Y2kydXNpLCB1c2kydWNpLCBncmFuZDJ6ZXJvLCB6ZXJvMmdyYW5kLCBWQVJJQU5UUywgc2FuVG9Sb2xlIH0gZnJvbSAnLi9jaGVzcyc7XHJcbmltcG9ydCB7IHJlbmRlclVzZXJuYW1lIH0gZnJvbSAnLi91c2VyJztcclxuaW1wb3J0IHsgY2hhdE1lc3NhZ2UsIGNoYXRWaWV3IH0gZnJvbSAnLi9jaGF0JztcclxuaW1wb3J0IHsgc2V0dGluZ3NWaWV3IH0gZnJvbSAnLi9zZXR0aW5ncyc7XHJcbmltcG9ydCB7IG1vdmVsaXN0VmlldywgdXBkYXRlTW92ZWxpc3QsIHNlbGVjdE1vdmUgfSBmcm9tICcuL21vdmVsaXN0JztcclxuaW1wb3J0IHJlc2l6ZUhhbmRsZSBmcm9tICcuL3Jlc2l6ZSc7XHJcbmltcG9ydCB7IHJlc3VsdCB9IGZyb20gJy4vcHJvZmlsZSc7XHJcbmltcG9ydCB7IGNvcHlUZXh0VG9DbGlwYm9hcmQgfSBmcm9tICcuL2NsaXBib2FyZCc7XHJcbmltcG9ydCB7IGFuYWx5c2lzQ2hhcnQgfSBmcm9tICcuL2NoYXJ0JztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGRvd25sb2FkKGZpbGVuYW1lLCB0ZXh0KSB7XHJcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsJyArIGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KSk7XHJcbiAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xyXG5cclxuICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTtcclxuXHJcbiAgZWxlbWVudC5jbGljaygpO1xyXG5cclxuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5hbHlzaXNDb250cm9sbGVyIHtcclxuICAgIG1vZGVsO1xyXG4gICAgc29jaztcclxuICAgIGNoZXNzZ3JvdW5kOiBBcGk7XHJcbiAgICBmdWxsZmVuOiBzdHJpbmc7XHJcbiAgICB3cGxheWVyOiBzdHJpbmc7XHJcbiAgICBicGxheWVyOiBzdHJpbmc7XHJcbiAgICBiYXNlOiBudW1iZXI7XHJcbiAgICBpbmM6IG51bWJlcjtcclxuICAgIG15Y29sb3I6IENvbG9yO1xyXG4gICAgb3BwY29sb3I6IENvbG9yO1xyXG4gICAgdHVybkNvbG9yOiBDb2xvcjtcclxuICAgIGdhbWVJZDogc3RyaW5nO1xyXG4gICAgdmFyaWFudDogc3RyaW5nO1xyXG4gICAgcG9ja2V0czogYW55O1xyXG4gICAgdnBvY2tldDA6IGFueTtcclxuICAgIHZwb2NrZXQxOiBhbnk7XHJcbiAgICB2cGxheWVyMDogYW55O1xyXG4gICAgdnBsYXllcjE6IGFueTtcclxuICAgIHZmZW46IGFueTtcclxuICAgIHZwdjogYW55O1xyXG4gICAgZ2FtZUNvbnRyb2xzOiBhbnk7XHJcbiAgICBtb3ZlQ29udHJvbHM6IGFueTtcclxuICAgIGdhdGluZzogYW55O1xyXG4gICAgcHJvbW90aW9uOiBhbnk7XHJcbiAgICBkZXN0czogRGVzdHM7XHJcbiAgICBwcm9tb3Rpb25zOiBzdHJpbmdbXTtcclxuICAgIGxhc3Rtb3ZlOiBLZXlbXTtcclxuICAgIHJlc3VsdDogc3RyaW5nO1xyXG4gICAgZmxpcDogYm9vbGVhbjtcclxuICAgIHNwZWN0YXRvcjogYm9vbGVhbjtcclxuICAgIHNldHRpbmdzOiBib29sZWFuO1xyXG4gICAgc3RhdHVzOiBudW1iZXI7XHJcbiAgICBzdGVwcztcclxuICAgIHBnbjogc3RyaW5nO1xyXG4gICAgdWNpX3VzaTogc3RyaW5nO1xyXG4gICAgcGx5OiBudW1iZXI7XHJcbiAgICBwbGF5ZXJzOiBzdHJpbmdbXTtcclxuICAgIHRpdGxlczogc3RyaW5nW107XHJcbiAgICBDU1NpbmRleGVzQjogbnVtYmVyW107XHJcbiAgICBDU1NpbmRleGVzUDogbnVtYmVyW107XHJcbiAgICBjbGlja0Ryb3A6IFBpZWNlIHwgdW5kZWZpbmVkO1xyXG4gICAgYW5hbHlzaXNDaGFydDogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGVsLCBtb2RlbCkge1xyXG4gICAgICAgIGNvbnN0IG9uT3BlbiA9IChldnQpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJjdHJsLm9uT3BlbigpXCIsIGV2dCk7XHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJnYW1lX3VzZXJfY29ubmVjdGVkXCIsIHVzZXJuYW1lOiB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0sIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBvcHRzID0ge1xyXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMTAsXHJcbiAgICAgICAgICAgIG9ub3BlbjogZSA9PiBvbk9wZW4oZSksXHJcbiAgICAgICAgICAgIG9ubWVzc2FnZTogZSA9PiB0aGlzLm9uTWVzc2FnZShlKSxcclxuICAgICAgICAgICAgb25yZWNvbm5lY3Q6IGUgPT4gY29uc29sZS5sb2coJ1JlY29ubmVjdGluZyBpbiByb3VuZC4uLicsIGUpLFxyXG4gICAgICAgICAgICBvbm1heGltdW06IGUgPT4gY29uc29sZS5sb2coJ1N0b3AgQXR0ZW1wdGluZyEnLCBlKSxcclxuICAgICAgICAgICAgb25jbG9zZTogZSA9PiBjb25zb2xlLmxvZygnQ2xvc2VkIScsIGUpLFxyXG4gICAgICAgICAgICBvbmVycm9yOiBlID0+IGNvbnNvbGUubG9nKCdFcnJvcjonLCBlKSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5zb2NrID0gbmV3IFNvY2tldHRlKFwid3M6Ly9cIiArIGxvY2F0aW9uLmhvc3QgKyBcIi93c3JcIiwgb3B0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoKGVycikge1xyXG4gICAgICAgICAgICB0aGlzLnNvY2sgPSBuZXcgU29ja2V0dGUoXCJ3c3M6Ly9cIiArIGxvY2F0aW9uLmhvc3QgKyBcIi93c3JcIiwgb3B0cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgdGhpcy52YXJpYW50ID0gbW9kZWxbXCJ2YXJpYW50XCJdIGFzIHN0cmluZztcclxuICAgICAgICB0aGlzLmZ1bGxmZW4gPSBtb2RlbFtcImZlblwiXSBhcyBzdHJpbmc7XHJcbiAgICAgICAgdGhpcy53cGxheWVyID0gbW9kZWxbXCJ3cGxheWVyXCJdIGFzIHN0cmluZztcclxuICAgICAgICB0aGlzLmJwbGF5ZXIgPSBtb2RlbFtcImJwbGF5ZXJcIl0gYXMgc3RyaW5nO1xyXG4gICAgICAgIHRoaXMuYmFzZSA9IG1vZGVsW1wiYmFzZVwiXSBhcyBudW1iZXI7XHJcbiAgICAgICAgdGhpcy5pbmMgPSBtb2RlbFtcImluY1wiXSBhcyBudW1iZXI7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBtb2RlbFtcInN0YXR1c1wiXSBhcyBudW1iZXI7XHJcbiAgICAgICAgdGhpcy5zdGVwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucGduID0gXCJcIjtcclxuICAgICAgICB0aGlzLnBseSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuZmxpcCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuQ1NTaW5kZXhlc0IgPSB2YXJpYW50cy5tYXAoKHZhcmlhbnQpID0+IGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfYm9hcmRcIl0gPT09IHVuZGVmaW5lZCA/IDAgOiBOdW1iZXIobG9jYWxTdG9yYWdlW3ZhcmlhbnQgKyBcIl9ib2FyZFwiXSkpO1xyXG4gICAgICAgIHRoaXMuQ1NTaW5kZXhlc1AgPSB2YXJpYW50cy5tYXAoKHZhcmlhbnQpID0+IGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfcGllY2VzXCJdID09PSB1bmRlZmluZWQgPyAwIDogTnVtYmVyKGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfcGllY2VzXCJdKSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3BlY3RhdG9yID0gdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdICE9PSB0aGlzLndwbGF5ZXIgJiYgdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdICE9PSB0aGlzLmJwbGF5ZXI7XHJcblxyXG4gICAgICAgIC8vIG9yaWVudGF0aW9uID0gdGhpcy5teWNvbG9yXHJcbiAgICAgICAgaWYgKHRoaXMuc3BlY3RhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXljb2xvciA9IHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/ICdibGFjaycgOiAnd2hpdGUnO1xyXG4gICAgICAgICAgICB0aGlzLm9wcGNvbG9yID0gdGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5teWNvbG9yID0gdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdID09PSB0aGlzLndwbGF5ZXIgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgICAgICAgdGhpcy5vcHBjb2xvciA9IHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSA9PT0gdGhpcy53cGxheWVyID8gJ2JsYWNrJyA6ICd3aGl0ZSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwbGF5ZXJzWzBdIGlzIHRvcCBwbGF5ZXIsIHBsYXllcnNbMV0gaXMgYm90dG9tIHBsYXllclxyXG4gICAgICAgIHRoaXMucGxheWVycyA9IFtcclxuICAgICAgICAgICAgdGhpcy5teWNvbG9yID09PSBcIndoaXRlXCIgPyB0aGlzLmJwbGF5ZXIgOiB0aGlzLndwbGF5ZXIsXHJcbiAgICAgICAgICAgIHRoaXMubXljb2xvciA9PT0gXCJ3aGl0ZVwiID8gdGhpcy53cGxheWVyIDogdGhpcy5icGxheWVyXHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLnRpdGxlcyA9IFtcclxuICAgICAgICAgICAgdGhpcy5teWNvbG9yID09PSBcIndoaXRlXCIgPyB0aGlzLm1vZGVsWydidGl0bGUnXSA6IHRoaXMubW9kZWxbJ3d0aXRsZSddLFxyXG4gICAgICAgICAgICB0aGlzLm15Y29sb3IgPT09IFwid2hpdGVcIiA/IHRoaXMubW9kZWxbJ3d0aXRsZSddIDogdGhpcy5tb2RlbFsnYnRpdGxlJ11cclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLnJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgY29uc3QgcGFydHMgPSB0aGlzLmZ1bGxmZW4uc3BsaXQoXCIgXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBmZW5fcGxhY2VtZW50ID0gcGFydHNbMF07XHJcbiAgICAgICAgdGhpcy50dXJuQ29sb3IgPSBwYXJ0c1sxXSA9PT0gXCJ3XCIgPyBcIndoaXRlXCIgOiBcImJsYWNrXCI7XHJcblxyXG4gICAgICAgIHRoaXMuc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICdmZW4nOiBmZW5fcGxhY2VtZW50LFxyXG4gICAgICAgICAgICAnbW92ZSc6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgJ2NoZWNrJzogZmFsc2UsXHJcbiAgICAgICAgICAgICd0dXJuQ29sb3InOiB0aGlzLnR1cm5Db2xvcixcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hlc3Nncm91bmQgPSBDaGVzc2dyb3VuZChlbCwge1xyXG4gICAgICAgICAgICBmZW46IGZlbl9wbGFjZW1lbnQsXHJcbiAgICAgICAgICAgIGdlb21ldHJ5OiBWQVJJQU5UU1t0aGlzLnZhcmlhbnRdLmdlb20sXHJcbiAgICAgICAgICAgIG9yaWVudGF0aW9uOiB0aGlzLm15Y29sb3IsXHJcbiAgICAgICAgICAgIHR1cm5Db2xvcjogdGhpcy50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXZlbnRzOiB7XHJcbiAgICAgICAgICAgICAgICBpbnNlcnQoZWxlbWVudHMpIHtyZXNpemVIYW5kbGUoZWxlbWVudHMpO31cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zcGVjdGF0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoe1xyXG4gICAgICAgICAgICAgICAgLy92aWV3T25seTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vdmU6IHRoaXMub25Nb3ZlKCksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc2V0KHtcclxuICAgICAgICAgICAgICAgIG1vdmFibGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBmcmVlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5teWNvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dEZXN0czogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBldmVudHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXI6IHRoaXMub25Vc2VyTW92ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOZXdQaWVjZTogdGhpcy5vblVzZXJEcm9wLFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBtb3ZlOiB0aGlzLm9uTW92ZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3BOZXdQaWVjZTogdGhpcy5vbkRyb3AoKSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Q6IHRoaXMub25TZWxlY3QodGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5zZWxlY3RlZCksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZ2F0aW5nID0gbWFrZUdhdGluZyh0aGlzKTtcclxuICAgICAgICB0aGlzLnByb21vdGlvbiA9IG1ha2VQcm9tb3Rpb24odGhpcyk7XHJcblxyXG4gICAgICAgIC8vIGluaXRpYWxpemUgcG9ja2V0c1xyXG4gICAgICAgIGlmIChuZWVkUG9ja2V0cyh0aGlzLnZhcmlhbnQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvY2tldDAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9ja2V0MCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBwb2NrZXQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvY2tldDEnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgdXBkYXRlUG9ja2V0cyh0aGlzLCBwb2NrZXQwLCBwb2NrZXQxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXJ0JykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cclxuICAgICAgICBwYXRjaChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm9hcmQtc2V0dGluZ3MnKSBhcyBIVE1MRWxlbWVudCwgc2V0dGluZ3NWaWV3KHRoaXMpKTtcclxuXHJcbiAgICAgICAgcGF0Y2goZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmVsaXN0JykgYXMgSFRNTEVsZW1lbnQsIG1vdmVsaXN0Vmlldyh0aGlzKSk7XHJcblxyXG4gICAgICAgIHBhdGNoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb3VuZGNoYXQnKSBhcyBIVE1MRWxlbWVudCwgY2hhdFZpZXcodGhpcywgXCJyb3VuZGNoYXRcIikpO1xyXG5cclxuICAgICAgICB0aGlzLnZwdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdicpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEdyb3VuZCA9ICgpID0+IHRoaXMuY2hlc3Nncm91bmQ7XHJcbiAgICBnZXREZXN0cyA9ICgpID0+IHRoaXMuZGVzdHM7XHJcblxyXG4gICAgcHJpdmF0ZSBnYW1lT3ZlciA9ICgpID0+IHtcclxuICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnZGl2I3Jlc3VsdCcsIHJlc3VsdCh0aGlzLnN0YXR1cywgdGhpcy5yZXN1bHQpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXF1ZXN0QW5hbHlzaXMgPSAoKSA9PiB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVxdWVzdC1hbmFseXNpcycpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXJ0JykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB0aGlzLmRvU2VuZCh7IHR5cGU6IFwiYW5hbHlzaXNcIiwgdXNlcm5hbWU6IHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgICAgIHRoaXMuYW5hbHlzaXNDaGFydCA9IGFuYWx5c2lzQ2hhcnQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja1N0YXR1cyA9IChtc2cpID0+IHtcclxuICAgICAgICBpZiAobXNnLmdhbWVJZCAhPT0gdGhpcy5tb2RlbFtcImdhbWVJZFwiXSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChtc2cuc3RhdHVzID49IDAgJiYgdGhpcy5yZXN1bHQgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSBtc2cucmVzdWx0O1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IG1zZy5zdGF0dXM7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZU92ZXIoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGduID0gbXNnLnBnbjtcclxuICAgICAgICAgICAgdGhpcy51Y2lfdXNpID0gbXNnLnVjaV91c2k7XHJcblxyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvcHlmZW4nKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgcGF0Y2goY29udGFpbmVyLCBoKCdkaXYnLCBbXHJcbiAgICAgICAgICAgICAgICBoKCdhLmktcGduJywgeyBvbjogeyBjbGljazogKCkgPT4gZG93bmxvYWQoXCJwYWNoZXNzLXZhcmlhbnRzX1wiICsgdGhpcy5tb2RlbFtcImdhbWVJZFwiXSwgdGhpcy5wZ24pIH0gfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2knLCB7cHJvcHM6IHt0aXRsZTogJ0Rvd25sb2FkIGdhbWUgdG8gUEdOIGZpbGUnfSwgY2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLWRvd25sb2FkXCI6IHRydWV9IH0sICcgRG93bmxvYWQgUEdOJyldKSxcclxuICAgICAgICAgICAgICAgIGgoJ2EuaS1wZ24nLCB7IG9uOiB7IGNsaWNrOiAoKSA9PiBjb3B5VGV4dFRvQ2xpcGJvYXJkKHRoaXMudWNpX3VzaSkgfSB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnaScsIHtwcm9wczoge3RpdGxlOiAnQ29weSBVU0kvVUNJIHRvIGNsaXBib2FyZCd9LCBjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tY2xpcGJvYXJkXCI6IHRydWV9IH0sICcgQ29weSBVQ0kvVVNJJyldKSxcclxuICAgICAgICAgICAgICAgIGgoJ2J1dHRvbiNyZXF1ZXN0LWFuYWx5c2lzJywgeyBvbjogeyBjbGljazogKCkgPT4gdGhpcy5yZXF1ZXN0QW5hbHlzaXMoKSB9IH0sIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdpJywge3Byb3BzOiB7dGl0bGU6ICdSZXF1ZXN0IENvbXB1dGVyIEFuYWx5c2lzJ30sIGNsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1taWNyb3Njb3BlXCI6IHRydWV9IH0sICcgUmVxdWVzdCBBbmFseXNpcycpXSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmZW4nKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgdGhpcy52ZmVuID0gcGF0Y2goY29udGFpbmVyLCBoKCdkaXYjZmVuJywgdGhpcy5mdWxsZmVuKSk7XHJcblxyXG4gICAgICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGdudGV4dCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ3RleHRhcmVhJywgeyBhdHRyczogeyByb3dzOiAxMywgcmVhZG9ubHk6IHRydWUsIHNwZWxsY2hlY2s6IGZhbHNlfSB9LCBtc2cucGduKSk7XHJcblxyXG4gICAgICAgICAgICBzZWxlY3RNb3ZlKHRoaXMsIHRoaXMucGx5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ0JvYXJkID0gKG1zZykgPT4ge1xyXG4gICAgICAgIGlmIChtc2cuZ2FtZUlkICE9PSB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZ290IGJvYXJkIG1zZzpcIiwgbXNnKTtcclxuICAgICAgICB0aGlzLnBseSA9IG1zZy5wbHlcclxuICAgICAgICB0aGlzLmZ1bGxmZW4gPSBtc2cuZmVuO1xyXG4gICAgICAgIHRoaXMuZGVzdHMgPSBtc2cuZGVzdHM7XHJcbiAgICAgICAgLy8gbGlzdCBvZiBsZWdhbCBwcm9tb3Rpb24gbW92ZXNcclxuICAgICAgICB0aGlzLnByb21vdGlvbnMgPSBtc2cucHJvbW87XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcnRzID0gbXNnLmZlbi5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgdGhpcy50dXJuQ29sb3IgPSBwYXJ0c1sxXSA9PT0gXCJ3XCIgPyBcIndoaXRlXCIgOiBcImJsYWNrXCI7XHJcblxyXG4gICAgICAgIGlmIChtc2cuc3RlcHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXBzID0gW107XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZWxpc3QnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgcGF0Y2goY29udGFpbmVyLCBoKCdkaXYjbW92ZWxpc3QnKSk7XHJcblxyXG4gICAgICAgICAgICBtc2cuc3RlcHMuZm9yRWFjaCgoc3RlcCkgPT4geyBcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RlcHMucHVzaChzdGVwKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB1cGRhdGVNb3ZlbGlzdCh0aGlzLCAxLCB0aGlzLnN0ZXBzLmxlbmd0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG1zZy5wbHkgPT09IHRoaXMuc3RlcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGVwID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICdmZW4nOiBtc2cuZmVuLFxyXG4gICAgICAgICAgICAgICAgICAgICdtb3ZlJzogbXNnLmxhc3RNb3ZlLFxyXG4gICAgICAgICAgICAgICAgICAgICdjaGVjayc6IG1zZy5jaGVjayxcclxuICAgICAgICAgICAgICAgICAgICAndHVybkNvbG9yJzogdGhpcy50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3Nhbic6IG1zZy5zdGVwc1swXS5zYW4sXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RlcHMucHVzaChzdGVwKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZU1vdmVsaXN0KHRoaXMsIHRoaXMuc3RlcHMubGVuZ3RoIC0gMSwgdGhpcy5zdGVwcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGFzdE1vdmUgPSBtc2cubGFzdE1vdmU7XHJcbiAgICAgICAgaWYgKGxhc3RNb3ZlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykpIHtcclxuICAgICAgICAgICAgICAgIGxhc3RNb3ZlID0gdXNpMnVjaShsYXN0TW92ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YXJpYW50LnN0YXJ0c1dpdGgoJ2dyYW5kJykpIHtcclxuICAgICAgICAgICAgICAgIGxhc3RNb3ZlID0gZ3JhbmQyemVybyhsYXN0TW92ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGFzdE1vdmUgPSBbbGFzdE1vdmUuc2xpY2UoMCwyKSwgbGFzdE1vdmUuc2xpY2UoMiw0KV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGRyb3AgbGFzdE1vdmUgY2F1c2luZyBzY3JvbGxiYXIgZmxpY2tlcixcclxuICAgICAgICAvLyBzbyB3ZSByZW1vdmUgZnJvbSBwYXJ0IHRvIGF2b2lkIHRoYXRcclxuICAgICAgICBpZiAobGFzdE1vdmUgIT09IG51bGwgJiYgbGFzdE1vdmVbMF1bMV0gPT09ICdAJykgbGFzdE1vdmUgPSBbbGFzdE1vdmVbMV1dO1xyXG4gICAgICAgIC8vIHNhdmUgY2FwdHVyZSBzdGF0ZSBiZWZvcmUgdXBkYXRpbmcgY2hlc3Nncm91bmRcclxuICAgICAgICBjb25zdCBjYXB0dXJlID0gbGFzdE1vdmUgIT09IG51bGwgJiYgdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5waWVjZXNbbGFzdE1vdmVbMV1dXHJcblxyXG4gICAgICAgIGlmIChsYXN0TW92ZSAhPT0gbnVsbCAmJiAodGhpcy50dXJuQ29sb3IgPT09IHRoaXMubXljb2xvciB8fCB0aGlzLnNwZWN0YXRvcikpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkge1xyXG4gICAgICAgICAgICAgICAgc291bmQuc2hvZ2ltb3ZlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLmNhcHR1cmUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc291bmQubW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGFzdE1vdmUgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGVja1N0YXR1cyhtc2cpO1xyXG4gICAgICAgIGlmIChtc2cuY2hlY2spIHtcclxuICAgICAgICAgICAgc291bmQuY2hlY2soKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNwZWN0YXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnNldCh7XHJcbiAgICAgICAgICAgICAgICBmZW46IHBhcnRzWzBdLFxyXG4gICAgICAgICAgICAgICAgdHVybkNvbG9yOiB0aGlzLnR1cm5Db2xvcixcclxuICAgICAgICAgICAgICAgIGNoZWNrOiBtc2cuY2hlY2ssXHJcbiAgICAgICAgICAgICAgICBsYXN0TW92ZTogbGFzdE1vdmUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB1cGRhdGVQb2NrZXRzKHRoaXMsIHRoaXMudnBvY2tldDAsIHRoaXMudnBvY2tldDEpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ29QbHkgPSAocGx5KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3RlcCA9IHRoaXMuc3RlcHNbcGx5XTtcclxuICAgICAgICB2YXIgbW92ZSA9IHN0ZXAubW92ZTtcclxuICAgICAgICB2YXIgY2FwdHVyZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChtb3ZlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkgbW92ZSA9IHVzaTJ1Y2kobW92ZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuc3RhcnRzV2l0aCgnZ3JhbmQnKSkgbW92ZSA9IGdyYW5kMnplcm8obW92ZSk7XHJcbiAgICAgICAgICAgIG1vdmUgPSBtb3ZlLnNsaWNlKDEsIDIpID09PSAnQCcgPyBbbW92ZS5zbGljZSgyLCA0KV0gOiBbbW92ZS5zbGljZSgwLCAyKSwgbW92ZS5zbGljZSgyLCA0KV07XHJcbiAgICAgICAgICAgIGNhcHR1cmUgPSB0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlLnBpZWNlc1ttb3ZlW21vdmUubGVuZ3RoIC0gMV1dICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzaGFwZXMwOiBEcmF3U2hhcGVbXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc2V0QXV0b1NoYXBlcyhzaGFwZXMwKTtcclxuICAgICAgICBjb25zdCBjZXZhbCA9IHN0ZXAuY2V2YWw7XHJcbiAgICAgICAgaWYgKGNldmFsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGNldmFsLnB2ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwdl9tb3ZlID0gY2V2YWxbXCJwdlwiXS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpKSBwdl9tb3ZlID0gdXNpMnVjaShwdl9tb3ZlKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuc3RhcnRzV2l0aCgnZ3JhbmQnKSkgcHZfbW92ZSA9IGdyYW5kMnplcm8ocHZfbW92ZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhwdl9tb3ZlLCBjZXZhbFtcInB2XCJdKTtcclxuICAgICAgICAgICAgICAgIGlmIChwdl9tb3ZlLnNsaWNlKDEsIDIpID09PSAnQCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkID0gcHZfbW92ZS5zbGljZSgyLCA0KTtcclxuICAgICAgICAgICAgICAgICAgICBzaGFwZXMwID0gW3sgb3JpZzogZCwgYnJ1c2g6ICdwYWxlR3JlZW4nLCBwaWVjZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogc3RlcC50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IHNhblRvUm9sZVtwdl9tb3ZlLnNsaWNlKDAsIDEpXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBvcmlnOiBkLCBicnVzaDogJ3BhbGVHcmVlbid9XHJcbiAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbyA9IHB2X21vdmUuc2xpY2UoMCwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IHB2X21vdmUuc2xpY2UoMiwgNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVzMCA9IFt7IG9yaWc6IG8sIGRlc3Q6IGQsIGJydXNoOiAncGFsZUdyZWVuJywgcGllY2U6IHVuZGVmaW5lZCB9LF07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy52cHYgPSBwYXRjaCh0aGlzLnZwdiwgaCgnZGl2I3B2JywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2RpdicsIFtoKCdzY29yZScsIHRoaXMuc3RlcHNbcGx5XVsnc2NvcmVTdHInXSksICdGYWlyeS1TdG9ja2Zpc2gsIERlcHRoICcgKyBTdHJpbmcoY2V2YWxbXCJkZXB0aFwiXSldKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdwdicsIGNldmFsLnB2X3NhbiAhPT0gdW5kZWZpbmVkID8gY2V2YWwucHZfc2FuIDogY2V2YWwucHYpXHJcbiAgICAgICAgICAgICAgICBdKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGwgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCdzdHlsZScsIHN0bCArICctLVBWaGVpZ2h0OjY0cHg7Jyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZwdiA9IHBhdGNoKHRoaXMudnB2LCBoKCdkaXYjcHYnKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGwgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCdzdHlsZScsIHN0bCArICctLVBWaGVpZ2h0OjBweDsnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coc2hhcGVzMCk7XHJcbiAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoe1xyXG4gICAgICAgICAgICBmZW46IHN0ZXAuZmVuLFxyXG4gICAgICAgICAgICB0dXJuQ29sb3I6IHN0ZXAudHVybkNvbG9yLFxyXG4gICAgICAgICAgICBtb3ZhYmxlOiB7XHJcbiAgICAgICAgICAgICAgICBmcmVlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLnNwZWN0YXRvciA/IHVuZGVmaW5lZCA6IHN0ZXAudHVybkNvbG9yLFxyXG4gICAgICAgICAgICAgICAgZGVzdHM6IHRoaXMucmVzdWx0ID09PSBcIlwiICYmIHBseSA9PT0gdGhpcy5zdGVwcy5sZW5ndGggLSAxID8gdGhpcy5kZXN0cyA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNoZWNrOiBzdGVwLmNoZWNrLFxyXG4gICAgICAgICAgICBsYXN0TW92ZTogbW92ZSxcclxuICAgICAgICAgICAgZHJhd2FibGU6IHthdXRvU2hhcGVzOiBzaGFwZXMwfSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5mdWxsZmVuID0gc3RlcC5mZW47XHJcbiAgICAgICAgdXBkYXRlUG9ja2V0cyh0aGlzLCB0aGlzLnZwb2NrZXQwLCB0aGlzLnZwb2NrZXQxKTtcclxuXHJcbiAgICAgICAgaWYgKHBseSA9PT0gdGhpcy5wbHkgKyAxKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykpIHtcclxuICAgICAgICAgICAgICAgIHNvdW5kLnNob2dpbW92ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VuZC5jYXB0dXJlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLm1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBseSA9IHBseVxyXG4gICAgICAgIHRoaXMudmZlbiA9IHBhdGNoKHRoaXMudmZlbiwgaCgnZGl2I2ZlbicsIHRoaXMuZnVsbGZlbikpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZG9TZW5kID0gKG1lc3NhZ2UpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIi0tLT4gZG9TZW5kKCk6XCIsIG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuc29jay5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNlbmRNb3ZlID0gKG9yaWcsIGRlc3QsIHByb21vKSA9PiB7XHJcbiAgICAgICAgLy8gcGF1c2UoKSB3aWxsIGFkZCBpbmNyZW1lbnQhXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJzZW5kTW92ZShvcmlnLCBkZXN0LCBwcm9tKVwiLCBvcmlnLCBkZXN0LCBwcm9tbyk7XHJcbiAgICAgICAgY29uc3QgdWNpX21vdmUgPSBvcmlnICsgZGVzdCArIHByb21vO1xyXG4gICAgICAgIGNvbnN0IG1vdmUgPSB0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykgPyB1Y2kydXNpKHVjaV9tb3ZlKSA6IHRoaXMudmFyaWFudC5zdGFydHNXaXRoKCdncmFuZCcpID8gemVybzJncmFuZCh1Y2lfbW92ZSkgOiB1Y2lfbW92ZTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNlbmRNb3ZlKG1vdmUpXCIsIG1vdmUpO1xyXG4gICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJtb3ZlXCIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSwgbW92ZTogbW92ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTW92ZSA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gKG9yaWcsIGRlc3QsIGNhcHR1cmVkUGllY2UpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCIgICBncm91bmQub25Nb3ZlKClcIiwgb3JpZywgZGVzdCwgY2FwdHVyZWRQaWVjZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykpIHtcclxuICAgICAgICAgICAgICAgIHNvdW5kLnNob2dpbW92ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhcHR1cmVkUGllY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VuZC5jYXB0dXJlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLm1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uRHJvcCA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gKHBpZWNlLCBkZXN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZ3JvdW5kLm9uRHJvcCgpXCIsIHBpZWNlLCBkZXN0KTtcclxuICAgICAgICAgICAgaWYgKGRlc3QgIT0gJ3owJyAmJiBwaWVjZS5yb2xlICYmIGRyb3BJc1ZhbGlkKHRoaXMuZGVzdHMsIHBpZWNlLnJvbGUsIGRlc3QpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc291bmQuc2hvZ2ltb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLm1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tEcm9wID0gcGllY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblVzZXJNb3ZlID0gKG9yaWcsIGRlc3QsIG1ldGEpID0+IHtcclxuICAgICAgICAvLyBjaGVzc2dyb3VuZCBkb2Vzbid0IGtub3dzIGFib3V0IGVwLCBzbyB3ZSBoYXZlIHRvIHJlbW92ZSBlcCBjYXB0dXJlZCBwYXduXHJcbiAgICAgICAgY29uc3QgcGllY2VzID0gdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5waWVjZXM7XHJcbiAgICAgICAgY29uc3QgZ2VvbSA9IHRoaXMuY2hlc3Nncm91bmQuc3RhdGUuZ2VvbWV0cnk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJncm91bmQub25Vc2VyTW92ZSgpXCIsIG9yaWcsIGRlc3QsIG1ldGEsIHBpZWNlcyk7XHJcbiAgICAgICAgY29uc3QgbW92ZWQgPSBwaWVjZXNbZGVzdF0gYXMgUGllY2U7XHJcbiAgICAgICAgY29uc3QgZmlyc3RSYW5rSXMwID0gdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5kaW1lbnNpb25zLmhlaWdodCA9PT0gMTA7XHJcbiAgICAgICAgaWYgKG1ldGEuY2FwdHVyZWQgPT09IHVuZGVmaW5lZCAmJiBtb3ZlZC5yb2xlID09PSBcInBhd25cIiAmJiBvcmlnWzBdICE9IGRlc3RbMF0gJiYgaGFzRXAodGhpcy52YXJpYW50KSkge1xyXG4gICAgICAgICAgICBjb25zdCBwb3MgPSBrZXkycG9zKGRlc3QsIGZpcnN0UmFua0lzMCksXHJcbiAgICAgICAgICAgIHBhd25Qb3M6IFBvcyA9IFtwb3NbMF0sIHBvc1sxXSArICh0aGlzLm15Y29sb3IgPT09ICd3aGl0ZScgPyAtMSA6IDEpXTtcclxuICAgICAgICAgICAgY29uc3QgZGlmZjogUGllY2VzRGlmZiA9IHt9O1xyXG4gICAgICAgICAgICBkaWZmW3BvczJrZXkocGF3blBvcywgZ2VvbSldID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnNldFBpZWNlcyhkaWZmKTtcclxuICAgICAgICAgICAgbWV0YS5jYXB0dXJlZCA9IHtyb2xlOiBcInBhd25cIn07XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBpbmNyZWFzZSBwb2NrZXQgY291bnRcclxuICAgICAgICBpZiAoKHRoaXMudmFyaWFudCA9PT0gXCJjcmF6eWhvdXNlXCIgfHwgdGhpcy52YXJpYW50ID09PSBcImNhcGFob3VzZVwiIHx8IHRoaXMudmFyaWFudCA9PT0gXCJzaG91c2VcIiB8fCB0aGlzLnZhcmlhbnQgPT09IFwiZ3JhbmRob3VzZVwiIHx8IHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkgJiYgbWV0YS5jYXB0dXJlZCkge1xyXG4gICAgICAgICAgICB2YXIgcm9sZSA9IG1ldGEuY2FwdHVyZWQucm9sZVxyXG4gICAgICAgICAgICBpZiAobWV0YS5jYXB0dXJlZC5wcm9tb3RlZCkgcm9sZSA9IHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/IG1ldGEuY2FwdHVyZWQucm9sZS5zbGljZSgxKSBhcyBSb2xlIDogXCJwYXduXCI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5mbGlwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvY2tldHNbMF1bcm9sZV0rKztcclxuICAgICAgICAgICAgICAgIHRoaXMudnBvY2tldDAgPSBwYXRjaCh0aGlzLnZwb2NrZXQwLCBwb2NrZXRWaWV3KHRoaXMsIHRoaXMubXljb2xvciwgXCJ0b3BcIikpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2NrZXRzWzFdW3JvbGVdKys7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZwb2NrZXQxID0gcGF0Y2godGhpcy52cG9ja2V0MSwgcG9ja2V0Vmlldyh0aGlzLCB0aGlzLm15Y29sb3IsIFwiYm90dG9tXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vICBnYXRpbmcgZWxlcGhhbnQvaGF3a1xyXG4gICAgICAgIGlmICh0aGlzLnZhcmlhbnQgPT09IFwic2VpcmF3YW5cIiB8fCB0aGlzLnZhcmlhbnQgPT09IFwic2hvdXNlXCIpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByb21vdGlvbi5zdGFydChvcmlnLCBkZXN0LCBtZXRhKSAmJiAhdGhpcy5nYXRpbmcuc3RhcnQodGhpcy5mdWxsZmVuLCBvcmlnLCBkZXN0KSkgdGhpcy5zZW5kTW92ZShvcmlnLCBkZXN0LCAnJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByb21vdGlvbi5zdGFydChvcmlnLCBkZXN0LCBtZXRhKSkgdGhpcy5zZW5kTW92ZShvcmlnLCBkZXN0LCAnJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uVXNlckRyb3AgPSAocm9sZSwgZGVzdCkgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZ3JvdW5kLm9uVXNlckRyb3AoKVwiLCByb2xlLCBkZXN0KTtcclxuICAgICAgICAvLyBkZWNyZWFzZSBwb2NrZXQgY291bnRcclxuICAgICAgICAvL2NhbmNlbERyb3BNb2RlKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUpO1xyXG4gICAgICAgIGlmIChkcm9wSXNWYWxpZCh0aGlzLmRlc3RzLCByb2xlLCBkZXN0KSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mbGlwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvY2tldHNbMF1bcm9sZV0tLTtcclxuICAgICAgICAgICAgICAgIHRoaXMudnBvY2tldDAgPSBwYXRjaCh0aGlzLnZwb2NrZXQwLCBwb2NrZXRWaWV3KHRoaXMsIHRoaXMubXljb2xvciwgXCJ0b3BcIikpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2NrZXRzWzFdW3JvbGVdLS07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZwb2NrZXQxID0gcGF0Y2godGhpcy52cG9ja2V0MSwgcG9ja2V0Vmlldyh0aGlzLCB0aGlzLm15Y29sb3IsIFwiYm90dG9tXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlbmRNb3ZlKHJvbGVUb1Nhbltyb2xlXSArIFwiQFwiLCBkZXN0LCAnJylcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJzZW50IG1vdmVcIiwgbW92ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCIhISEgaW52YWxpZCBtb3ZlICEhIVwiLCByb2xlLCBkZXN0KTtcclxuICAgICAgICAgICAgLy8gcmVzdG9yZSBib2FyZFxyXG4gICAgICAgICAgICB0aGlzLmNsaWNrRHJvcCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoe1xyXG4gICAgICAgICAgICAgICAgZmVuOiB0aGlzLmZ1bGxmZW4sXHJcbiAgICAgICAgICAgICAgICBsYXN0TW92ZTogdGhpcy5sYXN0bW92ZSxcclxuICAgICAgICAgICAgICAgIHR1cm5Db2xvcjogdGhpcy5teWNvbG9yLFxyXG4gICAgICAgICAgICAgICAgbW92YWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlc3RzOiB0aGlzLmRlc3RzLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dEZXN0czogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2VsZWN0ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJncm91bmQub25TZWxlY3QoKVwiLCBrZXksIHNlbGVjdGVkLCB0aGlzLmNsaWNrRHJvcCwgdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZSk7XHJcbiAgICAgICAgICAgIC8vIElmIGRyb3Agc2VsZWN0aW9uIHdhcyBzZXQgZHJvcERlc3RzIHdlIGhhdmUgdG8gcmVzdG9yZSBkZXN0cyBoZXJlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlLm1vdmFibGUuZGVzdHMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoa2V5ICE9ICd6MCcgJiYgJ3owJyBpbiB0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlLm1vdmFibGUuZGVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsaWNrRHJvcCAhPT0gdW5kZWZpbmVkICYmIGRyb3BJc1ZhbGlkKHRoaXMuZGVzdHMsIHRoaXMuY2xpY2tEcm9wLnJvbGUsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLm5ld1BpZWNlKHRoaXMuY2xpY2tEcm9wLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Vc2VyRHJvcCh0aGlzLmNsaWNrRHJvcC5yb2xlLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGlja0Ryb3AgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAvL2NhbmNlbERyb3BNb2RlKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoeyBtb3ZhYmxlOiB7IGRlc3RzOiB0aGlzLmRlc3RzIH19KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gU2l0dHV5aW4gaW4gcGxhY2UgcHJvbW90aW9uIG9uIEN0cmwrY2xpY2tcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUuc3RhdHMuY3RybEtleSAmJiBcclxuICAgICAgICAgICAgICAgIChrZXkgaW4gdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5tb3ZhYmxlLmRlc3RzKSAmJlxyXG4gICAgICAgICAgICAgICAgKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUubW92YWJsZS5kZXN0c1trZXldLmluZGV4T2Yoa2V5KSA+PSAwKSAmJlxyXG4gICAgICAgICAgICAgICAgKHRoaXMudmFyaWFudCA9PT0gJ3NpdHR1eWluJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ3RybCBpbiBwbGFjZSBwcm9tb3Rpb25cIiwga2V5KTtcclxuICAgICAgICAgICAgICAgIHZhciBwaWVjZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIHZhciBwaWVjZSA9IHRoaXMuY2hlc3Nncm91bmQuc3RhdGUucGllY2VzW2tleV07XHJcbiAgICAgICAgICAgICAgICBwaWVjZXNba2V5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogcGllY2UhLmNvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIHJvbGU6ICdmZXJ6JyxcclxuICAgICAgICAgICAgICAgICAgICBwcm9tb3RlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc2V0UGllY2VzKHBpZWNlcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRNb3ZlKGtleSwga2V5LCAnZicpO1xyXG5cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ0FuYWx5c2lzID0gKG1zZykgPT4ge1xyXG4gICAgICAgIGlmIChtc2dbJ2NldmFsJ11bJ3Njb3JlJ10gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBwbHkgPSBtc2dbJ3BseSddO1xyXG4gICAgICAgIGNvbnN0IHNjb3JlID0gbXNnWydjZXZhbCddWydzY29yZSddO1xyXG4gICAgICAgIHZhciBzY29yZVN0ciA9ICcnO1xyXG4gICAgICAgIHZhciBjZXZhbCA9ICcnO1xyXG4gICAgICAgIGlmIChzY29yZVsnbWF0ZSddICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgY2V2YWwgPSBzY29yZVsnbWF0ZSddXHJcbiAgICAgICAgICAgIGNvbnN0IHNpZ24gPSAoKG1zZy5jb2xvciA9PT0gJ2InICYmIE51bWJlcihjZXZhbCkgPiAwKSB8fCAobXNnLmNvbG9yID09PSAndycgJiYgTnVtYmVyKGNldmFsKSA8IDApKSA/ICctJzogJyc7XHJcbiAgICAgICAgICAgIHNjb3JlU3RyID0gJyMnICsgc2lnbiArIE1hdGguYWJzKE51bWJlcihjZXZhbCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNldmFsID0gc2NvcmVbJ2NwJ11cclxuICAgICAgICAgICAgdmFyIG5zY29yZSA9IE51bWJlcihjZXZhbCkgLyAxMDAuMDtcclxuICAgICAgICAgICAgaWYgKG1zZy5jb2xvciA9PT0gJ2InKSBuc2NvcmUgPSAtbnNjb3JlO1xyXG4gICAgICAgICAgICBzY29yZVN0ciA9IG5zY29yZS50b0ZpeGVkKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhwbHksIHNjb3JlU3RyKTtcclxuICAgICAgICBpZiAocGx5ID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgZXZhbEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BseScgKyBTdHJpbmcocGx5KSkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHBhdGNoKGV2YWxFbCwgaCgnZXZhbCNwbHknICsgU3RyaW5nKHBseSksIHNjb3JlU3RyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RlcHNbcGx5XVsnY2V2YWwnXSA9IG1zZ1snY2V2YWwnXTtcclxuICAgICAgICB0aGlzLnN0ZXBzW3BseV1bJ3Njb3JlU3RyJ10gPSBzY29yZVN0cjtcclxuXHJcbiAgICAgICAgYW5hbHlzaXNDaGFydCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnVXNlckNvbm5lY3RlZCA9IChtc2cpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0gPSBtc2dbXCJ1c2VybmFtZVwiXTtcclxuICAgICAgICByZW5kZXJVc2VybmFtZSh0aGlzLm1vZGVsW1wiaG9tZVwiXSwgdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdKTtcclxuICAgICAgICAvLyB3ZSB3YW50IHRvIGtub3cgbGFzdE1vdmUgYW5kIGNoZWNrIHN0YXR1c1xyXG4gICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJib2FyZFwiLCBnYW1lSWQ6IHRoaXMubW9kZWxbXCJnYW1lSWRcIl0gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ0NoYXQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgaWYgKG1zZy51c2VyICE9PSB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0pIHtcclxuICAgICAgICAgICAgaWYgKCh0aGlzLnNwZWN0YXRvciAmJiBtc2cucm9vbSA9PT0gJ3NwZWN0YXRvcicpIHx8ICghdGhpcy5zcGVjdGF0b3IgJiYgbXNnLnJvb20gIT09ICdzcGVjdGF0b3InKSB8fCBtc2cudXNlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNoYXRNZXNzYWdlKG1zZy51c2VyLCBtc2cubWVzc2FnZSwgXCJyb3VuZGNoYXRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ0Z1bGxDaGF0ID0gKG1zZykgPT4ge1xyXG4gICAgICAgIG1zZy5saW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5zcGVjdGF0b3IgJiYgbGluZS5yb29tID09PSAnc3BlY3RhdG9yJykgfHwgKCF0aGlzLnNwZWN0YXRvciAmJiBsaW5lLnJvb20gIT09ICdzcGVjdGF0b3InKSB8fCBsaW5lLnVzZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjaGF0TWVzc2FnZShsaW5lLnVzZXIsIGxpbmUubWVzc2FnZSwgXCJyb3VuZGNoYXRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnR2FtZU5vdEZvdW5kID0gKG1zZykgPT4ge1xyXG4gICAgICAgIGFsZXJ0KFwiUmVxdXNldGVkIGdhbWUgXCIgKyBtc2dbJ2dhbWVJZCddICsgXCIgbm90IGZvdW5kIVwiKTtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHRoaXMubW9kZWxbXCJob21lXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTWVzc2FnZSA9IChldnQpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIjwrKysgb25NZXNzYWdlKCk6XCIsIGV2dC5kYXRhKTtcclxuICAgICAgICB2YXIgbXNnID0gSlNPTi5wYXJzZShldnQuZGF0YSk7XHJcbiAgICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYm9hcmRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dCb2FyZChtc2cpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJhbmFseXNpc1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ0FuYWx5c2lzKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImdhbWVfdXNlcl9jb25uZWN0ZWRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dVc2VyQ29ubmVjdGVkKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInJvdW5kY2hhdFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ0NoYXQobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZnVsbGNoYXRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dGdWxsQ2hhdChtc2cpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJnYW1lX25vdF9mb3VuZFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ0dhbWVOb3RGb3VuZChtc2cpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IEhpZ2hjaGFydHMgZnJvbSBcImhpZ2hjaGFydHNcIjtcblxuaW1wb3J0IHsgcG92Q2hhbmNlcywgc2VsZWN0TW92ZSB9IGZyb20gJy4vbW92ZWxpc3QnO1xuXG5leHBvcnQgZnVuY3Rpb24gYW5hbHlzaXNDaGFydCAoY3RybCkge1xuICAgIGNvbnN0IHNjb3JlcyA9IGN0cmwuc3RlcHMubWFwKFxuICAgICAgICAgICAgKHN0ZXAsIHBseSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGVwLmNldmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcmUgPSBzdGVwLmNldmFsLnNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR1cm4gPSBNYXRoLmZsb29yKChwbHkgLSAxKSAvIDIpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb3RzID0gc3RlcC50dXJuQ29sb3IgPT09ICdibGFjaycgPyAnLicgOiAnLi4uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb2ludCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdHVybiArIGRvdHMgKyAnICcgKyBzdGVwLnNhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeTogcG92Q2hhbmNlcyhzdGVwLnR1cm5Db2xvciwgc2NvcmUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHJldHVybiAwO1xuICAgICAgICAgICAgfSlcbiAgICBjdHJsLmFuYWx5c2lzQ2hhcnQgPSBIaWdoY2hhcnRzLmNoYXJ0KCdjaGFydCcsIHtcbiAgICAgICAgY2hhcnQ6IHsgdHlwZTogJ2FyZWEnLFxuICAgICAgICAgICAgc3BhY2luZzogWzMsIDAsIDMsIDBdLFxuICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICBjcmVkaXRzOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIGxlZ2VuZDogeyBlbmFibGVkOiBmYWxzZSB9LFxuICAgICAgICB0aXRsZTogeyB0ZXh0OiB1bmRlZmluZWQgfSxcbiAgICAgICAgcGxvdE9wdGlvbnM6IHtcbiAgICAgICAgc2VyaWVzOiB7XG4gICAgICAgICAgYW5pbWF0aW9uOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBhcmVhOiB7XG4gICAgICAgICAgZmlsbENvbG9yOiAncmdiYSgyNTUsMjU1LDI1NSwwLjcpJyxcbiAgICAgICAgICBuZWdhdGl2ZUZpbGxDb2xvcjogJ3JnYmEoMCwwLDAsMC4yKScsXG4gICAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICAgIGxpbmVXaWR0aDogMSxcbiAgICAgICAgICBjb2xvcjogJyNkODUwMDAnLFxuICAgICAgICAgIGFsbG93UG9pbnRTZWxlY3Q6IHRydWUsXG4gICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgc3RhdGVzOiB7XG4gICAgICAgICAgICBob3Zlcjoge1xuICAgICAgICAgICAgICBsaW5lV2lkdGg6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICAgIGlmIChldmVudC5wb2ludCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnBvaW50LnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIHNlbGVjdE1vdmUgKGN0cmwsIGV2ZW50LnBvaW50LngpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG1hcmtlcjoge1xuICAgICAgICAgICAgcmFkaXVzOiAxLFxuICAgICAgICAgICAgc3RhdGVzOiB7XG4gICAgICAgICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgICAgICAgcmFkaXVzOiA0LFxuICAgICAgICAgICAgICAgIGxpbmVDb2xvcjogJyNkODUwMDAnXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNlbGVjdDoge1xuICAgICAgICAgICAgICAgIHJhZGl1czogNCxcbiAgICAgICAgICAgICAgICBsaW5lQ29sb3I6ICcjZDg1MDAwJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgIHBvaW50Rm9ybWF0dGVyOiBmdW5jdGlvbihmb3JtYXQ6IHN0cmluZykge1xuICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgne3Nlcmllcy5uYW1lfScsICdBZHZhbnRhZ2UnKTtcbiAgICAgICAgICAgICAgdmFyIHNlbGY6IEhpZ2hjaGFydHMuUG9pbnQgPSB0aGlzO1xuICAgICAgICAgICAgICB2YXIgY2V2YWwgPSBjdHJsLnN0ZXBzW3NlbGYueF0uY2V2YWwuc2NvcmU7XG4gICAgICAgICAgICAgIGlmICghY2V2YWwpIHJldHVybiAnJztcbiAgICAgICAgICAgICAgZWxzZSByZXR1cm4gZm9ybWF0LnJlcGxhY2UoJ3twb2ludC55fScsIGN0cmwuc3RlcHNbc2VsZi54XS5zY29yZVN0cik7XG4gICAgICAgICAgICB9IGFzIEhpZ2hjaGFydHMuRm9ybWF0dGVyQ2FsbGJhY2tGdW5jdGlvbjxIaWdoY2hhcnRzLlBvaW50PlxuICAgICAgICB9LFxuICAgICAgICB4QXhpczoge1xuICAgICAgICAgICAgdGl0bGU6IHsgdGV4dDogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICBsYWJlbHM6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgICAgICAgIGdyaWRMaW5lV2lkdGg6IDEsXG4gICAgICAgICAgICBsaW5lV2lkdGg6IDAsXG4gICAgICAgICAgICB0aWNrV2lkdGg6IDBcbiAgICAgICAgfSxcbiAgICAgICAgeUF4aXM6IHtcbiAgICAgICAgICAgIHRpdGxlOiB7IHRleHQ6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgICAgbGFiZWxzOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgICAgICBtaW46IC0xLjEsXG4gICAgICAgICAgICBtYXg6IDEuMSxcbiAgICAgICAgICAgIHN0YXJ0T25UaWNrOiBmYWxzZSxcbiAgICAgICAgICAgIGVuZE9uVGljazogZmFsc2UsXG4gICAgICAgICAgICBsaW5lV2lkdGg6IDEsXG4gICAgICAgICAgICBncmlkTGluZVdpZHRoOiAwLFxuICAgICAgICAgICAgcGxvdExpbmVzOiBbe1xuICAgICAgICAgICAgICBjb2xvcjogJyNhMGEwYTAnLFxuICAgICAgICAgICAgICB3aWR0aDogMSxcbiAgICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICB9XVxuICAgICAgICB9LFxuICAgICAgICBzZXJpZXM6IFt7IGRhdGE6IHNjb3JlcyB9IGFzIEhpZ2hjaGFydHMuU2VyaWVzQ29sdW1uT3B0aW9uc1xuICAgICAgICBdXG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBpbml0IH0gZnJvbSBcInNuYWJiZG9tXCI7XG5pbXBvcnQga2xhc3MgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9jbGFzcyc7XG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9wcm9wcyc7XG5pbXBvcnQgbGlzdGVuZXJzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvZXZlbnRsaXN0ZW5lcnMnO1xuXG5jb25zdCBwYXRjaCA9IGluaXQoW2tsYXNzLCBhdHRyaWJ1dGVzLCBwcm9wZXJ0aWVzLCBsaXN0ZW5lcnNdKTtcblxuaW1wb3J0IGggZnJvbSAnc25hYmJkb20vaCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGF0VmlldyAoY3RybCwgY2hhdFR5cGUpIHtcbiAgICBmdW5jdGlvbiBvbktleVByZXNzIChlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWVcbiAgICAgICAgaWYgKChlLmtleUNvZGUgPT0gMTMgfHwgZS53aGljaCA9PSAxMykgJiYgbWVzc2FnZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjaGF0TWVzc2FnZSAoY3RybC5tb2RlbFsndXNlcm5hbWUnXSwgbWVzc2FnZSwgY2hhdFR5cGUpO1xuICAgICAgICAgICAgY3RybC5kb1NlbmQoe1widHlwZVwiOiBjaGF0VHlwZSwgXCJtZXNzYWdlXCI6IG1lc3NhZ2UsIFwiZ2FtZUlkXCI6IGN0cmwubW9kZWxbXCJnYW1lSWRcIl0sIFwicm9vbVwiOiAoY3RybC5zcGVjdGF0b3IpID8gXCJzcGVjdGF0b3JcIjogXCJwbGF5ZXJcIn0pO1xuICAgICAgICAgICAgKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gXCJcIjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoKGBkaXYuJHtjaGF0VHlwZX0jJHtjaGF0VHlwZX1gLCB7IGNsYXNzOiB7XCJjaGF0XCI6IHRydWV9IH0sIFtcbiAgICAgICAgICAgICAgICBoKCdkaXYuY2hhdHJvb20nLCBjdHJsLnNwZWN0YXRvciA/ICdTcGVjdGF0b3Igcm9vbScgOiAnQ2hhdCByb29tJyksXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogaGlkZS9zaG93IGNoYXRcbiAgICAgICAgICAgICAgICAvLyBoKCdpbnB1dCNjaGF0Ym94Jywge3Byb3BzOiB7bmFtZTogXCJjaGF0Ym94XCIsIHR5cGU6IFwiY2hlY2tib3hcIiwgY2hlY2tlZDogXCJcIn19KSxcbiAgICAgICAgICAgICAgICBoKGBvbCMke2NoYXRUeXBlfS1tZXNzYWdlc2AsIFsgaChcImRpdiNtZXNzYWdlc1wiKV0pLFxuICAgICAgICAgICAgICAgIGgoJ2lucHV0I2NoYXQtZW50cnknLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiZW50cnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogXCJvZmZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlBsZWFzZSBiZSBuaWNlIGluIHRoZSBjaGF0IVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoOiBcIjE0MFwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbjogeyBrZXlwcmVzczogKGUpID0+IG9uS2V5UHJlc3MoZSkgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGF0TWVzc2FnZSAodXNlciwgbWVzc2FnZSwgY2hhdFR5cGUpIHtcbiAgICBjb25zdCBteURpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNoYXRUeXBlICsgJy1tZXNzYWdlcycpIGFzIEhUTUxFbGVtZW50O1xuICAgIC8vIFlvdSBtdXN0IGFkZCBib3JkZXIgd2lkdGhzLCBwYWRkaW5nIGFuZCBtYXJnaW5zIHRvIHRoZSByaWdodC5cbiAgICBjb25zdCBpc1Njcm9sbGVkID0gbXlEaXYuc2Nyb2xsVG9wID09IG15RGl2LnNjcm9sbEhlaWdodCAtIG15RGl2Lm9mZnNldEhlaWdodDtcblxuICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVzc2FnZXMnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodXNlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcGF0Y2goY29udGFpbmVyLCBoKCdkaXYjbWVzc2FnZXMnLCBbIGgoXCJsaS5tZXNzYWdlLm9mZmVyXCIsIFtoKFwidFwiLCBtZXNzYWdlKV0pIF0pKTtcbiAgICB9IGVsc2UgaWYgKHVzZXIgPT09ICdfc2VydmVyJykge1xuICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ2RpdiNtZXNzYWdlcycsIFsgaChcImxpLm1lc3NhZ2Uuc2VydmVyXCIsIFtoKFwidXNlclwiLCAnU2VydmVyJyksIGgoXCJ0XCIsIG1lc3NhZ2UpXSkgXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnZGl2I21lc3NhZ2VzJywgWyBoKFwibGkubWVzc2FnZVwiLCBbaChcInVzZXJcIiwgdXNlciksIGgoXCJ0XCIsIG1lc3NhZ2UpXSkgXSkpO1xuICAgIH07XG5cbiAgICBpZiAoaXNTY3JvbGxlZCkgbXlEaXYuc2Nyb2xsVG9wID0gbXlEaXYuc2Nyb2xsSGVpZ2h0O1xufSIsImltcG9ydCB7IGtleTJwb3MgfSBmcm9tICdjaGVzc2dyb3VuZHgvdXRpbCc7XHJcbmltcG9ydCB7IENvbG9yLCBHZW9tZXRyeSwgS2V5LCBSb2xlIH0gZnJvbSAnY2hlc3Nncm91bmR4L3R5cGVzJztcclxuXHJcbmV4cG9ydCBjb25zdCB2YXJpYW50cyA9IFtcIm1ha3J1a1wiLCBcImNhbWJvZGlhblwiLCBcInNpdHR1eWluXCIsIFwicGxhY2VtZW50XCIsIFwiY3Jhenlob3VzZVwiLCBcInN0YW5kYXJkXCIsIFwic2hvZ2lcIiwgXCJtaW5pc2hvZ2lcIiwgXCJ4aWFuZ3FpXCIsIFwiY2FwYWJsYW5jYVwiLCBcInNlaXJhd2FuXCIsIFwiY2FwYWhvdXNlXCIsIFwic2hvdXNlXCIsIFwiZ3JhbmRcIiwgXCJncmFuZGhvdXNlXCIsIFwiZ290aGljXCIsIFwiZ290aGhvdXNlXCJdO1xyXG5leHBvcnQgY29uc3QgdmFyaWFudHM5NjAgPSBbXCJjcmF6eWhvdXNlXCIsIFwic3RhbmRhcmRcIiwgXCJjYXBhYmxhbmNhXCIsIFwiY2FwYWhvdXNlXCJdO1xyXG5cclxuZXhwb3J0IGNvbnN0IFZBUklBTlRTID0ge1xyXG4gICAgbWFrcnVrOiB7IGdlb206IEdlb21ldHJ5LmRpbTh4OCwgY2c6IFwiY2ctNTEyXCIsIGJvYXJkOiBcImdyaWRcIiwgQm9hcmRDU1M6IFtcIm1ha3JiMVwiLCBcIm1ha3JiMlwiXSwgcGllY2VzOiBcIm1ha3J1a1wiLCBQaWVjZUNTUzogW1wibWFrcnVrXCJdLCBpY29uOiBcIlFcIn0sXHJcbiAgICBjYW1ib2RpYW46IHsgZ2VvbTogR2VvbWV0cnkuZGltOHg4LCBjZzogXCJjZy01MTJcIiwgYm9hcmQ6IFwiZ3JpZFwiLCBCb2FyZENTUzogW1wibWFrcmIxXCIsIFwibWFrcmIyXCJdLCBwaWVjZXM6IFwibWFrcnVrXCIsIFBpZWNlQ1NTOiBbXCJtYWtydWtcIl0sIGljb246IFwiUVwifSxcclxuICAgIHNpdHR1eWluOiB7IGdlb206IEdlb21ldHJ5LmRpbTh4OCwgY2c6IFwiY2ctNTEyXCIsIGJvYXJkOiBcImdyaWR4XCIsIEJvYXJkQ1NTOiBbXCJzaXR0YjFcIiwgXCJzaXR0YjJcIl0sIHBpZWNlczogXCJzaXR0dXlpblwiLCBQaWVjZUNTUzogW1wic2l0dHV5aW5tXCIsIFwic2l0dHV5aW5zXCJdLCBpY29uOiBcIlJcIiwgYmFzZVVSTDogW1wibWFrcnVrXCIsIFwic2l0dHV5aW5cIl0gfSxcclxuICAgIHNob2dpOiB7IGdlb206IEdlb21ldHJ5LmRpbTl4OSwgY2c6IFwiY2ctNTc2XCIsIGJvYXJkOiBcImdyaWQ5eDlcIiwgQm9hcmRDU1M6IFtcIjl4OWFcIiwgXCI5eDliXCIsIFwiOXg5Y1wiLCBcIjl4OWRcIiwgXCI5eDllXCIsIFwiOXg5ZlwiXSwgcGllY2VzOiBcInNob2dpXCIsIFBpZWNlQ1NTOiBbXCJzaG9naTBrXCIsIFwic2hvZ2kwXCIsIFwic2hvZ2kwd1wiLCBcInNob2dpMHBcIl0sIGljb246IFwiS1wiLCBiYXNlVVJMOiBbXCJzaG9naS9jdGtcIiwgXCJzaG9naVwiLCBcInNob2dpL2N0d1wiLCBcInNob2dpL2N0cFwiXSB9LFxyXG4gICAgbWluaXNob2dpOiB7IGdlb206IEdlb21ldHJ5LmRpbTV4NSwgY2c6IFwiY2ctMjYwXCIsIGJvYXJkOiBcImdyaWQ1eDVcIiwgQm9hcmRDU1M6IFtcIjV4NWFcIiwgXCI1eDViXCIsIFwiNXg1Y1wiXSwgcGllY2VzOiBcInNob2dpXCIsIFBpZWNlQ1NTOiBbXCJzaG9naTBrXCIsIFwic2hvZ2kwXCIsIFwic2hvZ2kwd1wiLCBcInNob2dpMHBcIl0sIGljb246IFwiNlwiLCBiYXNlVVJMOiBbXCJzaG9naS9jdGtcIiwgXCJzaG9naVwiLCBcInNob2dpL2N0d1wiLCBcInNob2dpL2N0cFwiXSB9LFxyXG4gICAgeGlhbmdxaTogeyBnZW9tOiBHZW9tZXRyeS5kaW05eDEwLCBjZzogXCJjZy01NzYtNjQwXCIsIGJvYXJkOiBcInJpdmVyXCIsIEJvYXJkQ1NTOiBbXCI5eDEwYVwiLCBcIjl4MTBiXCIsIFwiOXgxMGNcIiwgXCI5eDEwZFwiLCBcIjl4MTBlXCJdLCBwaWVjZXM6IFwieGlhbmdxaVwiLCBQaWVjZUNTUzogW1wieGlhbmdxaVwiLCBcInhpYW5ncWllXCIsIFwieGlhbmdxaWN0MlwiLCBcInhpYW5ncWlobnpcIl0sIGljb246IFwiT1wiIH0sXHJcbiAgICBwbGFjZW1lbnQ6IHsgZ2VvbTogR2VvbWV0cnkuZGltOHg4LCBjZzogXCJjZy01MTJcIiwgYm9hcmQ6IFwiYm9hcmQ4eDhcIiwgQm9hcmRDU1M6IFtcIjh4OGJyb3duXCIsIFwiOHg4Ymx1ZVwiLCBcIjh4OGdyZWVuXCIsIFwiOHg4bWFwbGVcIiwgXCI4eDhvbGl2ZVwiXSwgcGllY2VzOiBcInN0YW5kYXJkXCIsIFBpZWNlQ1NTOiBbXCJzdGFuZGFyZFwiLCBcImdyZWVuXCIsIFwiYWxwaGFcIl0sIGljb246IFwiU1wiLCBiYXNlVVJMOiBbXCJtZXJpZGFcIiwgXCJncmVlblwiLCBcImFscGhhXCJdIH0sXHJcbiAgICBjcmF6eWhvdXNlOiB7IGdlb206IEdlb21ldHJ5LmRpbTh4OCwgY2c6IFwiY2ctNTEyXCIsIGJvYXJkOiBcImJvYXJkOHg4XCIsIEJvYXJkQ1NTOiBbXCI4eDhicm93blwiLCBcIjh4OGJsdWVcIiwgXCI4eDhncmVlblwiLCBcIjh4OG1hcGxlXCIsIFwiOHg4b2xpdmVcIl0sIHBpZWNlczogXCJzdGFuZGFyZFwiLCBQaWVjZUNTUzogW1wic3RhbmRhcmRcIiwgXCJncmVlblwiLCBcImFscGhhXCJdLCBpY29uOiBcIkhcIiwgYmFzZVVSTDogW1wibWVyaWRhXCIsIFwiZ3JlZW5cIiwgXCJhbHBoYVwiXSB9LFxyXG4gICAgY2FwYWJsYW5jYTogeyBnZW9tOiBHZW9tZXRyeS5kaW0xMHg4LCBjZzogXCJjZy02NDBcIiwgYm9hcmQ6IFwiYm9hcmQxMHg4XCIsIEJvYXJkQ1NTOiBbXCIxMHg4YnJvd25cIiwgXCIxMHg4Ymx1ZVwiLCBcIjEweDhncmVlblwiLCBcIjEweDhtYXBsZVwiLCBcIjEweDhvbGl2ZVwiXSwgcGllY2VzOiBcImNhcGFcIiwgUGllY2VDU1M6IFtcImNhcGEwXCIsIFwiY2FwYTFcIiwgXCJjYXBhMlwiLCBcImNhcGEzXCJdLCBpY29uOiBcIlBcIiB9LFxyXG4gICAgY2FwYWhvdXNlOiB7IGdlb206IEdlb21ldHJ5LmRpbTEweDgsIGNnOiBcImNnLTY0MFwiLCBib2FyZDogXCJib2FyZDEweDhcIiwgQm9hcmRDU1M6IFtcIjEweDhicm93blwiLCBcIjEweDhibHVlXCIsIFwiMTB4OGdyZWVuXCIsIFwiMTB4OG1hcGxlXCIsIFwiMTB4OG9saXZlXCJdLCBwaWVjZXM6IFwiY2FwYVwiLCBQaWVjZUNTUzogW1wiY2FwYTBcIiwgXCJjYXBhMVwiLCBcImNhcGEyXCIsIFwiY2FwYTNcIl0sIGljb246IFwiUFwiLCBiYXNlVVJMOiBbXCJjYXBhXCIsIFwic2VpclwiLCBcImdyZWVuXCIsIFwibXVza1wiXSB9LFxyXG4gICAgZ290aGljOiB7IGdlb206IEdlb21ldHJ5LmRpbTEweDgsIGNnOiBcImNnLTY0MFwiLCBib2FyZDogXCJib2FyZDEweDhcIiwgQm9hcmRDU1M6IFtcIjEweDhicm93blwiLCBcIjEweDhibHVlXCIsIFwiMTB4OGdyZWVuXCIsIFwiMTB4OG1hcGxlXCIsIFwiMTB4OG9saXZlXCJdLCBwaWVjZXM6IFwiY2FwYVwiLCBQaWVjZUNTUzogW1wiY2FwYTBcIiwgXCJjYXBhMVwiLCBcImNhcGEyXCIsIFwiY2FwYTNcIl0sIGljb246IFwiUFwiIH0sXHJcbiAgICBnb3RoaG91c2U6IHsgZ2VvbTogR2VvbWV0cnkuZGltMTB4OCwgY2c6IFwiY2ctNjQwXCIsIGJvYXJkOiBcImJvYXJkMTB4OFwiLCBCb2FyZENTUzogW1wiMTB4OGJyb3duXCIsIFwiMTB4OGJsdWVcIiwgXCIxMHg4Z3JlZW5cIiwgXCIxMHg4bWFwbGVcIiwgXCIxMHg4b2xpdmVcIl0sIHBpZWNlczogXCJjYXBhXCIsIFBpZWNlQ1NTOiBbXCJjYXBhMFwiLCBcImNhcGExXCIsIFwiY2FwYTJcIiwgXCJjYXBhM1wiXSwgaWNvbjogXCJQXCIsIGJhc2VVUkw6IFtcImNhcGFcIiwgXCJzZWlyXCIsIFwiZ3JlZW5cIiwgXCJtdXNrXCJdIH0sXHJcbiAgICBncmFuZDogeyBnZW9tOiBHZW9tZXRyeS5kaW0xMHgxMCwgY2c6IFwiY2ctNjQwLTY0MFwiLCBib2FyZDogXCJib2FyZDEweDEwXCIsIEJvYXJkQ1NTOiBbXCIxMHgxMGJyb3duXCIsIFwiMTB4MTBibHVlXCIsIFwiMTB4MTBncmVlblwiLCBcIjEweDEwbWFwbGVcIiwgXCIxMHgxMG9saXZlXCJdLCBwaWVjZXM6IFwiY2FwYVwiLCBQaWVjZUNTUzogW1wiY2FwYTBcIiwgXCJjYXBhMVwiLCBcImNhcGEyXCIsIFwiY2FwYTNcIl0sIGljb246IFwiR1wiIH0sXHJcbiAgICBncmFuZGhvdXNlOiB7IGdlb206IEdlb21ldHJ5LmRpbTEweDEwLCBjZzogXCJjZy02NDAtNjQwXCIsIGJvYXJkOiBcImJvYXJkMTB4MTBcIiwgQm9hcmRDU1M6IFtcIjEweDEwYnJvd25cIiwgXCIxMHgxMGJsdWVcIiwgXCIxMHgxMGdyZWVuXCIsIFwiMTB4MTBtYXBsZVwiLCBcIjEweDEwb2xpdmVcIl0sIHBpZWNlczogXCJjYXBhXCIsIFBpZWNlQ1NTOiBbXCJjYXBhMFwiLCBcImNhcGExXCIsIFwiY2FwYTJcIiwgXCJjYXBhM1wiXSwgaWNvbjogXCJHXCIsIGJhc2VVUkw6IFtcImNhcGFcIiwgXCJzZWlyXCIsIFwiZ3JlZW5cIiwgXCJtdXNrXCJdIH0sXHJcbiAgICBzZWlyYXdhbjogeyBnZW9tOiBHZW9tZXRyeS5kaW04eDgsIGNnOiBcImNnLTUxMlwiLCBib2FyZDogXCJib2FyZDh4OFwiLCBCb2FyZENTUzogW1wiOHg4YnJvd25cIiwgXCI4eDhibHVlXCIsIFwiOHg4Z3JlZW5cIiwgXCI4eDhtYXBsZVwiLCBcIjh4OG9saXZlXCJdLCBwaWVjZXM6IFwic2VpcmF3YW5cIiwgUGllY2VDU1M6IFtcInNlaXIxXCIsIFwic2VpcjBcIiwgXCJzZWlyMlwiLCBcInNlaXIzXCJdLCBpY29uOiBcIkxcIiwgYmFzZVVSTDogW1wic2VpclwiLCBcImNhcGFcIiwgXCJncmVlblwiLCBcIm11c2tcIl0gfSxcclxuICAgIHNob3VzZTogeyBnZW9tOiBHZW9tZXRyeS5kaW04eDgsIGNnOiBcImNnLTUxMlwiLCBib2FyZDogXCJib2FyZDh4OFwiLCBCb2FyZENTUzogW1wiOHg4YnJvd25cIiwgXCI4eDhibHVlXCIsIFwiOHg4Z3JlZW5cIiwgXCI4eDhtYXBsZVwiLCBcIjh4OG9saXZlXCJdLCBwaWVjZXM6IFwic2VpcmF3YW5cIiwgUGllY2VDU1M6IFtcInNlaXIxXCIsIFwic2VpcjBcIiwgXCJzZWlyMlwiLCBcInNlaXIzXCJdLCBpY29uOiBcIkxcIiwgYmFzZVVSTDogW1wic2VpclwiLCBcImNhcGFcIiwgXCJncmVlblwiLCBcIm11c2tcIl0gfSxcclxuICAgIHN0YW5kYXJkOiB7IGdlb206IEdlb21ldHJ5LmRpbTh4OCwgY2c6IFwiY2ctNTEyXCIsIGJvYXJkOiBcImJvYXJkOHg4XCIsIEJvYXJkQ1NTOiBbXCI4eDhicm93blwiLCBcIjh4OGJsdWVcIiwgXCI4eDhncmVlblwiLCBcIjh4OG1hcGxlXCIsIFwiOHg4b2xpdmVcIl0sIHBpZWNlczogXCJzdGFuZGFyZFwiLCBQaWVjZUNTUzogW1wic3RhbmRhcmRcIiwgXCJncmVlblwiLCBcImFscGhhXCJdLCBpY29uOiBcIk1cIiB9LFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcG9ja2V0Um9sZXModmFyaWFudDogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKHZhcmlhbnQpIHtcclxuICAgIGNhc2UgXCJzaXR0dXlpblwiOlxyXG4gICAgICAgIHJldHVybiBbXCJyb29rXCIsIFwia25pZ2h0XCIsIFwic2lsdmVyXCIsIFwiZmVyelwiLCBcImtpbmdcIl07XHJcbiAgICBjYXNlIFwiY3Jhenlob3VzZVwiOlxyXG4gICAgICAgIHJldHVybiBbXCJwYXduXCIsIFwia25pZ2h0XCIsIFwiYmlzaG9wXCIsIFwicm9va1wiLCBcInF1ZWVuXCJdO1xyXG4gICAgY2FzZSBcImdyYW5kaG91c2VcIjpcclxuICAgIGNhc2UgXCJnb3RoaG91c2VcIjpcclxuICAgIGNhc2UgXCJjYXBhaG91c2VcIjpcclxuICAgICAgICByZXR1cm4gW1wicGF3blwiLCBcImtuaWdodFwiLCBcImJpc2hvcFwiLCBcInJvb2tcIiwgXCJxdWVlblwiLCBcImFyY2hiaXNob3BcIiwgXCJjYW5jZWxsb3JcIl07XHJcbiAgICBjYXNlIFwic2hvZ2lcIjpcclxuICAgICAgICByZXR1cm4gW1wicGF3blwiLCBcImxhbmNlXCIsIFwia25pZ2h0XCIsIFwiYmlzaG9wXCIsIFwicm9va1wiLCBcInNpbHZlclwiLCBcImdvbGRcIl07XHJcbiAgICBjYXNlIFwibWluaXNob2dpXCI6XHJcbiAgICAgICAgcmV0dXJuIFtcInBhd25cIiwgXCJiaXNob3BcIiwgXCJyb29rXCIsIFwic2lsdmVyXCIsIFwiZ29sZFwiXTtcclxuICAgIGNhc2UgXCJzaG91c2VcIjpcclxuICAgICAgICByZXR1cm4gW1wicGF3blwiLCBcImtuaWdodFwiLCBcImJpc2hvcFwiLCBcInJvb2tcIiwgXCJxdWVlblwiLCBcImVsZXBoYW50XCIsIFwiaGF3a1wiXTtcclxuICAgIGNhc2UgXCJzZWlyYXdhblwiOlxyXG4gICAgICAgIHJldHVybiBbXCJlbGVwaGFudFwiLCBcImhhd2tcIl07XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBbXCJyb29rXCIsIFwia25pZ2h0XCIsIFwiYmlzaG9wXCIsIFwicXVlZW5cIiwgXCJraW5nXCJdO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9tb3Rpb25ab25lKHZhcmlhbnQ6IHN0cmluZywgY29sb3I6IHN0cmluZykge1xyXG4gICAgc3dpdGNoICh2YXJpYW50KSB7XHJcbiAgICBjYXNlICdzaG9naSc6XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gJ2E5YjljOWQ5ZTlmOWc5aDlpOWE4YjhjOGQ4ZThmOGc4aDhpOGE3YjdjN2Q3ZTdmN2c3aDdpNycgOiAnYTFiMWMxZDFlMWYxZzFoMWkxYTJiMmMyZDJlMmYyZzJoMmkyYTNiM2MzZDNlM2YzZzNoM2kzJztcclxuICAgIGNhc2UgJ21pbmlzaG9naSc6XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gJ2E1YjVjNWQ1ZTUnIDogJ2ExYjFjMWQxZTEnO1xyXG4gICAgY2FzZSAnY2FtYm9kaWFuJzpcclxuICAgIGNhc2UgJ21ha3J1ayc6XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gJ2E2YjZjNmQ2ZTZmNmc2aDYnIDogJ2EzYjNjM2QzZTNmM2czaDMnO1xyXG4gICAgY2FzZSAnc2l0dHV5aW4nOlxyXG4gICAgICAgIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/ICdhOGI3YzZkNWU1ZjZnN2g4JyA6ICdhMWIyYzNkNGU0ZjNnMmgxJztcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gJ2E4YjhjOGQ4ZThmOGc4aDhpOGo4JyA6ICdhMWIxYzFkMWUxZjFnMWgxaTFqMSc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9tb3Rpb25Sb2xlcyh2YXJpYW50OiBzdHJpbmcsIHJvbGU6IFJvbGUsIG9yaWc6IEtleSwgZGVzdDogS2V5LCBwcm9tb3Rpb25zKSB7XHJcbiAgICBzd2l0Y2ggKHZhcmlhbnQpIHtcclxuICAgIGNhc2UgXCJnb3RoaWNcIjpcclxuICAgIGNhc2UgXCJnb3RoaG91c2VcIjpcclxuICAgIGNhc2UgXCJjYXBhaG91c2VcIjpcclxuICAgIGNhc2UgXCJjYXBhYmxhbmNhXCI6XHJcbiAgICAgICAgcmV0dXJuIFtcInF1ZWVuXCIsIFwia25pZ2h0XCIsIFwicm9va1wiLCBcImJpc2hvcFwiLCBcImFyY2hiaXNob3BcIiwgXCJjYW5jZWxsb3JcIl07XHJcbiAgICBjYXNlIFwic2hvdXNlXCI6XHJcbiAgICBjYXNlIFwic2VpcmF3YW5cIjpcclxuICAgICAgICByZXR1cm4gW1wicXVlZW5cIiwgXCJrbmlnaHRcIiwgXCJyb29rXCIsIFwiYmlzaG9wXCIsIFwiZWxlcGhhbnRcIiwgXCJoYXdrXCJdO1xyXG4gICAgY2FzZSBcIm1pbmlzaG9naVwiOlxyXG4gICAgY2FzZSBcInNob2dpXCI6XHJcbiAgICAgICAgcmV0dXJuIFtcInBcIiArIHJvbGUsIHJvbGVdO1xyXG4gICAgY2FzZSBcImdyYW5kaG91c2VcIjpcclxuICAgIGNhc2UgXCJncmFuZFwiOlxyXG4gICAgICAgIHZhciByb2xlczogUm9sZVtdID0gW107XHJcbiAgICAgICAgY29uc3QgbW92ZXMgPSBwcm9tb3Rpb25zLm1hcCgobW92ZSkgPT4gbW92ZS5zbGljZSgwLCAtMSkpO1xyXG4gICAgICAgIHByb21vdGlvbnMuZm9yRWFjaCgobW92ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9sZSA9IHNhblRvUm9sZVttb3ZlLnNsaWNlKC0xKV07XHJcbiAgICAgICAgICAgIGlmIChtb3Zlcy5pbmRleE9mKG9yaWcgKyBkZXN0KSAhPT0gLTEgJiYgcm9sZXMuaW5kZXhPZihwcm9sZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByb2xlcy5wdXNoKHByb2xlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHByb21vdGlvbiBpcyBvcHRpb25hbCBleGNlcHQgb24gYmFjayByYW5rc1xyXG4gICAgICAgIGlmICgoZGVzdFsxXSAhPT0gXCI5XCIpICYmIChkZXN0WzFdICE9PSBcIjBcIikpIHJvbGVzLnB1c2gocm9sZSk7XHJcbiAgICAgICAgcmV0dXJuIHJvbGVzO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gW1wicXVlZW5cIiwgXCJrbmlnaHRcIiwgXCJyb29rXCIsIFwiYmlzaG9wXCJdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFuZGF0b3J5UHJvbW90aW9uKHZhcmlhbnQsIHJvbGU6IFJvbGUsIGRlc3Q6IEtleSwgY29sb3I6IENvbG9yKSB7XHJcbiAgICBpZiAodmFyaWFudCA9PT0gXCJtaW5pc2hvZ2lcIiAmJiByb2xlID09PSBcInBhd25cIikge1xyXG4gICAgICAgIGlmIChjb2xvciA9PT0gXCJ3aGl0ZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0WzFdID09PSBcIjVcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdFsxXSA9PT0gXCIxXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAocm9sZSkge1xyXG4gICAgY2FzZSBcInBhd25cIjpcclxuICAgIGNhc2UgXCJsYW5jZVwiOlxyXG4gICAgICAgIGlmIChjb2xvciA9PT0gXCJ3aGl0ZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0WzFdID09PSBcIjlcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdFsxXSA9PT0gXCIxXCI7XHJcbiAgICAgICAgfVxyXG4gICAgY2FzZSBcImtuaWdodFwiOlxyXG4gICAgICAgIGlmIChjb2xvciA9PT0gXCJ3aGl0ZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0WzFdID09PSBcIjlcIiB8fCBkZXN0WzFdID09PSBcIjhcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdFsxXSA9PT0gXCIxXCIgfHwgZGVzdFsxXSA9PT0gXCIyXCI7XHJcbiAgICAgICAgfVxyXG4gICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZWVkUG9ja2V0cyh2YXJpYW50OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB2YXJpYW50ID09PSAncGxhY2VtZW50JyB8fCB2YXJpYW50ID09PSAnY3Jhenlob3VzZScgfHwgdmFyaWFudCA9PT0gJ3NpdHR1eWluJyB8fCB2YXJpYW50LmVuZHNXaXRoKCdzaG9naScpIHx8IHZhcmlhbnQgPT09ICdzZWlyYXdhbicgfHwgdmFyaWFudCA9PT0gJ2NhcGFob3VzZScgfHwgdmFyaWFudCA9PT0gJ3Nob3VzZScgfHwgdmFyaWFudCA9PT0gJ2dyYW5kaG91c2UnIHx8IHZhcmlhbnQgPT09IFwiZ290aGhvdXNlXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBoYXNFcCh2YXJpYW50OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB2YXJpYW50ID09PSAnc3RhbmRhcmQnIHx8IHZhcmlhbnQgPT09ICdwbGFjZW1lbnQnIHx8IHZhcmlhbnQgPT09ICdjcmF6eWhvdXNlJyB8fCB2YXJpYW50ID09PSAnY2FwYWJsYW5jYScgfHwgdmFyaWFudCA9PT0gJ3NlaXJhd2FuJyB8fCB2YXJpYW50ID09PSAnY2FwYWhvdXNlJyB8fCB2YXJpYW50ID09PSAnc2hvdXNlJyB8fCB2YXJpYW50ID09PSAnZ3JhbmQnIHx8IHZhcmlhbnQgPT09ICdncmFuZGhvdXNlJyB8fCB2YXJpYW50ID09PSBcImdvdGhpY1wiIHx8IHZhcmlhbnQgPT09IFwiZ290aGhvdXNlXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRpZmYoYTogbnVtYmVyLCBiOm51bWJlcik6bnVtYmVyIHtcclxuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkaWFnb25hbE1vdmUocG9zMSwgcG9zMikge1xyXG4gICAgY29uc3QgeGQgPSBkaWZmKHBvczFbMF0sIHBvczJbMF0pO1xyXG4gICAgY29uc3QgeWQgPSBkaWZmKHBvczFbMV0sIHBvczJbMV0pO1xyXG4gICAgcmV0dXJuIHhkID09PSB5ZCAmJiB4ZCA9PT0gMTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbkdhdGUoZmVuLCBwaWVjZSwgb3JpZykge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCIgICBpc0dhdGluZygpXCIsIGZlbiwgcGllY2UsIG9yaWcpO1xyXG4gICAgY29uc3Qgbm9fZ2F0ZSA9IFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXVxyXG4gICAgaWYgKChwaWVjZS5jb2xvciA9PT0gXCJ3aGl0ZVwiICYmIG9yaWcuc2xpY2UoMSkgIT09IFwiMVwiKSB8fFxyXG4gICAgICAgIChwaWVjZS5jb2xvciA9PT0gXCJibGFja1wiICYmIG9yaWcuc2xpY2UoMSkgIT09IFwiOFwiKSB8fFxyXG4gICAgICAgIChwaWVjZS5yb2xlID09PSBcImhhd2tcIikgfHxcclxuICAgICAgICAocGllY2Uucm9sZSA9PT0gXCJlbGVwaGFudFwiKSkgcmV0dXJuIG5vX2dhdGU7XHJcblxyXG4gICAgLy8gSW4gc3RhcnRpbmcgcG9zaXRpb24ga2luZyBhbmQoISkgcm9vayB2aXJnaW5pdHkgaXMgZW5jb2RlZCBpbiBLUWtxXHJcbiAgICAvLyBcInJuYnFrYm5yL3BwcHBwcHBwLzgvOC84LzgvUFBQUFBQUFAvUk5CUUtCTlJbSEVoZV0gdyBLUUJDREZHa3FiY2RmZyAtIDAgMVwiXHJcblxyXG4gICAgLy8gYnV0IGFmdGVyIGtpbmdzIG1vdmVkIHJvb2sgdmlyZ2luaXR5IGlzIGVuY29kZWQgaW4gQUhhaFxyXG4gICAgLy8gcm5icTFibnIvcHBwcGtwcHAvOC80cDMvNFAzLzgvUFBQUEtQUFAvUk5CUTFCTlJbSEVoZV0gdyBBQkNERkdIYWJjZGZnaCAtIDIgM1xyXG5cclxuICAgIC8vIGtpbmcgdmlyZ2luaXR5IGlzIGVuY29kZWQgaW4gRWUgYWZ0ZXIgYW55IFJvb2sgbW92ZWQgYnV0IEtpbmcgbm90XHJcblxyXG4gICAgY29uc3QgcGFydHMgPSBmZW4uc3BsaXQoXCIgXCIpO1xyXG4gICAgY29uc3QgcGxhY2VtZW50ID0gcGFydHNbMF07XHJcbiAgICBjb25zdCBjb2xvciA9IHBhcnRzWzFdO1xyXG4gICAgY29uc3QgY2FzdGwgPSBwYXJ0c1syXTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiaXNHYXRpbmcoKVwiLCBvcmlnLCBwbGFjZW1lbnQsIGNvbG9yLCBjYXN0bCk7XHJcbiAgICBzd2l0Y2ggKG9yaWcpIHtcclxuICAgIGNhc2UgXCJhMVwiOlxyXG4gICAgICAgIGlmIChjYXN0bC5pbmRleE9mKFwiQVwiKSA9PT0gLTEgJiYgY2FzdGwuaW5kZXhPZihcIlFcIikgPT09IC0xKSByZXR1cm4gbm9fZ2F0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJiMVwiOlxyXG4gICAgICAgIGlmIChjYXN0bC5pbmRleE9mKFwiQlwiKSA9PT0gLTEpIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImMxXCI6XHJcbiAgICAgICAgaWYgKGNhc3RsLmluZGV4T2YoXCJDXCIpID09PSAtMSkgcmV0dXJuIG5vX2dhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIFwiZDFcIjpcclxuICAgICAgICBpZiAoY2FzdGwuaW5kZXhPZihcIkRcIikgPT09IC0xKSByZXR1cm4gbm9fZ2F0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJlMVwiOlxyXG4gICAgICAgIGlmIChwaWVjZS5yb2xlICE9PSBcImtpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gbm9fZ2F0ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKChjYXN0bC5pbmRleE9mKFwiS1wiKSA9PT0gLTEpICYmIChjYXN0bC5pbmRleE9mKFwiUVwiKSA9PT0gLTEpICYmIChjYXN0bC5pbmRleE9mKFwiRVwiKSA9PT0gLTEpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIFwiZjFcIjpcclxuICAgICAgICBpZiAoY2FzdGwuaW5kZXhPZihcIkZcIikgPT09IC0xKSByZXR1cm4gbm9fZ2F0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJnMVwiOlxyXG4gICAgICAgIGlmIChjYXN0bC5pbmRleE9mKFwiR1wiKSA9PT0gLTEpIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImgxXCI6XHJcbiAgICAgICAgaWYgKGNhc3RsLmluZGV4T2YoXCJIXCIpID09PSAtMSAmJiBjYXN0bC5pbmRleE9mKFwiS1wiKSA9PT0gLTEpIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImE4XCI6XHJcbiAgICAgICAgaWYgKGNhc3RsLmluZGV4T2YoXCJhXCIpID09PSAtMSAmJiBjYXN0bC5pbmRleE9mKFwicVwiKSA9PT0gLTEpIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImI4XCI6XHJcbiAgICAgICAgaWYgKGNhc3RsLmluZGV4T2YoXCJiXCIpID09PSAtMSkgcmV0dXJuIG5vX2dhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIFwiYzhcIjpcclxuICAgICAgICBpZiAoY2FzdGwuaW5kZXhPZihcImNcIikgPT09IC0xKSByZXR1cm4gbm9fZ2F0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJkOFwiOlxyXG4gICAgICAgIGlmIChjYXN0bC5pbmRleE9mKFwiZFwiKSA9PT0gLTEpIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImU4XCI6XHJcbiAgICAgICAgaWYgKHBpZWNlLnJvbGUgIT09IFwia2luZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKGNhc3RsLmluZGV4T2YoXCJrXCIpID09PSAtMSkgJiYgKGNhc3RsLmluZGV4T2YoXCJxXCIpID09PSAtMSkgJiYgKGNhc3RsLmluZGV4T2YoXCJlXCIpID09PSAtMSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5vX2dhdGU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJmOFwiOlxyXG4gICAgICAgIGlmIChjYXN0bC5pbmRleE9mKFwiZlwiKSA9PT0gLTEpIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImc4XCI6XHJcbiAgICAgICAgaWYgKGNhc3RsLmluZGV4T2YoXCJnXCIpID09PSAtMSkgcmV0dXJuIG5vX2dhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIFwiaDhcIjpcclxuICAgICAgICBpZiAoY2FzdGwuaW5kZXhPZihcImhcIikgPT09IC0xICYmIGNhc3RsLmluZGV4T2YoXCJrXCIpID09PSAtMSkgcmV0dXJuIG5vX2dhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgYnJhY2tldFBvcyA9IHBsYWNlbWVudC5pbmRleE9mKFwiW1wiKTtcclxuICAgIGNvbnN0IHBvY2tldHMgPSBwbGFjZW1lbnQuc2xpY2UoYnJhY2tldFBvcyk7XHJcbiAgICBjb25zdCBwaCA9IGxjKHBvY2tldHMsIFwiaFwiLCBjb2xvcj09PSd3JykgIT09IDA7XHJcbiAgICBjb25zdCBwZSA9IGxjKHBvY2tldHMsIFwiZVwiLCBjb2xvcj09PSd3JykgIT09IDA7XHJcbiAgICBjb25zdCBwcSA9IGxjKHBvY2tldHMsIFwicVwiLCBjb2xvcj09PSd3JykgIT09IDA7XHJcbiAgICBjb25zdCBwciA9IGxjKHBvY2tldHMsIFwiclwiLCBjb2xvcj09PSd3JykgIT09IDA7XHJcbiAgICBjb25zdCBwYiA9IGxjKHBvY2tldHMsIFwiYlwiLCBjb2xvcj09PSd3JykgIT09IDA7XHJcbiAgICBjb25zdCBwbiA9IGxjKHBvY2tldHMsIFwiblwiLCBjb2xvcj09PSd3JykgIT09IDA7XHJcblxyXG4gICAgcmV0dXJuIFtwaCwgcGUsIHBxLCBwciwgcGIsIHBuXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvbW90aW9uKHZhcmlhbnQsIHBpZWNlLCBvcmlnLCBkZXN0LCBtZXRhLCBwcm9tb3Rpb25zKSB7XHJcbiAgICBpZiAodmFyaWFudCA9PT0gJ3hpYW5ncWknKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBweiA9IHByb21vdGlvblpvbmUodmFyaWFudCwgcGllY2UuY29sb3IpXHJcbiAgICBzd2l0Y2ggKHZhcmlhbnQpIHtcclxuICAgIGNhc2UgJ3Nob2dpJzpcclxuICAgICAgICByZXR1cm4gWydraW5nJywgJ2dvbGQnLCAncHBhd24nLCAncGtuaWdodCcsICdwYmlzaG9wJywgJ3Byb29rJywgJ3BzaWx2ZXInLCAncGxhbmNlJ10uaW5kZXhPZihwaWVjZS5yb2xlKSA9PT0gLTFcclxuICAgICAgICAgICAgJiYgKHB6LmluZGV4T2Yob3JpZykgIT09IC0xIHx8IHB6LmluZGV4T2YoZGVzdCkgIT09IC0xKTtcclxuICAgIGNhc2UgJ21pbmlzaG9naSc6XHJcbiAgICAgICAgcmV0dXJuIFsna2luZycsICdnb2xkJywgJ3BwYXduJywgJ3BiaXNob3AnLCAncHJvb2snLCAncHNpbHZlciddLmluZGV4T2YocGllY2Uucm9sZSkgPT09IC0xXHJcbiAgICAgICAgICAgICYmIChwei5pbmRleE9mKG9yaWcpICE9PSAtMSB8fCBwei5pbmRleE9mKGRlc3QpICE9PSAtMSk7XHJcbiAgICBjYXNlICdzaXR0dXlpbic6XHJcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vdmRvY3VtZW50cy5uZXQvaG93LXRvLXBsYXktbXlhbm1hci10cmFkaXRpb25hbC1jaGVzcy1lbmctYm9vay0xLmh0bWxcclxuICAgICAgICBjb25zdCBmaXJzdFJhbmtJczAgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBkbSA9IGRpYWdvbmFsTW92ZShrZXkycG9zKG9yaWcsIGZpcnN0UmFua0lzMCksIGtleTJwb3MoZGVzdCwgZmlyc3RSYW5rSXMwKSk7XHJcbiAgICAgICAgcmV0dXJuIHBpZWNlLnJvbGUgPT09IFwicGF3blwiICYmICggb3JpZyA9PT0gZGVzdCB8fCAoIW1ldGEuY2FwdHVyZWQgJiYgZG0pKTtcclxuICAgIGNhc2UgJ2dyYW5kaG91c2UnOlxyXG4gICAgY2FzZSAnZ3JhbmQnOlxyXG4gICAgICAgIC8vIFRPRE86IHdlIGNhbiB1c2UgdGhpcyBmb3Igb3RoZXIgdmFyaWFudHMgYWxzb1xyXG4gICAgICAgIHJldHVybiBwcm9tb3Rpb25zLm1hcCgobW92ZSkgPT4gbW92ZS5zbGljZSgwLCAtMSkpLmluZGV4T2Yob3JpZyArIGRlc3QpICE9PSAtMTtcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHBpZWNlLnJvbGUgPT09IFwicGF3blwiICYmIHB6LmluZGV4T2YoZGVzdCkgIT09IC0xO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdWNpMnVzaShtb3ZlKSB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IG1vdmUuc3BsaXQoXCJcIik7XHJcbiAgICBpZiAocGFydHNbMV0gPT09IFwiQFwiKSB7XHJcbiAgICAgICAgcGFydHNbMV0gPSBcIipcIjtcclxuICAgICAgICBwYXJ0c1syXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFydHNbMl0uY2hhckNvZGVBdCgpIC0gNDgpXHJcbiAgICAgICAgcGFydHNbM10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnRzWzNdLmNoYXJDb2RlQXQoKSArIDQ4KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBwYXJ0c1swXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFydHNbMF0uY2hhckNvZGVBdCgpIC0gNDgpXHJcbiAgICAgICAgcGFydHNbMV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnRzWzFdLmNoYXJDb2RlQXQoKSArIDQ4KVxyXG4gICAgICAgIHBhcnRzWzJdID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJ0c1syXS5jaGFyQ29kZUF0KCkgLSA0OClcclxuICAgICAgICBwYXJ0c1szXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFydHNbM10uY2hhckNvZGVBdCgpICsgNDgpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVzaTJ1Y2kobW92ZSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJ1c2kydWNpKClcIiwgbW92ZSk7XHJcbiAgICBjb25zdCBwYXJ0cyA9IG1vdmUuc3BsaXQoXCJcIik7XHJcbiAgICBpZiAocGFydHNbMV0gPT09IFwiKlwiKSB7XHJcbiAgICAgICAgcGFydHNbMV0gPSBcIkBcIjtcclxuICAgICAgICBwYXJ0c1syXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFydHNbMl0uY2hhckNvZGVBdCgpICsgNDgpXHJcbiAgICAgICAgcGFydHNbM10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnRzWzNdLmNoYXJDb2RlQXQoKSAtIDQ4KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBwYXJ0c1swXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFydHNbMF0uY2hhckNvZGVBdCgpICsgNDgpXHJcbiAgICAgICAgcGFydHNbMV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnRzWzFdLmNoYXJDb2RlQXQoKSAtIDQ4KVxyXG4gICAgICAgIHBhcnRzWzJdID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJ0c1syXS5jaGFyQ29kZUF0KCkgKyA0OClcclxuICAgICAgICBwYXJ0c1szXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFydHNbM10uY2hhckNvZGVBdCgpIC0gNDgpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHplcm8yZ3JhbmQobW92ZSkge1xyXG4gICAgY29uc3QgcGFydHMgPSBtb3ZlLnNwbGl0KFwiXCIpO1xyXG4gICAgaWYgKHBhcnRzWzFdICE9PSBcIkBcIikge1xyXG4gICAgICAgIHBhcnRzWzFdID0gU3RyaW5nKE51bWJlcihwYXJ0c1sxXSkgKyAxKTtcclxuICAgIH1cclxuICAgIHBhcnRzWzNdID0gU3RyaW5nKE51bWJlcihwYXJ0c1szXSkgKyAxKTtcclxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ3JhbmQyemVybyhtb3ZlKSB7XHJcbiAgICAvLyBjdXQgb2ZmIHByb21vdGlvbiBwaWVjZSBsZXR0ZXJcclxuICAgIHZhciBwcm9tbyA9ICcnO1xyXG4gICAgaWYgKCcwMTIzNDU2Nzg5Jy5pbmRleE9mKG1vdmUuc2xpY2UoLTEpKSA9PT0gLTEpIHtcclxuICAgICAgICBwcm9tbyA9IG1vdmUuc2xpY2UoLTEpO1xyXG4gICAgICAgIG1vdmUgPSBtb3ZlLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhcnRzID0gbW92ZS5zcGxpdChcIlwiKTtcclxuXHJcbiAgICBpZiAocGFydHNbMV0gPT09ICdAJykge1xyXG4gICAgICAgIHJldHVybiBwYXJ0c1swXSArIHBhcnRzWzFdICsgcGFydHNbMl0gKyBTdHJpbmcoTnVtYmVyKG1vdmUuc2xpY2UoMykpIC0gMSk7XHJcbiAgICB9XHJcbiAgICBpZiAoJzAxMjM0NTY3ODknLmluZGV4T2YocGFydHNbMl0pICE9PSAtMSkge1xyXG4gICAgICAgIHBhcnRzWzFdID0gU3RyaW5nKE51bWJlcihwYXJ0c1sxXSArIHBhcnRzWzJdKSAtMSk7XHJcbiAgICAgICAgcGFydHNbNF0gPSBTdHJpbmcoTnVtYmVyKG1vdmUuc2xpY2UoNCkpIC0gMSk7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRzWzBdICsgcGFydHNbMV0gKyBwYXJ0c1szXSArIHBhcnRzWzRdICsgcHJvbW87XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcnRzWzFdID0gU3RyaW5nKE51bWJlcihwYXJ0c1sxXSkgLTEpO1xyXG4gICAgICAgIHBhcnRzWzNdID0gU3RyaW5nKE51bWJlcihtb3ZlLnNsaWNlKDMpKSAtIDEpO1xyXG4gICAgICAgIHJldHVybiBwYXJ0c1swXSArIHBhcnRzWzFdICsgcGFydHNbMl0gKyBwYXJ0c1szXSArIHByb21vO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgcm9sZVRvU2FuID0ge1xyXG4gICAgcGF3bjogJ1AnLFxyXG4gICAga25pZ2h0OiAnTicsXHJcbiAgICBiaXNob3A6ICdCJyxcclxuICAgIHJvb2s6ICdSJyxcclxuICAgIHF1ZWVuOiAnUScsXHJcbiAgICBraW5nOiAnSycsXHJcbiAgICBhcmNoYmlzaG9wOiAnQScsXHJcbiAgICBjYW5jZWxsb3I6ICdDJyxcclxuICAgIGVsZXBoYW50OiBcIkVcIixcclxuICAgIGhhd2s6IFwiSFwiLFxyXG4gICAgZmVyejogJ0YnLFxyXG4gICAgbWV0OiAnTScsXHJcbiAgICBnb2xkOiAnRycsXHJcbiAgICBzaWx2ZXI6ICdTJyxcclxuICAgIGxhbmNlOiAnTCcsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgc2FuVG9Sb2xlID0ge1xyXG4gICAgUDogJ3Bhd24nLFxyXG4gICAgTjogJ2tuaWdodCcsXHJcbiAgICBCOiAnYmlzaG9wJyxcclxuICAgIFI6ICdyb29rJyxcclxuICAgIFE6ICdxdWVlbicsXHJcbiAgICBLOiAna2luZycsXHJcbiAgICBBOiAnYXJjaGJpc2hvcCcsXHJcbiAgICBDOiAnY2FuY2VsbG9yJyxcclxuICAgIEU6ICdlbGVwaGFudCcsXHJcbiAgICBIOiAnaGF3aycsXHJcbiAgICBGOiAnZmVyeicsXHJcbiAgICBNOiAnbWV0JyxcclxuICAgIEc6ICdnb2xkJyxcclxuICAgIFM6ICdzaWx2ZXInLFxyXG4gICAgTDogJ2xhbmNlJyxcclxuICAgIHA6ICdwYXduJyxcclxuICAgIG46ICdrbmlnaHQnLFxyXG4gICAgYjogJ2Jpc2hvcCcsXHJcbiAgICByOiAncm9vaycsXHJcbiAgICBxOiAncXVlZW4nLFxyXG4gICAgazogJ2tpbmcnLFxyXG4gICAgYTogJ2FyY2hiaXNob3AnLFxyXG4gICAgYzogJ2NhbmNlbGxvcicsXHJcbiAgICBlOiAnZWxlcGhhbnQnLFxyXG4gICAgaDogJ2hhd2snLFxyXG4gICAgZjogJ2ZlcnonLFxyXG4gICAgbTogJ21ldCcsXHJcbiAgICBnOiAnZ29sZCcsXHJcbiAgICBzOiAnc2lsdmVyJyxcclxuICAgIGw6ICdsYW5jZScsXHJcbn07XHJcblxyXG4vLyBDb3VudCBnaXZlbiBsZXR0ZXIgb2NjdXJlbmNlcyBpbiBhIHN0cmluZ1xyXG5leHBvcnQgZnVuY3Rpb24gbGMoc3RyLCBsZXR0ZXIsIHVwcGVyY2FzZSkge1xyXG4gICAgdmFyIGxldHRlckNvdW50ID0gMDtcclxuICAgIGlmICh1cHBlcmNhc2UpIGxldHRlciA9IGxldHRlci50b1VwcGVyQ2FzZSgpO1xyXG4gICAgZm9yICh2YXIgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IHN0ci5sZW5ndGg7IHBvc2l0aW9uKyspIHtcclxuICAgICAgICBpZiAoc3RyLmNoYXJBdChwb3NpdGlvbikgPT09IGxldHRlcikgbGV0dGVyQ291bnQgKz0gMTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZXR0ZXJDb3VudDtcclxufVxyXG4iLCIvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MDAyMTIvaG93LWRvLWktY29weS10by10aGUtY2xpcGJvYXJkLWluLWphdmFzY3JpcHRcbmV4cG9ydCBmdW5jdGlvbiBjb3B5VGV4dFRvQ2xpcGJvYXJkKHRleHQpIHtcbiAgICB2YXIgdGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG5cbiAgICAvL1xuICAgIC8vICoqKiBUaGlzIHN0eWxpbmcgaXMgYW4gZXh0cmEgc3RlcCB3aGljaCBpcyBsaWtlbHkgbm90IHJlcXVpcmVkLiAqKipcbiAgICAvL1xuICAgIC8vIFdoeSBpcyBpdCBoZXJlPyBUbyBlbnN1cmU6XG4gICAgLy8gMS4gdGhlIGVsZW1lbnQgaXMgYWJsZSB0byBoYXZlIGZvY3VzIGFuZCBzZWxlY3Rpb24uXG4gICAgLy8gMi4gaWYgZWxlbWVudCB3YXMgdG8gZmxhc2ggcmVuZGVyIGl0IGhhcyBtaW5pbWFsIHZpc3VhbCBpbXBhY3QuXG4gICAgLy8gMy4gbGVzcyBmbGFreW5lc3Mgd2l0aCBzZWxlY3Rpb24gYW5kIGNvcHlpbmcgd2hpY2ggKiptaWdodCoqIG9jY3VyIGlmXG4gICAgLy8gICAgdGhlIHRleHRhcmVhIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG4gICAgLy9cbiAgICAvLyBUaGUgbGlrZWxpaG9vZCBpcyB0aGUgZWxlbWVudCB3b24ndCBldmVuIHJlbmRlciwgbm90IGV2ZW4gYVxuICAgIC8vIGZsYXNoLCBzbyBzb21lIG9mIHRoZXNlIGFyZSBqdXN0IHByZWNhdXRpb25zLiBIb3dldmVyIGluXG4gICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSB3aGlsc3QgdGhlIHBvcHVwXG4gICAgLy8gYm94IGFza2luZyB0aGUgdXNlciBmb3IgcGVybWlzc2lvbiBmb3IgdGhlIHdlYiBwYWdlIHRvXG4gICAgLy8gY29weSB0byB0aGUgY2xpcGJvYXJkLlxuICAgIC8vXG5cbiAgICAvLyBQbGFjZSBpbiB0b3AtbGVmdCBjb3JuZXIgb2Ygc2NyZWVuIHJlZ2FyZGxlc3Mgb2Ygc2Nyb2xsIHBvc2l0aW9uLlxuICAgIHRleHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICB0ZXh0QXJlYS5zdHlsZS50b3AgPSAnMCc7XG4gICAgdGV4dEFyZWEuc3R5bGUubGVmdCA9ICcwJztcblxuICAgIC8vIEVuc3VyZSBpdCBoYXMgYSBzbWFsbCB3aWR0aCBhbmQgaGVpZ2h0LiBTZXR0aW5nIHRvIDFweCAvIDFlbVxuICAgIC8vIGRvZXNuJ3Qgd29yayBhcyB0aGlzIGdpdmVzIGEgbmVnYXRpdmUgdy9oIG9uIHNvbWUgYnJvd3NlcnMuXG4gICAgdGV4dEFyZWEuc3R5bGUud2lkdGggPSAnMmVtJztcbiAgICB0ZXh0QXJlYS5zdHlsZS5oZWlnaHQgPSAnMmVtJztcblxuICAgIC8vIFdlIGRvbid0IG5lZWQgcGFkZGluZywgcmVkdWNpbmcgdGhlIHNpemUgaWYgaXQgZG9lcyBmbGFzaCByZW5kZXIuXG4gICAgdGV4dEFyZWEuc3R5bGUucGFkZGluZyA9ICcwJztcblxuICAgIC8vIENsZWFuIHVwIGFueSBib3JkZXJzLlxuICAgIHRleHRBcmVhLnN0eWxlLmJvcmRlciA9ICdub25lJztcbiAgICB0ZXh0QXJlYS5zdHlsZS5vdXRsaW5lID0gJ25vbmUnO1xuICAgIHRleHRBcmVhLnN0eWxlLmJveFNoYWRvdyA9ICdub25lJztcblxuICAgIC8vIEF2b2lkIGZsYXNoIG9mIHdoaXRlIGJveCBpZiByZW5kZXJlZCBmb3IgYW55IHJlYXNvbi5cbiAgICB0ZXh0QXJlYS5zdHlsZS5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JztcblxuXG4gICAgdGV4dEFyZWEudmFsdWUgPSB0ZXh0O1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0QXJlYSk7XG4gICAgdGV4dEFyZWEuZm9jdXMoKTtcbiAgICB0ZXh0QXJlYS5zZWxlY3QoKTtcblxuICAgIHRyeSB7XG4gICAgICAgIHZhciBzdWNjZXNzZnVsID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgICAgdmFyIG1zZyA9IHN1Y2Nlc3NmdWwgPyAnc3VjY2Vzc2Z1bCcgOiAndW5zdWNjZXNzZnVsJztcbiAgICAgICAgY29uc29sZS5sb2coJ0NvcHlpbmcgdGV4dCBjb21tYW5kIHdhcyAnICsgbXNnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ09vcHMsIHVuYWJsZSB0byBjb3B5Jyk7XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0QXJlYSk7XG59XG4iLCIvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMDYxODM1NS90aGUtc2ltcGxlc3QtcG9zc2libGUtamF2YXNjcmlwdC1jb3VudGRvd24tdGltZXJcblxuaW1wb3J0IHsgaCwgaW5pdCB9IGZyb20gXCJzbmFiYmRvbVwiO1xuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvcHJvcHMnO1xuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcblxuY29uc3QgcGF0Y2ggPSBpbml0KFtrbGFzcywgYXR0cmlidXRlcywgcHJvcGVydGllcywgbGlzdGVuZXJzXSk7XG5cbmV4cG9ydCBjbGFzcyBDbG9jayB7XG4gICAgZHVyYXRpb246IG51bWJlcjtcbiAgICBpbmNyZW1lbnQ6IG51bWJlcjtcbiAgICBncmFudWxhcml0eTogbnVtYmVyO1xuICAgIHJ1bm5pbmc6IGJvb2xlYW47XG4gICAgY29ubmVjdGluZzogYm9vbGVhbjtcbiAgICB0aW1lb3V0OiBhbnk7XG4gICAgc3RhcnRUaW1lOiBhbnk7XG4gICAgdGlja0NhbGxiYWNrczogYW55W107XG4gICAgZmxhZ0NhbGxiYWNrOiBhbnk7XG4gICAgZWw6IEhUTUxFbGVtZW50O1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvLyBnYW1lIGJhc2VUaW1lIChtaW4pIGFuZCBpbmNyZW1lbnQgKHNlYylcbiAgICBjb25zdHJ1Y3RvcihiYXNlVGltZSwgaW5jcmVtZW50LCBlbCwgaWQpIHtcbiAgICB0aGlzLmR1cmF0aW9uID0gYmFzZVRpbWUgKiAxMDAwICogNjA7XG4gICAgdGhpcy5pbmNyZW1lbnQgPSBpbmNyZW1lbnQgKiAxMDAwO1xuICAgIHRoaXMuZ3JhbnVsYXJpdHkgPSA1MDA7XG4gICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jb25uZWN0aW5nID0gZmFsc2U7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLnN0YXJ0VGltZSA9IG51bGw7XG4gICAgdGhpcy50aWNrQ2FsbGJhY2tzID0gW107XG4gICAgdGhpcy5mbGFnQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMuZWwgPSBlbDtcbiAgICB0aGlzLmlkID0gaWQ7XG5cbiAgICByZW5kZXJUaW1lKHRoaXMsIHRoaXMuZHVyYXRpb24pO1xuICAgIH1cblxuICAgIHN0YXJ0ID0gKGR1cmF0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJ1bm5pbmcpIHJldHVybjtcbiAgICAgICAgaWYgKHR5cGVvZiBkdXJhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuXG4gICAgICAgIHRoaXMucnVubmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgZGlmZjtcblxuICAgICAgICAoZnVuY3Rpb24gdGltZXIoKSB7XG4gICAgICAgICAgICBkaWZmID0gdGhhdC5kdXJhdGlvbiAtIChEYXRlLm5vdygpIC0gdGhhdC5zdGFydFRpbWUpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJ0aW1lcigpXCIsIHRoYXQuZHVyYXRpb24sIHRoYXQuc3RhcnRUaW1lLCBkaWZmKTtcbiAgICAgICAgICAgIGlmIChkaWZmIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGF0LmZsYWdDYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIHRoYXQucGF1c2UoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoYXQudGltZW91dCA9IHNldFRpbWVvdXQodGltZXIsIHRoYXQuZ3JhbnVsYXJpdHkpO1xuICAgICAgICAgICAgdGhhdC50aWNrQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoYXQsIHRoYXQsIGRpZmYpO1xuICAgICAgICAgICAgfSwgdGhhdCk7XG4gICAgICAgIH0oKSk7XG4gICAgfVxuXG4gICAgb25UaWNrID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMudGlja0NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvbkZsYWcgPSAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5wYXVzZShmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmZsYWdDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHBhdXNlID0gKHdpdGhJbmNyZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybjtcblxuICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMudGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5kdXJhdGlvbiAtPSBEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWU7XG4gICAgICAgIGlmICh3aXRoSW5jcmVtZW50ICYmIHRoaXMuaW5jcmVtZW50KSB0aGlzLmR1cmF0aW9uICs9IHRoaXMuaW5jcmVtZW50O1xuICAgICAgICByZW5kZXJUaW1lKHRoaXMsIHRoaXMuZHVyYXRpb24pO1xuICAgIH1cblxuICAgIHNldFRpbWUgPSAobWlsbGlzKSA9PiB7XG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSBtaWxsaXM7XG4gICAgICAgIHJlbmRlclRpbWUodGhpcywgdGhpcy5kdXJhdGlvbik7XG4gICAgfVxuXG4gICAgcGFyc2VUaW1lID0gKG1pbGxpcykgPT4ge1xuICAgICAgICBsZXQgbWludXRlcyA9IE1hdGguZmxvb3IobWlsbGlzIC8gNjAwMDApO1xuICAgICAgICBsZXQgc2Vjb25kcyA9IChtaWxsaXMgJSA2MDAwMCkgLyAxMDAwO1xuICAgICAgICBsZXQgc2VjcywgbWlucztcbiAgICAgICAgaWYgKE1hdGguZmxvb3Ioc2Vjb25kcykgPT0gNjApIHtcbiAgICAgICAgICAgIG1pbnV0ZXMrKztcbiAgICAgICAgICAgIHNlY29uZHMgPSAwO1xuICAgICAgICB9XG4gICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1heCgwLCBtaW51dGVzKTtcbiAgICAgICAgc2Vjb25kcyA9IE1hdGgubWF4KDAsIHNlY29uZHMpO1xuICAgICAgICBpZiAobWlsbGlzIDwgMTAwMDApIHtcbiAgICAgICAgICAgIHNlY3MgPSBzZWNvbmRzLnRvRml4ZWQoMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWNzID0gU3RyaW5nKE1hdGguZmxvb3Ioc2Vjb25kcykpO1xuICAgICAgICB9XG4gICAgICAgIG1pbnMgPSAobWludXRlcyA8IDEwID8gXCIwXCIgOiBcIlwiKSArIFN0cmluZyhtaW51dGVzKTtcbiAgICAgICAgc2VjcyA9IChzZWNvbmRzIDwgMTAgPyBcIjBcIiA6IFwiXCIpICsgc2VjcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pbnV0ZXM6IG1pbnMsXG4gICAgICAgICAgICBzZWNvbmRzOiBzZWNzLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRpbWUoY2xvY2ssIHRpbWUpIHtcbiAgICBpZiAoY2xvY2suZ3JhbnVsYXJpdHkgPiAxMDAgJiYgdGltZSA8IDEwMDAwKSBjbG9jay5ncmFudWxhcml0eSA9IDEwMDtcbiAgICBjb25zdCBwYXJzZWQgPSBjbG9jay5wYXJzZVRpbWUodGltZSk7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJUaW1lKCk6XCIsIHRpbWUsIHBhcnNlZCk7XG5cbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZSk7XG4gICAgY29uc3QgbWlsbGlzID0gZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgICBjbG9jay5lbCA9IHBhdGNoKGNsb2NrLmVsLCBoKCdkaXYuY2xvY2std3JhcCMnICsgY2xvY2suaWQsIFtcbiAgICAgICAgaCgnZGl2LmNsb2NrJywgW1xuICAgICAgICAgICAgaCgnZGl2LmNsb2NrLnRpbWUubWluJywge2NsYXNzOiB7cnVubmluZzogY2xvY2sucnVubmluZywgaHVycnk6IHRpbWUgPCAxMDAwMCwgY29ubmVjdGluZzogY2xvY2suY29ubmVjdGluZ319LCBwYXJzZWQubWludXRlcyksXG4gICAgICAgICAgICBoKCdkaXYuY2xvY2suc2VwJywge2NsYXNzOiB7cnVubmluZzogY2xvY2sucnVubmluZywgaHVycnk6IHRpbWUgPCAxMDAwMCwgbG93OiBtaWxsaXMgPCA1MDAsIGNvbm5lY3Rpbmc6IGNsb2NrLmNvbm5lY3Rpbmd9fSAsICc6JyksXG4gICAgICAgICAgICBoKCdkaXYuY2xvY2sudGltZS5zZWMnLCB7Y2xhc3M6IHtydW5uaW5nOiBjbG9jay5ydW5uaW5nLCBodXJyeTogdGltZSA8IDEwMDAwLCBjb25uZWN0aW5nOiBjbG9jay5jb25uZWN0aW5nfX0sIHBhcnNlZC5zZWNvbmRzKVxuICAgICAgICBdKVxuICAgIF0pXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVhZ28oZGF0ZSkge1xuICAgIGNvbnN0IFRaZGF0ZSA9IG5ldyBEYXRlKGRhdGUgKyAnWicpO1xuICAgIHZhciB2YWwgPSAwIHwgKERhdGUubm93KCkgLSBUWmRhdGUuZ2V0VGltZSgpKSAvIDEwMDA7XG4gICAgdmFyIHVuaXQsIGxlbmd0aCA9IHsgc2Vjb25kOiA2MCwgbWludXRlOiA2MCwgaG91cjogMjQsIGRheTogNywgd2VlazogNC4zNSxcbiAgICAgICAgbW9udGg6IDEyLCB5ZWFyOiAxMDAwMCB9LCByZXN1bHQ7XG4gXG4gICAgZm9yICh1bml0IGluIGxlbmd0aCkge1xuICAgICAgICByZXN1bHQgPSB2YWwgJSBsZW5ndGhbdW5pdF07XG4gICAgICAgIGlmICghKHZhbCA9IDAgfCB2YWwgLyBsZW5ndGhbdW5pdF0pKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICcgJyArIChyZXN1bHQtMSA/IHVuaXQgKyAncycgOiB1bml0KSArICcgYWdvJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVGltZWFnbygpIHtcbiAgICB2YXIgeCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5mby1kYXRlXCIpO1xuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHhbaV0uaW5uZXJIVE1MID0gdGltZWFnbyh4W2ldLmdldEF0dHJpYnV0ZSgndGltZXN0YW1wJykpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KHJlbmRlclRpbWVhZ28sIDEyMDApO1xufSIsImltcG9ydCB7IGluaXQgfSBmcm9tICdzbmFiYmRvbSc7XHJcbmltcG9ydCBrbGFzcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2NsYXNzJztcclxuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcclxuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9wcm9wcyc7XHJcbmltcG9ydCBsaXN0ZW5lcnMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9ldmVudGxpc3RlbmVycyc7XHJcblxyXG5jb25zdCBwYXRjaCA9IGluaXQoW2tsYXNzLCBhdHRyaWJ1dGVzLCBwcm9wZXJ0aWVzLCBsaXN0ZW5lcnNdKTtcclxuXHJcbmltcG9ydCBoIGZyb20gJ3NuYWJiZG9tL2gnO1xyXG5pbXBvcnQgeyBWTm9kZSB9IGZyb20gJ3NuYWJiZG9tL3Zub2RlJztcclxuXHJcbmltcG9ydCB7IENoZXNzZ3JvdW5kIH0gZnJvbSAnY2hlc3Nncm91bmR4JztcclxuXHJcbmltcG9ydCB7IHJlbmRlclVzZXJuYW1lIH0gZnJvbSAnLi91c2VyJztcclxuaW1wb3J0IHsgVkFSSUFOVFMsIHVzaTJ1Y2ksIGdyYW5kMnplcm8gfSBmcm9tICcuL2NoZXNzJztcclxuXHJcbmZ1bmN0aW9uIHJlbmRlckdhbWUobW9kZWwsIGdhbWVzLCBnYW1lLCBmZW4sIGxhc3RNb3ZlKSB7XHJcbiAgICByZXR1cm4gaCgnbWluaWdhbWUjJyArIGdhbWUuZ2FtZUlkICsgJy4nICsgVkFSSUFOVFNbZ2FtZS52YXJpYW50XS5ib2FyZCArICcuJyArIFZBUklBTlRTW2dhbWUudmFyaWFudF0ucGllY2VzLFxyXG4gICAgICAgICAgICAgICAgeyBvbjogeyBjbGljazogKCkgPT4geyB3aW5kb3cubG9jYXRpb24uYXNzaWduKG1vZGVsW1wiaG9tZVwiXSArICcvJyArIGdhbWUuZ2FtZUlkKTsgfSB9IH0sXHJcbiAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYnLCBnYW1lLmIpLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2LmNnLXdyYXAuJyArIFZBUklBTlRTW2dhbWUudmFyaWFudF0uY2cgKyAnLm1pbmknLFxyXG4gICAgICAgICAgICAgICAgICAgIHsgaG9vazogeyBpbnNlcnQ6ICh2bm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZyA9IENoZXNzZ3JvdW5kKHZub2RlLmVsbSBhcyBIVE1MRWxlbWVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVuOiBmZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TW92ZTogbGFzdE1vdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogVkFSSUFOVFNbZ2FtZS52YXJpYW50XS5nZW9tLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld09ubHk6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnYW1lc1tnYW1lLmdhbWVJZF0gPSBjZztcclxuICAgICAgICAgICAgICAgICAgICAgfX19KSxcclxuICAgICAgICAgICAgICAgIGgoJ2RpdicsIGdhbWUudyksXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIClcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnYW1lc1ZpZXcobW9kZWwpOiBWTm9kZVtdIHtcclxuICAgIHJlbmRlclVzZXJuYW1lKG1vZGVsW1wiaG9tZVwiXSwgbW9kZWxbXCJ1c2VybmFtZVwiXSk7XHJcblxyXG4gICAgdmFyIHhtbGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHZhciB1cmwgPSBtb2RlbFtcImhvbWVcIl0gKyBcIi9hcGkvZ2FtZXNcIjtcclxuXHJcbiAgICB4bWxodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgdmFyIG15QXJyID0gSlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgbXlGdW5jdGlvbihteUFycik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB4bWxodHRwLm9wZW4oXCJHRVRcIiwgdXJsLCB0cnVlKTtcclxuICAgIHhtbGh0dHAuc2VuZCgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIG15RnVuY3Rpb24oYXJyKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkVk5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2FtZXMnKTtcclxuICAgICAgICB2YXIgZ2FtZXMgPSB7fTtcclxuICAgICAgICBpZiAob2xkVk5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHBhdGNoKG9sZFZOb2RlIGFzIEhUTUxFbGVtZW50LCBoKCdncmlkLWNvbnRhaW5lciNnYW1lcycsIGFyci5tYXAoKGdhbWUpID0+IHJlbmRlckdhbWUobW9kZWwsIGdhbWVzLCBnYW1lLCBnYW1lLmZlbiwgZ2FtZS5sYXN0TW92ZSkpKSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZXZ0U291cmNlID0gbmV3IEV2ZW50U291cmNlKFwiL2FwaS9zdWJzY3JpYmVcIik7XHJcbiAgICAgICAgICAgIGV2dFNvdXJjZS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZ2FtZSA9IGFyci5maW5kKChnKSA9PiBnLmdhbWVJZCA9PT0gbWVzc2FnZS5nYW1lSWQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2cgPSBnYW1lc1ttZXNzYWdlLmdhbWVJZF07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBtZXNzYWdlLmZlbi5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGFzdE1vdmUgPSBtZXNzYWdlLmxhc3RNb3ZlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RNb3ZlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdhbWUudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0TW92ZSA9IHVzaTJ1Y2kobGFzdE1vdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2FtZS52YXJpYW50LnN0YXJ0c1dpdGgoJ2dyYW5kJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1vdmUgPSBncmFuZDJ6ZXJvKGxhc3RNb3ZlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdE1vdmUgPSBbbGFzdE1vdmUuc2xpY2UoMCwyKSwgbGFzdE1vdmUuc2xpY2UoMiw0KV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdE1vdmUgIT09IG51bGwgJiYgbGFzdE1vdmVbMF1bMV0gPT09ICdAJykgbGFzdE1vdmUgPSBbbGFzdE1vdmVbMV1dO1xyXG4gICAgICAgICAgICAgICAgY2cuc2V0KHtcclxuICAgICAgICAgICAgICAgICAgICBmZW46IHBhcnRzWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RNb3ZlOiBsYXN0TW92ZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbaCgnYXNpZGUuc2lkZWJhci1maXJzdCcpLFxyXG4gICAgICAgICAgICBoKCdtYWluLmdhbWVzJywgW2goJ2dyaWQtY29udGFpbmVyI2dhbWVzJyldKSxcclxuICAgICAgICAgICAgaCgnYXNpZGUuc2lkZWJhci1zZWNvbmQnKSxcclxuICAgICAgICBdO1xyXG59XHJcbiIsImltcG9ydCB7IGgsIGluaXQgfSBmcm9tIFwic25hYmJkb21cIjtcclxuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xyXG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xyXG5pbXBvcnQgbGlzdGVuZXJzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvZXZlbnRsaXN0ZW5lcnMnO1xyXG5pbXBvcnQgdG9WTm9kZSBmcm9tICdzbmFiYmRvbS90b3Zub2RlJztcclxuXHJcbmltcG9ydCB7IGtleTJwb3MgfSBmcm9tICdjaGVzc2dyb3VuZHgvdXRpbCc7XHJcblxyXG5pbXBvcnQgeyBjYW5HYXRlLCByb2xlVG9TYW4gfSBmcm9tICcuL2NoZXNzJztcclxuaW1wb3J0IHsgcG9ja2V0VmlldyB9IGZyb20gJy4vcG9ja2V0JztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY3RybCkge1xyXG5cclxuICAgIGxldCBnYXRpbmc6IGFueSA9IGZhbHNlO1xyXG4gICAgbGV0IHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIHN0YXJ0KGZlbiwgb3JpZywgZGVzdCkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VuZCA9IGN0cmwuZ2V0R3JvdW5kKCk7XHJcbiAgICAgICAgY29uc3QgZ2F0YWJsZSA9IGNhbkdhdGUoZmVuLCBncm91bmQuc3RhdGUucGllY2VzW2Rlc3RdLCBvcmlnKVxyXG4gICAgICAgIHJvbGVzID0gW1wiaGF3a1wiLCBcImVsZXBoYW50XCIsIFwicXVlZW5cIiwgXCJyb29rXCIsIFwiYmlzaG9wXCIsIFwia25pZ2h0XCIsIFwiXCJdO1xyXG5cclxuICAgICAgICBpZiAoZ2F0YWJsZVswXSB8fCBnYXRhYmxlWzFdIHx8IGdhdGFibGVbMl0gfHwgZ2F0YWJsZVszXSB8fCBnYXRhYmxlWzRdIHx8IGdhdGFibGVbNV0pIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSBjdHJsLm15Y29sb3I7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWVudGF0aW9uID0gZ3JvdW5kLnN0YXRlLm9yaWVudGF0aW9uO1xyXG4gICAgICAgICAgICBpZiAocm9sZXMuaW5kZXhPZihcImhhd2tcIikgIT09IC0xICYmICFnYXRhYmxlWzBdKSByb2xlcy5zcGxpY2Uocm9sZXMuaW5kZXhPZihcImhhd2tcIiksIDEpO1xyXG4gICAgICAgICAgICBpZiAocm9sZXMuaW5kZXhPZihcImVsZXBoYW50XCIpICE9PSAtMSAmJiAhZ2F0YWJsZVsxXSkgcm9sZXMuc3BsaWNlKHJvbGVzLmluZGV4T2YoXCJlbGVwaGFudFwiKSwgMSk7XHJcbiAgICAgICAgICAgIGlmIChyb2xlcy5pbmRleE9mKFwicXVlZW5cIikgIT09IC0xICYmICFnYXRhYmxlWzJdKSByb2xlcy5zcGxpY2Uocm9sZXMuaW5kZXhPZihcInF1ZWVuXCIpLCAxKTtcclxuICAgICAgICAgICAgaWYgKHJvbGVzLmluZGV4T2YoXCJyb29rXCIpICE9PSAtMSAmJiAhZ2F0YWJsZVszXSkgcm9sZXMuc3BsaWNlKHJvbGVzLmluZGV4T2YoXCJyb29rXCIpLCAxKTtcclxuICAgICAgICAgICAgaWYgKHJvbGVzLmluZGV4T2YoXCJiaXNob3BcIikgIT09IC0xICYmICFnYXRhYmxlWzRdKSByb2xlcy5zcGxpY2Uocm9sZXMuaW5kZXhPZihcImJpc2hvcFwiKSwgMSk7XHJcbiAgICAgICAgICAgIGlmIChyb2xlcy5pbmRleE9mKFwia25pZ2h0XCIpICE9PSAtMSAmJiAhZ2F0YWJsZVs1XSkgcm9sZXMuc3BsaWNlKHJvbGVzLmluZGV4T2YoXCJrbmlnaHRcIiksIDEpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG9yaWdzID0gW29yaWddO1xyXG4gICAgICAgICAgICBjb25zdCBjYXN0bGluZyA9IGdyb3VuZC5zdGF0ZS5waWVjZXNbZGVzdF0ucm9sZSA9PT0gXCJraW5nXCIgJiYgb3JpZ1swXSA9PT0gXCJlXCIgJiYgZGVzdFswXSAhPT0gXCJkXCIgJiYgZGVzdFswXSAhPT0gXCJlXCIgJiYgZGVzdFswXSAhPT0gXCJmXCI7XHJcbiAgICAgICAgICAgIHZhciByb29rRGVzdCA9IFwiXCI7XHJcbiAgICAgICAgICAgIGlmIChjYXN0bGluZykge1xyXG4gICAgICAgICAgICAgICAgLy8gTy1PXHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzdFswXSA+IFwiZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ3MucHVzaChcImhcIiArIG9yaWdbMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb2tEZXN0ID0gIFwiZVwiICsgb3JpZ1sxXTtcclxuICAgICAgICAgICAgICAgIC8vIE8tTy1PXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdzLnB1c2goXCJhXCIgKyBvcmlnWzFdKTtcclxuICAgICAgICAgICAgICAgICAgICByb29rRGVzdCA9ICBcImVcIiArIG9yaWdbMV07XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBkcmF3X2dhdGluZyhvcmlncywgY29sb3IsIG9yaWVudGF0aW9uKTtcclxuICAgICAgICAgICAgZ2F0aW5nID0ge1xyXG4gICAgICAgICAgICAgICAgb3JpZ3M6IG9yaWdzLFxyXG4gICAgICAgICAgICAgICAgZGVzdDogZGVzdCxcclxuICAgICAgICAgICAgICAgIHJvb2tEZXN0OiByb29rRGVzdCxcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjdHJsLnNlbmRNb3ZlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBnYXRlKGN0cmwsIG9yaWcsIGRlc3QsIHJvbGUpIHtcclxuICAgICAgICBjb25zdCBnID0gY3RybC5nZXRHcm91bmQoKTtcclxuICAgICAgICBjb25zdCBjb2xvciA9IGcuc3RhdGUucGllY2VzW2Rlc3RdLmNvbG9yO1xyXG4gICAgICAgIGcubmV3UGllY2Uoe1wicm9sZVwiOiByb2xlLCBcImNvbG9yXCI6IGNvbG9yfSwgb3JpZylcclxuICAgICAgICBjdHJsLnBvY2tldHNbY29sb3IgPT09ICd3aGl0ZScgPyAwIDogMV1bcm9sZV0tLTtcclxuICAgICAgICBjdHJsLnZwb2NrZXQxID0gcGF0Y2goY3RybC52cG9ja2V0MSwgcG9ja2V0VmlldyhjdHJsLCBjb2xvciwgXCJib3R0b21cIikpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGRyYXdfZ2F0aW5nKG9yaWdzLCBjb2xvciwgb3JpZW50YXRpb24pIHtcclxuICAgICAgICB2YXIgY29udGFpbmVyID0gdG9WTm9kZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdleHRlbnNpb24nKSBhcyBOb2RlKTtcclxuICAgICAgICBwYXRjaChjb250YWluZXIsIHJlbmRlckdhdGluZyhvcmlncywgY29sb3IsIG9yaWVudGF0aW9uKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZHJhd19ub19nYXRpbmcoKSB7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlbnNpb25fY2hvaWNlJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgcGF0Y2goY29udGFpbmVyLCBoKCdleHRlbnNpb24nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZmluaXNoKHJvbGUsIGluZGV4KSB7XHJcbiAgICAgICAgaWYgKGdhdGluZykge1xyXG4gICAgICAgICAgICBkcmF3X25vX2dhdGluZygpO1xyXG4gICAgICAgICAgICBpZiAocm9sZSkgZ2F0ZShjdHJsLCBnYXRpbmcub3JpZ3NbaW5kZXhdLCBnYXRpbmcuZGVzdCwgcm9sZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBnYXRlZCA9IHJvbGUgPyByb2xlVG9TYW5bcm9sZV0udG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgICAgIGlmIChnYXRpbmcuY2FsbGJhY2spIGdhdGluZy5jYWxsYmFjayhnYXRpbmcub3JpZ3NbaW5kZXhdLCBpbmRleCA9PT0gMCA/IGdhdGluZy5kZXN0IDogZ2F0aW5nLnJvb2tEZXN0LCBnYXRlZCk7XHJcbiAgICAgICAgICAgIGdhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gY2FuY2VsKCkge1xyXG4gICAgICAgIGRyYXdfbm9fZ2F0aW5nKCk7XHJcbiAgICAgICAgY3RybC5nb1BseShjdHJsLnBseSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGJpbmQoZXZlbnROYW1lOiBzdHJpbmcsIGY6IChlOiBFdmVudCkgPT4gdm9pZCwgcmVkcmF3KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaW5zZXJ0KHZub2RlKSB7XHJcbiAgICAgICAgICAgICAgICB2bm9kZS5lbG0uYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGYoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZHJhdykgcmVkcmF3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZW5kZXJTcXVhcmVzKG9yaWcsIGNvbG9yLCBvcmllbnRhdGlvbiwgaW5kZXgpIHtcclxuICAgICAgICBjb25zdCBmaXJzdFJhbmtJczAgPSBmYWxzZTtcclxuICAgICAgICB2YXIgbGVmdCA9ICg4IC0ga2V5MnBvcyhvcmlnLCBmaXJzdFJhbmtJczApWzBdKSAqIDEyLjU7XHJcbiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcIndoaXRlXCIpIGxlZnQgPSA4Ny41IC0gbGVmdDtcclxuICAgICAgICByZXR1cm4gcm9sZXMubWFwKChzZXJ2ZXJSb2xlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB0b3AgPSAoY29sb3IgPT09IG9yaWVudGF0aW9uID8gNyAtIGkgOiBpKSAqIDEyLjU7XHJcbiAgICAgICAgICAgIHJldHVybiBoKFxyXG4gICAgICAgICAgICAgICAgXCJzcXVhcmVcIixcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzdHlsZTogXCJ0b3A6IFwiICsgdG9wICsgXCIlO2xlZnQ6IFwiICsgbGVmdCArIFwiJVwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaG9vazogYmluZChcImNsaWNrXCIsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2goc2VydmVyUm9sZSwgaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFtoKFwicGllY2UuXCIgKyBzZXJ2ZXJSb2xlICsgXCIuXCIgKyBjb2xvcildXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZW5kZXJHYXRpbmcob3JpZ3MsIGNvbG9yLCBvcmllbnRhdGlvbikge1xyXG4gICAgICAgIHZhciB2ZXJ0aWNhbCA9IGNvbG9yID09PSBvcmllbnRhdGlvbiA/IFwidG9wXCIgOiBcImJvdHRvbVwiO1xyXG4gICAgICAgIHZhciBzcXVhcmVzID0gcmVuZGVyU3F1YXJlcyhvcmlnc1swXSwgY29sb3IsIG9yaWVudGF0aW9uLCAwKTtcclxuICAgICAgICBpZiAob3JpZ3MubGVuZ3RoID4gMSkgc3F1YXJlcyA9IHNxdWFyZXMuY29uY2F0KHJlbmRlclNxdWFyZXMob3JpZ3NbMV0sIGNvbG9yLCBvcmllbnRhdGlvbiwgMSkpO1xyXG4gICAgICAgIHJldHVybiBoKFxyXG4gICAgICAgICAgICBcImRpdiNleHRlbnNpb25fY2hvaWNlLlwiICsgdmVydGljYWwsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGhvb2s6IHtcclxuICAgICAgICAgICAgICAgICAgICBpbnNlcnQ6IHZub2RlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB2bm9kZS5lbG0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiBjYW5jZWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCBlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzcXVhcmVzXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHN0YXJ0LFxyXG4gICAgfTtcclxufVxyXG4iLCJpbXBvcnQgU29ja2V0dGUgZnJvbSAnc29ja2V0dGUnO1xyXG5cclxuaW1wb3J0IHsgaW5pdCB9IGZyb20gJ3NuYWJiZG9tJztcclxuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xyXG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xyXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL3Byb3BzJztcclxuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuaW1wb3J0IGggZnJvbSAnc25hYmJkb20vaCc7XHJcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSAnc25hYmJkb20vdm5vZGUnO1xyXG5cclxuaW1wb3J0IHsgcmVuZGVyVXNlcm5hbWUgfSBmcm9tICcuL3VzZXInO1xyXG5pbXBvcnQgeyBjaGF0TWVzc2FnZSwgY2hhdFZpZXcgfSBmcm9tICcuL2NoYXQnO1xyXG5pbXBvcnQgeyB2YXJpYW50cywgdmFyaWFudHM5NjAsIFZBUklBTlRTIH0gZnJvbSAnLi9jaGVzcyc7XHJcbmltcG9ydCB7IHNvdW5kIH0gZnJvbSAnLi9zb3VuZCc7XHJcblxyXG5cclxuY2xhc3MgTG9iYnlDb250cm9sbGVyIHtcclxuICAgIG1vZGVsO1xyXG4gICAgc29jaztcclxuICAgIHBsYXllcjtcclxuICAgIGxvZ2dlZF9pbjtcclxuICAgIGNoYWxsZW5nZUFJO1xyXG4gICAgX3dzO1xyXG4gICAgc2Vla3M7XHJcblxyXG4gICAgY29uc3RydWN0b3IoZWwsIG1vZGVsKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJMb2JieUNvbnRyb2xsZXIgY29uc3RydWN0b3JcIiwgZWwsIG1vZGVsKTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgICAgIHRoaXMuY2hhbGxlbmdlQUkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3Qgb25PcGVuID0gKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl93cyA9IGV2dC50YXJnZXQ7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tQ09OTkVDVEVEXCIsIGV2dCk7XHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJsb2JieV91c2VyX2Nvbm5lY3RlZFwiLCB1c2VybmFtZTogdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJnZXRfc2Vla3NcIiB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3dzID0ge1wicmVhZHlTdGF0ZVwiOiAtMX07XHJcbiAgICAgICAgY29uc3Qgb3B0cyA9IHtcclxuICAgICAgICAgICAgbWF4QXR0ZW1wdHM6IDIwLFxyXG4gICAgICAgICAgICBvbm9wZW46IGUgPT4gb25PcGVuKGUpLFxyXG4gICAgICAgICAgICBvbm1lc3NhZ2U6IGUgPT4gdGhpcy5vbk1lc3NhZ2UoZSksXHJcbiAgICAgICAgICAgIG9ucmVjb25uZWN0OiBlID0+IGNvbnNvbGUubG9nKCdSZWNvbm5lY3RpbmcgaW4gbG9iYnkuLi4nLCBlKSxcclxuICAgICAgICAgICAgb25tYXhpbXVtOiBlID0+IGNvbnNvbGUubG9nKCdTdG9wIEF0dGVtcHRpbmchJywgZSksXHJcbiAgICAgICAgICAgIG9uY2xvc2U6IGUgPT4ge2NvbnNvbGUubG9nKCdDbG9zZWQhJywgZSk7fSxcclxuICAgICAgICAgICAgb25lcnJvcjogZSA9PiBjb25zb2xlLmxvZygnRXJyb3I6JywgZSksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5zb2NrID0gbmV3IFNvY2tldHRlKFwid3M6Ly9cIiArIGxvY2F0aW9uLmhvc3QgKyBcIi93c2xcIiwgb3B0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoKGVycikge1xyXG4gICAgICAgICAgICB0aGlzLnNvY2sgPSBuZXcgU29ja2V0dGUoXCJ3c3M6Ly9cIiArIGxvY2F0aW9uLmhvc3QgKyBcIi93c2xcIiwgb3B0cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBnZXQgc2Vla3Mgd2hlbiB3ZSBhcmUgY29taW5nIGJhY2sgYWZ0ZXIgYSBnYW1lXHJcbiAgICAgICAgaWYgKHRoaXMuX3dzLnJlYWR5U3RhdGUgPT09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImdldF9zZWVrc1wiIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcGF0Y2goZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlZWtidXR0b25zJykgYXMgSFRNTEVsZW1lbnQsIGgoJ3VsI3NlZWtidXR0b25zJywgdGhpcy5yZW5kZXJTZWVrQnV0dG9ucygpKSk7XHJcbiAgICAgICAgcGF0Y2goZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvYmJ5Y2hhdCcpIGFzIEhUTUxFbGVtZW50LCBjaGF0Vmlldyh0aGlzLCBcImxvYmJ5Y2hhdFwiKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGRvU2VuZCAobWVzc2FnZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiLS0tPiBsb2JieSBkb1NlbmQoKTpcIiwgbWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5zb2NrLnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNlZWtNc2cgKHZhcmlhbnQsIGNvbG9yLCBmZW4sIG1pbnV0ZXMsIGluY3JlbWVudCwgY2hlc3M5NjApIHtcclxuICAgICAgICB0aGlzLmRvU2VuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6IFwiY3JlYXRlX3NlZWtcIixcclxuICAgICAgICAgICAgdXNlcjogdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdLFxyXG4gICAgICAgICAgICB2YXJpYW50OiB2YXJpYW50LFxyXG4gICAgICAgICAgICBmZW46IGZlbixcclxuICAgICAgICAgICAgbWludXRlczogbWludXRlcyxcclxuICAgICAgICAgICAgaW5jcmVtZW50OiBpbmNyZW1lbnQsXHJcbiAgICAgICAgICAgIHJhdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgY2hlc3M5NjA6IGNoZXNzOTYwLFxyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlQm90Q2hhbGxlbmdlTXNnICh2YXJpYW50LCBjb2xvciwgZmVuLCBtaW51dGVzLCBpbmNyZW1lbnQsIGxldmVsLCBjaGVzczk2MCkge1xyXG4gICAgICAgIHRoaXMuZG9TZW5kKHtcclxuICAgICAgICAgICAgdHlwZTogXCJjcmVhdGVfYWlfY2hhbGxlbmdlXCIsXHJcbiAgICAgICAgICAgIHVzZXI6IHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSxcclxuICAgICAgICAgICAgdmFyaWFudDogdmFyaWFudCxcclxuICAgICAgICAgICAgZmVuOiBmZW4sXHJcbiAgICAgICAgICAgIG1pbnV0ZXM6IG1pbnV0ZXMsXHJcbiAgICAgICAgICAgIGluY3JlbWVudDogaW5jcmVtZW50LFxyXG4gICAgICAgICAgICByYXRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbCxcclxuICAgICAgICAgICAgY2hlc3M5NjA6IGNoZXNzOTYwLFxyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNOZXdTZWVrICh2YXJpYW50LCBjb2xvciwgZmVuLCBtaW51dGVzLCBpbmNyZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuc2Vla3Muc29tZShzZWVrID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlZWsudXNlciA9PT0gdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdICYmIHNlZWsudmFyaWFudCA9PT0gdmFyaWFudCAmJiBzZWVrLmZlbiA9PT0gZmVuICYmIHNlZWsuY29sb3IgPT09IGNvbG9yICYmIHNlZWsudGMgPT09IG1pbnV0ZXMgKyBcIitcIiArIGluY3JlbWVudDtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNlZWsgKGNvbG9yKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMDEnKSEuc3R5bGUuZGlzcGxheT0nbm9uZSc7XHJcbiAgICAgICAgbGV0IGU7XHJcbiAgICAgICAgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2YXJpYW50JykgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgdmFyaWFudCA9IGUub3B0aW9uc1tlLnNlbGVjdGVkSW5kZXhdLnZhbHVlO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwic2Vla192YXJpYW50XCIsIHZhcmlhbnQpO1xyXG5cclxuICAgICAgICBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlbicpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgZmVuID0gZS52YWx1ZTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInNlZWtfZmVuXCIsIGUudmFsdWUpO1xyXG5cclxuICAgICAgICBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbicpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgbWludXRlcyA9IHBhcnNlSW50KGUudmFsdWUpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwic2Vla19taW5cIiwgZS52YWx1ZSk7XHJcblxyXG4gICAgICAgIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5jJykgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSBwYXJzZUludChlLnZhbHVlKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInNlZWtfaW5jXCIsIGUudmFsdWUpO1xyXG5cclxuICAgICAgICBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoZXNzOTYwJykgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICBjb25zdCBoaWRlID0gdmFyaWFudHM5NjAuaW5kZXhPZih2YXJpYW50KSA9PT0gLTE7XHJcbiAgICAgICAgY29uc3QgY2hlc3M5NjAgPSAoaGlkZSkgPyBmYWxzZSA6IGUuY2hlY2tlZDtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkNSRUFURSBTRUVLIHZhcmlhbnQsIGNvbG9yLCBmZW4sIG1pbnV0ZXMsIGluY3JlbWVudCwgaGlkZSwgY2hlc3M5NjBcIiwgdmFyaWFudCwgY29sb3IsIGZlbiwgbWludXRlcywgaW5jcmVtZW50LCBoaWRlLCBjaGVzczk2MCk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJzZWVrX2NoZXNzOTYwXCIsIGUuY2hlY2tlZCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNoYWxsZW5nZUFJKSB7XHJcbiAgICAgICAgICAgIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwibGV2ZWxcIl06Y2hlY2tlZCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGxldmVsID0gcGFyc2VJbnQoZS52YWx1ZSk7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwic2Vla19sZXZlbFwiLCBlLnZhbHVlKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cobGV2ZWwsIGUudmFsdWUsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2Vla19sZXZlbFwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQm90Q2hhbGxlbmdlTXNnKHZhcmlhbnQsIGNvbG9yLCBmZW4sIG1pbnV0ZXMsIGluY3JlbWVudCwgbGV2ZWwsIGNoZXNzOTYwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc05ld1NlZWsodmFyaWFudCwgY29sb3IsIGZlbiwgbWludXRlcywgaW5jcmVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTZWVrTXNnKHZhcmlhbnQsIGNvbG9yLCBmZW4sIG1pbnV0ZXMsIGluY3JlbWVudCwgY2hlc3M5NjApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlclNlZWtCdXR0b25zICgpIHtcclxuICAgICAgICBjb25zdCBzZXRWYXJpYW50ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZTtcclxuICAgICAgICAgICAgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2YXJpYW50JykgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhbnQgPSBlLm9wdGlvbnNbZS5zZWxlY3RlZEluZGV4XS52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgaGlkZSA9IHZhcmlhbnRzOTYwLmluZGV4T2YodmFyaWFudCkgPT09IC0xO1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoZXNzOTYwLWJsb2NrJykhLnN0eWxlLmRpc3BsYXkgPSAoaGlkZSkgPyAnbm9uZScgOiAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2V0TWludXRlcyA9IChtaW51dGVzKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBtaW4sIGluYyA9IDA7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWludXRlc1wiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKGVsKSBlbC5pbm5lckhUTUwgPSBtaW51dGVzO1xyXG5cclxuICAgICAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWluJykgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKGUpIG1pbiA9IHBhcnNlSW50KGUudmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmMnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoZSkgaW5jID0gcGFyc2VJbnQoZS52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29sb3ItYnV0dG9uLWdyb3VwJykhLnN0eWxlLmRpc3BsYXkgPSAobWluICsgaW5jID09PSAwKSA/ICdub25lJyA6ICdibG9jayc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzZXRJbmNyZW1lbnQgPSAoaW5jcmVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBtaW4sIGluYyA9IDA7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5jcmVtZW50XCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoZWwpIGVsLmlubmVySFRNTCA9IGluY3JlbWVudDtcclxuXHJcbiAgICAgICAgICAgIHZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbicpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChlKSBtaW4gPSBwYXJzZUludChlLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5jJykgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKGUpIGluYyA9IHBhcnNlSW50KGUudmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbG9yLWJ1dHRvbi1ncm91cCcpIS5zdHlsZS5kaXNwbGF5ID0gKG1pbiArIGluYyA9PT0gMCkgPyAnbm9uZScgOiAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdklkeCA9IGxvY2FsU3RvcmFnZS5zZWVrX3ZhcmlhbnQgPT09IHVuZGVmaW5lZCA/IDAgOiB2YXJpYW50cy5pbmRleE9mKGxvY2FsU3RvcmFnZS5zZWVrX3ZhcmlhbnQpO1xyXG4gICAgICAgIGNvbnN0IHZGZW4gPSBsb2NhbFN0b3JhZ2Uuc2Vla19mZW4gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbFN0b3JhZ2Uuc2Vla19mZW47XHJcbiAgICAgICAgY29uc3Qgdk1pbiA9IGxvY2FsU3RvcmFnZS5zZWVrX21pbiA9PT0gdW5kZWZpbmVkID8gXCI1XCIgOiBsb2NhbFN0b3JhZ2Uuc2Vla19taW47XHJcbiAgICAgICAgY29uc3QgdkluYyA9IGxvY2FsU3RvcmFnZS5zZWVrX2luYyA9PT0gdW5kZWZpbmVkID8gXCIzXCIgOiBsb2NhbFN0b3JhZ2Uuc2Vla19pbmM7XHJcbiAgICAgICAgY29uc3QgdkxldmVsID0gbG9jYWxTdG9yYWdlLnNlZWtfbGV2ZWwgPT09IHVuZGVmaW5lZCA/IFwiMVwiIDogbG9jYWxTdG9yYWdlLnNlZWtfbGV2ZWw7XHJcbiAgICAgICAgY29uc3QgdkNoZXNzOTYwID0gbG9jYWxTdG9yYWdlLnNlZWtfY2hlc3M5NjAgPT09IHVuZGVmaW5lZCA/IFwiZmFsc2VcIiA6IGxvY2FsU3RvcmFnZS5zZWVrX2NoZXNzOTYwO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwibG9jYWxlU3RvcmFnZS5zZWVrX2xldmVsLCB2TGV2ZWw9XCIsIGxvY2FsU3RvcmFnZS5zZWVrX2xldmVsLCB2TGV2ZWwpO1xyXG5cclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgIGgoJ2RpdiNpZDAxJywgeyBjbGFzczoge1wibW9kYWxcIjogdHJ1ZX0gfSwgW1xyXG4gICAgICAgICAgaCgnZm9ybS5tb2RhbC1jb250ZW50JywgW1xyXG4gICAgICAgICAgICBoKCdkaXYjY2xvc2Vjb250YWluZXInLCBbXHJcbiAgICAgICAgICAgICAgaCgnc3Bhbi5jbG9zZScsIHsgb246IHsgY2xpY2s6ICgpID0+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDAxJykhLnN0eWxlLmRpc3BsYXk9J25vbmUnIH0sIGF0dHJzOiB7J2RhdGEtaWNvbic6ICdqJ30sIHByb3BzOiB7dGl0bGU6IFwiQ2FuY2VsXCJ9IH0pLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgaCgnZGl2LmNvbnRhaW5lcicsIFtcclxuICAgICAgICAgICAgICAgIGgoJ2xhYmVsJywgeyBhdHRyczoge2ZvcjogXCJ2YXJpYW50XCJ9IH0sIFwiVmFyaWFudFwiKSxcclxuICAgICAgICAgICAgICAgIGgoJ3NlbGVjdCN2YXJpYW50Jywge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiB7bmFtZTogXCJ2YXJpYW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7IGlucHV0OiAoKSA9PiBzZXRWYXJpYW50KCkgfSxcclxuICAgICAgICAgICAgICAgICAgICBob29rOiB7aW5zZXJ0OiAoKSA9PiBzZXRWYXJpYW50KCkgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LCB2YXJpYW50cy5tYXAoKHZhcmlhbnQsIGlkeCkgPT4gaCgnb3B0aW9uJywgeyBwcm9wczoge3ZhbHVlOiB2YXJpYW50LCBzZWxlY3RlZDogKGlkeCA9PT0gdklkeCkgPyBcInNlbGVjdGVkXCIgOiBcIlwifSB9LCB2YXJpYW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaCgnbGFiZWwnLCB7IGF0dHJzOiB7Zm9yOiBcImZlblwifSB9LCBcIlN0YXJ0IHBvc2l0aW9uXCIpLFxyXG4gICAgICAgICAgICAgICAgaCgnaW5wdXQjZmVuJywgeyBwcm9wczoge25hbWU6ICdmZW4nLCBwbGFjZWhvbGRlcjogJ1Bhc3RlIHRoZSBGRU4gdGV4dCBoZXJlJywgdmFsdWU6IHZGZW59IH0pLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2I2NoZXNzOTYwLWJsb2NrJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsJywgeyBhdHRyczoge2ZvcjogXCJjaGVzczk2MFwifSB9LCBcIkNoZXNzOTYwXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2lucHV0I2NoZXNzOTYwJywge3Byb3BzOiB7bmFtZTogXCJjaGVzczk2MFwiLCB0eXBlOiBcImNoZWNrYm94XCIsIGNoZWNrZWQ6IHZDaGVzczk2MCA9PT0gXCJ0cnVlXCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9fSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgIC8vaCgnbGFiZWwnLCB7IGF0dHJzOiB7Zm9yOiBcInRjXCJ9IH0sIFwiVGltZSBDb250cm9sXCIpLFxyXG4gICAgICAgICAgICAgICAgLy9oKCdzZWxlY3QjdGltZWNvbnRyb2wnLCB7IHByb3BzOiB7bmFtZTogXCJ0aW1lY29udHJvbFwifSB9LCBbXHJcbiAgICAgICAgICAgICAgICAvLyAgICBoKCdvcHRpb24nLCB7IHByb3BzOiB7dmFsdWU6IFwiMVwiLCBzZWxlY3RlZDogdHJ1ZX0gfSwgXCJSZWFsIHRpbWVcIiksXHJcbiAgICAgICAgICAgICAgICAvLyAgICBoKCdvcHRpb24nLCB7IHByb3BzOiB7dmFsdWU6IFwiMlwifSB9LCBcIlVubGltaXRlZFwiKSxcclxuICAgICAgICAgICAgICAgIC8vXSksXHJcbiAgICAgICAgICAgICAgICBoKCdsYWJlbCcsIHsgYXR0cnM6IHtmb3I6IFwibWluXCJ9IH0sIFwiTWludXRlcyBwZXIgc2lkZTpcIiksXHJcbiAgICAgICAgICAgICAgICBoKCdzcGFuI21pbnV0ZXMnKSxcclxuICAgICAgICAgICAgICAgIGgoJ2lucHV0I21pbicsIHsgY2xhc3M6IHsgXCJzbGlkZXJcIjogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiB7bmFtZTogXCJtaW5cIiwgdHlwZTogXCJyYW5nZVwiLCBtaW46IDEsIG1heDogNjAsIHZhbHVlOiB2TWlufSxcclxuICAgICAgICAgICAgICAgICAgICBvbjogeyBpbnB1dDogKGUpID0+IHNldE1pbnV0ZXMoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhvb2s6IHtpbnNlcnQ6ICh2bm9kZSkgPT4gc2V0TWludXRlcygodm5vZGUuZWxtIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSB9LFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBoKCdsYWJlbCcsIHsgYXR0cnM6IHtmb3I6IFwiaW5jXCJ9IH0sIFwiSW5jcmVtZW50IGluIHNlY29uZHM6XCIpLFxyXG4gICAgICAgICAgICAgICAgaCgnc3BhbiNpbmNyZW1lbnQnKSxcclxuICAgICAgICAgICAgICAgIGgoJ2lucHV0I2luYycsIHsgY2xhc3M6IHtcInNsaWRlclwiOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHtuYW1lOiBcImluY1wiLCB0eXBlOiBcInJhbmdlXCIsIG1pbjogMCwgbWF4OiAxNSwgdmFsdWU6IHZJbmN9LFxyXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7IGlucHV0OiAoZSkgPT4gc2V0SW5jcmVtZW50KChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSkgfSxcclxuICAgICAgICAgICAgICAgICAgICBob29rOiB7aW5zZXJ0OiAodm5vZGUpID0+IHNldEluY3JlbWVudCgodm5vZGUuZWxtIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSB9LFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBwbGF5IHdpdGggdGhlIG1hY2hpbmVcclxuICAgICAgICAgICAgICAgIC8vIEEuSS5MZXZlbCAoMS04IGJ1dHRvbnMpXHJcbiAgICAgICAgICAgICAgICBoKCdmb3JtI2FpbGV2ZWwnLCBbXHJcbiAgICAgICAgICAgICAgICBoKCdoNCcsIFwiQS5JLiBMZXZlbFwiKSxcclxuICAgICAgICAgICAgICAgIGgoJ2Rpdi5haS1yYWRpby1ncm91cCcsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTEnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCIxXCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCIxXCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpMScsIHsgYXR0cnM6IHtmb3I6IFwiYWkxXCJ9IH0sIFwiMVwiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTInLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCIyXCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCIyXCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpMicsIHsgYXR0cnM6IHtmb3I6IFwiYWkyXCJ9IH0sIFwiMlwiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTMnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCIzXCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCIzXCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpMycsIHsgYXR0cnM6IHtmb3I6IFwiYWkzXCJ9IH0sIFwiM1wiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTQnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCI0XCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCI0XCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpNCcsIHsgYXR0cnM6IHtmb3I6IFwiYWk0XCJ9IH0sIFwiNFwiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTUnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCI1XCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCI1XCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpNScsIHsgYXR0cnM6IHtmb3I6IFwiYWk1XCJ9IH0sIFwiNVwiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTYnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCI2XCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCI2XCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpNicsIHsgYXR0cnM6IHtmb3I6IFwiYWk2XCJ9IH0sIFwiNlwiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTcnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCI3XCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCI3XCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpNycsIHsgYXR0cnM6IHtmb3I6IFwiYWk3XCJ9IH0sIFwiN1wiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTgnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCI4XCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCI4XCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpOCcsIHsgYXR0cnM6IHtmb3I6IFwiYWk4XCJ9IH0sIFwiOFwiKSxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYjY29sb3ItYnV0dG9uLWdyb3VwJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2J1dHRvbi5pY29uLmljb24tYmxhY2snLCB7IHByb3BzOiB7dHlwZTogXCJidXR0b25cIiwgdGl0bGU6IFwiQmxhY2tcIn0sIG9uOiB7Y2xpY2s6ICgpID0+IHRoaXMuY3JlYXRlU2VlaygnYicpIH0gfSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnYnV0dG9uLmljb24uaWNvbi1hZGp1c3QnLCB7IHByb3BzOiB7dHlwZTogXCJidXR0b25cIiwgdGl0bGU6IFwiUmFuZG9tXCJ9LCBvbjoge2NsaWNrOiAoKSA9PiB0aGlzLmNyZWF0ZVNlZWsoJ3InKX0gfSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnYnV0dG9uLmljb24uaWNvbi13aGl0ZScsIHsgcHJvcHM6IHt0eXBlOiBcImJ1dHRvblwiLCB0aXRsZTogXCJXaGl0ZVwifSwgb246IHtjbGljazogKCkgPT4gdGhpcy5jcmVhdGVTZWVrKCd3Jyl9IH0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgXSksXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgaCgnYnV0dG9uJywgeyBjbGFzczogeydsb2JieS1idXR0b24nOiB0cnVlfSwgb246IHtcclxuICAgICAgICAgICAgY2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbGxlbmdlQUkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhaWxldmVsJykhLnN0eWxlLmRpc3BsYXk9J25vbmUnO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMDEnKSEuc3R5bGUuZGlzcGxheT0nYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IH0sIFwiQ3JlYXRlIGEgZ2FtZVwiKSxcclxuICAgICAgICBoKCdidXR0b24nLCB7IGNsYXNzOiB7J2xvYmJ5LWJ1dHRvbic6IHRydWV9LCBvbjoge1xyXG4gICAgICAgICAgICBjbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFsbGVuZ2VBSSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWlsZXZlbCcpIS5zdHlsZS5kaXNwbGF5PSdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMDEnKSEuc3R5bGUuZGlzcGxheT0nYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IH0sIFwiUGxheSB3aXRoIHRoZSBtYWNoaW5lXCIpLFxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja1NlZWsoc2Vlaykge1xyXG4gICAgICAgIGlmIChzZWVrW1widXNlclwiXSA9PT0gdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJkZWxldGVfc2Vla1wiLCBzZWVrSUQ6IHNlZWtbXCJzZWVrSURcIl0sIHBsYXllcjogdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJhY2NlcHRfc2Vla1wiLCBzZWVrSUQ6IHNlZWtbXCJzZWVrSURcIl0sIHBsYXllcjogdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJTZWVrcyhzZWVrcykge1xyXG4gICAgICAgIC8vIFRPRE86IGZpeCBoZWFkZXIgYW5kIGRhdGEgcm93IGNvbG9tbnNcclxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNzI3MjMzMS9odG1sLXRhYmxlLXdpdGgtZml4ZWQtaGVhZGVyLWFuZC1mb290ZXItYW5kLXNjcm9sbGFibGUtYm9keS13aXRob3V0LWZpeGVkLXdpZHRoc1xyXG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGgoJ3RoZWFkJywgW2goJ3RyJyxcclxuICAgICAgICAgICAgW2goJ3RoJywgJ1BsYXllcicpLFxyXG4gICAgICAgICAgICAgaCgndGgnLCAnQ29sb3InKSxcclxuICAgICAgICAgICAgIGgoJ3RoJywgJ1JhdGluZycpLFxyXG4gICAgICAgICAgICAgaCgndGgnLCAnVGltZScpLFxyXG4gICAgICAgICAgICAgaCgndGgnLCAnICAgICcpLFxyXG4gICAgICAgICAgICAgaCgndGgnLCAnVmFyaWFudCcpLFxyXG4gICAgICAgICAgICAgaCgndGgnLCAnTW9kZScpXSldKTtcclxuICAgICAgICBjb25zdCBjb2xvckljb24gPSAoY29sb3IpID0+IHsgcmV0dXJuIGgoJ2knLCB7YXR0cnM6IHtcImRhdGEtaWNvblwiOiBjb2xvciA9PT0gXCJ3XCIgPyBcImNcIiA6IGNvbG9yID09PSBcImJcIiA/IFwiYlwiIDogXCJhXCJ9fSApOyB9O1xyXG4gICAgICAgIHNlZWtzLnNvcnQoKGEsIGIpID0+IChhLmJvdCAmJiAhYi5ib3QpID8gMSA6IC0xKTtcclxuICAgICAgICB2YXIgcm93cyA9IHNlZWtzLm1hcCgoc2VlaykgPT4gaChcclxuICAgICAgICAgICAgJ3RyJyxcclxuICAgICAgICAgICAgeyBvbjogeyBjbGljazogKCkgPT4gdGhpcy5vbkNsaWNrU2VlayhzZWVrKSB9IH0sXHJcbiAgICAgICAgICAgIFtoKCd0ZCcsIFtoKCdwbGF5ZXItdGl0bGUnLCBcIiBcIiArIHNlZWtbXCJ0aXRsZVwiXSArIFwiIFwiKSwgc2Vla1tcInVzZXJcIl1dKSxcclxuICAgICAgICAgICAgIGgoJ3RkJywgW2NvbG9ySWNvbihzZWVrW1wiY29sb3JcIl0pXSksXHJcbiAgICAgICAgICAgICBoKCd0ZCcsICcxNTAwPycpLFxyXG4gICAgICAgICAgICAgaCgndGQnLCBzZWVrW1widGNcIl0pLFxyXG4gICAgICAgICAgICAgaCgndGQnLCB7YXR0cnM6IHtcImRhdGEtaWNvblwiOiBWQVJJQU5UU1tzZWVrW1widmFyaWFudFwiXV0uaWNvbn0sIGNsYXNzOiB7XCJpY29uXCI6IHRydWV9fSApLFxyXG4gICAgICAgICAgICAgaCgndGQnLCB7YXR0cnM6IHtcImRhdGEtaWNvblwiOiAoc2Vlay5jaGVzczk2MCkgPyBcIlZcIiA6IFwiXCJ9LCBjbGFzczoge1wiaWNvblwiOiB0cnVlfX0gKSxcclxuICAgICAgICAgICAgIGgoJ3RkJywgc2Vla1tcInZhcmlhbnRcIl0pLFxyXG4gICAgICAgICAgICAgaCgndGQnLCBzZWVrW1wicmF0ZWRcIl0pIF0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIFtoZWFkZXIsIGgoJ3Rib2R5Jywgcm93cyldO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nc2dHZXRTZWVrcyA9IChtc2cpID0+IHtcclxuICAgICAgICB0aGlzLnNlZWtzID0gbXNnLnNlZWtzO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiISEhISBnb3QgZ2V0X3NlZWtzIG1zZzpcIiwgbXNnKTtcclxuICAgICAgICBjb25zdCBvbGRWTm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWVrcycpO1xyXG4gICAgICAgIGlmIChvbGRWTm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgb2xkVk5vZGUuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgICAgIHBhdGNoKG9sZFZOb2RlIGFzIEhUTUxFbGVtZW50LCBoKCd0YWJsZSNzZWVrcycsIHRoaXMucmVuZGVyU2Vla3MobXNnLnNlZWtzKSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnTmV3R2FtZSA9IChtc2cpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkxvYmJ5Q29udHJvbGxlci5vbk1zZ05ld0dhbWUoKVwiLCB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdKVxyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odGhpcy5tb2RlbFtcImhvbWVcIl0gKyAnLycgKyBtc2dbXCJnYW1lSWRcIl0pO1xyXG59XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ1VzZXJDb25uZWN0ZWQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdID0gbXNnW1widXNlcm5hbWVcIl07XHJcbiAgICAgICAgcmVuZGVyVXNlcm5hbWUodGhpcy5tb2RlbFtcImhvbWVcIl0sIHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ0NoYXQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgaWYgKG1zZy51c2VyICE9PSB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0pIHtcclxuICAgICAgICAgICAgY2hhdE1lc3NhZ2UobXNnLnVzZXIsIG1zZy5tZXNzYWdlLCBcImxvYmJ5Y2hhdFwiKTtcclxuICAgICAgICAgICAgaWYgKG1zZy51c2VyLmxlbmd0aCAhPT0gMCAmJiBtc2cudXNlciAhPT0gJ19zZXJ2ZXInKSBzb3VuZC5jaGF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nc2dGdWxsQ2hhdCA9IChtc2cpID0+IHtcclxuICAgICAgICBtc2cubGluZXMuZm9yRWFjaCgobGluZSkgPT4ge2NoYXRNZXNzYWdlKGxpbmUudXNlciwgbGluZS5tZXNzYWdlLCBcImxvYmJ5Y2hhdFwiKTt9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnUGluZyA9IChtc2cpID0+IHtcclxuICAgICAgICB0aGlzLmRvU2VuZCh7dHlwZTogXCJwb25nXCIsIHRpbWVzdGFtcDogbXNnLnRpbWVzdGFtcH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nc2dTaHV0ZG93biA9IChtc2cpID0+IHtcclxuICAgICAgICBhbGVydChtc2cubWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25NZXNzYWdlIChldnQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIjwrKysgbG9iYnkgb25NZXNzYWdlKCk6XCIsIGV2dC5kYXRhKTtcclxuICAgICAgICB2YXIgbXNnID0gSlNPTi5wYXJzZShldnQuZGF0YSk7XHJcbiAgICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiZ2V0X3NlZWtzXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnR2V0U2Vla3MobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibmV3X2dhbWVcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dOZXdHYW1lKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImxvYmJ5X3VzZXJfY29ubmVjdGVkXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnVXNlckNvbm5lY3RlZChtc2cpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsb2JieWNoYXRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dDaGF0KG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImZ1bGxjaGF0XCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnRnVsbENoYXQobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicGluZ1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ1BpbmcobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwic2h1dGRvd25cIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dTaHV0ZG93bihtc2cpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBydW5TZWVrcyh2bm9kZTogVk5vZGUsIG1vZGVsKSB7XHJcbiAgICBjb25zdCBlbCA9IHZub2RlLmVsbSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IGN0cmwgPSBuZXcgTG9iYnlDb250cm9sbGVyKGVsLCBtb2RlbCk7XHJcbiAgICBjb25zb2xlLmxvZyhcImxvYmJ5VmlldygpIC0+IHJ1blNlZWtzKClcIiwgZWwsIG1vZGVsLCBjdHJsKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYmJ5Vmlldyhtb2RlbCk6IFZOb2RlW10ge1xyXG4gICAgLy8gR2V0IHRoZSBtb2RhbFxyXG4gICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWQwMScpITtcclxuXHJcbiAgICAvLyBXaGVuIHRoZSB1c2VyIGNsaWNrcyBhbnl3aGVyZSBvdXRzaWRlIG9mIHRoZSBtb2RhbCwgY2xvc2UgaXRcclxuICAgIHdpbmRvdy5vbmNsaWNrID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09IG1vZGFsKSB7XHJcbiAgICAgICAgICAgIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFtoKCdhc2lkZS5zaWRlYmFyLWZpcnN0JywgWyBoKCdkaXYubG9iYnljaGF0I2xvYmJ5Y2hhdCcpIF0pLFxyXG4gICAgICAgICAgICBoKCdtYWluLm1haW4nLCBbIGgoJ3RhYmxlI3NlZWtzJywge2hvb2s6IHsgaW5zZXJ0OiAodm5vZGUpID0+IHJ1blNlZWtzKHZub2RlLCBtb2RlbCkgfSB9KSBdKSxcclxuICAgICAgICAgICAgaCgnYXNpZGUuc2lkZWJhci1zZWNvbmQnLCBbIGgoJ3VsI3NlZWtidXR0b25zJykgXSksXHJcbiAgICAgICAgICAgIGgoJ3VuZGVyLWxlZnQnLCBbXHJcbiAgICAgICAgICAgICAgICBoKCdhLnJlZmxpc3QnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9kaXNjb3JkLmdnL2FQczhSS3InfX0sICdEaXNjb3JkJyksXHJcbiAgICAgICAgICAgICAgICBoKCdhLnJlZmxpc3QnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9naXRodWIuY29tL2didGFtaS9weWNoZXNzLXZhcmlhbnRzJ319LCAnR2l0aHViJyksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCd1bmRlci1sb2JieScpLFxyXG4gICAgICAgICAgICBoKCd1bmRlci1yaWdodCcsIFtcclxuICAgICAgICAgICAgICAgIGgoJ2EnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsnZG9uYXRlLWJ1dHRvbic6IHRydWV9LFxyXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7aHJlZjogJ2h0dHBzOi8vd3d3LnBheXBhbC5jb20vY2dpLWJpbi93ZWJzY3I/Y21kPV9zLXhjbGljayZob3N0ZWRfYnV0dG9uX2lkPU5DNzNKWFJCUU5UQU4mc291cmNlPXVybCd9XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgJ0RpcmVjdGx5IHN1cHBvcnQgdXMnKVxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICBdO1xyXG59XHJcbiIsImltcG9ydCB7IGluaXQgfSBmcm9tICdzbmFiYmRvbSc7XHJcbmltcG9ydCBrbGFzcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2NsYXNzJztcclxuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcclxuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9wcm9wcyc7XHJcbmltcG9ydCBsaXN0ZW5lcnMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9ldmVudGxpc3RlbmVycyc7XHJcbmltcG9ydCBoIGZyb20gJ3NuYWJiZG9tL2gnO1xyXG5pbXBvcnQgeyBWTm9kZSB9IGZyb20gJ3NuYWJiZG9tL3Zub2RlJztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuaW1wb3J0IHsgYWJvdXRWaWV3IH0gZnJvbSAnLi9hYm91dCc7XHJcbmltcG9ydCB7IGxvYmJ5VmlldyB9IGZyb20gJy4vbG9iYnknO1xyXG5pbXBvcnQgeyByb3VuZFZpZXcgfSBmcm9tICcuL3JvdW5kJztcclxuaW1wb3J0IHsgZ2FtZXNWaWV3IH0gZnJvbSAnLi9nYW1lcyc7XHJcbmltcG9ydCB7IGFuYWx5c2lzVmlldyB9IGZyb20gJy4vYW5hbHlzaXMnO1xyXG5pbXBvcnQgeyBwbGF5ZXJzVmlldyB9IGZyb20gJy4vcGxheWVycyc7XHJcbmltcG9ydCB7IHByb2ZpbGVWaWV3IH0gZnJvbSAnLi9wcm9maWxlJztcclxuXHJcbmNvbnN0IG1vZGVsID0ge2hvbWU6IFwiXCIsIHVzZXJuYW1lOiBcIlwiLCBhbm9uOiBcIlwiLCB2YXJpYW50OiBcIlwiLCBnYW1lSWQ6IDAsIHdwbGF5ZXI6IFwiXCIsIGJwbGF5ZXI6IFwiXCIsIGZlbjogXCJcIiwgYmFzZTogXCJcIiwgaW5jOiBcIlwiLCBzZWVrczogW10sIHR2OiBcIlwiLCBwcm9maWxlaWQ6IFwiXCIsIHN0YXR1czogXCJcIn07XHJcblxyXG52YXIgZ2V0Q29va2llID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgdmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcclxuICAgIGZvcih2YXIgaT0wIDsgaSA8IGNvb2tpZXMubGVuZ3RoIDsgKytpKSB7XHJcbiAgICAgICAgdmFyIHBhaXIgPSBjb29raWVzW2ldLnRyaW0oKS5zcGxpdCgnPScpO1xyXG4gICAgICAgIGlmKHBhaXJbMF0gPT0gbmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHBhaXJbMV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZpZXcoZWwsIG1vZGVsKTogVk5vZGUge1xyXG4gICAgY29uc3QgdXNlciA9IGdldENvb2tpZShcInVzZXJcIik7XHJcbiAgICBpZiAodXNlciAhPT0gXCJcIikgbW9kZWxbXCJ1c2VybmFtZVwiXSA9IHVzZXI7XHJcblxyXG4gICAgbW9kZWxbXCJob21lXCJdID0gZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1ob21lXCIpO1xyXG4gICAgbW9kZWxbXCJhbm9uXCJdID0gZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1hbm9uXCIpO1xyXG4gICAgbW9kZWxbXCJwcm9maWxlaWRcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXByb2ZpbGVcIik7XHJcbiAgICBtb2RlbFtcInZhcmlhbnRcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXZhcmlhbnRcIik7XHJcbiAgICBtb2RlbFtcImNoZXNzOTYwXCJdID0gZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1jaGVzczk2MFwiKTtcclxuICAgIG1vZGVsW1wibGV2ZWxcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWxldmVsXCIpO1xyXG4gICAgbW9kZWxbXCJ1c2VybmFtZVwiXSA9IHVzZXIgIT09IFwiXCIgPyB1c2VyIDogZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS11c2VyXCIpO1xyXG4gICAgbW9kZWxbXCJnYW1lSWRcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWdhbWVpZFwiKTtcclxuICAgIG1vZGVsW1wid3BsYXllclwiXSA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtd3BsYXllclwiKTtcclxuICAgIG1vZGVsW1wid3RpdGxlXCJdID0gZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS13dGl0bGVcIik7XHJcbiAgICBtb2RlbFtcImJwbGF5ZXJcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWJwbGF5ZXJcIik7XHJcbiAgICBtb2RlbFtcImJ0aXRsZVwiXSA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtYnRpdGxlXCIpO1xyXG4gICAgbW9kZWxbXCJmZW5cIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWZlblwiKTtcclxuICAgIG1vZGVsW1wiYmFzZVwiXSA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtYmFzZVwiKTtcclxuICAgIG1vZGVsW1wiaW5jXCJdID0gZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1pbmNcIik7XHJcbiAgICBtb2RlbFtcInJlc3VsdFwiXSA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtcmVzdWx0XCIpO1xyXG4gICAgbW9kZWxbXCJzdGF0dXNcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXN0YXR1c1wiKTtcclxuICAgIG1vZGVsW1wiZGF0ZVwiXSA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtZGF0ZVwiKTtcclxuICAgIG1vZGVsW1widHZcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXZpZXdcIikgPT09ICd0dic7XHJcblxyXG4gICAgc3dpdGNoIChlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXZpZXdcIikpIHtcclxuICAgIGNhc2UgJ2Fib3V0JzpcclxuICAgICAgICByZXR1cm4gaCgnZGl2I3BsYWNlaG9sZGVyLm1haW4td3JhcHBlcicsIGFib3V0Vmlldyhtb2RlbCkpO1xyXG4gICAgY2FzZSAnaG93dG9wbGF5JzpcclxuICAgICAgICByZXR1cm4gaCgnaWZyYW1lJywge3Byb3BzOiB7c3JjOiBtb2RlbFtcImhvbWVcIl0gKyBcIi9zdGF0aWMvZG9jcy92YXJpYW50cy5odG1sXCIsIGhlaWdodDogXCIxMDAlXCIsIHdpZHRoOlwiMTAwJVwiLCBzZWFtbGVzczogXCJcIn19KTtcclxuICAgIGNhc2UgJ3BsYXllcnMnOlxyXG4gICAgICAgIHJldHVybiBoKCdkaXYjcGxhY2Vob2xkZXIucGxheWVycy13cmFwcGVyJywgcGxheWVyc1ZpZXcobW9kZWwpKTtcclxuICAgIGNhc2UgJ3Byb2ZpbGUnOlxyXG4gICAgICAgIHJldHVybiBoKCdkaXYjcGxhY2Vob2xkZXIucHJvZmlsZS13cmFwcGVyJywgcHJvZmlsZVZpZXcobW9kZWwpKTtcclxuICAgIGNhc2UgJ2xldmVsOHdpbic6XHJcbiAgICAgICAgcmV0dXJuIGgoJ2RpdiNwbGFjZWhvbGRlci5wcm9maWxlLXdyYXBwZXInLCBwcm9maWxlVmlldyhtb2RlbCkpO1xyXG4gICAgY2FzZSAndHYnOlxyXG4gICAgY2FzZSAncm91bmQnOlxyXG4gICAgICAgIHJldHVybiBoKCdkaXYjcGxhY2Vob2xkZXIubWFpbi13cmFwcGVyJywgcm91bmRWaWV3KG1vZGVsKSk7XHJcbiAgICBjYXNlICdhbmFseXNpcyc6XHJcbiAgICAgICAgcmV0dXJuIGgoJ2RpdiNwbGFjZWhvbGRlci5tYWluLXdyYXBwZXInLCBhbmFseXNpc1ZpZXcobW9kZWwpKTtcclxuICAgIGNhc2UgJ2dhbWVzJzpcclxuICAgICAgICByZXR1cm4gaCgnZGl2I3BsYWNlaG9sZGVyJywgZ2FtZXNWaWV3KG1vZGVsKSk7XHJcbiAgICBjYXNlICd0aGFua3MnOlxyXG4gICAgICAgIHJldHVybiBoKCdkaXYjcGxhY2Vob2xkZXIubWFpbi13cmFwcGVyJywgaCgnaDInLCAnVGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhJykpO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gaCgnZGl2I3BsYWNlaG9sZGVyLm1haW4td3JhcHBlcicsIGxvYmJ5Vmlldyhtb2RlbCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdweWNoZXNzLXZhcmlhbnRzJyk7XHJcbmlmIChlbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcclxuICAgIHBhdGNoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGFjZWhvbGRlcicpIGFzIEhUTUxFbGVtZW50LCB2aWV3KGVsLCBtb2RlbCkpO1xyXG59XHJcbiIsImltcG9ydCB7IGluaXQgfSBmcm9tIFwic25hYmJkb21cIjtcbmltcG9ydCBrbGFzcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2NsYXNzJztcbmltcG9ydCBhdHRyaWJ1dGVzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvYXR0cmlidXRlcyc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL3Byb3BzJztcbmltcG9ydCBsaXN0ZW5lcnMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9ldmVudGxpc3RlbmVycyc7XG5cbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xuXG5pbXBvcnQgaCBmcm9tICdzbmFiYmRvbS9oJztcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSAnc25hYmJkb20vdm5vZGUnO1xuXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJ2NoZXNzZ3JvdW5keC90eXBlcyc7XG5cbmltcG9ydCB7IGdlYXJCdXR0b24sIHRvZ2dsZU9yaWVudGF0aW9uIH0gZnJvbSAnLi9zZXR0aW5ncyc7XG5pbXBvcnQgUm91bmRDb250cm9sbGVyIGZyb20gJy4vcm91bmRDdHJsJztcbmltcG9ydCBBbmFseXNpc0NvbnRyb2xsZXIgZnJvbSAnLi9hbmFseXNpc0N0cmwnO1xuXG5cbmludGVyZmFjZSBFdmFsIHtcbiAgY3A/OiBudW1iZXI7XG4gIG1hdGU/OiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIHRvUG92KGNvbG9yOiBDb2xvciwgZGlmZjogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gZGlmZiA6IC1kaWZmO1xufVxuXG5mdW5jdGlvbiByYXdXaW5uaW5nQ2hhbmNlcyhjcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIDIgLyAoMSArIE1hdGguZXhwKC0wLjAwNCAqIGNwKSkgLSAxO1xufVxuXG5mdW5jdGlvbiBjcFdpbm5pbmdDaGFuY2VzKGNwOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gcmF3V2lubmluZ0NoYW5jZXMoTWF0aC5taW4oTWF0aC5tYXgoLTEwMDAsIGNwKSwgMTAwMCkpO1xufVxuXG5mdW5jdGlvbiBtYXRlV2lubmluZ0NoYW5jZXMobWF0ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgdmFyIGNwID0gKDIxIC0gTWF0aC5taW4oMTAsIE1hdGguYWJzKG1hdGUpKSkgKiAxMDA7XG4gIHZhciBzaWduZWQgPSBjcCAqIChtYXRlID4gMCA/IDEgOiAtMSk7XG4gIHJldHVybiByYXdXaW5uaW5nQ2hhbmNlcyhzaWduZWQpO1xufVxuXG5mdW5jdGlvbiBldmFsV2lubmluZ0NoYW5jZXMoZXY6IEV2YWwpOiBudW1iZXIge1xuICByZXR1cm4gdHlwZW9mIGV2Lm1hdGUgIT09ICd1bmRlZmluZWQnID8gbWF0ZVdpbm5pbmdDaGFuY2VzKGV2Lm1hdGUpIDogY3BXaW5uaW5nQ2hhbmNlcyhldi5jcCEpO1xufVxuXG4vLyB3aW5uaW5nIGNoYW5jZXMgZm9yIGEgY29sb3Jcbi8vIDEgIGluZmluaXRlbHkgd2lubmluZ1xuLy8gLTEgaW5maW5pdGVseSBsb3NpbmdcbmV4cG9ydCBmdW5jdGlvbiBwb3ZDaGFuY2VzKGNvbG9yOiBDb2xvciwgZXY6IEV2YWwpIHtcbiAgcmV0dXJuIHRvUG92KGNvbG9yLCBldmFsV2lubmluZ0NoYW5jZXMoZXYpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdE1vdmUgKGN0cmwsIHBseSkge1xuICAgIGNvbnN0IGFjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2xpLm1vdmUuYWN0aXZlJyk7XG4gICAgaWYgKGFjdGl2ZSkgYWN0aXZlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuXG4gICAgY29uc3QgZWxQbHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBsaS5tb3ZlW3BseT1cIiR7cGx5fVwiXWApO1xuICAgIGlmIChlbFBseSkgZWxQbHkuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG5cbiAgICBjb25zdCBnYXVnZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dhdWdlJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKGdhdWdlRWwpIHtcbiAgICAgICAgY29uc3QgYmxhY2tFbCA9IGdhdWdlRWwucXVlcnlTZWxlY3RvcignZGl2LmJsYWNrJykgYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChibGFja0VsICYmIGN0cmwuc3RlcHNbcGx5XVsnY2V2YWwnXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YXIgc2NvcmUgPSBjdHJsLnN0ZXBzW3BseV1bJ2NldmFsJ11bJ3Njb3JlJ107XG4gICAgICAgICAgICBpZiAoc2NvcmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ID0gcG92Q2hhbmNlcyhjdHJsLnN0ZXBzW3BseV1bJ3R1cm5Db2xvciddLCBzY29yZSk7XG4gICAgICAgICAgICAgICAgYmxhY2tFbC5zdHlsZS5oZWlnaHQgPSBTdHJpbmcoMTAwIC0gKGV2ICsgMSkgKiA1MCkgKyAnJSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJsYWNrRWwuc3R5bGUuaGVpZ2h0ID0gJzUwJSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3RybC5nb1BseShwbHkpXG4gICAgc2Nyb2xsVG9QbHkoY3RybCk7XG5cbiAgICBpZiAoY3RybCBpbnN0YW5jZW9mIEFuYWx5c2lzQ29udHJvbGxlcikge1xuICAgICAgICBjb25zdCBoYyA9IGN0cmwuYW5hbHlzaXNDaGFydDtcbiAgICAgICAgY29uc3QgaGNQdCA9IGhjLnNlcmllc1swXS5kYXRhW3BseV07XG4gICAgICAgIGhjUHQuc2VsZWN0KCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1BseSAoY3RybCkge1xuICAgIGlmIChjdHJsLnN0ZXBzLmxlbmd0aCA8IDkpIHJldHVybjtcbiAgICBjb25zdCBtb3Zlc0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmVzJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgcGx5RWwgPSBtb3Zlc0VsLnF1ZXJ5U2VsZWN0b3IoJ2xpLm1vdmUuYWN0aXZlJykgYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBtb3ZlbGlzdGJsb2NrRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZWxpc3QtYmxvY2snKSBhcyBIVE1MRWxlbWVudDtcbiAgICBsZXQgc3Q6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChjdHJsLnBseSA9PSAwKSBzdCA9IDA7XG4gICAgZWxzZSBpZiAoY3RybC5wbHkgPT0gY3RybC5zdGVwcy5sZW5ndGggLSAxKSBzdCA9IDk5OTk5O1xuICAgIGVsc2UgaWYgKHBseUVsKSBzdCA9IHBseUVsLm9mZnNldFRvcCAtIG1vdmVsaXN0YmxvY2tFbC5vZmZzZXRIZWlnaHQgKyBwbHlFbC5vZmZzZXRIZWlnaHQ7XG5cbiAgICBpZiAodHlwZW9mIHN0ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChwbHlFbCAmJiBjdHJsIGluc3RhbmNlb2YgUm91bmRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICB2YXIgaXNTbW9vdGhTY3JvbGxTdXBwb3J0ZWQgPSAnc2Nyb2xsQmVoYXZpb3InIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTtcbiAgICAgICAgICAgIGlmKGlzU21vb3RoU2Nyb2xsU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgcGx5RWwuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiBcInNtb290aFwiLCBibG9jazogXCJjZW50ZXJcIn0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwbHlFbC5zY3JvbGxJbnRvVmlldyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb3ZlbGlzdGJsb2NrRWwuc2Nyb2xsVG9wID0gc3Q7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlbGlzdFZpZXcgKGN0cmwpIHtcbiAgICBjdHJsLnZnZWFyID0gZ2VhckJ1dHRvbihjdHJsKTtcbiAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmUtY29udHJvbHMnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjdHJsLm1vdmVDb250cm9scyA9IHBhdGNoKGNvbnRhaW5lciwgaCgnZGl2LmJ0bi1jb250cm9scycsIFtcbiAgICAgICAgICAgIGgoJ2J1dHRvbiNmbGlwJywgeyBvbjogeyBjbGljazogKCkgPT4gdG9nZ2xlT3JpZW50YXRpb24oY3RybCkgfSB9LCBbaCgnaScsIHtwcm9wczoge3RpdGxlOiAnRmxpcCBib2FyZCd9LCBjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tcmVmcmVzaFwiOiB0cnVlfSB9ICksIF0pLFxuICAgICAgICAgICAgaCgnYnV0dG9uJywgeyBvbjogeyBjbGljazogKCkgPT4gc2VsZWN0TW92ZShjdHJsLCAwKSB9IH0sIFtoKCdpJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1mYXN0LWJhY2t3YXJkXCI6IHRydWV9IH0gKSwgXSksXG4gICAgICAgICAgICBoKCdidXR0b24nLCB7IG9uOiB7IGNsaWNrOiAoKSA9PiBzZWxlY3RNb3ZlKGN0cmwsIE1hdGgubWF4KGN0cmwucGx5IC0gMSwgMCkpIH0gfSwgW2goJ2knLCB7Y2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLXN0ZXAtYmFja3dhcmRcIjogdHJ1ZX0gfSApLCBdKSxcbiAgICAgICAgICAgIGgoJ2J1dHRvbicsIHsgb246IHsgY2xpY2s6ICgpID0+IHNlbGVjdE1vdmUoY3RybCwgTWF0aC5taW4oY3RybC5wbHkgKyAxLCBjdHJsLnN0ZXBzLmxlbmd0aCAtIDEpKSB9IH0sIFtoKCdpJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1zdGVwLWZvcndhcmRcIjogdHJ1ZX0gfSApLCBdKSxcbiAgICAgICAgICAgIGgoJ2J1dHRvbicsIHsgb246IHsgY2xpY2s6ICgpID0+IHNlbGVjdE1vdmUoY3RybCwgY3RybC5zdGVwcy5sZW5ndGggLSAxKSB9IH0sIFtoKCdpJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1mYXN0LWZvcndhcmRcIjogdHJ1ZX0gfSApLCBdKSxcbiAgICAgICAgICAgIGN0cmwudmdlYXIsXG4gICAgICAgIF0pXG4gICAgKTtcbiAgICBpZiAoY3RybCBpbnN0YW5jZW9mIFJvdW5kQ29udHJvbGxlcikge1xuICAgICAgICByZXR1cm4gaCgnZGl2I21vdmVzJywgW2goJ29sLm1vdmVsaXN0I21vdmVsaXN0JyldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaCgnZGl2LmFuYWwjbW92ZXMnLCBbaCgnb2wubW92ZWxpc3QjbW92ZWxpc3QnKV0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZU1vdmVsaXN0IChjdHJsLCBwbHlGcm9tLCBwbHlUbykge1xuICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZWxpc3QnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBhY3RpdmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdsaS5tb3ZlLmFjdGl2ZScpO1xuICAgIGlmIChhY3RpdmUpIGFjdGl2ZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcblxuICAgIHZhciBtb3ZlczogVk5vZGVbXSA9IFtdO1xuICAgIHZhciBwbHksIG1vdmUsIG1vdmVFbCwgZWw7XG4gICAgZm9yIChwbHkgPSBwbHlGcm9tOyBwbHkgPCBwbHlUbzsgcGx5KyspIHtcblxuICAgICAgICBtb3ZlID0gY3RybC5zdGVwc1twbHldWydzYW4nXTtcbiAgICAgICAgaWYgKG1vdmUgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgIG1vdmVFbCA9IFtoKCdzYW4nLCBtb3ZlKV07XG4gICAgICAgIC8vdmFyIGNldmFsID0gY3RybC5zdGVwc1twbHldWydldmFsJ107XG4gICAgICAgIC8vaWYgKGNldmFsID09PSBudWxsKSBjZXZhbCA9ICcnO1xuICAgICAgICBtb3ZlRWwucHVzaChoKCdldmFsI3BseScgKyBTdHJpbmcocGx5KSwgJycpKTtcbiAgICAgICAgY29uc3QgcCA9IHBseTtcbiAgICAgICAgZWwgPSBoKCdsaS5tb3ZlJywge2NsYXNzOiB7YWN0aXZlOiAocGx5ID09PSBwbHlUbyAtIDEpfSwgYXR0cnM6IHtwbHk6IHBseX0sIG9uOiB7IGNsaWNrOiAoKSA9PiBzZWxlY3RNb3ZlKGN0cmwsIHApIH19LCBtb3ZlRWwpO1xuICAgICAgICBpZiAocGx5ICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgbW92ZXMucHVzaChoKCdsaS5tb3ZlLmNvdW50ZXInLCAocGx5ICsgMSkgLyAyKSk7XG4gICAgICAgIH1cbiAgICAgICAgbW92ZXMucHVzaChlbCk7XG4gICAgfVxuICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnb2wubW92ZWxpc3QjbW92ZWxpc3QnLCBtb3ZlcykpO1xuICAgIHNjcm9sbFRvUGx5KGN0cmwpO1xufSIsImltcG9ydCBoIGZyb20gJ3NuYWJiZG9tL2gnO1xuXG5leHBvcnQgZnVuY3Rpb24gcGxheWVyKGlkLCB0aXRsZSwgbmFtZSwgbGV2ZWwpIHtcbiAgICByZXR1cm4gaCgncm91bmQtcGxheWVyJywgW1xuICAgICAgICBoKCdkaXYucGxheWVyLWRhdGEnLCBbXG4gICAgICAgICAgICBoKCdpLXNpZGUub25saW5lIycgKyBpZCwge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1vbmxpbmVcIjogZmFsc2UsIFwiaWNvbi1vZmZsaW5lXCI6IHRydWV9fSksXG4gICAgICAgICAgICBoKCdwbGF5ZXInLCBbXG4gICAgICAgICAgICAgICAgaCgnYS51c2VyLWxpbmsnLCB7YXR0cnM6IHtocmVmOiAnL0AvJyArIG5hbWV9fSwgW1xuICAgICAgICAgICAgICAgICAgICBoKCdwbGF5ZXItdGl0bGUnLCBcIiBcIiArIHRpdGxlICsgXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBuYW1lICsgKCh0aXRsZSA9PT0gXCJCT1RcIiAmJiBsZXZlbCA+IDApID8gJyBsZXZlbCAnICsgbGV2ZWw6ICcnKSxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBoKCdyYXRpbmcnLCBcIjE1MDA/XCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIF0pLFxuICAgIF0pO1xufVxuIiwiaW1wb3J0IHsgaW5pdCB9IGZyb20gJ3NuYWJiZG9tJztcclxuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xyXG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xyXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL3Byb3BzJztcclxuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuaW1wb3J0IGggZnJvbSAnc25hYmJkb20vaCc7XHJcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSAnc25hYmJkb20vdm5vZGUnO1xyXG5cclxuaW1wb3J0IHsgcmVuZGVyVXNlcm5hbWUgfSBmcm9tICcuL3VzZXInO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHJlbmRlclBsYXllcnMocGxheWVycykge1xyXG4gICAgdmFyIHJvd3MgPSBwbGF5ZXJzLm1hcChcclxuICAgICAgICAocGxheWVyKSA9PiBoKCd0cicsIFtcclxuICAgICAgICAgICAgaCgndGQucGxheWVyLWRhdGEnLCBbXHJcbiAgICAgICAgICAgICAgICBoKCdpLXNpZGUub25saW5lJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1vbmxpbmVcIjogcGxheWVyW1wib25saW5lXCJdLCBcImljb24tb2ZmbGluZVwiOiAhcGxheWVyW1wib25saW5lXCJdfX0pLFxyXG4gICAgICAgICAgICAgICAgaCgncGxheWVyJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2EudXNlci1saW5rJywge2F0dHJzOiB7aHJlZjogJy9ALycgKyBwbGF5ZXJbXCJfaWRcIl19fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdwbGF5ZXItdGl0bGUnLCBcIiBcIiArIHBsYXllcltcInRpdGxlXCJdICsgXCIgXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJbXCJfaWRcIl0sXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICByZXR1cm4gcm93cztcclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyQWxsUGxheWVycyhwbGF5ZXJzKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIGgoJ3RoZWFkJywgW2goJ3RyJywgW2goJ3RoJywgJ09ubGluZScpLCBdKV0pLCBoKCd0Ym9keScsIHJlbmRlclBsYXllcnMocGxheWVycy5maWx0ZXIoKHBsYXllcikgPT4gcGxheWVyW1wib25saW5lXCJdKSkpLFxyXG4gICAgICAgIGgoJ2hyJyksXHJcbiAgICAgICAgaCgndGhlYWQnLCBbaCgndHInLCBbaCgndGgnLCAnT2ZmbGluZScpLCBdKV0pLCBoKCd0Ym9keScsIHJlbmRlclBsYXllcnMocGxheWVycy5maWx0ZXIoKHBsYXllcikgPT4gIXBsYXllcltcIm9ubGluZVwiXSkpKVxyXG4gICAgXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBsYXllcnNWaWV3KG1vZGVsKTogVk5vZGVbXSB7XHJcbiAgICByZW5kZXJVc2VybmFtZShtb2RlbFtcImhvbWVcIl0sIG1vZGVsW1widXNlcm5hbWVcIl0pO1xyXG5cclxuICAgIHZhciB4bWxodHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB2YXIgdXJsID0gbW9kZWxbXCJob21lXCJdICsgXCIvYXBpL3BsYXllcnNcIjtcclxuXHJcbiAgICB4bWxodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgdmFyIG15QXJyID0gSlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgbXlGdW5jdGlvbihteUFycik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB4bWxodHRwLm9wZW4oXCJHRVRcIiwgdXJsLCB0cnVlKTtcclxuICAgIHhtbGh0dHAuc2VuZCgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIG15RnVuY3Rpb24oYXJyKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkVk5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVycycpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFycik7XHJcbiAgICAgICAgaWYgKG9sZFZOb2RlIGluc3RhbmNlb2YgRWxlbWVudCkge1xyXG4gICAgICAgICAgICBwYXRjaChvbGRWTm9kZSBhcyBIVE1MRWxlbWVudCwgaCgndGFibGUjcGxheWVycycsIHJlbmRlckFsbFBsYXllcnMoYXJyKSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhtb2RlbCk7XHJcbiAgICByZXR1cm4gW2goJ2FzaWRlLnNpZGViYXItZmlyc3QnKSxcclxuICAgICAgICAgICAgaCgnbWFpbi5wbGF5ZXJzJywgW2goJ3RhYmxlI3BsYXllcnMnKV0pLFxyXG4gICAgICAgICAgICBoKCdhc2lkZS5zaWRlYmFyLXNlY29uZCcpLFxyXG4gICAgICAgIF07XHJcbn1cclxuIiwiaW1wb3J0IHsgaCwgaW5pdCB9IGZyb20gXCJzbmFiYmRvbVwiO1xuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvcHJvcHMnO1xuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcblxuaW1wb3J0ICogYXMgY2cgZnJvbSAnY2hlc3Nncm91bmR4L3R5cGVzJztcbmltcG9ydCB7IGRyYWdOZXdQaWVjZSB9IGZyb20gJ2NoZXNzZ3JvdW5keC9kcmFnJztcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnY2hlc3Nncm91bmR4L3R5cGVzJztcbi8vaW1wb3J0IHsgc2V0RHJvcE1vZGUsIGNhbmNlbERyb3BNb2RlIH0gZnJvbSAnY2hlc3Nncm91bmR4L2Ryb3AnO1xuXG5pbXBvcnQgeyByb2xlVG9TYW4sIG5lZWRQb2NrZXRzLCBwb2NrZXRSb2xlcywgbGMgfSBmcm9tICcuL2NoZXNzJztcbmltcG9ydCBSb3VuZENvbnRyb2xsZXIgZnJvbSAnLi9yb3VuZEN0cmwnO1xuaW1wb3J0IEFuYWx5c2lzQ29udHJvbGxlciBmcm9tICcuL2FuYWx5c2lzQ3RybCc7XG5cbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xuXG50eXBlIFBvc2l0aW9uID0gJ3RvcCcgfCAnYm90dG9tJztcblxuY29uc3QgZXZlbnROYW1lcyA9IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBvY2tldFZpZXcoY3RybDogUm91bmRDb250cm9sbGVyIHwgQW5hbHlzaXNDb250cm9sbGVyLCBjb2xvcjogQ29sb3IsIHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICBjb25zdCBwb2NrZXQgPSBjdHJsLnBvY2tldHNbcG9zaXRpb24gPT09ICd0b3AnID8gMCA6IDFdO1xuICBjb25zdCBwaWVjZVJvbGVzID0gT2JqZWN0LmtleXMocG9ja2V0KTtcbiAgcmV0dXJuIGgoJ2Rpdi5wb2NrZXQuJyArIHBvc2l0aW9uLCB7XG4gICAgY2xhc3M6IHsgdXNhYmxlOiB0cnVlIH0sXG4gICAgaG9vazoge1xuICAgICAgaW5zZXJ0OiB2bm9kZSA9PiB7XG4gICAgICAgIGV2ZW50TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAodm5vZGUuZWxtIGFzIEhUTUxFbGVtZW50KS5hZGRFdmVudExpc3RlbmVyKG5hbWUsIChlOiBjZy5Nb3VjaEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb24gPT09IChjdHJsLmZsaXAgPyAndG9wJyA6ICdib3R0b20nKSkgZHJhZyhjdHJsLCBlKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHBpZWNlUm9sZXMubWFwKHJvbGUgPT4ge1xuICAgIGxldCBuYiA9IHBvY2tldFtyb2xlXSB8fCAwO1xuICAgIHJldHVybiBoKCdwaWVjZS4nICsgcm9sZSArICcuJyArIGNvbG9yLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICAnZGF0YS1yb2xlJzogcm9sZSxcbiAgICAgICAgJ2RhdGEtY29sb3InOiBjb2xvcixcbiAgICAgICAgJ2RhdGEtbmInOiBuYixcbiAgICAgIH1cbiAgICB9KTtcbiAgfSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJhZyhjdHJsOiBSb3VuZENvbnRyb2xsZXIgfCBBbmFseXNpc0NvbnRyb2xsZXIsIGU6IGNnLk1vdWNoRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZS5idXR0b24gIT09IHVuZGVmaW5lZCAmJiBlLmJ1dHRvbiAhPT0gMCkgcmV0dXJuOyAvLyBvbmx5IHRvdWNoIG9yIGxlZnQgY2xpY2tcbiAgICBjb25zdCBlbCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgIHJvbGUgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm9sZScpIGFzIGNnLlJvbGUsXG4gICAgY29sb3IgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sb3InKSBhcyBjZy5Db2xvcixcbiAgICBudW1iZXIgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmInKTtcbiAgICBpZiAoIXJvbGUgfHwgIWNvbG9yIHx8IG51bWJlciA9PT0gJzAnKSByZXR1cm47XG4gICAgaWYgKGN0cmwuY2xpY2tEcm9wICE9PSB1bmRlZmluZWQgJiYgcm9sZSA9PT0gY3RybC5jbGlja0Ryb3Aucm9sZSkge1xuICAgICAgICBjdHJsLmNsaWNrRHJvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY3RybC5jaGVzc2dyb3VuZC5zZWxlY3RTcXVhcmUobnVsbCk7XG4gICAgICAgIC8vY2FuY2VsRHJvcE1vZGUoY3RybC5jaGVzc2dyb3VuZC5zdGF0ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvL3NldERyb3BNb2RlKGN0cmwuY2hlc3Nncm91bmQuc3RhdGUsIG51bWJlciAhPT0gJzAnID8geyBjb2xvciwgcm9sZSB9IDogdW5kZWZpbmVkKTtcbiAgICB9O1xuXG4gICAgLy8gU2hvdyBwb3NzaWJsZSBkcm9wIGRlc3RzIG9uIG15IHR1cm4gb25seSBub3QgdG8gbWVzcyB1cCBwcmVkcm9wXG4gICAgaWYgKGN0cmwudHVybkNvbG9yID09PSBjdHJsLm15Y29sb3IpIHtcbiAgICAgICAgY29uc3QgZHJvcERlc3RzID0geyAnejAnOiBjdHJsLmRlc3RzW3JvbGVUb1Nhbltyb2xlXSArIFwiQFwiXSB9O1xuICAgICAgICBjb25zb2xlLmxvZyhcIiAgICAgbmV3IHBpZWNlIHRvIHowXCIsIHJvbGUpO1xuICAgICAgICBjdHJsLmNoZXNzZ3JvdW5kLm5ld1BpZWNlKHtcInJvbGVcIjogcm9sZSwgXCJjb2xvclwiOiBjb2xvcn0sICd6MCcpXG4gICAgICAgIGN0cmwuY2hlc3Nncm91bmQuc2V0KHtcbiAgICAgICAgICAgIHR1cm5Db2xvcjogY29sb3IsXG4gICAgICAgICAgICBtb3ZhYmxlOiB7XG4gICAgICAgICAgICAgICAgZGVzdHM6IGRyb3BEZXN0cyxcbiAgICAgICAgICAgICAgICBzaG93RGVzdHM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY3RybC5jaGVzc2dyb3VuZC5zZWxlY3RTcXVhcmUoJ3owJyk7XG4gICAgICAgIGN0cmwuY2hlc3Nncm91bmQuc2V0KHsgbGFzdE1vdmU6IGN0cmwubGFzdG1vdmUgfSk7XG4gICAgfVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGRyYWdOZXdQaWVjZShjdHJsLmNoZXNzZ3JvdW5kLnN0YXRlLCB7IGNvbG9yLCByb2xlIH0sIGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJvcElzVmFsaWQoZGVzdHM6IGNnLkRlc3RzLCByb2xlOiBjZy5Sb2xlLCBrZXk6IGNnLktleSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRyb3BzID0gZGVzdHNbcm9sZVRvU2FuW3JvbGVdICsgXCJAXCJdO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZHJvcHM6XCIsIGRyb3BzKVxuXG4gICAgaWYgKGRyb3BzID09PSB1bmRlZmluZWQgfHwgZHJvcHMgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBkcm9wcy5pbmRleE9mKGtleSkgIT09IC0xO1xufVxuXG4vLyBUT0RPOiBhZnRlciAxIG1vdmUgbWFkZSBvbmx5IDEgcG9ja2V0IHVwZGF0ZSBuZWVkZWQgYXQgb25jZSwgbm8gbmVlZCB0byB1cGRhdGUgYm90aFxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVBvY2tldHMoY3RybDogUm91bmRDb250cm9sbGVyIHwgQW5hbHlzaXNDb250cm9sbGVyLCB2cG9ja2V0MCwgdnBvY2tldDEpOiB2b2lkIHtcbiAgICAvLyB1cGRhdGUgcG9ja2V0cyBmcm9tIGZlblxuICAgIGlmIChuZWVkUG9ja2V0cyhjdHJsLnZhcmlhbnQpKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gY3RybC5mdWxsZmVuLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgY29uc3QgZmVuX3BsYWNlbWVudCA9IHBhcnRzWzBdO1xuICAgICAgICB2YXIgcG9ja2V0cyA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGJyYWNrZXRQb3MgPSBmZW5fcGxhY2VtZW50LmluZGV4T2YoXCJbXCIpO1xuICAgICAgICBpZiAoYnJhY2tldFBvcyAhPT0gLTEpIHtcbiAgICAgICAgICAgIHBvY2tldHMgPSBmZW5fcGxhY2VtZW50LnNsaWNlKGJyYWNrZXRQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYyA9IGN0cmwubXljb2xvclswXTtcbiAgICAgICAgY29uc3QgbyA9IGN0cmwub3BwY29sb3JbMF07XG4gICAgICAgIGNvbnN0IHJvbGVzID0gcG9ja2V0Um9sZXMoY3RybC52YXJpYW50KTtcbiAgICAgICAgdmFyIHBvID0ge307XG4gICAgICAgIHZhciBwYyA9IHt9O1xuICAgICAgICByb2xlcy5mb3JFYWNoKHJvbGUgPT4gcGNbcm9sZV0gPSBsYyhwb2NrZXRzLCByb2xlVG9TYW5bcm9sZV0udG9Mb3dlckNhc2UoKSwgYz09PShjdHJsLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykgPyAnYicgOiAndycpKSk7XG4gICAgICAgIHJvbGVzLmZvckVhY2gocm9sZSA9PiBwb1tyb2xlXSA9IGxjKHBvY2tldHMsIHJvbGVUb1Nhbltyb2xlXS50b0xvd2VyQ2FzZSgpLCBvPT09KGN0cmwudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/ICdiJyA6ICd3JykpKTtcbiAgICAgICAgaWYgKGN0cmwuZmxpcCkge1xuICAgICAgICAgICAgY3RybC5wb2NrZXRzID0gW3BjLCBwb107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdHJsLnBvY2tldHMgPSBbcG8sIHBjXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhvLGMscG8scGMpXG4gICAgICAgIGN0cmwudnBvY2tldDAgPSBwYXRjaCh2cG9ja2V0MCwgcG9ja2V0VmlldyhjdHJsLCBjdHJsLmZsaXAgPyBjdHJsLm15Y29sb3IgOiBjdHJsLm9wcGNvbG9yLCBcInRvcFwiKSk7XG4gICAgICAgIGN0cmwudnBvY2tldDEgPSBwYXRjaCh2cG9ja2V0MSwgcG9ja2V0VmlldyhjdHJsLCBjdHJsLmZsaXAgPyBjdHJsLm9wcGNvbG9yIDogY3RybC5teWNvbG9yLCBcImJvdHRvbVwiKSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaW5pdCB9IGZyb20gJ3NuYWJiZG9tJztcclxuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xyXG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xyXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL3Byb3BzJztcclxuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuaW1wb3J0IGggZnJvbSAnc25hYmJkb20vaCc7XHJcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSAnc25hYmJkb20vdm5vZGUnO1xyXG5cclxuaW1wb3J0IHsgQ2hlc3Nncm91bmQgfSBmcm9tICdjaGVzc2dyb3VuZHgnO1xyXG5cclxuaW1wb3J0IHsgcmVuZGVyVXNlcm5hbWUgfSBmcm9tICcuL3VzZXInO1xyXG5pbXBvcnQgeyB2YXJpYW50cywgVkFSSUFOVFMgfSBmcm9tICcuL2NoZXNzJztcclxuaW1wb3J0IHsgcmVuZGVyVGltZWFnbyB9IGZyb20gJy4vY2xvY2snO1xyXG5pbXBvcnQgeyBjaGFuZ2VDU1MgfSBmcm9tICcuL3NldHRpbmdzJztcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVzdWx0KHN0YXR1cywgcmVzdWx0KSB7XHJcbiAgICB2YXIgdGV4dCA9ICcnO1xyXG4gICAgY29uc29sZS5sb2coXCJyZXN1bHQoKVwiLCBzdGF0dXMsIHJlc3VsdCk7XHJcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgY2FzZSAtMjpcclxuICAgIGNhc2UgLTE6XHJcbiAgICAgICAgdGV4dCA9ICdQbGF5aW5nIHJpZ2h0IG5vdyc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIDA6XHJcbiAgICAgICAgdGV4dCA9ICdHYW1lIGFib3J0ZWQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAxOlxyXG4gICAgICAgIHRleHQgPSAnQ2hlY2ttYXRlJztcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgMjpcclxuICAgICAgICB0ZXh0ID0gKChyZXN1bHQgPT09ICcxLTAnKSA/ICdCbGFjaycgOiAnV2hpdGUnKSArICcgcmVzaWduZWQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAzOlxyXG4gICAgICAgIHRleHQgPSAnU3RhbGVtYXRlJztcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgNDpcclxuICAgICAgICB0ZXh0ID0gJ1RpbWUgb3V0JztcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgNTpcclxuICAgICAgICB0ZXh0ID0gJ0RyYXcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSA2OlxyXG4gICAgICAgIHRleHQgPSAnVGltZSBvdXQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSA3OlxyXG4gICAgICAgIHRleHQgPSAoKHJlc3VsdCA9PT0gJzEtMCcpID8gJ0JsYWNrJyA6ICdXaGl0ZScpICsgJyBhYmFuZG9uZWQgdGhlIGdhbWUnO1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRleHQgPSAnKic7XHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICAgIHJldHVybiAoc3RhdHVzIDw9IDApID8gdGV4dCA6IHRleHQgKyAnLCAnICsgcmVzdWx0O1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gcmVuZGVyR2FtZXMobW9kZWwsIGdhbWVzKSB7XHJcbi8vICAgICAgICAgICAgICAgIGgoJ2ZuJywgcGxheWVyW1wiZmlyc3RfbmFtZVwiXSksXHJcbi8vICAgICAgICAgICAgICAgIGgoJ2xuJywgcGxheWVyW1wibGFzdF9uYW1lXCJdKSxcclxuLy8gICAgICAgICAgICAgICAgaCgnY291bnRyeScsIHBsYXllcltcImNvdW50cnlcIl0pLFxyXG4gICAgdmFyIHJvd3MgPSBnYW1lcy5tYXAoKGdhbWUpID0+IGgoXHJcbiAgICAgICAgJ3RyJyxcclxuICAgICAgICB7IG9uOiB7IGNsaWNrOiAoKSA9PiB7IHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24obW9kZWxbXCJob21lXCJdICsgJy8nICsgZ2FtZVtcIl9pZFwiXSk7IH0gfSxcclxuICAgICAgICB9LCBbXHJcbiAgICAgICAgaCgndGQuYm9hcmQnLCBbXHJcbiAgICAgICAgICAgIGgoJ3NlbGVjdGlvbi4nICsgVkFSSUFOVFNbZ2FtZVtcInZcIl1dLmJvYXJkICsgJy4nICsgVkFSSUFOVFNbZ2FtZVtcInZcIl1dLnBpZWNlcywgW1xyXG4gICAgICAgICAgICAgICAgaCgnZGl2LmNnLXdyYXAuJyArIFZBUklBTlRTW2dhbWVbXCJ2XCJdXS5jZyArICcubWluaScsIHsgaG9vazoge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc2VydDogKHZub2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENoZXNzZ3JvdW5kKHZub2RlLmVsbSBhcyBIVE1MRWxlbWVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld09ubHk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZW46IGdhbWVbXCJmXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IFZBUklBTlRTW2dhbWVbXCJ2XCJdXS5nZW9tXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH19KSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgaCgndGQuZ2FtZXMtaW5mbycsIFtcclxuICAgICAgICAgICAgaCgnZGl2LmluZm8wJywge2F0dHJzOiB7XCJkYXRhLWljb25cIjogVkFSSUFOVFNbZ2FtZVtcInZcIl1dLmljb259LCBjbGFzczoge1wiaWNvblwiOiB0cnVlfX0sIFtcclxuICAgICAgICAgICAgICAgIGgoJ2Rpdi5pbmZvMScsIHthdHRyczoge1wiZGF0YS1pY29uXCI6IChnYW1lW1wielwiXSA9PT0gMSkgPyBcIlZcIiA6IFwiXCJ9LCBjbGFzczoge1wiaWNvblwiOiB0cnVlfX0pLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2LmluZm8yJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi50YycsIGdhbWVbXCJiXCJdICsgXCIrXCIgKyBnYW1lW1wiaVwiXSArIFwiIOKAoiBDYXN1YWwg4oCiIFwiICsgZ2FtZVtcInZcIl0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2luZm8tZGF0ZScsIHthdHRyczoge3RpbWVzdGFtcDogZ2FtZVtcImRcIl19fSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIGgoJ2RpdicsIFtcclxuICAgICAgICAgICAgICAgIGgoJ3BsYXllcicsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdhLnVzZXItbGluaycsIHthdHRyczoge2hyZWY6ICcvQC8nICsgZ2FtZVtcInVzXCJdWzBdfX0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgncGxheWVyLXRpdGxlJywgXCIgXCIgKyBnYW1lW1wid3RcIl0gKyBcIiBcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdhbWVbXCJ1c1wiXVswXSArICgoZ2FtZVtcInd0XCJdID09PSAnQk9UJyAmJiBnYW1lWyd4J10gPiAwKSA/ICcgbGV2ZWwgJyArIGdhbWVbJ3gnXTogJycpLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCd2cycsICcgLSAnKSxcclxuICAgICAgICAgICAgICAgIGgoJ3BsYXllcicsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdhLnVzZXItbGluaycsIHthdHRyczoge2hyZWY6ICcvQC8nICsgZ2FtZVtcInVzXCJdWzFdfX0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgncGxheWVyLXRpdGxlJywgXCIgXCIgKyBnYW1lW1wiYnRcIl0gKyBcIiBcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdhbWVbXCJ1c1wiXVsxXSArICgoZ2FtZVtcImJ0XCJdID09PSAnQk9UJyAmJiBnYW1lWyd4J10gPiAwKSA/ICcgbGV2ZWwgJyArIGdhbWVbJ3gnXTogJycpLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCdkaXYuaW5mby1yZXN1bHQnLCB7XHJcbiAgICAgICAgICAgICAgICBjbGFzczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwid2luXCI6IChnYW1lW1wiclwiXSA9PT0gJzEtMCcgJiYgZ2FtZVtcInVzXCJdWzBdID09PSBtb2RlbFtcInByb2ZpbGVpZFwiXSkgfHwgKGdhbWVbXCJyXCJdID09PSAnMC0xJyAmJiBnYW1lW1widXNcIl1bMV0gPT09IG1vZGVsW1wicHJvZmlsZWlkXCJdKSxcclxuICAgICAgICAgICAgICAgICAgICBcImxvc2VcIjogKGdhbWVbXCJyXCJdID09PSAnMC0xJyAmJiBnYW1lW1widXNcIl1bMF0gPT09IG1vZGVsW1wicHJvZmlsZWlkXCJdKSB8fCAoZ2FtZVtcInJcIl0gPT09ICcxLTAnICYmIGdhbWVbXCJ1c1wiXVsxXSA9PT0gbW9kZWxbXCJwcm9maWxlaWRcIl0pLFxyXG4gICAgICAgICAgICAgICAgfX0sIHJlc3VsdChnYW1lW1wic1wiXSwgZ2FtZVtcInJcIl0pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICByZXR1cm4gW2goJ3Rib2R5Jywgcm93cyldO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsb2FkR2FtZXMobW9kZWwsIHBhZ2UpIHtcclxuICAgIHZhciB4bWxodHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB2YXIgdXJsID0gbW9kZWxbXCJob21lXCJdICsgXCIvYXBpL1wiICsgbW9kZWxbXCJwcm9maWxlaWRcIl1cclxuICAgIGlmIChtb2RlbC5sZXZlbCkge1xyXG4gICAgICAgIHVybCA9IHVybCArIFwiL2xvc3M/eD04JnA9XCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVybCA9IHVybCArIFwiL2FsbD9wPVwiO1xyXG4gICAgfVxyXG5cclxuICAgIHhtbGh0dHAub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICB2YXIgbXlBcnIgPSBKU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIGVtcHR5IEpTT04sIGV4aXQgdGhlIGZ1bmN0aW9uXHJcbiAgICAgICAgICAgIGlmICghbXlBcnIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbXlGdW5jdGlvbihteUFycik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiR0VUIHVybDpcIiwgdXJsICsgcGFnZSlcclxuICAgIHhtbGh0dHAub3BlbihcIkdFVFwiLCB1cmwgKyBwYWdlLCB0cnVlKTtcclxuICAgIHhtbGh0dHAuc2VuZCgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIG15RnVuY3Rpb24oYXJyKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkVk5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2FtZXMnKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhhcnIpO1xyXG4gICAgICAgIGlmIChvbGRWTm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcGF0Y2gob2xkVk5vZGUgYXMgSFRNTEVsZW1lbnQsIGgoJ3RhYmxlI2dhbWVzJywgcmVuZGVyR2FtZXMobW9kZWwsIGFycikpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyVGltZWFnbygpO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gb2JzZXJ2ZVNlbnRpbmVsKHZub2RlOiBWTm9kZSwgbW9kZWwpIHtcclxuICAgIGNvbnN0IHNlbnRpbmVsID0gdm5vZGUuZWxtIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgdmFyIHBhZ2UgPSAwO1xyXG5cclxuICAgIHZhciBpbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihlbnRyaWVzID0+IHtcclxuICAgICAgICAvLyBJZiBpbnRlcnNlY3Rpb25SYXRpbyBpcyAwLCB0aGUgc2VudGluZWwgaXMgb3V0IG9mIHZpZXdcclxuICAgICAgICAvLyBhbmQgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4gRXhpdCB0aGUgZnVuY3Rpb25cclxuICAgICAgICBpZiAoZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbyA8PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxvYWRHYW1lcyhtb2RlbCwgcGFnZSk7XHJcbiAgICAgICAgcGFnZSArPSAxO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShzZW50aW5lbCEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvZmlsZVZpZXcobW9kZWwpOiBWTm9kZVtdIHtcclxuICAgIHJlbmRlclVzZXJuYW1lKG1vZGVsW1wiaG9tZVwiXSwgbW9kZWxbXCJ1c2VybmFtZVwiXSk7XHJcbiAgICBjb25zb2xlLmxvZyhtb2RlbCk7XHJcblxyXG4gICAgY29uc3QgQ1NTaW5kZXhlc0IgPSB2YXJpYW50cy5tYXAoKHZhcmlhbnQpID0+IGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfYm9hcmRcIl0gPT09IHVuZGVmaW5lZCA/IDAgOiBOdW1iZXIobG9jYWxTdG9yYWdlW3ZhcmlhbnQgKyBcIl9ib2FyZFwiXSkpO1xyXG4gICAgY29uc3QgQ1NTaW5kZXhlc1AgPSB2YXJpYW50cy5tYXAoKHZhcmlhbnQpID0+IGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfcGllY2VzXCJdID09PSB1bmRlZmluZWQgPyAwIDogTnVtYmVyKGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfcGllY2VzXCJdKSk7XHJcbiAgICBPYmplY3Qua2V5cyhWQVJJQU5UUykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFyaWFudCA9IFZBUklBTlRTW2tleV07XHJcbiAgICAgICAgaWYgKHZhcmlhbnQuQm9hcmRDU1MubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0gQ1NTaW5kZXhlc0JbdmFyaWFudHMuaW5kZXhPZihrZXkpXTtcclxuICAgICAgICAgICAgaWR4ID0gTWF0aC5taW4oaWR4LCB2YXJpYW50LkJvYXJkQ1NTLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICBjaGFuZ2VDU1MoJy9zdGF0aWMvJyArIHZhcmlhbnQuQm9hcmRDU1NbaWR4XSArICcuY3NzJyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodmFyaWFudC5QaWVjZUNTUy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBDU1NpbmRleGVzUFt2YXJpYW50cy5pbmRleE9mKGtleSldO1xyXG4gICAgICAgICAgICBpZHggPSBNYXRoLm1pbihpZHgsIHZhcmlhbnQuUGllY2VDU1MubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgIGNoYW5nZUNTUygnL3N0YXRpYy8nICsgdmFyaWFudC5QaWVjZUNTU1tpZHhdICsgJy5jc3MnKTtcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIFtoKCdhc2lkZS5zaWRlYmFyLWZpcnN0JyksXHJcbiAgICAgICAgICAgIGgoJ21haW4ucHJvZmlsZScsIFtcclxuICAgICAgICAgICAgICAgIGgoJ3BsYXllci1oZWFkJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsW1wicHJvZmlsZWlkXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2EuaS1kbCcsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtocmVmOiAnL2dhbWVzL2V4cG9ydC8nICsgbW9kZWxbXCJwcm9maWxlaWRcIl0sIFwiZG93bmxvYWRcIjogbW9kZWxbXCJwcm9maWxlaWRcIl0gKyAnLnBnbid9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tZG93bmxvYWRcIjogdHJ1ZX19KSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdhLmktdHYnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7aHJlZjogJy9ALycgKyBtb2RlbFtcInByb2ZpbGVpZFwiXSArICcvdHYnfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLXR2XCI6IHRydWV9fSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCd0YWJsZSNnYW1lcycpLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2I3NlbnRpbmVsJywgeyBob29rOiB7IGluc2VydDogKHZub2RlKSA9PiBvYnNlcnZlU2VudGluZWwodm5vZGUsIG1vZGVsKSB9fSlcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIGgoJ2FzaWRlLnNpZGViYXItc2Vjb25kJyksXHJcbiAgICAgICAgXTtcclxufVxyXG4iLCJpbXBvcnQgeyBoLCBpbml0IH0gZnJvbSBcInNuYWJiZG9tXCI7XHJcbmltcG9ydCBrbGFzcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2NsYXNzJztcclxuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcclxuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcclxuaW1wb3J0IHRvVk5vZGUgZnJvbSAnc25hYmJkb20vdG92bm9kZSc7XHJcblxyXG5pbXBvcnQgeyBrZXkycG9zIH0gZnJvbSAnY2hlc3Nncm91bmR4L3V0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNQcm9tb3Rpb24sIG1hbmRhdG9yeVByb21vdGlvbiwgcHJvbW90aW9uUm9sZXMsIHJvbGVUb1NhbiB9IGZyb20gJy4vY2hlc3MnO1xyXG5cclxuY29uc3QgcGF0Y2ggPSBpbml0KFtrbGFzcywgYXR0cmlidXRlcywgbGlzdGVuZXJzXSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjdHJsKSB7XHJcblxyXG4gICAgbGV0IHByb21vdGluZzogYW55ID0gZmFsc2U7XHJcbiAgICBsZXQgcm9sZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgZnVuY3Rpb24gc3RhcnQob3JpZywgZGVzdCwgbWV0YSkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VuZCA9IGN0cmwuZ2V0R3JvdW5kKCk7XHJcbiAgICAgICAgaWYgKGlzUHJvbW90aW9uKGN0cmwudmFyaWFudCwgZ3JvdW5kLnN0YXRlLnBpZWNlc1tkZXN0XSwgb3JpZywgZGVzdCwgbWV0YSwgY3RybC5wcm9tb3Rpb25zKSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IGN0cmwubXljb2xvcjtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZW50YXRpb24gPSBncm91bmQuc3RhdGUub3JpZW50YXRpb247XHJcbiAgICAgICAgICAgIGNvbnN0IG1vdmluZ1JvbGUgPSBncm91bmQuc3RhdGUucGllY2VzW2Rlc3RdLnJvbGU7XHJcbiAgICAgICAgICAgIHJvbGVzID0gcHJvbW90aW9uUm9sZXMoY3RybC52YXJpYW50LCBtb3ZpbmdSb2xlLCBvcmlnLCBkZXN0LCBjdHJsLnByb21vdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChjdHJsLnZhcmlhbnQpIHtcclxuICAgICAgICAgICAgLy8gVE9ETzogaW4gZ3JhbmQgY2hlc3MgdXNlIG1hbmRhdG9yeVByb21vdGlvbiB3aGVuIHByb21vdGlvbiBoYXBwZW5zIG9uIGJhY2sgcmFua1xyXG4gICAgICAgICAgICBjYXNlIFwibWluaXNob2dpXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJzaG9naVwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKG1hbmRhdG9yeVByb21vdGlvbihjdHJsLnZhcmlhbnQsIG1vdmluZ1JvbGUsIGRlc3QsIGNvbG9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21vdGUoZ3JvdW5kLCBkZXN0LCAncCcgKyBncm91bmQuc3RhdGUucGllY2VzW2Rlc3RdLnJvbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN0cmwuc2VuZE1vdmUob3JpZywgZGVzdCwgJysnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZHJhd19wcm9tbyhkZXN0LCBjb2xvciwgb3JpZW50YXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21vdGluZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZzogb3JpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdDogZGVzdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGN0cmwuc2VuZE1vdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2FtYm9kaWFuJzpcclxuICAgICAgICAgICAgY2FzZSAnbWFrcnVrJzpcclxuICAgICAgICAgICAgICAgIHByb21vdGUoZ3JvdW5kLCBkZXN0LCAnbWV0Jyk7XHJcbiAgICAgICAgICAgICAgICBjdHJsLnNlbmRNb3ZlKG9yaWcsIGRlc3QsICdtJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2l0dHV5aW4nOlxyXG4gICAgICAgICAgICAgICAgcHJvbW90ZShncm91bmQsIGRlc3QsICdmZXJ6Jyk7XHJcbiAgICAgICAgICAgICAgICBjdHJsLnNlbmRNb3ZlKG9yaWcsIGRlc3QsICdmJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIC8vIGluIGdyYW5kIGNoZXNzIHByb21vdGlvbiBvbiBiYWNrIHJhbmsgaXMgbWFuZGF0b3J5XHJcbiAgICAgICAgICAgICAgICAvLyBhbmQgc29tZXRpbWVzIG9ubHkgb25lIGNob2ljZSBleGlzdHNcclxuICAgICAgICAgICAgICAgIGlmIChyb2xlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByb2xlID0gcm9sZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbW8gPSByb2xlVG9TYW5bcm9sZV0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9tb3RlKGdyb3VuZCwgZGVzdCwgcm9sZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3RybC5zZW5kTW92ZShvcmlnLCBkZXN0LCBwcm9tbyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRyYXdfcHJvbW8oZGVzdCwgY29sb3IsIG9yaWVudGF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9tb3RpbmcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWc6IG9yaWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q6IGRlc3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjdHJsLnNlbmRNb3ZlLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBwcm9tb3RlKGcsIGtleSwgcm9sZSkge1xyXG4gICAgICAgIHZhciBwaWVjZXMgPSB7fTtcclxuICAgICAgICB2YXIgcGllY2UgPSBnLnN0YXRlLnBpZWNlc1trZXldO1xyXG4gICAgICAgIGlmIChnLnN0YXRlLnBpZWNlc1trZXldLnJvbGUgPT09IHJvbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBpZWNlc1trZXldID0ge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IHBpZWNlLmNvbG9yLFxyXG4gICAgICAgICAgICAgICAgcm9sZTogcm9sZSxcclxuICAgICAgICAgICAgICAgIHByb21vdGVkOiB0cnVlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGcuc2V0UGllY2VzKHBpZWNlcyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkcmF3X3Byb21vKGRlc3QsIGNvbG9yLCBvcmllbnRhdGlvbikge1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSB0b1ZOb2RlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2V4dGVuc2lvbicpIGFzIE5vZGUpO1xyXG4gICAgICAgIHBhdGNoKGNvbnRhaW5lciwgcmVuZGVyUHJvbW90aW9uKGRlc3QsIGNvbG9yLCBvcmllbnRhdGlvbikpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGRyYXdfbm9fcHJvbW8oKSB7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlbnNpb25fY2hvaWNlJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgcGF0Y2goY29udGFpbmVyLCBoKCdleHRlbnNpb24nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZmluaXNoKHJvbGUpIHtcclxuICAgICAgICBpZiAocHJvbW90aW5nKSB7XHJcbiAgICAgICAgICAgIGRyYXdfbm9fcHJvbW8oKTtcclxuICAgICAgICAgICAgY29uc3QgcHJvbW90ZWQgPSBwcm9tb3RlKGN0cmwuZ2V0R3JvdW5kKCksIHByb21vdGluZy5kZXN0LCByb2xlKTtcclxuICAgICAgICAgICAgbGV0IHByb21vO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChjdHJsLnZhcmlhbnQpIHtcclxuICAgICAgICAgICAgY2FzZSBcIm1pbmlzaG9naVwiOlxyXG4gICAgICAgICAgICBjYXNlIFwic2hvZ2lcIjpcclxuICAgICAgICAgICAgICAgIHByb21vID0gcHJvbW90ZWQgPyBcIitcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImdyYW5kaG91c2VcIjpcclxuICAgICAgICAgICAgY2FzZSBcImdyYW5kXCI6XHJcbiAgICAgICAgICAgICAgICBwcm9tbyA9IHByb21vdGVkID8gcm9sZVRvU2FuW3JvbGVdLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBwcm9tbyA9IHJvbGVUb1Nhbltyb2xlXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAocHJvbW90aW5nLmNhbGxiYWNrKSBwcm9tb3RpbmcuY2FsbGJhY2socHJvbW90aW5nLm9yaWcsIHByb21vdGluZy5kZXN0LCBwcm9tbyk7XHJcbiAgICAgICAgICAgIHByb21vdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gY2FuY2VsKCkge1xyXG4gICAgICAgIGRyYXdfbm9fcHJvbW8oKTtcclxuICAgICAgICBjdHJsLmdvUGx5KGN0cmwucGx5KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYmluZChldmVudE5hbWU6IHN0cmluZywgZjogKGU6IEV2ZW50KSA9PiB2b2lkLCByZWRyYXcpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpbnNlcnQodm5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHZub2RlLmVsbS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gZihlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVkcmF3KSByZWRyYXcoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlbmRlclByb21vdGlvbihkZXN0LCBjb2xvciwgb3JpZW50YXRpb24pIHtcclxuICAgICAgICBjb25zdCBkaW0gPSBjdHJsLmdldEdyb3VuZCgpLnN0YXRlLmRpbWVuc2lvbnNcclxuICAgICAgICBjb25zdCBmaXJzdFJhbmtJczAgPSBkaW0uaGVpZ2h0ID09PSAxMDtcclxuICAgICAgICB2YXIgbGVmdCA9IChkaW0ud2lkdGggLSBrZXkycG9zKGRlc3QsIGZpcnN0UmFua0lzMClbMF0pICogKDEwMCAvIGRpbS53aWR0aCk7XHJcbiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcIndoaXRlXCIpIGxlZnQgPSAoMTAwIC8gZGltLndpZHRoKSAqIChkaW0ud2lkdGggLSAxKSAtIGxlZnQ7XHJcbiAgICAgICAgdmFyIHZlcnRpY2FsID0gY29sb3IgPT09IG9yaWVudGF0aW9uID8gXCJ0b3BcIiA6IFwiYm90dG9tXCI7XHJcbiAgICAgICAgcmV0dXJuIGgoXHJcbiAgICAgICAgICAgIFwiZGl2I2V4dGVuc2lvbl9jaG9pY2UuXCIgKyB2ZXJ0aWNhbCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaG9vazoge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc2VydDogdm5vZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbCA9IHZub2RlLmVsbSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IGNhbmNlbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJvbGVzLm1hcCgoc2VydmVyUm9sZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRvcCA9IChjb2xvciA9PT0gb3JpZW50YXRpb24gPyBpIDogZGltLmhlaWdodCAtMSAtIGkpICogKDEwMCAvIGRpbS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGgoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzcXVhcmVcIixcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHN0eWxlOiBcInRvcDogXCIgKyB0b3AgKyBcIiU7bGVmdDogXCIgKyBsZWZ0ICsgXCIlXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaG9vazogYmluZChcImNsaWNrXCIsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaChzZXJ2ZXJSb2xlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBbaChcInBpZWNlLlwiICsgc2VydmVyUm9sZSArIFwiLlwiICsgY29sb3IpXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc3RhcnQsXHJcbiAgICB9O1xyXG59XHJcbiIsIi8vIGh0dHA6Ly9qc2ZpZGRsZS5uZXQvTWlzc291bGFMb3JlbnpvL2dmbjZvYjNqL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL29ybmljYXIvbGlsYS9ibG9iL21hc3Rlci91aS9jb21tb24vc3JjL3Jlc2l6ZS50c1xuXG5pbXBvcnQgKiBhcyBjZyBmcm9tICdjaGVzc2dyb3VuZHgvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBNb3VjaEV2ZW50ID0gTW91c2VFdmVudCAmIFRvdWNoRXZlbnQ7XG5cbi8vZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzaXplSGFuZGxlKGVsczogY2cuRWxlbWVudHMsIHByZWY6IG51bWJlciwgcGx5OiBudW1iZXIpIHtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc2l6ZUhhbmRsZShlbHM6IGNnLkVsZW1lbnRzKSB7XG5cbi8vICBpZiAoIXByZWYpIHJldHVybjtcbiAgaWYgKHRydWUpIHJldHVybjtcblxuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NnLXJlc2l6ZScpO1xuICBlbHMuY29udGFpbmVyLmFwcGVuZENoaWxkKGVsKTtcblxuICBjb25zdCBtb3VzZW1vdmVFdmVudCA9ICdtb3VzZW1vdmUnO1xuICBjb25zdCBtb3VzZXVwRXZlbnQgPSAnbW91c2V1cCc7XG5cbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHN0YXJ0OiBNb3VjaEV2ZW50KSA9PiB7XG5cbiAgICBzdGFydC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3Qgc3RhcnRQb3MgPSBldmVudFBvc2l0aW9uKHN0YXJ0KSE7XG4gICAgY29uc3QgaW5pdGlhbFpvb20gPSAxMDA7ICAvL3BhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZ2V0UHJvcGVydHlWYWx1ZSgnLS16b29tJykpO1xuICAgIGxldCB6b29tID0gaW5pdGlhbFpvb207XG4vKlxuICAgIGNvbnN0IHNhdmVab29tID0gd2luZG93LmxpY2hlc3MuZGVib3VuY2UoKCkgPT4ge1xuICAgICAgJC5hamF4KHsgbWV0aG9kOiAncG9zdCcsIHVybDogJy9wcmVmL3pvb20/dj0nICsgKDEwMCArIHpvb20pIH0pO1xuICAgIH0sIDcwMCk7XG4qL1xuXG4gICAgY29uc3Qgc2V0Wm9vbSA9ICh6b29tOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2ctd3JhcCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoZWwpIHtcbi8vICAgICAgICAgICAgY29uc3QgYmFzZVdpZHRoID0gZGltZW5zaW9uc1tWQVJJQU5UU1t0aGlzLnZhcmlhbnRdLmdlb21dLndpZHRoICogKHRoaXMudmFyaWFudCA9PT0gXCJzaG9naVwiID8gNTIgOiA2NCk7XG4vLyAgICAgICAgICAgIGNvbnN0IGJhc2VIZWlnaHQgPSBkaW1lbnNpb25zW1ZBUklBTlRTW3RoaXMudmFyaWFudF0uZ2VvbV0uaGVpZ2h0ICogKHRoaXMudmFyaWFudCA9PT0gXCJzaG9naVwiID8gNjAgOiA2NCk7XG4gICAgICAgICAgICBjb25zdCBiYXNlV2lkdGggPSBwYXJzZUludCggZG9jdW1lbnQuZGVmYXVsdFZpZXchLmdldENvbXB1dGVkU3R5bGUoIGVsICkud2lkdGggfHwgJycsIDEwKTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VIZWlnaHQgPSBwYXJzZUludChkb2N1bWVudC5kZWZhdWx0VmlldyEuZ2V0Q29tcHV0ZWRTdHlsZSggZWwgKS5oZWlnaHQgfHwgJycsIDEwKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGJhc2VXaWR0aCwgYmFzZUhlaWdodCwgem9vbSk7XG4gICAgICAgICAgICBjb25zdCBweHcgPSBgJHt6b29tIC8gMTAwICogYmFzZVdpZHRofXB4YDtcbiAgICAgICAgICAgIGNvbnN0IHB4aCA9IGAke3pvb20gLyAxMDAgKiBiYXNlSGVpZ2h0fXB4YDtcbiAgICAgICAgICAgIGVsLnN0eWxlLndpZHRoID0gcHh3O1xuICAgICAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHhoO1xuICAgICAgICAgICAgY29uc3QgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgICAgICAgIGV2LmluaXRFdmVudCgnY2hlc3Nncm91bmQucmVzaXplJywgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChldik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXNpemUgPSAobW92ZTogTW91Y2hFdmVudCkgPT4ge1xuXG4gICAgICBjb25zdCBwb3MgPSBldmVudFBvc2l0aW9uKG1vdmUpITtcbiAgICAgIGNvbnN0IGRlbHRhID0gcG9zWzBdIC0gc3RhcnRQb3NbMF0gKyBwb3NbMV0gLSBzdGFydFBvc1sxXTtcblxuICAgICAgem9vbSA9IE1hdGgucm91bmQoTWF0aC5taW4oMTUwLCBNYXRoLm1heCgwLCBpbml0aWFsWm9vbSArIGRlbHRhIC8gMTApKSk7XG5cbi8vICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJy0tem9vbTonICsgem9vbSk7XG4vLyAgICAgIHdpbmRvdy5saWNoZXNzLmRpc3BhdGNoRXZlbnQod2luZG93LCAncmVzaXplJyk7XG4gICAgICBzZXRab29tKHpvb20pO1xuLy8gICAgICBzYXZlWm9vbSgpO1xuICAgIH07XG5cbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG1vdXNlbW92ZUV2ZW50LCByZXNpemUpO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihtb3VzZXVwRXZlbnQsICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobW91c2Vtb3ZlRXZlbnQsIHJlc2l6ZSk7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XG4gICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xuICB9KTtcbi8qXG4gIGlmIChwcmVmID09IDEpIHtcbiAgICBjb25zdCB0b2dnbGUgPSAocGx5OiBudW1iZXIpID0+IGVsLmNsYXNzTGlzdC50b2dnbGUoJ25vbmUnLCBwbHkgPj0gMik7XG4gICAgdG9nZ2xlKHBseSk7XG4gICAgd2luZG93LmxpY2hlc3MucHVic3ViLm9uKCdwbHknLCB0b2dnbGUpO1xuICB9XG5cbiAgYWRkTmFnKGVsKTtcbiovXG59XG5cbmZ1bmN0aW9uIGV2ZW50UG9zaXRpb24oZTogTW91Y2hFdmVudCk6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQge1xuICBpZiAoZS5jbGllbnRYIHx8IGUuY2xpZW50WCA9PT0gMCkgcmV0dXJuIFtlLmNsaWVudFgsIGUuY2xpZW50WV07XG4gIGlmIChlLnRvdWNoZXMgJiYgZS50YXJnZXRUb3VjaGVzWzBdKSByZXR1cm4gW2UudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYLCBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WV07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKlxuZnVuY3Rpb24gYWRkTmFnKGVsOiBIVE1MRWxlbWVudCkge1xuXG4gIGNvbnN0IHN0b3JhZ2UgPSB3aW5kb3cubGljaGVzcy5zdG9yYWdlLm1ha2VCb29sZWFuKCdyZXNpemUtbmFnJyk7XG4gIGlmIChzdG9yYWdlLmdldCgpKSByZXR1cm47XG5cbiAgd2luZG93LmxpY2hlc3MubG9hZENzc1BhdGgoJ25hZy1jaXJjbGUnKTtcbiAgZWwudGl0bGUgPSAnRHJhZyB0byByZXNpemUnO1xuICBlbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIm5hZy1jaXJjbGVcIj48L2Rpdj4nO1xuICBlbC5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5saWNoZXNzLm1vdXNlZG93bkV2ZW50LCAoKSA9PiB7XG4gICAgc3RvcmFnZS5zZXQodHJ1ZSk7XG4gICAgZWwuaW5uZXJIVE1MID0gJyc7XG4gIH0sIHsgb25jZTogdHJ1ZSB9KTtcblxuICBzZXRUaW1lb3V0KCgpID0+IHN0b3JhZ2Uuc2V0KHRydWUpLCAxNTAwMCk7XG59XG4qLyIsImltcG9ydCB7IGggfSBmcm9tIFwic25hYmJkb21cIjtcclxuaW1wb3J0IHsgVk5vZGUgfSBmcm9tICdzbmFiYmRvbS92bm9kZSc7XHJcblxyXG5pbXBvcnQgUm91bmRDb250cm9sbGVyIGZyb20gJy4vcm91bmRDdHJsJztcclxuaW1wb3J0IHsgVkFSSUFOVFMgfSBmcm9tICcuL2NoZXNzJztcclxuaW1wb3J0IHsgdGltZWFnbywgcmVuZGVyVGltZWFnbyB9IGZyb20gJy4vY2xvY2snO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHJ1bkdyb3VuZCh2bm9kZTogVk5vZGUsIG1vZGVsKSB7XHJcbiAgICBjb25zdCBlbCA9IHZub2RlLmVsbSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IGN0cmwgPSBuZXcgUm91bmRDb250cm9sbGVyKGVsLCBtb2RlbCk7XHJcbiAgICBjb25zdCBjZyA9IGN0cmwuY2hlc3Nncm91bmQ7XHJcbiAgICB3aW5kb3dbJ2NnJ10gPSBjZztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kVmlldyhtb2RlbCk6IFZOb2RlW10ge1xyXG4gICAgY29uc29sZS5sb2coXCJyb3VuZFZpZXcgbW9kZWw9XCIsIG1vZGVsKTtcclxuICAgIGNvbnN0IGRhdGFJY29uID0gVkFSSUFOVFNbbW9kZWxbXCJ2YXJpYW50XCJdXS5pY29uO1xyXG4gICAgcmVuZGVyVGltZWFnbygpO1xyXG4gICAgcmV0dXJuIFtoKCdhc2lkZS5zaWRlYmFyLWZpcnN0JywgW1xyXG4gICAgICAgICAgICAgICAgaCgnZGl2LmdhbWUtaW5mbycsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYuaW5mbzAnLCB7YXR0cnM6IHtcImRhdGEtaWNvblwiOiBkYXRhSWNvbn0sIGNsYXNzOiB7XCJpY29uXCI6IHRydWV9fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdkaXYuaW5mbzEnLCB7YXR0cnM6IHtcImRhdGEtaWNvblwiOiAobW9kZWxbXCJjaGVzczk2MFwiXSA9PT0gJ1RydWUnKSA/IFwiVlwiIDogXCJcIn0sIGNsYXNzOiB7XCJpY29uXCI6IHRydWV9fSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi5pbmZvMicsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi50YycsIG1vZGVsW1wiYmFzZVwiXSArIFwiK1wiICsgbW9kZWxbXCJpbmNcIl0gKyBcIiDigKIgQ2FzdWFsIOKAoiBcIiArIG1vZGVsW1widmFyaWFudFwiXSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIobW9kZWxbXCJzdGF0dXNcIl0pID49IDAgPyBoKCdpbmZvLWRhdGUnLCB7YXR0cnM6IHt0aW1lc3RhbXA6IG1vZGVsW1wiZGF0ZVwiXX19LCB0aW1lYWdvKG1vZGVsW1wiZGF0ZVwiXSkpIDogXCJQbGF5aW5nIHJpZ2h0IG5vd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYucGxheWVyLWRhdGEnLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2ktc2lkZS5vbmxpbmUnLCB7Y2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLXdoaXRlXCI6IHRydWV9IH0gKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgncGxheWVyJywgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnYS51c2VyLWxpbmsnLCB7YXR0cnM6IHtocmVmOiAnL0AvJyArIG1vZGVsW1wid3BsYXllclwiXX19LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgncGxheWVyLXRpdGxlJywgXCIgXCIgKyBtb2RlbFtcInd0aXRsZVwiXSArIFwiIFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbFtcIndwbGF5ZXJcIl0gKyBcIiAoMTUwMD8pXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2LnBsYXllci1kYXRhJywgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdpLXNpZGUub25saW5lJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1ibGFja1wiOiB0cnVlfSB9ICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ3BsYXllcicsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EudXNlci1saW5rJywge2F0dHJzOiB7aHJlZjogJy9ALycgKyBtb2RlbFtcImJwbGF5ZXJcIl19fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ3BsYXllci10aXRsZScsIFwiIFwiICsgbW9kZWxbXCJidGl0bGVcIl0gKyBcIiBcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxbXCJicGxheWVyXCJdICsgXCIgKDE1MDA/KVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYucm91bmRjaGF0I3JvdW5kY2hhdCcpLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgaCgnbWFpbi5yb3VuZCcsIFtcclxuICAgICAgICAgICAgICAgIGgoJ3NlbGVjdGlvbi4nICsgVkFSSUFOVFNbbW9kZWxbXCJ2YXJpYW50XCJdXS5ib2FyZCArICcuJyArIFZBUklBTlRTW21vZGVsW1widmFyaWFudFwiXV0ucGllY2VzLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2LmNnLXdyYXAuJyArIFZBUklBTlRTW21vZGVsW1widmFyaWFudFwiXV0uY2csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaG9vazogeyBpbnNlcnQ6ICh2bm9kZSkgPT4gcnVuR3JvdW5kKHZub2RlLCBtb2RlbCl9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCdhc2lkZS5zaWRlYmFyLXNlY29uZCcsIFtcclxuICAgICAgICAgICAgICAgIGgoJ2RpdiNwb2NrZXQtd3JhcHBlcicsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYuJyArIFZBUklBTlRTW21vZGVsW1widmFyaWFudFwiXV0ucGllY2VzICsgJy4nICsgbW9kZWxbXCJ2YXJpYW50XCJdLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi5jZy13cmFwLnBvY2tldCcsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNwb2NrZXQwJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYjY2xvY2swJyksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYucm91bmQtZGF0YScsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdyb3VuZC1wbGF5ZXIjcnBsYXllcjAnKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYjbW92ZS1jb250cm9scycpLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNib2FyZC1zZXR0aW5ncycpLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNtb3ZlbGlzdC1ibG9jaycsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnZGl2I21vdmVsaXN0JyksXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2I2dhbWUtY29udHJvbHMnKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdyb3VuZC1wbGF5ZXIjcnBsYXllcjEnKSxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2I2Nsb2NrMScpLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2I3BvY2tldC13cmFwcGVyJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi4nICsgVkFSSUFOVFNbbW9kZWxbXCJ2YXJpYW50XCJdXS5waWVjZXMgKyAnLicgKyBtb2RlbFtcInZhcmlhbnRcIl0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnZGl2LmNnLXdyYXAucG9ja2V0JywgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnZGl2I3BvY2tldDEnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIGgoJ3VuZGVyLWxlZnQnLCBcIlNwZWN0YXRvcnNcIiksXHJcbiAgICAgICAgICAgIGgoJ3VuZGVyLWJvYXJkJyksXHJcbiAgICAgICAgXTtcclxufVxyXG4iLCJpbXBvcnQgU29ja2V0dGUgZnJvbSAnc29ja2V0dGUnO1xyXG5cclxuaW1wb3J0IHsgaW5pdCB9IGZyb20gJ3NuYWJiZG9tJztcclxuaW1wb3J0IHsgVk5vZGUgfSBmcm9tICdzbmFiYmRvbS92bm9kZSc7XHJcbmltcG9ydCB7IGggfSBmcm9tICdzbmFiYmRvbS9oJztcclxuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xyXG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xyXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL3Byb3BzJztcclxuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcclxuXHJcbmltcG9ydCB7IGtleTJwb3MsIHBvczJrZXkgfSBmcm9tICdjaGVzc2dyb3VuZHgvdXRpbCc7XHJcbmltcG9ydCB7IENoZXNzZ3JvdW5kIH0gZnJvbSAnY2hlc3Nncm91bmR4JztcclxuaW1wb3J0IHsgQXBpIH0gZnJvbSAnY2hlc3Nncm91bmR4L2FwaSc7XHJcbmltcG9ydCB7IENvbG9yLCBEZXN0cywgUGllY2VzRGlmZiwgUm9sZSwgS2V5LCBQb3MsIFBpZWNlIH0gZnJvbSAnY2hlc3Nncm91bmR4L3R5cGVzJztcclxuXHJcbmltcG9ydCB7IENsb2NrLCByZW5kZXJUaW1lIH0gZnJvbSAnLi9jbG9jayc7XHJcbmltcG9ydCBtYWtlR2F0aW5nIGZyb20gJy4vZ2F0aW5nJztcclxuaW1wb3J0IG1ha2VQcm9tb3Rpb24gZnJvbSAnLi9wcm9tb3Rpb24nO1xyXG5pbXBvcnQgeyBkcm9wSXNWYWxpZCwgcG9ja2V0VmlldywgdXBkYXRlUG9ja2V0cyB9IGZyb20gJy4vcG9ja2V0JztcclxuaW1wb3J0IHsgc291bmQgfSBmcm9tICcuL3NvdW5kJztcclxuaW1wb3J0IHsgdmFyaWFudHMsIGhhc0VwLCBuZWVkUG9ja2V0cywgcm9sZVRvU2FuLCB1Y2kydXNpLCB1c2kydWNpLCBncmFuZDJ6ZXJvLCB6ZXJvMmdyYW5kLCBWQVJJQU5UUyB9IGZyb20gJy4vY2hlc3MnO1xyXG5pbXBvcnQgeyByZW5kZXJVc2VybmFtZSB9IGZyb20gJy4vdXNlcic7XHJcbmltcG9ydCB7IGNoYXRNZXNzYWdlLCBjaGF0VmlldyB9IGZyb20gJy4vY2hhdCc7XHJcbmltcG9ydCB7IHNldHRpbmdzVmlldyB9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBtb3ZlbGlzdFZpZXcsIHVwZGF0ZU1vdmVsaXN0LCBzZWxlY3RNb3ZlIH0gZnJvbSAnLi9tb3ZlbGlzdCc7XHJcbmltcG9ydCByZXNpemVIYW5kbGUgZnJvbSAnLi9yZXNpemUnO1xyXG5pbXBvcnQgeyByZXN1bHQgfSBmcm9tICcuL3Byb2ZpbGUnXHJcbmltcG9ydCB7IHBsYXllciB9IGZyb20gJy4vcGxheWVyJztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdW5kQ29udHJvbGxlciB7XHJcbiAgICBtb2RlbDtcclxuICAgIHNvY2s7XHJcbiAgICBjaGVzc2dyb3VuZDogQXBpO1xyXG4gICAgZnVsbGZlbjogc3RyaW5nO1xyXG4gICAgd3BsYXllcjogc3RyaW5nO1xyXG4gICAgYnBsYXllcjogc3RyaW5nO1xyXG4gICAgYmFzZTogbnVtYmVyO1xyXG4gICAgaW5jOiBudW1iZXI7XHJcbiAgICBteWNvbG9yOiBDb2xvcjtcclxuICAgIG9wcGNvbG9yOiBDb2xvcjtcclxuICAgIHR1cm5Db2xvcjogQ29sb3I7XHJcbiAgICBjbG9ja3M6IGFueTtcclxuICAgIGFib3J0YWJsZTogYm9vbGVhbjtcclxuICAgIGdhbWVJZDogc3RyaW5nO1xyXG4gICAgdmFyaWFudDogc3RyaW5nO1xyXG4gICAgcG9ja2V0czogYW55O1xyXG4gICAgdnBvY2tldDA6IGFueTtcclxuICAgIHZwb2NrZXQxOiBhbnk7XHJcbiAgICB2cGxheWVyMDogYW55O1xyXG4gICAgdnBsYXllcjE6IGFueTtcclxuICAgIHZwbmc6IGFueTtcclxuICAgIGdhbWVDb250cm9sczogYW55O1xyXG4gICAgbW92ZUNvbnRyb2xzOiBhbnk7XHJcbiAgICBnYXRpbmc6IGFueTtcclxuICAgIHByb21vdGlvbjogYW55O1xyXG4gICAgZGVzdHM6IERlc3RzO1xyXG4gICAgcHJvbW90aW9uczogc3RyaW5nW107XHJcbiAgICBsYXN0bW92ZTogS2V5W107XHJcbiAgICBwcmVtb3ZlOiBhbnk7XHJcbiAgICBwcmVkcm9wOiBhbnk7XHJcbiAgICByZXN1bHQ6IHN0cmluZztcclxuICAgIGZsaXA6IGJvb2xlYW47XHJcbiAgICBzcGVjdGF0b3I6IGJvb2xlYW47XHJcbiAgICBvcHBJc1JhbmRvbU1vdmVyOiBib29sZWFuO1xyXG4gICAgc2V0dGluZ3M6IGJvb2xlYW47XHJcbiAgICB0djogYm9vbGVhbjtcclxuICAgIHN0YXR1czogbnVtYmVyO1xyXG4gICAgc3RlcHM7XHJcbiAgICBwZ246IHN0cmluZztcclxuICAgIHBseTogbnVtYmVyO1xyXG4gICAgcGxheWVyczogc3RyaW5nW107XHJcbiAgICB0aXRsZXM6IHN0cmluZ1tdO1xyXG4gICAgQ1NTaW5kZXhlc0I6IG51bWJlcltdO1xyXG4gICAgQ1NTaW5kZXhlc1A6IG51bWJlcltdO1xyXG4gICAgY2xpY2tEcm9wOiBQaWVjZSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihlbCwgbW9kZWwpIHtcclxuICAgICAgICBjb25zdCBvbk9wZW4gPSAoZXZ0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY3RybC5vbk9wZW4oKVwiLCBldnQpO1xyXG4gICAgICAgICAgICB0aGlzLmNsb2Nrc1swXS5jb25uZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvY2tzWzFdLmNvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImdhbWVfdXNlcl9jb25uZWN0ZWRcIiwgdXNlcm5hbWU6IHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XHJcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcclxuICAgICAgICAgICAgb25vcGVuOiBlID0+IG9uT3BlbihlKSxcclxuICAgICAgICAgICAgb25tZXNzYWdlOiBlID0+IHRoaXMub25NZXNzYWdlKGUpLFxyXG4gICAgICAgICAgICBvbnJlY29ubmVjdDogZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb2Nrc1swXS5jb25uZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvY2tzWzFdLmNvbm5lY3RpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlY29ubmVjdGluZyBpbiByb3VuZC4uLicsIGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyMScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgcGF0Y2goY29udGFpbmVyLCBoKCdpLXNpZGUub25saW5lI3BsYXllcjEnLCB7Y2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLW9ubGluZVwiOiBmYWxzZSwgXCJpY29uLW9mZmxpbmVcIjogdHJ1ZX19KSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbm1heGltdW06IGUgPT4gY29uc29sZS5sb2coJ1N0b3AgQXR0ZW1wdGluZyEnLCBlKSxcclxuICAgICAgICAgICAgb25jbG9zZTogZSA9PiBjb25zb2xlLmxvZygnQ2xvc2VkIScsIGUpLFxyXG4gICAgICAgICAgICBvbmVycm9yOiBlID0+IGNvbnNvbGUubG9nKCdFcnJvcjonLCBlKSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5zb2NrID0gbmV3IFNvY2tldHRlKFwid3M6Ly9cIiArIGxvY2F0aW9uLmhvc3QgKyBcIi93c3JcIiwgb3B0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoKGVycikge1xyXG4gICAgICAgICAgICB0aGlzLnNvY2sgPSBuZXcgU29ja2V0dGUoXCJ3c3M6Ly9cIiArIGxvY2F0aW9uLmhvc3QgKyBcIi93c3JcIiwgb3B0cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgdGhpcy52YXJpYW50ID0gbW9kZWxbXCJ2YXJpYW50XCJdIGFzIHN0cmluZztcclxuICAgICAgICB0aGlzLmZ1bGxmZW4gPSBtb2RlbFtcImZlblwiXSBhcyBzdHJpbmc7XHJcbiAgICAgICAgdGhpcy53cGxheWVyID0gbW9kZWxbXCJ3cGxheWVyXCJdIGFzIHN0cmluZztcclxuICAgICAgICB0aGlzLmJwbGF5ZXIgPSBtb2RlbFtcImJwbGF5ZXJcIl0gYXMgc3RyaW5nO1xyXG4gICAgICAgIHRoaXMuYmFzZSA9IG1vZGVsW1wiYmFzZVwiXSBhcyBudW1iZXI7XHJcbiAgICAgICAgdGhpcy5pbmMgPSBtb2RlbFtcImluY1wiXSBhcyBudW1iZXI7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBtb2RlbFtcInN0YXR1c1wiXSBhcyBudW1iZXI7XHJcbiAgICAgICAgdGhpcy50diA9IG1vZGVsW1widHZcIl07XHJcbiAgICAgICAgdGhpcy5zdGVwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucGduID0gXCJcIjtcclxuICAgICAgICB0aGlzLnBseSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuZmxpcCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuQ1NTaW5kZXhlc0IgPSB2YXJpYW50cy5tYXAoKHZhcmlhbnQpID0+IGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfYm9hcmRcIl0gPT09IHVuZGVmaW5lZCA/IDAgOiBOdW1iZXIobG9jYWxTdG9yYWdlW3ZhcmlhbnQgKyBcIl9ib2FyZFwiXSkpO1xyXG4gICAgICAgIHRoaXMuQ1NTaW5kZXhlc1AgPSB2YXJpYW50cy5tYXAoKHZhcmlhbnQpID0+IGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfcGllY2VzXCJdID09PSB1bmRlZmluZWQgPyAwIDogTnVtYmVyKGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfcGllY2VzXCJdKSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3BlY3RhdG9yID0gdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdICE9PSB0aGlzLndwbGF5ZXIgJiYgdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdICE9PSB0aGlzLmJwbGF5ZXI7XHJcblxyXG4gICAgICAgIC8vIG9yaWVudGF0aW9uID0gdGhpcy5teWNvbG9yXHJcbiAgICAgICAgaWYgKHRoaXMuc3BlY3RhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXljb2xvciA9IHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/ICdibGFjaycgOiAnd2hpdGUnO1xyXG4gICAgICAgICAgICB0aGlzLm9wcGNvbG9yID0gdGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5teWNvbG9yID0gdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdID09PSB0aGlzLndwbGF5ZXIgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgICAgICAgdGhpcy5vcHBjb2xvciA9IHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSA9PT0gdGhpcy53cGxheWVyID8gJ2JsYWNrJyA6ICd3aGl0ZSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm9wcElzUmFuZG9tTW92ZXIgPSAoXHJcbiAgICAgICAgICAgICh0aGlzLm15Y29sb3IgPT09IFwid2hpdGVcIiAmJiB0aGlzLmJwbGF5ZXIgPT09IFwiUmFuZG9tLU1vdmVyXCIpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLm15Y29sb3IgPT09IFwiYmxhY2tcIiAmJiB0aGlzLndwbGF5ZXIgPT09IFwiUmFuZG9tLU1vdmVyXCIpKTtcclxuXHJcbiAgICAgICAgLy8gcGxheWVyc1swXSBpcyB0b3AgcGxheWVyLCBwbGF5ZXJzWzFdIGlzIGJvdHRvbSBwbGF5ZXJcclxuICAgICAgICB0aGlzLnBsYXllcnMgPSBbXHJcbiAgICAgICAgICAgIHRoaXMubXljb2xvciA9PT0gXCJ3aGl0ZVwiID8gdGhpcy5icGxheWVyIDogdGhpcy53cGxheWVyLFxyXG4gICAgICAgICAgICB0aGlzLm15Y29sb3IgPT09IFwid2hpdGVcIiA/IHRoaXMud3BsYXllciA6IHRoaXMuYnBsYXllclxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy50aXRsZXMgPSBbXHJcbiAgICAgICAgICAgIHRoaXMubXljb2xvciA9PT0gXCJ3aGl0ZVwiID8gdGhpcy5tb2RlbFsnYnRpdGxlJ10gOiB0aGlzLm1vZGVsWyd3dGl0bGUnXSxcclxuICAgICAgICAgICAgdGhpcy5teWNvbG9yID09PSBcIndoaXRlXCIgPyB0aGlzLm1vZGVsWyd3dGl0bGUnXSA6IHRoaXMubW9kZWxbJ2J0aXRsZSddXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVtb3ZlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnByZWRyb3AgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgY29uc3QgcGFydHMgPSB0aGlzLmZ1bGxmZW4uc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuYWJvcnRhYmxlID0gTnVtYmVyKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKSA8PSAxO1xyXG5cclxuICAgICAgICBjb25zdCBmZW5fcGxhY2VtZW50ID0gcGFydHNbMF07XHJcbiAgICAgICAgdGhpcy50dXJuQ29sb3IgPSBwYXJ0c1sxXSA9PT0gXCJ3XCIgPyBcIndoaXRlXCIgOiBcImJsYWNrXCI7XHJcblxyXG4gICAgICAgIHRoaXMuc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICdmZW4nOiBmZW5fcGxhY2VtZW50LFxyXG4gICAgICAgICAgICAnbW92ZSc6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgJ2NoZWNrJzogZmFsc2UsXHJcbiAgICAgICAgICAgICd0dXJuQ29sb3InOiB0aGlzLnR1cm5Db2xvcixcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hlc3Nncm91bmQgPSBDaGVzc2dyb3VuZChlbCwge1xyXG4gICAgICAgICAgICBmZW46IGZlbl9wbGFjZW1lbnQsXHJcbiAgICAgICAgICAgIGdlb21ldHJ5OiBWQVJJQU5UU1t0aGlzLnZhcmlhbnRdLmdlb20sXHJcbiAgICAgICAgICAgIG9yaWVudGF0aW9uOiB0aGlzLm15Y29sb3IsXHJcbiAgICAgICAgICAgIHR1cm5Db2xvcjogdGhpcy50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgIGF1dG9DYXN0bGU6IHRoaXMudmFyaWFudCAhPT0gJ2NhbWJvZGlhbicsXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXZlbnRzOiB7XHJcbiAgICAgICAgICAgICAgICBpbnNlcnQoZWxlbWVudHMpIHtyZXNpemVIYW5kbGUoZWxlbWVudHMpO31cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zcGVjdGF0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoe1xyXG4gICAgICAgICAgICAgICAgdmlld09ubHk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBtb3ZlOiB0aGlzLm9uTW92ZSgpLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnNldCh7XHJcbiAgICAgICAgICAgICAgICBtb3ZhYmxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJlZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMubXljb2xvcixcclxuICAgICAgICAgICAgICAgICAgICBzaG93RGVzdHM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyOiB0aGlzLm9uVXNlck1vdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTmV3UGllY2U6IHRoaXMub25Vc2VyRHJvcCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcHJlbW92YWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogdGhpcy5zZXRQcmVtb3ZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bnNldDogdGhpcy51bnNldFByZW1vdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBwcmVkcm9wcGFibGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IHRoaXMuc2V0UHJlZHJvcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5zZXQ6IHRoaXMudW5zZXRQcmVkcm9wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW92ZTogdGhpcy5vbk1vdmUoKSxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wTmV3UGllY2U6IHRoaXMub25Ecm9wKCksXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0OiB0aGlzLm9uU2VsZWN0KHRoaXMuY2hlc3Nncm91bmQuc3RhdGUuc2VsZWN0ZWQpLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdhdGluZyA9IG1ha2VHYXRpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5wcm9tb3Rpb24gPSBtYWtlUHJvbW90aW9uKHRoaXMpO1xyXG5cclxuICAgICAgICAvLyBpbml0aWFsaXplIHVzZXJzXHJcbiAgICAgICAgY29uc3QgcGxheWVyMCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdycGxheWVyMCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHBsYXllcjEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncnBsYXllcjEnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICB0aGlzLnZwbGF5ZXIwID0gcGF0Y2gocGxheWVyMCwgcGxheWVyKCdwbGF5ZXIwJywgdGhpcy50aXRsZXNbMF0sIHRoaXMucGxheWVyc1swXSwgbW9kZWxbXCJsZXZlbFwiXSkpO1xyXG4gICAgICAgIHRoaXMudnBsYXllcjEgPSBwYXRjaChwbGF5ZXIxLCBwbGF5ZXIoJ3BsYXllcjEnLCB0aGlzLnRpdGxlc1sxXSwgdGhpcy5wbGF5ZXJzWzFdLCBtb2RlbFtcImxldmVsXCJdKSk7XHJcblxyXG4gICAgICAgIC8vIGluaXRpYWxpemUgcG9ja2V0c1xyXG4gICAgICAgIGlmIChuZWVkUG9ja2V0cyh0aGlzLnZhcmlhbnQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvY2tldDAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9ja2V0MCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBwb2NrZXQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvY2tldDEnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgdXBkYXRlUG9ja2V0cyh0aGlzLCBwb2NrZXQwLCBwb2NrZXQxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGluaXRpYWxpemUgY2xvY2tzXHJcbiAgICAgICAgY29uc3QgYzAgPSBuZXcgQ2xvY2sodGhpcy5iYXNlLCB0aGlzLmluYywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb2NrMCcpIGFzIEhUTUxFbGVtZW50LCAnY2xvY2swJyk7XHJcbiAgICAgICAgY29uc3QgYzEgPSBuZXcgQ2xvY2sodGhpcy5iYXNlLCB0aGlzLmluYywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb2NrMScpIGFzIEhUTUxFbGVtZW50LCAnY2xvY2sxJyk7XHJcbiAgICAgICAgdGhpcy5jbG9ja3MgPSBbYzAsIGMxXTtcclxuICAgICAgICB0aGlzLmNsb2Nrc1swXS5vblRpY2socmVuZGVyVGltZSk7XHJcbiAgICAgICAgdGhpcy5jbG9ja3NbMV0ub25UaWNrKHJlbmRlclRpbWUpO1xyXG5cclxuICAgICAgICBjb25zdCBvbk1vcmVUaW1lID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBUT0RPOiBlbmFibGUgd2hlbiB0aGlzLmZsaXAgaXMgdHJ1ZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbFsnd3RpdGxlJ10gPT09ICdCT1QnIHx8IHRoaXMubW9kZWxbJ2J0aXRsZSddID09PSAnQk9UJyB8fCB0aGlzLnNwZWN0YXRvciB8fCB0aGlzLnN0YXR1cyA+PSAwIHx8IHRoaXMuZmxpcCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLmNsb2Nrc1swXS5zZXRUaW1lKHRoaXMuY2xvY2tzWzBdLmR1cmF0aW9uICsgMTUgKiAxMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcIm1vcmV0aW1lXCIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSB9KTtcclxuICAgICAgICAgICAgY2hhdE1lc3NhZ2UoJycsIHRoaXMub3BwY29sb3IgKyAnICsxNSBzZWNvbmRzJywgXCJyb3VuZGNoYXRcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb2NrMCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnZGl2LmNsb2NrLXdyYXAjY2xvY2swJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYubW9yZS10aW1lJywgW1xyXG4gICAgICAgICAgICAgICAgaCgnYnV0dG9uLmljb24uaWNvbi1wbHVzLXNxdWFyZScsIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wczoge3R5cGU6IFwiYnV0dG9uXCIsIHRpdGxlOiBcIkdpdmUgMTUgc2Vjb25kc1wifSxcclxuICAgICAgICAgICAgICAgICAgICBvbjoge2NsaWNrOiAoKSA9PiBvbk1vcmVUaW1lKCkgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZsYWdDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHVybkNvbG9yID09PSB0aGlzLm15Y29sb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGbGFnXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImZsYWdcIiwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5zcGVjdGF0b3IpIHRoaXMuY2xvY2tzWzFdLm9uRmxhZyhmbGFnQ2FsbGJhY2spO1xyXG5cclxuICAgICAgICBjb25zdCBhYm9ydCA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJBYm9ydFwiKTtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImFib3J0XCIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRyYXcgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRHJhd1wiKTtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImRyYXdcIiwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzaWduID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlc2lnblwiKTtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcInJlc2lnblwiLCBnYW1lSWQ6IHRoaXMubW9kZWxbXCJnYW1lSWRcIl0gfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dhbWUtY29udHJvbHMnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoIXRoaXMuc3BlY3RhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZUNvbnRyb2xzID0gcGF0Y2goY29udGFpbmVyLCBoKCdkaXYuYnRuLWNvbnRyb2xzJywgW1xyXG4gICAgICAgICAgICAgICAgaCgnYnV0dG9uI2Fib3J0JywgeyBvbjogeyBjbGljazogKCkgPT4gYWJvcnQoKSB9LCBwcm9wczoge3RpdGxlOiAnQWJvcnQnfSB9LCBbaCgnaScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tYWJvcnRcIjogdHJ1ZX0gfSApLCBdKSxcclxuICAgICAgICAgICAgICAgIGgoJ2J1dHRvbiNkcmF3JywgeyBvbjogeyBjbGljazogKCkgPT4gZHJhdygpIH0sIHByb3BzOiB7dGl0bGU6IFwiRHJhd1wifSB9LCBbaCgnaScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24taGFuZC1wYXBlci1vXCI6IHRydWV9IH0gKSwgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdidXR0b24jcmVzaWduJywgeyBvbjogeyBjbGljazogKCkgPT4gcmVzaWduKCkgfSwgcHJvcHM6IHt0aXRsZTogXCJSZXNpZ25cIn0gfSwgW2goJ2knLCB7Y2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLWZsYWctb1wiOiB0cnVlfSB9ICksIF0pLFxyXG4gICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdhbWVDb250cm9scyA9IHBhdGNoKGNvbnRhaW5lciwgaCgnZGl2JykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGF0Y2goZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvYXJkLXNldHRpbmdzJykgYXMgSFRNTEVsZW1lbnQsIHNldHRpbmdzVmlldyh0aGlzKSk7XHJcblxyXG4gICAgICAgIHBhdGNoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3ZlbGlzdCcpIGFzIEhUTUxFbGVtZW50LCBtb3ZlbGlzdFZpZXcodGhpcykpO1xyXG5cclxuICAgICAgICBwYXRjaChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm91bmRjaGF0JykgYXMgSFRNTEVsZW1lbnQsIGNoYXRWaWV3KHRoaXMsIFwicm91bmRjaGF0XCIpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRHcm91bmQgPSAoKSA9PiB0aGlzLmNoZXNzZ3JvdW5kO1xyXG4gICAgZ2V0RGVzdHMgPSAoKSA9PiB0aGlzLmRlc3RzO1xyXG5cclxuICAgIHByaXZhdGUgb25Nc2dHYW1lU3RhcnQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJnb3QgZ2FtZVN0YXJ0IG1zZzpcIiwgbXNnKTtcclxuICAgICAgICBpZiAobXNnLmdhbWVJZCAhPT0gdGhpcy5tb2RlbFtcImdhbWVJZFwiXSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5zcGVjdGF0b3IpIHNvdW5kLmdlbmVyaWNOb3RpZnkoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnTmV3R2FtZSA9IChtc2cpID0+IHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHRoaXMubW9kZWxbXCJob21lXCJdICsgJy8nICsgbXNnW1wiZ2FtZUlkXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbWF0Y2ggPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcInJlbWF0Y2hcIiwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV3T3Bwb25lbnQgPSAoaG9tZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZG9TZW5kKHtcInR5cGVcIjogXCJsZWF2ZVwiLCBcImdhbWVJZFwiOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdfSk7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihob21lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFuYWx5c2lzID0gKGhvbWUpID0+IHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGhvbWUgKyAnLycgKyB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdhbWVPdmVyID0gKCkgPT4ge1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZWxpc3QnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICB2YXIgbW92ZXNUYWlsOiBWTm9kZVtdID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMudHVybkNvbG9yID09PSAnYmxhY2snKSBtb3Zlc1RhaWwucHVzaChoKCdsaS5tb3ZlLmhpZGRlbicsICdYJykpO1xyXG4gICAgICAgIG1vdmVzVGFpbC5wdXNoKGgoJ2RpdiNyZXN1bHQnLCByZXN1bHQodGhpcy5zdGF0dXMsIHRoaXMucmVzdWx0KSkpO1xyXG4gICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnb2wubW92ZWxpc3QjbW92ZWxpc3QnLCBtb3Zlc1RhaWwpKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnNwZWN0YXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmdhbWVDb250cm9scyA9IHBhdGNoKHRoaXMuZ2FtZUNvbnRyb2xzLCBoKCdkaXYnKSk7XHJcbiAgICAgICAgICAgIHBhdGNoKHRoaXMuZ2FtZUNvbnRyb2xzLCBoKCdkaXYjYWZ0ZXItZ2FtZS1jb250cm9scycsIFtcclxuICAgICAgICAgICAgICAgIGgoJ2J1dHRvbi5yZW1hdGNoJywgeyBvbjogeyBjbGljazogKCkgPT4gdGhpcy5yZW1hdGNoKCkgfSB9LCBcIlJFTUFUQ0hcIiksXHJcbiAgICAgICAgICAgICAgICBoKCdidXR0b24ubmV3b3BwJywgeyBvbjogeyBjbGljazogKCkgPT4gdGhpcy5uZXdPcHBvbmVudCh0aGlzLm1vZGVsW1wiaG9tZVwiXSkgfSB9LCBcIk5FVyBPUFBPTkVOVFwiKSxcclxuICAgICAgICAgICAgICAgIGgoJ2J1dHRvbi5hbmFseXNpcycsIHsgb246IHsgY2xpY2s6ICgpID0+IHRoaXMuYW5hbHlzaXModGhpcy5tb2RlbFtcImhvbWVcIl0pIH0gfSwgXCJBTkFMWVNJUyBCT0FSRFwiKSxcclxuICAgICAgICAgICAgXSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrU3RhdHVzID0gKG1zZykgPT4ge1xyXG4gICAgICAgIGlmIChtc2cuZ2FtZUlkICE9PSB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG1zZy5zdGF0dXMgPj0gMCAmJiB0aGlzLnJlc3VsdCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICB0aGlzLmNsb2Nrc1swXS5wYXVzZShmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvY2tzWzFdLnBhdXNlKGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSBtc2cucmVzdWx0O1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IG1zZy5zdGF0dXM7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobXNnLnJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIjEvMi0xLzJcIjpcclxuICAgICAgICAgICAgICAgICAgICBzb3VuZC5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiMS0wXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNwZWN0YXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5teWNvbG9yID09PSBcIndoaXRlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdW5kLnZpY3RvcnkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdW5kLmRlZmVhdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIjAtMVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zcGVjdGF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubXljb2xvciA9PT0gXCJibGFja1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VuZC52aWN0b3J5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VuZC5kZWZlYXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIC8vIEFCT1JURURcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nYW1lT3ZlcigpO1xyXG4gICAgICAgICAgICBzZWxlY3RNb3ZlKHRoaXMsIHRoaXMucGx5KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsZWFuIHVwIGdhdGluZy9wcm9tb3Rpb24gd2lkZ2V0IGxlZnQgb3ZlciB0aGUgZ3JvdW5kIHdoaWxlIGdhbWUgZW5kZWQgYnkgdGltZSBvdXRcclxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlbnNpb25fY2hvaWNlJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBFbGVtZW50KSBwYXRjaChjb250YWluZXIsIGgoJ2V4dGVuc2lvbicpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnR2KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7dGhpcy5kb1NlbmQoeyB0eXBlOiBcInVwZGF0ZVRWXCIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSwgcHJvZmlsZUlkOiB0aGlzLm1vZGVsW1wicHJvZmlsZWlkXCJdIH0pO30sIDIwMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nc2dVcGRhdGVUViA9IChtc2cpID0+IHtcclxuICAgICAgICBpZiAobXNnLmdhbWVJZCAhPT0gdGhpcy5tb2RlbFtcImdhbWVJZFwiXSkge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHRoaXMubW9kZWxbXCJob21lXCJdICsgJy90dicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnQm9hcmQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgaWYgKG1zZy5nYW1lSWQgIT09IHRoaXMubW9kZWxbXCJnYW1lSWRcIl0pIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJnb3QgYm9hcmQgbXNnOlwiLCBtc2cpO1xyXG4gICAgICAgIHRoaXMucGx5ID0gbXNnLnBseVxyXG4gICAgICAgIHRoaXMuZnVsbGZlbiA9IG1zZy5mZW47XHJcbiAgICAgICAgdGhpcy5kZXN0cyA9IG1zZy5kZXN0cztcclxuICAgICAgICAvLyBsaXN0IG9mIGxlZ2FsIHByb21vdGlvbiBtb3Zlc1xyXG4gICAgICAgIHRoaXMucHJvbW90aW9ucyA9IG1zZy5wcm9tbztcclxuICAgICAgICBjb25zdCBjbG9ja3MgPSBtc2cuY2xvY2tzO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJ0cyA9IG1zZy5mZW4uc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIHRoaXMudHVybkNvbG9yID0gcGFydHNbMV0gPT09IFwid1wiID8gXCJ3aGl0ZVwiIDogXCJibGFja1wiO1xyXG5cclxuICAgICAgICBpZiAobXNnLnN0ZXBzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGVwcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmVsaXN0JykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnZGl2I21vdmVsaXN0JykpO1xyXG5cclxuICAgICAgICAgICAgbXNnLnN0ZXBzLmZvckVhY2goKHN0ZXApID0+IHsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBzLnB1c2goc3RlcCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdXBkYXRlTW92ZWxpc3QodGhpcywgMSwgdGhpcy5zdGVwcy5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChtc2cucGx5ID09PSB0aGlzLnN0ZXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RlcCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAnZmVuJzogbXNnLmZlbixcclxuICAgICAgICAgICAgICAgICAgICAnbW92ZSc6IG1zZy5sYXN0TW92ZSxcclxuICAgICAgICAgICAgICAgICAgICAnY2hlY2snOiBtc2cuY2hlY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgJ3R1cm5Db2xvcic6IHRoaXMudHVybkNvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICdzYW4nOiBtc2cuc3RlcHNbMF0uc2FuLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBzLnB1c2goc3RlcCk7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVNb3ZlbGlzdCh0aGlzLCB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEsIHRoaXMuc3RlcHMubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hYm9ydGFibGUgPSBOdW1iZXIocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pIDw9IDE7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNwZWN0YXRvciAmJiAhdGhpcy5hYm9ydGFibGUgJiYgdGhpcy5yZXN1bHQgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhYm9ydCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ2J1dHRvbiNhYm9ydCcsIHsgcHJvcHM6IHtkaXNhYmxlZDogdHJ1ZX0gfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGxhc3RNb3ZlID0gbXNnLmxhc3RNb3ZlO1xyXG4gICAgICAgIGlmIChsYXN0TW92ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpKSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0TW92ZSA9IHVzaTJ1Y2kobGFzdE1vdmUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFyaWFudC5zdGFydHNXaXRoKCdncmFuZCcpKSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0TW92ZSA9IGdyYW5kMnplcm8obGFzdE1vdmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxhc3RNb3ZlID0gW2xhc3RNb3ZlLnNsaWNlKDAsMiksIGxhc3RNb3ZlLnNsaWNlKDIsNCldO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkcm9wIGxhc3RNb3ZlIGNhdXNpbmcgc2Nyb2xsYmFyIGZsaWNrZXIsXHJcbiAgICAgICAgLy8gc28gd2UgcmVtb3ZlIGZyb20gcGFydCB0byBhdm9pZCB0aGF0XHJcbiAgICAgICAgaWYgKGxhc3RNb3ZlICE9PSBudWxsICYmIGxhc3RNb3ZlWzBdWzFdID09PSAnQCcpIGxhc3RNb3ZlID0gW2xhc3RNb3ZlWzFdXTtcclxuICAgICAgICAvLyBzYXZlIGNhcHR1cmUgc3RhdGUgYmVmb3JlIHVwZGF0aW5nIGNoZXNzZ3JvdW5kXHJcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IGxhc3RNb3ZlICE9PSBudWxsICYmIHRoaXMuY2hlc3Nncm91bmQuc3RhdGUucGllY2VzW2xhc3RNb3ZlWzFdXVxyXG5cclxuICAgICAgICBpZiAobGFzdE1vdmUgIT09IG51bGwgJiYgKHRoaXMudHVybkNvbG9yID09PSB0aGlzLm15Y29sb3IgfHwgdGhpcy5zcGVjdGF0b3IpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykpIHtcclxuICAgICAgICAgICAgICAgIHNvdW5kLnNob2dpbW92ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VuZC5jYXB0dXJlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLm1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxhc3RNb3ZlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tTdGF0dXMobXNnKTtcclxuICAgICAgICBpZiAobXNnLmNoZWNrKSB7XHJcbiAgICAgICAgICAgIHNvdW5kLmNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBvcHBjbG9jayA9ICF0aGlzLmZsaXAgPyAwIDogMTtcclxuICAgICAgICBjb25zdCBteWNsb2NrID0gMSAtIG9wcGNsb2NrO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zcGVjdGF0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoe1xyXG4gICAgICAgICAgICAgICAgZmVuOiBwYXJ0c1swXSxcclxuICAgICAgICAgICAgICAgIHR1cm5Db2xvcjogdGhpcy50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgICAgICBjaGVjazogbXNnLmNoZWNrLFxyXG4gICAgICAgICAgICAgICAgbGFzdE1vdmU6IGxhc3RNb3ZlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdXBkYXRlUG9ja2V0cyh0aGlzLCB0aGlzLnZwb2NrZXQwLCB0aGlzLnZwb2NrZXQxKTtcclxuICAgICAgICAgICAgdGhpcy5jbG9ja3NbMF0ucGF1c2UoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmNsb2Nrc1sxXS5wYXVzZShmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvY2tzW29wcGNsb2NrXS5zZXRUaW1lKGNsb2Nrc1t0aGlzLm9wcGNvbG9yXSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvY2tzW215Y2xvY2tdLnNldFRpbWUoY2xvY2tzW3RoaXMubXljb2xvcl0pO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYWJvcnRhYmxlICYmIG1zZy5zdGF0dXMgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50dXJuQ29sb3IgPT09IHRoaXMubXljb2xvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvY2tzW215Y2xvY2tdLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvY2tzW29wcGNsb2NrXS5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHVybkNvbG9yID09PSB0aGlzLm15Y29sb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc2V0KHtcclxuICAgICAgICAgICAgICAgICAgICBmZW46IHBhcnRzWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHR1cm5Db2xvcjogdGhpcy50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgbW92YWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmVlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMubXljb2xvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHM6IG1zZy5kZXN0cyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrOiBtc2cuY2hlY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdE1vdmU6IGxhc3RNb3ZlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVQb2NrZXRzKHRoaXMsIHRoaXMudnBvY2tldDAsIHRoaXMudnBvY2tldDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9ja3Nbb3BwY2xvY2tdLnBhdXNlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvY2tzW29wcGNsb2NrXS5zZXRUaW1lKGNsb2Nrc1t0aGlzLm9wcGNvbG9yXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb2Nrc1tteWNsb2NrXS5zZXRUaW1lKGNsb2Nrc1t0aGlzLm15Y29sb3JdKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hYm9ydGFibGUgJiYgbXNnLnN0YXR1cyA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb2Nrc1tteWNsb2NrXS5zdGFydChjbG9ja3NbdGhpcy5teWNvbG9yXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ01ZIENMT0NLIFNUQVJURUQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwidHJ5aW5nIHRvIHBsYXkgcHJlbW92ZS4uLi5cIik7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVtb3ZlKSB0aGlzLnBlcmZvcm1QcmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVkcm9wKSB0aGlzLnBlcmZvcm1QcmVkcm9wKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnNldCh7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2l2aW5nIGZlbiBoZXJlIHdpbGwgcGxhY2UgY2FzdGxpbmcgcm9va3MgdG8gdGhlaXIgZGVzdGluYXRpb24gaW4gY2hlc3M5NjAgdmFyaWFudHNcclxuICAgICAgICAgICAgICAgICAgICBmZW46IHBhcnRzWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHR1cm5Db2xvcjogdGhpcy50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlbW92YWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0czogbXNnLmRlc3RzLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2s6IG1zZy5jaGVjayxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9ja3NbbXljbG9ja10ucGF1c2UoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9ja3NbbXljbG9ja10uc2V0VGltZShjbG9ja3NbdGhpcy5teWNvbG9yXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb2Nrc1tvcHBjbG9ja10uc2V0VGltZShjbG9ja3NbdGhpcy5vcHBjb2xvcl0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFib3J0YWJsZSAmJiBtc2cuc3RhdHVzIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvY2tzW29wcGNsb2NrXS5zdGFydChjbG9ja3NbdGhpcy5vcHBjb2xvcl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdPUFAgQ0xPQ0sgIFNUQVJURUQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wcElzUmFuZG9tTW92ZXIgJiYgbXNnLnJtICAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJtb3ZlXCIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSwgbW92ZTogbXNnLnJtLCBjbG9ja3M6IGNsb2NrcyB9KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnb1BseSA9IChwbHkpID0+IHtcclxuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5zdGVwc1twbHldO1xyXG4gICAgICAgIHZhciBtb3ZlID0gc3RlcFsnbW92ZSddO1xyXG4gICAgICAgIHZhciBjYXB0dXJlID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKG1vdmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpKSBtb3ZlID0gdXNpMnVjaShtb3ZlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudC5zdGFydHNXaXRoKCdncmFuZCcpKSBtb3ZlID0gZ3JhbmQyemVybyhtb3ZlKTtcclxuICAgICAgICAgICAgbW92ZSA9IG1vdmUuc2xpY2UoMSwgMikgPT09ICdAJyA/IFttb3ZlLnNsaWNlKDIsIDQpXSA6IFttb3ZlLnNsaWNlKDAsIDIpLCBtb3ZlLnNsaWNlKDIsIDQpXTtcclxuICAgICAgICAgICAgY2FwdHVyZSA9IHRoaXMuY2hlc3Nncm91bmQuc3RhdGUucGllY2VzW21vdmVbbW92ZS5sZW5ndGggLSAxXV0gIT09IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc2V0KHtcclxuICAgICAgICAgICAgZmVuOiBzdGVwLmZlbixcclxuICAgICAgICAgICAgdHVybkNvbG9yOiBzdGVwLnR1cm5Db2xvcixcclxuICAgICAgICAgICAgbW92YWJsZToge1xyXG4gICAgICAgICAgICAgICAgZnJlZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5zcGVjdGF0b3IgPyB1bmRlZmluZWQgOiBzdGVwLnR1cm5Db2xvcixcclxuICAgICAgICAgICAgICAgIGRlc3RzOiB0aGlzLnJlc3VsdCA9PT0gXCJcIiAmJiBwbHkgPT09IHRoaXMuc3RlcHMubGVuZ3RoIC0gMSA/IHRoaXMuZGVzdHMgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjaGVjazogc3RlcC5jaGVjayxcclxuICAgICAgICAgICAgbGFzdE1vdmU6IG1vdmUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5mdWxsZmVuID0gc3RlcC5mZW47XHJcbiAgICAgICAgdXBkYXRlUG9ja2V0cyh0aGlzLCB0aGlzLnZwb2NrZXQwLCB0aGlzLnZwb2NrZXQxKTtcclxuXHJcbiAgICAgICAgaWYgKHBseSA9PT0gdGhpcy5wbHkgKyAxKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykpIHtcclxuICAgICAgICAgICAgICAgIHNvdW5kLnNob2dpbW92ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VuZC5jYXB0dXJlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLm1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBseSA9IHBseVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZG9TZW5kID0gKG1lc3NhZ2UpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIi0tLT4gZG9TZW5kKCk6XCIsIG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuc29jay5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNlbmRNb3ZlID0gKG9yaWcsIGRlc3QsIHByb21vKSA9PiB7XHJcbiAgICAgICAgLy8gcGF1c2UoKSB3aWxsIGFkZCBpbmNyZW1lbnQhXHJcbiAgICAgICAgY29uc3Qgb3BwY2xvY2sgPSAhdGhpcy5mbGlwID8gMCA6IDFcclxuICAgICAgICBjb25zdCBteWNsb2NrID0gMSAtIG9wcGNsb2NrO1xyXG4gICAgICAgIGNvbnN0IG1vdmV0aW1lID0gKHRoaXMuY2xvY2tzW215Y2xvY2tdLnJ1bm5pbmcpID8gRGF0ZS5ub3coKSAtIHRoaXMuY2xvY2tzW215Y2xvY2tdLnN0YXJ0VGltZSA6IDA7XHJcbiAgICAgICAgdGhpcy5jbG9ja3NbbXljbG9ja10ucGF1c2UoKHRoaXMuYmFzZSA9PT0gMCAmJiB0aGlzLnBseSA8IDIpID8gZmFsc2UgOiB0cnVlKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNlbmRNb3ZlKG9yaWcsIGRlc3QsIHByb20pXCIsIG9yaWcsIGRlc3QsIHByb21vKTtcclxuICAgICAgICBjb25zdCB1Y2lfbW92ZSA9IG9yaWcgKyBkZXN0ICsgcHJvbW87XHJcbiAgICAgICAgY29uc3QgbW92ZSA9IHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/IHVjaTJ1c2kodWNpX21vdmUpIDogKHRoaXMudmFyaWFudC5zdGFydHNXaXRoKCdncmFuZCcpKSA/IHplcm8yZ3JhbmQodWNpX21vdmUpIDogdWNpX21vdmU7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJzZW5kTW92ZShtb3ZlKVwiLCBtb3ZlKTtcclxuICAgICAgICAvLyBUT0RPOiBpZiBwcmVtb3ZlZCwgc2VuZCAwIHRpbWVcclxuICAgICAgICBsZXQgYmNsb2NrLCBjbG9ja3M7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZsaXApIHtcclxuICAgICAgICAgICAgYmNsb2NrID0gdGhpcy5teWNvbG9yID09PSBcImJsYWNrXCIgPyAxIDogMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBiY2xvY2sgPSB0aGlzLm15Y29sb3IgPT09IFwiYmxhY2tcIiA/IDAgOiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3Y2xvY2sgPSAxIC0gYmNsb2NrXHJcbiAgICAgICAgY2xvY2tzID0ge21vdmV0aW1lOiBtb3ZldGltZSwgYmxhY2s6IHRoaXMuY2xvY2tzW2JjbG9ja10uZHVyYXRpb24sIHdoaXRlOiB0aGlzLmNsb2Nrc1t3Y2xvY2tdLmR1cmF0aW9ufTtcclxuICAgICAgICB0aGlzLmRvU2VuZCh7IHR5cGU6IFwibW92ZVwiLCBnYW1lSWQ6IHRoaXMubW9kZWxbXCJnYW1lSWRcIl0sIG1vdmU6IG1vdmUsIGNsb2NrczogY2xvY2tzIH0pO1xyXG4gICAgICAgIGlmICghdGhpcy5hYm9ydGFibGUpIHRoaXMuY2xvY2tzW29wcGNsb2NrXS5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nb3ZlID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAob3JpZywgZGVzdCwgY2FwdHVyZWRQaWVjZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIiAgIGdyb3VuZC5vbk1vdmUoKVwiLCBvcmlnLCBkZXN0LCBjYXB0dXJlZFBpZWNlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkge1xyXG4gICAgICAgICAgICAgICAgc291bmQuc2hvZ2ltb3ZlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZWRQaWVjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLmNhcHR1cmUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc291bmQubW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Ecm9wID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAocGllY2UsIGRlc3QpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJncm91bmQub25Ecm9wKClcIiwgcGllY2UsIGRlc3QpO1xyXG4gICAgICAgICAgICBpZiAoZGVzdCAhPSAnejAnICYmIHBpZWNlLnJvbGUgJiYgZHJvcElzVmFsaWQodGhpcy5kZXN0cywgcGllY2Uucm9sZSwgZGVzdCkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VuZC5zaG9naW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc291bmQubW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGlja0Ryb3AgPSBwaWVjZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFByZW1vdmUgPSAob3JpZywgZGVzdCwgbWV0YSkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJlbW92ZSA9IHsgb3JpZywgZGVzdCwgbWV0YSB9O1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2V0UHJlbW92ZSgpIHRvOlwiLCBvcmlnLCBkZXN0LCBtZXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuc2V0UHJlbW92ZSA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnByZW1vdmUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0UHJlZHJvcCA9IChyb2xlLCBrZXkpID0+IHtcclxuICAgICAgICB0aGlzLnByZWRyb3AgPSB7IHJvbGUsIGtleSB9O1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2V0UHJlZHJvcCgpIHRvOlwiLCByb2xlLCBrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdW5zZXRQcmVkcm9wID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJlZHJvcCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwZXJmb3JtUHJlbW92ZSA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCB7IG9yaWcsIGRlc3QsIG1ldGEgfSA9IHRoaXMucHJlbW92ZTtcclxuICAgICAgICAvLyBUT0RPOiBwcm9tb3Rpb24/XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJwZXJmb3JtUHJlbW92ZSgpXCIsIG9yaWcsIGRlc3QsIG1ldGEpO1xyXG4gICAgICAgIHRoaXMuY2hlc3Nncm91bmQucGxheVByZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnByZW1vdmUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGVyZm9ybVByZWRyb3AgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyByb2xlLCBrZXkgfSA9IHRoaXMucHJlZHJvcDtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInBlcmZvcm1QcmVkcm9wKClcIiwgcm9sZSwga2V5KTtcclxuICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnBsYXlQcmVkcm9wKGRyb3AgPT4geyByZXR1cm4gZHJvcElzVmFsaWQodGhpcy5kZXN0cywgZHJvcC5yb2xlLCBkcm9wLmtleSk7IH0pO1xyXG4gICAgICAgIHRoaXMucHJlZHJvcCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblVzZXJNb3ZlID0gKG9yaWcsIGRlc3QsIG1ldGEpID0+IHtcclxuICAgICAgICAvLyBjaGVzc2dyb3VuZCBkb2Vzbid0IGtub3dzIGFib3V0IGVwLCBzbyB3ZSBoYXZlIHRvIHJlbW92ZSBlcCBjYXB0dXJlZCBwYXduXHJcbiAgICAgICAgY29uc3QgcGllY2VzID0gdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5waWVjZXM7XHJcbiAgICAgICAgY29uc3QgZ2VvbSA9IHRoaXMuY2hlc3Nncm91bmQuc3RhdGUuZ2VvbWV0cnk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJncm91bmQub25Vc2VyTW92ZSgpXCIsIG9yaWcsIGRlc3QsIG1ldGEsIHBpZWNlcyk7XHJcbiAgICAgICAgY29uc3QgbW92ZWQgPSBwaWVjZXNbZGVzdF0gYXMgUGllY2U7XHJcbiAgICAgICAgY29uc3QgZmlyc3RSYW5rSXMwID0gdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5kaW1lbnNpb25zLmhlaWdodCA9PT0gMTA7XHJcbiAgICAgICAgaWYgKG1ldGEuY2FwdHVyZWQgPT09IHVuZGVmaW5lZCAmJiBtb3ZlZC5yb2xlID09PSBcInBhd25cIiAmJiBvcmlnWzBdICE9IGRlc3RbMF0gJiYgaGFzRXAodGhpcy52YXJpYW50KSkge1xyXG4gICAgICAgICAgICBjb25zdCBwb3MgPSBrZXkycG9zKGRlc3QsIGZpcnN0UmFua0lzMCksXHJcbiAgICAgICAgICAgIHBhd25Qb3M6IFBvcyA9IFtwb3NbMF0sIHBvc1sxXSArICh0aGlzLm15Y29sb3IgPT09ICd3aGl0ZScgPyAtMSA6IDEpXTtcclxuICAgICAgICAgICAgY29uc3QgZGlmZjogUGllY2VzRGlmZiA9IHt9O1xyXG4gICAgICAgICAgICBkaWZmW3BvczJrZXkocGF3blBvcywgZ2VvbSldID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnNldFBpZWNlcyhkaWZmKTtcclxuICAgICAgICAgICAgbWV0YS5jYXB0dXJlZCA9IHtyb2xlOiBcInBhd25cIn07XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBpbmNyZWFzZSBwb2NrZXQgY291bnRcclxuICAgICAgICBpZiAoKHRoaXMudmFyaWFudCA9PT0gXCJjcmF6eWhvdXNlXCIgfHwgdGhpcy52YXJpYW50ID09PSBcImNhcGFob3VzZVwiIHx8IHRoaXMudmFyaWFudCA9PT0gXCJzaG91c2VcIiB8fCB0aGlzLnZhcmlhbnQgPT09IFwiZ3JhbmRob3VzZVwiIHx8IHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkgJiYgbWV0YS5jYXB0dXJlZCkge1xyXG4gICAgICAgICAgICB2YXIgcm9sZSA9IG1ldGEuY2FwdHVyZWQucm9sZVxyXG4gICAgICAgICAgICBpZiAobWV0YS5jYXB0dXJlZC5wcm9tb3RlZCkgcm9sZSA9IHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/IG1ldGEuY2FwdHVyZWQucm9sZS5zbGljZSgxKSBhcyBSb2xlIDogXCJwYXduXCI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5mbGlwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvY2tldHNbMF1bcm9sZV0rKztcclxuICAgICAgICAgICAgICAgIHRoaXMudnBvY2tldDAgPSBwYXRjaCh0aGlzLnZwb2NrZXQwLCBwb2NrZXRWaWV3KHRoaXMsIHRoaXMubXljb2xvciwgXCJ0b3BcIikpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2NrZXRzWzFdW3JvbGVdKys7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZwb2NrZXQxID0gcGF0Y2godGhpcy52cG9ja2V0MSwgcG9ja2V0Vmlldyh0aGlzLCB0aGlzLm15Y29sb3IsIFwiYm90dG9tXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vICBnYXRpbmcgZWxlcGhhbnQvaGF3a1xyXG4gICAgICAgIGlmICh0aGlzLnZhcmlhbnQgPT09IFwic2VpcmF3YW5cIiB8fCB0aGlzLnZhcmlhbnQgPT09IFwic2hvdXNlXCIpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByb21vdGlvbi5zdGFydChvcmlnLCBkZXN0LCBtZXRhKSAmJiAhdGhpcy5nYXRpbmcuc3RhcnQodGhpcy5mdWxsZmVuLCBvcmlnLCBkZXN0KSkgdGhpcy5zZW5kTW92ZShvcmlnLCBkZXN0LCAnJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByb21vdGlvbi5zdGFydChvcmlnLCBkZXN0LCBtZXRhKSkgdGhpcy5zZW5kTW92ZShvcmlnLCBkZXN0LCAnJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uVXNlckRyb3AgPSAocm9sZSwgZGVzdCkgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZ3JvdW5kLm9uVXNlckRyb3AoKVwiLCByb2xlLCBkZXN0KTtcclxuICAgICAgICAvLyBkZWNyZWFzZSBwb2NrZXQgY291bnRcclxuICAgICAgICAvL2NhbmNlbERyb3BNb2RlKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUpO1xyXG4gICAgICAgIGlmIChkcm9wSXNWYWxpZCh0aGlzLmRlc3RzLCByb2xlLCBkZXN0KSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mbGlwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvY2tldHNbMF1bcm9sZV0tLTtcclxuICAgICAgICAgICAgICAgIHRoaXMudnBvY2tldDAgPSBwYXRjaCh0aGlzLnZwb2NrZXQwLCBwb2NrZXRWaWV3KHRoaXMsIHRoaXMubXljb2xvciwgXCJ0b3BcIikpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2NrZXRzWzFdW3JvbGVdLS07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZwb2NrZXQxID0gcGF0Y2godGhpcy52cG9ja2V0MSwgcG9ja2V0Vmlldyh0aGlzLCB0aGlzLm15Y29sb3IsIFwiYm90dG9tXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlbmRNb3ZlKHJvbGVUb1Nhbltyb2xlXSArIFwiQFwiLCBkZXN0LCAnJylcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJzZW50IG1vdmVcIiwgbW92ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCIhISEgaW52YWxpZCBtb3ZlICEhIVwiLCByb2xlLCBkZXN0KTtcclxuICAgICAgICAgICAgLy8gcmVzdG9yZSBib2FyZFxyXG4gICAgICAgICAgICB0aGlzLmNsaWNrRHJvcCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoe1xyXG4gICAgICAgICAgICAgICAgZmVuOiB0aGlzLmZ1bGxmZW4sXHJcbiAgICAgICAgICAgICAgICBsYXN0TW92ZTogdGhpcy5sYXN0bW92ZSxcclxuICAgICAgICAgICAgICAgIHR1cm5Db2xvcjogdGhpcy5teWNvbG9yLFxyXG4gICAgICAgICAgICAgICAgbW92YWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlc3RzOiB0aGlzLmRlc3RzLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dEZXN0czogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2VsZWN0ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJncm91bmQub25TZWxlY3QoKVwiLCBrZXksIHNlbGVjdGVkLCB0aGlzLmNsaWNrRHJvcCwgdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZSk7XHJcbiAgICAgICAgICAgIC8vIElmIGRyb3Agc2VsZWN0aW9uIHdhcyBzZXQgZHJvcERlc3RzIHdlIGhhdmUgdG8gcmVzdG9yZSBkZXN0cyBoZXJlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlLm1vdmFibGUuZGVzdHMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoa2V5ICE9ICd6MCcgJiYgJ3owJyBpbiB0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlLm1vdmFibGUuZGVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsaWNrRHJvcCAhPT0gdW5kZWZpbmVkICYmIGRyb3BJc1ZhbGlkKHRoaXMuZGVzdHMsIHRoaXMuY2xpY2tEcm9wLnJvbGUsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLm5ld1BpZWNlKHRoaXMuY2xpY2tEcm9wLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Vc2VyRHJvcCh0aGlzLmNsaWNrRHJvcC5yb2xlLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGlja0Ryb3AgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAvL2NhbmNlbERyb3BNb2RlKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoeyBtb3ZhYmxlOiB7IGRlc3RzOiB0aGlzLmRlc3RzIH19KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gU2l0dHV5aW4gaW4gcGxhY2UgcHJvbW90aW9uIG9uIEN0cmwrY2xpY2tcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUuc3RhdHMuY3RybEtleSAmJiBcclxuICAgICAgICAgICAgICAgIChrZXkgaW4gdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5tb3ZhYmxlLmRlc3RzKSAmJlxyXG4gICAgICAgICAgICAgICAgKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUubW92YWJsZS5kZXN0c1trZXldLmluZGV4T2Yoa2V5KSA+PSAwKSAmJlxyXG4gICAgICAgICAgICAgICAgKHRoaXMudmFyaWFudCA9PT0gJ3NpdHR1eWluJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ3RybCBpbiBwbGFjZSBwcm9tb3Rpb25cIiwga2V5KTtcclxuICAgICAgICAgICAgICAgIHZhciBwaWVjZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIHZhciBwaWVjZSA9IHRoaXMuY2hlc3Nncm91bmQuc3RhdGUucGllY2VzW2tleV07XHJcbiAgICAgICAgICAgICAgICBwaWVjZXNba2V5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogcGllY2UhLmNvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIHJvbGU6ICdmZXJ6JyxcclxuICAgICAgICAgICAgICAgICAgICBwcm9tb3RlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc2V0UGllY2VzKHBpZWNlcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRNb3ZlKGtleSwga2V5LCAnZicpO1xyXG5cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ1VzZXJDb25uZWN0ZWQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdID0gbXNnW1widXNlcm5hbWVcIl07XHJcbiAgICAgICAgcmVuZGVyVXNlcm5hbWUodGhpcy5tb2RlbFtcImhvbWVcIl0sIHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSk7XHJcbiAgICAgICAgaWYgKHRoaXMuc3BlY3RhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJpc191c2VyX3ByZXNlbnRcIiwgdXNlcm5hbWU6IHRoaXMud3BsYXllciwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmRvU2VuZCh7IHR5cGU6IFwiaXNfdXNlcl9wcmVzZW50XCIsIHVzZXJuYW1lOiB0aGlzLmJwbGF5ZXIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIHdlIHdhbnQgdG8ga25vdyBsYXN0TW92ZSBhbmQgY2hlY2sgc3RhdHVzXHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJib2FyZFwiLCBnYW1lSWQ6IHRoaXMubW9kZWxbXCJnYW1lSWRcIl0gfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgb3BwX25hbWUgPSB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0gPT09IHRoaXMud3BsYXllciA/IHRoaXMuYnBsYXllciA6IHRoaXMud3BsYXllcjtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImlzX3VzZXJfcHJlc2VudFwiLCB1c2VybmFtZTogb3BwX25hbWUsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyMScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ2ktc2lkZS5vbmxpbmUjcGxheWVyMScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tb25saW5lXCI6IHRydWUsIFwiaWNvbi1vZmZsaW5lXCI6IGZhbHNlfX0pKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHByZXZlbnQgc2VuZGluZyBnYW1lU3RhcnQgbWVzc2FnZSB3aGVuIHVzZXIganVzdCByZWNvbmVjdGluZ1xyXG4gICAgICAgICAgICBpZiAobXNnLnBseSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcInJlYWR5XCIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRvU2VuZCh7IHR5cGU6IFwiYm9hcmRcIiwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnVXNlclByZXNlbnQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgICBpZiAobXNnLnVzZXJuYW1lID09PSB0aGlzLnBsYXllcnNbMF0pIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5ZXIwJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnaS1zaWRlLm9ubGluZSNwbGF5ZXIwJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1vbmxpbmVcIjogdHJ1ZSwgXCJpY29uLW9mZmxpbmVcIjogZmFsc2V9fSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyMScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ2ktc2lkZS5vbmxpbmUjcGxheWVyMScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tb25saW5lXCI6IHRydWUsIFwiaWNvbi1vZmZsaW5lXCI6IGZhbHNlfX0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ1VzZXJEaXNjb25uZWN0ZWQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgICBpZiAobXNnLnVzZXJuYW1lID09PSB0aGlzLnBsYXllcnNbMF0pIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5ZXIwJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnaS1zaWRlLm9ubGluZSNwbGF5ZXIwJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1vbmxpbmVcIjogZmFsc2UsIFwiaWNvbi1vZmZsaW5lXCI6IHRydWV9fSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyMScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ2ktc2lkZS5vbmxpbmUjcGxheWVyMScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tb25saW5lXCI6IGZhbHNlLCBcImljb24tb2ZmbGluZVwiOiB0cnVlfX0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ0NoYXQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgaWYgKG1zZy51c2VyICE9PSB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0pIHtcclxuICAgICAgICAgICAgaWYgKCh0aGlzLnNwZWN0YXRvciAmJiBtc2cucm9vbSA9PT0gJ3NwZWN0YXRvcicpIHx8ICghdGhpcy5zcGVjdGF0b3IgJiYgbXNnLnJvb20gIT09ICdzcGVjdGF0b3InKSB8fCBtc2cudXNlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNoYXRNZXNzYWdlKG1zZy51c2VyLCBtc2cubWVzc2FnZSwgXCJyb3VuZGNoYXRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ0Z1bGxDaGF0ID0gKG1zZykgPT4ge1xyXG4gICAgICAgIG1zZy5saW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5zcGVjdGF0b3IgJiYgbGluZS5yb29tID09PSAnc3BlY3RhdG9yJykgfHwgKCF0aGlzLnNwZWN0YXRvciAmJiBsaW5lLnJvb20gIT09ICdzcGVjdGF0b3InKSB8fCBsaW5lLnVzZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjaGF0TWVzc2FnZShsaW5lLnVzZXIsIGxpbmUubWVzc2FnZSwgXCJyb3VuZGNoYXRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnTW9yZVRpbWUgPSAoKSA9PiB7XHJcbiAgICAgICAgY2hhdE1lc3NhZ2UoJycsIHRoaXMubXljb2xvciArICcgKzE1IHNlY29uZHMnLCBcInJvdW5kY2hhdFwiKTtcclxuICAgICAgICB0aGlzLmNsb2Nrc1sxXS5zZXRUaW1lKHRoaXMuY2xvY2tzWzFdLmR1cmF0aW9uICsgMTUgKiAxMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnT2ZmZXIgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgY2hhdE1lc3NhZ2UoXCJcIiwgbXNnLm1lc3NhZ2UsIFwicm91bmRjaGF0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nc2dHYW1lTm90Rm91bmQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgYWxlcnQoXCJSZXF1c2V0ZWQgZ2FtZSBcIiArIG1zZ1snZ2FtZUlkJ10gKyBcIiBub3QgZm91bmQhXCIpO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odGhpcy5tb2RlbFtcImhvbWVcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25NZXNzYWdlID0gKGV2dCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiPCsrKyBvbk1lc3NhZ2UoKTpcIiwgZXZ0LmRhdGEpO1xyXG4gICAgICAgIHZhciBtc2cgPSBKU09OLnBhcnNlKGV2dC5kYXRhKTtcclxuICAgICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJib2FyZFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ0JvYXJkKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImdhbWVFbmRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tTdGF0dXMobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZ2FtZVN0YXJ0XCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnR2FtZVN0YXJ0KG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImdhbWVfdXNlcl9jb25uZWN0ZWRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dVc2VyQ29ubmVjdGVkKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInVzZXJfcHJlc2VudFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ1VzZXJQcmVzZW50KG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInVzZXJfZGlzY29ubmVjdGVkXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnVXNlckRpc2Nvbm5lY3RlZChtc2cpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJyb3VuZGNoYXRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dDaGF0KG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImZ1bGxjaGF0XCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnRnVsbENoYXQobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibmV3X2dhbWVcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dOZXdHYW1lKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm9mZmVyXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnT2ZmZXIobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibW9yZXRpbWVcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dNb3JlVGltZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVUVlwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ1VwZGF0ZVRWKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICBjYXNlIFwiZ2FtZV9ub3RfZm91bmRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dHYW1lTm90Rm91bmQobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IGluaXQgfSBmcm9tIFwic25hYmJkb21cIjtcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSAnc25hYmJkb20vdm5vZGUnO1xuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvcHJvcHMnO1xuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcblxuY29uc3QgcGF0Y2ggPSBpbml0KFtrbGFzcywgYXR0cmlidXRlcywgcHJvcGVydGllcywgbGlzdGVuZXJzXSk7XG5cbmltcG9ydCBoIGZyb20gJ3NuYWJiZG9tL2gnO1xuXG5pbXBvcnQgeyBkaW1lbnNpb25zIH0gZnJvbSAnY2hlc3Nncm91bmR4L3R5cGVzJztcbmltcG9ydCB7IHZhcmlhbnRzLCBWQVJJQU5UUyB9IGZyb20gJy4vY2hlc3MnO1xuaW1wb3J0IHsgcG9ja2V0VmlldyB9IGZyb20gJy4vcG9ja2V0JztcbmltcG9ydCB7IG5lZWRQb2NrZXRzIH0gZnJvbSAnLi9jaGVzcyc7XG5pbXBvcnQgeyBwbGF5ZXIgfSBmcm9tICcuL3BsYXllcic7XG5pbXBvcnQgeyBhbmFseXNpc0NoYXJ0IH0gZnJvbSAnLi9jaGFydCc7XG5pbXBvcnQgQW5hbHlzaXNDb250cm9sbGVyIGZyb20gJy4vYW5hbHlzaXNDdHJsJztcblxuLy8gVE9ETzogYWRkIGRhcmsvbGlnaHQgdGhlbWUgYnV0dG9ucyAoaWNvbi1zdW4tby9pY29uLW1vb24tbylcblxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNTUyhjc3NGaWxlKSB7XG4gICAgLy8gY3NzIGZpbGUgaW5kZXggaW4gdGVtcGxhdGUuaHRtbFxuICAgIHZhciBjc3NMaW5rSW5kZXggPSAxO1xuICAgIGlmIChjc3NGaWxlLmluY2x1ZGVzKFwieGlhbmdxaVwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSAzO1xuICAgIH0gZWxzZSBpZiAoY3NzRmlsZS5pbmNsdWRlcyhcInNob2dpXCIpKSB7XG4gICAgICAgIGNzc0xpbmtJbmRleCA9IDI7XG4gICAgfSBlbHNlIGlmIChjc3NGaWxlLmluY2x1ZGVzKFwiY2FwYVwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSA0O1xuICAgIH0gZWxzZSBpZiAoY3NzRmlsZS5pbmNsdWRlcyhcIm1ha3J1a1wiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSA1O1xuICAgIH0gZWxzZSBpZiAoY3NzRmlsZS5pbmNsdWRlcyhcInNpdHR1eWluXCIpKSB7XG4gICAgICAgIGNzc0xpbmtJbmRleCA9IDY7XG4gICAgfSBlbHNlIGlmIChjc3NGaWxlLmluY2x1ZGVzKFwic2VpclwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSA3O1xuICAgIH0gZWxzZSBpZiAoY3NzRmlsZS5pbmNsdWRlcyhcIjh4OFwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSA4O1xuICAgIH0gZWxzZSBpZiAoY3NzRmlsZS5pbmNsdWRlcyhcIjEweDhcIikpIHtcbiAgICAgICAgY3NzTGlua0luZGV4ID0gOTtcbiAgICB9IGVsc2UgaWYgKGNzc0ZpbGUuaW5jbHVkZXMoXCIxMHgxMFwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSAxMDtcbiAgICB9IGVsc2UgaWYgKGNzc0ZpbGUuaW5jbHVkZXMoXCI5eDlcIikpIHtcbiAgICAgICAgY3NzTGlua0luZGV4ID0gMTE7XG4gICAgfSBlbHNlIGlmIChjc3NGaWxlLmluY2x1ZGVzKFwiOXgxMFwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSAxMjtcbiAgICB9IGVsc2UgaWYgKGNzc0ZpbGUuaW5jbHVkZXMoXCJtYWtyYlwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSAxMztcbiAgICB9IGVsc2UgaWYgKGNzc0ZpbGUuaW5jbHVkZXMoXCJzaXR0YlwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSAxNDtcbiAgICB9IGVsc2UgaWYgKGNzc0ZpbGUuaW5jbHVkZXMoXCI1eDVcIikpIHtcbiAgICAgICAgY3NzTGlua0luZGV4ID0gMTU7XG4gICAgfVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwibGlua1wiKS5pdGVtKGNzc0xpbmtJbmRleCkhLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgY3NzRmlsZSk7XG59XG5cbmZ1bmN0aW9uIHNldEJvYXJkIChDU1NpbmRleGVzQiwgdmFyaWFudCwgY29sb3IpIHtcbiAgICBjb25zb2xlLmxvZyhcInNldEJvYXJkKClcIiwgQ1NTaW5kZXhlc0IsIHZhcmlhbnQsIGNvbG9yKVxuICAgIHZhciBpZHggPSBDU1NpbmRleGVzQlt2YXJpYW50cy5pbmRleE9mKHZhcmlhbnQpXTtcbiAgICBpZHggPSBNYXRoLm1pbihpZHgsIFZBUklBTlRTW3ZhcmlhbnRdLkJvYXJkQ1NTLmxlbmd0aCAtIDEpO1xuICAgIGNoYW5nZUNTUygnL3N0YXRpYy8nICsgVkFSSUFOVFNbdmFyaWFudF0uQm9hcmRDU1NbaWR4XSArICcuY3NzJyk7XG59XG5cbmZ1bmN0aW9uIHNldFBpZWNlcyAoY3RybCwgY29sb3IpIHtcbiAgICBjb25zdCBDU1NpbmRleGVzUCA9IGN0cmwuQ1NTaW5kZXhlc1AsIHZhcmlhbnQgPSBjdHJsLnZhcmlhbnQsIGNoZXNzZ3JvdW5kID0gY3RybC5jaGVzc2dyb3VuZDtcbiAgICB2YXIgaWR4ID0gQ1NTaW5kZXhlc1BbdmFyaWFudHMuaW5kZXhPZih2YXJpYW50KV07XG4gICAgaWR4ID0gTWF0aC5taW4oaWR4LCBWQVJJQU5UU1t2YXJpYW50XS5QaWVjZUNTUy5sZW5ndGggLSAxKTtcbiAgICBpZiAodmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkge1xuICAgICAgICB2YXIgY3NzID0gVkFSSUFOVFNbdmFyaWFudF0uUGllY2VDU1NbaWR4XTtcbiAgICAgICAgLy8gY2hhbmdlIHNob2dpIHBpZWNlIGNvbG9ycyBhY2NvcmRpbmcgdG8gYm9hcmQgb3JpZW50YXRpb25cbiAgICAgICAgaWYgKGNvbG9yID09PSBcImJsYWNrXCIpIGNzcyA9IGNzcy5yZXBsYWNlKCcwJywgJzEnKTtcbiAgICAgICAgY2hhbmdlQ1NTKCcvc3RhdGljLycgKyBjc3MgKyAnLmNzcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYW5nZUNTUygnL3N0YXRpYy8nICsgVkFSSUFOVFNbdmFyaWFudF0uUGllY2VDU1NbaWR4XSArICcuY3NzJyk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKFwiLS0tIHNldFBpZWNlcygpXCIpO1xuICAgIC8vIFdlIHVzZSBwYWxlR3JlZW4gYXJyb3dzIGFuZCBjaXJjbGVzIGZvciBhbmFseXNpcyBQViBzdWdnZXN0aW9uc1xuICAgIC8vIEZvciBkcm9wIG1vdmVzIHdlIGFsc28gd2FudCB0byBkcmF3IHRoZSBkcm9wcGVkIHBpZWNlXG4gICAgaWYgKG5lZWRQb2NrZXRzKGN0cmwudmFyaWFudCkpIHtcbiAgICAgICAgY29uc3QgYmFzZXVybCA9IFZBUklBTlRTW3ZhcmlhbnRdLmJhc2VVUkxbaWR4XSArICcvJztcbiAgICAgICAgY29uc29sZS5sb2coXCItLS0gYmFzZXVybFwiLCBiYXNldXJsKTtcbiAgICAgICAgY2hlc3Nncm91bmQuc2V0KHtcbiAgICAgICAgICAgIGRyYXdhYmxlOiB7XG4gICAgICAgICAgICAgICAgcGllY2VzOiB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw6IGN0cmwubW9kZWxbJ2hvbWUnXSArICcvc3RhdGljL2ltYWdlcy9waWVjZXMvJyArIGJhc2V1cmxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2V0Wm9vbSAoY3RybCwgem9vbTogbnVtYmVyKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2ctd3JhcCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChlbCkge1xuICAgICAgICBjb25zdCBiYXNlV2lkdGggPSBkaW1lbnNpb25zW1ZBUklBTlRTW2N0cmwudmFyaWFudF0uZ2VvbV0ud2lkdGggKiAoY3RybC52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpID8gNTIgOiA2NCk7XG4gICAgICAgIGNvbnN0IGJhc2VIZWlnaHQgPSBkaW1lbnNpb25zW1ZBUklBTlRTW2N0cmwudmFyaWFudF0uZ2VvbV0uaGVpZ2h0ICogKGN0cmwudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/IDYwIDogNjQpO1xuICAgICAgICBjb25zdCBweHcgPSBgJHt6b29tIC8gMTAwICogYmFzZVdpZHRofXB4YDtcbiAgICAgICAgY29uc3QgcHhoID0gYCR7em9vbSAvIDEwMCAqIGJhc2VIZWlnaHR9cHhgO1xuICAgICAgICBlbC5zdHlsZS53aWR0aCA9IHB4dztcbiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHhoO1xuICAgICAgICB2YXIgcHhwID0gKG5lZWRQb2NrZXRzKGN0cmwudmFyaWFudCkpID8gJzEzMnB4OycgOiAnMHB4Oyc7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCdzdHlsZScsICctLWNnd3JhcHdpZHRoOicgKyBweHcgKyAnOy0tY2d3cmFwaGVpZ2h0OicgKyBweGggKyAnOy0tcG9ja2V0aGVpZ2h0OicgKyBweHAgKyAnOyAtLVBWaGVpZ2h0OiAwcHg7Jyk7XG5cbiAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hlc3Nncm91bmQucmVzaXplJykpO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInpvb20tXCIgKyBjdHJsLnZhcmlhbnQsIFN0cmluZyh6b29tKSk7XG5cbiAgICAgICAgaWYgKGN0cmwgaW5zdGFuY2VvZiBBbmFseXNpc0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGFuYWx5c2lzQ2hhcnQoY3RybCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGZsaXBcbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVPcmllbnRhdGlvbiAoY3RybCkge1xuICAgIGN0cmwuZmxpcCA9ICFjdHJsLmZsaXA7XG4gICAgY3RybC5jaGVzc2dyb3VuZC50b2dnbGVPcmllbnRhdGlvbigpO1xuXG4gICAgaWYgKGN0cmwudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IGN0cmwuY2hlc3Nncm91bmQuc3RhdGUub3JpZW50YXRpb24gPT09IFwid2hpdGVcIiA/IFwid2hpdGVcIiA6IFwiYmxhY2tcIjtcbiAgICAgICAgc2V0UGllY2VzKGN0cmwsIGNvbG9yKTtcbiAgICB9O1xuICAgIFxuICAgIGNvbnNvbGUubG9nKFwiRkxJUFwiKTtcbiAgICBpZiAobmVlZFBvY2tldHMoY3RybC52YXJpYW50KSkge1xuICAgICAgICBjb25zdCB0bXBfcG9ja2V0ID0gY3RybC5wb2NrZXRzWzBdO1xuICAgICAgICBjdHJsLnBvY2tldHNbMF0gPSBjdHJsLnBvY2tldHNbMV07XG4gICAgICAgIGN0cmwucG9ja2V0c1sxXSA9IHRtcF9wb2NrZXQ7XG4gICAgICAgIGN0cmwudnBvY2tldDAgPSBwYXRjaChjdHJsLnZwb2NrZXQwLCBwb2NrZXRWaWV3KGN0cmwsIGN0cmwuZmxpcCA/IGN0cmwubXljb2xvciA6IGN0cmwub3BwY29sb3IsIFwidG9wXCIpKTtcbiAgICAgICAgY3RybC52cG9ja2V0MSA9IHBhdGNoKGN0cmwudnBvY2tldDEsIHBvY2tldFZpZXcoY3RybCwgY3RybC5mbGlwID8gY3RybC5vcHBjb2xvciA6IGN0cmwubXljb2xvciwgXCJib3R0b21cIikpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IG1vcmV0aW1lIGJ1dHRvblxuICAgIGNvbnN0IG5ld19ydW5uaW5nX2NsY2sgPSAoY3RybC5jbG9ja3NbMF0ucnVubmluZykgPyBjdHJsLmNsb2Nrc1sxXSA6IGN0cmwuY2xvY2tzWzBdO1xuICAgIGN0cmwuY2xvY2tzWzBdLnBhdXNlKGZhbHNlKTtcbiAgICBjdHJsLmNsb2Nrc1sxXS5wYXVzZShmYWxzZSk7XG5cbiAgICBjb25zdCB0bXBfY2xvY2sgPSBjdHJsLmNsb2Nrc1swXTtcbiAgICBjb25zdCB0bXBfY2xvY2tfdGltZSA9IHRtcF9jbG9jay5kdXJhdGlvbjtcbiAgICBjdHJsLmNsb2Nrc1swXS5zZXRUaW1lKGN0cmwuY2xvY2tzWzFdLmR1cmF0aW9uKTtcbiAgICBjdHJsLmNsb2Nrc1sxXS5zZXRUaW1lKHRtcF9jbG9ja190aW1lKTtcbiAgICBpZiAoY3RybC5zdGF0dXMgPCAwKSBuZXdfcnVubmluZ19jbGNrLnN0YXJ0KCk7XG5cbiAgICBjdHJsLnZwbGF5ZXIwID0gcGF0Y2goY3RybC52cGxheWVyMCwgcGxheWVyKCdwbGF5ZXIwJywgY3RybC50aXRsZXNbY3RybC5mbGlwID8gMSA6IDBdLCBjdHJsLnBsYXllcnNbY3RybC5mbGlwID8gMSA6IDBdLCBjdHJsLm1vZGVsW1wibGV2ZWxcIl0pKTtcbiAgICBjdHJsLnZwbGF5ZXIxID0gcGF0Y2goY3RybC52cGxheWVyMSwgcGxheWVyKCdwbGF5ZXIxJywgY3RybC50aXRsZXNbY3RybC5mbGlwID8gMCA6IDFdLCBjdHJsLnBsYXllcnNbY3RybC5mbGlwID8gMCA6IDFdLCBjdHJsLm1vZGVsW1wibGV2ZWxcIl0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlYXJCdXR0b24gKGN0cmwpIHtcbiAgICByZXR1cm4gaCgnYnV0dG9uI2dlYXInLCB7XG4gICAgICAgIG9uOiB7IGNsaWNrOiAoKSA9PiB0b2dnbGVCb2FyZFNldHRpbmdzKGN0cmwpIH0sXG4gICAgICAgIGNsYXNzOiB7XCJzZWxlY3RlZFwiOiBjdHJsLnNldHRpbmdzfSB9LFxuICAgICAgICBbaCgnaScsIHtcbiAgICAgICAgICAgIHByb3BzOiB7dGl0bGU6ICdTZXR0aW5ncyd9LFxuICAgICAgICAgICAgY2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLWNvZ1wiOiB0cnVlfSBcbiAgICAgICAgICAgIH1cbiAgICAgICAgKV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVCb2FyZFNldHRpbmdzIChjdHJsKSB7XG4gICAgY3RybC5zZXR0aW5ncyA9ICFjdHJsLnNldHRpbmdzO1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dlYXInKTtcbiAgICBpZiAoZWwgaW5zdGFuY2VvZiBFbGVtZW50KSBwYXRjaChjdHJsLnZnZWFyLCBnZWFyQnV0dG9uKGN0cmwpKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZWxpc3QtYmxvY2snKSEuc3R5bGUuZGlzcGxheSA9IChjdHJsLnNldHRpbmdzKSA/ICdub25lJyA6ICdpbmxpbmUtZ3JpZCc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvYXJkLXNldHRpbmdzJykhLnN0eWxlLmRpc3BsYXkgPSAoY3RybC5zZXR0aW5ncykgPyAnaW5saW5lLWdyaWQnOiAnbm9uZSc7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckJvYXJkcyAoY3RybCkge1xuICAgIGNvbnN0IHZhcmlhbnQgPSBjdHJsLnZhcmlhbnQ7XG4gICAgdmFyIHZib2FyZCA9IGN0cmwuQ1NTaW5kZXhlc0JbdmFyaWFudHMuaW5kZXhPZihjdHJsLnZhcmlhbnQpXTtcbiAgICB2YXIgaTtcbiAgICBjb25zdCBib2FyZHMgOiBWTm9kZVtdID0gW107XG5cbiAgICBjb25zdCB0b2dnbGVCb2FyZHMgPSAoZSkgPT4ge1xuICAgICAgICBjb25zdCBpZHggPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInRvZ2dsZUJvYXJkcygpXCIsIGlkeCk7XG4gICAgICAgIGN0cmwuQ1NTaW5kZXhlc0JbdmFyaWFudHMuaW5kZXhPZihjdHJsLnZhcmlhbnQpXSA9IGlkeFxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShjdHJsLnZhcmlhbnQgKyBcIl9ib2FyZFwiLCBTdHJpbmcoaWR4KSk7XG4gICAgICAgIHNldEJvYXJkKGN0cmwuQ1NTaW5kZXhlc0IsIGN0cmwudmFyaWFudCwgY3RybC5teWNvbG9yKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgVkFSSUFOVFNbY3RybC52YXJpYW50XS5Cb2FyZENTUy5sZW5ndGg7IGkrKykge1xuICAgICAgICBib2FyZHMucHVzaChoKCdpbnB1dCNib2FyZCcgKyBTdHJpbmcoaSksIHtcbiAgICAgICAgICAgIG9uOiB7IGNoYW5nZTogdG9nZ2xlQm9hcmRzIH0sXG4gICAgICAgICAgICBwcm9wczogeyB0eXBlOiBcInJhZGlvXCIsIG5hbWU6IFwiYm9hcmRcIiwgdmFsdWU6IFN0cmluZyhpKSwgY2hlY2tlZDogdmJvYXJkID09PSBTdHJpbmcoaSkgPyBcImNoZWNrZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBib2FyZHMucHVzaChoKCdsYWJlbC5ib2FyZC5ib2FyZCcgKyBTdHJpbmcoaSkgKyAnLicgKyB2YXJpYW50LCB7IGF0dHJzOiB7Zm9yOiBcImJvYXJkXCIgKyBTdHJpbmcoaSl9IH0sIFwiXCIpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJvYXJkcztcbn1cblxuZnVuY3Rpb24gcmVuZGVyUGllY2VzIChjdHJsKSB7XG4gICAgY29uc3QgdmFyaWFudCA9IGN0cmwudmFyaWFudDtcbiAgICB2YXIgdnBpZWNlID0gY3RybC5DU1NpbmRleGVzUFt2YXJpYW50cy5pbmRleE9mKGN0cmwudmFyaWFudCldO1xuICAgIHZhciBpO1xuICAgIGNvbnN0IHBpZWNlcyA6IFZOb2RlW10gPSBbXTtcblxuICAgIGNvbnN0IHRvZ2dsZVBpZWNlcyA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwidG9nZ2xlUGllY2VzKClcIiwgaWR4KTtcbiAgICAgICAgY3RybC5DU1NpbmRleGVzUFt2YXJpYW50cy5pbmRleE9mKGN0cmwudmFyaWFudCldID0gaWR4XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGN0cmwudmFyaWFudCArIFwiX3BpZWNlc1wiLCBTdHJpbmcoaWR4KSk7XG4gICAgICAgIHNldFBpZWNlcyhjdHJsLCBjdHJsLm15Y29sb3IpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBWQVJJQU5UU1tjdHJsLnZhcmlhbnRdLlBpZWNlQ1NTLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHBpZWNlcy5wdXNoKGgoJ2lucHV0I3BpZWNlJyArIFN0cmluZyhpKSwge1xuICAgICAgICAgICAgb246IHsgY2hhbmdlOiB0b2dnbGVQaWVjZXMgfSxcbiAgICAgICAgICAgIHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJwaWVjZVwiLCB2YWx1ZTogU3RyaW5nKGkpLCBjaGVja2VkOiB2cGllY2UgPT09IFN0cmluZyhpKSA/IFwiY2hlY2tlZFwiIDogXCJcIn1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHBpZWNlcy5wdXNoKGgoJ2xhYmVsLnBpZWNlLnBpZWNlJyArIFN0cmluZyhpKSArICcuJyArIHZhcmlhbnQsIHsgYXR0cnM6IHtmb3I6IFwicGllY2VcIiArIFN0cmluZyhpKX0gfSwgXCJcIikpO1xuICAgIH1cbiAgICByZXR1cm4gcGllY2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NWaWV3IChjdHJsKSB7XG5cbiAgICBpZiAoVkFSSUFOVFNbY3RybC52YXJpYW50XS5Cb2FyZENTUy5sZW5ndGggPiAxKSBzZXRCb2FyZChjdHJsLkNTU2luZGV4ZXNCLCBjdHJsLnZhcmlhbnQsIGN0cmwubXljb2xvcik7XG4gICAgaWYgKFZBUklBTlRTW2N0cmwudmFyaWFudF0uUGllY2VDU1MubGVuZ3RoID4gMSkgc2V0UGllY2VzKGN0cmwsIGN0cmwubXljb2xvcik7XG5cbiAgICAvLyB0dXJuIHNldHRpbmdzIHBhbmVsIG9mZlxuICAgIHRvZ2dsZUJvYXJkU2V0dGluZ3MoY3RybCk7XG4gICAgY29uc3Qgem9vbSA9IGxvY2FsU3RvcmFnZVtcInpvb20tXCIgKyBjdHJsLnZhcmlhbnRdO1xuICAgIGlmICh6b29tICE9PSB1bmRlZmluZWQgJiYgem9vbSAhPT0gMTAwKSBzZXRab29tKGN0cmwsIE51bWJlcih6b29tKSk7XG5cbiAgICByZXR1cm4gaCgnZGl2I2JvYXJkLXNldHRpbmdzJywgW1xuICAgICAgICBoKCdkaXYuc2V0dGluZ3MtcGllY2VzJywgcmVuZGVyUGllY2VzKGN0cmwpKSxcbiAgICAgICAgaCgnZGl2LnNldHRpbmdzLWJvYXJkcycsIHJlbmRlckJvYXJkcyhjdHJsKSksXG4gICAgICAgIC8vIFRPRE86IGhvdyB0byBob3Jpem9udGFseSBjZW50ZXIgdGhpcz9cbiAgICAgICAgLy8gaCgnbGFiZWwuem9vbScsIHsgYXR0cnM6IHtmb3I6IFwiem9vbVwifSB9LCBcIkJvYXJkIHNpemVcIiksXG4gICAgICAgIGgoJ2lucHV0I3pvb20nLCB7XG4gICAgICAgICAgICBjbGFzczoge1wic2xpZGVyXCI6IHRydWUgfSxcbiAgICAgICAgICAgIGF0dHJzOiB7IG5hbWU6ICd6b29tJywgd2lkdGg6ICcyODBweCcsIHR5cGU6ICdyYW5nZScsIHZhbHVlOiBOdW1iZXIoem9vbSksIG1pbjogNjAsIG1heDogMTYwIH0sXG4gICAgICAgICAgICBvbjogeyBpbnB1dDogKGUpID0+IHsgc2V0Wm9vbShjdHJsLCBwYXJzZUZsb2F0KChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSkpOyB9IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICBdKTtcbn1cbiIsImNsYXNzIHNvdW5kcyB7XHJcbiAgICB0cmFja3M7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRyYWNrcyA9IHtcclxuICAgICAgICAgICAgR2VuZXJpY05vdGlmeTogeyBuYW1lOiAnR2VuZXJpY05vdGlmeScsIHF0eSA6IDEsIHBvb2wgOiBbXSwgaW5kZXggOiAwfSxcclxuICAgICAgICAgICAgTW92ZTogeyBuYW1lOiAnTW92ZScsIHF0eSA6IDYsIHBvb2wgOiBbXSwgaW5kZXggOiAwfSxcclxuICAgICAgICAgICAgQ2FwdHVyZTogeyBuYW1lOiAnQ2FwdHVyZScsIHF0eSA6IDQsIHBvb2wgOiBbXSwgaW5kZXggOiAwfSxcclxuICAgICAgICAgICAgQ2hlY2s6IHsgbmFtZTogJ0NoZWNrJywgcXR5IDogMiwgcG9vbCA6IFtdLCBpbmRleCA6IDB9LFxyXG4gICAgICAgICAgICBEcmF3OiB7IG5hbWU6ICdEcmF3JywgcXR5IDogMSwgcG9vbCA6IFtdLCBpbmRleCA6IDB9LFxyXG4gICAgICAgICAgICBWaWN0b3J5OiB7IG5hbWU6ICdWaWN0b3J5JywgcXR5IDogMSwgcG9vbCA6IFtdLCBpbmRleCA6IDB9LFxyXG4gICAgICAgICAgICBEZWZlYXQ6IHsgbmFtZTogJ0RlZmVhdCcsIHF0eSA6IDEsIHBvb2wgOiBbXSwgaW5kZXggOiAwfSxcclxuICAgICAgICAgICAgU2hvZ2lNb3ZlOiB7IG5hbWU6ICdrb21hb3RvNScsIHF0eSA6IDYsIHBvb2wgOiBbXSwgaW5kZXggOiAwfSxcclxuICAgICAgICAgICAgQ2hhdDogeyBuYW1lOiAnY2hhdCcsIHF0eSA6IDEsIHBvb2wgOiBbXSwgaW5kZXggOiAwfSxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMudHJhY2tzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50cmFja3Nba2V5XTtcclxuICAgICAgICAgICAgdHlwZS5wb29sID0gdGhpcy5idWlsZE1hbnlTb3VuZHModHlwZS5uYW1lLCB0eXBlLnF0eSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZE1hbnlTb3VuZHMgPSAoZmlsZSwgcXR5KSA9PiB7XHJcbiAgICAgICAgdmFyIHNvdW5kQXJyYXk6IEhUTUxBdWRpb0VsZW1lbnRbXSA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChzb3VuZEFycmF5Lmxlbmd0aCA8IHF0eSkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYXVkaW9cIik7XHJcbiAgICAgICAgICAgIGlmIChlbC5jYW5QbGF5VHlwZSgnYXVkaW8vbXBlZycpKSB7XHJcbiAgICAgICAgICAgICAgICBlbC5zcmMgPSAnL3N0YXRpYy9zb3VuZC8nICsgZmlsZSArICcubXAzJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsLnNyYyA9ICcvc3RhdGljL3NvdW5kLycgKyBmaWxlICsgJy5vZ2cnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZShcInByZWxvYWRcIiwgXCJub25lXCIpO1xyXG4gICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgICAgIHNvdW5kQXJyYXkucHVzaChlbCk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc291bmRBcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFNvdW5kID0gKHR5cGUpID0+IHtcclxuICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy50cmFja3NbdHlwZV07XHJcbiAgICAgICAgdGFyZ2V0LmluZGV4ID0gKHRhcmdldC5pbmRleCArIDEpICUgdGFyZ2V0LnBvb2wubGVuZ3RoO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU09VTkQ6XCIsIHR5cGUsIHRhcmdldC5pbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldC5wb29sW3RhcmdldC5pbmRleF07XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJpY05vdGlmeSgpIHsgdGhpcy5nZXRTb3VuZCgnR2VuZXJpY05vdGlmeScpLnBsYXkoKTsgfTtcclxuICAgIG1vdmUoKSB7IHRoaXMuZ2V0U291bmQoJ01vdmUnKS5wbGF5KCk7IH07XHJcbiAgICBjYXB0dXJlKCkgeyB0aGlzLmdldFNvdW5kKCdDYXB0dXJlJykucGxheSgpOyB9O1xyXG4gICAgY2hlY2soKSB7IHRoaXMuZ2V0U291bmQoJ0NoZWNrJykucGxheSgpOyB9O1xyXG4gICAgZHJhdygpIHsgdGhpcy5nZXRTb3VuZCgnRHJhdycpLnBsYXkoKTsgfTtcclxuICAgIHZpY3RvcnkoKSB7IHRoaXMuZ2V0U291bmQoJ1ZpY3RvcnknKS5wbGF5KCk7IH07XHJcbiAgICBkZWZlYXQoKSB7IHRoaXMuZ2V0U291bmQoJ0RlZmVhdCcpLnBsYXkoKTsgfTtcclxuICAgIHNob2dpbW92ZSgpIHsgdGhpcy5nZXRTb3VuZCgnU2hvZ2lNb3ZlJykucGxheSgpOyB9O1xyXG4gICAgY2hhdCgpIHsgdGhpcy5nZXRTb3VuZCgnQ2hhdCcpLnBsYXkoKTsgfTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNvdW5kID0gbmV3KHNvdW5kcyk7XHJcbiIsImltcG9ydCB7IGluaXQgfSBmcm9tICdzbmFiYmRvbSc7XG5pbXBvcnQga2xhc3MgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9jbGFzcyc7XG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9wcm9wcyc7XG5pbXBvcnQgbGlzdGVuZXJzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvZXZlbnRsaXN0ZW5lcnMnO1xuXG5jb25zdCBwYXRjaCA9IGluaXQoW2tsYXNzLCBhdHRyaWJ1dGVzLCBwcm9wZXJ0aWVzLCBsaXN0ZW5lcnNdKTtcblxuaW1wb3J0IGggZnJvbSAnc25hYmJkb20vaCc7XG5cbi8vIFRPRE86IGNyZWF0ZSBsb2dvdXQgYnV0dG9uIHdoZW4gbG9nZ2VkIGluXG4vKlxuZnVuY3Rpb24gbG9naW4oaG9tZSkge1xuICAgIGNvbnNvbGUubG9nKFwiTE9HSU4gV0lUSCBMSUNIRVNTXCIpO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oaG9tZSArICcvbG9naW4nKTtcbn07XG4qL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclVzZXJuYW1lKGhvbWUsIHVzZXJuYW1lKSB7XG4gICAgY29uc29sZS5sb2coXCJyZW5kZXJVc2VybmFtZSgpXCIsIHVzZXJuYW1lLCBob21lKTtcbiAgICB2YXIgb2xkVk5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlcm5hbWUnKTtcbiAgICBpZiAob2xkVk5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgIG9sZFZOb2RlLmlubmVySFRNTCA9ICcnO1xuICAgICAgICBwYXRjaChvbGRWTm9kZSBhcyBIVE1MRWxlbWVudCwgaCgnZGl2I3VzZXJuYW1lJywgaCgnYS5uYXYtbGluaycsIHthdHRyczoge2hyZWY6ICcvQC8nICsgdXNlcm5hbWV9fSwgdXNlcm5hbWUpKSk7XG4gICAgfTtcbi8qXG4gICAgLy8gaWYgdXNlcm5hbWUgaXMgbm90IGEgbG9nZ2VkIGluIG5hbWUgbG9naW4gZWxzZSBsb2dvdXQgYnV0dG9uXG4gICAgdmFyIG9sZFZOb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luJyk7XG4gICAgaWYgKG9sZFZOb2RlIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICBvbGRWTm9kZS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgcGF0Y2gob2xkVk5vZGUgYXMgSFRNTEVsZW1lbnQsIGgoJ2J1dHRvbicsIHsgb246IHsgY2xpY2s6ICgpID0+IGxvZ2luKGhvbWUpIH0sIHByb3BzOiB7dGl0bGU6ICdMb2dpbiB3aXRoIExpY2hlc3MnfSB9LCBbaCgnaScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tc2lnbi1pblwiOiB0cnVlfSB9ICksIF0pKTtcbiAgICB9O1xuKi9cbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvY2hlc3Nncm91bmR4L3NyYy9hbmltLnRzIiwibm9kZV9tb2R1bGVzL2NoZXNzZ3JvdW5keC9zcmMvYXBpLnRzIiwibm9kZV9tb2R1bGVzL2NoZXNzZ3JvdW5keC9zcmMvYm9hcmQudHMiLCJub2RlX21vZHVsZXMvY2hlc3Nncm91bmR4L3NyYy9jaGVzc2dyb3VuZC50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL2NvbmZpZy50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL2RyYWcudHMiLCJub2RlX21vZHVsZXMvY2hlc3Nncm91bmR4L3NyYy9kcmF3LnRzIiwibm9kZV9tb2R1bGVzL2NoZXNzZ3JvdW5keC9zcmMvZHJvcC50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL2V2ZW50cy50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL2V4cGxvc2lvbi50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL2Zlbi50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL3ByZW1vdmUudHMiLCJub2RlX21vZHVsZXMvY2hlc3Nncm91bmR4L3NyYy9yZW5kZXIudHMiLCJub2RlX21vZHVsZXMvY2hlc3Nncm91bmR4L3NyYy9zdGF0ZS50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL3N2Zy50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL3R5cGVzLnRzIiwibm9kZV9tb2R1bGVzL2NoZXNzZ3JvdW5keC9zcmMvdXRpbC50cyIsIm5vZGVfbW9kdWxlcy9jaGVzc2dyb3VuZHgvc3JjL3dyYXAudHMiLCJub2RlX21vZHVsZXMvaGlnaGNoYXJ0cy9oaWdoY2hhcnRzLmpzIiwibm9kZV9tb2R1bGVzL3NuYWJiZG9tL2guanMiLCJub2RlX21vZHVsZXMvc25hYmJkb20vaHRtbGRvbWFwaS5qcyIsIm5vZGVfbW9kdWxlcy9zbmFiYmRvbS9pcy5qcyIsIm5vZGVfbW9kdWxlcy9zbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMuanMiLCJub2RlX21vZHVsZXMvc25hYmJkb20vbW9kdWxlcy9jbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9zbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzLmpzIiwibm9kZV9tb2R1bGVzL3NuYWJiZG9tL21vZHVsZXMvcHJvcHMuanMiLCJub2RlX21vZHVsZXMvc25hYmJkb20vc25hYmJkb20uanMiLCJub2RlX21vZHVsZXMvc25hYmJkb20vdGh1bmsuanMiLCJub2RlX21vZHVsZXMvc25hYmJkb20vdG92bm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9zbmFiYmRvbS92bm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9zb2NrZXR0ZS9kaXN0L3NvY2tldHRlLmpzIiwic3JjL2Fib3V0LnRzIiwic3JjL2FuYWx5c2lzLnRzIiwic3JjL2FuYWx5c2lzQ3RybC50cyIsInNyYy9jaGFydC50cyIsInNyYy9jaGF0LnRzIiwic3JjL2NoZXNzLnRzIiwic3JjL2NsaXBib2FyZC50cyIsInNyYy9jbG9jay50cyIsInNyYy9nYW1lcy50cyIsInNyYy9nYXRpbmcudHMiLCJzcmMvbG9iYnkudHMiLCJzcmMvbWFpbi50cyIsInNyYy9tb3ZlbGlzdC50cyIsInNyYy9wbGF5ZXIudHMiLCJzcmMvcGxheWVycy50cyIsInNyYy9wb2NrZXQudHMiLCJzcmMvcHJvZmlsZS50cyIsInNyYy9wcm9tb3Rpb24udHMiLCJzcmMvcmVzaXplLnRzIiwic3JjL3JvdW5kLnRzIiwic3JjL3JvdW5kQ3RybC50cyIsInNyYy9zZXR0aW5ncy50cyIsInNyYy9zb3VuZC50cyIsInNyYy91c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNDQSwrQkFBOEI7QUE0QjlCLFNBQWdCLElBQUksQ0FBSSxRQUFxQixFQUFFLEtBQVk7SUFDekQsT0FBTyxLQUFLLENBQUMsU0FBUyxD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TSxFQUFFLENBQUMsRUFBRSxVQUFVO0NBQUUsQ0FBQztBQUV6SyxNQUFNLE1BQU0sR0FBa0M7SUFDMUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsT0FBTztDQUFFLENBQUM7QUFFcEcsTUFBTSxPQUFPLEdBQWtDO0lBQzNDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTO0NBQUUsQ0FBQztBQUczRixNQUFNLFFBQVEsR0FBRztJQUNiLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0NBQUUsQ0FBQztBQUV6SyxNQUFNLFFBQVEsR0FBRztJQUNiLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUc7SUFDN0YsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJO0NBQUUsQ0FBQztBQUUxRixNQUFNLFNBQVMsR0FBRztJQUNkLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHO0NBQUMsQ0FBQztBQUUxRixTQUFnQixJQUFJLENBQUMsR0FBVyxFQUFFLElBQWlCO0lBQ2pELElBQUksR0FBRyxLQUFLLE9BQU87UUFBRSxHQUFHLEdBQUcsZUFBTyxDQUFDO0lBQ25DLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sTUFBTSxHQUFjLEVBQUUsQ0FBQztJQUM3QixJQUFJLEdBQUcsR0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxJQUFJLEdBQUcsR0FBVyxDQUFDLENBQUM7SUFDcEIsSUFBSSxRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxNQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQXVCLElBQUksSUFBSSxNQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3hJLE1BQU0sWUFBWSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDaEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLEtBQUssTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFO1FBQ25CLFFBQVEsQ0FBQyxFQUFFO1lBQ1QsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQztZQUN4QixLQUFLLEdBQUc7Z0JBQ04sRUFBRSxHQUFHLENBQUM7Z0JBQ04sSUFBSSxHQUFHLEtBQUssQ0FBQztvQkFBRSxPQUFPLE1BQU0sQ0FBQztnQkFDN0IsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDUixNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ2hCLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLElBQUksS0FBSztvQkFBRSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDakMsTUFBTTtZQUNSO2dCQUNFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksRUFBRSxHQUFHLEVBQUU7b0JBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7cUJBQ3pDO29CQUNILEVBQUUsR0FBRyxDQUFDO29CQUNOLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxLQUFLLEdBQUc7d0JBQ1YsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQ2pCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQWE7cUJBQzNFLENBQUM7b0JBQ2QsSUFBSSxRQUFRLEVBQUU7d0JBQ1osS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQWUsQ0FBQzt3QkFDekMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7d0JBQ3RCLFFBQVEsR0FBRyxLQUFLLENBQUM7cUJBQ2xCO29CQUFBLENBQUM7b0JBQ0YsSUFBSSxJQUFJLEVBQUU7d0JBQ04sTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztxQkFDN0Q7eUJBQU0sSUFBSSxLQUFLLEVBQUU7d0JBQ2QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztxQkFDL0Q7eUJBQU07d0JBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztxQkFDOUU7b0JBQUEsQ0FBQztpQkFDSDtTQUNKO0tBQ0Y7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBcERELG9CQW9EQztBQUVELFNBQWdCLEtBQUssQ0FBQyxNQUFpQixFQUFFLElBQWlCO0lBQ3hELElBQUksT0FBTyxHQUFRLEVBQUUsQ0FBQztJQUN0QixRQUFRLElBQUksRUFBRTtRQUNkO1lBQ0UsT0FBTyxHQUFHLFNBQVMsQ0FBQztZQUNwQixNQUFNO1FBQ1I7WUFDRSxPQUFPLEdBQUcsUUFBUSxDQUFDO1lBQ25CLE1BQU07UUFDUjtZQUNFLE9BQU8sR0FBRyxRQUFRLENBQUM7WUFDbkIsTUFBSztLQUNOO0lBQUEsQ0FBQztJQUNGLE9BQU8sZ0JBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sTUFBTSxHQUFXLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDaEU7O1lBQU0sT0FBTyxHQUFHLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNaLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQXJCRCxzQkFxQkM7Ozs7O0FDcEdELCtCQUE4QjtBQUM5Qiw4QkFBNkI7QUFJN0IsU0FBUyxJQUFJLENBQUMsQ0FBUyxFQUFFLENBQVE7SUFDL0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQsU0FBUyxJQUFJLENBQUMsS0FBZTtJQUMzQixPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUM3QyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUVsQixFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDM0QsQ0FBQyxDQUFDLENBQUMsQ0FDRixFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDM0QsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDMUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQTtBQUVELE1BQU0sTUFBTSxHQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDMUMsT0FBTyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUks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LEVBQUUsSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEcsQ0FBQztBQUdELFNBQVMsT0FBTyxDQUFDLEtBQWU7SUFDOUIsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBR0QsTUFBTSxLQUFLLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUN6QyxPQUFPLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQyxDQUFBO0FBR0QsTUFBTSxPQUFPLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUMzQyxPQUFPLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQyxDQUFBO0FBR0QsTUFBTSxLQUFLLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUN6QyxPQUFPLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQTtBQUdELFNBQVMsS0FBSyxDQUFDLEtBQWU7SUFDNUIsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDekIsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUN0RixDQUFDO0FBQ04sQ0FBQztBQUdELE1BQU0sT0FBTyxHQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDM0MsT0FBTyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FB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RUFBc0I7SUFDckUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVHLENBQUM7Ozs7O0FDbktZLFFBQUEsS0FBSyxHQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkUsUUFBQSxLQUFLLEdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFPUCxDQUFDO0FBRW5FLFFBQUEsVUFBVSxHQUFzQixDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFDLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7Ozs7O0FDdEc1TCw4QkFBOEI7QUFFakIsUUFBQSxNQUFNLEdBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFeEMsUUFBQSxNQUFNLEdBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxRQUFBLFNBQVMsR0FBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRW5FLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUV0QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVyQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFdEMsTUFBTSxVQUFVLEdBQWEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUYsTUFBTSxVQUFVLEdBQWEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUYsTUFBTSxVQUFVLEdBQWEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUYsTUFBTSxXQUFXLEdBQWEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEcsTUFBTSxXQUFXLEdBQWEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEcsTUFBTSxZQUFZLEdBQWEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFP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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1ZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUN4REEsbURBQTJCO0FBRzNCLGlDQUF3QztBQUd4QyxNQUFNLFFBQVEsR0FBRztJQUNqQix5UUFBeVE7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Q0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsRUFBRTtJQUMxUSxTQUFTLEVBQUUsRUFBRSxJQUFJLGdCQUFpQixFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsRUFBRTtJQUN0UCxPQUFPLEVBQUUsRUFBRSxJQUFJLGlCQUFrQixFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQzNOLFNBQVMsRUFBRSxFQUFFLElBQUksZ0JBQWlCLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO0lBQzVQLFVBQVUsRUFBRSxFQUFFLElBQUks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MUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBQzFELEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUMxRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7S0FDN0Q7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQWJELDBCQWFDO0FBRUQsU0FBZ0IsT0FBTyxDQUFDLElBQUk7SUFDeEIsa0NBQWtDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ2xCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDZixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDMUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0tBQzdEO1NBQU07UUFDSCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDMUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBQzFELEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUMxRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7S0FDN0Q7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQWRELDBCQWNDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLElBQUk7SUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDbEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDM0M7SUFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQVBELGdDQU9DO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLElBQUk7SUFDM0IsaUNBQWlDO0lBQ2pDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNmLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUM3QyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVCO0lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUU3QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDbEIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM3RTtJQUNELElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUN2QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEQsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUM1RDtTQUFNO1FBQ0gsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFH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QUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFNUYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdB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LEVBQUUsRUFBQyxFQUFFLENBQUM7Z0NBQ2hILFdBQUMsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQztnQ0FDckQsV0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUM7Z0NBQ2hILFdBQUMsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQztnQ0FDckQsV0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUM7Z0NBQ2hILFdBQUMsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQztnQ0FDckQsV0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUM7Z0NBQ2hILFdBQUMsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFDLEdB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UyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxPQUFPLFdBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFDLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxSCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsV0FBQyxDQUM1QixJQUFJLEVBQ0osRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQy9DLENBQUMsV0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQUMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNyRSxXQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsV0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7WUFDaEIsV0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsV0FBQyxDQUFDLElBQUksRUFBRSxFQUFDLEtBQUss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QyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDckQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDckQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0MsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuRCxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuRCxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRCxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3QyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcs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LENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBQyxFQUFFLENBQUUsRUFBRyxDQUFDO1FBQzVILFdBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFDLEVBQUUsQ0FBRSxFQUFHLENBQUM7UUFDcEosV0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFDLENBQUMsR0FBRyxFQUFFLEVBQUMsS0FBSyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUMsRUFBRSxDQUFFLEVBQUcsQ0FBQztRQUN2SyxXQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFDLEtBQUss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LElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQsSUFBSSxRQUFRLFlBQVksT0FBTyxFQUFFO1FBQzdCLFFBQVEsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxRQUF1QixFQUFFLFdBQUMsQ0FBQyxjQUFjLEVBQUUsV0FBQyxDQUFDLFlBQVksRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsUUFBUSxFQUFDLEVBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkg7SUFBQSxDQUFDO0lBQ047Ozs7Ozs7TUFPRTtBQUNGLENBQUM7QUFmRCx3Q0FlQyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsJ1xuaW1wb3J0ICogYXMgY2cgZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IHR5cGUgTXV0YXRpb248QT4gPSAoc3RhdGU6IFN0YXRlKSA9PiBBO1xuXG4vLyAwLDEgYW5pbWF0aW9uIGdvYWxcbi8vIDIsMyBhbmltYXRpb24gY3VycmVudCBzdGF0dXNcbmV4cG9ydCB0eXBlIEFuaW1WZWN0b3IgPSBjZy5OdW1iZXJRdWFkXG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5pbVZlY3RvcnMge1xuICBba2V5OiBzdHJpbmddOiBBbmltVmVjdG9yXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5pbUZhZGluZ3Mge1xuICBba2V5OiBzdHJpbmddOiBjZy5QaWVjZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFuaW1QbGFuIHtcbiAgYW5pbXM6IEFuaW1WZWN0b3JzO1xuICBmYWRpbmdzOiBBbmltRmFkaW5ncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmltQ3VycmVudCB7XG4gIHN0YXJ0OiBET01IaWdoUmVzVGltZVN0YW1wO1xuICBmcmVxdWVuY3k6IGNnLktIejtcbiAgcGxhbjogQW5pbVBsYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmltPEE+KG11dGF0aW9uOiBNdXRhdGlvbjxBPiwgc3RhdGU6IFN0YXRlKTogQSB7XG4gIHJldHVybiBzdGF0ZS5hbmltYXRpb24uZW5hYmxlZCA/IGFuaW1hdGUobXV0YXRpb24sIHN0YXRlKSA6IHJlbmRlcihtdXRhdGlvbiwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyPEE+KG11dGF0aW9uOiBNdXRhdGlvbjxBPiwgc3RhdGU6IFN0YXRlKTogQSB7XG4gIGNvbnN0IHJlc3VsdCA9IG11dGF0aW9uKHN0YXRlKTtcbiAgc3RhdGUuZG9tLnJlZHJhdygpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5pbnRlcmZhY2UgQW5pbVBpZWNlIHtcbiAga2V5OiBjZy5LZXk7XG4gIHBvczogY2cuUG9zO1xuICBwaWVjZTogY2cuUGllY2U7XG59XG5pbnRlcmZhY2UgQW5pbVBpZWNlcyB7XG4gIFtrZXk6IHN0cmluZ106IEFuaW1QaWVjZVxufVxuXG5mdW5jdGlvbiBtYWtlUGllY2Uoa2V5OiBjZy5LZXksIHBpZWNlOiBjZy5QaWVjZSwgZmlyc3RSYW5rSXMwOiBib29sZWFuKTogQW5pbVBpZWNlIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IGtleSxcbiAgICBwb3M6IHV0aWwua2V5MnBvcyhrZXksIGZpcnN0UmFua0lzMCksXG4gICAgcGllY2U6IHBpZWNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsb3NlcihwaWVjZTogQW5pbVBpZWNlLCBwaWVjZXM6IEFuaW1QaWVjZVtdKTogQW5pbVBpZWNlIHtcbiAgcmV0dXJuIHBpZWNlcy5zb3J0KChwMSwgcDIpID0+IHtcbiAgICByZXR1cm4gdXRpbC5kaXN0YW5jZVNxKHBpZWNlLnBvcywgcDEucG9zKSAtIHV0aWwuZGlzdGFuY2VTcShwaWVjZS5wb3MsIHAyLnBvcyk7XG4gIH0pWzBdO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlUGxhbihwcmV2UGllY2VzOiBjZy5QaWVjZXMsIGN1cnJlbnQ6IFN0YXRlKTogQW5pbVBsYW4ge1xuICBjb25zdCBmaXJzdFJhbmtJczAgPSBjdXJyZW50LmRpbWVuc2lvbnMuaGVpZ2h0ID09PSAxMDtcbiAgY29uc3QgYW5pbXM6IEFuaW1WZWN0b3JzID0ge30sXG4gIGFuaW1lZE9yaWdzOiBjZy5LZXlbXSA9IFtdLFxuICBmYWRpbmdzOiBBbmltRmFkaW5ncyA9IHt9LFxuICBtaXNzaW5nczogQW5pbVBpZWNlW10gPSBbXSxcbiAgbmV3czogQW5pbVBpZWNlW10gPSBbXSxcbiAgcHJlUGllY2VzOiBBbmltUGllY2VzID0ge307XG4gIGxldCBjdXJQOiBjZy5QaWVjZSB8IHVuZGVmaW5lZCwgcHJlUDogQW5pbVBpZWNlIHwgdW5kZWZpbmVkLCBpOiBhbnksIHZlY3RvcjogY2cuTnVtYmVyUGFpcjtcbiAgZm9yIChpIGluIHByZXZQaWVjZXMpIHtcbiAgICBwcmVQaWVjZXNbaV0gPSBtYWtlUGllY2UoaSBhcyBjZy5LZXksIHByZXZQaWVjZXNbaV0hLCBmaXJzdFJhbmtJczApO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIHV0aWwuYWxsS2V5c1tjdXJyZW50Lmdlb21ldHJ5XSkge1xuICAgIGN1clAgPSBjdXJyZW50LnBpZWNlc1trZXldO1xuICAgIHByZVAgPSBwcmVQaWVjZXNba2V5XTtcbiAgICBpZiAoY3VyUCkge1xuICAgICAgaWYgKHByZVApIHtcbiAgICAgICAgaWYgKCF1dGlsLnNhbWVQaWVjZShjdXJQLCBwcmVQLnBpZWNlKSkge1xuICAgICAgICAgIG1pc3NpbmdzLnB1c2gocHJlUCk7XG4gICAgICAgICAgbmV3cy5wdXNoKG1ha2VQaWVjZShrZXksIGN1clAsIGZpcnN0UmFua0lzMCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgbmV3cy5wdXNoKG1ha2VQaWVjZShrZXksIGN1clAsIGZpcnN0UmFua0lzMCkpO1xuICAgIH0gZWxzZSBpZiAocHJlUCkgbWlzc2luZ3MucHVzaChwcmVQKTtcbiAgfVxuICBuZXdzLmZvckVhY2gobmV3UCA9PiB7XG4gICAgcHJlUCA9IGNsb3NlcihuZXdQLCBtaXNzaW5ncy5maWx0ZXIocCA9PiB1dGlsLnNhbWVQaWVjZShuZXdQLnBpZWNlLCBwLnBpZWNlKSkpO1xuICAgIGlmIChwcmVQKSB7XG4gICAgICB2ZWN0b3IgPSBbcHJlUC5wb3NbMF0gLSBuZXdQLnBvc1swXSwgcHJlUC5wb3NbMV0gLSBuZXdQLnBvc1sxXV07XG4gICAgICBhbmltc1tuZXdQLmtleV0gPSB2ZWN0b3IuY29uY2F0KHZlY3RvcikgYXMgQW5pbVZlY3RvcjtcbiAgICAgIGFuaW1lZE9yaWdzLnB1c2gocHJlUC5rZXkpO1xuICAgIH1cbiAgfSk7XG4gIG1pc3NpbmdzLmZvckVhY2gocCA9PiB7XG4gICAgaWYgKCF1dGlsLmNvbnRhaW5zWChhbmltZWRPcmlncywgcC5rZXkpKSBmYWRpbmdzW3Aua2V5XSA9IHAucGllY2U7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYW5pbXM6IGFuaW1zLFxuICAgIGZhZGluZ3M6IGZhZGluZ3NcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3RlcChzdGF0ZTogU3RhdGUsIG5vdzogRE9NSGlnaFJlc1RpbWVTdGFtcCk6IHZvaWQge1xuICBjb25zdCBjdXIgPSBzdGF0ZS5hbmltYXRpb24uY3VycmVudDtcbiAgaWYgKGN1ciA9PT0gdW5kZWZpbmVkKSB7IC8vIGFuaW1hdGlvbiB3YXMgY2FuY2VsZWQgOihcbiAgICBpZiAoIXN0YXRlLmRvbS5kZXN0cm95ZWQpIHN0YXRlLmRvbS5yZWRyYXdOb3coKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcmVzdCA9IDEgLSAobm93IC0gY3VyLnN0YXJ0KSAqIGN1ci5mcmVxdWVuY3k7XG4gIGlmIChyZXN0IDw9IDApIHtcbiAgICBzdGF0ZS5hbmltYXRpb24uY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICBzdGF0ZS5kb20ucmVkcmF3Tm93KCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWFzZSA9IGVhc2luZyhyZXN0KTtcbiAgICBmb3IgKGxldCBpIGluIGN1ci5wbGFuLmFuaW1zKSB7XG4gICAgICBjb25zdCBjZmcgPSBjdXIucGxhbi5hbmltc1tpXTtcbiAgICAgIGNmZ1syXSA9IGNmZ1swXSAqIGVhc2U7XG4gICAgICBjZmdbM10gPSBjZmdbMV0gKiBlYXNlO1xuICAgIH1cbiAgICBzdGF0ZS5kb20ucmVkcmF3Tm93KHRydWUpOyAvLyBvcHRpbWlzYXRpb246IGRvbid0IHJlbmRlciBTVkcgY2hhbmdlcyBkdXJpbmcgYW5pbWF0aW9uc1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgobm93ID0gcGVyZm9ybWFuY2Uubm93KCkpID0+IHN0ZXAoc3RhdGUsIG5vdykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFuaW1hdGU8QT4obXV0YXRpb246IE11dGF0aW9uPEE+LCBzdGF0ZTogU3RhdGUpOiBBIHtcbiAgLy8gY2xvbmUgc3RhdGUgYmVmb3JlIG11dGF0aW5nIGl0XG4gIGNvbnN0IHByZXZQaWVjZXM6IGNnLlBpZWNlcyA9IHsuLi5zdGF0ZS5waWVjZXN9O1xuXG4gIGNvbnN0IHJlc3VsdCA9IG11dGF0aW9uKHN0YXRlKTtcbiAgY29uc3QgcGxhbiA9IGNvbXB1dGVQbGFuKHByZXZQaWVjZXMsIHN0YXRlKTtcbiAgaWYgKCFpc09iamVjdEVtcHR5KHBsYW4uYW5pbXMpIHx8ICFpc09iamVjdEVtcHR5KHBsYW4uZmFkaW5ncykpIHtcbiAgICBjb25zdCBhbHJlYWR5UnVubmluZyA9IHN0YXRlLmFuaW1hdGlvbi5jdXJyZW50ICYmIHN0YXRlLmFuaW1hdGlvbi5jdXJyZW50LnN0YXJ0O1xuICAgIHN0YXRlLmFuaW1hdGlvbi5jdXJyZW50ID0ge1xuICAgICAgc3RhcnQ6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgZnJlcXVlbmN5OiAxIC8gc3RhdGUuYW5pbWF0aW9uLmR1cmF0aW9uLFxuICAgICAgcGxhbjogcGxhblxuICAgIH07XG4gICAgaWYgKCFhbHJlYWR5UnVubmluZykgc3RlcChzdGF0ZSwgcGVyZm9ybWFuY2Uubm93KCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGRvbid0IGFuaW1hdGUsIGp1c3QgcmVuZGVyIHJpZ2h0IGF3YXlcbiAgICBzdGF0ZS5kb20ucmVkcmF3KCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvOiBhbnkpOiBib29sZWFuIHtcbiAgZm9yIChsZXQgXyBpbiBvKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcbmZ1bmN0aW9uIGVhc2luZyh0OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gdCA8IDAuNSA/IDQgKiB0ICogdCAqIHQgOiAodCAtIDEpICogKDIgKiB0IC0gMikgKiAoMiAqIHQgLSAyKSArIDE7XG59XG4iLCJpbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vc3RhdGUnXG5pbXBvcnQgKiBhcyBib2FyZCBmcm9tICcuL2JvYXJkJ1xuaW1wb3J0IHsgd3JpdGUgYXMgZmVuV3JpdGUgfSBmcm9tICcuL2ZlbidcbmltcG9ydCB7IENvbmZpZywgY29uZmlndXJlIH0gZnJvbSAnLi9jb25maWcnXG5pbXBvcnQgeyBhbmltLCByZW5kZXIgfSBmcm9tICcuL2FuaW0nXG5pbXBvcnQgeyBjYW5jZWwgYXMgZHJhZ0NhbmNlbCwgZHJhZ05ld1BpZWNlIH0gZnJvbSAnLi9kcmFnJ1xuaW1wb3J0IHsgRHJhd1NoYXBlIH0gZnJvbSAnLi9kcmF3J1xuaW1wb3J0IGV4cGxvc2lvbiBmcm9tICcuL2V4cGxvc2lvbidcbmltcG9ydCAqIGFzIGNnIGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpIHtcblxuICAvLyByZWNvbmZpZ3VyZSB0aGUgaW5zdGFuY2UuIEFjY2VwdHMgYWxsIGNvbmZpZyBvcHRpb25zLCBleGNlcHQgZm9yIHZpZXdPbmx5ICYgZHJhd2FibGUudmlzaWJsZS5cbiAgLy8gYm9hcmQgd2lsbCBiZSBhbmltYXRlZCBhY2NvcmRpbmdseSwgaWYgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZC5cbiAgc2V0KGNvbmZpZzogQ29uZmlnKTogdm9pZDtcblxuICAvLyByZWFkIGNoZXNzZ3JvdW5kIHN0YXRlOyB3cml0ZSBhdCB5b3VyIG93biByaXNrcy5cbiAgc3RhdGU6IFN0YXRlO1xuXG4gIC8vIGdldCB0aGUgcG9zaXRpb24gYXMgYSBGRU4gc3RyaW5nIChvbmx5IGNvbnRhaW5zIHBpZWNlcywgbm8gZmxhZ3MpXG4gIC8vIGUuZy4gcm5icWtibnIvcHBwcHBwcHAvOC84LzgvOC9QUFBQUFBQUC9STkJRS0JOUlxuICBnZXRGZW4oKTogY2cuRkVOO1xuXG4gIC8vIGNoYW5nZSB0aGUgdmlldyBhbmdsZVxuICB0b2dnbGVPcmllbnRhdGlvbigpOiB2b2lkO1xuXG4gIC8vIHBlcmZvcm0gYSBtb3ZlIHByb2dyYW1tYXRpY2FsbHlcbiAgbW92ZShvcmlnOiBjZy5LZXksIGRlc3Q6IGNnLktleSk6IHZvaWQ7XG5cbiAgLy8gYWRkIGFuZC9vciByZW1vdmUgYXJiaXRyYXJ5IHBpZWNlcyBvbiB0aGUgYm9hcmRcbiAgc2V0UGllY2VzKHBpZWNlczogY2cuUGllY2VzRGlmZik6IHZvaWQ7XG5cbiAgLy8gY2xpY2sgYSBzcXVhcmUgcHJvZ3JhbW1hdGljYWxseVxuICBzZWxlY3RTcXVhcmUoa2V5OiBjZy5LZXkgfCBudWxsLCBmb3JjZT86IGJvb2xlYW4pOiB2b2lkO1xuXG4gIC8vIHB1dCBhIG5ldyBwaWVjZSBvbiB0aGUgYm9hcmRcbiAgbmV3UGllY2UocGllY2U6IGNnLlBpZWNlLCBrZXk6IGNnLktleSk6IHZvaWQ7XG5cbiAgLy8gcGxheSB0aGUgY3VycmVudCBwcmVtb3ZlLCBpZiBhbnk7IHJldHVybnMgdHJ1ZSBpZiBwcmVtb3ZlIHdhcyBwbGF5ZWRcbiAgcGxheVByZW1vdmUoKTogYm9vbGVhbjtcblxuICAvLyBjYW5jZWwgdGhlIGN1cnJlbnQgcHJlbW92ZSwgaWYgYW55XG4gIGNhbmNlbFByZW1vdmUoKTogdm9pZDtcblxuICAvLyBwbGF5IHRoZSBjdXJyZW50IHByZWRyb3AsIGlmIGFueTsgcmV0dXJucyB0cnVlIGlmIHByZW1vdmUgd2FzIHBsYXllZFxuICBwbGF5UHJlZHJvcCh2YWxpZGF0ZTogKGRyb3A6IGNnLkRyb3ApID0+IGJvb2xlYW4pOiBib29sZWFuO1xuXG4gIC8vIGNhbmNlbCB0aGUgY3VycmVudCBwcmVkcm9wLCBpZiBhbnlcbiAgY2FuY2VsUHJlZHJvcCgpOiB2b2lkO1xuXG4gIC8vIGNhbmNlbCB0aGUgY3VycmVudCBtb3ZlIGJlaW5nIG1hZGVcbiAgY2FuY2VsTW92ZSgpOiB2b2lkO1xuXG4gIC8vIGNhbmNlbCBjdXJyZW50IG1vdmUgYW5kIHByZXZlbnQgZnVydGhlciBvbmVzXG4gIHN0b3AoKTogdm9pZDtcblxuICAvLyBtYWtlIHNxdWFyZXMgZXhwbG9kZSAoYXRvbWljIGNoZXNzKVxuICBleHBsb2RlKGtleXM6IGNnLktleVtdKTogdm9pZDtcblxuICAvLyBwcm9ncmFtbWF0aWNhbGx5IGRyYXcgdXNlciBzaGFwZXNcbiAgc2V0U2hhcGVzKHNoYXBlczogRHJhd1NoYXBlW10pOiB2b2lkO1xuXG4gIC8vIHByb2dyYW1tYXRpY2FsbHkgZHJhdyBhdXRvIHNoYXBlc1xuICBzZXRBdXRvU2hhcGVzKHNoYXBlczogRHJhd1NoYXBlW10pOiB2b2lkO1xuXG4gIC8vIHNxdWFyZSBuYW1lIGF0IHRoaXMgRE9NIHBvc2l0aW9uIChsaWtlIFwiZTRcIilcbiAgZ2V0S2V5QXREb21Qb3MocG9zOiBjZy5OdW1iZXJQYWlyKTogY2cuS2V5IHwgdW5kZWZpbmVkO1xuXG4gIC8vIG9ubHkgdXNlZnVsIHdoZW4gQ1NTIGNoYW5nZXMgdGhlIGJvYXJkIHdpZHRoL2hlaWdodCByYXRpbyAoZm9yIDNEKVxuICByZWRyYXdBbGw6IGNnLlJlZHJhdztcblxuICAvLyBmb3IgY3Jhenlob3VzZSBhbmQgYm9hcmQgZWRpdG9yc1xuICBkcmFnTmV3UGllY2UocGllY2U6IGNnLlBpZWNlLCBldmVudDogY2cuTW91Y2hFdmVudCwgZm9yY2U/OiBib29sZWFuKTogdm9pZDtcblxuICAvLyB1bmJpbmRzIGFsbCBldmVudHNcbiAgLy8gKGltcG9ydGFudCBmb3IgZG9jdW1lbnQtd2lkZSBldmVudHMgbGlrZSBzY3JvbGwgYW5kIG1vdXNlbW92ZSlcbiAgZGVzdHJveTogY2cuVW5iaW5kXG59XG5cbi8vIHNlZSBBUEkgdHlwZXMgYW5kIGRvY3VtZW50YXRpb25zIGluIGR0cy9hcGkuZC50c1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0KHN0YXRlOiBTdGF0ZSwgcmVkcmF3QWxsOiBjZy5SZWRyYXcpOiBBcGkge1xuXG4gIGZ1bmN0aW9uIHRvZ2dsZU9yaWVudGF0aW9uKCkge1xuICAgIGJvYXJkLnRvZ2dsZU9yaWVudGF0aW9uKHN0YXRlKTtcbiAgICByZWRyYXdBbGwoKTtcbiAgfTtcblxuICByZXR1cm4ge1xuXG4gICAgc2V0KGNvbmZpZykge1xuICAgICAgaWYgKGNvbmZpZy5vcmllbnRhdGlvbiAmJiBjb25maWcub3JpZW50YXRpb24gIT09IHN0YXRlLm9yaWVudGF0aW9uKSB0b2dnbGVPcmllbnRhdGlvbigpO1xuICAgICAgKGNvbmZpZy5mZW4gPyBhbmltIDogcmVuZGVyKShzdGF0ZSA9PiBjb25maWd1cmUoc3RhdGUsIGNvbmZpZyksIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgc3RhdGUsXG5cbiAgICBnZXRGZW46ICgpID0+IGZlbldyaXRlKHN0YXRlLnBpZWNlcywgc3RhdGUuZ2VvbWV0cnkpLFxuXG4gICAgdG9nZ2xlT3JpZW50YXRpb24sXG5cbiAgICBzZXRQaWVjZXMocGllY2VzKSB7XG4gICAgICBhbmltKHN0YXRlID0+IGJvYXJkLnNldFBpZWNlcyhzdGF0ZSwgcGllY2VzKSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBzZWxlY3RTcXVhcmUoa2V5LCBmb3JjZSkge1xuICAgICAgaWYgKGtleSkgYW5pbShzdGF0ZSA9PiBib2FyZC5zZWxlY3RTcXVhcmUoc3RhdGUsIGtleSwgZm9yY2UpLCBzdGF0ZSk7XG4gICAgICBlbHNlIGlmIChzdGF0ZS5zZWxlY3RlZCkge1xuICAgICAgICBib2FyZC51bnNlbGVjdChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLmRvbS5yZWRyYXcoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbW92ZShvcmlnLCBkZXN0KSB7XG4gICAgICBhbmltKHN0YXRlID0+IGJvYXJkLmJhc2VNb3ZlKHN0YXRlLCBvcmlnLCBkZXN0KSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBuZXdQaWVjZShwaWVjZSwga2V5KSB7XG4gICAgICBhbmltKHN0YXRlID0+IGJvYXJkLmJhc2VOZXdQaWVjZShzdGF0ZSwgcGllY2UsIGtleSksIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgcGxheVByZW1vdmUoKSB7XG4gICAgICBpZiAoc3RhdGUucHJlbW92YWJsZS5jdXJyZW50KSB7XG4gICAgICAgIGlmIChhbmltKGJvYXJkLnBsYXlQcmVtb3ZlLCBzdGF0ZSkpIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBpZiB0aGUgcHJlbW92ZSBjb3VsZG4ndCBiZSBwbGF5ZWQsIHJlZHJhdyB0byBjbGVhciBpdCB1cFxuICAgICAgICBzdGF0ZS5kb20ucmVkcmF3KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIHBsYXlQcmVkcm9wKHZhbGlkYXRlKSB7XG4gICAgICBpZiAoc3RhdGUucHJlZHJvcHBhYmxlLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYm9hcmQucGxheVByZWRyb3Aoc3RhdGUsIHZhbGlkYXRlKTtcbiAgICAgICAgc3RhdGUuZG9tLnJlZHJhdygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICBjYW5jZWxQcmVtb3ZlKCkge1xuICAgICAgcmVuZGVyKGJvYXJkLnVuc2V0UHJlbW92ZSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBjYW5jZWxQcmVkcm9wKCkge1xuICAgICAgcmVuZGVyKGJvYXJkLnVuc2V0UHJlZHJvcCwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBjYW5jZWxNb3ZlKCkge1xuICAgICAgcmVuZGVyKHN0YXRlID0+IHsgYm9hcmQuY2FuY2VsTW92ZShzdGF0ZSk7IGRyYWdDYW5jZWwoc3RhdGUpOyB9LCBzdGF0ZSk7XG4gICAgfSxcblxuICAgIHN0b3AoKSB7XG4gICAgICByZW5kZXIoc3RhdGUgPT4geyBib2FyZC5zdG9wKHN0YXRlKTsgZHJhZ0NhbmNlbChzdGF0ZSk7IH0sIHN0YXRlKTtcbiAgICB9LFxuXG4gICAgZXhwbG9kZShrZXlzOiBjZy5LZXlbXSkge1xuICAgICAgZXhwbG9zaW9uKHN0YXRlLCBrZXlzKTtcbiAgICB9LFxuXG4gICAgc2V0QXV0b1NoYXBlcyhzaGFwZXM6IERyYXdTaGFwZVtdKSB7XG4gICAgICByZW5kZXIoc3RhdGUgPT4gc3RhdGUuZHJhd2FibGUuYXV0b1NoYXBlcyA9IHNoYXBlcywgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBzZXRTaGFwZXMoc2hhcGVzOiBEcmF3U2hhcGVbXSkge1xuICAgICAgcmVuZGVyKHN0YXRlID0+IHN0YXRlLmRyYXdhYmxlLnNoYXBlcyA9IHNoYXBlcywgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBnZXRLZXlBdERvbVBvcyhwb3MpIHtcbiAgICAgIHJldHVybiBib2FyZC5nZXRLZXlBdERvbVBvcyhwb3MsIGJvYXJkLndoaXRlUG92KHN0YXRlKSwgc3RhdGUuZG9tLmJvdW5kcygpLCBzdGF0ZS5nZW9tZXRyeSk7XG4gICAgfSxcblxuICAgIHJlZHJhd0FsbCxcblxuICAgIGRyYWdOZXdQaWVjZShwaWVjZSwgZXZlbnQsIGZvcmNlKSB7XG4gICAgICBkcmFnTmV3UGllY2Uoc3RhdGUsIHBpZWNlLCBldmVudCwgZm9yY2UpXG4gICAgfSxcblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICBib2FyZC5zdG9wKHN0YXRlKTtcbiAgICAgIHN0YXRlLmRvbS51bmJpbmQgJiYgc3RhdGUuZG9tLnVuYmluZCgpO1xuICAgICAgc3RhdGUuZG9tLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL3N0YXRlJ1xuaW1wb3J0IHsgcG9zMmtleSwga2V5MnBvcywgb3Bwb3NpdGUsIGNvbnRhaW5zWCB9IGZyb20gJy4vdXRpbCdcbmltcG9ydCBwcmVtb3ZlIGZyb20gJy4vcHJlbW92ZSdcbmltcG9ydCAqIGFzIGNnIGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIENhbGxiYWNrID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsbFVzZXJGdW5jdGlvbihmOiBDYWxsYmFjayB8IHVuZGVmaW5lZCwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgaWYgKGYpIHNldFRpbWVvdXQoKCkgPT4gZiguLi5hcmdzKSwgMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVPcmllbnRhdGlvbihzdGF0ZTogU3RhdGUpOiB2b2lkIHtcbiAgc3RhdGUub3JpZW50YXRpb24gPSBvcHBvc2l0ZShzdGF0ZS5vcmllbnRhdGlvbik7XG4gIHN0YXRlLmFuaW1hdGlvbi5jdXJyZW50ID1cbiAgc3RhdGUuZHJhZ2dhYmxlLmN1cnJlbnQgPVxuICBzdGF0ZS5zZWxlY3RlZCA9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0KHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICBzdGF0ZS5sYXN0TW92ZSA9IHVuZGVmaW5lZDtcbiAgdW5zZWxlY3Qoc3RhdGUpO1xuICB1bnNldFByZW1vdmUoc3RhdGUpO1xuICB1bnNldFByZWRyb3Aoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UGllY2VzKHN0YXRlOiBTdGF0ZSwgcGllY2VzOiBjZy5QaWVjZXNEaWZmKTogdm9pZCB7XG4gIGZvciAobGV0IGtleSBpbiBwaWVjZXMpIHtcbiAgICBjb25zdCBwaWVjZSA9IHBpZWNlc1trZXldO1xuICAgIGlmIChwaWVjZSkgc3RhdGUucGllY2VzW2tleV0gPSBwaWVjZTtcbiAgICBlbHNlIGRlbGV0ZSBzdGF0ZS5waWVjZXNba2V5XTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2hlY2soc3RhdGU6IFN0YXRlLCBjb2xvcjogY2cuQ29sb3IgfCBib29sZWFuKTogdm9pZCB7XG4gIHN0YXRlLmNoZWNrID0gdW5kZWZpbmVkO1xuICBpZiAoY29sb3IgPT09IHRydWUpIGNvbG9yID0gc3RhdGUudHVybkNvbG9yO1xuICBpZiAoY29sb3IpIGZvciAobGV0IGsgaW4gc3RhdGUucGllY2VzKSB7XG4gICAgaWYgKHN0YXRlLnBpZWNlc1trXSEucm9sZSA9PT0gJ2tpbmcnICYmIHN0YXRlLnBpZWNlc1trXSEuY29sb3IgPT09IGNvbG9yKSB7XG4gICAgICBzdGF0ZS5jaGVjayA9IGsgYXMgY2cuS2V5O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRQcmVtb3ZlKHN0YXRlOiBTdGF0ZSwgb3JpZzogY2cuS2V5LCBkZXN0OiBjZy5LZXksIG1ldGE6IGNnLlNldFByZW1vdmVNZXRhZGF0YSk6IHZvaWQge1xuICB1bnNldFByZWRyb3Aoc3RhdGUpO1xuICBzdGF0ZS5wcmVtb3ZhYmxlLmN1cnJlbnQgPSBbb3JpZywgZGVzdF07XG4gIGNhbGxVc2VyRnVuY3Rpb24oc3RhdGUucHJlbW92YWJsZS5ldmVudHMuc2V0LCBvcmlnLCBkZXN0LCBtZXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0UHJlbW92ZShzdGF0ZTogU3RhdGUpOiB2b2lkIHtcbiAgaWYgKHN0YXRlLnByZW1vdmFibGUuY3VycmVudCkge1xuICAgIHN0YXRlLnByZW1vdmFibGUuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICBjYWxsVXNlckZ1bmN0aW9uKHN0YXRlLnByZW1vdmFibGUuZXZlbnRzLnVuc2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRQcmVkcm9wKHN0YXRlOiBTdGF0ZSwgcm9sZTogY2cuUm9sZSwga2V5OiBjZy5LZXkpOiB2b2lkIHtcbiAgdW5zZXRQcmVtb3ZlKHN0YXRlKTtcbiAgc3RhdGUucHJlZHJvcHBhYmxlLmN1cnJlbnQgPSB7IHJvbGUsIGtleSB9O1xuICBjYWxsVXNlckZ1bmN0aW9uKHN0YXRlLnByZWRyb3BwYWJsZS5ldmVudHMuc2V0LCByb2xlLCBrZXkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRQcmVkcm9wKHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICBjb25zdCBwZCA9IHN0YXRlLnByZWRyb3BwYWJsZTtcbiAgaWYgKHBkLmN1cnJlbnQpIHtcbiAgICBwZC5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgIGNhbGxVc2VyRnVuY3Rpb24ocGQuZXZlbnRzLnVuc2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlBdXRvQ2FzdGxlKHN0YXRlOiBTdGF0ZSwgb3JpZzogY2cuS2V5LCBkZXN0OiBjZy5LZXkpOiBib29sZWFuIHtcbiAgaWYgKCFzdGF0ZS5hdXRvQ2FzdGxlKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGtpbmcgPSBzdGF0ZS5waWVjZXNbb3JpZ107XG4gIGlmICgha2luZyB8fCBraW5nLnJvbGUgIT09ICdraW5nJykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBmaXJzdFJhbmtJczAgPSBzdGF0ZS5kaW1lbnNpb25zLmhlaWdodCA9PT0gMTA7XG4gIGNvbnN0IG9yaWdQb3MgPSBrZXkycG9zKG9yaWcsIGZpcnN0UmFua0lzMCk7XG4gIGlmIChvcmlnUG9zWzBdICE9PSA1KSByZXR1cm4gZmFsc2U7XG4gIGlmIChvcmlnUG9zWzFdICE9PSAxICYmIG9yaWdQb3NbMV0gIT09IDgpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZGVzdFBvcyA9IGtleTJwb3MoZGVzdCwgZmlyc3RSYW5rSXMwKTtcbiAgbGV0IG9sZFJvb2tQb3MsIG5ld1Jvb2tQb3MsIG5ld0tpbmdQb3M7XG4gIGlmIChkZXN0UG9zWzBdID09PSA3IHx8IGRlc3RQb3NbMF0gPT09IDgpIHtcbiAgICBvbGRSb29rUG9zID0gcG9zMmtleShbOCwgb3JpZ1Bvc1sxXV0sIHN0YXRlLmdlb21ldHJ5KTtcbiAgICBuZXdSb29rUG9zID0gcG9zMmtleShbNiwgb3JpZ1Bvc1sxXV0sIHN0YXRlLmdlb21ldHJ5KTtcbiAgICBuZXdLaW5nUG9zID0gcG9zMmtleShbNywgb3JpZ1Bvc1sxXV0sIHN0YXRlLmdlb21ldHJ5KTtcbiAgfSBlbHNlIGlmIChkZXN0UG9zWzBdID09PSAzIHx8IGRlc3RQb3NbMF0gPT09IDEpIHtcbiAgICBvbGRSb29rUG9zID0gcG9zMmtleShbMSwgb3JpZ1Bvc1sxXV0sIHN0YXRlLmdlb21ldHJ5KTtcbiAgICBuZXdSb29rUG9zID0gcG9zMmtleShbNCwgb3JpZ1Bvc1sxXV0sIHN0YXRlLmdlb21ldHJ5KTtcbiAgICBuZXdLaW5nUG9zID0gcG9zMmtleShbMywgb3JpZ1Bvc1sxXV0sIHN0YXRlLmdlb21ldHJ5KTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcblxuICBjb25zdCByb29rID0gc3RhdGUucGllY2VzW29sZFJvb2tQb3NdO1xuICBpZiAoIXJvb2sgfHwgcm9vay5yb2xlICE9PSAncm9vaycpIHJldHVybiBmYWxzZTtcblxuICBkZWxldGUgc3RhdGUucGllY2VzW29yaWddO1xuICBkZWxldGUgc3RhdGUucGllY2VzW29sZFJvb2tQb3NdO1xuXG4gIHN0YXRlLnBpZWNlc1tuZXdLaW5nUG9zXSA9IGtpbmdcbiAgc3RhdGUucGllY2VzW25ld1Jvb2tQb3NdID0gcm9vaztcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlTW92ZShzdGF0ZTogU3RhdGUsIG9yaWc6IGNnLktleSwgZGVzdDogY2cuS2V5KTogY2cuUGllY2UgfCBib29sZWFuIHtcbiAgY29uc3Qgb3JpZ1BpZWNlID0gc3RhdGUucGllY2VzW29yaWddLCBkZXN0UGllY2UgPSBzdGF0ZS5waWVjZXNbZGVzdF07XG4gIGlmIChvcmlnID09PSBkZXN0IHx8ICFvcmlnUGllY2UpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgY2FwdHVyZWQgPSAoZGVzdFBpZWNlICYmIGRlc3RQaWVjZS5jb2xvciAhPT0gb3JpZ1BpZWNlLmNvbG9yKSA/IGRlc3RQaWVjZSA6IHVuZGVmaW5lZDtcbiAgaWYgKGRlc3QgPT0gc3RhdGUuc2VsZWN0ZWQpIHVuc2VsZWN0KHN0YXRlKTtcbiAgY2FsbFVzZXJGdW5jdGlvbihzdGF0ZS5ldmVudHMubW92ZSwgb3JpZywgZGVzdCwgY2FwdHVyZWQpO1xuICBpZiAoIXRyeUF1dG9DYXN0bGUoc3RhdGUsIG9yaWcsIGRlc3QpKSB7XG4gICAgc3RhdGUucGllY2VzW2Rlc3RdID0gb3JpZ1BpZWNlO1xuICAgIGRlbGV0ZSBzdGF0ZS5waWVjZXNbb3JpZ107XG4gIH1cbiAgc3RhdGUubGFzdE1vdmUgPSBbb3JpZywgZGVzdF07XG4gIHN0YXRlLmNoZWNrID0gdW5kZWZpbmVkO1xuICBjYWxsVXNlckZ1bmN0aW9uKHN0YXRlLmV2ZW50cy5jaGFuZ2UpO1xuICByZXR1cm4gY2FwdHVyZWQgfHwgdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhc2VOZXdQaWVjZShzdGF0ZTogU3RhdGUsIHBpZWNlOiBjZy5QaWVjZSwga2V5OiBjZy5LZXksIGZvcmNlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBpZiAoc3RhdGUucGllY2VzW2tleV0pIHtcbiAgICBpZiAoZm9yY2UpIGRlbGV0ZSBzdGF0ZS5waWVjZXNba2V5XTtcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgfVxuICBjYWxsVXNlckZ1bmN0aW9uKHN0YXRlLmV2ZW50cy5kcm9wTmV3UGllY2UsIHBpZWNlLCBrZXkpO1xuICBzdGF0ZS5waWVjZXNba2V5XSA9IHBpZWNlO1xuICBzdGF0ZS5sYXN0TW92ZSA9IFtrZXldO1xuICBzdGF0ZS5jaGVjayA9IHVuZGVmaW5lZDtcbiAgY2FsbFVzZXJGdW5jdGlvbihzdGF0ZS5ldmVudHMuY2hhbmdlKTtcbiAgc3RhdGUubW92YWJsZS5kZXN0cyA9IHVuZGVmaW5lZDtcbiAgc3RhdGUudHVybkNvbG9yID0gb3Bwb3NpdGUoc3RhdGUudHVybkNvbG9yKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGJhc2VVc2VyTW92ZShzdGF0ZTogU3RhdGUsIG9yaWc6IGNnLktleSwgZGVzdDogY2cuS2V5KTogY2cuUGllY2UgfCBib29sZWFuIHtcbiAgY29uc3QgcmVzdWx0ID0gYmFzZU1vdmUoc3RhdGUsIG9yaWcsIGRlc3QpO1xuICBpZiAocmVzdWx0KSB7XG4gICAgc3RhdGUubW92YWJsZS5kZXN0cyA9IHVuZGVmaW5lZDtcbiAgICBzdGF0ZS50dXJuQ29sb3IgPSBvcHBvc2l0ZShzdGF0ZS50dXJuQ29sb3IpO1xuICAgIHN0YXRlLmFuaW1hdGlvbi5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VyTW92ZShzdGF0ZTogU3RhdGUsIG9yaWc6IGNnLktleSwgZGVzdDogY2cuS2V5KTogYm9vbGVhbiB7XG4gIGlmIChjYW5Nb3ZlKHN0YXRlLCBvcmlnLCBkZXN0KSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGJhc2VVc2VyTW92ZShzdGF0ZSwgb3JpZywgZGVzdCk7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY29uc3QgaG9sZFRpbWUgPSBzdGF0ZS5ob2xkLnN0b3AoKTtcbiAgICAgIHVuc2VsZWN0KHN0YXRlKTtcbiAgICAgIGNvbnN0IG1ldGFkYXRhOiBjZy5Nb3ZlTWV0YWRhdGEgPSB7XG4gICAgICAgIHByZW1vdmU6IGZhbHNlLFxuICAgICAgICBjdHJsS2V5OiBzdGF0ZS5zdGF0cy5jdHJsS2V5LFxuICAgICAgICBob2xkVGltZVxuICAgICAgfTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIG1ldGFkYXRhLmNhcHR1cmVkID0gcmVzdWx0O1xuICAgICAgY2FsbFVzZXJGdW5jdGlvbihzdGF0ZS5tb3ZhYmxlLmV2ZW50cy5hZnRlciwgb3JpZywgZGVzdCwgbWV0YWRhdGEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNhblByZW1vdmUoc3RhdGUsIG9yaWcsIGRlc3QpKSB7XG4gICAgc2V0UHJlbW92ZShzdGF0ZSwgb3JpZywgZGVzdCwge1xuICAgICAgY3RybEtleTogc3RhdGUuc3RhdHMuY3RybEtleVxuICAgIH0pO1xuICAgIHVuc2VsZWN0KHN0YXRlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB1bnNlbGVjdChzdGF0ZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRyb3BOZXdQaWVjZShzdGF0ZTogU3RhdGUsIG9yaWc6IGNnLktleSwgZGVzdDogY2cuS2V5LCBmb3JjZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgaWYgKGNhbkRyb3Aoc3RhdGUsIG9yaWcsIGRlc3QpIHx8IGZvcmNlKSB7XG4gICAgY29uc3QgcGllY2UgPSBzdGF0ZS5waWVjZXNbb3JpZ10hO1xuICAgIGRlbGV0ZSBzdGF0ZS5waWVjZXNbb3JpZ107XG4gICAgYmFzZU5ld1BpZWNlKHN0YXRlLCBwaWVjZSwgZGVzdCwgZm9yY2UpO1xuICAgIGNhbGxVc2VyRnVuY3Rpb24oc3RhdGUubW92YWJsZS5ldmVudHMuYWZ0ZXJOZXdQaWVjZSwgcGllY2Uucm9sZSwgZGVzdCwge1xuICAgICAgcHJlZHJvcDogZmFsc2VcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChjYW5QcmVkcm9wKHN0YXRlLCBvcmlnLCBkZXN0KSkge1xuICAgIHNldFByZWRyb3Aoc3RhdGUsIHN0YXRlLnBpZWNlc1tvcmlnXSEucm9sZSwgZGVzdCk7XG4gIH0gZWxzZSB7XG4gICAgdW5zZXRQcmVtb3ZlKHN0YXRlKTtcbiAgICB1bnNldFByZWRyb3Aoc3RhdGUpO1xuICB9XG4gIGRlbGV0ZSBzdGF0ZS5waWVjZXNbb3JpZ107XG4gIHVuc2VsZWN0KHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdFNxdWFyZShzdGF0ZTogU3RhdGUsIGtleTogY2cuS2V5LCBmb3JjZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgY2FsbFVzZXJGdW5jdGlvbihzdGF0ZS5ldmVudHMuc2VsZWN0LCBrZXkpO1xuICBpZiAoc3RhdGUuc2VsZWN0ZWQpIHtcbiAgICBpZiAoc3RhdGUuc2VsZWN0ZWQgPT09IGtleSAmJiAhc3RhdGUuZHJhZ2dhYmxlLmVuYWJsZWQpIHtcbiAgICAgIHVuc2VsZWN0KHN0YXRlKTtcbiAgICAgIHN0YXRlLmhvbGQuY2FuY2VsKCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICgoc3RhdGUuc2VsZWN0YWJsZS5lbmFibGVkIHx8IGZvcmNlKSAmJiBzdGF0ZS5zZWxlY3RlZCAhPT0ga2V5KSB7XG4gICAgICBpZiAodXNlck1vdmUoc3RhdGUsIHN0YXRlLnNlbGVjdGVkLCBrZXkpKSB7XG4gICAgICAgIHN0YXRlLnN0YXRzLmRyYWdnZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoaXNNb3ZhYmxlKHN0YXRlLCBrZXkpIHx8IGlzUHJlbW92YWJsZShzdGF0ZSwga2V5KSkge1xuICAgIHNldFNlbGVjdGVkKHN0YXRlLCBrZXkpO1xuICAgIHN0YXRlLmhvbGQuc3RhcnQoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0ZWQoc3RhdGU6IFN0YXRlLCBrZXk6IGNnLktleSk6IHZvaWQge1xuICBzdGF0ZS5zZWxlY3RlZCA9IGtleTtcbiAgaWYgKGlzUHJlbW92YWJsZShzdGF0ZSwga2V5KSkge1xuICAgIHN0YXRlLnByZW1vdmFibGUuZGVzdHMgPSBwcmVtb3ZlKHN0YXRlLnBpZWNlcywga2V5LCBzdGF0ZS5wcmVtb3ZhYmxlLmNhc3RsZSwgc3RhdGUuZ2VvbWV0cnkpO1xuICB9XG4gIGVsc2Ugc3RhdGUucHJlbW92YWJsZS5kZXN0cyA9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2VsZWN0KHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICBzdGF0ZS5zZWxlY3RlZCA9IHVuZGVmaW5lZDtcbiAgc3RhdGUucHJlbW92YWJsZS5kZXN0cyA9IHVuZGVmaW5lZDtcbiAgc3RhdGUuaG9sZC5jYW5jZWwoKTtcbn1cblxuZnVuY3Rpb24gaXNNb3ZhYmxlKHN0YXRlOiBTdGF0ZSwgb3JpZzogY2cuS2V5KTogYm9vbGVhbiB7XG4gIGNvbnN0IHBpZWNlID0gc3RhdGUucGllY2VzW29yaWddO1xuICByZXR1cm4gISFwaWVjZSAmJiAoXG4gICAgc3RhdGUubW92YWJsZS5jb2xvciA9PT0gJ2JvdGgnIHx8IChcbiAgICAgIHN0YXRlLm1vdmFibGUuY29sb3IgPT09IHBpZWNlLmNvbG9yICYmXG4gICAgICAgIHN0YXRlLnR1cm5Db2xvciA9PT0gcGllY2UuY29sb3JcbiAgICApKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbk1vdmUoc3RhdGU6IFN0YXRlLCBvcmlnOiBjZy5LZXksIGRlc3Q6IGNnLktleSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb3JpZyAhPT0gZGVzdCAmJiBpc01vdmFibGUoc3RhdGUsIG9yaWcpICYmIChcbiAgICBzdGF0ZS5tb3ZhYmxlLmZyZWUgfHwgKCEhc3RhdGUubW92YWJsZS5kZXN0cyAmJiBjb250YWluc1goc3RhdGUubW92YWJsZS5kZXN0c1tvcmlnXSwgZGVzdCkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNhbkRyb3Aoc3RhdGU6IFN0YXRlLCBvcmlnOiBjZy5LZXksIGRlc3Q6IGNnLktleSk6IGJvb2xlYW4ge1xuICBjb25zdCBwaWVjZSA9IHN0YXRlLnBpZWNlc1tvcmlnXTtcbiAgcmV0dXJuICEhcGllY2UgJiYgZGVzdCAmJiAob3JpZyA9PT0gZGVzdCB8fCAhc3RhdGUucGllY2VzW2Rlc3RdKSAmJiAoXG4gICAgc3RhdGUubW92YWJsZS5jb2xvciA9PT0gJ2JvdGgnIHx8IChcbiAgICAgIHN0YXRlLm1vdmFibGUuY29sb3IgPT09IHBpZWNlLmNvbG9yICYmXG4gICAgICAgIHN0YXRlLnR1cm5Db2xvciA9PT0gcGllY2UuY29sb3JcbiAgICApKTtcbn1cblxuXG5mdW5jdGlvbiBpc1ByZW1vdmFibGUoc3RhdGU6IFN0YXRlLCBvcmlnOiBjZy5LZXkpOiBib29sZWFuIHtcbiAgY29uc3QgcGllY2UgPSBzdGF0ZS5waWVjZXNbb3JpZ107XG4gIHJldHVybiAhIXBpZWNlICYmIHN0YXRlLnByZW1vdmFibGUuZW5hYmxlZCAmJlxuICBzdGF0ZS5tb3ZhYmxlLmNvbG9yID09PSBwaWVjZS5jb2xvciAmJlxuICAgIHN0YXRlLnR1cm5Db2xvciAhPT0gcGllY2UuY29sb3I7XG59XG5cbmZ1bmN0aW9uIGNhblByZW1vdmUoc3RhdGU6IFN0YXRlLCBvcmlnOiBjZy5LZXksIGRlc3Q6IGNnLktleSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb3JpZyAhPT0gZGVzdCAmJlxuICBpc1ByZW1vdmFibGUoc3RhdGUsIG9yaWcpICYmXG4gIGNvbnRhaW5zWChwcmVtb3ZlKHN0YXRlLnBpZWNlcywgb3JpZywgc3RhdGUucHJlbW92YWJsZS5jYXN0bGUsIHN0YXRlLmdlb21ldHJ5KSwgZGVzdCk7XG59XG5cbmZ1bmN0aW9uIGNhblByZWRyb3Aoc3RhdGU6IFN0YXRlLCBvcmlnOiBjZy5LZXksIGRlc3Q6IGNnLktleSk6IGJvb2xlYW4ge1xuICBjb25zdCBwaWVjZSA9IHN0YXRlLnBpZWNlc1tvcmlnXTtcbiAgY29uc3QgZGVzdFBpZWNlID0gc3RhdGUucGllY2VzW2Rlc3RdO1xuICByZXR1cm4gISFwaWVjZSAmJiBkZXN0ICYmXG4gICghZGVzdFBpZWNlIHx8IGRlc3RQaWVjZS5jb2xvciAhPT0gc3RhdGUubW92YWJsZS5jb2xvcikgJiZcbiAgc3RhdGUucHJlZHJvcHBhYmxlLmVuYWJsZWQgJiZcbiAgKHBpZWNlLnJvbGUgIT09ICdwYXduJyB8fCAoZGVzdFsxXSAhPT0gJzEnICYmIGRlc3RbMV0gIT09ICc4JykpICYmXG4gIHN0YXRlLm1vdmFibGUuY29sb3IgPT09IHBpZWNlLmNvbG9yICYmXG4gICAgc3RhdGUudHVybkNvbG9yICE9PSBwaWVjZS5jb2xvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZ2dhYmxlKHN0YXRlOiBTdGF0ZSwgb3JpZzogY2cuS2V5KTogYm9vbGVhbiB7XG4gIGNvbnN0IHBpZWNlID0gc3RhdGUucGllY2VzW29yaWddO1xuICByZXR1cm4gISFwaWVjZSAmJiBzdGF0ZS5kcmFnZ2FibGUuZW5hYmxlZCAmJiAoXG4gICAgc3RhdGUubW92YWJsZS5jb2xvciA9PT0gJ2JvdGgnIHx8IChcbiAgICAgIHN0YXRlLm1vdmFibGUuY29sb3IgPT09IHBpZWNlLmNvbG9yICYmIChcbiAgICAgICAgc3RhdGUudHVybkNvbG9yID09PSBwaWVjZS5jb2xvciB8fCBzdGF0ZS5wcmVtb3ZhYmxlLmVuYWJsZWRcbiAgICAgIClcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwbGF5UHJlbW92ZShzdGF0ZTogU3RhdGUpOiBib29sZWFuIHtcbiAgY29uc3QgbW92ZSA9IHN0YXRlLnByZW1vdmFibGUuY3VycmVudDtcbiAgaWYgKCFtb3ZlKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IG9yaWcgPSBtb3ZlWzBdLCBkZXN0ID0gbW92ZVsxXTtcbiAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcbiAgaWYgKGNhbk1vdmUoc3RhdGUsIG9yaWcsIGRlc3QpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYmFzZVVzZXJNb3ZlKHN0YXRlLCBvcmlnLCBkZXN0KTtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBjb25zdCBtZXRhZGF0YTogY2cuTW92ZU1ldGFkYXRhID0geyBwcmVtb3ZlOiB0cnVlIH07XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSBtZXRhZGF0YS5jYXB0dXJlZCA9IHJlc3VsdDtcbiAgICAgIGNhbGxVc2VyRnVuY3Rpb24oc3RhdGUubW92YWJsZS5ldmVudHMuYWZ0ZXIsIG9yaWcsIGRlc3QsIG1ldGFkYXRhKTtcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgIH1cbiAgfVxuICB1bnNldFByZW1vdmUoc3RhdGUpO1xuICByZXR1cm4gc3VjY2Vzcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBsYXlQcmVkcm9wKHN0YXRlOiBTdGF0ZSwgdmFsaWRhdGU6IChkcm9wOiBjZy5Ecm9wKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGxldCBkcm9wID0gc3RhdGUucHJlZHJvcHBhYmxlLmN1cnJlbnQsXG4gIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgaWYgKCFkcm9wKSByZXR1cm4gZmFsc2U7XG4gIGlmICh2YWxpZGF0ZShkcm9wKSkge1xuICAgIGNvbnN0IHBpZWNlID0ge1xuICAgICAgcm9sZTogZHJvcC5yb2xlLFxuICAgICAgY29sb3I6IHN0YXRlLm1vdmFibGUuY29sb3JcbiAgICB9IGFzIGNnLlBpZWNlO1xuICAgIGlmIChiYXNlTmV3UGllY2Uoc3RhdGUsIHBpZWNlLCBkcm9wLmtleSkpIHtcbiAgICAgIGNhbGxVc2VyRnVuY3Rpb24oc3RhdGUubW92YWJsZS5ldmVudHMuYWZ0ZXJOZXdQaWVjZSwgZHJvcC5yb2xlLCBkcm9wLmtleSwge1xuICAgICAgICBwcmVkcm9wOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgIH1cbiAgfVxuICB1bnNldFByZWRyb3Aoc3RhdGUpO1xuICByZXR1cm4gc3VjY2Vzcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbmNlbE1vdmUoc3RhdGU6IFN0YXRlKTogdm9pZCB7XG4gIHVuc2V0UHJlbW92ZShzdGF0ZSk7XG4gIHVuc2V0UHJlZHJvcChzdGF0ZSk7XG4gIHVuc2VsZWN0KHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3Aoc3RhdGU6IFN0YXRlKTogdm9pZCB7XG4gIHN0YXRlLm1vdmFibGUuY29sb3IgPVxuICBzdGF0ZS5tb3ZhYmxlLmRlc3RzID1cbiAgc3RhdGUuYW5pbWF0aW9uLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gIGNhbmNlbE1vdmUoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5QXREb21Qb3MocG9zOiBjZy5OdW1iZXJQYWlyLCBhc1doaXRlOiBib29sZWFuLCBib3VuZHM6IENsaWVudFJlY3QsIGdlb206IGNnLkdlb21ldHJ5KTogY2cuS2V5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYmQgPSBjZy5kaW1lbnNpb25zW2dlb21dO1xuICBsZXQgZmlsZSA9IE1hdGguY2VpbChiZC53aWR0aCAqICgocG9zWzBdIC0gYm91bmRzLmxlZnQpIC8gYm91bmRzLndpZHRoKSk7XG4gIGlmICghYXNXaGl0ZSkgZmlsZSA9IGJkLndpZHRoICsgMSAtIGZpbGU7XG4gIGxldCByYW5rID0gTWF0aC5jZWlsKGJkLmhlaWdodCAtIChiZC5oZWlnaHQgKiAoKHBvc1sxXSAtIGJvdW5kcy50b3ApIC8gYm91bmRzLmhlaWdodCkpKTtcbiAgaWYgKCFhc1doaXRlKSByYW5rID0gYmQuaGVpZ2h0ICsgMSAtIHJhbms7XG4gIHJldHVybiAoZmlsZSA+IDAgJiYgZmlsZSA8IGJkLndpZHRoICsgMSAmJiByYW5rID4gMCAmJiByYW5rIDwgYmQuaGVpZ2h0ICsgMSkgPyBwb3Mya2V5KFtmaWxlLCByYW5rXSwgZ2VvbSkgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZVBvdihzOiBTdGF0ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gcy5vcmllbnRhdGlvbiA9PT0gJ3doaXRlJztcbn1cbiIsImltcG9ydCB7IEFwaSwgc3RhcnQgfSBmcm9tICcuL2FwaSdcbmltcG9ydCB7IENvbmZpZywgY29uZmlndXJlIH0gZnJvbSAnLi9jb25maWcnXG5pbXBvcnQgeyBTdGF0ZSwgZGVmYXVsdHMgfSBmcm9tICcuL3N0YXRlJ1xuXG5pbXBvcnQgcmVuZGVyV3JhcCBmcm9tICcuL3dyYXAnO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJy4vZXZlbnRzJ1xuaW1wb3J0IHJlbmRlciBmcm9tICcuL3JlbmRlcic7XG5pbXBvcnQgKiBhcyBzdmcgZnJvbSAnLi9zdmcnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2hlc3Nncm91bmQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGNvbmZpZz86IENvbmZpZyk6IEFwaSB7XG5cbiAgY29uc3Qgc3RhdGUgPSBkZWZhdWx0cygpIGFzIFN0YXRlO1xuXG4gIGNvbmZpZ3VyZShzdGF0ZSwgY29uZmlnIHx8IHt9KTtcblxuICBmdW5jdGlvbiByZWRyYXdBbGwoKSB7XG4gICAgbGV0IHByZXZVbmJpbmQgPSBzdGF0ZS5kb20gJiYgc3RhdGUuZG9tLnVuYmluZDtcbiAgICAvLyBjb21wdXRlIGJvdW5kcyBmcm9tIGV4aXN0aW5nIGJvYXJkIGVsZW1lbnQgaWYgcG9zc2libGVcbiAgICAvLyB0aGlzIGFsbG93cyBub24tc3F1YXJlIGJvYXJkcyBmcm9tIENTUyB0byBiZSBoYW5kbGVkIChmb3IgM0QpXG4gICAgY29uc3QgcmVsYXRpdmUgPSBzdGF0ZS52aWV3T25seSAmJiAhc3RhdGUuZHJhd2FibGUudmlzaWJsZSxcbiAgICBlbGVtZW50cyA9IHJlbmRlcldyYXAoZWxlbWVudCwgc3RhdGUsIHJlbGF0aXZlKSxcbiAgICBib3VuZHMgPSB1dGlsLm1lbW8oKCkgPT4gZWxlbWVudHMuYm9hcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLFxuICAgIHJlZHJhd05vdyA9IChza2lwU3ZnPzogYm9vbGVhbikgPT4ge1xuICAgICAgcmVuZGVyKHN0YXRlKTtcbiAgICAgIGlmICghc2tpcFN2ZyAmJiBlbGVtZW50cy5zdmcpIHN2Zy5yZW5kZXJTdmcoc3RhdGUsIGVsZW1lbnRzLnN2Zyk7XG4gICAgfTtcbiAgICBzdGF0ZS5kb20gPSB7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIGJvdW5kcyxcbiAgICAgIHJlZHJhdzogZGVib3VuY2VSZWRyYXcocmVkcmF3Tm93KSxcbiAgICAgIHJlZHJhd05vdyxcbiAgICAgIHVuYmluZDogcHJldlVuYmluZCxcbiAgICAgIHJlbGF0aXZlXG4gICAgfTtcbiAgICBzdGF0ZS5kcmF3YWJsZS5wcmV2U3ZnSGFzaCA9ICcnO1xuICAgIHJlZHJhd05vdyhmYWxzZSk7XG4gICAgZXZlbnRzLmJpbmRCb2FyZChzdGF0ZSk7XG4gICAgaWYgKCFwcmV2VW5iaW5kKSBzdGF0ZS5kb20udW5iaW5kID0gZXZlbnRzLmJpbmREb2N1bWVudChzdGF0ZSwgcmVkcmF3QWxsKTtcbiAgICBzdGF0ZS5ldmVudHMuaW5zZXJ0ICYmIHN0YXRlLmV2ZW50cy5pbnNlcnQoZWxlbWVudHMpO1xuICB9XG4gIHJlZHJhd0FsbCgpO1xuXG4gIHJldHVybiBzdGFydChzdGF0ZSwgcmVkcmF3QWxsKTtcbn07XG5cbmZ1bmN0aW9uIGRlYm91bmNlUmVkcmF3KHJlZHJhd05vdzogKHNraXBTdmc/OiBib29sZWFuKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gIGxldCByZWRyYXdpbmcgPSBmYWxzZTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAocmVkcmF3aW5nKSByZXR1cm47XG4gICAgcmVkcmF3aW5nID0gdHJ1ZTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgcmVkcmF3Tm93KCk7XG4gICAgICByZWRyYXdpbmcgPSBmYWxzZTtcbiAgICB9KTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCB7IHNldENoZWNrLCBzZXRTZWxlY3RlZCB9IGZyb20gJy4vYm9hcmQnXG5pbXBvcnQgeyByZWFkIGFzIGZlblJlYWQgfSBmcm9tICcuL2ZlbidcbmltcG9ydCB7IERyYXdTaGFwZSwgRHJhd0JydXNoIH0gZnJvbSAnLi9kcmF3J1xuaW1wb3J0ICogYXMgY2cgZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuICBmZW4/OiBjZy5GRU47IC8vIGNoZXNzIHBvc2l0aW9uIGluIEZvcnN5dGggbm90YXRpb25cbiAgb3JpZW50YXRpb24/OiBjZy5Db2xvcjsgLy8gYm9hcmQgb3JpZW50YXRpb24uIHdoaXRlIHwgYmxhY2tcbiAgdHVybkNvbG9yPzogY2cuQ29sb3I7IC8vIHR1cm4gdG8gcGxheS4gd2hpdGUgfCBibGFja1xuICBjaGVjaz86IGNnLkNvbG9yIHwgYm9vbGVhbjsgLy8gdHJ1ZSBmb3IgY3VycmVudCBjb2xvciwgZmFsc2UgdG8gdW5zZXRcbiAgbGFzdE1vdmU/OiBjZy5LZXlbXTsgLy8gc3F1YXJlcyBwYXJ0IG9mIHRoZSBsYXN0IG1vdmUgW1wiYzNcIiwgXCJjNFwiXVxuICBzZWxlY3RlZD86IGNnLktleTsgLy8gc3F1YXJlIGN1cnJlbnRseSBzZWxlY3RlZCBcImExXCJcbiAgY29vcmRpbmF0ZXM/OiBib29sZWFuOyAvLyBpbmNsdWRlIGNvb3JkcyBhdHRyaWJ1dGVzXG4gIGF1dG9DYXN0bGU/OiBib29sZWFuOyAvLyBpbW1lZGlhdGVseSBjb21wbGV0ZSB0aGUgY2FzdGxlIGJ5IG1vdmluZyB0aGUgcm9vayBhZnRlciBraW5nIG1vdmVcbiAgdmlld09ubHk/OiBib29sZWFuOyAvLyBkb24ndCBiaW5kIGV2ZW50czogdGhlIHVzZXIgd2lsbCBuZXZlciBiZSBhYmxlIHRvIG1vdmUgcGllY2VzIGFyb3VuZFxuICBkaXNhYmxlQ29udGV4dE1lbnU/OiBib29sZWFuOyAvLyBiZWNhdXNlIHdobyBuZWVkcyBhIGNvbnRleHQgbWVudSBvbiBhIGNoZXNzYm9hcmRcbiAgcmVzaXphYmxlPzogYm9vbGVhbjsgLy8gbGlzdGVucyB0byBjaGVzc2dyb3VuZC5yZXNpemUgb24gZG9jdW1lbnQuYm9keSB0byBjbGVhciBib3VuZHMgY2FjaGVcbiAgYWRkUGllY2VaSW5kZXg/OiBib29sZWFuOyAvLyBhZGRzIHotaW5kZXggdmFsdWVzIHRvIHBpZWNlcyAoZm9yIDNEKVxuICAvLyBwaWVjZUtleTogYm9vbGVhbjsgLy8gYWRkIGEgZGF0YS1rZXkgYXR0cmlidXRlIHRvIHBpZWNlIGVsZW1lbnRzXG4gIGhpZ2hsaWdodD86IHtcbiAgICBsYXN0TW92ZT86IGJvb2xlYW47IC8vIGFkZCBsYXN0LW1vdmUgY2xhc3MgdG8gc3F1YXJlc1xuICAgIGNoZWNrPzogYm9vbGVhbjsgLy8gYWRkIGNoZWNrIGNsYXNzIHRvIHNxdWFyZXNcbiAgfTtcbiAgYW5pbWF0aW9uPzoge1xuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuICAgIGR1cmF0aW9uPzogbnVtYmVyO1xuICB9O1xuICBtb3ZhYmxlPzoge1xuICAgIGZyZWU/OiBib29sZWFuOyAvLyBhbGwgbW92ZXMgYXJlIHZhbGlkIC0gYm9hcmQgZWRpdG9yXG4gICAgY29sb3I/OiBjZy5Db2xvciB8ICdib3RoJzsgLy8gY29sb3IgdGhhdCBjYW4gbW92ZS4gd2hpdGUgfCBibGFjayB8IGJvdGggfCB1bmRlZmluZWRcbiAgICBkZXN0cz86IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IGNnLktleVtdXG4gICAgfTsgLy8gdmFsaWQgbW92ZXMuIHtcImEyXCIgW1wiYTNcIiBcImE0XCJdIFwiYjFcIiBbXCJhM1wiIFwiYzNcIl19XG4gICAgc2hvd0Rlc3RzPzogYm9vbGVhbjsgLy8gd2hldGhlciB0byBhZGQgdGhlIG1vdmUtZGVzdCBjbGFzcyBvbiBzcXVhcmVzXG4gICAgZXZlbnRzPzoge1xuICAgICAgYWZ0ZXI/OiAob3JpZzogY2cuS2V5LCBkZXN0OiBjZy5LZXksIG1ldGFkYXRhOiBjZy5Nb3ZlTWV0YWRhdGEpID0+IHZvaWQ7IC8vIGNhbGxlZCBhZnRlciB0aGUgbW92ZSBoYXMgYmVlbiBwbGF5ZWRcbiAgICAgIGFmdGVyTmV3UGllY2U/OiAocm9sZTogY2cuUm9sZSwga2V5OiBjZy5LZXksIG1ldGFkYXRhOiBjZy5Nb3ZlTWV0YWRhdGEpID0+IHZvaWQ7IC8vIGNhbGxlZCBhZnRlciBhIG5ldyBwaWVjZSBpcyBkcm9wcGVkIG9uIHRoZSBib2FyZFxuICAgIH07XG4gICAgcm9va0Nhc3RsZT86IGJvb2xlYW4gLy8gY2FzdGxlIGJ5IG1vdmluZyB0aGUga2luZyB0byB0aGUgcm9va1xuICB9O1xuICBwcmVtb3ZhYmxlPzoge1xuICAgIGVuYWJsZWQ/OiBib29sZWFuOyAvLyBhbGxvdyBwcmVtb3ZlcyBmb3IgY29sb3IgdGhhdCBjYW4gbm90IG1vdmVcbiAgICBzaG93RGVzdHM/OiBib29sZWFuOyAvLyB3aGV0aGVyIHRvIGFkZCB0aGUgcHJlbW92ZS1kZXN0IGNsYXNzIG9uIHNxdWFyZXNcbiAgICBjYXN0bGU/OiBib29sZWFuOyAvLyB3aGV0aGVyIHRvIGFsbG93IGtpbmcgY2FzdGxlIHByZW1vdmVzXG4gICAgZGVzdHM/OiBjZy5LZXlbXTsgLy8gcHJlbW92ZSBkZXN0aW5hdGlvbnMgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvblxuICAgIGV2ZW50cz86IHtcbiAgICAgIHNldD86IChvcmlnOiBjZy5LZXksIGRlc3Q6IGNnLktleSwgbWV0YWRhdGE/OiBjZy5TZXRQcmVtb3ZlTWV0YWRhdGEpID0+IHZvaWQ7IC8vIGNhbGxlZCBhZnRlciB0aGUgcHJlbW92ZSBoYXMgYmVlbiBzZXRcbiAgICAgIHVuc2V0PzogKCkgPT4gdm9pZDsgIC8vIGNhbGxlZCBhZnRlciB0aGUgcHJlbW92ZSBoYXMgYmVlbiB1bnNldFxuICAgIH1cbiAgfTtcbiAgcHJlZHJvcHBhYmxlPzoge1xuICAgIGVuYWJsZWQ/OiBib29sZWFuOyAvLyBhbGxvdyBwcmVkcm9wcyBmb3IgY29sb3IgdGhhdCBjYW4gbm90IG1vdmVcbiAgICBldmVudHM/OiB7XG4gICAgICBzZXQ/OiAocm9sZTogY2cuUm9sZSwga2V5OiBjZy5LZXkpID0+IHZvaWQ7IC8vIGNhbGxlZCBhZnRlciB0aGUgcHJlZHJvcCBoYXMgYmVlbiBzZXRcbiAgICAgIHVuc2V0PzogKCkgPT4gdm9pZDsgLy8gY2FsbGVkIGFmdGVyIHRoZSBwcmVkcm9wIGhhcyBiZWVuIHVuc2V0XG4gICAgfVxuICB9O1xuICBkcmFnZ2FibGU/OiB7XG4gICAgZW5hYmxlZD86IGJvb2xlYW47IC8vIGFsbG93IG1vdmVzICYgcHJlbW92ZXMgdG8gdXNlIGRyYWcnbiBkcm9wXG4gICAgZGlzdGFuY2U/OiBudW1iZXI7IC8vIG1pbmltdW0gZGlzdGFuY2UgdG8gaW5pdGlhdGUgYSBkcmFnOyBpbiBwaXhlbHNcbiAgICBhdXRvRGlzdGFuY2U/OiBib29sZWFuOyAvLyBsZXRzIGNoZXNzZ3JvdW5kIHNldCBkaXN0YW5jZSB0byB6ZXJvIHdoZW4gdXNlciBkcmFncyBwaWVjZXNcbiAgICBjZW50ZXJQaWVjZT86IGJvb2xlYW47IC8vIGNlbnRlciB0aGUgcGllY2Ugb24gY3Vyc29yIGF0IGRyYWcgc3RhcnRcbiAgICBzaG93R2hvc3Q/OiBib29sZWFuOyAvLyBzaG93IGdob3N0IG9mIHBpZWNlIGJlaW5nIGRyYWdnZWRcbiAgICBkZWxldGVPbkRyb3BPZmY/OiBib29sZWFuOyAvLyBkZWxldGUgYSBwaWVjZSB3aGVuIGl0IGlzIGRyb3BwZWQgb2ZmIHRoZSBib2FyZFxuICB9O1xuICBzZWxlY3RhYmxlPzoge1xuICAgIC8vIGRpc2FibGUgdG8gZW5mb3JjZSBkcmFnZ2luZyBvdmVyIGNsaWNrLWNsaWNrIG1vdmVcbiAgICBlbmFibGVkPzogYm9vbGVhblxuICB9O1xuICBldmVudHM/OiB7XG4gICAgY2hhbmdlPzogKCkgPT4gdm9pZDsgLy8gY2FsbGVkIGFmdGVyIHRoZSBzaXR1YXRpb24gY2hhbmdlcyBvbiB0aGUgYm9hcmRcbiAgICAvLyBjYWxsZWQgYWZ0ZXIgYSBwaWVjZSBoYXMgYmVlbiBtb3ZlZC5cbiAgICAvLyBjYXB0dXJlZFBpZWNlIGlzIHVuZGVmaW5lZCBvciBsaWtlIHtjb2xvcjogJ3doaXRlJzsgJ3JvbGUnOiAncXVlZW4nfVxuICAgIG1vdmU/OiAob3JpZzogY2cuS2V5LCBkZXN0OiBjZy5LZXksIGNhcHR1cmVkUGllY2U/OiBjZy5QaWVjZSkgPT4gdm9pZDtcbiAgICBkcm9wTmV3UGllY2U/OiAocGllY2U6IGNnLlBpZWNlLCBrZXk6IGNnLktleSkgPT4gdm9pZDtcbiAgICBzZWxlY3Q/OiAoa2V5OiBjZy5LZXkpID0+IHZvaWQ7IC8vIGNhbGxlZCB3aGVuIGEgc3F1YXJlIGlzIHNlbGVjdGVkXG4gICAgaW5zZXJ0PzogKGVsZW1lbnRzOiBjZy5FbGVtZW50cykgPT4gdm9pZDsgLy8gd2hlbiB0aGUgYm9hcmQgRE9NIGhhcyBiZWVuIChyZSlpbnNlcnRlZFxuICB9O1xuICBkcmF3YWJsZT86IHtcbiAgICBlbmFibGVkPzogYm9vbGVhbjsgLy8gY2FuIGRyYXdcbiAgICB2aXNpYmxlPzogYm9vbGVhbjsgLy8gY2FuIHZpZXdcbiAgICBlcmFzZU9uQ2xpY2s/OiBib29sZWFuO1xuICAgIHNoYXBlcz86IERyYXdTaGFwZVtdO1xuICAgIGF1dG9TaGFwZXM/OiBEcmF3U2hhcGVbXTtcbiAgICBicnVzaGVzPzogRHJhd0JydXNoW107XG4gICAgcGllY2VzPzoge1xuICAgICAgYmFzZVVybD86IHN0cmluZztcbiAgICB9XG4gIH07XG4gIGdlb21ldHJ5PzogY2cuR2VvbWV0cnk7IC8vIGRpbTh4OCB8IGRpbTl4OSB8IGRpbTEweDggfCBkaW05eDEwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmUoc3RhdGU6IFN0YXRlLCBjb25maWc6IENvbmZpZykge1xuXG4gIC8vIGRvbid0IG1lcmdlIGRlc3RpbmF0aW9ucy4gSnVzdCBvdmVycmlkZS5cbiAgaWYgKGNvbmZpZy5tb3ZhYmxlICYmIGNvbmZpZy5tb3ZhYmxlLmRlc3RzKSBzdGF0ZS5tb3ZhYmxlLmRlc3RzID0gdW5kZWZpbmVkO1xuXG4gIG1lcmdlKHN0YXRlLCBjb25maWcpO1xuXG4gIGlmIChjb25maWcuZ2VvbWV0cnkpIHN0YXRlLmRpbWVuc2lvbnMgPSBjZy5kaW1lbnNpb25zW2NvbmZpZy5nZW9tZXRyeV07XG5cbiAgLy8gaWYgYSBmZW4gd2FzIHByb3ZpZGVkLCByZXBsYWNlIHRoZSBwaWVjZXNcbiAgaWYgKGNvbmZpZy5mZW4pIHtcbiAgICBzdGF0ZS5waWVjZXMgPSBmZW5SZWFkKGNvbmZpZy5mZW4sIHN0YXRlLmdlb21ldHJ5KTtcbiAgICBzdGF0ZS5kcmF3YWJsZS5zaGFwZXMgPSBbXTtcbiAgfVxuXG4gIC8vIGFwcGx5IGNvbmZpZyB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1bmRlZmluZWQgeWV0IG1lYW5pbmdmdWxcbiAgaWYgKGNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgnY2hlY2snKSkgc2V0Q2hlY2soc3RhdGUsIGNvbmZpZy5jaGVjayB8fCBmYWxzZSk7XG4gIGlmIChjb25maWcuaGFzT3duUHJvcGVydHkoJ2xhc3RNb3ZlJykgJiYgIWNvbmZpZy5sYXN0TW92ZSkgc3RhdGUubGFzdE1vdmUgPSB1bmRlZmluZWQ7XG4gIC8vIGluIGNhc2Ugb2YgWkggZHJvcCBsYXN0IG1vdmUsIHRoZXJlJ3MgYSBzaW5nbGUgc3F1YXJlLlxuICAvLyBpZiB0aGUgcHJldmlvdXMgbGFzdCBtb3ZlIGhhZCB0d28gc3F1YXJlcyxcbiAgLy8gdGhlIG1lcmdlIGFsZ29yaXRobSB3aWxsIGluY29ycmVjdGx5IGtlZXAgdGhlIHNlY29uZCBzcXVhcmUuXG4gIGVsc2UgaWYgKGNvbmZpZy5sYXN0TW92ZSkgc3RhdGUubGFzdE1vdmUgPSBjb25maWcubGFzdE1vdmU7XG5cbiAgLy8gZml4IG1vdmUvcHJlbW92ZSBkZXN0c1xuICBpZiAoc3RhdGUuc2VsZWN0ZWQpIHNldFNlbGVjdGVkKHN0YXRlLCBzdGF0ZS5zZWxlY3RlZCk7XG5cbiAgLy8gbm8gbmVlZCBmb3Igc3VjaCBzaG9ydCBhbmltYXRpb25zXG4gIGlmICghc3RhdGUuYW5pbWF0aW9uLmR1cmF0aW9uIHx8IHN0YXRlLmFuaW1hdGlvbi5kdXJhdGlvbiA8IDEwMCkgc3RhdGUuYW5pbWF0aW9uLmVuYWJsZWQgPSBmYWxzZTtcblxuICBpZiAoIXN0YXRlLm1vdmFibGUucm9va0Nhc3RsZSAmJiBzdGF0ZS5tb3ZhYmxlLmRlc3RzKSB7XG4gICAgY29uc3QgcmFuayA9IHN0YXRlLm1vdmFibGUuY29sb3IgPT09ICd3aGl0ZScgPyAxIDogOCxcbiAgICBraW5nU3RhcnRQb3MgPSAnZScgKyByYW5rLFxuICAgIGRlc3RzID0gc3RhdGUubW92YWJsZS5kZXN0c1traW5nU3RhcnRQb3NdLFxuICAgIGtpbmcgPSBzdGF0ZS5waWVjZXNba2luZ1N0YXJ0UG9zXTtcbiAgICBpZiAoIWRlc3RzIHx8ICFraW5nIHx8IGtpbmcucm9sZSAhPT0gJ2tpbmcnKSByZXR1cm47XG4gICAgc3RhdGUubW92YWJsZS5kZXN0c1traW5nU3RhcnRQb3NdID0gZGVzdHMuZmlsdGVyKGQgPT5cbiAgICAgICEoKGQgPT09ICdhJyArIHJhbmspICYmIGRlc3RzLmluZGV4T2YoJ2MnICsgcmFuayBhcyBjZy5LZXkpICE9PSAtMSkgJiZcbiAgICAgICAgISgoZCA9PT0gJ2gnICsgcmFuaykgJiYgZGVzdHMuaW5kZXhPZignZycgKyByYW5rIGFzIGNnLktleSkgIT09IC0xKVxuICAgICk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIG1lcmdlKGJhc2U6IGFueSwgZXh0ZW5kOiBhbnkpIHtcbiAgZm9yIChsZXQga2V5IGluIGV4dGVuZCkge1xuICAgIGlmIChpc09iamVjdChiYXNlW2tleV0pICYmIGlzT2JqZWN0KGV4dGVuZFtrZXldKSkgbWVyZ2UoYmFzZVtrZXldLCBleHRlbmRba2V5XSk7XG4gICAgZWxzZSBiYXNlW2tleV0gPSBleHRlbmRba2V5XTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc09iamVjdChvOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0Jztcbn1cbiIsImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCAqIGFzIGJvYXJkIGZyb20gJy4vYm9hcmQnXG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbCdcbmltcG9ydCB7IGNsZWFyIGFzIGRyYXdDbGVhciB9IGZyb20gJy4vZHJhdydcbmltcG9ydCAqIGFzIGNnIGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBhbmltIH0gZnJvbSAnLi9hbmltJ1xuXG5leHBvcnQgaW50ZXJmYWNlIERyYWdDdXJyZW50IHtcbiAgb3JpZzogY2cuS2V5OyAvLyBvcmlnIGtleSBvZiBkcmFnZ2luZyBwaWVjZVxuICBvcmlnUG9zOiBjZy5Qb3M7XG4gIHBpZWNlOiBjZy5QaWVjZTtcbiAgcmVsOiBjZy5OdW1iZXJQYWlyOyAvLyB4OyB5IG9mIHRoZSBwaWVjZSBhdCBvcmlnaW5hbCBwb3NpdGlvblxuICBlcG9zOiBjZy5OdW1iZXJQYWlyOyAvLyBpbml0aWFsIGV2ZW50IHBvc2l0aW9uXG4gIHBvczogY2cuTnVtYmVyUGFpcjsgLy8gcmVsYXRpdmUgY3VycmVudCBwb3NpdGlvblxuICBkZWM6IGNnLk51bWJlclBhaXI7IC8vIHBpZWNlIGNlbnRlciBkZWNheVxuICBzdGFydGVkOiBib29sZWFuOyAvLyB3aGV0aGVyIHRoZSBkcmFnIGhhcyBzdGFydGVkOyBhcyBwZXIgdGhlIGRpc3RhbmNlIHNldHRpbmdcbiAgZWxlbWVudDogY2cuUGllY2VOb2RlIHwgKCgpID0+IGNnLlBpZWNlTm9kZSB8IHVuZGVmaW5lZCk7XG4gIG5ld1BpZWNlPzogYm9vbGVhbjsgLy8gaXQgaXQgYSBuZXcgcGllY2UgZnJvbSBvdXRzaWRlIHRoZSBib2FyZFxuICBmb3JjZT86IGJvb2xlYW47IC8vIGNhbiB0aGUgbmV3IHBpZWNlIHJlcGxhY2UgYW4gZXhpc3Rpbmcgb25lIChlZGl0b3IpXG4gIHByZXZpb3VzbHlTZWxlY3RlZD86IGNnLktleTtcbiAgb3JpZ2luVGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydChzOiBTdGF0ZSwgZTogY2cuTW91Y2hFdmVudCk6IHZvaWQge1xuICBpZiAoZS5idXR0b24gIT09IHVuZGVmaW5lZCAmJiBlLmJ1dHRvbiAhPT0gMCkgcmV0dXJuOyAvLyBvbmx5IHRvdWNoIG9yIGxlZnQgY2xpY2tcbiAgaWYgKGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoID4gMSkgcmV0dXJuOyAvLyBzdXBwb3J0IG9uZSBmaW5nZXIgdG91Y2ggb25seVxuICBjb25zdCBib3VuZHMgPSBzLmRvbS5ib3VuZHMoKSxcbiAgcG9zaXRpb24gPSB1dGlsLmV2ZW50UG9zaXRpb24oZSkgYXMgY2cuTnVtYmVyUGFpcixcbiAgb3JpZyA9IGJvYXJkLmdldEtleUF0RG9tUG9zKHBvc2l0aW9uLCBib2FyZC53aGl0ZVBvdihzKSwgYm91bmRzLCBzLmdlb21ldHJ5KTtcbiAgaWYgKCFvcmlnKSByZXR1cm47XG4gIGNvbnN0IHBpZWNlID0gcy5waWVjZXNbb3JpZ107XG4gIGNvbnN0IHByZXZpb3VzbHlTZWxlY3RlZCA9IHMuc2VsZWN0ZWQ7XG4gIGlmICghcHJldmlvdXNseVNlbGVjdGVkICYmIHMuZHJhd2FibGUuZW5hYmxlZCAmJiAoXG4gICAgcy5kcmF3YWJsZS5lcmFzZU9uQ2xpY2sgfHwgKCFwaWVjZSB8fCBwaWVjZS5jb2xvciAhPT0gcy50dXJuQ29sb3IpXG4gICkpIGRyYXdDbGVhcihzKTtcbiAgLy8gUHJldmVudCB0b3VjaCBzY3JvbGwgYW5kIGNyZWF0ZSBubyBjb3JyZXNwb25kaW5nIG1vdXNlIGV2ZW50LCBpZiB0aGVyZVxuICAvLyBpcyBhbiBpbnRlbnQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYm9hcmQuIElmIG5vIGNvbG9yIGlzIG1vdmFibGVcbiAgLy8gKGFuZCB0aGUgYm9hcmQgaXMgbm90IGZvciB2aWV3aW5nIG9ubHkpLCB0b3VjaGVzIGFyZSBsaWtlbHkgaW50ZW5kZWQgdG9cbiAgLy8gc2VsZWN0IHNxdWFyZXMuXG4gIGlmIChlLmNhbmNlbGFibGUgIT09IGZhbHNlICYmXG4gICAgICAoIWUudG91Y2hlcyB8fCAhcy5tb3ZhYmxlLmNvbG9yIHx8IHBpZWNlIHx8IHByZXZpb3VzbHlTZWxlY3RlZCB8fCBwaWVjZUNsb3NlVG8ocywgcG9zaXRpb24pKSlcbiAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIGNvbnN0IGhhZFByZW1vdmUgPSAhIXMucHJlbW92YWJsZS5jdXJyZW50O1xuICBjb25zdCBoYWRQcmVkcm9wID0gISFzLnByZWRyb3BwYWJsZS5jdXJyZW50O1xuICBzLnN0YXRzLmN0cmxLZXkgPSBlLmN0cmxLZXk7XG4gIGlmIChzLnNlbGVjdGVkICYmIGJvYXJkLmNhbk1vdmUocywgcy5zZWxlY3RlZCwgb3JpZykpIHtcbiAgICBhbmltKHN0YXRlID0+IGJvYXJkLnNlbGVjdFNxdWFyZShzdGF0ZSwgb3JpZyksIHMpO1xuICB9IGVsc2Uge1xuICAgIGJvYXJkLnNlbGVjdFNxdWFyZShzLCBvcmlnKTtcbiAgfVxuICBjb25zdCBzdGlsbFNlbGVjdGVkID0gcy5zZWxlY3RlZCA9PT0gb3JpZztcbiAgY29uc3QgZWxlbWVudCA9IHBpZWNlRWxlbWVudEJ5S2V5KHMsIG9yaWcpO1xuICBjb25zdCBmaXJzdFJhbmtJczAgPSBzLmRpbWVuc2lvbnMuaGVpZ2h0ID09PSAxMDtcbiAgaWYgKHBpZWNlICYmIGVsZW1lbnQgJiYgc3RpbGxTZWxlY3RlZCAmJiBib2FyZC5pc0RyYWdnYWJsZShzLCBvcmlnKSkge1xuICAgIGNvbnN0IHNxdWFyZUJvdW5kcyA9IGNvbXB1dGVTcXVhcmVCb3VuZHMob3JpZywgYm9hcmQud2hpdGVQb3YocyksIGJvdW5kcywgcy5kaW1lbnNpb25zKTtcbiAgICBzLmRyYWdnYWJsZS5jdXJyZW50ID0ge1xuICAgICAgb3JpZyxcbiAgICAgIG9yaWdQb3M6IHV0aWwua2V5MnBvcyhvcmlnLCBmaXJzdFJhbmtJczApLFxuICAgICAgcGllY2UsXG4gICAgICByZWw6IHBvc2l0aW9uLFxuICAgICAgZXBvczogcG9zaXRpb24sXG4gICAgICBwb3M6IFswLCAwXSxcbiAgICAgIGRlYzogcy5kcmFnZ2FibGUuY2VudGVyUGllY2UgPyBbXG4gICAgICAgIHBvc2l0aW9uWzBdIC0gKHNxdWFyZUJvdW5kcy5sZWZ0ICsgc3F1YXJlQm91bmRzLndpZHRoIC8gMiksXG4gICAgICAgIHBvc2l0aW9uWzFdIC0gKHNxdWFyZUJvdW5kcy50b3AgKyBzcXVhcmVCb3VuZHMuaGVpZ2h0IC8gMilcbiAgICAgIF0gOiBbMCwgMF0sXG4gICAgICBzdGFydGVkOiBzLmRyYWdnYWJsZS5hdXRvRGlzdGFuY2UgJiYgcy5zdGF0cy5kcmFnZ2VkLFxuICAgICAgZWxlbWVudCxcbiAgICAgIHByZXZpb3VzbHlTZWxlY3RlZCxcbiAgICAgIG9yaWdpblRhcmdldDogZS50YXJnZXRcbiAgICB9O1xuICAgIGVsZW1lbnQuY2dEcmFnZ2luZyA9IHRydWU7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZycpO1xuICAgIC8vIHBsYWNlIGdob3N0XG4gICAgY29uc3QgZ2hvc3QgPSBzLmRvbS5lbGVtZW50cy5naG9zdDtcbiAgICBpZiAoZ2hvc3QpIHtcbiAgICAgIGdob3N0LmNsYXNzTmFtZSA9IGBnaG9zdCAke3BpZWNlLmNvbG9yfSAke3BpZWNlLnJvbGV9YDtcbiAgICAgIHV0aWwudHJhbnNsYXRlQWJzKGdob3N0LCB1dGlsLnBvc1RvVHJhbnNsYXRlQWJzKGJvdW5kcywgcy5kaW1lbnNpb25zKSh1dGlsLmtleTJwb3Mob3JpZywgZmlyc3RSYW5rSXMwKSwgYm9hcmQud2hpdGVQb3YocykpKTtcbiAgICAgIHV0aWwuc2V0VmlzaWJsZShnaG9zdCwgdHJ1ZSk7XG4gICAgfVxuICAgIHByb2Nlc3NEcmFnKHMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChoYWRQcmVtb3ZlKSBib2FyZC51bnNldFByZW1vdmUocyk7XG4gICAgaWYgKGhhZFByZWRyb3ApIGJvYXJkLnVuc2V0UHJlZHJvcChzKTtcbiAgfVxuICBzLmRvbS5yZWRyYXcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBpZWNlQ2xvc2VUbyhzOiBTdGF0ZSwgcG9zOiBjZy5Qb3MpOiBib29sZWFuIHtcbiAgY29uc3QgYXNXaGl0ZSA9IGJvYXJkLndoaXRlUG92KHMpLFxuICBib3VuZHMgPSBzLmRvbS5ib3VuZHMoKSxcbiAgcmFkaXVzU3EgPSBNYXRoLnBvdyhib3VuZHMud2lkdGggLyA4LCAyKTtcbiAgZm9yIChsZXQga2V5IGluIHMucGllY2VzKSB7XG4gICAgY29uc3Qgc3F1YXJlQm91bmRzID0gY29tcHV0ZVNxdWFyZUJvdW5kcyhrZXkgYXMgY2cuS2V5LCBhc1doaXRlLCBib3VuZHMsIHMuZGltZW5zaW9ucyksXG4gICAgY2VudGVyOiBjZy5Qb3MgPSBbXG4gICAgICBzcXVhcmVCb3VuZHMubGVmdCArIHNxdWFyZUJvdW5kcy53aWR0aCAvIDIsXG4gICAgICBzcXVhcmVCb3VuZHMudG9wICsgc3F1YXJlQm91bmRzLmhlaWdodCAvIDJcbiAgICBdO1xuICAgIGlmICh1dGlsLmRpc3RhbmNlU3EoY2VudGVyLCBwb3MpIDw9IHJhZGl1c1NxKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmFnTmV3UGllY2UoczogU3RhdGUsIHBpZWNlOiBjZy5QaWVjZSwgZTogY2cuTW91Y2hFdmVudCwgZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XG5cbiAgY29uc3Qga2V5OiBjZy5LZXkgPSAnejAnO1xuXG4gIHMucGllY2VzW2tleV0gPSBwaWVjZTtcblxuICBzLmRvbS5yZWRyYXcoKTtcblxuICBjb25zdCBwb3NpdGlvbiA9IHV0aWwuZXZlbnRQb3NpdGlvbihlKSBhcyBjZy5OdW1iZXJQYWlyLFxuICBhc1doaXRlID0gYm9hcmQud2hpdGVQb3YocyksXG4gIGJvdW5kcyA9IHMuZG9tLmJvdW5kcygpLFxuICBzcXVhcmVCb3VuZHMgPSBjb21wdXRlU3F1YXJlQm91bmRzKGtleSwgYXNXaGl0ZSwgYm91bmRzLCBzLmRpbWVuc2lvbnMpO1xuXG4gIGNvbnN0IHJlbDogY2cuTnVtYmVyUGFpciA9IFtcbiAgICAoYXNXaGl0ZSA/IDAgOiBzLmRpbWVuc2lvbnMud2lkdGggLSAxKSAqIHNxdWFyZUJvdW5kcy53aWR0aCArIGJvdW5kcy5sZWZ0LFxuICAgIChhc1doaXRlID8gcy5kaW1lbnNpb25zLmhlaWdodCA6IC0xKSAqIHNxdWFyZUJvdW5kcy5oZWlnaHQgKyBib3VuZHMudG9wXG4gIF07XG5cbiAgY29uc3QgZmlyc3RSYW5rSXMwID0gcy5nZW9tZXRyeSA9PT0gY2cuR2VvbWV0cnkuZGltOXgxMDtcbiAgcy5kcmFnZ2FibGUuY3VycmVudCA9IHtcbiAgICBvcmlnOiBrZXksXG4gICAgb3JpZ1BvczogdXRpbC5rZXkycG9zKCdhMCcsIGZpcnN0UmFua0lzMCksXG4gICAgcGllY2UsXG4gICAgcmVsLFxuICAgIGVwb3M6IHBvc2l0aW9uLFxuICAgIHBvczogW3Bvc2l0aW9uWzBdIC0gcmVsWzBdLCBwb3NpdGlvblsxXSAtIHJlbFsxXV0sXG4gICAgZGVjOiBbLXNxdWFyZUJvdW5kcy53aWR0aCAvIDIsIC1zcXVhcmVCb3VuZHMuaGVpZ2h0IC8gMl0sXG4gICAgc3RhcnRlZDogdHJ1ZSxcbiAgICBlbGVtZW50OiAoKSA9PiBwaWVjZUVsZW1lbnRCeUtleShzLCBrZXkpLFxuICAgIG9yaWdpblRhcmdldDogZS50YXJnZXQsXG4gICAgbmV3UGllY2U6IHRydWUsXG4gICAgZm9yY2U6ICEhZm9yY2VcbiAgfTtcbiAgcHJvY2Vzc0RyYWcocyk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NEcmFnKHM6IFN0YXRlKTogdm9pZCB7XG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgY29uc3QgY3VyID0gcy5kcmFnZ2FibGUuY3VycmVudDtcbiAgICBpZiAoIWN1cikgcmV0dXJuO1xuICAgIC8vIGNhbmNlbCBhbmltYXRpb25zIHdoaWxlIGRyYWdnaW5nXG4gICAgaWYgKHMuYW5pbWF0aW9uLmN1cnJlbnQgJiYgcy5hbmltYXRpb24uY3VycmVudC5wbGFuLmFuaW1zW2N1ci5vcmlnXSkgcy5hbmltYXRpb24uY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICAvLyBpZiBtb3ZpbmcgcGllY2UgaXMgZ29uZSwgY2FuY2VsXG4gICAgY29uc3Qgb3JpZ1BpZWNlID0gcy5waWVjZXNbY3VyLm9yaWddO1xuICAgIGlmICghb3JpZ1BpZWNlIHx8ICF1dGlsLnNhbWVQaWVjZShvcmlnUGllY2UsIGN1ci5waWVjZSkpIGNhbmNlbChzKTtcbiAgICBlbHNlIHtcbiAgICAgIGlmICghY3VyLnN0YXJ0ZWQgJiYgdXRpbC5kaXN0YW5jZVNxKGN1ci5lcG9zLCBjdXIucmVsKSA+PSBNYXRoLnBvdyhzLmRyYWdnYWJsZS5kaXN0YW5jZSwgMikpIGN1ci5zdGFydGVkID0gdHJ1ZTtcbiAgICAgIGlmIChjdXIuc3RhcnRlZCkge1xuXG4gICAgICAgIC8vIHN1cHBvcnQgbGF6eSBlbGVtZW50c1xuICAgICAgICBpZiAodHlwZW9mIGN1ci5lbGVtZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSBjdXIuZWxlbWVudCgpO1xuICAgICAgICAgIGlmICghZm91bmQpIHJldHVybjtcbiAgICAgICAgICBmb3VuZC5jZ0RyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICBmb3VuZC5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZycpO1xuICAgICAgICAgIGN1ci5lbGVtZW50ID0gZm91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICBjdXIucG9zID0gW1xuICAgICAgICAgIGN1ci5lcG9zWzBdIC0gY3VyLnJlbFswXSxcbiAgICAgICAgICBjdXIuZXBvc1sxXSAtIGN1ci5yZWxbMV1cbiAgICAgICAgXTtcblxuICAgICAgICAvLyBtb3ZlIHBpZWNlXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdXRpbC5wb3NUb1RyYW5zbGF0ZUFicyhzLmRvbS5ib3VuZHMoKSwgcy5kaW1lbnNpb25zKShjdXIub3JpZ1BvcywgYm9hcmQud2hpdGVQb3YocykpO1xuICAgICAgICB0cmFuc2xhdGlvblswXSArPSBjdXIucG9zWzBdICsgY3VyLmRlY1swXTtcbiAgICAgICAgdHJhbnNsYXRpb25bMV0gKz0gY3VyLnBvc1sxXSArIGN1ci5kZWNbMV07XG4gICAgICAgIHV0aWwudHJhbnNsYXRlQWJzKGN1ci5lbGVtZW50LCB0cmFuc2xhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NEcmFnKHMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vdmUoczogU3RhdGUsIGU6IGNnLk1vdWNoRXZlbnQpOiB2b2lkIHtcbiAgLy8gc3VwcG9ydCBvbmUgZmluZ2VyIHRvdWNoIG9ubHlcbiAgaWYgKHMuZHJhZ2dhYmxlLmN1cnJlbnQgJiYgKCFlLnRvdWNoZXMgfHwgZS50b3VjaGVzLmxlbmd0aCA8IDIpKSB7XG4gICAgcy5kcmFnZ2FibGUuY3VycmVudC5lcG9zID0gdXRpbC5ldmVudFBvc2l0aW9uKGUpIGFzIGNnLk51bWJlclBhaXI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZChzOiBTdGF0ZSwgZTogY2cuTW91Y2hFdmVudCk6IHZvaWQge1xuICBjb25zdCBjdXIgPSBzLmRyYWdnYWJsZS5jdXJyZW50O1xuICBpZiAoIWN1cikgcmV0dXJuO1xuICAvLyBjcmVhdGUgbm8gY29ycmVzcG9uZGluZyBtb3VzZSBldmVudFxuICBpZiAoZS50eXBlID09PSAndG91Y2hlbmQnICYmIGUuY2FuY2VsYWJsZSAhPT0gZmFsc2UpIGUucHJldmVudERlZmF1bHQoKTtcbiAgLy8gY29tcGFyaW5nIHdpdGggdGhlIG9yaWdpbiB0YXJnZXQgaXMgYW4gZWFzeSB3YXkgdG8gdGVzdCB0aGF0IHRoZSBlbmQgZXZlbnRcbiAgLy8gaGFzIHRoZSBzYW1lIHRvdWNoIG9yaWdpblxuICBpZiAoZS50eXBlID09PSAndG91Y2hlbmQnICYmIGN1ciAmJiBjdXIub3JpZ2luVGFyZ2V0ICE9PSBlLnRhcmdldCAmJiAhY3VyLm5ld1BpZWNlKSB7XG4gICAgcy5kcmFnZ2FibGUuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm47XG4gIH1cbiAgYm9hcmQudW5zZXRQcmVtb3ZlKHMpO1xuICBib2FyZC51bnNldFByZWRyb3Aocyk7XG4gIC8vIHRvdWNoZW5kIGhhcyBubyBwb3NpdGlvbjsgc28gdXNlIHRoZSBsYXN0IHRvdWNobW92ZSBwb3NpdGlvbiBpbnN0ZWFkXG4gIGNvbnN0IGV2ZW50UG9zOiBjZy5OdW1iZXJQYWlyID0gdXRpbC5ldmVudFBvc2l0aW9uKGUpIHx8IGN1ci5lcG9zO1xuICBjb25zdCBkZXN0ID0gYm9hcmQuZ2V0S2V5QXREb21Qb3MoZXZlbnRQb3MsIGJvYXJkLndoaXRlUG92KHMpLCBzLmRvbS5ib3VuZHMoKSwgcy5nZW9tZXRyeSk7XG4gIGlmIChkZXN0ICYmIGN1ci5zdGFydGVkICYmIGN1ci5vcmlnICE9PSBkZXN0KSB7XG4gICAgaWYgKGN1ci5uZXdQaWVjZSkgYm9hcmQuZHJvcE5ld1BpZWNlKHMsIGN1ci5vcmlnLCBkZXN0LCBjdXIuZm9yY2UpO1xuICAgIGVsc2Uge1xuICAgICAgcy5zdGF0cy5jdHJsS2V5ID0gZS5jdHJsS2V5O1xuICAgICAgaWYgKGJvYXJkLnVzZXJNb3ZlKHMsIGN1ci5vcmlnLCBkZXN0KSkgcy5zdGF0cy5kcmFnZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY3VyLm5ld1BpZWNlKSB7XG4gICAgZGVsZXRlIHMucGllY2VzW2N1ci5vcmlnXTtcbiAgfSBlbHNlIGlmIChzLmRyYWdnYWJsZS5kZWxldGVPbkRyb3BPZmYgJiYgIWRlc3QpIHtcbiAgICBkZWxldGUgcy5waWVjZXNbY3VyLm9yaWddO1xuICAgIGJvYXJkLmNhbGxVc2VyRnVuY3Rpb24ocy5ldmVudHMuY2hhbmdlKTtcbiAgfVxuICBpZiAoY3VyICYmIGN1ci5vcmlnID09PSBjdXIucHJldmlvdXNseVNlbGVjdGVkICYmIChjdXIub3JpZyA9PT0gZGVzdCB8fCAhZGVzdCkpXG4gICAgYm9hcmQudW5zZWxlY3Qocyk7XG4gIGVsc2UgaWYgKCFzLnNlbGVjdGFibGUuZW5hYmxlZCkgYm9hcmQudW5zZWxlY3Qocyk7XG5cbiAgcmVtb3ZlRHJhZ0VsZW1lbnRzKHMpO1xuXG4gIHMuZHJhZ2dhYmxlLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gIHMuZG9tLnJlZHJhdygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsKHM6IFN0YXRlKTogdm9pZCB7XG4gIGNvbnN0IGN1ciA9IHMuZHJhZ2dhYmxlLmN1cnJlbnQ7XG4gIGlmIChjdXIpIHtcbiAgICBpZiAoY3VyLm5ld1BpZWNlKSBkZWxldGUgcy5waWVjZXNbY3VyLm9yaWddO1xuICAgIHMuZHJhZ2dhYmxlLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgYm9hcmQudW5zZWxlY3Qocyk7XG4gICAgcmVtb3ZlRHJhZ0VsZW1lbnRzKHMpO1xuICAgIHMuZG9tLnJlZHJhdygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURyYWdFbGVtZW50cyhzOiBTdGF0ZSkge1xuICBjb25zdCBlID0gcy5kb20uZWxlbWVudHM7XG4gIGlmIChlLmdob3N0KSB1dGlsLnNldFZpc2libGUoZS5naG9zdCwgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3F1YXJlQm91bmRzKGtleTogY2cuS2V5LCBhc1doaXRlOiBib29sZWFuLCBib3VuZHM6IENsaWVudFJlY3QsIGJkOiBjZy5Cb2FyZERpbWVuc2lvbnMpIHtcbiAgY29uc3QgZmlyc3RSYW5rSXMwID0gYmQuaGVpZ2h0ID09PSAxMDtcbiAgY29uc3QgcG9zID0gdXRpbC5rZXkycG9zKGtleSwgZmlyc3RSYW5rSXMwKTtcbiAgaWYgKCFhc1doaXRlKSB7XG4gICAgcG9zWzBdID0gYmQud2lkdGggKyAxIC0gcG9zWzBdO1xuICAgIHBvc1sxXSA9IGJkLmhlaWdodCArIDEgLSBwb3NbMV07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAqIChwb3NbMF0gLSAxKSAvIGJkLndpZHRoLFxuICAgIHRvcDogYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgKiAoYmQuaGVpZ2h0IC0gcG9zWzFdKSAvIGJkLmhlaWdodCxcbiAgICB3aWR0aDogYm91bmRzLndpZHRoIC8gYmQud2lkdGgsXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0IC8gYmQuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBpZWNlRWxlbWVudEJ5S2V5KHM6IFN0YXRlLCBrZXk6IGNnLktleSk6IGNnLlBpZWNlTm9kZSB8IHVuZGVmaW5lZCB7XG4gIGxldCBlbCA9IHMuZG9tLmVsZW1lbnRzLmJvYXJkLmZpcnN0Q2hpbGQgYXMgY2cuUGllY2VOb2RlO1xuICB3aGlsZSAoZWwpIHtcbiAgICBpZiAoZWwuY2dLZXkgPT09IGtleSAmJiBlbC50YWdOYW1lID09PSAnUElFQ0UnKSByZXR1cm4gZWw7XG4gICAgZWwgPSBlbC5uZXh0U2libGluZyBhcyBjZy5QaWVjZU5vZGU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCB7IHVuc2VsZWN0LCBjYW5jZWxNb3ZlLCBnZXRLZXlBdERvbVBvcywgd2hpdGVQb3YgfSBmcm9tICcuL2JvYXJkJ1xuaW1wb3J0IHsgZXZlbnRQb3NpdGlvbiwgaXNSaWdodEJ1dHRvbiB9IGZyb20gJy4vdXRpbCdcbmltcG9ydCAqIGFzIGNnIGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJhd1NoYXBlIHtcbiAgb3JpZzogY2cuS2V5O1xuICBkZXN0PzogY2cuS2V5O1xuICBicnVzaDogc3RyaW5nO1xuICBtb2RpZmllcnM/OiBEcmF3TW9kaWZpZXJzO1xuICBwaWVjZT86IERyYXdTaGFwZVBpZWNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyYXdTaGFwZVBpZWNlIHtcbiAgcm9sZTogY2cuUm9sZTtcbiAgY29sb3I6IGNnLkNvbG9yO1xuICBzY2FsZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcmF3QnJ1c2gge1xuICBrZXk6IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgb3BhY2l0eTogbnVtYmVyO1xuICBsaW5lV2lkdGg6IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyYXdCcnVzaGVzIHtcbiAgW25hbWU6IHN0cmluZ106IERyYXdCcnVzaDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcmF3TW9kaWZpZXJzIHtcbiAgbGluZVdpZHRoPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyYXdhYmxlIHtcbiAgZW5hYmxlZDogYm9vbGVhbjsgLy8gY2FuIGRyYXdcbiAgdmlzaWJsZTogYm9vbGVhbjsgLy8gY2FuIHZpZXdcbiAgZXJhc2VPbkNsaWNrOiBib29sZWFuO1xuICBvbkNoYW5nZT86IChzaGFwZXM6IERyYXdTaGFwZVtdKSA9PiB2b2lkO1xuICBzaGFwZXM6IERyYXdTaGFwZVtdOyAvLyB1c2VyIHNoYXBlc1xuICBhdXRvU2hhcGVzOiBEcmF3U2hhcGVbXTsgLy8gY29tcHV0ZXIgc2hhcGVzXG4gIGN1cnJlbnQ/OiBEcmF3Q3VycmVudDtcbiAgYnJ1c2hlczogRHJhd0JydXNoZXM7XG4gIC8vIGRyYXdhYmxlIFNWRyBwaWVjZXM7IHVzZWQgZm9yIGNyYXp5aG91c2UgZHJvcFxuICBwaWVjZXM6IHtcbiAgICBiYXNlVXJsOiBzdHJpbmdcbiAgfSxcbiAgcHJldlN2Z0hhc2g6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyYXdDdXJyZW50IHtcbiAgb3JpZzogY2cuS2V5OyAvLyBvcmlnIGtleSBvZiBkcmF3aW5nXG4gIGRlc3Q/OiBjZy5LZXk7IC8vIHNoYXBlIGRlc3QsIG9yIHVuZGVmaW5lZCBmb3IgY2lyY2xlXG4gIG1vdXNlU3E/OiBjZy5LZXk7IC8vIHNxdWFyZSBiZWluZyBtb3VzZWQgb3ZlclxuICBwb3M6IGNnLk51bWJlclBhaXI7IC8vIHJlbGF0aXZlIGN1cnJlbnQgcG9zaXRpb25cbiAgYnJ1c2g6IHN0cmluZzsgLy8gYnJ1c2ggbmFtZSBmb3Igc2hhcGVcbn1cblxuY29uc3QgYnJ1c2hlcyA9IFsnZ3JlZW4nLCAncmVkJywgJ2JsdWUnLCAneWVsbG93J107XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydChzdGF0ZTogU3RhdGUsIGU6IGNnLk1vdWNoRXZlbnQpOiB2b2lkIHtcbiAgaWYgKGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoID4gMSkgcmV0dXJuOyAvLyBzdXBwb3J0IG9uZSBmaW5nZXIgdG91Y2ggb25seVxuICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIGUuY3RybEtleSA/IHVuc2VsZWN0KHN0YXRlKSA6IGNhbmNlbE1vdmUoc3RhdGUpO1xuICBjb25zdCBwb3MgPSBldmVudFBvc2l0aW9uKGUpIGFzIGNnLk51bWJlclBhaXIsXG4gIG9yaWcgPSBnZXRLZXlBdERvbVBvcyhwb3MsIHdoaXRlUG92KHN0YXRlKSwgc3RhdGUuZG9tLmJvdW5kcygpLCBzdGF0ZS5nZW9tZXRyeSk7XG4gIGlmICghb3JpZykgcmV0dXJuO1xuICBzdGF0ZS5kcmF3YWJsZS5jdXJyZW50ID0ge1xuICAgIG9yaWcsXG4gICAgcG9zLFxuICAgIGJydXNoOiBldmVudEJydXNoKGUpXG4gIH07XG4gIHByb2Nlc3NEcmF3KHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEcmF3KHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgIGNvbnN0IGN1ciA9IHN0YXRlLmRyYXdhYmxlLmN1cnJlbnQ7XG4gICAgaWYgKGN1cikge1xuICAgICAgY29uc3QgbW91c2VTcSA9IGdldEtleUF0RG9tUG9zKGN1ci5wb3MsIHdoaXRlUG92KHN0YXRlKSwgc3RhdGUuZG9tLmJvdW5kcygpLCBzdGF0ZS5nZW9tZXRyeSk7XG4gICAgICBpZiAobW91c2VTcSAhPT0gY3VyLm1vdXNlU3EpIHtcbiAgICAgICAgY3VyLm1vdXNlU3EgPSBtb3VzZVNxO1xuICAgICAgICBjdXIuZGVzdCA9IG1vdXNlU3EgIT09IGN1ci5vcmlnID8gbW91c2VTcSA6IHVuZGVmaW5lZDtcbiAgICAgICAgc3RhdGUuZG9tLnJlZHJhd05vdygpO1xuICAgICAgfVxuICAgICAgcHJvY2Vzc0RyYXcoc3RhdGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlKHN0YXRlOiBTdGF0ZSwgZTogY2cuTW91Y2hFdmVudCk6IHZvaWQge1xuICBpZiAoc3RhdGUuZHJhd2FibGUuY3VycmVudCkgc3RhdGUuZHJhd2FibGUuY3VycmVudC5wb3MgPSBldmVudFBvc2l0aW9uKGUpIGFzIGNnLk51bWJlclBhaXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmQoc3RhdGU6IFN0YXRlKTogdm9pZCB7XG4gIGNvbnN0IGN1ciA9IHN0YXRlLmRyYXdhYmxlLmN1cnJlbnQ7XG4gIGlmIChjdXIpIHtcbiAgICBpZiAoY3VyLm1vdXNlU3EpIGFkZFNoYXBlKHN0YXRlLmRyYXdhYmxlLCBjdXIpO1xuICAgIGNhbmNlbChzdGF0ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbmNlbChzdGF0ZTogU3RhdGUpOiB2b2lkIHtcbiAgaWYgKHN0YXRlLmRyYXdhYmxlLmN1cnJlbnQpIHtcbiAgICBzdGF0ZS5kcmF3YWJsZS5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgIHN0YXRlLmRvbS5yZWRyYXcoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoc3RhdGU6IFN0YXRlKTogdm9pZCB7XG4gIGlmIChzdGF0ZS5kcmF3YWJsZS5zaGFwZXMubGVuZ3RoKSB7XG4gICAgc3RhdGUuZHJhd2FibGUuc2hhcGVzID0gW107XG4gICAgc3RhdGUuZG9tLnJlZHJhdygpO1xuICAgIG9uQ2hhbmdlKHN0YXRlLmRyYXdhYmxlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudEJydXNoKGU6IGNnLk1vdWNoRXZlbnQpOiBzdHJpbmcge1xuICByZXR1cm4gYnJ1c2hlc1soZS5zaGlmdEtleSAmJiBpc1JpZ2h0QnV0dG9uKGUpID8gMSA6IDApICsgKGUuYWx0S2V5ID8gMiA6IDApXTtcbn1cblxuZnVuY3Rpb24gYWRkU2hhcGUoZHJhd2FibGU6IERyYXdhYmxlLCBjdXI6IERyYXdDdXJyZW50KTogdm9pZCB7XG4gIGNvbnN0IHNhbWVTaGFwZSA9IChzOiBEcmF3U2hhcGUpID0+IHMub3JpZyA9PT0gY3VyLm9yaWcgJiYgcy5kZXN0ID09PSBjdXIuZGVzdDtcbiAgY29uc3Qgc2ltaWxhciA9IGRyYXdhYmxlLnNoYXBlcy5maWx0ZXIoc2FtZVNoYXBlKVswXTtcbiAgaWYgKHNpbWlsYXIpIGRyYXdhYmxlLnNoYXBlcyA9IGRyYXdhYmxlLnNoYXBlcy5maWx0ZXIocyA9PiAhc2FtZVNoYXBlKHMpKTtcbiAgaWYgKCFzaW1pbGFyIHx8IHNpbWlsYXIuYnJ1c2ggIT09IGN1ci5icnVzaCkgZHJhd2FibGUuc2hhcGVzLnB1c2goY3VyKTtcbiAgb25DaGFuZ2UoZHJhd2FibGUpO1xufVxuXG5mdW5jdGlvbiBvbkNoYW5nZShkcmF3YWJsZTogRHJhd2FibGUpOiB2b2lkIHtcbiAgaWYgKGRyYXdhYmxlLm9uQ2hhbmdlKSBkcmF3YWJsZS5vbkNoYW5nZShkcmF3YWJsZS5zaGFwZXMpO1xufVxuIiwiaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL3N0YXRlJ1xuaW1wb3J0ICogYXMgY2cgZnJvbSAnLi90eXBlcydcbmltcG9ydCAqIGFzIGJvYXJkIGZyb20gJy4vYm9hcmQnXG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbCdcbmltcG9ydCB7IGNhbmNlbCBhcyBjYW5jZWxEcmFnIH0gZnJvbSAnLi9kcmFnJ1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0RHJvcE1vZGUoczogU3RhdGUsIHBpZWNlPzogY2cuUGllY2UpOiB2b2lkIHtcbiAgcy5kcm9wbW9kZSA9IHtcbiAgICBhY3RpdmU6IHRydWUsXG4gICAgcGllY2VcbiAgfTtcbiAgY2FuY2VsRHJhZyhzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbmNlbERyb3BNb2RlKHM6IFN0YXRlKTogdm9pZCB7XG4gIHMuZHJvcG1vZGUgPSB7XG4gICAgYWN0aXZlOiBmYWxzZVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJvcChzOiBTdGF0ZSwgZTogY2cuTW91Y2hFdmVudCk6IHZvaWQge1xuICBpZiAoIXMuZHJvcG1vZGUuYWN0aXZlKSByZXR1cm47XG5cbiAgYm9hcmQudW5zZXRQcmVtb3ZlKHMpO1xuICBib2FyZC51bnNldFByZWRyb3Aocyk7XG5cbiAgY29uc3QgcGllY2UgPSBzLmRyb3Btb2RlLnBpZWNlO1xuXG4gIGlmIChwaWVjZSkge1xuICAgIHMucGllY2VzLnowID0gcGllY2U7XG4gICAgY29uc3QgcG9zaXRpb24gPSB1dGlsLmV2ZW50UG9zaXRpb24oZSk7XG4gICAgY29uc3QgZGVzdCA9IHBvc2l0aW9uICYmIGJvYXJkLmdldEtleUF0RG9tUG9zKFxuICAgICAgcG9zaXRpb24sIGJvYXJkLndoaXRlUG92KHMpLCBzLmRvbS5ib3VuZHMoKSwgcy5nZW9tZXRyeSk7XG4gICAgaWYgKGRlc3QpIGJvYXJkLmRyb3BOZXdQaWVjZShzLCAnejAnLCBkZXN0KTtcbiAgfVxuICBzLmRvbS5yZWRyYXcoKTtcbn1cbiIsImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCAqIGFzIGRyYWcgZnJvbSAnLi9kcmFnJ1xuaW1wb3J0ICogYXMgZHJhdyBmcm9tICcuL2RyYXcnXG5pbXBvcnQgeyBkcm9wIH0gZnJvbSAnLi9kcm9wJ1xuaW1wb3J0IHsgaXNSaWdodEJ1dHRvbiB9IGZyb20gJy4vdXRpbCdcbmltcG9ydCAqIGFzIGNnIGZyb20gJy4vdHlwZXMnXG5cbnR5cGUgTW91Y2hCaW5kID0gKGU6IGNnLk1vdWNoRXZlbnQpID0+IHZvaWQ7XG50eXBlIFN0YXRlTW91Y2hCaW5kID0gKGQ6IFN0YXRlLCBlOiBjZy5Nb3VjaEV2ZW50KSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gYmluZEJvYXJkKHM6IFN0YXRlKTogdm9pZCB7XG5cbiAgaWYgKHMudmlld09ubHkpIHJldHVybjtcblxuICBjb25zdCBib2FyZEVsID0gcy5kb20uZWxlbWVudHMuYm9hcmQsXG4gIG9uU3RhcnQgPSBzdGFydERyYWdPckRyYXcocyk7XG5cbiAgLy8gQ2Fubm90IGJlIHBhc3NpdmUsIGJlY2F1c2Ugd2UgcHJldmVudCB0b3VjaCBzY3JvbGxpbmcgYW5kIGRyYWdnaW5nIG9mXG4gIC8vIHNlbGVjdGVkIGVsZW1lbnRzLlxuICBib2FyZEVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblN0YXJ0IGFzIEV2ZW50TGlzdGVuZXIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gIGJvYXJkRWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25TdGFydCBhcyBFdmVudExpc3RlbmVyLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuXG4gIGlmIChzLmRpc2FibGVDb250ZXh0TWVudSB8fCBzLmRyYXdhYmxlLmVuYWJsZWQpIHtcbiAgICBib2FyZEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgZSA9PiBlLnByZXZlbnREZWZhdWx0KCkpO1xuICB9XG59XG5cbi8vIHJldHVybnMgdGhlIHVuYmluZCBmdW5jdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmREb2N1bWVudChzOiBTdGF0ZSwgcmVkcmF3QWxsOiBjZy5SZWRyYXcpOiBjZy5VbmJpbmQge1xuXG4gIGNvbnN0IHVuYmluZHM6IGNnLlVuYmluZFtdID0gW107XG5cbiAgaWYgKCFzLmRvbS5yZWxhdGl2ZSAmJiBzLnJlc2l6YWJsZSkge1xuICAgIGNvbnN0IG9uUmVzaXplID0gKCkgPT4ge1xuICAgICAgcy5kb20uYm91bmRzLmNsZWFyKCk7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVkcmF3QWxsKTtcbiAgICB9O1xuICAgIHVuYmluZHMucHVzaCh1bmJpbmRhYmxlKGRvY3VtZW50LmJvZHksICdjaGVzc2dyb3VuZC5yZXNpemUnLCBvblJlc2l6ZSkpO1xuICB9XG5cbiAgaWYgKCFzLnZpZXdPbmx5KSB7XG5cbiAgICBjb25zdCBvbm1vdmU6IE1vdWNoQmluZCA9IGRyYWdPckRyYXcocywgZHJhZy5tb3ZlLCBkcmF3Lm1vdmUpO1xuICAgIGNvbnN0IG9uZW5kOiBNb3VjaEJpbmQgPSBkcmFnT3JEcmF3KHMsIGRyYWcuZW5kLCBkcmF3LmVuZCk7XG5cbiAgICBbJ3RvdWNobW92ZScsICdtb3VzZW1vdmUnXS5mb3JFYWNoKGV2ID0+IHVuYmluZHMucHVzaCh1bmJpbmRhYmxlKGRvY3VtZW50LCBldiwgb25tb3ZlKSkpO1xuICAgIFsndG91Y2hlbmQnLCAnbW91c2V1cCddLmZvckVhY2goZXYgPT4gdW5iaW5kcy5wdXNoKHVuYmluZGFibGUoZG9jdW1lbnQsIGV2LCBvbmVuZCkpKTtcblxuICAgIGNvbnN0IG9uU2Nyb2xsID0gKCkgPT4gcy5kb20uYm91bmRzLmNsZWFyKCk7XG4gICAgdW5iaW5kcy5wdXNoKHVuYmluZGFibGUod2luZG93LCAnc2Nyb2xsJywgb25TY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KSk7XG4gICAgdW5iaW5kcy5wdXNoKHVuYmluZGFibGUod2luZG93LCAncmVzaXplJywgb25TY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KSk7XG4gIH1cblxuICByZXR1cm4gKCkgPT4gdW5iaW5kcy5mb3JFYWNoKGYgPT4gZigpKTtcbn1cblxuZnVuY3Rpb24gdW5iaW5kYWJsZShlbDogRXZlbnRUYXJnZXQsIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogTW91Y2hCaW5kLCBvcHRpb25zPzogYW55KTogY2cuVW5iaW5kIHtcbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrIGFzIEV2ZW50TGlzdGVuZXIsIG9wdGlvbnMpO1xuICByZXR1cm4gKCkgPT4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrIGFzIEV2ZW50TGlzdGVuZXIpO1xufVxuXG5mdW5jdGlvbiBzdGFydERyYWdPckRyYXcoczogU3RhdGUpOiBNb3VjaEJpbmQge1xuICByZXR1cm4gZSA9PiB7XG4gICAgaWYgKHMuZHJhZ2dhYmxlLmN1cnJlbnQpIGRyYWcuY2FuY2VsKHMpO1xuICAgIGVsc2UgaWYgKHMuZHJhd2FibGUuY3VycmVudCkgZHJhdy5jYW5jZWwocyk7XG4gICAgZWxzZSBpZiAoZS5zaGlmdEtleSB8fCBpc1JpZ2h0QnV0dG9uKGUpKSB7IGlmIChzLmRyYXdhYmxlLmVuYWJsZWQpIGRyYXcuc3RhcnQocywgZSk7IH1cbiAgICBlbHNlIGlmICghcy52aWV3T25seSkge1xuICAgICAgaWYgKHMuZHJvcG1vZGUuYWN0aXZlKSBkcm9wKHMsIGUpO1xuICAgICAgZWxzZSBkcmFnLnN0YXJ0KHMsIGUpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZHJhZ09yRHJhdyhzOiBTdGF0ZSwgd2l0aERyYWc6IFN0YXRlTW91Y2hCaW5kLCB3aXRoRHJhdzogU3RhdGVNb3VjaEJpbmQpOiBNb3VjaEJpbmQge1xuICByZXR1cm4gZSA9PiB7XG4gICAgaWYgKGUuc2hpZnRLZXkgfHwgaXNSaWdodEJ1dHRvbihlKSkgeyBpZiAocy5kcmF3YWJsZS5lbmFibGVkKSB3aXRoRHJhdyhzLCBlKTsgfVxuICAgIGVsc2UgaWYgKCFzLnZpZXdPbmx5KSB3aXRoRHJhZyhzLCBlKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCB7IEtleSB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGxvc2lvbihzdGF0ZTogU3RhdGUsIGtleXM6IEtleVtdKTogdm9pZCB7XG4gIHN0YXRlLmV4cGxvZGluZyA9IHsgc3RhZ2U6IDEsIGtleXMgfTtcbiAgc3RhdGUuZG9tLnJlZHJhdygpO1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBzZXRTdGFnZShzdGF0ZSwgMik7XG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRTdGFnZShzdGF0ZSwgdW5kZWZpbmVkKSwgMTIwKTtcbiAgfSwgMTIwKTtcbn1cblxuZnVuY3Rpb24gc2V0U3RhZ2Uoc3RhdGU6IFN0YXRlLCBzdGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmIChzdGF0ZS5leHBsb2RpbmcpIHtcbiAgICBpZiAoc3RhZ2UpIHN0YXRlLmV4cGxvZGluZy5zdGFnZSA9IHN0YWdlO1xuICAgIGVsc2Ugc3RhdGUuZXhwbG9kaW5nID0gdW5kZWZpbmVkO1xuICAgIHN0YXRlLmRvbS5yZWRyYXcoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgcG9zMmtleSwgTlJhbmtzLCBpbnZOUmFua3MgfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgKiBhcyBjZyBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbDogY2cuRkVOID0gJ3JuYnFrYm5yL3BwcHBwcHBwLzgvOC84LzgvUFBQUFBQUFAvUk5CUUtCTlInO1xuXG5jb25zdCByb2xlczg6IHsgW2xldHRlcjogc3RyaW5nXTogY2cuUm9sZSB9ID0ge1xuICAgIHA6ICdwYXduJywgcjogJ3Jvb2snLCBuOiAna25pZ2h0JywgYjogJ2Jpc2hvcCcsIHE6ICdxdWVlbicsIGs6ICdraW5nJywgbTogJ21ldCcsIGY6ICdmZXJ6JywgczogJ3NpbHZlcicsIGM6ICdjYW5jZWxsb3InLCBhOiAnYXJjaGJpc2hvcCcsIGg6ICdoYXdrJywgZTogJ2VsZXBoYW50JyB9O1xuLy8gc2hvZ2lcbmNvbnN0IHJvbGVzOTogeyBbbGV0dGVyOiBzdHJpbmddOiBjZy5Sb2xlIH0gPSB7XG4gICAgcDogJ3Bhd24nLCByOiAncm9vaycsIG46ICdrbmlnaHQnLCBiOiAnYmlzaG9wJywgazogJ2tpbmcnLCBnOiAnZ29sZCcsIHM6ICdzaWx2ZXInLCBsOiAnbGFuY2UnIH07XG4vLyB4aWFuZ3FpXG5jb25zdCByb2xlczEwOiB7IFtsZXR0ZXI6IHN0cmluZ106IGNnLlJvbGUgfSA9IHtcbiAgICBwOiAncGF3bicsIHI6ICdyb29rJywgbjogJ2tuaWdodCcsIGI6ICdiaXNob3AnLCBrOiAna2luZycsIGM6ICdjYW5ub24nLCBhOiAnYWR2aXNvcicgfTtcblxuXG5jb25zdCBsZXR0ZXJzOCA9IHtcbiAgICBwYXduOiAncCcsIHJvb2s6ICdyJywga25pZ2h0OiAnbicsIGJpc2hvcDogJ2InLCBxdWVlbjogJ3EnLCBraW5nOiAnaycsIG1ldDogJ20nLCBmZXJ6OiAnZicsIHNpbHZlcjogJ3MnLCBjYW5jZWxsb3I6ICdjJywgYXJjaGJpc2hvcDogJ2EnLCBoYXdrOiAnaCcsIGVsZXBoYW50OiAnZScgfTtcbi8vIHNob2dpXG5jb25zdCBsZXR0ZXJzOSA9IHtcbiAgICBwYXduOiAncCcsIHJvb2s6ICdyJywga25pZ2h0OiAnbicsIGJpc2hvcDogJ2InLCBraW5nOiAnaycsIGdvbGQ6ICdnJywgc2lsdmVyOiAncycsIGxhbmNlOiAnbCcsXG4gICAgcHBhd246ICcrcCcsIHBrbmlnaHQ6ICcrbicsIHBiaXNob3A6ICcrYicsIHByb29rOiAnK3InLCBwc2lsdmVyOiAnK3MnLCBwbGFuY2U6ICcrbCcgfTtcbi8vIHhpYW5ncWlcbmNvbnN0IGxldHRlcnMxMCA9IHtcbiAgICBwYXduOiAncCcsIHJvb2s6ICdyJywga25pZ2h0OiAnbicsIGJpc2hvcDogJ2InLCBraW5nOiAnaycsIGNhbm5vbjogJ2MnLCBhZHZpc29yOiAnYSd9O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVhZChmZW46IGNnLkZFTiwgZ2VvbTogY2cuR2VvbWV0cnkpOiBjZy5QaWVjZXMge1xuICBpZiAoZmVuID09PSAnc3RhcnQnKSBmZW4gPSBpbml0aWFsO1xuICBpZiAoZmVuLmluZGV4T2YoJ1snKSAhPT0gLTEpIGZlbiA9IGZlbi5zbGljZSgwLCBmZW4uaW5kZXhPZignWycpKTtcbiAgY29uc3QgcGllY2VzOiBjZy5QaWVjZXMgPSB7fTtcbiAgbGV0IHJvdzogbnVtYmVyID0gZmVuLnNwbGl0KFwiL1wiKS5sZW5ndGg7XG4gIGxldCBjb2w6IG51bWJlciA9IDA7XG4gIGxldCBwcm9tb3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdCByb2xlcyA9IChnZW9tID09PSBjZy5HZW9tZXRyeS5kaW05eDEwKSA/IHJvbGVzMTAgOiAoZ2VvbSA9PT0gY2cuR2VvbWV0cnkuZGltOXg5IHx8IGdlb20gPT09IGNnLkdlb21ldHJ5LmRpbTV4NSkgPyByb2xlczkgOiByb2xlczg7XG4gIGNvbnN0IGZpcnN0UmFua0lzMCA9IHJvdyA9PT0gMTA7XG4gIGNvbnN0IHNob2dpID0gKHJvdyA9PT0gOSB8fCByb3cgPT09IDUpO1xuICBjb25zdCBtaW5pID0gcm93ID09PSA1O1xuICBmb3IgKGNvbnN0IGMgb2YgZmVuKSB7XG4gICAgc3dpdGNoIChjKSB7XG4gICAgICBjYXNlICcgJzogcmV0dXJuIHBpZWNlcztcbiAgICAgIGNhc2UgJy8nOlxuICAgICAgICAtLXJvdztcbiAgICAgICAgaWYgKHJvdyA9PT0gMCkgcmV0dXJuIHBpZWNlcztcbiAgICAgICAgY29sID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcrJzpcbiAgICAgICAgcHJvbW90ZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ34nOlxuICAgICAgICBjb25zdCBwaWVjZSA9IHBpZWNlc1tjZy5maWxlc1tjb2xdICsgY2cucmFua3NbZmlyc3RSYW5rSXMwID8gcm93IDogcm93ICsgMV1dO1xuICAgICAgICBpZiAocGllY2UpIHBpZWNlLnByb21vdGVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zdCBuYiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgaWYgKG5iIDwgNTgpIGNvbCArPSAoYyA9PT0gJzAnKSA/IDkgOiBuYiAtIDQ4O1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICArK2NvbDtcbiAgICAgICAgICBjb25zdCByb2xlID0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGxldCBwaWVjZSA9IHtcbiAgICAgICAgICAgIHJvbGU6IHJvbGVzW3JvbGVdLFxuICAgICAgICAgICAgY29sb3I6IChjID09PSByb2xlID8gc2hvZ2kgPyAnd2hpdGUnOiAnYmxhY2snIDogc2hvZ2kgPyAnYmxhY2snIDogJ3doaXRlJykgYXMgY2cuQ29sb3JcbiAgICAgICAgICB9IGFzIGNnLlBpZWNlO1xuICAgICAgICAgIGlmIChwcm9tb3RlZCkge1xuICAgICAgICAgICAgcGllY2Uucm9sZSA9ICdwJyArIHBpZWNlLnJvbGUgYXMgY2cuUm9sZTtcbiAgICAgICAgICAgIHBpZWNlLnByb21vdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHByb21vdGVkID0gZmFsc2U7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAobWluaSkge1xuICAgICAgICAgICAgICBwaWVjZXNbY2cuZmlsZXNbNiAtIGNvbCAtIDFdICsgY2cucmFua3NbNiAtIHJvd11dID0gcGllY2U7XG4gICAgICAgICAgfSBlbHNlIGlmIChzaG9naSkge1xuICAgICAgICAgICAgICBwaWVjZXNbY2cuZmlsZXNbMTAgLSBjb2wgLSAxXSArIGNnLnJhbmtzWzEwIC0gcm93XV0gPSBwaWVjZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwaWVjZXNbY2cuZmlsZXNbY29sIC0gMV0gKyBjZy5yYW5rc1tmaXJzdFJhbmtJczAgPyByb3cgLSAxIDogcm93XV0gPSBwaWVjZTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwaWVjZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZShwaWVjZXM6IGNnLlBpZWNlcywgZ2VvbTogY2cuR2VvbWV0cnkpOiBjZy5GRU4ge1xuICB2YXIgbGV0dGVyczogYW55ID0ge307XG4gIHN3aXRjaCAoZ2VvbSkge1xuICBjYXNlIGNnLkdlb21ldHJ5LmRpbTl4MTA6XG4gICAgbGV0dGVycyA9IGxldHRlcnMxMDtcbiAgICBicmVhaztcbiAgY2FzZSBjZy5HZW9tZXRyeS5kaW05eDk6XG4gICAgbGV0dGVycyA9IGxldHRlcnM5O1xuICAgIGJyZWFrO1xuICBkZWZhdWx0OlxuICAgIGxldHRlcnMgPSBsZXR0ZXJzODtcbiAgICBicmVha1xuICB9O1xuICByZXR1cm4gaW52TlJhbmtzLm1hcCh5ID0+IE5SYW5rcy5tYXAoeCA9PiB7XG4gICAgICBjb25zdCBwaWVjZSA9IHBpZWNlc1twb3Mya2V5KFt4LCB5XSwgZ2VvbSldO1xuICAgICAgaWYgKHBpZWNlKSB7XG4gICAgICAgIGNvbnN0IGxldHRlcjogc3RyaW5nID0gbGV0dGVyc1twaWVjZS5yb2xlXTtcbiAgICAgICAgcmV0dXJuIHBpZWNlLmNvbG9yID09PSAnd2hpdGUnID8gbGV0dGVyLnRvVXBwZXJDYXNlKCkgOiBsZXR0ZXI7XG4gICAgICB9IGVsc2UgcmV0dXJuICcxJztcbiAgICB9KS5qb2luKCcnKVxuICApLmpvaW4oJy8nKS5yZXBsYWNlKC8xezIsfS9nLCBzID0+IHMubGVuZ3RoLnRvU3RyaW5nKCkpO1xufVxuIiwiaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwnXG5pbXBvcnQgKiBhcyBjZyBmcm9tICcuL3R5cGVzJ1xuXG50eXBlIE1vYmlsaXR5ID0gKHgxOm51bWJlciwgeTE6bnVtYmVyLCB4MjpudW1iZXIsIHkyOm51bWJlcikgPT4gYm9vbGVhbjtcblxuZnVuY3Rpb24gZGlmZihhOiBudW1iZXIsIGI6bnVtYmVyKTpudW1iZXIge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpO1xufVxuXG5mdW5jdGlvbiBwYXduKGNvbG9yOiBjZy5Db2xvcik6IE1vYmlsaXR5IHtcbiAgcmV0dXJuICh4MSwgeTEsIHgyLCB5MikgPT4gZGlmZih4MSwgeDIpIDwgMiAmJiAoXG4gICAgY29sb3IgPT09ICd3aGl0ZScgPyAoXG4gICAgICAvLyBhbGxvdyAyIHNxdWFyZXMgZnJvbSAxIGFuZCA4LCBmb3IgaG9yZGVcbiAgICAgIHkyID09PSB5MSArIDEgfHwgKHkxIDw9IDIgJiYgeTIgPT09ICh5MSArIDIpICYmIHgxID09PSB4MilcbiAgICApIDogKFxuICAgICAgeTIgPT09IHkxIC0gMSB8fCAoeTEgPj0gNyAmJiB5MiA9PT0gKHkxIC0gMikgJiYgeDEgPT09IHgyKVxuICAgIClcbiAgKTtcbn1cblxuY29uc3Qga25pZ2h0OiBNb2JpbGl0eSA9ICh4MSwgeTEsIHgyLCB5MikgPT4ge1xuICBjb25zdCB4ZCA9IGRpZmYoeDEsIHgyKTtcbiAgY29uc3QgeWQgPSBkaWZmKHkxLCB5Mik7XG4gIHJldHVybiAoeGQgPT09IDEgJiYgeWQgPT09IDIpIHx8ICh4ZCA9PT0gMiAmJiB5ZCA9PT0gMSk7XG59XG5cbmNvbnN0IGJpc2hvcDogTW9iaWxpdHkgPSAoeDEsIHkxLCB4MiwgeTIpID0+IHtcbiAgcmV0dXJuIGRpZmYoeDEsIHgyKSA9PT0gZGlmZih5MSwgeTIpO1xufVxuXG5jb25zdCByb29rOiBNb2JpbGl0eSA9ICh4MSwgeTEsIHgyLCB5MikgPT4ge1xuICByZXR1cm4geDEgPT09IHgyIHx8IHkxID09PSB5Mjtcbn1cblxuY29uc3QgcXVlZW46IE1vYmlsaXR5ID0gKHgxLCB5MSwgeDIsIHkyKSA9PiB7XG4gIHJldHVybiBiaXNob3AoeDEsIHkxLCB4MiwgeTIpIHx8IHJvb2soeDEsIHkxLCB4MiwgeTIpO1xufVxuXG5mdW5jdGlvbiBraW5nKGNvbG9yOiBjZy5Db2xvciwgcm9va0ZpbGVzOiBudW1iZXJbXSwgY2FuQ2FzdGxlOiBib29sZWFuKTogTW9iaWxpdHkge1xuICByZXR1cm4gKHgxLCB5MSwgeDIsIHkyKSAgPT4gKFxuICAgIGRpZmYoeDEsIHgyKSA8IDIgJiYgZGlmZih5MSwgeTIpIDwgMlxuICApIHx8IChcbiAgICBjYW5DYXN0bGUgJiYgeTEgPT09IHkyICYmIHkxID09PSAoY29sb3IgPT09ICd3aGl0ZScgPyAxIDogOCkgJiYgKFxuICAgICAgKHgxID09PSA1ICYmICh4MiA9PT0gMyB8fCB4MiA9PT0gNykpIHx8IHV0aWwuY29udGFpbnNYKHJvb2tGaWxlcywgeDIpXG4gICAgKVxuICApO1xufVxuXG4vLyBtYWtydWsvc2l0dHV5aW4gcXVlZW5cbmNvbnN0IG1ldDogTW9iaWxpdHkgPSAoeDEsIHkxLCB4MiwgeTIpID0+IHtcbiAgcmV0dXJuIGRpZmYoeDEsIHgyKSA9PT0gZGlmZih5MSwgeTIpICYmIGRpZmYoeDEsIHgyKSA9PT0gMTtcbn1cblxuLy8gY2FwYWJsYW5jYSBhcmNoYmlzaG9wLCBzZWlyYXdhbiBoYXdrXG5jb25zdCBhcmNoYmlzaG9wOiBNb2JpbGl0eSA9ICh4MSwgeTEsIHgyLCB5MikgPT4ge1xuICByZXR1cm4gYmlzaG9wKHgxLCB5MSwgeDIsIHkyKSB8fCBrbmlnaHQoeDEsIHkxLCB4MiwgeTIpO1xufVxuXG4vLyBjYXBhYmxhbmNhIGNhbmNlbGxvciwgc2VpcmF3YW4gZWxlcGhhbnRcbmNvbnN0IGNhbmNlbGxvcjogTW9iaWxpdHkgPSAoeDEsIHkxLCB4MiwgeTIpID0+IHtcbiAgcmV0dXJuIHJvb2soeDEsIHkxLCB4MiwgeTIpIHx8IGtuaWdodCh4MSwgeTEsIHgyLCB5Mik7XG59XG5cbi8vIHNob2dpIGxhbmNlXG5mdW5jdGlvbiBsYW5jZShjb2xvcjogY2cuQ29sb3IpOiBNb2JpbGl0eSB7XG4gIHJldHVybiAoeDEsIHkxLCB4MiwgeTIpID0+IChcbiAgICB4MiA9PT0geDEgJiYgKGNvbG9yID09PSAnd2hpdGUnID8geTIgPiB5MSA6IHkyIDwgeTEpXG4gICk7XG59XG5cbi8vIHNob2dpIHNpbHZlciwgbWFrcnVrL3NpdHR1eWluIGJpc2hvcFxuZnVuY3Rpb24gc2lsdmVyKGNvbG9yOiBjZy5Db2xvcik6IE1vYmlsaXR5IHtcbiAgcmV0dXJuICh4MSwgeTEsIHgyLCB5MikgID0+IChcbiAgICBtZXQoeDEsIHkxLCB4MiwgeTIpIHx8ICh4MSA9PT0geDIgJiYgKGNvbG9yID09PSAnd2hpdGUnID8geTIgPT09IHkxICsgMSA6IHkyID09PSB5MSAtIDEpKVxuICApO1xufVxuXG4vLyBzaG9naSBnb2xkLCBwcm9tb3RlZCBwYXduL2tuaWdodC9sYW5jZS9zaWx2ZXJcbmZ1bmN0aW9uIGdvbGQoY29sb3I6IGNnLkNvbG9yKTogTW9iaWxpdHkge1xuICByZXR1cm4gKHgxLCB5MSwgeDIsIHkyKSAgPT4gKFxuICAgIGRpZmYoeDEsIHgyKSA8IDIgJiYgZGlmZih5MSwgeTIpIDwgMiAmJiAoXG4gICAgICBjb2xvciA9PT0gJ3doaXRlJyA/XG4gICAgICAgICEoKHgyID09PSB4MSAtIDEgJiYgeTIgPT09IHkxIC0gMSkgfHwgKHgyID09PSB4MSArIDEgJiYgeTIgPT09IHkxIC0gMSkpIDpcbiAgICAgICAgISgoeDIgPT09IHgxICsgMSAmJiB5MiA9PT0geTEgKyAxKSB8fCAoeDIgPT09IHgxIC0gMSAmJiB5MiA9PT0geTEgKyAxKSlcbiAgICApXG4gICk7XG59XG5cbi8vIHNob2dpIHBhd25cbmZ1bmN0aW9uIHNwYXduKGNvbG9yOiBjZy5Db2xvcik6IE1vYmlsaXR5IHtcbiAgcmV0dXJuICh4MSwgeTEsIHgyLCB5MikgPT4gKHgyID09PSB4MSAmJiAoY29sb3IgPT09ICd3aGl0ZScgPyB5MiA9PT0geTEgKyAxIDogeTIgPT09IHkxIC0gMSkpO1xufVxuXG4vLyBzaG9naSBrbmlnaHRcbmZ1bmN0aW9uIHNrbmlnaHQoY29sb3I6IGNnLkNvbG9yKTogTW9iaWxpdHkge1xuICByZXR1cm4gKHgxLCB5MSwgeDIsIHkyKSA9PiBjb2xvciA9PT0gJ3doaXRlJyA/XG4gICAgKHkyID09PSB5MSArIDIgJiYgeDIgPT09IHgxIC0gMSB8fCB5MiA9PT0geTEgKyAyICYmIHgyID09PSB4MSArIDEpIDpcbiAgICAoeTIgPT09IHkxIC0gMiAmJiB4MiA9PT0geDEgLSAxIHx8IHkyID09PSB5MSAtIDIgJiYgeDIgPT09IHgxICsgMSk7XG59XG5cbi8vIHNob2dpIHByb21vdGVkIHJvb2tcbmNvbnN0IHByb29rOiBNb2JpbGl0eSA9ICh4MSwgeTEsIHgyLCB5MikgPT4ge1xuICByZXR1cm4gcm9vayh4MSwgeTEsIHgyLCB5MikgfHwgKGRpZmYoeDEsIHgyKSA8IDIgJiYgZGlmZih5MSwgeTIpIDwgMik7XG59XG5cbi8vIHNob2dpIHByb21vdGVkIGJpc2hvcFxuY29uc3QgcGJpc2hvcDogTW9iaWxpdHkgPSAoeDEsIHkxLCB4MiwgeTIpID0+IHtcbiAgcmV0dXJuIGJpc2hvcCh4MSwgeTEsIHgyLCB5MikgfHwgKGRpZmYoeDEsIHgyKSA8IDIgJiYgZGlmZih5MSwgeTIpIDwgMik7XG59XG5cbi8vIHNob2dpIGtpbmdcbmNvbnN0IHNraW5nOiBNb2JpbGl0eSA9ICh4MSwgeTEsIHgyLCB5MikgPT4ge1xuICByZXR1cm4gZGlmZih4MSwgeDIpIDwgMiAmJiBkaWZmKHkxLCB5MikgPCAyO1xufVxuXG4vLyB4aWFuZ3FpIHBhd25cbmZ1bmN0aW9uIHhwYXduKGNvbG9yOiBjZy5Db2xvcik6IE1vYmlsaXR5IHtcbiAgcmV0dXJuICh4MSwgeTEsIHgyLCB5MikgPT4gKFxuICAgICh4MiA9PT0geDEgJiYgKGNvbG9yID09PSAnd2hpdGUnID8geTIgPT09IHkxICsgMSA6IHkyID09PSB5MSAtIDEpKSB8fFxuICAgICh5MiA9PT0geTEgJiYgKHgyID09PSB4MSArIDEgfHwgeDIgPT09IHgxIC0gMSkgJiYgKGNvbG9yID09PSAnd2hpdGUnID8geTEgPiA1OiB5MSA8IDYpKVxuICAgICk7XG59XG5cbi8vIHhpYW5ncWkgYmlzaG9wXG5jb25zdCB4YmlzaG9wOiBNb2JpbGl0eSA9ICh4MSwgeTEsIHgyLCB5MikgPT4ge1xuICByZXR1cm4gZGlmZih4MSwgeDIpID09PSBkaWZmKHkxLCB5MikgJiYgZGlmZih4MSwgeDIpID09PSAyO1xufVxuXG4vLyB4aWFuZ3FpIGFkdmlzb3JcbmNvbnN0IGFkdmlzb3I6IE1vYmlsaXR5ID0gKHgxLCB5MSwgeDIsIHkyKSA9PiB7XG4gIHJldHVybiBkaWZmKHgxLCB4MikgPT09IGRpZmYoeTEsIHkyKSAmJiBkaWZmKHgxLCB4MikgPT09IDE7XG59XG5cbi8vIHhpYW5ncWkgZ2VuZXJhbChraW5nKVxuY29uc3QgeGtpbmc6IE1vYmlsaXR5ID0gKHgxLCB5MSwgeDIsIHkyKSA9PiB7XG4gIC8vIFRPRE86IGZseWluZyBnZW5lcmFsIGNhbiBjYXB0dXJlIG9wcCBnZW5lcmFsXG4gIHJldHVybiAoeDEgPT09IHgyIHx8IHkxID09PSB5MikgJiYgZGlmZih4MSwgeDIpID09PSAxO1xufVxuXG5mdW5jdGlvbiByb29rRmlsZXNPZihwaWVjZXM6IGNnLlBpZWNlcywgY29sb3I6IGNnLkNvbG9yLCBmaXJzdFJhbmtJczA6IGJvb2xlYW4pIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHBpZWNlcykuZmlsdGVyKGtleSA9PiB7XG4gICAgY29uc3QgcGllY2UgPSBwaWVjZXNba2V5XTtcbiAgICByZXR1cm4gcGllY2UgJiYgcGllY2UuY29sb3IgPT09IGNvbG9yICYmIHBpZWNlLnJvbGUgPT09ICdyb29rJztcbiAgfSkubWFwKChrZXk6IHN0cmluZyApID0+IHV0aWwua2V5MnBvcyhrZXkgYXMgY2cuS2V5LCBmaXJzdFJhbmtJczApWzBdKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJlbW92ZShwaWVjZXM6IGNnLlBpZWNlcywga2V5OiBjZy5LZXksIGNhbkNhc3RsZTogYm9vbGVhbiwgZ2VvbTogY2cuR2VvbWV0cnkpOiBjZy5LZXlbXSB7XG4gIGNvbnN0IGZpcnN0UmFua0lzMCA9IGNnLmRpbWVuc2lvbnNbZ2VvbV0uaGVpZ2h0ID09PSAxMDtcbiAgY29uc3QgcGllY2UgPSBwaWVjZXNba2V5XSEsXG4gIHBvcyA9IHV0aWwua2V5MnBvcyhrZXksIGZpcnN0UmFua0lzMCk7XG4gIGxldCBtb2JpbGl0eTogTW9iaWxpdHk7XG4gIC8vIFBpZWNlIHByZW1vdmUgZGVwZW5kcyBvbiBjaGVzcyB2YXJpYW50IG5vdCBvbiBib2FyZCBnZW9tZXRyeSwgYnV0IHdlIHdpbGwgdXNlIGl0IGhlcmVcbiAgLy8gRi5lLiBzaG9naSBpcyBub3QgdGhlIG9ubHkgOXg5IHZhcmlhbnQsIHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KZXNvbl9Nb3JcbiAgc3dpdGNoIChnZW9tKSB7XG4gIGNhc2UgY2cuR2VvbWV0cnkuZGltOXgxMDpcbiAgICBzd2l0Y2ggKHBpZWNlLnJvbGUpIHtcbiAgICBjYXNlICdwYXduJzpcbiAgICAgIG1vYmlsaXR5ID0geHBhd24ocGllY2UuY29sb3IpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2Fubm9uJzpcbiAgICBjYXNlICdyb29rJzpcbiAgICAgIG1vYmlsaXR5ID0gcm9vaztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2tuaWdodCc6XG4gICAgICBtb2JpbGl0eSA9IGtuaWdodDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jpc2hvcCc6XG4gICAgICBtb2JpbGl0eSA9IHhiaXNob3A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdhZHZpc29yJzpcbiAgICAgIG1vYmlsaXR5ID0gYWR2aXNvcjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2tpbmcnOlxuICAgICAgbW9iaWxpdHkgPSB4a2luZztcbiAgICAgIGJyZWFrO1xuICAgIH07XG4gICAgYnJlYWs7XG4gIGNhc2UgY2cuR2VvbWV0cnkuZGltOXg5OlxuICAgIHN3aXRjaCAocGllY2Uucm9sZSkge1xuICAgIGNhc2UgJ3Bhd24nOlxuICAgICAgbW9iaWxpdHkgPSBzcGF3bihwaWVjZS5jb2xvcik7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdrbmlnaHQnOlxuICAgICAgbW9iaWxpdHkgPSBza25pZ2h0KHBpZWNlLmNvbG9yKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jpc2hvcCc6XG4gICAgICBtb2JpbGl0eSA9IGJpc2hvcDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jvb2snOlxuICAgICAgbW9iaWxpdHkgPSByb29rO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAna2luZyc6XG4gICAgICBtb2JpbGl0eSA9IHNraW5nO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2lsdmVyJzpcbiAgICAgIG1vYmlsaXR5ID0gc2lsdmVyKHBpZWNlLmNvbG9yKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BwYXduJzpcbiAgICBjYXNlICdwbGFuY2UnOlxuICAgIGNhc2UgJ3BrbmlnaHQnOlxuICAgIGNhc2UgJ3BzaWx2ZXInOlxuICAgIGNhc2UgJ2dvbGQnOlxuICAgICAgbW9iaWxpdHkgPSBnb2xkKHBpZWNlLmNvbG9yKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2xhbmNlJzpcbiAgICAgIG1vYmlsaXR5ID0gbGFuY2UocGllY2UuY29sb3IpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncHJvb2snOlxuICAgICAgbW9iaWxpdHkgPSBwcm9vaztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BiaXNob3AnOlxuICAgICAgbW9iaWxpdHkgPSBwYmlzaG9wO1xuICAgICAgYnJlYWs7XG4gICAgfTtcbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICBzd2l0Y2ggKHBpZWNlLnJvbGUpIHtcbiAgICBjYXNlICdwYXduJzpcbiAgICAgIG1vYmlsaXR5ID0gcGF3bihwaWVjZS5jb2xvcik7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdrbmlnaHQnOlxuICAgICAgbW9iaWxpdHkgPSBrbmlnaHQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiaXNob3AnOlxuICAgICAgbW9iaWxpdHkgPSBiaXNob3A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyb29rJzpcbiAgICAgIG1vYmlsaXR5ID0gcm9vaztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3F1ZWVuJzpcbiAgICAgIG1vYmlsaXR5ID0gcXVlZW47XG4gICAgICBicmVhaztcbiAgICBjYXNlICdraW5nJzpcbiAgICAgIG1vYmlsaXR5ID0ga2luZyhwaWVjZS5jb2xvciwgcm9va0ZpbGVzT2YocGllY2VzLCBwaWVjZS5jb2xvciwgZmlyc3RSYW5rSXMwKSwgY2FuQ2FzdGxlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2hhd2snOlxuICAgIGNhc2UgJ2FyY2hiaXNob3AnOlxuICAgICAgbW9iaWxpdHkgPSBhcmNoYmlzaG9wO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZWxlcGhhbnQnOlxuICAgIGNhc2UgJ2NhbmNlbGxvcic6XG4gICAgICBtb2JpbGl0eSA9IGNhbmNlbGxvcjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ21ldCc6XG4gICAgY2FzZSAnZmVyeic6XG4gICAgICBtb2JpbGl0eSA9IG1ldDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NpbHZlcic6XG4gICAgICBtb2JpbGl0eSA9IHNpbHZlcihwaWVjZS5jb2xvcik7XG4gICAgICBicmVhaztcbiAgICB9O1xuICAgIGJyZWFrO1xuICB9O1xuICBjb25zdCBhbGxrZXlzID0gdXRpbC5hbGxLZXlzW2dlb21dO1xuXG4gIGNvbnN0IHBvczJrZXlHZW9tID0gKGdlb206IGNnLkdlb21ldHJ5KSA9PiAoIChwb3M6IGNnLlBvcykgPT4gdXRpbC5wb3Mya2V5KHBvcywgZ2VvbSkgKTtcbiAgY29uc3QgcG9zMmtleSA9IHBvczJrZXlHZW9tKGdlb20pO1xuXG4gIGNvbnN0IGtleTJwb3NSYW5rMCA9IChmaXJzdHJhbmswOiBib29sZWFuKSA9PiAoIChrZXk6IGNnLktleSkgPT4gdXRpbC5rZXkycG9zKGtleSwgZmlyc3RyYW5rMCkgKTtcbiAgY29uc3Qga2V5MnBvcyA9IGtleTJwb3NSYW5rMChmaXJzdFJhbmtJczApO1xuXG4gIHJldHVybiBhbGxrZXlzLm1hcChrZXkycG9zKS5maWx0ZXIocG9zMiA9PiB7XG4gICAgcmV0dXJuIChwb3NbMF0gIT09IHBvczJbMF0gfHwgcG9zWzFdICE9PSBwb3MyWzFdKSAmJiBtb2JpbGl0eShwb3NbMF0sIHBvc1sxXSwgcG9zMlswXSwgcG9zMlsxXSk7XG4gIH0pLm1hcChwb3Mya2V5KTtcbn07XG4iLCJpbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vc3RhdGUnXG5pbXBvcnQgeyBrZXkycG9zLCBjcmVhdGVFbCB9IGZyb20gJy4vdXRpbCdcbmltcG9ydCB7IHdoaXRlUG92IH0gZnJvbSAnLi9ib2FyZCdcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsJ1xuaW1wb3J0IHsgQW5pbUN1cnJlbnQsIEFuaW1WZWN0b3JzLCBBbmltVmVjdG9yLCBBbmltRmFkaW5ncyB9IGZyb20gJy4vYW5pbSdcbmltcG9ydCB7IERyYWdDdXJyZW50IH0gZnJvbSAnLi9kcmFnJ1xuaW1wb3J0ICogYXMgY2cgZnJvbSAnLi90eXBlcydcblxuLy8gYCRjb2xvciAkcm9sZWBcbnR5cGUgUGllY2VOYW1lID0gc3RyaW5nO1xuXG5pbnRlcmZhY2UgU2FtZVBpZWNlcyB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfVxuaW50ZXJmYWNlIFNhbWVTcXVhcmVzIHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9XG5pbnRlcmZhY2UgTW92ZWRQaWVjZXMgeyBbcGllY2VOYW1lOiBzdHJpbmddOiBjZy5QaWVjZU5vZGVbXSB9XG5pbnRlcmZhY2UgTW92ZWRTcXVhcmVzIHsgW2NsYXNzTmFtZTogc3RyaW5nXTogY2cuU3F1YXJlTm9kZVtdIH1cbmludGVyZmFjZSBTcXVhcmVDbGFzc2VzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cblxuLy8gcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3ZlbG9jZS9saWNob2JpbGUvYmxvYi9tYXN0ZXIvc3JjL2pzL2NoZXNzZ3JvdW5kL3ZpZXcuanNcbi8vIGluIGNhc2Ugb2YgYnVncywgYmxhbWUgQHZlbG9jZVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVuZGVyKHM6IFN0YXRlKTogdm9pZCB7XG4gIGNvbnN0IGZpcnN0UmFua0lzMCA9IHMuZGltZW5zaW9ucy5oZWlnaHQgPT09IDEwO1xuICBjb25zdCBhc1doaXRlOiBib29sZWFuID0gd2hpdGVQb3YocyksXG4gIHBvc1RvVHJhbnNsYXRlID0gcy5kb20ucmVsYXRpdmUgPyB1dGlsLnBvc1RvVHJhbnNsYXRlUmVsIDogdXRpbC5wb3NUb1RyYW5zbGF0ZUFicyhzLmRvbS5ib3VuZHMoKSwgcy5kaW1lbnNpb25zKSxcbiAgdHJhbnNsYXRlID0gcy5kb20ucmVsYXRpdmUgPyB1dGlsLnRyYW5zbGF0ZVJlbCA6IHV0aWwudHJhbnNsYXRlQWJzLFxuICBib2FyZEVsOiBIVE1MRWxlbWVudCA9IHMuZG9tLmVsZW1lbnRzLmJvYXJkLFxuICBwaWVjZXM6IGNnLlBpZWNlcyA9IHMucGllY2VzLFxuICBjdXJBbmltOiBBbmltQ3VycmVudCB8IHVuZGVmaW5lZCA9IHMuYW5pbWF0aW9uLmN1cnJlbnQsXG4gIGFuaW1zOiBBbmltVmVjdG9ycyA9IGN1ckFuaW0gPyBjdXJBbmltLnBsYW4uYW5pbXMgOiB7fSxcbiAgZmFkaW5nczogQW5pbUZhZGluZ3MgPSBjdXJBbmltID8gY3VyQW5pbS5wbGFuLmZhZGluZ3MgOiB7fSxcbiAgY3VyRHJhZzogRHJhZ0N1cnJlbnQgfCB1bmRlZmluZWQgPSBzLmRyYWdnYWJsZS5jdXJyZW50LFxuICBzcXVhcmVzOiBTcXVhcmVDbGFzc2VzID0gY29tcHV0ZVNxdWFyZUNsYXNzZXMocyksXG4gIHNhbWVQaWVjZXM6IFNhbWVQaWVjZXMgPSB7fSxcbiAgc2FtZVNxdWFyZXM6IFNhbWVTcXVhcmVzID0ge30sXG4gIG1vdmVkUGllY2VzOiBNb3ZlZFBpZWNlcyA9IHt9LFxuICBtb3ZlZFNxdWFyZXM6IE1vdmVkU3F1YXJlcyA9IHt9LFxuICBwaWVjZXNLZXlzOiBjZy5LZXlbXSA9IE9iamVjdC5rZXlzKHBpZWNlcykgYXMgY2cuS2V5W107XG4gIGxldCBrOiBjZy5LZXksXG4gIHA6IGNnLlBpZWNlIHwgdW5kZWZpbmVkLFxuICBlbDogY2cuUGllY2VOb2RlIHwgY2cuU3F1YXJlTm9kZSxcbiAgcGllY2VBdEtleTogY2cuUGllY2UgfCB1bmRlZmluZWQsXG4gIGVsUGllY2VOYW1lOiBQaWVjZU5hbWUsXG4gIGFuaW06IEFuaW1WZWN0b3IgfCB1bmRlZmluZWQsXG4gIGZhZGluZzogY2cuUGllY2UgfCB1bmRlZmluZWQsXG4gIHBNdmRzZXQ6IGNnLlBpZWNlTm9kZVtdLFxuICBwTXZkOiBjZy5QaWVjZU5vZGUgfCB1bmRlZmluZWQsXG4gIHNNdmRzZXQ6IGNnLlNxdWFyZU5vZGVbXSxcbiAgc012ZDogY2cuU3F1YXJlTm9kZSB8IHVuZGVmaW5lZDtcblxuICAvLyB3YWxrIG92ZXIgYWxsIGJvYXJkIGRvbSBlbGVtZW50cywgYXBwbHkgYW5pbWF0aW9ucyBhbmQgZmxhZyBtb3ZlZCBwaWVjZXNcbiAgZWwgPSBib2FyZEVsLmZpcnN0Q2hpbGQgYXMgY2cuUGllY2VOb2RlIHwgY2cuU3F1YXJlTm9kZTtcbiAgd2hpbGUgKGVsKSB7XG4gICAgayA9IGVsLmNnS2V5O1xuICAgIGlmIChpc1BpZWNlTm9kZShlbCkpIHtcbiAgICAgIHBpZWNlQXRLZXkgPSBwaWVjZXNba107XG4gICAgICBhbmltID0gYW5pbXNba107XG4gICAgICBmYWRpbmcgPSBmYWRpbmdzW2tdO1xuICAgICAgZWxQaWVjZU5hbWUgPSBlbC5jZ1BpZWNlO1xuICAgICAgLy8gaWYgcGllY2Ugbm90IGJlaW5nIGRyYWdnZWQgYW55bW9yZSwgcmVtb3ZlIGRyYWdnaW5nIHN0eWxlXG4gICAgICBpZiAoZWwuY2dEcmFnZ2luZyAmJiAoIWN1ckRyYWcgfHwgY3VyRHJhZy5vcmlnICE9PSBrKSkge1xuICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnZ2luZycpO1xuICAgICAgICB0cmFuc2xhdGUoZWwsIHBvc1RvVHJhbnNsYXRlKGtleTJwb3MoaywgZmlyc3RSYW5rSXMwKSwgYXNXaGl0ZSwgcy5kaW1lbnNpb25zKSk7XG4gICAgICAgIGVsLmNnRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIHJlbW92ZSBmYWRpbmcgY2xhc3MgaWYgaXQgc3RpbGwgcmVtYWluc1xuICAgICAgaWYgKCFmYWRpbmcgJiYgZWwuY2dGYWRpbmcpIHtcbiAgICAgICAgZWwuY2dGYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnZmFkaW5nJyk7XG4gICAgICB9XG4gICAgICAvLyB0aGVyZSBpcyBub3cgYSBwaWVjZSBhdCB0aGlzIGRvbSBrZXlcbiAgICAgIGlmIChwaWVjZUF0S2V5KSB7XG4gICAgICAgIC8vIGNvbnRpbnVlIGFuaW1hdGlvbiBpZiBhbHJlYWR5IGFuaW1hdGluZyBhbmQgc2FtZSBwaWVjZVxuICAgICAgICAvLyAob3RoZXJ3aXNlIGl0IGNvdWxkIGFuaW1hdGUgYSBjYXB0dXJlZCBwaWVjZSlcbiAgICAgICAgaWYgKGFuaW0gJiYgZWwuY2dBbmltYXRpbmcgJiYgZWxQaWVjZU5hbWUgPT09IHBpZWNlTmFtZU9mKHBpZWNlQXRLZXkpKSB7XG4gICAgICAgICAgY29uc3QgcG9zID0ga2V5MnBvcyhrLCBmaXJzdFJhbmtJczApO1xuICAgICAgICAgIHBvc1swXSArPSBhbmltWzJdO1xuICAgICAgICAgIHBvc1sxXSArPSBhbmltWzNdO1xuICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2FuaW0nKTtcbiAgICAgICAgICB0cmFuc2xhdGUoZWwsIHBvc1RvVHJhbnNsYXRlKHBvcywgYXNXaGl0ZSwgcy5kaW1lbnNpb25zKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWwuY2dBbmltYXRpbmcpIHtcbiAgICAgICAgICBlbC5jZ0FuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FuaW0nKTtcbiAgICAgICAgICB0cmFuc2xhdGUoZWwsIHBvc1RvVHJhbnNsYXRlKGtleTJwb3MoaywgZmlyc3RSYW5rSXMwKSwgYXNXaGl0ZSwgcy5kaW1lbnNpb25zKSk7XG4gICAgICAgICAgaWYgKHMuYWRkUGllY2VaSW5kZXgpIGVsLnN0eWxlLnpJbmRleCA9IHBvc1pJbmRleChrZXkycG9zKGssIGZpcnN0UmFua0lzMCksIGFzV2hpdGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNhbWUgcGllY2U6IGZsYWcgYXMgc2FtZVxuICAgICAgICBpZiAoZWxQaWVjZU5hbWUgPT09IHBpZWNlTmFtZU9mKHBpZWNlQXRLZXkpICYmICghZmFkaW5nIHx8ICFlbC5jZ0ZhZGluZykpIHtcbiAgICAgICAgICBzYW1lUGllY2VzW2tdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbnQgcGllY2U6IGZsYWcgYXMgbW92ZWQgdW5sZXNzIGl0IGlzIGEgZmFkaW5nIHBpZWNlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChmYWRpbmcgJiYgZWxQaWVjZU5hbWUgPT09IHBpZWNlTmFtZU9mKGZhZGluZykpIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2ZhZGluZycpO1xuICAgICAgICAgICAgZWwuY2dGYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobW92ZWRQaWVjZXNbZWxQaWVjZU5hbWVdKSBtb3ZlZFBpZWNlc1tlbFBpZWNlTmFtZV0ucHVzaChlbCk7XG4gICAgICAgICAgICBlbHNlIG1vdmVkUGllY2VzW2VsUGllY2VOYW1lXSA9IFtlbF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBubyBwaWVjZTogZmxhZyBhcyBtb3ZlZFxuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChtb3ZlZFBpZWNlc1tlbFBpZWNlTmFtZV0pIG1vdmVkUGllY2VzW2VsUGllY2VOYW1lXS5wdXNoKGVsKTtcbiAgICAgICAgZWxzZSBtb3ZlZFBpZWNlc1tlbFBpZWNlTmFtZV0gPSBbZWxdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1NxdWFyZU5vZGUoZWwpKSB7XG4gICAgICBjb25zdCBjbiA9IGVsLmNsYXNzTmFtZTtcbiAgICAgIGlmIChzcXVhcmVzW2tdID09PSBjbikgc2FtZVNxdWFyZXNba10gPSB0cnVlO1xuICAgICAgZWxzZSBpZiAobW92ZWRTcXVhcmVzW2NuXSkgbW92ZWRTcXVhcmVzW2NuXS5wdXNoKGVsKTtcbiAgICAgIGVsc2UgbW92ZWRTcXVhcmVzW2NuXSA9IFtlbF07XG4gICAgfVxuICAgIGVsID0gZWwubmV4dFNpYmxpbmcgYXMgY2cuUGllY2VOb2RlIHwgY2cuU3F1YXJlTm9kZTtcbiAgfVxuXG4gIC8vIHdhbGsgb3ZlciBhbGwgc3F1YXJlcyBpbiBjdXJyZW50IHNldCwgYXBwbHkgZG9tIGNoYW5nZXMgdG8gbW92ZWQgc3F1YXJlc1xuICAvLyBvciBhcHBlbmQgbmV3IHNxdWFyZXNcbiAgZm9yIChjb25zdCBzayBpbiBzcXVhcmVzKSB7XG4gICAgaWYgKCFzYW1lU3F1YXJlc1tza10pIHtcbiAgICAgIHNNdmRzZXQgPSBtb3ZlZFNxdWFyZXNbc3F1YXJlc1tza11dO1xuICAgICAgc012ZCA9IHNNdmRzZXQgJiYgc012ZHNldC5wb3AoKTtcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gcG9zVG9UcmFuc2xhdGUoa2V5MnBvcyhzayBhcyBjZy5LZXksIGZpcnN0UmFua0lzMCksIGFzV2hpdGUsIHMuZGltZW5zaW9ucyk7XG4gICAgICBpZiAoc012ZCkge1xuICAgICAgICBzTXZkLmNnS2V5ID0gc2sgYXMgY2cuS2V5O1xuICAgICAgICB0cmFuc2xhdGUoc012ZCwgdHJhbnNsYXRpb24pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHNxdWFyZU5vZGUgPSBjcmVhdGVFbCgnc3F1YXJlJywgc3F1YXJlc1tza10pIGFzIGNnLlNxdWFyZU5vZGU7XG4gICAgICAgIHNxdWFyZU5vZGUuY2dLZXkgPSBzayBhcyBjZy5LZXk7XG4gICAgICAgIHRyYW5zbGF0ZShzcXVhcmVOb2RlLCB0cmFuc2xhdGlvbik7XG4gICAgICAgIGJvYXJkRWwuaW5zZXJ0QmVmb3JlKHNxdWFyZU5vZGUsIGJvYXJkRWwuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gd2FsayBvdmVyIGFsbCBwaWVjZXMgaW4gY3VycmVudCBzZXQsIGFwcGx5IGRvbSBjaGFuZ2VzIHRvIG1vdmVkIHBpZWNlc1xuICAvLyBvciBhcHBlbmQgbmV3IHBpZWNlc1xuICBmb3IgKGNvbnN0IGogaW4gcGllY2VzS2V5cykge1xuICAgIGsgPSBwaWVjZXNLZXlzW2pdO1xuICAgIHAgPSBwaWVjZXNba10hO1xuICAgIGFuaW0gPSBhbmltc1trXTtcbiAgICBpZiAoIXNhbWVQaWVjZXNba10pIHtcbiAgICAgIHBNdmRzZXQgPSBtb3ZlZFBpZWNlc1twaWVjZU5hbWVPZihwKV07XG4gICAgICBwTXZkID0gcE12ZHNldCAmJiBwTXZkc2V0LnBvcCgpO1xuICAgICAgLy8gYSBzYW1lIHBpZWNlIHdhcyBtb3ZlZFxuICAgICAgaWYgKHBNdmQpIHtcbiAgICAgICAgLy8gYXBwbHkgZG9tIGNoYW5nZXNcbiAgICAgICAgcE12ZC5jZ0tleSA9IGs7XG4gICAgICAgIGlmIChwTXZkLmNnRmFkaW5nKSB7XG4gICAgICAgICAgcE12ZC5jbGFzc0xpc3QucmVtb3ZlKCdmYWRpbmcnKTtcbiAgICAgICAgICBwTXZkLmNnRmFkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zID0ga2V5MnBvcyhrLCBmaXJzdFJhbmtJczApO1xuICAgICAgICBpZiAocy5hZGRQaWVjZVpJbmRleCkgcE12ZC5zdHlsZS56SW5kZXggPSBwb3NaSW5kZXgocG9zLCBhc1doaXRlKTtcbiAgICAgICAgaWYgKGFuaW0pIHtcbiAgICAgICAgICBwTXZkLmNnQW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBwTXZkLmNsYXNzTGlzdC5hZGQoJ2FuaW0nKTtcbiAgICAgICAgICBwb3NbMF0gKz0gYW5pbVsyXTtcbiAgICAgICAgICBwb3NbMV0gKz0gYW5pbVszXTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2xhdGUocE12ZCwgcG9zVG9UcmFuc2xhdGUocG9zLCBhc1doaXRlLCBzLmRpbWVuc2lvbnMpKTtcbiAgICAgIH1cbiAgICAgIC8vIG5vIHBpZWNlIGluIG1vdmVkIG9iajogaW5zZXJ0IHRoZSBuZXcgcGllY2VcbiAgICAgIC8vIGFzc3VtZXMgdGhlIG5ldyBwaWVjZSBpcyBub3QgYmVpbmcgZHJhZ2dlZFxuICAgICAgZWxzZSB7XG5cbiAgICAgICAgY29uc3QgcGllY2VOYW1lID0gcGllY2VOYW1lT2YocCksXG4gICAgICAgIHBpZWNlTm9kZSA9IGNyZWF0ZUVsKCdwaWVjZScsIHBpZWNlTmFtZSkgYXMgY2cuUGllY2VOb2RlLFxuICAgICAgICBwb3MgPSBrZXkycG9zKGssIGZpcnN0UmFua0lzMCk7XG5cbiAgICAgICAgcGllY2VOb2RlLmNnUGllY2UgPSBwaWVjZU5hbWU7XG4gICAgICAgIHBpZWNlTm9kZS5jZ0tleSA9IGs7XG4gICAgICAgIGlmIChhbmltKSB7XG4gICAgICAgICAgcGllY2VOb2RlLmNnQW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBwb3NbMF0gKz0gYW5pbVsyXTtcbiAgICAgICAgICBwb3NbMV0gKz0gYW5pbVszXTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2xhdGUocGllY2VOb2RlLCBwb3NUb1RyYW5zbGF0ZShwb3MsIGFzV2hpdGUsIHMuZGltZW5zaW9ucykpO1xuXG4gICAgICAgIGlmIChzLmFkZFBpZWNlWkluZGV4KSBwaWVjZU5vZGUuc3R5bGUuekluZGV4ID0gcG9zWkluZGV4KHBvcywgYXNXaGl0ZSk7XG5cbiAgICAgICAgYm9hcmRFbC5hcHBlbmRDaGlsZChwaWVjZU5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHJlbW92ZSBhbnkgZWxlbWVudCB0aGF0IHJlbWFpbnMgaW4gdGhlIG1vdmVkIHNldHNcbiAgZm9yIChjb25zdCBpIGluIG1vdmVkUGllY2VzKSByZW1vdmVOb2RlcyhzLCBtb3ZlZFBpZWNlc1tpXSk7XG4gIGZvciAoY29uc3QgaSBpbiBtb3ZlZFNxdWFyZXMpIHJlbW92ZU5vZGVzKHMsIG1vdmVkU3F1YXJlc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGlzUGllY2VOb2RlKGVsOiBjZy5QaWVjZU5vZGUgfCBjZy5TcXVhcmVOb2RlKTogZWwgaXMgY2cuUGllY2VOb2RlIHtcbiAgcmV0dXJuIGVsLnRhZ05hbWUgPT09ICdQSUVDRSc7XG59XG5mdW5jdGlvbiBpc1NxdWFyZU5vZGUoZWw6IGNnLlBpZWNlTm9kZSB8IGNnLlNxdWFyZU5vZGUpOiBlbCBpcyBjZy5TcXVhcmVOb2RlIHtcbiAgcmV0dXJuIGVsLnRhZ05hbWUgPT09ICdTUVVBUkUnO1xufVxuXG5mdW5jdGlvbiByZW1vdmVOb2RlcyhzOiBTdGF0ZSwgbm9kZXM6IEhUTUxFbGVtZW50W10pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBpIGluIG5vZGVzKSBzLmRvbS5lbGVtZW50cy5ib2FyZC5yZW1vdmVDaGlsZChub2Rlc1tpXSk7XG59XG5cbmZ1bmN0aW9uIHBvc1pJbmRleChwb3M6IGNnLlBvcywgYXNXaGl0ZTogYm9vbGVhbik6IHN0cmluZyB7XG4gIGxldCB6ID0gMiArIChwb3NbMV0gLSAxKSAqIDggKyAoOCAtIHBvc1swXSk7XG4gIGlmIChhc1doaXRlKSB6ID0gNjcgLSB6O1xuICByZXR1cm4geiArICcnO1xufVxuXG5mdW5jdGlvbiBwaWVjZU5hbWVPZihwaWVjZTogY2cuUGllY2UpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cGllY2UuY29sb3J9ICR7cGllY2Uucm9sZX1gO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3F1YXJlQ2xhc3NlcyhzOiBTdGF0ZSk6IFNxdWFyZUNsYXNzZXMge1xuICBjb25zdCBzcXVhcmVzOiBTcXVhcmVDbGFzc2VzID0ge307XG4gIGxldCBpOiBhbnksIGs6IGNnLktleTtcbiAgaWYgKHMubGFzdE1vdmUgJiYgcy5oaWdobGlnaHQubGFzdE1vdmUpIGZvciAoaSBpbiBzLmxhc3RNb3ZlKSB7XG4gICAgaWYgKHMubGFzdE1vdmVbaV0gIT0gJ3owJykge1xuICAgICAgYWRkU3F1YXJlKHNxdWFyZXMsIHMubGFzdE1vdmVbaV0sICdsYXN0LW1vdmUnKTtcbiAgICB9XG4gIH1cbiAgaWYgKHMuY2hlY2sgJiYgcy5oaWdobGlnaHQuY2hlY2spIGFkZFNxdWFyZShzcXVhcmVzLCBzLmNoZWNrLCAnY2hlY2snKTtcbiAgaWYgKHMuc2VsZWN0ZWQpIHtcbiAgICBpZiAocy5zZWxlY3RlZCAhPSAnejAnKSB7XG4gICAgICBhZGRTcXVhcmUoc3F1YXJlcywgcy5zZWxlY3RlZCwgJ3NlbGVjdGVkJyk7XG4gICAgfVxuICAgIGlmIChzLm1vdmFibGUuc2hvd0Rlc3RzKSB7XG4gICAgICBjb25zdCBkZXN0cyA9IHMubW92YWJsZS5kZXN0cyAmJiBzLm1vdmFibGUuZGVzdHNbcy5zZWxlY3RlZF07XG4gICAgICBpZiAoZGVzdHMpIGZvciAoaSBpbiBkZXN0cykge1xuICAgICAgICBrID0gZGVzdHNbaV07XG4gICAgICAgIGFkZFNxdWFyZShzcXVhcmVzLCBrLCAnbW92ZS1kZXN0JyArIChzLnBpZWNlc1trXSA/ICcgb2MnIDogJycpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBEZXN0cyA9IHMucHJlbW92YWJsZS5kZXN0cztcbiAgICAgIGlmIChwRGVzdHMpIGZvciAoaSBpbiBwRGVzdHMpIHtcbiAgICAgICAgayA9IHBEZXN0c1tpXTtcbiAgICAgICAgYWRkU3F1YXJlKHNxdWFyZXMsIGssICdwcmVtb3ZlLWRlc3QnICsgKHMucGllY2VzW2tdID8gJyBvYycgOiAnJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBwcmVtb3ZlID0gcy5wcmVtb3ZhYmxlLmN1cnJlbnQ7XG4gIGlmIChwcmVtb3ZlKSBmb3IgKGkgaW4gcHJlbW92ZSkgYWRkU3F1YXJlKHNxdWFyZXMsIHByZW1vdmVbaV0sICdjdXJyZW50LXByZW1vdmUnKTtcbiAgZWxzZSBpZiAocy5wcmVkcm9wcGFibGUuY3VycmVudCkgYWRkU3F1YXJlKHNxdWFyZXMsIHMucHJlZHJvcHBhYmxlLmN1cnJlbnQua2V5LCAnY3VycmVudC1wcmVtb3ZlJyk7XG5cbiAgY29uc3QgbyA9IHMuZXhwbG9kaW5nO1xuICBpZiAobykgZm9yIChpIGluIG8ua2V5cykgYWRkU3F1YXJlKHNxdWFyZXMsIG8ua2V5c1tpXSwgJ2V4cGxvZGluZycgKyBvLnN0YWdlKTtcblxuICByZXR1cm4gc3F1YXJlcztcbn1cblxuZnVuY3Rpb24gYWRkU3F1YXJlKHNxdWFyZXM6IFNxdWFyZUNsYXNzZXMsIGtleTogY2cuS2V5LCBrbGFzczogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChzcXVhcmVzW2tleV0pIHNxdWFyZXNba2V5XSArPSAnICcgKyBrbGFzcztcbiAgZWxzZSBzcXVhcmVzW2tleV0gPSBrbGFzcztcbn1cbiIsImltcG9ydCAqIGFzIGZlbiBmcm9tICcuL2ZlbidcbmltcG9ydCB7IEFuaW1DdXJyZW50IH0gZnJvbSAnLi9hbmltJ1xuaW1wb3J0IHsgRHJhZ0N1cnJlbnQgfSBmcm9tICcuL2RyYWcnXG5pbXBvcnQgeyBEcmF3YWJsZSB9IGZyb20gJy4vZHJhdydcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSAnLi91dGlsJ1xuaW1wb3J0ICogYXMgY2cgZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGUge1xuICBwaWVjZXM6IGNnLlBpZWNlcztcbiAgb3JpZW50YXRpb246IGNnLkNvbG9yOyAvLyBib2FyZCBvcmllbnRhdGlvbi4gd2hpdGUgfCBibGFja1xuICB0dXJuQ29sb3I6IGNnLkNvbG9yOyAvLyB0dXJuIHRvIHBsYXkuIHdoaXRlIHwgYmxhY2tcbiAgY2hlY2s/OiBjZy5LZXk7IC8vIHNxdWFyZSBjdXJyZW50bHkgaW4gY2hlY2sgXCJhMlwiXG4gIGxhc3RNb3ZlPzogY2cuS2V5W107IC8vIHNxdWFyZXMgcGFydCBvZiB0aGUgbGFzdCBtb3ZlIFtcImMzXCI7IFwiYzRcIl1cbiAgc2VsZWN0ZWQ/OiBjZy5LZXk7IC8vIHNxdWFyZSBjdXJyZW50bHkgc2VsZWN0ZWQgXCJhMVwiXG4gIGNvb3JkaW5hdGVzOiBib29sZWFuOyAvLyBpbmNsdWRlIGNvb3JkcyBhdHRyaWJ1dGVzXG4gIGF1dG9DYXN0bGU6IGJvb2xlYW47IC8vIGltbWVkaWF0ZWx5IGNvbXBsZXRlIHRoZSBjYXN0bGUgYnkgbW92aW5nIHRoZSByb29rIGFmdGVyIGtpbmcgbW92ZVxuICB2aWV3T25seTogYm9vbGVhbjsgLy8gZG9uJ3QgYmluZCBldmVudHM6IHRoZSB1c2VyIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBtb3ZlIHBpZWNlcyBhcm91bmRcbiAgZGlzYWJsZUNvbnRleHRNZW51OiBib29sZWFuOyAvLyBiZWNhdXNlIHdobyBuZWVkcyBhIGNvbnRleHQgbWVudSBvbiBhIGNoZXNzYm9hcmRcbiAgcmVzaXphYmxlOiBib29sZWFuOyAvLyBsaXN0ZW5zIHRvIGNoZXNzZ3JvdW5kLnJlc2l6ZSBvbiBkb2N1bWVudC5ib2R5IHRvIGNsZWFyIGJvdW5kcyBjYWNoZVxuICBhZGRQaWVjZVpJbmRleDogYm9vbGVhbjsgLy8gYWRkcyB6LWluZGV4IHZhbHVlcyB0byBwaWVjZXMgKGZvciAzRClcbiAgcGllY2VLZXk6IGJvb2xlYW47IC8vIGFkZCBhIGRhdGEta2V5IGF0dHJpYnV0ZSB0byBwaWVjZSBlbGVtZW50c1xuICBoaWdobGlnaHQ6IHtcbiAgICBsYXN0TW92ZTogYm9vbGVhbjsgLy8gYWRkIGxhc3QtbW92ZSBjbGFzcyB0byBzcXVhcmVzXG4gICAgY2hlY2s6IGJvb2xlYW47IC8vIGFkZCBjaGVjayBjbGFzcyB0byBzcXVhcmVzXG4gIH07XG4gIGFuaW1hdGlvbjoge1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgZHVyYXRpb246IG51bWJlcjtcbiAgICBjdXJyZW50PzogQW5pbUN1cnJlbnQ7XG4gIH07XG4gIG1vdmFibGU6IHtcbiAgICBmcmVlOiBib29sZWFuOyAvLyBhbGwgbW92ZXMgYXJlIHZhbGlkIC0gYm9hcmQgZWRpdG9yXG4gICAgY29sb3I/OiBjZy5Db2xvciB8ICdib3RoJzsgLy8gY29sb3IgdGhhdCBjYW4gbW92ZS4gd2hpdGUgfCBibGFjayB8IGJvdGhcbiAgICBkZXN0cz86IGNnLkRlc3RzOyAvLyB2YWxpZCBtb3Zlcy4ge1wiYTJcIiBbXCJhM1wiIFwiYTRcIl0gXCJiMVwiIFtcImEzXCIgXCJjM1wiXX1cbiAgICBzaG93RGVzdHM6IGJvb2xlYW47IC8vIHdoZXRoZXIgdG8gYWRkIHRoZSBtb3ZlLWRlc3QgY2xhc3Mgb24gc3F1YXJlc1xuICAgIGV2ZW50czoge1xuICAgICAgYWZ0ZXI/OiAob3JpZzogY2cuS2V5LCBkZXN0OiBjZy5LZXksIG1ldGFkYXRhOiBjZy5Nb3ZlTWV0YWRhdGEpID0+IHZvaWQ7IC8vIGNhbGxlZCBhZnRlciB0aGUgbW92ZSBoYXMgYmVlbiBwbGF5ZWRcbiAgICAgIGFmdGVyTmV3UGllY2U/OiAocm9sZTogY2cuUm9sZSwga2V5OiBjZy5LZXksIG1ldGFkYXRhOiBjZy5Nb3ZlTWV0YWRhdGEpID0+IHZvaWQ7IC8vIGNhbGxlZCBhZnRlciBhIG5ldyBwaWVjZSBpcyBkcm9wcGVkIG9uIHRoZSBib2FyZFxuICAgIH07XG4gICAgcm9va0Nhc3RsZTogYm9vbGVhbiAvLyBjYXN0bGUgYnkgbW92aW5nIHRoZSBraW5nIHRvIHRoZSByb29rXG4gIH07XG4gIHByZW1vdmFibGU6IHtcbiAgICBlbmFibGVkOiBib29sZWFuOyAvLyBhbGxvdyBwcmVtb3ZlcyBmb3IgY29sb3IgdGhhdCBjYW4gbm90IG1vdmVcbiAgICBzaG93RGVzdHM6IGJvb2xlYW47IC8vIHdoZXRoZXIgdG8gYWRkIHRoZSBwcmVtb3ZlLWRlc3QgY2xhc3Mgb24gc3F1YXJlc1xuICAgIGNhc3RsZTogYm9vbGVhbjsgLy8gd2hldGhlciB0byBhbGxvdyBraW5nIGNhc3RsZSBwcmVtb3Zlc1xuICAgIGRlc3RzPzogY2cuS2V5W107IC8vIHByZW1vdmUgZGVzdGluYXRpb25zIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICBjdXJyZW50PzogY2cuS2V5UGFpcjsgLy8ga2V5cyBvZiB0aGUgY3VycmVudCBzYXZlZCBwcmVtb3ZlIFtcImUyXCIgXCJlNFwiXVxuICAgIGV2ZW50czoge1xuICAgICAgc2V0PzogKG9yaWc6IGNnLktleSwgZGVzdDogY2cuS2V5LCBtZXRhZGF0YT86IGNnLlNldFByZW1vdmVNZXRhZGF0YSkgPT4gdm9pZDsgLy8gY2FsbGVkIGFmdGVyIHRoZSBwcmVtb3ZlIGhhcyBiZWVuIHNldFxuICAgICAgdW5zZXQ/OiAoKSA9PiB2b2lkOyAgLy8gY2FsbGVkIGFmdGVyIHRoZSBwcmVtb3ZlIGhhcyBiZWVuIHVuc2V0XG4gICAgfVxuICB9O1xuICBwcmVkcm9wcGFibGU6IHtcbiAgICBlbmFibGVkOiBib29sZWFuOyAvLyBhbGxvdyBwcmVkcm9wcyBmb3IgY29sb3IgdGhhdCBjYW4gbm90IG1vdmVcbiAgICBjdXJyZW50PzogeyAvLyBjdXJyZW50IHNhdmVkIHByZWRyb3Age3JvbGU6ICdrbmlnaHQnOyBrZXk6ICdlNCd9XG4gICAgICByb2xlOiBjZy5Sb2xlO1xuICAgICAga2V5OiBjZy5LZXlcbiAgICB9O1xuICAgIGV2ZW50czoge1xuICAgICAgc2V0PzogKHJvbGU6IGNnLlJvbGUsIGtleTogY2cuS2V5KSA9PiB2b2lkOyAvLyBjYWxsZWQgYWZ0ZXIgdGhlIHByZWRyb3AgaGFzIGJlZW4gc2V0XG4gICAgICB1bnNldD86ICgpID0+IHZvaWQ7IC8vIGNhbGxlZCBhZnRlciB0aGUgcHJlZHJvcCBoYXMgYmVlbiB1bnNldFxuICAgIH1cbiAgfTtcbiAgZHJhZ2dhYmxlOiB7XG4gICAgZW5hYmxlZDogYm9vbGVhbjsgLy8gYWxsb3cgbW92ZXMgJiBwcmVtb3ZlcyB0byB1c2UgZHJhZyduIGRyb3BcbiAgICBkaXN0YW5jZTogbnVtYmVyOyAvLyBtaW5pbXVtIGRpc3RhbmNlIHRvIGluaXRpYXRlIGEgZHJhZzsgaW4gcGl4ZWxzXG4gICAgYXV0b0Rpc3RhbmNlOiBib29sZWFuOyAvLyBsZXRzIGNoZXNzZ3JvdW5kIHNldCBkaXN0YW5jZSB0byB6ZXJvIHdoZW4gdXNlciBkcmFncyBwaWVjZXNcbiAgICBjZW50ZXJQaWVjZTogYm9vbGVhbjsgLy8gY2VudGVyIHRoZSBwaWVjZSBvbiBjdXJzb3IgYXQgZHJhZyBzdGFydFxuICAgIHNob3dHaG9zdDogYm9vbGVhbjsgLy8gc2hvdyBnaG9zdCBvZiBwaWVjZSBiZWluZyBkcmFnZ2VkXG4gICAgZGVsZXRlT25Ecm9wT2ZmOiBib29sZWFuOyAvLyBkZWxldGUgYSBwaWVjZSB3aGVuIGl0IGlzIGRyb3BwZWQgb2ZmIHRoZSBib2FyZFxuICAgIGN1cnJlbnQ/OiBEcmFnQ3VycmVudDtcbiAgfTtcbiAgZHJvcG1vZGU6IHtcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgcGllY2U/OiBjZy5QaWVjZTtcbiAgfVxuICBzZWxlY3RhYmxlOiB7XG4gICAgLy8gZGlzYWJsZSB0byBlbmZvcmNlIGRyYWdnaW5nIG92ZXIgY2xpY2stY2xpY2sgbW92ZVxuICAgIGVuYWJsZWQ6IGJvb2xlYW5cbiAgfTtcbiAgc3RhdHM6IHtcbiAgICAvLyB3YXMgbGFzdCBwaWVjZSBkcmFnZ2VkIG9yIGNsaWNrZWQ/XG4gICAgLy8gbmVlZHMgZGVmYXVsdCB0byBmYWxzZSBmb3IgdG91Y2hcbiAgICBkcmFnZ2VkOiBib29sZWFuLFxuICAgIGN0cmxLZXk/OiBib29sZWFuXG4gIH07XG4gIGV2ZW50czoge1xuICAgIGNoYW5nZT86ICgpID0+IHZvaWQ7IC8vIGNhbGxlZCBhZnRlciB0aGUgc2l0dWF0aW9uIGNoYW5nZXMgb24gdGhlIGJvYXJkXG4gICAgLy8gY2FsbGVkIGFmdGVyIGEgcGllY2UgaGFzIGJlZW4gbW92ZWQuXG4gICAgLy8gY2FwdHVyZWRQaWVjZSBpcyB1bmRlZmluZWQgb3IgbGlrZSB7Y29sb3I6ICd3aGl0ZSc7ICdyb2xlJzogJ3F1ZWVuJ31cbiAgICBtb3ZlPzogKG9yaWc6IGNnLktleSwgZGVzdDogY2cuS2V5LCBjYXB0dXJlZFBpZWNlPzogY2cuUGllY2UpID0+IHZvaWQ7XG4gICAgZHJvcE5ld1BpZWNlPzogKHBpZWNlOiBjZy5QaWVjZSwga2V5OiBjZy5LZXkpID0+IHZvaWQ7XG4gICAgc2VsZWN0PzogKGtleTogY2cuS2V5KSA9PiB2b2lkIC8vIGNhbGxlZCB3aGVuIGEgc3F1YXJlIGlzIHNlbGVjdGVkXG4gICAgaW5zZXJ0PzogKGVsZW1lbnRzOiBjZy5FbGVtZW50cykgPT4gdm9pZDsgLy8gd2hlbiB0aGUgYm9hcmQgRE9NIGhhcyBiZWVuIChyZSlpbnNlcnRlZFxuICB9O1xuICBkcmF3YWJsZTogRHJhd2FibGUsXG4gIGV4cGxvZGluZz86IGNnLkV4cGxvZGluZztcbiAgZG9tOiBjZy5Eb20sXG4gIGhvbGQ6IGNnLlRpbWVyLFxuICBkaW1lbnNpb25zOiBjZy5Cb2FyZERpbWVuc2lvbnMsIC8vIG51bWJlciBvZiBsaW5lcyBhbmQgcmFua3Mgb2YgdGhlIGJvYXJkIHt3aWR0aDogMTAsIGhlaWdodDogOH1cbiAgZ2VvbWV0cnk6IGNnLkdlb21ldHJ5LCAvLyBkaW04eDggfCBkaW05eDkgfCBkaW0xMHg4IHwgZGltOXgxMFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdHMoKTogUGFydGlhbDxTdGF0ZT4ge1xuICByZXR1cm4ge1xuICAgIHBpZWNlczogZmVuLnJlYWQoZmVuLmluaXRpYWwsIGNnLkdlb21ldHJ5LmRpbTh4OCksXG4gICAgb3JpZW50YXRpb246ICd3aGl0ZScsXG4gICAgdHVybkNvbG9yOiAnd2hpdGUnLFxuICAgIGNvb3JkaW5hdGVzOiB0cnVlLFxuICAgIGF1dG9DYXN0bGU6IHRydWUsXG4gICAgdmlld09ubHk6IGZhbHNlLFxuICAgIGRpc2FibGVDb250ZXh0TWVudTogZmFsc2UsXG4gICAgcmVzaXphYmxlOiB0cnVlLFxuICAgIGFkZFBpZWNlWkluZGV4OiBmYWxzZSxcbiAgICBwaWVjZUtleTogZmFsc2UsXG4gICAgaGlnaGxpZ2h0OiB7XG4gICAgICBsYXN0TW92ZTogdHJ1ZSxcbiAgICAgIGNoZWNrOiB0cnVlXG4gICAgfSxcbiAgICBhbmltYXRpb246IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBkdXJhdGlvbjogMjAwXG4gICAgfSxcbiAgICBtb3ZhYmxlOiB7XG4gICAgICBmcmVlOiB0cnVlLFxuICAgICAgY29sb3I6ICdib3RoJyxcbiAgICAgIHNob3dEZXN0czogdHJ1ZSxcbiAgICAgIGV2ZW50czoge30sXG4gICAgICByb29rQ2FzdGxlOiB0cnVlXG4gICAgfSxcbiAgICBwcmVtb3ZhYmxlOiB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgc2hvd0Rlc3RzOiB0cnVlLFxuICAgICAgY2FzdGxlOiB0cnVlLFxuICAgICAgZXZlbnRzOiB7fVxuICAgIH0sXG4gICAgcHJlZHJvcHBhYmxlOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGV2ZW50czoge31cbiAgICB9LFxuICAgIGRyYWdnYWJsZToge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGRpc3RhbmNlOiAzLFxuICAgICAgYXV0b0Rpc3RhbmNlOiB0cnVlLFxuICAgICAgY2VudGVyUGllY2U6IHRydWUsXG4gICAgICBzaG93R2hvc3Q6IHRydWUsXG4gICAgICBkZWxldGVPbkRyb3BPZmY6IGZhbHNlXG4gICAgfSxcbiAgICBkcm9wbW9kZToge1xuICAgICAgYWN0aXZlOiBmYWxzZVxuICAgIH0sXG4gICAgc2VsZWN0YWJsZToge1xuICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgIH0sXG4gICAgc3RhdHM6IHtcbiAgICAgIC8vIG9uIHRvdWNoc2NyZWVuLCBkZWZhdWx0IHRvIFwidGFwLXRhcFwiIG1vdmVzXG4gICAgICAvLyBpbnN0ZWFkIG9mIGRyYWdcbiAgICAgIGRyYWdnZWQ6ICEoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KVxuICAgIH0sXG4gICAgZXZlbnRzOiB7fSxcbiAgICBkcmF3YWJsZToge1xuICAgICAgZW5hYmxlZDogdHJ1ZSwgLy8gY2FuIGRyYXdcbiAgICAgIHZpc2libGU6IHRydWUsIC8vIGNhbiB2aWV3XG4gICAgICBlcmFzZU9uQ2xpY2s6IHRydWUsXG4gICAgICBzaGFwZXM6IFtdLFxuICAgICAgYXV0b1NoYXBlczogW10sXG4gICAgICBicnVzaGVzOiB7XG4gICAgICAgIGdyZWVuOiB7IGtleTogJ2cnLCBjb2xvcjogJyMxNTc4MUInLCBvcGFjaXR5OiAxLCBsaW5lV2lkdGg6IDEwIH0sXG4gICAgICAgIHJlZDogeyBrZXk6ICdyJywgY29sb3I6ICcjODgyMDIwJywgb3BhY2l0eTogMSwgbGluZVdpZHRoOiAxMCB9LFxuICAgICAgICBibHVlOiB7IGtleTogJ2InLCBjb2xvcjogJyMwMDMwODgnLCBvcGFjaXR5OiAxLCBsaW5lV2lkdGg6IDEwIH0sXG4gICAgICAgIHllbGxvdzogeyBrZXk6ICd5JywgY29sb3I6ICcjZTY4ZjAwJywgb3BhY2l0eTogMSwgbGluZVdpZHRoOiAxMCB9LFxuICAgICAgICBwYWxlQmx1ZTogeyBrZXk6ICdwYicsIGNvbG9yOiAnIzAwMzA4OCcsIG9wYWNpdHk6IDAuNCwgbGluZVdpZHRoOiAxNSB9LFxuICAgICAgICBwYWxlR3JlZW46IHsga2V5OiAncGcnLCBjb2xvcjogJyMxNTc4MUInLCBvcGFjaXR5OiAwLjQsIGxpbmVXaWR0aDogMTUgfSxcbiAgICAgICAgcGFsZVJlZDogeyBrZXk6ICdwcicsIGNvbG9yOiAnIzg4MjAyMCcsIG9wYWNpdHk6IDAuNCwgbGluZVdpZHRoOiAxNSB9LFxuICAgICAgICBwYWxlR3JleTogeyBrZXk6ICdwZ3InLCBjb2xvcjogJyM0YTRhNGEnLCBvcGFjaXR5OiAwLjM1LCBsaW5lV2lkdGg6IDE1IH1cbiAgICAgIH0sXG4gICAgICBwaWVjZXM6IHtcbiAgICAgICAgYmFzZVVybDogJ2h0dHBzOi8vbGljaGVzczEub3JnL2Fzc2V0cy9waWVjZS9jYnVybmV0dC8nXG4gICAgICB9LFxuICAgICAgcHJldlN2Z0hhc2g6ICcnXG4gICAgfSxcbiAgICBob2xkOiB0aW1lcigpLFxuICAgIGRpbWVuc2lvbnM6IHt3aWR0aDogOCwgaGVpZ2h0OiA4fSxcbiAgICBnZW9tZXRyeTogY2cuR2VvbWV0cnkuZGltOHg4LFxuICB9O1xufVxuIiwiaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL3N0YXRlJ1xuaW1wb3J0IHsga2V5MnBvcyB9IGZyb20gJy4vdXRpbCdcbmltcG9ydCB7IERyYXdhYmxlLCBEcmF3U2hhcGUsIERyYXdTaGFwZVBpZWNlLCBEcmF3QnJ1c2gsIERyYXdCcnVzaGVzLCBEcmF3TW9kaWZpZXJzIH0gZnJvbSAnLi9kcmF3J1xuaW1wb3J0ICogYXMgY2cgZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnTmFtZTogc3RyaW5nKTogU1ZHRWxlbWVudCB7XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgdGFnTmFtZSk7XG59XG5cbmludGVyZmFjZSBTaGFwZSB7XG4gIHNoYXBlOiBEcmF3U2hhcGU7XG4gIGN1cnJlbnQ6IGJvb2xlYW47XG4gIGhhc2g6IEhhc2g7XG59XG5cbmludGVyZmFjZSBDdXN0b21CcnVzaGVzIHtcbiAgW2hhc2g6IHN0cmluZ106IERyYXdCcnVzaFxufVxuXG5pbnRlcmZhY2UgQXJyb3dEZXN0cyB7XG4gIFtrZXk6IHN0cmluZ106IG51bWJlcjsgLy8gaG93IG1hbnkgYXJyb3dzIGxhbmQgb24gYSBzcXVhcmVcbn1cblxudHlwZSBIYXNoID0gc3RyaW5nO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyU3ZnKHN0YXRlOiBTdGF0ZSwgcm9vdDogU1ZHRWxlbWVudCk6IHZvaWQge1xuXG4gIGNvbnN0IGQgPSBzdGF0ZS5kcmF3YWJsZSxcbiAgY3VyRCA9IGQuY3VycmVudCxcbiAgY3VyID0gY3VyRCAmJiBjdXJELm1vdXNlU3EgPyBjdXJEIGFzIERyYXdTaGFwZSA6IHVuZGVmaW5lZCxcbiAgYXJyb3dEZXN0czogQXJyb3dEZXN0cyA9IHt9O1xuXG4gIGQuc2hhcGVzLmNvbmNhdChkLmF1dG9TaGFwZXMpLmNvbmNhdChjdXIgPyBbY3VyXSA6IFtdKS5mb3JFYWNoKHMgPT4ge1xuICAgIGlmIChzLmRlc3QpIGFycm93RGVzdHNbcy5kZXN0XSA9IChhcnJvd0Rlc3RzW3MuZGVzdF0gfHwgMCkgKyAxO1xuICB9KTtcblxuICBjb25zdCBzaGFwZXM6IFNoYXBlW10gPSBkLnNoYXBlcy5jb25jYXQoZC5hdXRvU2hhcGVzKS5tYXAoKHM6IERyYXdTaGFwZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzaGFwZTogcyxcbiAgICAgIGN1cnJlbnQ6IGZhbHNlLFxuICAgICAgaGFzaDogc2hhcGVIYXNoKHMsIGFycm93RGVzdHMsIGZhbHNlKVxuICAgIH07XG4gIH0pO1xuICBpZiAoY3VyKSBzaGFwZXMucHVzaCh7XG4gICAgc2hhcGU6IGN1cixcbiAgICBjdXJyZW50OiB0cnVlLFxuICAgIGhhc2g6IHNoYXBlSGFzaChjdXIsIGFycm93RGVzdHMsIHRydWUpXG4gIH0pO1xuXG4gIGNvbnN0IGZ1bGxIYXNoID0gc2hhcGVzLm1hcChzYyA9PiBzYy5oYXNoKS5qb2luKCcnKTtcbiAgaWYgKGZ1bGxIYXNoID09PSBzdGF0ZS5kcmF3YWJsZS5wcmV2U3ZnSGFzaCkgcmV0dXJuO1xuICBzdGF0ZS5kcmF3YWJsZS5wcmV2U3ZnSGFzaCA9IGZ1bGxIYXNoO1xuXG4gIGNvbnN0IGRlZnNFbCA9IHJvb3QuZmlyc3RDaGlsZCBhcyBTVkdFbGVtZW50O1xuXG4gIHN5bmNEZWZzKGQsIHNoYXBlcywgZGVmc0VsKTtcbiAgc3luY1NoYXBlcyhzdGF0ZSwgc2hhcGVzLCBkLmJydXNoZXMsIGFycm93RGVzdHMsIHJvb3QsIGRlZnNFbCk7XG59XG5cbi8vIGFwcGVuZCBvbmx5LiBEb24ndCB0cnkgdG8gdXBkYXRlL3JlbW92ZS5cbmZ1bmN0aW9uIHN5bmNEZWZzKGQ6IERyYXdhYmxlLCBzaGFwZXM6IFNoYXBlW10sIGRlZnNFbDogU1ZHRWxlbWVudCkge1xuICBjb25zdCBicnVzaGVzOiBDdXN0b21CcnVzaGVzID0ge307XG4gIGxldCBicnVzaDogRHJhd0JydXNoO1xuICBzaGFwZXMuZm9yRWFjaChzID0+IHtcbiAgICBpZiAocy5zaGFwZS5kZXN0KSB7XG4gICAgICBicnVzaCA9IGQuYnJ1c2hlc1tzLnNoYXBlLmJydXNoXTtcbiAgICAgIGlmIChzLnNoYXBlLm1vZGlmaWVycykgYnJ1c2ggPSBtYWtlQ3VzdG9tQnJ1c2goYnJ1c2gsIHMuc2hhcGUubW9kaWZpZXJzKTtcbiAgICAgIGJydXNoZXNbYnJ1c2gua2V5XSA9IGJydXNoO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGtleXNJbkRvbToge1trZXk6IHN0cmluZ106IGJvb2xlYW59ID0ge307XG4gIGxldCBlbDogU1ZHRWxlbWVudCA9IGRlZnNFbC5maXJzdENoaWxkIGFzIFNWR0VsZW1lbnQ7XG4gIHdoaWxlKGVsKSB7XG4gICAga2V5c0luRG9tW2VsLmdldEF0dHJpYnV0ZSgnY2dLZXknKSBhcyBzdHJpbmddID0gdHJ1ZTtcbiAgICBlbCA9IGVsLm5leHRTaWJsaW5nIGFzIFNWR0VsZW1lbnQ7XG4gIH1cbiAgZm9yIChsZXQga2V5IGluIGJydXNoZXMpIHtcbiAgICBpZiAoIWtleXNJbkRvbVtrZXldKSBkZWZzRWwuYXBwZW5kQ2hpbGQocmVuZGVyTWFya2VyKGJydXNoZXNba2V5XSkpO1xuICB9XG59XG5cbi8vIGFwcGVuZCBhbmQgcmVtb3ZlIG9ubHkuIE5vIHVwZGF0ZXMuXG5mdW5jdGlvbiBzeW5jU2hhcGVzKHN0YXRlOiBTdGF0ZSwgc2hhcGVzOiBTaGFwZVtdLCBicnVzaGVzOiBEcmF3QnJ1c2hlcywgYXJyb3dEZXN0czogQXJyb3dEZXN0cywgcm9vdDogU1ZHRWxlbWVudCwgZGVmc0VsOiBTVkdFbGVtZW50KTogdm9pZCB7XG4gIGNvbnN0IGJvdW5kcyA9IHN0YXRlLmRvbS5ib3VuZHMoKSxcbiAgaGFzaGVzSW5Eb206IHtbaGFzaDogc3RyaW5nXTogYm9vbGVhbn0gPSB7fSxcbiAgdG9SZW1vdmU6IFNWR0VsZW1lbnRbXSA9IFtdO1xuICBzaGFwZXMuZm9yRWFjaChzYyA9PiB7IGhhc2hlc0luRG9tW3NjLmhhc2hdID0gZmFsc2U7IH0pO1xuICBsZXQgZWw6IFNWR0VsZW1lbnQgPSBkZWZzRWwubmV4dFNpYmxpbmcgYXMgU1ZHRWxlbWVudCwgZWxIYXNoOiBIYXNoO1xuICB3aGlsZShlbCkge1xuICAgIGVsSGFzaCA9IGVsLmdldEF0dHJpYnV0ZSgnY2dIYXNoJykgYXMgSGFzaDtcbiAgICAvLyBmb3VuZCBhIHNoYXBlIGVsZW1lbnQgdGhhdCdzIGhlcmUgdG8gc3RheVxuICAgIGlmIChoYXNoZXNJbkRvbS5oYXNPd25Qcm9wZXJ0eShlbEhhc2gpKSBoYXNoZXNJbkRvbVtlbEhhc2hdID0gdHJ1ZTtcbiAgICAvLyBvciByZW1vdmUgaXRcbiAgICBlbHNlIHRvUmVtb3ZlLnB1c2goZWwpO1xuICAgIGVsID0gZWwubmV4dFNpYmxpbmcgYXMgU1ZHRWxlbWVudDtcbiAgfVxuICAvLyByZW1vdmUgb2xkIHNoYXBlc1xuICB0b1JlbW92ZS5mb3JFYWNoKGVsID0+IHJvb3QucmVtb3ZlQ2hpbGQoZWwpKTtcbiAgLy8gaW5zZXJ0IHNoYXBlcyB0aGF0IGFyZSBub3QgeWV0IGluIGRvbVxuICBzaGFwZXMuZm9yRWFjaChzYyA9PiB7XG4gICAgaWYgKCFoYXNoZXNJbkRvbVtzYy5oYXNoXSkgcm9vdC5hcHBlbmRDaGlsZChyZW5kZXJTaGFwZShzdGF0ZSwgc2MsIGJydXNoZXMsIGFycm93RGVzdHMsIGJvdW5kcykpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2hhcGVIYXNoKHtvcmlnLCBkZXN0LCBicnVzaCwgcGllY2UsIG1vZGlmaWVyc306IERyYXdTaGFwZSwgYXJyb3dEZXN0czogQXJyb3dEZXN0cywgY3VycmVudDogYm9vbGVhbik6IEhhc2gge1xuICByZXR1cm4gW2N1cnJlbnQsIG9yaWcsIGRlc3QsIGJydXNoLCBkZXN0ICYmIGFycm93RGVzdHNbZGVzdF0gPiAxLFxuICAgIHBpZWNlICYmIHBpZWNlSGFzaChwaWVjZSksXG4gICAgbW9kaWZpZXJzICYmIG1vZGlmaWVyc0hhc2gobW9kaWZpZXJzKVxuICBdLmZpbHRlcih4ID0+IHgpLmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiBwaWVjZUhhc2gocGllY2U6IERyYXdTaGFwZVBpZWNlKTogSGFzaCB7XG4gIHJldHVybiBbcGllY2UuY29sb3IsIHBpZWNlLnJvbGUsIHBpZWNlLnNjYWxlXS5maWx0ZXIoeCA9PiB4KS5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gbW9kaWZpZXJzSGFzaChtOiBEcmF3TW9kaWZpZXJzKTogSGFzaCB7XG4gIHJldHVybiAnJyArIChtLmxpbmVXaWR0aCB8fCAnJyk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclNoYXBlKHN0YXRlOiBTdGF0ZSwge3NoYXBlLCBjdXJyZW50LCBoYXNofTogU2hhcGUsIGJydXNoZXM6IERyYXdCcnVzaGVzLCBhcnJvd0Rlc3RzOiBBcnJvd0Rlc3RzLCBib3VuZHM6IENsaWVudFJlY3QpOiBTVkdFbGVtZW50IHtcbiAgY29uc3QgZmlyc3RSYW5rSXMwID0gc3RhdGUuZGltZW5zaW9ucy5oZWlnaHQgPT09IDEwO1xuICBsZXQgZWw6IFNWR0VsZW1lbnQ7XG4gIGlmIChzaGFwZS5waWVjZSkgZWwgPSByZW5kZXJQaWVjZShcbiAgICBzdGF0ZS5kcmF3YWJsZS5waWVjZXMuYmFzZVVybCxcbiAgICBvcmllbnQoa2V5MnBvcyhzaGFwZS5vcmlnLCBmaXJzdFJhbmtJczApLCBzdGF0ZS5vcmllbnRhdGlvbiwgc3RhdGUuZGltZW5zaW9ucyksXG4gICAgc2hhcGUucGllY2UsXG4gICAgYm91bmRzLFxuICAgIHN0YXRlLmRpbWVuc2lvbnMpO1xuICBlbHNlIHtcbiAgICBjb25zdCBvcmlnID0gb3JpZW50KGtleTJwb3Moc2hhcGUub3JpZywgZmlyc3RSYW5rSXMwKSwgc3RhdGUub3JpZW50YXRpb24sIHN0YXRlLmRpbWVuc2lvbnMpO1xuICAgIGlmIChzaGFwZS5vcmlnICYmIHNoYXBlLmRlc3QpIHtcbiAgICAgIGxldCBicnVzaDogRHJhd0JydXNoID0gYnJ1c2hlc1tzaGFwZS5icnVzaF07XG4gICAgICBpZiAoc2hhcGUubW9kaWZpZXJzKSBicnVzaCA9IG1ha2VDdXN0b21CcnVzaChicnVzaCwgc2hhcGUubW9kaWZpZXJzKTtcbiAgICAgIGVsID0gcmVuZGVyQXJyb3coXG4gICAgICAgIGJydXNoLFxuICAgICAgICBvcmlnLFxuICAgICAgICBvcmllbnQoa2V5MnBvcyhzaGFwZS5kZXN0LCBmaXJzdFJhbmtJczApLCBzdGF0ZS5vcmllbnRhdGlvbiwgc3RhdGUuZGltZW5zaW9ucyksXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIGFycm93RGVzdHNbc2hhcGUuZGVzdF0gPiAxLFxuICAgICAgICBib3VuZHMsXG4gICAgICAgIHN0YXRlLmRpbWVuc2lvbnMpO1xuICAgIH1cbiAgICBlbHNlIGVsID0gcmVuZGVyQ2lyY2xlKGJydXNoZXNbc2hhcGUuYnJ1c2hdLCBvcmlnLCBjdXJyZW50LCBib3VuZHMsIHN0YXRlLmRpbWVuc2lvbnMpO1xuICB9XG4gIGVsLnNldEF0dHJpYnV0ZSgnY2dIYXNoJywgaGFzaCk7XG4gIHJldHVybiBlbDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ2lyY2xlKGJydXNoOiBEcmF3QnJ1c2gsIHBvczogY2cuUG9zLCBjdXJyZW50OiBib29sZWFuLCBib3VuZHM6IENsaWVudFJlY3QsIGJkOiBjZy5Cb2FyZERpbWVuc2lvbnMpOiBTVkdFbGVtZW50IHtcbiAgY29uc3QgbyA9IHBvczJweChwb3MsIGJvdW5kcywgYmQpLFxuICB3aWR0aHMgPSBjaXJjbGVXaWR0aChib3VuZHMsIGJkKSxcbiAgcmFkaXVzID0gKGJvdW5kcy53aWR0aCAvIGJkLndpZHRoKSAvIDI7XG4gIHJldHVybiBzZXRBdHRyaWJ1dGVzKGNyZWF0ZUVsZW1lbnQoJ2NpcmNsZScpLCB7XG4gICAgc3Ryb2tlOiBicnVzaC5jb2xvcixcbiAgICAnc3Ryb2tlLXdpZHRoJzogd2lkdGhzW2N1cnJlbnQgPyAwIDogMV0sXG4gICAgZmlsbDogJ25vbmUnLFxuICAgIG9wYWNpdHk6IG9wYWNpdHkoYnJ1c2gsIGN1cnJlbnQpLFxuICAgIGN4OiBvWzBdLFxuICAgIGN5OiBvWzFdLFxuICAgIHI6IHJhZGl1cyAtIHdpZHRoc1sxXSAvIDJcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckFycm93KGJydXNoOiBEcmF3QnJ1c2gsIG9yaWc6IGNnLlBvcywgZGVzdDogY2cuUG9zLCBjdXJyZW50OiBib29sZWFuLCBzaG9ydGVuOiBib29sZWFuLCBib3VuZHM6IENsaWVudFJlY3QsIGJkOiBjZy5Cb2FyZERpbWVuc2lvbnMpOiBTVkdFbGVtZW50IHtcbiAgY29uc3QgbSA9IGFycm93TWFyZ2luKGJvdW5kcywgc2hvcnRlbiAmJiAhY3VycmVudCwgYmQpLFxuICBhID0gcG9zMnB4KG9yaWcsIGJvdW5kcywgYmQpLFxuICBiID0gcG9zMnB4KGRlc3QsIGJvdW5kcywgYmQpLFxuICBkeCA9IGJbMF0gLSBhWzBdLFxuICBkeSA9IGJbMV0gLSBhWzFdLFxuICBhbmdsZSA9IE1hdGguYXRhbjIoZHksIGR4KSxcbiAgeG8gPSBNYXRoLmNvcyhhbmdsZSkgKiBtLFxuICB5byA9IE1hdGguc2luKGFuZ2xlKSAqIG07XG4gIHJldHVybiBzZXRBdHRyaWJ1dGVzKGNyZWF0ZUVsZW1lbnQoJ2xpbmUnKSwge1xuICAgIHN0cm9rZTogYnJ1c2guY29sb3IsXG4gICAgJ3N0cm9rZS13aWR0aCc6IGxpbmVXaWR0aChicnVzaCwgY3VycmVudCwgYm91bmRzLCBiZCksXG4gICAgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJyxcbiAgICAnbWFya2VyLWVuZCc6ICd1cmwoI2Fycm93aGVhZC0nICsgYnJ1c2gua2V5ICsgJyknLFxuICAgIG9wYWNpdHk6IG9wYWNpdHkoYnJ1c2gsIGN1cnJlbnQpLFxuICAgIHgxOiBhWzBdLFxuICAgIHkxOiBhWzFdLFxuICAgIHgyOiBiWzBdIC0geG8sXG4gICAgeTI6IGJbMV0gLSB5b1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyUGllY2UoYmFzZVVybDogc3RyaW5nLCBwb3M6IGNnLlBvcywgcGllY2U6IERyYXdTaGFwZVBpZWNlLCBib3VuZHM6IENsaWVudFJlY3QsIGJkOiBjZy5Cb2FyZERpbWVuc2lvbnMpOiBTVkdFbGVtZW50IHtcbiAgY29uc3QgbyA9IHBvczJweChwb3MsIGJvdW5kcywgYmQpLFxuICB3aWR0aCA9IGJvdW5kcy53aWR0aCAvIGJkLndpZHRoICogKHBpZWNlLnNjYWxlIHx8IDEpLFxuICBoZWlnaHQgPSBib3VuZHMud2lkdGggLyBiZC5oZWlnaHQgKiAocGllY2Uuc2NhbGUgfHwgMSksXG4gIG5hbWUgPSBwaWVjZS5jb2xvclswXSArIChwaWVjZS5yb2xlID09PSAna25pZ2h0JyA/ICduJyA6IHBpZWNlLnJvbGVbMF0pLnRvVXBwZXJDYXNlKCk7XG4gIHJldHVybiBzZXRBdHRyaWJ1dGVzKGNyZWF0ZUVsZW1lbnQoJ2ltYWdlJyksIHtcbiAgICBjbGFzc05hbWU6IGAke3BpZWNlLnJvbGV9ICR7cGllY2UuY29sb3J9YCxcbiAgICB4OiBvWzBdIC0gd2lkdGggLyAyLFxuICAgIHk6IG9bMV0gLSBoZWlnaHQgLyAyLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICBocmVmOiBiYXNlVXJsICsgbmFtZSArICcuc3ZnJ1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTWFya2VyKGJydXNoOiBEcmF3QnJ1c2gpOiBTVkdFbGVtZW50IHtcbiAgY29uc3QgbWFya2VyID0gc2V0QXR0cmlidXRlcyhjcmVhdGVFbGVtZW50KCdtYXJrZXInKSwge1xuICAgIGlkOiAnYXJyb3doZWFkLScgKyBicnVzaC5rZXksXG4gICAgb3JpZW50OiAnYXV0bycsXG4gICAgbWFya2VyV2lkdGg6IDQsXG4gICAgbWFya2VySGVpZ2h0OiA4LFxuICAgIHJlZlg6IDIuMDUsXG4gICAgcmVmWTogMi4wMVxuICB9KTtcbiAgbWFya2VyLmFwcGVuZENoaWxkKHNldEF0dHJpYnV0ZXMoY3JlYXRlRWxlbWVudCgncGF0aCcpLCB7XG4gICAgZDogJ00wLDAgVjQgTDMsMiBaJyxcbiAgICBmaWxsOiBicnVzaC5jb2xvclxuICB9KSk7XG4gIG1hcmtlci5zZXRBdHRyaWJ1dGUoJ2NnS2V5JywgYnJ1c2gua2V5KTtcbiAgcmV0dXJuIG1hcmtlcjtcbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlcyhlbDogU1ZHRWxlbWVudCwgYXR0cnM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBTVkdFbGVtZW50IHtcbiAgZm9yIChsZXQga2V5IGluIGF0dHJzKSBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyc1trZXldKTtcbiAgcmV0dXJuIGVsO1xufVxuXG5mdW5jdGlvbiBvcmllbnQocG9zOiBjZy5Qb3MsIGNvbG9yOiBjZy5Db2xvciwgYmQ6IGNnLkJvYXJkRGltZW5zaW9ucyk6IGNnLlBvcyB7XG4gIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBvcyA6IFtiZC53aWR0aCArIDEgLSBwb3NbMF0sIGJkLmhlaWdodCArIDEgLSBwb3NbMV1dO1xufVxuXG5mdW5jdGlvbiBtYWtlQ3VzdG9tQnJ1c2goYmFzZTogRHJhd0JydXNoLCBtb2RpZmllcnM6IERyYXdNb2RpZmllcnMpOiBEcmF3QnJ1c2gge1xuICBjb25zdCBicnVzaDogUGFydGlhbDxEcmF3QnJ1c2g+ID0ge1xuICAgIGNvbG9yOiBiYXNlLmNvbG9yLFxuICAgIG9wYWNpdHk6IE1hdGgucm91bmQoYmFzZS5vcGFjaXR5ICogMTApIC8gMTAsXG4gICAgbGluZVdpZHRoOiBNYXRoLnJvdW5kKG1vZGlmaWVycy5saW5lV2lkdGggfHwgYmFzZS5saW5lV2lkdGgpXG4gIH07XG4gIGJydXNoLmtleSA9IFtiYXNlLmtleSwgbW9kaWZpZXJzLmxpbmVXaWR0aF0uZmlsdGVyKHggPT4geCkuam9pbignJyk7XG4gIHJldHVybiBicnVzaCBhcyBEcmF3QnJ1c2g7XG59XG5cbmZ1bmN0aW9uIGNpcmNsZVdpZHRoKGJvdW5kczogQ2xpZW50UmVjdCwgYmQ6IGNnLkJvYXJkRGltZW5zaW9ucyk6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBiYXNlID0gYm91bmRzLndpZHRoIC8gKGJkLndpZHRoICogNjQpO1xuICByZXR1cm4gWzMgKiBiYXNlLCA0ICogYmFzZV07XG59XG5cbmZ1bmN0aW9uIGxpbmVXaWR0aChicnVzaDogRHJhd0JydXNoLCBjdXJyZW50OiBib29sZWFuLCBib3VuZHM6IENsaWVudFJlY3QsIGJkOiBjZy5Cb2FyZERpbWVuc2lvbnMpOiBudW1iZXIge1xuICByZXR1cm4gKGJydXNoLmxpbmVXaWR0aCB8fCAxMCkgKiAoY3VycmVudCA/IDAuODUgOiAxKSAvIChiZC53aWR0aCAqIDY0KSAqIGJvdW5kcy53aWR0aDtcbn1cblxuZnVuY3Rpb24gb3BhY2l0eShicnVzaDogRHJhd0JydXNoLCBjdXJyZW50OiBib29sZWFuKTogbnVtYmVyIHtcbiAgcmV0dXJuIChicnVzaC5vcGFjaXR5IHx8IDEpICogKGN1cnJlbnQgPyAwLjkgOiAxKTtcbn1cblxuZnVuY3Rpb24gYXJyb3dNYXJnaW4oYm91bmRzOiBDbGllbnRSZWN0LCBzaG9ydGVuOiBib29sZWFuLCBiZDogY2cuQm9hcmREaW1lbnNpb25zKTogbnVtYmVyIHtcbiAgcmV0dXJuIChzaG9ydGVuID8gMjAgOiAxMCkgLyAoYmQud2lkdGggKiA2NCkgKiBib3VuZHMud2lkdGg7XG59XG5cbmZ1bmN0aW9uIHBvczJweChwb3M6IGNnLlBvcywgYm91bmRzOiBDbGllbnRSZWN0LCBiZDogY2cuQm9hcmREaW1lbnNpb25zKTogY2cuTnVtYmVyUGFpciB7XG4gIHJldHVybiBbKHBvc1swXSAtIDAuNSkgKiBib3VuZHMud2lkdGggLyBiZC53aWR0aCwgKGJkLmhlaWdodCArIDAuNSAtIHBvc1sxXSkgKiBib3VuZHMuaGVpZ2h0IC8gYmQuaGVpZ2h0XTtcbn1cbiIsImV4cG9ydCB0eXBlIENvbG9yID0gJ3doaXRlJyB8ICdibGFjayc7XG5leHBvcnQgdHlwZSBSb2xlID0gJ2tpbmcnIHwgJ3F1ZWVuJyB8ICdyb29rJyB8ICdiaXNob3AnIHwgJ2tuaWdodCcgfCAncGF3bicgfCAnY2FuY2VsbG9yJyB8ICdhcmNoYmlzaG9wJyB8ICdmZXJ6JyB8ICdtZXQnIHwgJ2dvbGQnIHwgJ3NpbHZlcicgfCAnbGFuY2UnfCAncHBhd24nIHwgJ3BrbmlnaHQnIHwgJ3BiaXNob3AnIHwgJ3Byb29rJyB8ICdwc2lsdmVyJyB8ICdwbGFuY2UnIHwgJ2Fkdmlzb3InIHwgJ2Nhbm5vbicgfCAnaGF3aycgfCAnZWxlcGhhbnQnO1xuZXhwb3J0IHR5cGUgS2V5ID0gICd6MCcgfCAnYTAnIHwgJ2IwJyB8ICdjMCcgfCAnZDAnIHwgJ2UwJyB8ICdmMCcgfCAnZzAnIHwgJ2gwJyB8ICdpMCcgfCAnajAnIHwgJ2ExJyB8ICdiMScgfCAnYzEnIHwgJ2QxJyB8ICdlMScgfCAnZjEnIHwgJ2cxJyB8ICdoMScgfCAnaTEnIHwgJ2oxJyB8ICdhMicgfCAnYjInIHwgJ2MyJyB8ICdkMicgfCAnZTInIHwgJ2YyJyB8ICdnMicgfCAnaDInIHwgJ2kyJyB8ICdqMicgfCAnYTMnIHwgJ2IzJyB8ICdjMycgfCAnZDMnIHwgJ2UzJyB8ICdmMycgfCAnZzMnIHwgJ2gzJyB8ICdpMycgfCAnajMnIHwgJ2E0JyB8ICdiNCcgfCAnYzQnIHwgJ2Q0JyB8ICdlNCcgfCAnZjQnIHwgJ2c0JyB8ICdoNCcgfCAnaTQnIHwgJ2o0JyB8ICdhNScgfCAnYjUnIHwgJ2M1JyB8ICdkNScgfCAnZTUnIHwgJ2Y1JyB8ICdnNScgfCAnaDUnIHwgJ2k1JyB8ICdqNScgfCAnYTYnIHwgJ2I2JyB8ICdjNicgfCAnZDYnIHwgJ2U2JyB8ICdmNicgfCAnZzYnIHwgJ2g2JyB8ICdpNicgfCAnajYnIHwgJ2E3JyB8ICdiNycgfCAnYzcnIHwgJ2Q3JyB8ICdlNycgfCAnZjcnIHwgJ2c3JyB8ICdoNycgfCAnaTcnIHwgJ2o3JyB8ICdhOCcgfCAnYjgnIHwgJ2M4JyB8ICdkOCcgfCAnZTgnIHwgJ2Y4JyB8ICdnOCcgfCAnaDgnIHwgJ2k4JyB8ICdqOCcgfCAnYTknIHwgJ2I5JyB8ICdjOScgfCAnZDknIHwgJ2U5JyB8ICdmOScgfCAnZzknIHwgJ2g5JyB8ICdpOScgfCAnajknO1xuZXhwb3J0IHR5cGUgRmlsZSA9ICdhJyB8ICdiJyB8ICdjJyB8ICdkJyB8ICdlJyB8ICdmJyB8ICdnJyB8ICdoJyB8ICdpJyB8ICdqJztcbmV4cG9ydCB0eXBlIFJhbmsgPSAnMCcgfCAnMScgfCAnMicgfCAnMycgfCAnNCcgfCAnNScgfCAnNicgfCAnNycgfCAnOCcgfCAnOScgfCAnMTAnO1xuZXhwb3J0IHR5cGUgRkVOID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgUG9zID0gW251bWJlciwgbnVtYmVyXTtcbmV4cG9ydCBpbnRlcmZhY2UgUGllY2Uge1xuICByb2xlOiBSb2xlO1xuICBjb2xvcjogQ29sb3I7XG4gIHByb21vdGVkPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcCB7XG4gIHJvbGU6IFJvbGU7XG4gIGtleTogS2V5O1xufVxuZXhwb3J0IGludGVyZmFjZSBQaWVjZXMge1xuICBba2V5OiBzdHJpbmddOiBQaWVjZSB8IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGllY2VzRGlmZiB7XG4gIFtrZXk6IHN0cmluZ106IFBpZWNlIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgdHlwZSBLZXlQYWlyID0gW0tleSwgS2V5XTtcblxuZXhwb3J0IHR5cGUgTnVtYmVyUGFpciA9IFtudW1iZXIsIG51bWJlcl07XG5cbmV4cG9ydCB0eXBlIE51bWJlclF1YWQgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuZXhwb3J0IGludGVyZmFjZSBEZXN0cyB7XG4gIFtrZXk6IHN0cmluZ106IEtleVtdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudHMge1xuICBib2FyZDogSFRNTEVsZW1lbnQ7XG4gIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gIGdob3N0PzogSFRNTEVsZW1lbnQ7XG4gIHN2Zz86IFNWR0VsZW1lbnQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIERvbSB7XG4gIGVsZW1lbnRzOiBFbGVtZW50cyxcbiAgYm91bmRzOiBNZW1vPENsaWVudFJlY3Q+O1xuICByZWRyYXc6ICgpID0+IHZvaWQ7XG4gIHJlZHJhd05vdzogKHNraXBTdmc/OiBib29sZWFuKSA9PiB2b2lkO1xuICB1bmJpbmQ/OiBVbmJpbmQ7XG4gIGRlc3Ryb3llZD86IGJvb2xlYW47XG4gIHJlbGF0aXZlPzogYm9vbGVhbjsgLy8gZG9uJ3QgY29tcHV0ZSBib3VuZHMsIHVzZSByZWxhdGl2ZSAlIHRvIHBsYWNlIHBpZWNlc1xufVxuZXhwb3J0IGludGVyZmFjZSBFeHBsb2Rpbmcge1xuICBzdGFnZTogbnVtYmVyO1xuICBrZXlzOiBLZXlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3ZlTWV0YWRhdGEge1xuICBwcmVtb3ZlOiBib29sZWFuO1xuICBjdHJsS2V5PzogYm9vbGVhbjtcbiAgaG9sZFRpbWU/OiBudW1iZXI7XG4gIGNhcHR1cmVkPzogUGllY2U7XG4gIHByZWRyb3A/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBTZXRQcmVtb3ZlTWV0YWRhdGEge1xuICBjdHJsS2V5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgV2luZG93RXZlbnQgPSAnb25zY3JvbGwnIHwgJ29ucmVzaXplJztcblxuZXhwb3J0IHR5cGUgTW91Y2hFdmVudCA9IE1vdXNlRXZlbnQgJiBUb3VjaEV2ZW50O1xuXG5leHBvcnQgaW50ZXJmYWNlIEtleWVkTm9kZSBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgY2dLZXk6IEtleTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGllY2VOb2RlIGV4dGVuZHMgS2V5ZWROb2RlIHtcbiAgY2dQaWVjZTogc3RyaW5nO1xuICBjZ0FuaW1hdGluZz86IGJvb2xlYW47XG4gIGNnRmFkaW5nPzogYm9vbGVhbjtcbiAgY2dEcmFnZ2luZz86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNxdWFyZU5vZGUgZXh0ZW5kcyBLZXllZE5vZGUgeyB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtbzxBPiB7ICgpOiBBOyBjbGVhcjogKCkgPT4gdm9pZDsgfVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVyIHtcbiAgc3RhcnQ6ICgpID0+IHZvaWQ7XG4gIGNhbmNlbDogKCkgPT4gdm9pZDtcbiAgc3RvcDogKCkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBSZWRyYXcgPSAoKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgVW5iaW5kID0gKCkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIE1pbGxpc2Vjb25kcyA9IG51bWJlcjtcbmV4cG9ydCB0eXBlIEtIeiA9IG51bWJlcjtcblxuZXhwb3J0IGNvbnN0IGZpbGVzOiBGaWxlW10gPSBbJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onXTtcbmV4cG9ydCBjb25zdCByYW5rczogUmFua1tdID0gWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJzEwJ107XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9hcmREaW1lbnNpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIEdlb21ldHJ5IHtkaW04eDgsIGRpbTl4OSwgZGltMTB4OCwgZGltOXgxMCwgZGltMTB4MTAsIGRpbTV4NX07XG5cbmV4cG9ydCBjb25zdCBkaW1lbnNpb25zOiBCb2FyZERpbWVuc2lvbnNbXSA9IFt7d2lkdGg6IDgsIGhlaWdodDogOH0sIHt3aWR0aDogOSwgaGVpZ2h0OiA5fSwge3dpZHRoOiAxMCwgaGVpZ2h0OiA4fSwge3dpZHRoOiA5LCBoZWlnaHQ6IDEwfSwge3dpZHRoOiAxMCwgaGVpZ2h0OiAxMH0sIHt3aWR0aDogNSwgaGVpZ2h0OiA1fV07XG4iLCJpbXBvcnQgKiBhcyBjZyBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGNvbG9yczogY2cuQ29sb3JbXSA9IFsnd2hpdGUnLCAnYmxhY2snXTtcblxuZXhwb3J0IGNvbnN0IE5SYW5rczogbnVtYmVyW10gPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdO1xuZXhwb3J0IGNvbnN0IGludk5SYW5rczogbnVtYmVyW10gPSBbMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDFdO1xuXG5jb25zdCBmaWxlczUgPSBjZy5maWxlcy5zbGljZSgwLCA1KTtcbmNvbnN0IGZpbGVzOCA9IGNnLmZpbGVzLnNsaWNlKDAsIDgpO1xuY29uc3QgZmlsZXM5ID0gY2cuZmlsZXMuc2xpY2UoMCwgOSk7XG5jb25zdCBmaWxlczEwID0gY2cuZmlsZXMuc2xpY2UoMCwgMTApO1xuXG5jb25zdCByYW5rczUgPSBjZy5yYW5rcy5zbGljZSgxLCA2KTtcbmNvbnN0IHJhbmtzOCA9IGNnLnJhbmtzLnNsaWNlKDEsIDkpO1xuY29uc3QgcmFua3M5ID0gY2cucmFua3Muc2xpY2UoMSwgMTApO1xuLy8gd2UgaGF2ZSB0byBjb3VudCByYW5rcyBzdGFydGluZyBmcm9tIDAgYXMgaW4gVUNDSVxuY29uc3QgcmFua3MxMCA9IGNnLnJhbmtzLnNsaWNlKDAsIDEwKTtcblxuY29uc3QgYWxsS2V5czV4NTogY2cuS2V5W10gPSBBcnJheS5wcm90b3R5cGUuY29uY2F0KC4uLmZpbGVzNS5tYXAoYyA9PiByYW5rczUubWFwKHIgPT4gYytyKSkpO1xuY29uc3QgYWxsS2V5czh4ODogY2cuS2V5W10gPSBBcnJheS5wcm90b3R5cGUuY29uY2F0KC4uLmZpbGVzOC5tYXAoYyA9PiByYW5rczgubWFwKHIgPT4gYytyKSkpO1xuY29uc3QgYWxsS2V5czl4OTogY2cuS2V5W10gPSBBcnJheS5wcm90b3R5cGUuY29uY2F0KC4uLmZpbGVzOS5tYXAoYyA9PiByYW5rczkubWFwKHIgPT4gYytyKSkpO1xuY29uc3QgYWxsS2V5czEweDg6IGNnLktleVtdID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5maWxlczEwLm1hcChjID0+IHJhbmtzOC5tYXAociA9PiBjK3IpKSk7XG5jb25zdCBhbGxLZXlzOXgxMDogY2cuS2V5W10gPSBBcnJheS5wcm90b3R5cGUuY29uY2F0KC4uLmZpbGVzOS5tYXAoYyA9PiByYW5rczEwLm1hcChyID0+IGMrcikpKTtcbmNvbnN0IGFsbEtleXMxMHgxMDogY2cuS2V5W10gPSBBcnJheS5wcm90b3R5cGUuY29uY2F0KC4uLmZpbGVzMTAubWFwKGMgPT4gcmFua3MxMC5tYXAociA9PiBjK3IpKSk7XG5cbmV4cG9ydCBjb25zdCBhbGxLZXlzID0gW2FsbEtleXM4eDgsIGFsbEtleXM5eDksIGFsbEtleXMxMHg4LCBhbGxLZXlzOXgxMCwgYWxsS2V5czEweDEwLCBhbGxLZXlzNXg1XTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBvczJrZXkocG9zOiBjZy5Qb3MsIGdlb206IGNnLkdlb21ldHJ5KSB7XG4gICAgY29uc3QgYmQgPSBjZy5kaW1lbnNpb25zW2dlb21dO1xuICAgIHJldHVybiBhbGxLZXlzW2dlb21dW2JkLmhlaWdodCAqIHBvc1swXSArIHBvc1sxXSAtIGJkLmhlaWdodCAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga2V5MnBvcyhrOiBjZy5LZXksIGZpcnN0UmFua0lzMDogYm9vbGVhbikge1xuICBjb25zdCBzaGlmdCA9IGZpcnN0UmFua0lzMCA/IDEgOiAwO1xuICByZXR1cm4gW2suY2hhckNvZGVBdCgwKSAtIDk2LCBrLmNoYXJDb2RlQXQoMSkgLSA0OCArIHNoaWZ0XSBhcyBjZy5Qb3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZW1vPEE+KGY6ICgpID0+IEEpOiBjZy5NZW1vPEE+IHtcbiAgbGV0IHY6IEEgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHJldDogYW55ID0gKCkgPT4ge1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHYgPSBmKCk7XG4gICAgcmV0dXJuIHY7XG4gIH07XG4gIHJldC5jbGVhciA9ICgpID0+IHsgdiA9IHVuZGVmaW5lZCB9O1xuICByZXR1cm4gcmV0O1xufVxuXG5leHBvcnQgY29uc3QgdGltZXI6ICgpID0+IGNnLlRpbWVyID0gKCkgPT4ge1xuICBsZXQgc3RhcnRBdDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIHN0YXJ0KCkgeyBzdGFydEF0ID0gcGVyZm9ybWFuY2Uubm93KCkgfSxcbiAgICBjYW5jZWwoKSB7IHN0YXJ0QXQgPSB1bmRlZmluZWQgfSxcbiAgICBzdG9wKCkge1xuICAgICAgaWYgKCFzdGFydEF0KSByZXR1cm4gMDtcbiAgICAgIGNvbnN0IHRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0QXQ7XG4gICAgICBzdGFydEF0ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgY29uc3Qgb3Bwb3NpdGUgPSAoYzogY2cuQ29sb3IpID0+IGMgPT09ICd3aGl0ZScgPyAnYmxhY2snIDogJ3doaXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zWDxYPih4czogWFtdIHwgdW5kZWZpbmVkLCB4OiBYKTogYm9vbGVhbiB7XG4gIHJldHVybiB4cyAhPT0gdW5kZWZpbmVkICYmIHhzLmluZGV4T2YoeCkgIT09IC0xO1xufVxuXG5leHBvcnQgY29uc3QgZGlzdGFuY2VTcTogKHBvczE6IGNnLlBvcywgcG9zMjogY2cuUG9zKSA9PiBudW1iZXIgPSAocG9zMSwgcG9zMikgPT4ge1xuICByZXR1cm4gTWF0aC5wb3cocG9zMVswXSAtIHBvczJbMF0sIDIpICsgTWF0aC5wb3cocG9zMVsxXSAtIHBvczJbMV0sIDIpO1xufVxuXG5leHBvcnQgY29uc3Qgc2FtZVBpZWNlOiAocDE6IGNnLlBpZWNlLCBwMjogY2cuUGllY2UpID0+IGJvb2xlYW4gPSAocDEsIHAyKSA9PlxuICBwMS5yb2xlID09PSBwMi5yb2xlICYmIHAxLmNvbG9yID09PSBwMi5jb2xvcjtcblxuY29uc3QgcG9zVG9UcmFuc2xhdGVCYXNlOiAocG9zOiBjZy5Qb3MsIGFzV2hpdGU6IGJvb2xlYW4sIHhGYWN0b3I6IG51bWJlciwgeUZhY3RvcjogbnVtYmVyLCBidDogY2cuQm9hcmREaW1lbnNpb25zKSA9PiBjZy5OdW1iZXJQYWlyID1cbihwb3MsIGFzV2hpdGUsIHhGYWN0b3IsIHlGYWN0b3IsIGJ0KSA9PiBbXG4gIChhc1doaXRlID8gcG9zWzBdIC0gMSA6IGJ0LndpZHRoIC0gcG9zWzBdKSAqIHhGYWN0b3IsXG4gIChhc1doaXRlID8gYnQuaGVpZ2h0IC0gcG9zWzFdIDogcG9zWzFdIC0gMSkgKiB5RmFjdG9yXG5dO1xuXG5leHBvcnQgY29uc3QgcG9zVG9UcmFuc2xhdGVBYnMgPSAoYm91bmRzOiBDbGllbnRSZWN0LCBidDogY2cuQm9hcmREaW1lbnNpb25zKSA9PiB7XG4gIGNvbnN0IHhGYWN0b3IgPSBib3VuZHMud2lkdGggLyBidC53aWR0aCxcbiAgeUZhY3RvciA9IGJvdW5kcy5oZWlnaHQgLyBidC5oZWlnaHQ7XG4gIHJldHVybiAocG9zOiBjZy5Qb3MsIGFzV2hpdGU6IGJvb2xlYW4pID0+IHBvc1RvVHJhbnNsYXRlQmFzZShwb3MsIGFzV2hpdGUsIHhGYWN0b3IsIHlGYWN0b3IsIGJ0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwb3NUb1RyYW5zbGF0ZVJlbDogKHBvczogY2cuUG9zLCBhc1doaXRlOiBib29sZWFuLCBidDogY2cuQm9hcmREaW1lbnNpb25zKSA9PiBjZy5OdW1iZXJQYWlyID1cbiAgKHBvcywgYXNXaGl0ZSwgYnQpID0+IHBvc1RvVHJhbnNsYXRlQmFzZShwb3MsIGFzV2hpdGUsIDEwMCAvIGJ0LndpZHRoLCAxMDAgLyBidC5oZWlnaHQsIGJ0KTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zbGF0ZUFicyA9IChlbDogSFRNTEVsZW1lbnQsIHBvczogY2cuUG9zKSA9PiB7XG4gIGVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtwb3NbMF19cHgsJHtwb3NbMV19cHgpYDtcbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zbGF0ZVJlbCA9IChlbDogSFRNTEVsZW1lbnQsIHBlcmNlbnRzOiBjZy5OdW1iZXJQYWlyKSA9PiB7XG4gIGVsLnN0eWxlLmxlZnQgPSBwZXJjZW50c1swXSArICclJztcbiAgZWwuc3R5bGUudG9wID0gcGVyY2VudHNbMV0gKyAnJSc7XG59XG5cbmV4cG9ydCBjb25zdCBzZXRWaXNpYmxlID0gKGVsOiBIVE1MRWxlbWVudCwgdjogYm9vbGVhbikgPT4ge1xuICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gdiA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nO1xufVxuXG4vLyB0b3VjaGVuZCBoYXMgbm8gcG9zaXRpb24hXG5leHBvcnQgY29uc3QgZXZlbnRQb3NpdGlvbjogKGU6IGNnLk1vdWNoRXZlbnQpID0+IGNnLk51bWJlclBhaXIgfCB1bmRlZmluZWQgPSBlID0+IHtcbiAgaWYgKGUuY2xpZW50WCB8fCBlLmNsaWVudFggPT09IDApIHJldHVybiBbZS5jbGllbnRYLCBlLmNsaWVudFldO1xuICBpZiAoZS50b3VjaGVzICYmIGUudGFyZ2V0VG91Y2hlc1swXSkgcmV0dXJuIFtlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WCwgZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFldO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY29uc3QgaXNSaWdodEJ1dHRvbiA9IChlOiBNb3VzZUV2ZW50KSA9PiBlLmJ1dHRvbnMgPT09IDIgfHwgZS5idXR0b24gPT09IDI7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVFbCA9ICh0YWdOYW1lOiBzdHJpbmcsIGNsYXNzTmFtZT86IHN0cmluZykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmIChjbGFzc05hbWUpIGVsLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgcmV0dXJuIGVsO1xufVxuIiwiaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL3N0YXRlJ1xuaW1wb3J0IHsgY29sb3JzLCBzZXRWaXNpYmxlLCBjcmVhdGVFbCB9IGZyb20gJy4vdXRpbCdcbmltcG9ydCB7IGZpbGVzLCByYW5rcyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50IGFzIGNyZWF0ZVNWRyB9IGZyb20gJy4vc3ZnJ1xuaW1wb3J0IHsgRWxlbWVudHMsIEdlb21ldHJ5IH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd3JhcChlbGVtZW50OiBIVE1MRWxlbWVudCwgczogU3RhdGUsIHJlbGF0aXZlOiBib29sZWFuKTogRWxlbWVudHMge1xuXG4gIC8vIC5jZy13cmFwIChlbGVtZW50IHBhc3NlZCB0byBDaGVzc2dyb3VuZClcbiAgLy8gICBjZy1oZWxwZXIgKDEyLjUlKVxuICAvLyAgICAgY2ctY29udGFpbmVyICg4MDAlKVxuICAvLyAgICAgICBjZy1ib2FyZFxuICAvLyAgICAgICBzdmdcbiAgLy8gICAgICAgY29vcmRzLnJhbmtzXG4gIC8vICAgICAgIGNvb3Jkcy5maWxlc1xuICAvLyAgICAgICBwaWVjZS5naG9zdFxuXG4gIGVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG5cbiAgLy8gZW5zdXJlIHRoZSBjZy13cmFwIGNsYXNzIGlzIHNldFxuICAvLyBzbyBib3VuZHMgY2FsY3VsYXRpb24gY2FuIHVzZSB0aGUgQ1NTIHdpZHRoL2hlaWdodCB2YWx1ZXNcbiAgLy8gYWRkIHRoYXQgY2xhc3MgeW91cnNlbGYgdG8gdGhlIGVsZW1lbnQgYmVmb3JlIGNhbGxpbmcgY2hlc3Nncm91bmRcbiAgLy8gZm9yIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50ISAoYXZvaWRzIHJlY29tcHV0aW5nIHN0eWxlKVxuICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2NnLXdyYXAnKTtcblxuICBjb2xvcnMuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnb3JpZW50YXRpb24tJyArIGMsIHMub3JpZW50YXRpb24gPT09IGMpKTtcbiAgZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCdtYW5pcHVsYWJsZScsICFzLnZpZXdPbmx5KTtcblxuICBjb25zdCBoZWxwZXIgPSBjcmVhdGVFbCgnY2ctaGVscGVyJyk7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQoaGVscGVyKTtcbiAgY29uc3QgY29udGFpbmVyID0gY3JlYXRlRWwoJ2NnLWNvbnRhaW5lcicpO1xuICBoZWxwZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblxuICBjb25zdCBleHRlbnNpb24gPSBjcmVhdGVFbCgnZXh0ZW5zaW9uJyk7XG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChleHRlbnNpb24pO1xuICBjb25zdCBib2FyZCA9IGNyZWF0ZUVsKCdjZy1ib2FyZCcpO1xuICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYm9hcmQpO1xuXG4gIGxldCBzdmc6IFNWR0VsZW1lbnQgfCB1bmRlZmluZWQ7XG4gIGlmIChzLmRyYXdhYmxlLnZpc2libGUgJiYgIXJlbGF0aXZlKSB7XG4gICAgc3ZnID0gY3JlYXRlU1ZHKCdzdmcnKTtcbiAgICBzdmcuYXBwZW5kQ2hpbGQoY3JlYXRlU1ZHKCdkZWZzJykpO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzdmcpO1xuICB9XG5cbiAgaWYgKHMuY29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCBvcmllbnRDbGFzcyA9IHMub3JpZW50YXRpb24gPT09ICdibGFjaycgPyAnIGJsYWNrJyA6ICcnO1xuICAgIGNvbnN0IGZpcnN0UmFua0lzMCA9IHMuZ2VvbWV0cnkgPT09IEdlb21ldHJ5LmRpbTl4MTA7XG4gICAgY29uc3Qgc2hpZnQgPSBmaXJzdFJhbmtJczAgPyAwIDogMTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQocmVuZGVyQ29vcmRzKHJhbmtzLnNsaWNlKHNoaWZ0LCBzLmRpbWVuc2lvbnMuaGVpZ2h0ICsgc2hpZnQpLCAncmFua3MnICsgb3JpZW50Q2xhc3MpKTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQocmVuZGVyQ29vcmRzKGZpbGVzLnNsaWNlKDAsIHMuZGltZW5zaW9ucy53aWR0aCksICdmaWxlcycgKyBvcmllbnRDbGFzcykpO1xuICB9XG5cbiAgbGV0IGdob3N0OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgaWYgKHMuZHJhZ2dhYmxlLnNob3dHaG9zdCAmJiAhcmVsYXRpdmUpIHtcbiAgICBnaG9zdCA9IGNyZWF0ZUVsKCdwaWVjZScsICdnaG9zdCcpO1xuICAgIHNldFZpc2libGUoZ2hvc3QsIGZhbHNlKTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZ2hvc3QpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBib2FyZCxcbiAgICBjb250YWluZXIsXG4gICAgZ2hvc3QsXG4gICAgc3ZnXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvb3JkcyhlbGVtczogYW55W10sIGNsYXNzTmFtZTogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xuICBjb25zdCBlbCA9IGNyZWF0ZUVsKCdjb29yZHMnLCBjbGFzc05hbWUpO1xuICBsZXQgZjogSFRNTEVsZW1lbnQ7XG4gIGZvciAobGV0IGkgaW4gZWxlbXMpIHtcbiAgICBmID0gY3JlYXRlRWwoJ2Nvb3JkJyk7XG4gICAgZi50ZXh0Q29udGVudCA9IGVsZW1zW2ldO1xuICAgIGVsLmFwcGVuZENoaWxkKGYpO1xuICB9XG4gIHJldHVybiBlbDtcbn1cbiIsIi8qXG4gSGlnaGNoYXJ0cyBKUyB2Ny4yLjEgKDIwMTktMTAtMzEpXG5cbiAoYykgMjAwOS0yMDE4IFRvcnN0ZWluIEhvbnNpXG5cbiBMaWNlbnNlOiB3d3cuaGlnaGNoYXJ0cy5jb20vbGljZW5zZVxuKi9cbihmdW5jdGlvbihQLE0pe1wib2JqZWN0XCI9PT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz8oTVtcImRlZmF1bHRcIl09TSxtb2R1bGUuZXhwb3J0cz1QLmRvY3VtZW50P00oUCk6TSk6XCJmdW5jdGlvblwiPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoXCJoaWdoY2hhcnRzL2hpZ2hjaGFydHNcIixmdW5jdGlvbigpe3JldHVybiBNKFApfSk6KFAuSGlnaGNoYXJ0cyYmUC5IaWdoY2hhcnRzLmVycm9yKDE2LCEwKSxQLkhpZ2hjaGFydHM9TShQKSl9KShcInVuZGVmaW5lZFwiIT09dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihQKXtmdW5jdGlvbiBNKGMsZixGLEcpe2MuaGFzT3duUHJvcGVydHkoZil8fChjW2ZdPUcuYXBwbHkobnVsbCxGKSl9dmFyIEk9e307TShJLFwicGFydHMvR2xvYmFscy5qc1wiLFtdLGZ1bmN0aW9uKCl7dmFyIGM9XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBQP1A6XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LGY9Yy5kb2N1bWVudCxcbkY9Yy5uYXZpZ2F0b3ImJmMubmF2aWdhdG9yLnVzZXJBZ2VudHx8XCJcIixHPWYmJmYuY3JlYXRlRWxlbWVudE5TJiYhIWYuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInN2Z1wiKS5jcmVhdGVTVkdSZWN0LHo9LyhlZGdlfG1zaWV8dHJpZGVudCkvaS50ZXN0KEYpJiYhYy5vcGVyYSxCPS0xIT09Ri5pbmRleE9mKFwiRmlyZWZveFwiKSx0PS0xIT09Ri5pbmRleE9mKFwiQ2hyb21lXCIpLHY9QiYmND5wYXJzZUludChGLnNwbGl0KFwiRmlyZWZveC9cIilbMV0sMTApO3JldHVybntwcm9kdWN0OlwiSGlnaGNoYXJ0c1wiLHZlcnNpb246XCI3LjIuMVwiLGRlZzJyYWQ6MipNYXRoLlBJLzM2MCxkb2M6ZixoYXNCaWRpQnVnOnYsaGFzVG91Y2g6ISFjLlRvdWNoRXZlbnQsaXNNUzp6LGlzV2ViS2l0Oi0xIT09Ri5pbmRleE9mKFwiQXBwbGVXZWJLaXRcIiksaXNGaXJlZm94OkIsaXNDaHJvbWU6dCxpc1NhZmFyaTohdCYmLTEhPT1GLmluZGV4T2YoXCJTYWZhcmlcIiksaXNUb3VjaERldmljZTovKE1vYmlsZXxBbmRyb2lkfFdpbmRvd3MgUGhvbmUpLy50ZXN0KEYpLFxuU1ZHX05TOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGFydENvdW50OjAsc2VyaWVzVHlwZXM6e30sc3ltYm9sU2l6ZXM6e30sc3ZnOkcsd2luOmMsbWFyZ2luTmFtZXM6W1wicGxvdFRvcFwiLFwibWFyZ2luUmlnaHRcIixcIm1hcmdpbkJvdHRvbVwiLFwicGxvdExlZnRcIl0sbm9vcDpmdW5jdGlvbigpe30sY2hhcnRzOltdLGRhdGVGb3JtYXRzOnt9fX0pO00oSSxcInBhcnRzL1V0aWxpdGllcy5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXV0sZnVuY3Rpb24oYyl7ZnVuY3Rpb24gZihhLGQpe3JldHVybiBwYXJzZUludChhLGR8fDEwKX1mdW5jdGlvbiBGKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYX1mdW5jdGlvbiBHKGEpe2E9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpO3JldHVyblwiW29iamVjdCBBcnJheV1cIj09PWF8fFwiW29iamVjdCBBcnJheSBJdGVyYXRvcl1cIj09PWF9ZnVuY3Rpb24geihhLGQpe3JldHVybiEhYSYmXCJvYmplY3RcIj09PXR5cGVvZiBhJiYoIWR8fFxuIUcoYSkpfWZ1bmN0aW9uIEIoYSl7cmV0dXJuIHooYSkmJlwibnVtYmVyXCI9PT10eXBlb2YgYS5ub2RlVHlwZX1mdW5jdGlvbiB0KGEpe3ZhciBkPWEmJmEuY29uc3RydWN0b3I7cmV0dXJuISgheihhLCEwKXx8QihhKXx8IWR8fCFkLm5hbWV8fFwiT2JqZWN0XCI9PT1kLm5hbWUpfWZ1bmN0aW9uIHYoYSl7cmV0dXJuXCJudW1iZXJcIj09PXR5cGVvZiBhJiYhaXNOYU4oYSkmJkluZmluaXR5PmEmJi1JbmZpbml0eTxhfWZ1bmN0aW9uIEMoYSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBhJiZudWxsIT09YX1mdW5jdGlvbiBIKGEsZCxlKXt2YXIgYjtGKGQpP0MoZSk/YS5zZXRBdHRyaWJ1dGUoZCxlKTphJiZhLmdldEF0dHJpYnV0ZSYmKChiPWEuZ2V0QXR0cmlidXRlKGQpKXx8XCJjbGFzc1wiIT09ZHx8KGI9YS5nZXRBdHRyaWJ1dGUoZCtcIk5hbWVcIikpKTpuKGQsZnVuY3Rpb24oZCxlKXthLnNldEF0dHJpYnV0ZShlLGQpfSk7cmV0dXJuIGJ9ZnVuY3Rpb24geShhLGQpe3ZhciBlO2F8fChhPVxue30pO2ZvcihlIGluIGQpYVtlXT1kW2VdO3JldHVybiBhfWZ1bmN0aW9uIGgoKXtmb3IodmFyIGE9YXJndW1lbnRzLGQ9YS5sZW5ndGgsZT0wO2U8ZDtlKyspe3ZhciBiPWFbZV07aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBiJiZudWxsIT09YilyZXR1cm4gYn19ZnVuY3Rpb24gbihhLGQsZSl7Zm9yKHZhciBiIGluIGEpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoYSxiKSYmZC5jYWxsKGV8fGFbYl0sYVtiXSxiLGEpfWMudGltZXJzPVtdO3ZhciBxPWMuY2hhcnRzLGc9Yy5kb2MsYj1jLndpbjtjLmVycm9yPWZ1bmN0aW9uKGEsZCxlLGwpe3ZhciBnPXYoYSksaD1nP1wiSGlnaGNoYXJ0cyBlcnJvciAjXCIrYStcIjogd3d3LmhpZ2hjaGFydHMuY29tL2Vycm9ycy9cIithK1wiL1wiOmEudG9TdHJpbmcoKSxwPWZ1bmN0aW9uKCl7aWYoZCl0aHJvdyBFcnJvcihoKTtiLmNvbnNvbGUmJmNvbnNvbGUubG9nKGgpfTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIGwpe3ZhciB1PVwiXCI7ZyYmKGgrPVwiP1wiKTtcbmMub2JqZWN0RWFjaChsLGZ1bmN0aW9uKGEsZCl7dSs9XCJcXG5cIitkK1wiOiBcIithO2cmJihoKz1lbmNvZGVVUkkoZCkrXCI9XCIrZW5jb2RlVVJJKGEpKX0pO2grPXV9ZT9jLmZpcmVFdmVudChlLFwiZGlzcGxheUVycm9yXCIse2NvZGU6YSxtZXNzYWdlOmgscGFyYW1zOmx9LHApOnAoKX07Yy5GeD1mdW5jdGlvbihhLGQsZSl7dGhpcy5vcHRpb25zPWQ7dGhpcy5lbGVtPWE7dGhpcy5wcm9wPWV9O2MuRngucHJvdG90eXBlPXtkU2V0dGVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXRoc1swXSxkPXRoaXMucGF0aHNbMV0sZT1bXSxiPXRoaXMubm93LGc9YS5sZW5ndGg7aWYoMT09PWIpZT10aGlzLnRvRDtlbHNlIGlmKGc9PT1kLmxlbmd0aCYmMT5iKWZvcig7Zy0tOyl7dmFyIGM9cGFyc2VGbG9hdChhW2ddKTtlW2ddPWlzTmFOKGMpfHxcIkFcIj09PWRbZy00XXx8XCJBXCI9PT1kW2ctNV0/ZFtnXTpiKnBhcnNlRmxvYXQoXCJcIisoZFtnXS1jKSkrY31lbHNlIGU9ZDt0aGlzLmVsZW0uYXR0cihcImRcIixlLFxubnVsbCwhMCl9LHVwZGF0ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbSxkPXRoaXMucHJvcCxlPXRoaXMubm93LGI9dGhpcy5vcHRpb25zLnN0ZXA7aWYodGhpc1tkK1wiU2V0dGVyXCJdKXRoaXNbZCtcIlNldHRlclwiXSgpO2Vsc2UgYS5hdHRyP2EuZWxlbWVudCYmYS5hdHRyKGQsZSxudWxsLCEwKTphLnN0eWxlW2RdPWUrdGhpcy51bml0O2ImJmIuY2FsbChhLGUsdGhpcyl9LHJ1bjpmdW5jdGlvbihhLGQsZSl7dmFyIGw9dGhpcyxnPWwub3B0aW9ucyxoPWZ1bmN0aW9uKGEpe3JldHVybiBoLnN0b3BwZWQ/ITE6bC5zdGVwKGEpfSxwPWIucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxmdW5jdGlvbihhKXtzZXRUaW1lb3V0KGEsMTMpfSx1PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTxjLnRpbWVycy5sZW5ndGg7YSsrKWMudGltZXJzW2FdKCl8fGMudGltZXJzLnNwbGljZShhLS0sMSk7Yy50aW1lcnMubGVuZ3RoJiZwKHUpfTthIT09ZHx8dGhpcy5lbGVtW1wiZm9yY2VBbmltYXRlOlwiK3RoaXMucHJvcF0/XG4odGhpcy5zdGFydFRpbWU9K25ldyBEYXRlLHRoaXMuc3RhcnQ9YSx0aGlzLmVuZD1kLHRoaXMudW5pdD1lLHRoaXMubm93PXRoaXMuc3RhcnQsdGhpcy5wb3M9MCxoLmVsZW09dGhpcy5lbGVtLGgucHJvcD10aGlzLnByb3AsaCgpJiYxPT09Yy50aW1lcnMucHVzaChoKSYmcCh1KSk6KGRlbGV0ZSBnLmN1ckFuaW1bdGhpcy5wcm9wXSxnLmNvbXBsZXRlJiYwPT09T2JqZWN0LmtleXMoZy5jdXJBbmltKS5sZW5ndGgmJmcuY29tcGxldGUuY2FsbCh0aGlzLmVsZW0pKX0sc3RlcDpmdW5jdGlvbihhKXt2YXIgZD0rbmV3IERhdGUsZT10aGlzLm9wdGlvbnMsYj10aGlzLmVsZW0sZz1lLmNvbXBsZXRlLGM9ZS5kdXJhdGlvbixwPWUuY3VyQW5pbTtpZihiLmF0dHImJiFiLmVsZW1lbnQpYT0hMTtlbHNlIGlmKGF8fGQ+PWMrdGhpcy5zdGFydFRpbWUpe3RoaXMubm93PXRoaXMuZW5kO3RoaXMucG9zPTE7dGhpcy51cGRhdGUoKTt2YXIgdT1wW3RoaXMucHJvcF09ITA7bihwLGZ1bmN0aW9uKGEpeyEwIT09XG5hJiYodT0hMSl9KTt1JiZnJiZnLmNhbGwoYik7YT0hMX1lbHNlIHRoaXMucG9zPWUuZWFzaW5nKChkLXRoaXMuc3RhcnRUaW1lKS9jKSx0aGlzLm5vdz10aGlzLnN0YXJ0Kyh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0aGlzLnBvcyx0aGlzLnVwZGF0ZSgpLGE9ITA7cmV0dXJuIGF9LGluaXRQYXRoOmZ1bmN0aW9uKGEsZCxlKXtmdW5jdGlvbiBiKGEpe2ZvcihBPWEubGVuZ3RoO0EtLTspe3ZhciBkPVwiTVwiPT09YVtBXXx8XCJMXCI9PT1hW0FdO3ZhciBlPS9bYS16QS1aXS8udGVzdChhW0ErM10pO2QmJmUmJmEuc3BsaWNlKEErMSwwLGFbQSsxXSxhW0ErMl0sYVtBKzFdLGFbQSsyXSl9fWZ1bmN0aW9uIGcoYSxkKXtmb3IoO2EubGVuZ3RoPGg7KXthWzBdPWRbaC1hLmxlbmd0aF07dmFyIGU9YS5zbGljZSgwLHIpO1tdLnNwbGljZS5hcHBseShhLFswLDBdLmNvbmNhdChlKSk7dyYmKGU9YS5zbGljZShhLmxlbmd0aC1yKSxbXS5zcGxpY2UuYXBwbHkoYSxbYS5sZW5ndGgsMF0uY29uY2F0KGUpKSxcbkEtLSl9YVswXT1cIk1cIn1mdW5jdGlvbiBjKGEsZCl7Zm9yKHZhciBlPShoLWEubGVuZ3RoKS9yOzA8ZSYmZS0tOyl4PWEuc2xpY2UoKS5zcGxpY2UoYS5sZW5ndGgvbS1yLHIqbSkseFswXT1kW2gtci1lKnJdLGsmJih4W3ItNl09eFtyLTJdLHhbci01XT14W3ItMV0pLFtdLnNwbGljZS5hcHBseShhLFthLmxlbmd0aC9tLDBdLmNvbmNhdCh4KSksdyYmZS0tfWQ9ZHx8XCJcIjt2YXIgcD1hLnN0YXJ0WCx1PWEuZW5kWCxrPS0xPGQuaW5kZXhPZihcIkNcIikscj1rPzc6Myx4LEE7ZD1kLnNwbGl0KFwiIFwiKTtlPWUuc2xpY2UoKTt2YXIgdz1hLmlzQXJlYSxtPXc/MjoxO2smJihiKGQpLGIoZSkpO2lmKHAmJnUpe2ZvcihBPTA7QTxwLmxlbmd0aDtBKyspaWYocFtBXT09PXVbMF0pe3ZhciBLPUE7YnJlYWt9ZWxzZSBpZihwWzBdPT09dVt1Lmxlbmd0aC1wLmxlbmd0aCtBXSl7Sz1BO3ZhciBKPSEwO2JyZWFrfWVsc2UgaWYocFtwLmxlbmd0aC0xXT09PXVbdS5sZW5ndGgtcC5sZW5ndGgrQV0pe0s9XG5wLmxlbmd0aC1BO2JyZWFrfVwidW5kZWZpbmVkXCI9PT10eXBlb2YgSyYmKGQ9W10pfWlmKGQubGVuZ3RoJiZ2KEspKXt2YXIgaD1lLmxlbmd0aCtLKm0qcjtKPyhnKGQsZSksYyhlLGQpKTooZyhlLGQpLGMoZCxlKSl9cmV0dXJuW2QsZV19LGZpbGxTZXR0ZXI6ZnVuY3Rpb24oKXtjLkZ4LnByb3RvdHlwZS5zdHJva2VTZXR0ZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxzdHJva2VTZXR0ZXI6ZnVuY3Rpb24oKXt0aGlzLmVsZW0uYXR0cih0aGlzLnByb3AsYy5jb2xvcih0aGlzLnN0YXJ0KS50d2VlblRvKGMuY29sb3IodGhpcy5lbmQpLHRoaXMucG9zKSxudWxsLCEwKX19O2MubWVyZ2U9ZnVuY3Rpb24oKXt2YXIgYSxkPWFyZ3VtZW50cyxlPXt9LGI9ZnVuY3Rpb24oYSxkKXtcIm9iamVjdFwiIT09dHlwZW9mIGEmJihhPXt9KTtuKGQsZnVuY3Rpb24oZSxrKXsheihlLCEwKXx8dChlKXx8QihlKT9hW2tdPWRba106YVtrXT1iKGFba118fHt9LGUpfSk7cmV0dXJuIGF9OyEwPT09ZFswXSYmXG4oZT1kWzFdLGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZCwyKSk7dmFyIGc9ZC5sZW5ndGg7Zm9yKGE9MDthPGc7YSsrKWU9YihlLGRbYV0pO3JldHVybiBlfTtjLmNsZWFyVGltZW91dD1mdW5jdGlvbihhKXtDKGEpJiZjbGVhclRpbWVvdXQoYSl9O2MuY3NzPWZ1bmN0aW9uKGEsZCl7Yy5pc01TJiYhYy5zdmcmJmQmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgZC5vcGFjaXR5JiYoZC5maWx0ZXI9XCJhbHBoYShvcGFjaXR5PVwiKzEwMCpkLm9wYWNpdHkrXCIpXCIpO3koYS5zdHlsZSxkKX07Yy5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGEsZCxlLGIsTCl7YT1nLmNyZWF0ZUVsZW1lbnQoYSk7dmFyIGw9Yy5jc3M7ZCYmeShhLGQpO0wmJmwoYSx7cGFkZGluZzpcIjBcIixib3JkZXI6XCJub25lXCIsbWFyZ2luOlwiMFwifSk7ZSYmbChhLGUpO2ImJmIuYXBwZW5kQ2hpbGQoYSk7cmV0dXJuIGF9O2MuZXh0ZW5kQ2xhc3M9ZnVuY3Rpb24oYSxkKXt2YXIgZT1mdW5jdGlvbigpe307ZS5wcm90b3R5cGU9XG5uZXcgYTt5KGUucHJvdG90eXBlLGQpO3JldHVybiBlfTtjLnBhZD1mdW5jdGlvbihhLGQsZSl7cmV0dXJuIEFycmF5KChkfHwyKSsxLVN0cmluZyhhKS5yZXBsYWNlKFwiLVwiLFwiXCIpLmxlbmd0aCkuam9pbihlfHxcIjBcIikrYX07Yy5yZWxhdGl2ZUxlbmd0aD1mdW5jdGlvbihhLGQsZSl7cmV0dXJuLyUkLy50ZXN0KGEpP2QqcGFyc2VGbG9hdChhKS8xMDArKGV8fDApOnBhcnNlRmxvYXQoYSl9O2Mud3JhcD1mdW5jdGlvbihhLGQsZSl7dmFyIGI9YVtkXTthW2RdPWZ1bmN0aW9uKCl7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxkPWFyZ3VtZW50cyxsPXRoaXM7bC5wcm9jZWVkPWZ1bmN0aW9uKCl7Yi5hcHBseShsLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzOmQpfTthLnVuc2hpZnQoYik7YT1lLmFwcGx5KHRoaXMsYSk7bC5wcm9jZWVkPW51bGw7cmV0dXJuIGF9fTtjLmRhdGVQcm9wc1RvVGltZXN0YW1wcz1mdW5jdGlvbihhKXtuKGEsZnVuY3Rpb24oZCxcbmUpe3ooZCkmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLmdldFRpbWU/YVtlXT1kLmdldFRpbWUoKTooeihkKXx8RyhkKSkmJmMuZGF0ZVByb3BzVG9UaW1lc3RhbXBzKGQpfSl9O2MuZm9ybWF0U2luZ2xlPWZ1bmN0aW9uKGEsZCxlKXt2YXIgYj0vXFwuKFswLTldKS8sZz1jLmRlZmF1bHRPcHRpb25zLmxhbmc7L2YkLy50ZXN0KGEpPyhlPShlPWEubWF0Y2goYikpP2VbMV06LTEsbnVsbCE9PWQmJihkPWMubnVtYmVyRm9ybWF0KGQsZSxnLmRlY2ltYWxQb2ludCwtMTxhLmluZGV4T2YoXCIsXCIpP2cudGhvdXNhbmRzU2VwOlwiXCIpKSk6ZD0oZXx8Yy50aW1lKS5kYXRlRm9ybWF0KGEsZCk7cmV0dXJuIGR9O2MuZm9ybWF0PWZ1bmN0aW9uKGEsZCxlKXtmb3IodmFyIGI9XCJ7XCIsZz0hMSxoLHAsdSxrLHI9W10seDthOyl7Yj1hLmluZGV4T2YoYik7aWYoLTE9PT1iKWJyZWFrO2g9YS5zbGljZSgwLGIpO2lmKGcpe2g9aC5zcGxpdChcIjpcIik7cD1oLnNoaWZ0KCkuc3BsaXQoXCIuXCIpO2s9cC5sZW5ndGg7XG54PWQ7Zm9yKHU9MDt1PGs7dSsrKXgmJih4PXhbcFt1XV0pO2gubGVuZ3RoJiYoeD1jLmZvcm1hdFNpbmdsZShoLmpvaW4oXCI6XCIpLHgsZSkpO3IucHVzaCh4KX1lbHNlIHIucHVzaChoKTthPWEuc2xpY2UoYisxKTtiPShnPSFnKT9cIn1cIjpcIntcIn1yLnB1c2goYSk7cmV0dXJuIHIuam9pbihcIlwiKX07Yy5nZXRNYWduaXR1ZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coYSkvTWF0aC5MTjEwKSl9O2Mubm9ybWFsaXplVGlja0ludGVydmFsPWZ1bmN0aW9uKGEsZCxlLGIsZyl7dmFyIGw9YTtlPWgoZSwxKTt2YXIgcD1hL2U7ZHx8KGQ9Zz9bMSwxLjIsMS41LDIsMi41LDMsNCw1LDYsOCwxMF06WzEsMiwyLjUsNSwxMF0sITE9PT1iJiYoMT09PWU/ZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gMD09PWElMX0pOi4xPj1lJiYoZD1bMS9lXSkpKTtmb3IoYj0wO2I8ZC5sZW5ndGgmJiEobD1kW2JdLGcmJmwqZT49YXx8IWcmJnA8PShkW2JdK1xuKGRbYisxXXx8ZFtiXSkpLzIpO2IrKyk7cmV0dXJuIGw9Yy5jb3JyZWN0RmxvYXQobCplLC1NYXRoLnJvdW5kKE1hdGgubG9nKC4wMDEpL01hdGguTE4xMCkpfTtjLnN0YWJsZVNvcnQ9ZnVuY3Rpb24oYSxkKXt2YXIgYj1hLmxlbmd0aCxsLGc7Zm9yKGc9MDtnPGI7ZysrKWFbZ10uc2FmZUk9ZzthLnNvcnQoZnVuY3Rpb24oYSxiKXtsPWQoYSxiKTtyZXR1cm4gMD09PWw/YS5zYWZlSS1iLnNhZmVJOmx9KTtmb3IoZz0wO2c8YjtnKyspZGVsZXRlIGFbZ10uc2FmZUl9O2MuY29ycmVjdEZsb2F0PWZ1bmN0aW9uKGEsZCl7cmV0dXJuIHBhcnNlRmxvYXQoYS50b1ByZWNpc2lvbihkfHwxNCkpfTtjLmFuaW1PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk/Yy5tZXJnZShhKTp7ZHVyYXRpb246YT81MDA6MH19O2MudGltZVVuaXRzPXttaWxsaXNlY29uZDoxLHNlY29uZDoxRTMsbWludXRlOjZFNCxob3VyOjM2RTUsZGF5Ojg2NEU1LHdlZWs6NjA0OEU1LG1vbnRoOjI0MTkyRTUseWVhcjozMTQ0OTZFNX07XG5jLm51bWJlckZvcm1hdD1mdW5jdGlvbihhLGQsYixsKXthPSthfHwwO2Q9K2Q7dmFyIGU9Yy5kZWZhdWx0T3B0aW9ucy5sYW5nLGc9KGEudG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV18fFwiXCIpLnNwbGl0KFwiZVwiKVswXS5sZW5ndGgscD1hLnRvU3RyaW5nKCkuc3BsaXQoXCJlXCIpO2lmKC0xPT09ZClkPU1hdGgubWluKGcsMjApO2Vsc2UgaWYoIXYoZCkpZD0yO2Vsc2UgaWYoZCYmcFsxXSYmMD5wWzFdKXt2YXIgdT1kKyArcFsxXTswPD11PyhwWzBdPSgrcFswXSkudG9FeHBvbmVudGlhbCh1KS5zcGxpdChcImVcIilbMF0sZD11KToocFswXT1wWzBdLnNwbGl0KFwiLlwiKVswXXx8MCxhPTIwPmQ/KHBbMF0qTWF0aC5wb3coMTAscFsxXSkpLnRvRml4ZWQoZCk6MCxwWzFdPTApfXZhciBrPShNYXRoLmFicyhwWzFdP3BbMF06YSkrTWF0aC5wb3coMTAsLU1hdGgubWF4KGQsZyktMSkpLnRvRml4ZWQoZCk7Zz1TdHJpbmcoZihrKSk7dT0zPGcubGVuZ3RoP2cubGVuZ3RoJTM6MDtiPWgoYixlLmRlY2ltYWxQb2ludCk7XG5sPWgobCxlLnRob3VzYW5kc1NlcCk7YT0oMD5hP1wiLVwiOlwiXCIpKyh1P2cuc3Vic3RyKDAsdSkrbDpcIlwiKTthKz1nLnN1YnN0cih1KS5yZXBsYWNlKC8oXFxkezN9KSg/PVxcZCkvZyxcIiQxXCIrbCk7ZCYmKGErPWIray5zbGljZSgtZCkpO3BbMV0mJjAhPT0rYSYmKGErPVwiZVwiK3BbMV0pO3JldHVybiBhfTtNYXRoLmVhc2VJbk91dFNpbmU9ZnVuY3Rpb24oYSl7cmV0dXJuLS41KihNYXRoLmNvcyhNYXRoLlBJKmEpLTEpfTtjLmdldFN0eWxlPWZ1bmN0aW9uKGEsZCxlKXtpZihcIndpZHRoXCI9PT1kKXJldHVybiBkPU1hdGgubWluKGEub2Zmc2V0V2lkdGgsYS5zY3JvbGxXaWR0aCksZT1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCYmYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxlPGQmJmU+PWQtMSYmKGQ9TWF0aC5mbG9vcihlKSksTWF0aC5tYXgoMCxkLWMuZ2V0U3R5bGUoYSxcInBhZGRpbmctbGVmdFwiKS1jLmdldFN0eWxlKGEsXCJwYWRkaW5nLXJpZ2h0XCIpKTtpZihcImhlaWdodFwiPT09ZClyZXR1cm4gTWF0aC5tYXgoMCxcbk1hdGgubWluKGEub2Zmc2V0SGVpZ2h0LGEuc2Nyb2xsSGVpZ2h0KS1jLmdldFN0eWxlKGEsXCJwYWRkaW5nLXRvcFwiKS1jLmdldFN0eWxlKGEsXCJwYWRkaW5nLWJvdHRvbVwiKSk7Yi5nZXRDb21wdXRlZFN0eWxlfHxjLmVycm9yKDI3LCEwKTtpZihhPWIuZ2V0Q29tcHV0ZWRTdHlsZShhLHZvaWQgMCkpYT1hLmdldFByb3BlcnR5VmFsdWUoZCksaChlLFwib3BhY2l0eVwiIT09ZCkmJihhPWYoYSkpO3JldHVybiBhfTtjLmluQXJyYXk9ZnVuY3Rpb24oYSxkLGIpe3JldHVybiBkLmluZGV4T2YoYSxiKX07Yy5maW5kPUFycmF5LnByb3RvdHlwZS5maW5kP2Z1bmN0aW9uKGEsZCl7cmV0dXJuIGEuZmluZChkKX06ZnVuY3Rpb24oYSxkKXt2YXIgYixsPWEubGVuZ3RoO2ZvcihiPTA7YjxsO2IrKylpZihkKGFbYl0sYikpcmV0dXJuIGFbYl19O2Mua2V5cz1PYmplY3Qua2V5cztjLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgZD1nLmRvY3VtZW50RWxlbWVudDthPWEucGFyZW50RWxlbWVudHx8YS5wYXJlbnROb2RlP1xuYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp7dG9wOjAsbGVmdDowfTtyZXR1cm57dG9wOmEudG9wKyhiLnBhZ2VZT2Zmc2V0fHxkLnNjcm9sbFRvcCktKGQuY2xpZW50VG9wfHwwKSxsZWZ0OmEubGVmdCsoYi5wYWdlWE9mZnNldHx8ZC5zY3JvbGxMZWZ0KS0oZC5jbGllbnRMZWZ0fHwwKX19O2Muc3RvcD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgZD1jLnRpbWVycy5sZW5ndGg7ZC0tOyljLnRpbWVyc1tkXS5lbGVtIT09YXx8YiYmYiE9PWMudGltZXJzW2RdLnByb3B8fChjLnRpbWVyc1tkXS5zdG9wcGVkPSEwKX07bih7bWFwOlwibWFwXCIsZWFjaDpcImZvckVhY2hcIixncmVwOlwiZmlsdGVyXCIscmVkdWNlOlwicmVkdWNlXCIsc29tZTpcInNvbWVcIn0sZnVuY3Rpb24oYSxiKXtjW2JdPWZ1bmN0aW9uKGIpe3JldHVybiBBcnJheS5wcm90b3R5cGVbYV0uYXBwbHkoYixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9fSk7Yy5hZGRFdmVudD1mdW5jdGlvbihhLGIsZSxsKXt2b2lkIDA9PT1sJiYobD1cbnt9KTt2YXIgZD1hLmFkZEV2ZW50TGlzdGVuZXJ8fGMuYWRkRXZlbnRMaXN0ZW5lclBvbHlmaWxsO3ZhciBnPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBhJiZhLnByb3RvdHlwZT9hLnByb3RvdHlwZS5wcm90b0V2ZW50cz1hLnByb3RvdHlwZS5wcm90b0V2ZW50c3x8e306YS5oY0V2ZW50cz1hLmhjRXZlbnRzfHx7fTtjLlBvaW50JiZhIGluc3RhbmNlb2YgYy5Qb2ludCYmYS5zZXJpZXMmJmEuc2VyaWVzLmNoYXJ0JiYoYS5zZXJpZXMuY2hhcnQucnVuVHJhY2tlckNsaWNrPSEwKTtkJiZkLmNhbGwoYSxiLGUsITEpO2dbYl18fChnW2JdPVtdKTtnW2JdLnB1c2goe2ZuOmUsb3JkZXI6XCJudW1iZXJcIj09PXR5cGVvZiBsLm9yZGVyP2wub3JkZXI6SW5maW5pdHl9KTtnW2JdLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5vcmRlci1iLm9yZGVyfSk7cmV0dXJuIGZ1bmN0aW9uKCl7Yy5yZW1vdmVFdmVudChhLGIsZSl9fTtjLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGEsYixlKXtmdW5jdGlvbiBkKGIsXG5kKXt2YXIgZT1hLnJlbW92ZUV2ZW50TGlzdGVuZXJ8fGMucmVtb3ZlRXZlbnRMaXN0ZW5lclBvbHlmaWxsO2UmJmUuY2FsbChhLGIsZCwhMSl9ZnVuY3Rpb24gZyhlKXt2YXIgbDtpZihhLm5vZGVOYW1lKXtpZihiKXt2YXIgaz17fTtrW2JdPSEwfWVsc2Ugaz1lO24oayxmdW5jdGlvbihhLGIpe2lmKGVbYl0pZm9yKGw9ZVtiXS5sZW5ndGg7bC0tOylkKGIsZVtiXVtsXS5mbil9KX19dmFyIGg7W1wicHJvdG9FdmVudHNcIixcImhjRXZlbnRzXCJdLmZvckVhY2goZnVuY3Rpb24obCxjKXt2YXIgaz0oYz1jP2E6YS5wcm90b3R5cGUpJiZjW2xdO2smJihiPyhoPWtbYl18fFtdLGU/KGtbYl09aC5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGUhPT1hLmZufSksZChiLGUpKTooZyhrKSxrW2JdPVtdKSk6KGcoayksY1tsXT17fSkpfSl9O2MuZmlyZUV2ZW50PWZ1bmN0aW9uKGEsYixlLGwpe3ZhciBkO2U9ZXx8e307aWYoZy5jcmVhdGVFdmVudCYmKGEuZGlzcGF0Y2hFdmVudHx8YS5maXJlRXZlbnQpKXt2YXIgYz1cbmcuY3JlYXRlRXZlbnQoXCJFdmVudHNcIik7Yy5pbml0RXZlbnQoYiwhMCwhMCk7eShjLGUpO2EuZGlzcGF0Y2hFdmVudD9hLmRpc3BhdGNoRXZlbnQoYyk6YS5maXJlRXZlbnQoYixjKX1lbHNlIGUudGFyZ2V0fHx5KGUse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7ZS5kZWZhdWx0UHJldmVudGVkPSEwfSx0YXJnZXQ6YSx0eXBlOmJ9KSxmdW5jdGlvbihiLGwpe3ZvaWQgMD09PWImJihiPVtdKTt2b2lkIDA9PT1sJiYobD1bXSk7dmFyIGs9MCxyPTAsZz1iLmxlbmd0aCtsLmxlbmd0aDtmb3IoZD0wO2Q8ZztkKyspITE9PT0oYltrXT9sW3JdP2Jba10ub3JkZXI8PWxbcl0ub3JkZXI/YltrKytdOmxbcisrXTpiW2srK106bFtyKytdKS5mbi5jYWxsKGEsZSkmJmUucHJldmVudERlZmF1bHQoKX0oYS5wcm90b0V2ZW50cyYmYS5wcm90b0V2ZW50c1tiXSxhLmhjRXZlbnRzJiZhLmhjRXZlbnRzW2JdKTtsJiYhZS5kZWZhdWx0UHJldmVudGVkJiZsLmNhbGwoYSxlKX07Yy5hbmltYXRlPWZ1bmN0aW9uKGEsXG5iLGUpe3ZhciBkLGc9XCJcIixoLHA7aWYoIXooZSkpe3ZhciB1PWFyZ3VtZW50cztlPXtkdXJhdGlvbjp1WzJdLGVhc2luZzp1WzNdLGNvbXBsZXRlOnVbNF19fXYoZS5kdXJhdGlvbil8fChlLmR1cmF0aW9uPTQwMCk7ZS5lYXNpbmc9XCJmdW5jdGlvblwiPT09dHlwZW9mIGUuZWFzaW5nP2UuZWFzaW5nOk1hdGhbZS5lYXNpbmddfHxNYXRoLmVhc2VJbk91dFNpbmU7ZS5jdXJBbmltPWMubWVyZ2UoYik7bihiLGZ1bmN0aW9uKGssbCl7Yy5zdG9wKGEsbCk7cD1uZXcgYy5GeChhLGUsbCk7aD1udWxsO1wiZFwiPT09bD8ocC5wYXRocz1wLmluaXRQYXRoKGEsYS5kLGIuZCkscC50b0Q9Yi5kLGQ9MCxoPTEpOmEuYXR0cj9kPWEuYXR0cihsKTooZD1wYXJzZUZsb2F0KGMuZ2V0U3R5bGUoYSxsKSl8fDAsXCJvcGFjaXR5XCIhPT1sJiYoZz1cInB4XCIpKTtofHwoaD1rKTtoJiZoLm1hdGNoJiZoLm1hdGNoKFwicHhcIikmJihoPWgucmVwbGFjZSgvcHgvZyxcIlwiKSk7cC5ydW4oZCxoLGcpfSl9O2Muc2VyaWVzVHlwZT1cbmZ1bmN0aW9uKGEsYixlLGwsZyl7dmFyIGQ9Yy5nZXRPcHRpb25zKCkscD1jLnNlcmllc1R5cGVzO2QucGxvdE9wdGlvbnNbYV09Yy5tZXJnZShkLnBsb3RPcHRpb25zW2JdLGUpO3BbYV09Yy5leHRlbmRDbGFzcyhwW2JdfHxmdW5jdGlvbigpe30sbCk7cFthXS5wcm90b3R5cGUudHlwZT1hO2cmJihwW2FdLnByb3RvdHlwZS5wb2ludENsYXNzPWMuZXh0ZW5kQ2xhc3MoYy5Qb2ludCxnKSk7cmV0dXJuIHBbYV19O2MudW5pcXVlS2V5PWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSksYj0wO3JldHVybiBmdW5jdGlvbigpe3JldHVyblwiaGlnaGNoYXJ0cy1cIithK1wiLVwiK2IrK319KCk7Yy5pc0Z1bmN0aW9uPWZ1bmN0aW9uKGEpe3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfTtiLmpRdWVyeSYmKGIualF1ZXJ5LmZuLmhpZ2hjaGFydHM9ZnVuY3Rpb24oKXt2YXIgYT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYodGhpc1swXSlyZXR1cm4gYVswXT9cbihuZXcgKGNbRihhWzBdKT9hLnNoaWZ0KCk6XCJDaGFydFwiXSkodGhpc1swXSxhWzBdLGFbMV0pLHRoaXMpOnFbSCh0aGlzWzBdLFwiZGF0YS1oaWdoY2hhcnRzLWNoYXJ0XCIpXX0pO3JldHVybnthcnJheU1heDpmdW5jdGlvbihhKXtmb3IodmFyIGI9YS5sZW5ndGgsZT1hWzBdO2ItLTspYVtiXT5lJiYoZT1hW2JdKTtyZXR1cm4gZX0sYXJyYXlNaW46ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGU9YVswXTtiLS07KWFbYl08ZSYmKGU9YVtiXSk7cmV0dXJuIGV9LGF0dHI6SCxkZWZpbmVkOkMsZGVzdHJveU9iamVjdFByb3BlcnRpZXM6ZnVuY3Rpb24oYSxiKXtuKGEsZnVuY3Rpb24oZCxsKXtkJiZkIT09YiYmZC5kZXN0cm95JiZkLmRlc3Ryb3koKTtkZWxldGUgYVtsXX0pfSxkaXNjYXJkRWxlbWVudDpmdW5jdGlvbihhKXt2YXIgYj1jLmdhcmJhZ2VCaW47Ynx8KGI9Yy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTthJiZiLmFwcGVuZENoaWxkKGEpO2IuaW5uZXJIVE1MPVwiXCJ9LGVyYXNlOmZ1bmN0aW9uKGEsXG5iKXtmb3IodmFyIGQ9YS5sZW5ndGg7ZC0tOylpZihhW2RdPT09Yil7YS5zcGxpY2UoZCwxKTticmVha319LGV4dGVuZDp5LGlzQXJyYXk6Ryxpc0NsYXNzOnQsaXNET01FbGVtZW50OkIsaXNOdW1iZXI6dixpc09iamVjdDp6LGlzU3RyaW5nOkYsb2JqZWN0RWFjaDpuLHBpY2s6aCxwSW50OmYsc2V0QW5pbWF0aW9uOmZ1bmN0aW9uKGEsYil7Yi5yZW5kZXJlci5nbG9iYWxBbmltYXRpb249aChhLGIub3B0aW9ucy5jaGFydC5hbmltYXRpb24sITApfSxzcGxhdDpmdW5jdGlvbihhKXtyZXR1cm4gRyhhKT9hOlthXX0sc3luY1RpbWVvdXQ6ZnVuY3Rpb24oYSxiLGUpe2lmKDA8YilyZXR1cm4gc2V0VGltZW91dChhLGIsZSk7YS5jYWxsKDAsZSk7cmV0dXJuLTF9fX0pO00oSSxcInBhcnRzL0NvbG9yLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5pc051bWJlcixHPWYucEludCx6PWMubWVyZ2U7Yy5Db2xvcj1cbmZ1bmN0aW9uKGYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGMuQ29sb3IpKXJldHVybiBuZXcgYy5Db2xvcihmKTt0aGlzLmluaXQoZil9O2MuQ29sb3IucHJvdG90eXBlPXtwYXJzZXJzOlt7cmVnZXg6L3JnYmFcXChcXHMqKFswLTldezEsM30pXFxzKixcXHMqKFswLTldezEsM30pXFxzKixcXHMqKFswLTldezEsM30pXFxzKixcXHMqKFswLTldPyg/OlxcLlswLTldKyk/KVxccypcXCkvLHBhcnNlOmZ1bmN0aW9uKGMpe3JldHVybltHKGNbMV0pLEcoY1syXSksRyhjWzNdKSxwYXJzZUZsb2F0KGNbNF0sMTApXX19LHtyZWdleDovcmdiXFwoXFxzKihbMC05XXsxLDN9KVxccyosXFxzKihbMC05XXsxLDN9KVxccyosXFxzKihbMC05XXsxLDN9KVxccypcXCkvLHBhcnNlOmZ1bmN0aW9uKGMpe3JldHVybltHKGNbMV0pLEcoY1syXSksRyhjWzNdKSwxXX19XSxuYW1lczp7d2hpdGU6XCIjZmZmZmZmXCIsYmxhY2s6XCIjMDAwMDAwXCJ9LGluaXQ6ZnVuY3Rpb24oZil7dmFyIHQsdjtpZigodGhpcy5pbnB1dD1mPXRoaXMubmFtZXNbZiYmXG5mLnRvTG93ZXJDYXNlP2YudG9Mb3dlckNhc2UoKTpcIlwiXXx8ZikmJmYuc3RvcHMpdGhpcy5zdG9wcz1mLnN0b3BzLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gbmV3IGMuQ29sb3IoZlsxXSl9KTtlbHNle2lmKGYmJmYuY2hhckF0JiZcIiNcIj09PWYuY2hhckF0KCkpe3ZhciBDPWYubGVuZ3RoO2Y9cGFyc2VJbnQoZi5zdWJzdHIoMSksMTYpOzc9PT1DP3Q9WyhmJjE2NzExNjgwKT4+MTYsKGYmNjUyODApPj44LGYmMjU1LDFdOjQ9PT1DJiYodD1bKGYmMzg0MCk+PjR8KGYmMzg0MCk+PjgsKGYmMjQwKT4+NHxmJjI0MCwoZiYxNSk8PDR8ZiYxNSwxXSl9aWYoIXQpZm9yKHY9dGhpcy5wYXJzZXJzLmxlbmd0aDt2LS0mJiF0Oyl7dmFyIEI9dGhpcy5wYXJzZXJzW3ZdOyhDPUIucmVnZXguZXhlYyhmKSkmJih0PUIucGFyc2UoQykpfX10aGlzLnJnYmE9dHx8W119LGdldDpmdW5jdGlvbihjKXt2YXIgZj10aGlzLmlucHV0LHY9dGhpcy5yZ2JhO2lmKHRoaXMuc3RvcHMpe3ZhciBDPXooZik7Qy5zdG9wcz1cbltdLmNvbmNhdChDLnN0b3BzKTt0aGlzLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oZix2KXtDLnN0b3BzW3ZdPVtDLnN0b3BzW3ZdWzBdLGYuZ2V0KGMpXX0pfWVsc2UgQz12JiZGKHZbMF0pP1wicmdiXCI9PT1jfHwhYyYmMT09PXZbM10/XCJyZ2IoXCIrdlswXStcIixcIit2WzFdK1wiLFwiK3ZbMl0rXCIpXCI6XCJhXCI9PT1jP3ZbM106XCJyZ2JhKFwiK3Yuam9pbihcIixcIikrXCIpXCI6ZjtyZXR1cm4gQ30sYnJpZ2h0ZW46ZnVuY3Rpb24oYyl7dmFyIGYsdj10aGlzLnJnYmE7aWYodGhpcy5zdG9wcyl0aGlzLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oZil7Zi5icmlnaHRlbihjKX0pO2Vsc2UgaWYoRihjKSYmMCE9PWMpZm9yKGY9MDszPmY7ZisrKXZbZl0rPUcoMjU1KmMpLDA+dltmXSYmKHZbZl09MCksMjU1PHZbZl0mJih2W2ZdPTI1NSk7cmV0dXJuIHRoaXN9LHNldE9wYWNpdHk6ZnVuY3Rpb24oYyl7dGhpcy5yZ2JhWzNdPWM7cmV0dXJuIHRoaXN9LHR3ZWVuVG86ZnVuY3Rpb24oYyxmKXt2YXIgdj10aGlzLnJnYmEsXG50PWMucmdiYTt0Lmxlbmd0aCYmdiYmdi5sZW5ndGg/KGM9MSE9PXRbM118fDEhPT12WzNdLGY9KGM/XCJyZ2JhKFwiOlwicmdiKFwiKStNYXRoLnJvdW5kKHRbMF0rKHZbMF0tdFswXSkqKDEtZikpK1wiLFwiK01hdGgucm91bmQodFsxXSsodlsxXS10WzFdKSooMS1mKSkrXCIsXCIrTWF0aC5yb3VuZCh0WzJdKyh2WzJdLXRbMl0pKigxLWYpKSsoYz9cIixcIisodFszXSsodlszXS10WzNdKSooMS1mKSk6XCJcIikrXCIpXCIpOmY9Yy5pbnB1dHx8XCJub25lXCI7cmV0dXJuIGZ9fTtjLmNvbG9yPWZ1bmN0aW9uKGYpe3JldHVybiBuZXcgYy5Db2xvcihmKX19KTtNKEksXCJwYXJ0cy9TdmdSZW5kZXJlci5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuYXR0cixHPWYuZGVmaW5lZCx6PWYuZGVzdHJveU9iamVjdFByb3BlcnRpZXMsQj1mLmVyYXNlLHQ9Zi5leHRlbmQsdj1mLmlzQXJyYXksQz1mLmlzTnVtYmVyLEg9Zi5pc09iamVjdCxcbnk9Zi5pc1N0cmluZyxoPWYub2JqZWN0RWFjaCxuPWYucGljayxxPWYucEludCxnPWYuc3BsYXQsYj1jLmFkZEV2ZW50LGE9Yy5hbmltYXRlLGQ9Yy5jaGFydHMsZT1jLmNvbG9yLGw9Yy5jc3MsTD1jLmNyZWF0ZUVsZW1lbnQsRT1jLmRlZzJyYWQscD1jLmRvYyx1PWMuaGFzVG91Y2gsaz1jLmlzRmlyZWZveCxyPWMuaXNNUyx4PWMuaXNXZWJLaXQsQT1jLm1lcmdlLHc9Yy5ub29wLG09Yy5yZW1vdmVFdmVudCxLPWMuc3RvcCxKPWMuc3ZnLFU9Yy5TVkdfTlMsUz1jLnN5bWJvbFNpemVzLFE9Yy53aW47dmFyIE89Yy5TVkdFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QoTy5wcm90b3R5cGUse29wYWNpdHk6MSxTVkdfTlM6VSx0ZXh0UHJvcHM6XCJkaXJlY3Rpb24gZm9udFNpemUgZm9udFdlaWdodCBmb250RmFtaWx5IGZvbnRTdHlsZSBjb2xvciBsaW5lSGVpZ2h0IHdpZHRoIHRleHRBbGlnbiB0ZXh0RGVjb3JhdGlvbiB0ZXh0T3ZlcmZsb3cgdGV4dE91dGxpbmUgY3Vyc29yXCIuc3BsaXQoXCIgXCIpLFxuaW5pdDpmdW5jdGlvbihhLGIpe3RoaXMuZWxlbWVudD1cInNwYW5cIj09PWI/TChiKTpwLmNyZWF0ZUVsZW1lbnROUyh0aGlzLlNWR19OUyxiKTt0aGlzLnJlbmRlcmVyPWE7Yy5maXJlRXZlbnQodGhpcyxcImFmdGVySW5pdFwiKX0sYW5pbWF0ZTpmdW5jdGlvbihiLGQsbSl7dmFyIEQ9Yy5hbmltT2JqZWN0KG4oZCx0aGlzLnJlbmRlcmVyLmdsb2JhbEFuaW1hdGlvbiwhMCkpO24ocC5oaWRkZW4scC5tc0hpZGRlbixwLndlYmtpdEhpZGRlbiwhMSkmJihELmR1cmF0aW9uPTApOzAhPT1ELmR1cmF0aW9uPyhtJiYoRC5jb21wbGV0ZT1tKSxhKHRoaXMsYixEKSk6KHRoaXMuYXR0cihiLHZvaWQgMCxtKSxoKGIsZnVuY3Rpb24oYSxiKXtELnN0ZXAmJkQuc3RlcC5jYWxsKHRoaXMsYSx7cHJvcDpiLHBvczoxfSl9LHRoaXMpKTtyZXR1cm4gdGhpc30sY29tcGxleENvbG9yOmZ1bmN0aW9uKGEsYixkKXt2YXIgRD10aGlzLnJlbmRlcmVyLG0sZSx3LE4sayxsLGcscix4LHAsSyxKPVtdLFQ7Yy5maXJlRXZlbnQodGhpcy5yZW5kZXJlcixcblwiY29tcGxleENvbG9yXCIse2FyZ3M6YXJndW1lbnRzfSxmdW5jdGlvbigpe2EucmFkaWFsR3JhZGllbnQ/ZT1cInJhZGlhbEdyYWRpZW50XCI6YS5saW5lYXJHcmFkaWVudCYmKGU9XCJsaW5lYXJHcmFkaWVudFwiKTtlJiYodz1hW2VdLGs9RC5ncmFkaWVudHMsZz1hLnN0b3BzLHA9ZC5yYWRpYWxSZWZlcmVuY2Usdih3KSYmKGFbZV09dz17eDE6d1swXSx5MTp3WzFdLHgyOndbMl0seTI6d1szXSxncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0pLFwicmFkaWFsR3JhZGllbnRcIj09PWUmJnAmJiFHKHcuZ3JhZGllbnRVbml0cykmJihOPXcsdz1BKHcsRC5nZXRSYWRpYWxBdHRyKHAsTikse2dyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwifSkpLGgodyxmdW5jdGlvbihhLGIpe1wiaWRcIiE9PWImJkoucHVzaChiLGEpfSksaChnLGZ1bmN0aW9uKGEpe0oucHVzaChhKX0pLEo9Si5qb2luKFwiLFwiKSxrW0pdP0s9a1tKXS5hdHRyKFwiaWRcIik6KHcuaWQ9Sz1jLnVuaXF1ZUtleSgpLGtbSl09bD1cbkQuY3JlYXRlRWxlbWVudChlKS5hdHRyKHcpLmFkZChELmRlZnMpLGwucmFkQXR0cj1OLGwuc3RvcHM9W10sZy5mb3JFYWNoKGZ1bmN0aW9uKGEpezA9PT1hWzFdLmluZGV4T2YoXCJyZ2JhXCIpPyhtPWMuY29sb3IoYVsxXSkscj1tLmdldChcInJnYlwiKSx4PW0uZ2V0KFwiYVwiKSk6KHI9YVsxXSx4PTEpO2E9RC5jcmVhdGVFbGVtZW50KFwic3RvcFwiKS5hdHRyKHtvZmZzZXQ6YVswXSxcInN0b3AtY29sb3JcIjpyLFwic3RvcC1vcGFjaXR5XCI6eH0pLmFkZChsKTtsLnN0b3BzLnB1c2goYSl9KSksVD1cInVybChcIitELnVybCtcIiNcIitLK1wiKVwiLGQuc2V0QXR0cmlidXRlKGIsVCksZC5ncmFkaWVudD1KLGEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gVH0pfSl9LGFwcGx5VGV4dE91dGxpbmU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50LEQ7LTEhPT1hLmluZGV4T2YoXCJjb250cmFzdFwiKSYmKGE9YS5yZXBsYWNlKC9jb250cmFzdC9nLHRoaXMucmVuZGVyZXIuZ2V0Q29udHJhc3QoYi5zdHlsZS5maWxsKSkpO1xuYT1hLnNwbGl0KFwiIFwiKTt2YXIgZD1hW2EubGVuZ3RoLTFdO2lmKChEPWFbMF0pJiZcIm5vbmVcIiE9PUQmJmMuc3ZnKXt0aGlzLmZha2VUUz0hMDthPVtdLnNsaWNlLmNhbGwoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRzcGFuXCIpKTt0aGlzLnlTZXR0ZXI9dGhpcy54U2V0dGVyO0Q9RC5yZXBsYWNlKC8oXltcXGRcXC5dKykoLio/KSQvZyxmdW5jdGlvbihhLGIsRCl7cmV0dXJuIDIqYitEfSk7dGhpcy5yZW1vdmVUZXh0T3V0bGluZShhKTt2YXIgbT1iLmZpcnN0Q2hpbGQ7YS5mb3JFYWNoKGZ1bmN0aW9uKGEsZSl7MD09PWUmJihhLnNldEF0dHJpYnV0ZShcInhcIixiLmdldEF0dHJpYnV0ZShcInhcIikpLGU9Yi5nZXRBdHRyaWJ1dGUoXCJ5XCIpLGEuc2V0QXR0cmlidXRlKFwieVwiLGV8fDApLG51bGw9PT1lJiZiLnNldEF0dHJpYnV0ZShcInlcIiwwKSk7YT1hLmNsb25lTm9kZSgxKTtGKGEse1wiY2xhc3NcIjpcImhpZ2hjaGFydHMtdGV4dC1vdXRsaW5lXCIsZmlsbDpkLHN0cm9rZTpkLFwic3Ryb2tlLXdpZHRoXCI6RCxcblwic3Ryb2tlLWxpbmVqb2luXCI6XCJyb3VuZFwifSk7Yi5pbnNlcnRCZWZvcmUoYSxtKX0pfX0scmVtb3ZlVGV4dE91dGxpbmU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEubGVuZ3RoLEQ7Yi0tOylEPWFbYl0sXCJoaWdoY2hhcnRzLXRleHQtb3V0bGluZVwiPT09RC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSYmQihhLHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZChEKSl9LHN5bWJvbEN1c3RvbUF0dHJpYnM6XCJ4IHkgd2lkdGggaGVpZ2h0IHIgc3RhcnQgZW5kIGlubmVyUiBhbmNob3JYIGFuY2hvclkgcm91bmRlZFwiLnNwbGl0KFwiIFwiKSxhdHRyOmZ1bmN0aW9uKGEsYixkLGUpe3ZhciBEPXRoaXMuZWxlbWVudCxtLHc9dGhpcyxOLGssbD10aGlzLnN5bWJvbEN1c3RvbUF0dHJpYnM7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBhJiZ2b2lkIDAhPT1iKXt2YXIgZz1hO2E9e307YVtnXT1ifVwic3RyaW5nXCI9PT10eXBlb2YgYT93PSh0aGlzW2ErXCJHZXR0ZXJcIl18fHRoaXMuX2RlZmF1bHRHZXR0ZXIpLmNhbGwodGhpcyxcbmEsRCk6KGgoYSxmdW5jdGlvbihiLGQpe049ITE7ZXx8Syh0aGlzLGQpO3RoaXMuc3ltYm9sTmFtZSYmLTEhPT1jLmluQXJyYXkoZCxsKSYmKG18fCh0aGlzLnN5bWJvbEF0dHIoYSksbT0hMCksTj0hMCk7IXRoaXMucm90YXRpb258fFwieFwiIT09ZCYmXCJ5XCIhPT1kfHwodGhpcy5kb1RyYW5zZm9ybT0hMCk7Tnx8KGs9dGhpc1tkK1wiU2V0dGVyXCJdfHx0aGlzLl9kZWZhdWx0U2V0dGVyLGsuY2FsbCh0aGlzLGIsZCxEKSwhdGhpcy5zdHlsZWRNb2RlJiZ0aGlzLnNoYWRvd3MmJi9eKHdpZHRofGhlaWdodHx2aXNpYmlsaXR5fHh8eXxkfHRyYW5zZm9ybXxjeHxjeXxyKSQvLnRlc3QoZCkmJnRoaXMudXBkYXRlU2hhZG93cyhkLGIsaykpfSx0aGlzKSx0aGlzLmFmdGVyU2V0dGVycygpKTtkJiZkLmNhbGwodGhpcyk7cmV0dXJuIHd9LGFmdGVyU2V0dGVyczpmdW5jdGlvbigpe3RoaXMuZG9UcmFuc2Zvcm0mJih0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpLHRoaXMuZG9UcmFuc2Zvcm09ITEpfSx1cGRhdGVTaGFkb3dzOmZ1bmN0aW9uKGEsXG5iLGQpe2Zvcih2YXIgRD10aGlzLnNoYWRvd3MsZT1ELmxlbmd0aDtlLS07KWQuY2FsbChEW2VdLFwiaGVpZ2h0XCI9PT1hP01hdGgubWF4KGItKERbZV0uY3V0SGVpZ2h0fHwwKSwwKTpcImRcIj09PWE/dGhpcy5kOmIsYSxEW2VdKX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgRD1iP1wiXCI6dGhpcy5hdHRyKFwiY2xhc3NcIil8fFwiXCI7YT0oYXx8XCJcIikuc3BsaXQoLyAvZykucmVkdWNlKGZ1bmN0aW9uKGEsYil7LTE9PT1ELmluZGV4T2YoYikmJmEucHVzaChiKTtyZXR1cm4gYX0sRD9bRF06W10pLmpvaW4oXCIgXCIpO2EhPT1EJiZ0aGlzLmF0dHIoXCJjbGFzc1wiLGEpO3JldHVybiB0aGlzfSxoYXNDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4tMSE9PSh0aGlzLmF0dHIoXCJjbGFzc1wiKXx8XCJcIikuc3BsaXQoXCIgXCIpLmluZGV4T2YoYSl9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmF0dHIoXCJjbGFzc1wiLCh0aGlzLmF0dHIoXCJjbGFzc1wiKXx8XCJcIikucmVwbGFjZSh5KGEpP25ldyBSZWdFeHAoXCIgP1wiK1xuYStcIiA/XCIpOmEsXCJcIikpfSxzeW1ib2xBdHRyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7XCJ4IHkgciBzdGFydCBlbmQgd2lkdGggaGVpZ2h0IGlubmVyUiBhbmNob3JYIGFuY2hvclkgY2xvY2t3aXNlXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oRCl7YltEXT1uKGFbRF0sYltEXSl9KTtiLmF0dHIoe2Q6Yi5yZW5kZXJlci5zeW1ib2xzW2Iuc3ltYm9sTmFtZV0oYi54LGIueSxiLndpZHRoLGIuaGVpZ2h0LGIpfSl9LGNsaXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXR0cihcImNsaXAtcGF0aFwiLGE/XCJ1cmwoXCIrdGhpcy5yZW5kZXJlci51cmwrXCIjXCIrYS5pZCtcIilcIjpcIm5vbmVcIil9LGNyaXNwOmZ1bmN0aW9uKGEsYil7Yj1ifHxhLnN0cm9rZVdpZHRofHwwO3ZhciBEPU1hdGgucm91bmQoYiklMi8yO2EueD1NYXRoLmZsb29yKGEueHx8dGhpcy54fHwwKStEO2EueT1NYXRoLmZsb29yKGEueXx8dGhpcy55fHwwKStEO2Eud2lkdGg9TWF0aC5mbG9vcigoYS53aWR0aHx8dGhpcy53aWR0aHx8XG4wKS0yKkQpO2EuaGVpZ2h0PU1hdGguZmxvb3IoKGEuaGVpZ2h0fHx0aGlzLmhlaWdodHx8MCktMipEKTtHKGEuc3Ryb2tlV2lkdGgpJiYoYS5zdHJva2VXaWR0aD1iKTtyZXR1cm4gYX0sY3NzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc3R5bGVzLEQ9e30sZD10aGlzLmVsZW1lbnQsZT1cIlwiLG09IWIsdz1bXCJ0ZXh0T3V0bGluZVwiLFwidGV4dE92ZXJmbG93XCIsXCJ3aWR0aFwiXTthJiZhLmNvbG9yJiYoYS5maWxsPWEuY29sb3IpO2ImJmgoYSxmdW5jdGlvbihhLGQpe2EhPT1iW2RdJiYoRFtkXT1hLG09ITApfSk7aWYobSl7YiYmKGE9dChiLEQpKTtpZihhKWlmKG51bGw9PT1hLndpZHRofHxcImF1dG9cIj09PWEud2lkdGgpZGVsZXRlIHRoaXMudGV4dFdpZHRoO2Vsc2UgaWYoXCJ0ZXh0XCI9PT1kLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJmEud2lkdGgpdmFyIGs9dGhpcy50ZXh0V2lkdGg9cShhLndpZHRoKTt0aGlzLnN0eWxlcz1hO2smJiFKJiZ0aGlzLnJlbmRlcmVyLmZvckV4cG9ydCYmZGVsZXRlIGEud2lkdGg7XG5pZihkLm5hbWVzcGFjZVVSST09PXRoaXMuU1ZHX05TKXt2YXIgZz1mdW5jdGlvbihhLGIpe3JldHVyblwiLVwiK2IudG9Mb3dlckNhc2UoKX07aChhLGZ1bmN0aW9uKGEsYil7LTE9PT13LmluZGV4T2YoYikmJihlKz1iLnJlcGxhY2UoLyhbQS1aXSkvZyxnKStcIjpcIithK1wiO1wiKX0pO2UmJkYoZCxcInN0eWxlXCIsZSl9ZWxzZSBsKGQsYSk7dGhpcy5hZGRlZCYmKFwidGV4dFwiPT09dGhpcy5lbGVtZW50Lm5vZGVOYW1lJiZ0aGlzLnJlbmRlcmVyLmJ1aWxkVGV4dCh0aGlzKSxhJiZhLnRleHRPdXRsaW5lJiZ0aGlzLmFwcGx5VGV4dE91dGxpbmUoYS50ZXh0T3V0bGluZSkpfXJldHVybiB0aGlzfSxnZXRTdHlsZTpmdW5jdGlvbihhKXtyZXR1cm4gUS5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudHx8dGhpcyxcIlwiKS5nZXRQcm9wZXJ0eVZhbHVlKGEpfSxzdHJva2VXaWR0aDpmdW5jdGlvbigpe2lmKCF0aGlzLnJlbmRlcmVyLnN0eWxlZE1vZGUpcmV0dXJuIHRoaXNbXCJzdHJva2Utd2lkdGhcIl18fFxuMDt2YXIgYT10aGlzLmdldFN0eWxlKFwic3Ryb2tlLXdpZHRoXCIpO2lmKGEuaW5kZXhPZihcInB4XCIpPT09YS5sZW5ndGgtMilhPXEoYSk7ZWxzZXt2YXIgYj1wLmNyZWF0ZUVsZW1lbnROUyhVLFwicmVjdFwiKTtGKGIse3dpZHRoOmEsXCJzdHJva2Utd2lkdGhcIjowfSk7dGhpcy5lbGVtZW50LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoYik7YT1iLmdldEJCb3goKS53aWR0aDtiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYil9cmV0dXJuIGF9LG9uOmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcyxEPWQuZWxlbWVudDt1JiZcImNsaWNrXCI9PT1hPyhELm9udG91Y2hzdGFydD1mdW5jdGlvbihhKXtkLnRvdWNoRXZlbnRGaXJlZD1EYXRlLm5vdygpO2EucHJldmVudERlZmF1bHQoKTtiLmNhbGwoRCxhKX0sRC5vbmNsaWNrPWZ1bmN0aW9uKGEpeygtMT09PVEubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiQW5kcm9pZFwiKXx8MTEwMDxEYXRlLm5vdygpLShkLnRvdWNoRXZlbnRGaXJlZHx8MCkpJiZiLmNhbGwoRCxcbmEpfSk6RFtcIm9uXCIrYV09YjtyZXR1cm4gdGhpc30sc2V0UmFkaWFsUmVmZXJlbmNlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmVuZGVyZXIuZ3JhZGllbnRzW3RoaXMuZWxlbWVudC5ncmFkaWVudF07dGhpcy5lbGVtZW50LnJhZGlhbFJlZmVyZW5jZT1hO2ImJmIucmFkQXR0ciYmYi5hbmltYXRlKHRoaXMucmVuZGVyZXIuZ2V0UmFkaWFsQXR0cihhLGIucmFkQXR0cikpO3JldHVybiB0aGlzfSx0cmFuc2xhdGU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5hdHRyKHt0cmFuc2xhdGVYOmEsdHJhbnNsYXRlWTpifSl9LGludmVydDpmdW5jdGlvbihhKXt0aGlzLmludmVydGVkPWE7dGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtyZXR1cm4gdGhpc30sdXBkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50cmFuc2xhdGVYfHwwLGI9dGhpcy50cmFuc2xhdGVZfHwwLGQ9dGhpcy5zY2FsZVgsZT10aGlzLnNjYWxlWSxtPXRoaXMuaW52ZXJ0ZWQsdz10aGlzLnJvdGF0aW9uLGs9XG50aGlzLm1hdHJpeCxsPXRoaXMuZWxlbWVudDttJiYoYSs9dGhpcy53aWR0aCxiKz10aGlzLmhlaWdodCk7YT1bXCJ0cmFuc2xhdGUoXCIrYStcIixcIitiK1wiKVwiXTtHKGspJiZhLnB1c2goXCJtYXRyaXgoXCIray5qb2luKFwiLFwiKStcIilcIik7bT9hLnB1c2goXCJyb3RhdGUoOTApIHNjYWxlKC0xLDEpXCIpOncmJmEucHVzaChcInJvdGF0ZShcIit3K1wiIFwiK24odGhpcy5yb3RhdGlvbk9yaWdpblgsbC5nZXRBdHRyaWJ1dGUoXCJ4XCIpLDApK1wiIFwiK24odGhpcy5yb3RhdGlvbk9yaWdpblksbC5nZXRBdHRyaWJ1dGUoXCJ5XCIpfHwwKStcIilcIik7KEcoZCl8fEcoZSkpJiZhLnB1c2goXCJzY2FsZShcIituKGQsMSkrXCIgXCIrbihlLDEpK1wiKVwiKTthLmxlbmd0aCYmbC5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIixhLmpvaW4oXCIgXCIpKX0sdG9Gcm9udDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudDthLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoYSk7cmV0dXJuIHRoaXN9LGFsaWduOmZ1bmN0aW9uKGEsYixkKXt2YXIgZSxcbm09e307dmFyIEQ9dGhpcy5yZW5kZXJlcjt2YXIgdz1ELmFsaWduZWRPYmplY3RzO3ZhciBrLGw7aWYoYSl7aWYodGhpcy5hbGlnbk9wdGlvbnM9YSx0aGlzLmFsaWduQnlUcmFuc2xhdGU9YiwhZHx8eShkKSl0aGlzLmFsaWduVG89ZT1kfHxcInJlbmRlcmVyXCIsQih3LHRoaXMpLHcucHVzaCh0aGlzKSxkPW51bGx9ZWxzZSBhPXRoaXMuYWxpZ25PcHRpb25zLGI9dGhpcy5hbGlnbkJ5VHJhbnNsYXRlLGU9dGhpcy5hbGlnblRvO2Q9bihkLERbZV0sRCk7ZT1hLmFsaWduO0Q9YS52ZXJ0aWNhbEFsaWduO3c9KGQueHx8MCkrKGEueHx8MCk7dmFyIE49KGQueXx8MCkrKGEueXx8MCk7XCJyaWdodFwiPT09ZT9rPTE6XCJjZW50ZXJcIj09PWUmJihrPTIpO2smJih3Kz0oZC53aWR0aC0oYS53aWR0aHx8MCkpL2spO21bYj9cInRyYW5zbGF0ZVhcIjpcInhcIl09TWF0aC5yb3VuZCh3KTtcImJvdHRvbVwiPT09RD9sPTE6XCJtaWRkbGVcIj09PUQmJihsPTIpO2wmJihOKz0oZC5oZWlnaHQtKGEuaGVpZ2h0fHwwKSkvXG5sKTttW2I/XCJ0cmFuc2xhdGVZXCI6XCJ5XCJdPU1hdGgucm91bmQoTik7dGhpc1t0aGlzLnBsYWNlZD9cImFuaW1hdGVcIjpcImF0dHJcIl0obSk7dGhpcy5wbGFjZWQ9ITA7dGhpcy5hbGlnbkF0dHI9bTtyZXR1cm4gdGhpc30sZ2V0QkJveDpmdW5jdGlvbihhLGIpe3ZhciBkLGU9dGhpcy5yZW5kZXJlcixtPXRoaXMuZWxlbWVudCxEPXRoaXMuc3R5bGVzLHc9dGhpcy50ZXh0U3RyLGssbD1lLmNhY2hlLE49ZS5jYWNoZUtleXMsZz1tLm5hbWVzcGFjZVVSST09PXRoaXMuU1ZHX05TO2I9bihiLHRoaXMucm90YXRpb24sMCk7dmFyIHI9ZS5zdHlsZWRNb2RlP20mJk8ucHJvdG90eXBlLmdldFN0eWxlLmNhbGwobSxcImZvbnQtc2l6ZVwiKTpEJiZELmZvbnRTaXplO2lmKEcodykpe3ZhciBjPXcudG9TdHJpbmcoKTstMT09PWMuaW5kZXhPZihcIjxcIikmJihjPWMucmVwbGFjZSgvWzAtOV0vZyxcIjBcIikpO2MrPVtcIlwiLGIscix0aGlzLnRleHRXaWR0aCxEJiZELnRleHRPdmVyZmxvd10uam9pbigpfWMmJiFhJiZcbihkPWxbY10pO2lmKCFkKXtpZihnfHxlLmZvckV4cG9ydCl7dHJ5eyhrPXRoaXMuZmFrZVRTJiZmdW5jdGlvbihhKXtbXS5mb3JFYWNoLmNhbGwobS5xdWVyeVNlbGVjdG9yQWxsKFwiLmhpZ2hjaGFydHMtdGV4dC1vdXRsaW5lXCIpLGZ1bmN0aW9uKGIpe2Iuc3R5bGUuZGlzcGxheT1hfSl9KSYmayhcIm5vbmVcIiksZD1tLmdldEJCb3g/dCh7fSxtLmdldEJCb3goKSk6e3dpZHRoOm0ub2Zmc2V0V2lkdGgsaGVpZ2h0Om0ub2Zmc2V0SGVpZ2h0fSxrJiZrKFwiXCIpfWNhdGNoKGFhKXtcIlwifWlmKCFkfHwwPmQud2lkdGgpZD17d2lkdGg6MCxoZWlnaHQ6MH19ZWxzZSBkPXRoaXMuaHRtbEdldEJCb3goKTtlLmlzU1ZHJiYoYT1kLndpZHRoLGU9ZC5oZWlnaHQsZyYmKGQuaGVpZ2h0PWU9e1wiMTFweCwxN1wiOjE0LFwiMTNweCwyMFwiOjE2fVtEJiZELmZvbnRTaXplK1wiLFwiK01hdGgucm91bmQoZSldfHxlKSxiJiYoRD1iKkUsZC53aWR0aD1NYXRoLmFicyhlKk1hdGguc2luKEQpKStNYXRoLmFicyhhKk1hdGguY29zKEQpKSxcbmQuaGVpZ2h0PU1hdGguYWJzKGUqTWF0aC5jb3MoRCkpK01hdGguYWJzKGEqTWF0aC5zaW4oRCkpKSk7aWYoYyYmMDxkLmhlaWdodCl7Zm9yKDsyNTA8Ti5sZW5ndGg7KWRlbGV0ZSBsW04uc2hpZnQoKV07bFtjXXx8Ti5wdXNoKGMpO2xbY109ZH19cmV0dXJuIGR9LHNob3c6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXR0cih7dmlzaWJpbGl0eTphP1wiaW5oZXJpdFwiOlwidmlzaWJsZVwifSl9LGhpZGU6ZnVuY3Rpb24oYSl7YT90aGlzLmF0dHIoe3k6LTk5OTl9KTp0aGlzLmF0dHIoe3Zpc2liaWxpdHk6XCJoaWRkZW5cIn0pO3JldHVybiB0aGlzfSxmYWRlT3V0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7Yi5hbmltYXRlKHtvcGFjaXR5OjB9LHtkdXJhdGlvbjphfHwxNTAsY29tcGxldGU6ZnVuY3Rpb24oKXtiLmF0dHIoe3k6LTk5OTl9KX19KX0sYWRkOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmVuZGVyZXIsZD10aGlzLmVsZW1lbnQ7YSYmKHRoaXMucGFyZW50R3JvdXA9YSk7dGhpcy5wYXJlbnRJbnZlcnRlZD1cbmEmJmEuaW52ZXJ0ZWQ7dm9pZCAwIT09dGhpcy50ZXh0U3RyJiZiLmJ1aWxkVGV4dCh0aGlzKTt0aGlzLmFkZGVkPSEwO2lmKCFhfHxhLmhhbmRsZVp8fHRoaXMuekluZGV4KXZhciBlPXRoaXMuekluZGV4U2V0dGVyKCk7ZXx8KGE/YS5lbGVtZW50OmIuYm94KS5hcHBlbmRDaGlsZChkKTtpZih0aGlzLm9uQWRkKXRoaXMub25BZGQoKTtyZXR1cm4gdGhpc30sc2FmZVJlbW92ZUNoaWxkOmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtiJiZiLnJlbW92ZUNoaWxkKGEpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuZWxlbWVudHx8e30sZD1hLnJlbmRlcmVyLGU9ZC5pc1NWRyYmXCJTUEFOXCI9PT1iLm5vZGVOYW1lJiZhLnBhcmVudEdyb3VwLG09Yi5vd25lclNWR0VsZW1lbnQsdz1hLmNsaXBQYXRoO2Iub25jbGljaz1iLm9ubW91c2VvdXQ9Yi5vbm1vdXNlb3Zlcj1iLm9ubW91c2Vtb3ZlPWIucG9pbnQ9bnVsbDtLKGEpO3cmJm0mJihbXS5mb3JFYWNoLmNhbGwobS5xdWVyeVNlbGVjdG9yQWxsKFwiW2NsaXAtcGF0aF0sW0NMSVAtUEFUSF1cIiksXG5mdW5jdGlvbihhKXstMTxhLmdldEF0dHJpYnV0ZShcImNsaXAtcGF0aFwiKS5pbmRleE9mKHcuZWxlbWVudC5pZCkmJmEucmVtb3ZlQXR0cmlidXRlKFwiY2xpcC1wYXRoXCIpfSksYS5jbGlwUGF0aD13LmRlc3Ryb3koKSk7aWYoYS5zdG9wcyl7Zm9yKG09MDttPGEuc3RvcHMubGVuZ3RoO20rKylhLnN0b3BzW21dPWEuc3RvcHNbbV0uZGVzdHJveSgpO2Euc3RvcHM9bnVsbH1hLnNhZmVSZW1vdmVDaGlsZChiKTtmb3IoZC5zdHlsZWRNb2RlfHxhLmRlc3Ryb3lTaGFkb3dzKCk7ZSYmZS5kaXYmJjA9PT1lLmRpdi5jaGlsZE5vZGVzLmxlbmd0aDspYj1lLnBhcmVudEdyb3VwLGEuc2FmZVJlbW92ZUNoaWxkKGUuZGl2KSxkZWxldGUgZS5kaXYsZT1iO2EuYWxpZ25UbyYmQihkLmFsaWduZWRPYmplY3RzLGEpO2goYSxmdW5jdGlvbihiLGQpe2FbZF0mJmFbZF0ucGFyZW50R3JvdXA9PT1hJiZhW2RdLmRlc3Ryb3kmJmFbZF0uZGVzdHJveSgpO2RlbGV0ZSBhW2RdfSl9LHNoYWRvdzpmdW5jdGlvbihhLFxuYixkKXt2YXIgZT1bXSxtLHc9dGhpcy5lbGVtZW50O2lmKCFhKXRoaXMuZGVzdHJveVNoYWRvd3MoKTtlbHNlIGlmKCF0aGlzLnNoYWRvd3Mpe3ZhciBEPW4oYS53aWR0aCwzKTt2YXIgaz0oYS5vcGFjaXR5fHwuMTUpL0Q7dmFyIGw9dGhpcy5wYXJlbnRJbnZlcnRlZD9cIigtMSwtMSlcIjpcIihcIituKGEub2Zmc2V0WCwxKStcIiwgXCIrbihhLm9mZnNldFksMSkrXCIpXCI7Zm9yKG09MTttPD1EO20rKyl7dmFyIGc9dy5jbG9uZU5vZGUoMCk7dmFyIHI9MipEKzEtMiptO0YoZyx7c3Ryb2tlOmEuY29sb3J8fFwiIzAwMDAwMFwiLFwic3Ryb2tlLW9wYWNpdHlcIjprKm0sXCJzdHJva2Utd2lkdGhcIjpyLHRyYW5zZm9ybTpcInRyYW5zbGF0ZVwiK2wsZmlsbDpcIm5vbmVcIn0pO2cuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwoZy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikrXCIgaGlnaGNoYXJ0cy1zaGFkb3dcIik7ZCYmKEYoZyxcImhlaWdodFwiLE1hdGgubWF4KEYoZyxcImhlaWdodFwiKS1yLDApKSxnLmN1dEhlaWdodD1yKTtcbmI/Yi5lbGVtZW50LmFwcGVuZENoaWxkKGcpOncucGFyZW50Tm9kZSYmdy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLHcpO2UucHVzaChnKX10aGlzLnNoYWRvd3M9ZX1yZXR1cm4gdGhpc30sZGVzdHJveVNoYWRvd3M6ZnVuY3Rpb24oKXsodGhpcy5zaGFkb3dzfHxbXSkuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLnNhZmVSZW1vdmVDaGlsZChhKX0sdGhpcyk7dGhpcy5zaGFkb3dzPXZvaWQgMH0seEdldHRlcjpmdW5jdGlvbihhKXtcImNpcmNsZVwiPT09dGhpcy5lbGVtZW50Lm5vZGVOYW1lJiYoXCJ4XCI9PT1hP2E9XCJjeFwiOlwieVwiPT09YSYmKGE9XCJjeVwiKSk7cmV0dXJuIHRoaXMuX2RlZmF1bHRHZXR0ZXIoYSl9LF9kZWZhdWx0R2V0dGVyOmZ1bmN0aW9uKGEpe2E9bih0aGlzW2ErXCJWYWx1ZVwiXSx0aGlzW2FdLHRoaXMuZWxlbWVudD90aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKGEpOm51bGwsMCk7L15bXFwtMC05XFwuXSskLy50ZXN0KGEpJiYoYT1wYXJzZUZsb2F0KGEpKTtyZXR1cm4gYX0sXG5kU2V0dGVyOmZ1bmN0aW9uKGEsYixkKXthJiZhLmpvaW4mJihhPWEuam9pbihcIiBcIikpOy8oTmFOfCB7Mn18XiQpLy50ZXN0KGEpJiYoYT1cIk0gMCAwXCIpO3RoaXNbYl0hPT1hJiYoZC5zZXRBdHRyaWJ1dGUoYixhKSx0aGlzW2JdPWEpfSxkYXNoc3R5bGVTZXR0ZXI6ZnVuY3Rpb24oYSl7dmFyIGIsZD10aGlzW1wic3Ryb2tlLXdpZHRoXCJdO1wiaW5oZXJpdFwiPT09ZCYmKGQ9MSk7aWYoYT1hJiZhLnRvTG93ZXJDYXNlKCkpe2E9YS5yZXBsYWNlKFwic2hvcnRkYXNoZG90ZG90XCIsXCIzLDEsMSwxLDEsMSxcIikucmVwbGFjZShcInNob3J0ZGFzaGRvdFwiLFwiMywxLDEsMVwiKS5yZXBsYWNlKFwic2hvcnRkb3RcIixcIjEsMSxcIikucmVwbGFjZShcInNob3J0ZGFzaFwiLFwiMywxLFwiKS5yZXBsYWNlKFwibG9uZ2Rhc2hcIixcIjgsMyxcIikucmVwbGFjZSgvZG90L2csXCIxLDMsXCIpLnJlcGxhY2UoXCJkYXNoXCIsXCI0LDMsXCIpLnJlcGxhY2UoLywkLyxcIlwiKS5zcGxpdChcIixcIik7Zm9yKGI9YS5sZW5ndGg7Yi0tOylhW2JdPXEoYVtiXSkqXG5kO2E9YS5qb2luKFwiLFwiKS5yZXBsYWNlKC9OYU4vZyxcIm5vbmVcIik7dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcInN0cm9rZS1kYXNoYXJyYXlcIixhKX19LGFsaWduU2V0dGVyOmZ1bmN0aW9uKGEpe3ZhciBiPXtsZWZ0Olwic3RhcnRcIixjZW50ZXI6XCJtaWRkbGVcIixyaWdodDpcImVuZFwifTtiW2FdJiYodGhpcy5hbGlnblZhbHVlPWEsdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcInRleHQtYW5jaG9yXCIsYlthXSkpfSxvcGFjaXR5U2V0dGVyOmZ1bmN0aW9uKGEsYixkKXt0aGlzW2JdPWE7ZC5zZXRBdHRyaWJ1dGUoYixhKX0sdGl0bGVTZXR0ZXI6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGl0bGVcIilbMF07Ynx8KGI9cC5jcmVhdGVFbGVtZW50TlModGhpcy5TVkdfTlMsXCJ0aXRsZVwiKSx0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYikpO2IuZmlyc3RDaGlsZCYmYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpO2IuYXBwZW5kQ2hpbGQocC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcobihhLFxuXCJcIikpLnJlcGxhY2UoLzxbXj5dKj4vZyxcIlwiKS5yZXBsYWNlKC8mbHQ7L2csXCI8XCIpLnJlcGxhY2UoLyZndDsvZyxcIj5cIikpKX0sdGV4dFNldHRlcjpmdW5jdGlvbihhKXthIT09dGhpcy50ZXh0U3RyJiYoZGVsZXRlIHRoaXMuYkJveCxkZWxldGUgdGhpcy50ZXh0UHhMZW5ndGgsdGhpcy50ZXh0U3RyPWEsdGhpcy5hZGRlZCYmdGhpcy5yZW5kZXJlci5idWlsZFRleHQodGhpcykpfSxzZXRUZXh0UGF0aDpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuZWxlbWVudCxlPXt0ZXh0QW5jaG9yOlwidGV4dC1hbmNob3JcIn0sbT0hMSxEPXRoaXMudGV4dFBhdGhXcmFwcGVyLGs9IUQ7Yj1BKCEwLHtlbmFibGVkOiEwLGF0dHJpYnV0ZXM6e2R5Oi01LHN0YXJ0T2Zmc2V0OlwiNTAlXCIsdGV4dEFuY2hvcjpcIm1pZGRsZVwifX0sYik7dmFyIGw9Yi5hdHRyaWJ1dGVzO2lmKGEmJmImJmIuZW5hYmxlZCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMucGFkZGluZyYmKGwuZHg9LXRoaXMub3B0aW9ucy5wYWRkaW5nKTtcbkR8fCh0aGlzLnRleHRQYXRoV3JhcHBlcj1EPXRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudChcInRleHRQYXRoXCIpLG09ITApO3ZhciBnPUQuZWxlbWVudDsoYj1hLmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikpfHxhLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaWRcIixiPWMudW5pcXVlS2V5KCkpO2lmKGspZm9yKGE9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRzcGFuXCIpO2EubGVuZ3RoOylhWzBdLnNldEF0dHJpYnV0ZShcInlcIiwwKSxnLmFwcGVuZENoaWxkKGFbMF0pO20mJkQuYWRkKHtlbGVtZW50OnRoaXMudGV4dD90aGlzLnRleHQuZWxlbWVudDpkfSk7Zy5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcImhyZWZcIix0aGlzLnJlbmRlcmVyLnVybCtcIiNcIitiKTtHKGwuZHkpJiYoZy5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZShcImR5XCIsbC5keSksZGVsZXRlIGwuZHkpO0cobC5keCkmJihnLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKFwiZHhcIixsLmR4KSxcbmRlbGV0ZSBsLmR4KTtoKGwsZnVuY3Rpb24oYSxiKXtnLnNldEF0dHJpYnV0ZShlW2JdfHxiLGEpfSk7ZC5yZW1vdmVBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIik7dGhpcy5yZW1vdmVUZXh0T3V0bGluZS5jYWxsKEQsW10uc2xpY2UuY2FsbChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidHNwYW5cIikpKTt0aGlzLnRleHQmJiF0aGlzLnJlbmRlcmVyLnN0eWxlZE1vZGUmJnRoaXMuYXR0cih7ZmlsbDpcIm5vbmVcIixcInN0cm9rZS13aWR0aFwiOjB9KTt0aGlzLmFwcGx5VGV4dE91dGxpbmU9dGhpcy51cGRhdGVUcmFuc2Zvcm09d31lbHNlIEQmJihkZWxldGUgdGhpcy51cGRhdGVUcmFuc2Zvcm0sZGVsZXRlIHRoaXMuYXBwbHlUZXh0T3V0bGluZSx0aGlzLmRlc3Ryb3lUZXh0UGF0aChkLGEpKTtyZXR1cm4gdGhpc30sZGVzdHJveVRleHRQYXRoOmZ1bmN0aW9uKGEsYil7dmFyIGQ7Yi5lbGVtZW50LnNldEF0dHJpYnV0ZShcImlkXCIsXCJcIik7Zm9yKGQ9dGhpcy50ZXh0UGF0aFdyYXBwZXIuZWxlbWVudC5jaGlsZE5vZGVzO2QubGVuZ3RoOylhLmZpcnN0Q2hpbGQuYXBwZW5kQ2hpbGQoZFswXSk7XG5hLmZpcnN0Q2hpbGQucmVtb3ZlQ2hpbGQodGhpcy50ZXh0UGF0aFdyYXBwZXIuZWxlbWVudCk7ZGVsZXRlIGIudGV4dFBhdGhXcmFwcGVyfSxmaWxsU2V0dGVyOmZ1bmN0aW9uKGEsYixkKXtcInN0cmluZ1wiPT09dHlwZW9mIGE/ZC5zZXRBdHRyaWJ1dGUoYixhKTphJiZ0aGlzLmNvbXBsZXhDb2xvcihhLGIsZCl9LHZpc2liaWxpdHlTZXR0ZXI6ZnVuY3Rpb24oYSxiLGQpe1wiaW5oZXJpdFwiPT09YT9kLnJlbW92ZUF0dHJpYnV0ZShiKTp0aGlzW2JdIT09YSYmZC5zZXRBdHRyaWJ1dGUoYixhKTt0aGlzW2JdPWF9LHpJbmRleFNldHRlcjpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMucmVuZGVyZXIsZT10aGlzLnBhcmVudEdyb3VwLG09KGV8fGQpLmVsZW1lbnR8fGQuYm94LHc9dGhpcy5lbGVtZW50LGs9ITE7ZD1tPT09ZC5ib3g7dmFyIEQ9dGhpcy5hZGRlZDt2YXIgbDtHKGEpPyh3LnNldEF0dHJpYnV0ZShcImRhdGEtei1pbmRleFwiLGEpLGE9K2EsdGhpc1tiXT09PWEmJihEPSExKSk6Ryh0aGlzW2JdKSYmXG53LnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtei1pbmRleFwiKTt0aGlzW2JdPWE7aWYoRCl7KGE9dGhpcy56SW5kZXgpJiZlJiYoZS5oYW5kbGVaPSEwKTtiPW0uY2hpbGROb2Rlcztmb3IobD1iLmxlbmd0aC0xOzA8PWwmJiFrO2wtLSl7ZT1iW2xdO0Q9ZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXotaW5kZXhcIik7dmFyIGc9IUcoRCk7aWYoZSE9PXcpaWYoMD5hJiZnJiYhZCYmIWwpbS5pbnNlcnRCZWZvcmUodyxiW2xdKSxrPSEwO2Vsc2UgaWYocShEKTw9YXx8ZyYmKCFHKGEpfHwwPD1hKSltLmluc2VydEJlZm9yZSh3LGJbbCsxXXx8bnVsbCksaz0hMH1rfHwobS5pbnNlcnRCZWZvcmUodyxiW2Q/MzowXXx8bnVsbCksaz0hMCl9cmV0dXJuIGt9LF9kZWZhdWx0U2V0dGVyOmZ1bmN0aW9uKGEsYixkKXtkLnNldEF0dHJpYnV0ZShiLGEpfX0pO08ucHJvdG90eXBlLnlHZXR0ZXI9Ty5wcm90b3R5cGUueEdldHRlcjtPLnByb3RvdHlwZS50cmFuc2xhdGVYU2V0dGVyPU8ucHJvdG90eXBlLnRyYW5zbGF0ZVlTZXR0ZXI9XG5PLnByb3RvdHlwZS5yb3RhdGlvblNldHRlcj1PLnByb3RvdHlwZS52ZXJ0aWNhbEFsaWduU2V0dGVyPU8ucHJvdG90eXBlLnJvdGF0aW9uT3JpZ2luWFNldHRlcj1PLnByb3RvdHlwZS5yb3RhdGlvbk9yaWdpbllTZXR0ZXI9Ty5wcm90b3R5cGUuc2NhbGVYU2V0dGVyPU8ucHJvdG90eXBlLnNjYWxlWVNldHRlcj1PLnByb3RvdHlwZS5tYXRyaXhTZXR0ZXI9ZnVuY3Rpb24oYSxiKXt0aGlzW2JdPWE7dGhpcy5kb1RyYW5zZm9ybT0hMH07Ty5wcm90b3R5cGVbXCJzdHJva2Utd2lkdGhTZXR0ZXJcIl09Ty5wcm90b3R5cGUuc3Ryb2tlU2V0dGVyPWZ1bmN0aW9uKGEsYixkKXt0aGlzW2JdPWE7dGhpcy5zdHJva2UmJnRoaXNbXCJzdHJva2Utd2lkdGhcIl0/KE8ucHJvdG90eXBlLmZpbGxTZXR0ZXIuY2FsbCh0aGlzLHRoaXMuc3Ryb2tlLFwic3Ryb2tlXCIsZCksZC5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIix0aGlzW1wic3Ryb2tlLXdpZHRoXCJdKSx0aGlzLmhhc1N0cm9rZT0hMCk6XCJzdHJva2Utd2lkdGhcIj09PVxuYiYmMD09PWEmJnRoaXMuaGFzU3Ryb2tlPyhkLnJlbW92ZUF0dHJpYnV0ZShcInN0cm9rZVwiKSx0aGlzLmhhc1N0cm9rZT0hMSk6dGhpcy5yZW5kZXJlci5zdHlsZWRNb2RlJiZ0aGlzW1wic3Ryb2tlLXdpZHRoXCJdJiYoZC5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIix0aGlzW1wic3Ryb2tlLXdpZHRoXCJdKSx0aGlzLmhhc1N0cm9rZT0hMCl9O2Y9Yy5TVkdSZW5kZXJlcj1mdW5jdGlvbigpe3RoaXMuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3QoZi5wcm90b3R5cGUse0VsZW1lbnQ6TyxTVkdfTlM6VSxpbml0OmZ1bmN0aW9uKGEsZCxlLG0sdyxnLHIpe3ZhciBEPXRoaXMuY3JlYXRlRWxlbWVudChcInN2Z1wiKS5hdHRyKHt2ZXJzaW9uOlwiMS4xXCIsXCJjbGFzc1wiOlwiaGlnaGNoYXJ0cy1yb290XCJ9KTtyfHxELmNzcyh0aGlzLmdldFN0eWxlKG0pKTttPUQuZWxlbWVudDthLmFwcGVuZENoaWxkKG0pO0YoYSxcImRpclwiLFwibHRyXCIpOy0xPT09YS5pbm5lckhUTUwuaW5kZXhPZihcInhtbG5zXCIpJiZcbkYobSxcInhtbG5zXCIsdGhpcy5TVkdfTlMpO3RoaXMuaXNTVkc9ITA7dGhpcy5ib3g9bTt0aGlzLmJveFdyYXBwZXI9RDt0aGlzLmFsaWduZWRPYmplY3RzPVtdO3RoaXMudXJsPShrfHx4KSYmcC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJhc2VcIikubGVuZ3RoP1EubG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF0ucmVwbGFjZSgvPFtePl0qPi9nLFwiXCIpLnJlcGxhY2UoLyhbXFwoJ1xcKV0pL2csXCJcXFxcJDFcIikucmVwbGFjZSgvIC9nLFwiJTIwXCIpOlwiXCI7dGhpcy5jcmVhdGVFbGVtZW50KFwiZGVzY1wiKS5hZGQoKS5lbGVtZW50LmFwcGVuZENoaWxkKHAuY3JlYXRlVGV4dE5vZGUoXCJDcmVhdGVkIHdpdGggSGlnaGNoYXJ0cyA3LjIuMVwiKSk7dGhpcy5kZWZzPXRoaXMuY3JlYXRlRWxlbWVudChcImRlZnNcIikuYWRkKCk7dGhpcy5hbGxvd0hUTUw9Zzt0aGlzLmZvckV4cG9ydD13O3RoaXMuc3R5bGVkTW9kZT1yO3RoaXMuZ3JhZGllbnRzPXt9O3RoaXMuY2FjaGU9e307dGhpcy5jYWNoZUtleXM9W107dGhpcy5pbWdDb3VudD1cbjA7dGhpcy5zZXRTaXplKGQsZSwhMSk7dmFyIGM7ayYmYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QmJihkPWZ1bmN0aW9uKCl7bChhLHtsZWZ0OjAsdG9wOjB9KTtjPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bChhLHtsZWZ0Ok1hdGguY2VpbChjLmxlZnQpLWMubGVmdCtcInB4XCIsdG9wOk1hdGguY2VpbChjLnRvcCktYy50b3ArXCJweFwifSl9LGQoKSx0aGlzLnVuU3ViUGl4ZWxGaXg9YihRLFwicmVzaXplXCIsZCkpfSxkZWZpbml0aW9uOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxlKXt2YXIgbTtnKGEpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHc9ZC5jcmVhdGVFbGVtZW50KGEudGFnTmFtZSksaz17fTtoKGEsZnVuY3Rpb24oYSxiKXtcInRhZ05hbWVcIiE9PWImJlwiY2hpbGRyZW5cIiE9PWImJlwidGV4dENvbnRlbnRcIiE9PWImJihrW2JdPWEpfSk7dy5hdHRyKGspO3cuYWRkKGV8fGQuZGVmcyk7YS50ZXh0Q29udGVudCYmdy5lbGVtZW50LmFwcGVuZENoaWxkKHAuY3JlYXRlVGV4dE5vZGUoYS50ZXh0Q29udGVudCkpO1xuYihhLmNoaWxkcmVufHxbXSx3KTttPXd9KTtyZXR1cm4gbX12YXIgZD10aGlzO3JldHVybiBiKGEpfSxnZXRTdHlsZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zdHlsZT10KHtmb250RmFtaWx5OidcIkx1Y2lkYSBHcmFuZGVcIiwgXCJMdWNpZGEgU2FucyBVbmljb2RlXCIsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYnLGZvbnRTaXplOlwiMTJweFwifSxhKX0sc2V0U3R5bGU6ZnVuY3Rpb24oYSl7dGhpcy5ib3hXcmFwcGVyLmNzcyh0aGlzLmdldFN0eWxlKGEpKX0saXNIaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ib3hXcmFwcGVyLmdldEJCb3goKS53aWR0aH0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZGVmczt0aGlzLmJveD1udWxsO3RoaXMuYm94V3JhcHBlcj10aGlzLmJveFdyYXBwZXIuZGVzdHJveSgpO3oodGhpcy5ncmFkaWVudHN8fHt9KTt0aGlzLmdyYWRpZW50cz1udWxsO2EmJih0aGlzLmRlZnM9YS5kZXN0cm95KCkpO3RoaXMudW5TdWJQaXhlbEZpeCYmXG50aGlzLnVuU3ViUGl4ZWxGaXgoKTtyZXR1cm4gdGhpcy5hbGlnbmVkT2JqZWN0cz1udWxsfSxjcmVhdGVFbGVtZW50OmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyB0aGlzLkVsZW1lbnQ7Yi5pbml0KHRoaXMsYSk7cmV0dXJuIGJ9LGRyYXc6dyxnZXRSYWRpYWxBdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJue2N4OmFbMF0tYVsyXS8yK2IuY3gqYVsyXSxjeTphWzFdLWFbMl0vMitiLmN5KmFbMl0scjpiLnIqYVsyXX19LHRydW5jYXRlOmZ1bmN0aW9uKGEsYixkLGUsbSx3LGspe3ZhciBsPXRoaXMsRD1hLnJvdGF0aW9uLGcscj1lPzE6MCxjPShkfHxlKS5sZW5ndGgseD1jLEo9W10sSz1mdW5jdGlvbihhKXtiLmZpcnN0Q2hpbGQmJmIucmVtb3ZlQ2hpbGQoYi5maXJzdENoaWxkKTthJiZiLmFwcGVuZENoaWxkKHAuY3JlYXRlVGV4dE5vZGUoYSkpfSxOPWZ1bmN0aW9uKHcsRCl7RD1EfHx3O2lmKHZvaWQgMD09PUpbRF0paWYoYi5nZXRTdWJTdHJpbmdMZW5ndGgpdHJ5e0pbRF09bStiLmdldFN1YlN0cmluZ0xlbmd0aCgwLFxuZT9EKzE6RCl9Y2F0Y2goYmEpe1wiXCJ9ZWxzZSBsLmdldFNwYW5XaWR0aCYmKEsoayhkfHxlLHcpKSxKW0RdPW0rbC5nZXRTcGFuV2lkdGgoYSxiKSk7cmV0dXJuIEpbRF19LEE7YS5yb3RhdGlvbj0wO3ZhciBoPU4oYi50ZXh0Q29udGVudC5sZW5ndGgpO2lmKEE9bStoPncpe2Zvcig7cjw9YzspeD1NYXRoLmNlaWwoKHIrYykvMiksZSYmKGc9ayhlLHgpKSxoPU4oeCxnJiZnLmxlbmd0aC0xKSxyPT09Yz9yPWMrMTpoPnc/Yz14LTE6cj14OzA9PT1jP0soXCJcIik6ZCYmYz09PWQubGVuZ3RoLTF8fEsoZ3x8ayhkfHxlLHgpKX1lJiZlLnNwbGljZSgwLHgpO2EuYWN0dWFsV2lkdGg9aDthLnJvdGF0aW9uPUQ7cmV0dXJuIEF9LGVzY2FwZXM6e1wiJlwiOlwiJmFtcDtcIixcIjxcIjpcIiZsdDtcIixcIj5cIjpcIiZndDtcIixcIidcIjpcIiYjMzk7XCIsJ1wiJzpcIiZxdW90O1wifSxidWlsZFRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5lbGVtZW50LGQ9dGhpcyxlPWQuZm9yRXhwb3J0LG09bihhLnRleHRTdHIsXCJcIikudG9TdHJpbmcoKSxcbnc9LTEhPT1tLmluZGV4T2YoXCI8XCIpLGs9Yi5jaGlsZE5vZGVzLEQsZz1GKGIsXCJ4XCIpLHI9YS5zdHlsZXMsYz1hLnRleHRXaWR0aCx4PXImJnIubGluZUhlaWdodCxLPXImJnIudGV4dE91dGxpbmUsQT1yJiZcImVsbGlwc2lzXCI9PT1yLnRleHRPdmVyZmxvdyx1PXImJlwibm93cmFwXCI9PT1yLndoaXRlU3BhY2UsTD1yJiZyLmZvbnRTaXplLEUsZj1rLmxlbmd0aDtyPWMmJiFhLmFkZGVkJiZ0aGlzLmJveDt2YXIgUz1mdW5jdGlvbihhKXt2YXIgbTtkLnN0eWxlZE1vZGV8fChtPS8ocHh8ZW0pJC8udGVzdChhJiZhLnN0eWxlLmZvbnRTaXplKT9hLnN0eWxlLmZvbnRTaXplOkx8fGQuc3R5bGUuZm9udFNpemV8fDEyKTtyZXR1cm4geD9xKHgpOmQuZm9udE1ldHJpY3MobSxhLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpP2E6YikuaH0sdj1mdW5jdGlvbihhLGIpe2goZC5lc2NhcGVzLGZ1bmN0aW9uKGQsbSl7YiYmLTEhPT1iLmluZGV4T2YoZCl8fChhPWEudG9TdHJpbmcoKS5yZXBsYWNlKG5ldyBSZWdFeHAoZCxcblwiZ1wiKSxtKSl9KTtyZXR1cm4gYX0sTz1mdW5jdGlvbihhLGIpe3ZhciBkPWEuaW5kZXhPZihcIjxcIik7YT1hLnN1YnN0cmluZyhkLGEuaW5kZXhPZihcIj5cIiktZCk7ZD1hLmluZGV4T2YoYitcIj1cIik7aWYoLTEhPT1kJiYoZD1kK2IubGVuZ3RoKzEsYj1hLmNoYXJBdChkKSwnXCInPT09Ynx8XCInXCI9PT1iKSlyZXR1cm4gYT1hLnN1YnN0cmluZyhkKzEpLGEuc3Vic3RyaW5nKDAsYS5pbmRleE9mKGIpKX0sUT0vPGJyLio/Pi9nO3ZhciB0PVttLEEsdSx4LEssTCxjXS5qb2luKCk7aWYodCE9PWEudGV4dENhY2hlKXtmb3IoYS50ZXh0Q2FjaGU9dDtmLS07KWIucmVtb3ZlQ2hpbGQoa1tmXSk7d3x8S3x8QXx8Y3x8LTEhPT1tLmluZGV4T2YoXCIgXCIpJiYoIXV8fFEudGVzdChtKSk/KHImJnIuYXBwZW5kQ2hpbGQoYiksdz8obT1kLnN0eWxlZE1vZGU/bS5yZXBsYWNlKC88KGJ8c3Ryb25nKT4vZywnPHNwYW4gY2xhc3M9XCJoaWdoY2hhcnRzLXN0cm9uZ1wiPicpLnJlcGxhY2UoLzwoaXxlbSk+L2csJzxzcGFuIGNsYXNzPVwiaGlnaGNoYXJ0cy1lbXBoYXNpemVkXCI+Jyk6XG5tLnJlcGxhY2UoLzwoYnxzdHJvbmcpPi9nLCc8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OmJvbGRcIj4nKS5yZXBsYWNlKC88KGl8ZW0pPi9nLCc8c3BhbiBzdHlsZT1cImZvbnQtc3R5bGU6aXRhbGljXCI+JyksbT1tLnJlcGxhY2UoLzxhL2csXCI8c3BhblwiKS5yZXBsYWNlKC88XFwvKGJ8c3Ryb25nfGl8ZW18YSk+L2csXCI8L3NwYW4+XCIpLnNwbGl0KFEpKTptPVttXSxtPW0uZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVyblwiXCIhPT1hfSksbS5mb3JFYWNoKGZ1bmN0aW9uKG0sdyl7dmFyIGs9MCxyPTA7bT1tLnJlcGxhY2UoL15cXHMrfFxccyskL2csXCJcIikucmVwbGFjZSgvPHNwYW4vZyxcInx8fDxzcGFuXCIpLnJlcGxhY2UoLzxcXC9zcGFuPi9nLFwiPC9zcGFuPnx8fFwiKTt2YXIgeD1tLnNwbGl0KFwifHx8XCIpO3guZm9yRWFjaChmdW5jdGlvbihtKXtpZihcIlwiIT09bXx8MT09PXgubGVuZ3RoKXt2YXIgSz17fSxOPXAuY3JlYXRlRWxlbWVudE5TKGQuU1ZHX05TLFwidHNwYW5cIiksaCxuOyhoPU8obSxcImNsYXNzXCIpKSYmXG5GKE4sXCJjbGFzc1wiLGgpO2lmKGg9TyhtLFwic3R5bGVcIikpaD1oLnJlcGxhY2UoLyg7fCB8Xiljb2xvcihbIDpdKS8sXCIkMWZpbGwkMlwiKSxGKE4sXCJzdHlsZVwiLGgpOyhuPU8obSxcImhyZWZcIikpJiYhZSYmKEYoTixcIm9uY2xpY2tcIiwnbG9jYXRpb24uaHJlZj1cIicrbisnXCInKSxGKE4sXCJjbGFzc1wiLFwiaGlnaGNoYXJ0cy1hbmNob3JcIiksZC5zdHlsZWRNb2RlfHxsKE4se2N1cnNvcjpcInBvaW50ZXJcIn0pKTttPXYobS5yZXBsYWNlKC88W2EtekEtWlxcL10oLnxcXG4pKj8+L2csXCJcIil8fFwiIFwiKTtpZihcIiBcIiE9PW0pe04uYXBwZW5kQ2hpbGQocC5jcmVhdGVUZXh0Tm9kZShtKSk7az9LLmR4PTA6dyYmbnVsbCE9PWcmJihLLng9Zyk7RihOLEspO2IuYXBwZW5kQ2hpbGQoTik7IWsmJkUmJighSiYmZSYmbChOLHtkaXNwbGF5OlwiYmxvY2tcIn0pLEYoTixcImR5XCIsUyhOKSkpO2lmKGMpe3ZhciBUPW0ucmVwbGFjZSgvKFteXFxeXSktL2csXCIkMS0gXCIpLnNwbGl0KFwiIFwiKTtLPSF1JiYoMTx4Lmxlbmd0aHx8XG53fHwxPFQubGVuZ3RoKTtuPTA7dmFyIGY9UyhOKTtpZihBKUQ9ZC50cnVuY2F0ZShhLE4sbSx2b2lkIDAsMCxNYXRoLm1heCgwLGMtcGFyc2VJbnQoTHx8MTIsMTApKSxmdW5jdGlvbihhLGIpe3JldHVybiBhLnN1YnN0cmluZygwLGIpK1wiXFx1MjAyNlwifSk7ZWxzZSBpZihLKWZvcig7VC5sZW5ndGg7KVQubGVuZ3RoJiYhdSYmMDxuJiYoTj1wLmNyZWF0ZUVsZW1lbnROUyhVLFwidHNwYW5cIiksRihOLHtkeTpmLHg6Z30pLGgmJkYoTixcInN0eWxlXCIsaCksTi5hcHBlbmRDaGlsZChwLmNyZWF0ZVRleHROb2RlKFQuam9pbihcIiBcIikucmVwbGFjZSgvLSAvZyxcIi1cIikpKSxiLmFwcGVuZENoaWxkKE4pKSxkLnRydW5jYXRlKGEsTixudWxsLFQsMD09PW4/cjowLGMsZnVuY3Rpb24oYSxiKXtyZXR1cm4gVC5zbGljZSgwLGIpLmpvaW4oXCIgXCIpLnJlcGxhY2UoLy0gL2csXCItXCIpfSkscj1hLmFjdHVhbFdpZHRoLG4rK31rKyt9fX0pO0U9RXx8Yi5jaGlsZE5vZGVzLmxlbmd0aH0pLEEmJkQmJmEuYXR0cihcInRpdGxlXCIsXG52KGEudGV4dFN0cixbXCImbHQ7XCIsXCImZ3Q7XCJdKSksciYmci5yZW1vdmVDaGlsZChiKSxLJiZhLmFwcGx5VGV4dE91dGxpbmUmJmEuYXBwbHlUZXh0T3V0bGluZShLKSk6Yi5hcHBlbmRDaGlsZChwLmNyZWF0ZVRleHROb2RlKHYobSkpKX19LGdldENvbnRyYXN0OmZ1bmN0aW9uKGEpe2E9ZShhKS5yZ2JhO2FbMF0qPTE7YVsxXSo9MS4yO2FbMl0qPS41O3JldHVybiA0NTk8YVswXSthWzFdK2FbMl0/XCIjMDAwMDAwXCI6XCIjRkZGRkZGXCJ9LGJ1dHRvbjpmdW5jdGlvbihhLGQsbSxlLHcsayxsLGcsYyx4KXt2YXIgRD10aGlzLmxhYmVsKGEsZCxtLGMsbnVsbCxudWxsLHgsbnVsbCxcImJ1dHRvblwiKSxwPTAsSz10aGlzLnN0eWxlZE1vZGU7RC5hdHRyKEEoe3BhZGRpbmc6OCxyOjJ9LHcpKTtpZighSyl7dz1BKHtmaWxsOlwiI2Y3ZjdmN1wiLHN0cm9rZTpcIiNjY2NjY2NcIixcInN0cm9rZS13aWR0aFwiOjEsc3R5bGU6e2NvbG9yOlwiIzMzMzMzM1wiLGN1cnNvcjpcInBvaW50ZXJcIixmb250V2VpZ2h0Olwibm9ybWFsXCJ9fSxcbncpO3ZhciBKPXcuc3R5bGU7ZGVsZXRlIHcuc3R5bGU7az1BKHcse2ZpbGw6XCIjZTZlNmU2XCJ9LGspO3ZhciBOPWsuc3R5bGU7ZGVsZXRlIGsuc3R5bGU7bD1BKHcse2ZpbGw6XCIjZTZlYmY1XCIsc3R5bGU6e2NvbG9yOlwiIzAwMDAwMFwiLGZvbnRXZWlnaHQ6XCJib2xkXCJ9fSxsKTt2YXIgaD1sLnN0eWxlO2RlbGV0ZSBsLnN0eWxlO2c9QSh3LHtzdHlsZTp7Y29sb3I6XCIjY2NjY2NjXCJ9fSxnKTt2YXIgdT1nLnN0eWxlO2RlbGV0ZSBnLnN0eWxlfWIoRC5lbGVtZW50LHI/XCJtb3VzZW92ZXJcIjpcIm1vdXNlZW50ZXJcIixmdW5jdGlvbigpezMhPT1wJiZELnNldFN0YXRlKDEpfSk7YihELmVsZW1lbnQscj9cIm1vdXNlb3V0XCI6XCJtb3VzZWxlYXZlXCIsZnVuY3Rpb24oKXszIT09cCYmRC5zZXRTdGF0ZShwKX0pO0Quc2V0U3RhdGU9ZnVuY3Rpb24oYSl7MSE9PWEmJihELnN0YXRlPXA9YSk7RC5yZW1vdmVDbGFzcygvaGlnaGNoYXJ0cy1idXR0b24tKG5vcm1hbHxob3ZlcnxwcmVzc2VkfGRpc2FibGVkKS8pLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1idXR0b24tXCIrXG5bXCJub3JtYWxcIixcImhvdmVyXCIsXCJwcmVzc2VkXCIsXCJkaXNhYmxlZFwiXVthfHwwXSk7S3x8RC5hdHRyKFt3LGssbCxnXVthfHwwXSkuY3NzKFtKLE4saCx1XVthfHwwXSl9O0t8fEQuYXR0cih3KS5jc3ModCh7Y3Vyc29yOlwiZGVmYXVsdFwifSxKKSk7cmV0dXJuIEQub24oXCJjbGlja1wiLGZ1bmN0aW9uKGEpezMhPT1wJiZlLmNhbGwoRCxhKX0pfSxjcmlzcExpbmU6ZnVuY3Rpb24oYSxiKXthWzFdPT09YVs0XSYmKGFbMV09YVs0XT1NYXRoLnJvdW5kKGFbMV0pLWIlMi8yKTthWzJdPT09YVs1XSYmKGFbMl09YVs1XT1NYXRoLnJvdW5kKGFbMl0pK2IlMi8yKTtyZXR1cm4gYX0scGF0aDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnN0eWxlZE1vZGU/e306e2ZpbGw6XCJub25lXCJ9O3YoYSk/Yi5kPWE6SChhKSYmdChiLGEpO3JldHVybiB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIpLmF0dHIoYil9LGNpcmNsZTpmdW5jdGlvbihhLGIsZCl7YT1IKGEpP2E6dm9pZCAwPT09YT97fTp7eDphLHk6YixyOmR9O1xuYj10aGlzLmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIik7Yi54U2V0dGVyPWIueVNldHRlcj1mdW5jdGlvbihhLGIsZCl7ZC5zZXRBdHRyaWJ1dGUoXCJjXCIrYixhKX07cmV0dXJuIGIuYXR0cihhKX0sYXJjOmZ1bmN0aW9uKGEsYixkLG0sZSx3KXtIKGEpPyhtPWEsYj1tLnksZD1tLnIsYT1tLngpOm09e2lubmVyUjptLHN0YXJ0OmUsZW5kOnd9O2E9dGhpcy5zeW1ib2woXCJhcmNcIixhLGIsZCxkLG0pO2Eucj1kO3JldHVybiBhfSxyZWN0OmZ1bmN0aW9uKGEsYixkLG0sZSx3KXtlPUgoYSk/YS5yOmU7dmFyIGs9dGhpcy5jcmVhdGVFbGVtZW50KFwicmVjdFwiKTthPUgoYSk/YTp2b2lkIDA9PT1hP3t9Ont4OmEseTpiLHdpZHRoOk1hdGgubWF4KGQsMCksaGVpZ2h0Ok1hdGgubWF4KG0sMCl9O3RoaXMuc3R5bGVkTW9kZXx8KHZvaWQgMCE9PXcmJihhLnN0cm9rZVdpZHRoPXcsYT1rLmNyaXNwKGEpKSxhLmZpbGw9XCJub25lXCIpO2UmJihhLnI9ZSk7ay5yU2V0dGVyPWZ1bmN0aW9uKGEsYixkKXtrLnI9XG5hO0YoZCx7cng6YSxyeTphfSl9O2suckdldHRlcj1mdW5jdGlvbigpe3JldHVybiBrLnJ9O3JldHVybiBrLmF0dHIoYSl9LHNldFNpemU6ZnVuY3Rpb24oYSxiLGQpe3ZhciBtPXRoaXMuYWxpZ25lZE9iamVjdHMsZT1tLmxlbmd0aDt0aGlzLndpZHRoPWE7dGhpcy5oZWlnaHQ9Yjtmb3IodGhpcy5ib3hXcmFwcGVyLmFuaW1hdGUoe3dpZHRoOmEsaGVpZ2h0OmJ9LHtzdGVwOmZ1bmN0aW9uKCl7dGhpcy5hdHRyKHt2aWV3Qm94OlwiMCAwIFwiK3RoaXMuYXR0cihcIndpZHRoXCIpK1wiIFwiK3RoaXMuYXR0cihcImhlaWdodFwiKX0pfSxkdXJhdGlvbjpuKGQsITApP3ZvaWQgMDowfSk7ZS0tOyltW2VdLmFsaWduKCl9LGc6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jcmVhdGVFbGVtZW50KFwiZ1wiKTtyZXR1cm4gYT9iLmF0dHIoe1wiY2xhc3NcIjpcImhpZ2hjaGFydHMtXCIrYX0pOmJ9LGltYWdlOmZ1bmN0aW9uKGEsZCxtLGUsdyxrKXt2YXIgbD17cHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIn0sZz1mdW5jdGlvbihhLFxuYil7YS5zZXRBdHRyaWJ1dGVOUz9hLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFwiaHJlZlwiLGIpOmEuc2V0QXR0cmlidXRlKFwiaGMtc3ZnLWhyZWZcIixiKX0scj1mdW5jdGlvbihiKXtnKGMuZWxlbWVudCxhKTtrLmNhbGwoYyxiKX07MTxhcmd1bWVudHMubGVuZ3RoJiZ0KGwse3g6ZCx5Om0sd2lkdGg6ZSxoZWlnaHQ6d30pO3ZhciBjPXRoaXMuY3JlYXRlRWxlbWVudChcImltYWdlXCIpLmF0dHIobCk7az8oZyhjLmVsZW1lbnQsXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PVwiKSxsPW5ldyBRLkltYWdlLGIobCxcImxvYWRcIixyKSxsLnNyYz1hLGwuY29tcGxldGUmJnIoe30pKTpnKGMuZWxlbWVudCxhKTtyZXR1cm4gY30sc3ltYm9sOmZ1bmN0aW9uKGEsYixtLGUsdyxrKXt2YXIgZz10aGlzLHI9L151cmxcXCgoLio/KVxcKSQvLGM9ci50ZXN0KGEpLEQ9IWMmJih0aGlzLnN5bWJvbHNbYV0/XG5hOlwiY2lyY2xlXCIpLHg9RCYmdGhpcy5zeW1ib2xzW0RdLEs9RyhiKSYmeCYmeC5jYWxsKHRoaXMuc3ltYm9scyxNYXRoLnJvdW5kKGIpLE1hdGgucm91bmQobSksZSx3LGspO2lmKHgpe3ZhciBKPXRoaXMucGF0aChLKTtnLnN0eWxlZE1vZGV8fEouYXR0cihcImZpbGxcIixcIm5vbmVcIik7dChKLHtzeW1ib2xOYW1lOkQseDpiLHk6bSx3aWR0aDplLGhlaWdodDp3fSk7ayYmdChKLGspfWVsc2UgaWYoYyl7dmFyIEE9YS5tYXRjaChyKVsxXTtKPXRoaXMuaW1hZ2UoQSk7Si5pbWd3aWR0aD1uKFNbQV0mJlNbQV0ud2lkdGgsayYmay53aWR0aCk7Si5pbWdoZWlnaHQ9bihTW0FdJiZTW0FdLmhlaWdodCxrJiZrLmhlaWdodCk7dmFyIGg9ZnVuY3Rpb24oKXtKLmF0dHIoe3dpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fSl9O1tcIndpZHRoXCIsXCJoZWlnaHRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtKW2ErXCJTZXR0ZXJcIl09ZnVuY3Rpb24oYSxiKXt2YXIgZD17fSxtPXRoaXNbXCJpbWdcIitiXSxlPVxuXCJ3aWR0aFwiPT09Yj9cInRyYW5zbGF0ZVhcIjpcInRyYW5zbGF0ZVlcIjt0aGlzW2JdPWE7RyhtKSYmKGsmJlwid2l0aGluXCI9PT1rLmJhY2tncm91bmRTaXplJiZ0aGlzLndpZHRoJiZ0aGlzLmhlaWdodCYmKG09TWF0aC5yb3VuZChtKk1hdGgubWluKHRoaXMud2lkdGgvdGhpcy5pbWd3aWR0aCx0aGlzLmhlaWdodC90aGlzLmltZ2hlaWdodCkpKSx0aGlzLmVsZW1lbnQmJnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoYixtKSx0aGlzLmFsaWduQnlUcmFuc2xhdGV8fChkW2VdPSgodGhpc1tiXXx8MCktbSkvMix0aGlzLmF0dHIoZCkpKX19KTtHKGIpJiZKLmF0dHIoe3g6Yix5Om19KTtKLmlzSW1nPSEwO0coSi5pbWd3aWR0aCkmJkcoSi5pbWdoZWlnaHQpP2goKTooSi5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksTChcImltZ1wiLHtvbmxvYWQ6ZnVuY3Rpb24oKXt2YXIgYT1kW2cuY2hhcnRJbmRleF07MD09PXRoaXMud2lkdGgmJihsKHRoaXMse3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6XCItOTk5ZW1cIn0pLFxucC5ib2R5LmFwcGVuZENoaWxkKHRoaXMpKTtTW0FdPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH07Si5pbWd3aWR0aD10aGlzLndpZHRoO0ouaW1naGVpZ2h0PXRoaXMuaGVpZ2h0O0ouZWxlbWVudCYmaCgpO3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpO2cuaW1nQ291bnQtLTtpZighZy5pbWdDb3VudCYmYSYmYS5vbmxvYWQpYS5vbmxvYWQoKX0sc3JjOkF9KSx0aGlzLmltZ0NvdW50KyspfXJldHVybiBKfSxzeW1ib2xzOntjaXJjbGU6ZnVuY3Rpb24oYSxiLGQsbSl7cmV0dXJuIHRoaXMuYXJjKGErZC8yLGIrbS8yLGQvMixtLzIse3N0YXJ0Oi41Kk1hdGguUEksZW5kOjIuNSpNYXRoLlBJLG9wZW46ITF9KX0sc3F1YXJlOmZ1bmN0aW9uKGEsYixkLG0pe3JldHVybltcIk1cIixhLGIsXCJMXCIsYStkLGIsYStkLGIrbSxhLGIrbSxcIlpcIl19LHRyaWFuZ2xlOmZ1bmN0aW9uKGEsYixkLG0pe3JldHVybltcIk1cIixhK2QvMixiLFwiTFwiLFxuYStkLGIrbSxhLGIrbSxcIlpcIl19LFwidHJpYW5nbGUtZG93blwiOmZ1bmN0aW9uKGEsYixkLG0pe3JldHVybltcIk1cIixhLGIsXCJMXCIsYStkLGIsYStkLzIsYittLFwiWlwiXX0sZGlhbW9uZDpmdW5jdGlvbihhLGIsZCxtKXtyZXR1cm5bXCJNXCIsYStkLzIsYixcIkxcIixhK2QsYittLzIsYStkLzIsYittLGEsYittLzIsXCJaXCJdfSxhcmM6ZnVuY3Rpb24oYSxiLGQsbSxlKXt2YXIgdz1lLnN0YXJ0LGs9ZS5yfHxkLGw9ZS5yfHxtfHxkLGc9ZS5lbmQtLjAwMTtkPWUuaW5uZXJSO209bihlLm9wZW4sLjAwMT5NYXRoLmFicyhlLmVuZC1lLnN0YXJ0LTIqTWF0aC5QSSkpO3ZhciByPU1hdGguY29zKHcpLGM9TWF0aC5zaW4odykseD1NYXRoLmNvcyhnKTtnPU1hdGguc2luKGcpO3c9LjAwMT5lLmVuZC13LU1hdGguUEk/MDoxO2U9W1wiTVwiLGEraypyLGIrbCpjLFwiQVwiLGssbCwwLHcsbihlLmNsb2Nrd2lzZSwxKSxhK2sqeCxiK2wqZ107RyhkKSYmZS5wdXNoKG0/XCJNXCI6XCJMXCIsYStkKngsYitkKmcsXCJBXCIsZCxcbmQsMCx3LDAsYStkKnIsYitkKmMpO2UucHVzaChtP1wiXCI6XCJaXCIpO3JldHVybiBlfSxjYWxsb3V0OmZ1bmN0aW9uKGEsYixkLG0sZSl7dmFyIHc9TWF0aC5taW4oZSYmZS5yfHwwLGQsbSksaz13KzYsbD1lJiZlLmFuY2hvclg7ZT1lJiZlLmFuY2hvclk7dmFyIGc9W1wiTVwiLGErdyxiLFwiTFwiLGErZC13LGIsXCJDXCIsYStkLGIsYStkLGIsYStkLGIrdyxcIkxcIixhK2QsYittLXcsXCJDXCIsYStkLGIrbSxhK2QsYittLGErZC13LGIrbSxcIkxcIixhK3csYittLFwiQ1wiLGEsYittLGEsYittLGEsYittLXcsXCJMXCIsYSxiK3csXCJDXCIsYSxiLGEsYixhK3csYl07bCYmbD5kP2U+YitrJiZlPGIrbS1rP2cuc3BsaWNlKDEzLDMsXCJMXCIsYStkLGUtNixhK2QrNixlLGErZCxlKzYsYStkLGIrbS13KTpnLnNwbGljZSgxMywzLFwiTFwiLGErZCxtLzIsbCxlLGErZCxtLzIsYStkLGIrbS13KTpsJiYwPmw/ZT5iK2smJmU8YittLWs/Zy5zcGxpY2UoMzMsMyxcIkxcIixhLGUrNixhLTYsZSxhLGUtNixhLGIrdyk6Zy5zcGxpY2UoMzMsXG4zLFwiTFwiLGEsbS8yLGwsZSxhLG0vMixhLGIrdyk6ZSYmZT5tJiZsPmErayYmbDxhK2Qtaz9nLnNwbGljZSgyMywzLFwiTFwiLGwrNixiK20sbCxiK20rNixsLTYsYittLGErdyxiK20pOmUmJjA+ZSYmbD5hK2smJmw8YStkLWsmJmcuc3BsaWNlKDMsMyxcIkxcIixsLTYsYixsLGItNixsKzYsYixkLXcsYik7cmV0dXJuIGd9fSxjbGlwUmVjdDpmdW5jdGlvbihhLGIsZCxtKXt2YXIgZT1jLnVuaXF1ZUtleSgpK1wiLVwiLHc9dGhpcy5jcmVhdGVFbGVtZW50KFwiY2xpcFBhdGhcIikuYXR0cih7aWQ6ZX0pLmFkZCh0aGlzLmRlZnMpO2E9dGhpcy5yZWN0KGEsYixkLG0sMCkuYWRkKHcpO2EuaWQ9ZTthLmNsaXBQYXRoPXc7YS5jb3VudD0wO3JldHVybiBhfSx0ZXh0OmZ1bmN0aW9uKGEsYixkLG0pe3ZhciBlPXt9O2lmKG0mJih0aGlzLmFsbG93SFRNTHx8IXRoaXMuZm9yRXhwb3J0KSlyZXR1cm4gdGhpcy5odG1sKGEsYixkKTtlLng9TWF0aC5yb3VuZChifHwwKTtkJiYoZS55PU1hdGgucm91bmQoZCkpO1xuRyhhKSYmKGUudGV4dD1hKTthPXRoaXMuY3JlYXRlRWxlbWVudChcInRleHRcIikuYXR0cihlKTttfHwoYS54U2V0dGVyPWZ1bmN0aW9uKGEsYixkKXt2YXIgbT1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidHNwYW5cIiksZT1kLmdldEF0dHJpYnV0ZShiKSx3O2Zvcih3PTA7dzxtLmxlbmd0aDt3Kyspe3ZhciBrPW1bd107ay5nZXRBdHRyaWJ1dGUoYik9PT1lJiZrLnNldEF0dHJpYnV0ZShiLGEpfWQuc2V0QXR0cmlidXRlKGIsYSl9KTtyZXR1cm4gYX0sZm9udE1ldHJpY3M6ZnVuY3Rpb24oYSxiKXthPSF0aGlzLnN0eWxlZE1vZGUmJi9weC8udGVzdChhKXx8IVEuZ2V0Q29tcHV0ZWRTdHlsZT9hfHxiJiZiLnN0eWxlJiZiLnN0eWxlLmZvbnRTaXplfHx0aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLmZvbnRTaXplOmImJk8ucHJvdG90eXBlLmdldFN0eWxlLmNhbGwoYixcImZvbnQtc2l6ZVwiKTthPS9weC8udGVzdChhKT9xKGEpOjEyO2I9MjQ+YT9hKzM6TWF0aC5yb3VuZCgxLjIqYSk7cmV0dXJue2g6YixcbmI6TWF0aC5yb3VuZCguOCpiKSxmOmF9fSxyb3RDb3JyOmZ1bmN0aW9uKGEsYixkKXt2YXIgbT1hO2ImJmQmJihtPU1hdGgubWF4KG0qTWF0aC5jb3MoYipFKSw0KSk7cmV0dXJue3g6LWEvMypNYXRoLnNpbihiKkUpLHk6bX19LGxhYmVsOmZ1bmN0aW9uKGEsYixkLGUsdyxrLGwsZyxyKXt2YXIgYz10aGlzLHg9Yy5zdHlsZWRNb2RlLEo9Yy5nKFwiYnV0dG9uXCIhPT1yJiZcImxhYmVsXCIpLHA9Si50ZXh0PWMudGV4dChcIlwiLDAsMCxsKS5hdHRyKHt6SW5kZXg6MX0pLEssaCxEPTAsdT0zLEw9MCxuLE4sRSxVLGYscT17fSxULFMsdj0vXnVybFxcKCguKj8pXFwpJC8udGVzdChlKSxRPXh8fHYseT1mdW5jdGlvbigpe3JldHVybiB4P0suc3Ryb2tlV2lkdGgoKSUyLzI6KFQ/cGFyc2VJbnQoVCwxMCk6MCklMi8yfTtyJiZKLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1cIityKTt2YXIgUj1mdW5jdGlvbigpe3ZhciBhPXAuZWxlbWVudC5zdHlsZSxiPXt9O2g9KHZvaWQgMD09PW58fHZvaWQgMD09PU58fGYpJiZcbkcocC50ZXh0U3RyKSYmcC5nZXRCQm94KCk7Si53aWR0aD0obnx8aC53aWR0aHx8MCkrMip1K0w7Si5oZWlnaHQ9KE58fGguaGVpZ2h0fHwwKSsyKnU7Uz11K01hdGgubWluKGMuZm9udE1ldHJpY3MoYSYmYS5mb250U2l6ZSxwKS5iLGg/aC5oZWlnaHQ6SW5maW5pdHkpO1EmJihLfHwoSi5ib3g9Sz1jLnN5bWJvbHNbZV18fHY/Yy5zeW1ib2woZSk6Yy5yZWN0KCksSy5hZGRDbGFzcygoXCJidXR0b25cIj09PXI/XCJcIjpcImhpZ2hjaGFydHMtbGFiZWwtYm94XCIpKyhyP1wiIGhpZ2hjaGFydHMtXCIrcitcIi1ib3hcIjpcIlwiKSksSy5hZGQoSiksYT15KCksYi54PWEsYi55PShnPy1TOjApK2EpLGIud2lkdGg9TWF0aC5yb3VuZChKLndpZHRoKSxiLmhlaWdodD1NYXRoLnJvdW5kKEouaGVpZ2h0KSxLLmF0dHIodChiLHEpKSxxPXt9KX07dmFyIEI9ZnVuY3Rpb24oKXt2YXIgYT1MK3U7dmFyIGI9Zz8wOlM7RyhuKSYmaCYmKFwiY2VudGVyXCI9PT1mfHxcInJpZ2h0XCI9PT1mKSYmKGErPXtjZW50ZXI6LjUscmlnaHQ6MX1bZl0qXG4obi1oLndpZHRoKSk7aWYoYSE9PXAueHx8YiE9PXAueSlwLmF0dHIoXCJ4XCIsYSkscC5oYXNCb3hXaWR0aENoYW5nZWQmJihoPXAuZ2V0QkJveCghMCksUigpKSx2b2lkIDAhPT1iJiZwLmF0dHIoXCJ5XCIsYik7cC54PWE7cC55PWJ9O3ZhciBWPWZ1bmN0aW9uKGEsYil7Sz9LLmF0dHIoYSxiKTpxW2FdPWJ9O0oub25BZGQ9ZnVuY3Rpb24oKXtwLmFkZChKKTtKLmF0dHIoe3RleHQ6YXx8MD09PWE/YTpcIlwiLHg6Yix5OmR9KTtLJiZHKHcpJiZKLmF0dHIoe2FuY2hvclg6dyxhbmNob3JZOmt9KX07Si53aWR0aFNldHRlcj1mdW5jdGlvbihhKXtuPUMoYSk/YTpudWxsfTtKLmhlaWdodFNldHRlcj1mdW5jdGlvbihhKXtOPWF9O0pbXCJ0ZXh0LWFsaWduU2V0dGVyXCJdPWZ1bmN0aW9uKGEpe2Y9YX07Si5wYWRkaW5nU2V0dGVyPWZ1bmN0aW9uKGEpe0coYSkmJmEhPT11JiYodT1KLnBhZGRpbmc9YSxCKCkpfTtKLnBhZGRpbmdMZWZ0U2V0dGVyPWZ1bmN0aW9uKGEpe0coYSkmJmEhPT1MJiYoTD1hLFxuQigpKX07Si5hbGlnblNldHRlcj1mdW5jdGlvbihhKXthPXtsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjF9W2FdO2EhPT1EJiYoRD1hLGgmJkouYXR0cih7eDpFfSkpfTtKLnRleHRTZXR0ZXI9ZnVuY3Rpb24oYSl7dm9pZCAwIT09YSYmcC5hdHRyKHt0ZXh0OmF9KTtSKCk7QigpfTtKW1wic3Ryb2tlLXdpZHRoU2V0dGVyXCJdPWZ1bmN0aW9uKGEsYil7YSYmKFE9ITApO1Q9dGhpc1tcInN0cm9rZS13aWR0aFwiXT1hO1YoYixhKX07eD9KLnJTZXR0ZXI9ZnVuY3Rpb24oYSxiKXtWKGIsYSl9Okouc3Ryb2tlU2V0dGVyPUouZmlsbFNldHRlcj1KLnJTZXR0ZXI9ZnVuY3Rpb24oYSxiKXtcInJcIiE9PWImJihcImZpbGxcIj09PWImJmEmJihRPSEwKSxKW2JdPWEpO1YoYixhKX07Si5hbmNob3JYU2V0dGVyPWZ1bmN0aW9uKGEsYil7dz1KLmFuY2hvclg9YTtWKGIsTWF0aC5yb3VuZChhKS15KCktRSl9O0ouYW5jaG9yWVNldHRlcj1mdW5jdGlvbihhLGIpe2s9Si5hbmNob3JZPWE7VihiLGEtVSl9O0oueFNldHRlcj1cbmZ1bmN0aW9uKGEpe0oueD1hO0QmJihhLT1EKigobnx8aC53aWR0aCkrMip1KSxKW1wiZm9yY2VBbmltYXRlOnhcIl09ITApO0U9TWF0aC5yb3VuZChhKTtKLmF0dHIoXCJ0cmFuc2xhdGVYXCIsRSl9O0oueVNldHRlcj1mdW5jdGlvbihhKXtVPUoueT1NYXRoLnJvdW5kKGEpO0ouYXR0cihcInRyYW5zbGF0ZVlcIixVKX07dmFyIEg9Si5jc3M7bD17Y3NzOmZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBiPXt9O2E9QShhKTtKLnRleHRQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZvaWQgMCE9PWFbZF0mJihiW2RdPWFbZF0sZGVsZXRlIGFbZF0pfSk7cC5jc3MoYik7XCJ3aWR0aFwiaW4gYiYmUigpO1wiZm9udFNpemVcImluIGImJihSKCksQigpKX1yZXR1cm4gSC5jYWxsKEosYSl9LGdldEJCb3g6ZnVuY3Rpb24oKXtyZXR1cm57d2lkdGg6aC53aWR0aCsyKnUsaGVpZ2h0OmguaGVpZ2h0KzIqdSx4OmgueC11LHk6aC55LXV9fSxkZXN0cm95OmZ1bmN0aW9uKCl7bShKLmVsZW1lbnQsXCJtb3VzZWVudGVyXCIpO1xubShKLmVsZW1lbnQsXCJtb3VzZWxlYXZlXCIpO3AmJihwPXAuZGVzdHJveSgpKTtLJiYoSz1LLmRlc3Ryb3koKSk7Ty5wcm90b3R5cGUuZGVzdHJveS5jYWxsKEopO0o9Yz1SPUI9Vj1udWxsfX07eHx8KGwuc2hhZG93PWZ1bmN0aW9uKGEpe2EmJihSKCksSyYmSy5zaGFkb3coYSkpO3JldHVybiBKfSk7cmV0dXJuIHQoSixsKX19KTtjLlJlbmRlcmVyPWZ9KTtNKEksXCJwYXJ0cy9IdG1sLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5hdHRyLEc9Zi5kZWZpbmVkLHo9Zi5leHRlbmQsQj1mLnBpY2ssdD1mLnBJbnQsdj1jLmNyZWF0ZUVsZW1lbnQsQz1jLmNzcyxIPWMuaXNGaXJlZm94LHk9Yy5pc01TLGg9Yy5pc1dlYktpdCxuPWMuU1ZHRWxlbWVudDtmPWMuU1ZHUmVuZGVyZXI7dmFyIHE9Yy53aW47eihuLnByb3RvdHlwZSx7aHRtbENzczpmdW5jdGlvbihnKXt2YXIgYj1cIlNQQU5cIj09PXRoaXMuZWxlbWVudC50YWdOYW1lJiZcbmcmJlwid2lkdGhcImluIGcsYT1CKGImJmcud2lkdGgsdm9pZCAwKTtpZihiKXtkZWxldGUgZy53aWR0aDt0aGlzLnRleHRXaWR0aD1hO3ZhciBkPSEwfWcmJlwiZWxsaXBzaXNcIj09PWcudGV4dE92ZXJmbG93JiYoZy53aGl0ZVNwYWNlPVwibm93cmFwXCIsZy5vdmVyZmxvdz1cImhpZGRlblwiKTt0aGlzLnN0eWxlcz16KHRoaXMuc3R5bGVzLGcpO0ModGhpcy5lbGVtZW50LGcpO2QmJnRoaXMuaHRtbFVwZGF0ZVRyYW5zZm9ybSgpO3JldHVybiB0aGlzfSxodG1sR2V0QkJveDpmdW5jdGlvbigpe3ZhciBnPXRoaXMuZWxlbWVudDtyZXR1cm57eDpnLm9mZnNldExlZnQseTpnLm9mZnNldFRvcCx3aWR0aDpnLm9mZnNldFdpZHRoLGhlaWdodDpnLm9mZnNldEhlaWdodH19LGh0bWxVcGRhdGVUcmFuc2Zvcm06ZnVuY3Rpb24oKXtpZih0aGlzLmFkZGVkKXt2YXIgZz10aGlzLnJlbmRlcmVyLGI9dGhpcy5lbGVtZW50LGE9dGhpcy50cmFuc2xhdGVYfHwwLGQ9dGhpcy50cmFuc2xhdGVZfHwwLGU9dGhpcy54fHxcbjAsbD10aGlzLnl8fDAsYz10aGlzLnRleHRBbGlnbnx8XCJsZWZ0XCIsaD17bGVmdDowLGNlbnRlcjouNSxyaWdodDoxfVtjXSxwPXRoaXMuc3R5bGVzLHU9cCYmcC53aGl0ZVNwYWNlO0MoYix7bWFyZ2luTGVmdDphLG1hcmdpblRvcDpkfSk7IWcuc3R5bGVkTW9kZSYmdGhpcy5zaGFkb3dzJiZ0aGlzLnNoYWRvd3MuZm9yRWFjaChmdW5jdGlvbihiKXtDKGIse21hcmdpbkxlZnQ6YSsxLG1hcmdpblRvcDpkKzF9KX0pO3RoaXMuaW52ZXJ0ZWQmJltdLmZvckVhY2guY2FsbChiLmNoaWxkTm9kZXMsZnVuY3Rpb24oYSl7Zy5pbnZlcnRDaGlsZChhLGIpfSk7aWYoXCJTUEFOXCI9PT1iLnRhZ05hbWUpe3A9dGhpcy5yb3RhdGlvbjt2YXIgaz10aGlzLnRleHRXaWR0aCYmdCh0aGlzLnRleHRXaWR0aCkscj1bcCxjLGIuaW5uZXJIVE1MLHRoaXMudGV4dFdpZHRoLHRoaXMudGV4dEFsaWduXS5qb2luKCkseDsoeD1rIT09dGhpcy5vbGRUZXh0V2lkdGgpJiYhKHg9az50aGlzLm9sZFRleHRXaWR0aCkmJlxuKCh4PXRoaXMudGV4dFB4TGVuZ3RoKXx8KEMoYix7d2lkdGg6XCJcIix3aGl0ZVNwYWNlOnV8fFwibm93cmFwXCJ9KSx4PWIub2Zmc2V0V2lkdGgpLHg9eD5rKTt4JiYoL1sgXFwtXS8udGVzdChiLnRleHRDb250ZW50fHxiLmlubmVyVGV4dCl8fFwiZWxsaXBzaXNcIj09PWIuc3R5bGUudGV4dE92ZXJmbG93KT8oQyhiLHt3aWR0aDprK1wicHhcIixkaXNwbGF5OlwiYmxvY2tcIix3aGl0ZVNwYWNlOnV8fFwibm9ybWFsXCJ9KSx0aGlzLm9sZFRleHRXaWR0aD1rLHRoaXMuaGFzQm94V2lkdGhDaGFuZ2VkPSEwKTp0aGlzLmhhc0JveFdpZHRoQ2hhbmdlZD0hMTtyIT09dGhpcy5jVFQmJih1PWcuZm9udE1ldHJpY3MoYi5zdHlsZS5mb250U2l6ZSxiKS5iLCFHKHApfHxwPT09KHRoaXMub2xkUm90YXRpb258fDApJiZjPT09dGhpcy5vbGRBbGlnbnx8dGhpcy5zZXRTcGFuUm90YXRpb24ocCxoLHUpLHRoaXMuZ2V0U3BhbkNvcnJlY3Rpb24oIUcocCkmJnRoaXMudGV4dFB4TGVuZ3RofHxiLm9mZnNldFdpZHRoLFxudSxoLHAsYykpO0MoYix7bGVmdDplKyh0aGlzLnhDb3JyfHwwKStcInB4XCIsdG9wOmwrKHRoaXMueUNvcnJ8fDApK1wicHhcIn0pO3RoaXMuY1RUPXI7dGhpcy5vbGRSb3RhdGlvbj1wO3RoaXMub2xkQWxpZ249Y319ZWxzZSB0aGlzLmFsaWduT25BZGQ9ITB9LHNldFNwYW5Sb3RhdGlvbjpmdW5jdGlvbihnLGIsYSl7dmFyIGQ9e30sZT10aGlzLnJlbmRlcmVyLmdldFRyYW5zZm9ybUtleSgpO2RbZV09ZC50cmFuc2Zvcm09XCJyb3RhdGUoXCIrZytcImRlZylcIjtkW2UrKEg/XCJPcmlnaW5cIjpcIi1vcmlnaW5cIildPWQudHJhbnNmb3JtT3JpZ2luPTEwMCpiK1wiJSBcIithK1wicHhcIjtDKHRoaXMuZWxlbWVudCxkKX0sZ2V0U3BhbkNvcnJlY3Rpb246ZnVuY3Rpb24oZyxiLGEpe3RoaXMueENvcnI9LWcqYTt0aGlzLnlDb3JyPS1ifX0pO3ooZi5wcm90b3R5cGUse2dldFRyYW5zZm9ybUtleTpmdW5jdGlvbigpe3JldHVybiB5JiYhL0VkZ2UvLnRlc3QocS5uYXZpZ2F0b3IudXNlckFnZW50KT9cIi1tcy10cmFuc2Zvcm1cIjpcbmg/XCItd2Via2l0LXRyYW5zZm9ybVwiOkg/XCJNb3pUcmFuc2Zvcm1cIjpxLm9wZXJhP1wiLW8tdHJhbnNmb3JtXCI6XCJcIn0saHRtbDpmdW5jdGlvbihnLGIsYSl7dmFyIGQ9dGhpcy5jcmVhdGVFbGVtZW50KFwic3BhblwiKSxlPWQuZWxlbWVudCxsPWQucmVuZGVyZXIsYz1sLmlzU1ZHLGg9ZnVuY3Rpb24oYSxiKXtbXCJvcGFjaXR5XCIsXCJ2aXNpYmlsaXR5XCJdLmZvckVhY2goZnVuY3Rpb24oZCl7YVtkK1wiU2V0dGVyXCJdPWZ1bmN0aW9uKGUsayxsKXt2YXIgdz1hLmRpdj9hLmRpdi5zdHlsZTpiO24ucHJvdG90eXBlW2QrXCJTZXR0ZXJcIl0uY2FsbCh0aGlzLGUsayxsKTt3JiYod1trXT1lKX19KTthLmFkZGVkU2V0dGVycz0hMH07ZC50ZXh0U2V0dGVyPWZ1bmN0aW9uKGEpe2EhPT1lLmlubmVySFRNTCYmKGRlbGV0ZSB0aGlzLmJCb3gsZGVsZXRlIHRoaXMub2xkVGV4dFdpZHRoKTt0aGlzLnRleHRTdHI9YTtlLmlubmVySFRNTD1CKGEsXCJcIik7ZC5kb1RyYW5zZm9ybT0hMH07YyYmaChkLGQuZWxlbWVudC5zdHlsZSk7XG5kLnhTZXR0ZXI9ZC55U2V0dGVyPWQuYWxpZ25TZXR0ZXI9ZC5yb3RhdGlvblNldHRlcj1mdW5jdGlvbihhLGIpe1wiYWxpZ25cIj09PWImJihiPVwidGV4dEFsaWduXCIpO2RbYl09YTtkLmRvVHJhbnNmb3JtPSEwfTtkLmFmdGVyU2V0dGVycz1mdW5jdGlvbigpe3RoaXMuZG9UcmFuc2Zvcm0mJih0aGlzLmh0bWxVcGRhdGVUcmFuc2Zvcm0oKSx0aGlzLmRvVHJhbnNmb3JtPSExKX07ZC5hdHRyKHt0ZXh0OmcseDpNYXRoLnJvdW5kKGIpLHk6TWF0aC5yb3VuZChhKX0pLmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwifSk7bC5zdHlsZWRNb2RlfHxkLmNzcyh7Zm9udEZhbWlseTp0aGlzLnN0eWxlLmZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zdHlsZS5mb250U2l6ZX0pO2Uuc3R5bGUud2hpdGVTcGFjZT1cIm5vd3JhcFwiO2QuY3NzPWQuaHRtbENzcztjJiYoZC5hZGQ9ZnVuY3Rpb24oYSl7dmFyIGI9bC5ib3gucGFyZW50Tm9kZSxrPVtdO2lmKHRoaXMucGFyZW50R3JvdXA9YSl7dmFyIGc9YS5kaXY7XG5pZighZyl7Zm9yKDthOylrLnB1c2goYSksYT1hLnBhcmVudEdyb3VwO2sucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24oYSl7ZnVuY3Rpb24gZShiLGQpe2FbZF09YjtcInRyYW5zbGF0ZVhcIj09PWQ/bS5sZWZ0PWIrXCJweFwiOm0udG9wPWIrXCJweFwiO2EuZG9UcmFuc2Zvcm09ITB9dmFyIHc9RihhLmVsZW1lbnQsXCJjbGFzc1wiKTtnPWEuZGl2PWEuZGl2fHx2KFwiZGl2XCIsdz97Y2xhc3NOYW1lOnd9OnZvaWQgMCx7cG9zaXRpb246XCJhYnNvbHV0ZVwiLGxlZnQ6KGEudHJhbnNsYXRlWHx8MCkrXCJweFwiLHRvcDooYS50cmFuc2xhdGVZfHwwKStcInB4XCIsZGlzcGxheTphLmRpc3BsYXksb3BhY2l0eTphLm9wYWNpdHkscG9pbnRlckV2ZW50czphLnN0eWxlcyYmYS5zdHlsZXMucG9pbnRlckV2ZW50c30sZ3x8Yik7dmFyIG09Zy5zdHlsZTt6KGEse2NsYXNzU2V0dGVyOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXt0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixiKTthLmNsYXNzTmFtZT1cbmJ9fShnKSxvbjpmdW5jdGlvbigpe2tbMF0uZGl2JiZkLm9uLmFwcGx5KHtlbGVtZW50OmtbMF0uZGl2fSxhcmd1bWVudHMpO3JldHVybiBhfSx0cmFuc2xhdGVYU2V0dGVyOmUsdHJhbnNsYXRlWVNldHRlcjplfSk7YS5hZGRlZFNldHRlcnN8fGgoYSl9KX19ZWxzZSBnPWI7Zy5hcHBlbmRDaGlsZChlKTtkLmFkZGVkPSEwO2QuYWxpZ25PbkFkZCYmZC5odG1sVXBkYXRlVHJhbnNmb3JtKCk7cmV0dXJuIGR9KTtyZXR1cm4gZH19KX0pO00oSSxcInBhcnRzL1RpbWUuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmRlZmluZWQsRz1mLmV4dGVuZCx6PWYuaXNPYmplY3QsQj1mLm9iamVjdEVhY2gsdD1mLnBpY2ssdj1mLnNwbGF0LEM9Yy5tZXJnZSxIPWMudGltZVVuaXRzLHk9Yy53aW47Yy5UaW1lPWZ1bmN0aW9uKGMpe3RoaXMudXBkYXRlKGMsITEpfTtjLlRpbWUucHJvdG90eXBlPXtkZWZhdWx0T3B0aW9uczp7RGF0ZTp2b2lkIDAsXG5nZXRUaW1lem9uZU9mZnNldDp2b2lkIDAsdGltZXpvbmU6dm9pZCAwLHRpbWV6b25lT2Zmc2V0OjAsdXNlVVRDOiEwfSx1cGRhdGU6ZnVuY3Rpb24oYyl7dmFyIGg9dChjJiZjLnVzZVVUQywhMCksZj10aGlzO3RoaXMub3B0aW9ucz1jPUMoITAsdGhpcy5vcHRpb25zfHx7fSxjKTt0aGlzLkRhdGU9Yy5EYXRlfHx5LkRhdGV8fERhdGU7dGhpcy50aW1lem9uZU9mZnNldD0odGhpcy51c2VVVEM9aCkmJmMudGltZXpvbmVPZmZzZXQ7dGhpcy5nZXRUaW1lem9uZU9mZnNldD10aGlzLnRpbWV6b25lT2Zmc2V0RnVuY3Rpb24oKTsodGhpcy52YXJpYWJsZVRpbWV6b25lPSEoaCYmIWMuZ2V0VGltZXpvbmVPZmZzZXQmJiFjLnRpbWV6b25lKSl8fHRoaXMudGltZXpvbmVPZmZzZXQ/KHRoaXMuZ2V0PWZ1bmN0aW9uKGcsYil7dmFyIGE9Yi5nZXRUaW1lKCksZD1hLWYuZ2V0VGltZXpvbmVPZmZzZXQoYik7Yi5zZXRUaW1lKGQpO2c9YltcImdldFVUQ1wiK2ddKCk7Yi5zZXRUaW1lKGEpO3JldHVybiBnfSxcbnRoaXMuc2V0PWZ1bmN0aW9uKGcsYixhKXtpZihcIk1pbGxpc2Vjb25kc1wiPT09Z3x8XCJTZWNvbmRzXCI9PT1nfHxcIk1pbnV0ZXNcIj09PWcmJjA9PT1iLmdldFRpbWV6b25lT2Zmc2V0KCklNjApYltcInNldFwiK2ddKGEpO2Vsc2V7dmFyIGQ9Zi5nZXRUaW1lem9uZU9mZnNldChiKTtkPWIuZ2V0VGltZSgpLWQ7Yi5zZXRUaW1lKGQpO2JbXCJzZXRVVENcIitnXShhKTtnPWYuZ2V0VGltZXpvbmVPZmZzZXQoYik7ZD1iLmdldFRpbWUoKStnO2Iuc2V0VGltZShkKX19KTpoPyh0aGlzLmdldD1mdW5jdGlvbihnLGIpe3JldHVybiBiW1wiZ2V0VVRDXCIrZ10oKX0sdGhpcy5zZXQ9ZnVuY3Rpb24oZyxiLGEpe3JldHVybiBiW1wic2V0VVRDXCIrZ10oYSl9KToodGhpcy5nZXQ9ZnVuY3Rpb24oZyxiKXtyZXR1cm4gYltcImdldFwiK2ddKCl9LHRoaXMuc2V0PWZ1bmN0aW9uKGcsYixhKXtyZXR1cm4gYltcInNldFwiK2ddKGEpfSl9LG1ha2VUaW1lOmZ1bmN0aW9uKGgsbixmLGcsYixhKXtpZih0aGlzLnVzZVVUQyl7dmFyIGQ9XG50aGlzLkRhdGUuVVRDLmFwcGx5KDAsYXJndW1lbnRzKTt2YXIgZT10aGlzLmdldFRpbWV6b25lT2Zmc2V0KGQpO2QrPWU7dmFyIGw9dGhpcy5nZXRUaW1lem9uZU9mZnNldChkKTtlIT09bD9kKz1sLWU6ZS0zNkU1IT09dGhpcy5nZXRUaW1lem9uZU9mZnNldChkLTM2RTUpfHxjLmlzU2FmYXJpfHwoZC09MzZFNSl9ZWxzZSBkPShuZXcgdGhpcy5EYXRlKGgsbix0KGYsMSksdChnLDApLHQoYiwwKSx0KGEsMCkpKS5nZXRUaW1lKCk7cmV0dXJuIGR9LHRpbWV6b25lT2Zmc2V0RnVuY3Rpb246ZnVuY3Rpb24oKXt2YXIgaD10aGlzLG49dGhpcy5vcHRpb25zLGY9eS5tb21lbnQ7aWYoIXRoaXMudXNlVVRDKXJldHVybiBmdW5jdGlvbihnKXtyZXR1cm4gNkU0KihuZXcgRGF0ZShnKSkuZ2V0VGltZXpvbmVPZmZzZXQoKX07aWYobi50aW1lem9uZSl7aWYoZilyZXR1cm4gZnVuY3Rpb24oZyl7cmV0dXJuIDZFNCotZi50eihnLG4udGltZXpvbmUpLnV0Y09mZnNldCgpfTtjLmVycm9yKDI1KX1yZXR1cm4gdGhpcy51c2VVVEMmJlxubi5nZXRUaW1lem9uZU9mZnNldD9mdW5jdGlvbihnKXtyZXR1cm4gNkU0Km4uZ2V0VGltZXpvbmVPZmZzZXQoZyl9OmZ1bmN0aW9uKCl7cmV0dXJuIDZFNCooaC50aW1lem9uZU9mZnNldHx8MCl9fSxkYXRlRm9ybWF0OmZ1bmN0aW9uKGgsbixmKXtpZighRihuKXx8aXNOYU4obikpcmV0dXJuIGMuZGVmYXVsdE9wdGlvbnMubGFuZy5pbnZhbGlkRGF0ZXx8XCJcIjtoPXQoaCxcIiVZLSVtLSVkICVIOiVNOiVTXCIpO3ZhciBnPXRoaXMsYj1uZXcgdGhpcy5EYXRlKG4pLGE9dGhpcy5nZXQoXCJIb3Vyc1wiLGIpLGQ9dGhpcy5nZXQoXCJEYXlcIixiKSxlPXRoaXMuZ2V0KFwiRGF0ZVwiLGIpLGw9dGhpcy5nZXQoXCJNb250aFwiLGIpLEw9dGhpcy5nZXQoXCJGdWxsWWVhclwiLGIpLEU9Yy5kZWZhdWx0T3B0aW9ucy5sYW5nLHA9RS53ZWVrZGF5cyx1PUUuc2hvcnRXZWVrZGF5cyxrPWMucGFkO2I9Ryh7YTp1P3VbZF06cFtkXS5zdWJzdHIoMCwzKSxBOnBbZF0sZDprKGUpLGU6ayhlLDIsXCIgXCIpLHc6ZCxiOkUuc2hvcnRNb250aHNbbF0sXG5COkUubW9udGhzW2xdLG06ayhsKzEpLG86bCsxLHk6TC50b1N0cmluZygpLnN1YnN0cigyLDIpLFk6TCxIOmsoYSksazphLEk6ayhhJTEyfHwxMiksbDphJTEyfHwxMixNOmsoZy5nZXQoXCJNaW51dGVzXCIsYikpLHA6MTI+YT9cIkFNXCI6XCJQTVwiLFA6MTI+YT9cImFtXCI6XCJwbVwiLFM6ayhiLmdldFNlY29uZHMoKSksTDprKE1hdGguZmxvb3IobiUxRTMpLDMpfSxjLmRhdGVGb3JtYXRzKTtCKGIsZnVuY3Rpb24oYSxiKXtmb3IoOy0xIT09aC5pbmRleE9mKFwiJVwiK2IpOyloPWgucmVwbGFjZShcIiVcIitiLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhP2EuY2FsbChnLG4pOmEpfSk7cmV0dXJuIGY/aC5zdWJzdHIoMCwxKS50b1VwcGVyQ2FzZSgpK2guc3Vic3RyKDEpOmh9LHJlc29sdmVEVExGb3JtYXQ6ZnVuY3Rpb24oYyl7cmV0dXJuIHooYywhMCk/YzooYz12KGMpLHttYWluOmNbMF0sZnJvbTpjWzFdLHRvOmNbMl19KX0sZ2V0VGltZVRpY2tzOmZ1bmN0aW9uKGMsbixmLGcpe3ZhciBiPXRoaXMsYT1bXSxcbmQ9e307dmFyIGU9bmV3IGIuRGF0ZShuKTt2YXIgbD1jLnVuaXRSYW5nZSxoPWMuY291bnR8fDEsRTtnPXQoZywxKTtpZihGKG4pKXtiLnNldChcIk1pbGxpc2Vjb25kc1wiLGUsbD49SC5zZWNvbmQ/MDpoKk1hdGguZmxvb3IoYi5nZXQoXCJNaWxsaXNlY29uZHNcIixlKS9oKSk7bD49SC5zZWNvbmQmJmIuc2V0KFwiU2Vjb25kc1wiLGUsbD49SC5taW51dGU/MDpoKk1hdGguZmxvb3IoYi5nZXQoXCJTZWNvbmRzXCIsZSkvaCkpO2w+PUgubWludXRlJiZiLnNldChcIk1pbnV0ZXNcIixlLGw+PUguaG91cj8wOmgqTWF0aC5mbG9vcihiLmdldChcIk1pbnV0ZXNcIixlKS9oKSk7bD49SC5ob3VyJiZiLnNldChcIkhvdXJzXCIsZSxsPj1ILmRheT8wOmgqTWF0aC5mbG9vcihiLmdldChcIkhvdXJzXCIsZSkvaCkpO2w+PUguZGF5JiZiLnNldChcIkRhdGVcIixlLGw+PUgubW9udGg/MTpNYXRoLm1heCgxLGgqTWF0aC5mbG9vcihiLmdldChcIkRhdGVcIixlKS9oKSkpO2lmKGw+PUgubW9udGgpe2Iuc2V0KFwiTW9udGhcIixlLGw+PVxuSC55ZWFyPzA6aCpNYXRoLmZsb29yKGIuZ2V0KFwiTW9udGhcIixlKS9oKSk7dmFyIHA9Yi5nZXQoXCJGdWxsWWVhclwiLGUpfWw+PUgueWVhciYmYi5zZXQoXCJGdWxsWWVhclwiLGUscC1wJWgpO2w9PT1ILndlZWsmJihwPWIuZ2V0KFwiRGF5XCIsZSksYi5zZXQoXCJEYXRlXCIsZSxiLmdldChcIkRhdGVcIixlKS1wK2crKHA8Zz8tNzowKSkpO3A9Yi5nZXQoXCJGdWxsWWVhclwiLGUpO2c9Yi5nZXQoXCJNb250aFwiLGUpO3ZhciB1PWIuZ2V0KFwiRGF0ZVwiLGUpLGs9Yi5nZXQoXCJIb3Vyc1wiLGUpO249ZS5nZXRUaW1lKCk7Yi52YXJpYWJsZVRpbWV6b25lJiYoRT1mLW4+NCpILm1vbnRofHxiLmdldFRpbWV6b25lT2Zmc2V0KG4pIT09Yi5nZXRUaW1lem9uZU9mZnNldChmKSk7bj1lLmdldFRpbWUoKTtmb3IoZT0xO248ZjspYS5wdXNoKG4pLG49bD09PUgueWVhcj9iLm1ha2VUaW1lKHArZSpoLDApOmw9PT1ILm1vbnRoP2IubWFrZVRpbWUocCxnK2UqaCk6IUV8fGwhPT1ILmRheSYmbCE9PUgud2Vlaz9FJiZsPT09XG5ILmhvdXImJjE8aD9iLm1ha2VUaW1lKHAsZyx1LGsrZSpoKTpuK2wqaDpiLm1ha2VUaW1lKHAsZyx1K2UqaCoobD09PUguZGF5PzE6NykpLGUrKzthLnB1c2gobik7bDw9SC5ob3VyJiYxRTQ+YS5sZW5ndGgmJmEuZm9yRWFjaChmdW5jdGlvbihhKXswPT09YSUxOEU1JiZcIjAwMDAwMDAwMFwiPT09Yi5kYXRlRm9ybWF0KFwiJUglTSVTJUxcIixhKSYmKGRbYV09XCJkYXlcIil9KX1hLmluZm89RyhjLHtoaWdoZXJSYW5rczpkLHRvdGFsUmFuZ2U6bCpofSk7cmV0dXJuIGF9fX0pO00oSSxcInBhcnRzL09wdGlvbnMuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl1dLGZ1bmN0aW9uKGMpe3ZhciBmPWMuY29sb3IsRj1jLm1lcmdlO2MuZGVmYXVsdE9wdGlvbnM9e2NvbG9yczpcIiM3Y2I1ZWMgIzQzNDM0OCAjOTBlZDdkICNmN2EzNWMgIzgwODVlOSAjZjE1YzgwICNlNGQzNTQgIzJiOTA4ZiAjZjQ1YjViICM5MWU4ZTFcIi5zcGxpdChcIiBcIiksc3ltYm9sczpbXCJjaXJjbGVcIixcImRpYW1vbmRcIixcInNxdWFyZVwiLFxuXCJ0cmlhbmdsZVwiLFwidHJpYW5nbGUtZG93blwiXSxsYW5nOntsb2FkaW5nOlwiTG9hZGluZy4uLlwiLG1vbnRoczpcIkphbnVhcnkgRmVicnVhcnkgTWFyY2ggQXByaWwgTWF5IEp1bmUgSnVseSBBdWd1c3QgU2VwdGVtYmVyIE9jdG9iZXIgTm92ZW1iZXIgRGVjZW1iZXJcIi5zcGxpdChcIiBcIiksc2hvcnRNb250aHM6XCJKYW4gRmViIE1hciBBcHIgTWF5IEp1biBKdWwgQXVnIFNlcCBPY3QgTm92IERlY1wiLnNwbGl0KFwiIFwiKSx3ZWVrZGF5czpcIlN1bmRheSBNb25kYXkgVHVlc2RheSBXZWRuZXNkYXkgVGh1cnNkYXkgRnJpZGF5IFNhdHVyZGF5XCIuc3BsaXQoXCIgXCIpLGRlY2ltYWxQb2ludDpcIi5cIixudW1lcmljU3ltYm9sczpcImtNR1RQRVwiLnNwbGl0KFwiXCIpLHJlc2V0Wm9vbTpcIlJlc2V0IHpvb21cIixyZXNldFpvb21UaXRsZTpcIlJlc2V0IHpvb20gbGV2ZWwgMToxXCIsdGhvdXNhbmRzU2VwOlwiIFwifSxnbG9iYWw6e30sdGltZTpjLlRpbWUucHJvdG90eXBlLmRlZmF1bHRPcHRpb25zLGNoYXJ0OntzdHlsZWRNb2RlOiExLFxuYm9yZGVyUmFkaXVzOjAsY29sb3JDb3VudDoxMCxkZWZhdWx0U2VyaWVzVHlwZTpcImxpbmVcIixpZ25vcmVIaWRkZW5TZXJpZXM6ITAsc3BhY2luZzpbMTAsMTAsMTUsMTBdLHJlc2V0Wm9vbUJ1dHRvbjp7dGhlbWU6e3pJbmRleDo2fSxwb3NpdGlvbjp7YWxpZ246XCJyaWdodFwiLHg6LTEwLHk6MTB9fSx3aWR0aDpudWxsLGhlaWdodDpudWxsLGJvcmRlckNvbG9yOlwiIzMzNWNhZFwiLGJhY2tncm91bmRDb2xvcjpcIiNmZmZmZmZcIixwbG90Qm9yZGVyQ29sb3I6XCIjY2NjY2NjXCJ9LHRpdGxlOnt0ZXh0OlwiQ2hhcnQgdGl0bGVcIixhbGlnbjpcImNlbnRlclwiLG1hcmdpbjoxNSx3aWR0aEFkanVzdDotNDR9LHN1YnRpdGxlOnt0ZXh0OlwiXCIsYWxpZ246XCJjZW50ZXJcIix3aWR0aEFkanVzdDotNDR9LGNhcHRpb246e21hcmdpbjoxNSx0ZXh0OlwiXCIsYWxpZ246XCJsZWZ0XCIsdmVydGljYWxBbGlnbjpcImJvdHRvbVwifSxwbG90T3B0aW9uczp7fSxsYWJlbHM6e3N0eWxlOntwb3NpdGlvbjpcImFic29sdXRlXCIsY29sb3I6XCIjMzMzMzMzXCJ9fSxcbmxlZ2VuZDp7ZW5hYmxlZDohMCxhbGlnbjpcImNlbnRlclwiLGFsaWduQ29sdW1uczohMCxsYXlvdXQ6XCJob3Jpem9udGFsXCIsbGFiZWxGb3JtYXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lfSxib3JkZXJDb2xvcjpcIiM5OTk5OTlcIixib3JkZXJSYWRpdXM6MCxuYXZpZ2F0aW9uOnthY3RpdmVDb2xvcjpcIiMwMDMzOTlcIixpbmFjdGl2ZUNvbG9yOlwiI2NjY2NjY1wifSxpdGVtU3R5bGU6e2NvbG9yOlwiIzMzMzMzM1wiLGN1cnNvcjpcInBvaW50ZXJcIixmb250U2l6ZTpcIjEycHhcIixmb250V2VpZ2h0OlwiYm9sZFwiLHRleHRPdmVyZmxvdzpcImVsbGlwc2lzXCJ9LGl0ZW1Ib3ZlclN0eWxlOntjb2xvcjpcIiMwMDAwMDBcIn0saXRlbUhpZGRlblN0eWxlOntjb2xvcjpcIiNjY2NjY2NcIn0sc2hhZG93OiExLGl0ZW1DaGVja2JveFN0eWxlOntwb3NpdGlvbjpcImFic29sdXRlXCIsd2lkdGg6XCIxM3B4XCIsaGVpZ2h0OlwiMTNweFwifSxzcXVhcmVTeW1ib2w6ITAsc3ltYm9sUGFkZGluZzo1LHZlcnRpY2FsQWxpZ246XCJib3R0b21cIixcbng6MCx5OjAsdGl0bGU6e3N0eWxlOntmb250V2VpZ2h0OlwiYm9sZFwifX19LGxvYWRpbmc6e2xhYmVsU3R5bGU6e2ZvbnRXZWlnaHQ6XCJib2xkXCIscG9zaXRpb246XCJyZWxhdGl2ZVwiLHRvcDpcIjQ1JVwifSxzdHlsZTp7cG9zaXRpb246XCJhYnNvbHV0ZVwiLGJhY2tncm91bmRDb2xvcjpcIiNmZmZmZmZcIixvcGFjaXR5Oi41LHRleHRBbGlnbjpcImNlbnRlclwifX0sdG9vbHRpcDp7ZW5hYmxlZDohMCxhbmltYXRpb246Yy5zdmcsYm9yZGVyUmFkaXVzOjMsZGF0ZVRpbWVMYWJlbEZvcm1hdHM6e21pbGxpc2Vjb25kOlwiJUEsICViICVlLCAlSDolTTolUy4lTFwiLHNlY29uZDpcIiVBLCAlYiAlZSwgJUg6JU06JVNcIixtaW51dGU6XCIlQSwgJWIgJWUsICVIOiVNXCIsaG91cjpcIiVBLCAlYiAlZSwgJUg6JU1cIixkYXk6XCIlQSwgJWIgJWUsICVZXCIsd2VlazpcIldlZWsgZnJvbSAlQSwgJWIgJWUsICVZXCIsbW9udGg6XCIlQiAlWVwiLHllYXI6XCIlWVwifSxmb290ZXJGb3JtYXQ6XCJcIixwYWRkaW5nOjgsc25hcDpjLmlzVG91Y2hEZXZpY2U/XG4yNToxMCxoZWFkZXJGb3JtYXQ6JzxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4XCI+e3BvaW50LmtleX08L3NwYW4+PGJyLz4nLHBvaW50Rm9ybWF0Oic8c3BhbiBzdHlsZT1cImNvbG9yOntwb2ludC5jb2xvcn1cIj5cXHUyNWNmPC9zcGFuPiB7c2VyaWVzLm5hbWV9OiA8Yj57cG9pbnQueX08L2I+PGJyLz4nLGJhY2tncm91bmRDb2xvcjpmKFwiI2Y3ZjdmN1wiKS5zZXRPcGFjaXR5KC44NSkuZ2V0KCksYm9yZGVyV2lkdGg6MSxzaGFkb3c6ITAsc3R5bGU6e2NvbG9yOlwiIzMzMzMzM1wiLGN1cnNvcjpcImRlZmF1bHRcIixmb250U2l6ZTpcIjEycHhcIixwb2ludGVyRXZlbnRzOlwibm9uZVwiLHdoaXRlU3BhY2U6XCJub3dyYXBcIn19LGNyZWRpdHM6e2VuYWJsZWQ6ITAsaHJlZjpcImh0dHBzOi8vd3d3LmhpZ2hjaGFydHMuY29tP2NyZWRpdHNcIixwb3NpdGlvbjp7YWxpZ246XCJyaWdodFwiLHg6LTEwLHZlcnRpY2FsQWxpZ246XCJib3R0b21cIix5Oi01fSxzdHlsZTp7Y3Vyc29yOlwicG9pbnRlclwiLGNvbG9yOlwiIzk5OTk5OVwiLFxuZm9udFNpemU6XCI5cHhcIn0sdGV4dDpcIkhpZ2hjaGFydHMuY29tXCJ9fTtjLnNldE9wdGlvbnM9ZnVuY3Rpb24oZil7Yy5kZWZhdWx0T3B0aW9ucz1GKCEwLGMuZGVmYXVsdE9wdGlvbnMsZik7KGYudGltZXx8Zi5nbG9iYWwpJiZjLnRpbWUudXBkYXRlKEYoYy5kZWZhdWx0T3B0aW9ucy5nbG9iYWwsYy5kZWZhdWx0T3B0aW9ucy50aW1lLGYuZ2xvYmFsLGYudGltZSkpO3JldHVybiBjLmRlZmF1bHRPcHRpb25zfTtjLmdldE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gYy5kZWZhdWx0T3B0aW9uc307Yy5kZWZhdWx0UGxvdE9wdGlvbnM9Yy5kZWZhdWx0T3B0aW9ucy5wbG90T3B0aW9ucztjLnRpbWU9bmV3IGMuVGltZShGKGMuZGVmYXVsdE9wdGlvbnMuZ2xvYmFsLGMuZGVmYXVsdE9wdGlvbnMudGltZSkpO2MuZGF0ZUZvcm1hdD1mdW5jdGlvbihmLHosQil7cmV0dXJuIGMudGltZS5kYXRlRm9ybWF0KGYseixCKX07XCJcIn0pO00oSSxcInBhcnRzL1RpY2suanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sXG5JW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuZGVmaW5lZCxHPWYuZGVzdHJveU9iamVjdFByb3BlcnRpZXMsej1mLmV4dGVuZCxCPWYuaXNOdW1iZXIsdD1mLnBpY2ssdj1jLmNvcnJlY3RGbG9hdCxDPWMuZmlyZUV2ZW50LEg9Yy5tZXJnZSx5PWMuZGVnMnJhZDtjLlRpY2s9ZnVuY3Rpb24oYyxuLGYsZyxiKXt0aGlzLmF4aXM9Yzt0aGlzLnBvcz1uO3RoaXMudHlwZT1mfHxcIlwiO3RoaXMuaXNOZXdMYWJlbD10aGlzLmlzTmV3PSEwO3RoaXMucGFyYW1ldGVycz1ifHx7fTt0aGlzLnRpY2ttYXJrT2Zmc2V0PXRoaXMucGFyYW1ldGVycy50aWNrbWFya09mZnNldDt0aGlzLm9wdGlvbnM9dGhpcy5wYXJhbWV0ZXJzLm9wdGlvbnM7Znx8Z3x8dGhpcy5hZGRMYWJlbCgpfTtjLlRpY2sucHJvdG90eXBlPXthZGRMYWJlbDpmdW5jdGlvbigpe3ZhciBjPXRoaXMsbj1jLmF4aXMsZj1uLm9wdGlvbnMsZz1uLmNoYXJ0LGI9bi5jYXRlZ29yaWVzLGE9bi5uYW1lcyxcbmQ9Yy5wb3MsZT10KGMub3B0aW9ucyYmYy5vcHRpb25zLmxhYmVscyxmLmxhYmVscyksbD1uLnRpY2tQb3NpdGlvbnMsTD1kPT09bFswXSxFPWQ9PT1sW2wubGVuZ3RoLTFdO2I9dGhpcy5wYXJhbWV0ZXJzLmNhdGVnb3J5fHwoYj90KGJbZF0sYVtkXSxkKTpkKTt2YXIgcD1jLmxhYmVsO2w9bC5pbmZvO3ZhciB1LGs7aWYobi5pc0RhdGV0aW1lQXhpcyYmbCl7dmFyIHI9Zy50aW1lLnJlc29sdmVEVExGb3JtYXQoZi5kYXRlVGltZUxhYmVsRm9ybWF0c1shZi5ncmlkJiZsLmhpZ2hlclJhbmtzW2RdfHxsLnVuaXROYW1lXSk7dmFyIHg9ci5tYWlufWMuaXNGaXJzdD1MO2MuaXNMYXN0PUU7Yy5mb3JtYXRDdHg9e2F4aXM6bixjaGFydDpnLGlzRmlyc3Q6TCxpc0xhc3Q6RSxkYXRlVGltZUxhYmVsRm9ybWF0OngsdGlja1Bvc2l0aW9uSW5mbzpsLHZhbHVlOm4uaXNMb2c/dihuLmxpbjJsb2coYikpOmIscG9zOmR9O2Y9bi5sYWJlbEZvcm1hdHRlci5jYWxsKGMuZm9ybWF0Q3R4LHRoaXMuZm9ybWF0Q3R4KTtcbmlmKGs9ciYmci5saXN0KWMuc2hvcnRlbkxhYmVsPWZ1bmN0aW9uKCl7Zm9yKHU9MDt1PGsubGVuZ3RoO3UrKylpZihwLmF0dHIoe3RleHQ6bi5sYWJlbEZvcm1hdHRlci5jYWxsKHooYy5mb3JtYXRDdHgse2RhdGVUaW1lTGFiZWxGb3JtYXQ6a1t1XX0pKX0pLHAuZ2V0QkJveCgpLndpZHRoPG4uZ2V0U2xvdFdpZHRoKGMpLTIqdChlLnBhZGRpbmcsNSkpcmV0dXJuO3AuYXR0cih7dGV4dDpcIlwifSl9O2lmKEYocCkpcCYmcC50ZXh0U3RyIT09ZiYmKCFwLnRleHRXaWR0aHx8ZS5zdHlsZSYmZS5zdHlsZS53aWR0aHx8cC5zdHlsZXMud2lkdGh8fHAuY3NzKHt3aWR0aDpudWxsfSkscC5hdHRyKHt0ZXh0OmZ9KSxwLnRleHRQeExlbmd0aD1wLmdldEJCb3goKS53aWR0aCk7ZWxzZXtpZihjLmxhYmVsPXA9RihmKSYmZS5lbmFibGVkP2cucmVuZGVyZXIudGV4dChmLDAsMCxlLnVzZUhUTUwpLmFkZChuLmxhYmVsR3JvdXApOm51bGwpZy5zdHlsZWRNb2RlfHxwLmNzcyhIKGUuc3R5bGUpKSxwLnRleHRQeExlbmd0aD1cbnAuZ2V0QkJveCgpLndpZHRoO2Mucm90YXRpb249MH19LGdldExhYmVsU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhYmVsP3RoaXMubGFiZWwuZ2V0QkJveCgpW3RoaXMuYXhpcy5ob3Jpej9cImhlaWdodFwiOlwid2lkdGhcIl06MH0saGFuZGxlT3ZlcmZsb3c6ZnVuY3Rpb24oYyl7dmFyIGg9dGhpcy5heGlzLGY9aC5vcHRpb25zLmxhYmVscyxnPWMueCxiPWguY2hhcnQuY2hhcnRXaWR0aCxhPWguY2hhcnQuc3BhY2luZyxkPXQoaC5sYWJlbExlZnQsTWF0aC5taW4oaC5wb3MsYVszXSkpO2E9dChoLmxhYmVsUmlnaHQsTWF0aC5tYXgoaC5pc1JhZGlhbD8wOmgucG9zK2gubGVuLGItYVsxXSkpO3ZhciBlPXRoaXMubGFiZWwsbD10aGlzLnJvdGF0aW9uLEw9e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX1baC5sYWJlbEFsaWdufHxlLmF0dHIoXCJhbGlnblwiKV0sRT1lLmdldEJCb3goKS53aWR0aCxwPWguZ2V0U2xvdFdpZHRoKHRoaXMpLHU9cCxrPTEscix4PXt9O2lmKGx8fFwianVzdGlmeVwiIT09XG50KGYub3ZlcmZsb3csXCJqdXN0aWZ5XCIpKTA+bCYmZy1MKkU8ZD9yPU1hdGgucm91bmQoZy9NYXRoLmNvcyhsKnkpLWQpOjA8bCYmZytMKkU+YSYmKHI9TWF0aC5yb3VuZCgoYi1nKS9NYXRoLmNvcyhsKnkpKSk7ZWxzZSBpZihiPWcrKDEtTCkqRSxnLUwqRTxkP3U9Yy54K3UqKDEtTCktZDpiPmEmJih1PWEtYy54K3UqTCxrPS0xKSx1PU1hdGgubWluKHAsdSksdTxwJiZcImNlbnRlclwiPT09aC5sYWJlbEFsaWduJiYoYy54Kz1rKihwLXUtTCoocC1NYXRoLm1pbihFLHUpKSkpLEU+dXx8aC5hdXRvUm90YXRpb24mJihlLnN0eWxlc3x8e30pLndpZHRoKXI9dTtyJiYodGhpcy5zaG9ydGVuTGFiZWw/dGhpcy5zaG9ydGVuTGFiZWwoKTooeC53aWR0aD1NYXRoLmZsb29yKHIpLChmLnN0eWxlfHx7fSkudGV4dE92ZXJmbG93fHwoeC50ZXh0T3ZlcmZsb3c9XCJlbGxpcHNpc1wiKSxlLmNzcyh4KSkpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbihoLG4sZixnKXt2YXIgYj10aGlzLmF4aXMsYT1iLmNoYXJ0LFxuZD1nJiZhLm9sZENoYXJ0SGVpZ2h0fHxhLmNoYXJ0SGVpZ2h0O2g9e3g6aD9jLmNvcnJlY3RGbG9hdChiLnRyYW5zbGF0ZShuK2YsbnVsbCxudWxsLGcpK2IudHJhbnNCKTpiLmxlZnQrYi5vZmZzZXQrKGIub3Bwb3NpdGU/KGcmJmEub2xkQ2hhcnRXaWR0aHx8YS5jaGFydFdpZHRoKS1iLnJpZ2h0LWIubGVmdDowKSx5Omg/ZC1iLmJvdHRvbStiLm9mZnNldC0oYi5vcHBvc2l0ZT9iLmhlaWdodDowKTpjLmNvcnJlY3RGbG9hdChkLWIudHJhbnNsYXRlKG4rZixudWxsLG51bGwsZyktYi50cmFuc0IpfTtoLnk9TWF0aC5tYXgoTWF0aC5taW4oaC55LDFFNSksLTFFNSk7Qyh0aGlzLFwiYWZ0ZXJHZXRQb3NpdGlvblwiLHtwb3M6aH0pO3JldHVybiBofSxnZXRMYWJlbFBvc2l0aW9uOmZ1bmN0aW9uKGMsbixmLGcsYixhLGQsZSl7dmFyIGw9dGhpcy5heGlzLGg9bC50cmFuc0EsRT1sLmlzTGlua2VkJiZsLmxpbmtlZFBhcmVudD9sLmxpbmtlZFBhcmVudC5yZXZlcnNlZDpsLnJldmVyc2VkLHA9XG5sLnN0YWdnZXJMaW5lcyx1PWwudGlja1JvdENvcnJ8fHt4OjAseTowfSxrPWIueSxyPWd8fGwucmVzZXJ2ZVNwYWNlRGVmYXVsdD8wOi1sLmxhYmVsT2Zmc2V0KihcImNlbnRlclwiPT09bC5sYWJlbEFsaWduPy41OjEpLHg9e307RihrKXx8KGs9MD09PWwuc2lkZT9mLnJvdGF0aW9uPy04Oi1mLmdldEJCb3goKS5oZWlnaHQ6Mj09PWwuc2lkZT91LnkrODpNYXRoLmNvcyhmLnJvdGF0aW9uKnkpKih1LnktZi5nZXRCQm94KCExLDApLmhlaWdodC8yKSk7Yz1jK2IueCtyK3UueC0oYSYmZz9hKmgqKEU/LTE6MSk6MCk7bj1uK2stKGEmJiFnP2EqaCooRT8xOi0xKTowKTtwJiYoZj1kLyhlfHwxKSVwLGwub3Bwb3NpdGUmJihmPXAtZi0xKSxuKz1sLmxhYmVsT2Zmc2V0L3AqZik7eC54PWM7eC55PU1hdGgucm91bmQobik7Qyh0aGlzLFwiYWZ0ZXJHZXRMYWJlbFBvc2l0aW9uXCIse3Bvczp4LHRpY2ttYXJrT2Zmc2V0OmEsaW5kZXg6ZH0pO3JldHVybiB4fSxnZXRNYXJrUGF0aDpmdW5jdGlvbihjLFxubixmLGcsYixhKXtyZXR1cm4gYS5jcmlzcExpbmUoW1wiTVwiLGMsbixcIkxcIixjKyhiPzA6LWYpLG4rKGI/ZjowKV0sZyl9LHJlbmRlckdyaWRMaW5lOmZ1bmN0aW9uKGMsbixmKXt2YXIgZz10aGlzLmF4aXMsYj1nLm9wdGlvbnMsYT10aGlzLmdyaWRMaW5lLGQ9e30sZT10aGlzLnBvcyxsPXRoaXMudHlwZSxoPXQodGhpcy50aWNrbWFya09mZnNldCxnLnRpY2ttYXJrT2Zmc2V0KSxFPWcuY2hhcnQucmVuZGVyZXIscD1sP2wrXCJHcmlkXCI6XCJncmlkXCIsdT1iW3ArXCJMaW5lV2lkdGhcIl0saz1iW3ArXCJMaW5lQ29sb3JcIl07Yj1iW3ArXCJMaW5lRGFzaFN0eWxlXCJdO2F8fChnLmNoYXJ0LnN0eWxlZE1vZGV8fChkLnN0cm9rZT1rLGRbXCJzdHJva2Utd2lkdGhcIl09dSxiJiYoZC5kYXNoc3R5bGU9YikpLGx8fChkLnpJbmRleD0xKSxjJiYobj0wKSx0aGlzLmdyaWRMaW5lPWE9RS5wYXRoKCkuYXR0cihkKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtXCIrKGw/bCtcIi1cIjpcIlwiKStcImdyaWQtbGluZVwiKS5hZGQoZy5ncmlkR3JvdXApKTtcbmlmKGEmJihmPWcuZ2V0UGxvdExpbmVQYXRoKHt2YWx1ZTplK2gsbGluZVdpZHRoOmEuc3Ryb2tlV2lkdGgoKSpmLGZvcmNlOlwicGFzc1wiLG9sZDpjfSkpKWFbY3x8dGhpcy5pc05ldz9cImF0dHJcIjpcImFuaW1hdGVcIl0oe2Q6ZixvcGFjaXR5Om59KX0scmVuZGVyTWFyazpmdW5jdGlvbihjLG4sZil7dmFyIGc9dGhpcy5heGlzLGI9Zy5vcHRpb25zLGE9Zy5jaGFydC5yZW5kZXJlcixkPXRoaXMudHlwZSxlPWQ/ZCtcIlRpY2tcIjpcInRpY2tcIixsPWcudGlja1NpemUoZSksaD10aGlzLm1hcmssRT0haCxwPWMueDtjPWMueTt2YXIgdT10KGJbZStcIldpZHRoXCJdLCFkJiZnLmlzWEF4aXM/MTowKTtiPWJbZStcIkNvbG9yXCJdO2wmJihnLm9wcG9zaXRlJiYobFswXT0tbFswXSksRSYmKHRoaXMubWFyaz1oPWEucGF0aCgpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1cIisoZD9kK1wiLVwiOlwiXCIpK1widGlja1wiKS5hZGQoZy5heGlzR3JvdXApLGcuY2hhcnQuc3R5bGVkTW9kZXx8aC5hdHRyKHtzdHJva2U6YixcInN0cm9rZS13aWR0aFwiOnV9KSksXG5oW0U/XCJhdHRyXCI6XCJhbmltYXRlXCJdKHtkOnRoaXMuZ2V0TWFya1BhdGgocCxjLGxbMF0saC5zdHJva2VXaWR0aCgpKmYsZy5ob3JpeixhKSxvcGFjaXR5Om59KSl9LHJlbmRlckxhYmVsOmZ1bmN0aW9uKGMsbixmLGcpe3ZhciBiPXRoaXMuYXhpcyxhPWIuaG9yaXosZD1iLm9wdGlvbnMsZT10aGlzLmxhYmVsLGw9ZC5sYWJlbHMsaD1sLnN0ZXA7Yj10KHRoaXMudGlja21hcmtPZmZzZXQsYi50aWNrbWFya09mZnNldCk7dmFyIEU9ITAscD1jLng7Yz1jLnk7ZSYmQihwKSYmKGUueHk9Yz10aGlzLmdldExhYmVsUG9zaXRpb24ocCxjLGUsYSxsLGIsZyxoKSx0aGlzLmlzRmlyc3QmJiF0aGlzLmlzTGFzdCYmIXQoZC5zaG93Rmlyc3RMYWJlbCwxKXx8dGhpcy5pc0xhc3QmJiF0aGlzLmlzRmlyc3QmJiF0KGQuc2hvd0xhc3RMYWJlbCwxKT9FPSExOiFhfHxsLnN0ZXB8fGwucm90YXRpb258fG58fDA9PT1mfHx0aGlzLmhhbmRsZU92ZXJmbG93KGMpLGgmJmclaCYmKEU9ITEpLEUmJkIoYy55KT9cbihjLm9wYWNpdHk9ZixlW3RoaXMuaXNOZXdMYWJlbD9cImF0dHJcIjpcImFuaW1hdGVcIl0oYyksdGhpcy5pc05ld0xhYmVsPSExKTooZS5hdHRyKFwieVwiLC05OTk5KSx0aGlzLmlzTmV3TGFiZWw9ITApKX0scmVuZGVyOmZ1bmN0aW9uKGgsbixmKXt2YXIgZz10aGlzLmF4aXMsYj1nLmhvcml6LGE9dGhpcy5wb3MsZD10KHRoaXMudGlja21hcmtPZmZzZXQsZy50aWNrbWFya09mZnNldCk7YT10aGlzLmdldFBvc2l0aW9uKGIsYSxkLG4pO2Q9YS54O3ZhciBlPWEueTtnPWImJmQ9PT1nLnBvcytnLmxlbnx8IWImJmU9PT1nLnBvcz8tMToxO2Y9dChmLDEpO3RoaXMuaXNBY3RpdmU9ITA7dGhpcy5yZW5kZXJHcmlkTGluZShuLGYsZyk7dGhpcy5yZW5kZXJNYXJrKGEsZixnKTt0aGlzLnJlbmRlckxhYmVsKGEsbixmLGgpO3RoaXMuaXNOZXc9ITE7Yy5maXJlRXZlbnQodGhpcyxcImFmdGVyUmVuZGVyXCIpfSxkZXN0cm95OmZ1bmN0aW9uKCl7Ryh0aGlzLHRoaXMuYXhpcyl9fX0pO00oSSxcInBhcnRzL0F4aXMuanNcIixcbltJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuYXJyYXlNYXgsRz1mLmFycmF5TWluLHo9Zi5kZWZpbmVkLEI9Zi5kZXN0cm95T2JqZWN0UHJvcGVydGllcyx0PWYuZXh0ZW5kLHY9Zi5pc0FycmF5LEM9Zi5pc051bWJlcixIPWYuaXNTdHJpbmcseT1mLm9iamVjdEVhY2gsaD1mLnBpY2ssbj1mLnNwbGF0LHE9Zi5zeW5jVGltZW91dCxnPWMuYWRkRXZlbnQsYj1jLmFuaW1PYmplY3QsYT1jLmNvbG9yLGQ9Yy5jb3JyZWN0RmxvYXQsZT1jLmRlZmF1bHRPcHRpb25zLGw9Yy5kZWcycmFkLEw9Yy5maXJlRXZlbnQsRT1jLmZvcm1hdCxwPWMuZ2V0TWFnbml0dWRlLHU9Yy5tZXJnZSxrPWMubm9ybWFsaXplVGlja0ludGVydmFsLHI9Yy5yZW1vdmVFdmVudCx4PWMuc2VyaWVzVHlwZXMsQT1jLlRpY2s7Zj1mdW5jdGlvbigpe3RoaXMuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3QoZi5wcm90b3R5cGUse2RlZmF1bHRPcHRpb25zOntkYXRlVGltZUxhYmVsRm9ybWF0czp7bWlsbGlzZWNvbmQ6e21haW46XCIlSDolTTolUy4lTFwiLFxucmFuZ2U6ITF9LHNlY29uZDp7bWFpbjpcIiVIOiVNOiVTXCIscmFuZ2U6ITF9LG1pbnV0ZTp7bWFpbjpcIiVIOiVNXCIscmFuZ2U6ITF9LGhvdXI6e21haW46XCIlSDolTVwiLHJhbmdlOiExfSxkYXk6e21haW46XCIlZS4gJWJcIn0sd2Vlazp7bWFpbjpcIiVlLiAlYlwifSxtb250aDp7bWFpbjpcIiViICcleVwifSx5ZWFyOnttYWluOlwiJVlcIn19LGVuZE9uVGljazohMSxsYWJlbHM6e2VuYWJsZWQ6ITAsaW5kZW50YXRpb246MTAseDowLHN0eWxlOntjb2xvcjpcIiM2NjY2NjZcIixjdXJzb3I6XCJkZWZhdWx0XCIsZm9udFNpemU6XCIxMXB4XCJ9fSxtYXhQYWRkaW5nOi4wMSxtaW5vclRpY2tMZW5ndGg6MixtaW5vclRpY2tQb3NpdGlvbjpcIm91dHNpZGVcIixtaW5QYWRkaW5nOi4wMSxzaG93RW1wdHk6ITAsc3RhcnRPZldlZWs6MSxzdGFydE9uVGljazohMSx0aWNrTGVuZ3RoOjEwLHRpY2tQaXhlbEludGVydmFsOjEwMCx0aWNrbWFya1BsYWNlbWVudDpcImJldHdlZW5cIix0aWNrUG9zaXRpb246XCJvdXRzaWRlXCIsdGl0bGU6e2FsaWduOlwibWlkZGxlXCIsXG5zdHlsZTp7Y29sb3I6XCIjNjY2NjY2XCJ9fSx0eXBlOlwibGluZWFyXCIsbWlub3JHcmlkTGluZUNvbG9yOlwiI2YyZjJmMlwiLG1pbm9yR3JpZExpbmVXaWR0aDoxLG1pbm9yVGlja0NvbG9yOlwiIzk5OTk5OVwiLGxpbmVDb2xvcjpcIiNjY2Q2ZWJcIixsaW5lV2lkdGg6MSxncmlkTGluZUNvbG9yOlwiI2U2ZTZlNlwiLHRpY2tDb2xvcjpcIiNjY2Q2ZWJcIn0sZGVmYXVsdFlBeGlzT3B0aW9uczp7ZW5kT25UaWNrOiEwLG1heFBhZGRpbmc6LjA1LG1pblBhZGRpbmc6LjA1LHRpY2tQaXhlbEludGVydmFsOjcyLHNob3dMYXN0TGFiZWw6ITAsbGFiZWxzOnt4Oi04fSxzdGFydE9uVGljazohMCx0aXRsZTp7cm90YXRpb246MjcwLHRleHQ6XCJWYWx1ZXNcIn0sc3RhY2tMYWJlbHM6e2FsbG93T3ZlcmxhcDohMSxlbmFibGVkOiExLGNyb3A6ITAsb3ZlcmZsb3c6XCJqdXN0aWZ5XCIsZm9ybWF0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGMubnVtYmVyRm9ybWF0KHRoaXMudG90YWwsLTEpfSxzdHlsZTp7Y29sb3I6XCIjMDAwMDAwXCIsXG5mb250U2l6ZTpcIjExcHhcIixmb250V2VpZ2h0OlwiYm9sZFwiLHRleHRPdXRsaW5lOlwiMXB4IGNvbnRyYXN0XCJ9fSxncmlkTGluZVdpZHRoOjEsbGluZVdpZHRoOjB9LGRlZmF1bHRMZWZ0QXhpc09wdGlvbnM6e2xhYmVsczp7eDotMTV9LHRpdGxlOntyb3RhdGlvbjoyNzB9fSxkZWZhdWx0UmlnaHRBeGlzT3B0aW9uczp7bGFiZWxzOnt4OjE1fSx0aXRsZTp7cm90YXRpb246OTB9fSxkZWZhdWx0Qm90dG9tQXhpc09wdGlvbnM6e2xhYmVsczp7YXV0b1JvdGF0aW9uOlstNDVdLHg6MH0sbWFyZ2luOjE1LHRpdGxlOntyb3RhdGlvbjowfX0sZGVmYXVsdFRvcEF4aXNPcHRpb25zOntsYWJlbHM6e2F1dG9Sb3RhdGlvbjpbLTQ1XSx4OjB9LG1hcmdpbjoxNSx0aXRsZTp7cm90YXRpb246MH19LGluaXQ6ZnVuY3Rpb24oYSxiKXt2YXIgZD1iLmlzWCxtPXRoaXM7bS5jaGFydD1hO20uaG9yaXo9YS5pbnZlcnRlZCYmIW0uaXNaQXhpcz8hZDpkO20uaXNYQXhpcz1kO20uY29sbD1tLmNvbGx8fChkP1wieEF4aXNcIjpcblwieUF4aXNcIik7TCh0aGlzLFwiaW5pdFwiLHt1c2VyT3B0aW9uczpifSk7bS5vcHBvc2l0ZT1iLm9wcG9zaXRlO20uc2lkZT1iLnNpZGV8fChtLmhvcml6P20ub3Bwb3NpdGU/MDoyOm0ub3Bwb3NpdGU/MTozKTttLnNldE9wdGlvbnMoYik7dmFyIGU9dGhpcy5vcHRpb25zLHc9ZS50eXBlO20ubGFiZWxGb3JtYXR0ZXI9ZS5sYWJlbHMuZm9ybWF0dGVyfHxtLmRlZmF1bHRMYWJlbEZvcm1hdHRlcjttLnVzZXJPcHRpb25zPWI7bS5taW5QaXhlbFBhZGRpbmc9MDttLnJldmVyc2VkPWUucmV2ZXJzZWQ7bS52aXNpYmxlPSExIT09ZS52aXNpYmxlO20uem9vbUVuYWJsZWQ9ITEhPT1lLnpvb21FbmFibGVkO20uaGFzTmFtZXM9XCJjYXRlZ29yeVwiPT09d3x8ITA9PT1lLmNhdGVnb3JpZXM7bS5jYXRlZ29yaWVzPWUuY2F0ZWdvcmllc3x8bS5oYXNOYW1lczttLm5hbWVzfHwobS5uYW1lcz1bXSxtLm5hbWVzLmtleXM9e30pO20ucGxvdExpbmVzQW5kQmFuZHNHcm91cHM9e307bS5pc0xvZz1cImxvZ2FyaXRobWljXCI9PT1cbnc7bS5pc0RhdGV0aW1lQXhpcz1cImRhdGV0aW1lXCI9PT13O20ucG9zaXRpdmVWYWx1ZXNPbmx5PW0uaXNMb2cmJiFtLmFsbG93TmVnYXRpdmVMb2c7bS5pc0xpbmtlZD16KGUubGlua2VkVG8pO20udGlja3M9e307bS5sYWJlbEVkZ2U9W107bS5taW5vclRpY2tzPXt9O20ucGxvdExpbmVzQW5kQmFuZHM9W107bS5hbHRlcm5hdGVCYW5kcz17fTttLmxlbj0wO20ubWluUmFuZ2U9bS51c2VyTWluUmFuZ2U9ZS5taW5SYW5nZXx8ZS5tYXhab29tO20ucmFuZ2U9ZS5yYW5nZTttLm9mZnNldD1lLm9mZnNldHx8MDttLnN0YWNrcz17fTttLm9sZFN0YWNrcz17fTttLnN0YWNrc1RvdWNoZWQ9MDttLm1heD1udWxsO20ubWluPW51bGw7bS5jcm9zc2hhaXI9aChlLmNyb3NzaGFpcixuKGEub3B0aW9ucy50b29sdGlwLmNyb3NzaGFpcnMpW2Q/MDoxXSwhMSk7Yj1tLm9wdGlvbnMuZXZlbnRzOy0xPT09YS5heGVzLmluZGV4T2YobSkmJihkP2EuYXhlcy5zcGxpY2UoYS54QXhpcy5sZW5ndGgsMCxtKTpcbmEuYXhlcy5wdXNoKG0pLGFbbS5jb2xsXS5wdXNoKG0pKTttLnNlcmllcz1tLnNlcmllc3x8W107YS5pbnZlcnRlZCYmIW0uaXNaQXhpcyYmZCYmdm9pZCAwPT09bS5yZXZlcnNlZCYmKG0ucmV2ZXJzZWQ9ITApO3koYixmdW5jdGlvbihhLGIpe2MuaXNGdW5jdGlvbihhKSYmZyhtLGIsYSl9KTttLmxpbjJsb2c9ZS5saW5lYXJUb0xvZ0NvbnZlcnRlcnx8bS5saW4ybG9nO20uaXNMb2cmJihtLnZhbDJsaW49bS5sb2cybGluLG0ubGluMnZhbD1tLmxpbjJsb2cpO0wodGhpcyxcImFmdGVySW5pdFwiKX0sc2V0T3B0aW9uczpmdW5jdGlvbihhKXt0aGlzLm9wdGlvbnM9dSh0aGlzLmRlZmF1bHRPcHRpb25zLFwieUF4aXNcIj09PXRoaXMuY29sbCYmdGhpcy5kZWZhdWx0WUF4aXNPcHRpb25zLFt0aGlzLmRlZmF1bHRUb3BBeGlzT3B0aW9ucyx0aGlzLmRlZmF1bHRSaWdodEF4aXNPcHRpb25zLHRoaXMuZGVmYXVsdEJvdHRvbUF4aXNPcHRpb25zLHRoaXMuZGVmYXVsdExlZnRBeGlzT3B0aW9uc11bdGhpcy5zaWRlXSxcbnUoZVt0aGlzLmNvbGxdLGEpKTtMKHRoaXMsXCJhZnRlclNldE9wdGlvbnNcIix7dXNlck9wdGlvbnM6YX0pfSxkZWZhdWx0TGFiZWxGb3JtYXR0ZXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmF4aXMsYj10aGlzLnZhbHVlLGQ9YS5jaGFydC50aW1lLGs9YS5jYXRlZ29yaWVzLGw9dGhpcy5kYXRlVGltZUxhYmVsRm9ybWF0LGc9ZS5sYW5nLHI9Zy5udW1lcmljU3ltYm9scztnPWcubnVtZXJpY1N5bWJvbE1hZ25pdHVkZXx8MUUzO3ZhciB4PXImJnIubGVuZ3RoLHA9YS5vcHRpb25zLmxhYmVscy5mb3JtYXQ7YT1hLmlzTG9nP01hdGguYWJzKGIpOmEudGlja0ludGVydmFsO2lmKHApdmFyIGg9RShwLHRoaXMsZCk7ZWxzZSBpZihrKWg9YjtlbHNlIGlmKGwpaD1kLmRhdGVGb3JtYXQobCxiKTtlbHNlIGlmKHgmJjFFMzw9YSlmb3IoO3gtLSYmdm9pZCAwPT09aDspZD1NYXRoLnBvdyhnLHgrMSksYT49ZCYmMD09PTEwKmIlZCYmbnVsbCE9PXJbeF0mJjAhPT1iJiYoaD1jLm51bWJlckZvcm1hdChiL1xuZCwtMSkrclt4XSk7dm9pZCAwPT09aCYmKGg9MUU0PD1NYXRoLmFicyhiKT9jLm51bWJlckZvcm1hdChiLC0xKTpjLm51bWJlckZvcm1hdChiLC0xLHZvaWQgMCxcIlwiKSk7cmV0dXJuIGh9LGdldFNlcmllc0V4dHJlbWVzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuY2hhcnQsZDtMKHRoaXMsXCJnZXRTZXJpZXNFeHRyZW1lc1wiLG51bGwsZnVuY3Rpb24oKXthLmhhc1Zpc2libGVTZXJpZXM9ITE7YS5kYXRhTWluPWEuZGF0YU1heD1hLnRocmVzaG9sZD1udWxsO2Euc29mdFRocmVzaG9sZD0hYS5pc1hBeGlzO2EuYnVpbGRTdGFja3MmJmEuYnVpbGRTdGFja3MoKTthLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKG0pe2lmKG0udmlzaWJsZXx8IWIub3B0aW9ucy5jaGFydC5pZ25vcmVIaWRkZW5TZXJpZXMpe3ZhciBlPW0ub3B0aW9ucyx3PWUudGhyZXNob2xkO2EuaGFzVmlzaWJsZVNlcmllcz0hMDthLnBvc2l0aXZlVmFsdWVzT25seSYmMD49dyYmKHc9bnVsbCk7aWYoYS5pc1hBeGlzKXtpZihlPVxubS54RGF0YSxlLmxlbmd0aCl7ZD1tLmdldFhFeHRyZW1lcyhlKTt2YXIgaz1kLm1pbjt2YXIgYz1kLm1heDtDKGspfHxrIGluc3RhbmNlb2YgRGF0ZXx8KGU9ZS5maWx0ZXIoQyksZD1tLmdldFhFeHRyZW1lcyhlKSxrPWQubWluLGM9ZC5tYXgpO2UubGVuZ3RoJiYoYS5kYXRhTWluPU1hdGgubWluKGgoYS5kYXRhTWluLGspLGspLGEuZGF0YU1heD1NYXRoLm1heChoKGEuZGF0YU1heCxjKSxjKSl9fWVsc2UgaWYobS5nZXRFeHRyZW1lcygpLGM9bS5kYXRhTWF4LGs9bS5kYXRhTWluLHooaykmJnooYykmJihhLmRhdGFNaW49TWF0aC5taW4oaChhLmRhdGFNaW4sayksayksYS5kYXRhTWF4PU1hdGgubWF4KGgoYS5kYXRhTWF4LGMpLGMpKSx6KHcpJiYoYS50aHJlc2hvbGQ9dyksIWUuc29mdFRocmVzaG9sZHx8YS5wb3NpdGl2ZVZhbHVlc09ubHkpYS5zb2Z0VGhyZXNob2xkPSExfX0pfSk7TCh0aGlzLFwiYWZ0ZXJHZXRTZXJpZXNFeHRyZW1lc1wiKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGEsXG5iLGQsZSxrLGMpe3ZhciBtPXRoaXMubGlua2VkUGFyZW50fHx0aGlzLHc9MSxsPTAsZz1lP20ub2xkVHJhbnNBOm0udHJhbnNBO2U9ZT9tLm9sZE1pbjptLm1pbjt2YXIgcj1tLm1pblBpeGVsUGFkZGluZztrPShtLmlzT3JkaW5hbHx8bS5pc0Jyb2tlbnx8bS5pc0xvZyYmaykmJm0ubGluMnZhbDtnfHwoZz1tLnRyYW5zQSk7ZCYmKHcqPS0xLGw9bS5sZW4pO20ucmV2ZXJzZWQmJih3Kj0tMSxsLT13KihtLnNlY3Rvcnx8bS5sZW4pKTtiPyhhPShhKncrbC1yKS9nK2UsayYmKGE9bS5saW4ydmFsKGEpKSk6KGsmJihhPW0udmFsMmxpbihhKSksYT1DKGUpP3cqKGEtZSkqZytsK3cqcisoQyhjKT9nKmM6MCk6dm9pZCAwKTtyZXR1cm4gYX0sdG9QaXhlbHM6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy50cmFuc2xhdGUoYSwhMSwhdGhpcy5ob3JpeixudWxsLCEwKSsoYj8wOnRoaXMucG9zKX0sdG9WYWx1ZTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnRyYW5zbGF0ZShhLShiPzA6dGhpcy5wb3MpLFxuITAsIXRoaXMuaG9yaXosbnVsbCwhMCl9LGdldFBsb3RMaW5lUGF0aDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGQ9Yi5jaGFydCxlPWIubGVmdCx3PWIudG9wLGs9YS5vbGQsYz1hLnZhbHVlLGw9YS50cmFuc2xhdGVkVmFsdWUsZz1hLmxpbmVXaWR0aCxyPWEuZm9yY2UseCxwLEEsdSxuPWsmJmQub2xkQ2hhcnRIZWlnaHR8fGQuY2hhcnRIZWlnaHQsZj1rJiZkLm9sZENoYXJ0V2lkdGh8fGQuY2hhcnRXaWR0aCxFLHE9Yi50cmFuc0Isdj1mdW5jdGlvbihhLGIsZCl7aWYoXCJwYXNzXCIhPT1yJiZhPGJ8fGE+ZClyP2E9TWF0aC5taW4oTWF0aC5tYXgoYixhKSxkKTpFPSEwO3JldHVybiBhfTthPXt2YWx1ZTpjLGxpbmVXaWR0aDpnLG9sZDprLGZvcmNlOnIsYWNyb3NzUGFuZXM6YS5hY3Jvc3NQYW5lcyx0cmFuc2xhdGVkVmFsdWU6bH07TCh0aGlzLFwiZ2V0UGxvdExpbmVQYXRoXCIsYSxmdW5jdGlvbihhKXtsPWgobCxiLnRyYW5zbGF0ZShjLG51bGwsbnVsbCxrKSk7bD1NYXRoLm1pbihNYXRoLm1heCgtMUU1LFxubCksMUU1KTt4PUE9TWF0aC5yb3VuZChsK3EpO3A9dT1NYXRoLnJvdW5kKG4tbC1xKTtDKGwpP2IuaG9yaXo/KHA9dyx1PW4tYi5ib3R0b20seD1BPXYoeCxlLGUrYi53aWR0aCkpOih4PWUsQT1mLWIucmlnaHQscD11PXYocCx3LHcrYi5oZWlnaHQpKTooRT0hMCxyPSExKTthLnBhdGg9RSYmIXI/bnVsbDpkLnJlbmRlcmVyLmNyaXNwTGluZShbXCJNXCIseCxwLFwiTFwiLEEsdV0sZ3x8MSl9KTtyZXR1cm4gYS5wYXRofSxnZXRMaW5lYXJUaWNrUG9zaXRpb25zOmZ1bmN0aW9uKGEsYixlKXt2YXIgbT1kKE1hdGguZmxvb3IoYi9hKSphKTtlPWQoTWF0aC5jZWlsKGUvYSkqYSk7dmFyIHc9W10saztkKG0rYSk9PT1tJiYoaz0yMCk7aWYodGhpcy5zaW5nbGUpcmV0dXJuW2JdO2ZvcihiPW07Yjw9ZTspe3cucHVzaChiKTtiPWQoYithLGspO2lmKGI9PT1jKWJyZWFrO3ZhciBjPWJ9cmV0dXJuIHd9LGdldE1pbm9yVGlja0ludGVydmFsOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zO3JldHVybiEwPT09XG5hLm1pbm9yVGlja3M/aChhLm1pbm9yVGlja0ludGVydmFsLFwiYXV0b1wiKTohMT09PWEubWlub3JUaWNrcz9udWxsOmEubWlub3JUaWNrSW50ZXJ2YWx9LGdldE1pbm9yVGlja1Bvc2l0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLm9wdGlvbnMsZD1hLnRpY2tQb3NpdGlvbnMsZT1hLm1pbm9yVGlja0ludGVydmFsLGs9W10sYz1hLnBvaW50UmFuZ2VQYWRkaW5nfHwwLGw9YS5taW4tYztjPWEubWF4K2M7dmFyIGc9Yy1sO2lmKGcmJmcvZTxhLmxlbi8zKWlmKGEuaXNMb2cpdGhpcy5wYWRkZWRUaWNrcy5mb3JFYWNoKGZ1bmN0aW9uKGIsZCxtKXtkJiZrLnB1c2guYXBwbHkoayxhLmdldExvZ1RpY2tQb3NpdGlvbnMoZSxtW2QtMV0sbVtkXSwhMCkpfSk7ZWxzZSBpZihhLmlzRGF0ZXRpbWVBeGlzJiZcImF1dG9cIj09PXRoaXMuZ2V0TWlub3JUaWNrSW50ZXJ2YWwoKSlrPWsuY29uY2F0KGEuZ2V0VGltZVRpY2tzKGEubm9ybWFsaXplVGltZVRpY2tJbnRlcnZhbChlKSxsLGMsYi5zdGFydE9mV2VlaykpO1xuZWxzZSBmb3IoYj1sKyhkWzBdLWwpJWU7Yjw9YyYmYiE9PWtbMF07Yis9ZSlrLnB1c2goYik7MCE9PWsubGVuZ3RoJiZhLnRyaW1UaWNrcyhrKTtyZXR1cm4ga30sYWRqdXN0Rm9yTWluUmFuZ2U6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMsYj10aGlzLm1pbixkPXRoaXMubWF4LGUsayxjLGwsZzt0aGlzLmlzWEF4aXMmJnZvaWQgMD09PXRoaXMubWluUmFuZ2UmJiF0aGlzLmlzTG9nJiYoeihhLm1pbil8fHooYS5tYXgpP3RoaXMubWluUmFuZ2U9bnVsbDoodGhpcy5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihhKXtsPWEueERhdGE7Zm9yKGs9Zz1hLnhJbmNyZW1lbnQ/MTpsLmxlbmd0aC0xOzA8aztrLS0paWYoYz1sW2tdLWxbay0xXSx2b2lkIDA9PT1lfHxjPGUpZT1jfSksdGhpcy5taW5SYW5nZT1NYXRoLm1pbig1KmUsdGhpcy5kYXRhTWF4LXRoaXMuZGF0YU1pbikpKTtpZihkLWI8dGhpcy5taW5SYW5nZSl7dmFyIHI9dGhpcy5kYXRhTWF4LXRoaXMuZGF0YU1pbj49dGhpcy5taW5SYW5nZTtcbnZhciB4PXRoaXMubWluUmFuZ2U7dmFyIHA9KHgtZCtiKS8yO3A9W2ItcCxoKGEubWluLGItcCldO3ImJihwWzJdPXRoaXMuaXNMb2c/dGhpcy5sb2cybGluKHRoaXMuZGF0YU1pbik6dGhpcy5kYXRhTWluKTtiPUYocCk7ZD1bYit4LGgoYS5tYXgsYit4KV07ciYmKGRbMl09dGhpcy5pc0xvZz90aGlzLmxvZzJsaW4odGhpcy5kYXRhTWF4KTp0aGlzLmRhdGFNYXgpO2Q9RyhkKTtkLWI8eCYmKHBbMF09ZC14LHBbMV09aChhLm1pbixkLXgpLGI9RihwKSl9dGhpcy5taW49Yjt0aGlzLm1heD1kfSxnZXRDbG9zZXN0OmZ1bmN0aW9uKCl7dmFyIGE7dGhpcy5jYXRlZ29yaWVzP2E9MTp0aGlzLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPWIuY2xvc2VzdFBvaW50UmFuZ2UsbT1iLnZpc2libGV8fCFiLmNoYXJ0Lm9wdGlvbnMuY2hhcnQuaWdub3JlSGlkZGVuU2VyaWVzOyFiLm5vU2hhcmVkVG9vbHRpcCYmeihkKSYmbSYmKGE9eihhKT9NYXRoLm1pbihhLGQpOmQpfSk7cmV0dXJuIGF9LFxubmFtZVRvWDpmdW5jdGlvbihhKXt2YXIgYj12KHRoaXMuY2F0ZWdvcmllcyksZD1iP3RoaXMuY2F0ZWdvcmllczp0aGlzLm5hbWVzLGU9YS5vcHRpb25zLng7YS5zZXJpZXMucmVxdWlyZVNvcnRpbmc9ITE7eihlKXx8KGU9ITE9PT10aGlzLm9wdGlvbnMudW5pcXVlTmFtZXM/YS5zZXJpZXMuYXV0b0luY3JlbWVudCgpOmI/ZC5pbmRleE9mKGEubmFtZSk6aChkLmtleXNbYS5uYW1lXSwtMSkpO2lmKC0xPT09ZSl7aWYoIWIpdmFyIGs9ZC5sZW5ndGh9ZWxzZSBrPWU7dm9pZCAwIT09ayYmKHRoaXMubmFtZXNba109YS5uYW1lLHRoaXMubmFtZXMua2V5c1thLm5hbWVdPWspO3JldHVybiBrfSx1cGRhdGVOYW1lczpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLm5hbWVzOzA8Yi5sZW5ndGgmJihPYmplY3Qua2V5cyhiLmtleXMpLmZvckVhY2goZnVuY3Rpb24oYSl7ZGVsZXRlIGIua2V5c1thXX0pLGIubGVuZ3RoPTAsdGhpcy5taW5SYW5nZT10aGlzLnVzZXJNaW5SYW5nZSwodGhpcy5zZXJpZXN8fFxuW10pLmZvckVhY2goZnVuY3Rpb24oYil7Yi54SW5jcmVtZW50PW51bGw7aWYoIWIucG9pbnRzfHxiLmlzRGlydHlEYXRhKWEubWF4PU1hdGgubWF4KGEubWF4LGIueERhdGEubGVuZ3RoLTEpLGIucHJvY2Vzc0RhdGEoKSxiLmdlbmVyYXRlUG9pbnRzKCk7Yi5kYXRhLmZvckVhY2goZnVuY3Rpb24oZCxlKXtpZihkJiZkLm9wdGlvbnMmJnZvaWQgMCE9PWQubmFtZSl7dmFyIG09YS5uYW1lVG9YKGQpO3ZvaWQgMCE9PW0mJm0hPT1kLngmJihkLng9bSxiLnhEYXRhW2VdPW0pfX0pfSkpfSxzZXRBeGlzVHJhbnNsYXRpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxkPWIubWF4LWIubWluLGU9Yi5heGlzUG9pbnRSYW5nZXx8MCxrPTAsdz0wLGM9Yi5saW5rZWRQYXJlbnQsbD0hIWIuY2F0ZWdvcmllcyxnPWIudHJhbnNBLHI9Yi5pc1hBeGlzO2lmKHJ8fGx8fGUpe3ZhciBwPWIuZ2V0Q2xvc2VzdCgpO2M/KGs9Yy5taW5Qb2ludE9mZnNldCx3PWMucG9pbnRSYW5nZVBhZGRpbmcpOmIuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGQ9XG5sPzE6cj9oKGEub3B0aW9ucy5wb2ludFJhbmdlLHAsMCk6Yi5heGlzUG9pbnRSYW5nZXx8MCxtPWEub3B0aW9ucy5wb2ludFBsYWNlbWVudDtlPU1hdGgubWF4KGUsZCk7aWYoIWIuc2luZ2xlfHxsKWE9eC54cmFuZ2UmJmEgaW5zdGFuY2VvZiB4LnhyYW5nZT8hcjpyLGs9TWF0aC5tYXgoayxhJiZIKG0pPzA6ZC8yKSx3PU1hdGgubWF4KHcsYSYmXCJvblwiPT09bT8wOmQpfSk7Yz1iLm9yZGluYWxTbG9wZSYmcD9iLm9yZGluYWxTbG9wZS9wOjE7Yi5taW5Qb2ludE9mZnNldD1rKj1jO2IucG9pbnRSYW5nZVBhZGRpbmc9dyo9YztiLnBvaW50UmFuZ2U9TWF0aC5taW4oZSxiLnNpbmdsZSYmbD8xOmQpO3ImJihiLmNsb3Nlc3RQb2ludFJhbmdlPXApfWEmJihiLm9sZFRyYW5zQT1nKTtiLnRyYW5zbGF0aW9uU2xvcGU9Yi50cmFuc0E9Zz1iLnN0YXRpY1NjYWxlfHxiLmxlbi8oZCt3fHwxKTtiLnRyYW5zQj1iLmhvcml6P2IubGVmdDpiLmJvdHRvbTtiLm1pblBpeGVsUGFkZGluZz1nKms7TCh0aGlzLFxuXCJhZnRlclNldEF4aXNUcmFuc2xhdGlvblwiKX0sbWluRnJvbVJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4LXRoaXMucmFuZ2V9LHNldFRpY2tJbnRlcnZhbDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGU9Yi5jaGFydCx3PWIub3B0aW9ucyxsPWIuaXNMb2csZz1iLmlzRGF0ZXRpbWVBeGlzLHI9Yi5pc1hBeGlzLHg9Yi5pc0xpbmtlZCxBPXcubWF4UGFkZGluZyx1PXcubWluUGFkZGluZyxuPXcudGlja0ludGVydmFsLGY9dy50aWNrUGl4ZWxJbnRlcnZhbCxFPWIuY2F0ZWdvcmllcyxxPUMoYi50aHJlc2hvbGQpP2IudGhyZXNob2xkOm51bGwsdj1iLnNvZnRUaHJlc2hvbGQ7Z3x8RXx8eHx8dGhpcy5nZXRUaWNrQW1vdW50KCk7dmFyIHQ9aChiLnVzZXJNaW4sdy5taW4pO3ZhciB5PWgoYi51c2VyTWF4LHcubWF4KTtpZih4KXtiLmxpbmtlZFBhcmVudD1lW2IuY29sbF1bdy5saW5rZWRUb107dmFyIEI9Yi5saW5rZWRQYXJlbnQuZ2V0RXh0cmVtZXMoKTtiLm1pbj1oKEIubWluLFxuQi5kYXRhTWluKTtiLm1heD1oKEIubWF4LEIuZGF0YU1heCk7dy50eXBlIT09Yi5saW5rZWRQYXJlbnQub3B0aW9ucy50eXBlJiZjLmVycm9yKDExLDEsZSl9ZWxzZXtpZighdiYmeihxKSlpZihiLmRhdGFNaW4+PXEpQj1xLHU9MDtlbHNlIGlmKGIuZGF0YU1heDw9cSl7dmFyIEg9cTtBPTB9Yi5taW49aCh0LEIsYi5kYXRhTWluKTtiLm1heD1oKHksSCxiLmRhdGFNYXgpfWwmJihiLnBvc2l0aXZlVmFsdWVzT25seSYmIWEmJjA+PU1hdGgubWluKGIubWluLGgoYi5kYXRhTWluLGIubWluKSkmJmMuZXJyb3IoMTAsMSxlKSxiLm1pbj1kKGIubG9nMmxpbihiLm1pbiksMTYpLGIubWF4PWQoYi5sb2cybGluKGIubWF4KSwxNikpO2IucmFuZ2UmJnooYi5tYXgpJiYoYi51c2VyTWluPWIubWluPXQ9TWF0aC5tYXgoYi5kYXRhTWluLGIubWluRnJvbVJhbmdlKCkpLGIudXNlck1heD15PWIubWF4LGIucmFuZ2U9bnVsbCk7TChiLFwiZm91bmRFeHRyZW1lc1wiKTtiLmJlZm9yZVBhZGRpbmcmJmIuYmVmb3JlUGFkZGluZygpO1xuYi5hZGp1c3RGb3JNaW5SYW5nZSgpOyEoRXx8Yi5heGlzUG9pbnRSYW5nZXx8Yi51c2VQZXJjZW50YWdlfHx4KSYmeihiLm1pbikmJnooYi5tYXgpJiYoZT1iLm1heC1iLm1pbikmJigheih0KSYmdSYmKGIubWluLT1lKnUpLCF6KHkpJiZBJiYoYi5tYXgrPWUqQSkpO0Mody5zb2Z0TWluKSYmIUMoYi51c2VyTWluKSYmdy5zb2Z0TWluPGIubWluJiYoYi5taW49dD13LnNvZnRNaW4pO0Mody5zb2Z0TWF4KSYmIUMoYi51c2VyTWF4KSYmdy5zb2Z0TWF4PmIubWF4JiYoYi5tYXg9eT13LnNvZnRNYXgpO0Mody5mbG9vcikmJihiLm1pbj1NYXRoLm1pbihNYXRoLm1heChiLm1pbix3LmZsb29yKSxOdW1iZXIuTUFYX1ZBTFVFKSk7Qyh3LmNlaWxpbmcpJiYoYi5tYXg9TWF0aC5tYXgoTWF0aC5taW4oYi5tYXgsdy5jZWlsaW5nKSxoKGIudXNlck1heCwtTnVtYmVyLk1BWF9WQUxVRSkpKTt2JiZ6KGIuZGF0YU1pbikmJihxPXF8fDAsIXoodCkmJmIubWluPHEmJmIuZGF0YU1pbj49cT9iLm1pbj1cbmIub3B0aW9ucy5taW5SYW5nZT9NYXRoLm1pbihxLGIubWF4LWIubWluUmFuZ2UpOnE6IXooeSkmJmIubWF4PnEmJmIuZGF0YU1heDw9cSYmKGIubWF4PWIub3B0aW9ucy5taW5SYW5nZT9NYXRoLm1heChxLGIubWluK2IubWluUmFuZ2UpOnEpKTtiLnRpY2tJbnRlcnZhbD1iLm1pbj09PWIubWF4fHx2b2lkIDA9PT1iLm1pbnx8dm9pZCAwPT09Yi5tYXg/MTp4JiYhbiYmZj09PWIubGlua2VkUGFyZW50Lm9wdGlvbnMudGlja1BpeGVsSW50ZXJ2YWw/bj1iLmxpbmtlZFBhcmVudC50aWNrSW50ZXJ2YWw6aChuLHRoaXMudGlja0Ftb3VudD8oYi5tYXgtYi5taW4pL01hdGgubWF4KHRoaXMudGlja0Ftb3VudC0xLDEpOnZvaWQgMCxFPzE6KGIubWF4LWIubWluKSpmL01hdGgubWF4KGIubGVuLGYpKTtyJiYhYSYmYi5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihhKXthLnByb2Nlc3NEYXRhKGIubWluIT09Yi5vbGRNaW58fGIubWF4IT09Yi5vbGRNYXgpfSk7Yi5zZXRBeGlzVHJhbnNsYXRpb24oITApO1xuYi5iZWZvcmVTZXRUaWNrUG9zaXRpb25zJiZiLmJlZm9yZVNldFRpY2tQb3NpdGlvbnMoKTtiLnBvc3RQcm9jZXNzVGlja0ludGVydmFsJiYoYi50aWNrSW50ZXJ2YWw9Yi5wb3N0UHJvY2Vzc1RpY2tJbnRlcnZhbChiLnRpY2tJbnRlcnZhbCkpO2IucG9pbnRSYW5nZSYmIW4mJihiLnRpY2tJbnRlcnZhbD1NYXRoLm1heChiLnBvaW50UmFuZ2UsYi50aWNrSW50ZXJ2YWwpKTthPWgody5taW5UaWNrSW50ZXJ2YWwsYi5pc0RhdGV0aW1lQXhpcyYmYi5jbG9zZXN0UG9pbnRSYW5nZSk7IW4mJmIudGlja0ludGVydmFsPGEmJihiLnRpY2tJbnRlcnZhbD1hKTtnfHxsfHxufHwoYi50aWNrSW50ZXJ2YWw9ayhiLnRpY2tJbnRlcnZhbCxudWxsLHAoYi50aWNrSW50ZXJ2YWwpLGgody5hbGxvd0RlY2ltYWxzLCEoLjU8Yi50aWNrSW50ZXJ2YWwmJjU+Yi50aWNrSW50ZXJ2YWwmJjFFMzxiLm1heCYmOTk5OT5iLm1heCkpLCEhdGhpcy50aWNrQW1vdW50KSk7dGhpcy50aWNrQW1vdW50fHwoYi50aWNrSW50ZXJ2YWw9XG5iLnVuc3F1aXNoKCkpO3RoaXMuc2V0VGlja1Bvc2l0aW9ucygpfSxzZXRUaWNrUG9zaXRpb25zOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLGI9YS50aWNrUG9zaXRpb25zO3ZhciBkPXRoaXMuZ2V0TWlub3JUaWNrSW50ZXJ2YWwoKTt2YXIgZT1hLnRpY2tQb3NpdGlvbmVyLGs9YS5zdGFydE9uVGljayxsPWEuZW5kT25UaWNrO3RoaXMudGlja21hcmtPZmZzZXQ9dGhpcy5jYXRlZ29yaWVzJiZcImJldHdlZW5cIj09PWEudGlja21hcmtQbGFjZW1lbnQmJjE9PT10aGlzLnRpY2tJbnRlcnZhbD8uNTowO3RoaXMubWlub3JUaWNrSW50ZXJ2YWw9XCJhdXRvXCI9PT1kJiZ0aGlzLnRpY2tJbnRlcnZhbD90aGlzLnRpY2tJbnRlcnZhbC81OmQ7dGhpcy5zaW5nbGU9dGhpcy5taW49PT10aGlzLm1heCYmeih0aGlzLm1pbikmJiF0aGlzLnRpY2tBbW91bnQmJihwYXJzZUludCh0aGlzLm1pbiwxMCk9PT10aGlzLm1pbnx8ITEhPT1hLmFsbG93RGVjaW1hbHMpO3RoaXMudGlja1Bvc2l0aW9ucz1cbmQ9YiYmYi5zbGljZSgpOyFkJiYoIXRoaXMub3JkaW5hbFBvc2l0aW9ucyYmKHRoaXMubWF4LXRoaXMubWluKS90aGlzLnRpY2tJbnRlcnZhbD5NYXRoLm1heCgyKnRoaXMubGVuLDIwMCk/KGQ9W3RoaXMubWluLHRoaXMubWF4XSxjLmVycm9yKDE5LCExLHRoaXMuY2hhcnQpKTpkPXRoaXMuaXNEYXRldGltZUF4aXM/dGhpcy5nZXRUaW1lVGlja3ModGhpcy5ub3JtYWxpemVUaW1lVGlja0ludGVydmFsKHRoaXMudGlja0ludGVydmFsLGEudW5pdHMpLHRoaXMubWluLHRoaXMubWF4LGEuc3RhcnRPZldlZWssdGhpcy5vcmRpbmFsUG9zaXRpb25zLHRoaXMuY2xvc2VzdFBvaW50UmFuZ2UsITApOnRoaXMuaXNMb2c/dGhpcy5nZXRMb2dUaWNrUG9zaXRpb25zKHRoaXMudGlja0ludGVydmFsLHRoaXMubWluLHRoaXMubWF4KTp0aGlzLmdldExpbmVhclRpY2tQb3NpdGlvbnModGhpcy50aWNrSW50ZXJ2YWwsdGhpcy5taW4sdGhpcy5tYXgpLGQubGVuZ3RoPnRoaXMubGVuJiYoZD1bZFswXSxcbmQucG9wKCldLGRbMF09PT1kWzFdJiYoZC5sZW5ndGg9MSkpLHRoaXMudGlja1Bvc2l0aW9ucz1kLGUmJihlPWUuYXBwbHkodGhpcyxbdGhpcy5taW4sdGhpcy5tYXhdKSkpJiYodGhpcy50aWNrUG9zaXRpb25zPWQ9ZSk7dGhpcy5wYWRkZWRUaWNrcz1kLnNsaWNlKDApO3RoaXMudHJpbVRpY2tzKGQsayxsKTt0aGlzLmlzTGlua2VkfHwodGhpcy5zaW5nbGUmJjI+ZC5sZW5ndGgmJiF0aGlzLmNhdGVnb3JpZXMmJih0aGlzLm1pbi09LjUsdGhpcy5tYXgrPS41KSxifHxlfHx0aGlzLmFkanVzdFRpY2tBbW91bnQoKSk7TCh0aGlzLFwiYWZ0ZXJTZXRUaWNrUG9zaXRpb25zXCIpfSx0cmltVGlja3M6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWFbMF0sbT1hW2EubGVuZ3RoLTFdLGs9dGhpcy5taW5Qb2ludE9mZnNldHx8MDtMKHRoaXMsXCJ0cmltVGlja3NcIik7aWYoIXRoaXMuaXNMaW5rZWQpe2lmKGImJi1JbmZpbml0eSE9PWUpdGhpcy5taW49ZTtlbHNlIGZvcig7dGhpcy5taW4taz5hWzBdOylhLnNoaWZ0KCk7XG5pZihkKXRoaXMubWF4PW07ZWxzZSBmb3IoO3RoaXMubWF4K2s8YVthLmxlbmd0aC0xXTspYS5wb3AoKTswPT09YS5sZW5ndGgmJnooZSkmJiF0aGlzLm9wdGlvbnMudGlja1Bvc2l0aW9ucyYmYS5wdXNoKChtK2UpLzIpfX0sYWxpZ25Ub090aGVyczpmdW5jdGlvbigpe3ZhciBhPXt9LGIsZD10aGlzLm9wdGlvbnM7ITE9PT10aGlzLmNoYXJ0Lm9wdGlvbnMuY2hhcnQuYWxpZ25UaWNrc3x8ITE9PT1kLmFsaWduVGlja3N8fCExPT09ZC5zdGFydE9uVGlja3x8ITE9PT1kLmVuZE9uVGlja3x8dGhpcy5pc0xvZ3x8dGhpcy5jaGFydFt0aGlzLmNvbGxdLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIGU9ZC5vcHRpb25zO2U9W2QuaG9yaXo/ZS5sZWZ0OmUudG9wLGUud2lkdGgsZS5oZWlnaHQsZS5wYW5lXS5qb2luKCk7ZC5zZXJpZXMubGVuZ3RoJiYoYVtlXT9iPSEwOmFbZV09MSl9KTtyZXR1cm4gYn0sZ2V0VGlja0Ftb3VudDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucyxiPWEudGlja0Ftb3VudCxcbmQ9YS50aWNrUGl4ZWxJbnRlcnZhbDsheihhLnRpY2tJbnRlcnZhbCkmJnRoaXMubGVuPGQmJiF0aGlzLmlzUmFkaWFsJiYhdGhpcy5pc0xvZyYmYS5zdGFydE9uVGljayYmYS5lbmRPblRpY2smJihiPTIpOyFiJiZ0aGlzLmFsaWduVG9PdGhlcnMoKSYmKGI9TWF0aC5jZWlsKHRoaXMubGVuL2QpKzEpOzQ+YiYmKHRoaXMuZmluYWxUaWNrQW10PWIsYj01KTt0aGlzLnRpY2tBbW91bnQ9Yn0sYWRqdXN0VGlja0Ftb3VudDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucyxiPXRoaXMudGlja0ludGVydmFsLGU9dGhpcy50aWNrUG9zaXRpb25zLGs9dGhpcy50aWNrQW1vdW50LGM9dGhpcy5maW5hbFRpY2tBbXQsbD1lJiZlLmxlbmd0aCxnPWgodGhpcy50aHJlc2hvbGQsdGhpcy5zb2Z0VGhyZXNob2xkPzA6bnVsbCkscjtpZih0aGlzLmhhc0RhdGEoKSl7aWYobDxrKXtmb3Iocj10aGlzLm1pbjtlLmxlbmd0aDxrOyllLmxlbmd0aCUyfHxyPT09Zz9lLnB1c2goZChlW2UubGVuZ3RoLVxuMV0rYikpOmUudW5zaGlmdChkKGVbMF0tYikpO3RoaXMudHJhbnNBKj0obC0xKS8oay0xKTt0aGlzLm1pbj1hLnN0YXJ0T25UaWNrP2VbMF06TWF0aC5taW4odGhpcy5taW4sZVswXSk7dGhpcy5tYXg9YS5lbmRPblRpY2s/ZVtlLmxlbmd0aC0xXTpNYXRoLm1heCh0aGlzLm1heCxlW2UubGVuZ3RoLTFdKX1lbHNlIGw+ayYmKHRoaXMudGlja0ludGVydmFsKj0yLHRoaXMuc2V0VGlja1Bvc2l0aW9ucygpKTtpZih6KGMpKXtmb3IoYj1hPWUubGVuZ3RoO2ItLTspKDM9PT1jJiYxPT09YiUyfHwyPj1jJiYwPGImJmI8YS0xKSYmZS5zcGxpY2UoYiwxKTt0aGlzLmZpbmFsVGlja0FtdD12b2lkIDB9fX0sc2V0U2NhbGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlcmllcy5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlzRGlydHlEYXRhfHxhLmlzRGlydHl8fGEueEF4aXMmJmEueEF4aXMuaXNEaXJ0eX0pLGI7dGhpcy5vbGRNaW49dGhpcy5taW47dGhpcy5vbGRNYXg9dGhpcy5tYXg7dGhpcy5vbGRBeGlzTGVuZ3RoPVxudGhpcy5sZW47dGhpcy5zZXRBeGlzU2l6ZSgpOyhiPXRoaXMubGVuIT09dGhpcy5vbGRBeGlzTGVuZ3RoKXx8YXx8dGhpcy5pc0xpbmtlZHx8dGhpcy5mb3JjZVJlZHJhd3x8dGhpcy51c2VyTWluIT09dGhpcy5vbGRVc2VyTWlufHx0aGlzLnVzZXJNYXghPT10aGlzLm9sZFVzZXJNYXh8fHRoaXMuYWxpZ25Ub090aGVycygpPyh0aGlzLnJlc2V0U3RhY2tzJiZ0aGlzLnJlc2V0U3RhY2tzKCksdGhpcy5mb3JjZVJlZHJhdz0hMSx0aGlzLmdldFNlcmllc0V4dHJlbWVzKCksdGhpcy5zZXRUaWNrSW50ZXJ2YWwoKSx0aGlzLm9sZFVzZXJNaW49dGhpcy51c2VyTWluLHRoaXMub2xkVXNlck1heD10aGlzLnVzZXJNYXgsdGhpcy5pc0RpcnR5fHwodGhpcy5pc0RpcnR5PWJ8fHRoaXMubWluIT09dGhpcy5vbGRNaW58fHRoaXMubWF4IT09dGhpcy5vbGRNYXgpKTp0aGlzLmNsZWFuU3RhY2tzJiZ0aGlzLmNsZWFuU3RhY2tzKCk7TCh0aGlzLFwiYWZ0ZXJTZXRTY2FsZVwiKX0sc2V0RXh0cmVtZXM6ZnVuY3Rpb24oYSxcbmIsZCxlLGspe3ZhciBtPXRoaXMsdz1tLmNoYXJ0O2Q9aChkLCEwKTttLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2RlbGV0ZSBhLmtkVHJlZX0pO2s9dChrLHttaW46YSxtYXg6Yn0pO0wobSxcInNldEV4dHJlbWVzXCIsayxmdW5jdGlvbigpe20udXNlck1pbj1hO20udXNlck1heD1iO20uZXZlbnRBcmdzPWs7ZCYmdy5yZWRyYXcoZSl9KX0sem9vbTpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuZGF0YU1pbixlPXRoaXMuZGF0YU1heCxtPXRoaXMub3B0aW9ucyxrPU1hdGgubWluKGQsaChtLm1pbixkKSksdz1NYXRoLm1heChlLGgobS5tYXgsZSkpO2E9e25ld01pbjphLG5ld01heDpifTtMKHRoaXMsXCJ6b29tXCIsYSxmdW5jdGlvbihhKXt2YXIgYj1hLm5ld01pbixtPWEubmV3TWF4O2lmKGIhPT10aGlzLm1pbnx8bSE9PXRoaXMubWF4KXRoaXMuYWxsb3dab29tT3V0c2lkZXx8KHooZCkmJihiPGsmJihiPWspLGI+dyYmKGI9dykpLHooZSkmJihtPGsmJihtPWspLG0+dyYmKG09dykpKSxcbnRoaXMuZGlzcGxheUJ0bj12b2lkIDAhPT1ifHx2b2lkIDAhPT1tLHRoaXMuc2V0RXh0cmVtZXMoYixtLCExLHZvaWQgMCx7dHJpZ2dlcjpcInpvb21cIn0pO2Euem9vbWVkPSEwfSk7cmV0dXJuIGEuem9vbWVkfSxzZXRBeGlzU2l6ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY2hhcnQsYj10aGlzLm9wdGlvbnMsZD1iLm9mZnNldHN8fFswLDAsMCwwXSxlPXRoaXMuaG9yaXosaz10aGlzLndpZHRoPU1hdGgucm91bmQoYy5yZWxhdGl2ZUxlbmd0aChoKGIud2lkdGgsYS5wbG90V2lkdGgtZFszXStkWzFdKSxhLnBsb3RXaWR0aCkpLGw9dGhpcy5oZWlnaHQ9TWF0aC5yb3VuZChjLnJlbGF0aXZlTGVuZ3RoKGgoYi5oZWlnaHQsYS5wbG90SGVpZ2h0LWRbMF0rZFsyXSksYS5wbG90SGVpZ2h0KSksZz10aGlzLnRvcD1NYXRoLnJvdW5kKGMucmVsYXRpdmVMZW5ndGgoaChiLnRvcCxhLnBsb3RUb3ArZFswXSksYS5wbG90SGVpZ2h0LGEucGxvdFRvcCkpO2I9dGhpcy5sZWZ0PU1hdGgucm91bmQoYy5yZWxhdGl2ZUxlbmd0aChoKGIubGVmdCxcbmEucGxvdExlZnQrZFszXSksYS5wbG90V2lkdGgsYS5wbG90TGVmdCkpO3RoaXMuYm90dG9tPWEuY2hhcnRIZWlnaHQtbC1nO3RoaXMucmlnaHQ9YS5jaGFydFdpZHRoLWstYjt0aGlzLmxlbj1NYXRoLm1heChlP2s6bCwwKTt0aGlzLnBvcz1lP2I6Z30sZ2V0RXh0cmVtZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmlzTG9nO3JldHVybnttaW46YT9kKHRoaXMubGluMmxvZyh0aGlzLm1pbikpOnRoaXMubWluLG1heDphP2QodGhpcy5saW4ybG9nKHRoaXMubWF4KSk6dGhpcy5tYXgsZGF0YU1pbjp0aGlzLmRhdGFNaW4sZGF0YU1heDp0aGlzLmRhdGFNYXgsdXNlck1pbjp0aGlzLnVzZXJNaW4sdXNlck1heDp0aGlzLnVzZXJNYXh9fSxnZXRUaHJlc2hvbGQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pc0xvZyxkPWI/dGhpcy5saW4ybG9nKHRoaXMubWluKTp0aGlzLm1pbjtiPWI/dGhpcy5saW4ybG9nKHRoaXMubWF4KTp0aGlzLm1heDtudWxsPT09YXx8LUluZmluaXR5PT09YT9hPWQ6SW5maW5pdHk9PT1cbmE/YT1iOmQ+YT9hPWQ6YjxhJiYoYT1iKTtyZXR1cm4gdGhpcy50cmFuc2xhdGUoYSwwLDEsMCwxKX0sYXV0b0xhYmVsQWxpZ246ZnVuY3Rpb24oYSl7dmFyIGI9KGgoYSwwKS05MCp0aGlzLnNpZGUrNzIwKSUzNjA7YT17YWxpZ246XCJjZW50ZXJcIn07TCh0aGlzLFwiYXV0b0xhYmVsQWxpZ25cIixhLGZ1bmN0aW9uKGEpezE1PGImJjE2NT5iP2EuYWxpZ249XCJyaWdodFwiOjE5NTxiJiYzNDU+YiYmKGEuYWxpZ249XCJsZWZ0XCIpfSk7cmV0dXJuIGEuYWxpZ259LHRpY2tTaXplOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9ucyxkPWJbYStcIkxlbmd0aFwiXSxlPWgoYlthK1wiV2lkdGhcIl0sXCJ0aWNrXCI9PT1hJiZ0aGlzLmlzWEF4aXMmJiF0aGlzLmNhdGVnb3JpZXM/MTowKTtpZihlJiZkKXtcImluc2lkZVwiPT09YlthK1wiUG9zaXRpb25cIl0mJihkPS1kKTt2YXIgaz1bZCxlXX1hPXt0aWNrU2l6ZTprfTtMKHRoaXMsXCJhZnRlclRpY2tTaXplXCIsYSk7cmV0dXJuIGEudGlja1NpemV9LGxhYmVsTWV0cmljczpmdW5jdGlvbigpe3ZhciBhPVxudGhpcy50aWNrUG9zaXRpb25zJiZ0aGlzLnRpY2tQb3NpdGlvbnNbMF18fDA7cmV0dXJuIHRoaXMuY2hhcnQucmVuZGVyZXIuZm9udE1ldHJpY3ModGhpcy5vcHRpb25zLmxhYmVscy5zdHlsZSYmdGhpcy5vcHRpb25zLmxhYmVscy5zdHlsZS5mb250U2l6ZSx0aGlzLnRpY2tzW2FdJiZ0aGlzLnRpY2tzW2FdLmxhYmVsKX0sdW5zcXVpc2g6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMubGFiZWxzLGI9dGhpcy5ob3JpeixlPXRoaXMudGlja0ludGVydmFsLGs9ZSxjPXRoaXMubGVuLygoKHRoaXMuY2F0ZWdvcmllcz8xOjApK3RoaXMubWF4LXRoaXMubWluKS9lKSxnLHI9YS5yb3RhdGlvbix4PXRoaXMubGFiZWxNZXRyaWNzKCkscCxBPU51bWJlci5NQVhfVkFMVUUsdSxuPXRoaXMubWF4LXRoaXMubWluLGY9ZnVuY3Rpb24oYSl7dmFyIGI9YS8oY3x8MSk7Yj0xPGI/TWF0aC5jZWlsKGIpOjE7YiplPm4mJkluZmluaXR5IT09YSYmSW5maW5pdHkhPT1jJiZuJiYoYj1NYXRoLmNlaWwobi9cbmUpKTtyZXR1cm4gZChiKmUpfTtiPyh1PSFhLnN0YWdnZXJMaW5lcyYmIWEuc3RlcCYmKHoocik/W3JdOmM8aChhLmF1dG9Sb3RhdGlvbkxpbWl0LDgwKSYmYS5hdXRvUm90YXRpb24pKSYmdS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKGE9PT1yfHxhJiYtOTA8PWEmJjkwPj1hKXtwPWYoTWF0aC5hYnMoeC5oL01hdGguc2luKGwqYSkpKTt2YXIgYj1wK01hdGguYWJzKGEvMzYwKTtiPEEmJihBPWIsZz1hLGs9cCl9fSk6YS5zdGVwfHwoaz1mKHguaCkpO3RoaXMuYXV0b1JvdGF0aW9uPXU7dGhpcy5sYWJlbFJvdGF0aW9uPWgoZyxyKTtyZXR1cm4ga30sZ2V0U2xvdFdpZHRoOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhcnQsZD10aGlzLmhvcml6LGU9dGhpcy5vcHRpb25zLmxhYmVscyxrPU1hdGgubWF4KHRoaXMudGlja1Bvc2l0aW9ucy5sZW5ndGgtKHRoaXMuY2F0ZWdvcmllcz8wOjEpLDEpLGM9Yi5tYXJnaW5bM107cmV0dXJuIGEmJmEuc2xvdFdpZHRofHxkJiYyPihlLnN0ZXB8fFxuMCkmJiFlLnJvdGF0aW9uJiYodGhpcy5zdGFnZ2VyTGluZXN8fDEpKnRoaXMubGVuL2t8fCFkJiYoZS5zdHlsZSYmcGFyc2VJbnQoZS5zdHlsZS53aWR0aCwxMCl8fGMmJmMtYi5zcGFjaW5nWzNdfHwuMzMqYi5jaGFydFdpZHRoKX0scmVuZGVyVW5zcXVpc2g6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNoYXJ0LGI9YS5yZW5kZXJlcixkPXRoaXMudGlja1Bvc2l0aW9ucyxlPXRoaXMudGlja3Msaz10aGlzLm9wdGlvbnMubGFiZWxzLGM9ayYmay5zdHlsZXx8e30sbD10aGlzLmhvcml6LGc9dGhpcy5nZXRTbG90V2lkdGgoKSxyPU1hdGgubWF4KDEsTWF0aC5yb3VuZChnLTIqKGsucGFkZGluZ3x8NSkpKSx4PXt9LHA9dGhpcy5sYWJlbE1ldHJpY3MoKSxoPWsuc3R5bGUmJmsuc3R5bGUudGV4dE92ZXJmbG93LEE9MDtIKGsucm90YXRpb24pfHwoeC5yb3RhdGlvbj1rLnJvdGF0aW9ufHwwKTtkLmZvckVhY2goZnVuY3Rpb24oYSl7KGE9ZVthXSkmJmEubGFiZWwmJmEubGFiZWwudGV4dFB4TGVuZ3RoPlxuQSYmKEE9YS5sYWJlbC50ZXh0UHhMZW5ndGgpfSk7dGhpcy5tYXhMYWJlbExlbmd0aD1BO2lmKHRoaXMuYXV0b1JvdGF0aW9uKUE+ciYmQT5wLmg/eC5yb3RhdGlvbj10aGlzLmxhYmVsUm90YXRpb246dGhpcy5sYWJlbFJvdGF0aW9uPTA7ZWxzZSBpZihnKXt2YXIgdT1yO2lmKCFoKXt2YXIgbj1cImNsaXBcIjtmb3Iocj1kLmxlbmd0aDshbCYmci0tOyl7dmFyIGY9ZFtyXTtpZihmPWVbZl0ubGFiZWwpZi5zdHlsZXMmJlwiZWxsaXBzaXNcIj09PWYuc3R5bGVzLnRleHRPdmVyZmxvdz9mLmNzcyh7dGV4dE92ZXJmbG93OlwiY2xpcFwifSk6Zi50ZXh0UHhMZW5ndGg+ZyYmZi5jc3Moe3dpZHRoOmcrXCJweFwifSksZi5nZXRCQm94KCkuaGVpZ2h0PnRoaXMubGVuL2QubGVuZ3RoLShwLmgtcC5mKSYmKGYuc3BlY2lmaWNUZXh0T3ZlcmZsb3c9XCJlbGxpcHNpc1wiKX19fXgucm90YXRpb24mJih1PUE+LjUqYS5jaGFydEhlaWdodD8uMzMqYS5jaGFydEhlaWdodDpBLGh8fChuPVwiZWxsaXBzaXNcIikpO2lmKHRoaXMubGFiZWxBbGlnbj1cbmsuYWxpZ258fHRoaXMuYXV0b0xhYmVsQWxpZ24odGhpcy5sYWJlbFJvdGF0aW9uKSl4LmFsaWduPXRoaXMubGFiZWxBbGlnbjtkLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9KGE9ZVthXSkmJmEubGFiZWwsZD1jLndpZHRoLGs9e307YiYmKGIuYXR0cih4KSxhLnNob3J0ZW5MYWJlbD9hLnNob3J0ZW5MYWJlbCgpOnUmJiFkJiZcIm5vd3JhcFwiIT09Yy53aGl0ZVNwYWNlJiYodTxiLnRleHRQeExlbmd0aHx8XCJTUEFOXCI9PT1iLmVsZW1lbnQudGFnTmFtZSk/KGsud2lkdGg9dSxofHwoay50ZXh0T3ZlcmZsb3c9Yi5zcGVjaWZpY1RleHRPdmVyZmxvd3x8biksYi5jc3MoaykpOmIuc3R5bGVzJiZiLnN0eWxlcy53aWR0aCYmIWsud2lkdGgmJiFkJiZiLmNzcyh7d2lkdGg6bnVsbH0pLGRlbGV0ZSBiLnNwZWNpZmljVGV4dE92ZXJmbG93LGEucm90YXRpb249eC5yb3RhdGlvbil9LHRoaXMpO3RoaXMudGlja1JvdENvcnI9Yi5yb3RDb3JyKHAuYix0aGlzLmxhYmVsUm90YXRpb258fDAsMCE9PVxudGhpcy5zaWRlKX0saGFzRGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcmllcy5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhLmhhc0RhdGEoKX0pfHx0aGlzLm9wdGlvbnMuc2hvd0VtcHR5JiZ6KHRoaXMubWluKSYmeih0aGlzLm1heCl9LGFkZFRpdGxlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhcnQucmVuZGVyZXIsZD10aGlzLmhvcml6LGU9dGhpcy5vcHBvc2l0ZSxrPXRoaXMub3B0aW9ucy50aXRsZSxjLGw9dGhpcy5jaGFydC5zdHlsZWRNb2RlO3RoaXMuYXhpc1RpdGxlfHwoKGM9ay50ZXh0QWxpZ24pfHwoYz0oZD97bG93OlwibGVmdFwiLG1pZGRsZTpcImNlbnRlclwiLGhpZ2g6XCJyaWdodFwifTp7bG93OmU/XCJyaWdodFwiOlwibGVmdFwiLG1pZGRsZTpcImNlbnRlclwiLGhpZ2g6ZT9cImxlZnRcIjpcInJpZ2h0XCJ9KVtrLmFsaWduXSksdGhpcy5heGlzVGl0bGU9Yi50ZXh0KGsudGV4dCwwLDAsay51c2VIVE1MKS5hdHRyKHt6SW5kZXg6Nyxyb3RhdGlvbjprLnJvdGF0aW9ufHwwLGFsaWduOmN9KS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtYXhpcy10aXRsZVwiKSxcbmx8fHRoaXMuYXhpc1RpdGxlLmNzcyh1KGsuc3R5bGUpKSx0aGlzLmF4aXNUaXRsZS5hZGQodGhpcy5heGlzR3JvdXApLHRoaXMuYXhpc1RpdGxlLmlzTmV3PSEwKTtsfHxrLnN0eWxlLndpZHRofHx0aGlzLmlzUmFkaWFsfHx0aGlzLmF4aXNUaXRsZS5jc3Moe3dpZHRoOnRoaXMubGVufSk7dGhpcy5heGlzVGl0bGVbYT9cInNob3dcIjpcImhpZGVcIl0oYSl9LGdlbmVyYXRlVGljazpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnRpY2tzO2JbYV0/YlthXS5hZGRMYWJlbCgpOmJbYV09bmV3IEEodGhpcyxhKX0sZ2V0T2Zmc2V0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuY2hhcnQsZD1iLnJlbmRlcmVyLGU9YS5vcHRpb25zLGs9YS50aWNrUG9zaXRpb25zLGM9YS50aWNrcyxsPWEuaG9yaXosZz1hLnNpZGUscj1iLmludmVydGVkJiYhYS5pc1pBeGlzP1sxLDAsMywyXVtnXTpnLHgscD0wLEE9MCx1PWUudGl0bGUsbj1lLmxhYmVscyxmPTAsRT1iLmF4aXNPZmZzZXQ7Yj1iLmNsaXBPZmZzZXQ7XG52YXIgcT1bLTEsMSwxLC0xXVtnXSx2PWUuY2xhc3NOYW1lLHQ9YS5heGlzUGFyZW50O3ZhciBDPWEuaGFzRGF0YSgpO2Euc2hvd0F4aXM9eD1DfHxoKGUuc2hvd0VtcHR5LCEwKTthLnN0YWdnZXJMaW5lcz1hLmhvcml6JiZuLnN0YWdnZXJMaW5lczthLmF4aXNHcm91cHx8KGEuZ3JpZEdyb3VwPWQuZyhcImdyaWRcIikuYXR0cih7ekluZGV4OmUuZ3JpZFpJbmRleHx8MX0pLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1cIit0aGlzLmNvbGwudG9Mb3dlckNhc2UoKStcIi1ncmlkIFwiKyh2fHxcIlwiKSkuYWRkKHQpLGEuYXhpc0dyb3VwPWQuZyhcImF4aXNcIikuYXR0cih7ekluZGV4OmUuekluZGV4fHwyfSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLVwiK3RoaXMuY29sbC50b0xvd2VyQ2FzZSgpK1wiIFwiKyh2fHxcIlwiKSkuYWRkKHQpLGEubGFiZWxHcm91cD1kLmcoXCJheGlzLWxhYmVsc1wiKS5hdHRyKHt6SW5kZXg6bi56SW5kZXh8fDd9KS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtXCIrYS5jb2xsLnRvTG93ZXJDYXNlKCkrXG5cIi1sYWJlbHMgXCIrKHZ8fFwiXCIpKS5hZGQodCkpO0N8fGEuaXNMaW5rZWQ/KGsuZm9yRWFjaChmdW5jdGlvbihiLGQpe2EuZ2VuZXJhdGVUaWNrKGIsZCl9KSxhLnJlbmRlclVuc3F1aXNoKCksYS5yZXNlcnZlU3BhY2VEZWZhdWx0PTA9PT1nfHwyPT09Z3x8ezE6XCJsZWZ0XCIsMzpcInJpZ2h0XCJ9W2ddPT09YS5sYWJlbEFsaWduLGgobi5yZXNlcnZlU3BhY2UsXCJjZW50ZXJcIj09PWEubGFiZWxBbGlnbj8hMDpudWxsLGEucmVzZXJ2ZVNwYWNlRGVmYXVsdCkmJmsuZm9yRWFjaChmdW5jdGlvbihhKXtmPU1hdGgubWF4KGNbYV0uZ2V0TGFiZWxTaXplKCksZil9KSxhLnN0YWdnZXJMaW5lcyYmKGYqPWEuc3RhZ2dlckxpbmVzKSxhLmxhYmVsT2Zmc2V0PWYqKGEub3Bwb3NpdGU/LTE6MSkpOnkoYyxmdW5jdGlvbihhLGIpe2EuZGVzdHJveSgpO2RlbGV0ZSBjW2JdfSk7aWYodSYmdS50ZXh0JiYhMSE9PXUuZW5hYmxlZCYmKGEuYWRkVGl0bGUoeCkseCYmITEhPT11LnJlc2VydmVTcGFjZSkpe2EudGl0bGVPZmZzZXQ9XG5wPWEuYXhpc1RpdGxlLmdldEJCb3goKVtsP1wiaGVpZ2h0XCI6XCJ3aWR0aFwiXTt2YXIgQj11Lm9mZnNldDtBPXooQik/MDpoKHUubWFyZ2luLGw/NToxMCl9YS5yZW5kZXJMaW5lKCk7YS5vZmZzZXQ9cSpoKGUub2Zmc2V0LEVbZ10/RVtnXSsoZS5tYXJnaW58fDApOjApO2EudGlja1JvdENvcnI9YS50aWNrUm90Q29ycnx8e3g6MCx5OjB9O2Q9MD09PWc/LWEubGFiZWxNZXRyaWNzKCkuaDoyPT09Zz9hLnRpY2tSb3RDb3JyLnk6MDtBPU1hdGguYWJzKGYpK0E7ZiYmKEE9QS1kK3EqKGw/aChuLnksYS50aWNrUm90Q29yci55KzgqcSk6bi54KSk7YS5heGlzVGl0bGVNYXJnaW49aChCLEEpO2EuZ2V0TWF4TGFiZWxEaW1lbnNpb25zJiYoYS5tYXhMYWJlbERpbWVuc2lvbnM9YS5nZXRNYXhMYWJlbERpbWVuc2lvbnMoYyxrKSk7bD10aGlzLnRpY2tTaXplKFwidGlja1wiKTtFW2ddPU1hdGgubWF4KEVbZ10sYS5heGlzVGl0bGVNYXJnaW4rcCtxKmEub2Zmc2V0LEEsayYmay5sZW5ndGgmJmw/bFswXStcbnEqYS5vZmZzZXQ6MCk7ZT1lLm9mZnNldD8wOjIqTWF0aC5mbG9vcihhLmF4aXNMaW5lLnN0cm9rZVdpZHRoKCkvMik7YltyXT1NYXRoLm1heChiW3JdLGUpO0wodGhpcyxcImFmdGVyR2V0T2Zmc2V0XCIpfSxnZXRMaW5lUGF0aDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNoYXJ0LGQ9dGhpcy5vcHBvc2l0ZSxlPXRoaXMub2Zmc2V0LGs9dGhpcy5ob3JpeixjPXRoaXMubGVmdCsoZD90aGlzLndpZHRoOjApK2U7ZT1iLmNoYXJ0SGVpZ2h0LXRoaXMuYm90dG9tLShkP3RoaXMuaGVpZ2h0OjApK2U7ZCYmKGEqPS0xKTtyZXR1cm4gYi5yZW5kZXJlci5jcmlzcExpbmUoW1wiTVwiLGs/dGhpcy5sZWZ0OmMsaz9lOnRoaXMudG9wLFwiTFwiLGs/Yi5jaGFydFdpZHRoLXRoaXMucmlnaHQ6YyxrP2U6Yi5jaGFydEhlaWdodC10aGlzLmJvdHRvbV0sYSl9LHJlbmRlckxpbmU6ZnVuY3Rpb24oKXt0aGlzLmF4aXNMaW5lfHwodGhpcy5heGlzTGluZT10aGlzLmNoYXJ0LnJlbmRlcmVyLnBhdGgoKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtYXhpcy1saW5lXCIpLmFkZCh0aGlzLmF4aXNHcm91cCksXG50aGlzLmNoYXJ0LnN0eWxlZE1vZGV8fHRoaXMuYXhpc0xpbmUuYXR0cih7c3Ryb2tlOnRoaXMub3B0aW9ucy5saW5lQ29sb3IsXCJzdHJva2Utd2lkdGhcIjp0aGlzLm9wdGlvbnMubGluZVdpZHRoLHpJbmRleDo3fSkpfSxnZXRUaXRsZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ob3JpeixiPXRoaXMubGVmdCxkPXRoaXMudG9wLGU9dGhpcy5sZW4saz10aGlzLm9wdGlvbnMudGl0bGUsYz1hP2I6ZCxsPXRoaXMub3Bwb3NpdGUsZz10aGlzLm9mZnNldCxyPWsueHx8MCx4PWsueXx8MCxwPXRoaXMuYXhpc1RpdGxlLEE9dGhpcy5jaGFydC5yZW5kZXJlci5mb250TWV0cmljcyhrLnN0eWxlJiZrLnN0eWxlLmZvbnRTaXplLHApO3A9TWF0aC5tYXgocC5nZXRCQm94KG51bGwsMCkuaGVpZ2h0LUEuaC0xLDApO2U9e2xvdzpjKyhhPzA6ZSksbWlkZGxlOmMrZS8yLGhpZ2g6YysoYT9lOjApfVtrLmFsaWduXTtiPShhP2QrdGhpcy5oZWlnaHQ6YikrKGE/MTotMSkqKGw/LTE6MSkqdGhpcy5heGlzVGl0bGVNYXJnaW4rXG5bLXAscCxBLmYsLXBdW3RoaXMuc2lkZV07YT17eDphP2UrcjpiKyhsP3RoaXMud2lkdGg6MCkrZytyLHk6YT9iK3gtKGw/dGhpcy5oZWlnaHQ6MCkrZzplK3h9O0wodGhpcyxcImFmdGVyR2V0VGl0bGVQb3NpdGlvblwiLHt0aXRsZVBvc2l0aW9uOmF9KTtyZXR1cm4gYX0scmVuZGVyTWlub3JUaWNrOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhcnQuaGFzUmVuZGVyZWQmJkModGhpcy5vbGRNaW4pLGQ9dGhpcy5taW5vclRpY2tzO2RbYV18fChkW2FdPW5ldyBBKHRoaXMsYSxcIm1pbm9yXCIpKTtiJiZkW2FdLmlzTmV3JiZkW2FdLnJlbmRlcihudWxsLCEwKTtkW2FdLnJlbmRlcihudWxsLCExLDEpfSxyZW5kZXJUaWNrOmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcy5pc0xpbmtlZCxlPXRoaXMudGlja3Msaz10aGlzLmNoYXJ0Lmhhc1JlbmRlcmVkJiZDKHRoaXMub2xkTWluKTtpZighZHx8YT49dGhpcy5taW4mJmE8PXRoaXMubWF4KWVbYV18fChlW2FdPW5ldyBBKHRoaXMsYSkpLGsmJmVbYV0uaXNOZXcmJlxuZVthXS5yZW5kZXIoYiwhMCwtMSksZVthXS5yZW5kZXIoYil9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciBhPXRoaXMsZD1hLmNoYXJ0LGU9YS5vcHRpb25zLGs9YS5pc0xvZyxsPWEuaXNMaW5rZWQsZz1hLnRpY2tQb3NpdGlvbnMscj1hLmF4aXNUaXRsZSx4PWEudGlja3MscD1hLm1pbm9yVGlja3MsaD1hLmFsdGVybmF0ZUJhbmRzLHU9ZS5zdGFja0xhYmVscyxuPWUuYWx0ZXJuYXRlR3JpZENvbG9yLGY9YS50aWNrbWFya09mZnNldCxFPWEuYXhpc0xpbmUsdj1hLnNob3dBeGlzLHQ9YihkLnJlbmRlcmVyLmdsb2JhbEFuaW1hdGlvbiksQixIO2EubGFiZWxFZGdlLmxlbmd0aD0wO2Eub3ZlcmxhcD0hMTtbeCxwLGhdLmZvckVhY2goZnVuY3Rpb24oYSl7eShhLGZ1bmN0aW9uKGEpe2EuaXNBY3RpdmU9ITF9KX0pO2lmKGEuaGFzRGF0YSgpfHxsKWEubWlub3JUaWNrSW50ZXJ2YWwmJiFhLmNhdGVnb3JpZXMmJmEuZ2V0TWlub3JUaWNrUG9zaXRpb25zKCkuZm9yRWFjaChmdW5jdGlvbihiKXthLnJlbmRlck1pbm9yVGljayhiKX0pLFxuZy5sZW5ndGgmJihnLmZvckVhY2goZnVuY3Rpb24oYixkKXthLnJlbmRlclRpY2soYixkKX0pLGYmJigwPT09YS5taW58fGEuc2luZ2xlKSYmKHhbLTFdfHwoeFstMV09bmV3IEEoYSwtMSxudWxsLCEwKSkseFstMV0ucmVuZGVyKC0xKSkpLG4mJmcuZm9yRWFjaChmdW5jdGlvbihiLGUpe0g9dm9pZCAwIT09Z1tlKzFdP2dbZSsxXStmOmEubWF4LWY7MD09PWUlMiYmYjxhLm1heCYmSDw9YS5tYXgrKGQucG9sYXI/LWY6ZikmJihoW2JdfHwoaFtiXT1uZXcgYy5QbG90TGluZU9yQmFuZChhKSksQj1iK2YsaFtiXS5vcHRpb25zPXtmcm9tOms/YS5saW4ybG9nKEIpOkIsdG86az9hLmxpbjJsb2coSCk6SCxjb2xvcjpufSxoW2JdLnJlbmRlcigpLGhbYl0uaXNBY3RpdmU9ITApfSksYS5fYWRkZWRQbG90TEJ8fCgoZS5wbG90TGluZXN8fFtdKS5jb25jYXQoZS5wbG90QmFuZHN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EuYWRkUGxvdEJhbmRPckxpbmUoYil9KSxhLl9hZGRlZFBsb3RMQj1cbiEwKTtbeCxwLGhdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGIsZT1bXSxrPXQuZHVyYXRpb247eShhLGZ1bmN0aW9uKGEsYil7YS5pc0FjdGl2ZXx8KGEucmVuZGVyKGIsITEsMCksYS5pc0FjdGl2ZT0hMSxlLnB1c2goYikpfSk7cShmdW5jdGlvbigpe2ZvcihiPWUubGVuZ3RoO2ItLTspYVtlW2JdXSYmIWFbZVtiXV0uaXNBY3RpdmUmJihhW2VbYl1dLmRlc3Ryb3koKSxkZWxldGUgYVtlW2JdXSl9LGEhPT1oJiZkLmhhc1JlbmRlcmVkJiZrP2s6MCl9KTtFJiYoRVtFLmlzUGxhY2VkP1wiYW5pbWF0ZVwiOlwiYXR0clwiXSh7ZDp0aGlzLmdldExpbmVQYXRoKEUuc3Ryb2tlV2lkdGgoKSl9KSxFLmlzUGxhY2VkPSEwLEVbdj9cInNob3dcIjpcImhpZGVcIl0odikpO3ImJnYmJihlPWEuZ2V0VGl0bGVQb3NpdGlvbigpLEMoZS55KT8ocltyLmlzTmV3P1wiYXR0clwiOlwiYW5pbWF0ZVwiXShlKSxyLmlzTmV3PSExKTooci5hdHRyKFwieVwiLC05OTk5KSxyLmlzTmV3PSEwKSk7dSYmdS5lbmFibGVkJiZhLnJlbmRlclN0YWNrVG90YWxzKCk7XG5hLmlzRGlydHk9ITE7TCh0aGlzLFwiYWZ0ZXJSZW5kZXJcIil9LHJlZHJhdzpmdW5jdGlvbigpe3RoaXMudmlzaWJsZSYmKHRoaXMucmVuZGVyKCksdGhpcy5wbG90TGluZXNBbmRCYW5kcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EucmVuZGVyKCl9KSk7dGhpcy5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihhKXthLmlzRGlydHk9ITB9KX0sa2VlcFByb3BzOlwiZXh0S2V5IGhjRXZlbnRzIG5hbWVzIHNlcmllcyB1c2VyTWF4IHVzZXJNaW5cIi5zcGxpdChcIiBcIiksZGVzdHJveTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGQ9Yi5zdGFja3MsZT1iLnBsb3RMaW5lc0FuZEJhbmRzLGs7TCh0aGlzLFwiZGVzdHJveVwiLHtrZWVwRXZlbnRzOmF9KTthfHxyKGIpO3koZCxmdW5jdGlvbihhLGIpe0IoYSk7ZFtiXT1udWxsfSk7W2IudGlja3MsYi5taW5vclRpY2tzLGIuYWx0ZXJuYXRlQmFuZHNdLmZvckVhY2goZnVuY3Rpb24oYSl7QihhKX0pO2lmKGUpZm9yKGE9ZS5sZW5ndGg7YS0tOyllW2FdLmRlc3Ryb3koKTtcblwic3RhY2tUb3RhbEdyb3VwIGF4aXNMaW5lIGF4aXNUaXRsZSBheGlzR3JvdXAgZ3JpZEdyb3VwIGxhYmVsR3JvdXAgY3Jvc3Mgc2Nyb2xsYmFyXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7YlthXSYmKGJbYV09YlthXS5kZXN0cm95KCkpfSk7Zm9yKGsgaW4gYi5wbG90TGluZXNBbmRCYW5kc0dyb3VwcyliLnBsb3RMaW5lc0FuZEJhbmRzR3JvdXBzW2tdPWIucGxvdExpbmVzQW5kQmFuZHNHcm91cHNba10uZGVzdHJveSgpO3koYixmdW5jdGlvbihhLGQpey0xPT09Yi5rZWVwUHJvcHMuaW5kZXhPZihkKSYmZGVsZXRlIGJbZF19KX0sZHJhd0Nyb3NzaGFpcjpmdW5jdGlvbihiLGQpe3ZhciBlLGs9dGhpcy5jcm9zc2hhaXIsYz1oKGsuc25hcCwhMCksbCxnPXRoaXMuY3Jvc3M7TCh0aGlzLFwiZHJhd0Nyb3NzaGFpclwiLHtlOmIscG9pbnQ6ZH0pO2J8fChiPXRoaXMuY3Jvc3MmJnRoaXMuY3Jvc3MuZSk7aWYodGhpcy5jcm9zc2hhaXImJiExIT09KHooZCl8fCFjKSl7Yz96KGQpJiZcbihsPWgoXCJjb2xvckF4aXNcIiE9PXRoaXMuY29sbD9kLmNyb3NzaGFpclBvczpudWxsLHRoaXMuaXNYQXhpcz9kLnBsb3RYOnRoaXMubGVuLWQucGxvdFkpKTpsPWImJih0aGlzLmhvcml6P2IuY2hhcnRYLXRoaXMucG9zOnRoaXMubGVuLWIuY2hhcnRZK3RoaXMucG9zKTt6KGwpJiYoZT10aGlzLmdldFBsb3RMaW5lUGF0aCh7dmFsdWU6ZCYmKHRoaXMuaXNYQXhpcz9kLng6aChkLnN0YWNrWSxkLnkpKSx0cmFuc2xhdGVkVmFsdWU6bH0pfHxudWxsKTtpZigheihlKSl7dGhpcy5oaWRlQ3Jvc3NoYWlyKCk7cmV0dXJufWM9dGhpcy5jYXRlZ29yaWVzJiYhdGhpcy5pc1JhZGlhbDtnfHwodGhpcy5jcm9zcz1nPXRoaXMuY2hhcnQucmVuZGVyZXIucGF0aCgpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1jcm9zc2hhaXIgaGlnaGNoYXJ0cy1jcm9zc2hhaXItXCIrKGM/XCJjYXRlZ29yeSBcIjpcInRoaW4gXCIpK2suY2xhc3NOYW1lKS5hdHRyKHt6SW5kZXg6aChrLnpJbmRleCwyKX0pLmFkZCgpLHRoaXMuY2hhcnQuc3R5bGVkTW9kZXx8XG4oZy5hdHRyKHtzdHJva2U6ay5jb2xvcnx8KGM/YShcIiNjY2Q2ZWJcIikuc2V0T3BhY2l0eSguMjUpLmdldCgpOlwiI2NjY2NjY1wiKSxcInN0cm9rZS13aWR0aFwiOmgoay53aWR0aCwxKX0pLmNzcyh7XCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwifSksay5kYXNoU3R5bGUmJmcuYXR0cih7ZGFzaHN0eWxlOmsuZGFzaFN0eWxlfSkpKTtnLnNob3coKS5hdHRyKHtkOmV9KTtjJiYhay53aWR0aCYmZy5hdHRyKHtcInN0cm9rZS13aWR0aFwiOnRoaXMudHJhbnNBfSk7dGhpcy5jcm9zcy5lPWJ9ZWxzZSB0aGlzLmhpZGVDcm9zc2hhaXIoKTtMKHRoaXMsXCJhZnRlckRyYXdDcm9zc2hhaXJcIix7ZTpiLHBvaW50OmR9KX0saGlkZUNyb3NzaGFpcjpmdW5jdGlvbigpe3RoaXMuY3Jvc3MmJnRoaXMuY3Jvc3MuaGlkZSgpO0wodGhpcyxcImFmdGVySGlkZUNyb3NzaGFpclwiKX19KTtyZXR1cm4gYy5BeGlzPWZ9KTtNKEksXCJwYXJ0cy9EYXRlVGltZUF4aXMuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl1dLGZ1bmN0aW9uKGMpe3ZhciBmPVxuYy5BeGlzLEY9Yy5nZXRNYWduaXR1ZGUsRz1jLm5vcm1hbGl6ZVRpY2tJbnRlcnZhbCx6PWMudGltZVVuaXRzO2YucHJvdG90eXBlLmdldFRpbWVUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoYXJ0LnRpbWUuZ2V0VGltZVRpY2tzLmFwcGx5KHRoaXMuY2hhcnQudGltZSxhcmd1bWVudHMpfTtmLnByb3RvdHlwZS5ub3JtYWxpemVUaW1lVGlja0ludGVydmFsPWZ1bmN0aW9uKGMsZil7dmFyIHY9Znx8W1tcIm1pbGxpc2Vjb25kXCIsWzEsMiw1LDEwLDIwLDI1LDUwLDEwMCwyMDAsNTAwXV0sW1wic2Vjb25kXCIsWzEsMiw1LDEwLDE1LDMwXV0sW1wibWludXRlXCIsWzEsMiw1LDEwLDE1LDMwXV0sW1wiaG91clwiLFsxLDIsMyw0LDYsOCwxMl1dLFtcImRheVwiLFsxLDJdXSxbXCJ3ZWVrXCIsWzEsMl1dLFtcIm1vbnRoXCIsWzEsMiwzLDQsNl1dLFtcInllYXJcIixudWxsXV07Zj12W3YubGVuZ3RoLTFdO3ZhciB0PXpbZlswXV0sQj1mWzFdLHk7Zm9yKHk9MDt5PHYubGVuZ3RoJiYhKGY9dlt5XSx0PXpbZlswXV0sXG5CPWZbMV0sdlt5KzFdJiZjPD0odCpCW0IubGVuZ3RoLTFdK3pbdlt5KzFdWzBdXSkvMik7eSsrKTt0PT09ei55ZWFyJiZjPDUqdCYmKEI9WzEsMiw1XSk7Yz1HKGMvdCxCLFwieWVhclwiPT09ZlswXT9NYXRoLm1heChGKGMvdCksMSk6MSk7cmV0dXJue3VuaXRSYW5nZTp0LGNvdW50OmMsdW5pdE5hbWU6ZlswXX19fSk7TShJLFwicGFydHMvTG9nYXJpdGhtaWNBeGlzLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5waWNrO2Y9Yy5BeGlzO3ZhciBHPWMuZ2V0TWFnbml0dWRlLHo9Yy5ub3JtYWxpemVUaWNrSW50ZXJ2YWw7Zi5wcm90b3R5cGUuZ2V0TG9nVGlja1Bvc2l0aW9ucz1mdW5jdGlvbihjLGYsdixDKXt2YXIgdD10aGlzLm9wdGlvbnMseT10aGlzLmxlbixoPVtdO0N8fCh0aGlzLl9taW5vckF1dG9JbnRlcnZhbD1udWxsKTtpZiguNTw9YyljPU1hdGgucm91bmQoYyksaD10aGlzLmdldExpbmVhclRpY2tQb3NpdGlvbnMoYyxcbmYsdik7ZWxzZSBpZiguMDg8PWMpe3k9TWF0aC5mbG9vcihmKTt2YXIgbixxO2Zvcih0PS4zPGM/WzEsMiw0XTouMTU8Yz9bMSwyLDQsNiw4XTpbMSwyLDMsNCw1LDYsNyw4LDldO3k8disxJiYhcTt5Kyspe3ZhciBnPXQubGVuZ3RoO2ZvcihuPTA7bjxnJiYhcTtuKyspe3ZhciBiPXRoaXMubG9nMmxpbih0aGlzLmxpbjJsb2coeSkqdFtuXSk7Yj5mJiYoIUN8fGE8PXYpJiZ2b2lkIDAhPT1hJiZoLnB1c2goYSk7YT52JiYocT0hMCk7dmFyIGE9Yn19fWVsc2UgZj10aGlzLmxpbjJsb2coZiksdj10aGlzLmxpbjJsb2codiksYz1DP3RoaXMuZ2V0TWlub3JUaWNrSW50ZXJ2YWwoKTp0LnRpY2tJbnRlcnZhbCxjPUYoXCJhdXRvXCI9PT1jP251bGw6Yyx0aGlzLl9taW5vckF1dG9JbnRlcnZhbCx0LnRpY2tQaXhlbEludGVydmFsLyhDPzU6MSkqKHYtZikvKChDP3kvdGhpcy50aWNrUG9zaXRpb25zLmxlbmd0aDp5KXx8MSkpLGM9eihjLG51bGwsRyhjKSksaD10aGlzLmdldExpbmVhclRpY2tQb3NpdGlvbnMoYyxcbmYsdikubWFwKHRoaXMubG9nMmxpbiksQ3x8KHRoaXMuX21pbm9yQXV0b0ludGVydmFsPWMvNSk7Q3x8KHRoaXMudGlja0ludGVydmFsPWMpO3JldHVybiBofTtmLnByb3RvdHlwZS5sb2cybGluPWZ1bmN0aW9uKGMpe3JldHVybiBNYXRoLmxvZyhjKS9NYXRoLkxOMTB9O2YucHJvdG90eXBlLmxpbjJsb2c9ZnVuY3Rpb24oYyl7cmV0dXJuIE1hdGgucG93KDEwLGMpfX0pO00oSSxcInBhcnRzL1Bsb3RMaW5lT3JCYW5kLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9BeGlzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZixGKXt2YXIgRz1GLmFycmF5TWF4LHo9Ri5hcnJheU1pbixCPUYuZGVmaW5lZCx0PUYuZGVzdHJveU9iamVjdFByb3BlcnRpZXMsdj1GLmVyYXNlLEM9Ri5leHRlbmQsSD1GLm9iamVjdEVhY2gseT1GLnBpY2ssaD1jLm1lcmdlO2MuUGxvdExpbmVPckJhbmQ9ZnVuY3Rpb24oYyxoKXt0aGlzLmF4aXM9YztoJiYodGhpcy5vcHRpb25zPVxuaCx0aGlzLmlkPWguaWQpfTtjLlBsb3RMaW5lT3JCYW5kLnByb3RvdHlwZT17cmVuZGVyOmZ1bmN0aW9uKCl7Yy5maXJlRXZlbnQodGhpcyxcInJlbmRlclwiKTt2YXIgZj10aGlzLHE9Zi5heGlzLGc9cS5ob3JpeixiPWYub3B0aW9ucyxhPWIubGFiZWwsZD1mLmxhYmVsLGU9Yi50byxsPWIuZnJvbSxMPWIudmFsdWUsRT1CKGwpJiZCKGUpLHA9QihMKSx1PWYuc3ZnRWxlbSxrPSF1LHI9W10seD1iLmNvbG9yLEE9eShiLnpJbmRleCwwKSx3PWIuZXZlbnRzO3I9e1wiY2xhc3NcIjpcImhpZ2hjaGFydHMtcGxvdC1cIisoRT9cImJhbmQgXCI6XCJsaW5lIFwiKSsoYi5jbGFzc05hbWV8fFwiXCIpfTt2YXIgbT17fSxLPXEuY2hhcnQucmVuZGVyZXIsSj1FP1wiYmFuZHNcIjpcImxpbmVzXCI7cS5pc0xvZyYmKGw9cS5sb2cybGluKGwpLGU9cS5sb2cybGluKGUpLEw9cS5sb2cybGluKEwpKTtxLmNoYXJ0LnN0eWxlZE1vZGV8fChwPyhyLnN0cm9rZT14fHxcIiM5OTk5OTlcIixyW1wic3Ryb2tlLXdpZHRoXCJdPXkoYi53aWR0aCxcbjEpLGIuZGFzaFN0eWxlJiYoci5kYXNoc3R5bGU9Yi5kYXNoU3R5bGUpKTpFJiYoci5maWxsPXh8fFwiI2U2ZWJmNVwiLGIuYm9yZGVyV2lkdGgmJihyLnN0cm9rZT1iLmJvcmRlckNvbG9yLHJbXCJzdHJva2Utd2lkdGhcIl09Yi5ib3JkZXJXaWR0aCkpKTttLnpJbmRleD1BO0orPVwiLVwiK0E7KHg9cS5wbG90TGluZXNBbmRCYW5kc0dyb3Vwc1tKXSl8fChxLnBsb3RMaW5lc0FuZEJhbmRzR3JvdXBzW0pdPXg9Sy5nKFwicGxvdC1cIitKKS5hdHRyKG0pLmFkZCgpKTtrJiYoZi5zdmdFbGVtPXU9Sy5wYXRoKCkuYXR0cihyKS5hZGQoeCkpO2lmKHApcj1xLmdldFBsb3RMaW5lUGF0aCh7dmFsdWU6TCxsaW5lV2lkdGg6dS5zdHJva2VXaWR0aCgpLGFjcm9zc1BhbmVzOmIuYWNyb3NzUGFuZXN9KTtlbHNlIGlmKEUpcj1xLmdldFBsb3RCYW5kUGF0aChsLGUsYik7ZWxzZSByZXR1cm47KGt8fCF1LmQpJiZyJiZyLmxlbmd0aD8odS5hdHRyKHtkOnJ9KSx3JiZIKHcsZnVuY3Rpb24oYSxiKXt1Lm9uKGIsXG5mdW5jdGlvbihhKXt3W2JdLmFwcGx5KGYsW2FdKX0pfSkpOnUmJihyPyh1LnNob3coITApLHUuYW5pbWF0ZSh7ZDpyfSkpOnUuZCYmKHUuaGlkZSgpLGQmJihmLmxhYmVsPWQ9ZC5kZXN0cm95KCkpKSk7YSYmKEIoYS50ZXh0KXx8QihhLmZvcm1hdHRlcikpJiZyJiZyLmxlbmd0aCYmMDxxLndpZHRoJiYwPHEuaGVpZ2h0JiYhci5pc0ZsYXQ/KGE9aCh7YWxpZ246ZyYmRSYmXCJjZW50ZXJcIix4Omc/IUUmJjQ6MTAsdmVydGljYWxBbGlnbjohZyYmRSYmXCJtaWRkbGVcIix5Omc/RT8xNjoxMDpFPzY6LTQscm90YXRpb246ZyYmIUUmJjkwfSxhKSx0aGlzLnJlbmRlckxhYmVsKGEscixFLEEpKTpkJiZkLmhpZGUoKTtyZXR1cm4gZn0scmVuZGVyTGFiZWw6ZnVuY3Rpb24oYyxoLGcsYil7dmFyIGE9dGhpcy5sYWJlbCxkPXRoaXMuYXhpcy5jaGFydC5yZW5kZXJlcjthfHwoYT17YWxpZ246Yy50ZXh0QWxpZ258fGMuYWxpZ24scm90YXRpb246Yy5yb3RhdGlvbixcImNsYXNzXCI6XCJoaWdoY2hhcnRzLXBsb3QtXCIrXG4oZz9cImJhbmRcIjpcImxpbmVcIikrXCItbGFiZWwgXCIrKGMuY2xhc3NOYW1lfHxcIlwiKX0sYS56SW5kZXg9YixiPXRoaXMuZ2V0TGFiZWxUZXh0KGMpLHRoaXMubGFiZWw9YT1kLnRleHQoYiwwLDAsYy51c2VIVE1MKS5hdHRyKGEpLmFkZCgpLHRoaXMuYXhpcy5jaGFydC5zdHlsZWRNb2RlfHxhLmNzcyhjLnN0eWxlKSk7ZD1oLnhCb3VuZHN8fFtoWzFdLGhbNF0sZz9oWzZdOmhbMV1dO2g9aC55Qm91bmRzfHxbaFsyXSxoWzVdLGc/aFs3XTpoWzJdXTtnPXooZCk7Yj16KGgpO2EuYWxpZ24oYywhMSx7eDpnLHk6Yix3aWR0aDpHKGQpLWcsaGVpZ2h0OkcoaCktYn0pO2Euc2hvdyghMCl9LGdldExhYmVsVGV4dDpmdW5jdGlvbihjKXtyZXR1cm4gQihjLmZvcm1hdHRlcik/Yy5mb3JtYXR0ZXIuY2FsbCh0aGlzKTpjLnRleHR9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2KHRoaXMuYXhpcy5wbG90TGluZXNBbmRCYW5kcyx0aGlzKTtkZWxldGUgdGhpcy5heGlzO3QodGhpcyl9fTtDKGYucHJvdG90eXBlLFxue2dldFBsb3RCYW5kUGF0aDpmdW5jdGlvbihjLGgpe3ZhciBnPXRoaXMuZ2V0UGxvdExpbmVQYXRoKHt2YWx1ZTpoLGZvcmNlOiEwLGFjcm9zc1BhbmVzOnRoaXMub3B0aW9ucy5hY3Jvc3NQYW5lc30pLGI9dGhpcy5nZXRQbG90TGluZVBhdGgoe3ZhbHVlOmMsZm9yY2U6ITAsYWNyb3NzUGFuZXM6dGhpcy5vcHRpb25zLmFjcm9zc1BhbmVzfSksYT1bXSxkPXRoaXMuaG9yaXosZT0xO2M9Yzx0aGlzLm1pbiYmaDx0aGlzLm1pbnx8Yz50aGlzLm1heCYmaD50aGlzLm1heDtpZihiJiZnKXtpZihjKXt2YXIgbD1iLnRvU3RyaW5nKCk9PT1nLnRvU3RyaW5nKCk7ZT0wfWZvcihjPTA7YzxiLmxlbmd0aDtjKz02KWQmJmdbYysxXT09PWJbYysxXT8oZ1tjKzFdKz1lLGdbYys0XSs9ZSk6ZHx8Z1tjKzJdIT09YltjKzJdfHwoZ1tjKzJdKz1lLGdbYys1XSs9ZSksYS5wdXNoKFwiTVwiLGJbYysxXSxiW2MrMl0sXCJMXCIsYltjKzRdLGJbYys1XSxnW2MrNF0sZ1tjKzVdLGdbYysxXSxnW2MrMl0sXCJ6XCIpLFxuYS5pc0ZsYXQ9bH1yZXR1cm4gYX0sYWRkUGxvdEJhbmQ6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuYWRkUGxvdEJhbmRPckxpbmUoYyxcInBsb3RCYW5kc1wiKX0sYWRkUGxvdExpbmU6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuYWRkUGxvdEJhbmRPckxpbmUoYyxcInBsb3RMaW5lc1wiKX0sYWRkUGxvdEJhbmRPckxpbmU6ZnVuY3Rpb24oaCxmKXt2YXIgZz0obmV3IGMuUGxvdExpbmVPckJhbmQodGhpcyxoKSkucmVuZGVyKCksYj10aGlzLnVzZXJPcHRpb25zO2lmKGcpe2lmKGYpe3ZhciBhPWJbZl18fFtdO2EucHVzaChoKTtiW2ZdPWF9dGhpcy5wbG90TGluZXNBbmRCYW5kcy5wdXNoKGcpfXJldHVybiBnfSxyZW1vdmVQbG90QmFuZE9yTGluZTpmdW5jdGlvbihjKXtmb3IodmFyIGg9dGhpcy5wbG90TGluZXNBbmRCYW5kcyxnPXRoaXMub3B0aW9ucyxiPXRoaXMudXNlck9wdGlvbnMsYT1oLmxlbmd0aDthLS07KWhbYV0uaWQ9PT1jJiZoW2FdLmRlc3Ryb3koKTtbZy5wbG90TGluZXN8fFxuW10sYi5wbG90TGluZXN8fFtdLGcucGxvdEJhbmRzfHxbXSxiLnBsb3RCYW5kc3x8W11dLmZvckVhY2goZnVuY3Rpb24oYil7Zm9yKGE9Yi5sZW5ndGg7YS0tOyliW2FdLmlkPT09YyYmdihiLGJbYV0pfSl9LHJlbW92ZVBsb3RCYW5kOmZ1bmN0aW9uKGMpe3RoaXMucmVtb3ZlUGxvdEJhbmRPckxpbmUoYyl9LHJlbW92ZVBsb3RMaW5lOmZ1bmN0aW9uKGMpe3RoaXMucmVtb3ZlUGxvdEJhbmRPckxpbmUoYyl9fSl9KTtNKEksXCJwYXJ0cy9Ub29sdGlwLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5kZWZpbmVkLEc9Zi5kaXNjYXJkRWxlbWVudCx6PWYuZXh0ZW5kLEI9Zi5pc051bWJlcix0PWYuaXNTdHJpbmcsdj1mLnBpY2ssQz1mLnNwbGF0LEg9Zi5zeW5jVGltZW91dDtcIlwiO3ZhciB5PWMuZG9jLGg9Yy5mb3JtYXQsbj1jLm1lcmdlLHE9Yy50aW1lVW5pdHM7Yy5Ub29sdGlwPWZ1bmN0aW9uKCl7dGhpcy5pbml0LmFwcGx5KHRoaXMsXG5hcmd1bWVudHMpfTtjLlRvb2x0aXAucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKGMsYil7dGhpcy5jaGFydD1jO3RoaXMub3B0aW9ucz1iO3RoaXMuY3Jvc3NoYWlycz1bXTt0aGlzLm5vdz17eDowLHk6MH07dGhpcy5pc0hpZGRlbj0hMDt0aGlzLnNwbGl0PWIuc3BsaXQmJiFjLmludmVydGVkO3RoaXMuc2hhcmVkPWIuc2hhcmVkfHx0aGlzLnNwbGl0O3RoaXMub3V0c2lkZT12KGIub3V0c2lkZSwhKCFjLnNjcm9sbGFibGVQaXhlbHNYJiYhYy5zY3JvbGxhYmxlUGl4ZWxzWSkpfSxjbGVhblNwbGl0OmZ1bmN0aW9uKGMpe3RoaXMuY2hhcnQuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGE9YiYmYi50dDthJiYoIWEuaXNBY3RpdmV8fGM/Yi50dD1hLmRlc3Ryb3koKTphLmlzQWN0aXZlPSExKX0pfSxhcHBseUZpbHRlcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMuY2hhcnQ7Yy5yZW5kZXJlci5kZWZpbml0aW9uKHt0YWdOYW1lOlwiZmlsdGVyXCIsaWQ6XCJkcm9wLXNoYWRvdy1cIitjLmluZGV4LFxub3BhY2l0eTouNSxjaGlsZHJlbjpbe3RhZ05hbWU6XCJmZUdhdXNzaWFuQmx1clwiLFwiaW5cIjpcIlNvdXJjZUFscGhhXCIsc3RkRGV2aWF0aW9uOjF9LHt0YWdOYW1lOlwiZmVPZmZzZXRcIixkeDoxLGR5OjF9LHt0YWdOYW1lOlwiZmVDb21wb25lbnRUcmFuc2ZlclwiLGNoaWxkcmVuOlt7dGFnTmFtZTpcImZlRnVuY0FcIix0eXBlOlwibGluZWFyXCIsc2xvcGU6LjN9XX0se3RhZ05hbWU6XCJmZU1lcmdlXCIsY2hpbGRyZW46W3t0YWdOYW1lOlwiZmVNZXJnZU5vZGVcIn0se3RhZ05hbWU6XCJmZU1lcmdlTm9kZVwiLFwiaW5cIjpcIlNvdXJjZUdyYXBoaWNcIn1dfV19KTtjLnJlbmRlcmVyLmRlZmluaXRpb24oe3RhZ05hbWU6XCJzdHlsZVwiLHRleHRDb250ZW50OlwiLmhpZ2hjaGFydHMtdG9vbHRpcC1cIitjLmluZGV4K1wie2ZpbHRlcjp1cmwoI2Ryb3Atc2hhZG93LVwiK2MuaW5kZXgrXCIpfVwifSl9LGdldExhYmVsOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcyxiPXRoaXMuY2hhcnQucmVuZGVyZXIsYT10aGlzLmNoYXJ0LnN0eWxlZE1vZGUsXG5kPXRoaXMub3B0aW9ucyxlPVwidG9vbHRpcFwiKyhGKGQuY2xhc3NOYW1lKT9cIiBcIitkLmNsYXNzTmFtZTpcIlwiKSxsO2lmKCF0aGlzLmxhYmVsKXt0aGlzLm91dHNpZGUmJih0aGlzLmNvbnRhaW5lcj1sPWMuZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbC5jbGFzc05hbWU9XCJoaWdoY2hhcnRzLXRvb2x0aXAtY29udGFpbmVyXCIsYy5jc3MobCx7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHRvcDpcIjFweFwiLHBvaW50ZXJFdmVudHM6ZC5zdHlsZSYmZC5zdHlsZS5wb2ludGVyRXZlbnRzLHpJbmRleDozfSksYy5kb2MuYm9keS5hcHBlbmRDaGlsZChsKSx0aGlzLnJlbmRlcmVyPWI9bmV3IGMuUmVuZGVyZXIobCwwLDAse30sdm9pZCAwLHZvaWQgMCxiLnN0eWxlZE1vZGUpKTt0aGlzLnNwbGl0P3RoaXMubGFiZWw9Yi5nKGUpOih0aGlzLmxhYmVsPWIubGFiZWwoXCJcIiwwLDAsZC5zaGFwZXx8XCJjYWxsb3V0XCIsbnVsbCxudWxsLGQudXNlSFRNTCxudWxsLGUpLmF0dHIoe3BhZGRpbmc6ZC5wYWRkaW5nLHI6ZC5ib3JkZXJSYWRpdXN9KSxcbmF8fHRoaXMubGFiZWwuYXR0cih7ZmlsbDpkLmJhY2tncm91bmRDb2xvcixcInN0cm9rZS13aWR0aFwiOmQuYm9yZGVyV2lkdGh9KS5jc3MoZC5zdHlsZSkuc2hhZG93KGQuc2hhZG93KSk7YSYmKHRoaXMuYXBwbHlGaWx0ZXIoKSx0aGlzLmxhYmVsLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy10b29sdGlwLVwiK3RoaXMuY2hhcnQuaW5kZXgpKTtpZihnLm91dHNpZGUmJiFnLnNwbGl0KXt2YXIgaD17eDp0aGlzLmxhYmVsLnhTZXR0ZXIseTp0aGlzLmxhYmVsLnlTZXR0ZXJ9O3RoaXMubGFiZWwueFNldHRlcj1mdW5jdGlvbihhLGIpe2hbYl0uY2FsbCh0aGlzLmxhYmVsLGcuZGlzdGFuY2UpO2wuc3R5bGUubGVmdD1hK1wicHhcIn07dGhpcy5sYWJlbC55U2V0dGVyPWZ1bmN0aW9uKGEsYil7aFtiXS5jYWxsKHRoaXMubGFiZWwsZy5kaXN0YW5jZSk7bC5zdHlsZS50b3A9YStcInB4XCJ9fXRoaXMubGFiZWwuYXR0cih7ekluZGV4Ojh9KS5hZGQoKX1yZXR1cm4gdGhpcy5sYWJlbH0sdXBkYXRlOmZ1bmN0aW9uKGMpe3RoaXMuZGVzdHJveSgpO1xubighMCx0aGlzLmNoYXJ0Lm9wdGlvbnMudG9vbHRpcC51c2VyT3B0aW9ucyxjKTt0aGlzLmluaXQodGhpcy5jaGFydCxuKCEwLHRoaXMub3B0aW9ucyxjKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmxhYmVsJiYodGhpcy5sYWJlbD10aGlzLmxhYmVsLmRlc3Ryb3koKSk7dGhpcy5zcGxpdCYmdGhpcy50dCYmKHRoaXMuY2xlYW5TcGxpdCh0aGlzLmNoYXJ0LCEwKSx0aGlzLnR0PXRoaXMudHQuZGVzdHJveSgpKTt0aGlzLnJlbmRlcmVyJiYodGhpcy5yZW5kZXJlcj10aGlzLnJlbmRlcmVyLmRlc3Ryb3koKSxHKHRoaXMuY29udGFpbmVyKSk7Yy5jbGVhclRpbWVvdXQodGhpcy5oaWRlVGltZXIpO2MuY2xlYXJUaW1lb3V0KHRoaXMudG9vbHRpcFRpbWVvdXQpfSxtb3ZlOmZ1bmN0aW9uKGcsYixhLGQpe3ZhciBlPXRoaXMsbD1lLm5vdyxoPSExIT09ZS5vcHRpb25zLmFuaW1hdGlvbiYmIWUuaXNIaWRkZW4mJigxPE1hdGguYWJzKGctbC54KXx8MTxNYXRoLmFicyhiLWwueSkpLGY9XG5lLmZvbGxvd1BvaW50ZXJ8fDE8ZS5sZW47eihsLHt4Omg/KDIqbC54K2cpLzM6Zyx5Omg/KGwueStiKS8yOmIsYW5jaG9yWDpmP3ZvaWQgMDpoPygyKmwuYW5jaG9yWCthKS8zOmEsYW5jaG9yWTpmP3ZvaWQgMDpoPyhsLmFuY2hvclkrZCkvMjpkfSk7ZS5nZXRMYWJlbCgpLmF0dHIobCk7aCYmKGMuY2xlYXJUaW1lb3V0KHRoaXMudG9vbHRpcFRpbWVvdXQpLHRoaXMudG9vbHRpcFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUubW92ZShnLGIsYSxkKX0sMzIpKX0saGlkZTpmdW5jdGlvbihnKXt2YXIgYj10aGlzO2MuY2xlYXJUaW1lb3V0KHRoaXMuaGlkZVRpbWVyKTtnPXYoZyx0aGlzLm9wdGlvbnMuaGlkZURlbGF5LDUwMCk7dGhpcy5pc0hpZGRlbnx8KHRoaXMuaGlkZVRpbWVyPUgoZnVuY3Rpb24oKXtiLmdldExhYmVsKClbZz9cImZhZGVPdXRcIjpcImhpZGVcIl0oKTtiLmlzSGlkZGVuPSEwfSxnKSl9LGdldEFuY2hvcjpmdW5jdGlvbihjLGIpe3ZhciBhPXRoaXMuY2hhcnQsXG5kPWEucG9pbnRlcixlPWEuaW52ZXJ0ZWQsbD1hLnBsb3RUb3AsZz1hLnBsb3RMZWZ0LGg9MCxwPTAsZixrO2M9QyhjKTt0aGlzLmZvbGxvd1BvaW50ZXImJmI/KHZvaWQgMD09PWIuY2hhcnRYJiYoYj1kLm5vcm1hbGl6ZShiKSksYz1bYi5jaGFydFgtYS5wbG90TGVmdCxiLmNoYXJ0WS1sXSk6Y1swXS50b29sdGlwUG9zP2M9Y1swXS50b29sdGlwUG9zOihjLmZvckVhY2goZnVuY3Rpb24oYSl7Zj1hLnNlcmllcy55QXhpcztrPWEuc2VyaWVzLnhBeGlzO2grPWEucGxvdFgrKCFlJiZrP2subGVmdC1nOjApO3ArPShhLnBsb3RMb3c/KGEucGxvdExvdythLnBsb3RIaWdoKS8yOmEucGxvdFkpKyghZSYmZj9mLnRvcC1sOjApfSksaC89Yy5sZW5ndGgscC89Yy5sZW5ndGgsYz1bZT9hLnBsb3RXaWR0aC1wOmgsdGhpcy5zaGFyZWQmJiFlJiYxPGMubGVuZ3RoJiZiP2IuY2hhcnRZLWw6ZT9hLnBsb3RIZWlnaHQtaDpwXSk7cmV0dXJuIGMubWFwKE1hdGgucm91bmQpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbihjLFxuYixhKXt2YXIgZD10aGlzLmNoYXJ0LGU9dGhpcy5kaXN0YW5jZSxsPXt9LGc9ZC5pbnZlcnRlZCYmYS5ofHwwLGgscD10aGlzLm91dHNpZGUsZj1wP3kuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLTIqZTpkLmNoYXJ0V2lkdGgsaz1wP01hdGgubWF4KHkuYm9keS5zY3JvbGxIZWlnaHQseS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LHkuYm9keS5vZmZzZXRIZWlnaHQseS5kb2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0LHkuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk6ZC5jaGFydEhlaWdodCxyPWQucG9pbnRlci5nZXRDaGFydFBvc2l0aW9uKCkseD1kLmNvbnRhaW5lclNjYWxpbmcsQT1mdW5jdGlvbihhKXtyZXR1cm4geD9hKnguc2NhbGVYOmF9LHc9ZnVuY3Rpb24oYSl7cmV0dXJuIHg/YSp4LnNjYWxlWTphfSxtPWZ1bmN0aW9uKGwpe3ZhciBtPVwieFwiPT09bDtyZXR1cm5bbCxtP2Y6ayxtP2M6Yl0uY29uY2F0KHA/W20/QShjKTp3KGIpLG0/ci5sZWZ0LWUrXG5BKGEucGxvdFgrZC5wbG90TGVmdCk6ci50b3AtZSt3KGEucGxvdFkrZC5wbG90VG9wKSwwLG0/ZjprXTpbbT9jOmIsbT9hLnBsb3RYK2QucGxvdExlZnQ6YS5wbG90WStkLnBsb3RUb3AsbT9kLnBsb3RMZWZ0OmQucGxvdFRvcCxtP2QucGxvdExlZnQrZC5wbG90V2lkdGg6ZC5wbG90VG9wK2QucGxvdEhlaWdodF0pfSxuPW0oXCJ5XCIpLEo9bShcInhcIikscT0hdGhpcy5mb2xsb3dQb2ludGVyJiZ2KGEudHRCZWxvdywhZC5pbnZlcnRlZD09PSEhYS5uZWdhdGl2ZSksdD1mdW5jdGlvbihhLGIsZCxjLGssbSxyKXt2YXIgeD1cInlcIj09PWE/dyhlKTpBKGUpLHA9KGQtYykvMixoPWM8ay1lLGY9aytlK2M8Yix1PWsteC1kK3A7az1rK3gtcDtpZihxJiZmKWxbYV09aztlbHNlIGlmKCFxJiZoKWxbYV09dTtlbHNlIGlmKGgpbFthXT1NYXRoLm1pbihyLWMsMD51LWc/dTp1LWcpO2Vsc2UgaWYoZilsW2FdPU1hdGgubWF4KG0saytnK2Q+Yj9rOmsrZyk7ZWxzZSByZXR1cm4hMX0sQz1mdW5jdGlvbihhLFxuYixkLGssYyl7dmFyIG07YzxlfHxjPmItZT9tPSExOmxbYV09YzxkLzI/MTpjPmItay8yP2Itay0yOmMtZC8yO3JldHVybiBtfSxPPWZ1bmN0aW9uKGEpe3ZhciBiPW47bj1KO0o9YjtoPWF9LEQ9ZnVuY3Rpb24oKXshMSE9PXQuYXBwbHkoMCxuKT8hMSE9PUMuYXBwbHkoMCxKKXx8aHx8KE8oITApLEQoKSk6aD9sLng9bC55PTA6KE8oITApLEQoKSl9OyhkLmludmVydGVkfHwxPHRoaXMubGVuKSYmTygpO0QoKTtyZXR1cm4gbH0sZGVmYXVsdEZvcm1hdHRlcjpmdW5jdGlvbihjKXt2YXIgYj10aGlzLnBvaW50c3x8Qyh0aGlzKTt2YXIgYT1bYy50b29sdGlwRm9vdGVySGVhZGVyRm9ybWF0dGVyKGJbMF0pXTthPWEuY29uY2F0KGMuYm9keUZvcm1hdHRlcihiKSk7YS5wdXNoKGMudG9vbHRpcEZvb3RlckhlYWRlckZvcm1hdHRlcihiWzBdLCEwKSk7cmV0dXJuIGF9LHJlZnJlc2g6ZnVuY3Rpb24oZyxiKXt2YXIgYT10aGlzLmNoYXJ0LGQ9dGhpcy5vcHRpb25zLGU9ZyxsPXt9LGg9W10sXG5mPWQuZm9ybWF0dGVyfHx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI7bD10aGlzLnNoYXJlZDt2YXIgcD1hLnN0eWxlZE1vZGU7aWYoZC5lbmFibGVkKXtjLmNsZWFyVGltZW91dCh0aGlzLmhpZGVUaW1lcik7dGhpcy5mb2xsb3dQb2ludGVyPUMoZSlbMF0uc2VyaWVzLnRvb2x0aXBPcHRpb25zLmZvbGxvd1BvaW50ZXI7dmFyIHU9dGhpcy5nZXRBbmNob3IoZSxiKTtiPXVbMF07dmFyIGs9dVsxXTshbHx8ZS5zZXJpZXMmJmUuc2VyaWVzLm5vU2hhcmVkVG9vbHRpcD9sPWUuZ2V0TGFiZWxDb25maWcoKTooYS5wb2ludGVyLmFwcGx5SW5hY3RpdmVTdGF0ZShlKSxlLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zZXRTdGF0ZShcImhvdmVyXCIpO2gucHVzaChhLmdldExhYmVsQ29uZmlnKCkpfSksbD17eDplWzBdLmNhdGVnb3J5LHk6ZVswXS55fSxsLnBvaW50cz1oLGU9ZVswXSk7dGhpcy5sZW49aC5sZW5ndGg7YT1mLmNhbGwobCx0aGlzKTtmPWUuc2VyaWVzO3RoaXMuZGlzdGFuY2U9dihmLnRvb2x0aXBPcHRpb25zLmRpc3RhbmNlLFxuMTYpOyExPT09YT90aGlzLmhpZGUoKToodGhpcy5zcGxpdD90aGlzLnJlbmRlclNwbGl0KGEsQyhnKSk6KGc9dGhpcy5nZXRMYWJlbCgpLGQuc3R5bGUud2lkdGgmJiFwfHxnLmNzcyh7d2lkdGg6dGhpcy5jaGFydC5zcGFjaW5nQm94LndpZHRofSksZy5hdHRyKHt0ZXh0OmEmJmEuam9pbj9hLmpvaW4oXCJcIik6YX0pLGcucmVtb3ZlQ2xhc3MoL2hpZ2hjaGFydHMtY29sb3ItW1xcZF0rL2cpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1jb2xvci1cIit2KGUuY29sb3JJbmRleCxmLmNvbG9ySW5kZXgpKSxwfHxnLmF0dHIoe3N0cm9rZTpkLmJvcmRlckNvbG9yfHxlLmNvbG9yfHxmLmNvbG9yfHxcIiM2NjY2NjZcIn0pLHRoaXMudXBkYXRlUG9zaXRpb24oe3Bsb3RYOmIscGxvdFk6ayxuZWdhdGl2ZTplLm5lZ2F0aXZlLHR0QmVsb3c6ZS50dEJlbG93LGg6dVsyXXx8MH0pKSx0aGlzLmlzSGlkZGVuJiZ0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmF0dHIoe29wYWNpdHk6MX0pLnNob3coKSx0aGlzLmlzSGlkZGVuPVxuITEpO2MuZmlyZUV2ZW50KHRoaXMsXCJyZWZyZXNoXCIpfX0scmVuZGVyU3BsaXQ6ZnVuY3Rpb24oZyxiKXt2YXIgYT10aGlzLGQ9W10sZT10aGlzLmNoYXJ0LGw9ZS5yZW5kZXJlcixoPSEwLGY9dGhpcy5vcHRpb25zLHA9MCx1LGs9dGhpcy5nZXRMYWJlbCgpLHI9ZS5wbG90VG9wO3QoZykmJihnPVshMSxnXSk7Zy5zbGljZSgwLGIubGVuZ3RoKzEpLmZvckVhY2goZnVuY3Rpb24oYyxtKXtpZighMSE9PWMmJlwiXCIhPT1jKXttPWJbbS0xXXx8e2lzSGVhZGVyOiEwLHBsb3RYOmJbMF0ucGxvdFgscGxvdFk6ZS5wbG90SGVpZ2h0fTt2YXIgZz1tLnNlcmllc3x8YSx4PWcudHQsdz1tLnNlcmllc3x8e30sQT1cImhpZ2hjaGFydHMtY29sb3ItXCIrdihtLmNvbG9ySW5kZXgsdy5jb2xvckluZGV4LFwibm9uZVwiKTt4fHwoeD17cGFkZGluZzpmLnBhZGRpbmcscjpmLmJvcmRlclJhZGl1c30sZS5zdHlsZWRNb2RlfHwoeC5maWxsPWYuYmFja2dyb3VuZENvbG9yLHhbXCJzdHJva2Utd2lkdGhcIl09Zi5ib3JkZXJXaWR0aCksXG5nLnR0PXg9bC5sYWJlbChudWxsLG51bGwsbnVsbCwobS5pc0hlYWRlcj9mLmhlYWRlclNoYXBlOmYuc2hhcGUpfHxcImNhbGxvdXRcIixudWxsLG51bGwsZi51c2VIVE1MKS5hZGRDbGFzcyhtLmlzSGVhZGVyP1wiaGlnaGNoYXJ0cy10b29sdGlwLWhlYWRlciBcIjpcImhpZ2hjaGFydHMtdG9vbHRpcC1ib3ggXCIrQSkuYXR0cih4KS5hZGQoaykpO3guaXNBY3RpdmU9ITA7eC5hdHRyKHt0ZXh0OmN9KTtlLnN0eWxlZE1vZGV8fHguY3NzKGYuc3R5bGUpLnNoYWRvdyhmLnNoYWRvdykuYXR0cih7c3Ryb2tlOmYuYm9yZGVyQ29sb3J8fG0uY29sb3J8fHcuY29sb3J8fFwiIzMzMzMzM1wifSk7Yz14LmdldEJCb3goKTtBPWMud2lkdGgreC5zdHJva2VXaWR0aCgpO20uaXNIZWFkZXI/KHA9Yy5oZWlnaHQsZS54QXhpc1swXS5vcHBvc2l0ZSYmKHU9ITAsci09cCksYz1NYXRoLm1heCgwLE1hdGgubWluKG0ucGxvdFgrZS5wbG90TGVmdC1BLzIsZS5jaGFydFdpZHRoKyhlLnNjcm9sbGFibGVQaXhlbHNYP1xuZS5zY3JvbGxhYmxlUGl4ZWxzWC1lLm1hcmdpblJpZ2h0OjApLUEpKSk6Yz1tLnBsb3RYK2UucGxvdExlZnQtdihmLmRpc3RhbmNlLDE2KS1BOzA+YyYmKGg9ITEpO20uaXNIZWFkZXI/dz11Py1wOmUucGxvdEhlaWdodCtwOih3PXcueUF4aXMsdz13LnBvcy1yK01hdGgubWF4KDAsTWF0aC5taW4obS5wbG90WXx8MCx3LmxlbikpKTtkLnB1c2goe3RhcmdldDp3LHJhbms6bS5pc0hlYWRlcj8xOjAsc2l6ZTpnLnR0LmdldEJCb3goKS5oZWlnaHQrMSxwb2ludDptLHg6Yyx0dDp4fSl9fSk7dGhpcy5jbGVhblNwbGl0KCk7Zi5wb3NpdGlvbmVyJiZkLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGQ9Zi5wb3NpdGlvbmVyLmNhbGwoYSxiLnR0LmdldEJCb3goKS53aWR0aCxiLnNpemUsYi5wb2ludCk7Yi54PWQueDtiLmFsaWduPTA7Yi50YXJnZXQ9ZC55O2IucmFuaz12KGQucmFuayxiLnJhbmspfSk7Yy5kaXN0cmlidXRlKGQsZS5wbG90SGVpZ2h0K3ApO2QuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgZD1cbmIucG9pbnQsYz1kLnNlcmllcyxrPWMmJmMueUF4aXM7Yi50dC5hdHRyKHt2aXNpYmlsaXR5OnZvaWQgMD09PWIucG9zP1wiaGlkZGVuXCI6XCJpbmhlcml0XCIseDpofHxkLmlzSGVhZGVyfHxmLnBvc2l0aW9uZXI/Yi54OmQucGxvdFgrZS5wbG90TGVmdCthLmRpc3RhbmNlLHk6Yi5wb3MrcixhbmNob3JYOmQuaXNIZWFkZXI/ZC5wbG90WCtlLnBsb3RMZWZ0OmQucGxvdFgrYy54QXhpcy5wb3MsYW5jaG9yWTpkLmlzSGVhZGVyP2UucGxvdFRvcCtlLnBsb3RIZWlnaHQvMjprLnBvcytNYXRoLm1heCgwLE1hdGgubWluKGQucGxvdFksay5sZW4pKX0pfSk7dmFyIHg9YS5jb250YWluZXI7Zz1hLnJlbmRlcmVyO2lmKGEub3V0c2lkZSYmeCYmZyl7dmFyIEE9ZS5wb2ludGVyLmdldENoYXJ0UG9zaXRpb24oKTt4LnN0eWxlLmxlZnQ9QS5sZWZ0K1wicHhcIjt4LnN0eWxlLnRvcD1BLnRvcCtcInB4XCI7eD1rLmdldEJCb3goKTtnLnNldFNpemUoeC53aWR0aCt4LngseC5oZWlnaHQreC55LCExKX19LHVwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKGcpe3ZhciBiPVxudGhpcy5jaGFydCxhPWIucG9pbnRlcixkPXRoaXMuZ2V0TGFiZWwoKSxlPWcucGxvdFgrYi5wbG90TGVmdCxsPWcucGxvdFkrYi5wbG90VG9wO2E9YS5nZXRDaGFydFBvc2l0aW9uKCk7Zz0odGhpcy5vcHRpb25zLnBvc2l0aW9uZXJ8fHRoaXMuZ2V0UG9zaXRpb24pLmNhbGwodGhpcyxkLndpZHRoLGQuaGVpZ2h0LGcpO2lmKHRoaXMub3V0c2lkZSl7dmFyIGg9KHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aHx8MCkrMip0aGlzLmRpc3RhbmNlO3RoaXMucmVuZGVyZXIuc2V0U2l6ZShkLndpZHRoK2gsZC5oZWlnaHQraCwhMSk7aWYoYj1iLmNvbnRhaW5lclNjYWxpbmcpYy5jc3ModGhpcy5jb250YWluZXIse3RyYW5zZm9ybTpcInNjYWxlKFwiK2Iuc2NhbGVYK1wiLCBcIitiLnNjYWxlWStcIilcIn0pLGUqPWIuc2NhbGVYLGwqPWIuc2NhbGVZO2UrPWEubGVmdC1nLng7bCs9YS50b3AtZy55fXRoaXMubW92ZShNYXRoLnJvdW5kKGcueCksTWF0aC5yb3VuZChnLnl8fDApLGUsbCl9LGdldERhdGVGb3JtYXQ6ZnVuY3Rpb24oYyxcbmIsYSxkKXt2YXIgZT10aGlzLmNoYXJ0LnRpbWUsbD1lLmRhdGVGb3JtYXQoXCIlbS0lZCAlSDolTTolUy4lTFwiLGIpLGc9e21pbGxpc2Vjb25kOjE1LHNlY29uZDoxMixtaW51dGU6OSxob3VyOjYsZGF5OjN9LGg9XCJtaWxsaXNlY29uZFwiO2ZvcihwIGluIHEpe2lmKGM9PT1xLndlZWsmJitlLmRhdGVGb3JtYXQoXCIld1wiLGIpPT09YSYmXCIwMDowMDowMC4wMDBcIj09PWwuc3Vic3RyKDYpKXt2YXIgcD1cIndlZWtcIjticmVha31pZihxW3BdPmMpe3A9aDticmVha31pZihnW3BdJiZsLnN1YnN0cihnW3BdKSE9PVwiMDEtMDEgMDA6MDA6MDAuMDAwXCIuc3Vic3RyKGdbcF0pKWJyZWFrO1wid2Vla1wiIT09cCYmKGg9cCl9aWYocCl2YXIgZj1lLnJlc29sdmVEVExGb3JtYXQoZFtwXSkubWFpbjtyZXR1cm4gZn0sZ2V0WERhdGVGb3JtYXQ6ZnVuY3Rpb24oYyxiLGEpe2I9Yi5kYXRlVGltZUxhYmVsRm9ybWF0czt2YXIgZD1hJiZhLmNsb3Nlc3RQb2ludFJhbmdlO3JldHVybihkP3RoaXMuZ2V0RGF0ZUZvcm1hdChkLFxuYy54LGEub3B0aW9ucy5zdGFydE9mV2VlayxiKTpiLmRheSl8fGIueWVhcn0sdG9vbHRpcEZvb3RlckhlYWRlckZvcm1hdHRlcjpmdW5jdGlvbihnLGIpe3ZhciBhPWI/XCJmb290ZXJcIjpcImhlYWRlclwiLGQ9Zy5zZXJpZXMsZT1kLnRvb2x0aXBPcHRpb25zLGw9ZS54RGF0ZUZvcm1hdCxmPWQueEF4aXMsbj1mJiZcImRhdGV0aW1lXCI9PT1mLm9wdGlvbnMudHlwZSYmQihnLmtleSkscD1lW2ErXCJGb3JtYXRcIl07Yj17aXNGb290ZXI6YixsYWJlbENvbmZpZzpnfTtjLmZpcmVFdmVudCh0aGlzLFwiaGVhZGVyRm9ybWF0dGVyXCIsYixmdW5jdGlvbihhKXtuJiYhbCYmKGw9dGhpcy5nZXRYRGF0ZUZvcm1hdChnLGUsZikpO24mJmwmJihnLnBvaW50JiZnLnBvaW50LnRvb2x0aXBEYXRlS2V5c3x8W1wia2V5XCJdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3A9cC5yZXBsYWNlKFwie3BvaW50LlwiK2ErXCJ9XCIsXCJ7cG9pbnQuXCIrYStcIjpcIitsK1wifVwiKX0pO2QuY2hhcnQuc3R5bGVkTW9kZSYmKHA9dGhpcy5zdHlsZWRNb2RlRm9ybWF0KHApKTtcbmEudGV4dD1oKHAse3BvaW50Omcsc2VyaWVzOmR9LHRoaXMuY2hhcnQudGltZSl9KTtyZXR1cm4gYi50ZXh0fSxib2R5Rm9ybWF0dGVyOmZ1bmN0aW9uKGMpe3JldHVybiBjLm1hcChmdW5jdGlvbihiKXt2YXIgYT1iLnNlcmllcy50b29sdGlwT3B0aW9ucztyZXR1cm4oYVsoYi5wb2ludC5mb3JtYXRQcmVmaXh8fFwicG9pbnRcIikrXCJGb3JtYXR0ZXJcIl18fGIucG9pbnQudG9vbHRpcEZvcm1hdHRlcikuY2FsbChiLnBvaW50LGFbKGIucG9pbnQuZm9ybWF0UHJlZml4fHxcInBvaW50XCIpK1wiRm9ybWF0XCJdfHxcIlwiKX0pfSxzdHlsZWRNb2RlRm9ybWF0OmZ1bmN0aW9uKGMpe3JldHVybiBjLnJlcGxhY2UoJ3N0eWxlPVwiZm9udC1zaXplOiAxMHB4XCInLCdjbGFzcz1cImhpZ2hjaGFydHMtaGVhZGVyXCInKS5yZXBsYWNlKC9zdHlsZT1cImNvbG9yOnsocG9pbnR8c2VyaWVzKVxcLmNvbG9yfVwiL2csJ2NsYXNzPVwiaGlnaGNoYXJ0cy1jb2xvci17JDEuY29sb3JJbmRleH1cIicpfX19KTtNKEksXCJwYXJ0cy9Qb2ludGVyLmpzXCIsXG5bSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmF0dHIsRz1mLmRlZmluZWQsej1mLmV4dGVuZCxCPWYuaXNOdW1iZXIsdD1mLmlzT2JqZWN0LHY9Zi5vYmplY3RFYWNoLEM9Zi5waWNrLEg9Zi5zcGxhdCx5PWMuYWRkRXZlbnQsaD1jLmNoYXJ0cyxuPWMuY29sb3IscT1jLmNzcyxnPWMuZmluZCxiPWMuZmlyZUV2ZW50LGE9Yy5vZmZzZXQsZD1jLlRvb2x0aXA7Yy5Qb2ludGVyPWZ1bmN0aW9uKGEsYil7dGhpcy5pbml0KGEsYil9O2MuUG9pbnRlci5wcm90b3R5cGU9e2luaXQ6ZnVuY3Rpb24oYSxiKXt0aGlzLm9wdGlvbnM9Yjt0aGlzLmNoYXJ0PWE7dGhpcy5ydW5DaGFydENsaWNrPWIuY2hhcnQuZXZlbnRzJiYhIWIuY2hhcnQuZXZlbnRzLmNsaWNrO3RoaXMucGluY2hEb3duPVtdO3RoaXMubGFzdFZhbGlkVG91Y2g9e307ZCYmKGEudG9vbHRpcD1uZXcgZChhLGIudG9vbHRpcCksdGhpcy5mb2xsb3dUb3VjaE1vdmU9XG5DKGIudG9vbHRpcC5mb2xsb3dUb3VjaE1vdmUsITApKTt0aGlzLnNldERPTUV2ZW50cygpfSx6b29tT3B0aW9uOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhcnQsZD1iLm9wdGlvbnMuY2hhcnQsZT1kLnpvb21UeXBlfHxcIlwiO2I9Yi5pbnZlcnRlZDsvdG91Y2gvLnRlc3QoYS50eXBlKSYmKGU9QyhkLnBpbmNoVHlwZSxlKSk7dGhpcy56b29tWD1hPS94Ly50ZXN0KGUpO3RoaXMuem9vbVk9ZT0veS8udGVzdChlKTt0aGlzLnpvb21Ib3I9YSYmIWJ8fGUmJmI7dGhpcy56b29tVmVydD1lJiYhYnx8YSYmYjt0aGlzLmhhc1pvb209YXx8ZX0sZ2V0Q2hhcnRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoYXJ0UG9zaXRpb258fCh0aGlzLmNoYXJ0UG9zaXRpb249YSh0aGlzLmNoYXJ0LmNvbnRhaW5lcikpfSxub3JtYWxpemU6ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLnRvdWNoZXM/YS50b3VjaGVzLmxlbmd0aD9hLnRvdWNoZXMuaXRlbSgwKTphLmNoYW5nZWRUb3VjaGVzWzBdOlxuYTtifHwoYj10aGlzLmdldENoYXJ0UG9zaXRpb24oKSk7dmFyIGU9ZC5wYWdlWC1iLmxlZnQ7Yj1kLnBhZ2VZLWIudG9wO2lmKGQ9dGhpcy5jaGFydC5jb250YWluZXJTY2FsaW5nKWUvPWQuc2NhbGVYLGIvPWQuc2NhbGVZO3JldHVybiB6KGEse2NoYXJ0WDpNYXRoLnJvdW5kKGUpLGNoYXJ0WTpNYXRoLnJvdW5kKGIpfSl9LGdldENvb3JkaW5hdGVzOmZ1bmN0aW9uKGEpe3ZhciBiPXt4QXhpczpbXSx5QXhpczpbXX07dGhpcy5jaGFydC5heGVzLmZvckVhY2goZnVuY3Rpb24oZCl7YltkLmlzWEF4aXM/XCJ4QXhpc1wiOlwieUF4aXNcIl0ucHVzaCh7YXhpczpkLHZhbHVlOmQudG9WYWx1ZShhW2QuaG9yaXo/XCJjaGFydFhcIjpcImNoYXJ0WVwiXSl9KX0pO3JldHVybiBifSxmaW5kTmVhcmVzdEtEUG9pbnQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlO2EuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYz0hKGEubm9TaGFyZWRUb29sdGlwJiZiKSYmMD5hLm9wdGlvbnMuZmluZE5lYXJlc3RQb2ludEJ5LmluZGV4T2YoXCJ5XCIpO1xuYT1hLnNlYXJjaFBvaW50KGQsYyk7aWYoKGM9dChhLCEwKSkmJiEoYz0hdChlLCEwKSkpe2M9ZS5kaXN0WC1hLmRpc3RYO3ZhciBrPWUuZGlzdC1hLmRpc3QsbD0oYS5zZXJpZXMuZ3JvdXAmJmEuc2VyaWVzLmdyb3VwLnpJbmRleCktKGUuc2VyaWVzLmdyb3VwJiZlLnNlcmllcy5ncm91cC56SW5kZXgpO2M9MDwoMCE9PWMmJmI/YzowIT09az9rOjAhPT1sP2w6ZS5zZXJpZXMuaW5kZXg+YS5zZXJpZXMuaW5kZXg/LTE6MSl9YyYmKGU9YSl9KTtyZXR1cm4gZX0sZ2V0UG9pbnRGcm9tRXZlbnQ6ZnVuY3Rpb24oYSl7YT1hLnRhcmdldDtmb3IodmFyIGI7YSYmIWI7KWI9YS5wb2ludCxhPWEucGFyZW50Tm9kZTtyZXR1cm4gYn0sZ2V0Q2hhcnRDb29yZGluYXRlc0Zyb21Qb2ludDpmdW5jdGlvbihhLGIpe3ZhciBkPWEuc2VyaWVzLGU9ZC54QXhpcztkPWQueUF4aXM7dmFyIGM9QyhhLmNsaWVudFgsYS5wbG90WCksbD1hLnNoYXBlQXJncztpZihlJiZkKXJldHVybiBiP3tjaGFydFg6ZS5sZW4rXG5lLnBvcy1jLGNoYXJ0WTpkLmxlbitkLnBvcy1hLnBsb3RZfTp7Y2hhcnRYOmMrZS5wb3MsY2hhcnRZOmEucGxvdFkrZC5wb3N9O2lmKGwmJmwueCYmbC55KXJldHVybntjaGFydFg6bC54LGNoYXJ0WTpsLnl9fSxnZXRIb3ZlckRhdGE6ZnVuY3Rpb24oYSxiLGQsYyxoLGYpe3ZhciBlLGw9W107Yz0hKCFjfHwhYSk7dmFyIHg9YiYmIWIuc3RpY2t5VHJhY2tpbmc/W2JdOmQuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLnZpc2libGUmJiEoIWgmJmEuZGlyZWN0VG91Y2gpJiZDKGEub3B0aW9ucy5lbmFibGVNb3VzZVRyYWNraW5nLCEwKSYmYS5zdGlja3lUcmFja2luZ30pO2I9KGU9Y3x8IWY/YTp0aGlzLmZpbmROZWFyZXN0S0RQb2ludCh4LGgsZikpJiZlLnNlcmllcztlJiYoaCYmIWIubm9TaGFyZWRUb29sdGlwPyh4PWQuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLnZpc2libGUmJiEoIWgmJmEuZGlyZWN0VG91Y2gpJiZDKGEub3B0aW9ucy5lbmFibGVNb3VzZVRyYWNraW5nLFxuITApJiYhYS5ub1NoYXJlZFRvb2x0aXB9KSx4LmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9ZyhhLnBvaW50cyxmdW5jdGlvbihhKXtyZXR1cm4gYS54PT09ZS54JiYhYS5pc051bGx9KTt0KGIpJiYoYS5jaGFydC5pc0Jvb3N0aW5nJiYoYj1hLmdldFBvaW50KGIpKSxsLnB1c2goYikpfSkpOmwucHVzaChlKSk7cmV0dXJue2hvdmVyUG9pbnQ6ZSxob3ZlclNlcmllczpiLGhvdmVyUG9pbnRzOmx9fSxydW5Qb2ludEFjdGlvbnM6ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzLmNoYXJ0LGU9ZC50b29sdGlwJiZkLnRvb2x0aXAub3B0aW9ucy5lbmFibGVkP2QudG9vbHRpcDp2b2lkIDAsbD1lP2Uuc2hhcmVkOiExLGc9Ynx8ZC5ob3ZlclBvaW50LGs9ZyYmZy5zZXJpZXN8fGQuaG92ZXJTZXJpZXM7az10aGlzLmdldEhvdmVyRGF0YShnLGssZC5zZXJpZXMsKCFhfHxcInRvdWNobW92ZVwiIT09YS50eXBlKSYmKCEhYnx8ayYmay5kaXJlY3RUb3VjaCYmdGhpcy5pc0RpcmVjdFRvdWNoKSxsLGEpO1xuZz1rLmhvdmVyUG9pbnQ7dmFyIHI9ay5ob3ZlclBvaW50cztiPShrPWsuaG92ZXJTZXJpZXMpJiZrLnRvb2x0aXBPcHRpb25zLmZvbGxvd1BvaW50ZXI7bD1sJiZrJiYhay5ub1NoYXJlZFRvb2x0aXA7aWYoZyYmKGchPT1kLmhvdmVyUG9pbnR8fGUmJmUuaXNIaWRkZW4pKXsoZC5ob3ZlclBvaW50c3x8W10pLmZvckVhY2goZnVuY3Rpb24oYSl7LTE9PT1yLmluZGV4T2YoYSkmJmEuc2V0U3RhdGUoKX0pO2lmKGQuaG92ZXJTZXJpZXMhPT1rKWsub25Nb3VzZU92ZXIoKTt0aGlzLmFwcGx5SW5hY3RpdmVTdGF0ZShyKTsocnx8W10pLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zZXRTdGF0ZShcImhvdmVyXCIpfSk7ZC5ob3ZlclBvaW50JiZkLmhvdmVyUG9pbnQuZmlyZVBvaW50RXZlbnQoXCJtb3VzZU91dFwiKTtpZighZy5zZXJpZXMpcmV0dXJuO2cuZmlyZVBvaW50RXZlbnQoXCJtb3VzZU92ZXJcIik7ZC5ob3ZlclBvaW50cz1yO2QuaG92ZXJQb2ludD1nO2UmJmUucmVmcmVzaChsP3I6ZyxhKX1lbHNlIGImJlxuZSYmIWUuaXNIaWRkZW4mJihnPWUuZ2V0QW5jaG9yKFt7fV0sYSksZS51cGRhdGVQb3NpdGlvbih7cGxvdFg6Z1swXSxwbG90WTpnWzFdfSkpO3RoaXMudW5Eb2NNb3VzZU1vdmV8fCh0aGlzLnVuRG9jTW91c2VNb3ZlPXkoZC5jb250YWluZXIub3duZXJEb2N1bWVudCxcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKGEpe3ZhciBiPWhbYy5ob3ZlckNoYXJ0SW5kZXhdO2lmKGIpYi5wb2ludGVyLm9uRG9jdW1lbnRNb3VzZU1vdmUoYSl9KSk7ZC5heGVzLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGQ9QyhiLmNyb3NzaGFpci5zbmFwLCEwKSxlPWQ/Yy5maW5kKHIsZnVuY3Rpb24oYSl7cmV0dXJuIGEuc2VyaWVzW2IuY29sbF09PT1ifSk6dm9pZCAwO2V8fCFkP2IuZHJhd0Nyb3NzaGFpcihhLGUpOmIuaGlkZUNyb3NzaGFpcigpfSl9LGFwcGx5SW5hY3RpdmVTdGF0ZTpmdW5jdGlvbihhKXt2YXIgYj1bXSxkOyhhfHxbXSkuZm9yRWFjaChmdW5jdGlvbihhKXtkPWEuc2VyaWVzO2IucHVzaChkKTtcbmQubGlua2VkUGFyZW50JiZiLnB1c2goZC5saW5rZWRQYXJlbnQpO2QubGlua2VkU2VyaWVzJiYoYj1iLmNvbmNhdChkLmxpbmtlZFNlcmllcykpO2QubmF2aWdhdG9yU2VyaWVzJiZiLnB1c2goZC5uYXZpZ2F0b3JTZXJpZXMpfSk7dGhpcy5jaGFydC5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihhKXstMT09PWIuaW5kZXhPZihhKT9hLnNldFN0YXRlKFwiaW5hY3RpdmVcIiwhMCk6YS5vcHRpb25zLmluYWN0aXZlT3RoZXJQb2ludHMmJmEuc2V0QWxsUG9pbnRzVG9TdGF0ZShcImluYWN0aXZlXCIpfSl9LHJlc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcy5jaGFydCxlPWQuaG92ZXJTZXJpZXMsYz1kLmhvdmVyUG9pbnQsZz1kLmhvdmVyUG9pbnRzLGs9ZC50b29sdGlwLGw9ayYmay5zaGFyZWQ/ZzpjO2EmJmwmJkgobCkuZm9yRWFjaChmdW5jdGlvbihiKXtiLnNlcmllcy5pc0NhcnRlc2lhbiYmdm9pZCAwPT09Yi5wbG90WCYmKGE9ITEpfSk7aWYoYSlrJiZsJiZIKGwpLmxlbmd0aCYmKGsucmVmcmVzaChsKSxcbmsuc2hhcmVkJiZnP2cuZm9yRWFjaChmdW5jdGlvbihhKXthLnNldFN0YXRlKGEuc3RhdGUsITApO2Euc2VyaWVzLmlzQ2FydGVzaWFuJiYoYS5zZXJpZXMueEF4aXMuY3Jvc3NoYWlyJiZhLnNlcmllcy54QXhpcy5kcmF3Q3Jvc3NoYWlyKG51bGwsYSksYS5zZXJpZXMueUF4aXMuY3Jvc3NoYWlyJiZhLnNlcmllcy55QXhpcy5kcmF3Q3Jvc3NoYWlyKG51bGwsYSkpfSk6YyYmKGMuc2V0U3RhdGUoYy5zdGF0ZSwhMCksZC5heGVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jcm9zc2hhaXImJmEuZHJhd0Nyb3NzaGFpcihudWxsLGMpfSkpKTtlbHNle2lmKGMpYy5vbk1vdXNlT3V0KCk7ZyYmZy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0U3RhdGUoKX0pO2lmKGUpZS5vbk1vdXNlT3V0KCk7ayYmay5oaWRlKGIpO3RoaXMudW5Eb2NNb3VzZU1vdmUmJih0aGlzLnVuRG9jTW91c2VNb3ZlPXRoaXMudW5Eb2NNb3VzZU1vdmUoKSk7ZC5heGVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5oaWRlQ3Jvc3NoYWlyKCl9KTtcbnRoaXMuaG92ZXJYPWQuaG92ZXJQb2ludHM9ZC5ob3ZlclBvaW50PW51bGx9fSxzY2FsZUdyb3VwczpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuY2hhcnQsZTtkLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2U9YXx8Yy5nZXRQbG90Qm94KCk7Yy54QXhpcyYmYy54QXhpcy56b29tRW5hYmxlZCYmYy5ncm91cCYmKGMuZ3JvdXAuYXR0cihlKSxjLm1hcmtlckdyb3VwJiYoYy5tYXJrZXJHcm91cC5hdHRyKGUpLGMubWFya2VyR3JvdXAuY2xpcChiP2QuY2xpcFJlY3Q6bnVsbCkpLGMuZGF0YUxhYmVsc0dyb3VwJiZjLmRhdGFMYWJlbHNHcm91cC5hdHRyKGUpKX0pO2QuY2xpcFJlY3QuYXR0cihifHxkLmNsaXBCb3gpfSxkcmFnU3RhcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jaGFydDtiLm1vdXNlSXNEb3duPWEudHlwZTtiLmNhbmNlbENsaWNrPSExO2IubW91c2VEb3duWD10aGlzLm1vdXNlRG93blg9YS5jaGFydFg7Yi5tb3VzZURvd25ZPXRoaXMubW91c2VEb3duWT1hLmNoYXJ0WX0sXG5kcmFnOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhcnQsZD1iLm9wdGlvbnMuY2hhcnQsZT1hLmNoYXJ0WCxjPWEuY2hhcnRZLGc9dGhpcy56b29tSG9yLGs9dGhpcy56b29tVmVydCxyPWIucGxvdExlZnQsaD1iLnBsb3RUb3AsQT1iLnBsb3RXaWR0aCx3PWIucGxvdEhlaWdodCxtPXRoaXMuc2VsZWN0aW9uTWFya2VyLGY9dGhpcy5tb3VzZURvd25YLEo9dGhpcy5tb3VzZURvd25ZLHY9ZC5wYW5LZXkmJmFbZC5wYW5LZXkrXCJLZXlcIl07aWYoIW18fCFtLnRvdWNoKWlmKGU8cj9lPXI6ZT5yK0EmJihlPXIrQSksYzxoP2M9aDpjPmgrdyYmKGM9aCt3KSx0aGlzLmhhc0RyYWdnZWQ9TWF0aC5zcXJ0KE1hdGgucG93KGYtZSwyKStNYXRoLnBvdyhKLWMsMikpLDEwPHRoaXMuaGFzRHJhZ2dlZCl7dmFyIHE9Yi5pc0luc2lkZVBsb3QoZi1yLEotaCk7Yi5oYXNDYXJ0ZXNpYW5TZXJpZXMmJih0aGlzLnpvb21YfHx0aGlzLnpvb21ZKSYmcSYmIXYmJiFtJiYodGhpcy5zZWxlY3Rpb25NYXJrZXI9XG5tPWIucmVuZGVyZXIucmVjdChyLGgsZz8xOkEsaz8xOncsMCkuYXR0cih7XCJjbGFzc1wiOlwiaGlnaGNoYXJ0cy1zZWxlY3Rpb24tbWFya2VyXCIsekluZGV4Ojd9KS5hZGQoKSxiLnN0eWxlZE1vZGV8fG0uYXR0cih7ZmlsbDpkLnNlbGVjdGlvbk1hcmtlckZpbGx8fG4oXCIjMzM1Y2FkXCIpLnNldE9wYWNpdHkoLjI1KS5nZXQoKX0pKTttJiZnJiYoZS09ZixtLmF0dHIoe3dpZHRoOk1hdGguYWJzKGUpLHg6KDA8ZT8wOmUpK2Z9KSk7bSYmayYmKGU9Yy1KLG0uYXR0cih7aGVpZ2h0Ok1hdGguYWJzKGUpLHk6KDA8ZT8wOmUpK0p9KSk7cSYmIW0mJmQucGFubmluZyYmYi5wYW4oYSxkLnBhbm5pbmcpfX0sZHJvcDpmdW5jdGlvbihhKXt2YXIgZD10aGlzLGU9dGhpcy5jaGFydCxjPXRoaXMuaGFzUGluY2hlZDtpZih0aGlzLnNlbGVjdGlvbk1hcmtlcil7dmFyIGc9e29yaWdpbmFsRXZlbnQ6YSx4QXhpczpbXSx5QXhpczpbXX0saD10aGlzLnNlbGVjdGlvbk1hcmtlcixrPWguYXR0cj9oLmF0dHIoXCJ4XCIpOlxuaC54LHI9aC5hdHRyP2guYXR0cihcInlcIik6aC55LHg9aC5hdHRyP2guYXR0cihcIndpZHRoXCIpOmgud2lkdGgsQT1oLmF0dHI/aC5hdHRyKFwiaGVpZ2h0XCIpOmguaGVpZ2h0LHc7aWYodGhpcy5oYXNEcmFnZ2VkfHxjKWUuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe2lmKGIuem9vbUVuYWJsZWQmJkcoYi5taW4pJiYoY3x8ZFt7eEF4aXM6XCJ6b29tWFwiLHlBeGlzOlwiem9vbVlcIn1bYi5jb2xsXV0pKXt2YXIgZT1iLmhvcml6LG09XCJ0b3VjaGVuZFwiPT09YS50eXBlP2IubWluUGl4ZWxQYWRkaW5nOjAsbD1iLnRvVmFsdWUoKGU/azpyKSttKTtlPWIudG9WYWx1ZSgoZT9rK3g6citBKS1tKTtnW2IuY29sbF0ucHVzaCh7YXhpczpiLG1pbjpNYXRoLm1pbihsLGUpLG1heDpNYXRoLm1heChsLGUpfSk7dz0hMH19KSx3JiZiKGUsXCJzZWxlY3Rpb25cIixnLGZ1bmN0aW9uKGEpe2Uuem9vbSh6KGEsYz97YW5pbWF0aW9uOiExfTpudWxsKSl9KTtCKGUuaW5kZXgpJiYodGhpcy5zZWxlY3Rpb25NYXJrZXI9XG50aGlzLnNlbGVjdGlvbk1hcmtlci5kZXN0cm95KCkpO2MmJnRoaXMuc2NhbGVHcm91cHMoKX1lJiZCKGUuaW5kZXgpJiYocShlLmNvbnRhaW5lcix7Y3Vyc29yOmUuX2N1cnNvcn0pLGUuY2FuY2VsQ2xpY2s9MTA8dGhpcy5oYXNEcmFnZ2VkLGUubW91c2VJc0Rvd249dGhpcy5oYXNEcmFnZ2VkPXRoaXMuaGFzUGluY2hlZD0hMSx0aGlzLnBpbmNoRG93bj1bXSl9LG9uQ29udGFpbmVyTW91c2VEb3duOmZ1bmN0aW9uKGEpe2E9dGhpcy5ub3JtYWxpemUoYSk7MiE9PWEuYnV0dG9uJiYodGhpcy56b29tT3B0aW9uKGEpLGEucHJldmVudERlZmF1bHQmJmEucHJldmVudERlZmF1bHQoKSx0aGlzLmRyYWdTdGFydChhKSl9LG9uRG9jdW1lbnRNb3VzZVVwOmZ1bmN0aW9uKGEpe2hbYy5ob3ZlckNoYXJ0SW5kZXhdJiZoW2MuaG92ZXJDaGFydEluZGV4XS5wb2ludGVyLmRyb3AoYSl9LG9uRG9jdW1lbnRNb3VzZU1vdmU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jaGFydCxkPXRoaXMuY2hhcnRQb3NpdGlvbjtcbmE9dGhpcy5ub3JtYWxpemUoYSxkKTshZHx8dGhpcy5pbkNsYXNzKGEudGFyZ2V0LFwiaGlnaGNoYXJ0cy10cmFja2VyXCIpfHxiLmlzSW5zaWRlUGxvdChhLmNoYXJ0WC1iLnBsb3RMZWZ0LGEuY2hhcnRZLWIucGxvdFRvcCl8fHRoaXMucmVzZXQoKX0sb25Db250YWluZXJNb3VzZUxlYXZlOmZ1bmN0aW9uKGEpe3ZhciBiPWhbYy5ob3ZlckNoYXJ0SW5kZXhdO2ImJihhLnJlbGF0ZWRUYXJnZXR8fGEudG9FbGVtZW50KSYmKGIucG9pbnRlci5yZXNldCgpLGIucG9pbnRlci5jaGFydFBvc2l0aW9uPXZvaWQgMCl9LG9uQ29udGFpbmVyTW91c2VNb3ZlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhcnQ7RyhjLmhvdmVyQ2hhcnRJbmRleCkmJmhbYy5ob3ZlckNoYXJ0SW5kZXhdJiZoW2MuaG92ZXJDaGFydEluZGV4XS5tb3VzZUlzRG93bnx8KGMuaG92ZXJDaGFydEluZGV4PWIuaW5kZXgpO2E9dGhpcy5ub3JtYWxpemUoYSk7YS5wcmV2ZW50RGVmYXVsdHx8KGEucmV0dXJuVmFsdWU9ITEpO1xuXCJtb3VzZWRvd25cIj09PWIubW91c2VJc0Rvd24mJnRoaXMuZHJhZyhhKTshdGhpcy5pbkNsYXNzKGEudGFyZ2V0LFwiaGlnaGNoYXJ0cy10cmFja2VyXCIpJiYhYi5pc0luc2lkZVBsb3QoYS5jaGFydFgtYi5wbG90TGVmdCxhLmNoYXJ0WS1iLnBsb3RUb3ApfHxiLm9wZW5NZW51fHx0aGlzLnJ1blBvaW50QWN0aW9ucyhhKX0saW5DbGFzczpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZDthOyl7aWYoZD1GKGEsXCJjbGFzc1wiKSl7aWYoLTEhPT1kLmluZGV4T2YoYikpcmV0dXJuITA7aWYoLTEhPT1kLmluZGV4T2YoXCJoaWdoY2hhcnRzLWNvbnRhaW5lclwiKSlyZXR1cm4hMX1hPWEucGFyZW50Tm9kZX19LG9uVHJhY2tlck1vdXNlT3V0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhcnQuaG92ZXJTZXJpZXM7YT1hLnJlbGF0ZWRUYXJnZXR8fGEudG9FbGVtZW50O3RoaXMuaXNEaXJlY3RUb3VjaD0hMTtpZighKCFifHwhYXx8Yi5zdGlja3lUcmFja2luZ3x8dGhpcy5pbkNsYXNzKGEsXCJoaWdoY2hhcnRzLXRvb2x0aXBcIil8fFxudGhpcy5pbkNsYXNzKGEsXCJoaWdoY2hhcnRzLXNlcmllcy1cIitiLmluZGV4KSYmdGhpcy5pbkNsYXNzKGEsXCJoaWdoY2hhcnRzLXRyYWNrZXJcIikpKWIub25Nb3VzZU91dCgpfSxvbkNvbnRhaW5lckNsaWNrOmZ1bmN0aW9uKGEpe3ZhciBkPXRoaXMuY2hhcnQsZT1kLmhvdmVyUG9pbnQsYz1kLnBsb3RMZWZ0LGc9ZC5wbG90VG9wO2E9dGhpcy5ub3JtYWxpemUoYSk7ZC5jYW5jZWxDbGlja3x8KGUmJnRoaXMuaW5DbGFzcyhhLnRhcmdldCxcImhpZ2hjaGFydHMtdHJhY2tlclwiKT8oYihlLnNlcmllcyxcImNsaWNrXCIseihhLHtwb2ludDplfSkpLGQuaG92ZXJQb2ludCYmZS5maXJlUG9pbnRFdmVudChcImNsaWNrXCIsYSkpOih6KGEsdGhpcy5nZXRDb29yZGluYXRlcyhhKSksZC5pc0luc2lkZVBsb3QoYS5jaGFydFgtYyxhLmNoYXJ0WS1nKSYmYihkLFwiY2xpY2tcIixhKSkpfSxzZXRET01FdmVudHM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5jaGFydC5jb250YWluZXIsZD1iLm93bmVyRG9jdW1lbnQ7XG5iLm9ubW91c2Vkb3duPWZ1bmN0aW9uKGIpe2Eub25Db250YWluZXJNb3VzZURvd24oYil9O2Iub25tb3VzZW1vdmU9ZnVuY3Rpb24oYil7YS5vbkNvbnRhaW5lck1vdXNlTW92ZShiKX07Yi5vbmNsaWNrPWZ1bmN0aW9uKGIpe2Eub25Db250YWluZXJDbGljayhiKX07dGhpcy51bmJpbmRDb250YWluZXJNb3VzZUxlYXZlPXkoYixcIm1vdXNlbGVhdmVcIixhLm9uQ29udGFpbmVyTW91c2VMZWF2ZSk7Yy51bmJpbmREb2N1bWVudE1vdXNlVXB8fChjLnVuYmluZERvY3VtZW50TW91c2VVcD15KGQsXCJtb3VzZXVwXCIsYS5vbkRvY3VtZW50TW91c2VVcCkpO2MuaGFzVG91Y2gmJih5KGIsXCJ0b3VjaHN0YXJ0XCIsZnVuY3Rpb24oYil7YS5vbkNvbnRhaW5lclRvdWNoU3RhcnQoYil9KSx5KGIsXCJ0b3VjaG1vdmVcIixmdW5jdGlvbihiKXthLm9uQ29udGFpbmVyVG91Y2hNb3ZlKGIpfSksYy51bmJpbmREb2N1bWVudFRvdWNoRW5kfHwoYy51bmJpbmREb2N1bWVudFRvdWNoRW5kPXkoZCxcInRvdWNoZW5kXCIsXG5hLm9uRG9jdW1lbnRUb3VjaEVuZCkpKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7YS51bkRvY01vdXNlTW92ZSYmYS51bkRvY01vdXNlTW92ZSgpO3RoaXMudW5iaW5kQ29udGFpbmVyTW91c2VMZWF2ZSgpO2MuY2hhcnRDb3VudHx8KGMudW5iaW5kRG9jdW1lbnRNb3VzZVVwJiYoYy51bmJpbmREb2N1bWVudE1vdXNlVXA9Yy51bmJpbmREb2N1bWVudE1vdXNlVXAoKSksYy51bmJpbmREb2N1bWVudFRvdWNoRW5kJiYoYy51bmJpbmREb2N1bWVudFRvdWNoRW5kPWMudW5iaW5kRG9jdW1lbnRUb3VjaEVuZCgpKSk7Y2xlYXJJbnRlcnZhbChhLnRvb2x0aXBUaW1lb3V0KTt2KGEsZnVuY3Rpb24oYixkKXthW2RdPW51bGx9KX19fSk7TShJLFwicGFydHMvVG91Y2hQb2ludGVyLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5leHRlbmQsRz1mLnBpY2ssej1jLmNoYXJ0cyxCPWMubm9vcDtGKGMuUG9pbnRlci5wcm90b3R5cGUsXG57cGluY2hUcmFuc2xhdGU6ZnVuY3Rpb24oYyxmLEMsQix5LGgpe3RoaXMuem9vbUhvciYmdGhpcy5waW5jaFRyYW5zbGF0ZURpcmVjdGlvbighMCxjLGYsQyxCLHksaCk7dGhpcy56b29tVmVydCYmdGhpcy5waW5jaFRyYW5zbGF0ZURpcmVjdGlvbighMSxjLGYsQyxCLHksaCl9LHBpbmNoVHJhbnNsYXRlRGlyZWN0aW9uOmZ1bmN0aW9uKGMsZixDLEIseSxoLG4scSl7dmFyIGc9dGhpcy5jaGFydCxiPWM/XCJ4XCI6XCJ5XCIsYT1jP1wiWFwiOlwiWVwiLGQ9XCJjaGFydFwiK2EsZT1jP1wid2lkdGhcIjpcImhlaWdodFwiLGw9Z1tcInBsb3RcIisoYz9cIkxlZnRcIjpcIlRvcFwiKV0sdix0LHA9cXx8MSx1PWcuaW52ZXJ0ZWQsaz1nLmJvdW5kc1tjP1wiaFwiOlwidlwiXSxyPTE9PT1mLmxlbmd0aCx4PWZbMF1bZF0sQT1DWzBdW2RdLHc9IXImJmZbMV1bZF0sbT0hciYmQ1sxXVtkXTtDPWZ1bmN0aW9uKCl7IXImJjIwPE1hdGguYWJzKHgtdykmJihwPXF8fE1hdGguYWJzKEEtbSkvTWF0aC5hYnMoeC13KSk7dD0obC1BKS9wK3g7XG52PWdbXCJwbG90XCIrKGM/XCJXaWR0aFwiOlwiSGVpZ2h0XCIpXS9wfTtDKCk7Zj10O2lmKGY8ay5taW4pe2Y9ay5taW47dmFyIEs9ITB9ZWxzZSBmK3Y+ay5tYXgmJihmPWsubWF4LXYsSz0hMCk7Sz8oQS09LjgqKEEtbltiXVswXSkscnx8KG0tPS44KihtLW5bYl1bMV0pKSxDKCkpOm5bYl09W0EsbV07dXx8KGhbYl09dC1sLGhbZV09dik7aD11PzEvcDpwO3lbZV09djt5W2JdPWY7Qlt1P2M/XCJzY2FsZVlcIjpcInNjYWxlWFwiOlwic2NhbGVcIithXT1wO0JbXCJ0cmFuc2xhdGVcIithXT1oKmwrKEEtaCp4KX0scGluY2g6ZnVuY3Rpb24oYyl7dmFyIGY9dGhpcyx0PWYuY2hhcnQsej1mLnBpbmNoRG93bix5PWMudG91Y2hlcyxoPXkubGVuZ3RoLG49Zi5sYXN0VmFsaWRUb3VjaCxxPWYuaGFzWm9vbSxnPWYuc2VsZWN0aW9uTWFya2VyLGI9e30sYT0xPT09aCYmKGYuaW5DbGFzcyhjLnRhcmdldCxcImhpZ2hjaGFydHMtdHJhY2tlclwiKSYmdC5ydW5UcmFja2VyQ2xpY2t8fGYucnVuQ2hhcnRDbGljayksZD17fTtcbjE8aCYmKGYuaW5pdGlhdGVkPSEwKTtxJiZmLmluaXRpYXRlZCYmIWEmJmMucHJldmVudERlZmF1bHQoKTtbXS5tYXAuY2FsbCh5LGZ1bmN0aW9uKGEpe3JldHVybiBmLm5vcm1hbGl6ZShhKX0pO1widG91Y2hzdGFydFwiPT09Yy50eXBlPyhbXS5mb3JFYWNoLmNhbGwoeSxmdW5jdGlvbihhLGIpe3pbYl09e2NoYXJ0WDphLmNoYXJ0WCxjaGFydFk6YS5jaGFydFl9fSksbi54PVt6WzBdLmNoYXJ0WCx6WzFdJiZ6WzFdLmNoYXJ0WF0sbi55PVt6WzBdLmNoYXJ0WSx6WzFdJiZ6WzFdLmNoYXJ0WV0sdC5heGVzLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoYS56b29tRW5hYmxlZCl7dmFyIGI9dC5ib3VuZHNbYS5ob3Jpej9cImhcIjpcInZcIl0sZD1hLm1pblBpeGVsUGFkZGluZyxlPWEudG9QaXhlbHMoTWF0aC5taW4oRyhhLm9wdGlvbnMubWluLGEuZGF0YU1pbiksYS5kYXRhTWluKSksYz1hLnRvUGl4ZWxzKE1hdGgubWF4KEcoYS5vcHRpb25zLm1heCxhLmRhdGFNYXgpLGEuZGF0YU1heCkpLGc9TWF0aC5tYXgoZSxcbmMpO2IubWluPU1hdGgubWluKGEucG9zLE1hdGgubWluKGUsYyktZCk7Yi5tYXg9TWF0aC5tYXgoYS5wb3MrYS5sZW4sZytkKX19KSxmLnJlcz0hMCk6Zi5mb2xsb3dUb3VjaE1vdmUmJjE9PT1oP3RoaXMucnVuUG9pbnRBY3Rpb25zKGYubm9ybWFsaXplKGMpKTp6Lmxlbmd0aCYmKGd8fChmLnNlbGVjdGlvbk1hcmtlcj1nPUYoe2Rlc3Ryb3k6Qix0b3VjaDohMH0sdC5wbG90Qm94KSksZi5waW5jaFRyYW5zbGF0ZSh6LHksYixnLGQsbiksZi5oYXNQaW5jaGVkPXEsZi5zY2FsZUdyb3VwcyhiLGQpLGYucmVzJiYoZi5yZXM9ITEsdGhpcy5yZXNldCghMSwwKSkpfSx0b3VjaDpmdW5jdGlvbihmLHYpe3ZhciB0PXRoaXMuY2hhcnQsejtpZih0LmluZGV4IT09Yy5ob3ZlckNoYXJ0SW5kZXgpdGhpcy5vbkNvbnRhaW5lck1vdXNlTGVhdmUoe3JlbGF0ZWRUYXJnZXQ6ITB9KTtjLmhvdmVyQ2hhcnRJbmRleD10LmluZGV4O2lmKDE9PT1mLnRvdWNoZXMubGVuZ3RoKWlmKGY9dGhpcy5ub3JtYWxpemUoZiksXG4oej10LmlzSW5zaWRlUGxvdChmLmNoYXJ0WC10LnBsb3RMZWZ0LGYuY2hhcnRZLXQucGxvdFRvcCkpJiYhdC5vcGVuTWVudSl7diYmdGhpcy5ydW5Qb2ludEFjdGlvbnMoZik7aWYoXCJ0b3VjaG1vdmVcIj09PWYudHlwZSl7dj10aGlzLnBpbmNoRG93bjt2YXIgeT12WzBdPzQ8PU1hdGguc3FydChNYXRoLnBvdyh2WzBdLmNoYXJ0WC1mLmNoYXJ0WCwyKStNYXRoLnBvdyh2WzBdLmNoYXJ0WS1mLmNoYXJ0WSwyKSk6ITF9Ryh5LCEwKSYmdGhpcy5waW5jaChmKX1lbHNlIHYmJnRoaXMucmVzZXQoKTtlbHNlIDI9PT1mLnRvdWNoZXMubGVuZ3RoJiZ0aGlzLnBpbmNoKGYpfSxvbkNvbnRhaW5lclRvdWNoU3RhcnQ6ZnVuY3Rpb24oYyl7dGhpcy56b29tT3B0aW9uKGMpO3RoaXMudG91Y2goYywhMCl9LG9uQ29udGFpbmVyVG91Y2hNb3ZlOmZ1bmN0aW9uKGMpe3RoaXMudG91Y2goYyl9LG9uRG9jdW1lbnRUb3VjaEVuZDpmdW5jdGlvbihmKXt6W2MuaG92ZXJDaGFydEluZGV4XSYmeltjLmhvdmVyQ2hhcnRJbmRleF0ucG9pbnRlci5kcm9wKGYpfX0pfSk7XG5NKEksXCJwYXJ0cy9NU1BvaW50ZXIuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmV4dGVuZCxHPWYub2JqZWN0RWFjaCx6PWMuYWRkRXZlbnQsQj1jLmNoYXJ0cyx0PWMuY3NzLHY9Yy5kb2MsQz1jLm5vb3A7Zj1jLlBvaW50ZXI7dmFyIEg9Yy5yZW1vdmVFdmVudCx5PWMud2luLGg9Yy53cmFwO2lmKCFjLmhhc1RvdWNoJiYoeS5Qb2ludGVyRXZlbnR8fHkuTVNQb2ludGVyRXZlbnQpKXt2YXIgbj17fSxxPSEheS5Qb2ludGVyRXZlbnQsZz1mdW5jdGlvbigpe3ZhciBhPVtdO2EuaXRlbT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpc1thXX07RyhuLGZ1bmN0aW9uKGIpe2EucHVzaCh7cGFnZVg6Yi5wYWdlWCxwYWdlWTpiLnBhZ2VZLHRhcmdldDpiLnRhcmdldH0pfSk7cmV0dXJuIGF9LGI9ZnVuY3Rpb24oYSxiLGUsbCl7XCJ0b3VjaFwiIT09YS5wb2ludGVyVHlwZSYmYS5wb2ludGVyVHlwZSE9PWEuTVNQT0lOVEVSX1RZUEVfVE9VQ0h8fFxuIUJbYy5ob3ZlckNoYXJ0SW5kZXhdfHwobChhKSxsPUJbYy5ob3ZlckNoYXJ0SW5kZXhdLnBvaW50ZXIsbFtiXSh7dHlwZTplLHRhcmdldDphLmN1cnJlbnRUYXJnZXQscHJldmVudERlZmF1bHQ6Qyx0b3VjaGVzOmcoKX0pKX07RihmLnByb3RvdHlwZSx7b25Db250YWluZXJQb2ludGVyRG93bjpmdW5jdGlvbihhKXtiKGEsXCJvbkNvbnRhaW5lclRvdWNoU3RhcnRcIixcInRvdWNoc3RhcnRcIixmdW5jdGlvbihhKXtuW2EucG9pbnRlcklkXT17cGFnZVg6YS5wYWdlWCxwYWdlWTphLnBhZ2VZLHRhcmdldDphLmN1cnJlbnRUYXJnZXR9fSl9LG9uQ29udGFpbmVyUG9pbnRlck1vdmU6ZnVuY3Rpb24oYSl7YihhLFwib25Db250YWluZXJUb3VjaE1vdmVcIixcInRvdWNobW92ZVwiLGZ1bmN0aW9uKGEpe25bYS5wb2ludGVySWRdPXtwYWdlWDphLnBhZ2VYLHBhZ2VZOmEucGFnZVl9O25bYS5wb2ludGVySWRdLnRhcmdldHx8KG5bYS5wb2ludGVySWRdLnRhcmdldD1hLmN1cnJlbnRUYXJnZXQpfSl9LG9uRG9jdW1lbnRQb2ludGVyVXA6ZnVuY3Rpb24oYSl7YihhLFxuXCJvbkRvY3VtZW50VG91Y2hFbmRcIixcInRvdWNoZW5kXCIsZnVuY3Rpb24oYSl7ZGVsZXRlIG5bYS5wb2ludGVySWRdfSl9LGJhdGNoTVNFdmVudHM6ZnVuY3Rpb24oYSl7YSh0aGlzLmNoYXJ0LmNvbnRhaW5lcixxP1wicG9pbnRlcmRvd25cIjpcIk1TUG9pbnRlckRvd25cIix0aGlzLm9uQ29udGFpbmVyUG9pbnRlckRvd24pO2EodGhpcy5jaGFydC5jb250YWluZXIscT9cInBvaW50ZXJtb3ZlXCI6XCJNU1BvaW50ZXJNb3ZlXCIsdGhpcy5vbkNvbnRhaW5lclBvaW50ZXJNb3ZlKTthKHYscT9cInBvaW50ZXJ1cFwiOlwiTVNQb2ludGVyVXBcIix0aGlzLm9uRG9jdW1lbnRQb2ludGVyVXApfX0pO2goZi5wcm90b3R5cGUsXCJpbml0XCIsZnVuY3Rpb24oYSxiLGUpe2EuY2FsbCh0aGlzLGIsZSk7dGhpcy5oYXNab29tJiZ0KGIuY29udGFpbmVyLHtcIi1tcy10b3VjaC1hY3Rpb25cIjpcIm5vbmVcIixcInRvdWNoLWFjdGlvblwiOlwibm9uZVwifSl9KTtoKGYucHJvdG90eXBlLFwic2V0RE9NRXZlbnRzXCIsZnVuY3Rpb24oYSl7YS5hcHBseSh0aGlzKTtcbih0aGlzLmhhc1pvb218fHRoaXMuZm9sbG93VG91Y2hNb3ZlKSYmdGhpcy5iYXRjaE1TRXZlbnRzKHopfSk7aChmLnByb3RvdHlwZSxcImRlc3Ryb3lcIixmdW5jdGlvbihhKXt0aGlzLmJhdGNoTVNFdmVudHMoSCk7YS5jYWxsKHRoaXMpfSl9fSk7TShJLFwicGFydHMvTGVnZW5kLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5kZWZpbmVkLEc9Zi5kaXNjYXJkRWxlbWVudCx6PWYuaXNOdW1iZXIsQj1mLnBpY2ssdD1mLnNldEFuaW1hdGlvbix2PWMuYWRkRXZlbnQsQz1jLmNzcyxIPWMuZmlyZUV2ZW50O2Y9Yy5pc0ZpcmVmb3g7dmFyIHk9Yy5tYXJnaW5OYW1lcyxoPWMubWVyZ2Usbj1jLnN0YWJsZVNvcnQscT1jLndpbixnPWMud3JhcDtjLkxlZ2VuZD1mdW5jdGlvbihiLGEpe3RoaXMuaW5pdChiLGEpfTtjLkxlZ2VuZC5wcm90b3R5cGU9e2luaXQ6ZnVuY3Rpb24oYixhKXt0aGlzLmNoYXJ0PWI7dGhpcy5zZXRPcHRpb25zKGEpO1xuYS5lbmFibGVkJiYodGhpcy5yZW5kZXIoKSx2KHRoaXMuY2hhcnQsXCJlbmRSZXNpemVcIixmdW5jdGlvbigpe3RoaXMubGVnZW5kLnBvc2l0aW9uQ2hlY2tib3hlcygpfSksdGhpcy5wcm94aW1hdGU/dGhpcy51bmNoYXJ0cmVuZGVyPXYodGhpcy5jaGFydCxcInJlbmRlclwiLGZ1bmN0aW9uKCl7dGhpcy5sZWdlbmQucHJveGltYXRlUG9zaXRpb25zKCk7dGhpcy5sZWdlbmQucG9zaXRpb25JdGVtcygpfSk6dGhpcy51bmNoYXJ0cmVuZGVyJiZ0aGlzLnVuY2hhcnRyZW5kZXIoKSl9LHNldE9wdGlvbnM6ZnVuY3Rpb24oYil7dmFyIGE9QihiLnBhZGRpbmcsOCk7dGhpcy5vcHRpb25zPWI7dGhpcy5jaGFydC5zdHlsZWRNb2RlfHwodGhpcy5pdGVtU3R5bGU9Yi5pdGVtU3R5bGUsdGhpcy5pdGVtSGlkZGVuU3R5bGU9aCh0aGlzLml0ZW1TdHlsZSxiLml0ZW1IaWRkZW5TdHlsZSkpO3RoaXMuaXRlbU1hcmdpblRvcD1iLml0ZW1NYXJnaW5Ub3B8fDA7dGhpcy5pdGVtTWFyZ2luQm90dG9tPWIuaXRlbU1hcmdpbkJvdHRvbXx8XG4wO3RoaXMucGFkZGluZz1hO3RoaXMuaW5pdGlhbEl0ZW1ZPWEtNTt0aGlzLnN5bWJvbFdpZHRoPUIoYi5zeW1ib2xXaWR0aCwxNik7dGhpcy5wYWdlcz1bXTt0aGlzLnByb3hpbWF0ZT1cInByb3hpbWF0ZVwiPT09Yi5sYXlvdXQmJiF0aGlzLmNoYXJ0LmludmVydGVkfSx1cGRhdGU6ZnVuY3Rpb24oYixhKXt2YXIgZD10aGlzLmNoYXJ0O3RoaXMuc2V0T3B0aW9ucyhoKCEwLHRoaXMub3B0aW9ucyxiKSk7dGhpcy5kZXN0cm95KCk7ZC5pc0RpcnR5TGVnZW5kPWQuaXNEaXJ0eUJveD0hMDtCKGEsITApJiZkLnJlZHJhdygpO0godGhpcyxcImFmdGVyVXBkYXRlXCIpfSxjb2xvcml6ZUl0ZW06ZnVuY3Rpb24oYixhKXtiLmxlZ2VuZEdyb3VwW2E/XCJyZW1vdmVDbGFzc1wiOlwiYWRkQ2xhc3NcIl0oXCJoaWdoY2hhcnRzLWxlZ2VuZC1pdGVtLWhpZGRlblwiKTtpZighdGhpcy5jaGFydC5zdHlsZWRNb2RlKXt2YXIgZD10aGlzLm9wdGlvbnMsZT1iLmxlZ2VuZEl0ZW0sYz1iLmxlZ2VuZExpbmUsZz1iLmxlZ2VuZFN5bWJvbCxcbmg9dGhpcy5pdGVtSGlkZGVuU3R5bGUuY29sb3I7ZD1hP2QuaXRlbVN0eWxlLmNvbG9yOmg7dmFyIGY9YT9iLmNvbG9yfHxoOmgsdT1iLm9wdGlvbnMmJmIub3B0aW9ucy5tYXJrZXIsaz17ZmlsbDpmfTtlJiZlLmNzcyh7ZmlsbDpkLGNvbG9yOmR9KTtjJiZjLmF0dHIoe3N0cm9rZTpmfSk7ZyYmKHUmJmcuaXNNYXJrZXImJihrPWIucG9pbnRBdHRyaWJzKCksYXx8KGsuc3Ryb2tlPWsuZmlsbD1oKSksZy5hdHRyKGspKX1IKHRoaXMsXCJhZnRlckNvbG9yaXplSXRlbVwiLHtpdGVtOmIsdmlzaWJsZTphfSl9LHBvc2l0aW9uSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLmFsbEl0ZW1zLmZvckVhY2godGhpcy5wb3NpdGlvbkl0ZW0sdGhpcyk7dGhpcy5jaGFydC5pc1Jlc2l6aW5nfHx0aGlzLnBvc2l0aW9uQ2hlY2tib3hlcygpfSxwb3NpdGlvbkl0ZW06ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5vcHRpb25zLGQ9YS5zeW1ib2xQYWRkaW5nO2E9IWEucnRsO3ZhciBlPWIuX2xlZ2VuZEl0ZW1Qb3MsXG5jPWVbMF07ZT1lWzFdO3ZhciBnPWIuY2hlY2tib3g7aWYoKGI9Yi5sZWdlbmRHcm91cCkmJmIuZWxlbWVudCliW0YoYi50cmFuc2xhdGVZKT9cImFuaW1hdGVcIjpcImF0dHJcIl0oe3RyYW5zbGF0ZVg6YT9jOnRoaXMubGVnZW5kV2lkdGgtYy0yKmQtNCx0cmFuc2xhdGVZOmV9KTtnJiYoZy54PWMsZy55PWUpfSxkZXN0cm95SXRlbTpmdW5jdGlvbihiKXt2YXIgYT1iLmNoZWNrYm94O1tcImxlZ2VuZEl0ZW1cIixcImxlZ2VuZExpbmVcIixcImxlZ2VuZFN5bWJvbFwiLFwibGVnZW5kR3JvdXBcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtiW2FdJiYoYlthXT1iW2FdLmRlc3Ryb3koKSl9KTthJiZHKGIuY2hlY2tib3gpfSxkZXN0cm95OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihhKXt0aGlzW2FdJiYodGhpc1thXT10aGlzW2FdLmRlc3Ryb3koKSl9dGhpcy5nZXRBbGxJdGVtcygpLmZvckVhY2goZnVuY3Rpb24oYSl7W1wibGVnZW5kSXRlbVwiLFwibGVnZW5kR3JvdXBcIl0uZm9yRWFjaChiLGEpfSk7XCJjbGlwUmVjdCB1cCBkb3duIHBhZ2VyIG5hdiBib3ggdGl0bGUgZ3JvdXBcIi5zcGxpdChcIiBcIikuZm9yRWFjaChiLFxudGhpcyk7dGhpcy5kaXNwbGF5PW51bGx9LHBvc2l0aW9uQ2hlY2tib3hlczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ3JvdXAmJnRoaXMuZ3JvdXAuYWxpZ25BdHRyLGE9dGhpcy5jbGlwSGVpZ2h0fHx0aGlzLmxlZ2VuZEhlaWdodCxkPXRoaXMudGl0bGVIZWlnaHQ7aWYoYil7dmFyIGU9Yi50cmFuc2xhdGVZO3RoaXMuYWxsSXRlbXMuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgZz1jLmNoZWNrYm94O2lmKGcpe3ZhciBsPWUrZCtnLnkrKHRoaXMuc2Nyb2xsT2Zmc2V0fHwwKSszO0MoZyx7bGVmdDpiLnRyYW5zbGF0ZVgrYy5jaGVja2JveE9mZnNldCtnLngtMjArXCJweFwiLHRvcDpsK1wicHhcIixkaXNwbGF5OnRoaXMucHJveGltYXRlfHxsPmUtNiYmbDxlK2EtNj9cIlwiOlwibm9uZVwifSl9fSx0aGlzKX19LHJlbmRlclRpdGxlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5vcHRpb25zLGE9dGhpcy5wYWRkaW5nLGQ9Yi50aXRsZSxlPTA7ZC50ZXh0JiYodGhpcy50aXRsZXx8KHRoaXMudGl0bGU9dGhpcy5jaGFydC5yZW5kZXJlci5sYWJlbChkLnRleHQsXG5hLTMsYS00LG51bGwsbnVsbCxudWxsLGIudXNlSFRNTCxudWxsLFwibGVnZW5kLXRpdGxlXCIpLmF0dHIoe3pJbmRleDoxfSksdGhpcy5jaGFydC5zdHlsZWRNb2RlfHx0aGlzLnRpdGxlLmNzcyhkLnN0eWxlKSx0aGlzLnRpdGxlLmFkZCh0aGlzLmdyb3VwKSksZC53aWR0aHx8dGhpcy50aXRsZS5jc3Moe3dpZHRoOnRoaXMubWF4TGVnZW5kV2lkdGgrXCJweFwifSksYj10aGlzLnRpdGxlLmdldEJCb3goKSxlPWIuaGVpZ2h0LHRoaXMub2Zmc2V0V2lkdGg9Yi53aWR0aCx0aGlzLmNvbnRlbnRHcm91cC5hdHRyKHt0cmFuc2xhdGVZOmV9KSk7dGhpcy50aXRsZUhlaWdodD1lfSxzZXRUZXh0OmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMub3B0aW9ucztiLmxlZ2VuZEl0ZW0uYXR0cih7dGV4dDphLmxhYmVsRm9ybWF0P2MuZm9ybWF0KGEubGFiZWxGb3JtYXQsYix0aGlzLmNoYXJ0LnRpbWUpOmEubGFiZWxGb3JtYXR0ZXIuY2FsbChiKX0pfSxyZW5kZXJJdGVtOmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMuY2hhcnQsXG5kPWEucmVuZGVyZXIsZT10aGlzLm9wdGlvbnMsYz10aGlzLnN5bWJvbFdpZHRoLGc9ZS5zeW1ib2xQYWRkaW5nLGY9dGhpcy5pdGVtU3R5bGUscD10aGlzLml0ZW1IaWRkZW5TdHlsZSx1PVwiaG9yaXpvbnRhbFwiPT09ZS5sYXlvdXQ/QihlLml0ZW1EaXN0YW5jZSwyMCk6MCxrPSFlLnJ0bCxyPWIubGVnZW5kSXRlbSx4PSFiLnNlcmllcyxBPSF4JiZiLnNlcmllcy5kcmF3TGVnZW5kU3ltYm9sP2Iuc2VyaWVzOmIsdz1BLm9wdGlvbnM7dz10aGlzLmNyZWF0ZUNoZWNrYm94Rm9ySXRlbSYmdyYmdy5zaG93Q2hlY2tib3g7dT1jK2crdSsodz8yMDowKTt2YXIgbT1lLnVzZUhUTUwsbj1iLm9wdGlvbnMuY2xhc3NOYW1lO3J8fChiLmxlZ2VuZEdyb3VwPWQuZyhcImxlZ2VuZC1pdGVtXCIpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1cIitBLnR5cGUrXCItc2VyaWVzIGhpZ2hjaGFydHMtY29sb3ItXCIrYi5jb2xvckluZGV4KyhuP1wiIFwiK246XCJcIikrKHg/XCIgaGlnaGNoYXJ0cy1zZXJpZXMtXCIrYi5pbmRleDpcblwiXCIpKS5hdHRyKHt6SW5kZXg6MX0pLmFkZCh0aGlzLnNjcm9sbEdyb3VwKSxiLmxlZ2VuZEl0ZW09cj1kLnRleHQoXCJcIixrP2MrZzotZyx0aGlzLmJhc2VsaW5lfHwwLG0pLGEuc3R5bGVkTW9kZXx8ci5jc3MoaChiLnZpc2libGU/ZjpwKSksci5hdHRyKHthbGlnbjprP1wibGVmdFwiOlwicmlnaHRcIix6SW5kZXg6Mn0pLmFkZChiLmxlZ2VuZEdyb3VwKSx0aGlzLmJhc2VsaW5lfHwodGhpcy5mb250TWV0cmljcz1kLmZvbnRNZXRyaWNzKGEuc3R5bGVkTW9kZT8xMjpmLmZvbnRTaXplLHIpLHRoaXMuYmFzZWxpbmU9dGhpcy5mb250TWV0cmljcy5mKzMrdGhpcy5pdGVtTWFyZ2luVG9wLHIuYXR0cihcInlcIix0aGlzLmJhc2VsaW5lKSksdGhpcy5zeW1ib2xIZWlnaHQ9ZS5zeW1ib2xIZWlnaHR8fHRoaXMuZm9udE1ldHJpY3MuZixBLmRyYXdMZWdlbmRTeW1ib2wodGhpcyxiKSx0aGlzLnNldEl0ZW1FdmVudHMmJnRoaXMuc2V0SXRlbUV2ZW50cyhiLHIsbSkpO3cmJiFiLmNoZWNrYm94JiZ0aGlzLmNyZWF0ZUNoZWNrYm94Rm9ySXRlbShiKTtcbnRoaXMuY29sb3JpemVJdGVtKGIsYi52aXNpYmxlKTshYS5zdHlsZWRNb2RlJiZmLndpZHRofHxyLmNzcyh7d2lkdGg6KGUuaXRlbVdpZHRofHx0aGlzLndpZHRoT3B0aW9ufHxhLnNwYWNpbmdCb3gud2lkdGgpLXV9KTt0aGlzLnNldFRleHQoYik7YT1yLmdldEJCb3goKTtiLml0ZW1XaWR0aD1iLmNoZWNrYm94T2Zmc2V0PWUuaXRlbVdpZHRofHxiLmxlZ2VuZEl0ZW1XaWR0aHx8YS53aWR0aCt1O3RoaXMubWF4SXRlbVdpZHRoPU1hdGgubWF4KHRoaXMubWF4SXRlbVdpZHRoLGIuaXRlbVdpZHRoKTt0aGlzLnRvdGFsSXRlbVdpZHRoKz1iLml0ZW1XaWR0aDt0aGlzLml0ZW1IZWlnaHQ9Yi5pdGVtSGVpZ2h0PU1hdGgucm91bmQoYi5sZWdlbmRJdGVtSGVpZ2h0fHxhLmhlaWdodHx8dGhpcy5zeW1ib2xIZWlnaHQpfSxsYXlvdXRJdGVtOmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMub3B0aW9ucyxkPXRoaXMucGFkZGluZyxlPVwiaG9yaXpvbnRhbFwiPT09YS5sYXlvdXQsYz1iLml0ZW1IZWlnaHQsXG5nPXRoaXMuaXRlbU1hcmdpbkJvdHRvbSxoPXRoaXMuaXRlbU1hcmdpblRvcCxmPWU/QihhLml0ZW1EaXN0YW5jZSwyMCk6MCx1PXRoaXMubWF4TGVnZW5kV2lkdGg7YT1hLmFsaWduQ29sdW1ucyYmdGhpcy50b3RhbEl0ZW1XaWR0aD51P3RoaXMubWF4SXRlbVdpZHRoOmIuaXRlbVdpZHRoO2UmJnRoaXMuaXRlbVgtZCthPnUmJih0aGlzLml0ZW1YPWQsdGhpcy5sYXN0TGluZUhlaWdodCYmKHRoaXMuaXRlbVkrPWgrdGhpcy5sYXN0TGluZUhlaWdodCtnKSx0aGlzLmxhc3RMaW5lSGVpZ2h0PTApO3RoaXMubGFzdEl0ZW1ZPWgrdGhpcy5pdGVtWStnO3RoaXMubGFzdExpbmVIZWlnaHQ9TWF0aC5tYXgoYyx0aGlzLmxhc3RMaW5lSGVpZ2h0KTtiLl9sZWdlbmRJdGVtUG9zPVt0aGlzLml0ZW1YLHRoaXMuaXRlbVldO2U/dGhpcy5pdGVtWCs9YToodGhpcy5pdGVtWSs9aCtjK2csdGhpcy5sYXN0TGluZUhlaWdodD1jKTt0aGlzLm9mZnNldFdpZHRoPXRoaXMud2lkdGhPcHRpb258fE1hdGgubWF4KChlP1xudGhpcy5pdGVtWC1kLShiLmNoZWNrYm94PzA6Zik6YSkrZCx0aGlzLm9mZnNldFdpZHRoKX0sZ2V0QWxsSXRlbXM6ZnVuY3Rpb24oKXt2YXIgYj1bXTt0aGlzLmNoYXJ0LnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBkPWEmJmEub3B0aW9uczthJiZCKGQuc2hvd0luTGVnZW5kLEYoZC5saW5rZWRUbyk/ITE6dm9pZCAwLCEwKSYmKGI9Yi5jb25jYXQoYS5sZWdlbmRJdGVtc3x8KFwicG9pbnRcIj09PWQubGVnZW5kVHlwZT9hLmRhdGE6YSkpKX0pO0godGhpcyxcImFmdGVyR2V0QWxsSXRlbXNcIix7YWxsSXRlbXM6Yn0pO3JldHVybiBifSxnZXRBbGlnbm1lbnQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMucHJveGltYXRlP2IuYWxpZ24uY2hhckF0KDApK1widHZcIjpiLmZsb2F0aW5nP1wiXCI6Yi5hbGlnbi5jaGFyQXQoMCkrYi52ZXJ0aWNhbEFsaWduLmNoYXJBdCgwKStiLmxheW91dC5jaGFyQXQoMCl9LGFkanVzdE1hcmdpbnM6ZnVuY3Rpb24oYixhKXt2YXIgZD1cbnRoaXMuY2hhcnQsZT10aGlzLm9wdGlvbnMsYz10aGlzLmdldEFsaWdubWVudCgpO2MmJlsvKGx0aHxjdHxydGgpLywvKHJ0dnxybXxyYnYpLywvKHJiaHxjYnxsYmgpLywvKGxidnxsbXxsdHYpL10uZm9yRWFjaChmdW5jdGlvbihnLGwpe2cudGVzdChjKSYmIUYoYltsXSkmJihkW3lbbF1dPU1hdGgubWF4KGRbeVtsXV0sZC5sZWdlbmRbKGwrMSklMj9cImxlZ2VuZEhlaWdodFwiOlwibGVnZW5kV2lkdGhcIl0rWzEsLTEsLTEsMV1bbF0qZVtsJTI/XCJ4XCI6XCJ5XCJdK0IoZS5tYXJnaW4sMTIpK2FbbF0rKGQudGl0bGVPZmZzZXRbbF18fDApKSl9KX0scHJveGltYXRlUG9zaXRpb25zOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5jaGFydCxhPVtdLGQ9XCJsZWZ0XCI9PT10aGlzLm9wdGlvbnMuYWxpZ247dGhpcy5hbGxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBnPWQ7aWYoZS55QXhpcyYmZS5wb2ludHMpe2UueEF4aXMub3B0aW9ucy5yZXZlcnNlZCYmKGc9IWcpO3ZhciBoPWMuZmluZChnP2UucG9pbnRzOlxuZS5wb2ludHMuc2xpY2UoMCkucmV2ZXJzZSgpLGZ1bmN0aW9uKGEpe3JldHVybiB6KGEucGxvdFkpfSk7Zz10aGlzLml0ZW1NYXJnaW5Ub3ArZS5sZWdlbmRJdGVtLmdldEJCb3goKS5oZWlnaHQrdGhpcy5pdGVtTWFyZ2luQm90dG9tO3ZhciBmPWUueUF4aXMudG9wLWIucGxvdFRvcDtlLnZpc2libGU/KGg9aD9oLnBsb3RZOmUueUF4aXMuaGVpZ2h0LGgrPWYtLjMqZyk6aD1mK2UueUF4aXMuaGVpZ2h0O2EucHVzaCh7dGFyZ2V0Omgsc2l6ZTpnLGl0ZW06ZX0pfX0sdGhpcyk7Yy5kaXN0cmlidXRlKGEsYi5wbG90SGVpZ2h0KTthLmZvckVhY2goZnVuY3Rpb24oYSl7YS5pdGVtLl9sZWdlbmRJdGVtUG9zWzFdPWIucGxvdFRvcC1iLnNwYWNpbmdbMF0rYS5wb3N9KX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5jaGFydCxhPWIucmVuZGVyZXIsZD10aGlzLmdyb3VwLGUsZz10aGlzLmJveCxmPXRoaXMub3B0aW9ucyxxPXRoaXMucGFkZGluZzt0aGlzLml0ZW1YPXE7dGhpcy5pdGVtWT1cbnRoaXMuaW5pdGlhbEl0ZW1ZO3RoaXMubGFzdEl0ZW1ZPXRoaXMub2Zmc2V0V2lkdGg9MDt0aGlzLndpZHRoT3B0aW9uPWMucmVsYXRpdmVMZW5ndGgoZi53aWR0aCxiLnNwYWNpbmdCb3gud2lkdGgtcSk7dmFyIHA9Yi5zcGFjaW5nQm94LndpZHRoLTIqcS1mLng7LTE8W1wicm1cIixcImxtXCJdLmluZGV4T2YodGhpcy5nZXRBbGlnbm1lbnQoKS5zdWJzdHJpbmcoMCwyKSkmJihwLz0yKTt0aGlzLm1heExlZ2VuZFdpZHRoPXRoaXMud2lkdGhPcHRpb258fHA7ZHx8KHRoaXMuZ3JvdXA9ZD1hLmcoXCJsZWdlbmRcIikuYXR0cih7ekluZGV4Ojd9KS5hZGQoKSx0aGlzLmNvbnRlbnRHcm91cD1hLmcoKS5hdHRyKHt6SW5kZXg6MX0pLmFkZChkKSx0aGlzLnNjcm9sbEdyb3VwPWEuZygpLmFkZCh0aGlzLmNvbnRlbnRHcm91cCkpO3RoaXMucmVuZGVyVGl0bGUoKTtwPXRoaXMuZ2V0QWxsSXRlbXMoKTtuKHAsZnVuY3Rpb24oYSxiKXtyZXR1cm4oYS5vcHRpb25zJiZhLm9wdGlvbnMubGVnZW5kSW5kZXh8fFxuMCktKGIub3B0aW9ucyYmYi5vcHRpb25zLmxlZ2VuZEluZGV4fHwwKX0pO2YucmV2ZXJzZWQmJnAucmV2ZXJzZSgpO3RoaXMuYWxsSXRlbXM9cDt0aGlzLmRpc3BsYXk9ZT0hIXAubGVuZ3RoO3RoaXMuaXRlbUhlaWdodD10aGlzLnRvdGFsSXRlbVdpZHRoPXRoaXMubWF4SXRlbVdpZHRoPXRoaXMubGFzdExpbmVIZWlnaHQ9MDtwLmZvckVhY2godGhpcy5yZW5kZXJJdGVtLHRoaXMpO3AuZm9yRWFjaCh0aGlzLmxheW91dEl0ZW0sdGhpcyk7cD0odGhpcy53aWR0aE9wdGlvbnx8dGhpcy5vZmZzZXRXaWR0aCkrcTt2YXIgdT10aGlzLmxhc3RJdGVtWSt0aGlzLmxhc3RMaW5lSGVpZ2h0K3RoaXMudGl0bGVIZWlnaHQ7dT10aGlzLmhhbmRsZU92ZXJmbG93KHUpO3UrPXE7Z3x8KHRoaXMuYm94PWc9YS5yZWN0KCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWxlZ2VuZC1ib3hcIikuYXR0cih7cjpmLmJvcmRlclJhZGl1c30pLmFkZChkKSxnLmlzTmV3PSEwKTtiLnN0eWxlZE1vZGV8fGcuYXR0cih7c3Ryb2tlOmYuYm9yZGVyQ29sb3IsXG5cInN0cm9rZS13aWR0aFwiOmYuYm9yZGVyV2lkdGh8fDAsZmlsbDpmLmJhY2tncm91bmRDb2xvcnx8XCJub25lXCJ9KS5zaGFkb3coZi5zaGFkb3cpOzA8cCYmMDx1JiYoZ1tnLmlzTmV3P1wiYXR0clwiOlwiYW5pbWF0ZVwiXShnLmNyaXNwLmNhbGwoe30se3g6MCx5OjAsd2lkdGg6cCxoZWlnaHQ6dX0sZy5zdHJva2VXaWR0aCgpKSksZy5pc05ldz0hMSk7Z1tlP1wic2hvd1wiOlwiaGlkZVwiXSgpO2Iuc3R5bGVkTW9kZSYmXCJub25lXCI9PT1kLmdldFN0eWxlKFwiZGlzcGxheVwiKSYmKHA9dT0wKTt0aGlzLmxlZ2VuZFdpZHRoPXA7dGhpcy5sZWdlbmRIZWlnaHQ9dTtlJiYoYT1iLnNwYWNpbmdCb3gsZz1hLnksLyhsdGh8Y3R8cnRoKS8udGVzdCh0aGlzLmdldEFsaWdubWVudCgpKSYmMDxiLnRpdGxlT2Zmc2V0WzBdP2crPWIudGl0bGVPZmZzZXRbMF06LyhsYmh8Y2J8cmJoKS8udGVzdCh0aGlzLmdldEFsaWdubWVudCgpKSYmMDxiLnRpdGxlT2Zmc2V0WzJdJiYoZy09Yi50aXRsZU9mZnNldFsyXSksZyE9PVxuYS55JiYoYT1oKGEse3k6Z30pKSxkLmFsaWduKGgoZix7d2lkdGg6cCxoZWlnaHQ6dSx2ZXJ0aWNhbEFsaWduOnRoaXMucHJveGltYXRlP1widG9wXCI6Zi52ZXJ0aWNhbEFsaWdufSksITAsYSkpO3RoaXMucHJveGltYXRlfHx0aGlzLnBvc2l0aW9uSXRlbXMoKTtIKHRoaXMsXCJhZnRlclJlbmRlclwiKX0saGFuZGxlT3ZlcmZsb3c6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcyxkPXRoaXMuY2hhcnQsZT1kLnJlbmRlcmVyLGM9dGhpcy5vcHRpb25zLGc9Yy55LGg9dGhpcy5wYWRkaW5nO2c9ZC5zcGFjaW5nQm94LmhlaWdodCsoXCJ0b3BcIj09PWMudmVydGljYWxBbGlnbj8tZzpnKS1oO3ZhciBmPWMubWF4SGVpZ2h0LHUsaz10aGlzLmNsaXBSZWN0LHI9Yy5uYXZpZ2F0aW9uLHg9QihyLmFuaW1hdGlvbiwhMCksQT1yLmFycm93U2l6ZXx8MTIsdz10aGlzLm5hdixtPXRoaXMucGFnZXMsbixKPXRoaXMuYWxsSXRlbXMscT1mdW5jdGlvbihiKXtcIm51bWJlclwiPT09dHlwZW9mIGI/ay5hdHRyKHtoZWlnaHQ6Yn0pOlxuayYmKGEuY2xpcFJlY3Q9ay5kZXN0cm95KCksYS5jb250ZW50R3JvdXAuY2xpcCgpKTthLmNvbnRlbnRHcm91cC5kaXYmJihhLmNvbnRlbnRHcm91cC5kaXYuc3R5bGUuY2xpcD1iP1wicmVjdChcIitoK1wicHgsOTk5OXB4LFwiKyhoK2IpK1wicHgsMClcIjpcImF1dG9cIil9LHY9ZnVuY3Rpb24oYil7YVtiXT1lLmNpcmNsZSgwLDAsMS4zKkEpLnRyYW5zbGF0ZShBLzIsQS8yKS5hZGQodyk7ZC5zdHlsZWRNb2RlfHxhW2JdLmF0dHIoXCJmaWxsXCIsXCJyZ2JhKDAsMCwwLDAuMDAwMSlcIik7cmV0dXJuIGFbYl19O1wiaG9yaXpvbnRhbFwiIT09Yy5sYXlvdXR8fFwibWlkZGxlXCI9PT1jLnZlcnRpY2FsQWxpZ258fGMuZmxvYXRpbmd8fChnLz0yKTtmJiYoZz1NYXRoLm1pbihnLGYpKTttLmxlbmd0aD0wO2I+ZyYmITEhPT1yLmVuYWJsZWQ/KHRoaXMuY2xpcEhlaWdodD11PU1hdGgubWF4KGctMjAtdGhpcy50aXRsZUhlaWdodC1oLDApLHRoaXMuY3VycmVudFBhZ2U9Qih0aGlzLmN1cnJlbnRQYWdlLDEpLHRoaXMuZnVsbEhlaWdodD1cbmIsSi5mb3JFYWNoKGZ1bmN0aW9uKGEsYil7dmFyIGQ9YS5fbGVnZW5kSXRlbVBvc1sxXSxlPU1hdGgucm91bmQoYS5sZWdlbmRJdGVtLmdldEJCb3goKS5oZWlnaHQpLGM9bS5sZW5ndGg7aWYoIWN8fGQtbVtjLTFdPnUmJihufHxkKSE9PW1bYy0xXSltLnB1c2gobnx8ZCksYysrO2EucGFnZUl4PWMtMTtuJiYoSltiLTFdLnBhZ2VJeD1jLTEpO2I9PT1KLmxlbmd0aC0xJiZkK2UtbVtjLTFdPnUmJmQhPT1uJiYobS5wdXNoKGQpLGEucGFnZUl4PWMpO2QhPT1uJiYobj1kKX0pLGt8fChrPWEuY2xpcFJlY3Q9ZS5jbGlwUmVjdCgwLGgsOTk5OSwwKSxhLmNvbnRlbnRHcm91cC5jbGlwKGspKSxxKHUpLHd8fCh0aGlzLm5hdj13PWUuZygpLmF0dHIoe3pJbmRleDoxfSkuYWRkKHRoaXMuZ3JvdXApLHRoaXMudXA9ZS5zeW1ib2woXCJ0cmlhbmdsZVwiLDAsMCxBLEEpLmFkZCh3KSx2KFwidXBUcmFja2VyXCIpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe2Euc2Nyb2xsKC0xLHgpfSksdGhpcy5wYWdlcj1cbmUudGV4dChcIlwiLDE1LDEwKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtbGVnZW5kLW5hdmlnYXRpb25cIiksZC5zdHlsZWRNb2RlfHx0aGlzLnBhZ2VyLmNzcyhyLnN0eWxlKSx0aGlzLnBhZ2VyLmFkZCh3KSx0aGlzLmRvd249ZS5zeW1ib2woXCJ0cmlhbmdsZS1kb3duXCIsMCwwLEEsQSkuYWRkKHcpLHYoXCJkb3duVHJhY2tlclwiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXthLnNjcm9sbCgxLHgpfSkpLGEuc2Nyb2xsKDApLGI9Zyk6dyYmKHEoKSx0aGlzLm5hdj13LmRlc3Ryb3koKSx0aGlzLnNjcm9sbEdyb3VwLmF0dHIoe3RyYW5zbGF0ZVk6MX0pLHRoaXMuY2xpcEhlaWdodD0wKTtyZXR1cm4gYn0sc2Nyb2xsOmZ1bmN0aW9uKGIsYSl7dmFyIGQ9dGhpcy5wYWdlcyxlPWQubGVuZ3RoLGM9dGhpcy5jdXJyZW50UGFnZStiO2I9dGhpcy5jbGlwSGVpZ2h0O3ZhciBnPXRoaXMub3B0aW9ucy5uYXZpZ2F0aW9uLGg9dGhpcy5wYWdlcixmPXRoaXMucGFkZGluZztjPmUmJihjPWUpOzA8YyYmKHZvaWQgMCE9PVxuYSYmdChhLHRoaXMuY2hhcnQpLHRoaXMubmF2LmF0dHIoe3RyYW5zbGF0ZVg6Zix0cmFuc2xhdGVZOmIrdGhpcy5wYWRkaW5nKzcrdGhpcy50aXRsZUhlaWdodCx2aXNpYmlsaXR5OlwidmlzaWJsZVwifSksW3RoaXMudXAsdGhpcy51cFRyYWNrZXJdLmZvckVhY2goZnVuY3Rpb24oYSl7YS5hdHRyKHtcImNsYXNzXCI6MT09PWM/XCJoaWdoY2hhcnRzLWxlZ2VuZC1uYXYtaW5hY3RpdmVcIjpcImhpZ2hjaGFydHMtbGVnZW5kLW5hdi1hY3RpdmVcIn0pfSksaC5hdHRyKHt0ZXh0OmMrXCIvXCIrZX0pLFt0aGlzLmRvd24sdGhpcy5kb3duVHJhY2tlcl0uZm9yRWFjaChmdW5jdGlvbihhKXthLmF0dHIoe3g6MTgrdGhpcy5wYWdlci5nZXRCQm94KCkud2lkdGgsXCJjbGFzc1wiOmM9PT1lP1wiaGlnaGNoYXJ0cy1sZWdlbmQtbmF2LWluYWN0aXZlXCI6XCJoaWdoY2hhcnRzLWxlZ2VuZC1uYXYtYWN0aXZlXCJ9KX0sdGhpcyksdGhpcy5jaGFydC5zdHlsZWRNb2RlfHwodGhpcy51cC5hdHRyKHtmaWxsOjE9PT1jP2cuaW5hY3RpdmVDb2xvcjpcbmcuYWN0aXZlQ29sb3J9KSx0aGlzLnVwVHJhY2tlci5jc3Moe2N1cnNvcjoxPT09Yz9cImRlZmF1bHRcIjpcInBvaW50ZXJcIn0pLHRoaXMuZG93bi5hdHRyKHtmaWxsOmM9PT1lP2cuaW5hY3RpdmVDb2xvcjpnLmFjdGl2ZUNvbG9yfSksdGhpcy5kb3duVHJhY2tlci5jc3Moe2N1cnNvcjpjPT09ZT9cImRlZmF1bHRcIjpcInBvaW50ZXJcIn0pKSx0aGlzLnNjcm9sbE9mZnNldD0tZFtjLTFdK3RoaXMuaW5pdGlhbEl0ZW1ZLHRoaXMuc2Nyb2xsR3JvdXAuYW5pbWF0ZSh7dHJhbnNsYXRlWTp0aGlzLnNjcm9sbE9mZnNldH0pLHRoaXMuY3VycmVudFBhZ2U9Yyx0aGlzLnBvc2l0aW9uQ2hlY2tib3hlcygpKX19O2MuTGVnZW5kU3ltYm9sTWl4aW49e2RyYXdSZWN0YW5nbGU6ZnVuY3Rpb24oYixhKXt2YXIgZD1iLnN5bWJvbEhlaWdodCxlPWIub3B0aW9ucy5zcXVhcmVTeW1ib2w7YS5sZWdlbmRTeW1ib2w9dGhpcy5jaGFydC5yZW5kZXJlci5yZWN0KGU/KGIuc3ltYm9sV2lkdGgtZCkvMjowLGIuYmFzZWxpbmUtXG5kKzEsZT9kOmIuc3ltYm9sV2lkdGgsZCxCKGIub3B0aW9ucy5zeW1ib2xSYWRpdXMsZC8yKSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXBvaW50XCIpLmF0dHIoe3pJbmRleDozfSkuYWRkKGEubGVnZW5kR3JvdXApfSxkcmF3TGluZU1hcmtlcjpmdW5jdGlvbihiKXt2YXIgYT10aGlzLm9wdGlvbnMsZD1hLm1hcmtlcixlPWIuc3ltYm9sV2lkdGgsYz1iLnN5bWJvbEhlaWdodCxnPWMvMixmPXRoaXMuY2hhcnQucmVuZGVyZXIscD10aGlzLmxlZ2VuZEdyb3VwO2I9Yi5iYXNlbGluZS1NYXRoLnJvdW5kKC4zKmIuZm9udE1ldHJpY3MuYik7dmFyIHU9e307dGhpcy5jaGFydC5zdHlsZWRNb2RlfHwodT17XCJzdHJva2Utd2lkdGhcIjphLmxpbmVXaWR0aHx8MH0sYS5kYXNoU3R5bGUmJih1LmRhc2hzdHlsZT1hLmRhc2hTdHlsZSkpO3RoaXMubGVnZW5kTGluZT1mLnBhdGgoW1wiTVwiLDAsYixcIkxcIixlLGJdKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtZ3JhcGhcIikuYXR0cih1KS5hZGQocCk7ZCYmITEhPT1cbmQuZW5hYmxlZCYmZSYmKGE9TWF0aC5taW4oQihkLnJhZGl1cyxnKSxnKSwwPT09dGhpcy5zeW1ib2wuaW5kZXhPZihcInVybFwiKSYmKGQ9aChkLHt3aWR0aDpjLGhlaWdodDpjfSksYT0wKSx0aGlzLmxlZ2VuZFN5bWJvbD1kPWYuc3ltYm9sKHRoaXMuc3ltYm9sLGUvMi1hLGItYSwyKmEsMiphLGQpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1wb2ludFwiKS5hZGQocCksZC5pc01hcmtlcj0hMCl9fTsoL1RyaWRlbnRcXC83XFwuMC8udGVzdChxLm5hdmlnYXRvciYmcS5uYXZpZ2F0b3IudXNlckFnZW50KXx8ZikmJmcoYy5MZWdlbmQucHJvdG90eXBlLFwicG9zaXRpb25JdGVtXCIsZnVuY3Rpb24oYixhKXt2YXIgZD10aGlzLGU9ZnVuY3Rpb24oKXthLl9sZWdlbmRJdGVtUG9zJiZiLmNhbGwoZCxhKX07ZSgpO2QuYnViYmxlTGVnZW5kfHxzZXRUaW1lb3V0KGUpfSl9KTtNKEksXCJwYXJ0cy9DaGFydC5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLFxuZil7dmFyIEY9Zi5hdHRyLEc9Zi5kZWZpbmVkLHo9Zi5kaXNjYXJkRWxlbWVudCxCPWYuZXJhc2UsdD1mLmV4dGVuZCx2PWYuaXNBcnJheSxDPWYuaXNOdW1iZXIsSD1mLmlzT2JqZWN0LHk9Zi5pc1N0cmluZyxoPWYub2JqZWN0RWFjaCxuPWYucGljayxxPWYucEludCxnPWYuc2V0QW5pbWF0aW9uLGI9Zi5zcGxhdCxhPWYuc3luY1RpbWVvdXQsZD1jLmFkZEV2ZW50LGU9Yy5hbmltYXRlLGw9Yy5hbmltT2JqZWN0LEw9Yy5kb2MsRT1jLkF4aXMscD1jLmNyZWF0ZUVsZW1lbnQsdT1jLmRlZmF1bHRPcHRpb25zLGs9Yy5jaGFydHMscj1jLmNzcyx4PWMuZmluZCxBPWMuZmlyZUV2ZW50LHc9Yy5MZWdlbmQsbT1jLm1hcmdpbk5hbWVzLEs9Yy5tZXJnZSxKPWMuUG9pbnRlcixVPWMucmVtb3ZlRXZlbnQsUz1jLnNlcmllc1R5cGVzLFE9Yy53aW4sTz1jLkNoYXJ0PWZ1bmN0aW9uKCl7dGhpcy5nZXRBcmdzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Yy5jaGFydD1mdW5jdGlvbihhLGIsZCl7cmV0dXJuIG5ldyBPKGEsXG5iLGQpfTt0KE8ucHJvdG90eXBlLHtjYWxsYmFja3M6W10sZ2V0QXJnczpmdW5jdGlvbigpe3ZhciBhPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtpZih5KGFbMF0pfHxhWzBdLm5vZGVOYW1lKXRoaXMucmVuZGVyVG89YS5zaGlmdCgpO3RoaXMuaW5pdChhWzBdLGFbMV0pfSxpbml0OmZ1bmN0aW9uKGEsYil7dmFyIGUsZz1hLnNlcmllcyxtPWEucGxvdE9wdGlvbnN8fHt9O0EodGhpcyxcImluaXRcIix7YXJnczphcmd1bWVudHN9LGZ1bmN0aW9uKCl7YS5zZXJpZXM9bnVsbDtlPUsodSxhKTtoKGUucGxvdE9wdGlvbnMsZnVuY3Rpb24oYSxiKXtIKGEpJiYoYS50b29sdGlwPW1bYl0mJksobVtiXS50b29sdGlwKXx8dm9pZCAwKX0pO2UudG9vbHRpcC51c2VyT3B0aW9ucz1hLmNoYXJ0JiZhLmNoYXJ0LmZvckV4cG9ydCYmYS50b29sdGlwLnVzZXJPcHRpb25zfHxhLnRvb2x0aXA7ZS5zZXJpZXM9YS5zZXJpZXM9Zzt0aGlzLnVzZXJPcHRpb25zPWE7dmFyIHI9ZS5jaGFydCxsPXIuZXZlbnRzO1xudGhpcy5tYXJnaW49W107dGhpcy5zcGFjaW5nPVtdO3RoaXMuYm91bmRzPXtoOnt9LHY6e319O3RoaXMubGFiZWxDb2xsZWN0b3JzPVtdO3RoaXMuY2FsbGJhY2s9Yjt0aGlzLmlzUmVzaXppbmc9MDt0aGlzLm9wdGlvbnM9ZTt0aGlzLmF4ZXM9W107dGhpcy5zZXJpZXM9W107dGhpcy50aW1lPWEudGltZSYmT2JqZWN0LmtleXMoYS50aW1lKS5sZW5ndGg/bmV3IGMuVGltZShhLnRpbWUpOmMudGltZTt0aGlzLnN0eWxlZE1vZGU9ci5zdHlsZWRNb2RlO3RoaXMuaGFzQ2FydGVzaWFuU2VyaWVzPXIuc2hvd0F4ZXM7dmFyIGY9dGhpcztmLmluZGV4PWsubGVuZ3RoO2sucHVzaChmKTtjLmNoYXJ0Q291bnQrKztsJiZoKGwsZnVuY3Rpb24oYSxiKXtjLmlzRnVuY3Rpb24oYSkmJmQoZixiLGEpfSk7Zi54QXhpcz1bXTtmLnlBeGlzPVtdO2YucG9pbnRDb3VudD1mLmNvbG9yQ291bnRlcj1mLnN5bWJvbENvdW50ZXI9MDtBKGYsXCJhZnRlckluaXRcIik7Zi5maXJzdFJlbmRlcigpfSl9LGluaXRTZXJpZXM6ZnVuY3Rpb24oYSl7dmFyIGI9XG50aGlzLm9wdGlvbnMuY2hhcnQ7Yj1hLnR5cGV8fGIudHlwZXx8Yi5kZWZhdWx0U2VyaWVzVHlwZTt2YXIgZD1TW2JdO2R8fGMuZXJyb3IoMTcsITAsdGhpcyx7bWlzc2luZ01vZHVsZUZvcjpifSk7Yj1uZXcgZDtiLmluaXQodGhpcyxhKTtyZXR1cm4gYn0sb3JkZXJTZXJpZXM6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zZXJpZXM7Zm9yKGE9YXx8MDthPGIubGVuZ3RoO2ErKyliW2FdJiYoYlthXS5pbmRleD1hLGJbYV0ubmFtZT1iW2FdLmdldE5hbWUoKSl9LGlzSW5zaWRlUGxvdDpmdW5jdGlvbihhLGIsZCl7dmFyIGU9ZD9iOmE7YT1kP2E6YjtyZXR1cm4gMDw9ZSYmZTw9dGhpcy5wbG90V2lkdGgmJjA8PWEmJmE8PXRoaXMucGxvdEhlaWdodH0scmVkcmF3OmZ1bmN0aW9uKGEpe0EodGhpcyxcImJlZm9yZVJlZHJhd1wiKTt2YXIgYj10aGlzLmF4ZXMsZD10aGlzLnNlcmllcyxlPXRoaXMucG9pbnRlcixjPXRoaXMubGVnZW5kLGs9dGhpcy51c2VyT3B0aW9ucy5sZWdlbmQsbT10aGlzLmlzRGlydHlMZWdlbmQsXG5yPXRoaXMuaGFzQ2FydGVzaWFuU2VyaWVzLGg9dGhpcy5pc0RpcnR5Qm94LGw9dGhpcy5yZW5kZXJlcixmPWwuaXNIaWRkZW4oKSx4PVtdO3RoaXMuc2V0UmVzcG9uc2l2ZSYmdGhpcy5zZXRSZXNwb25zaXZlKCExKTtnKGEsdGhpcyk7ZiYmdGhpcy50ZW1wb3JhcnlEaXNwbGF5KCk7dGhpcy5sYXlPdXRUaXRsZXMoKTtmb3IoYT1kLmxlbmd0aDthLS07KXt2YXIgdz1kW2FdO2lmKHcub3B0aW9ucy5zdGFja2luZyl7dmFyIHA9ITA7aWYody5pc0RpcnR5KXt2YXIgdT0hMDticmVha319fWlmKHUpZm9yKGE9ZC5sZW5ndGg7YS0tOyl3PWRbYV0sdy5vcHRpb25zLnN0YWNraW5nJiYody5pc0RpcnR5PSEwKTtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5pc0RpcnR5JiYoXCJwb2ludFwiPT09YS5vcHRpb25zLmxlZ2VuZFR5cGU/KGEudXBkYXRlVG90YWxzJiZhLnVwZGF0ZVRvdGFscygpLG09ITApOmsmJihrLmxhYmVsRm9ybWF0dGVyfHxrLmxhYmVsRm9ybWF0KSYmKG09ITApKTthLmlzRGlydHlEYXRhJiZcbkEoYSxcInVwZGF0ZWREYXRhXCIpfSk7bSYmYyYmYy5vcHRpb25zLmVuYWJsZWQmJihjLnJlbmRlcigpLHRoaXMuaXNEaXJ0eUxlZ2VuZD0hMSk7cCYmdGhpcy5nZXRTdGFja3MoKTtyJiZiLmZvckVhY2goZnVuY3Rpb24oYSl7YS51cGRhdGVOYW1lcygpO2Euc2V0U2NhbGUoKX0pO3RoaXMuZ2V0TWFyZ2lucygpO3ImJihiLmZvckVhY2goZnVuY3Rpb24oYSl7YS5pc0RpcnR5JiYoaD0hMCl9KSxiLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5taW4rXCIsXCIrYS5tYXg7YS5leHRLZXkhPT1iJiYoYS5leHRLZXk9Yix4LnB1c2goZnVuY3Rpb24oKXtBKGEsXCJhZnRlclNldEV4dHJlbWVzXCIsdChhLmV2ZW50QXJncyxhLmdldEV4dHJlbWVzKCkpKTtkZWxldGUgYS5ldmVudEFyZ3N9KSk7KGh8fHApJiZhLnJlZHJhdygpfSkpO2gmJnRoaXMuZHJhd0NoYXJ0Qm94KCk7QSh0aGlzLFwicHJlZHJhd1wiKTtkLmZvckVhY2goZnVuY3Rpb24oYSl7KGh8fGEuaXNEaXJ0eSkmJmEudmlzaWJsZSYmYS5yZWRyYXcoKTtcbmEuaXNEaXJ0eURhdGE9ITF9KTtlJiZlLnJlc2V0KCEwKTtsLmRyYXcoKTtBKHRoaXMsXCJyZWRyYXdcIik7QSh0aGlzLFwicmVuZGVyXCIpO2YmJnRoaXMudGVtcG9yYXJ5RGlzcGxheSghMCk7eC5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuY2FsbCgpfSl9LGdldDpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe3JldHVybiBiLmlkPT09YXx8Yi5vcHRpb25zJiZiLm9wdGlvbnMuaWQ9PT1hfXZhciBkPXRoaXMuc2VyaWVzLGU7dmFyIGM9eCh0aGlzLmF4ZXMsYil8fHgodGhpcy5zZXJpZXMsYik7Zm9yKGU9MDshYyYmZTxkLmxlbmd0aDtlKyspYz14KGRbZV0ucG9pbnRzfHxbXSxiKTtyZXR1cm4gY30sZ2V0QXhlczpmdW5jdGlvbigpe3ZhciBhPXRoaXMsZD10aGlzLm9wdGlvbnMsZT1kLnhBeGlzPWIoZC54QXhpc3x8e30pO2Q9ZC55QXhpcz1iKGQueUF4aXN8fHt9KTtBKHRoaXMsXCJnZXRBeGVzXCIpO2UuZm9yRWFjaChmdW5jdGlvbihhLGIpe2EuaW5kZXg9YjthLmlzWD0hMH0pO2QuZm9yRWFjaChmdW5jdGlvbihhLFxuYil7YS5pbmRleD1ifSk7ZS5jb25jYXQoZCkuZm9yRWFjaChmdW5jdGlvbihiKXtuZXcgRShhLGIpfSk7QSh0aGlzLFwiYWZ0ZXJHZXRBeGVzXCIpfSxnZXRTZWxlY3RlZFBvaW50czpmdW5jdGlvbigpe3ZhciBhPVtdO3RoaXMuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYil7YT1hLmNvbmNhdCgoYltiLmhhc0dyb3VwZWREYXRhP1wicG9pbnRzXCI6XCJkYXRhXCJdfHxbXSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBuKGEuc2VsZWN0ZWRTdGFnaW5nLGEuc2VsZWN0ZWQpfSkpfSk7cmV0dXJuIGF9LGdldFNlbGVjdGVkU2VyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VyaWVzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5zZWxlY3RlZH0pfSxzZXRUaXRsZTpmdW5jdGlvbihhLGIsZCl7dGhpcy5hcHBseURlc2NyaXB0aW9uKFwidGl0bGVcIixhKTt0aGlzLmFwcGx5RGVzY3JpcHRpb24oXCJzdWJ0aXRsZVwiLGIpO3RoaXMuYXBwbHlEZXNjcmlwdGlvbihcImNhcHRpb25cIix2b2lkIDApO1xudGhpcy5sYXlPdXRUaXRsZXMoZCl9LGFwcGx5RGVzY3JpcHRpb246ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzLGU9XCJ0aXRsZVwiPT09YT97Y29sb3I6XCIjMzMzMzMzXCIsZm9udFNpemU6dGhpcy5vcHRpb25zLmlzU3RvY2s/XCIxNnB4XCI6XCIxOHB4XCJ9Ontjb2xvcjpcIiM2NjY2NjZcIn07ZT10aGlzLm9wdGlvbnNbYV09SyghdGhpcy5zdHlsZWRNb2RlJiZ7c3R5bGU6ZX0sdGhpcy5vcHRpb25zW2FdLGIpO3ZhciBjPXRoaXNbYV07YyYmYiYmKHRoaXNbYV09Yz1jLmRlc3Ryb3koKSk7ZSYmIWMmJihjPXRoaXMucmVuZGVyZXIudGV4dChlLnRleHQsMCwwLGUudXNlSFRNTCkuYXR0cih7YWxpZ246ZS5hbGlnbixcImNsYXNzXCI6XCJoaWdoY2hhcnRzLVwiK2EsekluZGV4OmUuekluZGV4fHw0fSkuYWRkKCksYy51cGRhdGU9ZnVuY3Rpb24oYil7ZFt7dGl0bGU6XCJzZXRUaXRsZVwiLHN1YnRpdGxlOlwic2V0U3VidGl0bGVcIixjYXB0aW9uOlwic2V0Q2FwdGlvblwifVthXV0oYil9LHRoaXMuc3R5bGVkTW9kZXx8XG5jLmNzcyhlLnN0eWxlKSx0aGlzW2FdPWMpfSxsYXlPdXRUaXRsZXM6ZnVuY3Rpb24oYSl7dmFyIGI9WzAsMCwwXSxkPXRoaXMucmVuZGVyZXIsZT10aGlzLnNwYWNpbmdCb3g7W1widGl0bGVcIixcInN1YnRpdGxlXCIsXCJjYXB0aW9uXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9dGhpc1thXSxrPXRoaXMub3B0aW9uc1thXSxnPWsudmVydGljYWxBbGlnbnx8XCJ0b3BcIjthPVwidGl0bGVcIj09PWE/LTM6XCJ0b3BcIj09PWc/YlswXSsyOjA7aWYoYyl7aWYoIXRoaXMuc3R5bGVkTW9kZSl2YXIgbT1rLnN0eWxlLmZvbnRTaXplO209ZC5mb250TWV0cmljcyhtLGMpLmI7Yy5jc3Moe3dpZHRoOihrLndpZHRofHxlLndpZHRoKyhrLndpZHRoQWRqdXN0fHwwKSkrXCJweFwifSk7dmFyIHI9TWF0aC5yb3VuZChjLmdldEJCb3goay51c2VIVE1MKS5oZWlnaHQpO2MuYWxpZ24odCh7eTpcImJvdHRvbVwiPT09Zz9tOmErbSxoZWlnaHQ6cn0sayksITEsXCJzcGFjaW5nQm94XCIpO2suZmxvYXRpbmd8fChcInRvcFwiPT09XG5nP2JbMF09TWF0aC5jZWlsKGJbMF0rcik6XCJib3R0b21cIj09PWcmJihiWzJdPU1hdGguY2VpbChiWzJdK3IpKSl9fSx0aGlzKTtiWzBdJiZcInRvcFwiPT09KHRoaXMub3B0aW9ucy50aXRsZS52ZXJ0aWNhbEFsaWdufHxcInRvcFwiKSYmKGJbMF0rPXRoaXMub3B0aW9ucy50aXRsZS5tYXJnaW4pO2JbMl0mJlwiYm90dG9tXCI9PT10aGlzLm9wdGlvbnMuY2FwdGlvbi52ZXJ0aWNhbEFsaWduJiYoYlsyXSs9dGhpcy5vcHRpb25zLmNhcHRpb24ubWFyZ2luKTt2YXIgYz0hdGhpcy50aXRsZU9mZnNldHx8dGhpcy50aXRsZU9mZnNldC5qb2luKFwiLFwiKSE9PWIuam9pbihcIixcIik7dGhpcy50aXRsZU9mZnNldD1iO0EodGhpcyxcImFmdGVyTGF5T3V0VGl0bGVzXCIpOyF0aGlzLmlzRGlydHlCb3gmJmMmJih0aGlzLmlzRGlydHlCb3g9dGhpcy5pc0RpcnR5TGVnZW5kPWMsdGhpcy5oYXNSZW5kZXJlZCYmbihhLCEwKSYmdGhpcy5pc0RpcnR5Qm94JiZ0aGlzLnJlZHJhdygpKX0sZ2V0Q2hhcnRTaXplOmZ1bmN0aW9uKCl7dmFyIGE9XG50aGlzLm9wdGlvbnMuY2hhcnQsYj1hLndpZHRoO2E9YS5oZWlnaHQ7dmFyIGQ9dGhpcy5yZW5kZXJUbztHKGIpfHwodGhpcy5jb250YWluZXJXaWR0aD1jLmdldFN0eWxlKGQsXCJ3aWR0aFwiKSk7RyhhKXx8KHRoaXMuY29udGFpbmVySGVpZ2h0PWMuZ2V0U3R5bGUoZCxcImhlaWdodFwiKSk7dGhpcy5jaGFydFdpZHRoPU1hdGgubWF4KDAsYnx8dGhpcy5jb250YWluZXJXaWR0aHx8NjAwKTt0aGlzLmNoYXJ0SGVpZ2h0PU1hdGgubWF4KDAsYy5yZWxhdGl2ZUxlbmd0aChhLHRoaXMuY2hhcnRXaWR0aCl8fCgxPHRoaXMuY29udGFpbmVySGVpZ2h0P3RoaXMuY29udGFpbmVySGVpZ2h0OjQwMCkpfSx0ZW1wb3JhcnlEaXNwbGF5OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmVuZGVyVG87aWYoYSlmb3IoO2ImJmIuc3R5bGU7KWIuaGNPcmlnU3R5bGUmJihjLmNzcyhiLGIuaGNPcmlnU3R5bGUpLGRlbGV0ZSBiLmhjT3JpZ1N0eWxlKSxiLmhjT3JpZ0RldGFjaGVkJiYoTC5ib2R5LnJlbW92ZUNoaWxkKGIpLFxuYi5oY09yaWdEZXRhY2hlZD0hMSksYj1iLnBhcmVudE5vZGU7ZWxzZSBmb3IoO2ImJmIuc3R5bGU7KXtMLmJvZHkuY29udGFpbnMoYil8fGIucGFyZW50Tm9kZXx8KGIuaGNPcmlnRGV0YWNoZWQ9ITAsTC5ib2R5LmFwcGVuZENoaWxkKGIpKTtpZihcIm5vbmVcIj09PWMuZ2V0U3R5bGUoYixcImRpc3BsYXlcIiwhMSl8fGIuaGNPcmljRGV0YWNoZWQpYi5oY09yaWdTdHlsZT17ZGlzcGxheTpiLnN0eWxlLmRpc3BsYXksaGVpZ2h0OmIuc3R5bGUuaGVpZ2h0LG92ZXJmbG93OmIuc3R5bGUub3ZlcmZsb3d9LGE9e2Rpc3BsYXk6XCJibG9ja1wiLG92ZXJmbG93OlwiaGlkZGVuXCJ9LGIhPT10aGlzLnJlbmRlclRvJiYoYS5oZWlnaHQ9MCksYy5jc3MoYixhKSxiLm9mZnNldFdpZHRofHxiLnN0eWxlLnNldFByb3BlcnR5KFwiZGlzcGxheVwiLFwiYmxvY2tcIixcImltcG9ydGFudFwiKTtiPWIucGFyZW50Tm9kZTtpZihiPT09TC5ib2R5KWJyZWFrfX0sc2V0Q2xhc3NOYW1lOmZ1bmN0aW9uKGEpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT1cblwiaGlnaGNoYXJ0cy1jb250YWluZXIgXCIrKGF8fFwiXCIpfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMsYj1hLmNoYXJ0O3ZhciBkPXRoaXMucmVuZGVyVG87dmFyIGU9Yy51bmlxdWVLZXkoKSxnLG07ZHx8KHRoaXMucmVuZGVyVG89ZD1iLnJlbmRlclRvKTt5KGQpJiYodGhpcy5yZW5kZXJUbz1kPUwuZ2V0RWxlbWVudEJ5SWQoZCkpO2R8fGMuZXJyb3IoMTMsITAsdGhpcyk7dmFyIGg9cShGKGQsXCJkYXRhLWhpZ2hjaGFydHMtY2hhcnRcIikpO0MoaCkmJmtbaF0mJmtbaF0uaGFzUmVuZGVyZWQmJmtbaF0uZGVzdHJveSgpO0YoZCxcImRhdGEtaGlnaGNoYXJ0cy1jaGFydFwiLHRoaXMuaW5kZXgpO2QuaW5uZXJIVE1MPVwiXCI7Yi5za2lwQ2xvbmV8fGQub2Zmc2V0V2lkdGh8fHRoaXMudGVtcG9yYXJ5RGlzcGxheSgpO3RoaXMuZ2V0Q2hhcnRTaXplKCk7aD10aGlzLmNoYXJ0V2lkdGg7dmFyIGw9dGhpcy5jaGFydEhlaWdodDtyKGQse292ZXJmbG93OlwiaGlkZGVuXCJ9KTtcbnRoaXMuc3R5bGVkTW9kZXx8KGc9dCh7cG9zaXRpb246XCJyZWxhdGl2ZVwiLG92ZXJmbG93OlwiaGlkZGVuXCIsd2lkdGg6aCtcInB4XCIsaGVpZ2h0OmwrXCJweFwiLHRleHRBbGlnbjpcImxlZnRcIixsaW5lSGVpZ2h0Olwibm9ybWFsXCIsekluZGV4OjAsXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIjpcInJnYmEoMCwwLDAsMClcIn0sYi5zdHlsZSkpO3RoaXMuY29udGFpbmVyPWQ9cChcImRpdlwiLHtpZDplfSxnLGQpO3RoaXMuX2N1cnNvcj1kLnN0eWxlLmN1cnNvcjt0aGlzLnJlbmRlcmVyPW5ldyAoY1tiLnJlbmRlcmVyXXx8Yy5SZW5kZXJlcikoZCxoLGwsbnVsbCxiLmZvckV4cG9ydCxhLmV4cG9ydGluZyYmYS5leHBvcnRpbmcuYWxsb3dIVE1MLHRoaXMuc3R5bGVkTW9kZSk7dGhpcy5zZXRDbGFzc05hbWUoYi5jbGFzc05hbWUpO2lmKHRoaXMuc3R5bGVkTW9kZSlmb3IobSBpbiBhLmRlZnMpdGhpcy5yZW5kZXJlci5kZWZpbml0aW9uKGEuZGVmc1ttXSk7ZWxzZSB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGIuc3R5bGUpO1xudGhpcy5yZW5kZXJlci5jaGFydEluZGV4PXRoaXMuaW5kZXg7QSh0aGlzLFwiYWZ0ZXJHZXRDb250YWluZXJcIil9LGdldE1hcmdpbnM6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zcGFjaW5nLGQ9dGhpcy5tYXJnaW4sZT10aGlzLnRpdGxlT2Zmc2V0O3RoaXMucmVzZXRNYXJnaW5zKCk7ZVswXSYmIUcoZFswXSkmJih0aGlzLnBsb3RUb3A9TWF0aC5tYXgodGhpcy5wbG90VG9wLGVbMF0rYlswXSkpO2VbMl0mJiFHKGRbMl0pJiYodGhpcy5tYXJnaW5Cb3R0b209TWF0aC5tYXgodGhpcy5tYXJnaW5Cb3R0b20sZVsyXStiWzJdKSk7dGhpcy5sZWdlbmQmJnRoaXMubGVnZW5kLmRpc3BsYXkmJnRoaXMubGVnZW5kLmFkanVzdE1hcmdpbnMoZCxiKTtBKHRoaXMsXCJnZXRNYXJnaW5zXCIpO2F8fHRoaXMuZ2V0QXhpc01hcmdpbnMoKX0sZ2V0QXhpc01hcmdpbnM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5heGlzT2Zmc2V0PVswLDAsMCwwXSxkPWEuY29sb3JBeGlzLGU9YS5tYXJnaW4sYz1mdW5jdGlvbihhKXthLmZvckVhY2goZnVuY3Rpb24oYSl7YS52aXNpYmxlJiZcbmEuZ2V0T2Zmc2V0KCl9KX07YS5oYXNDYXJ0ZXNpYW5TZXJpZXM/YyhhLmF4ZXMpOmQmJmQubGVuZ3RoJiZjKGQpO20uZm9yRWFjaChmdW5jdGlvbihkLGMpe0coZVtjXSl8fChhW2RdKz1iW2NdKX0pO2Euc2V0Q2hhcnRTaXplKCl9LHJlZmxvdzpmdW5jdGlvbihiKXt2YXIgZD10aGlzLGU9ZC5vcHRpb25zLmNoYXJ0LGs9ZC5yZW5kZXJUbyxnPUcoZS53aWR0aCkmJkcoZS5oZWlnaHQpLG09ZS53aWR0aHx8Yy5nZXRTdHlsZShrLFwid2lkdGhcIik7ZT1lLmhlaWdodHx8Yy5nZXRTdHlsZShrLFwiaGVpZ2h0XCIpO2s9Yj9iLnRhcmdldDpRO2lmKCFnJiYhZC5pc1ByaW50aW5nJiZtJiZlJiYoaz09PVF8fGs9PT1MKSl7aWYobSE9PWQuY29udGFpbmVyV2lkdGh8fGUhPT1kLmNvbnRhaW5lckhlaWdodCljLmNsZWFyVGltZW91dChkLnJlZmxvd1RpbWVvdXQpLGQucmVmbG93VGltZW91dD1hKGZ1bmN0aW9uKCl7ZC5jb250YWluZXImJmQuc2V0U2l6ZSh2b2lkIDAsdm9pZCAwLCExKX0sYj8xMDA6XG4wKTtkLmNvbnRhaW5lcldpZHRoPW07ZC5jb250YWluZXJIZWlnaHQ9ZX19LHNldFJlZmxvdzpmdW5jdGlvbihhKXt2YXIgYj10aGlzOyExPT09YXx8dGhpcy51bmJpbmRSZWZsb3c/ITE9PT1hJiZ0aGlzLnVuYmluZFJlZmxvdyYmKHRoaXMudW5iaW5kUmVmbG93PXRoaXMudW5iaW5kUmVmbG93KCkpOih0aGlzLnVuYmluZFJlZmxvdz1kKFEsXCJyZXNpemVcIixmdW5jdGlvbihhKXtiLm9wdGlvbnMmJmIucmVmbG93KGEpfSksZCh0aGlzLFwiZGVzdHJveVwiLHRoaXMudW5iaW5kUmVmbG93KSl9LHNldFNpemU6ZnVuY3Rpb24oYixkLGMpe3ZhciBrPXRoaXMsbT1rLnJlbmRlcmVyO2suaXNSZXNpemluZys9MTtnKGMsayk7ay5vbGRDaGFydEhlaWdodD1rLmNoYXJ0SGVpZ2h0O2sub2xkQ2hhcnRXaWR0aD1rLmNoYXJ0V2lkdGg7dm9pZCAwIT09YiYmKGsub3B0aW9ucy5jaGFydC53aWR0aD1iKTt2b2lkIDAhPT1kJiYoay5vcHRpb25zLmNoYXJ0LmhlaWdodD1kKTtrLmdldENoYXJ0U2l6ZSgpO1xuaWYoIWsuc3R5bGVkTW9kZSl7dmFyIGg9bS5nbG9iYWxBbmltYXRpb247KGg/ZTpyKShrLmNvbnRhaW5lcix7d2lkdGg6ay5jaGFydFdpZHRoK1wicHhcIixoZWlnaHQ6ay5jaGFydEhlaWdodCtcInB4XCJ9LGgpfWsuc2V0Q2hhcnRTaXplKCEwKTttLnNldFNpemUoay5jaGFydFdpZHRoLGsuY2hhcnRIZWlnaHQsYyk7ay5heGVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5pc0RpcnR5PSEwO2Euc2V0U2NhbGUoKX0pO2suaXNEaXJ0eUxlZ2VuZD0hMDtrLmlzRGlydHlCb3g9ITA7ay5sYXlPdXRUaXRsZXMoKTtrLmdldE1hcmdpbnMoKTtrLnJlZHJhdyhjKTtrLm9sZENoYXJ0SGVpZ2h0PW51bGw7QShrLFwicmVzaXplXCIpO2EoZnVuY3Rpb24oKXtrJiZBKGssXCJlbmRSZXNpemVcIixudWxsLGZ1bmN0aW9uKCl7LS1rLmlzUmVzaXppbmd9KX0sbChoKS5kdXJhdGlvbnx8MCl9LHNldENoYXJ0U2l6ZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmludmVydGVkLGQ9dGhpcy5yZW5kZXJlcixlPXRoaXMuY2hhcnRXaWR0aCxcbmM9dGhpcy5jaGFydEhlaWdodCxrPXRoaXMub3B0aW9ucy5jaGFydCxnPXRoaXMuc3BhY2luZyxtPXRoaXMuY2xpcE9mZnNldCxyLGgsbCxmO3RoaXMucGxvdExlZnQ9cj1NYXRoLnJvdW5kKHRoaXMucGxvdExlZnQpO3RoaXMucGxvdFRvcD1oPU1hdGgucm91bmQodGhpcy5wbG90VG9wKTt0aGlzLnBsb3RXaWR0aD1sPU1hdGgubWF4KDAsTWF0aC5yb3VuZChlLXItdGhpcy5tYXJnaW5SaWdodCkpO3RoaXMucGxvdEhlaWdodD1mPU1hdGgubWF4KDAsTWF0aC5yb3VuZChjLWgtdGhpcy5tYXJnaW5Cb3R0b20pKTt0aGlzLnBsb3RTaXplWD1iP2Y6bDt0aGlzLnBsb3RTaXplWT1iP2w6Zjt0aGlzLnBsb3RCb3JkZXJXaWR0aD1rLnBsb3RCb3JkZXJXaWR0aHx8MDt0aGlzLnNwYWNpbmdCb3g9ZC5zcGFjaW5nQm94PXt4OmdbM10seTpnWzBdLHdpZHRoOmUtZ1szXS1nWzFdLGhlaWdodDpjLWdbMF0tZ1syXX07dGhpcy5wbG90Qm94PWQucGxvdEJveD17eDpyLHk6aCx3aWR0aDpsLGhlaWdodDpmfTtcbmU9MipNYXRoLmZsb29yKHRoaXMucGxvdEJvcmRlcldpZHRoLzIpO2I9TWF0aC5jZWlsKE1hdGgubWF4KGUsbVszXSkvMik7ZD1NYXRoLmNlaWwoTWF0aC5tYXgoZSxtWzBdKS8yKTt0aGlzLmNsaXBCb3g9e3g6Yix5OmQsd2lkdGg6TWF0aC5mbG9vcih0aGlzLnBsb3RTaXplWC1NYXRoLm1heChlLG1bMV0pLzItYiksaGVpZ2h0Ok1hdGgubWF4KDAsTWF0aC5mbG9vcih0aGlzLnBsb3RTaXplWS1NYXRoLm1heChlLG1bMl0pLzItZCkpfTthfHx0aGlzLmF4ZXMuZm9yRWFjaChmdW5jdGlvbihhKXthLnNldEF4aXNTaXplKCk7YS5zZXRBeGlzVHJhbnNsYXRpb24oKX0pO0EodGhpcyxcImFmdGVyU2V0Q2hhcnRTaXplXCIse3NraXBBeGVzOmF9KX0scmVzZXRNYXJnaW5zOmZ1bmN0aW9uKCl7QSh0aGlzLFwicmVzZXRNYXJnaW5zXCIpO3ZhciBhPXRoaXMsYj1hLm9wdGlvbnMuY2hhcnQ7W1wibWFyZ2luXCIsXCJzcGFjaW5nXCJdLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIGU9YltkXSxjPUgoZSk/ZTpbZSxcbmUsZSxlXTtbXCJUb3BcIixcIlJpZ2h0XCIsXCJCb3R0b21cIixcIkxlZnRcIl0uZm9yRWFjaChmdW5jdGlvbihlLGspe2FbZF1ba109bihiW2QrZV0sY1trXSl9KX0pO20uZm9yRWFjaChmdW5jdGlvbihiLGQpe2FbYl09bihhLm1hcmdpbltkXSxhLnNwYWNpbmdbZF0pfSk7YS5heGlzT2Zmc2V0PVswLDAsMCwwXTthLmNsaXBPZmZzZXQ9WzAsMCwwLDBdfSxkcmF3Q2hhcnRCb3g6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMuY2hhcnQsYj10aGlzLnJlbmRlcmVyLGQ9dGhpcy5jaGFydFdpZHRoLGU9dGhpcy5jaGFydEhlaWdodCxjPXRoaXMuY2hhcnRCYWNrZ3JvdW5kLGs9dGhpcy5wbG90QmFja2dyb3VuZCxnPXRoaXMucGxvdEJvcmRlcixtPXRoaXMuc3R5bGVkTW9kZSxyPXRoaXMucGxvdEJHSW1hZ2UsaD1hLmJhY2tncm91bmRDb2xvcixsPWEucGxvdEJhY2tncm91bmRDb2xvcixmPWEucGxvdEJhY2tncm91bmRJbWFnZSx4LHc9dGhpcy5wbG90TGVmdCxwPXRoaXMucGxvdFRvcCx1PXRoaXMucGxvdFdpZHRoLFxubj10aGlzLnBsb3RIZWlnaHQsSj10aGlzLnBsb3RCb3gsSz10aGlzLmNsaXBSZWN0LHE9dGhpcy5jbGlwQm94LHY9XCJhbmltYXRlXCI7Y3x8KHRoaXMuY2hhcnRCYWNrZ3JvdW5kPWM9Yi5yZWN0KCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWJhY2tncm91bmRcIikuYWRkKCksdj1cImF0dHJcIik7aWYobSl2YXIgeT14PWMuc3Ryb2tlV2lkdGgoKTtlbHNle3k9YS5ib3JkZXJXaWR0aHx8MDt4PXkrKGEuc2hhZG93Pzg6MCk7aD17ZmlsbDpofHxcIm5vbmVcIn07aWYoeXx8Y1tcInN0cm9rZS13aWR0aFwiXSloLnN0cm9rZT1hLmJvcmRlckNvbG9yLGhbXCJzdHJva2Utd2lkdGhcIl09eTtjLmF0dHIoaCkuc2hhZG93KGEuc2hhZG93KX1jW3ZdKHt4OngvMix5OngvMix3aWR0aDpkLXgteSUyLGhlaWdodDplLXgteSUyLHI6YS5ib3JkZXJSYWRpdXN9KTt2PVwiYW5pbWF0ZVwiO2t8fCh2PVwiYXR0clwiLHRoaXMucGxvdEJhY2tncm91bmQ9az1iLnJlY3QoKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtcGxvdC1iYWNrZ3JvdW5kXCIpLmFkZCgpKTtcbmtbdl0oSik7bXx8KGsuYXR0cih7ZmlsbDpsfHxcIm5vbmVcIn0pLnNoYWRvdyhhLnBsb3RTaGFkb3cpLGYmJihyP3IuYW5pbWF0ZShKKTp0aGlzLnBsb3RCR0ltYWdlPWIuaW1hZ2UoZix3LHAsdSxuKS5hZGQoKSkpO0s/Sy5hbmltYXRlKHt3aWR0aDpxLndpZHRoLGhlaWdodDpxLmhlaWdodH0pOnRoaXMuY2xpcFJlY3Q9Yi5jbGlwUmVjdChxKTt2PVwiYW5pbWF0ZVwiO2d8fCh2PVwiYXR0clwiLHRoaXMucGxvdEJvcmRlcj1nPWIucmVjdCgpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1wbG90LWJvcmRlclwiKS5hdHRyKHt6SW5kZXg6MX0pLmFkZCgpKTttfHxnLmF0dHIoe3N0cm9rZTphLnBsb3RCb3JkZXJDb2xvcixcInN0cm9rZS13aWR0aFwiOmEucGxvdEJvcmRlcldpZHRofHwwLGZpbGw6XCJub25lXCJ9KTtnW3ZdKGcuY3Jpc3Aoe3g6dyx5OnAsd2lkdGg6dSxoZWlnaHQ6bn0sLWcuc3Ryb2tlV2lkdGgoKSkpO3RoaXMuaXNEaXJ0eUJveD0hMTtBKHRoaXMsXCJhZnRlckRyYXdDaGFydEJveFwiKX0scHJvcEZyb21TZXJpZXM6ZnVuY3Rpb24oKXt2YXIgYT1cbnRoaXMsYj1hLm9wdGlvbnMuY2hhcnQsZCxlPWEub3B0aW9ucy5zZXJpZXMsYyxrO1tcImludmVydGVkXCIsXCJhbmd1bGFyXCIsXCJwb2xhclwiXS5mb3JFYWNoKGZ1bmN0aW9uKGcpe2Q9U1tiLnR5cGV8fGIuZGVmYXVsdFNlcmllc1R5cGVdO2s9YltnXXx8ZCYmZC5wcm90b3R5cGVbZ107Zm9yKGM9ZSYmZS5sZW5ndGg7IWsmJmMtLTspKGQ9U1tlW2NdLnR5cGVdKSYmZC5wcm90b3R5cGVbZ10mJihrPSEwKTthW2ddPWt9KX0sbGlua1NlcmllczpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLnNlcmllcztiLmZvckVhY2goZnVuY3Rpb24oYSl7YS5saW5rZWRTZXJpZXMubGVuZ3RoPTB9KTtiLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGQ9Yi5vcHRpb25zLmxpbmtlZFRvO3koZCkmJihkPVwiOnByZXZpb3VzXCI9PT1kP2Euc2VyaWVzW2IuaW5kZXgtMV06YS5nZXQoZCkpJiZkLmxpbmtlZFBhcmVudCE9PWImJihkLmxpbmtlZFNlcmllcy5wdXNoKGIpLGIubGlua2VkUGFyZW50PWQsYi52aXNpYmxlPVxubihiLm9wdGlvbnMudmlzaWJsZSxkLm9wdGlvbnMudmlzaWJsZSxiLnZpc2libGUpKX0pO0EodGhpcyxcImFmdGVyTGlua1Nlcmllc1wiKX0scmVuZGVyU2VyaWVzOmZ1bmN0aW9uKCl7dGhpcy5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihhKXthLnRyYW5zbGF0ZSgpO2EucmVuZGVyKCl9KX0scmVuZGVyTGFiZWxzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEub3B0aW9ucy5sYWJlbHM7Yi5pdGVtcyYmYi5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPXQoYi5zdHlsZSxkLnN0eWxlKSxjPXEoZS5sZWZ0KSthLnBsb3RMZWZ0LGs9cShlLnRvcCkrYS5wbG90VG9wKzEyO2RlbGV0ZSBlLmxlZnQ7ZGVsZXRlIGUudG9wO2EucmVuZGVyZXIudGV4dChkLmh0bWwsYyxrKS5hdHRyKHt6SW5kZXg6Mn0pLmNzcyhlKS5hZGQoKX0pfSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmF4ZXMsYj10aGlzLmNvbG9yQXhpcyxkPXRoaXMucmVuZGVyZXIsZT10aGlzLm9wdGlvbnMsYz0wLGs9XG5mdW5jdGlvbihhKXthLmZvckVhY2goZnVuY3Rpb24oYSl7YS52aXNpYmxlJiZhLnJlbmRlcigpfSl9O3RoaXMuc2V0VGl0bGUoKTt0aGlzLmxlZ2VuZD1uZXcgdyh0aGlzLGUubGVnZW5kKTt0aGlzLmdldFN0YWNrcyYmdGhpcy5nZXRTdGFja3MoKTt0aGlzLmdldE1hcmdpbnMoITApO3RoaXMuc2V0Q2hhcnRTaXplKCk7ZT10aGlzLnBsb3RXaWR0aDthLnNvbWUoZnVuY3Rpb24oYSl7aWYoYS5ob3JpeiYmYS52aXNpYmxlJiZhLm9wdGlvbnMubGFiZWxzLmVuYWJsZWQmJmEuc2VyaWVzLmxlbmd0aClyZXR1cm4gYz0yMSwhMH0pO3ZhciBnPXRoaXMucGxvdEhlaWdodD1NYXRoLm1heCh0aGlzLnBsb3RIZWlnaHQtYywwKTthLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zZXRTY2FsZSgpfSk7dGhpcy5nZXRBeGlzTWFyZ2lucygpO3ZhciBtPTEuMTxlL3RoaXMucGxvdFdpZHRoO3ZhciByPTEuMDU8Zy90aGlzLnBsb3RIZWlnaHQ7aWYobXx8cilhLmZvckVhY2goZnVuY3Rpb24oYSl7KGEuaG9yaXomJlxubXx8IWEuaG9yaXomJnIpJiZhLnNldFRpY2tJbnRlcnZhbCghMCl9KSx0aGlzLmdldE1hcmdpbnMoKTt0aGlzLmRyYXdDaGFydEJveCgpO3RoaXMuaGFzQ2FydGVzaWFuU2VyaWVzP2soYSk6YiYmYi5sZW5ndGgmJmsoYik7dGhpcy5zZXJpZXNHcm91cHx8KHRoaXMuc2VyaWVzR3JvdXA9ZC5nKFwic2VyaWVzLWdyb3VwXCIpLmF0dHIoe3pJbmRleDozfSkuYWRkKCkpO3RoaXMucmVuZGVyU2VyaWVzKCk7dGhpcy5yZW5kZXJMYWJlbHMoKTt0aGlzLmFkZENyZWRpdHMoKTt0aGlzLnNldFJlc3BvbnNpdmUmJnRoaXMuc2V0UmVzcG9uc2l2ZSgpO3RoaXMudXBkYXRlQ29udGFpbmVyU2NhbGluZygpO3RoaXMuaGFzUmVuZGVyZWQ9ITB9LGFkZENyZWRpdHM6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczthPUsoITAsdGhpcy5vcHRpb25zLmNyZWRpdHMsYSk7YS5lbmFibGVkJiYhdGhpcy5jcmVkaXRzJiYodGhpcy5jcmVkaXRzPXRoaXMucmVuZGVyZXIudGV4dChhLnRleHQrKHRoaXMubWFwQ3JlZGl0c3x8XG5cIlwiKSwwLDApLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1jcmVkaXRzXCIpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe2EuaHJlZiYmKFEubG9jYXRpb24uaHJlZj1hLmhyZWYpfSkuYXR0cih7YWxpZ246YS5wb3NpdGlvbi5hbGlnbix6SW5kZXg6OH0pLGIuc3R5bGVkTW9kZXx8dGhpcy5jcmVkaXRzLmNzcyhhLnN0eWxlKSx0aGlzLmNyZWRpdHMuYWRkKCkuYWxpZ24oYS5wb3NpdGlvbiksdGhpcy5jcmVkaXRzLnVwZGF0ZT1mdW5jdGlvbihhKXtiLmNyZWRpdHM9Yi5jcmVkaXRzLmRlc3Ryb3koKTtiLmFkZENyZWRpdHMoYSl9KX0sdXBkYXRlQ29udGFpbmVyU2NhbGluZzpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY29udGFpbmVyO2lmKGEub2Zmc2V0V2lkdGgmJmEub2Zmc2V0SGVpZ2h0JiZhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIGI9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWIud2lkdGgvYS5vZmZzZXRXaWR0aDthPWIuaGVpZ2h0L2Eub2Zmc2V0SGVpZ2h0OzEhPT1kfHwxIT09XG5hP3RoaXMuY29udGFpbmVyU2NhbGluZz17c2NhbGVYOmQsc2NhbGVZOmF9OmRlbGV0ZSB0aGlzLmNvbnRhaW5lclNjYWxpbmd9fSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuYXhlcyxkPWEuc2VyaWVzLGU9YS5jb250YWluZXIsZyxtPWUmJmUucGFyZW50Tm9kZTtBKGEsXCJkZXN0cm95XCIpO2EucmVuZGVyZXIuZm9yRXhwb3J0P0IoayxhKTprW2EuaW5kZXhdPXZvaWQgMDtjLmNoYXJ0Q291bnQtLTthLnJlbmRlclRvLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtaGlnaGNoYXJ0cy1jaGFydFwiKTtVKGEpO2ZvcihnPWIubGVuZ3RoO2ctLTspYltnXT1iW2ddLmRlc3Ryb3koKTt0aGlzLnNjcm9sbGVyJiZ0aGlzLnNjcm9sbGVyLmRlc3Ryb3kmJnRoaXMuc2Nyb2xsZXIuZGVzdHJveSgpO2ZvcihnPWQubGVuZ3RoO2ctLTspZFtnXT1kW2ddLmRlc3Ryb3koKTtcInRpdGxlIHN1YnRpdGxlIGNoYXJ0QmFja2dyb3VuZCBwbG90QmFja2dyb3VuZCBwbG90QkdJbWFnZSBwbG90Qm9yZGVyIHNlcmllc0dyb3VwIGNsaXBSZWN0IGNyZWRpdHMgcG9pbnRlciByYW5nZVNlbGVjdG9yIGxlZ2VuZCByZXNldFpvb21CdXR0b24gdG9vbHRpcCByZW5kZXJlclwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPVxuYVtiXTtkJiZkLmRlc3Ryb3kmJihhW2JdPWQuZGVzdHJveSgpKX0pO2UmJihlLmlubmVySFRNTD1cIlwiLFUoZSksbSYmeihlKSk7aChhLGZ1bmN0aW9uKGIsZCl7ZGVsZXRlIGFbZF19KX0sZmlyc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5vcHRpb25zO2lmKCFhLmlzUmVhZHlUb1JlbmRlcnx8YS5pc1JlYWR5VG9SZW5kZXIoKSl7YS5nZXRDb250YWluZXIoKTthLnJlc2V0TWFyZ2lucygpO2Euc2V0Q2hhcnRTaXplKCk7YS5wcm9wRnJvbVNlcmllcygpO2EuZ2V0QXhlcygpOyh2KGIuc2VyaWVzKT9iLnNlcmllczpbXSkuZm9yRWFjaChmdW5jdGlvbihiKXthLmluaXRTZXJpZXMoYil9KTthLmxpbmtTZXJpZXMoKTtBKGEsXCJiZWZvcmVSZW5kZXJcIik7SiYmKGEucG9pbnRlcj1uZXcgSihhLGIpKTthLnJlbmRlcigpO2lmKCFhLnJlbmRlcmVyLmltZ0NvdW50JiZhLm9ubG9hZClhLm9ubG9hZCgpO2EudGVtcG9yYXJ5RGlzcGxheSghMCl9fSxvbmxvYWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbGxiYWNrcy5jb25jYXQoW3RoaXMuY2FsbGJhY2tdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EmJlxudm9pZCAwIT09dGhpcy5pbmRleCYmYS5hcHBseSh0aGlzLFt0aGlzXSl9LHRoaXMpO0EodGhpcyxcImxvYWRcIik7QSh0aGlzLFwicmVuZGVyXCIpO0codGhpcy5pbmRleCkmJnRoaXMuc2V0UmVmbG93KHRoaXMub3B0aW9ucy5jaGFydC5yZWZsb3cpO3RoaXMub25sb2FkPW51bGx9fSl9KTtNKEksXCJwYXJ0cy9TY3JvbGxhYmxlUGxvdEFyZWEuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLnBpY2ssRz1jLmFkZEV2ZW50O2Y9Yy5DaGFydDtcIlwiO0coZixcImFmdGVyU2V0Q2hhcnRTaXplXCIsZnVuY3Rpb24oZil7dmFyIHo9dGhpcy5vcHRpb25zLmNoYXJ0LnNjcm9sbGFibGVQbG90QXJlYSx0PXomJnoubWluV2lkdGg7ej16JiZ6Lm1pbkhlaWdodDtpZighdGhpcy5yZW5kZXJlci5mb3JFeHBvcnQpe2lmKHQpe2lmKHRoaXMuc2Nyb2xsYWJsZVBpeGVsc1g9dD1NYXRoLm1heCgwLHQtdGhpcy5jaGFydFdpZHRoKSl7dGhpcy5wbG90V2lkdGgrPVxudDt0aGlzLmludmVydGVkPyh0aGlzLmNsaXBCb3guaGVpZ2h0Kz10LHRoaXMucGxvdEJveC5oZWlnaHQrPXQpOih0aGlzLmNsaXBCb3gud2lkdGgrPXQsdGhpcy5wbG90Qm94LndpZHRoKz10KTt2YXIgdj17MTp7bmFtZTpcInJpZ2h0XCIsdmFsdWU6dH19fX1lbHNlIHomJih0aGlzLnNjcm9sbGFibGVQaXhlbHNZPXQ9TWF0aC5tYXgoMCx6LXRoaXMuY2hhcnRIZWlnaHQpKSYmKHRoaXMucGxvdEhlaWdodCs9dCx0aGlzLmludmVydGVkPyh0aGlzLmNsaXBCb3gud2lkdGgrPXQsdGhpcy5wbG90Qm94LndpZHRoKz10KToodGhpcy5jbGlwQm94LmhlaWdodCs9dCx0aGlzLnBsb3RCb3guaGVpZ2h0Kz10KSx2PXsyOntuYW1lOlwiYm90dG9tXCIsdmFsdWU6dH19KTt2JiYhZi5za2lwQXhlcyYmdGhpcy5heGVzLmZvckVhY2goZnVuY3Rpb24oZil7dltmLnNpZGVdP2YuZ2V0UGxvdExpbmVQYXRoPWZ1bmN0aW9uKCl7dmFyIHQ9dltmLnNpZGVdLm5hbWUseT10aGlzW3RdO3RoaXNbdF09eS12W2Yuc2lkZV0udmFsdWU7XG52YXIgaD1jLkF4aXMucHJvdG90eXBlLmdldFBsb3RMaW5lUGF0aC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpc1t0XT15O3JldHVybiBofTooZi5zZXRBeGlzU2l6ZSgpLGYuc2V0QXhpc1RyYW5zbGF0aW9uKCkpfSl9fSk7RyhmLFwicmVuZGVyXCIsZnVuY3Rpb24oKXt0aGlzLnNjcm9sbGFibGVQaXhlbHNYfHx0aGlzLnNjcm9sbGFibGVQaXhlbHNZPyh0aGlzLnNldFVwU2Nyb2xsaW5nJiZ0aGlzLnNldFVwU2Nyb2xsaW5nKCksdGhpcy5hcHBseUZpeGVkKCkpOnRoaXMuZml4ZWREaXYmJnRoaXMuYXBwbHlGaXhlZCgpfSk7Zi5wcm90b3R5cGUuc2V0VXBTY3JvbGxpbmc9ZnVuY3Rpb24oKXt2YXIgZj17V2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6XCJ0b3VjaFwiLG92ZXJmbG93WDpcImhpZGRlblwiLG92ZXJmbG93WTpcImhpZGRlblwifTt0aGlzLnNjcm9sbGFibGVQaXhlbHNYJiYoZi5vdmVyZmxvd1g9XCJhdXRvXCIpO3RoaXMuc2Nyb2xsYWJsZVBpeGVsc1kmJihmLm92ZXJmbG93WT1cImF1dG9cIik7XG50aGlzLnNjcm9sbGluZ0NvbnRhaW5lcj1jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiaGlnaGNoYXJ0cy1zY3JvbGxpbmdcIn0sZix0aGlzLnJlbmRlclRvKTt0aGlzLmlubmVyQ29udGFpbmVyPWMuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJoaWdoY2hhcnRzLWlubmVyLWNvbnRhaW5lclwifSxudWxsLHRoaXMuc2Nyb2xsaW5nQ29udGFpbmVyKTt0aGlzLmlubmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTt0aGlzLnNldFVwU2Nyb2xsaW5nPW51bGx9O2YucHJvdG90eXBlLm1vdmVGaXhlZEVsZW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5jb250YWluZXIsZj10aGlzLmZpeGVkUmVuZGVyZXIsdD1cIi5oaWdoY2hhcnRzLWNvbnRleHRidXR0b24gLmhpZ2hjaGFydHMtY3JlZGl0cyAuaGlnaGNoYXJ0cy1sZWdlbmQgLmhpZ2hjaGFydHMtbGVnZW5kLWNoZWNrYm94IC5oaWdoY2hhcnRzLW5hdmlnYXRvci1zZXJpZXMgLmhpZ2hjaGFydHMtbmF2aWdhdG9yLXhheGlzIC5oaWdoY2hhcnRzLW5hdmlnYXRvci15YXhpcyAuaGlnaGNoYXJ0cy1uYXZpZ2F0b3IgLmhpZ2hjaGFydHMtcmVzZXQtem9vbSAuaGlnaGNoYXJ0cy1zY3JvbGxiYXIgLmhpZ2hjaGFydHMtc3VidGl0bGUgLmhpZ2hjaGFydHMtdGl0bGVcIi5zcGxpdChcIiBcIiksXG52O3RoaXMuc2Nyb2xsYWJsZVBpeGVsc1gmJiF0aGlzLmludmVydGVkP3Y9XCIuaGlnaGNoYXJ0cy15YXhpc1wiOnRoaXMuc2Nyb2xsYWJsZVBpeGVsc1gmJnRoaXMuaW52ZXJ0ZWQ/dj1cIi5oaWdoY2hhcnRzLXhheGlzXCI6dGhpcy5zY3JvbGxhYmxlUGl4ZWxzWSYmIXRoaXMuaW52ZXJ0ZWQ/dj1cIi5oaWdoY2hhcnRzLXhheGlzXCI6dGhpcy5zY3JvbGxhYmxlUGl4ZWxzWSYmdGhpcy5pbnZlcnRlZCYmKHY9XCIuaGlnaGNoYXJ0cy15YXhpc1wiKTt0LnB1c2godix2K1wiLWxhYmVsc1wiKTt0LmZvckVhY2goZnVuY3Rpb24odil7W10uZm9yRWFjaC5jYWxsKGMucXVlcnlTZWxlY3RvckFsbCh2KSxmdW5jdGlvbihjKXsoYy5uYW1lc3BhY2VVUkk9PT1mLlNWR19OUz9mLmJveDpmLmJveC5wYXJlbnROb2RlKS5hcHBlbmRDaGlsZChjKTtjLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJhdXRvXCJ9KX0pfTtmLnByb3RvdHlwZS5hcHBseUZpeGVkPWZ1bmN0aW9uKCl7dmFyIGYsQj0hdGhpcy5maXhlZERpdix0PXRoaXMub3B0aW9ucy5jaGFydC5zY3JvbGxhYmxlUGxvdEFyZWE7XG5CPyh0aGlzLmZpeGVkRGl2PWMuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJoaWdoY2hhcnRzLWZpeGVkXCJ9LHtwb3NpdGlvbjpcImFic29sdXRlXCIsb3ZlcmZsb3c6XCJoaWRkZW5cIixwb2ludGVyRXZlbnRzOlwibm9uZVwiLHpJbmRleDoyfSxudWxsLCEwKSx0aGlzLnJlbmRlclRvLmluc2VydEJlZm9yZSh0aGlzLmZpeGVkRGl2LHRoaXMucmVuZGVyVG8uZmlyc3RDaGlsZCksdGhpcy5yZW5kZXJUby5zdHlsZS5vdmVyZmxvdz1cInZpc2libGVcIix0aGlzLmZpeGVkUmVuZGVyZXI9Zj1uZXcgYy5SZW5kZXJlcih0aGlzLmZpeGVkRGl2LHRoaXMuY2hhcnRXaWR0aCx0aGlzLmNoYXJ0SGVpZ2h0KSx0aGlzLnNjcm9sbGFibGVNYXNrPWYucGF0aCgpLmF0dHIoe2ZpbGw6Yy5jb2xvcih0aGlzLm9wdGlvbnMuY2hhcnQuYmFja2dyb3VuZENvbG9yfHxcIiNmZmZcIikuc2V0T3BhY2l0eShGKHQub3BhY2l0eSwuODUpKS5nZXQoKSx6SW5kZXg6LTF9KS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtc2Nyb2xsYWJsZS1tYXNrXCIpLmFkZCgpLFxudGhpcy5tb3ZlRml4ZWRFbGVtZW50cygpLEcodGhpcyxcImFmdGVyU2hvd1Jlc2V0Wm9vbVwiLHRoaXMubW92ZUZpeGVkRWxlbWVudHMpLEcodGhpcyxcImFmdGVyTGF5T3V0VGl0bGVzXCIsdGhpcy5tb3ZlRml4ZWRFbGVtZW50cykpOnRoaXMuZml4ZWRSZW5kZXJlci5zZXRTaXplKHRoaXMuY2hhcnRXaWR0aCx0aGlzLmNoYXJ0SGVpZ2h0KTtmPXRoaXMuY2hhcnRXaWR0aCsodGhpcy5zY3JvbGxhYmxlUGl4ZWxzWHx8MCk7dmFyIHY9dGhpcy5jaGFydEhlaWdodCsodGhpcy5zY3JvbGxhYmxlUGl4ZWxzWXx8MCk7Yy5zdG9wKHRoaXMuY29udGFpbmVyKTt0aGlzLmNvbnRhaW5lci5zdHlsZS53aWR0aD1mK1wicHhcIjt0aGlzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQ9ditcInB4XCI7dGhpcy5yZW5kZXJlci5ib3hXcmFwcGVyLmF0dHIoe3dpZHRoOmYsaGVpZ2h0OnYsdmlld0JveDpbMCwwLGYsdl0uam9pbihcIiBcIil9KTt0aGlzLmNoYXJ0QmFja2dyb3VuZC5hdHRyKHt3aWR0aDpmLGhlaWdodDp2fSk7XG50aGlzLnNjcm9sbGFibGVQaXhlbHNZJiYodGhpcy5zY3JvbGxpbmdDb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuY2hhcnRIZWlnaHQrXCJweFwiKTtCJiYodC5zY3JvbGxQb3NpdGlvblgmJih0aGlzLnNjcm9sbGluZ0NvbnRhaW5lci5zY3JvbGxMZWZ0PXRoaXMuc2Nyb2xsYWJsZVBpeGVsc1gqdC5zY3JvbGxQb3NpdGlvblgpLHQuc2Nyb2xsUG9zaXRpb25ZJiYodGhpcy5zY3JvbGxpbmdDb250YWluZXIuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsYWJsZVBpeGVsc1kqdC5zY3JvbGxQb3NpdGlvblkpKTt2PXRoaXMuYXhpc09mZnNldDtCPXRoaXMucGxvdFRvcC12WzBdLTE7dD10aGlzLnBsb3RMZWZ0LXZbM10tMTtmPXRoaXMucGxvdFRvcCt0aGlzLnBsb3RIZWlnaHQrdlsyXSsxO3Y9dGhpcy5wbG90TGVmdCt0aGlzLnBsb3RXaWR0aCt2WzFdKzE7dmFyIEM9dGhpcy5wbG90TGVmdCt0aGlzLnBsb3RXaWR0aC0odGhpcy5zY3JvbGxhYmxlUGl4ZWxzWHx8MCksSD10aGlzLnBsb3RUb3ArdGhpcy5wbG90SGVpZ2h0LVxuKHRoaXMuc2Nyb2xsYWJsZVBpeGVsc1l8fDApO0I9dGhpcy5zY3JvbGxhYmxlUGl4ZWxzWD9bXCJNXCIsMCxCLFwiTFwiLHRoaXMucGxvdExlZnQtMSxCLFwiTFwiLHRoaXMucGxvdExlZnQtMSxmLFwiTFwiLDAsZixcIlpcIixcIk1cIixDLEIsXCJMXCIsdGhpcy5jaGFydFdpZHRoLEIsXCJMXCIsdGhpcy5jaGFydFdpZHRoLGYsXCJMXCIsQyxmLFwiWlwiXTp0aGlzLnNjcm9sbGFibGVQaXhlbHNZP1tcIk1cIix0LDAsXCJMXCIsdCx0aGlzLnBsb3RUb3AtMSxcIkxcIix2LHRoaXMucGxvdFRvcC0xLFwiTFwiLHYsMCxcIlpcIixcIk1cIix0LEgsXCJMXCIsdCx0aGlzLmNoYXJ0SGVpZ2h0LFwiTFwiLHYsdGhpcy5jaGFydEhlaWdodCxcIkxcIix2LEgsXCJaXCJdOltcIk1cIiwwLDBdO1wiYWRqdXN0SGVpZ2h0XCIhPT10aGlzLnJlZHJhd1RyaWdnZXImJnRoaXMuc2Nyb2xsYWJsZU1hc2suYXR0cih7ZDpCfSl9fSk7TShJLFwicGFydHMvUG9pbnQuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1cbmYuZGVmaW5lZCxHPWYuZXJhc2Usej1mLmV4dGVuZCxCPWYuaXNBcnJheSx0PWYuaXNOdW1iZXIsdj1mLmlzT2JqZWN0LEM9Zi5waWNrLEgseT1jLmZpcmVFdmVudCxoPWMuZm9ybWF0LG49Yy51bmlxdWVLZXkscT1jLnJlbW92ZUV2ZW50O2MuUG9pbnQ9SD1mdW5jdGlvbigpe307Yy5Qb2ludC5wcm90b3R5cGU9e2luaXQ6ZnVuY3Rpb24oYyxiLGEpe3RoaXMuc2VyaWVzPWM7dGhpcy5hcHBseU9wdGlvbnMoYixhKTt0aGlzLmlkPUYodGhpcy5pZCk/dGhpcy5pZDpuKCk7dGhpcy5yZXNvbHZlQ29sb3IoKTtjLmNoYXJ0LnBvaW50Q291bnQrKzt5KHRoaXMsXCJhZnRlckluaXRcIik7cmV0dXJuIHRoaXN9LHJlc29sdmVDb2xvcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMuc2VyaWVzO3ZhciBiPWMuY2hhcnQub3B0aW9ucy5jaGFydC5jb2xvckNvdW50O3ZhciBhPWMuY2hhcnQuc3R5bGVkTW9kZTthfHx0aGlzLm9wdGlvbnMuY29sb3J8fCh0aGlzLmNvbG9yPWMuY29sb3IpO2Mub3B0aW9ucy5jb2xvckJ5UG9pbnQ/XG4oYXx8KGI9Yy5vcHRpb25zLmNvbG9yc3x8Yy5jaGFydC5vcHRpb25zLmNvbG9ycyx0aGlzLmNvbG9yPXRoaXMuY29sb3J8fGJbYy5jb2xvckNvdW50ZXJdLGI9Yi5sZW5ndGgpLGE9Yy5jb2xvckNvdW50ZXIsYy5jb2xvckNvdW50ZXIrKyxjLmNvbG9yQ291bnRlcj09PWImJihjLmNvbG9yQ291bnRlcj0wKSk6YT1jLmNvbG9ySW5kZXg7dGhpcy5jb2xvckluZGV4PUModGhpcy5jb2xvckluZGV4LGEpfSxhcHBseU9wdGlvbnM6ZnVuY3Rpb24oYyxiKXt2YXIgYT10aGlzLnNlcmllcyxkPWEub3B0aW9ucy5wb2ludFZhbEtleXx8YS5wb2ludFZhbEtleTtjPUgucHJvdG90eXBlLm9wdGlvbnNUb09iamVjdC5jYWxsKHRoaXMsYyk7eih0aGlzLGMpO3RoaXMub3B0aW9ucz10aGlzLm9wdGlvbnM/eih0aGlzLm9wdGlvbnMsYyk6YztjLmdyb3VwJiZkZWxldGUgdGhpcy5ncm91cDtjLmRhdGFMYWJlbHMmJmRlbGV0ZSB0aGlzLmRhdGFMYWJlbHM7ZCYmKHRoaXMueT10aGlzW2RdKTt0aGlzLmZvcm1hdFByZWZpeD1cbih0aGlzLmlzTnVsbD1DKHRoaXMuaXNWYWxpZCYmIXRoaXMuaXNWYWxpZCgpLG51bGw9PT10aGlzLnh8fCF0KHRoaXMueSkpKT9cIm51bGxcIjpcInBvaW50XCI7dGhpcy5zZWxlY3RlZCYmKHRoaXMuc3RhdGU9XCJzZWxlY3RcIik7XCJuYW1lXCJpbiB0aGlzJiZ2b2lkIDA9PT1iJiZhLnhBeGlzJiZhLnhBeGlzLmhhc05hbWVzJiYodGhpcy54PWEueEF4aXMubmFtZVRvWCh0aGlzKSk7dm9pZCAwPT09dGhpcy54JiZhJiYodGhpcy54PXZvaWQgMD09PWI/YS5hdXRvSW5jcmVtZW50KHRoaXMpOmIpO3JldHVybiB0aGlzfSxzZXROZXN0ZWRQcm9wZXJ0eTpmdW5jdGlvbihjLGIsYSl7YS5zcGxpdChcIi5cIikucmVkdWNlKGZ1bmN0aW9uKGEsZSxjLGcpe2FbZV09Zy5sZW5ndGgtMT09PWM/Yjp2KGFbZV0sITApP2FbZV06e307cmV0dXJuIGFbZV19LGMpO3JldHVybiBjfSxvcHRpb25zVG9PYmplY3Q6ZnVuY3Rpb24oZyl7dmFyIGI9e30sYT10aGlzLnNlcmllcyxkPWEub3B0aW9ucy5rZXlzLGU9ZHx8YS5wb2ludEFycmF5TWFwfHxcbltcInlcIl0saD1lLmxlbmd0aCxmPTAsbj0wO2lmKHQoZyl8fG51bGw9PT1nKWJbZVswXV09ZztlbHNlIGlmKEIoZykpZm9yKCFkJiZnLmxlbmd0aD5oJiYoYT10eXBlb2YgZ1swXSxcInN0cmluZ1wiPT09YT9iLm5hbWU9Z1swXTpcIm51bWJlclwiPT09YSYmKGIueD1nWzBdKSxmKyspO248aDspZCYmdm9pZCAwPT09Z1tmXXx8KDA8ZVtuXS5pbmRleE9mKFwiLlwiKT9jLlBvaW50LnByb3RvdHlwZS5zZXROZXN0ZWRQcm9wZXJ0eShiLGdbZl0sZVtuXSk6YltlW25dXT1nW2ZdKSxmKyssbisrO2Vsc2VcIm9iamVjdFwiPT09dHlwZW9mIGcmJihiPWcsZy5kYXRhTGFiZWxzJiYoYS5faGFzUG9pbnRMYWJlbHM9ITApLGcubWFya2VyJiYoYS5faGFzUG9pbnRNYXJrZXJzPSEwKSk7cmV0dXJuIGJ9LGdldENsYXNzTmFtZTpmdW5jdGlvbigpe3JldHVyblwiaGlnaGNoYXJ0cy1wb2ludFwiKyh0aGlzLnNlbGVjdGVkP1wiIGhpZ2hjaGFydHMtcG9pbnQtc2VsZWN0XCI6XCJcIikrKHRoaXMubmVnYXRpdmU/XCIgaGlnaGNoYXJ0cy1uZWdhdGl2ZVwiOlxuXCJcIikrKHRoaXMuaXNOdWxsP1wiIGhpZ2hjaGFydHMtbnVsbC1wb2ludFwiOlwiXCIpKyh2b2lkIDAhPT10aGlzLmNvbG9ySW5kZXg/XCIgaGlnaGNoYXJ0cy1jb2xvci1cIit0aGlzLmNvbG9ySW5kZXg6XCJcIikrKHRoaXMub3B0aW9ucy5jbGFzc05hbWU/XCIgXCIrdGhpcy5vcHRpb25zLmNsYXNzTmFtZTpcIlwiKSsodGhpcy56b25lJiZ0aGlzLnpvbmUuY2xhc3NOYW1lP1wiIFwiK3RoaXMuem9uZS5jbGFzc05hbWUucmVwbGFjZShcImhpZ2hjaGFydHMtbmVnYXRpdmVcIixcIlwiKTpcIlwiKX0sZ2V0Wm9uZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuc2VyaWVzLGI9Yy56b25lcztjPWMuem9uZUF4aXN8fFwieVwiO3ZhciBhPTAsZDtmb3IoZD1iW2FdO3RoaXNbY10+PWQudmFsdWU7KWQ9YlsrK2FdO3RoaXMubm9uWm9uZWRDb2xvcnx8KHRoaXMubm9uWm9uZWRDb2xvcj10aGlzLmNvbG9yKTt0aGlzLmNvbG9yPWQmJmQuY29sb3ImJiF0aGlzLm9wdGlvbnMuY29sb3I/ZC5jb2xvcjp0aGlzLm5vblpvbmVkQ29sb3I7cmV0dXJuIGR9LFxuaGFzTmV3U2hhcGVUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhpYyYmdGhpcy5ncmFwaGljLmVsZW1lbnQubm9kZU5hbWUhPT10aGlzLnNoYXBlVHlwZX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuc2VyaWVzLmNoYXJ0LGI9Yy5ob3ZlclBvaW50cyxhO2MucG9pbnRDb3VudC0tO2ImJih0aGlzLnNldFN0YXRlKCksRyhiLHRoaXMpLGIubGVuZ3RofHwoYy5ob3ZlclBvaW50cz1udWxsKSk7aWYodGhpcz09PWMuaG92ZXJQb2ludCl0aGlzLm9uTW91c2VPdXQoKTtpZih0aGlzLmdyYXBoaWN8fHRoaXMuZGF0YUxhYmVsfHx0aGlzLmRhdGFMYWJlbHMpcSh0aGlzKSx0aGlzLmRlc3Ryb3lFbGVtZW50cygpO3RoaXMubGVnZW5kSXRlbSYmYy5sZWdlbmQuZGVzdHJveUl0ZW0odGhpcyk7Zm9yKGEgaW4gdGhpcyl0aGlzW2FdPW51bGx9LGRlc3Ryb3lFbGVtZW50czpmdW5jdGlvbihjKXt2YXIgYj10aGlzLGE9W10sZDtjPWN8fHtncmFwaGljOjEsZGF0YUxhYmVsOjF9O1xuYy5ncmFwaGljJiZhLnB1c2goXCJncmFwaGljXCIsXCJzaGFkb3dHcm91cFwiKTtjLmRhdGFMYWJlbCYmYS5wdXNoKFwiZGF0YUxhYmVsXCIsXCJkYXRhTGFiZWxVcHBlclwiLFwiY29ubmVjdG9yXCIpO2ZvcihkPWEubGVuZ3RoO2QtLTspe3ZhciBlPWFbZF07YltlXSYmKGJbZV09YltlXS5kZXN0cm95KCkpfVtcImRhdGFMYWJlbFwiLFwiY29ubmVjdG9yXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGQ9YStcInNcIjtjW2FdJiZiW2RdJiYoYltkXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuZWxlbWVudCYmYS5kZXN0cm95KCl9KSxkZWxldGUgYltkXSl9KX0sZ2V0TGFiZWxDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm57eDp0aGlzLmNhdGVnb3J5LHk6dGhpcy55LGNvbG9yOnRoaXMuY29sb3IsY29sb3JJbmRleDp0aGlzLmNvbG9ySW5kZXgsa2V5OnRoaXMubmFtZXx8dGhpcy5jYXRlZ29yeSxzZXJpZXM6dGhpcy5zZXJpZXMscG9pbnQ6dGhpcyxwZXJjZW50YWdlOnRoaXMucGVyY2VudGFnZSx0b3RhbDp0aGlzLnRvdGFsfHxcbnRoaXMuc3RhY2tUb3RhbH19LHRvb2x0aXBGb3JtYXR0ZXI6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcy5zZXJpZXMsYT1iLnRvb2x0aXBPcHRpb25zLGQ9QyhhLnZhbHVlRGVjaW1hbHMsXCJcIiksZT1hLnZhbHVlUHJlZml4fHxcIlwiLGc9YS52YWx1ZVN1ZmZpeHx8XCJcIjtiLmNoYXJ0LnN0eWxlZE1vZGUmJihjPWIuY2hhcnQudG9vbHRpcC5zdHlsZWRNb2RlRm9ybWF0KGMpKTsoYi5wb2ludEFycmF5TWFwfHxbXCJ5XCJdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2E9XCJ7cG9pbnQuXCIrYTtpZihlfHxnKWM9Yy5yZXBsYWNlKFJlZ0V4cChhK1wifVwiLFwiZ1wiKSxlK2ErXCJ9XCIrZyk7Yz1jLnJlcGxhY2UoUmVnRXhwKGErXCJ9XCIsXCJnXCIpLGErXCI6LC5cIitkK1wiZn1cIil9KTtyZXR1cm4gaChjLHtwb2ludDp0aGlzLHNlcmllczp0aGlzLnNlcmllc30sYi5jaGFydC50aW1lKX0sZmlyZVBvaW50RXZlbnQ6ZnVuY3Rpb24oYyxiLGEpe3ZhciBkPXRoaXMsZT10aGlzLnNlcmllcy5vcHRpb25zOyhlLnBvaW50LmV2ZW50c1tjXXx8XG5kLm9wdGlvbnMmJmQub3B0aW9ucy5ldmVudHMmJmQub3B0aW9ucy5ldmVudHNbY10pJiZ0aGlzLmltcG9ydEV2ZW50cygpO1wiY2xpY2tcIj09PWMmJmUuYWxsb3dQb2ludFNlbGVjdCYmKGE9ZnVuY3Rpb24oYSl7ZC5zZWxlY3QmJmQuc2VsZWN0KG51bGwsYS5jdHJsS2V5fHxhLm1ldGFLZXl8fGEuc2hpZnRLZXkpfSk7eSh0aGlzLGMsYixhKX0sdmlzaWJsZTohMH19KTtNKEksXCJwYXJ0cy9TZXJpZXMuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmFycmF5TWF4LEc9Zi5hcnJheU1pbix6PWYuZGVmaW5lZCxCPWYuZXJhc2UsdD1mLmV4dGVuZCx2PWYuaXNBcnJheSxDPWYuaXNOdW1iZXIsSD1mLmlzU3RyaW5nLHk9Zi5vYmplY3RFYWNoLGg9Zi5waWNrLG49Zi5zcGxhdCxxPWYuc3luY1RpbWVvdXQsZz1jLmFkZEV2ZW50LGI9Yy5hbmltT2JqZWN0LGE9Yy5jb3JyZWN0RmxvYXQsZD1jLmRlZmF1bHRPcHRpb25zLFxuZT1jLmRlZmF1bHRQbG90T3B0aW9ucyxsPWMuZmlyZUV2ZW50LEw9Yy5tZXJnZSxFPWMucmVtb3ZlRXZlbnQscD1jLlNWR0VsZW1lbnQsdT1jLndpbjtjLlNlcmllcz1jLnNlcmllc1R5cGUoXCJsaW5lXCIsbnVsbCx7bGluZVdpZHRoOjIsYWxsb3dQb2ludFNlbGVjdDohMSxzaG93Q2hlY2tib3g6ITEsYW5pbWF0aW9uOntkdXJhdGlvbjoxRTN9LGV2ZW50czp7fSxtYXJrZXI6e2xpbmVXaWR0aDowLGxpbmVDb2xvcjpcIiNmZmZmZmZcIixlbmFibGVkVGhyZXNob2xkOjIscmFkaXVzOjQsc3RhdGVzOntub3JtYWw6e2FuaW1hdGlvbjohMH0saG92ZXI6e2FuaW1hdGlvbjp7ZHVyYXRpb246NTB9LGVuYWJsZWQ6ITAscmFkaXVzUGx1czoyLGxpbmVXaWR0aFBsdXM6MX0sc2VsZWN0OntmaWxsQ29sb3I6XCIjY2NjY2NjXCIsbGluZUNvbG9yOlwiIzAwMDAwMFwiLGxpbmVXaWR0aDoyfX19LHBvaW50OntldmVudHM6e319LGRhdGFMYWJlbHM6e2FsaWduOlwiY2VudGVyXCIsZm9ybWF0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT1cbnRoaXMueT9cIlwiOmMubnVtYmVyRm9ybWF0KHRoaXMueSwtMSl9LHBhZGRpbmc6NSxzdHlsZTp7Zm9udFNpemU6XCIxMXB4XCIsZm9udFdlaWdodDpcImJvbGRcIixjb2xvcjpcImNvbnRyYXN0XCIsdGV4dE91dGxpbmU6XCIxcHggY29udHJhc3RcIn0sdmVydGljYWxBbGlnbjpcImJvdHRvbVwiLHg6MCx5OjB9LGNyb3BUaHJlc2hvbGQ6MzAwLG9wYWNpdHk6MSxwb2ludFJhbmdlOjAsc29mdFRocmVzaG9sZDohMCxzdGF0ZXM6e25vcm1hbDp7YW5pbWF0aW9uOiEwfSxob3Zlcjp7YW5pbWF0aW9uOntkdXJhdGlvbjo1MH0sbGluZVdpZHRoUGx1czoxLG1hcmtlcjp7fSxoYWxvOntzaXplOjEwLG9wYWNpdHk6LjI1fX0sc2VsZWN0OnthbmltYXRpb246e2R1cmF0aW9uOjB9fSxpbmFjdGl2ZTp7YW5pbWF0aW9uOntkdXJhdGlvbjo1MH0sb3BhY2l0eTouMn19LHN0aWNreVRyYWNraW5nOiEwLHR1cmJvVGhyZXNob2xkOjFFMyxmaW5kTmVhcmVzdFBvaW50Qnk6XCJ4XCJ9LHtheGlzVHlwZXM6W1wieEF4aXNcIixcInlBeGlzXCJdLFxuY29sbDpcInNlcmllc1wiLGNvbG9yQ291bnRlcjowLGNyb3BTaG91bGRlcjoxLGRpcmVjdFRvdWNoOiExLGlzQ2FydGVzaWFuOiEwLHBhcmFsbGVsQXJyYXlzOltcInhcIixcInlcIl0scG9pbnRDbGFzczpjLlBvaW50LHJlcXVpcmVTb3J0aW5nOiEwLHNvcnRlZDohMCxpbml0OmZ1bmN0aW9uKGEsYil7bCh0aGlzLFwiaW5pdFwiLHtvcHRpb25zOmJ9KTt2YXIgZD10aGlzLGU9YS5zZXJpZXMsazt0aGlzLmV2ZW50T3B0aW9ucz10aGlzLmV2ZW50T3B0aW9uc3x8e307ZC5jaGFydD1hO2Qub3B0aW9ucz1iPWQuc2V0T3B0aW9ucyhiKTtkLmxpbmtlZFNlcmllcz1bXTtkLmJpbmRBeGVzKCk7dChkLHtuYW1lOmIubmFtZSxzdGF0ZTpcIlwiLHZpc2libGU6ITEhPT1iLnZpc2libGUsc2VsZWN0ZWQ6ITA9PT1iLnNlbGVjdGVkfSk7dmFyIG09Yi5ldmVudHM7eShtLGZ1bmN0aW9uKGEsYil7Yy5pc0Z1bmN0aW9uKGEpJiZkLmV2ZW50T3B0aW9uc1tiXSE9PWEmJihjLmlzRnVuY3Rpb24oZC5ldmVudE9wdGlvbnNbYl0pJiZcbkUoZCxiLGQuZXZlbnRPcHRpb25zW2JdKSxkLmV2ZW50T3B0aW9uc1tiXT1hLGcoZCxiLGEpKX0pO2lmKG0mJm0uY2xpY2t8fGIucG9pbnQmJmIucG9pbnQuZXZlbnRzJiZiLnBvaW50LmV2ZW50cy5jbGlja3x8Yi5hbGxvd1BvaW50U2VsZWN0KWEucnVuVHJhY2tlckNsaWNrPSEwO2QuZ2V0Q29sb3IoKTtkLmdldFN5bWJvbCgpO2QucGFyYWxsZWxBcnJheXMuZm9yRWFjaChmdW5jdGlvbihhKXtkW2ErXCJEYXRhXCJdfHwoZFthK1wiRGF0YVwiXT1bXSl9KTtkLnBvaW50c3x8ZC5kYXRhfHxkLnNldERhdGEoYi5kYXRhLCExKTtkLmlzQ2FydGVzaWFuJiYoYS5oYXNDYXJ0ZXNpYW5TZXJpZXM9ITApO2UubGVuZ3RoJiYoaz1lW2UubGVuZ3RoLTFdKTtkLl9pPWgoayYmay5faSwtMSkrMTthLm9yZGVyU2VyaWVzKHRoaXMuaW5zZXJ0KGUpKTtsKHRoaXMsXCJhZnRlckluaXRcIil9LGluc2VydDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLm9wdGlvbnMuaW5kZXgsZDtpZihDKGIpKXtmb3IoZD1hLmxlbmd0aDtkLS07KWlmKGI+PVxuaChhW2RdLm9wdGlvbnMuaW5kZXgsYVtkXS5faSkpe2Euc3BsaWNlKGQrMSwwLHRoaXMpO2JyZWFrfS0xPT09ZCYmYS51bnNoaWZ0KHRoaXMpO2QrPTF9ZWxzZSBhLnB1c2godGhpcyk7cmV0dXJuIGgoZCxhLmxlbmd0aC0xKX0sYmluZEF4ZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5vcHRpb25zLGQ9YS5jaGFydCxlO2wodGhpcyxcImJpbmRBeGVzXCIsbnVsbCxmdW5jdGlvbigpeyhhLmF4aXNUeXBlc3x8W10pLmZvckVhY2goZnVuY3Rpb24oayl7ZFtrXS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2U9ZC5vcHRpb25zO2lmKGJba109PT1lLmluZGV4fHx2b2lkIDAhPT1iW2tdJiZiW2tdPT09ZS5pZHx8dm9pZCAwPT09YltrXSYmMD09PWUuaW5kZXgpYS5pbnNlcnQoZC5zZXJpZXMpLGFba109ZCxkLmlzRGlydHk9ITB9KTthW2tdfHxhLm9wdGlvbmFsQXhpcz09PWt8fGMuZXJyb3IoMTgsITAsZCl9KX0pfSx1cGRhdGVQYXJhbGxlbEFycmF5czpmdW5jdGlvbihhLGIpe3ZhciBkPWEuc2VyaWVzLFxuYz1hcmd1bWVudHMsZT1DKGIpP2Z1bmN0aW9uKGMpe3ZhciBlPVwieVwiPT09YyYmZC50b1lEYXRhP2QudG9ZRGF0YShhKTphW2NdO2RbYytcIkRhdGFcIl1bYl09ZX06ZnVuY3Rpb24oYSl7QXJyYXkucHJvdG90eXBlW2JdLmFwcGx5KGRbYStcIkRhdGFcIl0sQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYywyKSl9O2QucGFyYWxsZWxBcnJheXMuZm9yRWFjaChlKX0saGFzRGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpc2libGUmJnZvaWQgMCE9PXRoaXMuZGF0YU1heCYmdm9pZCAwIT09dGhpcy5kYXRhTWlufHx0aGlzLnZpc2libGUmJnRoaXMueURhdGEmJjA8dGhpcy55RGF0YS5sZW5ndGh9LGF1dG9JbmNyZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMsYj10aGlzLnhJbmNyZW1lbnQsZCxjPWEucG9pbnRJbnRlcnZhbFVuaXQsZT10aGlzLmNoYXJ0LnRpbWU7Yj1oKGIsYS5wb2ludFN0YXJ0LDApO3RoaXMucG9pbnRJbnRlcnZhbD1kPWgodGhpcy5wb2ludEludGVydmFsLFxuYS5wb2ludEludGVydmFsLDEpO2MmJihhPW5ldyBlLkRhdGUoYiksXCJkYXlcIj09PWM/ZS5zZXQoXCJEYXRlXCIsYSxlLmdldChcIkRhdGVcIixhKStkKTpcIm1vbnRoXCI9PT1jP2Uuc2V0KFwiTW9udGhcIixhLGUuZ2V0KFwiTW9udGhcIixhKStkKTpcInllYXJcIj09PWMmJmUuc2V0KFwiRnVsbFllYXJcIixhLGUuZ2V0KFwiRnVsbFllYXJcIixhKStkKSxkPWEuZ2V0VGltZSgpLWIpO3RoaXMueEluY3JlbWVudD1iK2Q7cmV0dXJuIGJ9LHNldE9wdGlvbnM6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jaGFydCxjPWIub3B0aW9ucyxlPWMucGxvdE9wdGlvbnMsaz1iLnVzZXJPcHRpb25zfHx7fTthPUwoYSk7Yj1iLnN0eWxlZE1vZGU7dmFyIGc9e3Bsb3RPcHRpb25zOmUsdXNlck9wdGlvbnM6YX07bCh0aGlzLFwic2V0T3B0aW9uc1wiLGcpO3ZhciBmPWcucGxvdE9wdGlvbnNbdGhpcy50eXBlXSxwPWsucGxvdE9wdGlvbnN8fHt9O3RoaXMudXNlck9wdGlvbnM9Zy51c2VyT3B0aW9ucztrPUwoZixlLnNlcmllcyxrLnBsb3RPcHRpb25zJiZcbmsucGxvdE9wdGlvbnNbdGhpcy50eXBlXSxhKTt0aGlzLnRvb2x0aXBPcHRpb25zPUwoZC50b29sdGlwLGQucGxvdE9wdGlvbnMuc2VyaWVzJiZkLnBsb3RPcHRpb25zLnNlcmllcy50b29sdGlwLGQucGxvdE9wdGlvbnNbdGhpcy50eXBlXS50b29sdGlwLGMudG9vbHRpcC51c2VyT3B0aW9ucyxlLnNlcmllcyYmZS5zZXJpZXMudG9vbHRpcCxlW3RoaXMudHlwZV0udG9vbHRpcCxhLnRvb2x0aXApO3RoaXMuc3RpY2t5VHJhY2tpbmc9aChhLnN0aWNreVRyYWNraW5nLHBbdGhpcy50eXBlXSYmcFt0aGlzLnR5cGVdLnN0aWNreVRyYWNraW5nLHAuc2VyaWVzJiZwLnNlcmllcy5zdGlja3lUcmFja2luZyx0aGlzLnRvb2x0aXBPcHRpb25zLnNoYXJlZCYmIXRoaXMubm9TaGFyZWRUb29sdGlwPyEwOmsuc3RpY2t5VHJhY2tpbmcpO251bGw9PT1mLm1hcmtlciYmZGVsZXRlIGsubWFya2VyO3RoaXMuem9uZUF4aXM9ay56b25lQXhpcztjPXRoaXMuem9uZXM9KGsuem9uZXN8fFtdKS5zbGljZSgpO1xuIWsubmVnYXRpdmVDb2xvciYmIWsubmVnYXRpdmVGaWxsQ29sb3J8fGsuem9uZXN8fChlPXt2YWx1ZTprW3RoaXMuem9uZUF4aXMrXCJUaHJlc2hvbGRcIl18fGsudGhyZXNob2xkfHwwLGNsYXNzTmFtZTpcImhpZ2hjaGFydHMtbmVnYXRpdmVcIn0sYnx8KGUuY29sb3I9ay5uZWdhdGl2ZUNvbG9yLGUuZmlsbENvbG9yPWsubmVnYXRpdmVGaWxsQ29sb3IpLGMucHVzaChlKSk7Yy5sZW5ndGgmJnooY1tjLmxlbmd0aC0xXS52YWx1ZSkmJmMucHVzaChiP3t9Ontjb2xvcjp0aGlzLmNvbG9yLGZpbGxDb2xvcjp0aGlzLmZpbGxDb2xvcn0pO2wodGhpcyxcImFmdGVyU2V0T3B0aW9uc1wiLHtvcHRpb25zOmt9KTtyZXR1cm4ga30sZ2V0TmFtZTpmdW5jdGlvbigpe3JldHVybiBoKHRoaXMub3B0aW9ucy5uYW1lLFwiU2VyaWVzIFwiKyh0aGlzLmluZGV4KzEpKX0sZ2V0Q3ljbGljOmZ1bmN0aW9uKGEsYixkKXt2YXIgYz10aGlzLmNoYXJ0LGU9dGhpcy51c2VyT3B0aW9ucyxrPWErXCJJbmRleFwiLGc9YStcIkNvdW50ZXJcIixcbmY9ZD9kLmxlbmd0aDpoKGMub3B0aW9ucy5jaGFydFthK1wiQ291bnRcIl0sY1thK1wiQ291bnRcIl0pO2lmKCFiKXt2YXIgcj1oKGVba10sZVtcIl9cIitrXSk7eihyKXx8KGMuc2VyaWVzLmxlbmd0aHx8KGNbZ109MCksZVtcIl9cIitrXT1yPWNbZ10lZixjW2ddKz0xKTtkJiYoYj1kW3JdKX12b2lkIDAhPT1yJiYodGhpc1trXT1yKTt0aGlzW2FdPWJ9LGdldENvbG9yOmZ1bmN0aW9uKCl7dGhpcy5jaGFydC5zdHlsZWRNb2RlP3RoaXMuZ2V0Q3ljbGljKFwiY29sb3JcIik6dGhpcy5vcHRpb25zLmNvbG9yQnlQb2ludD90aGlzLm9wdGlvbnMuY29sb3I9bnVsbDp0aGlzLmdldEN5Y2xpYyhcImNvbG9yXCIsdGhpcy5vcHRpb25zLmNvbG9yfHxlW3RoaXMudHlwZV0uY29sb3IsdGhpcy5jaGFydC5vcHRpb25zLmNvbG9ycyl9LGdldFN5bWJvbDpmdW5jdGlvbigpe3RoaXMuZ2V0Q3ljbGljKFwic3ltYm9sXCIsdGhpcy5vcHRpb25zLm1hcmtlci5zeW1ib2wsdGhpcy5jaGFydC5vcHRpb25zLnN5bWJvbHMpfSxmaW5kUG9pbnRJbmRleDpmdW5jdGlvbihhLFxuYil7dmFyIGQ9YS5pZDthPWEueDt2YXIgYz10aGlzLnBvaW50cyxlO2lmKGQpe3ZhciBrPShkPXRoaXMuY2hhcnQuZ2V0KGQpKSYmZC5pbmRleDt2b2lkIDAhPT1rJiYoZT0hMCl9dm9pZCAwPT09ayYmQyhhKSYmKGs9dGhpcy54RGF0YS5pbmRleE9mKGEsYikpOy0xIT09ayYmdm9pZCAwIT09ayYmdGhpcy5jcm9wcGVkJiYoaz1rPj10aGlzLmNyb3BTdGFydD9rLXRoaXMuY3JvcFN0YXJ0OmspOyFlJiZjW2tdJiZjW2tdLnRvdWNoZWQmJihrPXZvaWQgMCk7cmV0dXJuIGt9LGRyYXdMZWdlbmRTeW1ib2w6Yy5MZWdlbmRTeW1ib2xNaXhpbi5kcmF3TGluZU1hcmtlcix1cGRhdGVEYXRhOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9ucyxkPXRoaXMucG9pbnRzLGM9W10sZSxrLGcsaD10aGlzLnJlcXVpcmVTb3J0aW5nLGY9YS5sZW5ndGg9PT1kLmxlbmd0aCxsPSEwO3RoaXMueEluY3JlbWVudD1udWxsO2EuZm9yRWFjaChmdW5jdGlvbihhLGspe3ZhciBtPXooYSkmJnRoaXMucG9pbnRDbGFzcy5wcm90b3R5cGUub3B0aW9uc1RvT2JqZWN0LmNhbGwoe3Nlcmllczp0aGlzfSxcbmEpfHx7fTt2YXIgcj1tLng7aWYobS5pZHx8QyhyKSlpZihyPXRoaXMuZmluZFBvaW50SW5kZXgobSxnKSwtMT09PXJ8fHZvaWQgMD09PXI/Yy5wdXNoKGEpOmRbcl0mJmEhPT1iLmRhdGFbcl0/KGRbcl0udXBkYXRlKGEsITEsbnVsbCwhMSksZFtyXS50b3VjaGVkPSEwLGgmJihnPXIrMSkpOmRbcl0mJihkW3JdLnRvdWNoZWQ9ITApLCFmfHxrIT09cnx8dGhpcy5oYXNEZXJpdmVkRGF0YSllPSEwfSx0aGlzKTtpZihlKWZvcihhPWQubGVuZ3RoO2EtLTspKGs9ZFthXSkmJiFrLnRvdWNoZWQmJmsucmVtb3ZlKCExKTtlbHNlIGY/YS5mb3JFYWNoKGZ1bmN0aW9uKGEsYil7ZFtiXS51cGRhdGUmJmEhPT1kW2JdLnkmJmRbYl0udXBkYXRlKGEsITEsbnVsbCwhMSl9KTpsPSExO2QuZm9yRWFjaChmdW5jdGlvbihhKXthJiYoYS50b3VjaGVkPSExKX0pO2lmKCFsKXJldHVybiExO2MuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLmFkZFBvaW50KGEsITEsbnVsbCxudWxsLCExKX0sdGhpcyk7cmV0dXJuITB9LFxuc2V0RGF0YTpmdW5jdGlvbihhLGIsZCxlKXt2YXIgaz10aGlzLGc9ay5wb2ludHMsZj1nJiZnLmxlbmd0aHx8MCxyLGw9ay5vcHRpb25zLHA9ay5jaGFydCx4PW51bGwsQT1rLnhBeGlzO3g9bC50dXJib1RocmVzaG9sZDt2YXIgdT10aGlzLnhEYXRhLG49dGhpcy55RGF0YSxxPShyPWsucG9pbnRBcnJheU1hcCkmJnIubGVuZ3RoLHk9bC5rZXlzLHQ9MCxFPTEsTDthPWF8fFtdO3I9YS5sZW5ndGg7Yj1oKGIsITApOyExIT09ZSYmciYmZiYmIWsuY3JvcHBlZCYmIWsuaGFzR3JvdXBlZERhdGEmJmsudmlzaWJsZSYmIWsuaXNTZXJpZXNCb29zdGluZyYmKEw9dGhpcy51cGRhdGVEYXRhKGEpKTtpZighTCl7ay54SW5jcmVtZW50PW51bGw7ay5jb2xvckNvdW50ZXI9MDt0aGlzLnBhcmFsbGVsQXJyYXlzLmZvckVhY2goZnVuY3Rpb24oYSl7a1thK1wiRGF0YVwiXS5sZW5ndGg9MH0pO2lmKHgmJnI+eClpZih4PWsuZ2V0Rmlyc3RWYWxpZFBvaW50KGEpLEMoeCkpZm9yKGQ9MDtkPHI7ZCsrKXVbZF09XG50aGlzLmF1dG9JbmNyZW1lbnQoKSxuW2RdPWFbZF07ZWxzZSBpZih2KHgpKWlmKHEpZm9yKGQ9MDtkPHI7ZCsrKWU9YVtkXSx1W2RdPWVbMF0sbltkXT1lLnNsaWNlKDEscSsxKTtlbHNlIGZvcih5JiYodD15LmluZGV4T2YoXCJ4XCIpLEU9eS5pbmRleE9mKFwieVwiKSx0PTA8PXQ/dDowLEU9MDw9RT9FOjEpLGQ9MDtkPHI7ZCsrKWU9YVtkXSx1W2RdPWVbdF0sbltkXT1lW0VdO2Vsc2UgYy5lcnJvcigxMiwhMSxwKTtlbHNlIGZvcihkPTA7ZDxyO2QrKyl2b2lkIDAhPT1hW2RdJiYoZT17c2VyaWVzOmt9LGsucG9pbnRDbGFzcy5wcm90b3R5cGUuYXBwbHlPcHRpb25zLmFwcGx5KGUsW2FbZF1dKSxrLnVwZGF0ZVBhcmFsbGVsQXJyYXlzKGUsZCkpO24mJkgoblswXSkmJmMuZXJyb3IoMTQsITAscCk7ay5kYXRhPVtdO2sub3B0aW9ucy5kYXRhPWsudXNlck9wdGlvbnMuZGF0YT1hO2ZvcihkPWY7ZC0tOylnW2RdJiZnW2RdLmRlc3Ryb3kmJmdbZF0uZGVzdHJveSgpO0EmJihBLm1pblJhbmdlPVxuQS51c2VyTWluUmFuZ2UpO2suaXNEaXJ0eT1wLmlzRGlydHlCb3g9ITA7ay5pc0RpcnR5RGF0YT0hIWc7ZD0hMX1cInBvaW50XCI9PT1sLmxlZ2VuZFR5cGUmJih0aGlzLnByb2Nlc3NEYXRhKCksdGhpcy5nZW5lcmF0ZVBvaW50cygpKTtiJiZwLnJlZHJhdyhkKX0scHJvY2Vzc0RhdGE6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54RGF0YSxkPXRoaXMueURhdGEsZT1iLmxlbmd0aDt2YXIgaz0wO3ZhciBnPXRoaXMueEF4aXMsaD10aGlzLm9wdGlvbnM7dmFyIGY9aC5jcm9wVGhyZXNob2xkO3ZhciBsPXRoaXMuZ2V0RXh0cmVtZXNGcm9tQWxsfHxoLmdldEV4dHJlbWVzRnJvbUFsbCxwPXRoaXMuaXNDYXJ0ZXNpYW47aD1nJiZnLnZhbDJsaW47dmFyIHU9ZyYmZy5pc0xvZyxuPXRoaXMucmVxdWlyZVNvcnRpbmc7aWYocCYmIXRoaXMuaXNEaXJ0eSYmIWcuaXNEaXJ0eSYmIXRoaXMueUF4aXMuaXNEaXJ0eSYmIWEpcmV0dXJuITE7aWYoZyl7YT1nLmdldEV4dHJlbWVzKCk7dmFyIHE9YS5taW47XG52YXIgdj1hLm1heH1pZihwJiZ0aGlzLnNvcnRlZCYmIWwmJighZnx8ZT5mfHx0aGlzLmZvcmNlQ3JvcCkpaWYoYltlLTFdPHF8fGJbMF0+diliPVtdLGQ9W107ZWxzZSBpZih0aGlzLnlEYXRhJiYoYlswXTxxfHxiW2UtMV0+dikpe2s9dGhpcy5jcm9wRGF0YSh0aGlzLnhEYXRhLHRoaXMueURhdGEscSx2KTtiPWsueERhdGE7ZD1rLnlEYXRhO2s9ay5zdGFydDt2YXIgeT0hMH1mb3IoZj1iLmxlbmd0aHx8MTstLWY7KWlmKGU9dT9oKGJbZl0pLWgoYltmLTFdKTpiW2ZdLWJbZi0xXSwwPGUmJih2b2lkIDA9PT10fHxlPHQpKXZhciB0PWU7ZWxzZSAwPmUmJm4mJihjLmVycm9yKDE1LCExLHRoaXMuY2hhcnQpLG49ITEpO3RoaXMuY3JvcHBlZD15O3RoaXMuY3JvcFN0YXJ0PWs7dGhpcy5wcm9jZXNzZWRYRGF0YT1iO3RoaXMucHJvY2Vzc2VkWURhdGE9ZDt0aGlzLmNsb3Nlc3RQb2ludFJhbmdlPXRoaXMuYmFzZVBvaW50UmFuZ2U9dH0sY3JvcERhdGE6ZnVuY3Rpb24oYSxiLGQsZSxjKXt2YXIgaz1cbmEubGVuZ3RoLGc9MCxmPWsscjtjPWgoYyx0aGlzLmNyb3BTaG91bGRlcik7Zm9yKHI9MDtyPGs7cisrKWlmKGFbcl0+PWQpe2c9TWF0aC5tYXgoMCxyLWMpO2JyZWFrfWZvcihkPXI7ZDxrO2QrKylpZihhW2RdPmUpe2Y9ZCtjO2JyZWFrfXJldHVybnt4RGF0YTphLnNsaWNlKGcsZikseURhdGE6Yi5zbGljZShnLGYpLHN0YXJ0OmcsZW5kOmZ9fSxnZW5lcmF0ZVBvaW50czpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucyxiPWEuZGF0YSxkPXRoaXMuZGF0YSxlLGM9dGhpcy5wcm9jZXNzZWRYRGF0YSxnPXRoaXMucHJvY2Vzc2VkWURhdGEsZj10aGlzLnBvaW50Q2xhc3MsaD1jLmxlbmd0aCxwPXRoaXMuY3JvcFN0YXJ0fHwwLHU9dGhpcy5oYXNHcm91cGVkRGF0YTthPWEua2V5czt2YXIgcT1bXSx2O2R8fHV8fChkPVtdLGQubGVuZ3RoPWIubGVuZ3RoLGQ9dGhpcy5kYXRhPWQpO2EmJnUmJih0aGlzLm9wdGlvbnMua2V5cz0hMSk7Zm9yKHY9MDt2PGg7disrKXt2YXIgeT1wK3Y7aWYodSl7dmFyIEU9XG4obmV3IGYpLmluaXQodGhpcyxbY1t2XV0uY29uY2F0KG4oZ1t2XSkpKTtFLmRhdGFHcm91cD10aGlzLmdyb3VwTWFwW3ZdO0UuZGF0YUdyb3VwLm9wdGlvbnMmJihFLm9wdGlvbnM9RS5kYXRhR3JvdXAub3B0aW9ucyx0KEUsRS5kYXRhR3JvdXAub3B0aW9ucyksZGVsZXRlIEUuZGF0YUxhYmVscyl9ZWxzZShFPWRbeV0pfHx2b2lkIDA9PT1iW3ldfHwoZFt5XT1FPShuZXcgZikuaW5pdCh0aGlzLGJbeV0sY1t2XSkpO0UmJihFLmluZGV4PXkscVt2XT1FKX10aGlzLm9wdGlvbnMua2V5cz1hO2lmKGQmJihoIT09KGU9ZC5sZW5ndGgpfHx1KSlmb3Iodj0wO3Y8ZTt2KyspdiE9PXB8fHV8fCh2Kz1oKSxkW3ZdJiYoZFt2XS5kZXN0cm95RWxlbWVudHMoKSxkW3ZdLnBsb3RYPXZvaWQgMCk7dGhpcy5kYXRhPWQ7dGhpcy5wb2ludHM9cTtsKHRoaXMsXCJhZnRlckdlbmVyYXRlUG9pbnRzXCIpfSxnZXRYRXh0cmVtZXM6ZnVuY3Rpb24oYSl7cmV0dXJue21pbjpHKGEpLG1heDpGKGEpfX0sZ2V0RXh0cmVtZXM6ZnVuY3Rpb24oYSl7dmFyIGI9XG50aGlzLnhBeGlzLGQ9dGhpcy55QXhpcyxlPXRoaXMucHJvY2Vzc2VkWERhdGF8fHRoaXMueERhdGEsYz1bXSxrPTAsZz0wO3ZhciBmPTA7dmFyIGg9dGhpcy5yZXF1aXJlU29ydGluZz90aGlzLmNyb3BTaG91bGRlcjowLHA9ZD9kLnBvc2l0aXZlVmFsdWVzT25seTohMSx1O2E9YXx8dGhpcy5zdGFja2VkWURhdGF8fHRoaXMucHJvY2Vzc2VkWURhdGF8fFtdO2Q9YS5sZW5ndGg7YiYmKGY9Yi5nZXRFeHRyZW1lcygpLGc9Zi5taW4sZj1mLm1heCk7Zm9yKHU9MDt1PGQ7dSsrKXt2YXIgbj1lW3VdO3ZhciBxPWFbdV07dmFyIHk9KEMocSl8fHYocSkpJiYocS5sZW5ndGh8fDA8cXx8IXApO249dGhpcy5nZXRFeHRyZW1lc0Zyb21BbGx8fHRoaXMub3B0aW9ucy5nZXRFeHRyZW1lc0Zyb21BbGx8fHRoaXMuY3JvcHBlZHx8IWJ8fChlW3UraF18fG4pPj1nJiYoZVt1LWhdfHxuKTw9ZjtpZih5JiZuKWlmKHk9cS5sZW5ndGgpZm9yKDt5LS07KUMocVt5XSkmJihjW2srK109cVt5XSk7ZWxzZSBjW2srK109XG5xfXRoaXMuZGF0YU1pbj1HKGMpO3RoaXMuZGF0YU1heD1GKGMpO2wodGhpcyxcImFmdGVyR2V0RXh0cmVtZXNcIil9LGdldEZpcnN0VmFsaWRQb2ludDpmdW5jdGlvbihhKXtmb3IodmFyIGI9bnVsbCxkPWEubGVuZ3RoLGU9MDtudWxsPT09YiYmZTxkOyliPWFbZV0sZSsrO3JldHVybiBifSx0cmFuc2xhdGU6ZnVuY3Rpb24oKXt0aGlzLnByb2Nlc3NlZFhEYXRhfHx0aGlzLnByb2Nlc3NEYXRhKCk7dGhpcy5nZW5lcmF0ZVBvaW50cygpO3ZhciBiPXRoaXMub3B0aW9ucyxkPWIuc3RhY2tpbmcsZT10aGlzLnhBeGlzLGM9ZS5jYXRlZ29yaWVzLGc9dGhpcy55QXhpcyxtPXRoaXMucG9pbnRzLGY9bS5sZW5ndGgscD0hIXRoaXMubW9kaWZ5VmFsdWUsdSxuPXRoaXMucG9pbnRQbGFjZW1lbnRUb1hWYWx1ZSgpLHE9QyhuKSx5PWIudGhyZXNob2xkLHQ9Yi5zdGFydEZyb21UaHJlc2hvbGQ/eTowLEUsTD10aGlzLnpvbmVBeGlzfHxcInlcIixCPU51bWJlci5NQVhfVkFMVUU7Zm9yKHU9MDt1PGY7dSsrKXt2YXIgSD1cbm1bdV0sRz1ILng7dmFyIEY9SC55O3ZhciBJPUgubG93LE09ZCYmZy5zdGFja3NbKHRoaXMubmVnU3RhY2tzJiZGPCh0PzA6eSk/XCItXCI6XCJcIikrdGhpcy5zdGFja0tleV07Zy5wb3NpdGl2ZVZhbHVlc09ubHkmJm51bGwhPT1GJiYwPj1GJiYoSC5pc051bGw9ITApO0gucGxvdFg9RT1hKE1hdGgubWluKE1hdGgubWF4KC0xRTUsZS50cmFuc2xhdGUoRywwLDAsMCwxLG4sXCJmbGFnc1wiPT09dGhpcy50eXBlKSksMUU1KSk7aWYoZCYmdGhpcy52aXNpYmxlJiZNJiZNW0ddKXt2YXIgWD10aGlzLmdldFN0YWNrSW5kaWNhdG9yKFgsRyx0aGlzLmluZGV4KTtpZighSC5pc051bGwpe3ZhciBQPU1bR107dmFyIFk9UC5wb2ludHNbWC5rZXldfX12KFkpJiYoST1ZWzBdLEY9WVsxXSxJPT09dCYmWC5rZXk9PT1NW0ddLmJhc2UmJihJPWgoQyh5KSYmeSxnLm1pbikpLGcucG9zaXRpdmVWYWx1ZXNPbmx5JiYwPj1JJiYoST1udWxsKSxILnRvdGFsPUguc3RhY2tUb3RhbD1QLnRvdGFsLEgucGVyY2VudGFnZT1cblAudG90YWwmJkgueS9QLnRvdGFsKjEwMCxILnN0YWNrWT1GLHRoaXMuaXJyZWd1bGFyV2lkdGhzfHxQLnNldE9mZnNldCh0aGlzLnBvaW50WE9mZnNldHx8MCx0aGlzLmJhcld8fDApKTtILnlCb3R0b209eihJKT9NYXRoLm1pbihNYXRoLm1heCgtMUU1LGcudHJhbnNsYXRlKEksMCwxLDAsMSkpLDFFNSk6bnVsbDtwJiYoRj10aGlzLm1vZGlmeVZhbHVlKEYsSCkpO0gucGxvdFk9Rj1cIm51bWJlclwiPT09dHlwZW9mIEYmJkluZmluaXR5IT09Rj9NYXRoLm1pbihNYXRoLm1heCgtMUU1LGcudHJhbnNsYXRlKEYsMCwxLDAsMSkpLDFFNSk6dm9pZCAwO0guaXNJbnNpZGU9dm9pZCAwIT09RiYmMDw9RiYmRjw9Zy5sZW4mJjA8PUUmJkU8PWUubGVuO0guY2xpZW50WD1xP2EoZS50cmFuc2xhdGUoRywwLDAsMCwxLG4pKTpFO0gubmVnYXRpdmU9SFtMXTwoYltMK1wiVGhyZXNob2xkXCJdfHx5fHwwKTtILmNhdGVnb3J5PWMmJnZvaWQgMCE9PWNbSC54XT9jW0gueF06SC54O2lmKCFILmlzTnVsbCl7dm9pZCAwIT09XG5aJiYoQj1NYXRoLm1pbihCLE1hdGguYWJzKEUtWikpKTt2YXIgWj1FfUguem9uZT10aGlzLnpvbmVzLmxlbmd0aCYmSC5nZXRab25lKCl9dGhpcy5jbG9zZXN0UG9pbnRSYW5nZVB4PUI7bCh0aGlzLFwiYWZ0ZXJUcmFuc2xhdGVcIil9LGdldFZhbGlkUG9pbnRzOmZ1bmN0aW9uKGEsYixkKXt2YXIgZT10aGlzLmNoYXJ0O3JldHVybihhfHx0aGlzLnBvaW50c3x8W10pLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYiYmIWUuaXNJbnNpZGVQbG90KGEucGxvdFgsYS5wbG90WSxlLmludmVydGVkKT8hMTpkfHwhYS5pc051bGx9KX0sZ2V0Q2xpcEJveDpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMub3B0aW9ucyxlPXRoaXMuY2hhcnQsYz1lLmludmVydGVkLGs9dGhpcy54QXhpcyxnPWsmJnRoaXMueUF4aXM7YSYmITE9PT1kLmNsaXAmJmc/YT1jP3t5Oi1lLmNoYXJ0V2lkdGgrZy5sZW4rZy5wb3MsaGVpZ2h0OmUuY2hhcnRXaWR0aCx3aWR0aDplLmNoYXJ0SGVpZ2h0LHg6LWUuY2hhcnRIZWlnaHQrXG5rLmxlbitrLnBvc306e3k6LWcucG9zLGhlaWdodDplLmNoYXJ0SGVpZ2h0LHdpZHRoOmUuY2hhcnRXaWR0aCx4Oi1rLnBvc306KGE9dGhpcy5jbGlwQm94fHxlLmNsaXBCb3gsYiYmKGEud2lkdGg9ZS5wbG90U2l6ZVgsYS54PTApKTtyZXR1cm4gYj97d2lkdGg6YS53aWR0aCx4OmEueH06YX0sc2V0Q2xpcDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNoYXJ0LGQ9dGhpcy5vcHRpb25zLGU9Yi5yZW5kZXJlcixjPWIuaW52ZXJ0ZWQsaz10aGlzLmNsaXBCb3gsZz10aGlzLmdldENsaXBCb3goYSksZj10aGlzLnNoYXJlZENsaXBLZXl8fFtcIl9zaGFyZWRDbGlwXCIsYSYmYS5kdXJhdGlvbixhJiZhLmVhc2luZyxnLmhlaWdodCxkLnhBeGlzLGQueUF4aXNdLmpvaW4oKSxoPWJbZl0sbD1iW2YrXCJtXCJdO2h8fChhJiYoZy53aWR0aD0wLGMmJihnLng9Yi5wbG90U2l6ZVgrKCExIT09ZC5jbGlwPzA6Yi5wbG90VG9wKSksYltmK1wibVwiXT1sPWUuY2xpcFJlY3QoYz9iLnBsb3RTaXplWCs5OTotOTksXG5jPy1iLnBsb3RMZWZ0Oi1iLnBsb3RUb3AsOTksYz9iLmNoYXJ0V2lkdGg6Yi5jaGFydEhlaWdodCkpLGJbZl09aD1lLmNsaXBSZWN0KGcpLGguY291bnQ9e2xlbmd0aDowfSk7YSYmIWguY291bnRbdGhpcy5pbmRleF0mJihoLmNvdW50W3RoaXMuaW5kZXhdPSEwLGguY291bnQubGVuZ3RoKz0xKTtpZighMSE9PWQuY2xpcHx8YSl0aGlzLmdyb3VwLmNsaXAoYXx8az9oOmIuY2xpcFJlY3QpLHRoaXMubWFya2VyR3JvdXAuY2xpcChsKSx0aGlzLnNoYXJlZENsaXBLZXk9ZjthfHwoaC5jb3VudFt0aGlzLmluZGV4XSYmKGRlbGV0ZSBoLmNvdW50W3RoaXMuaW5kZXhdLC0taC5jb3VudC5sZW5ndGgpLDA9PT1oLmNvdW50Lmxlbmd0aCYmZiYmYltmXSYmKGt8fChiW2ZdPWJbZl0uZGVzdHJveSgpKSxiW2YrXCJtXCJdJiYoYltmK1wibVwiXT1iW2YrXCJtXCJdLmRlc3Ryb3koKSkpKX0sYW5pbWF0ZTpmdW5jdGlvbihhKXt2YXIgZD10aGlzLmNoYXJ0LGU9Yih0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKTtcbmlmKGEpdGhpcy5zZXRDbGlwKGUpO2Vsc2V7dmFyIGM9dGhpcy5zaGFyZWRDbGlwS2V5O2E9ZFtjXTt2YXIgaz10aGlzLmdldENsaXBCb3goZSwhMCk7YSYmYS5hbmltYXRlKGssZSk7ZFtjK1wibVwiXSYmZFtjK1wibVwiXS5hbmltYXRlKHt3aWR0aDprLndpZHRoKzk5LHg6ay54LShkLmludmVydGVkPzA6OTkpfSxlKTt0aGlzLmFuaW1hdGU9bnVsbH19LGFmdGVyQW5pbWF0ZTpmdW5jdGlvbigpe3RoaXMuc2V0Q2xpcCgpO2wodGhpcyxcImFmdGVyQW5pbWF0ZVwiKTt0aGlzLmZpbmlzaGVkQW5pbWF0aW5nPSEwfSxkcmF3UG9pbnRzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wb2ludHMsYj10aGlzLmNoYXJ0LGQsZT10aGlzLm9wdGlvbnMubWFya2VyLGM9dGhpc1t0aGlzLnNwZWNpYWxHcm91cF18fHRoaXMubWFya2VyR3JvdXA7dmFyIGc9dGhpcy54QXhpczt2YXIgZj1oKGUuZW5hYmxlZCwhZ3x8Zy5pc1JhZGlhbD8hMDpudWxsLHRoaXMuY2xvc2VzdFBvaW50UmFuZ2VQeD49ZS5lbmFibGVkVGhyZXNob2xkKlxuZS5yYWRpdXMpO2lmKCExIT09ZS5lbmFibGVkfHx0aGlzLl9oYXNQb2ludE1hcmtlcnMpZm9yKGc9MDtnPGEubGVuZ3RoO2crKyl7dmFyIGw9YVtnXTt2YXIgcD0oZD1sLmdyYXBoaWMpP1wiYW5pbWF0ZVwiOlwiYXR0clwiO3ZhciB1PWwubWFya2VyfHx7fTt2YXIgbj0hIWwubWFya2VyO3ZhciBxPWYmJnZvaWQgMD09PXUuZW5hYmxlZHx8dS5lbmFibGVkO3ZhciB2PSExIT09bC5pc0luc2lkZTtpZihxJiYhbC5pc051bGwpe3ZhciB5PWgodS5zeW1ib2wsdGhpcy5zeW1ib2wpO3E9dGhpcy5tYXJrZXJBdHRyaWJzKGwsbC5zZWxlY3RlZCYmXCJzZWxlY3RcIik7ZD9kW3Y/XCJzaG93XCI6XCJoaWRlXCJdKHYpLmFuaW1hdGUocSk6diYmKDA8cS53aWR0aHx8bC5oYXNJbWFnZSkmJihsLmdyYXBoaWM9ZD1iLnJlbmRlcmVyLnN5bWJvbCh5LHEueCxxLnkscS53aWR0aCxxLmhlaWdodCxuP3U6ZSkuYWRkKGMpKTtpZihkJiYhYi5zdHlsZWRNb2RlKWRbcF0odGhpcy5wb2ludEF0dHJpYnMobCxsLnNlbGVjdGVkJiZcblwic2VsZWN0XCIpKTtkJiZkLmFkZENsYXNzKGwuZ2V0Q2xhc3NOYW1lKCksITApfWVsc2UgZCYmKGwuZ3JhcGhpYz1kLmRlc3Ryb3koKSl9fSxtYXJrZXJBdHRyaWJzOmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcy5vcHRpb25zLm1hcmtlcixlPWEubWFya2VyfHx7fSxjPWUuc3ltYm9sfHxkLnN5bWJvbCxrPWgoZS5yYWRpdXMsZC5yYWRpdXMpO2ImJihkPWQuc3RhdGVzW2JdLGI9ZS5zdGF0ZXMmJmUuc3RhdGVzW2JdLGs9aChiJiZiLnJhZGl1cyxkJiZkLnJhZGl1cyxrKyhkJiZkLnJhZGl1c1BsdXN8fDApKSk7YS5oYXNJbWFnZT1jJiYwPT09Yy5pbmRleE9mKFwidXJsXCIpO2EuaGFzSW1hZ2UmJihrPTApO2E9e3g6TWF0aC5mbG9vcihhLnBsb3RYKS1rLHk6YS5wbG90WS1rfTtrJiYoYS53aWR0aD1hLmhlaWdodD0yKmspO3JldHVybiBhfSxwb2ludEF0dHJpYnM6ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzLm9wdGlvbnMubWFya2VyLGU9YSYmYS5vcHRpb25zLGM9ZSYmZS5tYXJrZXJ8fHt9LFxuaz10aGlzLmNvbG9yLGc9ZSYmZS5jb2xvcixmPWEmJmEuY29sb3I7ZT1oKGMubGluZVdpZHRoLGQubGluZVdpZHRoKTt2YXIgbD1hJiZhLnpvbmUmJmEuem9uZS5jb2xvcjthPTE7az1nfHxsfHxmfHxrO2c9Yy5maWxsQ29sb3J8fGQuZmlsbENvbG9yfHxrO2s9Yy5saW5lQ29sb3J8fGQubGluZUNvbG9yfHxrO2I9Ynx8XCJub3JtYWxcIjtkPWQuc3RhdGVzW2JdO2I9Yy5zdGF0ZXMmJmMuc3RhdGVzW2JdfHx7fTtlPWgoYi5saW5lV2lkdGgsZC5saW5lV2lkdGgsZStoKGIubGluZVdpZHRoUGx1cyxkLmxpbmVXaWR0aFBsdXMsMCkpO2c9Yi5maWxsQ29sb3J8fGQuZmlsbENvbG9yfHxnO2s9Yi5saW5lQ29sb3J8fGQubGluZUNvbG9yfHxrO2E9aChiLm9wYWNpdHksZC5vcGFjaXR5LGEpO3JldHVybntzdHJva2U6ayxcInN0cm9rZS13aWR0aFwiOmUsZmlsbDpnLG9wYWNpdHk6YX19LGRlc3Ryb3k6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxkPWIuY2hhcnQsZT0vQXBwbGVXZWJLaXRcXC81MzMvLnRlc3QodS5uYXZpZ2F0b3IudXNlckFnZW50KSxcbmssZyxmPWIuZGF0YXx8W10saCxuO2woYixcImRlc3Ryb3lcIik7YXx8RShiKTsoYi5heGlzVHlwZXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpeyhuPWJbYV0pJiZuLnNlcmllcyYmKEIobi5zZXJpZXMsYiksbi5pc0RpcnR5PW4uZm9yY2VSZWRyYXc9ITApfSk7Yi5sZWdlbmRJdGVtJiZiLmNoYXJ0LmxlZ2VuZC5kZXN0cm95SXRlbShiKTtmb3IoZz1mLmxlbmd0aDtnLS07KShoPWZbZ10pJiZoLmRlc3Ryb3kmJmguZGVzdHJveSgpO2IucG9pbnRzPW51bGw7Yy5jbGVhclRpbWVvdXQoYi5hbmltYXRpb25UaW1lb3V0KTt5KGIsZnVuY3Rpb24oYSxiKXthIGluc3RhbmNlb2YgcCYmIWEuc3Vydml2ZSYmKGs9ZSYmXCJncm91cFwiPT09Yj9cImhpZGVcIjpcImRlc3Ryb3lcIixhW2tdKCkpfSk7ZC5ob3ZlclNlcmllcz09PWImJihkLmhvdmVyU2VyaWVzPW51bGwpO0IoZC5zZXJpZXMsYik7ZC5vcmRlclNlcmllcygpO3koYixmdW5jdGlvbihkLGUpe2EmJlwiaGNFdmVudHNcIj09PWV8fGRlbGV0ZSBiW2VdfSl9LFxuZ2V0R3JhcGhQYXRoOmZ1bmN0aW9uKGEsYixkKXt2YXIgZT10aGlzLGM9ZS5vcHRpb25zLGs9Yy5zdGVwLGcsZj1bXSxoPVtdLGw7YT1hfHxlLnBvaW50czsoZz1hLnJldmVyc2VkKSYmYS5yZXZlcnNlKCk7KGs9e3JpZ2h0OjEsY2VudGVyOjJ9W2tdfHxrJiYzKSYmZyYmKGs9NC1rKTshYy5jb25uZWN0TnVsbHN8fGJ8fGR8fChhPXRoaXMuZ2V0VmFsaWRQb2ludHMoYSkpO2EuZm9yRWFjaChmdW5jdGlvbihnLG0pe3ZhciByPWcucGxvdFgscD1nLnBsb3RZLHU9YVttLTFdOyhnLmxlZnRDbGlmZnx8dSYmdS5yaWdodENsaWZmKSYmIWQmJihsPSEwKTtnLmlzTnVsbCYmIXooYikmJjA8bT9sPSFjLmNvbm5lY3ROdWxsczpnLmlzTnVsbCYmIWI/bD0hMDooMD09PW18fGw/bT1bXCJNXCIsZy5wbG90WCxnLnBsb3RZXTplLmdldFBvaW50U3BsaW5lP209ZS5nZXRQb2ludFNwbGluZShhLGcsbSk6az8obT0xPT09az9bXCJMXCIsdS5wbG90WCxwXToyPT09az9bXCJMXCIsKHUucGxvdFgrcikvMix1LnBsb3RZLFxuXCJMXCIsKHUucGxvdFgrcikvMixwXTpbXCJMXCIscix1LnBsb3RZXSxtLnB1c2goXCJMXCIscixwKSk6bT1bXCJMXCIscixwXSxoLnB1c2goZy54KSxrJiYoaC5wdXNoKGcueCksMj09PWsmJmgucHVzaChnLngpKSxmLnB1c2guYXBwbHkoZixtKSxsPSExKX0pO2YueE1hcD1oO3JldHVybiBlLmdyYXBoUGF0aD1mfSxkcmF3R3JhcGg6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5vcHRpb25zLGQ9KHRoaXMuZ2FwcGVkUGF0aHx8dGhpcy5nZXRHcmFwaFBhdGgpLmNhbGwodGhpcyksZT10aGlzLmNoYXJ0LnN0eWxlZE1vZGUsYz1bW1wiZ3JhcGhcIixcImhpZ2hjaGFydHMtZ3JhcGhcIl1dO2V8fGNbMF0ucHVzaChiLmxpbmVDb2xvcnx8dGhpcy5jb2xvcnx8XCIjY2NjY2NjXCIsYi5kYXNoU3R5bGUpO2M9YS5nZXRab25lc0dyYXBocyhjKTtjLmZvckVhY2goZnVuY3Rpb24oYyxrKXt2YXIgZz1jWzBdLGY9YVtnXSxoPWY/XCJhbmltYXRlXCI6XCJhdHRyXCI7Zj8oZi5lbmRYPWEucHJldmVudEdyYXBoQW5pbWF0aW9uP1xubnVsbDpkLnhNYXAsZi5hbmltYXRlKHtkOmR9KSk6ZC5sZW5ndGgmJihhW2ddPWY9YS5jaGFydC5yZW5kZXJlci5wYXRoKGQpLmFkZENsYXNzKGNbMV0pLmF0dHIoe3pJbmRleDoxfSkuYWRkKGEuZ3JvdXApKTtmJiYhZSYmKGc9e3N0cm9rZTpjWzJdLFwic3Ryb2tlLXdpZHRoXCI6Yi5saW5lV2lkdGgsZmlsbDphLmZpbGxHcmFwaCYmYS5jb2xvcnx8XCJub25lXCJ9LGNbM10/Zy5kYXNoc3R5bGU9Y1szXTpcInNxdWFyZVwiIT09Yi5saW5lY2FwJiYoZ1tcInN0cm9rZS1saW5lY2FwXCJdPWdbXCJzdHJva2UtbGluZWpvaW5cIl09XCJyb3VuZFwiKSxmW2hdKGcpLnNoYWRvdygyPmsmJmIuc2hhZG93KSk7ZiYmKGYuc3RhcnRYPWQueE1hcCxmLmlzQXJlYT1kLmlzQXJlYSl9KX0sZ2V0Wm9uZXNHcmFwaHM6ZnVuY3Rpb24oYSl7dGhpcy56b25lcy5mb3JFYWNoKGZ1bmN0aW9uKGIsZCl7ZD1bXCJ6b25lLWdyYXBoLVwiK2QsXCJoaWdoY2hhcnRzLWdyYXBoIGhpZ2hjaGFydHMtem9uZS1ncmFwaC1cIitkK1wiIFwiKyhiLmNsYXNzTmFtZXx8XG5cIlwiKV07dGhpcy5jaGFydC5zdHlsZWRNb2RlfHxkLnB1c2goYi5jb2xvcnx8dGhpcy5jb2xvcixiLmRhc2hTdHlsZXx8dGhpcy5vcHRpb25zLmRhc2hTdHlsZSk7YS5wdXNoKGQpfSx0aGlzKTtyZXR1cm4gYX0sYXBwbHlab25lczpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLmNoYXJ0LGQ9Yi5yZW5kZXJlcixlPXRoaXMuem9uZXMsYyxnLGY9dGhpcy5jbGlwc3x8W10sbCxwPXRoaXMuZ3JhcGgsdT10aGlzLmFyZWEsbj1NYXRoLm1heChiLmNoYXJ0V2lkdGgsYi5jaGFydEhlaWdodCkscT10aGlzWyh0aGlzLnpvbmVBeGlzfHxcInlcIikrXCJBeGlzXCJdLHY9Yi5pbnZlcnRlZCx5LHQsRSxDPSExO2lmKGUubGVuZ3RoJiYocHx8dSkmJnEmJnZvaWQgMCE9PXEubWluKXt2YXIgTD1xLnJldmVyc2VkO3ZhciB6PXEuaG9yaXo7cCYmIXRoaXMuc2hvd0xpbmUmJnAuaGlkZSgpO3UmJnUuaGlkZSgpO3ZhciBCPXEuZ2V0RXh0cmVtZXMoKTtlLmZvckVhY2goZnVuY3Rpb24oZSxrKXtjPUw/ej9cbmIucGxvdFdpZHRoOjA6ej8wOnEudG9QaXhlbHMoQi5taW4pfHwwO2M9TWF0aC5taW4oTWF0aC5tYXgoaChnLGMpLDApLG4pO2c9TWF0aC5taW4oTWF0aC5tYXgoTWF0aC5yb3VuZChxLnRvUGl4ZWxzKGgoZS52YWx1ZSxCLm1heCksITApfHwwKSwwKSxuKTtDJiYoYz1nPXEudG9QaXhlbHMoQi5tYXgpKTt5PU1hdGguYWJzKGMtZyk7dD1NYXRoLm1pbihjLGcpO0U9TWF0aC5tYXgoYyxnKTtxLmlzWEF4aXM/KGw9e3g6dj9FOnQseTowLHdpZHRoOnksaGVpZ2h0Om59LHp8fChsLng9Yi5wbG90SGVpZ2h0LWwueCkpOihsPXt4OjAseTp2P0U6dCx3aWR0aDpuLGhlaWdodDp5fSx6JiYobC55PWIucGxvdFdpZHRoLWwueSkpO3YmJmQuaXNWTUwmJihsPXEuaXNYQXhpcz97eDowLHk6TD90OkUsaGVpZ2h0Omwud2lkdGgsd2lkdGg6Yi5jaGFydFdpZHRofTp7eDpsLnktYi5wbG90TGVmdC1iLnNwYWNpbmdCb3gueCx5OjAsd2lkdGg6bC5oZWlnaHQsaGVpZ2h0OmIuY2hhcnRIZWlnaHR9KTtmW2tdP1xuZltrXS5hbmltYXRlKGwpOmZba109ZC5jbGlwUmVjdChsKTtwJiZhW1wiem9uZS1ncmFwaC1cIitrXS5jbGlwKGZba10pO3UmJmFbXCJ6b25lLWFyZWEtXCIra10uY2xpcChmW2tdKTtDPWUudmFsdWU+Qi5tYXg7YS5yZXNldFpvbmVzJiYwPT09ZyYmKGc9dm9pZCAwKX0pO3RoaXMuY2xpcHM9Zn1lbHNlIGEudmlzaWJsZSYmKHAmJnAuc2hvdyghMCksdSYmdS5zaG93KCEwKSl9LGludmVydEdyb3VwczpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7W1wiZ3JvdXBcIixcIm1hcmtlckdyb3VwXCJdLmZvckVhY2goZnVuY3Rpb24oYil7ZFtiXSYmKGUucmVuZGVyZXIuaXNWTUwmJmRbYl0uYXR0cih7d2lkdGg6ZC55QXhpcy5sZW4saGVpZ2h0OmQueEF4aXMubGVufSksZFtiXS53aWR0aD1kLnlBeGlzLmxlbixkW2JdLmhlaWdodD1kLnhBeGlzLmxlbixkW2JdLmludmVydChhKSl9KX12YXIgZD10aGlzLGU9ZC5jaGFydDtpZihkLnhBeGlzKXt2YXIgYz1nKGUsXCJyZXNpemVcIixiKTtnKGQsXCJkZXN0cm95XCIsXG5jKTtiKGEpO2QuaW52ZXJ0R3JvdXBzPWJ9fSxwbG90R3JvdXA6ZnVuY3Rpb24oYSxiLGQsZSxjKXt2YXIgaz10aGlzW2FdLGc9IWs7ZyYmKHRoaXNbYV09az10aGlzLmNoYXJ0LnJlbmRlcmVyLmcoKS5hdHRyKHt6SW5kZXg6ZXx8LjF9KS5hZGQoYykpO2suYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLVwiK2IrXCIgaGlnaGNoYXJ0cy1zZXJpZXMtXCIrdGhpcy5pbmRleCtcIiBoaWdoY2hhcnRzLVwiK3RoaXMudHlwZStcIi1zZXJpZXMgXCIrKHoodGhpcy5jb2xvckluZGV4KT9cImhpZ2hjaGFydHMtY29sb3ItXCIrdGhpcy5jb2xvckluZGV4K1wiIFwiOlwiXCIpKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHxcIlwiKSsoay5oYXNDbGFzcyhcImhpZ2hjaGFydHMtdHJhY2tlclwiKT9cIiBoaWdoY2hhcnRzLXRyYWNrZXJcIjpcIlwiKSwhMCk7ay5hdHRyKHt2aXNpYmlsaXR5OmR9KVtnP1wiYXR0clwiOlwiYW5pbWF0ZVwiXSh0aGlzLmdldFBsb3RCb3goKSk7cmV0dXJuIGt9LGdldFBsb3RCb3g6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNoYXJ0LFxuYj10aGlzLnhBeGlzLGQ9dGhpcy55QXhpczthLmludmVydGVkJiYoYj1kLGQ9dGhpcy54QXhpcyk7cmV0dXJue3RyYW5zbGF0ZVg6Yj9iLmxlZnQ6YS5wbG90TGVmdCx0cmFuc2xhdGVZOmQ/ZC50b3A6YS5wbG90VG9wLHNjYWxlWDoxLHNjYWxlWToxfX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxkPWEuY2hhcnQsZT1hLm9wdGlvbnMsYz0hIWEuYW5pbWF0ZSYmZC5yZW5kZXJlci5pc1NWRyYmYihlLmFuaW1hdGlvbikuZHVyYXRpb24sZz1hLnZpc2libGU/XCJpbmhlcml0XCI6XCJoaWRkZW5cIixmPWUuekluZGV4LGg9YS5oYXNSZW5kZXJlZCxwPWQuc2VyaWVzR3JvdXAsdT1kLmludmVydGVkO2wodGhpcyxcInJlbmRlclwiKTt2YXIgbj1hLnBsb3RHcm91cChcImdyb3VwXCIsXCJzZXJpZXNcIixnLGYscCk7YS5tYXJrZXJHcm91cD1hLnBsb3RHcm91cChcIm1hcmtlckdyb3VwXCIsXCJtYXJrZXJzXCIsZyxmLHApO2MmJmEuYW5pbWF0ZSghMCk7bi5pbnZlcnRlZD1hLmlzQ2FydGVzaWFufHxhLmludmVydGFibGU/XG51OiExO2EuZHJhd0dyYXBoJiYoYS5kcmF3R3JhcGgoKSxhLmFwcGx5Wm9uZXMoKSk7YS52aXNpYmxlJiZhLmRyYXdQb2ludHMoKTthLmRyYXdEYXRhTGFiZWxzJiZhLmRyYXdEYXRhTGFiZWxzKCk7YS5yZWRyYXdQb2ludHMmJmEucmVkcmF3UG9pbnRzKCk7YS5kcmF3VHJhY2tlciYmITEhPT1hLm9wdGlvbnMuZW5hYmxlTW91c2VUcmFja2luZyYmYS5kcmF3VHJhY2tlcigpO2EuaW52ZXJ0R3JvdXBzKHUpOyExPT09ZS5jbGlwfHxhLnNoYXJlZENsaXBLZXl8fGh8fG4uY2xpcChkLmNsaXBSZWN0KTtjJiZhLmFuaW1hdGUoKTtofHwoYS5hbmltYXRpb25UaW1lb3V0PXEoZnVuY3Rpb24oKXthLmFmdGVyQW5pbWF0ZSgpfSxjfHwwKSk7YS5pc0RpcnR5PSExO2EuaGFzUmVuZGVyZWQ9ITA7bChhLFwiYWZ0ZXJSZW5kZXJcIil9LHJlZHJhdzpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY2hhcnQsYj10aGlzLmlzRGlydHl8fHRoaXMuaXNEaXJ0eURhdGEsZD10aGlzLmdyb3VwLGU9dGhpcy54QXhpcyxcbmM9dGhpcy55QXhpcztkJiYoYS5pbnZlcnRlZCYmZC5hdHRyKHt3aWR0aDphLnBsb3RXaWR0aCxoZWlnaHQ6YS5wbG90SGVpZ2h0fSksZC5hbmltYXRlKHt0cmFuc2xhdGVYOmgoZSYmZS5sZWZ0LGEucGxvdExlZnQpLHRyYW5zbGF0ZVk6aChjJiZjLnRvcCxhLnBsb3RUb3ApfSkpO3RoaXMudHJhbnNsYXRlKCk7dGhpcy5yZW5kZXIoKTtiJiZkZWxldGUgdGhpcy5rZFRyZWV9LGtkQXhpc0FycmF5OltcImNsaWVudFhcIixcInBsb3RZXCJdLHNlYXJjaFBvaW50OmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcy54QXhpcyxlPXRoaXMueUF4aXMsYz10aGlzLmNoYXJ0LmludmVydGVkO3JldHVybiB0aGlzLnNlYXJjaEtEVHJlZSh7Y2xpZW50WDpjP2QubGVuLWEuY2hhcnRZK2QucG9zOmEuY2hhcnRYLWQucG9zLHBsb3RZOmM/ZS5sZW4tYS5jaGFydFgrZS5wb3M6YS5jaGFydFktZS5wb3N9LGIsYSl9LGJ1aWxkS0RUcmVlOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxlLGMpe3ZhciBnO2lmKGc9YSYmXG5hLmxlbmd0aCl7dmFyIGs9ZC5rZEF4aXNBcnJheVtlJWNdO2Euc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhW2tdLWJba119KTtnPU1hdGguZmxvb3IoZy8yKTtyZXR1cm57cG9pbnQ6YVtnXSxsZWZ0OmIoYS5zbGljZSgwLGcpLGUrMSxjKSxyaWdodDpiKGEuc2xpY2UoZysxKSxlKzEsYyl9fX10aGlzLmJ1aWxkaW5nS2RUcmVlPSEwO3ZhciBkPXRoaXMsZT0tMTxkLm9wdGlvbnMuZmluZE5lYXJlc3RQb2ludEJ5LmluZGV4T2YoXCJ5XCIpPzI6MTtkZWxldGUgZC5rZFRyZWU7cShmdW5jdGlvbigpe2Qua2RUcmVlPWIoZC5nZXRWYWxpZFBvaW50cyhudWxsLCFkLmRpcmVjdFRvdWNoKSxlLGUpO2QuYnVpbGRpbmdLZFRyZWU9ITF9LGQub3B0aW9ucy5rZE5vd3x8YSYmXCJ0b3VjaHN0YXJ0XCI9PT1hLnR5cGU/MDoxKX0sc2VhcmNoS0RUcmVlOmZ1bmN0aW9uKGEsYixkKXtmdW5jdGlvbiBlKGEsYixkLGgpe3ZhciBsPWIucG9pbnQsbT1jLmtkQXhpc0FycmF5W2QlaF0scD1sO3ZhciByPXooYVtnXSkmJlxueihsW2ddKT9NYXRoLnBvdyhhW2ddLWxbZ10sMik6bnVsbDt2YXIgdT16KGFba10pJiZ6KGxba10pP01hdGgucG93KGFba10tbFtrXSwyKTpudWxsO3U9KHJ8fDApKyh1fHwwKTtsLmRpc3Q9eih1KT9NYXRoLnNxcnQodSk6TnVtYmVyLk1BWF9WQUxVRTtsLmRpc3RYPXoocik/TWF0aC5zcXJ0KHIpOk51bWJlci5NQVhfVkFMVUU7bT1hW21dLWxbbV07dT0wPm0/XCJsZWZ0XCI6XCJyaWdodFwiO3I9MD5tP1wicmlnaHRcIjpcImxlZnRcIjtiW3VdJiYodT1lKGEsYlt1XSxkKzEsaCkscD11W2ZdPHBbZl0/dTpsKTtiW3JdJiZNYXRoLnNxcnQobSptKTxwW2ZdJiYoYT1lKGEsYltyXSxkKzEsaCkscD1hW2ZdPHBbZl0/YTpwKTtyZXR1cm4gcH12YXIgYz10aGlzLGc9dGhpcy5rZEF4aXNBcnJheVswXSxrPXRoaXMua2RBeGlzQXJyYXlbMV0sZj1iP1wiZGlzdFhcIjpcImRpc3RcIjtiPS0xPGMub3B0aW9ucy5maW5kTmVhcmVzdFBvaW50QnkuaW5kZXhPZihcInlcIik/MjoxO3RoaXMua2RUcmVlfHx0aGlzLmJ1aWxkaW5nS2RUcmVlfHxcbnRoaXMuYnVpbGRLRFRyZWUoZCk7aWYodGhpcy5rZFRyZWUpcmV0dXJuIGUoYSx0aGlzLmtkVHJlZSxiLGIpfSxwb2ludFBsYWNlbWVudFRvWFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy54QXhpcyxiPXRoaXMub3B0aW9ucy5wb2ludFBsYWNlbWVudDtcImJldHdlZW5cIj09PWImJihiPWEucmV2ZXJzZWQ/LS41Oi41KTtDKGIpJiYoYio9aCh0aGlzLm9wdGlvbnMucG9pbnRSYW5nZXx8YS5wb2ludFJhbmdlKSk7cmV0dXJuIGJ9fSk7XCJcIn0pO00oSSxcInBhcnRzL1N0YWNraW5nLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5kZWZpbmVkLEc9Zi5kZXN0cm95T2JqZWN0UHJvcGVydGllcyx6PWYub2JqZWN0RWFjaCxCPWYucGljaztmPWMuQXhpczt2YXIgdD1jLkNoYXJ0LHY9Yy5jb3JyZWN0RmxvYXQsQz1jLmZvcm1hdCxIPWMuU2VyaWVzO2MuU3RhY2tJdGVtPWZ1bmN0aW9uKGMsZixuLHEsZyl7dmFyIGI9XG5jLmNoYXJ0LmludmVydGVkO3RoaXMuYXhpcz1jO3RoaXMuaXNOZWdhdGl2ZT1uO3RoaXMub3B0aW9ucz1mPWZ8fHt9O3RoaXMueD1xO3RoaXMudG90YWw9bnVsbDt0aGlzLnBvaW50cz17fTt0aGlzLnN0YWNrPWc7dGhpcy5yaWdodENsaWZmPXRoaXMubGVmdENsaWZmPTA7dGhpcy5hbGlnbk9wdGlvbnM9e2FsaWduOmYuYWxpZ258fChiP24/XCJsZWZ0XCI6XCJyaWdodFwiOlwiY2VudGVyXCIpLHZlcnRpY2FsQWxpZ246Zi52ZXJ0aWNhbEFsaWdufHwoYj9cIm1pZGRsZVwiOm4/XCJib3R0b21cIjpcInRvcFwiKSx5OmYueSx4OmYueH07dGhpcy50ZXh0QWxpZ249Zi50ZXh0QWxpZ258fChiP24/XCJyaWdodFwiOlwibGVmdFwiOlwiY2VudGVyXCIpfTtjLlN0YWNrSXRlbS5wcm90b3R5cGU9e2Rlc3Ryb3k6ZnVuY3Rpb24oKXtHKHRoaXMsdGhpcy5heGlzKX0scmVuZGVyOmZ1bmN0aW9uKGMpe3ZhciBmPXRoaXMuYXhpcy5jaGFydCxuPXRoaXMub3B0aW9ucyxxPW4uZm9ybWF0O3E9cT9DKHEsdGhpcyxmLnRpbWUpOm4uZm9ybWF0dGVyLmNhbGwodGhpcyk7XG50aGlzLmxhYmVsP3RoaXMubGFiZWwuYXR0cih7dGV4dDpxLHZpc2liaWxpdHk6XCJoaWRkZW5cIn0pOih0aGlzLmxhYmVsPWYucmVuZGVyZXIubGFiZWwocSxudWxsLG51bGwsbi5zaGFwZSxudWxsLG51bGwsbi51c2VIVE1MLCExLFwic3RhY2stbGFiZWxzXCIpLHE9e3RleHQ6cSxhbGlnbjp0aGlzLnRleHRBbGlnbixyb3RhdGlvbjpuLnJvdGF0aW9uLHBhZGRpbmc6QihuLnBhZGRpbmcsMCksdmlzaWJpbGl0eTpcImhpZGRlblwifSx0aGlzLmxhYmVsLmF0dHIocSksZi5zdHlsZWRNb2RlfHx0aGlzLmxhYmVsLmNzcyhuLnN0eWxlKSx0aGlzLmxhYmVsLmFkZGVkfHx0aGlzLmxhYmVsLmFkZChjKSk7dGhpcy5sYWJlbC5sYWJlbHJhbms9Zi5wbG90SGVpZ2h0fSxzZXRPZmZzZXQ6ZnVuY3Rpb24oYyxmLG4scSxnKXt2YXIgYj10aGlzLmF4aXMsYT1iLmNoYXJ0O3E9Yi50cmFuc2xhdGUoYi51c2VQZXJjZW50YWdlPzEwMDpxP3E6dGhpcy50b3RhbCwwLDAsMCwxKTtuPWIudHJhbnNsYXRlKG4/bjpcbjApO249RihxKSYmTWF0aC5hYnMocS1uKTtjPUIoZyxhLnhBeGlzWzBdLnRyYW5zbGF0ZSh0aGlzLngpKStjO2I9RihxKSYmdGhpcy5nZXRTdGFja0JveChhLHRoaXMsYyxxLGYsbixiKTtmPXRoaXMubGFiZWw7Yz10aGlzLmlzTmVnYXRpdmU7Zz1cImp1c3RpZnlcIj09PUIodGhpcy5vcHRpb25zLm92ZXJmbG93LFwianVzdGlmeVwiKTtpZihmJiZiKXtuPWYuZ2V0QkJveCgpO3ZhciBkPWEuaW52ZXJ0ZWQ/Yz9uLndpZHRoOjA6bi53aWR0aC8yLGU9YS5pbnZlcnRlZD9uLmhlaWdodC8yOmM/LTQ6bi5oZWlnaHQrNDt0aGlzLmFsaWduT3B0aW9ucy54PUIodGhpcy5vcHRpb25zLngsMCk7Zi5hbGlnbih0aGlzLmFsaWduT3B0aW9ucyxudWxsLGIpO3E9Zi5hbGlnbkF0dHI7Zi5zaG93KCk7cS55LT1lO2cmJihxLngtPWQsSC5wcm90b3R5cGUuanVzdGlmeURhdGFMYWJlbC5jYWxsKHRoaXMuYXhpcyxmLHRoaXMuYWxpZ25PcHRpb25zLHEsbixiKSxxLngrPWQpO3EueD1mLmFsaWduQXR0ci54O2YuYXR0cih7eDpxLngsXG55OnEueX0pO0IoIWcmJnRoaXMub3B0aW9ucy5jcm9wLCEwKSYmKChhPWEuaXNJbnNpZGVQbG90KGYueCsoYS5pbnZlcnRlZD8wOi1uLndpZHRoLzIpLGYueSkmJmEuaXNJbnNpZGVQbG90KGYueCsoYS5pbnZlcnRlZD9jPy1uLndpZHRoOm4ud2lkdGg6bi53aWR0aC8yKSxmLnkrbi5oZWlnaHQpKXx8Zi5oaWRlKCkpfX0sZ2V0U3RhY2tCb3g6ZnVuY3Rpb24oYyxmLG4scSxnLGIsYSl7dmFyIGQ9Zi5heGlzLnJldmVyc2VkLGU9Yy5pbnZlcnRlZDtjPWEuaGVpZ2h0K2EucG9zLShlP2MucGxvdExlZnQ6Yy5wbG90VG9wKTtmPWYuaXNOZWdhdGl2ZSYmIWR8fCFmLmlzTmVnYXRpdmUmJmQ7cmV0dXJue3g6ZT9mP3E6cS1iOm4seTplP2Mtbi1nOmY/Yy1xLWI6Yy1xLHdpZHRoOmU/YjpnLGhlaWdodDplP2c6Yn19fTt0LnByb3RvdHlwZS5nZXRTdGFja3M9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGY9Yy5pbnZlcnRlZDtjLnlBeGlzLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5zdGFja3MmJmMuaGFzVmlzaWJsZVNlcmllcyYmXG4oYy5vbGRTdGFja3M9Yy5zdGFja3MpfSk7Yy5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgbj1oLnhBeGlzJiZoLnhBeGlzLm9wdGlvbnN8fHt9OyFoLm9wdGlvbnMuc3RhY2tpbmd8fCEwIT09aC52aXNpYmxlJiYhMSE9PWMub3B0aW9ucy5jaGFydC5pZ25vcmVIaWRkZW5TZXJpZXN8fChoLnN0YWNrS2V5PVtoLnR5cGUsQihoLm9wdGlvbnMuc3RhY2ssXCJcIiksZj9uLnRvcDpuLmxlZnQsZj9uLmhlaWdodDpuLndpZHRoXS5qb2luKCkpfSl9O2YucHJvdG90eXBlLmJ1aWxkU3RhY2tzPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5zZXJpZXMsZj1CKHRoaXMub3B0aW9ucy5yZXZlcnNlZFN0YWNrcywhMCksbj1jLmxlbmd0aCxxO2lmKCF0aGlzLmlzWEF4aXMpe3RoaXMudXNlUGVyY2VudGFnZT0hMTtmb3IocT1uO3EtLTspY1tmP3E6bi1xLTFdLnNldFN0YWNrZWRQb2ludHMoKTtmb3IocT0wO3E8bjtxKyspY1txXS5tb2RpZnlTdGFja3MoKX19O2YucHJvdG90eXBlLnJlbmRlclN0YWNrVG90YWxzPVxuZnVuY3Rpb24oKXt2YXIgYz10aGlzLmNoYXJ0LGY9Yy5yZW5kZXJlcixuPXRoaXMuc3RhY2tzLHE9dGhpcy5zdGFja1RvdGFsR3JvdXA7cXx8KHRoaXMuc3RhY2tUb3RhbEdyb3VwPXE9Zi5nKFwic3RhY2stbGFiZWxzXCIpLmF0dHIoe3Zpc2liaWxpdHk6XCJ2aXNpYmxlXCIsekluZGV4OjZ9KS5hZGQoKSk7cS50cmFuc2xhdGUoYy5wbG90TGVmdCxjLnBsb3RUb3ApO3oobixmdW5jdGlvbihjKXt6KGMsZnVuY3Rpb24oYil7Yi5yZW5kZXIocSl9KX0pfTtmLnByb3RvdHlwZS5yZXNldFN0YWNrcz1mdW5jdGlvbigpe3ZhciBjPXRoaXMsZj1jLnN0YWNrcztjLmlzWEF4aXN8fHooZixmdW5jdGlvbihmKXt6KGYsZnVuY3Rpb24oaCxnKXtoLnRvdWNoZWQ8Yy5zdGFja3NUb3VjaGVkPyhoLmRlc3Ryb3koKSxkZWxldGUgZltnXSk6KGgudG90YWw9bnVsbCxoLmN1bXVsYXRpdmU9bnVsbCl9KX0pfTtmLnByb3RvdHlwZS5jbGVhblN0YWNrcz1mdW5jdGlvbigpe2lmKCF0aGlzLmlzWEF4aXMpe2lmKHRoaXMub2xkU3RhY2tzKXZhciBjPVxudGhpcy5zdGFja3M9dGhpcy5vbGRTdGFja3M7eihjLGZ1bmN0aW9uKGMpe3ooYyxmdW5jdGlvbihjKXtjLmN1bXVsYXRpdmU9Yy50b3RhbH0pfSl9fTtILnByb3RvdHlwZS5zZXRTdGFja2VkUG9pbnRzPWZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLnN0YWNraW5nJiYoITA9PT10aGlzLnZpc2libGV8fCExPT09dGhpcy5jaGFydC5vcHRpb25zLmNoYXJ0Lmlnbm9yZUhpZGRlblNlcmllcykpe3ZhciBmPXRoaXMucHJvY2Vzc2VkWERhdGEsaD10aGlzLnByb2Nlc3NlZFlEYXRhLG49W10scT1oLmxlbmd0aCxnPXRoaXMub3B0aW9ucyxiPWcudGhyZXNob2xkLGE9QihnLnN0YXJ0RnJvbVRocmVzaG9sZCYmYiwwKSxkPWcuc3RhY2s7Zz1nLnN0YWNraW5nO3ZhciBlPXRoaXMuc3RhY2tLZXksbD1cIi1cIitlLHQ9dGhpcy5uZWdTdGFja3MsRT10aGlzLnlBeGlzLHA9RS5zdGFja3MsdT1FLm9sZFN0YWNrcyxrLHI7RS5zdGFja3NUb3VjaGVkKz0xO2ZvcihyPTA7cjxxO3IrKyl7dmFyIHg9ZltyXTtcbnZhciBBPWhbcl07dmFyIHc9dGhpcy5nZXRTdGFja0luZGljYXRvcih3LHgsdGhpcy5pbmRleCk7dmFyIG09dy5rZXk7dmFyIEs9KGs9dCYmQTwoYT8wOmIpKT9sOmU7cFtLXXx8KHBbS109e30pO3BbS11beF18fCh1W0tdJiZ1W0tdW3hdPyhwW0tdW3hdPXVbS11beF0scFtLXVt4XS50b3RhbD1udWxsKTpwW0tdW3hdPW5ldyBjLlN0YWNrSXRlbShFLEUub3B0aW9ucy5zdGFja0xhYmVscyxrLHgsZCkpO0s9cFtLXVt4XTtudWxsIT09QT8oSy5wb2ludHNbbV09Sy5wb2ludHNbdGhpcy5pbmRleF09W0IoSy5jdW11bGF0aXZlLGEpXSxGKEsuY3VtdWxhdGl2ZSl8fChLLmJhc2U9bSksSy50b3VjaGVkPUUuc3RhY2tzVG91Y2hlZCwwPHcuaW5kZXgmJiExPT09dGhpcy5zaW5nbGVTdGFja3MmJihLLnBvaW50c1ttXVswXT1LLnBvaW50c1t0aGlzLmluZGV4K1wiLFwiK3grXCIsMFwiXVswXSkpOksucG9pbnRzW21dPUsucG9pbnRzW3RoaXMuaW5kZXhdPW51bGw7XCJwZXJjZW50XCI9PT1nPyhrPWs/ZTpcbmwsdCYmcFtrXSYmcFtrXVt4XT8oaz1wW2tdW3hdLEsudG90YWw9ay50b3RhbD1NYXRoLm1heChrLnRvdGFsLEsudG90YWwpK01hdGguYWJzKEEpfHwwKTpLLnRvdGFsPXYoSy50b3RhbCsoTWF0aC5hYnMoQSl8fDApKSk6Sy50b3RhbD12KEsudG90YWwrKEF8fDApKTtLLmN1bXVsYXRpdmU9QihLLmN1bXVsYXRpdmUsYSkrKEF8fDApO251bGwhPT1BJiYoSy5wb2ludHNbbV0ucHVzaChLLmN1bXVsYXRpdmUpLG5bcl09Sy5jdW11bGF0aXZlKX1cInBlcmNlbnRcIj09PWcmJihFLnVzZVBlcmNlbnRhZ2U9ITApO3RoaXMuc3RhY2tlZFlEYXRhPW47RS5vbGRTdGFja3M9e319fTtILnByb3RvdHlwZS5tb2RpZnlTdGFja3M9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGY9Yy5zdGFja0tleSxuPWMueUF4aXMuc3RhY2tzLHE9Yy5wcm9jZXNzZWRYRGF0YSxnLGI9Yy5vcHRpb25zLnN0YWNraW5nO2NbYitcIlN0YWNrZXJcIl0mJltmLFwiLVwiK2ZdLmZvckVhY2goZnVuY3Rpb24oYSl7Zm9yKHZhciBkPXEubGVuZ3RoLFxuZSxmO2QtLTspaWYoZT1xW2RdLGc9Yy5nZXRTdGFja0luZGljYXRvcihnLGUsYy5pbmRleCxhKSxmPShlPW5bYV0mJm5bYV1bZV0pJiZlLnBvaW50c1tnLmtleV0pY1tiK1wiU3RhY2tlclwiXShmLGUsZCl9KX07SC5wcm90b3R5cGUucGVyY2VudFN0YWNrZXI9ZnVuY3Rpb24oYyxmLG4pe2Y9Zi50b3RhbD8xMDAvZi50b3RhbDowO2NbMF09dihjWzBdKmYpO2NbMV09dihjWzFdKmYpO3RoaXMuc3RhY2tlZFlEYXRhW25dPWNbMV19O0gucHJvdG90eXBlLmdldFN0YWNrSW5kaWNhdG9yPWZ1bmN0aW9uKGMsZixuLHEpeyFGKGMpfHxjLnghPT1mfHxxJiZjLmtleSE9PXE/Yz17eDpmLGluZGV4OjAsa2V5OnF9OmMuaW5kZXgrKztjLmtleT1bbixmLGMuaW5kZXhdLmpvaW4oKTtyZXR1cm4gY319KTtNKEksXCJwYXJ0cy9EeW5hbWljcy5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuZGVmaW5lZCxHPWYuZXJhc2UsXG56PWYuZXh0ZW5kLEI9Zi5pc0FycmF5LHQ9Zi5pc051bWJlcix2PWYuaXNPYmplY3QsQz1mLmlzU3RyaW5nLEg9Zi5vYmplY3RFYWNoLHk9Zi5waWNrLGg9Zi5zZXRBbmltYXRpb24sbj1mLnNwbGF0LHE9Yy5hZGRFdmVudCxnPWMuYW5pbWF0ZSxiPWMuQXhpcztmPWMuQ2hhcnQ7dmFyIGE9Yy5jcmVhdGVFbGVtZW50LGQ9Yy5jc3MsZT1jLmZpcmVFdmVudCxsPWMubWVyZ2UsTD1jLlBvaW50LEU9Yy5TZXJpZXMscD1jLnNlcmllc1R5cGVzO2MuY2xlYW5SZWN1cnNpdmVseT1mdW5jdGlvbihhLGIpe3ZhciBkPXt9O0goYSxmdW5jdGlvbihlLGcpe2lmKHYoYVtnXSwhMCkmJiFhLm5vZGVUeXBlJiZiW2ddKWU9Yy5jbGVhblJlY3Vyc2l2ZWx5KGFbZ10sYltnXSksT2JqZWN0LmtleXMoZSkubGVuZ3RoJiYoZFtnXT1lKTtlbHNlIGlmKHYoYVtnXSl8fGFbZ10hPT1iW2ddKWRbZ109YVtnXX0pO3JldHVybiBkfTt6KGYucHJvdG90eXBlLHthZGRTZXJpZXM6ZnVuY3Rpb24oYSxiLGQpe3ZhciBjLFxuZz10aGlzO2EmJihiPXkoYiwhMCksZShnLFwiYWRkU2VyaWVzXCIse29wdGlvbnM6YX0sZnVuY3Rpb24oKXtjPWcuaW5pdFNlcmllcyhhKTtnLmlzRGlydHlMZWdlbmQ9ITA7Zy5saW5rU2VyaWVzKCk7ZShnLFwiYWZ0ZXJBZGRTZXJpZXNcIix7c2VyaWVzOmN9KTtiJiZnLnJlZHJhdyhkKX0pKTtyZXR1cm4gY30sYWRkQXhpczpmdW5jdGlvbihhLGIsZCxjKXtyZXR1cm4gdGhpcy5jcmVhdGVBeGlzKGI/XCJ4QXhpc1wiOlwieUF4aXNcIix7YXhpczphLHJlZHJhdzpkLGFuaW1hdGlvbjpjfSl9LGFkZENvbG9yQXhpczpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIHRoaXMuY3JlYXRlQXhpcyhcImNvbG9yQXhpc1wiLHtheGlzOmEscmVkcmF3OmIsYW5pbWF0aW9uOmR9KX0sY3JlYXRlQXhpczpmdW5jdGlvbihhLGQpe3ZhciBlPXRoaXMub3B0aW9ucyxnPVwiY29sb3JBeGlzXCI9PT1hLGs9ZC5yZWRyYXcsZj1kLmFuaW1hdGlvbjtkPWwoZC5heGlzLHtpbmRleDp0aGlzW2FdLmxlbmd0aCxpc1g6XCJ4QXhpc1wiPT09XG5hfSk7dmFyIGg9Zz9uZXcgYy5Db2xvckF4aXModGhpcyxkKTpuZXcgYih0aGlzLGQpO2VbYV09bihlW2FdfHx7fSk7ZVthXS5wdXNoKGQpO2cmJih0aGlzLmlzRGlydHlMZWdlbmQ9ITAsdGhpcy5heGVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zZXJpZXM9W119KSx0aGlzLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuYmluZEF4ZXMoKTthLmlzRGlydHlEYXRhPSEwfSkpO3koaywhMCkmJnRoaXMucmVkcmF3KGYpO3JldHVybiBofSxzaG93TG9hZGluZzpmdW5jdGlvbihiKXt2YXIgYz10aGlzLGU9Yy5vcHRpb25zLGY9Yy5sb2FkaW5nRGl2LGg9ZS5sb2FkaW5nLGw9ZnVuY3Rpb24oKXtmJiZkKGYse2xlZnQ6Yy5wbG90TGVmdCtcInB4XCIsdG9wOmMucGxvdFRvcCtcInB4XCIsd2lkdGg6Yy5wbG90V2lkdGgrXCJweFwiLGhlaWdodDpjLnBsb3RIZWlnaHQrXCJweFwifSl9O2Z8fChjLmxvYWRpbmdEaXY9Zj1hKFwiZGl2XCIse2NsYXNzTmFtZTpcImhpZ2hjaGFydHMtbG9hZGluZyBoaWdoY2hhcnRzLWxvYWRpbmctaGlkZGVuXCJ9LFxubnVsbCxjLmNvbnRhaW5lciksYy5sb2FkaW5nU3Bhbj1hKFwic3BhblwiLHtjbGFzc05hbWU6XCJoaWdoY2hhcnRzLWxvYWRpbmctaW5uZXJcIn0sbnVsbCxmKSxxKGMsXCJyZWRyYXdcIixsKSk7Zi5jbGFzc05hbWU9XCJoaWdoY2hhcnRzLWxvYWRpbmdcIjtjLmxvYWRpbmdTcGFuLmlubmVySFRNTD15KGIsZS5sYW5nLmxvYWRpbmcsXCJcIik7Yy5zdHlsZWRNb2RlfHwoZChmLHooaC5zdHlsZSx7ekluZGV4OjEwfSkpLGQoYy5sb2FkaW5nU3BhbixoLmxhYmVsU3R5bGUpLGMubG9hZGluZ1Nob3dufHwoZChmLHtvcGFjaXR5OjAsZGlzcGxheTpcIlwifSksZyhmLHtvcGFjaXR5Omguc3R5bGUub3BhY2l0eXx8LjV9LHtkdXJhdGlvbjpoLnNob3dEdXJhdGlvbnx8MH0pKSk7Yy5sb2FkaW5nU2hvd249ITA7bCgpfSxoaWRlTG9hZGluZzpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucyxiPXRoaXMubG9hZGluZ0RpdjtiJiYoYi5jbGFzc05hbWU9XCJoaWdoY2hhcnRzLWxvYWRpbmcgaGlnaGNoYXJ0cy1sb2FkaW5nLWhpZGRlblwiLFxudGhpcy5zdHlsZWRNb2RlfHxnKGIse29wYWNpdHk6MH0se2R1cmF0aW9uOmEubG9hZGluZy5oaWRlRHVyYXRpb258fDEwMCxjb21wbGV0ZTpmdW5jdGlvbigpe2QoYix7ZGlzcGxheTpcIm5vbmVcIn0pfX0pKTt0aGlzLmxvYWRpbmdTaG93bj0hMX0scHJvcHNSZXF1aXJlRGlydHlCb3g6XCJiYWNrZ3JvdW5kQ29sb3IgYm9yZGVyQ29sb3IgYm9yZGVyV2lkdGggYm9yZGVyUmFkaXVzIHBsb3RCYWNrZ3JvdW5kQ29sb3IgcGxvdEJhY2tncm91bmRJbWFnZSBwbG90Qm9yZGVyQ29sb3IgcGxvdEJvcmRlcldpZHRoIHBsb3RTaGFkb3cgc2hhZG93XCIuc3BsaXQoXCIgXCIpLHByb3BzUmVxdWlyZVJlZmxvdzpcIm1hcmdpbiBtYXJnaW5Ub3AgbWFyZ2luUmlnaHQgbWFyZ2luQm90dG9tIG1hcmdpbkxlZnQgc3BhY2luZyBzcGFjaW5nVG9wIHNwYWNpbmdSaWdodCBzcGFjaW5nQm90dG9tIHNwYWNpbmdMZWZ0XCIuc3BsaXQoXCIgXCIpLHByb3BzUmVxdWlyZVVwZGF0ZVNlcmllczpcImNoYXJ0LmludmVydGVkIGNoYXJ0LnBvbGFyIGNoYXJ0Lmlnbm9yZUhpZGRlblNlcmllcyBjaGFydC50eXBlIGNvbG9ycyBwbG90T3B0aW9ucyB0aW1lIHRvb2x0aXBcIi5zcGxpdChcIiBcIiksXG5jb2xsZWN0aW9uc1dpdGhVcGRhdGU6XCJ4QXhpcyB5QXhpcyB6QXhpcyBjb2xvckF4aXMgc2VyaWVzIHBhbmVcIi5zcGxpdChcIiBcIiksdXBkYXRlOmZ1bmN0aW9uKGEsYixkLGcpe3ZhciBrPXRoaXMsZj17Y3JlZGl0czpcImFkZENyZWRpdHNcIix0aXRsZTpcInNldFRpdGxlXCIsc3VidGl0bGU6XCJzZXRTdWJ0aXRsZVwiLGNhcHRpb246XCJzZXRDYXB0aW9uXCJ9LGgscCxyLHU9YS5pc1Jlc3BvbnNpdmVPcHRpb25zLHE9W107ZShrLFwidXBkYXRlXCIse29wdGlvbnM6YX0pO3V8fGsuc2V0UmVzcG9uc2l2ZSghMSwhMCk7YT1jLmNsZWFuUmVjdXJzaXZlbHkoYSxrLm9wdGlvbnMpO2woITAsay51c2VyT3B0aW9ucyxhKTtpZihoPWEuY2hhcnQpe2woITAsay5vcHRpb25zLmNoYXJ0LGgpO1wiY2xhc3NOYW1lXCJpbiBoJiZrLnNldENsYXNzTmFtZShoLmNsYXNzTmFtZSk7XCJyZWZsb3dcImluIGgmJmsuc2V0UmVmbG93KGgucmVmbG93KTtpZihcImludmVydGVkXCJpbiBofHxcInBvbGFyXCJpbiBofHxcInR5cGVcImluIGgpe2sucHJvcEZyb21TZXJpZXMoKTtcbnZhciB4PSEwfVwiYWxpZ25UaWNrc1wiaW4gaCYmKHg9ITApO0goaCxmdW5jdGlvbihhLGIpey0xIT09ay5wcm9wc1JlcXVpcmVVcGRhdGVTZXJpZXMuaW5kZXhPZihcImNoYXJ0LlwiK2IpJiYocD0hMCk7LTEhPT1rLnByb3BzUmVxdWlyZURpcnR5Qm94LmluZGV4T2YoYikmJihrLmlzRGlydHlCb3g9ITApO3V8fC0xPT09ay5wcm9wc1JlcXVpcmVSZWZsb3cuaW5kZXhPZihiKXx8KHI9ITApfSk7IWsuc3R5bGVkTW9kZSYmXCJzdHlsZVwiaW4gaCYmay5yZW5kZXJlci5zZXRTdHlsZShoLnN0eWxlKX0hay5zdHlsZWRNb2RlJiZhLmNvbG9ycyYmKHRoaXMub3B0aW9ucy5jb2xvcnM9YS5jb2xvcnMpO2EucGxvdE9wdGlvbnMmJmwoITAsdGhpcy5vcHRpb25zLnBsb3RPcHRpb25zLGEucGxvdE9wdGlvbnMpO2EudGltZSYmdGhpcy50aW1lPT09Yy50aW1lJiYodGhpcy50aW1lPW5ldyBjLlRpbWUoYS50aW1lKSk7SChhLGZ1bmN0aW9uKGEsYil7aWYoa1tiXSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGtbYl0udXBkYXRlKWtbYl0udXBkYXRlKGEsXG4hMSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PT10eXBlb2Yga1tmW2JdXSlrW2ZbYl1dKGEpO1wiY2hhcnRcIiE9PWImJi0xIT09ay5wcm9wc1JlcXVpcmVVcGRhdGVTZXJpZXMuaW5kZXhPZihiKSYmKHA9ITApfSk7dGhpcy5jb2xsZWN0aW9uc1dpdGhVcGRhdGUuZm9yRWFjaChmdW5jdGlvbihiKXtpZihhW2JdKXtpZihcInNlcmllc1wiPT09Yil7dmFyIGM9W107a1tiXS5mb3JFYWNoKGZ1bmN0aW9uKGEsYil7YS5vcHRpb25zLmlzSW50ZXJuYWx8fGMucHVzaCh5KGEub3B0aW9ucy5pbmRleCxiKSl9KX1uKGFbYl0pLmZvckVhY2goZnVuY3Rpb24oYSxlKXsoZT1GKGEuaWQpJiZrLmdldChhLmlkKXx8a1tiXVtjP2NbZV06ZV0pJiZlLmNvbGw9PT1iJiYoZS51cGRhdGUoYSwhMSksZCYmKGUudG91Y2hlZD0hMCkpOyFlJiZkJiZrLmNvbGxlY3Rpb25zV2l0aEluaXRbYl0mJihrLmNvbGxlY3Rpb25zV2l0aEluaXRbYl1bMF0uYXBwbHkoayxbYV0uY29uY2F0KGsuY29sbGVjdGlvbnNXaXRoSW5pdFtiXVsxXXx8XG5bXSkuY29uY2F0KFshMV0pKS50b3VjaGVkPSEwKX0pO2QmJmtbYl0uZm9yRWFjaChmdW5jdGlvbihhKXthLnRvdWNoZWR8fGEub3B0aW9ucy5pc0ludGVybmFsP2RlbGV0ZSBhLnRvdWNoZWQ6cS5wdXNoKGEpfSl9fSk7cS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EucmVtb3ZlJiZhLnJlbW92ZSghMSl9KTt4JiZrLmF4ZXMuZm9yRWFjaChmdW5jdGlvbihhKXthLnVwZGF0ZSh7fSwhMSl9KTtwJiZrLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EudXBkYXRlKHt9LCExKX0pO2EubG9hZGluZyYmbCghMCxrLm9wdGlvbnMubG9hZGluZyxhLmxvYWRpbmcpO3g9aCYmaC53aWR0aDtoPWgmJmguaGVpZ2h0O0MoaCkmJihoPWMucmVsYXRpdmVMZW5ndGgoaCx4fHxrLmNoYXJ0V2lkdGgpKTtyfHx0KHgpJiZ4IT09ay5jaGFydFdpZHRofHx0KGgpJiZoIT09ay5jaGFydEhlaWdodD9rLnNldFNpemUoeCxoLGcpOnkoYiwhMCkmJmsucmVkcmF3KGcpO2UoayxcImFmdGVyVXBkYXRlXCIse29wdGlvbnM6YSxcbnJlZHJhdzpiLGFuaW1hdGlvbjpnfSl9LHNldFN1YnRpdGxlOmZ1bmN0aW9uKGEsYil7dGhpcy5hcHBseURlc2NyaXB0aW9uKFwic3VidGl0bGVcIixhKTt0aGlzLmxheU91dFRpdGxlcyhiKX0sc2V0Q2FwdGlvbjpmdW5jdGlvbihhLGIpe3RoaXMuYXBwbHlEZXNjcmlwdGlvbihcImNhcHRpb25cIixhKTt0aGlzLmxheU91dFRpdGxlcyhiKX19KTtmLnByb3RvdHlwZS5jb2xsZWN0aW9uc1dpdGhJbml0PXt4QXhpczpbZi5wcm90b3R5cGUuYWRkQXhpcyxbITBdXSx5QXhpczpbZi5wcm90b3R5cGUuYWRkQXhpcyxbITFdXSxjb2xvckF4aXM6W2YucHJvdG90eXBlLmFkZENvbG9yQXhpcyxbITFdXSxzZXJpZXM6W2YucHJvdG90eXBlLmFkZFNlcmllc119O3ooTC5wcm90b3R5cGUse3VwZGF0ZTpmdW5jdGlvbihhLGIsZCxjKXtmdW5jdGlvbiBlKCl7Zy5hcHBseU9wdGlvbnMoYSk7bnVsbD09PWcueSYmZiYmKGcuZ3JhcGhpYz1mLmRlc3Ryb3koKSk7dihhLCEwKSYmKGYmJmYuZWxlbWVudCYmYSYmXG5hLm1hcmtlciYmdm9pZCAwIT09YS5tYXJrZXIuc3ltYm9sJiYoZy5ncmFwaGljPWYuZGVzdHJveSgpKSxhJiZhLmRhdGFMYWJlbHMmJmcuZGF0YUxhYmVsJiYoZy5kYXRhTGFiZWw9Zy5kYXRhTGFiZWwuZGVzdHJveSgpKSxnLmNvbm5lY3RvciYmKGcuY29ubmVjdG9yPWcuY29ubmVjdG9yLmRlc3Ryb3koKSkpO2g9Zy5pbmRleDtrLnVwZGF0ZVBhcmFsbGVsQXJyYXlzKGcsaCk7cC5kYXRhW2hdPXYocC5kYXRhW2hdLCEwKXx8dihhLCEwKT9nLm9wdGlvbnM6eShhLHAuZGF0YVtoXSk7ay5pc0RpcnR5PWsuaXNEaXJ0eURhdGE9ITA7IWsuZml4ZWRCb3gmJmsuaGFzQ2FydGVzaWFuU2VyaWVzJiYobC5pc0RpcnR5Qm94PSEwKTtcInBvaW50XCI9PT1wLmxlZ2VuZFR5cGUmJihsLmlzRGlydHlMZWdlbmQ9ITApO2ImJmwucmVkcmF3KGQpfXZhciBnPXRoaXMsaz1nLnNlcmllcyxmPWcuZ3JhcGhpYyxoLGw9ay5jaGFydCxwPWsub3B0aW9ucztiPXkoYiwhMCk7ITE9PT1jP2UoKTpnLmZpcmVQb2ludEV2ZW50KFwidXBkYXRlXCIsXG57b3B0aW9uczphfSxlKX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7dGhpcy5zZXJpZXMucmVtb3ZlUG9pbnQodGhpcy5zZXJpZXMuZGF0YS5pbmRleE9mKHRoaXMpLGEsYil9fSk7eihFLnByb3RvdHlwZSx7YWRkUG9pbnQ6ZnVuY3Rpb24oYSxiLGQsYyxnKXt2YXIgaz10aGlzLm9wdGlvbnMsZj10aGlzLmRhdGEsaD10aGlzLmNoYXJ0LGw9dGhpcy54QXhpcztsPWwmJmwuaGFzTmFtZXMmJmwubmFtZXM7dmFyIHA9ay5kYXRhLHI9dGhpcy54RGF0YSxuO2I9eShiLCEwKTt2YXIgdT17c2VyaWVzOnRoaXN9O3RoaXMucG9pbnRDbGFzcy5wcm90b3R5cGUuYXBwbHlPcHRpb25zLmFwcGx5KHUsW2FdKTt2YXIgcT11Lng7dmFyIHg9ci5sZW5ndGg7aWYodGhpcy5yZXF1aXJlU29ydGluZyYmcTxyW3gtMV0pZm9yKG49ITA7eCYmclt4LTFdPnE7KXgtLTt0aGlzLnVwZGF0ZVBhcmFsbGVsQXJyYXlzKHUsXCJzcGxpY2VcIix4LDAsMCk7dGhpcy51cGRhdGVQYXJhbGxlbEFycmF5cyh1LHgpO2wmJnUubmFtZSYmXG4obFtxXT11Lm5hbWUpO3Auc3BsaWNlKHgsMCxhKTtuJiYodGhpcy5kYXRhLnNwbGljZSh4LDAsbnVsbCksdGhpcy5wcm9jZXNzRGF0YSgpKTtcInBvaW50XCI9PT1rLmxlZ2VuZFR5cGUmJnRoaXMuZ2VuZXJhdGVQb2ludHMoKTtkJiYoZlswXSYmZlswXS5yZW1vdmU/ZlswXS5yZW1vdmUoITEpOihmLnNoaWZ0KCksdGhpcy51cGRhdGVQYXJhbGxlbEFycmF5cyh1LFwic2hpZnRcIikscC5zaGlmdCgpKSk7ITEhPT1nJiZlKHRoaXMsXCJhZGRQb2ludFwiLHtwb2ludDp1fSk7dGhpcy5pc0RpcnR5RGF0YT10aGlzLmlzRGlydHk9ITA7YiYmaC5yZWRyYXcoYyl9LHJlbW92ZVBvaW50OmZ1bmN0aW9uKGEsYixkKXt2YXIgYz10aGlzLGU9Yy5kYXRhLGc9ZVthXSxrPWMucG9pbnRzLGY9Yy5jaGFydCxsPWZ1bmN0aW9uKCl7ayYmay5sZW5ndGg9PT1lLmxlbmd0aCYmay5zcGxpY2UoYSwxKTtlLnNwbGljZShhLDEpO2Mub3B0aW9ucy5kYXRhLnNwbGljZShhLDEpO2MudXBkYXRlUGFyYWxsZWxBcnJheXMoZ3x8XG57c2VyaWVzOmN9LFwic3BsaWNlXCIsYSwxKTtnJiZnLmRlc3Ryb3koKTtjLmlzRGlydHk9ITA7Yy5pc0RpcnR5RGF0YT0hMDtiJiZmLnJlZHJhdygpfTtoKGQsZik7Yj15KGIsITApO2c/Zy5maXJlUG9pbnRFdmVudChcInJlbW92ZVwiLG51bGwsbCk6bCgpfSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGQsYyl7ZnVuY3Rpb24gZygpe2suZGVzdHJveShjKTtrLnJlbW92ZT1udWxsO2YuaXNEaXJ0eUxlZ2VuZD1mLmlzRGlydHlCb3g9ITA7Zi5saW5rU2VyaWVzKCk7eShhLCEwKSYmZi5yZWRyYXcoYil9dmFyIGs9dGhpcyxmPWsuY2hhcnQ7ITEhPT1kP2UoayxcInJlbW92ZVwiLG51bGwsZyk6ZygpfSx1cGRhdGU6ZnVuY3Rpb24oYSxiKXthPWMuY2xlYW5SZWN1cnNpdmVseShhLHRoaXMudXNlck9wdGlvbnMpO2UodGhpcyxcInVwZGF0ZVwiLHtvcHRpb25zOmF9KTt2YXIgZD10aGlzLGc9ZC5jaGFydCxrPWQudXNlck9wdGlvbnMsZj1kLmluaXRpYWxUeXBlfHxkLnR5cGUsaD1hLnR5cGV8fGsudHlwZXx8Zy5vcHRpb25zLmNoYXJ0LnR5cGUsXG5uPSEodGhpcy5oYXNEZXJpdmVkRGF0YXx8YS5kYXRhR3JvdXBpbmd8fGgmJmghPT10aGlzLnR5cGV8fHZvaWQgMCE9PWEucG9pbnRTdGFydHx8YS5wb2ludEludGVydmFsfHxhLnBvaW50SW50ZXJ2YWxVbml0fHxhLmtleXMpLHU9cFtmXS5wcm90b3R5cGUscSx2PVtcImdyb3VwXCIsXCJtYXJrZXJHcm91cFwiLFwiZGF0YUxhYmVsc0dyb3VwXCIsXCJ0cmFuc2Zvcm1Hcm91cFwiXSx0PVtcImV2ZW50T3B0aW9uc1wiLFwibmF2aWdhdG9yU2VyaWVzXCIsXCJiYXNlU2VyaWVzXCJdLEU9ZC5maW5pc2hlZEFuaW1hdGluZyYme2FuaW1hdGlvbjohMX0sQz17fTtuJiYodC5wdXNoKFwiZGF0YVwiLFwiaXNEaXJ0eURhdGFcIixcInBvaW50c1wiLFwicHJvY2Vzc2VkWERhdGFcIixcInByb2Nlc3NlZFlEYXRhXCIsXCJ4SW5jcmVtZW50XCIsXCJfaGFzUG9pbnRNYXJrZXJzXCIsXCJfaGFzUG9pbnRMYWJlbHNcIixcIm1hcE1hcFwiLFwibWFwRGF0YVwiLFwibWluWVwiLFwibWF4WVwiLFwibWluWFwiLFwibWF4WFwiKSwhMSE9PWEudmlzaWJsZSYmdC5wdXNoKFwiYXJlYVwiLFxuXCJncmFwaFwiKSxkLnBhcmFsbGVsQXJyYXlzLmZvckVhY2goZnVuY3Rpb24oYSl7dC5wdXNoKGErXCJEYXRhXCIpfSksYS5kYXRhJiZ0aGlzLnNldERhdGEoYS5kYXRhLCExKSk7YT1sKGssRSx7aW5kZXg6dm9pZCAwPT09ay5pbmRleD9kLmluZGV4OmsuaW5kZXgscG9pbnRTdGFydDp5KGsucG9pbnRTdGFydCxkLnhEYXRhWzBdKX0sIW4mJntkYXRhOmQub3B0aW9ucy5kYXRhfSxhKTtuJiZhLmRhdGEmJihhLmRhdGE9ZC5vcHRpb25zLmRhdGEpO3Q9di5jb25jYXQodCk7dC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RbYV09ZFthXTtkZWxldGUgZFthXX0pO2QucmVtb3ZlKCExLG51bGwsITEsITApO2ZvcihxIGluIHUpZFtxXT12b2lkIDA7cFtofHxmXT96KGQscFtofHxmXS5wcm90b3R5cGUpOmMuZXJyb3IoMTcsITAsZyx7bWlzc2luZ01vZHVsZUZvcjpofHxmfSk7dC5mb3JFYWNoKGZ1bmN0aW9uKGEpe2RbYV09dFthXX0pO2QuaW5pdChnLGEpO2lmKG4mJnRoaXMucG9pbnRzKXt2YXIgTD1kLm9wdGlvbnM7XG4hMT09PUwudmlzaWJsZT8oQy5ncmFwaGljPTEsQy5kYXRhTGFiZWw9MSk6ZC5faGFzUG9pbnRMYWJlbHN8fChoPUwubWFya2VyLHU9TC5kYXRhTGFiZWxzLGgmJighMT09PWguZW5hYmxlZHx8XCJzeW1ib2xcImluIGgpJiYoQy5ncmFwaGljPTEpLHUmJiExPT09dS5lbmFibGVkJiYoQy5kYXRhTGFiZWw9MSkpO3RoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oYSl7YSYmYS5zZXJpZXMmJihhLnJlc29sdmVDb2xvcigpLE9iamVjdC5rZXlzKEMpLmxlbmd0aCYmYS5kZXN0cm95RWxlbWVudHMoQyksITE9PT1MLnNob3dJbkxlZ2VuZCYmYS5sZWdlbmRJdGVtJiZnLmxlZ2VuZC5kZXN0cm95SXRlbShhKSl9LHRoaXMpfWEuekluZGV4IT09ay56SW5kZXgmJnYuZm9yRWFjaChmdW5jdGlvbihiKXtkW2JdJiZkW2JdLmF0dHIoe3pJbmRleDphLnpJbmRleH0pfSk7ZC5pbml0aWFsVHlwZT1mO2cubGlua1NlcmllcygpO2UodGhpcyxcImFmdGVyVXBkYXRlXCIpO3koYiwhMCkmJmcucmVkcmF3KG4/XG52b2lkIDA6ITEpfSxzZXROYW1lOmZ1bmN0aW9uKGEpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZT10aGlzLnVzZXJPcHRpb25zLm5hbWU9YTt0aGlzLmNoYXJ0LmlzRGlydHlMZWdlbmQ9ITB9fSk7eihiLnByb3RvdHlwZSx7dXBkYXRlOmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcy5jaGFydCxjPWEmJmEuZXZlbnRzfHx7fTthPWwodGhpcy51c2VyT3B0aW9ucyxhKTtkLm9wdGlvbnNbdGhpcy5jb2xsXS5pbmRleE9mJiYoZC5vcHRpb25zW3RoaXMuY29sbF1bZC5vcHRpb25zW3RoaXMuY29sbF0uaW5kZXhPZih0aGlzLnVzZXJPcHRpb25zKV09YSk7SChkLm9wdGlvbnNbdGhpcy5jb2xsXS5ldmVudHMsZnVuY3Rpb24oYSxiKXtcInVuZGVmaW5lZFwiPT09dHlwZW9mIGNbYl0mJihjW2JdPXZvaWQgMCl9KTt0aGlzLmRlc3Ryb3koITApO3RoaXMuaW5pdChkLHooYSx7ZXZlbnRzOmN9KSk7ZC5pc0RpcnR5Qm94PSEwO3koYiwhMCkmJmQucmVkcmF3KCl9LHJlbW92ZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9XG50aGlzLmNoYXJ0LGQ9dGhpcy5jb2xsLGM9dGhpcy5zZXJpZXMsZT1jLmxlbmd0aDtlLS07KWNbZV0mJmNbZV0ucmVtb3ZlKCExKTtHKGIuYXhlcyx0aGlzKTtHKGJbZF0sdGhpcyk7QihiLm9wdGlvbnNbZF0pP2Iub3B0aW9uc1tkXS5zcGxpY2UodGhpcy5vcHRpb25zLmluZGV4LDEpOmRlbGV0ZSBiLm9wdGlvbnNbZF07YltkXS5mb3JFYWNoKGZ1bmN0aW9uKGEsYil7YS5vcHRpb25zLmluZGV4PWEudXNlck9wdGlvbnMuaW5kZXg9Yn0pO3RoaXMuZGVzdHJveSgpO2IuaXNEaXJ0eUJveD0hMDt5KGEsITApJiZiLnJlZHJhdygpfSxzZXRUaXRsZTpmdW5jdGlvbihhLGIpe3RoaXMudXBkYXRlKHt0aXRsZTphfSxiKX0sc2V0Q2F0ZWdvcmllczpmdW5jdGlvbihhLGIpe3RoaXMudXBkYXRlKHtjYXRlZ29yaWVzOmF9LGIpfX0pfSk7TShJLFwicGFydHMvQXJlYVNlcmllcy5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPVxuZi5vYmplY3RFYWNoLEc9Zi5waWNrLHo9Yy5jb2xvcixCPWMuU2VyaWVzO2Y9Yy5zZXJpZXNUeXBlO2YoXCJhcmVhXCIsXCJsaW5lXCIse3NvZnRUaHJlc2hvbGQ6ITEsdGhyZXNob2xkOjB9LHtzaW5nbGVTdGFja3M6ITEsZ2V0U3RhY2tQb2ludHM6ZnVuY3Rpb24oYyl7dmFyIGY9W10sdD1bXSx6PXRoaXMueEF4aXMseT10aGlzLnlBeGlzLGg9eS5zdGFja3NbdGhpcy5zdGFja0tleV0sbj17fSxxPXRoaXMuaW5kZXgsZz15LnNlcmllcyxiPWcubGVuZ3RoLGE9Ryh5Lm9wdGlvbnMucmV2ZXJzZWRTdGFja3MsITApPzE6LTEsZDtjPWN8fHRoaXMucG9pbnRzO2lmKHRoaXMub3B0aW9ucy5zdGFja2luZyl7Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrKyljW2RdLmxlZnROdWxsPWNbZF0ucmlnaHROdWxsPXZvaWQgMCxuW2NbZF0ueF09Y1tkXTtGKGgsZnVuY3Rpb24oYSxiKXtudWxsIT09YS50b3RhbCYmdC5wdXNoKGIpfSk7dC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEtYn0pO3ZhciBlPWcubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnZpc2libGV9KTtcbnQuZm9yRWFjaChmdW5jdGlvbihjLGcpe3ZhciBsPTAscCx1O2lmKG5bY10mJiFuW2NdLmlzTnVsbClmLnB1c2gobltjXSksWy0xLDFdLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIGY9MT09PWs/XCJyaWdodE51bGxcIjpcImxlZnROdWxsXCIsbD0wLHY9aFt0W2cra11dO2lmKHYpZm9yKGQ9cTswPD1kJiZkPGI7KXA9di5wb2ludHNbZF0scHx8KGQ9PT1xP25bY11bZl09ITA6ZVtkXSYmKHU9aFtjXS5wb2ludHNbZF0pJiYobC09dVsxXS11WzBdKSksZCs9YTtuW2NdWzE9PT1rP1wicmlnaHRDbGlmZlwiOlwibGVmdENsaWZmXCJdPWx9KTtlbHNle2ZvcihkPXE7MDw9ZCYmZDxiOyl7aWYocD1oW2NdLnBvaW50c1tkXSl7bD1wWzFdO2JyZWFrfWQrPWF9bD15LnRyYW5zbGF0ZShsLDAsMSwwLDEpO2YucHVzaCh7aXNOdWxsOiEwLHBsb3RYOnoudHJhbnNsYXRlKGMsMCwwLDAsMSkseDpjLHBsb3RZOmwseUJvdHRvbTpsfSl9fSl9cmV0dXJuIGZ9LGdldEdyYXBoUGF0aDpmdW5jdGlvbihjKXt2YXIgZj1CLnByb3RvdHlwZS5nZXRHcmFwaFBhdGgsXG50PXRoaXMub3B0aW9ucyx6PXQuc3RhY2tpbmcseT10aGlzLnlBeGlzLGgsbj1bXSxxPVtdLGc9dGhpcy5pbmRleCxiPXkuc3RhY2tzW3RoaXMuc3RhY2tLZXldLGE9dC50aHJlc2hvbGQsZD1NYXRoLnJvdW5kKHkuZ2V0VGhyZXNob2xkKHQudGhyZXNob2xkKSk7dD1HKHQuY29ubmVjdE51bGxzLFwicGVyY2VudFwiPT09eik7dmFyIGU9ZnVuY3Rpb24oZSxmLGspe3ZhciBoPWNbZV07ZT16JiZiW2gueF0ucG9pbnRzW2ddO3ZhciBsPWhbaytcIk51bGxcIl18fDA7az1oW2srXCJDbGlmZlwiXXx8MDtoPSEwO2lmKGt8fGwpe3ZhciBwPShsP2VbMF06ZVsxXSkrazt2YXIgdT1lWzBdK2s7aD0hIWx9ZWxzZSF6JiZjW2ZdJiZjW2ZdLmlzTnVsbCYmKHA9dT1hKTt2b2lkIDAhPT1wJiYocS5wdXNoKHtwbG90WDpMLHBsb3RZOm51bGw9PT1wP2Q6eS5nZXRUaHJlc2hvbGQocCksaXNOdWxsOmgsaXNDbGlmZjohMH0pLG4ucHVzaCh7cGxvdFg6TCxwbG90WTpudWxsPT09dT9kOnkuZ2V0VGhyZXNob2xkKHUpLFxuZG9DdXJ2ZTohMX0pKX07Yz1jfHx0aGlzLnBvaW50czt6JiYoYz10aGlzLmdldFN0YWNrUG9pbnRzKGMpKTtmb3IoaD0wO2g8Yy5sZW5ndGg7aCsrKXt6fHwoY1toXS5sZWZ0Q2xpZmY9Y1toXS5yaWdodENsaWZmPWNbaF0ubGVmdE51bGw9Y1toXS5yaWdodE51bGw9dm9pZCAwKTt2YXIgbD1jW2hdLmlzTnVsbDt2YXIgTD1HKGNbaF0ucmVjdFBsb3RYLGNbaF0ucGxvdFgpO3ZhciBFPUcoY1toXS55Qm90dG9tLGQpO2lmKCFsfHx0KXR8fGUoaCxoLTEsXCJsZWZ0XCIpLGwmJiF6JiZ0fHwocS5wdXNoKGNbaF0pLG4ucHVzaCh7eDpoLHBsb3RYOkwscGxvdFk6RX0pKSx0fHxlKGgsaCsxLFwicmlnaHRcIil9aD1mLmNhbGwodGhpcyxxLCEwLCEwKTtuLnJldmVyc2VkPSEwO2w9Zi5jYWxsKHRoaXMsbiwhMCwhMCk7bC5sZW5ndGgmJihsWzBdPVwiTFwiKTtsPWguY29uY2F0KGwpO2Y9Zi5jYWxsKHRoaXMscSwhMSx0KTtsLnhNYXA9aC54TWFwO3RoaXMuYXJlYVBhdGg9bDtyZXR1cm4gZn0sZHJhd0dyYXBoOmZ1bmN0aW9uKCl7dGhpcy5hcmVhUGF0aD1cbltdO0IucHJvdG90eXBlLmRyYXdHcmFwaC5hcHBseSh0aGlzKTt2YXIgYz10aGlzLGY9dGhpcy5hcmVhUGF0aCxDPXRoaXMub3B0aW9ucyxIPVtbXCJhcmVhXCIsXCJoaWdoY2hhcnRzLWFyZWFcIix0aGlzLmNvbG9yLEMuZmlsbENvbG9yXV07dGhpcy56b25lcy5mb3JFYWNoKGZ1bmN0aW9uKGYsaCl7SC5wdXNoKFtcInpvbmUtYXJlYS1cIitoLFwiaGlnaGNoYXJ0cy1hcmVhIGhpZ2hjaGFydHMtem9uZS1hcmVhLVwiK2grXCIgXCIrZi5jbGFzc05hbWUsZi5jb2xvcnx8Yy5jb2xvcixmLmZpbGxDb2xvcnx8Qy5maWxsQ29sb3JdKX0pO0guZm9yRWFjaChmdW5jdGlvbih2KXt2YXIgaD12WzBdLG49Y1toXSxxPW4/XCJhbmltYXRlXCI6XCJhdHRyXCIsZz17fTtuPyhuLmVuZFg9Yy5wcmV2ZW50R3JhcGhBbmltYXRpb24/bnVsbDpmLnhNYXAsbi5hbmltYXRlKHtkOmZ9KSk6KGcuekluZGV4PTAsbj1jW2hdPWMuY2hhcnQucmVuZGVyZXIucGF0aChmKS5hZGRDbGFzcyh2WzFdKS5hZGQoYy5ncm91cCksbi5pc0FyZWE9XG4hMCk7Yy5jaGFydC5zdHlsZWRNb2RlfHwoZy5maWxsPUcodlszXSx6KHZbMl0pLnNldE9wYWNpdHkoRyhDLmZpbGxPcGFjaXR5LC43NSkpLmdldCgpKSk7bltxXShnKTtuLnN0YXJ0WD1mLnhNYXA7bi5zaGlmdFVuaXQ9Qy5zdGVwPzI6MX0pfSxkcmF3TGVnZW5kU3ltYm9sOmMuTGVnZW5kU3ltYm9sTWl4aW4uZHJhd1JlY3RhbmdsZX0pO1wiXCJ9KTtNKEksXCJwYXJ0cy9TcGxpbmVTZXJpZXMuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLnBpY2s7Yz1jLnNlcmllc1R5cGU7YyhcInNwbGluZVwiLFwibGluZVwiLHt9LHtnZXRQb2ludFNwbGluZTpmdW5jdGlvbihjLGYsQil7dmFyIHQ9Zi5wbG90WCx2PWYucGxvdFksQz1jW0ItMV07Qj1jW0IrMV07aWYoQyYmIUMuaXNOdWxsJiYhMSE9PUMuZG9DdXJ2ZSYmIWYuaXNDbGlmZiYmQiYmIUIuaXNOdWxsJiYhMSE9PUIuZG9DdXJ2ZSYmIWYuaXNDbGlmZil7Yz1DLnBsb3RZO1xudmFyIHo9Qi5wbG90WDtCPUIucGxvdFk7dmFyIHk9MDt2YXIgaD0oMS41KnQrQy5wbG90WCkvMi41O3ZhciBuPSgxLjUqditjKS8yLjU7ej0oMS41KnQreikvMi41O3ZhciBxPSgxLjUqditCKS8yLjU7eiE9PWgmJih5PShxLW4pKih6LXQpLyh6LWgpK3YtcSk7bis9eTtxKz15O24+YyYmbj52PyhuPU1hdGgubWF4KGMsdikscT0yKnYtbik6bjxjJiZuPHYmJihuPU1hdGgubWluKGMsdikscT0yKnYtbik7cT5CJiZxPnY/KHE9TWF0aC5tYXgoQix2KSxuPTIqdi1xKTpxPEImJnE8diYmKHE9TWF0aC5taW4oQix2KSxuPTIqdi1xKTtmLnJpZ2h0Q29udFg9ejtmLnJpZ2h0Q29udFk9cX1mPVtcIkNcIixGKEMucmlnaHRDb250WCxDLnBsb3RYKSxGKEMucmlnaHRDb250WSxDLnBsb3RZKSxGKGgsdCksRihuLHYpLHQsdl07Qy5yaWdodENvbnRYPUMucmlnaHRDb250WT1udWxsO3JldHVybiBmfX0pO1wiXCJ9KTtNKEksXCJwYXJ0cy9BcmVhU3BsaW5lU2VyaWVzLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdXSxcbmZ1bmN0aW9uKGMpe3ZhciBmPWMuc2VyaWVzVHlwZXMuYXJlYS5wcm90b3R5cGUsRj1jLnNlcmllc1R5cGU7RihcImFyZWFzcGxpbmVcIixcInNwbGluZVwiLGMuZGVmYXVsdFBsb3RPcHRpb25zLmFyZWEse2dldFN0YWNrUG9pbnRzOmYuZ2V0U3RhY2tQb2ludHMsZ2V0R3JhcGhQYXRoOmYuZ2V0R3JhcGhQYXRoLGRyYXdHcmFwaDpmLmRyYXdHcmFwaCxkcmF3TGVnZW5kU3ltYm9sOmMuTGVnZW5kU3ltYm9sTWl4aW4uZHJhd1JlY3RhbmdsZX0pO1wiXCJ9KTtNKEksXCJwYXJ0cy9Db2x1bW5TZXJpZXMuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmRlZmluZWQsRz1mLmV4dGVuZCx6PWYuaXNOdW1iZXIsQj1mLnBpY2ssdD1jLmFuaW1PYmplY3Qsdj1jLmNvbG9yLEM9Yy5tZXJnZSxIPWMuU2VyaWVzO2Y9Yy5zZXJpZXNUeXBlO3ZhciB5PWMuc3ZnO2YoXCJjb2x1bW5cIixcImxpbmVcIix7Ym9yZGVyUmFkaXVzOjAsY3Jpc3A6ITAsXG5ncm91cFBhZGRpbmc6LjIsbWFya2VyOm51bGwscG9pbnRQYWRkaW5nOi4xLG1pblBvaW50TGVuZ3RoOjAsY3JvcFRocmVzaG9sZDo1MCxwb2ludFJhbmdlOm51bGwsc3RhdGVzOntob3Zlcjp7aGFsbzohMSxicmlnaHRuZXNzOi4xfSxzZWxlY3Q6e2NvbG9yOlwiI2NjY2NjY1wiLGJvcmRlckNvbG9yOlwiIzAwMDAwMFwifX0sZGF0YUxhYmVsczp7YWxpZ246bnVsbCx2ZXJ0aWNhbEFsaWduOm51bGwseTpudWxsfSxzb2Z0VGhyZXNob2xkOiExLHN0YXJ0RnJvbVRocmVzaG9sZDohMCxzdGlja3lUcmFja2luZzohMSx0b29sdGlwOntkaXN0YW5jZTo2fSx0aHJlc2hvbGQ6MCxib3JkZXJDb2xvcjpcIiNmZmZmZmZcIn0se2Nyb3BTaG91bGRlcjowLGRpcmVjdFRvdWNoOiEwLHRyYWNrZXJHcm91cHM6W1wiZ3JvdXBcIixcImRhdGFMYWJlbHNHcm91cFwiXSxuZWdTdGFja3M6ITAsaW5pdDpmdW5jdGlvbigpe0gucHJvdG90eXBlLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBjPXRoaXMsZj1jLmNoYXJ0O1xuZi5oYXNSZW5kZXJlZCYmZi5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihmKXtmLnR5cGU9PT1jLnR5cGUmJihmLmlzRGlydHk9ITApfSl9LGdldENvbHVtbk1ldHJpY3M6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGY9Yy5vcHRpb25zLHE9Yy54QXhpcyxnPWMueUF4aXMsYj1xLm9wdGlvbnMucmV2ZXJzZWRTdGFja3M7Yj1xLnJldmVyc2VkJiYhYnx8IXEucmV2ZXJzZWQmJmI7dmFyIGEsZD17fSxlPTA7ITE9PT1mLmdyb3VwaW5nP2U9MTpjLmNoYXJ0LnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBmPWIueUF4aXMsaz1iLm9wdGlvbnM7aWYoYi50eXBlPT09Yy50eXBlJiYoYi52aXNpYmxlfHwhYy5jaGFydC5vcHRpb25zLmNoYXJ0Lmlnbm9yZUhpZGRlblNlcmllcykmJmcubGVuPT09Zi5sZW4mJmcucG9zPT09Zi5wb3Mpe2lmKGsuc3RhY2tpbmcpe2E9Yi5zdGFja0tleTt2b2lkIDA9PT1kW2FdJiYoZFthXT1lKyspO3ZhciBoPWRbYV19ZWxzZSExIT09ay5ncm91cGluZyYmKGg9XG5lKyspO2IuY29sdW1uSW5kZXg9aH19KTt2YXIgbD1NYXRoLm1pbihNYXRoLmFicyhxLnRyYW5zQSkqKHEub3JkaW5hbFNsb3BlfHxmLnBvaW50UmFuZ2V8fHEuY2xvc2VzdFBvaW50UmFuZ2V8fHEudGlja0ludGVydmFsfHwxKSxxLmxlbiksdj1sKmYuZ3JvdXBQYWRkaW5nLHQ9KGwtMip2KS8oZXx8MSk7Zj1NYXRoLm1pbihmLm1heFBvaW50V2lkdGh8fHEubGVuLEIoZi5wb2ludFdpZHRoLHQqKDEtMipmLnBvaW50UGFkZGluZykpKTtjLmNvbHVtbk1ldHJpY3M9e3dpZHRoOmYsb2Zmc2V0Oih0LWYpLzIrKHYrKChjLmNvbHVtbkluZGV4fHwwKSsoYj8xOjApKSp0LWwvMikqKGI/LTE6MSl9O3JldHVybiBjLmNvbHVtbk1ldHJpY3N9LGNyaXNwQ29sOmZ1bmN0aW9uKGMsZixxLGcpe3ZhciBiPXRoaXMuY2hhcnQsYT10aGlzLmJvcmRlcldpZHRoLGQ9LShhJTI/LjU6MCk7YT1hJTI/LjU6MTtiLmludmVydGVkJiZiLnJlbmRlcmVyLmlzVk1MJiYoYSs9MSk7dGhpcy5vcHRpb25zLmNyaXNwJiZcbihxPU1hdGgucm91bmQoYytxKStkLGM9TWF0aC5yb3VuZChjKStkLHEtPWMpO2c9TWF0aC5yb3VuZChmK2cpK2E7ZD0uNT49TWF0aC5hYnMoZikmJi41PGc7Zj1NYXRoLnJvdW5kKGYpK2E7Zy09ZjtkJiZnJiYoLS1mLGcrPTEpO3JldHVybnt4OmMseTpmLHdpZHRoOnEsaGVpZ2h0Omd9fSx0cmFuc2xhdGU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGY9Yy5jaGFydCxxPWMub3B0aW9ucyxnPWMuZGVuc2U9Mj5jLmNsb3Nlc3RQb2ludFJhbmdlKmMueEF4aXMudHJhbnNBO2c9Yy5ib3JkZXJXaWR0aD1CKHEuYm9yZGVyV2lkdGgsZz8wOjEpO3ZhciBiPWMueUF4aXMsYT1xLnRocmVzaG9sZCxkPWMudHJhbnNsYXRlZFRocmVzaG9sZD1iLmdldFRocmVzaG9sZChhKSxlPUIocS5taW5Qb2ludExlbmd0aCw1KSxsPWMuZ2V0Q29sdW1uTWV0cmljcygpLHY9bC53aWR0aCx0PWMuYmFyVz1NYXRoLm1heCh2LDErMipnKSxwPWMucG9pbnRYT2Zmc2V0PWwub2Zmc2V0LHU9Yy5kYXRhTWluLGs9Yy5kYXRhTWF4O1xuZi5pbnZlcnRlZCYmKGQtPS41KTtxLnBvaW50UGFkZGluZyYmKHQ9TWF0aC5jZWlsKHQpKTtILnByb3RvdHlwZS50cmFuc2xhdGUuYXBwbHkoYyk7Yy5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihnKXt2YXIgaD1CKGcueUJvdHRvbSxkKSxsPTk5OStNYXRoLmFicyhoKSxyPXY7bD1NYXRoLm1pbihNYXRoLm1heCgtbCxnLnBsb3RZKSxiLmxlbitsKTt2YXIgbT1nLnBsb3RYK3Asbj10LHE9TWF0aC5taW4obCxoKSx5PU1hdGgubWF4KGwsaCktcTtpZihlJiZNYXRoLmFicyh5KTxlKXt5PWU7dmFyIEU9IWIucmV2ZXJzZWQmJiFnLm5lZ2F0aXZlfHxiLnJldmVyc2VkJiZnLm5lZ2F0aXZlO2cueT09PWEmJmMuZGF0YU1heDw9YSYmYi5taW48YSYmdSE9PWsmJihFPSFFKTtxPU1hdGguYWJzKHEtZCk+ZT9oLWU6ZC0oRT9lOjApfUYoZy5vcHRpb25zLnBvaW50V2lkdGgpJiYocj1uPU1hdGguY2VpbChnLm9wdGlvbnMucG9pbnRXaWR0aCksbS09TWF0aC5yb3VuZCgoci12KS8yKSk7Zy5iYXJYPVxubTtnLnBvaW50V2lkdGg9cjtnLnRvb2x0aXBQb3M9Zi5pbnZlcnRlZD9bYi5sZW4rYi5wb3MtZi5wbG90TGVmdC1sLGMueEF4aXMubGVuLW0tbi8yLHldOlttK24vMixsK2IucG9zLWYucGxvdFRvcCx5XTtnLnNoYXBlVHlwZT1jLnBvaW50Q2xhc3MucHJvdG90eXBlLnNoYXBlVHlwZXx8XCJyZWN0XCI7Zy5zaGFwZUFyZ3M9Yy5jcmlzcENvbC5hcHBseShjLGcuaXNOdWxsP1ttLGQsbiwwXTpbbSxxLG4seV0pfSl9LGdldFN5bWJvbDpjLm5vb3AsZHJhd0xlZ2VuZFN5bWJvbDpjLkxlZ2VuZFN5bWJvbE1peGluLmRyYXdSZWN0YW5nbGUsZHJhd0dyYXBoOmZ1bmN0aW9uKCl7dGhpcy5ncm91cFt0aGlzLmRlbnNlP1wiYWRkQ2xhc3NcIjpcInJlbW92ZUNsYXNzXCJdKFwiaGlnaGNoYXJ0cy1kZW5zZS1kYXRhXCIpfSxwb2ludEF0dHJpYnM6ZnVuY3Rpb24oYyxmKXt2YXIgaD10aGlzLm9wdGlvbnMsZz10aGlzLnBvaW50QXR0clRvT3B0aW9uc3x8e307dmFyIGI9Zy5zdHJva2V8fFwiYm9yZGVyQ29sb3JcIjtcbnZhciBhPWdbXCJzdHJva2Utd2lkdGhcIl18fFwiYm9yZGVyV2lkdGhcIixkPWMmJmMuY29sb3J8fHRoaXMuY29sb3IsZT1jJiZjW2JdfHxoW2JdfHx0aGlzLmNvbG9yfHxkLGw9YyYmY1thXXx8aFthXXx8dGhpc1thXXx8MDtnPWMmJmMub3B0aW9ucy5kYXNoU3R5bGV8fGguZGFzaFN0eWxlO3ZhciBuPUIoaC5vcGFjaXR5LDEpO2lmKGMmJnRoaXMuem9uZXMubGVuZ3RoKXt2YXIgdD1jLmdldFpvbmUoKTtkPWMub3B0aW9ucy5jb2xvcnx8dCYmKHQuY29sb3J8fGMubm9uWm9uZWRDb2xvcil8fHRoaXMuY29sb3I7dCYmKGU9dC5ib3JkZXJDb2xvcnx8ZSxnPXQuZGFzaFN0eWxlfHxnLGw9dC5ib3JkZXJXaWR0aHx8bCl9ZiYmKGM9QyhoLnN0YXRlc1tmXSxjLm9wdGlvbnMuc3RhdGVzJiZjLm9wdGlvbnMuc3RhdGVzW2ZdfHx7fSksZj1jLmJyaWdodG5lc3MsZD1jLmNvbG9yfHx2b2lkIDAhPT1mJiZ2KGQpLmJyaWdodGVuKGMuYnJpZ2h0bmVzcykuZ2V0KCl8fGQsZT1jW2JdfHxlLGw9Y1thXXx8XG5sLGc9Yy5kYXNoU3R5bGV8fGcsbj1CKGMub3BhY2l0eSxuKSk7Yj17ZmlsbDpkLHN0cm9rZTplLFwic3Ryb2tlLXdpZHRoXCI6bCxvcGFjaXR5Om59O2cmJihiLmRhc2hzdHlsZT1nKTtyZXR1cm4gYn0sZHJhd1BvaW50czpmdW5jdGlvbigpe3ZhciBjPXRoaXMsZj10aGlzLmNoYXJ0LHE9Yy5vcHRpb25zLGc9Zi5yZW5kZXJlcixiPXEuYW5pbWF0aW9uTGltaXR8fDI1MCxhO2MucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIGU9ZC5ncmFwaGljLGw9ZSYmZi5wb2ludENvdW50PGI/XCJhbmltYXRlXCI6XCJhdHRyXCI7aWYoeihkLnBsb3RZKSYmbnVsbCE9PWQueSl7YT1kLnNoYXBlQXJncztlJiZkLmhhc05ld1NoYXBlVHlwZSgpJiYoZT1lLmRlc3Ryb3koKSk7aWYoZSllW2xdKEMoYSkpO2Vsc2UgZC5ncmFwaGljPWU9Z1tkLnNoYXBlVHlwZV0oYSkuYWRkKGQuZ3JvdXB8fGMuZ3JvdXApO2lmKHEuYm9yZGVyUmFkaXVzKWVbbF0oe3I6cS5ib3JkZXJSYWRpdXN9KTtmLnN0eWxlZE1vZGV8fFxuZVtsXShjLnBvaW50QXR0cmlicyhkLGQuc2VsZWN0ZWQmJlwic2VsZWN0XCIpKS5zaGFkb3coITEhPT1kLmFsbG93U2hhZG93JiZxLnNoYWRvdyxudWxsLHEuc3RhY2tpbmcmJiFxLmJvcmRlclJhZGl1cyk7ZS5hZGRDbGFzcyhkLmdldENsYXNzTmFtZSgpLCEwKX1lbHNlIGUmJihkLmdyYXBoaWM9ZS5kZXN0cm95KCkpfSl9LGFuaW1hdGU6ZnVuY3Rpb24oYyl7dmFyIGY9dGhpcyxoPXRoaXMueUF4aXMsZz1mLm9wdGlvbnMsYj10aGlzLmNoYXJ0LmludmVydGVkLGE9e30sZD1iP1widHJhbnNsYXRlWFwiOlwidHJhbnNsYXRlWVwiO2lmKHkpaWYoYylhLnNjYWxlWT0uMDAxLGM9TWF0aC5taW4oaC5wb3MraC5sZW4sTWF0aC5tYXgoaC5wb3MsaC50b1BpeGVscyhnLnRocmVzaG9sZCkpKSxiP2EudHJhbnNsYXRlWD1jLWgubGVuOmEudHJhbnNsYXRlWT1jLGYuY2xpcEJveCYmZi5zZXRDbGlwKCksZi5ncm91cC5hdHRyKGEpO2Vsc2V7dmFyIGU9Zi5ncm91cC5hdHRyKGQpO2YuZ3JvdXAuYW5pbWF0ZSh7c2NhbGVZOjF9LFxuRyh0KGYub3B0aW9ucy5hbmltYXRpb24pLHtzdGVwOmZ1bmN0aW9uKGIsYyl7YVtkXT1lK2MucG9zKihoLnBvcy1lKTtmLmdyb3VwLmF0dHIoYSl9fSkpO2YuYW5pbWF0ZT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxmPWMuY2hhcnQ7Zi5oYXNSZW5kZXJlZCYmZi5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihmKXtmLnR5cGU9PT1jLnR5cGUmJihmLmlzRGlydHk9ITApfSk7SC5wcm90b3R5cGUucmVtb3ZlLmFwcGx5KGMsYXJndW1lbnRzKX19KTtcIlwifSk7TShJLFwicGFydHMvQmFyU2VyaWVzLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdXSxmdW5jdGlvbihjKXtjPWMuc2VyaWVzVHlwZTtjKFwiYmFyXCIsXCJjb2x1bW5cIixudWxsLHtpbnZlcnRlZDohMH0pO1wiXCJ9KTtNKEksXCJwYXJ0cy9TY2F0dGVyU2VyaWVzLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdXSxmdW5jdGlvbihjKXt2YXIgZj1jLlNlcmllcyxGPWMuc2VyaWVzVHlwZTtGKFwic2NhdHRlclwiLFwibGluZVwiLHtsaW5lV2lkdGg6MCxcbmZpbmROZWFyZXN0UG9pbnRCeTpcInh5XCIsaml0dGVyOnt4OjAseTowfSxtYXJrZXI6e2VuYWJsZWQ6ITB9LHRvb2x0aXA6e2hlYWRlckZvcm1hdDonPHNwYW4gc3R5bGU9XCJjb2xvcjp7cG9pbnQuY29sb3J9XCI+XFx1MjVjZjwvc3Bhbj4gPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDEwcHhcIj4ge3Nlcmllcy5uYW1lfTwvc3Bhbj48YnIvPicscG9pbnRGb3JtYXQ6XCJ4OiA8Yj57cG9pbnQueH08L2I+PGJyLz55OiA8Yj57cG9pbnQueX08L2I+PGJyLz5cIn19LHtzb3J0ZWQ6ITEscmVxdWlyZVNvcnRpbmc6ITEsbm9TaGFyZWRUb29sdGlwOiEwLHRyYWNrZXJHcm91cHM6W1wiZ3JvdXBcIixcIm1hcmtlckdyb3VwXCIsXCJkYXRhTGFiZWxzR3JvdXBcIl0sdGFrZU9yZGluYWxQb3NpdGlvbjohMSxkcmF3R3JhcGg6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMubGluZVdpZHRoJiZmLnByb3RvdHlwZS5kcmF3R3JhcGguY2FsbCh0aGlzKX0sYXBwbHlKaXR0ZXI6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGY9dGhpcy5vcHRpb25zLmppdHRlcixcbkI9dGhpcy5wb2ludHMubGVuZ3RoO2YmJnRoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24odCx2KXtbXCJ4XCIsXCJ5XCJdLmZvckVhY2goZnVuY3Rpb24oQyx6KXt2YXIgeT1cInBsb3RcIitDLnRvVXBwZXJDYXNlKCk7aWYoZltDXSYmIXQuaXNOdWxsKXt2YXIgaD1jW0MrXCJBeGlzXCJdO3ZhciBuPWZbQ10qaC50cmFuc0E7aWYoaCYmIWguaXNMb2cpe3ZhciBxPU1hdGgubWF4KDAsdFt5XS1uKTtoPU1hdGgubWluKGgubGVuLHRbeV0rbik7ej0xRTQqTWF0aC5zaW4odit6KkIpO3RbeV09cSsoaC1xKSooei1NYXRoLmZsb29yKHopKTtcInhcIj09PUMmJih0LmNsaWVudFg9dC5wbG90WCl9fX0pfSl9fSk7Yy5hZGRFdmVudChmLFwiYWZ0ZXJUcmFuc2xhdGVcIixmdW5jdGlvbigpe3RoaXMuYXBwbHlKaXR0ZXImJnRoaXMuYXBwbHlKaXR0ZXIoKX0pO1wiXCJ9KTtNKEksXCJtaXhpbnMvY2VudGVyZWQtc2VyaWVzLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsXG5mKXt2YXIgRj1mLmlzTnVtYmVyLEc9Zi5waWNrLHo9Yy5kZWcycmFkLEI9Yy5yZWxhdGl2ZUxlbmd0aDtjLkNlbnRlcmVkU2VyaWVzTWl4aW49e2dldENlbnRlcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMub3B0aW9ucyxmPXRoaXMuY2hhcnQsQz0yKihjLnNsaWNlZE9mZnNldHx8MCksej1mLnBsb3RXaWR0aC0yKkM7Zj1mLnBsb3RIZWlnaHQtMipDO3ZhciB5PWMuY2VudGVyO3k9W0coeVswXSxcIjUwJVwiKSxHKHlbMV0sXCI1MCVcIiksYy5zaXplfHxcIjEwMCVcIixjLmlubmVyU2l6ZXx8MF07dmFyIGg9TWF0aC5taW4oeixmKSxuO2ZvcihuPTA7ND5uOysrbil7dmFyIHE9eVtuXTtjPTI+bnx8Mj09PW4mJi8lJC8udGVzdChxKTt5W25dPUIocSxbeixmLGgseVsyXV1bbl0pKyhjP0M6MCl9eVszXT55WzJdJiYoeVszXT15WzJdKTtyZXR1cm4geX0sZ2V0U3RhcnRBbmRFbmRSYWRpYW5zOmZ1bmN0aW9uKGMsZil7Yz1GKGMpP2M6MDtmPUYoZikmJmY+YyYmMzYwPmYtYz9mOmMrMzYwO3JldHVybntzdGFydDp6KlxuKGMrLTkwKSxlbmQ6eiooZistOTApfX19fSk7TShJLFwicGFydHMvUGllU2VyaWVzLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5kZWZpbmVkLEc9Zi5pc051bWJlcix6PWYucGljayxCPWYuc2V0QW5pbWF0aW9uLHQ9Yy5hZGRFdmVudDtmPWMuQ2VudGVyZWRTZXJpZXNNaXhpbjt2YXIgdj1mLmdldFN0YXJ0QW5kRW5kUmFkaWFucyxDPWMubWVyZ2UsSD1jLm5vb3AseT1jLlBvaW50LGg9Yy5TZXJpZXMsbj1jLnNlcmllc1R5cGUscT1jLmZpcmVFdmVudDtuKFwicGllXCIsXCJsaW5lXCIse2NlbnRlcjpbbnVsbCxudWxsXSxjbGlwOiExLGNvbG9yQnlQb2ludDohMCxkYXRhTGFiZWxzOnthbGxvd092ZXJsYXA6ITAsY29ubmVjdG9yUGFkZGluZzo1LGRpc3RhbmNlOjMwLGVuYWJsZWQ6ITAsZm9ybWF0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9pbnQuaXNOdWxsP3ZvaWQgMDp0aGlzLnBvaW50Lm5hbWV9LFxuc29mdENvbm5lY3RvcjohMCx4OjAsY29ubmVjdG9yU2hhcGU6XCJmaXhlZE9mZnNldFwiLGNyb29rRGlzdGFuY2U6XCI3MCVcIn0sZmlsbENvbG9yOnZvaWQgMCxpZ25vcmVIaWRkZW5Qb2ludDohMCxpbmFjdGl2ZU90aGVyUG9pbnRzOiEwLGxlZ2VuZFR5cGU6XCJwb2ludFwiLG1hcmtlcjpudWxsLHNpemU6bnVsbCxzaG93SW5MZWdlbmQ6ITEsc2xpY2VkT2Zmc2V0OjEwLHN0aWNreVRyYWNraW5nOiExLHRvb2x0aXA6e2ZvbGxvd1BvaW50ZXI6ITB9LGJvcmRlckNvbG9yOlwiI2ZmZmZmZlwiLGJvcmRlcldpZHRoOjEsbGluZVdpZHRoOnZvaWQgMCxzdGF0ZXM6e2hvdmVyOnticmlnaHRuZXNzOi4xfX19LHtpc0NhcnRlc2lhbjohMSxyZXF1aXJlU29ydGluZzohMSxkaXJlY3RUb3VjaDohMCxub1NoYXJlZFRvb2x0aXA6ITAsdHJhY2tlckdyb3VwczpbXCJncm91cFwiLFwiZGF0YUxhYmVsc0dyb3VwXCJdLGF4aXNUeXBlczpbXSxwb2ludEF0dHJpYnM6Yy5zZXJpZXNUeXBlcy5jb2x1bW4ucHJvdG90eXBlLnBvaW50QXR0cmlicyxcbmFuaW1hdGU6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcyxhPWIucG9pbnRzLGQ9Yi5zdGFydEFuZ2xlUmFkO2N8fChhLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9YS5ncmFwaGljLGU9YS5zaGFwZUFyZ3M7YyYmKGMuYXR0cih7cjphLnN0YXJ0Unx8Yi5jZW50ZXJbM10vMixzdGFydDpkLGVuZDpkfSksYy5hbmltYXRlKHtyOmUucixzdGFydDplLnN0YXJ0LGVuZDplLmVuZH0sYi5vcHRpb25zLmFuaW1hdGlvbikpfSksYi5hbmltYXRlPW51bGwpfSxoYXNEYXRhOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnByb2Nlc3NlZFhEYXRhLmxlbmd0aH0sdXBkYXRlVG90YWxzOmZ1bmN0aW9uKCl7dmFyIGMsYj0wLGE9dGhpcy5wb2ludHMsZD1hLmxlbmd0aCxlPXRoaXMub3B0aW9ucy5pZ25vcmVIaWRkZW5Qb2ludDtmb3IoYz0wO2M8ZDtjKyspe3ZhciBmPWFbY107Yis9ZSYmIWYudmlzaWJsZT8wOmYuaXNOdWxsPzA6Zi55fXRoaXMudG90YWw9Yjtmb3IoYz0wO2M8ZDtjKyspZj1hW2NdLGYucGVyY2VudGFnZT1cbjA8YiYmKGYudmlzaWJsZXx8IWUpP2YueS9iKjEwMDowLGYudG90YWw9Yn0sZ2VuZXJhdGVQb2ludHM6ZnVuY3Rpb24oKXtoLnByb3RvdHlwZS5nZW5lcmF0ZVBvaW50cy5jYWxsKHRoaXMpO3RoaXMudXBkYXRlVG90YWxzKCl9LGdldFg6ZnVuY3Rpb24oYyxiLGEpe3ZhciBkPXRoaXMuY2VudGVyLGU9dGhpcy5yYWRpaT90aGlzLnJhZGlpW2EuaW5kZXhdOmRbMl0vMjtyZXR1cm4gZFswXSsoYj8tMToxKSpNYXRoLmNvcyhNYXRoLmFzaW4oTWF0aC5tYXgoTWF0aC5taW4oKGMtZFsxXSkvKGUrYS5sYWJlbERpc3RhbmNlKSwxKSwtMSkpKSooZSthLmxhYmVsRGlzdGFuY2UpKygwPGEubGFiZWxEaXN0YW5jZT8oYj8tMToxKSp0aGlzLm9wdGlvbnMuZGF0YUxhYmVscy5wYWRkaW5nOjApfSx0cmFuc2xhdGU6ZnVuY3Rpb24oZyl7dGhpcy5nZW5lcmF0ZVBvaW50cygpO3ZhciBiPTAsYT10aGlzLm9wdGlvbnMsZD1hLnNsaWNlZE9mZnNldCxlPWQrKGEuYm9yZGVyV2lkdGh8fDApLGY9dihhLnN0YXJ0QW5nbGUsXG5hLmVuZEFuZ2xlKSxoPXRoaXMuc3RhcnRBbmdsZVJhZD1mLnN0YXJ0O2Y9KHRoaXMuZW5kQW5nbGVSYWQ9Zi5lbmQpLWg7dmFyIG49dGhpcy5wb2ludHMscD1hLmRhdGFMYWJlbHMuZGlzdGFuY2U7YT1hLmlnbm9yZUhpZGRlblBvaW50O3ZhciB1LGs9bi5sZW5ndGg7Z3x8KHRoaXMuY2VudGVyPWc9dGhpcy5nZXRDZW50ZXIoKSk7Zm9yKHU9MDt1PGs7dSsrKXt2YXIgcj1uW3VdO3ZhciB4PWgrYipmO2lmKCFhfHxyLnZpc2libGUpYis9ci5wZXJjZW50YWdlLzEwMDt2YXIgQT1oK2IqZjtyLnNoYXBlVHlwZT1cImFyY1wiO3Iuc2hhcGVBcmdzPXt4OmdbMF0seTpnWzFdLHI6Z1syXS8yLGlubmVyUjpnWzNdLzIsc3RhcnQ6TWF0aC5yb3VuZCgxRTMqeCkvMUUzLGVuZDpNYXRoLnJvdW5kKDFFMypBKS8xRTN9O3IubGFiZWxEaXN0YW5jZT16KHIub3B0aW9ucy5kYXRhTGFiZWxzJiZyLm9wdGlvbnMuZGF0YUxhYmVscy5kaXN0YW5jZSxwKTtyLmxhYmVsRGlzdGFuY2U9Yy5yZWxhdGl2ZUxlbmd0aChyLmxhYmVsRGlzdGFuY2UsXG5yLnNoYXBlQXJncy5yKTt0aGlzLm1heExhYmVsRGlzdGFuY2U9TWF0aC5tYXgodGhpcy5tYXhMYWJlbERpc3RhbmNlfHwwLHIubGFiZWxEaXN0YW5jZSk7QT0oQSt4KS8yO0E+MS41Kk1hdGguUEk/QS09MipNYXRoLlBJOkE8LU1hdGguUEkvMiYmKEErPTIqTWF0aC5QSSk7ci5zbGljZWRUcmFuc2xhdGlvbj17dHJhbnNsYXRlWDpNYXRoLnJvdW5kKE1hdGguY29zKEEpKmQpLHRyYW5zbGF0ZVk6TWF0aC5yb3VuZChNYXRoLnNpbihBKSpkKX07dmFyIHc9TWF0aC5jb3MoQSkqZ1syXS8yO3ZhciBtPU1hdGguc2luKEEpKmdbMl0vMjtyLnRvb2x0aXBQb3M9W2dbMF0rLjcqdyxnWzFdKy43Km1dO3IuaGFsZj1BPC1NYXRoLlBJLzJ8fEE+TWF0aC5QSS8yPzE6MDtyLmFuZ2xlPUE7eD1NYXRoLm1pbihlLHIubGFiZWxEaXN0YW5jZS81KTtyLmxhYmVsUG9zaXRpb249e25hdHVyYWw6e3g6Z1swXSt3K01hdGguY29zKEEpKnIubGFiZWxEaXN0YW5jZSx5OmdbMV0rbStNYXRoLnNpbihBKSpyLmxhYmVsRGlzdGFuY2V9LFxuXCJmaW5hbFwiOnt9LGFsaWdubWVudDowPnIubGFiZWxEaXN0YW5jZT9cImNlbnRlclwiOnIuaGFsZj9cInJpZ2h0XCI6XCJsZWZ0XCIsY29ubmVjdG9yUG9zaXRpb246e2JyZWFrQXQ6e3g6Z1swXSt3K01hdGguY29zKEEpKngseTpnWzFdK20rTWF0aC5zaW4oQSkqeH0sdG91Y2hpbmdTbGljZUF0Ont4OmdbMF0rdyx5OmdbMV0rbX19fX1xKHRoaXMsXCJhZnRlclRyYW5zbGF0ZVwiKX0sZHJhd0VtcHR5OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5vcHRpb25zO2lmKDA9PT10aGlzLnRvdGFsKXt2YXIgYj10aGlzLmNlbnRlclswXTt2YXIgYT10aGlzLmNlbnRlclsxXTt0aGlzLmdyYXBofHwodGhpcy5ncmFwaD10aGlzLmNoYXJ0LnJlbmRlcmVyLmNpcmNsZShiLGEsMCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWdyYXBoXCIpLmFkZCh0aGlzLmdyb3VwKSk7dGhpcy5ncmFwaC5hbmltYXRlKHtcInN0cm9rZS13aWR0aFwiOmMuYm9yZGVyV2lkdGgsY3g6YixjeTphLHI6dGhpcy5jZW50ZXJbMl0vMixmaWxsOmMuZmlsbENvbG9yfHxcblwibm9uZVwiLHN0cm9rZTpjLmNvbG9yfHxcIiNjY2NjY2NcIn0pfWVsc2UgdGhpcy5ncmFwaCYmKHRoaXMuZ3JhcGg9dGhpcy5ncmFwaC5kZXN0cm95KCkpfSxyZWRyYXdQb2ludHM6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGI9Yy5jaGFydCxhPWIucmVuZGVyZXIsZCxlLGYsaCxuPWMub3B0aW9ucy5zaGFkb3c7dGhpcy5kcmF3RW1wdHkoKTshbnx8Yy5zaGFkb3dHcm91cHx8Yi5zdHlsZWRNb2RlfHwoYy5zaGFkb3dHcm91cD1hLmcoXCJzaGFkb3dcIikuYXR0cih7ekluZGV4Oi0xfSkuYWRkKGMuZ3JvdXApKTtjLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGcpe3ZhciBsPXt9O2U9Zy5ncmFwaGljO2lmKCFnLmlzTnVsbCYmZSl7aD1nLnNoYXBlQXJncztkPWcuZ2V0VHJhbnNsYXRlKCk7aWYoIWIuc3R5bGVkTW9kZSl7dmFyIGs9Zy5zaGFkb3dHcm91cDtuJiYhayYmKGs9Zy5zaGFkb3dHcm91cD1hLmcoXCJzaGFkb3dcIikuYWRkKGMuc2hhZG93R3JvdXApKTtrJiZrLmF0dHIoZCk7Zj1jLnBvaW50QXR0cmlicyhnLFxuZy5zZWxlY3RlZCYmXCJzZWxlY3RcIil9Zy5kZWxheWVkUmVuZGVyaW5nPyhlLnNldFJhZGlhbFJlZmVyZW5jZShjLmNlbnRlcikuYXR0cihoKS5hdHRyKGQpLGIuc3R5bGVkTW9kZXx8ZS5hdHRyKGYpLmF0dHIoe1wic3Ryb2tlLWxpbmVqb2luXCI6XCJyb3VuZFwifSkuc2hhZG93KG4sayksZy5kZWxheWVkUmVuZGVyaW5nPSExKTooZS5zZXRSYWRpYWxSZWZlcmVuY2UoYy5jZW50ZXIpLGIuc3R5bGVkTW9kZXx8QyghMCxsLGYpLEMoITAsbCxoLGQpLGUuYW5pbWF0ZShsKSk7ZS5hdHRyKHt2aXNpYmlsaXR5OmcudmlzaWJsZT9cImluaGVyaXRcIjpcImhpZGRlblwifSk7ZS5hZGRDbGFzcyhnLmdldENsYXNzTmFtZSgpKX1lbHNlIGUmJihnLmdyYXBoaWM9ZS5kZXN0cm95KCkpfSl9LGRyYXdQb2ludHM6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmNoYXJ0LnJlbmRlcmVyO3RoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oYil7Yi5ncmFwaGljfHwoYi5ncmFwaGljPWNbYi5zaGFwZVR5cGVdKGIuc2hhcGVBcmdzKS5hZGQoYi5zZXJpZXMuZ3JvdXApLFxuYi5kZWxheWVkUmVuZGVyaW5nPSEwKX0pfSxzZWFyY2hQb2ludDpILHNvcnRCeUFuZ2xlOmZ1bmN0aW9uKGMsYil7Yy5zb3J0KGZ1bmN0aW9uKGEsZCl7cmV0dXJuIHZvaWQgMCE9PWEuYW5nbGUmJihkLmFuZ2xlLWEuYW5nbGUpKmJ9KX0sZHJhd0xlZ2VuZFN5bWJvbDpjLkxlZ2VuZFN5bWJvbE1peGluLmRyYXdSZWN0YW5nbGUsZ2V0Q2VudGVyOmYuZ2V0Q2VudGVyLGdldFN5bWJvbDpILGRyYXdHcmFwaDpudWxsfSx7aW5pdDpmdW5jdGlvbigpe3kucHJvdG90eXBlLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBjPXRoaXM7Yy5uYW1lPXooYy5uYW1lLFwiU2xpY2VcIik7dmFyIGI9ZnVuY3Rpb24oYSl7Yy5zbGljZShcInNlbGVjdFwiPT09YS50eXBlKX07dChjLFwic2VsZWN0XCIsYik7dChjLFwidW5zZWxlY3RcIixiKTtyZXR1cm4gY30saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiBHKHRoaXMueSkmJjA8PXRoaXMueX0sc2V0VmlzaWJsZTpmdW5jdGlvbihjLGIpe3ZhciBhPXRoaXMsXG5kPWEuc2VyaWVzLGU9ZC5jaGFydCxmPWQub3B0aW9ucy5pZ25vcmVIaWRkZW5Qb2ludDtiPXooYixmKTtjIT09YS52aXNpYmxlJiYoYS52aXNpYmxlPWEub3B0aW9ucy52aXNpYmxlPWM9dm9pZCAwPT09Yz8hYS52aXNpYmxlOmMsZC5vcHRpb25zLmRhdGFbZC5kYXRhLmluZGV4T2YoYSldPWEub3B0aW9ucyxbXCJncmFwaGljXCIsXCJkYXRhTGFiZWxcIixcImNvbm5lY3RvclwiLFwic2hhZG93R3JvdXBcIl0uZm9yRWFjaChmdW5jdGlvbihiKXtpZihhW2JdKWFbYl1bYz9cInNob3dcIjpcImhpZGVcIl0oITApfSksYS5sZWdlbmRJdGVtJiZlLmxlZ2VuZC5jb2xvcml6ZUl0ZW0oYSxjKSxjfHxcImhvdmVyXCIhPT1hLnN0YXRlfHxhLnNldFN0YXRlKFwiXCIpLGYmJihkLmlzRGlydHk9ITApLGImJmUucmVkcmF3KCkpfSxzbGljZTpmdW5jdGlvbihjLGIsYSl7dmFyIGQ9dGhpcy5zZXJpZXM7QihhLGQuY2hhcnQpO3ooYiwhMCk7dGhpcy5zbGljZWQ9dGhpcy5vcHRpb25zLnNsaWNlZD1GKGMpP2M6IXRoaXMuc2xpY2VkO1xuZC5vcHRpb25zLmRhdGFbZC5kYXRhLmluZGV4T2YodGhpcyldPXRoaXMub3B0aW9uczt0aGlzLmdyYXBoaWMuYW5pbWF0ZSh0aGlzLmdldFRyYW5zbGF0ZSgpKTt0aGlzLnNoYWRvd0dyb3VwJiZ0aGlzLnNoYWRvd0dyb3VwLmFuaW1hdGUodGhpcy5nZXRUcmFuc2xhdGUoKSl9LGdldFRyYW5zbGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNsaWNlZD90aGlzLnNsaWNlZFRyYW5zbGF0aW9uOnt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowfX0saGFsb1BhdGg6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcy5zaGFwZUFyZ3M7cmV0dXJuIHRoaXMuc2xpY2VkfHwhdGhpcy52aXNpYmxlP1tdOnRoaXMuc2VyaWVzLmNoYXJ0LnJlbmRlcmVyLnN5bWJvbHMuYXJjKGIueCxiLnksYi5yK2MsYi5yK2Mse2lubmVyUjpiLnItMSxzdGFydDpiLnN0YXJ0LGVuZDpiLmVuZH0pfSxjb25uZWN0b3JTaGFwZXM6e2ZpeGVkT2Zmc2V0OmZ1bmN0aW9uKGMsYixhKXt2YXIgZD1iLmJyZWFrQXQ7Yj1iLnRvdWNoaW5nU2xpY2VBdDtcbnJldHVybltcIk1cIixjLngsYy55XS5jb25jYXQoYS5zb2Z0Q29ubmVjdG9yP1tcIkNcIixjLngrKFwibGVmdFwiPT09Yy5hbGlnbm1lbnQ/LTU6NSksYy55LDIqZC54LWIueCwyKmQueS1iLnksZC54LGQueV06W1wiTFwiLGQueCxkLnldKS5jb25jYXQoW1wiTFwiLGIueCxiLnldKX0sc3RyYWlnaHQ6ZnVuY3Rpb24oYyxiKXtiPWIudG91Y2hpbmdTbGljZUF0O3JldHVybltcIk1cIixjLngsYy55LFwiTFwiLGIueCxiLnldfSxjcm9va2VkTGluZTpmdW5jdGlvbihmLGIsYSl7Yj1iLnRvdWNoaW5nU2xpY2VBdDt2YXIgZD10aGlzLnNlcmllcyxlPWQuY2VudGVyWzBdLGc9ZC5jaGFydC5wbG90V2lkdGgsaD1kLmNoYXJ0LnBsb3RMZWZ0O2Q9Zi5hbGlnbm1lbnQ7dmFyIG49dGhpcy5zaGFwZUFyZ3MucjthPWMucmVsYXRpdmVMZW5ndGgoYS5jcm9va0Rpc3RhbmNlLDEpO2E9XCJsZWZ0XCI9PT1kP2UrbisoZytoLWUtbikqKDEtYSk6aCsoZS1uKSphO2U9W1wiTFwiLGEsZi55XTtpZihcImxlZnRcIj09PWQ/YT5mLnh8fGE8XG5iLng6YTxmLnh8fGE+Yi54KWU9W107cmV0dXJuW1wiTVwiLGYueCxmLnldLmNvbmNhdChlKS5jb25jYXQoW1wiTFwiLGIueCxiLnldKX19LGdldENvbm5lY3RvclBhdGg6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmxhYmVsUG9zaXRpb24sYj10aGlzLnNlcmllcy5vcHRpb25zLmRhdGFMYWJlbHMsYT1iLmNvbm5lY3RvclNoYXBlLGQ9dGhpcy5jb25uZWN0b3JTaGFwZXM7ZFthXSYmKGE9ZFthXSk7cmV0dXJuIGEuY2FsbCh0aGlzLHt4OmMuZmluYWwueCx5OmMuZmluYWwueSxhbGlnbm1lbnQ6Yy5hbGlnbm1lbnR9LGMuY29ubmVjdG9yUG9zaXRpb24sYil9fSk7XCJcIn0pO00oSSxcInBhcnRzL0RhdGFMYWJlbHMuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmFycmF5TWF4LEc9Zi5kZWZpbmVkLHo9Zi5leHRlbmQsQj1mLmlzQXJyYXksdD1mLm9iamVjdEVhY2gsdj1mLnBpY2ssQz1mLnNwbGF0LEg9Yy5mb3JtYXQsXG55PWMubWVyZ2U7Zj1jLm5vb3A7dmFyIGg9Yy5yZWxhdGl2ZUxlbmd0aCxuPWMuU2VyaWVzLHE9Yy5zZXJpZXNUeXBlcyxnPWMuc3RhYmxlU29ydDtjLmRpc3RyaWJ1dGU9ZnVuY3Rpb24oYixhLGQpe2Z1bmN0aW9uIGUoYSxiKXtyZXR1cm4gYS50YXJnZXQtYi50YXJnZXR9dmFyIGYsaD0hMCxuPWIscD1bXTt2YXIgdT0wO3ZhciBrPW4ucmVkdWNlZExlbnx8YTtmb3IoZj1iLmxlbmd0aDtmLS07KXUrPWJbZl0uc2l6ZTtpZih1Pmspe2coYixmdW5jdGlvbihhLGIpe3JldHVybihiLnJhbmt8fDApLShhLnJhbmt8fDApfSk7Zm9yKHU9Zj0wO3U8PWs7KXUrPWJbZl0uc2l6ZSxmKys7cD1iLnNwbGljZShmLTEsYi5sZW5ndGgpfWcoYixlKTtmb3IoYj1iLm1hcChmdW5jdGlvbihhKXtyZXR1cm57c2l6ZTphLnNpemUsdGFyZ2V0czpbYS50YXJnZXRdLGFsaWduOnYoYS5hbGlnbiwuNSl9fSk7aDspe2ZvcihmPWIubGVuZ3RoO2YtLTspaD1iW2ZdLHU9KE1hdGgubWluLmFwcGx5KDAsaC50YXJnZXRzKStcbk1hdGgubWF4LmFwcGx5KDAsaC50YXJnZXRzKSkvMixoLnBvcz1NYXRoLm1pbihNYXRoLm1heCgwLHUtaC5zaXplKmguYWxpZ24pLGEtaC5zaXplKTtmPWIubGVuZ3RoO2ZvcihoPSExO2YtLTspMDxmJiZiW2YtMV0ucG9zK2JbZi0xXS5zaXplPmJbZl0ucG9zJiYoYltmLTFdLnNpemUrPWJbZl0uc2l6ZSxiW2YtMV0udGFyZ2V0cz1iW2YtMV0udGFyZ2V0cy5jb25jYXQoYltmXS50YXJnZXRzKSxiW2YtMV0uYWxpZ249LjUsYltmLTFdLnBvcytiW2YtMV0uc2l6ZT5hJiYoYltmLTFdLnBvcz1hLWJbZi0xXS5zaXplKSxiLnNwbGljZShmLDEpLGg9ITApfW4ucHVzaC5hcHBseShuLHApO2Y9MDtiLnNvbWUoZnVuY3Rpb24oYil7dmFyIGU9MDtpZihiLnRhcmdldHMuc29tZShmdW5jdGlvbigpe25bZl0ucG9zPWIucG9zK2U7aWYoTWF0aC5hYnMobltmXS5wb3MtbltmXS50YXJnZXQpPmQpcmV0dXJuIG4uc2xpY2UoMCxmKzEpLmZvckVhY2goZnVuY3Rpb24oYSl7ZGVsZXRlIGEucG9zfSksbi5yZWR1Y2VkTGVuPVxuKG4ucmVkdWNlZExlbnx8YSktLjEqYSxuLnJlZHVjZWRMZW4+LjEqYSYmYy5kaXN0cmlidXRlKG4sYSxkKSwhMDtlKz1uW2ZdLnNpemU7ZisrfSkpcmV0dXJuITB9KTtnKG4sZSl9O24ucHJvdG90eXBlLmRyYXdEYXRhTGFiZWxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihhLGIpe3ZhciBkPWIuZmlsdGVyO3JldHVybiBkPyhiPWQub3BlcmF0b3IsYT1hW2QucHJvcGVydHldLGQ9ZC52YWx1ZSxcIj5cIj09PWImJmE+ZHx8XCI8XCI9PT1iJiZhPGR8fFwiPj1cIj09PWImJmE+PWR8fFwiPD1cIj09PWImJmE8PWR8fFwiPT1cIj09PWImJmE9PWR8fFwiPT09XCI9PT1iJiZhPT09ZD8hMDohMSk6ITB9ZnVuY3Rpb24gYShhLGIpe3ZhciBkPVtdLGM7aWYoQihhKSYmIUIoYikpZD1hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4geShhLGIpfSk7ZWxzZSBpZihCKGIpJiYhQihhKSlkPWIubWFwKGZ1bmN0aW9uKGIpe3JldHVybiB5KGEsYil9KTtlbHNlIGlmKEIoYSl8fEIoYikpZm9yKGM9TWF0aC5tYXgoYS5sZW5ndGgsXG5iLmxlbmd0aCk7Yy0tOylkW2NdPXkoYVtjXSxiW2NdKTtlbHNlIGQ9eShhLGIpO3JldHVybiBkfXZhciBkPXRoaXMsZT1kLmNoYXJ0LGY9ZC5vcHRpb25zLGc9Zi5kYXRhTGFiZWxzLGg9ZC5wb2ludHMscCxuPWQuaGFzUmVuZGVyZWR8fDAsaz1jLmFuaW1PYmplY3QoZi5hbmltYXRpb24pLmR1cmF0aW9uLHI9TWF0aC5taW4oaywyMDApLHE9IWUucmVuZGVyZXIuZm9yRXhwb3J0JiZ2KGcuZGVmZXIsMDxyKSxBPWUucmVuZGVyZXI7Zz1hKGEoZS5vcHRpb25zLnBsb3RPcHRpb25zJiZlLm9wdGlvbnMucGxvdE9wdGlvbnMuc2VyaWVzJiZlLm9wdGlvbnMucGxvdE9wdGlvbnMuc2VyaWVzLmRhdGFMYWJlbHMsZS5vcHRpb25zLnBsb3RPcHRpb25zJiZlLm9wdGlvbnMucGxvdE9wdGlvbnNbZC50eXBlXSYmZS5vcHRpb25zLnBsb3RPcHRpb25zW2QudHlwZV0uZGF0YUxhYmVscyksZyk7Yy5maXJlRXZlbnQodGhpcyxcImRyYXdEYXRhTGFiZWxzXCIpO2lmKEIoZyl8fGcuZW5hYmxlZHx8ZC5faGFzUG9pbnRMYWJlbHMpe3ZhciB3PVxuZC5wbG90R3JvdXAoXCJkYXRhTGFiZWxzR3JvdXBcIixcImRhdGEtbGFiZWxzXCIscSYmIW4/XCJoaWRkZW5cIjpcImluaGVyaXRcIixnLnpJbmRleHx8Nik7cSYmKHcuYXR0cih7b3BhY2l0eTorbn0pLG58fHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT1kLmRhdGFMYWJlbHNHcm91cDthJiYoZC52aXNpYmxlJiZ3LnNob3coITApLGFbZi5hbmltYXRpb24/XCJhbmltYXRlXCI6XCJhdHRyXCJdKHtvcGFjaXR5OjF9LHtkdXJhdGlvbjpyfSkpfSxrLXIpKTtoLmZvckVhY2goZnVuY3Rpb24oYyl7cD1DKGEoZyxjLmRsT3B0aW9uc3x8Yy5vcHRpb25zJiZjLm9wdGlvbnMuZGF0YUxhYmVscykpO3AuZm9yRWFjaChmdW5jdGlvbihhLGcpe3ZhciBrPWEuZW5hYmxlZCYmKCFjLmlzTnVsbHx8Yy5kYXRhTGFiZWxPbk51bGwpJiZiKGMsYSksaD1jLmRhdGFMYWJlbHM/Yy5kYXRhTGFiZWxzW2ddOmMuZGF0YUxhYmVsLGw9Yy5jb25uZWN0b3JzP2MuY29ubmVjdG9yc1tnXTpjLmNvbm5lY3RvcixwPXYoYS5kaXN0YW5jZSxcbmMubGFiZWxEaXN0YW5jZSksbT0haDtpZihrKXt2YXIgcj1jLmdldExhYmVsQ29uZmlnKCk7dmFyIG49dihhW2MuZm9ybWF0UHJlZml4K1wiRm9ybWF0XCJdLGEuZm9ybWF0KTtyPUcobik/SChuLHIsZS50aW1lKTooYVtjLmZvcm1hdFByZWZpeCtcIkZvcm1hdHRlclwiXXx8YS5mb3JtYXR0ZXIpLmNhbGwocixhKTtuPWEuc3R5bGU7dmFyIHU9YS5yb3RhdGlvbjtlLnN0eWxlZE1vZGV8fChuLmNvbG9yPXYoYS5jb2xvcixuLmNvbG9yLGQuY29sb3IsXCIjMDAwMDAwXCIpLFwiY29udHJhc3RcIj09PW4uY29sb3ImJihjLmNvbnRyYXN0Q29sb3I9QS5nZXRDb250cmFzdChjLmNvbG9yfHxkLmNvbG9yKSxuLmNvbG9yPSFHKHApJiZhLmluc2lkZXx8MD5wfHxmLnN0YWNraW5nP2MuY29udHJhc3RDb2xvcjpcIiMwMDAwMDBcIiksZi5jdXJzb3ImJihuLmN1cnNvcj1mLmN1cnNvcikpO3ZhciBxPXtyOmEuYm9yZGVyUmFkaXVzfHwwLHJvdGF0aW9uOnUscGFkZGluZzphLnBhZGRpbmcsekluZGV4OjF9O2Uuc3R5bGVkTW9kZXx8XG4ocS5maWxsPWEuYmFja2dyb3VuZENvbG9yLHEuc3Ryb2tlPWEuYm9yZGVyQ29sb3IscVtcInN0cm9rZS13aWR0aFwiXT1hLmJvcmRlcldpZHRoKTt0KHEsZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1hJiZkZWxldGUgcVtiXX0pfSFofHxrJiZHKHIpP2smJkcocikmJihoP3EudGV4dD1yOihjLmRhdGFMYWJlbHM9Yy5kYXRhTGFiZWxzfHxbXSxoPWMuZGF0YUxhYmVsc1tnXT11P0EudGV4dChyLDAsLTk5OTkpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1kYXRhLWxhYmVsXCIpOkEubGFiZWwociwwLC05OTk5LGEuc2hhcGUsbnVsbCxudWxsLGEudXNlSFRNTCxudWxsLFwiZGF0YS1sYWJlbFwiKSxnfHwoYy5kYXRhTGFiZWw9aCksaC5hZGRDbGFzcyhcIiBoaWdoY2hhcnRzLWRhdGEtbGFiZWwtY29sb3ItXCIrYy5jb2xvckluZGV4K1wiIFwiKyhhLmNsYXNzTmFtZXx8XCJcIikrKGEudXNlSFRNTD9cIiBoaWdoY2hhcnRzLXRyYWNrZXJcIjpcIlwiKSkpLGgub3B0aW9ucz1hLGguYXR0cihxKSxlLnN0eWxlZE1vZGV8fGguY3NzKG4pLnNoYWRvdyhhLnNoYWRvdyksXG5oLmFkZGVkfHxoLmFkZCh3KSxhLnRleHRQYXRoJiYhYS51c2VIVE1MJiZoLnNldFRleHRQYXRoKGMuZ2V0RGF0YUxhYmVsUGF0aCYmYy5nZXREYXRhTGFiZWxQYXRoKGgpfHxjLmdyYXBoaWMsYS50ZXh0UGF0aCksZC5hbGlnbkRhdGFMYWJlbChjLGgsYSxudWxsLG0pKTooYy5kYXRhTGFiZWw9Yy5kYXRhTGFiZWwmJmMuZGF0YUxhYmVsLmRlc3Ryb3koKSxjLmRhdGFMYWJlbHMmJigxPT09Yy5kYXRhTGFiZWxzLmxlbmd0aD9kZWxldGUgYy5kYXRhTGFiZWxzOmRlbGV0ZSBjLmRhdGFMYWJlbHNbZ10pLGd8fGRlbGV0ZSBjLmRhdGFMYWJlbCxsJiYoYy5jb25uZWN0b3I9Yy5jb25uZWN0b3IuZGVzdHJveSgpLGMuY29ubmVjdG9ycyYmKDE9PT1jLmNvbm5lY3RvcnMubGVuZ3RoP2RlbGV0ZSBjLmNvbm5lY3RvcnM6ZGVsZXRlIGMuY29ubmVjdG9yc1tnXSkpKX0pfSl9Yy5maXJlRXZlbnQodGhpcyxcImFmdGVyRHJhd0RhdGFMYWJlbHNcIil9O24ucHJvdG90eXBlLmFsaWduRGF0YUxhYmVsPVxuZnVuY3Rpb24oYixhLGQsYyxmKXt2YXIgZT10aGlzLmNoYXJ0LGc9dGhpcy5pc0NhcnRlc2lhbiYmZS5pbnZlcnRlZCxoPXYoYi5kbEJveCYmYi5kbEJveC5jZW50ZXJYLGIucGxvdFgsLTk5OTkpLGw9dihiLnBsb3RZLC05OTk5KSxrPWEuZ2V0QkJveCgpLG49ZC5yb3RhdGlvbixxPWQuYWxpZ24sQT10aGlzLnZpc2libGUmJihiLnNlcmllcy5mb3JjZURMfHxlLmlzSW5zaWRlUGxvdChoLE1hdGgucm91bmQobCksZyl8fGMmJmUuaXNJbnNpZGVQbG90KGgsZz9jLngrMTpjLnkrYy5oZWlnaHQtMSxnKSksdz1cImp1c3RpZnlcIj09PXYoZC5vdmVyZmxvdyxcImp1c3RpZnlcIik7aWYoQSl7dmFyIG09ZS5yZW5kZXJlci5mb250TWV0cmljcyhlLnN0eWxlZE1vZGU/dm9pZCAwOmQuc3R5bGUuZm9udFNpemUsYSkuYjtjPXooe3g6Zz90aGlzLnlBeGlzLmxlbi1sOmgseTpNYXRoLnJvdW5kKGc/dGhpcy54QXhpcy5sZW4taDpsKSx3aWR0aDowLGhlaWdodDowfSxjKTt6KGQse3dpZHRoOmsud2lkdGgsXG5oZWlnaHQ6ay5oZWlnaHR9KTtuPyh3PSExLGg9ZS5yZW5kZXJlci5yb3RDb3JyKG0sbiksaD17eDpjLngrZC54K2Mud2lkdGgvMitoLngseTpjLnkrZC55K3t0b3A6MCxtaWRkbGU6LjUsYm90dG9tOjF9W2QudmVydGljYWxBbGlnbl0qYy5oZWlnaHR9LGFbZj9cImF0dHJcIjpcImFuaW1hdGVcIl0oaCkuYXR0cih7YWxpZ246cX0pLGw9KG4rNzIwKSUzNjAsbD0xODA8bCYmMzYwPmwsXCJsZWZ0XCI9PT1xP2gueS09bD9rLmhlaWdodDowOlwiY2VudGVyXCI9PT1xPyhoLngtPWsud2lkdGgvMixoLnktPWsuaGVpZ2h0LzIpOlwicmlnaHRcIj09PXEmJihoLngtPWsud2lkdGgsaC55LT1sPzA6ay5oZWlnaHQpLGEucGxhY2VkPSEwLGEuYWxpZ25BdHRyPWgpOihhLmFsaWduKGQsbnVsbCxjKSxoPWEuYWxpZ25BdHRyKTt3JiYwPD1jLmhlaWdodD90aGlzLmp1c3RpZnlEYXRhTGFiZWwoYSxkLGgsayxjLGYpOnYoZC5jcm9wLCEwKSYmKEE9ZS5pc0luc2lkZVBsb3QoaC54LGgueSkmJmUuaXNJbnNpZGVQbG90KGgueCtcbmsud2lkdGgsaC55K2suaGVpZ2h0KSk7aWYoZC5zaGFwZSYmIW4pYVtmP1wiYXR0clwiOlwiYW5pbWF0ZVwiXSh7YW5jaG9yWDpnP2UucGxvdFdpZHRoLWIucGxvdFk6Yi5wbG90WCxhbmNob3JZOmc/ZS5wbG90SGVpZ2h0LWIucGxvdFg6Yi5wbG90WX0pfUF8fChhLmhpZGUoITApLGEucGxhY2VkPSExKX07bi5wcm90b3R5cGUuanVzdGlmeURhdGFMYWJlbD1mdW5jdGlvbihiLGEsZCxjLGYsZyl7dmFyIGU9dGhpcy5jaGFydCxoPWEuYWxpZ24sbD1hLnZlcnRpY2FsQWxpZ24saz1iLmJveD8wOmIucGFkZGluZ3x8MDt2YXIgbj1kLngraztpZigwPm4pe1wicmlnaHRcIj09PWg/KGEuYWxpZ249XCJsZWZ0XCIsYS5pbnNpZGU9ITApOmEueD0tbjt2YXIgcT0hMH1uPWQueCtjLndpZHRoLWs7bj5lLnBsb3RXaWR0aCYmKFwibGVmdFwiPT09aD8oYS5hbGlnbj1cInJpZ2h0XCIsYS5pbnNpZGU9ITApOmEueD1lLnBsb3RXaWR0aC1uLHE9ITApO249ZC55K2s7MD5uJiYoXCJib3R0b21cIj09PWw/KGEudmVydGljYWxBbGlnbj1cblwidG9wXCIsYS5pbnNpZGU9ITApOmEueT0tbixxPSEwKTtuPWQueStjLmhlaWdodC1rO24+ZS5wbG90SGVpZ2h0JiYoXCJ0b3BcIj09PWw/KGEudmVydGljYWxBbGlnbj1cImJvdHRvbVwiLGEuaW5zaWRlPSEwKTphLnk9ZS5wbG90SGVpZ2h0LW4scT0hMCk7cSYmKGIucGxhY2VkPSFnLGIuYWxpZ24oYSxudWxsLGYpKTtyZXR1cm4gcX07cS5waWUmJihxLnBpZS5wcm90b3R5cGUuZGF0YUxhYmVsUG9zaXRpb25lcnM9e3JhZGlhbERpc3RyaWJ1dGlvblk6ZnVuY3Rpb24oYil7cmV0dXJuIGIudG9wK2IuZGlzdHJpYnV0ZUJveC5wb3N9LHJhZGlhbERpc3RyaWJ1dGlvblg6ZnVuY3Rpb24oYixhLGQsYyl7cmV0dXJuIGIuZ2V0WChkPGEudG9wKzJ8fGQ+YS5ib3R0b20tMj9jOmQsYS5oYWxmLGEpfSxqdXN0aWZ5OmZ1bmN0aW9uKGIsYSxkKXtyZXR1cm4gZFswXSsoYi5oYWxmPy0xOjEpKihhK2IubGFiZWxEaXN0YW5jZSl9LGFsaWduVG9QbG90RWRnZXM6ZnVuY3Rpb24oYixhLGQsYyl7Yj1iLmdldEJCb3goKS53aWR0aDtcbnJldHVybiBhP2IrYzpkLWItY30sYWxpZ25Ub0Nvbm5lY3RvcnM6ZnVuY3Rpb24oYixhLGQsYyl7dmFyIGU9MCxmO2IuZm9yRWFjaChmdW5jdGlvbihhKXtmPWEuZGF0YUxhYmVsLmdldEJCb3goKS53aWR0aDtmPmUmJihlPWYpfSk7cmV0dXJuIGE/ZStjOmQtZS1jfX0scS5waWUucHJvdG90eXBlLmRyYXdEYXRhTGFiZWxzPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxhPWIuZGF0YSxkLGU9Yi5jaGFydCxmPWIub3B0aW9ucy5kYXRhTGFiZWxzLGc9Zi5jb25uZWN0b3JQYWRkaW5nLGgscD1lLnBsb3RXaWR0aCx1PWUucGxvdEhlaWdodCxrPWUucGxvdExlZnQscj1NYXRoLnJvdW5kKGUuY2hhcnRXaWR0aC8zKSxxLEE9Yi5jZW50ZXIsdz1BWzJdLzIsbT1BWzFdLHQseixDLEIsSD1bW10sW11dLEksRCxOLE0sUj1bMCwwLDAsMF0sUD1iLmRhdGFMYWJlbFBvc2l0aW9uZXJzLFc7Yi52aXNpYmxlJiYoZi5lbmFibGVkfHxiLl9oYXNQb2ludExhYmVscykmJihhLmZvckVhY2goZnVuY3Rpb24oYSl7YS5kYXRhTGFiZWwmJlxuYS52aXNpYmxlJiZhLmRhdGFMYWJlbC5zaG9ydGVuZWQmJihhLmRhdGFMYWJlbC5hdHRyKHt3aWR0aDpcImF1dG9cIn0pLmNzcyh7d2lkdGg6XCJhdXRvXCIsdGV4dE92ZXJmbG93OlwiY2xpcFwifSksYS5kYXRhTGFiZWwuc2hvcnRlbmVkPSExKX0pLG4ucHJvdG90eXBlLmRyYXdEYXRhTGFiZWxzLmFwcGx5KGIpLGEuZm9yRWFjaChmdW5jdGlvbihhKXthLmRhdGFMYWJlbCYmKGEudmlzaWJsZT8oSFthLmhhbGZdLnB1c2goYSksYS5kYXRhTGFiZWwuX3Bvcz1udWxsLCFHKGYuc3R5bGUud2lkdGgpJiYhRyhhLm9wdGlvbnMuZGF0YUxhYmVscyYmYS5vcHRpb25zLmRhdGFMYWJlbHMuc3R5bGUmJmEub3B0aW9ucy5kYXRhTGFiZWxzLnN0eWxlLndpZHRoKSYmYS5kYXRhTGFiZWwuZ2V0QkJveCgpLndpZHRoPnImJihhLmRhdGFMYWJlbC5jc3Moe3dpZHRoOi43KnJ9KSxhLmRhdGFMYWJlbC5zaG9ydGVuZWQ9ITApKTooYS5kYXRhTGFiZWw9YS5kYXRhTGFiZWwuZGVzdHJveSgpLGEuZGF0YUxhYmVscyYmXG4xPT09YS5kYXRhTGFiZWxzLmxlbmd0aCYmZGVsZXRlIGEuZGF0YUxhYmVscykpfSksSC5mb3JFYWNoKGZ1bmN0aW9uKGEsaCl7dmFyIGw9YS5sZW5ndGgsbj1bXSxyO2lmKGwpe2Iuc29ydEJ5QW5nbGUoYSxoLS41KTtpZigwPGIubWF4TGFiZWxEaXN0YW5jZSl7dmFyIHE9TWF0aC5tYXgoMCxtLXctYi5tYXhMYWJlbERpc3RhbmNlKTt2YXIgeD1NYXRoLm1pbihtK3crYi5tYXhMYWJlbERpc3RhbmNlLGUucGxvdEhlaWdodCk7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpezA8YS5sYWJlbERpc3RhbmNlJiZhLmRhdGFMYWJlbCYmKGEudG9wPU1hdGgubWF4KDAsbS13LWEubGFiZWxEaXN0YW5jZSksYS5ib3R0b209TWF0aC5taW4obSt3K2EubGFiZWxEaXN0YW5jZSxlLnBsb3RIZWlnaHQpLHI9YS5kYXRhTGFiZWwuZ2V0QkJveCgpLmhlaWdodHx8MjEsYS5kaXN0cmlidXRlQm94PXt0YXJnZXQ6YS5sYWJlbFBvc2l0aW9uLm5hdHVyYWwueS1hLnRvcCtyLzIsc2l6ZTpyLHJhbms6YS55fSxuLnB1c2goYS5kaXN0cmlidXRlQm94KSl9KTtcbnE9eCtyLXE7Yy5kaXN0cmlidXRlKG4scSxxLzUpfWZvcihNPTA7TTxsO00rKyl7ZD1hW01dO0M9ZC5sYWJlbFBvc2l0aW9uO3Q9ZC5kYXRhTGFiZWw7Tj0hMT09PWQudmlzaWJsZT9cImhpZGRlblwiOlwiaW5oZXJpdFwiO0Q9cT1DLm5hdHVyYWwueTtuJiZHKGQuZGlzdHJpYnV0ZUJveCkmJih2b2lkIDA9PT1kLmRpc3RyaWJ1dGVCb3gucG9zP049XCJoaWRkZW5cIjooQj1kLmRpc3RyaWJ1dGVCb3guc2l6ZSxEPVAucmFkaWFsRGlzdHJpYnV0aW9uWShkKSkpO2RlbGV0ZSBkLnBvc2l0aW9uSW5kZXg7aWYoZi5qdXN0aWZ5KUk9UC5qdXN0aWZ5KGQsdyxBKTtlbHNlIHN3aXRjaChmLmFsaWduVG8pe2Nhc2UgXCJjb25uZWN0b3JzXCI6ST1QLmFsaWduVG9Db25uZWN0b3JzKGEsaCxwLGspO2JyZWFrO2Nhc2UgXCJwbG90RWRnZXNcIjpJPVAuYWxpZ25Ub1Bsb3RFZGdlcyh0LGgscCxrKTticmVhaztkZWZhdWx0Okk9UC5yYWRpYWxEaXN0cmlidXRpb25YKGIsZCxELHEpfXQuX2F0dHI9e3Zpc2liaWxpdHk6TixcbmFsaWduOkMuYWxpZ25tZW50fTt0Ll9wb3M9e3g6SStmLngrKHtsZWZ0OmcscmlnaHQ6LWd9W0MuYWxpZ25tZW50XXx8MCkseTpEK2YueS0xMH07Qy5maW5hbC54PUk7Qy5maW5hbC55PUQ7dihmLmNyb3AsITApJiYoej10LmdldEJCb3goKS53aWR0aCxxPW51bGwsSS16PGcmJjE9PT1oPyhxPU1hdGgucm91bmQoei1JK2cpLFJbM109TWF0aC5tYXgocSxSWzNdKSk6SSt6PnAtZyYmMD09PWgmJihxPU1hdGgucm91bmQoSSt6LXArZyksUlsxXT1NYXRoLm1heChxLFJbMV0pKSwwPkQtQi8yP1JbMF09TWF0aC5tYXgoTWF0aC5yb3VuZCgtRCtCLzIpLFJbMF0pOkQrQi8yPnUmJihSWzJdPU1hdGgubWF4KE1hdGgucm91bmQoRCtCLzItdSksUlsyXSkpLHQuc2lkZU92ZXJmbG93PXEpfX19KSwwPT09RihSKXx8dGhpcy52ZXJpZnlEYXRhTGFiZWxPdmVyZmxvdyhSKSkmJih0aGlzLnBsYWNlRGF0YUxhYmVscygpLHRoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oYSl7Vz15KGYsYS5vcHRpb25zLmRhdGFMYWJlbHMpO1xuaWYoaD12KFcuY29ubmVjdG9yV2lkdGgsMSkpe3ZhciBkO3E9YS5jb25uZWN0b3I7aWYoKHQ9YS5kYXRhTGFiZWwpJiZ0Ll9wb3MmJmEudmlzaWJsZSYmMDxhLmxhYmVsRGlzdGFuY2Upe049dC5fYXR0ci52aXNpYmlsaXR5O2lmKGQ9IXEpYS5jb25uZWN0b3I9cT1lLnJlbmRlcmVyLnBhdGgoKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtZGF0YS1sYWJlbC1jb25uZWN0b3IgIGhpZ2hjaGFydHMtY29sb3ItXCIrYS5jb2xvckluZGV4KyhhLmNsYXNzTmFtZT9cIiBcIithLmNsYXNzTmFtZTpcIlwiKSkuYWRkKGIuZGF0YUxhYmVsc0dyb3VwKSxlLnN0eWxlZE1vZGV8fHEuYXR0cih7XCJzdHJva2Utd2lkdGhcIjpoLHN0cm9rZTpXLmNvbm5lY3RvckNvbG9yfHxhLmNvbG9yfHxcIiM2NjY2NjZcIn0pO3FbZD9cImF0dHJcIjpcImFuaW1hdGVcIl0oe2Q6YS5nZXRDb25uZWN0b3JQYXRoKCl9KTtxLmF0dHIoXCJ2aXNpYmlsaXR5XCIsTil9ZWxzZSBxJiYoYS5jb25uZWN0b3I9cS5kZXN0cm95KCkpfX0pKX0scS5waWUucHJvdG90eXBlLnBsYWNlRGF0YUxhYmVscz1cbmZ1bmN0aW9uKCl7dGhpcy5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgYT1iLmRhdGFMYWJlbCxkO2EmJmIudmlzaWJsZSYmKChkPWEuX3Bvcyk/KGEuc2lkZU92ZXJmbG93JiYoYS5fYXR0ci53aWR0aD1NYXRoLm1heChhLmdldEJCb3goKS53aWR0aC1hLnNpZGVPdmVyZmxvdywwKSxhLmNzcyh7d2lkdGg6YS5fYXR0ci53aWR0aCtcInB4XCIsdGV4dE92ZXJmbG93Oih0aGlzLm9wdGlvbnMuZGF0YUxhYmVscy5zdHlsZXx8e30pLnRleHRPdmVyZmxvd3x8XCJlbGxpcHNpc1wifSksYS5zaG9ydGVuZWQ9ITApLGEuYXR0cihhLl9hdHRyKSxhW2EubW92ZWQ/XCJhbmltYXRlXCI6XCJhdHRyXCJdKGQpLGEubW92ZWQ9ITApOmEmJmEuYXR0cih7eTotOTk5OX0pKTtkZWxldGUgYi5kaXN0cmlidXRlQm94fSx0aGlzKX0scS5waWUucHJvdG90eXBlLmFsaWduRGF0YUxhYmVsPWYscS5waWUucHJvdG90eXBlLnZlcmlmeURhdGFMYWJlbE92ZXJmbG93PWZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMuY2VudGVyLFxuZD10aGlzLm9wdGlvbnMsYz1kLmNlbnRlcixmPWQubWluU2l6ZXx8ODAsZz1udWxsIT09ZC5zaXplO2lmKCFnKXtpZihudWxsIT09Y1swXSl2YXIgbj1NYXRoLm1heChhWzJdLU1hdGgubWF4KGJbMV0sYlszXSksZik7ZWxzZSBuPU1hdGgubWF4KGFbMl0tYlsxXS1iWzNdLGYpLGFbMF0rPShiWzNdLWJbMV0pLzI7bnVsbCE9PWNbMV0/bj1NYXRoLm1heChNYXRoLm1pbihuLGFbMl0tTWF0aC5tYXgoYlswXSxiWzJdKSksZik6KG49TWF0aC5tYXgoTWF0aC5taW4obixhWzJdLWJbMF0tYlsyXSksZiksYVsxXSs9KGJbMF0tYlsyXSkvMik7bjxhWzJdPyhhWzJdPW4sYVszXT1NYXRoLm1pbihoKGQuaW5uZXJTaXplfHwwLG4pLG4pLHRoaXMudHJhbnNsYXRlKGEpLHRoaXMuZHJhd0RhdGFMYWJlbHMmJnRoaXMuZHJhd0RhdGFMYWJlbHMoKSk6Zz0hMH1yZXR1cm4gZ30pO3EuY29sdW1uJiYocS5jb2x1bW4ucHJvdG90eXBlLmFsaWduRGF0YUxhYmVsPWZ1bmN0aW9uKGIsYSxkLGMsZil7dmFyIGU9XG50aGlzLmNoYXJ0LmludmVydGVkLGc9Yi5zZXJpZXMsaD1iLmRsQm94fHxiLnNoYXBlQXJncyxsPXYoYi5iZWxvdyxiLnBsb3RZPnYodGhpcy50cmFuc2xhdGVkVGhyZXNob2xkLGcueUF4aXMubGVuKSksaz12KGQuaW5zaWRlLCEhdGhpcy5vcHRpb25zLnN0YWNraW5nKTtoJiYoYz15KGgpLDA+Yy55JiYoYy5oZWlnaHQrPWMueSxjLnk9MCksaD1jLnkrYy5oZWlnaHQtZy55QXhpcy5sZW4sMDxoJiYoYy5oZWlnaHQtPWgpLGUmJihjPXt4OmcueUF4aXMubGVuLWMueS1jLmhlaWdodCx5OmcueEF4aXMubGVuLWMueC1jLndpZHRoLHdpZHRoOmMuaGVpZ2h0LGhlaWdodDpjLndpZHRofSksa3x8KGU/KGMueCs9bD8wOmMud2lkdGgsYy53aWR0aD0wKTooYy55Kz1sP2MuaGVpZ2h0OjAsYy5oZWlnaHQ9MCkpKTtkLmFsaWduPXYoZC5hbGlnbiwhZXx8az9cImNlbnRlclwiOmw/XCJyaWdodFwiOlwibGVmdFwiKTtkLnZlcnRpY2FsQWxpZ249dihkLnZlcnRpY2FsQWxpZ24sZXx8az9cIm1pZGRsZVwiOmw/XCJ0b3BcIjpcblwiYm90dG9tXCIpO24ucHJvdG90eXBlLmFsaWduRGF0YUxhYmVsLmNhbGwodGhpcyxiLGEsZCxjLGYpO2QuaW5zaWRlJiZiLmNvbnRyYXN0Q29sb3ImJmEuY3NzKHtjb2xvcjpiLmNvbnRyYXN0Q29sb3J9KX0pfSk7TShJLFwibW9kdWxlcy9vdmVybGFwcGluZy1kYXRhbGFiZWxzLnNyYy5qc1wiLFtJW1wicGFydHMvR2xvYmFscy5qc1wiXSxJW1wicGFydHMvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihjLGYpe3ZhciBGPWYuaXNBcnJheSxHPWYub2JqZWN0RWFjaCx6PWYucGljaztmPWMuQ2hhcnQ7dmFyIEI9Yy5hZGRFdmVudCx0PWMuZmlyZUV2ZW50O0IoZixcInJlbmRlclwiLGZ1bmN0aW9uKCl7dmFyIGM9W107KHRoaXMubGFiZWxDb2xsZWN0b3JzfHxbXSkuZm9yRWFjaChmdW5jdGlvbihmKXtjPWMuY29uY2F0KGYoKSl9KTsodGhpcy55QXhpc3x8W10pLmZvckVhY2goZnVuY3Rpb24oZil7Zi5vcHRpb25zLnN0YWNrTGFiZWxzJiYhZi5vcHRpb25zLnN0YWNrTGFiZWxzLmFsbG93T3ZlcmxhcCYmXG5HKGYuc3RhY2tzLGZ1bmN0aW9uKGYpe0coZixmdW5jdGlvbihmKXtjLnB1c2goZi5sYWJlbCl9KX0pfSk7KHRoaXMuc2VyaWVzfHxbXSkuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgdj1mLm9wdGlvbnMuZGF0YUxhYmVscztmLnZpc2libGUmJighMSE9PXYuZW5hYmxlZHx8Zi5faGFzUG9pbnRMYWJlbHMpJiZmLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGYpe2YudmlzaWJsZSYmKEYoZi5kYXRhTGFiZWxzKT9mLmRhdGFMYWJlbHM6Zi5kYXRhTGFiZWw/W2YuZGF0YUxhYmVsXTpbXSkuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgbj1oLm9wdGlvbnM7aC5sYWJlbHJhbms9eihuLmxhYmVscmFuayxmLmxhYmVscmFuayxmLnNoYXBlQXJncyYmZi5zaGFwZUFyZ3MuaGVpZ2h0KTtuLmFsbG93T3ZlcmxhcHx8Yy5wdXNoKGgpfSl9KX0pO3RoaXMuaGlkZU92ZXJsYXBwaW5nTGFiZWxzKGMpfSk7Zi5wcm90b3R5cGUuaGlkZU92ZXJsYXBwaW5nTGFiZWxzPWZ1bmN0aW9uKGMpe3ZhciBmPXRoaXMsXG52PWMubGVuZ3RoLHk9Zi5yZW5kZXJlcixoLG4scTt2YXIgZz1mdW5jdGlvbihhKXt2YXIgYj1hLmJveD8wOmEucGFkZGluZ3x8MDt2YXIgZD0wO2lmKGEmJighYS5hbGlnbkF0dHJ8fGEucGxhY2VkKSl7dmFyIGM9YS5hdHRyKFwieFwiKTt2YXIgZj1hLmF0dHIoXCJ5XCIpO2M9XCJudW1iZXJcIj09PXR5cGVvZiBjJiZcIm51bWJlclwiPT09dHlwZW9mIGY/e3g6Yyx5OmZ9OmEuYWxpZ25BdHRyO2Y9YS5wYXJlbnRHcm91cDthLndpZHRofHwoZD1hLmdldEJCb3goKSxhLndpZHRoPWQud2lkdGgsYS5oZWlnaHQ9ZC5oZWlnaHQsZD15LmZvbnRNZXRyaWNzKG51bGwsYS5lbGVtZW50KS5oKTtyZXR1cm57eDpjLngrKGYudHJhbnNsYXRlWHx8MCkrYix5OmMueSsoZi50cmFuc2xhdGVZfHwwKStiLWQsd2lkdGg6YS53aWR0aC0yKmIsaGVpZ2h0OmEuaGVpZ2h0LTIqYn19fTtmb3Iobj0wO248djtuKyspaWYoaD1jW25dKWgub2xkT3BhY2l0eT1oLm9wYWNpdHksaC5uZXdPcGFjaXR5PTEsaC5hYnNvbHV0ZUJveD1cbmcoaCk7Yy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuKGIubGFiZWxyYW5rfHwwKS0oYS5sYWJlbHJhbmt8fDApfSk7Zm9yKG49MDtuPHY7bisrKXt2YXIgYj0oZz1jW25dKSYmZy5hYnNvbHV0ZUJveDtmb3IoaD1uKzE7aDx2OysraCl7dmFyIGE9KHE9Y1toXSkmJnEuYWJzb2x1dGVCb3g7IWJ8fCFhfHxnPT09cXx8MD09PWcubmV3T3BhY2l0eXx8MD09PXEubmV3T3BhY2l0eXx8YS54PmIueCtiLndpZHRofHxhLngrYS53aWR0aDxiLnh8fGEueT5iLnkrYi5oZWlnaHR8fGEueSthLmhlaWdodDxiLnl8fCgoZy5sYWJlbHJhbms8cS5sYWJlbHJhbms/ZzpxKS5uZXdPcGFjaXR5PTApfX1jLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI7aWYoYSl7dmFyIGQ9YS5uZXdPcGFjaXR5O2Eub2xkT3BhY2l0eSE9PWQmJihhLmFsaWduQXR0ciYmYS5wbGFjZWQ/KGQ/YS5zaG93KCEwKTpiPWZ1bmN0aW9uKCl7YS5oaWRlKCEwKTthLnBsYWNlZD0hMX0sYS5hbGlnbkF0dHIub3BhY2l0eT1kLGFbYS5pc09sZD9cblwiYW5pbWF0ZVwiOlwiYXR0clwiXShhLmFsaWduQXR0cixudWxsLGIpLHQoZixcImFmdGVySGlkZU92ZXJsYXBwaW5nTGFiZWxzXCIpKTphLmF0dHIoe29wYWNpdHk6ZH0pKTthLmlzT2xkPSEwfX0pfX0pO00oSSxcInBhcnRzL0ludGVyYWN0aW9uLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLElbXCJwYXJ0cy9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGMsZil7dmFyIEY9Zi5kZWZpbmVkLEc9Zi5leHRlbmQsej1mLmlzQXJyYXksQj1mLmlzT2JqZWN0LHQ9Zi5vYmplY3RFYWNoLHY9Zi5waWNrLEM9Yy5hZGRFdmVudDtmPWMuQ2hhcnQ7dmFyIEg9Yy5jcmVhdGVFbGVtZW50LHk9Yy5jc3MsaD1jLmRlZmF1bHRPcHRpb25zLG49Yy5kZWZhdWx0UGxvdE9wdGlvbnMscT1jLmZpcmVFdmVudCxnPWMuaGFzVG91Y2gsYj1jLkxlZ2VuZCxhPWMubWVyZ2UsZD1jLlBvaW50LGU9Yy5TZXJpZXMsbD1jLnNlcmllc1R5cGVzLEk9Yy5zdmc7dmFyIEU9Yy5UcmFja2VyTWl4aW49e2RyYXdUcmFja2VyUG9pbnQ6ZnVuY3Rpb24oKXt2YXIgYT1cbnRoaXMsYj1hLmNoYXJ0LGQ9Yi5wb2ludGVyLGM9ZnVuY3Rpb24oYSl7dmFyIGI9ZC5nZXRQb2ludEZyb21FdmVudChhKTt2b2lkIDAhPT1iJiYoZC5pc0RpcmVjdFRvdWNoPSEwLGIub25Nb3VzZU92ZXIoYSkpfSxlO2EucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oYSl7ZT16KGEuZGF0YUxhYmVscyk/YS5kYXRhTGFiZWxzOmEuZGF0YUxhYmVsP1thLmRhdGFMYWJlbF06W107YS5ncmFwaGljJiYoYS5ncmFwaGljLmVsZW1lbnQucG9pbnQ9YSk7ZS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuZGl2P2IuZGl2LnBvaW50PWE6Yi5lbGVtZW50LnBvaW50PWF9KX0pO2EuX2hhc1RyYWNraW5nfHwoYS50cmFja2VyR3JvdXBzLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoYVtlXSl7YVtlXS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtdHJhY2tlclwiKS5vbihcIm1vdXNlb3ZlclwiLGMpLm9uKFwibW91c2VvdXRcIixmdW5jdGlvbihhKXtkLm9uVHJhY2tlck1vdXNlT3V0KGEpfSk7aWYoZylhW2VdLm9uKFwidG91Y2hzdGFydFwiLFxuYyk7IWIuc3R5bGVkTW9kZSYmYS5vcHRpb25zLmN1cnNvciYmYVtlXS5jc3MoeSkuY3NzKHtjdXJzb3I6YS5vcHRpb25zLmN1cnNvcn0pfX0pLGEuX2hhc1RyYWNraW5nPSEwKTtxKHRoaXMsXCJhZnRlckRyYXdUcmFja2VyXCIpfSxkcmF3VHJhY2tlckdyYXBoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEub3B0aW9ucyxkPWIudHJhY2tCeUFyZWEsYz1bXS5jb25jYXQoZD9hLmFyZWFQYXRoOmEuZ3JhcGhQYXRoKSxlPWMubGVuZ3RoLGY9YS5jaGFydCxoPWYucG9pbnRlcixsPWYucmVuZGVyZXIsbj1mLm9wdGlvbnMudG9vbHRpcC5zbmFwLHY9YS50cmFja2VyLHQseT1mdW5jdGlvbigpe2lmKGYuaG92ZXJTZXJpZXMhPT1hKWEub25Nb3VzZU92ZXIoKX0sej1cInJnYmEoMTkyLDE5MiwxOTIsXCIrKEk/LjAwMDE6LjAwMikrXCIpXCI7aWYoZSYmIWQpZm9yKHQ9ZSsxO3QtLTspXCJNXCI9PT1jW3RdJiZjLnNwbGljZSh0KzEsMCxjW3QrMV0tbixjW3QrMl0sXCJMXCIpLCh0JiZcIk1cIj09PWNbdF18fHQ9PT1cbmUpJiZjLnNwbGljZSh0LDAsXCJMXCIsY1t0LTJdK24sY1t0LTFdKTt2P3YuYXR0cih7ZDpjfSk6YS5ncmFwaCYmKGEudHJhY2tlcj1sLnBhdGgoYykuYXR0cih7dmlzaWJpbGl0eTphLnZpc2libGU/XCJ2aXNpYmxlXCI6XCJoaWRkZW5cIix6SW5kZXg6Mn0pLmFkZENsYXNzKGQ/XCJoaWdoY2hhcnRzLXRyYWNrZXItYXJlYVwiOlwiaGlnaGNoYXJ0cy10cmFja2VyLWxpbmVcIikuYWRkKGEuZ3JvdXApLGYuc3R5bGVkTW9kZXx8YS50cmFja2VyLmF0dHIoe1wic3Ryb2tlLWxpbmVqb2luXCI6XCJyb3VuZFwiLHN0cm9rZTp6LGZpbGw6ZD96Olwibm9uZVwiLFwic3Ryb2tlLXdpZHRoXCI6YS5ncmFwaC5zdHJva2VXaWR0aCgpKyhkPzA6MipuKX0pLFthLnRyYWNrZXIsYS5tYXJrZXJHcm91cF0uZm9yRWFjaChmdW5jdGlvbihhKXthLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy10cmFja2VyXCIpLm9uKFwibW91c2VvdmVyXCIseSkub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKGEpe2gub25UcmFja2VyTW91c2VPdXQoYSl9KTtiLmN1cnNvciYmXG4hZi5zdHlsZWRNb2RlJiZhLmNzcyh7Y3Vyc29yOmIuY3Vyc29yfSk7aWYoZylhLm9uKFwidG91Y2hzdGFydFwiLHkpfSkpO3EodGhpcyxcImFmdGVyRHJhd1RyYWNrZXJcIil9fTtsLmNvbHVtbiYmKGwuY29sdW1uLnByb3RvdHlwZS5kcmF3VHJhY2tlcj1FLmRyYXdUcmFja2VyUG9pbnQpO2wucGllJiYobC5waWUucHJvdG90eXBlLmRyYXdUcmFja2VyPUUuZHJhd1RyYWNrZXJQb2ludCk7bC5zY2F0dGVyJiYobC5zY2F0dGVyLnByb3RvdHlwZS5kcmF3VHJhY2tlcj1FLmRyYXdUcmFja2VyUG9pbnQpO0coYi5wcm90b3R5cGUse3NldEl0ZW1FdmVudHM6ZnVuY3Rpb24oYixjLGUpe3ZhciBmPXRoaXMsZz1mLmNoYXJ0LnJlbmRlcmVyLmJveFdyYXBwZXIsaz1iIGluc3RhbmNlb2YgZCxoPVwiaGlnaGNoYXJ0cy1sZWdlbmQtXCIrKGs/XCJwb2ludFwiOlwic2VyaWVzXCIpK1wiLWFjdGl2ZVwiLGw9Zi5jaGFydC5zdHlsZWRNb2RlOyhlP2M6Yi5sZWdlbmRHcm91cCkub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbigpe2IudmlzaWJsZSYmXG5mLmFsbEl0ZW1zLmZvckVhY2goZnVuY3Rpb24oYSl7YiE9PWEmJmEuc2V0U3RhdGUoXCJpbmFjdGl2ZVwiLCFrKX0pO2Iuc2V0U3RhdGUoXCJob3ZlclwiKTtiLnZpc2libGUmJmcuYWRkQ2xhc3MoaCk7bHx8Yy5jc3MoZi5vcHRpb25zLml0ZW1Ib3ZlclN0eWxlKX0pLm9uKFwibW91c2VvdXRcIixmdW5jdGlvbigpe2YuY2hhcnQuc3R5bGVkTW9kZXx8Yy5jc3MoYShiLnZpc2libGU/Zi5pdGVtU3R5bGU6Zi5pdGVtSGlkZGVuU3R5bGUpKTtmLmFsbEl0ZW1zLmZvckVhY2goZnVuY3Rpb24oYSl7YiE9PWEmJmEuc2V0U3RhdGUoXCJcIiwhayl9KTtnLnJlbW92ZUNsYXNzKGgpO2Iuc2V0U3RhdGUoKX0pLm9uKFwiY2xpY2tcIixmdW5jdGlvbihhKXt2YXIgYz1mdW5jdGlvbigpe2Iuc2V0VmlzaWJsZSYmYi5zZXRWaXNpYmxlKCk7Zi5hbGxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IhPT1hJiZhLnNldFN0YXRlKGIudmlzaWJsZT9cImluYWN0aXZlXCI6XCJcIiwhayl9KX07Zy5yZW1vdmVDbGFzcyhoKTthPVxue2Jyb3dzZXJFdmVudDphfTtiLmZpcmVQb2ludEV2ZW50P2IuZmlyZVBvaW50RXZlbnQoXCJsZWdlbmRJdGVtQ2xpY2tcIixhLGMpOnEoYixcImxlZ2VuZEl0ZW1DbGlja1wiLGEsYyl9KX0sY3JlYXRlQ2hlY2tib3hGb3JJdGVtOmZ1bmN0aW9uKGEpe2EuY2hlY2tib3g9SChcImlucHV0XCIse3R5cGU6XCJjaGVja2JveFwiLGNsYXNzTmFtZTpcImhpZ2hjaGFydHMtbGVnZW5kLWNoZWNrYm94XCIsY2hlY2tlZDphLnNlbGVjdGVkLGRlZmF1bHRDaGVja2VkOmEuc2VsZWN0ZWR9LHRoaXMub3B0aW9ucy5pdGVtQ2hlY2tib3hTdHlsZSx0aGlzLmNoYXJ0LmNvbnRhaW5lcik7QyhhLmNoZWNrYm94LFwiY2xpY2tcIixmdW5jdGlvbihiKXtxKGEuc2VyaWVzfHxhLFwiY2hlY2tib3hDbGlja1wiLHtjaGVja2VkOmIudGFyZ2V0LmNoZWNrZWQsaXRlbTphfSxmdW5jdGlvbigpe2Euc2VsZWN0KCl9KX0pfX0pO0coZi5wcm90b3R5cGUse3Nob3dSZXNldFpvb206ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7Yi56b29tT3V0KCl9XG52YXIgYj10aGlzLGM9aC5sYW5nLGQ9Yi5vcHRpb25zLmNoYXJ0LnJlc2V0Wm9vbUJ1dHRvbixlPWQudGhlbWUsZj1lLnN0YXRlcyxnPVwiY2hhcnRcIj09PWQucmVsYXRpdmVUb3x8XCJzcGFjZUJveFwiPT09ZC5yZWxhdGl2ZVRvP251bGw6XCJwbG90Qm94XCI7cSh0aGlzLFwiYmVmb3JlU2hvd1Jlc2V0Wm9vbVwiLG51bGwsZnVuY3Rpb24oKXtiLnJlc2V0Wm9vbUJ1dHRvbj1iLnJlbmRlcmVyLmJ1dHRvbihjLnJlc2V0Wm9vbSxudWxsLG51bGwsYSxlLGYmJmYuaG92ZXIpLmF0dHIoe2FsaWduOmQucG9zaXRpb24uYWxpZ24sdGl0bGU6Yy5yZXNldFpvb21UaXRsZX0pLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1yZXNldC16b29tXCIpLmFkZCgpLmFsaWduKGQucG9zaXRpb24sITEsZyl9KTtxKHRoaXMsXCJhZnRlclNob3dSZXNldFpvb21cIil9LHpvb21PdXQ6ZnVuY3Rpb24oKXtxKHRoaXMsXCJzZWxlY3Rpb25cIix7cmVzZXRTZWxlY3Rpb246ITB9LHRoaXMuem9vbSl9LHpvb206ZnVuY3Rpb24oYSl7dmFyIGI9XG50aGlzLGMsZD1iLnBvaW50ZXIsZT0hMSxmPWIuaW52ZXJ0ZWQ/ZC5tb3VzZURvd25YOmQubW91c2VEb3duWTshYXx8YS5yZXNldFNlbGVjdGlvbj8oYi5heGVzLmZvckVhY2goZnVuY3Rpb24oYSl7Yz1hLnpvb20oKX0pLGQuaW5pdGlhdGVkPSExKTphLnhBeGlzLmNvbmNhdChhLnlBeGlzKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBnPWEuYXhpcyxrPWIuaW52ZXJ0ZWQ/Zy5sZWZ0OmcudG9wLGg9Yi5pbnZlcnRlZD9rK2cud2lkdGg6aytnLmhlaWdodCxsPWcuaXNYQXhpcyxtPSExO2lmKCFsJiZmPj1rJiZmPD1ofHxsfHwhRihmKSltPSEwO2RbbD9cInpvb21YXCI6XCJ6b29tWVwiXSYmbSYmKGM9Zy56b29tKGEubWluLGEubWF4KSxnLmRpc3BsYXlCdG4mJihlPSEwKSl9KTt2YXIgZz1iLnJlc2V0Wm9vbUJ1dHRvbjtlJiYhZz9iLnNob3dSZXNldFpvb20oKTohZSYmQihnKSYmKGIucmVzZXRab29tQnV0dG9uPWcuZGVzdHJveSgpKTtjJiZiLnJlZHJhdyh2KGIub3B0aW9ucy5jaGFydC5hbmltYXRpb24sXG5hJiZhLmFuaW1hdGlvbiwxMDA+Yi5wb2ludENvdW50KSl9LHBhbjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMsZD1jLmhvdmVyUG9pbnRzLGU7cSh0aGlzLFwicGFuXCIse29yaWdpbmFsRXZlbnQ6YX0sZnVuY3Rpb24oKXtkJiZkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zZXRTdGF0ZSgpfSk7KFwieHlcIj09PWI/WzEsMF06WzFdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2I9Y1tiP1wieEF4aXNcIjpcInlBeGlzXCJdWzBdO3ZhciBkPWIuaG9yaXosZj1hW2Q/XCJjaGFydFhcIjpcImNoYXJ0WVwiXTtkPWQ/XCJtb3VzZURvd25YXCI6XCJtb3VzZURvd25ZXCI7dmFyIGc9Y1tkXSxrPShiLnBvaW50UmFuZ2V8fDApLzIsaD1iLnJldmVyc2VkJiYhYy5pbnZlcnRlZHx8IWIucmV2ZXJzZWQmJmMuaW52ZXJ0ZWQ/LTE6MSxsPWIuZ2V0RXh0cmVtZXMoKSxwPWIudG9WYWx1ZShnLWYsITApK2sqaDtoPWIudG9WYWx1ZShnK2IubGVuLWYsITApLWsqaDt2YXIgbj1oPHA7Zz1uP2g6cDtwPW4/cDpoO2g9TWF0aC5taW4obC5kYXRhTWluLFxuaz9sLm1pbjpiLnRvVmFsdWUoYi50b1BpeGVscyhsLm1pbiktYi5taW5QaXhlbFBhZGRpbmcpKTtrPU1hdGgubWF4KGwuZGF0YU1heCxrP2wubWF4OmIudG9WYWx1ZShiLnRvUGl4ZWxzKGwubWF4KStiLm1pblBpeGVsUGFkZGluZykpO249aC1nOzA8biYmKHArPW4sZz1oKTtuPXAtazswPG4mJihwPWssZy09bik7Yi5zZXJpZXMubGVuZ3RoJiZnIT09bC5taW4mJnAhPT1sLm1heCYmKGIuc2V0RXh0cmVtZXMoZyxwLCExLCExLHt0cmlnZ2VyOlwicGFuXCJ9KSxlPSEwKTtjW2RdPWZ9KTtlJiZjLnJlZHJhdyghMSk7eShjLmNvbnRhaW5lcix7Y3Vyc29yOlwibW92ZVwifSl9KX19KTtHKGQucHJvdG90eXBlLHtzZWxlY3Q6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9Yy5zZXJpZXMsZT1kLmNoYXJ0O3RoaXMuc2VsZWN0ZWRTdGFnaW5nPWE9dihhLCFjLnNlbGVjdGVkKTtjLmZpcmVQb2ludEV2ZW50KGE/XCJzZWxlY3RcIjpcInVuc2VsZWN0XCIse2FjY3VtdWxhdGU6Yn0sZnVuY3Rpb24oKXtjLnNlbGVjdGVkPVxuYy5vcHRpb25zLnNlbGVjdGVkPWE7ZC5vcHRpb25zLmRhdGFbZC5kYXRhLmluZGV4T2YoYyldPWMub3B0aW9ucztjLnNldFN0YXRlKGEmJlwic2VsZWN0XCIpO2J8fGUuZ2V0U2VsZWN0ZWRQb2ludHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEuc2VyaWVzO2Euc2VsZWN0ZWQmJmEhPT1jJiYoYS5zZWxlY3RlZD1hLm9wdGlvbnMuc2VsZWN0ZWQ9ITEsYi5vcHRpb25zLmRhdGFbYi5kYXRhLmluZGV4T2YoYSldPWEub3B0aW9ucyxhLnNldFN0YXRlKGUuaG92ZXJQb2ludHMmJmIub3B0aW9ucy5pbmFjdGl2ZU90aGVyUG9pbnRzP1wiaW5hY3RpdmVcIjpcIlwiKSxhLmZpcmVQb2ludEV2ZW50KFwidW5zZWxlY3RcIikpfSl9KTtkZWxldGUgdGhpcy5zZWxlY3RlZFN0YWdpbmd9LG9uTW91c2VPdmVyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc2VyaWVzLmNoYXJ0LGM9Yi5wb2ludGVyO2E9YT9jLm5vcm1hbGl6ZShhKTpjLmdldENoYXJ0Q29vcmRpbmF0ZXNGcm9tUG9pbnQodGhpcyxiLmludmVydGVkKTtcbmMucnVuUG9pbnRBY3Rpb25zKGEsdGhpcyl9LG9uTW91c2VPdXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlcmllcy5jaGFydDt0aGlzLmZpcmVQb2ludEV2ZW50KFwibW91c2VPdXRcIik7dGhpcy5zZXJpZXMub3B0aW9ucy5pbmFjdGl2ZU90aGVyUG9pbnRzfHwoYS5ob3ZlclBvaW50c3x8W10pLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zZXRTdGF0ZSgpfSk7YS5ob3ZlclBvaW50cz1hLmhvdmVyUG9pbnQ9bnVsbH0saW1wb3J0RXZlbnRzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaGFzSW1wb3J0ZWRFdmVudHMpe3ZhciBiPXRoaXMsZD1hKGIuc2VyaWVzLm9wdGlvbnMucG9pbnQsYi5vcHRpb25zKS5ldmVudHM7Yi5ldmVudHM9ZDt0KGQsZnVuY3Rpb24oYSxkKXtjLmlzRnVuY3Rpb24oYSkmJkMoYixkLGEpfSk7dGhpcy5oYXNJbXBvcnRlZEV2ZW50cz0hMH19LHNldFN0YXRlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5zZXJpZXMsZD10aGlzLnN0YXRlLGU9Yy5vcHRpb25zLnN0YXRlc1thfHxcblwibm9ybWFsXCJdfHx7fSxmPW5bYy50eXBlXS5tYXJrZXImJmMub3B0aW9ucy5tYXJrZXIsZz1mJiYhMT09PWYuZW5hYmxlZCxoPWYmJmYuc3RhdGVzJiZmLnN0YXRlc1thfHxcIm5vcm1hbFwiXXx8e30sbD0hMT09PWguZW5hYmxlZCxwPWMuc3RhdGVNYXJrZXJHcmFwaGljLHU9dGhpcy5tYXJrZXJ8fHt9LHQ9Yy5jaGFydCx5PWMuaGFsbyx6LEI9ZiYmYy5tYXJrZXJBdHRyaWJzO2E9YXx8XCJcIjtpZighKGE9PT10aGlzLnN0YXRlJiYhYnx8dGhpcy5zZWxlY3RlZCYmXCJzZWxlY3RcIiE9PWF8fCExPT09ZS5lbmFibGVkfHxhJiYobHx8ZyYmITE9PT1oLmVuYWJsZWQpfHxhJiZ1LnN0YXRlcyYmdS5zdGF0ZXNbYV0mJiExPT09dS5zdGF0ZXNbYV0uZW5hYmxlZCkpe3RoaXMuc3RhdGU9YTtCJiYoej1jLm1hcmtlckF0dHJpYnModGhpcyxhKSk7aWYodGhpcy5ncmFwaGljKXtkJiZ0aGlzLmdyYXBoaWMucmVtb3ZlQ2xhc3MoXCJoaWdoY2hhcnRzLXBvaW50LVwiK2QpO2EmJnRoaXMuZ3JhcGhpYy5hZGRDbGFzcyhcImhpZ2hjaGFydHMtcG9pbnQtXCIrXG5hKTtpZighdC5zdHlsZWRNb2RlKXt2YXIgQz1jLnBvaW50QXR0cmlicyh0aGlzLGEpO3ZhciBIPXYodC5vcHRpb25zLmNoYXJ0LmFuaW1hdGlvbixlLmFuaW1hdGlvbik7Yy5vcHRpb25zLmluYWN0aXZlT3RoZXJQb2ludHMmJigodGhpcy5kYXRhTGFiZWxzfHxbXSkuZm9yRWFjaChmdW5jdGlvbihhKXthJiZhLmFuaW1hdGUoe29wYWNpdHk6Qy5vcGFjaXR5fSxIKX0pLHRoaXMuY29ubmVjdG9yJiZ0aGlzLmNvbm5lY3Rvci5hbmltYXRlKHtvcGFjaXR5OkMub3BhY2l0eX0sSCkpO3RoaXMuZ3JhcGhpYy5hbmltYXRlKEMsSCl9eiYmdGhpcy5ncmFwaGljLmFuaW1hdGUoeix2KHQub3B0aW9ucy5jaGFydC5hbmltYXRpb24saC5hbmltYXRpb24sZi5hbmltYXRpb24pKTtwJiZwLmhpZGUoKX1lbHNle2lmKGEmJmgpe2Q9dS5zeW1ib2x8fGMuc3ltYm9sO3AmJnAuY3VycmVudFN5bWJvbCE9PWQmJihwPXAuZGVzdHJveSgpKTtpZih6KWlmKHApcFtiP1wiYW5pbWF0ZVwiOlwiYXR0clwiXSh7eDp6LngsXG55OnoueX0pO2Vsc2UgZCYmKGMuc3RhdGVNYXJrZXJHcmFwaGljPXA9dC5yZW5kZXJlci5zeW1ib2woZCx6Lngsei55LHoud2lkdGgsei5oZWlnaHQpLmFkZChjLm1hcmtlckdyb3VwKSxwLmN1cnJlbnRTeW1ib2w9ZCk7IXQuc3R5bGVkTW9kZSYmcCYmcC5hdHRyKGMucG9pbnRBdHRyaWJzKHRoaXMsYSkpfXAmJihwW2EmJnRoaXMuaXNJbnNpZGU/XCJzaG93XCI6XCJoaWRlXCJdKCkscC5lbGVtZW50LnBvaW50PXRoaXMpfWE9ZS5oYWxvO2U9KHA9dGhpcy5ncmFwaGljfHxwKSYmcC52aXNpYmlsaXR5fHxcImluaGVyaXRcIjthJiZhLnNpemUmJnAmJlwiaGlkZGVuXCIhPT1lPyh5fHwoYy5oYWxvPXk9dC5yZW5kZXJlci5wYXRoKCkuYWRkKHAucGFyZW50R3JvdXApKSx5LnNob3coKVtiP1wiYW5pbWF0ZVwiOlwiYXR0clwiXSh7ZDp0aGlzLmhhbG9QYXRoKGEuc2l6ZSl9KSx5LmF0dHIoe1wiY2xhc3NcIjpcImhpZ2hjaGFydHMtaGFsbyBoaWdoY2hhcnRzLWNvbG9yLVwiK3YodGhpcy5jb2xvckluZGV4LGMuY29sb3JJbmRleCkrXG4odGhpcy5jbGFzc05hbWU/XCIgXCIrdGhpcy5jbGFzc05hbWU6XCJcIiksdmlzaWJpbGl0eTplLHpJbmRleDotMX0pLHkucG9pbnQ9dGhpcyx0LnN0eWxlZE1vZGV8fHkuYXR0cihHKHtmaWxsOnRoaXMuY29sb3J8fGMuY29sb3IsXCJmaWxsLW9wYWNpdHlcIjphLm9wYWNpdHl9LGEuYXR0cmlidXRlcykpKTp5JiZ5LnBvaW50JiZ5LnBvaW50LmhhbG9QYXRoJiZ5LmFuaW1hdGUoe2Q6eS5wb2ludC5oYWxvUGF0aCgwKX0sbnVsbCx5LmhpZGUpO3EodGhpcyxcImFmdGVyU2V0U3RhdGVcIil9fSxoYWxvUGF0aDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXJpZXMuY2hhcnQucmVuZGVyZXIuc3ltYm9scy5jaXJjbGUoTWF0aC5mbG9vcih0aGlzLnBsb3RYKS1hLHRoaXMucGxvdFktYSwyKmEsMiphKX19KTtHKGUucHJvdG90eXBlLHtvbk1vdXNlT3ZlcjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY2hhcnQsYj1hLmhvdmVyU2VyaWVzO2lmKGImJmIhPT10aGlzKWIub25Nb3VzZU91dCgpO3RoaXMub3B0aW9ucy5ldmVudHMubW91c2VPdmVyJiZcbnEodGhpcyxcIm1vdXNlT3ZlclwiKTt0aGlzLnNldFN0YXRlKFwiaG92ZXJcIik7YS5ob3ZlclNlcmllcz10aGlzfSxvbk1vdXNlT3V0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLGI9dGhpcy5jaGFydCxjPWIudG9vbHRpcCxkPWIuaG92ZXJQb2ludDtiLmhvdmVyU2VyaWVzPW51bGw7aWYoZClkLm9uTW91c2VPdXQoKTt0aGlzJiZhLmV2ZW50cy5tb3VzZU91dCYmcSh0aGlzLFwibW91c2VPdXRcIik7IWN8fHRoaXMuc3RpY2t5VHJhY2tpbmd8fGMuc2hhcmVkJiYhdGhpcy5ub1NoYXJlZFRvb2x0aXB8fGMuaGlkZSgpO2Iuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zZXRTdGF0ZShcIlwiLCEwKX0pfSxzZXRTdGF0ZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMsZD1jLm9wdGlvbnMsZT1jLmdyYXBoLGY9ZC5pbmFjdGl2ZU90aGVyUG9pbnRzLGc9ZC5zdGF0ZXMsaD1kLmxpbmVXaWR0aCxsPWQub3BhY2l0eSxuPXYoZ1thfHxcIm5vcm1hbFwiXSYmZ1thfHxcIm5vcm1hbFwiXS5hbmltYXRpb24sXG5jLmNoYXJ0Lm9wdGlvbnMuY2hhcnQuYW5pbWF0aW9uKTtkPTA7YT1hfHxcIlwiO2lmKGMuc3RhdGUhPT1hJiYoW2MuZ3JvdXAsYy5tYXJrZXJHcm91cCxjLmRhdGFMYWJlbHNHcm91cF0uZm9yRWFjaChmdW5jdGlvbihiKXtiJiYoYy5zdGF0ZSYmYi5yZW1vdmVDbGFzcyhcImhpZ2hjaGFydHMtc2VyaWVzLVwiK2Muc3RhdGUpLGEmJmIuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXNlcmllcy1cIithKSl9KSxjLnN0YXRlPWEsIWMuY2hhcnQuc3R5bGVkTW9kZSkpe2lmKGdbYV0mJiExPT09Z1thXS5lbmFibGVkKXJldHVybjthJiYoaD1nW2FdLmxpbmVXaWR0aHx8aCsoZ1thXS5saW5lV2lkdGhQbHVzfHwwKSxsPXYoZ1thXS5vcGFjaXR5LGwpKTtpZihlJiYhZS5kYXNoc3R5bGUpZm9yKGc9e1wic3Ryb2tlLXdpZHRoXCI6aH0sZS5hbmltYXRlKGcsbik7Y1tcInpvbmUtZ3JhcGgtXCIrZF07KWNbXCJ6b25lLWdyYXBoLVwiK2RdLmF0dHIoZyksZCs9MTtmfHxbYy5ncm91cCxjLm1hcmtlckdyb3VwLGMuZGF0YUxhYmVsc0dyb3VwLFxuYy5sYWJlbEJ5U2VyaWVzXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EmJmEuYW5pbWF0ZSh7b3BhY2l0eTpsfSxuKX0pfWImJmYmJmMucG9pbnRzJiZjLnNldEFsbFBvaW50c1RvU3RhdGUoYSl9LHNldEFsbFBvaW50c1RvU3RhdGU6ZnVuY3Rpb24oYSl7dGhpcy5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihiKXtiLnNldFN0YXRlJiZiLnNldFN0YXRlKGEpfSl9LHNldFZpc2libGU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9Yy5jaGFydCxlPWMubGVnZW5kSXRlbSxmPWQub3B0aW9ucy5jaGFydC5pZ25vcmVIaWRkZW5TZXJpZXMsZz1jLnZpc2libGU7dmFyIGg9KGMudmlzaWJsZT1hPWMub3B0aW9ucy52aXNpYmxlPWMudXNlck9wdGlvbnMudmlzaWJsZT12b2lkIDA9PT1hPyFnOmEpP1wic2hvd1wiOlwiaGlkZVwiO1tcImdyb3VwXCIsXCJkYXRhTGFiZWxzR3JvdXBcIixcIm1hcmtlckdyb3VwXCIsXCJ0cmFja2VyXCIsXCJ0dFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKGNbYV0pY1thXVtoXSgpfSk7aWYoZC5ob3ZlclNlcmllcz09PVxuY3x8KGQuaG92ZXJQb2ludCYmZC5ob3ZlclBvaW50LnNlcmllcyk9PT1jKWMub25Nb3VzZU91dCgpO2UmJmQubGVnZW5kLmNvbG9yaXplSXRlbShjLGEpO2MuaXNEaXJ0eT0hMDtjLm9wdGlvbnMuc3RhY2tpbmcmJmQuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5vcHRpb25zLnN0YWNraW5nJiZhLnZpc2libGUmJihhLmlzRGlydHk9ITApfSk7Yy5saW5rZWRTZXJpZXMuZm9yRWFjaChmdW5jdGlvbihiKXtiLnNldFZpc2libGUoYSwhMSl9KTtmJiYoZC5pc0RpcnR5Qm94PSEwKTtxKGMsaCk7ITEhPT1iJiZkLnJlZHJhdygpfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5zZXRWaXNpYmxlKCEwKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuc2V0VmlzaWJsZSghMSl9LHNlbGVjdDpmdW5jdGlvbihhKXt0aGlzLnNlbGVjdGVkPWE9dGhpcy5vcHRpb25zLnNlbGVjdGVkPXZvaWQgMD09PWE/IXRoaXMuc2VsZWN0ZWQ6YTt0aGlzLmNoZWNrYm94JiYodGhpcy5jaGVja2JveC5jaGVja2VkPWEpO1xucSh0aGlzLGE/XCJzZWxlY3RcIjpcInVuc2VsZWN0XCIpfSxkcmF3VHJhY2tlcjpFLmRyYXdUcmFja2VyR3JhcGh9KX0pO00oSSxcInBhcnRzL1Jlc3BvbnNpdmUuanNcIixbSVtcInBhcnRzL0dsb2JhbHMuanNcIl0sSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmlzQXJyYXksRz1mLmlzT2JqZWN0LHo9Zi5vYmplY3RFYWNoLEI9Zi5waWNrLHQ9Zi5zcGxhdDtmPWMuQ2hhcnQ7Zi5wcm90b3R5cGUuc2V0UmVzcG9uc2l2ZT1mdW5jdGlvbihmLHQpe3ZhciB2PXRoaXMub3B0aW9ucy5yZXNwb25zaXZlLHk9W10saD10aGlzLmN1cnJlbnRSZXNwb25zaXZlOyF0JiZ2JiZ2LnJ1bGVzJiZ2LnJ1bGVzLmZvckVhY2goZnVuY3Rpb24oZil7dm9pZCAwPT09Zi5faWQmJihmLl9pZD1jLnVuaXF1ZUtleSgpKTt0aGlzLm1hdGNoUmVzcG9uc2l2ZVJ1bGUoZix5KX0sdGhpcyk7dD1jLm1lcmdlLmFwcGx5KDAseS5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIGMuZmluZCh2LnJ1bGVzLFxuZnVuY3Rpb24oYyl7cmV0dXJuIGMuX2lkPT09Zn0pLmNoYXJ0T3B0aW9uc30pKTt0LmlzUmVzcG9uc2l2ZU9wdGlvbnM9ITA7eT15LnRvU3RyaW5nKCl8fHZvaWQgMDt5IT09KGgmJmgucnVsZUlkcykmJihoJiZ0aGlzLnVwZGF0ZShoLnVuZG9PcHRpb25zLGYsITApLHk/KGg9dGhpcy5jdXJyZW50T3B0aW9ucyh0KSxoLmlzUmVzcG9uc2l2ZU9wdGlvbnM9ITAsdGhpcy5jdXJyZW50UmVzcG9uc2l2ZT17cnVsZUlkczp5LG1lcmdlZE9wdGlvbnM6dCx1bmRvT3B0aW9uczpofSx0aGlzLnVwZGF0ZSh0LGYsITApKTp0aGlzLmN1cnJlbnRSZXNwb25zaXZlPXZvaWQgMCl9O2YucHJvdG90eXBlLm1hdGNoUmVzcG9uc2l2ZVJ1bGU9ZnVuY3Rpb24oYyxmKXt2YXIgdD1jLmNvbmRpdGlvbjsodC5jYWxsYmFja3x8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGFydFdpZHRoPD1CKHQubWF4V2lkdGgsTnVtYmVyLk1BWF9WQUxVRSkmJnRoaXMuY2hhcnRIZWlnaHQ8PUIodC5tYXhIZWlnaHQsTnVtYmVyLk1BWF9WQUxVRSkmJlxudGhpcy5jaGFydFdpZHRoPj1CKHQubWluV2lkdGgsMCkmJnRoaXMuY2hhcnRIZWlnaHQ+PUIodC5taW5IZWlnaHQsMCl9KS5jYWxsKHRoaXMpJiZmLnB1c2goYy5faWQpfTtmLnByb3RvdHlwZS5jdXJyZW50T3B0aW9ucz1mdW5jdGlvbihjKXtmdW5jdGlvbiBmKGMsbixxLGcpe3ZhciBiO3ooYyxmdW5jdGlvbihhLGMpe2lmKCFnJiYtMTx2LmNvbGxlY3Rpb25zV2l0aFVwZGF0ZS5pbmRleE9mKGMpKWZvcihhPXQoYSkscVtjXT1bXSxiPTA7YjxhLmxlbmd0aDtiKyspbltjXVtiXSYmKHFbY11bYl09e30sZihhW2JdLG5bY11bYl0scVtjXVtiXSxnKzEpKTtlbHNlIEcoYSk/KHFbY109RihhKT9bXTp7fSxmKGEsbltjXXx8e30scVtjXSxnKzEpKTpxW2NdPXZvaWQgMD09PW5bY10/bnVsbDpuW2NdfSl9dmFyIHY9dGhpcyx5PXt9O2YoYyx0aGlzLm9wdGlvbnMseSwwKTtyZXR1cm4geX19KTtNKEksXCJtYXN0ZXJzL2hpZ2hjaGFydHMuc3JjLmpzXCIsW0lbXCJwYXJ0cy9HbG9iYWxzLmpzXCJdLFxuSVtcInBhcnRzL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oYyxmKXt2YXIgRj1mLmV4dGVuZDtGKGMse2FycmF5TWF4OmYuYXJyYXlNYXgsYXJyYXlNaW46Zi5hcnJheU1pbixhdHRyOmYuYXR0cixkZWZpbmVkOmYuZGVmaW5lZCxlcmFzZTpmLmVyYXNlLGV4dGVuZDpmLmV4dGVuZCxpc0FycmF5OmYuaXNBcnJheSxpc0NsYXNzOmYuaXNDbGFzcyxpc0RPTUVsZW1lbnQ6Zi5pc0RPTUVsZW1lbnQsaXNOdW1iZXI6Zi5pc051bWJlcixpc09iamVjdDpmLmlzT2JqZWN0LGlzU3RyaW5nOmYuaXNTdHJpbmcsb2JqZWN0RWFjaDpmLm9iamVjdEVhY2gscGljazpmLnBpY2sscEludDpmLnBJbnQsc2V0QW5pbWF0aW9uOmYuc2V0QW5pbWF0aW9uLHNwbGF0OmYuc3BsYXQsc3luY1RpbWVvdXQ6Zi5zeW5jVGltZW91dH0pO3JldHVybiBjfSk7SVtcIm1hc3RlcnMvaGlnaGNoYXJ0cy5zcmMuanNcIl0uX21vZHVsZXM9STtyZXR1cm4gSVtcIm1hc3RlcnMvaGlnaGNoYXJ0cy5zcmMuanNcIl19KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhpZ2hjaGFydHMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdm5vZGVfMSA9IHJlcXVpcmUoXCIuL3Zub2RlXCIpO1xudmFyIGlzID0gcmVxdWlyZShcIi4vaXNcIik7XG5mdW5jdGlvbiBhZGROUyhkYXRhLCBjaGlsZHJlbiwgc2VsKSB7XG4gICAgZGF0YS5ucyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG4gICAgaWYgKHNlbCAhPT0gJ2ZvcmVpZ25PYmplY3QnICYmIGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdmFyIGNoaWxkRGF0YSA9IGNoaWxkcmVuW2ldLmRhdGE7XG4gICAgICAgICAgICBpZiAoY2hpbGREYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhZGROUyhjaGlsZERhdGEsIGNoaWxkcmVuW2ldLmNoaWxkcmVuLCBjaGlsZHJlbltpXS5zZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaChzZWwsIGIsIGMpIHtcbiAgICB2YXIgZGF0YSA9IHt9LCBjaGlsZHJlbiwgdGV4dCwgaTtcbiAgICBpZiAoYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRhdGEgPSBiO1xuICAgICAgICBpZiAoaXMuYXJyYXkoYykpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gYztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpcy5wcmltaXRpdmUoYykpIHtcbiAgICAgICAgICAgIHRleHQgPSBjO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMgJiYgYy5zZWwpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gW2NdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaXMuYXJyYXkoYikpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gYjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpcy5wcmltaXRpdmUoYikpIHtcbiAgICAgICAgICAgIHRleHQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGIgJiYgYi5zZWwpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gW2JdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoaXMucHJpbWl0aXZlKGNoaWxkcmVuW2ldKSlcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpXSA9IHZub2RlXzEudm5vZGUodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY2hpbGRyZW5baV0sIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNlbFswXSA9PT0gJ3MnICYmIHNlbFsxXSA9PT0gJ3YnICYmIHNlbFsyXSA9PT0gJ2cnICYmXG4gICAgICAgIChzZWwubGVuZ3RoID09PSAzIHx8IHNlbFszXSA9PT0gJy4nIHx8IHNlbFszXSA9PT0gJyMnKSkge1xuICAgICAgICBhZGROUyhkYXRhLCBjaGlsZHJlbiwgc2VsKTtcbiAgICB9XG4gICAgcmV0dXJuIHZub2RlXzEudm5vZGUoc2VsLCBkYXRhLCBjaGlsZHJlbiwgdGV4dCwgdW5kZWZpbmVkKTtcbn1cbmV4cG9ydHMuaCA9IGg7XG47XG5leHBvcnRzLmRlZmF1bHQgPSBoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnTmFtZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG59XG5mdW5jdGlvbiBjcmVhdGVDb21tZW50KHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0ZXh0KTtcbn1cbmZ1bmN0aW9uIGluc2VydEJlZm9yZShwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSk7XG59XG5mdW5jdGlvbiByZW1vdmVDaGlsZChub2RlLCBjaGlsZCkge1xuICAgIG5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQobm9kZSwgY2hpbGQpIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHBhcmVudE5vZGUobm9kZSkge1xuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XG59XG5mdW5jdGlvbiBuZXh0U2libGluZyhub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG59XG5mdW5jdGlvbiB0YWdOYW1lKGVsbSkge1xuICAgIHJldHVybiBlbG0udGFnTmFtZTtcbn1cbmZ1bmN0aW9uIHNldFRleHRDb250ZW50KG5vZGUsIHRleHQpIHtcbiAgICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn1cbmZ1bmN0aW9uIGdldFRleHRDb250ZW50KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50ZXh0Q29udGVudDtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IDE7XG59XG5mdW5jdGlvbiBpc1RleHQobm9kZSkge1xuICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSAzO1xufVxuZnVuY3Rpb24gaXNDb21tZW50KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gODtcbn1cbmV4cG9ydHMuaHRtbERvbUFwaSA9IHtcbiAgICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50LFxuICAgIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICAgIGNyZWF0ZVRleHROb2RlOiBjcmVhdGVUZXh0Tm9kZSxcbiAgICBjcmVhdGVDb21tZW50OiBjcmVhdGVDb21tZW50LFxuICAgIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICAgIHJlbW92ZUNoaWxkOiByZW1vdmVDaGlsZCxcbiAgICBhcHBlbmRDaGlsZDogYXBwZW5kQ2hpbGQsXG4gICAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgICBuZXh0U2libGluZzogbmV4dFNpYmxpbmcsXG4gICAgdGFnTmFtZTogdGFnTmFtZSxcbiAgICBzZXRUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gICAgZ2V0VGV4dENvbnRlbnQ6IGdldFRleHRDb250ZW50LFxuICAgIGlzRWxlbWVudDogaXNFbGVtZW50LFxuICAgIGlzVGV4dDogaXNUZXh0LFxuICAgIGlzQ29tbWVudDogaXNDb21tZW50LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMuaHRtbERvbUFwaTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0bWxkb21hcGkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFycmF5ID0gQXJyYXkuaXNBcnJheTtcbmZ1bmN0aW9uIHByaW1pdGl2ZShzKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBzID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLnByaW1pdGl2ZSA9IHByaW1pdGl2ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHhsaW5rTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG52YXIgeG1sTlMgPSAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJztcbnZhciBjb2xvbkNoYXIgPSA1ODtcbnZhciB4Q2hhciA9IDEyMDtcbmZ1bmN0aW9uIHVwZGF0ZUF0dHJzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBrZXksIGVsbSA9IHZub2RlLmVsbSwgb2xkQXR0cnMgPSBvbGRWbm9kZS5kYXRhLmF0dHJzLCBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnM7XG4gICAgaWYgKCFvbGRBdHRycyAmJiAhYXR0cnMpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAob2xkQXR0cnMgPT09IGF0dHJzKVxuICAgICAgICByZXR1cm47XG4gICAgb2xkQXR0cnMgPSBvbGRBdHRycyB8fCB7fTtcbiAgICBhdHRycyA9IGF0dHJzIHx8IHt9O1xuICAgIC8vIHVwZGF0ZSBtb2RpZmllZCBhdHRyaWJ1dGVzLCBhZGQgbmV3IGF0dHJpYnV0ZXNcbiAgICBmb3IgKGtleSBpbiBhdHRycykge1xuICAgICAgICB2YXIgY3VyID0gYXR0cnNba2V5XTtcbiAgICAgICAgdmFyIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgICAgIGlmIChvbGQgIT09IGN1cikge1xuICAgICAgICAgICAgaWYgKGN1ciA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGVsbS5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGN1ciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmNoYXJDb2RlQXQoMCkgIT09IHhDaGFyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsbS5zZXRBdHRyaWJ1dGUoa2V5LCBjdXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChrZXkuY2hhckNvZGVBdCgzKSA9PT0gY29sb25DaGFyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB4bWwgbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgICAgIGVsbS5zZXRBdHRyaWJ1dGVOUyh4bWxOUywga2V5LCBjdXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChrZXkuY2hhckNvZGVBdCg1KSA9PT0gY29sb25DaGFyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB4bGluayBuYW1lc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgZWxtLnNldEF0dHJpYnV0ZU5TKHhsaW5rTlMsIGtleSwgY3VyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsbS5zZXRBdHRyaWJ1dGUoa2V5LCBjdXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyByZW1vdmUgcmVtb3ZlZCBhdHRyaWJ1dGVzXG4gICAgLy8gdXNlIGBpbmAgb3BlcmF0b3Igc2luY2UgdGhlIHByZXZpb3VzIGBmb3JgIGl0ZXJhdGlvbiB1c2VzIGl0ICguaS5lLiBhZGQgZXZlbiBhdHRyaWJ1dGVzIHdpdGggdW5kZWZpbmVkIHZhbHVlKVxuICAgIC8vIHRoZSBvdGhlciBvcHRpb24gaXMgdG8gcmVtb3ZlIGFsbCBhdHRyaWJ1dGVzIHdpdGggdmFsdWUgPT0gdW5kZWZpbmVkXG4gICAgZm9yIChrZXkgaW4gb2xkQXR0cnMpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIGF0dHJzKSkge1xuICAgICAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5hdHRyaWJ1dGVzTW9kdWxlID0geyBjcmVhdGU6IHVwZGF0ZUF0dHJzLCB1cGRhdGU6IHVwZGF0ZUF0dHJzIH07XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLmF0dHJpYnV0ZXNNb2R1bGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdHRyaWJ1dGVzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gdXBkYXRlQ2xhc3Mob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIGN1ciwgbmFtZSwgZWxtID0gdm5vZGUuZWxtLCBvbGRDbGFzcyA9IG9sZFZub2RlLmRhdGEuY2xhc3MsIGtsYXNzID0gdm5vZGUuZGF0YS5jbGFzcztcbiAgICBpZiAoIW9sZENsYXNzICYmICFrbGFzcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChvbGRDbGFzcyA9PT0ga2xhc3MpXG4gICAgICAgIHJldHVybjtcbiAgICBvbGRDbGFzcyA9IG9sZENsYXNzIHx8IHt9O1xuICAgIGtsYXNzID0ga2xhc3MgfHwge307XG4gICAgZm9yIChuYW1lIGluIG9sZENsYXNzKSB7XG4gICAgICAgIGlmICgha2xhc3NbbmFtZV0pIHtcbiAgICAgICAgICAgIGVsbS5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAobmFtZSBpbiBrbGFzcykge1xuICAgICAgICBjdXIgPSBrbGFzc1tuYW1lXTtcbiAgICAgICAgaWYgKGN1ciAhPT0gb2xkQ2xhc3NbbmFtZV0pIHtcbiAgICAgICAgICAgIGVsbS5jbGFzc0xpc3RbY3VyID8gJ2FkZCcgOiAncmVtb3ZlJ10obmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmNsYXNzTW9kdWxlID0geyBjcmVhdGU6IHVwZGF0ZUNsYXNzLCB1cGRhdGU6IHVwZGF0ZUNsYXNzIH07XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLmNsYXNzTW9kdWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2xhc3MuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBpbnZva2VIYW5kbGVyKGhhbmRsZXIsIHZub2RlLCBldmVudCkge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIC8vIGNhbGwgZnVuY3Rpb24gaGFuZGxlclxuICAgICAgICBoYW5kbGVyLmNhbGwodm5vZGUsIGV2ZW50LCB2bm9kZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBoYW5kbGVyID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIC8vIGNhbGwgaGFuZGxlciB3aXRoIGFyZ3VtZW50c1xuICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXJbMF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciBzaW5nbGUgYXJndW1lbnQgZm9yIHBlcmZvcm1hbmNlXG4gICAgICAgICAgICBpZiAoaGFuZGxlci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyWzBdLmNhbGwodm5vZGUsIGhhbmRsZXJbMV0sIGV2ZW50LCB2bm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGhhbmRsZXIuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2godm5vZGUpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXJbMF0uYXBwbHkodm5vZGUsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gY2FsbCBtdWx0aXBsZSBoYW5kbGVyc1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaW52b2tlSGFuZGxlcihoYW5kbGVyW2ldLCB2bm9kZSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQsIHZub2RlKSB7XG4gICAgdmFyIG5hbWUgPSBldmVudC50eXBlLCBvbiA9IHZub2RlLmRhdGEub247XG4gICAgLy8gY2FsbCBldmVudCBoYW5kbGVyKHMpIGlmIGV4aXN0c1xuICAgIGlmIChvbiAmJiBvbltuYW1lXSkge1xuICAgICAgICBpbnZva2VIYW5kbGVyKG9uW25hbWVdLCB2bm9kZSwgZXZlbnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIGhhbmRsZUV2ZW50KGV2ZW50LCBoYW5kbGVyLnZub2RlKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gdXBkYXRlRXZlbnRMaXN0ZW5lcnMob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiwgb2xkTGlzdGVuZXIgPSBvbGRWbm9kZS5saXN0ZW5lciwgb2xkRWxtID0gb2xkVm5vZGUuZWxtLCBvbiA9IHZub2RlICYmIHZub2RlLmRhdGEub24sIGVsbSA9ICh2bm9kZSAmJiB2bm9kZS5lbG0pLCBuYW1lO1xuICAgIC8vIG9wdGltaXphdGlvbiBmb3IgcmV1c2VkIGltbXV0YWJsZSBoYW5kbGVyc1xuICAgIGlmIChvbGRPbiA9PT0gb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyByZW1vdmUgZXhpc3RpbmcgbGlzdGVuZXJzIHdoaWNoIG5vIGxvbmdlciB1c2VkXG4gICAgaWYgKG9sZE9uICYmIG9sZExpc3RlbmVyKSB7XG4gICAgICAgIC8vIGlmIGVsZW1lbnQgY2hhbmdlZCBvciBkZWxldGVkIHdlIHJlbW92ZSBhbGwgZXhpc3RpbmcgbGlzdGVuZXJzIHVuY29uZGl0aW9uYWxseVxuICAgICAgICBpZiAoIW9uKSB7XG4gICAgICAgICAgICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgbGlzdGVuZXIgaWYgZWxlbWVudCB3YXMgY2hhbmdlZCBvciBleGlzdGluZyBsaXN0ZW5lcnMgcmVtb3ZlZFxuICAgICAgICAgICAgICAgIG9sZEVsbS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIG9sZExpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgbGlzdGVuZXIgaWYgZXhpc3RpbmcgbGlzdGVuZXIgcmVtb3ZlZFxuICAgICAgICAgICAgICAgIGlmICghb25bbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgb2xkTGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gYWRkIG5ldyBsaXN0ZW5lcnMgd2hpY2ggaGFzIG5vdCBhbHJlYWR5IGF0dGFjaGVkXG4gICAgaWYgKG9uKSB7XG4gICAgICAgIC8vIHJldXNlIGV4aXN0aW5nIGxpc3RlbmVyIG9yIGNyZWF0ZSBuZXdcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gdm5vZGUubGlzdGVuZXIgPSBvbGRWbm9kZS5saXN0ZW5lciB8fCBjcmVhdGVMaXN0ZW5lcigpO1xuICAgICAgICAvLyB1cGRhdGUgdm5vZGUgZm9yIGxpc3RlbmVyXG4gICAgICAgIGxpc3RlbmVyLnZub2RlID0gdm5vZGU7XG4gICAgICAgIC8vIGlmIGVsZW1lbnQgY2hhbmdlZCBvciBhZGRlZCB3ZSBhZGQgYWxsIG5lZWRlZCBsaXN0ZW5lcnMgdW5jb25kaXRpb25hbGx5XG4gICAgICAgIGlmICghb2xkT24pIHtcbiAgICAgICAgICAgIGZvciAobmFtZSBpbiBvbikge1xuICAgICAgICAgICAgICAgIC8vIGFkZCBsaXN0ZW5lciBpZiBlbGVtZW50IHdhcyBjaGFuZ2VkIG9yIG5ldyBsaXN0ZW5lcnMgYWRkZWRcbiAgICAgICAgICAgICAgICBlbG0uYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChuYW1lIGluIG9uKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGxpc3RlbmVyIGlmIG5ldyBsaXN0ZW5lciBhZGRlZFxuICAgICAgICAgICAgICAgIGlmICghb2xkT25bbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgZWxtLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmV2ZW50TGlzdGVuZXJzTW9kdWxlID0ge1xuICAgIGNyZWF0ZTogdXBkYXRlRXZlbnRMaXN0ZW5lcnMsXG4gICAgdXBkYXRlOiB1cGRhdGVFdmVudExpc3RlbmVycyxcbiAgICBkZXN0cm95OiB1cGRhdGVFdmVudExpc3RlbmVyc1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMuZXZlbnRMaXN0ZW5lcnNNb2R1bGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ldmVudGxpc3RlbmVycy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHVwZGF0ZVByb3BzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBrZXksIGN1ciwgb2xkLCBlbG0gPSB2bm9kZS5lbG0sIG9sZFByb3BzID0gb2xkVm5vZGUuZGF0YS5wcm9wcywgcHJvcHMgPSB2bm9kZS5kYXRhLnByb3BzO1xuICAgIGlmICghb2xkUHJvcHMgJiYgIXByb3BzKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKG9sZFByb3BzID09PSBwcm9wcylcbiAgICAgICAgcmV0dXJuO1xuICAgIG9sZFByb3BzID0gb2xkUHJvcHMgfHwge307XG4gICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICBmb3IgKGtleSBpbiBvbGRQcm9wcykge1xuICAgICAgICBpZiAoIXByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBlbG1ba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGtleSBpbiBwcm9wcykge1xuICAgICAgICBjdXIgPSBwcm9wc1trZXldO1xuICAgICAgICBvbGQgPSBvbGRQcm9wc1trZXldO1xuICAgICAgICBpZiAob2xkICE9PSBjdXIgJiYgKGtleSAhPT0gJ3ZhbHVlJyB8fCBlbG1ba2V5XSAhPT0gY3VyKSkge1xuICAgICAgICAgICAgZWxtW2tleV0gPSBjdXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnByb3BzTW9kdWxlID0geyBjcmVhdGU6IHVwZGF0ZVByb3BzLCB1cGRhdGU6IHVwZGF0ZVByb3BzIH07XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLnByb3BzTW9kdWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcHMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdm5vZGVfMSA9IHJlcXVpcmUoXCIuL3Zub2RlXCIpO1xudmFyIGlzID0gcmVxdWlyZShcIi4vaXNcIik7XG52YXIgaHRtbGRvbWFwaV8xID0gcmVxdWlyZShcIi4vaHRtbGRvbWFwaVwiKTtcbmZ1bmN0aW9uIGlzVW5kZWYocykgeyByZXR1cm4gcyA9PT0gdW5kZWZpbmVkOyB9XG5mdW5jdGlvbiBpc0RlZihzKSB7IHJldHVybiBzICE9PSB1bmRlZmluZWQ7IH1cbnZhciBlbXB0eU5vZGUgPSB2bm9kZV8xLmRlZmF1bHQoJycsIHt9LCBbXSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuZnVuY3Rpb24gc2FtZVZub2RlKHZub2RlMSwgdm5vZGUyKSB7XG4gICAgcmV0dXJuIHZub2RlMS5rZXkgPT09IHZub2RlMi5rZXkgJiYgdm5vZGUxLnNlbCA9PT0gdm5vZGUyLnNlbDtcbn1cbmZ1bmN0aW9uIGlzVm5vZGUodm5vZGUpIHtcbiAgICByZXR1cm4gdm5vZGUuc2VsICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBjcmVhdGVLZXlUb09sZElkeChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICAgIHZhciBpLCBtYXAgPSB7fSwga2V5LCBjaDtcbiAgICBmb3IgKGkgPSBiZWdpbklkeDsgaSA8PSBlbmRJZHg7ICsraSkge1xuICAgICAgICBjaCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICBpZiAoY2ggIT0gbnVsbCkge1xuICAgICAgICAgICAga2V5ID0gY2gua2V5O1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIG1hcFtrZXldID0gaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwO1xufVxudmFyIGhvb2tzID0gWydjcmVhdGUnLCAndXBkYXRlJywgJ3JlbW92ZScsICdkZXN0cm95JywgJ3ByZScsICdwb3N0J107XG52YXIgaF8xID0gcmVxdWlyZShcIi4vaFwiKTtcbmV4cG9ydHMuaCA9IGhfMS5oO1xudmFyIHRodW5rXzEgPSByZXF1aXJlKFwiLi90aHVua1wiKTtcbmV4cG9ydHMudGh1bmsgPSB0aHVua18xLnRodW5rO1xuZnVuY3Rpb24gaW5pdChtb2R1bGVzLCBkb21BcGkpIHtcbiAgICB2YXIgaSwgaiwgY2JzID0ge307XG4gICAgdmFyIGFwaSA9IGRvbUFwaSAhPT0gdW5kZWZpbmVkID8gZG9tQXBpIDogaHRtbGRvbWFwaV8xLmRlZmF1bHQ7XG4gICAgZm9yIChpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNic1tob29rc1tpXV0gPSBbXTtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG1vZHVsZXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHZhciBob29rID0gbW9kdWxlc1tqXVtob29rc1tpXV07XG4gICAgICAgICAgICBpZiAoaG9vayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKGhvb2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVtcHR5Tm9kZUF0KGVsbSkge1xuICAgICAgICB2YXIgaWQgPSBlbG0uaWQgPyAnIycgKyBlbG0uaWQgOiAnJztcbiAgICAgICAgdmFyIGMgPSBlbG0uY2xhc3NOYW1lID8gJy4nICsgZWxtLmNsYXNzTmFtZS5zcGxpdCgnICcpLmpvaW4oJy4nKSA6ICcnO1xuICAgICAgICByZXR1cm4gdm5vZGVfMS5kZWZhdWx0KGFwaS50YWdOYW1lKGVsbSkudG9Mb3dlckNhc2UoKSArIGlkICsgYywge30sIFtdLCB1bmRlZmluZWQsIGVsbSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVJtQ2IoY2hpbGRFbG0sIGxpc3RlbmVycykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcm1DYigpIHtcbiAgICAgICAgICAgIGlmICgtLWxpc3RlbmVycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IGFwaS5wYXJlbnROb2RlKGNoaWxkRWxtKTtcbiAgICAgICAgICAgICAgICBhcGkucmVtb3ZlQ2hpbGQocGFyZW50XzEsIGNoaWxkRWxtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRWxtKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgICAgdmFyIGksIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuaW5pdCkpIHtcbiAgICAgICAgICAgICAgICBpKHZub2RlKTtcbiAgICAgICAgICAgICAgICBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbiwgc2VsID0gdm5vZGUuc2VsO1xuICAgICAgICBpZiAoc2VsID09PSAnIScpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKHZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICAgICAgdm5vZGUudGV4dCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm5vZGUuZWxtID0gYXBpLmNyZWF0ZUNvbW1lbnQodm5vZGUudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2VsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIFBhcnNlIHNlbGVjdG9yXG4gICAgICAgICAgICB2YXIgaGFzaElkeCA9IHNlbC5pbmRleE9mKCcjJyk7XG4gICAgICAgICAgICB2YXIgZG90SWR4ID0gc2VsLmluZGV4T2YoJy4nLCBoYXNoSWR4KTtcbiAgICAgICAgICAgIHZhciBoYXNoID0gaGFzaElkeCA+IDAgPyBoYXNoSWR4IDogc2VsLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBkb3QgPSBkb3RJZHggPiAwID8gZG90SWR4IDogc2VsLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciB0YWcgPSBoYXNoSWR4ICE9PSAtMSB8fCBkb3RJZHggIT09IC0xID8gc2VsLnNsaWNlKDAsIE1hdGgubWluKGhhc2gsIGRvdCkpIDogc2VsO1xuICAgICAgICAgICAgdmFyIGVsbSA9IHZub2RlLmVsbSA9IGlzRGVmKGRhdGEpICYmIGlzRGVmKGkgPSBkYXRhLm5zKSA/IGFwaS5jcmVhdGVFbGVtZW50TlMoaSwgdGFnKVxuICAgICAgICAgICAgICAgIDogYXBpLmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICAgICAgICAgIGlmIChoYXNoIDwgZG90KVxuICAgICAgICAgICAgICAgIGVsbS5zZXRBdHRyaWJ1dGUoJ2lkJywgc2VsLnNsaWNlKGhhc2ggKyAxLCBkb3QpKTtcbiAgICAgICAgICAgIGlmIChkb3RJZHggPiAwKVxuICAgICAgICAgICAgICAgIGVsbS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgc2VsLnNsaWNlKGRvdCArIDEpLnJlcGxhY2UoL1xcLi9nLCAnICcpKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgIGNicy5jcmVhdGVbaV0oZW1wdHlOb2RlLCB2bm9kZSk7XG4gICAgICAgICAgICBpZiAoaXMuYXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBpLmFwcGVuZENoaWxkKGVsbSwgY3JlYXRlRWxtKGNoLCBpbnNlcnRlZFZub2RlUXVldWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzLnByaW1pdGl2ZSh2bm9kZS50ZXh0KSkge1xuICAgICAgICAgICAgICAgIGFwaS5hcHBlbmRDaGlsZChlbG0sIGFwaS5jcmVhdGVUZXh0Tm9kZSh2bm9kZS50ZXh0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpID0gdm5vZGUuZGF0YS5ob29rOyAvLyBSZXVzZSB2YXJpYWJsZVxuICAgICAgICAgICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkuY3JlYXRlKVxuICAgICAgICAgICAgICAgICAgICBpLmNyZWF0ZShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoaS5pbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKHZub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZub2RlLmVsbSA9IGFwaS5jcmVhdGVUZXh0Tm9kZSh2bm9kZS50ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm5vZGUuZWxtO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRWbm9kZXMocGFyZW50RWxtLCBiZWZvcmUsIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgICAgICAgIHZhciBjaCA9IHZub2Rlc1tzdGFydElkeF07XG4gICAgICAgICAgICBpZiAoY2ggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGFwaS5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBjcmVhdGVFbG0oY2gsIGluc2VydGVkVm5vZGVRdWV1ZSksIGJlZm9yZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW52b2tlRGVzdHJveUhvb2sodm5vZGUpIHtcbiAgICAgICAgdmFyIGksIGosIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuZGVzdHJveSkpXG4gICAgICAgICAgICAgICAgaSh2bm9kZSk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgY2JzLmRlc3Ryb3lbaV0odm5vZGUpO1xuICAgICAgICAgICAgaWYgKHZub2RlLmNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IHZub2RlLmNoaWxkcmVuW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBudWxsICYmIHR5cGVvZiBpICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVWbm9kZXMocGFyZW50RWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgpIHtcbiAgICAgICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgICAgICAgdmFyIGlfMSA9IHZvaWQgMCwgbGlzdGVuZXJzID0gdm9pZCAwLCBybSA9IHZvaWQgMCwgY2ggPSB2bm9kZXNbc3RhcnRJZHhdO1xuICAgICAgICAgICAgaWYgKGNoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNEZWYoY2guc2VsKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhjaCk7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycyA9IGNicy5yZW1vdmUubGVuZ3RoICsgMTtcbiAgICAgICAgICAgICAgICAgICAgcm0gPSBjcmVhdGVSbUNiKGNoLmVsbSwgbGlzdGVuZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpXzEgPSAwOyBpXzEgPCBjYnMucmVtb3ZlLmxlbmd0aDsgKytpXzEpXG4gICAgICAgICAgICAgICAgICAgICAgICBjYnMucmVtb3ZlW2lfMV0oY2gsIHJtKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmKGlfMSA9IGNoLmRhdGEpICYmIGlzRGVmKGlfMSA9IGlfMS5ob29rKSAmJiBpc0RlZihpXzEgPSBpXzEucmVtb3ZlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaV8xKGNoLCBybSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBybSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcGkucmVtb3ZlQ2hpbGQocGFyZW50RWxtLCBjaC5lbG0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVDaGlsZHJlbihwYXJlbnRFbG0sIG9sZENoLCBuZXdDaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICAgIHZhciBvbGRTdGFydElkeCA9IDAsIG5ld1N0YXJ0SWR4ID0gMDtcbiAgICAgICAgdmFyIG9sZEVuZElkeCA9IG9sZENoLmxlbmd0aCAtIDE7XG4gICAgICAgIHZhciBvbGRTdGFydFZub2RlID0gb2xkQ2hbMF07XG4gICAgICAgIHZhciBvbGRFbmRWbm9kZSA9IG9sZENoW29sZEVuZElkeF07XG4gICAgICAgIHZhciBuZXdFbmRJZHggPSBuZXdDaC5sZW5ndGggLSAxO1xuICAgICAgICB2YXIgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWzBdO1xuICAgICAgICB2YXIgbmV3RW5kVm5vZGUgPSBuZXdDaFtuZXdFbmRJZHhdO1xuICAgICAgICB2YXIgb2xkS2V5VG9JZHg7XG4gICAgICAgIHZhciBpZHhJbk9sZDtcbiAgICAgICAgdmFyIGVsbVRvTW92ZTtcbiAgICAgICAgdmFyIGJlZm9yZTtcbiAgICAgICAgd2hpbGUgKG9sZFN0YXJ0SWR4IDw9IG9sZEVuZElkeCAmJiBuZXdTdGFydElkeCA8PSBuZXdFbmRJZHgpIHtcbiAgICAgICAgICAgIGlmIChvbGRTdGFydFZub2RlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07IC8vIFZub2RlIG1pZ2h0IGhhdmUgYmVlbiBtb3ZlZCBsZWZ0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvbGRFbmRWbm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuZXdTdGFydFZub2RlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuZXdFbmRWbm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgICAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgICAgICBhcGkuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGFwaS5uZXh0U2libGluZyhvbGRFbmRWbm9kZS5lbG0pKTtcbiAgICAgICAgICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgICAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgICAgICBhcGkuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkRW5kVm5vZGUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgICAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG9sZEtleVRvSWR4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkS2V5VG9JZHggPSBjcmVhdGVLZXlUb09sZElkeChvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlkeEluT2xkID0gb2xkS2V5VG9JZHhbbmV3U3RhcnRWbm9kZS5rZXldO1xuICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKGlkeEluT2xkKSkge1xuICAgICAgICAgICAgICAgICAgICBhcGkuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSksIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWxtVG9Nb3ZlID0gb2xkQ2hbaWR4SW5PbGRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxtVG9Nb3ZlLnNlbCAhPT0gbmV3U3RhcnRWbm9kZS5zZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBjcmVhdGVFbG0obmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShlbG1Ub01vdmUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRDaFtpZHhJbk9sZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGkuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgZWxtVG9Nb3ZlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9sZFN0YXJ0SWR4IDw9IG9sZEVuZElkeCB8fCBuZXdTdGFydElkeCA8PSBuZXdFbmRJZHgpIHtcbiAgICAgICAgICAgIGlmIChvbGRTdGFydElkeCA+IG9sZEVuZElkeCkge1xuICAgICAgICAgICAgICAgIGJlZm9yZSA9IG5ld0NoW25ld0VuZElkeCArIDFdID09IG51bGwgPyBudWxsIDogbmV3Q2hbbmV3RW5kSWR4ICsgMV0uZWxtO1xuICAgICAgICAgICAgICAgIGFkZFZub2RlcyhwYXJlbnRFbG0sIGJlZm9yZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4LCBuZXdFbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZW1vdmVWbm9kZXMocGFyZW50RWxtLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcGF0Y2hWbm9kZShvbGRWbm9kZSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgICAgICB2YXIgaSwgaG9vaztcbiAgICAgICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5kYXRhKSAmJiBpc0RlZihob29rID0gaS5ob29rKSAmJiBpc0RlZihpID0gaG9vay5wcmVwYXRjaCkpIHtcbiAgICAgICAgICAgIGkob2xkVm5vZGUsIHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZWxtID0gdm5vZGUuZWxtID0gb2xkVm5vZGUuZWxtO1xuICAgICAgICB2YXIgb2xkQ2ggPSBvbGRWbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgdmFyIGNoID0gdm5vZGUuY2hpbGRyZW47XG4gICAgICAgIGlmIChvbGRWbm9kZSA9PT0gdm5vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh2bm9kZS5kYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMudXBkYXRlLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgIGNicy51cGRhdGVbaV0ob2xkVm5vZGUsIHZub2RlKTtcbiAgICAgICAgICAgIGkgPSB2bm9kZS5kYXRhLmhvb2s7XG4gICAgICAgICAgICBpZiAoaXNEZWYoaSkgJiYgaXNEZWYoaSA9IGkudXBkYXRlKSlcbiAgICAgICAgICAgICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW5kZWYodm5vZGUudGV4dCkpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZihvbGRDaCkgJiYgaXNEZWYoY2gpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9sZENoICE9PSBjaClcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ2hpbGRyZW4oZWxtLCBvbGRDaCwgY2gsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNEZWYob2xkVm5vZGUudGV4dCkpXG4gICAgICAgICAgICAgICAgICAgIGFwaS5zZXRUZXh0Q29udGVudChlbG0sICcnKTtcbiAgICAgICAgICAgICAgICBhZGRWbm9kZXMoZWxtLCBudWxsLCBjaCwgMCwgY2gubGVuZ3RoIC0gMSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzRGVmKG9sZENoKSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZVZub2RlcyhlbG0sIG9sZENoLCAwLCBvbGRDaC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICAgICAgYXBpLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9sZFZub2RlLnRleHQgIT09IHZub2RlLnRleHQpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZihvbGRDaCkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVWbm9kZXMoZWxtLCBvbGRDaCwgMCwgb2xkQ2gubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcGkuc2V0VGV4dENvbnRlbnQoZWxtLCB2bm9kZS50ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWYoaG9vaykgJiYgaXNEZWYoaSA9IGhvb2sucG9zdHBhdGNoKSkge1xuICAgICAgICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgICAgdmFyIGksIGVsbSwgcGFyZW50O1xuICAgICAgICB2YXIgaW5zZXJ0ZWRWbm9kZVF1ZXVlID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMucHJlLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgY2JzLnByZVtpXSgpO1xuICAgICAgICBpZiAoIWlzVm5vZGUob2xkVm5vZGUpKSB7XG4gICAgICAgICAgICBvbGRWbm9kZSA9IGVtcHR5Tm9kZUF0KG9sZFZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2FtZVZub2RlKG9sZFZub2RlLCB2bm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWxtID0gb2xkVm5vZGUuZWxtO1xuICAgICAgICAgICAgcGFyZW50ID0gYXBpLnBhcmVudE5vZGUoZWxtKTtcbiAgICAgICAgICAgIGNyZWF0ZUVsbSh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhcGkuaW5zZXJ0QmVmb3JlKHBhcmVudCwgdm5vZGUuZWxtLCBhcGkubmV4dFNpYmxpbmcoZWxtKSk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlVm5vZGVzKHBhcmVudCwgW29sZFZub2RlXSwgMCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGluc2VydGVkVm5vZGVRdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlW2ldLmRhdGEuaG9vay5pbnNlcnQoaW5zZXJ0ZWRWbm9kZVF1ZXVlW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnBvc3QubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICBjYnMucG9zdFtpXSgpO1xuICAgICAgICByZXR1cm4gdm5vZGU7XG4gICAgfTtcbn1cbmV4cG9ydHMuaW5pdCA9IGluaXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zbmFiYmRvbS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBoXzEgPSByZXF1aXJlKFwiLi9oXCIpO1xuZnVuY3Rpb24gY29weVRvVGh1bmsodm5vZGUsIHRodW5rKSB7XG4gICAgdGh1bmsuZWxtID0gdm5vZGUuZWxtO1xuICAgIHZub2RlLmRhdGEuZm4gPSB0aHVuay5kYXRhLmZuO1xuICAgIHZub2RlLmRhdGEuYXJncyA9IHRodW5rLmRhdGEuYXJncztcbiAgICB0aHVuay5kYXRhID0gdm5vZGUuZGF0YTtcbiAgICB0aHVuay5jaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgIHRodW5rLnRleHQgPSB2bm9kZS50ZXh0O1xuICAgIHRodW5rLmVsbSA9IHZub2RlLmVsbTtcbn1cbmZ1bmN0aW9uIGluaXQodGh1bmspIHtcbiAgICB2YXIgY3VyID0gdGh1bmsuZGF0YTtcbiAgICB2YXIgdm5vZGUgPSBjdXIuZm4uYXBwbHkodW5kZWZpbmVkLCBjdXIuYXJncyk7XG4gICAgY29weVRvVGh1bmsodm5vZGUsIHRodW5rKTtcbn1cbmZ1bmN0aW9uIHByZXBhdGNoKG9sZFZub2RlLCB0aHVuaykge1xuICAgIHZhciBpLCBvbGQgPSBvbGRWbm9kZS5kYXRhLCBjdXIgPSB0aHVuay5kYXRhO1xuICAgIHZhciBvbGRBcmdzID0gb2xkLmFyZ3MsIGFyZ3MgPSBjdXIuYXJncztcbiAgICBpZiAob2xkLmZuICE9PSBjdXIuZm4gfHwgb2xkQXJncy5sZW5ndGggIT09IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNvcHlUb1RodW5rKGN1ci5mbi5hcHBseSh1bmRlZmluZWQsIGFyZ3MpLCB0aHVuayk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9sZEFyZ3NbaV0gIT09IGFyZ3NbaV0pIHtcbiAgICAgICAgICAgIGNvcHlUb1RodW5rKGN1ci5mbi5hcHBseSh1bmRlZmluZWQsIGFyZ3MpLCB0aHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29weVRvVGh1bmsob2xkVm5vZGUsIHRodW5rKTtcbn1cbmV4cG9ydHMudGh1bmsgPSBmdW5jdGlvbiB0aHVuayhzZWwsIGtleSwgZm4sIGFyZ3MpIHtcbiAgICBpZiAoYXJncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFyZ3MgPSBmbjtcbiAgICAgICAgZm4gPSBrZXk7XG4gICAgICAgIGtleSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGhfMS5oKHNlbCwge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgaG9vazogeyBpbml0OiBpbml0LCBwcmVwYXRjaDogcHJlcGF0Y2ggfSxcbiAgICAgICAgZm46IGZuLFxuICAgICAgICBhcmdzOiBhcmdzXG4gICAgfSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy50aHVuaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRodW5rLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZub2RlXzEgPSByZXF1aXJlKFwiLi92bm9kZVwiKTtcbnZhciBodG1sZG9tYXBpXzEgPSByZXF1aXJlKFwiLi9odG1sZG9tYXBpXCIpO1xuZnVuY3Rpb24gdG9WTm9kZShub2RlLCBkb21BcGkpIHtcbiAgICB2YXIgYXBpID0gZG9tQXBpICE9PSB1bmRlZmluZWQgPyBkb21BcGkgOiBodG1sZG9tYXBpXzEuZGVmYXVsdDtcbiAgICB2YXIgdGV4dDtcbiAgICBpZiAoYXBpLmlzRWxlbWVudChub2RlKSkge1xuICAgICAgICB2YXIgaWQgPSBub2RlLmlkID8gJyMnICsgbm9kZS5pZCA6ICcnO1xuICAgICAgICB2YXIgY24gPSBub2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgICAgdmFyIGMgPSBjbiA/ICcuJyArIGNuLnNwbGl0KCcgJykuam9pbignLicpIDogJyc7XG4gICAgICAgIHZhciBzZWwgPSBhcGkudGFnTmFtZShub2RlKS50b0xvd2VyQ2FzZSgpICsgaWQgKyBjO1xuICAgICAgICB2YXIgYXR0cnMgPSB7fTtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gW107XG4gICAgICAgIHZhciBuYW1lXzE7XG4gICAgICAgIHZhciBpID0gdm9pZCAwLCBuID0gdm9pZCAwO1xuICAgICAgICB2YXIgZWxtQXR0cnMgPSBub2RlLmF0dHJpYnV0ZXM7XG4gICAgICAgIHZhciBlbG1DaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgZm9yIChpID0gMCwgbiA9IGVsbUF0dHJzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgbmFtZV8xID0gZWxtQXR0cnNbaV0ubm9kZU5hbWU7XG4gICAgICAgICAgICBpZiAobmFtZV8xICE9PSAnaWQnICYmIG5hbWVfMSAhPT0gJ2NsYXNzJykge1xuICAgICAgICAgICAgICAgIGF0dHJzW25hbWVfMV0gPSBlbG1BdHRyc1tpXS5ub2RlVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMCwgbiA9IGVsbUNoaWxkcmVuLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCh0b1ZOb2RlKGVsbUNoaWxkcmVuW2ldLCBkb21BcGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm5vZGVfMS5kZWZhdWx0KHNlbCwgeyBhdHRyczogYXR0cnMgfSwgY2hpbGRyZW4sIHVuZGVmaW5lZCwgbm9kZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFwaS5pc1RleHQobm9kZSkpIHtcbiAgICAgICAgdGV4dCA9IGFwaS5nZXRUZXh0Q29udGVudChub2RlKTtcbiAgICAgICAgcmV0dXJuIHZub2RlXzEuZGVmYXVsdCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0ZXh0LCBub2RlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXBpLmlzQ29tbWVudChub2RlKSkge1xuICAgICAgICB0ZXh0ID0gYXBpLmdldFRleHRDb250ZW50KG5vZGUpO1xuICAgICAgICByZXR1cm4gdm5vZGVfMS5kZWZhdWx0KCchJywge30sIFtdLCB0ZXh0LCBub2RlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB2bm9kZV8xLmRlZmF1bHQoJycsIHt9LCBbXSwgdW5kZWZpbmVkLCBub2RlKTtcbiAgICB9XG59XG5leHBvcnRzLnRvVk5vZGUgPSB0b1ZOb2RlO1xuZXhwb3J0cy5kZWZhdWx0ID0gdG9WTm9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvdm5vZGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiB2bm9kZShzZWwsIGRhdGEsIGNoaWxkcmVuLCB0ZXh0LCBlbG0pIHtcbiAgICB2YXIga2V5ID0gZGF0YSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZGF0YS5rZXk7XG4gICAgcmV0dXJuIHsgc2VsOiBzZWwsIGRhdGE6IGRhdGEsIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgdGV4dDogdGV4dCwgZWxtOiBlbG0sIGtleToga2V5IH07XG59XG5leHBvcnRzLnZub2RlID0gdm5vZGU7XG5leHBvcnRzLmRlZmF1bHQgPSB2bm9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZub2RlLmpzLm1hcCIsImZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdHMpIHtcblx0b3B0cyA9IG9wdHMgfHwge307XG5cblx0dmFyIHdzLCBudW09MCwgdGltZXI9MSwgJD17fTtcblx0dmFyIG1heCA9IG9wdHMubWF4QXR0ZW1wdHMgfHwgSW5maW5pdHk7XG5cblx0JC5vcGVuID0gZnVuY3Rpb24gKCkge1xuXHRcdHdzID0gbmV3IFdlYlNvY2tldCh1cmwsIG9wdHMucHJvdG9jb2xzIHx8IFtdKTtcblxuXHRcdHdzLm9ubWVzc2FnZSA9IG9wdHMub25tZXNzYWdlIHx8IG5vb3A7XG5cblx0XHR3cy5vbm9wZW4gPSBmdW5jdGlvbiAoZSkge1xuXHRcdFx0KG9wdHMub25vcGVuIHx8IG5vb3ApKGUpO1xuXHRcdFx0bnVtID0gMDtcblx0XHR9O1xuXG5cdFx0d3Mub25jbG9zZSA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRlLmNvZGUgPT09IDFlMyB8fCBlLmNvZGUgPT09IDEwMDEgfHwgZS5jb2RlID09PSAxMDA1IHx8ICQucmVjb25uZWN0KGUpO1xuXHRcdFx0KG9wdHMub25jbG9zZSB8fCBub29wKShlKTtcblx0XHR9O1xuXG5cdFx0d3Mub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHQoZSAmJiBlLmNvZGU9PT0nRUNPTk5SRUZVU0VEJykgPyAkLnJlY29ubmVjdChlKSA6IChvcHRzLm9uZXJyb3IgfHwgbm9vcCkoZSk7XG5cdFx0fTtcblx0fTtcblxuXHQkLnJlY29ubmVjdCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0aWYgKHRpbWVyICYmIG51bSsrIDwgbWF4KSB7XG5cdFx0XHR0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQob3B0cy5vbnJlY29ubmVjdCB8fCBub29wKShlKTtcblx0XHRcdFx0JC5vcGVuKCk7XG5cdFx0XHR9LCBvcHRzLnRpbWVvdXQgfHwgMWUzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0KG9wdHMub25tYXhpbXVtIHx8IG5vb3ApKGUpO1xuXHRcdH1cblx0fTtcblxuXHQkLmpzb24gPSBmdW5jdGlvbiAoeCkge1xuXHRcdHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoeCkpO1xuXHR9O1xuXG5cdCQuc2VuZCA9IGZ1bmN0aW9uICh4KSB7XG5cdFx0d3Muc2VuZCh4KTtcblx0fTtcblxuXHQkLmNsb3NlID0gZnVuY3Rpb24gKHgsIHkpIHtcblx0XHR0aW1lciA9IGNsZWFyVGltZW91dCh0aW1lcik7XG5cdFx0d3MuY2xvc2UoeCB8fCAxZTMsIHkpO1xuXHR9O1xuXG5cdCQub3BlbigpOyAvLyBpbml0XG5cblx0cmV0dXJuICQ7XG59XG4iLCJpbXBvcnQgaCBmcm9tICdzbmFiYmRvbS9oJztcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSAnc25hYmJkb20vdm5vZGUnO1xuXG5pbXBvcnQgeyByZW5kZXJVc2VybmFtZSB9IGZyb20gJy4vdXNlcic7XG5cblxuY29uc3QgdW50aXRsZWQgPSBbXG5cIlxcXCJUbyBtZSwgaG93IHdlJ3ZlIGdvdCBoZXJlIHRvZGF5IGlzIG93aW5nIHRvIFN0b2NrZmlzaCBpbiBhIEJJRyB3YXkuIFRoZXkgcmFsbGllZCBnbG9iYWwgdm9sdW50ZWVycyB0byBjb21lIHRvZ2V0aGVyIGluIHRoZSBvcGVuLXNvdXJjZSBzcGlyaXQgYW5kIGNyZWF0ZSBzdWNoIGEgcG93ZXJmdWwgZW5naW5lIGZvciBGUkVFLiBUaGF0J3MgYSBsb3Qgb2YgZ3JlYXQgbWluZHMgYW5kIGNvbXB1dGluZyBwb3dlciB0aGV5J3ZlIG1hbmFnZWQgdG8gaGFybmVzcy5cIixcblwiVGhlbiB3ZSd2ZSBnb3QgTGljaGVzcyB0byB0aGFuay4gTGljaGVzcyB3YXMgYWxzbyBib3JuIG91dCBvZiB0aGUgc2FtZSBvcGVuLXNvdXJjZSBzcGlyaXQsIGFuZCBpdCB0b28gZHJldyBpbiBncmVhdCBwZW9wbGUgYXMgd2VsbC4gT25jZSBMaWNoZXNzIGluY29ycG9yYXRlZCBTdG9ja2Zpc2ggYXMgaXRzIGJyYWlucywgdGhlIHJlc3QgaXMgaGlzdG9yeS5cIixcblwiTGljaGVzcyBlbmFibGVzIHRoZSBvbmxpbmUsIHJlYWwtdGltZSwgYW5kIGNvbXBldGl0aXZlIGFzcGVjdHMgb2YgZ2FtZS1wbGF5LiBUaGV5IGFsc28gYnJpbmcgdGhlIGVub3Jtb3VzIHBvd2VyIG9mIFN0b2NrZmlzaCB0byB0aGUgbWFzc2VzLCB3aG8gY2FuIG5vdyBiZW5lZml0IGZyb20gaXQgd2l0aG91dCBjb25maWd1cmluZyBhIGxvY2FsIEdVSS4gSSBiZWxpZXZlIHRoaXMgZGV2ZWxvcG1lbnQgdHVybnMgb3V0IHRvIGJlIG9mIGdyZWF0IGNvbnNlcXVlbmNlIGFuZCBzaWduaWZpY2FuY2UuXCIsXG5cIkxhdGVyIG9uLCBkZXZlbG9wZXJzIGNsb3NlIHRvIHRoZSBMaWNoZXNzIHByb2plY3QgZXZlbnR1YWxseSBleHRlbmRlZCBTdG9ja2Zpc2ggaW50byBNdWx0aXZhcmlhbnQtU3RvY2tmaXNoLCBpbiBvcmRlciB0byBzdXBwb3J0IENyYXp5aG91c2UgZXQgYWwuIFRoZSBmYXRoZXIgb2YgRmFpcnktU3RvY2tmaXNoLCBGYWJpYW4sIGlzIGFsc28gb25lIG9mIHRob3NlIGRldnMgKHN0aWxsKSB3b3JraW5nIG9uIHRoYXQgZm9yaywgYW5kIGhlIGxhdGVyIHRvb2sgc2V2ZXJhbCBzdGVwcyBmdXJ0aGVyIGluIHRlcm1zIG9mIHZhcmlhbnQgc3VwcG9ydCBhbmQgZXh0ZW5zaWJpbGl0eS4gVGh1cyBGYWlyeS1TdG9ja2Zpc2ggd2FzIGJvcm4sIHNvIHBvd2VyZnVsIGJlY2F1c2UgaXQgYnVpbGRzIG9uIHRoZSBTdG9ja2Zpc2ggcHJvamVjdC5cIixcblwiVGhlbiBjb21lcyBvdXIgYmVsb3ZlZCBweWNoZXNzLXZhcmlhbnRzLCB3aGljaCBhZ2FpbiB2ZXJ5IHNtYXJ0bHkgaGFybmVzc2VzIHRoZSB1bmRlcmx5aW5nIHN1cGVycG93ZXJzIG9mIHRoZSBiaWcgcHJvamVjdHMuIFNhbWUgb25saW5lLCByZWFsLXRpbWUsIGFuZCBjb21wZXRpdGl2ZSBhc3BlY3RzLiBTYW1lIGNsZWFuIGFuZCBmYW1pbGlhciBMaWNoZXNzIGxvb2sgYW5kIGZlZWwuIFBsdXMgdGhlIHBvd2VyIG9mIFN0b2NrZmlzaCFcXFwiXCIsXG5dXG5cbmV4cG9ydCBmdW5jdGlvbiBhYm91dFZpZXcobW9kZWwpOiBWTm9kZVtdIHtcbiAgICByZW5kZXJVc2VybmFtZShtb2RlbFtcImhvbWVcIl0sIG1vZGVsW1widXNlcm5hbWVcIl0pO1xuXG4gICAgY29uc29sZS5sb2cobW9kZWwpO1xuICAgIHJldHVybiBbaCgnYXNpZGUuc2lkZWJhci1maXJzdCcpLFxuICAgICAgICAgICAgaCgnbWFpbi5tYWluJywgW1xuICAgICAgICAgICAgICAgIGgoJ2Rpdi5hYm91dCcsIFtcbiAgICAgICAgICAgICAgICAgICAgaCgnaW1nLmNlbnRlcicsIHthdHRyczoge3NyYzogJy9zdGF0aWMvZmF2aWNvbi9mYXZpY29uLTk2eDk2LnBuZyd9fSksXG4gICAgICAgICAgICAgICAgICAgIGgoJ2gxJywge2F0dHJzOiB7YWxpZ246ICdjZW50ZXInfX0sICdBYm91dCBweWNoZXNzLXZhcmlhbnRzJyksXG4gICAgICAgICAgICAgICAgICAgIGgoJ3AnLCAncHljaGVzcy12YXJpYW50cyBpcyBhIGZyZWUsIG9wZW4tc291cmNlIGNoZXNzIHNlcnZlciBkZXNpZ25lZCB0byBwbGF5IHNldmVyYWwgY2hlc3MgdmFyaWFudC4nKSxcbiAgICAgICAgICAgICAgICAgICAgaCgncCcsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ3VycmVudGx5IHN1cHBvcnRlZCBnYW1lcyBhcmUgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01ha3J1ayd9fSwgJ01ha3J1aycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWtydWsjQ2FtYm9kaWFuX2NoZXNzJ319LCAnT3VrIENoYXRyYW5nJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NpdHR1eWluJ319LCAnU2l0dHV5aW4nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2hvZ2knfX0sICdTaG9naScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NaW5pc2hvZ2knfX0sICdNaW5pc2hvZ2knKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWGlhbmdxaSd9fSwgJ1hpYW5ncWknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EnLCB7YXR0cnM6IHtocmVmOiAnaHR0cDovL3d3dy5xdWFudHVtZ2FtYml0ei5jb20vYmxvZy9jaGVzcy9jZ2EvYnJvbnN0ZWluLWNoZXNzLXByZS1jaGVzcy1zaHVmZmxlLWNoZXNzJ319LCAnUGxhY2VtZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NyYXp5aG91c2UnfX0sICdDcmF6eWhvdXNlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NlaXJhd2FuX0NoZXNzJ319LCAnU2VpcmF3YW4nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2FwYWJsYW5jYV9DaGVzcyd9fSwgJ0NhcGFibGFuY2EnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR290aGljX2NoZXNzJ319LCAnR290aGljJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYW5kX0NoZXNzJ319LCAnR3JhbmQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9weWNoZXNzLXZhcmlhbnRzLmhlcm9rdWFwcC5jb20vSVJWeE1HNzInfX0sICdTaG91c2UgKFNlaXJhd2FuK0NyYXp5aG91c2UpJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vd3d3LnR3aXRjaC50di92aWRlb3MvNDY2MjUzODE1J319LCAnQ2FwYWhvdXNlIChDYXBhYmxhbmNhK0NyYXp5aG91c2UpJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vcHljaGVzcy12YXJpYW50cy5oZXJva3VhcHAuY29tL2tHT2N3ZUgzJ319LCAnR290aGhvdXNlIChHb3RoaWMrQ3Jhenlob3VzZSknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly95b3V0dS5iZS9JbjlOT0JDcFNfNCd9fSwgJ0dyYW5kaG91c2UgKEdyYW5kK0NyYXp5aG91c2UpJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBhbmQgc3RhbmRhcmQgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NoZXNzJ319LCAnQ2hlc3MuJyksXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBoKCdwJywgWydBZGRpdGlvbmFsbHkgeW91IGNhbiBjaGVjayBDaGVzczk2MCBvcHRpb24gaW4gZm9yIFN0YW5kYXJkLCBDcmF6eWhvdXNlLCBDYXBhYmxhbmNhIGFuZCBDYXBhaG91c2UgdG8gc3RhcnQgZ2FtZXMgZnJvbSByYW5kb20gcG9zaXRpb25zIHdpdGggJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NoZXNzOTYwI0Nhc3RsaW5nX3J1bGVzJ319LCAnQ2hlc3M5NjAgY2FzdGxpbmcgcnVsZXMuJylcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBoKCdwJywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvciBtb3ZlIGdlbmVyYXRpb24sIHZhbGlkYXRpb24sIGFuYWx5c2lzIGFuZCBlbmdpbmUgcGxheSBpdCB1c2VzICcsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9nYnRhbWkvRmFpcnktU3RvY2tmaXNoJ319LCAnRmFpcnktU3RvY2tmaXNoJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZ2l0aHViLmNvbS94cWJhc2UvZWxlZXllJ319LCAnRWxlcGhhbnRFeWUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9naXRodWIuY29tL3dhbGtlcjgwODgvbW9vbmZpc2gnfX0sICdtb29uZmlzaCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2dpdGh1Yi5jb20vZ2J0YW1pL2ZhaXJ5ZmlzaG5ldCd9fSwgJ2ZhaXJ5ZmlzaG5ldCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYW5kIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnYScsIHthdHRyczoge2hyZWY6ICdodHRwczovL2dpdGh1Yi5jb20vZ2J0YW1pL2xpY2hlc3MtYm90LXZhcmlhbnRzJ319LCAnbGljaGVzcy1ib3QtdmFyaWFudHMuJyksXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBoKCdwJywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgJ09uIGNsaWVudCBzaWRlIGl0IGlzIGJhc2VkIG9uICcsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9nYnRhbWkvY2hlc3Nncm91bmR4J319LCAnY2hlc3Nncm91bmR4LicpLFxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgaCgncCcsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTb3VyY2UgY29kZSBvZiBzZXJ2ZXIgaXMgYXZhaWxhYmxlIGF0ICcsXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdhJywge2F0dHJzOiB7aHJlZjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9nYnRhbWkvcHljaGVzcy12YXJpYW50cyd9fSwgJ0dpdEh1Yi4nKSxcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIGgoJ2hyJyksXG4gICAgICAgICAgICAgICAgICAgIGgoJ3AnLCB1bnRpdGxlZC5tYXAoKHBhcmFncmFwaCkgPT4ge3JldHVybiBoKCdwJywgcGFyYWdyYXBoKX0pKSxcbiAgICAgICAgICAgICAgICAgICAgaCgncCcsICdVbnRpdGxlZF9FbnRpdHknKSxcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBoKCdhc2lkZS5zaWRlYmFyLXNlY29uZCcpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIF07XG59IiwiaW1wb3J0IHsgaCB9IGZyb20gXCJzbmFiYmRvbVwiO1xyXG5pbXBvcnQgeyBWTm9kZSB9IGZyb20gJ3NuYWJiZG9tL3Zub2RlJztcclxuXHJcbmltcG9ydCBBbmFseXNpc0NvbnRyb2xsZXIgZnJvbSAnLi9hbmFseXNpc0N0cmwnO1xyXG5pbXBvcnQgeyBWQVJJQU5UUyB9IGZyb20gJy4vY2hlc3MnO1xyXG5pbXBvcnQgeyB0aW1lYWdvLCByZW5kZXJUaW1lYWdvIH0gZnJvbSAnLi9jbG9jayc7XHJcblxyXG5cclxuZnVuY3Rpb24gcnVuR3JvdW5kKHZub2RlOiBWTm9kZSwgbW9kZWwpIHtcclxuICAgIGNvbnN0IGVsID0gdm5vZGUuZWxtIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29uc3QgY3RybCA9IG5ldyBBbmFseXNpc0NvbnRyb2xsZXIoZWwsIG1vZGVsKTtcclxuICAgIGNvbnN0IGNnID0gY3RybC5jaGVzc2dyb3VuZDtcclxuICAgIHdpbmRvd1snY2cnXSA9IGNnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYW5hbHlzaXNWaWV3KG1vZGVsKTogVk5vZGVbXSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImFuYWx5c2lzVmlldyBtb2RlbD1cIiwgbW9kZWwpO1xyXG4gICAgY29uc3QgZGF0YUljb24gPSBWQVJJQU5UU1ttb2RlbFtcInZhcmlhbnRcIl1dLmljb247XHJcbiAgICByZW5kZXJUaW1lYWdvKCk7XHJcbiAgICByZXR1cm4gW2goJ2FzaWRlLnNpZGViYXItZmlyc3QnLCBbXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYuZ2FtZS1pbmZvJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi5pbmZvMCcsIHthdHRyczoge1wiZGF0YS1pY29uXCI6IGRhdGFJY29ufSwgY2xhc3M6IHtcImljb25cIjogdHJ1ZX19LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi5pbmZvMScsIHthdHRyczoge1wiZGF0YS1pY29uXCI6IChtb2RlbFtcImNoZXNzOTYwXCJdID09PSAnVHJ1ZScpID8gXCJWXCIgOiBcIlwifSwgY2xhc3M6IHtcImljb25cIjogdHJ1ZX19KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnZGl2LmluZm8yJywgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnZGl2LnRjJywgbW9kZWxbXCJiYXNlXCJdICsgXCIrXCIgKyBtb2RlbFtcImluY1wiXSArIFwiIOKAoiBDYXN1YWwg4oCiIFwiICsgbW9kZWxbXCJ2YXJpYW50XCJdKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihtb2RlbFtcInN0YXR1c1wiXSkgPj0gMCA/IGgoJ2luZm8tZGF0ZScsIHthdHRyczoge3RpbWVzdGFtcDogbW9kZWxbXCJkYXRlXCJdfX0sIHRpbWVhZ28obW9kZWxbXCJkYXRlXCJdKSkgOiBcIlBsYXlpbmcgcmlnaHQgbm93XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi5wbGF5ZXItZGF0YScsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnaS1zaWRlLm9ubGluZScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24td2hpdGVcIjogdHJ1ZX0gfSApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdwbGF5ZXInLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdhLnVzZXItbGluaycsIHthdHRyczoge2hyZWY6ICcvQC8nICsgbW9kZWxbXCJ3cGxheWVyXCJdfX0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdwbGF5ZXItdGl0bGUnLCBcIiBcIiArIG1vZGVsW1wid3RpdGxlXCJdICsgXCIgXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsW1wid3BsYXllclwiXSArIFwiICgxNTAwPylcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYucGxheWVyLWRhdGEnLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2ktc2lkZS5vbmxpbmUnLCB7Y2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLWJsYWNrXCI6IHRydWV9IH0gKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgncGxheWVyJywgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnYS51c2VyLWxpbmsnLCB7YXR0cnM6IHtocmVmOiAnL0AvJyArIG1vZGVsW1wiYnBsYXllclwiXX19LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgncGxheWVyLXRpdGxlJywgXCIgXCIgKyBtb2RlbFtcImJ0aXRsZVwiXSArIFwiIFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbFtcImJwbGF5ZXJcIl0gKyBcIiAoMTUwMD8pXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgIGgoJ2Rpdi5yb3VuZGNoYXQjcm91bmRjaGF0JyksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCdtYWluLmFuYWx5c2lzJywgW1xyXG4gICAgICAgICAgICAgICAgaCgnc2VsZWN0aW9uLicgKyBWQVJJQU5UU1ttb2RlbFtcInZhcmlhbnRcIl1dLmJvYXJkICsgJy4nICsgVkFSSUFOVFNbbW9kZWxbXCJ2YXJpYW50XCJdXS5waWVjZXMsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYuY2ctd3JhcC4nICsgVkFSSUFOVFNbbW9kZWxbXCJ2YXJpYW50XCJdXS5jZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBob29rOiB7IGluc2VydDogKHZub2RlKSA9PiBydW5Hcm91bmQodm5vZGUsIG1vZGVsKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgIGgoJ2RpdicsIHthdHRyczoge2lkOiBcImdhdWdlXCJ9fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi5ibGFjaycsIHtwcm9wczoge3N0eWxlOiBcImhlaWdodDogNTAlO1wifX0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi50aWNrJywge3Byb3BzOiB7c3R5bGU6IFwiaGVpZ2h0OiAxMi41JTtcIn19KSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYudGljaycsIHtwcm9wczoge3N0eWxlOiBcImhlaWdodDogMjUlO1wifX0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi50aWNrJywge3Byb3BzOiB7c3R5bGU6IFwiaGVpZ2h0OiAzNy41JTtcIn19KSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYudGljayB6ZXJvJywge3Byb3BzOiB7c3R5bGU6IFwiaGVpZ2h0OiA1MCU7XCJ9fSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2LnRpY2snLCB7cHJvcHM6IHtzdHlsZTogXCJoZWlnaHQ6IDYyLjUlO1wifX0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi50aWNrJywge3Byb3BzOiB7c3R5bGU6IFwiaGVpZ2h0OiA3NSU7XCJ9fSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2LnRpY2snLCB7cHJvcHM6IHtzdHlsZTogXCJoZWlnaHQ6IDg3LjUlO1wifX0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCdhc2lkZS5zaWRlYmFyLXNlY29uZCcsIFtcclxuICAgICAgICAgICAgICAgIGgoJ2RpdiNwb2NrZXQtd3JhcHBlcicsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYuJyArIFZBUklBTlRTW21vZGVsW1widmFyaWFudFwiXV0ucGllY2VzICsgJy4nICsgbW9kZWxbXCJ2YXJpYW50XCJdLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi5jZy13cmFwLnBvY2tldCcsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNwb2NrZXQwJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYucm91bmQtZGF0YScsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYjYm9hcmQtc2V0dGluZ3MnKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYjcHYnKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYjbW92ZWxpc3QtYmxvY2snLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNtb3ZlbGlzdCcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdkaXYjcmVzdWx0JyksXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2I21vdmUtY29udHJvbHMnKSxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2I3BvY2tldC13cmFwcGVyJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi4nICsgVkFSSUFOVFNbbW9kZWxbXCJ2YXJpYW50XCJdXS5waWVjZXMgKyAnLicgKyBtb2RlbFtcInZhcmlhbnRcIl0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnZGl2LmNnLXdyYXAucG9ja2V0JywgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnZGl2I3BvY2tldDEnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIGgoJ3VuZGVyLWxlZnQnKSxcclxuICAgICAgICAgICAgaCgndW5kZXItYm9hcmQnLCBbXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYjcGduJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNjaGFydCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNmZW4nKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYjY29weWZlbicpLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNwZ250ZXh0JyksXHJcbiAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgIF07XHJcbn1cclxuIiwiaW1wb3J0IFNvY2tldHRlIGZyb20gJ3NvY2tldHRlJztcclxuXHJcbmltcG9ydCB7IGluaXQgfSBmcm9tICdzbmFiYmRvbSc7XHJcbmltcG9ydCB7IGggfSBmcm9tICdzbmFiYmRvbS9oJztcclxuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xyXG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xyXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL3Byb3BzJztcclxuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcclxuXHJcbmltcG9ydCB7IGtleTJwb3MsIHBvczJrZXkgfSBmcm9tICdjaGVzc2dyb3VuZHgvdXRpbCc7XHJcbmltcG9ydCB7IENoZXNzZ3JvdW5kIH0gZnJvbSAnY2hlc3Nncm91bmR4JztcclxuaW1wb3J0IHsgQXBpIH0gZnJvbSAnY2hlc3Nncm91bmR4L2FwaSc7XHJcbmltcG9ydCB7IENvbG9yLCBEZXN0cywgUGllY2VzRGlmZiwgUm9sZSwgS2V5LCBQb3MsIFBpZWNlIH0gZnJvbSAnY2hlc3Nncm91bmR4L3R5cGVzJztcclxuaW1wb3J0IHsgRHJhd1NoYXBlIH0gZnJvbSAnY2hlc3Nncm91bmR4L2RyYXcnO1xyXG5cclxuaW1wb3J0IG1ha2VHYXRpbmcgZnJvbSAnLi9nYXRpbmcnO1xyXG5pbXBvcnQgbWFrZVByb21vdGlvbiBmcm9tICcuL3Byb21vdGlvbic7XHJcbmltcG9ydCB7IGRyb3BJc1ZhbGlkLCBwb2NrZXRWaWV3LCB1cGRhdGVQb2NrZXRzIH0gZnJvbSAnLi9wb2NrZXQnO1xyXG5pbXBvcnQgeyBzb3VuZCB9IGZyb20gJy4vc291bmQnO1xyXG5pbXBvcnQgeyB2YXJpYW50cywgaGFzRXAsIG5lZWRQb2NrZXRzLCByb2xlVG9TYW4sIHVjaTJ1c2ksIHVzaTJ1Y2ksIGdyYW5kMnplcm8sIHplcm8yZ3JhbmQsIFZBUklBTlRTLCBzYW5Ub1JvbGUgfSBmcm9tICcuL2NoZXNzJztcclxuaW1wb3J0IHsgcmVuZGVyVXNlcm5hbWUgfSBmcm9tICcuL3VzZXInO1xyXG5pbXBvcnQgeyBjaGF0TWVzc2FnZSwgY2hhdFZpZXcgfSBmcm9tICcuL2NoYXQnO1xyXG5pbXBvcnQgeyBzZXR0aW5nc1ZpZXcgfSBmcm9tICcuL3NldHRpbmdzJztcclxuaW1wb3J0IHsgbW92ZWxpc3RWaWV3LCB1cGRhdGVNb3ZlbGlzdCwgc2VsZWN0TW92ZSB9IGZyb20gJy4vbW92ZWxpc3QnO1xyXG5pbXBvcnQgcmVzaXplSGFuZGxlIGZyb20gJy4vcmVzaXplJztcclxuaW1wb3J0IHsgcmVzdWx0IH0gZnJvbSAnLi9wcm9maWxlJztcclxuaW1wb3J0IHsgY29weVRleHRUb0NsaXBib2FyZCB9IGZyb20gJy4vY2xpcGJvYXJkJztcclxuaW1wb3J0IHsgYW5hbHlzaXNDaGFydCB9IGZyb20gJy4vY2hhcnQnO1xyXG5cclxuY29uc3QgcGF0Y2ggPSBpbml0KFtrbGFzcywgYXR0cmlidXRlcywgcHJvcGVydGllcywgbGlzdGVuZXJzXSk7XHJcblxyXG5cclxuZnVuY3Rpb24gZG93bmxvYWQoZmlsZW5hbWUsIHRleHQpIHtcclxuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwnICsgZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpKTtcclxuICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlbmFtZSk7XHJcblxyXG4gIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xyXG5cclxuICBlbGVtZW50LmNsaWNrKCk7XHJcblxyXG4gIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmFseXNpc0NvbnRyb2xsZXIge1xyXG4gICAgbW9kZWw7XHJcbiAgICBzb2NrO1xyXG4gICAgY2hlc3Nncm91bmQ6IEFwaTtcclxuICAgIGZ1bGxmZW46IHN0cmluZztcclxuICAgIHdwbGF5ZXI6IHN0cmluZztcclxuICAgIGJwbGF5ZXI6IHN0cmluZztcclxuICAgIGJhc2U6IG51bWJlcjtcclxuICAgIGluYzogbnVtYmVyO1xyXG4gICAgbXljb2xvcjogQ29sb3I7XHJcbiAgICBvcHBjb2xvcjogQ29sb3I7XHJcbiAgICB0dXJuQ29sb3I6IENvbG9yO1xyXG4gICAgZ2FtZUlkOiBzdHJpbmc7XHJcbiAgICB2YXJpYW50OiBzdHJpbmc7XHJcbiAgICBwb2NrZXRzOiBhbnk7XHJcbiAgICB2cG9ja2V0MDogYW55O1xyXG4gICAgdnBvY2tldDE6IGFueTtcclxuICAgIHZwbGF5ZXIwOiBhbnk7XHJcbiAgICB2cGxheWVyMTogYW55O1xyXG4gICAgdmZlbjogYW55O1xyXG4gICAgdnB2OiBhbnk7XHJcbiAgICBnYW1lQ29udHJvbHM6IGFueTtcclxuICAgIG1vdmVDb250cm9sczogYW55O1xyXG4gICAgZ2F0aW5nOiBhbnk7XHJcbiAgICBwcm9tb3Rpb246IGFueTtcclxuICAgIGRlc3RzOiBEZXN0cztcclxuICAgIHByb21vdGlvbnM6IHN0cmluZ1tdO1xyXG4gICAgbGFzdG1vdmU6IEtleVtdO1xyXG4gICAgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBmbGlwOiBib29sZWFuO1xyXG4gICAgc3BlY3RhdG9yOiBib29sZWFuO1xyXG4gICAgc2V0dGluZ3M6IGJvb2xlYW47XHJcbiAgICBzdGF0dXM6IG51bWJlcjtcclxuICAgIHN0ZXBzO1xyXG4gICAgcGduOiBzdHJpbmc7XHJcbiAgICB1Y2lfdXNpOiBzdHJpbmc7XHJcbiAgICBwbHk6IG51bWJlcjtcclxuICAgIHBsYXllcnM6IHN0cmluZ1tdO1xyXG4gICAgdGl0bGVzOiBzdHJpbmdbXTtcclxuICAgIENTU2luZGV4ZXNCOiBudW1iZXJbXTtcclxuICAgIENTU2luZGV4ZXNQOiBudW1iZXJbXTtcclxuICAgIGNsaWNrRHJvcDogUGllY2UgfCB1bmRlZmluZWQ7XHJcbiAgICBhbmFseXNpc0NoYXJ0OiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoZWwsIG1vZGVsKSB7XHJcbiAgICAgICAgY29uc3Qgb25PcGVuID0gKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImN0cmwub25PcGVuKClcIiwgZXZ0KTtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImdhbWVfdXNlcl9jb25uZWN0ZWRcIiwgdXNlcm5hbWU6IHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XHJcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcclxuICAgICAgICAgICAgb25vcGVuOiBlID0+IG9uT3BlbihlKSxcclxuICAgICAgICAgICAgb25tZXNzYWdlOiBlID0+IHRoaXMub25NZXNzYWdlKGUpLFxyXG4gICAgICAgICAgICBvbnJlY29ubmVjdDogZSA9PiBjb25zb2xlLmxvZygnUmVjb25uZWN0aW5nIGluIHJvdW5kLi4uJywgZSksXHJcbiAgICAgICAgICAgIG9ubWF4aW11bTogZSA9PiBjb25zb2xlLmxvZygnU3RvcCBBdHRlbXB0aW5nIScsIGUpLFxyXG4gICAgICAgICAgICBvbmNsb3NlOiBlID0+IGNvbnNvbGUubG9nKCdDbG9zZWQhJywgZSksXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGUgPT4gY29uc29sZS5sb2coJ0Vycm9yOicsIGUpLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnNvY2sgPSBuZXcgU29ja2V0dGUoXCJ3czovL1wiICsgbG9jYXRpb24uaG9zdCArIFwiL3dzclwiLCBvcHRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2goZXJyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc29jayA9IG5ldyBTb2NrZXR0ZShcIndzczovL1wiICsgbG9jYXRpb24uaG9zdCArIFwiL3dzclwiLCBvcHRzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcclxuICAgICAgICB0aGlzLnZhcmlhbnQgPSBtb2RlbFtcInZhcmlhbnRcIl0gYXMgc3RyaW5nO1xyXG4gICAgICAgIHRoaXMuZnVsbGZlbiA9IG1vZGVsW1wiZmVuXCJdIGFzIHN0cmluZztcclxuICAgICAgICB0aGlzLndwbGF5ZXIgPSBtb2RlbFtcIndwbGF5ZXJcIl0gYXMgc3RyaW5nO1xyXG4gICAgICAgIHRoaXMuYnBsYXllciA9IG1vZGVsW1wiYnBsYXllclwiXSBhcyBzdHJpbmc7XHJcbiAgICAgICAgdGhpcy5iYXNlID0gbW9kZWxbXCJiYXNlXCJdIGFzIG51bWJlcjtcclxuICAgICAgICB0aGlzLmluYyA9IG1vZGVsW1wiaW5jXCJdIGFzIG51bWJlcjtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IG1vZGVsW1wic3RhdHVzXCJdIGFzIG51bWJlcjtcclxuICAgICAgICB0aGlzLnN0ZXBzID0gW107XHJcbiAgICAgICAgdGhpcy5wZ24gPSBcIlwiO1xyXG4gICAgICAgIHRoaXMucGx5ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5mbGlwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5DU1NpbmRleGVzQiA9IHZhcmlhbnRzLm1hcCgodmFyaWFudCkgPT4gbG9jYWxTdG9yYWdlW3ZhcmlhbnQgKyBcIl9ib2FyZFwiXSA9PT0gdW5kZWZpbmVkID8gMCA6IE51bWJlcihsb2NhbFN0b3JhZ2VbdmFyaWFudCArIFwiX2JvYXJkXCJdKSk7XHJcbiAgICAgICAgdGhpcy5DU1NpbmRleGVzUCA9IHZhcmlhbnRzLm1hcCgodmFyaWFudCkgPT4gbG9jYWxTdG9yYWdlW3ZhcmlhbnQgKyBcIl9waWVjZXNcIl0gPT09IHVuZGVmaW5lZCA/IDAgOiBOdW1iZXIobG9jYWxTdG9yYWdlW3ZhcmlhbnQgKyBcIl9waWVjZXNcIl0pKTtcclxuXHJcbiAgICAgICAgdGhpcy5zcGVjdGF0b3IgPSB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0gIT09IHRoaXMud3BsYXllciAmJiB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0gIT09IHRoaXMuYnBsYXllcjtcclxuXHJcbiAgICAgICAgLy8gb3JpZW50YXRpb24gPSB0aGlzLm15Y29sb3JcclxuICAgICAgICBpZiAodGhpcy5zcGVjdGF0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5teWNvbG9yID0gdGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpID8gJ2JsYWNrJyA6ICd3aGl0ZSc7XHJcbiAgICAgICAgICAgIHRoaXMub3BwY29sb3IgPSB0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm15Y29sb3IgPSB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0gPT09IHRoaXMud3BsYXllciA/ICd3aGl0ZScgOiAnYmxhY2snO1xyXG4gICAgICAgICAgICB0aGlzLm9wcGNvbG9yID0gdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdID09PSB0aGlzLndwbGF5ZXIgPyAnYmxhY2snIDogJ3doaXRlJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBsYXllcnNbMF0gaXMgdG9wIHBsYXllciwgcGxheWVyc1sxXSBpcyBib3R0b20gcGxheWVyXHJcbiAgICAgICAgdGhpcy5wbGF5ZXJzID0gW1xyXG4gICAgICAgICAgICB0aGlzLm15Y29sb3IgPT09IFwid2hpdGVcIiA/IHRoaXMuYnBsYXllciA6IHRoaXMud3BsYXllcixcclxuICAgICAgICAgICAgdGhpcy5teWNvbG9yID09PSBcIndoaXRlXCIgPyB0aGlzLndwbGF5ZXIgOiB0aGlzLmJwbGF5ZXJcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMudGl0bGVzID0gW1xyXG4gICAgICAgICAgICB0aGlzLm15Y29sb3IgPT09IFwid2hpdGVcIiA/IHRoaXMubW9kZWxbJ2J0aXRsZSddIDogdGhpcy5tb2RlbFsnd3RpdGxlJ10sXHJcbiAgICAgICAgICAgIHRoaXMubXljb2xvciA9PT0gXCJ3aGl0ZVwiID8gdGhpcy5tb2RlbFsnd3RpdGxlJ10gOiB0aGlzLm1vZGVsWydidGl0bGUnXVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMucmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBjb25zdCBwYXJ0cyA9IHRoaXMuZnVsbGZlbi5zcGxpdChcIiBcIik7XHJcblxyXG4gICAgICAgIGNvbnN0IGZlbl9wbGFjZW1lbnQgPSBwYXJ0c1swXTtcclxuICAgICAgICB0aGlzLnR1cm5Db2xvciA9IHBhcnRzWzFdID09PSBcIndcIiA/IFwid2hpdGVcIiA6IFwiYmxhY2tcIjtcclxuXHJcbiAgICAgICAgdGhpcy5zdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgJ2Zlbic6IGZlbl9wbGFjZW1lbnQsXHJcbiAgICAgICAgICAgICdtb3ZlJzogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAnY2hlY2snOiBmYWxzZSxcclxuICAgICAgICAgICAgJ3R1cm5Db2xvcic6IHRoaXMudHVybkNvbG9yLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGVzc2dyb3VuZCA9IENoZXNzZ3JvdW5kKGVsLCB7XHJcbiAgICAgICAgICAgIGZlbjogZmVuX3BsYWNlbWVudCxcclxuICAgICAgICAgICAgZ2VvbWV0cnk6IFZBUklBTlRTW3RoaXMudmFyaWFudF0uZ2VvbSxcclxuICAgICAgICAgICAgb3JpZW50YXRpb246IHRoaXMubXljb2xvcixcclxuICAgICAgICAgICAgdHVybkNvbG9yOiB0aGlzLnR1cm5Db2xvcixcclxuICAgICAgICAgICAgYW5pbWF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBldmVudHM6IHtcclxuICAgICAgICAgICAgICAgIGluc2VydChlbGVtZW50cykge3Jlc2l6ZUhhbmRsZShlbGVtZW50cyk7fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNwZWN0YXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnNldCh7XHJcbiAgICAgICAgICAgICAgICAvL3ZpZXdPbmx5OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW92ZTogdGhpcy5vbk1vdmUoKSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoe1xyXG4gICAgICAgICAgICAgICAgbW92YWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGZyZWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm15Y29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0Rlc3RzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlcjogdGhpcy5vblVzZXJNb3ZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5ld1BpZWNlOiB0aGlzLm9uVXNlckRyb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vdmU6IHRoaXMub25Nb3ZlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcE5ld1BpZWNlOiB0aGlzLm9uRHJvcCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdDogdGhpcy5vblNlbGVjdCh0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlLnNlbGVjdGVkKSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nYXRpbmcgPSBtYWtlR2F0aW5nKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucHJvbW90aW9uID0gbWFrZVByb21vdGlvbih0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBwb2NrZXRzXHJcbiAgICAgICAgaWYgKG5lZWRQb2NrZXRzKHRoaXMudmFyaWFudCkpIHtcclxuICAgICAgICAgICAgY29uc3QgcG9ja2V0MCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb2NrZXQwJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvY2tldDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9ja2V0MScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICB1cGRhdGVQb2NrZXRzKHRoaXMsIHBvY2tldDAsIHBvY2tldDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhcnQnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblxyXG4gICAgICAgIHBhdGNoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib2FyZC1zZXR0aW5ncycpIGFzIEhUTUxFbGVtZW50LCBzZXR0aW5nc1ZpZXcodGhpcykpO1xyXG5cclxuICAgICAgICBwYXRjaChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZWxpc3QnKSBhcyBIVE1MRWxlbWVudCwgbW92ZWxpc3RWaWV3KHRoaXMpKTtcclxuXHJcbiAgICAgICAgcGF0Y2goZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JvdW5kY2hhdCcpIGFzIEhUTUxFbGVtZW50LCBjaGF0Vmlldyh0aGlzLCBcInJvdW5kY2hhdFwiKSk7XHJcblxyXG4gICAgICAgIHRoaXMudnB2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B2JykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0R3JvdW5kID0gKCkgPT4gdGhpcy5jaGVzc2dyb3VuZDtcclxuICAgIGdldERlc3RzID0gKCkgPT4gdGhpcy5kZXN0cztcclxuXHJcbiAgICBwcml2YXRlIGdhbWVPdmVyID0gKCkgPT4ge1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0JykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgcGF0Y2goY29udGFpbmVyLCBoKCdkaXYjcmVzdWx0JywgcmVzdWx0KHRoaXMuc3RhdHVzLCB0aGlzLnJlc3VsdCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlcXVlc3RBbmFseXNpcyA9ICgpID0+IHtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXF1ZXN0LWFuYWx5c2lzJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhcnQnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJhbmFseXNpc1wiLCB1c2VybmFtZTogdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdLCBnYW1lSWQ6IHRoaXMubW9kZWxbXCJnYW1lSWRcIl0gfSk7XHJcbiAgICAgICAgdGhpcy5hbmFseXNpc0NoYXJ0ID0gYW5hbHlzaXNDaGFydCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrU3RhdHVzID0gKG1zZykgPT4ge1xyXG4gICAgICAgIGlmIChtc2cuZ2FtZUlkICE9PSB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG1zZy5zdGF0dXMgPj0gMCAmJiB0aGlzLnJlc3VsdCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdCA9IG1zZy5yZXN1bHQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gbXNnLnN0YXR1cztcclxuICAgICAgICAgICAgdGhpcy5nYW1lT3ZlcigpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wZ24gPSBtc2cucGduO1xyXG4gICAgICAgICAgICB0aGlzLnVjaV91c2kgPSBtc2cudWNpX3VzaTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29weWZlbicpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ2RpdicsIFtcclxuICAgICAgICAgICAgICAgIGgoJ2EuaS1wZ24nLCB7IG9uOiB7IGNsaWNrOiAoKSA9PiBkb3dubG9hZChcInBhY2hlc3MtdmFyaWFudHNfXCIgKyB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdLCB0aGlzLnBnbikgfSB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnaScsIHtwcm9wczoge3RpdGxlOiAnRG93bmxvYWQgZ2FtZSB0byBQR04gZmlsZSd9LCBjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tZG93bmxvYWRcIjogdHJ1ZX0gfSwgJyBEb3dubG9hZCBQR04nKV0pLFxyXG4gICAgICAgICAgICAgICAgaCgnYS5pLXBnbicsIHsgb246IHsgY2xpY2s6ICgpID0+IGNvcHlUZXh0VG9DbGlwYm9hcmQodGhpcy51Y2lfdXNpKSB9IH0sIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdpJywge3Byb3BzOiB7dGl0bGU6ICdDb3B5IFVTSS9VQ0kgdG8gY2xpcGJvYXJkJ30sIGNsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1jbGlwYm9hcmRcIjogdHJ1ZX0gfSwgJyBDb3B5IFVDSS9VU0knKV0pLFxyXG4gICAgICAgICAgICAgICAgaCgnYnV0dG9uI3JlcXVlc3QtYW5hbHlzaXMnLCB7IG9uOiB7IGNsaWNrOiAoKSA9PiB0aGlzLnJlcXVlc3RBbmFseXNpcygpIH0gfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2knLCB7cHJvcHM6IHt0aXRsZTogJ1JlcXVlc3QgQ29tcHV0ZXIgQW5hbHlzaXMnfSwgY2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLW1pY3Jvc2NvcGVcIjogdHJ1ZX0gfSwgJyBSZXF1ZXN0IEFuYWx5c2lzJyldKSxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlbicpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICB0aGlzLnZmZW4gPSBwYXRjaChjb250YWluZXIsIGgoJ2RpdiNmZW4nLCB0aGlzLmZ1bGxmZW4pKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwZ250ZXh0JykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgndGV4dGFyZWEnLCB7IGF0dHJzOiB7IHJvd3M6IDEzLCByZWFkb25seTogdHJ1ZSwgc3BlbGxjaGVjazogZmFsc2V9IH0sIG1zZy5wZ24pKTtcclxuXHJcbiAgICAgICAgICAgIHNlbGVjdE1vdmUodGhpcywgdGhpcy5wbHkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnQm9hcmQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgaWYgKG1zZy5nYW1lSWQgIT09IHRoaXMubW9kZWxbXCJnYW1lSWRcIl0pIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJnb3QgYm9hcmQgbXNnOlwiLCBtc2cpO1xyXG4gICAgICAgIHRoaXMucGx5ID0gbXNnLnBseVxyXG4gICAgICAgIHRoaXMuZnVsbGZlbiA9IG1zZy5mZW47XHJcbiAgICAgICAgdGhpcy5kZXN0cyA9IG1zZy5kZXN0cztcclxuICAgICAgICAvLyBsaXN0IG9mIGxlZ2FsIHByb21vdGlvbiBtb3Zlc1xyXG4gICAgICAgIHRoaXMucHJvbW90aW9ucyA9IG1zZy5wcm9tbztcclxuXHJcbiAgICAgICAgY29uc3QgcGFydHMgPSBtc2cuZmVuLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICB0aGlzLnR1cm5Db2xvciA9IHBhcnRzWzFdID09PSBcIndcIiA/IFwid2hpdGVcIiA6IFwiYmxhY2tcIjtcclxuXHJcbiAgICAgICAgaWYgKG1zZy5zdGVwcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcHMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3ZlbGlzdCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ2RpdiNtb3ZlbGlzdCcpKTtcclxuXHJcbiAgICAgICAgICAgIG1zZy5zdGVwcy5mb3JFYWNoKChzdGVwKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcy5wdXNoKHN0ZXApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHVwZGF0ZU1vdmVsaXN0KHRoaXMsIDEsIHRoaXMuc3RlcHMubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAobXNnLnBseSA9PT0gdGhpcy5zdGVwcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2Zlbic6IG1zZy5mZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgJ21vdmUnOiBtc2cubGFzdE1vdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NoZWNrJzogbXNnLmNoZWNrLFxyXG4gICAgICAgICAgICAgICAgICAgICd0dXJuQ29sb3InOiB0aGlzLnR1cm5Db2xvcixcclxuICAgICAgICAgICAgICAgICAgICAnc2FuJzogbXNnLnN0ZXBzWzBdLnNhbixcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcy5wdXNoKHN0ZXApO1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlTW92ZWxpc3QodGhpcywgdGhpcy5zdGVwcy5sZW5ndGggLSAxLCB0aGlzLnN0ZXBzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBsYXN0TW92ZSA9IG1zZy5sYXN0TW92ZTtcclxuICAgICAgICBpZiAobGFzdE1vdmUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkge1xyXG4gICAgICAgICAgICAgICAgbGFzdE1vdmUgPSB1c2kydWNpKGxhc3RNb3ZlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhcmlhbnQuc3RhcnRzV2l0aCgnZ3JhbmQnKSkge1xyXG4gICAgICAgICAgICAgICAgbGFzdE1vdmUgPSBncmFuZDJ6ZXJvKGxhc3RNb3ZlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsYXN0TW92ZSA9IFtsYXN0TW92ZS5zbGljZSgwLDIpLCBsYXN0TW92ZS5zbGljZSgyLDQpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZHJvcCBsYXN0TW92ZSBjYXVzaW5nIHNjcm9sbGJhciBmbGlja2VyLFxyXG4gICAgICAgIC8vIHNvIHdlIHJlbW92ZSBmcm9tIHBhcnQgdG8gYXZvaWQgdGhhdFxyXG4gICAgICAgIGlmIChsYXN0TW92ZSAhPT0gbnVsbCAmJiBsYXN0TW92ZVswXVsxXSA9PT0gJ0AnKSBsYXN0TW92ZSA9IFtsYXN0TW92ZVsxXV07XHJcbiAgICAgICAgLy8gc2F2ZSBjYXB0dXJlIHN0YXRlIGJlZm9yZSB1cGRhdGluZyBjaGVzc2dyb3VuZFxyXG4gICAgICAgIGNvbnN0IGNhcHR1cmUgPSBsYXN0TW92ZSAhPT0gbnVsbCAmJiB0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlLnBpZWNlc1tsYXN0TW92ZVsxXV1cclxuXHJcbiAgICAgICAgaWYgKGxhc3RNb3ZlICE9PSBudWxsICYmICh0aGlzLnR1cm5Db2xvciA9PT0gdGhpcy5teWNvbG9yIHx8IHRoaXMuc3BlY3RhdG9yKSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpKSB7XHJcbiAgICAgICAgICAgICAgICBzb3VuZC5zaG9naW1vdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc291bmQuY2FwdHVyZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VuZC5tb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsYXN0TW92ZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrU3RhdHVzKG1zZyk7XHJcbiAgICAgICAgaWYgKG1zZy5jaGVjaykge1xyXG4gICAgICAgICAgICBzb3VuZC5jaGVjaygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3BlY3RhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc2V0KHtcclxuICAgICAgICAgICAgICAgIGZlbjogcGFydHNbMF0sXHJcbiAgICAgICAgICAgICAgICB0dXJuQ29sb3I6IHRoaXMudHVybkNvbG9yLFxyXG4gICAgICAgICAgICAgICAgY2hlY2s6IG1zZy5jaGVjayxcclxuICAgICAgICAgICAgICAgIGxhc3RNb3ZlOiBsYXN0TW92ZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHVwZGF0ZVBvY2tldHModGhpcywgdGhpcy52cG9ja2V0MCwgdGhpcy52cG9ja2V0MSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnb1BseSA9IChwbHkpID0+IHtcclxuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5zdGVwc1twbHldO1xyXG4gICAgICAgIHZhciBtb3ZlID0gc3RlcC5tb3ZlO1xyXG4gICAgICAgIHZhciBjYXB0dXJlID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKG1vdmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpKSBtb3ZlID0gdXNpMnVjaShtb3ZlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudC5zdGFydHNXaXRoKCdncmFuZCcpKSBtb3ZlID0gZ3JhbmQyemVybyhtb3ZlKTtcclxuICAgICAgICAgICAgbW92ZSA9IG1vdmUuc2xpY2UoMSwgMikgPT09ICdAJyA/IFttb3ZlLnNsaWNlKDIsIDQpXSA6IFttb3ZlLnNsaWNlKDAsIDIpLCBtb3ZlLnNsaWNlKDIsIDQpXTtcclxuICAgICAgICAgICAgY2FwdHVyZSA9IHRoaXMuY2hlc3Nncm91bmQuc3RhdGUucGllY2VzW21vdmVbbW92ZS5sZW5ndGggLSAxXV0gIT09IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNoYXBlczA6IERyYXdTaGFwZVtdID0gW107XHJcbiAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXRBdXRvU2hhcGVzKHNoYXBlczApO1xyXG4gICAgICAgIGNvbnN0IGNldmFsID0gc3RlcC5jZXZhbDtcclxuICAgICAgICBpZiAoY2V2YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAoY2V2YWwucHYgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHB2X21vdmUgPSBjZXZhbFtcInB2XCJdLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykpIHB2X21vdmUgPSB1c2kydWNpKHB2X21vdmUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudC5zdGFydHNXaXRoKCdncmFuZCcpKSBwdl9tb3ZlID0gZ3JhbmQyemVybyhwdl9tb3ZlKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHB2X21vdmUsIGNldmFsW1wicHZcIl0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHB2X21vdmUuc2xpY2UoMSwgMikgPT09ICdAJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBwdl9tb3ZlLnNsaWNlKDIsIDQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlczAgPSBbeyBvcmlnOiBkLCBicnVzaDogJ3BhbGVHcmVlbicsIHBpZWNlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBzdGVwLnR1cm5Db2xvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogc2FuVG9Sb2xlW3B2X21vdmUuc2xpY2UoMCwgMSldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG9yaWc6IGQsIGJydXNoOiAncGFsZUdyZWVuJ31cclxuICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvID0gcHZfbW92ZS5zbGljZSgwLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkID0gcHZfbW92ZS5zbGljZSgyLCA0KTtcclxuICAgICAgICAgICAgICAgICAgICBzaGFwZXMwID0gW3sgb3JpZzogbywgZGVzdDogZCwgYnJ1c2g6ICdwYWxlR3JlZW4nLCBwaWVjZTogdW5kZWZpbmVkIH0sXTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZwdiA9IHBhdGNoKHRoaXMudnB2LCBoKCdkaXYjcHYnLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2JywgW2goJ3Njb3JlJywgdGhpcy5zdGVwc1twbHldWydzY29yZVN0ciddKSwgJ0ZhaXJ5LVN0b2NrZmlzaCwgRGVwdGggJyArIFN0cmluZyhjZXZhbFtcImRlcHRoXCJdKV0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ3B2JywgY2V2YWwucHZfc2FuICE9PSB1bmRlZmluZWQgPyBjZXZhbC5wdl9zYW4gOiBjZXZhbC5wdilcclxuICAgICAgICAgICAgICAgIF0pKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0bCA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgc3RsICsgJy0tUFZoZWlnaHQ6NjRweDsnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudnB2ID0gcGF0Y2godGhpcy52cHYsIGgoJ2RpdiNwdicpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0bCA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgc3RsICsgJy0tUFZoZWlnaHQ6MHB4OycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhzaGFwZXMwKTtcclxuICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnNldCh7XHJcbiAgICAgICAgICAgIGZlbjogc3RlcC5mZW4sXHJcbiAgICAgICAgICAgIHR1cm5Db2xvcjogc3RlcC50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgIG1vdmFibGU6IHtcclxuICAgICAgICAgICAgICAgIGZyZWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMuc3BlY3RhdG9yID8gdW5kZWZpbmVkIDogc3RlcC50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgICAgICBkZXN0czogdGhpcy5yZXN1bHQgPT09IFwiXCIgJiYgcGx5ID09PSB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEgPyB0aGlzLmRlc3RzIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2hlY2s6IHN0ZXAuY2hlY2ssXHJcbiAgICAgICAgICAgIGxhc3RNb3ZlOiBtb3ZlLFxyXG4gICAgICAgICAgICBkcmF3YWJsZToge2F1dG9TaGFwZXM6IHNoYXBlczB9LFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZ1bGxmZW4gPSBzdGVwLmZlbjtcclxuICAgICAgICB1cGRhdGVQb2NrZXRzKHRoaXMsIHRoaXMudnBvY2tldDAsIHRoaXMudnBvY2tldDEpO1xyXG5cclxuICAgICAgICBpZiAocGx5ID09PSB0aGlzLnBseSArIDEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkge1xyXG4gICAgICAgICAgICAgICAgc291bmQuc2hvZ2ltb3ZlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLmNhcHR1cmUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc291bmQubW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGx5ID0gcGx5XHJcbiAgICAgICAgdGhpcy52ZmVuID0gcGF0Y2godGhpcy52ZmVuLCBoKCdkaXYjZmVuJywgdGhpcy5mdWxsZmVuKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkb1NlbmQgPSAobWVzc2FnZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiLS0tPiBkb1NlbmQoKTpcIiwgbWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5zb2NrLnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2VuZE1vdmUgPSAob3JpZywgZGVzdCwgcHJvbW8pID0+IHtcclxuICAgICAgICAvLyBwYXVzZSgpIHdpbGwgYWRkIGluY3JlbWVudCFcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNlbmRNb3ZlKG9yaWcsIGRlc3QsIHByb20pXCIsIG9yaWcsIGRlc3QsIHByb21vKTtcclxuICAgICAgICBjb25zdCB1Y2lfbW92ZSA9IG9yaWcgKyBkZXN0ICsgcHJvbW87XHJcbiAgICAgICAgY29uc3QgbW92ZSA9IHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/IHVjaTJ1c2kodWNpX21vdmUpIDogdGhpcy52YXJpYW50LnN0YXJ0c1dpdGgoJ2dyYW5kJykgPyB6ZXJvMmdyYW5kKHVjaV9tb3ZlKSA6IHVjaV9tb3ZlO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2VuZE1vdmUobW92ZSlcIiwgbW92ZSk7XHJcbiAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcIm1vdmVcIiwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdLCBtb3ZlOiBtb3ZlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nb3ZlID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAob3JpZywgZGVzdCwgY2FwdHVyZWRQaWVjZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIiAgIGdyb3VuZC5vbk1vdmUoKVwiLCBvcmlnLCBkZXN0LCBjYXB0dXJlZFBpZWNlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkge1xyXG4gICAgICAgICAgICAgICAgc291bmQuc2hvZ2ltb3ZlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZWRQaWVjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLmNhcHR1cmUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc291bmQubW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Ecm9wID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAocGllY2UsIGRlc3QpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJncm91bmQub25Ecm9wKClcIiwgcGllY2UsIGRlc3QpO1xyXG4gICAgICAgICAgICBpZiAoZGVzdCAhPSAnejAnICYmIHBpZWNlLnJvbGUgJiYgZHJvcElzVmFsaWQodGhpcy5kZXN0cywgcGllY2Uucm9sZSwgZGVzdCkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VuZC5zaG9naW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc291bmQubW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGlja0Ryb3AgPSBwaWVjZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uVXNlck1vdmUgPSAob3JpZywgZGVzdCwgbWV0YSkgPT4ge1xyXG4gICAgICAgIC8vIGNoZXNzZ3JvdW5kIGRvZXNuJ3Qga25vd3MgYWJvdXQgZXAsIHNvIHdlIGhhdmUgdG8gcmVtb3ZlIGVwIGNhcHR1cmVkIHBhd25cclxuICAgICAgICBjb25zdCBwaWVjZXMgPSB0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlLnBpZWNlcztcclxuICAgICAgICBjb25zdCBnZW9tID0gdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5nZW9tZXRyeTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImdyb3VuZC5vblVzZXJNb3ZlKClcIiwgb3JpZywgZGVzdCwgbWV0YSwgcGllY2VzKTtcclxuICAgICAgICBjb25zdCBtb3ZlZCA9IHBpZWNlc1tkZXN0XSBhcyBQaWVjZTtcclxuICAgICAgICBjb25zdCBmaXJzdFJhbmtJczAgPSB0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlLmRpbWVuc2lvbnMuaGVpZ2h0ID09PSAxMDtcclxuICAgICAgICBpZiAobWV0YS5jYXB0dXJlZCA9PT0gdW5kZWZpbmVkICYmIG1vdmVkLnJvbGUgPT09IFwicGF3blwiICYmIG9yaWdbMF0gIT0gZGVzdFswXSAmJiBoYXNFcCh0aGlzLnZhcmlhbnQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IGtleTJwb3MoZGVzdCwgZmlyc3RSYW5rSXMwKSxcclxuICAgICAgICAgICAgcGF3blBvczogUG9zID0gW3Bvc1swXSwgcG9zWzFdICsgKHRoaXMubXljb2xvciA9PT0gJ3doaXRlJyA/IC0xIDogMSldO1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmOiBQaWVjZXNEaWZmID0ge307XHJcbiAgICAgICAgICAgIGRpZmZbcG9zMmtleShwYXduUG9zLCBnZW9tKV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc2V0UGllY2VzKGRpZmYpO1xyXG4gICAgICAgICAgICBtZXRhLmNhcHR1cmVkID0ge3JvbGU6IFwicGF3blwifTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIGluY3JlYXNlIHBvY2tldCBjb3VudFxyXG4gICAgICAgIGlmICgodGhpcy52YXJpYW50ID09PSBcImNyYXp5aG91c2VcIiB8fCB0aGlzLnZhcmlhbnQgPT09IFwiY2FwYWhvdXNlXCIgfHwgdGhpcy52YXJpYW50ID09PSBcInNob3VzZVwiIHx8IHRoaXMudmFyaWFudCA9PT0gXCJncmFuZGhvdXNlXCIgfHwgdGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpKSAmJiBtZXRhLmNhcHR1cmVkKSB7XHJcbiAgICAgICAgICAgIHZhciByb2xlID0gbWV0YS5jYXB0dXJlZC5yb2xlXHJcbiAgICAgICAgICAgIGlmIChtZXRhLmNhcHR1cmVkLnByb21vdGVkKSByb2xlID0gdGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpID8gbWV0YS5jYXB0dXJlZC5yb2xlLnNsaWNlKDEpIGFzIFJvbGUgOiBcInBhd25cIjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZsaXApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9ja2V0c1swXVtyb2xlXSsrO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52cG9ja2V0MCA9IHBhdGNoKHRoaXMudnBvY2tldDAsIHBvY2tldFZpZXcodGhpcywgdGhpcy5teWNvbG9yLCBcInRvcFwiKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvY2tldHNbMV1bcm9sZV0rKztcclxuICAgICAgICAgICAgICAgIHRoaXMudnBvY2tldDEgPSBwYXRjaCh0aGlzLnZwb2NrZXQxLCBwb2NrZXRWaWV3KHRoaXMsIHRoaXMubXljb2xvciwgXCJib3R0b21cIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gIGdhdGluZyBlbGVwaGFudC9oYXdrXHJcbiAgICAgICAgaWYgKHRoaXMudmFyaWFudCA9PT0gXCJzZWlyYXdhblwiIHx8IHRoaXMudmFyaWFudCA9PT0gXCJzaG91c2VcIikge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJvbW90aW9uLnN0YXJ0KG9yaWcsIGRlc3QsIG1ldGEpICYmICF0aGlzLmdhdGluZy5zdGFydCh0aGlzLmZ1bGxmZW4sIG9yaWcsIGRlc3QpKSB0aGlzLnNlbmRNb3ZlKG9yaWcsIGRlc3QsICcnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJvbW90aW9uLnN0YXJ0KG9yaWcsIGRlc3QsIG1ldGEpKSB0aGlzLnNlbmRNb3ZlKG9yaWcsIGRlc3QsICcnKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Vc2VyRHJvcCA9IChyb2xlLCBkZXN0KSA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJncm91bmQub25Vc2VyRHJvcCgpXCIsIHJvbGUsIGRlc3QpO1xyXG4gICAgICAgIC8vIGRlY3JlYXNlIHBvY2tldCBjb3VudFxyXG4gICAgICAgIC8vY2FuY2VsRHJvcE1vZGUodGhpcy5jaGVzc2dyb3VuZC5zdGF0ZSk7XHJcbiAgICAgICAgaWYgKGRyb3BJc1ZhbGlkKHRoaXMuZGVzdHMsIHJvbGUsIGRlc3QpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZsaXApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9ja2V0c1swXVtyb2xlXS0tO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52cG9ja2V0MCA9IHBhdGNoKHRoaXMudnBvY2tldDAsIHBvY2tldFZpZXcodGhpcywgdGhpcy5teWNvbG9yLCBcInRvcFwiKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvY2tldHNbMV1bcm9sZV0tLTtcclxuICAgICAgICAgICAgICAgIHRoaXMudnBvY2tldDEgPSBwYXRjaCh0aGlzLnZwb2NrZXQxLCBwb2NrZXRWaWV3KHRoaXMsIHRoaXMubXljb2xvciwgXCJib3R0b21cIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZE1vdmUocm9sZVRvU2FuW3JvbGVdICsgXCJAXCIsIGRlc3QsICcnKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNlbnQgbW92ZVwiLCBtb3ZlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIiEhISBpbnZhbGlkIG1vdmUgISEhXCIsIHJvbGUsIGRlc3QpO1xyXG4gICAgICAgICAgICAvLyByZXN0b3JlIGJvYXJkXHJcbiAgICAgICAgICAgIHRoaXMuY2xpY2tEcm9wID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnNldCh7XHJcbiAgICAgICAgICAgICAgICBmZW46IHRoaXMuZnVsbGZlbixcclxuICAgICAgICAgICAgICAgIGxhc3RNb3ZlOiB0aGlzLmxhc3Rtb3ZlLFxyXG4gICAgICAgICAgICAgICAgdHVybkNvbG9yOiB0aGlzLm15Y29sb3IsXHJcbiAgICAgICAgICAgICAgICBtb3ZhYmxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzdHM6IHRoaXMuZGVzdHMsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0Rlc3RzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TZWxlY3QgPSAoc2VsZWN0ZWQpID0+IHtcclxuICAgICAgICByZXR1cm4gKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImdyb3VuZC5vblNlbGVjdCgpXCIsIGtleSwgc2VsZWN0ZWQsIHRoaXMuY2xpY2tEcm9wLCB0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlKTtcclxuICAgICAgICAgICAgLy8gSWYgZHJvcCBzZWxlY3Rpb24gd2FzIHNldCBkcm9wRGVzdHMgd2UgaGF2ZSB0byByZXN0b3JlIGRlc3RzIGhlcmVcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUubW92YWJsZS5kZXN0cyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmIChrZXkgIT0gJ3owJyAmJiAnejAnIGluIHRoaXMuY2hlc3Nncm91bmQuc3RhdGUubW92YWJsZS5kZXN0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xpY2tEcm9wICE9PSB1bmRlZmluZWQgJiYgZHJvcElzVmFsaWQodGhpcy5kZXN0cywgdGhpcy5jbGlja0Ryb3Aucm9sZSwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlc3Nncm91bmQubmV3UGllY2UodGhpcy5jbGlja0Ryb3AsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblVzZXJEcm9wKHRoaXMuY2xpY2tEcm9wLnJvbGUsIGtleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsaWNrRHJvcCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIC8vY2FuY2VsRHJvcE1vZGUodGhpcy5jaGVzc2dyb3VuZC5zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnNldCh7IG1vdmFibGU6IHsgZGVzdHM6IHRoaXMuZGVzdHMgfX0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyBTaXR0dXlpbiBpbiBwbGFjZSBwcm9tb3Rpb24gb24gQ3RybCtjbGlja1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5zdGF0cy5jdHJsS2V5ICYmIFxyXG4gICAgICAgICAgICAgICAgKGtleSBpbiB0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlLm1vdmFibGUuZGVzdHMpICYmXHJcbiAgICAgICAgICAgICAgICAodGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5tb3ZhYmxlLmRlc3RzW2tleV0uaW5kZXhPZihrZXkpID49IDApICYmXHJcbiAgICAgICAgICAgICAgICAodGhpcy52YXJpYW50ID09PSAnc2l0dHV5aW4nKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDdHJsIGluIHBsYWNlIHByb21vdGlvblwiLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBpZWNlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdmFyIHBpZWNlID0gdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5waWVjZXNba2V5XTtcclxuICAgICAgICAgICAgICAgIHBpZWNlc1trZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBwaWVjZSEuY29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgcm9sZTogJ2ZlcnonLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21vdGVkOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXRQaWVjZXMocGllY2VzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZE1vdmUoa2V5LCBrZXksICdmJyk7XHJcblxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnQW5hbHlzaXMgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgaWYgKG1zZ1snY2V2YWwnXVsnc2NvcmUnXSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHBseSA9IG1zZ1sncGx5J107XHJcbiAgICAgICAgY29uc3Qgc2NvcmUgPSBtc2dbJ2NldmFsJ11bJ3Njb3JlJ107XHJcbiAgICAgICAgdmFyIHNjb3JlU3RyID0gJyc7XHJcbiAgICAgICAgdmFyIGNldmFsID0gJyc7XHJcbiAgICAgICAgaWYgKHNjb3JlWydtYXRlJ10gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjZXZhbCA9IHNjb3JlWydtYXRlJ11cclxuICAgICAgICAgICAgY29uc3Qgc2lnbiA9ICgobXNnLmNvbG9yID09PSAnYicgJiYgTnVtYmVyKGNldmFsKSA+IDApIHx8IChtc2cuY29sb3IgPT09ICd3JyAmJiBOdW1iZXIoY2V2YWwpIDwgMCkpID8gJy0nOiAnJztcclxuICAgICAgICAgICAgc2NvcmVTdHIgPSAnIycgKyBzaWduICsgTWF0aC5hYnMoTnVtYmVyKGNldmFsKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2V2YWwgPSBzY29yZVsnY3AnXVxyXG4gICAgICAgICAgICB2YXIgbnNjb3JlID0gTnVtYmVyKGNldmFsKSAvIDEwMC4wO1xyXG4gICAgICAgICAgICBpZiAobXNnLmNvbG9yID09PSAnYicpIG5zY29yZSA9IC1uc2NvcmU7XHJcbiAgICAgICAgICAgIHNjb3JlU3RyID0gbnNjb3JlLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKHBseSwgc2NvcmVTdHIpO1xyXG4gICAgICAgIGlmIChwbHkgPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBldmFsRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGx5JyArIFN0cmluZyhwbHkpKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgcGF0Y2goZXZhbEVsLCBoKCdldmFsI3BseScgKyBTdHJpbmcocGx5KSwgc2NvcmVTdHIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdGVwc1twbHldWydjZXZhbCddID0gbXNnWydjZXZhbCddO1xyXG4gICAgICAgIHRoaXMuc3RlcHNbcGx5XVsnc2NvcmVTdHInXSA9IHNjb3JlU3RyO1xyXG5cclxuICAgICAgICBhbmFseXNpc0NoYXJ0KHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nc2dVc2VyQ29ubmVjdGVkID0gKG1zZykgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSA9IG1zZ1tcInVzZXJuYW1lXCJdO1xyXG4gICAgICAgIHJlbmRlclVzZXJuYW1lKHRoaXMubW9kZWxbXCJob21lXCJdLCB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0pO1xyXG4gICAgICAgIC8vIHdlIHdhbnQgdG8ga25vdyBsYXN0TW92ZSBhbmQgY2hlY2sgc3RhdHVzXHJcbiAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImJvYXJkXCIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnQ2hhdCA9IChtc2cpID0+IHtcclxuICAgICAgICBpZiAobXNnLnVzZXIgIT09IHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSkge1xyXG4gICAgICAgICAgICBpZiAoKHRoaXMuc3BlY3RhdG9yICYmIG1zZy5yb29tID09PSAnc3BlY3RhdG9yJykgfHwgKCF0aGlzLnNwZWN0YXRvciAmJiBtc2cucm9vbSAhPT0gJ3NwZWN0YXRvcicpIHx8IG1zZy51c2VyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgY2hhdE1lc3NhZ2UobXNnLnVzZXIsIG1zZy5tZXNzYWdlLCBcInJvdW5kY2hhdFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnRnVsbENoYXQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgbXNnLmxpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCh0aGlzLnNwZWN0YXRvciAmJiBsaW5lLnJvb20gPT09ICdzcGVjdGF0b3InKSB8fCAoIXRoaXMuc3BlY3RhdG9yICYmIGxpbmUucm9vbSAhPT0gJ3NwZWN0YXRvcicpIHx8IGxpbmUudXNlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNoYXRNZXNzYWdlKGxpbmUudXNlciwgbGluZS5tZXNzYWdlLCBcInJvdW5kY2hhdFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nc2dHYW1lTm90Rm91bmQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgYWxlcnQoXCJSZXF1c2V0ZWQgZ2FtZSBcIiArIG1zZ1snZ2FtZUlkJ10gKyBcIiBub3QgZm91bmQhXCIpO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odGhpcy5tb2RlbFtcImhvbWVcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25NZXNzYWdlID0gKGV2dCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiPCsrKyBvbk1lc3NhZ2UoKTpcIiwgZXZ0LmRhdGEpO1xyXG4gICAgICAgIHZhciBtc2cgPSBKU09OLnBhcnNlKGV2dC5kYXRhKTtcclxuICAgICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJib2FyZFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ0JvYXJkKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImFuYWx5c2lzXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnQW5hbHlzaXMobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZ2FtZV91c2VyX2Nvbm5lY3RlZFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ1VzZXJDb25uZWN0ZWQobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicm91bmRjaGF0XCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnQ2hhdChtc2cpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJmdWxsY2hhdFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ0Z1bGxDaGF0KG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImdhbWVfbm90X2ZvdW5kXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnR2FtZU5vdEZvdW5kKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgSGlnaGNoYXJ0cyBmcm9tIFwiaGlnaGNoYXJ0c1wiO1xuXG5pbXBvcnQgeyBwb3ZDaGFuY2VzLCBzZWxlY3RNb3ZlIH0gZnJvbSAnLi9tb3ZlbGlzdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXNpc0NoYXJ0IChjdHJsKSB7XG4gICAgY29uc3Qgc2NvcmVzID0gY3RybC5zdGVwcy5tYXAoXG4gICAgICAgICAgICAoc3RlcCwgcGx5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0ZXAuY2V2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29yZSA9IHN0ZXAuY2V2YWwuc2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29yZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHVybiA9IE1hdGguZmxvb3IoKHBseSAtIDEpIC8gMikgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvdHMgPSBzdGVwLnR1cm5Db2xvciA9PT0gJ2JsYWNrJyA/ICcuJyA6ICcuLi4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0dXJuICsgZG90cyArICcgJyArIHN0ZXAuc2FuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBwb3ZDaGFuY2VzKHN0ZXAudHVybkNvbG9yLCBzY29yZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx5ID09PSAwKSBwb2ludC5uYW1lID0gJ0luaXRpYWwgcG9zaXRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSlcbiAgICBjdHJsLmFuYWx5c2lzQ2hhcnQgPSBIaWdoY2hhcnRzLmNoYXJ0KCdjaGFydCcsIHtcbiAgICAgICAgY2hhcnQ6IHsgdHlwZTogJ2FyZWEnLFxuICAgICAgICAgICAgc3BhY2luZzogWzMsIDAsIDMsIDBdLFxuICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICBjcmVkaXRzOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIGxlZ2VuZDogeyBlbmFibGVkOiBmYWxzZSB9LFxuICAgICAgICB0aXRsZTogeyB0ZXh0OiB1bmRlZmluZWQgfSxcbiAgICAgICAgcGxvdE9wdGlvbnM6IHtcbiAgICAgICAgc2VyaWVzOiB7XG4gICAgICAgICAgYW5pbWF0aW9uOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBhcmVhOiB7XG4gICAgICAgICAgZmlsbENvbG9yOiAncmdiYSgyNTUsMjU1LDI1NSwwLjcpJyxcbiAgICAgICAgICBuZWdhdGl2ZUZpbGxDb2xvcjogJ3JnYmEoMCwwLDAsMC4yKScsXG4gICAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICAgIGxpbmVXaWR0aDogMSxcbiAgICAgICAgICBjb2xvcjogJyNkODUwMDAnLFxuICAgICAgICAgIGFsbG93UG9pbnRTZWxlY3Q6IHRydWUsXG4gICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgc3RhdGVzOiB7XG4gICAgICAgICAgICBob3Zlcjoge1xuICAgICAgICAgICAgICBsaW5lV2lkdGg6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICAgIGlmIChldmVudC5wb2ludCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnBvaW50LnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIHNlbGVjdE1vdmUgKGN0cmwsIGV2ZW50LnBvaW50LngpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG1hcmtlcjoge1xuICAgICAgICAgICAgcmFkaXVzOiAxLFxuICAgICAgICAgICAgc3RhdGVzOiB7XG4gICAgICAgICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgICAgICAgcmFkaXVzOiA0LFxuICAgICAgICAgICAgICAgIGxpbmVDb2xvcjogJyNkODUwMDAnXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNlbGVjdDoge1xuICAgICAgICAgICAgICAgIHJhZGl1czogNCxcbiAgICAgICAgICAgICAgICBsaW5lQ29sb3I6ICcjZDg1MDAwJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgIHBvaW50Rm9ybWF0dGVyOiBmdW5jdGlvbihmb3JtYXQ6IHN0cmluZykge1xuICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgne3Nlcmllcy5uYW1lfScsICdBZHZhbnRhZ2UnKTtcbiAgICAgICAgICAgICAgdmFyIHNlbGY6IEhpZ2hjaGFydHMuUG9pbnQgPSB0aGlzO1xuICAgICAgICAgICAgICB2YXIgY2V2YWwgPSBjdHJsLnN0ZXBzW3NlbGYueF0uY2V2YWwuc2NvcmU7XG4gICAgICAgICAgICAgIGlmICghY2V2YWwpIHJldHVybiAnJztcbiAgICAgICAgICAgICAgZWxzZSByZXR1cm4gZm9ybWF0LnJlcGxhY2UoJ3twb2ludC55fScsIGN0cmwuc3RlcHNbc2VsZi54XS5zY29yZVN0cik7XG4gICAgICAgICAgICB9IGFzIEhpZ2hjaGFydHMuRm9ybWF0dGVyQ2FsbGJhY2tGdW5jdGlvbjxIaWdoY2hhcnRzLlBvaW50PlxuICAgICAgICB9LFxuICAgICAgICB4QXhpczoge1xuICAgICAgICAgICAgdGl0bGU6IHsgdGV4dDogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICBsYWJlbHM6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgICAgICAgIGdyaWRMaW5lV2lkdGg6IDEsXG4gICAgICAgICAgICBsaW5lV2lkdGg6IDAsXG4gICAgICAgICAgICB0aWNrV2lkdGg6IDBcbiAgICAgICAgfSxcbiAgICAgICAgeUF4aXM6IHtcbiAgICAgICAgICAgIHRpdGxlOiB7IHRleHQ6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgICAgbGFiZWxzOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgICAgICBtaW46IC0xLjEsXG4gICAgICAgICAgICBtYXg6IDEuMSxcbiAgICAgICAgICAgIHN0YXJ0T25UaWNrOiBmYWxzZSxcbiAgICAgICAgICAgIGVuZE9uVGljazogZmFsc2UsXG4gICAgICAgICAgICBsaW5lV2lkdGg6IDEsXG4gICAgICAgICAgICBncmlkTGluZVdpZHRoOiAwLFxuICAgICAgICAgICAgcGxvdExpbmVzOiBbe1xuICAgICAgICAgICAgICBjb2xvcjogJyNhMGEwYTAnLFxuICAgICAgICAgICAgICB3aWR0aDogMSxcbiAgICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICB9XVxuICAgICAgICB9LFxuICAgICAgICBzZXJpZXM6IFt7IGRhdGE6IHNjb3JlcyB9IGFzIEhpZ2hjaGFydHMuU2VyaWVzQ29sdW1uT3B0aW9uc1xuICAgICAgICBdXG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBpbml0IH0gZnJvbSBcInNuYWJiZG9tXCI7XG5pbXBvcnQga2xhc3MgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9jbGFzcyc7XG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9wcm9wcyc7XG5pbXBvcnQgbGlzdGVuZXJzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvZXZlbnRsaXN0ZW5lcnMnO1xuXG5jb25zdCBwYXRjaCA9IGluaXQoW2tsYXNzLCBhdHRyaWJ1dGVzLCBwcm9wZXJ0aWVzLCBsaXN0ZW5lcnNdKTtcblxuaW1wb3J0IGggZnJvbSAnc25hYmJkb20vaCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGF0VmlldyAoY3RybCwgY2hhdFR5cGUpIHtcbiAgICBmdW5jdGlvbiBvbktleVByZXNzIChlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWVcbiAgICAgICAgaWYgKChlLmtleUNvZGUgPT0gMTMgfHwgZS53aGljaCA9PSAxMykgJiYgbWVzc2FnZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjaGF0TWVzc2FnZSAoY3RybC5tb2RlbFsndXNlcm5hbWUnXSwgbWVzc2FnZSwgY2hhdFR5cGUpO1xuICAgICAgICAgICAgY3RybC5kb1NlbmQoe1widHlwZVwiOiBjaGF0VHlwZSwgXCJtZXNzYWdlXCI6IG1lc3NhZ2UsIFwiZ2FtZUlkXCI6IGN0cmwubW9kZWxbXCJnYW1lSWRcIl0sIFwicm9vbVwiOiAoY3RybC5zcGVjdGF0b3IpID8gXCJzcGVjdGF0b3JcIjogXCJwbGF5ZXJcIn0pO1xuICAgICAgICAgICAgKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gXCJcIjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoKGBkaXYuJHtjaGF0VHlwZX0jJHtjaGF0VHlwZX1gLCB7IGNsYXNzOiB7XCJjaGF0XCI6IHRydWV9IH0sIFtcbiAgICAgICAgICAgICAgICBoKCdkaXYuY2hhdHJvb20nLCBjdHJsLnNwZWN0YXRvciA/ICdTcGVjdGF0b3Igcm9vbScgOiAnQ2hhdCByb29tJyksXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogaGlkZS9zaG93IGNoYXRcbiAgICAgICAgICAgICAgICAvLyBoKCdpbnB1dCNjaGF0Ym94Jywge3Byb3BzOiB7bmFtZTogXCJjaGF0Ym94XCIsIHR5cGU6IFwiY2hlY2tib3hcIiwgY2hlY2tlZDogXCJcIn19KSxcbiAgICAgICAgICAgICAgICBoKGBvbCMke2NoYXRUeXBlfS1tZXNzYWdlc2AsIFsgaChcImRpdiNtZXNzYWdlc1wiKV0pLFxuICAgICAgICAgICAgICAgIGgoJ2lucHV0I2NoYXQtZW50cnknLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiZW50cnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogXCJvZmZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlBsZWFzZSBiZSBuaWNlIGluIHRoZSBjaGF0IVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoOiBcIjE0MFwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbjogeyBrZXlwcmVzczogKGUpID0+IG9uS2V5UHJlc3MoZSkgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGF0TWVzc2FnZSAodXNlciwgbWVzc2FnZSwgY2hhdFR5cGUpIHtcbiAgICBjb25zdCBteURpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNoYXRUeXBlICsgJy1tZXNzYWdlcycpIGFzIEhUTUxFbGVtZW50O1xuICAgIC8vIFlvdSBtdXN0IGFkZCBib3JkZXIgd2lkdGhzLCBwYWRkaW5nIGFuZCBtYXJnaW5zIHRvIHRoZSByaWdodC5cbiAgICBjb25zdCBpc1Njcm9sbGVkID0gbXlEaXYuc2Nyb2xsVG9wID09IG15RGl2LnNjcm9sbEhlaWdodCAtIG15RGl2Lm9mZnNldEhlaWdodDtcblxuICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVzc2FnZXMnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodXNlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcGF0Y2goY29udGFpbmVyLCBoKCdkaXYjbWVzc2FnZXMnLCBbIGgoXCJsaS5tZXNzYWdlLm9mZmVyXCIsIFtoKFwidFwiLCBtZXNzYWdlKV0pIF0pKTtcbiAgICB9IGVsc2UgaWYgKHVzZXIgPT09ICdfc2VydmVyJykge1xuICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ2RpdiNtZXNzYWdlcycsIFsgaChcImxpLm1lc3NhZ2Uuc2VydmVyXCIsIFtoKFwidXNlclwiLCAnU2VydmVyJyksIGgoXCJ0XCIsIG1lc3NhZ2UpXSkgXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnZGl2I21lc3NhZ2VzJywgWyBoKFwibGkubWVzc2FnZVwiLCBbaChcInVzZXJcIiwgdXNlciksIGgoXCJ0XCIsIG1lc3NhZ2UpXSkgXSkpO1xuICAgIH07XG5cbiAgICBpZiAoaXNTY3JvbGxlZCkgbXlEaXYuc2Nyb2xsVG9wID0gbXlEaXYuc2Nyb2xsSGVpZ2h0O1xufSIsImltcG9ydCB7IGtleTJwb3MgfSBmcm9tICdjaGVzc2dyb3VuZHgvdXRpbCc7XHJcbmltcG9ydCB7IENvbG9yLCBHZW9tZXRyeSwgS2V5LCBSb2xlIH0gZnJvbSAnY2hlc3Nncm91bmR4L3R5cGVzJztcclxuXHJcbmV4cG9ydCBjb25zdCB2YXJpYW50cyA9IFtcIm1ha3J1a1wiLCBcImNhbWJvZGlhblwiLCBcInNpdHR1eWluXCIsIFwicGxhY2VtZW50XCIsIFwiY3Jhenlob3VzZVwiLCBcInN0YW5kYXJkXCIsIFwic2hvZ2lcIiwgXCJtaW5pc2hvZ2lcIiwgXCJ4aWFuZ3FpXCIsIFwiY2FwYWJsYW5jYVwiLCBcInNlaXJhd2FuXCIsIFwiY2FwYWhvdXNlXCIsIFwic2hvdXNlXCIsIFwiZ3JhbmRcIiwgXCJncmFuZGhvdXNlXCIsIFwiZ290aGljXCIsIFwiZ290aGhvdXNlXCJdO1xyXG5leHBvcnQgY29uc3QgdmFyaWFudHM5NjAgPSBbXCJjcmF6eWhvdXNlXCIsIFwic3RhbmRhcmRcIiwgXCJjYXBhYmxhbmNhXCIsIFwiY2FwYWhvdXNlXCJdO1xyXG5cclxuZXhwb3J0IGNvbnN0IFZBUklBTlRTID0ge1xyXG4gICAgbWFrcnVrOiB7IGdlb206IEdlb21ldHJ5LmRpbTh4OCwgY2c6IFwiY2ctNTEyXCIsIGJvYXJkOiBcImdyaWRcIiwgQm9hcmRDU1M6IFtcIm1ha3JiMVwiLCBcIm1ha3JiMlwiXSwgcGllY2VzOiBcIm1ha3J1a1wiLCBQaWVjZUNTUzogW1wibWFrcnVrXCJdLCBpY29uOiBcIlFcIn0sXHJcbiAgICBjYW1ib2RpYW46IHsgZ2VvbTogR2VvbWV0cnkuZGltOHg4LCBjZzogXCJjZy01MTJcIiwgYm9hcmQ6IFwiZ3JpZFwiLCBCb2FyZENTUzogW1wibWFrcmIxXCIsIFwibWFrcmIyXCJdLCBwaWVjZXM6IFwibWFrcnVrXCIsIFBpZWNlQ1NTOiBbXCJtYWtydWtcIl0sIGljb246IFwiUVwifSxcclxuICAgIHNpdHR1eWluOiB7IGdlb206IEdlb21ldHJ5LmRpbTh4OCwgY2c6IFwiY2ctNTEyXCIsIGJvYXJkOiBcImdyaWR4XCIsIEJvYXJkQ1NTOiBbXCJzaXR0YjFcIiwgXCJzaXR0YjJcIl0sIHBpZWNlczogXCJzaXR0dXlpblwiLCBQaWVjZUNTUzogW1wic2l0dHV5aW5tXCIsIFwic2l0dHV5aW5zXCJdLCBpY29uOiBcIlJcIiwgYmFzZVVSTDogW1wibWFrcnVrXCIsIFwic2l0dHV5aW5cIl0gfSxcclxuICAgIHNob2dpOiB7IGdlb206IEdlb21ldHJ5LmRpbTl4OSwgY2c6IFwiY2ctNTc2XCIsIGJvYXJkOiBcImdyaWQ5eDlcIiwgQm9hcmRDU1M6IFtcIjl4OWFcIiwgXCI5eDliXCIsIFwiOXg5Y1wiLCBcIjl4OWRcIiwgXCI5eDllXCIsIFwiOXg5ZlwiXSwgcGllY2VzOiBcInNob2dpXCIsIFBpZWNlQ1NTOiBbXCJzaG9naTBrXCIsIFwic2hvZ2kwXCIsIFwic2hvZ2kwd1wiLCBcInNob2dpMHBcIl0sIGljb246IFwiS1wiLCBiYXNlVVJMOiBbXCJzaG9naS9jdGtcIiwgXCJzaG9naVwiLCBcInNob2dpL2N0d1wiLCBcInNob2dpL2N0cFwiXSB9LFxyXG4gICAgbWluaXNob2dpOiB7IGdlb206IEdlb21ldHJ5LmRpbTV4NSwgY2c6IFwiY2ctMjYwXCIsIGJvYXJkOiBcImdyaWQ1eDVcIiwgQm9hcmRDU1M6IFtcIjV4NWFcIiwgXCI1eDViXCIsIFwiNXg1Y1wiXSwgcGllY2VzOiBcInNob2dpXCIsIFBpZWNlQ1NTOiBbXCJzaG9naTBrXCIsIFwic2hvZ2kwXCIsIFwic2hvZ2kwd1wiLCBcInNob2dpMHBcIl0sIGljb246IFwiNlwiLCBiYXNlVVJMOiBbXCJzaG9naS9jdGtcIiwgXCJzaG9naVwiLCBcInNob2dpL2N0d1wiLCBcInNob2dpL2N0cFwiXSB9LFxyXG4gICAgeGlhbmdxaTogeyBnZW9tOiBHZW9tZXRyeS5kaW05eDEwLCBjZzogXCJjZy01NzYtNjQwXCIsIGJvYXJkOiBcInJpdmVyXCIsIEJvYXJkQ1NTOiBbXCI5eDEwYVwiLCBcIjl4MTBiXCIsIFwiOXgxMGNcIiwgXCI5eDEwZFwiLCBcIjl4MTBlXCJdLCBwaWVjZXM6IFwieGlhbmdxaVwiLCBQaWVjZUNTUzogW1wieGlhbmdxaVwiLCBcInhpYW5ncWllXCIsIFwieGlhbmdxaWN0MlwiLCBcInhpYW5ncWlobnpcIl0sIGljb246IFwiT1wiIH0sXHJcbiAgICBwbGFjZW1lbnQ6IHsgZ2VvbTogR2VvbWV0cnkuZGltOHg4LCBjZzogXCJjZy01MTJcIiwgYm9hcmQ6IFwiYm9hcmQ4eDhcIiwgQm9hcmRDU1M6IFtcIjh4OGJyb3duXCIsIFwiOHg4Ymx1ZVwiLCBcIjh4OGdyZWVuXCIsIFwiOHg4bWFwbGVcIiwgXCI4eDhvbGl2ZVwiXSwgcGllY2VzOiBcInN0YW5kYXJkXCIsIFBpZWNlQ1NTOiBbXCJzdGFuZGFyZFwiLCBcImdyZWVuXCIsIFwiYWxwaGFcIl0sIGljb246IFwiU1wiLCBiYXNlVVJMOiBbXCJtZXJpZGFcIiwgXCJncmVlblwiLCBcImFscGhhXCJdIH0sXHJcbiAgICBjcmF6eWhvdXNlOiB7IGdlb206IEdlb21ldHJ5LmRpbTh4OCwgY2c6IFwiY2ctNTEyXCIsIGJvYXJkOiBcImJvYXJkOHg4XCIsIEJvYXJkQ1NTOiBbXCI4eDhicm93blwiLCBcIjh4OGJsdWVcIiwgXCI4eDhncmVlblwiLCBcIjh4OG1hcGxlXCIsIFwiOHg4b2xpdmVcIl0sIHBpZWNlczogXCJzdGFuZGFyZFwiLCBQaWVjZUNTUzogW1wic3RhbmRhcmRcIiwgXCJncmVlblwiLCBcImFscGhhXCJdLCBpY29uOiBcIkhcIiwgYmFzZVVSTDogW1wibWVyaWRhXCIsIFwiZ3JlZW5cIiwgXCJhbHBoYVwiXSB9LFxyXG4gICAgY2FwYWJsYW5jYTogeyBnZW9tOiBHZW9tZXRyeS5kaW0xMHg4LCBjZzogXCJjZy02NDBcIiwgYm9hcmQ6IFwiYm9hcmQxMHg4XCIsIEJvYXJkQ1NTOiBbXCIxMHg4YnJvd25cIiwgXCIxMHg4Ymx1ZVwiLCBcIjEweDhncmVlblwiLCBcIjEweDhtYXBsZVwiLCBcIjEweDhvbGl2ZVwiXSwgcGllY2VzOiBcImNhcGFcIiwgUGllY2VDU1M6IFtcImNhcGEwXCIsIFwiY2FwYTFcIiwgXCJjYXBhMlwiLCBcImNhcGEzXCJdLCBpY29uOiBcIlBcIiB9LFxyXG4gICAgY2FwYWhvdXNlOiB7IGdlb206IEdlb21ldHJ5LmRpbTEweDgsIGNnOiBcImNnLTY0MFwiLCBib2FyZDogXCJib2FyZDEweDhcIiwgQm9hcmRDU1M6IFtcIjEweDhicm93blwiLCBcIjEweDhibHVlXCIsIFwiMTB4OGdyZWVuXCIsIFwiMTB4OG1hcGxlXCIsIFwiMTB4OG9saXZlXCJdLCBwaWVjZXM6IFwiY2FwYVwiLCBQaWVjZUNTUzogW1wiY2FwYTBcIiwgXCJjYXBhMVwiLCBcImNhcGEyXCIsIFwiY2FwYTNcIl0sIGljb246IFwiUFwiLCBiYXNlVVJMOiBbXCJjYXBhXCIsIFwic2VpclwiLCBcImdyZWVuXCIsIFwibXVza1wiXSB9LFxyXG4gICAgZ290aGljOiB7IGdlb206IEdlb21ldHJ5LmRpbTEweDgsIGNnOiBcImNnLTY0MFwiLCBib2FyZDogXCJib2FyZDEweDhcIiwgQm9hcmRDU1M6IFtcIjEweDhicm93blwiLCBcIjEweDhibHVlXCIsIFwiMTB4OGdyZWVuXCIsIFwiMTB4OG1hcGxlXCIsIFwiMTB4OG9saXZlXCJdLCBwaWVjZXM6IFwiY2FwYVwiLCBQaWVjZUNTUzogW1wiY2FwYTBcIiwgXCJjYXBhMVwiLCBcImNhcGEyXCIsIFwiY2FwYTNcIl0sIGljb246IFwiUFwiIH0sXHJcbiAgICBnb3RoaG91c2U6IHsgZ2VvbTogR2VvbWV0cnkuZGltMTB4OCwgY2c6IFwiY2ctNjQwXCIsIGJvYXJkOiBcImJvYXJkMTB4OFwiLCBCb2FyZENTUzogW1wiMTB4OGJyb3duXCIsIFwiMTB4OGJsdWVcIiwgXCIxMHg4Z3JlZW5cIiwgXCIxMHg4bWFwbGVcIiwgXCIxMHg4b2xpdmVcIl0sIHBpZWNlczogXCJjYXBhXCIsIFBpZWNlQ1NTOiBbXCJjYXBhMFwiLCBcImNhcGExXCIsIFwiY2FwYTJcIiwgXCJjYXBhM1wiXSwgaWNvbjogXCJQXCIsIGJhc2VVUkw6IFtcImNhcGFcIiwgXCJzZWlyXCIsIFwiZ3JlZW5cIiwgXCJtdXNrXCJdIH0sXHJcbiAgICBncmFuZDogeyBnZW9tOiBHZW9tZXRyeS5kaW0xMHgxMCwgY2c6IFwiY2ctNjQwLTY0MFwiLCBib2FyZDogXCJib2FyZDEweDEwXCIsIEJvYXJkQ1NTOiBbXCIxMHgxMGJyb3duXCIsIFwiMTB4MTBibHVlXCIsIFwiMTB4MTBncmVlblwiLCBcIjEweDEwbWFwbGVcIiwgXCIxMHgxMG9saXZlXCJdLCBwaWVjZXM6IFwiY2FwYVwiLCBQaWVjZUNTUzogW1wiY2FwYTBcIiwgXCJjYXBhMVwiLCBcImNhcGEyXCIsIFwiY2FwYTNcIl0sIGljb246IFwiR1wiIH0sXHJcbiAgICBncmFuZGhvdXNlOiB7IGdlb206IEdlb21ldHJ5LmRpbTEweDEwLCBjZzogXCJjZy02NDAtNjQwXCIsIGJvYXJkOiBcImJvYXJkMTB4MTBcIiwgQm9hcmRDU1M6IFtcIjEweDEwYnJvd25cIiwgXCIxMHgxMGJsdWVcIiwgXCIxMHgxMGdyZWVuXCIsIFwiMTB4MTBtYXBsZVwiLCBcIjEweDEwb2xpdmVcIl0sIHBpZWNlczogXCJjYXBhXCIsIFBpZWNlQ1NTOiBbXCJjYXBhMFwiLCBcImNhcGExXCIsIFwiY2FwYTJcIiwgXCJjYXBhM1wiXSwgaWNvbjogXCJHXCIsIGJhc2VVUkw6IFtcImNhcGFcIiwgXCJzZWlyXCIsIFwiZ3JlZW5cIiwgXCJtdXNrXCJdIH0sXHJcbiAgICBzZWlyYXdhbjogeyBnZW9tOiBHZW9tZXRyeS5kaW04eDgsIGNnOiBcImNnLTUxMlwiLCBib2FyZDogXCJib2FyZDh4OFwiLCBCb2FyZENTUzogW1wiOHg4YnJvd25cIiwgXCI4eDhibHVlXCIsIFwiOHg4Z3JlZW5cIiwgXCI4eDhtYXBsZVwiLCBcIjh4OG9saXZlXCJdLCBwaWVjZXM6IFwic2VpcmF3YW5cIiwgUGllY2VDU1M6IFtcInNlaXIxXCIsIFwic2VpcjBcIiwgXCJzZWlyMlwiLCBcInNlaXIzXCJdLCBpY29uOiBcIkxcIiwgYmFzZVVSTDogW1wic2VpclwiLCBcImNhcGFcIiwgXCJncmVlblwiLCBcIm11c2tcIl0gfSxcclxuICAgIHNob3VzZTogeyBnZW9tOiBHZW9tZXRyeS5kaW04eDgsIGNnOiBcImNnLTUxMlwiLCBib2FyZDogXCJib2FyZDh4OFwiLCBCb2FyZENTUzogW1wiOHg4YnJvd25cIiwgXCI4eDhibHVlXCIsIFwiOHg4Z3JlZW5cIiwgXCI4eDhtYXBsZVwiLCBcIjh4OG9saXZlXCJdLCBwaWVjZXM6IFwic2VpcmF3YW5cIiwgUGllY2VDU1M6IFtcInNlaXIxXCIsIFwic2VpcjBcIiwgXCJzZWlyMlwiLCBcInNlaXIzXCJdLCBpY29uOiBcIkxcIiwgYmFzZVVSTDogW1wic2VpclwiLCBcImNhcGFcIiwgXCJncmVlblwiLCBcIm11c2tcIl0gfSxcclxuICAgIHN0YW5kYXJkOiB7IGdlb206IEdlb21ldHJ5LmRpbTh4OCwgY2c6IFwiY2ctNTEyXCIsIGJvYXJkOiBcImJvYXJkOHg4XCIsIEJvYXJkQ1NTOiBbXCI4eDhicm93blwiLCBcIjh4OGJsdWVcIiwgXCI4eDhncmVlblwiLCBcIjh4OG1hcGxlXCIsIFwiOHg4b2xpdmVcIl0sIHBpZWNlczogXCJzdGFuZGFyZFwiLCBQaWVjZUNTUzogW1wic3RhbmRhcmRcIiwgXCJncmVlblwiLCBcImFscGhhXCJdLCBpY29uOiBcIk1cIiB9LFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcG9ja2V0Um9sZXModmFyaWFudDogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKHZhcmlhbnQpIHtcclxuICAgIGNhc2UgXCJzaXR0dXlpblwiOlxyXG4gICAgICAgIHJldHVybiBbXCJyb29rXCIsIFwia25pZ2h0XCIsIFwic2lsdmVyXCIsIFwiZmVyelwiLCBcImtpbmdcIl07XHJcbiAgICBjYXNlIFwiY3Jhenlob3VzZVwiOlxyXG4gICAgICAgIHJldHVybiBbXCJwYXduXCIsIFwia25pZ2h0XCIsIFwiYmlzaG9wXCIsIFwicm9va1wiLCBcInF1ZWVuXCJdO1xyXG4gICAgY2FzZSBcImdyYW5kaG91c2VcIjpcclxuICAgIGNhc2UgXCJnb3RoaG91c2VcIjpcclxuICAgIGNhc2UgXCJjYXBhaG91c2VcIjpcclxuICAgICAgICByZXR1cm4gW1wicGF3blwiLCBcImtuaWdodFwiLCBcImJpc2hvcFwiLCBcInJvb2tcIiwgXCJxdWVlblwiLCBcImFyY2hiaXNob3BcIiwgXCJjYW5jZWxsb3JcIl07XHJcbiAgICBjYXNlIFwic2hvZ2lcIjpcclxuICAgICAgICByZXR1cm4gW1wicGF3blwiLCBcImxhbmNlXCIsIFwia25pZ2h0XCIsIFwiYmlzaG9wXCIsIFwicm9va1wiLCBcInNpbHZlclwiLCBcImdvbGRcIl07XHJcbiAgICBjYXNlIFwibWluaXNob2dpXCI6XHJcbiAgICAgICAgcmV0dXJuIFtcInBhd25cIiwgXCJiaXNob3BcIiwgXCJyb29rXCIsIFwic2lsdmVyXCIsIFwiZ29sZFwiXTtcclxuICAgIGNhc2UgXCJzaG91c2VcIjpcclxuICAgICAgICByZXR1cm4gW1wicGF3blwiLCBcImtuaWdodFwiLCBcImJpc2hvcFwiLCBcInJvb2tcIiwgXCJxdWVlblwiLCBcImVsZXBoYW50XCIsIFwiaGF3a1wiXTtcclxuICAgIGNhc2UgXCJzZWlyYXdhblwiOlxyXG4gICAgICAgIHJldHVybiBbXCJlbGVwaGFudFwiLCBcImhhd2tcIl07XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBbXCJyb29rXCIsIFwia25pZ2h0XCIsIFwiYmlzaG9wXCIsIFwicXVlZW5cIiwgXCJraW5nXCJdO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9tb3Rpb25ab25lKHZhcmlhbnQ6IHN0cmluZywgY29sb3I6IHN0cmluZykge1xyXG4gICAgc3dpdGNoICh2YXJpYW50KSB7XHJcbiAgICBjYXNlICdzaG9naSc6XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gJ2E5YjljOWQ5ZTlmOWc5aDlpOWE4YjhjOGQ4ZThmOGc4aDhpOGE3YjdjN2Q3ZTdmN2c3aDdpNycgOiAnYTFiMWMxZDFlMWYxZzFoMWkxYTJiMmMyZDJlMmYyZzJoMmkyYTNiM2MzZDNlM2YzZzNoM2kzJztcclxuICAgIGNhc2UgJ21pbmlzaG9naSc6XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gJ2E1YjVjNWQ1ZTUnIDogJ2ExYjFjMWQxZTEnO1xyXG4gICAgY2FzZSAnY2FtYm9kaWFuJzpcclxuICAgIGNhc2UgJ21ha3J1ayc6XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gJ2E2YjZjNmQ2ZTZmNmc2aDYnIDogJ2EzYjNjM2QzZTNmM2czaDMnO1xyXG4gICAgY2FzZSAnc2l0dHV5aW4nOlxyXG4gICAgICAgIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/ICdhOGI3YzZkNWU1ZjZnN2g4JyA6ICdhMWIyYzNkNGU0ZjNnMmgxJztcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gJ2E4YjhjOGQ4ZThmOGc4aDhpOGo4JyA6ICdhMWIxYzFkMWUxZjFnMWgxaTFqMSc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9tb3Rpb25Sb2xlcyh2YXJpYW50OiBzdHJpbmcsIHJvbGU6IFJvbGUsIG9yaWc6IEtleSwgZGVzdDogS2V5LCBwcm9tb3Rpb25zKSB7XHJcbiAgICBzd2l0Y2ggKHZhcmlhbnQpIHtcclxuICAgIGNhc2UgXCJnb3RoaWNcIjpcclxuICAgIGNhc2UgXCJnb3RoaG91c2VcIjpcclxuICAgIGNhc2UgXCJjYXBhaG91c2VcIjpcclxuICAgIGNhc2UgXCJjYXBhYmxhbmNhXCI6XHJcbiAgICAgICAgcmV0dXJuIFtcInF1ZWVuXCIsIFwia25pZ2h0XCIsIFwicm9va1wiLCBcImJpc2hvcFwiLCBcImFyY2hiaXNob3BcIiwgXCJjYW5jZWxsb3JcIl07XHJcbiAgICBjYXNlIFwic2hvdXNlXCI6XHJcbiAgICBjYXNlIFwic2VpcmF3YW5cIjpcclxuICAgICAgICByZXR1cm4gW1wicXVlZW5cIiwgXCJrbmlnaHRcIiwgXCJyb29rXCIsIFwiYmlzaG9wXCIsIFwiZWxlcGhhbnRcIiwgXCJoYXdrXCJdO1xyXG4gICAgY2FzZSBcIm1pbmlzaG9naVwiOlxyXG4gICAgY2FzZSBcInNob2dpXCI6XHJcbiAgICAgICAgcmV0dXJuIFtcInBcIiArIHJvbGUsIHJvbGVdO1xyXG4gICAgY2FzZSBcImdyYW5kaG91c2VcIjpcclxuICAgIGNhc2UgXCJncmFuZFwiOlxyXG4gICAgICAgIHZhciByb2xlczogUm9sZVtdID0gW107XHJcbiAgICAgICAgY29uc3QgbW92ZXMgPSBwcm9tb3Rpb25zLm1hcCgobW92ZSkgPT4gbW92ZS5zbGljZSgwLCAtMSkpO1xyXG4gICAgICAgIHByb21vdGlvbnMuZm9yRWFjaCgobW92ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9sZSA9IHNhblRvUm9sZVttb3ZlLnNsaWNlKC0xKV07XHJcbiAgICAgICAgICAgIGlmIChtb3Zlcy5pbmRleE9mKG9yaWcgKyBkZXN0KSAhPT0gLTEgJiYgcm9sZXMuaW5kZXhPZihwcm9sZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByb2xlcy5wdXNoKHByb2xlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHByb21vdGlvbiBpcyBvcHRpb25hbCBleGNlcHQgb24gYmFjayByYW5rc1xyXG4gICAgICAgIGlmICgoZGVzdFsxXSAhPT0gXCI5XCIpICYmIChkZXN0WzFdICE9PSBcIjBcIikpIHJvbGVzLnB1c2gocm9sZSk7XHJcbiAgICAgICAgcmV0dXJuIHJvbGVzO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gW1wicXVlZW5cIiwgXCJrbmlnaHRcIiwgXCJyb29rXCIsIFwiYmlzaG9wXCJdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFuZGF0b3J5UHJvbW90aW9uKHZhcmlhbnQsIHJvbGU6IFJvbGUsIGRlc3Q6IEtleSwgY29sb3I6IENvbG9yKSB7XHJcbiAgICBpZiAodmFyaWFudCA9PT0gXCJtaW5pc2hvZ2lcIiAmJiByb2xlID09PSBcInBhd25cIikge1xyXG4gICAgICAgIGlmIChjb2xvciA9PT0gXCJ3aGl0ZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0WzFdID09PSBcIjVcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdFsxXSA9PT0gXCIxXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAocm9sZSkge1xyXG4gICAgY2FzZSBcInBhd25cIjpcclxuICAgIGNhc2UgXCJsYW5jZVwiOlxyXG4gICAgICAgIGlmIChjb2xvciA9PT0gXCJ3aGl0ZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0WzFdID09PSBcIjlcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdFsxXSA9PT0gXCIxXCI7XHJcbiAgICAgICAgfVxyXG4gICAgY2FzZSBcImtuaWdodFwiOlxyXG4gICAgICAgIGlmIChjb2xvciA9PT0gXCJ3aGl0ZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0WzFdID09PSBcIjlcIiB8fCBkZXN0WzFdID09PSBcIjhcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdFsxXSA9PT0gXCIxXCIgfHwgZGVzdFsxXSA9PT0gXCIyXCI7XHJcbiAgICAgICAgfVxyXG4gICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBuZWVkUG9ja2V0cyh2YXJpYW50OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB2YXJpYW50ID09PSAncGxhY2VtZW50JyB8fCB2YXJpYW50ID09PSAnY3Jhenlob3VzZScgfHwgdmFyaWFudCA9PT0gJ3NpdHR1eWluJyB8fCB2YXJpYW50LmVuZHNXaXRoKCdzaG9naScpIHx8IHZhcmlhbnQgPT09ICdzZWlyYXdhbicgfHwgdmFyaWFudCA9PT0gJ2NhcGFob3VzZScgfHwgdmFyaWFudCA9PT0gJ3Nob3VzZScgfHwgdmFyaWFudCA9PT0gJ2dyYW5kaG91c2UnIHx8IHZhcmlhbnQgPT09IFwiZ290aGhvdXNlXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBoYXNFcCh2YXJpYW50OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB2YXJpYW50ID09PSAnc3RhbmRhcmQnIHx8IHZhcmlhbnQgPT09ICdwbGFjZW1lbnQnIHx8IHZhcmlhbnQgPT09ICdjcmF6eWhvdXNlJyB8fCB2YXJpYW50ID09PSAnY2FwYWJsYW5jYScgfHwgdmFyaWFudCA9PT0gJ3NlaXJhd2FuJyB8fCB2YXJpYW50ID09PSAnY2FwYWhvdXNlJyB8fCB2YXJpYW50ID09PSAnc2hvdXNlJyB8fCB2YXJpYW50ID09PSAnZ3JhbmQnIHx8IHZhcmlhbnQgPT09ICdncmFuZGhvdXNlJyB8fCB2YXJpYW50ID09PSBcImdvdGhpY1wiIHx8IHZhcmlhbnQgPT09IFwiZ290aGhvdXNlXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRpZmYoYTogbnVtYmVyLCBiOm51bWJlcik6bnVtYmVyIHtcclxuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkaWFnb25hbE1vdmUocG9zMSwgcG9zMikge1xyXG4gICAgY29uc3QgeGQgPSBkaWZmKHBvczFbMF0sIHBvczJbMF0pO1xyXG4gICAgY29uc3QgeWQgPSBkaWZmKHBvczFbMV0sIHBvczJbMV0pO1xyXG4gICAgcmV0dXJuIHhkID09PSB5ZCAmJiB4ZCA9PT0gMTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbkdhdGUoZmVuLCBwaWVjZSwgb3JpZykge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCIgICBpc0dhdGluZygpXCIsIGZlbiwgcGllY2UsIG9yaWcpO1xyXG4gICAgY29uc3Qgbm9fZ2F0ZSA9IFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXVxyXG4gICAgaWYgKChwaWVjZS5jb2xvciA9PT0gXCJ3aGl0ZVwiICYmIG9yaWcuc2xpY2UoMSkgIT09IFwiMVwiKSB8fFxyXG4gICAgICAgIChwaWVjZS5jb2xvciA9PT0gXCJibGFja1wiICYmIG9yaWcuc2xpY2UoMSkgIT09IFwiOFwiKSB8fFxyXG4gICAgICAgIChwaWVjZS5yb2xlID09PSBcImhhd2tcIikgfHxcclxuICAgICAgICAocGllY2Uucm9sZSA9PT0gXCJlbGVwaGFudFwiKSkgcmV0dXJuIG5vX2dhdGU7XHJcblxyXG4gICAgLy8gSW4gc3RhcnRpbmcgcG9zaXRpb24ga2luZyBhbmQoISkgcm9vayB2aXJnaW5pdHkgaXMgZW5jb2RlZCBpbiBLUWtxXHJcbiAgICAvLyBcInJuYnFrYm5yL3BwcHBwcHBwLzgvOC84LzgvUFBQUFBQUFAvUk5CUUtCTlJbSEVoZV0gdyBLUUJDREZHa3FiY2RmZyAtIDAgMVwiXHJcblxyXG4gICAgLy8gYnV0IGFmdGVyIGtpbmdzIG1vdmVkIHJvb2sgdmlyZ2luaXR5IGlzIGVuY29kZWQgaW4gQUhhaFxyXG4gICAgLy8gcm5icTFibnIvcHBwcGtwcHAvOC80cDMvNFAzLzgvUFBQUEtQUFAvUk5CUTFCTlJbSEVoZV0gdyBBQkNERkdIYWJjZGZnaCAtIDIgM1xyXG5cclxuICAgIC8vIGtpbmcgdmlyZ2luaXR5IGlzIGVuY29kZWQgaW4gRWUgYWZ0ZXIgYW55IFJvb2sgbW92ZWQgYnV0IEtpbmcgbm90XHJcblxyXG4gICAgY29uc3QgcGFydHMgPSBmZW4uc3BsaXQoXCIgXCIpO1xyXG4gICAgY29uc3QgcGxhY2VtZW50ID0gcGFydHNbMF07XHJcbiAgICBjb25zdCBjb2xvciA9IHBhcnRzWzFdO1xyXG4gICAgY29uc3QgY2FzdGwgPSBwYXJ0c1syXTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiaXNHYXRpbmcoKVwiLCBvcmlnLCBwbGFjZW1lbnQsIGNvbG9yLCBjYXN0bCk7XHJcbiAgICBzd2l0Y2ggKG9yaWcpIHtcclxuICAgIGNhc2UgXCJhMVwiOlxyXG4gICAgICAgIGlmIChjYXN0bC5pbmRleE9mKFwiQVwiKSA9PT0gLTEgJiYgY2FzdGwuaW5kZXhPZihcIlFcIikgPT09IC0xKSByZXR1cm4gbm9fZ2F0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJiMVwiOlxyXG4gICAgICAgIGlmIChjYXN0bC5pbmRleE9mKFwiQlwiKSA9PT0gLTEpIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImMxXCI6XHJcbiAgICAgICAgaWYgKGNhc3RsLmluZGV4T2YoXCJDXCIpID09PSAtMSkgcmV0dXJuIG5vX2dhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIFwiZDFcIjpcclxuICAgICAgICBpZiAoY2FzdGwuaW5kZXhPZihcIkRcIikgPT09IC0xKSByZXR1cm4gbm9fZ2F0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJlMVwiOlxyXG4gICAgICAgIGlmIChwaWVjZS5yb2xlICE9PSBcImtpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gbm9fZ2F0ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKChjYXN0bC5pbmRleE9mKFwiS1wiKSA9PT0gLTEpICYmIChjYXN0bC5pbmRleE9mKFwiUVwiKSA9PT0gLTEpICYmIChjYXN0bC5pbmRleE9mKFwiRVwiKSA9PT0gLTEpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIFwiZjFcIjpcclxuICAgICAgICBpZiAoY2FzdGwuaW5kZXhPZihcIkZcIikgPT09IC0xKSByZXR1cm4gbm9fZ2F0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJnMVwiOlxyXG4gICAgICAgIGlmIChjYXN0bC5pbmRleE9mKFwiR1wiKSA9PT0gLTEpIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImgxXCI6XHJcbiAgICAgICAgaWYgKGNhc3RsLmluZGV4T2YoXCJIXCIpID09PSAtMSAmJiBjYXN0bC5pbmRleE9mKFwiS1wiKSA9PT0gLTEpIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImE4XCI6XHJcbiAgICAgICAgaWYgKGNhc3RsLmluZGV4T2YoXCJhXCIpID09PSAtMSAmJiBjYXN0bC5pbmRleE9mKFwicVwiKSA9PT0gLTEpIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImI4XCI6XHJcbiAgICAgICAgaWYgKGNhc3RsLmluZGV4T2YoXCJiXCIpID09PSAtMSkgcmV0dXJuIG5vX2dhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIFwiYzhcIjpcclxuICAgICAgICBpZiAoY2FzdGwuaW5kZXhPZihcImNcIikgPT09IC0xKSByZXR1cm4gbm9fZ2F0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJkOFwiOlxyXG4gICAgICAgIGlmIChjYXN0bC5pbmRleE9mKFwiZFwiKSA9PT0gLTEpIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImU4XCI6XHJcbiAgICAgICAgaWYgKHBpZWNlLnJvbGUgIT09IFwia2luZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKGNhc3RsLmluZGV4T2YoXCJrXCIpID09PSAtMSkgJiYgKGNhc3RsLmluZGV4T2YoXCJxXCIpID09PSAtMSkgJiYgKGNhc3RsLmluZGV4T2YoXCJlXCIpID09PSAtMSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5vX2dhdGU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgXCJmOFwiOlxyXG4gICAgICAgIGlmIChjYXN0bC5pbmRleE9mKFwiZlwiKSA9PT0gLTEpIHJldHVybiBub19nYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcImc4XCI6XHJcbiAgICAgICAgaWYgKGNhc3RsLmluZGV4T2YoXCJnXCIpID09PSAtMSkgcmV0dXJuIG5vX2dhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIFwiaDhcIjpcclxuICAgICAgICBpZiAoY2FzdGwuaW5kZXhPZihcImhcIikgPT09IC0xICYmIGNhc3RsLmluZGV4T2YoXCJrXCIpID09PSAtMSkgcmV0dXJuIG5vX2dhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgYnJhY2tldFBvcyA9IHBsYWNlbWVudC5pbmRleE9mKFwiW1wiKTtcclxuICAgIGNvbnN0IHBvY2tldHMgPSBwbGFjZW1lbnQuc2xpY2UoYnJhY2tldFBvcyk7XHJcbiAgICBjb25zdCBwaCA9IGxjKHBvY2tldHMsIFwiaFwiLCBjb2xvcj09PSd3JykgIT09IDA7XHJcbiAgICBjb25zdCBwZSA9IGxjKHBvY2tldHMsIFwiZVwiLCBjb2xvcj09PSd3JykgIT09IDA7XHJcbiAgICBjb25zdCBwcSA9IGxjKHBvY2tldHMsIFwicVwiLCBjb2xvcj09PSd3JykgIT09IDA7XHJcbiAgICBjb25zdCBwciA9IGxjKHBvY2tldHMsIFwiclwiLCBjb2xvcj09PSd3JykgIT09IDA7XHJcbiAgICBjb25zdCBwYiA9IGxjKHBvY2tldHMsIFwiYlwiLCBjb2xvcj09PSd3JykgIT09IDA7XHJcbiAgICBjb25zdCBwbiA9IGxjKHBvY2tldHMsIFwiblwiLCBjb2xvcj09PSd3JykgIT09IDA7XHJcblxyXG4gICAgcmV0dXJuIFtwaCwgcGUsIHBxLCBwciwgcGIsIHBuXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvbW90aW9uKHZhcmlhbnQsIHBpZWNlLCBvcmlnLCBkZXN0LCBtZXRhLCBwcm9tb3Rpb25zKSB7XHJcbiAgICBpZiAodmFyaWFudCA9PT0gJ3hpYW5ncWknKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBweiA9IHByb21vdGlvblpvbmUodmFyaWFudCwgcGllY2UuY29sb3IpXHJcbiAgICBzd2l0Y2ggKHZhcmlhbnQpIHtcclxuICAgIGNhc2UgJ3Nob2dpJzpcclxuICAgICAgICByZXR1cm4gWydraW5nJywgJ2dvbGQnLCAncHBhd24nLCAncGtuaWdodCcsICdwYmlzaG9wJywgJ3Byb29rJywgJ3BzaWx2ZXInLCAncGxhbmNlJ10uaW5kZXhPZihwaWVjZS5yb2xlKSA9PT0gLTFcclxuICAgICAgICAgICAgJiYgKHB6LmluZGV4T2Yob3JpZykgIT09IC0xIHx8IHB6LmluZGV4T2YoZGVzdCkgIT09IC0xKTtcclxuICAgIGNhc2UgJ21pbmlzaG9naSc6XHJcbiAgICAgICAgcmV0dXJuIFsna2luZycsICdnb2xkJywgJ3BwYXduJywgJ3BiaXNob3AnLCAncHJvb2snLCAncHNpbHZlciddLmluZGV4T2YocGllY2Uucm9sZSkgPT09IC0xXHJcbiAgICAgICAgICAgICYmIChwei5pbmRleE9mKG9yaWcpICE9PSAtMSB8fCBwei5pbmRleE9mKGRlc3QpICE9PSAtMSk7XHJcbiAgICBjYXNlICdzaXR0dXlpbic6XHJcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vdmRvY3VtZW50cy5uZXQvaG93LXRvLXBsYXktbXlhbm1hci10cmFkaXRpb25hbC1jaGVzcy1lbmctYm9vay0xLmh0bWxcclxuICAgICAgICBjb25zdCBmaXJzdFJhbmtJczAgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBkbSA9IGRpYWdvbmFsTW92ZShrZXkycG9zKG9yaWcsIGZpcnN0UmFua0lzMCksIGtleTJwb3MoZGVzdCwgZmlyc3RSYW5rSXMwKSk7XHJcbiAgICAgICAgcmV0dXJuIHBpZWNlLnJvbGUgPT09IFwicGF3blwiICYmICggb3JpZyA9PT0gZGVzdCB8fCAoIW1ldGEuY2FwdHVyZWQgJiYgZG0pKTtcclxuICAgIGNhc2UgJ2dyYW5kaG91c2UnOlxyXG4gICAgY2FzZSAnZ3JhbmQnOlxyXG4gICAgICAgIC8vIFRPRE86IHdlIGNhbiB1c2UgdGhpcyBmb3Igb3RoZXIgdmFyaWFudHMgYWxzb1xyXG4gICAgICAgIHJldHVybiBwcm9tb3Rpb25zLm1hcCgobW92ZSkgPT4gbW92ZS5zbGljZSgwLCAtMSkpLmluZGV4T2Yob3JpZyArIGRlc3QpICE9PSAtMTtcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHBpZWNlLnJvbGUgPT09IFwicGF3blwiICYmIHB6LmluZGV4T2YoZGVzdCkgIT09IC0xO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdWNpMnVzaShtb3ZlKSB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IG1vdmUuc3BsaXQoXCJcIik7XHJcbiAgICBpZiAocGFydHNbMV0gPT09IFwiQFwiKSB7XHJcbiAgICAgICAgcGFydHNbMV0gPSBcIipcIjtcclxuICAgICAgICBwYXJ0c1syXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFydHNbMl0uY2hhckNvZGVBdCgpIC0gNDgpXHJcbiAgICAgICAgcGFydHNbM10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnRzWzNdLmNoYXJDb2RlQXQoKSArIDQ4KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBwYXJ0c1swXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFydHNbMF0uY2hhckNvZGVBdCgpIC0gNDgpXHJcbiAgICAgICAgcGFydHNbMV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnRzWzFdLmNoYXJDb2RlQXQoKSArIDQ4KVxyXG4gICAgICAgIHBhcnRzWzJdID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJ0c1syXS5jaGFyQ29kZUF0KCkgLSA0OClcclxuICAgICAgICBwYXJ0c1szXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFydHNbM10uY2hhckNvZGVBdCgpICsgNDgpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVzaTJ1Y2kobW92ZSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJ1c2kydWNpKClcIiwgbW92ZSk7XHJcbiAgICBjb25zdCBwYXJ0cyA9IG1vdmUuc3BsaXQoXCJcIik7XHJcbiAgICBpZiAocGFydHNbMV0gPT09IFwiKlwiKSB7XHJcbiAgICAgICAgcGFydHNbMV0gPSBcIkBcIjtcclxuICAgICAgICBwYXJ0c1syXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFydHNbMl0uY2hhckNvZGVBdCgpICsgNDgpXHJcbiAgICAgICAgcGFydHNbM10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnRzWzNdLmNoYXJDb2RlQXQoKSAtIDQ4KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBwYXJ0c1swXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFydHNbMF0uY2hhckNvZGVBdCgpICsgNDgpXHJcbiAgICAgICAgcGFydHNbMV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnRzWzFdLmNoYXJDb2RlQXQoKSAtIDQ4KVxyXG4gICAgICAgIHBhcnRzWzJdID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJ0c1syXS5jaGFyQ29kZUF0KCkgKyA0OClcclxuICAgICAgICBwYXJ0c1szXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFydHNbM10uY2hhckNvZGVBdCgpIC0gNDgpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHplcm8yZ3JhbmQobW92ZSkge1xyXG4gICAgY29uc3QgcGFydHMgPSBtb3ZlLnNwbGl0KFwiXCIpO1xyXG4gICAgaWYgKHBhcnRzWzFdICE9PSBcIkBcIikge1xyXG4gICAgICAgIHBhcnRzWzFdID0gU3RyaW5nKE51bWJlcihwYXJ0c1sxXSkgKyAxKTtcclxuICAgIH1cclxuICAgIHBhcnRzWzNdID0gU3RyaW5nKE51bWJlcihwYXJ0c1szXSkgKyAxKTtcclxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ3JhbmQyemVybyhtb3ZlKSB7XHJcbiAgICAvLyBjdXQgb2ZmIHByb21vdGlvbiBwaWVjZSBsZXR0ZXJcclxuICAgIHZhciBwcm9tbyA9ICcnO1xyXG4gICAgaWYgKCcwMTIzNDU2Nzg5Jy5pbmRleE9mKG1vdmUuc2xpY2UoLTEpKSA9PT0gLTEpIHtcclxuICAgICAgICBwcm9tbyA9IG1vdmUuc2xpY2UoLTEpO1xyXG4gICAgICAgIG1vdmUgPSBtb3ZlLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhcnRzID0gbW92ZS5zcGxpdChcIlwiKTtcclxuXHJcbiAgICBpZiAocGFydHNbMV0gPT09ICdAJykge1xyXG4gICAgICAgIHJldHVybiBwYXJ0c1swXSArIHBhcnRzWzFdICsgcGFydHNbMl0gKyBTdHJpbmcoTnVtYmVyKG1vdmUuc2xpY2UoMykpIC0gMSk7XHJcbiAgICB9XHJcbiAgICBpZiAoJzAxMjM0NTY3ODknLmluZGV4T2YocGFydHNbMl0pICE9PSAtMSkge1xyXG4gICAgICAgIHBhcnRzWzFdID0gU3RyaW5nKE51bWJlcihwYXJ0c1sxXSArIHBhcnRzWzJdKSAtMSk7XHJcbiAgICAgICAgcGFydHNbNF0gPSBTdHJpbmcoTnVtYmVyKG1vdmUuc2xpY2UoNCkpIC0gMSk7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRzWzBdICsgcGFydHNbMV0gKyBwYXJ0c1szXSArIHBhcnRzWzRdICsgcHJvbW87XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcnRzWzFdID0gU3RyaW5nKE51bWJlcihwYXJ0c1sxXSkgLTEpO1xyXG4gICAgICAgIHBhcnRzWzNdID0gU3RyaW5nKE51bWJlcihtb3ZlLnNsaWNlKDMpKSAtIDEpO1xyXG4gICAgICAgIHJldHVybiBwYXJ0c1swXSArIHBhcnRzWzFdICsgcGFydHNbMl0gKyBwYXJ0c1szXSArIHByb21vO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgcm9sZVRvU2FuID0ge1xyXG4gICAgcGF3bjogJ1AnLFxyXG4gICAga25pZ2h0OiAnTicsXHJcbiAgICBiaXNob3A6ICdCJyxcclxuICAgIHJvb2s6ICdSJyxcclxuICAgIHF1ZWVuOiAnUScsXHJcbiAgICBraW5nOiAnSycsXHJcbiAgICBhcmNoYmlzaG9wOiAnQScsXHJcbiAgICBjYW5jZWxsb3I6ICdDJyxcclxuICAgIGVsZXBoYW50OiBcIkVcIixcclxuICAgIGhhd2s6IFwiSFwiLFxyXG4gICAgZmVyejogJ0YnLFxyXG4gICAgbWV0OiAnTScsXHJcbiAgICBnb2xkOiAnRycsXHJcbiAgICBzaWx2ZXI6ICdTJyxcclxuICAgIGxhbmNlOiAnTCcsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgc2FuVG9Sb2xlID0ge1xyXG4gICAgUDogJ3Bhd24nLFxyXG4gICAgTjogJ2tuaWdodCcsXHJcbiAgICBCOiAnYmlzaG9wJyxcclxuICAgIFI6ICdyb29rJyxcclxuICAgIFE6ICdxdWVlbicsXHJcbiAgICBLOiAna2luZycsXHJcbiAgICBBOiAnYXJjaGJpc2hvcCcsXHJcbiAgICBDOiAnY2FuY2VsbG9yJyxcclxuICAgIEU6ICdlbGVwaGFudCcsXHJcbiAgICBIOiAnaGF3aycsXHJcbiAgICBGOiAnZmVyeicsXHJcbiAgICBNOiAnbWV0JyxcclxuICAgIEc6ICdnb2xkJyxcclxuICAgIFM6ICdzaWx2ZXInLFxyXG4gICAgTDogJ2xhbmNlJyxcclxuICAgIHA6ICdwYXduJyxcclxuICAgIG46ICdrbmlnaHQnLFxyXG4gICAgYjogJ2Jpc2hvcCcsXHJcbiAgICByOiAncm9vaycsXHJcbiAgICBxOiAncXVlZW4nLFxyXG4gICAgazogJ2tpbmcnLFxyXG4gICAgYTogJ2FyY2hiaXNob3AnLFxyXG4gICAgYzogJ2NhbmNlbGxvcicsXHJcbiAgICBlOiAnZWxlcGhhbnQnLFxyXG4gICAgaDogJ2hhd2snLFxyXG4gICAgZjogJ2ZlcnonLFxyXG4gICAgbTogJ21ldCcsXHJcbiAgICBnOiAnZ29sZCcsXHJcbiAgICBzOiAnc2lsdmVyJyxcclxuICAgIGw6ICdsYW5jZScsXHJcbn07XHJcblxyXG4vLyBDb3VudCBnaXZlbiBsZXR0ZXIgb2NjdXJlbmNlcyBpbiBhIHN0cmluZ1xyXG5leHBvcnQgZnVuY3Rpb24gbGMoc3RyLCBsZXR0ZXIsIHVwcGVyY2FzZSkge1xyXG4gICAgdmFyIGxldHRlckNvdW50ID0gMDtcclxuICAgIGlmICh1cHBlcmNhc2UpIGxldHRlciA9IGxldHRlci50b1VwcGVyQ2FzZSgpO1xyXG4gICAgZm9yICh2YXIgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IHN0ci5sZW5ndGg7IHBvc2l0aW9uKyspIHtcclxuICAgICAgICBpZiAoc3RyLmNoYXJBdChwb3NpdGlvbikgPT09IGxldHRlcikgbGV0dGVyQ291bnQgKz0gMTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZXR0ZXJDb3VudDtcclxufVxyXG4iLCIvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MDAyMTIvaG93LWRvLWktY29weS10by10aGUtY2xpcGJvYXJkLWluLWphdmFzY3JpcHRcbmV4cG9ydCBmdW5jdGlvbiBjb3B5VGV4dFRvQ2xpcGJvYXJkKHRleHQpIHtcbiAgICB2YXIgdGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG5cbiAgICAvL1xuICAgIC8vICoqKiBUaGlzIHN0eWxpbmcgaXMgYW4gZXh0cmEgc3RlcCB3aGljaCBpcyBsaWtlbHkgbm90IHJlcXVpcmVkLiAqKipcbiAgICAvL1xuICAgIC8vIFdoeSBpcyBpdCBoZXJlPyBUbyBlbnN1cmU6XG4gICAgLy8gMS4gdGhlIGVsZW1lbnQgaXMgYWJsZSB0byBoYXZlIGZvY3VzIGFuZCBzZWxlY3Rpb24uXG4gICAgLy8gMi4gaWYgZWxlbWVudCB3YXMgdG8gZmxhc2ggcmVuZGVyIGl0IGhhcyBtaW5pbWFsIHZpc3VhbCBpbXBhY3QuXG4gICAgLy8gMy4gbGVzcyBmbGFreW5lc3Mgd2l0aCBzZWxlY3Rpb24gYW5kIGNvcHlpbmcgd2hpY2ggKiptaWdodCoqIG9jY3VyIGlmXG4gICAgLy8gICAgdGhlIHRleHRhcmVhIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG4gICAgLy9cbiAgICAvLyBUaGUgbGlrZWxpaG9vZCBpcyB0aGUgZWxlbWVudCB3b24ndCBldmVuIHJlbmRlciwgbm90IGV2ZW4gYVxuICAgIC8vIGZsYXNoLCBzbyBzb21lIG9mIHRoZXNlIGFyZSBqdXN0IHByZWNhdXRpb25zLiBIb3dldmVyIGluXG4gICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSB3aGlsc3QgdGhlIHBvcHVwXG4gICAgLy8gYm94IGFza2luZyB0aGUgdXNlciBmb3IgcGVybWlzc2lvbiBmb3IgdGhlIHdlYiBwYWdlIHRvXG4gICAgLy8gY29weSB0byB0aGUgY2xpcGJvYXJkLlxuICAgIC8vXG5cbiAgICAvLyBQbGFjZSBpbiB0b3AtbGVmdCBjb3JuZXIgb2Ygc2NyZWVuIHJlZ2FyZGxlc3Mgb2Ygc2Nyb2xsIHBvc2l0aW9uLlxuICAgIHRleHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICB0ZXh0QXJlYS5zdHlsZS50b3AgPSAnMCc7XG4gICAgdGV4dEFyZWEuc3R5bGUubGVmdCA9ICcwJztcblxuICAgIC8vIEVuc3VyZSBpdCBoYXMgYSBzbWFsbCB3aWR0aCBhbmQgaGVpZ2h0LiBTZXR0aW5nIHRvIDFweCAvIDFlbVxuICAgIC8vIGRvZXNuJ3Qgd29yayBhcyB0aGlzIGdpdmVzIGEgbmVnYXRpdmUgdy9oIG9uIHNvbWUgYnJvd3NlcnMuXG4gICAgdGV4dEFyZWEuc3R5bGUud2lkdGggPSAnMmVtJztcbiAgICB0ZXh0QXJlYS5zdHlsZS5oZWlnaHQgPSAnMmVtJztcblxuICAgIC8vIFdlIGRvbid0IG5lZWQgcGFkZGluZywgcmVkdWNpbmcgdGhlIHNpemUgaWYgaXQgZG9lcyBmbGFzaCByZW5kZXIuXG4gICAgdGV4dEFyZWEuc3R5bGUucGFkZGluZyA9ICcwJztcblxuICAgIC8vIENsZWFuIHVwIGFueSBib3JkZXJzLlxuICAgIHRleHRBcmVhLnN0eWxlLmJvcmRlciA9ICdub25lJztcbiAgICB0ZXh0QXJlYS5zdHlsZS5vdXRsaW5lID0gJ25vbmUnO1xuICAgIHRleHRBcmVhLnN0eWxlLmJveFNoYWRvdyA9ICdub25lJztcblxuICAgIC8vIEF2b2lkIGZsYXNoIG9mIHdoaXRlIGJveCBpZiByZW5kZXJlZCBmb3IgYW55IHJlYXNvbi5cbiAgICB0ZXh0QXJlYS5zdHlsZS5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JztcblxuXG4gICAgdGV4dEFyZWEudmFsdWUgPSB0ZXh0O1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0QXJlYSk7XG4gICAgdGV4dEFyZWEuZm9jdXMoKTtcbiAgICB0ZXh0QXJlYS5zZWxlY3QoKTtcblxuICAgIHRyeSB7XG4gICAgICAgIHZhciBzdWNjZXNzZnVsID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgICAgdmFyIG1zZyA9IHN1Y2Nlc3NmdWwgPyAnc3VjY2Vzc2Z1bCcgOiAndW5zdWNjZXNzZnVsJztcbiAgICAgICAgY29uc29sZS5sb2coJ0NvcHlpbmcgdGV4dCBjb21tYW5kIHdhcyAnICsgbXNnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ09vcHMsIHVuYWJsZSB0byBjb3B5Jyk7XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0QXJlYSk7XG59XG4iLCIvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMDYxODM1NS90aGUtc2ltcGxlc3QtcG9zc2libGUtamF2YXNjcmlwdC1jb3VudGRvd24tdGltZXJcblxuaW1wb3J0IHsgaCwgaW5pdCB9IGZyb20gXCJzbmFiYmRvbVwiO1xuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvcHJvcHMnO1xuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcblxuY29uc3QgcGF0Y2ggPSBpbml0KFtrbGFzcywgYXR0cmlidXRlcywgcHJvcGVydGllcywgbGlzdGVuZXJzXSk7XG5cbmV4cG9ydCBjbGFzcyBDbG9jayB7XG4gICAgZHVyYXRpb246IG51bWJlcjtcbiAgICBpbmNyZW1lbnQ6IG51bWJlcjtcbiAgICBncmFudWxhcml0eTogbnVtYmVyO1xuICAgIHJ1bm5pbmc6IGJvb2xlYW47XG4gICAgY29ubmVjdGluZzogYm9vbGVhbjtcbiAgICB0aW1lb3V0OiBhbnk7XG4gICAgc3RhcnRUaW1lOiBhbnk7XG4gICAgdGlja0NhbGxiYWNrczogYW55W107XG4gICAgZmxhZ0NhbGxiYWNrOiBhbnk7XG4gICAgZWw6IEhUTUxFbGVtZW50O1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvLyBnYW1lIGJhc2VUaW1lIChtaW4pIGFuZCBpbmNyZW1lbnQgKHNlYylcbiAgICBjb25zdHJ1Y3RvcihiYXNlVGltZSwgaW5jcmVtZW50LCBlbCwgaWQpIHtcbiAgICB0aGlzLmR1cmF0aW9uID0gYmFzZVRpbWUgKiAxMDAwICogNjA7XG4gICAgdGhpcy5pbmNyZW1lbnQgPSBpbmNyZW1lbnQgKiAxMDAwO1xuICAgIHRoaXMuZ3JhbnVsYXJpdHkgPSA1MDA7XG4gICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jb25uZWN0aW5nID0gZmFsc2U7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLnN0YXJ0VGltZSA9IG51bGw7XG4gICAgdGhpcy50aWNrQ2FsbGJhY2tzID0gW107XG4gICAgdGhpcy5mbGFnQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMuZWwgPSBlbDtcbiAgICB0aGlzLmlkID0gaWQ7XG5cbiAgICByZW5kZXJUaW1lKHRoaXMsIHRoaXMuZHVyYXRpb24pO1xuICAgIH1cblxuICAgIHN0YXJ0ID0gKGR1cmF0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJ1bm5pbmcpIHJldHVybjtcbiAgICAgICAgaWYgKHR5cGVvZiBkdXJhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuXG4gICAgICAgIHRoaXMucnVubmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgZGlmZjtcblxuICAgICAgICAoZnVuY3Rpb24gdGltZXIoKSB7XG4gICAgICAgICAgICBkaWZmID0gdGhhdC5kdXJhdGlvbiAtIChEYXRlLm5vdygpIC0gdGhhdC5zdGFydFRpbWUpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJ0aW1lcigpXCIsIHRoYXQuZHVyYXRpb24sIHRoYXQuc3RhcnRUaW1lLCBkaWZmKTtcbiAgICAgICAgICAgIGlmIChkaWZmIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGF0LmZsYWdDYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIHRoYXQucGF1c2UoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoYXQudGltZW91dCA9IHNldFRpbWVvdXQodGltZXIsIHRoYXQuZ3JhbnVsYXJpdHkpO1xuICAgICAgICAgICAgdGhhdC50aWNrQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoYXQsIHRoYXQsIGRpZmYpO1xuICAgICAgICAgICAgfSwgdGhhdCk7XG4gICAgICAgIH0oKSk7XG4gICAgfVxuXG4gICAgb25UaWNrID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMudGlja0NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvbkZsYWcgPSAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5wYXVzZShmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmZsYWdDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHBhdXNlID0gKHdpdGhJbmNyZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybjtcblxuICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMudGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5kdXJhdGlvbiAtPSBEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWU7XG4gICAgICAgIGlmICh3aXRoSW5jcmVtZW50ICYmIHRoaXMuaW5jcmVtZW50KSB0aGlzLmR1cmF0aW9uICs9IHRoaXMuaW5jcmVtZW50O1xuICAgICAgICByZW5kZXJUaW1lKHRoaXMsIHRoaXMuZHVyYXRpb24pO1xuICAgIH1cblxuICAgIHNldFRpbWUgPSAobWlsbGlzKSA9PiB7XG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSBtaWxsaXM7XG4gICAgICAgIHJlbmRlclRpbWUodGhpcywgdGhpcy5kdXJhdGlvbik7XG4gICAgfVxuXG4gICAgcGFyc2VUaW1lID0gKG1pbGxpcykgPT4ge1xuICAgICAgICBsZXQgbWludXRlcyA9IE1hdGguZmxvb3IobWlsbGlzIC8gNjAwMDApO1xuICAgICAgICBsZXQgc2Vjb25kcyA9IChtaWxsaXMgJSA2MDAwMCkgLyAxMDAwO1xuICAgICAgICBsZXQgc2VjcywgbWlucztcbiAgICAgICAgaWYgKE1hdGguZmxvb3Ioc2Vjb25kcykgPT0gNjApIHtcbiAgICAgICAgICAgIG1pbnV0ZXMrKztcbiAgICAgICAgICAgIHNlY29uZHMgPSAwO1xuICAgICAgICB9XG4gICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1heCgwLCBtaW51dGVzKTtcbiAgICAgICAgc2Vjb25kcyA9IE1hdGgubWF4KDAsIHNlY29uZHMpO1xuICAgICAgICBpZiAobWlsbGlzIDwgMTAwMDApIHtcbiAgICAgICAgICAgIHNlY3MgPSBzZWNvbmRzLnRvRml4ZWQoMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWNzID0gU3RyaW5nKE1hdGguZmxvb3Ioc2Vjb25kcykpO1xuICAgICAgICB9XG4gICAgICAgIG1pbnMgPSAobWludXRlcyA8IDEwID8gXCIwXCIgOiBcIlwiKSArIFN0cmluZyhtaW51dGVzKTtcbiAgICAgICAgc2VjcyA9IChzZWNvbmRzIDwgMTAgPyBcIjBcIiA6IFwiXCIpICsgc2VjcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pbnV0ZXM6IG1pbnMsXG4gICAgICAgICAgICBzZWNvbmRzOiBzZWNzLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRpbWUoY2xvY2ssIHRpbWUpIHtcbiAgICBpZiAoY2xvY2suZ3JhbnVsYXJpdHkgPiAxMDAgJiYgdGltZSA8IDEwMDAwKSBjbG9jay5ncmFudWxhcml0eSA9IDEwMDtcbiAgICBjb25zdCBwYXJzZWQgPSBjbG9jay5wYXJzZVRpbWUodGltZSk7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJUaW1lKCk6XCIsIHRpbWUsIHBhcnNlZCk7XG5cbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZSk7XG4gICAgY29uc3QgbWlsbGlzID0gZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgICBjbG9jay5lbCA9IHBhdGNoKGNsb2NrLmVsLCBoKCdkaXYuY2xvY2std3JhcCMnICsgY2xvY2suaWQsIFtcbiAgICAgICAgaCgnZGl2LmNsb2NrJywgW1xuICAgICAgICAgICAgaCgnZGl2LmNsb2NrLnRpbWUubWluJywge2NsYXNzOiB7cnVubmluZzogY2xvY2sucnVubmluZywgaHVycnk6IHRpbWUgPCAxMDAwMCwgY29ubmVjdGluZzogY2xvY2suY29ubmVjdGluZ319LCBwYXJzZWQubWludXRlcyksXG4gICAgICAgICAgICBoKCdkaXYuY2xvY2suc2VwJywge2NsYXNzOiB7cnVubmluZzogY2xvY2sucnVubmluZywgaHVycnk6IHRpbWUgPCAxMDAwMCwgbG93OiBtaWxsaXMgPCA1MDAsIGNvbm5lY3Rpbmc6IGNsb2NrLmNvbm5lY3Rpbmd9fSAsICc6JyksXG4gICAgICAgICAgICBoKCdkaXYuY2xvY2sudGltZS5zZWMnLCB7Y2xhc3M6IHtydW5uaW5nOiBjbG9jay5ydW5uaW5nLCBodXJyeTogdGltZSA8IDEwMDAwLCBjb25uZWN0aW5nOiBjbG9jay5jb25uZWN0aW5nfX0sIHBhcnNlZC5zZWNvbmRzKVxuICAgICAgICBdKVxuICAgIF0pXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVhZ28oZGF0ZSkge1xuICAgIGNvbnN0IFRaZGF0ZSA9IG5ldyBEYXRlKGRhdGUgKyAnWicpO1xuICAgIHZhciB2YWwgPSAwIHwgKERhdGUubm93KCkgLSBUWmRhdGUuZ2V0VGltZSgpKSAvIDEwMDA7XG4gICAgdmFyIHVuaXQsIGxlbmd0aCA9IHsgc2Vjb25kOiA2MCwgbWludXRlOiA2MCwgaG91cjogMjQsIGRheTogNywgd2VlazogNC4zNSxcbiAgICAgICAgbW9udGg6IDEyLCB5ZWFyOiAxMDAwMCB9LCByZXN1bHQ7XG4gXG4gICAgZm9yICh1bml0IGluIGxlbmd0aCkge1xuICAgICAgICByZXN1bHQgPSB2YWwgJSBsZW5ndGhbdW5pdF07XG4gICAgICAgIGlmICghKHZhbCA9IDAgfCB2YWwgLyBsZW5ndGhbdW5pdF0pKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICcgJyArIChyZXN1bHQtMSA/IHVuaXQgKyAncycgOiB1bml0KSArICcgYWdvJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVGltZWFnbygpIHtcbiAgICB2YXIgeCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5mby1kYXRlXCIpO1xuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHhbaV0uaW5uZXJIVE1MID0gdGltZWFnbyh4W2ldLmdldEF0dHJpYnV0ZSgndGltZXN0YW1wJykpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KHJlbmRlclRpbWVhZ28sIDEyMDApO1xufSIsImltcG9ydCB7IGluaXQgfSBmcm9tICdzbmFiYmRvbSc7XHJcbmltcG9ydCBrbGFzcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2NsYXNzJztcclxuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcclxuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9wcm9wcyc7XHJcbmltcG9ydCBsaXN0ZW5lcnMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9ldmVudGxpc3RlbmVycyc7XHJcblxyXG5jb25zdCBwYXRjaCA9IGluaXQoW2tsYXNzLCBhdHRyaWJ1dGVzLCBwcm9wZXJ0aWVzLCBsaXN0ZW5lcnNdKTtcclxuXHJcbmltcG9ydCBoIGZyb20gJ3NuYWJiZG9tL2gnO1xyXG5pbXBvcnQgeyBWTm9kZSB9IGZyb20gJ3NuYWJiZG9tL3Zub2RlJztcclxuXHJcbmltcG9ydCB7IENoZXNzZ3JvdW5kIH0gZnJvbSAnY2hlc3Nncm91bmR4JztcclxuXHJcbmltcG9ydCB7IHJlbmRlclVzZXJuYW1lIH0gZnJvbSAnLi91c2VyJztcclxuaW1wb3J0IHsgVkFSSUFOVFMsIHVzaTJ1Y2ksIGdyYW5kMnplcm8gfSBmcm9tICcuL2NoZXNzJztcclxuXHJcbmZ1bmN0aW9uIHJlbmRlckdhbWUobW9kZWwsIGdhbWVzLCBnYW1lLCBmZW4sIGxhc3RNb3ZlKSB7XHJcbiAgICByZXR1cm4gaCgnbWluaWdhbWUjJyArIGdhbWUuZ2FtZUlkICsgJy4nICsgVkFSSUFOVFNbZ2FtZS52YXJpYW50XS5ib2FyZCArICcuJyArIFZBUklBTlRTW2dhbWUudmFyaWFudF0ucGllY2VzLFxyXG4gICAgICAgICAgICAgICAgeyBvbjogeyBjbGljazogKCkgPT4geyB3aW5kb3cubG9jYXRpb24uYXNzaWduKG1vZGVsW1wiaG9tZVwiXSArICcvJyArIGdhbWUuZ2FtZUlkKTsgfSB9IH0sXHJcbiAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYnLCBnYW1lLmIpLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2LmNnLXdyYXAuJyArIFZBUklBTlRTW2dhbWUudmFyaWFudF0uY2cgKyAnLm1pbmknLFxyXG4gICAgICAgICAgICAgICAgICAgIHsgaG9vazogeyBpbnNlcnQ6ICh2bm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZyA9IENoZXNzZ3JvdW5kKHZub2RlLmVsbSBhcyBIVE1MRWxlbWVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVuOiBmZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TW92ZTogbGFzdE1vdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogVkFSSUFOVFNbZ2FtZS52YXJpYW50XS5nZW9tLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld09ubHk6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnYW1lc1tnYW1lLmdhbWVJZF0gPSBjZztcclxuICAgICAgICAgICAgICAgICAgICAgfX19KSxcclxuICAgICAgICAgICAgICAgIGgoJ2RpdicsIGdhbWUudyksXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIClcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnYW1lc1ZpZXcobW9kZWwpOiBWTm9kZVtdIHtcclxuICAgIHJlbmRlclVzZXJuYW1lKG1vZGVsW1wiaG9tZVwiXSwgbW9kZWxbXCJ1c2VybmFtZVwiXSk7XHJcblxyXG4gICAgdmFyIHhtbGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHZhciB1cmwgPSBtb2RlbFtcImhvbWVcIl0gKyBcIi9hcGkvZ2FtZXNcIjtcclxuXHJcbiAgICB4bWxodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgdmFyIG15QXJyID0gSlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgbXlGdW5jdGlvbihteUFycik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB4bWxodHRwLm9wZW4oXCJHRVRcIiwgdXJsLCB0cnVlKTtcclxuICAgIHhtbGh0dHAuc2VuZCgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIG15RnVuY3Rpb24oYXJyKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkVk5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2FtZXMnKTtcclxuICAgICAgICB2YXIgZ2FtZXMgPSB7fTtcclxuICAgICAgICBpZiAob2xkVk5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHBhdGNoKG9sZFZOb2RlIGFzIEhUTUxFbGVtZW50LCBoKCdncmlkLWNvbnRhaW5lciNnYW1lcycsIGFyci5tYXAoKGdhbWUpID0+IHJlbmRlckdhbWUobW9kZWwsIGdhbWVzLCBnYW1lLCBnYW1lLmZlbiwgZ2FtZS5sYXN0TW92ZSkpKSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZXZ0U291cmNlID0gbmV3IEV2ZW50U291cmNlKFwiL2FwaS9zdWJzY3JpYmVcIik7XHJcbiAgICAgICAgICAgIGV2dFNvdXJjZS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZ2FtZSA9IGFyci5maW5kKChnKSA9PiBnLmdhbWVJZCA9PT0gbWVzc2FnZS5nYW1lSWQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2cgPSBnYW1lc1ttZXNzYWdlLmdhbWVJZF07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBtZXNzYWdlLmZlbi5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGFzdE1vdmUgPSBtZXNzYWdlLmxhc3RNb3ZlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RNb3ZlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdhbWUudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0TW92ZSA9IHVzaTJ1Y2kobGFzdE1vdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2FtZS52YXJpYW50LnN0YXJ0c1dpdGgoJ2dyYW5kJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1vdmUgPSBncmFuZDJ6ZXJvKGxhc3RNb3ZlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdE1vdmUgPSBbbGFzdE1vdmUuc2xpY2UoMCwyKSwgbGFzdE1vdmUuc2xpY2UoMiw0KV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdE1vdmUgIT09IG51bGwgJiYgbGFzdE1vdmVbMF1bMV0gPT09ICdAJykgbGFzdE1vdmUgPSBbbGFzdE1vdmVbMV1dO1xyXG4gICAgICAgICAgICAgICAgY2cuc2V0KHtcclxuICAgICAgICAgICAgICAgICAgICBmZW46IHBhcnRzWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RNb3ZlOiBsYXN0TW92ZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbaCgnYXNpZGUuc2lkZWJhci1maXJzdCcpLFxyXG4gICAgICAgICAgICBoKCdtYWluLmdhbWVzJywgW2goJ2dyaWQtY29udGFpbmVyI2dhbWVzJyldKSxcclxuICAgICAgICAgICAgaCgnYXNpZGUuc2lkZWJhci1zZWNvbmQnKSxcclxuICAgICAgICBdO1xyXG59XHJcbiIsImltcG9ydCB7IGgsIGluaXQgfSBmcm9tIFwic25hYmJkb21cIjtcclxuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xyXG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xyXG5pbXBvcnQgbGlzdGVuZXJzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvZXZlbnRsaXN0ZW5lcnMnO1xyXG5pbXBvcnQgdG9WTm9kZSBmcm9tICdzbmFiYmRvbS90b3Zub2RlJztcclxuXHJcbmltcG9ydCB7IGtleTJwb3MgfSBmcm9tICdjaGVzc2dyb3VuZHgvdXRpbCc7XHJcblxyXG5pbXBvcnQgeyBjYW5HYXRlLCByb2xlVG9TYW4gfSBmcm9tICcuL2NoZXNzJztcclxuaW1wb3J0IHsgcG9ja2V0VmlldyB9IGZyb20gJy4vcG9ja2V0JztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY3RybCkge1xyXG5cclxuICAgIGxldCBnYXRpbmc6IGFueSA9IGZhbHNlO1xyXG4gICAgbGV0IHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIHN0YXJ0KGZlbiwgb3JpZywgZGVzdCkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VuZCA9IGN0cmwuZ2V0R3JvdW5kKCk7XHJcbiAgICAgICAgY29uc3QgZ2F0YWJsZSA9IGNhbkdhdGUoZmVuLCBncm91bmQuc3RhdGUucGllY2VzW2Rlc3RdLCBvcmlnKVxyXG4gICAgICAgIHJvbGVzID0gW1wiaGF3a1wiLCBcImVsZXBoYW50XCIsIFwicXVlZW5cIiwgXCJyb29rXCIsIFwiYmlzaG9wXCIsIFwia25pZ2h0XCIsIFwiXCJdO1xyXG5cclxuICAgICAgICBpZiAoZ2F0YWJsZVswXSB8fCBnYXRhYmxlWzFdIHx8IGdhdGFibGVbMl0gfHwgZ2F0YWJsZVszXSB8fCBnYXRhYmxlWzRdIHx8IGdhdGFibGVbNV0pIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSBjdHJsLm15Y29sb3I7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWVudGF0aW9uID0gZ3JvdW5kLnN0YXRlLm9yaWVudGF0aW9uO1xyXG4gICAgICAgICAgICBpZiAocm9sZXMuaW5kZXhPZihcImhhd2tcIikgIT09IC0xICYmICFnYXRhYmxlWzBdKSByb2xlcy5zcGxpY2Uocm9sZXMuaW5kZXhPZihcImhhd2tcIiksIDEpO1xyXG4gICAgICAgICAgICBpZiAocm9sZXMuaW5kZXhPZihcImVsZXBoYW50XCIpICE9PSAtMSAmJiAhZ2F0YWJsZVsxXSkgcm9sZXMuc3BsaWNlKHJvbGVzLmluZGV4T2YoXCJlbGVwaGFudFwiKSwgMSk7XHJcbiAgICAgICAgICAgIGlmIChyb2xlcy5pbmRleE9mKFwicXVlZW5cIikgIT09IC0xICYmICFnYXRhYmxlWzJdKSByb2xlcy5zcGxpY2Uocm9sZXMuaW5kZXhPZihcInF1ZWVuXCIpLCAxKTtcclxuICAgICAgICAgICAgaWYgKHJvbGVzLmluZGV4T2YoXCJyb29rXCIpICE9PSAtMSAmJiAhZ2F0YWJsZVszXSkgcm9sZXMuc3BsaWNlKHJvbGVzLmluZGV4T2YoXCJyb29rXCIpLCAxKTtcclxuICAgICAgICAgICAgaWYgKHJvbGVzLmluZGV4T2YoXCJiaXNob3BcIikgIT09IC0xICYmICFnYXRhYmxlWzRdKSByb2xlcy5zcGxpY2Uocm9sZXMuaW5kZXhPZihcImJpc2hvcFwiKSwgMSk7XHJcbiAgICAgICAgICAgIGlmIChyb2xlcy5pbmRleE9mKFwia25pZ2h0XCIpICE9PSAtMSAmJiAhZ2F0YWJsZVs1XSkgcm9sZXMuc3BsaWNlKHJvbGVzLmluZGV4T2YoXCJrbmlnaHRcIiksIDEpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG9yaWdzID0gW29yaWddO1xyXG4gICAgICAgICAgICBjb25zdCBjYXN0bGluZyA9IGdyb3VuZC5zdGF0ZS5waWVjZXNbZGVzdF0ucm9sZSA9PT0gXCJraW5nXCIgJiYgb3JpZ1swXSA9PT0gXCJlXCIgJiYgZGVzdFswXSAhPT0gXCJkXCIgJiYgZGVzdFswXSAhPT0gXCJlXCIgJiYgZGVzdFswXSAhPT0gXCJmXCI7XHJcbiAgICAgICAgICAgIHZhciByb29rRGVzdCA9IFwiXCI7XHJcbiAgICAgICAgICAgIGlmIChjYXN0bGluZykge1xyXG4gICAgICAgICAgICAgICAgLy8gTy1PXHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzdFswXSA+IFwiZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ3MucHVzaChcImhcIiArIG9yaWdbMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb2tEZXN0ID0gIFwiZVwiICsgb3JpZ1sxXTtcclxuICAgICAgICAgICAgICAgIC8vIE8tTy1PXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdzLnB1c2goXCJhXCIgKyBvcmlnWzFdKTtcclxuICAgICAgICAgICAgICAgICAgICByb29rRGVzdCA9ICBcImVcIiArIG9yaWdbMV07XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBkcmF3X2dhdGluZyhvcmlncywgY29sb3IsIG9yaWVudGF0aW9uKTtcclxuICAgICAgICAgICAgZ2F0aW5nID0ge1xyXG4gICAgICAgICAgICAgICAgb3JpZ3M6IG9yaWdzLFxyXG4gICAgICAgICAgICAgICAgZGVzdDogZGVzdCxcclxuICAgICAgICAgICAgICAgIHJvb2tEZXN0OiByb29rRGVzdCxcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjdHJsLnNlbmRNb3ZlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBnYXRlKGN0cmwsIG9yaWcsIGRlc3QsIHJvbGUpIHtcclxuICAgICAgICBjb25zdCBnID0gY3RybC5nZXRHcm91bmQoKTtcclxuICAgICAgICBjb25zdCBjb2xvciA9IGcuc3RhdGUucGllY2VzW2Rlc3RdLmNvbG9yO1xyXG4gICAgICAgIGcubmV3UGllY2Uoe1wicm9sZVwiOiByb2xlLCBcImNvbG9yXCI6IGNvbG9yfSwgb3JpZylcclxuICAgICAgICBjdHJsLnBvY2tldHNbY29sb3IgPT09ICd3aGl0ZScgPyAwIDogMV1bcm9sZV0tLTtcclxuICAgICAgICBjdHJsLnZwb2NrZXQxID0gcGF0Y2goY3RybC52cG9ja2V0MSwgcG9ja2V0VmlldyhjdHJsLCBjb2xvciwgXCJib3R0b21cIikpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGRyYXdfZ2F0aW5nKG9yaWdzLCBjb2xvciwgb3JpZW50YXRpb24pIHtcclxuICAgICAgICB2YXIgY29udGFpbmVyID0gdG9WTm9kZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdleHRlbnNpb24nKSBhcyBOb2RlKTtcclxuICAgICAgICBwYXRjaChjb250YWluZXIsIHJlbmRlckdhdGluZyhvcmlncywgY29sb3IsIG9yaWVudGF0aW9uKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZHJhd19ub19nYXRpbmcoKSB7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlbnNpb25fY2hvaWNlJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgcGF0Y2goY29udGFpbmVyLCBoKCdleHRlbnNpb24nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZmluaXNoKHJvbGUsIGluZGV4KSB7XHJcbiAgICAgICAgaWYgKGdhdGluZykge1xyXG4gICAgICAgICAgICBkcmF3X25vX2dhdGluZygpO1xyXG4gICAgICAgICAgICBpZiAocm9sZSkgZ2F0ZShjdHJsLCBnYXRpbmcub3JpZ3NbaW5kZXhdLCBnYXRpbmcuZGVzdCwgcm9sZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBnYXRlZCA9IHJvbGUgPyByb2xlVG9TYW5bcm9sZV0udG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgICAgIGlmIChnYXRpbmcuY2FsbGJhY2spIGdhdGluZy5jYWxsYmFjayhnYXRpbmcub3JpZ3NbaW5kZXhdLCBpbmRleCA9PT0gMCA/IGdhdGluZy5kZXN0IDogZ2F0aW5nLnJvb2tEZXN0LCBnYXRlZCk7XHJcbiAgICAgICAgICAgIGdhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gY2FuY2VsKCkge1xyXG4gICAgICAgIGRyYXdfbm9fZ2F0aW5nKCk7XHJcbiAgICAgICAgY3RybC5nb1BseShjdHJsLnBseSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGJpbmQoZXZlbnROYW1lOiBzdHJpbmcsIGY6IChlOiBFdmVudCkgPT4gdm9pZCwgcmVkcmF3KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaW5zZXJ0KHZub2RlKSB7XHJcbiAgICAgICAgICAgICAgICB2bm9kZS5lbG0uYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGYoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZHJhdykgcmVkcmF3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZW5kZXJTcXVhcmVzKG9yaWcsIGNvbG9yLCBvcmllbnRhdGlvbiwgaW5kZXgpIHtcclxuICAgICAgICBjb25zdCBmaXJzdFJhbmtJczAgPSBmYWxzZTtcclxuICAgICAgICB2YXIgbGVmdCA9ICg4IC0ga2V5MnBvcyhvcmlnLCBmaXJzdFJhbmtJczApWzBdKSAqIDEyLjU7XHJcbiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcIndoaXRlXCIpIGxlZnQgPSA4Ny41IC0gbGVmdDtcclxuICAgICAgICByZXR1cm4gcm9sZXMubWFwKChzZXJ2ZXJSb2xlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB0b3AgPSAoY29sb3IgPT09IG9yaWVudGF0aW9uID8gNyAtIGkgOiBpKSAqIDEyLjU7XHJcbiAgICAgICAgICAgIHJldHVybiBoKFxyXG4gICAgICAgICAgICAgICAgXCJzcXVhcmVcIixcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzdHlsZTogXCJ0b3A6IFwiICsgdG9wICsgXCIlO2xlZnQ6IFwiICsgbGVmdCArIFwiJVwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaG9vazogYmluZChcImNsaWNrXCIsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2goc2VydmVyUm9sZSwgaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFtoKFwicGllY2UuXCIgKyBzZXJ2ZXJSb2xlICsgXCIuXCIgKyBjb2xvcildXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZW5kZXJHYXRpbmcob3JpZ3MsIGNvbG9yLCBvcmllbnRhdGlvbikge1xyXG4gICAgICAgIHZhciB2ZXJ0aWNhbCA9IGNvbG9yID09PSBvcmllbnRhdGlvbiA/IFwidG9wXCIgOiBcImJvdHRvbVwiO1xyXG4gICAgICAgIHZhciBzcXVhcmVzID0gcmVuZGVyU3F1YXJlcyhvcmlnc1swXSwgY29sb3IsIG9yaWVudGF0aW9uLCAwKTtcclxuICAgICAgICBpZiAob3JpZ3MubGVuZ3RoID4gMSkgc3F1YXJlcyA9IHNxdWFyZXMuY29uY2F0KHJlbmRlclNxdWFyZXMob3JpZ3NbMV0sIGNvbG9yLCBvcmllbnRhdGlvbiwgMSkpO1xyXG4gICAgICAgIHJldHVybiBoKFxyXG4gICAgICAgICAgICBcImRpdiNleHRlbnNpb25fY2hvaWNlLlwiICsgdmVydGljYWwsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGhvb2s6IHtcclxuICAgICAgICAgICAgICAgICAgICBpbnNlcnQ6IHZub2RlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB2bm9kZS5lbG0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiBjYW5jZWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCBlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzcXVhcmVzXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHN0YXJ0LFxyXG4gICAgfTtcclxufVxyXG4iLCJpbXBvcnQgU29ja2V0dGUgZnJvbSAnc29ja2V0dGUnO1xyXG5cclxuaW1wb3J0IHsgaW5pdCB9IGZyb20gJ3NuYWJiZG9tJztcclxuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xyXG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xyXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL3Byb3BzJztcclxuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuaW1wb3J0IGggZnJvbSAnc25hYmJkb20vaCc7XHJcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSAnc25hYmJkb20vdm5vZGUnO1xyXG5cclxuaW1wb3J0IHsgcmVuZGVyVXNlcm5hbWUgfSBmcm9tICcuL3VzZXInO1xyXG5pbXBvcnQgeyBjaGF0TWVzc2FnZSwgY2hhdFZpZXcgfSBmcm9tICcuL2NoYXQnO1xyXG5pbXBvcnQgeyB2YXJpYW50cywgdmFyaWFudHM5NjAsIFZBUklBTlRTIH0gZnJvbSAnLi9jaGVzcyc7XHJcbmltcG9ydCB7IHNvdW5kIH0gZnJvbSAnLi9zb3VuZCc7XHJcblxyXG5cclxuY2xhc3MgTG9iYnlDb250cm9sbGVyIHtcclxuICAgIG1vZGVsO1xyXG4gICAgc29jaztcclxuICAgIHBsYXllcjtcclxuICAgIGxvZ2dlZF9pbjtcclxuICAgIGNoYWxsZW5nZUFJO1xyXG4gICAgX3dzO1xyXG4gICAgc2Vla3M7XHJcblxyXG4gICAgY29uc3RydWN0b3IoZWwsIG1vZGVsKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJMb2JieUNvbnRyb2xsZXIgY29uc3RydWN0b3JcIiwgZWwsIG1vZGVsKTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgICAgIHRoaXMuY2hhbGxlbmdlQUkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3Qgb25PcGVuID0gKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl93cyA9IGV2dC50YXJnZXQ7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tQ09OTkVDVEVEXCIsIGV2dCk7XHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJsb2JieV91c2VyX2Nvbm5lY3RlZFwiLCB1c2VybmFtZTogdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJnZXRfc2Vla3NcIiB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3dzID0ge1wicmVhZHlTdGF0ZVwiOiAtMX07XHJcbiAgICAgICAgY29uc3Qgb3B0cyA9IHtcclxuICAgICAgICAgICAgbWF4QXR0ZW1wdHM6IDIwLFxyXG4gICAgICAgICAgICBvbm9wZW46IGUgPT4gb25PcGVuKGUpLFxyXG4gICAgICAgICAgICBvbm1lc3NhZ2U6IGUgPT4gdGhpcy5vbk1lc3NhZ2UoZSksXHJcbiAgICAgICAgICAgIG9ucmVjb25uZWN0OiBlID0+IGNvbnNvbGUubG9nKCdSZWNvbm5lY3RpbmcgaW4gbG9iYnkuLi4nLCBlKSxcclxuICAgICAgICAgICAgb25tYXhpbXVtOiBlID0+IGNvbnNvbGUubG9nKCdTdG9wIEF0dGVtcHRpbmchJywgZSksXHJcbiAgICAgICAgICAgIG9uY2xvc2U6IGUgPT4ge2NvbnNvbGUubG9nKCdDbG9zZWQhJywgZSk7fSxcclxuICAgICAgICAgICAgb25lcnJvcjogZSA9PiBjb25zb2xlLmxvZygnRXJyb3I6JywgZSksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5zb2NrID0gbmV3IFNvY2tldHRlKFwid3M6Ly9cIiArIGxvY2F0aW9uLmhvc3QgKyBcIi93c2xcIiwgb3B0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoKGVycikge1xyXG4gICAgICAgICAgICB0aGlzLnNvY2sgPSBuZXcgU29ja2V0dGUoXCJ3c3M6Ly9cIiArIGxvY2F0aW9uLmhvc3QgKyBcIi93c2xcIiwgb3B0cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBnZXQgc2Vla3Mgd2hlbiB3ZSBhcmUgY29taW5nIGJhY2sgYWZ0ZXIgYSBnYW1lXHJcbiAgICAgICAgaWYgKHRoaXMuX3dzLnJlYWR5U3RhdGUgPT09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImdldF9zZWVrc1wiIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcGF0Y2goZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlZWtidXR0b25zJykgYXMgSFRNTEVsZW1lbnQsIGgoJ3VsI3NlZWtidXR0b25zJywgdGhpcy5yZW5kZXJTZWVrQnV0dG9ucygpKSk7XHJcbiAgICAgICAgcGF0Y2goZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvYmJ5Y2hhdCcpIGFzIEhUTUxFbGVtZW50LCBjaGF0Vmlldyh0aGlzLCBcImxvYmJ5Y2hhdFwiKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGRvU2VuZCAobWVzc2FnZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiLS0tPiBsb2JieSBkb1NlbmQoKTpcIiwgbWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5zb2NrLnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNlZWtNc2cgKHZhcmlhbnQsIGNvbG9yLCBmZW4sIG1pbnV0ZXMsIGluY3JlbWVudCwgY2hlc3M5NjApIHtcclxuICAgICAgICB0aGlzLmRvU2VuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6IFwiY3JlYXRlX3NlZWtcIixcclxuICAgICAgICAgICAgdXNlcjogdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdLFxyXG4gICAgICAgICAgICB2YXJpYW50OiB2YXJpYW50LFxyXG4gICAgICAgICAgICBmZW46IGZlbixcclxuICAgICAgICAgICAgbWludXRlczogbWludXRlcyxcclxuICAgICAgICAgICAgaW5jcmVtZW50OiBpbmNyZW1lbnQsXHJcbiAgICAgICAgICAgIHJhdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgY2hlc3M5NjA6IGNoZXNzOTYwLFxyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlQm90Q2hhbGxlbmdlTXNnICh2YXJpYW50LCBjb2xvciwgZmVuLCBtaW51dGVzLCBpbmNyZW1lbnQsIGxldmVsLCBjaGVzczk2MCkge1xyXG4gICAgICAgIHRoaXMuZG9TZW5kKHtcclxuICAgICAgICAgICAgdHlwZTogXCJjcmVhdGVfYWlfY2hhbGxlbmdlXCIsXHJcbiAgICAgICAgICAgIHVzZXI6IHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSxcclxuICAgICAgICAgICAgdmFyaWFudDogdmFyaWFudCxcclxuICAgICAgICAgICAgZmVuOiBmZW4sXHJcbiAgICAgICAgICAgIG1pbnV0ZXM6IG1pbnV0ZXMsXHJcbiAgICAgICAgICAgIGluY3JlbWVudDogaW5jcmVtZW50LFxyXG4gICAgICAgICAgICByYXRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbCxcclxuICAgICAgICAgICAgY2hlc3M5NjA6IGNoZXNzOTYwLFxyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNOZXdTZWVrICh2YXJpYW50LCBjb2xvciwgZmVuLCBtaW51dGVzLCBpbmNyZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuc2Vla3Muc29tZShzZWVrID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlZWsudXNlciA9PT0gdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdICYmIHNlZWsudmFyaWFudCA9PT0gdmFyaWFudCAmJiBzZWVrLmZlbiA9PT0gZmVuICYmIHNlZWsuY29sb3IgPT09IGNvbG9yICYmIHNlZWsudGMgPT09IG1pbnV0ZXMgKyBcIitcIiArIGluY3JlbWVudDtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNlZWsgKGNvbG9yKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMDEnKSEuc3R5bGUuZGlzcGxheT0nbm9uZSc7XHJcbiAgICAgICAgbGV0IGU7XHJcbiAgICAgICAgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2YXJpYW50JykgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgdmFyaWFudCA9IGUub3B0aW9uc1tlLnNlbGVjdGVkSW5kZXhdLnZhbHVlO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwic2Vla192YXJpYW50XCIsIHZhcmlhbnQpO1xyXG5cclxuICAgICAgICBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlbicpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgZmVuID0gZS52YWx1ZTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInNlZWtfZmVuXCIsIGUudmFsdWUpO1xyXG5cclxuICAgICAgICBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbicpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgbWludXRlcyA9IHBhcnNlSW50KGUudmFsdWUpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwic2Vla19taW5cIiwgZS52YWx1ZSk7XHJcblxyXG4gICAgICAgIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5jJykgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSBwYXJzZUludChlLnZhbHVlKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInNlZWtfaW5jXCIsIGUudmFsdWUpO1xyXG5cclxuICAgICAgICBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoZXNzOTYwJykgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICBjb25zdCBoaWRlID0gdmFyaWFudHM5NjAuaW5kZXhPZih2YXJpYW50KSA9PT0gLTE7XHJcbiAgICAgICAgY29uc3QgY2hlc3M5NjAgPSAoaGlkZSkgPyBmYWxzZSA6IGUuY2hlY2tlZDtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkNSRUFURSBTRUVLIHZhcmlhbnQsIGNvbG9yLCBmZW4sIG1pbnV0ZXMsIGluY3JlbWVudCwgaGlkZSwgY2hlc3M5NjBcIiwgdmFyaWFudCwgY29sb3IsIGZlbiwgbWludXRlcywgaW5jcmVtZW50LCBoaWRlLCBjaGVzczk2MCk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJzZWVrX2NoZXNzOTYwXCIsIGUuY2hlY2tlZCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNoYWxsZW5nZUFJKSB7XHJcbiAgICAgICAgICAgIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwibGV2ZWxcIl06Y2hlY2tlZCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGxldmVsID0gcGFyc2VJbnQoZS52YWx1ZSk7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwic2Vla19sZXZlbFwiLCBlLnZhbHVlKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cobGV2ZWwsIGUudmFsdWUsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2Vla19sZXZlbFwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQm90Q2hhbGxlbmdlTXNnKHZhcmlhbnQsIGNvbG9yLCBmZW4sIG1pbnV0ZXMsIGluY3JlbWVudCwgbGV2ZWwsIGNoZXNzOTYwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc05ld1NlZWsodmFyaWFudCwgY29sb3IsIGZlbiwgbWludXRlcywgaW5jcmVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTZWVrTXNnKHZhcmlhbnQsIGNvbG9yLCBmZW4sIG1pbnV0ZXMsIGluY3JlbWVudCwgY2hlc3M5NjApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlclNlZWtCdXR0b25zICgpIHtcclxuICAgICAgICBjb25zdCBzZXRWYXJpYW50ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZTtcclxuICAgICAgICAgICAgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2YXJpYW50JykgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhbnQgPSBlLm9wdGlvbnNbZS5zZWxlY3RlZEluZGV4XS52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgaGlkZSA9IHZhcmlhbnRzOTYwLmluZGV4T2YodmFyaWFudCkgPT09IC0xO1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoZXNzOTYwLWJsb2NrJykhLnN0eWxlLmRpc3BsYXkgPSAoaGlkZSkgPyAnbm9uZScgOiAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2V0TWludXRlcyA9IChtaW51dGVzKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBtaW4sIGluYyA9IDA7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWludXRlc1wiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKGVsKSBlbC5pbm5lckhUTUwgPSBtaW51dGVzO1xyXG5cclxuICAgICAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWluJykgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKGUpIG1pbiA9IHBhcnNlSW50KGUudmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmMnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoZSkgaW5jID0gcGFyc2VJbnQoZS52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29sb3ItYnV0dG9uLWdyb3VwJykhLnN0eWxlLmRpc3BsYXkgPSAobWluICsgaW5jID09PSAwKSA/ICdub25lJyA6ICdibG9jayc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzZXRJbmNyZW1lbnQgPSAoaW5jcmVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBtaW4sIGluYyA9IDA7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5jcmVtZW50XCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoZWwpIGVsLmlubmVySFRNTCA9IGluY3JlbWVudDtcclxuXHJcbiAgICAgICAgICAgIHZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbicpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChlKSBtaW4gPSBwYXJzZUludChlLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5jJykgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKGUpIGluYyA9IHBhcnNlSW50KGUudmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbG9yLWJ1dHRvbi1ncm91cCcpIS5zdHlsZS5kaXNwbGF5ID0gKG1pbiArIGluYyA9PT0gMCkgPyAnbm9uZScgOiAnYmxvY2snO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdklkeCA9IGxvY2FsU3RvcmFnZS5zZWVrX3ZhcmlhbnQgPT09IHVuZGVmaW5lZCA/IDAgOiB2YXJpYW50cy5pbmRleE9mKGxvY2FsU3RvcmFnZS5zZWVrX3ZhcmlhbnQpO1xyXG4gICAgICAgIGNvbnN0IHZGZW4gPSBsb2NhbFN0b3JhZ2Uuc2Vla19mZW4gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbFN0b3JhZ2Uuc2Vla19mZW47XHJcbiAgICAgICAgY29uc3Qgdk1pbiA9IGxvY2FsU3RvcmFnZS5zZWVrX21pbiA9PT0gdW5kZWZpbmVkID8gXCI1XCIgOiBsb2NhbFN0b3JhZ2Uuc2Vla19taW47XHJcbiAgICAgICAgY29uc3QgdkluYyA9IGxvY2FsU3RvcmFnZS5zZWVrX2luYyA9PT0gdW5kZWZpbmVkID8gXCIzXCIgOiBsb2NhbFN0b3JhZ2Uuc2Vla19pbmM7XHJcbiAgICAgICAgY29uc3QgdkxldmVsID0gbG9jYWxTdG9yYWdlLnNlZWtfbGV2ZWwgPT09IHVuZGVmaW5lZCA/IFwiMVwiIDogbG9jYWxTdG9yYWdlLnNlZWtfbGV2ZWw7XHJcbiAgICAgICAgY29uc3QgdkNoZXNzOTYwID0gbG9jYWxTdG9yYWdlLnNlZWtfY2hlc3M5NjAgPT09IHVuZGVmaW5lZCA/IFwiZmFsc2VcIiA6IGxvY2FsU3RvcmFnZS5zZWVrX2NoZXNzOTYwO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwibG9jYWxlU3RvcmFnZS5zZWVrX2xldmVsLCB2TGV2ZWw9XCIsIGxvY2FsU3RvcmFnZS5zZWVrX2xldmVsLCB2TGV2ZWwpO1xyXG5cclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgIGgoJ2RpdiNpZDAxJywgeyBjbGFzczoge1wibW9kYWxcIjogdHJ1ZX0gfSwgW1xyXG4gICAgICAgICAgaCgnZm9ybS5tb2RhbC1jb250ZW50JywgW1xyXG4gICAgICAgICAgICBoKCdkaXYjY2xvc2Vjb250YWluZXInLCBbXHJcbiAgICAgICAgICAgICAgaCgnc3Bhbi5jbG9zZScsIHsgb246IHsgY2xpY2s6ICgpID0+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDAxJykhLnN0eWxlLmRpc3BsYXk9J25vbmUnIH0sIGF0dHJzOiB7J2RhdGEtaWNvbic6ICdqJ30sIHByb3BzOiB7dGl0bGU6IFwiQ2FuY2VsXCJ9IH0pLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgaCgnZGl2LmNvbnRhaW5lcicsIFtcclxuICAgICAgICAgICAgICAgIGgoJ2xhYmVsJywgeyBhdHRyczoge2ZvcjogXCJ2YXJpYW50XCJ9IH0sIFwiVmFyaWFudFwiKSxcclxuICAgICAgICAgICAgICAgIGgoJ3NlbGVjdCN2YXJpYW50Jywge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiB7bmFtZTogXCJ2YXJpYW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7IGlucHV0OiAoKSA9PiBzZXRWYXJpYW50KCkgfSxcclxuICAgICAgICAgICAgICAgICAgICBob29rOiB7aW5zZXJ0OiAoKSA9PiBzZXRWYXJpYW50KCkgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LCB2YXJpYW50cy5tYXAoKHZhcmlhbnQsIGlkeCkgPT4gaCgnb3B0aW9uJywgeyBwcm9wczoge3ZhbHVlOiB2YXJpYW50LCBzZWxlY3RlZDogKGlkeCA9PT0gdklkeCkgPyBcInNlbGVjdGVkXCIgOiBcIlwifSB9LCB2YXJpYW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaCgnbGFiZWwnLCB7IGF0dHJzOiB7Zm9yOiBcImZlblwifSB9LCBcIlN0YXJ0IHBvc2l0aW9uXCIpLFxyXG4gICAgICAgICAgICAgICAgaCgnaW5wdXQjZmVuJywgeyBwcm9wczoge25hbWU6ICdmZW4nLCBwbGFjZWhvbGRlcjogJ1Bhc3RlIHRoZSBGRU4gdGV4dCBoZXJlJywgdmFsdWU6IHZGZW59IH0pLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2I2NoZXNzOTYwLWJsb2NrJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsJywgeyBhdHRyczoge2ZvcjogXCJjaGVzczk2MFwifSB9LCBcIkNoZXNzOTYwXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2lucHV0I2NoZXNzOTYwJywge3Byb3BzOiB7bmFtZTogXCJjaGVzczk2MFwiLCB0eXBlOiBcImNoZWNrYm94XCIsIGNoZWNrZWQ6IHZDaGVzczk2MCA9PT0gXCJ0cnVlXCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9fSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgIC8vaCgnbGFiZWwnLCB7IGF0dHJzOiB7Zm9yOiBcInRjXCJ9IH0sIFwiVGltZSBDb250cm9sXCIpLFxyXG4gICAgICAgICAgICAgICAgLy9oKCdzZWxlY3QjdGltZWNvbnRyb2wnLCB7IHByb3BzOiB7bmFtZTogXCJ0aW1lY29udHJvbFwifSB9LCBbXHJcbiAgICAgICAgICAgICAgICAvLyAgICBoKCdvcHRpb24nLCB7IHByb3BzOiB7dmFsdWU6IFwiMVwiLCBzZWxlY3RlZDogdHJ1ZX0gfSwgXCJSZWFsIHRpbWVcIiksXHJcbiAgICAgICAgICAgICAgICAvLyAgICBoKCdvcHRpb24nLCB7IHByb3BzOiB7dmFsdWU6IFwiMlwifSB9LCBcIlVubGltaXRlZFwiKSxcclxuICAgICAgICAgICAgICAgIC8vXSksXHJcbiAgICAgICAgICAgICAgICBoKCdsYWJlbCcsIHsgYXR0cnM6IHtmb3I6IFwibWluXCJ9IH0sIFwiTWludXRlcyBwZXIgc2lkZTpcIiksXHJcbiAgICAgICAgICAgICAgICBoKCdzcGFuI21pbnV0ZXMnKSxcclxuICAgICAgICAgICAgICAgIGgoJ2lucHV0I21pbicsIHsgY2xhc3M6IHsgXCJzbGlkZXJcIjogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiB7bmFtZTogXCJtaW5cIiwgdHlwZTogXCJyYW5nZVwiLCBtaW46IDEsIG1heDogNjAsIHZhbHVlOiB2TWlufSxcclxuICAgICAgICAgICAgICAgICAgICBvbjogeyBpbnB1dDogKGUpID0+IHNldE1pbnV0ZXMoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhvb2s6IHtpbnNlcnQ6ICh2bm9kZSkgPT4gc2V0TWludXRlcygodm5vZGUuZWxtIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSB9LFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBoKCdsYWJlbCcsIHsgYXR0cnM6IHtmb3I6IFwiaW5jXCJ9IH0sIFwiSW5jcmVtZW50IGluIHNlY29uZHM6XCIpLFxyXG4gICAgICAgICAgICAgICAgaCgnc3BhbiNpbmNyZW1lbnQnKSxcclxuICAgICAgICAgICAgICAgIGgoJ2lucHV0I2luYycsIHsgY2xhc3M6IHtcInNsaWRlclwiOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHtuYW1lOiBcImluY1wiLCB0eXBlOiBcInJhbmdlXCIsIG1pbjogMCwgbWF4OiAxNSwgdmFsdWU6IHZJbmN9LFxyXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7IGlucHV0OiAoZSkgPT4gc2V0SW5jcmVtZW50KChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSkgfSxcclxuICAgICAgICAgICAgICAgICAgICBob29rOiB7aW5zZXJ0OiAodm5vZGUpID0+IHNldEluY3JlbWVudCgodm5vZGUuZWxtIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSB9LFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBwbGF5IHdpdGggdGhlIG1hY2hpbmVcclxuICAgICAgICAgICAgICAgIC8vIEEuSS5MZXZlbCAoMS04IGJ1dHRvbnMpXHJcbiAgICAgICAgICAgICAgICBoKCdmb3JtI2FpbGV2ZWwnLCBbXHJcbiAgICAgICAgICAgICAgICBoKCdoNCcsIFwiQS5JLiBMZXZlbFwiKSxcclxuICAgICAgICAgICAgICAgIGgoJ2Rpdi5haS1yYWRpby1ncm91cCcsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTEnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCIxXCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCIxXCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpMScsIHsgYXR0cnM6IHtmb3I6IFwiYWkxXCJ9IH0sIFwiMVwiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTInLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCIyXCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCIyXCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpMicsIHsgYXR0cnM6IHtmb3I6IFwiYWkyXCJ9IH0sIFwiMlwiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTMnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCIzXCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCIzXCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpMycsIHsgYXR0cnM6IHtmb3I6IFwiYWkzXCJ9IH0sIFwiM1wiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTQnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCI0XCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCI0XCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpNCcsIHsgYXR0cnM6IHtmb3I6IFwiYWk0XCJ9IH0sIFwiNFwiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTUnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCI1XCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCI1XCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpNScsIHsgYXR0cnM6IHtmb3I6IFwiYWk1XCJ9IH0sIFwiNVwiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTYnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCI2XCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCI2XCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpNicsIHsgYXR0cnM6IHtmb3I6IFwiYWk2XCJ9IH0sIFwiNlwiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTcnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCI3XCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCI3XCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpNycsIHsgYXR0cnM6IHtmb3I6IFwiYWk3XCJ9IH0sIFwiN1wiKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdpbnB1dCNhaTgnLCB7IHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJsZXZlbFwiLCB2YWx1ZTogXCI4XCIsIGNoZWNrZWQ6IHZMZXZlbCA9PT0gXCI4XCIgPyBcImNoZWNrZWRcIiA6IFwiXCJ9IH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2xhYmVsLmxldmVsLWFpLmFpOCcsIHsgYXR0cnM6IHtmb3I6IFwiYWk4XCJ9IH0sIFwiOFwiKSxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYjY29sb3ItYnV0dG9uLWdyb3VwJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2J1dHRvbi5pY29uLmljb24tYmxhY2snLCB7IHByb3BzOiB7dHlwZTogXCJidXR0b25cIiwgdGl0bGU6IFwiQmxhY2tcIn0sIG9uOiB7Y2xpY2s6ICgpID0+IHRoaXMuY3JlYXRlU2VlaygnYicpIH0gfSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnYnV0dG9uLmljb24uaWNvbi1hZGp1c3QnLCB7IHByb3BzOiB7dHlwZTogXCJidXR0b25cIiwgdGl0bGU6IFwiUmFuZG9tXCJ9LCBvbjoge2NsaWNrOiAoKSA9PiB0aGlzLmNyZWF0ZVNlZWsoJ3InKX0gfSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnYnV0dG9uLmljb24uaWNvbi13aGl0ZScsIHsgcHJvcHM6IHt0eXBlOiBcImJ1dHRvblwiLCB0aXRsZTogXCJXaGl0ZVwifSwgb246IHtjbGljazogKCkgPT4gdGhpcy5jcmVhdGVTZWVrKCd3Jyl9IH0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgXSksXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgaCgnYnV0dG9uJywgeyBjbGFzczogeydsb2JieS1idXR0b24nOiB0cnVlfSwgb246IHtcclxuICAgICAgICAgICAgY2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbGxlbmdlQUkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhaWxldmVsJykhLnN0eWxlLmRpc3BsYXk9J25vbmUnO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMDEnKSEuc3R5bGUuZGlzcGxheT0nYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IH0sIFwiQ3JlYXRlIGEgZ2FtZVwiKSxcclxuICAgICAgICBoKCdidXR0b24nLCB7IGNsYXNzOiB7J2xvYmJ5LWJ1dHRvbic6IHRydWV9LCBvbjoge1xyXG4gICAgICAgICAgICBjbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFsbGVuZ2VBSSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWlsZXZlbCcpIS5zdHlsZS5kaXNwbGF5PSdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMDEnKSEuc3R5bGUuZGlzcGxheT0nYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IH0sIFwiUGxheSB3aXRoIHRoZSBtYWNoaW5lXCIpLFxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja1NlZWsoc2Vlaykge1xyXG4gICAgICAgIGlmIChzZWVrW1widXNlclwiXSA9PT0gdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJkZWxldGVfc2Vla1wiLCBzZWVrSUQ6IHNlZWtbXCJzZWVrSURcIl0sIHBsYXllcjogdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJhY2NlcHRfc2Vla1wiLCBzZWVrSUQ6IHNlZWtbXCJzZWVrSURcIl0sIHBsYXllcjogdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJTZWVrcyhzZWVrcykge1xyXG4gICAgICAgIC8vIFRPRE86IGZpeCBoZWFkZXIgYW5kIGRhdGEgcm93IGNvbG9tbnNcclxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNzI3MjMzMS9odG1sLXRhYmxlLXdpdGgtZml4ZWQtaGVhZGVyLWFuZC1mb290ZXItYW5kLXNjcm9sbGFibGUtYm9keS13aXRob3V0LWZpeGVkLXdpZHRoc1xyXG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGgoJ3RoZWFkJywgW2goJ3RyJyxcclxuICAgICAgICAgICAgW2goJ3RoJywgJ1BsYXllcicpLFxyXG4gICAgICAgICAgICAgaCgndGgnLCAnQ29sb3InKSxcclxuICAgICAgICAgICAgIGgoJ3RoJywgJ1JhdGluZycpLFxyXG4gICAgICAgICAgICAgaCgndGgnLCAnVGltZScpLFxyXG4gICAgICAgICAgICAgaCgndGgnLCAnICAgICcpLFxyXG4gICAgICAgICAgICAgaCgndGgnLCAnVmFyaWFudCcpLFxyXG4gICAgICAgICAgICAgaCgndGgnLCAnTW9kZScpXSldKTtcclxuICAgICAgICBjb25zdCBjb2xvckljb24gPSAoY29sb3IpID0+IHsgcmV0dXJuIGgoJ2knLCB7YXR0cnM6IHtcImRhdGEtaWNvblwiOiBjb2xvciA9PT0gXCJ3XCIgPyBcImNcIiA6IGNvbG9yID09PSBcImJcIiA/IFwiYlwiIDogXCJhXCJ9fSApOyB9O1xyXG4gICAgICAgIHNlZWtzLnNvcnQoKGEsIGIpID0+IChhLmJvdCAmJiAhYi5ib3QpID8gMSA6IC0xKTtcclxuICAgICAgICB2YXIgcm93cyA9IHNlZWtzLm1hcCgoc2VlaykgPT4gaChcclxuICAgICAgICAgICAgJ3RyJyxcclxuICAgICAgICAgICAgeyBvbjogeyBjbGljazogKCkgPT4gdGhpcy5vbkNsaWNrU2VlayhzZWVrKSB9IH0sXHJcbiAgICAgICAgICAgIFtoKCd0ZCcsIFtoKCdwbGF5ZXItdGl0bGUnLCBcIiBcIiArIHNlZWtbXCJ0aXRsZVwiXSArIFwiIFwiKSwgc2Vla1tcInVzZXJcIl1dKSxcclxuICAgICAgICAgICAgIGgoJ3RkJywgW2NvbG9ySWNvbihzZWVrW1wiY29sb3JcIl0pXSksXHJcbiAgICAgICAgICAgICBoKCd0ZCcsICcxNTAwPycpLFxyXG4gICAgICAgICAgICAgaCgndGQnLCBzZWVrW1widGNcIl0pLFxyXG4gICAgICAgICAgICAgaCgndGQnLCB7YXR0cnM6IHtcImRhdGEtaWNvblwiOiBWQVJJQU5UU1tzZWVrW1widmFyaWFudFwiXV0uaWNvbn0sIGNsYXNzOiB7XCJpY29uXCI6IHRydWV9fSApLFxyXG4gICAgICAgICAgICAgaCgndGQnLCB7YXR0cnM6IHtcImRhdGEtaWNvblwiOiAoc2Vlay5jaGVzczk2MCkgPyBcIlZcIiA6IFwiXCJ9LCBjbGFzczoge1wiaWNvblwiOiB0cnVlfX0gKSxcclxuICAgICAgICAgICAgIGgoJ3RkJywgc2Vla1tcInZhcmlhbnRcIl0pLFxyXG4gICAgICAgICAgICAgaCgndGQnLCBzZWVrW1wicmF0ZWRcIl0pIF0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIFtoZWFkZXIsIGgoJ3Rib2R5Jywgcm93cyldO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nc2dHZXRTZWVrcyA9IChtc2cpID0+IHtcclxuICAgICAgICB0aGlzLnNlZWtzID0gbXNnLnNlZWtzO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiISEhISBnb3QgZ2V0X3NlZWtzIG1zZzpcIiwgbXNnKTtcclxuICAgICAgICBjb25zdCBvbGRWTm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWVrcycpO1xyXG4gICAgICAgIGlmIChvbGRWTm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgb2xkVk5vZGUuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgICAgIHBhdGNoKG9sZFZOb2RlIGFzIEhUTUxFbGVtZW50LCBoKCd0YWJsZSNzZWVrcycsIHRoaXMucmVuZGVyU2Vla3MobXNnLnNlZWtzKSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnTmV3R2FtZSA9IChtc2cpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkxvYmJ5Q29udHJvbGxlci5vbk1zZ05ld0dhbWUoKVwiLCB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdKVxyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odGhpcy5tb2RlbFtcImhvbWVcIl0gKyAnLycgKyBtc2dbXCJnYW1lSWRcIl0pO1xyXG59XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ1VzZXJDb25uZWN0ZWQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdID0gbXNnW1widXNlcm5hbWVcIl07XHJcbiAgICAgICAgcmVuZGVyVXNlcm5hbWUodGhpcy5tb2RlbFtcImhvbWVcIl0sIHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ0NoYXQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgaWYgKG1zZy51c2VyICE9PSB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0pIHtcclxuICAgICAgICAgICAgY2hhdE1lc3NhZ2UobXNnLnVzZXIsIG1zZy5tZXNzYWdlLCBcImxvYmJ5Y2hhdFwiKTtcclxuICAgICAgICAgICAgaWYgKG1zZy51c2VyLmxlbmd0aCAhPT0gMCAmJiBtc2cudXNlciAhPT0gJ19zZXJ2ZXInKSBzb3VuZC5jaGF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nc2dGdWxsQ2hhdCA9IChtc2cpID0+IHtcclxuICAgICAgICBtc2cubGluZXMuZm9yRWFjaCgobGluZSkgPT4ge2NoYXRNZXNzYWdlKGxpbmUudXNlciwgbGluZS5tZXNzYWdlLCBcImxvYmJ5Y2hhdFwiKTt9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnUGluZyA9IChtc2cpID0+IHtcclxuICAgICAgICB0aGlzLmRvU2VuZCh7dHlwZTogXCJwb25nXCIsIHRpbWVzdGFtcDogbXNnLnRpbWVzdGFtcH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nc2dTaHV0ZG93biA9IChtc2cpID0+IHtcclxuICAgICAgICBhbGVydChtc2cubWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25NZXNzYWdlIChldnQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIjwrKysgbG9iYnkgb25NZXNzYWdlKCk6XCIsIGV2dC5kYXRhKTtcclxuICAgICAgICB2YXIgbXNnID0gSlNPTi5wYXJzZShldnQuZGF0YSk7XHJcbiAgICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiZ2V0X3NlZWtzXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnR2V0U2Vla3MobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibmV3X2dhbWVcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dOZXdHYW1lKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImxvYmJ5X3VzZXJfY29ubmVjdGVkXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnVXNlckNvbm5lY3RlZChtc2cpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsb2JieWNoYXRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dDaGF0KG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImZ1bGxjaGF0XCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnRnVsbENoYXQobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicGluZ1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ1BpbmcobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwic2h1dGRvd25cIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dTaHV0ZG93bihtc2cpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBydW5TZWVrcyh2bm9kZTogVk5vZGUsIG1vZGVsKSB7XHJcbiAgICBjb25zdCBlbCA9IHZub2RlLmVsbSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IGN0cmwgPSBuZXcgTG9iYnlDb250cm9sbGVyKGVsLCBtb2RlbCk7XHJcbiAgICBjb25zb2xlLmxvZyhcImxvYmJ5VmlldygpIC0+IHJ1blNlZWtzKClcIiwgZWwsIG1vZGVsLCBjdHJsKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYmJ5Vmlldyhtb2RlbCk6IFZOb2RlW10ge1xyXG4gICAgLy8gR2V0IHRoZSBtb2RhbFxyXG4gICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWQwMScpITtcclxuXHJcbiAgICAvLyBXaGVuIHRoZSB1c2VyIGNsaWNrcyBhbnl3aGVyZSBvdXRzaWRlIG9mIHRoZSBtb2RhbCwgY2xvc2UgaXRcclxuICAgIHdpbmRvdy5vbmNsaWNrID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09IG1vZGFsKSB7XHJcbiAgICAgICAgICAgIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFtoKCdhc2lkZS5zaWRlYmFyLWZpcnN0JywgWyBoKCdkaXYubG9iYnljaGF0I2xvYmJ5Y2hhdCcpIF0pLFxyXG4gICAgICAgICAgICBoKCdtYWluLm1haW4nLCBbIGgoJ3RhYmxlI3NlZWtzJywge2hvb2s6IHsgaW5zZXJ0OiAodm5vZGUpID0+IHJ1blNlZWtzKHZub2RlLCBtb2RlbCkgfSB9KSBdKSxcclxuICAgICAgICAgICAgaCgnYXNpZGUuc2lkZWJhci1zZWNvbmQnLCBbIGgoJ3VsI3NlZWtidXR0b25zJykgXSksXHJcbiAgICAgICAgICAgIGgoJ3VuZGVyLWxlZnQnLCBbXHJcbiAgICAgICAgICAgICAgICBoKCdhLnJlZmxpc3QnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9kaXNjb3JkLmdnL2FQczhSS3InfX0sICdEaXNjb3JkJyksXHJcbiAgICAgICAgICAgICAgICBoKCdhLnJlZmxpc3QnLCB7YXR0cnM6IHtocmVmOiAnaHR0cHM6Ly9naXRodWIuY29tL2didGFtaS9weWNoZXNzLXZhcmlhbnRzJ319LCAnR2l0aHViJyksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCd1bmRlci1sb2JieScpLFxyXG4gICAgICAgICAgICBoKCd1bmRlci1yaWdodCcsIFtcclxuICAgICAgICAgICAgICAgIGgoJ2EnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsnZG9uYXRlLWJ1dHRvbic6IHRydWV9LFxyXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7aHJlZjogJ2h0dHBzOi8vd3d3LnBheXBhbC5jb20vY2dpLWJpbi93ZWJzY3I/Y21kPV9zLXhjbGljayZob3N0ZWRfYnV0dG9uX2lkPU5DNzNKWFJCUU5UQU4mc291cmNlPXVybCd9XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgJ0RpcmVjdGx5IHN1cHBvcnQgdXMnKVxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICBdO1xyXG59XHJcbiIsImltcG9ydCB7IGluaXQgfSBmcm9tICdzbmFiYmRvbSc7XHJcbmltcG9ydCBrbGFzcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2NsYXNzJztcclxuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcclxuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9wcm9wcyc7XHJcbmltcG9ydCBsaXN0ZW5lcnMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9ldmVudGxpc3RlbmVycyc7XHJcbmltcG9ydCBoIGZyb20gJ3NuYWJiZG9tL2gnO1xyXG5pbXBvcnQgeyBWTm9kZSB9IGZyb20gJ3NuYWJiZG9tL3Zub2RlJztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuaW1wb3J0IHsgYWJvdXRWaWV3IH0gZnJvbSAnLi9hYm91dCc7XHJcbmltcG9ydCB7IGxvYmJ5VmlldyB9IGZyb20gJy4vbG9iYnknO1xyXG5pbXBvcnQgeyByb3VuZFZpZXcgfSBmcm9tICcuL3JvdW5kJztcclxuaW1wb3J0IHsgZ2FtZXNWaWV3IH0gZnJvbSAnLi9nYW1lcyc7XHJcbmltcG9ydCB7IGFuYWx5c2lzVmlldyB9IGZyb20gJy4vYW5hbHlzaXMnO1xyXG5pbXBvcnQgeyBwbGF5ZXJzVmlldyB9IGZyb20gJy4vcGxheWVycyc7XHJcbmltcG9ydCB7IHByb2ZpbGVWaWV3IH0gZnJvbSAnLi9wcm9maWxlJztcclxuXHJcbmNvbnN0IG1vZGVsID0ge2hvbWU6IFwiXCIsIHVzZXJuYW1lOiBcIlwiLCBhbm9uOiBcIlwiLCB2YXJpYW50OiBcIlwiLCBnYW1lSWQ6IDAsIHdwbGF5ZXI6IFwiXCIsIGJwbGF5ZXI6IFwiXCIsIGZlbjogXCJcIiwgYmFzZTogXCJcIiwgaW5jOiBcIlwiLCBzZWVrczogW10sIHR2OiBcIlwiLCBwcm9maWxlaWQ6IFwiXCIsIHN0YXR1czogXCJcIn07XHJcblxyXG52YXIgZ2V0Q29va2llID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgdmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcclxuICAgIGZvcih2YXIgaT0wIDsgaSA8IGNvb2tpZXMubGVuZ3RoIDsgKytpKSB7XHJcbiAgICAgICAgdmFyIHBhaXIgPSBjb29raWVzW2ldLnRyaW0oKS5zcGxpdCgnPScpO1xyXG4gICAgICAgIGlmKHBhaXJbMF0gPT0gbmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHBhaXJbMV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZpZXcoZWwsIG1vZGVsKTogVk5vZGUge1xyXG4gICAgY29uc3QgdXNlciA9IGdldENvb2tpZShcInVzZXJcIik7XHJcbiAgICBpZiAodXNlciAhPT0gXCJcIikgbW9kZWxbXCJ1c2VybmFtZVwiXSA9IHVzZXI7XHJcblxyXG4gICAgbW9kZWxbXCJob21lXCJdID0gZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1ob21lXCIpO1xyXG4gICAgbW9kZWxbXCJhbm9uXCJdID0gZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1hbm9uXCIpO1xyXG4gICAgbW9kZWxbXCJwcm9maWxlaWRcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXByb2ZpbGVcIik7XHJcbiAgICBtb2RlbFtcInZhcmlhbnRcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXZhcmlhbnRcIik7XHJcbiAgICBtb2RlbFtcImNoZXNzOTYwXCJdID0gZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1jaGVzczk2MFwiKTtcclxuICAgIG1vZGVsW1wibGV2ZWxcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWxldmVsXCIpO1xyXG4gICAgbW9kZWxbXCJ1c2VybmFtZVwiXSA9IHVzZXIgIT09IFwiXCIgPyB1c2VyIDogZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS11c2VyXCIpO1xyXG4gICAgbW9kZWxbXCJnYW1lSWRcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWdhbWVpZFwiKTtcclxuICAgIG1vZGVsW1wid3BsYXllclwiXSA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtd3BsYXllclwiKTtcclxuICAgIG1vZGVsW1wid3RpdGxlXCJdID0gZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS13dGl0bGVcIik7XHJcbiAgICBtb2RlbFtcImJwbGF5ZXJcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWJwbGF5ZXJcIik7XHJcbiAgICBtb2RlbFtcImJ0aXRsZVwiXSA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtYnRpdGxlXCIpO1xyXG4gICAgbW9kZWxbXCJmZW5cIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWZlblwiKTtcclxuICAgIG1vZGVsW1wiYmFzZVwiXSA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtYmFzZVwiKTtcclxuICAgIG1vZGVsW1wiaW5jXCJdID0gZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1pbmNcIik7XHJcbiAgICBtb2RlbFtcInJlc3VsdFwiXSA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtcmVzdWx0XCIpO1xyXG4gICAgbW9kZWxbXCJzdGF0dXNcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXN0YXR1c1wiKTtcclxuICAgIG1vZGVsW1wiZGF0ZVwiXSA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtZGF0ZVwiKTtcclxuICAgIG1vZGVsW1widHZcIl0gPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXZpZXdcIikgPT09ICd0dic7XHJcblxyXG4gICAgc3dpdGNoIChlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXZpZXdcIikpIHtcclxuICAgIGNhc2UgJ2Fib3V0JzpcclxuICAgICAgICByZXR1cm4gaCgnZGl2I3BsYWNlaG9sZGVyLm1haW4td3JhcHBlcicsIGFib3V0Vmlldyhtb2RlbCkpO1xyXG4gICAgY2FzZSAnaG93dG9wbGF5JzpcclxuICAgICAgICByZXR1cm4gaCgnaWZyYW1lJywge3Byb3BzOiB7c3JjOiBtb2RlbFtcImhvbWVcIl0gKyBcIi9zdGF0aWMvZG9jcy92YXJpYW50cy5odG1sXCIsIGhlaWdodDogXCIxMDAlXCIsIHdpZHRoOlwiMTAwJVwiLCBzZWFtbGVzczogXCJcIn19KTtcclxuICAgIGNhc2UgJ3BsYXllcnMnOlxyXG4gICAgICAgIHJldHVybiBoKCdkaXYjcGxhY2Vob2xkZXIucGxheWVycy13cmFwcGVyJywgcGxheWVyc1ZpZXcobW9kZWwpKTtcclxuICAgIGNhc2UgJ3Byb2ZpbGUnOlxyXG4gICAgICAgIHJldHVybiBoKCdkaXYjcGxhY2Vob2xkZXIucHJvZmlsZS13cmFwcGVyJywgcHJvZmlsZVZpZXcobW9kZWwpKTtcclxuICAgIGNhc2UgJ2xldmVsOHdpbic6XHJcbiAgICAgICAgcmV0dXJuIGgoJ2RpdiNwbGFjZWhvbGRlci5wcm9maWxlLXdyYXBwZXInLCBwcm9maWxlVmlldyhtb2RlbCkpO1xyXG4gICAgY2FzZSAndHYnOlxyXG4gICAgY2FzZSAncm91bmQnOlxyXG4gICAgICAgIHJldHVybiBoKCdkaXYjcGxhY2Vob2xkZXIubWFpbi13cmFwcGVyJywgcm91bmRWaWV3KG1vZGVsKSk7XHJcbiAgICBjYXNlICdhbmFseXNpcyc6XHJcbiAgICAgICAgcmV0dXJuIGgoJ2RpdiNwbGFjZWhvbGRlci5tYWluLXdyYXBwZXInLCBhbmFseXNpc1ZpZXcobW9kZWwpKTtcclxuICAgIGNhc2UgJ2dhbWVzJzpcclxuICAgICAgICByZXR1cm4gaCgnZGl2I3BsYWNlaG9sZGVyJywgZ2FtZXNWaWV3KG1vZGVsKSk7XHJcbiAgICBjYXNlICd0aGFua3MnOlxyXG4gICAgICAgIHJldHVybiBoKCdkaXYjcGxhY2Vob2xkZXIubWFpbi13cmFwcGVyJywgaCgnaDInLCAnVGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhJykpO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gaCgnZGl2I3BsYWNlaG9sZGVyLm1haW4td3JhcHBlcicsIGxvYmJ5Vmlldyhtb2RlbCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdweWNoZXNzLXZhcmlhbnRzJyk7XHJcbmlmIChlbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcclxuICAgIHBhdGNoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGFjZWhvbGRlcicpIGFzIEhUTUxFbGVtZW50LCB2aWV3KGVsLCBtb2RlbCkpO1xyXG59XHJcbiIsImltcG9ydCB7IGluaXQgfSBmcm9tIFwic25hYmJkb21cIjtcbmltcG9ydCBrbGFzcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2NsYXNzJztcbmltcG9ydCBhdHRyaWJ1dGVzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvYXR0cmlidXRlcyc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL3Byb3BzJztcbmltcG9ydCBsaXN0ZW5lcnMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9ldmVudGxpc3RlbmVycyc7XG5cbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xuXG5pbXBvcnQgaCBmcm9tICdzbmFiYmRvbS9oJztcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSAnc25hYmJkb20vdm5vZGUnO1xuXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJ2NoZXNzZ3JvdW5keC90eXBlcyc7XG5cbmltcG9ydCB7IGdlYXJCdXR0b24sIHRvZ2dsZU9yaWVudGF0aW9uIH0gZnJvbSAnLi9zZXR0aW5ncyc7XG5pbXBvcnQgUm91bmRDb250cm9sbGVyIGZyb20gJy4vcm91bmRDdHJsJztcbmltcG9ydCBBbmFseXNpc0NvbnRyb2xsZXIgZnJvbSAnLi9hbmFseXNpc0N0cmwnO1xuXG5cbmludGVyZmFjZSBFdmFsIHtcbiAgY3A/OiBudW1iZXI7XG4gIG1hdGU/OiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIHRvUG92KGNvbG9yOiBDb2xvciwgZGlmZjogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gZGlmZiA6IC1kaWZmO1xufVxuXG5mdW5jdGlvbiByYXdXaW5uaW5nQ2hhbmNlcyhjcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIDIgLyAoMSArIE1hdGguZXhwKC0wLjAwNCAqIGNwKSkgLSAxO1xufVxuXG5mdW5jdGlvbiBjcFdpbm5pbmdDaGFuY2VzKGNwOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gcmF3V2lubmluZ0NoYW5jZXMoTWF0aC5taW4oTWF0aC5tYXgoLTEwMDAsIGNwKSwgMTAwMCkpO1xufVxuXG5mdW5jdGlvbiBtYXRlV2lubmluZ0NoYW5jZXMobWF0ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgdmFyIGNwID0gKDIxIC0gTWF0aC5taW4oMTAsIE1hdGguYWJzKG1hdGUpKSkgKiAxMDA7XG4gIHZhciBzaWduZWQgPSBjcCAqIChtYXRlID4gMCA/IDEgOiAtMSk7XG4gIHJldHVybiByYXdXaW5uaW5nQ2hhbmNlcyhzaWduZWQpO1xufVxuXG5mdW5jdGlvbiBldmFsV2lubmluZ0NoYW5jZXMoZXY6IEV2YWwpOiBudW1iZXIge1xuICByZXR1cm4gdHlwZW9mIGV2Lm1hdGUgIT09ICd1bmRlZmluZWQnID8gbWF0ZVdpbm5pbmdDaGFuY2VzKGV2Lm1hdGUpIDogY3BXaW5uaW5nQ2hhbmNlcyhldi5jcCEpO1xufVxuXG4vLyB3aW5uaW5nIGNoYW5jZXMgZm9yIGEgY29sb3Jcbi8vIDEgIGluZmluaXRlbHkgd2lubmluZ1xuLy8gLTEgaW5maW5pdGVseSBsb3NpbmdcbmV4cG9ydCBmdW5jdGlvbiBwb3ZDaGFuY2VzKGNvbG9yOiBDb2xvciwgZXY6IEV2YWwpIHtcbiAgcmV0dXJuIHRvUG92KGNvbG9yLCBldmFsV2lubmluZ0NoYW5jZXMoZXYpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdE1vdmUgKGN0cmwsIHBseSkge1xuICAgIGNvbnN0IGFjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2xpLm1vdmUuYWN0aXZlJyk7XG4gICAgaWYgKGFjdGl2ZSkgYWN0aXZlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuXG4gICAgY29uc3QgZWxQbHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBsaS5tb3ZlW3BseT1cIiR7cGx5fVwiXWApO1xuICAgIGlmIChlbFBseSkgZWxQbHkuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG5cbiAgICBjb25zdCBnYXVnZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dhdWdlJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKGdhdWdlRWwpIHtcbiAgICAgICAgY29uc3QgYmxhY2tFbCA9IGdhdWdlRWwucXVlcnlTZWxlY3RvcignZGl2LmJsYWNrJykgYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChibGFja0VsICYmIGN0cmwuc3RlcHNbcGx5XVsnY2V2YWwnXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YXIgc2NvcmUgPSBjdHJsLnN0ZXBzW3BseV1bJ2NldmFsJ11bJ3Njb3JlJ107XG4gICAgICAgICAgICBpZiAoc2NvcmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ID0gcG92Q2hhbmNlcyhjdHJsLnN0ZXBzW3BseV1bJ3R1cm5Db2xvciddLCBzY29yZSk7XG4gICAgICAgICAgICAgICAgYmxhY2tFbC5zdHlsZS5oZWlnaHQgPSBTdHJpbmcoMTAwIC0gKGV2ICsgMSkgKiA1MCkgKyAnJSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJsYWNrRWwuc3R5bGUuaGVpZ2h0ID0gJzUwJSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3RybC5nb1BseShwbHkpXG4gICAgc2Nyb2xsVG9QbHkoY3RybCk7XG5cbiAgICBpZiAoY3RybCBpbnN0YW5jZW9mIEFuYWx5c2lzQ29udHJvbGxlcikge1xuICAgICAgICBjb25zdCBoYyA9IGN0cmwuYW5hbHlzaXNDaGFydDtcbiAgICAgICAgY29uc3QgaGNQdCA9IGhjLnNlcmllc1swXS5kYXRhW3BseV07XG4gICAgICAgIGhjUHQuc2VsZWN0KCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1BseSAoY3RybCkge1xuICAgIGlmIChjdHJsLnN0ZXBzLmxlbmd0aCA8IDkpIHJldHVybjtcbiAgICBjb25zdCBtb3Zlc0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmVzJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgcGx5RWwgPSBtb3Zlc0VsLnF1ZXJ5U2VsZWN0b3IoJ2xpLm1vdmUuYWN0aXZlJykgYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBtb3ZlbGlzdGJsb2NrRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZWxpc3QtYmxvY2snKSBhcyBIVE1MRWxlbWVudDtcbiAgICBsZXQgc3Q6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChjdHJsLnBseSA9PSAwKSBzdCA9IDA7XG4gICAgZWxzZSBpZiAoY3RybC5wbHkgPT0gY3RybC5zdGVwcy5sZW5ndGggLSAxKSBzdCA9IDk5OTk5O1xuICAgIGVsc2UgaWYgKHBseUVsKSBzdCA9IHBseUVsLm9mZnNldFRvcCAtIG1vdmVsaXN0YmxvY2tFbC5vZmZzZXRIZWlnaHQgKyBwbHlFbC5vZmZzZXRIZWlnaHQ7XG5cbiAgICBpZiAodHlwZW9mIHN0ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChwbHlFbCAmJiBjdHJsIGluc3RhbmNlb2YgUm91bmRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICB2YXIgaXNTbW9vdGhTY3JvbGxTdXBwb3J0ZWQgPSAnc2Nyb2xsQmVoYXZpb3InIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTtcbiAgICAgICAgICAgIGlmKGlzU21vb3RoU2Nyb2xsU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgcGx5RWwuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiBcInNtb290aFwiLCBibG9jazogXCJjZW50ZXJcIn0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwbHlFbC5zY3JvbGxJbnRvVmlldyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb3ZlbGlzdGJsb2NrRWwuc2Nyb2xsVG9wID0gc3Q7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlbGlzdFZpZXcgKGN0cmwpIHtcbiAgICBjdHJsLnZnZWFyID0gZ2VhckJ1dHRvbihjdHJsKTtcbiAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmUtY29udHJvbHMnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjdHJsLm1vdmVDb250cm9scyA9IHBhdGNoKGNvbnRhaW5lciwgaCgnZGl2LmJ0bi1jb250cm9scycsIFtcbiAgICAgICAgICAgIGgoJ2J1dHRvbiNmbGlwJywgeyBvbjogeyBjbGljazogKCkgPT4gdG9nZ2xlT3JpZW50YXRpb24oY3RybCkgfSB9LCBbaCgnaScsIHtwcm9wczoge3RpdGxlOiAnRmxpcCBib2FyZCd9LCBjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tcmVmcmVzaFwiOiB0cnVlfSB9ICksIF0pLFxuICAgICAgICAgICAgaCgnYnV0dG9uJywgeyBvbjogeyBjbGljazogKCkgPT4gc2VsZWN0TW92ZShjdHJsLCAwKSB9IH0sIFtoKCdpJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1mYXN0LWJhY2t3YXJkXCI6IHRydWV9IH0gKSwgXSksXG4gICAgICAgICAgICBoKCdidXR0b24nLCB7IG9uOiB7IGNsaWNrOiAoKSA9PiBzZWxlY3RNb3ZlKGN0cmwsIE1hdGgubWF4KGN0cmwucGx5IC0gMSwgMCkpIH0gfSwgW2goJ2knLCB7Y2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLXN0ZXAtYmFja3dhcmRcIjogdHJ1ZX0gfSApLCBdKSxcbiAgICAgICAgICAgIGgoJ2J1dHRvbicsIHsgb246IHsgY2xpY2s6ICgpID0+IHNlbGVjdE1vdmUoY3RybCwgTWF0aC5taW4oY3RybC5wbHkgKyAxLCBjdHJsLnN0ZXBzLmxlbmd0aCAtIDEpKSB9IH0sIFtoKCdpJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1zdGVwLWZvcndhcmRcIjogdHJ1ZX0gfSApLCBdKSxcbiAgICAgICAgICAgIGgoJ2J1dHRvbicsIHsgb246IHsgY2xpY2s6ICgpID0+IHNlbGVjdE1vdmUoY3RybCwgY3RybC5zdGVwcy5sZW5ndGggLSAxKSB9IH0sIFtoKCdpJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1mYXN0LWZvcndhcmRcIjogdHJ1ZX0gfSApLCBdKSxcbiAgICAgICAgICAgIGN0cmwudmdlYXIsXG4gICAgICAgIF0pXG4gICAgKTtcbiAgICBpZiAoY3RybCBpbnN0YW5jZW9mIFJvdW5kQ29udHJvbGxlcikge1xuICAgICAgICByZXR1cm4gaCgnZGl2I21vdmVzJywgW2goJ29sLm1vdmVsaXN0I21vdmVsaXN0JyldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaCgnZGl2LmFuYWwjbW92ZXMnLCBbaCgnb2wubW92ZWxpc3QjbW92ZWxpc3QnKV0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZU1vdmVsaXN0IChjdHJsLCBwbHlGcm9tLCBwbHlUbykge1xuICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZWxpc3QnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBhY3RpdmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdsaS5tb3ZlLmFjdGl2ZScpO1xuICAgIGlmIChhY3RpdmUpIGFjdGl2ZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcblxuICAgIHZhciBtb3ZlczogVk5vZGVbXSA9IFtdO1xuICAgIHZhciBwbHksIG1vdmUsIG1vdmVFbCwgZWw7XG4gICAgZm9yIChwbHkgPSBwbHlGcm9tOyBwbHkgPCBwbHlUbzsgcGx5KyspIHtcblxuICAgICAgICBtb3ZlID0gY3RybC5zdGVwc1twbHldWydzYW4nXTtcbiAgICAgICAgaWYgKG1vdmUgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgIG1vdmVFbCA9IFtoKCdzYW4nLCBtb3ZlKV07XG4gICAgICAgIC8vdmFyIGNldmFsID0gY3RybC5zdGVwc1twbHldWydldmFsJ107XG4gICAgICAgIC8vaWYgKGNldmFsID09PSBudWxsKSBjZXZhbCA9ICcnO1xuICAgICAgICBtb3ZlRWwucHVzaChoKCdldmFsI3BseScgKyBTdHJpbmcocGx5KSwgJycpKTtcbiAgICAgICAgY29uc3QgcCA9IHBseTtcbiAgICAgICAgZWwgPSBoKCdsaS5tb3ZlJywge2NsYXNzOiB7YWN0aXZlOiAocGx5ID09PSBwbHlUbyAtIDEpfSwgYXR0cnM6IHtwbHk6IHBseX0sIG9uOiB7IGNsaWNrOiAoKSA9PiBzZWxlY3RNb3ZlKGN0cmwsIHApIH19LCBtb3ZlRWwpO1xuICAgICAgICBpZiAocGx5ICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgbW92ZXMucHVzaChoKCdsaS5tb3ZlLmNvdW50ZXInLCAocGx5ICsgMSkgLyAyKSk7XG4gICAgICAgIH1cbiAgICAgICAgbW92ZXMucHVzaChlbCk7XG4gICAgfVxuICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnb2wubW92ZWxpc3QjbW92ZWxpc3QnLCBtb3ZlcykpO1xuICAgIHNjcm9sbFRvUGx5KGN0cmwpO1xufSIsImltcG9ydCBoIGZyb20gJ3NuYWJiZG9tL2gnO1xuXG5leHBvcnQgZnVuY3Rpb24gcGxheWVyKGlkLCB0aXRsZSwgbmFtZSwgbGV2ZWwpIHtcbiAgICByZXR1cm4gaCgncm91bmQtcGxheWVyJywgW1xuICAgICAgICBoKCdkaXYucGxheWVyLWRhdGEnLCBbXG4gICAgICAgICAgICBoKCdpLXNpZGUub25saW5lIycgKyBpZCwge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1vbmxpbmVcIjogZmFsc2UsIFwiaWNvbi1vZmZsaW5lXCI6IHRydWV9fSksXG4gICAgICAgICAgICBoKCdwbGF5ZXInLCBbXG4gICAgICAgICAgICAgICAgaCgnYS51c2VyLWxpbmsnLCB7YXR0cnM6IHtocmVmOiAnL0AvJyArIG5hbWV9fSwgW1xuICAgICAgICAgICAgICAgICAgICBoKCdwbGF5ZXItdGl0bGUnLCBcIiBcIiArIHRpdGxlICsgXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBuYW1lICsgKCh0aXRsZSA9PT0gXCJCT1RcIiAmJiBsZXZlbCA+IDApID8gJyBsZXZlbCAnICsgbGV2ZWw6ICcnKSxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBoKCdyYXRpbmcnLCBcIjE1MDA/XCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIF0pLFxuICAgIF0pO1xufVxuIiwiaW1wb3J0IHsgaW5pdCB9IGZyb20gJ3NuYWJiZG9tJztcclxuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xyXG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xyXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL3Byb3BzJztcclxuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuaW1wb3J0IGggZnJvbSAnc25hYmJkb20vaCc7XHJcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSAnc25hYmJkb20vdm5vZGUnO1xyXG5cclxuaW1wb3J0IHsgcmVuZGVyVXNlcm5hbWUgfSBmcm9tICcuL3VzZXInO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHJlbmRlclBsYXllcnMocGxheWVycykge1xyXG4gICAgdmFyIHJvd3MgPSBwbGF5ZXJzLm1hcChcclxuICAgICAgICAocGxheWVyKSA9PiBoKCd0cicsIFtcclxuICAgICAgICAgICAgaCgndGQucGxheWVyLWRhdGEnLCBbXHJcbiAgICAgICAgICAgICAgICBoKCdpLXNpZGUub25saW5lJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1vbmxpbmVcIjogcGxheWVyW1wib25saW5lXCJdLCBcImljb24tb2ZmbGluZVwiOiAhcGxheWVyW1wib25saW5lXCJdfX0pLFxyXG4gICAgICAgICAgICAgICAgaCgncGxheWVyJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2EudXNlci1saW5rJywge2F0dHJzOiB7aHJlZjogJy9ALycgKyBwbGF5ZXJbXCJfaWRcIl19fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdwbGF5ZXItdGl0bGUnLCBcIiBcIiArIHBsYXllcltcInRpdGxlXCJdICsgXCIgXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJbXCJfaWRcIl0sXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICByZXR1cm4gcm93cztcclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyQWxsUGxheWVycyhwbGF5ZXJzKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIGgoJ3RoZWFkJywgW2goJ3RyJywgW2goJ3RoJywgJ09ubGluZScpLCBdKV0pLCBoKCd0Ym9keScsIHJlbmRlclBsYXllcnMocGxheWVycy5maWx0ZXIoKHBsYXllcikgPT4gcGxheWVyW1wib25saW5lXCJdKSkpLFxyXG4gICAgICAgIGgoJ2hyJyksXHJcbiAgICAgICAgaCgndGhlYWQnLCBbaCgndHInLCBbaCgndGgnLCAnT2ZmbGluZScpLCBdKV0pLCBoKCd0Ym9keScsIHJlbmRlclBsYXllcnMocGxheWVycy5maWx0ZXIoKHBsYXllcikgPT4gIXBsYXllcltcIm9ubGluZVwiXSkpKVxyXG4gICAgXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBsYXllcnNWaWV3KG1vZGVsKTogVk5vZGVbXSB7XHJcbiAgICByZW5kZXJVc2VybmFtZShtb2RlbFtcImhvbWVcIl0sIG1vZGVsW1widXNlcm5hbWVcIl0pO1xyXG5cclxuICAgIHZhciB4bWxodHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB2YXIgdXJsID0gbW9kZWxbXCJob21lXCJdICsgXCIvYXBpL3BsYXllcnNcIjtcclxuXHJcbiAgICB4bWxodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgdmFyIG15QXJyID0gSlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgbXlGdW5jdGlvbihteUFycik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB4bWxodHRwLm9wZW4oXCJHRVRcIiwgdXJsLCB0cnVlKTtcclxuICAgIHhtbGh0dHAuc2VuZCgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIG15RnVuY3Rpb24oYXJyKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkVk5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVycycpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFycik7XHJcbiAgICAgICAgaWYgKG9sZFZOb2RlIGluc3RhbmNlb2YgRWxlbWVudCkge1xyXG4gICAgICAgICAgICBwYXRjaChvbGRWTm9kZSBhcyBIVE1MRWxlbWVudCwgaCgndGFibGUjcGxheWVycycsIHJlbmRlckFsbFBsYXllcnMoYXJyKSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhtb2RlbCk7XHJcbiAgICByZXR1cm4gW2goJ2FzaWRlLnNpZGViYXItZmlyc3QnKSxcclxuICAgICAgICAgICAgaCgnbWFpbi5wbGF5ZXJzJywgW2goJ3RhYmxlI3BsYXllcnMnKV0pLFxyXG4gICAgICAgICAgICBoKCdhc2lkZS5zaWRlYmFyLXNlY29uZCcpLFxyXG4gICAgICAgIF07XHJcbn1cclxuIiwiaW1wb3J0IHsgaCwgaW5pdCB9IGZyb20gXCJzbmFiYmRvbVwiO1xuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvcHJvcHMnO1xuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcblxuaW1wb3J0ICogYXMgY2cgZnJvbSAnY2hlc3Nncm91bmR4L3R5cGVzJztcbmltcG9ydCB7IGRyYWdOZXdQaWVjZSB9IGZyb20gJ2NoZXNzZ3JvdW5keC9kcmFnJztcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnY2hlc3Nncm91bmR4L3R5cGVzJztcbi8vaW1wb3J0IHsgc2V0RHJvcE1vZGUsIGNhbmNlbERyb3BNb2RlIH0gZnJvbSAnY2hlc3Nncm91bmR4L2Ryb3AnO1xuXG5pbXBvcnQgeyByb2xlVG9TYW4sIG5lZWRQb2NrZXRzLCBwb2NrZXRSb2xlcywgbGMgfSBmcm9tICcuL2NoZXNzJztcbmltcG9ydCBSb3VuZENvbnRyb2xsZXIgZnJvbSAnLi9yb3VuZEN0cmwnO1xuaW1wb3J0IEFuYWx5c2lzQ29udHJvbGxlciBmcm9tICcuL2FuYWx5c2lzQ3RybCc7XG5cbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xuXG50eXBlIFBvc2l0aW9uID0gJ3RvcCcgfCAnYm90dG9tJztcblxuY29uc3QgZXZlbnROYW1lcyA9IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBvY2tldFZpZXcoY3RybDogUm91bmRDb250cm9sbGVyIHwgQW5hbHlzaXNDb250cm9sbGVyLCBjb2xvcjogQ29sb3IsIHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICBjb25zdCBwb2NrZXQgPSBjdHJsLnBvY2tldHNbcG9zaXRpb24gPT09ICd0b3AnID8gMCA6IDFdO1xuICBjb25zdCBwaWVjZVJvbGVzID0gT2JqZWN0LmtleXMocG9ja2V0KTtcbiAgcmV0dXJuIGgoJ2Rpdi5wb2NrZXQuJyArIHBvc2l0aW9uLCB7XG4gICAgY2xhc3M6IHsgdXNhYmxlOiB0cnVlIH0sXG4gICAgaG9vazoge1xuICAgICAgaW5zZXJ0OiB2bm9kZSA9PiB7XG4gICAgICAgIGV2ZW50TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAodm5vZGUuZWxtIGFzIEhUTUxFbGVtZW50KS5hZGRFdmVudExpc3RlbmVyKG5hbWUsIChlOiBjZy5Nb3VjaEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb24gPT09IChjdHJsLmZsaXAgPyAndG9wJyA6ICdib3R0b20nKSkgZHJhZyhjdHJsLCBlKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHBpZWNlUm9sZXMubWFwKHJvbGUgPT4ge1xuICAgIGxldCBuYiA9IHBvY2tldFtyb2xlXSB8fCAwO1xuICAgIHJldHVybiBoKCdwaWVjZS4nICsgcm9sZSArICcuJyArIGNvbG9yLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICAnZGF0YS1yb2xlJzogcm9sZSxcbiAgICAgICAgJ2RhdGEtY29sb3InOiBjb2xvcixcbiAgICAgICAgJ2RhdGEtbmInOiBuYixcbiAgICAgIH1cbiAgICB9KTtcbiAgfSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJhZyhjdHJsOiBSb3VuZENvbnRyb2xsZXIgfCBBbmFseXNpc0NvbnRyb2xsZXIsIGU6IGNnLk1vdWNoRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZS5idXR0b24gIT09IHVuZGVmaW5lZCAmJiBlLmJ1dHRvbiAhPT0gMCkgcmV0dXJuOyAvLyBvbmx5IHRvdWNoIG9yIGxlZnQgY2xpY2tcbiAgICBjb25zdCBlbCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgIHJvbGUgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm9sZScpIGFzIGNnLlJvbGUsXG4gICAgY29sb3IgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sb3InKSBhcyBjZy5Db2xvcixcbiAgICBudW1iZXIgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmInKTtcbiAgICBpZiAoIXJvbGUgfHwgIWNvbG9yIHx8IG51bWJlciA9PT0gJzAnKSByZXR1cm47XG4gICAgaWYgKGN0cmwuY2xpY2tEcm9wICE9PSB1bmRlZmluZWQgJiYgcm9sZSA9PT0gY3RybC5jbGlja0Ryb3Aucm9sZSkge1xuICAgICAgICBjdHJsLmNsaWNrRHJvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY3RybC5jaGVzc2dyb3VuZC5zZWxlY3RTcXVhcmUobnVsbCk7XG4gICAgICAgIC8vY2FuY2VsRHJvcE1vZGUoY3RybC5jaGVzc2dyb3VuZC5zdGF0ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvL3NldERyb3BNb2RlKGN0cmwuY2hlc3Nncm91bmQuc3RhdGUsIG51bWJlciAhPT0gJzAnID8geyBjb2xvciwgcm9sZSB9IDogdW5kZWZpbmVkKTtcbiAgICB9O1xuXG4gICAgLy8gU2hvdyBwb3NzaWJsZSBkcm9wIGRlc3RzIG9uIG15IHR1cm4gb25seSBub3QgdG8gbWVzcyB1cCBwcmVkcm9wXG4gICAgaWYgKGN0cmwudHVybkNvbG9yID09PSBjdHJsLm15Y29sb3IpIHtcbiAgICAgICAgY29uc3QgZHJvcERlc3RzID0geyAnejAnOiBjdHJsLmRlc3RzW3JvbGVUb1Nhbltyb2xlXSArIFwiQFwiXSB9O1xuICAgICAgICBjb25zb2xlLmxvZyhcIiAgICAgbmV3IHBpZWNlIHRvIHowXCIsIHJvbGUpO1xuICAgICAgICBjdHJsLmNoZXNzZ3JvdW5kLm5ld1BpZWNlKHtcInJvbGVcIjogcm9sZSwgXCJjb2xvclwiOiBjb2xvcn0sICd6MCcpXG4gICAgICAgIGN0cmwuY2hlc3Nncm91bmQuc2V0KHtcbiAgICAgICAgICAgIHR1cm5Db2xvcjogY29sb3IsXG4gICAgICAgICAgICBtb3ZhYmxlOiB7XG4gICAgICAgICAgICAgICAgZGVzdHM6IGRyb3BEZXN0cyxcbiAgICAgICAgICAgICAgICBzaG93RGVzdHM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY3RybC5jaGVzc2dyb3VuZC5zZWxlY3RTcXVhcmUoJ3owJyk7XG4gICAgICAgIGN0cmwuY2hlc3Nncm91bmQuc2V0KHsgbGFzdE1vdmU6IGN0cmwubGFzdG1vdmUgfSk7XG4gICAgfVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGRyYWdOZXdQaWVjZShjdHJsLmNoZXNzZ3JvdW5kLnN0YXRlLCB7IGNvbG9yLCByb2xlIH0sIGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJvcElzVmFsaWQoZGVzdHM6IGNnLkRlc3RzLCByb2xlOiBjZy5Sb2xlLCBrZXk6IGNnLktleSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRyb3BzID0gZGVzdHNbcm9sZVRvU2FuW3JvbGVdICsgXCJAXCJdO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZHJvcHM6XCIsIGRyb3BzKVxuXG4gICAgaWYgKGRyb3BzID09PSB1bmRlZmluZWQgfHwgZHJvcHMgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBkcm9wcy5pbmRleE9mKGtleSkgIT09IC0xO1xufVxuXG4vLyBUT0RPOiBhZnRlciAxIG1vdmUgbWFkZSBvbmx5IDEgcG9ja2V0IHVwZGF0ZSBuZWVkZWQgYXQgb25jZSwgbm8gbmVlZCB0byB1cGRhdGUgYm90aFxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVBvY2tldHMoY3RybDogUm91bmRDb250cm9sbGVyIHwgQW5hbHlzaXNDb250cm9sbGVyLCB2cG9ja2V0MCwgdnBvY2tldDEpOiB2b2lkIHtcbiAgICAvLyB1cGRhdGUgcG9ja2V0cyBmcm9tIGZlblxuICAgIGlmIChuZWVkUG9ja2V0cyhjdHJsLnZhcmlhbnQpKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gY3RybC5mdWxsZmVuLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgY29uc3QgZmVuX3BsYWNlbWVudCA9IHBhcnRzWzBdO1xuICAgICAgICB2YXIgcG9ja2V0cyA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGJyYWNrZXRQb3MgPSBmZW5fcGxhY2VtZW50LmluZGV4T2YoXCJbXCIpO1xuICAgICAgICBpZiAoYnJhY2tldFBvcyAhPT0gLTEpIHtcbiAgICAgICAgICAgIHBvY2tldHMgPSBmZW5fcGxhY2VtZW50LnNsaWNlKGJyYWNrZXRQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYyA9IGN0cmwubXljb2xvclswXTtcbiAgICAgICAgY29uc3QgbyA9IGN0cmwub3BwY29sb3JbMF07XG4gICAgICAgIGNvbnN0IHJvbGVzID0gcG9ja2V0Um9sZXMoY3RybC52YXJpYW50KTtcbiAgICAgICAgdmFyIHBvID0ge307XG4gICAgICAgIHZhciBwYyA9IHt9O1xuICAgICAgICByb2xlcy5mb3JFYWNoKHJvbGUgPT4gcGNbcm9sZV0gPSBsYyhwb2NrZXRzLCByb2xlVG9TYW5bcm9sZV0udG9Mb3dlckNhc2UoKSwgYz09PShjdHJsLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykgPyAnYicgOiAndycpKSk7XG4gICAgICAgIHJvbGVzLmZvckVhY2gocm9sZSA9PiBwb1tyb2xlXSA9IGxjKHBvY2tldHMsIHJvbGVUb1Nhbltyb2xlXS50b0xvd2VyQ2FzZSgpLCBvPT09KGN0cmwudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/ICdiJyA6ICd3JykpKTtcbiAgICAgICAgaWYgKGN0cmwuZmxpcCkge1xuICAgICAgICAgICAgY3RybC5wb2NrZXRzID0gW3BjLCBwb107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdHJsLnBvY2tldHMgPSBbcG8sIHBjXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhvLGMscG8scGMpXG4gICAgICAgIGN0cmwudnBvY2tldDAgPSBwYXRjaCh2cG9ja2V0MCwgcG9ja2V0VmlldyhjdHJsLCBjdHJsLmZsaXAgPyBjdHJsLm15Y29sb3IgOiBjdHJsLm9wcGNvbG9yLCBcInRvcFwiKSk7XG4gICAgICAgIGN0cmwudnBvY2tldDEgPSBwYXRjaCh2cG9ja2V0MSwgcG9ja2V0VmlldyhjdHJsLCBjdHJsLmZsaXAgPyBjdHJsLm9wcGNvbG9yIDogY3RybC5teWNvbG9yLCBcImJvdHRvbVwiKSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaW5pdCB9IGZyb20gJ3NuYWJiZG9tJztcclxuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xyXG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xyXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL3Byb3BzJztcclxuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuaW1wb3J0IGggZnJvbSAnc25hYmJkb20vaCc7XHJcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSAnc25hYmJkb20vdm5vZGUnO1xyXG5cclxuaW1wb3J0IHsgQ2hlc3Nncm91bmQgfSBmcm9tICdjaGVzc2dyb3VuZHgnO1xyXG5cclxuaW1wb3J0IHsgcmVuZGVyVXNlcm5hbWUgfSBmcm9tICcuL3VzZXInO1xyXG5pbXBvcnQgeyB2YXJpYW50cywgVkFSSUFOVFMgfSBmcm9tICcuL2NoZXNzJztcclxuaW1wb3J0IHsgcmVuZGVyVGltZWFnbyB9IGZyb20gJy4vY2xvY2snO1xyXG5pbXBvcnQgeyBjaGFuZ2VDU1MgfSBmcm9tICcuL3NldHRpbmdzJztcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVzdWx0KHN0YXR1cywgcmVzdWx0KSB7XHJcbiAgICB2YXIgdGV4dCA9ICcnO1xyXG4gICAgY29uc29sZS5sb2coXCJyZXN1bHQoKVwiLCBzdGF0dXMsIHJlc3VsdCk7XHJcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgY2FzZSAtMjpcclxuICAgIGNhc2UgLTE6XHJcbiAgICAgICAgdGV4dCA9ICdQbGF5aW5nIHJpZ2h0IG5vdyc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIDA6XHJcbiAgICAgICAgdGV4dCA9ICdHYW1lIGFib3J0ZWQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAxOlxyXG4gICAgICAgIHRleHQgPSAnQ2hlY2ttYXRlJztcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgMjpcclxuICAgICAgICB0ZXh0ID0gKChyZXN1bHQgPT09ICcxLTAnKSA/ICdCbGFjaycgOiAnV2hpdGUnKSArICcgcmVzaWduZWQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAzOlxyXG4gICAgICAgIHRleHQgPSAnU3RhbGVtYXRlJztcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgNDpcclxuICAgICAgICB0ZXh0ID0gJ1RpbWUgb3V0JztcclxuICAgICAgICBicmVhaztcclxuICAgIGNhc2UgNTpcclxuICAgICAgICB0ZXh0ID0gJ0RyYXcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSA2OlxyXG4gICAgICAgIHRleHQgPSAnVGltZSBvdXQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSA3OlxyXG4gICAgICAgIHRleHQgPSAoKHJlc3VsdCA9PT0gJzEtMCcpID8gJ0JsYWNrJyA6ICdXaGl0ZScpICsgJyBhYmFuZG9uZWQgdGhlIGdhbWUnO1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRleHQgPSAnKic7XHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICAgIHJldHVybiAoc3RhdHVzIDw9IDApID8gdGV4dCA6IHRleHQgKyAnLCAnICsgcmVzdWx0O1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gcmVuZGVyR2FtZXMobW9kZWwsIGdhbWVzKSB7XHJcbi8vICAgICAgICAgICAgICAgIGgoJ2ZuJywgcGxheWVyW1wiZmlyc3RfbmFtZVwiXSksXHJcbi8vICAgICAgICAgICAgICAgIGgoJ2xuJywgcGxheWVyW1wibGFzdF9uYW1lXCJdKSxcclxuLy8gICAgICAgICAgICAgICAgaCgnY291bnRyeScsIHBsYXllcltcImNvdW50cnlcIl0pLFxyXG4gICAgdmFyIHJvd3MgPSBnYW1lcy5tYXAoKGdhbWUpID0+IGgoXHJcbiAgICAgICAgJ3RyJyxcclxuICAgICAgICB7IG9uOiB7IGNsaWNrOiAoKSA9PiB7IHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24obW9kZWxbXCJob21lXCJdICsgJy8nICsgZ2FtZVtcIl9pZFwiXSk7IH0gfSxcclxuICAgICAgICB9LCBbXHJcbiAgICAgICAgaCgndGQuYm9hcmQnLCBbXHJcbiAgICAgICAgICAgIGgoJ3NlbGVjdGlvbi4nICsgVkFSSUFOVFNbZ2FtZVtcInZcIl1dLmJvYXJkICsgJy4nICsgVkFSSUFOVFNbZ2FtZVtcInZcIl1dLnBpZWNlcywgW1xyXG4gICAgICAgICAgICAgICAgaCgnZGl2LmNnLXdyYXAuJyArIFZBUklBTlRTW2dhbWVbXCJ2XCJdXS5jZyArICcubWluaScsIHsgaG9vazoge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc2VydDogKHZub2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENoZXNzZ3JvdW5kKHZub2RlLmVsbSBhcyBIVE1MRWxlbWVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld09ubHk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZW46IGdhbWVbXCJmXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IFZBUklBTlRTW2dhbWVbXCJ2XCJdXS5nZW9tXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH19KSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgaCgndGQuZ2FtZXMtaW5mbycsIFtcclxuICAgICAgICAgICAgaCgnZGl2LmluZm8wJywge2F0dHJzOiB7XCJkYXRhLWljb25cIjogVkFSSUFOVFNbZ2FtZVtcInZcIl1dLmljb259LCBjbGFzczoge1wiaWNvblwiOiB0cnVlfX0sIFtcclxuICAgICAgICAgICAgICAgIGgoJ2Rpdi5pbmZvMScsIHthdHRyczoge1wiZGF0YS1pY29uXCI6IChnYW1lW1wielwiXSA9PT0gMSkgPyBcIlZcIiA6IFwiXCJ9LCBjbGFzczoge1wiaWNvblwiOiB0cnVlfX0pLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2LmluZm8yJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi50YycsIGdhbWVbXCJiXCJdICsgXCIrXCIgKyBnYW1lW1wiaVwiXSArIFwiIOKAoiBDYXN1YWwg4oCiIFwiICsgZ2FtZVtcInZcIl0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2luZm8tZGF0ZScsIHthdHRyczoge3RpbWVzdGFtcDogZ2FtZVtcImRcIl19fSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIGgoJ2RpdicsIFtcclxuICAgICAgICAgICAgICAgIGgoJ3BsYXllcicsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdhLnVzZXItbGluaycsIHthdHRyczoge2hyZWY6ICcvQC8nICsgZ2FtZVtcInVzXCJdWzBdfX0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgncGxheWVyLXRpdGxlJywgXCIgXCIgKyBnYW1lW1wid3RcIl0gKyBcIiBcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdhbWVbXCJ1c1wiXVswXSArICgoZ2FtZVtcInd0XCJdID09PSAnQk9UJyAmJiBnYW1lWyd4J10gPiAwKSA/ICcgbGV2ZWwgJyArIGdhbWVbJ3gnXTogJycpLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCd2cycsICcgLSAnKSxcclxuICAgICAgICAgICAgICAgIGgoJ3BsYXllcicsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdhLnVzZXItbGluaycsIHthdHRyczoge2hyZWY6ICcvQC8nICsgZ2FtZVtcInVzXCJdWzFdfX0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgncGxheWVyLXRpdGxlJywgXCIgXCIgKyBnYW1lW1wiYnRcIl0gKyBcIiBcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdhbWVbXCJ1c1wiXVsxXSArICgoZ2FtZVtcImJ0XCJdID09PSAnQk9UJyAmJiBnYW1lWyd4J10gPiAwKSA/ICcgbGV2ZWwgJyArIGdhbWVbJ3gnXTogJycpLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCdkaXYuaW5mby1yZXN1bHQnLCB7XHJcbiAgICAgICAgICAgICAgICBjbGFzczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwid2luXCI6IChnYW1lW1wiclwiXSA9PT0gJzEtMCcgJiYgZ2FtZVtcInVzXCJdWzBdID09PSBtb2RlbFtcInByb2ZpbGVpZFwiXSkgfHwgKGdhbWVbXCJyXCJdID09PSAnMC0xJyAmJiBnYW1lW1widXNcIl1bMV0gPT09IG1vZGVsW1wicHJvZmlsZWlkXCJdKSxcclxuICAgICAgICAgICAgICAgICAgICBcImxvc2VcIjogKGdhbWVbXCJyXCJdID09PSAnMC0xJyAmJiBnYW1lW1widXNcIl1bMF0gPT09IG1vZGVsW1wicHJvZmlsZWlkXCJdKSB8fCAoZ2FtZVtcInJcIl0gPT09ICcxLTAnICYmIGdhbWVbXCJ1c1wiXVsxXSA9PT0gbW9kZWxbXCJwcm9maWxlaWRcIl0pLFxyXG4gICAgICAgICAgICAgICAgfX0sIHJlc3VsdChnYW1lW1wic1wiXSwgZ2FtZVtcInJcIl0pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICByZXR1cm4gW2goJ3Rib2R5Jywgcm93cyldO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsb2FkR2FtZXMobW9kZWwsIHBhZ2UpIHtcclxuICAgIHZhciB4bWxodHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB2YXIgdXJsID0gbW9kZWxbXCJob21lXCJdICsgXCIvYXBpL1wiICsgbW9kZWxbXCJwcm9maWxlaWRcIl1cclxuICAgIGlmIChtb2RlbC5sZXZlbCkge1xyXG4gICAgICAgIHVybCA9IHVybCArIFwiL2xvc3M/eD04JnA9XCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVybCA9IHVybCArIFwiL2FsbD9wPVwiO1xyXG4gICAgfVxyXG5cclxuICAgIHhtbGh0dHAub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICB2YXIgbXlBcnIgPSBKU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIGVtcHR5IEpTT04sIGV4aXQgdGhlIGZ1bmN0aW9uXHJcbiAgICAgICAgICAgIGlmICghbXlBcnIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbXlGdW5jdGlvbihteUFycik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiR0VUIHVybDpcIiwgdXJsICsgcGFnZSlcclxuICAgIHhtbGh0dHAub3BlbihcIkdFVFwiLCB1cmwgKyBwYWdlLCB0cnVlKTtcclxuICAgIHhtbGh0dHAuc2VuZCgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIG15RnVuY3Rpb24oYXJyKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkVk5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2FtZXMnKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhhcnIpO1xyXG4gICAgICAgIGlmIChvbGRWTm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcGF0Y2gob2xkVk5vZGUgYXMgSFRNTEVsZW1lbnQsIGgoJ3RhYmxlI2dhbWVzJywgcmVuZGVyR2FtZXMobW9kZWwsIGFycikpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyVGltZWFnbygpO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gb2JzZXJ2ZVNlbnRpbmVsKHZub2RlOiBWTm9kZSwgbW9kZWwpIHtcclxuICAgIGNvbnN0IHNlbnRpbmVsID0gdm5vZGUuZWxtIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgdmFyIHBhZ2UgPSAwO1xyXG5cclxuICAgIHZhciBpbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihlbnRyaWVzID0+IHtcclxuICAgICAgICAvLyBJZiBpbnRlcnNlY3Rpb25SYXRpbyBpcyAwLCB0aGUgc2VudGluZWwgaXMgb3V0IG9mIHZpZXdcclxuICAgICAgICAvLyBhbmQgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4gRXhpdCB0aGUgZnVuY3Rpb25cclxuICAgICAgICBpZiAoZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbyA8PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxvYWRHYW1lcyhtb2RlbCwgcGFnZSk7XHJcbiAgICAgICAgcGFnZSArPSAxO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShzZW50aW5lbCEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvZmlsZVZpZXcobW9kZWwpOiBWTm9kZVtdIHtcclxuICAgIHJlbmRlclVzZXJuYW1lKG1vZGVsW1wiaG9tZVwiXSwgbW9kZWxbXCJ1c2VybmFtZVwiXSk7XHJcbiAgICBjb25zb2xlLmxvZyhtb2RlbCk7XHJcblxyXG4gICAgY29uc3QgQ1NTaW5kZXhlc0IgPSB2YXJpYW50cy5tYXAoKHZhcmlhbnQpID0+IGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfYm9hcmRcIl0gPT09IHVuZGVmaW5lZCA/IDAgOiBOdW1iZXIobG9jYWxTdG9yYWdlW3ZhcmlhbnQgKyBcIl9ib2FyZFwiXSkpO1xyXG4gICAgY29uc3QgQ1NTaW5kZXhlc1AgPSB2YXJpYW50cy5tYXAoKHZhcmlhbnQpID0+IGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfcGllY2VzXCJdID09PSB1bmRlZmluZWQgPyAwIDogTnVtYmVyKGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfcGllY2VzXCJdKSk7XHJcbiAgICBPYmplY3Qua2V5cyhWQVJJQU5UUykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFyaWFudCA9IFZBUklBTlRTW2tleV07XHJcbiAgICAgICAgaWYgKHZhcmlhbnQuQm9hcmRDU1MubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0gQ1NTaW5kZXhlc0JbdmFyaWFudHMuaW5kZXhPZihrZXkpXTtcclxuICAgICAgICAgICAgaWR4ID0gTWF0aC5taW4oaWR4LCB2YXJpYW50LkJvYXJkQ1NTLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICBjaGFuZ2VDU1MoJy9zdGF0aWMvJyArIHZhcmlhbnQuQm9hcmRDU1NbaWR4XSArICcuY3NzJyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodmFyaWFudC5QaWVjZUNTUy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBDU1NpbmRleGVzUFt2YXJpYW50cy5pbmRleE9mKGtleSldO1xyXG4gICAgICAgICAgICBpZHggPSBNYXRoLm1pbihpZHgsIHZhcmlhbnQuUGllY2VDU1MubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgIGNoYW5nZUNTUygnL3N0YXRpYy8nICsgdmFyaWFudC5QaWVjZUNTU1tpZHhdICsgJy5jc3MnKTtcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIFtoKCdhc2lkZS5zaWRlYmFyLWZpcnN0JyksXHJcbiAgICAgICAgICAgIGgoJ21haW4ucHJvZmlsZScsIFtcclxuICAgICAgICAgICAgICAgIGgoJ3BsYXllci1oZWFkJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsW1wicHJvZmlsZWlkXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2EuaS1kbCcsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtocmVmOiAnL2dhbWVzL2V4cG9ydC8nICsgbW9kZWxbXCJwcm9maWxlaWRcIl0sIFwiZG93bmxvYWRcIjogbW9kZWxbXCJwcm9maWxlaWRcIl0gKyAnLnBnbid9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tZG93bmxvYWRcIjogdHJ1ZX19KSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdhLmktdHYnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7aHJlZjogJy9ALycgKyBtb2RlbFtcInByb2ZpbGVpZFwiXSArICcvdHYnfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLXR2XCI6IHRydWV9fSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCd0YWJsZSNnYW1lcycpLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2I3NlbnRpbmVsJywgeyBob29rOiB7IGluc2VydDogKHZub2RlKSA9PiBvYnNlcnZlU2VudGluZWwodm5vZGUsIG1vZGVsKSB9fSlcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIGgoJ2FzaWRlLnNpZGViYXItc2Vjb25kJyksXHJcbiAgICAgICAgXTtcclxufVxyXG4iLCJpbXBvcnQgeyBoLCBpbml0IH0gZnJvbSBcInNuYWJiZG9tXCI7XHJcbmltcG9ydCBrbGFzcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2NsYXNzJztcclxuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcclxuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcclxuaW1wb3J0IHRvVk5vZGUgZnJvbSAnc25hYmJkb20vdG92bm9kZSc7XHJcblxyXG5pbXBvcnQgeyBrZXkycG9zIH0gZnJvbSAnY2hlc3Nncm91bmR4L3V0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNQcm9tb3Rpb24sIG1hbmRhdG9yeVByb21vdGlvbiwgcHJvbW90aW9uUm9sZXMsIHJvbGVUb1NhbiB9IGZyb20gJy4vY2hlc3MnO1xyXG5cclxuY29uc3QgcGF0Y2ggPSBpbml0KFtrbGFzcywgYXR0cmlidXRlcywgbGlzdGVuZXJzXSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjdHJsKSB7XHJcblxyXG4gICAgbGV0IHByb21vdGluZzogYW55ID0gZmFsc2U7XHJcbiAgICBsZXQgcm9sZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgZnVuY3Rpb24gc3RhcnQob3JpZywgZGVzdCwgbWV0YSkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VuZCA9IGN0cmwuZ2V0R3JvdW5kKCk7XHJcbiAgICAgICAgaWYgKGlzUHJvbW90aW9uKGN0cmwudmFyaWFudCwgZ3JvdW5kLnN0YXRlLnBpZWNlc1tkZXN0XSwgb3JpZywgZGVzdCwgbWV0YSwgY3RybC5wcm9tb3Rpb25zKSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IGN0cmwubXljb2xvcjtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZW50YXRpb24gPSBncm91bmQuc3RhdGUub3JpZW50YXRpb247XHJcbiAgICAgICAgICAgIGNvbnN0IG1vdmluZ1JvbGUgPSBncm91bmQuc3RhdGUucGllY2VzW2Rlc3RdLnJvbGU7XHJcbiAgICAgICAgICAgIHJvbGVzID0gcHJvbW90aW9uUm9sZXMoY3RybC52YXJpYW50LCBtb3ZpbmdSb2xlLCBvcmlnLCBkZXN0LCBjdHJsLnByb21vdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChjdHJsLnZhcmlhbnQpIHtcclxuICAgICAgICAgICAgLy8gVE9ETzogaW4gZ3JhbmQgY2hlc3MgdXNlIG1hbmRhdG9yeVByb21vdGlvbiB3aGVuIHByb21vdGlvbiBoYXBwZW5zIG9uIGJhY2sgcmFua1xyXG4gICAgICAgICAgICBjYXNlIFwibWluaXNob2dpXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJzaG9naVwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKG1hbmRhdG9yeVByb21vdGlvbihjdHJsLnZhcmlhbnQsIG1vdmluZ1JvbGUsIGRlc3QsIGNvbG9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21vdGUoZ3JvdW5kLCBkZXN0LCAncCcgKyBncm91bmQuc3RhdGUucGllY2VzW2Rlc3RdLnJvbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN0cmwuc2VuZE1vdmUob3JpZywgZGVzdCwgJysnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZHJhd19wcm9tbyhkZXN0LCBjb2xvciwgb3JpZW50YXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21vdGluZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZzogb3JpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdDogZGVzdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGN0cmwuc2VuZE1vdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2FtYm9kaWFuJzpcclxuICAgICAgICAgICAgY2FzZSAnbWFrcnVrJzpcclxuICAgICAgICAgICAgICAgIHByb21vdGUoZ3JvdW5kLCBkZXN0LCAnbWV0Jyk7XHJcbiAgICAgICAgICAgICAgICBjdHJsLnNlbmRNb3ZlKG9yaWcsIGRlc3QsICdtJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2l0dHV5aW4nOlxyXG4gICAgICAgICAgICAgICAgcHJvbW90ZShncm91bmQsIGRlc3QsICdmZXJ6Jyk7XHJcbiAgICAgICAgICAgICAgICBjdHJsLnNlbmRNb3ZlKG9yaWcsIGRlc3QsICdmJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIC8vIGluIGdyYW5kIGNoZXNzIHByb21vdGlvbiBvbiBiYWNrIHJhbmsgaXMgbWFuZGF0b3J5XHJcbiAgICAgICAgICAgICAgICAvLyBhbmQgc29tZXRpbWVzIG9ubHkgb25lIGNob2ljZSBleGlzdHNcclxuICAgICAgICAgICAgICAgIGlmIChyb2xlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByb2xlID0gcm9sZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbW8gPSByb2xlVG9TYW5bcm9sZV0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9tb3RlKGdyb3VuZCwgZGVzdCwgcm9sZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3RybC5zZW5kTW92ZShvcmlnLCBkZXN0LCBwcm9tbyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRyYXdfcHJvbW8oZGVzdCwgY29sb3IsIG9yaWVudGF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9tb3RpbmcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWc6IG9yaWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q6IGRlc3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjdHJsLnNlbmRNb3ZlLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBwcm9tb3RlKGcsIGtleSwgcm9sZSkge1xyXG4gICAgICAgIHZhciBwaWVjZXMgPSB7fTtcclxuICAgICAgICB2YXIgcGllY2UgPSBnLnN0YXRlLnBpZWNlc1trZXldO1xyXG4gICAgICAgIGlmIChnLnN0YXRlLnBpZWNlc1trZXldLnJvbGUgPT09IHJvbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBpZWNlc1trZXldID0ge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IHBpZWNlLmNvbG9yLFxyXG4gICAgICAgICAgICAgICAgcm9sZTogcm9sZSxcclxuICAgICAgICAgICAgICAgIHByb21vdGVkOiB0cnVlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGcuc2V0UGllY2VzKHBpZWNlcyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkcmF3X3Byb21vKGRlc3QsIGNvbG9yLCBvcmllbnRhdGlvbikge1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSB0b1ZOb2RlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2V4dGVuc2lvbicpIGFzIE5vZGUpO1xyXG4gICAgICAgIHBhdGNoKGNvbnRhaW5lciwgcmVuZGVyUHJvbW90aW9uKGRlc3QsIGNvbG9yLCBvcmllbnRhdGlvbikpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGRyYXdfbm9fcHJvbW8oKSB7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlbnNpb25fY2hvaWNlJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgcGF0Y2goY29udGFpbmVyLCBoKCdleHRlbnNpb24nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZmluaXNoKHJvbGUpIHtcclxuICAgICAgICBpZiAocHJvbW90aW5nKSB7XHJcbiAgICAgICAgICAgIGRyYXdfbm9fcHJvbW8oKTtcclxuICAgICAgICAgICAgY29uc3QgcHJvbW90ZWQgPSBwcm9tb3RlKGN0cmwuZ2V0R3JvdW5kKCksIHByb21vdGluZy5kZXN0LCByb2xlKTtcclxuICAgICAgICAgICAgbGV0IHByb21vO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChjdHJsLnZhcmlhbnQpIHtcclxuICAgICAgICAgICAgY2FzZSBcIm1pbmlzaG9naVwiOlxyXG4gICAgICAgICAgICBjYXNlIFwic2hvZ2lcIjpcclxuICAgICAgICAgICAgICAgIHByb21vID0gcHJvbW90ZWQgPyBcIitcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImdyYW5kaG91c2VcIjpcclxuICAgICAgICAgICAgY2FzZSBcImdyYW5kXCI6XHJcbiAgICAgICAgICAgICAgICBwcm9tbyA9IHByb21vdGVkID8gcm9sZVRvU2FuW3JvbGVdLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBwcm9tbyA9IHJvbGVUb1Nhbltyb2xlXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAocHJvbW90aW5nLmNhbGxiYWNrKSBwcm9tb3RpbmcuY2FsbGJhY2socHJvbW90aW5nLm9yaWcsIHByb21vdGluZy5kZXN0LCBwcm9tbyk7XHJcbiAgICAgICAgICAgIHByb21vdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gY2FuY2VsKCkge1xyXG4gICAgICAgIGRyYXdfbm9fcHJvbW8oKTtcclxuICAgICAgICBjdHJsLmdvUGx5KGN0cmwucGx5KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYmluZChldmVudE5hbWU6IHN0cmluZywgZjogKGU6IEV2ZW50KSA9PiB2b2lkLCByZWRyYXcpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpbnNlcnQodm5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHZub2RlLmVsbS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gZihlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVkcmF3KSByZWRyYXcoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlbmRlclByb21vdGlvbihkZXN0LCBjb2xvciwgb3JpZW50YXRpb24pIHtcclxuICAgICAgICBjb25zdCBkaW0gPSBjdHJsLmdldEdyb3VuZCgpLnN0YXRlLmRpbWVuc2lvbnNcclxuICAgICAgICBjb25zdCBmaXJzdFJhbmtJczAgPSBkaW0uaGVpZ2h0ID09PSAxMDtcclxuICAgICAgICB2YXIgbGVmdCA9IChkaW0ud2lkdGggLSBrZXkycG9zKGRlc3QsIGZpcnN0UmFua0lzMClbMF0pICogKDEwMCAvIGRpbS53aWR0aCk7XHJcbiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSBcIndoaXRlXCIpIGxlZnQgPSAoMTAwIC8gZGltLndpZHRoKSAqIChkaW0ud2lkdGggLSAxKSAtIGxlZnQ7XHJcbiAgICAgICAgdmFyIHZlcnRpY2FsID0gY29sb3IgPT09IG9yaWVudGF0aW9uID8gXCJ0b3BcIiA6IFwiYm90dG9tXCI7XHJcbiAgICAgICAgcmV0dXJuIGgoXHJcbiAgICAgICAgICAgIFwiZGl2I2V4dGVuc2lvbl9jaG9pY2UuXCIgKyB2ZXJ0aWNhbCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaG9vazoge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc2VydDogdm5vZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbCA9IHZub2RlLmVsbSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IGNhbmNlbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJvbGVzLm1hcCgoc2VydmVyUm9sZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRvcCA9IChjb2xvciA9PT0gb3JpZW50YXRpb24gPyBpIDogZGltLmhlaWdodCAtMSAtIGkpICogKDEwMCAvIGRpbS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGgoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzcXVhcmVcIixcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHN0eWxlOiBcInRvcDogXCIgKyB0b3AgKyBcIiU7bGVmdDogXCIgKyBsZWZ0ICsgXCIlXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaG9vazogYmluZChcImNsaWNrXCIsIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaChzZXJ2ZXJSb2xlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBbaChcInBpZWNlLlwiICsgc2VydmVyUm9sZSArIFwiLlwiICsgY29sb3IpXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc3RhcnQsXHJcbiAgICB9O1xyXG59XHJcbiIsIi8vIGh0dHA6Ly9qc2ZpZGRsZS5uZXQvTWlzc291bGFMb3JlbnpvL2dmbjZvYjNqL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL29ybmljYXIvbGlsYS9ibG9iL21hc3Rlci91aS9jb21tb24vc3JjL3Jlc2l6ZS50c1xuXG5pbXBvcnQgKiBhcyBjZyBmcm9tICdjaGVzc2dyb3VuZHgvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBNb3VjaEV2ZW50ID0gTW91c2VFdmVudCAmIFRvdWNoRXZlbnQ7XG5cbi8vZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzaXplSGFuZGxlKGVsczogY2cuRWxlbWVudHMsIHByZWY6IG51bWJlciwgcGx5OiBudW1iZXIpIHtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc2l6ZUhhbmRsZShlbHM6IGNnLkVsZW1lbnRzKSB7XG5cbi8vICBpZiAoIXByZWYpIHJldHVybjtcbiAgaWYgKHRydWUpIHJldHVybjtcblxuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NnLXJlc2l6ZScpO1xuICBlbHMuY29udGFpbmVyLmFwcGVuZENoaWxkKGVsKTtcblxuICBjb25zdCBtb3VzZW1vdmVFdmVudCA9ICdtb3VzZW1vdmUnO1xuICBjb25zdCBtb3VzZXVwRXZlbnQgPSAnbW91c2V1cCc7XG5cbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHN0YXJ0OiBNb3VjaEV2ZW50KSA9PiB7XG5cbiAgICBzdGFydC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3Qgc3RhcnRQb3MgPSBldmVudFBvc2l0aW9uKHN0YXJ0KSE7XG4gICAgY29uc3QgaW5pdGlhbFpvb20gPSAxMDA7ICAvL3BhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZ2V0UHJvcGVydHlWYWx1ZSgnLS16b29tJykpO1xuICAgIGxldCB6b29tID0gaW5pdGlhbFpvb207XG4vKlxuICAgIGNvbnN0IHNhdmVab29tID0gd2luZG93LmxpY2hlc3MuZGVib3VuY2UoKCkgPT4ge1xuICAgICAgJC5hamF4KHsgbWV0aG9kOiAncG9zdCcsIHVybDogJy9wcmVmL3pvb20/dj0nICsgKDEwMCArIHpvb20pIH0pO1xuICAgIH0sIDcwMCk7XG4qL1xuXG4gICAgY29uc3Qgc2V0Wm9vbSA9ICh6b29tOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2ctd3JhcCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoZWwpIHtcbi8vICAgICAgICAgICAgY29uc3QgYmFzZVdpZHRoID0gZGltZW5zaW9uc1tWQVJJQU5UU1t0aGlzLnZhcmlhbnRdLmdlb21dLndpZHRoICogKHRoaXMudmFyaWFudCA9PT0gXCJzaG9naVwiID8gNTIgOiA2NCk7XG4vLyAgICAgICAgICAgIGNvbnN0IGJhc2VIZWlnaHQgPSBkaW1lbnNpb25zW1ZBUklBTlRTW3RoaXMudmFyaWFudF0uZ2VvbV0uaGVpZ2h0ICogKHRoaXMudmFyaWFudCA9PT0gXCJzaG9naVwiID8gNjAgOiA2NCk7XG4gICAgICAgICAgICBjb25zdCBiYXNlV2lkdGggPSBwYXJzZUludCggZG9jdW1lbnQuZGVmYXVsdFZpZXchLmdldENvbXB1dGVkU3R5bGUoIGVsICkud2lkdGggfHwgJycsIDEwKTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VIZWlnaHQgPSBwYXJzZUludChkb2N1bWVudC5kZWZhdWx0VmlldyEuZ2V0Q29tcHV0ZWRTdHlsZSggZWwgKS5oZWlnaHQgfHwgJycsIDEwKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGJhc2VXaWR0aCwgYmFzZUhlaWdodCwgem9vbSk7XG4gICAgICAgICAgICBjb25zdCBweHcgPSBgJHt6b29tIC8gMTAwICogYmFzZVdpZHRofXB4YDtcbiAgICAgICAgICAgIGNvbnN0IHB4aCA9IGAke3pvb20gLyAxMDAgKiBiYXNlSGVpZ2h0fXB4YDtcbiAgICAgICAgICAgIGVsLnN0eWxlLndpZHRoID0gcHh3O1xuICAgICAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHhoO1xuICAgICAgICAgICAgY29uc3QgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgICAgICAgIGV2LmluaXRFdmVudCgnY2hlc3Nncm91bmQucmVzaXplJywgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChldik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXNpemUgPSAobW92ZTogTW91Y2hFdmVudCkgPT4ge1xuXG4gICAgICBjb25zdCBwb3MgPSBldmVudFBvc2l0aW9uKG1vdmUpITtcbiAgICAgIGNvbnN0IGRlbHRhID0gcG9zWzBdIC0gc3RhcnRQb3NbMF0gKyBwb3NbMV0gLSBzdGFydFBvc1sxXTtcblxuICAgICAgem9vbSA9IE1hdGgucm91bmQoTWF0aC5taW4oMTUwLCBNYXRoLm1heCgwLCBpbml0aWFsWm9vbSArIGRlbHRhIC8gMTApKSk7XG5cbi8vICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJy0tem9vbTonICsgem9vbSk7XG4vLyAgICAgIHdpbmRvdy5saWNoZXNzLmRpc3BhdGNoRXZlbnQod2luZG93LCAncmVzaXplJyk7XG4gICAgICBzZXRab29tKHpvb20pO1xuLy8gICAgICBzYXZlWm9vbSgpO1xuICAgIH07XG5cbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG1vdXNlbW92ZUV2ZW50LCByZXNpemUpO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihtb3VzZXVwRXZlbnQsICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobW91c2Vtb3ZlRXZlbnQsIHJlc2l6ZSk7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XG4gICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xuICB9KTtcbi8qXG4gIGlmIChwcmVmID09IDEpIHtcbiAgICBjb25zdCB0b2dnbGUgPSAocGx5OiBudW1iZXIpID0+IGVsLmNsYXNzTGlzdC50b2dnbGUoJ25vbmUnLCBwbHkgPj0gMik7XG4gICAgdG9nZ2xlKHBseSk7XG4gICAgd2luZG93LmxpY2hlc3MucHVic3ViLm9uKCdwbHknLCB0b2dnbGUpO1xuICB9XG5cbiAgYWRkTmFnKGVsKTtcbiovXG59XG5cbmZ1bmN0aW9uIGV2ZW50UG9zaXRpb24oZTogTW91Y2hFdmVudCk6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQge1xuICBpZiAoZS5jbGllbnRYIHx8IGUuY2xpZW50WCA9PT0gMCkgcmV0dXJuIFtlLmNsaWVudFgsIGUuY2xpZW50WV07XG4gIGlmIChlLnRvdWNoZXMgJiYgZS50YXJnZXRUb3VjaGVzWzBdKSByZXR1cm4gW2UudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYLCBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WV07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKlxuZnVuY3Rpb24gYWRkTmFnKGVsOiBIVE1MRWxlbWVudCkge1xuXG4gIGNvbnN0IHN0b3JhZ2UgPSB3aW5kb3cubGljaGVzcy5zdG9yYWdlLm1ha2VCb29sZWFuKCdyZXNpemUtbmFnJyk7XG4gIGlmIChzdG9yYWdlLmdldCgpKSByZXR1cm47XG5cbiAgd2luZG93LmxpY2hlc3MubG9hZENzc1BhdGgoJ25hZy1jaXJjbGUnKTtcbiAgZWwudGl0bGUgPSAnRHJhZyB0byByZXNpemUnO1xuICBlbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIm5hZy1jaXJjbGVcIj48L2Rpdj4nO1xuICBlbC5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5saWNoZXNzLm1vdXNlZG93bkV2ZW50LCAoKSA9PiB7XG4gICAgc3RvcmFnZS5zZXQodHJ1ZSk7XG4gICAgZWwuaW5uZXJIVE1MID0gJyc7XG4gIH0sIHsgb25jZTogdHJ1ZSB9KTtcblxuICBzZXRUaW1lb3V0KCgpID0+IHN0b3JhZ2Uuc2V0KHRydWUpLCAxNTAwMCk7XG59XG4qLyIsImltcG9ydCB7IGggfSBmcm9tIFwic25hYmJkb21cIjtcclxuaW1wb3J0IHsgVk5vZGUgfSBmcm9tICdzbmFiYmRvbS92bm9kZSc7XHJcblxyXG5pbXBvcnQgUm91bmRDb250cm9sbGVyIGZyb20gJy4vcm91bmRDdHJsJztcclxuaW1wb3J0IHsgVkFSSUFOVFMgfSBmcm9tICcuL2NoZXNzJztcclxuaW1wb3J0IHsgdGltZWFnbywgcmVuZGVyVGltZWFnbyB9IGZyb20gJy4vY2xvY2snO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHJ1bkdyb3VuZCh2bm9kZTogVk5vZGUsIG1vZGVsKSB7XHJcbiAgICBjb25zdCBlbCA9IHZub2RlLmVsbSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IGN0cmwgPSBuZXcgUm91bmRDb250cm9sbGVyKGVsLCBtb2RlbCk7XHJcbiAgICBjb25zdCBjZyA9IGN0cmwuY2hlc3Nncm91bmQ7XHJcbiAgICB3aW5kb3dbJ2NnJ10gPSBjZztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kVmlldyhtb2RlbCk6IFZOb2RlW10ge1xyXG4gICAgY29uc29sZS5sb2coXCJyb3VuZFZpZXcgbW9kZWw9XCIsIG1vZGVsKTtcclxuICAgIGNvbnN0IGRhdGFJY29uID0gVkFSSUFOVFNbbW9kZWxbXCJ2YXJpYW50XCJdXS5pY29uO1xyXG4gICAgcmVuZGVyVGltZWFnbygpO1xyXG4gICAgcmV0dXJuIFtoKCdhc2lkZS5zaWRlYmFyLWZpcnN0JywgW1xyXG4gICAgICAgICAgICAgICAgaCgnZGl2LmdhbWUtaW5mbycsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYuaW5mbzAnLCB7YXR0cnM6IHtcImRhdGEtaWNvblwiOiBkYXRhSWNvbn0sIGNsYXNzOiB7XCJpY29uXCI6IHRydWV9fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdkaXYuaW5mbzEnLCB7YXR0cnM6IHtcImRhdGEtaWNvblwiOiAobW9kZWxbXCJjaGVzczk2MFwiXSA9PT0gJ1RydWUnKSA/IFwiVlwiIDogXCJcIn0sIGNsYXNzOiB7XCJpY29uXCI6IHRydWV9fSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi5pbmZvMicsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi50YycsIG1vZGVsW1wiYmFzZVwiXSArIFwiK1wiICsgbW9kZWxbXCJpbmNcIl0gKyBcIiDigKIgQ2FzdWFsIOKAoiBcIiArIG1vZGVsW1widmFyaWFudFwiXSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIobW9kZWxbXCJzdGF0dXNcIl0pID49IDAgPyBoKCdpbmZvLWRhdGUnLCB7YXR0cnM6IHt0aW1lc3RhbXA6IG1vZGVsW1wiZGF0ZVwiXX19LCB0aW1lYWdvKG1vZGVsW1wiZGF0ZVwiXSkpIDogXCJQbGF5aW5nIHJpZ2h0IG5vd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYucGxheWVyLWRhdGEnLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2ktc2lkZS5vbmxpbmUnLCB7Y2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLXdoaXRlXCI6IHRydWV9IH0gKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgncGxheWVyJywgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnYS51c2VyLWxpbmsnLCB7YXR0cnM6IHtocmVmOiAnL0AvJyArIG1vZGVsW1wid3BsYXllclwiXX19LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgncGxheWVyLXRpdGxlJywgXCIgXCIgKyBtb2RlbFtcInd0aXRsZVwiXSArIFwiIFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbFtcIndwbGF5ZXJcIl0gKyBcIiAoMTUwMD8pXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2LnBsYXllci1kYXRhJywgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoKCdpLXNpZGUub25saW5lJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1ibGFja1wiOiB0cnVlfSB9ICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ3BsYXllcicsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2EudXNlci1saW5rJywge2F0dHJzOiB7aHJlZjogJy9ALycgKyBtb2RlbFtcImJwbGF5ZXJcIl19fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ3BsYXllci10aXRsZScsIFwiIFwiICsgbW9kZWxbXCJidGl0bGVcIl0gKyBcIiBcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxbXCJicGxheWVyXCJdICsgXCIgKDE1MDA/KVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYucm91bmRjaGF0I3JvdW5kY2hhdCcpLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgaCgnbWFpbi5yb3VuZCcsIFtcclxuICAgICAgICAgICAgICAgIGgoJ3NlbGVjdGlvbi4nICsgVkFSSUFOVFNbbW9kZWxbXCJ2YXJpYW50XCJdXS5ib2FyZCArICcuJyArIFZBUklBTlRTW21vZGVsW1widmFyaWFudFwiXV0ucGllY2VzLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2LmNnLXdyYXAuJyArIFZBUklBTlRTW21vZGVsW1widmFyaWFudFwiXV0uY2csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaG9vazogeyBpbnNlcnQ6ICh2bm9kZSkgPT4gcnVuR3JvdW5kKHZub2RlLCBtb2RlbCl9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCdhc2lkZS5zaWRlYmFyLXNlY29uZCcsIFtcclxuICAgICAgICAgICAgICAgIGgoJ2RpdiNwb2NrZXQtd3JhcHBlcicsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYuJyArIFZBUklBTlRTW21vZGVsW1widmFyaWFudFwiXV0ucGllY2VzICsgJy4nICsgbW9kZWxbXCJ2YXJpYW50XCJdLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi5jZy13cmFwLnBvY2tldCcsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNwb2NrZXQwJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYjY2xvY2swJyksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYucm91bmQtZGF0YScsIFtcclxuICAgICAgICAgICAgICAgICAgICBoKCdyb3VuZC1wbGF5ZXIjcnBsYXllcjAnKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdkaXYjbW92ZS1jb250cm9scycpLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNib2FyZC1zZXR0aW5ncycpLFxyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2RpdiNtb3ZlbGlzdC1ibG9jaycsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnZGl2I21vdmVsaXN0JyksXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgaCgnZGl2I2dhbWUtY29udHJvbHMnKSxcclxuICAgICAgICAgICAgICAgICAgICBoKCdyb3VuZC1wbGF5ZXIjcnBsYXllcjEnKSxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2I2Nsb2NrMScpLFxyXG4gICAgICAgICAgICAgICAgaCgnZGl2I3BvY2tldC13cmFwcGVyJywgW1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2Rpdi4nICsgVkFSSUFOVFNbbW9kZWxbXCJ2YXJpYW50XCJdXS5waWVjZXMgKyAnLicgKyBtb2RlbFtcInZhcmlhbnRcIl0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCgnZGl2LmNnLXdyYXAucG9ja2V0JywgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnZGl2I3BvY2tldDEnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIGgoJ3VuZGVyLWxlZnQnLCBcIlNwZWN0YXRvcnNcIiksXHJcbiAgICAgICAgICAgIGgoJ3VuZGVyLWJvYXJkJyksXHJcbiAgICAgICAgXTtcclxufVxyXG4iLCJpbXBvcnQgU29ja2V0dGUgZnJvbSAnc29ja2V0dGUnO1xyXG5cclxuaW1wb3J0IHsgaW5pdCB9IGZyb20gJ3NuYWJiZG9tJztcclxuaW1wb3J0IHsgVk5vZGUgfSBmcm9tICdzbmFiYmRvbS92bm9kZSc7XHJcbmltcG9ydCB7IGggfSBmcm9tICdzbmFiYmRvbS9oJztcclxuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xyXG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xyXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL3Byb3BzJztcclxuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcclxuXHJcbmltcG9ydCB7IGtleTJwb3MsIHBvczJrZXkgfSBmcm9tICdjaGVzc2dyb3VuZHgvdXRpbCc7XHJcbmltcG9ydCB7IENoZXNzZ3JvdW5kIH0gZnJvbSAnY2hlc3Nncm91bmR4JztcclxuaW1wb3J0IHsgQXBpIH0gZnJvbSAnY2hlc3Nncm91bmR4L2FwaSc7XHJcbmltcG9ydCB7IENvbG9yLCBEZXN0cywgUGllY2VzRGlmZiwgUm9sZSwgS2V5LCBQb3MsIFBpZWNlIH0gZnJvbSAnY2hlc3Nncm91bmR4L3R5cGVzJztcclxuXHJcbmltcG9ydCB7IENsb2NrLCByZW5kZXJUaW1lIH0gZnJvbSAnLi9jbG9jayc7XHJcbmltcG9ydCBtYWtlR2F0aW5nIGZyb20gJy4vZ2F0aW5nJztcclxuaW1wb3J0IG1ha2VQcm9tb3Rpb24gZnJvbSAnLi9wcm9tb3Rpb24nO1xyXG5pbXBvcnQgeyBkcm9wSXNWYWxpZCwgcG9ja2V0VmlldywgdXBkYXRlUG9ja2V0cyB9IGZyb20gJy4vcG9ja2V0JztcclxuaW1wb3J0IHsgc291bmQgfSBmcm9tICcuL3NvdW5kJztcclxuaW1wb3J0IHsgdmFyaWFudHMsIGhhc0VwLCBuZWVkUG9ja2V0cywgcm9sZVRvU2FuLCB1Y2kydXNpLCB1c2kydWNpLCBncmFuZDJ6ZXJvLCB6ZXJvMmdyYW5kLCBWQVJJQU5UUyB9IGZyb20gJy4vY2hlc3MnO1xyXG5pbXBvcnQgeyByZW5kZXJVc2VybmFtZSB9IGZyb20gJy4vdXNlcic7XHJcbmltcG9ydCB7IGNoYXRNZXNzYWdlLCBjaGF0VmlldyB9IGZyb20gJy4vY2hhdCc7XHJcbmltcG9ydCB7IHNldHRpbmdzVmlldyB9IGZyb20gJy4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBtb3ZlbGlzdFZpZXcsIHVwZGF0ZU1vdmVsaXN0LCBzZWxlY3RNb3ZlIH0gZnJvbSAnLi9tb3ZlbGlzdCc7XHJcbmltcG9ydCByZXNpemVIYW5kbGUgZnJvbSAnLi9yZXNpemUnO1xyXG5pbXBvcnQgeyByZXN1bHQgfSBmcm9tICcuL3Byb2ZpbGUnXHJcbmltcG9ydCB7IHBsYXllciB9IGZyb20gJy4vcGxheWVyJztcclxuXHJcbmNvbnN0IHBhdGNoID0gaW5pdChba2xhc3MsIGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGxpc3RlbmVyc10pO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdW5kQ29udHJvbGxlciB7XHJcbiAgICBtb2RlbDtcclxuICAgIHNvY2s7XHJcbiAgICBjaGVzc2dyb3VuZDogQXBpO1xyXG4gICAgZnVsbGZlbjogc3RyaW5nO1xyXG4gICAgd3BsYXllcjogc3RyaW5nO1xyXG4gICAgYnBsYXllcjogc3RyaW5nO1xyXG4gICAgYmFzZTogbnVtYmVyO1xyXG4gICAgaW5jOiBudW1iZXI7XHJcbiAgICBteWNvbG9yOiBDb2xvcjtcclxuICAgIG9wcGNvbG9yOiBDb2xvcjtcclxuICAgIHR1cm5Db2xvcjogQ29sb3I7XHJcbiAgICBjbG9ja3M6IGFueTtcclxuICAgIGFib3J0YWJsZTogYm9vbGVhbjtcclxuICAgIGdhbWVJZDogc3RyaW5nO1xyXG4gICAgdmFyaWFudDogc3RyaW5nO1xyXG4gICAgcG9ja2V0czogYW55O1xyXG4gICAgdnBvY2tldDA6IGFueTtcclxuICAgIHZwb2NrZXQxOiBhbnk7XHJcbiAgICB2cGxheWVyMDogYW55O1xyXG4gICAgdnBsYXllcjE6IGFueTtcclxuICAgIHZwbmc6IGFueTtcclxuICAgIGdhbWVDb250cm9sczogYW55O1xyXG4gICAgbW92ZUNvbnRyb2xzOiBhbnk7XHJcbiAgICBnYXRpbmc6IGFueTtcclxuICAgIHByb21vdGlvbjogYW55O1xyXG4gICAgZGVzdHM6IERlc3RzO1xyXG4gICAgcHJvbW90aW9uczogc3RyaW5nW107XHJcbiAgICBsYXN0bW92ZTogS2V5W107XHJcbiAgICBwcmVtb3ZlOiBhbnk7XHJcbiAgICBwcmVkcm9wOiBhbnk7XHJcbiAgICByZXN1bHQ6IHN0cmluZztcclxuICAgIGZsaXA6IGJvb2xlYW47XHJcbiAgICBzcGVjdGF0b3I6IGJvb2xlYW47XHJcbiAgICBvcHBJc1JhbmRvbU1vdmVyOiBib29sZWFuO1xyXG4gICAgc2V0dGluZ3M6IGJvb2xlYW47XHJcbiAgICB0djogYm9vbGVhbjtcclxuICAgIHN0YXR1czogbnVtYmVyO1xyXG4gICAgc3RlcHM7XHJcbiAgICBwZ246IHN0cmluZztcclxuICAgIHBseTogbnVtYmVyO1xyXG4gICAgcGxheWVyczogc3RyaW5nW107XHJcbiAgICB0aXRsZXM6IHN0cmluZ1tdO1xyXG4gICAgQ1NTaW5kZXhlc0I6IG51bWJlcltdO1xyXG4gICAgQ1NTaW5kZXhlc1A6IG51bWJlcltdO1xyXG4gICAgY2xpY2tEcm9wOiBQaWVjZSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihlbCwgbW9kZWwpIHtcclxuICAgICAgICBjb25zdCBvbk9wZW4gPSAoZXZ0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY3RybC5vbk9wZW4oKVwiLCBldnQpO1xyXG4gICAgICAgICAgICB0aGlzLmNsb2Nrc1swXS5jb25uZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvY2tzWzFdLmNvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImdhbWVfdXNlcl9jb25uZWN0ZWRcIiwgdXNlcm5hbWU6IHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XHJcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcclxuICAgICAgICAgICAgb25vcGVuOiBlID0+IG9uT3BlbihlKSxcclxuICAgICAgICAgICAgb25tZXNzYWdlOiBlID0+IHRoaXMub25NZXNzYWdlKGUpLFxyXG4gICAgICAgICAgICBvbnJlY29ubmVjdDogZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb2Nrc1swXS5jb25uZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvY2tzWzFdLmNvbm5lY3RpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlY29ubmVjdGluZyBpbiByb3VuZC4uLicsIGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyMScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgcGF0Y2goY29udGFpbmVyLCBoKCdpLXNpZGUub25saW5lI3BsYXllcjEnLCB7Y2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLW9ubGluZVwiOiBmYWxzZSwgXCJpY29uLW9mZmxpbmVcIjogdHJ1ZX19KSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbm1heGltdW06IGUgPT4gY29uc29sZS5sb2coJ1N0b3AgQXR0ZW1wdGluZyEnLCBlKSxcclxuICAgICAgICAgICAgb25jbG9zZTogZSA9PiBjb25zb2xlLmxvZygnQ2xvc2VkIScsIGUpLFxyXG4gICAgICAgICAgICBvbmVycm9yOiBlID0+IGNvbnNvbGUubG9nKCdFcnJvcjonLCBlKSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5zb2NrID0gbmV3IFNvY2tldHRlKFwid3M6Ly9cIiArIGxvY2F0aW9uLmhvc3QgKyBcIi93c3JcIiwgb3B0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoKGVycikge1xyXG4gICAgICAgICAgICB0aGlzLnNvY2sgPSBuZXcgU29ja2V0dGUoXCJ3c3M6Ly9cIiArIGxvY2F0aW9uLmhvc3QgKyBcIi93c3JcIiwgb3B0cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgdGhpcy52YXJpYW50ID0gbW9kZWxbXCJ2YXJpYW50XCJdIGFzIHN0cmluZztcclxuICAgICAgICB0aGlzLmZ1bGxmZW4gPSBtb2RlbFtcImZlblwiXSBhcyBzdHJpbmc7XHJcbiAgICAgICAgdGhpcy53cGxheWVyID0gbW9kZWxbXCJ3cGxheWVyXCJdIGFzIHN0cmluZztcclxuICAgICAgICB0aGlzLmJwbGF5ZXIgPSBtb2RlbFtcImJwbGF5ZXJcIl0gYXMgc3RyaW5nO1xyXG4gICAgICAgIHRoaXMuYmFzZSA9IG1vZGVsW1wiYmFzZVwiXSBhcyBudW1iZXI7XHJcbiAgICAgICAgdGhpcy5pbmMgPSBtb2RlbFtcImluY1wiXSBhcyBudW1iZXI7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBtb2RlbFtcInN0YXR1c1wiXSBhcyBudW1iZXI7XHJcbiAgICAgICAgdGhpcy50diA9IG1vZGVsW1widHZcIl07XHJcbiAgICAgICAgdGhpcy5zdGVwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucGduID0gXCJcIjtcclxuICAgICAgICB0aGlzLnBseSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuZmxpcCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuQ1NTaW5kZXhlc0IgPSB2YXJpYW50cy5tYXAoKHZhcmlhbnQpID0+IGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfYm9hcmRcIl0gPT09IHVuZGVmaW5lZCA/IDAgOiBOdW1iZXIobG9jYWxTdG9yYWdlW3ZhcmlhbnQgKyBcIl9ib2FyZFwiXSkpO1xyXG4gICAgICAgIHRoaXMuQ1NTaW5kZXhlc1AgPSB2YXJpYW50cy5tYXAoKHZhcmlhbnQpID0+IGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfcGllY2VzXCJdID09PSB1bmRlZmluZWQgPyAwIDogTnVtYmVyKGxvY2FsU3RvcmFnZVt2YXJpYW50ICsgXCJfcGllY2VzXCJdKSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3BlY3RhdG9yID0gdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdICE9PSB0aGlzLndwbGF5ZXIgJiYgdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdICE9PSB0aGlzLmJwbGF5ZXI7XHJcblxyXG4gICAgICAgIC8vIG9yaWVudGF0aW9uID0gdGhpcy5teWNvbG9yXHJcbiAgICAgICAgaWYgKHRoaXMuc3BlY3RhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXljb2xvciA9IHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/ICdibGFjaycgOiAnd2hpdGUnO1xyXG4gICAgICAgICAgICB0aGlzLm9wcGNvbG9yID0gdGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5teWNvbG9yID0gdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdID09PSB0aGlzLndwbGF5ZXIgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgICAgICAgdGhpcy5vcHBjb2xvciA9IHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSA9PT0gdGhpcy53cGxheWVyID8gJ2JsYWNrJyA6ICd3aGl0ZSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm9wcElzUmFuZG9tTW92ZXIgPSAoXHJcbiAgICAgICAgICAgICh0aGlzLm15Y29sb3IgPT09IFwid2hpdGVcIiAmJiB0aGlzLmJwbGF5ZXIgPT09IFwiUmFuZG9tLU1vdmVyXCIpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLm15Y29sb3IgPT09IFwiYmxhY2tcIiAmJiB0aGlzLndwbGF5ZXIgPT09IFwiUmFuZG9tLU1vdmVyXCIpKTtcclxuXHJcbiAgICAgICAgLy8gcGxheWVyc1swXSBpcyB0b3AgcGxheWVyLCBwbGF5ZXJzWzFdIGlzIGJvdHRvbSBwbGF5ZXJcclxuICAgICAgICB0aGlzLnBsYXllcnMgPSBbXHJcbiAgICAgICAgICAgIHRoaXMubXljb2xvciA9PT0gXCJ3aGl0ZVwiID8gdGhpcy5icGxheWVyIDogdGhpcy53cGxheWVyLFxyXG4gICAgICAgICAgICB0aGlzLm15Y29sb3IgPT09IFwid2hpdGVcIiA/IHRoaXMud3BsYXllciA6IHRoaXMuYnBsYXllclxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy50aXRsZXMgPSBbXHJcbiAgICAgICAgICAgIHRoaXMubXljb2xvciA9PT0gXCJ3aGl0ZVwiID8gdGhpcy5tb2RlbFsnYnRpdGxlJ10gOiB0aGlzLm1vZGVsWyd3dGl0bGUnXSxcclxuICAgICAgICAgICAgdGhpcy5teWNvbG9yID09PSBcIndoaXRlXCIgPyB0aGlzLm1vZGVsWyd3dGl0bGUnXSA6IHRoaXMubW9kZWxbJ2J0aXRsZSddXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVtb3ZlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnByZWRyb3AgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgY29uc3QgcGFydHMgPSB0aGlzLmZ1bGxmZW4uc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIHRoaXMuYWJvcnRhYmxlID0gTnVtYmVyKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKSA8PSAxO1xyXG5cclxuICAgICAgICBjb25zdCBmZW5fcGxhY2VtZW50ID0gcGFydHNbMF07XHJcbiAgICAgICAgdGhpcy50dXJuQ29sb3IgPSBwYXJ0c1sxXSA9PT0gXCJ3XCIgPyBcIndoaXRlXCIgOiBcImJsYWNrXCI7XHJcblxyXG4gICAgICAgIHRoaXMuc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICdmZW4nOiBmZW5fcGxhY2VtZW50LFxyXG4gICAgICAgICAgICAnbW92ZSc6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgJ2NoZWNrJzogZmFsc2UsXHJcbiAgICAgICAgICAgICd0dXJuQ29sb3InOiB0aGlzLnR1cm5Db2xvcixcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hlc3Nncm91bmQgPSBDaGVzc2dyb3VuZChlbCwge1xyXG4gICAgICAgICAgICBmZW46IGZlbl9wbGFjZW1lbnQsXHJcbiAgICAgICAgICAgIGdlb21ldHJ5OiBWQVJJQU5UU1t0aGlzLnZhcmlhbnRdLmdlb20sXHJcbiAgICAgICAgICAgIG9yaWVudGF0aW9uOiB0aGlzLm15Y29sb3IsXHJcbiAgICAgICAgICAgIHR1cm5Db2xvcjogdGhpcy50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgIGF1dG9DYXN0bGU6IHRoaXMudmFyaWFudCAhPT0gJ2NhbWJvZGlhbicsXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXZlbnRzOiB7XHJcbiAgICAgICAgICAgICAgICBpbnNlcnQoZWxlbWVudHMpIHtyZXNpemVIYW5kbGUoZWxlbWVudHMpO31cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zcGVjdGF0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoe1xyXG4gICAgICAgICAgICAgICAgdmlld09ubHk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBtb3ZlOiB0aGlzLm9uTW92ZSgpLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnNldCh7XHJcbiAgICAgICAgICAgICAgICBtb3ZhYmxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJlZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMubXljb2xvcixcclxuICAgICAgICAgICAgICAgICAgICBzaG93RGVzdHM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyOiB0aGlzLm9uVXNlck1vdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTmV3UGllY2U6IHRoaXMub25Vc2VyRHJvcCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcHJlbW92YWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogdGhpcy5zZXRQcmVtb3ZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bnNldDogdGhpcy51bnNldFByZW1vdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBwcmVkcm9wcGFibGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IHRoaXMuc2V0UHJlZHJvcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5zZXQ6IHRoaXMudW5zZXRQcmVkcm9wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW92ZTogdGhpcy5vbk1vdmUoKSxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wTmV3UGllY2U6IHRoaXMub25Ecm9wKCksXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0OiB0aGlzLm9uU2VsZWN0KHRoaXMuY2hlc3Nncm91bmQuc3RhdGUuc2VsZWN0ZWQpLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdhdGluZyA9IG1ha2VHYXRpbmcodGhpcyk7XHJcbiAgICAgICAgdGhpcy5wcm9tb3Rpb24gPSBtYWtlUHJvbW90aW9uKHRoaXMpO1xyXG5cclxuICAgICAgICAvLyBpbml0aWFsaXplIHVzZXJzXHJcbiAgICAgICAgY29uc3QgcGxheWVyMCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdycGxheWVyMCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHBsYXllcjEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncnBsYXllcjEnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICB0aGlzLnZwbGF5ZXIwID0gcGF0Y2gocGxheWVyMCwgcGxheWVyKCdwbGF5ZXIwJywgdGhpcy50aXRsZXNbMF0sIHRoaXMucGxheWVyc1swXSwgbW9kZWxbXCJsZXZlbFwiXSkpO1xyXG4gICAgICAgIHRoaXMudnBsYXllcjEgPSBwYXRjaChwbGF5ZXIxLCBwbGF5ZXIoJ3BsYXllcjEnLCB0aGlzLnRpdGxlc1sxXSwgdGhpcy5wbGF5ZXJzWzFdLCBtb2RlbFtcImxldmVsXCJdKSk7XHJcblxyXG4gICAgICAgIC8vIGluaXRpYWxpemUgcG9ja2V0c1xyXG4gICAgICAgIGlmIChuZWVkUG9ja2V0cyh0aGlzLnZhcmlhbnQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvY2tldDAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9ja2V0MCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBwb2NrZXQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvY2tldDEnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgdXBkYXRlUG9ja2V0cyh0aGlzLCBwb2NrZXQwLCBwb2NrZXQxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGluaXRpYWxpemUgY2xvY2tzXHJcbiAgICAgICAgY29uc3QgYzAgPSBuZXcgQ2xvY2sodGhpcy5iYXNlLCB0aGlzLmluYywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb2NrMCcpIGFzIEhUTUxFbGVtZW50LCAnY2xvY2swJyk7XHJcbiAgICAgICAgY29uc3QgYzEgPSBuZXcgQ2xvY2sodGhpcy5iYXNlLCB0aGlzLmluYywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb2NrMScpIGFzIEhUTUxFbGVtZW50LCAnY2xvY2sxJyk7XHJcbiAgICAgICAgdGhpcy5jbG9ja3MgPSBbYzAsIGMxXTtcclxuICAgICAgICB0aGlzLmNsb2Nrc1swXS5vblRpY2socmVuZGVyVGltZSk7XHJcbiAgICAgICAgdGhpcy5jbG9ja3NbMV0ub25UaWNrKHJlbmRlclRpbWUpO1xyXG5cclxuICAgICAgICBjb25zdCBvbk1vcmVUaW1lID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBUT0RPOiBlbmFibGUgd2hlbiB0aGlzLmZsaXAgaXMgdHJ1ZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbFsnd3RpdGxlJ10gPT09ICdCT1QnIHx8IHRoaXMubW9kZWxbJ2J0aXRsZSddID09PSAnQk9UJyB8fCB0aGlzLnNwZWN0YXRvciB8fCB0aGlzLnN0YXR1cyA+PSAwIHx8IHRoaXMuZmxpcCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLmNsb2Nrc1swXS5zZXRUaW1lKHRoaXMuY2xvY2tzWzBdLmR1cmF0aW9uICsgMTUgKiAxMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcIm1vcmV0aW1lXCIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSB9KTtcclxuICAgICAgICAgICAgY2hhdE1lc3NhZ2UoJycsIHRoaXMub3BwY29sb3IgKyAnICsxNSBzZWNvbmRzJywgXCJyb3VuZGNoYXRcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb2NrMCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnZGl2LmNsb2NrLXdyYXAjY2xvY2swJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYubW9yZS10aW1lJywgW1xyXG4gICAgICAgICAgICAgICAgaCgnYnV0dG9uLmljb24uaWNvbi1wbHVzLXNxdWFyZScsIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wczoge3R5cGU6IFwiYnV0dG9uXCIsIHRpdGxlOiBcIkdpdmUgMTUgc2Vjb25kc1wifSxcclxuICAgICAgICAgICAgICAgICAgICBvbjoge2NsaWNrOiAoKSA9PiBvbk1vcmVUaW1lKCkgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZsYWdDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHVybkNvbG9yID09PSB0aGlzLm15Y29sb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGbGFnXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImZsYWdcIiwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5zcGVjdGF0b3IpIHRoaXMuY2xvY2tzWzFdLm9uRmxhZyhmbGFnQ2FsbGJhY2spO1xyXG5cclxuICAgICAgICBjb25zdCBhYm9ydCA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJBYm9ydFwiKTtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImFib3J0XCIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRyYXcgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRHJhd1wiKTtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImRyYXdcIiwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzaWduID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlc2lnblwiKTtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcInJlc2lnblwiLCBnYW1lSWQ6IHRoaXMubW9kZWxbXCJnYW1lSWRcIl0gfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dhbWUtY29udHJvbHMnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoIXRoaXMuc3BlY3RhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZUNvbnRyb2xzID0gcGF0Y2goY29udGFpbmVyLCBoKCdkaXYuYnRuLWNvbnRyb2xzJywgW1xyXG4gICAgICAgICAgICAgICAgaCgnYnV0dG9uI2Fib3J0JywgeyBvbjogeyBjbGljazogKCkgPT4gYWJvcnQoKSB9LCBwcm9wczoge3RpdGxlOiAnQWJvcnQnfSB9LCBbaCgnaScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tYWJvcnRcIjogdHJ1ZX0gfSApLCBdKSxcclxuICAgICAgICAgICAgICAgIGgoJ2J1dHRvbiNkcmF3JywgeyBvbjogeyBjbGljazogKCkgPT4gZHJhdygpIH0sIHByb3BzOiB7dGl0bGU6IFwiRHJhd1wifSB9LCBbaCgnaScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24taGFuZC1wYXBlci1vXCI6IHRydWV9IH0gKSwgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdidXR0b24jcmVzaWduJywgeyBvbjogeyBjbGljazogKCkgPT4gcmVzaWduKCkgfSwgcHJvcHM6IHt0aXRsZTogXCJSZXNpZ25cIn0gfSwgW2goJ2knLCB7Y2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLWZsYWctb1wiOiB0cnVlfSB9ICksIF0pLFxyXG4gICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdhbWVDb250cm9scyA9IHBhdGNoKGNvbnRhaW5lciwgaCgnZGl2JykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGF0Y2goZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvYXJkLXNldHRpbmdzJykgYXMgSFRNTEVsZW1lbnQsIHNldHRpbmdzVmlldyh0aGlzKSk7XHJcblxyXG4gICAgICAgIHBhdGNoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3ZlbGlzdCcpIGFzIEhUTUxFbGVtZW50LCBtb3ZlbGlzdFZpZXcodGhpcykpO1xyXG5cclxuICAgICAgICBwYXRjaChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm91bmRjaGF0JykgYXMgSFRNTEVsZW1lbnQsIGNoYXRWaWV3KHRoaXMsIFwicm91bmRjaGF0XCIpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRHcm91bmQgPSAoKSA9PiB0aGlzLmNoZXNzZ3JvdW5kO1xyXG4gICAgZ2V0RGVzdHMgPSAoKSA9PiB0aGlzLmRlc3RzO1xyXG5cclxuICAgIHByaXZhdGUgb25Nc2dHYW1lU3RhcnQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJnb3QgZ2FtZVN0YXJ0IG1zZzpcIiwgbXNnKTtcclxuICAgICAgICBpZiAobXNnLmdhbWVJZCAhPT0gdGhpcy5tb2RlbFtcImdhbWVJZFwiXSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5zcGVjdGF0b3IpIHNvdW5kLmdlbmVyaWNOb3RpZnkoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnTmV3R2FtZSA9IChtc2cpID0+IHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHRoaXMubW9kZWxbXCJob21lXCJdICsgJy8nICsgbXNnW1wiZ2FtZUlkXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbWF0Y2ggPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcInJlbWF0Y2hcIiwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV3T3Bwb25lbnQgPSAoaG9tZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZG9TZW5kKHtcInR5cGVcIjogXCJsZWF2ZVwiLCBcImdhbWVJZFwiOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdfSk7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihob21lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFuYWx5c2lzID0gKGhvbWUpID0+IHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGhvbWUgKyAnLycgKyB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdhbWVPdmVyID0gKCkgPT4ge1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZWxpc3QnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICB2YXIgbW92ZXNUYWlsOiBWTm9kZVtdID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMudHVybkNvbG9yID09PSAnYmxhY2snKSBtb3Zlc1RhaWwucHVzaChoKCdsaS5tb3ZlLmhpZGRlbicsICdYJykpO1xyXG4gICAgICAgIG1vdmVzVGFpbC5wdXNoKGgoJ2RpdiNyZXN1bHQnLCByZXN1bHQodGhpcy5zdGF0dXMsIHRoaXMucmVzdWx0KSkpO1xyXG4gICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnb2wubW92ZWxpc3QjbW92ZWxpc3QnLCBtb3Zlc1RhaWwpKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnNwZWN0YXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmdhbWVDb250cm9scyA9IHBhdGNoKHRoaXMuZ2FtZUNvbnRyb2xzLCBoKCdkaXYnKSk7XHJcbiAgICAgICAgICAgIHBhdGNoKHRoaXMuZ2FtZUNvbnRyb2xzLCBoKCdkaXYjYWZ0ZXItZ2FtZS1jb250cm9scycsIFtcclxuICAgICAgICAgICAgICAgIGgoJ2J1dHRvbi5yZW1hdGNoJywgeyBvbjogeyBjbGljazogKCkgPT4gdGhpcy5yZW1hdGNoKCkgfSB9LCBcIlJFTUFUQ0hcIiksXHJcbiAgICAgICAgICAgICAgICBoKCdidXR0b24ubmV3b3BwJywgeyBvbjogeyBjbGljazogKCkgPT4gdGhpcy5uZXdPcHBvbmVudCh0aGlzLm1vZGVsW1wiaG9tZVwiXSkgfSB9LCBcIk5FVyBPUFBPTkVOVFwiKSxcclxuICAgICAgICAgICAgICAgIGgoJ2J1dHRvbi5hbmFseXNpcycsIHsgb246IHsgY2xpY2s6ICgpID0+IHRoaXMuYW5hbHlzaXModGhpcy5tb2RlbFtcImhvbWVcIl0pIH0gfSwgXCJBTkFMWVNJUyBCT0FSRFwiKSxcclxuICAgICAgICAgICAgXSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrU3RhdHVzID0gKG1zZykgPT4ge1xyXG4gICAgICAgIGlmIChtc2cuZ2FtZUlkICE9PSB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdKSByZXR1cm47XHJcbiAgICAgICAgaWYgKG1zZy5zdGF0dXMgPj0gMCAmJiB0aGlzLnJlc3VsdCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICB0aGlzLmNsb2Nrc1swXS5wYXVzZShmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvY2tzWzFdLnBhdXNlKGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSBtc2cucmVzdWx0O1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IG1zZy5zdGF0dXM7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobXNnLnJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIjEvMi0xLzJcIjpcclxuICAgICAgICAgICAgICAgICAgICBzb3VuZC5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiMS0wXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNwZWN0YXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5teWNvbG9yID09PSBcIndoaXRlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdW5kLnZpY3RvcnkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdW5kLmRlZmVhdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIjAtMVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zcGVjdGF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubXljb2xvciA9PT0gXCJibGFja1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VuZC52aWN0b3J5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VuZC5kZWZlYXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIC8vIEFCT1JURURcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nYW1lT3ZlcigpO1xyXG4gICAgICAgICAgICBzZWxlY3RNb3ZlKHRoaXMsIHRoaXMucGx5KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNsZWFuIHVwIGdhdGluZy9wcm9tb3Rpb24gd2lkZ2V0IGxlZnQgb3ZlciB0aGUgZ3JvdW5kIHdoaWxlIGdhbWUgZW5kZWQgYnkgdGltZSBvdXRcclxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHRlbnNpb25fY2hvaWNlJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBFbGVtZW50KSBwYXRjaChjb250YWluZXIsIGgoJ2V4dGVuc2lvbicpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnR2KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7dGhpcy5kb1NlbmQoeyB0eXBlOiBcInVwZGF0ZVRWXCIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSwgcHJvZmlsZUlkOiB0aGlzLm1vZGVsW1wicHJvZmlsZWlkXCJdIH0pO30sIDIwMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nc2dVcGRhdGVUViA9IChtc2cpID0+IHtcclxuICAgICAgICBpZiAobXNnLmdhbWVJZCAhPT0gdGhpcy5tb2RlbFtcImdhbWVJZFwiXSkge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHRoaXMubW9kZWxbXCJob21lXCJdICsgJy90dicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnQm9hcmQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgaWYgKG1zZy5nYW1lSWQgIT09IHRoaXMubW9kZWxbXCJnYW1lSWRcIl0pIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJnb3QgYm9hcmQgbXNnOlwiLCBtc2cpO1xyXG4gICAgICAgIHRoaXMucGx5ID0gbXNnLnBseVxyXG4gICAgICAgIHRoaXMuZnVsbGZlbiA9IG1zZy5mZW47XHJcbiAgICAgICAgdGhpcy5kZXN0cyA9IG1zZy5kZXN0cztcclxuICAgICAgICAvLyBsaXN0IG9mIGxlZ2FsIHByb21vdGlvbiBtb3Zlc1xyXG4gICAgICAgIHRoaXMucHJvbW90aW9ucyA9IG1zZy5wcm9tbztcclxuICAgICAgICBjb25zdCBjbG9ja3MgPSBtc2cuY2xvY2tzO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJ0cyA9IG1zZy5mZW4uc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIHRoaXMudHVybkNvbG9yID0gcGFydHNbMV0gPT09IFwid1wiID8gXCJ3aGl0ZVwiIDogXCJibGFja1wiO1xyXG5cclxuICAgICAgICBpZiAobXNnLnN0ZXBzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGVwcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmVsaXN0JykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnZGl2I21vdmVsaXN0JykpO1xyXG5cclxuICAgICAgICAgICAgbXNnLnN0ZXBzLmZvckVhY2goKHN0ZXApID0+IHsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBzLnB1c2goc3RlcCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdXBkYXRlTW92ZWxpc3QodGhpcywgMSwgdGhpcy5zdGVwcy5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChtc2cucGx5ID09PSB0aGlzLnN0ZXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RlcCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAnZmVuJzogbXNnLmZlbixcclxuICAgICAgICAgICAgICAgICAgICAnbW92ZSc6IG1zZy5sYXN0TW92ZSxcclxuICAgICAgICAgICAgICAgICAgICAnY2hlY2snOiBtc2cuY2hlY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgJ3R1cm5Db2xvcic6IHRoaXMudHVybkNvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICdzYW4nOiBtc2cuc3RlcHNbMF0uc2FuLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBzLnB1c2goc3RlcCk7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVNb3ZlbGlzdCh0aGlzLCB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEsIHRoaXMuc3RlcHMubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hYm9ydGFibGUgPSBOdW1iZXIocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pIDw9IDE7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNwZWN0YXRvciAmJiAhdGhpcy5hYm9ydGFibGUgJiYgdGhpcy5yZXN1bHQgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhYm9ydCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ2J1dHRvbiNhYm9ydCcsIHsgcHJvcHM6IHtkaXNhYmxlZDogdHJ1ZX0gfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGxhc3RNb3ZlID0gbXNnLmxhc3RNb3ZlO1xyXG4gICAgICAgIGlmIChsYXN0TW92ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpKSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0TW92ZSA9IHVzaTJ1Y2kobGFzdE1vdmUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFyaWFudC5zdGFydHNXaXRoKCdncmFuZCcpKSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0TW92ZSA9IGdyYW5kMnplcm8obGFzdE1vdmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxhc3RNb3ZlID0gW2xhc3RNb3ZlLnNsaWNlKDAsMiksIGxhc3RNb3ZlLnNsaWNlKDIsNCldO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkcm9wIGxhc3RNb3ZlIGNhdXNpbmcgc2Nyb2xsYmFyIGZsaWNrZXIsXHJcbiAgICAgICAgLy8gc28gd2UgcmVtb3ZlIGZyb20gcGFydCB0byBhdm9pZCB0aGF0XHJcbiAgICAgICAgaWYgKGxhc3RNb3ZlICE9PSBudWxsICYmIGxhc3RNb3ZlWzBdWzFdID09PSAnQCcpIGxhc3RNb3ZlID0gW2xhc3RNb3ZlWzFdXTtcclxuICAgICAgICAvLyBzYXZlIGNhcHR1cmUgc3RhdGUgYmVmb3JlIHVwZGF0aW5nIGNoZXNzZ3JvdW5kXHJcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IGxhc3RNb3ZlICE9PSBudWxsICYmIHRoaXMuY2hlc3Nncm91bmQuc3RhdGUucGllY2VzW2xhc3RNb3ZlWzFdXVxyXG5cclxuICAgICAgICBpZiAobGFzdE1vdmUgIT09IG51bGwgJiYgKHRoaXMudHVybkNvbG9yID09PSB0aGlzLm15Y29sb3IgfHwgdGhpcy5zcGVjdGF0b3IpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykpIHtcclxuICAgICAgICAgICAgICAgIHNvdW5kLnNob2dpbW92ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VuZC5jYXB0dXJlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLm1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxhc3RNb3ZlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tTdGF0dXMobXNnKTtcclxuICAgICAgICBpZiAobXNnLmNoZWNrKSB7XHJcbiAgICAgICAgICAgIHNvdW5kLmNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBvcHBjbG9jayA9ICF0aGlzLmZsaXAgPyAwIDogMTtcclxuICAgICAgICBjb25zdCBteWNsb2NrID0gMSAtIG9wcGNsb2NrO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zcGVjdGF0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoe1xyXG4gICAgICAgICAgICAgICAgZmVuOiBwYXJ0c1swXSxcclxuICAgICAgICAgICAgICAgIHR1cm5Db2xvcjogdGhpcy50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgICAgICBjaGVjazogbXNnLmNoZWNrLFxyXG4gICAgICAgICAgICAgICAgbGFzdE1vdmU6IGxhc3RNb3ZlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdXBkYXRlUG9ja2V0cyh0aGlzLCB0aGlzLnZwb2NrZXQwLCB0aGlzLnZwb2NrZXQxKTtcclxuICAgICAgICAgICAgdGhpcy5jbG9ja3NbMF0ucGF1c2UoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmNsb2Nrc1sxXS5wYXVzZShmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvY2tzW29wcGNsb2NrXS5zZXRUaW1lKGNsb2Nrc1t0aGlzLm9wcGNvbG9yXSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvY2tzW215Y2xvY2tdLnNldFRpbWUoY2xvY2tzW3RoaXMubXljb2xvcl0pO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYWJvcnRhYmxlICYmIG1zZy5zdGF0dXMgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50dXJuQ29sb3IgPT09IHRoaXMubXljb2xvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvY2tzW215Y2xvY2tdLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvY2tzW29wcGNsb2NrXS5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHVybkNvbG9yID09PSB0aGlzLm15Y29sb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc2V0KHtcclxuICAgICAgICAgICAgICAgICAgICBmZW46IHBhcnRzWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHR1cm5Db2xvcjogdGhpcy50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgbW92YWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmVlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMubXljb2xvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHM6IG1zZy5kZXN0cyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrOiBtc2cuY2hlY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdE1vdmU6IGxhc3RNb3ZlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVQb2NrZXRzKHRoaXMsIHRoaXMudnBvY2tldDAsIHRoaXMudnBvY2tldDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9ja3Nbb3BwY2xvY2tdLnBhdXNlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvY2tzW29wcGNsb2NrXS5zZXRUaW1lKGNsb2Nrc1t0aGlzLm9wcGNvbG9yXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb2Nrc1tteWNsb2NrXS5zZXRUaW1lKGNsb2Nrc1t0aGlzLm15Y29sb3JdKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hYm9ydGFibGUgJiYgbXNnLnN0YXR1cyA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb2Nrc1tteWNsb2NrXS5zdGFydChjbG9ja3NbdGhpcy5teWNvbG9yXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ01ZIENMT0NLIFNUQVJURUQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwidHJ5aW5nIHRvIHBsYXkgcHJlbW92ZS4uLi5cIik7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVtb3ZlKSB0aGlzLnBlcmZvcm1QcmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVkcm9wKSB0aGlzLnBlcmZvcm1QcmVkcm9wKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnNldCh7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2l2aW5nIGZlbiBoZXJlIHdpbGwgcGxhY2UgY2FzdGxpbmcgcm9va3MgdG8gdGhlaXIgZGVzdGluYXRpb24gaW4gY2hlc3M5NjAgdmFyaWFudHNcclxuICAgICAgICAgICAgICAgICAgICBmZW46IHBhcnRzWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHR1cm5Db2xvcjogdGhpcy50dXJuQ29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlbW92YWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0czogbXNnLmRlc3RzLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2s6IG1zZy5jaGVjayxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9ja3NbbXljbG9ja10ucGF1c2UoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9ja3NbbXljbG9ja10uc2V0VGltZShjbG9ja3NbdGhpcy5teWNvbG9yXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb2Nrc1tvcHBjbG9ja10uc2V0VGltZShjbG9ja3NbdGhpcy5vcHBjb2xvcl0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFib3J0YWJsZSAmJiBtc2cuc3RhdHVzIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvY2tzW29wcGNsb2NrXS5zdGFydChjbG9ja3NbdGhpcy5vcHBjb2xvcl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdPUFAgQ0xPQ0sgIFNUQVJURUQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wcElzUmFuZG9tTW92ZXIgJiYgbXNnLnJtICAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJtb3ZlXCIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSwgbW92ZTogbXNnLnJtLCBjbG9ja3M6IGNsb2NrcyB9KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnb1BseSA9IChwbHkpID0+IHtcclxuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5zdGVwc1twbHldO1xyXG4gICAgICAgIHZhciBtb3ZlID0gc3RlcFsnbW92ZSddO1xyXG4gICAgICAgIHZhciBjYXB0dXJlID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKG1vdmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpKSBtb3ZlID0gdXNpMnVjaShtb3ZlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudC5zdGFydHNXaXRoKCdncmFuZCcpKSBtb3ZlID0gZ3JhbmQyemVybyhtb3ZlKTtcclxuICAgICAgICAgICAgbW92ZSA9IG1vdmUuc2xpY2UoMSwgMikgPT09ICdAJyA/IFttb3ZlLnNsaWNlKDIsIDQpXSA6IFttb3ZlLnNsaWNlKDAsIDIpLCBtb3ZlLnNsaWNlKDIsIDQpXTtcclxuICAgICAgICAgICAgY2FwdHVyZSA9IHRoaXMuY2hlc3Nncm91bmQuc3RhdGUucGllY2VzW21vdmVbbW92ZS5sZW5ndGggLSAxXV0gIT09IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc2V0KHtcclxuICAgICAgICAgICAgZmVuOiBzdGVwLmZlbixcclxuICAgICAgICAgICAgdHVybkNvbG9yOiBzdGVwLnR1cm5Db2xvcixcclxuICAgICAgICAgICAgbW92YWJsZToge1xyXG4gICAgICAgICAgICAgICAgZnJlZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5zcGVjdGF0b3IgPyB1bmRlZmluZWQgOiBzdGVwLnR1cm5Db2xvcixcclxuICAgICAgICAgICAgICAgIGRlc3RzOiB0aGlzLnJlc3VsdCA9PT0gXCJcIiAmJiBwbHkgPT09IHRoaXMuc3RlcHMubGVuZ3RoIC0gMSA/IHRoaXMuZGVzdHMgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjaGVjazogc3RlcC5jaGVjayxcclxuICAgICAgICAgICAgbGFzdE1vdmU6IG1vdmUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5mdWxsZmVuID0gc3RlcC5mZW47XHJcbiAgICAgICAgdXBkYXRlUG9ja2V0cyh0aGlzLCB0aGlzLnZwb2NrZXQwLCB0aGlzLnZwb2NrZXQxKTtcclxuXHJcbiAgICAgICAgaWYgKHBseSA9PT0gdGhpcy5wbHkgKyAxKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykpIHtcclxuICAgICAgICAgICAgICAgIHNvdW5kLnNob2dpbW92ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VuZC5jYXB0dXJlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLm1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBseSA9IHBseVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZG9TZW5kID0gKG1lc3NhZ2UpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIi0tLT4gZG9TZW5kKCk6XCIsIG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuc29jay5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNlbmRNb3ZlID0gKG9yaWcsIGRlc3QsIHByb21vKSA9PiB7XHJcbiAgICAgICAgLy8gcGF1c2UoKSB3aWxsIGFkZCBpbmNyZW1lbnQhXHJcbiAgICAgICAgY29uc3Qgb3BwY2xvY2sgPSAhdGhpcy5mbGlwID8gMCA6IDFcclxuICAgICAgICBjb25zdCBteWNsb2NrID0gMSAtIG9wcGNsb2NrO1xyXG4gICAgICAgIGNvbnN0IG1vdmV0aW1lID0gKHRoaXMuY2xvY2tzW215Y2xvY2tdLnJ1bm5pbmcpID8gRGF0ZS5ub3coKSAtIHRoaXMuY2xvY2tzW215Y2xvY2tdLnN0YXJ0VGltZSA6IDA7XHJcbiAgICAgICAgdGhpcy5jbG9ja3NbbXljbG9ja10ucGF1c2UoKHRoaXMuYmFzZSA9PT0gMCAmJiB0aGlzLnBseSA8IDIpID8gZmFsc2UgOiB0cnVlKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNlbmRNb3ZlKG9yaWcsIGRlc3QsIHByb20pXCIsIG9yaWcsIGRlc3QsIHByb21vKTtcclxuICAgICAgICBjb25zdCB1Y2lfbW92ZSA9IG9yaWcgKyBkZXN0ICsgcHJvbW87XHJcbiAgICAgICAgY29uc3QgbW92ZSA9IHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/IHVjaTJ1c2kodWNpX21vdmUpIDogKHRoaXMudmFyaWFudC5zdGFydHNXaXRoKCdncmFuZCcpKSA/IHplcm8yZ3JhbmQodWNpX21vdmUpIDogdWNpX21vdmU7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJzZW5kTW92ZShtb3ZlKVwiLCBtb3ZlKTtcclxuICAgICAgICAvLyBUT0RPOiBpZiBwcmVtb3ZlZCwgc2VuZCAwIHRpbWVcclxuICAgICAgICBsZXQgYmNsb2NrLCBjbG9ja3M7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZsaXApIHtcclxuICAgICAgICAgICAgYmNsb2NrID0gdGhpcy5teWNvbG9yID09PSBcImJsYWNrXCIgPyAxIDogMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBiY2xvY2sgPSB0aGlzLm15Y29sb3IgPT09IFwiYmxhY2tcIiA/IDAgOiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3Y2xvY2sgPSAxIC0gYmNsb2NrXHJcbiAgICAgICAgY2xvY2tzID0ge21vdmV0aW1lOiBtb3ZldGltZSwgYmxhY2s6IHRoaXMuY2xvY2tzW2JjbG9ja10uZHVyYXRpb24sIHdoaXRlOiB0aGlzLmNsb2Nrc1t3Y2xvY2tdLmR1cmF0aW9ufTtcclxuICAgICAgICB0aGlzLmRvU2VuZCh7IHR5cGU6IFwibW92ZVwiLCBnYW1lSWQ6IHRoaXMubW9kZWxbXCJnYW1lSWRcIl0sIG1vdmU6IG1vdmUsIGNsb2NrczogY2xvY2tzIH0pO1xyXG4gICAgICAgIGlmICghdGhpcy5hYm9ydGFibGUpIHRoaXMuY2xvY2tzW29wcGNsb2NrXS5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nb3ZlID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAob3JpZywgZGVzdCwgY2FwdHVyZWRQaWVjZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIiAgIGdyb3VuZC5vbk1vdmUoKVwiLCBvcmlnLCBkZXN0LCBjYXB0dXJlZFBpZWNlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkge1xyXG4gICAgICAgICAgICAgICAgc291bmQuc2hvZ2ltb3ZlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZWRQaWVjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kLmNhcHR1cmUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc291bmQubW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Ecm9wID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAocGllY2UsIGRlc3QpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJncm91bmQub25Ecm9wKClcIiwgcGllY2UsIGRlc3QpO1xyXG4gICAgICAgICAgICBpZiAoZGVzdCAhPSAnejAnICYmIHBpZWNlLnJvbGUgJiYgZHJvcElzVmFsaWQodGhpcy5kZXN0cywgcGllY2Uucm9sZSwgZGVzdCkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhcmlhbnQuZW5kc1dpdGgoJ3Nob2dpJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VuZC5zaG9naW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc291bmQubW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGlja0Ryb3AgPSBwaWVjZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFByZW1vdmUgPSAob3JpZywgZGVzdCwgbWV0YSkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJlbW92ZSA9IHsgb3JpZywgZGVzdCwgbWV0YSB9O1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2V0UHJlbW92ZSgpIHRvOlwiLCBvcmlnLCBkZXN0LCBtZXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuc2V0UHJlbW92ZSA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnByZW1vdmUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0UHJlZHJvcCA9IChyb2xlLCBrZXkpID0+IHtcclxuICAgICAgICB0aGlzLnByZWRyb3AgPSB7IHJvbGUsIGtleSB9O1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2V0UHJlZHJvcCgpIHRvOlwiLCByb2xlLCBrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdW5zZXRQcmVkcm9wID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJlZHJvcCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwZXJmb3JtUHJlbW92ZSA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCB7IG9yaWcsIGRlc3QsIG1ldGEgfSA9IHRoaXMucHJlbW92ZTtcclxuICAgICAgICAvLyBUT0RPOiBwcm9tb3Rpb24/XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJwZXJmb3JtUHJlbW92ZSgpXCIsIG9yaWcsIGRlc3QsIG1ldGEpO1xyXG4gICAgICAgIHRoaXMuY2hlc3Nncm91bmQucGxheVByZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnByZW1vdmUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGVyZm9ybVByZWRyb3AgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyByb2xlLCBrZXkgfSA9IHRoaXMucHJlZHJvcDtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInBlcmZvcm1QcmVkcm9wKClcIiwgcm9sZSwga2V5KTtcclxuICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnBsYXlQcmVkcm9wKGRyb3AgPT4geyByZXR1cm4gZHJvcElzVmFsaWQodGhpcy5kZXN0cywgZHJvcC5yb2xlLCBkcm9wLmtleSk7IH0pO1xyXG4gICAgICAgIHRoaXMucHJlZHJvcCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblVzZXJNb3ZlID0gKG9yaWcsIGRlc3QsIG1ldGEpID0+IHtcclxuICAgICAgICAvLyBjaGVzc2dyb3VuZCBkb2Vzbid0IGtub3dzIGFib3V0IGVwLCBzbyB3ZSBoYXZlIHRvIHJlbW92ZSBlcCBjYXB0dXJlZCBwYXduXHJcbiAgICAgICAgY29uc3QgcGllY2VzID0gdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5waWVjZXM7XHJcbiAgICAgICAgY29uc3QgZ2VvbSA9IHRoaXMuY2hlc3Nncm91bmQuc3RhdGUuZ2VvbWV0cnk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJncm91bmQub25Vc2VyTW92ZSgpXCIsIG9yaWcsIGRlc3QsIG1ldGEsIHBpZWNlcyk7XHJcbiAgICAgICAgY29uc3QgbW92ZWQgPSBwaWVjZXNbZGVzdF0gYXMgUGllY2U7XHJcbiAgICAgICAgY29uc3QgZmlyc3RSYW5rSXMwID0gdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5kaW1lbnNpb25zLmhlaWdodCA9PT0gMTA7XHJcbiAgICAgICAgaWYgKG1ldGEuY2FwdHVyZWQgPT09IHVuZGVmaW5lZCAmJiBtb3ZlZC5yb2xlID09PSBcInBhd25cIiAmJiBvcmlnWzBdICE9IGRlc3RbMF0gJiYgaGFzRXAodGhpcy52YXJpYW50KSkge1xyXG4gICAgICAgICAgICBjb25zdCBwb3MgPSBrZXkycG9zKGRlc3QsIGZpcnN0UmFua0lzMCksXHJcbiAgICAgICAgICAgIHBhd25Qb3M6IFBvcyA9IFtwb3NbMF0sIHBvc1sxXSArICh0aGlzLm15Y29sb3IgPT09ICd3aGl0ZScgPyAtMSA6IDEpXTtcclxuICAgICAgICAgICAgY29uc3QgZGlmZjogUGllY2VzRGlmZiA9IHt9O1xyXG4gICAgICAgICAgICBkaWZmW3BvczJrZXkocGF3blBvcywgZ2VvbSldID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLnNldFBpZWNlcyhkaWZmKTtcclxuICAgICAgICAgICAgbWV0YS5jYXB0dXJlZCA9IHtyb2xlOiBcInBhd25cIn07XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBpbmNyZWFzZSBwb2NrZXQgY291bnRcclxuICAgICAgICBpZiAoKHRoaXMudmFyaWFudCA9PT0gXCJjcmF6eWhvdXNlXCIgfHwgdGhpcy52YXJpYW50ID09PSBcImNhcGFob3VzZVwiIHx8IHRoaXMudmFyaWFudCA9PT0gXCJzaG91c2VcIiB8fCB0aGlzLnZhcmlhbnQgPT09IFwiZ3JhbmRob3VzZVwiIHx8IHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkgJiYgbWV0YS5jYXB0dXJlZCkge1xyXG4gICAgICAgICAgICB2YXIgcm9sZSA9IG1ldGEuY2FwdHVyZWQucm9sZVxyXG4gICAgICAgICAgICBpZiAobWV0YS5jYXB0dXJlZC5wcm9tb3RlZCkgcm9sZSA9IHRoaXMudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/IG1ldGEuY2FwdHVyZWQucm9sZS5zbGljZSgxKSBhcyBSb2xlIDogXCJwYXduXCI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5mbGlwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvY2tldHNbMF1bcm9sZV0rKztcclxuICAgICAgICAgICAgICAgIHRoaXMudnBvY2tldDAgPSBwYXRjaCh0aGlzLnZwb2NrZXQwLCBwb2NrZXRWaWV3KHRoaXMsIHRoaXMubXljb2xvciwgXCJ0b3BcIikpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2NrZXRzWzFdW3JvbGVdKys7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZwb2NrZXQxID0gcGF0Y2godGhpcy52cG9ja2V0MSwgcG9ja2V0Vmlldyh0aGlzLCB0aGlzLm15Y29sb3IsIFwiYm90dG9tXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vICBnYXRpbmcgZWxlcGhhbnQvaGF3a1xyXG4gICAgICAgIGlmICh0aGlzLnZhcmlhbnQgPT09IFwic2VpcmF3YW5cIiB8fCB0aGlzLnZhcmlhbnQgPT09IFwic2hvdXNlXCIpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByb21vdGlvbi5zdGFydChvcmlnLCBkZXN0LCBtZXRhKSAmJiAhdGhpcy5nYXRpbmcuc3RhcnQodGhpcy5mdWxsZmVuLCBvcmlnLCBkZXN0KSkgdGhpcy5zZW5kTW92ZShvcmlnLCBkZXN0LCAnJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnByb21vdGlvbi5zdGFydChvcmlnLCBkZXN0LCBtZXRhKSkgdGhpcy5zZW5kTW92ZShvcmlnLCBkZXN0LCAnJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uVXNlckRyb3AgPSAocm9sZSwgZGVzdCkgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZ3JvdW5kLm9uVXNlckRyb3AoKVwiLCByb2xlLCBkZXN0KTtcclxuICAgICAgICAvLyBkZWNyZWFzZSBwb2NrZXQgY291bnRcclxuICAgICAgICAvL2NhbmNlbERyb3BNb2RlKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUpO1xyXG4gICAgICAgIGlmIChkcm9wSXNWYWxpZCh0aGlzLmRlc3RzLCByb2xlLCBkZXN0KSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mbGlwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvY2tldHNbMF1bcm9sZV0tLTtcclxuICAgICAgICAgICAgICAgIHRoaXMudnBvY2tldDAgPSBwYXRjaCh0aGlzLnZwb2NrZXQwLCBwb2NrZXRWaWV3KHRoaXMsIHRoaXMubXljb2xvciwgXCJ0b3BcIikpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2NrZXRzWzFdW3JvbGVdLS07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZwb2NrZXQxID0gcGF0Y2godGhpcy52cG9ja2V0MSwgcG9ja2V0Vmlldyh0aGlzLCB0aGlzLm15Y29sb3IsIFwiYm90dG9tXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlbmRNb3ZlKHJvbGVUb1Nhbltyb2xlXSArIFwiQFwiLCBkZXN0LCAnJylcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJzZW50IG1vdmVcIiwgbW92ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCIhISEgaW52YWxpZCBtb3ZlICEhIVwiLCByb2xlLCBkZXN0KTtcclxuICAgICAgICAgICAgLy8gcmVzdG9yZSBib2FyZFxyXG4gICAgICAgICAgICB0aGlzLmNsaWNrRHJvcCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoe1xyXG4gICAgICAgICAgICAgICAgZmVuOiB0aGlzLmZ1bGxmZW4sXHJcbiAgICAgICAgICAgICAgICBsYXN0TW92ZTogdGhpcy5sYXN0bW92ZSxcclxuICAgICAgICAgICAgICAgIHR1cm5Db2xvcjogdGhpcy5teWNvbG9yLFxyXG4gICAgICAgICAgICAgICAgbW92YWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlc3RzOiB0aGlzLmRlc3RzLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dEZXN0czogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2VsZWN0ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJncm91bmQub25TZWxlY3QoKVwiLCBrZXksIHNlbGVjdGVkLCB0aGlzLmNsaWNrRHJvcCwgdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZSk7XHJcbiAgICAgICAgICAgIC8vIElmIGRyb3Agc2VsZWN0aW9uIHdhcyBzZXQgZHJvcERlc3RzIHdlIGhhdmUgdG8gcmVzdG9yZSBkZXN0cyBoZXJlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlLm1vdmFibGUuZGVzdHMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoa2V5ICE9ICd6MCcgJiYgJ3owJyBpbiB0aGlzLmNoZXNzZ3JvdW5kLnN0YXRlLm1vdmFibGUuZGVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsaWNrRHJvcCAhPT0gdW5kZWZpbmVkICYmIGRyb3BJc1ZhbGlkKHRoaXMuZGVzdHMsIHRoaXMuY2xpY2tEcm9wLnJvbGUsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZXNzZ3JvdW5kLm5ld1BpZWNlKHRoaXMuY2xpY2tEcm9wLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Vc2VyRHJvcCh0aGlzLmNsaWNrRHJvcC5yb2xlLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGlja0Ryb3AgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAvL2NhbmNlbERyb3BNb2RlKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVzc2dyb3VuZC5zZXQoeyBtb3ZhYmxlOiB7IGRlc3RzOiB0aGlzLmRlc3RzIH19KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gU2l0dHV5aW4gaW4gcGxhY2UgcHJvbW90aW9uIG9uIEN0cmwrY2xpY2tcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUuc3RhdHMuY3RybEtleSAmJiBcclxuICAgICAgICAgICAgICAgIChrZXkgaW4gdGhpcy5jaGVzc2dyb3VuZC5zdGF0ZS5tb3ZhYmxlLmRlc3RzKSAmJlxyXG4gICAgICAgICAgICAgICAgKHRoaXMuY2hlc3Nncm91bmQuc3RhdGUubW92YWJsZS5kZXN0c1trZXldLmluZGV4T2Yoa2V5KSA+PSAwKSAmJlxyXG4gICAgICAgICAgICAgICAgKHRoaXMudmFyaWFudCA9PT0gJ3NpdHR1eWluJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ3RybCBpbiBwbGFjZSBwcm9tb3Rpb25cIiwga2V5KTtcclxuICAgICAgICAgICAgICAgIHZhciBwaWVjZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIHZhciBwaWVjZSA9IHRoaXMuY2hlc3Nncm91bmQuc3RhdGUucGllY2VzW2tleV07XHJcbiAgICAgICAgICAgICAgICBwaWVjZXNba2V5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogcGllY2UhLmNvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIHJvbGU6ICdmZXJ6JyxcclxuICAgICAgICAgICAgICAgICAgICBwcm9tb3RlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlc3Nncm91bmQuc2V0UGllY2VzKHBpZWNlcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRNb3ZlKGtleSwga2V5LCAnZicpO1xyXG5cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ1VzZXJDb25uZWN0ZWQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFtcInVzZXJuYW1lXCJdID0gbXNnW1widXNlcm5hbWVcIl07XHJcbiAgICAgICAgcmVuZGVyVXNlcm5hbWUodGhpcy5tb2RlbFtcImhvbWVcIl0sIHRoaXMubW9kZWxbXCJ1c2VybmFtZVwiXSk7XHJcbiAgICAgICAgaWYgKHRoaXMuc3BlY3RhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJpc191c2VyX3ByZXNlbnRcIiwgdXNlcm5hbWU6IHRoaXMud3BsYXllciwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmRvU2VuZCh7IHR5cGU6IFwiaXNfdXNlcl9wcmVzZW50XCIsIHVzZXJuYW1lOiB0aGlzLmJwbGF5ZXIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIHdlIHdhbnQgdG8ga25vdyBsYXN0TW92ZSBhbmQgY2hlY2sgc3RhdHVzXHJcbiAgICAgICAgICAgIHRoaXMuZG9TZW5kKHsgdHlwZTogXCJib2FyZFwiLCBnYW1lSWQ6IHRoaXMubW9kZWxbXCJnYW1lSWRcIl0gfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgb3BwX25hbWUgPSB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0gPT09IHRoaXMud3BsYXllciA/IHRoaXMuYnBsYXllciA6IHRoaXMud3BsYXllcjtcclxuICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcImlzX3VzZXJfcHJlc2VudFwiLCB1c2VybmFtZTogb3BwX25hbWUsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyMScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ2ktc2lkZS5vbmxpbmUjcGxheWVyMScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tb25saW5lXCI6IHRydWUsIFwiaWNvbi1vZmZsaW5lXCI6IGZhbHNlfX0pKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHByZXZlbnQgc2VuZGluZyBnYW1lU3RhcnQgbWVzc2FnZSB3aGVuIHVzZXIganVzdCByZWNvbmVjdGluZ1xyXG4gICAgICAgICAgICBpZiAobXNnLnBseSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb1NlbmQoeyB0eXBlOiBcInJlYWR5XCIsIGdhbWVJZDogdGhpcy5tb2RlbFtcImdhbWVJZFwiXSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRvU2VuZCh7IHR5cGU6IFwiYm9hcmRcIiwgZ2FtZUlkOiB0aGlzLm1vZGVsW1wiZ2FtZUlkXCJdIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnVXNlclByZXNlbnQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgICBpZiAobXNnLnVzZXJuYW1lID09PSB0aGlzLnBsYXllcnNbMF0pIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5ZXIwJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnaS1zaWRlLm9ubGluZSNwbGF5ZXIwJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1vbmxpbmVcIjogdHJ1ZSwgXCJpY29uLW9mZmxpbmVcIjogZmFsc2V9fSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyMScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ2ktc2lkZS5vbmxpbmUjcGxheWVyMScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tb25saW5lXCI6IHRydWUsIFwiaWNvbi1vZmZsaW5lXCI6IGZhbHNlfX0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ1VzZXJEaXNjb25uZWN0ZWQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgICBpZiAobXNnLnVzZXJuYW1lID09PSB0aGlzLnBsYXllcnNbMF0pIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5ZXIwJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHBhdGNoKGNvbnRhaW5lciwgaCgnaS1zaWRlLm9ubGluZSNwbGF5ZXIwJywge2NsYXNzOiB7XCJpY29uXCI6IHRydWUsIFwiaWNvbi1vbmxpbmVcIjogZmFsc2UsIFwiaWNvbi1vZmZsaW5lXCI6IHRydWV9fSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyMScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBwYXRjaChjb250YWluZXIsIGgoJ2ktc2lkZS5vbmxpbmUjcGxheWVyMScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tb25saW5lXCI6IGZhbHNlLCBcImljb24tb2ZmbGluZVwiOiB0cnVlfX0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ0NoYXQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgaWYgKG1zZy51c2VyICE9PSB0aGlzLm1vZGVsW1widXNlcm5hbWVcIl0pIHtcclxuICAgICAgICAgICAgaWYgKCh0aGlzLnNwZWN0YXRvciAmJiBtc2cucm9vbSA9PT0gJ3NwZWN0YXRvcicpIHx8ICghdGhpcy5zcGVjdGF0b3IgJiYgbXNnLnJvb20gIT09ICdzcGVjdGF0b3InKSB8fCBtc2cudXNlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNoYXRNZXNzYWdlKG1zZy51c2VyLCBtc2cubWVzc2FnZSwgXCJyb3VuZGNoYXRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1zZ0Z1bGxDaGF0ID0gKG1zZykgPT4ge1xyXG4gICAgICAgIG1zZy5saW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5zcGVjdGF0b3IgJiYgbGluZS5yb29tID09PSAnc3BlY3RhdG9yJykgfHwgKCF0aGlzLnNwZWN0YXRvciAmJiBsaW5lLnJvb20gIT09ICdzcGVjdGF0b3InKSB8fCBsaW5lLnVzZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjaGF0TWVzc2FnZShsaW5lLnVzZXIsIGxpbmUubWVzc2FnZSwgXCJyb3VuZGNoYXRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnTW9yZVRpbWUgPSAoKSA9PiB7XHJcbiAgICAgICAgY2hhdE1lc3NhZ2UoJycsIHRoaXMubXljb2xvciArICcgKzE1IHNlY29uZHMnLCBcInJvdW5kY2hhdFwiKTtcclxuICAgICAgICB0aGlzLmNsb2Nrc1sxXS5zZXRUaW1lKHRoaXMuY2xvY2tzWzFdLmR1cmF0aW9uICsgMTUgKiAxMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uTXNnT2ZmZXIgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgY2hhdE1lc3NhZ2UoXCJcIiwgbXNnLm1lc3NhZ2UsIFwicm91bmRjaGF0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Nc2dHYW1lTm90Rm91bmQgPSAobXNnKSA9PiB7XHJcbiAgICAgICAgYWxlcnQoXCJSZXF1c2V0ZWQgZ2FtZSBcIiArIG1zZ1snZ2FtZUlkJ10gKyBcIiBub3QgZm91bmQhXCIpO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odGhpcy5tb2RlbFtcImhvbWVcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25NZXNzYWdlID0gKGV2dCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiPCsrKyBvbk1lc3NhZ2UoKTpcIiwgZXZ0LmRhdGEpO1xyXG4gICAgICAgIHZhciBtc2cgPSBKU09OLnBhcnNlKGV2dC5kYXRhKTtcclxuICAgICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJib2FyZFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ0JvYXJkKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImdhbWVFbmRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tTdGF0dXMobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZ2FtZVN0YXJ0XCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnR2FtZVN0YXJ0KG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImdhbWVfdXNlcl9jb25uZWN0ZWRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dVc2VyQ29ubmVjdGVkKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInVzZXJfcHJlc2VudFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ1VzZXJQcmVzZW50KG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInVzZXJfZGlzY29ubmVjdGVkXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnVXNlckRpc2Nvbm5lY3RlZChtc2cpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJyb3VuZGNoYXRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dDaGF0KG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImZ1bGxjaGF0XCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnRnVsbENoYXQobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibmV3X2dhbWVcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dOZXdHYW1lKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm9mZmVyXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXNnT2ZmZXIobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibW9yZXRpbWVcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dNb3JlVGltZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVUVlwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1zZ1VwZGF0ZVRWKG1zZyk7XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICBjYXNlIFwiZ2FtZV9ub3RfZm91bmRcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Nc2dHYW1lTm90Rm91bmQobXNnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IGluaXQgfSBmcm9tIFwic25hYmJkb21cIjtcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSAnc25hYmJkb20vdm5vZGUnO1xuaW1wb3J0IGtsYXNzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvY2xhc3MnO1xuaW1wb3J0IGF0dHJpYnV0ZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9hdHRyaWJ1dGVzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvcHJvcHMnO1xuaW1wb3J0IGxpc3RlbmVycyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2V2ZW50bGlzdGVuZXJzJztcblxuY29uc3QgcGF0Y2ggPSBpbml0KFtrbGFzcywgYXR0cmlidXRlcywgcHJvcGVydGllcywgbGlzdGVuZXJzXSk7XG5cbmltcG9ydCBoIGZyb20gJ3NuYWJiZG9tL2gnO1xuXG5pbXBvcnQgeyBkaW1lbnNpb25zIH0gZnJvbSAnY2hlc3Nncm91bmR4L3R5cGVzJztcbmltcG9ydCB7IHZhcmlhbnRzLCBWQVJJQU5UUyB9IGZyb20gJy4vY2hlc3MnO1xuaW1wb3J0IHsgcG9ja2V0VmlldyB9IGZyb20gJy4vcG9ja2V0JztcbmltcG9ydCB7IG5lZWRQb2NrZXRzIH0gZnJvbSAnLi9jaGVzcyc7XG5pbXBvcnQgeyBwbGF5ZXIgfSBmcm9tICcuL3BsYXllcic7XG5pbXBvcnQgeyBhbmFseXNpc0NoYXJ0IH0gZnJvbSAnLi9jaGFydCc7XG5pbXBvcnQgQW5hbHlzaXNDb250cm9sbGVyIGZyb20gJy4vYW5hbHlzaXNDdHJsJztcblxuLy8gVE9ETzogYWRkIGRhcmsvbGlnaHQgdGhlbWUgYnV0dG9ucyAoaWNvbi1zdW4tby9pY29uLW1vb24tbylcblxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNTUyhjc3NGaWxlKSB7XG4gICAgLy8gY3NzIGZpbGUgaW5kZXggaW4gdGVtcGxhdGUuaHRtbFxuICAgIHZhciBjc3NMaW5rSW5kZXggPSAxO1xuICAgIGlmIChjc3NGaWxlLmluY2x1ZGVzKFwieGlhbmdxaVwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSAzO1xuICAgIH0gZWxzZSBpZiAoY3NzRmlsZS5pbmNsdWRlcyhcInNob2dpXCIpKSB7XG4gICAgICAgIGNzc0xpbmtJbmRleCA9IDI7XG4gICAgfSBlbHNlIGlmIChjc3NGaWxlLmluY2x1ZGVzKFwiY2FwYVwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSA0O1xuICAgIH0gZWxzZSBpZiAoY3NzRmlsZS5pbmNsdWRlcyhcIm1ha3J1a1wiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSA1O1xuICAgIH0gZWxzZSBpZiAoY3NzRmlsZS5pbmNsdWRlcyhcInNpdHR1eWluXCIpKSB7XG4gICAgICAgIGNzc0xpbmtJbmRleCA9IDY7XG4gICAgfSBlbHNlIGlmIChjc3NGaWxlLmluY2x1ZGVzKFwic2VpclwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSA3O1xuICAgIH0gZWxzZSBpZiAoY3NzRmlsZS5pbmNsdWRlcyhcIjh4OFwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSA4O1xuICAgIH0gZWxzZSBpZiAoY3NzRmlsZS5pbmNsdWRlcyhcIjEweDhcIikpIHtcbiAgICAgICAgY3NzTGlua0luZGV4ID0gOTtcbiAgICB9IGVsc2UgaWYgKGNzc0ZpbGUuaW5jbHVkZXMoXCIxMHgxMFwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSAxMDtcbiAgICB9IGVsc2UgaWYgKGNzc0ZpbGUuaW5jbHVkZXMoXCI5eDlcIikpIHtcbiAgICAgICAgY3NzTGlua0luZGV4ID0gMTE7XG4gICAgfSBlbHNlIGlmIChjc3NGaWxlLmluY2x1ZGVzKFwiOXgxMFwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSAxMjtcbiAgICB9IGVsc2UgaWYgKGNzc0ZpbGUuaW5jbHVkZXMoXCJtYWtyYlwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSAxMztcbiAgICB9IGVsc2UgaWYgKGNzc0ZpbGUuaW5jbHVkZXMoXCJzaXR0YlwiKSkge1xuICAgICAgICBjc3NMaW5rSW5kZXggPSAxNDtcbiAgICB9IGVsc2UgaWYgKGNzc0ZpbGUuaW5jbHVkZXMoXCI1eDVcIikpIHtcbiAgICAgICAgY3NzTGlua0luZGV4ID0gMTU7XG4gICAgfVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwibGlua1wiKS5pdGVtKGNzc0xpbmtJbmRleCkhLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgY3NzRmlsZSk7XG59XG5cbmZ1bmN0aW9uIHNldEJvYXJkIChDU1NpbmRleGVzQiwgdmFyaWFudCwgY29sb3IpIHtcbiAgICBjb25zb2xlLmxvZyhcInNldEJvYXJkKClcIiwgQ1NTaW5kZXhlc0IsIHZhcmlhbnQsIGNvbG9yKVxuICAgIHZhciBpZHggPSBDU1NpbmRleGVzQlt2YXJpYW50cy5pbmRleE9mKHZhcmlhbnQpXTtcbiAgICBpZHggPSBNYXRoLm1pbihpZHgsIFZBUklBTlRTW3ZhcmlhbnRdLkJvYXJkQ1NTLmxlbmd0aCAtIDEpO1xuICAgIGNoYW5nZUNTUygnL3N0YXRpYy8nICsgVkFSSUFOVFNbdmFyaWFudF0uQm9hcmRDU1NbaWR4XSArICcuY3NzJyk7XG59XG5cbmZ1bmN0aW9uIHNldFBpZWNlcyAoY3RybCwgY29sb3IpIHtcbiAgICBjb25zdCBDU1NpbmRleGVzUCA9IGN0cmwuQ1NTaW5kZXhlc1AsIHZhcmlhbnQgPSBjdHJsLnZhcmlhbnQsIGNoZXNzZ3JvdW5kID0gY3RybC5jaGVzc2dyb3VuZDtcbiAgICB2YXIgaWR4ID0gQ1NTaW5kZXhlc1BbdmFyaWFudHMuaW5kZXhPZih2YXJpYW50KV07XG4gICAgaWR4ID0gTWF0aC5taW4oaWR4LCBWQVJJQU5UU1t2YXJpYW50XS5QaWVjZUNTUy5sZW5ndGggLSAxKTtcbiAgICBpZiAodmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkge1xuICAgICAgICB2YXIgY3NzID0gVkFSSUFOVFNbdmFyaWFudF0uUGllY2VDU1NbaWR4XTtcbiAgICAgICAgLy8gY2hhbmdlIHNob2dpIHBpZWNlIGNvbG9ycyBhY2NvcmRpbmcgdG8gYm9hcmQgb3JpZW50YXRpb25cbiAgICAgICAgaWYgKGNvbG9yID09PSBcImJsYWNrXCIpIGNzcyA9IGNzcy5yZXBsYWNlKCcwJywgJzEnKTtcbiAgICAgICAgY2hhbmdlQ1NTKCcvc3RhdGljLycgKyBjc3MgKyAnLmNzcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYW5nZUNTUygnL3N0YXRpYy8nICsgVkFSSUFOVFNbdmFyaWFudF0uUGllY2VDU1NbaWR4XSArICcuY3NzJyk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKFwiLS0tIHNldFBpZWNlcygpXCIpO1xuICAgIC8vIFdlIHVzZSBwYWxlR3JlZW4gYXJyb3dzIGFuZCBjaXJjbGVzIGZvciBhbmFseXNpcyBQViBzdWdnZXN0aW9uc1xuICAgIC8vIEZvciBkcm9wIG1vdmVzIHdlIGFsc28gd2FudCB0byBkcmF3IHRoZSBkcm9wcGVkIHBpZWNlXG4gICAgaWYgKG5lZWRQb2NrZXRzKGN0cmwudmFyaWFudCkpIHtcbiAgICAgICAgY29uc3QgYmFzZXVybCA9IFZBUklBTlRTW3ZhcmlhbnRdLmJhc2VVUkxbaWR4XSArICcvJztcbiAgICAgICAgY29uc29sZS5sb2coXCItLS0gYmFzZXVybFwiLCBiYXNldXJsKTtcbiAgICAgICAgY2hlc3Nncm91bmQuc2V0KHtcbiAgICAgICAgICAgIGRyYXdhYmxlOiB7XG4gICAgICAgICAgICAgICAgcGllY2VzOiB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw6IGN0cmwubW9kZWxbJ2hvbWUnXSArICcvc3RhdGljL2ltYWdlcy9waWVjZXMvJyArIGJhc2V1cmxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2V0Wm9vbSAoY3RybCwgem9vbTogbnVtYmVyKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2ctd3JhcCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChlbCkge1xuICAgICAgICBjb25zdCBiYXNlV2lkdGggPSBkaW1lbnNpb25zW1ZBUklBTlRTW2N0cmwudmFyaWFudF0uZ2VvbV0ud2lkdGggKiAoY3RybC52YXJpYW50LmVuZHNXaXRoKCdzaG9naScpID8gNTIgOiA2NCk7XG4gICAgICAgIGNvbnN0IGJhc2VIZWlnaHQgPSBkaW1lbnNpb25zW1ZBUklBTlRTW2N0cmwudmFyaWFudF0uZ2VvbV0uaGVpZ2h0ICogKGN0cmwudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSA/IDYwIDogNjQpO1xuICAgICAgICBjb25zdCBweHcgPSBgJHt6b29tIC8gMTAwICogYmFzZVdpZHRofXB4YDtcbiAgICAgICAgY29uc3QgcHhoID0gYCR7em9vbSAvIDEwMCAqIGJhc2VIZWlnaHR9cHhgO1xuICAgICAgICBlbC5zdHlsZS53aWR0aCA9IHB4dztcbiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHhoO1xuICAgICAgICB2YXIgcHhwID0gKG5lZWRQb2NrZXRzKGN0cmwudmFyaWFudCkpID8gJzEzMnB4OycgOiAnMHB4Oyc7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCdzdHlsZScsICctLWNnd3JhcHdpZHRoOicgKyBweHcgKyAnOy0tY2d3cmFwaGVpZ2h0OicgKyBweGggKyAnOy0tcG9ja2V0aGVpZ2h0OicgKyBweHAgKyAnOyAtLVBWaGVpZ2h0OiAwcHg7Jyk7XG5cbiAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hlc3Nncm91bmQucmVzaXplJykpO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInpvb20tXCIgKyBjdHJsLnZhcmlhbnQsIFN0cmluZyh6b29tKSk7XG5cbiAgICAgICAgaWYgKGN0cmwgaW5zdGFuY2VvZiBBbmFseXNpc0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGFuYWx5c2lzQ2hhcnQoY3RybCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGZsaXBcbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVPcmllbnRhdGlvbiAoY3RybCkge1xuICAgIGN0cmwuZmxpcCA9ICFjdHJsLmZsaXA7XG4gICAgY3RybC5jaGVzc2dyb3VuZC50b2dnbGVPcmllbnRhdGlvbigpO1xuXG4gICAgaWYgKGN0cmwudmFyaWFudC5lbmRzV2l0aCgnc2hvZ2knKSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IGN0cmwuY2hlc3Nncm91bmQuc3RhdGUub3JpZW50YXRpb24gPT09IFwid2hpdGVcIiA/IFwid2hpdGVcIiA6IFwiYmxhY2tcIjtcbiAgICAgICAgc2V0UGllY2VzKGN0cmwsIGNvbG9yKTtcbiAgICB9O1xuICAgIFxuICAgIGNvbnNvbGUubG9nKFwiRkxJUFwiKTtcbiAgICBpZiAobmVlZFBvY2tldHMoY3RybC52YXJpYW50KSkge1xuICAgICAgICBjb25zdCB0bXBfcG9ja2V0ID0gY3RybC5wb2NrZXRzWzBdO1xuICAgICAgICBjdHJsLnBvY2tldHNbMF0gPSBjdHJsLnBvY2tldHNbMV07XG4gICAgICAgIGN0cmwucG9ja2V0c1sxXSA9IHRtcF9wb2NrZXQ7XG4gICAgICAgIGN0cmwudnBvY2tldDAgPSBwYXRjaChjdHJsLnZwb2NrZXQwLCBwb2NrZXRWaWV3KGN0cmwsIGN0cmwuZmxpcCA/IGN0cmwubXljb2xvciA6IGN0cmwub3BwY29sb3IsIFwidG9wXCIpKTtcbiAgICAgICAgY3RybC52cG9ja2V0MSA9IHBhdGNoKGN0cmwudnBvY2tldDEsIHBvY2tldFZpZXcoY3RybCwgY3RybC5mbGlwID8gY3RybC5vcHBjb2xvciA6IGN0cmwubXljb2xvciwgXCJib3R0b21cIikpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IG1vcmV0aW1lIGJ1dHRvblxuICAgIGNvbnN0IG5ld19ydW5uaW5nX2NsY2sgPSAoY3RybC5jbG9ja3NbMF0ucnVubmluZykgPyBjdHJsLmNsb2Nrc1sxXSA6IGN0cmwuY2xvY2tzWzBdO1xuICAgIGN0cmwuY2xvY2tzWzBdLnBhdXNlKGZhbHNlKTtcbiAgICBjdHJsLmNsb2Nrc1sxXS5wYXVzZShmYWxzZSk7XG5cbiAgICBjb25zdCB0bXBfY2xvY2sgPSBjdHJsLmNsb2Nrc1swXTtcbiAgICBjb25zdCB0bXBfY2xvY2tfdGltZSA9IHRtcF9jbG9jay5kdXJhdGlvbjtcbiAgICBjdHJsLmNsb2Nrc1swXS5zZXRUaW1lKGN0cmwuY2xvY2tzWzFdLmR1cmF0aW9uKTtcbiAgICBjdHJsLmNsb2Nrc1sxXS5zZXRUaW1lKHRtcF9jbG9ja190aW1lKTtcbiAgICBpZiAoY3RybC5zdGF0dXMgPCAwKSBuZXdfcnVubmluZ19jbGNrLnN0YXJ0KCk7XG5cbiAgICBjdHJsLnZwbGF5ZXIwID0gcGF0Y2goY3RybC52cGxheWVyMCwgcGxheWVyKCdwbGF5ZXIwJywgY3RybC50aXRsZXNbY3RybC5mbGlwID8gMSA6IDBdLCBjdHJsLnBsYXllcnNbY3RybC5mbGlwID8gMSA6IDBdLCBjdHJsLm1vZGVsW1wibGV2ZWxcIl0pKTtcbiAgICBjdHJsLnZwbGF5ZXIxID0gcGF0Y2goY3RybC52cGxheWVyMSwgcGxheWVyKCdwbGF5ZXIxJywgY3RybC50aXRsZXNbY3RybC5mbGlwID8gMCA6IDFdLCBjdHJsLnBsYXllcnNbY3RybC5mbGlwID8gMCA6IDFdLCBjdHJsLm1vZGVsW1wibGV2ZWxcIl0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlYXJCdXR0b24gKGN0cmwpIHtcbiAgICByZXR1cm4gaCgnYnV0dG9uI2dlYXInLCB7XG4gICAgICAgIG9uOiB7IGNsaWNrOiAoKSA9PiB0b2dnbGVCb2FyZFNldHRpbmdzKGN0cmwpIH0sXG4gICAgICAgIGNsYXNzOiB7XCJzZWxlY3RlZFwiOiBjdHJsLnNldHRpbmdzfSB9LFxuICAgICAgICBbaCgnaScsIHtcbiAgICAgICAgICAgIHByb3BzOiB7dGl0bGU6ICdTZXR0aW5ncyd9LFxuICAgICAgICAgICAgY2xhc3M6IHtcImljb25cIjogdHJ1ZSwgXCJpY29uLWNvZ1wiOiB0cnVlfSBcbiAgICAgICAgICAgIH1cbiAgICAgICAgKV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVCb2FyZFNldHRpbmdzIChjdHJsKSB7XG4gICAgY3RybC5zZXR0aW5ncyA9ICFjdHJsLnNldHRpbmdzO1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dlYXInKTtcbiAgICBpZiAoZWwgaW5zdGFuY2VvZiBFbGVtZW50KSBwYXRjaChjdHJsLnZnZWFyLCBnZWFyQnV0dG9uKGN0cmwpKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZWxpc3QtYmxvY2snKSEuc3R5bGUuZGlzcGxheSA9IChjdHJsLnNldHRpbmdzKSA/ICdub25lJyA6ICdpbmxpbmUtZ3JpZCc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvYXJkLXNldHRpbmdzJykhLnN0eWxlLmRpc3BsYXkgPSAoY3RybC5zZXR0aW5ncykgPyAnaW5saW5lLWdyaWQnOiAnbm9uZSc7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckJvYXJkcyAoY3RybCkge1xuICAgIGNvbnN0IHZhcmlhbnQgPSBjdHJsLnZhcmlhbnQ7XG4gICAgdmFyIHZib2FyZCA9IGN0cmwuQ1NTaW5kZXhlc0JbdmFyaWFudHMuaW5kZXhPZihjdHJsLnZhcmlhbnQpXTtcbiAgICB2YXIgaTtcbiAgICBjb25zdCBib2FyZHMgOiBWTm9kZVtdID0gW107XG5cbiAgICBjb25zdCB0b2dnbGVCb2FyZHMgPSAoZSkgPT4ge1xuICAgICAgICBjb25zdCBpZHggPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInRvZ2dsZUJvYXJkcygpXCIsIGlkeCk7XG4gICAgICAgIGN0cmwuQ1NTaW5kZXhlc0JbdmFyaWFudHMuaW5kZXhPZihjdHJsLnZhcmlhbnQpXSA9IGlkeFxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShjdHJsLnZhcmlhbnQgKyBcIl9ib2FyZFwiLCBTdHJpbmcoaWR4KSk7XG4gICAgICAgIHNldEJvYXJkKGN0cmwuQ1NTaW5kZXhlc0IsIGN0cmwudmFyaWFudCwgY3RybC5teWNvbG9yKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgVkFSSUFOVFNbY3RybC52YXJpYW50XS5Cb2FyZENTUy5sZW5ndGg7IGkrKykge1xuICAgICAgICBib2FyZHMucHVzaChoKCdpbnB1dCNib2FyZCcgKyBTdHJpbmcoaSksIHtcbiAgICAgICAgICAgIG9uOiB7IGNoYW5nZTogdG9nZ2xlQm9hcmRzIH0sXG4gICAgICAgICAgICBwcm9wczogeyB0eXBlOiBcInJhZGlvXCIsIG5hbWU6IFwiYm9hcmRcIiwgdmFsdWU6IFN0cmluZyhpKSwgY2hlY2tlZDogdmJvYXJkID09PSBTdHJpbmcoaSkgPyBcImNoZWNrZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBib2FyZHMucHVzaChoKCdsYWJlbC5ib2FyZC5ib2FyZCcgKyBTdHJpbmcoaSkgKyAnLicgKyB2YXJpYW50LCB7IGF0dHJzOiB7Zm9yOiBcImJvYXJkXCIgKyBTdHJpbmcoaSl9IH0sIFwiXCIpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJvYXJkcztcbn1cblxuZnVuY3Rpb24gcmVuZGVyUGllY2VzIChjdHJsKSB7XG4gICAgY29uc3QgdmFyaWFudCA9IGN0cmwudmFyaWFudDtcbiAgICB2YXIgdnBpZWNlID0gY3RybC5DU1NpbmRleGVzUFt2YXJpYW50cy5pbmRleE9mKGN0cmwudmFyaWFudCldO1xuICAgIHZhciBpO1xuICAgIGNvbnN0IHBpZWNlcyA6IFZOb2RlW10gPSBbXTtcblxuICAgIGNvbnN0IHRvZ2dsZVBpZWNlcyA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwidG9nZ2xlUGllY2VzKClcIiwgaWR4KTtcbiAgICAgICAgY3RybC5DU1NpbmRleGVzUFt2YXJpYW50cy5pbmRleE9mKGN0cmwudmFyaWFudCldID0gaWR4XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGN0cmwudmFyaWFudCArIFwiX3BpZWNlc1wiLCBTdHJpbmcoaWR4KSk7XG4gICAgICAgIHNldFBpZWNlcyhjdHJsLCBjdHJsLm15Y29sb3IpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBWQVJJQU5UU1tjdHJsLnZhcmlhbnRdLlBpZWNlQ1NTLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHBpZWNlcy5wdXNoKGgoJ2lucHV0I3BpZWNlJyArIFN0cmluZyhpKSwge1xuICAgICAgICAgICAgb246IHsgY2hhbmdlOiB0b2dnbGVQaWVjZXMgfSxcbiAgICAgICAgICAgIHByb3BzOiB7IHR5cGU6IFwicmFkaW9cIiwgbmFtZTogXCJwaWVjZVwiLCB2YWx1ZTogU3RyaW5nKGkpLCBjaGVja2VkOiB2cGllY2UgPT09IFN0cmluZyhpKSA/IFwiY2hlY2tlZFwiIDogXCJcIn1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHBpZWNlcy5wdXNoKGgoJ2xhYmVsLnBpZWNlLnBpZWNlJyArIFN0cmluZyhpKSArICcuJyArIHZhcmlhbnQsIHsgYXR0cnM6IHtmb3I6IFwicGllY2VcIiArIFN0cmluZyhpKX0gfSwgXCJcIikpO1xuICAgIH1cbiAgICByZXR1cm4gcGllY2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NWaWV3IChjdHJsKSB7XG5cbiAgICBpZiAoVkFSSUFOVFNbY3RybC52YXJpYW50XS5Cb2FyZENTUy5sZW5ndGggPiAxKSBzZXRCb2FyZChjdHJsLkNTU2luZGV4ZXNCLCBjdHJsLnZhcmlhbnQsIGN0cmwubXljb2xvcik7XG4gICAgaWYgKFZBUklBTlRTW2N0cmwudmFyaWFudF0uUGllY2VDU1MubGVuZ3RoID4gMSkgc2V0UGllY2VzKGN0cmwsIGN0cmwubXljb2xvcik7XG5cbiAgICAvLyB0dXJuIHNldHRpbmdzIHBhbmVsIG9mZlxuICAgIHRvZ2dsZUJvYXJkU2V0dGluZ3MoY3RybCk7XG4gICAgY29uc3Qgem9vbSA9IGxvY2FsU3RvcmFnZVtcInpvb20tXCIgKyBjdHJsLnZhcmlhbnRdO1xuICAgIGlmICh6b29tICE9PSB1bmRlZmluZWQgJiYgem9vbSAhPT0gMTAwKSBzZXRab29tKGN0cmwsIE51bWJlcih6b29tKSk7XG5cbiAgICByZXR1cm4gaCgnZGl2I2JvYXJkLXNldHRpbmdzJywgW1xuICAgICAgICBoKCdkaXYuc2V0dGluZ3MtcGllY2VzJywgcmVuZGVyUGllY2VzKGN0cmwpKSxcbiAgICAgICAgaCgnZGl2LnNldHRpbmdzLWJvYXJkcycsIHJlbmRlckJvYXJkcyhjdHJsKSksXG4gICAgICAgIC8vIFRPRE86IGhvdyB0byBob3Jpem9udGFseSBjZW50ZXIgdGhpcz9cbiAgICAgICAgLy8gaCgnbGFiZWwuem9vbScsIHsgYXR0cnM6IHtmb3I6IFwiem9vbVwifSB9LCBcIkJvYXJkIHNpemVcIiksXG4gICAgICAgIGgoJ2lucHV0I3pvb20nLCB7XG4gICAgICAgICAgICBjbGFzczoge1wic2xpZGVyXCI6IHRydWUgfSxcbiAgICAgICAgICAgIGF0dHJzOiB7IG5hbWU6ICd6b29tJywgd2lkdGg6ICcyODBweCcsIHR5cGU6ICdyYW5nZScsIHZhbHVlOiBOdW1iZXIoem9vbSksIG1pbjogNjAsIG1heDogMTYwIH0sXG4gICAgICAgICAgICBvbjogeyBpbnB1dDogKGUpID0+IHsgc2V0Wm9vbShjdHJsLCBwYXJzZUZsb2F0KChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSkpOyB9IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICBdKTtcbn1cbiIsImNsYXNzIHNvdW5kcyB7XHJcbiAgICB0cmFja3M7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRyYWNrcyA9IHtcclxuICAgICAgICAgICAgR2VuZXJpY05vdGlmeTogeyBuYW1lOiAnR2VuZXJpY05vdGlmeScsIHF0eSA6IDEsIHBvb2wgOiBbXSwgaW5kZXggOiAwfSxcclxuICAgICAgICAgICAgTW92ZTogeyBuYW1lOiAnTW92ZScsIHF0eSA6IDYsIHBvb2wgOiBbXSwgaW5kZXggOiAwfSxcclxuICAgICAgICAgICAgQ2FwdHVyZTogeyBuYW1lOiAnQ2FwdHVyZScsIHF0eSA6IDQsIHBvb2wgOiBbXSwgaW5kZXggOiAwfSxcclxuICAgICAgICAgICAgQ2hlY2s6IHsgbmFtZTogJ0NoZWNrJywgcXR5IDogMiwgcG9vbCA6IFtdLCBpbmRleCA6IDB9LFxyXG4gICAgICAgICAgICBEcmF3OiB7IG5hbWU6ICdEcmF3JywgcXR5IDogMSwgcG9vbCA6IFtdLCBpbmRleCA6IDB9LFxyXG4gICAgICAgICAgICBWaWN0b3J5OiB7IG5hbWU6ICdWaWN0b3J5JywgcXR5IDogMSwgcG9vbCA6IFtdLCBpbmRleCA6IDB9LFxyXG4gICAgICAgICAgICBEZWZlYXQ6IHsgbmFtZTogJ0RlZmVhdCcsIHF0eSA6IDEsIHBvb2wgOiBbXSwgaW5kZXggOiAwfSxcclxuICAgICAgICAgICAgU2hvZ2lNb3ZlOiB7IG5hbWU6ICdrb21hb3RvNScsIHF0eSA6IDYsIHBvb2wgOiBbXSwgaW5kZXggOiAwfSxcclxuICAgICAgICAgICAgQ2hhdDogeyBuYW1lOiAnY2hhdCcsIHF0eSA6IDEsIHBvb2wgOiBbXSwgaW5kZXggOiAwfSxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMudHJhY2tzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50cmFja3Nba2V5XTtcclxuICAgICAgICAgICAgdHlwZS5wb29sID0gdGhpcy5idWlsZE1hbnlTb3VuZHModHlwZS5uYW1lLCB0eXBlLnF0eSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZE1hbnlTb3VuZHMgPSAoZmlsZSwgcXR5KSA9PiB7XHJcbiAgICAgICAgdmFyIHNvdW5kQXJyYXk6IEhUTUxBdWRpb0VsZW1lbnRbXSA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChzb3VuZEFycmF5Lmxlbmd0aCA8IHF0eSkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYXVkaW9cIik7XHJcbiAgICAgICAgICAgIGlmIChlbC5jYW5QbGF5VHlwZSgnYXVkaW8vbXBlZycpKSB7XHJcbiAgICAgICAgICAgICAgICBlbC5zcmMgPSAnL3N0YXRpYy9zb3VuZC8nICsgZmlsZSArICcubXAzJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsLnNyYyA9ICcvc3RhdGljL3NvdW5kLycgKyBmaWxlICsgJy5vZ2cnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZShcInByZWxvYWRcIiwgXCJub25lXCIpO1xyXG4gICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgICAgIHNvdW5kQXJyYXkucHVzaChlbCk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc291bmRBcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFNvdW5kID0gKHR5cGUpID0+IHtcclxuICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy50cmFja3NbdHlwZV07XHJcbiAgICAgICAgdGFyZ2V0LmluZGV4ID0gKHRhcmdldC5pbmRleCArIDEpICUgdGFyZ2V0LnBvb2wubGVuZ3RoO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU09VTkQ6XCIsIHR5cGUsIHRhcmdldC5pbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldC5wb29sW3RhcmdldC5pbmRleF07XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJpY05vdGlmeSgpIHsgdGhpcy5nZXRTb3VuZCgnR2VuZXJpY05vdGlmeScpLnBsYXkoKTsgfTtcclxuICAgIG1vdmUoKSB7IHRoaXMuZ2V0U291bmQoJ01vdmUnKS5wbGF5KCk7IH07XHJcbiAgICBjYXB0dXJlKCkgeyB0aGlzLmdldFNvdW5kKCdDYXB0dXJlJykucGxheSgpOyB9O1xyXG4gICAgY2hlY2soKSB7IHRoaXMuZ2V0U291bmQoJ0NoZWNrJykucGxheSgpOyB9O1xyXG4gICAgZHJhdygpIHsgdGhpcy5nZXRTb3VuZCgnRHJhdycpLnBsYXkoKTsgfTtcclxuICAgIHZpY3RvcnkoKSB7IHRoaXMuZ2V0U291bmQoJ1ZpY3RvcnknKS5wbGF5KCk7IH07XHJcbiAgICBkZWZlYXQoKSB7IHRoaXMuZ2V0U291bmQoJ0RlZmVhdCcpLnBsYXkoKTsgfTtcclxuICAgIHNob2dpbW92ZSgpIHsgdGhpcy5nZXRTb3VuZCgnU2hvZ2lNb3ZlJykucGxheSgpOyB9O1xyXG4gICAgY2hhdCgpIHsgdGhpcy5nZXRTb3VuZCgnQ2hhdCcpLnBsYXkoKTsgfTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNvdW5kID0gbmV3KHNvdW5kcyk7XHJcbiIsImltcG9ydCB7IGluaXQgfSBmcm9tICdzbmFiYmRvbSc7XG5pbXBvcnQga2xhc3MgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9jbGFzcyc7XG5pbXBvcnQgYXR0cmlidXRlcyBmcm9tICdzbmFiYmRvbS9tb2R1bGVzL2F0dHJpYnV0ZXMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnc25hYmJkb20vbW9kdWxlcy9wcm9wcyc7XG5pbXBvcnQgbGlzdGVuZXJzIGZyb20gJ3NuYWJiZG9tL21vZHVsZXMvZXZlbnRsaXN0ZW5lcnMnO1xuXG5jb25zdCBwYXRjaCA9IGluaXQoW2tsYXNzLCBhdHRyaWJ1dGVzLCBwcm9wZXJ0aWVzLCBsaXN0ZW5lcnNdKTtcblxuaW1wb3J0IGggZnJvbSAnc25hYmJkb20vaCc7XG5cbi8vIFRPRE86IGNyZWF0ZSBsb2dvdXQgYnV0dG9uIHdoZW4gbG9nZ2VkIGluXG4vKlxuZnVuY3Rpb24gbG9naW4oaG9tZSkge1xuICAgIGNvbnNvbGUubG9nKFwiTE9HSU4gV0lUSCBMSUNIRVNTXCIpO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oaG9tZSArICcvbG9naW4nKTtcbn07XG4qL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclVzZXJuYW1lKGhvbWUsIHVzZXJuYW1lKSB7XG4gICAgY29uc29sZS5sb2coXCJyZW5kZXJVc2VybmFtZSgpXCIsIHVzZXJuYW1lLCBob21lKTtcbiAgICB2YXIgb2xkVk5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlcm5hbWUnKTtcbiAgICBpZiAob2xkVk5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgIG9sZFZOb2RlLmlubmVySFRNTCA9ICcnO1xuICAgICAgICBwYXRjaChvbGRWTm9kZSBhcyBIVE1MRWxlbWVudCwgaCgnZGl2I3VzZXJuYW1lJywgaCgnYS5uYXYtbGluaycsIHthdHRyczoge2hyZWY6ICcvQC8nICsgdXNlcm5hbWV9fSwgdXNlcm5hbWUpKSk7XG4gICAgfTtcbi8qXG4gICAgLy8gaWYgdXNlcm5hbWUgaXMgbm90IGEgbG9nZ2VkIGluIG5hbWUgbG9naW4gZWxzZSBsb2dvdXQgYnV0dG9uXG4gICAgdmFyIG9sZFZOb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luJyk7XG4gICAgaWYgKG9sZFZOb2RlIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICBvbGRWTm9kZS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgcGF0Y2gob2xkVk5vZGUgYXMgSFRNTEVsZW1lbnQsIGgoJ2J1dHRvbicsIHsgb246IHsgY2xpY2s6ICgpID0+IGxvZ2luKGhvbWUpIH0sIHByb3BzOiB7dGl0bGU6ICdMb2dpbiB3aXRoIExpY2hlc3MnfSB9LCBbaCgnaScsIHtjbGFzczoge1wiaWNvblwiOiB0cnVlLCBcImljb24tc2lnbi1pblwiOiB0cnVlfSB9ICksIF0pKTtcbiAgICB9O1xuKi9cbn1cbiJdfQ==