From c14ed7db54181be4f086716e7325e52b4dfcff17 Mon Sep 17 00:00:00 2001 From: Brett Camper Date: Thu, 28 Apr 2016 14:04:59 -0400 Subject: [PATCH] v0.7.2 builds --- dist/tangram.debug.js | 184 +++++++++++++++++++++--------------------- dist/tangram.min.js | 10 +-- 2 files changed, 95 insertions(+), 99 deletions(-) diff --git a/dist/tangram.debug.js b/dist/tangram.debug.js index 07c217bb3..2ec6332f9 100644 --- a/dist/tangram.debug.js +++ b/dist/tangram.debug.js @@ -15112,96 +15112,95 @@ var _createClass = _dereq_("babel-runtime/helpers/create-class")["default"]; var _classCallCheck = _dereq_("babel-runtime/helpers/class-call-check")["default"]; Object.defineProperty(exports, "__esModule", { - value: true + value: true }); var RenderState = (function () { - function RenderState(value, setup) { - _classCallCheck(this, RenderState); - - setup(value); - this.value = value; - this.setup = setup; - } + function RenderState(value, setup) { + _classCallCheck(this, RenderState); - _createClass(RenderState, [{ - key: "set", - value: function set(value) { - // if the states are different, call the GL context for a state change - if (JSON.stringify(this.value) !== JSON.stringify(value)) { - this.setup(value); + setup(value); this.value = value; - } + this.setup = setup; } - }], [{ - key: "initialize", - value: function initialize(gl) { - RenderState.defaults = {}; - // Culling - RenderState.defaults.culling = true; - RenderState.defaults.culling_face = gl.BACK; - - // Blending - RenderState.defaults.blending = false; - RenderState.defaults.blending_src = gl.ONE_MINUS_SRC_ALPHA; - RenderState.defaults.blending_dst = gl.ONE_MINUS_SRC_ALPHA; - RenderState.defaults.blending_src_alpha = gl.ONE; - RenderState.defaults.blending_dst_alpha = gl.ONE_MINUS_SRC_ALPHA; - - // Depth test/write - RenderState.defaults.depth_write = true; - RenderState.defaults.depth_test = true; - RenderState.defaults.depth_func = gl.LESS; - - // Culling - RenderState.culling = new RenderState({ cull: RenderState.defaults.culling, face: RenderState.defaults.culling_face }, function (value) { - if (value.cull) { - gl.enable(gl.CULL_FACE); - gl.cullFace(value.face); - } else { - gl.disable(gl.CULL_FACE); - } - }); - // Blending mode - RenderState.blending = new RenderState({ - blend: RenderState.defaults.blending, - src: RenderState.defaults.blending_src, - dst: RenderState.defaults.blending_dst, - src_alpha: RenderState.defaults.blending_src_alpha, - dst_alpha: RenderState.defaults.blending_dst_alpha - }, function (value) { - if (value.blend) { - gl.enable(gl.BLEND); - - if (value.src_alpha && value.dst_alpha) { - gl.blendFuncSeparate(value.src, value.dst, value.src_alpha, value.dst_alpha); - } else { - gl.blendFunc(value.src, value.dst); - } - } else { - gl.disable(gl.BLEND); + _createClass(RenderState, [{ + key: "set", + value: function set(value) { + // if the states are different, call the GL context for a state change + if (JSON.stringify(this.value) !== JSON.stringify(value)) { + this.setup(value); + this.value = value; + } } - }); + }], [{ + key: "initialize", + value: function initialize(gl) { + RenderState.defaults = {}; + // Culling + RenderState.defaults.culling = true; + RenderState.defaults.culling_face = gl.BACK; + + // Blending + RenderState.defaults.blending = false; + RenderState.defaults.blending_src = gl.ONE_MINUS_SRC_ALPHA; + RenderState.defaults.blending_dst = gl.ONE_MINUS_SRC_ALPHA; + RenderState.defaults.blending_src_alpha = gl.ONE; + RenderState.defaults.blending_dst_alpha = gl.ONE_MINUS_SRC_ALPHA; + + // Depth test/write + RenderState.defaults.depth_write = true; + RenderState.defaults.depth_test = true; + gl.depthFunc(gl.LESS); // depth function only needs to be set once + + // Culling + RenderState.culling = new RenderState({ cull: RenderState.defaults.culling, face: RenderState.defaults.culling_face }, function (value) { + if (value.cull) { + gl.enable(gl.CULL_FACE); + gl.cullFace(value.face); + } else { + gl.disable(gl.CULL_FACE); + } + }); - // Depth write - RenderState.depth_write = new RenderState({ depth_write: RenderState.defaults.depth_write }, function (value) { - gl.depthMask(value.depth_write); - }); + // Blending mode + RenderState.blending = new RenderState({ + blend: RenderState.defaults.blending, + src: RenderState.defaults.blending_src, + dst: RenderState.defaults.blending_dst, + src_alpha: RenderState.defaults.blending_src_alpha, + dst_alpha: RenderState.defaults.blending_dst_alpha + }, function (value) { + if (value.blend) { + gl.enable(gl.BLEND); + + if (value.src_alpha && value.dst_alpha) { + gl.blendFuncSeparate(value.src, value.dst, value.src_alpha, value.dst_alpha); + } else { + gl.blendFunc(value.src, value.dst); + } + } else { + gl.disable(gl.BLEND); + } + }); - // Depth test - RenderState.depth_test = new RenderState({ depth_test: RenderState.defaults.depth_test, depth_func: RenderState.defaults.depth_func }, function (value) { - if (value.depth_test) { - gl.enable(gl.DEPTH_TEST); - gl.depthFunc(value.depth_func); - } else { - gl.disable(gl.DEPTH_TEST); + // Depth write + RenderState.depth_write = new RenderState({ depth_write: RenderState.defaults.depth_write }, function (value) { + gl.depthMask(value.depth_write); + }); + + // Depth test + RenderState.depth_test = new RenderState({ depth_test: RenderState.defaults.depth_test }, function (value) { + if (value.depth_test) { + gl.enable(gl.DEPTH_TEST); + } else { + gl.disable(gl.DEPTH_TEST); + } + }); } - }); - } - }]); + }]); - return RenderState; + return RenderState; })(); exports["default"] = RenderState; @@ -19051,10 +19050,10 @@ var _createClass = _dereq_('babel-runtime/helpers/create-class')['default']; var _classCallCheck = _dereq_('babel-runtime/helpers/class-call-check')['default']; -var _toConsumableArray = _dereq_('babel-runtime/helpers/to-consumable-array')['default']; - var _slicedToArray = _dereq_('babel-runtime/helpers/sliced-to-array')['default']; +var _toConsumableArray = _dereq_('babel-runtime/helpers/to-consumable-array')['default']; + var _Object$assign = _dereq_('babel-runtime/core-js/object/assign')['default']; var _Promise = _dereq_('babel-runtime/core-js/promise')['default']; @@ -19754,17 +19753,10 @@ var Scene = (function () { clear_color = clear_color === false ? false : true; // default true clear_depth = clear_depth === false ? false : true; // default true - // Reset frame state - var gl = this.gl; - - if (clear_color) { - gl.clearColor.apply(gl, _toConsumableArray(this.background.color)); - } - - if (clear_depth) { - gl.depthMask(true); // always clear depth if requested, even if depth write will be turned off - } + // Set GL state + _glRender_state2['default'].depth_write.set({ depth_write: clear_depth }); + var gl = this.gl; if (clear_color || clear_depth) { var mask = (clear_color && gl.COLOR_BUFFER_BIT) | (clear_depth && gl.DEPTH_BUFFER_BIT); gl.clear(mask); @@ -19794,7 +19786,7 @@ var Scene = (function () { // Reset frame state var gl = this.gl; - _glRender_state2['default'].depth_test.set({ depth_test: depth_test, depth_func: _glRender_state2['default'].defaults.depth_func }); + _glRender_state2['default'].depth_test.set({ depth_test: depth_test }); _glRender_state2['default'].depth_write.set({ depth_write: depth_write }); _glRender_state2['default'].culling.set({ cull: cull_face, face: _glRender_state2['default'].defaults.culling_face }); @@ -20294,6 +20286,8 @@ var Scene = (function () { }, { key: 'setBackground', value: function setBackground() { + var _gl; + var bg = this.config.scene.background; this.background = {}; if (bg && bg.color) { @@ -20311,6 +20305,8 @@ var Scene = (function () { } else { this.canvas.style.backgroundColor = 'transparent'; } + + (_gl = this.gl).clearColor.apply(_gl, _toConsumableArray(this.background.color)); } // Update scene config, and optionally rebuild geometry @@ -29334,7 +29330,7 @@ var version; exports["default"] = version = _Object$defineProperties({ major: 0, minor: 7, - patch: 1, + patch: 2, pre: false }, { string: { @@ -30508,6 +30504,6 @@ exports['default'] = View; module.exports = exports['default']; },{"./camera":200,"./geo":201,"./tile":244,"./utils/subscribe":251,"./utils/utils":252,"babel-runtime/helpers/class-call-check":18,"babel-runtime/helpers/create-class":19,"babel-runtime/helpers/interop-require-default":23,"babel-runtime/helpers/sliced-to-array":24,"loglevel":183}]},{},[222]) -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2FycmF5L2Zyb20uanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvbWF0aC9sb2cyLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9mcmVlemUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc2V0LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3MtY2FsbC1jaGVjay5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlLWNsYXNzLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2dldC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2ludGVyb3AtcmVxdWlyZS1kZWZhdWx0LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWQtdG8tYXJyYXkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvLWNvbnN1bWFibGUtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yL3J1bnRpbWUuanMiLCJub2RlX21vZHVsZXMvYmFzZTY0LWpzL2xpYi9iNjQuanMiLCJub2RlX21vZHVsZXMvYml0LXR3aWRkbGUvdHdpZGRsZS5qcyIsIm5vZGVfbW9kdWxlcy9ib3gtaW50ZXJzZWN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JveC1pbnRlcnNlY3QvbGliL2JydXRlLmpzIiwibm9kZV9tb2R1bGVzL2JveC1pbnRlcnNlY3QvbGliL2ludGVyc2VjdC5qcyIsIm5vZGVfbW9kdWxlcy9ib3gtaW50ZXJzZWN0L2xpYi9tZWRpYW4uanMiLCJub2RlX21vZHVsZXMvYm94LWludGVyc2VjdC9saWIvcGFydGl0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2JveC1pbnRlcnNlY3QvbGliL3NvcnQuanMiLCJub2RlX21vZHVsZXMvYm94LWludGVyc2VjdC9saWIvc3dlZXAuanMiLCJub2RlX21vZHVsZXMvYnJvd3Nlci1yZXNvbHZlL2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvZnJvbS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9pcy1pdGVyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vbWFwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9tYXRoL2xvZzIuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2ZyZWV6ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9zZXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuYS1mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmFkZC10by11bnNjb3BhYmxlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmFuLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmNsYXNzb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5jb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmNvbGxlY3Rpb24tdG8tanNvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmNvbGxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuY3R4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmRlc2NyaXB0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZG9tLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmVudW0ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmV4cG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZm9yLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZ2V0LW5hbWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZ2xvYmFsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaGFzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmh0bWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5pbnZva2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5pb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXMtYXJyYXktaXRlci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmlzLWFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXMtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXRlci1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXRlci1jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5pdGVyLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLml0ZXItZGV0ZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXRlci1zdGVwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXRlcmF0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5rZXlvZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmxpYnJhcnkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5taWNyb3Rhc2suanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5vYmplY3QtYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQub2JqZWN0LXNhcC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnByb3BlcnR5LWRlc2MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5yZWRlZmluZS1hbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5yZWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnNhbWUtdmFsdWUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5zZXQtcHJvdG8uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5zZXQtc3BlY2llcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnNldC10by1zdHJpbmctdGFnLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuc2hhcmVkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnN0cmljdC1uZXcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5zdHJpbmctYXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC50YXNrLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQudG8taW50ZWdlci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnRvLWlvYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC50by1sZW5ndGguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC50by1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC51aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC53a3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5tYXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zZXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5tYXAudG8tanNvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jc3Njb2xvcnBhcnNlci9jc3Njb2xvcnBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kdXAvZHVwLmpzIiwibm9kZV9tb2R1bGVzL2VhcmN1dC9zcmMvZWFyY3V0LmpzIiwibm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL2NsaXAuanMiLCJub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvY29udmVydC5qcyIsIm5vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9zaW1wbGlmeS5qcyIsIm5vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy90aWxlLmpzIiwibm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL3dyYXAuanMiLCJub2RlX21vZHVsZXMvZ2wtbWF0My9pbnZlcnQuanMiLCJub2RlX21vZHVsZXMvZ2wtbWF0My9ub3JtYWwtZnJvbS1tYXQ0LmpzIiwibm9kZV9tb2R1bGVzL2dsLW1hdDQvY29weS5qcyIsIm5vZGVfbW9kdWxlcy9nbC1tYXQ0L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL2dsLW1hdDQvbG9va0F0LmpzIiwibm9kZV9tb2R1bGVzL2dsLW1hdDQvbXVsdGlwbHkuanMiLCJub2RlX21vZHVsZXMvZ2wtbWF0NC9wZXJzcGVjdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9nbC1tYXQ0L3NjYWxlLmpzIiwibm9kZV9tb2R1bGVzL2dsLW1hdDQvdHJhbnNsYXRlLmpzIiwibm9kZV9tb2R1bGVzL2dsLXNoYWRlci1lcnJvcnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pcy1hcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9jb21tb24uanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9leGNlcHRpb24uanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9sb2FkZXIuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9tYXJrLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2NvcmUuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfc2FmZS5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZS5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9qc29uLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYmluYXJ5LmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9ib29sLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9mbG9hdC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvaW50LmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvcmVnZXhwLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy91bmRlZmluZWQuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWVyZ2UuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL251bGwuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL29tYXAuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3BhaXJzLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXEuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3NldC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc3RyLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS90aW1lc3RhbXAuanMiLCJub2RlX21vZHVsZXMvbG9nbGV2ZWwvbGliL2xvZ2xldmVsLmpzIiwibm9kZV9tb2R1bGVzL21hdGNoLWZlYXR1cmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGJmL2J1ZmZlci5qcyIsIm5vZGVfbW9kdWxlcy9wYmYvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcG9pbnQtZ2VvbWV0cnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3N0cmlwLWNvbW1lbnRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RvcG9qc29uL3RvcG9qc29uLmpzIiwibm9kZV9tb2R1bGVzL3R5cGVkYXJyYXktcG9vbC9wb29sLmpzIiwibm9kZV9tb2R1bGVzL3ZlY3Rvci10aWxlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3ZlY3Rvci10aWxlL2xpYi92ZWN0b3J0aWxlLmpzIiwibm9kZV9tb2R1bGVzL3ZlY3Rvci10aWxlL2xpYi92ZWN0b3J0aWxlZmVhdHVyZS5qcyIsIm5vZGVfbW9kdWxlcy92ZWN0b3ItdGlsZS9saWIvdmVjdG9ydGlsZWxheWVyLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9idWlsZGVycy9jb21tb24uanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2J1aWxkZXJzL3BvaW50cy5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvYnVpbGRlcnMvcG9seWdvbnMuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2J1aWxkZXJzL3BvbHlsaW5lcy5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvY2FtZXJhLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9nZW8uanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2dsL2NvbnN0YW50cy5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvZ2wvY29udGV4dC5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvZ2wvZXh0ZW5zaW9ucy5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvZ2wvZ2xzbC5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvZ2wvcmVuZGVyX3N0YXRlLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9nbC9zaGFkZXJfcHJvZ3JhbS5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvZ2wvc2hhZGVyX3NvdXJjZXMuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2dsL3RleHR1cmUuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2dsL3Zhby5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvZ2wvdmJvX21lc2guanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2dsL3ZlcnRleF9kYXRhLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9nbC92ZXJ0ZXhfbGF5b3V0LmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9sYWJlbHMvY29sbGlzaW9uLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9sYWJlbHMvbGFiZWwuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2xhYmVscy9sYWJlbF9saW5lLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9sYWJlbHMvbGFiZWxfcG9pbnQuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2xhYmVscy9yZXBlYXRfZ3JvdXAuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2xlYWZsZXRfbGF5ZXIuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2xpZ2h0LmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9tYXRlcmlhbC5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvbW9kdWxlLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9zY2VuZS5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc2NlbmVfbG9hZGVyLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9zY2VuZV93b3JrZXIuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3NlbGVjdGlvbi5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc291cmNlcy9kYXRhX3NvdXJjZS5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc291cmNlcy9nZW9qc29uLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9zb3VyY2VzL212dC5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc291cmNlcy9yYXN0ZXIuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3NvdXJjZXMvdG9wb2pzb24uanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3N0eWxlcy9saW5lcy9saW5lcy5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc3R5bGVzL3BvaW50cy9wb2ludF9hbmNob3IuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3N0eWxlcy9wb2ludHMvcG9pbnRzLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9zdHlsZXMvcG9seWdvbnMvcG9seWdvbnMuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3N0eWxlcy9yYXN0ZXIvcmFzdGVyLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9zdHlsZXMvcnVsZS5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc3R5bGVzL3N0eWxlLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9zdHlsZXMvc3R5bGVfbWFuYWdlci5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc3R5bGVzL3N0eWxlX3BhcnNlci5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc3R5bGVzL3RleHQvY2FudmFzX3RleHQuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3N0eWxlcy90ZXh0L3RleHQuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3N0eWxlcy90ZXh0L3RleHRfc2V0dGluZ3MuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3RpbGUuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3RpbGVfbWFuYWdlci5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvdGlsZV9weXJhbWlkLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy91dGlscy9lcnJvcnMuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3V0aWxzL2dsLW1hdHJpeC5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvdXRpbHMvbWVyZ2UuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3V0aWxzL29iYi5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvdXRpbHMvc3Vic2NyaWJlLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy91dGlscy91dGlscy5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvdXRpbHMvdmVyc2lvbi5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvdXRpbHMvd29ya2VyX2Jyb2tlci5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvdmVjdG9yLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy92aWV3LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2piQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWhDQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTs7QUNEQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBOztBQ0RBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBOztBQ0ZBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBOzs7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xPQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGpEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE5BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzttQkM1RGdCLFFBQVE7Ozs7QUFFakIsSUFBTSxXQUFXLEdBQUcsQ0FDdkIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsRUFDYixFQUFFLENBQUMsRUFBRSxpQkFBSSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsaUJBQUksVUFBVSxFQUFFO0NBQzVDLENBQUM7OztBQUVLLElBQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7OztBQUlqQyxTQUFTLFdBQVcsQ0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRTtBQUM1QyxRQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHOUIsUUFBSSxBQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxTQUFTLElBQ2xFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxTQUFTLEFBQUMsSUFDbkUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsQUFBQyxJQUNuRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsU0FBUyxBQUFDLEVBQUU7QUFDdEUsZUFBTyxJQUFJLENBQUM7S0FDZjs7QUFFRCxXQUFPLEtBQUssQ0FBQztDQUNoQjs7Ozs7Ozs7Ozs7OztzQkN4QjJCLFVBQVU7Ozs7OztBQUsvQixTQUFTLG1CQUFtQixDQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUNyRSxJQUE2RCxFQUM3RCxLQUF1RSxFQUFFO1FBRHZFLGNBQWMsR0FBaEIsSUFBNkQsQ0FBM0QsY0FBYztRQUFFLGNBQWMsR0FBaEMsSUFBNkQsQ0FBM0MsY0FBYztRQUFFLFdBQVcsR0FBN0MsSUFBNkQsQ0FBM0IsV0FBVztRQUFFLFlBQVksR0FBM0QsSUFBNkQsQ0FBZCxZQUFZO1FBQ3pELElBQUksR0FBTixLQUF1RSxDQUFyRSxJQUFJO1FBQUUsVUFBVSxHQUFsQixLQUF1RSxDQUEvRCxVQUFVO1FBQUUsTUFBTSxHQUExQixLQUF1RSxDQUFuRCxNQUFNO1FBQUUsS0FBSyxHQUFqQyxLQUF1RSxDQUEzQyxLQUFLO1FBQUUsY0FBYyxHQUFqRCxLQUF1RSxDQUFwQyxjQUFjO1FBQUUsa0JBQWtCLEdBQXJFLEtBQXVFLENBQXBCLGtCQUFrQjs7QUFDckUsUUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixRQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFFBQUksT0FBTyxHQUFHLENBQ1YsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUNWLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQ1QsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBRVIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUNWLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUNSLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQ1osQ0FBQzs7QUFFRixRQUFJLFNBQVMsWUFBQSxDQUFDO0FBQ2QsUUFBSSxjQUFjLEVBQUU7QUFDaEIsMEJBQWtCLEdBQUcsa0JBQWtCLElBQUksQ0FBQyxDQUFDOztvQkFFVixjQUFjLHVCQUFlOzs7O1lBQTNELEtBQUs7WUFBRSxLQUFLO1lBQUUsS0FBSztZQUFFLEtBQUs7O0FBQy9CLGlCQUFTLEdBQUcsQ0FDUixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFDZCxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFDZCxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFFZCxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFDZCxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFDZCxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FDakIsQ0FBQztLQUNMOztBQUVELFFBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDL0IsU0FBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQixZQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRXRCLGFBQUssSUFBSSxHQUFHLEdBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7O0FBRTVCLGdCQUFJLGNBQWMsRUFBRTtBQUNoQiwrQkFBZSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUM7QUFDN0UsK0JBQWUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO2FBQ2hGOztBQUVELDJCQUFlLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQywyQkFBZSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRS9DLDJCQUFlLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCwyQkFBZSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsMkJBQWUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3pDLDJCQUFlLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQzs7QUFFOUMsMkJBQWUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLDJCQUFlLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFOUMsdUJBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDMUM7S0FDSjtDQUNKOzs7Ozs7Ozs7Ozs7Ozs7OzttQkM3RGUsUUFBUTs7OztzQkFDTCxXQUFXOzs7O3NCQUNXLFVBQVU7O3NCQUVoQyxRQUFROzs7O0FBRTNCLElBQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7Ozs7QUFJbkIsU0FBUyxhQUFhLENBQ3pCLFFBQVEsRUFDUixXQUFXLEVBQUUsZUFBZSxFQUM1QixJQUFzRCxFQUFFO1FBQXRELGNBQWMsR0FBaEIsSUFBc0QsQ0FBcEQsY0FBYztRQUFFLGNBQWMsR0FBaEMsSUFBc0QsQ0FBcEMsY0FBYztRQUFFLGtCQUFrQixHQUFwRCxJQUFzRCxDQUFwQixrQkFBa0I7O0FBRXBELFFBQUksY0FBYyxFQUFFO0FBQ2hCLDBCQUFrQixHQUFHLGtCQUFrQixJQUFJLENBQUMsQ0FBQzs7b0JBQ1YsY0FBYyx1QkFBZTs7OztZQUEzRCxLQUFLO1lBQUUsS0FBSztZQUFFLEtBQUs7WUFBRSxLQUFLO0tBQ2xDOztBQUVELFFBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDbkMsU0FBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqQyxZQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7OztBQUcxQixZQUFJLGNBQWMsRUFBRTt1Q0FDbUIsaUJBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQzs7OztnQkFBMUQsS0FBSztnQkFBRSxLQUFLO2dCQUFFLEtBQUs7Z0JBQUUsS0FBSzs7QUFDL0IsZ0JBQUksTUFBTSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0IsZ0JBQUksTUFBTSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0IsZ0JBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQSxHQUFJLE1BQU0sQ0FBQztBQUN2QyxnQkFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBLEdBQUksTUFBTSxDQUFDO1NBQzFDOzs7QUFHRCxZQUFJLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7O0FBRzNDLFlBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDbkMsYUFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqQyxnQkFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLDJCQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHL0IsZ0JBQUksY0FBYyxFQUFFO0FBQ2hCLCtCQUFlLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFBLEdBQUksT0FBTyxHQUFHLEtBQUssQ0FBQSxHQUFJLGtCQUFrQixDQUFDO0FBQ25HLCtCQUFlLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFBLEdBQUksT0FBTyxHQUFHLEtBQUssQ0FBQSxHQUFJLGtCQUFrQixDQUFDO2FBQ3RHOztBQUVELHVCQUFXLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzFDO0tBQ0o7Q0FDSjs7OztBQUdNLFNBQVMscUJBQXFCLENBQ2pDLFFBQVEsRUFDUixDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFDckIsV0FBVyxFQUFFLGVBQWUsRUFDNUIsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixLQU9DLEVBQUU7UUFOQyxpQkFBaUIsR0FEckIsS0FPQyxDQU5HLGlCQUFpQjtRQUNqQixtQkFBbUIsR0FGdkIsS0FPQyxDQUxHLG1CQUFtQjtRQUNuQixjQUFjLEdBSGxCLEtBT0MsQ0FKRyxjQUFjO1FBQ2QsY0FBYyxHQUpsQixLQU9DLENBSEcsY0FBYztRQUNkLGtCQUFrQixHQUx0QixLQU9DLENBRkcsa0JBQWtCO1FBQ2xCLE9BQU8sR0FOWCxLQU9DLENBREcsT0FBTzs7O0FBSVgsUUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLFVBQVUsSUFBSSxDQUFDLENBQUEsQUFBQyxDQUFDO0FBQ2xDLFFBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkIsbUJBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDM0IsaUJBQWEsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxFQUFFLGNBQWMsRUFBZCxjQUFjLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxrQkFBa0IsRUFBbEIsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDOzs7O0FBSTlHLFFBQUksY0FBYyxFQUFFO0FBQ2hCLDBCQUFrQixHQUFHLGtCQUFrQixJQUFJLENBQUMsQ0FBQzs7b0JBQ1YsY0FBYyx1QkFBZTs7OztZQUEzRCxLQUFLO1lBQUUsS0FBSztZQUFFLEtBQUs7WUFBRSxLQUFLOztBQUMvQixZQUFJLFNBQVMsR0FBRyxDQUNaLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUNkLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUNkLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUVkLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUNkLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUNkLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUNqQixDQUFDO0tBQ0w7O0FBRUQsUUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUNuQyxTQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pDLFlBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFMUIsYUFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkMsZ0JBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFekIsaUJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxvQkFBSSxpQkFBaUIsSUFBSSx5QkFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFO0FBQ2pGLDZCQUFTO2lCQUNaOzs7QUFHRCxvQkFBSSxFQUFFLFlBQUE7b0JBQUUsRUFBRSxZQUFBLENBQUM7QUFDWCxvQkFBSSxPQUFPLEtBQUssS0FBSyxFQUFFO0FBQ25CLHNCQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1Asc0JBQUUsR0FBRyxDQUFDLEdBQUMsQ0FBQyxDQUFDO2lCQUNaLE1BQ0k7QUFDRCxzQkFBRSxHQUFHLENBQUMsR0FBQyxDQUFDLENBQUM7QUFDVCxzQkFBRSxHQUFHLENBQUMsQ0FBQztpQkFDVjs7O0FBR0Qsb0JBQUksYUFBYSxHQUFHOztBQUVoQixpQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQ3ZDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7O0FBRXZDLGlCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQ3ZDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFDdkMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUMxQyxDQUFDOzs7QUFHRixvQkFBSSxRQUFRLEdBQUcsb0JBQU8sU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkcsb0JBQUksTUFBTSxHQUFHLG9CQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7OztBQUc3QywrQkFBZSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7QUFDakUsK0JBQWUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0FBQ2pFLCtCQUFlLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQzs7QUFFakUscUJBQUssSUFBSSxFQUFFLEdBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzVDLG1DQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLG1DQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLG1DQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUUxQyx3QkFBSSxjQUFjLEVBQUU7QUFDaEIsdUNBQWUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO0FBQzVFLHVDQUFlLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztxQkFDL0U7O0FBRUQsK0JBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7aUJBQzFDO2FBQ0o7U0FDSjtLQUNKO0NBQ0o7Ozs7O0FBSU0sU0FBUyxrQkFBa0IsQ0FBRSxRQUFRLEVBQUU7QUFDMUMsV0FBTyx5QkFBTyxRQUFRLENBQUMsQ0FBQztDQUMzQjs7Ozs7Ozs7Ozs7Ozs7OztzQkM1SmtCLFdBQVc7Ozs7bUJBQ2QsUUFBUTs7OztzQkFDaUIsVUFBVTs7QUFFbkQsSUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7OztBQUd6QixJQUFNLGVBQWUsR0FBRztBQUNwQixRQUFJLEVBQUUsQ0FBQztBQUNQLFVBQU0sRUFBRSxDQUFDO0FBQ1QsU0FBSyxFQUFFLENBQUM7Q0FDWCxDQUFDOztBQUVGLElBQU0sa0JBQWtCLEdBQUc7QUFDdkIsU0FBSyxFQUFFLENBQUM7QUFDUixTQUFLLEVBQUUsQ0FBQztBQUNSLFNBQUssRUFBRSxDQUFDO0NBQ1gsQ0FBQzs7O0FBR0YsSUFBTSxjQUFjLEdBQUcsaUJBQUksVUFBVSxDQUFDOztBQUUvQixTQUFTLGNBQWMsQ0FDMUIsS0FBSyxFQUNMLEtBQUssRUFDTCxXQUFXLEVBQUUsZUFBZSxFQUM1QixJQVlDLEVBQUU7UUFYQyxjQUFjLEdBRGxCLElBWUMsQ0FYRyxjQUFjO1FBQ2QsaUJBQWlCLEdBRnJCLElBWUMsQ0FWRyxpQkFBaUI7UUFDakIsbUJBQW1CLEdBSHZCLElBWUMsQ0FURyxtQkFBbUI7UUFDbkIsY0FBYyxHQUpsQixJQVlDLENBUkcsY0FBYztRQUNkLGNBQWMsR0FMbEIsSUFZQyxDQVBHLGNBQWM7UUFDZCxrQkFBa0IsR0FOdEIsSUFZQyxDQU5HLGtCQUFrQjtRQUNsQixjQUFjLEdBUGxCLElBWUMsQ0FMRyxjQUFjO1FBQ2QsYUFBYSxHQVJqQixJQVlDLENBSkcsYUFBYTtRQUNiLGlCQUFpQixHQVRyQixJQVlDLENBSEcsaUJBQWlCO1FBQ2pCLElBQUksR0FWUixJQVlDLENBRkcsSUFBSTtRQUFFLEdBQUcsR0FWYixJQVlDLENBRlMsR0FBRztRQUNULFdBQVcsR0FYZixJQVlDLENBREcsV0FBVzs7QUFHZixRQUFJLFlBQVksR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdDLFFBQUksZUFBZSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O0FBR3BELFFBQUksZUFBZSxLQUFLLENBQUMsRUFBRTtBQUN2QixtQkFBVyxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFDL0IsWUFBSSxZQUFZLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQztLQUNoRDs7O0FBR0QsUUFBSSxjQUFjLEVBQUU7QUFDaEIsMEJBQWtCLEdBQUcsa0JBQWtCLElBQUksQ0FBQyxDQUFDO0FBQzdDLHNCQUFjLEdBQUcsY0FBYyxJQUFJLENBQUMsQ0FBQzs7b0JBQ0YsY0FBYyx1QkFBZTs7OztZQUEzRCxLQUFLO1lBQUUsS0FBSztZQUFFLEtBQUs7WUFBRSxLQUFLO0tBQ2xDOzs7QUFHRCxRQUFJLE9BQU8sR0FBRztBQUNWLG1CQUFXLEVBQVgsV0FBVztBQUNYLHVCQUFlLEVBQWYsZUFBZTtBQUNmLGtCQUFVLEVBQUUsS0FBSyxHQUFDLENBQUM7QUFDbkIsZ0JBQVEsRUFBRSxFQUFFO0FBQ1oscUJBQWEsRUFBYixhQUFhO0FBQ2IseUJBQWlCLEVBQWpCLGlCQUFpQjtBQUNqQixtQkFBVyxFQUFFLGFBQWEsSUFBSSxFQUFFO0FBQ2hDLHNCQUFjLEVBQWQsY0FBYztBQUNkLGlCQUFTLEVBQUUsY0FBYyxJQUFJLEVBQUU7QUFDL0IsMEJBQWtCLEVBQWxCLGtCQUFrQjtBQUNsQixhQUFLLEVBQUwsS0FBSyxFQUFFLEtBQUssRUFBTCxLQUFLLEVBQUUsS0FBSyxFQUFMLEtBQUssRUFBRSxLQUFLLEVBQUwsS0FBSztBQUMxQixlQUFPLEVBQUUsQ0FBQyxJQUFJLEFBQUMsS0FBSyxHQUFHLGNBQWMsR0FBSSxjQUFjLENBQUEsQUFBQztBQUN4RCxrQkFBVSxFQUFFLENBQUM7QUFDYixpQkFBUyxFQUFFLENBQUM7S0FDZixDQUFDOztBQUVGLFNBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFOztBQUV0QyxZQUFJLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2pELFlBQUksQ0FBQyxJQUFJLEVBQUU7QUFDUCxxQkFBUztTQUNaOztBQUVELFlBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7OztBQUczQixZQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7QUFDZCxxQkFBUztTQUNaOzs7QUFHRCxZQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBQ2xCLGlCQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztBQUNsQixpQkFBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztBQUV2QixZQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBQ2pCLGdCQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztBQUNqQixnQkFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztBQUV0QixZQUFJLE1BQU0sR0FBRyxLQUFLO1lBQ2QsTUFBTSxHQUFHLElBQUksQ0FBQzs7O0FBR2xCLGtCQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7OztBQUdwQixhQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFHLENBQUMsRUFBRSxFQUFFOzs7QUFHaEMsa0JBQU0sR0FBRyxDQUFDLEdBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQzs7QUFFeEIsZ0JBQUksTUFBTSxFQUFFOztBQUVSLHlCQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ3RCLHdCQUFRLEdBQUcsb0JBQU8sU0FBUyxDQUFDLG9CQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoRSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFjLEtBQUssSUFBSSxFQUFFOzs7QUFHM0Msb0JBQUksV0FBVyxHQUFHLElBQUksQ0FBQztBQUN2QixvQkFBSSxpQkFBaUIsRUFBRTtBQUNuQix3QkFBRyx5QkFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFO0FBQzVELG1DQUFXLEdBQUcsS0FBSyxDQUFDO3FCQUN2QjtpQkFDSjs7QUFFRCxvQkFBSSxXQUFXLEVBQUU7QUFDYiw2QkFBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsNEJBQVEsR0FBRyxvQkFBTyxTQUFTLENBQUMsb0JBQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELDBCQUFNLEdBQUcsSUFBSSxDQUFDO2lCQUNqQjthQUNKOzs7QUFHRCxxQkFBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFcEIsZ0JBQUksTUFBTSxFQUFFO0FBQ1IseUJBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pCLE1BQU0sSUFBSSxjQUFjLEtBQUssSUFBSSxFQUFFOztBQUVoQyx5QkFBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixzQkFBTSxHQUFHLElBQUksQ0FBQzthQUNqQjs7QUFFRCxnQkFBSSxNQUFNLEVBQUU7OztBQUdSLHdCQUFRLEdBQUcsb0JBQU8sU0FBUyxDQUFDLG9CQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMvRCxvQkFBSSxpQkFBaUIsRUFBRTtBQUNuQix3QkFBSSx5QkFBWSxTQUFTLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLEVBQUU7QUFDeEQsZ0NBQVEsR0FBRyxvQkFBTyxTQUFTLENBQUMsb0JBQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQy9ELDRCQUFJLE1BQU0sRUFBRTtBQUNSLHlDQUFhLENBQ1QsU0FBUyxFQUFFLFFBQVEsRUFDbkIsT0FBTyxDQUFDLFNBQVMsSUFBSSxvQkFBTyxNQUFNLENBQUMsb0JBQU8sR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUNwRSxPQUFPLENBQUMsQ0FBQztBQUNiLG1DQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7OztBQUdwQixzQ0FBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3lCQUN2QjtBQUNELDhCQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ2YsaUNBQVM7cUJBQ1o7aUJBQ0o7YUFDSjs7O0FBR0QsZ0JBQUksTUFBTSxFQUFFOztBQUVSLG9CQUFJLE1BQU0sRUFBRTs7QUFFUiw0QkFBUSxHQUFHLG9CQUFPLFNBQVMsQ0FBQyxvQkFBTyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDNUQsd0JBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxvQkFBTyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUEsQUFBQyxDQUFDO0FBQy9ELDRCQUFRLEdBQUcsb0JBQU8sSUFBSSxDQUFDLFFBQVEsRUFBQyxLQUFLLEdBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2hELE1BQU07O0FBRUgsNEJBQVEsR0FBRyxvQkFBTyxTQUFTLENBQUMsb0JBQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO2lCQUNsRTthQUNKLE1BQU07O0FBRUgsb0JBQUksTUFBTSxFQUFFOztBQUVSLDRCQUFRLEdBQUcsb0JBQU8sU0FBUyxDQUFDLG9CQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMvRCw0QkFBUSxHQUFHLFFBQVEsQ0FBQztpQkFDdkIsTUFBTTs7QUFFSCw2QkFBUztpQkFDWjthQUNKOztBQUVELGdCQUFJLE1BQU0sSUFBSSxNQUFNLEVBQUU7O0FBRWxCLG9CQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUU7QUFDdkMsMEJBQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7aUJBQzVEOzs7QUFHRCxvQkFBSSxlQUFlLEtBQUssQ0FBQyxJQUFJLG9CQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxZQUFZLEVBQUU7QUFDbkUsbUNBQWUsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDakQ7OztBQUdELG9CQUFJLGVBQWUsS0FBSyxDQUFDLElBQUksTUFBTSxJQUFJLE1BQU0sRUFBRTtBQUMzQywyQkFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsRUFDakMsQ0FBQyxRQUFRLEVBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUM3QixlQUFlLEVBQ2YsT0FBTyxDQUFDLENBQUM7aUJBQ3BCLE1BQU07QUFDSCxpQ0FBYSxDQUNULFNBQVMsRUFBRSxRQUFRLEVBQ25CLE9BQU8sQ0FBQyxTQUFTLElBQUksb0JBQU8sTUFBTSxDQUFDLG9CQUFPLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFDcEUsT0FBTyxDQUFDLENBQUM7aUJBQ2hCOztBQUVELG9CQUFJLE1BQU0sRUFBRTtBQUNULDJCQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQ3RCOztBQUVELHNCQUFNLEdBQUcsSUFBSSxDQUFDO2FBQ2pCO1NBQ0o7OztBQUdELGtCQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7OztBQUdwQixZQUFHLENBQUMsY0FBYyxFQUFFO0FBQ2hCLGtCQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzlEO0tBQ0o7Q0FDSjs7O0FBR0QsU0FBUyxVQUFVLENBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUMvQixRQUFJLENBQUMsWUFBQTtRQUFFLEtBQUssWUFBQSxDQUFDOzs7QUFHYixTQUFLLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hDLFlBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDNUQsaUJBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0FBQ3BCLGlCQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pCO0tBQ0o7OztBQUdELFFBQUksS0FBSyxFQUFFO0FBQ1AsWUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsYUFBSyxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUM7bUJBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQUEsQ0FBQyxDQUFDO0tBQ3pDOzs7QUFHRCxRQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN6RCxlQUFPO0tBQ1Y7QUFDRCxXQUFPLElBQUksQ0FBQztDQUNmOzs7QUFHRCxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFnRCxFQUFFO1FBQWhELFVBQVUsR0FBWixLQUFnRCxDQUE5QyxVQUFVO1FBQUUsUUFBUSxHQUF0QixLQUFnRCxDQUFsQyxRQUFRO1FBQUUsV0FBVyxHQUFuQyxLQUFnRCxDQUF4QixXQUFXO1FBQUUsU0FBUyxHQUE5QyxLQUFnRCxDQUFYLFNBQVM7O0FBQ2hGLFFBQUksV0FBVyxFQUFFOztBQUViLGdCQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JCLG1CQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzVCLE1BQU07O0FBRUgsZ0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0tBQ3REOzs7QUFHRCxRQUFJLFNBQVMsRUFBRTtBQUNYLGlCQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3RCO0NBQ0o7OztBQUdELFNBQVMsYUFBYSxDQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUNsRCxRQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7QUFDbkIsZUFBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUM3QyxpQkFBUyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2RSxpQkFBUyxDQUFDLEtBQUssRUFBRSxvQkFBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUN0RixNQUNJO0FBQ0QsaUJBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4QyxpQkFBUyxDQUFDLEtBQUssRUFBRSxvQkFBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3ZEO0NBQ0o7Ozs7Ozs7QUFPRCxTQUFTLE1BQU0sQ0FBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUU7O0FBRTNFLFFBQUksWUFBWSxHQUFHLENBQUMsRUFBRTtBQUNsQixlQUFPO0tBQ1Y7Ozs7QUFJRCxjQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7OztBQUdwQixRQUFJLFFBQVEsR0FBRyxvQkFBTyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUIsUUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7OztBQUdyQixRQUFJLFdBQVcsR0FBRyxvQkFBTyxZQUFZLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDOzs7QUFHOUMsUUFBSSxVQUFVLEdBQUcsV0FBVyxHQUFDLFlBQVksQ0FBQzs7OztBQUkxQyxRQUFJLENBQUMsTUFBTSxFQUFFO0FBQ1Qsa0JBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNwQjs7QUFFRCxRQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7QUFDbkIsWUFBSSxNQUFNLEdBQUcsb0JBQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLFlBQUksUUFBUSxHQUFHLG9CQUFPLEdBQUcsQ0FBQyxvQkFBTyxHQUFHLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQzlEOzs7O0FBSUQsYUFBUyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7QUFHbEMsYUFBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7QUFHeEMsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQyxnQkFBUSxHQUFHLG9CQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0QyxnQkFBUSxHQUFHLG9CQUFPLEdBQUcsQ0FBQyxvQkFBTyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUQsWUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO0FBQ25CLGtCQUFNLEdBQUcsb0JBQU8sR0FBRyxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsQ0FBQztTQUN4QztBQUNELGlCQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDL0M7OztBQUdELFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkMsWUFBSSxNQUFNLEVBQUU7QUFDUixvQkFBUSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkIsb0JBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckIsb0JBQVEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzFCLE1BQU07QUFDSCxvQkFBUSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkIsb0JBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckIsb0JBQVEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzFCO0tBQ0o7OztBQUdELFdBQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFFBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtBQUNyQixlQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztLQUM1QjtBQUNELFFBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtBQUNuQixlQUFPLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztLQUMxQjtDQUNKOzs7Ozs7O0FBT0QsU0FBUyxRQUFRLENBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7OztBQUcvRCxjQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7OztBQUdwQixhQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEMsYUFBUyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLGFBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFbEMsUUFBSSxNQUFNLEVBQUU7QUFDUixnQkFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQixnQkFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQixnQkFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUN4QixNQUFNO0FBQ0gsZ0JBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckIsZ0JBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckIsZ0JBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDeEI7OztBQUdELFdBQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFFBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtBQUNyQixlQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztLQUM1QjtBQUNELFFBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtBQUNuQixlQUFPLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztLQUMxQjtDQUNKOzs7Ozs7QUFPRCxTQUFTLFNBQVMsQ0FBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFOzs7O0FBSTVELGNBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7O0FBR3BCLFFBQUksUUFBUSxHQUFHLG9CQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5QixRQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixRQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7QUFDbkIsWUFBSSxNQUFNLEdBQUcsb0JBQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLFlBQUksUUFBUSxHQUFHLG9CQUFPLEdBQUcsQ0FBQyxvQkFBTyxHQUFHLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ25EOzs7QUFHRCxRQUFJLFVBQVUsR0FBRyxhQUFhLENBQUM7QUFDL0IsUUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNULGtCQUFVLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDcEI7Ozs7OztBQU1ELGFBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQzs7Ozs7QUFLekMsYUFBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7O0FBSXhDLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Ozs7Ozs7O0FBUXhCLGdCQUFRLEdBQUcsb0JBQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3RDLGdCQUFRLEdBQUcsb0JBQU8sR0FBRyxDQUFFLG9CQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQzs7QUFFL0QsWUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7O0FBRXBCLGdCQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsb0JBQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBLEFBQUMsQ0FBQztBQUMvRCxvQkFBUSxHQUFHLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxHQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2pEOztBQUVELFlBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtBQUNuQixrQkFBTSxHQUFHLG9CQUFPLEdBQUcsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEM7O0FBRUQsWUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFOztBQUVULHFCQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDL0M7S0FDSjs7QUFFRCxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hCLFlBQUksTUFBTSxFQUFFO0FBQ1Isb0JBQVEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZCLG9CQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCLG9CQUFRLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUMxQixNQUFNO0FBQ0gsb0JBQVEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZCLG9CQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCLG9CQUFRLENBQUMsQ0FBQyxHQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUMxQjtLQUNKOzs7QUFHRCxXQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7QUFDckIsZUFBTyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7S0FDNUI7QUFDRCxRQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7QUFDbkIsZUFBTyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7S0FDMUI7Q0FDSjs7OztBQUlELFNBQVMsT0FBTyxDQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRTtBQUNwRCxRQUFJLE1BQU0sR0FBRyxvQkFBTyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckUsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQzs7QUFDZixNQUFFLEdBQUcsb0JBQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFDM0IsTUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixRQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDOztBQUVmLFFBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtBQUNuQixlQUFPLENBQUMsVUFBVSxJQUFJLG9CQUFPLE1BQU0sQ0FBQyxvQkFBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUN4RixVQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6QyxVQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6QyxVQUFFLEdBQUcsRUFBRSxDQUFDO0tBQ1g7O0FBRUQsUUFBSSxNQUFNLEVBQUU7QUFDUixpQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLGlCQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDekMsTUFBTTtBQUNILFVBQUUsR0FBRyxvQkFBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsVUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixVQUFFLEdBQUcsb0JBQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUU1QixZQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7QUFDbkIsY0FBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDekMsY0FBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDekMsY0FBRSxHQUFHLEVBQUUsQ0FBQztTQUNYO0FBQ0QsaUJBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0QyxpQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3pDOztBQUVELFFBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtBQUNsQixnQkFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDaEUsTUFBTSxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUM7QUFDdEIsY0FBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzFFOztBQUVELFFBQUksTUFBTSxFQUFFO0FBQ1IsaUJBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0QyxpQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3pDLE1BQU07QUFDSCxpQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLGlCQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDekM7Q0FDSjs7OztBQUlELFNBQVMsTUFBTSxDQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUU7O0FBRTlELFFBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtBQUNoQixlQUFPO0tBQ1Y7OztBQUdELFFBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDbEIsUUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO0FBQ25CLFdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUEsR0FBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFFLFdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFDLFdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQzdDOztBQUVELFFBQUssVUFBVSxLQUFLLENBQUMsRUFBRTs7QUFFbkIsaUJBQVMsQ0FBRSxLQUFLLEVBQ0wsb0JBQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFDMUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2IsV0FBVyxFQUNYLE9BQU8sQ0FBQyxDQUFDO0tBQ3ZCLE1BQU07O0FBRUgsY0FBTSxDQUFFLEtBQUssRUFDTCxvQkFBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFDckMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2IsV0FBVyxFQUFFLFVBQVUsR0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDL0M7Q0FDSjs7O0FBR0QsU0FBUyxRQUFRLENBQUUsS0FBSyxFQUFFLEtBQW9KLEVBQUU7UUFBcEosV0FBVyxHQUFiLEtBQW9KLENBQWxKLFdBQVc7UUFBRSxlQUFlLEdBQTlCLEtBQW9KLENBQXJJLGVBQWU7UUFBRSxVQUFVLEdBQTFDLEtBQW9KLENBQXBILFVBQVU7UUFBRSxRQUFRLEdBQXBELEtBQW9KLENBQXhHLFFBQVE7UUFBRSxhQUFhLEdBQW5FLEtBQW9KLENBQTlGLGFBQWE7UUFBRSxpQkFBaUIsR0FBdEYsS0FBb0osQ0FBL0UsaUJBQWlCO1FBQUUsV0FBVyxHQUFuRyxLQUFvSixDQUE1RCxXQUFXO1FBQUUsY0FBYyxHQUFuSCxLQUFvSixDQUEvQyxjQUFjO1FBQUUsU0FBUyxHQUE5SCxLQUFvSixDQUEvQixTQUFTO1FBQUUsa0JBQWtCLEdBQWxKLEtBQW9KLENBQXBCLGtCQUFrQjs7O0FBRXhLLFFBQUksS0FBSyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsZUFBTztLQUNWOzs7QUFHRCxtQkFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxtQkFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0FBR3hDLFFBQUksY0FBYyxFQUFFO0FBQ2hCLHVCQUFlLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztBQUMvRSx1QkFBZSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUM7S0FDbEY7OztBQUdELFFBQUksYUFBYSxFQUFFO0FBQ2YsdUJBQWUsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0FBQy9FLHVCQUFlLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUMvRSx1QkFBZSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7S0FDbkQ7OztBQUdELGVBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7Q0FDMUM7OztBQUdELFNBQVMsVUFBVSxDQUFFLE9BQU8sRUFBRTs7QUFFMUIsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsZ0JBQVEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6QixnQkFBUSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pCLGdCQUFRLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRXpCLGdCQUFRLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekIsZ0JBQVEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6QixnQkFBUSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzVCOztBQUVELFdBQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDOzs7QUFHdEIsV0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDdEIsUUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO0FBQ3JCLGVBQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0tBQzVCO0FBQ0QsUUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO0FBQ25CLGVBQU8sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0tBQzFCO0NBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJDem1CaUIsZUFBZTs7OztnQ0FDUCxxQkFBcUI7Ozs7NkJBQ2hCLG1CQUFtQjs7OztJQUc3QixNQUFNO0FBRVosYUFGTSxNQUFNLENBRVgsSUFBSSxFQUFFLElBQUksRUFBZ0I7WUFBZCxPQUFPLHlEQUFHLEVBQUU7OzhCQUZuQixNQUFNOztBQUduQixZQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixZQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDakMsWUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0tBQzVCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQkFOZ0IsTUFBTTs7OztlQXVCakIsa0JBQUcsRUFDUjs7Ozs7ZUFHVyxzQkFBQyxPQUFPLEVBQUUsRUFDckI7Ozs7O2VBR1Usc0JBQUc7QUFDVixnQkFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDNUIsb0JBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNkLG9CQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDZix3QkFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDbkY7QUFDRCxvQkFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ1gsd0JBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztpQkFDekI7QUFDRCxvQkFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0I7U0FDSjs7Ozs7ZUFHYSx1QkFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFOztBQUU5QixnQ0FBSyxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2RSxtQkFBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7OztBQUcxRSxnQ0FBSyxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDOUQsZ0NBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUQsbUJBQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekUsbUJBQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMzRjs7O2VBOUNZLGdCQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQzlCLG9CQUFRLE1BQU0sQ0FBQyxJQUFJO0FBQ2YscUJBQUssV0FBVztBQUNaLDJCQUFPLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFBQSxBQUNuRCxxQkFBSyxNQUFNO0FBQ1AsMkJBQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUFBLEFBQzlDLHFCQUFLLGFBQWEsQ0FBQzs7QUFFbkI7QUFDSSwyQkFBTyxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFBQSxhQUN4RDtTQUNKOzs7V0FwQmdCLE1BQU07OztxQkFBTixNQUFNOztJQTBFckIsaUJBQWlCO2NBQWpCLGlCQUFpQjs7QUFFUixhQUZULGlCQUFpQixDQUVQLElBQUksRUFBRSxJQUFJLEVBQWdCO1lBQWQsT0FBTyx5REFBRyxFQUFFOzs4QkFGbEMsaUJBQWlCOztBQUdmLG1DQUhGLGlCQUFpQiw2Q0FHVCxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUMzQixZQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQzs7O0FBRzFCLFlBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztBQUN6QyxZQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDdkIsWUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFOztBQUVqQyxnQkFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkU7O0FBRUQsWUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pELFlBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUQsWUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQzs7QUFFL0IsWUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDNUIsWUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7OztBQUc5QyxzQ0FBYyxZQUFZLENBQUMsUUFBUSw0UEFRbEMsQ0FBQztLQUNMOzs7Ozs7Ozs7Ozs7aUJBaENDLGlCQUFpQjs7ZUFxQ0oseUJBQUMsSUFBMEMsRUFBRTtnQkFBMUMsV0FBVyxHQUFiLElBQTBDLENBQXhDLFdBQVc7Z0JBQUUsTUFBTSxHQUFyQixJQUEwQyxDQUEzQixNQUFNO2dCQUFFLFlBQVksR0FBbkMsSUFBMEMsQ0FBbkIsWUFBWTtnQkFBRSxHQUFHLEdBQXhDLElBQTBDLENBQUwsR0FBRzs7O0FBRXBELGdCQUFJLENBQUMsTUFBTSxFQUFFOztBQUVULG9CQUFJLFlBQVksRUFBRTtBQUNkLHVCQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN6Qzs7cUJBRUksSUFBSSxHQUFHLEVBQUU7QUFDViwyQkFBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUMxQixvQ0FBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDeEM7Ozs7QUFJRCxzQkFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDO2FBQzNDOztpQkFFSTtBQUNELGdDQUFZLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFDeEMsdUJBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3pDOztBQUVELG1CQUFPLEVBQUUsV0FBVyxFQUFYLFdBQVcsRUFBRSxNQUFNLEVBQU4sTUFBTSxFQUFFLFlBQVksRUFBWixZQUFZLEVBQUUsR0FBRyxFQUFILEdBQUcsRUFBRSxDQUFDO1NBQ3JEOzs7ZUFFYSwwQkFBRzs7OztBQUliLGdCQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Ozs7bUNBR3ZELElBQUksQ0FBQyxlQUFlLENBQUM7QUFDdkMsMkJBQVcsRUFBRSxlQUFlO0FBQzVCLDRCQUFZLEVBQUUsd0JBQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDbEUsbUJBQUcsRUFBRSx3QkFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNsRCxDQUFDOztnQkFKRyxNQUFNLG9CQUFOLE1BQU07Z0JBQUUsR0FBRyxvQkFBSCxHQUFHOzs7QUFPakIsZ0JBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlFLGdCQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQzs7Ozs7OztBQU9oQyxnQ0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFDeEIsb0JBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQzVDLG9CQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzdDLG9CQUFLLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7OztBQUc5QixnQ0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOzs7QUFHL0UsZ0JBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDbEYsZ0JBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7OztBQUduRixnQkFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELGdCQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0FBSzFELGdDQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUN6RCxvQkFBSyxVQUFVLENBQ1gsZUFBZSxHQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFDcEUsZUFBZSxHQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFDakQsQ0FBQyxDQUNKLENBQ0osQ0FBQzs7O0FBR0YsZ0NBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsb0JBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ2xHOzs7ZUFFSyxrQkFBRztBQUNMLHVDQXJIRixpQkFBaUIsd0NBcUhBO0FBQ2YsZ0JBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN6Qjs7O2VBRVcsc0JBQUMsT0FBTyxFQUFFO0FBQ2xCLG1CQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzVFLG1CQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsbUJBQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQzFFOzs7V0E3SEMsaUJBQWlCO0dBQVMsTUFBTTs7SUFzSWhDLGVBQWU7Y0FBZixlQUFlOztBQUVOLGFBRlQsZUFBZSxDQUVMLElBQUksRUFBRSxJQUFJLEVBQWdCO1lBQWQsT0FBTyx5REFBRyxFQUFFOzs4QkFGbEMsZUFBZTs7QUFHYixtQ0FIRixlQUFlLDZDQUdQLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQzNCLFlBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFlBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNDLFlBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3hCLGdCQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNwRDs7QUFFRCxZQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUM1QixZQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzs7QUFFNUIsWUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7OztBQUc5QyxzQ0FBYyxZQUFZLENBQUMsUUFBUSwwbkJBY2xDLENBQUM7S0FDTDs7OztpQkFoQ0MsZUFBZTs7ZUFrQ1gsa0JBQUc7QUFDTCx1Q0FuQ0YsZUFBZSx3Q0FtQ0U7O0FBRWYsZ0JBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQzlFLGdCQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDNUYsZ0JBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDOzs7QUFHaEMsZ0NBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNoQyxnQ0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLG9CQUFLLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHbkcsZ0NBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDOzs7QUFHdEMsZ0JBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMzRCxnQkFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzs7QUFHeEMsZ0NBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQ3JELG9CQUFLLFVBQVUsQ0FDWCxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDM0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQzNCLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUM5QixDQUNKLENBQUM7U0FDTDs7O2VBRVcsc0JBQUMsT0FBTyxFQUFFO0FBQ2xCLG1CQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDOztBQUU1RSxtQkFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDOztBQUUzRCxtQkFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BEOzs7V0FwRUMsZUFBZTtHQUFTLE1BQU07O0lBeUU5QixVQUFVO2NBQVYsVUFBVTs7QUFFRCxhQUZULFVBQVUsQ0FFQSxJQUFJLEVBQUUsSUFBSSxFQUFnQjtZQUFkLE9BQU8seURBQUcsRUFBRTs7OEJBRmxDLFVBQVU7O0FBR1IsbUNBSEYsVUFBVSw2Q0FHRixJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUMzQixZQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztLQUN0Qjs7aUJBTEMsVUFBVTs7ZUFPTixrQkFBRzs7QUFFTCxnQkFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLGdCQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRWhCLHVDQVpGLFVBQVUsd0NBWU87U0FDbEI7OztXQWJDLFVBQVU7R0FBUyxlQUFlOzs7Ozs7Ozs7Ozs7Ozs7O0FDNVJ4QyxJQUFJLEdBQUcsQ0FBQztxQkFDTyxHQUFHLEdBQUcsRUFBRTs7O0FBR3ZCLEdBQUcsQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUFDakMsR0FBRyxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztBQUMvQixHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUNwQixHQUFHLENBQUMseUJBQXlCLEdBQUcsa0JBQWtCLENBQUM7QUFDbkQsR0FBRyxDQUFDLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFDN0QsR0FBRyxDQUFDLHlCQUF5QixHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDOztBQUV6RSxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUMxQixHQUFHLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzlCLG9CQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RixXQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlCLENBQUM7O0FBRUYsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLEdBQUcsQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDN0IsbUJBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLFdBQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdCLENBQUM7OztBQUdGLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEdBQUcsQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDOztBQUVyRCxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDekIsR0FBRyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM3QixtQkFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxBQUFDLENBQUM7QUFDcEcsV0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0IsQ0FBQzs7O0FBR0YsR0FBRyxDQUFDLGFBQWEsR0FBRyxVQUFVLElBQUksRUFBRTtBQUNoQyxXQUFPO0FBQ0gsU0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMseUJBQXlCO0FBQzFGLFNBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMseUJBQXlCLENBQUEsQUFBQztLQUNoRyxDQUFDO0NBQ0wsQ0FBQzs7Ozs7QUFLRixHQUFHLENBQUMsYUFBYSxHQUFHLFVBQVUsSUFBTSxFQUFFLElBQUksRUFBRTsrQkFBZCxJQUFNOztRQUFMLENBQUM7UUFBRSxDQUFDOztBQUMvQixXQUFPO0FBQ0gsU0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLHlCQUF5QixDQUFBLElBQUssR0FBRyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLEFBQUMsQ0FBQztBQUNuRyxTQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQSxJQUFLLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQSxBQUFDLENBQUM7QUFDcEcsU0FBQyxFQUFFLElBQUk7S0FDVixDQUFDO0NBQ0wsQ0FBQzs7OztBQUlGLEdBQUcsQ0FBQyxRQUFRLEdBQUcsVUFBUyxLQUFXLEVBQWdDO1FBQXpDLENBQUMsR0FBSCxLQUFXLENBQVQsQ0FBQztRQUFFLENBQUMsR0FBTixLQUFXLENBQU4sQ0FBQztRQUFFLENBQUMsR0FBVCxLQUFXLENBQUgsQ0FBQztRQUFJLElBQUkseURBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7O0FBQzdELFFBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQSxHQUFJLENBQUMsQ0FBQztBQUNyQixRQUFJLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDUixTQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNiO0FBQ0QsUUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ1IsU0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDYjtBQUNELFdBQU8sRUFBRSxDQUFDLEVBQUQsQ0FBQyxFQUFFLENBQUMsRUFBRCxDQUFDLEVBQUUsQ0FBQyxFQUFELENBQUMsRUFBRSxDQUFDO0NBQ3RCLENBQUM7Ozs7O0FBS0YsR0FBRyxDQUFDLGNBQWMsR0FBRyxVQUFVLEtBQU0sRUFBRTtnQ0FBUixLQUFNOztRQUFMLENBQUM7UUFBRSxDQUFDOztBQUVoQyxLQUFDLElBQUksR0FBRyxDQUFDLHlCQUF5QixDQUFDO0FBQ25DLEtBQUMsSUFBSSxHQUFHLENBQUMseUJBQXlCLENBQUM7O0FBRW5DLEtBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQzs7QUFFckUsS0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNULEtBQUMsSUFBSSxHQUFHLENBQUM7O0FBRVQsV0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqQixDQUFDOzs7OztBQUtGLEdBQUcsQ0FBQyxjQUFjLEdBQUcsVUFBUyxLQUFNLEVBQUU7Z0NBQVIsS0FBTTs7UUFBTCxDQUFDO1FBQUUsQ0FBQzs7O0FBRy9CLEtBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxFQUFFLEdBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVELEtBQUMsSUFBSSxHQUFHLENBQUMseUJBQXlCLENBQUM7OztBQUduQyxLQUFDLElBQUksR0FBRyxDQUFDLHlCQUF5QixHQUFHLEdBQUcsQ0FBQzs7QUFFekMsV0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqQixDQUFDOztBQUVGLEdBQUcsQ0FBQyxPQUFPLEdBQUcsVUFBUyxDQUFDLEVBQUU7QUFDdEIsUUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUNyQixTQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUEsR0FBSSxHQUFHLEdBQUcsR0FBRyxDQUFBLEdBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztLQUMzQztBQUNELFdBQU8sQ0FBQyxDQUFDO0NBQ1osQ0FBQzs7O0FBR0YsR0FBRyxDQUFDLGlCQUFpQixHQUFHLFVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBRTtBQUNuRCxRQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7QUFDbEIsZUFBTztLQUNWOztBQUVELFFBQUksUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDM0IsaUJBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDbkMsTUFDSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO0FBQ3ZFLGdCQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMzQyxNQUNJLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRTtBQUN6RSxnQkFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQSxXQUFXO21CQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQUEsQ0FBQyxDQUFDO0tBQy9FLE1BQ0ksSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRTtBQUN2QyxnQkFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQSxPQUFPLEVBQUk7QUFDcEMsbUJBQU8sQ0FBQyxPQUFPLENBQUMsVUFBQSxXQUFXO3VCQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO2FBQUEsQ0FBQyxDQUFDO1NBQ2xFLENBQUMsQ0FBQztLQUNOOztDQUVKLENBQUM7O0FBRUYsR0FBRyxDQUFDLFlBQVksR0FBRyxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakMsV0FBTyxFQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUNqQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFDakIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQ2pCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBLEFBQ3BCLENBQUM7Q0FDTCxDQUFDOzs7QUFHRixHQUFHLENBQUMsZUFBZSxHQUFHLFVBQVUsT0FBTyxFQUFFO0FBQ3JDLFFBQUksS0FBSyxHQUFHLFFBQVE7UUFDaEIsS0FBSyxHQUFHLENBQUMsUUFBUTtRQUNqQixLQUFLLEdBQUcsUUFBUTtRQUNoQixLQUFLLEdBQUcsQ0FBQyxRQUFRLENBQUM7OztBQUd0QixRQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ25DLFNBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsWUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUUxQixZQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7QUFDbEIsaUJBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7QUFDRCxZQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7QUFDbEIsaUJBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7QUFDRCxZQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7QUFDbEIsaUJBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7QUFDRCxZQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7QUFDbEIsaUJBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7S0FDSjs7QUFFRCxXQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Q0FDdkMsQ0FBQzs7O0FBR0YsR0FBRyxDQUFDLFlBQVksR0FBRyxVQUFTLElBQUksRUFBRTtBQUM5QixRQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLGNBQWMsRUFBRTtBQUMvQyxlQUFPLFNBQVMsQ0FBQztLQUNwQixNQUNJLElBQUksSUFBSSxLQUFLLFlBQVksSUFBSSxJQUFJLEtBQUssaUJBQWlCLEVBQUU7QUFDMUQsZUFBTyxNQUFNLENBQUM7S0FDakI7QUFDRCxRQUFJLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxLQUFLLFlBQVksRUFBRTtBQUMzQyxlQUFPLE9BQU8sQ0FBQztLQUNsQjtDQUNKLENBQUM7O0FBRUYsR0FBRyxDQUFDLFFBQVEsR0FBRyxVQUFVLE9BQU8sRUFBRTtBQUM5QixRQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3ZCLFFBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztBQUV0QixTQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQyxnQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixnQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoQzs7QUFFRCxZQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pCLFlBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWpCLFdBQU8sUUFBUSxDQUFDO0NBQ25CLENBQUM7O0FBRUYsR0FBRyxDQUFDLGFBQWEsR0FBRyxVQUFVLFFBQVEsRUFBRTtBQUNwQyxRQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ3hCLFFBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztBQUV0QixTQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwQyxZQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsWUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5QixnQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixnQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN2Qjs7QUFFRCxZQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pCLFlBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWpCLFdBQU8sUUFBUSxDQUFDO0NBQ25CLENBQUM7O0FBRUYsR0FBRyxDQUFDLG9CQUFvQixHQUFHLFVBQVUsT0FBTyxFQUFFO0FBQzFDLFFBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7O0FBRXZCLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFlBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixZQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDOztBQUV0QixZQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pDOztBQUVELFFBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxXQUFPLElBQUksQ0FBQztDQUNmLENBQUM7OztBQUdGLEdBQUcsQ0FBQyxXQUFXLEdBQUcsVUFBVSxPQUFPLEVBQUU7QUFDakMsV0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMxRCxDQUFDOztBQUVGLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLFFBQVEsRUFBRTtBQUN2QyxRQUFJLElBQUksR0FBRyxDQUFDLENBQUM7O0FBRWIsU0FBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEMsWUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3BDOztBQUVELFdBQU8sSUFBSSxDQUFDO0NBQ2YsQ0FBQzs7QUFFRixHQUFHLENBQUMsV0FBVyxHQUFHLFVBQVUsSUFBSSxFQUFFO0FBQzlCLFFBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQyxRQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDVixlQUFPLElBQUksQ0FBQztLQUNmLE1BQ0ksSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQ2YsZUFBTyxLQUFLLENBQUM7S0FDaEI7O0NBRUosQ0FBQzs7OztBQUlGLEdBQUcsQ0FBQyxjQUFjLEdBQUcsVUFBVSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQzFDLFFBQUksS0FBSyxZQUFBLENBQUM7QUFDVixRQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQ3pCLGFBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUM5QixNQUNJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7QUFDbkMsYUFBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7S0FDNUIsTUFDSTtBQUNELGVBQU8sSUFBSSxDQUFDO0tBQ2Y7O0FBRUQsU0FBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsWUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7O0FBSXBCLFlBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUU7Ozs7OztBQUN0QyxrREFBaUIsSUFBSSw0R0FBRTt3QkFBZCxJQUFJOztBQUNULHdCQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ2xCOzs7Ozs7Ozs7Ozs7Ozs7U0FDSjtLQUNKO0FBQ0QsV0FBTyxJQUFJLENBQUM7Q0FDZixDQUFDOzs7Ozs7Ozs7OztBQ3JSRixJQUFJLEVBQUUsQ0FBQztxQkFDUSxFQUFFLEdBQUcsRUFBRTs7O0FBR3RCLEVBQUUsQ0FBQyxJQUFJLEdBQTZCLE1BQU0sQ0FBQztBQUMzQyxFQUFFLENBQUMsYUFBYSxHQUFvQixNQUFNLENBQUM7QUFDM0MsRUFBRSxDQUFDLEtBQUssR0FBNEIsTUFBTSxDQUFDO0FBQzNDLEVBQUUsQ0FBQyxjQUFjLEdBQW1CLE1BQU0sQ0FBQztBQUMzQyxFQUFFLENBQUMsR0FBRyxHQUE4QixNQUFNLENBQUM7QUFDM0MsRUFBRSxDQUFDLFlBQVksR0FBcUIsTUFBTSxDQUFDO0FBQzNDLEVBQUUsQ0FBQyxLQUFLLEdBQTRCLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUNWM0MsSUFBSSxPQUFPLENBQUM7cUJBQ0csT0FBTyxHQUFHLEVBQUU7Ozs7QUFJM0IsT0FBTyxDQUFDLFVBQVUsR0FBRyxTQUFTLFVBQVUsQ0FBRSxNQUFNLEVBQUUsT0FBTyxFQUN6RDtBQUNJLFFBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN2QixRQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDaEIsY0FBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUMsY0FBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQ25DLGNBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQixjQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdEIsY0FBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekIsZ0JBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLGtCQUFVLEdBQUcsSUFBSSxDQUFDO0tBQ3JCOztBQUVELFFBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakcsUUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNMLGNBQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztLQUNyRDs7QUFFRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2IsZUFBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FDbkgsTUFDSTtBQUNELGVBQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN0RixjQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVk7QUFDMUMsbUJBQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUN6RixDQUFDLENBQUM7S0FDTjs7QUFFRCxXQUFPLEVBQUUsQ0FBQztDQUNiLENBQUM7O0FBRUYsT0FBTyxDQUFDLE1BQU0sR0FBRyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUNoRTtBQUNJLHNCQUFrQixHQUFHLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUM7QUFDeEUsTUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdkMsTUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztBQUN6RCxNQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzNELE1BQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxNQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUN4RCxDQUFDOzs7Ozs7Ozs7Ozs7OztxQkMxQ3NCLFlBQVk7QUFGcEMsSUFBSSxVQUFVLEdBQUcsVUFBUyxDQUFDOztBQUVaLFNBQVMsWUFBWSxDQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDNUMsUUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5QixRQUFJLENBQUMsSUFBSSxFQUFFO0FBQ1Asa0JBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVMsQ0FBQyxDQUFDO0FBQzlCLFlBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzdCOztBQUVELFFBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pCLFlBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUN6QztBQUNELFdBQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN6Qjs7Ozs7Ozs7Ozs7O0FDaEJELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztxQkFDQyxJQUFJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQm5CLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxRQUFRLEVBQWlCO1FBQWYsTUFBTSx5REFBRyxJQUFJOztBQUNsRCxRQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7O0FBRWhCLFNBQUssSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFO0FBQ3ZCLFlBQUksR0FBRyxHQUFHLElBQUksQ0FBQztBQUNmLFlBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixZQUFJLENBQUMsQ0FBQzs7QUFFTixZQUFJLE1BQU0sRUFBRTtBQUNSLGdCQUFJLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7U0FDOUI7OztBQUdELFlBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzdCLGtCQUFNLENBQUMsSUFBSSxDQUFDO0FBQ1Isb0JBQUksRUFBRSxPQUFPO0FBQ2Isc0JBQU0sRUFBRSxJQUFJO0FBQ1osb0JBQUksRUFBSixJQUFJO0FBQ0oscUJBQUssRUFBRSxPQUFPO0FBQ2QsbUJBQUcsRUFBSCxHQUFHO0FBQ0gsd0JBQVEsRUFBUixRQUFRO2FBQ1gsQ0FBQyxDQUFDO1NBQ047O2FBRUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFOztBQUU3QixvQkFBSSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7O0FBRWhDLHdCQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQzVDLDhCQUFNLENBQUMsSUFBSSxDQUFDO0FBQ1IsZ0NBQUksRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU07QUFDNUIsa0NBQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUk7QUFDN0IsZ0NBQUksRUFBSixJQUFJO0FBQ0osaUNBQUssRUFBRSxPQUFPO0FBQ2QsK0JBQUcsRUFBSCxHQUFHO0FBQ0gsb0NBQVEsRUFBUixRQUFRO3lCQUNYLENBQUMsQ0FBQztxQkFDTjs7eUJBRUksSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN6QixrQ0FBTSxDQUFDLElBQUksQ0FBQztBQUNSLG9DQUFJLEVBQUUsU0FBUztBQUNmLHNDQUFNLEVBQUUsS0FBSztBQUNiLG9DQUFJLEVBQUUsSUFBSSxHQUFHLEtBQUs7QUFDbEIscUNBQUssRUFBRSxPQUFPO0FBQ2QsbUNBQUcsRUFBSCxHQUFHO0FBQ0gsd0NBQVEsRUFBUixRQUFROzZCQUNYLENBQUMsQ0FBQzt5QkFDTjs7aUJBRUo7O3FCQUVJLElBQUksT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3JDLDZCQUFLLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0Isa0NBQU0sQ0FBQyxJQUFJLENBQUM7QUFDUixvQ0FBSSxFQUFFLFdBQVc7QUFDakIsc0NBQU0sRUFBRSxJQUFJO0FBQ1osb0NBQUksRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHO0FBQzFCLHFDQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqQixtQ0FBRyxFQUFFLENBQUM7QUFDTix3Q0FBUSxFQUFFLE9BQU87NkJBQ3BCLENBQUMsQ0FBQzt5QkFDTjtxQkFDSjs7eUJBRUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTs7QUFFckUsZ0NBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7O0FBRWxELHFDQUFLLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsMENBQU0sQ0FBQyxJQUFJLENBQUM7QUFDUiw0Q0FBSSxFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUMvQiw4Q0FBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSTtBQUNoQyw0Q0FBSSxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUc7QUFDMUIsNkNBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLDJDQUFHLEVBQUUsQ0FBQztBQUNOLGdEQUFRLEVBQUUsT0FBTztxQ0FDcEIsQ0FBQyxDQUFDO2lDQUNOOzZCQUNKOzt5QkFFSjs7NkJBRUksSUFBSSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDckMscUNBQUssQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs7QUFFL0IsMENBQU0sQ0FBQyxJQUFJLE1BQUEsQ0FBWCxNQUFNLHFCQUFTLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFDLENBQUM7aUNBQ3hFOzZCQUNKO2FBQ0o7O2lCQUVJLElBQUksT0FBTyxPQUFPLEtBQUssU0FBUyxFQUFFO0FBQ25DLDBCQUFNLENBQUMsSUFBSSxDQUFDO0FBQ1IsNEJBQUksRUFBRSxNQUFNO0FBQ1osOEJBQU0sRUFBRSxJQUFJO0FBQ1osNEJBQUksRUFBSixJQUFJO0FBQ0osNkJBQUssRUFBRSxPQUFPO0FBQ2QsMkJBQUcsRUFBSCxHQUFHO0FBQ0gsZ0NBQVEsRUFBUixRQUFRO3FCQUNYLENBQUMsQ0FBQztpQkFDTjs7cUJBRUksSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7QUFDbEMsOEJBQU0sQ0FBQyxJQUFJLENBQUM7QUFDUixnQ0FBSSxFQUFFLFdBQVc7QUFDakIsa0NBQU0sRUFBRSxJQUFJO0FBQ1osZ0NBQUksRUFBSixJQUFJO0FBQ0osaUNBQUssRUFBRSxPQUFPO0FBQ2QsK0JBQUcsRUFBSCxHQUFHO0FBQ0gsb0NBQVEsRUFBUixRQUFRO3lCQUNYLENBQUMsQ0FBQztxQkFDTjs7eUJBRUksSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7O0FBRWxDLGtDQUFNLENBQUMsSUFBSSxNQUFBLENBQVgsTUFBTSxxQkFBUyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBQyxDQUFDO3lCQUNyRDs7O0tBR0o7O0FBRUQsV0FBTyxNQUFNLENBQUM7Q0FDakIsQ0FBQzs7Ozs7QUFLRixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBaUI7UUFBZixNQUFNLHlEQUFHLElBQUk7O0FBQ3RELFFBQUksSUFBSSxFQUFFLEtBQUssQ0FBQztBQUNoQixRQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDakIsVUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7OztBQUc3QyxRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUMzQixZQUFJLEdBQUcsT0FBTyxDQUFDO0tBQ2xCOztTQUVJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTs7QUFFM0IsZ0JBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFOztBQUU5QixvQkFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtBQUN4Qyx3QkFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO2lCQUMvQjs7cUJBRUk7O0FBQ0QsNEJBQUksR0FBRyxPQUFPLENBQUM7QUFDZiw2QkFBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7cUJBQ3hCOzthQUVKOztpQkFFSSxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNuQyx3QkFBSSxHQUFHLFdBQVcsQ0FBQztBQUNuQix5QkFBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7aUJBQ3hCOztxQkFFSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFOztBQUVqRSw0QkFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtBQUM5QyxnQ0FBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO3lCQUNsQzs7QUFFRCw2QkFBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7cUJBQzNCOzt5QkFFSSxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNuQyxnQ0FBSSxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDekIsaUNBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JCLG1DQUFPLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQzt5QkFDL0Q7U0FDSjs7YUFFSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUNqQyxvQkFBSSxHQUFHLE1BQU0sQ0FBQzthQUNqQjs7aUJBRUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDaEMsd0JBQUksR0FBRyxXQUFXLENBQUM7aUJBQ3RCOztxQkFFSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUNoQyw0QkFBSSxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDekIsK0JBQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO3FCQUM1RDs7O0FBR0QsUUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLFlBQVEsSUFBTyxJQUFJLFNBQUksSUFBSSxBQUFFLENBQUM7QUFDOUIsUUFBSSxLQUFLLEVBQUU7QUFDUCxnQkFBUSxVQUFRLEtBQUssTUFBRyxDQUFDO0tBQzVCO0FBQ0QsWUFBUSxJQUFJLEtBQUssQ0FBQzs7O0FBR2xCLFdBQU8sRUFBRSxRQUFRLEVBQVIsUUFBUSxFQUFFLE9BQU8sRUFBUCxPQUFPLEVBQUUsQ0FBQztDQUNoQyxDQUFDOzs7OztBQUtGLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFpQjtRQUFmLE1BQU0seURBQUcsSUFBSTs7QUFDcEQsUUFBSSxNQUFNLGVBQWEsSUFBSSxTQUFNLENBQUM7QUFDbEMsUUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUssSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFO0FBQ3JCLFlBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5RCxjQUFNLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDbkMsa0JBQVUsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDO0tBQ2hDO0FBQ0QsVUFBTSxJQUFJLE1BQU0sQ0FBQztBQUNqQixVQUFNLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUM3QixXQUFPLE1BQU0sQ0FBQztDQUNqQixDQUFDOzs7OztBQUtGLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ3hDLFFBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNDLE9BQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO0FBQzlDLFdBQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUU7Ozs7Ozs7O0FBUTVDLFFBQUksRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLHNDQUFzQyxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEYsUUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xCLGVBQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDRCxXQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQzlDLFFBQUksRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLFFBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsZUFBTyxJQUFJLENBQUM7S0FDZjtBQUNELFdBQU8sS0FBSyxDQUFDO0NBQ2hCLENBQUM7Ozs7Ozs7QUFPRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxFQUFTO1FBQVAsQ0FBQyx5REFBRyxDQUFDOztBQUNoQyxRQUFJLENBQUMsWUFBQSxDQUFDO0FBQ04sUUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3BDLFNBQUMsR0FBRyw2QkFBSSxDQUFDLElBQUUsQ0FBQyxHQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUNqQyxNQUNJO0FBQ0QsU0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDakM7O0FBRUQsUUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFBLENBQUM7ZUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQUEsQ0FBQyxFQUFFO0FBQ3ZELGVBQU8sQ0FBQyxDQUFDO0tBQ1o7Q0FDSixDQUFDOzs7Ozs7O0FBT0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsRUFBUztRQUFQLENBQUMseURBQUcsQ0FBQzs7QUFDaEMsUUFBSSxDQUFDLFlBQUEsQ0FBQztBQUNOLFFBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNwQyxTQUFDLEdBQUcsNkJBQUksQ0FBQyxJQUFFLENBQUMsR0FBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDakMsTUFDSTtBQUNELFNBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUNwQzs7QUFFRCxRQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQUEsQ0FBQztlQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FBQSxDQUFDLEVBQUU7QUFDdkQsZUFBTyxDQUFDLENBQUM7S0FDWjtDQUNKLENBQUM7Ozs7Ozs7Ozs7Ozs7O0lDclRtQixXQUFXO0FBQ25CLGFBRFEsV0FBVyxDQUNsQixLQUFLLEVBQUUsS0FBSyxFQUFFOzhCQURQLFdBQVc7O0FBRXhCLGFBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNiLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0tBQ3RCOztpQkFMZ0IsV0FBVzs7ZUFPeEIsYUFBQyxLQUFLLEVBQUU7O0FBRVgsZ0JBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6RCxvQkFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQixvQkFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7YUFDbkI7U0FDRDs7O2VBRWlCLG9CQUFDLEVBQUUsRUFBRTtBQUNuQix1QkFBVyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7O0FBRTFCLHVCQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEMsdUJBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7OztBQUc1Qyx1QkFBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3RDLHVCQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7QUFDM0QsdUJBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztBQUMzRCx1QkFBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQ2pELHVCQUFXLENBQUMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQzs7O0FBR2pFLHVCQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDeEMsdUJBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2Qyx1QkFBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzs7O0FBRzdDLHVCQUFXLENBQUMsT0FBTyxHQUFHLElBQUksV0FBVyxDQUNwQyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFDL0UsVUFBQyxLQUFLLEVBQUs7QUFDVixvQkFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQ2Ysc0JBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2xCLHNCQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDOUIsTUFBTTtBQUNOLHNCQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDekI7YUFDRCxDQUNELENBQUM7OztBQUdGLHVCQUFXLENBQUMsUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDO0FBQzVCLHFCQUFLLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRO0FBQ3BDLG1CQUFHLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0FBQ3RDLG1CQUFHLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0FBQ3RDLHlCQUFTLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0I7QUFDbEQseUJBQVMsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLGtCQUFrQjthQUNyRCxFQUNELFVBQUMsS0FBSyxFQUFLO0FBQ2hCLG9CQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7QUFDVixzQkFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRWQsd0JBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO0FBQ3BDLDBCQUFFLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUNoRixNQUNJO0FBQ0QsMEJBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ3RDO2lCQUNiLE1BQU07QUFDTixzQkFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3JCO2FBQ0QsQ0FDRCxDQUFDOzs7QUFHRix1QkFBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FDeEMsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFDakQsVUFBQyxLQUFLLEVBQUs7QUFDUCxrQkFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbkMsQ0FDRCxDQUFDOzs7QUFHRix1QkFBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLFdBQVcsQ0FDdkMsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQzVGLFVBQUMsS0FBSyxFQUFLO0FBQ1Ysb0JBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtBQUNmLHNCQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1QixzQkFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ2xDLE1BQU07QUFDQSxzQkFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ2hDO2FBQ0QsQ0FDRCxDQUFDO1NBQ0Y7OztXQTFGZ0IsV0FBVzs7O3FCQUFYLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JDRWYsUUFBUTs7Ozt1QkFDTCxXQUFXOzs7OzBCQUNOLGNBQWM7Ozs7d0JBRXZCLFVBQVU7Ozs7NkJBQ1IsZ0JBQWdCOzs7OzhCQUNXLGtCQUFrQjs7OztJQUUxQyxhQUFhO0FBRW5CLGFBRk0sYUFBYSxDQUVsQixFQUFFLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUU7OEJBRnhDLGFBQWE7O0FBRzFCLGVBQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDOztBQUV4QixZQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNiLFlBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLFlBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLFlBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLFlBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOzs7QUFHbEIsWUFBSSxDQUFDLE9BQU8sR0FBRyxlQUFjLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFFLEVBQUUsQ0FBQyxDQUFDOzs7QUFHdEQsWUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFjLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFlBQUksQ0FBQyxZQUFZLEdBQUcsZUFBYyxFQUFFLEVBQUUsT0FBTyxDQUFDLFlBQVksSUFBRSxFQUFFLENBQUMsQ0FBQzs7O0FBR2hFLFlBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7Ozs7O0FBSzNDLFlBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDOztBQUUzQyxZQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNuQixZQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzs7QUFFbEIsWUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDbkMsWUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7O0FBRXZDLFlBQUksQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzdCLHFCQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsWUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0tBQzVCOzs7O2lCQW5DZ0IsYUFBYTs7ZUFxQ3ZCLG1CQUFHO0FBQ04sZ0JBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLGdCQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEMsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLGdCQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNuQixnQkFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDbEIsbUJBQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkMsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ3pCOzs7OztlQUdFLGVBQUc7QUFDRixnQkFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDaEIsdUJBQU87YUFDVjs7QUFFRCxnQkFBSSxhQUFhLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtBQUNoQyxvQkFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3BDO0FBQ0QseUJBQWEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ2hDOzs7ZUFFTSxtQkFBRztBQUNOLGdCQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEIsc0JBQU0sSUFBSSxLQUFLLDRDQUEwQyxJQUFJLENBQUMsRUFBRSxVQUFLLElBQUksQ0FBQyxJQUFJLGlDQUE4QixDQUFFO2FBQ2pIO0FBQ0QsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLGdCQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUN0QixnQkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7OztBQUdsQixnQkFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDakQsZ0JBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDOzs7QUFHckQsZ0JBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzs7O0FBR3hDLGdCQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Ozs7Ozs7O0FBUXJDLGdCQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztBQUN6QyxnQkFBSSxNQUFNLENBQUM7O0FBRVgsaUJBQUssSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFO0FBQ3BCLG9CQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsb0JBQUksQ0FBQyxLQUFLLElBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQUFBQyxFQUFFO0FBQ3hELDZCQUFTO2lCQUNaOzs7QUFHRCxzQkFBTSxHQUFHLElBQUksTUFBTSxDQUFDLDhCQUE4QixHQUFHLEdBQUcsR0FBRyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekUsb0JBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUQsb0JBQUksZUFBZSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7OztBQUdsRSxvQkFBSSxhQUFhLElBQUksSUFBSSxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUU7QUFDbEQsNkJBQVM7aUJBQ1o7OztBQUdELG9CQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIscUJBQUssQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7OztBQUdqQix3QkFBSSxJQUFJLEdBQU0sR0FBRyxDQUFDLEtBQUssVUFBSyxHQUFHLENBQUMsR0FBRyxVQUFLLEdBQUcsQ0FBQyxHQUFHLEFBQUUsQ0FBQztBQUNsRCwwQkFBTSxtQ0FBaUMsSUFBSSxPQUFJLENBQUM7QUFDaEQsMEJBQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ3JCLDBCQUFNLGlDQUErQixJQUFJLE9BQUksQ0FBQztpQkFDakQsQ0FBQyxDQUFDOzs7QUFHSCxvQkFBSSxhQUFhLElBQUksSUFBSSxFQUFFO0FBQ3ZCLHdCQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQ3JGO0FBQ0Qsb0JBQUksZUFBZSxJQUFJLElBQUksRUFBRTtBQUN6Qix3QkFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2lCQUN6Rjs7O0FBR0QsdUJBQU8sQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQzthQUNoRjs7O0FBR0Qsa0JBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxnQkFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLGdCQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7OztBQUdsRixnQkFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs7OztBQUk3QyxnQkFBSSxJQUFJLEdBQUksSUFBSSxDQUFDLElBQUksR0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxBQUFDLEFBQUMsQ0FBQztBQUM5RSxnQkFBSSxNQUFNLG9CQUFrQixJQUFJLE9BQUksQ0FBQztBQUNyQyxnQkFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ25CLGdCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDekYsZ0JBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFO0FBQzVCLHlCQUFTLEdBQUcsMEJBQTBCLENBQUM7YUFDMUMsTUFDSTtBQUNELHlCQUFTLEdBQUcsNEJBQTRCLENBQUM7YUFDNUM7O0FBRUQsbUJBQU8sQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxtQkFBTyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzNDLGdCQUFJLENBQUMsc0JBQXNCLEdBQ3ZCLE1BQU0sR0FDTixTQUFTLEdBQ1QsYUFBYSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxHQUN4QyxJQUFJLENBQUMsc0JBQXNCLENBQUM7Ozs7O0FBS2hDLG1CQUFPLENBQUMsdUJBQXVCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDekMsbUJBQU8sQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQyxnQkFBSSxDQUFDLHdCQUF3QixHQUN6QixhQUFhLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEdBQzlDLE1BQU0sR0FDTixTQUFTLEdBQ1QsYUFBYSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxHQUN4QyxJQUFJLENBQUMsd0JBQXdCLENBQUM7OztBQUdsQyxnQkFBSTtBQUNBLG9CQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUM5SCxvQkFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDckIsb0JBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2FBQzFCLENBQ0QsT0FBTSxLQUFLLEVBQUU7QUFDVCxvQkFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsb0JBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLG9CQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUN2QixvQkFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7OztBQUduQixvQkFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtBQUN0RCx3QkFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDOzs7Ozs7QUFDbEMsMERBQWMsSUFBSSxDQUFDLGFBQWEsNEdBQUU7Z0NBQXpCLENBQUM7O0FBQ04sNkJBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUNwQiw2QkFBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUM1Qzs7Ozs7Ozs7Ozs7Ozs7O2lCQUNKOztBQUVELHNCQUFNLElBQUksS0FBSyx1Q0FBcUMsSUFBSSxDQUFDLEVBQUUsVUFBSyxJQUFJLENBQUMsSUFBSSxlQUFZLEtBQUssQ0FBQyxDQUFFO2FBQ2hHOztBQUVELGdCQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDWCxnQkFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ3ZCLGdCQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1Qjs7Ozs7ZUFHYywyQkFBRztBQUNkLGdCQUFJLENBQUM7Z0JBQUUsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNwQixpQkFBSyxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRTtBQUM3Qix1QkFBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekM7QUFDRCxpQkFBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNwQix1QkFBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxtQkFBTyxPQUFPLENBQUM7U0FDbEI7Ozs7O2VBR21CLGdDQUFHO0FBQ25CLGdCQUFJLEdBQUcsWUFBQTtnQkFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDOzs7QUFHckIsaUJBQUssR0FBRyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUU7QUFDOUIsc0JBQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7O0FBRWpCLG9CQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFOzs7QUFDMUMsbUNBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFDLElBQUksTUFBQSxpQ0FDVCxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUs7QUFDOUMsK0JBQU8sRUFBRSxHQUFHLEVBQUgsR0FBRyxFQUFFLE1BQU0sRUFBTixNQUFNLEVBQUUsR0FBRyxFQUFILEdBQUcsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7cUJBQ3ZELENBQUMsRUFDTCxDQUFDO2lCQUNMLE1BQ0k7QUFDRCwwQkFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUgsR0FBRyxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7aUJBQzlGO2FBQ0o7OztBQUdELGlCQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLHNCQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7QUFFaEMsb0JBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDakMsd0JBQUksTUFBTSxHQUFHLEFBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFLLEVBQUUsQ0FBQztBQUNqRSx3QkFBSSxTQUFTLEdBQUcsSUFBSTt3QkFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDOztBQUU5Qix5QkFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOztBQUU1Qyw0QkFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3pCLHFDQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLCtCQUFHLEdBQUcsQ0FBQyxDQUFDO3lCQUNYOztBQUVELDhCQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2IsK0JBQUcsRUFBSCxHQUFHO0FBQ0gsa0NBQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQiwrQkFBRyxFQUFILEdBQUc7QUFDSCxpQ0FBSyxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSTt5QkFDaEMsQ0FBQyxDQUFDOztBQUVILDJCQUFHLEVBQUUsQ0FBQztxQkFDVDtpQkFDSixNQUNJOzs7QUFHRCwwQkFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBSCxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ2pGO2FBQ0o7QUFDRCxtQkFBTyxNQUFNLENBQUM7U0FDakI7Ozs7O2VBR2Esd0JBQUMsUUFBUSxFQUFFO0FBQ3JCLGdCQUFJLENBQUMsUUFBUSxFQUFFO0FBQ1gsdUJBQU87YUFDVjs7QUFFRCxnQkFBSSxFQUFFLEdBQUcsZ0NBQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDNUMsZ0JBQUksRUFBRSxHQUFHLGdDQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQzlDLGdCQUFJLE1BQU07Z0JBQUUsYUFBYSxHQUFHLEVBQUU7Z0JBQUUsYUFBYSxHQUFHLEVBQUUsQ0FBQzs7O0FBR25ELGlCQUFLLElBQUksSUFBSSxJQUFJLFFBQVEsRUFBRTtBQUN2QixzQkFBTSxHQUFHLElBQUksQ0FBQzs7O0FBR2Qsb0JBQUksQ0FBQyxrQkFBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEMsd0JBQUksQ0FBQyxNQUFNLEVBQUU7QUFDVCw4QkFBTSxHQUFHLGtCQUFLLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7cUJBQ3JEO0FBQ0QsMENBQUksS0FBSyxjQUFZLElBQUksQ0FBQyxJQUFJLFVBQUssSUFBSSxvREFBOEMsTUFBTSxRQUFJLENBQUM7QUFDaEcsaUNBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBRTlCOztBQUVELG9CQUFJLENBQUMsa0JBQUssZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLHdCQUFJLENBQUMsTUFBTSxFQUFFO0FBQ1QsOEJBQU0sR0FBRyxrQkFBSyxhQUFhLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3FCQUNyRDtBQUNELDBDQUFJLEtBQUssY0FBWSxJQUFJLENBQUMsSUFBSSxVQUFLLElBQUksc0RBQWdELE1BQU0sUUFBSSxDQUFDO0FBQ2xHLGlDQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUM5QjthQUNKOzs7OztBQUtELGdCQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzFCLG9CQUFJLENBQUMsc0JBQXNCLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7YUFDeEY7O0FBRUQsZ0JBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDMUIsb0JBQUksQ0FBQyx3QkFBd0IsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQzthQUM1RjtTQUNKOzs7OztlQUdVLHFCQUFDLFFBQVEsRUFBNkI7Z0JBQTNCLGtCQUFrQix5REFBRyxJQUFJOztBQUMzQyxnQkFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDaEIsdUJBQU87YUFDVjs7Ozs7Ozs7QUFRRCxnQkFBSSxrQkFBa0IsRUFBRTtBQUNwQixvQkFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7YUFDekI7OztBQUdELGdCQUFJLE1BQU0sR0FBRyxrQkFBSyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7Ozs7O0FBRzFDLG1EQUFvQixNQUFNLGlIQUFFO3dCQUFuQixPQUFPOztBQUNaLHdCQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFOztBQUU5Qiw0QkFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN2RCxNQUNJO0FBQ0QsNEJBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDN0Q7aUJBQ0o7Ozs7Ozs7Ozs7Ozs7OztTQUNKOzs7OztlQUdXLHNCQUFDLE1BQU0sRUFBRTtBQUNqQixnQkFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDdkMsaUJBQUssSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFO0FBQ3BCLG9CQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLG9CQUFJLE9BQU8sRUFBRTtBQUNULDJCQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7aUJBQ3ZDO2FBQ0o7QUFDRCxnQkFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDO1NBQ3BEOzs7OztlQUdjLHlCQUFDLE1BQU0sRUFBRTtBQUNwQixnQkFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDdkMsaUJBQUssSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFO0FBQ3BCLG9CQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLG9CQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO0FBQ2hDLDJCQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDcEMsd0JBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pCO2FBQ0o7QUFDRCxnQkFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxDQUFDO1NBQ3BEOzs7OztlQUdnQiwyQkFBQyxZQUFZLEVBQUUsWUFBWSxFQUFFO0FBQzFDLGdCQUFJLE9BQU8sR0FBRyxxQkFBUSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0MsZ0JBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUNqQixzQ0FBSSxJQUFJLDRCQUF3QixZQUFZLFFBQUksQ0FBQztBQUNqRCx1QkFBTzthQUNWOztBQUVELG1CQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoQyxnQkFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwRCxnQkFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3ZCOzs7Ozs7ZUFJTSxpQkFBQyxNQUFNLEVBQUUsSUFBSSxFQUFZOztBQUM1QixnQkFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDaEIsdUJBQU87YUFDVjs7QUFFRCxnQkFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoRCxnQkFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxtQkFBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEIsZ0JBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7QUFDaEMsdUJBQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3JFO0FBQ0QsbUJBQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLE1BQU0sQ0FBQzs7OENBWGYsS0FBSztBQUFMLHFCQUFLOzs7QUFZMUIsbUJBQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLGdCQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCOzs7OztlQUdZLHVCQUFDLElBQUksRUFBRTtBQUNoQixnQkFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDaEIsdUJBQU87YUFDVjs7QUFFRCxnQkFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxnQkFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtBQUN0Qyx1QkFBTzthQUNWOztBQUVELGdCQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDWCxnQkFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3BGOzs7OztlQUdjLDJCQUFHO0FBQ2QsZ0JBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2hCLHVCQUFPO2FBQ1Y7O0FBRUQsaUJBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUN6QixvQkFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLG9CQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pCO1NBQ0o7OztlQUVnQiw2QkFBRzs7Ozs7QUFLaEIsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1NBQ3JCOzs7OztlQUdRLG1CQUFDLElBQUksRUFBRTtBQUNaLGdCQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNoQix1QkFBTzthQUNWOztBQUVELGdCQUFJLE1BQU0sR0FBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxBQUFDLENBQUM7QUFDN0QsZ0JBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7QUFDekIsdUJBQU8sTUFBTSxDQUFDO2FBQ2pCOztBQUVELGtCQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixrQkFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7Ozs7OztBQU1oRSxtQkFBTyxNQUFNLENBQUM7U0FDakI7Ozs7O2VBR0ssZ0JBQUMsSUFBSSxFQUFFO0FBQ1QsZ0JBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUNuQix1QkFBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7YUFDdEMsTUFDSSxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUU7QUFDMUIsdUJBQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO2FBQ3hDO1NBQ0o7Ozs7O2VBR0ksZUFBQyxJQUFJLEVBQUU7QUFDUixnQkFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixnQkFBSSxNQUFNLEVBQUU7QUFDUix1QkFBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzdCO0FBQ0QsbUJBQU8sRUFBRSxDQUFDO1NBQ2I7Ozs7O2VBR0csY0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQ1osZ0JBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsZ0JBQUksTUFBTSxFQUFFO0FBQ1IsdUJBQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCO1NBQ0o7Ozs7Ozs7Ozs7Ozs7OztlQWFJLGVBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtBQUNiLGdCQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdCLGdCQUFJLEtBQUssWUFBQSxDQUFDO0FBQ1YsaUJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsb0JBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixvQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0FBQzlGLG9CQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs7QUFFM0IseUJBQUssR0FBRztBQUNKLDZCQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNmLDRCQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNkLDJCQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztxQkFDaEIsQ0FBQztpQkFDTCxNQUNJO0FBQ0QseUJBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLG1FQUFtRSxDQUFDLENBQUM7QUFDeEYsd0JBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLDZCQUFLLEdBQUcsSUFBSSxDQUFDO3FCQUNoQjtpQkFDSjs7O0FBR0Qsb0JBQUksS0FBSyxFQUFFOztBQUVQLHlCQUFLLENBQUMsSUFBSSxHQUFHLEFBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLEdBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDeEQseUJBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2lCQUN2QjthQUNKO0FBQ0QsbUJBQU8sS0FBSyxDQUFDO1NBQ2hCOzs7Ozs7ZUFJYywyQkFBRztBQUNkLGdCQUFJLElBQUksR0FBRyxFQUFFLENBQUM7Ozs7OztBQUNkLG1EQUFpQixJQUFJLENBQUMsVUFBVSxpSEFBRTt3QkFBekIsS0FBSTs7QUFDVCx3QkFBSSxHQUFHLEdBQUcsNkJBQWEsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFJLENBQUMsQ0FBQztBQUN0Qyx3QkFBSSxHQUFHLDBCQUF3QixLQUFJLEFBQUUsQ0FBQzs7QUFFdEMsd0JBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUksR0FBRyxJQUFJLElBQUksQUFBQyxDQUFDOztBQUVsQyx3QkFBSSxHQUFHLEVBQUU7QUFDTCw0QkFBSSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQztxQkFDbkIsTUFDSTtBQUNELDhDQUFJLEtBQUssbUNBQWdDLEtBQUksUUFBSSxDQUFDO3FCQUNyRDtpQkFDSjs7Ozs7Ozs7Ozs7Ozs7OztBQUNELG1CQUFPLElBQUksQ0FBQztTQUNmOzs7V0F4aEJnQixhQUFhOzs7cUJBQWIsYUFBYTtBQStoQmxDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLGFBQWEsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzVCLGFBQWEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDOzs7QUFHN0IsYUFBYSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDM0IsYUFBYSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7OztBQUcxQixhQUFhLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxPQUFPLEVBQUU7QUFDakQsUUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUssSUFBSSxDQUFDLElBQUksT0FBTyxFQUFFO0FBQ25CLFlBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUN0QixxQkFBUztTQUNaLE1BQ0ksSUFBSSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTs7QUFDN0Qsc0JBQVUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUN2QyxNQUNJLElBQUksT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFOztBQUM5RSxzQkFBVSxJQUFJLFVBQVUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3JFLE1BQ0k7O0FBQ0Qsc0JBQVUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzFEO0tBQ0o7QUFDRCxXQUFPLFVBQVUsQ0FBQztDQUNyQixDQUFDOzs7QUFHRixhQUFhLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxVQUFVLEVBQUU7QUFDdkQsY0FBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7QUFDOUIsUUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDOzs7Ozs7QUFDYiwyQ0FBZ0IsVUFBVSxpSEFBRTtnQkFBbkIsR0FBRzs7QUFDUixlQUFHLG1CQUFpQixHQUFHLHdCQUFtQixHQUFHLHdCQUFxQixDQUFDO1NBQ3RFOzs7Ozs7Ozs7Ozs7Ozs7O0FBQ0QsV0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOztBQUVGLGFBQWEsQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQWE7OztBQUMvQyxpQkFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7dUNBRHJCLE1BQU07QUFBTixjQUFNOzs7QUFFN0MsaUNBQUEsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBQyxJQUFJLE1BQUEsNEJBQUksTUFBTSxDQUFDLENBQUM7Q0FDN0MsQ0FBQzs7O0FBR0YsYUFBYSxDQUFDLFdBQVcsR0FBRyxVQUFVLEdBQUcsRUFBRTtBQUN2QyxpQkFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbEMsQ0FBQzs7QUFFRixhQUFhLENBQUMsWUFBWSxHQUFHLFVBQVUsR0FBRyxFQUFhO0FBQ25ELGlCQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzt1Q0FEWSxNQUFNO0FBQU4sY0FBTTs7O0FBRWpELGlCQUFhLENBQUMsUUFBUSxNQUFBLENBQXRCLGFBQWEsR0FBVSxHQUFHLFNBQUssTUFBTSxFQUFDLENBQUM7Q0FDMUMsQ0FBQzs7OztBQUlGLGFBQWEsQ0FBQyxhQUFhLEdBQUcsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFO0FBQy9GLFFBQUk7QUFDQSxZQUFJLGFBQWEsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0YsWUFBSSxlQUFlLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ3BHLENBQ0QsT0FBTSxHQUFHLEVBQUU7QUFDUCw4QkFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZCLGNBQU0sR0FBRyxDQUFDO0tBQ2I7O0FBRUQsTUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQixRQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7QUFDakIsWUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2pELGFBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hDLGNBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVDO0tBQ0osTUFBTTtBQUNILGVBQU8sR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7S0FDaEM7O0FBRUQsUUFBSSxhQUFhLElBQUksSUFBSSxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUU7QUFDbEQsZUFBTyxPQUFPLENBQUM7S0FDbEI7O0FBRUQsTUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDeEMsTUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7O0FBRTFDLE1BQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDL0IsTUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQzs7QUFFakMsTUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFFeEIsUUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQ2xELFlBQUksT0FBTyxHQUFHLElBQUksS0FBSyx5REFFQSxFQUFFLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsNkJBQzdELEVBQUUsQ0FBQyxRQUFRLEVBQUUseURBRXBCLG9CQUFvQiwyREFFcEIsc0JBQXNCLENBQUcsQ0FBQzs7QUFFaEMsWUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBUCxPQUFPLEVBQUUsQ0FBQztBQUN6Qyw4QkFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pCLGNBQU0sS0FBSyxDQUFDO0tBQ2Y7O0FBRUQsV0FBTyxPQUFPLENBQUM7Q0FDbEIsQ0FBQzs7O0FBR0YsYUFBYSxDQUFDLFlBQVksR0FBRyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ3RELFFBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXBDLE1BQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLE1BQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRXpCLFFBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUNuRCxZQUFJLElBQUksR0FBSSxLQUFLLEtBQUssRUFBRSxDQUFDLGFBQWEsR0FBRyxRQUFRLEdBQUcsVUFBVSxBQUFDLENBQUM7QUFDaEUsWUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLFlBQUksTUFBTSxHQUFHLGlDQUFrQixPQUFPLENBQUMsQ0FBQztBQUN4QyxjQUFNLEVBQUUsSUFBSSxFQUFKLElBQUksRUFBRSxPQUFPLEVBQVAsT0FBTyxFQUFFLE1BQU0sRUFBTixNQUFNLEVBQUUsQ0FBQztLQUNuQzs7QUFFRCxXQUFPLE1BQU0sQ0FBQztDQUNqQixDQUFDOzs7Ozs7Ozs7O0FDanFCRixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7O0FBRXZCLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxHQUNyQyxnQ0FBZ0MsR0FDaEMsSUFBSSxHQUNKLHVFQUF1RSxHQUN2RSxpSEFBaUgsR0FDakgsMEJBQTBCLEdBQzFCLGNBQWMsR0FDZCxpQkFBaUIsR0FDakIsbUdBQW1HLEdBQ25HLHlGQUF5RixHQUN6RiwwRkFBMEYsR0FDMUYsZUFBZSxHQUNmLG1DQUFtQyxHQUNuQyxnRkFBZ0YsR0FDaEYsNkNBQTZDLEdBQzdDLEtBQUssR0FDTCxJQUFJLEdBQ0osb0dBQW9HLEdBQ3BHLDJDQUEyQyxHQUMzQyxrQ0FBa0MsR0FDbEMsY0FBYyxHQUNkLGlCQUFpQixHQUNqQiwrRUFBK0UsR0FDL0UscUVBQXFFLEdBQ3JFLGVBQWUsR0FDZixtQ0FBbUMsR0FDbkMsS0FBSyxHQUNMLElBQUksR0FDSixVQUFVLEdBQ1YsSUFBSSxHQUNKLG9GQUFvRixHQUNwRiwwQkFBMEIsR0FDMUIsZ0NBQWdDLEdBQ2hDLEtBQUssR0FDTCxJQUFJLEdBQ0osZ0ZBQWdGLEdBQ2hGLHFFQUFxRSxHQUNyRSxnQ0FBZ0MsR0FDaEMsSUFBSSxHQUNKLGlEQUFpRCxHQUNqRCxnREFBZ0QsR0FDaEQsNEZBQTRGLEdBQzVGLHdDQUF3QyxHQUN4QyxjQUFjLEdBQ2QsOEJBQThCLEdBQzlCLEtBQUssR0FDTCxJQUFJLEdBQ0osVUFBVSxHQUNWLElBQUksR0FDSiw0QkFBNEIsR0FDNUIsc0NBQXNDLEdBQ3RDLElBQUksR0FDSix3QkFBd0IsR0FDeEIsOEJBQThCLEdBQzlCLEtBQUssR0FDTCxJQUFJLEdBQ0osMENBQTBDLEdBQzFDLElBQUksR0FDSix3QkFBd0IsR0FDeEIsc0RBQXNELEdBQ3RELEtBQUssR0FDTCxJQUFJLEdBQ0osVUFBVSxHQUNWLEVBQUUsQ0FBQzs7QUFFSCxhQUFhLENBQUMseUJBQXlCLENBQUMsR0FDeEMsTUFBTSxHQUNOLElBQUksR0FDSixxQkFBcUIsR0FDckIsdUJBQXVCLEdBQ3ZCLElBQUksR0FDSixNQUFNLEdBQ04sSUFBSSxHQUNKLHlCQUF5QixHQUN6QixxQkFBcUIsR0FDckIsTUFBTSxHQUNOLElBQUksR0FDSix1RkFBdUYsR0FDdkYsb0RBQW9ELEdBQ3BELEtBQUssR0FDTCxFQUFFLENBQUM7O0FBRUgsYUFBYSxDQUFDLDZCQUE2QixDQUFDLEdBQzVDLE1BQU0sR0FDTixJQUFJLEdBQ0oscUJBQXFCLEdBQ3JCLFlBQVksR0FDWix1QkFBdUIsR0FDdkIsSUFBSSxHQUNKLE1BQU0sR0FDTixJQUFJLEdBQ0osNkJBQTZCLEdBQzdCLHFCQUFxQixHQUNyQixxQkFBcUIsR0FDckIsc0JBQXNCLEdBQ3RCLHVCQUF1QixHQUN2QixNQUFNLEdBQ04sSUFBSSxHQUNKLDJGQUEyRixHQUMzRixJQUFJLEdBQ0osb0RBQW9ELEdBQ3BELElBQUksR0FDSixtRkFBbUYsR0FDbkYsSUFBSSxHQUNKLHVDQUF1QyxHQUN2QyxpRUFBaUUsR0FDakUsY0FBYyxHQUNkLElBQUksR0FDSix3Q0FBd0MsR0FDeEMsMkJBQTJCLEdBQzNCLCtCQUErQixHQUMvQixtRkFBbUYsR0FDbkYscUZBQXFGLEdBQ3JGLHNEQUFzRCxHQUN0RCxhQUFhLEdBQ2IsK0RBQStELEdBQy9ELGNBQWMsR0FDZCxLQUFLLEdBQ0wsRUFBRSxDQUFDOztBQUVILGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxHQUN2QywrQ0FBK0MsR0FDL0MsNkRBQTZELEdBQzdELCtEQUErRCxHQUMvRCxLQUFLLEdBQ0wsRUFBRSxDQUFDOztBQUVILGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxHQUNwQyxNQUFNLEdBQ04sSUFBSSxHQUNKLG9CQUFvQixHQUNwQixZQUFZLEdBQ1osdUJBQXVCLEdBQ3ZCLElBQUksR0FDSixNQUFNLEdBQ04sSUFBSSxHQUNKLElBQUksR0FDSixnQkFBZ0IsR0FDaEIsTUFBTSxHQUNOLHFCQUFxQixHQUNyQix3Q0FBd0MsR0FDeEMsMEJBQTBCLEdBQzFCLG9EQUFvRCxHQUNwRCxtQ0FBbUMsR0FDbkMsa0JBQWtCLEdBQ2xCLGNBQWMsR0FDZCxJQUFJLEdBQ0osdUNBQXVDLEdBQ3ZDLHlCQUF5QixHQUN6QixtREFBbUQsR0FDbkQsa0NBQWtDLEdBQ2xDLGtCQUFrQixHQUNsQixjQUFjLEdBQ2QsSUFBSSxHQUNKLHVDQUF1QyxHQUN2Qyx5QkFBeUIsR0FDekIsbURBQW1ELEdBQ25ELGtDQUFrQyxHQUNsQyxrQkFBa0IsR0FDbEIsY0FBYyxHQUNkLElBQUksR0FDSix3Q0FBd0MsR0FDeEMsMEJBQTBCLEdBQzFCLDRCQUE0QixHQUM1QixvREFBb0QsR0FDcEQsbUNBQW1DLEdBQ25DLGtCQUFrQixHQUNsQixjQUFjLEdBQ2QsSUFBSSxHQUNKLElBQUksR0FDSiw4Q0FBOEMsR0FDOUMsNkJBQTZCLEdBQzdCLCtCQUErQixHQUMvQixjQUFjLEdBQ2QsTUFBTSxHQUNOLElBQUksR0FDSix5RUFBeUUsR0FDekUsZ0NBQWdDLEdBQ2hDLHNCQUFzQixHQUN0QixJQUFJLEdBQ0osNENBQTRDLEdBQzVDLGtEQUFrRCxHQUNsRCxVQUFVLEdBQ1YsSUFBSSxHQUNKLDJDQUEyQyxHQUMzQyxpREFBaUQsR0FDakQsVUFBVSxHQUNWLElBQUksR0FDSiwyQ0FBMkMsR0FDM0MsaURBQWlELEdBQ2pELFVBQVUsR0FDVixJQUFJLEdBQ0osNENBQTRDLEdBQzVDLGtEQUFrRCxHQUNsRCxVQUFVLEdBQ1YsSUFBSSxHQUNKLDBDQUEwQyxHQUMxQyxnREFBZ0QsR0FDaEQsVUFBVSxHQUNWLElBQUksR0FDSixrREFBa0QsR0FDbEQsK0NBQStDLEdBQy9DLCtDQUErQyxHQUMvQyxvQ0FBb0MsR0FDcEMsb0RBQW9ELEdBQ3BELFVBQVUsR0FDVixJQUFJLEdBQ0osSUFBSSxHQUNKLDZDQUE2QyxHQUM3QyxnR0FBZ0csR0FDaEcsMENBQTBDLEdBQzFDLHdCQUF3QixHQUN4Qiw2QkFBNkIsR0FDN0IsSUFBSSxHQUNKLHVDQUF1QyxHQUN2QyxtQkFBbUIsR0FDbkIsaUNBQWlDLEdBQ2pDLGdDQUFnQyxHQUNoQyxtQ0FBbUMsR0FDbkMsS0FBSyxHQUNMLFVBQVUsR0FDVixJQUFJLEdBQ0osSUFBSSxHQUNKLDZDQUE2QyxHQUM3Qyw4Q0FBOEMsR0FDOUMscUNBQXFDLEdBQ3JDLHFEQUFxRCxHQUNyRCx5REFBeUQsR0FDekQsNEJBQTRCLEdBQzVCLEtBQUssR0FDTCxJQUFJLEdBQ0osMEZBQTBGLEdBQzFGLG1EQUFtRCxHQUNuRCxnRUFBZ0UsR0FDaEUsZ0VBQWdFLEdBQ2hFLGdFQUFnRSxHQUNoRSw2RUFBNkUsR0FDN0UsS0FBSyxHQUNMLFVBQVUsR0FDVixJQUFJLEdBQ0osSUFBSSxHQUNKLDBDQUEwQyxHQUMxQyxzRUFBc0UsR0FDdEUsNERBQTRELEdBQzVELEtBQUssR0FDTCxVQUFVLEdBQ1YsSUFBSSxHQUNKLElBQUksR0FDSiwwQ0FBMEMsR0FDMUMsK0NBQStDLEdBQy9DLHdCQUF3QixHQUN4QiwwREFBMEQsR0FDMUQsaURBQWlELEdBQ2pELCtHQUErRyxHQUMvRyxjQUFjLEdBQ2QsSUFBSSxHQUNKLHFEQUFxRCxHQUNyRCx5SEFBeUgsR0FDekgsNkJBQTZCLEdBQzdCLGNBQWMsR0FDZCxJQUFJLEdBQ0osd0RBQXdELEdBQ3hELGtJQUFrSSxHQUNsSSw2QkFBNkIsR0FDN0IsY0FBYyxHQUNkLElBQUksR0FDSixxQ0FBcUMsR0FDckMsS0FBSyxHQUNMLFVBQVUsR0FDVixJQUFJLEdBQ0osc0VBQXNFLEdBQ3RFLGtDQUFrQyxHQUNsQywwREFBMEQsR0FDMUQsZ0RBQWdELEdBQ2hELHVEQUF1RCxHQUN2RCxtRkFBbUYsR0FDbkYsa0JBQWtCLEdBQ2xCLElBQUksR0FDSiwyREFBMkQsR0FDM0QseUhBQXlILEdBQ3pILGtCQUFrQixHQUNsQixJQUFJLEdBQ0osOERBQThELEdBQzlELGtJQUFrSSxHQUNsSSxrQkFBa0IsR0FDbEIsSUFBSSxHQUNKLDhEQUE4RCxHQUM5RCxvSEFBb0gsR0FDcEgsa0JBQWtCLEdBQ2xCLGNBQWMsR0FDZCxJQUFJLEdBQ0osaUNBQWlDLEdBQ2pDLDBEQUEwRCxHQUMxRCwrQ0FBK0MsR0FDL0Msc0RBQXNELEdBQ3RELGlGQUFpRixHQUNqRixrQkFBa0IsR0FDbEIsSUFBSSxHQUNKLDBEQUEwRCxHQUMxRCxzSEFBc0gsR0FDdEgsa0JBQWtCLEdBQ2xCLElBQUksR0FDSiw2REFBNkQsR0FDN0QsK0hBQStILEdBQy9ILGtCQUFrQixHQUNsQixJQUFJLEdBQ0osNkRBQTZELEdBQzdELGtIQUFrSCxHQUNsSCxrQkFBa0IsR0FDbEIsY0FBYyxHQUNkLElBQUksR0FDSixpQ0FBaUMsR0FDakMsMERBQTBELEdBQzFELCtDQUErQyxHQUMvQyxzREFBc0QsR0FDdEQsaUZBQWlGLEdBQ2pGLGtCQUFrQixHQUNsQixJQUFJLEdBQ0osMERBQTBELEdBQzFELHNIQUFzSCxHQUN0SCxrQkFBa0IsR0FDbEIsSUFBSSxHQUNKLDZEQUE2RCxHQUM3RCwrSEFBK0gsR0FDL0gsa0JBQWtCLEdBQ2xCLElBQUksR0FDSiw2REFBNkQsR0FDN0Qsa0hBQWtILEdBQ2xILGtCQUFrQixHQUNsQixjQUFjLEdBQ2QsSUFBSSxHQUNKLGtDQUFrQyxHQUNsQywwREFBMEQsR0FDMUQsZ0RBQWdELEdBQ2hELHVEQUF1RCxHQUN2RCxtRkFBbUYsR0FDbkYsa0JBQWtCLEdBQ2xCLElBQUksR0FDSiwyREFBMkQsR0FDM0QseUhBQXlILEdBQ3pILGtCQUFrQixHQUNsQixJQUFJLEdBQ0osOERBQThELEdBQzlELGtJQUFrSSxHQUNsSSxrQkFBa0IsR0FDbEIsSUFBSSxHQUNKLDhEQUE4RCxHQUM5RCxvSEFBb0gsR0FDcEgsa0JBQWtCLEdBQ2xCLGNBQWMsR0FDZCxLQUFLLEdBQ0wsRUFBRSxDQUFDOztBQUVILGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxHQUN0QyxNQUFNLEdBQ04sSUFBSSxHQUNKLHFCQUFxQixHQUNyQixZQUFZLEdBQ1osdUJBQXVCLEdBQ3ZCLElBQUksR0FDSixNQUFNLEdBQ04sSUFBSSxHQUNKLHVCQUF1QixHQUN2QixxQkFBcUIsR0FDckIscUJBQXFCLEdBQ3JCLHNCQUFzQixHQUN0QixzQkFBc0IsR0FDdEIsSUFBSSxHQUNKLGtEQUFrRCxHQUNsRCxrQ0FBa0MsR0FDbEMsVUFBVSxHQUNWLElBQUksR0FDSixzREFBc0QsR0FDdEQsMEJBQTBCLEdBQzFCLFVBQVUsR0FDVixJQUFJLEdBQ0osc0RBQXNELEdBQ3RELDBCQUEwQixHQUMxQixVQUFVLEdBQ1YsTUFBTSxHQUNOLElBQUksR0FDSixxRkFBcUYsR0FDckYsSUFBSSxHQUNKLCtEQUErRCxHQUMvRCxJQUFJLEdBQ0osd0RBQXdELEdBQ3hELDZEQUE2RCxHQUM3RCxJQUFJLEdBQ0osOERBQThELEdBQzlELHlEQUF5RCxHQUN6RCxJQUFJLEdBQ0osK0JBQStCLEdBQy9CLGdDQUFnQyxHQUNoQyxzREFBc0QsR0FDdEQsNEJBQTRCLEdBQzVCLGlEQUFpRCxHQUNqRCxJQUFJLEdBQ0osOERBQThELEdBQzlELHlDQUF5QyxHQUN6QyxrQkFBa0IsR0FDbEIsSUFBSSxHQUNKLDhEQUE4RCxHQUM5RCxxREFBcUQsR0FDckQsbUVBQW1FLEdBQ25FLDZDQUE2QyxHQUM3QyxpQkFBaUIsR0FDakIsdURBQXVELEdBQ3ZELHFGQUFxRixHQUNyRixvREFBb0QsR0FDcEQsOERBQThELEdBQzlELGtCQUFrQixHQUNsQixhQUFhLEdBQ2IsNEJBQTRCLEdBQzVCLElBQUksR0FDSiw4REFBOEQsR0FDOUQseUNBQXlDLEdBQ3pDLGtFQUFrRSxHQUNsRSx5REFBeUQsR0FDekQsdUVBQXVFLEdBQ3ZFLDBDQUEwQyxHQUMxQyxxQkFBcUIsR0FDckIsMkRBQTJELEdBQzNELHlGQUF5RixHQUN6Rix3REFBd0QsR0FDeEQseURBQXlELEdBQ3pELHNCQUFzQixHQUN0QixpQkFBaUIsR0FDakIsa0VBQWtFLEdBQ2xFLHVFQUF1RSxHQUN2RSwwQ0FBMEMsR0FDMUMscUJBQXFCLEdBQ3JCLHNDQUFzQyxHQUN0QyxzQkFBc0IsR0FDdEIsa0JBQWtCLEdBQ2xCLGNBQWMsR0FDZCxJQUFJLEdBQ0osZ0NBQWdDLEdBQ2hDLGtFQUFrRSxHQUNsRSxJQUFJLEdBQ0osdUNBQXVDLEdBQ3ZDLCtFQUErRSxHQUMvRSxjQUFjLEdBQ2QsSUFBSSxHQUNKLHdDQUF3QyxHQUN4QywrREFBK0QsR0FDL0QsK0JBQStCLEdBQy9CLDJEQUEyRCxHQUMzRCxzRkFBc0YsR0FDdEYsc0RBQXNELEdBQ3RELGFBQWEsR0FDYixJQUFJLEdBQ0osNkVBQTZFLEdBQzdFLGNBQWMsR0FDZCxLQUFLLEdBQ0wsRUFBRSxDQUFDOztBQUVILGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUNuQyxzRUFBc0UsR0FDdEUsSUFBSSxHQUNKLGtDQUFrQyxHQUNsQywrRkFBK0YsR0FDL0YscUhBQXFILEdBQ3JILGtIQUFrSCxHQUNsSCxJQUFJLEdBQ0osNkVBQTZFLEdBQzdFLHVFQUF1RSxHQUN2RSxJQUFJLEdBQ0osZ0ZBQWdGLEdBQ2hGLDZDQUE2QyxHQUM3QywyQ0FBMkMsR0FDM0MscUZBQXFGLEdBQ3JGLElBQUksR0FDSix5RUFBeUUsR0FDekUsd0NBQXdDLEdBQ3hDLCtEQUErRCxHQUMvRCxJQUFJLEdBQ0osOEVBQThFLEdBQzlFLDJDQUEyQyxHQUMzQyx1RUFBdUUsR0FDdkUsSUFBSSxHQUNKLG1FQUFtRSxHQUNuRSxxQ0FBcUMsR0FDckMsMkVBQTJFLEdBQzNFLElBQUksR0FDSixzREFBc0QsR0FDdEQsbURBQW1ELEdBQ25ELG1IQUFtSCxHQUNuSCxJQUFJLEdBQ0osK0NBQStDLEdBQy9DLHdDQUF3QyxHQUN4QyxzQ0FBc0MsR0FDdEMsSUFBSSxHQUNKLFVBQVUsR0FDVixFQUFFLENBQUM7O0FBRUgsYUFBYSxDQUFDLCtCQUErQixDQUFDLEdBQzlDLG1EQUFtRCxHQUNuRCw2RkFBNkYsR0FDN0YsSUFBSSxHQUNKLG9DQUFvQyxHQUNwQyx1Q0FBdUMsR0FDdkMsVUFBVSxHQUNWLElBQUksR0FDSixzQkFBc0IsR0FDdEIsd0NBQXdDLEdBQ3hDLDZDQUE2QyxHQUM3QyxhQUFhLEdBQ2IsZ0RBQWdELEdBQ2hELGNBQWMsR0FDZCxLQUFLLEdBQ0wsRUFBRSxDQUFDOztBQUVILGFBQWEsQ0FBQyw4QkFBOEIsQ0FBQyxHQUM3Qyx1REFBdUQsR0FDdkQsNEVBQTRFLEdBQzVFLHlDQUF5QyxHQUN6Qyx1Q0FBdUMsR0FDdkMsVUFBVSxHQUNWLEVBQUUsQ0FBQzs7QUFFSCxhQUFhLENBQUMsNkJBQTZCLENBQUMsR0FDNUMsd0NBQXdDLEdBQ3hDLDRFQUE0RSxHQUM1RSxnREFBZ0QsR0FDaEQsMkVBQTJFLEdBQzNFLHdEQUF3RCxHQUN4RCwyR0FBMkcsR0FDM0csK0NBQStDLEdBQy9DLG1CQUFtQixHQUNuQixTQUFTLEdBQ1QsOENBQThDLEdBQzlDLFVBQVUsR0FDVixFQUFFLENBQUM7O0FBRUgsYUFBYSxDQUFDLHNDQUFzQyxDQUFDLEdBQ3JELGdDQUFnQyxHQUNoQyxpR0FBaUcsR0FDakcsSUFBSSxHQUNKLCtCQUErQixHQUMvQixxREFBcUQsR0FDckQsaURBQWlELEdBQ2pELDRFQUE0RSxHQUM1RSxnREFBZ0QsR0FDaEQsSUFBSSxHQUNKLHNHQUFzRyxHQUN0RyxtREFBbUQsR0FDbkQsc0RBQXNELEdBQ3RELElBQUksR0FDSixlQUFlLEdBQ2YsdUJBQXVCLEdBQ3ZCLDZCQUE2QixHQUM3QixJQUFJLEdBQ0osa0RBQWtELEdBQ2xELHNDQUFzQyxHQUN0QyxJQUFJLEdBQ0osNERBQTRELEdBQzVELGtCQUFrQixHQUNsQixpQ0FBaUMsR0FDakMsSUFBSSxHQUNKLG9GQUFvRixHQUNwRixnQ0FBZ0MsR0FDaEMsSUFBSSxHQUNKLHFDQUFxQyxHQUNyQyxxQ0FBcUMsR0FDckMsS0FBSyxHQUNMLEVBQUUsQ0FBQzs7QUFFSCxhQUFhLENBQUMsc0JBQXNCLENBQUMsR0FDckMsTUFBTSxHQUNOLElBQUksR0FDSixxQkFBcUIsR0FDckIsWUFBWSxHQUNaLHVCQUF1QixHQUN2QixJQUFJLEdBQ0osTUFBTSxHQUNOLElBQUksR0FDSixzQkFBc0IsR0FDdEIscUJBQXFCLEdBQ3JCLHFCQUFxQixHQUNyQixzQkFBc0IsR0FDdEIsc0JBQXNCLEdBQ3RCLElBQUksR0FDSixrREFBa0QsR0FDbEQsa0NBQWtDLEdBQ2xDLFVBQVUsR0FDVixJQUFJLEdBQ0osc0RBQXNELEdBQ3RELDBCQUEwQixHQUMxQixVQUFVLEdBQ1YsSUFBSSxHQUNKLHNEQUFzRCxHQUN0RCwwQkFBMEIsR0FDMUIsVUFBVSxHQUNWLElBQUksR0FDSix1QkFBdUIsR0FDdkIsNEJBQTRCLEdBQzVCLDJCQUEyQixHQUMzQixNQUFNLEdBQ04sSUFBSSxHQUNKLG9GQUFvRixHQUNwRixJQUFJLEdBQ0osK0RBQStELEdBQy9ELElBQUksR0FDSix3REFBd0QsR0FDeEQsNkRBQTZELEdBQzdELElBQUksR0FDSixtQ0FBbUMsR0FDbkMseURBQXlELEdBQ3pELElBQUksR0FDSiwrQkFBK0IsR0FDL0IsZ0NBQWdDLEdBQ2hDLHNEQUFzRCxHQUN0RCw0QkFBNEIsR0FDNUIsaURBQWlELEdBQ2pELElBQUksR0FDSiw4REFBOEQsR0FDOUQseUNBQXlDLEdBQ3pDLGtCQUFrQixHQUNsQixJQUFJLEdBQ0osOERBQThELEdBQzlELHFEQUFxRCxHQUNyRCxtRUFBbUUsR0FDbkUsNkNBQTZDLEdBQzdDLGlCQUFpQixHQUNqQix1REFBdUQsR0FDdkQscUZBQXFGLEdBQ3JGLG9EQUFvRCxHQUNwRCw4REFBOEQsR0FDOUQsa0JBQWtCLEdBQ2xCLGFBQWEsR0FDYiw0QkFBNEIsR0FDNUIsSUFBSSxHQUNKLDhEQUE4RCxHQUM5RCx5Q0FBeUMsR0FDekMsa0VBQWtFLEdBQ2xFLHlEQUF5RCxHQUN6RCx1RUFBdUUsR0FDdkUsMENBQTBDLEdBQzFDLHFCQUFxQixHQUNyQiwyREFBMkQsR0FDM0QseUZBQXlGLEdBQ3pGLHdEQUF3RCxHQUN4RCx5REFBeUQsR0FDekQsc0JBQXNCLEdBQ3RCLGlCQUFpQixHQUNqQixrRUFBa0UsR0FDbEUsdUVBQXVFLEdBQ3ZFLDBDQUEwQyxHQUMxQyxxQkFBcUIsR0FDckIsc0NBQXNDLEdBQ3RDLHNCQUFzQixHQUN0QixrQkFBa0IsR0FDbEIsY0FBYyxHQUNkLElBQUksR0FDSix1Q0FBdUMsR0FDdkMsb0NBQW9DLEdBQ3BDLElBQUksR0FDSixpRUFBaUUsR0FDakUsK0VBQStFLEdBQy9FLElBQUksR0FDSiw4Q0FBOEMsR0FDOUMsZ0VBQWdFLEdBQ2hFLFNBQVMsR0FDVCxJQUFJLEdBQ0osb0ZBQW9GLEdBQ3BGLElBQUksR0FDSix1Q0FBdUMsR0FDdkMsaUdBQWlHLEdBQ2pHLGNBQWMsR0FDZCxJQUFJLEdBQ0osd0NBQXdDLEdBQ3hDLCtDQUErQyxHQUMvQywyQkFBMkIsR0FDM0IsK0JBQStCLEdBQy9CLDJEQUEyRCxHQUMzRCxzRkFBc0YsR0FDdEYsc0RBQXNELEdBQ3RELGFBQWEsR0FDYiwrRkFBK0YsR0FDL0YsY0FBYyxHQUNkLEtBQUssR0FDTCxFQUFFLENBQUM7O0FBRUgsYUFBYSxDQUFDLG1CQUFtQixDQUFDLEdBQ2xDLElBQUksR0FDSixxRUFBcUUsR0FDckUsaUNBQWlDLEdBQ2pDLDBDQUEwQyxHQUMxQyxJQUFJLEdBQ0osNEVBQTRFLEdBQzVFLHVGQUF1RixHQUN2Rix1RkFBdUYsR0FDdkYscUZBQXFGLEdBQ3JGLHlEQUF5RCxHQUN6RCxpR0FBaUcsR0FDakcsaUNBQWlDLEdBQ2pDLEVBQUUsQ0FBQzs7QUFFSCxhQUFhLENBQUMsK0JBQStCLENBQUMsR0FDOUMsOEJBQThCLEdBQzlCLHlCQUF5QixHQUN6QixnQ0FBZ0MsR0FDaEMsK0JBQStCLEdBQy9CLHFDQUFxQyxHQUNyQyx1Q0FBdUMsR0FDdkMsSUFBSSxHQUNKLGdDQUFnQyxHQUNoQyx1Q0FBdUMsR0FDdkMsSUFBSSxHQUNKLGdDQUFnQyxHQUNoQyxJQUFJLEdBQ0oseUJBQXlCLEdBQ3pCLDRCQUE0QixHQUM1QixrQ0FBa0MsR0FDbEMsSUFBSSxHQUNKLDJDQUEyQyxHQUMzQyxJQUFJLEdBQ0osOERBQThELEdBQzlELGlDQUFpQyxHQUNqQyxxQ0FBcUMsR0FDckMsVUFBVSxHQUNWLElBQUksR0FDSiwyQ0FBMkMsR0FDM0MsOEJBQThCLEdBQzlCLGtDQUFrQyxHQUNsQyxVQUFVLEdBQ1Ysd0RBQXdELEdBQ3hELElBQUksR0FDSiwyQkFBMkIsR0FDM0IsNkJBQTZCLEdBQzdCLDZCQUE2QixHQUM3QiwyQkFBMkIsR0FDM0IsMkJBQTJCLEdBQzNCLElBQUksR0FDSixzQkFBc0IsR0FDdEIsNkJBQTZCLEdBQzdCLDhCQUE4QixHQUM5QixJQUFJLEdBQ0osNkJBQTZCLEdBQzdCLElBQUksR0FDSiwwQkFBMEIsR0FDMUIsb0NBQW9DLEdBQ3BDLHNEQUFzRCxHQUN0RCxJQUFJLEdBQ0osMkZBQTJGLEdBQzNGLDJDQUEyQyxHQUMzQyxpREFBaUQsR0FDakQsa0JBQWtCLEdBQ2xCLHVCQUF1QixHQUN2QixhQUFhLEdBQ2IsMENBQTBDLEdBQzFDLDJDQUEyQyxHQUMzQywwQ0FBMEMsR0FDMUMsaUpBQWlKLEdBQ2pKLGNBQWMsR0FDZCxJQUFJLEdBQ0osOEVBQThFLEdBQzlFLDRFQUE0RSxHQUM1RSxrREFBa0QsR0FDbEQsd0JBQXdCLEdBQ3hCLGFBQWEsR0FDYixjQUFjLEdBQ2QsSUFBSSxHQUNKLDhCQUE4QixHQUM5QixJQUFJLEdBQ0osd0VBQXdFLEdBQ3hFLHNIQUFzSCxHQUN0SCxzSEFBc0gsR0FDdEgsdUNBQXVDLEdBQ3ZDLGdIQUFnSCxHQUNoSCxjQUFjLEdBQ2QsSUFBSSxHQUNKLCtCQUErQixHQUMvQixJQUFJLEdBQ0osNkJBQTZCLEdBQzdCLEtBQUssR0FDTCxFQUFFLENBQUM7O0FBRUgsYUFBYSxDQUFDLDZCQUE2QixDQUFDLEdBQzVDLDhCQUE4QixHQUM5Qix5QkFBeUIsR0FDekIsZ0NBQWdDLEdBQ2hDLCtCQUErQixHQUMvQixxQ0FBcUMsR0FDckMscUNBQXFDLEdBQ3JDLHVDQUF1QyxHQUN2QyxJQUFJLEdBQ0oseUJBQXlCLEdBQ3pCLDZCQUE2QixHQUM3QixnQ0FBZ0MsR0FDaEMsdUNBQXVDLEdBQ3ZDLElBQUksR0FDSiw4QkFBOEIsR0FDOUIsMkJBQTJCLEdBQzNCLDJCQUEyQixHQUMzQiw4QkFBOEIsR0FDOUIsNEJBQTRCLEdBQzVCLElBQUksR0FDSiwyQ0FBMkMsR0FDM0MsSUFBSSxHQUNKLHlCQUF5QixHQUN6Qiw0QkFBNEIsR0FDNUIsa0NBQWtDLEdBQ2xDLElBQUksR0FDSiwyQkFBMkIsR0FDM0IsNkJBQTZCLEdBQzdCLDZCQUE2QixHQUM3QiwyQkFBMkIsR0FDM0IsMkJBQTJCLEdBQzNCLElBQUksR0FDSiwyQ0FBMkMsR0FDM0MsNkNBQTZDLEdBQzdDLG1EQUFtRCxHQUNuRCxLQUFLLEdBQ0wsSUFBSSxHQUNKLGlCQUFpQixHQUNqQiw2QkFBNkIsR0FDN0IsOEJBQThCLEdBQzlCLElBQUksR0FDSiwwQkFBMEIsR0FDMUIsZ0NBQWdDLEdBQ2hDLElBQUksR0FDSixtQkFBbUIsR0FDbkIsc0VBQXNFLEdBQ3RFLElBQUksR0FDSix3REFBd0QsR0FDeEQsZ0ZBQWdGLEdBQ2hGLDhGQUE4RixHQUM5Rix5REFBeUQsR0FDekQsb0ZBQW9GLEdBQ3BGLGdEQUFnRCxHQUNoRCxJQUFJLEdBQ0osK0VBQStFLEdBQy9FLHdIQUF3SCxHQUN4SCxJQUFJLEdBQ0osdURBQXVELEdBQ3ZELDhDQUE4QyxHQUM5QywwREFBMEQsR0FDMUQsK0RBQStELEdBQy9ELElBQUksR0FDSixtREFBbUQsR0FDbkQsaUNBQWlDLEdBQ2pDLElBQUksR0FDSixtQ0FBbUMsR0FDbkMsSUFBSSxHQUNKLGtDQUFrQyxHQUNsQyw2REFBNkQsR0FDN0QscUZBQXFGLEdBQ3JGLGNBQWMsR0FDZCxJQUFJLEdBQ0osNkNBQTZDLEdBQzdDLHlIQUF5SCxHQUN6SCw4RUFBOEUsR0FDOUUscUZBQXFGLEdBQ3JGLElBQUksR0FDSiwrQkFBK0IsR0FDL0IsS0FBSyxHQUNMLEVBQUUsQ0FBQzs7QUFFSCxhQUFhLENBQUMsbUNBQW1DLENBQUMsR0FDbEQsOEJBQThCLEdBQzlCLHlCQUF5QixHQUN6QixnQ0FBZ0MsR0FDaEMsK0JBQStCLEdBQy9CLHFDQUFxQyxHQUNyQyx1Q0FBdUMsR0FDdkMsSUFBSSxHQUNKLGdDQUFnQyxHQUNoQyx1Q0FBdUMsR0FDdkMsSUFBSSxHQUNKLDRCQUE0QixHQUM1QiwwQkFBMEIsR0FDMUIseUJBQXlCLEdBQ3pCLGtDQUFrQyxHQUNsQyxJQUFJLEdBQ0osbUNBQW1DLEdBQ25DLElBQUksR0FDSixpQ0FBaUMsR0FDakMsZ0NBQWdDLEdBQ2hDLFVBQVUsR0FDVixJQUFJLEdBQ0osbURBQW1ELEdBQ25ELDBDQUEwQyxHQUMxQyxVQUFVLEdBQ1YsSUFBSSxHQUNKLHdDQUF3QyxHQUN4QyxnQ0FBZ0MsR0FDaEMsVUFBVSxHQUNWLElBQUksR0FDSiwyQkFBMkIsR0FDM0IsNkJBQTZCLEdBQzdCLDZCQUE2QixHQUM3QiwyQkFBMkIsR0FDM0IsMkJBQTJCLEdBQzNCLElBQUksR0FDSixzQkFBc0IsR0FDdEIsNkJBQTZCLEdBQzdCLDhCQUE4QixHQUM5QixJQUFJLEdBQ0osNkJBQTZCLEdBQzdCLHFDQUFxQyxHQUNyQyxJQUFJLEdBQ0osdUNBQXVDLEdBQ3ZDLDJDQUEyQyxHQUMzQyx5RUFBeUUsR0FDekUsY0FBYyxHQUNkLElBQUksR0FDSiw2REFBNkQsR0FDN0QsNENBQTRDLEdBQzVDLDhEQUE4RCxHQUM5RCxjQUFjLEdBQ2QsSUFBSSxHQUNKLHVFQUF1RSxHQUN2RSwwRkFBMEYsR0FDMUYsb0NBQW9DLEdBQ3BDLGNBQWMsR0FDZCxJQUFJLEdBQ0osaUZBQWlGLEdBQ2pGLG1EQUFtRCxHQUNuRCw2Q0FBNkMsR0FDN0MsbUNBQW1DLEdBQ25DLGNBQWMsR0FDZCxJQUFJLEdBQ0osd0RBQXdELEdBQ3hELDhCQUE4QixHQUM5QixJQUFJLEdBQ0osOENBQThDLEdBQzlDLDhDQUE4QyxHQUM5Qyw2RUFBNkUsR0FDN0UsOENBQThDLEdBQzlDLHVFQUF1RSxHQUN2RSxnQ0FBZ0MsR0FDaEMsY0FBYyxHQUNkLElBQUksR0FDSixnRUFBZ0UsR0FDaEUsK0JBQStCLEdBQy9CLElBQUksR0FDSiw2QkFBNkIsR0FDN0IsS0FBSyxHQUNMLEVBQUUsQ0FBQzs7QUFFSCxhQUFhLENBQUMsaUNBQWlDLENBQUMsR0FDaEQsOEJBQThCLEdBQzlCLHlCQUF5QixHQUN6QixnQ0FBZ0MsR0FDaEMsK0JBQStCLEdBQy9CLHFDQUFxQyxHQUNyQyxxQ0FBcUMsR0FDckMsdUNBQXVDLEdBQ3ZDLElBQUksR0FDSix5QkFBeUIsR0FDekIsNkJBQTZCLEdBQzdCLGdDQUFnQyxHQUNoQyx1Q0FBdUMsR0FDdkMsSUFBSSxHQUNKLDhCQUE4QixHQUM5QiwyQkFBMkIsR0FDM0IsSUFBSSxHQUNKLHlEQUF5RCxHQUN6RCxtQ0FBbUMsR0FDbkMsZ0NBQWdDLEdBQ2hDLHVDQUF1QyxHQUN2QyxTQUFTLEdBQ1QsK0NBQStDLEdBQy9DLFVBQVUsR0FDVixJQUFJLEdBQ0osc0NBQXNDLEdBQ3RDLGdDQUFnQyxHQUNoQyw4Q0FBOEMsR0FDOUMscURBQXFELEdBQ3JELG1FQUFtRSxHQUNuRSxpQ0FBaUMsR0FDakMsVUFBVSxHQUNWLElBQUksR0FDSiw0QkFBNEIsR0FDNUIsMEJBQTBCLEdBQzFCLHlCQUF5QixHQUN6QixrQ0FBa0MsR0FDbEMsSUFBSSxHQUNKLDJCQUEyQixHQUMzQixpQ0FBaUMsR0FDakMsa0NBQWtDLEdBQ2xDLGdDQUFnQyxHQUNoQyxVQUFVLEdBQ1YsSUFBSSxHQUNKLCtEQUErRCxHQUMvRCxtREFBbUQsR0FDbkQsMENBQTBDLEdBQzFDLFVBQVUsR0FDVixJQUFJLEdBQ0osd0NBQXdDLEdBQ3hDLGdDQUFnQyxHQUNoQyxVQUFVLEdBQ1YsSUFBSSxHQUNKLDJCQUEyQixHQUMzQiw2QkFBNkIsR0FDN0IsNkJBQTZCLEdBQzdCLDJCQUEyQixHQUMzQiwyQkFBMkIsR0FDM0IsSUFBSSxHQUNKLGlCQUFpQixHQUNqQiw2QkFBNkIsR0FDN0IsOEJBQThCLEdBQzlCLElBQUksR0FDSixzQkFBc0IsR0FDdEIscUNBQXFDLEdBQ3JDLG9DQUFvQyxHQUNwQyx3Q0FBd0MsR0FDeEMsdURBQXVELEdBQ3ZELGtCQUFrQixHQUNsQixjQUFjLEdBQ2QsSUFBSSxHQUNKLGlEQUFpRCxHQUNqRCx1REFBdUQsR0FDdkQsMkRBQTJELEdBQzNELGNBQWMsR0FDZCxJQUFJLEdBQ0osbUJBQW1CLEdBQ25CLHdEQUF3RCxHQUN4RCxJQUFJLEdBQ0osb0NBQW9DLEdBQ3BDLGlEQUFpRCxHQUNqRCw2Q0FBNkMsR0FDN0MsNENBQTRDLEdBQzVDLHlFQUF5RSxHQUN6RSxJQUFJLEdBQ0osOENBQThDLEdBQzlDLCtCQUErQixHQUMvQixJQUFJLEdBQ0osc0VBQXNFLEdBQ3RFLCtCQUErQixHQUMvQixJQUFJLEdBQ0osaURBQWlELEdBQ2pELGtDQUFrQyxHQUNsQyxJQUFJLEdBQ0osMkNBQTJDLEdBQzNDLGNBQWMsR0FDZCxJQUFJLEdBQ0osdURBQXVELEdBQ3ZELGlFQUFpRSxHQUNqRSxJQUFJLEdBQ0osNENBQTRDLEdBQzVDLDBDQUEwQyxHQUMxQyxJQUFJLEdBQ0osbURBQW1ELEdBQ25ELGlDQUFpQyxHQUNqQyxJQUFJLEdBQ0oseUJBQXlCLEdBQ3pCLDhCQUE4QixHQUM5Qiw4REFBOEQsR0FDOUQsMEJBQTBCLEdBQzFCLElBQUksR0FDSiw0Q0FBNEMsR0FDNUMsOEJBQThCLEdBQzlCLG1DQUFtQyxHQUNuQyxJQUFJLEdBQ0osNENBQTRDLEdBQzVDLG1DQUFtQyxHQUNuQyxJQUFJLEdBQ0oseURBQXlELEdBQ3pELG1GQUFtRixHQUNuRixjQUFjLEdBQ2QsSUFBSSxHQUNKLGlCQUFpQixHQUNqQixtQ0FBbUMsR0FDbkMsSUFBSSxHQUNKLHlEQUF5RCxHQUN6RCxpRkFBaUYsR0FDakYsSUFBSSxHQUNKLCtCQUErQixHQUMvQixLQUFLLEdBQ0wsRUFBRSxDQUFDOztxQkFFWSxhQUFhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQ25qQ1YsZ0JBQWdCOzs7OzhCQUNQLG9CQUFvQjs7OztrQ0FDdEIsd0JBQXdCOzs7O3dCQUNqQyxVQUFVOzs7Ozs7SUFHTCxPQUFPO0FBRWIsYUFGTSxPQUFPLENBRVosRUFBRSxFQUFFLElBQUksRUFBZ0I7WUFBZCxPQUFPLHlEQUFHLEVBQUU7OzhCQUZqQixPQUFPOztBQUdwQixZQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNiLFlBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ2xDLFlBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNkLGdCQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNyQjtBQUNELFlBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7QUFFWixZQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixZQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN0QixZQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQixZQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUN4QixZQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUN4QixZQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQixZQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNwQixZQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDbkMsWUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQy9CLFlBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFlBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDOzs7O0FBSWhCLFlBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQzs7O0FBRzdFLFlBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7O0FBRTdCLGdCQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUM3RCxtQkFBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUM3QyxtQkFBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDekM7OztBQUdELGVBQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNuQyxlQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFjLEVBQUUsSUFBSSxFQUFKLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUV0RSxZQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25CLDhCQUFJLEtBQUssdUJBQXFCLElBQUksQ0FBQyxJQUFJLENBQUcsQ0FBQztLQUM5Qzs7Ozs7O2lCQXhDZ0IsT0FBTzs7ZUEyQ2pCLG1CQUFHO0FBQ04sZ0JBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUU7QUFDdkIsc0NBQUksS0FBSyxnQkFBYSxJQUFJLENBQUMsSUFBSSxzREFBK0MsSUFBSSxDQUFDLFlBQVksUUFBSSxDQUFDO0FBQ3BHLHVCQUFPO2FBQ1Y7O0FBRUQsZ0JBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2IsdUJBQU87YUFDVjtBQUNELGdCQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEMsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLG1CQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDakIsZ0JBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLG1CQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLGdCQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQixrQ0FBSSxLQUFLLHlCQUF1QixJQUFJLENBQUMsSUFBSSxDQUFHLENBQUM7U0FDaEQ7OztlQUVNLGtCQUFHO0FBQ04sZ0JBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN2Qjs7O2VBRU8sbUJBQUc7QUFDUCxnQkFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsRUFBRTtBQUN4QixzQ0FBSSxLQUFLLGdCQUFhLElBQUksQ0FBQyxJQUFJLHFEQUE4QyxJQUFJLENBQUMsWUFBWSxRQUFJLENBQUM7YUFDdEc7O0FBRUQsZ0JBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwQixnQkFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsRUFBRTtBQUN4QixvQkFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2xCO1NBQ0o7OztlQUVHLGNBQUMsSUFBSSxFQUFFO0FBQ1AsZ0JBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2IsdUJBQU87YUFDVjtBQUNELGdCQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUMxQixvQkFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRTtBQUM3Qix3QkFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDL0MsMkJBQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2lCQUM3QjthQUNKO0FBQ0QsZ0JBQUksT0FBTyxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3hDLG9CQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEQsdUJBQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUN4QztTQUNKOzs7ZUFFRyxjQUFDLE9BQU8sRUFBRTs7O0FBQ1YsZ0JBQUksQ0FBQyxPQUFPLEVBQUU7QUFDVix1QkFBTyxJQUFJLENBQUMsT0FBTyxJQUFJLFNBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hEOztBQUVELGdCQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQixnQkFBSSxPQUFPLE9BQU8sQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQ2pDLG9CQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUN6QixvQkFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3JDLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQ3hCLG9CQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUM3QixvQkFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzdDLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUN4RCxvQkFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDMUIsb0JBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDdEU7O0FBRUQsZ0JBQUksQ0FBQyxPQUFPLEdBQ1IsQUFBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQU07QUFBRSxzQkFBSyxnQkFBZ0IsRUFBRSxDQUFDLEFBQUMsYUFBWTthQUFFLENBQUMsSUFDbkYsU0FBUSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsbUJBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUN2Qjs7Ozs7ZUFHSyxnQkFBQyxHQUFHLEVBQWdCOzs7Z0JBQWQsT0FBTyx5REFBRyxFQUFFOztBQUNwQixnQkFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDYix1QkFBTzthQUNWOztBQUVELGdCQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7QUFDbEIsbUJBQUcsR0FBRyx3QkFBTSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNqRDs7QUFFRCxnQkFBSSxDQUFDLEdBQUcsR0FBRyx3QkFBTSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxnQkFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3ZCLGdCQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzs7QUFFekIsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsYUFBWSxVQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUs7QUFDNUMsb0JBQUksS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDeEIscUJBQUssQ0FBQyxNQUFNLEdBQUcsWUFBTTtBQUNqQix3QkFBSTtBQUNBLCtCQUFLLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7cUJBQ25DLENBQ0QsT0FBTyxDQUFDLEVBQUU7QUFDTiwrQkFBSyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLDhDQUFJLElBQUksZ0JBQWEsT0FBSyxJQUFJLGtDQUEyQixPQUFLLE1BQU0sU0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckYsK0JBQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxtQ0FBaUMsT0FBSyxNQUFNLEFBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO3FCQUNySDs7QUFFRCwyQkFBSyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ25CLDJCQUFPLFFBQU0sQ0FBQztpQkFDakIsQ0FBQztBQUNGLHFCQUFLLENBQUMsT0FBTyxHQUFHLFVBQUEsQ0FBQyxFQUFJOztBQUVqQiwyQkFBSyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLDBDQUFJLElBQUksZ0JBQWEsT0FBSyxJQUFJLGtDQUEyQixPQUFLLE1BQU0sU0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckYsMkJBQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxtQ0FBaUMsT0FBSyxNQUFNLEFBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2xILDJCQUFPLFFBQU0sQ0FBQztpQkFDakIsQ0FBQztBQUNGLHFCQUFLLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNoQyxxQkFBSyxDQUFDLEdBQUcsR0FBRyxPQUFLLE1BQU0sQ0FBQzthQUMzQixDQUFDLENBQUM7QUFDSCxtQkFBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3ZCOzs7OztlQUdNLGlCQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFnQjtnQkFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ3JDLGdCQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQixnQkFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7O0FBRXJCLGdCQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQixnQkFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7O0FBRTFCLGdCQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCLGdCQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUUzQixnQkFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkIsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsbUJBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUN2Qjs7Ozs7ZUFHUyxvQkFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pCLGdCQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7OztBQUdqQixnQkFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7QUFDN0IsdUJBQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzdDOztBQUVELGdCQUFJLE9BQU8sWUFBWSxpQkFBaUIsSUFDcEMsT0FBTyxZQUFZLGdCQUFnQixJQUNuQyxPQUFPLFlBQVksZ0JBQWdCLEVBQUU7QUFDckMsb0JBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3RCLG9CQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQzs7QUFFN0Isb0JBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckIsb0JBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUIsTUFDSTtBQUNELG9CQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNwQixvQkFBSSxHQUFHLDZDQUEwQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxzQkFBb0IsQ0FBQztBQUN4RixtQkFBRywrREFBK0QsQ0FBQztBQUNuRSxzQ0FBSSxJQUFJLGdCQUFhLElBQUksQ0FBQyxJQUFJLFlBQU0sR0FBRyxFQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ3BELHVCQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLE9BQU8sc0NBQW9DLEdBQUcsQUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3RHOztBQUVELGdCQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQixnQkFBSSxDQUFDLE9BQU8sR0FBRyxTQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxtQkFBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3ZCOzs7OztlQUdLLGtCQUFlO2dCQUFkLE9BQU8seURBQUcsRUFBRTs7QUFDZixnQkFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDYix1QkFBTzthQUNWOztBQUVELGdCQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDWixnQkFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRyxPQUFPLENBQUMsbUJBQW1CLEtBQUssS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUUsQ0FBQztBQUN6RyxnQkFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxPQUFPLENBQUMsOEJBQThCLElBQUksS0FBSyxDQUFDLENBQUM7OztBQUc3RyxnQkFBSSxJQUFJLENBQUMsTUFBTSxZQUFZLGlCQUFpQixJQUFJLElBQUksQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLElBQ2xGLElBQUksQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEFBQUMsRUFBRTs7QUFFbkUsb0JBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDL0Isb0JBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDakMsb0JBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDN0c7O2lCQUVJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUU7QUFDbEMsd0JBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDekk7O0FBRUQsbUJBQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25DOzs7OztlQUdXLHdCQUFlO2dCQUFkLE9BQU8seURBQUcsRUFBRTs7QUFDckIsZ0JBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2IsdUJBQU87YUFDVjs7QUFFRCxtQkFBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQzs7QUFFbEQsZ0JBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDakIsZ0JBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7Ozs7O0FBTVosZ0JBQUksd0JBQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSx3QkFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQy9ELG9CQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2QixrQkFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWMsSUFBSyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEFBQUMsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDaEksa0JBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLElBQUssT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsTUFBTSxBQUFDLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDOztBQUVoSSxvQkFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRTtBQUNoQyx3QkFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDMUIsc0JBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDaEYsc0JBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLHNCQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDcEMsTUFDSSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFO0FBQ3JDLHdCQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztBQUMxQixzQkFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEUsc0JBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNyRSxNQUNJLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7QUFDdEMsd0JBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzNCLHNCQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuRSxzQkFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3RFO2FBQ0osTUFDSTs7O0FBR0Qsb0JBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLGtCQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDckUsa0JBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQzs7QUFFckUsb0JBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7QUFDakMsd0JBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzNCLHNCQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuRSxzQkFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3RFLE1BQ0k7O0FBQ0Qsd0JBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzFCLHNCQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRSxzQkFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3JFO2FBQ0o7O0FBRUQsbUJBQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25DOzs7OztlQUdlLDRCQUFHO0FBQ2YsZ0JBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNkLHFCQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDeEIsd0JBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7OztBQUc3Qix3QkFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQzdDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN0QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDdEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDNUIsQ0FBQzs7O0FBR0Ysd0JBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFDO2FBQ0o7U0FDSjs7O1dBbFRnQixPQUFPOzs7cUJBQVAsT0FBTztBQXlUNUIsT0FBTyxDQUFDLE1BQU0sR0FBRyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQzFDLFdBQU8sSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztDQUN6QyxDQUFDOztBQUVGLE9BQU8sQ0FBQyxNQUFNLEdBQUcsVUFBVSxJQUFJLEVBQUU7QUFDN0IsUUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3hCLGVBQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDbkM7Q0FDSixDQUFDOztBQUVGLE9BQU8sQ0FBQyxPQUFPLEdBQUcsVUFBVSxJQUFJLEVBQUU7QUFDOUIsUUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3hCLGVBQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDcEM7Q0FDSixDQUFDOzs7QUFHRixPQUFPLENBQUMsT0FBTyxHQUFHLFVBQVUsRUFBRSxFQUFFO0FBQzVCLFFBQUksUUFBUSxHQUFHLGFBQVksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7Ozs7QUFDN0MsMENBQWMsUUFBUSw0R0FBRTtnQkFBZixDQUFDOztBQUNOLGdCQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLGdCQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ25CLHVCQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDckI7U0FDSjs7Ozs7Ozs7Ozs7Ozs7O0NBQ0osQ0FBQzs7O0FBR0YsT0FBTyxDQUFDLGFBQWEsR0FBRyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0MsUUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QyxXQUFPLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDM0YsQ0FBQzs7O0FBR0YsT0FBTyxDQUFDLHFCQUFxQixHQUFHLFVBQVUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUU7QUFDeEUsUUFBSSxhQUFhLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRWhFLFdBQU8sQ0FDSCxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUM1QixhQUFhLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUMzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUEsR0FBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQzdDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQSxHQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDL0MsQ0FBQztDQUNMLENBQUM7Ozs7QUFJRixPQUFPLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFO0FBQy9DLFFBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNqQixRQUFJLFFBQVEsRUFBRTtBQUNWLGFBQUssSUFBSSxPQUFPLElBQUksUUFBUSxFQUFFO0FBQzFCLGdCQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Ozs7QUFJL0IsZ0JBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRTtBQUNuQyx5QkFBUzthQUNaOztBQUVELGdCQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEQsbUJBQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2pDO0tBQ0o7QUFDRCxXQUFPLFNBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQy9CLENBQUM7OztBQUdGLE9BQU8sQ0FBQyxPQUFPLEdBQUcsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3RDLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsUUFBSSxPQUFPLEVBQUU7OztBQUVULFlBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUU7QUFDN0QsbUJBQU8sSUFBSSxDQUFDO1NBQ2Y7OztBQUdELFlBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBYyxFQUFFLElBQUksRUFBSixJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQ2pELG1CQUFPLEtBQUssQ0FBQztTQUNoQjtLQUNKO0FBQ0QsV0FBTyxJQUFJLENBQUM7Q0FDZixDQUFDOzs7OztBQUtGLE9BQU8sQ0FBQyxPQUFPLEdBQUcsVUFBVSxJQUFJLEVBQUU7O0FBRTlCLFFBQUksQ0FBQyxJQUFJLEVBQUU7QUFDUCxZQUFJLEdBQUcsYUFBWSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDeEM7OztBQUdELFFBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyQixlQUFPLFNBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDO21CQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQUEsQ0FBQyxDQUFDLENBQUM7S0FDekQ7OztBQUdELFFBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsUUFBSSxHQUFHLEVBQUU7O0FBRUwsWUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxTQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBTTs7O0FBR3RCLG1CQUFPO0FBQ0gsb0JBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtBQUNkLHFCQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7QUFDaEIsc0JBQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtBQUNsQix1QkFBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO0FBQ3BCLHlCQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7QUFDeEIscUJBQUssRUFBRSxHQUFHLENBQUMsS0FBSztBQUNoQix5QkFBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO0FBQ3hCLDBCQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7QUFDMUIscUJBQUssRUFBRSxHQUFHLENBQUMsS0FBSzthQUNuQixDQUFDO1NBQ0wsQ0FBQyxDQUFDO0tBQ04sTUFDSTs7QUFFRCxlQUFPLFNBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2hDO0NBQ0osQ0FBQzs7Ozs7QUFLRixPQUFPLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxLQUFLLEVBQUU7QUFDNUMsV0FBTyxnQ0FBYSxXQUFXLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQ3JELElBQUksQ0FBQyxVQUFBLFFBQVEsRUFBSTs7Ozs7O0FBQ2IsK0NBQWdCLFFBQVEsaUhBQUU7b0JBQWpCLEdBQUc7O0FBQ1IsdUJBQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQzthQUNwQzs7Ozs7Ozs7Ozs7Ozs7OztBQUNELGVBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUMzQixDQUFDLENBQUM7Q0FDVixDQUFDOzs7QUFHRixPQUFPLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxFQUFFLEVBQUU7QUFDdEMsV0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0NBQy9DLENBQUM7OztBQUdGLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLE9BQU8sQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUIsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQzs7QUFFeEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7O0FBRXhCLGdDQUFhLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0MsaUNBQWUsT0FBTyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7O3dCQ3RkUixVQUFVOzs7O0FBRTFCLElBQUksaUJBQWlCLENBQUM7cUJBQ1AsaUJBQWlCLEdBQUcsRUFBRTs7QUFFckMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNuQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDOztBQUVuQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsVUFBVSxFQUFFLEVBQUU7QUFDbkMsUUFBSSxpQkFBaUIsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFO0FBQy9CLFlBQUksaUJBQWlCLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUNyQyw2QkFBaUIsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQ3RFOztBQUVELFlBQUksaUJBQWlCLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRTtBQUMvQixrQ0FBSSxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztTQUN2RCxNQUNJLElBQUksaUJBQWlCLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUMxQyxrQ0FBSSxJQUFJLENBQUMsNkNBQTZDLENBQUMsQ0FBQztTQUMzRCxNQUNJO0FBQ0Qsa0NBQUksSUFBSSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7U0FDNUQ7S0FDSjtDQUNKLENBQUM7O0FBRUYsaUJBQWlCLENBQUMsTUFBTSxHQUFHLFVBQVUsS0FBSyxFQUFFLFFBQVEsRUFBRTtBQUNsRCxRQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDYixPQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNsQixPQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQzs7QUFFeEIsUUFBSSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDO0FBQ2hDLFFBQUksR0FBRyxJQUFJLElBQUksRUFBRTtBQUNiLFdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixFQUFFLENBQUM7QUFDdEMsV0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNwQzs7QUFFRCxPQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUVoQixXQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7O0FBRUYsaUJBQWlCLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxFQUFFO0FBQ3BDLFFBQUksR0FBRyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQztBQUNoQyxRQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7QUFDYixZQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDakMsZUFBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyw2QkFBaUIsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1NBQ3JDLE1BQ0k7QUFDRCxlQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BCO0tBQ0osTUFDSTtBQUNELFlBQUksR0FBRyxJQUFJLElBQUksRUFBRTtBQUNiLGVBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQyxNQUNJLElBQUksaUJBQWlCLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxPQUFPLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFO0FBQ3hHLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMxQztBQUNELHlCQUFpQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7S0FDdEM7Q0FDSixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzhCQy9Ed0Isa0JBQWtCOzs7O21CQUNkLE9BQU87Ozs7d0JBQ3JCLFVBQVU7Ozs7OztJQUdMLE9BQU87QUFFYixhQUZNLE9BQU8sQ0FFWixFQUFFLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUU7OEJBRnBDLE9BQU87O0FBR3BCLGVBQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDOztBQUV4QixZQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNiLFlBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQy9CLFlBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ25DLFlBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNyQyxZQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUM7QUFDeEQsWUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDO0FBQzVELFlBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFDL0IsWUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7O0FBRXRDLFlBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7QUFDNUUsWUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztBQUNyRSxZQUFJLENBQUMsSUFBSSxHQUFHLFVBQVMsQ0FBQzs7QUFFdEIsWUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELFlBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDOztBQUU1RSxZQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNkLG1CQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDM0I7QUFDRCxZQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztLQUNyQjs7OztpQkExQmdCLE9BQU87O2VBNkJsQixrQkFBZTtnQkFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ2YsZ0JBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2IsdUJBQU8sS0FBSyxDQUFDO2FBQ2hCOztBQUVELGdCQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUU7QUFDMUMsb0JBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUN4Qjs7QUFFRCxnQkFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSw0QkFBYyxPQUFPLENBQUM7QUFDdkQsbUJBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7QUFFZCxnQkFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2YsdUJBQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLHVCQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDN0M7O0FBRUQsZ0JBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7OztBQUduQixnQkFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3pELDZCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRTdCLGdCQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDZix1QkFBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDMUM7O0FBRUQsbUJBQU8sSUFBSSxDQUFDO1NBQ2Y7Ozs7O2VBR0csY0FBQyxPQUFPLEVBQUU7Ozs7QUFFVixnQkFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakMsZ0JBQUksR0FBRyxFQUFFO0FBQ0wsaUNBQWtCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMvQixNQUNJO0FBQ0Qsb0JBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxpQkFBa0IsTUFBTSxDQUFDLFVBQUMsS0FBSyxFQUFLO0FBQ3ZELDBCQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBSyxFQUFFLENBQUMsWUFBWSxFQUFFLE1BQUssTUFBTSxDQUFDLENBQUM7QUFDdEQsMEJBQUssYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3RELENBQUMsQ0FBQyxDQUFDO2FBQ1A7U0FDSjs7O2VBRU0sbUJBQUc7QUFDTixnQkFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDYix1QkFBTyxLQUFLLENBQUM7YUFDaEI7QUFDRCxnQkFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7O0FBRW5CLGtDQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsV0FBVyxpQkFBZSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBSyxFQUFFLENBQUEsQUFBQyxDQUFDLENBQUM7O0FBRWxILGdCQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsZ0JBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ25CLG1CQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7O0FBRXhCLG1CQUFPLElBQUksQ0FBQztTQUNmOzs7V0F2RmdCLE9BQU87OztxQkFBUCxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJDTmIsYUFBYTs7Ozs7OzBCQUNWLGdCQUFnQjs7O0FBR2xDLElBQUksV0FBVyxxREFDVix1QkFBRyxLQUFLLEVBQUcsWUFBWSxpQ0FDdkIsdUJBQUcsSUFBSSxFQUFHLFNBQVMsaUNBQ25CLHVCQUFHLGFBQWEsRUFBRyxVQUFVLGlDQUM3Qix1QkFBRyxHQUFHLEVBQUcsVUFBVSxpQ0FDbkIsdUJBQUcsWUFBWSxFQUFHLFdBQVcsaUNBQzdCLHVCQUFHLEtBQUssRUFBRyxVQUFVLGlDQUNyQix1QkFBRyxjQUFjLEVBQUcsV0FBVyxnQkFDbkMsQ0FBQzs7Ozs7SUFJbUIsVUFBVTtBQUVmLGFBRkssVUFBVSxDQUVkLGFBQWEsRUFBcUI7eUVBQUosRUFBRTs7WUFBZixRQUFRLFFBQVIsUUFBUTs7OEJBRnJCLFVBQVU7O0FBR3ZCLFlBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOztBQUVuQyxZQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNsQyxnQkFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFDLGdCQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQzVDLGdCQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlFLGlDQUFJLE9BQU8sMENBQXdDLElBQUksQ0FBQyxhQUFhLFVBQUssSUFBSSxDQUFDLFdBQVcsZUFBWSxDQUFDO1NBQzFHLE1BQ0k7QUFDRCxnQkFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLElBQUksR0FBRyxDQUFDO0FBQ25DLGdCQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDbEUsZ0JBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3BEO0FBQ0QsWUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7O0FBRXZCLFlBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDOzs7Ozs7QUFDckIsOENBQXNCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSw0R0FBRTtvQkFBNUMsU0FBUzs7QUFDZCxvQkFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLDhCQUFLLFNBQVMsR0FBRSxDQUFDO2FBQ3hDOzs7Ozs7Ozs7Ozs7Ozs7O0FBQ0QsWUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdEIsWUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDdkIsWUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0tBQ3pCOzs7O2lCQXpCZ0IsVUFBVTs7ZUE0QlosMEJBQUc7QUFDZCxnQkFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDdkIsZ0JBQUksQ0FBQyxZQUFZLENBQUMsdUJBQUcsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7O0FBQ2xELG1EQUFtQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8saUhBQUU7d0JBQXRDLE1BQU07OztBQUVYLHdCQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtBQUN4Qyw0QkFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQyw0QkFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDdkU7aUJBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0QsbURBQXNCLElBQUksQ0FBQyxVQUFVLGlIQUFFO3dCQUE5QixTQUFTOztBQUNkLDZCQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbEQ7Ozs7Ozs7Ozs7Ozs7OztTQUNKOzs7OztlQUdlLDJCQUFHO0FBQ2YsZ0JBQUksQUFBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDdkUsb0JBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELG9CQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLG9CQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDbEUsb0JBQUksUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNsRCx3QkFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUIsMEJBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QyxvQkFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDdkIsb0JBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN0QixvQkFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDOzthQUV4QjtTQUNKOzs7Ozs7OztlQU1TLG1CQUFDLE1BQU0sRUFBRTtBQUNmLGdCQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDdkIsZ0JBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQzs7QUFFUixnQkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7QUFDbEMsaUJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekIsb0JBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMseUJBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBLEdBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDbkY7O0FBRUQsZ0JBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7QUFDaEQsZ0JBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN2Qjs7Ozs7ZUFHRyxlQUFHOztBQUVILGdCQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDMUQsaUNBQUksT0FBTyxtQkFBaUIsSUFBSSxDQUFDLFdBQVcsdUNBQWtDLElBQUksQ0FBQyxhQUFhLENBQUcsQ0FBQztBQUNwRyxtQkFBTyxJQUFJLENBQUM7U0FDZjs7O1dBckZnQixVQUFVOzs7cUJBQVYsVUFBVTs7QUF5Ri9CLFVBQVUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJDekdaLGFBQWE7Ozs7OzsyQkFDTCxlQUFlOzs7Ozs7SUFHakIsWUFBWTs7OztBQUdqQixhQUhLLFlBQVksQ0FHaEIsT0FBTyxFQUFFOzhCQUhMLFlBQVk7O0FBSXpCLFlBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLFlBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFlBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDOzs7QUFHaEIsWUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7O0FBRWhCLFlBQUksS0FBSyxHQUFHLENBQUMsQ0FBQzs7Ozs7O0FBQ2QsOENBQW1CLElBQUksQ0FBQyxPQUFPLDRHQUFFO29CQUF4QixNQUFNOztBQUNYLHNCQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDNUIsc0JBQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUMvQixvQkFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDOztBQUVkLHdCQUFRLE1BQU0sQ0FBQyxJQUFJO0FBQ2YseUJBQUssdUJBQUcsS0FBSyxDQUFDO0FBQ2QseUJBQUssdUJBQUcsR0FBRyxDQUFDO0FBQ1oseUJBQUssdUJBQUcsWUFBWTtBQUNoQiw4QkFBTSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDdEIsNkJBQUssR0FBRyxDQUFDLENBQUM7QUFDViw4QkFBTTtBQUFBLEFBQ1YseUJBQUssdUJBQUcsS0FBSyxDQUFDO0FBQ2QseUJBQUssdUJBQUcsY0FBYztBQUNsQiw4QkFBTSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDdEIsNkJBQUssR0FBRyxDQUFDLENBQUM7QUFDViw4QkFBTTtBQUFBLGlCQUNiOzs7QUFHRCxvQkFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ2hDLG9CQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOztBQUNqQix3QkFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUEsQUFBQyxDQUFDO2lCQUN4Qzs7Ozs7O0FBTUQsb0JBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQzFDLG9CQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQ2pCLHlCQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoQyw0QkFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUNwRTtpQkFDSixNQUNJO0FBQ0Qsd0JBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7aUJBQ2xFOzs7QUFHRCxvQkFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLHFCQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQzthQUN4Qjs7Ozs7Ozs7Ozs7Ozs7O0tBQ0o7Ozs7Ozs7Ozs7aUJBdkRnQixZQUFZOztlQTZEdEIsZ0JBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQzFCO0FBQ0ksZ0JBQUksTUFBTSxFQUFFLFFBQVEsQ0FBQzs7O0FBR3JCLGlCQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsc0JBQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLHdCQUFRLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDOztBQUVuRCxvQkFBSSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDakIsd0JBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssRUFBRTtBQUNsRCwwQkFBRSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUN4QztBQUNELHNCQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFHLGdDQUFZLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQztpQkFDcEQ7YUFDSjs7O0FBR0QsaUJBQUssUUFBUSxJQUFJLFlBQVksQ0FBQyxlQUFlLEVBQUU7QUFDM0Msb0JBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3REO1NBQ0o7Ozs7OztlQUlzQixnQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtBQUMzQyxnQkFBSSxZQUFZLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLE9BQU8sRUFBRTtBQUNwRCxrQkFBRSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3RDLHVCQUFPLFlBQVksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDakQ7U0FDSjs7O2VBRWdCLDRCQUFHO0FBQ2hCLG1CQUFPLDZCQUFlLElBQUksQ0FBQyxDQUFDO1NBQy9COzs7V0FoR2dCLFlBQVk7OztxQkFBWixZQUFZO0FBc0dqQyxZQUFZLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NEJDMUdWLGdCQUFnQjs7Ozt3QkFFeEIsVUFBVTs7OztBQUUxQixJQUFJLFNBQVMsQ0FBQzs7cUJBRUMsU0FBUyxHQUFHOztBQUV2QixTQUFLLEVBQUUsRUFBRTs7QUFFVCxhQUFTLEVBQUMsbUJBQUMsSUFBSSxFQUFFO0FBQ2IsWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRztBQUMzQixrQkFBTSxFQUFFO0FBQ0osb0JBQUksRUFBRSxFQUFFO0FBQ1IsbUJBQUcsRUFBRSxFQUFFO2FBQ1Y7QUFDRCxtQkFBTyxFQUFFLEVBQUU7QUFDWCxnQkFBSSxFQUFFLEVBQUU7QUFDUixrQkFBTSxFQUFFLFVBQVM7U0FDcEIsQ0FBQzs7O0FBR0YsYUFBSyxDQUFDLFFBQVEsR0FBRyxhQUFZLFVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBSztBQUM5QyxpQkFBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDeEIsaUJBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ3pCLENBQUMsQ0FBQztLQUNOOztBQUVELGFBQVMsRUFBQyxtQkFBQyxJQUFJLEVBQUU7QUFDYixlQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDM0I7OztBQUdELFlBQVEsRUFBQyxrQkFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ25CLFlBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN0Qzs7O0FBR0QsV0FBTyxFQUFDLGlCQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQzNCLFlBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0IsWUFBSSxDQUFDLEtBQUssRUFBRTtBQUNSLGtDQUFJLEtBQUssQ0FBQywyQ0FBMkMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekYsbUJBQU8sU0FBUSxNQUFNLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQy9HOzs7QUFHRCxZQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ2pDLGFBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25DLGdCQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsZ0JBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ25DLHdCQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0RCx3QkFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEUsd0JBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0M7OztBQUdELGFBQUssQ0FBQyxNQUFNLFVBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixZQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtBQUN6QixnQkFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0Qjs7O0FBR0QsZUFBTyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFNO0FBQzdCLG1CQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2xDLENBQUMsQ0FBQztLQUNOOzs7O0FBSUQsV0FBTyxFQUFDLGlCQUFDLElBQUksRUFBRTtBQUNYLFlBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0IsWUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUMxQixZQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDOztBQUV0QixrQ0FBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7OztBQUd4QixZQUFJLFVBQVUsR0FBRyxhQUFZLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQzttQkFBSyxDQUFDLEdBQUcsQ0FBQztTQUFBLENBQUMsQ0FBQzs7Ozs7O0FBQ2xFLDhDQUFxQixVQUFVLDRHQUFFO29CQUF4QixRQUFROztBQUNiLG9CQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLG9CQUFJLENBQUMsYUFBYSxFQUFFOztBQUNoQiw2QkFBUztpQkFDWjs7O0FBR0QscUJBQUssSUFBSSxLQUFLLElBQUksYUFBYSxFQUFFO0FBQzdCLHdCQUFJLE9BQU8sR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsd0JBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDOztBQUVoQyx5QkFBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7eUNBQ2IsT0FBTyxDQUFDLENBQUMsQ0FBQzs0QkFBNUIsS0FBSyxjQUFMLEtBQUs7NEJBQUUsTUFBTSxjQUFOLE1BQU07Ozs7QUFHbkIsNEJBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTs7QUFFM0MsZ0NBQUksS0FBSyxHQUFHLDBCQUFZLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25ELGdDQUFJLEtBQUssRUFBRTs7QUFFUCx5Q0FBUzs2QkFDWjs7QUFFRCxzREFBWSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFckMsaUNBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEIsZ0NBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2hDOzs7O3FCQUlKO2lCQUNKO2FBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFRCxlQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEIsYUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ25COztDQUVKOzs7Ozs7Ozs7Ozs7Ozs7OzRCQ3JId0IsZUFBZTs7Ozs7OzBCQUN0QixnQkFBZ0I7Ozs7d0JBQ2xCLGNBQWM7Ozs7OztJQUlULEtBQUs7QUFFVixhQUZLLEtBQUssQ0FFVCxJQUFJLEVBQWdCO1lBQWQsT0FBTyx5REFBRyxFQUFFOzs4QkFGZCxLQUFLOztBQUdsQixZQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixZQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUN2QixZQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNyQixZQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixZQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztLQUNuQjs7OztpQkFSZ0IsS0FBSzs7ZUFXYixrQkFBQyxNQUFNLEVBQUU7OztBQUNkLGdCQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDdEIsZ0JBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDeEIsZ0JBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7OztBQUd0QixnQkFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNsQiwrQ0FBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFLOzs7O0FBSXZDLHdCQUFJLE1BQUssR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7O0FBRTdDLGlDQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLCtCQUFPLElBQUksQ0FBQztxQkFDZjs7O0FBR0Qsd0JBQUksc0JBQUksU0FBUyxDQUFDLE1BQUssR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOztBQUVsQyxpQ0FBUyxHQUFHLElBQUksQ0FBQztBQUNqQiwrQkFBTyxJQUFJLENBQUM7cUJBQ2Y7aUJBQ0osQ0FBQyxDQUFDO2FBQ047QUFDRCxtQkFBTyxTQUFTLENBQUM7U0FDcEI7Ozs7O2VBR0csYUFBQyxNQUFNLEVBQUU7QUFDVCxrQkFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLGtCQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0I7Ozs7O2VBR1ksd0JBQUc7QUFDWixnQkFBSSxHQUFHLEdBQUcsQ0FBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQztBQUN6QyxnQkFBSSxHQUFHLEdBQUcsQ0FBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQzs7QUFFekMsZ0JBQUksQ0FBQyx3QkFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDcEQsdUJBQU8sS0FBSyxDQUFDO2FBQ2hCOztBQUVELG1CQUFPLElBQUksQ0FBQztTQUNmOzs7Ozs7ZUFJTyxpQkFBQyxNQUFNLEVBQUU7O0FBRWIsZ0JBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7QUFDN0Isb0JBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7O0FBR2xDLG9CQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFOztBQUV6Qyx3QkFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRTtBQUN0QiwrQkFBTyxJQUFJLENBQUM7cUJBQ2Y7aUJBQ0osTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2pCLCtCQUFPLElBQUksQ0FBQztxQkFDZjthQUNKOzs7QUFHRCxtQkFBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDOzs7V0E3RWdCLEtBQUs7OztxQkFBTCxLQUFLOztBQWdGMUIsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NCQ3RGSixXQUFXOzs7O3FCQUNaLFNBQVM7Ozs7d0JBQ1gsY0FBYzs7OztJQUVULFNBQVM7Y0FBVCxTQUFTOztBQUVkLGFBRkssU0FBUyxDQUViLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFOzhCQUZsQixTQUFTOztBQUd0QixtQ0FIYSxTQUFTLDZDQUdoQixJQUFJLEVBQUUsT0FBTyxFQUFFOztBQUVyQixZQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzs7OztBQUluQixZQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQ2hELFlBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM1RCxZQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDakI7O2lCQVpnQixTQUFTOztlQWNuQixrQkFBRztBQUNOLGdCQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDcEMsZ0JBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ2pDLGdCQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLEdBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxHQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNGLGdCQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdkI7OztlQUVlLDJCQUFHO0FBQ2YsZ0JBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUU7QUFDaEQsdUJBQU8sS0FBSyxDQUFDO2FBQ2hCOztBQUVELGdCQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDckIsZ0JBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7QUFFZCxtQkFBTyxJQUFJLENBQUM7U0FDZjs7O2VBRVksd0JBQUc7QUFDWixnQkFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3BDLGdCQUFJLElBQUksR0FBRyxvQkFBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUU5QyxnQkFBSSxHQUFHLG9CQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFOUIsZ0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLGdCQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7O0FBRWhELGdCQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxFQUFFO0FBQy9CLHFCQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQzthQUNwQjtBQUNELGlCQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7O0FBRXJCLG1CQUFPLEtBQUssQ0FBQztTQUNoQjs7O2VBRVksd0JBQUc7QUFDWixnQkFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3BDLGdCQUFJLElBQUksR0FBRyxvQkFBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLGdCQUFJLE1BQU0sR0FBRyxvQkFBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWpDLGdCQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDOztBQUUvRCxnQkFBSSxZQUFZLEdBQUcsTUFBTSxFQUFFOztBQUV2QixvQkFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFJLEdBQUcsQ0FBQztBQUNqRCx1QkFBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDNUM7O0FBRUQsbUJBQU8sWUFBWSxJQUFJLE1BQU0sQ0FBQztTQUNqQzs7O2VBRWMsMEJBQUc7QUFDZCxnQkFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDeEMsZ0JBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQzs7QUFFNUMsbUJBQU8sQ0FBRSxFQUFFLEVBQUUsRUFBRSxDQUFFLENBQUM7U0FDckI7OztlQUVZLHdCQUFHO0FBQ1osZ0JBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO0FBQ3ZDLGdCQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLEdBQUksR0FBRyxHQUFHLG1CQUFNLE9BQU8sQ0FBQztBQUM5RSxnQkFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxHQUFJLEdBQUcsR0FBRyxtQkFBTSxPQUFPLENBQUM7OztBQUcvRSxnQkFBSSxNQUFNLEdBQUcsb0JBQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6RCxnQkFBSSxDQUFDLEdBQUcsQ0FDSixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEFBQUMsRUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxBQUFDLENBQ3ZDLENBQUM7OztBQUdGLGdCQUFJLENBQUMsR0FBRyxHQUFHLDBCQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzRCxnQkFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3BDOzs7Ozs7ZUFJWSx3QkFBRztBQUNaLGdCQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDcEIsZ0JBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7O0FBRzFDLG1CQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFO0FBQ2pDLG9CQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO0FBQ3pCLDBCQUFNO2lCQUNUOztBQUVELHVCQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzlCLCtCQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3pDOztBQUVELG1CQUFPLE9BQU8sSUFBSSxlQUFlLENBQUM7U0FDckM7OztlQUVPLGlCQUFDLE1BQU0sRUFBRTs7QUFFYixnQkFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO0FBQ3BDLHVCQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO0FBQ3pCLHdCQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO0FBQ3pCLCtCQUFPLElBQUksQ0FBQztxQkFDZjtpQkFDSjthQUNKOzs7QUFHRCw4Q0F2SGEsU0FBUyx5Q0F1SEQsTUFBTSxFQUFFO1NBQ2hDOzs7V0F4SGdCLFNBQVM7OztxQkFBVCxTQUFTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxQkNKWixTQUFTOzs7O21CQUNYLFFBQVE7Ozs7d0JBQ1IsY0FBYzs7Ozt3Q0FDTiwrQkFBK0I7Ozs7SUFFbEMsVUFBVTtjQUFWLFVBQVU7O0FBRWYsYUFGSyxVQUFVLENBRWQsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7OEJBRnJCLFVBQVU7O0FBR3ZCLG1DQUhhLFVBQVUsNkNBR2pCLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDckIsWUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxZQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDakI7O2lCQU5nQixVQUFVOztlQVFyQixrQkFBRztBQUNMLGdCQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDM0MsZ0JBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN2Qjs7O2VBRWEseUJBQUc7QUFDYixtQkFBTyxzQ0FBWSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3pGOzs7ZUFFWSx3QkFBRztBQUNaLGdCQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLEdBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsbUJBQU0sT0FBTyxDQUFDO0FBQ3ZHLGdCQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLEdBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsbUJBQU0sT0FBTyxDQUFDOztBQUV4RyxnQkFBSSxDQUFDLEdBQUcsQ0FDSixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxBQUFDLEVBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEFBQUMsQ0FDN0UsQ0FBQzs7QUFFRixnQkFBSSxDQUFDLEdBQUcsR0FBRywwQkFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakQsZ0JBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNwQzs7Ozs7O2VBSVksd0JBQUc7QUFDWixnQkFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDOztBQUVwQixnQkFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsQixvQkFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsdUJBQU8sR0FBRyxJQUFJLENBQUM7YUFDbEI7O0FBRUQsZ0JBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBSSxVQUFVLEVBQUU7QUFDaEMsb0JBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELHVCQUFPLEdBQUcsSUFBSSxDQUFDO2FBQ2xCOztBQUVELGdCQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2xCLG9CQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsdUJBQU8sR0FBRyxJQUFJLENBQUM7YUFDbEI7O0FBRUQsZ0JBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFJLFVBQVUsRUFBRTtBQUNqQyxvQkFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDdEQsdUJBQU8sR0FBRyxJQUFJLENBQUM7YUFDbEI7O0FBRUQsZ0JBQUksT0FBTyxFQUFFO0FBQ1Qsb0JBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN2Qjs7QUFFRCxtQkFBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDOUI7OztXQTVEZ0IsVUFBVTs7O3FCQUFWLFVBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7bUJDTGYsUUFBUTs7OztJQUVILFdBQVc7QUFFaEIsYUFGSyxXQUFXLENBRWYsR0FBRyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUU7OEJBRi9CLFdBQVc7O0FBR3hCLFlBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2YsWUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDL0IsWUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDMUQsWUFBSSxDQUFDLGtCQUFrQixHQUFHLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDNUQsWUFBSSxDQUFDLGFBQWEsR0FBRyxBQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGtCQUFrQixHQUFJLElBQUksR0FBRyxLQUFLLENBQUM7QUFDckYsWUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7S0FDdkI7Ozs7OztpQkFUZ0IsV0FBVzs7ZUFZdEIsZUFBQyxHQUFHLEVBQUU7O0FBRVIsZ0JBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUNwQixvQkFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7OztBQUczQiwyQkFBTztBQUNILCtCQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtBQUNoQyxzQ0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO0FBQ25DLHFDQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7cUJBQ3BDLENBQUM7aUJBQ0w7QUFDRCx1QkFBTzthQUNWOzs7QUFHRCxnQkFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUN0QixpQkFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLG9CQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLG9CQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLG9CQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLG9CQUFJLE9BQU8sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7OztBQUdoQyxvQkFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUMvQiwyQkFBTztBQUNILCtCQUFPLEVBQVAsT0FBTztBQUNQLHNDQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7cUJBQ3RDLENBQUM7aUJBQ0w7YUFDSjtTQUNKOzs7OztlQUdHLGFBQUMsR0FBRyxFQUFFOztBQUVOLGdCQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFO0FBQ3JCLG9CQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDckM7U0FDSjs7Ozs7OztlQUtZLGVBQUMsSUFBSSxFQUFFO0FBQ2hCLGdCQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMxQjs7Ozs7ZUFHWSxlQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0FBQzdCLGdCQUFJLE1BQU0sQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUU7QUFDbEUsdUJBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzVEO1NBQ0o7Ozs7O2VBR1UsYUFBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtBQUMzQixnQkFBSSxNQUFNLENBQUMsZUFBZSxFQUFFO0FBQ3hCLG9CQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksRUFBRTtBQUNoRCx3QkFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQ3BELE1BQU0sQ0FBQyxZQUFZLEVBQ25CLE1BQU0sQ0FBQyxlQUFlLEVBQ3RCLFdBQVcsQ0FBQyxlQUFlLENBQzlCLENBQUM7aUJBQ0w7QUFDRCxvQkFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25EO1NBQ0o7OztXQS9FZ0IsV0FBVzs7O3FCQUFYLFdBQVc7QUFvRmhDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDOzs7O0FBSXhCLFdBQVcsQ0FBQyxlQUFlLEdBQUcsaUJBQUksVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7MEJDMUYzQixlQUFlOzs7O3FCQUNmLFNBQVM7Ozs7bUJBQ1gsT0FBTzs7Ozs7QUFHaEIsSUFBSSxZQUFZLENBQUM7OztBQUNqQixTQUFTLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDbEMsV0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7Q0FDakM7O0FBRUQsU0FBUyxhQUFhLENBQUMsT0FBTyxFQUFFOzs7O0FBSTVCLFFBQUksT0FBTyxZQUFZLEtBQUssV0FBVyxFQUFFO0FBQ3JDLGVBQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDcEM7OztBQUdELFFBQUksd0JBQU0sWUFBWSxFQUFFOzs7QUFFcEIsZ0JBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQzs7OztBQUlwQyxnQkFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDN0QsZ0JBQUksY0FBYyxHQUFHLGNBQWMsS0FBSyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDdEUsZ0JBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDOzs7QUFHMUIsZ0JBQUksY0FBYyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUU7QUFDaEMsZ0NBQWdCLENBQUMsUUFBUSxHQUFHLFlBQVUsRUFBRSxDQUFDO0FBQ3pDLGdDQUFnQixDQUFDLFdBQVcsR0FBRyxZQUFVLEVBQUUsQ0FBQzthQUMvQzs7O0FBR0QsMkJBQWMsZ0JBQWdCLEVBQUU7O0FBRTVCLDBCQUFVLEVBQUUsb0JBQVUsT0FBTyxFQUFFOzs7O0FBRTNCLDJCQUFPLENBQUMsU0FBUyxHQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLEdBQUcsSUFBSSxBQUFDLENBQUM7QUFDeEQsMkJBQU8sQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDOztBQUU1RCxxQkFBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUIsd0JBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNuQix3QkFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEIsd0JBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7OztBQUcvQix3QkFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7O0FBRTNCLHdCQUFJLENBQUMsaUJBQWlCLEdBQUcsd0JBQU0sUUFBUSxDQUFDLFlBQU07QUFDMUMsOEJBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMxQiw4QkFBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUM3QixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztpQkFDdEM7O0FBRUQsMkJBQVcsRUFBRSx1QkFBWTtBQUNyQix3QkFBSSxDQUFDLEtBQUssR0FBRyxtQkFBTSxNQUFNLENBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUNsQjtBQUNJLGtDQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO0FBQ25DLGlDQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTO0FBQ2pDLGtDQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO0FBQ25DLHNDQUFjLEVBQUcsWUFBWSxDQUFDLGNBQWMsS0FBSyxLQUFLLEFBQUM7QUFDdkQsMENBQWtCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0I7QUFDbkQsZ0NBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVE7O0FBRS9CLHlDQUFpQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCOztBQUVqRCwrQ0FBdUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QjtxQkFDaEUsQ0FBQyxDQUFDO2lCQUNWOzs7QUFHRCxxQkFBSyxFQUFFLGVBQVUsR0FBRyxFQUFFOzs7QUFDbEIsd0JBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2IsNEJBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztxQkFDdEI7O0FBRUQsa0NBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7O0FBRXRELHdCQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxZQUFNO0FBQ3RCLCtCQUFLLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUM5QiwrQkFBSyxVQUFVLEVBQUUsQ0FBQztBQUNsQiwrQkFBSyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7cUJBQ2xDLENBQUM7QUFDRix1QkFBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFFcEMsd0JBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFlBQU07QUFDcEIsNEJBQUksT0FBSyxpQkFBaUIsRUFBRTtBQUN4QixtQ0FBTzt5QkFDVjs7QUFFRCwrQkFBSyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDOUIsNEJBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUMzQiw0QkFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksaUJBQUkscUJBQXFCLENBQUMsQ0FBQzs7QUFFbkYsK0JBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsK0JBQUssS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQzdCLCtCQUFLLGdCQUFnQixFQUFFLENBQUM7QUFDeEIsK0JBQUssaUJBQWlCLEdBQUcsS0FBSyxDQUFDO3FCQUNsQyxDQUFDO0FBQ0YsdUJBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWhDLHdCQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxZQUFNO0FBQ3pCLDRCQUFJLE9BQUssaUJBQWlCLEVBQUU7QUFDeEIsbUNBQU87eUJBQ1Y7O0FBRUQsK0JBQUssaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQzlCLCtCQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDNUIsK0JBQUssaUJBQWlCLEdBQUcsS0FBSyxDQUFDO3FCQUNsQyxDQUFDO0FBQ0YsdUJBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7O0FBRTFDLHdCQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxZQUFNO0FBQ3pCLCtCQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztxQkFDbEMsQ0FBQztBQUNGLHVCQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDOztBQUUxQyx3QkFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsWUFBTTtBQUN2QiwrQkFBSyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7cUJBQ25DLENBQUM7QUFDRix1QkFBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzs7O0FBR3RDLHVCQUFHLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQzs7O0FBRzFCLHdCQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUM7OztBQUdwQyx3QkFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLHdCQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7O0FBRzdDLHdCQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7OztBQUczQyx3QkFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDOzs7QUFHbEIsd0JBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ2pCLDRCQUFJLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7cUJBQzVDLENBQUMsQ0FBQzs7O0FBR0gsd0JBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQU07QUFDekIsK0JBQUssaUJBQWlCLEdBQUcsSUFBSSxDQUFDOztBQUU5QiwrQkFBSyxVQUFVLEVBQUUsQ0FBQztBQUNsQiwrQkFBSyxVQUFVLEVBQUUsQ0FBQztBQUNsQiwrQkFBSyxnQkFBZ0IsRUFBRSxDQUFDOztBQUV4QiwrQkFBSyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7O0FBRS9CLCtCQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDckIsQ0FBQyxTQUFNLENBQUMsVUFBQSxLQUFLLEVBQUk7QUFDZCwrQkFBSyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUM3QixDQUFDLENBQUM7aUJBQ047O0FBRUQsd0JBQVEsRUFBRSxrQkFBVSxHQUFHLEVBQUU7QUFDckIsa0NBQWMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7O0FBRXpELHVCQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLHVCQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLHVCQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLHVCQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLHVCQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZDLHVCQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLHVCQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLHVCQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLHdCQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzs7QUFFaEIsd0JBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNaLDRCQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3JCLDRCQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztxQkFDckI7aUJBQ0o7O0FBRUQsMEJBQVUsRUFBRSxvQkFBVSxNQUFNLEVBQUU7QUFDMUIsd0JBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDckQsd0JBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEMsdUJBQUcsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLHVCQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDMUIsdUJBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQzs7QUFFM0Isd0JBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7QUFDeEIsNEJBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEQscUNBQWEsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLHFDQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDMUMscUNBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixxQ0FBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLHFDQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDcEMscUNBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUN0QyxxQ0FBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDO0FBQ2hELHFDQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7O0FBRXBDLDJCQUFHLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQy9CLDJCQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7QUFDaEMsMkJBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUNoQywyQkFBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO3FCQUNqQzs7QUFFRCwyQkFBTyxHQUFHLENBQUM7aUJBQ2Q7Ozs7O0FBS0QseUNBQXlCLEVBQUUsbUNBQVUsR0FBRyxFQUFFOzs7QUFDdEMsd0JBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLEdBQUcsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLEVBQUU7O0FBQ3BHLGdDQUFJLEtBQUssU0FBTyxDQUFDO0FBQ2pCLGdDQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzVDLGdDQUFJLE9BQU8sRUFBRTtBQUNULG1DQUFHLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDOzZCQUNqQzs7O0FBR0QsNkJBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLGNBQWMsR0FBRyxVQUFTLENBQUMsRUFBRTs7O0FBR3BGLG9DQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLG9DQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0Qsb0NBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwQixpQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQ3RCLENBQUM7O0FBRUYsNkJBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxZQUFZO0FBQ2hGLG9DQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSTtvQ0FDZixLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU07b0NBQ25CLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7O0FBRXpCLG1DQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7OztBQUdYLHFDQUFLLElBQUksRUFBRSxDQUFDOztBQUVaLHFDQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLHFDQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDOztBQUU1QyxvQ0FBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDaEIsb0NBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDOztBQUV2QixvQ0FBSSxDQUFDLEtBQUssRUFBRTtBQUFFLDJDQUFPO2lDQUFFOztBQUV2QixvQ0FBSSxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUU7QUFDMUMsdUNBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO2lDQUM3QixNQUFNO0FBQ0gsdUNBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7aUNBQ3ZEOztBQUVELHFDQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzs2QkFDN0IsQ0FBQzs7QUFFRixnQ0FBSSxPQUFPLEVBQUU7QUFDVCxtQ0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQzs2QkFDaEM7O3FCQUNKO2lCQUNKOztBQUVELDBCQUFVLEVBQUUsc0JBQVk7QUFDcEIsd0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDakMsd0JBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksaUJBQUkscUJBQXFCLENBQUMsQ0FBQztBQUMvRix3QkFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNqQzs7QUFFRCwwQkFBVSxFQUFFLHNCQUFZO0FBQ3BCLHdCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQy9CLHdCQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEM7O0FBRUQsbUNBQW1CLEVBQUUsK0JBQVk7QUFDN0Isd0JBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUN0QywrQkFBTztxQkFDVjtBQUNELHdCQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQzlCLHdCQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3RILHdCQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUN4Qix3QkFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztpQkFDbEM7O0FBRUQsc0JBQU0sRUFBRSxrQkFBWTtBQUNoQix3QkFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDYiwrQkFBTztxQkFDVjtBQUNELHdCQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUN2Qjs7OztBQUlELGdDQUFnQixFQUFFLDRCQUFZO0FBQzFCLHdCQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtBQUNwRCwrQkFBTztxQkFDVjs7QUFFRCx3QkFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELHFCQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDekQ7OztBQUdELDJDQUEyQixFQUFFLHFDQUFVLEdBQUcsRUFBRTs7O0FBQ3hDLHdCQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDOztBQUU1Qix3QkFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsVUFBQyxLQUFLLEVBQUs7QUFDMUIsNEJBQUksT0FBTyxPQUFLLGlCQUFpQixDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUU7QUFDcEQsbUNBQUssS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQ3pDLElBQUksQ0FBQyxVQUFBLFNBQVMsRUFBSTtBQUNkLG9DQUFJLE9BQU8sR0FBRyxlQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNyRSx1Q0FBSyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7NkJBQ3pDLENBQUMsQ0FBQzt5QkFDVjtxQkFDSixDQUFDO0FBQ0YsdUJBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRWxDLHdCQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxVQUFDLEtBQUssRUFBSztBQUM5Qiw0QkFBSSxPQUFPLE9BQUssaUJBQWlCLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtBQUNwRCxtQ0FBSyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FDekMsSUFBSSxDQUFDLFVBQUEsU0FBUyxFQUFJO0FBQ2Qsb0NBQUksT0FBTyxHQUFHLGVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLHVDQUFLLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzs2QkFDekMsQ0FBQyxDQUFDO3lCQUNWO3FCQUNKLENBQUM7QUFDRix1QkFBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQzs7QUFFMUMsd0JBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQUMsS0FBSyxFQUFLOztBQUU3Qiw0QkFBSSxPQUFPLE9BQUssaUJBQWlCLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtBQUNwRCxtQ0FBSyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO3lCQUN6RTtxQkFDSixDQUFDO0FBQ0YsdUJBQUcsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzNDOzs7OztBQUtELGtDQUFrQixFQUFFLDRCQUFVLE1BQU0sRUFBRTtBQUNsQyx3QkFBSSxDQUFDLGlCQUFpQixHQUFHLGVBQWMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO2lCQUMxRTs7YUFFSixDQUFDLENBQUM7OztBQUdILG9CQXRWRyxZQUFZLEdBc1ZmLFlBQVksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7OztBQUd2RCxnQkFBSSxPQUFPLFlBQVksQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO0FBQzNDLDRCQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxZQUFXO0FBQ3ZDLHdCQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDWCw0QkFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQy9CO0FBQ0Qsd0JBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3ZCLENBQUM7YUFDTDs7QUFFRCx3QkFBWSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDN0Msd0JBQVksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDOztBQUU3QzttQkFBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUM7Y0FBQzs7OztLQUNwQztDQUNKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQ0M1V3lCLHFCQUFxQjs7OztnQ0FDckIscUJBQXFCOzs7Ozs7c0JBQzlCLFdBQVc7Ozs7bUJBQ1osT0FBTzs7OztrQ0FDRyx1QkFBdUI7Ozs7SUFHNUIsS0FBSztBQUVWLGFBRkssS0FBSyxDQUVULElBQUksRUFBRSxNQUFNLEVBQUU7OEJBRlYsS0FBSzs7QUFHbEIsWUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFlBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDOztBQUVqQixZQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUU7QUFDOUQsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsb0JBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDdkQsTUFDSTtBQUNELGdCQUFJLENBQUMsT0FBTyxHQUFHLGdDQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDekQ7O0FBRUQsWUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxPQUFPLE1BQU0sQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzlELGdCQUFJLENBQUMsT0FBTyxHQUFHLG9CQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQy9FLE1BQ0k7QUFDRCxnQkFBSSxDQUFDLE9BQU8sR0FBRyxnQ0FBWSxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3pEOztBQUVELFlBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtBQUNoRSxnQkFBSSxDQUFDLFFBQVEsR0FBRyxvQkFBSyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN6RCxNQUNJO0FBQ0QsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsZ0NBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzRDtLQUNKOzs7OztpQkExQmdCLEtBQUs7Ozs7ZUFtSWYsa0JBQUc7QUFDTixnQkFBSSxRQUFRLDhCQUNFLElBQUksQ0FBQyxXQUFXLFdBQU0sSUFBSSxDQUFDLElBQUksdUJBQ3ZDLElBQUksQ0FBQyxXQUFXLFNBQUksSUFBSSxDQUFDLElBQUksb0JBQzlCLENBQUM7QUFDTixnQkFBSSxNQUFNLHNCQUNKLElBQUksQ0FBQyxJQUFJLGFBQVEsSUFBSSxDQUFDLElBQUksa0JBQy9CLENBQUM7O0FBRUYsMENBQWMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDOUMsMENBQWMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMzQzs7Ozs7ZUFHTSxrQkFBRyxFQUNUOzs7Ozs7ZUFJWSxzQkFBQyxRQUFRLEVBQUU7O0FBRXBCLG9CQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBTyxJQUFJLENBQUMsSUFBSSxlQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRSxvQkFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQU8sSUFBSSxDQUFDLElBQUksZUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEUsb0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFPLElBQUksQ0FBQyxJQUFJLGdCQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyRTs7O2VBN0hhLGdCQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDekIsZ0JBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDMUIsdUJBQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDckQ7U0FDSjs7Ozs7ZUFHYyxpQkFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ3pCLGdCQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDZixvQkFBSSxHQUFHLFVBQVUsQ0FBQzthQUNyQjtBQUNELGdCQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sS0FBSyxBQUFDLElBQUksSUFBSSxJQUFJLEdBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQSxBQUFDLENBQUM7QUFDN0QsaUJBQUssQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsR0FBSSxJQUFJLEtBQUssVUFBVSxBQUFDLENBQUM7QUFDbkUsaUJBQUssQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsR0FBSSxJQUFJLEtBQUssUUFBUSxBQUFDLENBQUM7U0FDbEU7Ozs7O2VBR2EsZ0JBQUMsTUFBTSxFQUFFOztBQUVuQiwwQ0FBYyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDOzs7QUFHdkMsZ0JBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO0FBQ2hCLHVCQUFPO2FBQ1Y7OztBQUdELGdCQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDekIsZ0JBQUksTUFBTSxJQUFJLGFBQVksTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs7QUFFMUMsb0JBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLHFCQUFLLElBQUksVUFBVSxJQUFJLE1BQU0sRUFBRTtBQUMzQix5QkFBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQ3pDOzs7QUFHRCxxQkFBSyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDcEIseUJBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQzlCOzs7QUFHRCxxQkFBSyxJQUFJLFVBQVUsSUFBSSxNQUFNLEVBQUU7O0FBRTNCLDBCQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7OztBQUc1QixtQ0FBZSx3QkFBc0IsVUFBVSwrQkFBNEIsQ0FBQztpQkFDL0U7YUFDSixNQUNJOztBQUVELCtCQUFlLHVKQUlkLENBQUM7YUFDTDs7O0FBR0QsZ0JBQUksaUJBQWlCLDJXQU9YLGVBQWUsdWdDQTZCbkIsQ0FBQzs7QUFFUCwwQ0FBYyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQzFEOzs7V0FoSWdCLEtBQUs7OztxQkFBTCxLQUFLOztBQStKMUIsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDakIsS0FBSyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7QUFDekIsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Ozs7SUFJZixZQUFZO2NBQVosWUFBWTs7QUFFSCxhQUZULFlBQVksQ0FFRixJQUFJLEVBQUUsTUFBTSxFQUFFOzhCQUZ4QixZQUFZOztBQUdWLG1DQUhGLFlBQVksNkNBR0osSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUNwQixZQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUN0QixZQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQztLQUNyQzs7OztpQkFOQyxZQUFZOztlQWFELHNCQUFDLFFBQVEsRUFBRTtBQUNwQixvQkFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQU8sSUFBSSxDQUFDLElBQUksZUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkU7OztlQU5ZLGtCQUFHO0FBQ1osMENBQWMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsOEJBQWMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1NBQ2pGOzs7V0FYQyxZQUFZO0dBQVMsS0FBSzs7QUFrQmhDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsWUFBWSxDQUFDOztJQUVoQyxnQkFBZ0I7Y0FBaEIsZ0JBQWdCOztBQUVQLGFBRlQsZ0JBQWdCLENBRU4sSUFBSSxFQUFFLE1BQU0sRUFBRTs4QkFGeEIsZ0JBQWdCOztBQUdkLG1DQUhGLGdCQUFnQiw2Q0FHUixJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3BCLFlBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO0FBQzFCLFlBQUksQ0FBQyxXQUFXLEdBQUcsa0JBQWtCLENBQUM7O0FBRXRDLFlBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBLENBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQzNFOzs7O2lCQVJDLGdCQUFnQjs7ZUFlTCxzQkFBQyxRQUFRLEVBQUU7QUFDcEIsdUNBaEJGLGdCQUFnQiw4Q0FnQkssUUFBUSxFQUFFO0FBQzdCLG9CQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBTyxJQUFJLENBQUMsSUFBSSxpQkFBYyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdkU7OztlQVBZLGtCQUFHO0FBQ1osMENBQWMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsOEJBQWMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO1NBQ3JGOzs7V0FiQyxnQkFBZ0I7R0FBUyxLQUFLOztBQXFCcEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQzs7SUFHeEMsVUFBVTtjQUFWLFVBQVU7O0FBRUEsYUFGVixVQUFVLENBRUMsSUFBSSxFQUFFLE1BQU0sRUFBRTs4QkFGekIsVUFBVTs7QUFHUixtQ0FIRixVQUFVLDZDQUdGLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDcEIsWUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDcEIsWUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUM7O0FBRWhDLFlBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbkQsWUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDdkIsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQztBQUN4QyxZQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7QUFFL0YsWUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQ2YsZ0JBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzVELG9CQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDL0IsTUFDSTtBQUNELG9CQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2QztTQUNKLE1BQ0k7QUFDRCxnQkFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7S0FDSjs7OztpQkF2QkMsVUFBVTs7OztlQStCTixrQkFBRztBQUNMLHVDQWhDRixVQUFVLHdDQWdDTzs7QUFFZiwwQ0FBYyxPQUFPLENBQUMseUNBQXlDLENBQUMsR0FBSSxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsQUFBQyxDQUFDO0FBQzVGLDBDQUFjLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQyxHQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxBQUFDLENBQUM7QUFDdkgsMENBQWMsT0FBTyxDQUFDLDZDQUE2QyxDQUFDLEdBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEFBQUMsQ0FBQztTQUNoRzs7O2VBRU0sa0JBQUc7QUFDTixnQkFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDNUI7OztlQUVpQiw2QkFBRztBQUNqQixnQkFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRTs7OzBDQUlaLGlCQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7O29CQUF6QyxDQUFDO29CQUFFLENBQUM7O0FBQ1Qsb0JBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRCxvQkFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUUvRCxvQkFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxnQ0FBWSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFDNUQsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BGLG9CQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JGO0FBQ0QsZ0JBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUU7Ozs7QUFJdEQsb0JBQUksQ0FBQyxZQUFZLEdBQUcsZ0NBQVksWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQ3RELEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLGlCQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs7QUFFcEYsb0JBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUU7O0FBRTFCLHdCQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNyRjthQUNKO1NBQ0o7OztlQUVZLHNCQUFDLFFBQVEsRUFBRTtBQUNwQix1Q0F2RUYsVUFBVSw4Q0F1RVcsUUFBUSxFQUFFOztBQUU3QixvQkFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQU8sSUFBSSxDQUFDLElBQUksZ0JBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztBQUV6RSxnQkFBRyw4QkFBYyxPQUFPLENBQUMseUNBQXlDLENBQUMsRUFBRTtBQUNqRSx3QkFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQU8sSUFBSSxDQUFDLElBQUksMkJBQXdCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNsRjs7QUFFRCxnQkFBRyw4QkFBYyxPQUFPLENBQUMsNkNBQTZDLENBQUMsRUFBRTtBQUNyRSx3QkFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQU8sSUFBSSxDQUFDLElBQUksbUJBQ2pDLGdDQUFZLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNuQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxpQkFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM1Rjs7QUFFRCxnQkFBRyw4QkFBYyxPQUFPLENBQUMsNkNBQTZDLENBQUMsRUFBRTtBQUNyRSx3QkFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQU8sSUFBSSxDQUFDLElBQUksbUJBQ2pDLGdDQUFZLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNuQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxpQkFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM1RjtTQUNKOzs7ZUFqRWEsa0JBQUc7QUFDYiwwQ0FBYyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSw4QkFBYyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7U0FDL0U7OztXQTVCQyxVQUFVO0dBQVMsS0FBSzs7QUE2RjlCLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsVUFBVSxDQUFDOztJQUc1QixTQUFTO2NBQVQsU0FBUzs7QUFFQyxhQUZWLFNBQVMsQ0FFRSxJQUFJLEVBQUUsTUFBTSxFQUFFOzhCQUZ6QixTQUFTOztBQUdQLG1DQUhGLFNBQVMsNkNBR0QsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUNwQixZQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztBQUN4QixZQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQzs7QUFFL0IsWUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbEUsWUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BFLFlBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUM3RDs7OztpQkFWQyxTQUFTOztlQWlCRSxzQkFBQyxRQUFRLEVBQUU7QUFDcEIsdUNBbEJGLFNBQVMsOENBa0JZLFFBQVEsRUFBRTs7QUFFN0Isb0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFPLElBQUksQ0FBQyxJQUFJLGlCQUFjLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNwRSxvQkFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQU8sSUFBSSxDQUFDLElBQUkscUJBQWtCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RixvQkFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQU8sSUFBSSxDQUFDLElBQUksb0JBQWlCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4RTs7O2VBVmEsa0JBQUc7QUFDYiwwQ0FBYyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSw4QkFBYyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7U0FDOUU7OztXQWZDLFNBQVM7R0FBUyxVQUFVOztBQTBCbEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O2dDQ2xWWCxxQkFBcUI7Ozs7OztzQkFDOUIsV0FBVzs7OztrQ0FDRix1QkFBdUI7O0lBRTVCLFFBQVE7QUFDYixhQURLLFFBQVEsQ0FDWixNQUFNLEVBQUU7OEJBREosUUFBUTs7QUFHckIsY0FBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7OzttQkFHTCxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQztBQUEvRCxpREFBaUU7QUFBNUQsZ0JBQUksSUFBSSxXQUFBLENBQUE7QUFDVCxnQkFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ3RCLG9CQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDdEIsd0JBQUksQ0FBQyxJQUFJLENBQUMsR0FBRztBQUNULCtCQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU87QUFDN0IsK0JBQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLFdBQVc7QUFDNUMsNkJBQUssRUFBRSxvQkFBSyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDM0UsOEJBQU0sRUFBRSxvQkFBSyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7cUJBQ2pGLENBQUM7aUJBQ0wsTUFDSSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUN2Qyx3QkFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLG9CQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUMxRCxNQUNJLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3ZDLHdCQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsZ0NBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQ2pFLE1BQ0k7QUFDRCx3QkFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDN0I7YUFDSjtTQUNKOzs7QUFHRCxZQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDZixnQkFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUNuRjs7O0FBR0QsWUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtBQUN2QixnQkFBSSxDQUFDLE1BQU0sR0FBRztBQUNWLHVCQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPO0FBQzlCLHVCQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksV0FBVztBQUM3QyxxQkFBSyxFQUFFLG9CQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzdFLHNCQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7YUFDbEUsQ0FBQztTQUNMO0tBQ0o7Ozs7aUJBMUNnQixRQUFROztlQTREbEIsZ0JBQUMsS0FBSyxFQUFFOzs7Ozs7d0JBTU0sQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUM7QUFBL0QseURBQWlFO0FBQTVELG9CQUFJLElBQUksYUFBQSxDQUFBO0FBQ1Qsb0JBQUksR0FBRyx5QkFBdUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxBQUFFLENBQUM7QUFDbkQsb0JBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUM7QUFDOUIscUJBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQUFBQyxDQUFDO0FBQzFDLG9CQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ2xDLHlCQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM3Qix5QkFBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEUseUJBQUssQ0FBQyxPQUFPLCtCQUE2QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3JGLHlCQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLEFBQUMsQ0FBQztpQkFDdEU7YUFDSjs7Ozs7QUFLRCxnQkFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO0FBQ3BDLHFCQUFLLENBQUMsT0FBTyxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hELHFCQUFLLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdGLHFCQUFLLENBQUMsT0FBTywrQkFBNkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUcsR0FBRyxJQUFJLENBQUM7QUFDdEYscUJBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxJQUFJLEFBQUMsQ0FBQzthQUN2RTs7QUFFRCxpQkFBSyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsOEJBQWMscUJBQXFCLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMzRixpQkFBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDM0U7OztlQUVZLHNCQUFDLFFBQVEsRUFBRTs7O3dCQUdILENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDO0FBQS9ELHlEQUFpRTtBQUE1RCxvQkFBSSxJQUFJLGFBQUEsQ0FBQTtBQUNULG9CQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNaLHdCQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDcEIsZ0NBQVEsQ0FBQyxpQkFBaUIsaUJBQWUsSUFBSSxlQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3RSxnQ0FBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLGtCQUFnQixJQUFJLFlBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JFLGdDQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssa0JBQWdCLElBQUksRUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3BFLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzFCLGdDQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssa0JBQWdCLElBQUksRUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3BFO2lCQUNKO2FBQ0o7OztBQUdELGdCQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDZix3QkFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMzRTs7O0FBR0QsZ0JBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtBQUNwQyx3QkFBUSxDQUFDLGlCQUFpQixDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0Usd0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLHdCQUF3QixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckUsd0JBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLHlCQUF5QixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDekU7U0FDSjs7O2VBekVjLGlCQUFDLE1BQU0sRUFBRTtBQUNwQixnQkFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ2hCLHVCQUFPLEtBQUssQ0FBQzthQUNoQjs7QUFFRCxnQkFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksSUFDdkIsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQ3RCLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxJQUN0QixNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtBQUN6Qix1QkFBTyxLQUFLLENBQUM7YUFDaEI7O0FBRUQsbUJBQU8sSUFBSSxDQUFDO1NBQ2Y7OztXQTFEZ0IsUUFBUTs7O3FCQUFSLFFBQVE7O0FBeUg3QixRQUFRLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7MEJDMUhWLGVBQWU7Ozs7Ozs2QkFHTixpQkFBaUI7Ozs7cUJBRzFCLFNBQVM7Ozs7NEJBQ0QsZ0JBQWdCOzs7OzRCQUd0QixpQkFBaUI7Ozs7d0JBQ3JCLFVBQVU7Ozs7bUJBQ1YsT0FBTzs7OztrQ0FDQSx1QkFBdUI7Ozs7UUFDdkMsbUJBQW1COztRQUNuQixvQkFBb0I7O1FBQ3BCLGVBQWU7O1FBQ2Ysa0JBQWtCOzs0QkFDRCxnQkFBZ0I7Ozs7c0JBQ3ZCLFdBQVc7Ozs7Z0NBQ0YscUJBQXFCOzs7OzZCQUN4QixrQkFBa0I7Ozs7eUJBQ3JCLGNBQWM7Ozs7d0JBQ2IsWUFBWTs7OztxQkFDZixTQUFTOzs7O2tDQUNGLHVCQUF1Qjs7OzswQkFDeEIsZUFBZTs7bUNBQ1osd0JBQXdCOztrQ0FDekIsdUJBQXVCOzsrQkFDM0Isb0JBQW9COzs7O3lCQUNiLGFBQWE7Ozs7c0JBRXpCLFNBQVM7Ozs7O0FBRzFCLElBQUksS0FBSyxHQUFHO0FBQ1IsT0FBRyx1QkFBQTtBQUNILFFBQUkscUJBQUE7QUFDSixTQUFLLHlCQUFBO0FBQ0wsT0FBRyxrQkFBQTtBQUNILGNBQVUsaUNBQUE7QUFDVixlQUFXLDJCQUFBO0FBQ1gsUUFBSSxxQkFBQTtBQUNKLGlCQUFhLCtCQUFBO0FBQ2IsY0FBVSw0QkFBQTtBQUNWLFdBQU8sd0JBQUE7QUFDUCxZQUFRLHVCQUFBO0FBQ1IsU0FBSyxvQkFBQTtBQUNMLFNBQUssb0JBQUE7QUFDTCxlQUFXLDJCQUFBO0FBQ1gsZ0JBQVksaUNBQUE7QUFDWixhQUFTLHVCQUFBO0FBQ1QsZ0JBQVksbUNBQUE7QUFDWixlQUFXLGlDQUFBO0FBQ1gsYUFBUyw4QkFBQTtBQUNULG9CQUFnQix3QkFBQTtDQUNuQixDQUFDOzs7QUFHRixJQUFJLHdCQUFNLFlBQVksRUFBRTs7QUFFcEIsVUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHO0FBQzlCLG9CQUFZLDZCQUFBO0FBQ1osYUFBSyxFQUFMLEtBQUs7QUFDTCxlQUFPLEVBQUUsMEJBQVEsTUFBTTtLQUMxQixDQUFDO0NBRUw7O0FBRUQsSUFBSSx3QkFBTSxjQUFjLEVBQUU7QUFDdEIsUUFBSSxDQUFDLE9BQU8sR0FBRztBQUNYLGFBQUssRUFBTCxLQUFLO0FBQ0wsZUFBTyxFQUFFLDBCQUFRLE1BQU07S0FDMUIsQ0FBQztDQUNMOztBQUVELElBQUksd0JBQU0sWUFBWSxFQUFFO0FBQ3BCLDRCQUFNLDZCQUE2QixFQUFFLENBQUM7Q0FDekM7OztBQUdELElBQUksZUFBZSxHQUFHLHNCQUFJLGFBQWEsQ0FBQztBQUN4QyxzQkFBSSxhQUFhLEdBQUcsVUFBVSxVQUFVLEVBQUUsUUFBUSxFQUFFO0FBQ2hELFFBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdEQsV0FBTyxZQUFzQjswQ0FBVCxPQUFPO0FBQVAsbUJBQU87OztBQUN2QixpQkFBUyxnQ0FBWSwwQkFBUSxNQUFNLGVBQVEsT0FBTyxFQUFDLENBQUM7S0FDdkQsQ0FBQztDQUNMLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkMxRmdCLGVBQWU7Ozs7a0NBQ1IsdUJBQXVCOzs7OzhCQUNyQixtQkFBbUI7Ozs7eUJBQzFCLGNBQWM7Ozs7eUJBQ2QsY0FBYzs7OztxQkFDSixVQUFVOzs7OzJCQUNwQixnQkFBZ0I7O21DQUNULHdCQUF3Qjs7a0NBQ3pCLHVCQUF1Qjs7NEJBQ3pCLGdCQUFnQjs7OztvQkFDdkIsUUFBUTs7OztxQkFDUCxTQUFTOzs7OzRCQUNILGdCQUFnQjs7OztrQ0FDakIsdUJBQXVCOzs7O3lCQUNqQixhQUFhOzs7OzhCQUNsQixtQkFBbUI7Ozs7d0JBRTNCLFVBQVU7Ozs7c0NBRUgsNEJBQTRCOztnQ0FDL0Isc0JBQXNCOztrQ0FDckIsd0JBQXdCOzs4QkFDckIsb0JBQW9COztrQ0FDbEIsd0JBQXdCOzs7QUFHbEQsa0NBQWEsUUFBUSxrQ0FBVSxDQUFDO0FBQ2hDLGtDQUFhLFFBQVEseUJBQU8sQ0FBQztBQUM3QixrQ0FBYSxRQUFRLDRCQUFRLENBQUM7QUFDOUIsa0NBQWEsUUFBUSwyQkFBVyxDQUFDO0FBQ2pDLGtDQUFhLFFBQVEsaUNBQWEsQ0FBQzs7OztJQUdkLEtBQUs7QUFFWCxhQUZNLEtBQUssQ0FFVixhQUFhLEVBQUUsT0FBTyxFQUFFOzs7OEJBRm5CLEtBQUs7O0FBR2xCLGVBQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQ3hCLHlDQUFlLElBQUksQ0FBQyxDQUFDOztBQUVyQixZQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUN6QixZQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixZQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzs7QUFFbEIsWUFBSSxDQUFDLElBQUksR0FBRyxzQkFBUyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDcEMsWUFBSSxDQUFDLFlBQVksNEJBQWMsQ0FBQztBQUNoQyxZQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELFlBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUM7QUFDM0MsWUFBSSxDQUFDLDBCQUEwQixHQUFJLE9BQU8sQ0FBQyx1QkFBdUIsS0FBSyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQUFBQyxDQUFDO0FBQzdGLFlBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUNwQyxZQUFJLE9BQU8sQ0FBQyx5QkFBeUIsS0FBSyxJQUFJLEVBQUU7QUFDNUMsK0JBQWtCLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDckM7O0FBRUQsZ0NBQU0sd0JBQXdCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixLQUFLLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQzlHLGdDQUFNLHNCQUFzQixFQUFFLENBQUM7O0FBRS9CLFlBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFlBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ25DLFlBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDOUIsWUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQzs7QUFFckMsWUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkIsWUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7O0FBRXhCLFlBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLFlBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLFlBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLFlBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUNuQyxZQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztBQUM5QyxZQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLFlBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFDOUIsWUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdEIsWUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUMzQixZQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0FBQ2xDLFlBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsWUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUM3QixZQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN0QixZQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7O0FBRWpCLFlBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQzs7QUFFbkMsWUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkIsWUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7OztBQUd2QixZQUFJLENBQUMsU0FBUyxHQUFHO0FBQ2IsZ0JBQUksRUFBRTtBQUNGLG9CQUFJLEVBQUU7MkJBQU0sTUFBSyxPQUFPLENBQUMsTUFBTSxDQUFDO2lCQUFBO2FBQ25DO1NBQ0osQ0FBQztBQUNGLFlBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXpDLFlBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFlBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFlBQUksQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFDbEMsWUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDOztBQUVsQixZQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDO0FBQzNDLDhCQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDL0I7O2lCQW5FZ0IsS0FBSzs7Ozs7ZUEyRWxCLGdCQUEyQzs7O2dCQUExQyxhQUFhLHlEQUFHLElBQUk7Z0JBQUUsV0FBVyx5REFBRyxJQUFJOztBQUN6QyxnQkFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ25CLHVCQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDNUI7O0FBRUQsZ0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQixnQkFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7OztBQUd6QixnQkFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FDekQsSUFBSSxDQUFDO3VCQUFNLE9BQUssYUFBYSxFQUFFO2FBQUEsQ0FBQyxDQUNoQyxJQUFJLENBQUMsWUFBTTtBQUNSLHVCQUFLLFlBQVksRUFBRSxDQUFDO0FBQ3BCLHVCQUFLLHFCQUFxQixFQUFFLENBQUM7O0FBRTdCLG9CQUFJLENBQUMsT0FBSyxTQUFTLENBQUMsT0FBTyxFQUFFO0FBQ3pCLDJCQUFLLFNBQVMsQ0FBQyxPQUFPLEdBQUc7QUFDckIsOEJBQU0sRUFBRTttQ0FBTSxPQUFLLEtBQUssR0FBRyxJQUFJO3lCQUFBO0FBQy9CLCtCQUFPLEVBQUUsaUJBQUMsSUFBSTttQ0FBSyxPQUFLLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZUFBYyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQzt5QkFBQTtxQkFDeEYsQ0FBQztBQUNGLDJDQUFRLFNBQVMsQ0FBQyxPQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDN0M7OztBQUdELHVCQUFLLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQ3hDLHVCQUFPLE9BQUssWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDL0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFNO0FBQ1YsdUJBQUssUUFBUSxFQUFFLENBQUM7QUFDaEIsdUJBQUssWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6Qix1QkFBSyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLHVCQUFLLHdCQUF3QixHQUFHLE9BQUssYUFBYSxDQUFDO0FBQ25ELHVCQUFLLHNCQUFzQixHQUFHLE9BQUssV0FBVyxDQUFDOztBQUUvQyxvQkFBSSxPQUFLLFdBQVcsS0FBSyxLQUFLLEVBQUU7QUFDNUIsMkJBQUssZUFBZSxFQUFFLENBQUM7aUJBQzFCO0FBQ0QsdUJBQUssYUFBYSxFQUFFLENBQUM7YUFDNUIsQ0FBQyxTQUFNLENBQUMsVUFBQSxLQUFLLEVBQUk7QUFDZCx1QkFBSyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLHVCQUFLLFFBQVEsR0FBRyxDQUFDLENBQUM7OztBQUdsQixvQkFBSSxJQUFJLFlBQUE7b0JBQUUsT0FBTyxZQUFBLENBQUM7QUFDbEIsb0JBQUksS0FBSyxDQUFDLElBQUksS0FBSyxlQUFlLEVBQUU7QUFDaEMsd0JBQUksR0FBRyxNQUFNLENBQUM7QUFDZCwyQkFBTyxHQUFHLDBCQUEwQixDQUFDO2lCQUN4QyxNQUNJOztBQUVELDJCQUFPLEdBQUcsMEJBQTBCLENBQUM7aUJBQ3hDO0FBQ0QsdUJBQUssT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBSixJQUFJLEVBQUUsT0FBTyxFQUFQLE9BQU8sRUFBRSxLQUFLLEVBQUwsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFLLGFBQWEsRUFBRSxDQUFDLENBQUM7O0FBRXpFLHVCQUFPLG9DQUFrQyxPQUFLLGFBQWEsVUFBSyxLQUFLLENBQUMsT0FBTyxBQUFFLENBQUM7QUFDaEYsb0JBQUksT0FBSyx3QkFBd0IsRUFBRTtBQUMvQiwwQ0FBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLDBDQUFJLElBQUksc0RBQXNELENBQUM7QUFDL0QsMkJBQU8sT0FBSyxJQUFJLENBQUMsT0FBSyx3QkFBd0IsRUFBRSxPQUFLLHNCQUFzQixDQUFDLENBQUM7aUJBQ2hGO0FBQ0Qsc0NBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQixzQkFBTSxLQUFLLENBQUM7YUFDZixDQUFDLENBQUM7O0FBRUgsbUJBQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztTQUM1Qjs7Ozs7ZUFHSyxrQkFBMkM7Z0JBQTFDLGFBQWEseURBQUcsSUFBSTtnQkFBRSxXQUFXLHlEQUFHLElBQUk7O0FBQzNDLG1CQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ2hEOzs7ZUFFTSxtQkFBRztBQUNOLGdCQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUN6QixnQkFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzs7QUFFN0IsZ0JBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzs7QUFFdEIsZ0JBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsbUNBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUMsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDOztBQUV0QixnQkFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO0FBQ3ZDLG9CQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELG9CQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzthQUN0QjtBQUNELGdCQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzs7QUFFdEIsZ0JBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoQixvQkFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUM1Qjs7QUFFRCxnQkFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ1QsdUNBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixrREFBYSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlCLG9CQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQzs7QUFFakIsb0JBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO2FBQ2xCOztBQUVELGdCQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzs7QUFFbEIsZ0JBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDN0Isb0JBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQUMsTUFBTSxFQUFLO0FBQzdCLDBCQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQ3RCLENBQUMsQ0FBQztBQUNILG9CQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzthQUN2Qjs7QUFFRCxnQkFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMvQjs7O2VBRVcsd0JBQUc7QUFDWCxnQkFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2IsdUJBQU87YUFDVjs7QUFFRCxnQkFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDakQsZ0JBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQyxnQkFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztBQUN4QyxnQkFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMxQixnQkFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQzs7O0FBRzNCLGdCQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQ3JELGdCQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRXhDLGdCQUFJO0FBQ0Esb0JBQUksQ0FBQyxFQUFFLEdBQUcsdUJBQVEsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDdEMseUJBQUssRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSTtBQUNyQyxzQ0FBa0IsRUFBRSx3QkFBTSxrQkFBa0I7aUJBQy9DLENBQUMsQ0FBQzthQUNOLENBQ0QsT0FBTSxDQUFDLEVBQUU7QUFDTCxzQkFBTSxJQUFJLEtBQUssQ0FDWCxpQ0FBaUMsR0FDakMsMERBQTBELEdBQzFELDhDQUE4QyxDQUNqRCxDQUFDO2FBQ0w7O0FBRUQsZ0JBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN4RSwrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoQyx3Q0FBWSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25DOzs7OztlQUdXLHdCQUFHO0FBQ1gsZ0JBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksd0JBQU0sY0FBYyxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLENBQUM7O0FBRS9GLGdCQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2Isc0JBQU0sSUFBSSxLQUFLLENBQUMsK0VBQStFLENBQUMsQ0FBQzthQUNwRzs7QUFFRCxnQkFBSSxJQUFJLENBQUMsMEJBQTBCLEVBQUU7QUFDakMsb0JBQUksSUFBSSx3QkFBcUIsVUFBVSxTQUFLLENBQUM7QUFDN0MsdUJBQU8sd0JBQU0sZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEY7QUFDRCxtQkFBTyxVQUFVLENBQUM7U0FDckI7Ozs7O2VBR1kseUJBQUc7QUFDWixnQkFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDZix1QkFBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2FBQ2hEO0FBQ0QsbUJBQU8sU0FBUSxPQUFPLEVBQUUsQ0FBQztTQUM1Qjs7Ozs7ZUFHVSxxQkFBQyxHQUFHLEVBQUU7OztBQUNiLGdCQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7O0FBRWYsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDOzs7QUFFVixzQkFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQzs7QUFDNUIsdUJBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQzs7QUFFMUIsc0JBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLFFBQU0sQ0FBQyxDQUFDO0FBQ3JFLGdEQUFhLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFFL0Isc0NBQUksS0FBSyw2Q0FBMkMsRUFBRSxDQUFHLENBQUM7QUFDMUQsb0JBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLHFCQUFLLENBQUMsSUFBSSxDQUFDLGdDQUFhLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxPQUFLLFdBQVcsRUFBRSx3QkFBTSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FDekcsVUFBQyxFQUFFLEVBQUs7QUFDSiwwQ0FBSSxLQUFLLDRDQUEwQyxFQUFFLENBQUcsQ0FBQztBQUN6RCwyQkFBTyxFQUFFLENBQUM7aUJBQ2IsRUFDRCxVQUFDLEtBQUssRUFBSztBQUNQLDBDQUFJLEtBQUsscURBQW1ELEdBQUcsUUFBSyxLQUFLLENBQUMsQ0FBQztBQUMzRSwyQkFBTyxTQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDaEMsQ0FBQyxDQUNMLENBQUM7OztBQWxCTixpQkFBSyxJQUFJLEVBQUUsR0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUU7b0JBQ3BDLE1BQU07OzthQWtCYjs7QUFFRCxnQkFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDckIsbUJBQU8sU0FBUSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7Ozs7O2VBR1Msc0JBQUc7QUFDVCxnQkFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDNUMsZ0JBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQSxHQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ2hFLG1CQUFPLE1BQU0sQ0FBQztTQUNqQjs7Ozs7ZUFHSSxpQkFBRztBQUNKLGdCQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxhQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzdELHVCQUFPLEtBQUssQ0FBQzthQUNqQjtBQUNELG1CQUFPLElBQUksQ0FBQztTQUNmOzs7OztlQUdzQixrQ0FBRzs7O0FBQ3RCLGdCQUFJLHdCQUFNLHNCQUFzQixFQUFFLEVBQUU7QUFDaEMsZ0RBQWEsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsd0JBQU0sa0JBQWtCLENBQUMsQ0FDMUYsSUFBSSxDQUFDOzJCQUFNLE9BQUssT0FBTyxFQUFFO2lCQUFBLENBQUMsQ0FDMUIsSUFBSSxDQUFDOzJCQUFNLE9BQUssU0FBUyxDQUFDLE9BQUssSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQUssSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO2lCQUFBLENBQUMsQ0FBQzthQUN4RjtTQUNKOzs7ZUFFUSxtQkFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3JCLGdCQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNsQixnQkFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLGdCQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDVCx1Q0FBUSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLHdCQUFNLGtCQUFrQixDQUFDLENBQUM7YUFDcEU7U0FDSjs7Ozs7ZUFHWSx5QkFBRztBQUNaLGdCQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNyQjs7Ozs7OztlQUtjLDJCQUFHO0FBQ2QsZ0JBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLGdCQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDakI7OztlQUVVLHNCQUFHO0FBQ1YsZ0JBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7O0FBRS9CLGdCQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7O0FBRWxCLG9CQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDakI7OztBQUdELGdCQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO0FBQ3hCLHNCQUFNLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUM1RCxNQUNJO0FBQ0Qsb0JBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFDOUIsb0JBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7YUFDbkM7U0FDSjs7Ozs7ZUFHYywyQkFBRzs7O0FBQ2QsZ0JBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7QUFDMUIsMEJBQVUsQ0FBQyxZQUFNO0FBQUUsMkJBQUssVUFBVSxFQUFFLENBQUM7aUJBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUMvQztTQUNKOzs7ZUFFSyxrQkFBRzs7QUFFTCxnQkFBSSxXQUFXLEdBQUcsRUFDZCxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssSUFDcEIsSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLElBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUNqQixJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSyxDQUFBLEFBQ3pCLENBQUM7OztBQUdGLGdCQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsb0JBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDL0I7OztBQUdELGdCQUFJLENBQUMsV0FBVyxFQUFFO0FBQ2QsdUJBQU8sS0FBSyxDQUFDO2FBQ2hCO0FBQ0QsZ0JBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDOzs7QUFHbkIsZ0JBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0FBQzlCLGdCQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDZCxnQkFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDMUIsZ0JBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOzs7QUFHMUIsZ0JBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtBQUN2QyxvQkFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNoQzs7O0FBR0QsZ0JBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7QUFDeEIsb0JBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQ3JCOztBQUVELGdCQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDYixrQ0FBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM1QixtQkFBTyxJQUFJLENBQUM7U0FDZjs7O2VBRUssa0JBQUc7OztBQUNMLGdCQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDOzs7QUFHakIsZ0JBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbkIseUJBQVksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUM7dUJBQUksT0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO2FBQUEsQ0FBQyxDQUFDO0FBQ3RFLHlCQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxDQUFDO3VCQUFJLE9BQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTthQUFBLENBQUMsQ0FBQzs7O0FBRy9ELGdCQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0FBQy9ELGdCQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQzs7O0FBRzNELGdCQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7O0FBR3RDLGdCQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLEVBQUU7QUFDbEMsb0JBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDeEMsd0JBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztBQUN0QywyQkFBTztpQkFDVjs7QUFFRCxvQkFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QixvQkFBSSxDQUFDLFVBQVUsQ0FDWCxtQkFBbUI7QUFDbkIsa0JBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDNUIsb0JBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7OztBQUd0QixrQkFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pDLGtCQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM1RDs7QUFFRCxnQkFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUNsQyxnQkFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUM5QyxvQkFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQzs7QUFFakMsb0JBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFBLElBQUksRUFBSTtBQUMzQywwQ0FBSSxJQUFJLHNCQUFvQixPQUFLLFlBQVkscUJBQWdCLElBQUksaUNBQThCLENBQUM7aUJBQ25HLEVBQUUsWUFBTSxFQUFFLENBQUMsQ0FBQzthQUNoQjtBQUNELGdCQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQzs7QUFFM0MsbUJBQU8sSUFBSSxDQUFDO1NBQ2Y7Ozs7OztlQUlTLHNCQUFnRDs7O2dCQUEvQyxXQUFXLHlEQUFHLFNBQVM7OzZFQUFvQixFQUFFOztnQkFBbEIsV0FBVyxRQUFYLFdBQVc7OztBQUU3Qyx1QkFBVyxHQUFHLEFBQUMsV0FBVyxJQUFJLElBQUksR0FBSSxJQUFJLEdBQUcsV0FBVyxDQUFDOztBQUV6RCxnQkFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7OztBQUcxRCxnQkFBSSxNQUFNLEdBQUcsYUFBWSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQ3hDLEdBQUcsQ0FBQyxVQUFBLENBQUM7dUJBQUksT0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQUEsQ0FBQyxDQUN4QixJQUFJLENBQUMsbUJBQU0sY0FBYyxDQUFDLENBQUM7OztBQUcvQixnQkFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsZ0JBQUksVUFBVSxZQUFBLENBQUM7Ozs7OztBQUNmLGtEQUFrQixNQUFNLDRHQUFFO3dCQUFqQixLQUFLOzs7QUFFVix3QkFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtBQUM1Qiw0QkFBSSxLQUFLLEdBQUcsZUFBYyxFQUFFLEVBQ3hCLG1CQUFNLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ2hDLDBCQUFFLEtBQUssRUFBRyxXQUFXLElBQUksS0FBSyxDQUFDLEtBQUssQUFBQyxFQUFFO3lCQUMxQyxDQUFDO0FBQ0YsNEJBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQzlCO0FBQ0QseUJBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbkQsOEJBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2lCQUM1Qjs7Ozs7Ozs7Ozs7Ozs7OztBQUVELG1CQUFPLEtBQUssQ0FBQztTQUNoQjs7O2VBRVUscUJBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRTtBQUM1QixnQkFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQzNCLGdCQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7O0FBRXJCLGdCQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzlDLGdCQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtBQUMvQix1QkFBTyxDQUFDLENBQUM7YUFDWjs7O0FBR0QsaUJBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO0FBQ2pDLG9CQUFJLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRXBDLG9CQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO0FBQzVCLDZCQUFTO2lCQUNaOzs7OztBQUtELG9CQUFJLGVBQWUsS0FBSyxJQUFJLEVBQUU7QUFDMUIsbUNBQWUsR0FBRyxLQUFLLENBQUM7O0FBRXhCLDJCQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZCx3QkFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7O0FBRzNCLDJCQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBSSxDQUFDLEFBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFJLElBQUksQ0FBQyxVQUFVLENBQUEsR0FBSSxJQUFJLEdBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEcsd0JBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLHlCQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDdkIsNEJBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUN4QztpQkFDSjs7O0FBR0Qsb0JBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzs7O0FBR25DLG9CQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzVCLDRCQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUM7YUFDckQ7O0FBRUQsbUJBQU8sWUFBWSxDQUFDO1NBQ3ZCOzs7ZUFFUyxzQkFBb0M7OEVBQUosRUFBRTs7Z0JBQS9CLFdBQVcsU0FBWCxXQUFXO2dCQUFFLFdBQVcsU0FBWCxXQUFXOztBQUNqQyxnQkFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDbkIsdUJBQU87YUFDVjs7O0FBR0QsdUJBQVcsR0FBRyxBQUFDLFdBQVcsS0FBSyxLQUFLLEdBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUNyRCx1QkFBVyxHQUFHLEFBQUMsV0FBVyxLQUFLLEtBQUssR0FBSSxLQUFLLEdBQUcsSUFBSSxDQUFDOzs7QUFHckQsZ0JBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7O0FBRWpCLGdCQUFJLFdBQVcsRUFBRTtBQUNiLGtCQUFFLENBQUMsVUFBVSxNQUFBLENBQWIsRUFBRSxxQkFBZSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBQyxDQUFDO2FBQzNDOztBQUVELGdCQUFJLFdBQVcsRUFBRTtBQUNiLGtCQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RCOztBQUVELGdCQUFJLFdBQVcsSUFBSSxXQUFXLEVBQUU7QUFDNUIsb0JBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQSxJQUFLLFdBQVcsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUEsQUFBQyxDQUFDO0FBQ3ZGLGtCQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2xCO1NBQ0o7OztlQUVhLDBCQUFxRDs4RUFBSixFQUFFOztnQkFBaEQsVUFBVSxTQUFWLFVBQVU7Z0JBQUUsV0FBVyxTQUFYLFdBQVc7Z0JBQUUsU0FBUyxTQUFULFNBQVM7Z0JBQUUsS0FBSyxTQUFMLEtBQUs7O0FBQ3RELGdCQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUNuQix1QkFBTzthQUNWOzs7O0FBSUQsc0JBQVUsR0FBRyxBQUFDLFVBQVUsS0FBSyxLQUFLLEdBQUksS0FBSyxHQUFHLDRCQUFZLFFBQVEsQ0FBQyxVQUFVLENBQUM7QUFDOUUsdUJBQVcsR0FBRyxBQUFDLFdBQVcsS0FBSyxLQUFLLEdBQUksS0FBSyxHQUFHLDRCQUFZLFFBQVEsQ0FBQyxXQUFXLENBQUM7QUFDakYscUJBQVMsR0FBRyxBQUFDLFNBQVMsS0FBSyxLQUFLLEdBQUksS0FBSyxHQUFHLDRCQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUM7QUFDekUsaUJBQUssR0FBRyxBQUFDLEtBQUssSUFBSSxJQUFJLEdBQUksS0FBSyxHQUFHLDRCQUFZLFFBQVEsQ0FBQyxRQUFRLENBQUM7OztBQUdoRSxnQkFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7QUFFakIsd0NBQVksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLDRCQUFZLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ3BHLHdDQUFZLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMxRCx3Q0FBWSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsNEJBQVksUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7Ozs7O0FBS3RGLGdCQUFJLEtBQUssRUFBRTs7QUFFUCxvQkFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO0FBQ3BCLGdEQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFDckIsNkJBQUssRUFBRSxJQUFJO0FBQ1gsMkJBQUcsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSTtxQkFDbEMsQ0FBQyxDQUFDO2lCQUNOOztxQkFFSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtBQUMvQyxvREFBWSxRQUFRLENBQUMsR0FBRyxDQUFDO0FBQ3JCLGlDQUFLLEVBQUUsSUFBSTtBQUNYLCtCQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLG1CQUFtQjtBQUM5QyxxQ0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUI7eUJBQ3ZELENBQUMsQ0FBQztxQkFDTjs7eUJBRUksSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO0FBQ3RCLHdEQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFDckIscUNBQUssRUFBRSxJQUFJO0FBQ1gsbUNBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRztBQUN4Qix5Q0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUI7NkJBQ3ZELENBQUMsQ0FBQzt5QkFDTjs7NkJBRUksSUFBSSxLQUFLLEtBQUssVUFBVSxFQUFFO0FBQzNCLDREQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFDckIseUNBQUssRUFBRSxJQUFJO0FBQ1gsdUNBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsU0FBUztBQUMvQiw2Q0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUI7aUNBQ3ZELENBQUMsQ0FBQzs2QkFDTjthQUNKLE1BQ0k7QUFDRCw0Q0FBWSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDOUM7U0FDSjs7Ozs7ZUFHVyxzQkFBQyxLQUFLLEVBQUU7QUFDaEIsZ0JBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ25CLHNDQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0FBQ3RFLHVCQUFPLFNBQVEsT0FBTyxFQUFFLENBQUM7YUFDNUI7OztBQUdELGdCQUFJLEtBQUssR0FBRztBQUNSLGlCQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyx3QkFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztBQUNuRSxpQkFBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsd0JBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07YUFDdkUsQ0FBQzs7QUFFRixnQkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEIsbUJBQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQ3JDLElBQUksQ0FBQyxVQUFBLFNBQVM7dUJBQUksZUFBYyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUwsS0FBSyxFQUFFLENBQUM7YUFBQSxDQUFDLFNBQ2pELENBQUMsVUFBQSxLQUFLO3VCQUFJLFNBQVEsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFMLEtBQUssRUFBRSxDQUFDO2FBQUEsQ0FBQyxDQUFDO1NBQ2xEOzs7Ozs7ZUFJTSxpQkFBQyxPQUFPLEVBQUU7QUFDYixtQkFBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hDOzs7Ozs7O2VBS2MsMkJBQXVDOzs7OEVBQUosRUFBRTs7bUNBQWxDLElBQUk7Z0JBQUosSUFBSSw4QkFBRyxJQUFJO3NDQUFFLE9BQU87Z0JBQVAsT0FBTyxpQ0FBRyxJQUFJOztBQUN6QyxtQkFBTyxhQUFZLFVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBSzs7QUFFcEMsb0JBQUksT0FBSyxRQUFRLEVBQUU7O0FBRWYsd0JBQUksT0FBSyxRQUFRLENBQUMsTUFBTSxJQUFJLE9BQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7O0FBRXJELDhDQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0FBQ3ZFLCtCQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN2Qzs7O0FBR0QsMkJBQUssUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLE9BQU8sRUFBUCxPQUFPLEVBQUUsTUFBTSxFQUFOLE1BQU0sRUFBRSxDQUFDO0FBQzNDLDBDQUFJLEtBQUssNENBQTRDLENBQUM7QUFDdEQsMkJBQU87aUJBQ1Y7OztBQUdELHVCQUFLLFFBQVEsR0FBRyxFQUFFLE9BQU8sRUFBUCxPQUFPLEVBQUUsTUFBTSxFQUFOLE1BQU0sRUFBRSxDQUFDOzs7QUFHcEMsb0JBQUksT0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtBQUNuQywyQkFBSyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztpQkFDcEM7OztBQUdELG9CQUFJLElBQUksRUFBRTtBQUNOLDJCQUFLLGtCQUFrQixFQUFFLENBQUM7QUFDMUIsc0RBQWEsT0FBTyxDQUFDLE9BQUssa0JBQWtCLEVBQUUsU0FBTyxDQUFDO2lCQUN6RDtBQUNELHVCQUFLLHFCQUFxQixFQUFFLENBQUM7QUFDN0IsdUJBQUssU0FBUyxFQUFFLENBQUM7OztBQUdqQix1QkFBSyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUN4Qyx1QkFBSyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQUEsSUFBSSxFQUFJO0FBQ2xDLHdCQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNwRCwrQkFBSyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNyQztpQkFDSixDQUFDLENBQUM7QUFDSCx1QkFBSyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUN2Qyx1QkFBSyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFNOztBQUVWLG9CQUFJLE9BQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7QUFDbkMsMkJBQUssV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7aUJBQ3ZDO2FBQ0osQ0FBQyxDQUFDO1NBQ047Ozs7OztlQUltQixnQ0FBRztBQUNuQixnQkFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2Ysc0NBQUksSUFBSSxrQ0FBa0MsQ0FBQztBQUMzQyxvQkFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtBQUN2Qix3QkFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQy9COzs7QUFHRCxvQkFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDbEMsb0JBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLG9CQUFJLE1BQU0sRUFBRTtBQUNSLDBDQUFJLEtBQUssb0RBQW9ELENBQUM7QUFDOUQsd0JBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzlEO2FBQ0o7U0FDSjs7Ozs7Ozs7ZUFNUSxxQkFBMkM7OztnQkFBMUMsYUFBYSx5REFBRyxJQUFJO2dCQUFFLFdBQVcseURBQUcsSUFBSTs7QUFDOUMsZ0JBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUM7O0FBRXpELGdCQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQUU7QUFDeEMsb0JBQUksQ0FBQyxXQUFXLEdBQUcsd0JBQU0sVUFBVSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDMUUsTUFDSTtBQUNELG9CQUFJLENBQUMsV0FBVyxHQUFHLHdCQUFNLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNwRDs7QUFFRCxtQkFBTywwQkFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsTUFBTSxFQUFJO0FBQzlFLHVCQUFLLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsdUJBQUssT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFLLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDOUMsdUJBQU8sT0FBSyxNQUFNLENBQUM7YUFDdEIsQ0FBQyxDQUFDO1NBQ047Ozs7Ozs7Ozs7Ozs7Ozs7O2VBZWEsdUJBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUN6QixnQkFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQUFBQyxFQUFFO0FBQ25FLHNDQUFJLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkUsdUJBQU87YUFDVjs7QUFFRCxnQkFBSSxJQUFJLEdBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxBQUFDLENBQUM7QUFDL0MsZ0JBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDOztBQUVuRSxnQkFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDaEQsc0JBQU0sQ0FBQyxHQUFHLEdBQUcsd0JBQU0sZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsdUJBQU8sTUFBTSxDQUFDLElBQUksQ0FBQzthQUN0Qjs7QUFFRCxnQkFBSSxJQUFJLEVBQUU7QUFDTix1QkFBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDOUQsTUFBTTtBQUNILHVCQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDNUM7U0FDSjs7O2VBRWdCLDZCQUFHO0FBQ2hCLGdCQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDZixnQkFBSSxpQkFBaUIsR0FBRyxhQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFFbEQsaUJBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7QUFDbEMsb0JBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLG9CQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUVyQyxvQkFBSTtBQUNBLHdCQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGdDQUFXLE1BQU0sQ0FBQyxlQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUosSUFBSSxFQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDeEYsd0JBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JCLDhCQUFNLEVBQUUsQ0FBQztxQkFDWjtpQkFDSixDQUNELE9BQU0sQ0FBQyxFQUFFO0FBQ0wsMkJBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQix3QkFBSSxPQUFPLHNDQUFvQyxDQUFDLENBQUMsT0FBTyxBQUFFLENBQUM7QUFDM0QsMENBQUksSUFBSSxhQUFXLE9BQU8sRUFBSSxNQUFNLENBQUMsQ0FBQztBQUN0Qyx3QkFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBTixNQUFNLEVBQUUsT0FBTyxFQUFQLE9BQU8sRUFBRSxDQUFDLENBQUM7aUJBQ2pFOzs7QUFHRCxvQkFBSSxnQ0FBVyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRTtBQUNyRCx5QkFBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDcEI7YUFDSjs7Ozs7Ozs7QUFHRCxtREFBYyxpQkFBaUIsaUhBQUU7d0JBQXhCLENBQUM7O0FBQ04sd0JBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN6QiwrQkFBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLDZCQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNqQjtpQkFDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0QsZ0JBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDbEIsb0JBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQUEsSUFBSSxFQUFJO0FBQ2xDLDJCQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRTtpQkFDakQsQ0FBQyxDQUFDO2FBQ047Ozs7Ozs7OztBQUlELG1EQUFrQix3QkFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUhBQUU7d0JBQTNDLEtBQUs7O0FBQ1Ysd0JBQUksS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDL0MsNEJBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO3FCQUN6RDtpQkFDSjs7Ozs7Ozs7Ozs7Ozs7O1NBQ0o7Ozs7O2VBR1csd0JBQUc7QUFDWCxtQkFBTyx1QkFBUSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbEU7Ozs7O2VBR1csd0JBQUc7QUFDWCxnQkFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ3pDLHNCQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7YUFDL0U7OztBQUdELGdCQUFJLENBQUMsTUFBTSxHQUFHLGtDQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7Ozs7Ozs7QUFHM0QsbURBQWtCLHdCQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlIQUFFO3dCQUFwQyxLQUFLOztBQUNWLHlCQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDeEI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdELGdCQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUMxQiw4Q0FBYSxPQUFPLENBQUMsYUFBWSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRTVELGdCQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNyQjs7O2VBRWlCLDhCQUFHOzs7OztBQUdqQixnQkFBSSxXQUFXLEdBQUcsYUFBWSxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3hELGdCQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN4QixnQkFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDOzs7Ozs7QUFDckIsbURBQWlCLHdCQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpSEFBRTt3QkFBakQsSUFBSTs7QUFDVCx3QkFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTs7Ozs7O0FBQ25CLCtEQUEwQix3QkFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpSEFBRTs7O29DQUExQyxLQUFJO29DQUFFLEtBQUs7OztBQUVqQixvQ0FBSSxLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRTtBQUN2RSx3Q0FBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFJLENBQUM7QUFDckMsd0NBQUksTUFBTSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7OztBQUcxQix3Q0FBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQ3RDLDhDQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7cUNBQ3BDOztBQUVELDBDQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUM7K0NBQUksUUFBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO3FDQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxVQUFVLEVBQUk7QUFDOUQsNENBQUksS0FBSyxHQUFHLFFBQUssTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3BDLDRDQUFJLEtBQUssRUFBRTtBQUNQLG9EQUFLLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsZ0RBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtBQUNoQix3REFBUSxHQUFHLElBQUksQ0FBQzs2Q0FDbkI7eUNBQ0o7cUNBQ0osQ0FBQyxDQUFDO2lDQUNOOzZCQUNKOzs7Ozs7Ozs7Ozs7Ozs7cUJBQ0o7aUJBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJRCxnQkFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7OztBQUdqRyxtQkFBTyxhQUFZLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDO3VCQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQUEsQ0FBQyxDQUFDO1NBQ3JGOzs7OztlQUdjLDJCQUFHO0FBQ2QsbUJBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN0Qzs7Ozs7ZUFHYyx5QkFBQyxJQUFJLEVBQUU7QUFDbEIsbUJBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUM7Ozs7O2VBR1csd0JBQUc7QUFDWCxnQkFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDakIsaUJBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDOUIsb0JBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNyRSw2QkFBUztpQkFDWjtBQUNELG9CQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxxQkFBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQyxxQkFBSyxDQUFDLE9BQU8sR0FBRyxBQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSyxHQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDekQsb0JBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUNmLHdCQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxtQkFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDNUQ7YUFDSjtBQUNELCtCQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDN0I7Ozs7O2VBR1kseUJBQUc7QUFDWixnQkFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3RDLGdCQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUNyQixnQkFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtBQUNoQixvQkFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsZ0NBQVksVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM1RDtBQUNELGdCQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUU7QUFDeEIsb0JBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDeEM7OztBQUdELGdCQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNoQyxvQkFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxhQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDOzJCQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztpQkFBQSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFHLENBQUM7YUFDakYsTUFDSTtBQUNELG9CQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDO2FBQ3JEO1NBQ0o7Ozs7OztlQUlXLHdCQUFtQjs7OzhFQUFKLEVBQUU7O2dCQUFkLE9BQU8sU0FBUCxPQUFPOztBQUNsQixnQkFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ2xCLGdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsZ0JBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQzs7QUFFNUMsOENBQWEsSUFBSSxFQUFFLENBQUM7QUFDcEIsZ0JBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEIsZ0JBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwQixnQkFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDekIsZ0JBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwQixnQkFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDOzs7QUFHckIsZ0JBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7O0FBR3BCLGdCQUFJLElBQUksR0FBRyxPQUFPLEdBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEdBQzVELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOzs7QUFHOUIsbUJBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFNO0FBQ25CLHdCQUFLLFFBQVEsRUFBRSxDQUFDO0FBQ2hCLHdCQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN6Qix3QkFBSyxhQUFhLEVBQUUsQ0FBQzthQUN4QixDQUFDLENBQUM7U0FDTjs7Ozs7ZUFHaUIsOEJBQUc7O0FBRWpCLGdCQUFJLENBQUMsaUJBQWlCLEdBQUcsd0JBQU0sc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25FLG1CQUFPLGdDQUFhLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFO0FBQy9ELHNCQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtBQUM5QiwwQkFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzlCLENBQUMsQ0FBQztTQUNOOzs7ZUFFb0IsaUNBQUc7QUFDcEIsZ0JBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2pCLG9CQUFJLENBQUMsU0FBUyxHQUFHLDJCQUFxQixJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNoRSxNQUNJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNuQixnREFBYSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO2FBQ3hFO1NBQ0o7Ozs7O2VBR3lCLHNDQUFHOzs7QUFDekIsZ0JBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO0FBQzdCLHVCQUFPLFNBQVEsTUFBTSxFQUFFLENBQUM7YUFDM0I7QUFDRCxnQkFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQzs7QUFFbkMsbUJBQU8sZ0NBQWEsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsaUNBQWlDLENBQUMsQ0FDM0UsSUFBSSxDQUFDLFVBQUEsS0FBSyxFQUFJO0FBQ1gsd0JBQUssc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBQ3BDLHVCQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQzsyQkFBSyxDQUFDLEdBQUcsQ0FBQztpQkFBQSxDQUFDLENBQUM7YUFDeEMsQ0FBQyxDQUFDO1NBQ1Y7Ozs7O2VBR1EscUJBQUc7QUFDUixnQkFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7U0FDakM7Ozs7O2VBR2tCLDhCQUFHO0FBQ2xCLGdCQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLHdCQUF3QixDQUFBLElBQy9FLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFO0FBQzVDLG9CQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNoRCxvQkFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNqQztTQUNKOzs7ZUFFaUIsNkJBQUc7QUFDakIsZ0JBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7U0FDeEM7Ozs7Ozs7ZUFLVSxzQkFBRzs7O0FBQ1YsZ0JBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksRUFBRTtBQUMvQix1QkFBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2FBQ3hDOztBQUVELGdCQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7OztBQUdyQixnQkFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUMzQixnQkFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxhQUFZLFVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBSztBQUM3RCx3QkFBSyxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3hDLHdCQUFLLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7YUFDekMsQ0FBQyxDQUFDO0FBQ0gsbUJBQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztTQUN4Qzs7Ozs7ZUFHa0IsOEJBQUc7QUFDbEIsZ0JBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksRUFBRTs7OztBQUkvQixvQkFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDN0Msb0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0Isb0JBQUksTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QyxxQkFBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEMsMEJBQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNsQztBQUNELG9CQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7OztBQUdyRCxvQkFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBSCxHQUFHLEVBQUUsSUFBSSxFQUFKLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0Msb0JBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7YUFDaEM7U0FDSjs7Ozs7OztlQU1lLDBCQUFDLEtBQUssRUFBRTtBQUNwQixnQkFBSSxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ2hGLGdCQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQ3JCLHVCQUFPO2FBQ1Y7O2dCQUVLLFNBQVMsR0FBaUIsSUFBSSxDQUE5QixTQUFTO2dCQUFFLEtBQUssR0FBVSxJQUFJLENBQW5CLEtBQUs7Z0JBQUUsR0FBRyxHQUFLLElBQUksQ0FBWixHQUFHOztBQUUzQixnQkFBSSxzQkFBSSxLQUFLLENBQUMsRUFBRTtBQUNaLHNDQUFJLEtBQUssT0FBQyxxQ0FBVyxTQUFTLGtDQUFTLEdBQUcsR0FBQyxDQUFDO2FBQy9DLE1BQ0k7QUFDRCxzQ0FBSSxLQUFLLHFEQUFtRCxLQUFLLENBQUcsQ0FBQzthQUN4RTtTQUNKOzs7OztlQUdPLGtCQUFDLElBQUksRUFBRTtBQUNYLG1CQUFPLENBQUMsT0FBTyxtQkFBaUIsSUFBSSxDQUFHLENBQUM7QUFDeEMsNENBQWEsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2hFOzs7ZUFFVSxxQkFBQyxJQUFJLEVBQUU7QUFDZCxtQkFBTyxDQUFDLFVBQVUsbUJBQWlCLElBQUksQ0FBRyxDQUFDO0FBQzNDLDRDQUFhLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25FOzs7OztlQUdVLHNCQUFHO0FBQ1YsZ0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUNqQixnQkFBSSxDQUFDLEtBQUssR0FBRztBQUNULHVCQUFPLEVBQUU7QUFDTCxrQ0FBYyxFQUFFLEtBQUs7aUJBQ3hCOzs7QUFHRCwyQkFBVyxFQUFDLHVCQUF3Qjt3QkFBdkIsR0FBRyx5REFBRyxDQUFDO3dCQUFFLE9BQU8seURBQUcsRUFBRTs7QUFDOUIsd0JBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLHdCQUFJLEtBQUssR0FBRyxTQUFSLEtBQUssR0FBUztBQUNkLDRCQUFJLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDeEIsNkJBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQU07QUFDOUIsaUNBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDOztBQUVoQyxnQ0FBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtBQUNwQixxQ0FBSyxFQUFFLENBQUM7NkJBQ1gsTUFDSTtBQUNELG9DQUFJLEdBQUcsR0FBRyxFQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDOzJDQUFLLENBQUMsR0FBRyxDQUFDO2lDQUFBLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFBLEFBQUMsQ0FBQztBQUMzRCxzREFBSSxJQUFJLHVCQUFxQixHQUFHLGdCQUFXLEdBQUcsY0FBUyxJQUFJLENBQUMsR0FBRyxNQUFBLENBQVIsSUFBSSxFQUFRLEtBQUssQ0FBQyxjQUFTLElBQUksQ0FBQyxHQUFHLE1BQUEsQ0FBUixJQUFJLEVBQVEsS0FBSyxDQUFDLFdBQVEsQ0FBQzs2QkFDaEg7eUJBQ0osQ0FBQyxDQUFDO3FCQUNOLENBQUM7QUFDRix5QkFBSyxFQUFFLENBQUM7aUJBQ1g7OztBQUdELG9DQUFvQixFQUFDLGdDQUFHO0FBQ3BCLHdCQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7Ozs7OztBQUNoQiwyREFBaUIsS0FBSyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxpSEFBRTtnQ0FBakQsSUFBSTs7QUFDVCxpQ0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzNCLHNDQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxzQ0FBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDOzZCQUN0RDt5QkFDSjs7Ozs7Ozs7Ozs7Ozs7OztBQUNELDJCQUFPLE1BQU0sQ0FBQztpQkFDakI7O0FBRUQsd0NBQXdCLEVBQUMsb0NBQUc7QUFDeEIsd0JBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztBQUN0RCx3QkFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLHlCQUFLLElBQUksS0FBSyxJQUFJLFlBQVksRUFBRTtBQUM1Qiw0QkFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNFLDhCQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyw4QkFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDdkM7QUFDRCwyQkFBTyxNQUFNLENBQUM7aUJBQ2pCO2FBQ0osQ0FBQztTQUNMOzs7ZUFwaENhLGdCQUFDLE1BQU0sRUFBZ0I7Z0JBQWQsT0FBTyx5REFBRyxFQUFFOztBQUMvQixtQkFBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDckM7OztXQXZFZ0IsS0FBSzs7O3FCQUFMLEtBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJDakNSLGVBQWU7Ozs7c0JBQ2hCLFdBQVc7Ozs7a0NBQ0YsdUJBQXVCOzswQkFDeEIsZUFBZTs7OztBQUV4QyxJQUFJLFdBQVcsQ0FBQzs7cUJBRUQsV0FBVyxHQUFHOzs7QUFHekIsYUFBUyxFQUFBLG1CQUFDLEdBQUcsRUFBZTtZQUFiLElBQUkseURBQUcsSUFBSTs7QUFDdEIsZUFBTyxXQUFXLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDL0U7Ozs7OztBQU1ELHNCQUFrQixFQUFBLDRCQUFDLEdBQUcsRUFBZTtZQUFiLElBQUkseURBQUcsSUFBSTs7QUFDL0IsWUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNOLG1CQUFPLFNBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzlCOztBQUVELFlBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQ3pCLGdCQUFJLEdBQUcsSUFBSSxJQUFJLHdCQUFNLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN4Qzs7QUFFRCxlQUFPLHdCQUFNLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQSxNQUFNLEVBQUk7O0FBRTFDLGdCQUFJLE9BQU8sTUFBTSxVQUFPLEtBQUssUUFBUSxFQUFFO0FBQ25DLHNCQUFNLFVBQU8sR0FBRyxDQUFDLE1BQU0sVUFBTyxDQUFDLENBQUM7YUFDbkM7O0FBRUQsZ0JBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sVUFBTyxDQUFDLEVBQUU7QUFDL0IsMkJBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BDLHVCQUFPLE1BQU0sQ0FBQzthQUNqQjs7O0FBR0QsZ0JBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQzs7Ozs7O0FBQ2pCLGtEQUFnQixNQUFNLFVBQU8sNEdBQUU7d0JBQXRCLElBQUc7O0FBQ1IsMkJBQU8sQ0FBQyxJQUFJLENBQUMsd0JBQU0sVUFBVSxDQUFDLElBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUM3Qzs7Ozs7Ozs7Ozs7Ozs7OztBQUNELG1CQUFPLE1BQU0sVUFBTyxDQUFDOztBQUVyQixtQkFBTyxTQUNILEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQUEsR0FBRzt1QkFBSSxXQUFXLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDO2FBQUEsQ0FBQyxDQUFDLENBQzVELElBQUksQ0FBQyxVQUFBLE9BQU8sRUFBSTtBQUNaLHNCQUFNLEdBQUcsMENBQWEsRUFBRSw0QkFBSyxPQUFPLElBQUUsTUFBTSxHQUFDLENBQUM7QUFDOUMsMkJBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BDLHVCQUFPLE1BQU0sQ0FBQzthQUNqQixDQUFDLENBQUM7U0FDVixDQUFDLENBQUM7S0FDTjs7O0FBR0QsYUFBUyxFQUFBLG1CQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDcEIsbUJBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0MsbUJBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUMsZUFBTyxNQUFNLENBQUM7S0FDakI7OztBQUdELHdCQUFvQixFQUFBLDhCQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDL0IsY0FBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQzs7Ozs7OztBQUV0QywrQ0FBb0Isd0JBQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUhBQUU7b0JBQXpDLE1BQU07O0FBQ1gsc0JBQU0sQ0FBQyxHQUFHLEdBQUcsd0JBQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFRCxlQUFPLE1BQU0sQ0FBQztLQUNqQjs7O0FBR0QscUJBQWlCLEVBQUEsMkJBQUMsTUFBTSxFQUFFLElBQUksRUFBRTtBQUM1QixjQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7QUFZeEMsWUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFOzs7Ozs7QUFDZixtREFBZ0Msd0JBQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUhBQUU7Ozt3QkFBcEQsVUFBVTt3QkFBRSxLQUFLOzs7QUFFdkIsd0JBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUNmLDRCQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDOzs7QUFHeEIsNEJBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsRCxnQ0FBSSxZQUFZLEdBQUcsSUFBSSxHQUFHLFVBQVUsQ0FBQztBQUNyQyxrQ0FBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3QyxpQ0FBSyxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7eUJBQ2hDOzs2QkFFSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUM5QixvQ0FBSSxZQUFZLEdBQUcsSUFBSSxHQUFHLFVBQVUsQ0FBQztBQUNyQyxzQ0FBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEMscUNBQUssQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDOzZCQUNoQztxQkFDSjs7O0FBR0Qsd0JBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTttQ0FDQyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUM7O0FBQXpFLGlFQUEyRTtBQUF0RSxnQ0FBSSxJQUFJLFdBQUEsQ0FBQTs7QUFFVCxnQ0FBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUM5RCxvQ0FBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7OztBQUd2QyxvQ0FBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQ3ZCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2Qix3Q0FBSSxZQUFZLEdBQUcsSUFBSSxHQUFHLFVBQVUsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQzNELDBDQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdDLHlDQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7aUNBQy9DOztxQ0FFSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUM5Qiw0Q0FBSSxZQUFZLEdBQUcsSUFBSSxHQUFHLFVBQVUsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQzNELDhDQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQyw2Q0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO3FDQUMvQzs2QkFDSjt5QkFDSjtxQkFDSjs7O0FBR0Qsd0JBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTs7Ozs7O0FBQ3pDLCtEQUF5QyxvQkFBSyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUhBQUU7O29DQUEzRSxJQUFJLGdCQUFKLElBQUk7b0NBQUUsS0FBSyxnQkFBTCxLQUFLO29DQUFFLEdBQUcsZ0JBQUgsR0FBRztvQ0FBRSxRQUFRLGdCQUFSLFFBQVE7OztBQUVoQyxvQ0FBSSxJQUFJLEtBQUssV0FBVyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDOUUsd0NBQUksWUFBWSxHQUFHLElBQUksR0FBRyxVQUFVLEdBQUcsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN6RCwwQ0FBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUMvQyw0Q0FBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQztpQ0FDaEM7NkJBQ0o7Ozs7Ozs7Ozs7Ozs7OztxQkFFSjtpQkFDSjs7Ozs7Ozs7Ozs7Ozs7O1NBQ0o7Ozs7O0FBS0QsWUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFOzs7Ozs7QUFDakIsbURBQW9CLHdCQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGlIQUFFO3dCQUExQyxPQUFPOztBQUNaLHdCQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDYiwrQkFBTyxDQUFDLEdBQUcsR0FBRyx3QkFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDckQ7aUJBQ0o7Ozs7Ozs7Ozs7Ozs7OztTQUNKOztBQUVELGVBQU8sTUFBTSxDQUFDO0tBQ2pCOzs7QUFHRCxZQUFRLEVBQUEsa0JBQUMsTUFBTSxFQUFFOztBQUViLGNBQU0sR0FBRyxnQ0FBWSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7O0FBR25ELFlBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNsQixhQUFLLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7QUFDL0Isa0JBQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDO1NBQzNDOzs7QUFHRCxjQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQ3RDLFlBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUNmLGtCQUFNLENBQUMsT0FBTyxXQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUMxQzs7O0FBR0QsWUFBSSxhQUFZLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzFDLGtCQUFNLENBQUMsT0FBTyxXQUFRLEdBQUcsRUFBRSxDQUFDO1NBQy9COzs7QUFHRCxZQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7Ozs7OztBQUNuQiwrQ0FBbUIsd0JBQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUhBQUU7b0JBQXhDLE1BQU07O0FBQ1gsb0JBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUNmLDBCQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2QsMEJBQU07aUJBQ1Q7YUFDSjs7Ozs7Ozs7Ozs7Ozs7OztBQUVELFlBQUksQ0FBQyxNQUFNLEVBQUU7QUFDVCxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFZLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDaEU7OztBQUdELGNBQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDcEMsY0FBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNwQyxjQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDOztBQUVwQyxlQUFPLE1BQU0sQ0FBQztLQUNqQjs7Q0FFSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQzFNaUIsZUFBZTs7OztrQ0FDUix1QkFBdUI7Ozs7OzswQkFDdkIsZUFBZTs7OztvQkFDdkIsUUFBUTs7OztrQ0FDRix1QkFBdUI7Ozs7eUJBQ2pCLGFBQWE7Ozs7a0NBQ2hCLHVCQUF1Qjs7bUNBQ3RCLHdCQUF3Qjs7MEJBQzFCLGVBQWU7O3lCQUNwQixjQUFjOzs7O0FBRTNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQzs7OztBQUc5QixJQUFJLHdCQUFNLGNBQWMsRUFBRTs7QUFFMUIsbUJBQWMsSUFBSSxFQUFFOztBQUVoQix3QkFBZ0Isd0JBQUE7O0FBRWhCLGVBQU8sRUFBRTtBQUNMLGlCQUFLLEVBQUUsRUFBRTtBQUNULG1CQUFPLEVBQUUsRUFBRTtTQUNkO0FBQ0QsY0FBTSxFQUFFLEVBQUU7QUFDVixhQUFLLEVBQUUsRUFBRTtBQUNULGNBQU0sRUFBRSxFQUFFO0FBQ1YsYUFBSyxFQUFFLEVBQUU7QUFDVCxlQUFPLEVBQUUsRUFBRTtBQUNYLGNBQU0sRUFBRSxFQUFFOzs7QUFHVixZQUFJLEVBQUMsY0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFO0FBQzlDLGdCQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUM1QixnQkFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDL0Isb0NBQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7QUFDOUMsbUNBQWlCLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUMsbUJBQU8sU0FBUyxDQUFDO1NBQ3BCOzs7QUFHRCxvQkFBWSxFQUFDLHNCQUFDLElBQXNCLEVBQUU7Z0JBQXRCLE1BQU0sR0FBUixJQUFzQixDQUFwQixNQUFNO2dCQUFFLFVBQVUsR0FBcEIsSUFBc0IsQ0FBWixVQUFVOztBQUM5QixrQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRTVCLGdCQUFJLENBQUMsV0FBVyxHQUFHLDZCQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakQsZ0JBQUksQ0FBQyxNQUFNLEdBQUcsNkJBQWEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLGdCQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQzs7OztBQUk3QixpQkFBSyxJQUFJLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzdCLG9CQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDdEIsMEJBQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLHdCQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ25GO2FBQ0o7OztBQUdELGdCQUFJLENBQUMsTUFBTSxHQUFHLHdCQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7O0FBR3RELGtCQUFNLENBQUMsT0FBTyxHQUFHLHdCQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMxRCxnQkFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLGlCQUFLLElBQUksS0FBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7QUFDN0Isb0JBQUksTUFBTSxZQUFBLENBQUM7QUFDWCxvQkFBSTtBQUNBLDBCQUFNLEdBQUcsZ0NBQVcsTUFBTSxDQUFDLGVBQWMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSSxDQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUosS0FBSSxFQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNuRyxDQUNELE9BQU0sQ0FBQyxFQUFFO0FBQ0wsNkJBQVM7aUJBQ1o7O0FBRUQsb0JBQUksQ0FBQyxNQUFNLEVBQUU7QUFDVCw2QkFBUztpQkFDWjs7QUFFRCxvQkFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQ2Qsd0JBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztpQkFDckMsTUFDSTs7QUFFRCx3QkFBSSxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRTs7QUFFbEQsNEJBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwQyw0QkFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzVCLGdDQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isa0NBQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt5QkFDMUM7cUJBQ0o7aUJBQ0o7YUFDSjs7O0FBR0QsZ0JBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFDcEIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFDekIsYUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsRUFBSTtBQUN2Qyx1QkFBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pHLENBQUMsRUFBRTtBQUNKLG9CQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzthQUNuQjs7O0FBR0Qsa0JBQU0sQ0FBQyxNQUFNLEdBQUcsd0JBQU0sa0JBQWtCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxnQ0FBWSxZQUFZLENBQUMsQ0FBQztBQUNsRixnQkFBSSxDQUFDLE1BQU0sR0FBRyxrQ0FBYSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7OztBQUc5RyxnQkFBSSxDQUFDLE1BQU0sR0FBRyx3QkFBTSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLGdDQUFZLFlBQVksQ0FBQyxDQUFDO0FBQ2hGLGdCQUFJLENBQUMsS0FBSyxHQUFHLDRCQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzs7O0FBR3JDLGdCQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7OztBQUczRCxnQkFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQU07QUFDaEQsd0NBQU0sR0FBRyxDQUFDLE9BQU8sbUJBQW1CLENBQUM7YUFDeEMsQ0FBQyxDQUFDO1NBQ047OztBQUdELDBCQUFrQixFQUFDLDhCQUFHO0FBQ2xCLG1CQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDM0I7OztBQUdELGlCQUFTLEVBQUMsbUJBQUMsS0FBUSxFQUFFO2dCQUFSLElBQUksR0FBTixLQUFRLENBQU4sSUFBSTs7O0FBRWIsZ0JBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFOztBQUVoQyxvQkFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFO0FBQ3pDLDJCQUFPO2lCQUNWO2FBQ0o7OztBQUdELGdCQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsZUFBYyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7OztBQUdoRixtQkFBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBTTs7QUFFeEMsb0JBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7O0FBRXRCLDJCQUFPLGFBQVksVUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFLOztBQUVwQyw0QkFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsNEJBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLDRCQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzs7QUFFbEIsNEJBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBTTtBQUNyQyxnQ0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3pCLHdEQUFNLEdBQUcsQ0FBQyxPQUFPLHdFQUFzRSxJQUFJLENBQUMsR0FBRyxDQUFHLENBQUM7QUFDbkcsdUNBQU87NkJBQ1Y7OztBQUdELGdDQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO0FBQ3hCLHdEQUFNLEdBQUcsQ0FBQyxNQUFNLDhCQUE0QixJQUFJLENBQUMsR0FBRyxVQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFHLENBQUM7NkJBQ3RGOztBQUVELGdDQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNyQixnQ0FBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkIsOENBQUssYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQSxJQUFJLEVBQUk7QUFDeEMsdUNBQU8sQ0FBQyxnQ0FBYSx1QkFBdUIsQ0FBQyxFQUFFLElBQUksRUFBRSxrQkFBSyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzZCQUNuRixDQUFDLENBQUM7eUJBQ04sQ0FBQyxTQUFNLENBQUMsVUFBQyxLQUFLLEVBQUs7QUFDaEIsZ0NBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLGdDQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNwQixnQ0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDOUIsb0RBQU0sR0FBRyxDQUFDLE9BQU8sMkJBQXlCLElBQUksQ0FBQyxHQUFHLFVBQUssSUFBSSxDQUFDLEtBQUssYUFBUSxLQUFLLENBQUMsS0FBSyxDQUFHLENBQUM7O0FBRXhGLG1DQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsa0JBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDdkMsQ0FBQyxDQUFDO3FCQUNOLENBQUMsQ0FBQztpQkFDTjs7cUJBRUk7QUFDRCxnREFBTSxHQUFHLENBQUMsT0FBTyxrQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsQ0FBRyxDQUFDOzs7QUFHN0QsK0JBQU8sa0JBQUssYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQSxJQUFJLEVBQUk7QUFDL0MsbUNBQU8sZ0NBQWEsdUJBQXVCLENBQUMsRUFBRSxJQUFJLEVBQUUsa0JBQUssS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7eUJBQ2pGLENBQUMsQ0FBQztxQkFDTjthQUNKLENBQUMsQ0FBQztTQUNOOzs7QUFHRCwwQkFBa0IsRUFBQyw0QkFBQyxJQUFJLEVBQUU7QUFDdEIsZ0JBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2pDLHVCQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckQsTUFDSTtBQUNELG9CQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsS0FBSyxxQkFBa0IsSUFBSSxDQUFDLE1BQU0saUJBQWEsRUFBRSxDQUFDO0FBQ3ZFLHVCQUFPLFNBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hDO1NBQ0o7O0FBRUQsZUFBTyxFQUFBLGlCQUFDLEdBQUcsRUFBRTtBQUNULG1CQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7OztBQUdELGtCQUFVLEVBQUMsb0JBQUMsR0FBRyxFQUFFO0FBQ2IsZ0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRTNCLGdCQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7O0FBRWQsb0JBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDdkIsNENBQU0sR0FBRyxDQUFDLE9BQU8sNEJBQTBCLEdBQUcsQ0FBRyxDQUFDO0FBQ2xELHdCQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztpQkFDeEI7O0FBRUQsa0NBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7QUFHbEIsdUNBQWlCLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyx1QkFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLHdDQUFNLEdBQUcsQ0FBQyxPQUFPLGtDQUFnQyxHQUFHLENBQUcsQ0FBQzthQUMzRDtTQUNKOzs7QUFHRCwyQkFBbUIsRUFBQywrQkFBbUI7OEVBQUosRUFBRTs7Z0JBQWQsRUFBRSxTQUFGLEVBQUU7Z0JBQUUsR0FBRyxTQUFILEdBQUc7O0FBQzFCLGdCQUFJLFNBQVMsR0FBRyx1QkFBaUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUUxQyxtQkFBTztBQUNILGtCQUFFLEVBQUUsRUFBRTtBQUNOLHVCQUFPLEVBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEFBQUM7YUFDNUMsQ0FBQztTQUNMOzs7QUFHRCw2QkFBcUIsRUFBQyxpQ0FBRztBQUNyQixtQ0FBaUIsS0FBSyxFQUFFLENBQUM7U0FDNUI7OztBQUdELGtDQUEwQixFQUFDLHNDQUFHO0FBQzFCLG1CQUFPLHVCQUFpQixVQUFVLEVBQUUsQ0FBQztTQUN4Qzs7O0FBR0Qsb0JBQVksRUFBQyxzQkFBQyxVQUFVLEVBQUU7QUFDdEIsZ0JBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNsQixnQkFBSSxVQUFVLEVBQUU7QUFDWix3QkFBUSxDQUFDLElBQUksTUFBQSxDQUFiLFFBQVEscUJBQVMsYUFBWSxVQUFVLENBQUMsRUFBQyxDQUFDO2FBQzdDOztBQUVELG9DQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDekQsZ0JBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDckIsdUJBQU8sdUJBQVEsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDakQ7QUFDRCxtQkFBTyxTQUFRLE9BQU8sRUFBRSxDQUFDO1NBQzVCOzs7QUFHRCw4QkFBc0IsRUFBQyxnQ0FBQyxrQkFBa0IsRUFBRTtBQUN4QyxvQ0FBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztTQUNqRDs7O0FBR0QsZUFBTyxFQUFDLGlCQUFDLElBQUksRUFBRTtBQUNYLG1CQUFPLENBQUMsT0FBTyxhQUFXLElBQUksQ0FBQyxVQUFVLFVBQUssSUFBSSxDQUFHLENBQUM7U0FDekQ7O0FBRUQsa0JBQVUsRUFBQyxvQkFBQyxJQUFJLEVBQUU7QUFDZCxtQkFBTyxDQUFDLFVBQVUsYUFBVyxJQUFJLENBQUMsVUFBVSxVQUFLLElBQUksQ0FBRyxDQUFDO1NBQzVEOztLQUVKLENBQUMsQ0FBQzs7QUFFSCxvQ0FBYSxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0NBRXBDOzs7Ozs7Ozs7Ozs7Ozs7Ozt5QkNoUm1CLGNBQWM7Ozs7a0NBQ1QsdUJBQXVCOzs7O3dCQUVoQyxVQUFVOzs7O0lBRUwsZ0JBQWdCO0FBRXRCLGFBRk0sZ0JBQWdCLENBRXJCLEVBQUUsRUFBRSxPQUFPLEVBQUU7OEJBRlIsZ0JBQWdCOztBQUc3QixZQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNiLFlBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLFlBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUNmOzs7O2lCQU5nQixnQkFBZ0I7O2VBUTdCLGdCQUFHOztBQUVILGdCQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNuQixnQkFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsZ0JBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDOztBQUU3QixnQkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixnQkFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7O0FBSW5ELGdCQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUN2QyxnQkFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELGdCQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDNUMsZ0JBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDOzs7QUFHbEUsZ0JBQUksV0FBVyxHQUFHLHVCQUFRLE1BQU0sQ0FBRSxJQUFJLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGLHVCQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQy9GLGdCQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzs7O0FBR3pILGdCQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDaEQsZ0JBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDN0QsZ0JBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hILGdCQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7O0FBRW5ILGdCQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN0RDs7O2VBRU0sbUJBQUc7QUFDTixnQkFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDckIsb0JBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLG9CQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNoQixvQkFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDdEQ7OztTQUdKOzs7ZUFFRyxnQkFBRzs7QUFFSCxnQkFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELGdCQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckU7Ozs7OztlQUlXLHNCQUFDLEtBQUssRUFBRTs7O0FBQ2hCLG1CQUFPLGFBQVksVUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFLOztBQUVwQyxzQkFBSyxvQkFBb0IsR0FBRyxBQUFDLE1BQUssb0JBQW9CLEdBQUcsQ0FBQyxJQUFLLENBQUMsQ0FBQztBQUNqRSxzQkFBSyxRQUFRLENBQUMsTUFBSyxvQkFBb0IsQ0FBQyxHQUFHO0FBQ3ZDLHdCQUFJLEVBQUUsT0FBTztBQUNiLHNCQUFFLEVBQUUsTUFBSyxvQkFBb0I7QUFDN0IseUJBQUssRUFBTCxLQUFLO0FBQ0wsMkJBQU8sRUFBUCxPQUFPO0FBQ1AsMEJBQU0sRUFBTixNQUFNO2lCQUNULENBQUM7YUFDTCxDQUFDLENBQUM7U0FDTjs7Ozs7ZUFHYywyQkFBRztBQUNkLG1CQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDeEI7OztlQUVtQixnQ0FBRztBQUNuQixpQkFBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3pCLG9CQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHL0Isb0JBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNkLDZCQUFTO2lCQUNaOzs7O0FBSUQsdUJBQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQVAsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUM1Qix1QkFBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNCO1NBQ0o7Ozs7O2VBR0csZ0JBQUc7Ozs7OztBQUlILGdCQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7QUFDL0IsNEJBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUN2QztBQUNELGdCQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFlBQU07QUFDckMsb0JBQUksRUFBRSxHQUFHLE9BQUssRUFBRSxDQUFDOztBQUVqQixrQkFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLE9BQUssR0FBRyxDQUFDLENBQUM7O0FBRTdDLHFCQUFLLElBQUksQ0FBQyxJQUFJLE9BQUssUUFBUSxFQUFFO0FBQ3pCLHdCQUFJLE9BQU8sR0FBRyxPQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0FBRy9CLHdCQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDZCxpQ0FBUztxQkFDWjs7O0FBR0Qsd0JBQUksT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDMUIsaUNBQVM7cUJBQ1o7OztBQUdELHNCQUFFLENBQUMsVUFBVSxDQUNULElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBSyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUEsR0FBSSxPQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFDeEQsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEVBQUUsT0FBSyxLQUFLLENBQUMsQ0FBQztBQUNqRCx3QkFBSSxXQUFXLEdBQUcsQUFBQyxPQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUEsQUFBQyxJQUFJLE9BQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQSxBQUFDLElBQUksT0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBLEFBQUMsS0FBTSxDQUFDLENBQUM7OztBQUcvRyx3QkFBSSxTQUFTLEdBQUcsT0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsd0JBQUksU0FBUyxLQUFLLEdBQUcsRUFBRTs7QUFDbkIsNEJBQUksT0FBSyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ2pDLDREQUFhLFdBQVcsQ0FDcEIsT0FBSyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQ3ZCLDBCQUEwQixFQUMxQixFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUN4QyxJQUFJLENBQUMsVUFBQSxPQUFPLEVBQUk7QUFDYix1Q0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7NkJBQzVCLENBQUMsQ0FBQzt5QkFDTjtxQkFDSjs7eUJBRUk7QUFDRCxtQ0FBSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt5QkFDdEQ7O0FBRUQsMkJBQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2lCQUN2Qjs7QUFFRCxrQkFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBRTVDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZCOzs7OztlQUdVLG9CQUFDLE9BQU8sRUFBRTtBQUNqQixnQkFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEMsZ0JBQUksQ0FBQyxPQUFPLEVBQUU7QUFDVixzQ0FBSSxLQUFLLENBQUMsdURBQXVELEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUUsdUJBQU87YUFDVjs7QUFFRCxnQkFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUM5QixnQkFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLGdCQUFJLEFBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksSUFDdkMsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQUFBQyxJQUN4QyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxBQUFDLEVBQUU7QUFDL0QsdUJBQU8sR0FBRyxJQUFJLENBQUM7YUFDbEI7O0FBRUQsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDOzs7QUFHdkIsbUJBQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQVAsT0FBTyxFQUFFLE9BQU8sRUFBUCxPQUFPLEVBQUUsT0FBTyxFQUFQLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDL0MsbUJBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDcEM7Ozs7Ozs7Ozs7O2VBVWUsbUJBQUMsSUFBSSxFQUFFOztBQUVuQixnQkFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ2pCLGdCQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUM5QixnQkFBSSxFQUFFLEdBQUcsQUFBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsR0FBSSxHQUFHLENBQUM7QUFDckMsZ0JBQUksRUFBRSxHQUFHLEFBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLEdBQUksR0FBRyxDQUFDO0FBQ3RDLGdCQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3pCLGdCQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLGdCQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLGdCQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLGdCQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLGdCQUFJLEdBQUcsR0FBRyxBQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBLEFBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFBLEFBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFBLEFBQUMsS0FBTSxDQUFDLENBQUM7O0FBRTNELGdCQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ1oscUJBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN0QixDQUFDO0FBQ0YsZ0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7O0FBR2hCLGdCQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsb0JBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ25CLDJCQUFPLEVBQUUsRUFBRTtBQUNYLHdCQUFJLEVBQUU7QUFDRiwyQkFBRyxFQUFFLElBQUksQ0FBQyxHQUFHO0FBQ2IsOEJBQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtBQUNuQixrQ0FBVSxFQUFFLElBQUksQ0FBQyxVQUFVO0FBQzNCLDhCQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDbkIsa0NBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtxQkFDOUI7aUJBQ0osQ0FBQzthQUNMOztBQUVELGdCQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUV2QyxtQkFBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hCOzs7ZUFFZSxtQkFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUNyQyxnQkFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQyxvQkFBUSxDQUFDLE9BQU8sR0FBRztBQUNmLGtCQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDZCwwQkFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQzlCLHNCQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDdEIsb0JBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJO2FBQ2xDLENBQUM7O0FBRUYsbUJBQU8sUUFBUSxDQUFDLEtBQUssQ0FBQztTQUN6Qjs7O2VBRVcsaUJBQUc7QUFDWCxnQkFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEIsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2QsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLGdCQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztTQUN0Qjs7O2VBRWUsbUJBQUMsR0FBRyxFQUFFOzs7QUFDbEIsZ0JBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNqQixvQkFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQUEsQ0FBQzsyQkFBSSxPQUFPLE9BQUssR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFBQSxDQUFDLENBQUM7QUFDekQsb0JBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ2hELHVCQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDMUI7U0FDSjs7O2VBRWdCLHNCQUFHO0FBQ2hCLG1CQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDeEI7OztlQUVlLG1CQUFDLE1BQU0sRUFBRTtBQUNyQixnQkFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7U0FDNUI7OztXQTdQZ0IsZ0JBQWdCOzs7cUJBQWhCLGdCQUFnQjtBQWtRckMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMxQixnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzVCLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDOUIsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUMvQixnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQzNRN0IsUUFBUTs7OzsyQkFDVyxpQkFBaUI7OzBCQUNsQyxnQkFBZ0I7Ozs7SUFFYixVQUFVO0FBRWYsYUFGSyxVQUFVLENBRWQsTUFBTSxFQUFFLE9BQU8sRUFBRTs4QkFGYixVQUFVOztBQUd2QixZQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixZQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUN2QixZQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDcEIsWUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFlBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUM7QUFDNUMsWUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDNUIsWUFBSSxDQUFDLE9BQU87QUFDUixhQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0NBQU8sU0FBUSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUksRUFBRSxDQUFDOzs7QUFHdEUsWUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ2xDLFlBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxnQkFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7OztBQUdELFlBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQzs7O0FBR3BDLFlBQUksT0FBTyxhQUFhLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7QUFDdkQsa0JBQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUNuQyxvQkFBSTtBQUNBLGlDQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsNENBQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSw4QkFBOEIsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDekQsQ0FDRCxPQUFPLENBQUMsRUFBRTtBQUNOLDRDQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsc0NBQXNDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsNENBQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDekI7YUFDSixDQUFDLENBQUM7U0FDTjs7O0FBR0QsWUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLGlCQUFJLHVCQUF1QixDQUFDO0tBQ2xFOzs7O2lCQXJDZ0IsVUFBVTs7O2VBK0Z2QixjQUFDLElBQUksRUFBRTs7O0FBQ1AsZ0JBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLGdCQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDN0IsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNoQyxnQkFBSSxDQUFDLE9BQU8sZ0NBQU8sSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDOztBQUVqQyxtQkFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLElBQUksRUFBSzs7QUFFbkMscUJBQUssSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7QUFDdkMsd0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLHdCQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3ZCLDRCQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFBLE9BQU8sRUFBSTtBQUM3Qiw2Q0FBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFVBQUEsS0FBSyxFQUFJOztBQUU3QyxxQ0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHckIsb0NBQUksTUFBSyxTQUFTLEVBQUU7QUFDaEIseUNBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBSyxTQUFTLENBQUEsQUFBQyxHQUFJLGlCQUFJLFVBQVUsR0FBRyxNQUFLLFNBQVMsR0FBQyxDQUFDLEFBQUMsQ0FBQyxDQUFDO0FBQzdGLHlDQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQUssU0FBUyxDQUFBLEFBQUMsR0FBSSxpQkFBSSxVQUFVLEdBQUcsTUFBSyxTQUFTLEdBQUMsQ0FBQyxBQUFDLENBQUMsQ0FBQztpQ0FDaEc7NkJBQ0osQ0FBQyxDQUFDOzs7QUFHSCxrQ0FBSyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7eUJBQy9DLENBQUMsQ0FBQztxQkFDTjtpQkFDSjs7QUFFRCxvQkFBSSxDQUFDLGVBQWUsR0FBRyxNQUFLLGVBQWUsSUFBSSxLQUFLLENBQUM7QUFDckQsdUJBQU8sSUFBSSxDQUFDO2FBQ2YsQ0FBQyxDQUFDO1NBQ047Ozs7O2VBR0ksZUFBQyxJQUFJLEVBQUU7QUFDUixrQkFBTSxzQ0FBeUIsT0FBTyxDQUFDLENBQUM7U0FDM0M7Ozs7O2VBR29CLDhCQUFDLElBQUksRUFBRTtBQUN4QixnQkFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtBQUN6Qix3QkFBSSxDQUFDLGVBQWUsR0FBRyxpQkFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMvRCxNQUNJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7QUFDbkMsd0JBQUksQ0FBQyxlQUFlLEdBQUcsaUJBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbEU7YUFDSjtBQUNELG1CQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7U0FDL0I7Ozs7O2VBekdhLGdCQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDNUIsZ0JBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDL0IsdUJBQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDN0Q7U0FDSjs7Ozs7ZUFHYyxpQkFBQyxNQUFNLEVBQUUsV0FBVyxFQUFFO0FBQ2pDLGdCQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ3pCLHVCQUFPLElBQUksQ0FBQzthQUNmOztBQUVELGdCQUFJLEdBQUcsR0FBRyxlQUFjLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQUksSUFBSSxHQUFHLGVBQWMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs7QUFFL0QsbUJBQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZEOzs7OztlQUdrQixxQkFBQyxNQUFNLEVBQUU7QUFDeEIsZ0JBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUN4QixpQkFBSyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQ3pCLG9CQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDcEQscUJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsd0JBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLHFDQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBQSxLQUFLLEVBQUk7a0RBQ2hDLGlCQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUM7Ozs7NEJBQWpDLENBQUM7NEJBQUUsQ0FBQzs7QUFDVCw2QkFBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLDZCQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNoQixDQUFDLENBQUM7aUJBQ047YUFDSjs7QUFFRCxnQkFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUM1QixzQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQzthQUNqRDtTQUNKOzs7Ozs7O2VBS2dCLG1CQUFDLE1BQU0sRUFBRSxJQUF1QixFQUFFO2dCQUFmLENBQUMsR0FBWCxJQUF1QixDQUF0QixNQUFNLENBQUcsQ0FBQztnQkFBRyxHQUFHLEdBQWpCLElBQXVCLENBQVQsR0FBRztnQkFBRSxHQUFHLEdBQXRCLElBQXVCLENBQUosR0FBRzs7QUFDNUMsZ0JBQUksZUFBZSxHQUFHLGlCQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxpQkFBSyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQ3pCLG9CQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDcEQscUJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsd0JBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLHFDQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBQSxLQUFLLEVBQUk7QUFDN0MsNkJBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFBLEdBQUksZUFBZSxDQUFDO0FBQ2hELDZCQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQSxHQUFJLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDeEQsQ0FBQyxDQUFDO2lCQUNOO2FBQ0o7U0FDSjs7O2VBdURjLGtCQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUU7QUFDbkMsZ0JBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDM0IsdUJBQU87YUFDVjs7QUFFRCxzQkFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUM7U0FDNUM7OztXQTFKZ0IsVUFBVTs7O3FCQUFWLFVBQVU7O0FBOEovQixVQUFVLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzs7OztJQUtULGFBQWE7Y0FBYixhQUFhOztBQUVWLGFBRkgsYUFBYSxDQUVULE1BQU0sRUFBRTs4QkFGWixhQUFhOztBQUdsQixtQ0FISyxhQUFhLDZDQUdaLE1BQU0sRUFBRTtBQUNkLFlBQUksQ0FBQyxHQUFHLEdBQUcsd0JBQU0sY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9ELFlBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDOztBQUV4QixZQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFO0FBQ2xCLGtCQUFNLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1NBQ3BFO0tBQ0o7Ozs7aUJBVlEsYUFBYTs7ZUFZaEIsZUFBQyxJQUFJLEVBQUU7OztBQUNULGdCQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRXpDLGdCQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ25DLHVCQUFXLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN0QixnQkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUM5QixnQkFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDOztBQUVqQyxtQkFBTyxhQUFZLFVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBSztBQUNwQywyQkFBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Ozs7Ozs7QUFPekIsb0JBQUksT0FBTyxHQUFHLHdCQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFLLGFBQWEsQ0FBQyxDQUFDO0FBQzNELDJCQUFXLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7O0FBRXRDLHVCQUFPLENBQUMsSUFBSSxDQUFDLFVBQUMsSUFBSSxFQUFLO0FBQ25CLHdCQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDMUQsd0JBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUN0RCx3QkFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2pDLDJCQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlDLHdCQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDdEQsMkJBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDakIsQ0FBQyxTQUFNLENBQUMsVUFBQyxLQUFLLEVBQUs7QUFDaEIsK0JBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3JDLDJCQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2pCLENBQUMsQ0FBQzthQUNOLENBQUMsQ0FBQztTQUNOOzs7Ozs7ZUFJUyxtQkFBQyxZQUFZLEVBQUUsSUFBSSxFQUFFO0FBQzNCLGtCQUFNLHNDQUF5QixXQUFXLENBQUMsQ0FBQztTQUMvQzs7O2VBRWUseUJBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDcEMsa0JBQU0sc0NBQXlCLGlCQUFpQixDQUFDLENBQUM7U0FDckQ7OztXQXJEUSxhQUFhO0dBQVMsVUFBVTs7OztJQTJEaEMsaUJBQWlCO2NBQWpCLGlCQUFpQjs7QUFFZCxhQUZILGlCQUFpQixDQUViLE1BQU0sRUFBRTs4QkFGWixpQkFBaUI7O0FBR3RCLG1DQUhLLGlCQUFpQiw2Q0FHaEIsTUFBTSxFQUFFOztBQUVkLFlBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLFlBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLFlBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDcEQsWUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzdDLGdCQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO0tBQ0o7O2lCQVpRLGlCQUFpQjs7ZUFjakIsbUJBQUMsWUFBWSxFQUFFLElBQUksRUFBRTtBQUMxQixnQkFBSSxNQUFNLEdBQUcsaUJBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNwRCxnQkFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVsRyxnQkFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtBQUN4QixtQkFBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN0RSxvQkFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFBLEdBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7YUFDakU7QUFDRCxtQkFBTyxHQUFHLENBQUM7U0FDZDs7Ozs7ZUFHZ0IsMkJBQUMsR0FBRyxFQUFFO0FBQ25CLG1CQUFPLEdBQUcsSUFDTixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUN0QixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUN0QixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzlCOzs7V0EvQlEsaUJBQWlCO0dBQVMsYUFBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJDbk9PLGVBQWU7Ozs7bUJBQ2xELE9BQU87O21CQUNmLFFBQVE7Ozs7Ozt5QkFHRixZQUFZOzs7Ozs7Ozs7SUFPckIsYUFBYTtjQUFiLGFBQWE7O0FBRVgsYUFGRixhQUFhLENBRVYsTUFBTSxFQUFFOzhCQUZYLGFBQWE7O0FBR2xCLG1DQUhLLGFBQWEsNkNBR1osTUFBTSxFQUFFO0FBQ2QsWUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEIsWUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdEIsWUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDdkIsWUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELFlBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0tBQ3RCOzs7Ozs7O2lCQVRRLGFBQWE7O2VBV2pCLGVBQUMsSUFBSSxFQUFFOzs7QUFDUixnQkFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDakIsb0JBQUksQ0FBQyxTQUFTLEdBQUcsMkJBYmhCLGFBQWEsdUNBYWUsRUFBRSxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBQSxJQUFJLEVBQUk7QUFDdkUsd0JBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0FBQ3JDLHlCQUFLLElBQUksVUFBVSxJQUFJLE1BQU0sRUFBRTtBQUMzQiw4QkFBSyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsNEJBQVUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQzFELG1DQUFPLEVBQUUsTUFBSyxRQUFRO0FBQ3RCLHFDQUFTLEVBQUUsQ0FBQztBQUNaLGtDQUFNLEVBQUUsaUJBQUksVUFBVTtBQUN0QixrQ0FBTSxFQUFFLENBQUM7eUJBQ1osQ0FBQyxDQUFDO3FCQUNOOztBQUVELDBCQUFLLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkIsMkJBQU8sSUFBSSxDQUFDO2lCQUNmLENBQUMsQ0FBQzthQUNOOztBQUVELG1CQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQU07QUFDN0IscUJBQUssSUFBSSxVQUFVLElBQUksTUFBSyxZQUFZLEVBQUU7QUFDdEMsd0JBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQUssZUFBZSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztpQkFDaEY7QUFDRCx1QkFBTyxJQUFJLENBQUM7YUFDZixDQUFDLENBQUM7U0FDTjs7O2VBRWMseUJBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUM5QixnQkFBSSxNQUFNLEdBQUcsaUJBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs7O0FBR3BELGdCQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHNUUsZ0JBQUksVUFBVSxZQUFBLENBQUM7QUFDZixnQkFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUNqQiwwQkFBVSxHQUFHO0FBQ1Qsd0JBQUksRUFBRSxtQkFBbUI7QUFDekIsNEJBQVEsRUFBRSxFQUFFO2lCQUNmLENBQUM7Ozs7Ozs7QUFFRixzREFBb0IsQ0FBQyxDQUFDLFFBQVEsNEdBQUU7NEJBQXZCLE9BQU87OztBQUVaLDRCQUFJLENBQUMsR0FBRztBQUNKLGdDQUFJLEVBQUUsU0FBUztBQUNmLG9DQUFRLEVBQUUsRUFBRTtBQUNaLHNDQUFVLEVBQUUsT0FBTyxDQUFDLElBQUk7eUJBQzNCLENBQUM7O0FBRUYsNEJBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDcEIsNkJBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQUEsS0FBSzt1Q0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQUEsQ0FBQyxDQUFDO0FBQzdFLDZCQUFDLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7eUJBQ2xDLE1BQ0ksSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtBQUMvQyw2QkFBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBQSxJQUFJO3VDQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQUEsS0FBSzsyQ0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7aUNBQUEsQ0FBQzs2QkFBQSxDQUMxQyxDQUFDOztBQUVGLGdDQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQ3BCLGlDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQzs2QkFDdkMsTUFDSztBQUNGLGlDQUFDLENBQUMsUUFBUSxHQUFHLGVBQVUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDOzZCQUN6RDt5QkFDSixNQUNJO0FBQ0QseUNBQVM7NkJBQ1o7O0FBRUQsa0NBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUMvQjs7Ozs7Ozs7Ozs7Ozs7O2FBQ0o7O0FBRUQsbUJBQU8sVUFBVSxDQUFDO1NBQ3JCOzs7ZUFFUyxtQkFBQyxJQUFJLEVBQUU7QUFDYixtQkFBTyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ25COzs7ZUFFZSx5QkFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUNyQyxrQkFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUN4RDs7Ozs7ZUFHUyxtQkFBQyxJQUFJLEVBQUU7QUFDYixnQkFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixFQUFFO0FBQzlELHVCQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQzdCLE1BQ0k7QUFDRCx1QkFBTyxJQUFJLENBQUM7YUFDZjtTQUNKOzs7V0F0R1EsYUFBYTs7Ozs7SUE4R2IsaUJBQWlCO2NBQWpCLGlCQUFpQjs7QUFFZixhQUZGLGlCQUFpQixDQUVkLE1BQU0sRUFBRTs4QkFGWCxpQkFBaUI7O0FBR3RCLG1DQUhLLGlCQUFpQiw2Q0FHaEIsTUFBTSxFQUFFOzs7QUFHZCxZQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTs7QUFFbkMsZ0JBQUksSUFBSSxZQUFZLGlCQUFpQixFQUFFOztBQUVuQyx1QkFBTyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNwQyxNQUNJOztBQUVELHVCQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7QUFDRCxlQUFPLElBQUksQ0FBQztLQUNmOztpQkFsQlEsaUJBQWlCOztlQW9CVix5QkFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUNyQyxnQkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoQyxnQkFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzNDOzs7ZUFFYyx3QkFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTs7QUFFaEMsZ0JBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxvQkFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNoRDs7QUFFRCxrQkFBTSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O0FBR3hELGdCQUFJLE1BQU0sR0FBRztBQUNULHNCQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDbkIsbUJBQUcsRUFBRSxpQkFBSSxhQUFhLENBQUMsaUJBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNqRSxDQUFDOztBQUVGLHFDQUFXLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQixxQ0FBVyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3hDOzs7V0F6Q1EsaUJBQWlCOzs7OztBQTZDOUIseUJBQVcsUUFBUSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xELHlCQUFXLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJCQ3hLWCxlQUFlOzs7O21CQUMzQyxRQUFROzs7O21CQUVSLEtBQUs7Ozs7MEJBQ3VCLGFBQWE7Ozs7Ozs7SUFNNUMsU0FBUztjQUFULFNBQVM7O0FBRU4sYUFGSCxTQUFTLENBRUwsTUFBTSxFQUFFOzhCQUZaLFNBQVM7O0FBR2QsbUNBSEssU0FBUyw2Q0FHUixNQUFNLEVBQUU7QUFDZCxZQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztLQUN0Qzs7aUJBTFEsU0FBUzs7ZUFPRix5QkFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTs7QUFFckMsZ0JBQUksSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLGdCQUFJLE1BQU0sR0FBRyxxQkFBUSxJQUFJLENBQUMsQ0FBQztBQUMzQixrQkFBTSxDQUFDLElBQUksR0FBRywyQkFBZSxNQUFNLENBQUMsQ0FBQztBQUNyQyxrQkFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QyxtQkFBTyxNQUFNLENBQUMsSUFBSSxDQUFDO1NBQ3RCOzs7Ozs7ZUFJUyxtQkFBQyxJQUFJLEVBQUU7QUFDYixnQkFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLGlCQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDdkIsb0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0Isb0JBQUksYUFBYSxHQUFHO0FBQ2hCLHdCQUFJLEVBQUUsbUJBQW1CO0FBQ3pCLDRCQUFRLEVBQUUsRUFBRTtpQkFDZixDQUFDOztBQUVGLHFCQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqQyx3QkFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQix3QkFBSSxlQUFlLEdBQUc7QUFDbEIsNEJBQUksRUFBRSxTQUFTO0FBQ2YsZ0NBQVEsRUFBRSxFQUFFO0FBQ1osa0NBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtxQkFDakMsQ0FBQzs7QUFFRix3QkFBSSxRQUFRLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQztBQUN4Qyx3QkFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3pDLHlCQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2Qyw0QkFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLDZCQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoQyxnQ0FBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQ04sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDVCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNaLENBQUM7eUJBQ0w7cUJBQ0o7QUFDRCw0QkFBUSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7O0FBRW5DLHdCQUFJLDhCQUFrQixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sRUFBRTtBQUNuRCxnQ0FBUSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDeEIsZ0NBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDckQsTUFDSSxJQUFJLDhCQUFrQixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLFlBQVksRUFBRTtBQUM3RCw0QkFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMxQixvQ0FBUSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7QUFDN0Isb0NBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDbEQsTUFDSTtBQUNELG9DQUFRLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO3lCQUNyQztxQkFDSixNQUNJLElBQUksOEJBQWtCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQzFELGdDQUFRLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUNyRDs7QUFFRCxpQ0FBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7aUJBQ2hEO0FBQ0Qsc0JBQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUM7YUFDN0I7QUFDRCxtQkFBTyxNQUFNLENBQUM7U0FDakI7Ozs7Ozs7ZUFLeUIsNEJBQUMsSUFBSSxFQUFFO0FBQzdCLGdCQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDZixnQkFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2QsZ0JBQUksYUFBYSxZQUFBLENBQUM7Ozs7OztBQUNsQixrREFBaUIsSUFBSSxDQUFDLFdBQVcsNEdBQUU7d0JBQTFCLElBQUk7O0FBQ1Qsd0JBQUksT0FBTyxHQUFHLGlCQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQyx3QkFBSSxPQUFPLElBQUksSUFBSSxFQUFFO0FBQ2pCLGlDQUFTO3FCQUNaOztBQUVELGlDQUFhLEdBQUcsYUFBYSxJQUFJLE9BQU8sQ0FBQzs7QUFFekMsd0JBQUksT0FBTyxLQUFLLGFBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUM5Qyw2QkFBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQiw0QkFBSSxHQUFHLEVBQUUsQ0FBQztxQkFDYjtBQUNELHdCQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNuQjs7Ozs7Ozs7Ozs7Ozs7OztBQUNELGdCQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2pCLHFCQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BCOzs7QUFHRCxnQkFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNwQixvQkFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7QUFDdEIsb0JBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9CLE1BQ0k7QUFDRCxvQkFBSSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7QUFDM0Isb0JBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2FBQzVCOztBQUVELG1CQUFPLElBQUksQ0FBQztTQUNmOzs7V0E1R1EsU0FBUzs7Ozs7QUFnSHRCLHlCQUFXLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJCQzFITSxlQUFlOzs7O29CQUMxQyxTQUFTOzs7O21CQUNWLFFBQVE7Ozs7SUFFWCxnQkFBZ0I7Y0FBaEIsZ0JBQWdCOztBQUVkLGFBRkYsZ0JBQWdCLENBRWIsTUFBTSxFQUFFOzhCQUZYLGdCQUFnQjs7QUFHckIsbUNBSEssZ0JBQWdCLDZDQUdmLE1BQU0sRUFBRTs7QUFFZCxZQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUN4QyxnQkFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25DO0FBQ0QsWUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDOzs7O0FBSWxDLFlBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0tBQ3RCOztpQkFiUSxnQkFBZ0I7O2VBZXJCLGNBQUMsSUFBSSxFQUFFO0FBQ1AsZ0JBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLGdCQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDN0IsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNoQyxnQkFBSSxDQUFDLE9BQU8sZ0NBQU8sSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDOzs7QUFHakMsZ0JBQUksS0FBSyxHQUFHLGlCQUFJLFVBQVUsQ0FBQztBQUMzQixnQkFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUc7QUFDdEIsd0JBQVEsRUFBRTtBQUNOLHdCQUFJLEVBQUUsbUJBQW1CO0FBQ3pCLDRCQUFRLEVBQUUsQ0FBQztBQUNQLGdDQUFRLEVBQUU7QUFDTixnQ0FBSSxFQUFFLFNBQVM7QUFDZix1Q0FBVyxFQUFFLENBQUMsQ0FDVixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFDbEIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN2QyxDQUFDO3lCQUNMO0FBQ0Qsa0NBQVUsRUFBRSxFQUFFO3FCQUNqQixDQUFDO2lCQUNMO2FBQ0osQ0FBQzs7QUFFRixnQkFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDNUIsbUJBQU8sU0FBUSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7Ozs7O2VBR1cscUJBQUMsSUFBSSxFQUFFO0FBQ2YsZ0JBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQzFCLGdCQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNyQixvQkFBSSxNQUFNLEdBQUcsa0JBQUsscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEUsb0JBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBTixNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLG9CQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFILEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQU4sTUFBTSxFQUFFLENBQUM7YUFDbkU7QUFDRCxtQkFBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzdCOzs7V0FwRFEsZ0JBQWdCOzs7OztBQXdEN0IseUJBQVcsUUFBUSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJDNUR6QixlQUFlOzs7O3VCQUNTLFdBQVc7O3dCQUVyQyxVQUFVOzs7Ozs7Ozs7SUFPbEIsY0FBYztjQUFkLGNBQWM7O2FBQWQsY0FBYzs4QkFBZCxjQUFjOzttQ0FBZCxjQUFjOzs7Ozs7OztpQkFBZCxjQUFjOztlQUVQLHlCQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQ3JDLGdCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLGdCQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixrQkFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hDOzs7ZUFFUyxtQkFBQyxJQUFJLEVBQUU7O0FBRWIsZ0JBQUksSUFBSSxDQUFDLE9BQU8sSUFDWixhQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3hDLG9CQUFJLEtBQUssR0FBRyxhQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxvQkFBSSxHQUFHLHNCQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3REOztpQkFFSTtBQUNELHdCQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIseUJBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUMxQiw4QkFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHNCQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUMzRDtBQUNELHdCQUFJLEdBQUcsTUFBTSxDQUFDO2lCQUNqQjtBQUNELG1CQUFPLElBQUksQ0FBQztTQUNmOzs7V0F4QlEsY0FBYzs7Ozs7SUFnQ2Qsa0JBQWtCO2NBQWxCLGtCQUFrQjs7QUFFaEIsYUFGRixrQkFBa0IsQ0FFZixNQUFNLEVBQUU7OEJBRlgsa0JBQWtCOztBQUd2QixZQUFJLEtBQUssOEJBSEosa0JBQWtCLDZDQUdMLE1BQU0sQ0FBQyxDQUFDOzs7QUFHMUIsWUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO0FBQ2hCLG1CQUFPLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO0tBQ0o7O2lCQVRRLGtCQUFrQjs7ZUFXWCx5QkFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUNyQyxnQkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoQyxnQkFBSSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELGdCQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDM0M7OztXQWZRLGtCQUFrQjs7Ozs7QUFtQi9CLHlCQUFXLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNwRCx5QkFBVyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O3FCQzVEckMsVUFBVTs7NEJBQ0osaUJBQWlCOzs2QkFDaEIsa0JBQWtCOzsyQkFDOUIsb0JBQW9COzs7Ozs7K0JBQ1Ysd0JBQXdCOzs7O2lDQUNwQiwwQkFBMEI7O21CQUN2QyxXQUFXOzs7OzBCQUNULG1CQUFtQjs7OztBQUU5QixJQUFJLEtBQUssR0FBRyw0QkFBb0IsQ0FBQzs7O0FBRXhDLGVBQWMsS0FBSyxFQUFFO0FBQ2pCLFFBQUksRUFBRSxPQUFPO0FBQ2IsWUFBUSxFQUFFLElBQUk7QUFDZCxxQkFBaUIsRUFBRSxpQ0FBaUM7QUFDcEQsdUJBQW1CLEVBQUUsbUNBQW1DO0FBQ3hELGFBQVMsRUFBRSxJQUFJOztBQUVmLFFBQUksRUFBQSxnQkFBRztBQUNILHFCQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDOzs7QUFHbEMsWUFBSSxPQUFPLEdBQUcsQ0FDVixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQUcsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFDakUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHlCQUFHLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQ2hFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBRyxhQUFhLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUN6RSxDQUFDOzs7QUFHRixZQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUN4QyxZQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQzs7O0FBRzFDLFlBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoQixtQkFBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBRyxhQUFhLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDbEc7OztBQUdELFlBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoQixnQkFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7OztBQUczQyxnQkFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxpQkFBSSxVQUFVLENBQUM7OztBQUdyRCxtQkFBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQUcsY0FBYyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQzVGOztBQUVELFlBQUksQ0FBQyxhQUFhLEdBQUcsaUNBQWlCLE9BQU8sQ0FBQyxDQUFDOzs7OztBQUsvQyxZQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLFlBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0tBQ2xEOzs7QUFHRCxhQUFTLEVBQUMsbUJBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUN2QixlQUFPLEFBQUMsS0FBSyxJQUFJLDBCQUFZLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUssQ0FBQyxDQUFDO0tBQ3BFOzs7QUFHRCxxQkFBaUIsRUFBQywyQkFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQy9CLGVBQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNmLFlBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLGVBQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNmLGVBQU8sR0FBRyxDQUFDO0tBQ2Q7O0FBRUQsaUJBQWEsRUFBQyx1QkFBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRTtBQUN6QyxZQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDOzs7QUFHL0IsWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELFlBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUNYLG1CQUFPO1NBQ1Y7QUFDRCxZQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFeEUsWUFBSSxBQUFDLEtBQUssS0FBSyxDQUFDLElBQUksVUFBVSxLQUFLLENBQUMsSUFBSyxVQUFVLEdBQUcsQ0FBQyxFQUFFO0FBQ3JELG1CQUFPO1NBQ1Y7Ozs7QUFJRCxhQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO0FBQzlDLGFBQUssQ0FBQyxVQUFVLEdBQUcsQUFBQyxVQUFVLEdBQUcsQ0FBQyxHQUFJLEtBQUssQ0FBQztBQUM1QyxhQUFLLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUM7QUFDNUMsYUFBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUM7O0FBRXRCLGFBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pELFlBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ2QsbUJBQU87U0FDVjs7O0FBR0QsYUFBSyxDQUFDLENBQUMsR0FBRyxBQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksMEJBQVksYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFLLDBCQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDNUcsYUFBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSwwQkFBWSxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ3hFLGFBQUssQ0FBQyxPQUFPLEdBQUcsMEJBQVksUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEUsWUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO0FBQ2YsZ0JBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRTtBQUNuQyxxQkFBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQ2hDLE1BQ0ksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNuQyxxQkFBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ25DO1NBQ0o7OztBQUdELFlBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQy9CLGlCQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDM0I7O0FBRUQsYUFBSyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO0FBQzNCLGFBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztBQUM3QixhQUFLLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7QUFDM0MsYUFBSyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDOzs7O0FBSXpDLGFBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7O0FBRW5GLFlBQUksVUFBVSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTs7O0FBRzVFLGdCQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxRSxnQkFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUU1RixnQkFBSSxBQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksa0JBQWtCLEtBQUssQ0FBQyxJQUFLLGFBQWEsR0FBRyxDQUFDLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxFQUFFOztBQUVsRyxxQkFBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNqQyxxQkFBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0QyxxQkFBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQzlCLE1BQ0k7O0FBRUQscUJBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQ2xELHFCQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLEdBQUcsVUFBVSxDQUFDOztBQUVqRSxxQkFBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDL0MscUJBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFDN0QscUJBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDaEUscUJBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUM7QUFDckYscUJBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7OztBQUc1RCxvQkFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUMxQix5QkFBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDNUUsTUFDSTtBQUNELHlCQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2lCQUNyQzs7O0FBR0Qsb0JBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRTtBQUNuQyx5QkFBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztpQkFDckM7OztBQUdELHFCQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUM7YUFDOUI7U0FDSixNQUNJO0FBQ0QsaUJBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakMsaUJBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdEMsaUJBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUM5Qjs7QUFFRCxlQUFPLEtBQUssQ0FBQztLQUNoQjs7QUFFRCxlQUFXLEVBQUMscUJBQUMsSUFBSSxFQUFFO0FBQ2YsWUFBSSxDQUFDLEtBQUssR0FBRywwQkFBWSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQsWUFBSSxDQUFDLEtBQUssR0FBRywwQkFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSwwQkFBWSxVQUFVLENBQUMsQ0FBQztBQUN6RSxZQUFJLENBQUMsVUFBVSxHQUFHLDBCQUFZLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLDBCQUFZLFVBQVUsQ0FBQyxDQUFDO0FBQzlFLFlBQUksQ0FBQyxDQUFDLEdBQUcsMEJBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsMEJBQVksVUFBVSxDQUFDLENBQUM7O0FBRWpFLFlBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNkLGdCQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRywwQkFBWSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RFLGdCQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRywwQkFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsMEJBQVksVUFBVSxDQUFDLENBQUM7QUFDekYsZ0JBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLDBCQUFZLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSwwQkFBWSxVQUFVLENBQUMsQ0FBQztTQUNqRztBQUNELGVBQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztBQU1ELHNCQUFrQixFQUFBLDRCQUFDLEtBQUssRUFBRTtBQUN0QixZQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7OztBQUdWLFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7OztBQUd6QyxZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7OztBQUd6RCxZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7O0FBRzlCLFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDOzs7QUFHN0MsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCxZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOzs7QUFHakQsWUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hCLGdCQUFJLENB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OztBQUd6QyxZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7OztBQUd6RCxZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7OztBQUdwQyxZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCxZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7OztBQUdqRCxZQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEIsZ0JBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzRCxnQkFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNELGdCQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdB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LENBQUM7QUFDN0MsZ0JBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEQ7Ozs7O2VBR1MsbUJBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRTs7O0FBR3RCLGdCQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxQyxnQkFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNyRDs7Ozs7ZUFHWSxzQkFBQyxPQUFPLEVBQUU7QUFDbkIsbUJBQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkYsbUJBQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9GLG1CQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNuRSxtQkFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsd0JBQU0sa0JBQWtCLENBQUMsQ0FBQzs7QUFFeEUsZ0JBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3JDOzs7V0E5U2dCLElBQUk7OztxQkFBSixJQUFJIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2dldC1pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9pcy1pdGVyYWJsZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9tYXBcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vbWF0aC9sb2cyXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ25cIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2NyZWF0ZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXNcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZnJlZXplXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXNcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vcHJvbWlzZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zZXRcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKVtcImRlZmF1bHRcIl07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG5cbiAgICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0pKCk7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfT2JqZWN0JGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpW1wiZGVmYXVsdFwiXTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX09iamVjdCRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JcIilbXCJkZWZhdWx0XCJdO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIGdldChfeCwgX3gyLCBfeDMpIHtcbiAgdmFyIF9hZ2FpbiA9IHRydWU7XG5cbiAgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7XG4gICAgdmFyIG9iamVjdCA9IF94LFxuICAgICAgICBwcm9wZXJ0eSA9IF94MixcbiAgICAgICAgcmVjZWl2ZXIgPSBfeDM7XG4gICAgX2FnYWluID0gZmFsc2U7XG4gICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4gICAgdmFyIGRlc2MgPSBfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcblxuICAgIGlmIChkZXNjID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcblxuICAgICAgaWYgKHBhcmVudCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3ggPSBwYXJlbnQ7XG4gICAgICAgIF94MiA9IHByb3BlcnR5O1xuICAgICAgICBfeDMgPSByZWNlaXZlcjtcbiAgICAgICAgX2FnYWluID0gdHJ1ZTtcbiAgICAgICAgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29udGludWUgX2Z1bmN0aW9uO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MpIHtcbiAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9PYmplY3QkY3JlYXRlID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvY3JlYXRlXCIpW1wiZGVmYXVsdFwiXTtcblxudmFyIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCIpW1wiZGVmYXVsdFwiXTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPyBfT2JqZWN0JHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59O1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBcImRlZmF1bHRcIjogb2JqXG4gIH07XG59O1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2dldEl0ZXJhdG9yID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9nZXQtaXRlcmF0b3JcIilbXCJkZWZhdWx0XCJdO1xuXG52YXIgX2lzSXRlcmFibGUgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL2lzLWl0ZXJhYmxlXCIpW1wiZGVmYXVsdFwiXTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkge1xuICAgIHZhciBfYXJyID0gW107XG4gICAgdmFyIF9uID0gdHJ1ZTtcbiAgICB2YXIgX2QgPSBmYWxzZTtcbiAgICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgX2kgPSBfZ2V0SXRlcmF0b3IoYXJyKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9IHRydWU7XG4gICAgICBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfSBlbHNlIGlmIChfaXNJdGVyYWJsZShPYmplY3QoYXJyKSkpIHtcbiAgICAgIHJldHVybiBzbGljZUl0ZXJhdG9yKGFyciwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpO1xuICAgIH1cbiAgfTtcbn0pKCk7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfQXJyYXkkZnJvbSA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvYXJyYXkvZnJvbVwiKVtcImRlZmF1bHRcIl07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICAgIHJldHVybiBhcnIyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfQXJyYXkkZnJvbShhcnIpO1xuICB9XG59O1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsIihmdW5jdGlvbiAoZ2xvYmFsKXtcbi8vIFRoaXMgbWV0aG9kIG9mIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdCBuZWVkcyB0byBiZVxuLy8ga2VwdCBpZGVudGljYWwgdG8gdGhlIHdheSBpdCBpcyBvYnRhaW5lZCBpbiBydW50aW1lLmpzXG52YXIgZyA9XG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpcztcblxuLy8gVXNlIGBnZXRPd25Qcm9wZXJ0eU5hbWVzYCBiZWNhdXNlIG5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCBjYWxsaW5nXG4vLyBgaGFzT3duUHJvcGVydHlgIG9uIHRoZSBnbG9iYWwgYHNlbGZgIG9iamVjdCBpbiBhIHdvcmtlci4gU2VlICMxODMuXG52YXIgaGFkUnVudGltZSA9IGcucmVnZW5lcmF0b3JSdW50aW1lICYmXG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGcpLmluZGV4T2YoXCJyZWdlbmVyYXRvclJ1bnRpbWVcIikgPj0gMDtcblxuLy8gU2F2ZSB0aGUgb2xkIHJlZ2VuZXJhdG9yUnVudGltZSBpbiBjYXNlIGl0IG5lZWRzIHRvIGJlIHJlc3RvcmVkIGxhdGVyLlxudmFyIG9sZFJ1bnRpbWUgPSBoYWRSdW50aW1lICYmIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuXG4vLyBGb3JjZSByZWV2YWx1dGF0aW9uIG9mIHJ1bnRpbWUuanMuXG5nLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9ydW50aW1lXCIpO1xuXG5pZiAoaGFkUnVudGltZSkge1xuICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBydW50aW1lLlxuICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IG9sZFJ1bnRpbWU7XG59IGVsc2Uge1xuICAvLyBSZW1vdmUgdGhlIGdsb2JhbCBwcm9wZXJ0eSBhZGRlZCBieSBydW50aW1lLmpzLlxuICB0cnkge1xuICAgIGRlbGV0ZSBnLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgfSBjYXRjaChlKSB7XG4gICAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBtb2R1bGUuZXhwb3J0cywgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTlpWVdKbGJDMXlkVzUwYVcxbEwzSmxaMlZ1WlhKaGRHOXlMMmx1WkdWNExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHk4Z1ZHaHBjeUJ0WlhSb2IyUWdiMllnYjJKMFlXbHVhVzVuSUdFZ2NtVm1aWEpsYm1ObElIUnZJSFJvWlNCbmJHOWlZV3dnYjJKcVpXTjBJRzVsWldSeklIUnZJR0psWEc0dkx5QnJaWEIwSUdsa1pXNTBhV05oYkNCMGJ5QjBhR1VnZDJGNUlHbDBJR2x6SUc5aWRHRnBibVZrSUdsdUlISjFiblJwYldVdWFuTmNiblpoY2lCbklEMWNiaUFnZEhsd1pXOW1JR2RzYjJKaGJDQTlQVDBnWENKdlltcGxZM1JjSWlBL0lHZHNiMkpoYkNBNlhHNGdJSFI1Y0dWdlppQjNhVzVrYjNjZ1BUMDlJRndpYjJKcVpXTjBYQ0lnUHlCM2FXNWtiM2NnT2x4dUlDQjBlWEJsYjJZZ2MyVnNaaUE5UFQwZ1hDSnZZbXBsWTNSY0lpQS9JSE5sYkdZZ09pQjBhR2x6TzF4dVhHNHZMeUJWYzJVZ1lHZGxkRTkzYmxCeWIzQmxjblI1VG1GdFpYTmdJR0psWTJGMWMyVWdibTkwSUdGc2JDQmljbTkzYzJWeWN5QnpkWEJ3YjNKMElHTmhiR3hwYm1kY2JpOHZJR0JvWVhOUGQyNVFjbTl3WlhKMGVXQWdiMjRnZEdobElHZHNiMkpoYkNCZ2MyVnNabUFnYjJKcVpXTjBJR2x1SUdFZ2QyOXlhMlZ5TGlCVFpXVWdJekU0TXk1Y2JuWmhjaUJvWVdSU2RXNTBhVzFsSUQwZ1p5NXlaV2RsYm1WeVlYUnZjbEoxYm5ScGJXVWdKaVpjYmlBZ1QySnFaV04wTG1kbGRFOTNibEJ5YjNCbGNuUjVUbUZ0WlhNb1p5a3VhVzVrWlhoUFppaGNJbkpsWjJWdVpYSmhkRzl5VW5WdWRHbHRaVndpS1NBK1BTQXdPMXh1WEc0dkx5QlRZWFpsSUhSb1pTQnZiR1FnY21WblpXNWxjbUYwYjNKU2RXNTBhVzFsSUdsdUlHTmhjMlVnYVhRZ2JtVmxaSE1nZEc4Z1ltVWdjbVZ6ZEc5eVpXUWdiR0YwWlhJdVhHNTJZWElnYjJ4a1VuVnVkR2x0WlNBOUlHaGhaRkoxYm5ScGJXVWdKaVlnWnk1eVpXZGxibVZ5WVhSdmNsSjFiblJwYldVN1hHNWNiaTh2SUVadmNtTmxJSEpsWlhaaGJIVjBZWFJwYjI0Z2IyWWdjblZ1ZEdsdFpTNXFjeTVjYm1jdWNtVm5aVzVsY21GMGIzSlNkVzUwYVcxbElEMGdkVzVrWldacGJtVmtPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUhKbGNYVnBjbVVvWENJdUwzSjFiblJwYldWY0lpazdYRzVjYm1sbUlDaG9ZV1JTZFc1MGFXMWxLU0I3WEc0Z0lDOHZJRkpsYzNSdmNtVWdkR2hsSUc5eWFXZHBibUZzSUhKMWJuUnBiV1V1WEc0Z0lHY3VjbVZuWlc1bGNtRjBiM0pTZFc1MGFXMWxJRDBnYjJ4a1VuVnVkR2x0WlR0Y2JuMGdaV3h6WlNCN1hHNGdJQzh2SUZKbGJXOTJaU0IwYUdVZ1oyeHZZbUZzSUhCeWIzQmxjblI1SUdGa1pHVmtJR0o1SUhKMWJuUnBiV1V1YW5NdVhHNGdJSFJ5ZVNCN1hHNGdJQ0FnWkdWc1pYUmxJR2N1Y21WblpXNWxjbUYwYjNKU2RXNTBhVzFsTzF4dUlDQjlJR05oZEdOb0tHVXBJSHRjYmlBZ0lDQm5MbkpsWjJWdVpYSmhkRzl5VW5WdWRHbHRaU0E5SUhWdVpHVm1hVzVsWkR0Y2JpQWdmVnh1ZlZ4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlIc2dYQ0prWldaaGRXeDBYQ0k2SUcxdlpIVnNaUzVsZUhCdmNuUnpMQ0JmWDJWelRXOWtkV3hsT2lCMGNuVmxJSDA3WEc0aVhYMD0iLCIoZnVuY3Rpb24gKHByb2Nlc3MsZ2xvYmFsKXtcbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvbWFzdGVyL0xJQ0VOU0UgZmlsZS4gQW5cbiAqIGFkZGl0aW9uYWwgZ3JhbnQgb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpblxuICogdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sXCIpW1wiZGVmYXVsdFwiXTtcblxudmFyIF9TeW1ib2wkaXRlcmF0b3IgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvclwiKVtcImRlZmF1bHRcIl07XG5cbnZhciBfT2JqZWN0JGNyZWF0ZSA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2NyZWF0ZVwiKVtcImRlZmF1bHRcIl07XG5cbnZhciBfUHJvbWlzZSA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZVwiKVtcImRlZmF1bHRcIl07XG5cbiEoZnVuY3Rpb24gKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciBpdGVyYXRvclN5bWJvbCA9IHR5cGVvZiBfU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgX1N5bWJvbCRpdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBnZW5lcmF0b3IgPSBfT2JqZWN0JGNyZWF0ZSgob3V0ZXJGbiB8fCBHZW5lcmF0b3IpLnByb3RvdHlwZSk7XG5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiB8fCBudWxsLCBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSkpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3IgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICBnZW5GdW4ucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGB2YWx1ZSBpbnN0YW5jZW9mIEF3YWl0QXJndW1lbnRgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLiBTb21lIG1heSBjb25zaWRlciB0aGUgbmFtZSBvZiB0aGlzIG1ldGhvZCB0b29cbiAgLy8gY3V0ZXN5LCBidXQgdGhleSBhcmUgY3VybXVkZ2VvbnMuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIG5ldyBBd2FpdEFyZ3VtZW50KGFyZyk7XG4gIH07XG5cbiAgZnVuY3Rpb24gQXdhaXRBcmd1bWVudChhcmcpIHtcbiAgICB0aGlzLmFyZyA9IGFyZztcbiAgfVxuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgLy8gVGhpcyBpbnZva2UgZnVuY3Rpb24gaXMgd3JpdHRlbiBpbiBhIHN0eWxlIHRoYXQgYXNzdW1lcyBzb21lXG4gICAgLy8gY2FsbGluZyBmdW5jdGlvbiAob3IgUHJvbWlzZSkgd2lsbCBoYW5kbGUgZXhjZXB0aW9ucy5cbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZW5lcmF0b3JbbWV0aG9kXShhcmcpO1xuICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQXdhaXRBcmd1bWVudCA/IF9Qcm9taXNlLnJlc29sdmUodmFsdWUuYXJnKS50aGVuKGludm9rZU5leHQsIGludm9rZVRocm93KSA6IF9Qcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHVud3JhcHBlZCkge1xuICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgLy8gcmVhc29uLiBOb3RlIHRoYXQgcmVqZWN0aW9ucyBvZiB5aWVsZGVkIFByb21pc2VzIGFyZSBub3RcbiAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgIC8vIGJlaGF2aW9yIGJldHdlZW4geWllbGQgYW5kIGF3YWl0IGlzIGltcG9ydGFudCwgYmVjYXVzZSBpdFxuICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgLy8gaW50byB0aGUgZ2VuZXJhdG9yLCBhYmFuZG9uIGl0ZXJhdGlvbiwgd2hhdGV2ZXIpLiBXaXRoXG4gICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAvLyBvbmx5IG9wdGlvbiBpcyB0byB0aHJvdyBpdCBmcm9tIHRoZSBhd2FpdCBleHByZXNzaW9uLCBhbmRcbiAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gcHJvY2Vzcy5kb21haW4uYmluZChpbnZva2UpO1xuICAgIH1cblxuICAgIHZhciBpbnZva2VOZXh0ID0gaW52b2tlLmJpbmQoZ2VuZXJhdG9yLCBcIm5leHRcIik7XG4gICAgdmFyIGludm9rZVRocm93ID0gaW52b2tlLmJpbmQoZ2VuZXJhdG9yLCBcInRocm93XCIpO1xuICAgIHZhciBpbnZva2VSZXR1cm4gPSBpbnZva2UuYmluZChnZW5lcmF0b3IsIFwicmV0dXJuXCIpO1xuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICB2YXIgZW5xdWV1ZVJlc3VsdCA9XG4gICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH0pIDogbmV3IF9Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIHJlc29sdmUoaW52b2tlKG1ldGhvZCwgYXJnKSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZW5xdWV1ZVJlc3VsdCBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieVxuICAgICAgLy8gbGF0ZXIgaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgcHJldmlvdXNQcm9taXNlID0gZW5xdWV1ZVJlc3VsdFtcImNhdGNoXCJdKGZ1bmN0aW9uIChpZ25vcmVkKSB7fSk7XG5cbiAgICAgIHJldHVybiBlbnF1ZXVlUmVzdWx0O1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbiAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbikgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIGlmIChtZXRob2QgPT09IFwicmV0dXJuXCIgfHwgbWV0aG9kID09PSBcInRocm93XCIgJiYgZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBBIHJldHVybiBvciB0aHJvdyAod2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIHRocm93XG4gICAgICAgICAgICAvLyBtZXRob2QpIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgICAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgICB2YXIgcmV0dXJuTWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl07XG4gICAgICAgICAgICBpZiAocmV0dXJuTWV0aG9kKSB7XG4gICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChyZXR1cm5NZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBhcmcpO1xuICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXR1cm4gbWV0aG9kIHRocmV3IGFuIGV4Y2VwdGlvbiwgbGV0IHRoYXRcbiAgICAgICAgICAgICAgICAvLyBleGNlcHRpb24gcHJldmFpbCBvdmVyIHRoZSBvcmlnaW5hbCByZXR1cm4gb3IgdGhyb3cuXG4gICAgICAgICAgICAgICAgbWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgICAgICAgIGFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgICAgICAvLyBDb250aW51ZSB3aXRoIHRoZSBvdXRlciByZXR1cm4sIG5vdyB0aGF0IHRoZSBkZWxlZ2F0ZVxuICAgICAgICAgICAgICAvLyBpdGVyYXRvciBoYXMgYmVlbiB0ZXJtaW5hdGVkLlxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kXSwgZGVsZWdhdGUuaXRlcmF0b3IsIGFyZyk7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIExpa2UgcmV0dXJuaW5nIGdlbmVyYXRvci50aHJvdyh1bmNhdWdodCksIGJ1dCB3aXRob3V0IHRoZVxuICAgICAgICAgICAgLy8gb3ZlcmhlYWQgb2YgYW4gZXh0cmEgZnVuY3Rpb24gY2FsbC5cbiAgICAgICAgICAgIG1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgIGFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEZWxlZ2F0ZSBnZW5lcmF0b3IgcmFuIGFuZCBoYW5kbGVkIGl0cyBvd24gZXhjZXB0aW9ucyBzb1xuICAgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgbWV0aG9kIHdhcywgd2UgY29udGludWUgYXMgaWYgaXQgaXNcbiAgICAgICAgICAvLyBcIm5leHRcIiB3aXRoIGFuIHVuZGVmaW5lZCBhcmcuXG4gICAgICAgICAgbWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuICAgICAgICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgICAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuICAgICAgICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuICAgICAgICAgICAgcmV0dXJuIGluZm87XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCkge1xuICAgICAgICAgICAgY29udGV4dC5zZW50ID0gYXJnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LnNlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGFyZykpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgICAgbWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZSA/IEdlblN0YXRlQ29tcGxldGVkIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIHZhciBpbmZvID0ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGlmIChjb250ZXh0LmRlbGVnYXRlICYmIG1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpbmZvO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihhcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgbWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgICAgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICB0aGlzLnNlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJiBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcbiAgICAgICAgcmV0dXJuICEhY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uIGFicnVwdCh0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJiBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJiAodHlwZSA9PT0gXCJicmVha1wiIHx8IHR5cGUgPT09IFwiY29udGludWVcIikgJiYgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiYgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHwgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2goZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbi8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbi8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuLy8gdXNlIGluZGlyZWN0IGV2YWwgKHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KS5cbnR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDogdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdW5kZWZpbmVkKTtcbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5aVlXSmxiQzF5ZFc1MGFXMWxMM0psWjJWdVpYSmhkRzl5TDNKMWJuUnBiV1V1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElDaGpLU0F5TURFMExDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUdoMGRIQnpPaTh2Y21GM0xtZHBkR2gxWWk1amIyMHZabUZqWldKdmIyc3ZjbVZuWlc1bGNtRjBiM0l2YldGemRHVnlMMHhKUTBWT1UwVWdabWxzWlM0Z1FXNWNiaUFxSUdGa1pHbDBhVzl1WVd3Z1ozSmhiblFnYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBibHh1SUNvZ2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ292WEc1Y2Jsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNTJZWElnWDFONWJXSnZiQ0E5SUhKbGNYVnBjbVVvWENKaVlXSmxiQzF5ZFc1MGFXMWxMMk52Y21VdGFuTXZjM2x0WW05c1hDSXBXMXdpWkdWbVlYVnNkRndpWFR0Y2JseHVkbUZ5SUY5VGVXMWliMndrYVhSbGNtRjBiM0lnUFNCeVpYRjFhWEpsS0Z3aVltRmlaV3d0Y25WdWRHbHRaUzlqYjNKbExXcHpMM041YldKdmJDOXBkR1Z5WVhSdmNsd2lLVnRjSW1SbFptRjFiSFJjSWwwN1hHNWNiblpoY2lCZlQySnFaV04wSkdOeVpXRjBaU0E5SUhKbGNYVnBjbVVvWENKaVlXSmxiQzF5ZFc1MGFXMWxMMk52Y21VdGFuTXZiMkpxWldOMEwyTnlaV0YwWlZ3aUtWdGNJbVJsWm1GMWJIUmNJbDA3WEc1Y2JuWmhjaUJmVUhKdmJXbHpaU0E5SUhKbGNYVnBjbVVvWENKaVlXSmxiQzF5ZFc1MGFXMWxMMk52Y21VdGFuTXZjSEp2YldselpWd2lLVnRjSW1SbFptRjFiSFJjSWwwN1hHNWNiaUVvWm5WdVkzUnBiMjRnS0dkc2IySmhiQ2tnZTF4dUlDQmNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVJQ0IyWVhJZ2FHRnpUM2R1SUQwZ1QySnFaV04wTG5CeWIzUnZkSGx3WlM1b1lYTlBkMjVRY205d1pYSjBlVHRjYmlBZ2RtRnlJSFZ1WkdWbWFXNWxaRHNnTHk4Z1RXOXlaU0JqYjIxd2NtVnpjMmxpYkdVZ2RHaGhiaUIyYjJsa0lEQXVYRzRnSUhaaGNpQnBkR1Z5WVhSdmNsTjViV0p2YkNBOUlIUjVjR1Z2WmlCZlUzbHRZbTlzSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lnSmlZZ1gxTjViV0p2YkNScGRHVnlZWFJ2Y2lCOGZDQmNJa0JBYVhSbGNtRjBiM0pjSWp0Y2JseHVJQ0IyWVhJZ2FXNU5iMlIxYkdVZ1BTQjBlWEJsYjJZZ2JXOWtkV3hsSUQwOVBTQmNJbTlpYW1WamRGd2lPMXh1SUNCMllYSWdjblZ1ZEdsdFpTQTlJR2RzYjJKaGJDNXlaV2RsYm1WeVlYUnZjbEoxYm5ScGJXVTdYRzRnSUdsbUlDaHlkVzUwYVcxbEtTQjdYRzRnSUNBZ2FXWWdLR2x1VFc5a2RXeGxLU0I3WEc0Z0lDQWdJQ0F2THlCSlppQnlaV2RsYm1WeVlYUnZjbEoxYm5ScGJXVWdhWE1nWkdWbWFXNWxaQ0JuYkc5aVlXeHNlU0JoYm1RZ2QyVW5jbVVnYVc0Z1lTQnRiMlIxYkdVc1hHNGdJQ0FnSUNBdkx5QnRZV3RsSUhSb1pTQmxlSEJ2Y25SeklHOWlhbVZqZENCcFpHVnVkR2xqWVd3Z2RHOGdjbVZuWlc1bGNtRjBiM0pTZFc1MGFXMWxMbHh1SUNBZ0lDQWdiVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQnlkVzUwYVcxbE8xeHVJQ0FnSUgxY2JpQWdJQ0F2THlCRWIyNG5kQ0JpYjNSb1pYSWdaWFpoYkhWaGRHbHVaeUIwYUdVZ2NtVnpkQ0J2WmlCMGFHbHpJR1pwYkdVZ2FXWWdkR2hsSUhKMWJuUnBiV1VnZDJGelhHNGdJQ0FnTHk4Z1lXeHlaV0ZrZVNCa1pXWnBibVZrSUdkc2IySmhiR3g1TGx4dUlDQWdJSEpsZEhWeWJqdGNiaUFnZlZ4dVhHNGdJQzh2SUVSbFptbHVaU0IwYUdVZ2NuVnVkR2x0WlNCbmJHOWlZV3hzZVNBb1lYTWdaWGh3WldOMFpXUWdZbmtnWjJWdVpYSmhkR1ZrSUdOdlpHVXBJR0Z6SUdWcGRHaGxjbHh1SUNBdkx5QnRiMlIxYkdVdVpYaHdiM0owY3lBb2FXWWdkMlVuY21VZ2FXNGdZU0J0YjJSMWJHVXBJRzl5SUdFZ2JtVjNMQ0JsYlhCMGVTQnZZbXBsWTNRdVhHNGdJSEoxYm5ScGJXVWdQU0JuYkc5aVlXd3VjbVZuWlc1bGNtRjBiM0pTZFc1MGFXMWxJRDBnYVc1TmIyUjFiR1VnUHlCdGIyUjFiR1V1Wlhod2IzSjBjeUE2SUh0OU8xeHVYRzRnSUdaMWJtTjBhVzl1SUhkeVlYQW9hVzV1WlhKR2Jpd2diM1YwWlhKR2Jpd2djMlZzWml3Z2RISjVURzlqYzB4cGMzUXBJSHRjYmlBZ0lDQXZMeUJKWmlCdmRYUmxja1p1SUhCeWIzWnBaR1ZrTENCMGFHVnVJRzkxZEdWeVJtNHVjSEp2ZEc5MGVYQmxJR2x1YzNSaGJtTmxiMllnUjJWdVpYSmhkRzl5TGx4dUlDQWdJSFpoY2lCblpXNWxjbUYwYjNJZ1BTQmZUMkpxWldOMEpHTnlaV0YwWlNnb2IzVjBaWEpHYmlCOGZDQkhaVzVsY21GMGIzSXBMbkJ5YjNSdmRIbHdaU2s3WEc1Y2JpQWdJQ0JuWlc1bGNtRjBiM0l1WDJsdWRtOXJaU0E5SUcxaGEyVkpiblp2YTJWTlpYUm9iMlFvYVc1dVpYSkdiaXdnYzJWc1ppQjhmQ0J1ZFd4c0xDQnVaWGNnUTI5dWRHVjRkQ2gwY25sTWIyTnpUR2x6ZENCOGZDQmJYU2twTzF4dVhHNGdJQ0FnY21WMGRYSnVJR2RsYm1WeVlYUnZjanRjYmlBZ2ZWeHVJQ0J5ZFc1MGFXMWxMbmR5WVhBZ1BTQjNjbUZ3TzF4dVhHNGdJQzh2SUZSeWVTOWpZWFJqYUNCb1pXeHdaWElnZEc4Z2JXbHVhVzFwZW1VZ1pHVnZjSFJwYldsNllYUnBiMjV6TGlCU1pYUjFjbTV6SUdFZ1kyOXRjR3hsZEdsdmJseHVJQ0F2THlCeVpXTnZjbVFnYkdsclpTQmpiMjUwWlhoMExuUnllVVZ1ZEhKcFpYTmJhVjB1WTI5dGNHeGxkR2x2Ymk0Z1ZHaHBjeUJwYm5SbGNtWmhZMlVnWTI5MWJHUmNiaUFnTHk4Z2FHRjJaU0JpWldWdUlDaGhibVFnZDJGeklIQnlaWFpwYjNWemJIa3BJR1JsYzJsbmJtVmtJSFJ2SUhSaGEyVWdZU0JqYkc5emRYSmxJSFJ2SUdKbFhHNGdJQzh2SUdsdWRtOXJaV1FnZDJsMGFHOTFkQ0JoY21kMWJXVnVkSE1zSUdKMWRDQnBiaUJoYkd3Z2RHaGxJR05oYzJWeklIZGxJR05oY21VZ1lXSnZkWFFnZDJWY2JpQWdMeThnWVd4eVpXRmtlU0JvWVhabElHRnVJR1Y0YVhOMGFXNW5JRzFsZEdodlpDQjNaU0IzWVc1MElIUnZJR05oYkd3c0lITnZJSFJvWlhKbEozTWdibThnYm1WbFpGeHVJQ0F2THlCMGJ5QmpjbVZoZEdVZ1lTQnVaWGNnWm5WdVkzUnBiMjRnYjJKcVpXTjBMaUJYWlNCallXNGdaWFpsYmlCblpYUWdZWGRoZVNCM2FYUm9JR0Z6YzNWdGFXNW5YRzRnSUM4dklIUm9aU0J0WlhSb2IyUWdkR0ZyWlhNZ1pYaGhZM1JzZVNCdmJtVWdZWEpuZFcxbGJuUXNJSE5wYm1ObElIUm9ZWFFnYUdGd2NHVnVjeUIwYnlCaVpTQjBjblZsWEc0Z0lDOHZJR2x1SUdWMlpYSjVJR05oYzJVc0lITnZJSGRsSUdSdmJpZDBJR2hoZG1VZ2RHOGdkRzkxWTJnZ2RHaGxJR0Z5WjNWdFpXNTBjeUJ2WW1wbFkzUXVJRlJvWlZ4dUlDQXZMeUJ2Ym14NUlHRmtaR2wwYVc5dVlXd2dZV3hzYjJOaGRHbHZiaUJ5WlhGMWFYSmxaQ0JwY3lCMGFHVWdZMjl0Y0d4bGRHbHZiaUJ5WldOdmNtUXNJSGRvYVdOb1hHNGdJQzh2SUdoaGN5QmhJSE4wWVdKc1pTQnphR0Z3WlNCaGJtUWdjMjhnYUc5d1pXWjFiR3g1SUhOb2IzVnNaQ0JpWlNCamFHVmhjQ0IwYnlCaGJHeHZZMkYwWlM1Y2JpQWdablZ1WTNScGIyNGdkSEo1UTJGMFkyZ29abTRzSUc5aWFpd2dZWEpuS1NCN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCN0lIUjVjR1U2SUZ3aWJtOXliV0ZzWENJc0lHRnlaem9nWm00dVkyRnNiQ2h2WW1vc0lHRnlaeWtnZlR0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2hsY25JcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCN0lIUjVjR1U2SUZ3aWRHaHliM2RjSWl3Z1lYSm5PaUJsY25JZ2ZUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQjJZWElnUjJWdVUzUmhkR1ZUZFhOd1pXNWtaV1JUZEdGeWRDQTlJRndpYzNWemNHVnVaR1ZrVTNSaGNuUmNJanRjYmlBZ2RtRnlJRWRsYmxOMFlYUmxVM1Z6Y0dWdVpHVmtXV2xsYkdRZ1BTQmNJbk4xYzNCbGJtUmxaRmxwWld4a1hDSTdYRzRnSUhaaGNpQkhaVzVUZEdGMFpVVjRaV04xZEdsdVp5QTlJRndpWlhobFkzVjBhVzVuWENJN1hHNGdJSFpoY2lCSFpXNVRkR0YwWlVOdmJYQnNaWFJsWkNBOUlGd2lZMjl0Y0d4bGRHVmtYQ0k3WEc1Y2JpQWdMeThnVW1WMGRYSnVhVzVuSUhSb2FYTWdiMkpxWldOMElHWnliMjBnZEdobElHbHVibVZ5Um00Z2FHRnpJSFJvWlNCellXMWxJR1ZtWm1WamRDQmhjMXh1SUNBdkx5QmljbVZoYTJsdVp5QnZkWFFnYjJZZ2RHaGxJR1JwYzNCaGRHTm9JSE4zYVhSamFDQnpkR0YwWlcxbGJuUXVYRzRnSUhaaGNpQkRiMjUwYVc1MVpWTmxiblJwYm1Wc0lEMGdlMzA3WEc1Y2JpQWdMeThnUkhWdGJYa2dZMjl1YzNSeWRXTjBiM0lnWm5WdVkzUnBiMjV6SUhSb1lYUWdkMlVnZFhObElHRnpJSFJvWlNBdVkyOXVjM1J5ZFdOMGIzSWdZVzVrWEc0Z0lDOHZJQzVqYjI1emRISjFZM1J2Y2k1d2NtOTBiM1I1Y0dVZ2NISnZjR1Z5ZEdsbGN5Qm1iM0lnWm5WdVkzUnBiMjV6SUhSb1lYUWdjbVYwZFhKdUlFZGxibVZ5WVhSdmNseHVJQ0F2THlCdlltcGxZM1J6TGlCR2IzSWdablZzYkNCemNHVmpJR052YlhCc2FXRnVZMlVzSUhsdmRTQnRZWGtnZDJsemFDQjBieUJqYjI1bWFXZDFjbVVnZVc5MWNseHVJQ0F2THlCdGFXNXBabWxsY2lCdWIzUWdkRzhnYldGdVoyeGxJSFJvWlNCdVlXMWxjeUJ2WmlCMGFHVnpaU0IwZDI4Z1puVnVZM1JwYjI1ekxseHVJQ0JtZFc1amRHbHZiaUJIWlc1bGNtRjBiM0lvS1NCN2ZWeHVJQ0JtZFc1amRHbHZiaUJIWlc1bGNtRjBiM0pHZFc1amRHbHZiaWdwSUh0OVhHNGdJR1oxYm1OMGFXOXVJRWRsYm1WeVlYUnZja1oxYm1OMGFXOXVVSEp2ZEc5MGVYQmxLQ2tnZTMxY2JseHVJQ0IyWVhJZ1IzQWdQU0JIWlc1bGNtRjBiM0pHZFc1amRHbHZibEJ5YjNSdmRIbHdaUzV3Y205MGIzUjVjR1VnUFNCSFpXNWxjbUYwYjNJdWNISnZkRzkwZVhCbE8xeHVJQ0JIWlc1bGNtRjBiM0pHZFc1amRHbHZiaTV3Y205MGIzUjVjR1VnUFNCSGNDNWpiMjV6ZEhKMVkzUnZjaUE5SUVkbGJtVnlZWFJ2Y2taMWJtTjBhVzl1VUhKdmRHOTBlWEJsTzF4dUlDQkhaVzVsY21GMGIzSkdkVzVqZEdsdmJsQnliM1J2ZEhsd1pTNWpiMjV6ZEhKMVkzUnZjaUE5SUVkbGJtVnlZWFJ2Y2taMWJtTjBhVzl1TzF4dUlDQkhaVzVsY21GMGIzSkdkVzVqZEdsdmJpNWthWE53YkdGNVRtRnRaU0E5SUZ3aVIyVnVaWEpoZEc5eVJuVnVZM1JwYjI1Y0lqdGNibHh1SUNBdkx5QklaV3h3WlhJZ1ptOXlJR1JsWm1sdWFXNW5JSFJvWlNBdWJtVjRkQ3dnTG5Sb2NtOTNMQ0JoYm1RZ0xuSmxkSFZ5YmlCdFpYUm9iMlJ6SUc5bUlIUm9aVnh1SUNBdkx5QkpkR1Z5WVhSdmNpQnBiblJsY21aaFkyVWdhVzRnZEdWeWJYTWdiMllnWVNCemFXNW5iR1VnTGw5cGJuWnZhMlVnYldWMGFHOWtMbHh1SUNCbWRXNWpkR2x2YmlCa1pXWnBibVZKZEdWeVlYUnZjazFsZEdodlpITW9jSEp2ZEc5MGVYQmxLU0I3WEc0Z0lDQWdXMXdpYm1WNGRGd2lMQ0JjSW5Sb2NtOTNYQ0lzSUZ3aWNtVjBkWEp1WENKZExtWnZja1ZoWTJnb1puVnVZM1JwYjI0Z0tHMWxkR2h2WkNrZ2UxeHVJQ0FnSUNBZ2NISnZkRzkwZVhCbFcyMWxkR2h2WkYwZ1BTQm1kVzVqZEdsdmJpQW9ZWEpuS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDlwYm5admEyVW9iV1YwYUc5a0xDQmhjbWNwTzF4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5S1R0Y2JpQWdmVnh1WEc0Z0lISjFiblJwYldVdWFYTkhaVzVsY21GMGIzSkdkVzVqZEdsdmJpQTlJR1oxYm1OMGFXOXVJQ2huWlc1R2RXNHBJSHRjYmlBZ0lDQjJZWElnWTNSdmNpQTlJSFI1Y0dWdlppQm5aVzVHZFc0Z1BUMDlJRndpWm5WdVkzUnBiMjVjSWlBbUppQm5aVzVHZFc0dVkyOXVjM1J5ZFdOMGIzSTdYRzRnSUNBZ2NtVjBkWEp1SUdOMGIzSWdQeUJqZEc5eUlEMDlQU0JIWlc1bGNtRjBiM0pHZFc1amRHbHZiaUI4ZkZ4dUlDQWdJQzh2SUVadmNpQjBhR1VnYm1GMGFYWmxJRWRsYm1WeVlYUnZja1oxYm1OMGFXOXVJR052Ym5OMGNuVmpkRzl5TENCMGFHVWdZbVZ6ZENCM1pTQmpZVzVjYmlBZ0lDQXZMeUJrYnlCcGN5QjBieUJqYUdWamF5QnBkSE1nTG01aGJXVWdjSEp2Y0dWeWRIa3VYRzRnSUNBZ0tHTjBiM0l1WkdsemNHeGhlVTVoYldVZ2ZId2dZM1J2Y2k1dVlXMWxLU0E5UFQwZ1hDSkhaVzVsY21GMGIzSkdkVzVqZEdsdmJsd2lJRG9nWm1Gc2MyVTdYRzRnSUgwN1hHNWNiaUFnY25WdWRHbHRaUzV0WVhKcklEMGdablZ1WTNScGIyNGdLR2RsYmtaMWJpa2dlMXh1SUNBZ0lHZGxia1oxYmk1ZlgzQnliM1J2WDE4Z1BTQkhaVzVsY21GMGIzSkdkVzVqZEdsdmJsQnliM1J2ZEhsd1pUdGNiaUFnSUNCblpXNUdkVzR1Y0hKdmRHOTBlWEJsSUQwZ1gwOWlhbVZqZENSamNtVmhkR1VvUjNBcE8xeHVJQ0FnSUhKbGRIVnliaUJuWlc1R2RXNDdYRzRnSUgwN1hHNWNiaUFnTHk4Z1YybDBhR2x1SUhSb1pTQmliMlI1SUc5bUlHRnVlU0JoYzNsdVl5Qm1kVzVqZEdsdmJpd2dZR0YzWVdsMElIaGdJR2x6SUhSeVlXNXpabTl5YldWa0lIUnZYRzRnSUM4dklHQjVhV1ZzWkNCeVpXZGxibVZ5WVhSdmNsSjFiblJwYldVdVlYZHlZWEFvZUNsZ0xDQnpieUIwYUdGMElIUm9aU0J5ZFc1MGFXMWxJR05oYmlCMFpYTjBYRzRnSUM4dklHQjJZV3gxWlNCcGJuTjBZVzVqWlc5bUlFRjNZV2wwUVhKbmRXMWxiblJnSUhSdklHUmxkR1Z5YldsdVpTQnBaaUIwYUdVZ2VXbGxiR1JsWkNCMllXeDFaU0JwYzF4dUlDQXZMeUJ0WldGdWRDQjBieUJpWlNCaGQyRnBkR1ZrTGlCVGIyMWxJRzFoZVNCamIyNXphV1JsY2lCMGFHVWdibUZ0WlNCdlppQjBhR2x6SUcxbGRHaHZaQ0IwYjI5Y2JpQWdMeThnWTNWMFpYTjVMQ0JpZFhRZ2RHaGxlU0JoY21VZ1kzVnliWFZrWjJWdmJuTXVYRzRnSUhKMWJuUnBiV1V1WVhkeVlYQWdQU0JtZFc1amRHbHZiaUFvWVhKbktTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QkJkMkZwZEVGeVozVnRaVzUwS0dGeVp5azdYRzRnSUgwN1hHNWNiaUFnWm5WdVkzUnBiMjRnUVhkaGFYUkJjbWQxYldWdWRDaGhjbWNwSUh0Y2JpQWdJQ0IwYUdsekxtRnlaeUE5SUdGeVp6dGNiaUFnZlZ4dVhHNGdJR1oxYm1OMGFXOXVJRUZ6ZVc1alNYUmxjbUYwYjNJb1oyVnVaWEpoZEc5eUtTQjdYRzRnSUNBZ0x5OGdWR2hwY3lCcGJuWnZhMlVnWm5WdVkzUnBiMjRnYVhNZ2QzSnBkSFJsYmlCcGJpQmhJSE4wZVd4bElIUm9ZWFFnWVhOemRXMWxjeUJ6YjIxbFhHNGdJQ0FnTHk4Z1kyRnNiR2x1WnlCbWRXNWpkR2x2YmlBb2IzSWdVSEp2YldselpTa2dkMmxzYkNCb1lXNWtiR1VnWlhoalpYQjBhVzl1Y3k1Y2JpQWdJQ0JtZFc1amRHbHZiaUJwYm5admEyVW9iV1YwYUc5a0xDQmhjbWNwSUh0Y2JpQWdJQ0FnSUhaaGNpQnlaWE4xYkhRZ1BTQm5aVzVsY21GMGIzSmJiV1YwYUc5a1hTaGhjbWNwTzF4dUlDQWdJQ0FnZG1GeUlIWmhiSFZsSUQwZ2NtVnpkV3gwTG5aaGJIVmxPMXh1SUNBZ0lDQWdjbVYwZFhKdUlIWmhiSFZsSUdsdWMzUmhibU5sYjJZZ1FYZGhhWFJCY21kMWJXVnVkQ0EvSUY5UWNtOXRhWE5sTG5KbGMyOXNkbVVvZG1Gc2RXVXVZWEpuS1M1MGFHVnVLR2x1ZG05clpVNWxlSFFzSUdsdWRtOXJaVlJvY205M0tTQTZJRjlRY205dGFYTmxMbkpsYzI5c2RtVW9kbUZzZFdVcExuUm9aVzRvWm5WdVkzUnBiMjRnS0hWdWQzSmhjSEJsWkNrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJYYUdWdUlHRWdlV2xsYkdSbFpDQlFjbTl0YVhObElHbHpJSEpsYzI5c2RtVmtMQ0JwZEhNZ1ptbHVZV3dnZG1Gc2RXVWdZbVZqYjIxbGMxeHVJQ0FnSUNBZ0lDQXZMeUIwYUdVZ0xuWmhiSFZsSUc5bUlIUm9aU0JRY205dGFYTmxQSHQyWVd4MVpTeGtiMjVsZlQ0Z2NtVnpkV3gwSUdadmNpQjBhR1ZjYmlBZ0lDQWdJQ0FnTHk4Z1kzVnljbVZ1ZENCcGRHVnlZWFJwYjI0dUlFbG1JSFJvWlNCUWNtOXRhWE5sSUdseklISmxhbVZqZEdWa0xDQm9iM2RsZG1WeUxDQjBhR1ZjYmlBZ0lDQWdJQ0FnTHk4Z2NtVnpkV3gwSUdadmNpQjBhR2x6SUdsMFpYSmhkR2x2YmlCM2FXeHNJR0psSUhKbGFtVmpkR1ZrSUhkcGRHZ2dkR2hsSUhOaGJXVmNiaUFnSUNBZ0lDQWdMeThnY21WaGMyOXVMaUJPYjNSbElIUm9ZWFFnY21WcVpXTjBhVzl1Y3lCdlppQjVhV1ZzWkdWa0lGQnliMjFwYzJWeklHRnlaU0J1YjNSY2JpQWdJQ0FnSUNBZ0x5OGdkR2h5YjNkdUlHSmhZMnNnYVc1MGJ5QjBhR1VnWjJWdVpYSmhkRzl5SUdaMWJtTjBhVzl1TENCaGN5QnBjeUIwYUdVZ1kyRnpaVnh1SUNBZ0lDQWdJQ0F2THlCM2FHVnVJR0Z1SUdGM1lXbDBaV1FnVUhKdmJXbHpaU0JwY3lCeVpXcGxZM1JsWkM0Z1ZHaHBjeUJrYVdabVpYSmxibU5sSUdsdVhHNGdJQ0FnSUNBZ0lDOHZJR0psYUdGMmFXOXlJR0psZEhkbFpXNGdlV2xsYkdRZ1lXNWtJR0YzWVdsMElHbHpJR2x0Y0c5eWRHRnVkQ3dnWW1WallYVnpaU0JwZEZ4dUlDQWdJQ0FnSUNBdkx5QmhiR3h2ZDNNZ2RHaGxJR052Ym5OMWJXVnlJSFJ2SUdSbFkybGtaU0IzYUdGMElIUnZJR1J2SUhkcGRHZ2dkR2hsSUhscFpXeGtaV1JjYmlBZ0lDQWdJQ0FnTHk4Z2NtVnFaV04wYVc5dUlDaHpkMkZzYkc5M0lHbDBJR0Z1WkNCamIyNTBhVzUxWlN3Z2JXRnVkV0ZzYkhrZ0xuUm9jbTkzSUdsMElHSmhZMnRjYmlBZ0lDQWdJQ0FnTHk4Z2FXNTBieUIwYUdVZ1oyVnVaWEpoZEc5eUxDQmhZbUZ1Wkc5dUlHbDBaWEpoZEdsdmJpd2dkMmhoZEdWMlpYSXBMaUJYYVhSb1hHNGdJQ0FnSUNBZ0lDOHZJR0YzWVdsMExDQmllU0JqYjI1MGNtRnpkQ3dnZEdobGNtVWdhWE1nYm04Z2IzQndiM0owZFc1cGRIa2dkRzhnWlhoaGJXbHVaU0IwYUdWY2JpQWdJQ0FnSUNBZ0x5OGdjbVZxWldOMGFXOXVJSEpsWVhOdmJpQnZkWFJ6YVdSbElIUm9aU0JuWlc1bGNtRjBiM0lnWm5WdVkzUnBiMjRzSUhOdklIUm9aVnh1SUNBZ0lDQWdJQ0F2THlCdmJteDVJRzl3ZEdsdmJpQnBjeUIwYnlCMGFISnZkeUJwZENCbWNtOXRJSFJvWlNCaGQyRnBkQ0JsZUhCeVpYTnphVzl1TENCaGJtUmNiaUFnSUNBZ0lDQWdMeThnYkdWMElIUm9aU0JuWlc1bGNtRjBiM0lnWm5WdVkzUnBiMjRnYUdGdVpHeGxJSFJvWlNCbGVHTmxjSFJwYjI0dVhHNGdJQ0FnSUNBZ0lISmxjM1ZzZEM1MllXeDFaU0E5SUhWdWQzSmhjSEJsWkR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoMGVYQmxiMllnY0hKdlkyVnpjeUE5UFQwZ1hDSnZZbXBsWTNSY0lpQW1KaUJ3Y205alpYTnpMbVJ2YldGcGJpa2dlMXh1SUNBZ0lDQWdhVzUyYjJ0bElEMGdjSEp2WTJWemN5NWtiMjFoYVc0dVltbHVaQ2hwYm5admEyVXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJwYm5admEyVk9aWGgwSUQwZ2FXNTJiMnRsTG1KcGJtUW9aMlZ1WlhKaGRHOXlMQ0JjSW01bGVIUmNJaWs3WEc0Z0lDQWdkbUZ5SUdsdWRtOXJaVlJvY205M0lEMGdhVzUyYjJ0bExtSnBibVFvWjJWdVpYSmhkRzl5TENCY0luUm9jbTkzWENJcE8xeHVJQ0FnSUhaaGNpQnBiblp2YTJWU1pYUjFjbTRnUFNCcGJuWnZhMlV1WW1sdVpDaG5aVzVsY21GMGIzSXNJRndpY21WMGRYSnVYQ0lwTzF4dUlDQWdJSFpoY2lCd2NtVjJhVzkxYzFCeWIyMXBjMlU3WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJsYm5GMVpYVmxLRzFsZEdodlpDd2dZWEpuS1NCN1hHNGdJQ0FnSUNCMllYSWdaVzV4ZFdWMVpWSmxjM1ZzZENBOVhHNGdJQ0FnSUNBdkx5QkpaaUJsYm5GMVpYVmxJR2hoY3lCaVpXVnVJR05oYkd4bFpDQmlaV1p2Y21Vc0lIUm9aVzRnZDJVZ2QyRnVkQ0IwYnlCM1lXbDBJSFZ1ZEdsc1hHNGdJQ0FnSUNBdkx5QmhiR3dnY0hKbGRtbHZkWE1nVUhKdmJXbHpaWE1nYUdGMlpTQmlaV1Z1SUhKbGMyOXNkbVZrSUdKbFptOXlaU0JqWVd4c2FXNW5JR2x1ZG05clpTeGNiaUFnSUNBZ0lDOHZJSE52SUhSb1lYUWdjbVZ6ZFd4MGN5QmhjbVVnWVd4M1lYbHpJR1JsYkdsMlpYSmxaQ0JwYmlCMGFHVWdZMjl5Y21WamRDQnZjbVJsY2k0Z1NXWmNiaUFnSUNBZ0lDOHZJR1Z1Y1hWbGRXVWdhR0Z6SUc1dmRDQmlaV1Z1SUdOaGJHeGxaQ0JpWldadmNtVXNJSFJvWlc0Z2FYUWdhWE1nYVcxd2IzSjBZVzUwSUhSdlhHNGdJQ0FnSUNBdkx5QmpZV3hzSUdsdWRtOXJaU0JwYlcxbFpHbGhkR1ZzZVN3Z2QybDBhRzkxZENCM1lXbDBhVzVuSUc5dUlHRWdZMkZzYkdKaFkyc2dkRzhnWm1seVpTeGNiaUFnSUNBZ0lDOHZJSE52SUhSb1lYUWdkR2hsSUdGemVXNWpJR2RsYm1WeVlYUnZjaUJtZFc1amRHbHZiaUJvWVhNZ2RHaGxJRzl3Y0c5eWRIVnVhWFI1SUhSdklHUnZYRzRnSUNBZ0lDQXZMeUJoYm5rZ2JtVmpaWE56WVhKNUlITmxkSFZ3SUdsdUlHRWdjSEpsWkdsamRHRmliR1VnZDJGNUxpQlVhR2x6SUhCeVpXUnBZM1JoWW1sc2FYUjVYRzRnSUNBZ0lDQXZMeUJwY3lCM2FIa2dkR2hsSUZCeWIyMXBjMlVnWTI5dWMzUnlkV04wYjNJZ2MzbHVZMmh5YjI1dmRYTnNlU0JwYm5admEyVnpJR2wwYzF4dUlDQWdJQ0FnTHk4Z1pYaGxZM1YwYjNJZ1kyRnNiR0poWTJzc0lHRnVaQ0IzYUhrZ1lYTjVibU1nWm5WdVkzUnBiMjV6SUhONWJtTm9jbTl1YjNWemJIbGNiaUFnSUNBZ0lDOHZJR1Y0WldOMWRHVWdZMjlrWlNCaVpXWnZjbVVnZEdobElHWnBjbk4wSUdGM1lXbDBMaUJUYVc1alpTQjNaU0JwYlhCc1pXMWxiblFnYzJsdGNHeGxYRzRnSUNBZ0lDQXZMeUJoYzNsdVl5Qm1kVzVqZEdsdmJuTWdhVzRnZEdWeWJYTWdiMllnWVhONWJtTWdaMlZ1WlhKaGRHOXljeXdnYVhRZ2FYTWdaWE53WldOcFlXeHNlVnh1SUNBZ0lDQWdMeThnYVcxd2IzSjBZVzUwSUhSdklHZGxkQ0IwYUdseklISnBaMmgwTENCbGRtVnVJSFJvYjNWbmFDQnBkQ0J5WlhGMWFYSmxjeUJqWVhKbExseHVJQ0FnSUNBZ2NISmxkbWx2ZFhOUWNtOXRhWE5sSUQ4Z2NISmxkbWx2ZFhOUWNtOXRhWE5sTG5Sb1pXNG9ablZ1WTNScGIyNGdLQ2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYVc1MmIydGxLRzFsZEdodlpDd2dZWEpuS1R0Y2JpQWdJQ0FnSUgwcElEb2dibVYzSUY5UWNtOXRhWE5sS0daMWJtTjBhVzl1SUNoeVpYTnZiSFpsS1NCN1hHNGdJQ0FnSUNBZ0lISmxjMjlzZG1Vb2FXNTJiMnRsS0cxbGRHaHZaQ3dnWVhKbktTazdYRzRnSUNBZ0lDQjlLVHRjYmx4dUlDQWdJQ0FnTHk4Z1FYWnZhV1FnY0hKdmNHRm5ZWFJwYm1jZ1pXNXhkV1YxWlZKbGMzVnNkQ0JtWVdsc2RYSmxjeUIwYnlCUWNtOXRhWE5sY3lCeVpYUjFjbTVsWkNCaWVWeHVJQ0FnSUNBZ0x5OGdiR0YwWlhJZ2FXNTJiMk5oZEdsdmJuTWdiMllnZEdobElHbDBaWEpoZEc5eUxseHVJQ0FnSUNBZ2NISmxkbWx2ZFhOUWNtOXRhWE5sSUQwZ1pXNXhkV1YxWlZKbGMzVnNkRnRjSW1OaGRHTm9YQ0pkS0daMWJtTjBhVzl1SUNocFoyNXZjbVZrS1NCN2ZTazdYRzVjYmlBZ0lDQWdJSEpsZEhWeWJpQmxibkYxWlhWbFVtVnpkV3gwTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUVSbFptbHVaU0IwYUdVZ2RXNXBabWxsWkNCb1pXeHdaWElnYldWMGFHOWtJSFJvWVhRZ2FYTWdkWE5sWkNCMGJ5QnBiWEJzWlcxbGJuUWdMbTVsZUhRc1hHNGdJQ0FnTHk4Z0xuUm9jbTkzTENCaGJtUWdMbkpsZEhWeWJpQW9jMlZsSUdSbFptbHVaVWwwWlhKaGRHOXlUV1YwYUc5a2N5a3VYRzRnSUNBZ2RHaHBjeTVmYVc1MmIydGxJRDBnWlc1eGRXVjFaVHRjYmlBZ2ZWeHVYRzRnSUdSbFptbHVaVWwwWlhKaGRHOXlUV1YwYUc5a2N5aEJjM2x1WTBsMFpYSmhkRzl5TG5CeWIzUnZkSGx3WlNrN1hHNWNiaUFnTHk4Z1RtOTBaU0IwYUdGMElITnBiWEJzWlNCaGMzbHVZeUJtZFc1amRHbHZibk1nWVhKbElHbHRjR3hsYldWdWRHVmtJRzl1SUhSdmNDQnZabHh1SUNBdkx5QkJjM2x1WTBsMFpYSmhkRzl5SUc5aWFtVmpkSE03SUhSb1pYa2dhblZ6ZENCeVpYUjFjbTRnWVNCUWNtOXRhWE5sSUdadmNpQjBhR1VnZG1Gc2RXVWdiMlpjYmlBZ0x5OGdkR2hsSUdacGJtRnNJSEpsYzNWc2RDQndjbTlrZFdObFpDQmllU0IwYUdVZ2FYUmxjbUYwYjNJdVhHNGdJSEoxYm5ScGJXVXVZWE41Ym1NZ1BTQm1kVzVqZEdsdmJpQW9hVzV1WlhKR2Jpd2diM1YwWlhKR2Jpd2djMlZzWml3Z2RISjVURzlqYzB4cGMzUXBJSHRjYmlBZ0lDQjJZWElnYVhSbGNpQTlJRzVsZHlCQmMzbHVZMGwwWlhKaGRHOXlLSGR5WVhBb2FXNXVaWEpHYml3Z2IzVjBaWEpHYml3Z2MyVnNaaXdnZEhKNVRHOWpjMHhwYzNRcEtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCeWRXNTBhVzFsTG1selIyVnVaWEpoZEc5eVJuVnVZM1JwYjI0b2IzVjBaWEpHYmlrZ1B5QnBkR1Z5SUM4dklFbG1JRzkxZEdWeVJtNGdhWE1nWVNCblpXNWxjbUYwYjNJc0lISmxkSFZ5YmlCMGFHVWdablZzYkNCcGRHVnlZWFJ2Y2k1Y2JpQWdJQ0E2SUdsMFpYSXVibVY0ZENncExuUm9aVzRvWm5WdVkzUnBiMjRnS0hKbGMzVnNkQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSEpsYzNWc2RDNWtiMjVsSUQ4Z2NtVnpkV3gwTG5aaGJIVmxJRG9nYVhSbGNpNXVaWGgwS0NrN1hHNGdJQ0FnZlNrN1hHNGdJSDA3WEc1Y2JpQWdablZ1WTNScGIyNGdiV0ZyWlVsdWRtOXJaVTFsZEdodlpDaHBibTVsY2tadUxDQnpaV3htTENCamIyNTBaWGgwS1NCN1hHNGdJQ0FnZG1GeUlITjBZWFJsSUQwZ1IyVnVVM1JoZEdWVGRYTndaVzVrWldSVGRHRnlkRHRjYmx4dUlDQWdJSEpsZEhWeWJpQm1kVzVqZEdsdmJpQnBiblp2YTJVb2JXVjBhRzlrTENCaGNtY3BJSHRjYmlBZ0lDQWdJR2xtSUNoemRHRjBaU0E5UFQwZ1IyVnVVM1JoZEdWRmVHVmpkWFJwYm1jcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGd2lSMlZ1WlhKaGRHOXlJR2x6SUdGc2NtVmhaSGtnY25WdWJtbHVaMXdpS1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2FXWWdLSE4wWVhSbElEMDlQU0JIWlc1VGRHRjBaVU52YlhCc1pYUmxaQ2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9iV1YwYUc5a0lEMDlQU0JjSW5Sb2NtOTNYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCaGNtYzdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBdkx5QkNaU0JtYjNKbmFYWnBibWNzSUhCbGNpQXlOUzR6TGpNdU15NHpJRzltSUhSb1pTQnpjR1ZqT2x4dUlDQWdJQ0FnSUNBdkx5Qm9kSFJ3Y3pvdkwzQmxiM0JzWlM1dGIzcHBiR3hoTG05eVp5OSthbTl5Wlc1a2IzSm1aaTlsY3pZdFpISmhablF1YUhSdGJDTnpaV010WjJWdVpYSmhkRzl5Y21WemRXMWxYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmtiMjVsVW1WemRXeDBLQ2s3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUhkb2FXeGxJQ2gwY25WbEtTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCa1pXeGxaMkYwWlNBOUlHTnZiblJsZUhRdVpHVnNaV2RoZEdVN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hrWld4bFoyRjBaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2h0WlhSb2IyUWdQVDA5SUZ3aWNtVjBkWEp1WENJZ2ZId2diV1YwYUc5a0lEMDlQU0JjSW5Sb2NtOTNYQ0lnSmlZZ1pHVnNaV2RoZEdVdWFYUmxjbUYwYjNKYmJXVjBhRzlrWFNBOVBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJCSUhKbGRIVnliaUJ2Y2lCMGFISnZkeUFvZDJobGJpQjBhR1VnWkdWc1pXZGhkR1VnYVhSbGNtRjBiM0lnYUdGeklHNXZJSFJvY205M1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCdFpYUm9iMlFwSUdGc2QyRjVjeUIwWlhKdGFXNWhkR1Z6SUhSb1pTQjVhV1ZzWkNvZ2JHOXZjQzVjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiblJsZUhRdVpHVnNaV2RoZEdVZ1BTQnVkV3hzTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCSlppQjBhR1VnWkdWc1pXZGhkR1VnYVhSbGNtRjBiM0lnYUdGeklHRWdjbVYwZFhKdUlHMWxkR2h2WkN3Z1oybDJaU0JwZENCaFhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCamFHRnVZMlVnZEc4Z1kyeGxZVzRnZFhBdVhHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2NtVjBkWEp1VFdWMGFHOWtJRDBnWkdWc1pXZGhkR1V1YVhSbGNtRjBiM0piWENKeVpYUjFjbTVjSWwwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NtVjBkWEp1VFdWMGFHOWtLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCeVpXTnZjbVFnUFNCMGNubERZWFJqYUNoeVpYUjFjbTVOWlhSb2IyUXNJR1JsYkdWbllYUmxMbWwwWlhKaGRHOXlMQ0JoY21jcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jbVZqYjNKa0xuUjVjR1VnUFQwOUlGd2lkR2h5YjNkY0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUVsbUlIUm9aU0J5WlhSMWNtNGdiV1YwYUc5a0lIUm9jbVYzSUdGdUlHVjRZMlZ3ZEdsdmJpd2diR1YwSUhSb1lYUmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJsZUdObGNIUnBiMjRnY0hKbGRtRnBiQ0J2ZG1WeUlIUm9aU0J2Y21sbmFXNWhiQ0J5WlhSMWNtNGdiM0lnZEdoeWIzY3VYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiV1YwYUc5a0lEMGdYQ0owYUhKdmQxd2lPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0Z5WnlBOUlISmxZMjl5WkM1aGNtYzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHMWxkR2h2WkNBOVBUMGdYQ0p5WlhSMWNtNWNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlCRGIyNTBhVzUxWlNCM2FYUm9JSFJvWlNCdmRYUmxjaUJ5WlhSMWNtNHNJRzV2ZHlCMGFHRjBJSFJvWlNCa1pXeGxaMkYwWlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlCcGRHVnlZWFJ2Y2lCb1lYTWdZbVZsYmlCMFpYSnRhVzVoZEdWa0xseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0IyWVhJZ2NtVmpiM0prSUQwZ2RISjVRMkYwWTJnb1pHVnNaV2RoZEdVdWFYUmxjbUYwYjNKYmJXVjBhRzlrWFN3Z1pHVnNaV2RoZEdVdWFYUmxjbUYwYjNJc0lHRnlaeWs3WEc1Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvY21WamIzSmtMblI1Y0dVZ1BUMDlJRndpZEdoeWIzZGNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1ZEdWNGRDNWtaV3hsWjJGMFpTQTlJRzUxYkd3N1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklFeHBhMlVnY21WMGRYSnVhVzVuSUdkbGJtVnlZWFJ2Y2k1MGFISnZkeWgxYm1OaGRXZG9kQ2tzSUdKMWRDQjNhWFJvYjNWMElIUm9aVnh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdiM1psY21obFlXUWdiMllnWVc0Z1pYaDBjbUVnWm5WdVkzUnBiMjRnWTJGc2JDNWNiaUFnSUNBZ0lDQWdJQ0FnSUcxbGRHaHZaQ0E5SUZ3aWRHaHliM2RjSWp0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0Z5WnlBOUlISmxZMjl5WkM1aGNtYzdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNBdkx5QkVaV3hsWjJGMFpTQm5aVzVsY21GMGIzSWdjbUZ1SUdGdVpDQm9ZVzVrYkdWa0lHbDBjeUJ2ZDI0Z1pYaGpaWEIwYVc5dWN5QnpiMXh1SUNBZ0lDQWdJQ0FnSUM4dklISmxaMkZ5Wkd4bGMzTWdiMllnZDJoaGRDQjBhR1VnYldWMGFHOWtJSGRoY3l3Z2QyVWdZMjl1ZEdsdWRXVWdZWE1nYVdZZ2FYUWdhWE5jYmlBZ0lDQWdJQ0FnSUNBdkx5QmNJbTVsZUhSY0lpQjNhWFJvSUdGdUlIVnVaR1ZtYVc1bFpDQmhjbWN1WEc0Z0lDQWdJQ0FnSUNBZ2JXVjBhRzlrSUQwZ1hDSnVaWGgwWENJN1hHNGdJQ0FnSUNBZ0lDQWdZWEpuSUQwZ2RXNWtaV1pwYm1Wa08xeHVYRzRnSUNBZ0lDQWdJQ0FnZG1GeUlHbHVabThnUFNCeVpXTnZjbVF1WVhKbk8xeHVJQ0FnSUNBZ0lDQWdJR2xtSUNocGJtWnZMbVJ2Ym1VcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuUmxlSFJiWkdWc1pXZGhkR1V1Y21WemRXeDBUbUZ0WlYwZ1BTQnBibVp2TG5aaGJIVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR1Y0ZEM1dVpYaDBJRDBnWkdWc1pXZGhkR1V1Ym1WNGRFeHZZenRjYmlBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjM1JoZEdVZ1BTQkhaVzVUZEdGMFpWTjFjM0JsYm1SbFpGbHBaV3hrTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHbHVabTg3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnWTI5dWRHVjRkQzVrWld4bFoyRjBaU0E5SUc1MWJHdzdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCcFppQW9iV1YwYUc5a0lEMDlQU0JjSW01bGVIUmNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2h6ZEdGMFpTQTlQVDBnUjJWdVUzUmhkR1ZUZFhOd1pXNWtaV1JaYVdWc1pDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR1Y0ZEM1elpXNTBJRDBnWVhKbk8xeHVJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNTBaWGgwTG5ObGJuUWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzFsZEdodlpDQTlQVDBnWENKMGFISnZkMXdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hOMFlYUmxJRDA5UFNCSFpXNVRkR0YwWlZOMWMzQmxibVJsWkZOMFlYSjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkR0YwWlNBOUlFZGxibE4wWVhSbFEyOXRjR3hsZEdWa08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dZWEpuTzF4dUlDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUdsbUlDaGpiMjUwWlhoMExtUnBjM0JoZEdOb1JYaGpaWEIwYVc5dUtHRnlaeWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUVsbUlIUm9aU0JrYVhOd1lYUmphR1ZrSUdWNFkyVndkR2x2YmlCM1lYTWdZMkYxWjJoMElHSjVJR0VnWTJGMFkyZ2dZbXh2WTJzc1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCMGFHVnVJR3hsZENCMGFHRjBJR05oZEdOb0lHSnNiMk5ySUdoaGJtUnNaU0IwYUdVZ1pYaGpaWEIwYVc5dUlHNXZjbTFoYkd4NUxseHVJQ0FnSUNBZ0lDQWdJQ0FnYldWMGFHOWtJRDBnWENKdVpYaDBYQ0k3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmhjbWNnUFNCMWJtUmxabWx1WldRN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0cxbGRHaHZaQ0E5UFQwZ1hDSnlaWFIxY201Y0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmxlSFF1WVdKeWRYQjBLRndpY21WMGRYSnVYQ0lzSUdGeVp5azdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCemRHRjBaU0E5SUVkbGJsTjBZWFJsUlhobFkzVjBhVzVuTzF4dVhHNGdJQ0FnSUNBZ0lIWmhjaUJ5WldOdmNtUWdQU0IwY25sRFlYUmphQ2hwYm01bGNrWnVMQ0J6Wld4bUxDQmpiMjUwWlhoMEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hKbFkyOXlaQzUwZVhCbElEMDlQU0JjSW01dmNtMWhiRndpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnU1dZZ1lXNGdaWGhqWlhCMGFXOXVJR2x6SUhSb2NtOTNiaUJtY205dElHbHVibVZ5Um00c0lIZGxJR3hsWVhabElITjBZWFJsSUQwOVBWeHVJQ0FnSUNBZ0lDQWdJQzh2SUVkbGJsTjBZWFJsUlhobFkzVjBhVzVuSUdGdVpDQnNiMjl3SUdKaFkyc2dabTl5SUdGdWIzUm9aWElnYVc1MmIyTmhkR2x2Ymk1Y2JpQWdJQ0FnSUNBZ0lDQnpkR0YwWlNBOUlHTnZiblJsZUhRdVpHOXVaU0EvSUVkbGJsTjBZWFJsUTI5dGNHeGxkR1ZrSURvZ1IyVnVVM1JoZEdWVGRYTndaVzVrWldSWmFXVnNaRHRjYmx4dUlDQWdJQ0FnSUNBZ0lIWmhjaUJwYm1adklEMGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnNkV1U2SUhKbFkyOXlaQzVoY21jc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JrYjI1bE9pQmpiMjUwWlhoMExtUnZibVZjYmlBZ0lDQWdJQ0FnSUNCOU8xeHVYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tISmxZMjl5WkM1aGNtY2dQVDA5SUVOdmJuUnBiblZsVTJWdWRHbHVaV3dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoamIyNTBaWGgwTG1SbGJHVm5ZWFJsSUNZbUlHMWxkR2h2WkNBOVBUMGdYQ0p1WlhoMFhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnUkdWc2FXSmxjbUYwWld4NUlHWnZjbWRsZENCMGFHVWdiR0Z6ZENCelpXNTBJSFpoYkhWbElITnZJSFJvWVhRZ2QyVWdaRzl1SjNSY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1lXTmphV1JsYm5SaGJHeDVJSEJoYzNNZ2FYUWdiMjRnZEc4Z2RHaGxJR1JsYkdWbllYUmxMbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmhjbWNnUFNCMWJtUmxabWx1WldRN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnBibVp2TzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h5WldOdmNtUXVkSGx3WlNBOVBUMGdYQ0owYUhKdmQxd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2MzUmhkR1VnUFNCSFpXNVRkR0YwWlVOdmJYQnNaWFJsWkR0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJFYVhOd1lYUmphQ0IwYUdVZ1pYaGpaWEIwYVc5dUlHSjVJR3h2YjNCcGJtY2dZbUZqYXlCaGNtOTFibVFnZEc4Z2RHaGxYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1kyOXVkR1Y0ZEM1a2FYTndZWFJqYUVWNFkyVndkR2x2YmloaGNtY3BJR05oYkd3Z1lXSnZkbVV1WEc0Z0lDQWdJQ0FnSUNBZ2JXVjBhRzlrSUQwZ1hDSjBhSEp2ZDF3aU8xeHVJQ0FnSUNBZ0lDQWdJR0Z5WnlBOUlISmxZMjl5WkM1aGNtYzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlPMXh1SUNCOVhHNWNiaUFnTHk4Z1JHVm1hVzVsSUVkbGJtVnlZWFJ2Y2k1d2NtOTBiM1I1Y0dVdWUyNWxlSFFzZEdoeWIzY3NjbVYwZFhKdWZTQnBiaUIwWlhKdGN5QnZaaUIwYUdWY2JpQWdMeThnZFc1cFptbGxaQ0F1WDJsdWRtOXJaU0JvWld4d1pYSWdiV1YwYUc5a0xseHVJQ0JrWldacGJtVkpkR1Z5WVhSdmNrMWxkR2h2WkhNb1IzQXBPMXh1WEc0Z0lFZHdXMmwwWlhKaGRHOXlVM2x0WW05c1hTQTlJR1oxYm1OMGFXOXVJQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2JpQWdmVHRjYmx4dUlDQkhjQzUwYjFOMGNtbHVaeUE5SUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNCeVpYUjFjbTRnWENKYmIySnFaV04wSUVkbGJtVnlZWFJ2Y2wxY0lqdGNiaUFnZlR0Y2JseHVJQ0JtZFc1amRHbHZiaUJ3ZFhOb1ZISjVSVzUwY25rb2JHOWpjeWtnZTF4dUlDQWdJSFpoY2lCbGJuUnllU0E5SUhzZ2RISjVURzlqT2lCc2IyTnpXekJkSUgwN1hHNWNiaUFnSUNCcFppQW9NU0JwYmlCc2IyTnpLU0I3WEc0Z0lDQWdJQ0JsYm5SeWVTNWpZWFJqYUV4dll5QTlJR3h2WTNOYk1WMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRElnYVc0Z2JHOWpjeWtnZTF4dUlDQWdJQ0FnWlc1MGNua3VabWx1WVd4c2VVeHZZeUE5SUd4dlkzTmJNbDA3WEc0Z0lDQWdJQ0JsYm5SeWVTNWhablJsY2t4dll5QTlJR3h2WTNOYk0xMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RHaHBjeTUwY25sRmJuUnlhV1Z6TG5CMWMyZ29aVzUwY25rcE8xeHVJQ0I5WEc1Y2JpQWdablZ1WTNScGIyNGdjbVZ6WlhSVWNubEZiblJ5ZVNobGJuUnllU2tnZTF4dUlDQWdJSFpoY2lCeVpXTnZjbVFnUFNCbGJuUnllUzVqYjIxd2JHVjBhVzl1SUh4OElIdDlPMXh1SUNBZ0lISmxZMjl5WkM1MGVYQmxJRDBnWENKdWIzSnRZV3hjSWp0Y2JpQWdJQ0JrWld4bGRHVWdjbVZqYjNKa0xtRnlaenRjYmlBZ0lDQmxiblJ5ZVM1amIyMXdiR1YwYVc5dUlEMGdjbVZqYjNKa08xeHVJQ0I5WEc1Y2JpQWdablZ1WTNScGIyNGdRMjl1ZEdWNGRDaDBjbmxNYjJOelRHbHpkQ2tnZTF4dUlDQWdJQzh2SUZSb1pTQnliMjkwSUdWdWRISjVJRzlpYW1WamRDQW9aV1ptWldOMGFYWmxiSGtnWVNCMGNua2djM1JoZEdWdFpXNTBJSGRwZEdodmRYUWdZU0JqWVhSamFGeHVJQ0FnSUM4dklHOXlJR0VnWm1sdVlXeHNlU0JpYkc5amF5a2daMmwyWlhNZ2RYTWdZU0J3YkdGalpTQjBieUJ6ZEc5eVpTQjJZV3gxWlhNZ2RHaHliM2R1SUdaeWIyMWNiaUFnSUNBdkx5QnNiMk5oZEdsdmJuTWdkMmhsY21VZ2RHaGxjbVVnYVhNZ2JtOGdaVzVqYkc5emFXNW5JSFJ5ZVNCemRHRjBaVzFsYm5RdVhHNGdJQ0FnZEdocGN5NTBjbmxGYm5SeWFXVnpJRDBnVzNzZ2RISjVURzlqT2lCY0luSnZiM1JjSWlCOVhUdGNiaUFnSUNCMGNubE1iMk56VEdsemRDNW1iM0pGWVdOb0tIQjFjMmhVY25sRmJuUnllU3dnZEdocGN5azdYRzRnSUNBZ2RHaHBjeTV5WlhObGRDaDBjblZsS1R0Y2JpQWdmVnh1WEc0Z0lISjFiblJwYldVdWEyVjVjeUE5SUdaMWJtTjBhVzl1SUNodlltcGxZM1FwSUh0Y2JpQWdJQ0IyWVhJZ2EyVjVjeUE5SUZ0ZE8xeHVJQ0FnSUdadmNpQW9kbUZ5SUd0bGVTQnBiaUJ2WW1wbFkzUXBJSHRjYmlBZ0lDQWdJR3RsZVhNdWNIVnphQ2hyWlhrcE8xeHVJQ0FnSUgxY2JpQWdJQ0JyWlhsekxuSmxkbVZ5YzJVb0tUdGNibHh1SUNBZ0lDOHZJRkpoZEdobGNpQjBhR0Z1SUhKbGRIVnlibWx1WnlCaGJpQnZZbXBsWTNRZ2QybDBhQ0JoSUc1bGVIUWdiV1YwYUc5a0xDQjNaU0JyWldWd1hHNGdJQ0FnTHk4Z2RHaHBibWR6SUhOcGJYQnNaU0JoYm1RZ2NtVjBkWEp1SUhSb1pTQnVaWGgwSUdaMWJtTjBhVzl1SUdsMGMyVnNaaTVjYmlBZ0lDQnlaWFIxY200Z1puVnVZM1JwYjI0Z2JtVjRkQ2dwSUh0Y2JpQWdJQ0FnSUhkb2FXeGxJQ2hyWlhsekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnYTJWNUlEMGdhMlY1Y3k1d2IzQW9LVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHdGxlU0JwYmlCdlltcGxZM1FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnVaWGgwTG5aaGJIVmxJRDBnYTJWNU8xeHVJQ0FnSUNBZ0lDQWdJRzVsZUhRdVpHOXVaU0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ1WlhoME8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQzh2SUZSdklHRjJiMmxrSUdOeVpXRjBhVzVuSUdGdUlHRmtaR2wwYVc5dVlXd2diMkpxWldOMExDQjNaU0JxZFhOMElHaGhibWNnZEdobElDNTJZV3gxWlZ4dUlDQWdJQ0FnTHk4Z1lXNWtJQzVrYjI1bElIQnliM0JsY25ScFpYTWdiMlptSUhSb1pTQnVaWGgwSUdaMWJtTjBhVzl1SUc5aWFtVmpkQ0JwZEhObGJHWXVJRlJvYVhOY2JpQWdJQ0FnSUM4dklHRnNjMjhnWlc1emRYSmxjeUIwYUdGMElIUm9aU0J0YVc1cFptbGxjaUIzYVd4c0lHNXZkQ0JoYm05dWVXMXBlbVVnZEdobElHWjFibU4wYVc5dUxseHVJQ0FnSUNBZ2JtVjRkQzVrYjI1bElEMGdkSEoxWlR0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhoME8xeHVJQ0FnSUgwN1hHNGdJSDA3WEc1Y2JpQWdablZ1WTNScGIyNGdkbUZzZFdWektHbDBaWEpoWW14bEtTQjdYRzRnSUNBZ2FXWWdLR2wwWlhKaFlteGxLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2FYUmxjbUYwYjNKTlpYUm9iMlFnUFNCcGRHVnlZV0pzWlZ0cGRHVnlZWFJ2Y2xONWJXSnZiRjA3WEc0Z0lDQWdJQ0JwWmlBb2FYUmxjbUYwYjNKTlpYUm9iMlFwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdsMFpYSmhkRzl5VFdWMGFHOWtMbU5oYkd3b2FYUmxjbUZpYkdVcE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JR2wwWlhKaFlteGxMbTVsZUhRZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2FYUmxjbUZpYkdVN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHbG1JQ2doYVhOT1lVNG9hWFJsY21GaWJHVXViR1Z1WjNSb0tTa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2FTQTlJQzB4TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdibVY0ZENBOUlHWjFibU4wYVc5dUlHNWxlSFFvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkMmhwYkdVZ0tDc3JhU0E4SUdsMFpYSmhZbXhsTG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0doaGMwOTNiaTVqWVd4c0tHbDBaWEpoWW14bExDQnBLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J1WlhoMExuWmhiSFZsSUQwZ2FYUmxjbUZpYkdWYmFWMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHNWxlSFF1Wkc5dVpTQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WNGREdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNCdVpYaDBMblpoYkhWbElEMGdkVzVrWldacGJtVmtPMXh1SUNBZ0lDQWdJQ0FnSUc1bGVIUXVaRzl1WlNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2JtVjRkRHRjYmlBZ0lDQWdJQ0FnZlR0Y2JseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JtVjRkQzV1WlhoMElEMGdibVY0ZER0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCU1pYUjFjbTRnWVc0Z2FYUmxjbUYwYjNJZ2QybDBhQ0J1YnlCMllXeDFaWE11WEc0Z0lDQWdjbVYwZFhKdUlIc2dibVY0ZERvZ1pHOXVaVkpsYzNWc2RDQjlPMXh1SUNCOVhHNGdJSEoxYm5ScGJXVXVkbUZzZFdWeklEMGdkbUZzZFdWek8xeHVYRzRnSUdaMWJtTjBhVzl1SUdSdmJtVlNaWE4xYkhRb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhzZ2RtRnNkV1U2SUhWdVpHVm1hVzVsWkN3Z1pHOXVaVG9nZEhKMVpTQjlPMXh1SUNCOVhHNWNiaUFnUTI5dWRHVjRkQzV3Y205MGIzUjVjR1VnUFNCN1hHNGdJQ0FnWTI5dWMzUnlkV04wYjNJNklFTnZiblJsZUhRc1hHNWNiaUFnSUNCeVpYTmxkRG9nWm5WdVkzUnBiMjRnY21WelpYUW9jMnRwY0ZSbGJYQlNaWE5sZENrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV3Y21WMklEMGdNRHRjYmlBZ0lDQWdJSFJvYVhNdWJtVjRkQ0E5SURBN1hHNGdJQ0FnSUNCMGFHbHpMbk5sYm5RZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUNBZ0lDQjBhR2x6TG1SdmJtVWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lIUm9hWE11WkdWc1pXZGhkR1VnUFNCdWRXeHNPMXh1WEc0Z0lDQWdJQ0IwYUdsekxuUnllVVZ1ZEhKcFpYTXVabTl5UldGamFDaHlaWE5sZEZSeWVVVnVkSEo1S1R0Y2JseHVJQ0FnSUNBZ2FXWWdLQ0Z6YTJsd1ZHVnRjRkpsYzJWMEtTQjdYRzRnSUNBZ0lDQWdJR1p2Y2lBb2RtRnlJRzVoYldVZ2FXNGdkR2hwY3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQzh2SUU1dmRDQnpkWEpsSUdGaWIzVjBJSFJvWlNCdmNIUnBiV0ZzSUc5eVpHVnlJRzltSUhSb1pYTmxJR052Ym1ScGRHbHZibk02WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLRzVoYldVdVkyaGhja0YwS0RBcElEMDlQU0JjSW5SY0lpQW1KaUJvWVhOUGQyNHVZMkZzYkNoMGFHbHpMQ0J1WVcxbEtTQW1KaUFoYVhOT1lVNG9LMjVoYldVdWMyeHBZMlVvTVNrcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpXMjVoYldWZElEMGdkVzVrWldacGJtVmtPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwc1hHNWNiaUFnSUNCemRHOXdPaUJtZFc1amRHbHZiaUJ6ZEc5d0tDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1a2IyNWxJRDBnZEhKMVpUdGNibHh1SUNBZ0lDQWdkbUZ5SUhKdmIzUkZiblJ5ZVNBOUlIUm9hWE11ZEhKNVJXNTBjbWxsYzFzd1hUdGNiaUFnSUNBZ0lIWmhjaUJ5YjI5MFVtVmpiM0prSUQwZ2NtOXZkRVZ1ZEhKNUxtTnZiWEJzWlhScGIyNDdYRzRnSUNBZ0lDQnBaaUFvY205dmRGSmxZMjl5WkM1MGVYQmxJRDA5UFNCY0luUm9jbTkzWENJcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2NtOXZkRkpsWTI5eVpDNWhjbWM3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxuSjJZV3c3WEc0Z0lDQWdmU3hjYmx4dUlDQWdJR1JwYzNCaGRHTm9SWGhqWlhCMGFXOXVPaUJtZFc1amRHbHZiaUJrYVhOd1lYUmphRVY0WTJWd2RHbHZiaWhsZUdObGNIUnBiMjRwSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG1SdmJtVXBJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2daWGhqWlhCMGFXOXVPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IyWVhJZ1kyOXVkR1Y0ZENBOUlIUm9hWE03WEc0Z0lDQWdJQ0JtZFc1amRHbHZiaUJvWVc1a2JHVW9iRzlqTENCallYVm5hSFFwSUh0Y2JpQWdJQ0FnSUNBZ2NtVmpiM0prTG5SNWNHVWdQU0JjSW5Sb2NtOTNYQ0k3WEc0Z0lDQWdJQ0FnSUhKbFkyOXlaQzVoY21jZ1BTQmxlR05sY0hScGIyNDdYRzRnSUNBZ0lDQWdJR052Ym5SbGVIUXVibVY0ZENBOUlHeHZZenRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJQ0VoWTJGMVoyaDBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ2RHaHBjeTUwY25sRmJuUnlhV1Z6TG14bGJtZDBhQ0F0SURFN0lHa2dQajBnTURzZ0xTMXBLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQmxiblJ5ZVNBOUlIUm9hWE11ZEhKNVJXNTBjbWxsYzF0cFhUdGNiaUFnSUNBZ0lDQWdkbUZ5SUhKbFkyOXlaQ0E5SUdWdWRISjVMbU52YlhCc1pYUnBiMjQ3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLR1Z1ZEhKNUxuUnllVXh2WXlBOVBUMGdYQ0p5YjI5MFhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QkZlR05sY0hScGIyNGdkR2h5YjNkdUlHOTFkSE5wWkdVZ2IyWWdZVzU1SUhSeWVTQmliRzlqYXlCMGFHRjBJR052ZFd4a0lHaGhibVJzWlZ4dUlDQWdJQ0FnSUNBZ0lDOHZJR2wwTENCemJ5QnpaWFFnZEdobElHTnZiWEJzWlhScGIyNGdkbUZzZFdVZ2IyWWdkR2hsSUdWdWRHbHlaU0JtZFc1amRHbHZiaUIwYjF4dUlDQWdJQ0FnSUNBZ0lDOHZJSFJvY205M0lIUm9aU0JsZUdObGNIUnBiMjR1WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdoaGJtUnNaU2hjSW1WdVpGd2lLVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hsYm5SeWVTNTBjbmxNYjJNZ1BEMGdkR2hwY3k1d2NtVjJLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RtRnlJR2hoYzBOaGRHTm9JRDBnYUdGelQzZHVMbU5oYkd3b1pXNTBjbmtzSUZ3aVkyRjBZMmhNYjJOY0lpazdYRzRnSUNBZ0lDQWdJQ0FnZG1GeUlHaGhjMFpwYm1Gc2JIa2dQU0JvWVhOUGQyNHVZMkZzYkNobGJuUnllU3dnWENKbWFXNWhiR3g1VEc5alhDSXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR2hoYzBOaGRHTm9JQ1ltSUdoaGMwWnBibUZzYkhrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG5CeVpYWWdQQ0JsYm5SeWVTNWpZWFJqYUV4dll5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2FHRnVaR3hsS0dWdWRISjVMbU5oZEdOb1RHOWpMQ0IwY25WbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RHaHBjeTV3Y21WMklEd2daVzUwY25rdVptbHVZV3hzZVV4dll5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2FHRnVaR3hsS0dWdWRISjVMbVpwYm1Gc2JIbE1iMk1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2FHRnpRMkYwWTJncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG5CeVpYWWdQQ0JsYm5SeWVTNWpZWFJqYUV4dll5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2FHRnVaR3hsS0dWdWRISjVMbU5oZEdOb1RHOWpMQ0IwY25WbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLR2hoYzBacGJtRnNiSGtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbkJ5WlhZZ1BDQmxiblJ5ZVM1bWFXNWhiR3g1VEc5aktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCb1lXNWtiR1VvWlc1MGNua3VabWx1WVd4c2VVeHZZeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loY0luUnllU0J6ZEdGMFpXMWxiblFnZDJsMGFHOTFkQ0JqWVhSamFDQnZjaUJtYVc1aGJHeDVYQ0lwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHNYRzVjYmlBZ0lDQmhZbkoxY0hRNklHWjFibU4wYVc5dUlHRmljblZ3ZENoMGVYQmxMQ0JoY21jcElIdGNiaUFnSUNBZ0lHWnZjaUFvZG1GeUlHa2dQU0IwYUdsekxuUnllVVZ1ZEhKcFpYTXViR1Z1WjNSb0lDMGdNVHNnYVNBK1BTQXdPeUF0TFdrcElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUdWdWRISjVJRDBnZEdocGN5NTBjbmxGYm5SeWFXVnpXMmxkTzF4dUlDQWdJQ0FnSUNCcFppQW9aVzUwY25rdWRISjVURzlqSUR3OUlIUm9hWE11Y0hKbGRpQW1KaUJvWVhOUGQyNHVZMkZzYkNobGJuUnllU3dnWENKbWFXNWhiR3g1VEc5alhDSXBJQ1ltSUhSb2FYTXVjSEpsZGlBOElHVnVkSEo1TG1acGJtRnNiSGxNYjJNcElIdGNiaUFnSUNBZ0lDQWdJQ0IyWVhJZ1ptbHVZV3hzZVVWdWRISjVJRDBnWlc1MGNuazdYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYVdZZ0tHWnBibUZzYkhsRmJuUnllU0FtSmlBb2RIbHdaU0E5UFQwZ1hDSmljbVZoYTF3aUlIeDhJSFI1Y0dVZ1BUMDlJRndpWTI5dWRHbHVkV1ZjSWlrZ0ppWWdabWx1WVd4c2VVVnVkSEo1TG5SeWVVeHZZeUE4UFNCaGNtY2dKaVlnWVhKbklEdzlJR1pwYm1Gc2JIbEZiblJ5ZVM1bWFXNWhiR3g1VEc5aktTQjdYRzRnSUNBZ0lDQWdJQzh2SUVsbmJtOXlaU0IwYUdVZ1ptbHVZV3hzZVNCbGJuUnllU0JwWmlCamIyNTBjbTlzSUdseklHNXZkQ0JxZFcxd2FXNW5JSFJ2SUdGY2JpQWdJQ0FnSUNBZ0x5OGdiRzlqWVhScGIyNGdiM1YwYzJsa1pTQjBhR1VnZEhKNUwyTmhkR05vSUdKc2IyTnJMbHh1SUNBZ0lDQWdJQ0JtYVc1aGJHeDVSVzUwY25rZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCMllYSWdjbVZqYjNKa0lEMGdabWx1WVd4c2VVVnVkSEo1SUQ4Z1ptbHVZV3hzZVVWdWRISjVMbU52YlhCc1pYUnBiMjRnT2lCN2ZUdGNiaUFnSUNBZ0lISmxZMjl5WkM1MGVYQmxJRDBnZEhsd1pUdGNiaUFnSUNBZ0lISmxZMjl5WkM1aGNtY2dQU0JoY21jN1hHNWNiaUFnSUNBZ0lHbG1JQ2htYVc1aGJHeDVSVzUwY25rcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1dVpYaDBJRDBnWm1sdVlXeHNlVVZ1ZEhKNUxtWnBibUZzYkhsTWIyTTdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG1OdmJYQnNaWFJsS0hKbFkyOXlaQ2s3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUhKbGRIVnliaUJEYjI1MGFXNTFaVk5sYm5ScGJtVnNPMXh1SUNBZ0lIMHNYRzVjYmlBZ0lDQmpiMjF3YkdWMFpUb2dablZ1WTNScGIyNGdZMjl0Y0d4bGRHVW9jbVZqYjNKa0xDQmhablJsY2t4dll5a2dlMXh1SUNBZ0lDQWdhV1lnS0hKbFkyOXlaQzUwZVhCbElEMDlQU0JjSW5Sb2NtOTNYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnY21WamIzSmtMbUZ5Wnp0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2FXWWdLSEpsWTI5eVpDNTBlWEJsSUQwOVBTQmNJbUp5WldGclhDSWdmSHdnY21WamIzSmtMblI1Y0dVZ1BUMDlJRndpWTI5dWRHbHVkV1ZjSWlrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG01bGVIUWdQU0J5WldOdmNtUXVZWEpuTzF4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoeVpXTnZjbVF1ZEhsd1pTQTlQVDBnWENKeVpYUjFjbTVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5KMllXd2dQU0J5WldOdmNtUXVZWEpuTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbTVsZUhRZ1BTQmNJbVZ1WkZ3aU8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaHlaV052Y21RdWRIbHdaU0E5UFQwZ1hDSnViM0p0WVd4Y0lpQW1KaUJoWm5SbGNreHZZeWtnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbTVsZUhRZ1BTQmhablJsY2t4dll6dGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUxGeHVYRzRnSUNBZ1ptbHVhWE5vT2lCbWRXNWpkR2x2YmlCbWFXNXBjMmdvWm1sdVlXeHNlVXh2WXlrZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJSFJvYVhNdWRISjVSVzUwY21sbGN5NXNaVzVuZEdnZ0xTQXhPeUJwSUQ0OUlEQTdJQzB0YVNrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnWlc1MGNua2dQU0IwYUdsekxuUnllVVZ1ZEhKcFpYTmJhVjA3WEc0Z0lDQWdJQ0FnSUdsbUlDaGxiblJ5ZVM1bWFXNWhiR3g1VEc5aklEMDlQU0JtYVc1aGJHeDVURzlqS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1amIyMXdiR1YwWlNobGJuUnllUzVqYjIxd2JHVjBhVzl1TENCbGJuUnllUzVoWm5SbGNreHZZeWs3WEc0Z0lDQWdJQ0FnSUNBZ2NtVnpaWFJVY25sRmJuUnllU2hsYm5SeWVTazdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRU52Ym5ScGJuVmxVMlZ1ZEdsdVpXdzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlMRnh1WEc0Z0lDQWdYQ0pqWVhSamFGd2lPaUJtZFc1amRHbHZiaUJmWTJGMFkyZ29kSEo1VEc5aktTQjdYRzRnSUNBZ0lDQm1iM0lnS0haaGNpQnBJRDBnZEdocGN5NTBjbmxGYm5SeWFXVnpMbXhsYm1kMGFDQXRJREU3SUdrZ1BqMGdNRHNnTFMxcEtTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCbGJuUnllU0E5SUhSb2FYTXVkSEo1Ulc1MGNtbGxjMXRwWFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1Z1ZEhKNUxuUnllVXh2WXlBOVBUMGdkSEo1VEc5aktTQjdYRzRnSUNBZ0lDQWdJQ0FnZG1GeUlISmxZMjl5WkNBOUlHVnVkSEo1TG1OdmJYQnNaWFJwYjI0N1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hKbFkyOXlaQzUwZVhCbElEMDlQU0JjSW5Sb2NtOTNYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCMGFISnZkMjRnUFNCeVpXTnZjbVF1WVhKbk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WelpYUlVjbmxGYm5SeWVTaGxiblJ5ZVNrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwYUhKdmQyNDdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnTHk4Z1ZHaGxJR052Ym5SbGVIUXVZMkYwWTJnZ2JXVjBhRzlrSUcxMWMzUWdiMjVzZVNCaVpTQmpZV3hzWldRZ2QybDBhQ0JoSUd4dlkyRjBhVzl1WEc0Z0lDQWdJQ0F2THlCaGNtZDFiV1Z1ZENCMGFHRjBJR052Y25KbGMzQnZibVJ6SUhSdklHRWdhMjV2ZDI0Z1kyRjBZMmdnWW14dlkyc3VYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1hDSnBiR3hsWjJGc0lHTmhkR05vSUdGMGRHVnRjSFJjSWlrN1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUdSbGJHVm5ZWFJsV1dsbGJHUTZJR1oxYm1OMGFXOXVJR1JsYkdWbllYUmxXV2xsYkdRb2FYUmxjbUZpYkdVc0lISmxjM1ZzZEU1aGJXVXNJRzVsZUhSTWIyTXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVpHVnNaV2RoZEdVZ1BTQjdYRzRnSUNBZ0lDQWdJR2wwWlhKaGRHOXlPaUIyWVd4MVpYTW9hWFJsY21GaWJHVXBMRnh1SUNBZ0lDQWdJQ0J5WlhOMWJIUk9ZVzFsT2lCeVpYTjFiSFJPWVcxbExGeHVJQ0FnSUNBZ0lDQnVaWGgwVEc5ak9pQnVaWGgwVEc5alhHNGdJQ0FnSUNCOU8xeHVYRzRnSUNBZ0lDQnlaWFIxY200Z1EyOXVkR2x1ZFdWVFpXNTBhVzVsYkR0Y2JpQWdJQ0I5WEc0Z0lIMDdYRzU5S1NoY2JpOHZJRUZ0YjI1bklIUm9aU0IyWVhKcGIzVnpJSFJ5YVdOcmN5Qm1iM0lnYjJKMFlXbHVhVzVuSUdFZ2NtVm1aWEpsYm1ObElIUnZJSFJvWlNCbmJHOWlZV3hjYmk4dklHOWlhbVZqZEN3Z2RHaHBjeUJ6WldWdGN5QjBieUJpWlNCMGFHVWdiVzl6ZENCeVpXeHBZV0pzWlNCMFpXTm9ibWx4ZFdVZ2RHaGhkQ0JrYjJWeklHNXZkRnh1THk4Z2RYTmxJR2x1WkdseVpXTjBJR1YyWVd3Z0tIZG9hV05vSUhacGIyeGhkR1Z6SUVOdmJuUmxiblFnVTJWamRYSnBkSGtnVUc5c2FXTjVLUzVjYm5SNWNHVnZaaUJuYkc5aVlXd2dQVDA5SUZ3aWIySnFaV04wWENJZ1B5Qm5iRzlpWVd3Z09pQjBlWEJsYjJZZ2QybHVaRzkzSUQwOVBTQmNJbTlpYW1WamRGd2lJRDhnZDJsdVpHOTNJRG9nZEhsd1pXOW1JSE5sYkdZZ1BUMDlJRndpYjJKcVpXTjBYQ0lnUHlCelpXeG1JRG9nZFc1a1pXWnBibVZrS1RzaVhYMD0iLCJ2YXIgbG9va3VwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXG47KGZ1bmN0aW9uIChleHBvcnRzKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuICB2YXIgQXJyID0gKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJylcbiAgICA/IFVpbnQ4QXJyYXlcbiAgICA6IEFycmF5XG5cblx0dmFyIFBMVVMgICA9ICcrJy5jaGFyQ29kZUF0KDApXG5cdHZhciBTTEFTSCAgPSAnLycuY2hhckNvZGVBdCgwKVxuXHR2YXIgTlVNQkVSID0gJzAnLmNoYXJDb2RlQXQoMClcblx0dmFyIExPV0VSICA9ICdhJy5jaGFyQ29kZUF0KDApXG5cdHZhciBVUFBFUiAgPSAnQScuY2hhckNvZGVBdCgwKVxuXG5cdGZ1bmN0aW9uIGRlY29kZSAoZWx0KSB7XG5cdFx0dmFyIGNvZGUgPSBlbHQuY2hhckNvZGVBdCgwKVxuXHRcdGlmIChjb2RlID09PSBQTFVTKVxuXHRcdFx0cmV0dXJuIDYyIC8vICcrJ1xuXHRcdGlmIChjb2RlID09PSBTTEFTSClcblx0XHRcdHJldHVybiA2MyAvLyAnLydcblx0XHRpZiAoY29kZSA8IE5VTUJFUilcblx0XHRcdHJldHVybiAtMSAvL25vIG1hdGNoXG5cdFx0aWYgKGNvZGUgPCBOVU1CRVIgKyAxMClcblx0XHRcdHJldHVybiBjb2RlIC0gTlVNQkVSICsgMjYgKyAyNlxuXHRcdGlmIChjb2RlIDwgVVBQRVIgKyAyNilcblx0XHRcdHJldHVybiBjb2RlIC0gVVBQRVJcblx0XHRpZiAoY29kZSA8IExPV0VSICsgMjYpXG5cdFx0XHRyZXR1cm4gY29kZSAtIExPV0VSICsgMjZcblx0fVxuXG5cdGZ1bmN0aW9uIGI2NFRvQnl0ZUFycmF5IChiNjQpIHtcblx0XHR2YXIgaSwgaiwgbCwgdG1wLCBwbGFjZUhvbGRlcnMsIGFyclxuXG5cdFx0aWYgKGI2NC5sZW5ndGggJSA0ID4gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Jylcblx0XHR9XG5cblx0XHQvLyB0aGUgbnVtYmVyIG9mIGVxdWFsIHNpZ25zIChwbGFjZSBob2xkZXJzKVxuXHRcdC8vIGlmIHRoZXJlIGFyZSB0d28gcGxhY2Vob2xkZXJzLCB0aGFuIHRoZSB0d28gY2hhcmFjdGVycyBiZWZvcmUgaXRcblx0XHQvLyByZXByZXNlbnQgb25lIGJ5dGVcblx0XHQvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSwgdGhlbiB0aGUgdGhyZWUgY2hhcmFjdGVycyBiZWZvcmUgaXQgcmVwcmVzZW50IDIgYnl0ZXNcblx0XHQvLyB0aGlzIGlzIGp1c3QgYSBjaGVhcCBoYWNrIHRvIG5vdCBkbyBpbmRleE9mIHR3aWNlXG5cdFx0dmFyIGxlbiA9IGI2NC5sZW5ndGhcblx0XHRwbGFjZUhvbGRlcnMgPSAnPScgPT09IGI2NC5jaGFyQXQobGVuIC0gMikgPyAyIDogJz0nID09PSBiNjQuY2hhckF0KGxlbiAtIDEpID8gMSA6IDBcblxuXHRcdC8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuXHRcdGFyciA9IG5ldyBBcnIoYjY0Lmxlbmd0aCAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzKVxuXG5cdFx0Ly8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuXHRcdGwgPSBwbGFjZUhvbGRlcnMgPiAwID8gYjY0Lmxlbmd0aCAtIDQgOiBiNjQubGVuZ3RoXG5cblx0XHR2YXIgTCA9IDBcblxuXHRcdGZ1bmN0aW9uIHB1c2ggKHYpIHtcblx0XHRcdGFycltMKytdID0gdlxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbDsgaSArPSA0LCBqICs9IDMpIHtcblx0XHRcdHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMTgpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAxKSkgPDwgMTIpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAyKSkgPDwgNikgfCBkZWNvZGUoYjY0LmNoYXJBdChpICsgMykpXG5cdFx0XHRwdXNoKCh0bXAgJiAweEZGMDAwMCkgPj4gMTYpXG5cdFx0XHRwdXNoKCh0bXAgJiAweEZGMDApID4+IDgpXG5cdFx0XHRwdXNoKHRtcCAmIDB4RkYpXG5cdFx0fVxuXG5cdFx0aWYgKHBsYWNlSG9sZGVycyA9PT0gMikge1xuXHRcdFx0dG1wID0gKGRlY29kZShiNjQuY2hhckF0KGkpKSA8PCAyKSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMSkpID4+IDQpXG5cdFx0XHRwdXNoKHRtcCAmIDB4RkYpXG5cdFx0fSBlbHNlIGlmIChwbGFjZUhvbGRlcnMgPT09IDEpIHtcblx0XHRcdHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMTApIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAxKSkgPDwgNCkgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDIpKSA+PiAyKVxuXHRcdFx0cHVzaCgodG1wID4+IDgpICYgMHhGRilcblx0XHRcdHB1c2godG1wICYgMHhGRilcblx0XHR9XG5cblx0XHRyZXR1cm4gYXJyXG5cdH1cblxuXHRmdW5jdGlvbiB1aW50OFRvQmFzZTY0ICh1aW50OCkge1xuXHRcdHZhciBpLFxuXHRcdFx0ZXh0cmFCeXRlcyA9IHVpbnQ4Lmxlbmd0aCAlIDMsIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG5cdFx0XHRvdXRwdXQgPSBcIlwiLFxuXHRcdFx0dGVtcCwgbGVuZ3RoXG5cblx0XHRmdW5jdGlvbiBlbmNvZGUgKG51bSkge1xuXHRcdFx0cmV0dXJuIGxvb2t1cC5jaGFyQXQobnVtKVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG5cdFx0XHRyZXR1cm4gZW5jb2RlKG51bSA+PiAxOCAmIDB4M0YpICsgZW5jb2RlKG51bSA+PiAxMiAmIDB4M0YpICsgZW5jb2RlKG51bSA+PiA2ICYgMHgzRikgKyBlbmNvZGUobnVtICYgMHgzRilcblx0XHR9XG5cblx0XHQvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG5cdFx0Zm9yIChpID0gMCwgbGVuZ3RoID0gdWludDgubGVuZ3RoIC0gZXh0cmFCeXRlczsgaSA8IGxlbmd0aDsgaSArPSAzKSB7XG5cdFx0XHR0ZW1wID0gKHVpbnQ4W2ldIDw8IDE2KSArICh1aW50OFtpICsgMV0gPDwgOCkgKyAodWludDhbaSArIDJdKVxuXHRcdFx0b3V0cHV0ICs9IHRyaXBsZXRUb0Jhc2U2NCh0ZW1wKVxuXHRcdH1cblxuXHRcdC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcblx0XHRzd2l0Y2ggKGV4dHJhQnl0ZXMpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0dGVtcCA9IHVpbnQ4W3VpbnQ4Lmxlbmd0aCAtIDFdXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUodGVtcCA+PiAyKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wIDw8IDQpICYgMHgzRilcblx0XHRcdFx0b3V0cHV0ICs9ICc9PSdcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0dGVtcCA9ICh1aW50OFt1aW50OC5sZW5ndGggLSAyXSA8PCA4KSArICh1aW50OFt1aW50OC5sZW5ndGggLSAxXSlcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSh0ZW1wID4+IDEwKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wID4+IDQpICYgMHgzRilcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSgodGVtcCA8PCAyKSAmIDB4M0YpXG5cdFx0XHRcdG91dHB1dCArPSAnPSdcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cblxuXHRleHBvcnRzLnRvQnl0ZUFycmF5ID0gYjY0VG9CeXRlQXJyYXlcblx0ZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gdWludDhUb0Jhc2U2NFxufSh0eXBlb2YgZXhwb3J0cyA9PT0gJ3VuZGVmaW5lZCcgPyAodGhpcy5iYXNlNjRqcyA9IHt9KSA6IGV4cG9ydHMpKVxuIiwiLyoqXG4gKiBCaXQgdHdpZGRsaW5nIGhhY2tzIGZvciBKYXZhU2NyaXB0LlxuICpcbiAqIEF1dGhvcjogTWlrb2xhIEx5c2Vua29cbiAqXG4gKiBQb3J0ZWQgZnJvbSBTdGFuZm9yZCBiaXQgdHdpZGRsaW5nIGhhY2sgbGlicmFyeTpcbiAqICAgIGh0dHA6Ly9ncmFwaGljcy5zdGFuZm9yZC5lZHUvfnNlYW5kZXIvYml0aGFja3MuaHRtbFxuICovXG5cblwidXNlIHN0cmljdFwiOyBcInVzZSByZXN0cmljdFwiO1xuXG4vL051bWJlciBvZiBiaXRzIGluIGFuIGludGVnZXJcbnZhciBJTlRfQklUUyA9IDMyO1xuXG4vL0NvbnN0YW50c1xuZXhwb3J0cy5JTlRfQklUUyAgPSBJTlRfQklUUztcbmV4cG9ydHMuSU5UX01BWCAgID0gIDB4N2ZmZmZmZmY7XG5leHBvcnRzLklOVF9NSU4gICA9IC0xPDwoSU5UX0JJVFMtMSk7XG5cbi8vUmV0dXJucyAtMSwgMCwgKzEgZGVwZW5kaW5nIG9uIHNpZ24gb2YgeFxuZXhwb3J0cy5zaWduID0gZnVuY3Rpb24odikge1xuICByZXR1cm4gKHYgPiAwKSAtICh2IDwgMCk7XG59XG5cbi8vQ29tcHV0ZXMgYWJzb2x1dGUgdmFsdWUgb2YgaW50ZWdlclxuZXhwb3J0cy5hYnMgPSBmdW5jdGlvbih2KSB7XG4gIHZhciBtYXNrID0gdiA+PiAoSU5UX0JJVFMtMSk7XG4gIHJldHVybiAodiBeIG1hc2spIC0gbWFzaztcbn1cblxuLy9Db21wdXRlcyBtaW5pbXVtIG9mIGludGVnZXJzIHggYW5kIHlcbmV4cG9ydHMubWluID0gZnVuY3Rpb24oeCwgeSkge1xuICByZXR1cm4geSBeICgoeCBeIHkpICYgLSh4IDwgeSkpO1xufVxuXG4vL0NvbXB1dGVzIG1heGltdW0gb2YgaW50ZWdlcnMgeCBhbmQgeVxuZXhwb3J0cy5tYXggPSBmdW5jdGlvbih4LCB5KSB7XG4gIHJldHVybiB4IF4gKCh4IF4geSkgJiAtKHggPCB5KSk7XG59XG5cbi8vQ2hlY2tzIGlmIGEgbnVtYmVyIGlzIGEgcG93ZXIgb2YgdHdvXG5leHBvcnRzLmlzUG93MiA9IGZ1bmN0aW9uKHYpIHtcbiAgcmV0dXJuICEodiAmICh2LTEpKSAmJiAoISF2KTtcbn1cblxuLy9Db21wdXRlcyBsb2cgYmFzZSAyIG9mIHZcbmV4cG9ydHMubG9nMiA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIHIsIHNoaWZ0O1xuICByID0gICAgICh2ID4gMHhGRkZGKSA8PCA0OyB2ID4+Pj0gcjtcbiAgc2hpZnQgPSAodiA+IDB4RkYgICkgPDwgMzsgdiA+Pj49IHNoaWZ0OyByIHw9IHNoaWZ0O1xuICBzaGlmdCA9ICh2ID4gMHhGICAgKSA8PCAyOyB2ID4+Pj0gc2hpZnQ7IHIgfD0gc2hpZnQ7XG4gIHNoaWZ0ID0gKHYgPiAweDMgICApIDw8IDE7IHYgPj4+PSBzaGlmdDsgciB8PSBzaGlmdDtcbiAgcmV0dXJuIHIgfCAodiA+PiAxKTtcbn1cblxuLy9Db21wdXRlcyBsb2cgYmFzZSAxMCBvZiB2XG5leHBvcnRzLmxvZzEwID0gZnVuY3Rpb24odikge1xuICByZXR1cm4gICh2ID49IDEwMDAwMDAwMDApID8gOSA6ICh2ID49IDEwMDAwMDAwMCkgPyA4IDogKHYgPj0gMTAwMDAwMDApID8gNyA6XG4gICAgICAgICAgKHYgPj0gMTAwMDAwMCkgPyA2IDogKHYgPj0gMTAwMDAwKSA/IDUgOiAodiA+PSAxMDAwMCkgPyA0IDpcbiAgICAgICAgICAodiA+PSAxMDAwKSA/IDMgOiAodiA+PSAxMDApID8gMiA6ICh2ID49IDEwKSA/IDEgOiAwO1xufVxuXG4vL0NvdW50cyBudW1iZXIgb2YgYml0c1xuZXhwb3J0cy5wb3BDb3VudCA9IGZ1bmN0aW9uKHYpIHtcbiAgdiA9IHYgLSAoKHYgPj4+IDEpICYgMHg1NTU1NTU1NSk7XG4gIHYgPSAodiAmIDB4MzMzMzMzMzMpICsgKCh2ID4+PiAyKSAmIDB4MzMzMzMzMzMpO1xuICByZXR1cm4gKCh2ICsgKHYgPj4+IDQpICYgMHhGMEYwRjBGKSAqIDB4MTAxMDEwMSkgPj4+IDI0O1xufVxuXG4vL0NvdW50cyBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3NcbmZ1bmN0aW9uIGNvdW50VHJhaWxpbmdaZXJvcyh2KSB7XG4gIHZhciBjID0gMzI7XG4gIHYgJj0gLXY7XG4gIGlmICh2KSBjLS07XG4gIGlmICh2ICYgMHgwMDAwRkZGRikgYyAtPSAxNjtcbiAgaWYgKHYgJiAweDAwRkYwMEZGKSBjIC09IDg7XG4gIGlmICh2ICYgMHgwRjBGMEYwRikgYyAtPSA0O1xuICBpZiAodiAmIDB4MzMzMzMzMzMpIGMgLT0gMjtcbiAgaWYgKHYgJiAweDU1NTU1NTU1KSBjIC09IDE7XG4gIHJldHVybiBjO1xufVxuZXhwb3J0cy5jb3VudFRyYWlsaW5nWmVyb3MgPSBjb3VudFRyYWlsaW5nWmVyb3M7XG5cbi8vUm91bmRzIHRvIG5leHQgcG93ZXIgb2YgMlxuZXhwb3J0cy5uZXh0UG93MiA9IGZ1bmN0aW9uKHYpIHtcbiAgdiArPSB2ID09PSAwO1xuICAtLXY7XG4gIHYgfD0gdiA+Pj4gMTtcbiAgdiB8PSB2ID4+PiAyO1xuICB2IHw9IHYgPj4+IDQ7XG4gIHYgfD0gdiA+Pj4gODtcbiAgdiB8PSB2ID4+PiAxNjtcbiAgcmV0dXJuIHYgKyAxO1xufVxuXG4vL1JvdW5kcyBkb3duIHRvIHByZXZpb3VzIHBvd2VyIG9mIDJcbmV4cG9ydHMucHJldlBvdzIgPSBmdW5jdGlvbih2KSB7XG4gIHYgfD0gdiA+Pj4gMTtcbiAgdiB8PSB2ID4+PiAyO1xuICB2IHw9IHYgPj4+IDQ7XG4gIHYgfD0gdiA+Pj4gODtcbiAgdiB8PSB2ID4+PiAxNjtcbiAgcmV0dXJuIHYgLSAodj4+PjEpO1xufVxuXG4vL0NvbXB1dGVzIHBhcml0eSBvZiB3b3JkXG5leHBvcnRzLnBhcml0eSA9IGZ1bmN0aW9uKHYpIHtcbiAgdiBePSB2ID4+PiAxNjtcbiAgdiBePSB2ID4+PiA4O1xuICB2IF49IHYgPj4+IDQ7XG4gIHYgJj0gMHhmO1xuICByZXR1cm4gKDB4Njk5NiA+Pj4gdikgJiAxO1xufVxuXG52YXIgUkVWRVJTRV9UQUJMRSA9IG5ldyBBcnJheSgyNTYpO1xuXG4oZnVuY3Rpb24odGFiKSB7XG4gIGZvcih2YXIgaT0wOyBpPDI1NjsgKytpKSB7XG4gICAgdmFyIHYgPSBpLCByID0gaSwgcyA9IDc7XG4gICAgZm9yICh2ID4+Pj0gMTsgdjsgdiA+Pj49IDEpIHtcbiAgICAgIHIgPDw9IDE7XG4gICAgICByIHw9IHYgJiAxO1xuICAgICAgLS1zO1xuICAgIH1cbiAgICB0YWJbaV0gPSAociA8PCBzKSAmIDB4ZmY7XG4gIH1cbn0pKFJFVkVSU0VfVEFCTEUpO1xuXG4vL1JldmVyc2UgYml0cyBpbiBhIDMyIGJpdCB3b3JkXG5leHBvcnRzLnJldmVyc2UgPSBmdW5jdGlvbih2KSB7XG4gIHJldHVybiAgKFJFVkVSU0VfVEFCTEVbIHYgICAgICAgICAmIDB4ZmZdIDw8IDI0KSB8XG4gICAgICAgICAgKFJFVkVSU0VfVEFCTEVbKHYgPj4+IDgpICAmIDB4ZmZdIDw8IDE2KSB8XG4gICAgICAgICAgKFJFVkVSU0VfVEFCTEVbKHYgPj4+IDE2KSAmIDB4ZmZdIDw8IDgpICB8XG4gICAgICAgICAgIFJFVkVSU0VfVEFCTEVbKHYgPj4+IDI0KSAmIDB4ZmZdO1xufVxuXG4vL0ludGVybGVhdmUgYml0cyBvZiAyIGNvb3JkaW5hdGVzIHdpdGggMTYgYml0cy4gIFVzZWZ1bCBmb3IgZmFzdCBxdWFkdHJlZSBjb2Rlc1xuZXhwb3J0cy5pbnRlcmxlYXZlMiA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgeCAmPSAweEZGRkY7XG4gIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gIHggPSAoeCB8ICh4IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgeSAmPSAweEZGRkY7XG4gIHkgPSAoeSB8ICh5IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gIHkgPSAoeSB8ICh5IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy9FeHRyYWN0cyB0aGUgbnRoIGludGVybGVhdmVkIGNvbXBvbmVudFxuZXhwb3J0cy5kZWludGVybGVhdmUyID0gZnVuY3Rpb24odiwgbikge1xuICB2ID0gKHYgPj4+IG4pICYgMHg1NTU1NTU1NTtcbiAgdiA9ICh2IHwgKHYgPj4+IDEpKSAgJiAweDMzMzMzMzMzO1xuICB2ID0gKHYgfCAodiA+Pj4gMikpICAmIDB4MEYwRjBGMEY7XG4gIHYgPSAodiB8ICh2ID4+PiA0KSkgICYgMHgwMEZGMDBGRjtcbiAgdiA9ICh2IHwgKHYgPj4+IDE2KSkgJiAweDAwMEZGRkY7XG4gIHJldHVybiAodiA8PCAxNikgPj4gMTY7XG59XG5cblxuLy9JbnRlcmxlYXZlIGJpdHMgb2YgMyBjb29yZGluYXRlcywgZWFjaCB3aXRoIDEwIGJpdHMuICBVc2VmdWwgZm9yIGZhc3Qgb2N0cmVlIGNvZGVzXG5leHBvcnRzLmludGVybGVhdmUzID0gZnVuY3Rpb24oeCwgeSwgeikge1xuICB4ICY9IDB4M0ZGO1xuICB4ICA9ICh4IHwgKHg8PDE2KSkgJiA0Mjc4MTkwMzM1O1xuICB4ICA9ICh4IHwgKHg8PDgpKSAgJiAyNTE3MTk2OTU7XG4gIHggID0gKHggfCAoeDw8NCkpICAmIDMyNzIzNTYwMzU7XG4gIHggID0gKHggfCAoeDw8MikpICAmIDEyMjcxMzM1MTM7XG5cbiAgeSAmPSAweDNGRjtcbiAgeSAgPSAoeSB8ICh5PDwxNikpICYgNDI3ODE5MDMzNTtcbiAgeSAgPSAoeSB8ICh5PDw4KSkgICYgMjUxNzE5Njk1O1xuICB5ICA9ICh5IHwgKHk8PDQpKSAgJiAzMjcyMzU2MDM1O1xuICB5ICA9ICh5IHwgKHk8PDIpKSAgJiAxMjI3MTMzNTEzO1xuICB4IHw9ICh5IDw8IDEpO1xuICBcbiAgeiAmPSAweDNGRjtcbiAgeiAgPSAoeiB8ICh6PDwxNikpICYgNDI3ODE5MDMzNTtcbiAgeiAgPSAoeiB8ICh6PDw4KSkgICYgMjUxNzE5Njk1O1xuICB6ICA9ICh6IHwgKHo8PDQpKSAgJiAzMjcyMzU2MDM1O1xuICB6ICA9ICh6IHwgKHo8PDIpKSAgJiAxMjI3MTMzNTEzO1xuICBcbiAgcmV0dXJuIHggfCAoeiA8PCAyKTtcbn1cblxuLy9FeHRyYWN0cyBudGggaW50ZXJsZWF2ZWQgY29tcG9uZW50IG9mIGEgMy10dXBsZVxuZXhwb3J0cy5kZWludGVybGVhdmUzID0gZnVuY3Rpb24odiwgbikge1xuICB2ID0gKHYgPj4+IG4pICAgICAgICYgMTIyNzEzMzUxMztcbiAgdiA9ICh2IHwgKHY+Pj4yKSkgICAmIDMyNzIzNTYwMzU7XG4gIHYgPSAodiB8ICh2Pj4+NCkpICAgJiAyNTE3MTk2OTU7XG4gIHYgPSAodiB8ICh2Pj4+OCkpICAgJiA0Mjc4MTkwMzM1O1xuICB2ID0gKHYgfCAodj4+PjE2KSkgICYgMHgzRkY7XG4gIHJldHVybiAodjw8MjIpPj4yMjtcbn1cblxuLy9Db21wdXRlcyBuZXh0IGNvbWJpbmF0aW9uIGluIGNvbGV4aWNvZ3JhcGhpYyBvcmRlciAodGhpcyBpcyBtaXN0YWtlbmx5IGNhbGxlZCBuZXh0UGVybXV0YXRpb24gb24gdGhlIGJpdCB0d2lkZGxpbmcgaGFja3MgcGFnZSlcbmV4cG9ydHMubmV4dENvbWJpbmF0aW9uID0gZnVuY3Rpb24odikge1xuICB2YXIgdCA9IHYgfCAodiAtIDEpO1xuICByZXR1cm4gKHQgKyAxKSB8ICgoKH50ICYgLX50KSAtIDEpID4+PiAoY291bnRUcmFpbGluZ1plcm9zKHYpICsgMSkpO1xufVxuXG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBib3hJbnRlcnNlY3RXcmFwcGVyXG5cbnZhciBwb29sID0gcmVxdWlyZSgndHlwZWRhcnJheS1wb29sJylcbnZhciBzd2VlcCA9IHJlcXVpcmUoJy4vbGliL3N3ZWVwJylcbnZhciBib3hJbnRlcnNlY3RJdGVyID0gcmVxdWlyZSgnLi9saWIvaW50ZXJzZWN0JylcblxuZnVuY3Rpb24gYm94RW1wdHkoZCwgYm94KSB7XG4gIGZvcih2YXIgaj0wOyBqPGQ7ICsraikge1xuICAgIGlmKCEoYm94W2pdIDw9IGJveFtqK2RdKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vVW5wYWNrIGJveGVzIGludG8gYSBmbGF0IHR5cGVkIGFycmF5LCByZW1vdmUgZW1wdHkgYm94ZXNcbmZ1bmN0aW9uIGNvbnZlcnRCb3hlcyhib3hlcywgZCwgZGF0YSwgaWRzKSB7XG4gIHZhciBwdHIgPSAwXG4gIHZhciBjb3VudCA9IDBcbiAgZm9yKHZhciBpPTAsIG49Ym94ZXMubGVuZ3RoOyBpPG47ICsraSkge1xuICAgIHZhciBiID0gYm94ZXNbaV1cbiAgICBpZihib3hFbXB0eShkLCBiKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgZm9yKHZhciBqPTA7IGo8MipkOyArK2opIHtcbiAgICAgIGRhdGFbcHRyKytdID0gYltqXVxuICAgIH1cbiAgICBpZHNbY291bnQrK10gPSBpXG4gIH1cbiAgcmV0dXJuIGNvdW50XG59XG5cbi8vUGVyZm9ybSB0eXBlIGNvbnZlcnNpb25zLCBjaGVjayBib3VuZHNcbmZ1bmN0aW9uIGJveEludGVyc2VjdChyZWQsIGJsdWUsIHZpc2l0LCBmdWxsKSB7XG4gIHZhciBuID0gcmVkLmxlbmd0aFxuICB2YXIgbSA9IGJsdWUubGVuZ3RoXG5cbiAgLy9JZiBlaXRoZXIgYXJyYXkgaXMgZW1wdHksIHRoZW4gd2UgY2FuIHNraXAgdGhpcyB3aG9sZSB0aGluZ1xuICBpZihuIDw9IDAgfHwgbSA8PSAwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvL0NvbXB1dGUgZGltZW5zaW9uLCBpZiBpdCBpcyAwIHRoZW4gd2Ugc2tpcFxuICB2YXIgZCA9IChyZWRbMF0ubGVuZ3RoKT4+PjFcbiAgaWYoZCA8PSAwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgcmV0dmFsXG5cbiAgLy9Db252ZXJ0IHJlZCBib3hlc1xuICB2YXIgcmVkTGlzdCAgPSBwb29sLm1hbGxvY0RvdWJsZSgyKmQqbilcbiAgdmFyIHJlZElkcyAgID0gcG9vbC5tYWxsb2NJbnQzMihuKVxuICBuID0gY29udmVydEJveGVzKHJlZCwgZCwgcmVkTGlzdCwgcmVkSWRzKVxuXG4gIGlmKG4gPiAwKSB7XG4gICAgaWYoZCA9PT0gMSAmJiBmdWxsKSB7XG4gICAgICAvL1NwZWNpYWwgY2FzZTogMWQgY29tcGxldGVcbiAgICAgIHN3ZWVwLmluaXQobilcbiAgICAgIHJldHZhbCA9IHN3ZWVwLnN3ZWVwQ29tcGxldGUoXG4gICAgICAgIGQsIHZpc2l0LCBcbiAgICAgICAgMCwgbiwgcmVkTGlzdCwgcmVkSWRzLFxuICAgICAgICAwLCBuLCByZWRMaXN0LCByZWRJZHMpXG4gICAgfSBlbHNlIHtcblxuICAgICAgLy9Db252ZXJ0IGJsdWUgYm94ZXNcbiAgICAgIHZhciBibHVlTGlzdCA9IHBvb2wubWFsbG9jRG91YmxlKDIqZCptKVxuICAgICAgdmFyIGJsdWVJZHMgID0gcG9vbC5tYWxsb2NJbnQzMihtKVxuICAgICAgbSA9IGNvbnZlcnRCb3hlcyhibHVlLCBkLCBibHVlTGlzdCwgYmx1ZUlkcylcblxuICAgICAgaWYobSA+IDApIHtcbiAgICAgICAgc3dlZXAuaW5pdChuK20pXG5cbiAgICAgICAgaWYoZCA9PT0gMSkge1xuICAgICAgICAgIC8vU3BlY2lhbCBjYXNlOiAxZCBiaXBhcnRpdGVcbiAgICAgICAgICByZXR2YWwgPSBzd2VlcC5zd2VlcEJpcGFydGl0ZShcbiAgICAgICAgICAgIGQsIHZpc2l0LCBcbiAgICAgICAgICAgIDAsIG4sIHJlZExpc3QsICByZWRJZHMsXG4gICAgICAgICAgICAwLCBtLCBibHVlTGlzdCwgYmx1ZUlkcylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvL0dlbmVyYWwgY2FzZTogIGQ+MVxuICAgICAgICAgIHJldHZhbCA9IGJveEludGVyc2VjdEl0ZXIoXG4gICAgICAgICAgICBkLCB2aXNpdCwgICAgZnVsbCxcbiAgICAgICAgICAgIG4sIHJlZExpc3QsICByZWRJZHMsXG4gICAgICAgICAgICBtLCBibHVlTGlzdCwgYmx1ZUlkcylcbiAgICAgICAgfVxuXG4gICAgICAgIHBvb2wuZnJlZShibHVlTGlzdClcbiAgICAgICAgcG9vbC5mcmVlKGJsdWVJZHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcG9vbC5mcmVlKHJlZExpc3QpXG4gICAgcG9vbC5mcmVlKHJlZElkcylcbiAgfVxuXG4gIHJldHVybiByZXR2YWxcbn1cblxuLy9Vc2VyLWZyaWVuZGx5IHdyYXBwZXIsIGhhbmRsZSBmdWxsIGlucHV0IGFuZCBuby12aXNpdG9yIGNhc2VzXG5mdW5jdGlvbiBib3hJbnRlcnNlY3RXcmFwcGVyKGFyZzAsIGFyZzEsIGFyZzIpIHtcbiAgdmFyIHJlc3VsdFxuICBzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJlc3VsdCA9IFtdXG4gICAgICBib3hJbnRlcnNlY3QoYXJnMCwgYXJnMCwgZnVuY3Rpb24oaSxqKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKFtpLCBqXSlcbiAgICAgIH0sIHRydWUpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgY2FzZSAyOlxuICAgICAgaWYodHlwZW9mIGFyZzEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIHZpc2l0ID0gYXJnMVxuICAgICAgICByZXR1cm4gYm94SW50ZXJzZWN0KGFyZzAsIGFyZzAsIHZpc2l0LCB0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gW11cbiAgICAgICAgYm94SW50ZXJzZWN0KGFyZzAsIGFyZzEsIGZ1bmN0aW9uKGksaikge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKFtpLCBqXSlcbiAgICAgICAgfSwgZmFsc2UpXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gYm94SW50ZXJzZWN0KGFyZzAsIGFyZzEsIGFyZzIsIGZhbHNlKVxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JveC1pbnRlcnNlY3Q6IEludmFsaWQgYXJndW1lbnRzJylcbiAgfVxufSIsIid1c2Ugc3RyaWN0J1xuXG52YXIgRElNRU5TSU9OICAgPSAnZCdcbnZhciBBWElTICAgICAgICA9ICdheCdcbnZhciBWSVNJVCAgICAgICA9ICd2didcbnZhciBGTElQICAgICAgICA9ICdmcCdcblxudmFyIEVMRU1fU0laRSAgID0gJ2VzJ1xuXG52YXIgUkVEX1NUQVJUICAgPSAncnMnXG52YXIgUkVEX0VORCAgICAgPSAncmUnXG52YXIgUkVEX0JPWEVTICAgPSAncmInXG52YXIgUkVEX0lOREVYICAgPSAncmknXG52YXIgUkVEX1BUUiAgICAgPSAncnAnXG5cbnZhciBCTFVFX1NUQVJUICA9ICdicydcbnZhciBCTFVFX0VORCAgICA9ICdiZSdcbnZhciBCTFVFX0JPWEVTICA9ICdiYidcbnZhciBCTFVFX0lOREVYICA9ICdiaSdcbnZhciBCTFVFX1BUUiAgICA9ICdicCdcblxudmFyIFJFVFZBTCAgICAgID0gJ3J2J1xuXG52YXIgSU5ORVJfTEFCRUwgPSAnUSdcblxudmFyIEFSR1MgPSBbXG4gIERJTUVOU0lPTixcbiAgQVhJUyxcbiAgVklTSVQsXG4gIFJFRF9TVEFSVCxcbiAgUkVEX0VORCxcbiAgUkVEX0JPWEVTLFxuICBSRURfSU5ERVgsXG4gIEJMVUVfU1RBUlQsXG4gIEJMVUVfRU5ELFxuICBCTFVFX0JPWEVTLFxuICBCTFVFX0lOREVYXG5dXG5cbmZ1bmN0aW9uIGdlbmVyYXRlQnJ1dGVGb3JjZShyZWRNYWpvciwgZmxpcCwgZnVsbCkge1xuICB2YXIgZnVuY05hbWUgPSAnYnJ1dGVGb3JjZScgKyBcbiAgICAocmVkTWFqb3IgPyAnUmVkJyA6ICdCbHVlJykgKyBcbiAgICAoZmxpcCA/ICdGbGlwJyA6ICcnKSArXG4gICAgKGZ1bGwgPyAnRnVsbCcgOiAnJylcblxuICB2YXIgY29kZSA9IFsnZnVuY3Rpb24gJywgZnVuY05hbWUsICcoJywgQVJHUy5qb2luKCksICcpeycsXG4gICAgJ3ZhciAnLCBFTEVNX1NJWkUsICc9MionLCBESU1FTlNJT04sICc7J11cblxuICB2YXIgcmVkTG9vcCA9IFxuICAgICdmb3IodmFyIGk9JyArIFJFRF9TVEFSVCArICcsJyArIFJFRF9QVFIgKyAnPScgKyBFTEVNX1NJWkUgKyAnKicgKyBSRURfU1RBUlQgKyAnOycgK1xuICAgICAgICAnaTwnICsgUkVEX0VORCArJzsnICtcbiAgICAgICAgJysraSwnICsgUkVEX1BUUiArICcrPScgKyBFTEVNX1NJWkUgKyAnKXsnICtcbiAgICAgICAgJ3ZhciB4MD0nICsgUkVEX0JPWEVTICsgJ1snICsgQVhJUyArICcrJyArIFJFRF9QVFIgKyAnXSwnICtcbiAgICAgICAgICAgICd4MT0nICsgUkVEX0JPWEVTICsgJ1snICsgQVhJUyArICcrJyArIFJFRF9QVFIgKyAnKycgKyBESU1FTlNJT04gKyAnXSwnICtcbiAgICAgICAgICAgICd4aT0nICsgUkVEX0lOREVYICsgJ1tpXTsnXG5cbiAgdmFyIGJsdWVMb29wID0gXG4gICAgJ2Zvcih2YXIgaj0nICsgQkxVRV9TVEFSVCArICcsJyArIEJMVUVfUFRSICsgJz0nICsgRUxFTV9TSVpFICsgJyonICsgQkxVRV9TVEFSVCArICc7JyArXG4gICAgICAgICdqPCcgKyBCTFVFX0VORCArICc7JyArXG4gICAgICAgICcrK2osJyArIEJMVUVfUFRSICsgJys9JyArIEVMRU1fU0laRSArICcpeycgK1xuICAgICAgICAndmFyIHkwPScgKyBCTFVFX0JPWEVTICsgJ1snICsgQVhJUyArICcrJyArIEJMVUVfUFRSICsgJ10sJyArXG4gICAgICAgICAgICAoZnVsbCA/ICd5MT0nICsgQkxVRV9CT1hFUyArICdbJyArIEFYSVMgKyAnKycgKyBCTFVFX1BUUiArICcrJyArIERJTUVOU0lPTiArICddLCcgOiAnJykgK1xuICAgICAgICAgICAgJ3lpPScgKyBCTFVFX0lOREVYICsgJ1tqXTsnXG5cbiAgaWYocmVkTWFqb3IpIHtcbiAgICBjb2RlLnB1c2gocmVkTG9vcCwgSU5ORVJfTEFCRUwsICc6JywgYmx1ZUxvb3ApXG4gIH0gZWxzZSB7XG4gICAgY29kZS5wdXNoKGJsdWVMb29wLCBJTk5FUl9MQUJFTCwgJzonLCByZWRMb29wKVxuICB9XG5cbiAgaWYoZnVsbCkge1xuICAgIGNvZGUucHVzaCgnaWYoeTE8eDB8fHgxPHkwKWNvbnRpbnVlOycpXG4gIH0gZWxzZSBpZihmbGlwKSB7XG4gICAgY29kZS5wdXNoKCdpZih5MDw9eDB8fHgxPHkwKWNvbnRpbnVlOycpXG4gIH0gZWxzZSB7XG4gICAgY29kZS5wdXNoKCdpZih5MDx4MHx8eDE8eTApY29udGludWU7JylcbiAgfVxuXG4gIGNvZGUucHVzaCgnZm9yKHZhciBrPScrQVhJUysnKzE7azwnK0RJTUVOU0lPTisnOysrayl7JytcbiAgICAndmFyIHIwPScrUkVEX0JPWEVTKydbaysnK1JFRF9QVFIrJ10sJytcbiAgICAgICAgJ3IxPScrUkVEX0JPWEVTKydbaysnK0RJTUVOU0lPTisnKycrUkVEX1BUUisnXSwnK1xuICAgICAgICAnYjA9JytCTFVFX0JPWEVTKydbaysnK0JMVUVfUFRSKyddLCcrXG4gICAgICAgICdiMT0nK0JMVUVfQk9YRVMrJ1trKycrRElNRU5TSU9OKycrJytCTFVFX1BUUisnXTsnK1xuICAgICAgJ2lmKHIxPGIwfHxiMTxyMCljb250aW51ZSAnICsgSU5ORVJfTEFCRUwgKyAnO30nICtcbiAgICAgICd2YXIgJyArIFJFVFZBTCArICc9JyArIFZJU0lUICsgJygnKVxuXG4gIGlmKGZsaXApIHtcbiAgICBjb2RlLnB1c2goJ3lpLHhpJylcbiAgfSBlbHNlIHtcbiAgICBjb2RlLnB1c2goJ3hpLHlpJylcbiAgfVxuXG4gIGNvZGUucHVzaCgnKTtpZignICsgUkVUVkFMICsgJyE9PXZvaWQgMClyZXR1cm4gJyArIFJFVFZBTCArICc7fX19JylcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGZ1bmNOYW1lLCBcbiAgICBjb2RlOiBjb2RlLmpvaW4oJycpXG4gIH1cbn1cblxuZnVuY3Rpb24gYnJ1dGVGb3JjZVBsYW5uZXIoZnVsbCkge1xuICB2YXIgZnVuY05hbWUgPSAnYnJ1dGVGb3JjZScgKyAoZnVsbCA/ICdGdWxsJyA6ICdQYXJ0aWFsJylcbiAgdmFyIHByZWZpeCA9IFtdXG4gIHZhciBmYXJncyA9IEFSR1Muc2xpY2UoKVxuICBpZighZnVsbCkge1xuICAgIGZhcmdzLnNwbGljZSgzLCAwLCBGTElQKVxuICB9XG5cbiAgdmFyIGNvZGUgPSBbJ2Z1bmN0aW9uICcgKyBmdW5jTmFtZSArICcoJyArIGZhcmdzLmpvaW4oKSArICcpeyddXG5cbiAgZnVuY3Rpb24gaW52b2tlKHJlZE1ham9yLCBmbGlwKSB7XG4gICAgdmFyIHJlcyA9IGdlbmVyYXRlQnJ1dGVGb3JjZShyZWRNYWpvciwgZmxpcCwgZnVsbClcbiAgICBwcmVmaXgucHVzaChyZXMuY29kZSlcbiAgICBjb2RlLnB1c2goJ3JldHVybiAnICsgcmVzLm5hbWUgKyAnKCcgKyBBUkdTLmpvaW4oKSArICcpOycpXG4gIH1cblxuICBjb2RlLnB1c2goJ2lmKCcgKyBSRURfRU5EICsgJy0nICsgUkVEX1NUQVJUICsgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgQkxVRV9FTkQgKyAnLScgKyBCTFVFX1NUQVJUICsgJyl7JylcblxuICBpZihmdWxsKSB7XG4gICAgaW52b2tlKHRydWUsIGZhbHNlKVxuICAgIGNvZGUucHVzaCgnfWVsc2V7JylcbiAgICBpbnZva2UoZmFsc2UsIGZhbHNlKVxuICB9IGVsc2Uge1xuICAgIGNvZGUucHVzaCgnaWYoJyArIEZMSVAgKyAnKXsnKVxuICAgIGludm9rZSh0cnVlLCB0cnVlKVxuICAgIGNvZGUucHVzaCgnfWVsc2V7JylcbiAgICBpbnZva2UodHJ1ZSwgZmFsc2UpXG4gICAgY29kZS5wdXNoKCd9fWVsc2V7aWYoJyArIEZMSVAgKyAnKXsnKVxuICAgIGludm9rZShmYWxzZSwgdHJ1ZSlcbiAgICBjb2RlLnB1c2goJ31lbHNleycpXG4gICAgaW52b2tlKGZhbHNlLCBmYWxzZSlcbiAgICBjb2RlLnB1c2goJ30nKVxuICB9XG4gIGNvZGUucHVzaCgnfX1yZXR1cm4gJyArIGZ1bmNOYW1lKVxuXG4gIHZhciBjb2RlU3RyID0gcHJlZml4LmpvaW4oJycpICsgY29kZS5qb2luKCcnKVxuICB2YXIgcHJvYyA9IG5ldyBGdW5jdGlvbihjb2RlU3RyKVxuICByZXR1cm4gcHJvYygpXG59XG5cblxuZXhwb3J0cy5wYXJ0aWFsID0gYnJ1dGVGb3JjZVBsYW5uZXIoZmFsc2UpXG5leHBvcnRzLmZ1bGwgICAgPSBicnV0ZUZvcmNlUGxhbm5lcih0cnVlKSIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJveEludGVyc2VjdEl0ZXJcblxudmFyIHBvb2wgPSByZXF1aXJlKCd0eXBlZGFycmF5LXBvb2wnKVxudmFyIGJpdHMgPSByZXF1aXJlKCdiaXQtdHdpZGRsZScpXG52YXIgYnJ1dGVGb3JjZSA9IHJlcXVpcmUoJy4vYnJ1dGUnKVxudmFyIGJydXRlRm9yY2VQYXJ0aWFsID0gYnJ1dGVGb3JjZS5wYXJ0aWFsXG52YXIgYnJ1dGVGb3JjZUZ1bGwgPSBicnV0ZUZvcmNlLmZ1bGxcbnZhciBzd2VlcCA9IHJlcXVpcmUoJy4vc3dlZXAnKVxudmFyIGZpbmRNZWRpYW4gPSByZXF1aXJlKCcuL21lZGlhbicpXG52YXIgZ2VuUGFydGl0aW9uID0gcmVxdWlyZSgnLi9wYXJ0aXRpb24nKVxuXG4vL1R3aWRkbGUgcGFyYW1ldGVyc1xudmFyIEJSVVRFX0ZPUkNFX0NVVE9GRiAgICA9IDEyOCAgICAgICAvL0N1dCBvZmYgZm9yIGJydXRlIGZvcmNlIHNlYXJjaFxudmFyIFNDQU5fQ1VUT0ZGICAgICAgICAgICA9ICgxPDwyMikgICAvL0N1dCBvZmYgZm9yIHR3byB3YXkgc2NhblxudmFyIFNDQU5fQ09NUExFVEVfQ1VUT0ZGICA9ICgxPDwyMikgIFxuXG4vL1BhcnRpdGlvbiBmdW5jdGlvbnNcbnZhciBwYXJ0aXRpb25JbnRlcmlvckNvbnRhaW5zSW50ZXJ2YWwgPSBnZW5QYXJ0aXRpb24oXG4gICchKGxvPj1wMCkmJiEocDE+PWhpKScsIFxuICBbJ3AwJywgJ3AxJ10pXG5cbnZhciBwYXJ0aXRpb25TdGFydEVxdWFsID0gZ2VuUGFydGl0aW9uKFxuICAnbG89PT1wMCcsXG4gIFsncDAnXSlcblxudmFyIHBhcnRpdGlvblN0YXJ0TGVzc1RoYW4gPSBnZW5QYXJ0aXRpb24oXG4gICdsbzxwMCcsXG4gIFsncDAnXSlcblxudmFyIHBhcnRpdGlvbkVuZExlc3NUaGFuRXF1YWwgPSBnZW5QYXJ0aXRpb24oXG4gICdoaTw9cDAnLFxuICBbJ3AwJ10pXG5cbnZhciBwYXJ0aXRpb25Db250YWluc1BvaW50ID0gZ2VuUGFydGl0aW9uKFxuICAnbG88PXAwJiZwMDw9aGknLFxuICBbJ3AwJ10pXG5cbnZhciBwYXJ0aXRpb25Db250YWluc1BvaW50UHJvcGVyID0gZ2VuUGFydGl0aW9uKFxuICAnbG88cDAmJnAwPD1oaScsXG4gIFsncDAnXSlcblxuLy9GcmFtZSBzaXplIGZvciBpdGVyYXRpdmUgbG9vcFxudmFyIElGUkFNRV9TSVpFID0gNlxudmFyIERGUkFNRV9TSVpFID0gMlxuXG4vL0RhdGEgZm9yIGJveCBzdGF0Y2tcbnZhciBJTklUX0NBUEFDSVRZID0gMTAyNFxudmFyIEJPWF9JU1RBQ0sgID0gcG9vbC5tYWxsb2NJbnQzMihJTklUX0NBUEFDSVRZKVxudmFyIEJPWF9EU1RBQ0sgID0gcG9vbC5tYWxsb2NEb3VibGUoSU5JVF9DQVBBQ0lUWSlcblxuLy9Jbml0aWFsaXplIGl0ZXJhdGl2ZSBsb29wIHF1ZXVlXG5mdW5jdGlvbiBpdGVySW5pdChkLCBjb3VudCkge1xuICB2YXIgbGV2ZWxzID0gKDggKiBiaXRzLmxvZzIoY291bnQrMSkgKiAoZCsxKSl8MFxuICB2YXIgbWF4SW50cyA9IGJpdHMubmV4dFBvdzIoSUZSQU1FX1NJWkUqbGV2ZWxzKVxuICBpZihCT1hfSVNUQUNLLmxlbmd0aCA8IG1heEludHMpIHtcbiAgICBwb29sLmZyZWUoQk9YX0lTVEFDSylcbiAgICBCT1hfSVNUQUNLID0gcG9vbC5tYWxsb2NJbnQzMihtYXhJbnRzKVxuICB9XG4gIHZhciBtYXhEb3VibGVzID0gYml0cy5uZXh0UG93MihERlJBTUVfU0laRSpsZXZlbHMpXG4gIGlmKEJPWF9EU1RBQ0sgPCBtYXhEb3VibGVzKSB7XG4gICAgcG9vbC5mcmVlKEJPWF9EU1RBQ0spXG4gICAgQk9YX0RTVEFDSyA9IHBvb2wubWFsbG9jRG91YmxlKG1heERvdWJsZXMpXG4gIH1cbn1cblxuLy9BcHBlbmQgaXRlbSB0byBxdWV1ZVxuZnVuY3Rpb24gaXRlclB1c2gocHRyLFxuICBheGlzLCBcbiAgcmVkU3RhcnQsIHJlZEVuZCwgXG4gIGJsdWVTdGFydCwgYmx1ZUVuZCwgXG4gIHN0YXRlLCBcbiAgbG8sIGhpKSB7XG5cbiAgdmFyIGlwdHIgPSBJRlJBTUVfU0laRSAqIHB0clxuICBCT1hfSVNUQUNLW2lwdHJdICAgPSBheGlzXG4gIEJPWF9JU1RBQ0tbaXB0cisxXSA9IHJlZFN0YXJ0XG4gIEJPWF9JU1RBQ0tbaXB0cisyXSA9IHJlZEVuZFxuICBCT1hfSVNUQUNLW2lwdHIrM10gPSBibHVlU3RhcnRcbiAgQk9YX0lTVEFDS1tpcHRyKzRdID0gYmx1ZUVuZFxuICBCT1hfSVNUQUNLW2lwdHIrNV0gPSBzdGF0ZVxuXG4gIHZhciBkcHRyID0gREZSQU1FX1NJWkUgKiBwdHJcbiAgQk9YX0RTVEFDS1tkcHRyXSAgID0gbG9cbiAgQk9YX0RTVEFDS1tkcHRyKzFdID0gaGlcbn1cblxuLy9TcGVjaWFsIGNhc2U6ICBJbnRlcnNlY3Qgc2luZ2xlIHBvaW50IHdpdGggbGlzdCBvZiBpbnRlcnZhbHNcbmZ1bmN0aW9uIG9uZVBvaW50UGFydGlhbChcbiAgZCwgYXhpcywgdmlzaXQsIGZsaXAsXG4gIHJlZFN0YXJ0LCByZWRFbmQsIHJlZCwgcmVkSW5kZXgsXG4gIGJsdWVPZmZzZXQsIGJsdWUsIGJsdWVJZCkge1xuXG4gIHZhciBlbGVtU2l6ZSA9IDIgKiBkXG4gIHZhciBibHVlUHRyICA9IGJsdWVPZmZzZXQgKiBlbGVtU2l6ZVxuICB2YXIgYmx1ZVggICAgPSBibHVlW2JsdWVQdHIgKyBheGlzXVxuXG5yZWRfbG9vcDpcbiAgZm9yKHZhciBpPXJlZFN0YXJ0LCByZWRQdHI9cmVkU3RhcnQqZWxlbVNpemU7IGk8cmVkRW5kOyArK2ksIHJlZFB0cis9ZWxlbVNpemUpIHtcbiAgICB2YXIgcjAgPSByZWRbcmVkUHRyK2F4aXNdXG4gICAgdmFyIHIxID0gcmVkW3JlZFB0citheGlzK2RdXG4gICAgaWYoYmx1ZVggPCByMCB8fCByMSA8IGJsdWVYKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZihmbGlwICYmIGJsdWVYID09PSByMCkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgdmFyIHJlZElkID0gcmVkSW5kZXhbaV1cbiAgICBmb3IodmFyIGo9YXhpcysxOyBqPGQ7ICsraikge1xuICAgICAgdmFyIHIwID0gcmVkW3JlZFB0citqXVxuICAgICAgdmFyIHIxID0gcmVkW3JlZFB0citqK2RdXG4gICAgICB2YXIgYjAgPSBibHVlW2JsdWVQdHIral1cbiAgICAgIHZhciBiMSA9IGJsdWVbYmx1ZVB0citqK2RdXG4gICAgICBpZihyMSA8IGIwIHx8IGIxIDwgcjApIHtcbiAgICAgICAgY29udGludWUgcmVkX2xvb3BcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHJldHZhbFxuICAgIGlmKGZsaXApIHtcbiAgICAgIHJldHZhbCA9IHZpc2l0KGJsdWVJZCwgcmVkSWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHZhbCA9IHZpc2l0KHJlZElkLCBibHVlSWQpXG4gICAgfVxuICAgIGlmKHJldHZhbCAhPT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gcmV0dmFsXG4gICAgfVxuICB9XG59XG5cbi8vU3BlY2lhbCBjYXNlOiAgSW50ZXJzZWN0IG9uZSBwb2ludCB3aXRoIGxpc3Qgb2YgaW50ZXJ2YWxzXG5mdW5jdGlvbiBvbmVQb2ludEZ1bGwoXG4gIGQsIGF4aXMsIHZpc2l0LFxuICByZWRTdGFydCwgcmVkRW5kLCByZWQsIHJlZEluZGV4LFxuICBibHVlT2Zmc2V0LCBibHVlLCBibHVlSWQpIHtcblxuICB2YXIgZWxlbVNpemUgPSAyICogZFxuICB2YXIgYmx1ZVB0ciAgPSBibHVlT2Zmc2V0ICogZWxlbVNpemVcbiAgdmFyIGJsdWVYICAgID0gYmx1ZVtibHVlUHRyICsgYXhpc11cblxucmVkX2xvb3A6XG4gIGZvcih2YXIgaT1yZWRTdGFydCwgcmVkUHRyPXJlZFN0YXJ0KmVsZW1TaXplOyBpPHJlZEVuZDsgKytpLCByZWRQdHIrPWVsZW1TaXplKSB7XG4gICAgdmFyIHJlZElkID0gcmVkSW5kZXhbaV1cbiAgICBpZihyZWRJZCA9PT0gYmx1ZUlkKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICB2YXIgcjAgPSByZWRbcmVkUHRyK2F4aXNdXG4gICAgdmFyIHIxID0gcmVkW3JlZFB0citheGlzK2RdXG4gICAgaWYoYmx1ZVggPCByMCB8fCByMSA8IGJsdWVYKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBmb3IodmFyIGo9YXhpcysxOyBqPGQ7ICsraikge1xuICAgICAgdmFyIHIwID0gcmVkW3JlZFB0citqXVxuICAgICAgdmFyIHIxID0gcmVkW3JlZFB0citqK2RdXG4gICAgICB2YXIgYjAgPSBibHVlW2JsdWVQdHIral1cbiAgICAgIHZhciBiMSA9IGJsdWVbYmx1ZVB0citqK2RdXG4gICAgICBpZihyMSA8IGIwIHx8IGIxIDwgcjApIHtcbiAgICAgICAgY29udGludWUgcmVkX2xvb3BcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHJldHZhbCA9IHZpc2l0KHJlZElkLCBibHVlSWQpXG4gICAgaWYocmV0dmFsICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiByZXR2YWxcbiAgICB9XG4gIH1cbn1cblxuLy9UaGUgbWFpbiBib3ggaW50ZXJzZWN0aW9uIHJvdXRpbmVcbmZ1bmN0aW9uIGJveEludGVyc2VjdEl0ZXIoXG4gIGQsIHZpc2l0LCBpbml0RnVsbCxcbiAgeFNpemUsIHhCb3hlcywgeEluZGV4LFxuICB5U2l6ZSwgeUJveGVzLCB5SW5kZXgpIHtcblxuICAvL1Jlc2VydmUgbWVtb3J5IGZvciBzdGFja1xuICBpdGVySW5pdChkLCB4U2l6ZSArIHlTaXplKVxuXG4gIHZhciB0b3AgID0gMFxuICB2YXIgZWxlbVNpemUgPSAyICogZFxuICB2YXIgcmV0dmFsXG5cbiAgaXRlclB1c2godG9wKyssXG4gICAgICAwLFxuICAgICAgMCwgeFNpemUsXG4gICAgICAwLCB5U2l6ZSxcbiAgICAgIGluaXRGdWxsID8gMTYgOiAwLCBcbiAgICAgIC1JbmZpbml0eSwgSW5maW5pdHkpXG4gIGlmKCFpbml0RnVsbCkge1xuICAgIGl0ZXJQdXNoKHRvcCsrLFxuICAgICAgMCxcbiAgICAgIDAsIHlTaXplLFxuICAgICAgMCwgeFNpemUsXG4gICAgICAxLCBcbiAgICAgIC1JbmZpbml0eSwgSW5maW5pdHkpXG4gIH1cblxuICB3aGlsZSh0b3AgPiAwKSB7XG4gICAgdG9wICAtPSAxXG5cbiAgICB2YXIgaXB0ciA9IHRvcCAqIElGUkFNRV9TSVpFXG4gICAgdmFyIGF4aXMgICAgICA9IEJPWF9JU1RBQ0tbaXB0cl1cbiAgICB2YXIgcmVkU3RhcnQgID0gQk9YX0lTVEFDS1tpcHRyKzFdXG4gICAgdmFyIHJlZEVuZCAgICA9IEJPWF9JU1RBQ0tbaXB0cisyXVxuICAgIHZhciBibHVlU3RhcnQgPSBCT1hfSVNUQUNLW2lwdHIrM11cbiAgICB2YXIgYmx1ZUVuZCAgID0gQk9YX0lTVEFDS1tpcHRyKzRdXG4gICAgdmFyIHN0YXRlICAgICA9IEJPWF9JU1RBQ0tbaXB0cis1XVxuXG4gICAgdmFyIGRwdHIgPSB0b3AgKiBERlJBTUVfU0laRVxuICAgIHZhciBsbyAgICAgICAgPSBCT1hfRFNUQUNLW2RwdHJdXG4gICAgdmFyIGhpICAgICAgICA9IEJPWF9EU1RBQ0tbZHB0cisxXVxuXG4gICAgLy9VbnBhY2sgc3RhdGUgaW5mb1xuICAgIHZhciBmbGlwICAgICAgPSAoc3RhdGUgJiAxKVxuICAgIHZhciBmdWxsICAgICAgPSAhIShzdGF0ZSAmIDE2KVxuXG4gICAgLy9VbnBhY2sgaW5kaWNlc1xuICAgIHZhciByZWQgICAgICAgPSB4Qm94ZXNcbiAgICB2YXIgcmVkSW5kZXggID0geEluZGV4XG4gICAgdmFyIGJsdWUgICAgICA9IHlCb3hlc1xuICAgIHZhciBibHVlSW5kZXggPSB5SW5kZXhcbiAgICBpZihmbGlwKSB7XG4gICAgICByZWQgICAgICAgICA9IHlCb3hlc1xuICAgICAgcmVkSW5kZXggICAgPSB5SW5kZXhcbiAgICAgIGJsdWUgICAgICAgID0geEJveGVzXG4gICAgICBibHVlSW5kZXggICA9IHhJbmRleFxuICAgIH1cblxuICAgIGlmKHN0YXRlICYgMikge1xuICAgICAgcmVkRW5kID0gcGFydGl0aW9uU3RhcnRMZXNzVGhhbihcbiAgICAgICAgZCwgYXhpcyxcbiAgICAgICAgcmVkU3RhcnQsIHJlZEVuZCwgcmVkLCByZWRJbmRleCxcbiAgICAgICAgaGkpXG4gICAgICBpZihyZWRTdGFydCA+PSByZWRFbmQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoc3RhdGUgJiA0KSB7XG4gICAgICByZWRTdGFydCA9IHBhcnRpdGlvbkVuZExlc3NUaGFuRXF1YWwoXG4gICAgICAgIGQsIGF4aXMsXG4gICAgICAgIHJlZFN0YXJ0LCByZWRFbmQsIHJlZCwgcmVkSW5kZXgsXG4gICAgICAgIGxvKVxuICAgICAgaWYocmVkU3RhcnQgPj0gcmVkRW5kKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHZhciByZWRDb3VudCAgPSByZWRFbmQgIC0gcmVkU3RhcnRcbiAgICB2YXIgYmx1ZUNvdW50ID0gYmx1ZUVuZCAtIGJsdWVTdGFydFxuXG4gICAgaWYoZnVsbCkge1xuICAgICAgaWYoZCAqIHJlZENvdW50ICogKHJlZENvdW50ICsgYmx1ZUNvdW50KSA8IFNDQU5fQ09NUExFVEVfQ1VUT0ZGKSB7XG4gICAgICAgIHJldHZhbCA9IHN3ZWVwLnNjYW5Db21wbGV0ZShcbiAgICAgICAgICBkLCBheGlzLCB2aXNpdCwgXG4gICAgICAgICAgcmVkU3RhcnQsIHJlZEVuZCwgcmVkLCByZWRJbmRleCxcbiAgICAgICAgICBibHVlU3RhcnQsIGJsdWVFbmQsIGJsdWUsIGJsdWVJbmRleClcbiAgICAgICAgaWYocmV0dmFsICE9PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4gcmV0dmFsXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYoZCAqIE1hdGgubWluKHJlZENvdW50LCBibHVlQ291bnQpIDwgQlJVVEVfRk9SQ0VfQ1VUT0ZGKSB7XG4gICAgICAgIC8vSWYgaW5wdXQgc21hbGwsIHRoZW4gdXNlIGJydXRlIGZvcmNlXG4gICAgICAgIHJldHZhbCA9IGJydXRlRm9yY2VQYXJ0aWFsKFxuICAgICAgICAgICAgZCwgYXhpcywgdmlzaXQsIGZsaXAsXG4gICAgICAgICAgICByZWRTdGFydCwgIHJlZEVuZCwgIHJlZCwgIHJlZEluZGV4LFxuICAgICAgICAgICAgYmx1ZVN0YXJ0LCBibHVlRW5kLCBibHVlLCBibHVlSW5kZXgpXG4gICAgICAgIGlmKHJldHZhbCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHZhbFxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYoZCAqIHJlZENvdW50ICogYmx1ZUNvdW50IDwgU0NBTl9DVVRPRkYpIHtcbiAgICAgICAgLy9JZiBpbnB1dCBtZWRpdW0gc2l6ZWQsIHRoZW4gdXNlIHN3ZWVwIGFuZCBwcnVuZVxuICAgICAgICByZXR2YWwgPSBzd2VlcC5zY2FuQmlwYXJ0aXRlKFxuICAgICAgICAgIGQsIGF4aXMsIHZpc2l0LCBmbGlwLCBcbiAgICAgICAgICByZWRTdGFydCwgcmVkRW5kLCByZWQsIHJlZEluZGV4LFxuICAgICAgICAgIGJsdWVTdGFydCwgYmx1ZUVuZCwgYmx1ZSwgYmx1ZUluZGV4KVxuICAgICAgICBpZihyZXR2YWwgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybiByZXR2YWxcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvL0ZpcnN0LCBmaW5kIGFsbCByZWQgaW50ZXJ2YWxzIHdob3NlIGludGVyaW9yIGNvbnRhaW5zIChsbyxoaSlcbiAgICB2YXIgcmVkMCA9IHBhcnRpdGlvbkludGVyaW9yQ29udGFpbnNJbnRlcnZhbChcbiAgICAgIGQsIGF4aXMsIFxuICAgICAgcmVkU3RhcnQsIHJlZEVuZCwgcmVkLCByZWRJbmRleCxcbiAgICAgIGxvLCBoaSlcblxuICAgIC8vTG93ZXIgZGltZW5zaW9uYWwgY2FzZVxuICAgIGlmKHJlZFN0YXJ0IDwgcmVkMCkge1xuXG4gICAgICBpZihkICogKHJlZDAgLSByZWRTdGFydCkgPCBCUlVURV9GT1JDRV9DVVRPRkYpIHtcbiAgICAgICAgLy9TcGVjaWFsIGNhc2UgZm9yIHNtYWxsIGlucHV0czogdXNlIGJydXRlIGZvcmNlXG4gICAgICAgIHJldHZhbCA9IGJydXRlRm9yY2VGdWxsKFxuICAgICAgICAgIGQsIGF4aXMrMSwgdmlzaXQsXG4gICAgICAgICAgcmVkU3RhcnQsIHJlZDAsIHJlZCwgcmVkSW5kZXgsXG4gICAgICAgICAgYmx1ZVN0YXJ0LCBibHVlRW5kLCBibHVlLCBibHVlSW5kZXgpXG4gICAgICAgIGlmKHJldHZhbCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHZhbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYoYXhpcyA9PT0gZC0yKSB7XG4gICAgICAgIGlmKGZsaXApIHtcbiAgICAgICAgICByZXR2YWwgPSBzd2VlcC5zd2VlcEJpcGFydGl0ZShcbiAgICAgICAgICAgIGQsIHZpc2l0LFxuICAgICAgICAgICAgYmx1ZVN0YXJ0LCBibHVlRW5kLCBibHVlLCBibHVlSW5kZXgsXG4gICAgICAgICAgICByZWRTdGFydCwgcmVkMCwgcmVkLCByZWRJbmRleClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR2YWwgPSBzd2VlcC5zd2VlcEJpcGFydGl0ZShcbiAgICAgICAgICAgIGQsIHZpc2l0LFxuICAgICAgICAgICAgcmVkU3RhcnQsIHJlZDAsIHJlZCwgcmVkSW5kZXgsXG4gICAgICAgICAgICBibHVlU3RhcnQsIGJsdWVFbmQsIGJsdWUsIGJsdWVJbmRleClcbiAgICAgICAgfVxuICAgICAgICBpZihyZXR2YWwgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybiByZXR2YWxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlclB1c2godG9wKyssXG4gICAgICAgICAgYXhpcysxLFxuICAgICAgICAgIHJlZFN0YXJ0LCByZWQwLFxuICAgICAgICAgIGJsdWVTdGFydCwgYmx1ZUVuZCxcbiAgICAgICAgICBmbGlwLFxuICAgICAgICAgIC1JbmZpbml0eSwgSW5maW5pdHkpXG4gICAgICAgIGl0ZXJQdXNoKHRvcCsrLFxuICAgICAgICAgIGF4aXMrMSxcbiAgICAgICAgICBibHVlU3RhcnQsIGJsdWVFbmQsXG4gICAgICAgICAgcmVkU3RhcnQsIHJlZDAsXG4gICAgICAgICAgZmxpcF4xLFxuICAgICAgICAgIC1JbmZpbml0eSwgSW5maW5pdHkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9EaXZpZGUgYW5kIGNvbnF1ZXIgcGhhc2VcbiAgICBpZihyZWQwIDwgcmVkRW5kKSB7XG5cbiAgICAgIC8vQ3V0IGJsdWUgaW50byAzIHBhcnRzOlxuICAgICAgLy9cbiAgICAgIC8vICBQb2ludHMgPCBtaWQgcG9pbnRcbiAgICAgIC8vICBQb2ludHMgPSBtaWQgcG9pbnRcbiAgICAgIC8vICBQb2ludHMgPiBtaWQgcG9pbnRcbiAgICAgIC8vXG4gICAgICB2YXIgYmx1ZTAgPSBmaW5kTWVkaWFuKFxuICAgICAgICBkLCBheGlzLCBcbiAgICAgICAgYmx1ZVN0YXJ0LCBibHVlRW5kLCBibHVlLCBibHVlSW5kZXgpXG4gICAgICB2YXIgbWlkID0gYmx1ZVtlbGVtU2l6ZSAqIGJsdWUwICsgYXhpc11cbiAgICAgIHZhciBibHVlMSA9IHBhcnRpdGlvblN0YXJ0RXF1YWwoXG4gICAgICAgIGQsIGF4aXMsXG4gICAgICAgIGJsdWUwLCBibHVlRW5kLCBibHVlLCBibHVlSW5kZXgsXG4gICAgICAgIG1pZClcblxuICAgICAgLy9SaWdodCBjYXNlXG4gICAgICBpZihibHVlMSA8IGJsdWVFbmQpIHtcbiAgICAgICAgaXRlclB1c2godG9wKyssXG4gICAgICAgICAgYXhpcyxcbiAgICAgICAgICByZWQwLCByZWRFbmQsXG4gICAgICAgICAgYmx1ZTEsIGJsdWVFbmQsXG4gICAgICAgICAgKGZsaXB8NCkgKyAoZnVsbCA/IDE2IDogMCksXG4gICAgICAgICAgbWlkLCBoaSlcbiAgICAgIH1cblxuICAgICAgLy9MZWZ0IGNhc2VcbiAgICAgIGlmKGJsdWVTdGFydCA8IGJsdWUwKSB7XG4gICAgICAgIGl0ZXJQdXNoKHRvcCsrLFxuICAgICAgICAgIGF4aXMsXG4gICAgICAgICAgcmVkMCwgcmVkRW5kLFxuICAgICAgICAgIGJsdWVTdGFydCwgYmx1ZTAsXG4gICAgICAgICAgKGZsaXB8MikgKyAoZnVsbCA/IDE2IDogMCksXG4gICAgICAgICAgbG8sIG1pZClcbiAgICAgIH1cblxuICAgICAgLy9DZW50ZXIgY2FzZSAodGhlIGhhcmQgcGFydClcbiAgICAgIGlmKGJsdWUwICsgMSA9PT0gYmx1ZTEpIHtcbiAgICAgICAgLy9PcHRpbWl6YXRpb246IFJhbmdlIHdpdGggZXhhY3RseSAxIHBvaW50LCB1c2UgYSBicnV0ZSBmb3JjZSBzY2FuXG4gICAgICAgIGlmKGZ1bGwpIHtcbiAgICAgICAgICByZXR2YWwgPSBvbmVQb2ludEZ1bGwoXG4gICAgICAgICAgICBkLCBheGlzLCB2aXNpdCxcbiAgICAgICAgICAgIHJlZDAsIHJlZEVuZCwgcmVkLCByZWRJbmRleCxcbiAgICAgICAgICAgIGJsdWUwLCBibHVlLCBibHVlSW5kZXhbYmx1ZTBdKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHZhbCA9IG9uZVBvaW50UGFydGlhbChcbiAgICAgICAgICAgIGQsIGF4aXMsIHZpc2l0LCBmbGlwLFxuICAgICAgICAgICAgcmVkMCwgcmVkRW5kLCByZWQsIHJlZEluZGV4LFxuICAgICAgICAgICAgYmx1ZTAsIGJsdWUsIGJsdWVJbmRleFtibHVlMF0pXG4gICAgICAgIH1cbiAgICAgICAgaWYocmV0dmFsICE9PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4gcmV0dmFsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihibHVlMCA8IGJsdWUxKSB7XG4gICAgICAgIHZhciByZWQxXG4gICAgICAgIGlmKGZ1bGwpIHtcbiAgICAgICAgICAvL0lmIGZ1bGwgaW50ZXJzZWN0aW9uLCBuZWVkIHRvIGhhbmRsZSBzcGVjaWFsIGNhc2VcbiAgICAgICAgICByZWQxID0gcGFydGl0aW9uQ29udGFpbnNQb2ludChcbiAgICAgICAgICAgIGQsIGF4aXMsXG4gICAgICAgICAgICByZWQwLCByZWRFbmQsIHJlZCwgcmVkSW5kZXgsXG4gICAgICAgICAgICBtaWQpXG4gICAgICAgICAgaWYocmVkMCA8IHJlZDEpIHtcbiAgICAgICAgICAgIHZhciByZWRYID0gcGFydGl0aW9uU3RhcnRFcXVhbChcbiAgICAgICAgICAgICAgZCwgYXhpcyxcbiAgICAgICAgICAgICAgcmVkMCwgcmVkMSwgcmVkLCByZWRJbmRleCxcbiAgICAgICAgICAgICAgbWlkKVxuICAgICAgICAgICAgaWYoYXhpcyA9PT0gZC0yKSB7XG4gICAgICAgICAgICAgIC8vRGVnZW5lcmF0ZSBzd2VlcCBpbnRlcnNlY3Rpb246XG4gICAgICAgICAgICAgIC8vICBbcmVkMCwgcmVkWF0gd2l0aCBbYmx1ZTAsIGJsdWUxXVxuICAgICAgICAgICAgICBpZihyZWQwIDwgcmVkWCkge1xuICAgICAgICAgICAgICAgIHJldHZhbCA9IHN3ZWVwLnN3ZWVwQ29tcGxldGUoXG4gICAgICAgICAgICAgICAgICBkLCB2aXNpdCxcbiAgICAgICAgICAgICAgICAgIHJlZDAsIHJlZFgsIHJlZCwgcmVkSW5kZXgsXG4gICAgICAgICAgICAgICAgICBibHVlMCwgYmx1ZTEsIGJsdWUsIGJsdWVJbmRleClcbiAgICAgICAgICAgICAgICBpZihyZXR2YWwgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vTm9ybWFsIHN3ZWVwIGludGVyc2VjdGlvbjpcbiAgICAgICAgICAgICAgLy8gIFtyZWRYLCByZWQxXSB3aXRoIFtibHVlMCwgYmx1ZTFdXG4gICAgICAgICAgICAgIGlmKHJlZFggPCByZWQxKSB7XG4gICAgICAgICAgICAgICAgcmV0dmFsID0gc3dlZXAuc3dlZXBCaXBhcnRpdGUoXG4gICAgICAgICAgICAgICAgICBkLCB2aXNpdCxcbiAgICAgICAgICAgICAgICAgIHJlZFgsIHJlZDEsIHJlZCwgcmVkSW5kZXgsXG4gICAgICAgICAgICAgICAgICBibHVlMCwgYmx1ZTEsIGJsdWUsIGJsdWVJbmRleClcbiAgICAgICAgICAgICAgICBpZihyZXR2YWwgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYocmVkMCA8IHJlZFgpIHtcbiAgICAgICAgICAgICAgICBpdGVyUHVzaCh0b3ArKyxcbiAgICAgICAgICAgICAgICAgIGF4aXMrMSxcbiAgICAgICAgICAgICAgICAgIHJlZDAsIHJlZFgsXG4gICAgICAgICAgICAgICAgICBibHVlMCwgYmx1ZTEsXG4gICAgICAgICAgICAgICAgICAxNixcbiAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSwgSW5maW5pdHkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYocmVkWCA8IHJlZDEpIHtcbiAgICAgICAgICAgICAgICBpdGVyUHVzaCh0b3ArKyxcbiAgICAgICAgICAgICAgICAgIGF4aXMrMSxcbiAgICAgICAgICAgICAgICAgIHJlZFgsIHJlZDEsXG4gICAgICAgICAgICAgICAgICBibHVlMCwgYmx1ZTEsXG4gICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgLUluZmluaXR5LCBJbmZpbml0eSlcbiAgICAgICAgICAgICAgICBpdGVyUHVzaCh0b3ArKyxcbiAgICAgICAgICAgICAgICAgIGF4aXMrMSxcbiAgICAgICAgICAgICAgICAgIGJsdWUwLCBibHVlMSxcbiAgICAgICAgICAgICAgICAgIHJlZFgsIHJlZDEsXG4gICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgLUluZmluaXR5LCBJbmZpbml0eSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZihmbGlwKSB7XG4gICAgICAgICAgICByZWQxID0gcGFydGl0aW9uQ29udGFpbnNQb2ludFByb3BlcihcbiAgICAgICAgICAgICAgZCwgYXhpcyxcbiAgICAgICAgICAgICAgcmVkMCwgcmVkRW5kLCByZWQsIHJlZEluZGV4LFxuICAgICAgICAgICAgICBtaWQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlZDEgPSBwYXJ0aXRpb25Db250YWluc1BvaW50KFxuICAgICAgICAgICAgICBkLCBheGlzLFxuICAgICAgICAgICAgICByZWQwLCByZWRFbmQsIHJlZCwgcmVkSW5kZXgsXG4gICAgICAgICAgICAgIG1pZClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYocmVkMCA8IHJlZDEpIHtcbiAgICAgICAgICAgIGlmKGF4aXMgPT09IGQtMikge1xuICAgICAgICAgICAgICBpZihmbGlwKSB7XG4gICAgICAgICAgICAgICAgcmV0dmFsID0gc3dlZXAuc3dlZXBCaXBhcnRpdGUoXG4gICAgICAgICAgICAgICAgICBkLCB2aXNpdCxcbiAgICAgICAgICAgICAgICAgIGJsdWUwLCBibHVlMSwgYmx1ZSwgYmx1ZUluZGV4LFxuICAgICAgICAgICAgICAgICAgcmVkMCwgcmVkMSwgcmVkLCByZWRJbmRleClcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR2YWwgPSBzd2VlcC5zd2VlcEJpcGFydGl0ZShcbiAgICAgICAgICAgICAgICAgIGQsIHZpc2l0LFxuICAgICAgICAgICAgICAgICAgcmVkMCwgcmVkMSwgcmVkLCByZWRJbmRleCxcbiAgICAgICAgICAgICAgICAgIGJsdWUwLCBibHVlMSwgYmx1ZSwgYmx1ZUluZGV4KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpdGVyUHVzaCh0b3ArKyxcbiAgICAgICAgICAgICAgICBheGlzKzEsXG4gICAgICAgICAgICAgICAgcmVkMCwgcmVkMSxcbiAgICAgICAgICAgICAgICBibHVlMCwgYmx1ZTEsXG4gICAgICAgICAgICAgICAgZmxpcCxcbiAgICAgICAgICAgICAgICAtSW5maW5pdHksIEluZmluaXR5KVxuICAgICAgICAgICAgICBpdGVyUHVzaCh0b3ArKyxcbiAgICAgICAgICAgICAgICBheGlzKzEsXG4gICAgICAgICAgICAgICAgYmx1ZTAsIGJsdWUxLFxuICAgICAgICAgICAgICAgIHJlZDAsIHJlZDEsXG4gICAgICAgICAgICAgICAgZmxpcF4xLFxuICAgICAgICAgICAgICAgIC1JbmZpbml0eSwgSW5maW5pdHkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZmluZE1lZGlhblxuXG52YXIgZ2VuUGFydGl0aW9uID0gcmVxdWlyZSgnLi9wYXJ0aXRpb24nKVxuXG52YXIgcGFydGl0aW9uU3RhcnRMZXNzVGhhbiA9IGdlblBhcnRpdGlvbignbG88cDAnLCBbJ3AwJ10pXG5cbnZhciBQQVJUSVRJT05fVEhSRVNIT0xEID0gOCAgIC8vQ3V0IG9mZiBmb3IgdXNpbmcgaW5zZXJ0aW9uIHNvcnQgaW4gZmluZE1lZGlhblxuXG4vL0Jhc2UgY2FzZSBmb3IgbWVkaWFuIGZpbmRpbmc6ICBVc2UgaW5zZXJ0aW9uIHNvcnRcbmZ1bmN0aW9uIGluc2VydGlvblNvcnQoZCwgYXhpcywgc3RhcnQsIGVuZCwgYm94ZXMsIGlkcykge1xuICB2YXIgZWxlbVNpemUgPSAyICogZFxuICB2YXIgYm94UHRyID0gZWxlbVNpemUgKiAoc3RhcnQrMSkgKyBheGlzXG4gIGZvcih2YXIgaT1zdGFydCsxOyBpPGVuZDsgKytpLCBib3hQdHIrPWVsZW1TaXplKSB7XG4gICAgdmFyIHggPSBib3hlc1tib3hQdHJdXG4gICAgZm9yKHZhciBqPWksIHB0cj1lbGVtU2l6ZSooaS0xKTsgXG4gICAgICAgIGo+c3RhcnQgJiYgYm94ZXNbcHRyK2F4aXNdID4geDsgXG4gICAgICAgIC0taiwgcHRyLT1lbGVtU2l6ZSkge1xuICAgICAgLy9Td2FwXG4gICAgICB2YXIgYVB0ciA9IHB0clxuICAgICAgdmFyIGJQdHIgPSBwdHIrZWxlbVNpemVcbiAgICAgIGZvcih2YXIgaz0wOyBrPGVsZW1TaXplOyArK2ssICsrYVB0ciwgKytiUHRyKSB7XG4gICAgICAgIHZhciB5ID0gYm94ZXNbYVB0cl1cbiAgICAgICAgYm94ZXNbYVB0cl0gPSBib3hlc1tiUHRyXVxuICAgICAgICBib3hlc1tiUHRyXSA9IHlcbiAgICAgIH1cbiAgICAgIHZhciB0bXAgPSBpZHNbal1cbiAgICAgIGlkc1tqXSA9IGlkc1tqLTFdXG4gICAgICBpZHNbai0xXSA9IHRtcFxuICAgIH1cbiAgfVxufVxuXG4vL0ZpbmQgbWVkaWFuIHVzaW5nIHF1aWNrIHNlbGVjdCBhbGdvcml0aG1cbi8vICB0YWtlcyBPKG4pIHRpbWUgd2l0aCBoaWdoIHByb2JhYmlsaXR5XG5mdW5jdGlvbiBmaW5kTWVkaWFuKGQsIGF4aXMsIHN0YXJ0LCBlbmQsIGJveGVzLCBpZHMpIHtcbiAgaWYoZW5kIDw9IHN0YXJ0KzEpIHtcbiAgICByZXR1cm4gc3RhcnRcbiAgfVxuXG4gIHZhciBsbyAgICAgICA9IHN0YXJ0XG4gIHZhciBoaSAgICAgICA9IGVuZFxuICB2YXIgbWlkICAgICAgPSAoKGVuZCArIHN0YXJ0KSA+Pj4gMSlcbiAgdmFyIGVsZW1TaXplID0gMipkXG4gIHZhciBwaXZvdCAgICA9IG1pZFxuICB2YXIgdmFsdWUgICAgPSBib3hlc1tlbGVtU2l6ZSptaWQrYXhpc11cbiAgXG4gIHdoaWxlKGxvIDwgaGkpIHtcbiAgICBpZihoaSAtIGxvIDwgUEFSVElUSU9OX1RIUkVTSE9MRCkge1xuICAgICAgaW5zZXJ0aW9uU29ydChkLCBheGlzLCBsbywgaGksIGJveGVzLCBpZHMpXG4gICAgICB2YWx1ZSA9IGJveGVzW2VsZW1TaXplKm1pZCtheGlzXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgXG4gICAgLy9TZWxlY3QgcGl2b3QgdXNpbmcgbWVkaWFuLW9mLTNcbiAgICB2YXIgY291bnQgID0gaGkgLSBsb1xuICAgIHZhciBwaXZvdDAgPSAoTWF0aC5yYW5kb20oKSpjb3VudCtsbyl8MFxuICAgIHZhciB2YWx1ZTAgPSBib3hlc1tlbGVtU2l6ZSpwaXZvdDAgKyBheGlzXVxuICAgIHZhciBwaXZvdDEgPSAoTWF0aC5yYW5kb20oKSpjb3VudCtsbyl8MFxuICAgIHZhciB2YWx1ZTEgPSBib3hlc1tlbGVtU2l6ZSpwaXZvdDEgKyBheGlzXVxuICAgIHZhciBwaXZvdDIgPSAoTWF0aC5yYW5kb20oKSpjb3VudCtsbyl8MFxuICAgIHZhciB2YWx1ZTIgPSBib3hlc1tlbGVtU2l6ZSpwaXZvdDIgKyBheGlzXVxuICAgIGlmKHZhbHVlMCA8PSB2YWx1ZTEpIHtcbiAgICAgIGlmKHZhbHVlMiA+PSB2YWx1ZTEpIHtcbiAgICAgICAgcGl2b3QgPSBwaXZvdDFcbiAgICAgICAgdmFsdWUgPSB2YWx1ZTFcbiAgICAgIH0gZWxzZSBpZih2YWx1ZTAgPj0gdmFsdWUyKSB7XG4gICAgICAgIHBpdm90ID0gcGl2b3QwXG4gICAgICAgIHZhbHVlID0gdmFsdWUwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwaXZvdCA9IHBpdm90MlxuICAgICAgICB2YWx1ZSA9IHZhbHVlMlxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZih2YWx1ZTEgPj0gdmFsdWUyKSB7XG4gICAgICAgIHBpdm90ID0gcGl2b3QxXG4gICAgICAgIHZhbHVlID0gdmFsdWUxXG4gICAgICB9IGVsc2UgaWYodmFsdWUyID49IHZhbHVlMCkge1xuICAgICAgICBwaXZvdCA9IHBpdm90MFxuICAgICAgICB2YWx1ZSA9IHZhbHVlMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGl2b3QgPSBwaXZvdDJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZTJcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1N3YXAgcGl2b3QgdG8gZW5kIG9mIGFycmF5XG4gICAgdmFyIGFQdHIgPSBlbGVtU2l6ZSAqIChoaS0xKVxuICAgIHZhciBiUHRyID0gZWxlbVNpemUgKiBwaXZvdFxuICAgIGZvcih2YXIgaT0wOyBpPGVsZW1TaXplOyArK2ksICsrYVB0ciwgKytiUHRyKSB7XG4gICAgICB2YXIgeCA9IGJveGVzW2FQdHJdXG4gICAgICBib3hlc1thUHRyXSA9IGJveGVzW2JQdHJdXG4gICAgICBib3hlc1tiUHRyXSA9IHhcbiAgICB9XG4gICAgdmFyIHkgPSBpZHNbaGktMV1cbiAgICBpZHNbaGktMV0gPSBpZHNbcGl2b3RdXG4gICAgaWRzW3Bpdm90XSA9IHlcblxuICAgIC8vUGFydGl0aW9uIHVzaW5nIHBpdm90XG4gICAgcGl2b3QgPSBwYXJ0aXRpb25TdGFydExlc3NUaGFuKFxuICAgICAgZCwgYXhpcywgXG4gICAgICBsbywgaGktMSwgYm94ZXMsIGlkcyxcbiAgICAgIHZhbHVlKVxuXG4gICAgLy9Td2FwIHBpdm90IGJhY2tcbiAgICB2YXIgYVB0ciA9IGVsZW1TaXplICogKGhpLTEpXG4gICAgdmFyIGJQdHIgPSBlbGVtU2l6ZSAqIHBpdm90XG4gICAgZm9yKHZhciBpPTA7IGk8ZWxlbVNpemU7ICsraSwgKythUHRyLCArK2JQdHIpIHtcbiAgICAgIHZhciB4ID0gYm94ZXNbYVB0cl1cbiAgICAgIGJveGVzW2FQdHJdID0gYm94ZXNbYlB0cl1cbiAgICAgIGJveGVzW2JQdHJdID0geFxuICAgIH1cbiAgICB2YXIgeSA9IGlkc1toaS0xXVxuICAgIGlkc1toaS0xXSA9IGlkc1twaXZvdF1cbiAgICBpZHNbcGl2b3RdID0geVxuXG4gICAgLy9Td2FwIHBpdm90IHRvIGxhc3QgcGl2b3RcbiAgICBpZihtaWQgPCBwaXZvdCkge1xuICAgICAgaGkgPSBwaXZvdC0xXG4gICAgICB3aGlsZShsbyA8IGhpICYmIFxuICAgICAgICBib3hlc1tlbGVtU2l6ZSooaGktMSkrYXhpc10gPT09IHZhbHVlKSB7XG4gICAgICAgIGhpIC09IDFcbiAgICAgIH1cbiAgICAgIGhpICs9IDFcbiAgICB9IGVsc2UgaWYocGl2b3QgPCBtaWQpIHtcbiAgICAgIGxvID0gcGl2b3QgKyAxXG4gICAgICB3aGlsZShsbyA8IGhpICYmXG4gICAgICAgIGJveGVzW2VsZW1TaXplKmxvK2F4aXNdID09PSB2YWx1ZSkge1xuICAgICAgICBsbyArPSAxXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy9NYWtlIHN1cmUgcGl2b3QgaXMgYXQgc3RhcnRcbiAgcmV0dXJuIHBhcnRpdGlvblN0YXJ0TGVzc1RoYW4oXG4gICAgZCwgYXhpcywgXG4gICAgc3RhcnQsIG1pZCwgYm94ZXMsIGlkcyxcbiAgICBib3hlc1tlbGVtU2l6ZSptaWQrYXhpc10pXG59IiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuUGFydGl0aW9uXG5cbnZhciBjb2RlID0gJ2Zvcih2YXIgaj0yKmEsaz1qKmMsbD1rLG09YyxuPWIsbz1hK2IscD1jO2Q+cDsrK3Asays9ail7dmFyIF87aWYoJClpZihtPT09cCltKz0xLGwrPWo7ZWxzZXtmb3IodmFyIHM9MDtqPnM7KytzKXt2YXIgdD1lW2src107ZVtrK3NdPWVbbF0sZVtsKytdPXR9dmFyIHU9ZltwXTtmW3BdPWZbbV0sZlttKytdPXV9fXJldHVybiBtJ1xuXG5mdW5jdGlvbiBnZW5QYXJ0aXRpb24ocHJlZGljYXRlLCBhcmdzKSB7XG4gIHZhciBmYXJncyA9J2FiY2RlZicuc3BsaXQoJycpLmNvbmNhdChhcmdzKVxuICB2YXIgcmVhZHMgPSBbXVxuICBpZihwcmVkaWNhdGUuaW5kZXhPZignbG8nKSA+PSAwKSB7XG4gICAgcmVhZHMucHVzaCgnbG89ZVtrK25dJylcbiAgfVxuICBpZihwcmVkaWNhdGUuaW5kZXhPZignaGknKSA+PSAwKSB7XG4gICAgcmVhZHMucHVzaCgnaGk9ZVtrK29dJylcbiAgfVxuICBmYXJncy5wdXNoKFxuICAgIGNvZGUucmVwbGFjZSgnXycsIHJlYWRzLmpvaW4oKSlcbiAgICAgICAgLnJlcGxhY2UoJyQnLCBwcmVkaWNhdGUpKVxuICByZXR1cm4gRnVuY3Rpb24uYXBwbHkodm9pZCAwLCBmYXJncylcbn0iLCIndXNlIHN0cmljdCc7XG5cbi8vVGhpcyBjb2RlIGlzIGV4dHJhY3RlZCBmcm9tIG5kYXJyYXktc29ydFxuLy9JdCBpcyBpbmxpbmVkIGhlcmUgYXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZFxuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBwZXI7XG5cbnZhciBJTlNFUlRfU09SVF9DVVRPRkYgPSAzMlxuXG5mdW5jdGlvbiB3cmFwcGVyKGRhdGEsIG4wKSB7XG4gIGlmIChuMCA8PSA0KklOU0VSVF9TT1JUX0NVVE9GRikge1xuICAgIGluc2VydGlvblNvcnQoMCwgbjAgLSAxLCBkYXRhKTtcbiAgfSBlbHNlIHtcbiAgICBxdWlja1NvcnQoMCwgbjAgLSAxLCBkYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRpb25Tb3J0KGxlZnQsIHJpZ2h0LCBkYXRhKSB7XG4gIHZhciBwdHIgPSAyKihsZWZ0KzEpXG4gIGZvcih2YXIgaT1sZWZ0KzE7IGk8PXJpZ2h0OyArK2kpIHtcbiAgICB2YXIgYSA9IGRhdGFbcHRyKytdXG4gICAgdmFyIGIgPSBkYXRhW3B0cisrXVxuICAgIHZhciBqID0gaVxuICAgIHZhciBqcHRyID0gcHRyLTJcbiAgICB3aGlsZShqLS0gPiBsZWZ0KSB7XG4gICAgICB2YXIgeCA9IGRhdGFbanB0ci0yXVxuICAgICAgdmFyIHkgPSBkYXRhW2pwdHItMV1cbiAgICAgIGlmKHggPCBhKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYoeCA9PT0gYSAmJiB5IDwgYikge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgZGF0YVtqcHRyXSAgID0geFxuICAgICAgZGF0YVtqcHRyKzFdID0geVxuICAgICAganB0ciAtPSAyXG4gICAgfVxuICAgIGRhdGFbanB0cl0gICA9IGFcbiAgICBkYXRhW2pwdHIrMV0gPSBiXG4gIH1cbn1cblxuZnVuY3Rpb24gc3dhcChpLCBqLCBkYXRhKSB7XG4gIGkgKj0gMlxuICBqICo9IDJcbiAgdmFyIHggPSBkYXRhW2ldXG4gIHZhciB5ID0gZGF0YVtpKzFdXG4gIGRhdGFbaV0gPSBkYXRhW2pdXG4gIGRhdGFbaSsxXSA9IGRhdGFbaisxXVxuICBkYXRhW2pdID0geFxuICBkYXRhW2orMV0gPSB5XG59XG5cbmZ1bmN0aW9uIG1vdmUoaSwgaiwgZGF0YSkge1xuICBpICo9IDJcbiAgaiAqPSAyXG4gIGRhdGFbaV0gPSBkYXRhW2pdXG4gIGRhdGFbaSsxXSA9IGRhdGFbaisxXVxufVxuXG5mdW5jdGlvbiByb3RhdGUoaSwgaiwgaywgZGF0YSkge1xuICBpICo9IDJcbiAgaiAqPSAyXG4gIGsgKj0gMlxuICB2YXIgeCA9IGRhdGFbaV1cbiAgdmFyIHkgPSBkYXRhW2krMV1cbiAgZGF0YVtpXSA9IGRhdGFbal1cbiAgZGF0YVtpKzFdID0gZGF0YVtqKzFdXG4gIGRhdGFbal0gPSBkYXRhW2tdXG4gIGRhdGFbaisxXSA9IGRhdGFbaysxXVxuICBkYXRhW2tdID0geFxuICBkYXRhW2srMV0gPSB5XG59XG5cbmZ1bmN0aW9uIHNodWZmbGVQaXZvdChpLCBqLCBweCwgcHksIGRhdGEpIHtcbiAgaSAqPSAyXG4gIGogKj0gMlxuICBkYXRhW2ldID0gZGF0YVtqXVxuICBkYXRhW2pdID0gcHhcbiAgZGF0YVtpKzFdID0gZGF0YVtqKzFdXG4gIGRhdGFbaisxXSA9IHB5XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmUoaSwgaiwgZGF0YSkge1xuICBpICo9IDJcbiAgaiAqPSAyXG4gIHZhciB4ID0gZGF0YVtpXSxcbiAgICAgIHkgPSBkYXRhW2pdXG4gIGlmKHggPCB5KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZih4ID09PSB5KSB7XG4gICAgcmV0dXJuIGRhdGFbaSsxXSA+IGRhdGFbaisxXVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVQaXZvdChpLCB5LCBiLCBkYXRhKSB7XG4gIGkgKj0gMlxuICB2YXIgeCA9IGRhdGFbaV1cbiAgaWYoeCA8IHkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYoeCA9PT0geSkge1xuICAgIHJldHVybiBkYXRhW2krMV0gPCBiXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHF1aWNrU29ydChsZWZ0LCByaWdodCwgZGF0YSkge1xuICB2YXIgc2l4dGggPSAocmlnaHQgLSBsZWZ0ICsgMSkgLyA2IHwgMCwgXG4gICAgICBpbmRleDEgPSBsZWZ0ICsgc2l4dGgsIFxuICAgICAgaW5kZXg1ID0gcmlnaHQgLSBzaXh0aCwgXG4gICAgICBpbmRleDMgPSBsZWZ0ICsgcmlnaHQgPj4gMSwgXG4gICAgICBpbmRleDIgPSBpbmRleDMgLSBzaXh0aCwgXG4gICAgICBpbmRleDQgPSBpbmRleDMgKyBzaXh0aCwgXG4gICAgICBlbDEgPSBpbmRleDEsIFxuICAgICAgZWwyID0gaW5kZXgyLCBcbiAgICAgIGVsMyA9IGluZGV4MywgXG4gICAgICBlbDQgPSBpbmRleDQsIFxuICAgICAgZWw1ID0gaW5kZXg1LCBcbiAgICAgIGxlc3MgPSBsZWZ0ICsgMSwgXG4gICAgICBncmVhdCA9IHJpZ2h0IC0gMSwgXG4gICAgICB0bXAgPSAwXG4gIGlmKGNvbXBhcmUoZWwxLCBlbDIsIGRhdGEpKSB7XG4gICAgdG1wID0gZWwxXG4gICAgZWwxID0gZWwyXG4gICAgZWwyID0gdG1wXG4gIH1cbiAgaWYoY29tcGFyZShlbDQsIGVsNSwgZGF0YSkpIHtcbiAgICB0bXAgPSBlbDRcbiAgICBlbDQgPSBlbDVcbiAgICBlbDUgPSB0bXBcbiAgfVxuICBpZihjb21wYXJlKGVsMSwgZWwzLCBkYXRhKSkge1xuICAgIHRtcCA9IGVsMVxuICAgIGVsMSA9IGVsM1xuICAgIGVsMyA9IHRtcFxuICB9XG4gIGlmKGNvbXBhcmUoZWwyLCBlbDMsIGRhdGEpKSB7XG4gICAgdG1wID0gZWwyXG4gICAgZWwyID0gZWwzXG4gICAgZWwzID0gdG1wXG4gIH1cbiAgaWYoY29tcGFyZShlbDEsIGVsNCwgZGF0YSkpIHtcbiAgICB0bXAgPSBlbDFcbiAgICBlbDEgPSBlbDRcbiAgICBlbDQgPSB0bXBcbiAgfVxuICBpZihjb21wYXJlKGVsMywgZWw0LCBkYXRhKSkge1xuICAgIHRtcCA9IGVsM1xuICAgIGVsMyA9IGVsNFxuICAgIGVsNCA9IHRtcFxuICB9XG4gIGlmKGNvbXBhcmUoZWwyLCBlbDUsIGRhdGEpKSB7XG4gICAgdG1wID0gZWwyXG4gICAgZWwyID0gZWw1XG4gICAgZWw1ID0gdG1wXG4gIH1cbiAgaWYoY29tcGFyZShlbDIsIGVsMywgZGF0YSkpIHtcbiAgICB0bXAgPSBlbDJcbiAgICBlbDIgPSBlbDNcbiAgICBlbDMgPSB0bXBcbiAgfVxuICBpZihjb21wYXJlKGVsNCwgZWw1LCBkYXRhKSkge1xuICAgIHRtcCA9IGVsNFxuICAgIGVsNCA9IGVsNVxuICAgIGVsNSA9IHRtcFxuICB9XG5cbiAgdmFyIHBpdm90MVggPSBkYXRhWzIqZWwyXVxuICB2YXIgcGl2b3QxWSA9IGRhdGFbMiplbDIrMV1cbiAgdmFyIHBpdm90MlggPSBkYXRhWzIqZWw0XVxuICB2YXIgcGl2b3QyWSA9IGRhdGFbMiplbDQrMV1cblxuICB2YXIgcHRyMCA9IDIgKiBlbDE7XG4gIHZhciBwdHIyID0gMiAqIGVsMztcbiAgdmFyIHB0cjQgPSAyICogZWw1O1xuICB2YXIgcHRyNSA9IDIgKiBpbmRleDE7XG4gIHZhciBwdHI2ID0gMiAqIGluZGV4MztcbiAgdmFyIHB0cjcgPSAyICogaW5kZXg1O1xuICBmb3IgKHZhciBpMSA9IDA7IGkxIDwgMjsgKytpMSkge1xuICAgIHZhciB4ID0gZGF0YVtwdHIwK2kxXTtcbiAgICB2YXIgeSA9IGRhdGFbcHRyMitpMV07XG4gICAgdmFyIHogPSBkYXRhW3B0cjQraTFdO1xuICAgIGRhdGFbcHRyNStpMV0gPSB4O1xuICAgIGRhdGFbcHRyNitpMV0gPSB5O1xuICAgIGRhdGFbcHRyNytpMV0gPSB6O1xuICB9XG5cbiAgbW92ZShpbmRleDIsIGxlZnQsIGRhdGEpXG4gIG1vdmUoaW5kZXg0LCByaWdodCwgZGF0YSlcbiAgZm9yICh2YXIgayA9IGxlc3M7IGsgPD0gZ3JlYXQ7ICsraykge1xuICAgIGlmIChjb21wYXJlUGl2b3QoaywgcGl2b3QxWCwgcGl2b3QxWSwgZGF0YSkpIHtcbiAgICAgIGlmIChrICE9PSBsZXNzKSB7XG4gICAgICAgIHN3YXAoaywgbGVzcywgZGF0YSlcbiAgICAgIH1cbiAgICAgICsrbGVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjb21wYXJlUGl2b3QoaywgcGl2b3QyWCwgcGl2b3QyWSwgZGF0YSkpIHtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBpZiAoIWNvbXBhcmVQaXZvdChncmVhdCwgcGl2b3QyWCwgcGl2b3QyWSwgZGF0YSkpIHtcbiAgICAgICAgICAgIGlmICgtLWdyZWF0IDwgaykge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29tcGFyZVBpdm90KGdyZWF0LCBwaXZvdDFYLCBwaXZvdDFZLCBkYXRhKSkge1xuICAgICAgICAgICAgICByb3RhdGUoaywgbGVzcywgZ3JlYXQsIGRhdGEpXG4gICAgICAgICAgICAgICsrbGVzcztcbiAgICAgICAgICAgICAgLS1ncmVhdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN3YXAoaywgZ3JlYXQsIGRhdGEpXG4gICAgICAgICAgICAgIC0tZ3JlYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc2h1ZmZsZVBpdm90KGxlZnQsIGxlc3MtMSwgcGl2b3QxWCwgcGl2b3QxWSwgZGF0YSlcbiAgc2h1ZmZsZVBpdm90KHJpZ2h0LCBncmVhdCsxLCBwaXZvdDJYLCBwaXZvdDJZLCBkYXRhKVxuICBpZiAobGVzcyAtIDIgLSBsZWZ0IDw9IElOU0VSVF9TT1JUX0NVVE9GRikge1xuICAgIGluc2VydGlvblNvcnQobGVmdCwgbGVzcyAtIDIsIGRhdGEpO1xuICB9IGVsc2Uge1xuICAgIHF1aWNrU29ydChsZWZ0LCBsZXNzIC0gMiwgZGF0YSk7XG4gIH1cbiAgaWYgKHJpZ2h0IC0gKGdyZWF0ICsgMikgPD0gSU5TRVJUX1NPUlRfQ1VUT0ZGKSB7XG4gICAgaW5zZXJ0aW9uU29ydChncmVhdCArIDIsIHJpZ2h0LCBkYXRhKTtcbiAgfSBlbHNlIHtcbiAgICBxdWlja1NvcnQoZ3JlYXQgKyAyLCByaWdodCwgZGF0YSk7XG4gIH1cbiAgaWYgKGdyZWF0IC0gbGVzcyA8PSBJTlNFUlRfU09SVF9DVVRPRkYpIHtcbiAgICBpbnNlcnRpb25Tb3J0KGxlc3MsIGdyZWF0LCBkYXRhKTtcbiAgfSBlbHNlIHtcbiAgICBxdWlja1NvcnQobGVzcywgZ3JlYXQsIGRhdGEpO1xuICB9XG59IiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbml0OiAgICAgICAgICAgc3FJbml0LFxuICBzd2VlcEJpcGFydGl0ZTogc3dlZXBCaXBhcnRpdGUsXG4gIHN3ZWVwQ29tcGxldGU6ICBzd2VlcENvbXBsZXRlLFxuICBzY2FuQmlwYXJ0aXRlOiAgc2NhbkJpcGFydGl0ZSxcbiAgc2NhbkNvbXBsZXRlOiAgIHNjYW5Db21wbGV0ZVxufVxuXG52YXIgcG9vbCAgPSByZXF1aXJlKCd0eXBlZGFycmF5LXBvb2wnKVxudmFyIGJpdHMgID0gcmVxdWlyZSgnYml0LXR3aWRkbGUnKVxudmFyIGlzb3J0ID0gcmVxdWlyZSgnLi9zb3J0JylcblxuLy9GbGFnIGZvciBibHVlXG52YXIgQkxVRV9GTEFHID0gKDE8PDI4KVxuXG4vLzFEIHN3ZWVwIGV2ZW50IHF1ZXVlIHN0dWZmICh1c2UgcG9vbCB0byBzYXZlIHNwYWNlKVxudmFyIElOSVRfQ0FQQUNJVFkgICAgICA9IDEwMjRcbnZhciBSRURfU1dFRVBfUVVFVUUgICAgPSBwb29sLm1hbGxvY0ludDMyKElOSVRfQ0FQQUNJVFkpXG52YXIgUkVEX1NXRUVQX0lOREVYICAgID0gcG9vbC5tYWxsb2NJbnQzMihJTklUX0NBUEFDSVRZKVxudmFyIEJMVUVfU1dFRVBfUVVFVUUgICA9IHBvb2wubWFsbG9jSW50MzIoSU5JVF9DQVBBQ0lUWSlcbnZhciBCTFVFX1NXRUVQX0lOREVYICAgPSBwb29sLm1hbGxvY0ludDMyKElOSVRfQ0FQQUNJVFkpXG52YXIgQ09NTU9OX1NXRUVQX1FVRVVFID0gcG9vbC5tYWxsb2NJbnQzMihJTklUX0NBUEFDSVRZKVxudmFyIENPTU1PTl9TV0VFUF9JTkRFWCA9IHBvb2wubWFsbG9jSW50MzIoSU5JVF9DQVBBQ0lUWSlcbnZhciBTV0VFUF9FVkVOVFMgICAgICAgPSBwb29sLm1hbGxvY0RvdWJsZShJTklUX0NBUEFDSVRZICogOClcblxuLy9SZXNlcnZlcyBtZW1vcnkgZm9yIHRoZSAxRCBzd2VlcCBkYXRhIHN0cnVjdHVyZXNcbmZ1bmN0aW9uIHNxSW5pdChjb3VudCkge1xuICB2YXIgcmNvdW50ID0gYml0cy5uZXh0UG93Mihjb3VudClcbiAgaWYoUkVEX1NXRUVQX1FVRVVFLmxlbmd0aCA8IHJjb3VudCkge1xuICAgIHBvb2wuZnJlZShSRURfU1dFRVBfUVVFVUUpXG4gICAgUkVEX1NXRUVQX1FVRVVFID0gcG9vbC5tYWxsb2NJbnQzMihyY291bnQpXG4gIH1cbiAgaWYoUkVEX1NXRUVQX0lOREVYLmxlbmd0aCA8IHJjb3VudCkge1xuICAgIHBvb2wuZnJlZShSRURfU1dFRVBfSU5ERVgpXG4gICAgUkVEX1NXRUVQX0lOREVYID0gcG9vbC5tYWxsb2NJbnQzMihyY291bnQpXG4gIH1cbiAgaWYoQkxVRV9TV0VFUF9RVUVVRS5sZW5ndGggPCByY291bnQpIHtcbiAgICBwb29sLmZyZWUoQkxVRV9TV0VFUF9RVUVVRSlcbiAgICBCTFVFX1NXRUVQX1FVRVVFID0gcG9vbC5tYWxsb2NJbnQzMihyY291bnQpXG4gIH1cbiAgaWYoQkxVRV9TV0VFUF9JTkRFWC5sZW5ndGggPCByY291bnQpIHtcbiAgICBwb29sLmZyZWUoQkxVRV9TV0VFUF9JTkRFWClcbiAgICBCTFVFX1NXRUVQX0lOREVYID0gcG9vbC5tYWxsb2NJbnQzMihyY291bnQpXG4gIH1cbiAgaWYoQ09NTU9OX1NXRUVQX1FVRVVFLmxlbmd0aCA8IHJjb3VudCkge1xuICAgIHBvb2wuZnJlZShDT01NT05fU1dFRVBfUVVFVUUpXG4gICAgQ09NTU9OX1NXRUVQX1FVRVVFID0gcG9vbC5tYWxsb2NJbnQzMihyY291bnQpXG4gIH1cbiAgaWYoQ09NTU9OX1NXRUVQX0lOREVYLmxlbmd0aCA8IHJjb3VudCkge1xuICAgIHBvb2wuZnJlZShDT01NT05fU1dFRVBfSU5ERVgpXG4gICAgQ09NTU9OX1NXRUVQX0lOREVYID0gcG9vbC5tYWxsb2NJbnQzMihyY291bnQpXG4gIH1cbiAgdmFyIGV2ZW50TGVuZ3RoID0gOCAqIHJjb3VudFxuICBpZihTV0VFUF9FVkVOVFMubGVuZ3RoIDwgZXZlbnRMZW5ndGgpIHtcbiAgICBwb29sLmZyZWUoU1dFRVBfRVZFTlRTKVxuICAgIFNXRUVQX0VWRU5UUyA9IHBvb2wubWFsbG9jRG91YmxlKGV2ZW50TGVuZ3RoKVxuICB9XG59XG5cbi8vUmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgYWN0aXZlIHF1ZXVlIGluIE8oMSlcbmZ1bmN0aW9uIHNxUG9wKHF1ZXVlLCBpbmRleCwgY291bnQsIGl0ZW0pIHtcbiAgdmFyIGlkeCA9IGluZGV4W2l0ZW1dXG4gIHZhciB0b3AgPSBxdWV1ZVtjb3VudC0xXVxuICBxdWV1ZVtpZHhdID0gdG9wXG4gIGluZGV4W3RvcF0gPSBpZHhcbn1cblxuLy9JbnNlcnQgYW4gaXRlbSBpbnRvIHRoZSBhY3RpdmUgcXVldWUgaW4gTygxKVxuZnVuY3Rpb24gc3FQdXNoKHF1ZXVlLCBpbmRleCwgY291bnQsIGl0ZW0pIHtcbiAgcXVldWVbY291bnRdID0gaXRlbVxuICBpbmRleFtpdGVtXSAgPSBjb3VudFxufVxuXG4vL1JlY3Vyc2lvbiBiYXNlIGNhc2U6IHVzZSAxRCBzd2VlcCBhbGdvcml0aG1cbmZ1bmN0aW9uIHN3ZWVwQmlwYXJ0aXRlKFxuICAgIGQsIHZpc2l0LFxuICAgIHJlZFN0YXJ0LCAgcmVkRW5kLCByZWQsIHJlZEluZGV4LFxuICAgIGJsdWVTdGFydCwgYmx1ZUVuZCwgYmx1ZSwgYmx1ZUluZGV4KSB7XG5cbiAgLy9zdG9yZSBldmVudHMgYXMgcGFpcnMgW2Nvb3JkaW5hdGUsIGlkeF1cbiAgLy9cbiAgLy8gIHJlZCBjcmVhdGU6ICAtKGlkeCsxKVxuICAvLyAgcmVkIGRlc3Ryb3k6IGlkeFxuICAvLyAgYmx1ZSBjcmVhdGU6IC0oaWR4K0JMVUVfRkxBRylcbiAgLy8gIGJsdWUgZGVzdHJveTogaWR4K0JMVUVfRkxBR1xuICAvL1xuICB2YXIgcHRyICAgICAgPSAwXG4gIHZhciBlbGVtU2l6ZSA9IDIqZFxuICB2YXIgaXN0YXJ0ICAgPSBkLTFcbiAgdmFyIGllbmQgICAgID0gZWxlbVNpemUtMVxuXG4gIGZvcih2YXIgaT1yZWRTdGFydDsgaTxyZWRFbmQ7ICsraSkge1xuICAgIHZhciBpZHggPSByZWRJbmRleFtpXVxuICAgIHZhciByZWRPZmZzZXQgPSBlbGVtU2l6ZSppXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IHJlZFtyZWRPZmZzZXQraXN0YXJ0XVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSAtKGlkeCsxKVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSByZWRbcmVkT2Zmc2V0K2llbmRdXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IGlkeFxuICB9XG5cbiAgZm9yKHZhciBpPWJsdWVTdGFydDsgaTxibHVlRW5kOyArK2kpIHtcbiAgICB2YXIgaWR4ID0gYmx1ZUluZGV4W2ldK0JMVUVfRkxBR1xuICAgIHZhciBibHVlT2Zmc2V0ID0gZWxlbVNpemUqaVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSBibHVlW2JsdWVPZmZzZXQraXN0YXJ0XVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSAtaWR4XG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IGJsdWVbYmx1ZU9mZnNldCtpZW5kXVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSBpZHhcbiAgfVxuXG4gIC8vcHJvY2VzcyBldmVudHMgZnJvbSBsZWZ0LT5yaWdodFxuICB2YXIgbiA9IHB0ciA+Pj4gMVxuICBpc29ydChTV0VFUF9FVkVOVFMsIG4pXG4gIFxuICB2YXIgcmVkQWN0aXZlICA9IDBcbiAgdmFyIGJsdWVBY3RpdmUgPSAwXG4gIGZvcih2YXIgaT0wOyBpPG47ICsraSkge1xuICAgIHZhciBlID0gU1dFRVBfRVZFTlRTWzIqaSsxXXwwXG4gICAgaWYoZSA+PSBCTFVFX0ZMQUcpIHtcbiAgICAgIC8vYmx1ZSBkZXN0cm95IGV2ZW50XG4gICAgICBlID0gKGUtQkxVRV9GTEFHKXwwXG4gICAgICBzcVBvcChCTFVFX1NXRUVQX1FVRVVFLCBCTFVFX1NXRUVQX0lOREVYLCBibHVlQWN0aXZlLS0sIGUpXG4gICAgfSBlbHNlIGlmKGUgPj0gMCkge1xuICAgICAgLy9yZWQgZGVzdHJveSBldmVudFxuICAgICAgc3FQb3AoUkVEX1NXRUVQX1FVRVVFLCBSRURfU1dFRVBfSU5ERVgsIHJlZEFjdGl2ZS0tLCBlKVxuICAgIH0gZWxzZSBpZihlIDw9IC1CTFVFX0ZMQUcpIHtcbiAgICAgIC8vYmx1ZSBjcmVhdGUgZXZlbnRcbiAgICAgIGUgPSAoLWUtQkxVRV9GTEFHKXwwXG4gICAgICBmb3IodmFyIGo9MDsgajxyZWRBY3RpdmU7ICsraikge1xuICAgICAgICB2YXIgcmV0dmFsID0gdmlzaXQoUkVEX1NXRUVQX1FVRVVFW2pdLCBlKVxuICAgICAgICBpZihyZXR2YWwgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybiByZXR2YWxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3FQdXNoKEJMVUVfU1dFRVBfUVVFVUUsIEJMVUVfU1dFRVBfSU5ERVgsIGJsdWVBY3RpdmUrKywgZSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy9yZWQgY3JlYXRlIGV2ZW50XG4gICAgICBlID0gKC1lLTEpfDBcbiAgICAgIGZvcih2YXIgaj0wOyBqPGJsdWVBY3RpdmU7ICsraikge1xuICAgICAgICB2YXIgcmV0dmFsID0gdmlzaXQoZSwgQkxVRV9TV0VFUF9RVUVVRVtqXSlcbiAgICAgICAgaWYocmV0dmFsICE9PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4gcmV0dmFsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNxUHVzaChSRURfU1dFRVBfUVVFVUUsIFJFRF9TV0VFUF9JTkRFWCwgcmVkQWN0aXZlKyssIGUpXG4gICAgfVxuICB9XG59XG5cbi8vQ29tcGxldGUgc3dlZXBcbmZ1bmN0aW9uIHN3ZWVwQ29tcGxldGUoZCwgdmlzaXQsIFxuICByZWRTdGFydCwgcmVkRW5kLCByZWQsIHJlZEluZGV4LFxuICBibHVlU3RhcnQsIGJsdWVFbmQsIGJsdWUsIGJsdWVJbmRleCkge1xuXG4gIHZhciBwdHIgICAgICA9IDBcbiAgdmFyIGVsZW1TaXplID0gMipkXG4gIHZhciBpc3RhcnQgICA9IGQtMVxuICB2YXIgaWVuZCAgICAgPSBlbGVtU2l6ZS0xXG5cbiAgZm9yKHZhciBpPXJlZFN0YXJ0OyBpPHJlZEVuZDsgKytpKSB7XG4gICAgdmFyIGlkeCA9IChyZWRJbmRleFtpXSsxKTw8MVxuICAgIHZhciByZWRPZmZzZXQgPSBlbGVtU2l6ZSppXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IHJlZFtyZWRPZmZzZXQraXN0YXJ0XVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSAtaWR4XG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IHJlZFtyZWRPZmZzZXQraWVuZF1cbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gaWR4XG4gIH1cblxuICBmb3IodmFyIGk9Ymx1ZVN0YXJ0OyBpPGJsdWVFbmQ7ICsraSkge1xuICAgIHZhciBpZHggPSAoYmx1ZUluZGV4W2ldKzEpPDwxXG4gICAgdmFyIGJsdWVPZmZzZXQgPSBlbGVtU2l6ZSppXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IGJsdWVbYmx1ZU9mZnNldCtpc3RhcnRdXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9ICgtaWR4KXwxXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IGJsdWVbYmx1ZU9mZnNldCtpZW5kXVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSBpZHh8MVxuICB9XG5cbiAgLy9wcm9jZXNzIGV2ZW50cyBmcm9tIGxlZnQtPnJpZ2h0XG4gIHZhciBuID0gcHRyID4+PiAxXG4gIGlzb3J0KFNXRUVQX0VWRU5UUywgbilcbiAgXG4gIHZhciByZWRBY3RpdmUgICAgPSAwXG4gIHZhciBibHVlQWN0aXZlICAgPSAwXG4gIHZhciBjb21tb25BY3RpdmUgPSAwXG4gIGZvcih2YXIgaT0wOyBpPG47ICsraSkge1xuICAgIHZhciBlICAgICA9IFNXRUVQX0VWRU5UU1syKmkrMV18MFxuICAgIHZhciBjb2xvciA9IGUmMVxuICAgIGlmKGkgPCBuLTEgJiYgKGU+PjEpID09PSAoU1dFRVBfRVZFTlRTWzIqaSszXT4+MSkpIHtcbiAgICAgIGNvbG9yID0gMlxuICAgICAgaSArPSAxXG4gICAgfVxuICAgIFxuICAgIGlmKGUgPCAwKSB7XG4gICAgICAvL0NyZWF0ZSBldmVudFxuICAgICAgdmFyIGlkID0gLShlPj4xKSAtIDFcblxuICAgICAgLy9JbnRlcnNlY3Qgd2l0aCBjb21tb25cbiAgICAgIGZvcih2YXIgaj0wOyBqPGNvbW1vbkFjdGl2ZTsgKytqKSB7XG4gICAgICAgIHZhciByZXR2YWwgPSB2aXNpdChDT01NT05fU1dFRVBfUVVFVUVbal0sIGlkKVxuICAgICAgICBpZihyZXR2YWwgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybiByZXR2YWxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihjb2xvciAhPT0gMCkge1xuICAgICAgICAvL0ludGVyc2VjdCB3aXRoIHJlZFxuICAgICAgICBmb3IodmFyIGo9MDsgajxyZWRBY3RpdmU7ICsraikge1xuICAgICAgICAgIHZhciByZXR2YWwgPSB2aXNpdChSRURfU1dFRVBfUVVFVUVbal0sIGlkKVxuICAgICAgICAgIGlmKHJldHZhbCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0dmFsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKGNvbG9yICE9PSAxKSB7XG4gICAgICAgIC8vSW50ZXJzZWN0IHdpdGggYmx1ZVxuICAgICAgICBmb3IodmFyIGo9MDsgajxibHVlQWN0aXZlOyArK2opIHtcbiAgICAgICAgICB2YXIgcmV0dmFsID0gdmlzaXQoQkxVRV9TV0VFUF9RVUVVRVtqXSwgaWQpXG4gICAgICAgICAgaWYocmV0dmFsICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXR2YWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoY29sb3IgPT09IDApIHtcbiAgICAgICAgLy9SZWRcbiAgICAgICAgc3FQdXNoKFJFRF9TV0VFUF9RVUVVRSwgUkVEX1NXRUVQX0lOREVYLCByZWRBY3RpdmUrKywgaWQpXG4gICAgICB9IGVsc2UgaWYoY29sb3IgPT09IDEpIHtcbiAgICAgICAgLy9CbHVlXG4gICAgICAgIHNxUHVzaChCTFVFX1NXRUVQX1FVRVVFLCBCTFVFX1NXRUVQX0lOREVYLCBibHVlQWN0aXZlKyssIGlkKVxuICAgICAgfSBlbHNlIGlmKGNvbG9yID09PSAyKSB7XG4gICAgICAgIC8vQm90aFxuICAgICAgICBzcVB1c2goQ09NTU9OX1NXRUVQX1FVRVVFLCBDT01NT05fU1dFRVBfSU5ERVgsIGNvbW1vbkFjdGl2ZSsrLCBpZClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy9EZXN0cm95IGV2ZW50XG4gICAgICB2YXIgaWQgPSAoZT4+MSkgLSAxXG4gICAgICBpZihjb2xvciA9PT0gMCkge1xuICAgICAgICAvL1JlZFxuICAgICAgICBzcVBvcChSRURfU1dFRVBfUVVFVUUsIFJFRF9TV0VFUF9JTkRFWCwgcmVkQWN0aXZlLS0sIGlkKVxuICAgICAgfSBlbHNlIGlmKGNvbG9yID09PSAxKSB7XG4gICAgICAgIC8vQmx1ZVxuICAgICAgICBzcVBvcChCTFVFX1NXRUVQX1FVRVVFLCBCTFVFX1NXRUVQX0lOREVYLCBibHVlQWN0aXZlLS0sIGlkKVxuICAgICAgfSBlbHNlIGlmKGNvbG9yID09PSAyKSB7XG4gICAgICAgIC8vQm90aFxuICAgICAgICBzcVBvcChDT01NT05fU1dFRVBfUVVFVUUsIENPTU1PTl9TV0VFUF9JTkRFWCwgY29tbW9uQWN0aXZlLS0sIGlkKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vL1N3ZWVwIGFuZCBwcnVuZS9zY2FubGluZSBhbGdvcml0aG06XG4vLyAgU2NhbiBhbG9uZyBheGlzLCBkZXRlY3QgaW50ZXJzZWN0aW9uc1xuLy8gIEJydXRlIGZvcmNlIGFsbCBib3hlcyBhbG9uZyBheGlzXG5mdW5jdGlvbiBzY2FuQmlwYXJ0aXRlKFxuICBkLCBheGlzLCB2aXNpdCwgZmxpcCxcbiAgcmVkU3RhcnQsICByZWRFbmQsIHJlZCwgcmVkSW5kZXgsXG4gIGJsdWVTdGFydCwgYmx1ZUVuZCwgYmx1ZSwgYmx1ZUluZGV4KSB7XG4gIFxuICB2YXIgcHRyICAgICAgPSAwXG4gIHZhciBlbGVtU2l6ZSA9IDIqZFxuICB2YXIgaXN0YXJ0ICAgPSBheGlzXG4gIHZhciBpZW5kICAgICA9IGF4aXMrZFxuXG4gIHZhciByZWRTaGlmdCAgPSAxXG4gIHZhciBibHVlU2hpZnQgPSAxXG4gIGlmKGZsaXApIHtcbiAgICBibHVlU2hpZnQgPSBCTFVFX0ZMQUdcbiAgfSBlbHNlIHtcbiAgICByZWRTaGlmdCAgPSBCTFVFX0ZMQUdcbiAgfVxuXG4gIGZvcih2YXIgaT1yZWRTdGFydDsgaTxyZWRFbmQ7ICsraSkge1xuICAgIHZhciBpZHggPSBpICsgcmVkU2hpZnRcbiAgICB2YXIgcmVkT2Zmc2V0ID0gZWxlbVNpemUqaVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSByZWRbcmVkT2Zmc2V0K2lzdGFydF1cbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gLWlkeFxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSByZWRbcmVkT2Zmc2V0K2llbmRdXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IGlkeFxuICB9XG4gIGZvcih2YXIgaT1ibHVlU3RhcnQ7IGk8Ymx1ZUVuZDsgKytpKSB7XG4gICAgdmFyIGlkeCA9IGkgKyBibHVlU2hpZnRcbiAgICB2YXIgYmx1ZU9mZnNldCA9IGVsZW1TaXplKmlcbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gYmx1ZVtibHVlT2Zmc2V0K2lzdGFydF1cbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gLWlkeFxuICB9XG5cbiAgLy9wcm9jZXNzIGV2ZW50cyBmcm9tIGxlZnQtPnJpZ2h0XG4gIHZhciBuID0gcHRyID4+PiAxXG4gIGlzb3J0KFNXRUVQX0VWRU5UUywgbilcbiAgXG4gIHZhciByZWRBY3RpdmUgICAgPSAwXG4gIGZvcih2YXIgaT0wOyBpPG47ICsraSkge1xuICAgIHZhciBlID0gU1dFRVBfRVZFTlRTWzIqaSsxXXwwXG4gICAgaWYoZSA8IDApIHtcbiAgICAgIHZhciBpZHggICA9IC1lXG4gICAgICB2YXIgaXNSZWQgPSBmYWxzZVxuICAgICAgaWYoaWR4ID49IEJMVUVfRkxBRykge1xuICAgICAgICBpc1JlZCA9ICFmbGlwXG4gICAgICAgIGlkeCAtPSBCTFVFX0ZMQUcgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc1JlZCA9ICEhZmxpcFxuICAgICAgICBpZHggLT0gMVxuICAgICAgfVxuICAgICAgaWYoaXNSZWQpIHtcbiAgICAgICAgc3FQdXNoKFJFRF9TV0VFUF9RVUVVRSwgUkVEX1NXRUVQX0lOREVYLCByZWRBY3RpdmUrKywgaWR4KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGJsdWVJZCAgPSBibHVlSW5kZXhbaWR4XVxuICAgICAgICB2YXIgYmx1ZVB0ciA9IGVsZW1TaXplICogaWR4XG4gICAgICAgIFxuICAgICAgICB2YXIgYjAgPSBibHVlW2JsdWVQdHIrYXhpcysxXVxuICAgICAgICB2YXIgYjEgPSBibHVlW2JsdWVQdHIrYXhpcysxK2RdXG5cbnJlZF9sb29wOlxuICAgICAgICBmb3IodmFyIGo9MDsgajxyZWRBY3RpdmU7ICsraikge1xuICAgICAgICAgIHZhciBvaWR4ICAgPSBSRURfU1dFRVBfUVVFVUVbal1cbiAgICAgICAgICB2YXIgcmVkUHRyID0gZWxlbVNpemUgKiBvaWR4XG5cbiAgICAgICAgICBpZihiMSA8IHJlZFtyZWRQdHIrYXhpcysxXSB8fCBcbiAgICAgICAgICAgICByZWRbcmVkUHRyK2F4aXMrMStkXSA8IGIwKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvcih2YXIgaz1heGlzKzI7IGs8ZDsgKytrKSB7XG4gICAgICAgICAgICBpZihibHVlW2JsdWVQdHIgKyBrICsgZF0gPCByZWRbcmVkUHRyICsga10gfHwgXG4gICAgICAgICAgICAgICByZWRbcmVkUHRyICsgayArIGRdIDwgYmx1ZVtibHVlUHRyICsga10pIHtcbiAgICAgICAgICAgICAgY29udGludWUgcmVkX2xvb3BcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcmVkSWQgID0gcmVkSW5kZXhbb2lkeF1cbiAgICAgICAgICB2YXIgcmV0dmFsXG4gICAgICAgICAgaWYoZmxpcCkge1xuICAgICAgICAgICAgcmV0dmFsID0gdmlzaXQoYmx1ZUlkLCByZWRJZClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dmFsID0gdmlzaXQocmVkSWQsIGJsdWVJZClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYocmV0dmFsICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXR2YWwgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNxUG9wKFJFRF9TV0VFUF9RVUVVRSwgUkVEX1NXRUVQX0lOREVYLCByZWRBY3RpdmUtLSwgZSAtIHJlZFNoaWZ0KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzY2FuQ29tcGxldGUoXG4gIGQsIGF4aXMsIHZpc2l0LFxuICByZWRTdGFydCwgIHJlZEVuZCwgcmVkLCByZWRJbmRleCxcbiAgYmx1ZVN0YXJ0LCBibHVlRW5kLCBibHVlLCBibHVlSW5kZXgpIHtcblxuICB2YXIgcHRyICAgICAgPSAwXG4gIHZhciBlbGVtU2l6ZSA9IDIqZFxuICB2YXIgaXN0YXJ0ICAgPSBheGlzXG4gIHZhciBpZW5kICAgICA9IGF4aXMrZFxuXG4gIGZvcih2YXIgaT1yZWRTdGFydDsgaTxyZWRFbmQ7ICsraSkge1xuICAgIHZhciBpZHggPSBpICsgQkxVRV9GTEFHXG4gICAgdmFyIHJlZE9mZnNldCA9IGVsZW1TaXplKmlcbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gcmVkW3JlZE9mZnNldCtpc3RhcnRdXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IC1pZHhcbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gcmVkW3JlZE9mZnNldCtpZW5kXVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSBpZHhcbiAgfVxuICBmb3IodmFyIGk9Ymx1ZVN0YXJ0OyBpPGJsdWVFbmQ7ICsraSkge1xuICAgIHZhciBpZHggPSBpICsgMVxuICAgIHZhciBibHVlT2Zmc2V0ID0gZWxlbVNpemUqaVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSBibHVlW2JsdWVPZmZzZXQraXN0YXJ0XVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSAtaWR4XG4gIH1cblxuICAvL3Byb2Nlc3MgZXZlbnRzIGZyb20gbGVmdC0+cmlnaHRcbiAgdmFyIG4gPSBwdHIgPj4+IDFcbiAgaXNvcnQoU1dFRVBfRVZFTlRTLCBuKVxuICBcbiAgdmFyIHJlZEFjdGl2ZSAgICA9IDBcbiAgZm9yKHZhciBpPTA7IGk8bjsgKytpKSB7XG4gICAgdmFyIGUgPSBTV0VFUF9FVkVOVFNbMippKzFdfDBcbiAgICBpZihlIDwgMCkge1xuICAgICAgdmFyIGlkeCAgID0gLWVcbiAgICAgIGlmKGlkeCA+PSBCTFVFX0ZMQUcpIHtcbiAgICAgICAgUkVEX1NXRUVQX1FVRVVFW3JlZEFjdGl2ZSsrXSA9IGlkeCAtIEJMVUVfRkxBR1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWR4IC09IDFcbiAgICAgICAgdmFyIGJsdWVJZCAgPSBibHVlSW5kZXhbaWR4XVxuICAgICAgICB2YXIgYmx1ZVB0ciA9IGVsZW1TaXplICogaWR4XG5cbiAgICAgICAgdmFyIGIwID0gYmx1ZVtibHVlUHRyK2F4aXMrMV1cbiAgICAgICAgdmFyIGIxID0gYmx1ZVtibHVlUHRyK2F4aXMrMStkXVxuXG5yZWRfbG9vcDpcbiAgICAgICAgZm9yKHZhciBqPTA7IGo8cmVkQWN0aXZlOyArK2opIHtcbiAgICAgICAgICB2YXIgb2lkeCAgID0gUkVEX1NXRUVQX1FVRVVFW2pdXG4gICAgICAgICAgdmFyIHJlZElkICA9IHJlZEluZGV4W29pZHhdXG5cbiAgICAgICAgICBpZihyZWRJZCA9PT0gYmx1ZUlkKSB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByZWRQdHIgPSBlbGVtU2l6ZSAqIG9pZHhcbiAgICAgICAgICBpZihiMSA8IHJlZFtyZWRQdHIrYXhpcysxXSB8fCBcbiAgICAgICAgICAgIHJlZFtyZWRQdHIrYXhpcysxK2RdIDwgYjApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGZvcih2YXIgaz1heGlzKzI7IGs8ZDsgKytrKSB7XG4gICAgICAgICAgICBpZihibHVlW2JsdWVQdHIgKyBrICsgZF0gPCByZWRbcmVkUHRyICsga10gfHwgXG4gICAgICAgICAgICAgICByZWRbcmVkUHRyICsgayArIGRdICAgPCBibHVlW2JsdWVQdHIgKyBrXSkge1xuICAgICAgICAgICAgICBjb250aW51ZSByZWRfbG9vcFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByZXR2YWwgPSB2aXNpdChyZWRJZCwgYmx1ZUlkKVxuICAgICAgICAgIGlmKHJldHZhbCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0dmFsIFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaWR4ID0gZSAtIEJMVUVfRkxBR1xuICAgICAgZm9yKHZhciBqPXJlZEFjdGl2ZS0xOyBqPj0wOyAtLWopIHtcbiAgICAgICAgaWYoUkVEX1NXRUVQX1FVRVVFW2pdID09PSBpZHgpIHtcbiAgICAgICAgICBmb3IodmFyIGs9aisxOyBrPHJlZEFjdGl2ZTsgKytrKSB7XG4gICAgICAgICAgICBSRURfU1dFRVBfUVVFVUVbay0xXSA9IFJFRF9TV0VFUF9RVUVVRVtrXVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAtLXJlZEFjdGl2ZVxuICAgIH1cbiAgfVxufSIsbnVsbCwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzLWFycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxudmFyIGtNYXhMZW5ndGggPSAweDNmZmZmZmZmXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIE5vdGU6XG4gKlxuICogLSBJbXBsZW1lbnRhdGlvbiBtdXN0IHN1cHBvcnQgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMuXG4gKiAgIEZpcmVmb3ggNC0yOSBsYWNrZWQgc3VwcG9ydCwgZml4ZWQgaW4gRmlyZWZveCAzMCsuXG4gKiAgIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4LlxuICpcbiAqICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgaW5jb3JyZWN0IGxlbmd0aCBpbiBzb21lIHNpdHVhdGlvbnMuXG4gKlxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXkgd2lsbFxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgd2lsbCB3b3JrIGNvcnJlY3RseS5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSAoZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIHZhciBidWYgPSBuZXcgQXJyYXlCdWZmZXIoMClcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxuICAgIGFyci5mb28gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9XG4gICAgcmV0dXJuIDQyID09PSBhcnIuZm9vKCkgJiYgLy8gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWRcbiAgICAgICAgdHlwZW9mIGFyci5zdWJhcnJheSA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBjaHJvbWUgOS0xMCBsYWNrIGBzdWJhcnJheWBcbiAgICAgICAgbmV3IFVpbnQ4QXJyYXkoMSkuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn0pKClcblxuLyoqXG4gKiBDbGFzczogQnVmZmVyXG4gKiA9PT09PT09PT09PT09XG4gKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBhcmUgYXVnbWVudGVkXG4gKiB3aXRoIGZ1bmN0aW9uIHByb3BlcnRpZXMgZm9yIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBBUEkgZnVuY3Rpb25zLiBXZSB1c2VcbiAqIGBVaW50OEFycmF5YCBzbyB0aGF0IHNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0IHJldHVybnNcbiAqIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIEJ5IGF1Z21lbnRpbmcgdGhlIGluc3RhbmNlcywgd2UgY2FuIGF2b2lkIG1vZGlmeWluZyB0aGUgYFVpbnQ4QXJyYXlgXG4gKiBwcm90b3R5cGUuXG4gKi9cbmZ1bmN0aW9uIEJ1ZmZlciAoc3ViamVjdCwgZW5jb2RpbmcsIG5vWmVybykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSlcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcihzdWJqZWN0LCBlbmNvZGluZywgbm9aZXJvKVxuXG4gIHZhciB0eXBlID0gdHlwZW9mIHN1YmplY3RcblxuICAvLyBGaW5kIHRoZSBsZW5ndGhcbiAgdmFyIGxlbmd0aFxuICBpZiAodHlwZSA9PT0gJ251bWJlcicpXG4gICAgbGVuZ3RoID0gc3ViamVjdCA+IDAgPyBzdWJqZWN0ID4+PiAwIDogMFxuICBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgIGlmIChlbmNvZGluZyA9PT0gJ2Jhc2U2NCcpXG4gICAgICBzdWJqZWN0ID0gYmFzZTY0Y2xlYW4oc3ViamVjdClcbiAgICBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChzdWJqZWN0LCBlbmNvZGluZylcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0JyAmJiBzdWJqZWN0ICE9PSBudWxsKSB7IC8vIGFzc3VtZSBvYmplY3QgaXMgYXJyYXktbGlrZVxuICAgIGlmIChzdWJqZWN0LnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkoc3ViamVjdC5kYXRhKSlcbiAgICAgIHN1YmplY3QgPSBzdWJqZWN0LmRhdGFcbiAgICBsZW5ndGggPSArc3ViamVjdC5sZW5ndGggPiAwID8gTWF0aC5mbG9vcigrc3ViamVjdC5sZW5ndGgpIDogMFxuICB9IGVsc2VcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IHN0YXJ0IHdpdGggbnVtYmVyLCBidWZmZXIsIGFycmF5IG9yIHN0cmluZycpXG5cbiAgaWYgKHRoaXMubGVuZ3RoID4ga01heExlbmd0aClcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICdzaXplOiAweCcgKyBrTWF4TGVuZ3RoLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuXG4gIHZhciBidWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUHJlZmVycmVkOiBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIGJ1ZiA9IEJ1ZmZlci5fYXVnbWVudChuZXcgVWludDhBcnJheShsZW5ndGgpKVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gVEhJUyBpbnN0YW5jZSBvZiBCdWZmZXIgKGNyZWF0ZWQgYnkgYG5ld2ApXG4gICAgYnVmID0gdGhpc1xuICAgIGJ1Zi5sZW5ndGggPSBsZW5ndGhcbiAgICBidWYuX2lzQnVmZmVyID0gdHJ1ZVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBzdWJqZWN0LmJ5dGVMZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgLy8gU3BlZWQgb3B0aW1pemF0aW9uIC0tIHVzZSBzZXQgaWYgd2UncmUgY29weWluZyBmcm9tIGEgdHlwZWQgYXJyYXlcbiAgICBidWYuX3NldChzdWJqZWN0KVxuICB9IGVsc2UgaWYgKGlzQXJyYXlpc2goc3ViamVjdCkpIHtcbiAgICAvLyBUcmVhdCBhcnJheS1pc2ggb2JqZWN0cyBhcyBhIGJ5dGUgYXJyYXlcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN1YmplY3QpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAgICAgIGJ1ZltpXSA9IHN1YmplY3QucmVhZFVJbnQ4KGkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICAgICAgYnVmW2ldID0gKChzdWJqZWN0W2ldICUgMjU2KSArIDI1NikgJSAyNTZcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBidWYud3JpdGUoc3ViamVjdCwgMCwgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmICFub1plcm8pIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZltpXSA9IDBcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIChiKSB7XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSlcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuICYmIGFbaV0gPT09IGJbaV07IGkrKykge31cbiAgaWYgKGkgIT09IGxlbikge1xuICAgIHggPSBhW2ldXG4gICAgeSA9IGJbaV1cbiAgfVxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICdyYXcnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gKGxpc3QsIHRvdGFsTGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVXNhZ2U6IEJ1ZmZlci5jb25jYXQobGlzdFssIGxlbmd0aF0pJylcblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcigwKVxuICB9IGVsc2UgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGxpc3RbMF1cbiAgfVxuXG4gIHZhciBpXG4gIGlmICh0b3RhbExlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdG90YWxMZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRvdGFsTGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIodG90YWxMZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldXG4gICAgaXRlbS5jb3B5KGJ1ZiwgcG9zKVxuICAgIHBvcyArPSBpdGVtLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZcbn1cblxuQnVmZmVyLmJ5dGVMZW5ndGggPSBmdW5jdGlvbiAoc3RyLCBlbmNvZGluZykge1xuICB2YXIgcmV0XG4gIHN0ciA9IHN0ciArICcnXG4gIHN3aXRjaCAoZW5jb2RpbmcgfHwgJ3V0ZjgnKSB7XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAncmF3JzpcbiAgICAgIHJldCA9IHN0ci5sZW5ndGhcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldCA9IHN0ci5sZW5ndGggKiAyXG4gICAgICBicmVha1xuICAgIGNhc2UgJ2hleCc6XG4gICAgICByZXQgPSBzdHIubGVuZ3RoID4+PiAxXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIHJldCA9IHV0ZjhUb0J5dGVzKHN0cikubGVuZ3RoXG4gICAgICBicmVha1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICByZXQgPSBiYXNlNjRUb0J5dGVzKHN0cikubGVuZ3RoXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXQgPSBzdHIubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG4vLyBwcmUtc2V0IGZvciB2YWx1ZXMgdGhhdCBtYXkgZXhpc3QgaW4gdGhlIGZ1dHVyZVxuQnVmZmVyLnByb3RvdHlwZS5sZW5ndGggPSB1bmRlZmluZWRcbkJ1ZmZlci5wcm90b3R5cGUucGFyZW50ID0gdW5kZWZpbmVkXG5cbi8vIHRvU3RyaW5nKGVuY29kaW5nLCBzdGFydD0wLCBlbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA9PT0gSW5maW5pdHkgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG4gIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiAnJ1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGJpbmFyeVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSlcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKGIpIHtcbiAgaWYoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5tYXRjaCgvLnsyfS9nKS5qb2luKCcgJylcbiAgICBpZiAodGhpcy5sZW5ndGggPiBtYXgpXG4gICAgICBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpXG59XG5cbi8vIGBnZXRgIHdpbGwgYmUgcmVtb3ZlZCBpbiBOb2RlIDAuMTMrXG5CdWZmZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChvZmZzZXQpIHtcbiAgY29uc29sZS5sb2coJy5nZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLicpXG4gIHJldHVybiB0aGlzLnJlYWRVSW50OChvZmZzZXQpXG59XG5cbi8vIGBzZXRgIHdpbGwgYmUgcmVtb3ZlZCBpbiBOb2RlIDAuMTMrXG5CdWZmZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh2LCBvZmZzZXQpIHtcbiAgY29uc29sZS5sb2coJy5zZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLicpXG4gIHJldHVybiB0aGlzLndyaXRlVUludDgodiwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgZGlnaXRzXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChzdHJMZW4gJSAyICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBieXRlID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChpc05hTihieXRlKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICB2YXIgY2hhcnNXcml0dGVuID0gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxuICByZXR1cm4gY2hhcnNXcml0dGVuXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICB2YXIgY2hhcnNXcml0dGVuID0gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbiAgcmV0dXJuIGNoYXJzV3JpdHRlblxufVxuXG5mdW5jdGlvbiBiaW5hcnlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICB2YXIgY2hhcnNXcml0dGVuID0gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG4gIHJldHVybiBjaGFyc1dyaXR0ZW5cbn1cblxuZnVuY3Rpb24gdXRmMTZsZVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgdmFyIGNoYXJzV3JpdHRlbiA9IGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aCwgMilcbiAgcmV0dXJuIGNoYXJzV3JpdHRlblxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIFN1cHBvcnQgYm90aCAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpXG4gIC8vIGFuZCB0aGUgbGVnYWN5IChzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBpZiAoIWlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIH0gZWxzZSB7ICAvLyBsZWdhY3lcbiAgICB2YXIgc3dhcCA9IGVuY29kaW5nXG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBvZmZzZXQgPSBsZW5ndGhcbiAgICBsZW5ndGggPSBzd2FwXG4gIH1cblxuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG4gIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKVxuXG4gIHZhciByZXRcbiAgc3dpdGNoIChlbmNvZGluZykge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgICByZXQgPSBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgICByZXQgPSB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYXNjaWknOlxuICAgICAgcmV0ID0gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdiaW5hcnknOlxuICAgICAgcmV0ID0gYmluYXJ5V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIHJldCA9IGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXQgPSB1dGYxNmxlV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmVzID0gJydcbiAgdmFyIHRtcCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIGlmIChidWZbaV0gPD0gMHg3Rikge1xuICAgICAgcmVzICs9IGRlY29kZVV0ZjhDaGFyKHRtcCkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgICAgIHRtcCA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRtcCArPSAnJScgKyBidWZbaV0udG9TdHJpbmcoMTYpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcyArIGRlY29kZVV0ZjhDaGFyKHRtcClcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBiaW5hcnlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHJldHVybiBhc2NpaVNsaWNlKGJ1Ziwgc3RhcnQsIGVuZClcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuO1xuICAgIGlmIChzdGFydCA8IDApXG4gICAgICBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMClcbiAgICAgIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydClcbiAgICBlbmQgPSBzdGFydFxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHJldHVybiBCdWZmZXIuX2F1Z21lbnQodGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSlcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xpY2VMZW4gPSBlbmQgLSBzdGFydFxuICAgIHZhciBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQsIHRydWUpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgaSsrKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gICAgcmV0dXJuIG5ld0J1ZlxuICB9XG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpXG4gICAgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdidWZmZXIgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsdWUgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICB0aGlzW29mZnNldF0gPSB2YWx1ZVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQxNiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCAyKTsgaSA8IGo7IGkrKykge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSAmICgweGZmIDw8ICg4ICogKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkpKSkgPj4+XG4gICAgICAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSAqIDhcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSB2YWx1ZVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlXG4gIH0gZWxzZSBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgaSsrKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlXG4gIH0gZWxzZSBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZVxuICB9IGVsc2Ugb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSB2YWx1ZVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZVxuICB9IGVsc2Ugb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSB2YWx1ZVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gdmFsdWVcbiAgfSBlbHNlIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbHVlIGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRfc3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHNvdXJjZSA9IHRoaXNcblxuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAoIXRhcmdldF9zdGFydCkgdGFyZ2V0X3N0YXJ0ID0gMFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHNvdXJjZS5sZW5ndGggPT09IDApIHJldHVyblxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKGVuZCA8IHN0YXJ0KSB0aHJvdyBuZXcgVHlwZUVycm9yKCdzb3VyY2VFbmQgPCBzb3VyY2VTdGFydCcpXG4gIGlmICh0YXJnZXRfc3RhcnQgPCAwIHx8IHRhcmdldF9zdGFydCA+PSB0YXJnZXQubGVuZ3RoKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHNvdXJjZS5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCB8fCBlbmQgPiBzb3VyY2UubGVuZ3RoKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKVxuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0X3N0YXJ0IDwgZW5kIC0gc3RhcnQpXG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldF9zdGFydCArIHN0YXJ0XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG5cbiAgaWYgKGxlbiA8IDEwMDAgfHwgIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRfc3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRhcmdldC5fc2V0KHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSwgdGFyZ2V0X3N0YXJ0KVxuICB9XG59XG5cbi8vIGZpbGwodmFsdWUsIHN0YXJ0PTAsIGVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gKHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gIGlmICghdmFsdWUpIHZhbHVlID0gMFxuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQpIGVuZCA9IHRoaXMubGVuZ3RoXG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmQgPCBzdGFydCcpXG5cbiAgLy8gRmlsbCAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm5cbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDAgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuZCBvdXQgb2YgYm91bmRzJylcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHRoaXNbaV0gPSB2YWx1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSB1dGY4VG9CeXRlcyh2YWx1ZS50b1N0cmluZygpKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICB0aGlzW2ldID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgYEFycmF5QnVmZmVyYCB3aXRoIHRoZSAqY29waWVkKiBtZW1vcnkgb2YgdGhlIGJ1ZmZlciBpbnN0YW5jZS5cbiAqIEFkZGVkIGluIE5vZGUgMC4xMi4gT25seSBhdmFpbGFibGUgaW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IEFycmF5QnVmZmVyLlxuICovXG5CdWZmZXIucHJvdG90eXBlLnRvQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAgIHJldHVybiAobmV3IEJ1ZmZlcih0aGlzKSkuYnVmZmVyXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aClcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBidWYubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgYnVmW2ldID0gdGhpc1tpXVxuICAgICAgfVxuICAgICAgcmV0dXJuIGJ1Zi5idWZmZXJcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQnVmZmVyLnRvQXJyYXlCdWZmZXIgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXInKVxuICB9XG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIEJQID0gQnVmZmVyLnByb3RvdHlwZVxuXG4vKipcbiAqIEF1Z21lbnQgYSBVaW50OEFycmF5ICppbnN0YW5jZSogKG5vdCB0aGUgVWludDhBcnJheSBjbGFzcyEpIHdpdGggQnVmZmVyIG1ldGhvZHNcbiAqL1xuQnVmZmVyLl9hdWdtZW50ID0gZnVuY3Rpb24gKGFycikge1xuICBhcnIuY29uc3RydWN0b3IgPSBCdWZmZXJcbiAgYXJyLl9pc0J1ZmZlciA9IHRydWVcblxuICAvLyBzYXZlIHJlZmVyZW5jZSB0byBvcmlnaW5hbCBVaW50OEFycmF5IGdldC9zZXQgbWV0aG9kcyBiZWZvcmUgb3ZlcndyaXRpbmdcbiAgYXJyLl9nZXQgPSBhcnIuZ2V0XG4gIGFyci5fc2V0ID0gYXJyLnNldFxuXG4gIC8vIGRlcHJlY2F0ZWQsIHdpbGwgYmUgcmVtb3ZlZCBpbiBub2RlIDAuMTMrXG4gIGFyci5nZXQgPSBCUC5nZXRcbiAgYXJyLnNldCA9IEJQLnNldFxuXG4gIGFyci53cml0ZSA9IEJQLndyaXRlXG4gIGFyci50b1N0cmluZyA9IEJQLnRvU3RyaW5nXG4gIGFyci50b0xvY2FsZVN0cmluZyA9IEJQLnRvU3RyaW5nXG4gIGFyci50b0pTT04gPSBCUC50b0pTT05cbiAgYXJyLmVxdWFscyA9IEJQLmVxdWFsc1xuICBhcnIuY29tcGFyZSA9IEJQLmNvbXBhcmVcbiAgYXJyLmNvcHkgPSBCUC5jb3B5XG4gIGFyci5zbGljZSA9IEJQLnNsaWNlXG4gIGFyci5yZWFkVUludDggPSBCUC5yZWFkVUludDhcbiAgYXJyLnJlYWRVSW50MTZMRSA9IEJQLnJlYWRVSW50MTZMRVxuICBhcnIucmVhZFVJbnQxNkJFID0gQlAucmVhZFVJbnQxNkJFXG4gIGFyci5yZWFkVUludDMyTEUgPSBCUC5yZWFkVUludDMyTEVcbiAgYXJyLnJlYWRVSW50MzJCRSA9IEJQLnJlYWRVSW50MzJCRVxuICBhcnIucmVhZEludDggPSBCUC5yZWFkSW50OFxuICBhcnIucmVhZEludDE2TEUgPSBCUC5yZWFkSW50MTZMRVxuICBhcnIucmVhZEludDE2QkUgPSBCUC5yZWFkSW50MTZCRVxuICBhcnIucmVhZEludDMyTEUgPSBCUC5yZWFkSW50MzJMRVxuICBhcnIucmVhZEludDMyQkUgPSBCUC5yZWFkSW50MzJCRVxuICBhcnIucmVhZEZsb2F0TEUgPSBCUC5yZWFkRmxvYXRMRVxuICBhcnIucmVhZEZsb2F0QkUgPSBCUC5yZWFkRmxvYXRCRVxuICBhcnIucmVhZERvdWJsZUxFID0gQlAucmVhZERvdWJsZUxFXG4gIGFyci5yZWFkRG91YmxlQkUgPSBCUC5yZWFkRG91YmxlQkVcbiAgYXJyLndyaXRlVUludDggPSBCUC53cml0ZVVJbnQ4XG4gIGFyci53cml0ZVVJbnQxNkxFID0gQlAud3JpdGVVSW50MTZMRVxuICBhcnIud3JpdGVVSW50MTZCRSA9IEJQLndyaXRlVUludDE2QkVcbiAgYXJyLndyaXRlVUludDMyTEUgPSBCUC53cml0ZVVJbnQzMkxFXG4gIGFyci53cml0ZVVJbnQzMkJFID0gQlAud3JpdGVVSW50MzJCRVxuICBhcnIud3JpdGVJbnQ4ID0gQlAud3JpdGVJbnQ4XG4gIGFyci53cml0ZUludDE2TEUgPSBCUC53cml0ZUludDE2TEVcbiAgYXJyLndyaXRlSW50MTZCRSA9IEJQLndyaXRlSW50MTZCRVxuICBhcnIud3JpdGVJbnQzMkxFID0gQlAud3JpdGVJbnQzMkxFXG4gIGFyci53cml0ZUludDMyQkUgPSBCUC53cml0ZUludDMyQkVcbiAgYXJyLndyaXRlRmxvYXRMRSA9IEJQLndyaXRlRmxvYXRMRVxuICBhcnIud3JpdGVGbG9hdEJFID0gQlAud3JpdGVGbG9hdEJFXG4gIGFyci53cml0ZURvdWJsZUxFID0gQlAud3JpdGVEb3VibGVMRVxuICBhcnIud3JpdGVEb3VibGVCRSA9IEJQLndyaXRlRG91YmxlQkVcbiAgYXJyLmZpbGwgPSBCUC5maWxsXG4gIGFyci5pbnNwZWN0ID0gQlAuaW5zcGVjdFxuICBhcnIudG9BcnJheUJ1ZmZlciA9IEJQLnRvQXJyYXlCdWZmZXJcblxuICByZXR1cm4gYXJyXG59XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXitcXC8wLTlBLXpdL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiBpc0FycmF5aXNoIChzdWJqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5KHN1YmplY3QpIHx8IEJ1ZmZlci5pc0J1ZmZlcihzdWJqZWN0KSB8fFxuICAgICAgc3ViamVjdCAmJiB0eXBlb2Ygc3ViamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHR5cGVvZiBzdWJqZWN0Lmxlbmd0aCA9PT0gJ251bWJlcidcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIHZhciBiID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBpZiAoYiA8PSAweDdGKSB7XG4gICAgICBieXRlQXJyYXkucHVzaChiKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhcnQgPSBpXG4gICAgICBpZiAoYiA+PSAweEQ4MDAgJiYgYiA8PSAweERGRkYpIGkrK1xuICAgICAgdmFyIGggPSBlbmNvZGVVUklDb21wb25lbnQoc3RyLnNsaWNlKHN0YXJ0LCBpKzEpKS5zdWJzdHIoMSkuc3BsaXQoJyUnKVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBoLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGJ5dGVBcnJheS5wdXNoKHBhcnNlSW50KGhbal0sIDE2KSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoc3RyKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgsIHVuaXRTaXplKSB7XG4gIGlmICh1bml0U2l6ZSkgbGVuZ3RoIC09IGxlbmd0aCAlIHVuaXRTaXplO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKVxuICAgICAgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiBkZWNvZGVVdGY4Q2hhciAoc3RyKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RkZGRCkgLy8gVVRGIDggaW52YWxpZCBjaGFyXG4gIH1cbn1cbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzLyQuY29yZScpLkFycmF5LmZyb207IiwicmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvcicpOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvY29yZS5pcy1pdGVyYWJsZScpOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5tYXAnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvJC5jb3JlJykuTWFwOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm1hdGgubG9nMicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzLyQuY29yZScpLk1hdGgubG9nMjsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJC5jb3JlJykuT2JqZWN0LmFzc2lnbjsiLCJ2YXIgJCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCl7XG4gIHJldHVybiAkLmNyZWF0ZShQLCBEKTtcbn07IiwidmFyICQgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzLyQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhULCBEKXtcbiAgcmV0dXJuICQuc2V0RGVzY3MoVCwgRCk7XG59OyIsInZhciAkID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy8kJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2Mpe1xuICByZXR1cm4gJC5zZXREZXNjKGl0LCBrZXksIGRlc2MpO1xufTsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJC5jb3JlJykuT2JqZWN0LmZyZWV6ZTsiLCJ2YXIgJCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSl7XG4gIHJldHVybiAkLmdldERlc2MoaXQsIGtleSk7XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJC5jb3JlJykuT2JqZWN0LmtleXM7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy8kLmNvcmUnKS5PYmplY3Quc2V0UHJvdG90eXBlT2Y7IiwicmVxdWlyZSgnLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy8kLmNvcmUnKS5Qcm9taXNlOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvJC5jb3JlJykuU2V0OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzLyQuY29yZScpLlN5bWJvbDsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzLyQud2tzJykoJ2l0ZXJhdG9yJyk7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpeyAvKiBlbXB0eSAqLyB9OyIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vJC5pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICBpZighaXNPYmplY3QoaXQpKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTsiLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vJC5jb2YnKVxuICAsIFRBRyA9IHJlcXVpcmUoJy4vJC53a3MnKSgndG9TdHJpbmdUYWcnKVxuICAvLyBFUzMgd3JvbmcgaGVyZVxuICAsIEFSRyA9IGNvZihmdW5jdGlvbigpeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gKE8gPSBPYmplY3QoaXQpKVtUQUddKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07IiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgJCAgICAgICAgICAgID0gcmVxdWlyZSgnLi8kJylcbiAgLCBoaWRlICAgICAgICAgPSByZXF1aXJlKCcuLyQuaGlkZScpXG4gICwgcmVkZWZpbmVBbGwgID0gcmVxdWlyZSgnLi8kLnJlZGVmaW5lLWFsbCcpXG4gICwgY3R4ICAgICAgICAgID0gcmVxdWlyZSgnLi8kLmN0eCcpXG4gICwgc3RyaWN0TmV3ICAgID0gcmVxdWlyZSgnLi8kLnN0cmljdC1uZXcnKVxuICAsIGRlZmluZWQgICAgICA9IHJlcXVpcmUoJy4vJC5kZWZpbmVkJylcbiAgLCBmb3JPZiAgICAgICAgPSByZXF1aXJlKCcuLyQuZm9yLW9mJylcbiAgLCAkaXRlckRlZmluZSAgPSByZXF1aXJlKCcuLyQuaXRlci1kZWZpbmUnKVxuICAsIHN0ZXAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5pdGVyLXN0ZXAnKVxuICAsIElEICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC51aWQnKSgnaWQnKVxuICAsICRoYXMgICAgICAgICA9IHJlcXVpcmUoJy4vJC5oYXMnKVxuICAsIGlzT2JqZWN0ICAgICA9IHJlcXVpcmUoJy4vJC5pcy1vYmplY3QnKVxuICAsIHNldFNwZWNpZXMgICA9IHJlcXVpcmUoJy4vJC5zZXQtc3BlY2llcycpXG4gICwgREVTQ1JJUFRPUlMgID0gcmVxdWlyZSgnLi8kLmRlc2NyaXB0b3JzJylcbiAgLCBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGlzT2JqZWN0XG4gICwgU0laRSAgICAgICAgID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnXG4gICwgaWQgICAgICAgICAgID0gMDtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbihpdCwgY3JlYXRlKXtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZighaXNPYmplY3QoaXQpKXJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmKCEkaGFzKGl0LCBJRCkpe1xuICAgIC8vIGNhbid0IHNldCBpZCB0byBmcm96ZW4gb2JqZWN0XG4gICAgaWYoIWlzRXh0ZW5zaWJsZShpdCkpcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBpZFxuICAgIGlmKCFjcmVhdGUpcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBvYmplY3QgaWRcbiAgICBoaWRlKGl0LCBJRCwgKytpZCk7XG4gIC8vIHJldHVybiBvYmplY3QgaWQgd2l0aCBwcmVmaXhcbiAgfSByZXR1cm4gJ08nICsgaXRbSURdO1xufTtcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24odGhhdCwga2V5KXtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KSwgZW50cnk7XG4gIGlmKGluZGV4ICE9PSAnRicpcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubil7XG4gICAgaWYoZW50cnkuayA9PSBrZXkpcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpe1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbih0aGF0LCBpdGVyYWJsZSl7XG4gICAgICBzdHJpY3ROZXcodGhhdCwgQywgTkFNRSk7XG4gICAgICB0aGF0Ll9pID0gJC5jcmVhdGUobnVsbCk7IC8vIGluZGV4XG4gICAgICB0aGF0Ll9mID0gdW5kZWZpbmVkOyAgICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgICAgLy8gc2l6ZVxuICAgICAgaWYoaXRlcmFibGUgIT0gdW5kZWZpbmVkKWZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpe1xuICAgICAgICBmb3IodmFyIHRoYXQgPSB0aGlzLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKXtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZihlbnRyeS5wKWVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uKGtleSl7XG4gICAgICAgIHZhciB0aGF0ICA9IHRoaXNcbiAgICAgICAgICAsIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYoZW50cnkpe1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkublxuICAgICAgICAgICAgLCBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZihwcmV2KXByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYobmV4dCluZXh0LnAgPSBwcmV2O1xuICAgICAgICAgIGlmKHRoYXQuX2YgPT0gZW50cnkpdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYodGhhdC5fbCA9PSBlbnRyeSl0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiwgdGhhdCA9IHVuZGVmaW5lZCAqLyl7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKVxuICAgICAgICAgICwgZW50cnk7XG4gICAgICAgIHdoaWxlKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhpcy5fZil7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZShlbnRyeSAmJiBlbnRyeS5yKWVudHJ5ID0gZW50cnkucDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy43IE1hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjIuMy43IFNldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KXtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZihERVNDUklQVE9SUykkLnNldERlc2MoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gZGVmaW5lZCh0aGlzW1NJWkVdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbih0aGF0LCBrZXksIHZhbHVlKXtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpXG4gICAgICAsIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmKGVudHJ5KXtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmKCF0aGF0Ll9mKXRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmKHByZXYpcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmKGluZGV4ICE9PSAnRicpdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24oQywgTkFNRSwgSVNfTUFQKXtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuICAgICAgdGhpcy5fdCA9IGl0ZXJhdGVkOyAgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgdGhhdCAgPSB0aGlzXG4gICAgICAgICwga2luZCAgPSB0aGF0Ll9rXG4gICAgICAgICwgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZShlbnRyeSAmJiBlbnRyeS5yKWVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZighdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKXtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZihraW5kID09ICdrZXlzJyAgKXJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYoa2luZCA9PSAndmFsdWVzJylyZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycgLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTsiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgZm9yT2YgICA9IHJlcXVpcmUoJy4vJC5mb3Itb2YnKVxuICAsIGNsYXNzb2YgPSByZXF1aXJlKCcuLyQuY2xhc3NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihOQU1FKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpe1xuICAgIGlmKGNsYXNzb2YodGhpcykgIT0gTkFNRSl0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHZhciBhcnIgPSBbXTtcbiAgICBmb3JPZih0aGlzLCBmYWxzZSwgYXJyLnB1c2gsIGFycik7XG4gICAgcmV0dXJuIGFycjtcbiAgfTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi8kJylcbiAgLCBnbG9iYWwgICAgICAgICA9IHJlcXVpcmUoJy4vJC5nbG9iYWwnKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi8kLmV4cG9ydCcpXG4gICwgZmFpbHMgICAgICAgICAgPSByZXF1aXJlKCcuLyQuZmFpbHMnKVxuICAsIGhpZGUgICAgICAgICAgID0gcmVxdWlyZSgnLi8kLmhpZGUnKVxuICAsIHJlZGVmaW5lQWxsICAgID0gcmVxdWlyZSgnLi8kLnJlZGVmaW5lLWFsbCcpXG4gICwgZm9yT2YgICAgICAgICAgPSByZXF1aXJlKCcuLyQuZm9yLW9mJylcbiAgLCBzdHJpY3ROZXcgICAgICA9IHJlcXVpcmUoJy4vJC5zdHJpY3QtbmV3JylcbiAgLCBpc09iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vJC5pcy1vYmplY3QnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi8kLnNldC10by1zdHJpbmctdGFnJylcbiAgLCBERVNDUklQVE9SUyAgICA9IHJlcXVpcmUoJy4vJC5kZXNjcmlwdG9ycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKXtcbiAgdmFyIEJhc2UgID0gZ2xvYmFsW05BTUVdXG4gICAgLCBDICAgICA9IEJhc2VcbiAgICAsIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJ1xuICAgICwgcHJvdG8gPSBDICYmIEMucHJvdG90eXBlXG4gICAgLCBPICAgICA9IHt9O1xuICBpZighREVTQ1JJUFRPUlMgfHwgdHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24oKXtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSl7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgfSBlbHNlIHtcbiAgICBDID0gd3JhcHBlcihmdW5jdGlvbih0YXJnZXQsIGl0ZXJhYmxlKXtcbiAgICAgIHN0cmljdE5ldyh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgdGFyZ2V0Ll9jID0gbmV3IEJhc2U7XG4gICAgICBpZihpdGVyYWJsZSAhPSB1bmRlZmluZWQpZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGFyZ2V0W0FEREVSXSwgdGFyZ2V0KTtcbiAgICB9KTtcbiAgICAkLmVhY2guY2FsbCgnYWRkLGNsZWFyLGRlbGV0ZSxmb3JFYWNoLGdldCxoYXMsc2V0LGtleXMsdmFsdWVzLGVudHJpZXMnLnNwbGl0KCcsJyksZnVuY3Rpb24oS0VZKXtcbiAgICAgIHZhciBJU19BRERFUiA9IEtFWSA9PSAnYWRkJyB8fCBLRVkgPT0gJ3NldCc7XG4gICAgICBpZihLRVkgaW4gcHJvdG8gJiYgIShJU19XRUFLICYmIEtFWSA9PSAnY2xlYXInKSloaWRlKEMucHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgICBpZighSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpcmV0dXJuIEtFWSA9PSAnZ2V0JyA/IHVuZGVmaW5lZCA6IGZhbHNlO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fY1tLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZignc2l6ZScgaW4gcHJvdG8pJC5zZXREZXNjKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Muc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiwgTyk7XG5cbiAgaWYoIUlTX1dFQUspY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDO1xufTsiLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0ge3ZlcnNpb246ICcxLjIuNid9O1xuaWYodHlwZW9mIF9fZSA9PSAnbnVtYmVyJylfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi8kLmEtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4sIHRoYXQsIGxlbmd0aCl7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmKHRoYXQgPT09IHVuZGVmaW5lZClyZXR1cm4gZm47XG4gIHN3aXRjaChsZW5ndGgpe1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKGEpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbihhLCBiKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24oYSwgYiwgYyl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbigvKiAuLi5hcmdzICovKXtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07IiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICBpZihpdCA9PSB1bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59OyIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vJC5mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywge2dldDogZnVuY3Rpb24oKXsgcmV0dXJuIDc7IH19KS5hICE9IDc7XG59KTsiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLyQuaXMtb2JqZWN0JylcbiAgLCBkb2N1bWVudCA9IHJlcXVpcmUoJy4vJC5nbG9iYWwnKS5kb2N1bWVudFxuICAvLyBpbiBvbGQgSUUgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCdcbiAgLCBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTsiLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyICQgPSByZXF1aXJlKCcuLyQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICB2YXIga2V5cyAgICAgICA9ICQuZ2V0S2V5cyhpdClcbiAgICAsIGdldFN5bWJvbHMgPSAkLmdldFN5bWJvbHM7XG4gIGlmKGdldFN5bWJvbHMpe1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdClcbiAgICAgICwgaXNFbnVtICA9ICQuaXNFbnVtXG4gICAgICAsIGkgICAgICAgPSAwXG4gICAgICAsIGtleTtcbiAgICB3aGlsZShzeW1ib2xzLmxlbmd0aCA+IGkpaWYoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpa2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59OyIsInZhciBnbG9iYWwgICAgPSByZXF1aXJlKCcuLyQuZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgPSByZXF1aXJlKCcuLyQuY29yZScpXG4gICwgY3R4ICAgICAgID0gcmVxdWlyZSgnLi8kLmN0eCcpXG4gICwgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgc291cmNlKXtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkZcbiAgICAsIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0LkdcbiAgICAsIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlNcbiAgICAsIElTX1BST1RPICA9IHR5cGUgJiAkZXhwb3J0LlBcbiAgICAsIElTX0JJTkQgICA9IHR5cGUgJiAkZXhwb3J0LkJcbiAgICAsIElTX1dSQVAgICA9IHR5cGUgJiAkZXhwb3J0LldcbiAgICAsIGV4cG9ydHMgICA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pXG4gICAgLCB0YXJnZXQgICAgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdXG4gICAgLCBrZXksIG93biwgb3V0O1xuICBpZihJU19HTE9CQUwpc291cmNlID0gbmFtZTtcbiAgZm9yKGtleSBpbiBzb3VyY2Upe1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIGtleSBpbiB0YXJnZXQ7XG4gICAgaWYob3duICYmIGtleSBpbiBleHBvcnRzKWNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24oQyl7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICAgICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBDID8gbmV3IEMocGFyYW0pIDogQyhwYXJhbSk7XG4gICAgICB9O1xuICAgICAgRltQUk9UT1RZUEVdID0gQ1tQUk9UT1RZUEVdO1xuICAgICAgcmV0dXJuIEY7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgfSkob3V0KSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIGlmKElTX1BST1RPKShleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KSlba2V5XSA9IG91dDtcbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgLy8gd3JhcFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZXhlYyl7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59OyIsInZhciBjdHggICAgICAgICA9IHJlcXVpcmUoJy4vJC5jdHgnKVxuICAsIGNhbGwgICAgICAgID0gcmVxdWlyZSgnLi8kLml0ZXItY2FsbCcpXG4gICwgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuLyQuaXMtYXJyYXktaXRlcicpXG4gICwgYW5PYmplY3QgICAgPSByZXF1aXJlKCcuLyQuYW4tb2JqZWN0JylcbiAgLCB0b0xlbmd0aCAgICA9IHJlcXVpcmUoJy4vJC50by1sZW5ndGgnKVxuICAsIGdldEl0ZXJGbiAgID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0KXtcbiAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihpdGVyYWJsZSlcbiAgICAsIGYgICAgICA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKVxuICAgICwgaW5kZXggID0gMFxuICAgICwgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvcjtcbiAgaWYodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYoaXNBcnJheUl0ZXIoaXRlckZuKSlmb3IobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4Kyspe1xuICAgIGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgfSBlbHNlIGZvcihpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyApe1xuICAgIGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICB9XG59OyIsIi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuLyQudG8taW9iamVjdCcpXG4gICwgZ2V0TmFtZXMgID0gcmVxdWlyZSgnLi8kJykuZ2V0TmFtZXNcbiAgLCB0b1N0cmluZyAgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24oaXQpe1xuICB0cnkge1xuICAgIHJldHVybiBnZXROYW1lcyhpdCk7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmdldCA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpe1xuICBpZih3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJylyZXR1cm4gZ2V0V2luZG93TmFtZXMoaXQpO1xuICByZXR1cm4gZ2V0TmFtZXModG9JT2JqZWN0KGl0KSk7XG59OyIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGYgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYodHlwZW9mIF9fZyA9PSAnbnVtYmVyJylfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWYiLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIGtleSl7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTsiLCJ2YXIgJCAgICAgICAgICA9IHJlcXVpcmUoJy4vJCcpXG4gICwgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vJC5wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vJC5kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgcmV0dXJuICQuc2V0RGVzYyhvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uKG9iamVjdCwga2V5LCB2YWx1ZSl7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi8kLmdsb2JhbCcpLmRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsiLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4sIGFyZ3MsIHRoYXQpe1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaChhcmdzLmxlbmd0aCl7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07IiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuLyQuY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59OyIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgID0gcmVxdWlyZSgnLi8kLml0ZXJhdG9ycycpXG4gICwgSVRFUkFUT1IgICA9IHJlcXVpcmUoJy4vJC53a3MnKSgnaXRlcmF0b3InKVxuICAsIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTsiLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vJC5jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbihhcmcpe1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59OyIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vJC5hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcyl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaChlKXtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmKHJldCAhPT0gdW5kZWZpbmVkKWFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTsiLCIndXNlIHN0cmljdCc7XG52YXIgJCAgICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQnKVxuICAsIGRlc2NyaXB0b3IgICAgID0gcmVxdWlyZSgnLi8kLnByb3BlcnR5LWRlc2MnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi8kLnNldC10by1zdHJpbmctdGFnJylcbiAgLCBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi8kLmhpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi8kLndrcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpe1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSAkLmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwge25leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCl9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZICAgICAgICA9IHJlcXVpcmUoJy4vJC5saWJyYXJ5JylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vJC5leHBvcnQnKVxuICAsIHJlZGVmaW5lICAgICAgID0gcmVxdWlyZSgnLi8kLnJlZGVmaW5lJylcbiAgLCBoaWRlICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5oaWRlJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5oYXMnKVxuICAsIEl0ZXJhdG9ycyAgICAgID0gcmVxdWlyZSgnLi8kLml0ZXJhdG9ycycpXG4gICwgJGl0ZXJDcmVhdGUgICAgPSByZXF1aXJlKCcuLyQuaXRlci1jcmVhdGUnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi8kLnNldC10by1zdHJpbmctdGFnJylcbiAgLCBnZXRQcm90byAgICAgICA9IHJlcXVpcmUoJy4vJCcpLmdldFByb3RvXG4gICwgSVRFUkFUT1IgICAgICAgPSByZXF1aXJlKCcuLyQud2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBCVUdHWSAgICAgICAgICA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKSAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gICwgRkZfSVRFUkFUT1IgICAgPSAnQEBpdGVyYXRvcidcbiAgLCBLRVlTICAgICAgICAgICA9ICdrZXlzJ1xuICAsIFZBTFVFUyAgICAgICAgID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKXtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24oa2luZCl7XG4gICAgaWYoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaChraW5kKXtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHICAgICAgICA9IE5BTUUgKyAnIEl0ZXJhdG9yJ1xuICAgICwgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTXG4gICAgLCBWQUxVRVNfQlVHID0gZmFsc2VcbiAgICAsIHByb3RvICAgICAgPSBCYXNlLnByb3RvdHlwZVxuICAgICwgJG5hdGl2ZSAgICA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXVxuICAgICwgJGRlZmF1bHQgICA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpXG4gICAgLCBtZXRob2RzLCBrZXk7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYoJG5hdGl2ZSl7XG4gICAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8oJGRlZmF1bHQuY2FsbChuZXcgQmFzZSkpO1xuICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAvLyBGRiBmaXhcbiAgICBpZighTElCUkFSWSAmJiBoYXMocHJvdG8sIEZGX0lURVJBVE9SKSloaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICAgIGlmKERFRl9WQUxVRVMgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpe1xuICAgICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpe1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gID0gcmV0dXJuVGhpcztcbiAgaWYoREVGQVVMVCl7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogIERFRl9WQUxVRVMgID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6ICAgIElTX1NFVCAgICAgID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJylcbiAgICB9O1xuICAgIGlmKEZPUkNFRClmb3Ioa2V5IGluIG1ldGhvZHMpe1xuICAgICAgaWYoIShrZXkgaW4gcHJvdG8pKXJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07IiwidmFyIElURVJBVE9SICAgICA9IHJlcXVpcmUoJy4vJC53a3MnKSgnaXRlcmF0b3InKVxuICAsIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uKCl7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uKCl7IHRocm93IDI7IH0pO1xufSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMsIHNraXBDbG9zaW5nKXtcbiAgaWYoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgID0gWzddXG4gICAgICAsIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24oKXsgc2FmZSA9IHRydWU7IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uKCl7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkb25lLCB2YWx1ZSl7XG4gIHJldHVybiB7dmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmV9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHt9OyIsInZhciAkT2JqZWN0ID0gT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZTogICAgICRPYmplY3QuY3JlYXRlLFxuICBnZXRQcm90bzogICAkT2JqZWN0LmdldFByb3RvdHlwZU9mLFxuICBpc0VudW06ICAgICB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxcbiAgZ2V0RGVzYzogICAgJE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIHNldERlc2M6ICAgICRPYmplY3QuZGVmaW5lUHJvcGVydHksXG4gIHNldERlc2NzOiAgICRPYmplY3QuZGVmaW5lUHJvcGVydGllcyxcbiAgZ2V0S2V5czogICAgJE9iamVjdC5rZXlzLFxuICBnZXROYW1lczogICAkT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsXG4gIGdldFN5bWJvbHM6ICRPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFxuICBlYWNoOiAgICAgICBbXS5mb3JFYWNoXG59OyIsInZhciAkICAgICAgICAgPSByZXF1aXJlKCcuLyQnKVxuICAsIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vJC50by1pb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iamVjdCwgZWwpe1xuICB2YXIgTyAgICAgID0gdG9JT2JqZWN0KG9iamVjdClcbiAgICAsIGtleXMgICA9ICQuZ2V0S2V5cyhPKVxuICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAsIGluZGV4ICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobGVuZ3RoID4gaW5kZXgpaWYoT1trZXkgPSBrZXlzW2luZGV4KytdXSA9PT0gZWwpcmV0dXJuIGtleTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSB0cnVlOyIsInZhciBnbG9iYWwgICAgPSByZXF1aXJlKCcuLyQuZ2xvYmFsJylcbiAgLCBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLyQudGFzaycpLnNldFxuICAsIE9ic2VydmVyICA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyXG4gICwgcHJvY2VzcyAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBQcm9taXNlICAgPSBnbG9iYWwuUHJvbWlzZVxuICAsIGlzTm9kZSAgICA9IHJlcXVpcmUoJy4vJC5jb2YnKShwcm9jZXNzKSA9PSAncHJvY2VzcydcbiAgLCBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbnZhciBmbHVzaCA9IGZ1bmN0aW9uKCl7XG4gIHZhciBwYXJlbnQsIGRvbWFpbiwgZm47XG4gIGlmKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKXtcbiAgICBwcm9jZXNzLmRvbWFpbiA9IG51bGw7XG4gICAgcGFyZW50LmV4aXQoKTtcbiAgfVxuICB3aGlsZShoZWFkKXtcbiAgICBkb21haW4gPSBoZWFkLmRvbWFpbjtcbiAgICBmbiAgICAgPSBoZWFkLmZuO1xuICAgIGlmKGRvbWFpbilkb21haW4uZW50ZXIoKTtcbiAgICBmbigpOyAvLyA8LSBjdXJyZW50bHkgd2UgdXNlIGl0IG9ubHkgZm9yIFByb21pc2UgLSB0cnkgLyBjYXRjaCBub3QgcmVxdWlyZWRcbiAgICBpZihkb21haW4pZG9tYWluLmV4aXQoKTtcbiAgICBoZWFkID0gaGVhZC5uZXh0O1xuICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gIGlmKHBhcmVudClwYXJlbnQuZW50ZXIoKTtcbn07XG5cbi8vIE5vZGUuanNcbmlmKGlzTm9kZSl7XG4gIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gIH07XG4vLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXJcbn0gZWxzZSBpZihPYnNlcnZlcil7XG4gIHZhciB0b2dnbGUgPSAxXG4gICAgLCBub2RlICAgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7Y2hhcmFjdGVyRGF0YTogdHJ1ZX0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9IC10b2dnbGU7XG4gIH07XG4vLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxufSBlbHNlIGlmKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKXtcbiAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZsdXNoKTtcbiAgfTtcbi8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4vLyAtIHNldEltbWVkaWF0ZVxuLy8gLSBNZXNzYWdlQ2hhbm5lbFxuLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2Vcbi8vIC0gc2V0VGltZW91dFxufSBlbHNlIHtcbiAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXNhcChmbil7XG4gIHZhciB0YXNrID0ge2ZuOiBmbiwgbmV4dDogdW5kZWZpbmVkLCBkb21haW46IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbn07XG4gIGlmKGxhc3QpbGFzdC5uZXh0ID0gdGFzaztcbiAgaWYoIWhlYWQpe1xuICAgIGhlYWQgPSB0YXNrO1xuICAgIG5vdGlmeSgpO1xuICB9IGxhc3QgPSB0YXNrO1xufTsiLCIvLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgJCAgICAgICAgPSByZXF1aXJlKCcuLyQnKVxuICAsIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi8kLnRvLW9iamVjdCcpXG4gICwgSU9iamVjdCAgPSByZXF1aXJlKCcuLyQuaW9iamVjdCcpO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi8kLmZhaWxzJykoZnVuY3Rpb24oKXtcbiAgdmFyIGEgPSBPYmplY3QuYXNzaWduXG4gICAgLCBBID0ge31cbiAgICAsIEIgPSB7fVxuICAgICwgUyA9IFN5bWJvbCgpXG4gICAgLCBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24oayl7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuIGEoe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoYSh7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSl7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgICAgID0gdG9PYmplY3QodGFyZ2V0KVxuICAgICwgJCQgICAgPSBhcmd1bWVudHNcbiAgICAsICQkbGVuID0gJCQubGVuZ3RoXG4gICAgLCBpbmRleCA9IDFcbiAgICAsIGdldEtleXMgICAgPSAkLmdldEtleXNcbiAgICAsIGdldFN5bWJvbHMgPSAkLmdldFN5bWJvbHNcbiAgICAsIGlzRW51bSAgICAgPSAkLmlzRW51bTtcbiAgd2hpbGUoJCRsZW4gPiBpbmRleCl7XG4gICAgdmFyIFMgICAgICA9IElPYmplY3QoJCRbaW5kZXgrK10pXG4gICAgICAsIGtleXMgICA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUylcbiAgICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAgICwgaiAgICAgID0gMFxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUobGVuZ3RoID4gailpZihpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKVRba2V5XSA9IFNba2V5XTtcbiAgfVxuICByZXR1cm4gVDtcbn0gOiBPYmplY3QuYXNzaWduOyIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuLyQuZXhwb3J0JylcbiAgLCBjb3JlICAgID0gcmVxdWlyZSgnLi8kLmNvcmUnKVxuICAsIGZhaWxzICAgPSByZXF1aXJlKCcuLyQuZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZLCBleGVjKXtcbiAgdmFyIGZuICA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXVxuICAgICwgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24oKXsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihiaXRtYXAsIHZhbHVlKXtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlICA6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlICAgIDogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZSAgICAgICA6IHZhbHVlXG4gIH07XG59OyIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vJC5yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih0YXJnZXQsIHNyYyl7XG4gIGZvcih2YXIga2V5IGluIHNyYylyZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICByZXR1cm4gdGFyZ2V0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vJC5oaWRlJyk7IiwiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KXtcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59OyIsIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBnZXREZXNjICA9IHJlcXVpcmUoJy4vJCcpLmdldERlc2NcbiAgLCBpc09iamVjdCA9IHJlcXVpcmUoJy4vJC5pcy1vYmplY3QnKVxuICAsIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi8kLmFuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24oTywgcHJvdG8pe1xuICBhbk9iamVjdChPKTtcbiAgaWYoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCl0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbih0ZXN0LCBidWdneSwgc2V0KXtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vJC5jdHgnKShGdW5jdGlvbi5jYWxsLCBnZXREZXNjKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2goZSl7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKXtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZihidWdneSlPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNvcmUgICAgICAgID0gcmVxdWlyZSgnLi8kLmNvcmUnKVxuICAsICQgICAgICAgICAgID0gcmVxdWlyZSgnLi8kJylcbiAgLCBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vJC5kZXNjcmlwdG9ycycpXG4gICwgU1BFQ0lFUyAgICAgPSByZXF1aXJlKCcuLyQud2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihLRVkpe1xuICB2YXIgQyA9IGNvcmVbS0VZXTtcbiAgaWYoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkkLnNldERlc2MoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTsiLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi8kJykuc2V0RGVzY1xuICAsIGhhcyA9IHJlcXVpcmUoJy4vJC5oYXMnKVxuICAsIFRBRyA9IHJlcXVpcmUoJy4vJC53a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgdGFnLCBzdGF0KXtcbiAgaWYoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSlkZWYoaXQsIFRBRywge2NvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZ30pO1xufTsiLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi8kLmdsb2JhbCcpXG4gICwgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXydcbiAgLCBzdG9yZSAgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0ge30pO1xufTsiLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCAgPSByZXF1aXJlKCcuLyQuYW4tb2JqZWN0JylcbiAgLCBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLyQuYS1mdW5jdGlvbicpXG4gICwgU1BFQ0lFUyAgID0gcmVxdWlyZSgnLi8kLndrcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE8sIEQpe1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yLCBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIENvbnN0cnVjdG9yLCBuYW1lKXtcbiAgaWYoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl0aHJvdyBUeXBlRXJyb3IobmFtZSArIFwiOiB1c2UgdGhlICduZXcnIG9wZXJhdG9yIVwiKTtcbiAgcmV0dXJuIGl0O1xufTsiLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi8kLnRvLWludGVnZXInKVxuICAsIGRlZmluZWQgICA9IHJlcXVpcmUoJy4vJC5kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihUT19TVFJJTkcpe1xuICByZXR1cm4gZnVuY3Rpb24odGhhdCwgcG9zKXtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKVxuICAgICAgLCBpID0gdG9JbnRlZ2VyKHBvcylcbiAgICAgICwgbCA9IHMubGVuZ3RoXG4gICAgICAsIGEsIGI7XG4gICAgaWYoaSA8IDAgfHwgaSA+PSBsKXJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59OyIsInZhciBjdHggICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQuY3R4JylcbiAgLCBpbnZva2UgICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQuaW52b2tlJylcbiAgLCBodG1sICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQuaHRtbCcpXG4gICwgY2VsICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi8kLmRvbS1jcmVhdGUnKVxuICAsIGdsb2JhbCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5nbG9iYWwnKVxuICAsIHByb2Nlc3MgICAgICAgICAgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgc2V0VGFzayAgICAgICAgICAgID0gZ2xvYmFsLnNldEltbWVkaWF0ZVxuICAsIGNsZWFyVGFzayAgICAgICAgICA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZVxuICAsIE1lc3NhZ2VDaGFubmVsICAgICA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbFxuICAsIGNvdW50ZXIgICAgICAgICAgICA9IDBcbiAgLCBxdWV1ZSAgICAgICAgICAgICAgPSB7fVxuICAsIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnXG4gICwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24oKXtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIGlmKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSl7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0bmVyID0gZnVuY3Rpb24oZXZlbnQpe1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZighc2V0VGFzayB8fCAhY2xlYXJUYXNrKXtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbil7XG4gICAgdmFyIGFyZ3MgPSBbXSwgaSA9IDE7XG4gICAgd2hpbGUoYXJndW1lbnRzLmxlbmd0aCA+IGkpYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24oKXtcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCl7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmKHJlcXVpcmUoJy4vJC5jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcycpe1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmKE1lc3NhZ2VDaGFubmVsKXtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsO1xuICAgIHBvcnQgICAgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdG5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZihnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpe1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0Jykpe1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24oKXtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6ICAgc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTsiLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsICA9IE1hdGguY2VpbFxuICAsIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07IiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vJC5pb2JqZWN0JylcbiAgLCBkZWZpbmVkID0gcmVxdWlyZSgnLi8kLmRlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59OyIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vJC50by1pbnRlZ2VyJylcbiAgLCBtaW4gICAgICAgPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTsiLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vJC5kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59OyIsInZhciBpZCA9IDBcbiAgLCBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59OyIsInZhciBzdG9yZSAgPSByZXF1aXJlKCcuLyQuc2hhcmVkJykoJ3drcycpXG4gICwgdWlkICAgID0gcmVxdWlyZSgnLi8kLnVpZCcpXG4gICwgU3ltYm9sID0gcmVxdWlyZSgnLi8kLmdsb2JhbCcpLlN5bWJvbDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSl7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFN5bWJvbCAmJiBTeW1ib2xbbmFtZV0gfHwgKFN5bWJvbCB8fCB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07IiwidmFyIGNsYXNzb2YgICA9IHJlcXVpcmUoJy4vJC5jbGFzc29mJylcbiAgLCBJVEVSQVRPUiAgPSByZXF1aXJlKCcuLyQud2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLyQuaXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vJC5jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbihpdCl7XG4gIGlmKGl0ICE9IHVuZGVmaW5lZClyZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59OyIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vJC5hbi1vYmplY3QnKVxuICAsIGdldCAgICAgID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi8kLmNvcmUnKS5nZXRJdGVyYXRvciA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIGl0ZXJGbiA9IGdldChpdCk7XG4gIGlmKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJyl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgcmV0dXJuIGFuT2JqZWN0KGl0ZXJGbi5jYWxsKGl0KSk7XG59OyIsInZhciBjbGFzc29mICAgPSByZXF1aXJlKCcuLyQuY2xhc3NvZicpXG4gICwgSVRFUkFUT1IgID0gcmVxdWlyZSgnLi8kLndrcycpKCdpdGVyYXRvcicpXG4gICwgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi8kLml0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLyQuY29yZScpLmlzSXRlcmFibGUgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBPID0gT2JqZWN0KGl0KTtcbiAgcmV0dXJuIE9bSVRFUkFUT1JdICE9PSB1bmRlZmluZWRcbiAgICB8fCAnQEBpdGVyYXRvcicgaW4gT1xuICAgIHx8IEl0ZXJhdG9ycy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKE8pKTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCAgICAgICAgID0gcmVxdWlyZSgnLi8kLmN0eCcpXG4gICwgJGV4cG9ydCAgICAgPSByZXF1aXJlKCcuLyQuZXhwb3J0JylcbiAgLCB0b09iamVjdCAgICA9IHJlcXVpcmUoJy4vJC50by1vYmplY3QnKVxuICAsIGNhbGwgICAgICAgID0gcmVxdWlyZSgnLi8kLml0ZXItY2FsbCcpXG4gICwgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuLyQuaXMtYXJyYXktaXRlcicpXG4gICwgdG9MZW5ndGggICAgPSByZXF1aXJlKCcuLyQudG8tbGVuZ3RoJylcbiAgLCBnZXRJdGVyRm4gICA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuLyQuaXRlci1kZXRlY3QnKShmdW5jdGlvbihpdGVyKXsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZS8qLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCovKXtcbiAgICB2YXIgTyAgICAgICA9IHRvT2JqZWN0KGFycmF5TGlrZSlcbiAgICAgICwgQyAgICAgICA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXlcbiAgICAgICwgJCQgICAgICA9IGFyZ3VtZW50c1xuICAgICAgLCAkJGxlbiAgID0gJCQubGVuZ3RoXG4gICAgICAsIG1hcGZuICAgPSAkJGxlbiA+IDEgPyAkJFsxXSA6IHVuZGVmaW5lZFxuICAgICAgLCBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZFxuICAgICAgLCBpbmRleCAgID0gMFxuICAgICAgLCBpdGVyRm4gID0gZ2V0SXRlckZuKE8pXG4gICAgICAsIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZihtYXBwaW5nKW1hcGZuID0gY3R4KG1hcGZuLCAkJGxlbiA+IDIgPyAkJFsyXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpe1xuICAgICAgZm9yKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4Kyspe1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvcihyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKyl7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vJC5hZGQtdG8tdW5zY29wYWJsZXMnKVxuICAsIHN0ZXAgICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQuaXRlci1zdGVwJylcbiAgLCBJdGVyYXRvcnMgICAgICAgID0gcmVxdWlyZSgnLi8kLml0ZXJhdG9ycycpXG4gICwgdG9JT2JqZWN0ICAgICAgICA9IHJlcXVpcmUoJy4vJC50by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi8kLml0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uKGl0ZXJhdGVkLCBraW5kKXtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbigpe1xuICB2YXIgTyAgICAgPSB0aGlzLl90XG4gICAgLCBraW5kICA9IHRoaXMuX2tcbiAgICAsIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZighTyB8fCBpbmRleCA+PSBPLmxlbmd0aCl7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZihraW5kID09ICdrZXlzJyAgKXJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYoa2luZCA9PSAndmFsdWVzJylyZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7IiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vJC5jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyAyMy4xIE1hcCBPYmplY3RzXG5yZXF1aXJlKCcuLyQuY29sbGVjdGlvbicpKCdNYXAnLCBmdW5jdGlvbihnZXQpe1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCl7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSl7XG4gICAgdmFyIGVudHJ5ID0gc3Ryb25nLmdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnY7XG4gIH0sXG4gIC8vIDIzLjEuMy45IE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpe1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTsiLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vJC5leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cyOiBmdW5jdGlvbiBsb2cyKHgpe1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTsiLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuLyQuZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0Jywge2Fzc2lnbjogcmVxdWlyZSgnLi8kLm9iamVjdC1hc3NpZ24nKX0pOyIsIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vJC5pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi8kLm9iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24oJGZyZWV6ZSl7XG4gIHJldHVybiBmdW5jdGlvbiBmcmVlemUoaXQpe1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUoaXQpIDogaXQ7XG4gIH07XG59KTsiLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi8kLnRvLWlvYmplY3QnKTtcblxucmVxdWlyZSgnLi8kLm9iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24oJGdldE93blByb3BlcnR5RGVzY3JpcHRvcil7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSl7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pOyIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi8kLnRvLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuLyQub2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24oJGtleXMpe1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCl7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTsiLCIvLyAxOS4xLjMuMTkgT2JqZWN0LnNldFByb3RvdHlwZU9mKE8sIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuLyQuZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtzZXRQcm90b3R5cGVPZjogcmVxdWlyZSgnLi8kLnNldC1wcm90bycpLnNldH0pOyIsIid1c2Ugc3RyaWN0JztcbnZhciAkICAgICAgICAgID0gcmVxdWlyZSgnLi8kJylcbiAgLCBMSUJSQVJZICAgID0gcmVxdWlyZSgnLi8kLmxpYnJhcnknKVxuICAsIGdsb2JhbCAgICAgPSByZXF1aXJlKCcuLyQuZ2xvYmFsJylcbiAgLCBjdHggICAgICAgID0gcmVxdWlyZSgnLi8kLmN0eCcpXG4gICwgY2xhc3NvZiAgICA9IHJlcXVpcmUoJy4vJC5jbGFzc29mJylcbiAgLCAkZXhwb3J0ICAgID0gcmVxdWlyZSgnLi8kLmV4cG9ydCcpXG4gICwgaXNPYmplY3QgICA9IHJlcXVpcmUoJy4vJC5pcy1vYmplY3QnKVxuICAsIGFuT2JqZWN0ICAgPSByZXF1aXJlKCcuLyQuYW4tb2JqZWN0JylcbiAgLCBhRnVuY3Rpb24gID0gcmVxdWlyZSgnLi8kLmEtZnVuY3Rpb24nKVxuICAsIHN0cmljdE5ldyAgPSByZXF1aXJlKCcuLyQuc3RyaWN0LW5ldycpXG4gICwgZm9yT2YgICAgICA9IHJlcXVpcmUoJy4vJC5mb3Itb2YnKVxuICAsIHNldFByb3RvICAgPSByZXF1aXJlKCcuLyQuc2V0LXByb3RvJykuc2V0XG4gICwgc2FtZSAgICAgICA9IHJlcXVpcmUoJy4vJC5zYW1lLXZhbHVlJylcbiAgLCBTUEVDSUVTICAgID0gcmVxdWlyZSgnLi8kLndrcycpKCdzcGVjaWVzJylcbiAgLCBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLyQuc3BlY2llcy1jb25zdHJ1Y3RvcicpXG4gICwgYXNhcCAgICAgICA9IHJlcXVpcmUoJy4vJC5taWNyb3Rhc2snKVxuICAsIFBST01JU0UgICAgPSAnUHJvbWlzZSdcbiAgLCBwcm9jZXNzICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBpc05vZGUgICAgID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2VzcydcbiAgLCBQICAgICAgICAgID0gZ2xvYmFsW1BST01JU0VdXG4gICwgV3JhcHBlcjtcblxudmFyIHRlc3RSZXNvbHZlID0gZnVuY3Rpb24oc3ViKXtcbiAgdmFyIHRlc3QgPSBuZXcgUChmdW5jdGlvbigpe30pO1xuICBpZihzdWIpdGVzdC5jb25zdHJ1Y3RvciA9IE9iamVjdDtcbiAgcmV0dXJuIFAucmVzb2x2ZSh0ZXN0KSA9PT0gdGVzdDtcbn07XG5cbnZhciBVU0VfTkFUSVZFID0gZnVuY3Rpb24oKXtcbiAgdmFyIHdvcmtzID0gZmFsc2U7XG4gIGZ1bmN0aW9uIFAyKHgpe1xuICAgIHZhciBzZWxmID0gbmV3IFAoeCk7XG4gICAgc2V0UHJvdG8oc2VsZiwgUDIucHJvdG90eXBlKTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuICB0cnkge1xuICAgIHdvcmtzID0gUCAmJiBQLnJlc29sdmUgJiYgdGVzdFJlc29sdmUoKTtcbiAgICBzZXRQcm90byhQMiwgUCk7XG4gICAgUDIucHJvdG90eXBlID0gJC5jcmVhdGUoUC5wcm90b3R5cGUsIHtjb25zdHJ1Y3Rvcjoge3ZhbHVlOiBQMn19KTtcbiAgICAvLyBhY3R1YWwgRmlyZWZveCBoYXMgYnJva2VuIHN1YmNsYXNzIHN1cHBvcnQsIHRlc3QgdGhhdFxuICAgIGlmKCEoUDIucmVzb2x2ZSg1KS50aGVuKGZ1bmN0aW9uKCl7fSkgaW5zdGFuY2VvZiBQMikpe1xuICAgICAgd29ya3MgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gYWN0dWFsIFY4IGJ1ZywgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxNjJcbiAgICBpZih3b3JrcyAmJiByZXF1aXJlKCcuLyQuZGVzY3JpcHRvcnMnKSl7XG4gICAgICB2YXIgdGhlbmFibGVUaGVuR290dGVuID0gZmFsc2U7XG4gICAgICBQLnJlc29sdmUoJC5zZXREZXNjKHt9LCAndGhlbicsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpeyB0aGVuYWJsZVRoZW5Hb3R0ZW4gPSB0cnVlOyB9XG4gICAgICB9KSk7XG4gICAgICB3b3JrcyA9IHRoZW5hYmxlVGhlbkdvdHRlbjtcbiAgICB9XG4gIH0gY2F0Y2goZSl7IHdvcmtzID0gZmFsc2U7IH1cbiAgcmV0dXJuIHdvcmtzO1xufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgc2FtZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24oYSwgYil7XG4gIC8vIGxpYnJhcnkgd3JhcHBlciBzcGVjaWFsIGNhc2VcbiAgaWYoTElCUkFSWSAmJiBhID09PSBQICYmIGIgPT09IFdyYXBwZXIpcmV0dXJuIHRydWU7XG4gIHJldHVybiBzYW1lKGEsIGIpO1xufTtcbnZhciBnZXRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKEMpe1xuICB2YXIgUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdO1xuICByZXR1cm4gUyAhPSB1bmRlZmluZWQgPyBTIDogQztcbn07XG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbihDKXtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24oJCRyZXNvbHZlLCAkJHJlamVjdCl7XG4gICAgaWYocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCAgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKSxcbiAgdGhpcy5yZWplY3QgID0gYUZ1bmN0aW9uKHJlamVjdClcbn07XG52YXIgcGVyZm9ybSA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIGV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4ge2Vycm9yOiBlfTtcbiAgfVxufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbihyZWNvcmQsIGlzUmVqZWN0KXtcbiAgaWYocmVjb3JkLm4pcmV0dXJuO1xuICByZWNvcmQubiA9IHRydWU7XG4gIHZhciBjaGFpbiA9IHJlY29yZC5jO1xuICBhc2FwKGZ1bmN0aW9uKCl7XG4gICAgdmFyIHZhbHVlID0gcmVjb3JkLnZcbiAgICAgICwgb2sgICAgPSByZWNvcmQucyA9PSAxXG4gICAgICAsIGkgICAgID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24ocmVhY3Rpb24pe1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbFxuICAgICAgICAsIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlXG4gICAgICAgICwgcmVqZWN0ICA9IHJlYWN0aW9uLnJlamVjdFxuICAgICAgICAsIHJlc3VsdCwgdGhlbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmKGhhbmRsZXIpe1xuICAgICAgICAgIGlmKCFvaylyZWNvcmQuaCA9IHRydWU7XG4gICAgICAgICAgcmVzdWx0ID0gaGFuZGxlciA9PT0gdHJ1ZSA/IHZhbHVlIDogaGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgaWYocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKXtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpe1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlKGNoYWluLmxlbmd0aCA+IGkpcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIGNoYWluLmxlbmd0aCA9IDA7XG4gICAgcmVjb3JkLm4gPSBmYWxzZTtcbiAgICBpZihpc1JlamVjdClzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgcHJvbWlzZSA9IHJlY29yZC5wXG4gICAgICAgICwgaGFuZGxlciwgY29uc29sZTtcbiAgICAgIGlmKGlzVW5oYW5kbGVkKHByb21pc2UpKXtcbiAgICAgICAgaWYoaXNOb2RlKXtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pe1xuICAgICAgICAgIGhhbmRsZXIoe3Byb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWV9KTtcbiAgICAgICAgfSBlbHNlIGlmKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3Ipe1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSByZWNvcmQuYSA9IHVuZGVmaW5lZDtcbiAgICB9LCAxKTtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24ocHJvbWlzZSl7XG4gIHZhciByZWNvcmQgPSBwcm9taXNlLl9kXG4gICAgLCBjaGFpbiAgPSByZWNvcmQuYSB8fCByZWNvcmQuY1xuICAgICwgaSAgICAgID0gMFxuICAgICwgcmVhY3Rpb247XG4gIGlmKHJlY29yZC5oKXJldHVybiBmYWxzZTtcbiAgd2hpbGUoY2hhaW4ubGVuZ3RoID4gaSl7XG4gICAgcmVhY3Rpb24gPSBjaGFpbltpKytdO1xuICAgIGlmKHJlYWN0aW9uLmZhaWwgfHwgIWlzVW5oYW5kbGVkKHJlYWN0aW9uLnByb21pc2UpKXJldHVybiBmYWxzZTtcbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uKHZhbHVlKXtcbiAgdmFyIHJlY29yZCA9IHRoaXM7XG4gIGlmKHJlY29yZC5kKXJldHVybjtcbiAgcmVjb3JkLmQgPSB0cnVlO1xuICByZWNvcmQgPSByZWNvcmQuciB8fCByZWNvcmQ7IC8vIHVud3JhcFxuICByZWNvcmQudiA9IHZhbHVlO1xuICByZWNvcmQucyA9IDI7XG4gIHJlY29yZC5hID0gcmVjb3JkLmMuc2xpY2UoKTtcbiAgbm90aWZ5KHJlY29yZCwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24odmFsdWUpe1xuICB2YXIgcmVjb3JkID0gdGhpc1xuICAgICwgdGhlbjtcbiAgaWYocmVjb3JkLmQpcmV0dXJuO1xuICByZWNvcmQuZCA9IHRydWU7XG4gIHJlY29yZCA9IHJlY29yZC5yIHx8IHJlY29yZDsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYocmVjb3JkLnAgPT09IHZhbHVlKXRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSl7XG4gICAgICBhc2FwKGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciB3cmFwcGVyID0ge3I6IHJlY29yZCwgZDogZmFsc2V9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlY29yZC52ID0gdmFsdWU7XG4gICAgICByZWNvcmQucyA9IDE7XG4gICAgICBub3RpZnkocmVjb3JkLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoKGUpe1xuICAgICRyZWplY3QuY2FsbCh7cjogcmVjb3JkLCBkOiBmYWxzZX0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZighVVNFX05BVElWRSl7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFAgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKXtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIHZhciByZWNvcmQgPSB0aGlzLl9kID0ge1xuICAgICAgcDogc3RyaWN0TmV3KHRoaXMsIFAsIFBST01JU0UpLCAgICAgICAgIC8vIDwtIHByb21pc2VcbiAgICAgIGM6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICAgIGE6IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgICAgczogMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgICBkOiBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gZG9uZVxuICAgICAgdjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICBoOiBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gaGFuZGxlZCByZWplY3Rpb25cbiAgICAgIG46IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHJlY29yZCwgMSksIGN0eCgkcmVqZWN0LCByZWNvcmQsIDEpKTtcbiAgICB9IGNhdGNoKGVycil7XG4gICAgICAkcmVqZWN0LmNhbGwocmVjb3JkLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgcmVxdWlyZSgnLi8kLnJlZGVmaW5lLWFsbCcpKFAucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKXtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ldyBQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUCkpXG4gICAgICAgICwgcHJvbWlzZSAgPSByZWFjdGlvbi5wcm9taXNlXG4gICAgICAgICwgcmVjb3JkICAgPSB0aGlzLl9kO1xuICAgICAgcmVhY3Rpb24ub2sgICA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlY29yZC5jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYocmVjb3JkLmEpcmVjb3JkLmEucHVzaChyZWFjdGlvbik7XG4gICAgICBpZihyZWNvcmQucylub3RpZnkocmVjb3JkLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwge1Byb21pc2U6IFB9KTtcbnJlcXVpcmUoJy4vJC5zZXQtdG8tc3RyaW5nLXRhZycpKFAsIFBST01JU0UpO1xucmVxdWlyZSgnLi8kLnNldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi8kLmNvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKXtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ldyBQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKVxuICAgICAgLCAkJHJlamVjdCAgID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCB0ZXN0UmVzb2x2ZSh0cnVlKSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCl7XG4gICAgLy8gaW5zdGFuY2VvZiBpbnN0ZWFkIG9mIGludGVybmFsIHNsb3QgY2hlY2sgYmVjYXVzZSB3ZSBzaG91bGQgZml4IGl0IHdpdGhvdXQgcmVwbGFjZW1lbnQgbmF0aXZlIFByb21pc2UgY29yZVxuICAgIGlmKHggaW5zdGFuY2VvZiBQICYmIHNhbWVDb25zdHJ1Y3Rvcih4LmNvbnN0cnVjdG9yLCB0aGlzKSlyZXR1cm4geDtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ldyBQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKVxuICAgICAgLCAkJHJlc29sdmUgID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgICQkcmVzb2x2ZSh4KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vJC5pdGVyLWRldGVjdCcpKGZ1bmN0aW9uKGl0ZXIpe1xuICBQLmFsbChpdGVyKVsnY2F0Y2gnXShmdW5jdGlvbigpe30pO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSl7XG4gICAgdmFyIEMgICAgICAgICAgPSBnZXRDb25zdHJ1Y3Rvcih0aGlzKVxuICAgICAgLCBjYXBhYmlsaXR5ID0gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICAsIHJlc29sdmUgICAgPSBjYXBhYmlsaXR5LnJlc29sdmVcbiAgICAgICwgcmVqZWN0ICAgICA9IGNhcGFiaWxpdHkucmVqZWN0XG4gICAgICAsIHZhbHVlcyAgICAgPSBbXTtcbiAgICB2YXIgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCB2YWx1ZXMucHVzaCwgdmFsdWVzKTtcbiAgICAgIHZhciByZW1haW5pbmcgPSB2YWx1ZXMubGVuZ3RoXG4gICAgICAgICwgcmVzdWx0cyAgID0gQXJyYXkocmVtYWluaW5nKTtcbiAgICAgIGlmKHJlbWFpbmluZykkLmVhY2guY2FsbCh2YWx1ZXMsIGZ1bmN0aW9uKHByb21pc2UsIGluZGV4KXtcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgICAgICAgIGlmKGFscmVhZHlDYWxsZWQpcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZShyZXN1bHRzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgZWxzZSByZXNvbHZlKHJlc3VsdHMpO1xuICAgIH0pO1xuICAgIGlmKGFicnVwdClyZWplY3QoYWJydXB0LmVycm9yKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpe1xuICAgIHZhciBDICAgICAgICAgID0gZ2V0Q29uc3RydWN0b3IodGhpcylcbiAgICAgICwgY2FwYWJpbGl0eSA9IG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgLCByZWplY3QgICAgID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIGFicnVwdCA9IHBlcmZvcm0oZnVuY3Rpb24oKXtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24ocHJvbWlzZSl7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmKGFicnVwdClyZWplY3QoYWJydXB0LmVycm9yKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTsiLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi8kLmNvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbnJlcXVpcmUoJy4vJC5jb2xsZWN0aW9uJykoJ1NldCcsIGZ1bmN0aW9uKGdldCl7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKXsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSl7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpOyIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgID0gcmVxdWlyZSgnLi8kLnN0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuLyQuaXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbihpdGVyYXRlZCl7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uKCl7XG4gIHZhciBPICAgICA9IHRoaXMuX3RcbiAgICAsIGluZGV4ID0gdGhpcy5faVxuICAgICwgcG9pbnQ7XG4gIGlmKGluZGV4ID49IE8ubGVuZ3RoKXJldHVybiB7dmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZX07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7dmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZX07XG59KTsiLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgJCAgICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQnKVxuICAsIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi8kLmdsb2JhbCcpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQuaGFzJylcbiAgLCBERVNDUklQVE9SUyAgICA9IHJlcXVpcmUoJy4vJC5kZXNjcmlwdG9ycycpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuLyQuZXhwb3J0JylcbiAgLCByZWRlZmluZSAgICAgICA9IHJlcXVpcmUoJy4vJC5yZWRlZmluZScpXG4gICwgJGZhaWxzICAgICAgICAgPSByZXF1aXJlKCcuLyQuZmFpbHMnKVxuICAsIHNoYXJlZCAgICAgICAgID0gcmVxdWlyZSgnLi8kLnNoYXJlZCcpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLyQuc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIHVpZCAgICAgICAgICAgID0gcmVxdWlyZSgnLi8kLnVpZCcpXG4gICwgd2tzICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQud2tzJylcbiAgLCBrZXlPZiAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5rZXlvZicpXG4gICwgJG5hbWVzICAgICAgICAgPSByZXF1aXJlKCcuLyQuZ2V0LW5hbWVzJylcbiAgLCBlbnVtS2V5cyAgICAgICA9IHJlcXVpcmUoJy4vJC5lbnVtLWtleXMnKVxuICAsIGlzQXJyYXkgICAgICAgID0gcmVxdWlyZSgnLi8kLmlzLWFycmF5JylcbiAgLCBhbk9iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vJC5hbi1vYmplY3QnKVxuICAsIHRvSU9iamVjdCAgICAgID0gcmVxdWlyZSgnLi8kLnRvLWlvYmplY3QnKVxuICAsIGNyZWF0ZURlc2MgICAgID0gcmVxdWlyZSgnLi8kLnByb3BlcnR5LWRlc2MnKVxuICAsIGdldERlc2MgICAgICAgID0gJC5nZXREZXNjXG4gICwgc2V0RGVzYyAgICAgICAgPSAkLnNldERlc2NcbiAgLCBfY3JlYXRlICAgICAgICA9ICQuY3JlYXRlXG4gICwgZ2V0TmFtZXMgICAgICAgPSAkbmFtZXMuZ2V0XG4gICwgJFN5bWJvbCAgICAgICAgPSBnbG9iYWwuU3ltYm9sXG4gICwgJEpTT04gICAgICAgICAgPSBnbG9iYWwuSlNPTlxuICAsIF9zdHJpbmdpZnkgICAgID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5XG4gICwgc2V0dGVyICAgICAgICAgPSBmYWxzZVxuICAsIEhJRERFTiAgICAgICAgID0gd2tzKCdfaGlkZGVuJylcbiAgLCBpc0VudW0gICAgICAgICA9ICQuaXNFbnVtXG4gICwgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpXG4gICwgQWxsU3ltYm9scyAgICAgPSBzaGFyZWQoJ3N5bWJvbHMnKVxuICAsIHVzZU5hdGl2ZSAgICAgID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJ1xuICAsIE9iamVjdFByb3RvICAgID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbigpe1xuICByZXR1cm4gX2NyZWF0ZShzZXREZXNjKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiBzZXREZXNjKHRoaXMsICdhJywge3ZhbHVlOiA3fSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbihpdCwga2V5LCBEKXtcbiAgdmFyIHByb3RvRGVzYyA9IGdldERlc2MoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmKHByb3RvRGVzYylkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgc2V0RGVzYyhpdCwga2V5LCBEKTtcbiAgaWYocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bylzZXREZXNjKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogc2V0RGVzYztcblxudmFyIHdyYXAgPSBmdW5jdGlvbih0YWcpe1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sLnByb3RvdHlwZSk7XG4gIHN5bS5fayA9IHRhZztcbiAgREVTQ1JJUFRPUlMgJiYgc2V0dGVyICYmIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIGlmKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKXtcbiAgaWYoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSl7XG4gICAgaWYoIUQuZW51bWVyYWJsZSl7XG4gICAgICBpZighaGFzKGl0LCBISURERU4pKXNldERlc2MoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSlpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHtlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKX0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIHNldERlc2MoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCl7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKVxuICAgICwgaSAgICA9IDBcbiAgICAsIGwgPSBrZXlzLmxlbmd0aFxuICAgICwga2V5O1xuICB3aGlsZShsID4gaSkkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKXtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpe1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSk7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV1cbiAgICA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpe1xuICB2YXIgRCA9IGdldERlc2MoaXQgPSB0b0lPYmplY3QoaXQpLCBrZXkpO1xuICBpZihEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG4gIHZhciBuYW1lcyAgPSBnZXROYW1lcyh0b0lPYmplY3QoaXQpKVxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGkgICAgICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZighaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4pcmVzdWx0LnB1c2goa2V5KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCl7XG4gIHZhciBuYW1lcyAgPSBnZXROYW1lcyh0b0lPYmplY3QoaXQpKVxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGkgICAgICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZihoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkpcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJHN0cmluZ2lmeSA9IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCl7XG4gIGlmKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKXJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICB2YXIgYXJncyA9IFtpdF1cbiAgICAsIGkgICAgPSAxXG4gICAgLCAkJCAgID0gYXJndW1lbnRzXG4gICAgLCByZXBsYWNlciwgJHJlcGxhY2VyO1xuICB3aGlsZSgkJC5sZW5ndGggPiBpKWFyZ3MucHVzaCgkJFtpKytdKTtcbiAgcmVwbGFjZXIgPSBhcmdzWzFdO1xuICBpZih0eXBlb2YgcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykkcmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgaWYoJHJlcGxhY2VyIHx8ICFpc0FycmF5KHJlcGxhY2VyKSlyZXBsYWNlciA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuICAgIGlmKCRyZXBsYWNlcil2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgIGlmKCFpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIHZhbHVlO1xuICB9O1xuICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbn07XG52YXIgYnVnZ3lKU09OID0gJGZhaWxzKGZ1bmN0aW9uKCl7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHthOiBTfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pO1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmKCF1c2VOYXRpdmUpe1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCl7XG4gICAgaWYoaXNTeW1ib2wodGhpcykpdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICByZXR1cm4gd3JhcCh1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCl7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gIGlzU3ltYm9sID0gZnVuY3Rpb24oaXQpe1xuICAgIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG4gIH07XG5cbiAgJC5jcmVhdGUgICAgID0gJGNyZWF0ZTtcbiAgJC5pc0VudW0gICAgID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkLmdldERlc2MgICAgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkLnNldERlc2MgICAgPSAkZGVmaW5lUHJvcGVydHk7XG4gICQuc2V0RGVzY3MgICA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICAkLmdldE5hbWVzICAgPSAkbmFtZXMuZ2V0ID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gICQuZ2V0U3ltYm9scyA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vJC5saWJyYXJ5Jykpe1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG59XG5cbnZhciBzeW1ib2xTdGF0aWNzID0ge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uKGtleSl7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihrZXkpe1xuICAgIHJldHVybiBrZXlPZihTeW1ib2xSZWdpc3RyeSwga2V5KTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbigpeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uKCl7IHNldHRlciA9IGZhbHNlOyB9XG59O1xuLy8gMTkuNC4yLjIgU3ltYm9sLmhhc0luc3RhbmNlXG4vLyAxOS40LjIuMyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlXG4vLyAxOS40LjIuNCBTeW1ib2wuaXRlcmF0b3Jcbi8vIDE5LjQuMi42IFN5bWJvbC5tYXRjaFxuLy8gMTkuNC4yLjggU3ltYm9sLnJlcGxhY2Vcbi8vIDE5LjQuMi45IFN5bWJvbC5zZWFyY2hcbi8vIDE5LjQuMi4xMCBTeW1ib2wuc3BlY2llc1xuLy8gMTkuNC4yLjExIFN5bWJvbC5zcGxpdFxuLy8gMTkuNC4yLjEyIFN5bWJvbC50b1ByaW1pdGl2ZVxuLy8gMTkuNC4yLjEzIFN5bWJvbC50b1N0cmluZ1RhZ1xuLy8gMTkuNC4yLjE0IFN5bWJvbC51bnNjb3BhYmxlc1xuJC5lYWNoLmNhbGwoKFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLCcgK1xuICAnc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgZnVuY3Rpb24oaXQpe1xuICB2YXIgc3ltID0gd2tzKGl0KTtcbiAgc3ltYm9sU3RhdGljc1tpdF0gPSB1c2VOYXRpdmUgPyBzeW0gOiB3cmFwKHN5bSk7XG59KTtcblxuc2V0dGVyID0gdHJ1ZTtcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcsIHtTeW1ib2w6ICRTeW1ib2x9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeW1ib2wnLCBzeW1ib2xTdGF0aWNzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhdXNlTmF0aXZlLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghdXNlTmF0aXZlIHx8IGJ1Z2d5SlNPTiksICdKU09OJywge3N0cmluZ2lmeTogJHN0cmluZ2lmeX0pO1xuXG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpOyIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ICA9IHJlcXVpcmUoJy4vJC5leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdNYXAnLCB7dG9KU09OOiByZXF1aXJlKCcuLyQuY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpfSk7IiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgID0gcmVxdWlyZSgnLi8kLmV4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1NldCcsIHt0b0pTT046IHJlcXVpcmUoJy4vJC5jb2xsZWN0aW9uLXRvLWpzb24nKSgnU2V0Jyl9KTsiLCJyZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vJC5pdGVyYXRvcnMnKTtcbkl0ZXJhdG9ycy5Ob2RlTGlzdCA9IEl0ZXJhdG9ycy5IVE1MQ29sbGVjdGlvbiA9IEl0ZXJhdG9ycy5BcnJheTsiLCIvLyAoYykgRGVhbiBNY05hbWVlIDxkZWFuQGdtYWlsLmNvbT4sIDIwMTIuXG4vL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RlYW5tL2Nzcy1jb2xvci1wYXJzZXItanNcbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HU1xuLy8gSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yL1xudmFyIGtDU1NDb2xvclRhYmxlID0ge1xuICBcInRyYW5zcGFyZW50XCI6IFswLDAsMCwwXSwgXCJhbGljZWJsdWVcIjogWzI0MCwyNDgsMjU1LDFdLFxuICBcImFudGlxdWV3aGl0ZVwiOiBbMjUwLDIzNSwyMTUsMV0sIFwiYXF1YVwiOiBbMCwyNTUsMjU1LDFdLFxuICBcImFxdWFtYXJpbmVcIjogWzEyNywyNTUsMjEyLDFdLCBcImF6dXJlXCI6IFsyNDAsMjU1LDI1NSwxXSxcbiAgXCJiZWlnZVwiOiBbMjQ1LDI0NSwyMjAsMV0sIFwiYmlzcXVlXCI6IFsyNTUsMjI4LDE5NiwxXSxcbiAgXCJibGFja1wiOiBbMCwwLDAsMV0sIFwiYmxhbmNoZWRhbG1vbmRcIjogWzI1NSwyMzUsMjA1LDFdLFxuICBcImJsdWVcIjogWzAsMCwyNTUsMV0sIFwiYmx1ZXZpb2xldFwiOiBbMTM4LDQzLDIyNiwxXSxcbiAgXCJicm93blwiOiBbMTY1LDQyLDQyLDFdLCBcImJ1cmx5d29vZFwiOiBbMjIyLDE4NCwxMzUsMV0sXG4gIFwiY2FkZXRibHVlXCI6IFs5NSwxNTgsMTYwLDFdLCBcImNoYXJ0cmV1c2VcIjogWzEyNywyNTUsMCwxXSxcbiAgXCJjaG9jb2xhdGVcIjogWzIxMCwxMDUsMzAsMV0sIFwiY29yYWxcIjogWzI1NSwxMjcsODAsMV0sXG4gIFwiY29ybmZsb3dlcmJsdWVcIjogWzEwMCwxNDksMjM3LDFdLCBcImNvcm5zaWxrXCI6IFsyNTUsMjQ4LDIyMCwxXSxcbiAgXCJjcmltc29uXCI6IFsyMjAsMjAsNjAsMV0sIFwiY3lhblwiOiBbMCwyNTUsMjU1LDFdLFxuICBcImRhcmtibHVlXCI6IFswLDAsMTM5LDFdLCBcImRhcmtjeWFuXCI6IFswLDEzOSwxMzksMV0sXG4gIFwiZGFya2dvbGRlbnJvZFwiOiBbMTg0LDEzNCwxMSwxXSwgXCJkYXJrZ3JheVwiOiBbMTY5LDE2OSwxNjksMV0sXG4gIFwiZGFya2dyZWVuXCI6IFswLDEwMCwwLDFdLCBcImRhcmtncmV5XCI6IFsxNjksMTY5LDE2OSwxXSxcbiAgXCJkYXJra2hha2lcIjogWzE4OSwxODMsMTA3LDFdLCBcImRhcmttYWdlbnRhXCI6IFsxMzksMCwxMzksMV0sXG4gIFwiZGFya29saXZlZ3JlZW5cIjogWzg1LDEwNyw0NywxXSwgXCJkYXJrb3JhbmdlXCI6IFsyNTUsMTQwLDAsMV0sXG4gIFwiZGFya29yY2hpZFwiOiBbMTUzLDUwLDIwNCwxXSwgXCJkYXJrcmVkXCI6IFsxMzksMCwwLDFdLFxuICBcImRhcmtzYWxtb25cIjogWzIzMywxNTAsMTIyLDFdLCBcImRhcmtzZWFncmVlblwiOiBbMTQzLDE4OCwxNDMsMV0sXG4gIFwiZGFya3NsYXRlYmx1ZVwiOiBbNzIsNjEsMTM5LDFdLCBcImRhcmtzbGF0ZWdyYXlcIjogWzQ3LDc5LDc5LDFdLFxuICBcImRhcmtzbGF0ZWdyZXlcIjogWzQ3LDc5LDc5LDFdLCBcImRhcmt0dXJxdW9pc2VcIjogWzAsMjA2LDIwOSwxXSxcbiAgXCJkYXJrdmlvbGV0XCI6IFsxNDgsMCwyMTEsMV0sIFwiZGVlcHBpbmtcIjogWzI1NSwyMCwxNDcsMV0sXG4gIFwiZGVlcHNreWJsdWVcIjogWzAsMTkxLDI1NSwxXSwgXCJkaW1ncmF5XCI6IFsxMDUsMTA1LDEwNSwxXSxcbiAgXCJkaW1ncmV5XCI6IFsxMDUsMTA1LDEwNSwxXSwgXCJkb2RnZXJibHVlXCI6IFszMCwxNDQsMjU1LDFdLFxuICBcImZpcmVicmlja1wiOiBbMTc4LDM0LDM0LDFdLCBcImZsb3JhbHdoaXRlXCI6IFsyNTUsMjUwLDI0MCwxXSxcbiAgXCJmb3Jlc3RncmVlblwiOiBbMzQsMTM5LDM0LDFdLCBcImZ1Y2hzaWFcIjogWzI1NSwwLDI1NSwxXSxcbiAgXCJnYWluc2Jvcm9cIjogWzIyMCwyMjAsMjIwLDFdLCBcImdob3N0d2hpdGVcIjogWzI0OCwyNDgsMjU1LDFdLFxuICBcImdvbGRcIjogWzI1NSwyMTUsMCwxXSwgXCJnb2xkZW5yb2RcIjogWzIxOCwxNjUsMzIsMV0sXG4gIFwiZ3JheVwiOiBbMTI4LDEyOCwxMjgsMV0sIFwiZ3JlZW5cIjogWzAsMTI4LDAsMV0sXG4gIFwiZ3JlZW55ZWxsb3dcIjogWzE3MywyNTUsNDcsMV0sIFwiZ3JleVwiOiBbMTI4LDEyOCwxMjgsMV0sXG4gIFwiaG9uZXlkZXdcIjogWzI0MCwyNTUsMjQwLDFdLCBcImhvdHBpbmtcIjogWzI1NSwxMDUsMTgwLDFdLFxuICBcImluZGlhbnJlZFwiOiBbMjA1LDkyLDkyLDFdLCBcImluZGlnb1wiOiBbNzUsMCwxMzAsMV0sXG4gIFwiaXZvcnlcIjogWzI1NSwyNTUsMjQwLDFdLCBcImtoYWtpXCI6IFsyNDAsMjMwLDE0MCwxXSxcbiAgXCJsYXZlbmRlclwiOiBbMjMwLDIzMCwyNTAsMV0sIFwibGF2ZW5kZXJibHVzaFwiOiBbMjU1LDI0MCwyNDUsMV0sXG4gIFwibGF3bmdyZWVuXCI6IFsxMjQsMjUyLDAsMV0sIFwibGVtb25jaGlmZm9uXCI6IFsyNTUsMjUwLDIwNSwxXSxcbiAgXCJsaWdodGJsdWVcIjogWzE3MywyMTYsMjMwLDFdLCBcImxpZ2h0Y29yYWxcIjogWzI0MCwxMjgsMTI4LDFdLFxuICBcImxpZ2h0Y3lhblwiOiBbMjI0LDI1NSwyNTUsMV0sIFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogWzI1MCwyNTAsMjEwLDFdLFxuICBcImxpZ2h0Z3JheVwiOiBbMjExLDIxMSwyMTEsMV0sIFwibGlnaHRncmVlblwiOiBbMTQ0LDIzOCwxNDQsMV0sXG4gIFwibGlnaHRncmV5XCI6IFsyMTEsMjExLDIxMSwxXSwgXCJsaWdodHBpbmtcIjogWzI1NSwxODIsMTkzLDFdLFxuICBcImxpZ2h0c2FsbW9uXCI6IFsyNTUsMTYwLDEyMiwxXSwgXCJsaWdodHNlYWdyZWVuXCI6IFszMiwxNzgsMTcwLDFdLFxuICBcImxpZ2h0c2t5Ymx1ZVwiOiBbMTM1LDIwNiwyNTAsMV0sIFwibGlnaHRzbGF0ZWdyYXlcIjogWzExOSwxMzYsMTUzLDFdLFxuICBcImxpZ2h0c2xhdGVncmV5XCI6IFsxMTksMTM2LDE1MywxXSwgXCJsaWdodHN0ZWVsYmx1ZVwiOiBbMTc2LDE5NiwyMjIsMV0sXG4gIFwibGlnaHR5ZWxsb3dcIjogWzI1NSwyNTUsMjI0LDFdLCBcImxpbWVcIjogWzAsMjU1LDAsMV0sXG4gIFwibGltZWdyZWVuXCI6IFs1MCwyMDUsNTAsMV0sIFwibGluZW5cIjogWzI1MCwyNDAsMjMwLDFdLFxuICBcIm1hZ2VudGFcIjogWzI1NSwwLDI1NSwxXSwgXCJtYXJvb25cIjogWzEyOCwwLDAsMV0sXG4gIFwibWVkaXVtYXF1YW1hcmluZVwiOiBbMTAyLDIwNSwxNzAsMV0sIFwibWVkaXVtYmx1ZVwiOiBbMCwwLDIwNSwxXSxcbiAgXCJtZWRpdW1vcmNoaWRcIjogWzE4Niw4NSwyMTEsMV0sIFwibWVkaXVtcHVycGxlXCI6IFsxNDcsMTEyLDIxOSwxXSxcbiAgXCJtZWRpdW1zZWFncmVlblwiOiBbNjAsMTc5LDExMywxXSwgXCJtZWRpdW1zbGF0ZWJsdWVcIjogWzEyMywxMDQsMjM4LDFdLFxuICBcIm1lZGl1bXNwcmluZ2dyZWVuXCI6IFswLDI1MCwxNTQsMV0sIFwibWVkaXVtdHVycXVvaXNlXCI6IFs3MiwyMDksMjA0LDFdLFxuICBcIm1lZGl1bXZpb2xldHJlZFwiOiBbMTk5LDIxLDEzMywxXSwgXCJtaWRuaWdodGJsdWVcIjogWzI1LDI1LDExMiwxXSxcbiAgXCJtaW50Y3JlYW1cIjogWzI0NSwyNTUsMjUwLDFdLCBcIm1pc3R5cm9zZVwiOiBbMjU1LDIyOCwyMjUsMV0sXG4gIFwibW9jY2FzaW5cIjogWzI1NSwyMjgsMTgxLDFdLCBcIm5hdmFqb3doaXRlXCI6IFsyNTUsMjIyLDE3MywxXSxcbiAgXCJuYXZ5XCI6IFswLDAsMTI4LDFdLCBcIm9sZGxhY2VcIjogWzI1MywyNDUsMjMwLDFdLFxuICBcIm9saXZlXCI6IFsxMjgsMTI4LDAsMV0sIFwib2xpdmVkcmFiXCI6IFsxMDcsMTQyLDM1LDFdLFxuICBcIm9yYW5nZVwiOiBbMjU1LDE2NSwwLDFdLCBcIm9yYW5nZXJlZFwiOiBbMjU1LDY5LDAsMV0sXG4gIFwib3JjaGlkXCI6IFsyMTgsMTEyLDIxNCwxXSwgXCJwYWxlZ29sZGVucm9kXCI6IFsyMzgsMjMyLDE3MCwxXSxcbiAgXCJwYWxlZ3JlZW5cIjogWzE1MiwyNTEsMTUyLDFdLCBcInBhbGV0dXJxdW9pc2VcIjogWzE3NSwyMzgsMjM4LDFdLFxuICBcInBhbGV2aW9sZXRyZWRcIjogWzIxOSwxMTIsMTQ3LDFdLCBcInBhcGF5YXdoaXBcIjogWzI1NSwyMzksMjEzLDFdLFxuICBcInBlYWNocHVmZlwiOiBbMjU1LDIxOCwxODUsMV0sIFwicGVydVwiOiBbMjA1LDEzMyw2MywxXSxcbiAgXCJwaW5rXCI6IFsyNTUsMTkyLDIwMywxXSwgXCJwbHVtXCI6IFsyMjEsMTYwLDIyMSwxXSxcbiAgXCJwb3dkZXJibHVlXCI6IFsxNzYsMjI0LDIzMCwxXSwgXCJwdXJwbGVcIjogWzEyOCwwLDEyOCwxXSxcbiAgXCJyZWRcIjogWzI1NSwwLDAsMV0sIFwicm9zeWJyb3duXCI6IFsxODgsMTQzLDE0MywxXSxcbiAgXCJyb3lhbGJsdWVcIjogWzY1LDEwNSwyMjUsMV0sIFwic2FkZGxlYnJvd25cIjogWzEzOSw2OSwxOSwxXSxcbiAgXCJzYWxtb25cIjogWzI1MCwxMjgsMTE0LDFdLCBcInNhbmR5YnJvd25cIjogWzI0NCwxNjQsOTYsMV0sXG4gIFwic2VhZ3JlZW5cIjogWzQ2LDEzOSw4NywxXSwgXCJzZWFzaGVsbFwiOiBbMjU1LDI0NSwyMzgsMV0sXG4gIFwic2llbm5hXCI6IFsxNjAsODIsNDUsMV0sIFwic2lsdmVyXCI6IFsxOTIsMTkyLDE5MiwxXSxcbiAgXCJza3libHVlXCI6IFsxMzUsMjA2LDIzNSwxXSwgXCJzbGF0ZWJsdWVcIjogWzEwNiw5MCwyMDUsMV0sXG4gIFwic2xhdGVncmF5XCI6IFsxMTIsMTI4LDE0NCwxXSwgXCJzbGF0ZWdyZXlcIjogWzExMiwxMjgsMTQ0LDFdLFxuICBcInNub3dcIjogWzI1NSwyNTAsMjUwLDFdLCBcInNwcmluZ2dyZWVuXCI6IFswLDI1NSwxMjcsMV0sXG4gIFwic3RlZWxibHVlXCI6IFs3MCwxMzAsMTgwLDFdLCBcInRhblwiOiBbMjEwLDE4MCwxNDAsMV0sXG4gIFwidGVhbFwiOiBbMCwxMjgsMTI4LDFdLCBcInRoaXN0bGVcIjogWzIxNiwxOTEsMjE2LDFdLFxuICBcInRvbWF0b1wiOiBbMjU1LDk5LDcxLDFdLCBcInR1cnF1b2lzZVwiOiBbNjQsMjI0LDIwOCwxXSxcbiAgXCJ2aW9sZXRcIjogWzIzOCwxMzAsMjM4LDFdLCBcIndoZWF0XCI6IFsyNDUsMjIyLDE3OSwxXSxcbiAgXCJ3aGl0ZVwiOiBbMjU1LDI1NSwyNTUsMV0sIFwid2hpdGVzbW9rZVwiOiBbMjQ1LDI0NSwyNDUsMV0sXG4gIFwieWVsbG93XCI6IFsyNTUsMjU1LDAsMV0sIFwieWVsbG93Z3JlZW5cIjogWzE1NCwyMDUsNTAsMV19XG5cbmZ1bmN0aW9uIGNsYW1wX2Nzc19ieXRlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAyNTUuXG4gIGkgPSBNYXRoLnJvdW5kKGkpOyAgLy8gU2VlbXMgdG8gYmUgd2hhdCBDaHJvbWUgZG9lcyAodnMgdHJ1bmNhdGlvbikuXG4gIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMjU1ID8gMjU1IDogaTtcbn1cblxuZnVuY3Rpb24gY2xhbXBfY3NzX2Zsb2F0KGYpIHsgIC8vIENsYW1wIHRvIGZsb2F0IDAuMCAuLiAxLjAuXG4gIHJldHVybiBmIDwgMCA/IDAgOiBmID4gMSA/IDEgOiBmO1xufVxuXG5mdW5jdGlvbiBwYXJzZV9jc3NfaW50KHN0cikgeyAgLy8gaW50IG9yIHBlcmNlbnRhZ2UuXG4gIGlmIChzdHJbc3RyLmxlbmd0aCAtIDFdID09PSAnJScpXG4gICAgcmV0dXJuIGNsYW1wX2Nzc19ieXRlKHBhcnNlRmxvYXQoc3RyKSAvIDEwMCAqIDI1NSk7XG4gIHJldHVybiBjbGFtcF9jc3NfYnl0ZShwYXJzZUludChzdHIpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfY3NzX2Zsb2F0KHN0cikgeyAgLy8gZmxvYXQgb3IgcGVyY2VudGFnZS5cbiAgaWYgKHN0cltzdHIubGVuZ3RoIC0gMV0gPT09ICclJylcbiAgICByZXR1cm4gY2xhbXBfY3NzX2Zsb2F0KHBhcnNlRmxvYXQoc3RyKSAvIDEwMCk7XG4gIHJldHVybiBjbGFtcF9jc3NfZmxvYXQocGFyc2VGbG9hdChzdHIpKTtcbn1cblxuZnVuY3Rpb24gY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoKSB7XG4gIGlmIChoIDwgMCkgaCArPSAxO1xuICBlbHNlIGlmIChoID4gMSkgaCAtPSAxO1xuXG4gIGlmIChoICogNiA8IDEpIHJldHVybiBtMSArIChtMiAtIG0xKSAqIGggKiA2O1xuICBpZiAoaCAqIDIgPCAxKSByZXR1cm4gbTI7XG4gIGlmIChoICogMyA8IDIpIHJldHVybiBtMSArIChtMiAtIG0xKSAqICgyLzMgLSBoKSAqIDY7XG4gIHJldHVybiBtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDU1NDb2xvcihjc3Nfc3RyKSB7XG4gIC8vIFJlbW92ZSBhbGwgd2hpdGVzcGFjZSwgbm90IGNvbXBsaWFudCwgYnV0IHNob3VsZCBqdXN0IGJlIG1vcmUgYWNjZXB0aW5nLlxuICB2YXIgc3RyID0gY3NzX3N0ci5yZXBsYWNlKC8gL2csICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8vIENvbG9yIGtleXdvcmRzIChhbmQgdHJhbnNwYXJlbnQpIGxvb2t1cC5cbiAgaWYgKHN0ciBpbiBrQ1NTQ29sb3JUYWJsZSkgcmV0dXJuIGtDU1NDb2xvclRhYmxlW3N0cl0uc2xpY2UoKTsgIC8vIGR1cC5cblxuICAvLyAjYWJjIGFuZCAjYWJjMTIzIHN5bnRheC5cbiAgaWYgKHN0clswXSA9PT0gJyMnKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDQpIHtcbiAgICAgIHZhciBpdiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoMSksIDE2KTsgIC8vIFRPRE8oZGVhbm0pOiBTdHJpY3RlciBwYXJzaW5nLlxuICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZikpIHJldHVybiBudWxsOyAgLy8gQ292ZXJzIE5hTi5cbiAgICAgIHJldHVybiBbKChpdiAmIDB4ZjAwKSA+PiA0KSB8ICgoaXYgJiAweGYwMCkgPj4gOCksXG4gICAgICAgICAgICAgIChpdiAmIDB4ZjApIHwgKChpdiAmIDB4ZjApID4+IDQpLFxuICAgICAgICAgICAgICAoaXYgJiAweGYpIHwgKChpdiAmIDB4ZikgPDwgNCksXG4gICAgICAgICAgICAgIDFdO1xuICAgIH0gZWxzZSBpZiAoc3RyLmxlbmd0aCA9PT0gNykge1xuICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXG4gICAgICBpZiAoIShpdiA+PSAwICYmIGl2IDw9IDB4ZmZmZmZmKSkgcmV0dXJuIG51bGw7ICAvLyBDb3ZlcnMgTmFOLlxuICAgICAgcmV0dXJuIFsoaXYgJiAweGZmMDAwMCkgPj4gMTYsXG4gICAgICAgICAgICAgIChpdiAmIDB4ZmYwMCkgPj4gOCxcbiAgICAgICAgICAgICAgaXYgJiAweGZmLFxuICAgICAgICAgICAgICAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBvcCA9IHN0ci5pbmRleE9mKCcoJyksIGVwID0gc3RyLmluZGV4T2YoJyknKTtcbiAgaWYgKG9wICE9PSAtMSAmJiBlcCArIDEgPT09IHN0ci5sZW5ndGgpIHtcbiAgICB2YXIgZm5hbWUgPSBzdHIuc3Vic3RyKDAsIG9wKTtcbiAgICB2YXIgcGFyYW1zID0gc3RyLnN1YnN0cihvcCsxLCBlcC0ob3ArMSkpLnNwbGl0KCcsJyk7XG4gICAgdmFyIGFscGhhID0gMTsgIC8vIFRvIGFsbG93IGNhc2UgZmFsbHRocm91Z2guXG4gICAgc3dpdGNoIChmbmFtZSkge1xuICAgICAgY2FzZSAncmdiYSc6XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgYWxwaGEgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zLnBvcCgpKTtcbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoLlxuICAgICAgY2FzZSAncmdiJzpcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gW3BhcnNlX2Nzc19pbnQocGFyYW1zWzBdKSxcbiAgICAgICAgICAgICAgICBwYXJzZV9jc3NfaW50KHBhcmFtc1sxXSksXG4gICAgICAgICAgICAgICAgcGFyc2VfY3NzX2ludChwYXJhbXNbMl0pLFxuICAgICAgICAgICAgICAgIGFscGhhXTtcbiAgICAgIGNhc2UgJ2hzbGEnOlxuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGFscGhhID0gcGFyc2VfY3NzX2Zsb2F0KHBhcmFtcy5wb3AoKSk7XG4gICAgICAgIC8vIEZhbGwgdGhyb3VnaC5cbiAgICAgIGNhc2UgJ2hzbCc6XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGggPSAoKChwYXJzZUZsb2F0KHBhcmFtc1swXSkgJSAzNjApICsgMzYwKSAlIDM2MCkgLyAzNjA7ICAvLyAwIC4uIDFcbiAgICAgICAgLy8gTk9URShkZWFubSk6IEFjY29yZGluZyB0byB0aGUgQ1NTIHNwZWMgcy9sIHNob3VsZCBvbmx5IGJlXG4gICAgICAgIC8vIHBlcmNlbnRhZ2VzLCBidXQgd2UgZG9uJ3QgYm90aGVyIGFuZCBsZXQgZmxvYXQgb3IgcGVyY2VudGFnZS5cbiAgICAgICAgdmFyIHMgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zWzFdKTtcbiAgICAgICAgdmFyIGwgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zWzJdKTtcbiAgICAgICAgdmFyIG0yID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gbCAqIHM7XG4gICAgICAgIHZhciBtMSA9IGwgKiAyIC0gbTI7XG4gICAgICAgIHJldHVybiBbY2xhbXBfY3NzX2J5dGUoY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoKzEvMykgKiAyNTUpLFxuICAgICAgICAgICAgICAgIGNsYW1wX2Nzc19ieXRlKGNzc19odWVfdG9fcmdiKG0xLCBtMiwgaCkgKiAyNTUpLFxuICAgICAgICAgICAgICAgIGNsYW1wX2Nzc19ieXRlKGNzc19odWVfdG9fcmdiKG0xLCBtMiwgaC0xLzMpICogMjU1KSxcbiAgICAgICAgICAgICAgICBhbHBoYV07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudHJ5IHsgZXhwb3J0cy5wYXJzZUNTU0NvbG9yID0gcGFyc2VDU1NDb2xvciB9IGNhdGNoKGUpIHsgfVxuIiwiXCJ1c2Ugc3RyaWN0XCJcblxuZnVuY3Rpb24gZHVwZV9hcnJheShjb3VudCwgdmFsdWUsIGkpIHtcbiAgdmFyIGMgPSBjb3VudFtpXXwwXG4gIGlmKGMgPD0gMCkge1xuICAgIHJldHVybiBbXVxuICB9XG4gIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoYyksIGpcbiAgaWYoaSA9PT0gY291bnQubGVuZ3RoLTEpIHtcbiAgICBmb3Ioaj0wOyBqPGM7ICsraikge1xuICAgICAgcmVzdWx0W2pdID0gdmFsdWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yKGo9MDsgajxjOyArK2opIHtcbiAgICAgIHJlc3VsdFtqXSA9IGR1cGVfYXJyYXkoY291bnQsIHZhbHVlLCBpKzEpXG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gZHVwZV9udW1iZXIoY291bnQsIHZhbHVlKSB7XG4gIHZhciByZXN1bHQsIGlcbiAgcmVzdWx0ID0gbmV3IEFycmF5KGNvdW50KVxuICBmb3IoaT0wOyBpPGNvdW50OyArK2kpIHtcbiAgICByZXN1bHRbaV0gPSB2YWx1ZVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gZHVwZShjb3VudCwgdmFsdWUpIHtcbiAgaWYodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFsdWUgPSAwXG4gIH1cbiAgc3dpdGNoKHR5cGVvZiBjb3VudCkge1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIGlmKGNvdW50ID4gMCkge1xuICAgICAgICByZXR1cm4gZHVwZV9udW1iZXIoY291bnR8MCwgdmFsdWUpXG4gICAgICB9XG4gICAgYnJlYWtcbiAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICBpZih0eXBlb2YgKGNvdW50Lmxlbmd0aCkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGR1cGVfYXJyYXkoY291bnQsIHZhbHVlLCAwKVxuICAgICAgfVxuICAgIGJyZWFrXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZHVwZSIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChwb2ludHMpIHtcblxuICAgIHZhciBvdXRlck5vZGUgPSBsaW5rZWRMaXN0KHBvaW50c1swXSwgdHJ1ZSksXG4gICAgICAgIG5vZGUsIG1pblgsIG1pblksIG1heFgsIG1heFksIHgsIHksIHNpemUsXG4gICAgICAgIGxlbiA9IDAsXG4gICAgICAgIHRocmVzaG9sZCA9IDgwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGxlbiA8IHRocmVzaG9sZCAmJiBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSBsZW4gKz0gcG9pbnRzW2ldLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChsZW4gPj0gdGhyZXNob2xkKSB7XG4gICAgICAgIG5vZGUgPSBvdXRlck5vZGUubmV4dDtcbiAgICAgICAgbWluWCA9IG1heFggPSBub2RlLnBbMF07XG4gICAgICAgIG1pblkgPSBtYXhZID0gbm9kZS5wWzFdO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICB4ID0gbm9kZS5wWzBdO1xuICAgICAgICAgICAgeSA9IG5vZGUucFsxXTtcbiAgICAgICAgICAgIGlmICh4IDwgbWluWCkgbWluWCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA8IG1pblkpIG1pblkgPSB5O1xuICAgICAgICAgICAgaWYgKHggPiBtYXhYKSBtYXhYID0geDtcbiAgICAgICAgICAgIGlmICh5ID4gbWF4WSkgbWF4WSA9IHk7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICB9IHdoaWxlIChub2RlICE9PSBvdXRlck5vZGUpO1xuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGlmIChwb2ludHMubGVuZ3RoID4gMSkgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMocG9pbnRzLCBvdXRlck5vZGUpO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IFtdO1xuICAgIGlmIChvdXRlck5vZGUpIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICByZXR1cm4gdHJpYW5nbGVzO1xufVxuXG4vLyBjcmVhdGUgYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QgZnJvbSBwb2x5Z29uIHBvaW50cyBpbiB0aGUgc3BlY2lmaWVkIHdpbmRpbmcgb3JkZXJcbmZ1bmN0aW9uIGxpbmtlZExpc3QocG9pbnRzLCBjbG9ja3dpc2UpIHtcbiAgICB2YXIgc3VtID0gMCxcbiAgICAgICAgbGVuID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgaSwgaiwgbGFzdDtcblxuICAgIC8vIGNhbGN1bGF0ZSBvcmlnaW5hbCB3aW5kaW5nIG9yZGVyIG9mIGEgcG9seWdvbiByaW5nXG4gICAgZm9yIChpID0gMCwgaiA9IGxlbiAtIDE7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICAgICAgdmFyIHAxID0gcG9pbnRzW2ldLFxuICAgICAgICAgICAgcDIgPSBwb2ludHNbal07XG4gICAgICAgIHN1bSArPSAocDJbMF0gLSBwMVswXSkgKiAocDFbMV0gKyBwMlsxXSk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgbGFzdCA9IGluc2VydE5vZGUocG9pbnRzW2ldLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgbGFzdCA9IGluc2VydE5vZGUocG9pbnRzW2ldLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuZnVuY3Rpb24gZmlsdGVyUG9pbnRzKHN0YXJ0KSB7XG4gICAgLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbiAgICB2YXIgbm9kZSA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGVxdWFscyhub2RlLnAsIG5vZGUubmV4dC5wKSB8fCBvcmllbnQobm9kZS5wcmV2LnAsIG5vZGUucCwgbm9kZS5uZXh0LnApID09PSAwKSB7XG5cbiAgICAgICAgICAgIG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgbm9kZS5uZXh0LnByZXYgPSBub2RlLnByZXY7XG5cbiAgICAgICAgICAgIGlmIChub2RlLnByZXZaKSBub2RlLnByZXZaLm5leHRaID0gbm9kZS5uZXh0WjtcbiAgICAgICAgICAgIGlmIChub2RlLm5leHRaKSBub2RlLm5leHRaLnByZXZaID0gbm9kZS5wcmV2WjtcblxuICAgICAgICAgICAgbm9kZSA9IHN0YXJ0ID0gbm9kZS5wcmV2O1xuXG4gICAgICAgICAgICBpZiAobm9kZSA9PT0gbm9kZS5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IG5vZGUgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBzdGFydDtcbn1cblxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBtaW5YLCBtaW5ZLCBzaXplLCBzZWNvbmRQYXNzKSB7XG4gICAgZWFyID0gZmlsdGVyUG9pbnRzKGVhcik7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIGlmICghc2Vjb25kUGFzcyAmJiBtaW5YICE9PSB1bmRlZmluZWQpIGluZGV4Q3VydmUoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHZhciBzdG9wID0gZWFyLFxuICAgICAgICBwcmV2LCBuZXh0O1xuXG4gICAgLy8gaXRlcmF0ZSB0aHJvdWdoIGVhcnMsIHNsaWNpbmcgdGhlbSBvbmUgYnkgb25lXG4gICAgd2hpbGUgKGVhci5wcmV2ICE9PSBlYXIubmV4dCkge1xuICAgICAgICBwcmV2ID0gZWFyLnByZXY7XG4gICAgICAgIG5leHQgPSBlYXIubmV4dDtcblxuICAgICAgICBpZiAoaXNFYXIoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSkge1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gocHJldi5wLCBlYXIucCwgbmV4dC5wKTtcblxuICAgICAgICAgICAgbmV4dC5wcmV2ID0gcHJldjtcbiAgICAgICAgICAgIHByZXYubmV4dCA9IG5leHQ7XG5cbiAgICAgICAgICAgIGlmIChlYXIucHJldlopIGVhci5wcmV2Wi5uZXh0WiA9IGVhci5uZXh0WjtcbiAgICAgICAgICAgIGlmIChlYXIubmV4dFopIGVhci5uZXh0Wi5wcmV2WiA9IGVhci5wcmV2WjtcblxuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIGlmIHdlIGNhbid0IGZpbmQgYW55IG1vcmUgZWFycywgdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIGN1dHRpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghc2Vjb25kUGFzcykgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBtaW5YLCBtaW5ZLCBzaXplLCB0cnVlKTtcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgZGlkbid0IHdvcmssIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICBlbHNlIHNwbGl0RWFyY3V0KGVhciwgdHJpYW5nbGVzLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0VhcihlYXIsIG1pblgsIG1pblksIHNpemUpIHtcblxuICAgIHZhciBhID0gZWFyLnByZXYucCxcbiAgICAgICAgYiA9IGVhci5wLFxuICAgICAgICBjID0gZWFyLm5leHQucCxcblxuICAgICAgICBheCA9IGFbMF0sIGJ4ID0gYlswXSwgY3ggPSBjWzBdLFxuICAgICAgICBheSA9IGFbMV0sIGJ5ID0gYlsxXSwgY3kgPSBjWzFdLFxuXG4gICAgICAgIGFiZCA9IGF4ICogYnkgLSBheSAqIGJ4LFxuICAgICAgICBhY2QgPSBheCAqIGN5IC0gYXkgKiBjeCxcbiAgICAgICAgY2JkID0gY3ggKiBieSAtIGN5ICogYngsXG4gICAgICAgIEEgPSBhYmQgLSBhY2QgLSBjYmQ7XG5cbiAgICBpZiAoQSA8PSAwKSByZXR1cm4gZmFsc2U7IC8vIHJlZmxleCwgY2FuJ3QgYmUgYW4gZWFyXG5cbiAgICAvLyBub3cgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgb3RoZXIgcG9pbnRzIGluc2lkZSB0aGUgcG90ZW50aWFsIGVhclxuXG4gICAgdmFyIGNheSA9IGN5IC0gYXksXG4gICAgICAgIGFjeCA9IGF4IC0gY3gsXG4gICAgICAgIGFieSA9IGF5IC0gYnksXG4gICAgICAgIGJheCA9IGJ4IC0gYXgsXG4gICAgICAgIHAsIHB4LCBweSwgcywgdCwgaywgbm9kZTtcblxuICAgIC8vIGlmIHdlIHVzZSB6LW9yZGVyIGN1cnZlIGhhc2hpbmcsIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY3VydmVcbiAgICBpZiAobWluWCAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICAgICAgdmFyIG1pblRYID0gYXggPCBieCA/IChheCA8IGN4ID8gYXggOiBjeCkgOiAoYnggPCBjeCA/IGJ4IDogY3gpLFxuICAgICAgICAgICAgbWluVFkgPSBheSA8IGJ5ID8gKGF5IDwgY3kgPyBheSA6IGN5KSA6IChieSA8IGN5ID8gYnkgOiBjeSksXG4gICAgICAgICAgICBtYXhUWCA9IGF4ID4gYnggPyAoYXggPiBjeCA/IGF4IDogY3gpIDogKGJ4ID4gY3ggPyBieCA6IGN4KSxcbiAgICAgICAgICAgIG1heFRZID0gYXkgPiBieSA/IChheSA+IGN5ID8gYXkgOiBjeSkgOiAoYnkgPiBjeSA/IGJ5IDogY3kpLFxuXG4gICAgICAgICAgICAvLyB6LW9yZGVyIHJhbmdlIGZvciB0aGUgY3VycmVudCB0cmlhbmdsZSBiYm94O1xuICAgICAgICAgICAgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgICAgIC8vIGZpcnN0IGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIGluIGluY3JlYXNpbmcgei1vcmRlclxuICAgICAgICBub2RlID0gZWFyLm5leHRaO1xuXG4gICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUueiA8PSBtYXhaKSB7XG4gICAgICAgICAgICBwID0gbm9kZS5wO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dFo7XG4gICAgICAgICAgICBpZiAocCA9PT0gYSB8fCBwID09PSBjKSBjb250aW51ZTtcblxuICAgICAgICAgICAgcHggPSBwWzBdO1xuICAgICAgICAgICAgcHkgPSBwWzFdO1xuXG4gICAgICAgICAgICBzID0gY2F5ICogcHggKyBhY3ggKiBweSAtIGFjZDtcbiAgICAgICAgICAgIGlmIChzID49IDApIHtcbiAgICAgICAgICAgICAgICB0ID0gYWJ5ICogcHggKyBiYXggKiBweSArIGFiZDtcbiAgICAgICAgICAgICAgICBpZiAodCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGsgPSBBIC0gcyAtIHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoayA+PSAwKSAmJiAoKHMgJiYgdCkgfHwgKHMgJiYgaykgfHwgKHQgJiYgaykpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgICAgIG5vZGUgPSBlYXIucHJldlo7XG5cbiAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS56ID49IG1pblopIHtcbiAgICAgICAgICAgIHAgPSBub2RlLnA7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5wcmV2WjtcbiAgICAgICAgICAgIGlmIChwID09PSBhIHx8IHAgPT09IGMpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBweCA9IHBbMF07XG4gICAgICAgICAgICBweSA9IHBbMV07XG5cbiAgICAgICAgICAgIHMgPSBjYXkgKiBweCArIGFjeCAqIHB5IC0gYWNkO1xuICAgICAgICAgICAgaWYgKHMgPj0gMCkge1xuICAgICAgICAgICAgICAgIHQgPSBhYnkgKiBweCArIGJheCAqIHB5ICsgYWJkO1xuICAgICAgICAgICAgICAgIGlmICh0ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IEEgLSBzIC0gdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChrID49IDApICYmICgocyAmJiB0KSB8fCAocyAmJiBrKSB8fCAodCAmJiBrKSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIC8vIGlmIHdlIGRvbid0IHVzZSB6LW9yZGVyIGN1cnZlIGhhc2gsIHNpbXBseSBpdGVyYXRlIHRocm91Z2ggYWxsIG90aGVyIHBvaW50c1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgICAgIHdoaWxlIChub2RlICE9PSBlYXIucHJldikge1xuICAgICAgICAgICAgcCA9IG5vZGUucDtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG5cbiAgICAgICAgICAgIHB4ID0gcFswXTtcbiAgICAgICAgICAgIHB5ID0gcFsxXTtcblxuICAgICAgICAgICAgcyA9IGNheSAqIHB4ICsgYWN4ICogcHkgLSBhY2Q7XG4gICAgICAgICAgICBpZiAocyA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdCA9IGFieSAqIHB4ICsgYmF4ICogcHkgKyBhYmQ7XG4gICAgICAgICAgICAgICAgaWYgKHQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBrID0gQSAtIHMgLSB0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGsgPj0gMCkgJiYgKChzICYmIHQpIHx8IChzICYmIGspIHx8ICh0ICYmIGspKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gZmluZCBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiID0gYi5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIGEgPSBhLm5leHQ7XG4gICAgfSB3aGlsZSAoYSAhPT0gc3RhcnQpO1xufVxuXG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlcyhwb2ludHMsIG91dGVyTm9kZSkge1xuICAgIHZhciBsZW4gPSBwb2ludHMubGVuZ3RoO1xuXG4gICAgdmFyIHF1ZXVlID0gW107XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgbGlzdCA9IGZpbHRlclBvaW50cyhsaW5rZWRMaXN0KHBvaW50c1tpXSwgZmFsc2UpKTtcbiAgICAgICAgaWYgKGxpc3QpIHF1ZXVlLnB1c2goZ2V0TGVmdG1vc3QobGlzdCkpO1xuICAgIH1cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRlck5vZGU7XG59XG5cbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGUoaG9sZU5vZGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGVOb2RlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHNwbGl0UG9seWdvbihob2xlTm9kZSwgb3V0ZXJOb2RlKTtcbn1cblxuLy8gRGF2aWQgRWJlcmx5J3MgYWxnb3JpdGhtIGZvciBmaW5kaW5nIGEgYnJpZGdlIGJldHdlZW4gaG9sZSBhbmQgb3V0ZXIgcG9seWdvblxuZnVuY3Rpb24gZmluZEhvbGVCcmlkZ2UoaG9sZU5vZGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBub2RlID0gb3V0ZXJOb2RlLFxuICAgICAgICBwID0gaG9sZU5vZGUucCxcbiAgICAgICAgcHggPSBwWzBdLFxuICAgICAgICBweSA9IHBbMV0sXG4gICAgICAgIHFNYXggPSAtSW5maW5pdHksXG4gICAgICAgIG1Ob2RlLCBhLCBiO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGEgPSBub2RlLnA7XG4gICAgICAgIGIgPSBub2RlLm5leHQucDtcblxuICAgICAgICBpZiAocHkgPD0gYVsxXSAmJiBweSA+PSBiWzFdKSB7XG4gICAgICAgICAgICB2YXIgcXggPSBhWzBdICsgKHB5IC0gYVsxXSkgKiAoYlswXSAtIGFbMF0pIC8gKGJbMV0gLSBhWzFdKTtcbiAgICAgICAgICAgIGlmIChxeCA8PSBweCAmJiBxeCA+IHFNYXgpIHtcbiAgICAgICAgICAgICAgICBxTWF4ID0gcXg7XG4gICAgICAgICAgICAgICAgbU5vZGUgPSBhWzBdIDwgYlswXSA/IG5vZGUgOiBub2RlLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICB9IHdoaWxlIChub2RlICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtTm9kZSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgc3RyaWN0bHkgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBieCA9IG1Ob2RlLnBbMF0sXG4gICAgICAgIGJ5ID0gbU5vZGUucFsxXSxcbiAgICAgICAgcGJkID0gcHggKiBieSAtIHB5ICogYngsXG4gICAgICAgIHBjZCA9IHB4ICogcHkgLSBweSAqIHFNYXgsXG4gICAgICAgIGNweSA9IHB5IC0gcHksXG4gICAgICAgIHBjeCA9IHB4IC0gcU1heCxcbiAgICAgICAgcGJ5ID0gcHkgLSBieSxcbiAgICAgICAgYnB4ID0gYnggLSBweCxcbiAgICAgICAgQSA9IHBiZCAtIHBjZCAtIChxTWF4ICogYnkgLSBweSAqIGJ4KSxcbiAgICAgICAgc2lnbiA9IEEgPD0gMCA/IC0xIDogMSxcbiAgICAgICAgc3RvcCA9IG1Ob2RlLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgbXgsIG15LCBhbXgsIHMsIHQsIHRhbjtcblxuICAgIG5vZGUgPSBtTm9kZS5uZXh0O1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IHN0b3ApIHtcblxuICAgICAgICBteCA9IG5vZGUucFswXTtcbiAgICAgICAgbXkgPSBub2RlLnBbMV07XG4gICAgICAgIGFteCA9IHB4IC0gbXg7XG5cbiAgICAgICAgaWYgKGFteCA+PSAwICYmIG14ID49IGJ4KSB7XG4gICAgICAgICAgICBzID0gKGNweSAqIG14ICsgcGN4ICogbXkgLSBwY2QpICogc2lnbjtcbiAgICAgICAgICAgIGlmIChzID49IDApIHtcbiAgICAgICAgICAgICAgICB0ID0gKHBieSAqIG14ICsgYnB4ICogbXkgKyBwYmQpICogc2lnbjtcblxuICAgICAgICAgICAgICAgIGlmICh0ID49IDAgJiYgQSAqIHNpZ24gLSBzIC0gdCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKHB5IC0gbXkpIC8gYW14OyAvLyB0YW5nZW50aWFsXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YW4gPCB0YW5NaW4gJiYgbG9jYWxseUluc2lkZShub2RlLCBob2xlTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1Ob2RlID0gbm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhbk1pbiA9IHRhbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1Ob2RlO1xufVxuXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIG5vZGUgPSBzdGFydDtcblxuICAgIGRvIHtcbiAgICAgICAgbm9kZS56ID0gbm9kZS56IHx8IHpPcmRlcihub2RlLnBbMF0sIG5vZGUucFsxXSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIG5vZGUucHJldlogPSBub2RlLnByZXY7XG4gICAgICAgIG5vZGUubmV4dFogPSBub2RlLm5leHQ7XG4gICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgfSB3aGlsZSAobm9kZSAhPT0gc3RhcnQpO1xuXG4gICAgbm9kZS5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgbm9kZS5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKG5vZGUpO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcblxuICAgICAgICBpZiAobnVtTWVyZ2VzIDw9IDEpIHJldHVybiBsaXN0O1xuXG4gICAgICAgIGluU2l6ZSAqPSAyO1xuICAgIH1cbn1cblxuLy8gei1vcmRlciBvZiBhIHBvaW50IGdpdmVuIGNvb3JkcyBhbmQgYmJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gKDAuLjEwMDApIGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMTAwMCAqICh4IC0gbWluWCkgLyBzaXplO1xuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gMTAwMCAqICh5IC0gbWluWSkgLyBzaXplO1xuICAgIHkgPSAoeSB8ICh5IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeSA9ICh5IHwgKHkgPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB5ID0gKHkgfCAoeSA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHkgPSAoeSB8ICh5IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICByZXR1cm4geCB8ICh5IDw8IDEpO1xufVxuXG5mdW5jdGlvbiBnZXRMZWZ0bW9zdChzdGFydCkge1xuICAgIHZhciBub2RlID0gc3RhcnQsXG4gICAgICAgIGxlZnRtb3N0ID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAobm9kZS5wWzBdIDwgbGVmdG1vc3QucFswXSkgbGVmdG1vc3QgPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgIH0gd2hpbGUgKG5vZGUgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBsZWZ0bW9zdDtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gIWludGVyc2VjdHNQb2x5Z29uKGEsIGEucCwgYi5wKSAmJlxuICAgICAgICAgICBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkgJiZcbiAgICAgICAgICAgbWlkZGxlSW5zaWRlKGEsIGEucCwgYi5wKTtcbn1cblxuLy8gd2luZGluZyBvcmRlciBvZiB0cmlhbmdsZSBmb3JtZWQgYnkgMyBnaXZlbiBwb2ludHNcbmZ1bmN0aW9uIG9yaWVudChwLCBxLCByKSB7XG4gICAgdmFyIG8gPSAocVsxXSAtIHBbMV0pICogKHJbMF0gLSBxWzBdKSAtIChxWzBdIC0gcFswXSkgKiAoclsxXSAtIHFbMV0pO1xuICAgIHJldHVybiBvID4gMCA/IDEgOlxuICAgICAgICAgICBvIDwgMCA/IC0xIDogMDtcbn1cblxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMVswXSA9PT0gcDJbMF0gJiYgcDFbMV0gPT09IHAyWzFdO1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIG9yaWVudChwMSwgcTEsIHAyKSAhPT0gb3JpZW50KHAxLCBxMSwgcTIpICYmXG4gICAgICAgICAgIG9yaWVudChwMiwgcTIsIHAxKSAhPT0gb3JpZW50KHAyLCBxMiwgcTEpO1xufVxuXG4vLyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaW50ZXJzZWN0cyBhbnkgcG9seWdvbiBzZWdtZW50c1xuZnVuY3Rpb24gaW50ZXJzZWN0c1BvbHlnb24oc3RhcnQsIGEsIGIpIHtcbiAgICB2YXIgbm9kZSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIHAxID0gbm9kZS5wLFxuICAgICAgICAgICAgcDIgPSBub2RlLm5leHQucDtcblxuICAgICAgICBpZiAocDEgIT09IGEgJiYgcDIgIT09IGEgJiYgcDEgIT09IGIgJiYgcDIgIT09IGIgJiYgaW50ZXJzZWN0cyhwMSwgcDIsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgIH0gd2hpbGUgKG5vZGUgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gb3JpZW50KGEucHJldi5wLCBhLnAsIGEubmV4dC5wKSA9PT0gLTEgP1xuICAgICAgICBvcmllbnQoYS5wLCBiLnAsIGEubmV4dC5wKSAhPT0gLTEgJiYgb3JpZW50KGEucCwgYS5wcmV2LnAsIGIucCkgIT09IC0xIDpcbiAgICAgICAgb3JpZW50KGEucCwgYi5wLCBhLnByZXYucCkgPT09IC0xIHx8IG9yaWVudChhLnAsIGEubmV4dC5wLCBiLnApID09PSAtMTtcbn1cblxuLy8gY2hlY2sgaWYgdGhlIG1pZGRsZSBwb2ludCBvZiBhIHBvbHlnb24gZGlhZ29uYWwgaXMgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBtaWRkbGVJbnNpZGUoc3RhcnQsIGEsIGIpIHtcbiAgICB2YXIgbm9kZSA9IHN0YXJ0LFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYVswXSArIGJbMF0pIC8gMixcbiAgICAgICAgcHkgPSAoYVsxXSArIGJbMV0pIC8gMjtcbiAgICBkbyB7XG4gICAgICAgIHZhciBwMSA9IG5vZGUucCxcbiAgICAgICAgICAgIHAyID0gbm9kZS5uZXh0LnA7XG5cbiAgICAgICAgaWYgKCgocDFbMV0gPiBweSkgIT09IChwMlsxXSA+IHB5KSkgJiZcbiAgICAgICAgICAgIChweCA8IChwMlswXSAtIHAxWzBdKSAqIChweSAtIHAxWzFdKSAvIChwMlsxXSAtIHAxWzFdKSArIHAxWzBdKSkgaW5zaWRlID0gIWluc2lkZTtcblxuICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgIH0gd2hpbGUgKG5vZGUgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBpbnNpZGU7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVYKGEsIGIpIHtcbiAgICByZXR1cm4gYS5wWzBdIC0gYi5wWzBdO1xufVxuXG4vLyBzcGxpdCB0aGUgcG9seWdvbiB2ZXJ0aWNlcyBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpbmtlZCBsaXN0IGludG8gdHdvXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEucCksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5wKSxcbiAgICAgICAgYW4gPSBhLm5leHQsXG4gICAgICAgIGJwID0gYi5wcmV2O1xuXG4gICAgYS5uZXh0ID0gYjtcbiAgICBiLnByZXYgPSBhO1xuXG4gICAgYTIubmV4dCA9IGFuO1xuICAgIGFuLnByZXYgPSBhMjtcblxuICAgIGIyLm5leHQgPSBhMjtcbiAgICBhMi5wcmV2ID0gYjI7XG5cbiAgICBicC5uZXh0ID0gYjI7XG4gICAgYjIucHJldiA9IGJwO1xuXG4gICAgcmV0dXJuIGEyO1xufVxuXG5mdW5jdGlvbiBpbnNlcnROb2RlKHBvaW50LCBsYXN0KSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgTm9kZShwb2ludCk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgbm9kZS5wcmV2ID0gbm9kZTtcbiAgICAgICAgbm9kZS5uZXh0ID0gbm9kZTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgbm9kZS5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBub2RlO1xuICAgICAgICBsYXN0Lm5leHQgPSBub2RlO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gTm9kZShwKSB7XG4gICAgdGhpcy5wID0gcDtcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnogPSBudWxsO1xuICAgIHRoaXMucHJldlogPSBudWxsO1xuICAgIHRoaXMubmV4dFogPSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsaXA7XG5cbi8qIGNsaXAgZmVhdHVyZXMgYmV0d2VlbiB0d28gYXhpcy1wYXJhbGxlbCBsaW5lczpcbiAqICAgICB8ICAgICAgICB8XG4gKiAgX19ffF9fXyAgICAgfCAgICAgL1xuICogLyAgIHwgICBcXF9fX198X19fXy9cbiAqICAgICB8ICAgICAgICB8XG4gKi9cblxuZnVuY3Rpb24gY2xpcChmZWF0dXJlcywgc2NhbGUsIGsxLCBrMiwgYXhpcywgaW50ZXJzZWN0LCBtaW5BbGwsIG1heEFsbCkge1xuXG4gICAgazEgLz0gc2NhbGU7XG4gICAgazIgLz0gc2NhbGU7XG5cbiAgICBpZiAobWluQWxsID49IGsxICYmIG1heEFsbCA8PSBrMikgcmV0dXJuIGZlYXR1cmVzOyAvLyB0cml2aWFsIGFjY2VwdFxuICAgIGVsc2UgaWYgKG1pbkFsbCA+IGsyIHx8IG1heEFsbCA8IGsxKSByZXR1cm4gbnVsbDsgLy8gdHJpdmlhbCByZWplY3RcblxuICAgIHZhciBjbGlwcGVkID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIGZlYXR1cmUgPSBmZWF0dXJlc1tpXSxcbiAgICAgICAgICAgIGdlb21ldHJ5ID0gZmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICBtaW4sIG1heDtcblxuICAgICAgICBtaW4gPSBmZWF0dXJlLm1pbltheGlzXTtcbiAgICAgICAgbWF4ID0gZmVhdHVyZS5tYXhbYXhpc107XG5cbiAgICAgICAgaWYgKG1pbiA+PSBrMSAmJiBtYXggPD0gazIpIHsgLy8gdHJpdmlhbCBhY2NlcHRcbiAgICAgICAgICAgIGNsaXBwZWQucHVzaChmZWF0dXJlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbiA+IGsyIHx8IG1heCA8IGsxKSBjb250aW51ZTsgLy8gdHJpdmlhbCByZWplY3RcblxuICAgICAgICB2YXIgc2xpY2VzID0gdHlwZSA9PT0gMSA/XG4gICAgICAgICAgICAgICAgY2xpcFBvaW50cyhnZW9tZXRyeSwgazEsIGsyLCBheGlzKSA6XG4gICAgICAgICAgICAgICAgY2xpcEdlb21ldHJ5KGdlb21ldHJ5LCBrMSwgazIsIGF4aXMsIGludGVyc2VjdCwgdHlwZSA9PT0gMyk7XG5cbiAgICAgICAgaWYgKHNsaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGlmIGEgZmVhdHVyZSBnb3QgY2xpcHBlZCwgaXQgd2lsbCBsaWtlbHkgZ2V0IGNsaXBwZWQgb24gdGhlIG5leHQgem9vbSBsZXZlbCBhcyB3ZWxsLFxuICAgICAgICAgICAgLy8gc28gdGhlcmUncyBubyBuZWVkIHRvIHJlY2FsY3VsYXRlIGJib3hlc1xuICAgICAgICAgICAgY2xpcHBlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogc2xpY2VzLFxuICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgdGFnczogZmVhdHVyZXNbaV0udGFncyB8fCBudWxsLFxuICAgICAgICAgICAgICAgIG1pbjogZmVhdHVyZS5taW4sXG4gICAgICAgICAgICAgICAgbWF4OiBmZWF0dXJlLm1heFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xpcHBlZC5sZW5ndGggPyBjbGlwcGVkIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gY2xpcFBvaW50cyhnZW9tZXRyeSwgazEsIGsyLCBheGlzKSB7XG4gICAgdmFyIHNsaWNlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBhID0gZ2VvbWV0cnlbaV0sXG4gICAgICAgICAgICBhayA9IGFbYXhpc107XG5cbiAgICAgICAgaWYgKGFrID49IGsxICYmIGFrIDw9IGsyKSBzbGljZS5wdXNoKGEpO1xuICAgIH1cbiAgICByZXR1cm4gc2xpY2U7XG59XG5cbmZ1bmN0aW9uIGNsaXBHZW9tZXRyeShnZW9tZXRyeSwgazEsIGsyLCBheGlzLCBpbnRlcnNlY3QsIGNsb3NlZCkge1xuXG4gICAgdmFyIHNsaWNlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tZXRyeS5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgIHZhciBhayA9IDAsXG4gICAgICAgICAgICBiayA9IDAsXG4gICAgICAgICAgICBiID0gbnVsbCxcbiAgICAgICAgICAgIHBvaW50cyA9IGdlb21ldHJ5W2ldLFxuICAgICAgICAgICAgYXJlYSA9IHBvaW50cy5hcmVhLFxuICAgICAgICAgICAgZGlzdCA9IHBvaW50cy5kaXN0LFxuICAgICAgICAgICAgbGVuID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgICAgIGEsIGosIGxhc3Q7XG5cbiAgICAgICAgdmFyIHNsaWNlID0gW107XG5cbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbiAtIDE7IGorKykge1xuICAgICAgICAgICAgYSA9IGIgfHwgcG9pbnRzW2pdO1xuICAgICAgICAgICAgYiA9IHBvaW50c1tqICsgMV07XG4gICAgICAgICAgICBhayA9IGJrIHx8IGFbYXhpc107XG4gICAgICAgICAgICBiayA9IGJbYXhpc107XG5cbiAgICAgICAgICAgIGlmIChhayA8IGsxKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoKGJrID4gazIpKSB7IC8vIC0tLXwtLS0tLXwtLT5cbiAgICAgICAgICAgICAgICAgICAgc2xpY2UucHVzaChpbnRlcnNlY3QoYSwgYiwgazEpLCBpbnRlcnNlY3QoYSwgYiwgazIpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjbG9zZWQpIHNsaWNlID0gbmV3U2xpY2Uoc2xpY2VzLCBzbGljZSwgYXJlYSwgZGlzdCk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJrID49IGsxKSBzbGljZS5wdXNoKGludGVyc2VjdChhLCBiLCBrMSkpOyAvLyAtLS18LS0+ICB8XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWsgPiBrMikge1xuXG4gICAgICAgICAgICAgICAgaWYgKChiayA8IGsxKSkgeyAvLyA8LS18LS0tLS18LS0tXG4gICAgICAgICAgICAgICAgICAgIHNsaWNlLnB1c2goaW50ZXJzZWN0KGEsIGIsIGsyKSwgaW50ZXJzZWN0KGEsIGIsIGsxKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2xvc2VkKSBzbGljZSA9IG5ld1NsaWNlKHNsaWNlcywgc2xpY2UsIGFyZWEsIGRpc3QpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiayA8PSBrMikgc2xpY2UucHVzaChpbnRlcnNlY3QoYSwgYiwgazIpKTsgLy8gfCAgPC0tfC0tLVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgc2xpY2UucHVzaChhKTtcblxuICAgICAgICAgICAgICAgIGlmIChiayA8IGsxKSB7IC8vIDwtLXwtLS0gIHxcbiAgICAgICAgICAgICAgICAgICAgc2xpY2UucHVzaChpbnRlcnNlY3QoYSwgYiwgazEpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjbG9zZWQpIHNsaWNlID0gbmV3U2xpY2Uoc2xpY2VzLCBzbGljZSwgYXJlYSwgZGlzdCk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJrID4gazIpIHsgLy8gfCAgLS0tfC0tPlxuICAgICAgICAgICAgICAgICAgICBzbGljZS5wdXNoKGludGVyc2VjdChhLCBiLCBrMikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNsb3NlZCkgc2xpY2UgPSBuZXdTbGljZShzbGljZXMsIHNsaWNlLCBhcmVhLCBkaXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gfCAtLT4gfFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHRoZSBsYXN0IHBvaW50XG4gICAgICAgIGEgPSBwb2ludHNbbGVuIC0gMV07XG4gICAgICAgIGFrID0gYVtheGlzXTtcbiAgICAgICAgaWYgKGFrID49IGsxICYmIGFrIDw9IGsyKSBzbGljZS5wdXNoKGEpO1xuXG4gICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5Z29uIGlmIGl0cyBlbmRwb2ludHMgYXJlIG5vdCB0aGUgc2FtZSBhZnRlciBjbGlwcGluZ1xuXG4gICAgICAgIGxhc3QgPSBzbGljZVtzbGljZS5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGNsb3NlZCAmJiBsYXN0ICYmIChzbGljZVswXVswXSAhPT0gbGFzdFswXSB8fCBzbGljZVswXVsxXSAhPT0gbGFzdFsxXSkpIHNsaWNlLnB1c2goc2xpY2VbMF0pO1xuXG4gICAgICAgIC8vIGFkZCB0aGUgZmluYWwgc2xpY2VcbiAgICAgICAgbmV3U2xpY2Uoc2xpY2VzLCBzbGljZSwgYXJlYSwgZGlzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNsaWNlcztcbn1cblxuZnVuY3Rpb24gbmV3U2xpY2Uoc2xpY2VzLCBzbGljZSwgYXJlYSwgZGlzdCkge1xuICAgIGlmIChzbGljZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gd2UgZG9uJ3QgcmVjYWxjdWxhdGUgdGhlIGFyZWEvbGVuZ3RoIG9mIHRoZSB1bmNsaXBwZWQgZ2VvbWV0cnkgYmVjYXVzZSB0aGUgY2FzZSB3aGVyZSBpdCBnb2VzXG4gICAgICAgIC8vIGJlbG93IHRoZSB2aXNpYmlsaXR5IHRocmVzaG9sZCBhcyBhIHJlc3VsdCBvZiBjbGlwcGluZyBpcyByYXJlLCBzbyB3ZSBhdm9pZCBkb2luZyB1bm5lY2Vzc2FyeSB3b3JrXG4gICAgICAgIHNsaWNlLmFyZWEgPSBhcmVhO1xuICAgICAgICBzbGljZS5kaXN0ID0gZGlzdDtcblxuICAgICAgICBzbGljZXMucHVzaChzbGljZSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0O1xuXG52YXIgc2ltcGxpZnkgPSByZXF1aXJlKCcuL3NpbXBsaWZ5Jyk7XG5cbi8vIGNvbnZlcnRzIEdlb0pTT04gZmVhdHVyZSBpbnRvIGFuIGludGVybWVkaWF0ZSBwcm9qZWN0ZWQgSlNPTiB2ZWN0b3IgZm9ybWF0IHdpdGggc2ltcGxpZmljYXRpb24gZGF0YVxuXG5mdW5jdGlvbiBjb252ZXJ0KGRhdGEsIHRvbGVyYW5jZSkge1xuICAgIHZhciBmZWF0dXJlcyA9IFtdO1xuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEuZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnZlcnRGZWF0dXJlKGZlYXR1cmVzLCBkYXRhLmZlYXR1cmVzW2ldLCB0b2xlcmFuY2UpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdGZWF0dXJlJykge1xuICAgICAgICBjb252ZXJ0RmVhdHVyZShmZWF0dXJlcywgZGF0YSwgdG9sZXJhbmNlKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNpbmdsZSBnZW9tZXRyeSBvciBhIGdlb21ldHJ5IGNvbGxlY3Rpb25cbiAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIHtnZW9tZXRyeTogZGF0YX0sIHRvbGVyYW5jZSk7XG4gICAgfVxuICAgIHJldHVybiBmZWF0dXJlcztcbn1cblxuZnVuY3Rpb24gY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIGZlYXR1cmUsIHRvbGVyYW5jZSkge1xuICAgIHZhciBnZW9tID0gZmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgdHlwZSA9IGdlb20udHlwZSxcbiAgICAgICAgY29vcmRzID0gZ2VvbS5jb29yZGluYXRlcyxcbiAgICAgICAgdGFncyA9IGZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgaSwgaiwgcmluZ3M7XG5cbiAgICBpZiAodHlwZSA9PT0gJ1BvaW50Jykge1xuICAgICAgICBmZWF0dXJlcy5wdXNoKGNyZWF0ZSh0YWdzLCAxLCBbcHJvamVjdFBvaW50KGNvb3JkcyldKSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvaW50Jykge1xuICAgICAgICBmZWF0dXJlcy5wdXNoKGNyZWF0ZSh0YWdzLCAxLCBwcm9qZWN0KGNvb3JkcykpKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgIGZlYXR1cmVzLnB1c2goY3JlYXRlKHRhZ3MsIDIsIFtwcm9qZWN0KGNvb3JkcywgdG9sZXJhbmNlKV0pKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycgfHwgdHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIHJpbmdzID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJpbmdzLnB1c2gocHJvamVjdChjb29yZHNbaV0sIHRvbGVyYW5jZSkpO1xuICAgICAgICB9XG4gICAgICAgIGZlYXR1cmVzLnB1c2goY3JlYXRlKHRhZ3MsIHR5cGUgPT09ICdQb2x5Z29uJyA/IDMgOiAyLCByaW5ncykpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICByaW5ncyA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29vcmRzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgcmluZ3MucHVzaChwcm9qZWN0KGNvb3Jkc1tpXVtqXSwgdG9sZXJhbmNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmVhdHVyZXMucHVzaChjcmVhdGUodGFncywgMywgcmluZ3MpKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0dlb21ldHJ5Q29sbGVjdGlvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdlb20uZ2VvbWV0cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIHtcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogZ2VvbS5nZW9tZXRyaWVzW2ldLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHRhZ3NcbiAgICAgICAgICAgIH0sIHRvbGVyYW5jZSk7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4nKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZSh0YWdzLCB0eXBlLCBnZW9tZXRyeSkge1xuICAgIHZhciBmZWF0dXJlID0ge1xuICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnksXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIHRhZ3M6IHRhZ3MgfHwgbnVsbCxcbiAgICAgICAgbWluOiBbMiwgMV0sIC8vIGluaXRpYWwgYmJveCB2YWx1ZXM7XG4gICAgICAgIG1heDogWy0xLCAwXSAgLy8gbm90ZSB0aGF0IGNvb3JkcyBhcmUgdXN1YWxseSBpbiBbMC4uMV0gcmFuZ2VcbiAgICB9O1xuICAgIGNhbGNCQm94KGZlYXR1cmUpO1xuICAgIHJldHVybiBmZWF0dXJlO1xufVxuXG5mdW5jdGlvbiBwcm9qZWN0KGxvbmxhdHMsIHRvbGVyYW5jZSkge1xuICAgIHZhciBwcm9qZWN0ZWQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmxhdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcHJvamVjdGVkLnB1c2gocHJvamVjdFBvaW50KGxvbmxhdHNbaV0pKTtcbiAgICB9XG4gICAgaWYgKHRvbGVyYW5jZSkge1xuICAgICAgICBzaW1wbGlmeShwcm9qZWN0ZWQsIHRvbGVyYW5jZSk7XG4gICAgICAgIGNhbGNTaXplKHByb2plY3RlZCk7XG4gICAgfVxuICAgIHJldHVybiBwcm9qZWN0ZWQ7XG59XG5cbmZ1bmN0aW9uIHByb2plY3RQb2ludChwKSB7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKHBbMV0gKiBNYXRoLlBJIC8gMTgwKSxcbiAgICAgICAgeCA9IChwWzBdIC8gMzYwICsgMC41KSxcbiAgICAgICAgeSA9ICgwLjUgLSAwLjI1ICogTWF0aC5sb2coKDEgKyBzaW4pIC8gKDEgLSBzaW4pKSAvIE1hdGguUEkpO1xuXG4gICAgeSA9IHkgPCAtMSA/IC0xIDpcbiAgICAgICAgeSA+IDEgPyAxIDogeTtcblxuICAgIHJldHVybiBbeCwgeSwgMF07XG59XG5cbi8vIGNhbGN1bGF0ZSBhcmVhIGFuZCBsZW5ndGggb2YgdGhlIHBvbHlcbmZ1bmN0aW9uIGNhbGNTaXplKHBvaW50cykge1xuICAgIHZhciBhcmVhID0gMCxcbiAgICAgICAgZGlzdCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgYSwgYjsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgYSA9IGIgfHwgcG9pbnRzW2ldO1xuICAgICAgICBiID0gcG9pbnRzW2kgKyAxXTtcblxuICAgICAgICBhcmVhICs9IGFbMF0gKiBiWzFdIC0gYlswXSAqIGFbMV07XG5cbiAgICAgICAgLy8gdXNlIE1hbmhhdHRhbiBkaXN0YW5jZSBpbnN0ZWFkIG9mIEV1Y2xpZGlhbiBvbmUgdG8gYXZvaWQgZXhwZW5zaXZlIHNxdWFyZSByb290IGNvbXB1dGF0aW9uXG4gICAgICAgIGRpc3QgKz0gTWF0aC5hYnMoYlswXSAtIGFbMF0pICsgTWF0aC5hYnMoYlsxXSAtIGFbMV0pO1xuICAgIH1cbiAgICBwb2ludHMuYXJlYSA9IE1hdGguYWJzKGFyZWEgLyAyKTtcbiAgICBwb2ludHMuZGlzdCA9IGRpc3Q7XG59XG5cbi8vIGNhbGN1bGF0ZSB0aGUgZmVhdHVyZSBib3VuZGluZyBib3ggZm9yIGZhc3RlciBjbGlwcGluZyBsYXRlclxuZnVuY3Rpb24gY2FsY0JCb3goZmVhdHVyZSkge1xuICAgIHZhciBnZW9tZXRyeSA9IGZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgIG1pbiA9IGZlYXR1cmUubWluLFxuICAgICAgICBtYXggPSBmZWF0dXJlLm1heDtcblxuICAgIGlmIChmZWF0dXJlLnR5cGUgPT09IDEpIGNhbGNSaW5nQkJveChtaW4sIG1heCwgZ2VvbWV0cnkpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tZXRyeS5sZW5ndGg7IGkrKykgY2FsY1JpbmdCQm94KG1pbiwgbWF4LCBnZW9tZXRyeVtpXSk7XG5cbiAgICByZXR1cm4gZmVhdHVyZTtcbn1cblxuZnVuY3Rpb24gY2FsY1JpbmdCQm94KG1pbiwgbWF4LCBwb2ludHMpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgcDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwID0gcG9pbnRzW2ldO1xuICAgICAgICBtaW5bMF0gPSBNYXRoLm1pbihwWzBdLCBtaW5bMF0pO1xuICAgICAgICBtYXhbMF0gPSBNYXRoLm1heChwWzBdLCBtYXhbMF0pO1xuICAgICAgICBtaW5bMV0gPSBNYXRoLm1pbihwWzFdLCBtaW5bMV0pO1xuICAgICAgICBtYXhbMV0gPSBNYXRoLm1heChwWzFdLCBtYXhbMV0pO1xuICAgIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBnZW9qc29udnQ7XG5cbnZhciBjb252ZXJ0ID0gcmVxdWlyZSgnLi9jb252ZXJ0JyksIC8vIEdlb0pTT04gY29udmVyc2lvbiBhbmQgcHJlcHJvY2Vzc2luZ1xuICAgIGNsaXAgPSByZXF1aXJlKCcuL2NsaXAnKSwgICAgICAgLy8gc3RyaXBlIGNsaXBwaW5nIGFsZ29yaXRobVxuICAgIHdyYXAgPSByZXF1aXJlKCcuL3dyYXAnKSwgICAgICAgLy8gZGF0ZSBsaW5lIHByb2Nlc3NpbmdcbiAgICBjcmVhdGVUaWxlID0gcmVxdWlyZSgnLi90aWxlJyk7IC8vIGZpbmFsIHNpbXBsaWZpZWQgdGlsZSBnZW5lcmF0aW9uXG5cblxuZnVuY3Rpb24gZ2VvanNvbnZ0KGRhdGEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEdlb0pTT05WVChkYXRhLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gR2VvSlNPTlZUKGRhdGEsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gZXh0ZW5kKE9iamVjdC5jcmVhdGUodGhpcy5vcHRpb25zKSwgb3B0aW9ucyk7XG5cbiAgICB2YXIgZGVidWcgPSBvcHRpb25zLmRlYnVnO1xuXG4gICAgaWYgKGRlYnVnKSBjb25zb2xlLnRpbWUoJ3ByZXByb2Nlc3MgZGF0YScpO1xuXG4gICAgdmFyIHoyID0gMSA8PCBvcHRpb25zLm1heFpvb20sIC8vIDJeelxuICAgICAgICBmZWF0dXJlcyA9IGNvbnZlcnQoZGF0YSwgb3B0aW9ucy50b2xlcmFuY2UgLyAoejIgKiBvcHRpb25zLmV4dGVudCkpO1xuXG4gICAgdGhpcy50aWxlcyA9IHt9O1xuICAgIHRoaXMudGlsZUNvb3JkcyA9IFtdO1xuXG4gICAgaWYgKGRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUudGltZUVuZCgncHJlcHJvY2VzcyBkYXRhJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpbmRleDogbWF4Wm9vbTogJWQsIG1heFBvaW50czogJWQnLCBvcHRpb25zLmluZGV4TWF4Wm9vbSwgb3B0aW9ucy5pbmRleE1heFBvaW50cyk7XG4gICAgICAgIGNvbnNvbGUudGltZSgnZ2VuZXJhdGUgdGlsZXMnKTtcbiAgICAgICAgdGhpcy5zdGF0cyA9IHt9O1xuICAgICAgICB0aGlzLnRvdGFsID0gMDtcbiAgICB9XG5cbiAgICBmZWF0dXJlcyA9IHdyYXAoZmVhdHVyZXMsIG9wdGlvbnMuYnVmZmVyIC8gb3B0aW9ucy5leHRlbnQsIGludGVyc2VjdFgpO1xuXG4gICAgLy8gc3RhcnQgc2xpY2luZyBmcm9tIHRoZSB0b3AgdGlsZSBkb3duXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCkgdGhpcy5zcGxpdFRpbGUoZmVhdHVyZXMsIDAsIDAsIDApO1xuXG4gICAgaWYgKGRlYnVnKSB7XG4gICAgICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIGNvbnNvbGUubG9nKCdmZWF0dXJlczogJWQsIHBvaW50czogJWQnLCB0aGlzLnRpbGVzWzBdLm51bUZlYXR1cmVzLCB0aGlzLnRpbGVzWzBdLm51bVBvaW50cyk7XG4gICAgICAgIGNvbnNvbGUudGltZUVuZCgnZ2VuZXJhdGUgdGlsZXMnKTtcbiAgICAgICAgY29uc29sZS5sb2coJ3RpbGVzIGdlbmVyYXRlZDonLCB0aGlzLnRvdGFsLCBKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRzKSk7XG4gICAgfVxufVxuXG5HZW9KU09OVlQucHJvdG90eXBlLm9wdGlvbnMgPSB7XG4gICAgbWF4Wm9vbTogMTQsICAgICAgICAgICAgLy8gbWF4IHpvb20gdG8gcHJlc2VydmUgZGV0YWlsIG9uXG4gICAgaW5kZXhNYXhab29tOiA1LCAgICAgICAgLy8gbWF4IHpvb20gaW4gdGhlIHRpbGUgaW5kZXhcbiAgICBpbmRleE1heFBvaW50czogMTAwMDAwLCAvLyBtYXggbnVtYmVyIG9mIHBvaW50cyBwZXIgdGlsZSBpbiB0aGUgdGlsZSBpbmRleFxuICAgIHNvbGlkQ2hpbGRyZW46IGZhbHNlLCAgIC8vIHdoZXRoZXIgdG8gdGlsZSBzb2xpZCBzcXVhcmUgdGlsZXMgZnVydGhlclxuICAgIHRvbGVyYW5jZTogMywgICAgICAgICAgIC8vIHNpbXBsaWZpY2F0aW9uIHRvbGVyYW5jZSAoaGlnaGVyIG1lYW5zIHNpbXBsZXIpXG4gICAgZXh0ZW50OiA0MDk2LCAgICAgICAgICAgLy8gdGlsZSBleHRlbnRcbiAgICBidWZmZXI6IDY0LCAgICAgICAgICAgICAvLyB0aWxlIGJ1ZmZlciBvbiBlYWNoIHNpZGVcbiAgICBkZWJ1ZzogMCAgICAgICAgICAgICAgICAvLyBsb2dnaW5nIGxldmVsICgwLCAxIG9yIDIpXG59O1xuXG5HZW9KU09OVlQucHJvdG90eXBlLnNwbGl0VGlsZSA9IGZ1bmN0aW9uIChmZWF0dXJlcywgeiwgeCwgeSwgY3osIGN4LCBjeSkge1xuXG4gICAgdmFyIHN0YWNrID0gW2ZlYXR1cmVzLCB6LCB4LCB5XSxcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgZGVidWcgPSBvcHRpb25zLmRlYnVnO1xuXG4gICAgLy8gYXZvaWQgcmVjdXJzaW9uIGJ5IHVzaW5nIGEgcHJvY2Vzc2luZyBxdWV1ZVxuICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICAgICAgeSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICB4ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIHogPSBzdGFjay5wb3AoKTtcbiAgICAgICAgZmVhdHVyZXMgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICB2YXIgejIgPSAxIDw8IHosXG4gICAgICAgICAgICBpZCA9IHRvSUQoeiwgeCwgeSksXG4gICAgICAgICAgICB0aWxlID0gdGhpcy50aWxlc1tpZF0sXG4gICAgICAgICAgICB0aWxlVG9sZXJhbmNlID0geiA9PT0gb3B0aW9ucy5tYXhab29tID8gMCA6IG9wdGlvbnMudG9sZXJhbmNlIC8gKHoyICogb3B0aW9ucy5leHRlbnQpO1xuXG4gICAgICAgIGlmICghdGlsZSkge1xuICAgICAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lKCdjcmVhdGlvbicpO1xuXG4gICAgICAgICAgICB0aWxlID0gdGhpcy50aWxlc1tpZF0gPSBjcmVhdGVUaWxlKGZlYXR1cmVzLCB6MiwgeCwgeSwgdGlsZVRvbGVyYW5jZSwgeiA9PT0gb3B0aW9ucy5tYXhab29tKTtcbiAgICAgICAgICAgIHRoaXMudGlsZUNvb3Jkcy5wdXNoKHt6OiB6LCB4OiB4LCB5OiB5fSk7XG5cbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgICAgIGlmIChkZWJ1ZyA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKScsXG4gICAgICAgICAgICAgICAgICAgICAgICB6LCB4LCB5LCB0aWxlLm51bUZlYXR1cmVzLCB0aWxlLm51bVBvaW50cywgdGlsZS5udW1TaW1wbGlmaWVkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS50aW1lRW5kKCdjcmVhdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gJ3onICsgejtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRzW2tleV0gPSAodGhpcy5zdGF0c1trZXldIHx8IDApICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzYXZlIHJlZmVyZW5jZSB0byBvcmlnaW5hbCBnZW9tZXRyeSBpbiB0aWxlIHNvIHRoYXQgd2UgY2FuIGRyaWxsIGRvd24gbGF0ZXIgaWYgd2Ugc3RvcCBub3dcbiAgICAgICAgdGlsZS5zb3VyY2UgPSBmZWF0dXJlcztcblxuICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiB0aGUgdGlsZSBpcyBzb2xpZCBjbGlwcGVkIHNxdWFyZVxuICAgICAgICBpZiAoIW9wdGlvbnMuc29saWRDaGlsZHJlbiAmJiBpc0NsaXBwZWRTcXVhcmUodGlsZSwgb3B0aW9ucy5leHRlbnQsIG9wdGlvbnMuYnVmZmVyKSkgY29udGludWU7XG5cbiAgICAgICAgLy8gaWYgaXQncyB0aGUgZmlyc3QtcGFzcyB0aWxpbmdcbiAgICAgICAgaWYgKCFjeikge1xuICAgICAgICAgICAgLy8gc3RvcCB0aWxpbmcgaWYgd2UgcmVhY2hlZCBtYXggem9vbSwgb3IgaWYgdGhlIHRpbGUgaXMgdG9vIHNpbXBsZVxuICAgICAgICAgICAgaWYgKHogPT09IG9wdGlvbnMuaW5kZXhNYXhab29tIHx8IHRpbGUubnVtUG9pbnRzIDw9IG9wdGlvbnMuaW5kZXhNYXhQb2ludHMpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGlmIGEgZHJpbGxkb3duIHRvIGEgc3BlY2lmaWMgdGlsZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3RvcCB0aWxpbmcgaWYgd2UgcmVhY2hlZCBiYXNlIHpvb20gb3Igb3VyIHRhcmdldCB0aWxlIHpvb21cbiAgICAgICAgICAgIGlmICh6ID09PSBvcHRpb25zLm1heFpvb20gfHwgeiA9PT0gY3opIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiBpdCdzIG5vdCBhbiBhbmNlc3RvciBvZiB0aGUgdGFyZ2V0IHRpbGVcbiAgICAgICAgICAgIHZhciBtID0gMSA8PCAoY3ogLSB6KTtcbiAgICAgICAgICAgIGlmICh4ICE9PSBNYXRoLmZsb29yKGN4IC8gbSkgfHwgeSAhPT0gTWF0aC5mbG9vcihjeSAvIG0pKSBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHdlIHNsaWNlIGZ1cnRoZXIgZG93biwgbm8gbmVlZCB0byBrZWVwIHNvdXJjZSBnZW9tZXRyeVxuICAgICAgICB0aWxlLnNvdXJjZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lKCdjbGlwcGluZycpO1xuXG4gICAgICAgIC8vIHZhbHVlcyB3ZSdsbCB1c2UgZm9yIGNsaXBwaW5nXG4gICAgICAgIHZhciBrMSA9IDAuNSAqIG9wdGlvbnMuYnVmZmVyIC8gb3B0aW9ucy5leHRlbnQsXG4gICAgICAgICAgICBrMiA9IDAuNSAtIGsxLFxuICAgICAgICAgICAgazMgPSAwLjUgKyBrMSxcbiAgICAgICAgICAgIGs0ID0gMSArIGsxLFxuICAgICAgICAgICAgdGwsIGJsLCB0ciwgYnIsIGxlZnQsIHJpZ2h0O1xuXG4gICAgICAgIHRsID0gYmwgPSB0ciA9IGJyID0gbnVsbDtcblxuICAgICAgICBsZWZ0ICA9IGNsaXAoZmVhdHVyZXMsIHoyLCB4IC0gazEsIHggKyBrMywgMCwgaW50ZXJzZWN0WCwgdGlsZS5taW5bMF0sIHRpbGUubWF4WzBdKTtcbiAgICAgICAgcmlnaHQgPSBjbGlwKGZlYXR1cmVzLCB6MiwgeCArIGsyLCB4ICsgazQsIDAsIGludGVyc2VjdFgsIHRpbGUubWluWzBdLCB0aWxlLm1heFswXSk7XG5cbiAgICAgICAgaWYgKGxlZnQpIHtcbiAgICAgICAgICAgIHRsID0gY2xpcChsZWZ0LCB6MiwgeSAtIGsxLCB5ICsgazMsIDEsIGludGVyc2VjdFksIHRpbGUubWluWzFdLCB0aWxlLm1heFsxXSk7XG4gICAgICAgICAgICBibCA9IGNsaXAobGVmdCwgejIsIHkgKyBrMiwgeSArIGs0LCAxLCBpbnRlcnNlY3RZLCB0aWxlLm1pblsxXSwgdGlsZS5tYXhbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgICB0ciA9IGNsaXAocmlnaHQsIHoyLCB5IC0gazEsIHkgKyBrMywgMSwgaW50ZXJzZWN0WSwgdGlsZS5taW5bMV0sIHRpbGUubWF4WzFdKTtcbiAgICAgICAgICAgIGJyID0gY2xpcChyaWdodCwgejIsIHkgKyBrMiwgeSArIGs0LCAxLCBpbnRlcnNlY3RZLCB0aWxlLm1pblsxXSwgdGlsZS5tYXhbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lRW5kKCdjbGlwcGluZycpO1xuXG4gICAgICAgIGlmICh0bCkgc3RhY2sucHVzaCh0bCwgeiArIDEsIHggKiAyLCAgICAgeSAqIDIpO1xuICAgICAgICBpZiAoYmwpIHN0YWNrLnB1c2goYmwsIHogKyAxLCB4ICogMiwgICAgIHkgKiAyICsgMSk7XG4gICAgICAgIGlmICh0cikgc3RhY2sucHVzaCh0ciwgeiArIDEsIHggKiAyICsgMSwgeSAqIDIpO1xuICAgICAgICBpZiAoYnIpIHN0YWNrLnB1c2goYnIsIHogKyAxLCB4ICogMiArIDEsIHkgKiAyICsgMSk7XG4gICAgfVxufTtcblxuR2VvSlNPTlZULnByb3RvdHlwZS5nZXRUaWxlID0gZnVuY3Rpb24gKHosIHgsIHkpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgZXh0ZW50ID0gb3B0aW9ucy5leHRlbnQsXG4gICAgICAgIGRlYnVnID0gb3B0aW9ucy5kZWJ1ZztcblxuICAgIHZhciB6MiA9IDEgPDwgejtcbiAgICB4ID0gKCh4ICUgejIpICsgejIpICUgejI7IC8vIHdyYXAgdGlsZSB4IGNvb3JkaW5hdGVcblxuICAgIHZhciBpZCA9IHRvSUQoeiwgeCwgeSk7XG4gICAgaWYgKHRoaXMudGlsZXNbaWRdKSByZXR1cm4gdHJhbnNmb3JtVGlsZSh0aGlzLnRpbGVzW2lkXSwgZXh0ZW50KTtcblxuICAgIGlmIChkZWJ1ZyA+IDEpIGNvbnNvbGUubG9nKCdkcmlsbGluZyBkb3duIHRvIHolZC0lZC0lZCcsIHosIHgsIHkpO1xuXG4gICAgdmFyIHowID0geixcbiAgICAgICAgeDAgPSB4LFxuICAgICAgICB5MCA9IHksXG4gICAgICAgIHBhcmVudDtcblxuICAgIHdoaWxlICghcGFyZW50ICYmIHowID4gMCkge1xuICAgICAgICB6MC0tO1xuICAgICAgICB4MCA9IE1hdGguZmxvb3IoeDAgLyAyKTtcbiAgICAgICAgeTAgPSBNYXRoLmZsb29yKHkwIC8gMik7XG4gICAgICAgIHBhcmVudCA9IHRoaXMudGlsZXNbdG9JRCh6MCwgeDAsIHkwKV07XG4gICAgfVxuXG4gICAgaWYgKCFwYXJlbnQpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS5sb2coJ2ZvdW5kIHBhcmVudCB0aWxlIHolZC0lZC0lZCcsIHowLCB4MCwgeTApO1xuXG4gICAgLy8gaWYgd2UgZm91bmQgYSBwYXJlbnQgdGlsZSBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBnZW9tZXRyeSwgd2UgY2FuIGRyaWxsIGRvd24gZnJvbSBpdFxuICAgIGlmIChwYXJlbnQuc291cmNlKSB7XG4gICAgICAgIGlmIChpc0NsaXBwZWRTcXVhcmUocGFyZW50LCBleHRlbnQsIG9wdGlvbnMuYnVmZmVyKSkgcmV0dXJuIHRyYW5zZm9ybVRpbGUocGFyZW50LCBleHRlbnQpO1xuXG4gICAgICAgIGlmIChkZWJ1ZyA+IDEpIGNvbnNvbGUudGltZSgnZHJpbGxpbmcgZG93bicpO1xuICAgICAgICB0aGlzLnNwbGl0VGlsZShwYXJlbnQuc291cmNlLCB6MCwgeDAsIHkwLCB6LCB4LCB5KTtcbiAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lRW5kKCdkcmlsbGluZyBkb3duJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRpbGVzW2lkXSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtVGlsZSh0aGlzLnRpbGVzW2lkXSwgZXh0ZW50KTtcbn07XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVRpbGUodGlsZSwgZXh0ZW50KSB7XG4gICAgaWYgKHRpbGUudHJhbnNmb3JtZWQpIHJldHVybiB0aWxlO1xuXG4gICAgdmFyIHoyID0gdGlsZS56MixcbiAgICAgICAgdHggPSB0aWxlLngsXG4gICAgICAgIHR5ID0gdGlsZS55LFxuICAgICAgICBpLCBqLCBrO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRpbGUuZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZlYXR1cmUgPSB0aWxlLmZlYXR1cmVzW2ldLFxuICAgICAgICAgICAgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgICAgICB0eXBlID0gZmVhdHVyZS50eXBlO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAxKSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbS5sZW5ndGg7IGorKykgZ2VvbVtqXSA9IHRyYW5zZm9ybVBvaW50KGdlb21bal0sIGV4dGVudCwgejIsIHR4LCB0eSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBnZW9tLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJpbmcgPSBnZW9tW2pdO1xuICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCByaW5nLmxlbmd0aDsgaysrKSByaW5nW2tdID0gdHJhbnNmb3JtUG9pbnQocmluZ1trXSwgZXh0ZW50LCB6MiwgdHgsIHR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRpbGUudHJhbnNmb3JtZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRpbGU7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVBvaW50KHAsIGV4dGVudCwgejIsIHR4LCB0eSkge1xuICAgIHZhciB4ID0gTWF0aC5yb3VuZChleHRlbnQgKiAocFswXSAqIHoyIC0gdHgpKSxcbiAgICAgICAgeSA9IE1hdGgucm91bmQoZXh0ZW50ICogKHBbMV0gKiB6MiAtIHR5KSk7XG4gICAgcmV0dXJuIFt4LCB5XTtcbn1cblxuZnVuY3Rpb24gdG9JRCh6LCB4LCB5KSB7XG4gICAgcmV0dXJuICgoKDEgPDwgeikgKiB5ICsgeCkgKiAzMikgKyB6O1xufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3RYKGEsIGIsIHgpIHtcbiAgICByZXR1cm4gW3gsICh4IC0gYVswXSkgKiAoYlsxXSAtIGFbMV0pIC8gKGJbMF0gLSBhWzBdKSArIGFbMV0sIDFdO1xufVxuZnVuY3Rpb24gaW50ZXJzZWN0WShhLCBiLCB5KSB7XG4gICAgcmV0dXJuIFsoeSAtIGFbMV0pICogKGJbMF0gLSBhWzBdKSAvIChiWzFdIC0gYVsxXSkgKyBhWzBdLCB5LCAxXTtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKGRlc3QsIHNyYykge1xuICAgIGZvciAodmFyIGkgaW4gc3JjKSBkZXN0W2ldID0gc3JjW2ldO1xuICAgIHJldHVybiBkZXN0O1xufVxuXG4vLyBjaGVja3Mgd2hldGhlciBhIHRpbGUgaXMgYSB3aG9sZS1hcmVhIGZpbGwgYWZ0ZXIgY2xpcHBpbmc7IGlmIGl0IGlzLCB0aGVyZSdzIG5vIHNlbnNlIHNsaWNpbmcgaXQgZnVydGhlclxuZnVuY3Rpb24gaXNDbGlwcGVkU3F1YXJlKHRpbGUsIGV4dGVudCwgYnVmZmVyKSB7XG5cbiAgICB2YXIgZmVhdHVyZXMgPSB0aWxlLnNvdXJjZTtcbiAgICBpZiAoZmVhdHVyZXMubGVuZ3RoICE9PSAxKSByZXR1cm4gZmFsc2U7XG5cbiAgICB2YXIgZmVhdHVyZSA9IGZlYXR1cmVzWzBdO1xuICAgIGlmIChmZWF0dXJlLnR5cGUgIT09IDMgfHwgZmVhdHVyZS5nZW9tZXRyeS5sZW5ndGggPiAxKSByZXR1cm4gZmFsc2U7XG5cbiAgICB2YXIgbGVuID0gZmVhdHVyZS5nZW9tZXRyeVswXS5sZW5ndGg7XG4gICAgaWYgKGxlbiAhPT0gNSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgcCA9IHRyYW5zZm9ybVBvaW50KGZlYXR1cmUuZ2VvbWV0cnlbMF1baV0sIGV4dGVudCwgdGlsZS56MiwgdGlsZS54LCB0aWxlLnkpO1xuICAgICAgICBpZiAoKHBbMF0gIT09IC1idWZmZXIgJiYgcFswXSAhPT0gZXh0ZW50ICsgYnVmZmVyKSB8fFxuICAgICAgICAgICAgKHBbMV0gIT09IC1idWZmZXIgJiYgcFsxXSAhPT0gZXh0ZW50ICsgYnVmZmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNpbXBsaWZ5O1xuXG4vLyBjYWxjdWxhdGUgc2ltcGxpZmljYXRpb24gZGF0YSB1c2luZyBvcHRpbWl6ZWQgRG91Z2xhcy1QZXVja2VyIGFsZ29yaXRobVxuXG5mdW5jdGlvbiBzaW1wbGlmeShwb2ludHMsIHRvbGVyYW5jZSkge1xuXG4gICAgdmFyIHNxVG9sZXJhbmNlID0gdG9sZXJhbmNlICogdG9sZXJhbmNlLFxuICAgICAgICBsZW4gPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBmaXJzdCA9IDAsXG4gICAgICAgIGxhc3QgPSBsZW4gLSAxLFxuICAgICAgICBzdGFjayA9IFtdLFxuICAgICAgICBpLCBtYXhTcURpc3QsIHNxRGlzdCwgaW5kZXg7XG5cbiAgICAvLyBhbHdheXMgcmV0YWluIHRoZSBlbmRwb2ludHMgKDEgaXMgdGhlIG1heCB2YWx1ZSlcbiAgICBwb2ludHNbZmlyc3RdWzJdID0gMTtcbiAgICBwb2ludHNbbGFzdF1bMl0gPSAxO1xuXG4gICAgLy8gYXZvaWQgcmVjdXJzaW9uIGJ5IHVzaW5nIGEgc3RhY2tcbiAgICB3aGlsZSAobGFzdCkge1xuXG4gICAgICAgIG1heFNxRGlzdCA9IDA7XG5cbiAgICAgICAgZm9yIChpID0gZmlyc3QgKyAxOyBpIDwgbGFzdDsgaSsrKSB7XG4gICAgICAgICAgICBzcURpc3QgPSBnZXRTcVNlZ0Rpc3QocG9pbnRzW2ldLCBwb2ludHNbZmlyc3RdLCBwb2ludHNbbGFzdF0pO1xuXG4gICAgICAgICAgICBpZiAoc3FEaXN0ID4gbWF4U3FEaXN0KSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIG1heFNxRGlzdCA9IHNxRGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXhTcURpc3QgPiBzcVRvbGVyYW5jZSkge1xuICAgICAgICAgICAgcG9pbnRzW2luZGV4XVsyXSA9IG1heFNxRGlzdDsgLy8gc2F2ZSB0aGUgcG9pbnQgaW1wb3J0YW5jZSBpbiBzcXVhcmVkIHBpeGVscyBhcyBhIHogY29vcmRpbmF0ZVxuICAgICAgICAgICAgc3RhY2sucHVzaChmaXJzdCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgIGZpcnN0ID0gaW5kZXg7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhc3QgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGZpcnN0ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHNxdWFyZSBkaXN0YW5jZSBmcm9tIGEgcG9pbnQgdG8gYSBzZWdtZW50XG5mdW5jdGlvbiBnZXRTcVNlZ0Rpc3QocCwgYSwgYikge1xuXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSxcbiAgICAgICAgYnggPSBiWzBdLCBieSA9IGJbMV0sXG4gICAgICAgIHB4ID0gcFswXSwgcHkgPSBwWzFdLFxuICAgICAgICBkeCA9IGJ4IC0geCxcbiAgICAgICAgZHkgPSBieSAtIHk7XG5cbiAgICBpZiAoZHggIT09IDAgfHwgZHkgIT09IDApIHtcblxuICAgICAgICB2YXIgdCA9ICgocHggLSB4KSAqIGR4ICsgKHB5IC0geSkgKiBkeSkgLyAoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICAgIGlmICh0ID4gMSkge1xuICAgICAgICAgICAgeCA9IGJ4O1xuICAgICAgICAgICAgeSA9IGJ5O1xuXG4gICAgICAgIH0gZWxzZSBpZiAodCA+IDApIHtcbiAgICAgICAgICAgIHggKz0gZHggKiB0O1xuICAgICAgICAgICAgeSArPSBkeSAqIHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkeCA9IHB4IC0geDtcbiAgICBkeSA9IHB5IC0geTtcblxuICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVUaWxlO1xuXG5mdW5jdGlvbiBjcmVhdGVUaWxlKGZlYXR1cmVzLCB6MiwgdHgsIHR5LCB0b2xlcmFuY2UsIG5vU2ltcGxpZnkpIHtcbiAgICB2YXIgdGlsZSA9IHtcbiAgICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgICBudW1Qb2ludHM6IDAsXG4gICAgICAgIG51bVNpbXBsaWZpZWQ6IDAsXG4gICAgICAgIG51bUZlYXR1cmVzOiAwLFxuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIHg6IHR4LFxuICAgICAgICB5OiB0eSxcbiAgICAgICAgejI6IHoyLFxuICAgICAgICB0cmFuc2Zvcm1lZDogZmFsc2UsXG4gICAgICAgIG1pbjogWzIsIDFdLFxuICAgICAgICBtYXg6IFstMSwgMF1cbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGlsZS5udW1GZWF0dXJlcysrO1xuICAgICAgICBhZGRGZWF0dXJlKHRpbGUsIGZlYXR1cmVzW2ldLCB0b2xlcmFuY2UsIG5vU2ltcGxpZnkpO1xuXG4gICAgICAgIHZhciBtaW4gPSBmZWF0dXJlc1tpXS5taW4sXG4gICAgICAgICAgICBtYXggPSBmZWF0dXJlc1tpXS5tYXg7XG5cbiAgICAgICAgaWYgKG1pblswXSA8IHRpbGUubWluWzBdKSB0aWxlLm1pblswXSA9IG1pblswXTtcbiAgICAgICAgaWYgKG1pblsxXSA8IHRpbGUubWluWzFdKSB0aWxlLm1pblsxXSA9IG1pblsxXTtcbiAgICAgICAgaWYgKG1heFswXSA+IHRpbGUubWF4WzBdKSB0aWxlLm1heFswXSA9IG1heFswXTtcbiAgICAgICAgaWYgKG1heFsxXSA+IHRpbGUubWF4WzFdKSB0aWxlLm1heFsxXSA9IG1heFsxXTtcbiAgICB9XG4gICAgcmV0dXJuIHRpbGU7XG59XG5cbmZ1bmN0aW9uIGFkZEZlYXR1cmUodGlsZSwgZmVhdHVyZSwgdG9sZXJhbmNlLCBub1NpbXBsaWZ5KSB7XG5cbiAgICB2YXIgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGUsXG4gICAgICAgIHNpbXBsaWZpZWQgPSBbXSxcbiAgICAgICAgc3FUb2xlcmFuY2UgPSB0b2xlcmFuY2UgKiB0b2xlcmFuY2UsXG4gICAgICAgIGksIGosIHJpbmcsIHA7XG5cbiAgICBpZiAodHlwZSA9PT0gMSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc2ltcGxpZmllZC5wdXNoKGdlb21baV0pO1xuICAgICAgICAgICAgdGlsZS5udW1Qb2ludHMrKztcbiAgICAgICAgICAgIHRpbGUubnVtU2ltcGxpZmllZCsrO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIHNpbXBsaWZ5IGFuZCB0cmFuc2Zvcm0gcHJvamVjdGVkIGNvb3JkaW5hdGVzIGZvciB0aWxlIGdlb21ldHJ5XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByaW5nID0gZ2VvbVtpXTtcblxuICAgICAgICAgICAgLy8gZmlsdGVyIG91dCB0aW55IHBvbHlsaW5lcyAmIHBvbHlnb25zXG4gICAgICAgICAgICBpZiAoIW5vU2ltcGxpZnkgJiYgKCh0eXBlID09PSAyICYmIHJpbmcuZGlzdCA8IHRvbGVyYW5jZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUgPT09IDMgJiYgcmluZy5hcmVhIDwgc3FUb2xlcmFuY2UpKSkge1xuICAgICAgICAgICAgICAgIHRpbGUubnVtUG9pbnRzICs9IHJpbmcubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc2ltcGxpZmllZFJpbmcgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHJpbmcubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBwID0gcmluZ1tqXTtcbiAgICAgICAgICAgICAgICAvLyBrZWVwIHBvaW50cyB3aXRoIGltcG9ydGFuY2UgPiB0b2xlcmFuY2VcbiAgICAgICAgICAgICAgICBpZiAobm9TaW1wbGlmeSB8fCBwWzJdID4gc3FUb2xlcmFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2ltcGxpZmllZFJpbmcucHVzaChwKTtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS5udW1TaW1wbGlmaWVkKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRpbGUubnVtUG9pbnRzKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNpbXBsaWZpZWQucHVzaChzaW1wbGlmaWVkUmluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2ltcGxpZmllZC5sZW5ndGgpIHtcbiAgICAgICAgdGlsZS5mZWF0dXJlcy5wdXNoKHtcbiAgICAgICAgICAgIGdlb21ldHJ5OiBzaW1wbGlmaWVkLFxuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIHRhZ3M6IGZlYXR1cmUudGFncyB8fCBudWxsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNsaXAgPSByZXF1aXJlKCcuL2NsaXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB3cmFwO1xuXG5mdW5jdGlvbiB3cmFwKGZlYXR1cmVzLCBidWZmZXIsIGludGVyc2VjdFgpIHtcbiAgICB2YXIgbWVyZ2VkID0gZmVhdHVyZXMsXG4gICAgICAgIGxlZnQgID0gY2xpcChmZWF0dXJlcywgMSwgLTEgLSBidWZmZXIsIGJ1ZmZlciwgICAgIDAsIGludGVyc2VjdFgsIC0xLCAyKSwgLy8gbGVmdCB3b3JsZCBjb3B5XG4gICAgICAgIHJpZ2h0ID0gY2xpcChmZWF0dXJlcywgMSwgIDEgLSBidWZmZXIsIDIgKyBidWZmZXIsIDAsIGludGVyc2VjdFgsIC0xLCAyKTsgLy8gcmlnaHQgd29ybGQgY29weVxuXG4gICAgaWYgKGxlZnQgfHwgcmlnaHQpIHtcbiAgICAgICAgbWVyZ2VkID0gY2xpcChmZWF0dXJlcywgMSwgLWJ1ZmZlciwgMSArIGJ1ZmZlciwgMCwgaW50ZXJzZWN0WCwgLTEsIDIpOyAvLyBjZW50ZXIgd29ybGQgY29weVxuXG4gICAgICAgIGlmIChsZWZ0KSBtZXJnZWQgPSBzaGlmdEZlYXR1cmVDb29yZHMobGVmdCwgMSkuY29uY2F0KG1lcmdlZCk7IC8vIG1lcmdlIGxlZnQgaW50byBjZW50ZXJcbiAgICAgICAgaWYgKHJpZ2h0KSBtZXJnZWQgPSBtZXJnZWQuY29uY2F0KHNoaWZ0RmVhdHVyZUNvb3JkcyhyaWdodCwgLTEpKTsgLy8gbWVyZ2UgcmlnaHQgaW50byBjZW50ZXJcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkO1xufVxuXG5mdW5jdGlvbiBzaGlmdEZlYXR1cmVDb29yZHMoZmVhdHVyZXMsIG9mZnNldCkge1xuICAgIHZhciBuZXdGZWF0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZmVhdHVyZSA9IGZlYXR1cmVzW2ldLFxuICAgICAgICAgICAgdHlwZSA9IGZlYXR1cmUudHlwZTtcblxuICAgICAgICB2YXIgbmV3R2VvbWV0cnk7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIG5ld0dlb21ldHJ5ID0gc2hpZnRDb29yZHMoZmVhdHVyZS5nZW9tZXRyeSwgb2Zmc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0dlb21ldHJ5ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZlYXR1cmUuZ2VvbWV0cnkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBuZXdHZW9tZXRyeS5wdXNoKHNoaWZ0Q29vcmRzKGZlYXR1cmUuZ2VvbWV0cnlbal0sIG9mZnNldCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbmV3RmVhdHVyZXMucHVzaCh7XG4gICAgICAgICAgICBnZW9tZXRyeTogbmV3R2VvbWV0cnksXG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgdGFnczogZmVhdHVyZS50YWdzLFxuICAgICAgICAgICAgbWluOiBbZmVhdHVyZS5taW5bMF0gKyBvZmZzZXQsIGZlYXR1cmUubWluWzFdXSxcbiAgICAgICAgICAgIG1heDogW2ZlYXR1cmUubWF4WzBdICsgb2Zmc2V0LCBmZWF0dXJlLm1heFsxXV1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0ZlYXR1cmVzO1xufVxuXG5mdW5jdGlvbiBzaGlmdENvb3Jkcyhwb2ludHMsIG9mZnNldCkge1xuICAgIHZhciBuZXdQb2ludHMgPSBbXTtcbiAgICBuZXdQb2ludHMuYXJlYSA9IHBvaW50cy5hcmVhO1xuICAgIG5ld1BvaW50cy5kaXN0ID0gcG9pbnRzLmRpc3Q7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBuZXdQb2ludHMucHVzaChbcG9pbnRzW2ldWzBdICsgb2Zmc2V0LCBwb2ludHNbaV1bMV0sIHBvaW50c1tpXVsyXV0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3UG9pbnRzO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBpbnZlcnRcblxuLyoqXG4gKiBJbnZlcnRzIGEgbWF0M1xuICpcbiAqIEBhbGlhcyBtYXQzLmludmVydFxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge21hdDN9IG91dFxuICovXG5mdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdXG4gIHZhciBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdXG4gIHZhciBhMjAgPSBhWzZdLCBhMjEgPSBhWzddLCBhMjIgPSBhWzhdXG5cbiAgdmFyIGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMVxuICB2YXIgYjExID0gLWEyMiAqIGExMCArIGExMiAqIGEyMFxuICB2YXIgYjIxID0gYTIxICogYTEwIC0gYTExICogYTIwXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuICB2YXIgZGV0ID0gYTAwICogYjAxICsgYTAxICogYjExICsgYTAyICogYjIxXG5cbiAgaWYgKCFkZXQpIHJldHVybiBudWxsXG4gIGRldCA9IDEuMCAvIGRldFxuXG4gIG91dFswXSA9IGIwMSAqIGRldFxuICBvdXRbMV0gPSAoLWEyMiAqIGEwMSArIGEwMiAqIGEyMSkgKiBkZXRcbiAgb3V0WzJdID0gKGExMiAqIGEwMSAtIGEwMiAqIGExMSkgKiBkZXRcbiAgb3V0WzNdID0gYjExICogZGV0XG4gIG91dFs0XSA9IChhMjIgKiBhMDAgLSBhMDIgKiBhMjApICogZGV0XG4gIG91dFs1XSA9ICgtYTEyICogYTAwICsgYTAyICogYTEwKSAqIGRldFxuICBvdXRbNl0gPSBiMjEgKiBkZXRcbiAgb3V0WzddID0gKC1hMjEgKiBhMDAgKyBhMDEgKiBhMjApICogZGV0XG4gIG91dFs4XSA9IChhMTEgKiBhMDAgLSBhMDEgKiBhMTApICogZGV0XG5cbiAgcmV0dXJuIG91dFxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBub3JtYWxGcm9tTWF0NFxuXG4vKipcbiogQ2FsY3VsYXRlcyBhIDN4MyBub3JtYWwgbWF0cml4ICh0cmFuc3Bvc2UgaW52ZXJzZSkgZnJvbSB0aGUgNHg0IG1hdHJpeFxuKlxuKiBAYWxpYXMgbWF0My5ub3JtYWxGcm9tTWF0NFxuKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XG4qIEBwYXJhbSB7bWF0NH0gYSBNYXQ0IHRvIGRlcml2ZSB0aGUgbm9ybWFsIG1hdHJpeCBmcm9tXG4qXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcbiovXG5mdW5jdGlvbiBub3JtYWxGcm9tTWF0NChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM11cbiAgdmFyIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN11cbiAgdmFyIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXVxuICB2YXIgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV1cblxuICB2YXIgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwXG4gIHZhciBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTBcbiAgdmFyIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMFxuICB2YXIgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExXG4gIHZhciBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTFcbiAgdmFyIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMlxuICB2YXIgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwXG4gIHZhciBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzBcbiAgdmFyIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMFxuICB2YXIgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxXG4gIHZhciBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzFcbiAgdmFyIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMlxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcbiAgdmFyIGRldCA9IGIwMCAqIGIxMVxuICAgICAgICAgIC0gYjAxICogYjEwXG4gICAgICAgICAgKyBiMDIgKiBiMDlcbiAgICAgICAgICArIGIwMyAqIGIwOFxuICAgICAgICAgIC0gYjA0ICogYjA3XG4gICAgICAgICAgKyBiMDUgKiBiMDZcblxuICBpZiAoIWRldCkgcmV0dXJuIG51bGxcbiAgZGV0ID0gMS4wIC8gZGV0XG5cbiAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXRcbiAgb3V0WzFdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXRcbiAgb3V0WzJdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXRcblxuICBvdXRbM10gPSAoYTAyICogYjEwIC0gYTAxICogYjExIC0gYTAzICogYjA5KSAqIGRldFxuICBvdXRbNF0gPSAoYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3KSAqIGRldFxuICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldFxuXG4gIG91dFs2XSA9IChhMzEgKiBiMDUgLSBhMzIgKiBiMDQgKyBhMzMgKiBiMDMpICogZGV0XG4gIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0XG4gIG91dFs4XSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0XG5cbiAgcmV0dXJuIG91dFxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBjb3B5O1xuXG4vKipcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQ0IHRvIGFub3RoZXJcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbmZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICBvdXRbNF0gPSBhWzRdO1xuICAgIG91dFs1XSA9IGFbNV07XG4gICAgb3V0WzZdID0gYVs2XTtcbiAgICBvdXRbN10gPSBhWzddO1xuICAgIG91dFs4XSA9IGFbOF07XG4gICAgb3V0WzldID0gYVs5XTtcbiAgICBvdXRbMTBdID0gYVsxMF07XG4gICAgb3V0WzExXSA9IGFbMTFdO1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgICByZXR1cm4gb3V0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuXG4vKipcbiAqIFNldCBhIG1hdDQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICAgIG91dFswXSA9IDE7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDA7XG4gICAgb3V0WzRdID0gMDtcbiAgICBvdXRbNV0gPSAxO1xuICAgIG91dFs2XSA9IDA7XG4gICAgb3V0WzddID0gMDtcbiAgICBvdXRbOF0gPSAwO1xuICAgIG91dFs5XSA9IDA7XG4gICAgb3V0WzEwXSA9IDE7XG4gICAgb3V0WzExXSA9IDA7XG4gICAgb3V0WzEyXSA9IDA7XG4gICAgb3V0WzEzXSA9IDA7XG4gICAgb3V0WzE0XSA9IDA7XG4gICAgb3V0WzE1XSA9IDE7XG4gICAgcmV0dXJuIG91dDtcbn07IiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvb2tBdDtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBsb29rLWF0IG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBleWUgcG9zaXRpb24sIGZvY2FsIHBvaW50LCBhbmQgdXAgYXhpc1xuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cbiAqIEBwYXJhbSB7dmVjM30gZXllIFBvc2l0aW9uIG9mIHRoZSB2aWV3ZXJcbiAqIEBwYXJhbSB7dmVjM30gY2VudGVyIFBvaW50IHRoZSB2aWV3ZXIgaXMgbG9va2luZyBhdFxuICogQHBhcmFtIHt2ZWMzfSB1cCB2ZWMzIHBvaW50aW5nIHVwXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbmZ1bmN0aW9uIGxvb2tBdChvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xuICAgIHZhciB4MCwgeDEsIHgyLCB5MCwgeTEsIHkyLCB6MCwgejEsIHoyLCBsZW4sXG4gICAgICAgIGV5ZXggPSBleWVbMF0sXG4gICAgICAgIGV5ZXkgPSBleWVbMV0sXG4gICAgICAgIGV5ZXogPSBleWVbMl0sXG4gICAgICAgIHVweCA9IHVwWzBdLFxuICAgICAgICB1cHkgPSB1cFsxXSxcbiAgICAgICAgdXB6ID0gdXBbMl0sXG4gICAgICAgIGNlbnRlcnggPSBjZW50ZXJbMF0sXG4gICAgICAgIGNlbnRlcnkgPSBjZW50ZXJbMV0sXG4gICAgICAgIGNlbnRlcnogPSBjZW50ZXJbMl07XG5cbiAgICBpZiAoTWF0aC5hYnMoZXlleCAtIGNlbnRlcngpIDwgMC4wMDAwMDEgJiZcbiAgICAgICAgTWF0aC5hYnMoZXlleSAtIGNlbnRlcnkpIDwgMC4wMDAwMDEgJiZcbiAgICAgICAgTWF0aC5hYnMoZXlleiAtIGNlbnRlcnopIDwgMC4wMDAwMDEpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5KG91dCk7XG4gICAgfVxuXG4gICAgejAgPSBleWV4IC0gY2VudGVyeDtcbiAgICB6MSA9IGV5ZXkgLSBjZW50ZXJ5O1xuICAgIHoyID0gZXlleiAtIGNlbnRlcno7XG5cbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KHowICogejAgKyB6MSAqIHoxICsgejIgKiB6Mik7XG4gICAgejAgKj0gbGVuO1xuICAgIHoxICo9IGxlbjtcbiAgICB6MiAqPSBsZW47XG5cbiAgICB4MCA9IHVweSAqIHoyIC0gdXB6ICogejE7XG4gICAgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyO1xuICAgIHgyID0gdXB4ICogejEgLSB1cHkgKiB6MDtcbiAgICBsZW4gPSBNYXRoLnNxcnQoeDAgKiB4MCArIHgxICogeDEgKyB4MiAqIHgyKTtcbiAgICBpZiAoIWxlbikge1xuICAgICAgICB4MCA9IDA7XG4gICAgICAgIHgxID0gMDtcbiAgICAgICAgeDIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IDEgLyBsZW47XG4gICAgICAgIHgwICo9IGxlbjtcbiAgICAgICAgeDEgKj0gbGVuO1xuICAgICAgICB4MiAqPSBsZW47XG4gICAgfVxuXG4gICAgeTAgPSB6MSAqIHgyIC0gejIgKiB4MTtcbiAgICB5MSA9IHoyICogeDAgLSB6MCAqIHgyO1xuICAgIHkyID0gejAgKiB4MSAtIHoxICogeDA7XG5cbiAgICBsZW4gPSBNYXRoLnNxcnQoeTAgKiB5MCArIHkxICogeTEgKyB5MiAqIHkyKTtcbiAgICBpZiAoIWxlbikge1xuICAgICAgICB5MCA9IDA7XG4gICAgICAgIHkxID0gMDtcbiAgICAgICAgeTIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IDEgLyBsZW47XG4gICAgICAgIHkwICo9IGxlbjtcbiAgICAgICAgeTEgKj0gbGVuO1xuICAgICAgICB5MiAqPSBsZW47XG4gICAgfVxuXG4gICAgb3V0WzBdID0geDA7XG4gICAgb3V0WzFdID0geTA7XG4gICAgb3V0WzJdID0gejA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNF0gPSB4MTtcbiAgICBvdXRbNV0gPSB5MTtcbiAgICBvdXRbNl0gPSB6MTtcbiAgICBvdXRbN10gPSAwO1xuICAgIG91dFs4XSA9IHgyO1xuICAgIG91dFs5XSA9IHkyO1xuICAgIG91dFsxMF0gPSB6MjtcbiAgICBvdXRbMTFdID0gMDtcbiAgICBvdXRbMTJdID0gLSh4MCAqIGV5ZXggKyB4MSAqIGV5ZXkgKyB4MiAqIGV5ZXopO1xuICAgIG91dFsxM10gPSAtKHkwICogZXlleCArIHkxICogZXlleSArIHkyICogZXlleik7XG4gICAgb3V0WzE0XSA9IC0oejAgKiBleWV4ICsgejEgKiBleWV5ICsgejIgKiBleWV6KTtcbiAgICBvdXRbMTVdID0gMTtcblxuICAgIHJldHVybiBvdXQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gbXVsdGlwbHk7XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0NCdzXG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHttYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge21hdDR9IG91dFxuICovXG5mdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XTtcblxuICAgIC8vIENhY2hlIG9ubHkgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgc2Vjb25kIG1hdHJpeFxuICAgIHZhciBiMCAgPSBiWzBdLCBiMSA9IGJbMV0sIGIyID0gYlsyXSwgYjMgPSBiWzNdOyAgXG4gICAgb3V0WzBdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xuICAgIG91dFsxXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcbiAgICBvdXRbMl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XG4gICAgb3V0WzNdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xuXG4gICAgYjAgPSBiWzRdOyBiMSA9IGJbNV07IGIyID0gYls2XTsgYjMgPSBiWzddO1xuICAgIG91dFs0XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGIzKmEzMDtcbiAgICBvdXRbNV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjEgKyBiMyphMzE7XG4gICAgb3V0WzZdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xuICAgIG91dFs3XSA9IGIwKmEwMyArIGIxKmExMyArIGIyKmEyMyArIGIzKmEzMztcblxuICAgIGIwID0gYls4XTsgYjEgPSBiWzldOyBiMiA9IGJbMTBdOyBiMyA9IGJbMTFdO1xuICAgIG91dFs4XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGIzKmEzMDtcbiAgICBvdXRbOV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjEgKyBiMyphMzE7XG4gICAgb3V0WzEwXSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcbiAgICBvdXRbMTFdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xuXG4gICAgYjAgPSBiWzEyXTsgYjEgPSBiWzEzXTsgYjIgPSBiWzE0XTsgYjMgPSBiWzE1XTtcbiAgICBvdXRbMTJdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xuICAgIG91dFsxM10gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjEgKyBiMyphMzE7XG4gICAgb3V0WzE0XSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcbiAgICBvdXRbMTVdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xuICAgIHJldHVybiBvdXQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcGVyc3BlY3RpdmU7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xuICogQHBhcmFtIHtudW1iZXJ9IGZvdnkgVmVydGljYWwgZmllbGQgb2YgdmlldyBpbiByYWRpYW5zXG4gKiBAcGFyYW0ge251bWJlcn0gYXNwZWN0IEFzcGVjdCByYXRpby4gdHlwaWNhbGx5IHZpZXdwb3J0IHdpZHRoL2hlaWdodFxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xuZnVuY3Rpb24gcGVyc3BlY3RpdmUob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xuICAgIHZhciBmID0gMS4wIC8gTWF0aC50YW4oZm92eSAvIDIpLFxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gICAgb3V0WzBdID0gZiAvIGFzcGVjdDtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNF0gPSAwO1xuICAgIG91dFs1XSA9IGY7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICAgIG91dFs4XSA9IDA7XG4gICAgb3V0WzldID0gMDtcbiAgICBvdXRbMTBdID0gKGZhciArIG5lYXIpICogbmY7XG4gICAgb3V0WzExXSA9IC0xO1xuICAgIG91dFsxMl0gPSAwO1xuICAgIG91dFsxM10gPSAwO1xuICAgIG91dFsxNF0gPSAoMiAqIGZhciAqIG5lYXIpICogbmY7XG4gICAgb3V0WzE1XSA9IDA7XG4gICAgcmV0dXJuIG91dDtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBzY2FsZTtcblxuLyoqXG4gKiBTY2FsZXMgdGhlIG1hdDQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzNcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcbiAqIEBwYXJhbSB7dmVjM30gdiB0aGUgdmVjMyB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKiovXG5mdW5jdGlvbiBzY2FsZShvdXQsIGEsIHYpIHtcbiAgICB2YXIgeCA9IHZbMF0sIHkgPSB2WzFdLCB6ID0gdlsyXTtcblxuICAgIG91dFswXSA9IGFbMF0gKiB4O1xuICAgIG91dFsxXSA9IGFbMV0gKiB4O1xuICAgIG91dFsyXSA9IGFbMl0gKiB4O1xuICAgIG91dFszXSA9IGFbM10gKiB4O1xuICAgIG91dFs0XSA9IGFbNF0gKiB5O1xuICAgIG91dFs1XSA9IGFbNV0gKiB5O1xuICAgIG91dFs2XSA9IGFbNl0gKiB5O1xuICAgIG91dFs3XSA9IGFbN10gKiB5O1xuICAgIG91dFs4XSA9IGFbOF0gKiB6O1xuICAgIG91dFs5XSA9IGFbOV0gKiB6O1xuICAgIG91dFsxMF0gPSBhWzEwXSAqIHo7XG4gICAgb3V0WzExXSA9IGFbMTFdICogejtcbiAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gICAgcmV0dXJuIG91dDtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSB0cmFuc2xhdGU7XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgbWF0NCBieSB0aGUgZ2l2ZW4gdmVjdG9yXG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxuICogQHBhcmFtIHt2ZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xuZnVuY3Rpb24gdHJhbnNsYXRlKG91dCwgYSwgdikge1xuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV0sIHogPSB2WzJdLFxuICAgICAgICBhMDAsIGEwMSwgYTAyLCBhMDMsXG4gICAgICAgIGExMCwgYTExLCBhMTIsIGExMyxcbiAgICAgICAgYTIwLCBhMjEsIGEyMiwgYTIzO1xuXG4gICAgaWYgKGEgPT09IG91dCkge1xuICAgICAgICBvdXRbMTJdID0gYVswXSAqIHggKyBhWzRdICogeSArIGFbOF0gKiB6ICsgYVsxMl07XG4gICAgICAgIG91dFsxM10gPSBhWzFdICogeCArIGFbNV0gKiB5ICsgYVs5XSAqIHogKyBhWzEzXTtcbiAgICAgICAgb3V0WzE0XSA9IGFbMl0gKiB4ICsgYVs2XSAqIHkgKyBhWzEwXSAqIHogKyBhWzE0XTtcbiAgICAgICAgb3V0WzE1XSA9IGFbM10gKiB4ICsgYVs3XSAqIHkgKyBhWzExXSAqIHogKyBhWzE1XTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhMDAgPSBhWzBdOyBhMDEgPSBhWzFdOyBhMDIgPSBhWzJdOyBhMDMgPSBhWzNdO1xuICAgICAgICBhMTAgPSBhWzRdOyBhMTEgPSBhWzVdOyBhMTIgPSBhWzZdOyBhMTMgPSBhWzddO1xuICAgICAgICBhMjAgPSBhWzhdOyBhMjEgPSBhWzldOyBhMjIgPSBhWzEwXTsgYTIzID0gYVsxMV07XG5cbiAgICAgICAgb3V0WzBdID0gYTAwOyBvdXRbMV0gPSBhMDE7IG91dFsyXSA9IGEwMjsgb3V0WzNdID0gYTAzO1xuICAgICAgICBvdXRbNF0gPSBhMTA7IG91dFs1XSA9IGExMTsgb3V0WzZdID0gYTEyOyBvdXRbN10gPSBhMTM7XG4gICAgICAgIG91dFs4XSA9IGEyMDsgb3V0WzldID0gYTIxOyBvdXRbMTBdID0gYTIyOyBvdXRbMTFdID0gYTIzO1xuXG4gICAgICAgIG91dFsxMl0gPSBhMDAgKiB4ICsgYTEwICogeSArIGEyMCAqIHogKyBhWzEyXTtcbiAgICAgICAgb3V0WzEzXSA9IGEwMSAqIHggKyBhMTEgKiB5ICsgYTIxICogeiArIGFbMTNdO1xuICAgICAgICBvdXRbMTRdID0gYTAyICogeCArIGExMiAqIHkgKyBhMjIgKiB6ICsgYVsxNF07XG4gICAgICAgIG91dFsxNV0gPSBhMDMgKiB4ICsgYTEzICogeSArIGEyMyAqIHogKyBhWzE1XTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHBhcnNlRXJyb3JzXG5cbmZ1bmN0aW9uIHBhcnNlRXJyb3JzKGxvZykge1xuICBsb2cgPSBTdHJpbmcobG9nKVxuXG4gIHZhciBsb2dzID0gW11cbiAgdmFyIHJlc3VsdFxuXG4gIHdoaWxlIChyZXN1bHQgPSBsb2cubWF0Y2goL0VSUk9SXFw6KFteXFxuXSspLykpIHtcbiAgICBsb2cgPSBsb2cuc2xpY2UocmVzdWx0LmluZGV4ICsgMSlcblxuICAgIHZhciBsaW5lID0gcmVzdWx0WzFdLnRyaW0oKVxuICAgIHZhciBzZXBzID0gbGluZS5zcGxpdCgnOicpXG4gICAgdmFyIGVtc2cgPSBzZXBzLnNsaWNlKDIpLmpvaW4oJzonKS50cmltKClcbiAgICB2YXIgZmlsZSA9IHBhcnNlSW50KHNlcHNbMF0sIDEwKVxuICAgIHZhciBsaW5lID0gcGFyc2VJbnQoc2Vwc1sxXSwgMTApXG5cbiAgICBsb2dzLnB1c2goe1xuICAgICAgICBtZXNzYWdlOiBlbXNnXG4gICAgICAsIGZpbGU6IGZpbGVcbiAgICAgICwgbGluZTogbGluZVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbG9nc1xufVxuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCJcbi8qKlxuICogaXNBcnJheVxuICovXG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuLyoqXG4gKiB0b1N0cmluZ1xuICovXG5cbnZhciBzdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBgdmFsYFxuICogaXMgYW4gYXJyYXkuXG4gKlxuICogZXhhbXBsZTpcbiAqXG4gKiAgICAgICAgaXNBcnJheShbXSk7XG4gKiAgICAgICAgLy8gPiB0cnVlXG4gKiAgICAgICAgaXNBcnJheShhcmd1bWVudHMpO1xuICogICAgICAgIC8vID4gZmFsc2VcbiAqICAgICAgICBpc0FycmF5KCcnKTtcbiAqICAgICAgICAvLyA+IGZhbHNlXG4gKlxuICogQHBhcmFtIHttaXhlZH0gdmFsXG4gKiBAcmV0dXJuIHtib29sfVxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheSB8fCBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiAhISB2YWwgJiYgJ1tvYmplY3QgQXJyYXldJyA9PSBzdHIuY2FsbCh2YWwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuXG52YXIgeWFtbCA9IHJlcXVpcmUoJy4vbGliL2pzLXlhbWwuanMnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHlhbWw7XG4iLCIndXNlIHN0cmljdCc7XG5cblxudmFyIGxvYWRlciA9IHJlcXVpcmUoJy4vanMteWFtbC9sb2FkZXInKTtcbi8vIHZhciBkdW1wZXIgPSByZXF1aXJlKCcuL2pzLXlhbWwvZHVtcGVyJyk7XG5cblxuZnVuY3Rpb24gZGVwcmVjYXRlZChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiAnICsgbmFtZSArICcgaXMgZGVwcmVjYXRlZCBhbmQgY2Fubm90IGJlIHVzZWQuJyk7XG4gIH07XG59XG5cblxubW9kdWxlLmV4cG9ydHMuVHlwZSAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vanMteWFtbC90eXBlJyk7XG5tb2R1bGUuZXhwb3J0cy5TY2hlbWEgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYScpO1xubW9kdWxlLmV4cG9ydHMuRkFJTFNBRkVfU0NIRU1BICAgICA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvZmFpbHNhZmUnKTtcbm1vZHVsZS5leHBvcnRzLkpTT05fU0NIRU1BICAgICAgICAgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hL2pzb24nKTtcbm1vZHVsZS5leHBvcnRzLkNPUkVfU0NIRU1BICAgICAgICAgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hL2NvcmUnKTtcbm1vZHVsZS5leHBvcnRzLkRFRkFVTFRfU0FGRV9TQ0hFTUEgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfc2FmZScpO1xubW9kdWxlLmV4cG9ydHMuREVGQVVMVF9GVUxMX1NDSEVNQSA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsJyk7XG5tb2R1bGUuZXhwb3J0cy5sb2FkICAgICAgICAgICAgICAgID0gbG9hZGVyLmxvYWQ7XG5tb2R1bGUuZXhwb3J0cy5sb2FkQWxsICAgICAgICAgICAgID0gbG9hZGVyLmxvYWRBbGw7XG5tb2R1bGUuZXhwb3J0cy5zYWZlTG9hZCAgICAgICAgICAgID0gbG9hZGVyLnNhZmVMb2FkO1xubW9kdWxlLmV4cG9ydHMuc2FmZUxvYWRBbGwgICAgICAgICA9IGxvYWRlci5zYWZlTG9hZEFsbDtcbi8vIG1vZHVsZS5leHBvcnRzLmR1bXAgICAgICAgICAgICAgICAgPSBkdW1wZXIuZHVtcDtcbi8vIG1vZHVsZS5leHBvcnRzLnNhZmVEdW1wICAgICAgICAgICAgPSBkdW1wZXIuc2FmZUR1bXA7XG5tb2R1bGUuZXhwb3J0cy5ZQU1MRXhjZXB0aW9uICAgICAgID0gcmVxdWlyZSgnLi9qcy15YW1sL2V4Y2VwdGlvbicpO1xuXG4vLyBEZXByZWNhdGVkIHNjaGVtYSBuYW1lcyBmcm9tIEpTLVlBTUwgMi4wLnhcbm1vZHVsZS5leHBvcnRzLk1JTklNQUxfU0NIRU1BID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZScpO1xubW9kdWxlLmV4cG9ydHMuU0FGRV9TQ0hFTUEgICAgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfc2FmZScpO1xubW9kdWxlLmV4cG9ydHMuREVGQVVMVF9TQ0hFTUEgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbCcpO1xuXG4vLyBEZXByZWNhdGVkIGZ1bmN0aW9ucyBmcm9tIEpTLVlBTUwgMS54Lnhcbm1vZHVsZS5leHBvcnRzLnNjYW4gICAgICAgICAgID0gZGVwcmVjYXRlZCgnc2NhbicpO1xubW9kdWxlLmV4cG9ydHMucGFyc2UgICAgICAgICAgPSBkZXByZWNhdGVkKCdwYXJzZScpO1xubW9kdWxlLmV4cG9ydHMuY29tcG9zZSAgICAgICAgPSBkZXByZWNhdGVkKCdjb21wb3NlJyk7XG5tb2R1bGUuZXhwb3J0cy5hZGRDb25zdHJ1Y3RvciA9IGRlcHJlY2F0ZWQoJ2FkZENvbnN0cnVjdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cblxuZnVuY3Rpb24gaXNOb3RoaW5nKHN1YmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3ViamVjdCA9PT0gJ3VuZGVmaW5lZCcpIHx8IChzdWJqZWN0ID09PSBudWxsKTtcbn1cblxuXG5mdW5jdGlvbiBpc09iamVjdChzdWJqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIHN1YmplY3QgPT09ICdvYmplY3QnKSAmJiAoc3ViamVjdCAhPT0gbnVsbCk7XG59XG5cblxuZnVuY3Rpb24gdG9BcnJheShzZXF1ZW5jZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShzZXF1ZW5jZSkpIHJldHVybiBzZXF1ZW5jZTtcbiAgZWxzZSBpZiAoaXNOb3RoaW5nKHNlcXVlbmNlKSkgcmV0dXJuIFtdO1xuXG4gIHJldHVybiBbIHNlcXVlbmNlIF07XG59XG5cblxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCBrZXksIHNvdXJjZUtleXM7XG5cbiAgaWYgKHNvdXJjZSkge1xuICAgIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cblxuZnVuY3Rpb24gcmVwZWF0KHN0cmluZywgY291bnQpIHtcbiAgdmFyIHJlc3VsdCA9ICcnLCBjeWNsZTtcblxuICBmb3IgKGN5Y2xlID0gMDsgY3ljbGUgPCBjb3VudDsgY3ljbGUgKz0gMSkge1xuICAgIHJlc3VsdCArPSBzdHJpbmc7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIGlzTmVnYXRpdmVaZXJvKG51bWJlcikge1xuICByZXR1cm4gKG51bWJlciA9PT0gMCkgJiYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gMSAvIG51bWJlcik7XG59XG5cblxubW9kdWxlLmV4cG9ydHMuaXNOb3RoaW5nICAgICAgPSBpc05vdGhpbmc7XG5tb2R1bGUuZXhwb3J0cy5pc09iamVjdCAgICAgICA9IGlzT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMudG9BcnJheSAgICAgICAgPSB0b0FycmF5O1xubW9kdWxlLmV4cG9ydHMucmVwZWF0ICAgICAgICAgPSByZXBlYXQ7XG5tb2R1bGUuZXhwb3J0cy5pc05lZ2F0aXZlWmVybyA9IGlzTmVnYXRpdmVaZXJvO1xubW9kdWxlLmV4cG9ydHMuZXh0ZW5kICAgICAgICAgPSBleHRlbmQ7XG4iLCIvLyBZQU1MIGVycm9yIGNsYXNzLiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg0NTg5ODRcbi8vXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIFlBTUxFeGNlcHRpb24ocmVhc29uLCBtYXJrKSB7XG4gIC8vIFN1cGVyIGNvbnN0cnVjdG9yXG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgLy8gSW5jbHVkZSBzdGFjayB0cmFjZSBpbiBlcnJvciBvYmplY3RcbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgLy8gQ2hyb21lIGFuZCBOb2RlSlNcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBGRiwgSUUgMTArIGFuZCBTYWZhcmkgNisuIEZhbGxiYWNrIGZvciBvdGhlcnNcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjayB8fCAnJztcbiAgfVxuXG4gIHRoaXMubmFtZSA9ICdZQU1MRXhjZXB0aW9uJztcbiAgdGhpcy5yZWFzb24gPSByZWFzb247XG4gIHRoaXMubWFyayA9IG1hcms7XG4gIHRoaXMubWVzc2FnZSA9ICh0aGlzLnJlYXNvbiB8fCAnKHVua25vd24gcmVhc29uKScpICsgKHRoaXMubWFyayA/ICcgJyArIHRoaXMubWFyay50b1N0cmluZygpIDogJycpO1xufVxuXG5cbi8vIEluaGVyaXQgZnJvbSBFcnJvclxuWUFNTEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5ZQU1MRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFlBTUxFeGNlcHRpb247XG5cblxuWUFNTEV4Y2VwdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhjb21wYWN0KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLm5hbWUgKyAnOiAnO1xuXG4gIHJlc3VsdCArPSB0aGlzLnJlYXNvbiB8fCAnKHVua25vd24gcmVhc29uKSc7XG5cbiAgaWYgKCFjb21wYWN0ICYmIHRoaXMubWFyaykge1xuICAgIHJlc3VsdCArPSAnICcgKyB0aGlzLm1hcmsudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gWUFNTEV4Y2VwdGlvbjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyplc2xpbnQtZGlzYWJsZSBtYXgtbGVuLG5vLXVzZS1iZWZvcmUtZGVmaW5lKi9cblxudmFyIGNvbW1vbiAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL2NvbW1vbicpO1xudmFyIFlBTUxFeGNlcHRpb24gICAgICAgPSByZXF1aXJlKCcuL2V4Y2VwdGlvbicpO1xudmFyIE1hcmsgICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL21hcmsnKTtcbnZhciBERUZBVUxUX1NBRkVfU0NIRU1BID0gcmVxdWlyZSgnLi9zY2hlbWEvZGVmYXVsdF9zYWZlJyk7XG52YXIgREVGQVVMVF9GVUxMX1NDSEVNQSA9IHJlcXVpcmUoJy4vc2NoZW1hL2RlZmF1bHRfZnVsbCcpO1xuXG5cbnZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5cbnZhciBDT05URVhUX0ZMT1dfSU4gICA9IDE7XG52YXIgQ09OVEVYVF9GTE9XX09VVCAgPSAyO1xudmFyIENPTlRFWFRfQkxPQ0tfSU4gID0gMztcbnZhciBDT05URVhUX0JMT0NLX09VVCA9IDQ7XG5cblxudmFyIENIT01QSU5HX0NMSVAgID0gMTtcbnZhciBDSE9NUElOR19TVFJJUCA9IDI7XG52YXIgQ0hPTVBJTkdfS0VFUCAgPSAzO1xuXG5cbnZhciBQQVRURVJOX05PTl9QUklOVEFCTEUgICAgICAgICA9IC9bXFx4MDAtXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUZcXHg3Ri1cXHg4NFxceDg2LVxceDlGXFx1RkZGRVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLztcbnZhciBQQVRURVJOX05PTl9BU0NJSV9MSU5FX0JSRUFLUyA9IC9bXFx4ODVcXHUyMDI4XFx1MjAyOV0vO1xudmFyIFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTICAgICAgID0gL1ssXFxbXFxdXFx7XFx9XS87XG52YXIgUEFUVEVSTl9UQUdfSEFORExFICAgICAgICAgICAgPSAvXig/OiF8ISF8IVthLXpcXC1dKyEpJC9pO1xudmFyIFBBVFRFUk5fVEFHX1VSSSAgICAgICAgICAgICAgID0gL14oPzohfFteLFxcW1xcXVxce1xcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcXC0jO1xcL1xcPzpAJj1cXCtcXCQsX1xcLiF+XFwqJ1xcKFxcKVxcW1xcXV0pKiQvaTtcblxuXG5mdW5jdGlvbiBpc19FT0woYykge1xuICByZXR1cm4gKGMgPT09IDB4MEEvKiBMRiAqLykgfHwgKGMgPT09IDB4MEQvKiBDUiAqLyk7XG59XG5cbmZ1bmN0aW9uIGlzX1dISVRFX1NQQUNFKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDA5LyogVGFiICovKSB8fCAoYyA9PT0gMHgyMC8qIFNwYWNlICovKTtcbn1cblxuZnVuY3Rpb24gaXNfV1NfT1JfRU9MKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDA5LyogVGFiICovKSB8fFxuICAgICAgICAgKGMgPT09IDB4MjAvKiBTcGFjZSAqLykgfHxcbiAgICAgICAgIChjID09PSAweDBBLyogTEYgKi8pIHx8XG4gICAgICAgICAoYyA9PT0gMHgwRC8qIENSICovKTtcbn1cblxuZnVuY3Rpb24gaXNfRkxPV19JTkRJQ0FUT1IoYykge1xuICByZXR1cm4gYyA9PT0gMHgyQy8qICwgKi8gfHxcbiAgICAgICAgIGMgPT09IDB4NUIvKiBbICovIHx8XG4gICAgICAgICBjID09PSAweDVELyogXSAqLyB8fFxuICAgICAgICAgYyA9PT0gMHg3Qi8qIHsgKi8gfHxcbiAgICAgICAgIGMgPT09IDB4N0QvKiB9ICovO1xufVxuXG5mdW5jdGlvbiBmcm9tSGV4Q29kZShjKSB7XG4gIHZhciBsYztcblxuICBpZiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSkge1xuICAgIHJldHVybiBjIC0gMHgzMDtcbiAgfVxuXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSovXG4gIGxjID0gYyB8IDB4MjA7XG5cbiAgaWYgKCgweDYxLyogYSAqLyA8PSBsYykgJiYgKGxjIDw9IDB4NjYvKiBmICovKSkge1xuICAgIHJldHVybiBsYyAtIDB4NjEgKyAxMDtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlZEhleExlbihjKSB7XG4gIGlmIChjID09PSAweDc4LyogeCAqLykgeyByZXR1cm4gMjsgfVxuICBpZiAoYyA9PT0gMHg3NS8qIHUgKi8pIHsgcmV0dXJuIDQ7IH1cbiAgaWYgKGMgPT09IDB4NTUvKiBVICovKSB7IHJldHVybiA4OyB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBmcm9tRGVjaW1hbENvZGUoYykge1xuICBpZiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSkge1xuICAgIHJldHVybiBjIC0gMHgzMDtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlRXNjYXBlU2VxdWVuY2UoYykge1xuICByZXR1cm4gKGMgPT09IDB4MzAvKiAwICovKSA/ICdcXHgwMCcgOlxuICAgICAgICAoYyA9PT0gMHg2MS8qIGEgKi8pID8gJ1xceDA3JyA6XG4gICAgICAgIChjID09PSAweDYyLyogYiAqLykgPyAnXFx4MDgnIDpcbiAgICAgICAgKGMgPT09IDB4NzQvKiB0ICovKSA/ICdcXHgwOScgOlxuICAgICAgICAoYyA9PT0gMHgwOS8qIFRhYiAqLykgPyAnXFx4MDknIDpcbiAgICAgICAgKGMgPT09IDB4NkUvKiBuICovKSA/ICdcXHgwQScgOlxuICAgICAgICAoYyA9PT0gMHg3Ni8qIHYgKi8pID8gJ1xceDBCJyA6XG4gICAgICAgIChjID09PSAweDY2LyogZiAqLykgPyAnXFx4MEMnIDpcbiAgICAgICAgKGMgPT09IDB4NzIvKiByICovKSA/ICdcXHgwRCcgOlxuICAgICAgICAoYyA9PT0gMHg2NS8qIGUgKi8pID8gJ1xceDFCJyA6XG4gICAgICAgIChjID09PSAweDIwLyogU3BhY2UgKi8pID8gJyAnIDpcbiAgICAgICAgKGMgPT09IDB4MjIvKiBcIiAqLykgPyAnXFx4MjInIDpcbiAgICAgICAgKGMgPT09IDB4MkYvKiAvICovKSA/ICcvJyA6XG4gICAgICAgIChjID09PSAweDVDLyogXFwgKi8pID8gJ1xceDVDJyA6XG4gICAgICAgIChjID09PSAweDRFLyogTiAqLykgPyAnXFx4ODUnIDpcbiAgICAgICAgKGMgPT09IDB4NUYvKiBfICovKSA/ICdcXHhBMCcgOlxuICAgICAgICAoYyA9PT0gMHg0Qy8qIEwgKi8pID8gJ1xcdTIwMjgnIDpcbiAgICAgICAgKGMgPT09IDB4NTAvKiBQICovKSA/ICdcXHUyMDI5JyA6ICcnO1xufVxuXG5mdW5jdGlvbiBjaGFyRnJvbUNvZGVwb2ludChjKSB7XG4gIGlmIChjIDw9IDB4RkZGRikge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICB9XG4gIC8vIEVuY29kZSBVVEYtMTYgc3Vycm9nYXRlIHBhaXJcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTE2I0NvZGVfcG9pbnRzX1UuMkIwMTAwMDBfdG9fVS4yQjEwRkZGRlxuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgLSAweDAxMDAwMCkgPj4gMTApICsgMHhEODAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGMgLSAweDAxMDAwMCkgJiAweDAzRkYpICsgMHhEQzAwKTtcbn1cblxudmFyIHNpbXBsZUVzY2FwZUNoZWNrID0gbmV3IEFycmF5KDI1Nik7IC8vIGludGVnZXIsIGZvciBmYXN0IGFjY2Vzc1xudmFyIHNpbXBsZUVzY2FwZU1hcCA9IG5ldyBBcnJheSgyNTYpO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICBzaW1wbGVFc2NhcGVDaGVja1tpXSA9IHNpbXBsZUVzY2FwZVNlcXVlbmNlKGkpID8gMSA6IDA7XG4gIHNpbXBsZUVzY2FwZU1hcFtpXSA9IHNpbXBsZUVzY2FwZVNlcXVlbmNlKGkpO1xufVxuXG5cbmZ1bmN0aW9uIFN0YXRlKGlucHV0LCBvcHRpb25zKSB7XG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICB0aGlzLmZpbGVuYW1lICA9IG9wdGlvbnNbJ2ZpbGVuYW1lJ10gIHx8IG51bGw7XG4gIHRoaXMuc2NoZW1hICAgID0gb3B0aW9uc1snc2NoZW1hJ10gICAgfHwgREVGQVVMVF9GVUxMX1NDSEVNQTtcbiAgdGhpcy5vbldhcm5pbmcgPSBvcHRpb25zWydvbldhcm5pbmcnXSB8fCBudWxsO1xuICB0aGlzLmxlZ2FjeSAgICA9IG9wdGlvbnNbJ2xlZ2FjeSddICAgIHx8IGZhbHNlO1xuICB0aGlzLmpzb24gICAgICA9IG9wdGlvbnNbJ2pzb24nXSAgICAgIHx8IGZhbHNlO1xuICB0aGlzLmxpc3RlbmVyICA9IG9wdGlvbnNbJ2xpc3RlbmVyJ10gIHx8IG51bGw7XG5cbiAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDtcbiAgdGhpcy50eXBlTWFwICAgICAgID0gdGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwO1xuXG4gIHRoaXMubGVuZ3RoICAgICA9IGlucHV0Lmxlbmd0aDtcbiAgdGhpcy5wb3NpdGlvbiAgID0gMDtcbiAgdGhpcy5saW5lICAgICAgID0gMDtcbiAgdGhpcy5saW5lU3RhcnQgID0gMDtcbiAgdGhpcy5saW5lSW5kZW50ID0gMDtcblxuICB0aGlzLmRvY3VtZW50cyA9IFtdO1xuXG4gIC8qXG4gIHRoaXMudmVyc2lvbjtcbiAgdGhpcy5jaGVja0xpbmVCcmVha3M7XG4gIHRoaXMudGFnTWFwO1xuICB0aGlzLmFuY2hvck1hcDtcbiAgdGhpcy50YWc7XG4gIHRoaXMuYW5jaG9yO1xuICB0aGlzLmtpbmQ7XG4gIHRoaXMucmVzdWx0OyovXG5cbn1cblxuXG5mdW5jdGlvbiBnZW5lcmF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgWUFNTEV4Y2VwdGlvbihcbiAgICBtZXNzYWdlLFxuICAgIG5ldyBNYXJrKHN0YXRlLmZpbGVuYW1lLCBzdGF0ZS5pbnB1dCwgc3RhdGUucG9zaXRpb24sIHN0YXRlLmxpbmUsIChzdGF0ZS5wb3NpdGlvbiAtIHN0YXRlLmxpbmVTdGFydCkpKTtcbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihzdGF0ZSwgbWVzc2FnZSkge1xuICB0aHJvdyBnZW5lcmF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlKTtcbn1cblxuZnVuY3Rpb24gdGhyb3dXYXJuaW5nKHN0YXRlLCBtZXNzYWdlKSB7XG4gIGlmIChzdGF0ZS5vbldhcm5pbmcpIHtcbiAgICBzdGF0ZS5vbldhcm5pbmcuY2FsbChudWxsLCBnZW5lcmF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlKSk7XG4gIH1cbn1cblxuXG52YXIgZGlyZWN0aXZlSGFuZGxlcnMgPSB7XG5cbiAgWUFNTDogZnVuY3Rpb24gaGFuZGxlWWFtbERpcmVjdGl2ZShzdGF0ZSwgbmFtZSwgYXJncykge1xuXG4gICAgdmFyIG1hdGNoLCBtYWpvciwgbWlub3I7XG5cbiAgICBpZiAoc3RhdGUudmVyc2lvbiAhPT0gbnVsbCkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2R1cGxpY2F0aW9uIG9mICVZQU1MIGRpcmVjdGl2ZScpO1xuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ1lBTUwgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG5cbiAgICBtYXRjaCA9IC9eKFswLTldKylcXC4oWzAtOV0rKSQvLmV4ZWMoYXJnc1swXSk7XG5cbiAgICBpZiAobWF0Y2ggPT09IG51bGwpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbGwtZm9ybWVkIGFyZ3VtZW50IG9mIHRoZSBZQU1MIGRpcmVjdGl2ZScpO1xuICAgIH1cblxuICAgIG1ham9yID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgICBtaW5vciA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7XG5cbiAgICBpZiAobWFqb3IgIT09IDEpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCcpO1xuICAgIH1cblxuICAgIHN0YXRlLnZlcnNpb24gPSBhcmdzWzBdO1xuICAgIHN0YXRlLmNoZWNrTGluZUJyZWFrcyA9IChtaW5vciA8IDIpO1xuXG4gICAgaWYgKG1pbm9yICE9PSAxICYmIG1pbm9yICE9PSAyKSB7XG4gICAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICd1bnN1cHBvcnRlZCBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Jyk7XG4gICAgfVxuICB9LFxuXG4gIFRBRzogZnVuY3Rpb24gaGFuZGxlVGFnRGlyZWN0aXZlKHN0YXRlLCBuYW1lLCBhcmdzKSB7XG5cbiAgICB2YXIgaGFuZGxlLCBwcmVmaXg7XG5cbiAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdUQUcgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSB0d28gYXJndW1lbnRzJyk7XG4gICAgfVxuXG4gICAgaGFuZGxlID0gYXJnc1swXTtcbiAgICBwcmVmaXggPSBhcmdzWzFdO1xuXG4gICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdChoYW5kbGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnaWxsLWZvcm1lZCB0YWcgaGFuZGxlIChmaXJzdCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUnKTtcbiAgICB9XG5cbiAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUudGFnTWFwLCBoYW5kbGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGhlcmUgaXMgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgXCInICsgaGFuZGxlICsgJ1wiIHRhZyBoYW5kbGUnKTtcbiAgICB9XG5cbiAgICBpZiAoIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHByZWZpeCkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUnKTtcbiAgICB9XG5cbiAgICBzdGF0ZS50YWdNYXBbaGFuZGxlXSA9IHByZWZpeDtcbiAgfVxufTtcblxuXG5mdW5jdGlvbiBjYXB0dXJlU2VnbWVudChzdGF0ZSwgc3RhcnQsIGVuZCwgY2hlY2tKc29uKSB7XG4gIHZhciBfcG9zaXRpb24sIF9sZW5ndGgsIF9jaGFyYWN0ZXIsIF9yZXN1bHQ7XG5cbiAgaWYgKHN0YXJ0IDwgZW5kKSB7XG4gICAgX3Jlc3VsdCA9IHN0YXRlLmlucHV0LnNsaWNlKHN0YXJ0LCBlbmQpO1xuXG4gICAgaWYgKGNoZWNrSnNvbikge1xuICAgICAgZm9yIChfcG9zaXRpb24gPSAwLCBfbGVuZ3RoID0gX3Jlc3VsdC5sZW5ndGg7XG4gICAgICAgICAgIF9wb3NpdGlvbiA8IF9sZW5ndGg7XG4gICAgICAgICAgIF9wb3NpdGlvbiArPSAxKSB7XG4gICAgICAgIF9jaGFyYWN0ZXIgPSBfcmVzdWx0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcbiAgICAgICAgaWYgKCEoX2NoYXJhY3RlciA9PT0gMHgwOSB8fFxuICAgICAgICAgICAgICAoMHgyMCA8PSBfY2hhcmFjdGVyICYmIF9jaGFyYWN0ZXIgPD0gMHgxMEZGRkYpKSkge1xuICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdleHBlY3RlZCB2YWxpZCBKU09OIGNoYXJhY3RlcicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChQQVRURVJOX05PTl9QUklOVEFCTEUudGVzdChfcmVzdWx0KSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RoZSBzdHJlYW0gY29udGFpbnMgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuXG4gICAgc3RhdGUucmVzdWx0ICs9IF9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VNYXBwaW5ncyhzdGF0ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3ZlcnJpZGFibGVLZXlzKSB7XG4gIHZhciBzb3VyY2VLZXlzLCBrZXksIGluZGV4LCBxdWFudGl0eTtcblxuICBpZiAoIWNvbW1vbi5pc09iamVjdChzb3VyY2UpKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2Nhbm5vdCBtZXJnZSBtYXBwaW5nczsgdGhlIHByb3ZpZGVkIHNvdXJjZSBvYmplY3QgaXMgdW5hY2NlcHRhYmxlJyk7XG4gIH1cblxuICBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcblxuICBmb3IgKGluZGV4ID0gMCwgcXVhbnRpdHkgPSBzb3VyY2VLZXlzLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaW5kZXhdO1xuXG4gICAgaWYgKCFfaGFzT3duUHJvcGVydHkuY2FsbChkZXN0aW5hdGlvbiwga2V5KSkge1xuICAgICAgZGVzdGluYXRpb25ba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgb3ZlcnJpZGFibGVLZXlzW2tleV0gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlKSB7XG4gIHZhciBpbmRleCwgcXVhbnRpdHk7XG5cbiAga2V5Tm9kZSA9IFN0cmluZyhrZXlOb2RlKTtcblxuICBpZiAoX3Jlc3VsdCA9PT0gbnVsbCkge1xuICAgIF9yZXN1bHQgPSB7fTtcbiAgfVxuXG4gIGlmIChrZXlUYWcgPT09ICd0YWc6eWFtbC5vcmcsMjAwMjptZXJnZScpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZU5vZGUpKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgcXVhbnRpdHkgPSB2YWx1ZU5vZGUubGVuZ3RoOyBpbmRleCA8IHF1YW50aXR5OyBpbmRleCArPSAxKSB7XG4gICAgICAgIG1lcmdlTWFwcGluZ3Moc3RhdGUsIF9yZXN1bHQsIHZhbHVlTm9kZVtpbmRleF0sIG92ZXJyaWRhYmxlS2V5cyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlTWFwcGluZ3Moc3RhdGUsIF9yZXN1bHQsIHZhbHVlTm9kZSwgb3ZlcnJpZGFibGVLZXlzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFzdGF0ZS5qc29uICYmXG4gICAgICAgICFfaGFzT3duUHJvcGVydHkuY2FsbChvdmVycmlkYWJsZUtleXMsIGtleU5vZGUpICYmXG4gICAgICAgIF9oYXNPd25Qcm9wZXJ0eS5jYWxsKF9yZXN1bHQsIGtleU5vZGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRlZCBtYXBwaW5nIGtleScpO1xuICAgIH1cbiAgICBfcmVzdWx0W2tleU5vZGVdID0gdmFsdWVOb2RlO1xuICAgIGRlbGV0ZSBvdmVycmlkYWJsZUtleXNba2V5Tm9kZV07XG4gIH1cblxuICByZXR1cm4gX3Jlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVhZExpbmVCcmVhayhzdGF0ZSkge1xuICB2YXIgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4MEEvKiBMRiAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDB4MEQvKiBDUiAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgaWYgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSAweDBBLyogTEYgKi8pIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIHN0YXRlLmxpbmUgKz0gMTtcbiAgc3RhdGUubGluZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG59XG5cbmZ1bmN0aW9uIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGFsbG93Q29tbWVudHMsIGNoZWNrSW5kZW50KSB7XG4gIHZhciBsaW5lQnJlYWtzID0gMCxcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChhbGxvd0NvbW1lbnRzICYmIGNoID09PSAweDIzLyogIyAqLykge1xuICAgICAgZG8ge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9IHdoaWxlIChjaCAhPT0gMHgwQS8qIExGICovICYmIGNoICE9PSAweDBELyogQ1IgKi8gJiYgY2ggIT09IDApO1xuICAgIH1cblxuICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgIGxpbmVCcmVha3MrKztcbiAgICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgICB3aGlsZSAoY2ggPT09IDB4MjAvKiBTcGFjZSAqLykge1xuICAgICAgICBzdGF0ZS5saW5lSW5kZW50Kys7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNoZWNrSW5kZW50ICE9PSAtMSAmJiBsaW5lQnJlYWtzICE9PSAwICYmIHN0YXRlLmxpbmVJbmRlbnQgPCBjaGVja0luZGVudCkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ2RlZmljaWVudCBpbmRlbnRhdGlvbicpO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVCcmVha3M7XG59XG5cbmZ1bmN0aW9uIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb24sXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcblxuICAvLyBDb25kaXRpb24gc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCBpcyB0ZXN0ZWRcbiAgLy8gaW4gcGFyZW50IG9uIGVhY2ggY2FsbCwgZm9yIGVmZmljaWVuY3kuIE5vIG5lZWRzIHRvIHRlc3QgaGVyZSBhZ2Fpbi5cbiAgaWYgKChjaCA9PT0gMHgyRC8qIC0gKi8gfHwgY2ggPT09IDB4MkUvKiAuICovKSAmJlxuICAgICAgY2ggPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMSkgJiZcbiAgICAgIGNoID09PSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbiArIDIpKSB7XG5cbiAgICBfcG9zaXRpb24gKz0gMztcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuXG4gICAgaWYgKGNoID09PSAwIHx8IGlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgY291bnQpIHtcbiAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgc3RhdGUucmVzdWx0ICs9ICcgJztcbiAgfSBlbHNlIGlmIChjb3VudCA+IDEpIHtcbiAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgY291bnQgLSAxKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHJlYWRQbGFpblNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCwgd2l0aGluRmxvd0NvbGxlY3Rpb24pIHtcbiAgdmFyIHByZWNlZGluZyxcbiAgICAgIGZvbGxvd2luZyxcbiAgICAgIGNhcHR1cmVTdGFydCxcbiAgICAgIGNhcHR1cmVFbmQsXG4gICAgICBoYXNQZW5kaW5nQ29udGVudCxcbiAgICAgIF9saW5lLFxuICAgICAgX2xpbmVTdGFydCxcbiAgICAgIF9saW5lSW5kZW50LFxuICAgICAgX2tpbmQgPSBzdGF0ZS5raW5kLFxuICAgICAgX3Jlc3VsdCA9IHN0YXRlLnJlc3VsdCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGlzX1dTX09SX0VPTChjaCkgICAgICB8fFxuICAgICAgaXNfRkxPV19JTkRJQ0FUT1IoY2gpIHx8XG4gICAgICBjaCA9PT0gMHgyMy8qICMgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDI2LyogJiAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4MkEvKiAqICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgyMS8qICEgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDdDLyogfCAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4M0UvKiA+ICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgyNy8qICcgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDIyLyogXCIgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDI1LyogJSAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4NDAvKiBAICovICAgIHx8XG4gICAgICBjaCA9PT0gMHg2MC8qIGAgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoY2ggPT09IDB4M0YvKiA/ICovIHx8IGNoID09PSAweDJELyogLSAqLykge1xuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSB8fFxuICAgICAgICB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmIChjaCA9PT0gMHgzQS8qIDogKi8pIHtcbiAgICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8XG4gICAgICAgICAgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoZm9sbG93aW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MjMvKiAjICovKSB7XG4gICAgICBwcmVjZWRpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uIC0gMSk7XG5cbiAgICAgIGlmIChpc19XU19PUl9FT0wocHJlY2VkaW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkgfHxcbiAgICAgICAgICAgICAgIHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkge1xuICAgICAgYnJlYWs7XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICAgIF9saW5lU3RhcnQgPSBzdGF0ZS5saW5lU3RhcnQ7XG4gICAgICBfbGluZUluZGVudCA9IHN0YXRlLmxpbmVJbmRlbnQ7XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgLTEpO1xuXG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+PSBub2RlSW5kZW50KSB7XG4gICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IGNhcHR1cmVFbmQ7XG4gICAgICAgIHN0YXRlLmxpbmUgPSBfbGluZTtcbiAgICAgICAgc3RhdGUubGluZVN0YXJ0ID0gX2xpbmVTdGFydDtcbiAgICAgICAgc3RhdGUubGluZUluZGVudCA9IF9saW5lSW5kZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzUGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHN0YXRlLmxpbmUgLSBfbGluZSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb24gKyAxO1xuICAgIH1cblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuXG4gIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcblxuICBpZiAoc3RhdGUucmVzdWx0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gX2tpbmQ7XG4gIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2gsXG4gICAgICBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQ7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggIT09IDB4MjcvKiAnICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgc3RhdGUucG9zaXRpb24rKztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlICgoY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkgIT09IDApIHtcbiAgICBpZiAoY2ggPT09IDB4MjcvKiAnICovKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyNy8qICcgKi8pIHtcbiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpKTtcbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIH0gZWxzZSBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyJyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhcicpO1xufVxuXG5mdW5jdGlvbiByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBjYXB0dXJlU3RhcnQsXG4gICAgICBjYXB0dXJlRW5kLFxuICAgICAgaGV4TGVuZ3RoLFxuICAgICAgaGV4UmVzdWx0LFxuICAgICAgdG1wLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggIT09IDB4MjIvKiBcIiAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRlLmtpbmQgPSAnc2NhbGFyJztcbiAgc3RhdGUucmVzdWx0ID0gJyc7XG4gIHN0YXRlLnBvc2l0aW9uKys7XG4gIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICB3aGlsZSAoKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSAweDIyLyogXCIgKi8pIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4NUMvKiBcXCAqLykge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgc3RhdGUucG9zaXRpb24sIHRydWUpO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgbm9kZUluZGVudCk7XG5cbiAgICAgICAgLy8gVE9ETzogcmV3b3JrIHRvIGlubGluZSBmbiB3aXRoIG5vIHR5cGUgY2FzdD9cbiAgICAgIH0gZWxzZSBpZiAoY2ggPCAyNTYgJiYgc2ltcGxlRXNjYXBlQ2hlY2tbY2hdKSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBzaW1wbGVFc2NhcGVNYXBbY2hdO1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuXG4gICAgICB9IGVsc2UgaWYgKCh0bXAgPSBlc2NhcGVkSGV4TGVuKGNoKSkgPiAwKSB7XG4gICAgICAgIGhleExlbmd0aCA9IHRtcDtcbiAgICAgICAgaGV4UmVzdWx0ID0gMDtcblxuICAgICAgICBmb3IgKDsgaGV4TGVuZ3RoID4gMDsgaGV4TGVuZ3RoLS0pIHtcbiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgICAgICBpZiAoKHRtcCA9IGZyb21IZXhDb2RlKGNoKSkgPj0gMCkge1xuICAgICAgICAgICAgaGV4UmVzdWx0ID0gKGhleFJlc3VsdCA8PCA0KSArIHRtcDtcblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNoYXJGcm9tQ29kZXBvaW50KGhleFJlc3VsdCk7XG5cbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3Vua25vd24gZXNjYXBlIHNlcXVlbmNlJyk7XG4gICAgICB9XG5cbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgdHJ1ZSk7XG4gICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlLCBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgbm9kZUluZGVudCkpO1xuICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXInKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyJyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGbG93Q29sbGVjdGlvbihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgcmVhZE5leHQgPSB0cnVlLFxuICAgICAgX2xpbmUsXG4gICAgICBfdGFnICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIF9yZXN1bHQsXG4gICAgICBfYW5jaG9yICA9IHN0YXRlLmFuY2hvcixcbiAgICAgIGZvbGxvd2luZyxcbiAgICAgIHRlcm1pbmF0b3IsXG4gICAgICBpc1BhaXIsXG4gICAgICBpc0V4cGxpY2l0UGFpcixcbiAgICAgIGlzTWFwcGluZyxcbiAgICAgIG92ZXJyaWRhYmxlS2V5cyA9IHt9LFxuICAgICAga2V5Tm9kZSxcbiAgICAgIGtleVRhZyxcbiAgICAgIHZhbHVlTm9kZSxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoID09PSAweDVCLyogWyAqLykge1xuICAgIHRlcm1pbmF0b3IgPSAweDVEOy8qIF0gKi9cbiAgICBpc01hcHBpbmcgPSBmYWxzZTtcbiAgICBfcmVzdWx0ID0gW107XG4gIH0gZWxzZSBpZiAoY2ggPT09IDB4N0IvKiB7ICovKSB7XG4gICAgdGVybWluYXRvciA9IDB4N0Q7LyogfSAqL1xuICAgIGlzTWFwcGluZyA9IHRydWU7XG4gICAgX3Jlc3VsdCA9IHt9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKGNoID09PSB0ZXJtaW5hdG9yKSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgc3RhdGUudGFnID0gX3RhZztcbiAgICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgICBzdGF0ZS5raW5kID0gaXNNYXBwaW5nID8gJ21hcHBpbmcnIDogJ3NlcXVlbmNlJztcbiAgICAgIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFyZWFkTmV4dCkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ21pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzJyk7XG4gICAgfVxuXG4gICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSBmYWxzZTtcblxuICAgIGlmIChjaCA9PT0gMHgzRi8qID8gKi8pIHtcbiAgICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG4gICAgICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2xpbmUgPSBzdGF0ZS5saW5lO1xuICAgIGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0ZMT1dfSU4sIGZhbHNlLCB0cnVlKTtcbiAgICBrZXlUYWcgPSBzdGF0ZS50YWc7XG4gICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoKGlzRXhwbGljaXRQYWlyIHx8IHN0YXRlLmxpbmUgPT09IF9saW5lKSAmJiBjaCA9PT0gMHgzQS8qIDogKi8pIHtcbiAgICAgIGlzUGFpciA9IHRydWU7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcbiAgICAgIGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0ZMT1dfSU4sIGZhbHNlLCB0cnVlKTtcbiAgICAgIHZhbHVlTm9kZSA9IHN0YXRlLnJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAoaXNNYXBwaW5nKSB7XG4gICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFpcikge1xuICAgICAgX3Jlc3VsdC5wdXNoKHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIG51bGwsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3Jlc3VsdC5wdXNoKGtleU5vZGUpO1xuICAgIH1cblxuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gMHgyQy8qICwgKi8pIHtcbiAgICAgIHJlYWROZXh0ID0gdHJ1ZTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVhZE5leHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb24nKTtcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2NrU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBjYXB0dXJlU3RhcnQsXG4gICAgICBmb2xkaW5nLFxuICAgICAgY2hvbXBpbmcgICAgICAgPSBDSE9NUElOR19DTElQLFxuICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSBmYWxzZSxcbiAgICAgIHRleHRJbmRlbnQgICAgID0gbm9kZUluZGVudCxcbiAgICAgIGVtcHR5TGluZXMgICAgID0gMCxcbiAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2UsXG4gICAgICB0bXAsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCA9PT0gMHg3Qy8qIHwgKi8pIHtcbiAgICBmb2xkaW5nID0gZmFsc2U7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDB4M0UvKiA+ICovKSB7XG4gICAgZm9sZGluZyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcblxuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IDB4MkIvKiArICovIHx8IGNoID09PSAweDJELyogLSAqLykge1xuICAgICAgaWYgKENIT01QSU5HX0NMSVAgPT09IGNob21waW5nKSB7XG4gICAgICAgIGNob21waW5nID0gKGNoID09PSAweDJCLyogKyAqLykgPyBDSE9NUElOR19LRUVQIDogQ0hPTVBJTkdfU1RSSVA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAncmVwZWF0IG9mIGEgY2hvbXBpbmcgbW9kZSBpZGVudGlmaWVyJyk7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKCh0bXAgPSBmcm9tRGVjaW1hbENvZGUoY2gpKSA+PSAwKSB7XG4gICAgICBpZiAodG1wID09PSAwKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdiYWQgZXhwbGljaXQgaW5kZW50YXRpb24gd2lkdGggb2YgYSBibG9jayBzY2FsYXI7IGl0IGNhbm5vdCBiZSBsZXNzIHRoYW4gb25lJyk7XG4gICAgICB9IGVsc2UgaWYgKCFkZXRlY3RlZEluZGVudCkge1xuICAgICAgICB0ZXh0SW5kZW50ID0gbm9kZUluZGVudCArIHRtcCAtIDE7XG4gICAgICAgIGRldGVjdGVkSW5kZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdyZXBlYXQgb2YgYW4gaW5kZW50YXRpb24gd2lkdGggaWRlbnRpZmllcicpO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgIHdoaWxlIChpc19XSElURV9TUEFDRShjaCkpO1xuXG4gICAgaWYgKGNoID09PSAweDIzLyogIyAqLykge1xuICAgICAgZG8geyBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7IH1cbiAgICAgIHdoaWxlICghaXNfRU9MKGNoKSAmJiAoY2ggIT09IDApKTtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICByZWFkTGluZUJyZWFrKHN0YXRlKTtcbiAgICBzdGF0ZS5saW5lSW5kZW50ID0gMDtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICB3aGlsZSAoKCFkZXRlY3RlZEluZGVudCB8fCBzdGF0ZS5saW5lSW5kZW50IDwgdGV4dEluZGVudCkgJiZcbiAgICAgICAgICAgKGNoID09PSAweDIwLyogU3BhY2UgKi8pKSB7XG4gICAgICBzdGF0ZS5saW5lSW5kZW50Kys7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKCFkZXRlY3RlZEluZGVudCAmJiBzdGF0ZS5saW5lSW5kZW50ID4gdGV4dEluZGVudCkge1xuICAgICAgdGV4dEluZGVudCA9IHN0YXRlLmxpbmVJbmRlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIGVtcHR5TGluZXMrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEVuZCBvZiB0aGUgc2NhbGFyLlxuICAgIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgdGV4dEluZGVudCkge1xuXG4gICAgICAvLyBQZXJmb3JtIHRoZSBjaG9tcGluZy5cbiAgICAgIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfS0VFUCkge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZW1wdHlMaW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKGNob21waW5nID09PSBDSE9NUElOR19DTElQKSB7XG4gICAgICAgIGlmIChkZXRlY3RlZEluZGVudCkgeyAvLyBpLmUuIG9ubHkgaWYgdGhlIHNjYWxhciBpcyBub3QgZW1wdHkuXG4gICAgICAgICAgc3RhdGUucmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJyZWFrIHRoaXMgYHdoaWxlYCBjeWNsZSBhbmQgZ28gdG8gdGhlIGZ1bmNpdG9uJ3MgZXBpbG9ndWUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBGb2xkZWQgc3R5bGU6IHVzZSBmYW5jeSBydWxlcyB0byBoYW5kbGUgbGluZSBicmVha3MuXG4gICAgaWYgKGZvbGRpbmcpIHtcblxuICAgICAgLy8gTGluZXMgc3RhcnRpbmcgd2l0aCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzIChtb3JlLWluZGVudGVkIGxpbmVzKSBhcmUgbm90IGZvbGRlZC5cbiAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZW1wdHlMaW5lcyArIDEpO1xuXG4gICAgICAvLyBFbmQgb2YgbW9yZS1pbmRlbnRlZCBibG9jay5cbiAgICAgIH0gZWxzZSBpZiAoYXRNb3JlSW5kZW50ZWQpIHtcbiAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGVtcHR5TGluZXMgKyAxKTtcblxuICAgICAgLy8gSnVzdCBvbmUgbGluZSBicmVhayAtIHBlcmNlaXZlIGFzIHRoZSBzYW1lIGxpbmUuXG4gICAgICB9IGVsc2UgaWYgKGVtcHR5TGluZXMgPT09IDApIHtcbiAgICAgICAgaWYgKGRldGVjdGVkSW5kZW50KSB7IC8vIGkuZS4gb25seSBpZiB3ZSBoYXZlIGFscmVhZHkgcmVhZCBzb21lIHNjYWxhciBjb250ZW50LlxuICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSAnICc7XG4gICAgICAgIH1cblxuICAgICAgLy8gU2V2ZXJhbCBsaW5lIGJyZWFrcyAtIHBlcmNlaXZlIGFzIGRpZmZlcmVudCBsaW5lcy5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzKTtcbiAgICAgIH1cblxuICAgIC8vIExpdGVyYWwgc3R5bGU6IGp1c3QgYWRkIGV4YWN0IG51bWJlciBvZiBsaW5lIGJyZWFrcyBiZXR3ZWVuIGNvbnRlbnQgbGluZXMuXG4gICAgfSBlbHNlIGlmIChkZXRlY3RlZEluZGVudCkge1xuICAgICAgLy8gSWYgY3VycmVudCBsaW5lIGlzbid0IHRoZSBmaXJzdCBvbmUgLSBjb3VudCBsaW5lIGJyZWFrIGZyb20gdGhlIGxhc3QgY29udGVudCBsaW5lLlxuICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGVtcHR5TGluZXMgKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW4gY2FzZSBvZiB0aGUgZmlyc3QgY29udGVudCBsaW5lIC0gY291bnQgb25seSBlbXB0eSBsaW5lcy5cbiAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzKTtcbiAgICB9XG5cbiAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7XG4gICAgZW1wdHlMaW5lcyA9IDA7XG4gICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB3aGlsZSAoIWlzX0VPTChjaCkgJiYgKGNoICE9PSAwKSkge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCBmYWxzZSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIF9saW5lLFxuICAgICAgX3RhZyAgICAgID0gc3RhdGUudGFnLFxuICAgICAgX2FuY2hvciAgID0gc3RhdGUuYW5jaG9yLFxuICAgICAgX3Jlc3VsdCAgID0gW10sXG4gICAgICBmb2xsb3dpbmcsXG4gICAgICBkZXRlY3RlZCAgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuXG4gICAgaWYgKGNoICE9PSAweDJELyogLSAqLykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgaWYgKCFpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG5cbiAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7XG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA8PSBub2RlSW5kZW50KSB7XG4gICAgICAgIF9yZXN1bHQucHVzaChudWxsKTtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2xpbmUgPSBzdGF0ZS5saW5lO1xuICAgIGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAgX3Jlc3VsdC5wdXNoKHN0YXRlLnJlc3VsdCk7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmICgoc3RhdGUubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpICYmIChjaCAhPT0gMCkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdiYWQgaW5kZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBlbnRyeScpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IG5vZGVJbmRlbnQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZXRlY3RlZCkge1xuICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICBzdGF0ZS5raW5kID0gJ3NlcXVlbmNlJztcbiAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2NrTWFwcGluZyhzdGF0ZSwgbm9kZUluZGVudCwgZmxvd0luZGVudCkge1xuICB2YXIgZm9sbG93aW5nLFxuICAgICAgYWxsb3dDb21wYWN0LFxuICAgICAgX2xpbmUsXG4gICAgICBfdGFnICAgICAgICAgID0gc3RhdGUudGFnLFxuICAgICAgX2FuY2hvciAgICAgICA9IHN0YXRlLmFuY2hvcixcbiAgICAgIF9yZXN1bHQgICAgICAgPSB7fSxcbiAgICAgIG92ZXJyaWRhYmxlS2V5cyA9IHt9LFxuICAgICAga2V5VGFnICAgICAgICA9IG51bGwsXG4gICAgICBrZXlOb2RlICAgICAgID0gbnVsbCxcbiAgICAgIHZhbHVlTm9kZSAgICAgPSBudWxsLFxuICAgICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlLFxuICAgICAgZGV0ZWN0ZWQgICAgICA9IGZhbHNlLFxuICAgICAgY2g7XG5cbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gX3Jlc3VsdDtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuICAgIF9saW5lID0gc3RhdGUubGluZTsgLy8gU2F2ZSB0aGUgY3VycmVudCBsaW5lLlxuXG4gICAgLy9cbiAgICAvLyBFeHBsaWNpdCBub3RhdGlvbiBjYXNlLiBUaGVyZSBhcmUgdHdvIHNlcGFyYXRlIGJsb2NrczpcbiAgICAvLyBmaXJzdCBmb3IgdGhlIGtleSAoZGVub3RlZCBieSBcIj9cIikgYW5kIHNlY29uZCBmb3IgdGhlIHZhbHVlIChkZW5vdGVkIGJ5IFwiOlwiKVxuICAgIC8vXG4gICAgaWYgKChjaCA9PT0gMHgzRi8qID8gKi8gfHwgY2ggPT09IDB4M0EvKiA6ICovKSAmJiBpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuXG4gICAgICBpZiAoY2ggPT09IDB4M0YvKiA/ICovKSB7XG4gICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwpO1xuICAgICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gdHJ1ZTtcbiAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTtcblxuICAgICAgfSBlbHNlIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIC8vIGkuZS4gMHgzQS8qIDogKi8gPT09IGNoYXJhY3RlciBhZnRlciB0aGUgZXhwbGljaXQga2V5LlxuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgIGFsbG93Q29tcGFjdCA9IHRydWU7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQnKTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUucG9zaXRpb24gKz0gMTtcbiAgICAgIGNoID0gZm9sbG93aW5nO1xuXG4gICAgLy9cbiAgICAvLyBJbXBsaWNpdCBub3RhdGlvbiBjYXNlLiBGbG93LXN0eWxlIG5vZGUgYXMgdGhlIGtleSBmaXJzdCwgdGhlbiBcIjpcIiwgYW5kIHRoZSB2YWx1ZS5cbiAgICAvL1xuICAgIH0gZWxzZSBpZiAoY29tcG9zZU5vZGUoc3RhdGUsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19PVVQsIGZhbHNlLCB0cnVlKSkge1xuXG4gICAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUpIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoID09PSAweDNBLyogOiAqLykge1xuICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2Egd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCk7XG4gICAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZXRlY3RlZCA9IHRydWU7XG4gICAgICAgICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlO1xuICAgICAgICAgIGFsbG93Q29tcGFjdCA9IGZhbHNlO1xuICAgICAgICAgIGtleVRhZyA9IHN0YXRlLnRhZztcbiAgICAgICAgICBrZXlOb2RlID0gc3RhdGUucmVzdWx0O1xuXG4gICAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQnKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICAgICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcmVzdWx0IG9mIGBjb21wb3NlTm9kZWAuXG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIGlmIChkZXRlY3RlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Jyk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBLZWVwIHRoZSByZXN1bHQgb2YgYGNvbXBvc2VOb2RlYC5cbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICBicmVhazsgLy8gUmVhZGluZyBpcyBkb25lLiBHbyB0byB0aGUgZXBpbG9ndWUuXG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBDb21tb24gcmVhZGluZyBjb2RlIGZvciBib3RoIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBub3RhdGlvbnMuXG4gICAgLy9cbiAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpIHtcbiAgICAgIGlmIChjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19PVVQsIHRydWUsIGFsbG93Q29tcGFjdCkpIHtcbiAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgICBrZXlOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlTm9kZSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSk7XG4gICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gbm9kZUluZGVudCAmJiAoY2ggIT09IDApKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeScpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IG5vZGVJbmRlbnQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vXG4gIC8vIEVwaWxvZ3VlLlxuICAvL1xuXG4gIC8vIFNwZWNpYWwgY2FzZTogbGFzdCBtYXBwaW5nJ3Mgbm9kZSBjb250YWlucyBvbmx5IHRoZSBrZXkgaW4gZXhwbGljaXQgbm90YXRpb24uXG4gIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwpO1xuICB9XG5cbiAgLy8gRXhwb3NlIHRoZSByZXN1bHRpbmcgbWFwcGluZy5cbiAgaWYgKGRldGVjdGVkKSB7XG4gICAgc3RhdGUudGFnID0gX3RhZztcbiAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgIHN0YXRlLmtpbmQgPSAnbWFwcGluZyc7XG4gICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBkZXRlY3RlZDtcbn1cblxuZnVuY3Rpb24gcmVhZFRhZ1Byb3BlcnR5KHN0YXRlKSB7XG4gIHZhciBfcG9zaXRpb24sXG4gICAgICBpc1ZlcmJhdGltID0gZmFsc2UsXG4gICAgICBpc05hbWVkICAgID0gZmFsc2UsXG4gICAgICB0YWdIYW5kbGUsXG4gICAgICB0YWdOYW1lLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggIT09IDB4MjEvKiAhICovKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eScpO1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCA9PT0gMHgzQy8qIDwgKi8pIHtcbiAgICBpc1ZlcmJhdGltID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgfSBlbHNlIGlmIChjaCA9PT0gMHgyMS8qICEgKi8pIHtcbiAgICBpc05hbWVkID0gdHJ1ZTtcbiAgICB0YWdIYW5kbGUgPSAnISEnO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICB9IGVsc2Uge1xuICAgIHRhZ0hhbmRsZSA9ICchJztcbiAgfVxuXG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIGlmIChpc1ZlcmJhdGltKSB7XG4gICAgZG8geyBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7IH1cbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgY2ggIT09IDB4M0UvKiA+ICovKTtcblxuICAgIGlmIChzdGF0ZS5wb3NpdGlvbiA8IHN0YXRlLmxlbmd0aCkge1xuICAgICAgdGFnTmFtZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSB2ZXJiYXRpbSB0YWcnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpKSB7XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyMS8qICEgKi8pIHtcbiAgICAgICAgaWYgKCFpc05hbWVkKSB7XG4gICAgICAgICAgdGFnSGFuZGxlID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uIC0gMSwgc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgICAgIGlmICghUEFUVEVSTl9UQUdfSEFORExFLnRlc3QodGFnSGFuZGxlKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ25hbWVkIHRhZyBoYW5kbGUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaXNOYW1lZCA9IHRydWU7XG4gICAgICAgICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb24gKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIHRhZ05hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUy50ZXN0KHRhZ05hbWUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBmbG93IGluZGljYXRvciBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRhZ05hbWUgJiYgIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHRhZ05hbWUpKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogJyArIHRhZ05hbWUpO1xuICB9XG5cbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBzdGF0ZS50YWcgPSB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAoX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUudGFnTWFwLCB0YWdIYW5kbGUpKSB7XG4gICAgc3RhdGUudGFnID0gc3RhdGUudGFnTWFwW3RhZ0hhbmRsZV0gKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAnIScpIHtcbiAgICBzdGF0ZS50YWcgPSAnIScgKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAnISEnKSB7XG4gICAgc3RhdGUudGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOicgKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSBcIicgKyB0YWdIYW5kbGUgKyAnXCInKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbixcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoICE9PSAweDI2LyogJiAqLykgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5Jyk7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlcicpO1xuICB9XG5cbiAgc3RhdGUuYW5jaG9yID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQWxpYXMoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbiwgYWxpYXMsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyQS8qICogKi8pIHJldHVybiBmYWxzZTtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyJyk7XG4gIH1cblxuICBhbGlhcyA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmICghc3RhdGUuYW5jaG9yTWFwLmhhc093blByb3BlcnR5KGFsaWFzKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmlkZW50aWZpZWQgYWxpYXMgXCInICsgYWxpYXMgKyAnXCInKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VsdCA9IHN0YXRlLmFuY2hvck1hcFthbGlhc107XG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbXBvc2VOb2RlKHN0YXRlLCBwYXJlbnRJbmRlbnQsIG5vZGVDb250ZXh0LCBhbGxvd1RvU2VlaywgYWxsb3dDb21wYWN0KSB7XG4gIHZhciBhbGxvd0Jsb2NrU3R5bGVzLFxuICAgICAgYWxsb3dCbG9ja1NjYWxhcnMsXG4gICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMsXG4gICAgICBpbmRlbnRTdGF0dXMgPSAxLCAvLyAxOiB0aGlzPnBhcmVudCwgMDogdGhpcz1wYXJlbnQsIC0xOiB0aGlzPHBhcmVudFxuICAgICAgYXROZXdMaW5lICA9IGZhbHNlLFxuICAgICAgaGFzQ29udGVudCA9IGZhbHNlLFxuICAgICAgdHlwZUluZGV4LFxuICAgICAgdHlwZVF1YW50aXR5LFxuICAgICAgdHlwZSxcbiAgICAgIGZsb3dJbmRlbnQsXG4gICAgICBibG9ja0luZGVudDtcblxuICBpZiAoc3RhdGUubGlzdGVuZXIgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5saXN0ZW5lcignb3BlbicsIHN0YXRlKTtcbiAgfVxuXG4gIHN0YXRlLnRhZyAgICA9IG51bGw7XG4gIHN0YXRlLmFuY2hvciA9IG51bGw7XG4gIHN0YXRlLmtpbmQgICA9IG51bGw7XG4gIHN0YXRlLnJlc3VsdCA9IG51bGw7XG5cbiAgYWxsb3dCbG9ja1N0eWxlcyA9IGFsbG93QmxvY2tTY2FsYXJzID0gYWxsb3dCbG9ja0NvbGxlY3Rpb25zID1cbiAgICBDT05URVhUX0JMT0NLX09VVCA9PT0gbm9kZUNvbnRleHQgfHxcbiAgICBDT05URVhUX0JMT0NLX0lOICA9PT0gbm9kZUNvbnRleHQ7XG5cbiAgaWYgKGFsbG93VG9TZWVrKSB7XG4gICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgYXROZXdMaW5lID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPiBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgaW5kZW50U3RhdHVzID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gcGFyZW50SW5kZW50KSB7XG4gICAgICAgIGluZGVudFN0YXR1cyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSkge1xuICAgIHdoaWxlIChyZWFkVGFnUHJvcGVydHkoc3RhdGUpIHx8IHJlYWRBbmNob3JQcm9wZXJ0eShzdGF0ZSkpIHtcbiAgICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSkpIHtcbiAgICAgICAgYXROZXdMaW5lID0gdHJ1ZTtcbiAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gYWxsb3dCbG9ja1N0eWxlcztcblxuICAgICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICAgIGluZGVudFN0YXR1cyA9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChhbGxvd0Jsb2NrQ29sbGVjdGlvbnMpIHtcbiAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhdE5ld0xpbmUgfHwgYWxsb3dDb21wYWN0O1xuICB9XG5cbiAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSB8fCBDT05URVhUX0JMT0NLX09VVCA9PT0gbm9kZUNvbnRleHQpIHtcbiAgICBpZiAoQ09OVEVYVF9GTE9XX0lOID09PSBub2RlQ29udGV4dCB8fCBDT05URVhUX0ZMT1dfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgICAgZmxvd0luZGVudCA9IHBhcmVudEluZGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxvd0luZGVudCA9IHBhcmVudEluZGVudCArIDE7XG4gICAgfVxuXG4gICAgYmxvY2tJbmRlbnQgPSBzdGF0ZS5wb3NpdGlvbiAtIHN0YXRlLmxpbmVTdGFydDtcblxuICAgIGlmIChpbmRlbnRTdGF0dXMgPT09IDEpIHtcbiAgICAgIGlmIChhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgJiZcbiAgICAgICAgICAocmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUsIGJsb2NrSW5kZW50KSB8fFxuICAgICAgICAgICByZWFkQmxvY2tNYXBwaW5nKHN0YXRlLCBibG9ja0luZGVudCwgZmxvd0luZGVudCkpIHx8XG4gICAgICAgICAgcmVhZEZsb3dDb2xsZWN0aW9uKHN0YXRlLCBmbG93SW5kZW50KSkge1xuICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgoYWxsb3dCbG9ja1NjYWxhcnMgJiYgcmVhZEJsb2NrU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50KSkgfHxcbiAgICAgICAgICAgIHJlYWRTaW5nbGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpIHx8XG4gICAgICAgICAgICByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50KSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVhZEFsaWFzKHN0YXRlKSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCB8fCBzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdhbGlhcyBub2RlIHNob3VsZCBub3QgaGF2ZSBhbnkgcHJvcGVydGllcycpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKHJlYWRQbGFpblNjYWxhcihzdGF0ZSwgZmxvd0luZGVudCwgQ09OVEVYVF9GTE9XX0lOID09PSBub2RlQ29udGV4dCkpIHtcbiAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChzdGF0ZS50YWcgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXRlLnRhZyA9ICc/JztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGluZGVudFN0YXR1cyA9PT0gMCkge1xuICAgICAgLy8gU3BlY2lhbCBjYXNlOiBibG9jayBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgdG8gaGF2ZSBzYW1lIGluZGVudGF0aW9uIGxldmVsIGFzIHRoZSBwYXJlbnQuXG4gICAgICAvLyBodHRwOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI3OTk3ODRcbiAgICAgIGhhc0NvbnRlbnQgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgJiYgcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUsIGJsb2NrSW5kZW50KTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gJyEnKSB7XG4gICAgaWYgKHN0YXRlLnRhZyA9PT0gJz8nKSB7XG4gICAgICBmb3IgKHR5cGVJbmRleCA9IDAsIHR5cGVRdWFudGl0eSA9IHN0YXRlLmltcGxpY2l0VHlwZXMubGVuZ3RoO1xuICAgICAgICAgICB0eXBlSW5kZXggPCB0eXBlUXVhbnRpdHk7XG4gICAgICAgICAgIHR5cGVJbmRleCArPSAxKSB7XG4gICAgICAgIHR5cGUgPSBzdGF0ZS5pbXBsaWNpdFR5cGVzW3R5cGVJbmRleF07XG5cbiAgICAgICAgLy8gSW1wbGljaXQgcmVzb2x2aW5nIGlzIG5vdCBhbGxvd2VkIGZvciBub24tc2NhbGFyIHR5cGVzLCBhbmQgJz8nXG4gICAgICAgIC8vIG5vbi1zcGVjaWZpYyB0YWcgaXMgb25seSBhc3NpZ25lZCB0byBwbGFpbiBzY2FsYXJzLiBTbywgaXQgaXNuJ3RcbiAgICAgICAgLy8gbmVlZGVkIHRvIGNoZWNrIGZvciAna2luZCcgY29uZm9ybWl0eS5cblxuICAgICAgICBpZiAodHlwZS5yZXNvbHZlKHN0YXRlLnJlc3VsdCkpIHsgLy8gYHN0YXRlLnJlc3VsdGAgdXBkYXRlZCBpbiByZXNvbHZlciBpZiBtYXRjaGVkXG4gICAgICAgICAgc3RhdGUucmVzdWx0ID0gdHlwZS5jb25zdHJ1Y3Qoc3RhdGUucmVzdWx0KTtcbiAgICAgICAgICBzdGF0ZS50YWcgPSB0eXBlLnRhZztcbiAgICAgICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLnR5cGVNYXAsIHN0YXRlLnRhZykpIHtcbiAgICAgIHR5cGUgPSBzdGF0ZS50eXBlTWFwW3N0YXRlLnRhZ107XG5cbiAgICAgIGlmIChzdGF0ZS5yZXN1bHQgIT09IG51bGwgJiYgdHlwZS5raW5kICE9PSBzdGF0ZS5raW5kKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPCcgKyBzdGF0ZS50YWcgKyAnPiB0YWc7IGl0IHNob3VsZCBiZSBcIicgKyB0eXBlLmtpbmQgKyAnXCIsIG5vdCBcIicgKyBzdGF0ZS5raW5kICsgJ1wiJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdHlwZS5yZXNvbHZlKHN0YXRlLnJlc3VsdCkpIHsgLy8gYHN0YXRlLnJlc3VsdGAgdXBkYXRlZCBpbiByZXNvbHZlciBpZiBtYXRjaGVkXG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdjYW5ub3QgcmVzb2x2ZSBhIG5vZGUgd2l0aCAhPCcgKyBzdGF0ZS50YWcgKyAnPiBleHBsaWNpdCB0YWcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCA9IHR5cGUuY29uc3RydWN0KHN0YXRlLnJlc3VsdCk7XG4gICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5rbm93biB0YWcgITwnICsgc3RhdGUudGFnICsgJz4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUubGlzdGVuZXIgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5saXN0ZW5lcignY2xvc2UnLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLnRhZyAhPT0gbnVsbCB8fCAgc3RhdGUuYW5jaG9yICE9PSBudWxsIHx8IGhhc0NvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHJlYWREb2N1bWVudChzdGF0ZSkge1xuICB2YXIgZG9jdW1lbnRTdGFydCA9IHN0YXRlLnBvc2l0aW9uLFxuICAgICAgX3Bvc2l0aW9uLFxuICAgICAgZGlyZWN0aXZlTmFtZSxcbiAgICAgIGRpcmVjdGl2ZUFyZ3MsXG4gICAgICBoYXNEaXJlY3RpdmVzID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBzdGF0ZS52ZXJzaW9uID0gbnVsbDtcbiAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gc3RhdGUubGVnYWN5O1xuICBzdGF0ZS50YWdNYXAgPSB7fTtcbiAgc3RhdGUuYW5jaG9yTWFwID0ge307XG5cbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IDAgfHwgY2ggIT09IDB4MjUvKiAlICovKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBkaXJlY3RpdmVOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gICAgZGlyZWN0aXZlQXJncyA9IFtdO1xuXG4gICAgaWYgKGRpcmVjdGl2ZU5hbWUubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2RpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCcpO1xuICAgIH1cblxuICAgIHdoaWxlIChjaCAhPT0gMCkge1xuICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyMy8qICMgKi8pIHtcbiAgICAgICAgZG8geyBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7IH1cbiAgICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19FT0woY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc19FT0woY2gpKSBicmVhaztcblxuICAgICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGRpcmVjdGl2ZUFyZ3MucHVzaChzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoICE9PSAwKSByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChkaXJlY3RpdmVIYW5kbGVycywgZGlyZWN0aXZlTmFtZSkpIHtcbiAgICAgIGRpcmVjdGl2ZUhhbmRsZXJzW2RpcmVjdGl2ZU5hbWVdKHN0YXRlLCBkaXJlY3RpdmVOYW1lLCBkaXJlY3RpdmVBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlLCAndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgXCInICsgZGlyZWN0aXZlTmFtZSArICdcIicpO1xuICAgIH1cbiAgfVxuXG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gMCAmJlxuICAgICAgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgICAgID09PSAweDJELyogLSAqLyAmJlxuICAgICAgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpID09PSAweDJELyogLSAqLyAmJlxuICAgICAgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDIpID09PSAweDJELyogLSAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uICs9IDM7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIH0gZWxzZSBpZiAoaGFzRGlyZWN0aXZlcykge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdkaXJlY3RpdmVzIGVuZCBtYXJrIGlzIGV4cGVjdGVkJyk7XG4gIH1cblxuICBjb21wb3NlTm9kZShzdGF0ZSwgc3RhdGUubGluZUluZGVudCAtIDEsIENPTlRFWFRfQkxPQ0tfT1VULCBmYWxzZSwgdHJ1ZSk7XG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICBpZiAoc3RhdGUuY2hlY2tMaW5lQnJlYWtzICYmXG4gICAgICBQQVRURVJOX05PTl9BU0NJSV9MSU5FX0JSRUFLUy50ZXN0KHN0YXRlLmlucHV0LnNsaWNlKGRvY3VtZW50U3RhcnQsIHN0YXRlLnBvc2l0aW9uKSkpIHtcbiAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICdub24tQVNDSUkgbGluZSBicmVha3MgYXJlIGludGVycHJldGVkIGFzIGNvbnRlbnQnKTtcbiAgfVxuXG4gIHN0YXRlLmRvY3VtZW50cy5wdXNoKHN0YXRlLnJlc3VsdCk7XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkge1xuXG4gICAgaWYgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSAweDJFLyogLiAqLykge1xuICAgICAgc3RhdGUucG9zaXRpb24gKz0gMztcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uIDwgKHN0YXRlLmxlbmd0aCAtIDEpKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2VuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkJyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuO1xuICB9XG59XG5cblxuZnVuY3Rpb24gbG9hZERvY3VtZW50cyhpbnB1dCwgb3B0aW9ucykge1xuICBpbnB1dCA9IFN0cmluZyhpbnB1dCk7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGlmIChpbnB1dC5sZW5ndGggIT09IDApIHtcblxuICAgIC8vIEFkZCB0YWlsaW5nIGBcXG5gIGlmIG5vdCBleGlzdHNcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMHgwQS8qIExGICovICYmXG4gICAgICAgIGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkgIT09IDB4MEQvKiBDUiAqLykge1xuICAgICAgaW5wdXQgKz0gJ1xcbic7XG4gICAgfVxuXG4gICAgLy8gU3RyaXAgQk9NXG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgxKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUoaW5wdXQsIG9wdGlvbnMpO1xuXG4gIC8vIFVzZSAwIGFzIHN0cmluZyB0ZXJtaW5hdG9yLiBUaGF0IHNpZ25pZmljYW50bHkgc2ltcGxpZmllcyBib3VuZHMgY2hlY2suXG4gIHN0YXRlLmlucHV0ICs9ICdcXDAnO1xuXG4gIHdoaWxlIChzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSA9PT0gMHgyMC8qIFNwYWNlICovKSB7XG4gICAgc3RhdGUubGluZUluZGVudCArPSAxO1xuICAgIHN0YXRlLnBvc2l0aW9uICs9IDE7XG4gIH1cblxuICB3aGlsZSAoc3RhdGUucG9zaXRpb24gPCAoc3RhdGUubGVuZ3RoIC0gMSkpIHtcbiAgICByZWFkRG9jdW1lbnQoc3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlLmRvY3VtZW50cztcbn1cblxuXG5mdW5jdGlvbiBsb2FkQWxsKGlucHV0LCBpdGVyYXRvciwgb3B0aW9ucykge1xuICB2YXIgZG9jdW1lbnRzID0gbG9hZERvY3VtZW50cyhpbnB1dCwgb3B0aW9ucyksIGluZGV4LCBsZW5ndGg7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGRvY3VtZW50cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgaXRlcmF0b3IoZG9jdW1lbnRzW2luZGV4XSk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBsb2FkKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTtcblxuICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8qZXNsaW50LWRpc2FibGUgbm8tdW5kZWZpbmVkKi9cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2UgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRzWzBdO1xuICB9XG4gIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtLCBidXQgZm91bmQgbW9yZScpO1xufVxuXG5cbmZ1bmN0aW9uIHNhZmVMb2FkQWxsKGlucHV0LCBvdXRwdXQsIG9wdGlvbnMpIHtcbiAgbG9hZEFsbChpbnB1dCwgb3V0cHV0LCBjb21tb24uZXh0ZW5kKHsgc2NoZW1hOiBERUZBVUxUX1NBRkVfU0NIRU1BIH0sIG9wdGlvbnMpKTtcbn1cblxuXG5mdW5jdGlvbiBzYWZlTG9hZChpbnB1dCwgb3B0aW9ucykge1xuICByZXR1cm4gbG9hZChpbnB1dCwgY29tbW9uLmV4dGVuZCh7IHNjaGVtYTogREVGQVVMVF9TQUZFX1NDSEVNQSB9LCBvcHRpb25zKSk7XG59XG5cblxubW9kdWxlLmV4cG9ydHMubG9hZEFsbCAgICAgPSBsb2FkQWxsO1xubW9kdWxlLmV4cG9ydHMubG9hZCAgICAgICAgPSBsb2FkO1xubW9kdWxlLmV4cG9ydHMuc2FmZUxvYWRBbGwgPSBzYWZlTG9hZEFsbDtcbm1vZHVsZS5leHBvcnRzLnNhZmVMb2FkICAgID0gc2FmZUxvYWQ7XG4iLCIndXNlIHN0cmljdCc7XG5cblxudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG5cblxuZnVuY3Rpb24gTWFyayhuYW1lLCBidWZmZXIsIHBvc2l0aW9uLCBsaW5lLCBjb2x1bW4pIHtcbiAgdGhpcy5uYW1lICAgICA9IG5hbWU7XG4gIHRoaXMuYnVmZmVyICAgPSBidWZmZXI7XG4gIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgdGhpcy5saW5lICAgICA9IGxpbmU7XG4gIHRoaXMuY29sdW1uICAgPSBjb2x1bW47XG59XG5cblxuTWFyay5wcm90b3R5cGUuZ2V0U25pcHBldCA9IGZ1bmN0aW9uIGdldFNuaXBwZXQoaW5kZW50LCBtYXhMZW5ndGgpIHtcbiAgdmFyIGhlYWQsIHN0YXJ0LCB0YWlsLCBlbmQsIHNuaXBwZXQ7XG5cbiAgaWYgKCF0aGlzLmJ1ZmZlcikgcmV0dXJuIG51bGw7XG5cbiAgaW5kZW50ID0gaW5kZW50IHx8IDQ7XG4gIG1heExlbmd0aCA9IG1heExlbmd0aCB8fCA3NTtcblxuICBoZWFkID0gJyc7XG4gIHN0YXJ0ID0gdGhpcy5wb3NpdGlvbjtcblxuICB3aGlsZSAoc3RhcnQgPiAwICYmICdcXHgwMFxcclxcblxceDg1XFx1MjAyOFxcdTIwMjknLmluZGV4T2YodGhpcy5idWZmZXIuY2hhckF0KHN0YXJ0IC0gMSkpID09PSAtMSkge1xuICAgIHN0YXJ0IC09IDE7XG4gICAgaWYgKHRoaXMucG9zaXRpb24gLSBzdGFydCA+IChtYXhMZW5ndGggLyAyIC0gMSkpIHtcbiAgICAgIGhlYWQgPSAnIC4uLiAnO1xuICAgICAgc3RhcnQgKz0gNTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHRhaWwgPSAnJztcbiAgZW5kID0gdGhpcy5wb3NpdGlvbjtcblxuICB3aGlsZSAoZW5kIDwgdGhpcy5idWZmZXIubGVuZ3RoICYmICdcXHgwMFxcclxcblxceDg1XFx1MjAyOFxcdTIwMjknLmluZGV4T2YodGhpcy5idWZmZXIuY2hhckF0KGVuZCkpID09PSAtMSkge1xuICAgIGVuZCArPSAxO1xuICAgIGlmIChlbmQgLSB0aGlzLnBvc2l0aW9uID4gKG1heExlbmd0aCAvIDIgLSAxKSkge1xuICAgICAgdGFpbCA9ICcgLi4uICc7XG4gICAgICBlbmQgLT0gNTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNuaXBwZXQgPSB0aGlzLmJ1ZmZlci5zbGljZShzdGFydCwgZW5kKTtcblxuICByZXR1cm4gY29tbW9uLnJlcGVhdCgnICcsIGluZGVudCkgKyBoZWFkICsgc25pcHBldCArIHRhaWwgKyAnXFxuJyArXG4gICAgICAgICBjb21tb24ucmVwZWF0KCcgJywgaW5kZW50ICsgdGhpcy5wb3NpdGlvbiAtIHN0YXJ0ICsgaGVhZC5sZW5ndGgpICsgJ14nO1xufTtcblxuXG5NYXJrLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGNvbXBhY3QpIHtcbiAgdmFyIHNuaXBwZXQsIHdoZXJlID0gJyc7XG5cbiAgaWYgKHRoaXMubmFtZSkge1xuICAgIHdoZXJlICs9ICdpbiBcIicgKyB0aGlzLm5hbWUgKyAnXCIgJztcbiAgfVxuXG4gIHdoZXJlICs9ICdhdCBsaW5lICcgKyAodGhpcy5saW5lICsgMSkgKyAnLCBjb2x1bW4gJyArICh0aGlzLmNvbHVtbiArIDEpO1xuXG4gIGlmICghY29tcGFjdCkge1xuICAgIHNuaXBwZXQgPSB0aGlzLmdldFNuaXBwZXQoKTtcblxuICAgIGlmIChzbmlwcGV0KSB7XG4gICAgICB3aGVyZSArPSAnOlxcbicgKyBzbmlwcGV0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3aGVyZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBNYXJrO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKmVzbGludC1kaXNhYmxlIG1heC1sZW4qL1xuXG52YXIgY29tbW9uICAgICAgICA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG52YXIgVHlwZSAgICAgICAgICA9IHJlcXVpcmUoJy4vdHlwZScpO1xuXG5cbmZ1bmN0aW9uIGNvbXBpbGVMaXN0KHNjaGVtYSwgbmFtZSwgcmVzdWx0KSB7XG4gIHZhciBleGNsdWRlID0gW107XG5cbiAgc2NoZW1hLmluY2x1ZGUuZm9yRWFjaChmdW5jdGlvbiAoaW5jbHVkZWRTY2hlbWEpIHtcbiAgICByZXN1bHQgPSBjb21waWxlTGlzdChpbmNsdWRlZFNjaGVtYSwgbmFtZSwgcmVzdWx0KTtcbiAgfSk7XG5cbiAgc2NoZW1hW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRUeXBlKSB7XG4gICAgcmVzdWx0LmZvckVhY2goZnVuY3Rpb24gKHByZXZpb3VzVHlwZSwgcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKHByZXZpb3VzVHlwZS50YWcgPT09IGN1cnJlbnRUeXBlLnRhZykge1xuICAgICAgICBleGNsdWRlLnB1c2gocHJldmlvdXNJbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXN1bHQucHVzaChjdXJyZW50VHlwZSk7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQuZmlsdGVyKGZ1bmN0aW9uICh0eXBlLCBpbmRleCkge1xuICAgIHJldHVybiBleGNsdWRlLmluZGV4T2YoaW5kZXgpID09PSAtMTtcbiAgfSk7XG59XG5cblxuZnVuY3Rpb24gY29tcGlsZU1hcCgvKiBsaXN0cy4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge30sIGluZGV4LCBsZW5ndGg7XG5cbiAgZnVuY3Rpb24gY29sbGVjdFR5cGUodHlwZSkge1xuICAgIHJlc3VsdFt0eXBlLnRhZ10gPSB0eXBlO1xuICB9XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgYXJndW1lbnRzW2luZGV4XS5mb3JFYWNoKGNvbGxlY3RUeXBlKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuZnVuY3Rpb24gU2NoZW1hKGRlZmluaXRpb24pIHtcbiAgdGhpcy5pbmNsdWRlICA9IGRlZmluaXRpb24uaW5jbHVkZSAgfHwgW107XG4gIHRoaXMuaW1wbGljaXQgPSBkZWZpbml0aW9uLmltcGxpY2l0IHx8IFtdO1xuICB0aGlzLmV4cGxpY2l0ID0gZGVmaW5pdGlvbi5leHBsaWNpdCB8fCBbXTtcblxuICB0aGlzLmltcGxpY2l0LmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZS5sb2FkS2luZCAmJiB0eXBlLmxvYWRLaW5kICE9PSAnc2NhbGFyJykge1xuICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1RoZXJlIGlzIGEgbm9uLXNjYWxhciB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBJbXBsaWNpdCByZXNvbHZpbmcgb2Ygc3VjaCB0eXBlcyBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICAgIH1cbiAgfSk7XG5cbiAgdGhpcy5jb21waWxlZEltcGxpY2l0ID0gY29tcGlsZUxpc3QodGhpcywgJ2ltcGxpY2l0JywgW10pO1xuICB0aGlzLmNvbXBpbGVkRXhwbGljaXQgPSBjb21waWxlTGlzdCh0aGlzLCAnZXhwbGljaXQnLCBbXSk7XG4gIHRoaXMuY29tcGlsZWRUeXBlTWFwICA9IGNvbXBpbGVNYXAodGhpcy5jb21waWxlZEltcGxpY2l0LCB0aGlzLmNvbXBpbGVkRXhwbGljaXQpO1xufVxuXG5cblNjaGVtYS5ERUZBVUxUID0gbnVsbDtcblxuXG5TY2hlbWEuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlU2NoZW1hKCkge1xuICB2YXIgc2NoZW1hcywgdHlwZXM7XG5cbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgc2NoZW1hcyA9IFNjaGVtYS5ERUZBVUxUO1xuICAgICAgdHlwZXMgPSBhcmd1bWVudHNbMF07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMjpcbiAgICAgIHNjaGVtYXMgPSBhcmd1bWVudHNbMF07XG4gICAgICB0eXBlcyA9IGFyZ3VtZW50c1sxXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBTY2hlbWEuY3JlYXRlIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBzY2hlbWFzID0gY29tbW9uLnRvQXJyYXkoc2NoZW1hcyk7XG4gIHR5cGVzID0gY29tbW9uLnRvQXJyYXkodHlwZXMpO1xuXG4gIGlmICghc2NoZW1hcy5ldmVyeShmdW5jdGlvbiAoc2NoZW1hKSB7IHJldHVybiBzY2hlbWEgaW5zdGFuY2VvZiBTY2hlbWE7IH0pKSB7XG4gICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1NwZWNpZmllZCBsaXN0IG9mIHN1cGVyIHNjaGVtYXMgKG9yIGEgc2luZ2xlIFNjaGVtYSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVNjaGVtYSBvYmplY3QuJyk7XG4gIH1cblxuICBpZiAoIXR5cGVzLmV2ZXJ5KGZ1bmN0aW9uICh0eXBlKSB7IHJldHVybiB0eXBlIGluc3RhbmNlb2YgVHlwZTsgfSkpIHtcbiAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LicpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTY2hlbWEoe1xuICAgIGluY2x1ZGU6IHNjaGVtYXMsXG4gICAgZXhwbGljaXQ6IHR5cGVzXG4gIH0pO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFNjaGVtYTtcbiIsIi8vIFN0YW5kYXJkIFlBTUwncyBDb3JlIHNjaGVtYS5cbi8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwNDkyM1xuLy9cbi8vIE5PVEU6IEpTLVlBTUwgZG9lcyBub3Qgc3VwcG9ydCBzY2hlbWEtc3BlY2lmaWMgdGFnIHJlc29sdXRpb24gcmVzdHJpY3Rpb25zLlxuLy8gU28sIENvcmUgc2NoZW1hIGhhcyBubyBkaXN0aW5jdGlvbnMgZnJvbSBKU09OIHNjaGVtYSBpcyBKUy1ZQU1MLlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hKHtcbiAgaW5jbHVkZTogW1xuICAgIHJlcXVpcmUoJy4vanNvbicpXG4gIF1cbn0pO1xuIiwiLy8gSlMtWUFNTCdzIGRlZmF1bHQgc2NoZW1hIGZvciBgbG9hZGAgZnVuY3Rpb24uXG4vLyBJdCBpcyBub3QgZGVzY3JpYmVkIGluIHRoZSBZQU1MIHNwZWNpZmljYXRpb24uXG4vL1xuLy8gVGhpcyBzY2hlbWEgaXMgYmFzZWQgb24gSlMtWUFNTCdzIGRlZmF1bHQgc2FmZSBzY2hlbWEgYW5kIGluY2x1ZGVzXG4vLyBKYXZhU2NyaXB0LXNwZWNpZmljIHR5cGVzOiAhIWpzL3VuZGVmaW5lZCwgISFqcy9yZWdleHAgYW5kICEhanMvZnVuY3Rpb24uXG4vL1xuLy8gQWxzbyB0aGlzIHNjaGVtYSBpcyB1c2VkIGFzIGRlZmF1bHQgYmFzZSBzY2hlbWEgYXQgYFNjaGVtYS5jcmVhdGVgIGZ1bmN0aW9uLlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBTY2hlbWEuREVGQVVMVCA9IG5ldyBTY2hlbWEoe1xuICBpbmNsdWRlOiBbXG4gICAgcmVxdWlyZSgnLi9kZWZhdWx0X3NhZmUnKVxuICBdLFxuICBleHBsaWNpdDogW1xuICAgIHJlcXVpcmUoJy4uL3R5cGUvanMvdW5kZWZpbmVkJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9qcy9yZWdleHAnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2pzL2Z1bmN0aW9uJylcbiAgXVxufSk7XG4iLCIvLyBKUy1ZQU1MJ3MgZGVmYXVsdCBzY2hlbWEgZm9yIGBzYWZlTG9hZGAgZnVuY3Rpb24uXG4vLyBJdCBpcyBub3QgZGVzY3JpYmVkIGluIHRoZSBZQU1MIHNwZWNpZmljYXRpb24uXG4vL1xuLy8gVGhpcyBzY2hlbWEgaXMgYmFzZWQgb24gc3RhbmRhcmQgWUFNTCdzIENvcmUgc2NoZW1hIGFuZCBpbmNsdWRlcyBtb3N0IG9mXG4vLyBleHRyYSB0eXBlcyBkZXNjcmliZWQgYXQgWUFNTCB0YWcgcmVwb3NpdG9yeS4gKGh0dHA6Ly95YW1sLm9yZy90eXBlLylcblxuXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIFNjaGVtYSA9IHJlcXVpcmUoJy4uL3NjaGVtYScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYSh7XG4gIGluY2x1ZGU6IFtcbiAgICByZXF1aXJlKCcuL2NvcmUnKVxuICBdLFxuICBpbXBsaWNpdDogW1xuICAgIHJlcXVpcmUoJy4uL3R5cGUvdGltZXN0YW1wJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9tZXJnZScpXG4gIF0sXG4gIGV4cGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9iaW5hcnknKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL29tYXAnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL3BhaXJzJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9zZXQnKVxuICBdXG59KTtcbiIsIi8vIFN0YW5kYXJkIFlBTUwncyBGYWlsc2FmZSBzY2hlbWEuXG4vLyBodHRwOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDIzNDZcblxuXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIFNjaGVtYSA9IHJlcXVpcmUoJy4uL3NjaGVtYScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYSh7XG4gIGV4cGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9zdHInKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL3NlcScpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvbWFwJylcbiAgXVxufSk7XG4iLCIvLyBTdGFuZGFyZCBZQU1MJ3MgSlNPTiBzY2hlbWEuXG4vLyBodHRwOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDMyMzFcbi8vXG4vLyBOT1RFOiBKUy1ZQU1MIGRvZXMgbm90IHN1cHBvcnQgc2NoZW1hLXNwZWNpZmljIHRhZyByZXNvbHV0aW9uIHJlc3RyaWN0aW9ucy5cbi8vIFNvLCB0aGlzIHNjaGVtYSBpcyBub3Qgc3VjaCBzdHJpY3QgYXMgZGVmaW5lZCBpbiB0aGUgWUFNTCBzcGVjaWZpY2F0aW9uLlxuLy8gSXQgYWxsb3dzIG51bWJlcnMgaW4gYmluYXJ5IG5vdGFpb24sIHVzZSBgTnVsbGAgYW5kIGBOVUxMYCBhcyBgbnVsbGAsIGV0Yy5cblxuXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIFNjaGVtYSA9IHJlcXVpcmUoJy4uL3NjaGVtYScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYSh7XG4gIGluY2x1ZGU6IFtcbiAgICByZXF1aXJlKCcuL2ZhaWxzYWZlJylcbiAgXSxcbiAgaW1wbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL251bGwnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2Jvb2wnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2ludCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvZmxvYXQnKVxuICBdXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFlBTUxFeGNlcHRpb24gPSByZXF1aXJlKCcuL2V4Y2VwdGlvbicpO1xuXG52YXIgVFlQRV9DT05TVFJVQ1RPUl9PUFRJT05TID0gW1xuICAna2luZCcsXG4gICdyZXNvbHZlJyxcbiAgJ2NvbnN0cnVjdCcsXG4gICdpbnN0YW5jZU9mJyxcbiAgJ3ByZWRpY2F0ZScsXG4gICdyZXByZXNlbnQnLFxuICAnZGVmYXVsdFN0eWxlJyxcbiAgJ3N0eWxlQWxpYXNlcydcbl07XG5cbnZhciBZQU1MX05PREVfS0lORFMgPSBbXG4gICdzY2FsYXInLFxuICAnc2VxdWVuY2UnLFxuICAnbWFwcGluZydcbl07XG5cbmZ1bmN0aW9uIGNvbXBpbGVTdHlsZUFsaWFzZXMobWFwKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBpZiAobWFwICE9PSBudWxsKSB7XG4gICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xuICAgICAgbWFwW3N0eWxlXS5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhcykge1xuICAgICAgICByZXN1bHRbU3RyaW5nKGFsaWFzKV0gPSBzdHlsZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gVHlwZSh0YWcsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmIChUWVBFX0NPTlNUUlVDVE9SX09QVElPTlMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdVbmtub3duIG9wdGlvbiBcIicgKyBuYW1lICsgJ1wiIGlzIG1ldCBpbiBkZWZpbml0aW9uIG9mIFwiJyArIHRhZyArICdcIiBZQU1MIHR5cGUuJyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBUT0RPOiBBZGQgdGFnIGZvcm1hdCBjaGVjay5cbiAgdGhpcy50YWcgICAgICAgICAgPSB0YWc7XG4gIHRoaXMua2luZCAgICAgICAgID0gb3B0aW9uc1sna2luZCddICAgICAgICAgfHwgbnVsbDtcbiAgdGhpcy5yZXNvbHZlICAgICAgPSBvcHRpb25zWydyZXNvbHZlJ10gICAgICB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xuICB0aGlzLmNvbnN0cnVjdCAgICA9IG9wdGlvbnNbJ2NvbnN0cnVjdCddICAgIHx8IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhOyB9O1xuICB0aGlzLmluc3RhbmNlT2YgICA9IG9wdGlvbnNbJ2luc3RhbmNlT2YnXSAgIHx8IG51bGw7XG4gIHRoaXMucHJlZGljYXRlICAgID0gb3B0aW9uc1sncHJlZGljYXRlJ10gICAgfHwgbnVsbDtcbiAgdGhpcy5yZXByZXNlbnQgICAgPSBvcHRpb25zWydyZXByZXNlbnQnXSAgICB8fCBudWxsO1xuICB0aGlzLmRlZmF1bHRTdHlsZSA9IG9wdGlvbnNbJ2RlZmF1bHRTdHlsZSddIHx8IG51bGw7XG4gIHRoaXMuc3R5bGVBbGlhc2VzID0gY29tcGlsZVN0eWxlQWxpYXNlcyhvcHRpb25zWydzdHlsZUFsaWFzZXMnXSB8fCBudWxsKTtcblxuICBpZiAoWUFNTF9OT0RFX0tJTkRTLmluZGV4T2YodGhpcy5raW5kKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignVW5rbm93biBraW5kIFwiJyArIHRoaXMua2luZCArICdcIiBpcyBzcGVjaWZpZWQgZm9yIFwiJyArIHRhZyArICdcIiBZQU1MIHR5cGUuJyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUeXBlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKmVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UqL1xuXG4vLyBBIHRyaWNrIGZvciBicm93c2VyaWZpZWQgdmVyc2lvbi5cbi8vIFNpbmNlIHdlIG1ha2UgYnJvd3NlcmlmaWVyIHRvIGlnbm9yZSBgYnVmZmVyYCBtb2R1bGUsIE5vZGVCdWZmZXIgd2lsbCBiZSB1bmRlZmluZWRcbnZhciBOb2RlQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xudmFyIFR5cGUgICAgICAgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cblxuLy8gWyA2NCwgNjUsIDY2IF0gLT4gWyBwYWRkaW5nLCBDUiwgTEYgXVxudmFyIEJBU0U2NF9NQVAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cXG5cXHInO1xuXG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sQmluYXJ5KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB2YXIgY29kZSwgaWR4LCBiaXRsZW4gPSAwLCBtYXggPSBkYXRhLmxlbmd0aCwgbWFwID0gQkFTRTY0X01BUDtcblxuICAvLyBDb252ZXJ0IG9uZSBieSBvbmUuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGNvZGUgPSBtYXAuaW5kZXhPZihkYXRhLmNoYXJBdChpZHgpKTtcblxuICAgIC8vIFNraXAgQ1IvTEZcbiAgICBpZiAoY29kZSA+IDY0KSBjb250aW51ZTtcblxuICAgIC8vIEZhaWwgb24gaWxsZWdhbCBjaGFyYWN0ZXJzXG4gICAgaWYgKGNvZGUgPCAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICBiaXRsZW4gKz0gNjtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgYml0cyBsZWZ0LCBzb3VyY2Ugd2FzIGNvcnJ1cHRlZFxuICByZXR1cm4gKGJpdGxlbiAlIDgpID09PSAwO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQmluYXJ5KGRhdGEpIHtcbiAgdmFyIGlkeCwgdGFpbGJpdHMsXG4gICAgICBpbnB1dCA9IGRhdGEucmVwbGFjZSgvW1xcclxcbj1dL2csICcnKSwgLy8gcmVtb3ZlIENSL0xGICYgcGFkZGluZyB0byBzaW1wbGlmeSBzY2FuXG4gICAgICBtYXggPSBpbnB1dC5sZW5ndGgsXG4gICAgICBtYXAgPSBCQVNFNjRfTUFQLFxuICAgICAgYml0cyA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICAvLyBDb2xsZWN0IGJ5IDYqNCBiaXRzICgzIGJ5dGVzKVxuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGlmICgoaWR4ICUgNCA9PT0gMCkgJiYgaWR4KSB7XG4gICAgICByZXN1bHQucHVzaCgoYml0cyA+PiAxNikgJiAweEZGKTtcbiAgICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDgpICYgMHhGRik7XG4gICAgICByZXN1bHQucHVzaChiaXRzICYgMHhGRik7XG4gICAgfVxuXG4gICAgYml0cyA9IChiaXRzIDw8IDYpIHwgbWFwLmluZGV4T2YoaW5wdXQuY2hhckF0KGlkeCkpO1xuICB9XG5cbiAgLy8gRHVtcCB0YWlsXG5cbiAgdGFpbGJpdHMgPSAobWF4ICUgNCkgKiA2O1xuXG4gIGlmICh0YWlsYml0cyA9PT0gMCkge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDE2KSAmIDB4RkYpO1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDgpICYgMHhGRik7XG4gICAgcmVzdWx0LnB1c2goYml0cyAmIDB4RkYpO1xuICB9IGVsc2UgaWYgKHRhaWxiaXRzID09PSAxOCkge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDEwKSAmIDB4RkYpO1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDIpICYgMHhGRik7XG4gIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDEyKSB7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gNCkgJiAweEZGKTtcbiAgfVxuXG4gIC8vIFdyYXAgaW50byBCdWZmZXIgZm9yIE5vZGVKUyBhbmQgbGVhdmUgQXJyYXkgZm9yIGJyb3dzZXJcbiAgaWYgKE5vZGVCdWZmZXIpIHJldHVybiBuZXcgTm9kZUJ1ZmZlcihyZXN1bHQpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxCaW5hcnkob2JqZWN0IC8qLCBzdHlsZSovKSB7XG4gIHZhciByZXN1bHQgPSAnJywgYml0cyA9IDAsIGlkeCwgdGFpbCxcbiAgICAgIG1heCA9IG9iamVjdC5sZW5ndGgsXG4gICAgICBtYXAgPSBCQVNFNjRfTUFQO1xuXG4gIC8vIENvbnZlcnQgZXZlcnkgdGhyZWUgYnl0ZXMgdG8gNCBBU0NJSSBjaGFyYWN0ZXJzLlxuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGlmICgoaWR4ICUgMyA9PT0gMCkgJiYgaWR4KSB7XG4gICAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDE4KSAmIDB4M0ZdO1xuICAgICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxMikgJiAweDNGXTtcbiAgICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gNikgJiAweDNGXTtcbiAgICAgIHJlc3VsdCArPSBtYXBbYml0cyAmIDB4M0ZdO1xuICAgIH1cblxuICAgIGJpdHMgPSAoYml0cyA8PCA4KSArIG9iamVjdFtpZHhdO1xuICB9XG5cbiAgLy8gRHVtcCB0YWlsXG5cbiAgdGFpbCA9IG1heCAlIDM7XG5cbiAgaWYgKHRhaWwgPT09IDApIHtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDE4KSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTIpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiA2KSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbYml0cyAmIDB4M0ZdO1xuICB9IGVsc2UgaWYgKHRhaWwgPT09IDIpIHtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDEwKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gNCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzIDw8IDIpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFs2NF07XG4gIH0gZWxzZSBpZiAodGFpbCA9PT0gMSkge1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMikgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzIDw8IDQpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFs2NF07XG4gICAgcmVzdWx0ICs9IG1hcFs2NF07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc0JpbmFyeShvYmplY3QpIHtcbiAgcmV0dXJuIE5vZGVCdWZmZXIgJiYgTm9kZUJ1ZmZlci5pc0J1ZmZlcihvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnknLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJpbmFyeSxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQmluYXJ5LFxuICBwcmVkaWNhdGU6IGlzQmluYXJ5LFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxCaW5hcnlcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxCb29sZWFuKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGg7XG5cbiAgcmV0dXJuIChtYXggPT09IDQgJiYgKGRhdGEgPT09ICd0cnVlJyB8fCBkYXRhID09PSAnVHJ1ZScgfHwgZGF0YSA9PT0gJ1RSVUUnKSkgfHxcbiAgICAgICAgIChtYXggPT09IDUgJiYgKGRhdGEgPT09ICdmYWxzZScgfHwgZGF0YSA9PT0gJ0ZhbHNlJyB8fCBkYXRhID09PSAnRkFMU0UnKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxCb29sZWFuKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgPT09ICd0cnVlJyB8fFxuICAgICAgICAgZGF0YSA9PT0gJ1RydWUnIHx8XG4gICAgICAgICBkYXRhID09PSAnVFJVRSc7XG59XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBCb29sZWFuXSc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmJvb2wnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJvb2xlYW4sXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJvb2xlYW4sXG4gIHByZWRpY2F0ZTogaXNCb29sZWFuLFxuICByZXByZXNlbnQ6IHtcbiAgICBsb3dlcmNhc2U6IGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuIG9iamVjdCA/ICd0cnVlJyA6ICdmYWxzZSc7IH0sXG4gICAgdXBwZXJjYXNlOiBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiBvYmplY3QgPyAnVFJVRScgOiAnRkFMU0UnOyB9LFxuICAgIGNhbWVsY2FzZTogZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gb2JqZWN0ID8gJ1RydWUnIDogJ0ZhbHNlJzsgfVxuICB9LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIFR5cGUgICA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxudmFyIFlBTUxfRkxPQVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXG4gICdeKD86Wy0rXT8oPzpbMC05XVswLTlfXSopXFxcXC5bMC05X10qKD86W2VFXVstK11bMC05XSspPycgK1xuICAnfFxcXFwuWzAtOV9dKyg/OltlRV1bLStdWzAtOV0rKT8nICtcbiAgJ3xbLStdP1swLTldWzAtOV9dKig/OjpbMC01XT9bMC05XSkrXFxcXC5bMC05X10qJyArXG4gICd8Wy0rXT9cXFxcLig/OmluZnxJbmZ8SU5GKScgK1xuICAnfFxcXFwuKD86bmFufE5hTnxOQU4pKSQnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxGbG9hdChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKCFZQU1MX0ZMT0FUX1BBVFRFUk4udGVzdChkYXRhKSkgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sRmxvYXQoZGF0YSkge1xuICB2YXIgdmFsdWUsIHNpZ24sIGJhc2UsIGRpZ2l0cztcblxuICB2YWx1ZSAgPSBkYXRhLnJlcGxhY2UoL18vZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIHNpZ24gICA9IHZhbHVlWzBdID09PSAnLScgPyAtMSA6IDE7XG4gIGRpZ2l0cyA9IFtdO1xuXG4gIGlmICgnKy0nLmluZGV4T2YodmFsdWVbMF0pID49IDApIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSAnLmluZicpIHtcbiAgICByZXR1cm4gKHNpZ24gPT09IDEpID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXG4gIH0gZWxzZSBpZiAodmFsdWUgPT09ICcubmFuJykge1xuICAgIHJldHVybiBOYU47XG5cbiAgfSBlbHNlIGlmICh2YWx1ZS5pbmRleE9mKCc6JykgPj0gMCkge1xuICAgIHZhbHVlLnNwbGl0KCc6JykuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgZGlnaXRzLnVuc2hpZnQocGFyc2VGbG9hdCh2LCAxMCkpO1xuICAgIH0pO1xuXG4gICAgdmFsdWUgPSAwLjA7XG4gICAgYmFzZSA9IDE7XG5cbiAgICBkaWdpdHMuZm9yRWFjaChmdW5jdGlvbiAoZCkge1xuICAgICAgdmFsdWUgKz0gZCAqIGJhc2U7XG4gICAgICBiYXNlICo9IDYwO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ24gKiB2YWx1ZTtcblxuICB9XG4gIHJldHVybiBzaWduICogcGFyc2VGbG9hdCh2YWx1ZSwgMTApO1xufVxuXG5cbnZhciBTQ0lFTlRJRklDX1dJVEhPVVRfRE9UID0gL15bLStdP1swLTldK2UvO1xuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sRmxvYXQob2JqZWN0LCBzdHlsZSkge1xuICB2YXIgcmVzO1xuXG4gIGlmIChpc05hTihvYmplY3QpKSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSAnbG93ZXJjYXNlJzogcmV0dXJuICcubmFuJztcbiAgICAgIGNhc2UgJ3VwcGVyY2FzZSc6IHJldHVybiAnLk5BTic7XG4gICAgICBjYXNlICdjYW1lbGNhc2UnOiByZXR1cm4gJy5OYU4nO1xuICAgIH1cbiAgfSBlbHNlIGlmIChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgJ2xvd2VyY2FzZSc6IHJldHVybiAnLmluZic7XG4gICAgICBjYXNlICd1cHBlcmNhc2UnOiByZXR1cm4gJy5JTkYnO1xuICAgICAgY2FzZSAnY2FtZWxjYXNlJzogcmV0dXJuICcuSW5mJztcbiAgICB9XG4gIH0gZWxzZSBpZiAoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID09PSBvYmplY3QpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlICdsb3dlcmNhc2UnOiByZXR1cm4gJy0uaW5mJztcbiAgICAgIGNhc2UgJ3VwcGVyY2FzZSc6IHJldHVybiAnLS5JTkYnO1xuICAgICAgY2FzZSAnY2FtZWxjYXNlJzogcmV0dXJuICctLkluZic7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKSB7XG4gICAgcmV0dXJuICctMC4wJztcbiAgfVxuXG4gIHJlcyA9IG9iamVjdC50b1N0cmluZygxMCk7XG5cbiAgLy8gSlMgc3RyaW5naWZpZXIgY2FuIGJ1aWxkIHNjaWVudGlmaWMgZm9ybWF0IHdpdGhvdXQgZG90czogNWUtMTAwLFxuICAvLyB3aGlsZSBZQU1MIHJlcXVyZXMgZG90OiA1LmUtMTAwLiBGaXggaXQgd2l0aCBzaW1wbGUgaGFja1xuXG4gIHJldHVybiBTQ0lFTlRJRklDX1dJVEhPVVRfRE9ULnRlc3QocmVzKSA/IHJlcy5yZXBsYWNlKCdlJywgJy5lJykgOiByZXM7XG59XG5cbmZ1bmN0aW9uIGlzRmxvYXQob2JqZWN0KSB7XG4gIHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IE51bWJlcl0nKSAmJlxuICAgICAgICAgKG9iamVjdCAlIDEgIT09IDAgfHwgY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sRmxvYXQsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEZsb2F0LFxuICBwcmVkaWNhdGU6IGlzRmxvYXQsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbEZsb2F0LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIFR5cGUgICA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gaXNIZXhDb2RlKGMpIHtcbiAgcmV0dXJuICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzOS8qIDkgKi8pKSB8fFxuICAgICAgICAgKCgweDQxLyogQSAqLyA8PSBjKSAmJiAoYyA8PSAweDQ2LyogRiAqLykpIHx8XG4gICAgICAgICAoKDB4NjEvKiBhICovIDw9IGMpICYmIChjIDw9IDB4NjYvKiBmICovKSk7XG59XG5cbmZ1bmN0aW9uIGlzT2N0Q29kZShjKSB7XG4gIHJldHVybiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzcvKiA3ICovKSk7XG59XG5cbmZ1bmN0aW9uIGlzRGVjQ29kZShjKSB7XG4gIHJldHVybiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sSW50ZWdlcihkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoLFxuICAgICAgaW5kZXggPSAwLFxuICAgICAgaGFzRGlnaXRzID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBpZiAoIW1heCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNoID0gZGF0YVtpbmRleF07XG5cbiAgLy8gc2lnblxuICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgY2ggPSBkYXRhWysraW5kZXhdO1xuICB9XG5cbiAgaWYgKGNoID09PSAnMCcpIHtcbiAgICAvLyAwXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gbWF4KSByZXR1cm4gdHJ1ZTtcbiAgICBjaCA9IGRhdGFbKytpbmRleF07XG5cbiAgICAvLyBiYXNlIDIsIGJhc2UgOCwgYmFzZSAxNlxuXG4gICAgaWYgKGNoID09PSAnYicpIHtcbiAgICAgIC8vIGJhc2UgMlxuICAgICAgaW5kZXgrKztcblxuICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gJ18nKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGNoICE9PSAnMCcgJiYgY2ggIT09ICcxJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cztcbiAgICB9XG5cblxuICAgIGlmIChjaCA9PT0gJ3gnKSB7XG4gICAgICAvLyBiYXNlIDE2XG4gICAgICBpbmRleCsrO1xuXG4gICAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSAnXycpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWlzSGV4Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cztcbiAgICB9XG5cbiAgICAvLyBiYXNlIDhcbiAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICBpZiAoY2ggPT09ICdfJykgY29udGludWU7XG4gICAgICBpZiAoIWlzT2N0Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0RpZ2l0cztcbiAgfVxuXG4gIC8vIGJhc2UgMTAgKGV4Y2VwdCAwKSBvciBiYXNlIDYwXG5cbiAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICBpZiAoY2ggPT09ICdfJykgY29udGludWU7XG4gICAgaWYgKGNoID09PSAnOicpIGJyZWFrO1xuICAgIGlmICghaXNEZWNDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gIH1cblxuICBpZiAoIWhhc0RpZ2l0cykgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIGlmICFiYXNlNjAgLSBkb25lO1xuICBpZiAoY2ggIT09ICc6JykgcmV0dXJuIHRydWU7XG5cbiAgLy8gYmFzZTYwIGFsbW9zdCBub3QgdXNlZCwgbm8gbmVlZHMgdG8gb3B0aW1pemVcbiAgcmV0dXJuIC9eKDpbMC01XT9bMC05XSkrJC8udGVzdChkYXRhLnNsaWNlKGluZGV4KSk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxJbnRlZ2VyKGRhdGEpIHtcbiAgdmFyIHZhbHVlID0gZGF0YSwgc2lnbiA9IDEsIGNoLCBiYXNlLCBkaWdpdHMgPSBbXTtcblxuICBpZiAodmFsdWUuaW5kZXhPZignXycpICE9PSAtMSkge1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXy9nLCAnJyk7XG4gIH1cblxuICBjaCA9IHZhbHVlWzBdO1xuXG4gIGlmIChjaCA9PT0gJy0nIHx8IGNoID09PSAnKycpIHtcbiAgICBpZiAoY2ggPT09ICctJykgc2lnbiA9IC0xO1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gICAgY2ggPSB2YWx1ZVswXTtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gJzAnKSByZXR1cm4gMDtcblxuICBpZiAoY2ggPT09ICcwJykge1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gJ2InKSByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCAyKTtcbiAgICBpZiAodmFsdWVbMV0gPT09ICd4JykgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZSwgMTYpO1xuICAgIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUsIDgpO1xuICB9XG5cbiAgaWYgKHZhbHVlLmluZGV4T2YoJzonKSAhPT0gLTEpIHtcbiAgICB2YWx1ZS5zcGxpdCgnOicpLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgIGRpZ2l0cy51bnNoaWZ0KHBhcnNlSW50KHYsIDEwKSk7XG4gICAgfSk7XG5cbiAgICB2YWx1ZSA9IDA7XG4gICAgYmFzZSA9IDE7XG5cbiAgICBkaWdpdHMuZm9yRWFjaChmdW5jdGlvbiAoZCkge1xuICAgICAgdmFsdWUgKz0gKGQgKiBiYXNlKTtcbiAgICAgIGJhc2UgKj0gNjA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2lnbiAqIHZhbHVlO1xuXG4gIH1cblxuICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZWdlcihvYmplY3QpIHtcbiAgcmV0dXJuIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSkgPT09ICdbb2JqZWN0IE51bWJlcl0nICYmXG4gICAgICAgICAob2JqZWN0ICUgMSA9PT0gMCAmJiAhY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEludGVnZXIsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEludGVnZXIsXG4gIHByZWRpY2F0ZTogaXNJbnRlZ2VyLFxuICByZXByZXNlbnQ6IHtcbiAgICBiaW5hcnk6ICAgICAgZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gJzBiJyArIG9iamVjdC50b1N0cmluZygyKTsgfSxcbiAgICBvY3RhbDogICAgICAgZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gJzAnICArIG9iamVjdC50b1N0cmluZyg4KTsgfSxcbiAgICBkZWNpbWFsOiAgICAgZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gICAgICAgIG9iamVjdC50b1N0cmluZygxMCk7IH0sXG4gICAgaGV4YWRlY2ltYWw6IGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuICcweCcgKyBvYmplY3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IH1cbiAgfSxcbiAgZGVmYXVsdFN0eWxlOiAnZGVjaW1hbCcsXG4gIHN0eWxlQWxpYXNlczoge1xuICAgIGJpbmFyeTogICAgICBbIDIsICAnYmluJyBdLFxuICAgIG9jdGFsOiAgICAgICBbIDgsICAnb2N0JyBdLFxuICAgIGRlY2ltYWw6ICAgICBbIDEwLCAnZGVjJyBdLFxuICAgIGhleGFkZWNpbWFsOiBbIDE2LCAnaGV4JyBdXG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXNwcmltYTtcblxuLy8gQnJvd3NlcmlmaWVkIHZlcnNpb24gZG9lcyBub3QgaGF2ZSBlc3ByaW1hXG4vL1xuLy8gMS4gRm9yIG5vZGUuanMganVzdCByZXF1aXJlIG1vZHVsZSBhcyBkZXBzXG4vLyAyLiBGb3IgYnJvd3NlciB0cnkgdG8gcmVxdWlyZSBtdWR1bGUgdmlhIGV4dGVybmFsIEFNRCBzeXN0ZW0uXG4vLyAgICBJZiBub3QgZm91bmQgLSB0cnkgdG8gZmFsbGJhY2sgdG8gd2luZG93LmVzcHJpbWEuIElmIG5vdFxuLy8gICAgZm91bmQgdG9vIC0gdGhlbiBmYWlsIHRvIHBhcnNlLlxuLy9cbnRyeSB7XG4gIC8vIHdvcmthcm91bmQgdG8gZXhjbHVkZSBwYWNrYWdlIGZyb20gYnJvd3NlcmlmeSBsaXN0LlxuICB2YXIgX3JlcXVpcmUgPSByZXF1aXJlO1xuICBlc3ByaW1hID0gX3JlcXVpcmUoJ2VzcHJpbWEnKTtcbn0gY2F0Y2ggKF8pIHtcbiAgLypnbG9iYWwgd2luZG93ICovXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgZXNwcmltYSA9IHdpbmRvdy5lc3ByaW1hO1xufVxuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uLy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRGdW5jdGlvbihkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICB2YXIgc291cmNlID0gJygnICsgZGF0YSArICcpJyxcbiAgICAgICAgYXN0ICAgID0gZXNwcmltYS5wYXJzZShzb3VyY2UsIHsgcmFuZ2U6IHRydWUgfSk7XG5cbiAgICBpZiAoYXN0LnR5cGUgICAgICAgICAgICAgICAgICAgICE9PSAnUHJvZ3JhbScgICAgICAgICAgICAgfHxcbiAgICAgICAgYXN0LmJvZHkubGVuZ3RoICAgICAgICAgICAgICE9PSAxICAgICAgICAgICAgICAgICAgICAgfHxcbiAgICAgICAgYXN0LmJvZHlbMF0udHlwZSAgICAgICAgICAgICE9PSAnRXhwcmVzc2lvblN0YXRlbWVudCcgfHxcbiAgICAgICAgYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlICE9PSAnRnVuY3Rpb25FeHByZXNzaW9uJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3RydWN0SmF2YXNjcmlwdEZ1bmN0aW9uKGRhdGEpIHtcbiAgLypqc2xpbnQgZXZpbDp0cnVlKi9cblxuICB2YXIgc291cmNlID0gJygnICsgZGF0YSArICcpJyxcbiAgICAgIGFzdCAgICA9IGVzcHJpbWEucGFyc2Uoc291cmNlLCB7IHJhbmdlOiB0cnVlIH0pLFxuICAgICAgcGFyYW1zID0gW10sXG4gICAgICBib2R5O1xuXG4gIGlmIChhc3QudHlwZSAgICAgICAgICAgICAgICAgICAgIT09ICdQcm9ncmFtJyAgICAgICAgICAgICB8fFxuICAgICAgYXN0LmJvZHkubGVuZ3RoICAgICAgICAgICAgICE9PSAxICAgICAgICAgICAgICAgICAgICAgfHxcbiAgICAgIGFzdC5ib2R5WzBdLnR5cGUgICAgICAgICAgICAhPT0gJ0V4cHJlc3Npb25TdGF0ZW1lbnQnIHx8XG4gICAgICBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUgIT09ICdGdW5jdGlvbkV4cHJlc3Npb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBmdW5jdGlvbicpO1xuICB9XG5cbiAgYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICBwYXJhbXMucHVzaChwYXJhbS5uYW1lKTtcbiAgfSk7XG5cbiAgYm9keSA9IGFzdC5ib2R5WzBdLmV4cHJlc3Npb24uYm9keS5yYW5nZTtcblxuICAvLyBFc3ByaW1hJ3MgcmFuZ2VzIGluY2x1ZGUgdGhlIGZpcnN0ICd7JyBhbmQgdGhlIGxhc3QgJ30nIGNoYXJhY3RlcnMgb25cbiAgLy8gZnVuY3Rpb24gZXhwcmVzc2lvbnMuIFNvIGN1dCB0aGVtIG91dC5cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYyovXG4gIHJldHVybiBuZXcgRnVuY3Rpb24ocGFyYW1zLCBzb3VyY2Uuc2xpY2UoYm9keVswXSArIDEsIGJvZHlbMV0gLSAxKSk7XG59XG5cbmZ1bmN0aW9uIHJlcHJlc2VudEphdmFzY3JpcHRGdW5jdGlvbihvYmplY3QgLyosIHN0eWxlKi8pIHtcbiAgcmV0dXJuIG9iamVjdC50b1N0cmluZygpO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKG9iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmpzL2Z1bmN0aW9uJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZUphdmFzY3JpcHRGdW5jdGlvbixcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0RnVuY3Rpb24sXG4gIHByZWRpY2F0ZTogaXNGdW5jdGlvbixcbiAgcmVwcmVzZW50OiByZXByZXNlbnRKYXZhc2NyaXB0RnVuY3Rpb25cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uLy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRSZWdFeHAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICB2YXIgcmVnZXhwID0gZGF0YSxcbiAgICAgIHRhaWwgICA9IC9cXC8oW2dpbV0qKSQvLmV4ZWMoZGF0YSksXG4gICAgICBtb2RpZmllcnMgPSAnJztcblxuICAvLyBpZiByZWdleHAgc3RhcnRzIHdpdGggJy8nIGl0IGNhbiBoYXZlIG1vZGlmaWVycyBhbmQgbXVzdCBiZSBwcm9wZXJseSBjbG9zZWRcbiAgLy8gYC9mb28vZ2ltYCAtIG1vZGlmaWVycyB0YWlsIGNhbiBiZSBtYXhpbXVtIDMgY2hhcnNcbiAgaWYgKHJlZ2V4cFswXSA9PT0gJy8nKSB7XG4gICAgaWYgKHRhaWwpIG1vZGlmaWVycyA9IHRhaWxbMV07XG5cbiAgICBpZiAobW9kaWZpZXJzLmxlbmd0aCA+IDMpIHJldHVybiBmYWxzZTtcbiAgICAvLyBpZiBleHByZXNzaW9uIHN0YXJ0cyB3aXRoIC8sIGlzIHNob3VsZCBiZSBwcm9wZXJseSB0ZXJtaW5hdGVkXG4gICAgaWYgKHJlZ2V4cFtyZWdleHAubGVuZ3RoIC0gbW9kaWZpZXJzLmxlbmd0aCAtIDFdICE9PSAnLycpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RKYXZhc2NyaXB0UmVnRXhwKGRhdGEpIHtcbiAgdmFyIHJlZ2V4cCA9IGRhdGEsXG4gICAgICB0YWlsICAgPSAvXFwvKFtnaW1dKikkLy5leGVjKGRhdGEpLFxuICAgICAgbW9kaWZpZXJzID0gJyc7XG5cbiAgLy8gYC9mb28vZ2ltYCAtIHRhaWwgY2FuIGJlIG1heGltdW0gNCBjaGFyc1xuICBpZiAocmVnZXhwWzBdID09PSAnLycpIHtcbiAgICBpZiAodGFpbCkgbW9kaWZpZXJzID0gdGFpbFsxXTtcbiAgICByZWdleHAgPSByZWdleHAuc2xpY2UoMSwgcmVnZXhwLmxlbmd0aCAtIG1vZGlmaWVycy5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4cCwgbW9kaWZpZXJzKTtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50SmF2YXNjcmlwdFJlZ0V4cChvYmplY3QgLyosIHN0eWxlKi8pIHtcbiAgdmFyIHJlc3VsdCA9ICcvJyArIG9iamVjdC5zb3VyY2UgKyAnLyc7XG5cbiAgaWYgKG9iamVjdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmIChvYmplY3QubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAob2JqZWN0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNSZWdFeHAob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmpzL3JlZ2V4cCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVKYXZhc2NyaXB0UmVnRXhwLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdEphdmFzY3JpcHRSZWdFeHAsXG4gIHByZWRpY2F0ZTogaXNSZWdFeHAsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50SmF2YXNjcmlwdFJlZ0V4cFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlSmF2YXNjcmlwdFVuZGVmaW5lZCgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdEphdmFzY3JpcHRVbmRlZmluZWQoKSB7XG4gIC8qZXNsaW50LWRpc2FibGUgbm8tdW5kZWZpbmVkKi9cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50SmF2YXNjcmlwdFVuZGVmaW5lZCgpIHtcbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICd1bmRlZmluZWQnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpqcy91bmRlZmluZWQnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdFVuZGVmaW5lZCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0VW5kZWZpbmVkLFxuICBwcmVkaWNhdGU6IGlzVW5kZWZpbmVkLFxuICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRVbmRlZmluZWRcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6bWFwJywge1xuICBraW5kOiAnbWFwcGluZycsXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307IH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxNZXJnZShkYXRhKSB7XG4gIHJldHVybiBkYXRhID09PSAnPDwnIHx8IGRhdGEgPT09IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm1lcmdlJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxNZXJnZVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE51bGwoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoO1xuXG4gIHJldHVybiAobWF4ID09PSAxICYmIGRhdGEgPT09ICd+JykgfHxcbiAgICAgICAgIChtYXggPT09IDQgJiYgKGRhdGEgPT09ICdudWxsJyB8fCBkYXRhID09PSAnTnVsbCcgfHwgZGF0YSA9PT0gJ05VTEwnKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09PSBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpudWxsJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxOdWxsLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxOdWxsLFxuICBwcmVkaWNhdGU6IGlzTnVsbCxcbiAgcmVwcmVzZW50OiB7XG4gICAgY2Fub25pY2FsOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnfic7ICAgIH0sXG4gICAgbG93ZXJjYXNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnbnVsbCc7IH0sXG4gICAgdXBwZXJjYXNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnTlVMTCc7IH0sXG4gICAgY2FtZWxjYXNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAnTnVsbCc7IH1cbiAgfSxcbiAgZGVmYXVsdFN0eWxlOiAnbG93ZXJjYXNlJ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG52YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfdG9TdHJpbmcgICAgICAgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE9tYXAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cbiAgdmFyIG9iamVjdEtleXMgPSBbXSwgaW5kZXgsIGxlbmd0aCwgcGFpciwgcGFpcktleSwgcGFpckhhc0tleSxcbiAgICAgIG9iamVjdCA9IGRhdGE7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpciA9IG9iamVjdFtpbmRleF07XG4gICAgcGFpckhhc0tleSA9IGZhbHNlO1xuXG4gICAgaWYgKF90b1N0cmluZy5jYWxsKHBhaXIpICE9PSAnW29iamVjdCBPYmplY3RdJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChwYWlyS2V5IGluIHBhaXIpIHtcbiAgICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChwYWlyLCBwYWlyS2V5KSkge1xuICAgICAgICBpZiAoIXBhaXJIYXNLZXkpIHBhaXJIYXNLZXkgPSB0cnVlO1xuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhaXJIYXNLZXkpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChvYmplY3RLZXlzLmluZGV4T2YocGFpcktleSkgPT09IC0xKSBvYmplY3RLZXlzLnB1c2gocGFpcktleSk7XG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbE9tYXAoZGF0YSkge1xuICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6b21hcCcsIHtcbiAga2luZDogJ3NlcXVlbmNlJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxPbWFwLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxPbWFwXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbnZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbFBhaXJzKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBpbmRleCwgbGVuZ3RoLCBwYWlyLCBrZXlzLCByZXN1bHQsXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBwYWlyID0gb2JqZWN0W2luZGV4XTtcblxuICAgIGlmIChfdG9TdHJpbmcuY2FsbChwYWlyKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHJldHVybiBmYWxzZTtcblxuICAgIGtleXMgPSBPYmplY3Qua2V5cyhwYWlyKTtcblxuICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmVzdWx0W2luZGV4XSA9IFsga2V5c1swXSwgcGFpcltrZXlzWzBdXSBdO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxQYWlycyhkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gW107XG5cbiAgdmFyIGluZGV4LCBsZW5ndGgsIHBhaXIsIGtleXMsIHJlc3VsdCxcbiAgICAgIG9iamVjdCA9IGRhdGE7XG5cbiAgcmVzdWx0ID0gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHBhaXIpO1xuXG4gICAgcmVzdWx0W2luZGV4XSA9IFsga2V5c1swXSwgcGFpcltrZXlzWzBdXSBdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6cGFpcnMnLCB7XG4gIGtpbmQ6ICdzZXF1ZW5jZScsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnNlcScsIHtcbiAga2luZDogJ3NlcXVlbmNlJyxcbiAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTsgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG52YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxTZXQoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cbiAgdmFyIGtleSwgb2JqZWN0ID0gZGF0YTtcblxuICBmb3IgKGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XG4gICAgICBpZiAob2JqZWN0W2tleV0gIT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbFNldChkYXRhKSB7XG4gIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpzZXQnLCB7XG4gIGtpbmQ6ICdtYXBwaW5nJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxTZXQsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFNldFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpzdHInLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6ICcnOyB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbnZhciBZQU1MX1RJTUVTVEFNUF9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICAnXihbMC05XVswLTldWzAtOV1bMC05XSknICAgICAgICAgICsgLy8gWzFdIHllYXJcbiAgJy0oWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICArIC8vIFsyXSBtb250aFxuICAnLShbMC05XVswLTldPyknICAgICAgICAgICAgICAgICAgICsgLy8gWzNdIGRheVxuICAnKD86KD86W1R0XXxbIFxcXFx0XSspJyAgICAgICAgICAgICAgKyAvLyAuLi5cbiAgJyhbMC05XVswLTldPyknICAgICAgICAgICAgICAgICAgICArIC8vIFs0XSBob3VyXG4gICc6KFswLTldWzAtOV0pJyAgICAgICAgICAgICAgICAgICAgKyAvLyBbNV0gbWludXRlXG4gICc6KFswLTldWzAtOV0pJyAgICAgICAgICAgICAgICAgICAgKyAvLyBbNl0gc2Vjb25kXG4gICcoPzpcXFxcLihbMC05XSopKT8nICAgICAgICAgICAgICAgICArIC8vIFs3XSBmcmFjdGlvblxuICAnKD86WyBcXFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KScgKyAvLyBbOF0gdHogWzldIHR6X3NpZ24gWzEwXSB0el9ob3VyXG4gICcoPzo6KFswLTldWzAtOV0pKT8pKT8pPyQnKTsgICAgICAgICAvLyBbMTFdIHR6X21pbnV0ZVxuXG5mdW5jdGlvbiByZXNvbHZlWWFtbFRpbWVzdGFtcChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhKSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbFRpbWVzdGFtcChkYXRhKSB7XG4gIHZhciBtYXRjaCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uID0gMCxcbiAgICAgIGRlbHRhID0gbnVsbCwgdHpfaG91ciwgdHpfbWludXRlLCBkYXRlO1xuXG4gIG1hdGNoID0gWUFNTF9USU1FU1RBTVBfUkVHRVhQLmV4ZWMoZGF0YSk7XG5cbiAgaWYgKG1hdGNoID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ0RhdGUgcmVzb2x2ZSBlcnJvcicpO1xuXG4gIC8vIG1hdGNoOiBbMV0geWVhciBbMl0gbW9udGggWzNdIGRheVxuXG4gIHllYXIgPSArKG1hdGNoWzFdKTtcbiAgbW9udGggPSArKG1hdGNoWzJdKSAtIDE7IC8vIEpTIG1vbnRoIHN0YXJ0cyB3aXRoIDBcbiAgZGF5ID0gKyhtYXRjaFszXSk7XG5cbiAgaWYgKCFtYXRjaFs0XSkgeyAvLyBubyBob3VyXG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoLCBkYXkpKTtcbiAgfVxuXG4gIC8vIG1hdGNoOiBbNF0gaG91ciBbNV0gbWludXRlIFs2XSBzZWNvbmQgWzddIGZyYWN0aW9uXG5cbiAgaG91ciA9ICsobWF0Y2hbNF0pO1xuICBtaW51dGUgPSArKG1hdGNoWzVdKTtcbiAgc2Vjb25kID0gKyhtYXRjaFs2XSk7XG5cbiAgaWYgKG1hdGNoWzddKSB7XG4gICAgZnJhY3Rpb24gPSBtYXRjaFs3XS5zbGljZSgwLCAzKTtcbiAgICB3aGlsZSAoZnJhY3Rpb24ubGVuZ3RoIDwgMykgeyAvLyBtaWxsaS1zZWNvbmRzXG4gICAgICBmcmFjdGlvbiArPSAnMCc7XG4gICAgfVxuICAgIGZyYWN0aW9uID0gK2ZyYWN0aW9uO1xuICB9XG5cbiAgLy8gbWF0Y2g6IFs4XSB0eiBbOV0gdHpfc2lnbiBbMTBdIHR6X2hvdXIgWzExXSB0el9taW51dGVcblxuICBpZiAobWF0Y2hbOV0pIHtcbiAgICB0el9ob3VyID0gKyhtYXRjaFsxMF0pO1xuICAgIHR6X21pbnV0ZSA9ICsobWF0Y2hbMTFdIHx8IDApO1xuICAgIGRlbHRhID0gKHR6X2hvdXIgKiA2MCArIHR6X21pbnV0ZSkgKiA2MDAwMDsgLy8gZGVsdGEgaW4gbWlsaS1zZWNvbmRzXG4gICAgaWYgKG1hdGNoWzldID09PSAnLScpIGRlbHRhID0gLWRlbHRhO1xuICB9XG5cbiAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjdGlvbikpO1xuXG4gIGlmIChkZWx0YSkgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpIC0gZGVsdGEpO1xuXG4gIHJldHVybiBkYXRlO1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sVGltZXN0YW1wKG9iamVjdCAvKiwgc3R5bGUqLykge1xuICByZXR1cm4gb2JqZWN0LnRvSVNPU3RyaW5nKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sVGltZXN0YW1wLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAsXG4gIGluc3RhbmNlT2Y6IERhdGUsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbFRpbWVzdGFtcFxufSk7XG4iLCIvKlxyXG4qIGxvZ2xldmVsIC0gaHR0cHM6Ly9naXRodWIuY29tL3BpbXRlcnJ5L2xvZ2xldmVsXHJcbipcclxuKiBDb3B5cmlnaHQgKGMpIDIwMTMgVGltIFBlcnJ5XHJcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxyXG4qL1xyXG4oZnVuY3Rpb24gKHJvb3QsIGRlZmluaXRpb24pIHtcclxuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIGRlZmluZShkZWZpbml0aW9uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcm9vdC5sb2cgPSBkZWZpbml0aW9uKCk7XHJcbiAgICB9XHJcbn0odGhpcywgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHNlbGYgPSB7fTtcclxuICAgIHZhciBub29wID0gZnVuY3Rpb24oKSB7fTtcclxuICAgIHZhciB1bmRlZmluZWRUeXBlID0gXCJ1bmRlZmluZWRcIjtcclxuXHJcbiAgICBmdW5jdGlvbiByZWFsTWV0aG9kKG1ldGhvZE5hbWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09IHVuZGVmaW5lZFR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBXZSBjYW4ndCBidWlsZCBhIHJlYWwgbWV0aG9kIHdpdGhvdXQgYSBjb25zb2xlIHRvIGxvZyB0b1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29uc29sZVttZXRob2ROYW1lXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiaW5kTWV0aG9kKGNvbnNvbGUsIG1ldGhvZE5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29uc29sZS5sb2cgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmluZE1ldGhvZChjb25zb2xlLCAnbG9nJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5vb3A7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGJpbmRNZXRob2Qob2JqLCBtZXRob2ROYW1lKSB7XHJcbiAgICAgICAgdmFyIG1ldGhvZCA9IG9ialttZXRob2ROYW1lXTtcclxuICAgICAgICBpZiAodHlwZW9mIG1ldGhvZC5iaW5kID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZXRob2QuYmluZChvYmopO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChtZXRob2QsIG9iaik7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIE1pc3NpbmcgYmluZCBzaGltIG9yIElFOCArIE1vZGVybml6ciwgZmFsbGJhY2sgdG8gd3JhcHBpbmdcclxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmFwcGx5KG1ldGhvZCwgW29iaiwgYXJndW1lbnRzXSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGVuYWJsZUxvZ2dpbmdXaGVuQ29uc29sZUFycml2ZXMobWV0aG9kTmFtZSwgbGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IHVuZGVmaW5lZFR5cGUpIHtcclxuICAgICAgICAgICAgICAgIHJlcGxhY2VMb2dnaW5nTWV0aG9kcyhsZXZlbCk7XHJcbiAgICAgICAgICAgICAgICBzZWxmW21ldGhvZE5hbWVdLmFwcGx5KHNlbGYsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsb2dNZXRob2RzID0gW1xyXG4gICAgICAgIFwidHJhY2VcIixcclxuICAgICAgICBcImRlYnVnXCIsXHJcbiAgICAgICAgXCJpbmZvXCIsXHJcbiAgICAgICAgXCJ3YXJuXCIsXHJcbiAgICAgICAgXCJlcnJvclwiXHJcbiAgICBdO1xyXG5cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2VMb2dnaW5nTWV0aG9kcyhsZXZlbCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9nTWV0aG9kcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbWV0aG9kTmFtZSA9IGxvZ01ldGhvZHNbaV07XHJcbiAgICAgICAgICAgIHNlbGZbbWV0aG9kTmFtZV0gPSAoaSA8IGxldmVsKSA/IG5vb3AgOiBzZWxmLm1ldGhvZEZhY3RvcnkobWV0aG9kTmFtZSwgbGV2ZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwZXJzaXN0TGV2ZWxJZlBvc3NpYmxlKGxldmVsTnVtKSB7XHJcbiAgICAgICAgdmFyIGxldmVsTmFtZSA9IChsb2dNZXRob2RzW2xldmVsTnVtXSB8fCAnc2lsZW50JykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgLy8gVXNlIGxvY2FsU3RvcmFnZSBpZiBhdmFpbGFibGVcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlWydsb2dsZXZlbCddID0gbGV2ZWxOYW1lO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxyXG5cclxuICAgICAgICAvLyBVc2Ugc2Vzc2lvbiBjb29raWUgYXMgZmFsbGJhY2tcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuY29va2llID0gXCJsb2dsZXZlbD1cIiArIGxldmVsTmFtZSArIFwiO1wiO1xyXG4gICAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge31cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBsb2FkUGVyc2lzdGVkTGV2ZWwoKSB7XHJcbiAgICAgICAgdmFyIHN0b3JlZExldmVsO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdG9yZWRMZXZlbCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2VbJ2xvZ2xldmVsJ107XHJcbiAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHN0b3JlZExldmVsID09PSB1bmRlZmluZWRUeXBlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdG9yZWRMZXZlbCA9IC9sb2dsZXZlbD0oW147XSspLy5leGVjKHdpbmRvdy5kb2N1bWVudC5jb29raWUpWzFdO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChzZWxmLmxldmVsc1tzdG9yZWRMZXZlbF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBzdG9yZWRMZXZlbCA9IFwiV0FSTlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2VsZi5zZXRMZXZlbChzZWxmLmxldmVsc1tzdG9yZWRMZXZlbF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKlxyXG4gICAgICogUHVibGljIEFQSVxyXG4gICAgICpcclxuICAgICAqL1xyXG5cclxuICAgIHNlbGYubGV2ZWxzID0geyBcIlRSQUNFXCI6IDAsIFwiREVCVUdcIjogMSwgXCJJTkZPXCI6IDIsIFwiV0FSTlwiOiAzLFxyXG4gICAgICAgIFwiRVJST1JcIjogNCwgXCJTSUxFTlRcIjogNX07XHJcblxyXG4gICAgc2VsZi5tZXRob2RGYWN0b3J5ID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGxldmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlYWxNZXRob2QobWV0aG9kTmFtZSkgfHxcclxuICAgICAgICAgICAgICAgZW5hYmxlTG9nZ2luZ1doZW5Db25zb2xlQXJyaXZlcyhtZXRob2ROYW1lLCBsZXZlbCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHNlbGYuc2V0TGV2ZWwgPSBmdW5jdGlvbiAobGV2ZWwpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGxldmVsID09PSBcInN0cmluZ1wiICYmIHNlbGYubGV2ZWxzW2xldmVsLnRvVXBwZXJDYXNlKCldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgbGV2ZWwgPSBzZWxmLmxldmVsc1tsZXZlbC50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsZXZlbCA9PT0gXCJudW1iZXJcIiAmJiBsZXZlbCA+PSAwICYmIGxldmVsIDw9IHNlbGYubGV2ZWxzLlNJTEVOVCkge1xyXG4gICAgICAgICAgICBwZXJzaXN0TGV2ZWxJZlBvc3NpYmxlKGxldmVsKTtcclxuICAgICAgICAgICAgcmVwbGFjZUxvZ2dpbmdNZXRob2RzKGxldmVsKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSB1bmRlZmluZWRUeXBlICYmIGxldmVsIDwgc2VsZi5sZXZlbHMuU0lMRU5UKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJObyBjb25zb2xlIGF2YWlsYWJsZSBmb3IgbG9nZ2luZ1wiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgXCJsb2cuc2V0TGV2ZWwoKSBjYWxsZWQgd2l0aCBpbnZhbGlkIGxldmVsOiBcIiArIGxldmVsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgc2VsZi5lbmFibGVBbGwgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBzZWxmLnNldExldmVsKHNlbGYubGV2ZWxzLlRSQUNFKTtcclxuICAgIH07XHJcblxyXG4gICAgc2VsZi5kaXNhYmxlQWxsID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgc2VsZi5zZXRMZXZlbChzZWxmLmxldmVscy5TSUxFTlQpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBHcmFiIHRoZSBjdXJyZW50IGdsb2JhbCBsb2cgdmFyaWFibGUgaW4gY2FzZSBvZiBvdmVyd3JpdGVcclxuICAgIHZhciBfbG9nID0gKHR5cGVvZiB3aW5kb3cgIT09IHVuZGVmaW5lZFR5cGUpID8gd2luZG93LmxvZyA6IHVuZGVmaW5lZDtcclxuICAgIHNlbGYubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSB1bmRlZmluZWRUeXBlICYmXHJcbiAgICAgICAgICAgICAgIHdpbmRvdy5sb2cgPT09IHNlbGYpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvZyA9IF9sb2c7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH07XHJcblxyXG4gICAgbG9hZFBlcnNpc3RlZExldmVsKCk7XHJcbiAgICByZXR1cm4gc2VsZjtcclxufSkpO1xyXG4iLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG5vdE51bGwoeCkgIHsgcmV0dXJuIHggIT0gbnVsbDsgfVxuZnVuY3Rpb24gd3JhcCh4KSAgICAgeyByZXR1cm4gJygnICsgeCArICcpJzt9XG5cbmZ1bmN0aW9uIG1heWJlUXVvdGUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gJ1wiJyArIHZhbHVlICsgJ1wiJztcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBsb29rVXAoa2V5KSB7XG4gICAgaWYgKGtleVswXSA9PT0gJyQnKSB7XG4gICAgICAgIHJldHVybiAnY29udGV4dC4nICsga2V5LnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgcmV0dXJuICdjb250ZXh0LmZlYXR1cmUucHJvcGVydGllcy4nICsga2V5O1xufVxuXG5mdW5jdGlvbiBudWxsVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiAnIHRydWUgJztcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlFcXVhbChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHdyYXAobWF5YmVRdW90ZSh2YWx1ZSkgKyAnID09PSAnICsgbG9va1VwKGtleSkpO1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eU9yKGtleSwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHdyYXAodmFsdWVzLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4gcHJvcGVydHlFcXVhbChrZXksIHgpOyB9KS5qb2luKCcgfHwgJykpO1xufVxuXG5mdW5jdGlvbiBwcmludE5lc3RlZCh2YWx1ZXMsIGpvaW5lcikge1xuICAgIHJldHVybiB3cmFwKHZhbHVlcy5maWx0ZXIobm90TnVsbCkubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB3cmFwKHguam9pbignICYmICcpKTtcbiAgICB9KS5qb2luKCcgJyArIGpvaW5lciArICcgJykpO1xufVxuXG5mdW5jdGlvbiBhbnkoXywgdmFsdWVzKSB7XG4gICAgcmV0dXJuICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDApID8gcHJpbnROZXN0ZWQodmFsdWVzLm1hcChwYXJzZUZpbHRlciksICd8fCcpIDogJ3RydWUnO1xufVxuXG5mdW5jdGlvbiBhbGwoXywgdmFsdWVzKSB7XG4gICAgcmV0dXJuICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDApID8gcHJpbnROZXN0ZWQodmFsdWVzLm1hcChwYXJzZUZpbHRlciksICcmJicpIDogJ3RydWUnO1xufVxuXG5mdW5jdGlvbiBub3Qoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiAnIScgKyB3cmFwKHBhcnNlRmlsdGVyKHZhbHVlKS5qb2luKCcgJiYgJykpO1xufVxuXG5mdW5jdGlvbiBub25lKGtleSwgdmFsdWVzKSB7XG4gICAgcmV0dXJuICchJyArIHdyYXAoYW55KG51bGwsIHZhbHVlcykpO1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eU1hdGNoZXNCb29sZWFuKGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd3JhcChsb29rVXAoa2V5KSArICh2YWx1ZSA/ICcgIT0gJyA6ICcgPT0gJykgICsgJ251bGwnKTtcbn1cblxuZnVuY3Rpb24gcmFuZ2VNYXRjaChrZXksIHZhbHVlcykge1xuICAgIHZhciBleHByZXNzaW9ucyA9IFtdO1xuXG4gICAgaWYgKHZhbHVlcy5tYXgpIHtcbiAgICAgICAgZXhwcmVzc2lvbnMucHVzaCgnJyArIGxvb2tVcChrZXkpICsgJyA8ICcgKyB2YWx1ZXMubWF4KTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVzLm1pbikge1xuICAgICAgICBleHByZXNzaW9ucy5wdXNoKCcnICsgbG9va1VwKGtleSkgKyAnID49ICcgKyB2YWx1ZXMubWluKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcChleHByZXNzaW9ucy5qb2luKCcgJiYgJykpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcihmaWx0ZXIpIHtcbiAgICB2YXIgZmlsdGVyQVNUID0gW107XG5cbiAgICAvLyBGdW5jdGlvbiBmaWx0ZXJcbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gW3dyYXAoZmlsdGVyLnRvU3RyaW5nKCkgKyAnKGNvbnRleHQpJyldO1xuICAgIH1cbiAgICAvLyBBcnJheSBmaWx0ZXIsIGltcGxpY2l0ICdhbnknXG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIpKSB7XG4gICAgICAgIHJldHVybiBbYW55KG51bGwsIGZpbHRlcildO1xuICAgIH1cbiAgICAvLyBOdWxsIGZpbHRlciBvYmplY3RcbiAgICBlbHNlIGlmIChmaWx0ZXIgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gWyd0cnVlJ107XG4gICAgfVxuXG4gICAgLy8gT2JqZWN0IGZpbHRlciwgZS5nLiBpbXBsaWNpdCAnYWxsJ1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZmlsdGVyKTtcbiAgICBmb3IgKHZhciBrPTA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2tdO1xuXG4gICAgICAgIHZhciB2YWx1ZSA9IGZpbHRlcltrZXldLFxuICAgICAgICAgICAgdHlwZSAgPSB0eXBlb2YgdmFsdWU7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgZmlsdGVyQVNULnB1c2gocHJvcGVydHlFcXVhbChrZXksIHZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBmaWx0ZXJBU1QucHVzaChwcm9wZXJ0eU1hdGNoZXNCb29sZWFuKGtleSwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdub3QnKSB7XG4gICAgICAgICAgICBmaWx0ZXJBU1QucHVzaChub3Qoa2V5LCB2YWx1ZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2FueScpIHtcbiAgICAgICAgICAgIGZpbHRlckFTVC5wdXNoKGFueShrZXksIHZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnYWxsJykge1xuICAgICAgICAgICAgZmlsdGVyQVNULnB1c2goYWxsKGtleSwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgZmlsdGVyQVNULnB1c2gobm9uZShrZXksIHZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZpbHRlckFTVC5wdXNoKHByb3BlcnR5T3Ioa2V5LCB2YWx1ZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5tYXggfHwgdmFsdWUubWluKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyQVNULnB1c2gocmFuZ2VNYXRjaChrZXksIHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgZmlsdGVyQVNULnB1c2gobnVsbFZhbHVlKGtleSwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBRdWVyeSBzeXRuYXg6ICcgKyB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ga2V5cy5sZW5ndGggPT09IDAgPyBbJ3RydWUnXSA6IGZpbHRlckFTVDtcbn1cblxuZnVuY3Rpb24gZmlsdGVyVG9TdHJpbmcoZmlsdGVyQVNUKSB7XG4gICAgcmV0dXJuIHdyYXAoZmlsdGVyQVNULmpvaW4oJyAmJiAnKSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoKGZpbHRlcikge1xuICAgIGlmIChmaWx0ZXIgPT0gbnVsbCkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTsgfVxuICAgIC8vIGpzaGludCBldmlsOiB0cnVlXG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbignY29udGV4dCcsICdyZXR1cm4gJyArIGZpbHRlclRvU3RyaW5nKHBhcnNlRmlsdGVyKGZpbHRlcikpICsgJzsnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbWF0Y2g6IG1hdGNoLFxuICAgIGZpbHRlclRvU3RyaW5nOiBmaWx0ZXJUb1N0cmluZyxcbiAgICBwYXJzZUZpbHRlcjogcGFyc2VGaWx0ZXJcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIGxpZ2h0d2VpZ2h0IEJ1ZmZlciBzaGltIGZvciBwYmYgYnJvd3NlciBidWlsZFxuLy8gYmFzZWQgb24gY29kZSBmcm9tIGdpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlciAoTUlULWxpY2Vuc2VkKVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0Jyk7XG5cbnZhciBCdWZmZXJNZXRob2RzO1xuXG5mdW5jdGlvbiBCdWZmZXIobGVuZ3RoKSB7XG4gICAgdmFyIGFycjtcbiAgICBpZiAobGVuZ3RoICYmIGxlbmd0aC5sZW5ndGgpIHtcbiAgICAgICAgYXJyID0gbGVuZ3RoO1xuICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuICAgIH1cbiAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoIHx8IDApO1xuICAgIGlmIChhcnIpIGJ1Zi5zZXQoYXJyKTtcblxuICAgIGJ1Zi5yZWFkVUludDMyTEUgPSBCdWZmZXJNZXRob2RzLnJlYWRVSW50MzJMRTtcbiAgICBidWYud3JpdGVVSW50MzJMRSA9IEJ1ZmZlck1ldGhvZHMud3JpdGVVSW50MzJMRTtcbiAgICBidWYucmVhZEludDMyTEUgPSBCdWZmZXJNZXRob2RzLnJlYWRJbnQzMkxFO1xuICAgIGJ1Zi53cml0ZUludDMyTEUgPSBCdWZmZXJNZXRob2RzLndyaXRlSW50MzJMRTtcbiAgICBidWYucmVhZEZsb2F0TEUgPSBCdWZmZXJNZXRob2RzLnJlYWRGbG9hdExFO1xuICAgIGJ1Zi53cml0ZUZsb2F0TEUgPSBCdWZmZXJNZXRob2RzLndyaXRlRmxvYXRMRTtcbiAgICBidWYucmVhZERvdWJsZUxFID0gQnVmZmVyTWV0aG9kcy5yZWFkRG91YmxlTEU7XG4gICAgYnVmLndyaXRlRG91YmxlTEUgPSBCdWZmZXJNZXRob2RzLndyaXRlRG91YmxlTEU7XG4gICAgYnVmLnRvU3RyaW5nID0gQnVmZmVyTWV0aG9kcy50b1N0cmluZztcbiAgICBidWYud3JpdGUgPSBCdWZmZXJNZXRob2RzLndyaXRlO1xuICAgIGJ1Zi5zbGljZSA9IEJ1ZmZlck1ldGhvZHMuc2xpY2U7XG4gICAgYnVmLmNvcHkgPSBCdWZmZXJNZXRob2RzLmNvcHk7XG5cbiAgICBidWYuX2lzQnVmZmVyID0gdHJ1ZTtcbiAgICByZXR1cm4gYnVmO1xufVxuXG52YXIgbGFzdFN0ciwgbGFzdFN0ckVuY29kZWQ7XG5cbkJ1ZmZlck1ldGhvZHMgPSB7XG4gICAgcmVhZFVJbnQzMkxFOiBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgcmV0dXJuICgodGhpc1twb3NdKSB8XG4gICAgICAgICAgICAodGhpc1twb3MgKyAxXSA8PCA4KSB8XG4gICAgICAgICAgICAodGhpc1twb3MgKyAyXSA8PCAxNikpICtcbiAgICAgICAgICAgICh0aGlzW3BvcyArIDNdICogMHgxMDAwMDAwKTtcbiAgICB9LFxuXG4gICAgd3JpdGVVSW50MzJMRTogZnVuY3Rpb24odmFsLCBwb3MpIHtcbiAgICAgICAgdGhpc1twb3NdID0gdmFsO1xuICAgICAgICB0aGlzW3BvcyArIDFdID0gKHZhbCA+Pj4gOCk7XG4gICAgICAgIHRoaXNbcG9zICsgMl0gPSAodmFsID4+PiAxNik7XG4gICAgICAgIHRoaXNbcG9zICsgM10gPSAodmFsID4+PiAyNCk7XG4gICAgfSxcblxuICAgIHJlYWRJbnQzMkxFOiBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgcmV0dXJuICgodGhpc1twb3NdKSB8XG4gICAgICAgICAgICAodGhpc1twb3MgKyAxXSA8PCA4KSB8XG4gICAgICAgICAgICAodGhpc1twb3MgKyAyXSA8PCAxNikpICtcbiAgICAgICAgICAgICh0aGlzW3BvcyArIDNdIDw8IDI0KTtcbiAgICB9LFxuXG4gICAgcmVhZEZsb2F0TEU6ICBmdW5jdGlvbihwb3MpIHsgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBwb3MsIHRydWUsIDIzLCA0KTsgfSxcbiAgICByZWFkRG91YmxlTEU6IGZ1bmN0aW9uKHBvcykgeyByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIHBvcywgdHJ1ZSwgNTIsIDgpOyB9LFxuXG4gICAgd3JpdGVGbG9hdExFOiAgZnVuY3Rpb24odmFsLCBwb3MpIHsgcmV0dXJuIGllZWU3NTQud3JpdGUodGhpcywgdmFsLCBwb3MsIHRydWUsIDIzLCA0KTsgfSxcbiAgICB3cml0ZURvdWJsZUxFOiBmdW5jdGlvbih2YWwsIHBvcykgeyByZXR1cm4gaWVlZTc1NC53cml0ZSh0aGlzLCB2YWwsIHBvcywgdHJ1ZSwgNTIsIDgpOyB9LFxuXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gICAgICAgIHZhciBzdHIgPSAnJyxcbiAgICAgICAgICAgIHRtcCA9ICcnO1xuXG4gICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgICAgICAgZW5kID0gTWF0aC5taW4odGhpcy5sZW5ndGgsIGVuZCB8fCB0aGlzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaCA9IHRoaXNbaV07XG4gICAgICAgICAgICBpZiAoY2ggPD0gMHg3Rikge1xuICAgICAgICAgICAgICAgIHN0ciArPSBkZWNvZGVVUklDb21wb25lbnQodG1wKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIHRtcCA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0bXAgKz0gJyUnICsgY2gudG9TdHJpbmcoMTYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IGRlY29kZVVSSUNvbXBvbmVudCh0bXApO1xuXG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfSxcblxuICAgIHdyaXRlOiBmdW5jdGlvbihzdHIsIHBvcykge1xuICAgICAgICB2YXIgYnl0ZXMgPSBzdHIgPT09IGxhc3RTdHIgPyBsYXN0U3RyRW5jb2RlZCA6IGVuY29kZVN0cmluZyhzdHIpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzW3BvcyArIGldID0gYnl0ZXNbaV07XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2xpY2U6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZCk7XG4gICAgfSxcblxuICAgIGNvcHk6IGZ1bmN0aW9uKGJ1ZiwgcG9zKSB7XG4gICAgICAgIHBvcyA9IHBvcyB8fCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJ1Zltwb3MgKyBpXSA9IHRoaXNbaV07XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5CdWZmZXJNZXRob2RzLndyaXRlSW50MzJMRSA9IEJ1ZmZlck1ldGhvZHMud3JpdGVVSW50MzJMRTtcblxuQnVmZmVyLmJ5dGVMZW5ndGggPSBmdW5jdGlvbihzdHIpIHtcbiAgICBsYXN0U3RyID0gc3RyO1xuICAgIGxhc3RTdHJFbmNvZGVkID0gZW5jb2RlU3RyaW5nKHN0cik7XG4gICAgcmV0dXJuIGxhc3RTdHJFbmNvZGVkLmxlbmd0aDtcbn07XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHJldHVybiAhIShidWYgJiYgYnVmLl9pc0J1ZmZlcik7XG59O1xuXG5mdW5jdGlvbiBlbmNvZGVTdHJpbmcoc3RyKSB7XG4gICAgdmFyIGxlbmd0aCA9IHN0ci5sZW5ndGgsXG4gICAgICAgIGJ5dGVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgYywgbGVhZDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKTsgLy8gY29kZSBwb2ludFxuXG4gICAgICAgIGlmIChjID4gMHhEN0ZGICYmIGMgPCAweEUwMDApIHtcblxuICAgICAgICAgICAgaWYgKGxlYWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoYyA8IDB4REMwMCkge1xuICAgICAgICAgICAgICAgICAgICBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpO1xuICAgICAgICAgICAgICAgICAgICBsZWFkID0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjID0gbGVhZCAtIDB4RDgwMCA8PCAxMCB8IGMgLSAweERDMDAgfCAweDEwMDAwO1xuICAgICAgICAgICAgICAgICAgICBsZWFkID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGMgPiAweERCRkYgfHwgKGkgKyAxID09PSBsZW5ndGgpKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpO1xuICAgICAgICAgICAgICAgIGVsc2UgbGVhZCA9IGM7XG5cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKGxlYWQpIHtcbiAgICAgICAgICAgIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRCk7XG4gICAgICAgICAgICBsZWFkID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHg4MCkgYnl0ZXMucHVzaChjKTtcbiAgICAgICAgZWxzZSBpZiAoYyA8IDB4ODAwKSBieXRlcy5wdXNoKGMgPj4gMHg2IHwgMHhDMCwgYyAmIDB4M0YgfCAweDgwKTtcbiAgICAgICAgZWxzZSBpZiAoYyA8IDB4MTAwMDApIGJ5dGVzLnB1c2goYyA+PiAweEMgfCAweEUwLCBjID4+IDB4NiAmIDB4M0YgfCAweDgwLCBjICYgMHgzRiB8IDB4ODApO1xuICAgICAgICBlbHNlIGJ5dGVzLnB1c2goYyA+PiAweDEyIHwgMHhGMCwgYyA+PiAweEMgJiAweDNGIHwgMHg4MCwgYyA+PiAweDYgJiAweDNGIHwgMHg4MCwgYyAmIDB4M0YgfCAweDgwKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ5dGVzO1xufVxuIiwiKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBiZjtcblxudmFyIEJ1ZmZlciA9IGdsb2JhbC5CdWZmZXIgfHwgcmVxdWlyZSgnLi9idWZmZXInKTtcblxuZnVuY3Rpb24gUGJmKGJ1Zikge1xuICAgIHRoaXMuYnVmID0gIUJ1ZmZlci5pc0J1ZmZlcihidWYpID8gbmV3IEJ1ZmZlcihidWYgfHwgMCkgOiBidWY7XG4gICAgdGhpcy5wb3MgPSAwO1xuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5idWYubGVuZ3RoO1xufVxuXG5QYmYuVmFyaW50ICA9IDA7IC8vIHZhcmludDogaW50MzIsIGludDY0LCB1aW50MzIsIHVpbnQ2NCwgc2ludDMyLCBzaW50NjQsIGJvb2wsIGVudW1cblBiZi5GaXhlZDY0ID0gMTsgLy8gNjQtYml0OiBkb3VibGUsIGZpeGVkNjQsIHNmaXhlZDY0XG5QYmYuQnl0ZXMgICA9IDI7IC8vIGxlbmd0aC1kZWxpbWl0ZWQ6IHN0cmluZywgYnl0ZXMsIGVtYmVkZGVkIG1lc3NhZ2VzLCBwYWNrZWQgcmVwZWF0ZWQgZmllbGRzXG5QYmYuRml4ZWQzMiA9IDU7IC8vIDMyLWJpdDogZmxvYXQsIGZpeGVkMzIsIHNmaXhlZDMyXG5cbnZhciBTSElGVF9MRUZUXzMyID0gKDEgPDwgMTYpICogKDEgPDwgMTYpLFxuICAgIFNISUZUX1JJR0hUXzMyID0gMSAvIFNISUZUX0xFRlRfMzIsXG4gICAgUE9XXzJfNjMgPSBNYXRoLnBvdygyLCA2Myk7XG5cblBiZi5wcm90b3R5cGUgPSB7XG5cbiAgICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5idWYgPSBudWxsO1xuICAgIH0sXG5cbiAgICAvLyA9PT0gUkVBRElORyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgcmVhZEZpZWxkczogZnVuY3Rpb24ocmVhZEZpZWxkLCByZXN1bHQsIGVuZCkge1xuICAgICAgICBlbmQgPSBlbmQgfHwgdGhpcy5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5yZWFkVmFyaW50KCksXG4gICAgICAgICAgICAgICAgdGFnID0gdmFsID4+IDMsXG4gICAgICAgICAgICAgICAgc3RhcnRQb3MgPSB0aGlzLnBvcztcblxuICAgICAgICAgICAgcmVhZEZpZWxkKHRhZywgcmVzdWx0LCB0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBzdGFydFBvcykgdGhpcy5za2lwKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcmVhZE1lc3NhZ2U6IGZ1bmN0aW9uKHJlYWRGaWVsZCwgcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRGaWVsZHMocmVhZEZpZWxkLCByZXN1bHQsIHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MpO1xuICAgIH0sXG5cbiAgICByZWFkRml4ZWQzMjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmJ1Zi5yZWFkVUludDMyTEUodGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkU0ZpeGVkMzI6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gdGhpcy5idWYucmVhZEludDMyTEUodGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICAvLyA2NC1iaXQgaW50IGhhbmRsaW5nIGlzIGJhc2VkIG9uIGdpdGh1Yi5jb20vZHB3L25vZGUtYnVmZmVyLW1vcmUtaW50cyAoTUlULWxpY2Vuc2VkKVxuXG4gICAgcmVhZEZpeGVkNjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gdGhpcy5idWYucmVhZFVJbnQzMkxFKHRoaXMucG9zKSArIHRoaXMuYnVmLnJlYWRVSW50MzJMRSh0aGlzLnBvcyArIDQpICogU0hJRlRfTEVGVF8zMjtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZFNGaXhlZDY0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuYnVmLnJlYWRVSW50MzJMRSh0aGlzLnBvcykgKyB0aGlzLmJ1Zi5yZWFkSW50MzJMRSh0aGlzLnBvcyArIDQpICogU0hJRlRfTEVGVF8zMjtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZEZsb2F0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuYnVmLnJlYWRGbG9hdExFKHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZERvdWJsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmJ1Zi5yZWFkRG91YmxlTEUodGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkVmFyaW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGJ1ZiA9IHRoaXMuYnVmLFxuICAgICAgICAgICAgdmFsLCBiLCBiMCwgYjEsIGIyLCBiMztcblxuICAgICAgICBiMCA9IGJ1Zlt0aGlzLnBvcysrXTsgaWYgKGIwIDwgMHg4MCkgcmV0dXJuIGIwOyAgICAgICAgICAgICAgICAgYjAgPSBiMCAmIDB4N2Y7XG4gICAgICAgIGIxID0gYnVmW3RoaXMucG9zKytdOyBpZiAoYjEgPCAweDgwKSByZXR1cm4gYjAgfCBiMSA8PCA3OyAgICAgICBiMSA9IChiMSAmIDB4N2YpIDw8IDc7XG4gICAgICAgIGIyID0gYnVmW3RoaXMucG9zKytdOyBpZiAoYjIgPCAweDgwKSByZXR1cm4gYjAgfCBiMSB8IGIyIDw8IDE0OyBiMiA9IChiMiAmIDB4N2YpIDw8IDE0O1xuICAgICAgICBiMyA9IGJ1Zlt0aGlzLnBvcysrXTsgaWYgKGIzIDwgMHg4MCkgcmV0dXJuIGIwIHwgYjEgfCBiMiB8IGIzIDw8IDIxO1xuXG4gICAgICAgIHZhbCA9IGIwIHwgYjEgfCBiMiB8IChiMyAmIDB4N2YpIDw8IDIxO1xuXG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCArPSAoYiAmIDB4N2YpICogMHgxMDAwMDAwMDsgICAgICAgICBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCArPSAoYiAmIDB4N2YpICogMHg4MDAwMDAwMDA7ICAgICAgICBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCArPSAoYiAmIDB4N2YpICogMHg0MDAwMDAwMDAwMDsgICAgICBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCArPSAoYiAmIDB4N2YpICogMHgyMDAwMDAwMDAwMDAwOyAgICBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCArPSAoYiAmIDB4N2YpICogMHgxMDAwMDAwMDAwMDAwMDA7ICBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCArPSAoYiAmIDB4N2YpICogMHg4MDAwMDAwMDAwMDAwMDAwOyBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB2YXJpbnQgbm90IG1vcmUgdGhhbiAxMCBieXRlcycpO1xuICAgIH0sXG5cbiAgICByZWFkVmFyaW50NjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnBvcyxcbiAgICAgICAgICAgIHZhbCA9IHRoaXMucmVhZFZhcmludCgpO1xuXG4gICAgICAgIGlmICh2YWwgPCBQT1dfMl82MykgcmV0dXJuIHZhbDtcblxuICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3MgLSAyO1xuICAgICAgICB3aGlsZSAodGhpcy5idWZbcG9zXSA9PT0gMHhmZikgcG9zLS07XG4gICAgICAgIGlmIChwb3MgPCBzdGFydFBvcykgcG9zID0gc3RhcnRQb3M7XG5cbiAgICAgICAgdmFsID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3MgLSBzdGFydFBvcyArIDE7IGkrKykge1xuICAgICAgICAgICAgdmFyIGIgPSB+dGhpcy5idWZbc3RhcnRQb3MgKyBpXSAmIDB4N2Y7XG4gICAgICAgICAgICB2YWwgKz0gaSA8IDQgPyBiIDw8IGkgKiA3IDogYiAqIE1hdGgucG93KDIsIGkgKiA3KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAtdmFsIC0gMTtcbiAgICB9LFxuXG4gICAgcmVhZFNWYXJpbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbnVtID0gdGhpcy5yZWFkVmFyaW50KCk7XG4gICAgICAgIHJldHVybiBudW0gJSAyID09PSAxID8gKG51bSArIDEpIC8gLTIgOiBudW0gLyAyOyAvLyB6aWd6YWcgZW5jb2RpbmdcbiAgICB9LFxuXG4gICAgcmVhZEJvb2xlYW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnJlYWRWYXJpbnQoKSk7XG4gICAgfSxcblxuICAgIHJlYWRTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcyxcbiAgICAgICAgICAgIHN0ciA9IHRoaXMuYnVmLnRvU3RyaW5nKCd1dGY4JywgdGhpcy5wb3MsIGVuZCk7XG4gICAgICAgIHRoaXMucG9zID0gZW5kO1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH0sXG5cbiAgICByZWFkQnl0ZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcyxcbiAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuYnVmLnNsaWNlKHRoaXMucG9zLCBlbmQpO1xuICAgICAgICB0aGlzLnBvcyA9IGVuZDtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9LFxuXG4gICAgLy8gdmVyYm9zZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczsgZG9lc24ndCBhZmZlY3QgZ3ppcHBlZCBzaXplXG5cbiAgICByZWFkUGFja2VkVmFyaW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MsIGFyciA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZFZhcmludCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRTVmFyaW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MsIGFyciA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkQm9vbGVhbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zLCBhcnIgPSBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRCb29sZWFuKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZEZsb2F0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MsIGFyciA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZEZsb2F0KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZERvdWJsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zLCBhcnIgPSBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWREb3VibGUoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRml4ZWQzMjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zLCBhcnIgPSBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRGaXhlZDMyKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZFNGaXhlZDMyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MsIGFyciA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZFNGaXhlZDMyKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZEZpeGVkNjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcywgYXJyID0gW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRml4ZWQ2NCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRTRml4ZWQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zLCBhcnIgPSBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRTRml4ZWQ2NCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuXG4gICAgc2tpcDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHZhciB0eXBlID0gdmFsICYgMHg3O1xuICAgICAgICBpZiAodHlwZSA9PT0gUGJmLlZhcmludCkgd2hpbGUgKHRoaXMuYnVmW3RoaXMucG9zKytdID4gMHg3Zikge31cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gUGJmLkJ5dGVzKSB0aGlzLnBvcyA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3M7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFBiZi5GaXhlZDMyKSB0aGlzLnBvcyArPSA0O1xuICAgICAgICBlbHNlIGlmICh0eXBlID09PSBQYmYuRml4ZWQ2NCkgdGhpcy5wb3MgKz0gODtcbiAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ1VuaW1wbGVtZW50ZWQgdHlwZTogJyArIHR5cGUpO1xuICAgIH0sXG5cbiAgICAvLyA9PT0gV1JJVElORyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgd3JpdGVUYWc6IGZ1bmN0aW9uKHRhZywgdHlwZSkge1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KCh0YWcgPDwgMykgfCB0eXBlKTtcbiAgICB9LFxuXG4gICAgcmVhbGxvYzogZnVuY3Rpb24obWluKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8fCAxNjtcblxuICAgICAgICB3aGlsZSAobGVuZ3RoIDwgdGhpcy5wb3MgKyBtaW4pIGxlbmd0aCAqPSAyO1xuXG4gICAgICAgIGlmIChsZW5ndGggIT09IHRoaXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihsZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5idWYuY29weShidWYpO1xuICAgICAgICAgICAgdGhpcy5idWYgPSBidWY7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMucG9zO1xuICAgICAgICB0aGlzLnBvcyA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Zi5zbGljZSgwLCB0aGlzLmxlbmd0aCk7XG4gICAgfSxcblxuICAgIHdyaXRlRml4ZWQzMjogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg0KTtcbiAgICAgICAgdGhpcy5idWYud3JpdGVVSW50MzJMRSh2YWwsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICB9LFxuXG4gICAgd3JpdGVTRml4ZWQzMjogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg0KTtcbiAgICAgICAgdGhpcy5idWYud3JpdGVJbnQzMkxFKHZhbCwgdGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgIH0sXG5cbiAgICB3cml0ZUZpeGVkNjQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoOCk7XG4gICAgICAgIHRoaXMuYnVmLndyaXRlSW50MzJMRSh2YWwgJiAtMSwgdGhpcy5wb3MpO1xuICAgICAgICB0aGlzLmJ1Zi53cml0ZVVJbnQzMkxFKE1hdGguZmxvb3IodmFsICogU0hJRlRfUklHSFRfMzIpLCB0aGlzLnBvcyArIDQpO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgIH0sXG5cbiAgICB3cml0ZVNGaXhlZDY0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDgpO1xuICAgICAgICB0aGlzLmJ1Zi53cml0ZUludDMyTEUodmFsICYgLTEsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5idWYud3JpdGVJbnQzMkxFKE1hdGguZmxvb3IodmFsICogU0hJRlRfUklHSFRfMzIpLCB0aGlzLnBvcyArIDQpO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgIH0sXG5cbiAgICB3cml0ZVZhcmludDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHZhbCA9ICt2YWw7XG5cbiAgICAgICAgaWYgKHZhbCA8PSAweDdmKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWxsb2MoMSk7XG4gICAgICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9IHZhbDtcblxuICAgICAgICB9IGVsc2UgaWYgKHZhbCA8PSAweDNmZmYpIHtcbiAgICAgICAgICAgIHRoaXMucmVhbGxvYygyKTtcbiAgICAgICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gKCh2YWwgPj4+IDApICYgMHg3ZikgfCAweDgwO1xuICAgICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAoKHZhbCA+Pj4gNykgJiAweDdmKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHZhbCA8PSAweDFmZmZmZikge1xuICAgICAgICAgICAgdGhpcy5yZWFsbG9jKDMpO1xuICAgICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAoKHZhbCA+Pj4gMCkgJiAweDdmKSB8IDB4ODA7XG4gICAgICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICgodmFsID4+PiA3KSAmIDB4N2YpIHwgMHg4MDtcbiAgICAgICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gKCh2YWwgPj4+IDE0KSAmIDB4N2YpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodmFsIDw9IDB4ZmZmZmZmZikge1xuICAgICAgICAgICAgdGhpcy5yZWFsbG9jKDQpO1xuICAgICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAoKHZhbCA+Pj4gMCkgJiAweDdmKSB8IDB4ODA7XG4gICAgICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICgodmFsID4+PiA3KSAmIDB4N2YpIHwgMHg4MDtcbiAgICAgICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gKCh2YWwgPj4+IDE0KSAmIDB4N2YpIHwgMHg4MDtcbiAgICAgICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gKCh2YWwgPj4+IDIxKSAmIDB4N2YpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3M7XG4gICAgICAgICAgICB3aGlsZSAodmFsID49IDB4ODApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWxsb2MoMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAodmFsICYgMHhmZikgfCAweDgwO1xuICAgICAgICAgICAgICAgIHZhbCAvPSAweDgwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWFsbG9jKDEpO1xuICAgICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSB2YWwgfCAwO1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zIC0gcG9zID4gMTApIHRocm93IG5ldyBFcnJvcignR2l2ZW4gdmFyaW50IGRvZXNuXFwndCBmaXQgaW50byAxMCBieXRlcycpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHdyaXRlU1ZhcmludDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQodmFsIDwgMCA/IC12YWwgKiAyIC0gMSA6IHZhbCAqIDIpO1xuICAgIH0sXG5cbiAgICB3cml0ZUJvb2xlYW46IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KEJvb2xlYW4odmFsKSk7XG4gICAgfSxcblxuICAgIHdyaXRlU3RyaW5nOiBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgc3RyID0gU3RyaW5nKHN0cik7XG4gICAgICAgIHZhciBieXRlcyA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHN0cik7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQoYnl0ZXMpO1xuICAgICAgICB0aGlzLnJlYWxsb2MoYnl0ZXMpO1xuICAgICAgICB0aGlzLmJ1Zi53cml0ZShzdHIsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gYnl0ZXM7XG4gICAgfSxcblxuICAgIHdyaXRlRmxvYXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG4gICAgICAgIHRoaXMuYnVmLndyaXRlRmxvYXRMRSh2YWwsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICB9LFxuXG4gICAgd3JpdGVEb3VibGU6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoOCk7XG4gICAgICAgIHRoaXMuYnVmLndyaXRlRG91YmxlTEUodmFsLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgfSxcblxuICAgIHdyaXRlQnl0ZXM6IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICAgICAgICB2YXIgbGVuID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludChsZW4pO1xuICAgICAgICB0aGlzLnJlYWxsb2MobGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgdGhpcy5idWZbdGhpcy5wb3MrK10gPSBidWZmZXJbaV07XG4gICAgfSxcblxuICAgIHdyaXRlTWVzc2FnZTogZnVuY3Rpb24odGFnLCBmbiwgb2JqKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuQnl0ZXMpO1xuXG4gICAgICAgIHRoaXMucG9zKys7IC8vIHJlc2VydmUgMSBieXRlIGZvciBzaG9ydCBtZXNzYWdlIGxlbmd0aFxuXG4gICAgICAgIC8vIHdyaXRlIHRoZSBtZXNzYWdlIGRpcmVjdGx5IHRvIHRoZSBidWZmZXIgYW5kIHNlZSBob3cgbXVjaCB3YXMgd3JpdHRlblxuICAgICAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnBvcztcbiAgICAgICAgZm4ob2JqLCB0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMucG9zIC0gc3RhcnRQb3M7XG5cbiAgICAgICAgdmFyIHZhcmludExlbiA9XG4gICAgICAgICAgICBsZW4gPD0gMHg3ZiA/IDEgOlxuICAgICAgICAgICAgbGVuIDw9IDB4M2ZmZiA/IDIgOlxuICAgICAgICAgICAgbGVuIDw9IDB4MWZmZmZmID8gMyA6XG4gICAgICAgICAgICBsZW4gPD0gMHhmZmZmZmZmID8gNCA6IE1hdGguY2VpbChNYXRoLmxvZyhsZW4pIC8gKE1hdGguTE4yICogNykpO1xuXG4gICAgICAgIC8vIGlmIDEgYnl0ZSBpc24ndCBlbm91Z2ggZm9yIGVuY29kaW5nIG1lc3NhZ2UgbGVuZ3RoLCBzaGlmdCB0aGUgZGF0YSB0byB0aGUgcmlnaHRcbiAgICAgICAgaWYgKHZhcmludExlbiA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMucmVhbGxvYyh2YXJpbnRMZW4gLSAxKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnBvcyAtIDE7IGkgPj0gc3RhcnRQb3M7IGktLSkgdGhpcy5idWZbaSArIHZhcmludExlbiAtIDFdID0gdGhpcy5idWZbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaW5hbGx5LCB3cml0ZSB0aGUgbWVzc2FnZSBsZW5ndGggaW4gdGhlIHJlc2VydmVkIHBsYWNlIGFuZCByZXN0b3JlIHRoZSBwb3NpdGlvblxuICAgICAgICB0aGlzLnBvcyA9IHN0YXJ0UG9zIC0gMTtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludChsZW4pO1xuICAgICAgICB0aGlzLnBvcyArPSBsZW47XG4gICAgfSxcblxuICAgIHdyaXRlUGFja2VkVmFyaW50OiAgIGZ1bmN0aW9uKHRhZywgYXJyKSB7IHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRWYXJpbnQsIGFycik7ICAgfSxcbiAgICB3cml0ZVBhY2tlZFNWYXJpbnQ6ICBmdW5jdGlvbih0YWcsIGFycikgeyB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkU1ZhcmludCwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRCb29sZWFuOiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZEJvb2xlYW4sIGFycik7ICB9LFxuICAgIHdyaXRlUGFja2VkRmxvYXQ6ICAgIGZ1bmN0aW9uKHRhZywgYXJyKSB7IHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRGbG9hdCwgYXJyKTsgICAgfSxcbiAgICB3cml0ZVBhY2tlZERvdWJsZTogICBmdW5jdGlvbih0YWcsIGFycikgeyB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRG91YmxlLCBhcnIpOyAgIH0sXG4gICAgd3JpdGVQYWNrZWRGaXhlZDMyOiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZEZpeGVkMzIsIGFycik7ICB9LFxuICAgIHdyaXRlUGFja2VkU0ZpeGVkMzI6IGZ1bmN0aW9uKHRhZywgYXJyKSB7IHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRTRml4ZWQzMiwgYXJyKTsgfSxcbiAgICB3cml0ZVBhY2tlZEZpeGVkNjQ6ICBmdW5jdGlvbih0YWcsIGFycikgeyB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRml4ZWQ2NCwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRTRml4ZWQ2NDogZnVuY3Rpb24odGFnLCBhcnIpIHsgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFNGaXhlZDY0LCBhcnIpOyB9LFxuXG4gICAgd3JpdGVCeXRlc0ZpZWxkOiBmdW5jdGlvbih0YWcsIGJ1ZmZlcikge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkJ5dGVzKTtcbiAgICAgICAgdGhpcy53cml0ZUJ5dGVzKGJ1ZmZlcik7XG4gICAgfSxcbiAgICB3cml0ZUZpeGVkMzJGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDMyKTtcbiAgICAgICAgdGhpcy53cml0ZUZpeGVkMzIodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlU0ZpeGVkMzJGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDMyKTtcbiAgICAgICAgdGhpcy53cml0ZVNGaXhlZDMyKHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZUZpeGVkNjRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDY0KTtcbiAgICAgICAgdGhpcy53cml0ZUZpeGVkNjQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlU0ZpeGVkNjRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDY0KTtcbiAgICAgICAgdGhpcy53cml0ZVNGaXhlZDY0KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVZhcmludEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLlZhcmludCk7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlU1ZhcmludEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLlZhcmludCk7XG4gICAgICAgIHRoaXMud3JpdGVTVmFyaW50KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVN0cmluZ0ZpZWxkOiBmdW5jdGlvbih0YWcsIHN0cikge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkJ5dGVzKTtcbiAgICAgICAgdGhpcy53cml0ZVN0cmluZyhzdHIpO1xuICAgIH0sXG4gICAgd3JpdGVGbG9hdEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkMzIpO1xuICAgICAgICB0aGlzLndyaXRlRmxvYXQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlRG91YmxlRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQ2NCk7XG4gICAgICAgIHRoaXMud3JpdGVEb3VibGUodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlQm9vbGVhbkZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50RmllbGQodGFnLCBCb29sZWFuKHZhbCkpO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIHdyaXRlUGFja2VkVmFyaW50KGFyciwgcGJmKSAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVZhcmludChhcnJbaV0pOyAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU1ZhcmludChhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNWYXJpbnQoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRmxvYXQoYXJyLCBwYmYpICAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZsb2F0KGFycltpXSk7ICAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRG91YmxlKGFyciwgcGJmKSAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZURvdWJsZShhcnJbaV0pOyAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkQm9vbGVhbihhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUJvb2xlYW4oYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRml4ZWQzMihhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZpeGVkMzIoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU0ZpeGVkMzIoYXJyLCBwYmYpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNGaXhlZDMyKGFycltpXSk7IH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRml4ZWQ2NChhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZpeGVkNjQoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU0ZpeGVkNjQoYXJyLCBwYmYpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNGaXhlZDY0KGFycltpXSk7IH1cblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5d1ltWXZhVzVrWlhndWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SW5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VHSm1PMXh1WEc1MllYSWdRblZtWm1WeUlEMGdaMnh2WW1Gc0xrSjFabVpsY2lCOGZDQnlaWEYxYVhKbEtDY3VMMkoxWm1abGNpY3BPMXh1WEc1bWRXNWpkR2x2YmlCUVltWW9ZblZtS1NCN1hHNGdJQ0FnZEdocGN5NWlkV1lnUFNBaFFuVm1abVZ5TG1selFuVm1abVZ5S0dKMVppa2dQeUJ1WlhjZ1FuVm1abVZ5S0dKMVppQjhmQ0F3S1NBNklHSjFaanRjYmlBZ0lDQjBhR2x6TG5CdmN5QTlJREE3WEc0Z0lDQWdkR2hwY3k1c1pXNW5kR2dnUFNCMGFHbHpMbUoxWmk1c1pXNW5kR2c3WEc1OVhHNWNibEJpWmk1V1lYSnBiblFnSUQwZ01Ec2dMeThnZG1GeWFXNTBPaUJwYm5Rek1pd2dhVzUwTmpRc0lIVnBiblF6TWl3Z2RXbHVkRFkwTENCemFXNTBNeklzSUhOcGJuUTJOQ3dnWW05dmJDd2daVzUxYlZ4dVVHSm1Ma1pwZUdWa05qUWdQU0F4T3lBdkx5QTJOQzFpYVhRNklHUnZkV0pzWlN3Z1ptbDRaV1EyTkN3Z2MyWnBlR1ZrTmpSY2JsQmlaaTVDZVhSbGN5QWdJRDBnTWpzZ0x5OGdiR1Z1WjNSb0xXUmxiR2x0YVhSbFpEb2djM1J5YVc1bkxDQmllWFJsY3l3Z1pXMWlaV1JrWldRZ2JXVnpjMkZuWlhNc0lIQmhZMnRsWkNCeVpYQmxZWFJsWkNCbWFXVnNaSE5jYmxCaVppNUdhWGhsWkRNeUlEMGdOVHNnTHk4Z016SXRZbWwwT2lCbWJHOWhkQ3dnWm1sNFpXUXpNaXdnYzJacGVHVmtNekpjYmx4dWRtRnlJRk5JU1VaVVgweEZSbFJmTXpJZ1BTQW9NU0E4UENBeE5pa2dLaUFvTVNBOFBDQXhOaWtzWEc0Z0lDQWdVMGhKUmxSZlVrbEhTRlJmTXpJZ1BTQXhJQzhnVTBoSlJsUmZURVZHVkY4ek1peGNiaUFnSUNCUVQxZGZNbDgyTXlBOUlFMWhkR2d1Y0c5M0tESXNJRFl6S1R0Y2JseHVVR0ptTG5CeWIzUnZkSGx3WlNBOUlIdGNibHh1SUNBZ0lHUmxjM1J5YjNrNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtSjFaaUE5SUc1MWJHdzdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lDOHZJRDA5UFNCU1JVRkVTVTVISUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNWNiaUFnSUNCeVpXRmtSbWxsYkdSek9pQm1kVzVqZEdsdmJpaHlaV0ZrUm1sbGJHUXNJSEpsYzNWc2RDd2daVzVrS1NCN1hHNGdJQ0FnSUNBZ0lHVnVaQ0E5SUdWdVpDQjhmQ0IwYUdsekxteGxibWQwYUR0Y2JseHVJQ0FnSUNBZ0lDQjNhR2xzWlNBb2RHaHBjeTV3YjNNZ1BDQmxibVFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCMllXd2dQU0IwYUdsekxuSmxZV1JXWVhKcGJuUW9LU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwWVdjZ1BTQjJZV3dnUGo0Z015eGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkR0Z5ZEZCdmN5QTlJSFJvYVhNdWNHOXpPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaV0ZrUm1sbGJHUW9kR0ZuTENCeVpYTjFiSFFzSUhSb2FYTXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXdiM01nUFQwOUlITjBZWEowVUc5ektTQjBhR2x6TG5OcmFYQW9kbUZzS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTzF4dUlDQWdJSDBzWEc1Y2JpQWdJQ0J5WldGa1RXVnpjMkZuWlRvZ1puVnVZM1JwYjI0b2NtVmhaRVpwWld4a0xDQnlaWE4xYkhRcElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11Y21WaFpFWnBaV3hrY3loeVpXRmtSbWxsYkdRc0lISmxjM1ZzZEN3Z2RHaHBjeTV5WldGa1ZtRnlhVzUwS0NrZ0t5QjBhR2x6TG5CdmN5azdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lISmxZV1JHYVhobFpETXlPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJSFpoYkNBOUlIUm9hWE11WW5WbUxuSmxZV1JWU1c1ME16Sk1SU2gwYUdsekxuQnZjeWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6SUNzOUlEUTdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjJZV3c3WEc0Z0lDQWdmU3hjYmx4dUlDQWdJSEpsWVdSVFJtbDRaV1F6TWpvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCMllXd2dQU0IwYUdsekxtSjFaaTV5WldGa1NXNTBNekpNUlNoMGFHbHpMbkJ2Y3lrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y0c5eklDczlJRFE3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIyWVd3N1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUM4dklEWTBMV0pwZENCcGJuUWdhR0Z1Wkd4cGJtY2dhWE1nWW1GelpXUWdiMjRnWjJsMGFIVmlMbU52YlM5a2NIY3ZibTlrWlMxaWRXWm1aWEl0Ylc5eVpTMXBiblJ6SUNoTlNWUXRiR2xqWlc1elpXUXBYRzVjYmlBZ0lDQnlaV0ZrUm1sNFpXUTJORG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUIyWVd3Z1BTQjBhR2x6TG1KMVppNXlaV0ZrVlVsdWRETXlURVVvZEdocGN5NXdiM01wSUNzZ2RHaHBjeTVpZFdZdWNtVmhaRlZKYm5Rek1reEZLSFJvYVhNdWNHOXpJQ3NnTkNrZ0tpQlRTRWxHVkY5TVJVWlVYek15TzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ2Y3lBclBTQTRPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkbUZzTzF4dUlDQWdJSDBzWEc1Y2JpQWdJQ0J5WldGa1UwWnBlR1ZrTmpRNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2RtRnNJRDBnZEdocGN5NWlkV1l1Y21WaFpGVkpiblF6TWt4RktIUm9hWE11Y0c5ektTQXJJSFJvYVhNdVluVm1MbkpsWVdSSmJuUXpNa3hGS0hSb2FYTXVjRzl6SUNzZ05Da2dLaUJUU0VsR1ZGOU1SVVpVWHpNeU8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CdmN5QXJQU0E0TzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZG1Gc08xeHVJQ0FnSUgwc1hHNWNiaUFnSUNCeVpXRmtSbXh2WVhRNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2RtRnNJRDBnZEdocGN5NWlkV1l1Y21WaFpFWnNiMkYwVEVVb2RHaHBjeTV3YjNNcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CdmN5QXJQU0EwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZG1Gc08xeHVJQ0FnSUgwc1hHNWNiaUFnSUNCeVpXRmtSRzkxWW14bE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlIWmhiQ0E5SUhSb2FYTXVZblZtTG5KbFlXUkViM1ZpYkdWTVJTaDBhR2x6TG5CdmN5azdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHOXpJQ3M5SURnN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMllXdzdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lISmxZV1JXWVhKcGJuUTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNCMllYSWdZblZtSUQwZ2RHaHBjeTVpZFdZc1hHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVd3c0lHSXNJR0l3TENCaU1Td2dZaklzSUdJek8xeHVYRzRnSUNBZ0lDQWdJR0l3SUQwZ1luVm1XM1JvYVhNdWNHOXpLeXRkT3lCcFppQW9ZakFnUENBd2VEZ3dLU0J5WlhSMWNtNGdZakE3SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JpTUNBOUlHSXdJQ1lnTUhnM1pqdGNiaUFnSUNBZ0lDQWdZakVnUFNCaWRXWmJkR2hwY3k1d2IzTXJLMTA3SUdsbUlDaGlNU0E4SURCNE9EQXBJSEpsZEhWeWJpQmlNQ0I4SUdJeElEdzhJRGM3SUNBZ0lDQWdJR0l4SUQwZ0tHSXhJQ1lnTUhnM1ppa2dQRHdnTnp0Y2JpQWdJQ0FnSUNBZ1lqSWdQU0JpZFdaYmRHaHBjeTV3YjNNcksxMDdJR2xtSUNoaU1pQThJREI0T0RBcElISmxkSFZ5YmlCaU1DQjhJR0l4SUh3Z1lqSWdQRHdnTVRRN0lHSXlJRDBnS0dJeUlDWWdNSGczWmlrZ1BEd2dNVFE3WEc0Z0lDQWdJQ0FnSUdJeklEMGdZblZtVzNSb2FYTXVjRzl6S3l0ZE95QnBaaUFvWWpNZ1BDQXdlRGd3S1NCeVpYUjFjbTRnWWpBZ2ZDQmlNU0I4SUdJeUlId2dZak1nUER3Z01qRTdYRzVjYmlBZ0lDQWdJQ0FnZG1Gc0lEMGdZakFnZkNCaU1TQjhJR0l5SUh3Z0tHSXpJQ1lnTUhnM1ppa2dQRHdnTWpFN1hHNWNiaUFnSUNBZ0lDQWdZaUE5SUdKMVpsdDBhR2x6TG5CdmN5c3JYVHNnZG1Gc0lDczlJQ2hpSUNZZ01IZzNaaWtnS2lBd2VERXdNREF3TURBd095QWdJQ0FnSUNBZ0lHbG1JQ2hpSUR3Z01IZzRNQ2tnY21WMGRYSnVJSFpoYkR0Y2JpQWdJQ0FnSUNBZ1lpQTlJR0oxWmx0MGFHbHpMbkJ2Y3lzclhUc2dkbUZzSUNzOUlDaGlJQ1lnTUhnM1ppa2dLaUF3ZURnd01EQXdNREF3TURzZ0lDQWdJQ0FnSUdsbUlDaGlJRHdnTUhnNE1Da2djbVYwZFhKdUlIWmhiRHRjYmlBZ0lDQWdJQ0FnWWlBOUlHSjFabHQwYUdsekxuQnZjeXNyWFRzZ2RtRnNJQ3M5SUNoaUlDWWdNSGczWmlrZ0tpQXdlRFF3TURBd01EQXdNREF3T3lBZ0lDQWdJR2xtSUNoaUlEd2dNSGc0TUNrZ2NtVjBkWEp1SUhaaGJEdGNiaUFnSUNBZ0lDQWdZaUE5SUdKMVpsdDBhR2x6TG5CdmN5c3JYVHNnZG1Gc0lDczlJQ2hpSUNZZ01IZzNaaWtnS2lBd2VESXdNREF3TURBd01EQXdNREE3SUNBZ0lHbG1JQ2hpSUR3Z01IZzRNQ2tnY21WMGRYSnVJSFpoYkR0Y2JpQWdJQ0FnSUNBZ1lpQTlJR0oxWmx0MGFHbHpMbkJ2Y3lzclhUc2dkbUZzSUNzOUlDaGlJQ1lnTUhnM1ppa2dLaUF3ZURFd01EQXdNREF3TURBd01EQXdNRHNnSUdsbUlDaGlJRHdnTUhnNE1Da2djbVYwZFhKdUlIWmhiRHRjYmlBZ0lDQWdJQ0FnWWlBOUlHSjFabHQwYUdsekxuQnZjeXNyWFRzZ2RtRnNJQ3M5SUNoaUlDWWdNSGczWmlrZ0tpQXdlRGd3TURBd01EQXdNREF3TURBd01EQTdJR2xtSUNoaUlEd2dNSGc0TUNrZ2NtVjBkWEp1SUhaaGJEdGNibHh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMFY0Y0dWamRHVmtJSFpoY21sdWRDQnViM1FnYlc5eVpTQjBhR0Z1SURFd0lHSjVkR1Z6SnlrN1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUhKbFlXUldZWEpwYm5RMk5Eb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQnpkR0Z5ZEZCdmN5QTlJSFJvYVhNdWNHOXpMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnNJRDBnZEdocGN5NXlaV0ZrVm1GeWFXNTBLQ2s3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLSFpoYkNBOElGQlBWMTh5WHpZektTQnlaWFIxY200Z2RtRnNPMXh1WEc0Z0lDQWdJQ0FnSUhaaGNpQndiM01nUFNCMGFHbHpMbkJ2Y3lBdElESTdYRzRnSUNBZ0lDQWdJSGRvYVd4bElDaDBhR2x6TG1KMVpsdHdiM05kSUQwOVBTQXdlR1ptS1NCd2IzTXRMVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIQnZjeUE4SUhOMFlYSjBVRzl6S1NCd2IzTWdQU0J6ZEdGeWRGQnZjenRjYmx4dUlDQWdJQ0FnSUNCMllXd2dQU0F3TzF4dUlDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElIQnZjeUF0SUhOMFlYSjBVRzl6SUNzZ01Uc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ1lpQTlJSDUwYUdsekxtSjFabHR6ZEdGeWRGQnZjeUFySUdsZElDWWdNSGczWmp0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoYkNBclBTQnBJRHdnTkNBL0lHSWdQRHdnYVNBcUlEY2dPaUJpSUNvZ1RXRjBhQzV3YjNjb01pd2dhU0FxSURjcE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJQzEyWVd3Z0xTQXhPMXh1SUNBZ0lIMHNYRzVjYmlBZ0lDQnlaV0ZrVTFaaGNtbHVkRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ1ZFcwZ1BTQjBhR2x6TG5KbFlXUldZWEpwYm5Rb0tUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHNTFiU0FsSURJZ1BUMDlJREVnUHlBb2JuVnRJQ3NnTVNrZ0x5QXRNaUE2SUc1MWJTQXZJREk3SUM4dklIcHBaM3BoWnlCbGJtTnZaR2x1WjF4dUlDQWdJSDBzWEc1Y2JpQWdJQ0J5WldGa1FtOXZiR1ZoYmpvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQkNiMjlzWldGdUtIUm9hWE11Y21WaFpGWmhjbWx1ZENncEtUdGNiaUFnSUNCOUxGeHVYRzRnSUNBZ2NtVmhaRk4wY21sdVp6b2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQmxibVFnUFNCMGFHbHpMbkpsWVdSV1lYSnBiblFvS1NBcklIUm9hWE11Y0c5ekxGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNSeUlEMGdkR2hwY3k1aWRXWXVkRzlUZEhKcGJtY29KM1YwWmpnbkxDQjBhR2x6TG5CdmN5d2daVzVrS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3YjNNZ1BTQmxibVE3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ6ZEhJN1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUhKbFlXUkNlWFJsY3pvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCbGJtUWdQU0IwYUdsekxuSmxZV1JXWVhKcGJuUW9LU0FySUhSb2FYTXVjRzl6TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZblZtWm1WeUlEMGdkR2hwY3k1aWRXWXVjMnhwWTJVb2RHaHBjeTV3YjNNc0lHVnVaQ2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6SUQwZ1pXNWtPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZblZtWm1WeU8xeHVJQ0FnSUgwc1hHNWNiaUFnSUNBdkx5QjJaWEppYjNObElHWnZjaUJ3WlhKbWIzSnRZVzVqWlNCeVpXRnpiMjV6T3lCa2IyVnpiaWQwSUdGbVptVmpkQ0JuZW1sd2NHVmtJSE5wZW1WY2JseHVJQ0FnSUhKbFlXUlFZV05yWldSV1lYSnBiblE2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnWlc1a0lEMGdkR2hwY3k1eVpXRmtWbUZ5YVc1MEtDa2dLeUIwYUdsekxuQnZjeXdnWVhKeUlEMGdXMTA3WEc0Z0lDQWdJQ0FnSUhkb2FXeGxJQ2gwYUdsekxuQnZjeUE4SUdWdVpDa2dZWEp5TG5CMWMyZ29kR2hwY3k1eVpXRmtWbUZ5YVc1MEtDa3BPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZWEp5TzF4dUlDQWdJSDBzWEc0Z0lDQWdjbVZoWkZCaFkydGxaRk5XWVhKcGJuUTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNCMllYSWdaVzVrSUQwZ2RHaHBjeTV5WldGa1ZtRnlhVzUwS0NrZ0t5QjBhR2x6TG5CdmN5d2dZWEp5SUQwZ1cxMDdYRzRnSUNBZ0lDQWdJSGRvYVd4bElDaDBhR2x6TG5CdmN5QThJR1Z1WkNrZ1lYSnlMbkIxYzJnb2RHaHBjeTV5WldGa1UxWmhjbWx1ZENncEtUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHRnljanRjYmlBZ0lDQjlMRnh1SUNBZ0lISmxZV1JRWVdOclpXUkNiMjlzWldGdU9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHVnVaQ0E5SUhSb2FYTXVjbVZoWkZaaGNtbHVkQ2dwSUNzZ2RHaHBjeTV3YjNNc0lHRnljaUE5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQjNhR2xzWlNBb2RHaHBjeTV3YjNNZ1BDQmxibVFwSUdGeWNpNXdkWE5vS0hSb2FYTXVjbVZoWkVKdmIyeGxZVzRvS1NrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCaGNuSTdYRzRnSUNBZ2ZTeGNiaUFnSUNCeVpXRmtVR0ZqYTJWa1JteHZZWFE2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnWlc1a0lEMGdkR2hwY3k1eVpXRmtWbUZ5YVc1MEtDa2dLeUIwYUdsekxuQnZjeXdnWVhKeUlEMGdXMTA3WEc0Z0lDQWdJQ0FnSUhkb2FXeGxJQ2gwYUdsekxuQnZjeUE4SUdWdVpDa2dZWEp5TG5CMWMyZ29kR2hwY3k1eVpXRmtSbXh2WVhRb0tTazdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmhjbkk3WEc0Z0lDQWdmU3hjYmlBZ0lDQnlaV0ZrVUdGamEyVmtSRzkxWW14bE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHVnVaQ0E5SUhSb2FYTXVjbVZoWkZaaGNtbHVkQ2dwSUNzZ2RHaHBjeTV3YjNNc0lHRnljaUE5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQjNhR2xzWlNBb2RHaHBjeTV3YjNNZ1BDQmxibVFwSUdGeWNpNXdkWE5vS0hSb2FYTXVjbVZoWkVSdmRXSnNaU2dwS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGeWNqdGNiaUFnSUNCOUxGeHVJQ0FnSUhKbFlXUlFZV05yWldSR2FYaGxaRE15T2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUdWdVpDQTlJSFJvYVhNdWNtVmhaRlpoY21sdWRDZ3BJQ3NnZEdocGN5NXdiM01zSUdGeWNpQTlJRnRkTzF4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvZEdocGN5NXdiM01nUENCbGJtUXBJR0Z5Y2k1d2RYTm9LSFJvYVhNdWNtVmhaRVpwZUdWa016SW9LU2s3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJoY25JN1hHNGdJQ0FnZlN4Y2JpQWdJQ0J5WldGa1VHRmphMlZrVTBacGVHVmtNekk2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnWlc1a0lEMGdkR2hwY3k1eVpXRmtWbUZ5YVc1MEtDa2dLeUIwYUdsekxuQnZjeXdnWVhKeUlEMGdXMTA3WEc0Z0lDQWdJQ0FnSUhkb2FXeGxJQ2gwYUdsekxuQnZjeUE4SUdWdVpDa2dZWEp5TG5CMWMyZ29kR2hwY3k1eVpXRmtVMFpwZUdWa016SW9LU2s3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJoY25JN1hHNGdJQ0FnZlN4Y2JpQWdJQ0J5WldGa1VHRmphMlZrUm1sNFpXUTJORG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJsYm1RZ1BTQjBhR2x6TG5KbFlXUldZWEpwYm5Rb0tTQXJJSFJvYVhNdWNHOXpMQ0JoY25JZ1BTQmJYVHRjYmlBZ0lDQWdJQ0FnZDJocGJHVWdLSFJvYVhNdWNHOXpJRHdnWlc1a0tTQmhjbkl1Y0hWemFDaDBhR2x6TG5KbFlXUkdhWGhsWkRZMEtDa3BPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZWEp5TzF4dUlDQWdJSDBzWEc0Z0lDQWdjbVZoWkZCaFkydGxaRk5HYVhobFpEWTBPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJR1Z1WkNBOUlIUm9hWE11Y21WaFpGWmhjbWx1ZENncElDc2dkR2hwY3k1d2IzTXNJR0Z5Y2lBOUlGdGRPMXh1SUNBZ0lDQWdJQ0IzYUdsc1pTQW9kR2hwY3k1d2IzTWdQQ0JsYm1RcElHRnljaTV3ZFhOb0tIUm9hWE11Y21WaFpGTkdhWGhsWkRZMEtDa3BPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZWEp5TzF4dUlDQWdJSDBzWEc1Y2JpQWdJQ0J6YTJsd09pQm1kVzVqZEdsdmJpaDJZV3dwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJSFI1Y0dVZ1BTQjJZV3dnSmlBd2VEYzdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxJRDA5UFNCUVltWXVWbUZ5YVc1MEtTQjNhR2xzWlNBb2RHaHBjeTVpZFdaYmRHaHBjeTV3YjNNcksxMGdQaUF3ZURkbUtTQjdmVnh1SUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2gwZVhCbElEMDlQU0JRWW1ZdVFubDBaWE1wSUhSb2FYTXVjRzl6SUQwZ2RHaHBjeTV5WldGa1ZtRnlhVzUwS0NrZ0t5QjBhR2x6TG5CdmN6dGNiaUFnSUNBZ0lDQWdaV3h6WlNCcFppQW9kSGx3WlNBOVBUMGdVR0ptTGtacGVHVmtNeklwSUhSb2FYTXVjRzl6SUNzOUlEUTdYRzRnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLSFI1Y0dVZ1BUMDlJRkJpWmk1R2FYaGxaRFkwS1NCMGFHbHpMbkJ2Y3lBclBTQTRPMXh1SUNBZ0lDQWdJQ0JsYkhObElIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblZXNXBiWEJzWlcxbGJuUmxaQ0IwZVhCbE9pQW5JQ3NnZEhsd1pTazdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lDOHZJRDA5UFNCWFVrbFVTVTVISUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNWNiaUFnSUNCM2NtbDBaVlJoWnpvZ1puVnVZM1JwYjI0b2RHRm5MQ0IwZVhCbEtTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWQzSnBkR1ZXWVhKcGJuUW9LSFJoWnlBOFBDQXpLU0I4SUhSNWNHVXBPMXh1SUNBZ0lIMHNYRzVjYmlBZ0lDQnlaV0ZzYkc5ak9pQm1kVzVqZEdsdmJpaHRhVzRwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJR3hsYm1kMGFDQTlJSFJvYVhNdWJHVnVaM1JvSUh4OElERTJPMXh1WEc0Z0lDQWdJQ0FnSUhkb2FXeGxJQ2hzWlc1bmRHZ2dQQ0IwYUdsekxuQnZjeUFySUcxcGJpa2diR1Z1WjNSb0lDbzlJREk3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLR3hsYm1kMGFDQWhQVDBnZEdocGN5NXNaVzVuZEdncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQmlkV1lnUFNCdVpYY2dRblZtWm1WeUtHeGxibWQwYUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtSjFaaTVqYjNCNUtHSjFaaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1KMVppQTlJR0oxWmp0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWJHVnVaM1JvSUQwZ2JHVnVaM1JvTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlN4Y2JseHVJQ0FnSUdacGJtbHphRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YkdWdVozUm9JRDBnZEdocGN5NXdiM003WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6SUQwZ01EdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11WW5WbUxuTnNhV05sS0RBc0lIUm9hWE11YkdWdVozUm9LVHRjYmlBZ0lDQjlMRnh1WEc0Z0lDQWdkM0pwZEdWR2FYaGxaRE15T2lCbWRXNWpkR2x2YmloMllXd3BJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXlaV0ZzYkc5aktEUXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtSjFaaTUzY21sMFpWVkpiblF6TWt4RktIWmhiQ3dnZEdocGN5NXdiM01wTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ2Y3lBclBTQTBPMXh1SUNBZ0lIMHNYRzVjYmlBZ0lDQjNjbWwwWlZOR2FYaGxaRE15T2lCbWRXNWpkR2x2YmloMllXd3BJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXlaV0ZzYkc5aktEUXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtSjFaaTUzY21sMFpVbHVkRE15VEVVb2RtRnNMQ0IwYUdsekxuQnZjeWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6SUNzOUlEUTdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lIZHlhWFJsUm1sNFpXUTJORG9nWm5WdVkzUnBiMjRvZG1Gc0tTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNtVmhiR3h2WXlnNEtUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1aWRXWXVkM0pwZEdWSmJuUXpNa3hGS0haaGJDQW1JQzB4TENCMGFHbHpMbkJ2Y3lrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WW5WbUxuZHlhWFJsVlVsdWRETXlURVVvVFdGMGFDNW1iRzl2Y2loMllXd2dLaUJUU0VsR1ZGOVNTVWRJVkY4ek1pa3NJSFJvYVhNdWNHOXpJQ3NnTkNrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y0c5eklDczlJRGc3WEc0Z0lDQWdmU3hjYmx4dUlDQWdJSGR5YVhSbFUwWnBlR1ZrTmpRNklHWjFibU4wYVc5dUtIWmhiQ2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbkpsWVd4c2IyTW9PQ2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZblZtTG5keWFYUmxTVzUwTXpKTVJTaDJZV3dnSmlBdE1Td2dkR2hwY3k1d2IzTXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtSjFaaTUzY21sMFpVbHVkRE15VEVVb1RXRjBhQzVtYkc5dmNpaDJZV3dnS2lCVFNFbEdWRjlTU1VkSVZGOHpNaWtzSUhSb2FYTXVjRzl6SUNzZ05DazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHOXpJQ3M5SURnN1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUhkeWFYUmxWbUZ5YVc1ME9pQm1kVzVqZEdsdmJpaDJZV3dwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnNJRDBnSzNaaGJEdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb2RtRnNJRHc5SURCNE4yWXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11Y21WaGJHeHZZeWd4S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVluVm1XM1JvYVhNdWNHOXpLeXRkSUQwZ2RtRnNPMXh1WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RtRnNJRHc5SURCNE0yWm1aaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1eVpXRnNiRzlqS0RJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWlkV1piZEdocGN5NXdiM01ySzEwZ1BTQW9LSFpoYkNBK1BqNGdNQ2tnSmlBd2VEZG1LU0I4SURCNE9EQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbUoxWmx0MGFHbHpMbkJ2Y3lzclhTQTlJQ2dvZG1Gc0lENCtQaUEzS1NBbUlEQjROMllwTzF4dVhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9kbUZzSUR3OUlEQjRNV1ptWm1abUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbkpsWVd4c2IyTW9NeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1KMVpsdDBhR2x6TG5CdmN5c3JYU0E5SUNnb2RtRnNJRDQrUGlBd0tTQW1JREI0TjJZcElId2dNSGc0TUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVluVm1XM1JvYVhNdWNHOXpLeXRkSUQwZ0tDaDJZV3dnUGo0K0lEY3BJQ1lnTUhnM1ppa2dmQ0F3ZURnd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWlkV1piZEdocGN5NXdiM01ySzEwZ1BTQW9LSFpoYkNBK1BqNGdNVFFwSUNZZ01IZzNaaWs3WEc1Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaDJZV3dnUEQwZ01IaG1abVptWm1abUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbkpsWVd4c2IyTW9OQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1KMVpsdDBhR2x6TG5CdmN5c3JYU0E5SUNnb2RtRnNJRDQrUGlBd0tTQW1JREI0TjJZcElId2dNSGc0TUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVluVm1XM1JvYVhNdWNHOXpLeXRkSUQwZ0tDaDJZV3dnUGo0K0lEY3BJQ1lnTUhnM1ppa2dmQ0F3ZURnd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWlkV1piZEdocGN5NXdiM01ySzEwZ1BTQW9LSFpoYkNBK1BqNGdNVFFwSUNZZ01IZzNaaWtnZkNBd2VEZ3dPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVpZFdaYmRHaHBjeTV3YjNNcksxMGdQU0FvS0haaGJDQStQajRnTWpFcElDWWdNSGczWmlrN1hHNWNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQndiM01nUFNCMGFHbHpMbkJ2Y3p0Y2JpQWdJQ0FnSUNBZ0lDQWdJSGRvYVd4bElDaDJZV3dnUGowZ01IZzRNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVjbVZoYkd4dll5Z3hLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtSjFabHQwYUdsekxuQnZjeXNyWFNBOUlDaDJZV3dnSmlBd2VHWm1LU0I4SURCNE9EQTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZzSUM4OUlEQjRPREE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbkpsWVd4c2IyTW9NU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1KMVpsdDBhR2x6TG5CdmN5c3JYU0E5SUhaaGJDQjhJREE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXdiM01nTFNCd2IzTWdQaUF4TUNrZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkSGFYWmxiaUIyWVhKcGJuUWdaRzlsYzI1Y1hDZDBJR1pwZENCcGJuUnZJREV3SUdKNWRHVnpKeWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnZDNKcGRHVlRWbUZ5YVc1ME9pQm1kVzVqZEdsdmJpaDJZV3dwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUzY21sMFpWWmhjbWx1ZENoMllXd2dQQ0F3SUQ4Z0xYWmhiQ0FxSURJZ0xTQXhJRG9nZG1Gc0lDb2dNaWs3WEc0Z0lDQWdmU3hjYmx4dUlDQWdJSGR5YVhSbFFtOXZiR1ZoYmpvZ1puVnVZM1JwYjI0b2RtRnNLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkM0pwZEdWV1lYSnBiblFvUW05dmJHVmhiaWgyWVd3cEtUdGNiaUFnSUNCOUxGeHVYRzRnSUNBZ2QzSnBkR1ZUZEhKcGJtYzZJR1oxYm1OMGFXOXVLSE4wY2lrZ2UxeHVJQ0FnSUNBZ0lDQnpkSElnUFNCVGRISnBibWNvYzNSeUtUdGNiaUFnSUNBZ0lDQWdkbUZ5SUdKNWRHVnpJRDBnUW5WbVptVnlMbUo1ZEdWTVpXNW5kR2dvYzNSeUtUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1M2NtbDBaVlpoY21sdWRDaGllWFJsY3lrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y21WaGJHeHZZeWhpZVhSbGN5azdYRzRnSUNBZ0lDQWdJSFJvYVhNdVluVm1MbmR5YVhSbEtITjBjaXdnZEdocGN5NXdiM01wTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ2Y3lBclBTQmllWFJsY3p0Y2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnZDNKcGRHVkdiRzloZERvZ1puVnVZM1JwYjI0b2RtRnNLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjbVZoYkd4dll5ZzBLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWlkV1l1ZDNKcGRHVkdiRzloZEV4RktIWmhiQ3dnZEdocGN5NXdiM01wTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ2Y3lBclBTQTBPMXh1SUNBZ0lIMHNYRzVjYmlBZ0lDQjNjbWwwWlVSdmRXSnNaVG9nWm5WdVkzUnBiMjRvZG1Gc0tTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNtVmhiR3h2WXlnNEtUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1aWRXWXVkM0pwZEdWRWIzVmliR1ZNUlNoMllXd3NJSFJvYVhNdWNHOXpLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXdiM01nS3owZ09EdGNiaUFnSUNCOUxGeHVYRzRnSUNBZ2QzSnBkR1ZDZVhSbGN6b2dablZ1WTNScGIyNG9ZblZtWm1WeUtTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCc1pXNGdQU0JpZFdabVpYSXViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5keWFYUmxWbUZ5YVc1MEtHeGxiaWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjbVZoYkd4dll5aHNaVzRwTzF4dUlDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHeGxianNnYVNzcktTQjBhR2x6TG1KMVpsdDBhR2x6TG5CdmN5c3JYU0E5SUdKMVptWmxjbHRwWFR0Y2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnZDNKcGRHVk5aWE56WVdkbE9pQm1kVzVqZEdsdmJpaDBZV2NzSUdadUxDQnZZbW9wSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUzY21sMFpWUmhaeWgwWVdjc0lGQmlaaTVDZVhSbGN5azdYRzVjYmlBZ0lDQWdJQ0FnZEdocGN5NXdiM01yS3pzZ0x5OGdjbVZ6WlhKMlpTQXhJR0o1ZEdVZ1ptOXlJSE5vYjNKMElHMWxjM05oWjJVZ2JHVnVaM1JvWEc1Y2JpQWdJQ0FnSUNBZ0x5OGdkM0pwZEdVZ2RHaGxJRzFsYzNOaFoyVWdaR2x5WldOMGJIa2dkRzhnZEdobElHSjFabVpsY2lCaGJtUWdjMlZsSUdodmR5QnRkV05vSUhkaGN5QjNjbWwwZEdWdVhHNGdJQ0FnSUNBZ0lIWmhjaUJ6ZEdGeWRGQnZjeUE5SUhSb2FYTXVjRzl6TzF4dUlDQWdJQ0FnSUNCbWJpaHZZbW9zSUhSb2FYTXBPMXh1SUNBZ0lDQWdJQ0IyWVhJZ2JHVnVJRDBnZEdocGN5NXdiM01nTFNCemRHRnlkRkJ2Y3p0Y2JseHVJQ0FnSUNBZ0lDQjJZWElnZG1GeWFXNTBUR1Z1SUQxY2JpQWdJQ0FnSUNBZ0lDQWdJR3hsYmlBOFBTQXdlRGRtSUQ4Z01TQTZYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pXNGdQRDBnTUhnelptWm1JRDhnTWlBNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlc0Z1BEMGdNSGd4Wm1abVptWWdQeUF6SURwY2JpQWdJQ0FnSUNBZ0lDQWdJR3hsYmlBOFBTQXdlR1ptWm1abVptWWdQeUEwSURvZ1RXRjBhQzVqWldsc0tFMWhkR2d1Ykc5bktHeGxiaWtnTHlBb1RXRjBhQzVNVGpJZ0tpQTNLU2s3WEc1Y2JpQWdJQ0FnSUNBZ0x5OGdhV1lnTVNCaWVYUmxJR2x6YmlkMElHVnViM1ZuYUNCbWIzSWdaVzVqYjJScGJtY2diV1Z6YzJGblpTQnNaVzVuZEdnc0lITm9hV1owSUhSb1pTQmtZWFJoSUhSdklIUm9aU0J5YVdkb2RGeHVJQ0FnSUNBZ0lDQnBaaUFvZG1GeWFXNTBUR1Z1SUQ0Z01Ta2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV5WldGc2JHOWpLSFpoY21sdWRFeGxiaUF0SURFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlIUm9hWE11Y0c5eklDMGdNVHNnYVNBK1BTQnpkR0Z5ZEZCdmN6c2dhUzB0S1NCMGFHbHpMbUoxWmx0cElDc2dkbUZ5YVc1MFRHVnVJQzBnTVYwZ1BTQjBhR2x6TG1KMVpsdHBYVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDOHZJR1pwYm1Gc2JIa3NJSGR5YVhSbElIUm9aU0J0WlhOellXZGxJR3hsYm1kMGFDQnBiaUIwYUdVZ2NtVnpaWEoyWldRZ2NHeGhZMlVnWVc1a0lISmxjM1J2Y21VZ2RHaGxJSEJ2YzJsMGFXOXVYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHOXpJRDBnYzNSaGNuUlFiM01nTFNBeE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5keWFYUmxWbUZ5YVc1MEtHeGxiaWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6SUNzOUlHeGxianRjYmlBZ0lDQjlMRnh1WEc0Z0lDQWdkM0pwZEdWUVlXTnJaV1JXWVhKcGJuUTZJQ0FnWm5WdVkzUnBiMjRvZEdGbkxDQmhjbklwSUhzZ2RHaHBjeTUzY21sMFpVMWxjM05oWjJVb2RHRm5MQ0IzY21sMFpWQmhZMnRsWkZaaGNtbHVkQ3dnWVhKeUtUc2dJQ0I5TEZ4dUlDQWdJSGR5YVhSbFVHRmphMlZrVTFaaGNtbHVkRG9nSUdaMWJtTjBhVzl1S0hSaFp5d2dZWEp5S1NCN0lIUm9hWE11ZDNKcGRHVk5aWE56WVdkbEtIUmhaeXdnZDNKcGRHVlFZV05yWldSVFZtRnlhVzUwTENCaGNuSXBPeUFnZlN4Y2JpQWdJQ0IzY21sMFpWQmhZMnRsWkVKdmIyeGxZVzQ2SUNCbWRXNWpkR2x2YmloMFlXY3NJR0Z5Y2lrZ2V5QjBhR2x6TG5keWFYUmxUV1Z6YzJGblpTaDBZV2NzSUhkeWFYUmxVR0ZqYTJWa1FtOXZiR1ZoYml3Z1lYSnlLVHNnSUgwc1hHNGdJQ0FnZDNKcGRHVlFZV05yWldSR2JHOWhkRG9nSUNBZ1puVnVZM1JwYjI0b2RHRm5MQ0JoY25JcElIc2dkR2hwY3k1M2NtbDBaVTFsYzNOaFoyVW9kR0ZuTENCM2NtbDBaVkJoWTJ0bFpFWnNiMkYwTENCaGNuSXBPeUFnSUNCOUxGeHVJQ0FnSUhkeWFYUmxVR0ZqYTJWa1JHOTFZbXhsT2lBZ0lHWjFibU4wYVc5dUtIUmhaeXdnWVhKeUtTQjdJSFJvYVhNdWQzSnBkR1ZOWlhOellXZGxLSFJoWnl3Z2QzSnBkR1ZRWVdOclpXUkViM1ZpYkdVc0lHRnljaWs3SUNBZ2ZTeGNiaUFnSUNCM2NtbDBaVkJoWTJ0bFpFWnBlR1ZrTXpJNklDQm1kVzVqZEdsdmJpaDBZV2NzSUdGeWNpa2dleUIwYUdsekxuZHlhWFJsVFdWemMyRm5aU2gwWVdjc0lIZHlhWFJsVUdGamEyVmtSbWw0WldRek1pd2dZWEp5S1RzZ0lIMHNYRzRnSUNBZ2QzSnBkR1ZRWVdOclpXUlRSbWw0WldRek1qb2dablZ1WTNScGIyNG9kR0ZuTENCaGNuSXBJSHNnZEdocGN5NTNjbWwwWlUxbGMzTmhaMlVvZEdGbkxDQjNjbWwwWlZCaFkydGxaRk5HYVhobFpETXlMQ0JoY25JcE95QjlMRnh1SUNBZ0lIZHlhWFJsVUdGamEyVmtSbWw0WldRMk5Eb2dJR1oxYm1OMGFXOXVLSFJoWnl3Z1lYSnlLU0I3SUhSb2FYTXVkM0pwZEdWTlpYTnpZV2RsS0hSaFp5d2dkM0pwZEdWUVlXTnJaV1JHYVhobFpEWTBMQ0JoY25JcE95QWdmU3hjYmlBZ0lDQjNjbWwwWlZCaFkydGxaRk5HYVhobFpEWTBPaUJtZFc1amRHbHZiaWgwWVdjc0lHRnljaWtnZXlCMGFHbHpMbmR5YVhSbFRXVnpjMkZuWlNoMFlXY3NJSGR5YVhSbFVHRmphMlZrVTBacGVHVmtOalFzSUdGeWNpazdJSDBzWEc1Y2JpQWdJQ0IzY21sMFpVSjVkR1Z6Um1sbGJHUTZJR1oxYm1OMGFXOXVLSFJoWnl3Z1luVm1abVZ5S1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZDNKcGRHVlVZV2NvZEdGbkxDQlFZbVl1UW5sMFpYTXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuZHlhWFJsUW5sMFpYTW9ZblZtWm1WeUtUdGNiaUFnSUNCOUxGeHVJQ0FnSUhkeWFYUmxSbWw0WldRek1rWnBaV3hrT2lCbWRXNWpkR2x2YmloMFlXY3NJSFpoYkNrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5keWFYUmxWR0ZuS0hSaFp5d2dVR0ptTGtacGVHVmtNeklwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbmR5YVhSbFJtbDRaV1F6TWloMllXd3BPMXh1SUNBZ0lIMHNYRzRnSUNBZ2QzSnBkR1ZUUm1sNFpXUXpNa1pwWld4a09pQm1kVzVqZEdsdmJpaDBZV2NzSUhaaGJDa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxuZHlhWFJsVkdGbktIUmhaeXdnVUdKbUxrWnBlR1ZrTXpJcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5keWFYUmxVMFpwZUdWa016SW9kbUZzS1R0Y2JpQWdJQ0I5TEZ4dUlDQWdJSGR5YVhSbFJtbDRaV1EyTkVacFpXeGtPaUJtZFc1amRHbHZiaWgwWVdjc0lIWmhiQ2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbmR5YVhSbFZHRm5LSFJoWnl3Z1VHSm1Ma1pwZUdWa05qUXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuZHlhWFJsUm1sNFpXUTJOQ2gyWVd3cE8xeHVJQ0FnSUgwc1hHNGdJQ0FnZDNKcGRHVlRSbWw0WldRMk5FWnBaV3hrT2lCbWRXNWpkR2x2YmloMFlXY3NJSFpoYkNrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5keWFYUmxWR0ZuS0hSaFp5d2dVR0ptTGtacGVHVmtOalFwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbmR5YVhSbFUwWnBlR1ZrTmpRb2RtRnNLVHRjYmlBZ0lDQjlMRnh1SUNBZ0lIZHlhWFJsVm1GeWFXNTBSbWxsYkdRNklHWjFibU4wYVc5dUtIUmhaeXdnZG1Gc0tTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWQzSnBkR1ZVWVdjb2RHRm5MQ0JRWW1ZdVZtRnlhVzUwS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUzY21sMFpWWmhjbWx1ZENoMllXd3BPMXh1SUNBZ0lIMHNYRzRnSUNBZ2QzSnBkR1ZUVm1GeWFXNTBSbWxsYkdRNklHWjFibU4wYVc5dUtIUmhaeXdnZG1Gc0tTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWQzSnBkR1ZVWVdjb2RHRm5MQ0JRWW1ZdVZtRnlhVzUwS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUzY21sMFpWTldZWEpwYm5Rb2RtRnNLVHRjYmlBZ0lDQjlMRnh1SUNBZ0lIZHlhWFJsVTNSeWFXNW5SbWxsYkdRNklHWjFibU4wYVc5dUtIUmhaeXdnYzNSeUtTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWQzSnBkR1ZVWVdjb2RHRm5MQ0JRWW1ZdVFubDBaWE1wTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbmR5YVhSbFUzUnlhVzVuS0hOMGNpazdYRzRnSUNBZ2ZTeGNiaUFnSUNCM2NtbDBaVVpzYjJGMFJtbGxiR1E2SUdaMWJtTjBhVzl1S0hSaFp5d2dkbUZzS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZDNKcGRHVlVZV2NvZEdGbkxDQlFZbVl1Um1sNFpXUXpNaWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkM0pwZEdWR2JHOWhkQ2gyWVd3cE8xeHVJQ0FnSUgwc1hHNGdJQ0FnZDNKcGRHVkViM1ZpYkdWR2FXVnNaRG9nWm5WdVkzUnBiMjRvZEdGbkxDQjJZV3dwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUzY21sMFpWUmhaeWgwWVdjc0lGQmlaaTVHYVhobFpEWTBLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTNjbWwwWlVSdmRXSnNaU2gyWVd3cE8xeHVJQ0FnSUgwc1hHNGdJQ0FnZDNKcGRHVkNiMjlzWldGdVJtbGxiR1E2SUdaMWJtTjBhVzl1S0hSaFp5d2dkbUZzS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZDNKcGRHVldZWEpwYm5SR2FXVnNaQ2gwWVdjc0lFSnZiMnhsWVc0b2RtRnNLU2s3WEc0Z0lDQWdmVnh1ZlR0Y2JseHVablZ1WTNScGIyNGdkM0pwZEdWUVlXTnJaV1JXWVhKcGJuUW9ZWEp5TENCd1ltWXBJQ0FnZXlCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHRnljaTVzWlc1bmRHZzdJR2tyS3lrZ2NHSm1MbmR5YVhSbFZtRnlhVzUwS0dGeWNsdHBYU2s3SUNBZ2ZWeHVablZ1WTNScGIyNGdkM0pwZEdWUVlXTnJaV1JUVm1GeWFXNTBLR0Z5Y2l3Z2NHSm1LU0FnZXlCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHRnljaTVzWlc1bmRHZzdJR2tyS3lrZ2NHSm1MbmR5YVhSbFUxWmhjbWx1ZENoaGNuSmJhVjBwT3lBZ2ZWeHVablZ1WTNScGIyNGdkM0pwZEdWUVlXTnJaV1JHYkc5aGRDaGhjbklzSUhCaVppa2dJQ0FnZXlCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHRnljaTVzWlc1bmRHZzdJR2tyS3lrZ2NHSm1MbmR5YVhSbFJteHZZWFFvWVhKeVcybGRLVHNnSUNBZ2ZWeHVablZ1WTNScGIyNGdkM0pwZEdWUVlXTnJaV1JFYjNWaWJHVW9ZWEp5TENCd1ltWXBJQ0FnZXlCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHRnljaTVzWlc1bmRHZzdJR2tyS3lrZ2NHSm1MbmR5YVhSbFJHOTFZbXhsS0dGeWNsdHBYU2s3SUNBZ2ZWeHVablZ1WTNScGIyNGdkM0pwZEdWUVlXTnJaV1JDYjI5c1pXRnVLR0Z5Y2l3Z2NHSm1LU0FnZXlCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHRnljaTVzWlc1bmRHZzdJR2tyS3lrZ2NHSm1MbmR5YVhSbFFtOXZiR1ZoYmloaGNuSmJhVjBwT3lBZ2ZWeHVablZ1WTNScGIyNGdkM0pwZEdWUVlXTnJaV1JHYVhobFpETXlLR0Z5Y2l3Z2NHSm1LU0FnZXlCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHRnljaTVzWlc1bmRHZzdJR2tyS3lrZ2NHSm1MbmR5YVhSbFJtbDRaV1F6TWloaGNuSmJhVjBwT3lBZ2ZWeHVablZ1WTNScGIyNGdkM0pwZEdWUVlXTnJaV1JUUm1sNFpXUXpNaWhoY25Jc0lIQmlaaWtnZXlCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHRnljaTVzWlc1bmRHZzdJR2tyS3lrZ2NHSm1MbmR5YVhSbFUwWnBlR1ZrTXpJb1lYSnlXMmxkS1RzZ2ZWeHVablZ1WTNScGIyNGdkM0pwZEdWUVlXTnJaV1JHYVhobFpEWTBLR0Z5Y2l3Z2NHSm1LU0FnZXlCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHRnljaTVzWlc1bmRHZzdJR2tyS3lrZ2NHSm1MbmR5YVhSbFJtbDRaV1EyTkNoaGNuSmJhVjBwT3lBZ2ZWeHVablZ1WTNScGIyNGdkM0pwZEdWUVlXTnJaV1JUUm1sNFpXUTJOQ2hoY25Jc0lIQmlaaWtnZXlCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHRnljaTVzWlc1bmRHZzdJR2tyS3lrZ2NHSm1MbmR5YVhSbFUwWnBlR1ZrTmpRb1lYSnlXMmxkS1RzZ2ZWeHVJbDE5IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG5mdW5jdGlvbiBQb2ludCh4LCB5KSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xufVxuXG5Qb2ludC5wcm90b3R5cGUgPSB7XG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTsgfSxcblxuICAgIGFkZDogICAgIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHApOyAgICAgfSxcbiAgICBzdWI6ICAgICBmdW5jdGlvbihwKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3N1YihwKTsgICAgIH0sXG4gICAgbXVsdDogICAgZnVuY3Rpb24oaykgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0KGspOyAgICB9LFxuICAgIGRpdjogICAgIGZ1bmN0aW9uKGspIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2KGspOyAgICAgfSxcbiAgICByb3RhdGU6ICBmdW5jdGlvbihhKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZShhKTsgIH0sXG4gICAgbWF0TXVsdDogZnVuY3Rpb24obSkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9tYXRNdWx0KG0pOyB9LFxuICAgIHVuaXQ6ICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl91bml0KCk7IH0sXG4gICAgcGVycDogICAgZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKTsgfSxcbiAgICByb3VuZDogICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKTsgfSxcblxuICAgIG1hZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55KTtcbiAgICB9LFxuXG4gICAgZXF1YWxzOiBmdW5jdGlvbihwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnggPT09IHAueCAmJlxuICAgICAgICAgICAgICAgdGhpcy55ID09PSBwLnk7XG4gICAgfSxcblxuICAgIGRpc3Q6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIocCkpO1xuICAgIH0sXG5cbiAgICBkaXN0U3FyOiBmdW5jdGlvbihwKSB7XG4gICAgICAgIHZhciBkeCA9IHAueCAtIHRoaXMueCxcbiAgICAgICAgICAgIGR5ID0gcC55IC0gdGhpcy55O1xuICAgICAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG4gICAgfSxcblxuICAgIGFuZ2xlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIodGhpcy55LCB0aGlzLngpO1xuICAgIH0sXG5cbiAgICBhbmdsZVRvOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmF0YW4yKHRoaXMueSAtIGIueSwgdGhpcy54IC0gYi54KTtcbiAgICB9LFxuXG4gICAgYW5nbGVXaXRoOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFuZ2xlV2l0aFNlcChiLngsIGIueSk7XG4gICAgfSxcblxuICAgIC8vIEZpbmQgdGhlIGFuZ2xlIG9mIHRoZSB0d28gdmVjdG9ycywgc29sdmluZyB0aGUgZm9ybXVsYSBmb3IgdGhlIGNyb3NzIHByb2R1Y3QgYSB4IGIgPSB8YXx8YnxzaW4ozrgpIGZvciDOuC5cbiAgICBhbmdsZVdpdGhTZXA6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIoXG4gICAgICAgICAgICB0aGlzLnggKiB5IC0gdGhpcy55ICogeCxcbiAgICAgICAgICAgIHRoaXMueCAqIHggKyB0aGlzLnkgKiB5KTtcbiAgICB9LFxuXG4gICAgX21hdE11bHQ6IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgdmFyIHggPSBtWzBdICogdGhpcy54ICsgbVsxXSAqIHRoaXMueSxcbiAgICAgICAgICAgIHkgPSBtWzJdICogdGhpcy54ICsgbVszXSAqIHRoaXMueTtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9hZGQ6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy54ICs9IHAueDtcbiAgICAgICAgdGhpcy55ICs9IHAueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9zdWI6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy54IC09IHAueDtcbiAgICAgICAgdGhpcy55IC09IHAueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9tdWx0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIHRoaXMueCAqPSBrO1xuICAgICAgICB0aGlzLnkgKj0gaztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9kaXY6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgdGhpcy54IC89IGs7XG4gICAgICAgIHRoaXMueSAvPSBrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3VuaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9kaXYodGhpcy5tYWcoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcGVycDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xuICAgICAgICB0aGlzLnkgPSB0aGlzLng7XG4gICAgICAgIHRoaXMueCA9IC15O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3JvdGF0ZTogZnVuY3Rpb24oYW5nbGUpIHtcbiAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgICAgIHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgIHggPSBjb3MgKiB0aGlzLnggLSBzaW4gKiB0aGlzLnksXG4gICAgICAgICAgICB5ID0gc2luICogdGhpcy54ICsgY29zICogdGhpcy55O1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3JvdW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy54ID0gTWF0aC5yb3VuZCh0aGlzLngpO1xuICAgICAgICB0aGlzLnkgPSBNYXRoLnJvdW5kKHRoaXMueSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5cbi8vIGNvbnN0cnVjdHMgUG9pbnQgZnJvbSBhbiBhcnJheSBpZiBuZWNlc3NhcnlcblBvaW50LmNvbnZlcnQgPSBmdW5jdGlvbiAoYSkge1xuICAgIGlmIChhIGluc3RhbmNlb2YgUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQoYVswXSwgYVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBhO1xufTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxuXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbnByb2Nlc3MubmV4dFRpY2sgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBjYW5TZXRJbW1lZGlhdGUgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICYmIHdpbmRvdy5zZXRJbW1lZGlhdGU7XG4gICAgdmFyIGNhbk11dGF0aW9uT2JzZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICYmIHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyO1xuICAgIHZhciBjYW5Qb3N0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAmJiB3aW5kb3cucG9zdE1lc3NhZ2UgJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXJcbiAgICA7XG5cbiAgICBpZiAoY2FuU2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZikgeyByZXR1cm4gd2luZG93LnNldEltbWVkaWF0ZShmKSB9O1xuICAgIH1cblxuICAgIHZhciBxdWV1ZSA9IFtdO1xuXG4gICAgaWYgKGNhbk11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgICAgdmFyIGhpZGRlbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBxdWV1ZUxpc3QgPSBxdWV1ZS5zbGljZSgpO1xuICAgICAgICAgICAgcXVldWUubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIHF1ZXVlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShoaWRkZW5EaXYsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dFRpY2soZm4pIHtcbiAgICAgICAgICAgIGlmICghcXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaGlkZGVuRGl2LnNldEF0dHJpYnV0ZSgneWVzJywgJ25vJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWV1ZS5wdXNoKGZuKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2FuUG9zdCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGV2LnNvdXJjZTtcbiAgICAgICAgICAgIGlmICgoc291cmNlID09PSB3aW5kb3cgfHwgc291cmNlID09PSBudWxsKSAmJiBldi5kYXRhID09PSAncHJvY2Vzcy10aWNrJykge1xuICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dFRpY2soZm4pIHtcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goZm4pO1xuICAgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKCdwcm9jZXNzLXRpY2snLCAnKicpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0VGljayhmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xufSkoKTtcblxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG4vLyBUT0RPKHNodHlsbWFuKVxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG4iLCIvKiFcbiAqIHN0cmlwLWNvbW1lbnRzIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9zdHJpcC1jb21tZW50cz5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgSm9uIFNjaGxpbmtlcnQsIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljJztcblxudmFyIHJlQmxvY2sgPSAnXFxcXC9cXFxcKic7XG52YXIgcmVCbG9ja0lnbm9yZSA9ICdcXFxcL1xcXFwqKD8hXFxcXCo/XFxcXCEpJztcbnZhciByZUJsb2NrRW5kID0gJygufFtcXFxcclxcXFxuXXxcXFxcbikqP1xcXFwqXFxcXC9cXFxcbj9cXFxcbj8nO1xudmFyIHJlTGluZSA9IC8oXnxbXlxcU1xcbl0pKD86XFwvXFwvKShbXFxzXFxTXSs/KSQvZ207XG52YXIgcmVMaW5lSWdub3JlID0gLyhefFteXFxTXFxuXSkoPzpcXC9cXC9bXiFdKShbXFxzXFxTXSs/KSQvZ207XG5cblxuLyoqXG4gKiBTdHJpcCBhbGwgY29tbWVudHNcbiAqXG4gKiB7JT0gZG9jcyhcInN0cmlwXCIpICV9XG4gKlxuICogQHBhcmFtICAge1N0cmluZ30gYHN0cmAgIGZpbGUgY29udGVudHMgb3Igc3RyaW5nIHRvIHN0cmlwLlxuICogQHBhcmFtICAge09iamVjdH0gYG9wdHNgICBvcHRpb25zIGFyZSBwYXNzZWQgdG8gYC5ibG9ja2AsIGFuZCBgLmxpbmVgXG4gKiBAcmV0dXJuICB7U3RyaW5nfSBTdHJpbmcgd2l0aG91dCBjb21tZW50cy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxudmFyIHN0cmlwID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzdHIsIG9wdHMpIHtcbiAgcmV0dXJuIHN0ciA/IHN0cmlwLmJsb2NrKHN0cmlwLmxpbmUoc3RyLCBvcHRzKSwgb3B0cykgOiAnJztcbn07XG5cblxuLyoqXG4gKiBTdHJpcCBvbmx5IGJsb2NrIGNvbW1lbnRzLCBvcHRpb25hbGx5IGxlYXZpbmcgcHJvdGVjdGVkIGNvbW1lbnRzXG4gKiAoZS5nLiBgLyohYCkgaW50YWN0LlxuICpcbiAqIHslPSBkb2NzKFwiYmxvY2tcIikgJX1cbiAqXG4gKiBAcGFyYW0gICB7U3RyaW5nfSBgc3RyYCAgZmlsZSBjb250ZW50IG9yIHN0cmluZyB0byBzdHJpcCB0b1xuICogQHBhcmFtICAge09iamVjdH0gYG9wdHNgICBpZiBgc2FmZTp0cnVlYCwgc3RyaXAgb25seSBjb21tZW50cyB0aGF0IGRvIG5vdCBzdGFydCB3aXRoIGAvKiFgIG9yIGAvKiohYFxuICogQHJldHVybiAge1N0cmluZ30gU3RyaW5nIHdpdGhvdXQgYmxvY2sgY29tbWVudHMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnN0cmlwLmJsb2NrID0gZnVuY3Rpb24oc3RyLCBvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICB2YXIgcmUgPSBuZXcgUmVnRXhwKHJlQmxvY2sgKyByZUJsb2NrRW5kLCAnZ20nKTtcbiAgaWYob3B0cy5zYWZlKSB7XG4gICAgcmUgPSBuZXcgUmVnRXhwKHJlQmxvY2tJZ25vcmUgKyByZUJsb2NrRW5kLCAnZ20nKTtcbiAgfVxuICByZXR1cm4gc3RyID8gc3RyLnJlcGxhY2UocmUsICcnKSA6ICcnO1xufTtcblxuXG4vKipcbiAqIFN0cmlwIG9ubHkgbGluZSBjb21tZW50c1xuICpcbiAqIHslPSBkb2NzKFwibGluZVwiKSAlfVxuICpcbiAqIEBwYXJhbSAgIHtTdHJpbmd9IGBzdHJgICBmaWxlIGNvbnRlbnQgb3Igc3RyaW5nIHRvIHN0cmlwIHRvXG4gKiBAcGFyYW0gICB7T2JqZWN0fSBgb3B0c2AgIGlmIGBzYWZlOnRydWVgLCBzdHJpcCBhbGwgdGhhdCBub3Qgc3RhcnRzIHdpdGggYC8vIWBcbiAqIEByZXR1cm4gIHtTdHJpbmd9IFN0cmluZyB3aXRob3V0IGxpbmUgY29tbWVudHMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnN0cmlwLmxpbmUgPSBmdW5jdGlvbihzdHIsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIHZhciByZSA9IHJlTGluZTtcbiAgaWYob3B0cy5zYWZlKSB7XG4gICAgcmUgPSByZUxpbmVJZ25vcmU7XG4gIH1cbiAgcmV0dXJuIHN0ciA/IHN0ci5yZXBsYWNlKHJlLCAnJykgOiAnJztcbn07XG4iLCIhZnVuY3Rpb24oKSB7XG4gIHZhciB0b3BvanNvbiA9IHtcbiAgICB2ZXJzaW9uOiBcIjEuNi4xOVwiLFxuICAgIG1lc2g6IGZ1bmN0aW9uKHRvcG9sb2d5KSB7IHJldHVybiBvYmplY3QodG9wb2xvZ3ksIG1lc2hBcmNzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpOyB9LFxuICAgIG1lc2hBcmNzOiBtZXNoQXJjcyxcbiAgICBtZXJnZTogZnVuY3Rpb24odG9wb2xvZ3kpIHsgcmV0dXJuIG9iamVjdCh0b3BvbG9neSwgbWVyZ2VBcmNzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpOyB9LFxuICAgIG1lcmdlQXJjczogbWVyZ2VBcmNzLFxuICAgIGZlYXR1cmU6IGZlYXR1cmVPckNvbGxlY3Rpb24sXG4gICAgbmVpZ2hib3JzOiBuZWlnaGJvcnMsXG4gICAgcHJlc2ltcGxpZnk6IHByZXNpbXBsaWZ5XG4gIH07XG5cbiAgZnVuY3Rpb24gc3RpdGNoQXJjcyh0b3BvbG9neSwgYXJjcykge1xuICAgIHZhciBzdGl0Y2hlZEFyY3MgPSB7fSxcbiAgICAgICAgZnJhZ21lbnRCeVN0YXJ0ID0ge30sXG4gICAgICAgIGZyYWdtZW50QnlFbmQgPSB7fSxcbiAgICAgICAgZnJhZ21lbnRzID0gW10sXG4gICAgICAgIGVtcHR5SW5kZXggPSAtMTtcblxuICAgIC8vIFN0aXRjaCBlbXB0eSBhcmNzIGZpcnN0LCBzaW5jZSB0aGV5IG1heSBiZSBzdWJzdW1lZCBieSBvdGhlciBhcmNzLlxuICAgIGFyY3MuZm9yRWFjaChmdW5jdGlvbihpLCBqKSB7XG4gICAgICB2YXIgYXJjID0gdG9wb2xvZ3kuYXJjc1tpIDwgMCA/IH5pIDogaV0sIHQ7XG4gICAgICBpZiAoYXJjLmxlbmd0aCA8IDMgJiYgIWFyY1sxXVswXSAmJiAhYXJjWzFdWzFdKSB7XG4gICAgICAgIHQgPSBhcmNzWysrZW1wdHlJbmRleF0sIGFyY3NbZW1wdHlJbmRleF0gPSBpLCBhcmNzW2pdID0gdDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFyY3MuZm9yRWFjaChmdW5jdGlvbihpKSB7XG4gICAgICB2YXIgZSA9IGVuZHMoaSksXG4gICAgICAgICAgc3RhcnQgPSBlWzBdLFxuICAgICAgICAgIGVuZCA9IGVbMV0sXG4gICAgICAgICAgZiwgZztcblxuICAgICAgaWYgKGYgPSBmcmFnbWVudEJ5RW5kW3N0YXJ0XSkge1xuICAgICAgICBkZWxldGUgZnJhZ21lbnRCeUVuZFtmLmVuZF07XG4gICAgICAgIGYucHVzaChpKTtcbiAgICAgICAgZi5lbmQgPSBlbmQ7XG4gICAgICAgIGlmIChnID0gZnJhZ21lbnRCeVN0YXJ0W2VuZF0pIHtcbiAgICAgICAgICBkZWxldGUgZnJhZ21lbnRCeVN0YXJ0W2cuc3RhcnRdO1xuICAgICAgICAgIHZhciBmZyA9IGcgPT09IGYgPyBmIDogZi5jb25jYXQoZyk7XG4gICAgICAgICAgZnJhZ21lbnRCeVN0YXJ0W2ZnLnN0YXJ0ID0gZi5zdGFydF0gPSBmcmFnbWVudEJ5RW5kW2ZnLmVuZCA9IGcuZW5kXSA9IGZnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZyYWdtZW50QnlTdGFydFtmLnN0YXJ0XSA9IGZyYWdtZW50QnlFbmRbZi5lbmRdID0gZjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmID0gZnJhZ21lbnRCeVN0YXJ0W2VuZF0pIHtcbiAgICAgICAgZGVsZXRlIGZyYWdtZW50QnlTdGFydFtmLnN0YXJ0XTtcbiAgICAgICAgZi51bnNoaWZ0KGkpO1xuICAgICAgICBmLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgIGlmIChnID0gZnJhZ21lbnRCeUVuZFtzdGFydF0pIHtcbiAgICAgICAgICBkZWxldGUgZnJhZ21lbnRCeUVuZFtnLmVuZF07XG4gICAgICAgICAgdmFyIGdmID0gZyA9PT0gZiA/IGYgOiBnLmNvbmNhdChmKTtcbiAgICAgICAgICBmcmFnbWVudEJ5U3RhcnRbZ2Yuc3RhcnQgPSBnLnN0YXJ0XSA9IGZyYWdtZW50QnlFbmRbZ2YuZW5kID0gZi5lbmRdID0gZ2Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnJhZ21lbnRCeVN0YXJ0W2Yuc3RhcnRdID0gZnJhZ21lbnRCeUVuZFtmLmVuZF0gPSBmO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmID0gW2ldO1xuICAgICAgICBmcmFnbWVudEJ5U3RhcnRbZi5zdGFydCA9IHN0YXJ0XSA9IGZyYWdtZW50QnlFbmRbZi5lbmQgPSBlbmRdID0gZjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGVuZHMoaSkge1xuICAgICAgdmFyIGFyYyA9IHRvcG9sb2d5LmFyY3NbaSA8IDAgPyB+aSA6IGldLCBwMCA9IGFyY1swXSwgcDE7XG4gICAgICBpZiAodG9wb2xvZ3kudHJhbnNmb3JtKSBwMSA9IFswLCAwXSwgYXJjLmZvckVhY2goZnVuY3Rpb24oZHApIHsgcDFbMF0gKz0gZHBbMF0sIHAxWzFdICs9IGRwWzFdOyB9KTtcbiAgICAgIGVsc2UgcDEgPSBhcmNbYXJjLmxlbmd0aCAtIDFdO1xuICAgICAgcmV0dXJuIGkgPCAwID8gW3AxLCBwMF0gOiBbcDAsIHAxXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmbHVzaChmcmFnbWVudEJ5RW5kLCBmcmFnbWVudEJ5U3RhcnQpIHtcbiAgICAgIGZvciAodmFyIGsgaW4gZnJhZ21lbnRCeUVuZCkge1xuICAgICAgICB2YXIgZiA9IGZyYWdtZW50QnlFbmRba107XG4gICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5U3RhcnRbZi5zdGFydF07XG4gICAgICAgIGRlbGV0ZSBmLnN0YXJ0O1xuICAgICAgICBkZWxldGUgZi5lbmQ7XG4gICAgICAgIGYuZm9yRWFjaChmdW5jdGlvbihpKSB7IHN0aXRjaGVkQXJjc1tpIDwgMCA/IH5pIDogaV0gPSAxOyB9KTtcbiAgICAgICAgZnJhZ21lbnRzLnB1c2goZik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmx1c2goZnJhZ21lbnRCeUVuZCwgZnJhZ21lbnRCeVN0YXJ0KTtcbiAgICBmbHVzaChmcmFnbWVudEJ5U3RhcnQsIGZyYWdtZW50QnlFbmQpO1xuICAgIGFyY3MuZm9yRWFjaChmdW5jdGlvbihpKSB7IGlmICghc3RpdGNoZWRBcmNzW2kgPCAwID8gfmkgOiBpXSkgZnJhZ21lbnRzLnB1c2goW2ldKTsgfSk7XG5cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xuICB9XG5cbiAgZnVuY3Rpb24gbWVzaEFyY3ModG9wb2xvZ3ksIG8sIGZpbHRlcikge1xuICAgIHZhciBhcmNzID0gW107XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhciBnZW9tc0J5QXJjID0gW10sXG4gICAgICAgICAgZ2VvbTtcblxuICAgICAgZnVuY3Rpb24gYXJjKGkpIHtcbiAgICAgICAgdmFyIGogPSBpIDwgMCA/IH5pIDogaTtcbiAgICAgICAgKGdlb21zQnlBcmNbal0gfHwgKGdlb21zQnlBcmNbal0gPSBbXSkpLnB1c2goe2k6IGksIGc6IGdlb219KTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbGluZShhcmNzKSB7XG4gICAgICAgIGFyY3MuZm9yRWFjaChhcmMpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBwb2x5Z29uKGFyY3MpIHtcbiAgICAgICAgYXJjcy5mb3JFYWNoKGxpbmUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBnZW9tZXRyeShvKSB7XG4gICAgICAgIGlmIChvLnR5cGUgPT09IFwiR2VvbWV0cnlDb2xsZWN0aW9uXCIpIG8uZ2VvbWV0cmllcy5mb3JFYWNoKGdlb21ldHJ5KTtcbiAgICAgICAgZWxzZSBpZiAoby50eXBlIGluIGdlb21ldHJ5VHlwZSkgZ2VvbSA9IG8sIGdlb21ldHJ5VHlwZVtvLnR5cGVdKG8uYXJjcyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBnZW9tZXRyeVR5cGUgPSB7XG4gICAgICAgIExpbmVTdHJpbmc6IGxpbmUsXG4gICAgICAgIE11bHRpTGluZVN0cmluZzogcG9seWdvbixcbiAgICAgICAgUG9seWdvbjogcG9seWdvbixcbiAgICAgICAgTXVsdGlQb2x5Z29uOiBmdW5jdGlvbihhcmNzKSB7IGFyY3MuZm9yRWFjaChwb2x5Z29uKTsgfVxuICAgICAgfTtcblxuICAgICAgZ2VvbWV0cnkobyk7XG5cbiAgICAgIGdlb21zQnlBcmMuZm9yRWFjaChhcmd1bWVudHMubGVuZ3RoIDwgM1xuICAgICAgICAgID8gZnVuY3Rpb24oZ2VvbXMpIHsgYXJjcy5wdXNoKGdlb21zWzBdLmkpOyB9XG4gICAgICAgICAgOiBmdW5jdGlvbihnZW9tcykgeyBpZiAoZmlsdGVyKGdlb21zWzBdLmcsIGdlb21zW2dlb21zLmxlbmd0aCAtIDFdLmcpKSBhcmNzLnB1c2goZ2VvbXNbMF0uaSk7IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRvcG9sb2d5LmFyY3MubGVuZ3RoOyBpIDwgbjsgKytpKSBhcmNzLnB1c2goaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHt0eXBlOiBcIk11bHRpTGluZVN0cmluZ1wiLCBhcmNzOiBzdGl0Y2hBcmNzKHRvcG9sb2d5LCBhcmNzKX07XG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZUFyY3ModG9wb2xvZ3ksIG9iamVjdHMpIHtcbiAgICB2YXIgcG9seWdvbnNCeUFyYyA9IHt9LFxuICAgICAgICBwb2x5Z29ucyA9IFtdLFxuICAgICAgICBjb21wb25lbnRzID0gW107XG5cbiAgICBvYmplY3RzLmZvckVhY2goZnVuY3Rpb24obykge1xuICAgICAgaWYgKG8udHlwZSA9PT0gXCJQb2x5Z29uXCIpIHJlZ2lzdGVyKG8uYXJjcyk7XG4gICAgICBlbHNlIGlmIChvLnR5cGUgPT09IFwiTXVsdGlQb2x5Z29uXCIpIG8uYXJjcy5mb3JFYWNoKHJlZ2lzdGVyKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyKHBvbHlnb24pIHtcbiAgICAgIHBvbHlnb24uZm9yRWFjaChmdW5jdGlvbihyaW5nKSB7XG4gICAgICAgIHJpbmcuZm9yRWFjaChmdW5jdGlvbihhcmMpIHtcbiAgICAgICAgICAocG9seWdvbnNCeUFyY1thcmMgPSBhcmMgPCAwID8gfmFyYyA6IGFyY10gfHwgKHBvbHlnb25zQnlBcmNbYXJjXSA9IFtdKSkucHVzaChwb2x5Z29uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHBvbHlnb25zLnB1c2gocG9seWdvbik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZXJpb3IocmluZykge1xuICAgICAgcmV0dXJuIGNhcnRlc2lhblJpbmdBcmVhKG9iamVjdCh0b3BvbG9neSwge3R5cGU6IFwiUG9seWdvblwiLCBhcmNzOiBbcmluZ119KS5jb29yZGluYXRlc1swXSkgPiAwOyAvLyBUT0RPIGFsbG93IHNwaGVyaWNhbD9cbiAgICB9XG5cbiAgICBwb2x5Z29ucy5mb3JFYWNoKGZ1bmN0aW9uKHBvbHlnb24pIHtcbiAgICAgIGlmICghcG9seWdvbi5fKSB7XG4gICAgICAgIHZhciBjb21wb25lbnQgPSBbXSxcbiAgICAgICAgICAgIG5laWdoYm9ycyA9IFtwb2x5Z29uXTtcbiAgICAgICAgcG9seWdvbi5fID0gMTtcbiAgICAgICAgY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gICAgICAgIHdoaWxlIChwb2x5Z29uID0gbmVpZ2hib3JzLnBvcCgpKSB7XG4gICAgICAgICAgY29tcG9uZW50LnB1c2gocG9seWdvbik7XG4gICAgICAgICAgcG9seWdvbi5mb3JFYWNoKGZ1bmN0aW9uKHJpbmcpIHtcbiAgICAgICAgICAgIHJpbmcuZm9yRWFjaChmdW5jdGlvbihhcmMpIHtcbiAgICAgICAgICAgICAgcG9seWdvbnNCeUFyY1thcmMgPCAwID8gfmFyYyA6IGFyY10uZm9yRWFjaChmdW5jdGlvbihwb2x5Z29uKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwb2x5Z29uLl8pIHtcbiAgICAgICAgICAgICAgICAgIHBvbHlnb24uXyA9IDE7XG4gICAgICAgICAgICAgICAgICBuZWlnaGJvcnMucHVzaChwb2x5Z29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHBvbHlnb25zLmZvckVhY2goZnVuY3Rpb24ocG9seWdvbikge1xuICAgICAgZGVsZXRlIHBvbHlnb24uXztcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIk11bHRpUG9seWdvblwiLFxuICAgICAgYXJjczogY29tcG9uZW50cy5tYXAoZnVuY3Rpb24ocG9seWdvbnMpIHtcbiAgICAgICAgdmFyIGFyY3MgPSBbXTtcblxuICAgICAgICAvLyBFeHRyYWN0IHRoZSBleHRlcmlvciAodW5pcXVlKSBhcmNzLlxuICAgICAgICBwb2x5Z29ucy5mb3JFYWNoKGZ1bmN0aW9uKHBvbHlnb24pIHtcbiAgICAgICAgICBwb2x5Z29uLmZvckVhY2goZnVuY3Rpb24ocmluZykge1xuICAgICAgICAgICAgcmluZy5mb3JFYWNoKGZ1bmN0aW9uKGFyYykge1xuICAgICAgICAgICAgICBpZiAocG9seWdvbnNCeUFyY1thcmMgPCAwID8gfmFyYyA6IGFyY10ubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgIGFyY3MucHVzaChhcmMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3RpdGNoIHRoZSBhcmNzIGludG8gb25lIG9yIG1vcmUgcmluZ3MuXG4gICAgICAgIGFyY3MgPSBzdGl0Y2hBcmNzKHRvcG9sb2d5LCBhcmNzKTtcblxuICAgICAgICAvLyBJZiBtb3JlIHRoYW4gb25lIHJpbmcgaXMgcmV0dXJuZWQsXG4gICAgICAgIC8vIGF0IG1vc3Qgb25lIG9mIHRoZXNlIHJpbmdzIGNhbiBiZSB0aGUgZXh0ZXJpb3I7XG4gICAgICAgIC8vIHRoaXMgZXh0ZXJpb3IgcmluZyBoYXMgdGhlIHNhbWUgd2luZGluZyBvcmRlclxuICAgICAgICAvLyBhcyBhbnkgZXh0ZXJpb3IgcmluZyBpbiB0aGUgb3JpZ2luYWwgcG9seWdvbnMuXG4gICAgICAgIGlmICgobiA9IGFyY3MubGVuZ3RoKSA+IDEpIHtcbiAgICAgICAgICB2YXIgc2duID0gZXh0ZXJpb3IocG9seWdvbnNbMF1bMF0pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCB0OyBpIDwgbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAoc2duID09PSBleHRlcmlvcihhcmNzW2ldKSkge1xuICAgICAgICAgICAgICB0ID0gYXJjc1swXSwgYXJjc1swXSA9IGFyY3NbaV0sIGFyY3NbaV0gPSB0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJjcztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZlYXR1cmVPckNvbGxlY3Rpb24odG9wb2xvZ3ksIG8pIHtcbiAgICByZXR1cm4gby50eXBlID09PSBcIkdlb21ldHJ5Q29sbGVjdGlvblwiID8ge1xuICAgICAgdHlwZTogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxuICAgICAgZmVhdHVyZXM6IG8uZ2VvbWV0cmllcy5tYXAoZnVuY3Rpb24obykgeyByZXR1cm4gZmVhdHVyZSh0b3BvbG9neSwgbyk7IH0pXG4gICAgfSA6IGZlYXR1cmUodG9wb2xvZ3ksIG8pO1xuICB9XG5cbiAgZnVuY3Rpb24gZmVhdHVyZSh0b3BvbG9neSwgbykge1xuICAgIHZhciBmID0ge1xuICAgICAgdHlwZTogXCJGZWF0dXJlXCIsXG4gICAgICBpZDogby5pZCxcbiAgICAgIHByb3BlcnRpZXM6IG8ucHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGdlb21ldHJ5OiBvYmplY3QodG9wb2xvZ3ksIG8pXG4gICAgfTtcbiAgICBpZiAoby5pZCA9PSBudWxsKSBkZWxldGUgZi5pZDtcbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9iamVjdCh0b3BvbG9neSwgbykge1xuICAgIHZhciBhYnNvbHV0ZSA9IHRyYW5zZm9ybUFic29sdXRlKHRvcG9sb2d5LnRyYW5zZm9ybSksXG4gICAgICAgIGFyY3MgPSB0b3BvbG9neS5hcmNzO1xuXG4gICAgZnVuY3Rpb24gYXJjKGksIHBvaW50cykge1xuICAgICAgaWYgKHBvaW50cy5sZW5ndGgpIHBvaW50cy5wb3AoKTtcbiAgICAgIGZvciAodmFyIGEgPSBhcmNzW2kgPCAwID8gfmkgOiBpXSwgayA9IDAsIG4gPSBhLmxlbmd0aCwgcDsgayA8IG47ICsraykge1xuICAgICAgICBwb2ludHMucHVzaChwID0gYVtrXS5zbGljZSgpKTtcbiAgICAgICAgYWJzb2x1dGUocCwgayk7XG4gICAgICB9XG4gICAgICBpZiAoaSA8IDApIHJldmVyc2UocG9pbnRzLCBuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb2ludChwKSB7XG4gICAgICBwID0gcC5zbGljZSgpO1xuICAgICAgYWJzb2x1dGUocCwgMCk7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5lKGFyY3MpIHtcbiAgICAgIHZhciBwb2ludHMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gYXJjcy5sZW5ndGg7IGkgPCBuOyArK2kpIGFyYyhhcmNzW2ldLCBwb2ludHMpO1xuICAgICAgaWYgKHBvaW50cy5sZW5ndGggPCAyKSBwb2ludHMucHVzaChwb2ludHNbMF0uc2xpY2UoKSk7XG4gICAgICByZXR1cm4gcG9pbnRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmcoYXJjcykge1xuICAgICAgdmFyIHBvaW50cyA9IGxpbmUoYXJjcyk7XG4gICAgICB3aGlsZSAocG9pbnRzLmxlbmd0aCA8IDQpIHBvaW50cy5wdXNoKHBvaW50c1swXS5zbGljZSgpKTtcbiAgICAgIHJldHVybiBwb2ludHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9seWdvbihhcmNzKSB7XG4gICAgICByZXR1cm4gYXJjcy5tYXAocmluZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VvbWV0cnkobykge1xuICAgICAgdmFyIHQgPSBvLnR5cGU7XG4gICAgICByZXR1cm4gdCA9PT0gXCJHZW9tZXRyeUNvbGxlY3Rpb25cIiA/IHt0eXBlOiB0LCBnZW9tZXRyaWVzOiBvLmdlb21ldHJpZXMubWFwKGdlb21ldHJ5KX1cbiAgICAgICAgICA6IHQgaW4gZ2VvbWV0cnlUeXBlID8ge3R5cGU6IHQsIGNvb3JkaW5hdGVzOiBnZW9tZXRyeVR5cGVbdF0obyl9XG4gICAgICAgICAgOiBudWxsO1xuICAgIH1cblxuICAgIHZhciBnZW9tZXRyeVR5cGUgPSB7XG4gICAgICBQb2ludDogZnVuY3Rpb24obykgeyByZXR1cm4gcG9pbnQoby5jb29yZGluYXRlcyk7IH0sXG4gICAgICBNdWx0aVBvaW50OiBmdW5jdGlvbihvKSB7IHJldHVybiBvLmNvb3JkaW5hdGVzLm1hcChwb2ludCk7IH0sXG4gICAgICBMaW5lU3RyaW5nOiBmdW5jdGlvbihvKSB7IHJldHVybiBsaW5lKG8uYXJjcyk7IH0sXG4gICAgICBNdWx0aUxpbmVTdHJpbmc6IGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYXJjcy5tYXAobGluZSk7IH0sXG4gICAgICBQb2x5Z29uOiBmdW5jdGlvbihvKSB7IHJldHVybiBwb2x5Z29uKG8uYXJjcyk7IH0sXG4gICAgICBNdWx0aVBvbHlnb246IGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYXJjcy5tYXAocG9seWdvbik7IH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGdlb21ldHJ5KG8pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmV2ZXJzZShhcnJheSwgbikge1xuICAgIHZhciB0LCBqID0gYXJyYXkubGVuZ3RoLCBpID0gaiAtIG47IHdoaWxlIChpIDwgLS1qKSB0ID0gYXJyYXlbaV0sIGFycmF5W2krK10gPSBhcnJheVtqXSwgYXJyYXlbal0gPSB0O1xuICB9XG5cbiAgZnVuY3Rpb24gYmlzZWN0KGEsIHgpIHtcbiAgICB2YXIgbG8gPSAwLCBoaSA9IGEubGVuZ3RoO1xuICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgIGlmIChhW21pZF0gPCB4KSBsbyA9IG1pZCArIDE7XG4gICAgICBlbHNlIGhpID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG87XG4gIH1cblxuICBmdW5jdGlvbiBuZWlnaGJvcnMob2JqZWN0cykge1xuICAgIHZhciBpbmRleGVzQnlBcmMgPSB7fSwgLy8gYXJjIGluZGV4IC0+IGFycmF5IG9mIG9iamVjdCBpbmRleGVzXG4gICAgICAgIG5laWdoYm9ycyA9IG9iamVjdHMubWFwKGZ1bmN0aW9uKCkgeyByZXR1cm4gW107IH0pO1xuXG4gICAgZnVuY3Rpb24gbGluZShhcmNzLCBpKSB7XG4gICAgICBhcmNzLmZvckVhY2goZnVuY3Rpb24oYSkge1xuICAgICAgICBpZiAoYSA8IDApIGEgPSB+YTtcbiAgICAgICAgdmFyIG8gPSBpbmRleGVzQnlBcmNbYV07XG4gICAgICAgIGlmIChvKSBvLnB1c2goaSk7XG4gICAgICAgIGVsc2UgaW5kZXhlc0J5QXJjW2FdID0gW2ldO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9seWdvbihhcmNzLCBpKSB7XG4gICAgICBhcmNzLmZvckVhY2goZnVuY3Rpb24oYXJjKSB7IGxpbmUoYXJjLCBpKTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VvbWV0cnkobywgaSkge1xuICAgICAgaWYgKG8udHlwZSA9PT0gXCJHZW9tZXRyeUNvbGxlY3Rpb25cIikgby5nZW9tZXRyaWVzLmZvckVhY2goZnVuY3Rpb24obykgeyBnZW9tZXRyeShvLCBpKTsgfSk7XG4gICAgICBlbHNlIGlmIChvLnR5cGUgaW4gZ2VvbWV0cnlUeXBlKSBnZW9tZXRyeVR5cGVbby50eXBlXShvLmFyY3MsIGkpO1xuICAgIH1cblxuICAgIHZhciBnZW9tZXRyeVR5cGUgPSB7XG4gICAgICBMaW5lU3RyaW5nOiBsaW5lLFxuICAgICAgTXVsdGlMaW5lU3RyaW5nOiBwb2x5Z29uLFxuICAgICAgUG9seWdvbjogcG9seWdvbixcbiAgICAgIE11bHRpUG9seWdvbjogZnVuY3Rpb24oYXJjcywgaSkgeyBhcmNzLmZvckVhY2goZnVuY3Rpb24oYXJjKSB7IHBvbHlnb24oYXJjLCBpKTsgfSk7IH1cbiAgICB9O1xuXG4gICAgb2JqZWN0cy5mb3JFYWNoKGdlb21ldHJ5KTtcblxuICAgIGZvciAodmFyIGkgaW4gaW5kZXhlc0J5QXJjKSB7XG4gICAgICBmb3IgKHZhciBpbmRleGVzID0gaW5kZXhlc0J5QXJjW2ldLCBtID0gaW5kZXhlcy5sZW5ndGgsIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgICAgIGZvciAodmFyIGsgPSBqICsgMTsgayA8IG07ICsraykge1xuICAgICAgICAgIHZhciBpaiA9IGluZGV4ZXNbal0sIGlrID0gaW5kZXhlc1trXSwgbjtcbiAgICAgICAgICBpZiAoKG4gPSBuZWlnaGJvcnNbaWpdKVtpID0gYmlzZWN0KG4sIGlrKV0gIT09IGlrKSBuLnNwbGljZShpLCAwLCBpayk7XG4gICAgICAgICAgaWYgKChuID0gbmVpZ2hib3JzW2lrXSlbaSA9IGJpc2VjdChuLCBpaildICE9PSBpaikgbi5zcGxpY2UoaSwgMCwgaWopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5laWdoYm9ycztcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXNpbXBsaWZ5KHRvcG9sb2d5LCB0cmlhbmdsZUFyZWEpIHtcbiAgICB2YXIgYWJzb2x1dGUgPSB0cmFuc2Zvcm1BYnNvbHV0ZSh0b3BvbG9neS50cmFuc2Zvcm0pLFxuICAgICAgICByZWxhdGl2ZSA9IHRyYW5zZm9ybVJlbGF0aXZlKHRvcG9sb2d5LnRyYW5zZm9ybSksXG4gICAgICAgIGhlYXAgPSBtaW5BcmVhSGVhcCgpO1xuXG4gICAgaWYgKCF0cmlhbmdsZUFyZWEpIHRyaWFuZ2xlQXJlYSA9IGNhcnRlc2lhblRyaWFuZ2xlQXJlYTtcblxuICAgIHRvcG9sb2d5LmFyY3MuZm9yRWFjaChmdW5jdGlvbihhcmMpIHtcbiAgICAgIHZhciB0cmlhbmdsZXMgPSBbXSxcbiAgICAgICAgICBtYXhBcmVhID0gMCxcbiAgICAgICAgICB0cmlhbmdsZTtcblxuICAgICAgLy8gVG8gc3RvcmUgZWFjaCBwb2ludOKAmXMgZWZmZWN0aXZlIGFyZWEsIHdlIGNyZWF0ZSBhIG5ldyBhcnJheSByYXRoZXIgdGhhblxuICAgICAgLy8gZXh0ZW5kaW5nIHRoZSBwYXNzZWQtaW4gcG9pbnQgdG8gd29ya2Fyb3VuZCBhIENocm9tZS9WOCBidWcgKGdldHRpbmdcbiAgICAgIC8vIHN0dWNrIGluIHNtaSBtb2RlKS4gRm9yIG1pZHBvaW50cywgdGhlIGluaXRpYWwgZWZmZWN0aXZlIGFyZWEgb2ZcbiAgICAgIC8vIEluZmluaXR5IHdpbGwgYmUgY29tcHV0ZWQgaW4gdGhlIG5leHQgc3RlcC5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gYXJjLmxlbmd0aCwgcDsgaSA8IG47ICsraSkge1xuICAgICAgICBwID0gYXJjW2ldO1xuICAgICAgICBhYnNvbHV0ZShhcmNbaV0gPSBbcFswXSwgcFsxXSwgSW5maW5pdHldLCBpKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDEsIG4gPSBhcmMubGVuZ3RoIC0gMTsgaSA8IG47ICsraSkge1xuICAgICAgICB0cmlhbmdsZSA9IGFyYy5zbGljZShpIC0gMSwgaSArIDIpO1xuICAgICAgICB0cmlhbmdsZVsxXVsyXSA9IHRyaWFuZ2xlQXJlYSh0cmlhbmdsZSk7XG4gICAgICAgIHRyaWFuZ2xlcy5wdXNoKHRyaWFuZ2xlKTtcbiAgICAgICAgaGVhcC5wdXNoKHRyaWFuZ2xlKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0cmlhbmdsZXMubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIHRyaWFuZ2xlID0gdHJpYW5nbGVzW2ldO1xuICAgICAgICB0cmlhbmdsZS5wcmV2aW91cyA9IHRyaWFuZ2xlc1tpIC0gMV07XG4gICAgICAgIHRyaWFuZ2xlLm5leHQgPSB0cmlhbmdsZXNbaSArIDFdO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAodHJpYW5nbGUgPSBoZWFwLnBvcCgpKSB7XG4gICAgICAgIHZhciBwcmV2aW91cyA9IHRyaWFuZ2xlLnByZXZpb3VzLFxuICAgICAgICAgICAgbmV4dCA9IHRyaWFuZ2xlLm5leHQ7XG5cbiAgICAgICAgLy8gSWYgdGhlIGFyZWEgb2YgdGhlIGN1cnJlbnQgcG9pbnQgaXMgbGVzcyB0aGFuIHRoYXQgb2YgdGhlIHByZXZpb3VzIHBvaW50XG4gICAgICAgIC8vIHRvIGJlIGVsaW1pbmF0ZWQsIHVzZSB0aGUgbGF0dGVyJ3MgYXJlYSBpbnN0ZWFkLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGVcbiAgICAgICAgLy8gY3VycmVudCBwb2ludCBjYW5ub3QgYmUgZWxpbWluYXRlZCB3aXRob3V0IGVsaW1pbmF0aW5nIHByZXZpb3VzbHktXG4gICAgICAgIC8vIGVsaW1pbmF0ZWQgcG9pbnRzLlxuICAgICAgICBpZiAodHJpYW5nbGVbMV1bMl0gPCBtYXhBcmVhKSB0cmlhbmdsZVsxXVsyXSA9IG1heEFyZWE7XG4gICAgICAgIGVsc2UgbWF4QXJlYSA9IHRyaWFuZ2xlWzFdWzJdO1xuXG4gICAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICAgIHByZXZpb3VzLm5leHQgPSBuZXh0O1xuICAgICAgICAgIHByZXZpb3VzWzJdID0gdHJpYW5nbGVbMl07XG4gICAgICAgICAgdXBkYXRlKHByZXZpb3VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgbmV4dC5wcmV2aW91cyA9IHByZXZpb3VzO1xuICAgICAgICAgIG5leHRbMF0gPSB0cmlhbmdsZVswXTtcbiAgICAgICAgICB1cGRhdGUobmV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXJjLmZvckVhY2gocmVsYXRpdmUpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlKHRyaWFuZ2xlKSB7XG4gICAgICBoZWFwLnJlbW92ZSh0cmlhbmdsZSk7XG4gICAgICB0cmlhbmdsZVsxXVsyXSA9IHRyaWFuZ2xlQXJlYSh0cmlhbmdsZSk7XG4gICAgICBoZWFwLnB1c2godHJpYW5nbGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0b3BvbG9neTtcbiAgfTtcblxuICBmdW5jdGlvbiBjYXJ0ZXNpYW5SaW5nQXJlYShyaW5nKSB7XG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IHJpbmcubGVuZ3RoLFxuICAgICAgICBhLFxuICAgICAgICBiID0gcmluZ1tuIC0gMV0sXG4gICAgICAgIGFyZWEgPSAwO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGEgPSBiO1xuICAgICAgYiA9IHJpbmdbaV07XG4gICAgICBhcmVhICs9IGFbMF0gKiBiWzFdIC0gYVsxXSAqIGJbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZWEgKiAuNTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhcnRlc2lhblRyaWFuZ2xlQXJlYSh0cmlhbmdsZSkge1xuICAgIHZhciBhID0gdHJpYW5nbGVbMF0sIGIgPSB0cmlhbmdsZVsxXSwgYyA9IHRyaWFuZ2xlWzJdO1xuICAgIHJldHVybiBNYXRoLmFicygoYVswXSAtIGNbMF0pICogKGJbMV0gLSBhWzFdKSAtIChhWzBdIC0gYlswXSkgKiAoY1sxXSAtIGFbMV0pKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVBcmVhKGEsIGIpIHtcbiAgICByZXR1cm4gYVsxXVsyXSAtIGJbMV1bMl07XG4gIH1cblxuICBmdW5jdGlvbiBtaW5BcmVhSGVhcCgpIHtcbiAgICB2YXIgaGVhcCA9IHt9LFxuICAgICAgICBhcnJheSA9IFtdLFxuICAgICAgICBzaXplID0gMDtcblxuICAgIGhlYXAucHVzaCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgdXAoYXJyYXlbb2JqZWN0Ll8gPSBzaXplXSA9IG9iamVjdCwgc2l6ZSsrKTtcbiAgICAgIHJldHVybiBzaXplO1xuICAgIH07XG5cbiAgICBoZWFwLnBvcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNpemUgPD0gMCkgcmV0dXJuO1xuICAgICAgdmFyIHJlbW92ZWQgPSBhcnJheVswXSwgb2JqZWN0O1xuICAgICAgaWYgKC0tc2l6ZSA+IDApIG9iamVjdCA9IGFycmF5W3NpemVdLCBkb3duKGFycmF5W29iamVjdC5fID0gMF0gPSBvYmplY3QsIDApO1xuICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfTtcblxuICAgIGhlYXAucmVtb3ZlID0gZnVuY3Rpb24ocmVtb3ZlZCkge1xuICAgICAgdmFyIGkgPSByZW1vdmVkLl8sIG9iamVjdDtcbiAgICAgIGlmIChhcnJheVtpXSAhPT0gcmVtb3ZlZCkgcmV0dXJuOyAvLyBpbnZhbGlkIHJlcXVlc3RcbiAgICAgIGlmIChpICE9PSAtLXNpemUpIG9iamVjdCA9IGFycmF5W3NpemVdLCAoY29tcGFyZUFyZWEob2JqZWN0LCByZW1vdmVkKSA8IDAgPyB1cCA6IGRvd24pKGFycmF5W29iamVjdC5fID0gaV0gPSBvYmplY3QsIGkpO1xuICAgICAgcmV0dXJuIGk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHVwKG9iamVjdCwgaSkge1xuICAgICAgd2hpbGUgKGkgPiAwKSB7XG4gICAgICAgIHZhciBqID0gKChpICsgMSkgPj4gMSkgLSAxLFxuICAgICAgICAgICAgcGFyZW50ID0gYXJyYXlbal07XG4gICAgICAgIGlmIChjb21wYXJlQXJlYShvYmplY3QsIHBhcmVudCkgPj0gMCkgYnJlYWs7XG4gICAgICAgIGFycmF5W3BhcmVudC5fID0gaV0gPSBwYXJlbnQ7XG4gICAgICAgIGFycmF5W29iamVjdC5fID0gaSA9IGpdID0gb2JqZWN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRvd24ob2JqZWN0LCBpKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgciA9IChpICsgMSkgPDwgMSxcbiAgICAgICAgICAgIGwgPSByIC0gMSxcbiAgICAgICAgICAgIGogPSBpLFxuICAgICAgICAgICAgY2hpbGQgPSBhcnJheVtqXTtcbiAgICAgICAgaWYgKGwgPCBzaXplICYmIGNvbXBhcmVBcmVhKGFycmF5W2xdLCBjaGlsZCkgPCAwKSBjaGlsZCA9IGFycmF5W2ogPSBsXTtcbiAgICAgICAgaWYgKHIgPCBzaXplICYmIGNvbXBhcmVBcmVhKGFycmF5W3JdLCBjaGlsZCkgPCAwKSBjaGlsZCA9IGFycmF5W2ogPSByXTtcbiAgICAgICAgaWYgKGogPT09IGkpIGJyZWFrO1xuICAgICAgICBhcnJheVtjaGlsZC5fID0gaV0gPSBjaGlsZDtcbiAgICAgICAgYXJyYXlbb2JqZWN0Ll8gPSBpID0gal0gPSBvYmplY3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYXA7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1BYnNvbHV0ZSh0cmFuc2Zvcm0pIHtcbiAgICBpZiAoIXRyYW5zZm9ybSkgcmV0dXJuIG5vb3A7XG4gICAgdmFyIHgwLFxuICAgICAgICB5MCxcbiAgICAgICAga3ggPSB0cmFuc2Zvcm0uc2NhbGVbMF0sXG4gICAgICAgIGt5ID0gdHJhbnNmb3JtLnNjYWxlWzFdLFxuICAgICAgICBkeCA9IHRyYW5zZm9ybS50cmFuc2xhdGVbMF0sXG4gICAgICAgIGR5ID0gdHJhbnNmb3JtLnRyYW5zbGF0ZVsxXTtcbiAgICByZXR1cm4gZnVuY3Rpb24ocG9pbnQsIGkpIHtcbiAgICAgIGlmICghaSkgeDAgPSB5MCA9IDA7XG4gICAgICBwb2ludFswXSA9ICh4MCArPSBwb2ludFswXSkgKiBreCArIGR4O1xuICAgICAgcG9pbnRbMV0gPSAoeTAgKz0gcG9pbnRbMV0pICoga3kgKyBkeTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtUmVsYXRpdmUodHJhbnNmb3JtKSB7XG4gICAgaWYgKCF0cmFuc2Zvcm0pIHJldHVybiBub29wO1xuICAgIHZhciB4MCxcbiAgICAgICAgeTAsXG4gICAgICAgIGt4ID0gdHJhbnNmb3JtLnNjYWxlWzBdLFxuICAgICAgICBreSA9IHRyYW5zZm9ybS5zY2FsZVsxXSxcbiAgICAgICAgZHggPSB0cmFuc2Zvcm0udHJhbnNsYXRlWzBdLFxuICAgICAgICBkeSA9IHRyYW5zZm9ybS50cmFuc2xhdGVbMV07XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHBvaW50LCBpKSB7XG4gICAgICBpZiAoIWkpIHgwID0geTAgPSAwO1xuICAgICAgdmFyIHgxID0gKHBvaW50WzBdIC0gZHgpIC8ga3ggfCAwLFxuICAgICAgICAgIHkxID0gKHBvaW50WzFdIC0gZHkpIC8ga3kgfCAwO1xuICAgICAgcG9pbnRbMF0gPSB4MSAtIHgwO1xuICAgICAgcG9pbnRbMV0gPSB5MSAtIHkwO1xuICAgICAgeDAgPSB4MTtcbiAgICAgIHkwID0geTE7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKHRvcG9qc29uKTtcbiAgZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSB0b3BvanNvbjtcbiAgZWxzZSB0aGlzLnRvcG9qc29uID0gdG9wb2pzb247XG59KCk7XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCxCdWZmZXIpe1xuJ3VzZSBzdHJpY3QnXG5cbnZhciBiaXRzID0gcmVxdWlyZSgnYml0LXR3aWRkbGUnKVxudmFyIGR1cCA9IHJlcXVpcmUoJ2R1cCcpXG5cbi8vTGVnYWN5IHBvb2wgc3VwcG9ydFxuaWYoIWdsb2JhbC5fX1RZUEVEQVJSQVlfUE9PTCkge1xuICBnbG9iYWwuX19UWVBFREFSUkFZX1BPT0wgPSB7XG4gICAgICBVSU5UOCAgIDogZHVwKFszMiwgMF0pXG4gICAgLCBVSU5UMTYgIDogZHVwKFszMiwgMF0pXG4gICAgLCBVSU5UMzIgIDogZHVwKFszMiwgMF0pXG4gICAgLCBJTlQ4ICAgIDogZHVwKFszMiwgMF0pXG4gICAgLCBJTlQxNiAgIDogZHVwKFszMiwgMF0pXG4gICAgLCBJTlQzMiAgIDogZHVwKFszMiwgMF0pXG4gICAgLCBGTE9BVCAgIDogZHVwKFszMiwgMF0pXG4gICAgLCBET1VCTEUgIDogZHVwKFszMiwgMF0pXG4gICAgLCBEQVRBICAgIDogZHVwKFszMiwgMF0pXG4gICAgLCBVSU5UOEMgIDogZHVwKFszMiwgMF0pXG4gICAgLCBCVUZGRVIgIDogZHVwKFszMiwgMF0pXG4gIH1cbn1cblxudmFyIGhhc1VpbnQ4QyA9ICh0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkpICE9PSAndW5kZWZpbmVkJ1xudmFyIFBPT0wgPSBnbG9iYWwuX19UWVBFREFSUkFZX1BPT0xcblxuLy9VcGdyYWRlIHBvb2xcbmlmKCFQT09MLlVJTlQ4Qykge1xuICBQT09MLlVJTlQ4QyA9IGR1cChbMzIsIDBdKVxufVxuaWYoIVBPT0wuQlVGRkVSKSB7XG4gIFBPT0wuQlVGRkVSID0gZHVwKFszMiwgMF0pXG59XG5cbi8vTmV3IHRlY2huaXF1ZTogT25seSBhbGxvY2F0ZSBmcm9tIEFycmF5QnVmZmVyVmlldyBhbmQgQnVmZmVyXG52YXIgREFUQSAgICA9IFBPT0wuREFUQVxuICAsIEJVRkZFUiAgPSBQT09MLkJVRkZFUlxuXG5leHBvcnRzLmZyZWUgPSBmdW5jdGlvbiBmcmVlKGFycmF5KSB7XG4gIGlmKEJ1ZmZlci5pc0J1ZmZlcihhcnJheSkpIHtcbiAgICBCVUZGRVJbYml0cy5sb2cyKGFycmF5Lmxlbmd0aCldLnB1c2goYXJyYXkpXG4gIH0gZWxzZSB7XG4gICAgaWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycmF5KSAhPT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJykge1xuICAgICAgYXJyYXkgPSBhcnJheS5idWZmZXJcbiAgICB9XG4gICAgaWYoIWFycmF5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIG4gPSBhcnJheS5sZW5ndGggfHwgYXJyYXkuYnl0ZUxlbmd0aFxuICAgIHZhciBsb2dfbiA9IGJpdHMubG9nMihuKXwwXG4gICAgREFUQVtsb2dfbl0ucHVzaChhcnJheSlcbiAgfVxufVxuXG5mdW5jdGlvbiBmcmVlQXJyYXlCdWZmZXIoYnVmZmVyKSB7XG4gIGlmKCFidWZmZXIpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgbiA9IGJ1ZmZlci5sZW5ndGggfHwgYnVmZmVyLmJ5dGVMZW5ndGhcbiAgdmFyIGxvZ19uID0gYml0cy5sb2cyKG4pXG4gIERBVEFbbG9nX25dLnB1c2goYnVmZmVyKVxufVxuXG5mdW5jdGlvbiBmcmVlVHlwZWRBcnJheShhcnJheSkge1xuICBmcmVlQXJyYXlCdWZmZXIoYXJyYXkuYnVmZmVyKVxufVxuXG5leHBvcnRzLmZyZWVVaW50OCA9XG5leHBvcnRzLmZyZWVVaW50MTYgPVxuZXhwb3J0cy5mcmVlVWludDMyID1cbmV4cG9ydHMuZnJlZUludDggPVxuZXhwb3J0cy5mcmVlSW50MTYgPVxuZXhwb3J0cy5mcmVlSW50MzIgPVxuZXhwb3J0cy5mcmVlRmxvYXQzMiA9IFxuZXhwb3J0cy5mcmVlRmxvYXQgPVxuZXhwb3J0cy5mcmVlRmxvYXQ2NCA9IFxuZXhwb3J0cy5mcmVlRG91YmxlID0gXG5leHBvcnRzLmZyZWVVaW50OENsYW1wZWQgPSBcbmV4cG9ydHMuZnJlZURhdGFWaWV3ID0gZnJlZVR5cGVkQXJyYXlcblxuZXhwb3J0cy5mcmVlQXJyYXlCdWZmZXIgPSBmcmVlQXJyYXlCdWZmZXJcblxuZXhwb3J0cy5mcmVlQnVmZmVyID0gZnVuY3Rpb24gZnJlZUJ1ZmZlcihhcnJheSkge1xuICBCVUZGRVJbYml0cy5sb2cyKGFycmF5Lmxlbmd0aCldLnB1c2goYXJyYXkpXG59XG5cbmV4cG9ydHMubWFsbG9jID0gZnVuY3Rpb24gbWFsbG9jKG4sIGR0eXBlKSB7XG4gIGlmKGR0eXBlID09PSB1bmRlZmluZWQgfHwgZHR5cGUgPT09ICdhcnJheWJ1ZmZlcicpIHtcbiAgICByZXR1cm4gbWFsbG9jQXJyYXlCdWZmZXIobilcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2goZHR5cGUpIHtcbiAgICAgIGNhc2UgJ3VpbnQ4JzpcbiAgICAgICAgcmV0dXJuIG1hbGxvY1VpbnQ4KG4pXG4gICAgICBjYXNlICd1aW50MTYnOlxuICAgICAgICByZXR1cm4gbWFsbG9jVWludDE2KG4pXG4gICAgICBjYXNlICd1aW50MzInOlxuICAgICAgICByZXR1cm4gbWFsbG9jVWludDMyKG4pXG4gICAgICBjYXNlICdpbnQ4JzpcbiAgICAgICAgcmV0dXJuIG1hbGxvY0ludDgobilcbiAgICAgIGNhc2UgJ2ludDE2JzpcbiAgICAgICAgcmV0dXJuIG1hbGxvY0ludDE2KG4pXG4gICAgICBjYXNlICdpbnQzMic6XG4gICAgICAgIHJldHVybiBtYWxsb2NJbnQzMihuKVxuICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgY2FzZSAnZmxvYXQzMic6XG4gICAgICAgIHJldHVybiBtYWxsb2NGbG9hdChuKVxuICAgICAgY2FzZSAnZG91YmxlJzpcbiAgICAgIGNhc2UgJ2Zsb2F0NjQnOlxuICAgICAgICByZXR1cm4gbWFsbG9jRG91YmxlKG4pXG4gICAgICBjYXNlICd1aW50OF9jbGFtcGVkJzpcbiAgICAgICAgcmV0dXJuIG1hbGxvY1VpbnQ4Q2xhbXBlZChuKVxuICAgICAgY2FzZSAnYnVmZmVyJzpcbiAgICAgICAgcmV0dXJuIG1hbGxvY0J1ZmZlcihuKVxuICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICBjYXNlICdkYXRhdmlldyc6XG4gICAgICAgIHJldHVybiBtYWxsb2NEYXRhVmlldyhuKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBtYWxsb2NBcnJheUJ1ZmZlcihuKSB7XG4gIHZhciBuID0gYml0cy5uZXh0UG93MihuKVxuICB2YXIgbG9nX24gPSBiaXRzLmxvZzIobilcbiAgdmFyIGQgPSBEQVRBW2xvZ19uXVxuICBpZihkLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZC5wb3AoKVxuICB9XG4gIHJldHVybiBuZXcgQXJyYXlCdWZmZXIobilcbn1cbmV4cG9ydHMubWFsbG9jQXJyYXlCdWZmZXIgPSBtYWxsb2NBcnJheUJ1ZmZlclxuXG5mdW5jdGlvbiBtYWxsb2NVaW50OChuKSB7XG4gIHJldHVybiBuZXcgVWludDhBcnJheShtYWxsb2NBcnJheUJ1ZmZlcihuKSwgMCwgbilcbn1cbmV4cG9ydHMubWFsbG9jVWludDggPSBtYWxsb2NVaW50OFxuXG5mdW5jdGlvbiBtYWxsb2NVaW50MTYobikge1xuICByZXR1cm4gbmV3IFVpbnQxNkFycmF5KG1hbGxvY0FycmF5QnVmZmVyKDIqbiksIDAsIG4pXG59XG5leHBvcnRzLm1hbGxvY1VpbnQxNiA9IG1hbGxvY1VpbnQxNlxuXG5mdW5jdGlvbiBtYWxsb2NVaW50MzIobikge1xuICByZXR1cm4gbmV3IFVpbnQzMkFycmF5KG1hbGxvY0FycmF5QnVmZmVyKDQqbiksIDAsIG4pXG59XG5leHBvcnRzLm1hbGxvY1VpbnQzMiA9IG1hbGxvY1VpbnQzMlxuXG5mdW5jdGlvbiBtYWxsb2NJbnQ4KG4pIHtcbiAgcmV0dXJuIG5ldyBJbnQ4QXJyYXkobWFsbG9jQXJyYXlCdWZmZXIobiksIDAsIG4pXG59XG5leHBvcnRzLm1hbGxvY0ludDggPSBtYWxsb2NJbnQ4XG5cbmZ1bmN0aW9uIG1hbGxvY0ludDE2KG4pIHtcbiAgcmV0dXJuIG5ldyBJbnQxNkFycmF5KG1hbGxvY0FycmF5QnVmZmVyKDIqbiksIDAsIG4pXG59XG5leHBvcnRzLm1hbGxvY0ludDE2ID0gbWFsbG9jSW50MTZcblxuZnVuY3Rpb24gbWFsbG9jSW50MzIobikge1xuICByZXR1cm4gbmV3IEludDMyQXJyYXkobWFsbG9jQXJyYXlCdWZmZXIoNCpuKSwgMCwgbilcbn1cbmV4cG9ydHMubWFsbG9jSW50MzIgPSBtYWxsb2NJbnQzMlxuXG5mdW5jdGlvbiBtYWxsb2NGbG9hdChuKSB7XG4gIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KG1hbGxvY0FycmF5QnVmZmVyKDQqbiksIDAsIG4pXG59XG5leHBvcnRzLm1hbGxvY0Zsb2F0MzIgPSBleHBvcnRzLm1hbGxvY0Zsb2F0ID0gbWFsbG9jRmxvYXRcblxuZnVuY3Rpb24gbWFsbG9jRG91YmxlKG4pIHtcbiAgcmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkobWFsbG9jQXJyYXlCdWZmZXIoOCpuKSwgMCwgbilcbn1cbmV4cG9ydHMubWFsbG9jRmxvYXQ2NCA9IGV4cG9ydHMubWFsbG9jRG91YmxlID0gbWFsbG9jRG91YmxlXG5cbmZ1bmN0aW9uIG1hbGxvY1VpbnQ4Q2xhbXBlZChuKSB7XG4gIGlmKGhhc1VpbnQ4Qykge1xuICAgIHJldHVybiBuZXcgVWludDhDbGFtcGVkQXJyYXkobWFsbG9jQXJyYXlCdWZmZXIobiksIDAsIG4pXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hbGxvY1VpbnQ4KG4pXG4gIH1cbn1cbmV4cG9ydHMubWFsbG9jVWludDhDbGFtcGVkID0gbWFsbG9jVWludDhDbGFtcGVkXG5cbmZ1bmN0aW9uIG1hbGxvY0RhdGFWaWV3KG4pIHtcbiAgcmV0dXJuIG5ldyBEYXRhVmlldyhtYWxsb2NBcnJheUJ1ZmZlcihuKSwgMCwgbilcbn1cbmV4cG9ydHMubWFsbG9jRGF0YVZpZXcgPSBtYWxsb2NEYXRhVmlld1xuXG5mdW5jdGlvbiBtYWxsb2NCdWZmZXIobikge1xuICBuID0gYml0cy5uZXh0UG93MihuKVxuICB2YXIgbG9nX24gPSBiaXRzLmxvZzIobilcbiAgdmFyIGNhY2hlID0gQlVGRkVSW2xvZ19uXVxuICBpZihjYWNoZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGNhY2hlLnBvcCgpXG4gIH1cbiAgcmV0dXJuIG5ldyBCdWZmZXIobilcbn1cbmV4cG9ydHMubWFsbG9jQnVmZmVyID0gbWFsbG9jQnVmZmVyXG5cbmV4cG9ydHMuY2xlYXJDYWNoZSA9IGZ1bmN0aW9uIGNsZWFyQ2FjaGUoKSB7XG4gIGZvcih2YXIgaT0wOyBpPDMyOyArK2kpIHtcbiAgICBQT09MLlVJTlQ4W2ldLmxlbmd0aCA9IDBcbiAgICBQT09MLlVJTlQxNltpXS5sZW5ndGggPSAwXG4gICAgUE9PTC5VSU5UMzJbaV0ubGVuZ3RoID0gMFxuICAgIFBPT0wuSU5UOFtpXS5sZW5ndGggPSAwXG4gICAgUE9PTC5JTlQxNltpXS5sZW5ndGggPSAwXG4gICAgUE9PTC5JTlQzMltpXS5sZW5ndGggPSAwXG4gICAgUE9PTC5GTE9BVFtpXS5sZW5ndGggPSAwXG4gICAgUE9PTC5ET1VCTEVbaV0ubGVuZ3RoID0gMFxuICAgIFBPT0wuVUlOVDhDW2ldLmxlbmd0aCA9IDBcbiAgICBEQVRBW2ldLmxlbmd0aCA9IDBcbiAgICBCVUZGRVJbaV0ubGVuZ3RoID0gMFxuICB9XG59XG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSxyZXF1aXJlKFwiYnVmZmVyXCIpLkJ1ZmZlcilcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTkwZVhCbFpHRnljbUY1TFhCdmIyd3ZjRzl2YkM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaWQxYzJVZ2MzUnlhV04wSjF4dVhHNTJZWElnWW1sMGN5QTlJSEpsY1hWcGNtVW9KMkpwZEMxMGQybGtaR3hsSnlsY2JuWmhjaUJrZFhBZ1BTQnlaWEYxYVhKbEtDZGtkWEFuS1Z4dVhHNHZMMHhsWjJGamVTQndiMjlzSUhOMWNIQnZjblJjYm1sbUtDRm5iRzlpWVd3dVgxOVVXVkJGUkVGU1VrRlpYMUJQVDB3cElIdGNiaUFnWjJ4dlltRnNMbDlmVkZsUVJVUkJVbEpCV1Y5UVQwOU1JRDBnZTF4dUlDQWdJQ0FnVlVsT1ZEZ2dJQ0E2SUdSMWNDaGJNeklzSURCZEtWeHVJQ0FnSUN3Z1ZVbE9WREUySUNBNklHUjFjQ2hiTXpJc0lEQmRLVnh1SUNBZ0lDd2dWVWxPVkRNeUlDQTZJR1IxY0NoYk16SXNJREJkS1Z4dUlDQWdJQ3dnU1U1VU9DQWdJQ0E2SUdSMWNDaGJNeklzSURCZEtWeHVJQ0FnSUN3Z1NVNVVNVFlnSUNBNklHUjFjQ2hiTXpJc0lEQmRLVnh1SUNBZ0lDd2dTVTVVTXpJZ0lDQTZJR1IxY0NoYk16SXNJREJkS1Z4dUlDQWdJQ3dnUmt4UFFWUWdJQ0E2SUdSMWNDaGJNeklzSURCZEtWeHVJQ0FnSUN3Z1JFOVZRa3hGSUNBNklHUjFjQ2hiTXpJc0lEQmRLVnh1SUNBZ0lDd2dSRUZVUVNBZ0lDQTZJR1IxY0NoYk16SXNJREJkS1Z4dUlDQWdJQ3dnVlVsT1ZEaERJQ0E2SUdSMWNDaGJNeklzSURCZEtWeHVJQ0FnSUN3Z1FsVkdSa1ZTSUNBNklHUjFjQ2hiTXpJc0lEQmRLVnh1SUNCOVhHNTlYRzVjYm5aaGNpQm9ZWE5WYVc1ME9FTWdQU0FvZEhsd1pXOW1JRlZwYm5RNFEyeGhiWEJsWkVGeWNtRjVLU0FoUFQwZ0ozVnVaR1ZtYVc1bFpDZGNiblpoY2lCUVQwOU1JRDBnWjJ4dlltRnNMbDlmVkZsUVJVUkJVbEpCV1Y5UVQwOU1YRzVjYmk4dlZYQm5jbUZrWlNCd2IyOXNYRzVwWmlnaFVFOVBUQzVWU1U1VU9FTXBJSHRjYmlBZ1VFOVBUQzVWU1U1VU9FTWdQU0JrZFhBb1d6TXlMQ0F3WFNsY2JuMWNibWxtS0NGUVQwOU1Ma0pWUmtaRlVpa2dlMXh1SUNCUVQwOU1Ma0pWUmtaRlVpQTlJR1IxY0NoYk16SXNJREJkS1Z4dWZWeHVYRzR2TDA1bGR5QjBaV05vYm1seGRXVTZJRTl1YkhrZ1lXeHNiMk5oZEdVZ1puSnZiU0JCY25KaGVVSjFabVpsY2xacFpYY2dZVzVrSUVKMVptWmxjbHh1ZG1GeUlFUkJWRUVnSUNBZ1BTQlFUMDlNTGtSQlZFRmNiaUFnTENCQ1ZVWkdSVklnSUQwZ1VFOVBUQzVDVlVaR1JWSmNibHh1Wlhod2IzSjBjeTVtY21WbElEMGdablZ1WTNScGIyNGdabkpsWlNoaGNuSmhlU2tnZTF4dUlDQnBaaWhDZFdabVpYSXVhWE5DZFdabVpYSW9ZWEp5WVhrcEtTQjdYRzRnSUNBZ1FsVkdSa1ZTVzJKcGRITXViRzluTWloaGNuSmhlUzVzWlc1bmRHZ3BYUzV3ZFhOb0tHRnljbUY1S1Z4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUdsbUtFOWlhbVZqZEM1d2NtOTBiM1I1Y0dVdWRHOVRkSEpwYm1jdVkyRnNiQ2hoY25KaGVTa2dJVDA5SUNkYmIySnFaV04wSUVGeWNtRjVRblZtWm1WeVhTY3BJSHRjYmlBZ0lDQWdJR0Z5Y21GNUlEMGdZWEp5WVhrdVluVm1abVZ5WEc0Z0lDQWdmVnh1SUNBZ0lHbG1LQ0ZoY25KaGVTa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdVhHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCdUlEMGdZWEp5WVhrdWJHVnVaM1JvSUh4OElHRnljbUY1TG1KNWRHVk1aVzVuZEdoY2JpQWdJQ0IyWVhJZ2JHOW5YMjRnUFNCaWFYUnpMbXh2WnpJb2JpbDhNRnh1SUNBZ0lFUkJWRUZiYkc5blgyNWRMbkIxYzJnb1lYSnlZWGtwWEc0Z0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z1puSmxaVUZ5Y21GNVFuVm1abVZ5S0dKMVptWmxjaWtnZTF4dUlDQnBaaWdoWW5WbVptVnlLU0I3WEc0Z0lDQWdjbVYwZFhKdVhHNGdJSDFjYmlBZ2RtRnlJRzRnUFNCaWRXWm1aWEl1YkdWdVozUm9JSHg4SUdKMVptWmxjaTVpZVhSbFRHVnVaM1JvWEc0Z0lIWmhjaUJzYjJkZmJpQTlJR0pwZEhNdWJHOW5NaWh1S1Z4dUlDQkVRVlJCVzJ4dloxOXVYUzV3ZFhOb0tHSjFabVpsY2lsY2JuMWNibHh1Wm5WdVkzUnBiMjRnWm5KbFpWUjVjR1ZrUVhKeVlYa29ZWEp5WVhrcElIdGNiaUFnWm5KbFpVRnljbUY1UW5WbVptVnlLR0Z5Y21GNUxtSjFabVpsY2lsY2JuMWNibHh1Wlhod2IzSjBjeTVtY21WbFZXbHVkRGdnUFZ4dVpYaHdiM0owY3k1bWNtVmxWV2x1ZERFMklEMWNibVY0Y0c5eWRITXVabkpsWlZWcGJuUXpNaUE5WEc1bGVIQnZjblJ6TG1aeVpXVkpiblE0SUQxY2JtVjRjRzl5ZEhNdVpuSmxaVWx1ZERFMklEMWNibVY0Y0c5eWRITXVabkpsWlVsdWRETXlJRDFjYm1WNGNHOXlkSE11Wm5KbFpVWnNiMkYwTXpJZ1BTQmNibVY0Y0c5eWRITXVabkpsWlVac2IyRjBJRDFjYm1WNGNHOXlkSE11Wm5KbFpVWnNiMkYwTmpRZ1BTQmNibVY0Y0c5eWRITXVabkpsWlVSdmRXSnNaU0E5SUZ4dVpYaHdiM0owY3k1bWNtVmxWV2x1ZERoRGJHRnRjR1ZrSUQwZ1hHNWxlSEJ2Y25SekxtWnlaV1ZFWVhSaFZtbGxkeUE5SUdaeVpXVlVlWEJsWkVGeWNtRjVYRzVjYm1WNGNHOXlkSE11Wm5KbFpVRnljbUY1UW5WbVptVnlJRDBnWm5KbFpVRnljbUY1UW5WbVptVnlYRzVjYm1WNGNHOXlkSE11Wm5KbFpVSjFabVpsY2lBOUlHWjFibU4wYVc5dUlHWnlaV1ZDZFdabVpYSW9ZWEp5WVhrcElIdGNiaUFnUWxWR1JrVlNXMkpwZEhNdWJHOW5NaWhoY25KaGVTNXNaVzVuZEdncFhTNXdkWE5vS0dGeWNtRjVLVnh1ZlZ4dVhHNWxlSEJ2Y25SekxtMWhiR3h2WXlBOUlHWjFibU4wYVc5dUlHMWhiR3h2WXlodUxDQmtkSGx3WlNrZ2UxeHVJQ0JwWmloa2RIbHdaU0E5UFQwZ2RXNWtaV1pwYm1Wa0lIeDhJR1IwZVhCbElEMDlQU0FuWVhKeVlYbGlkV1ptWlhJbktTQjdYRzRnSUNBZ2NtVjBkWEp1SUcxaGJHeHZZMEZ5Y21GNVFuVm1abVZ5S0c0cFhHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2MzZHBkR05vS0dSMGVYQmxLU0I3WEc0Z0lDQWdJQ0JqWVhObElDZDFhVzUwT0NjNlhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdFlXeHNiMk5WYVc1ME9DaHVLVnh1SUNBZ0lDQWdZMkZ6WlNBbmRXbHVkREUySnpwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUcxaGJHeHZZMVZwYm5ReE5paHVLVnh1SUNBZ0lDQWdZMkZ6WlNBbmRXbHVkRE15SnpwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUcxaGJHeHZZMVZwYm5Rek1paHVLVnh1SUNBZ0lDQWdZMkZ6WlNBbmFXNTBPQ2M2WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ0WVd4c2IyTkpiblE0S0c0cFhHNGdJQ0FnSUNCallYTmxJQ2RwYm5ReE5pYzZYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnRZV3hzYjJOSmJuUXhOaWh1S1Z4dUlDQWdJQ0FnWTJGelpTQW5hVzUwTXpJbk9seHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JXRnNiRzlqU1c1ME16SW9iaWxjYmlBZ0lDQWdJR05oYzJVZ0oyWnNiMkYwSnpwY2JpQWdJQ0FnSUdOaGMyVWdKMlpzYjJGME16SW5PbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiV0ZzYkc5alJteHZZWFFvYmlsY2JpQWdJQ0FnSUdOaGMyVWdKMlJ2ZFdKc1pTYzZYRzRnSUNBZ0lDQmpZWE5sSUNkbWJHOWhkRFkwSnpwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUcxaGJHeHZZMFJ2ZFdKc1pTaHVLVnh1SUNBZ0lDQWdZMkZ6WlNBbmRXbHVkRGhmWTJ4aGJYQmxaQ2M2WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ0WVd4c2IyTlZhVzUwT0VOc1lXMXdaV1FvYmlsY2JpQWdJQ0FnSUdOaGMyVWdKMkoxWm1abGNpYzZYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnRZV3hzYjJOQ2RXWm1aWElvYmlsY2JpQWdJQ0FnSUdOaGMyVWdKMlJoZEdFbk9seHVJQ0FnSUNBZ1kyRnpaU0FuWkdGMFlYWnBaWGNuT2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYldGc2JHOWpSR0YwWVZacFpYY29iaWxjYmx4dUlDQWdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzUxYkd4Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzUxYkd4Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYldGc2JHOWpRWEp5WVhsQ2RXWm1aWElvYmlrZ2UxeHVJQ0IyWVhJZ2JpQTlJR0pwZEhNdWJtVjRkRkJ2ZHpJb2JpbGNiaUFnZG1GeUlHeHZaMTl1SUQwZ1ltbDBjeTVzYjJjeUtHNHBYRzRnSUhaaGNpQmtJRDBnUkVGVVFWdHNiMmRmYmwxY2JpQWdhV1lvWkM1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUdRdWNHOXdLQ2xjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdibVYzSUVGeWNtRjVRblZtWm1WeUtHNHBYRzU5WEc1bGVIQnZjblJ6TG0xaGJHeHZZMEZ5Y21GNVFuVm1abVZ5SUQwZ2JXRnNiRzlqUVhKeVlYbENkV1ptWlhKY2JseHVablZ1WTNScGIyNGdiV0ZzYkc5alZXbHVkRGdvYmlrZ2UxeHVJQ0J5WlhSMWNtNGdibVYzSUZWcGJuUTRRWEp5WVhrb2JXRnNiRzlqUVhKeVlYbENkV1ptWlhJb2Jpa3NJREFzSUc0cFhHNTlYRzVsZUhCdmNuUnpMbTFoYkd4dlkxVnBiblE0SUQwZ2JXRnNiRzlqVldsdWREaGNibHh1Wm5WdVkzUnBiMjRnYldGc2JHOWpWV2x1ZERFMktHNHBJSHRjYmlBZ2NtVjBkWEp1SUc1bGR5QlZhVzUwTVRaQmNuSmhlU2h0WVd4c2IyTkJjbkpoZVVKMVptWmxjaWd5S200cExDQXdMQ0J1S1Z4dWZWeHVaWGh3YjNKMGN5NXRZV3hzYjJOVmFXNTBNVFlnUFNCdFlXeHNiMk5WYVc1ME1UWmNibHh1Wm5WdVkzUnBiMjRnYldGc2JHOWpWV2x1ZERNeUtHNHBJSHRjYmlBZ2NtVjBkWEp1SUc1bGR5QlZhVzUwTXpKQmNuSmhlU2h0WVd4c2IyTkJjbkpoZVVKMVptWmxjaWcwS200cExDQXdMQ0J1S1Z4dWZWeHVaWGh3YjNKMGN5NXRZV3hzYjJOVmFXNTBNeklnUFNCdFlXeHNiMk5WYVc1ME16SmNibHh1Wm5WdVkzUnBiMjRnYldGc2JHOWpTVzUwT0NodUtTQjdYRzRnSUhKbGRIVnliaUJ1WlhjZ1NXNTBPRUZ5Y21GNUtHMWhiR3h2WTBGeWNtRjVRblZtWm1WeUtHNHBMQ0F3TENCdUtWeHVmVnh1Wlhod2IzSjBjeTV0WVd4c2IyTkpiblE0SUQwZ2JXRnNiRzlqU1c1ME9GeHVYRzVtZFc1amRHbHZiaUJ0WVd4c2IyTkpiblF4TmlodUtTQjdYRzRnSUhKbGRIVnliaUJ1WlhjZ1NXNTBNVFpCY25KaGVTaHRZV3hzYjJOQmNuSmhlVUoxWm1abGNpZ3lLbTRwTENBd0xDQnVLVnh1ZlZ4dVpYaHdiM0owY3k1dFlXeHNiMk5KYm5ReE5pQTlJRzFoYkd4dlkwbHVkREUyWEc1Y2JtWjFibU4wYVc5dUlHMWhiR3h2WTBsdWRETXlLRzRwSUh0Y2JpQWdjbVYwZFhKdUlHNWxkeUJKYm5Rek1rRnljbUY1S0cxaGJHeHZZMEZ5Y21GNVFuVm1abVZ5S0RRcWJpa3NJREFzSUc0cFhHNTlYRzVsZUhCdmNuUnpMbTFoYkd4dlkwbHVkRE15SUQwZ2JXRnNiRzlqU1c1ME16SmNibHh1Wm5WdVkzUnBiMjRnYldGc2JHOWpSbXh2WVhRb2Jpa2dlMXh1SUNCeVpYUjFjbTRnYm1WM0lFWnNiMkYwTXpKQmNuSmhlU2h0WVd4c2IyTkJjbkpoZVVKMVptWmxjaWcwS200cExDQXdMQ0J1S1Z4dWZWeHVaWGh3YjNKMGN5NXRZV3hzYjJOR2JHOWhkRE15SUQwZ1pYaHdiM0owY3k1dFlXeHNiMk5HYkc5aGRDQTlJRzFoYkd4dlkwWnNiMkYwWEc1Y2JtWjFibU4wYVc5dUlHMWhiR3h2WTBSdmRXSnNaU2h1S1NCN1hHNGdJSEpsZEhWeWJpQnVaWGNnUm14dllYUTJORUZ5Y21GNUtHMWhiR3h2WTBGeWNtRjVRblZtWm1WeUtEZ3FiaWtzSURBc0lHNHBYRzU5WEc1bGVIQnZjblJ6TG0xaGJHeHZZMFpzYjJGME5qUWdQU0JsZUhCdmNuUnpMbTFoYkd4dlkwUnZkV0pzWlNBOUlHMWhiR3h2WTBSdmRXSnNaVnh1WEc1bWRXNWpkR2x2YmlCdFlXeHNiMk5WYVc1ME9FTnNZVzF3WldRb2Jpa2dlMXh1SUNCcFppaG9ZWE5WYVc1ME9FTXBJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRlZwYm5RNFEyeGhiWEJsWkVGeWNtRjVLRzFoYkd4dlkwRnljbUY1UW5WbVptVnlLRzRwTENBd0xDQnVLVnh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQnRZV3hzYjJOVmFXNTBPQ2h1S1Z4dUlDQjlYRzU5WEc1bGVIQnZjblJ6TG0xaGJHeHZZMVZwYm5RNFEyeGhiWEJsWkNBOUlHMWhiR3h2WTFWcGJuUTRRMnhoYlhCbFpGeHVYRzVtZFc1amRHbHZiaUJ0WVd4c2IyTkVZWFJoVm1sbGR5aHVLU0I3WEc0Z0lISmxkSFZ5YmlCdVpYY2dSR0YwWVZacFpYY29iV0ZzYkc5alFYSnlZWGxDZFdabVpYSW9iaWtzSURBc0lHNHBYRzU5WEc1bGVIQnZjblJ6TG0xaGJHeHZZMFJoZEdGV2FXVjNJRDBnYldGc2JHOWpSR0YwWVZacFpYZGNibHh1Wm5WdVkzUnBiMjRnYldGc2JHOWpRblZtWm1WeUtHNHBJSHRjYmlBZ2JpQTlJR0pwZEhNdWJtVjRkRkJ2ZHpJb2JpbGNiaUFnZG1GeUlHeHZaMTl1SUQwZ1ltbDBjeTVzYjJjeUtHNHBYRzRnSUhaaGNpQmpZV05vWlNBOUlFSlZSa1pGVWx0c2IyZGZibDFjYmlBZ2FXWW9ZMkZqYUdVdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lISmxkSFZ5YmlCallXTm9aUzV3YjNBb0tWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdVpYY2dRblZtWm1WeUtHNHBYRzU5WEc1bGVIQnZjblJ6TG0xaGJHeHZZMEoxWm1abGNpQTlJRzFoYkd4dlkwSjFabVpsY2x4dVhHNWxlSEJ2Y25SekxtTnNaV0Z5UTJGamFHVWdQU0JtZFc1amRHbHZiaUJqYkdWaGNrTmhZMmhsS0NrZ2UxeHVJQ0JtYjNJb2RtRnlJR2s5TURzZ2FUd3pNanNnS3l0cEtTQjdYRzRnSUNBZ1VFOVBUQzVWU1U1VU9GdHBYUzVzWlc1bmRHZ2dQU0F3WEc0Z0lDQWdVRTlQVEM1VlNVNVVNVFpiYVYwdWJHVnVaM1JvSUQwZ01GeHVJQ0FnSUZCUFQwd3VWVWxPVkRNeVcybGRMbXhsYm1kMGFDQTlJREJjYmlBZ0lDQlFUMDlNTGtsT1ZEaGJhVjB1YkdWdVozUm9JRDBnTUZ4dUlDQWdJRkJQVDB3dVNVNVVNVFpiYVYwdWJHVnVaM1JvSUQwZ01GeHVJQ0FnSUZCUFQwd3VTVTVVTXpKYmFWMHViR1Z1WjNSb0lEMGdNRnh1SUNBZ0lGQlBUMHd1Umt4UFFWUmJhVjB1YkdWdVozUm9JRDBnTUZ4dUlDQWdJRkJQVDB3dVJFOVZRa3hGVzJsZExteGxibWQwYUNBOUlEQmNiaUFnSUNCUVQwOU1MbFZKVGxRNFExdHBYUzVzWlc1bmRHZ2dQU0F3WEc0Z0lDQWdSRUZVUVZ0cFhTNXNaVzVuZEdnZ1BTQXdYRzRnSUNBZ1FsVkdSa1ZTVzJsZExteGxibWQwYUNBOUlEQmNiaUFnZlZ4dWZTSmRmUT09IiwibW9kdWxlLmV4cG9ydHMuVmVjdG9yVGlsZSA9IHJlcXVpcmUoJy4vbGliL3ZlY3RvcnRpbGUuanMnKTtcbm1vZHVsZS5leHBvcnRzLlZlY3RvclRpbGVGZWF0dXJlID0gcmVxdWlyZSgnLi9saWIvdmVjdG9ydGlsZWZlYXR1cmUuanMnKTtcbm1vZHVsZS5leHBvcnRzLlZlY3RvclRpbGVMYXllciA9IHJlcXVpcmUoJy4vbGliL3ZlY3RvcnRpbGVsYXllci5qcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVmVjdG9yVGlsZUxheWVyID0gcmVxdWlyZSgnLi92ZWN0b3J0aWxlbGF5ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBWZWN0b3JUaWxlO1xuXG5mdW5jdGlvbiBWZWN0b3JUaWxlKHBiZiwgZW5kKSB7XG4gICAgdGhpcy5sYXllcnMgPSBwYmYucmVhZEZpZWxkcyhyZWFkVGlsZSwge30sIGVuZCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRUaWxlKHRhZywgbGF5ZXJzLCBwYmYpIHtcbiAgICBpZiAodGFnID09PSAzKSB7XG4gICAgICAgIHZhciBsYXllciA9IG5ldyBWZWN0b3JUaWxlTGF5ZXIocGJmLCBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcyk7XG4gICAgICAgIGlmIChsYXllci5sZW5ndGgpIGxheWVyc1tsYXllci5uYW1lXSA9IGxheWVyO1xuICAgIH1cbn1cblxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgUG9pbnQgPSByZXF1aXJlKCdwb2ludC1nZW9tZXRyeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZlY3RvclRpbGVGZWF0dXJlO1xuXG5mdW5jdGlvbiBWZWN0b3JUaWxlRmVhdHVyZShwYmYsIGVuZCwgZXh0ZW50LCBrZXlzLCB2YWx1ZXMpIHtcbiAgICAvLyBQdWJsaWNcbiAgICB0aGlzLnByb3BlcnRpZXMgPSB7fTtcbiAgICB0aGlzLmV4dGVudCA9IGV4dGVudDtcbiAgICB0aGlzLnR5cGUgPSAwO1xuXG4gICAgLy8gUHJpdmF0ZVxuICAgIHRoaXMuX3BiZiA9IHBiZjtcbiAgICB0aGlzLl9nZW9tZXRyeSA9IC0xO1xuICAgIHRoaXMuX2tleXMgPSBrZXlzO1xuICAgIHRoaXMuX3ZhbHVlcyA9IHZhbHVlcztcblxuICAgIHBiZi5yZWFkRmllbGRzKHJlYWRGZWF0dXJlLCB0aGlzLCBlbmQpO1xufVxuXG5mdW5jdGlvbiByZWFkRmVhdHVyZSh0YWcsIGZlYXR1cmUsIHBiZikge1xuICAgIGlmICh0YWcgPT0gMSkgZmVhdHVyZS5faWQgPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PSAyKSByZWFkVGFnKHBiZiwgZmVhdHVyZSk7XG4gICAgZWxzZSBpZiAodGFnID09IDMpIGZlYXR1cmUudHlwZSA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09IDQpIGZlYXR1cmUuX2dlb21ldHJ5ID0gcGJmLnBvcztcbn1cblxuZnVuY3Rpb24gcmVhZFRhZyhwYmYsIGZlYXR1cmUpIHtcbiAgICB2YXIgZW5kID0gcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3M7XG5cbiAgICB3aGlsZSAocGJmLnBvcyA8IGVuZCkge1xuICAgICAgICB2YXIga2V5ID0gZmVhdHVyZS5fa2V5c1twYmYucmVhZFZhcmludCgpXSxcbiAgICAgICAgICAgIHZhbHVlID0gZmVhdHVyZS5fdmFsdWVzW3BiZi5yZWFkVmFyaW50KCldO1xuICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbn1cblxuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXMgPSBbJ1Vua25vd24nLCAnUG9pbnQnLCAnTGluZVN0cmluZycsICdQb2x5Z29uJ107XG5cblZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS5sb2FkR2VvbWV0cnkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGJmID0gdGhpcy5fcGJmO1xuICAgIHBiZi5wb3MgPSB0aGlzLl9nZW9tZXRyeTtcblxuICAgIHZhciBlbmQgPSBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcyxcbiAgICAgICAgY21kID0gMSxcbiAgICAgICAgbGVuZ3RoID0gMCxcbiAgICAgICAgeCA9IDAsXG4gICAgICAgIHkgPSAwLFxuICAgICAgICBsaW5lcyA9IFtdLFxuICAgICAgICBsaW5lO1xuXG4gICAgd2hpbGUgKHBiZi5wb3MgPCBlbmQpIHtcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBjbWRMZW4gPSBwYmYucmVhZFZhcmludCgpO1xuICAgICAgICAgICAgY21kID0gY21kTGVuICYgMHg3O1xuICAgICAgICAgICAgbGVuZ3RoID0gY21kTGVuID4+IDM7XG4gICAgICAgIH1cblxuICAgICAgICBsZW5ndGgtLTtcblxuICAgICAgICBpZiAoY21kID09PSAxIHx8IGNtZCA9PT0gMikge1xuICAgICAgICAgICAgeCArPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICAgICAgICAgIHkgKz0gcGJmLnJlYWRTVmFyaW50KCk7XG5cbiAgICAgICAgICAgIGlmIChjbWQgPT09IDEpIHsgLy8gbW92ZVRvXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUpIGxpbmVzLnB1c2gobGluZSk7XG4gICAgICAgICAgICAgICAgbGluZSA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaW5lLnB1c2gobmV3IFBvaW50KHgsIHkpKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNtZCA9PT0gNykge1xuICAgICAgICAgICAgbGluZS5wdXNoKGxpbmVbMF0uY2xvbmUoKSk7IC8vIGNsb3NlUG9seWdvblxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29tbWFuZCAnICsgY21kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsaW5lKSBsaW5lcy5wdXNoKGxpbmUpO1xuXG4gICAgcmV0dXJuIGxpbmVzO1xufTtcblxuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLmJib3ggPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGJmID0gdGhpcy5fcGJmO1xuICAgIHBiZi5wb3MgPSB0aGlzLl9nZW9tZXRyeTtcblxuICAgIHZhciBlbmQgPSBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcyxcbiAgICAgICAgY21kID0gMSxcbiAgICAgICAgbGVuZ3RoID0gMCxcbiAgICAgICAgeCA9IDAsXG4gICAgICAgIHkgPSAwLFxuICAgICAgICB4MSA9IEluZmluaXR5LFxuICAgICAgICB4MiA9IC1JbmZpbml0eSxcbiAgICAgICAgeTEgPSBJbmZpbml0eSxcbiAgICAgICAgeTIgPSAtSW5maW5pdHk7XG5cbiAgICB3aGlsZSAocGJmLnBvcyA8IGVuZCkge1xuICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGNtZExlbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgICAgICAgICBjbWQgPSBjbWRMZW4gJiAweDc7XG4gICAgICAgICAgICBsZW5ndGggPSBjbWRMZW4gPj4gMztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aC0tO1xuXG4gICAgICAgIGlmIChjbWQgPT09IDEgfHwgY21kID09PSAyKSB7XG4gICAgICAgICAgICB4ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgICAgICAgICAgeSArPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICAgICAgICAgIGlmICh4IDwgeDEpIHgxID0geDtcbiAgICAgICAgICAgIGlmICh4ID4geDIpIHgyID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgeTEpIHkxID0geTtcbiAgICAgICAgICAgIGlmICh5ID4geTIpIHkyID0geTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNtZCAhPT0gNykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGNvbW1hbmQgJyArIGNtZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW3gxLCB5MSwgeDIsIHkyXTtcbn07XG5cblZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT04gPSBmdW5jdGlvbih4LCB5LCB6KSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLmV4dGVudCAqIE1hdGgucG93KDIsIHopLFxuICAgICAgICB4MCA9IHRoaXMuZXh0ZW50ICogeCxcbiAgICAgICAgeTAgPSB0aGlzLmV4dGVudCAqIHksXG4gICAgICAgIGNvb3JkcyA9IHRoaXMubG9hZEdlb21ldHJ5KCksXG4gICAgICAgIHR5cGUgPSBWZWN0b3JUaWxlRmVhdHVyZS50eXBlc1t0aGlzLnR5cGVdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGxpbmUgPSBjb29yZHNbaV07XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHAgPSBsaW5lW2pdLCB5MiA9IDE4MCAtIChwLnkgKyB5MCkgKiAzNjAgLyBzaXplO1xuICAgICAgICAgICAgbGluZVtqXSA9IFtcbiAgICAgICAgICAgICAgICAocC54ICsgeDApICogMzYwIC8gc2l6ZSAtIDE4MCxcbiAgICAgICAgICAgICAgICAzNjAgLyBNYXRoLlBJICogTWF0aC5hdGFuKE1hdGguZXhwKHkyICogTWF0aC5QSSAvIDE4MCkpIC0gOTBcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyAmJiBjb29yZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvb3JkcyA9IGNvb3Jkc1swXVswXTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQb2ludCcpIHtcbiAgICAgICAgY29vcmRzID0gY29vcmRzWzBdO1xuICAgICAgICB0eXBlID0gJ011bHRpUG9pbnQnO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnICYmIGNvb3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29vcmRzID0gY29vcmRzWzBdO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgIHR5cGUgPSAnTXVsdGlMaW5lU3RyaW5nJztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkZlYXR1cmVcIixcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICBjb29yZGluYXRlczogY29vcmRzXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IHRoaXMucHJvcGVydGllc1xuICAgIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVmVjdG9yVGlsZUZlYXR1cmUgPSByZXF1aXJlKCcuL3ZlY3RvcnRpbGVmZWF0dXJlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmVjdG9yVGlsZUxheWVyO1xuXG5mdW5jdGlvbiBWZWN0b3JUaWxlTGF5ZXIocGJmLCBlbmQpIHtcbiAgICAvLyBQdWJsaWNcbiAgICB0aGlzLnZlcnNpb24gPSAxO1xuICAgIHRoaXMubmFtZSA9IG51bGw7XG4gICAgdGhpcy5leHRlbnQgPSA0MDk2O1xuICAgIHRoaXMubGVuZ3RoID0gMDtcblxuICAgIC8vIFByaXZhdGVcbiAgICB0aGlzLl9wYmYgPSBwYmY7XG4gICAgdGhpcy5fa2V5cyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlcyA9IFtdO1xuICAgIHRoaXMuX2ZlYXR1cmVzID0gW107XG5cbiAgICBwYmYucmVhZEZpZWxkcyhyZWFkTGF5ZXIsIHRoaXMsIGVuZCk7XG5cbiAgICB0aGlzLmxlbmd0aCA9IHRoaXMuX2ZlYXR1cmVzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gcmVhZExheWVyKHRhZywgbGF5ZXIsIHBiZikge1xuICAgIGlmICh0YWcgPT09IDE1KSBsYXllci52ZXJzaW9uID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDEpIGxheWVyLm5hbWUgPSBwYmYucmVhZFN0cmluZygpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gNSkgbGF5ZXIuZXh0ZW50ID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDIpIGxheWVyLl9mZWF0dXJlcy5wdXNoKHBiZi5wb3MpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gMykgbGF5ZXIuX2tleXMucHVzaChwYmYucmVhZFN0cmluZygpKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDQpIGxheWVyLl92YWx1ZXMucHVzaChyZWFkVmFsdWVNZXNzYWdlKHBiZikpO1xufVxuXG5mdW5jdGlvbiByZWFkVmFsdWVNZXNzYWdlKHBiZikge1xuICAgIHZhciB2YWx1ZSA9IG51bGwsXG4gICAgICAgIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zO1xuXG4gICAgd2hpbGUgKHBiZi5wb3MgPCBlbmQpIHtcbiAgICAgICAgdmFyIHRhZyA9IHBiZi5yZWFkVmFyaW50KCkgPj4gMztcblxuICAgICAgICB2YWx1ZSA9IHRhZyA9PT0gMSA/IHBiZi5yZWFkU3RyaW5nKCkgOlxuICAgICAgICAgICAgdGFnID09PSAyID8gcGJmLnJlYWRGbG9hdCgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gMyA/IHBiZi5yZWFkRG91YmxlKCkgOlxuICAgICAgICAgICAgdGFnID09PSA0ID8gcGJmLnJlYWRWYXJpbnQ2NCgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNSA/IHBiZi5yZWFkVmFyaW50KCkgOlxuICAgICAgICAgICAgdGFnID09PSA2ID8gcGJmLnJlYWRTVmFyaW50KCkgOlxuICAgICAgICAgICAgdGFnID09PSA3ID8gcGJmLnJlYWRCb29sZWFuKCkgOiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuLy8gcmV0dXJuIGZlYXR1cmUgYGlgIGZyb20gdGhpcyBsYXllciBhcyBhIGBWZWN0b3JUaWxlRmVhdHVyZWBcblZlY3RvclRpbGVMYXllci5wcm90b3R5cGUuZmVhdHVyZSA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSB0aGlzLl9mZWF0dXJlcy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignZmVhdHVyZSBpbmRleCBvdXQgb2YgYm91bmRzJyk7XG5cbiAgICB0aGlzLl9wYmYucG9zID0gdGhpcy5fZmVhdHVyZXNbaV07XG5cbiAgICB2YXIgZW5kID0gdGhpcy5fcGJmLnJlYWRWYXJpbnQoKSArIHRoaXMuX3BiZi5wb3M7XG4gICAgcmV0dXJuIG5ldyBWZWN0b3JUaWxlRmVhdHVyZSh0aGlzLl9wYmYsIGVuZCwgdGhpcy5leHRlbnQsIHRoaXMuX2tleXMsIHRoaXMuX3ZhbHVlcyk7XG59O1xuIiwiLy8gR2VvbWV0cnkgYnVpbGRpbmcgZnVuY3Rpb25zXG5pbXBvcnQgR2VvIGZyb20gJy4uL2dlbyc7XG5cbmV4cG9ydCBjb25zdCB0aWxlX2JvdW5kcyA9IFtcbiAgICB7IHg6IDAsIHk6IDB9LFxuICAgIHsgeDogR2VvLnRpbGVfc2NhbGUsIHk6IC1HZW8udGlsZV9zY2FsZSB9IC8vIFRPRE86IGNvcnJlY3QgZm9yIGZsaXBwZWQgeS1heGlzP1xuXTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRfdXZzID0gWzAsIDAsIDEsIDFdO1xuXG4vLyBUZXN0cyBpZiBhIGxpbmUgc2VnbWVudCAoZnJvbSBwb2ludCBBIHRvIEIpIGlzIG91dHNpZGUgdGhlIHRpbGUgYm91bmRzXG4vLyAod2l0aGluIGEgY2VydGFpbiB0b2xlcmFuY2UgdG8gYWNjb3VudCBmb3IgZ2VvbWV0cnkgbmVhcmx5IG9uIHRpbGUgZWRnZXMpXG5leHBvcnQgZnVuY3Rpb24gb3V0c2lkZVRpbGUgKF9hLCBfYiwgdG9sZXJhbmNlKSB7XG4gICAgbGV0IHRpbGVfbWluID0gdGlsZV9ib3VuZHNbMF07XG4gICAgbGV0IHRpbGVfbWF4ID0gdGlsZV9ib3VuZHNbMV07XG5cbiAgICAvLyBUT0RPOiBmaXggZmxpcHBlZCBZIGNvb3JkcyBoZXJlLCBjb25mdXNpbmcgd2l0aCAnbWF4JyByZWZlcmVuY2VcbiAgICBpZiAoKF9hWzBdIDw9IHRpbGVfbWluLnggKyB0b2xlcmFuY2UgJiYgX2JbMF0gPD0gdGlsZV9taW4ueCArIHRvbGVyYW5jZSkgfHxcbiAgICAgICAgKF9hWzBdID49IHRpbGVfbWF4LnggLSB0b2xlcmFuY2UgJiYgX2JbMF0gPj0gdGlsZV9tYXgueCAtIHRvbGVyYW5jZSkgfHxcbiAgICAgICAgKF9hWzFdID49IHRpbGVfbWluLnkgLSB0b2xlcmFuY2UgJiYgX2JbMV0gPj0gdGlsZV9taW4ueSAtIHRvbGVyYW5jZSkgfHxcbiAgICAgICAgKF9hWzFdIDw9IHRpbGVfbWF4LnkgKyB0b2xlcmFuY2UgJiYgX2JbMV0gPD0gdGlsZV9tYXgueSArIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIiwiLy8gUG9pbnQgYnVpbGRlcnNcbmltcG9ydCB7IGRlZmF1bHRfdXZzIH0gZnJvbSAnLi9jb21tb24nO1xuXG4vLyBCdWlsZCBhIGJpbGxib2FyZCBzcHJpdGUgcXVhZCBjZW50ZXJlZCBvbiBhIHBvaW50LiBTcHJpdGVzIGFyZSBpbnRlbmRlZCB0byBiZSBkcmF3biBpbiBzY3JlZW5zcGFjZSwgYW5kIGhhdmVcbi8vIHByb3BlcnRpZXMgZm9yIHdpZHRoLCBoZWlnaHQsIGFuZ2xlLCBhbmQgYSBzY2FsZSBmYWN0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byBpbnRlcnBvbGF0ZSB0aGUgc2NyZWVuc3BhY2Ugc2l6ZVxuLy8gb2YgYSBzcHJpdGUgYmV0d2VlbiB0d28gem9vbSBsZXZlbHMuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRRdWFkc0ZvclBvaW50cyAocG9pbnRzLCB2ZXJ0ZXhfZGF0YSwgdmVydGV4X3RlbXBsYXRlLFxuICAgIHsgdGV4Y29vcmRfaW5kZXgsIHBvc2l0aW9uX2luZGV4LCBzaGFwZV9pbmRleCwgb2Zmc2V0X2luZGV4IH0sXG4gICAgeyBxdWFkLCBxdWFkX3NjYWxlLCBvZmZzZXQsIGFuZ2xlLCB0ZXhjb29yZF9zY2FsZSwgdGV4Y29vcmRfbm9ybWFsaXplIH0pIHtcbiAgICBsZXQgdzIgPSBxdWFkWzBdIC8gMjtcbiAgICBsZXQgaDIgPSBxdWFkWzFdIC8gMjtcbiAgICBsZXQgc2NhbGluZyA9IFtcbiAgICAgICAgWy13MiwgLWgyXSxcbiAgICAgICAgW3cyLCAtaDJdLFxuICAgICAgICBbdzIsIGgyXSxcblxuICAgICAgICBbLXcyLCAtaDJdLFxuICAgICAgICBbdzIsIGgyXSxcbiAgICAgICAgWy13MiwgaDJdXG4gICAgXTtcblxuICAgIGxldCB0ZXhjb29yZHM7XG4gICAgaWYgKHRleGNvb3JkX2luZGV4KSB7XG4gICAgICAgIHRleGNvb3JkX25vcm1hbGl6ZSA9IHRleGNvb3JkX25vcm1hbGl6ZSB8fCAxO1xuXG4gICAgICAgIHZhciBbbWluX3UsIG1pbl92LCBtYXhfdSwgbWF4X3ZdID0gdGV4Y29vcmRfc2NhbGUgfHwgZGVmYXVsdF91dnM7XG4gICAgICAgIHRleGNvb3JkcyA9IFtcbiAgICAgICAgICAgIFttaW5fdSwgbWluX3ZdLFxuICAgICAgICAgICAgW21heF91LCBtaW5fdl0sXG4gICAgICAgICAgICBbbWF4X3UsIG1heF92XSxcblxuICAgICAgICAgICAgW21pbl91LCBtaW5fdl0sXG4gICAgICAgICAgICBbbWF4X3UsIG1heF92XSxcbiAgICAgICAgICAgIFttaW5fdSwgbWF4X3ZdXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgbGV0IG51bV9wb2ludHMgPSBwb2ludHMubGVuZ3RoO1xuICAgIGZvciAobGV0IHA9MDsgcCA8IG51bV9wb2ludHM7IHArKykge1xuICAgICAgICBsZXQgcG9pbnQgPSBwb2ludHNbcF07XG5cbiAgICAgICAgZm9yIChsZXQgcG9zPTA7IHBvcyA8IDY7IHBvcysrKSB7XG4gICAgICAgICAgICAvLyBBZGQgdGV4Y29vcmRzXG4gICAgICAgICAgICBpZiAodGV4Y29vcmRfaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbdGV4Y29vcmRfaW5kZXggKyAwXSA9IHRleGNvb3Jkc1twb3NdWzBdICogdGV4Y29vcmRfbm9ybWFsaXplO1xuICAgICAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVt0ZXhjb29yZF9pbmRleCArIDFdID0gdGV4Y29vcmRzW3Bvc11bMV0gKiB0ZXhjb29yZF9ub3JtYWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVtwb3NpdGlvbl9pbmRleCArIDBdID0gcG9pbnRbMF07XG4gICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbcG9zaXRpb25faW5kZXggKyAxXSA9IHBvaW50WzFdO1xuXG4gICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbc2hhcGVfaW5kZXggKyAwXSA9IHNjYWxpbmdbcG9zXVswXTtcbiAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVtzaGFwZV9pbmRleCArIDFdID0gc2NhbGluZ1twb3NdWzFdO1xuICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlW3NoYXBlX2luZGV4ICsgMl0gPSBhbmdsZTtcbiAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVtzaGFwZV9pbmRleCArIDNdID0gcXVhZF9zY2FsZTtcblxuICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlW29mZnNldF9pbmRleCArIDBdID0gb2Zmc2V0WzBdO1xuICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlW29mZnNldF9pbmRleCArIDFdID0gb2Zmc2V0WzFdO1xuXG4gICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5hZGRWZXJ0ZXgodmVydGV4X3RlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIFBvbHlnb24gYnVpbGRlcnNcbmltcG9ydCBHZW8gZnJvbSAnLi4vZ2VvJztcbmltcG9ydCBWZWN0b3IgZnJvbSAnLi4vdmVjdG9yJztcbmltcG9ydCB7IGRlZmF1bHRfdXZzLCBvdXRzaWRlVGlsZSB9IGZyb20gJy4vY29tbW9uJztcblxuaW1wb3J0IGVhcmN1dCBmcm9tICdlYXJjdXQnO1xuXG5jb25zdCB1cF92ZWMzID0gWzAsIDAsIDFdO1xuXG4vLyBUZXNzZWxhdGUgYSBmbGF0IDJEIHBvbHlnb25cbi8vIHggJiB5IGNvb3JkaW5hdGVzIHdpbGwgYmUgc2V0IGFzIGZpcnN0IHR3byBlbGVtZW50cyBvZiBwcm92aWRlZCB2ZXJ0ZXhfdGVtcGxhdGVcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBvbHlnb25zIChcbiAgICBwb2x5Z29ucyxcbiAgICB2ZXJ0ZXhfZGF0YSwgdmVydGV4X3RlbXBsYXRlLFxuICAgIHsgdGV4Y29vcmRfaW5kZXgsIHRleGNvb3JkX3NjYWxlLCB0ZXhjb29yZF9ub3JtYWxpemUgfSkge1xuXG4gICAgaWYgKHRleGNvb3JkX2luZGV4KSB7XG4gICAgICAgIHRleGNvb3JkX25vcm1hbGl6ZSA9IHRleGNvb3JkX25vcm1hbGl6ZSB8fCAxO1xuICAgICAgICB2YXIgW21pbl91LCBtaW5fdiwgbWF4X3UsIG1heF92XSA9IHRleGNvb3JkX3NjYWxlIHx8IGRlZmF1bHRfdXZzO1xuICAgIH1cblxuICAgIHZhciBudW1fcG9seWdvbnMgPSBwb2x5Z29ucy5sZW5ndGg7XG4gICAgZm9yICh2YXIgcD0wOyBwIDwgbnVtX3BvbHlnb25zOyBwKyspIHtcbiAgICAgICAgdmFyIHBvbHlnb24gPSBwb2x5Z29uc1twXTtcblxuICAgICAgICAvLyBGaW5kIHBvbHlnb24gZXh0ZW50cyB0byBjYWxjdWxhdGUgVVZzLCBmaXQgdGhlbSB0byB0aGUgYXhpcy1hbGlnbmVkIGJvdW5kaW5nIGJveFxuICAgICAgICBpZiAodGV4Y29vcmRfaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBbbWluX3gsIG1pbl95LCBtYXhfeCwgbWF4X3ldID0gR2VvLmZpbmRCb3VuZGluZ0JveChwb2x5Z29uKTtcbiAgICAgICAgICAgIHZhciBzcGFuX3ggPSBtYXhfeCAtIG1pbl94O1xuICAgICAgICAgICAgdmFyIHNwYW5feSA9IG1heF95IC0gbWluX3k7XG4gICAgICAgICAgICB2YXIgc2NhbGVfdSA9IChtYXhfdSAtIG1pbl91KSAvIHNwYW5feDtcbiAgICAgICAgICAgIHZhciBzY2FsZV92ID0gKG1heF92IC0gbWluX3YpIC8gc3Bhbl95O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGVzc2VsbGF0ZVxuICAgICAgICB2YXIgdmVydGljZXMgPSB0cmlhbmd1bGF0ZVBvbHlnb24ocG9seWdvbik7XG5cbiAgICAgICAgLy8gQWRkIHZlcnRleCBkYXRhXG4gICAgICAgIHZhciBudW1fdmVydGljZXMgPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIHY9MDsgdiA8IG51bV92ZXJ0aWNlczsgdisrKSB7XG4gICAgICAgICAgICB2YXIgdmVydGV4ID0gdmVydGljZXNbdl07XG4gICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbMF0gPSB2ZXJ0ZXhbMF07XG4gICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbMV0gPSB2ZXJ0ZXhbMV07XG5cbiAgICAgICAgICAgIC8vIEFkZCBVVnNcbiAgICAgICAgICAgIGlmICh0ZXhjb29yZF9pbmRleCkge1xuICAgICAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVt0ZXhjb29yZF9pbmRleCArIDBdID0gKCh2ZXJ0ZXhbMF0gLSBtaW5feCkgKiBzY2FsZV91ICsgbWluX3UpICogdGV4Y29vcmRfbm9ybWFsaXplO1xuICAgICAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVt0ZXhjb29yZF9pbmRleCArIDFdID0gKCh2ZXJ0ZXhbMV0gLSBtaW5feSkgKiBzY2FsZV92ICsgbWluX3YpICogdGV4Y29vcmRfbm9ybWFsaXplO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5hZGRWZXJ0ZXgodmVydGV4X3RlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gVGVzc2VsYXRlIGFuZCBleHRydWRlIGEgZmxhdCAyRCBwb2x5Z29uIGludG8gYSBzaW1wbGUgM0QgbW9kZWwgd2l0aCBmaXhlZCBoZWlnaHQgYW5kIGFkZCB0byBHTCB2ZXJ0ZXggYnVmZmVyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFeHRydWRlZFBvbHlnb25zIChcbiAgICBwb2x5Z29ucyxcbiAgICB6LCBoZWlnaHQsIG1pbl9oZWlnaHQsXG4gICAgdmVydGV4X2RhdGEsIHZlcnRleF90ZW1wbGF0ZSxcbiAgICBub3JtYWxfaW5kZXgsXG4gICAgbm9ybWFsX25vcm1hbGl6ZSxcbiAgICB7XG4gICAgICAgIHJlbW92ZV90aWxlX2VkZ2VzLFxuICAgICAgICB0aWxlX2VkZ2VfdG9sZXJhbmNlLFxuICAgICAgICB0ZXhjb29yZF9pbmRleCxcbiAgICAgICAgdGV4Y29vcmRfc2NhbGUsXG4gICAgICAgIHRleGNvb3JkX25vcm1hbGl6ZSxcbiAgICAgICAgd2luZGluZ1xuICAgIH0pIHtcblxuICAgIC8vIFRvcFxuICAgIHZhciBtaW5feiA9IHogKyAobWluX2hlaWdodCB8fCAwKTtcbiAgICB2YXIgbWF4X3ogPSB6ICsgaGVpZ2h0O1xuICAgIHZlcnRleF90ZW1wbGF0ZVsyXSA9IG1heF96O1xuICAgIGJ1aWxkUG9seWdvbnMocG9seWdvbnMsIHZlcnRleF9kYXRhLCB2ZXJ0ZXhfdGVtcGxhdGUsIHsgdGV4Y29vcmRfaW5kZXgsIHRleGNvb3JkX3NjYWxlLCB0ZXhjb29yZF9ub3JtYWxpemUgfSk7XG5cbiAgICAvLyBXYWxsc1xuICAgIC8vIEZpdCBVVnMgdG8gd2FsbCBxdWFkXG4gICAgaWYgKHRleGNvb3JkX2luZGV4KSB7XG4gICAgICAgIHRleGNvb3JkX25vcm1hbGl6ZSA9IHRleGNvb3JkX25vcm1hbGl6ZSB8fCAxO1xuICAgICAgICB2YXIgW21pbl91LCBtaW5fdiwgbWF4X3UsIG1heF92XSA9IHRleGNvb3JkX3NjYWxlIHx8IGRlZmF1bHRfdXZzO1xuICAgICAgICB2YXIgdGV4Y29vcmRzID0gW1xuICAgICAgICAgICAgW21pbl91LCBtYXhfdl0sXG4gICAgICAgICAgICBbbWluX3UsIG1pbl92XSxcbiAgICAgICAgICAgIFttYXhfdSwgbWluX3ZdLFxuXG4gICAgICAgICAgICBbbWF4X3UsIG1pbl92XSxcbiAgICAgICAgICAgIFttYXhfdSwgbWF4X3ZdLFxuICAgICAgICAgICAgW21pbl91LCBtYXhfdl1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICB2YXIgbnVtX3BvbHlnb25zID0gcG9seWdvbnMubGVuZ3RoO1xuICAgIGZvciAodmFyIHA9MDsgcCA8IG51bV9wb2x5Z29uczsgcCsrKSB7XG4gICAgICAgIHZhciBwb2x5Z29uID0gcG9seWdvbnNbcF07XG5cbiAgICAgICAgZm9yICh2YXIgcT0wOyBxIDwgcG9seWdvbi5sZW5ndGg7IHErKykge1xuICAgICAgICAgICAgdmFyIGNvbnRvdXIgPSBwb2x5Z29uW3FdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciB3PTA7IHcgPCBjb250b3VyLmxlbmd0aCAtIDE7IHcrKykge1xuICAgICAgICAgICAgICAgIGlmIChyZW1vdmVfdGlsZV9lZGdlcyAmJiBvdXRzaWRlVGlsZShjb250b3VyW3ddLCBjb250b3VyW3crMV0sIHRpbGVfZWRnZV90b2xlcmFuY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBkb24ndCBleHRydWRlIHRpbGUgZWRnZXNcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBXYWxsIG9yZGVyIGlzIGRlcGVuZGVudCBvbiB3aW5kaW5nIG9yZGVyLCBzbyB0aGF0IG5vcm1hbHMgZmFjZSBvdXR3YXJkXG4gICAgICAgICAgICAgICAgbGV0IHcwLCB3MTtcbiAgICAgICAgICAgICAgICBpZiAod2luZGluZyA9PT0gJ0NDVycpIHtcbiAgICAgICAgICAgICAgICAgICAgdzAgPSB3O1xuICAgICAgICAgICAgICAgICAgICB3MSA9IHcrMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHcwID0gdysxO1xuICAgICAgICAgICAgICAgICAgICB3MSA9IHc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gVHdvIHRyaWFuZ2xlcyBmb3IgdGhlIHF1YWQgZm9ybWVkIGJ5IGVhY2ggdmVydGV4IHBhaXIsIGdvaW5nIGZyb20gYm90dG9tIHRvIHRvcCBoZWlnaHRcbiAgICAgICAgICAgICAgICB2YXIgd2FsbF92ZXJ0aWNlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJpYW5nbGVcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRvdXJbdzFdWzBdLCBjb250b3VyW3cxXVsxXSwgbWF4X3pdLFxuICAgICAgICAgICAgICAgICAgICBbY29udG91clt3MV1bMF0sIGNvbnRvdXJbdzFdWzFdLCBtaW5fel0sXG4gICAgICAgICAgICAgICAgICAgIFtjb250b3VyW3cwXVswXSwgY29udG91clt3MF1bMV0sIG1pbl96XSxcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJpYW5nbGVcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRvdXJbdzBdWzBdLCBjb250b3VyW3cwXVsxXSwgbWluX3pdLFxuICAgICAgICAgICAgICAgICAgICBbY29udG91clt3MF1bMF0sIGNvbnRvdXJbdzBdWzFdLCBtYXhfel0sXG4gICAgICAgICAgICAgICAgICAgIFtjb250b3VyW3cxXVswXSwgY29udG91clt3MV1bMV0sIG1heF96XVxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICAvLyBDYWxjIHRoZSBub3JtYWwgb2YgdGhlIHdhbGwgZnJvbSB1cCB2ZWN0b3IgYW5kIG9uZSBzZWdtZW50IG9mIHRoZSB3YWxsIHRyaWFuZ2xlc1xuICAgICAgICAgICAgICAgIGxldCB3YWxsX3ZlYyA9IFZlY3Rvci5ub3JtYWxpemUoW2NvbnRvdXJbdzFdWzBdIC0gY29udG91clt3MF1bMF0sIGNvbnRvdXJbdzFdWzFdIC0gY29udG91clt3MF1bMV0sIDBdKTtcbiAgICAgICAgICAgICAgICBsZXQgbm9ybWFsID0gVmVjdG9yLmNyb3NzKHVwX3ZlYzMsIHdhbGxfdmVjKTtcblxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB2ZXJ0ZXggdGVtcGxhdGUgd2l0aCBjdXJyZW50IHN1cmZhY2Ugbm9ybWFsXG4gICAgICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlW25vcm1hbF9pbmRleCArIDBdID0gbm9ybWFsWzBdICogbm9ybWFsX25vcm1hbGl6ZTtcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbbm9ybWFsX2luZGV4ICsgMV0gPSBub3JtYWxbMV0gKiBub3JtYWxfbm9ybWFsaXplO1xuICAgICAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVtub3JtYWxfaW5kZXggKyAyXSA9IG5vcm1hbFsyXSAqIG5vcm1hbF9ub3JtYWxpemU7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3dj0wOyB3diA8IHdhbGxfdmVydGljZXMubGVuZ3RoOyB3disrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVswXSA9IHdhbGxfdmVydGljZXNbd3ZdWzBdO1xuICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbMV0gPSB3YWxsX3ZlcnRpY2VzW3d2XVsxXTtcbiAgICAgICAgICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlWzJdID0gd2FsbF92ZXJ0aWNlc1t3dl1bMl07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleGNvb3JkX2luZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbdGV4Y29vcmRfaW5kZXggKyAwXSA9IHRleGNvb3Jkc1t3dl1bMF0gKiB0ZXhjb29yZF9ub3JtYWxpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbdGV4Y29vcmRfaW5kZXggKyAxXSA9IHRleGNvb3Jkc1t3dl1bMV0gKiB0ZXhjb29yZF9ub3JtYWxpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5hZGRWZXJ0ZXgodmVydGV4X3RlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIFRyaWFuZ3VsYXRpb24gdXNpbmcgZWFyY3V0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L2VhcmN1dFxuZXhwb3J0IGZ1bmN0aW9uIHRyaWFuZ3VsYXRlUG9seWdvbiAoY29udG91cnMpIHtcbiAgICByZXR1cm4gZWFyY3V0KGNvbnRvdXJzKTtcbn1cbiIsIi8vIEdlb21ldHJ5IGJ1aWxkaW5nIGZ1bmN0aW9uc1xuXG5pbXBvcnQgVmVjdG9yIGZyb20gJy4uL3ZlY3Rvcic7XG5pbXBvcnQgR2VvIGZyb20gJy4uL2dlbyc7XG5pbXBvcnQgeyBkZWZhdWx0X3V2cywgb3V0c2lkZVRpbGUgfSBmcm9tICcuL2NvbW1vbic7XG5cbmNvbnN0IHplcm9fdmVjMiA9IFswLCAwXTtcblxuLy8gQnVpbGQgdGVzc2VsbGF0ZWQgdHJpYW5nbGVzIGZvciBhIHBvbHlsaW5lXG5jb25zdCBjb3JuZXJzX2Zvcl9jYXAgPSB7XG4gICAgYnV0dDogMCxcbiAgICBzcXVhcmU6IDIsXG4gICAgcm91bmQ6IDNcbn07XG5cbmNvbnN0IHRyaWFuZ2xlc19mb3Jfam9pbiA9IHtcbiAgICBtaXRlcjogMCxcbiAgICBiZXZlbDogMSxcbiAgICByb3VuZDogM1xufTtcblxuLy8gU2NhbGluZyBmYWN0b3IgdG8gYWRkIHByZWNpc2lvbiB0byBsaW5lIHRleHR1cmUgViBjb29yZGluYXRlIHBhY2tlZCBhcyBub3JtYWxpemVkIHNob3J0XG5jb25zdCB2X3NjYWxlX2FkanVzdCA9IEdlby50aWxlX3NjYWxlO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQb2x5bGluZXMgKFxuICAgIGxpbmVzLFxuICAgIHdpZHRoLFxuICAgIHZlcnRleF9kYXRhLCB2ZXJ0ZXhfdGVtcGxhdGUsXG4gICAge1xuICAgICAgICBjbG9zZWRfcG9seWdvbixcbiAgICAgICAgcmVtb3ZlX3RpbGVfZWRnZXMsXG4gICAgICAgIHRpbGVfZWRnZV90b2xlcmFuY2UsXG4gICAgICAgIHRleGNvb3JkX2luZGV4LFxuICAgICAgICB0ZXhjb29yZF9zY2FsZSxcbiAgICAgICAgdGV4Y29vcmRfbm9ybWFsaXplLFxuICAgICAgICB0ZXhjb29yZF9yYXRpbyxcbiAgICAgICAgc2NhbGluZ19pbmRleCxcbiAgICAgICAgc2NhbGluZ19ub3JtYWxpemUsXG4gICAgICAgIGpvaW4sIGNhcCxcbiAgICAgICAgbWl0ZXJfbGltaXRcbiAgICB9KSB7XG5cbiAgICB2YXIgY29ybmVyc09uQ2FwID0gY29ybmVyc19mb3JfY2FwW2NhcF0gfHwgMDsgICAgICAgICAvLyBkZWZhdWx0ICdidXR0J1xuICAgIHZhciB0cmlhbmdsZXNPbkpvaW4gPSB0cmlhbmdsZXNfZm9yX2pvaW5bam9pbl0gfHwgMDsgIC8vIGRlZmF1bHQgJ21pdGVyJ1xuXG4gICAgLy8gQ29uZmlndXJlIG1pdGVyIGxpbWl0XG4gICAgaWYgKHRyaWFuZ2xlc09uSm9pbiA9PT0gMCkge1xuICAgICAgICBtaXRlcl9saW1pdCA9IG1pdGVyX2xpbWl0IHx8IDM7IC8vIGRlZmF1bHQgbWl0ZXIgbGltaXRcbiAgICAgICAgdmFyIG1pdGVyX2xlbl9zcSA9IG1pdGVyX2xpbWl0ICogbWl0ZXJfbGltaXQ7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgdmFyaWFibGVzXG4gICAgaWYgKHRleGNvb3JkX2luZGV4KSB7XG4gICAgICAgIHRleGNvb3JkX25vcm1hbGl6ZSA9IHRleGNvb3JkX25vcm1hbGl6ZSB8fCAxO1xuICAgICAgICB0ZXhjb29yZF9yYXRpbyA9IHRleGNvb3JkX3JhdGlvIHx8IDE7XG4gICAgICAgIHZhciBbbWluX3UsIG1pbl92LCBtYXhfdSwgbWF4X3ZdID0gdGV4Y29vcmRfc2NhbGUgfHwgZGVmYXVsdF91dnM7XG4gICAgfVxuXG4gICAgLy8gVmFsdWVzIHRoYXQgYXJlIGNvbnN0YW50IGZvciBlYWNoIGxpbmUgYW5kIGFyZSBwYXNzZWQgdG8gaGVscGVyIGZ1bmN0aW9uc1xuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgICB2ZXJ0ZXhfZGF0YSxcbiAgICAgICAgdmVydGV4X3RlbXBsYXRlLFxuICAgICAgICBoYWxmX3dpZHRoOiB3aWR0aC8yLFxuICAgICAgICB2ZXJ0aWNlczogW10sXG4gICAgICAgIHNjYWxpbmdfaW5kZXgsXG4gICAgICAgIHNjYWxpbmdfbm9ybWFsaXplLFxuICAgICAgICBzY2FsaW5nVmVjczogc2NhbGluZ19pbmRleCAmJiBbXSxcbiAgICAgICAgdGV4Y29vcmRfaW5kZXgsXG4gICAgICAgIHRleGNvb3JkczogdGV4Y29vcmRfaW5kZXggJiYgW10sXG4gICAgICAgIHRleGNvb3JkX25vcm1hbGl6ZSxcbiAgICAgICAgbWluX3UsIG1pbl92LCBtYXhfdSwgbWF4X3YsXG4gICAgICAgIHZfc2NhbGU6IDEgLyAoKHdpZHRoICogdGV4Y29vcmRfcmF0aW8pICogdl9zY2FsZV9hZGp1c3QpLCAvLyBzY2FsZXMgbGluZSB0ZXh0dXJlIGFzIGEgcmF0aW8gb2YgdGhlIGxpbmUncyB3aWR0aFxuICAgICAgICB0b3RhbF9kaXN0OiAwLFxuICAgICAgICBudW1fcGFpcnM6IDBcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgbG4gPSAwOyBsbiA8IGxpbmVzLmxlbmd0aDsgbG4rKykge1xuICAgICAgICAvLyBSZW1vdmUgZHVwZSBwb2ludHMgZnJvbSBsaW5lc1xuICAgICAgICB2YXIgbGluZSA9IGRlZHVwZUxpbmUobGluZXNbbG5dLCBjbG9zZWRfcG9seWdvbik7XG4gICAgICAgIGlmICghbGluZSkge1xuICAgICAgICAgICAgY29udGludWU7IC8vIHNraXAgaWYgbm8gdmFsaWQgbGluZSByZW1haW5pbmdcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsaW5lU2l6ZSA9IGxpbmUubGVuZ3RoO1xuXG4gICAgICAgIC8vIElnbm9yZSBub24tbGluZXNcbiAgICAgICAgaWYgKGxpbmVTaXplIDwgMikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAgSW5pdGlhbGl6ZSB2YXJpYWJsZXNcbiAgICAgICAgdmFyIGNvb3JkUHJldiA9IFswLCAwXSwgLy8gUHJldmlvdXMgcG9pbnQgY29vcmRpbmF0ZXNcbiAgICAgICAgICAgIGNvb3JkQ3VyciA9IFswLCAwXSwgLy8gQ3VycmVudCBwb2ludCBjb29yZGluYXRlc1xuICAgICAgICAgICAgY29vcmROZXh0ID0gWzAsIDBdOyAvLyBOZXh0IHBvaW50IGNvb3JkaW5hdGVzXG5cbiAgICAgICAgdmFyIG5vcm1QcmV2ID0gWzAsIDBdLCAgLy8gUmlnaHQgbm9ybWFsIHRvIHNlZ21lbnQgYmV0d2VlbiBwcmV2aW91cyBhbmQgY3VycmVudCBtX3BvaW50c1xuICAgICAgICAgICAgbm9ybUN1cnIgPSBbMCwgMF0sICAvLyBSaWdodCBub3JtYWwgYXQgY3VycmVudCBwb2ludCwgc2NhbGVkIGZvciBtaXRlciBqb2ludFxuICAgICAgICAgICAgbm9ybU5leHQgPSBbMCwgMF07ICAvLyBSaWdodCBub3JtYWwgdG8gc2VnbWVudCBiZXR3ZWVuIGN1cnJlbnQgYW5kIG5leHQgbV9wb2ludHNcblxuICAgICAgICB2YXIgaXNQcmV2ID0gZmFsc2UsXG4gICAgICAgICAgICBpc05leHQgPSB0cnVlO1xuXG4gICAgICAgIC8vIEFkZCB2ZXJ0aWNlcyB0byBidWZmZXIgYWNjb3JkaW5nIHRvIHRoZWlyIGluZGV4XG4gICAgICAgIGluZGV4UGFpcnMoY29udGV4dCk7XG5cbiAgICAgICAgLy8gRG8gdGhpcyB3aXRoIHRoZSByZXN0IChleGNlcHQgdGhlIGxhc3Qgb25lKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVTaXplIDsgaSsrKSB7XG5cbiAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgbmV4dCBvbmU/XG4gICAgICAgICAgICBpc05leHQgPSBpKzEgPCBsaW5lU2l6ZTtcblxuICAgICAgICAgICAgaWYgKGlzUHJldikge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcHJldmlvdXMgb25lLCBjb3B5IHRoZSBjdXJyZW50IChwcmV2aW91cykgdmFsdWVzIG9uICpQcmV2XG4gICAgICAgICAgICAgICAgY29vcmRQcmV2ID0gY29vcmRDdXJyO1xuICAgICAgICAgICAgICAgIG5vcm1QcmV2ID0gVmVjdG9yLm5vcm1hbGl6ZShWZWN0b3IucGVycChjb29yZFByZXYsIGxpbmVbaV0pKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCAmJiBjbG9zZWRfcG9seWdvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgdGhlIGZpcnN0IHBvaW50IGFuZCBpcyBhIGNsb3NlZCBwb2x5Z29uXG5cbiAgICAgICAgICAgICAgICB2YXIgbmVlZFRvQ2xvc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChyZW1vdmVfdGlsZV9lZGdlcykge1xuICAgICAgICAgICAgICAgICAgICBpZihvdXRzaWRlVGlsZShsaW5lW2ldLCBsaW5lW2xpbmVTaXplLTJdLCB0aWxlX2VkZ2VfdG9sZXJhbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFRvQ2xvc2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuZWVkVG9DbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICBjb29yZFByZXYgPSBsaW5lW2xpbmVTaXplLTJdO1xuICAgICAgICAgICAgICAgICAgICBub3JtUHJldiA9IFZlY3Rvci5ub3JtYWxpemUoVmVjdG9yLnBlcnAoY29vcmRQcmV2LCBsaW5lW2ldKSk7XG4gICAgICAgICAgICAgICAgICAgIGlzUHJldiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBc3NpZ24gY3VycmVudCBjb29yZGluYXRlXG4gICAgICAgICAgICBjb29yZEN1cnIgPSBsaW5lW2ldO1xuXG4gICAgICAgICAgICBpZiAoaXNOZXh0KSB7XG4gICAgICAgICAgICAgICAgY29vcmROZXh0ID0gbGluZVtpKzFdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjbG9zZWRfcG9seWdvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgdGhlIGxhc3QgcG9pbnQgaW4gYSBjbG9zZWQgcG9seWdvblxuICAgICAgICAgICAgICAgIGNvb3JkTmV4dCA9IGxpbmVbMV07XG4gICAgICAgICAgICAgICAgaXNOZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzTmV4dCkge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0J3Mgbm90IHRoZSBsYXN0IG9uZSBnZXQgbmV4dCBjb29yZGluYXRlcyBhbmQgY2FsY3VsYXRlIHRoZSByaWdodCBub3JtYWxcblxuICAgICAgICAgICAgICAgIG5vcm1OZXh0ID0gVmVjdG9yLm5vcm1hbGl6ZShWZWN0b3IucGVycChjb29yZEN1cnIsIGNvb3JkTmV4dCkpO1xuICAgICAgICAgICAgICAgIGlmIChyZW1vdmVfdGlsZV9lZGdlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3V0c2lkZVRpbGUoY29vcmRDdXJyLCBjb29yZE5leHQsIHRpbGVfZWRnZV90b2xlcmFuY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3JtQ3VyciA9IFZlY3Rvci5ub3JtYWxpemUoVmVjdG9yLnBlcnAoY29vcmRQcmV2LCBjb29yZEN1cnIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ByZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRWZXJ0ZXhQYWlyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZEN1cnIsIG5vcm1DdXJyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnRleGNvb3JkcyAmJiBWZWN0b3IubGVuZ3RoKFZlY3Rvci5zdWIoY29vcmRDdXJyLCBjb29yZFByZXYpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5udW1fcGFpcnMrKztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB2ZXJ0aWNlcyB0byBidWZmZXIgYWNvcmRpbmcgdGhlaXIgaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFBhaXJzKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQcmV2ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gIENvbXB1dGUgY3VycmVudCBub3JtYWxcbiAgICAgICAgICAgIGlmIChpc1ByZXYpIHtcbiAgICAgICAgICAgICAgICAvLyAgSWYgdGhlcmUgaXMgYSBQUkVWSU9VUyAuLi5cbiAgICAgICAgICAgICAgICBpZiAoaXNOZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIC4uLiBhbmQgYSBORVhUIE9ORSwgY29tcHV0ZSBwcmV2aW91cyBhbmQgbmV4dCBub3JtYWxzIChzY2FsZWQgYnkgdGhlIGFuZ2xlIHdpdGggdGhlIGxhc3QgcHJldilcbiAgICAgICAgICAgICAgICAgICAgbm9ybUN1cnIgPSBWZWN0b3Iubm9ybWFsaXplKFZlY3Rvci5hZGQobm9ybVByZXYsIG5vcm1OZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IDIgLyAoMSArIE1hdGguYWJzKFZlY3Rvci5kb3Qobm9ybVByZXYsIG5vcm1DdXJyKSkpO1xuICAgICAgICAgICAgICAgICAgICBub3JtQ3VyciA9IFZlY3Rvci5tdWx0KG5vcm1DdXJyLHNjYWxlKnNjYWxlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyAuLi4gYW5kIHRoZXJlIGlzIE5PVCBhIE5FWFQgT05FLCBjb3B5IHRoZSBwcmV2aW91cyBuZXh0IG9uZSAod2hpY2ggaXMgdGhlIGN1cnJlbnQgb25lKVxuICAgICAgICAgICAgICAgICAgICBub3JtQ3VyciA9IFZlY3Rvci5ub3JtYWxpemUoVmVjdG9yLnBlcnAoY29vcmRQcmV2LCBjb29yZEN1cnIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIE5PIFBSRVZJT1VTIC4uLlxuICAgICAgICAgICAgICAgIGlmIChpc05leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gLi4uIGFuZCBhIE5FWFQgT05FLFxuICAgICAgICAgICAgICAgICAgICBub3JtTmV4dCA9IFZlY3Rvci5ub3JtYWxpemUoVmVjdG9yLnBlcnAoY29vcmRDdXJyLCBjb29yZE5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgbm9ybUN1cnIgPSBub3JtTmV4dDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyAuLi4gYW5kIE5PIE5FWFQgT05FLCBub3RoaW5nIHRvIGRvICh3aXRob3V0IHByZXYgb3IgbmV4dCBvbmUgdGhpcyBpcyBqdXN0IGEgcG9pbnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzUHJldiB8fCBpc05leHQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIHRoZSBCRUdJTk5JTkcgb2YgYSBMSU5FXG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgJiYgIWlzUHJldiAmJiAhY2xvc2VkX3BvbHlnb24pIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkQ2FwKGNvb3JkQ3Vyciwgbm9ybUN1cnIsIGNvcm5lcnNPbkNhcCwgdHJ1ZSwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gIE1pdGVyIGxpbWl0OiBpZiBtaXRlciBqb2luIGlzIHRvbyBzaGFycCwgY29udmVydCB0byBiZXZlbCBpbnN0ZWFkXG4gICAgICAgICAgICAgICAgaWYgKHRyaWFuZ2xlc09uSm9pbiA9PT0gMCAmJiBWZWN0b3IubGVuZ3RoU3Eobm9ybUN1cnIpID4gbWl0ZXJfbGVuX3NxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlc09uSm9pbiA9IHRyaWFuZ2xlc19mb3Jfam9pblsnYmV2ZWwnXTsgLy8gc3dpdGNoIHRvIGJldmVsXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyBhIEpPSU5cbiAgICAgICAgICAgICAgICBpZiAodHJpYW5nbGVzT25Kb2luICE9PSAwICYmIGlzUHJldiAmJiBpc05leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkSm9pbihbY29vcmRQcmV2LCBjb29yZEN1cnIsIGNvb3JkTmV4dF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vcm1QcmV2LG5vcm1DdXJyLCBub3JtTmV4dF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVzT25Kb2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFZlcnRleFBhaXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb29yZEN1cnIsIG5vcm1DdXJyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC50ZXhjb29yZHMgJiYgVmVjdG9yLmxlbmd0aChWZWN0b3Iuc3ViKGNvb3JkQ3VyciwgY29vcmRQcmV2KSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNOZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgY29udGV4dC5udW1fcGFpcnMrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpc1ByZXYgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIHZlcnRpY2VzIHRvIGJ1ZmZlciBhY2NvcmRpbmcgdG8gdGhlaXIgaW5kZXhcbiAgICAgICAgaW5kZXhQYWlycyhjb250ZXh0KTtcblxuICAgICAgICAgLy8gSWYgaXQncyB0aGUgRU5EIG9mIGEgTElORVxuICAgICAgICBpZighY2xvc2VkX3BvbHlnb24pIHtcbiAgICAgICAgICAgIGFkZENhcChjb29yZEN1cnIsIG5vcm1DdXJyLCBjb3JuZXJzT25DYXAgLCBmYWxzZSwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIFJlbW92ZSBkdXBsaWNhdGUgcG9pbnRzIGZyb20gYSBsaW5lLCBjcmVhdGluZyBhIG5ldyBsaW5lIG9ubHkgd2hlbiBwb2ludHMgbXVzdCBiZSByZW1vdmVkXG5mdW5jdGlvbiBkZWR1cGVMaW5lIChsaW5lLCBjbG9zZWQpIHtcbiAgICBsZXQgaSwgZHVwZXM7XG5cbiAgICAvLyBDb2xsZWN0IGR1cGUgcG9pbnRzXG4gICAgZm9yIChpPTA7IGkgPCBsaW5lLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBpZiAobGluZVtpXVswXSA9PT0gbGluZVtpKzFdWzBdICYmIGxpbmVbaV1bMV0gPT09IGxpbmVbaSsxXVsxXSkge1xuICAgICAgICAgICAgZHVwZXMgPSBkdXBlcyB8fCBbXTtcbiAgICAgICAgICAgIGR1cGVzLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgZHVwZSBwb2ludHNcbiAgICBpZiAoZHVwZXMpIHtcbiAgICAgICAgbGluZSA9IGxpbmUuc2xpY2UoMCk7XG4gICAgICAgIGR1cGVzLmZvckVhY2goZCA9PiBsaW5lLnNwbGljZShkLCAxKSk7XG4gICAgfVxuXG4gICAgLy8gTGluZSBuZWVkcyBhdCBsZWFzdCAyIHBvaW50cywgcG9seWdvbiBuZWVkcyBhdCBsZWFzdCAzICgrMSB0byBjbG9zZSlcbiAgICBpZiAoIWNsb3NlZCAmJiBsaW5lLmxlbmd0aCA8IDIgfHwgY2xvc2VkICYmIGxpbmUubGVuZ3RoIDwgNCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBsaW5lO1xufVxuXG4vLyBBZGQgdG8gZXF1aWRpc3RhbnQgcGFpcnMgb2YgdmVydGljZXMgKGludGVybmFsIG1ldGhvZCBmb3IgcG9seWxpbmUgYnVpbGRlcilcbmZ1bmN0aW9uIGFkZFZlcnRleChjb29yZCwgbm9ybWFsLCB1diwgeyBoYWxmX3dpZHRoLCB2ZXJ0aWNlcywgc2NhbGluZ1ZlY3MsIHRleGNvb3JkcyB9KSB7XG4gICAgaWYgKHNjYWxpbmdWZWNzKSB7XG4gICAgICAgIC8vICBhLiBJZiBzY2FsaW5nIGlzIG9uIGFkZCB0aGUgdmVydGV4ICh0aGUgY3VyckNvb3JkKSBhbmQgdGhlIHNjYWxpbmcgVmVjcyAobm9ybWFscyBwb2ludGluZyB3aGVyZSB0byBleHRydWRlIHRoZSB2ZXJ0aWNlcylcbiAgICAgICAgdmVydGljZXMucHVzaChjb29yZCk7XG4gICAgICAgIHNjYWxpbmdWZWNzLnB1c2gobm9ybWFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyAgYi4gQWRkIHRoZSBleHRydWRlZCB2ZXJ0aWNlc1xuICAgICAgICB2ZXJ0aWNlcy5wdXNoKFtjb29yZFswXSArIG5vcm1hbFswXSAqIGhhbGZfd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvb3JkWzFdICsgbm9ybWFsWzFdICogaGFsZl93aWR0aF0pO1xuICAgIH1cblxuICAgIC8vIGMpIEFkZCBVVnMgaWYgdGhleSBhcmUgZW5hYmxlZFxuICAgIGlmICh0ZXhjb29yZHMpIHtcbiAgICAgICAgdGV4Y29vcmRzLnB1c2godXYpO1xuICAgIH1cbn1cblxuLy8gIEFkZCB0byBlcXVpZGlzdGFudCBwYWlycyBvZiB2ZXJ0aWNlcyAoaW50ZXJuYWwgbWV0aG9kIGZvciBwb2x5bGluZSBidWlsZGVyKVxuZnVuY3Rpb24gYWRkVmVydGV4UGFpciAoY29vcmQsIG5vcm1hbCwgZGlzdCwgY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0LnRleGNvb3Jkcykge1xuICAgICAgICBjb250ZXh0LnRvdGFsX2Rpc3QgKz0gZGlzdCAqIGNvbnRleHQudl9zY2FsZTtcbiAgICAgICAgYWRkVmVydGV4KGNvb3JkLCBub3JtYWwsIFtjb250ZXh0Lm1heF91LCBjb250ZXh0LnRvdGFsX2Rpc3RdLCBjb250ZXh0KTtcbiAgICAgICAgYWRkVmVydGV4KGNvb3JkLCBWZWN0b3IubmVnKG5vcm1hbCksIFtjb250ZXh0Lm1pbl91LCBjb250ZXh0LnRvdGFsX2Rpc3RdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFkZFZlcnRleChjb29yZCwgbm9ybWFsLCBudWxsLCBjb250ZXh0KTtcbiAgICAgICAgYWRkVmVydGV4KGNvb3JkLCBWZWN0b3IubmVnKG5vcm1hbCksIG51bGwsIGNvbnRleHQpO1xuICAgIH1cbn1cblxuLy8gIFRlc3NhbGF0ZSBhIEZBTiBnZW9tZXRyeSBiZXR3ZWVuIHBvaW50cyBBICAgICAgIEJcbi8vICB1c2luZyB0aGVpciBub3JtYWxzIGZyb20gYSBjZW50ZXIgICAgICAgIFxcIC4gLiAvXG4vLyAgYW5kIGludGVycG9sYXRpbmcgdGhlaXIgVVZzICAgICAgICAgICAgICAgXFwgcCAvXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcLi9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENcbmZ1bmN0aW9uIGFkZEZhbiAoY29vcmQsIG5BLCBuQywgbkIsIHVBLCB1QywgdUIsIHNpZ25lZCwgbnVtVHJpYW5nbGVzLCBjb250ZXh0KSB7XG5cbiAgICBpZiAobnVtVHJpYW5nbGVzIDwgMSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQWRkIHByZXZpb3VzIHZlcnRpY2VzIHRvIGJ1ZmZlciBhbmQgY2xlYXIgdGhlIGJ1ZmZlcnMgYW5kIGluZGV4IHBhaXJzXG4gICAgLy8gYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gYWRkIG1vcmUgdHJpYW5nbGVzLlxuICAgIGluZGV4UGFpcnMoY29udGV4dCk7XG5cbiAgICAvLyBJbml0aWFsIHBhcmFtZXRlcnNcbiAgICB2YXIgbm9ybUN1cnIgPSBWZWN0b3Iuc2V0KG5BKTtcbiAgICB2YXIgbm9ybVByZXYgPSBbMCwwXTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiBBIGFuZCBCXG4gICAgdmFyIGFuZ2xlX2RlbHRhID0gVmVjdG9yLmFuZ2xlQmV0d2VlbihuQSwgbkIpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbmdsZSBmb3IgZWFjaCB0cmlhbmdsZVxuICAgIHZhciBhbmdsZV9zdGVwID0gYW5nbGVfZGVsdGEvbnVtVHJpYW5nbGVzO1xuXG4gICAgLy8gSm9pbnMgdGhhdCB0dXJuIGxlZnQgb3IgcmlnaHQgYmVoYXZlIGRpZmVyZW50bHkuLi5cbiAgICAvLyB0cmlhbmdsZXMgbmVlZCB0byBiZSByb3RhdGVkIGluIGRpZmVyZW50IGRpcmVjdGlvbnNcbiAgICBpZiAoIXNpZ25lZCkge1xuICAgICAgICBhbmdsZV9zdGVwICo9IC0xO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0LnRleGNvb3Jkcykge1xuICAgICAgICB2YXIgdXZDdXJyID0gVmVjdG9yLnNldCh1QSk7XG4gICAgICAgIHZhciB1dl9kZWx0YSA9IFZlY3Rvci5kaXYoVmVjdG9yLnN1Yih1Qix1QSksIG51bVRyaWFuZ2xlcyk7XG4gICAgfVxuXG4gICAgLy8gIEFkZCB0aGUgRklSU1QgYW5kIENFTlRFUiB2ZXJ0ZXhcbiAgICAvLyAgVGhlIHRyaWFuZ2xlcyB3aWxsIGJlIGNvbXBvc2VkIGluIGEgRkFOIHN0eWxlIGFyb3VuZCBpdFxuICAgIGFkZFZlcnRleChjb29yZCwgbkMsIHVDLCBjb250ZXh0KTtcblxuICAgIC8vICBBZGQgZmlyc3QgY29ybmVyXG4gICAgYWRkVmVydGV4KGNvb3JkLCBub3JtQ3VyciwgdUEsIGNvbnRleHQpO1xuXG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBjb3JuZXJzXG4gICAgZm9yICh2YXIgdCA9IDA7IHQgPCBudW1UcmlhbmdsZXM7IHQrKykge1xuICAgICAgICBub3JtUHJldiA9IFZlY3Rvci5ub3JtYWxpemUobm9ybUN1cnIpO1xuICAgICAgICBub3JtQ3VyciA9IFZlY3Rvci5yb3QoVmVjdG9yLm5vcm1hbGl6ZShub3JtQ3VyciksIGFuZ2xlX3N0ZXApOyAgICAgLy8gIFJvdGF0ZSB0aGUgZXh0cnVzaW9uIG5vcm1hbFxuICAgICAgICBpZiAoY29udGV4dC50ZXhjb29yZHMpIHtcbiAgICAgICAgICAgIHV2Q3VyciA9IFZlY3Rvci5hZGQodXZDdXJyLHV2X2RlbHRhKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRWZXJ0ZXgoY29vcmQsIG5vcm1DdXJyLCB1dkN1cnIsIGNvbnRleHQpOyAgICAgIC8vICBBZGQgY29tcHV0ZWQgY29ybmVyXG4gICAgfVxuXG4gICAgLy8gSW5kZXggdGhlIHZlcnRpY2VzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1UcmlhbmdsZXM7IGkrKykge1xuICAgICAgICBpZiAoc2lnbmVkKSB7XG4gICAgICAgICAgICBhZGRJbmRleChpKzIsIGNvbnRleHQpO1xuICAgICAgICAgICAgYWRkSW5kZXgoMCwgY29udGV4dCk7XG4gICAgICAgICAgICBhZGRJbmRleChpKzEsIGNvbnRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWRkSW5kZXgoaSsxLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGFkZEluZGV4KDAsIGNvbnRleHQpO1xuICAgICAgICAgICAgYWRkSW5kZXgoaSsyLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIHRoZSBidWZmZXJcbiAgICBjb250ZXh0LnZlcnRpY2VzID0gW107XG4gICAgaWYgKGNvbnRleHQuc2NhbGluZ1ZlY3MpIHtcbiAgICAgICAgY29udGV4dC5zY2FsaW5nVmVjcyA9IFtdO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC50ZXhjb29yZHMpIHtcbiAgICAgICAgY29udGV4dC50ZXhjb29yZHMgPSBbXTtcbiAgICB9XG59XG5cbi8vICBhZGRCZXZlbCAgICBBIC0tLS0tIEJcbi8vICAgICAgICAgICAgIC8gXFwgLCAuIC8gXFxcbi8vICAgICAgICAgICAvICAgL1xcICAgL1xcICBcXFxuLy8gICAgICAgICAgICAgIC8gIFxcIC8gICBcXCBcXFxuLy8gICAgICAgICAgICAgICAgLyBDIFxcXG5mdW5jdGlvbiBhZGRCZXZlbCAoY29vcmQsIG5BLCBuQywgbkIsIHVBLCB1QywgdUIsIHNpZ25lZCwgY29udGV4dCkge1xuICAgIC8vIEFkZCBwcmV2aW91cyB2ZXJ0aWNlcyB0byBidWZmZXIgYW5kIGNsZWFyIHRoZSBidWZmZXJzIGFuZCBpbmRleCBwYWlyc1xuICAgIC8vIGJlY2F1c2Ugd2UgYXJlIGdvaW5nIHRvIGFkZCBtb3JlIHRyaWFuZ2xlcy5cbiAgICBpbmRleFBhaXJzKGNvbnRleHQpO1xuXG4gICAgLy8gIEFkZCB0aGUgRklSU1QgYW5kIENFTlRFUiB2ZXJ0ZXhcbiAgICBhZGRWZXJ0ZXgoY29vcmQsIG5DLCB1QywgY29udGV4dCk7XG4gICAgYWRkVmVydGV4KGNvb3JkLCBuQSwgdUEsIGNvbnRleHQpO1xuICAgIGFkZFZlcnRleChjb29yZCwgbkIsIHVCLCBjb250ZXh0KTtcblxuICAgIGlmIChzaWduZWQpIHtcbiAgICAgICAgYWRkSW5kZXgoMiwgY29udGV4dCk7XG4gICAgICAgIGFkZEluZGV4KDAsIGNvbnRleHQpO1xuICAgICAgICBhZGRJbmRleCgxLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhZGRJbmRleCgxLCBjb250ZXh0KTtcbiAgICAgICAgYWRkSW5kZXgoMCwgY29udGV4dCk7XG4gICAgICAgIGFkZEluZGV4KDIsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIC8vIENsZWFyIHRoZSBidWZmZXJcbiAgICBjb250ZXh0LnZlcnRpY2VzID0gW107XG4gICAgaWYgKGNvbnRleHQuc2NhbGluZ1ZlY3MpIHtcbiAgICAgICAgY29udGV4dC5zY2FsaW5nVmVjcyA9IFtdO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC50ZXhjb29yZHMpIHtcbiAgICAgICAgY29udGV4dC50ZXhjb29yZHMgPSBbXTtcbiAgICB9XG59XG5cblxuLy8gIFRlc3NhbGF0ZSBhIFNRVUFSRSBnZW9tZXRyeSBiZXR3ZWVuIEEgYW5kIEIgICAgICsgLi4uLi4uLi4rXG4vLyAgYW5kIGludGVycG9sYXRpbmcgdGhlaXIgVVZzICAgICAgICAgICAgICAgICAgICAgOiBcXCAgMiAgLyA6XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxXFwgICAvMyA6XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSAtLSBDIC0tIEJcbmZ1bmN0aW9uIGFkZFNxdWFyZSAoY29vcmQsIG5BLCBuQiwgdUEsIHVDLCB1Qiwgc2lnbmVkLCBjb250ZXh0KSB7XG5cbiAgICAvLyBBZGQgcHJldmlvdXMgdmVydGljZXMgdG8gYnVmZmVyIGFuZCBjbGVhciB0aGUgYnVmZmVycyBhbmQgaW5kZXggcGFpcnNcbiAgICAvLyBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byBhZGQgbW9yZSB0cmlhbmdsZXMuXG4gICAgaW5kZXhQYWlycyhjb250ZXh0KTtcblxuICAgIC8vIEluaXRpYWwgcGFyYW1ldGVyc1xuICAgIHZhciBub3JtQ3VyciA9IFZlY3Rvci5zZXQobkEpO1xuICAgIHZhciBub3JtUHJldiA9IFswLDBdO1xuICAgIGlmIChjb250ZXh0LnRleGNvb3Jkcykge1xuICAgICAgICB2YXIgdXZDdXJyID0gVmVjdG9yLnNldCh1QSk7XG4gICAgICAgIHZhciB1dl9kZWx0YSA9IFZlY3Rvci5kaXYoVmVjdG9yLnN1Yih1Qix1QSksIDQpO1xuICAgIH1cblxuICAgIC8vIEZpcnN0IGFuZCBsYXN0IGNhcCBoYXZlIGRpZmZlcmVudCBkaXJlY3Rpb25zXG4gICAgdmFyIGFuZ2xlX3N0ZXAgPSAwLjc4NTM5ODE2MzM5OyAvLyBQSS80ID0gNDUgZGVncmVlc1xuICAgIGlmICghc2lnbmVkKSB7XG4gICAgICAgIGFuZ2xlX3N0ZXAgKj0gLTE7XG4gICAgfVxuXG4gICAgLy8gIEFkZCB0aGUgRklSU1QgYW5kIENFTlRFUiB2ZXJ0ZXhcbiAgICAvLyAgVGhlIHRyaWFuZ2xlcyB3aWxsIGJlIGFkZCBpbiBhIEZBTiBzdHlsZSBhcm91bmQgaXRcbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBBIC0tIENcbiAgICBhZGRWZXJ0ZXgoY29vcmQsIHplcm9fdmVjMiwgdUMsIGNvbnRleHQpO1xuXG4gICAgLy8gIEFkZCBmaXJzdCBjb3JuZXIgICAgICtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBBIC0tIENcbiAgICBhZGRWZXJ0ZXgoY29vcmQsIG5vcm1DdXJyLCB1QSwgY29udGV4dCk7XG5cbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGNvb3JuZXJzIGNvbXBsZXRpbmcgdGhlIHRyaWFuZ2xlc1xuICAgIC8vIChleGNlcHQgdGhlIGNvcm5lciAxIHRvIHNhdmUgb25lIHRyaWFuZ2xlIHRvIGJlIGRyYXcgKVxuICAgIGZvciAodmFyIHQgPSAwOyB0IDwgNDsgdCsrKSB7XG5cbiAgICAgICAgLy8gMCAgICAgMSAgICAgMlxuICAgICAgICAvLyAgKyAuLi4uLi4uLitcbiAgICAgICAgLy8gIDogXFwgICAgIC8gOlxuICAgICAgICAvLyAgOiAgXFwgICAvICA6XG4gICAgICAgIC8vICBBIC0tIEMgLS0gQiAgM1xuXG4gICAgICAgIG5vcm1QcmV2ID0gVmVjdG9yLm5vcm1hbGl6ZShub3JtQ3Vycik7XG4gICAgICAgIG5vcm1DdXJyID0gVmVjdG9yLnJvdCggVmVjdG9yLm5vcm1hbGl6ZShub3JtQ3VyciksIGFuZ2xlX3N0ZXApOyAgICAgLy8gIFJvdGF0ZSB0aGUgZXh0cnVzaW9uIG5vcm1hbFxuXG4gICAgICAgIGlmICh0ID09PSAwIHx8IHQgPT09IDIpIHtcbiAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIG1ha2UgdGhpcyBcImZhblwiIGxvb2sgbGlrZSBhIHNxdWFyZSB0aGUgbWl0dGVycyBuZWVkIHRvIGJlIHN0cmVhY2hcbiAgICAgICAgICAgIHZhciBzY2FsZSA9IDIgLyAoMSArIE1hdGguYWJzKFZlY3Rvci5kb3Qobm9ybVByZXYsIG5vcm1DdXJyKSkpO1xuICAgICAgICAgICAgbm9ybUN1cnIgPSBWZWN0b3IubXVsdChub3JtQ3Vyciwgc2NhbGUqc2NhbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQudGV4Y29vcmRzKSB7XG4gICAgICAgICAgICB1dkN1cnIgPSBWZWN0b3IuYWRkKHV2Q3Vycix1dl9kZWx0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodCAhPT0gMSkge1xuICAgICAgICAgICAgLy8gIEFkZCBjb21wdXRlZCBjb3JuZXIgKGV4Y2VwdCB0aGUgY29ybmVyIDEpXG4gICAgICAgICAgICBhZGRWZXJ0ZXgoY29vcmQsIG5vcm1DdXJyLCB1dkN1cnIsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgaWYgKHNpZ25lZCkge1xuICAgICAgICAgICAgYWRkSW5kZXgoaSsyLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGFkZEluZGV4KDAsIGNvbnRleHQpO1xuICAgICAgICAgICAgYWRkSW5kZXgoaSsxLCBjb250ZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFkZEluZGV4KGkrMSwgY29udGV4dCk7XG4gICAgICAgICAgICBhZGRJbmRleCgwLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGFkZEluZGV4KGkrMiwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhciB0aGUgYnVmZmVyXG4gICAgY29udGV4dC52ZXJ0aWNlcyA9IFtdO1xuICAgIGlmIChjb250ZXh0LnNjYWxpbmdWZWNzKSB7XG4gICAgICAgIGNvbnRleHQuc2NhbGluZ1ZlY3MgPSBbXTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQudGV4Y29vcmRzKSB7XG4gICAgICAgIGNvbnRleHQudGV4Y29vcmRzID0gW107XG4gICAgfVxufVxuXG4vLyAgQWRkIHNwZWNpYWwgam9pbnMgKG5vdCBtaXRlcikgdHlwZXMgdGhhdCByZXF1aXJlIEZBTiB0ZXNzZWxsYXRpb25zXG4vLyAgVXNpbmcgaHR0cDovL3d3dy5jb2RlcHJvamVjdC5jb20vQXJ0aWNsZXMvMjI2NTY5L0RyYXdpbmctcG9seWxpbmVzLWJ5LXRlc3NlbGxhdGlvbiBhcyByZWZlcmVuY2VcbmZ1bmN0aW9uIGFkZEpvaW4gKGNvb3Jkcywgbm9ybWFscywgblRyaWFuZ2xlcywgY29udGV4dCkge1xuICAgIHZhciBzaWduZWQgPSBWZWN0b3Iuc2lnbmVkX2FyZWEoY29vcmRzWzBdLCBjb29yZHNbMV0sIGNvb3Jkc1syXSkgPiAwO1xuICAgIHZhciBuQSA9IG5vcm1hbHNbMF0sICAgICAgICAgICAgICAvLyBub3JtYWwgdG8gcG9pbnQgQSAoYVQpXG4gICAgICAgIG5DID0gVmVjdG9yLm5lZyhub3JtYWxzWzFdKSwgIC8vIG5vcm1hbCB0byBjZW50ZXIgKC12UClcbiAgICAgICAgbkIgPSBub3JtYWxzWzJdOyAgICAgICAgICAgICAgLy8gbm9ybWFsIHRvIHBvaW50IEIgKGJUKVxuICAgIHZhciB1QSwgdUIsIHVDO1xuXG4gICAgaWYgKGNvbnRleHQudGV4Y29vcmRzKSB7XG4gICAgICAgIGNvbnRleHQudG90YWxfZGlzdCArPSBWZWN0b3IubGVuZ3RoKFZlY3Rvci5zdWIoY29vcmRzWzFdLCBjb29yZHNbMF0pKSAqIGNvbnRleHQudl9zY2FsZTtcbiAgICAgICAgdUEgPSBbY29udGV4dC5tYXhfdSwgY29udGV4dC50b3RhbF9kaXN0XTtcbiAgICAgICAgdUMgPSBbY29udGV4dC5taW5fdSwgY29udGV4dC50b3RhbF9kaXN0XTtcbiAgICAgICAgdUIgPSB1QTtcbiAgICB9XG5cbiAgICBpZiAoc2lnbmVkKSB7XG4gICAgICAgIGFkZFZlcnRleChjb29yZHNbMV0sIG5BLCB1QSwgY29udGV4dCk7XG4gICAgICAgIGFkZFZlcnRleChjb29yZHNbMV0sIG5DLCB1QywgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbkEgPSBWZWN0b3IubmVnKG5vcm1hbHNbMF0pO1xuICAgICAgICBuQyA9IG5vcm1hbHNbMV07XG4gICAgICAgIG5CID0gVmVjdG9yLm5lZyhub3JtYWxzWzJdKTtcblxuICAgICAgICBpZiAoY29udGV4dC50ZXhjb29yZHMpIHtcbiAgICAgICAgICAgIHVBID0gW2NvbnRleHQubWluX3UsIGNvbnRleHQudG90YWxfZGlzdF07XG4gICAgICAgICAgICB1QyA9IFtjb250ZXh0Lm1heF91LCBjb250ZXh0LnRvdGFsX2Rpc3RdO1xuICAgICAgICAgICAgdUIgPSB1QTtcbiAgICAgICAgfVxuICAgICAgICBhZGRWZXJ0ZXgoY29vcmRzWzFdLCBuQywgdUMsIGNvbnRleHQpO1xuICAgICAgICBhZGRWZXJ0ZXgoY29vcmRzWzFdLCBuQSwgdUEsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChuVHJpYW5nbGVzID09PSAxKSB7XG4gICAgICAgIGFkZEJldmVsKGNvb3Jkc1sxXSwgbkEsIG5DLCBuQiwgdUEsIHVDLCB1Qiwgc2lnbmVkLCBjb250ZXh0KTtcbiAgICB9IGVsc2UgaWYgKG5UcmlhbmdsZXMgPiAxKXtcbiAgICAgICAgYWRkRmFuKGNvb3Jkc1sxXSwgbkEsIG5DLCBuQiwgdUEsIHVDLCB1Qiwgc2lnbmVkLCBuVHJpYW5nbGVzLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBpZiAoc2lnbmVkKSB7XG4gICAgICAgIGFkZFZlcnRleChjb29yZHNbMV0sIG5CLCB1QiwgY29udGV4dCk7XG4gICAgICAgIGFkZFZlcnRleChjb29yZHNbMV0sIG5DLCB1QywgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYWRkVmVydGV4KGNvb3Jkc1sxXSwgbkMsIHVDLCBjb250ZXh0KTtcbiAgICAgICAgYWRkVmVydGV4KGNvb3Jkc1sxXSwgbkIsIHVCLCBjb250ZXh0KTtcbiAgICB9XG59XG5cbi8vICBGdW5jdGlvbiB0byBhZGQgdGhlIHZlcnRleCBuZWVkIGZvciBsaW5lIGNhcHMsXG4vLyAgYmVjYXVzZSByZS11c2UgdGhlIGJ1ZmZlcnMgbmVlZHMgdG8gYmUgYXQgdGhlIGVuZFxuZnVuY3Rpb24gYWRkQ2FwIChjb29yZCwgbm9ybWFsLCBudW1Db3JuZXJzLCBpc0JlZ2lubmluZywgY29udGV4dCkge1xuXG4gICAgaWYgKG51bUNvcm5lcnMgPCAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVVnNcbiAgICB2YXIgdXZBLCB1dkIsIHV2QztcbiAgICBpZiAoY29udGV4dC50ZXhjb29yZHMpIHtcbiAgICAgICAgdXZDID0gW2NvbnRleHQubWluX3UrKGNvbnRleHQubWF4X3UtY29udGV4dC5taW5fdSkvMiwgY29udGV4dC50b3RhbF9kaXN0XTsgICAvLyBDZW50ZXIgcG9pbnQgVVZzXG4gICAgICAgIHV2QSA9IFtjb250ZXh0Lm1pbl91LCBjb250ZXh0LnRvdGFsX2Rpc3RdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVnaW5uaW5nIGFuZ2xlIFVWc1xuICAgICAgICB1dkIgPSBbY29udGV4dC5tYXhfdSwgY29udGV4dC50b3RhbF9kaXN0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZGluZyBhbmdsZSBVVnNcbiAgICB9XG5cbiAgICBpZiAoIG51bUNvcm5lcnMgPT09IDIgKXtcbiAgICAgICAgLy8gSWYgY2FwcyBhcmUgc2V0IGFzIHNxdWFyZXNcbiAgICAgICAgYWRkU3F1YXJlKCBjb29yZCxcbiAgICAgICAgICAgICAgICAgICBWZWN0b3IubmVnKG5vcm1hbCksIG5vcm1hbCxcbiAgICAgICAgICAgICAgICAgICB1dkEsIHV2QywgdXZCLFxuICAgICAgICAgICAgICAgICAgIGlzQmVnaW5uaW5nLFxuICAgICAgICAgICAgICAgICAgIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGNhcHMgYXJlIHNldCBhcyByb3VuZCAoIG51bUNvcm5lcnM9PT0zIClcbiAgICAgICAgYWRkRmFuKCBjb29yZCxcbiAgICAgICAgICAgICAgICBWZWN0b3IubmVnKG5vcm1hbCksIHplcm9fdmVjMiwgbm9ybWFsLFxuICAgICAgICAgICAgICAgIHV2QSwgdXZDLCB1dkIsXG4gICAgICAgICAgICAgICAgaXNCZWdpbm5pbmcsIG51bUNvcm5lcnMqMiwgY29udGV4dCk7XG4gICAgfVxufVxuXG4vLyBBZGQgYSB2ZXJ0ZXggYmFzZWQgb24gdGhlIGluZGV4IHBvc2l0aW9uIGludG8gdGhlIFZCTyAoaW50ZXJuYWwgbWV0aG9kIGZvciBwb2x5bGluZSBidWlsZGVyKVxuZnVuY3Rpb24gYWRkSW5kZXggKGluZGV4LCB7IHZlcnRleF9kYXRhLCB2ZXJ0ZXhfdGVtcGxhdGUsIGhhbGZfd2lkdGgsIHZlcnRpY2VzLCBzY2FsaW5nX2luZGV4LCBzY2FsaW5nX25vcm1hbGl6ZSwgc2NhbGluZ1ZlY3MsIHRleGNvb3JkX2luZGV4LCB0ZXhjb29yZHMsIHRleGNvb3JkX25vcm1hbGl6ZSB9KSB7XG4gICAgLy8gUHJldmVudCBhY2Nlc3MgdG8gdW5kZWZpbmVkIHZlcnRpY2VzXG4gICAgaWYgKGluZGV4ID49IHZlcnRpY2VzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc2V0IHZlcnRleCBwb3NpdGlvblxuICAgIHZlcnRleF90ZW1wbGF0ZVswXSA9IHZlcnRpY2VzW2luZGV4XVswXTtcbiAgICB2ZXJ0ZXhfdGVtcGxhdGVbMV0gPSB2ZXJ0aWNlc1tpbmRleF1bMV07XG5cbiAgICAvLyBzZXQgVVZzXG4gICAgaWYgKHRleGNvb3JkX2luZGV4KSB7XG4gICAgICAgIHZlcnRleF90ZW1wbGF0ZVt0ZXhjb29yZF9pbmRleCArIDBdID0gdGV4Y29vcmRzW2luZGV4XVswXSAqIHRleGNvb3JkX25vcm1hbGl6ZTtcbiAgICAgICAgdmVydGV4X3RlbXBsYXRlW3RleGNvb3JkX2luZGV4ICsgMV0gPSB0ZXhjb29yZHNbaW5kZXhdWzFdICogdGV4Y29vcmRfbm9ybWFsaXplO1xuICAgIH1cblxuICAgIC8vIHNldCBTY2FsaW5nIHZlcnRleCAoWCwgWSBub3JtYWwgZGlyZWN0aW9uICsgWiBoYWxmX3dpZHRoIGFzIGF0dHJpYnV0ZSlcbiAgICBpZiAoc2NhbGluZ19pbmRleCkge1xuICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbc2NhbGluZ19pbmRleCArIDBdID0gc2NhbGluZ1ZlY3NbaW5kZXhdWzBdICogc2NhbGluZ19ub3JtYWxpemU7XG4gICAgICAgIHZlcnRleF90ZW1wbGF0ZVtzY2FsaW5nX2luZGV4ICsgMV0gPSBzY2FsaW5nVmVjc1tpbmRleF1bMV0gKiBzY2FsaW5nX25vcm1hbGl6ZTtcbiAgICAgICAgdmVydGV4X3RlbXBsYXRlW3NjYWxpbmdfaW5kZXggKyAyXSA9IGhhbGZfd2lkdGg7XG4gICAgfVxuXG4gICAgLy8gIEFkZCB2ZXJ0ZXggdG8gVkJPXG4gICAgdmVydGV4X2RhdGEuYWRkVmVydGV4KHZlcnRleF90ZW1wbGF0ZSk7XG59XG5cbi8vIEFkZCB0aGUgaW5kZXggdmVydGV4IHRvIHRoZSBWQk8gYW5kIGNsZWFuIHRoZSBidWZmZXJzXG5mdW5jdGlvbiBpbmRleFBhaXJzIChjb250ZXh0KSB7XG4gICAgLy8gQWRkIHZlcnRpY2VzIHRvIGJ1ZmZlciBhY29yZGluZyB0aGVpciBpbmRleFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGV4dC5udW1fcGFpcnM7IGkrKykge1xuICAgICAgICBhZGRJbmRleCgyKmkrMiwgY29udGV4dCk7XG4gICAgICAgIGFkZEluZGV4KDIqaSsxLCBjb250ZXh0KTtcbiAgICAgICAgYWRkSW5kZXgoMippKzAsIGNvbnRleHQpO1xuXG4gICAgICAgIGFkZEluZGV4KDIqaSsyLCBjb250ZXh0KTtcbiAgICAgICAgYWRkSW5kZXgoMippKzMsIGNvbnRleHQpO1xuICAgICAgICBhZGRJbmRleCgyKmkrMSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5udW1fcGFpcnMgPSAwO1xuXG4gICAgLy8gQ2xlYW4gdGhlIGJ1ZmZlclxuICAgIGNvbnRleHQudmVydGljZXMgPSBbXTtcbiAgICBpZiAoY29udGV4dC5zY2FsaW5nVmVjcykge1xuICAgICAgICBjb250ZXh0LnNjYWxpbmdWZWNzID0gW107XG4gICAgfVxuICAgIGlmIChjb250ZXh0LnRleGNvb3Jkcykge1xuICAgICAgICBjb250ZXh0LnRleGNvb3JkcyA9IFtdO1xuICAgIH1cbn1cbiIsImltcG9ydCBVdGlscyBmcm9tICcuL3V0aWxzL3V0aWxzJztcbmltcG9ydCBTaGFkZXJQcm9ncmFtIGZyb20gJy4vZ2wvc2hhZGVyX3Byb2dyYW0nO1xuaW1wb3J0IHttYXQ0LCBtYXQzLCB2ZWMzfSBmcm9tICcuL3V0aWxzL2dsLW1hdHJpeCc7XG5cbi8vIEFic3RyYWN0IGJhc2UgY2xhc3NcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhbWVyYSB7XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB2aWV3LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy52aWV3ID0gdmlldztcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb247XG4gICAgICAgIHRoaXMuem9vbSA9IG9wdGlvbnMuem9vbTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBjYW1lcmEgYnkgdHlwZSBuYW1lLCBmYWN0b3J5LXN0eWxlXG4gICAgc3RhdGljIGNyZWF0ZShuYW1lLCB2aWV3LCBjb25maWcpIHtcbiAgICAgICAgc3dpdGNoIChjb25maWcudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnaXNvbWV0cmljJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IElzb21ldHJpY0NhbWVyYShuYW1lLCB2aWV3LCBjb25maWcpO1xuICAgICAgICAgICAgY2FzZSAnZmxhdCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGbGF0Q2FtZXJhKG5hbWUsIHZpZXcsIGNvbmZpZyk7XG4gICAgICAgICAgICBjYXNlICdwZXJzcGVjdGl2ZSc6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEobmFtZSwgdmlldywgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBtZXRob2QgY2FsbGVkIG9uY2UgcGVyIGZyYW1lXG4gICAgdXBkYXRlKCkge1xuICAgIH1cblxuICAgIC8vIENhbGxlZCBvbmNlIHBlciBmcmFtZSBwZXIgcHJvZ3JhbSAoZS5nLiBmb3IgbWFpbiByZW5kZXIgcGFzcywgdGhlbiBmb3IgZWFjaCBhZGRpdGlvbmFsIHBhc3MgZm9yIGZlYXR1cmUgc2VsZWN0aW9uLCBldGMuKVxuICAgIHNldHVwUHJvZ3JhbShwcm9ncmFtKSB7XG4gICAgfVxuXG4gICAgLy8gU3luYyBjYW1lcmEgcG9zaXRpb24vem9vbSB0byBzY2VuZSB2aWV3XG4gICAgdXBkYXRlVmlldyAoKSB7XG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uIHx8IHRoaXMuem9vbSkge1xuICAgICAgICAgICAgdmFyIHZpZXcgPSB7fTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmlldyA9IHsgbG5nOiB0aGlzLnBvc2l0aW9uWzBdLCBsYXQ6IHRoaXMucG9zaXRpb25bMV0sIHpvb206IHRoaXMucG9zaXRpb25bMl0gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnpvb20pIHtcbiAgICAgICAgICAgICAgICB2aWV3Lnpvb20gPSB0aGlzLnpvb207XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZpZXcuc2V0Vmlldyh2aWV3KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBtb2RlbC12aWV3IGFuZCBub3JtYWwgbWF0cmljZXNcbiAgICBzZXR1cE1hdHJpY2VzIChtYXRyaWNlcywgcHJvZ3JhbSkge1xuICAgICAgICAvLyBNb2RlbCB2aWV3IG1hdHJpeCAtIHRyYW5zZm9ybSB0aWxlIHNwYWNlIGludG8gdmlldyBzcGFjZSAobWV0ZXJzLCByZWxhdGl2ZSB0byBjYW1lcmEpXG4gICAgICAgIG1hdDQubXVsdGlwbHkobWF0cmljZXMubW9kZWxfdmlldzMyLCB0aGlzLnZpZXdfbWF0cml4LCBtYXRyaWNlcy5tb2RlbCk7XG4gICAgICAgIHByb2dyYW0udW5pZm9ybSgnTWF0cml4NGZ2JywgJ3VfbW9kZWxWaWV3JywgZmFsc2UsIG1hdHJpY2VzLm1vZGVsX3ZpZXczMik7XG5cbiAgICAgICAgLy8gTm9ybWFsIG1hdHJpY2VzIC0gdHJhbnNmb3JtcyBzdXJmYWNlIG5vcm1hbHMgaW50byB2aWV3IHNwYWNlXG4gICAgICAgIG1hdDMubm9ybWFsRnJvbU1hdDQobWF0cmljZXMubm9ybWFsMzIsIG1hdHJpY2VzLm1vZGVsX3ZpZXczMik7XG4gICAgICAgIG1hdDMuaW52ZXJ0KG1hdHJpY2VzLmludmVyc2Vfbm9ybWFsMzIsIG1hdHJpY2VzLm5vcm1hbDMyKTtcbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCdNYXRyaXgzZnYnLCAndV9ub3JtYWxNYXRyaXgnLCBmYWxzZSwgbWF0cmljZXMubm9ybWFsMzIpO1xuICAgICAgICBwcm9ncmFtLnVuaWZvcm0oJ01hdHJpeDNmdicsICd1X2ludmVyc2VOb3JtYWxNYXRyaXgnLCBmYWxzZSwgbWF0cmljZXMuaW52ZXJzZV9ub3JtYWwzMik7XG4gICAgfVxuXG59XG5cbi8qKlxuICAgIFBlcnNwZWN0aXZlIG1hdHJpeCBwcm9qZWN0aW9uXG5cbiAgICBUaGlzIGlzIGEgc3BlY2lhbGl6ZWQgcGVyc3BlY3RpdmUgY2FtZXJhIHRoYXQsIGdpdmVuIGEgZGVzaXJlZCBjYW1lcmEgZm9jYWwgbGVuZ3RoICh3aGljaCBjYW4gYWxzbyB2YXJ5IGJ5IHpvb20gbGV2ZWwpLFxuICAgIGNvbnN0cmFpbnMgdGhlIGNhbWVyYSBoZWlnaHQgYWJvdmUgdGhlIGdyb3VuZCBwbGFuZSBzdWNoIHRoYXQgdGhlIGRpc3BsYXllZCBncm91bmQgYXJlYSBvZiB0aGUgbWFwIG1hdGNoZXMgdGhhdCBvZlxuICAgIGEgdHJhZGl0aW9uYWwgd2ViIG1lcmNhdG9yIG1hcC4gVGhpcyBtZWFucyB5b3UgY2FuIHNldCB0aGUgY2FtZXJhIGxvY2F0aW9uIGJ5IFtsYXQsIGxuZywgem9vbV0gYXMgeW91IHdvdWxkIGEgdHlwaWNhbFxuICAgIHdlYiBtZXJjYXRvciBtYXAsIHRoZW4gYWRqdXN0IHRoZSBmb2NhbCBsZW5ndGggYXMgbmVlZGVkLlxuXG4gICAgVmFuaXNoaW5nIHBvaW50IGNhbiBhbHNvIGJlIGFkanVzdGVkIHRvIGFjaGlldmUgZGlmZmVyZW50IFwidmlld2luZyBhbmdsZXNcIiwgZS5nLiBpbnN0ZWFkIG9mIGxvb2tpbmcgc3RyYWlnaHQgZG93biBpbnRvXG4gICAgdGhlIGNlbnRlciBvZiB0aGUgdmlld3BvcnQsIHRoZSBjYW1lcmEgYXBwZWFycyB0byBiZSB0aWx0ZWQgYXQgYW4gYW5nbGUuIEZvciBleGFtcGxlOlxuXG4gICAgWzAsIDBdID0gbG9va2luZyB0b3dhcmRzIGNlbnRlciBvZiB2aWV3cG9ydFxuICAgIFstMjUwLCAtMjUwXSA9IGxvb2tpbmcgMjUwIHBpeGVscyBmcm9tIHRoZSB2aWV3cG9ydCBjZW50ZXIgdG8gdGhlIGxvd2VyLWxlZnQgY29ybmVyXG4gICAgWzQwMCwgMF0gPSBsb29raW5nIDQwMCBwaXhlbHMgdG8gdGhlIHJpZ2h0IG9mIHRoZSB2aWV3cG9ydCBjZW50ZXJcbiovXG5jbGFzcyBQZXJzcGVjdGl2ZUNhbWVyYSBleHRlbmRzIENhbWVyYSB7XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB2aWV3LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIobmFtZSwgdmlldywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdwZXJzcGVjdGl2ZSc7XG5cbiAgICAgICAgLy8gYSBzaW5nbGUgc2NhbGFyLCBvciBwYWlycyBvZiBzdG9wcyBtYXBwaW5nIHpvb20gbGV2ZWxzLCBlLmcuIFt6b29tLCBmb2NhbCBsZW5ndGhdXG4gICAgICAgIHRoaXMuZm9jYWxfbGVuZ3RoID0gb3B0aW9ucy5mb2NhbF9sZW5ndGg7XG4gICAgICAgIHRoaXMuZm92ID0gb3B0aW9ucy5mb3Y7XG4gICAgICAgIGlmICghdGhpcy5mb2NhbF9sZW5ndGggJiYgIXRoaXMuZm92KSB7XG4gICAgICAgICAgICAvLyBEZWZhdWx0IGZvY2FsIGxlbmd0aCByYW5nZXMgYnkgem9vbVxuICAgICAgICAgICAgdGhpcy5mb2NhbF9sZW5ndGggPSBbWzE2LCAyXSwgWzE3LCAyLjVdLCBbMTgsIDNdLCBbMTksIDRdLCBbMjAsIDZdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFuaXNoaW5nX3BvaW50ID0gb3B0aW9ucy52YW5pc2hpbmdfcG9pbnQgfHwgWzAsIDBdOyAvLyBbeCwgeV1cbiAgICAgICAgdGhpcy52YW5pc2hpbmdfcG9pbnQgPSB0aGlzLnZhbmlzaGluZ19wb2ludC5tYXAocGFyc2VGbG9hdCk7IC8vIHdlIGltcGxpY2l0bHkgb25seSBzdXBwb3J0IHB4IHVuaXRzIGhlcmVcbiAgICAgICAgdGhpcy52YW5pc2hpbmdfcG9pbnRfc2tldyA9IFtdO1xuXG4gICAgICAgIHRoaXMucG9zaXRpb25fbWV0ZXJzID0gbnVsbDtcbiAgICAgICAgdGhpcy52aWV3X21hdHJpeCA9IG5ldyBGbG9hdDY0QXJyYXkoMTYpO1xuICAgICAgICB0aGlzLnByb2plY3Rpb25fbWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XG5cbiAgICAgICAgLy8gJ2NhbWVyYScgaXMgdGhlIG5hbWUgb2YgdGhlIHNoYWRlciBibG9jaywgZS5nLiBkZXRlcm1pbmVzIHdoZXJlIGluIHRoZSBzaGFkZXIgdGhpcyBjb2RlIGlzIGluamVjdGVkXG4gICAgICAgIFNoYWRlclByb2dyYW0ucmVwbGFjZUJsb2NrKCdjYW1lcmEnLCBgXG4gICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uO1xuICAgICAgICAgICAgdW5pZm9ybSB2ZWMzIHVfZXllO1xuICAgICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdmFuaXNoaW5nX3BvaW50O1xuXG4gICAgICAgICAgICB2b2lkIGNhbWVyYVByb2plY3Rpb24gKGlub3V0IHZlYzQgcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHVfcHJvamVjdGlvbiAqIHBvc2l0aW9uO1xuICAgICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb25zdHJhaW5zIHRoZSBjYW1lcmEgc28gdGhhdCB0aGUgdmlld2FibGUgYXJlYSBtYXRjaGVzIGdpdmVuIHRoZSB2aWV3cG9ydCBoZWlnaHRcbiAgICAvLyAoaW4gd29ybGQgc3BhY2UsIGUuZy4gbWV0ZXJzKSwgZ2l2ZW4gZWl0aGVyIGEgY2FtZXJhIGZvY2FsIGxlbmd0aCBvciBmaWVsZC1vZi12aWV3XG4gICAgLy8gKGZvY2FsIGxlbmd0aCBpcyB1c2VkIGlmIGJvdGggYXJlIHBhc3NlZCkuXG4gICAgY29uc3RyYWluQ2FtZXJhKHsgdmlld19oZWlnaHQsIGhlaWdodCwgZm9jYWxfbGVuZ3RoLCBmb3YgfSkge1xuICAgICAgICAvLyBTb2x2ZSBmb3IgY2FtZXJhIGhlaWdodFxuICAgICAgICBpZiAoIWhlaWdodCkge1xuICAgICAgICAgICAgLy8gV2UgaGF2ZSBmb2NhbCBsZW5ndGgsIGNhbGN1bGF0ZSBGT1ZcbiAgICAgICAgICAgIGlmIChmb2NhbF9sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3YgPSBNYXRoLmF0YW4oMSAvIGZvY2FsX2xlbmd0aCkgKiAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2UgaGF2ZSBGT1YsIGNhbGN1bGF0ZSBmb2NhbCBsZW5ndGhcbiAgICAgICAgICAgIGVsc2UgaWYgKGZvdikge1xuICAgICAgICAgICAgICAgIGZvdiA9IGZvdiAqIE1hdGguUEkgLyAxODA7IC8vIGNvbnZlcnQgRk9WIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICAgICAgICAgICAgICAgIGZvY2FsX2xlbmd0aCA9IDEgLyBNYXRoLnRhbihmb3YgLyAyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRGlzdGFuY2UgdGhhdCBjYW1lcmEgc2hvdWxkIGJlIGZyb20gZ3JvdW5kIHN1Y2ggdGhhdCBpdCBmaXRzIHRoZSBmaWVsZCBvZiB2aWV3IGV4cGVjdGVkXG4gICAgICAgICAgICAvLyBmb3IgYSBjb252ZW50aW9uYWwgd2ViIG1lcmNhdG9yIG1hcCBhdCB0aGUgY3VycmVudCB6b29tIGxldmVsIGFuZCBjYW1lcmEgZm9jYWwgbGVuZ3RoXG4gICAgICAgICAgICBoZWlnaHQgPSB2aWV3X2hlaWdodCAvIDIgKiBmb2NhbF9sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29sdmUgZm9yIGNhbWVyYSBmb2NhbCBsZW5ndGggLyBmaWVsZC1vZi12aWV3XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9jYWxfbGVuZ3RoID0gMiAqIGhlaWdodCAvIHZpZXdfaGVpZ2h0O1xuICAgICAgICAgICAgZm92ID0gTWF0aC5hdGFuKDEgLyBmb2NhbF9sZW5ndGgpICogMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHZpZXdfaGVpZ2h0LCBoZWlnaHQsIGZvY2FsX2xlbmd0aCwgZm92IH07XG4gICAgfVxuXG4gICAgdXBkYXRlTWF0cmljZXMoKSB7XG4gICAgICAgIC8vIFRPRE86IG9ubHkgcmUtY2FsY3VsYXRlIHRoZXNlIHZhcnMgd2hlbiBuZWNlc3NhcnlcblxuICAgICAgICAvLyBIZWlnaHQgb2YgdGhlIHZpZXdwb3J0IGluIG1ldGVycyBhdCBjdXJyZW50IHpvb21cbiAgICAgICAgdmFyIHZpZXdwb3J0X2hlaWdodCA9IHRoaXMudmlldy5zaXplLmNzcy5oZWlnaHQgKiB0aGlzLnZpZXcubWV0ZXJzX3Blcl9waXhlbDtcblxuICAgICAgICAvLyBDb21wdXRlIGNhbWVyYSBwcm9wZXJ0aWVzIHRvIGZpdCBkZXNpcmVkIHZpZXdcbiAgICAgICAgdmFyIHsgaGVpZ2h0LCBmb3YgfSA9IHRoaXMuY29uc3RyYWluQ2FtZXJhKHtcbiAgICAgICAgICAgIHZpZXdfaGVpZ2h0OiB2aWV3cG9ydF9oZWlnaHQsXG4gICAgICAgICAgICBmb2NhbF9sZW5ndGg6IFV0aWxzLmludGVycG9sYXRlKHRoaXMudmlldy56b29tLCB0aGlzLmZvY2FsX2xlbmd0aCksXG4gICAgICAgICAgICBmb3Y6IFV0aWxzLmludGVycG9sYXRlKHRoaXMudmlldy56b29tLCB0aGlzLmZvdilcbiAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFZpZXcgbWF0cml4XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IFt0aGlzLnZpZXcuY2VudGVyLm1ldGVycy54LCB0aGlzLnZpZXcuY2VudGVyLm1ldGVycy55LCBoZWlnaHRdO1xuICAgICAgICB0aGlzLnBvc2l0aW9uX21ldGVycyA9IHBvc2l0aW9uO1xuXG4gICAgICAgIC8vIG1hdDQubG9va0F0KHRoaXMudmlld19tYXRyaXgsXG4gICAgICAgIC8vICAgICB2ZWMzLmZyb21WYWx1ZXMoLi4ucG9zaXRpb24pLFxuICAgICAgICAvLyAgICAgdmVjMy5mcm9tVmFsdWVzKHBvc2l0aW9uWzBdLCBwb3NpdGlvblsxXSwgaGVpZ2h0IC0gMSksXG4gICAgICAgIC8vICAgICB2ZWMzLmZyb21WYWx1ZXMoMCwgMSwgMCkpO1xuICAgICAgICAvLyBFeGNsdWRlIGNhbWVyYSBoZWlnaHQgZnJvbSB2aWV3IG1hdHJpeFxuICAgICAgICBtYXQ0Lmxvb2tBdCh0aGlzLnZpZXdfbWF0cml4LFxuICAgICAgICAgICAgdmVjMy5mcm9tVmFsdWVzKHBvc2l0aW9uWzBdLCBwb3NpdGlvblsxXSwgMCksXG4gICAgICAgICAgICB2ZWMzLmZyb21WYWx1ZXMocG9zaXRpb25bMF0sIHBvc2l0aW9uWzFdLCAtMSksXG4gICAgICAgICAgICB2ZWMzLmZyb21WYWx1ZXMoMCwgMSwgMCkpO1xuXG4gICAgICAgIC8vIFByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIG1hdDQucGVyc3BlY3RpdmUodGhpcy5wcm9qZWN0aW9uX21hdHJpeCwgZm92LCB0aGlzLnZpZXcuYXNwZWN0LCAxLCBoZWlnaHQgKiAyKTtcblxuICAgICAgICAvLyBDb252ZXJ0IHZhbmlzaGluZyBwb2ludCBmcm9tIHBpeGVscyB0byB2aWV3cG9ydCBzcGFjZVxuICAgICAgICB0aGlzLnZhbmlzaGluZ19wb2ludF9za2V3WzBdID0gdGhpcy52YW5pc2hpbmdfcG9pbnRbMF0gLyB0aGlzLnZpZXcuc2l6ZS5jc3Mud2lkdGg7XG4gICAgICAgIHRoaXMudmFuaXNoaW5nX3BvaW50X3NrZXdbMV0gPSB0aGlzLnZhbmlzaGluZ19wb2ludFsxXSAvIHRoaXMudmlldy5zaXplLmNzcy5oZWlnaHQ7XG5cbiAgICAgICAgLy8gQWRqdXN0IHByb2plY3Rpb24gbWF0cml4IHRvIGluY2x1ZGUgdmFuaXNoaW5nIHBvaW50IHNrZXdcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uX21hdHJpeFs4XSA9IC10aGlzLnZhbmlzaGluZ19wb2ludF9za2V3WzBdOyAvLyB6IGNvbHVtbiBvZiB4IHJvdywgZS5nLiBhbW91bnQgeiBza2V3cyB4XG4gICAgICAgIHRoaXMucHJvamVjdGlvbl9tYXRyaXhbOV0gPSAtdGhpcy52YW5pc2hpbmdfcG9pbnRfc2tld1sxXTsgLy8geiBjb2x1bW4gb2YgeSByb3csIGUuZy4gYW1vdW50IHogc2tld3MgeVxuXG4gICAgICAgIC8vIFRyYW5zbGF0ZSBnZW9tZXRyeSBpbnRvIHRoZSBkaXN0YW5jZSBzbyB0aGF0IGNhbWVyYSBpcyBhcHByb3ByaWF0ZSBoZWlnaHQgYWJvdmUgZ3JvdW5kXG4gICAgICAgIC8vIEFkZGl0aW9uYWxseSwgYWRqdXN0IHh5IHRvIGNvbXBlbnNhdGUgZm9yIGFueSB2YW5pc2hpbmcgcG9pbnQgc2tldywgZS5nLiBtb3ZlIGdlb21ldHJ5IHNvIHRoYXQgdGhlIGRpc3BsYXllZCBnXG4gICAgICAgIC8vIHBsYW5lIG9mIHRoZSBtYXAgbWF0Y2hlcyB0aGF0IGV4cGVjdGVkIGJ5IGEgdHJhZGl0aW9uYWwgd2ViIG1lcmNhdG9yIG1hcCBhdCB0aGlzIFtsYXQsIGxuZywgem9vbV0uXG4gICAgICAgIG1hdDQudHJhbnNsYXRlKHRoaXMucHJvamVjdGlvbl9tYXRyaXgsIHRoaXMucHJvamVjdGlvbl9tYXRyaXgsXG4gICAgICAgICAgICB2ZWMzLmZyb21WYWx1ZXMoXG4gICAgICAgICAgICAgICAgdmlld3BvcnRfaGVpZ2h0LzIgKiB0aGlzLnZpZXcuYXNwZWN0ICogLXRoaXMudmFuaXNoaW5nX3BvaW50X3NrZXdbMF0sXG4gICAgICAgICAgICAgICAgdmlld3BvcnRfaGVpZ2h0LzIgKiAtdGhpcy52YW5pc2hpbmdfcG9pbnRfc2tld1sxXSxcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gSW5jbHVkZSBjYW1lcmEgaGVpZ2h0IGluIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKHRoaXMucHJvamVjdGlvbl9tYXRyaXgsIHRoaXMucHJvamVjdGlvbl9tYXRyaXgsIHZlYzMuZnJvbVZhbHVlcygwLCAwLCAtaGVpZ2h0KSk7XG4gICAgfVxuXG4gICAgdXBkYXRlKCkge1xuICAgICAgICBzdXBlci51cGRhdGUoKTtcbiAgICAgICAgdGhpcy51cGRhdGVNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIHNldHVwUHJvZ3JhbShwcm9ncmFtKSB7XG4gICAgICAgIHByb2dyYW0udW5pZm9ybSgnTWF0cml4NGZ2JywgJ3VfcHJvamVjdGlvbicsIGZhbHNlLCB0aGlzLnByb2plY3Rpb25fbWF0cml4KTtcbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCczZicsICd1X2V5ZScsIDAsIDAsIHRoaXMucG9zaXRpb25fbWV0ZXJzWzJdKTtcbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCcyZnYnLCAndV92YW5pc2hpbmdfcG9pbnQnLCB0aGlzLnZhbmlzaGluZ19wb2ludF9za2V3KTtcbiAgICB9XG5cbn1cblxuLy8gSXNvbWV0cmljLXN0eWxlIHByb2plY3Rpb25cbi8vIE5vdGU6IHRoaXMgaXMgYWN0dWFsbHkgYW4gXCJheG9ub21ldHJpY1wiIHByb2plY3Rpb24sIGJ1dCBJJ20gdXNpbmcgdGhlIGNvbGxvcXVpYWwgdGVybSBpc29tZXRyaWMgYmVjYXVzZSBpdCBpcyBtb3JlIHJlY29nbml6YWJsZS5cbi8vIEFuIGlzb21ldHJpYyBwcm9qZWN0aW9uIGlzIGEgc3BlY2lmaWMgc3Vic2V0IG9mIGF4b25vbWV0cmljIHByb2plY3Rpb25zLlxuLy8gJ2F4aXMnIGRldGVybWluZXMgdGhlIHh5IHNrZXcgYXBwbGllZCB0byBhIHZlcnRleCBiYXNlZCBvbiBpdHMgeiBjb29yZGluYXRlLCBlLmcuIFswLCAxXSBheGlzIGNhdXNlcyBidWlsZGluZ3MgdG8gYmUgZHJhd25cbi8vIHN0cmFpZ2h0IHVwd2FyZHMgb24gc2NyZWVuIGF0IHRoZWlyIHRydWUgaGVpZ2h0LCBbMCwgLjVdIHdvdWxkIGRyYXcgdGhlbSB1cCBhdCBoYWxmLWhlaWdodCwgWzEsIDBdIHdvdWxkIGJlIHNpZGV3YXlzLCBldGMuXG5jbGFzcyBJc29tZXRyaWNDYW1lcmEgZXh0ZW5kcyBDYW1lcmEge1xuXG4gICAgY29uc3RydWN0b3IobmFtZSwgdmlldywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHZpZXcsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnaXNvbWV0cmljJztcbiAgICAgICAgdGhpcy5heGlzID0gb3B0aW9ucy5heGlzIHx8IHsgeDogMCwgeTogMSB9O1xuICAgICAgICBpZiAodGhpcy5heGlzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgdGhpcy5heGlzID0geyB4OiB0aGlzLmF4aXNbMF0sIHk6IHRoaXMuYXhpc1sxXSB9OyAvLyBhbGxvdyBheGlzIHRvIGFsc28gYmUgcGFzc2VkIGFzIDItZWxlbSBhcnJheVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wb3NpdGlvbl9tZXRlcnMgPSBudWxsO1xuICAgICAgICB0aGlzLnZpZXdwb3J0X2hlaWdodCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy52aWV3X21hdHJpeCA9IG5ldyBGbG9hdDY0QXJyYXkoMTYpO1xuICAgICAgICB0aGlzLnByb2plY3Rpb25fbWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XG5cbiAgICAgICAgLy8gJ2NhbWVyYScgaXMgdGhlIG5hbWUgb2YgdGhlIHNoYWRlciBibG9jaywgZS5nLiBkZXRlcm1pbmVzIHdoZXJlIGluIHRoZSBzaGFkZXIgdGhpcyBjb2RlIGlzIGluamVjdGVkXG4gICAgICAgIFNoYWRlclByb2dyYW0ucmVwbGFjZUJsb2NrKCdjYW1lcmEnLCBgXG4gICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uO1xuICAgICAgICAgICAgdW5pZm9ybSB2ZWMzIHVfZXllO1xuICAgICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdmFuaXNoaW5nX3BvaW50O1xuXG4gICAgICAgICAgICB2b2lkIGNhbWVyYVByb2plY3Rpb24gKGlub3V0IHZlYzQgcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHVfcHJvamVjdGlvbiAqIHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uLnh5ICs9IHBvc2l0aW9uLnogKiB1X2lzb21ldHJpY19heGlzO1xuXG4gICAgICAgICAgICAgICAgLy8gUmV2ZXJzZSB6IGZvciBkZXB0aCBidWZmZXIgc28gdXAgaXMgbmVnYXRpdmUsXG4gICAgICAgICAgICAgICAgLy8gYW5kIHNjYWxlIGRvd24gdmFsdWVzIHNvIG9iamVjdHMgaGlnaGVyIHRoYW4gb25lIHNjcmVlbiBoZWlnaHQgd2lsbCBub3QgZ2V0IGNsaXBwZWRcbiAgICAgICAgICAgICAgICAvLyBwdWxsIGZvcndhcmQgc2xpZ2h0bHkgdG8gYXZvaWQgZ29pbmcgcGFzdCBmYXIgY2xpcHBpbmcgcGxhbmVcbiAgICAgICAgICAgICAgICBwb3NpdGlvbi56ID0gLXBvc2l0aW9uLnogLyAxMDAuICsgMS4gLSAwLjAwMTtcbiAgICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlKCkge1xuICAgICAgICBzdXBlci51cGRhdGUoKTtcblxuICAgICAgICB0aGlzLnZpZXdwb3J0X2hlaWdodCA9IHRoaXMudmlldy5zaXplLmNzcy5oZWlnaHQgKiB0aGlzLnZpZXcubWV0ZXJzX3Blcl9waXhlbDtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gW3RoaXMudmlldy5jZW50ZXIubWV0ZXJzLngsIHRoaXMudmlldy5jZW50ZXIubWV0ZXJzLnksIHRoaXMudmlld3BvcnRfaGVpZ2h0XTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbl9tZXRlcnMgPSBwb3NpdGlvbjtcblxuICAgICAgICAvLyBWaWV3XG4gICAgICAgIG1hdDQuaWRlbnRpdHkodGhpcy52aWV3X21hdHJpeCk7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKHRoaXMudmlld19tYXRyaXgsIHRoaXMudmlld19tYXRyaXgsIHZlYzMuZnJvbVZhbHVlcygtcG9zaXRpb25bMF0sIC1wb3NpdGlvblsxXSwgMCkpO1xuXG4gICAgICAgIC8vIFByb2plY3Rpb25cbiAgICAgICAgbWF0NC5pZGVudGl0eSh0aGlzLnByb2plY3Rpb25fbWF0cml4KTtcblxuICAgICAgICAvLyBhcHBseSBpc29tZXRyaWMgc2tld1xuICAgICAgICB0aGlzLnByb2plY3Rpb25fbWF0cml4WzhdID0gdGhpcy5heGlzLnggLyB0aGlzLnZpZXcuYXNwZWN0OyAvLyB6IGNvbHVtbiBvZiB4IHJvdywgZS5nLiBhbW91bnQgeiBza2V3cyB4XG4gICAgICAgIHRoaXMucHJvamVjdGlvbl9tYXRyaXhbOV0gPSB0aGlzLmF4aXMueTsgICAgICAgICAgICAgICAgICAgIC8vIHogY29sdW1uIG9mIHggcm93LCBlLmcuIGFtb3VudCB6IHNrZXdzIHlcblxuICAgICAgICAvLyBjb252ZXJ0IG1ldGVycyB0byB2aWV3cG9ydFxuICAgICAgICBtYXQ0LnNjYWxlKHRoaXMucHJvamVjdGlvbl9tYXRyaXgsIHRoaXMucHJvamVjdGlvbl9tYXRyaXgsXG4gICAgICAgICAgICB2ZWMzLmZyb21WYWx1ZXMoXG4gICAgICAgICAgICAgICAgMiAvIHRoaXMudmlldy5zaXplLm1ldGVycy54LFxuICAgICAgICAgICAgICAgIDIgLyB0aGlzLnZpZXcuc2l6ZS5tZXRlcnMueSxcbiAgICAgICAgICAgICAgICAyIC8gdGhpcy52aWV3LnNpemUubWV0ZXJzLnlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzZXR1cFByb2dyYW0ocHJvZ3JhbSkge1xuICAgICAgICBwcm9ncmFtLnVuaWZvcm0oJ01hdHJpeDRmdicsICd1X3Byb2plY3Rpb24nLCBmYWxzZSwgdGhpcy5wcm9qZWN0aW9uX21hdHJpeCk7XG5cbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCczZicsICd1X2V5ZScsIDAsIDAsIHRoaXMudmlld3BvcnRfaGVpZ2h0KTtcbiAgICAgICAgLy8gcHJvZ3JhbS51bmlmb3JtKCczZicsICd1X2V5ZScsIHRoaXMudmlld3BvcnRfaGVpZ2h0ICogdGhpcy5heGlzLngsIHRoaXMudmlld3BvcnRfaGVpZ2h0ICogdGhpcy5heGlzLnksIHRoaXMudmlld3BvcnRfaGVpZ2h0KTtcbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCcyZicsICd1X3ZhbmlzaGluZ19wb2ludCcsIDAsIDApO1xuICAgIH1cblxufVxuXG4vLyBGbGF0IHByb2plY3Rpb24gKGUuZy4ganVzdCB0b3AtZG93biwgbm8gcGVyc3BlY3RpdmUpIC0gYSBkZWdlbmVyYXRlIGlzb21ldHJpYyBjYW1lcmFcbmNsYXNzIEZsYXRDYW1lcmEgZXh0ZW5kcyBJc29tZXRyaWNDYW1lcmEge1xuXG4gICAgY29uc3RydWN0b3IobmFtZSwgdmlldywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHZpZXcsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZmxhdCc7XG4gICAgfVxuXG4gICAgdXBkYXRlKCkge1xuICAgICAgICAvLyBBeGlzIGlzIGZpeGVkIHRvICgwLCAwKSBmb3IgZmxhdCBjYW1lcmFcbiAgICAgICAgdGhpcy5heGlzLnggPSAwO1xuICAgICAgICB0aGlzLmF4aXMueSA9IDA7XG5cbiAgICAgICAgc3VwZXIudXBkYXRlKCk7XG4gICAgfVxuXG59XG4iLCIvLyBNaXNjZWxsYW5lb3VzIGdlbyBmdW5jdGlvbnNcblxudmFyIEdlbztcbmV4cG9ydCBkZWZhdWx0IEdlbyA9IHt9O1xuXG4vLyBQcm9qZWN0aW9uIGNvbnN0YW50c1xuR2VvLmRlZmF1bHRfc291cmNlX21heF96b29tID0gMTg7XG5HZW8uZGVmYXVsdF92aWV3X21heF96b29tID0gMjA7XG5HZW8udGlsZV9zaXplID0gMjU2O1xuR2VvLmhhbGZfY2lyY3VtZmVyZW5jZV9tZXRlcnMgPSAyMDAzNzUwOC4zNDI3ODkyNDQ7XG5HZW8uY2lyY3VtZmVyZW5jZV9tZXRlcnMgPSBHZW8uaGFsZl9jaXJjdW1mZXJlbmNlX21ldGVycyAqIDI7XG5HZW8ubWluX3pvb21fbWV0ZXJzX3Blcl9waXhlbCA9IEdlby5jaXJjdW1mZXJlbmNlX21ldGVycyAvIEdlby50aWxlX3NpemU7IC8vIG1pbiB6b29tIGRyYXdzIHdvcmxkIGFzIDIgdGlsZXMgd2lkZVxuXG5sZXQgbWV0ZXJzX3Blcl9waXhlbCA9IFtdO1xuR2VvLm1ldGVyc1BlclBpeGVsID0gZnVuY3Rpb24gKHopIHtcbiAgICBtZXRlcnNfcGVyX3BpeGVsW3pdID0gbWV0ZXJzX3Blcl9waXhlbFt6XSB8fCBHZW8ubWluX3pvb21fbWV0ZXJzX3Blcl9waXhlbCAvIE1hdGgucG93KDIsIHopO1xuICAgIHJldHVybiBtZXRlcnNfcGVyX3BpeGVsW3pdO1xufTtcblxubGV0IG1ldGVyc19wZXJfdGlsZSA9IFtdO1xuR2VvLm1ldGVyc1BlclRpbGUgPSBmdW5jdGlvbiAoeikge1xuICAgIG1ldGVyc19wZXJfdGlsZVt6XSA9IG1ldGVyc19wZXJfdGlsZVt6XSB8fCBHZW8uY2lyY3VtZmVyZW5jZV9tZXRlcnMgLyBNYXRoLnBvdygyLCB6KTtcbiAgICByZXR1cm4gbWV0ZXJzX3Blcl90aWxlW3pdO1xufTtcblxuLy8gQ29udmVyc2lvbiBmdW5jdGlvbnMgYmFzZWQgb24gYW4gZGVmaW5lZCB0aWxlIHNjYWxlXG5HZW8udGlsZV9zY2FsZSA9IDQwOTY7IC8vIGNvb3JkaW5hdGVzIGFyZSBsb2NhbGx5IHNjYWxlZCB0byB0aGUgcmFuZ2UgWzAsIHRpbGVfc2NhbGVdXG5HZW8udW5pdHNfcGVyX3BpeGVsID0gR2VvLnRpbGVfc2NhbGUgLyBHZW8udGlsZV9zaXplO1xuXG5sZXQgdW5pdHNfcGVyX21ldGVyID0gW107XG5HZW8udW5pdHNQZXJNZXRlciA9IGZ1bmN0aW9uICh6KSB7XG4gICAgdW5pdHNfcGVyX21ldGVyW3pdID0gdW5pdHNfcGVyX21ldGVyW3pdIHx8IEdlby50aWxlX3NjYWxlIC8gKEdlby50aWxlX3NpemUgKiBHZW8ubWV0ZXJzUGVyUGl4ZWwoeikpO1xuICAgIHJldHVybiB1bml0c19wZXJfbWV0ZXJbel07XG59O1xuXG4vLyBDb252ZXJ0IHRpbGUgbG9jYXRpb24gdG8gbWVyY2F0b3IgbWV0ZXJzIC0gbXVsdGlwbHkgYnkgcGl4ZWxzIHBlciB0aWxlLCB0aGVuIGJ5IG1ldGVycyBwZXIgcGl4ZWwsIGFkanVzdCBmb3IgbWFwIG9yaWdpblxuR2VvLm1ldGVyc0ZvclRpbGUgPSBmdW5jdGlvbiAodGlsZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRpbGUueCAqIEdlby5jaXJjdW1mZXJlbmNlX21ldGVycyAvIE1hdGgucG93KDIsIHRpbGUueikgLSBHZW8uaGFsZl9jaXJjdW1mZXJlbmNlX21ldGVycyxcbiAgICAgICAgeTogLSh0aWxlLnkgKiBHZW8uY2lyY3VtZmVyZW5jZV9tZXRlcnMgLyBNYXRoLnBvdygyLCB0aWxlLnopIC0gR2VvLmhhbGZfY2lyY3VtZmVyZW5jZV9tZXRlcnMpXG4gICAgfTtcbn07XG5cbi8qKlxuICAgR2l2ZW4gYSBwb2ludCBpbiBtZXJjYXRvciBtZXRlcnMgYW5kIGEgem9vbSBsZXZlbCwgcmV0dXJuIHRoZSB0aWxlIFgvWS9aIHRoYXQgdGhlIHBvaW50IGxpZXMgaW5cbiovXG5HZW8udGlsZUZvck1ldGVycyA9IGZ1bmN0aW9uIChbeCwgeV0sIHpvb20pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBNYXRoLmZsb29yKCh4ICsgR2VvLmhhbGZfY2lyY3VtZmVyZW5jZV9tZXRlcnMpIC8gKEdlby5jaXJjdW1mZXJlbmNlX21ldGVycyAvIE1hdGgucG93KDIsIHpvb20pKSksXG4gICAgICAgIHk6IE1hdGguZmxvb3IoKC15ICsgR2VvLmhhbGZfY2lyY3VtZmVyZW5jZV9tZXRlcnMpIC8gKEdlby5jaXJjdW1mZXJlbmNlX21ldGVycyAvIE1hdGgucG93KDIsIHpvb20pKSksXG4gICAgICAgIHo6IHpvb21cbiAgICB9O1xufTtcblxuLy8gV3JhcCBhIHRpbGUgdG8gcG9zaXRpdmUgI3MgZm9yIHpvb21cbi8vIE9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgYXhlcyB0byB3cmFwXG5HZW8ud3JhcFRpbGUgPSBmdW5jdGlvbih7IHgsIHksIHogfSwgbWFzayA9IHsgeDogdHJ1ZSwgeTogZmFsc2UgfSkge1xuICAgIHZhciBtID0gKDEgPDwgeikgLSAxO1xuICAgIGlmIChtYXNrLngpIHtcbiAgICAgICAgeCA9IHggJiBtO1xuICAgIH1cbiAgICBpZiAobWFzay55KSB7XG4gICAgICAgIHkgPSB5ICYgbTtcbiAgICB9XG4gICAgcmV0dXJuIHsgeCwgeSwgeiB9O1xufTtcblxuLyoqXG4gICBDb252ZXJ0IG1lcmNhdG9yIG1ldGVycyB0byBsYXQtbG5nXG4qL1xuR2VvLm1ldGVyc1RvTGF0TG5nID0gZnVuY3Rpb24gKFt4LCB5XSkge1xuXG4gICAgeCAvPSBHZW8uaGFsZl9jaXJjdW1mZXJlbmNlX21ldGVycztcbiAgICB5IC89IEdlby5oYWxmX2NpcmN1bWZlcmVuY2VfbWV0ZXJzO1xuXG4gICAgeSA9ICgyICogTWF0aC5hdGFuKE1hdGguZXhwKHkgKiBNYXRoLlBJKSkgLSAoTWF0aC5QSSAvIDIpKSAvIE1hdGguUEk7XG5cbiAgICB4ICo9IDE4MDtcbiAgICB5ICo9IDE4MDtcblxuICAgIHJldHVybiBbeCwgeV07XG59O1xuXG4vKipcbiAgQ29udmVydCBsYXQtbG5nIHRvIG1lcmNhdG9yIG1ldGVyc1xuKi9cbkdlby5sYXRMbmdUb01ldGVycyA9IGZ1bmN0aW9uKFt4LCB5XSkge1xuXG4gICAgLy8gTGF0aXR1ZGVcbiAgICB5ID0gTWF0aC5sb2coTWF0aC50YW4oeSpNYXRoLlBJLzM2MCArIE1hdGguUEkvNCkpIC8gTWF0aC5QSTtcbiAgICB5ICo9IEdlby5oYWxmX2NpcmN1bWZlcmVuY2VfbWV0ZXJzO1xuXG4gICAgLy8gTG9uZ2l0dWRlXG4gICAgeCAqPSBHZW8uaGFsZl9jaXJjdW1mZXJlbmNlX21ldGVycyAvIDE4MDtcblxuICAgIHJldHVybiBbeCwgeV07XG59O1xuXG5HZW8ud3JhcExuZyA9IGZ1bmN0aW9uKHgpIHtcbiAgICBpZiAoeCA+IDE4MCB8fCB4IDwgLTE4MCkge1xuICAgICAgICB4ID0gKCh4ICsgMTgwKSAlIDM2MCArIDM2MCkgJSAzNjAgLSAxODA7XG4gICAgfVxuICAgIHJldHVybiB4O1xufTtcblxuLy8gUnVuIGFuIGluLXBsYWNlIHRyYW5zZm9ybSBmdW5jdGlvbiBvbiBlYWNoIGNvb29yZGluYXRlIGluIGEgR2VvSlNPTiBnZW9tZXRyeVxuR2VvLnRyYW5zZm9ybUdlb21ldHJ5ID0gZnVuY3Rpb24gKGdlb21ldHJ5LCB0cmFuc2Zvcm0pIHtcbiAgICBpZiAoZ2VvbWV0cnkgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47IC8vIHNraXAgaWYgbWlzc2luZyBnZW9tZXRyeSAodmFsaWQgR2VvSlNPTilcbiAgICB9XG5cbiAgICBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gJ1BvaW50Jykge1xuICAgICAgICB0cmFuc2Zvcm0oZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSAnTGluZVN0cmluZycgfHwgZ2VvbWV0cnkudHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XG4gICAgICAgIGdlb21ldHJ5LmNvb3JkaW5hdGVzLmZvckVhY2godHJhbnNmb3JtKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gJ1BvbHlnb24nIHx8IGdlb21ldHJ5LnR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSB7XG4gICAgICAgIGdlb21ldHJ5LmNvb3JkaW5hdGVzLmZvckVhY2goY29vcmRpbmF0ZXMgPT4gY29vcmRpbmF0ZXMuZm9yRWFjaCh0cmFuc2Zvcm0pKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgZ2VvbWV0cnkuY29vcmRpbmF0ZXMuZm9yRWFjaChwb2x5Z29uID0+IHtcbiAgICAgICAgICAgIHBvbHlnb24uZm9yRWFjaChjb29yZGluYXRlcyA9PiBjb29yZGluYXRlcy5mb3JFYWNoKHRyYW5zZm9ybSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gVE9ETzogc3VwcG9ydCBHZW9tZXRyeUNvbGxlY3Rpb25cbn07XG5cbkdlby5ib3hJbnRlcnNlY3QgPSBmdW5jdGlvbiAoYjEsIGIyKSB7XG4gICAgcmV0dXJuICEoXG4gICAgICAgIGIyLnN3LnggPiBiMS5uZS54IHx8XG4gICAgICAgIGIyLm5lLnggPCBiMS5zdy54IHx8XG4gICAgICAgIGIyLnN3LnkgPiBiMS5uZS55IHx8XG4gICAgICAgIGIyLm5lLnkgPCBiMS5zdy55XG4gICAgKTtcbn07XG5cbi8vIEZpbmRzIHRoZSBheGlzLWFsaWduZWQgYm91bmRpbmcgYm94IGZvciBhIHBvbHlnb25cbkdlby5maW5kQm91bmRpbmdCb3ggPSBmdW5jdGlvbiAocG9seWdvbikge1xuICAgIHZhciBtaW5feCA9IEluZmluaXR5LFxuICAgICAgICBtYXhfeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbWluX3kgPSBJbmZpbml0eSxcbiAgICAgICAgbWF4X3kgPSAtSW5maW5pdHk7XG5cbiAgICAvLyBPbmx5IG5lZWQgdG8gZXhhbWluZSBvdXRlciByaW5nIChwb2x5Z29uWzBdKVxuICAgIHZhciBudW1fY29vcmRzID0gcG9seWdvblswXS5sZW5ndGg7XG4gICAgZm9yICh2YXIgYz0wOyBjIDwgbnVtX2Nvb3JkczsgYysrKSB7XG4gICAgICAgIHZhciBjb29yZCA9IHBvbHlnb25bMF1bY107XG5cbiAgICAgICAgaWYgKGNvb3JkWzBdIDwgbWluX3gpIHtcbiAgICAgICAgICAgIG1pbl94ID0gY29vcmRbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvb3JkWzFdIDwgbWluX3kpIHtcbiAgICAgICAgICAgIG1pbl95ID0gY29vcmRbMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvb3JkWzBdID4gbWF4X3gpIHtcbiAgICAgICAgICAgIG1heF94ID0gY29vcmRbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvb3JkWzFdID4gbWF4X3kpIHtcbiAgICAgICAgICAgIG1heF95ID0gY29vcmRbMV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW21pbl94LCBtaW5feSwgbWF4X3gsIG1heF95XTtcbn07XG5cbi8vIENvbnZlcnQgZ2VvbWV0cnkgdHlwZSB0byBvbmUgb2Y6ICdwb2ludCcsICdsaW5lJywgJ3BvbHlnb24nXG5HZW8uZ2VvbWV0cnlUeXBlID0gZnVuY3Rpb24odHlwZSkge1xuICAgIGlmICh0eXBlID09PSAnUG9seWdvbicgfHwgdHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgcmV0dXJuICdwb2x5Z29uJztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnIHx8IHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiAnbGluZSc7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50Jykge1xuICAgICAgICByZXR1cm4gJ3BvaW50JztcbiAgICB9XG59O1xuXG5HZW8uY2VudHJvaWQgPSBmdW5jdGlvbiAocG9seWdvbikge1xuICAgIGxldCBuID0gcG9seWdvbi5sZW5ndGg7XG4gICAgbGV0IGNlbnRyb2lkID0gWzAsIDBdO1xuXG4gICAgZm9yIChsZXQgcD0wOyBwIDwgcG9seWdvbi5sZW5ndGg7IHArKykge1xuICAgICAgICBjZW50cm9pZFswXSArPSBwb2x5Z29uW3BdWzBdO1xuICAgICAgICBjZW50cm9pZFsxXSArPSBwb2x5Z29uW3BdWzFdO1xuICAgIH1cblxuICAgIGNlbnRyb2lkWzBdIC89IG47XG4gICAgY2VudHJvaWRbMV0gLz0gbjtcblxuICAgIHJldHVybiBjZW50cm9pZDtcbn07XG5cbkdlby5tdWx0aUNlbnRyb2lkID0gZnVuY3Rpb24gKHBvbHlnb25zKSB7XG4gICAgbGV0IG4gPSBwb2x5Z29ucy5sZW5ndGg7XG4gICAgbGV0IGNlbnRyb2lkID0gWzAsIDBdO1xuXG4gICAgZm9yIChsZXQgcD0wOyBwIDwgcG9seWdvbnMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgbGV0IHBvbHlnb24gPSBwb2x5Z29uc1twXVswXTtcbiAgICAgICAgbGV0IGMgPSBHZW8uY2VudHJvaWQocG9seWdvbik7XG4gICAgICAgIGNlbnRyb2lkWzBdICs9IGNbMF07XG4gICAgICAgIGNlbnRyb2lkWzFdICs9IGNbMV07XG4gICAgfVxuXG4gICAgY2VudHJvaWRbMF0gLz0gbjtcbiAgICBjZW50cm9pZFsxXSAvPSBuO1xuXG4gICAgcmV0dXJuIGNlbnRyb2lkO1xufTtcblxuR2VvLnNpZ25lZFBvbHlnb25BcmVhU3VtID0gZnVuY3Rpb24gKHBvbHlnb24pIHtcbiAgICBsZXQgYXJlYSA9IDA7XG4gICAgbGV0IG4gPSBwb2x5Z29uLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykge1xuICAgICAgICBsZXQgcDAgPSBwb2x5Z29uW2ldO1xuICAgICAgICBsZXQgcDEgPSBwb2x5Z29uW2krMV07XG5cbiAgICAgICAgYXJlYSArPSBwMFswXSAqIHAxWzFdIC0gcDFbMF0gKiBwMFsxXTtcbiAgICB9XG5cbiAgICBhcmVhICs9IHBvbHlnb25bbiAtIDFdWzBdICogcG9seWdvblswXVsxXSAtIHBvbHlnb25bMF1bMF0gKiBwb2x5Z29uW24gLSAxXVsxXTtcbiAgICByZXR1cm4gYXJlYTtcbn07XG5cbi8vIFRPRE86IHN1YnRyYWN0IGlubmVyIHJpbmcgYXJlYXNcbkdlby5wb2x5Z29uQXJlYSA9IGZ1bmN0aW9uIChwb2x5Z29uKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKEdlby5zaWduZWRQb2x5Z29uQXJlYVN1bShwb2x5Z29uKSkgLyAyO1xufTtcblxuR2VvLm11bHRpUG9seWdvbkFyZWEgPSBmdW5jdGlvbiAocG9seWdvbnMpIHtcbiAgICBsZXQgYXJlYSA9IDA7XG5cbiAgICBmb3IgKGxldCBwPTA7IHAgPCBwb2x5Z29ucy5sZW5ndGg7IHArKykge1xuICAgICAgICBsZXQgcG9seWdvbiA9IHBvbHlnb25zW3BdWzBdO1xuICAgICAgICBhcmVhICs9IEdlby5wb2x5Z29uQXJlYShwb2x5Z29uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJlYTtcbn07XG5cbkdlby5yaW5nV2luZGluZyA9IGZ1bmN0aW9uIChyaW5nKSB7XG4gICAgbGV0IGFyZWEgPSBHZW8uc2lnbmVkUG9seWdvbkFyZWFTdW0ocmluZyk7XG4gICAgaWYgKGFyZWEgPiAwKSB7XG4gICAgICAgIHJldHVybiAnQ1cnO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmVhIDwgMCkge1xuICAgICAgICByZXR1cm4gJ0NDVyc7XG4gICAgfVxuICAgIC8vIHJldHVybiB1bmRlZmluZWQgb24gemVybyBhcmVhIHBvbHlnb25cbn07XG5cbi8vIEVuZm9yY2Ugd2luZGluZyBvcmRlciBvbiBvdXRlci9pbm5lciByaW5nc1xuLy8gd2luZGluZzogJ0NXJyBvciAnQ0NXJ1xuR2VvLmVuZm9yY2VXaW5kaW5nID0gZnVuY3Rpb24gKGdlb20sIHdpbmRpbmcpIHtcbiAgICBsZXQgcG9seXM7XG4gICAgaWYgKGdlb20udHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIHBvbHlzID0gW2dlb20uY29vcmRpbmF0ZXNdO1xuICAgIH1cbiAgICBlbHNlIGlmIChnZW9tLnR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgIHBvbHlzID0gZ2VvbS5jb29yZGluYXRlcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBnZW9tO1xuICAgIH1cblxuICAgIGZvciAobGV0IHA9MDsgcCA8IHBvbHlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgIGxldCBwb2x5ID0gcG9seXNbcF07XG5cbiAgICAgICAgLy8gSWYgZmlyc3QgcmluZyB3aW5kaW5nIGRvZXNuJ3QgbWF0Y2gsIHJldmVyc2UgYWxsIHJpbmdzXG4gICAgICAgIC8vIE5PVEU6IGFzc3VtZXMgcmluZyB3aW5kaW5nIG9yZGVycyBhbHJlYWR5IGFsdGVybmF0ZSBhcyBleHBlY3RlZFxuICAgICAgICBpZiAoR2VvLnJpbmdXaW5kaW5nKHBvbHlbMF0pICE9PSB3aW5kaW5nKSB7XG4gICAgICAgICAgICBmb3IgKGxldCByaW5nIG9mIHBvbHkpIHtcbiAgICAgICAgICAgICAgICByaW5nLnJldmVyc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2VvbTtcbn07XG4iLCIvLyBXZWJHTCBjb25zdGFudHMgLSBuZWVkIHRvIGltcG9ydCB0aGVzZSBzZXBhcmF0ZWx5IHRvIG1ha2UgdGhlbSBhdmFpbGFibGUgaW4gdGhlIHdlYiB3b3JrZXJcblxudmFyIGdsO1xuZXhwb3J0IGRlZmF1bHQgZ2wgPSB7fTtcblxuLyogRGF0YVR5cGUgKi9cbmdsLkJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwMDtcbmdsLlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA9IDB4MTQwMTtcbmdsLlNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwMjtcbmdsLlVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA9IDB4MTQwMztcbmdsLklOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwNDtcbmdsLlVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICA9IDB4MTQwNTtcbmdsLkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwNjtcbiIsIi8vIFdlYkdMIGNvbnRleHQgd3JhcHBlclxuXG52YXIgQ29udGV4dDtcbmV4cG9ydCBkZWZhdWx0IENvbnRleHQgPSB7fTtcblxuLy8gU2V0dXAgYSBXZWJHTCBjb250ZXh0XG4vLyBJZiBubyBjYW52YXMgZWxlbWVudCBpcyBwcm92aWRlZCwgb25lIGlzIGNyZWF0ZWQgYW5kIGFkZGVkIHRvIHRoZSBkb2N1bWVudCBib2R5XG5Db250ZXh0LmdldENvbnRleHQgPSBmdW5jdGlvbiBnZXRDb250ZXh0IChjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgdmFyIGZ1bGxzY3JlZW4gPSBmYWxzZTtcbiAgICBpZiAoY2FudmFzID09IG51bGwpIHtcbiAgICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgIGNhbnZhcy5zdHlsZS50b3AgPSAwO1xuICAgICAgICBjYW52YXMuc3R5bGUubGVmdCA9IDA7XG4gICAgICAgIGNhbnZhcy5zdHlsZS56SW5kZXggPSAtMTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjYW52YXMpO1xuICAgICAgICBmdWxsc2NyZWVuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG4gICAgaWYgKCFnbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBjcmVhdGUgV2ViR0wgY29udGV4dC5cIik7XG4gICAgfVxuXG4gICAgaWYgKCFmdWxsc2NyZWVuKSB7XG4gICAgICAgIENvbnRleHQucmVzaXplKGdsLCBwYXJzZUZsb2F0KGNhbnZhcy5zdHlsZS53aWR0aCksIHBhcnNlRmxvYXQoY2FudmFzLnN0eWxlLmhlaWdodCksIG9wdGlvbnMuZGV2aWNlX3BpeGVsX3JhdGlvKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIENvbnRleHQucmVzaXplKGdsLCB3aW5kb3cuaW5uZXJXaWR0aCwgd2luZG93LmlubmVySGVpZ2h0LCBvcHRpb25zLmRldmljZV9waXhlbF9yYXRpbyk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBDb250ZXh0LnJlc2l6ZShnbCwgd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodCwgb3B0aW9ucy5kZXZpY2VfcGl4ZWxfcmF0aW8pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2w7XG59O1xuXG5Db250ZXh0LnJlc2l6ZSA9IGZ1bmN0aW9uIChnbCwgd2lkdGgsIGhlaWdodCwgZGV2aWNlX3BpeGVsX3JhdGlvKVxue1xuICAgIGRldmljZV9waXhlbF9yYXRpbyA9IGRldmljZV9waXhlbF9yYXRpbyB8fCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICAgIGdsLmNhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICBnbC5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcbiAgICBnbC5jYW52YXMud2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoICogZGV2aWNlX3BpeGVsX3JhdGlvKTtcbiAgICBnbC5jYW52YXMuaGVpZ2h0ID0gTWF0aC5yb3VuZChoZWlnaHQgKiBkZXZpY2VfcGl4ZWxfcmF0aW8pO1xuICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG4gICAgZ2wudmlld3BvcnQoMCwgMCwgZ2wuY2FudmFzLndpZHRoLCBnbC5jYW52YXMuaGVpZ2h0KTtcbn07XG4iLCIvLyBXZWJHTCBleHRlbnNpb24gd3JhcHBlclxuLy8gU3RvcmVzIGV4dGVuc2lvbnMgYnkgbmFtZSBhbmQgR0wgY29udGV4dFxuXG5sZXQgZXh0ZW5zaW9ucyA9IG5ldyBNYXAoKTsgLy8gbWFwIG9mIGV4dGVuc2lvbnMgYnkgR0wgY29udGV4dFxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRFeHRlbnNpb24gKGdsLCBuYW1lKSB7XG4gICAgbGV0IGV4dHMgPSBleHRlbnNpb25zLmdldChnbCk7XG4gICAgaWYgKCFleHRzKSB7XG4gICAgICAgIGV4dGVuc2lvbnMuc2V0KGdsLCBuZXcgTWFwKCkpO1xuICAgICAgICBleHRzID0gZXh0ZW5zaW9ucy5nZXQoZ2wpO1xuICAgIH1cblxuICAgIGlmICghZXh0cy5nZXQobmFtZSkpIHtcbiAgICAgICAgZXh0cy5zZXQobmFtZSwgZ2wuZ2V0RXh0ZW5zaW9uKG5hbWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dHMuZ2V0KG5hbWUpO1xufVxuIiwidmFyIEdMU0wgPSB7fTtcbmV4cG9ydCBkZWZhdWx0IEdMU0w7XG5cbi8qKlxuICAgIFBhcnNlIHVuaWZvcm1zIGZyb20gYSBKUyBvYmplY3QsIGluZmVycyB0eXBlcyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdGhlXG4gICAgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIHNldCB1bmlmb3JtIHZhbHVlcyBvbiBhIEdMIHByb2dyYW0uIEVhY2ggb2JqZWN0IGluIHRoZSByZXR1cm5lZFxuICAgIGFycmF5IGhhcyB0aGUgZm9ybTpcbiAgICB7IHR5cGUsIG1ldGhvZCwgbmFtZSwgdmFsdWUgfVxuXG4gICAgdHlwZTogdGhlIEdMIHVuaWZvcm0gdHlwZSwgc3VjaCBhcyAndmVjMycsICdmbG9hdCcsIGV0Yy5cbiAgICBtZXRob2Q6IHRoZSBHTCB1bmlmb3JtIHNldHRlciBtZXRob2QgdG8gdXNlLCBzdWNoIGFzICcxZicsICczZnYnLCBldGMuXG4gICAgbmFtZTogdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBHTCB1bmlmb3JtIGxvY2F0aW9uLCBlLmcuICdhcnJheVswXS5maWVsZCcsIGV0Yy5cbiAgICB2YWx1ZTogdGhlIHZhbHVlIHRvIGJlIHBhc3NlZCB0byB0aGUgR0wgdW5pZm9ybSBzZXR0ZXIgZm9yIHRoYXQgdHlwZSwgZS5nLiBbMSwgMiwgM10gZm9yIGEgdmVjM1xuXG4gICAgVGV4dHVyZXMgaGF2ZSBzcGVjaWFsIGJlaGF2aW9yOiB1bmlmb3JtcyB3aXRoIHN0cmluZyB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgdGV4dHVyZXMsIGFuZFxuICAgIHRoZSBzdHJpbmcgaXMgdXNlZCBhcyBhIHVuaXF1ZSB0ZXh0dXJlICdrZXknIHRvIGJlIGludGVycHJldGVkIGJ5IHRoZSBjYWxsZXIgKHdoaWNoIGlzIHJlc3BvbnNpYmxlXG4gICAgZm9yIGFjdHVhbGx5IHNldHRpbmcgdGhlIHVuaWZvcm1zKS4gRm9yIGV4YW1wbGUsIHRoaXMgY291bGQgYmUgdXNlZCBhcyBhIGtleSBpbnRvIGEgZGljdGlvbmFyeSBvZlxuICAgIGtub3duIHRleHR1cmUgbmFtZXMsIG9yIGl0IGNvdWxkIHNpbXBseSBiZSB1c2VkIGFzIGEgVVJMIHRvIGR5bmFtaWNhbGx5IGxvYWQgdGhlIHRleHR1cmUgZnJvbS5cbiovXG5HTFNMLnBhcnNlVW5pZm9ybXMgPSBmdW5jdGlvbiAodW5pZm9ybXMsIHByZWZpeCA9IG51bGwpIHtcbiAgICB2YXIgcGFyc2VkID0gW107XG5cbiAgICBmb3IgKHZhciBuYW1lIGluIHVuaWZvcm1zKSB7XG4gICAgICAgIHZhciBrZXkgPSBuYW1lOyAvLyBzYXZlIHRoZSBvcmlnaW5hbCBuYW1lXG4gICAgICAgIHZhciB1bmlmb3JtID0gdW5pZm9ybXNbbmFtZV07XG4gICAgICAgIHZhciB1O1xuXG4gICAgICAgIGlmIChwcmVmaXgpIHtcbiAgICAgICAgICAgIG5hbWUgPSBwcmVmaXggKyAnLicgKyBuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2luZ2xlIGZsb2F0XG4gICAgICAgIGlmICh0eXBlb2YgdW5pZm9ybSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHBhcnNlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZmxvYXQnLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJzFmJyxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB1bmlmb3JtLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB1bmlmb3Jtc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXJyYXk6IHZlY3RvciwgYXJyYXkgb2YgZmxvYXRzLCBhcnJheSBvZiB0ZXh0dXJlcywgb3IgYXJyYXkgb2Ygc3RydWN0c1xuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVuaWZvcm0pKSB7XG4gICAgICAgICAgICAvLyBOdW1lcmljIHZhbHVlc1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB1bmlmb3JtWzBdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIC8vIGZsb2F0IHZlY3RvcnMgKHZlYzIsIHZlYzMsIHZlYzQpXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm0ubGVuZ3RoID49IDIgJiYgdW5pZm9ybS5sZW5ndGggPD0gNCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndmVjJyArIHVuaWZvcm0ubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiB1bmlmb3JtLmxlbmd0aCArICdmdicsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZmxvYXQgYXJyYXlcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh1bmlmb3JtLmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Zsb2F0W10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnMWZ2JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUgKyAnWzBdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFRPRE86IGFzc3VtZSBtYXRyaXggZm9yICh0eXBlb2YgPT0gRmxvYXQzMkFycmF5ICYmIGxlbmd0aCA9PSAxNik/XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBcnJheSBvZiB0ZXh0dXJlc1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHVuaWZvcm1bMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZm9yICh1PTA7IHUgPCB1bmlmb3JtLmxlbmd0aDsgdSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzYW1wbGVyMkQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnMWknLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSArICdbJyArIHUgKyAnXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5pZm9ybVt1XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zOiB1bmlmb3JtXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFycmF5IG9mIGFycmF5cyAtIGJ1dCBvbmx5IGFycmF5cyBvZiB2ZWN0b3JzIGFyZSBhbGxvd2VkIGluIHRoaXMgY2FzZVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh1bmlmb3JtWzBdKSAmJiB0eXBlb2YgdW5pZm9ybVswXVswXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAvLyBmbG9hdCB2ZWN0b3JzICh2ZWMyLCB2ZWMzLCB2ZWM0KVxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtWzBdLmxlbmd0aCA+PSAyICYmIHVuaWZvcm1bMF0ubGVuZ3RoIDw9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHU9MDsgdSA8IHVuaWZvcm0ubGVuZ3RoOyB1KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndmVjJyArIHVuaWZvcm1bMF0ubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogdW5pZm9ybVt1XS5sZW5ndGggKyAnZnYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUgKyAnWycgKyB1ICsgJ10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmlmb3JtW3VdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtczogdW5pZm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZWxzZSBlcnJvcj9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFycmF5IG9mIHN0cnVjdHVyZXNcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB1bmlmb3JtWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGZvciAodT0wOyB1IDwgdW5pZm9ybS5sZW5ndGg7IHUrKykge1xuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgZWFjaCBzdHJ1Y3QgaW4gdGhlIGFycmF5XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZC5wdXNoKC4uLkdMU0wucGFyc2VVbmlmb3Jtcyh1bmlmb3JtW3VdLCBuYW1lICsgJ1snICsgdSArICddJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBCb29sZWFuXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB1bmlmb3JtID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHBhcnNlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCcsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnMWknLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHVuaWZvcm0sXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHVuaWZvcm1zXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUZXh0dXJlXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB1bmlmb3JtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcGFyc2VkLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzYW1wbGVyMkQnLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJzFpJyxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB1bmlmb3JtLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB1bmlmb3Jtc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RydWN0dXJlXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB1bmlmb3JtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgLy8gU2V0IGVhY2ggZmllbGQgaW4gdGhlIHN0cnVjdFxuICAgICAgICAgICAgcGFyc2VkLnB1c2goLi4uR0xTTC5wYXJzZVVuaWZvcm1zKHVuaWZvcm0sIG5hbWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IHN1cHBvcnQgb3RoZXIgbm9uLWZsb2F0IHR5cGVzPyAoaW50LCBldGMuKVxuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG59O1xuXG4vKipcbiAgICBHZW5lcmF0ZSBhIEdMU0wgdmFyaWFibGUgZGVmaW5pdGlvbiBmcm9tIGEgSlMgb2JqZWN0XG4qL1xuR0xTTC5kZWZpbmVWYXJpYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgcHJlZml4ID0gbnVsbCkge1xuICAgIHZhciB0eXBlLCBhcnJheTtcbiAgICB2YXIgc3RydWN0cyA9ICcnO1xuICAgIHByZWZpeCA9IHByZWZpeCA/IHByZWZpeCArICdfJyArIG5hbWUgOiBuYW1lO1xuXG4gICAgLy8gU2luZ2xlIGZsb2F0XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdHlwZSA9ICdmbG9hdCc7XG4gICAgfVxuICAgIC8vIE11bHRpcGxlIGZsb2F0cyAtIHZlY3RvciBvciBhcnJheVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIC8vIE51bWVyaWMgdmFsdWVzXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWVbMF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAvLyBmbG9hdCB2ZWN0b3JzICh2ZWMyLCB2ZWMzLCB2ZWM0KVxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+PSAyICYmIHZhbHVlLmxlbmd0aCA8PSA0KSB7XG4gICAgICAgICAgICAgICAgdHlwZSA9ICd2ZWMnICsgdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZmxvYXQgYXJyYXlcbiAgICAgICAgICAgIGVsc2UgeyAvL2lmICh2YWx1ZS5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAgICAgdHlwZSA9ICdmbG9hdCc7XG4gICAgICAgICAgICAgICAgYXJyYXkgPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUT0RPOiBhc3N1bWUgbWF0cml4IGZvciAodHlwZW9mID09IEZsb2F0MzJBcnJheSAmJiBsZW5ndGggPT0gMTYpP1xuICAgICAgICB9XG4gICAgICAgIC8vIEFycmF5IG9mIHRleHR1cmVzXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnc2FtcGxlcjJEJztcbiAgICAgICAgICAgIGFycmF5ID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFycmF5IG9mIGFycmF5cyAtIGJ1dCBvbmx5IGFycmF5cyBvZiB2ZWN0b3JzIGFyZSBhbGxvd2VkIGluIHRoaXMgY2FzZVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlWzBdKSAmJiB0eXBlb2YgdmFsdWVbMF1bMF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAvLyBmbG9hdCB2ZWN0b3JzICh2ZWMyLCB2ZWMzLCB2ZWM0KVxuICAgICAgICAgICAgaWYgKHZhbHVlWzBdLmxlbmd0aCA+PSAyICYmIHZhbHVlWzBdLmxlbmd0aCA8PSA0KSB7XG4gICAgICAgICAgICAgICAgdHlwZSA9ICd2ZWMnICsgdmFsdWVbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZWxzZSBlcnJvcj9cbiAgICAgICAgICAgIGFycmF5ID0gdmFsdWVbMF0ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFycmF5IG9mIHN0cnVjdHVyZXNcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdHlwZSA9ICdfdHlwZV8nICsgcHJlZml4OyAvLyBjdXN0b20gc3RydWN0IG5hbWVcbiAgICAgICAgICAgIGFycmF5ID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgc3RydWN0cyArPSBHTFNMLmRlZmluZVN0cnVjdCh0eXBlLCB2YWx1ZVswXSwgcHJlZml4KSArICdcXG4nOyAvLyBidWlsZCAmIGFkZCB0byBsaXN0IG9mIGRlcGVuZGVudCBzdHJ1Y3RzXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQm9vbGVhblxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHR5cGUgPSAnYm9vbCc7XG4gICAgfVxuICAgIC8vIFRleHR1cmVcbiAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHR5cGUgPSAnc2FtcGxlcjJEJztcbiAgICB9XG4gICAgLy8gU3RydWN0dXJlXG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0eXBlID0gJ190eXBlXycgKyBwcmVmaXg7IC8vIGN1c3RvbSBzdHJ1Y3QgbmFtZVxuICAgICAgICBzdHJ1Y3RzICs9IEdMU0wuZGVmaW5lU3RydWN0KHR5cGUsIHZhbHVlLCBwcmVmaXgpICsgJ1xcbic7IC8vIGJ1aWxkICYgYWRkIHRvIGxpc3Qgb2YgZGVwZW5kZW50IHN0cnVjdHNcbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3QgdmFyaWFibGUgZGVmaW5pdGlvblxuICAgIHZhciB2YXJpYWJsZSA9ICcnO1xuICAgIHZhcmlhYmxlICs9IGAke3R5cGV9ICR7bmFtZX1gO1xuICAgIGlmIChhcnJheSkge1xuICAgICAgICB2YXJpYWJsZSArPSBgWyR7YXJyYXl9XWA7XG4gICAgfVxuICAgIHZhcmlhYmxlICs9ICc7XFxuJztcblxuICAgIC8vIFJldHVybiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbiBpdHNlbGYsIGFuZCBhbnkgZGVwZW5kZW50IHN0cnVjdCBkZWZpbml0aW9uc1xuICAgIHJldHVybiB7IHZhcmlhYmxlLCBzdHJ1Y3RzIH07XG59O1xuXG4vKipcbiAgICBHZW5lcmF0ZSBhIEdMU0wgc3RydWN0dXJlIGRlZmluaXRpb24gZnJvbSBhIEpTIG9iamVjdFxuKi9cbkdMU0wuZGVmaW5lU3RydWN0ID0gZnVuY3Rpb24gKHR5cGUsIHZhbHVlLCBwcmVmaXggPSBudWxsKSB7XG4gICAgdmFyIHN0cnVjdCA9IGBzdHJ1Y3QgJHt0eXBlfSB7XFxuYDtcbiAgICB2YXIgZGVwZW5kZW50cyA9ICcnO1xuICAgIGZvciAodmFyIGZpZWxkIGluIHZhbHVlKSB7XG4gICAgICAgIHZhciBzdWJ2YXIgPSBHTFNMLmRlZmluZVZhcmlhYmxlKGZpZWxkLCB2YWx1ZVtmaWVsZF0sIHByZWZpeCk7XG4gICAgICAgIHN0cnVjdCArPSAnICAgICcgKyBzdWJ2YXIudmFyaWFibGU7XG4gICAgICAgIGRlcGVuZGVudHMgKz0gc3VidmFyLnN0cnVjdHM7XG4gICAgfVxuICAgIHN0cnVjdCArPSAnfTtcXG4nO1xuICAgIHN0cnVjdCA9IGRlcGVuZGVudHMgKyBzdHJ1Y3Q7XG4gICAgcmV0dXJuIHN0cnVjdDtcbn07XG5cbi8qKlxuICAgIEdlbmVyYXRlIGEgR0xTTCB1bmlmb3JtIGRlZmluaXRpb24gZnJvbSBhIEpTIG9iamVjdFxuKi9cbkdMU0wuZGVmaW5lVW5pZm9ybSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBkZWYgPSBHTFNMLmRlZmluZVZhcmlhYmxlKG5hbWUsIHZhbHVlKTtcbiAgICBkZWYgPSBkZWYuc3RydWN0cyArICd1bmlmb3JtICcgKyBkZWYudmFyaWFibGU7XG4gICAgcmV0dXJuIGRlZjtcbn07XG5cbi8qKlxuICAgIENoZWNrIGZvciBhIHVuaWZvcm0gZGVmaW5pdGlvbiBvZiAnbmFtZScgaW4gdGhlIHByb3ZpZGVkIEdMU0wgc291cmNlXG4gICAgU2ltcGxlIHJlZ2V4IGNoZWNrIGZvciAndW5pZm9ybScga2V5d29yZCBhbmQgdmFyIG5hbWUsIGRvZXMgbm90IGF0dGVtcHQgdG8gcGFyc2UvZXh0cmFjdCBHTFNMXG4gICAgTk9URTogYXNzdW1lcyBjb21tZW50cyBoYXZlIGJlZW4gc3RyaXBwZWQgZnJvbSBzb3VyY2VcbiovXG5HTFNMLmlzVW5pZm9ybURlZmluZWQgPSBmdW5jdGlvbiAobmFtZSwgc291cmNlKSB7XG4gICAgLy8gTWF0Y2gsIGluIG9yZGVyOlxuICAgIC8vIC0gdGhlIGtleXdvcmQgJ3VuaWZvcm0nXG4gICAgLy8gLSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIHRoYXQgaXMgYW55dGhpbmcgZXhjZXB0IGEgc2VtaWNvbG9uLCA7XG4gICAgLy8gLSBvcHRpb25hbGx5LCBhbnl0aGluZyBlbmNsb3NlZCBpbiBjdXJseSBicmFjZXMsIHsgLi4uIH0gKGFuIGlubGluZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBjYW4gZ28gaGVyZSlcbiAgICAvLyAtIG9wdGlvbmFsbHksIGFueSAjIG9mIGNoYXJhY3RlcnMgdGhhdCBpcyBub3QgYSBzZW1pY29sb24sIDtcbiAgICAvLyAtIHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtXG5cbiAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKCd1bmlmb3JtW147XSsoPzp7W1xcXFxzXFxcXFNdKn0pP1teO10qXFxcXGInICsgbmFtZSArICdcXFxcYicsICdnJyk7XG4gICAgaWYgKHNvdXJjZS5tYXRjaChyZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICAgIENoZWNrIHRoYXQgYSBzeW1ib2wgaXMgcmVmZXJlbmNlZCBpbiB0aGUgR0xTTCBzb3VyY2VcbiAgICBOT1RFOiBhc3N1bWVzIGNvbW1lbnRzIGhhdmUgYmVlbiBzdHJpcHBlZCBmcm9tIHNvdXJjZVxuKi9cbkdMU0wuaXNTeW1ib2xSZWZlcmVuY2VkID0gZnVuY3Rpb24gKG5hbWUsIHNvdXJjZSkge1xuICAgIHZhciByZSA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArIG5hbWUgKyAnXFxcXGInLCAnZycpO1xuICAgIGlmIChzb3VyY2Uuc2VhcmNoKHJlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAgICBFeHBhbmQgYSBzaW5nbGUgdmFsdWUgb3IgMi1lbGVtZW50IGFycmF5IGludG8gYSAzLWVsZW1lbnQgYXJyYXksIHdpdGggdGhlIGxhc3QgKCB6IClcbiAgICBjb29yZGluYXRlIGRlZmF1bHRpbmcgdG8gMSAod2l0aCBvcHRpb24gdG8gc3BlY2lmeSkuIEFsc28gcnVucyBwYXJzZUZsb2F0IHRvIHRyeSB0byBtYWludGFpblxuICAgIGRhdGEgaW50ZWdyaXR5LiBSZXR1cm5zIG51bGwgaWYgaW5wdXQgY291bGRuJ3QgYmUgcGFyc2VkLlxuKi9cbkdMU0wuZXhwYW5kVmVjMyA9IGZ1bmN0aW9uICh2LCB6ID0gMSkge1xuICAgIGxldCB4O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHYpICYmIHYubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHggPSBbLi4udiwgel0ubWFwKHBhcnNlRmxvYXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeCA9IFt2LCB2LCB2XS5tYXAocGFyc2VGbG9hdCk7XG4gICAgfVxuXG4gICAgaWYgKHggJiYgeC5ldmVyeShuID0+IHR5cGVvZiBuID09PSAnbnVtYmVyJyAmJiAhaXNOYU4obikpKSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbn07XG5cbi8qKlxuICAgIEV4cGFuZCBhIHNpbmdsZSB2YWx1ZSBvciAzLWVsZW1lbnQgYXJyYXkgaW50byBhIDQtZWxlbWVudCBhcnJheSwgd2l0aCB0aGUgbGFzdCAoZS5nLiB3IG9yIGEpXG4gICAgY29vcmRpbmF0ZSBkZWZhdWx0aW5nIHRvIDEgKHdpdGggb3B0aW9uIHRvIHNwZWNpZnkpLiBBbHNvIHJ1bnMgcGFyc2VGbG9hdCB0byB0cnkgdG8gbWFpbnRhaW5cbiAgICBkYXRhIGludGVncml0eS4gUmV0dXJucyBudWxsIGlmIGlucHV0IGNvdWxkbid0IGJlIHBhcnNlZC5cbiovXG5HTFNMLmV4cGFuZFZlYzQgPSBmdW5jdGlvbiAodiwgdyA9IDEpIHtcbiAgICBsZXQgeDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICB4ID0gWy4uLnYsIHddLm1hcChwYXJzZUZsb2F0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHggPSBbdiwgdiwgdiwgd10ubWFwKHBhcnNlRmxvYXQpO1xuICAgIH1cblxuICAgIGlmICh4ICYmIHguZXZlcnkobiA9PiB0eXBlb2YgbiA9PT0gJ251bWJlcicgJiYgIWlzTmFOKG4pKSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG59O1xuXG5cbiIsIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVuZGVyU3RhdGUge1xuXHRjb25zdHJ1Y3RvciAodmFsdWUsIHNldHVwKSB7XG4gICAgICAgIHNldHVwKHZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldHVwID0gc2V0dXA7XG4gICAgfVxuXG4gICAgc2V0ICh2YWx1ZSkge1xuICAgIFx0Ly8gaWYgdGhlIHN0YXRlcyBhcmUgZGlmZmVyZW50LCBjYWxsIHRoZSBHTCBjb250ZXh0IGZvciBhIHN0YXRlIGNoYW5nZVxuICAgIFx0aWYgKEpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpIHtcbiAgICBcdFx0dGhpcy5zZXR1cCh2YWx1ZSk7XG4gICAgXHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICBcdH1cbiAgICB9XG5cbiAgICBzdGF0aWMgaW5pdGlhbGl6ZSAoZ2wpIHtcbiAgICAgICAgUmVuZGVyU3RhdGUuZGVmYXVsdHMgPSB7fTtcbiAgICAgICAgLy8gQ3VsbGluZ1xuICAgICAgICBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5jdWxsaW5nID0gdHJ1ZTtcbiAgICAgICAgUmVuZGVyU3RhdGUuZGVmYXVsdHMuY3VsbGluZ19mYWNlID0gZ2wuQkFDSztcblxuICAgICAgICAvLyBCbGVuZGluZ1xuICAgICAgICBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5ibGVuZGluZyA9IGZhbHNlO1xuICAgICAgICBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5ibGVuZGluZ19zcmMgPSBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBO1xuICAgICAgICBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5ibGVuZGluZ19kc3QgPSBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBO1xuICAgICAgICBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5ibGVuZGluZ19zcmNfYWxwaGEgPSBnbC5PTkU7XG4gICAgICAgIFJlbmRlclN0YXRlLmRlZmF1bHRzLmJsZW5kaW5nX2RzdF9hbHBoYSA9IGdsLk9ORV9NSU5VU19TUkNfQUxQSEE7XG5cbiAgICAgICAgLy8gRGVwdGggdGVzdC93cml0ZVxuICAgICAgICBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5kZXB0aF93cml0ZSA9IHRydWU7XG4gICAgICAgIFJlbmRlclN0YXRlLmRlZmF1bHRzLmRlcHRoX3Rlc3QgPSB0cnVlO1xuICAgICAgICBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5kZXB0aF9mdW5jID0gZ2wuTEVTUztcblxuICAgIFx0Ly8gQ3VsbGluZ1xuICAgIFx0UmVuZGVyU3RhdGUuY3VsbGluZyA9IG5ldyBSZW5kZXJTdGF0ZShcbiAgICBcdFx0eyBjdWxsOiBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5jdWxsaW5nLCBmYWNlOiBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5jdWxsaW5nX2ZhY2UgfSxcbiAgICBcdFx0KHZhbHVlKSA9PiB7XG4gICAgXHRcdFx0aWYgKHZhbHVlLmN1bGwpIHtcbiAgICBcdFx0XHRcdGdsLmVuYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgICAgICAgICAgXHRcdGdsLmN1bGxGYWNlKHZhbHVlLmZhY2UpO1xuICAgIFx0XHRcdH0gZWxzZSB7XG4gICAgXHRcdFx0XHRnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgXHRcdFx0fVxuICAgIFx0XHR9XG4gICAgXHQpO1xuXG4gICAgXHQvLyBCbGVuZGluZyBtb2RlXG4gICAgXHRSZW5kZXJTdGF0ZS5ibGVuZGluZyA9IG5ldyBSZW5kZXJTdGF0ZSh7XG4gICAgICAgICAgICAgICAgYmxlbmQ6IFJlbmRlclN0YXRlLmRlZmF1bHRzLmJsZW5kaW5nLFxuICAgICAgICAgICAgICAgIHNyYzogUmVuZGVyU3RhdGUuZGVmYXVsdHMuYmxlbmRpbmdfc3JjLFxuICAgICAgICAgICAgICAgIGRzdDogUmVuZGVyU3RhdGUuZGVmYXVsdHMuYmxlbmRpbmdfZHN0LFxuICAgICAgICAgICAgICAgIHNyY19hbHBoYTogUmVuZGVyU3RhdGUuZGVmYXVsdHMuYmxlbmRpbmdfc3JjX2FscGhhLFxuICAgICAgICAgICAgICAgIGRzdF9hbHBoYTogUmVuZGVyU3RhdGUuZGVmYXVsdHMuYmxlbmRpbmdfZHN0X2FscGhhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKHZhbHVlKSA9PiB7XG4gICAgXHRcdFx0aWYgKHZhbHVlLmJsZW5kKSB7XG4gICAgICAgICAgICBcdFx0Z2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3JjX2FscGhhICYmIHZhbHVlLmRzdF9hbHBoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRGdW5jU2VwYXJhdGUodmFsdWUuc3JjLCB2YWx1ZS5kc3QsIHZhbHVlLnNyY19hbHBoYSwgdmFsdWUuZHN0X2FscGhhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRnVuYyh2YWx1ZS5zcmMsIHZhbHVlLmRzdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICBcdFx0XHR9IGVsc2Uge1xuICAgIFx0XHRcdFx0Z2wuZGlzYWJsZShnbC5CTEVORCk7XG4gICAgXHRcdFx0fVxuICAgIFx0XHR9XG4gICAgXHQpO1xuXG4gICAgXHQvLyBEZXB0aCB3cml0ZVxuICAgIFx0UmVuZGVyU3RhdGUuZGVwdGhfd3JpdGUgPSBuZXcgUmVuZGVyU3RhdGUoXG4gICAgXHRcdHsgZGVwdGhfd3JpdGU6IFJlbmRlclN0YXRlLmRlZmF1bHRzLmRlcHRoX3dyaXRlIH0sXG4gICAgXHRcdCh2YWx1ZSkgPT4ge1xuICAgICAgICBcdFx0Z2wuZGVwdGhNYXNrKHZhbHVlLmRlcHRoX3dyaXRlKTtcbiAgICBcdFx0fVxuICAgIFx0KTtcblxuICAgIFx0Ly8gRGVwdGggdGVzdFxuICAgIFx0UmVuZGVyU3RhdGUuZGVwdGhfdGVzdCA9IG5ldyBSZW5kZXJTdGF0ZShcbiAgICBcdFx0eyBkZXB0aF90ZXN0OiBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5kZXB0aF90ZXN0LCBkZXB0aF9mdW5jOiBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5kZXB0aF9mdW5jIH0sXG4gICAgXHRcdCh2YWx1ZSkgPT4ge1xuICAgIFx0XHRcdGlmICh2YWx1ZS5kZXB0aF90ZXN0KSB7XG4gICAgICAgICAgICBcdFx0Z2wuZW5hYmxlKGdsLkRFUFRIX1RFU1QpO1xuICAgICAgICBcdFx0XHRnbC5kZXB0aEZ1bmModmFsdWUuZGVwdGhfZnVuYyk7XG4gICAgXHRcdFx0fSBlbHNlIHtcbiAgICAgICAgICAgIFx0XHRnbC5kaXNhYmxlKGdsLkRFUFRIX1RFU1QpO1xuICAgIFx0XHRcdH1cbiAgICBcdFx0fVxuICAgIFx0KTtcbiAgICB9XG59XG4iLCIvLyBHTCBwcm9ncmFtIHdyYXBwZXIgdG8gY2FjaGUgdW5pZm9ybSBsb2NhdGlvbnMvdmFsdWVzLCBkbyBjb21waWxlLXRpbWUgcHJlLXByb2Nlc3Npbmdcbi8vIChpbmplY3RpbmcgI2RlZmluZXMgYW5kICNwcmFnbWEgYmxvY2tzIGludG8gc2hhZGVycyksIGV0Yy5cblxuaW1wb3J0IEdMU0wgZnJvbSAnLi9nbHNsJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vdGV4dHVyZSc7XG5pbXBvcnQgZ2V0RXh0ZW5zaW9uIGZyb20gJy4vZXh0ZW5zaW9ucyc7XG5cbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuaW1wb3J0IHN0cmlwIGZyb20gJ3N0cmlwLWNvbW1lbnRzJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgcGFyc2VTaGFkZXJFcnJvcnMgfSBmcm9tICdnbC1zaGFkZXItZXJyb3JzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hhZGVyUHJvZ3JhbSB7XG5cbiAgICBjb25zdHJ1Y3RvcihnbCwgdmVydGV4X3NvdXJjZSwgZnJhZ21lbnRfc291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuZ2wgPSBnbDtcbiAgICAgICAgdGhpcy5wcm9ncmFtID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb21waWxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbXBpbGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgICAgICAvLyBrZXkvdmFsdWVzIGluc2VydGVkIGFzICNkZWZpbmVzIGludG8gc2hhZGVycyBhdCBjb21waWxlLXRpbWVcbiAgICAgICAgdGhpcy5kZWZpbmVzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5kZWZpbmVzfHx7fSk7XG5cbiAgICAgICAgLy8ga2V5L3ZhbHVlcyBmb3IgYmxvY2tzIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gc2hhZGVycyBhdCBjb21waWxlLXRpbWVcbiAgICAgICAgdGhpcy5ibG9ja3MgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmJsb2Nrc3x8e30pO1xuICAgICAgICB0aGlzLmJsb2NrX3Njb3BlcyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuYmxvY2tfc2NvcGVzfHx7fSk7XG5cbiAgICAgICAgLy8gbGlzdCBvZiBleHRlbnNpb25zIHRvIGFjdGl2YXRlXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9ucyA9IG9wdGlvbnMuZXh0ZW5zaW9ucyB8fCBbXTtcblxuICAgICAgICAvLyBKUy1vYmplY3QgdW5pZm9ybXMgdGhhdCBhcmUgZXhwZWN0ZWQgYnkgdGhpcyBwcm9ncmFtXG4gICAgICAgIC8vIElmIHRoZXkgYXJlIG5vdCBmb3VuZCBpbiB0aGUgZXhpc3Rpbmcgc2hhZGVyIHNvdXJjZSwgdGhlaXIgdHlwZXMgd2lsbCBiZSBpbmZlcnJlZCBhbmQgZGVmaW5pdGlvbnNcbiAgICAgICAgLy8gZm9yIGVhY2ggd2lsbCBiZSBpbmplY3RlZC5cbiAgICAgICAgdGhpcy5kZXBlbmRlbnRfdW5pZm9ybXMgPSBvcHRpb25zLnVuaWZvcm1zO1xuXG4gICAgICAgIHRoaXMudW5pZm9ybXMgPSB7fTsgLy8gcHJvZ3JhbSBsb2NhdGlvbnMgb2YgdW5pZm9ybXMsIGxhemlseSBhZGRlZCBhcyBlYWNoIHVuaWZvcm0gaXMgc2V0XG4gICAgICAgIHRoaXMuYXR0cmlicyA9IHt9OyAvLyBwcm9ncmFtIGxvY2F0aW9ucyBvZiB2ZXJ0ZXggYXR0cmlidXRlcywgbGF6aWx5IGFkZGVkIGFzIGVhY2ggYXR0cmlidXRlIGlzIGFjY2Vzc2VkXG5cbiAgICAgICAgdGhpcy52ZXJ0ZXhfc291cmNlID0gdmVydGV4X3NvdXJjZTtcbiAgICAgICAgdGhpcy5mcmFnbWVudF9zb3VyY2UgPSBmcmFnbWVudF9zb3VyY2U7XG5cbiAgICAgICAgdGhpcy5pZCA9IFNoYWRlclByb2dyYW0uaWQrKztcbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5wcm9ncmFtc1t0aGlzLmlkXSA9IHRoaXM7XG4gICAgICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZTsgLy8gY2FuIHByb3ZpZGUgYSBwcm9ncmFtIG5hbWUgKHVzZWZ1bCBmb3IgZGVidWdnaW5nKVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICAgICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG4gICAgICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG4gICAgICAgIHRoaXMudW5pZm9ybXMgPSB7fTtcbiAgICAgICAgdGhpcy5hdHRyaWJzID0ge307XG4gICAgICAgIGRlbGV0ZSBTaGFkZXJQcm9ncmFtLnByb2dyYW1zW3RoaXMuaWRdO1xuICAgICAgICB0aGlzLmNvbXBpbGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVXNlIHByb2dyYW0gd3JhcHBlciB3aXRoIHNpbXBsZSBzdGF0ZSBjYWNoZVxuICAgIHVzZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBpbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoU2hhZGVyUHJvZ3JhbS5jdXJyZW50ICE9PSB0aGlzKSB7XG4gICAgICAgICAgICB0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbiAgICAgICAgfVxuICAgICAgICBTaGFkZXJQcm9ncmFtLmN1cnJlbnQgPSB0aGlzO1xuICAgIH1cblxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBpbGluZykge1xuICAgICAgICAgICAgdGhyb3cobmV3IEVycm9yKGBTaGFkZXJQcm9ncmFtLmNvbXBpbGUoKTogc2tpcHBpbmcgZm9yICR7dGhpcy5pZH0gKCR7dGhpcy5uYW1lfSkgYmVjYXVzZSBhbHJlYWR5IGNvbXBpbGluZ2ApKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBpbGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuY29tcGlsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XG5cbiAgICAgICAgLy8gQ29weSBzb3VyY2VzIGZyb20gcHJlLW1vZGlmaWVkIHRlbXBsYXRlXG4gICAgICAgIHRoaXMuY29tcHV0ZWRfdmVydGV4X3NvdXJjZSA9IHRoaXMudmVydGV4X3NvdXJjZTtcbiAgICAgICAgdGhpcy5jb21wdXRlZF9mcmFnbWVudF9zb3VyY2UgPSB0aGlzLmZyYWdtZW50X3NvdXJjZTtcblxuICAgICAgICAvLyBDaGVjayBmb3IgZXh0ZW5zaW9uIGF2YWlsYWJpbGl0eVxuICAgICAgICBsZXQgZXh0ZW5zaW9ucyA9IHRoaXMuY2hlY2tFeHRlbnNpb25zKCk7XG5cbiAgICAgICAgLy8gTWFrZSBsaXN0IG9mIGRlZmluZXMgdG8gYmUgaW5qZWN0ZWQgbGF0ZXJcbiAgICAgICAgdmFyIGRlZmluZXMgPSB0aGlzLmJ1aWxkRGVmaW5lTGlzdCgpO1xuXG4gICAgICAgIC8vIEluamVjdCB1c2VyLWRlZmluZWQgYmxvY2tzIChhcmJpdHJhcnkgY29kZSBwb2ludHMgbWF0Y2hpbmcgbmFtZWQgI3ByYWdtYXMpXG4gICAgICAgIC8vIFJlcGxhY2UgYWNjb3JkaW5nIHRvIHRoaXMgcGF0dGVybjpcbiAgICAgICAgLy8gI3ByYWdtYSB0YW5ncmFtOiBba2V5XVxuICAgICAgICAvLyBlLmcuICNwcmFnbWEgdGFuZ3JhbTogZ2xvYmFsXG5cbiAgICAgICAgLy8gR2F0aGVyIGFsbCBibG9jayBjb2RlIHNuaXBwZXRzXG4gICAgICAgIHZhciBibG9ja3MgPSB0aGlzLmJ1aWxkU2hhZGVyQmxvY2tMaXN0KCk7XG4gICAgICAgIHZhciByZWdleHA7XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIGJsb2Nrcykge1xuICAgICAgICAgICAgdmFyIGJsb2NrID0gYmxvY2tzW2tleV07XG4gICAgICAgICAgICBpZiAoIWJsb2NrIHx8IChBcnJheS5pc0FycmF5KGJsb2NrKSAmJiBibG9jay5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZpcnN0IGZpbmQgY29kZSByZXBsYWNlIHBvaW50cyBpbiBzaGFkZXJzXG4gICAgICAgICAgICByZWdleHAgPSBuZXcgUmVnRXhwKCdeXFxcXHMqI3ByYWdtYVxcXFxzK3RhbmdyYW06XFxcXHMrJyArIGtleSArICdcXFxccyokJywgJ20nKTtcbiAgICAgICAgICAgIHZhciBpbmplY3RfdmVydGV4ID0gdGhpcy5jb21wdXRlZF92ZXJ0ZXhfc291cmNlLm1hdGNoKHJlZ2V4cCk7XG4gICAgICAgICAgICB2YXIgaW5qZWN0X2ZyYWdtZW50ID0gdGhpcy5jb21wdXRlZF9mcmFnbWVudF9zb3VyY2UubWF0Y2gocmVnZXhwKTtcblxuICAgICAgICAgICAgLy8gQXZvaWQgbmV0d29yayByZXF1ZXN0IGlmIG5vdGhpbmcgdG8gcmVwbGFjZVxuICAgICAgICAgICAgaWYgKGluamVjdF92ZXJ0ZXggPT0gbnVsbCAmJiBpbmplY3RfZnJhZ21lbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb21iaW5lIGFsbCBibG9ja3MgaW50byBvbmUgc3RyaW5nXG4gICAgICAgICAgICB2YXIgc291cmNlID0gJyc7XG4gICAgICAgICAgICBibG9jay5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTWFyayBzdGFydCBhbmQgZW5kIG9mIGVhY2ggYmxvY2sgd2l0aCBtZXRhZGF0YSAod2hpY2ggY2FuIGJlIGV4dHJhY3RlZCBmcm9tXG4gICAgICAgICAgICAgICAgLy8gZmluYWwgc291cmNlIGZvciBlcnJvciBoYW5kbGluZywgZGVidWdnaW5nLCBldGMuKVxuICAgICAgICAgICAgICAgIGxldCBtYXJrID0gYCR7dmFsLnNjb3BlfSwgJHt2YWwua2V5fSwgJHt2YWwubnVtfWA7XG4gICAgICAgICAgICAgICAgc291cmNlICs9IGBcXG4vLyB0YW5ncmFtLWJsb2NrLXN0YXJ0OiAke21hcmt9XFxuYDtcbiAgICAgICAgICAgICAgICBzb3VyY2UgKz0gdmFsLnNvdXJjZTtcbiAgICAgICAgICAgICAgICBzb3VyY2UgKz0gYFxcbi8vIHRhbmdyYW0tYmxvY2stZW5kOiAke21hcmt9XFxuYDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBJbmplY3RcbiAgICAgICAgICAgIGlmIChpbmplY3RfdmVydGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVkX3ZlcnRleF9zb3VyY2UgPSB0aGlzLmNvbXB1dGVkX3ZlcnRleF9zb3VyY2UucmVwbGFjZShyZWdleHAsIHNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5qZWN0X2ZyYWdtZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVkX2ZyYWdtZW50X3NvdXJjZSA9IHRoaXMuY29tcHV0ZWRfZnJhZ21lbnRfc291cmNlLnJlcGxhY2UocmVnZXhwLCBzb3VyY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgYSAjZGVmaW5lIGZvciB0aGlzIGluamVjdGlvbiBwb2ludFxuICAgICAgICAgICAgZGVmaW5lc1snVEFOR1JBTV9CTE9DS18nICsga2V5LnJlcGxhY2UoL1tcXHMtXSsvZywgJ18nKS50b1VwcGVyQ2FzZSgpXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbGVhbi11cCBhbnkgI3ByYWdtYXMgdGhhdCB3ZXJlbid0IHJlcGxhY2VkICh0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzKVxuICAgICAgICByZWdleHAgPSBuZXcgUmVnRXhwKCdeXFxcXHMqI3ByYWdtYS4qJCcsICdnbScpO1xuICAgICAgICB0aGlzLmNvbXB1dGVkX3ZlcnRleF9zb3VyY2UgPSB0aGlzLmNvbXB1dGVkX3ZlcnRleF9zb3VyY2UucmVwbGFjZShyZWdleHAsICcnKTtcbiAgICAgICAgdGhpcy5jb21wdXRlZF9mcmFnbWVudF9zb3VyY2UgPSB0aGlzLmNvbXB1dGVkX2ZyYWdtZW50X3NvdXJjZS5yZXBsYWNlKHJlZ2V4cCwgJycpO1xuXG4gICAgICAgIC8vIERldGVjdCB1bmlmb3JtIGRlZmluaXRpb25zLCBpbmplY3QgYW55IG1pc3Npbmcgb25lc1xuICAgICAgICB0aGlzLmVuc3VyZVVuaWZvcm1zKHRoaXMuZGVwZW5kZW50X3VuaWZvcm1zKTtcblxuICAgICAgICAvLyBCdWlsZCAmIGluamVjdCBleHRlbnNpb25zICYgZGVmaW5lc1xuICAgICAgICAvLyBUaGlzIGlzIGRvbmUgKmFmdGVyKiBjb2RlIGluamVjdGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgZGVmaW5lcyBmb3Igd2hpY2ggY29kZSBwb2ludHMgd2VyZSBpbmplY3RlZFxuICAgICAgICBsZXQgaW5mbyA9ICh0aGlzLm5hbWUgPyAodGhpcy5uYW1lICsgJyAvIGlkICcgKyB0aGlzLmlkKSA6ICgnaWQgJyArIHRoaXMuaWQpKTtcbiAgICAgICAgbGV0IGhlYWRlciA9IGAvLyBQcm9ncmFtOiAke2luZm99XFxuYDtcbiAgICAgICAgbGV0IHByZWNpc2lvbiA9ICcnO1xuICAgICAgICBsZXQgaGlnaCA9IHRoaXMuZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHRoaXMuZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmdsLkhJR0hfRkxPQVQpO1xuICAgICAgICBpZiAoaGlnaCAmJiBoaWdoLnByZWNpc2lvbiA+IDApIHtcbiAgICAgICAgICAgIHByZWNpc2lvbiA9ICdwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHByZWNpc2lvbiA9ICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4nO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmaW5lc1snVEFOR1JBTV9WRVJURVhfU0hBREVSJ10gPSB0cnVlO1xuICAgICAgICBkZWZpbmVzWydUQU5HUkFNX0ZSQUdNRU5UX1NIQURFUiddID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29tcHV0ZWRfdmVydGV4X3NvdXJjZSA9XG4gICAgICAgICAgICBoZWFkZXIgK1xuICAgICAgICAgICAgcHJlY2lzaW9uICtcbiAgICAgICAgICAgIFNoYWRlclByb2dyYW0uYnVpbGREZWZpbmVTdHJpbmcoZGVmaW5lcykgK1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlZF92ZXJ0ZXhfc291cmNlO1xuXG4gICAgICAgIC8vIFByZWNpc2lvbiBxdWFsaWZpZXIgb25seSB2YWxpZCBpbiBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgLy8gTkI6ICcjZXh0ZW5zaW9uJyBzdGF0ZW1lbnRzIGFkZGVkIHRvIGZyYWdtZW50IHNoYWRlciBvbmx5LCBhcyBJRTExIHRocm93cyBlcnJvciB3aGVuIHRoZXkgYXBwZWFyIGluXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXIgKGV2ZW4gd2hlbiBndWFyZGVkIGJ5ICNpZmRlZiksIGFuZCBubyBXZWJHTCBleHRlbnNpb25zIHJlcXVpcmUgJyNleHRlbnNpb24nIGluIHZlcnRleCBzaGFkZXJzXG4gICAgICAgIGRlZmluZXNbJ1RBTkdSQU1fVkVSVEVYX1NIQURFUiddID0gZmFsc2U7XG4gICAgICAgIGRlZmluZXNbJ1RBTkdSQU1fRlJBR01FTlRfU0hBREVSJ10gPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbXB1dGVkX2ZyYWdtZW50X3NvdXJjZSA9XG4gICAgICAgICAgICBTaGFkZXJQcm9ncmFtLmJ1aWxkRXh0ZW5zaW9uU3RyaW5nKGV4dGVuc2lvbnMpICtcbiAgICAgICAgICAgIGhlYWRlciArXG4gICAgICAgICAgICBwcmVjaXNpb24gK1xuICAgICAgICAgICAgU2hhZGVyUHJvZ3JhbS5idWlsZERlZmluZVN0cmluZyhkZWZpbmVzKSArXG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkX2ZyYWdtZW50X3NvdXJjZTtcblxuICAgICAgICAvLyBDb21waWxlICYgc2V0IHVuaWZvcm1zIHRvIGNhY2hlZCB2YWx1ZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbSA9IFNoYWRlclByb2dyYW0udXBkYXRlUHJvZ3JhbSh0aGlzLmdsLCB0aGlzLnByb2dyYW0sIHRoaXMuY29tcHV0ZWRfdmVydGV4X3NvdXJjZSwgdGhpcy5jb21wdXRlZF9mcmFnbWVudF9zb3VyY2UpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jb21waWxpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcblxuICAgICAgICAgICAgLy8gc2hhZGVyIGVycm9yIGluZm9cbiAgICAgICAgICAgIGlmIChlcnJvci50eXBlID09PSAndmVydGV4JyB8fCBlcnJvci50eXBlID09PSAnZnJhZ21lbnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkZXJfZXJyb3JzID0gZXJyb3IuZXJyb3JzO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGUgb2YgdGhpcy5zaGFkZXJfZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGUudHlwZSA9IGVycm9yLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGUuYmxvY2sgPSB0aGlzLmJsb2NrKGVycm9yLnR5cGUsIGUubGluZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyhuZXcgRXJyb3IoYFNoYWRlclByb2dyYW0uY29tcGlsZSgpOiBwcm9ncmFtICR7dGhpcy5pZH0gKCR7dGhpcy5uYW1lfSkgZXJyb3I6YCwgZXJyb3IpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXNlKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaFVuaWZvcm1zKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaEF0dHJpYnV0ZXMoKTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIGxpc3Qgb2YgZGVmaW5lcyAoZ2xvYmFsLCB0aGVuIHByb2dyYW0tc3BlY2lmaWMpXG4gICAgYnVpbGREZWZpbmVMaXN0KCkge1xuICAgICAgICB2YXIgZCwgZGVmaW5lcyA9IHt9O1xuICAgICAgICBmb3IgKGQgaW4gU2hhZGVyUHJvZ3JhbS5kZWZpbmVzKSB7XG4gICAgICAgICAgICBkZWZpbmVzW2RdID0gU2hhZGVyUHJvZ3JhbS5kZWZpbmVzW2RdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoZCBpbiB0aGlzLmRlZmluZXMpIHtcbiAgICAgICAgICAgIGRlZmluZXNbZF0gPSB0aGlzLmRlZmluZXNbZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmluZXM7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBsaXN0IG9mIHNoYWRlciBibG9ja3MgKGdsb2JhbCwgdGhlbiBwcm9ncmFtLXNwZWNpZmljKVxuICAgIGJ1aWxkU2hhZGVyQmxvY2tMaXN0KCkge1xuICAgICAgICBsZXQga2V5LCBibG9ja3MgPSB7fTtcblxuICAgICAgICAvLyBHbG9iYWwgYmxvY2tzXG4gICAgICAgIGZvciAoa2V5IGluIFNoYWRlclByb2dyYW0uYmxvY2tzKSB7XG4gICAgICAgICAgICBibG9ja3Nba2V5XSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShTaGFkZXJQcm9ncmFtLmJsb2Nrc1trZXldKSkge1xuICAgICAgICAgICAgICAgIGJsb2Nrc1trZXldLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIC4uLlNoYWRlclByb2dyYW0uYmxvY2tzW2tleV0ubWFwKChzb3VyY2UsIG51bSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsga2V5LCBzb3VyY2UsIG51bSwgc2NvcGU6ICdTaGFkZXJQcm9ncmFtJyB9O1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBibG9ja3Nba2V5XSA9IFt7IGtleSwgc291cmNlOiBTaGFkZXJQcm9ncmFtLmJsb2Nrc1trZXldLCBudW06IDAsIHNjb3BlOiAnU2hhZGVyUHJvZ3JhbScgfV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9ncmFtLXNwZWNpZmljIGJsb2Nrc1xuICAgICAgICBmb3IgKGtleSBpbiB0aGlzLmJsb2Nrcykge1xuICAgICAgICAgICAgYmxvY2tzW2tleV0gPSBibG9ja3Nba2V5XSB8fCBbXTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5ibG9ja3Nba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2NvcGVzID0gKHRoaXMuYmxvY2tfc2NvcGVzICYmIHRoaXMuYmxvY2tfc2NvcGVzW2tleV0pIHx8IFtdO1xuICAgICAgICAgICAgICAgIGxldCBjdXJfc2NvcGUgPSBudWxsLCBudW0gPSAwO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYj0wOyBiIDwgdGhpcy5ibG9ja3Nba2V5XS5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb3VudCBibG9ja3MgcmVsYXRpdmUgdG8gY3VycmVudCBzY29wZVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGVzW2JdICE9PSBjdXJfc2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9zY29wZSA9IHNjb3Blc1tiXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBibG9ja3Nba2V5XS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5ibG9ja3Nba2V5XVtiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlOiBjdXJfc2NvcGUgfHwgdGhpcy5uYW1lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIG51bSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IGFkZHJlc3MgZGlzY3JlcGFuY3kgaW4gYXJyYXkgdnMuIHNpbmdsZS12YWx1ZSBibG9ja3NcbiAgICAgICAgICAgICAgICAvLyBzdHlsZXMgYXNzdW1lIGFycmF5IHdoZW4gdHJhY2tpbmcgYmxvY2sgc2NvcGVzXG4gICAgICAgICAgICAgICAgYmxvY2tzW2tleV0ucHVzaCh7IGtleSwgc291cmNlOiB0aGlzLmJsb2Nrc1trZXldLCBudW06IDAsIHNjb3BlOiB0aGlzLm5hbWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJsb2NrcztcbiAgICB9XG5cbiAgICAvLyBEZXRlY3QgdW5pZm9ybSBkZWZpbml0aW9ucywgaW5qZWN0IGFueSBtaXNzaW5nIG9uZXNcbiAgICBlbnN1cmVVbmlmb3Jtcyh1bmlmb3Jtcykge1xuICAgICAgICBpZiAoIXVuaWZvcm1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdnMgPSBzdHJpcCh0aGlzLmNvbXB1dGVkX3ZlcnRleF9zb3VyY2UpO1xuICAgICAgICB2YXIgZnMgPSBzdHJpcCh0aGlzLmNvbXB1dGVkX2ZyYWdtZW50X3NvdXJjZSk7XG4gICAgICAgIHZhciBpbmplY3QsIHZzX2luamVjdGlvbnMgPSBbXSwgZnNfaW5qZWN0aW9ucyA9IFtdO1xuXG4gICAgICAgIC8vIENoZWNrIGZvciBtaXNzaW5nIHVuaWZvcm0gZGVmaW5pdGlvbnNcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB1bmlmb3Jtcykge1xuICAgICAgICAgICAgaW5qZWN0ID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgdmVydGV4IHNoYWRlclxuICAgICAgICAgICAgaWYgKCFHTFNMLmlzVW5pZm9ybURlZmluZWQobmFtZSwgdnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpbmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0ID0gR0xTTC5kZWZpbmVVbmlmb3JtKG5hbWUsIHVuaWZvcm1zW25hbWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9nLnRyYWNlKGBQcm9ncmFtICR7dGhpcy5uYW1lfTogJHtuYW1lfSBub3QgZGVmaW5lZCBpbiB2ZXJ0ZXggc2hhZGVyLCBpbmplY3Rpbmc6ICcke2luamVjdH0nYCk7XG4gICAgICAgICAgICAgICAgdnNfaW5qZWN0aW9ucy5wdXNoKGluamVjdCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGZyYWdtZW50IHNoYWRlclxuICAgICAgICAgICAgaWYgKCFHTFNMLmlzVW5pZm9ybURlZmluZWQobmFtZSwgZnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpbmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0ID0gR0xTTC5kZWZpbmVVbmlmb3JtKG5hbWUsIHVuaWZvcm1zW25hbWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9nLnRyYWNlKGBQcm9ncmFtICR7dGhpcy5uYW1lfTogJHtuYW1lfSBub3QgZGVmaW5lZCBpbiBmcmFnbWVudCBzaGFkZXIsIGluamVjdGluZzogJyR7aW5qZWN0fSdgKTtcbiAgICAgICAgICAgICAgICBmc19pbmplY3Rpb25zLnB1c2goaW5qZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluamVjdCBtaXNzaW5nIHVuaWZvcm1zXG4gICAgICAgIC8vIE5PVEU6IHRoZXNlIGFyZSBpbmplY3RlZCBhdCB0aGUgdmVyeSB0b3Agb2YgdGhlIHNoYWRlcnMsIGV2ZW4gYmVmb3JlIGFueSAjZGVmaW5lcyBvciAjcHJhZ21hcyBhcmUgYWRkZWRcbiAgICAgICAgLy8gdGhpcyBjb3VsZCBjYXVzZSBzb21lIGlzc3VlcyB3aXRoIGNlcnRhaW4gI3ByYWdtYXMsIG9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGV4cGVjdCAjZGVmaW5lc1xuICAgICAgICBpZiAodnNfaW5qZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkX3ZlcnRleF9zb3VyY2UgPSB2c19pbmplY3Rpb25zLmpvaW4oJ1xcbicpICsgdGhpcy5jb21wdXRlZF92ZXJ0ZXhfc291cmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZzX2luamVjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlZF9mcmFnbWVudF9zb3VyY2UgPSBmc19pbmplY3Rpb25zLmpvaW4oJ1xcbicpICsgdGhpcy5jb21wdXRlZF9mcmFnbWVudF9zb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdW5pZm9ybXMgZnJvbSBhIEpTIG9iamVjdCwgd2l0aCBpbmZlcnJlZCB0eXBlc1xuICAgIHNldFVuaWZvcm1zKHVuaWZvcm1zLCByZXNldF90ZXh0dXJlX3VuaXQgPSB0cnVlKSB7XG4gICAgICAgIGlmICghdGhpcy5jb21waWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogb25seSB1cGRhdGUgdW5pZm9ybXMgd2hlbiBjaGFuZ2VkXG5cbiAgICAgICAgLy8gVGV4dHVyZSB1bml0cyBtdXN0IGJlIHRyYWNrZWQgYW5kIGluY3JlbWVudGVkIGVhY2ggdGltZSBhIHRleHR1cmUgc2FtcGxlciB1bmlmb3JtIGlzIHNldC5cbiAgICAgICAgLy8gQnkgZGVmYXVsdCwgdGhlIHRleHR1cmUgdW5pdCBpcyByZXNldCB0byAwIGVhY2ggdGltZSBzZXRVbmlmb3JtcyBpcyBjYWxsZWQsIGJ1dCB0aGV5IGNhblxuICAgICAgICAvLyBhbHNvIGJlIHByZXNlcnZlZCwgZm9yIGV4YW1wbGUgaW4gY2FzZXMgd2hlcmUgbXVsdGlwbGUgY2FsbHMgdG8gc2V0VW5pZm9ybXMgYXJlIGV4cGVjdGVkXG4gICAgICAgIC8vIChlLmcuIHByb2dyYW0tc3BlY2lmaWMgdW5pZm9ybXMgZm9sbG93ZWQgYnkgbWVzaC1zcGVjaWZpYyBvbmVzKS5cbiAgICAgICAgaWYgKHJlc2V0X3RleHR1cmVfdW5pdCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlX3VuaXQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFyc2UgdW5pZm9ybSB0eXBlcyBhbmQgdmFsdWVzIGZyb20gdGhlIEpTIG9iamVjdFxuICAgICAgICB2YXIgcGFyc2VkID0gR0xTTC5wYXJzZVVuaWZvcm1zKHVuaWZvcm1zKTtcblxuICAgICAgICAvLyBTZXQgZWFjaCB1bmlmb3JtXG4gICAgICAgIGZvciAodmFyIHVuaWZvcm0gb2YgcGFyc2VkKSB7XG4gICAgICAgICAgICBpZiAodW5pZm9ybS50eXBlID09PSAnc2FtcGxlcjJEJykge1xuICAgICAgICAgICAgICAgIC8vIEZvciB0ZXh0dXJlcywgd2UgbmVlZCB0byB0cmFjayB0ZXh0dXJlIHVuaXRzLCBzbyB3ZSBoYXZlIGEgc3BlY2lhbCBzZXR0ZXJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRleHR1cmVVbmlmb3JtKHVuaWZvcm0ubmFtZSwgdW5pZm9ybS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuaWZvcm0odW5pZm9ybS5tZXRob2QsIHVuaWZvcm0ubmFtZSwgdW5pZm9ybS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYWNoZSBzb21lIG9yIGFsbCB1bmlmb3JtIHZhbHVlcyBzbyB0aGV5IGNhbiBiZSByZXN0b3JlZFxuICAgIHNhdmVVbmlmb3JtcyhzdWJzZXQpIHtcbiAgICAgICAgbGV0IHVuaWZvcm1zID0gc3Vic2V0IHx8IHRoaXMudW5pZm9ybXM7XG4gICAgICAgIGZvciAobGV0IHUgaW4gdW5pZm9ybXMpIHtcbiAgICAgICAgICAgIGxldCB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1t1XTtcbiAgICAgICAgICAgIGlmICh1bmlmb3JtKSB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5zYXZlZF92YWx1ZSA9IHVuaWZvcm0udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zYXZlZF90ZXh0dXJlX3VuaXQgPSB0aGlzLnRleHR1cmVfdW5pdCB8fCAwO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgc29tZSBvciBhbGwgdW5pZm9ybXMgdG8gc2F2ZWQgdmFsdWVzXG4gICAgcmVzdG9yZVVuaWZvcm1zKHN1YnNldCkge1xuICAgICAgICBsZXQgdW5pZm9ybXMgPSBzdWJzZXQgfHwgdGhpcy51bmlmb3JtcztcbiAgICAgICAgZm9yIChsZXQgdSBpbiB1bmlmb3Jtcykge1xuICAgICAgICAgICAgbGV0IHVuaWZvcm0gPSB0aGlzLnVuaWZvcm1zW3VdO1xuICAgICAgICAgICAgaWYgKHVuaWZvcm0gJiYgdW5pZm9ybS5zYXZlZF92YWx1ZSkge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0udmFsdWUgPSB1bmlmb3JtLnNhdmVkX3ZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVW5pZm9ybSh1KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRleHR1cmVfdW5pdCA9IHRoaXMuc2F2ZWRfdGV4dHVyZV91bml0IHx8IDA7XG4gICAgfVxuXG4gICAgLy8gU2V0IGEgdGV4dHVyZSB1bmlmb3JtLCBmaW5kcyB0ZXh0dXJlIGJ5IG5hbWUgb3IgY3JlYXRlcyBhIG5ldyBvbmVcbiAgICBzZXRUZXh0dXJlVW5pZm9ybSh1bmlmb3JtX25hbWUsIHRleHR1cmVfbmFtZSkge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUudGV4dHVyZXNbdGV4dHVyZV9uYW1lXTtcbiAgICAgICAgaWYgKHRleHR1cmUgPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nLndhcm4oYENhbid0IGZpbmQgdGV4dHVyZSAnJHt0ZXh0dXJlX25hbWV9J2ApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGV4dHVyZS5iaW5kKHRoaXMudGV4dHVyZV91bml0KTtcbiAgICAgICAgdGhpcy51bmlmb3JtKCcxaScsIHVuaWZvcm1fbmFtZSwgdGhpcy50ZXh0dXJlX3VuaXQpO1xuICAgICAgICB0aGlzLnRleHR1cmVfdW5pdCsrOyAvLyBUT0RPOiB0cmFjayBtYXggdGV4dHVyZSB1bml0cyBhbmQgbG9nL3Rocm93IGVycm9yc1xuICAgIH1cblxuICAgIC8vIGV4OiBwcm9ncmFtLnVuaWZvcm0oJzNmJywgJ3Bvc2l0aW9uJywgeCwgeSwgeik7XG4gICAgLy8gVE9ETzogb25seSB1cGRhdGUgdW5pZm9ybXMgd2hlbiBjaGFuZ2VkXG4gICAgdW5pZm9ybShtZXRob2QsIG5hbWUsIC4uLnZhbHVlKSB7IC8vICd2YWx1ZScgaXMgYSBtZXRob2QtYXBwcm9wcmlhdGUgYXJndW1lbnRzIGxpc3RcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBpbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVuaWZvcm1zW25hbWVdID0gdGhpcy51bmlmb3Jtc1tuYW1lXSB8fCB7fTtcbiAgICAgICAgbGV0IHVuaWZvcm0gPSB0aGlzLnVuaWZvcm1zW25hbWVdO1xuICAgICAgICB1bmlmb3JtLm5hbWUgPSBuYW1lO1xuICAgICAgICBpZiAodW5pZm9ybS5sb2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB1bmlmb3JtLmxvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB1bmlmb3JtLm1ldGhvZCA9ICd1bmlmb3JtJyArIG1ldGhvZDtcbiAgICAgICAgdW5pZm9ybS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZVVuaWZvcm0obmFtZSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGEgc2luZ2xlIHVuaWZvcm1cbiAgICB1cGRhdGVVbmlmb3JtKG5hbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBpbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbbmFtZV07XG4gICAgICAgIGlmICghdW5pZm9ybSB8fCB1bmlmb3JtLmxvY2F0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXNlKCk7XG4gICAgICAgIHRoaXMuZ2xbdW5pZm9ybS5tZXRob2RdLmFwcGx5KHRoaXMuZ2wsIFt1bmlmb3JtLmxvY2F0aW9uXS5jb25jYXQodW5pZm9ybS52YWx1ZSkpOyAvLyBjYWxsIGFwcHJvcHJpYXRlIEdMIHVuaWZvcm0gbWV0aG9kIGFuZCBwYXNzIHRocm91Z2ggYXJndW1lbnRzXG4gICAgfVxuXG4gICAgLy8gUmVmcmVzaCB1bmlmb3JtIGxvY2F0aW9ucyBhbmQgc2V0IHRvIGxhc3QgY2FjaGVkIHZhbHVlc1xuICAgIHJlZnJlc2hVbmlmb3JtcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBpbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciB1IGluIHRoaXMudW5pZm9ybXMpIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXNbdV0ubG9jYXRpb24gPSB0aGlzLmdsLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnByb2dyYW0sIHUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVVbmlmb3JtKHUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVmcmVzaEF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIC8vIHZhciBsZW4gPSB0aGlzLmdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLCB0aGlzLmdsLkFDVElWRV9BVFRSSUJVVEVTKTtcbiAgICAgICAgLy8gZm9yICh2YXIgaT0wOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgLy8gICAgIHZhciBhID0gdGhpcy5nbC5nZXRBY3RpdmVBdHRyaWIodGhpcy5wcm9ncmFtLCBpKTtcbiAgICAgICAgLy8gfVxuICAgICAgICB0aGlzLmF0dHJpYnMgPSB7fTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGxvY2F0aW9uIG9mIGEgdmVydGV4IGF0dHJpYnV0ZVxuICAgIGF0dHJpYnV0ZShuYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5jb21waWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGF0dHJpYiA9ICh0aGlzLmF0dHJpYnNbbmFtZV0gPSB0aGlzLmF0dHJpYnNbbmFtZV0gfHwge30pO1xuICAgICAgICBpZiAoYXR0cmliLmxvY2F0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhdHRyaWI7XG4gICAgICAgIH1cblxuICAgICAgICBhdHRyaWIubmFtZSA9IG5hbWU7XG4gICAgICAgIGF0dHJpYi5sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLCBuYW1lKTtcblxuICAgICAgICAvLyB2YXIgaW5mbyA9IHRoaXMuZ2wuZ2V0QWN0aXZlQXR0cmliKHRoaXMucHJvZ3JhbSwgYXR0cmliLmxvY2F0aW9uKTtcbiAgICAgICAgLy8gYXR0cmliLnR5cGUgPSBpbmZvLnR5cGU7XG4gICAgICAgIC8vIGF0dHJpYi5zaXplID0gaW5mby5zaXplO1xuXG4gICAgICAgIHJldHVybiBhdHRyaWI7XG4gICAgfVxuXG4gICAgLy8gR2V0IHNoYWRlciBzb3VyY2UgYXMgc3RyaW5nXG4gICAgc291cmNlKHR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICd2ZXJ0ZXgnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlZF92ZXJ0ZXhfc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdmcmFnbWVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXB1dGVkX2ZyYWdtZW50X3NvdXJjZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCBzaGFkZXIgc291cmNlIGFzIGFycmF5IG9mIGxpbmUgc3RyaW5nc1xuICAgIGxpbmVzKHR5cGUpIHtcbiAgICAgICAgbGV0IHNvdXJjZSA9IHRoaXMuc291cmNlKHR5cGUpO1xuICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gR2V0IGEgc3BlY2lmaWMgbGluZSBmcm9tIHNoYWRlciBzb3VyY2VcbiAgICBsaW5lKHR5cGUsIG51bSkge1xuICAgICAgICBsZXQgc291cmNlID0gdGhpcy5saW5lcyh0eXBlKTtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVtudW1dO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0IGluZm8gb24gd2hpY2ggc2hhZGVyIGJsb2NrIChpZiBhbnkpIGEgcGFydGljdWxhciBsaW5lIG51bWJlciBpbiBhIHNoYWRlciBpcyBpblxuICAgIC8vIFJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBpbmZvIGlmIGEgYmxvY2sgaXMgZm91bmQ6IHsgbmFtZSwgbGluZSwgc291cmNlIH1cbiAgICAvLyAgc2NvcGU6IHdoZXJlIHRoZSBzaGFkZXIgYmxvY2sgb3JpZ2luYXRlZCwgZWl0aGVyIGEgc3R5bGUgbmFtZSwgb3IgZ2xvYmFsIHN1Y2ggYXMgU2hhZGVyUHJvZ3JhbVxuICAgIC8vICBuYW1lOiBzaGFkZXIgYmxvY2sgbmFtZSAoZS5nLiAnY29sb3InLCAncG9zaXRpb24nLCAnZ2xvYmFsJylcbiAgICAvLyAgbnVtOiB0aGUgYmxvY2sgbnVtYmVyICp3aXRoaW4qIGxvY2FsIHNjb3BlIChlLmcuIGlmIGEgc3R5bGUgaGFzIG11bHRpcGxlICdjb2xvcicgYmxvY2tzKVxuICAgIC8vICBsaW5lOiBsaW5lIG51bWJlciAqd2l0aGluKiB0aGUgc2hhZGVyIGJsb2NrIChub3QgdGhlIHdob2xlIHNoYWRlciBwcm9ncmFtKSwgdXNlZnVsIGZvciBlcnJvciBoaWdobGlnaHRpbmdcbiAgICAvLyAgc291cmNlOiB0aGUgY29kZSBmb3IgdGhlIGxpbmVcbiAgICAvLyBOT1RFOiB0aGlzIGRvZXMgYSBicnV0ZWZvcmNlIGxvb3Agb3ZlciB0aGUgc2hhZGVyIHNvdXJjZSBhbmQgbG9va3MgZm9yIHNoYWRlciBibG9jayBzdGFydC9lbmQgbWFya2Vyc1xuICAgIC8vIFdlIGNvdWxkIHRyYWNrIGxpbmUgcmFuZ2VzIGZvciBzaGFkZXIgYmxvY2tzIGFzIHRoZXkgYXJlIGluc2VydGVkLCBidXQgYXMgdGhpcyBjb2RlIGlzIG9ubHkgdXNlZCBmb3JcbiAgICAvLyBlcnJvciBoYW5kbGluZyBvbiBjb21waWxhdGlvbiBmYWlsdXJlLCBpdCB3YXMgc2ltcGxlciB0byBrZWVwIGl0IHNlcGFyYXRlIHRoYW4gdG8gYnVyZGVuIHRoZSBjb3JlXG4gICAgLy8gY29tcGlsYXRpb24gcGF0aC5cbiAgICBibG9jayh0eXBlLCBudW0pIHtcbiAgICAgICAgbGV0IGxpbmVzID0gdGhpcy5saW5lcyh0eXBlKTtcbiAgICAgICAgbGV0IGJsb2NrO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBudW0gJiYgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbGluZSA9IGxpbmVzW2ldO1xuICAgICAgICAgICAgbGV0IG1hdGNoID0gbGluZS5tYXRjaCgvXFwvXFwvIHRhbmdyYW0tYmxvY2stc3RhcnQ6IChbQS1aYS16MC05Xy1dKyksIChbQS1aYS16MC05Xy1dKyksIChcXGQrKS8pO1xuICAgICAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGN1cnJlbnQgYmxvY2tcbiAgICAgICAgICAgICAgICBibG9jayA9IHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgbnVtOiBtYXRjaFszXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGxpbmUubWF0Y2goL1xcL1xcLyB0YW5ncmFtLWJsb2NrLWVuZDogKFtBLVphLXowLTlfLV0rKSwgKFtBLVphLXowLTlfLV0rKSwgKFxcZCspLyk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBudWxsOyAvLyBjbGVhciBjdXJyZW50IGJsb2NrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB1cGRhdGUgbGluZSAjIGFuZCBjb250ZW50XG4gICAgICAgICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgICAgICAgICAvLyBpbml0IHRvIC0xIHNvIHRoYXQgbGluZSAwIGlzIGZpcnN0IGFjdHVhbCBsaW5lIG9mIGJsb2NrIGNvZGUsIGFmdGVyIGNvbW1lbnQgbWFya2VyXG4gICAgICAgICAgICAgICAgYmxvY2subGluZSA9IChibG9jay5saW5lID09IG51bGwpID8gLTEgOiBibG9jay5saW5lICsgMTtcbiAgICAgICAgICAgICAgICBibG9jay5zb3VyY2UgPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibG9jaztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGxpc3Qgb2YgYXZhaWxhYmxlIGV4dGVuc2lvbnMgZnJvbSB0aG9zZSByZXF1ZXN0ZWRcbiAgICAvLyBTZXRzIGludGVybmFsICNkZWZpbmVzIGluZGljYXRpbmcgYXZhaWxhYmlsaXR5IG9mIGVhY2ggcmVxdWVzdGVkIGV4dGVuc2lvblxuICAgIGNoZWNrRXh0ZW5zaW9ucygpIHtcbiAgICAgICAgbGV0IGV4dHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgbmFtZSBvZiB0aGlzLmV4dGVuc2lvbnMpIHtcbiAgICAgICAgICAgIGxldCBleHQgPSBnZXRFeHRlbnNpb24odGhpcy5nbCwgbmFtZSk7XG4gICAgICAgICAgICBsZXQgZGVmID0gYFRBTkdSQU1fRVhURU5TSU9OXyR7bmFtZX1gO1xuXG4gICAgICAgICAgICB0aGlzLmRlZmluZXNbZGVmXSA9IChleHQgIT0gbnVsbCk7XG5cbiAgICAgICAgICAgIGlmIChleHQpIHtcbiAgICAgICAgICAgICAgICBleHRzLnB1c2gobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoYENvdWxkIG5vdCBlbmFibGUgZXh0ZW5zaW9uICcke25hbWV9J2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHRzO1xuICAgIH1cblxufVxuXG5cbi8vIFN0YXRpYyBtZXRob2RzIGFuZCBzdGF0ZVxuXG5TaGFkZXJQcm9ncmFtLmlkID0gMDsgICAgICAgICAgIC8vIGFzc2lnbiBlYWNoIHByb2dyYW0gYSB1bmlxdWUgaWRcblNoYWRlclByb2dyYW0ucHJvZ3JhbXMgPSB7fTsgICAgLy8gcHJvZ3JhbXMsIGJ5IGlkXG5TaGFkZXJQcm9ncmFtLmN1cnJlbnQgPSBudWxsOyAgIC8vIGN1cnJlbnRseSBib3VuZCBwcm9ncmFtXG5cbi8vIEdsb2JhbCBjb25maWcgYXBwbGllZCB0byBhbGwgcHJvZ3JhbXMgKGR1cGxpY2F0ZSBwcm9wZXJ0aWVzIGZvciBhIHNwZWNpZmljIHByb2dyYW0gd2lsbCB0YWtlIHByZWNlZGVuY2UpXG5TaGFkZXJQcm9ncmFtLmRlZmluZXMgPSB7fTtcblNoYWRlclByb2dyYW0uYmxvY2tzID0ge307XG5cbi8vIFR1cm4gYW4gb2JqZWN0IG9mIGtleS92YWx1ZSBwYWlycyBpbnRvIHNpbmdsZSBzdHJpbmcgb2YgI2RlZmluZSBzdGF0ZW1lbnRzXG5TaGFkZXJQcm9ncmFtLmJ1aWxkRGVmaW5lU3RyaW5nID0gZnVuY3Rpb24gKGRlZmluZXMpIHtcbiAgICB2YXIgZGVmaW5lX3N0ciA9IFwiXCI7XG4gICAgZm9yICh2YXIgZCBpbiBkZWZpbmVzKSB7XG4gICAgICAgIGlmIChkZWZpbmVzW2RdID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZXNbZF0gPT09ICdib29sZWFuJyAmJiBkZWZpbmVzW2RdID09PSB0cnVlKSB7IC8vIGJvb2xlYW5zIGFyZSBzaW1wbGUgZGVmaW5lcyB3aXRoIG5vIHZhbHVlXG4gICAgICAgICAgICBkZWZpbmVfc3RyICs9IFwiI2RlZmluZSBcIiArIGQgKyBcIlxcblwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmVzW2RdID09PSAnbnVtYmVyJyAmJiBNYXRoLmZsb29yKGRlZmluZXNbZF0pID09PSBkZWZpbmVzW2RdKSB7IC8vIGludCB0byBmbG9hdCBjb252ZXJzaW9uIHRvIHNhdGlzZnkgR0xTTCBmbG9hdHNcbiAgICAgICAgICAgIGRlZmluZV9zdHIgKz0gXCIjZGVmaW5lIFwiICsgZCArIFwiIFwiICsgZGVmaW5lc1tkXS50b0ZpeGVkKDEpICsgXCJcXG5cIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgLy8gYW55IG90aGVyIGZsb2F0IG9yIHN0cmluZyB2YWx1ZVxuICAgICAgICAgICAgZGVmaW5lX3N0ciArPSBcIiNkZWZpbmUgXCIgKyBkICsgXCIgXCIgKyBkZWZpbmVzW2RdICsgXCJcXG5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmaW5lX3N0cjtcbn07XG5cbi8vIFR1cm4gYSBsaXN0IG9mIGV4dGVuc2lvbiBuYW1lcyBpbnRvIHNpbmdsZSBzdHJpbmcgb2YgI2V4dGVuc2lvbiBzdGF0ZW1lbnRzXG5TaGFkZXJQcm9ncmFtLmJ1aWxkRXh0ZW5zaW9uU3RyaW5nID0gZnVuY3Rpb24gKGV4dGVuc2lvbnMpIHtcbiAgICBleHRlbnNpb25zID0gZXh0ZW5zaW9ucyB8fCBbXTtcbiAgICBsZXQgc3RyID0gXCJcIjtcbiAgICBmb3IgKGxldCBleHQgb2YgZXh0ZW5zaW9ucykge1xuICAgICAgICBzdHIgKz0gYCNpZmRlZiBHTF8ke2V4dH1cXG4jZXh0ZW5zaW9uIEdMXyR7ZXh0fSA6IGVuYWJsZVxcbiNlbmRpZlxcbmA7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59O1xuXG5TaGFkZXJQcm9ncmFtLmFkZEJsb2NrID0gZnVuY3Rpb24gKGtleSwgLi4uYmxvY2tzKSB7XG4gICAgU2hhZGVyUHJvZ3JhbS5ibG9ja3Nba2V5XSA9IFNoYWRlclByb2dyYW0uYmxvY2tzW2tleV0gfHwgW107XG4gICAgU2hhZGVyUHJvZ3JhbS5ibG9ja3Nba2V5XS5wdXNoKC4uLmJsb2Nrcyk7XG59O1xuXG4vLyBSZW1vdmUgYWxsIGdsb2JhbCBzaGFkZXIgYmxvY2tzIGZvciBhIGdpdmVuIGtleVxuU2hhZGVyUHJvZ3JhbS5yZW1vdmVCbG9jayA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBTaGFkZXJQcm9ncmFtLmJsb2Nrc1trZXldID0gW107XG59O1xuXG5TaGFkZXJQcm9ncmFtLnJlcGxhY2VCbG9jayA9IGZ1bmN0aW9uIChrZXksIC4uLmJsb2Nrcykge1xuICAgIFNoYWRlclByb2dyYW0ucmVtb3ZlQmxvY2soa2V5KTtcbiAgICBTaGFkZXJQcm9ncmFtLmFkZEJsb2NrKGtleSwgLi4uYmxvY2tzKTtcbn07XG5cbi8vIENvbXBpbGUgJiBsaW5rIGEgV2ViR0wgcHJvZ3JhbSBmcm9tIHByb3ZpZGVkIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZXNcbi8vIHVwZGF0ZSBhIHByb2dyYW0gaWYgb25lIGlzIHBhc3NlZCBpbi4gQ3JlYXRlIG9uZSBpZiBub3QuIEFsZXJ0IGFuZCBkb24ndCB1cGRhdGUgYW55dGhpbmcgaWYgdGhlIHNoYWRlcnMgZG9uJ3QgY29tcGlsZS5cblNoYWRlclByb2dyYW0udXBkYXRlUHJvZ3JhbSA9IGZ1bmN0aW9uIChnbCwgcHJvZ3JhbSwgdmVydGV4X3NoYWRlcl9zb3VyY2UsIGZyYWdtZW50X3NoYWRlcl9zb3VyY2UpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgdmVydGV4X3NoYWRlciA9IFNoYWRlclByb2dyYW0uY3JlYXRlU2hhZGVyKGdsLCB2ZXJ0ZXhfc2hhZGVyX3NvdXJjZSwgZ2wuVkVSVEVYX1NIQURFUik7XG4gICAgICAgIHZhciBmcmFnbWVudF9zaGFkZXIgPSBTaGFkZXJQcm9ncmFtLmNyZWF0ZVNoYWRlcihnbCwgZnJhZ21lbnRfc2hhZGVyX3NvdXJjZSwgZ2wuRlJBR01FTlRfU0hBREVSKTtcbiAgICB9XG4gICAgY2F0Y2goZXJyKSB7XG4gICAgICAgIGxvZy5lcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBnbC51c2VQcm9ncmFtKG51bGwpO1xuICAgIGlmIChwcm9ncmFtICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG9sZF9zaGFkZXJzID0gZ2wuZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0pO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgb2xkX3NoYWRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGdsLmRldGFjaFNoYWRlcihwcm9ncmFtLCBvbGRfc2hhZGVyc1tpXSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuICAgIH1cblxuICAgIGlmICh2ZXJ0ZXhfc2hhZGVyID09IG51bGwgfHwgZnJhZ21lbnRfc2hhZGVyID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHByb2dyYW07XG4gICAgfVxuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleF9zaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcmFnbWVudF9zaGFkZXIpO1xuXG4gICAgZ2wuZGVsZXRlU2hhZGVyKHZlcnRleF9zaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihmcmFnbWVudF9zaGFkZXIpO1xuXG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgYFdlYkdMIHByb2dyYW0gZXJyb3I6XG4gICAgICAgICAgICBWQUxJREFURV9TVEFUVVM6ICR7Z2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpfVxuICAgICAgICAgICAgRVJST1I6ICR7Z2wuZ2V0RXJyb3IoKX1cbiAgICAgICAgICAgIC0tLSBWZXJ0ZXggU2hhZGVyIC0tLVxuICAgICAgICAgICAgJHt2ZXJ0ZXhfc2hhZGVyX3NvdXJjZX1cbiAgICAgICAgICAgIC0tLSBGcmFnbWVudCBTaGFkZXIgLS0tXG4gICAgICAgICAgICAke2ZyYWdtZW50X3NoYWRlcl9zb3VyY2V9YCk7XG5cbiAgICAgICAgbGV0IGVycm9yID0geyB0eXBlOiAncHJvZ3JhbScsIG1lc3NhZ2UgfTtcbiAgICAgICAgbG9nLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvZ3JhbTtcbn07XG5cbi8vIENvbXBpbGUgYSB2ZXJ0ZXggb3IgZnJhZ21lbnQgc2hhZGVyIGZyb20gcHJvdmlkZWQgc291cmNlXG5TaGFkZXJQcm9ncmFtLmNyZWF0ZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgc291cmNlLCBzdHlwZSkge1xuICAgIGxldCBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoc3R5cGUpO1xuXG4gICAgZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc291cmNlKTtcbiAgICBnbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIWdsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSkge1xuICAgICAgICBsZXQgdHlwZSA9IChzdHlwZSA9PT0gZ2wuVkVSVEVYX1NIQURFUiA/ICd2ZXJ0ZXgnIDogJ2ZyYWdtZW50Jyk7XG4gICAgICAgIGxldCBtZXNzYWdlID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpO1xuICAgICAgICBsZXQgZXJyb3JzID0gcGFyc2VTaGFkZXJFcnJvcnMobWVzc2FnZSk7XG4gICAgICAgIHRocm93IHsgdHlwZSwgbWVzc2FnZSwgZXJyb3JzIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCIvLyBHZW5lcmF0ZWQgZnJvbSBHTFNMIGZpbGVzLCBkb24ndCBlZGl0IVxudmFyIHNoYWRlclNvdXJjZXMgPSB7fTtcblxuc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9hY2Nlc3NvcnMnXSA9XG5cIiNpZmRlZiBUQU5HUkFNX1ZFUlRFWF9TSEFERVJcXG5cIiArXG5cIlxcblwiICtcblwiLy8gVmVydGV4IHBvc2l0aW9uIGluIG1vZGVsIHNwYWNlOiBbMCwgMV0gcmFuZ2Ugb3ZlciB0aGUgbG9jYWwgdGlsZVxcblwiICtcblwiLy8gTm90ZSBwb3NpdGlvbnMgY2FuIGJlIG91dHNpZGUgdGhhdCByYW5nZSBkdWUgdG8gdW5jbGlwcGVkIGdlb21ldHJ5LCBnZW9tZXRyeSBoaWdoZXIgdGhhbiBhIHVuaXQgY3ViZSwgZXRjLlxcblwiICtcblwidmVjNCBtb2RlbFBvc2l0aW9uKCkge1xcblwiICtcblwiICAgIHJldHVyblxcblwiICtcblwiICAgICAgICB2ZWM0KFxcblwiICtcblwiICAgICAgICAgICAgU0hPUlQoYV9wb3NpdGlvbi54eXopICAgICAgICAgICAgICAgICAgICAgICAvLyBzY2FsZSBub3JtYWxpemVkIHNob3J0IHRvIGZ1bGwgcmFuZ2VcXG5cIiArXG5cIiAgICAgICAgICAgIC8gVEFOR1JBTV9USUxFX1NDQUxFICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2NhbGUgY29vcmRzIHRvIH4wLTEgcmFuZ2VcXG5cIiArXG5cIiAgICAgICAgICAgICogZXhwMih1X3RpbGVfb3JpZ2luLnogLSB1X3RpbGVfb3JpZ2luLncpLCAgLy8gYWRqdXN0IGZvciB0aWxlIG92ZXJ6b29taW5nXFxuXCIgK1xuXCIgICAgICAgIDEuKVxcblwiICtcblwiICAgICAgICArIHZlYzQoMC4sIDEuLCAwLiwgMC4pO1xcblwiICtcblwiICAgICAgICAvLyBOQjogYWRkaXRpb25hbCBvZmZzZXQgdG8gYWNjb3VudCBmb3IgdW51c3VhbCBUYW5ncmFtIEpTIHkgY29vcmRzLFxcblwiICtcblwiICAgICAgICAvLyBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byByZW1vdmVcXG5cIiArXG5cIn1cXG5cIiArXG5cIlxcblwiICtcblwiLy8gUG9zaXRpb24gaW4gbW9kZWwgc3BhY2UgYXMgYWJvdmUsIGJ1dCBhY2NvcmRpbmcgdG8gdGlsZSBjb29yZGluYXRlIChhcyBvcHBvc2VkIHRvIHN0eWxlKSB6b29tXFxuXCIgK1xuXCIvLyBlLmcuIHVuYWRqdXN0ZWQgZm9yIHRpbGUgb3Zlcnpvb21pbmdcXG5cIiArXG5cInZlYzQgbW9kZWxQb3NpdGlvbkJhc2Vab29tKCkge1xcblwiICtcblwiICAgIHJldHVyblxcblwiICtcblwiICAgICAgICB2ZWM0KFxcblwiICtcblwiICAgICAgICAgICAgU0hPUlQoYV9wb3NpdGlvbi54eXopICAgLy8gc2NhbGUgbm9ybWFsaXplZCBzaG9ydCB0byBmdWxsIHJhbmdlXFxuXCIgK1xuXCIgICAgICAgICAgICAvIFRBTkdSQU1fVElMRV9TQ0FMRSwgICAvLyBzY2FsZSBjb29yZHMgdG8gfjAtMSByYW5nZVxcblwiICtcblwiICAgICAgICAxLilcXG5cIiArXG5cIiAgICAgICAgKyB2ZWM0KDAuLCAxLiwgMC4sIDAuKTtcXG5cIiArXG5cIn1cXG5cIiArXG5cIlxcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIFZlcnRleCBwb3NpdGlvbiBpbiB3b3JsZCBjb29yZGluYXRlcywgdXNlZnVsIGZvciAzZCBwcm9jZWR1cmFsIHRleHR1cmVzLCBldGMuXFxuXCIgK1xuXCJ2ZWM0IHdvcmxkUG9zaXRpb24oKSB7XFxuXCIgK1xuXCIgICAgcmV0dXJuIHZfd29ybGRfcG9zaXRpb247XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIE9wdGlvbmFsbHkgd3JhcCB3b3JsZCBjb29yZGluYXRlcyAoYWxsb3dzIG1vcmUgcHJlY2lzaW9uIGF0IGhpZ2hlciB6b29tcylcXG5cIiArXG5cIi8vIGUuZy4gYXQgd3JhcCAxMDAwLCB0aGUgd29ybGQgc3BhY2Ugd2lsbCB3cmFwIGV2ZXJ5IDEwMDAgbWV0ZXJzXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9WRVJURVhfU0hBREVSXFxuXCIgK1xuXCJcXG5cIiArXG5cInZlYzQgd3JhcFdvcmxkUG9zaXRpb24odmVjNCB3b3JsZF9wb3NpdGlvbikge1xcblwiICtcblwiICAgICNpZiBkZWZpbmVkKFRBTkdSQU1fV09STERfUE9TSVRJT05fV1JBUClcXG5cIiArXG5cIiAgICB2ZWMyIGFuY2hvciA9IHVfdGlsZV9vcmlnaW4ueHkgLSBtb2QodV90aWxlX29yaWdpbi54eSwgVEFOR1JBTV9XT1JMRF9QT1NJVElPTl9XUkFQKTtcXG5cIiArXG5cIiAgICAgICAgd29ybGRfcG9zaXRpb24ueHkgLT0gYW5jaG9yO1xcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiICAgIHJldHVybiB3b3JsZF9wb3NpdGlvbjtcXG5cIiArXG5cIn1cXG5cIiArXG5cIlxcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIE5vcm1hbCBpbiB3b3JsZCBzcGFjZVxcblwiICtcblwiI2lmIGRlZmluZWQoVEFOR1JBTV9WRVJURVhfU0hBREVSKVxcblwiICtcblwiXFxuXCIgK1xuXCJ2ZWMzIHdvcmxkTm9ybWFsKCkge1xcblwiICtcblwiICAgIHJldHVybiBUQU5HUkFNX05PUk1BTDtcXG5cIiArXG5cIn1cXG5cIiArXG5cIlxcblwiICtcblwiI2VsaWYgZGVmaW5lZChUQU5HUkFNX0ZSQUdNRU5UX1NIQURFUilcXG5cIiArXG5cIlxcblwiICtcblwidmVjMyB3b3JsZE5vcm1hbCgpIHtcXG5cIiArXG5cIiAgICByZXR1cm4gdV9pbnZlcnNlTm9ybWFsTWF0cml4ICogVEFOR1JBTV9OT1JNQUw7XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXCI7XG5cbnNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvYW1iaWVudExpZ2h0J10gPVxuXCIvKlxcblwiICtcblwiXFxuXCIgK1xuXCJFeHBlY3RlZCBnbG9iYWxzOlxcblwiICtcblwibGlnaHRfYWNjdW11bGF0b3JfKlxcblwiICtcblwiXFxuXCIgK1xuXCIqL1xcblwiICtcblwiXFxuXCIgK1xuXCJzdHJ1Y3QgQW1iaWVudExpZ2h0IHtcXG5cIiArXG5cIiAgICB2ZWM0IGFtYmllbnQ7XFxuXCIgK1xuXCJ9O1xcblwiICtcblwiXFxuXCIgK1xuXCJ2b2lkIGNhbGN1bGF0ZUxpZ2h0KGluIEFtYmllbnRMaWdodCBfbGlnaHQsIGluIHZlYzMgX2V5ZVRvUG9pbnQsIGluIHZlYzMgX25vcm1hbCkge1xcblwiICtcblwiICAgIGxpZ2h0X2FjY3VtdWxhdG9yX2FtYmllbnQgKz0gX2xpZ2h0LmFtYmllbnQ7XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcIjtcblxuc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9kaXJlY3Rpb25hbExpZ2h0J10gPVxuXCIvKlxcblwiICtcblwiXFxuXCIgK1xuXCJFeHBlY3RlZCBnbG9iYWxzOlxcblwiICtcblwibWF0ZXJpYWxcXG5cIiArXG5cImxpZ2h0X2FjY3VtdWxhdG9yXypcXG5cIiArXG5cIlxcblwiICtcblwiKi9cXG5cIiArXG5cIlxcblwiICtcblwic3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xcblwiICtcblwiICAgIHZlYzQgYW1iaWVudDtcXG5cIiArXG5cIiAgICB2ZWM0IGRpZmZ1c2U7XFxuXCIgK1xuXCIgICAgdmVjNCBzcGVjdWxhcjtcXG5cIiArXG5cIiAgICB2ZWMzIGRpcmVjdGlvbjtcXG5cIiArXG5cIn07XFxuXCIgK1xuXCJcXG5cIiArXG5cInZvaWQgY2FsY3VsYXRlTGlnaHQoaW4gRGlyZWN0aW9uYWxMaWdodCBfbGlnaHQsIGluIHZlYzMgX2V5ZVRvUG9pbnQsIGluIHZlYzMgX25vcm1hbCkge1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgbGlnaHRfYWNjdW11bGF0b3JfYW1iaWVudCArPSBfbGlnaHQuYW1iaWVudDtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIGZsb2F0IG5Eb3RWUCA9IGNsYW1wKGRvdChfbm9ybWFsLCAtbm9ybWFsaXplKF9saWdodC5kaXJlY3Rpb24pKSwgMC4wLCAxLjApO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRVxcblwiICtcblwiICAgICAgICBsaWdodF9hY2N1bXVsYXRvcl9kaWZmdXNlICs9IF9saWdodC5kaWZmdXNlICogbkRvdFZQO1xcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfU1BFQ1VMQVJcXG5cIiArXG5cIiAgICAgICAgZmxvYXQgcGYgPSAwLjA7XFxuXCIgK1xuXCIgICAgICAgIGlmIChuRG90VlAgPiAwLjApIHtcXG5cIiArXG5cIiAgICAgICAgICAgIHZlYzMgcmVmbGVjdFZlY3RvciA9IHJlZmxlY3Qobm9ybWFsaXplKF9saWdodC5kaXJlY3Rpb24pLCBfbm9ybWFsKTtcXG5cIiArXG5cIiAgICAgICAgICAgIGZsb2F0IGV5ZURvdFIgPSBtYXgoZG90KG5vcm1hbGl6ZShfZXllVG9Qb2ludCksIHJlZmxlY3RWZWN0b3IpLCAwLjApO1xcblwiICtcblwiICAgICAgICAgICAgcGYgPSBwb3coZXllRG90UiwgbWF0ZXJpYWwuc2hpbmluZXNzKTtcXG5cIiArXG5cIiAgICAgICAgfVxcblwiICtcblwiICAgICAgICBsaWdodF9hY2N1bXVsYXRvcl9zcGVjdWxhciArPSBfbGlnaHQuc3BlY3VsYXIgKiBwZjtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIn1cXG5cIiArXG5cIlwiO1xuXG5zaGFkZXJTb3VyY2VzWydnbC9zaGFkZXJzL2xheWVyX29yZGVyJ10gPVxuXCIvLyBBcHBseSBsYXllciBvcmRlcmluZyB0byBhdm9pZCB6LWZpZ2h0aW5nXFxuXCIgK1xuXCJ2b2lkIGFwcGx5TGF5ZXJPcmRlciAoZmxvYXQgbGF5ZXIsIGlub3V0IHZlYzQgcG9zaXRpb24pIHtcXG5cIiArXG5cIiAgICBwb3NpdGlvbi56IC09IGxheWVyICogVEFOR1JBTV9MQVlFUl9ERUxUQSAqIHBvc2l0aW9uLnc7XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcIjtcblxuc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9tYXRlcmlhbCddID1cblwiLypcXG5cIiArXG5cIlxcblwiICtcblwiRGVmaW5lcyBnbG9iYWxzOlxcblwiICtcblwibWF0ZXJpYWxcXG5cIiArXG5cImxpZ2h0X2FjY3VtdWxhdG9yXypcXG5cIiArXG5cIlxcblwiICtcblwiKi9cXG5cIiArXG5cIlxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBNQVRFUklBTFNcXG5cIiArXG5cIi8vXFxuXCIgK1xuXCJzdHJ1Y3QgTWF0ZXJpYWwge1xcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0VNSVNTSU9OXFxuXCIgK1xuXCIgICAgICAgIHZlYzQgZW1pc3Npb247XFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0VNSVNTSU9OX1RFWFRVUkVcXG5cIiArXG5cIiAgICAgICAgICAgIHZlYzMgZW1pc3Npb25TY2FsZTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9BTUJJRU5UXFxuXCIgK1xuXCIgICAgICAgIHZlYzQgYW1iaWVudDtcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfQU1CSUVOVF9URVhUVVJFXFxuXCIgK1xuXCIgICAgICAgICAgICB2ZWMzIGFtYmllbnRTY2FsZTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9ESUZGVVNFXFxuXCIgK1xuXCIgICAgICAgIHZlYzQgZGlmZnVzZTtcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRV9URVhUVVJFXFxuXCIgK1xuXCIgICAgICAgICAgICB2ZWMzIGRpZmZ1c2VTY2FsZTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9TUEVDVUxBUlxcblwiICtcblwiICAgICAgICB2ZWM0IHNwZWN1bGFyO1xcblwiICtcblwiICAgICAgICBmbG9hdCBzaGluaW5lc3M7XFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX1NQRUNVTEFSX1RFWFRVUkVcXG5cIiArXG5cIiAgICAgICAgICAgIHZlYzMgc3BlY3VsYXJTY2FsZTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIlxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX05PUk1BTF9URVhUVVJFXFxuXCIgK1xuXCIgICAgICAgIHZlYzMgbm9ybWFsU2NhbGU7XFxuXCIgK1xuXCIgICAgICAgIGZsb2F0IG5vcm1hbEFtb3VudDtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIn07XFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIE5vdGU6IHVuaWZvcm0gaXMgY29waWVkIHRvIGEgZ2xvYmFsIGluc3RhbmNlIHRvIGFsbG93IG1vZGlmaWNhdGlvblxcblwiICtcblwidW5pZm9ybSBNYXRlcmlhbCB1X21hdGVyaWFsO1xcblwiICtcblwiTWF0ZXJpYWwgbWF0ZXJpYWw7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0VNSVNTSU9OX1RFWFRVUkVcXG5cIiArXG5cInVuaWZvcm0gc2FtcGxlcjJEIHVfbWF0ZXJpYWxfZW1pc3Npb25fdGV4dHVyZTtcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9BTUJJRU5UX1RFWFRVUkVcXG5cIiArXG5cInVuaWZvcm0gc2FtcGxlcjJEIHVfbWF0ZXJpYWxfYW1iaWVudF90ZXh0dXJlO1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0RJRkZVU0VfVEVYVFVSRVxcblwiICtcblwidW5pZm9ybSBzYW1wbGVyMkQgdV9tYXRlcmlhbF9kaWZmdXNlX3RleHR1cmU7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfU1BFQ1VMQVJfVEVYVFVSRVxcblwiICtcblwidW5pZm9ybSBzYW1wbGVyMkQgdV9tYXRlcmlhbF9zcGVjdWxhcl90ZXh0dXJlO1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX05PUk1BTF9URVhUVVJFXFxuXCIgK1xuXCJ1bmlmb3JtIHNhbXBsZXIyRCB1X21hdGVyaWFsX25vcm1hbF90ZXh0dXJlO1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIEdsb2JhbCBsaWdodCBhY2N1bXVsYXRvcnMgZm9yIGVhY2ggcHJvcGVydHlcXG5cIiArXG5cInZlYzQgbGlnaHRfYWNjdW11bGF0b3JfYW1iaWVudCA9IHZlYzQoMC4wKTtcXG5cIiArXG5cInZlYzQgbGlnaHRfYWNjdW11bGF0b3JfZGlmZnVzZSA9IHZlYzQoMC4wKTtcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX1NQRUNVTEFSXFxuXCIgK1xuXCIgICAgdmVjNCBsaWdodF9hY2N1bXVsYXRvcl9zcGVjdWxhciA9IHZlYzQoMC4wKTtcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX1RFWFRVUkVfU1BIRVJFTUFQXFxuXCIgK1xuXCJ2ZWM0IGdldFNwaGVyZU1hcCAoaW4gc2FtcGxlcjJEIF90ZXgsIGluIHZlYzMgX2V5ZVRvUG9pbnQsIGluIHZlYzMgX25vcm1hbCwgaW4gdmVjMiBfc2tldykge1xcblwiICtcblwiICAgIHZlYzMgZXllID0gbm9ybWFsaXplKF9leWVUb1BvaW50KTtcXG5cIiArXG5cIiAgICBleWUueHkgLT0gX3NrZXc7XFxuXCIgK1xuXCIgICAgZXllID0gbm9ybWFsaXplKGV5ZSk7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICB2ZWMzIHIgPSByZWZsZWN0KGV5ZSwgX25vcm1hbCk7XFxuXCIgK1xuXCIgICAgci56ICs9IDEuMDtcXG5cIiArXG5cIiAgICBmbG9hdCBtID0gMi4gKiBsZW5ndGgocik7XFxuXCIgK1xuXCIgICAgdmVjMiB1diA9IHIueHkgLyBtICsgLjU7XFxuXCIgK1xuXCIgICAgcmV0dXJuIHRleHR1cmUyRChfdGV4LCB1dik7XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9URVhUVVJFX1RSSVBMQU5BUlxcblwiICtcblwidmVjMyBnZXRUcmlQbGFuYXJCbGVuZCAoaW4gdmVjMyBfbm9ybWFsKSB7XFxuXCIgK1xuXCIgICAgdmVjMyBibGVuZGluZyA9IGFicyhfbm9ybWFsKTtcXG5cIiArXG5cIiAgICBibGVuZGluZyA9IG5vcm1hbGl6ZShtYXgoYmxlbmRpbmcsIDAuMDAwMDEpKTtcXG5cIiArXG5cIiAgICBmbG9hdCBiID0gKGJsZW5kaW5nLnggKyBibGVuZGluZy55ICsgYmxlbmRpbmcueik7XFxuXCIgK1xuXCIgICAgcmV0dXJuIGJsZW5kaW5nIC8gYjtcXG5cIiArXG5cIn1cXG5cIiArXG5cIlxcblwiICtcblwidmVjNCBnZXRUcmlQbGFuYXIgKGluIHNhbXBsZXIyRCBfdGV4LCBpbiB2ZWMzIF9wb3MsIGluIHZlYzMgX25vcm1hbCwgaW4gdmVjMyBfc2NhbGUpIHtcXG5cIiArXG5cIiAgICB2ZWMzIGJsZW5kaW5nID0gZ2V0VHJpUGxhbmFyQmxlbmQoX25vcm1hbCk7XFxuXCIgK1xuXCIgICAgdmVjNCB4YXhpcyA9IHRleHR1cmUyRChfdGV4LCBmcmFjdChfcG9zLnl6ICogX3NjYWxlLngpKTtcXG5cIiArXG5cIiAgICB2ZWM0IHlheGlzID0gdGV4dHVyZTJEKF90ZXgsIGZyYWN0KF9wb3MueHogKiBfc2NhbGUueSkpO1xcblwiICtcblwiICAgIHZlYzQgemF4aXMgPSB0ZXh0dXJlMkQoX3RleCwgZnJhY3QoX3Bvcy54eSAqIF9zY2FsZS56KSk7XFxuXCIgK1xuXCIgICAgcmV0dXJuICB4YXhpcyAqIGJsZW5kaW5nLnggKyB5YXhpcyAqIGJsZW5kaW5nLnkgKyB6YXhpcyAqIGJsZW5kaW5nLno7XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9URVhUVVJFX1BMQU5BUlxcblwiICtcblwidmVjNCBnZXRQbGFuYXIgKGluIHNhbXBsZXIyRCBfdGV4LCBpbiB2ZWMzIF9wb3MsIGluIHZlYzIgX3NjYWxlKSB7XFxuXCIgK1xuXCIgICAgcmV0dXJuIHRleHR1cmUyRCggX3RleCwgZnJhY3QoX3Bvcy54eSAqIF9zY2FsZS54KSApO1xcblwiICtcblwifVxcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfTk9STUFMX1RFWFRVUkVcXG5cIiArXG5cInZvaWQgY2FsY3VsYXRlTm9ybWFsIChpbm91dCB2ZWMzIF9ub3JtYWwpIHtcXG5cIiArXG5cIiAgICAvLyBHZXQgTk9STUFMTUFQXFxuXCIgK1xuXCIgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9OT1JNQUxfVEVYVFVSRV9VVlxcblwiICtcblwiICAgIF9ub3JtYWwgKz0gdGV4dHVyZTJEKHVfbWF0ZXJpYWxfbm9ybWFsX3RleHR1cmUsIGZyYWN0KHZfdGV4Y29vcmQqbWF0ZXJpYWwubm9ybWFsU2NhbGUueHkpKS5yZ2IqMi4wLTEuMDtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX05PUk1BTF9URVhUVVJFX1BMQU5BUlxcblwiICtcblwiICAgIHZlYzMgbm9ybWFsVGV4ID0gZ2V0UGxhbmFyKHVfbWF0ZXJpYWxfbm9ybWFsX3RleHR1cmUsIHZfd29ybGRfcG9zaXRpb24ueHl6LCBtYXRlcmlhbC5ub3JtYWxTY2FsZS54eSkucmdiKjIuMC0xLjA7XFxuXCIgK1xuXCIgICAgX25vcm1hbCArPSBub3JtYWxUZXg7XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9OT1JNQUxfVEVYVFVSRV9UUklQTEFOQVJcXG5cIiArXG5cIiAgICB2ZWMzIG5vcm1hbFRleCA9IGdldFRyaVBsYW5hcih1X21hdGVyaWFsX25vcm1hbF90ZXh0dXJlLCB2X3dvcmxkX3Bvc2l0aW9uLnh5eiwgX25vcm1hbCwgbWF0ZXJpYWwubm9ybWFsU2NhbGUpLnJnYioyLjAtMS4wO1xcblwiICtcblwiICAgIF9ub3JtYWwgKz0gbm9ybWFsVGV4O1xcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgX25vcm1hbCA9IG5vcm1hbGl6ZShfbm9ybWFsKTtcXG5cIiArXG5cIn1cXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCJ2b2lkIGNhbGN1bGF0ZU1hdGVyaWFsIChpbiB2ZWMzIF9leWVUb1BvaW50LCBpbm91dCB2ZWMzIF9ub3JtYWwpIHtcXG5cIiArXG5cIiAgICAvLyBnZXQgRU1JU1NJT04gVEVYVFVSRU1BUFxcblwiICtcblwiICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRU1JU1NJT05fVEVYVFVSRVxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9FTUlTU0lPTl9URVhUVVJFX1VWXFxuXCIgK1xuXCIgICAgICAgIG1hdGVyaWFsLmVtaXNzaW9uICo9IHRleHR1cmUyRCh1X21hdGVyaWFsX2VtaXNzaW9uX3RleHR1cmUsdl90ZXhjb29yZCk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0VNSVNTSU9OX1RFWFRVUkVfUExBTkFSXFxuXCIgK1xuXCIgICAgICAgIG1hdGVyaWFsLmVtaXNzaW9uICo9IGdldFBsYW5hcih1X21hdGVyaWFsX2VtaXNzaW9uX3RleHR1cmUsIHZfd29ybGRfcG9zaXRpb24ueHl6LCBtYXRlcmlhbC5lbWlzc2lvblNjYWxlLnh5KTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRU1JU1NJT05fVEVYVFVSRV9UUklQTEFOQVJcXG5cIiArXG5cIiAgICAgICAgbWF0ZXJpYWwuZW1pc3Npb24gKj0gZ2V0VHJpUGxhbmFyKHVfbWF0ZXJpYWxfZW1pc3Npb25fdGV4dHVyZSwgdl93b3JsZF9wb3NpdGlvbi54eXosIF9ub3JtYWwsIG1hdGVyaWFsLmVtaXNzaW9uU2NhbGUpO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9FTUlTU0lPTl9URVhUVVJFX1NQSEVSRU1BUFxcblwiICtcblwiICAgICAgICBtYXRlcmlhbC5lbWlzc2lvbiAqPSBnZXRTcGhlcmVNYXAodV9tYXRlcmlhbF9lbWlzc2lvbl90ZXh0dXJlLCBfZXllVG9Qb2ludCwgX25vcm1hbCwgdV92YW5pc2hpbmdfcG9pbnQpO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIGdldCBBTUJJRU5UIFRFWFRVUkVNQVBcXG5cIiArXG5cIiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0FNQklFTlRfVEVYVFVSRVxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9BTUJJRU5UX1RFWFRVUkVfVVZcXG5cIiArXG5cIiAgICAgICAgbWF0ZXJpYWwuYW1iaWVudCAqPSB0ZXh0dXJlMkQodV9tYXRlcmlhbF9hbWJpZW50X3RleHR1cmUsdl90ZXhjb29yZCk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0FNQklFTlRfVEVYVFVSRV9QTEFOQVJcXG5cIiArXG5cIiAgICAgICAgbWF0ZXJpYWwuYW1iaWVudCAqPSBnZXRQbGFuYXIodV9tYXRlcmlhbF9hbWJpZW50X3RleHR1cmUsIHZfd29ybGRfcG9zaXRpb24ueHl6LCBtYXRlcmlhbC5hbWJpZW50U2NhbGUueHkpO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9BTUJJRU5UX1RFWFRVUkVfVFJJUExBTkFSXFxuXCIgK1xuXCIgICAgICAgIG1hdGVyaWFsLmFtYmllbnQgKj0gZ2V0VHJpUGxhbmFyKHVfbWF0ZXJpYWxfYW1iaWVudF90ZXh0dXJlLCB2X3dvcmxkX3Bvc2l0aW9uLnh5eiwgX25vcm1hbCwgbWF0ZXJpYWwuYW1iaWVudFNjYWxlKTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfQU1CSUVOVF9URVhUVVJFX1NQSEVSRU1BUFxcblwiICtcblwiICAgICAgICBtYXRlcmlhbC5hbWJpZW50ICo9IGdldFNwaGVyZU1hcCh1X21hdGVyaWFsX2FtYmllbnRfdGV4dHVyZSwgX2V5ZVRvUG9pbnQsIF9ub3JtYWwsIHVfdmFuaXNoaW5nX3BvaW50KTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBnZXQgRElGRlVTRSBURVhUVVJFTUFQXFxuXCIgK1xuXCIgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9ESUZGVVNFX1RFWFRVUkVcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRV9URVhUVVJFX1VWXFxuXCIgK1xuXCIgICAgICAgIG1hdGVyaWFsLmRpZmZ1c2UgKj0gdGV4dHVyZTJEKHVfbWF0ZXJpYWxfZGlmZnVzZV90ZXh0dXJlLHZfdGV4Y29vcmQpO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9ESUZGVVNFX1RFWFRVUkVfUExBTkFSXFxuXCIgK1xuXCIgICAgICAgIG1hdGVyaWFsLmRpZmZ1c2UgKj0gZ2V0UGxhbmFyKHVfbWF0ZXJpYWxfZGlmZnVzZV90ZXh0dXJlLCB2X3dvcmxkX3Bvc2l0aW9uLnh5eiwgbWF0ZXJpYWwuZGlmZnVzZVNjYWxlLnh5KTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRV9URVhUVVJFX1RSSVBMQU5BUlxcblwiICtcblwiICAgICAgICBtYXRlcmlhbC5kaWZmdXNlICo9IGdldFRyaVBsYW5hcih1X21hdGVyaWFsX2RpZmZ1c2VfdGV4dHVyZSwgdl93b3JsZF9wb3NpdGlvbi54eXosIF9ub3JtYWwsIG1hdGVyaWFsLmRpZmZ1c2VTY2FsZSk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0RJRkZVU0VfVEVYVFVSRV9TUEhFUkVNQVBcXG5cIiArXG5cIiAgICAgICAgbWF0ZXJpYWwuZGlmZnVzZSAqPSBnZXRTcGhlcmVNYXAodV9tYXRlcmlhbF9kaWZmdXNlX3RleHR1cmUsIF9leWVUb1BvaW50LCBfbm9ybWFsLCB1X3ZhbmlzaGluZ19wb2ludCk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gZ2V0IFNQRUNVTEFSIFRFWFRVUkVNQVBcXG5cIiArXG5cIiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX1NQRUNVTEFSX1RFWFRVUkVcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfU1BFQ1VMQVJfVEVYVFVSRV9VVlxcblwiICtcblwiICAgICAgICBtYXRlcmlhbC5zcGVjdWxhciAqPSB0ZXh0dXJlMkQodV9tYXRlcmlhbF9zcGVjdWxhcl90ZXh0dXJlLHZfdGV4Y29vcmQpO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9TUEVDVUxBUl9URVhUVVJFX1BMQU5BUlxcblwiICtcblwiICAgICAgICBtYXRlcmlhbC5zcGVjdWxhciAqPSBnZXRQbGFuYXIodV9tYXRlcmlhbF9zcGVjdWxhcl90ZXh0dXJlLCB2X3dvcmxkX3Bvc2l0aW9uLnh5eiwgbWF0ZXJpYWwuc3BlY3VsYXJTY2FsZS54eSk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX1NQRUNVTEFSX1RFWFRVUkVfVFJJUExBTkFSXFxuXCIgK1xuXCIgICAgICAgIG1hdGVyaWFsLnNwZWN1bGFyICo9IGdldFRyaVBsYW5hcih1X21hdGVyaWFsX3NwZWN1bGFyX3RleHR1cmUsIHZfd29ybGRfcG9zaXRpb24ueHl6LCBfbm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhclNjYWxlKTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfU1BFQ1VMQVJfVEVYVFVSRV9TUEhFUkVNQVBcXG5cIiArXG5cIiAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXIgKj0gZ2V0U3BoZXJlTWFwKHVfbWF0ZXJpYWxfc3BlY3VsYXJfdGV4dHVyZSwgX2V5ZVRvUG9pbnQsIF9ub3JtYWwsIHVfdmFuaXNoaW5nX3BvaW50KTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcIjtcblxuc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9wb2ludExpZ2h0J10gPVxuXCIvKlxcblwiICtcblwiXFxuXCIgK1xuXCJFeHBlY3RlZCBnbG9iYWxzOlxcblwiICtcblwibWF0ZXJpYWxcXG5cIiArXG5cImxpZ2h0X2FjY3VtdWxhdG9yXypcXG5cIiArXG5cIlxcblwiICtcblwiKi9cXG5cIiArXG5cIlxcblwiICtcblwic3RydWN0IFBvaW50TGlnaHQge1xcblwiICtcblwiICAgIHZlYzQgYW1iaWVudDtcXG5cIiArXG5cIiAgICB2ZWM0IGRpZmZ1c2U7XFxuXCIgK1xuXCIgICAgdmVjNCBzcGVjdWxhcjtcXG5cIiArXG5cIiAgICB2ZWM0IHBvc2l0aW9uO1xcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX0VYUE9ORU5UXFxuXCIgK1xuXCIgICAgZmxvYXQgYXR0ZW51YXRpb25FeHBvbmVudDtcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX0lOTkVSX1JBRElVU1xcblwiICtcblwiICAgIGZsb2F0IGlubmVyUmFkaXVzO1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fT1VURVJfUkFESVVTXFxuXCIgK1xuXCIgICAgZmxvYXQgb3V0ZXJSYWRpdXM7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIn07XFxuXCIgK1xuXCJcXG5cIiArXG5cInZvaWQgY2FsY3VsYXRlTGlnaHQoaW4gUG9pbnRMaWdodCBfbGlnaHQsIGluIHZlYzMgX2V5ZVRvUG9pbnQsIGluIHZlYzMgX25vcm1hbCkge1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgZmxvYXQgZGlzdCA9IGxlbmd0aChfbGlnaHQucG9zaXRpb24ueHl6IC0gX2V5ZVRvUG9pbnQpO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gQ29tcHV0ZSB2ZWN0b3IgZnJvbSBzdXJmYWNlIHRvIGxpZ2h0IHBvc2l0aW9uXFxuXCIgK1xuXCIgICAgdmVjMyBWUCA9IChfbGlnaHQucG9zaXRpb24ueHl6IC0gX2V5ZVRvUG9pbnQpIC8gZGlzdDtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIE5vcm1hbGl6ZSB0aGUgdmVjdG9yIGZyb20gc3VyZmFjZSB0byBsaWdodCBwb3NpdGlvblxcblwiICtcblwiICAgIGZsb2F0IG5Eb3RWUCA9IGNsYW1wKGRvdChWUCwgX25vcm1hbCksIDAuMCwgMS4wKTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIEF0dGVudWF0aW9uIGRlZmF1bHRzXFxuXCIgK1xuXCIgICAgZmxvYXQgYXR0ZW51YXRpb24gPSAxLjA7XFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9FWFBPTkVOVFxcblwiICtcblwiICAgICAgICBmbG9hdCBSaW4gPSAxLjA7XFxuXCIgK1xuXCIgICAgICAgIGZsb2F0IGUgPSBfbGlnaHQuYXR0ZW51YXRpb25FeHBvbmVudDtcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX0lOTkVSX1JBRElVU1xcblwiICtcblwiICAgICAgICAgICAgUmluID0gX2xpZ2h0LmlubmVyUmFkaXVzO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX09VVEVSX1JBRElVU1xcblwiICtcblwiICAgICAgICAgICAgZmxvYXQgUmRpZmYgPSBfbGlnaHQub3V0ZXJSYWRpdXMtUmluO1xcblwiICtcblwiICAgICAgICAgICAgZmxvYXQgZCA9IGNsYW1wKG1heCgwLjAsZGlzdC1SaW4pL1JkaWZmLCAwLjAsIDEuMCk7XFxuXCIgK1xuXCIgICAgICAgICAgICBhdHRlbnVhdGlvbiA9IDEuMC0ocG93KGQsZSkpO1xcblwiICtcblwiICAgICAgICAjZWxzZVxcblwiICtcblwiICAgICAgICAgICAgLy8gSWYgbm8gb3V0ZXIgaXMgcHJvdmlkZSBiZWhhdmVzIGxpa2U6XFxuXCIgK1xuXCIgICAgICAgICAgICAvLyBodHRwczovL2ltZG9pbmdpdHdyb25nLndvcmRwcmVzcy5jb20vMjAxMS8wMS8zMS9saWdodC1hdHRlbnVhdGlvbi9cXG5cIiArXG5cIiAgICAgICAgICAgIGZsb2F0IGQgPSBtYXgoMC4wLGRpc3QtUmluKS9SaW4rMS4wO1xcblwiICtcblwiICAgICAgICAgICAgYXR0ZW51YXRpb24gPSBjbGFtcCgxLjAvKHBvdyhkLGUpKSwgMC4wLCAxLjApO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIiAgICAjZWxzZVxcblwiICtcblwiICAgICAgICBmbG9hdCBSaW4gPSAwLjA7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9JTk5FUl9SQURJVVNcXG5cIiArXG5cIiAgICAgICAgICAgIFJpbiA9IF9saWdodC5pbm5lclJhZGl1cztcXG5cIiArXG5cIiAgICAgICAgICAgICNpZmRlZiBUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fT1VURVJfUkFESVVTXFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgZmxvYXQgUmRpZmYgPSBfbGlnaHQub3V0ZXJSYWRpdXMtUmluO1xcblwiICtcblwiICAgICAgICAgICAgICAgIGZsb2F0IGQgPSBjbGFtcChtYXgoMC4wLGRpc3QtUmluKS9SZGlmZiwgMC4wLCAxLjApO1xcblwiICtcblwiICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uID0gMS4wLWQqZDtcXG5cIiArXG5cIiAgICAgICAgICAgICNlbHNlXFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgLy8gSWYgbm8gb3V0ZXIgaXMgcHJvdmlkZSBiZWhhdmVzIGxpa2U6XFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9pbWRvaW5naXR3cm9uZy53b3JkcHJlc3MuY29tLzIwMTEvMDEvMzEvbGlnaHQtYXR0ZW51YXRpb24vXFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgZmxvYXQgZCA9IG1heCgwLjAsZGlzdC1SaW4pL1JpbisxLjA7XFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgYXR0ZW51YXRpb24gPSBjbGFtcCgxLjAvZCwgMC4wLCAxLjApO1xcblwiICtcblwiICAgICAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgICAgICNlbHNlXFxuXCIgK1xuXCIgICAgICAgICAgICAjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX09VVEVSX1JBRElVU1xcblwiICtcblwiICAgICAgICAgICAgICAgIGZsb2F0IGQgPSBjbGFtcChkaXN0L19saWdodC5vdXRlclJhZGl1cywgMC4wLCAxLjApO1xcblwiICtcblwiICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uID0gMS4wLWQqZDtcXG5cIiArXG5cIiAgICAgICAgICAgICNlbHNlXFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgYXR0ZW51YXRpb24gPSAxLjA7XFxuXCIgK1xuXCIgICAgICAgICAgICAjZW5kaWZcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBDb21wdXRlciBhY2N1bXVsYXRvcnNcXG5cIiArXG5cIiAgICBsaWdodF9hY2N1bXVsYXRvcl9hbWJpZW50ICs9IF9saWdodC5hbWJpZW50ICogYXR0ZW51YXRpb247XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9ESUZGVVNFXFxuXCIgK1xuXCIgICAgICAgIGxpZ2h0X2FjY3VtdWxhdG9yX2RpZmZ1c2UgKz0gX2xpZ2h0LmRpZmZ1c2UgKiBuRG90VlAgKiBhdHRlbnVhdGlvbjtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX1NQRUNVTEFSXFxuXCIgK1xuXCIgICAgICAgIGZsb2F0IHBmID0gMC4wOyAvLyBwb3dlciBmYWN0b3IgZm9yIHNoaW55IHNwZWN1bGFyc1xcblwiICtcblwiICAgICAgICBpZiAobkRvdFZQID4gMC4wKSB7XFxuXCIgK1xuXCIgICAgICAgICAgICB2ZWMzIHJlZmxlY3RWZWN0b3IgPSByZWZsZWN0KC1WUCwgX25vcm1hbCk7XFxuXCIgK1xuXCIgICAgICAgICAgICBmbG9hdCBleWVEb3RSID0gbWF4KDAuMCwgZG90KC1ub3JtYWxpemUoX2V5ZVRvUG9pbnQpLCByZWZsZWN0VmVjdG9yKSk7XFxuXCIgK1xuXCIgICAgICAgICAgICBwZiA9IHBvdyhleWVEb3RSLCBtYXRlcmlhbC5zaGluaW5lc3MpO1xcblwiICtcblwiICAgICAgICB9XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgbGlnaHRfYWNjdW11bGF0b3Jfc3BlY3VsYXIgKz0gX2xpZ2h0LnNwZWN1bGFyICogcGYgKiBhdHRlbnVhdGlvbjtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIn1cXG5cIiArXG5cIlwiO1xuXG5zaGFkZXJTb3VyY2VzWydnbC9zaGFkZXJzL3Jhc3RlcnMnXSA9XG5cIi8vIFVuaWZvcm1zIGRlZmluaW5nIHJhc3RlciB0ZXh0dXJlcyBhbmQgbWFjcm9zIGZvciBhY2Nlc3NpbmcgdGhlbVxcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9GUkFHTUVOVF9TSEFERVJcXG5cIiArXG5cInVuaWZvcm0gc2FtcGxlcjJEIHVfcmFzdGVyc1tUQU5HUkFNX05VTV9SQVNURVJfU09VUkNFU107ICAgIC8vIHJhc3RlciB0aWxlIHRleHR1cmUgc2FtcGxlcnNcXG5cIiArXG5cInVuaWZvcm0gdmVjMiB1X3Jhc3Rlcl9zaXplc1tUQU5HUkFNX05VTV9SQVNURVJfU09VUkNFU107ICAgIC8vIHJhc3RlciB0aWxlIHRleHR1cmUgc2l6ZXMgKHdpZHRoL2hlaWdodCBpbiBwaXhlbHMpXFxuXCIgK1xuXCJ1bmlmb3JtIHZlYzMgdV9yYXN0ZXJfb2Zmc2V0c1tUQU5HUkFNX05VTV9SQVNURVJfU09VUkNFU107ICAvLyByYXN0ZXIgdGlsZSB0ZXh0dXJlIFVWIHN0YXJ0aW5nIG9mZnNldCBmb3IgdGlsZVxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBOb3RlOiB0aGUgcmFzdGVyIGFjY2Vzc29ycyBiZWxvdyBhcmUgI2RlZmluZXMgcmF0aGVyIHRoYW4gZnVuY3Rpb25zIHRvXFxuXCIgK1xuXCIvLyBhdm9pZCBpc3N1ZXMgd2l0aCBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb25zIGZvciBhcnJheSBpbmRpY2VzXFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIEFkanVzdHMgVVZzIGluIG1vZGVsIHNwYWNlIHRvIGFjY291bnQgZm9yIHJhc3RlciB0aWxlIHRleHR1cmUgb3Zlcnpvb21pbmdcXG5cIiArXG5cIi8vIChhcHBsaWVzIHNjYWxlIGFuZCBvZmZzZXQgYWRqdXN0bWVudHMpXFxuXCIgK1xuXCIjZGVmaW5lIGFkanVzdFJhc3RlclVWKHJhc3Rlcl9pbmRleCwgdXYpIFwiICtcblwiICAgICgodXYpICogdV9yYXN0ZXJfb2Zmc2V0c1tyYXN0ZXJfaW5kZXhdLnogKyB1X3Jhc3Rlcl9vZmZzZXRzW3Jhc3Rlcl9pbmRleF0ueHkpXFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIFJldHVybnMgdGhlIFVWcyBvZiB0aGUgY3VycmVudCBtb2RlbCBwb3NpdGlvbiBmb3IgYSByYXN0ZXIgc2FtcGxlclxcblwiICtcblwiI2RlZmluZSBjdXJyZW50UmFzdGVyVVYocmFzdGVyX2luZGV4KSBcIiArXG5cIiAgICAoYWRqdXN0UmFzdGVyVVYocmFzdGVyX2luZGV4LCB2X21vZGVscG9zX2Jhc2Vfem9vbS54eSkpXFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIFJldHVybnMgcGl4ZWwgbG9jYXRpb24gaW4gcmFzdGVyIHRpbGUgdGV4dHVyZSBhdCBjdXJyZW50IG1vZGVsIHBvc2l0aW9uXFxuXCIgK1xuXCIjZGVmaW5lIGN1cnJlbnRSYXN0ZXJQaXhlbChyYXN0ZXJfaW5kZXgpIFwiICtcblwiICAgIChjdXJyZW50UmFzdGVyVVYocmFzdGVyX2luZGV4KSAqIHJhc3RlclBpeGVsU2l6ZShyYXN0ZXJfaW5kZXgpKVxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBTYW1wbGVzIGEgcmFzdGVyIHRpbGUgdGV4dHVyZSBmb3IgdGhlIGN1cnJlbnQgbW9kZWwgcG9zaXRpb25cXG5cIiArXG5cIiNkZWZpbmUgc2FtcGxlUmFzdGVyKHJhc3Rlcl9pbmRleCkgXCIgK1xuXCIgICAgKHRleHR1cmUyRCh1X3Jhc3RlcnNbcmFzdGVyX2luZGV4XSwgY3VycmVudFJhc3RlclVWKHJhc3Rlcl9pbmRleCkpKVxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBTYW1wbGVzIGEgcmFzdGVyIHRpbGUgdGV4dHVyZSBmb3IgYSBnaXZlbiBwaXhlbFxcblwiICtcblwiI2RlZmluZSBzYW1wbGVSYXN0ZXJBdFBpeGVsKHJhc3Rlcl9pbmRleCwgcGl4ZWwpIFwiICtcblwiICAgICh0ZXh0dXJlMkQodV9yYXN0ZXJzW3Jhc3Rlcl9pbmRleF0sIGFkanVzdFJhc3RlclVWKHJhc3Rlcl9pbmRleCwgKHBpeGVsKSAvIHJhc3RlclBpeGVsU2l6ZShyYXN0ZXJfaW5kZXgpKSkpXFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIFJldHVybnMgc2l6ZSBvZiByYXN0ZXIgc2FtcGxlciBpbiBwaXhlbHNcXG5cIiArXG5cIiNkZWZpbmUgcmFzdGVyUGl4ZWxTaXplKHJhc3Rlcl9pbmRleCkgXCIgK1xuXCIgICAgKHVfcmFzdGVyX3NpemVzW3Jhc3Rlcl9pbmRleF0pXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXCI7XG5cbnNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvc2VsZWN0aW9uX2ZyYWdtZW50J10gPVxuXCIvLyBGcmFnbWVudCBzaGFkZXIgZm9yIGZlYXR1cmUgc2VsZWN0aW9uIHBhc3Nlc1xcblwiICtcblwiLy8gUmVuZGVycyBpbiBzaWxob3VldHRlIGFjY29yZGluZyB0byBzZWxlY3Rpb24gKHBpY2tpbmcpIGNvbG9yLCBvciBibGFjayBpZiBub25lIGRlZmluZWRcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fRkVBVFVSRV9TRUxFQ1RJT05cXG5cIiArXG5cIiAgICB2YXJ5aW5nIHZlYzQgdl9zZWxlY3Rpb25fY29sb3I7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwidm9pZCBtYWluICh2b2lkKSB7XFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fRkVBVFVSRV9TRUxFQ1RJT05cXG5cIiArXG5cIiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdl9zZWxlY3Rpb25fY29sb3I7XFxuXCIgK1xuXCIgICAgI2Vsc2VcXG5cIiArXG5cIiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLiwgMC4sIDAuLCAxLik7XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcIjtcblxuc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9zZWxlY3Rpb25fZ2xvYmFscyddID1cblwiLy8gVmVydGV4IGF0dHJpYnV0ZSArIHZhcnlpbmcgZm9yIGZlYXR1cmUgc2VsZWN0aW9uXFxuXCIgK1xuXCIjaWYgZGVmaW5lZChUQU5HUkFNX0ZFQVRVUkVfU0VMRUNUSU9OKSAmJiBkZWZpbmVkKFRBTkdSQU1fVkVSVEVYX1NIQURFUilcXG5cIiArXG5cIiAgICBhdHRyaWJ1dGUgdmVjNCBhX3NlbGVjdGlvbl9jb2xvcjtcXG5cIiArXG5cIiAgICB2YXJ5aW5nIHZlYzQgdl9zZWxlY3Rpb25fY29sb3I7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlwiO1xuXG5zaGFkZXJTb3VyY2VzWydnbC9zaGFkZXJzL3NlbGVjdGlvbl92ZXJ0ZXgnXSA9XG5cIi8vIFNlbGVjdGlvbiBwYXNzLXNwZWNpZmljIHJlbmRlcmluZ1xcblwiICtcblwiI2lmIGRlZmluZWQoVEFOR1JBTV9GRUFUVVJFX1NFTEVDVElPTikgJiYgZGVmaW5lZChUQU5HUkFNX1ZFUlRFWF9TSEFERVIpXFxuXCIgK1xuXCIgICAgaWYgKGFfc2VsZWN0aW9uX2NvbG9yLnJnYiA9PSB2ZWMzKDAuKSkge1xcblwiICtcblwiICAgICAgICAvLyBEaXNjYXJkIGJ5IGZvcmNpbmcgaW52YWxpZCB0cmlhbmdsZSBpZiB3ZVxcJ3JlIGluIHRoZSBmZWF0dXJlXFxuXCIgK1xuXCIgICAgICAgIC8vIHNlbGVjdGlvbiBwYXNzIGJ1dCBoYXZlIG5vIHNlbGVjdGlvbiBpbmZvXFxuXCIgK1xuXCIgICAgICAgIC8vIFRPRE86IGluIHNvbWUgY2FzZXMgd2UgbWF5IGFjdHVhbGx5IHdhbnQgbm9uLXNlbGVjdGFibGUgZmVhdHVyZXMgdG8gb2NjbHVkZSBzZWxlY3RhYmxlIG9uZXM/XFxuXCIgK1xuXCIgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLiwgMC4sIDAuLCAxLik7XFxuXCIgK1xuXCIgICAgICAgIHJldHVybjtcXG5cIiArXG5cIiAgICB9XFxuXCIgK1xuXCIgICAgdl9zZWxlY3Rpb25fY29sb3IgPSBhX3NlbGVjdGlvbl9jb2xvcjtcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXCI7XG5cbnNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvc3BoZXJpY2FsX2Vudmlyb25tZW50X21hcCddID1cblwiLy8gU3BoZXJpY2FsIGVudmlyb25tZW50IG1hcFxcblwiICtcblwiLy8gQmFzZWQgb246IGh0dHA6Ly93d3cuY2xpY2t0b3JlbGVhc2UuY29tL2Jsb2cvY3JlYXRpbmctc3BoZXJpY2FsLWVudmlyb25tZW50LW1hcHBpbmctc2hhZGVyXFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIHZpZXc6IGxvY2F0aW9uIG9mIGNhbWVyYVxcblwiICtcblwiLy8gcG9zaXRpb246IGxvY2F0aW9uIG9mIGN1cnJlbnQgcG9pbnQgb24gc3VyZmFjZVxcblwiICtcblwiLy8gbm9ybWFsOiBub3JtYWwgb2YgY3VycmVudCBwb2ludCBvbiBzdXJmYWNlXFxuXCIgK1xuXCIvLyBza2V3OiBza2V3aW5nIGZhY3RvciAodXNlZCB0byBjb21wZW5zYXRlIGZvciBhbHRlcmVkIHZhbmlzaGluZyBwb2ludClcXG5cIiArXG5cIi8vIGVudm1hcDogc3BoZXJpY2FsIGVudmlyb25tZW50IG1hcCB0ZXh0dXJlXFxuXCIgK1xuXCJcXG5cIiArXG5cInZlYzQgc3BoZXJpY2FsRW52aXJvbm1lbnRNYXAodmVjMyB2aWV3LCB2ZWMzIHBvc2l0aW9uLCB2ZWMzIG5vcm1hbCwgdmVjMiBza2V3LCBzYW1wbGVyMkQgZW52bWFwKSB7XFxuXCIgK1xuXCIgICAgLy8gTm9ybWFsaXplZCB2ZWN0b3IgZnJvbSBjYW1lcmEgdG8gc3VyZmFjZVxcblwiICtcblwiICAgIHZlYzMgZXllID0gbm9ybWFsaXplKHBvc2l0aW9uLnh5eiAtIHZpZXcueHl6KTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIFNrZXdcXG5cIiArXG5cIiAgICBleWUueHkgLT0gc2tldztcXG5cIiArXG5cIiAgICBleWUgPSBub3JtYWxpemUoZXllKTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIFJlZmxlY3Rpb24gb2YgZXllIG9mZiBvZiBzdXJmYWNlIG5vcm1hbFxcblwiICtcblwiICAgIHZlYzMgciA9IHJlZmxlY3QoZXllLCBub3JtYWwpO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gTWFwIHJlZmxlY3RlZCB2ZWN0b3Igb250byB0aGUgc3VyZmFjZSBvZiBhIHNwaGVyZVxcblwiICtcblwiICAgIHIueiArPSAxLjtcXG5cIiArXG5cIiAgICBmbG9hdCBtID0gMi4gKiBsZW5ndGgocik7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBBZGp1c3QgeHkgdG8gYWNjb3VudCBmb3Igc3BoZXJpY2FsIHNoYXBlLCBhbmQgY2VudGVyIGluIG1pZGRsZSBvZiB0ZXh0dXJlXFxuXCIgK1xuXCIgICAgdmVjMiB1diA9IHIueHkgLyBtICsgLjU7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBTYW1wbGUgdGhlIGVudmlyb25tZW50IG1hcFxcblwiICtcblwiICAgIHJldHVybiB0ZXh0dXJlMkQoZW52bWFwLCB1dik7XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcIjtcblxuc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9zcG90TGlnaHQnXSA9XG5cIi8qXFxuXCIgK1xuXCJcXG5cIiArXG5cIkV4cGVjdGVkIGdsb2JhbHM6XFxuXCIgK1xuXCJtYXRlcmlhbFxcblwiICtcblwibGlnaHRfYWNjdW11bGF0b3JfKlxcblwiICtcblwiXFxuXCIgK1xuXCIqL1xcblwiICtcblwiXFxuXCIgK1xuXCJzdHJ1Y3QgU3BvdExpZ2h0IHtcXG5cIiArXG5cIiAgICB2ZWM0IGFtYmllbnQ7XFxuXCIgK1xuXCIgICAgdmVjNCBkaWZmdXNlO1xcblwiICtcblwiICAgIHZlYzQgc3BlY3VsYXI7XFxuXCIgK1xuXCIgICAgdmVjNCBwb3NpdGlvbjtcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9FWFBPTkVOVFxcblwiICtcblwiICAgIGZsb2F0IGF0dGVudWF0aW9uRXhwb25lbnQ7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9JTk5FUl9SQURJVVNcXG5cIiArXG5cIiAgICBmbG9hdCBpbm5lclJhZGl1cztcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX09VVEVSX1JBRElVU1xcblwiICtcblwiICAgIGZsb2F0IG91dGVyUmFkaXVzO1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICB2ZWMzIGRpcmVjdGlvbjtcXG5cIiArXG5cIiAgICBmbG9hdCBzcG90Q29zQ3V0b2ZmO1xcblwiICtcblwiICAgIGZsb2F0IHNwb3RFeHBvbmVudDtcXG5cIiArXG5cIn07XFxuXCIgK1xuXCJcXG5cIiArXG5cInZvaWQgY2FsY3VsYXRlTGlnaHQoaW4gU3BvdExpZ2h0IF9saWdodCwgaW4gdmVjMyBfZXllVG9Qb2ludCwgaW4gdmVjMyBfbm9ybWFsKSB7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKF9saWdodC5wb3NpdGlvbi54eXogLSBfZXllVG9Qb2ludCk7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBDb21wdXRlIHZlY3RvciBmcm9tIHN1cmZhY2UgdG8gbGlnaHQgcG9zaXRpb25cXG5cIiArXG5cIiAgICB2ZWMzIFZQID0gKF9saWdodC5wb3NpdGlvbi54eXogLSBfZXllVG9Qb2ludCkgLyBkaXN0O1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gbm9ybWFsIC4gbGlnaHQgZGlyZWN0aW9uXFxuXCIgK1xuXCIgICAgZmxvYXQgbkRvdFZQID0gY2xhbXAoZG90KF9ub3JtYWwsIFZQKSwgMC4wLCAxLjApO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gQXR0ZW51YXRpb24gZGVmYXVsdHNcXG5cIiArXG5cIiAgICBmbG9hdCBhdHRlbnVhdGlvbiA9IDEuMDtcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX0VYUE9ORU5UXFxuXCIgK1xuXCIgICAgICAgIGZsb2F0IFJpbiA9IDEuMDtcXG5cIiArXG5cIiAgICAgICAgZmxvYXQgZSA9IF9saWdodC5hdHRlbnVhdGlvbkV4cG9uZW50O1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fSU5ORVJfUkFESVVTXFxuXCIgK1xuXCIgICAgICAgICAgICBSaW4gPSBfbGlnaHQuaW5uZXJSYWRpdXM7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fT1VURVJfUkFESVVTXFxuXCIgK1xuXCIgICAgICAgICAgICBmbG9hdCBSZGlmZiA9IF9saWdodC5vdXRlclJhZGl1cy1SaW47XFxuXCIgK1xuXCIgICAgICAgICAgICBmbG9hdCBkID0gY2xhbXAobWF4KDAuMCxkaXN0LVJpbikvUmRpZmYsIDAuMCwgMS4wKTtcXG5cIiArXG5cIiAgICAgICAgICAgIGF0dGVudWF0aW9uID0gMS4wLShwb3coZCxlKSk7XFxuXCIgK1xuXCIgICAgICAgICNlbHNlXFxuXCIgK1xuXCIgICAgICAgICAgICAvLyBJZiBubyBvdXRlciBpcyBwcm92aWRlIGJlaGF2ZXMgbGlrZTpcXG5cIiArXG5cIiAgICAgICAgICAgIC8vIGh0dHBzOi8vaW1kb2luZ2l0d3Jvbmcud29yZHByZXNzLmNvbS8yMDExLzAxLzMxL2xpZ2h0LWF0dGVudWF0aW9uL1xcblwiICtcblwiICAgICAgICAgICAgZmxvYXQgZCA9IG1heCgwLjAsZGlzdC1SaW4pL1JpbisxLjA7XFxuXCIgK1xuXCIgICAgICAgICAgICBhdHRlbnVhdGlvbiA9IGNsYW1wKDEuMC8ocG93KGQsZSkpLCAwLjAsIDEuMCk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgICNlbHNlXFxuXCIgK1xuXCIgICAgICAgIGZsb2F0IFJpbiA9IDAuMDtcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX0lOTkVSX1JBRElVU1xcblwiICtcblwiICAgICAgICAgICAgUmluID0gX2xpZ2h0LmlubmVyUmFkaXVzO1xcblwiICtcblwiICAgICAgICAgICAgI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9PVVRFUl9SQURJVVNcXG5cIiArXG5cIiAgICAgICAgICAgICAgICBmbG9hdCBSZGlmZiA9IF9saWdodC5vdXRlclJhZGl1cy1SaW47XFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgZmxvYXQgZCA9IGNsYW1wKG1heCgwLjAsZGlzdC1SaW4pL1JkaWZmLCAwLjAsIDEuMCk7XFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgYXR0ZW51YXRpb24gPSAxLjAtZCpkO1xcblwiICtcblwiICAgICAgICAgICAgI2Vsc2VcXG5cIiArXG5cIiAgICAgICAgICAgICAgICAvLyBJZiBubyBvdXRlciBpcyBwcm92aWRlIGJlaGF2ZXMgbGlrZTpcXG5cIiArXG5cIiAgICAgICAgICAgICAgICAvLyBodHRwczovL2ltZG9pbmdpdHdyb25nLndvcmRwcmVzcy5jb20vMjAxMS8wMS8zMS9saWdodC1hdHRlbnVhdGlvbi9cXG5cIiArXG5cIiAgICAgICAgICAgICAgICBmbG9hdCBkID0gbWF4KDAuMCxkaXN0LVJpbikvUmluKzEuMDtcXG5cIiArXG5cIiAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbiA9IGNsYW1wKDEuMC9kLCAwLjAsIDEuMCk7XFxuXCIgK1xuXCIgICAgICAgICAgICAjZW5kaWZcXG5cIiArXG5cIiAgICAgICAgI2Vsc2VcXG5cIiArXG5cIiAgICAgICAgICAgICNpZmRlZiBUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fT1VURVJfUkFESVVTXFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgZmxvYXQgZCA9IGNsYW1wKGRpc3QvX2xpZ2h0Lm91dGVyUmFkaXVzLCAwLjAsIDEuMCk7XFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgYXR0ZW51YXRpb24gPSAxLjAtZCpkO1xcblwiICtcblwiICAgICAgICAgICAgI2Vsc2VcXG5cIiArXG5cIiAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbiA9IDEuMDtcXG5cIiArXG5cIiAgICAgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIHNwb3RsaWdodCBhdHRlbnVhdGlvbiBmYWN0b3JcXG5cIiArXG5cIiAgICBmbG9hdCBzcG90QXR0ZW51YXRpb24gPSAwLjA7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBTZWUgaWYgcG9pbnQgb24gc3VyZmFjZSBpcyBpbnNpZGUgY29uZSBvZiBpbGx1bWluYXRpb25cXG5cIiArXG5cIiAgICBmbG9hdCBzcG90RG90ID0gY2xhbXAoZG90KC1WUCwgbm9ybWFsaXplKF9saWdodC5kaXJlY3Rpb24pKSwgMC4wLCAxLjApO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgaWYgKHNwb3REb3QgPj0gX2xpZ2h0LnNwb3RDb3NDdXRvZmYpIHtcXG5cIiArXG5cIiAgICAgICAgc3BvdEF0dGVudWF0aW9uID0gcG93KHNwb3REb3QsIF9saWdodC5zcG90RXhwb25lbnQpO1xcblwiICtcblwiICAgIH1cXG5cIiArXG5cIlxcblwiICtcblwiICAgIGxpZ2h0X2FjY3VtdWxhdG9yX2FtYmllbnQgKz0gX2xpZ2h0LmFtYmllbnQgKiBhdHRlbnVhdGlvbiAqIHNwb3RBdHRlbnVhdGlvbjtcXG5cIiArXG5cIlxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0RJRkZVU0VcXG5cIiArXG5cIiAgICAgICAgbGlnaHRfYWNjdW11bGF0b3JfZGlmZnVzZSArPSBfbGlnaHQuZGlmZnVzZSAqIG5Eb3RWUCAqIGF0dGVudWF0aW9uICogc3BvdEF0dGVudWF0aW9uO1xcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfU1BFQ1VMQVJcXG5cIiArXG5cIiAgICAgICAgLy8gUG93ZXIgZmFjdG9yIGZvciBzaGlueSBzcGVjdWxhcnNcXG5cIiArXG5cIiAgICAgICAgZmxvYXQgcGYgPSAwLjA7XFxuXCIgK1xuXCIgICAgICAgIGlmIChuRG90VlAgPiAwLjApIHtcXG5cIiArXG5cIiAgICAgICAgICAgIHZlYzMgcmVmbGVjdFZlY3RvciA9IHJlZmxlY3QoLVZQLCBfbm9ybWFsKTtcXG5cIiArXG5cIiAgICAgICAgICAgIGZsb2F0IGV5ZURvdFIgPSBtYXgoZG90KC1ub3JtYWxpemUoX2V5ZVRvUG9pbnQpLCByZWZsZWN0VmVjdG9yKSwgMC4wKTtcXG5cIiArXG5cIiAgICAgICAgICAgIHBmID0gcG93KGV5ZURvdFIsIG1hdGVyaWFsLnNoaW5pbmVzcyk7XFxuXCIgK1xuXCIgICAgICAgIH1cXG5cIiArXG5cIiAgICAgICAgbGlnaHRfYWNjdW11bGF0b3Jfc3BlY3VsYXIgKz0gX2xpZ2h0LnNwZWN1bGFyICogcGYgKiBhdHRlbnVhdGlvbiAqIHNwb3RBdHRlbnVhdGlvbjtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIn1cXG5cIiArXG5cIlwiO1xuXG5zaGFkZXJTb3VyY2VzWydnbC9zaGFkZXJzL3VucGFjayddID1cblwiXFxuXCIgK1xuXCIvLyBVbnBhY2sgbm9ybWFsaXplZCBzaG9ydHMgYmFjayB0byB0aGVpciBvcmlnaW5hbCBpbnRlZ2VyIHZhbHVlc1xcblwiICtcblwiI2RlZmluZSBTSE9SVCh4KSAoeCAqIDMyNzY3LilcXG5cIiArXG5cIiNkZWZpbmUgVU5TSUdORURfU0hPUlQoeCkgKHggKiA2NTUzNS4pXFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIFVzZWQgZm9yIGNhc2VzIHdoZXJlIGFuIGF0dHJpYnV0ZSBpcyBzdG9yZWQgYXMgYSBub3JtYWxpemVkIGludCB0eXBlLFxcblwiICtcblwiLy8gYnV0IGlzIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgdGhhdCBuZWVkcyBhIHJhbmdlIGdyZWF0ZXIgdGhhbiBbMCwgMV0gb3IgWy0xLCAxXS5cXG5cIiArXG5cIi8vIFRoZSBpbnRlZ2VyIHZhbHVlIGlzIFxcXCJzY2FsZWRcXFwiIHRvIGFuIDguOCBmaXhlZCBwb2ludCBzdHlsZSBpbnRlZ2VyIGJlZm9yZSBpdCBpc1xcblwiICtcblwiLy8gbm9ybWFsaXplZCBpbiB0aGUgVkJPLiBVc2VkIGZvciBjYXNlcyB3aGVyZSBsb3cgcHJlY2lzaW9uIGlzIHN1aXRhYmxlIGZvciBib3RoXFxuXCIgK1xuXCIvLyB0aGUgaW50ZWdlciBhbmQgZnJhY3Rpb25hbCBwb3J0aW9ucyBvZiB0aGUgbnVtYmVyLlxcblwiICtcblwiLy8gRXhhbXBsZXMgYXJlIGV4dHJ1c2lvbiB2ZWN0b3JzIGZvciBkeW5hbWljIGxpbmVzLCBhbmQgc2NyZWVuLXNwYWNlIHNpemUgZm9yIHBvaW50IHNwcml0ZXMuXFxuXCIgK1xuXCIjZGVmaW5lIFNDQUxFXzgoeCkgKHggKiAyNTYuKVxcblwiICtcblwiXCI7XG5cbnNoYWRlclNvdXJjZXNbJ3N0eWxlcy9wb2ludHMvcG9pbnRzX2ZyYWdtZW50J10gPVxuXCJ1bmlmb3JtIHZlYzIgdV9yZXNvbHV0aW9uO1xcblwiICtcblwidW5pZm9ybSBmbG9hdCB1X3RpbWU7XFxuXCIgK1xuXCJ1bmlmb3JtIHZlYzMgdV9tYXBfcG9zaXRpb247XFxuXCIgK1xuXCJ1bmlmb3JtIHZlYzQgdV90aWxlX29yaWdpbjtcXG5cIiArXG5cInVuaWZvcm0gZmxvYXQgdV9tZXRlcnNfcGVyX3BpeGVsO1xcblwiICtcblwidW5pZm9ybSBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbztcXG5cIiArXG5cIlxcblwiICtcblwidW5pZm9ybSBtYXQzIHVfbm9ybWFsTWF0cml4O1xcblwiICtcblwidW5pZm9ybSBtYXQzIHVfaW52ZXJzZU5vcm1hbE1hdHJpeDtcXG5cIiArXG5cIlxcblwiICtcblwidW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xcblwiICtcblwiXFxuXCIgK1xuXCJ2YXJ5aW5nIHZlYzQgdl9jb2xvcjtcXG5cIiArXG5cInZhcnlpbmcgdmVjMiB2X3RleGNvb3JkO1xcblwiICtcblwidmFyeWluZyB2ZWM0IHZfd29ybGRfcG9zaXRpb247XFxuXCIgK1xuXCJcXG5cIiArXG5cIiNkZWZpbmUgVEFOR1JBTV9OT1JNQUwgdmVjMygwLiwgMC4sIDEuKVxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBBbHBoYSBkaXNjYXJkIHRocmVzaG9sZCAoc3Vic3RpdHV0ZSBmb3IgYWxwaGEgYmxlbmRpbmcpXFxuXCIgK1xuXCIjaWZuZGVmIFRBTkdSQU1fQUxQSEFfRElTQ0FSRFxcblwiICtcblwiI2RlZmluZSBUQU5HUkFNX0FMUEhBX0RJU0NBUkQgMC41XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiLy8gQWxwaGEgZmFkZSByYW5nZSBmb3IgZWRnZXMgb2YgcG9pbnRzXFxuXCIgK1xuXCIjaWZuZGVmIFRBTkdSQU1fRkFERV9SQU5HRVxcblwiICtcblwiI2RlZmluZSBUQU5HUkFNX0ZBREVfUkFOR0UgLjE1XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIiNkZWZpbmUgVEFOR1JBTV9GQURFX1NUQVJUICgxLiAtIFRBTkdSQU1fRkFERV9SQU5HRSlcXG5cIiArXG5cIlxcblwiICtcblwiI3ByYWdtYSB0YW5ncmFtOiBjYW1lcmFcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogbWF0ZXJpYWxcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogbGlnaHRpbmdcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogcmFzdGVyXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IGdsb2JhbFxcblwiICtcblwiXFxuXCIgK1xuXCJ2b2lkIG1haW4gKHZvaWQpIHtcXG5cIiArXG5cIiAgICAvLyBJbml0aWFsaXplIGdsb2JhbHNcXG5cIiArXG5cIiAgICAjcHJhZ21hIHRhbmdyYW06IHNldHVwXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICB2ZWM0IGNvbG9yID0gdl9jb2xvcjtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIEFwcGx5IGEgdGV4dHVyZVxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX1BPSU5UX1RFWFRVUkVcXG5cIiArXG5cIiAgICAgICAgY29sb3IgKj0gdGV4dHVyZTJEKHVfdGV4dHVyZSwgdl90ZXhjb29yZCk7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgLy8gTWFudWFsbHkgdW4tbXVsdGlwbHkgYWxwaGEsIGZvciBjYXNlcyB3aGVyZSB0ZXh0dXJlIGhhcyBwcmUtbXVsdGlwbGllZCBhbHBoYVxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9VTk1VTFRJUExZX0FMUEhBXFxuXCIgK1xuXCIgICAgICAgICAgICBjb2xvci5yZ2IgLz0gbWF4KGNvbG9yLmEsIDAuMDAxKTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgLy8gRHJhdyBhIHBvaW50XFxuXCIgK1xuXCIgICAgI2Vsc2VcXG5cIiArXG5cIiAgICAgICAgLy8gRmFkZSBhbHBoYSBuZWFyIGNpcmNsZSBlZGdlXFxuXCIgK1xuXCIgICAgICAgIHZlYzIgdXYgPSB2X3RleGNvb3JkICogMi4gLSAxLjtcXG5cIiArXG5cIiAgICAgICAgZmxvYXQgcG9pbnRfZGlzdCA9IGxlbmd0aCh1dik7XFxuXCIgK1xuXCIgICAgICAgIGNvbG9yLmEgPSBjbGFtcChjb2xvci5hIC0gKHNtb290aHN0ZXAoMC4sIFRBTkdSQU1fRkFERV9SQU5HRSwgKHBvaW50X2Rpc3QgLSBUQU5HUkFNX0ZBREVfU1RBUlQpKSAvIFRBTkdSQU1fRkFERV9SQU5HRSksIDAuLCBjb2xvci5hKTtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIElmIGJsZW5kaW5nIGlzIG9mZiwgdXNlIGFscGhhIGRpc2NhcmQgYXMgYSBsb3dlci1xdWFsaXR5IHN1YnN0aXR1dGVcXG5cIiArXG5cIiAgICAjaWYgIWRlZmluZWQoVEFOR1JBTV9CTEVORF9PVkVSTEFZKSAmJiAhZGVmaW5lZChUQU5HUkFNX0JMRU5EX0lOTEFZKVxcblwiICtcblwiICAgICAgICBpZiAoY29sb3IuYSA8IFRBTkdSQU1fQUxQSEFfRElTQ0FSRCkge1xcblwiICtcblwiICAgICAgICAgICAgZGlzY2FyZDtcXG5cIiArXG5cIiAgICAgICAgfVxcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgI3ByYWdtYSB0YW5ncmFtOiBjb2xvclxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gRmFkZSBvdXQgd2hlbiB0aWxlIGlzIHpvb21pbmcgb3V0LCBlLmcuIGFjdGluZyBhcyBwcm94eSB0aWxlc1xcblwiICtcblwiICAgIC8vIE5COiB0aGlzIGlzIG1vc3RseSBkb25lIHRvIGNvbXBlbnNhdGUgZm9yIHRleHQgbGFiZWwgY29sbGlzaW9uIGhhcHBlbmluZyBhdCB0aGUgbGFiZWxcXCdzIDF4IHpvb20uIEFzIGxhYmVsc1xcblwiICtcblwiICAgIC8vIGluIHByb3h5IHRpbGVzIGFyZSBzY2FsZWQgZG93biwgdGhleSBiZWdpbiB0byBvdmVybGFwLCBhbmQgdGhlIGZhZGUgaXMgYSBzaW1wbGUgd2F5IHRvIGVhc2UgdGhlIHRyYW5zaXRpb24uXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fRkFERV9PTl9aT09NX09VVFxcblwiICtcblwiICAgICAgICBjb2xvci5hICo9IGNsYW1wKDEuIC0gVEFOR1JBTV9GQURFX09OX1pPT01fT1VUX1JBVEUgKiAodV90aWxlX29yaWdpbi56IC0gdV9tYXBfcG9zaXRpb24ueiksIDAuLCAxLik7XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjcHJhZ21hIHRhbmdyYW06IGZpbHRlclxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcIjtcblxuc2hhZGVyU291cmNlc1snc3R5bGVzL3BvaW50cy9wb2ludHNfdmVydGV4J10gPVxuXCJ1bmlmb3JtIHZlYzIgdV9yZXNvbHV0aW9uO1xcblwiICtcblwidW5pZm9ybSBmbG9hdCB1X3RpbWU7XFxuXCIgK1xuXCJ1bmlmb3JtIHZlYzMgdV9tYXBfcG9zaXRpb247XFxuXCIgK1xuXCJ1bmlmb3JtIHZlYzQgdV90aWxlX29yaWdpbjtcXG5cIiArXG5cInVuaWZvcm0gZmxvYXQgdV90aWxlX3Byb3h5X2RlcHRoO1xcblwiICtcblwidW5pZm9ybSBmbG9hdCB1X21ldGVyc19wZXJfcGl4ZWw7XFxuXCIgK1xuXCJ1bmlmb3JtIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO1xcblwiICtcblwiXFxuXCIgK1xuXCJ1bmlmb3JtIG1hdDQgdV9tb2RlbDtcXG5cIiArXG5cInVuaWZvcm0gbWF0NCB1X21vZGVsVmlldztcXG5cIiArXG5cInVuaWZvcm0gbWF0MyB1X25vcm1hbE1hdHJpeDtcXG5cIiArXG5cInVuaWZvcm0gbWF0MyB1X2ludmVyc2VOb3JtYWxNYXRyaXg7XFxuXCIgK1xuXCJcXG5cIiArXG5cImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247XFxuXCIgK1xuXCJhdHRyaWJ1dGUgdmVjNCBhX3NoYXBlO1xcblwiICtcblwiYXR0cmlidXRlIHZlYzQgYV9jb2xvcjtcXG5cIiArXG5cImF0dHJpYnV0ZSB2ZWMyIGFfdGV4Y29vcmQ7XFxuXCIgK1xuXCJhdHRyaWJ1dGUgdmVjMiBhX29mZnNldDtcXG5cIiArXG5cIlxcblwiICtcblwiI2RlZmluZSBUQU5HUkFNX05PUk1BTCB2ZWMzKDAuLCAwLiwgMS4pXFxuXCIgK1xuXCJcXG5cIiArXG5cInZhcnlpbmcgdmVjNCB2X2NvbG9yO1xcblwiICtcblwidmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQ7XFxuXCIgK1xuXCJ2YXJ5aW5nIHZlYzQgdl93b3JsZF9wb3NpdGlvbjtcXG5cIiArXG5cIlxcblwiICtcblwiI3ByYWdtYSB0YW5ncmFtOiBjYW1lcmFcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogbWF0ZXJpYWxcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogbGlnaHRpbmdcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogcmFzdGVyXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IGdsb2JhbFxcblwiICtcblwiXFxuXCIgK1xuXCJ2ZWMyIHJvdGF0ZTJEKHZlYzIgX3N0LCBmbG9hdCBfYW5nbGUpIHtcXG5cIiArXG5cIiAgICByZXR1cm4gbWF0Mihjb3MoX2FuZ2xlKSwtc2luKF9hbmdsZSksXFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgc2luKF9hbmdsZSksY29zKF9hbmdsZSkpICogX3N0O1xcblwiICtcblwifVxcblwiICtcblwiXFxuXCIgK1xuXCJ2b2lkIG1haW4oKSB7XFxuXCIgK1xuXCIgICAgLy8gSW5pdGlhbGl6ZSBnbG9iYWxzXFxuXCIgK1xuXCIgICAgI3ByYWdtYSB0YW5ncmFtOiBzZXR1cFxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgdl9jb2xvciA9IGFfY29sb3I7XFxuXCIgK1xuXCIgICAgdl90ZXhjb29yZCA9IGFfdGV4Y29vcmQ7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBQb3NpdGlvblxcblwiICtcblwiICAgIHZlYzQgcG9zaXRpb24gPSB1X21vZGVsVmlldyAqIHZlYzQoU0hPUlQoYV9wb3NpdGlvbi54eXopLCAxLik7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBBcHBseSBwb3NpdGlvbmluZyBhbmQgc2NhbGluZyBpbiBzY3JlZW4gc3BhY2VcXG5cIiArXG5cIiAgICBmbG9hdCB6c2NhbGUgPSBmcmFjdCh1X21hcF9wb3NpdGlvbi56KSAqIChTQ0FMRV84KGFfc2hhcGUudykgLSAxLikgKyAxLjtcXG5cIiArXG5cIiAgICAvLyBmbG9hdCB6c2NhbGUgPSBsb2coZnJhY3QodV9tYXBfcG9zaXRpb24ueikgKyAxLikgLyBsb2coMi4pICogKGFfc2hhcGUudyAtIDEuKSArIDEuO1xcblwiICtcblwiICAgIHZlYzIgc2hhcGUgPSBTQ0FMRV84KGFfc2hhcGUueHkpICogenNjYWxlOyAgICAgLy9cXG5cIiArXG5cIiAgICB2ZWMyIG9mZnNldCA9IHZlYzIoYV9vZmZzZXQueCwgLWFfb2Zmc2V0LnkpOyAvLyBmbGlwIHkgdG8gbWFrZSBpdCBwb2ludCBkb3duXFxuXCIgK1xuXCIgICAgZmxvYXQgdGhldGEgPSByYWRpYW5zKGFfc2hhcGUueiAqIDM2MC4pO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgc2hhcGUgPSByb3RhdGUyRChzaGFwZSwgdGhldGEpOyAgICAgICAgICAgICAvLyBhcHBseSByb3RhdGlvbiB0byB2ZXJ0ZXhcXG5cIiArXG5cIiAgICBzaGFwZSArPSByb3RhdGUyRChTSE9SVChvZmZzZXQpLCB0aGV0YSk7ICAvLyBhcHBseSBvZmZzZXQgb24gcm90YXRlZCBheGlzIChlLmcuIHNvIGxpbmUgbGFiZWxzIGZvbGxvdyB0ZXh0IGF4aXMpXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBXb3JsZCBjb29yZGluYXRlcyBmb3IgM2QgcHJvY2VkdXJhbCB0ZXh0dXJlc1xcblwiICtcblwiICAgIHZfd29ybGRfcG9zaXRpb24gPSB1X21vZGVsICogcG9zaXRpb247XFxuXCIgK1xuXCIgICAgdl93b3JsZF9wb3NpdGlvbi54eSArPSBzaGFwZSAqIHVfbWV0ZXJzX3Blcl9waXhlbDtcXG5cIiArXG5cIiAgICB2X3dvcmxkX3Bvc2l0aW9uID0gd3JhcFdvcmxkUG9zaXRpb24odl93b3JsZF9wb3NpdGlvbik7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBNb2RpZnkgcG9zaXRpb24gYmVmb3JlIGNhbWVyYSBwcm9qZWN0aW9uXFxuXCIgK1xuXCIgICAgI3ByYWdtYSB0YW5ncmFtOiBwb3NpdGlvblxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgY2FtZXJhUHJvamVjdGlvbihwb3NpdGlvbik7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9MQVlFUl9PUkRFUlxcblwiICtcblwiICAgICAgICAvLyArMSBpcyB0byBrZWVwIGFsbCBsYXllcnMgaW5jbHVkaW5nIHByb3hpZXMgPiAwXFxuXCIgK1xuXCIgICAgICAgIGFwcGx5TGF5ZXJPcmRlcihTSE9SVChhX3Bvc2l0aW9uLncpICsgdV90aWxlX3Byb3h5X2RlcHRoICsgMS4sIHBvc2l0aW9uKTtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIEFwcGx5IHBpeGVsIG9mZnNldCBpbiBzY3JlZW4tc3BhY2VcXG5cIiArXG5cIiAgICAvLyBNdWx0aXBseSBieSAyIGlzIGJlY2F1c2Ugc2NyZWVuIGlzIDIgdW5pdHMgd2lkZSBOb3JtYWxpemVkIERldmljZSBDb29yZHMgKGFuZCB1X3Jlc29sdXRpb24gZGV2aWNlIHBpeGVscyB3aWRlKVxcblwiICtcblwiICAgIC8vIERldmljZSBwaXhlbCByYXRpbyBhZGp1c3RtZW50IGlzIGJlY2F1c2Ugc2hhcGUgaXMgaW4gbG9naWNhbCBwaXhlbHNcXG5cIiArXG5cIiAgICBwb3NpdGlvbi54eSArPSBzaGFwZSAqIHBvc2l0aW9uLncgKiAyLiAqIHVfZGV2aWNlX3BpeGVsX3JhdGlvIC8gdV9yZXNvbHV0aW9uO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbjtcXG5cIiArXG5cIn1cXG5cIiArXG5cIlwiO1xuXG5zaGFkZXJTb3VyY2VzWydzdHlsZXMvcG9seWdvbnMvcG9seWdvbnNfZnJhZ21lbnQnXSA9XG5cInVuaWZvcm0gdmVjMiB1X3Jlc29sdXRpb247XFxuXCIgK1xuXCJ1bmlmb3JtIGZsb2F0IHVfdGltZTtcXG5cIiArXG5cInVuaWZvcm0gdmVjMyB1X21hcF9wb3NpdGlvbjtcXG5cIiArXG5cInVuaWZvcm0gdmVjNCB1X3RpbGVfb3JpZ2luO1xcblwiICtcblwidW5pZm9ybSBmbG9hdCB1X21ldGVyc19wZXJfcGl4ZWw7XFxuXCIgK1xuXCJ1bmlmb3JtIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO1xcblwiICtcblwiXFxuXCIgK1xuXCJ1bmlmb3JtIG1hdDMgdV9ub3JtYWxNYXRyaXg7XFxuXCIgK1xuXCJ1bmlmb3JtIG1hdDMgdV9pbnZlcnNlTm9ybWFsTWF0cml4O1xcblwiICtcblwiXFxuXCIgK1xuXCJ2YXJ5aW5nIHZlYzQgdl9wb3NpdGlvbjtcXG5cIiArXG5cInZhcnlpbmcgdmVjMyB2X25vcm1hbDtcXG5cIiArXG5cInZhcnlpbmcgdmVjNCB2X2NvbG9yO1xcblwiICtcblwidmFyeWluZyB2ZWM0IHZfd29ybGRfcG9zaXRpb247XFxuXCIgK1xuXCJcXG5cIiArXG5cIiNkZWZpbmUgVEFOR1JBTV9OT1JNQUwgdl9ub3JtYWxcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fVEVYVFVSRV9DT09SRFNcXG5cIiArXG5cIiAgICB2YXJ5aW5nIHZlYzIgdl90ZXhjb29yZDtcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9NT0RFTF9QT1NJVElPTl9CQVNFX1pPT01fVkFSWUlOR1xcblwiICtcblwiICAgIHZhcnlpbmcgdmVjNCB2X21vZGVscG9zX2Jhc2Vfem9vbTtcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIjaWYgZGVmaW5lZChUQU5HUkFNX0xJR0hUSU5HX1ZFUlRFWClcXG5cIiArXG5cIiAgICB2YXJ5aW5nIHZlYzQgdl9saWdodGluZztcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IGNhbWVyYVxcblwiICtcblwiI3ByYWdtYSB0YW5ncmFtOiBtYXRlcmlhbFxcblwiICtcblwiI3ByYWdtYSB0YW5ncmFtOiBsaWdodGluZ1xcblwiICtcblwiI3ByYWdtYSB0YW5ncmFtOiByYXN0ZXJcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogZ2xvYmFsXFxuXCIgK1xuXCJcXG5cIiArXG5cInZvaWQgbWFpbiAodm9pZCkge1xcblwiICtcblwiICAgIC8vIEluaXRpYWxpemUgZ2xvYmFsc1xcblwiICtcblwiICAgICNwcmFnbWEgdGFuZ3JhbTogc2V0dXBcXG5cIiArXG5cIlxcblwiICtcblwiICAgIHZlYzQgY29sb3IgPSB2X2NvbG9yO1xcblwiICtcblwiICAgIHZlYzMgbm9ybWFsID0gVEFOR1JBTV9OT1JNQUw7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBBcHBseSByYXN0ZXIgdG8gdmVydGV4IGNvbG9yXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fUkFTVEVSX1RFWFRVUkVfQ09MT1JcXG5cIiArXG5cIiAgICAgICAgY29sb3IgKj0gc2FtcGxlUmFzdGVyKDApOyAvLyBtdWx0aXBsaWVkIHRvIHRpbnQgdGV4dHVyZSBjb2xvclxcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gRmlyc3QsIGdldCBub3JtYWwgZnJvbSByYXN0ZXIgdGlsZSAoaWYgYXBwbGljYWJsZSlcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9SQVNURVJfVEVYVFVSRV9OT1JNQUxcXG5cIiArXG5cIiAgICAgICAgbm9ybWFsID0gbm9ybWFsaXplKHNhbXBsZVJhc3RlcigwKS5yZ2IgKiAyLiAtIDEuKTtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIFNlY29uZCwgYWx0ZXIgbm9ybWFsIHdpdGggbm9ybWFsIG1hcCB0ZXh0dXJlIChpZiBhcHBsaWNhYmxlKVxcblwiICtcblwiICAgICNpZiBkZWZpbmVkKFRBTkdSQU1fTElHSFRJTkdfRlJBR01FTlQpICYmIGRlZmluZWQoVEFOR1JBTV9NQVRFUklBTF9OT1JNQUxfVEVYVFVSRSlcXG5cIiArXG5cIiAgICAgICAgY2FsY3VsYXRlTm9ybWFsKG5vcm1hbCk7XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBOb3JtYWwgbW9kaWZpY2F0aW9uIGFwcGxpZWQgaGVyZSBmb3IgZnJhZ21lbnQgbGlnaHRpbmcgb3Igbm8gbGlnaHRpbmcsXFxuXCIgK1xuXCIgICAgLy8gYW5kIGluIHZlcnRleCBzaGFkZXIgZm9yIHZlcnRleCBsaWdodGluZ1xcblwiICtcblwiICAgICNpZiAhZGVmaW5lZChUQU5HUkFNX0xJR0hUSU5HX1ZFUlRFWClcXG5cIiArXG5cIiAgICAgICAgI3ByYWdtYSB0YW5ncmFtOiBub3JtYWxcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIENvbG9yIG1vZGlmaWNhdGlvbiBiZWZvcmUgbGlnaHRpbmcgaXMgYXBwbGllZFxcblwiICtcblwiICAgICNwcmFnbWEgdGFuZ3JhbTogY29sb3JcXG5cIiArXG5cIlxcblwiICtcblwiICAgICNpZiBkZWZpbmVkKFRBTkdSQU1fTElHSFRJTkdfRlJBR01FTlQpXFxuXCIgK1xuXCIgICAgICAgIC8vIENhbGN1bGF0ZSBwZXItZnJhZ21lbnQgbGlnaHRpbmdcXG5cIiArXG5cIiAgICAgICAgY29sb3IgPSBjYWxjdWxhdGVMaWdodGluZyh2X3Bvc2l0aW9uLnh5eiAtIHVfZXllLCBub3JtYWwsIGNvbG9yKTtcXG5cIiArXG5cIiAgICAjZWxpZiBkZWZpbmVkKFRBTkdSQU1fTElHSFRJTkdfVkVSVEVYKVxcblwiICtcblwiICAgICAgICAvLyBBcHBseSBsaWdodGluZyBpbnRlbnNpdHkgaW50ZXJwb2xhdGVkIGZyb20gdmVydGV4IHNoYWRlclxcblwiICtcblwiICAgICAgICBjb2xvciAqPSB2X2xpZ2h0aW5nO1xcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gUG9zdC1wcm9jZXNzaW5nIGVmZmVjdHMgKG1vZGlmeSBjb2xvciBhZnRlciBsaWdodGluZylcXG5cIiArXG5cIiAgICAjcHJhZ21hIHRhbmdyYW06IGZpbHRlclxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcIjtcblxuc2hhZGVyU291cmNlc1snc3R5bGVzL3BvbHlnb25zL3BvbHlnb25zX3ZlcnRleCddID1cblwidW5pZm9ybSB2ZWMyIHVfcmVzb2x1dGlvbjtcXG5cIiArXG5cInVuaWZvcm0gZmxvYXQgdV90aW1lO1xcblwiICtcblwidW5pZm9ybSB2ZWMzIHVfbWFwX3Bvc2l0aW9uO1xcblwiICtcblwidW5pZm9ybSB2ZWM0IHVfdGlsZV9vcmlnaW47XFxuXCIgK1xuXCJ1bmlmb3JtIGZsb2F0IHVfdGlsZV9wcm94eV9kZXB0aDtcXG5cIiArXG5cInVuaWZvcm0gZmxvYXQgdV9tZXRlcnNfcGVyX3BpeGVsO1xcblwiICtcblwidW5pZm9ybSBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbztcXG5cIiArXG5cIlxcblwiICtcblwidW5pZm9ybSBtYXQ0IHVfbW9kZWw7XFxuXCIgK1xuXCJ1bmlmb3JtIG1hdDQgdV9tb2RlbFZpZXc7XFxuXCIgK1xuXCJ1bmlmb3JtIG1hdDMgdV9ub3JtYWxNYXRyaXg7XFxuXCIgK1xuXCJ1bmlmb3JtIG1hdDMgdV9pbnZlcnNlTm9ybWFsTWF0cml4O1xcblwiICtcblwiXFxuXCIgK1xuXCJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uO1xcblwiICtcblwiYXR0cmlidXRlIHZlYzQgYV9jb2xvcjtcXG5cIiArXG5cIlxcblwiICtcblwiLy8gT3B0aW9uYWwgbm9ybWFsIGF0dHJpYnV0ZSwgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdXBcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX05PUk1BTF9BVFRSSUJVVEVcXG5cIiArXG5cIiAgICBhdHRyaWJ1dGUgdmVjMyBhX25vcm1hbDtcXG5cIiArXG5cIiAgICAjZGVmaW5lIFRBTkdSQU1fTk9STUFMIGFfbm9ybWFsXFxuXCIgK1xuXCIjZWxzZVxcblwiICtcblwiICAgICNkZWZpbmUgVEFOR1JBTV9OT1JNQUwgdmVjMygwLiwgMC4sIDEuKVxcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIE9wdGlvbmFsIGR5bmFtaWMgbGluZSBleHRydXNpb25cXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX0VYVFJVREVfTElORVNcXG5cIiArXG5cIiAgICAvLyB4eTogZXh0cnVzaW9uIGRpcmVjdGlvbiBpbiB4eSBwbGFuZVxcblwiICtcblwiICAgIC8vIHo6ICBoYWxmLXdpZHRoIG9mIGxpbmUgKGFtb3VudCB0byBleHRydWRlKVxcblwiICtcblwiICAgIC8vIHc6ICBzY2FsaW5nIGZhY3RvciBmb3IgaW50ZXJwb2xhdGluZyB3aWR0aCBiZXR3ZWVuIHpvb21zXFxuXCIgK1xuXCIgICAgYXR0cmlidXRlIHZlYzQgYV9leHRydWRlO1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cInZhcnlpbmcgdmVjNCB2X3Bvc2l0aW9uO1xcblwiICtcblwidmFyeWluZyB2ZWMzIHZfbm9ybWFsO1xcblwiICtcblwidmFyeWluZyB2ZWM0IHZfY29sb3I7XFxuXCIgK1xuXCJ2YXJ5aW5nIHZlYzQgdl93b3JsZF9wb3NpdGlvbjtcXG5cIiArXG5cIlxcblwiICtcblwiLy8gT3B0aW9uYWwgdGV4dHVyZSBVVnNcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX1RFWFRVUkVfQ09PUkRTXFxuXCIgK1xuXCIgICAgYXR0cmlidXRlIHZlYzIgYV90ZXhjb29yZDtcXG5cIiArXG5cIiAgICB2YXJ5aW5nIHZlYzIgdl90ZXhjb29yZDtcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBPcHRpb25hbCBtb2RlbCBwb3NpdGlvbiB2YXJ5aW5nIGZvciB0aWxlIGNvb3JkaW5hdGUgem9vbVxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fTU9ERUxfUE9TSVRJT05fQkFTRV9aT09NX1ZBUllJTkdcXG5cIiArXG5cIiAgICB2YXJ5aW5nIHZlYzQgdl9tb2RlbHBvc19iYXNlX3pvb207XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiI2lmIGRlZmluZWQoVEFOR1JBTV9MSUdIVElOR19WRVJURVgpXFxuXCIgK1xuXCIgICAgdmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiI3ByYWdtYSB0YW5ncmFtOiBjYW1lcmFcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogbWF0ZXJpYWxcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogbGlnaHRpbmdcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogcmFzdGVyXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IGdsb2JhbFxcblwiICtcblwiXFxuXCIgK1xuXCJ2b2lkIG1haW4oKSB7XFxuXCIgK1xuXCIgICAgLy8gSW5pdGlhbGl6ZSBnbG9iYWxzXFxuXCIgK1xuXCIgICAgI3ByYWdtYSB0YW5ncmFtOiBzZXR1cFxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gVGV4dHVyZSBVVnNcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9URVhUVVJFX0NPT1JEU1xcblwiICtcblwiICAgICAgICB2X3RleGNvb3JkID0gYV90ZXhjb29yZDtcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fRVhUUlVERV9MSU5FU1xcblwiICtcblwiICAgICAgICAgICAgdl90ZXhjb29yZC55ICo9IFRBTkdSQU1fVl9TQ0FMRV9BREpVU1Q7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gUGFzcyBtb2RlbCBwb3NpdGlvbiB0byBmcmFnbWVudCBzaGFkZXJcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NT0RFTF9QT1NJVElPTl9CQVNFX1pPT01fVkFSWUlOR1xcblwiICtcblwiICAgICAgICB2X21vZGVscG9zX2Jhc2Vfem9vbSA9IG1vZGVsUG9zaXRpb25CYXNlWm9vbSgpO1xcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gUG9zaXRpb25cXG5cIiArXG5cIiAgICB2ZWM0IHBvc2l0aW9uID0gdmVjNChTSE9SVChhX3Bvc2l0aW9uLnh5eiksIDEuKTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX0VYVFJVREVfTElORVNcXG5cIiArXG5cIiAgICAgICAgdmVjMiBleHRydWRlID0gU0NBTEVfOChhX2V4dHJ1ZGUueHkpO1xcblwiICtcblwiICAgICAgICBmbG9hdCB3aWR0aCA9IFNIT1JUKGFfZXh0cnVkZS56KTtcXG5cIiArXG5cIiAgICAgICAgZmxvYXQgZHdkeiA9IFNIT1JUKGFfZXh0cnVkZS53KTtcXG5cIiArXG5cIiAgICAgICAgZmxvYXQgZHogPSBjbGFtcCh1X21hcF9wb3NpdGlvbi56IC0gdV90aWxlX29yaWdpbi56LCAwLiwgMS4pO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgIC8vIEludGVycG9sYXRlIGJldHdlZW4gem9vbSBsZXZlbHNcXG5cIiArXG5cIiAgICAgICAgd2lkdGggKz0gZHdkeiAqIGR6O1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgIC8vIFNjYWxlIHBpeGVsIGRpbWVuc2lvbnMgdG8gYmUgY29uc2lzdGVudCBpbiBzY3JlZW4gc3BhY2VcXG5cIiArXG5cIiAgICAgICAgd2lkdGggKj0gZXhwMigtZHopO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgIC8vIE1vZGlmeSBsaW5lIHdpZHRoIGJlZm9yZSBleHRydXNpb25cXG5cIiArXG5cIiAgICAgICAgI3ByYWdtYSB0YW5ncmFtOiB3aWR0aFxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgIHBvc2l0aW9uLnh5ICs9IGV4dHJ1ZGUgKiB3aWR0aDtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIFdvcmxkIGNvb3JkaW5hdGVzIGZvciAzZCBwcm9jZWR1cmFsIHRleHR1cmVzXFxuXCIgK1xuXCIgICAgdl93b3JsZF9wb3NpdGlvbiA9IHdyYXBXb3JsZFBvc2l0aW9uKHVfbW9kZWwgKiBwb3NpdGlvbik7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBBZGp1c3QgZm9yIHRpbGUgYW5kIHZpZXcgcG9zaXRpb25cXG5cIiArXG5cIiAgICBwb3NpdGlvbiA9IHVfbW9kZWxWaWV3ICogcG9zaXRpb247XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBNb2RpZnkgcG9zaXRpb24gYmVmb3JlIGNhbWVyYSBwcm9qZWN0aW9uXFxuXCIgK1xuXCIgICAgI3ByYWdtYSB0YW5ncmFtOiBwb3NpdGlvblxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gU2V0dXAgdmFyeWluZ3NcXG5cIiArXG5cIiAgICB2X3Bvc2l0aW9uID0gcG9zaXRpb247XFxuXCIgK1xuXCIgICAgdl9ub3JtYWwgPSBub3JtYWxpemUodV9ub3JtYWxNYXRyaXggKiBUQU5HUkFNX05PUk1BTCk7XFxuXCIgK1xuXCIgICAgdl9jb2xvciA9IGFfY29sb3I7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWYgZGVmaW5lZChUQU5HUkFNX0xJR0hUSU5HX1ZFUlRFWClcXG5cIiArXG5cIiAgICAgICAgLy8gVmVydGV4IGxpZ2h0aW5nXFxuXCIgK1xuXCIgICAgICAgIHZlYzMgbm9ybWFsID0gdl9ub3JtYWw7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgLy8gTW9kaWZ5IG5vcm1hbCBiZWZvcmUgbGlnaHRpbmdcXG5cIiArXG5cIiAgICAgICAgI3ByYWdtYSB0YW5ncmFtOiBub3JtYWxcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAvLyBQYXNzIGxpZ2h0aW5nIGludGVuc2l0eSB0byBmcmFnbWVudCBzaGFkZXJcXG5cIiArXG5cIiAgICAgICAgdl9saWdodGluZyA9IGNhbGN1bGF0ZUxpZ2h0aW5nKHBvc2l0aW9uLnh5eiAtIHVfZXllLCBub3JtYWwsIHZlYzQoMS4pKTtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIENhbWVyYVxcblwiICtcblwiICAgIGNhbWVyYVByb2plY3Rpb24ocG9zaXRpb24pO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gKzEgaXMgdG8ga2VlcCBhbGwgbGF5ZXJzIGluY2x1ZGluZyBwcm94aWVzID4gMFxcblwiICtcblwiICAgIGFwcGx5TGF5ZXJPcmRlcihTSE9SVChhX3Bvc2l0aW9uLncpICsgdV90aWxlX3Byb3h5X2RlcHRoICsgMS4sIHBvc2l0aW9uKTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb247XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcIjtcblxuZXhwb3J0IGRlZmF1bHQgc2hhZGVyU291cmNlcztcbiIsIi8vIFRleHR1cmUgbWFuYWdlbWVudFxuaW1wb3J0IFV0aWxzIGZyb20gJy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCBzdWJzY3JpYmVNaXhpbiBmcm9tICcuLi91dGlscy9zdWJzY3JpYmUnO1xuaW1wb3J0IFdvcmtlckJyb2tlciBmcm9tICcuLi91dGlscy93b3JrZXJfYnJva2VyJztcbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG4vLyBHTCB0ZXh0dXJlIHdyYXBwZXIgb2JqZWN0IGZvciBrZWVwaW5nIHRyYWNrIG9mIGEgZ2xvYmFsIHNldCBvZiB0ZXh0dXJlcywga2V5ZWQgYnkgYSB1bmlxdWUgdXNlci1kZWZpbmVkIG5hbWVcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRleHR1cmUge1xuXG4gICAgY29uc3RydWN0b3IoZ2wsIG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmdsID0gZ2w7XG4gICAgICAgIHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICAgICAgaWYgKHRoaXMudGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iaW5kKCk7XG5cbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5yZXRhaW5fY291bnQgPSAwO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlX3R5cGUgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbmZpZ190eXBlID0gbnVsbDtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gbnVsbDsgICAgLy8gYSBQcm9taXNlIG9iamVjdCB0byB0cmFjayB0aGUgbG9hZGluZyBzdGF0ZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgICAgdGhpcy5sb2FkZWQgPSBmYWxzZTsgICAgLy8gc3VjY2Vzc2Z1bGx5IGxvYWRlZCBhcyBleHBlY3RlZFxuICAgICAgICB0aGlzLmZpbHRlcmluZyA9IG9wdGlvbnMuZmlsdGVyaW5nO1xuICAgICAgICB0aGlzLnNwcml0ZXMgPSBvcHRpb25zLnNwcml0ZXM7XG4gICAgICAgIHRoaXMudGV4Y29vcmRzID0ge307ICAgIC8vIHNwcml0ZSBVVnMgKFswLCAxXSByYW5nZSlcbiAgICAgICAgdGhpcy5zaXplcyA9IHt9OyAgICAgICAgLy8gc3ByaXRlIHNpemVzIChwaXhlbCBzaXplKVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gYSAxLXBpeGVsIGJsYWNrIHRleHR1cmUgc28gd2UgY2FuIHNhZmVseSByZW5kZXIgd2hpbGUgd2Ugd2FpdCBmb3IgYW4gaW1hZ2UgdG8gbG9hZFxuICAgICAgICAvLyBTZWU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTk3MjIyNDcvd2ViZ2wtd2FpdC1mb3ItdGV4dHVyZS10by1sb2FkXG4gICAgICAgIHRoaXMuc2V0RGF0YSgxLCAxLCBuZXcgVWludDhBcnJheShbMCwgMCwgMCwgMjU1XSksIHsgZmlsdGVyaW5nOiAnbmVhcmVzdCcgfSk7XG5cbiAgICAgICAgLy8gRGVzdHJveSBwcmV2aW91cyB0ZXh0dXJlIGlmIHByZXNlbnRcbiAgICAgICAgaWYgKFRleHR1cmUudGV4dHVyZXNbdGhpcy5uYW1lXSkge1xuICAgICAgICAgICAgLy8gUHJlc2VydmUgcHJldmlvdXMgcmV0YWluIGNvdW50XG4gICAgICAgICAgICB0aGlzLnJldGFpbl9jb3VudCA9IFRleHR1cmUudGV4dHVyZXNbdGhpcy5uYW1lXS5yZXRhaW5fY291bnQ7XG4gICAgICAgICAgICBUZXh0dXJlLnRleHR1cmVzW3RoaXMubmFtZV0ucmV0YWluX2NvdW50ID0gMDsgLy8gYWxsb3cgdG8gYmUgZnJlZWRcbiAgICAgICAgICAgIFRleHR1cmUudGV4dHVyZXNbdGhpcy5uYW1lXS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWNoZSB0ZXh0dXJlIGluc3RhbmNlIGFuZCBkZWZpbml0aW9uXG4gICAgICAgIFRleHR1cmUudGV4dHVyZXNbdGhpcy5uYW1lXSA9IHRoaXM7XG4gICAgICAgIFRleHR1cmUudGV4dHVyZV9jb25maWdzW3RoaXMubmFtZV0gPSBPYmplY3QuYXNzaWduKHsgbmFtZSB9LCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLmxvYWQob3B0aW9ucyk7XG4gICAgICAgIGxvZy50cmFjZShgY3JlYXRpbmcgVGV4dHVyZSAke3RoaXMubmFtZX1gKTtcbiAgICB9XG5cbiAgICAvLyBEZXN0cm95IGEgc2luZ2xlIHRleHR1cmUgaW5zdGFuY2VcbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5yZXRhaW5fY291bnQgPiAwKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoYFRleHR1cmUgJyR7dGhpcy5uYW1lfSc6IGRlc3Ryb3lpbmcgdGV4dHVyZSB3aXRoIHJldGFpbiBjb3VudCBvZiAnJHt0aGlzLnJldGFpbl9jb3VudH0nYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMudmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKTtcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbiAgICAgICAgZGVsZXRlIHRoaXMuZGF0YTtcbiAgICAgICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICAgICAgZGVsZXRlIFRleHR1cmUudGV4dHVyZXNbdGhpcy5uYW1lXTtcbiAgICAgICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuICAgICAgICBsb2cudHJhY2UoYGRlc3Ryb3lpbmcgVGV4dHVyZSAke3RoaXMubmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXRhaW4gKCkge1xuICAgICAgICB0aGlzLnJldGFpbl9jb3VudCsrO1xuICAgIH1cblxuICAgIHJlbGVhc2UgKCkge1xuICAgICAgICBpZiAodGhpcy5yZXRhaW5fY291bnQgPD0gMCkge1xuICAgICAgICAgICAgbG9nLmVycm9yKGBUZXh0dXJlICcke3RoaXMubmFtZX0nOiByZWxlYXNpbmcgdGV4dHVyZSB3aXRoIHJldGFpbiBjb3VudCBvZiAnJHt0aGlzLnJldGFpbl9jb3VudH0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJldGFpbl9jb3VudC0tO1xuICAgICAgICBpZiAodGhpcy5yZXRhaW5fY291bnQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiaW5kKHVuaXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB1bml0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKFRleHR1cmUuYWN0aXZlVW5pdCAhPT0gdW5pdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2wuYWN0aXZlVGV4dHVyZSh0aGlzLmdsLlRFWFRVUkUwICsgdW5pdCk7XG4gICAgICAgICAgICAgICAgVGV4dHVyZS5hY3RpdmVVbml0ID0gdW5pdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoVGV4dHVyZS5hY3RpdmVUZXh0dXJlICE9PSB0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2wuYmluZFRleHR1cmUodGhpcy5nbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xuICAgICAgICAgICAgVGV4dHVyZS5hY3RpdmVUZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZChvcHRpb25zKSB7XG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZyB8fCBQcm9taXNlLnJlc29sdmUodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBudWxsO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudXJsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5jb25maWdfdHlwZSA9ICd1cmwnO1xuICAgICAgICAgICAgdGhpcy5zZXRVcmwob3B0aW9ucy51cmwsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jb25maWdfdHlwZSA9ICdlbGVtZW50JztcbiAgICAgICAgICAgIHRoaXMuc2V0RWxlbWVudChvcHRpb25zLmVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLndpZHRoICYmIG9wdGlvbnMuaGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ190eXBlID0gJ2RhdGEnO1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhKG9wdGlvbnMud2lkdGgsIG9wdGlvbnMuaGVpZ2h0LCBvcHRpb25zLmRhdGEsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID1cbiAgICAgICAgICAgICh0aGlzLmxvYWRpbmcgJiYgdGhpcy5sb2FkaW5nLnRoZW4oKCkgPT4geyB0aGlzLmNhbGN1bGF0ZVNwcml0ZXMoKTsgcmV0dXJuIHRoaXM7IH0pKSB8fFxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xuICAgIH1cblxuICAgIC8vIFNldHMgdGV4dHVyZSBmcm9tIGFuIHVybFxuICAgIHNldFVybCh1cmwsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIXRoaXMudmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChUZXh0dXJlLmJhc2VfdXJsKSB7XG4gICAgICAgICAgICB1cmwgPSBVdGlscy5hZGRCYXNlVVJMKHVybCwgVGV4dHVyZS5iYXNlX3VybCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVybCA9IFV0aWxzLmNhY2hlQnVzdGVyRm9yVXJsKHVybCk7IC8vIHNhdmUgVVJMIHJlZmVyZW5jZSAod2lsbCBiZSBvdmVyd3JpdHRlbiB3aGVuIGVsZW1lbnQgaXMgbG9hZGVkIGJlbG93KVxuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMudXJsO1xuICAgICAgICB0aGlzLnNvdXJjZV90eXBlID0gJ3VybCc7XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbGV0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFbGVtZW50KGltYWdlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4oYFRleHR1cmUgJyR7dGhpcy5uYW1lfSc6IGZhaWxlZCB0byBsb2FkIHVybDogJyR7dGhpcy5zb3VyY2V9J2AsIGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBUZXh0dXJlLnRyaWdnZXIoJ3dhcm5pbmcnLCB7IG1lc3NhZ2U6IGBGYWlsZWQgdG8gbG9hZCB0ZXh0dXJlIGZyb20gJHt0aGlzLnNvdXJjZX1gLCBlcnJvcjogZSwgdGV4dHVyZTogb3B0aW9ucyB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpbWFnZS5vbmVycm9yID0gZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gV2FybiBhbmQgcmVzb2x2ZSBvbiBlcnJvclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbG9nLndhcm4oYFRleHR1cmUgJyR7dGhpcy5uYW1lfSc6IGZhaWxlZCB0byBsb2FkIHVybDogJyR7dGhpcy5zb3VyY2V9J2AsIGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIFRleHR1cmUudHJpZ2dlcignd2FybmluZycsIHsgbWVzc2FnZTogYEZhaWxlZCB0byBsb2FkIHRleHR1cmUgZnJvbSAke3RoaXMuc291cmNlfWAsIGVycm9yOiBlLCB0ZXh0dXJlOiBvcHRpb25zIH0pO1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcbiAgICAgICAgICAgIGltYWdlLnNyYyA9IHRoaXMuc291cmNlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcbiAgICB9XG5cbiAgICAvLyBTZXRzIHRleHR1cmUgdG8gYSByYXcgaW1hZ2UgYnVmZmVyXG4gICAgc2V0RGF0YSh3aWR0aCwgaGVpZ2h0LCBkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZSA9IGRhdGE7XG4gICAgICAgIHRoaXMuc291cmNlX3R5cGUgPSAnZGF0YSc7XG5cbiAgICAgICAgdGhpcy51cGRhdGUob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc2V0RmlsdGVyaW5nKG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIHRleHR1cmUgdG8gdHJhY2sgYSBlbGVtZW50IChjYW52YXMvaW1hZ2UpXG4gICAgc2V0RWxlbWVudChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBlbCA9IGVsZW1lbnQ7XG5cbiAgICAgICAgLy8gYSBzdHJpbmcgZWxlbWVudCBpcyBpbnRlcnBldGVkIGFzIGEgQ1NTIHNlbGVjdG9yXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCB8fFxuICAgICAgICAgICAgZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgfHxcbiAgICAgICAgICAgIGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZV90eXBlID0gJ2VsZW1lbnQnO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyaW5nKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBtc2cgPSBgdGhlICdlbGVtZW50JyBwYXJhbWV0ZXIgKFxcYGVsZW1lbnQ6ICR7SlNPTi5zdHJpbmdpZnkoZWwpfVxcYCkgbXVzdCBiZSBhIENTUyBgO1xuICAgICAgICAgICAgbXNnICs9IGBzZWxlY3RvciBzdHJpbmcsIG9yIGEgPGNhbnZhcz4sIDxpbWFnZT4gb3IgPHZpZGVvPiBvYmplY3RgO1xuICAgICAgICAgICAgbG9nLndhcm4oYFRleHR1cmUgJyR7dGhpcy5uYW1lfSc6ICR7bXNnfWAsIG9wdGlvbnMpO1xuICAgICAgICAgICAgVGV4dHVyZS50cmlnZ2VyKCd3YXJuaW5nJywgeyBtZXNzYWdlOiBgRmFpbGVkIHRvIGxvYWQgdGV4dHVyZSBiZWNhdXNlICR7bXNnfWAsIHRleHR1cmU6IG9wdGlvbnMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IFByb21pc2UucmVzb2x2ZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcbiAgICB9XG5cbiAgICAvLyBVcGxvYWRzIGN1cnJlbnQgaW1hZ2Ugb3IgYnVmZmVyIHRvIHRoZSBHUFUgKGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSBhbmltYXRlZCB0ZXh0dXJlcyBvbiB0aGUgZmx5KVxuICAgIHVwZGF0ZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJpbmQoKTtcbiAgICAgICAgdGhpcy5nbC5waXhlbFN0b3JlaSh0aGlzLmdsLlVOUEFDS19GTElQX1lfV0VCR0wsIChvcHRpb25zLlVOUEFDS19GTElQX1lfV0VCR0wgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlKSk7XG4gICAgICAgIHRoaXMuZ2wucGl4ZWxTdG9yZWkodGhpcy5nbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIG9wdGlvbnMuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHx8IGZhbHNlKTtcblxuICAgICAgICAvLyBJbWFnZSBvciBDYW52YXMgZWxlbWVudFxuICAgICAgICBpZiAodGhpcy5zb3VyY2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCB8fCB0aGlzLnNvdXJjZSBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQgfHxcbiAgICAgICAgICAgICh0aGlzLnNvdXJjZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgJiYgdGhpcy5zb3VyY2UuY29tcGxldGUpKSB7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNvdXJjZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zb3VyY2UuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5nbC50ZXhJbWFnZTJEKHRoaXMuZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5nbC5SR0JBLCB0aGlzLmdsLlJHQkEsIHRoaXMuZ2wuVU5TSUdORURfQllURSwgdGhpcy5zb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJhdyBpbWFnZSBidWZmZXJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zb3VyY2VfdHlwZSA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICB0aGlzLmdsLnRleEltYWdlMkQodGhpcy5nbC5URVhUVVJFXzJELCAwLCB0aGlzLmdsLlJHQkEsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmdsLlJHQkEsIHRoaXMuZ2wuVU5TSUdORURfQllURSwgdGhpcy5zb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgVGV4dHVyZS50cmlnZ2VyKCd1cGRhdGUnLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBEZXRlcm1pbmVzIGFwcHJvcHJpYXRlIGZpbHRlcmluZyBtb2RlXG4gICAgc2V0RmlsdGVyaW5nKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIXRoaXMudmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMuZmlsdGVyaW5nID0gb3B0aW9ucy5maWx0ZXJpbmcgfHwgJ2xpbmVhcic7XG5cbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICAgICAgdGhpcy5iaW5kKCk7XG5cbiAgICAgICAgLy8gRm9yIHBvd2VyLW9mLTIgdGV4dHVyZXMsIHRoZSBmb2xsb3dpbmcgcHJlc2V0cyBhcmUgYXZhaWxhYmxlOlxuICAgICAgICAvLyBtaXBtYXA6IGxpbmVhciBibGVuZCBmcm9tIG5lYXJlc3QgbWlwXG4gICAgICAgIC8vIGxpbmVhcjogbGluZWFyIGJsZW5kIGZyb20gb3JpZ2luYWwgaW1hZ2UgKG5vIG1pcHMpXG4gICAgICAgIC8vIG5lYXJlc3Q6IG5lYXJlc3QgcGl4ZWwgZnJvbSBvcmlnaW5hbCBpbWFnZSAobm8gbWlwcywgJ2Jsb2NreScgbG9vaylcbiAgICAgICAgaWYgKFV0aWxzLmlzUG93ZXJPZjIodGhpcy53aWR0aCkgJiYgVXRpbHMuaXNQb3dlck9mMih0aGlzLmhlaWdodCkpIHtcbiAgICAgICAgICAgIHRoaXMucG93ZXJfb2ZfMiA9IHRydWU7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBvcHRpb25zLlRFWFRVUkVfV1JBUF9TIHx8IChvcHRpb25zLnJlcGVhdCAmJiBnbC5SRVBFQVQpIHx8IGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgb3B0aW9ucy5URVhUVVJFX1dSQVBfVCB8fCAob3B0aW9ucy5yZXBlYXQgJiYgZ2wuUkVQRUFUKSB8fCBnbC5DTEFNUF9UT19FREdFKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyaW5nID09PSAnbWlwbWFwJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyaW5nID0gJ21pcG1hcCc7XG4gICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSKTsgLy8gVE9ETzogdXNlIHRyaWxpbmVhciBmaWx0ZXJpbmcgYnkgZGVmdWFsdCBpbnN0ZWFkP1xuICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpO1xuICAgICAgICAgICAgICAgIGdsLmdlbmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfMkQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5maWx0ZXJpbmcgPT09ICdsaW5lYXInKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmcgPSAnbGluZWFyJztcbiAgICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTElORUFSKTtcbiAgICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTElORUFSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuZmlsdGVyaW5nID09PSAnbmVhcmVzdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmluZyA9ICduZWFyZXN0JztcbiAgICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7XG4gICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gV2ViR0wgaGFzIHN0cmljdCByZXF1aXJlbWVudHMgb24gbm9uLXBvd2VyLW9mLTIgdGV4dHVyZXM6XG4gICAgICAgICAgICAvLyBObyBtaXBtYXBzIGFuZCBtdXN0IGNsYW1wIHRvIGVkZ2VcbiAgICAgICAgICAgIHRoaXMucG93ZXJfb2ZfMiA9IGZhbHNlO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyaW5nID09PSAnbmVhcmVzdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmluZyA9ICduZWFyZXN0JztcbiAgICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7XG4gICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7IC8vIGRlZmF1bHQgdG8gbGluZWFyIGZvciBub24tcG93ZXItb2YtMiB0ZXh0dXJlc1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyaW5nID0gJ2xpbmVhcic7XG4gICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLkxJTkVBUik7XG4gICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLkxJTkVBUik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBUZXh0dXJlLnRyaWdnZXIoJ3VwZGF0ZScsIHRoaXMpO1xuICAgIH1cblxuICAgIC8vIFByZS1jYWxjIHNwcml0ZSByZWdpb25zIGZvciBhIHRleHR1cmUgc3ByaXRlIGluIFVWIFswLCAxXSBzcGFjZVxuICAgIGNhbGN1bGF0ZVNwcml0ZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnNwcml0ZXMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHMgaW4gdGhpcy5zcHJpdGVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNwcml0ZSA9IHRoaXMuc3ByaXRlc1tzXTtcblxuICAgICAgICAgICAgICAgIC8vIE1hcCBbMCwgMF0gdG8gWzEsIDFdIGNvb3JkcyB0byB0aGUgYXBwcm9wcmlhdGUgc3ByaXRlIHN1Yi1hcmVhIG9mIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICAgICAgdGhpcy50ZXhjb29yZHNbc10gPSBUZXh0dXJlLmdldFRleGNvb3Jkc0ZvclNwcml0ZShcbiAgICAgICAgICAgICAgICAgICAgW3Nwcml0ZVswXSwgc3ByaXRlWzFdXSxcbiAgICAgICAgICAgICAgICAgICAgW3Nwcml0ZVsyXSwgc3ByaXRlWzNdXSxcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMud2lkdGgsIHRoaXMuaGVpZ2h0XVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAvLyBQaXhlbCBzaXplIG9mIHNwcml0ZVxuICAgICAgICAgICAgICAgIHRoaXMuc2l6ZXNbc10gPSBbc3ByaXRlWzJdLCBzcHJpdGVbM11dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cblxuLy8gU3RhdGljL2NsYXNzIG1ldGhvZHMgYW5kIHN0YXRlXG5cblRleHR1cmUuY3JlYXRlID0gZnVuY3Rpb24gKGdsLCBuYW1lLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKGdsLCBuYW1lLCBvcHRpb25zKTtcbn07XG5cblRleHR1cmUucmV0YWluID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAoVGV4dHVyZS50ZXh0dXJlc1tuYW1lXSkge1xuICAgICAgICBUZXh0dXJlLnRleHR1cmVzW25hbWVdLnJldGFpbigpO1xuICAgIH1cbn07XG5cblRleHR1cmUucmVsZWFzZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKFRleHR1cmUudGV4dHVyZXNbbmFtZV0pIHtcbiAgICAgICAgVGV4dHVyZS50ZXh0dXJlc1tuYW1lXS5yZWxlYXNlKCk7XG4gICAgfVxufTtcblxuLy8gRGVzdHJveSBhbGwgdGV4dHVyZSBpbnN0YW5jZXMgZm9yIGEgZ2l2ZW4gR0wgY29udGV4dFxuVGV4dHVyZS5kZXN0cm95ID0gZnVuY3Rpb24gKGdsKSB7XG4gICAgdmFyIHRleHR1cmVzID0gT2JqZWN0LmtleXMoVGV4dHVyZS50ZXh0dXJlcyk7XG4gICAgZm9yICh2YXIgdCBvZiB0ZXh0dXJlcykge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUudGV4dHVyZXNbdF07XG4gICAgICAgIGlmICh0ZXh0dXJlLmdsID09PSBnbCkge1xuICAgICAgICAgICAgdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vLyBHZXQgc3ByaXRlIHBpeGVsIHNpemUgYW5kIFVWc1xuVGV4dHVyZS5nZXRTcHJpdGVJbmZvID0gZnVuY3Rpb24gKHRleG5hbWUsIHNwcml0ZSkge1xuICAgIGxldCB0ZXh0dXJlID0gVGV4dHVyZS50ZXh0dXJlc1t0ZXhuYW1lXTtcbiAgICByZXR1cm4gdGV4dHVyZSAmJiB7IHNpemU6IHRleHR1cmUuc2l6ZXNbc3ByaXRlXSwgdGV4Y29vcmRzOiB0ZXh0dXJlLnRleGNvb3Jkc1tzcHJpdGVdIH07XG59O1xuXG4vLyBSZS1zY2FsZSBVVnMgZnJvbSBbMCwgMV0gcmFuZ2UgdG8gYSBzbWFsbGVyIGFyZWEgd2l0aGluIHRoZSBpbWFnZVxuVGV4dHVyZS5nZXRUZXhjb29yZHNGb3JTcHJpdGUgPSBmdW5jdGlvbiAoYXJlYV9vcmlnaW4sIGFyZWFfc2l6ZSwgdGV4X3NpemUpIHtcbiAgICB2YXIgYXJlYV9vcmlnaW5feSA9IHRleF9zaXplWzFdIC0gYXJlYV9vcmlnaW5bMV0gLSBhcmVhX3NpemVbMV07XG5cbiAgICByZXR1cm4gW1xuICAgICAgICBhcmVhX29yaWdpblswXSAvIHRleF9zaXplWzBdLFxuICAgICAgICBhcmVhX29yaWdpbl95IC8gdGV4X3NpemVbMV0sXG4gICAgICAgIChhcmVhX3NpemVbMF0gKyBhcmVhX29yaWdpblswXSkgLyB0ZXhfc2l6ZVswXSxcbiAgICAgICAgKGFyZWFfc2l6ZVsxXSArIGFyZWFfb3JpZ2luX3kpIC8gdGV4X3NpemVbMV1cbiAgICBdO1xufTtcblxuLy8gQ3JlYXRlIGEgc2V0IG9mIHRleHR1cmVzIGtleWVkIGluIGFuIG9iamVjdFxuLy8gT3B0aW9uYWxseSBsb2FkIGVhY2ggaWYgaXQgaGFzIGEgVVJMIHNwZWNpZmllZFxuVGV4dHVyZS5jcmVhdGVGcm9tT2JqZWN0ID0gZnVuY3Rpb24gKGdsLCB0ZXh0dXJlcykge1xuICAgIGxldCBsb2FkaW5nID0gW107XG4gICAgaWYgKHRleHR1cmVzKSB7XG4gICAgICAgIGZvciAobGV0IHRleG5hbWUgaW4gdGV4dHVyZXMpIHtcbiAgICAgICAgICAgIGxldCBjb25maWcgPSB0ZXh0dXJlc1t0ZXhuYW1lXTtcblxuICAgICAgICAgICAgLy8gSWYgdGV4dHVyZSBhbHJlYWR5IGV4aXN0cyBhbmQgZGVmaW5pdGlvbiBoYXNuJ3QgY2hhbmdlZCwgbm8gbmVlZCB0byByZS1jcmVhdGVcbiAgICAgICAgICAgIC8vIE5vdGU6IHRvIGF2b2lkIGZsaWNrZXIgd2hlbiBvdGhlciB0ZXh0dXJlcy9zY2VuZSBpdGVtcyBjaGFuZ2VcbiAgICAgICAgICAgIGlmICghVGV4dHVyZS5jaGFuZ2VkKHRleG5hbWUsIGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHRleHR1cmUgPSBUZXh0dXJlLmNyZWF0ZShnbCwgdGV4bmFtZSwgY29uZmlnKTtcbiAgICAgICAgICAgIGxvYWRpbmcucHVzaCh0ZXh0dXJlLmxvYWRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLmFsbChsb2FkaW5nKTtcbn07XG5cbi8vIEluZGljYXRlIGlmIGEgdGV4dHVyZSBkZWZpbml0aW9uIHdvdWxkIGJlIGEgY2hhbmdlIGZyb20gdGhlIGN1cnJlbnQgY2FjaGVcblRleHR1cmUuY2hhbmdlZCA9IGZ1bmN0aW9uIChuYW1lLCBjb25maWcpIHtcbiAgICBsZXQgdGV4dHVyZSA9IFRleHR1cmUudGV4dHVyZXNbbmFtZV07XG4gICAgaWYgKHRleHR1cmUpIHsgLy8gY2FjaGVkIHRleHR1cmVcbiAgICAgICAgLy8gY2FudmFzL2ltYWdlLWJhc2VkIHRleHR1cmVzIGFyZSBjb25zaWRlcmVkIGR5bmFtaWMgYW5kIGFsd2F5cyByZWZyZXNoXG4gICAgICAgIGlmICh0ZXh0dXJlLmNvbmZpZ190eXBlID09PSAnZWxlbWVudCcgfHwgY29uZmlnLmVsZW1lbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb21wYXJlIGRlZmluaXRpb25zXG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShUZXh0dXJlLnRleHR1cmVfY29uZmlnc1tuYW1lXSkgPT09XG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShPYmplY3QuYXNzaWduKHsgbmFtZSB9LCBjb25maWcpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcblxuLy8gR2V0IG1ldGFkYXRhIGZvciBhIHRleHR1cmUgYnkgbmFtZVxuLy8gUmV0dXJucyB2aWEgcHJvbWlzZSwgaW4gY2FzZSB0ZXh0dXJlIGlzIHN0aWxsIGxvYWRpbmdcbi8vIENhbiBiZSBjYWxsZWQgb24gbWFpbiB0aHJlYWQgZnJvbSB3b3JrZXIsIHRvIHN5bmMgdGV4dHVyZSBpbmZvIHRvIHdvcmtlclxuVGV4dHVyZS5nZXRJbmZvID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAvLyBHZXQgaW5mbyBmb3IgYWxsIHRleHR1cmVzIGJ5IGRlZmF1bHRcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgbmFtZSA9IE9iamVjdC5rZXlzKFRleHR1cmUudGV4dHVyZXMpO1xuICAgIH1cblxuICAgIC8vIEdldCBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChuYW1lLm1hcChuID0+IFRleHR1cmUuZ2V0SW5mbyhuKSkpO1xuICAgIH1cblxuICAgIC8vIEdldCBzaW5nbGUgdGV4dHVyZVxuICAgIHZhciB0ZXggPSBUZXh0dXJlLnRleHR1cmVzW25hbWVdO1xuICAgIGlmICh0ZXgpIHtcbiAgICAgICAgLy8gV2FpdCBmb3IgdGhpcyB0ZXh0dXJlIHRvIGZpbmlzaCBsb2FkaW5nLCBvciByZXR1cm4gaW1tZWRpYXRlbHlcbiAgICAgICAgdmFyIGxvYWRpbmcgPSB0ZXgubG9hZGluZyB8fCBQcm9taXNlLnJlc29sdmUodGV4KTtcbiAgICAgICAgcmV0dXJuIGxvYWRpbmcudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvLyBSZXR1cm4gYSBzdWJzZXQgb2YgdGV4dHVyZSBpbmZvXG4gICAgICAgICAgICAvLyAoY29tcGF0aWJsZSB3L3N0cnVjdHVyZWQgY2xvbmluZywgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYSB3b3JrZXIpXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRleC5uYW1lLFxuICAgICAgICAgICAgICAgIHdpZHRoOiB0ZXgud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0ZXguaGVpZ2h0LFxuICAgICAgICAgICAgICAgIHNwcml0ZXM6IHRleC5zcHJpdGVzLFxuICAgICAgICAgICAgICAgIHRleGNvb3JkczogdGV4LnRleGNvb3JkcyxcbiAgICAgICAgICAgICAgICBzaXplczogdGV4LnNpemVzLFxuICAgICAgICAgICAgICAgIGZpbHRlcmluZzogdGV4LmZpbHRlcmluZyxcbiAgICAgICAgICAgICAgICBwb3dlcl9vZl8yOiB0ZXgucG93ZXJfb2ZfMixcbiAgICAgICAgICAgICAgICB2YWxpZDogdGV4LnZhbGlkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIE5vIHRleHR1cmUgZm91bmRcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9XG59O1xuXG4vLyBTeW5jIHRleHR1cmUgaW5mbyB0byB3b3JrZXJcbi8vIENhbGxlZCBmcm9tIHdvcmtlciwgZ2V0cyBpbmZvIG9uIG9uZSBvciBtb3JlIHRleHR1cmVzIGluZm8gZnJvbSBtYWluIHRocmVhZCB2aWEgcmVtb3RlIGNhbGwsIHRoZW4gc3RvcmVzIGl0XG4vLyBsb2NhbGx5IGluIHdvcmtlci4gJ3RleHR1cmVzJyBjYW4gYmUgYW4gYXJyYXkgb2YgdGV4dHVyZSBuYW1lcyB0byBzeW5jLCBvciBpZiBudWxsLCBhbGwgdGV4dHVyZXMgYXJlIHN5bmNlZC5cblRleHR1cmUuc3luY1RleHR1cmVzVG9Xb3JrZXIgPSBmdW5jdGlvbiAobmFtZXMpIHtcbiAgICByZXR1cm4gV29ya2VyQnJva2VyLnBvc3RNZXNzYWdlKCdUZXh0dXJlLmdldEluZm8nLCBuYW1lcykuXG4gICAgICAgIHRoZW4odGV4dHVyZXMgPT4ge1xuICAgICAgICAgICAgZm9yICh2YXIgdGV4IG9mIHRleHR1cmVzKSB7XG4gICAgICAgICAgICAgICAgVGV4dHVyZS50ZXh0dXJlc1t0ZXgubmFtZV0gPSB0ZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gVGV4dHVyZS50ZXh0dXJlcztcbiAgICAgICAgfSk7XG59O1xuXG4vLyBSZXBvcnQgbWF4IHRleHR1cmUgc2l6ZSBmb3IgYSBHTCBjb250ZXh0XG5UZXh0dXJlLmdldE1heFRleHR1cmVTaXplID0gZnVuY3Rpb24gKGdsKSB7XG4gICAgcmV0dXJuIGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9TSVpFKTtcbn07XG5cbi8vIEdsb2JhbCBzZXQgb2YgdGV4dHVyZXMsIGJ5IG5hbWVcblRleHR1cmUudGV4dHVyZXMgPSB7fTtcblRleHR1cmUudGV4dHVyZV9jb25maWdzID0ge307XG5UZXh0dXJlLmJvdW5kVGV4dHVyZSA9IC0xO1xuVGV4dHVyZS5hY3RpdmVVbml0ID0gLTE7XG5cblRleHR1cmUuYmFzZV91cmwgPSBudWxsOyAvLyBvcHRpb25hbCBiYXNlIFVSTCB0byBhZGQgdG8gdGV4dHVyZXNcblxuV29ya2VyQnJva2VyLmFkZFRhcmdldCgnVGV4dHVyZScsIFRleHR1cmUpO1xuc3Vic2NyaWJlTWl4aW4oVGV4dHVyZSk7XG4iLCIvLyBDcmVhdGVzIGEgVmVydGV4IEFycmF5IE9iamVjdCBpZiB0aGUgZXh0ZW5zaW9uIGlzIGF2YWlsYWJsZSwgb3IgZmFsbHMgYmFjayBvbiBzdGFuZGFyZCBhdHRyaWJ1dGUgY2FsbHNcblxuaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5cbnZhciBWZXJ0ZXhBcnJheU9iamVjdDtcbmV4cG9ydCBkZWZhdWx0IFZlcnRleEFycmF5T2JqZWN0ID0ge307XG5cblZlcnRleEFycmF5T2JqZWN0LmRpc2FibGVkID0gZmFsc2U7IC8vIHNldCB0byB0cnVlIHRvIGRpc2FibGUgVkFPcyBldmVuIGlmIGV4dGVuc2lvbiBpcyBhdmFpbGFibGVcblZlcnRleEFycmF5T2JqZWN0LmJvdW5kX3ZhbyA9IG51bGw7IC8vIGN1cnJlbnRseSBib3VuZCBWQU9cblxuVmVydGV4QXJyYXlPYmplY3QuaW5pdCA9IGZ1bmN0aW9uIChnbCkge1xuICAgIGlmIChWZXJ0ZXhBcnJheU9iamVjdC5leHQgPT0gbnVsbCkge1xuICAgICAgICBpZiAoVmVydGV4QXJyYXlPYmplY3QuZGlzYWJsZWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgIFZlcnRleEFycmF5T2JqZWN0LmV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFZlcnRleEFycmF5T2JqZWN0LmV4dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBsb2cuaW5mbygnVmVydGV4IEFycmF5IE9iamVjdCBleHRlbnNpb24gYXZhaWxhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoVmVydGV4QXJyYXlPYmplY3QuZGlzYWJsZWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKCdWZXJ0ZXggQXJyYXkgT2JqZWN0IGV4dGVuc2lvbiBOT1QgYXZhaWxhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsb2cud2FybignVmVydGV4IEFycmF5IE9iamVjdCBleHRlbnNpb24gZm9yY2UgZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblZlcnRleEFycmF5T2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChzZXR1cCwgdGVhcmRvd24pIHtcbiAgICBsZXQgdmFvID0ge307XG4gICAgdmFvLnNldHVwID0gc2V0dXA7XG4gICAgdmFvLnRlYXJkb3duID0gdGVhcmRvd247XG5cbiAgICBsZXQgZXh0ID0gVmVydGV4QXJyYXlPYmplY3QuZXh0O1xuICAgIGlmIChleHQgIT0gbnVsbCkge1xuICAgICAgICB2YW8uX3ZhbyA9IGV4dC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpO1xuICAgICAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhby5fdmFvKTtcbiAgICB9XG5cbiAgICB2YW8uc2V0dXAodHJ1ZSk7XG5cbiAgICByZXR1cm4gdmFvO1xufTtcblxuVmVydGV4QXJyYXlPYmplY3QuYmluZCA9IGZ1bmN0aW9uICh2YW8pIHtcbiAgICBsZXQgZXh0ID0gVmVydGV4QXJyYXlPYmplY3QuZXh0O1xuICAgIGlmICh2YW8gIT0gbnVsbCkge1xuICAgICAgICBpZiAoZXh0ICE9IG51bGwgJiYgdmFvLl92YW8gIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8uX3Zhbyk7XG4gICAgICAgICAgICBWZXJ0ZXhBcnJheU9iamVjdC5ib3VuZF92YW8gPSB2YW87XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YW8uc2V0dXAoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoZXh0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoVmVydGV4QXJyYXlPYmplY3QuYm91bmRfdmFvICE9IG51bGwgJiYgdHlwZW9mIFZlcnRleEFycmF5T2JqZWN0LmJvdW5kX3Zhby50ZWFyZG93biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgVmVydGV4QXJyYXlPYmplY3QuYm91bmRfdmFvLnRlYXJkb3duKCk7XG4gICAgICAgIH1cbiAgICAgICAgVmVydGV4QXJyYXlPYmplY3QuYm91bmRfdmFvID0gbnVsbDtcbiAgICB9XG59O1xuIiwiLy8gTWFuYWdlIHJlbmRlcmluZyBmb3IgcHJpbWl0aXZlc1xuaW1wb3J0IFNoYWRlclByb2dyYW0gZnJvbSAnLi9zaGFkZXJfcHJvZ3JhbSc7XG5pbXBvcnQgVmVydGV4QXJyYXlPYmplY3QgZnJvbSAnLi92YW8nO1xuaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5cbi8vIEEgc2luZ2xlIG1lc2gvVkJPLCBkZXNjcmliZWQgYnkgYSB2ZXJ0ZXggbGF5b3V0LCB0aGF0IGNhbiBiZSBkcmF3biB3aXRoIG9uZSBvciBtb3JlIHByb2dyYW1zXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWQk9NZXNoICB7XG5cbiAgICBjb25zdHJ1Y3RvcihnbCwgdmVydGV4X2RhdGEsIHZlcnRleF9sYXlvdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgdGhpcy5nbCA9IGdsO1xuICAgICAgICB0aGlzLnZlcnRleF9kYXRhID0gdmVydGV4X2RhdGE7IC8vIHR5cGVkIGFycmF5XG4gICAgICAgIHRoaXMudmVydGV4X2xheW91dCA9IHZlcnRleF9sYXlvdXQ7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5nbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgdGhpcy5kcmF3X21vZGUgPSBvcHRpb25zLmRyYXdfbW9kZSB8fCB0aGlzLmdsLlRSSUFOR0xFUztcbiAgICAgICAgdGhpcy5kYXRhX3VzYWdlID0gb3B0aW9ucy5kYXRhX3VzYWdlIHx8IHRoaXMuZ2wuU1RBVElDX0RSQVc7XG4gICAgICAgIHRoaXMudmVydGljZXNfcGVyX2dlb21ldHJ5ID0gMzsgLy8gVE9ETzogc3VwcG9ydCBsaW5lcywgc3RyaXAsIGZhbiwgZXRjLlxuICAgICAgICB0aGlzLnVuaWZvcm1zID0gb3B0aW9ucy51bmlmb3JtcztcbiAgICAgICAgdGhpcy5yZXRhaW4gPSBvcHRpb25zLnJldGFpbiB8fCBmYWxzZTsgLy8gd2hldGhlciB0byByZXRhaW4gbWVzaCBkYXRhIGluIENQVSBhZnRlciB1cGxvYWRpbmcgdG8gR1BVXG5cbiAgICAgICAgdGhpcy52ZXJ0ZXhfY291bnQgPSB0aGlzLnZlcnRleF9kYXRhLmJ5dGVMZW5ndGggLyB0aGlzLnZlcnRleF9sYXlvdXQuc3RyaWRlO1xuICAgICAgICB0aGlzLmdlb21ldHJ5X2NvdW50ID0gdGhpcy52ZXJ0ZXhfY291bnQgLyB0aGlzLnZlcnRpY2VzX3Blcl9nZW9tZXRyeTtcbiAgICAgICAgdGhpcy52YW9zID0gbmV3IE1hcCgpOyAvLyBtYXAgb2YgVmVydGV4QXJyYXlPYmplY3RzLCBrZXllZCBieSBwcm9ncmFtXG5cbiAgICAgICAgdGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMuZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZ2wuYnVmZmVyRGF0YSh0aGlzLmdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhfZGF0YSwgdGhpcy5kYXRhX3VzYWdlKTtcblxuICAgICAgICBpZiAoIXRoaXMucmV0YWluKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy52ZXJ0ZXhfZGF0YTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIsIGJ5IGRlZmF1bHQgd2l0aCBjdXJyZW50bHkgYm91bmQgcHJvZ3JhbSwgb3Igb3RoZXJ3aXNlIHdpdGggb3B0aW9uYWxseSBwcm92aWRlZCBvbmVcbiAgICByZW5kZXIob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9yZW5kZXJfc2V0dXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcl9zZXR1cCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByb2dyYW0gPSBvcHRpb25zLnByb2dyYW0gfHwgU2hhZGVyUHJvZ3JhbS5jdXJyZW50O1xuICAgICAgICBwcm9ncmFtLnVzZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLnVuaWZvcm1zKSB7XG4gICAgICAgICAgICBwcm9ncmFtLnNhdmVVbmlmb3Jtcyh0aGlzLnVuaWZvcm1zKTtcbiAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybXModGhpcy51bmlmb3JtcywgZmFsc2UpOyAvLyBkb24ndCByZXNldCB0ZXh0dXJlIHVuaXRcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmluZChwcm9ncmFtKTtcblxuICAgICAgICAvLyBUT0RPOiBzdXBwb3J0IGVsZW1lbnQgYXJyYXkgbW9kZVxuICAgICAgICB0aGlzLmdsLmRyYXdBcnJheXModGhpcy5kcmF3X21vZGUsIDAsIHRoaXMudmVydGV4X2NvdW50KTtcbiAgICAgICAgVmVydGV4QXJyYXlPYmplY3QuYmluZChudWxsKTtcblxuICAgICAgICBpZiAodGhpcy51bmlmb3Jtcykge1xuICAgICAgICAgICAgcHJvZ3JhbS5yZXN0b3JlVW5pZm9ybXModGhpcy51bmlmb3Jtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBCaW5kIGJ1ZmZlcnMgYW5kIHZlcnRleCBhdHRyaWJ1dGVzIHRvIHByZXBhcmUgZm9yIHJlbmRlcmluZ1xuICAgIGJpbmQocHJvZ3JhbSkge1xuICAgICAgICAvLyBCaW5kIFZBTyBmb3IgdGhpcyBwcm9nYW0sIG9yIGNyZWF0ZSBvbmVcbiAgICAgICAgbGV0IHZhbyA9IHRoaXMudmFvcy5nZXQocHJvZ3JhbSk7XG4gICAgICAgIGlmICh2YW8pIHtcbiAgICAgICAgICAgIFZlcnRleEFycmF5T2JqZWN0LmJpbmQodmFvKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFvcy5zZXQocHJvZ3JhbSwgVmVydGV4QXJyYXlPYmplY3QuY3JlYXRlKChmb3JjZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2wuYmluZEJ1ZmZlcih0aGlzLmdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMudmVydGV4X2xheW91dC5lbmFibGUodGhpcy5nbCwgcHJvZ3JhbSwgZm9yY2UpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgICAgIGxvZy50cmFjZSgnVkJPTWVzaC5kZXN0cm95OiBkZWxldGUgYnVmZmVyJyArICh0aGlzLnZlcnRleF9kYXRhID8gYCBvZiBzaXplICR7dGhpcy52ZXJ0ZXhfZGF0YS5ieXRlTGVuZ3RofWAgOiAnJykpO1xuXG4gICAgICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICAgICAgdGhpcy5idWZmZXIgPSBudWxsO1xuICAgICAgICBkZWxldGUgdGhpcy52ZXJ0ZXhfZGF0YTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCBnbCBmcm9tICcuL2NvbnN0YW50cyc7IC8vIHdlYiB3b3JrZXJzIGRvbid0IGhhdmUgYWNjZXNzIHRvIEdMIGNvbnRleHQsIHNvIGltcG9ydCBhbGwgR0wgY29uc3RhbnRzXG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG4vLyBNYXBzIEdMIHR5cGVzIHRvIEpTIGFycmF5IHR5cGVzXG5sZXQgYXJyYXlfdHlwZXMgPSB7XG4gICAgW2dsLkZMT0FUXTogRmxvYXQzMkFycmF5LFxuICAgIFtnbC5CWVRFXTogSW50OEFycmF5LFxuICAgIFtnbC5VTlNJR05FRF9CWVRFXTogVWludDhBcnJheSxcbiAgICBbZ2wuSU5UXTogSW50MzJBcnJheSxcbiAgICBbZ2wuVU5TSUdORURfSU5UXTogVWludDMyQXJyYXksXG4gICAgW2dsLlNIT1JUXTogSW50MTZBcnJheSxcbiAgICBbZ2wuVU5TSUdORURfU0hPUlRdOiBVaW50MTZBcnJheVxufTtcblxuLy8gQW4gaW50ZXJtZWRpYXJ5IG9iamVjdCB0aGF0IGhvbGRzIHZlcnRleCBkYXRhIGluIHR5cGVkIGFycmF5cywgYWNjb3JkaW5nIHRvIGEgZ2l2ZW4gdmVydGV4IGxheW91dFxuLy8gVXNlZCB0byBjb25zdHJ1Y3QgYSBtZXNoL1ZCTyBmb3IgcmVuZGVyaW5nXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0ZXhEYXRhIHtcblxuICAgIGNvbnN0cnVjdG9yICh2ZXJ0ZXhfbGF5b3V0LCB7IHByZWFsbG9jIH0gPSB7fSkge1xuICAgICAgICB0aGlzLnZlcnRleF9sYXlvdXQgPSB2ZXJ0ZXhfbGF5b3V0O1xuXG4gICAgICAgIGlmIChWZXJ0ZXhEYXRhLmFycmF5X3Bvb2wubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBWZXJ0ZXhEYXRhLmFycmF5X3Bvb2wucG9wKCk7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlcl9sZW5ndGggPSB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5idWZmZXJfc2l6ZSA9IE1hdGguZmxvb3IodGhpcy5idWZmZXJfbGVuZ3RoIC8gdGhpcy52ZXJ0ZXhfbGF5b3V0LnN0cmlkZSk7XG4gICAgICAgICAgICBsb2coJ3RyYWNlJywgYFZlcnRleERhdGE6IHJldXNlZCBidWZmZXIgb2YgYnl0ZXMgJHt0aGlzLmJ1ZmZlcl9sZW5ndGh9LCAke3RoaXMuYnVmZmVyX3NpemV9IHZlcnRpY2VzYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlcl9zaXplID0gcHJlYWxsb2MgfHwgNTAwOyAvLyAjIG9mIHZlcnRpY2VzIHRvIGFsbG9jYXRlXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlcl9sZW5ndGggPSB0aGlzLnZlcnRleF9sYXlvdXQuc3RyaWRlICogdGhpcy5idWZmZXJfc2l6ZTtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXJfbGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1ZmZlcl9vZmZzZXQgPSAwOyAgICAgICAgICAgICAvLyBieXRlIG9mZnNldCBpbnRvIGN1cnJlbnRseSBhbGxvY2F0ZWQgYnVmZmVyXG5cbiAgICAgICAgdGhpcy5jb21wb25lbnRzID0gW107XG4gICAgICAgIGZvciAodmFyIGNvbXBvbmVudCBvZiB0aGlzLnZlcnRleF9sYXlvdXQuY29tcG9uZW50cykge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzLnB1c2goWy4uLmNvbXBvbmVudF0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmVydGV4X2NvdW50ID0gMDtcbiAgICAgICAgdGhpcy5yZWFsbG9jX2NvdW50ID0gMDtcbiAgICAgICAgdGhpcy5zZXRCdWZmZXJWaWV3cygpO1xuICAgIH1cblxuICAgIC8vIChSZS0pYWxsb2NhdGUgdHlwZWQgdmlld3MgaW50byB0aGUgbWFpbiBidWZmZXIgLSBvbmx5IGNyZWF0ZSB0aGUgdHlwZXMgd2UgbmVlZCBmb3IgdGhpcyBsYXlvdXRcbiAgICBzZXRCdWZmZXJWaWV3cyAoKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyX3ZpZXdzID0ge307XG4gICAgICAgIHRoaXMuYnVmZmVyX3ZpZXdzW2dsLlVOU0lHTkVEX0JZVEVdID0gdGhpcy5idWZmZXI7XG4gICAgICAgIGZvciAodmFyIGF0dHJpYiBvZiB0aGlzLnZlcnRleF9sYXlvdXQuYXR0cmlicykge1xuICAgICAgICAgICAgLy8gTmVlZCB2aWV3IGZvciB0aGlzIHR5cGU/XG4gICAgICAgICAgICBpZiAodGhpcy5idWZmZXJfdmlld3NbYXR0cmliLnR5cGVdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJyYXlfdHlwZSA9IGFycmF5X3R5cGVzW2F0dHJpYi50eXBlXTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcl92aWV3c1thdHRyaWIudHlwZV0gPSBuZXcgYXJyYXlfdHlwZSh0aGlzLmJ1ZmZlci5idWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIGNvbXBvbmVudCBidWZmZXIgcG9pbnRlcnNcbiAgICAgICAgZm9yICh2YXIgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICAgICAgY29tcG9uZW50WzFdID0gdGhpcy5idWZmZXJfdmlld3NbY29tcG9uZW50WzBdXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGFsbG9jYXRlZCBidWZmZXIgc2l6ZSwgZXhwYW5kL3JlYWxsb2MgYnVmZmVyIGlmIG5lZWRlZFxuICAgIGNoZWNrQnVmZmVyU2l6ZSAoKSB7XG4gICAgICAgIGlmICgodGhpcy5idWZmZXJfb2Zmc2V0ICsgdGhpcy52ZXJ0ZXhfbGF5b3V0LnN0cmlkZSkgPiB0aGlzLmJ1ZmZlcl9sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyX3NpemUgPSBNYXRoLmZsb29yKHRoaXMuYnVmZmVyX3NpemUgKiAxLjUpO1xuICAgICAgICAgICAgdGhpcy5idWZmZXJfc2l6ZSAtPSB0aGlzLmJ1ZmZlcl9zaXplICUgNDtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyX2xlbmd0aCA9IHRoaXMudmVydGV4X2xheW91dC5zdHJpZGUgKiB0aGlzLmJ1ZmZlcl9zaXplO1xuICAgICAgICAgICAgdmFyIG5ld192aWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXJfbGVuZ3RoKTtcbiAgICAgICAgICAgIG5ld192aWV3LnNldCh0aGlzLmJ1ZmZlcik7IC8vIGNvcHkgZXhpc3RpbmcgZGF0YSB0byBuZXcgYnVmZmVyXG4gICAgICAgICAgICBWZXJ0ZXhEYXRhLmFycmF5X3Bvb2wucHVzaCh0aGlzLmJ1ZmZlcik7IC8vIHNhdmUgcHJldmlvdXMgYnVmZmVyIGZvciB1c2UgYnkgbmV4dCB0aWxlXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ld192aWV3O1xuICAgICAgICAgICAgdGhpcy5zZXRCdWZmZXJWaWV3cygpO1xuICAgICAgICAgICAgdGhpcy5yZWFsbG9jX2NvdW50Kys7XG4gICAgICAgICAgICAvLyBsb2cuaW5mbyhgVmVydGV4RGF0YTogZXhwYW5kZWQgdmVydGV4IGJsb2NrIHRvICR7dGhpcy5idWZmZXJfc2l6ZX0gdmVydGljZXNgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBhIHZlcnRleCwgY29waWVkIGZyb20gYSBwbGFpbiBKUyBhcnJheSBvZiBlbGVtZW50cyBtYXRjaGluZyB0aGUgb3JkZXIgb2YgdGhlIHZlcnRleCBsYXlvdXQuXG4gICAgLy8gTm90ZTogdXNlcyBwcmUtY2FsY3VsYXRlZCBpbmZvIGFib3V0IGVhY2ggYXR0cmlidXRlLCBpbmNsdWRpbmcgcG9pbnRlciB0byBhcHByb3ByaWF0ZSB0eXBlZCBhcnJheVxuICAgIC8vIHZpZXcgYW5kIG9mZnNldCBpbnRvIGl0LiBUaGlzIHdhcyB0aGUgZmFzdGVzdCBtZXRob2QgcHJvZmlsZWQgc28gZmFyIGZvciBmaWxsaW5nIGEgbWl4ZWQtdHlwZVxuICAgIC8vIHZlcnRleCBsYXlvdXQgKHRob3VnaCBzdGlsbCBzbG93ZXIgdGhhbiB0aGUgcHJldmlvdXMgbWV0aG9kIHRoYXQgb25seSBzdXBwb3J0ZWQgRmxvYXQzMkFycmF5IGF0dHJpYnV0ZXMpLlxuICAgIGFkZFZlcnRleCAodmVydGV4KSB7XG4gICAgICAgIHRoaXMuY2hlY2tCdWZmZXJTaXplKCk7XG4gICAgICAgIHZhciBpPTA7XG5cbiAgICAgICAgdmFyIGNsZW4gPSB0aGlzLmNvbXBvbmVudHMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBjPTA7IGMgPCBjbGVuOyBjKyspIHtcbiAgICAgICAgICAgIHZhciBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudHNbY107XG4gICAgICAgICAgICBjb21wb25lbnRbMV1bKHRoaXMuYnVmZmVyX29mZnNldCA+PiBjb21wb25lbnRbMl0pICsgY29tcG9uZW50WzNdXSA9IHZlcnRleFtpKytdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWZmZXJfb2Zmc2V0ICs9IHRoaXMudmVydGV4X2xheW91dC5zdHJpZGU7XG4gICAgICAgIHRoaXMudmVydGV4X2NvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gRmluYWxpemUgdmVydGV4IGJ1ZmZlciBmb3IgdXNlIGluIGNvbnN0cnVjdGluZyBhIG1lc2hcbiAgICBlbmQgKCkge1xuICAgICAgICAvLyBDbGlwIHRoZSBidWZmZXIgdG8gc2l6ZSB1c2VkIGZvciB0aGlzIFZCT1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnN1YmFycmF5KDAsIHRoaXMuYnVmZmVyX29mZnNldCk7XG4gICAgICAgIGxvZygndHJhY2UnLCBgVmVydGV4RGF0YTogJHt0aGlzLmJ1ZmZlcl9zaXplfSB2ZXJ0aWNlcyB0b3RhbCwgcmVhbGxvYyBjb3VudCAke3RoaXMucmVhbGxvY19jb3VudH1gKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG59XG5cblZlcnRleERhdGEuYXJyYXlfcG9vbCA9IFtdOyAvLyBwb29sIG9mIGN1cnJlbnRseSBhdmFpbGFibGUgKHByZXZpb3VzbHkgdXNlZCkgYnVmZmVycyAodWludDgpXG4iLCJpbXBvcnQgZ2wgZnJvbSAnLi9jb25zdGFudHMnOyAvLyB3ZWIgd29ya2VycyBkb24ndCBoYXZlIGFjY2VzcyB0byBHTCBjb250ZXh0LCBzbyBpbXBvcnQgYWxsIEdMIGNvbnN0YW50c1xuaW1wb3J0IFZlcnRleERhdGEgZnJvbSAnLi92ZXJ0ZXhfZGF0YSc7XG5cbi8vIERlc2NyaWJlcyBhIHZlcnRleCBsYXlvdXQgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIG1hbnkgZGlmZmVyZW50IEdMIHByb2dyYW1zLlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVydGV4TGF5b3V0IHtcbiAgICAvLyBBdHRyaWJzIGFyZSBhbiBhcnJheSwgaW4gbGF5b3V0IG9yZGVyLCBvZjogbmFtZSwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZFxuICAgIC8vIGV4OiB7IG5hbWU6ICdwb3NpdGlvbicsIHNpemU6IDMsIHR5cGU6IGdsLkZMT0FULCBub3JtYWxpemVkOiBmYWxzZSB9XG4gICAgY29uc3RydWN0b3IgKGF0dHJpYnMpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJzID0gYXR0cmliczsgLy8gZGljdGlvbmFyeSBvZiBhdHRyaWJ1dGVzLCBzcGVjaWZpZWQgYXMgc3RhbmRhcmQgR0wgYXR0cmliIG9wdGlvbnNcbiAgICAgICAgdGhpcy5jb21wb25lbnRzID0gW107ICAgLy8gbGlzdCBvZiB0eXBlIGFuZCBvZmZzZXQgaW5mbyBhYm91dCBlYWNoIGF0dHJpYnV0ZSBjb21wb25lbnRcbiAgICAgICAgdGhpcy5pbmRleCA9IHt9OyAgICAgICAgLy8gbGluZWFyIGJ1ZmZlciBpbmRleCBvZiBlYWNoIGF0dHJpYnV0ZSBjb21wb25lbnQsIGUuZy4gdGhpcy5pbmRleC5wb3NpdGlvbi54XG5cbiAgICAgICAgLy8gQ2FsYyB2ZXJ0ZXggc3RyaWRlXG4gICAgICAgIHRoaXMuc3RyaWRlID0gMDtcblxuICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICBmb3IgKHZhciBhdHRyaWIgb2YgdGhpcy5hdHRyaWJzKSB7XG4gICAgICAgICAgICBhdHRyaWIub2Zmc2V0ID0gdGhpcy5zdHJpZGU7XG4gICAgICAgICAgICBhdHRyaWIuYnl0ZV9zaXplID0gYXR0cmliLnNpemU7XG4gICAgICAgICAgICB2YXIgc2hpZnQgPSAwO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGF0dHJpYi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBnbC5GTE9BVDpcbiAgICAgICAgICAgICAgICBjYXNlIGdsLklOVDpcbiAgICAgICAgICAgICAgICBjYXNlIGdsLlVOU0lHTkVEX0lOVDpcbiAgICAgICAgICAgICAgICAgICAgYXR0cmliLmJ5dGVfc2l6ZSAqPSA0O1xuICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgZ2wuU0hPUlQ6XG4gICAgICAgICAgICAgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVDpcbiAgICAgICAgICAgICAgICAgICAgYXR0cmliLmJ5dGVfc2l6ZSAqPSAyO1xuICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGb3JjZSA0LWJ5dGUgYWxpZ25tZW50IG9uIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIHRoaXMuc3RyaWRlICs9IGF0dHJpYi5ieXRlX3NpemU7XG4gICAgICAgICAgICBpZiAodGhpcy5zdHJpZGUgJiAzKSB7IC8vIHBhZCB0byBtdWx0aXBsZSBvZiA0IGJ5dGVzXG4gICAgICAgICAgICAgICAgdGhpcy5zdHJpZGUgKz0gNCAtICh0aGlzLnN0cmlkZSAmIDMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgaW5mbyB0byBsaXN0IG9mIGF0dHJpYnV0ZSBjb21wb25lbnRzXG4gICAgICAgICAgICAvLyBVc2VkIHRvIGJ1aWxkIHRoZSB2ZXJ0ZXggZGF0YSwgcHJvdmlkZXMgcG9pbnRlcnMgYW5kIG9mZnNldHMgaW50byBlYWNoIHR5cGVkIGFycmF5IHZpZXdcbiAgICAgICAgICAgIC8vIEVhY2ggY29tcG9uZW50IGlzIGFuIGFycmF5IG9mOlxuICAgICAgICAgICAgLy8gW0dMIGF0dHJpYiB0eXBlLCBwb2ludGVyIHRvIHR5cGVkIGFycmF5IHZpZXcsIGJpdHMgdG8gc2hpZnQgcmlnaHQgdG8gZGV0ZXJtaW5lIGJ1ZmZlciBvZmZzZXQsIGFkZGl0aW9uYWwgYnVmZmVyIG9mZnNldCBmb3IgdGhlIGNvbXBvbmVudF1cbiAgICAgICAgICAgIHZhciBvZmZzZXRfdHlwZWQgPSBhdHRyaWIub2Zmc2V0ID4+IHNoaWZ0O1xuICAgICAgICAgICAgaWYgKGF0dHJpYi5zaXplID4gMSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGE9MDsgYSA8IGF0dHJpYi5zaXplOyBhKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzLnB1c2goW2F0dHJpYi50eXBlLCBudWxsLCBzaGlmdCwgb2Zmc2V0X3R5cGVkKytdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudHMucHVzaChbYXR0cmliLnR5cGUsIG51bGwsIHNoaWZ0LCBvZmZzZXRfdHlwZWRdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUHJvdmlkZSBhbiBpbmRleCBpbnRvIHRoZSB2ZXJ0ZXggZGF0YSBidWZmZXIgZm9yIGVhY2ggYXR0cmlidXRlIGNvbXBvbmVudFxuICAgICAgICAgICAgdGhpcy5pbmRleFthdHRyaWIubmFtZV0gPSBjb3VudDtcbiAgICAgICAgICAgIGNvdW50ICs9IGF0dHJpYi5zaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0dXAgYSB2ZXJ0ZXggbGF5b3V0IGZvciBhIHNwZWNpZmljIEdMIHByb2dyYW1cbiAgICAvLyBBc3N1bWVzIHRoYXQgdGhlIGRlc2lyZWQgdmVydGV4IGJ1ZmZlciAoVkJPKSBpcyBhbHJlYWR5IGJvdW5kXG4gICAgLy8gSWYgYSBnaXZlbiBwcm9ncmFtIGRvZXNuJ3QgaW5jbHVkZSBhbGwgYXR0cmlidXRlcywgaXQgY2FuIHN0aWxsIHVzZSB0aGUgdmVydGV4IGxheW91dFxuICAgIC8vIHRvIHJlYWQgdGhvc2UgYXR0cmlicyB0aGF0IGl0IGRvZXMgcmVjb2duaXplLCB1c2luZyB0aGUgYXR0cmliIG9mZnNldHMgdG8gc2tpcCBvdGhlcnMuXG4gICAgZW5hYmxlIChnbCwgcHJvZ3JhbSwgZm9yY2UpXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliLCBsb2NhdGlvbjtcblxuICAgICAgICAvLyBFbmFibGUgYWxsIGF0dHJpYnV0ZXMgZm9yIHRoaXMgbGF5b3V0XG4gICAgICAgIGZvciAodmFyIGE9MDsgYSA8IHRoaXMuYXR0cmlicy5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgYXR0cmliID0gdGhpcy5hdHRyaWJzW2FdO1xuICAgICAgICAgICAgbG9jYXRpb24gPSBwcm9ncmFtLmF0dHJpYnV0ZShhdHRyaWIubmFtZSkubG9jYXRpb247XG5cbiAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIVZlcnRleExheW91dC5lbmFibGVkX2F0dHJpYnNbbG9jYXRpb25dIHx8IGZvcmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGxvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihsb2NhdGlvbiwgYXR0cmliLnNpemUsIGF0dHJpYi50eXBlLCBhdHRyaWIubm9ybWFsaXplZCwgdGhpcy5zdHJpZGUsIGF0dHJpYi5vZmZzZXQpO1xuICAgICAgICAgICAgICAgIFZlcnRleExheW91dC5lbmFibGVkX2F0dHJpYnNbbG9jYXRpb25dID0gcHJvZ3JhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERpc2FibGUgYW55IHByZXZpb3VzbHkgYm91bmQgYXR0cmlidXRlcyB0aGF0IGFyZW4ndCBmb3IgdGhpcyBsYXlvdXRcbiAgICAgICAgZm9yIChsb2NhdGlvbiBpbiBWZXJ0ZXhMYXlvdXQuZW5hYmxlZF9hdHRyaWJzKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGUoZ2wsIGxvY2F0aW9uLCBwcm9ncmFtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc2FibGUgYW4gYXR0cmlidXRlIGlmIGl0IHdhcyBub3QgZW5hYmxlZCBmb3IgdGhlIHNwZWNpZmllZCBwcm9ncmFtXG4gICAgLy8gTk9URTogdGhpcyB3YXMgbW92ZWQgb3V0IG9mIHRoZSBpbm5lciBsb29wIGluIGVuYWJsZSgpIHRvIGFzc2lzdCB3L1ZNIG9wdGltaXphdGlvblxuICAgIGRpc2FibGVVbnVzZWRBdHRyaWJ1dGUgKGdsLCBsb2NhdGlvbiwgcHJvZ3JhbSkge1xuICAgICAgICBpZiAoVmVydGV4TGF5b3V0LmVuYWJsZWRfYXR0cmlic1tsb2NhdGlvbl0gIT09IHByb2dyYW0pIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShsb2NhdGlvbik7XG4gICAgICAgICAgICBkZWxldGUgVmVydGV4TGF5b3V0LmVuYWJsZWRfYXR0cmlic1tsb2NhdGlvbl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVWZXJ0ZXhEYXRhICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZXJ0ZXhEYXRhKHRoaXMpO1xuICAgIH1cblxufVxuXG4vLyBUcmFjayBjdXJyZW50bHkgZW5hYmxlZCBhdHRyaWJzLCBieSB0aGUgcHJvZ3JhbSB0aGV5IGFyZSBib3VuZCB0b1xuLy8gU3RhdGljIGNsYXNzIHByb3BlcnR5IHRvIHJlZmxlY3QgZ2xvYmFsIEdMIHN0YXRlXG5WZXJ0ZXhMYXlvdXQuZW5hYmxlZF9hdHRyaWJzID0ge307XG4iLCJpbXBvcnQgUmVwZWF0R3JvdXAgZnJvbSAnLi9yZXBlYXRfZ3JvdXAnO1xuXG5pbXBvcnQgbG9nIGZyb20gJ2xvZ2xldmVsJztcblxudmFyIENvbGxpc2lvbjtcblxuZXhwb3J0IGRlZmF1bHQgQ29sbGlzaW9uID0ge1xuXG4gICAgdGlsZXM6IHt9LFxuXG4gICAgc3RhcnRUaWxlICh0aWxlKSB7XG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMudGlsZXNbdGlsZV0gPSB7XG4gICAgICAgICAgICBiYm94ZXM6IHsgICAgICAgICAgIC8vIGN1cnJlbnQgc2V0IG9mIHBsYWNlZCBib3VuZGluZyBib3hlc1xuICAgICAgICAgICAgICAgIGFhYmI6IFtdLFxuICAgICAgICAgICAgICAgIG9iYjogW11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvYmplY3RzOiB7fSwgICAgICAgIC8vIG9iamVjdHMgdG8gY29sbGlkZSwgZ3JvdXBlZCBieSBwcmlvcml0eSwgdGhlbiBieSBzdHlsZVxuICAgICAgICAgICAga2VlcDoge30sICAgICAgICAgICAvLyBvYmplY3RzIHRoYXQgd2VyZSBrZXB0IGFmdGVyIGNvbGxpc2lvbiwgZ3JvdXBlZCBieSBzdHlsZVxuICAgICAgICAgICAgc3R5bGVzOiBuZXcgU2V0KCkgICAvLyBzdHlsZXMgY29udHJpYnV0aW5nIGNvbGxpc2lvbiBvYmplY3RzXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUHJvbWlzZSByZXNvbHZlZCB3aGVuIGFsbCByZWdpc3RlcmVkIHN0eWxlcyBoYXZlIGFkZGVkIG9iamVjdHNcbiAgICAgICAgc3RhdGUuY29tcGxldGUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHN0YXRlLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHJlc2V0VGlsZSAodGlsZSkge1xuICAgICAgICBkZWxldGUgdGhpcy50aWxlc1t0aWxlXTtcbiAgICB9LFxuXG4gICAgLy8gQWRkIGEgc3R5bGUgdG8gdGhlIHBlbmRpbmcgc2V0LCBjb2xsaXNpb24gd2lsbCBibG9jayBvbiBhbGwgc3R5bGVzIHN1Ym1pdHRpbmcgdG8gY29sbGlzaW9uIHNldFxuICAgIGFkZFN0eWxlIChzdHlsZSwgdGlsZSkge1xuICAgICAgICB0aGlzLnRpbGVzW3RpbGVdLnN0eWxlcy5hZGQoc3R5bGUpO1xuICAgIH0sXG5cbiAgICAvLyBBZGQgY29sbGlzaW9uIG9iamVjdHMgZm9yIGEgc3R5bGVcbiAgICBjb2xsaWRlIChvYmplY3RzLCBzdHlsZSwgdGlsZSkge1xuICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnRpbGVzW3RpbGVdO1xuICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICBsb2cudHJhY2UoJ0NvbGxpc2lvbi5jb2xsaWRlKCkgY2FsbGVkIHdpdGggbnVsbCB0aWxlJywgdGlsZSwgdGhpcy50aWxlcywgc3R5bGUsIG9iamVjdHMpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KEVycm9yKCdDb2xsaXNpb24uY29sbGlkZSgpIGNhbGxlZCB3aXRoIG51bGwgdGlsZScsIHRpbGUsIHRoaXMudGlsZXMsIHN0eWxlLCBvYmplY3RzKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHcm91cCBieSBwcmlvcml0eSBhbmQgc3R5bGVcbiAgICAgICAgbGV0IHRpbGVfb2JqZWN0cyA9IHN0YXRlLm9iamVjdHM7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBvYmogPSBvYmplY3RzW2ldO1xuICAgICAgICAgICAgbGV0IHByaW9yaXR5ID0gb2JqLmxheW91dC5wcmlvcml0eTtcbiAgICAgICAgICAgIHRpbGVfb2JqZWN0c1twcmlvcml0eV0gPSB0aWxlX29iamVjdHNbcHJpb3JpdHldIHx8IHt9O1xuICAgICAgICAgICAgdGlsZV9vYmplY3RzW3ByaW9yaXR5XVtzdHlsZV0gPSB0aWxlX29iamVjdHNbcHJpb3JpdHldW3N0eWxlXSB8fCBbXTtcbiAgICAgICAgICAgIHRpbGVfb2JqZWN0c1twcmlvcml0eV1bc3R5bGVdLnB1c2gob2JqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIHBlbmRpbmcgc3R5bGUgc2V0LCBpZiBubyBtb3JlIHN0eWxlcywgZG8gY29sbGlzaW9uICYgZmluaXNoIHRpbGVcbiAgICAgICAgc3RhdGUuc3R5bGVzLmRlbGV0ZShzdHlsZSk7XG4gICAgICAgIGlmIChzdGF0ZS5zdHlsZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5lbmRUaWxlKHRpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2FpdCBmb3Igb2JqZWN0cyB0byBiZSBhZGRlZCBmcm9tIGFsbCBzdHlsZXNcbiAgICAgICAgcmV0dXJuIHN0YXRlLmNvbXBsZXRlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmtlZXBbc3R5bGVdIHx8IFtdO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLy8gVGVzdCBsYWJlbHMgZm9yIGNvbGxpc2lvbnMsIGhpZ2hlciB0byBsb3dlciBwcmlvcml0eVxuICAgIC8vIFdoZW4gdHdvIGNvbGxpZGUsIGRpc2NhcmQgdGhlIGxvd2VyLXByaW9yaXR5IGxhYmVsXG4gICAgZW5kVGlsZSAodGlsZSkge1xuICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnRpbGVzW3RpbGVdO1xuICAgICAgICBsZXQgYmJveGVzID0gc3RhdGUuYmJveGVzO1xuICAgICAgICBsZXQga2VlcCA9IHN0YXRlLmtlZXA7XG5cbiAgICAgICAgUmVwZWF0R3JvdXAuY2xlYXIodGlsZSk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyBsYWJlbHMgYnkgcHJpb3JpdHksIHRoZW4gYnkgc3R5bGVcbiAgICAgICAgbGV0IHByaW9yaXRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5vYmplY3RzKS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgIGZvciAobGV0IHByaW9yaXR5IG9mIHByaW9yaXRpZXMpIHtcbiAgICAgICAgICAgIGxldCBzdHlsZV9vYmplY3RzID0gc3RhdGUub2JqZWN0c1twcmlvcml0eV07XG4gICAgICAgICAgICBpZiAoIXN0eWxlX29iamVjdHMpIHsgLy8gbm8gbGFiZWxzIGF0IHRoaXMgcHJpb3JpdHksIHNraXAgdG8gbmV4dFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGb3IgZWFjaCBzdHlsZVxuICAgICAgICAgICAgZm9yIChsZXQgc3R5bGUgaW4gc3R5bGVfb2JqZWN0cykge1xuICAgICAgICAgICAgICAgIGxldCBvYmplY3RzID0gc3R5bGVfb2JqZWN0c1tzdHlsZV07XG4gICAgICAgICAgICAgICAga2VlcFtzdHlsZV0gPSBrZWVwW3N0eWxlXSB8fCBbXTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgeyBsYWJlbCwgbGF5b3V0IH0gPSBvYmplY3RzW2ldOyAvLyBUT0RPOiBgbGFiZWxgIHNob3VsZCBiZSBnZW5lcmljXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gdGVzdCB0aGUgbGFiZWwgZm9yIGludGVyc2VjdGlvbnMgd2l0aCBvdGhlciBsYWJlbHMgaW4gdGhlIHRpbGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXlvdXQuY29sbGlkZSB8fCAhbGFiZWwuZGlzY2FyZChiYm94ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgcmVwZWF0c1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrID0gUmVwZWF0R3JvdXAuY2hlY2sobGFiZWwsIGxheW91dCwgdGlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2cudHJhY2UoYGRpc2NhcmQgbGFiZWwgJyR7bGFiZWwudGV4dH0nLCAob25lX3Blcl9ncm91cDogJHtjaGVjay5vbmVfcGVyX2dyb3VwfSksIGRpc3QgJHtNYXRoLnNxcnQoY2hlY2suZGlzdF9zcSkvbGF5b3V0LnVuaXRzX3Blcl9waXhlbH0gPCAke01hdGguc3FydChjaGVjay5yZXBlYXRfZGlzdF9zcSkvbGF5b3V0LnVuaXRzX3Blcl9waXhlbH1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGFzIHBsYWNlZCBmb3IgZnV0dXJlIHJlcGVhdCBjdWxsaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBSZXBlYXRHcm91cC5hZGQobGFiZWwsIGxheW91dCwgdGlsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLmFkZChiYm94ZXMpOyAvLyBhZGQgbGFiZWwgdG8gY3VycmVudGx5IHZpc2libGUgc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICBrZWVwW3N0eWxlXS5wdXNoKG9iamVjdHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGVsc2UgaWYgKGxheW91dC5jb2xsaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBsb2cudHJhY2UoYGRpc2NhcmQgbGFiZWwgJyR7bGFiZWwudGV4dH0nIGR1ZSB0byBjb2xsaXNpb25gKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSB0aGlzLnRpbGVzW3RpbGVdO1xuICAgICAgICBzdGF0ZS5yZXNvbHZlKCk7XG4gICAgfVxuXG59O1xuIiwiaW1wb3J0IGJveEludGVyc2VjdCBmcm9tICdib3gtaW50ZXJzZWN0JzsgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pa29sYWx5c2Vua28vYm94LWludGVyc2VjdFxuaW1wb3J0IFV0aWxzIGZyb20gJy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCBPQkIgZnJvbSAnLi4vdXRpbHMvb2JiJztcblxuLy8gaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExhYmVsIHtcblxuICAgIGNvbnN0cnVjdG9yIChzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuYWFiYiA9IG51bGw7XG4gICAgICAgIHRoaXMub2JiID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3Igb3ZlcmxhcHMgd2l0aCBvdGhlciBsYWJlbHMgaW4gdGhlIHRpbGVcbiAgICBvY2NsdWRlZCAoYmJveGVzKSB7XG4gICAgICAgIGxldCBpbnRlcnNlY3QgPSBmYWxzZTtcbiAgICAgICAgbGV0IGFhYmJzID0gYmJveGVzLmFhYmI7XG4gICAgICAgIGxldCBvYmJzID0gYmJveGVzLm9iYjtcblxuICAgICAgICAvLyBCcm9hZCBwaGFzZVxuICAgICAgICBpZiAoYWFiYnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYm94SW50ZXJzZWN0KFt0aGlzLmFhYmJdLCBhYWJicywgKGksIGopID0+IHtcbiAgICAgICAgICAgICAgICAvLyBsb2cudHJhY2UoJ2NvbGxpc2lvbjogYnJvYWQgcGhhc2UgY29sbGlkZScsIHRoaXMub3B0aW9ucy5pZCwgdGhpcywgdGhpcy5hYWJiLCBhYWJic1tqXSk7XG5cbiAgICAgICAgICAgICAgICAvLyBTa2lwIG5hcnJvdyBwaGFzZSBjb2xsaXNpb24gaWYgbm8gcm90YXRpb25cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vYmIuYW5nbGUgPT09IDAgJiYgb2Jic1tqXS5hbmdsZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBsb2cudHJhY2UoJ2NvbGxpc2lvbjogc2tpcCBuYXJyb3cgcGhhc2UgY29sbGlkZSBiZWNhdXNlIG5laXRoZXIgaXMgcm90YXRlZCcsIHRoaXMub3B0aW9ucy5pZCwgdGhpcywgdGhpcy5vYmIsIG9iYnNbal0pO1xuICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBOYXJyb3cgcGhhc2VcbiAgICAgICAgICAgICAgICBpZiAoT0JCLmludGVyc2VjdCh0aGlzLm9iYiwgb2Jic1tqXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9nLnRyYWNlKCdjb2xsaXNpb246IG5hcnJvdyBwaGFzZSBjb2xsaWRlJywgdGhpcy5vcHRpb25zLmlkLCB0aGlzLCB0aGlzLm9iYiwgb2Jic1tqXSk7XG4gICAgICAgICAgICAgICAgICAgIGludGVyc2VjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnRlcnNlY3Q7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoaXMgbGFiZWwncyBib3VuZGluZyBib3ggdG8gdGhlIHByb3ZpZGVkIHNldFxuICAgIGFkZCAoYmJveGVzKSB7XG4gICAgICAgIGJib3hlcy5hYWJiLnB1c2godGhpcy5hYWJiKTtcbiAgICAgICAgYmJveGVzLm9iYi5wdXNoKHRoaXMub2JiKTtcbiAgICB9XG5cbiAgICAvLyBjaGVja3Mgd2hldGhlciB0aGUgbGFiZWwgaXMgd2l0aGluIHRoZSB0aWxlIGJvdW5kYXJpZXNcbiAgICBpblRpbGVCb3VuZHMgKCkge1xuICAgICAgICBsZXQgbWluID0gWyB0aGlzLmFhYmJbMF0sIHRoaXMuYWFiYlsxXSBdO1xuICAgICAgICBsZXQgbWF4ID0gWyB0aGlzLmFhYmJbMl0sIHRoaXMuYWFiYlszXSBdO1xuXG4gICAgICAgIGlmICghVXRpbHMucG9pbnRJblRpbGUobWluKSB8fCAhVXRpbHMucG9pbnRJblRpbGUobWF4KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gV2hldGhlciB0aGUgbGFiZWwgc2hvdWxkIGJlIGRpc2NhcmRlZFxuICAgIC8vIERlcGVuZHMgb24gd2hldGhlciBsYWJlbCBtdXN0IGZpdCBpbiB0aGUgdGlsZSBib3VuZHMsIGFuZCBpZiBzbywgY2FuIGl0IGJlIG1vdmVkIHRvIGZpdCB0aGVyZVxuICAgIGRpc2NhcmQgKGJib3hlcykge1xuICAgICAgICAvLyBTaG91bGQgdGhlIGxhYmVsIGJlIGN1bGxlZCBpZiBpdCBjYW4ndCBmaXQgaW5zaWRlIHRoZSB0aWxlIGJvdW5kcz9cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jdWxsX2Zyb21fdGlsZSkge1xuICAgICAgICAgICAgbGV0IGluX3RpbGUgPSB0aGlzLmluVGlsZUJvdW5kcygpO1xuXG4gICAgICAgICAgICAvLyBJZiBpdCBkb2Vzbid0IGZpdCwgc2hvdWxkIHdlIHRyeSB0byBtb3ZlIGl0IGludG8gdGhlIHRpbGUgYm91bmRzP1xuICAgICAgICAgICAgaWYgKCFpbl90aWxlICYmIHRoaXMub3B0aW9ucy5tb3ZlX2ludG9fdGlsZSkge1xuICAgICAgICAgICAgICAgIC8vIENhbiB3ZSBmaXQgdGhlIGxhYmVsIGludG8gdGhlIHRpbGU/XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1vdmVJbnRvVGlsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBjYW4ndCBmaXQgaW4gdGlsZSwgZGlzY2FyZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWluX3RpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gb3V0IG9mIHRpbGUgYm91bmRzLCBkaXNjYXJkXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgbGFiZWwgaGFzbid0IGJlZW4gZGlzY2FyZGVkIHlldCwgY2hlY2sgdG8gc2VlIGlmIGl0J3Mgb2NjbHVkZWQgYnkgb3RoZXIgbGFiZWxzXG4gICAgICAgIHJldHVybiB0aGlzLm9jY2x1ZGVkKGJib3hlcyk7XG4gICAgfVxufVxuXG5MYWJlbC5lcHNpbG9uID0gMC45OTk5OyAvLyB0b2xlcmFuY2UgYXJvdW5kIGNvbGxpc2lvbiBib3hlcywgcHJldmVudCBwZXJmZWN0bHkgYWRqYWNlbnQgb2JqZWN0cyBmcm9tIGNvbGxpZGluZ1xuIiwiaW1wb3J0IFZlY3RvciBmcm9tICcuLi92ZWN0b3InO1xuaW1wb3J0IExhYmVsIGZyb20gJy4vbGFiZWwnO1xuaW1wb3J0IE9CQiBmcm9tICcuLi91dGlscy9vYmInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYWJlbExpbmUgZXh0ZW5kcyBMYWJlbCB7XG5cbiAgICBjb25zdHJ1Y3RvciAoc2l6ZSwgbGluZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoc2l6ZSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5saW5lcyA9IGxpbmVzO1xuXG4gICAgICAgIC8vIG9wdGlvbmFsbHkgbGltaXQgdGhlIGxpbmUgc2VnbWVudHMgdGhhdCB0aGUgbGFiZWwgbWF5IGJlIHBsYWNlZCBpbiwgYnkgc3BlY2lmeWluZyBhIHNlZ21lbnQgaW5kZXggcmFuZ2VcbiAgICAgICAgLy8gdXNlZCBhcyBhIGNvYXJzZSBzdWJkaXZpZGUgZm9yIHBsYWNpbmcgbXVsdGlwbGUgbGFiZWxzIHBlciBsaW5lIGdlb21ldHJ5XG4gICAgICAgIHRoaXMuc2VnbWVudF9pbmRleCA9IG9wdGlvbnMuc2VnbWVudF9zdGFydCB8fCAwO1xuICAgICAgICB0aGlzLnNlZ21lbnRfbWF4ID0gb3B0aW9ucy5zZWdtZW50X2VuZCB8fCB0aGlzLmxpbmVzLmxlbmd0aDtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG5cbiAgICB1cGRhdGUgKCkge1xuICAgICAgICBsZXQgc2VnbWVudCA9IHRoaXMuY3VycmVudFNlZ21lbnQoKTtcbiAgICAgICAgdGhpcy5hbmdsZSA9IHRoaXMuY29tcHV0ZUFuZ2xlKCk7XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBbKHNlZ21lbnRbMF1bMF0gKyBzZWdtZW50WzFdWzBdKSAvIDIsIChzZWdtZW50WzBdWzFdICsgc2VnbWVudFsxXVsxXSkgLyAyXTtcbiAgICAgICAgdGhpcy51cGRhdGVCQm94ZXMoKTtcbiAgICB9XG5cbiAgICBtb3ZlTmV4dFNlZ21lbnQgKCkge1xuICAgICAgICBpZiAodGhpcy5zZWdtZW50X2luZGV4ICsgMSA+PSB0aGlzLnNlZ21lbnRfbWF4IC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWdtZW50X2luZGV4Kys7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29tcHV0ZUFuZ2xlICgpIHtcbiAgICAgICAgbGV0IHNlZ21lbnQgPSB0aGlzLmN1cnJlbnRTZWdtZW50KCk7XG4gICAgICAgIGxldCBwMHAxID0gVmVjdG9yLnN1YihzZWdtZW50WzBdLCBzZWdtZW50WzFdKTtcblxuICAgICAgICBwMHAxID0gVmVjdG9yLm5vcm1hbGl6ZShwMHAxKTtcblxuICAgICAgICBsZXQgUElfMiA9IE1hdGguUEkgLyAyO1xuICAgICAgICBsZXQgdGhldGEgPSBNYXRoLmF0YW4yKHAwcDFbMF0sIHAwcDFbMV0pICsgUElfMjtcblxuICAgICAgICBpZiAodGhldGEgPiBQSV8yIHx8IHRoZXRhIDwgLVBJXzIpIHtcbiAgICAgICAgICAgIHRoZXRhICs9IE1hdGguUEk7XG4gICAgICAgIH1cbiAgICAgICAgdGhldGEgJT0gTWF0aC5QSSAqIDI7XG5cbiAgICAgICAgcmV0dXJuIHRoZXRhO1xuICAgIH1cblxuICAgIGZpdFRvU2VnbWVudCAoKSB7XG4gICAgICAgIGxldCBzZWdtZW50ID0gdGhpcy5jdXJyZW50U2VnbWVudCgpO1xuICAgICAgICBsZXQgcDBwMSA9IFZlY3Rvci5zdWIoc2VnbWVudFswXSwgc2VnbWVudFsxXSk7XG4gICAgICAgIGxldCBsZW5ndGggPSBWZWN0b3IubGVuZ3RoKHAwcDEpO1xuXG4gICAgICAgIGxldCBsYWJlbF9sZW5ndGggPSB0aGlzLnNpemVbMF0gKiB0aGlzLm9wdGlvbnMudW5pdHNfcGVyX3BpeGVsO1xuXG4gICAgICAgIGlmIChsYWJlbF9sZW5ndGggPiBsZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGFuIGV4Y2VlZCBoZXVyZXN0aWMgb2YgMTAwJSB3b3VsZCBsZXQgdGhlIGxhYmVsIGZpdCBpbiBhbnkgY2FzZXNcbiAgICAgICAgICAgIGxldCBleGNlZWQgPSAoMSAtIChsZW5ndGggLyBsYWJlbF9sZW5ndGgpKSAqIDEwMDtcbiAgICAgICAgICAgIHJldHVybiBleGNlZWQgPCB0aGlzLm9wdGlvbnMubGluZV9leGNlZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGFiZWxfbGVuZ3RoIDw9IGxlbmd0aDtcbiAgICB9XG5cbiAgICBjdXJyZW50U2VnbWVudCAoKSB7XG4gICAgICAgIGxldCBwMSA9IHRoaXMubGluZXNbdGhpcy5zZWdtZW50X2luZGV4XTtcbiAgICAgICAgbGV0IHAyID0gdGhpcy5saW5lc1t0aGlzLnNlZ21lbnRfaW5kZXggKyAxXTtcblxuICAgICAgICByZXR1cm4gWyBwMSwgcDIgXTtcbiAgICB9XG5cbiAgICB1cGRhdGVCQm94ZXMgKCkge1xuICAgICAgICBsZXQgdXBwID0gdGhpcy5vcHRpb25zLnVuaXRzX3Blcl9waXhlbDtcbiAgICAgICAgbGV0IHdpZHRoID0gKHRoaXMuc2l6ZVswXSArIHRoaXMub3B0aW9ucy5idWZmZXJbMF0gKiAyKSAqIHVwcCAqIExhYmVsLmVwc2lsb247XG4gICAgICAgIGxldCBoZWlnaHQgPSAodGhpcy5zaXplWzFdICsgdGhpcy5vcHRpb25zLmJ1ZmZlclsxXSAqIDIpICogdXBwICogTGFiZWwuZXBzaWxvbjtcblxuICAgICAgICAvLyBhcHBseSBvZmZzZXQsIHggcG9zaXRpdmUsIHkgcG9pbnRpbmcgZG93blxuICAgICAgICBsZXQgb2Zmc2V0ID0gVmVjdG9yLnJvdCh0aGlzLm9wdGlvbnMub2Zmc2V0LCB0aGlzLmFuZ2xlKTtcbiAgICAgICAgbGV0IHAgPSBbXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uWzBdICsgKG9mZnNldFswXSAqIHVwcCksXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uWzFdIC0gKG9mZnNldFsxXSAqIHVwcClcbiAgICAgICAgXTtcblxuICAgICAgICAvLyB0aGUgYW5nbGUgb2YgdGhlIG9iYiBpcyBuZWdhdGl2ZSBzaW5jZSBpdCdzIHRoZSB0aWxlIHN5c3RlbSB5IGF4aXMgaXMgcG9pbnRpbmcgZG93blxuICAgICAgICB0aGlzLm9iYiA9IG5ldyBPQkIocFswXSwgcFsxXSwgLXRoaXMuYW5nbGUsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmFhYmIgPSB0aGlzLm9iYi5nZXRFeHRlbnQoKTtcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gbW92ZSB0aGUgbGFiZWwgaW50byB0aGUgdGlsZSBib3VuZHNcbiAgICAvLyBSZXR1cm5zIHRydWUgaWYgbGFiZWwgd2FzIG1vdmVkIGludG8gdGlsZSwgZmFsc2UgaWYgaXQgY291bGRuJ3QgYmUgbW92ZWRcbiAgICBtb3ZlSW50b1RpbGUgKCkge1xuICAgICAgICBsZXQgaW5fdGlsZSA9IGZhbHNlO1xuICAgICAgICBsZXQgZml0c190b19zZWdtZW50ID0gdGhpcy5maXRUb1NlZ21lbnQoKTtcblxuICAgICAgICAvLyBUcnkgbGluZSBzZWdtZW50cyB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IGZpdHMgdGhlIGxhYmVsIChhbmQgaXMgaW5zaWRlIHRoZSB0aWxlKVxuICAgICAgICB3aGlsZSAoIWluX3RpbGUgfHwgIWZpdHNfdG9fc2VnbWVudCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1vdmVOZXh0U2VnbWVudCgpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIHdlIGNhbid0IG1vdmUgZnVydGhlciBpbiB0aGlzIGxpbmVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5fdGlsZSA9IHRoaXMuaW5UaWxlQm91bmRzKCk7XG4gICAgICAgICAgICBmaXRzX3RvX3NlZ21lbnQgPSB0aGlzLmZpdFRvU2VnbWVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluX3RpbGUgJiYgZml0c190b19zZWdtZW50O1xuICAgIH1cblxuICAgIGRpc2NhcmQgKGJib3hlcykge1xuICAgICAgICAvLyBGaXJzdCBmaW5kIGEgbGluZSBzZWdtZW50IHRoYXQgZml0cyB0aGUgbGFiZWxcbiAgICAgICAgaWYgKHRoaXMubGluZXMgJiYgIXRoaXMuZml0VG9TZWdtZW50KCkpIHtcbiAgICAgICAgICAgIHdoaWxlICghdGhpcy5maXRUb1NlZ21lbnQoKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tb3ZlTmV4dFNlZ21lbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBsYWJlbCBmaXRzIGluIGxpbmUsIHJ1biBzdGFuZGFyZCBkaXNjYXJkIHRlc3RzXG4gICAgICAgIHJldHVybiBzdXBlci5kaXNjYXJkKGJib3hlcyk7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgTGFiZWwgZnJvbSAnLi9sYWJlbCc7XG5pbXBvcnQgR2VvIGZyb20gJy4uL2dlbyc7XG5pbXBvcnQgT0JCIGZyb20gJy4uL3V0aWxzL29iYic7XG5pbXBvcnQgUG9pbnRBbmNob3IgZnJvbSAnLi4vc3R5bGVzL3BvaW50cy9wb2ludF9hbmNob3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYWJlbFBvaW50IGV4dGVuZHMgTGFiZWwge1xuXG4gICAgY29uc3RydWN0b3IgKHBvc2l0aW9uLCBzaXplLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKHNpemUsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnBvc2l0aW9uID0gW3Bvc2l0aW9uWzBdLCBwb3NpdGlvblsxXV07XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlKCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMub2Zmc2V0ID0gdGhpcy5jb21wdXRlT2Zmc2V0KCk7XG4gICAgICAgIHRoaXMudXBkYXRlQkJveGVzKCk7XG4gICAgfVxuXG4gICAgY29tcHV0ZU9mZnNldCAoKSB7XG4gICAgICAgIHJldHVybiBQb2ludEFuY2hvci5jb21wdXRlT2Zmc2V0KHRoaXMub3B0aW9ucy5vZmZzZXQsIHRoaXMuc2l6ZSwgdGhpcy5vcHRpb25zLmFuY2hvcik7XG4gICAgfVxuXG4gICAgdXBkYXRlQkJveGVzICgpIHtcbiAgICAgICAgbGV0IHdpZHRoID0gKHRoaXMuc2l6ZVswXSArIHRoaXMub3B0aW9ucy5idWZmZXJbMF0gKiAyKSAqIHRoaXMub3B0aW9ucy51bml0c19wZXJfcGl4ZWwgKiBMYWJlbC5lcHNpbG9uO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gKHRoaXMuc2l6ZVsxXSArIHRoaXMub3B0aW9ucy5idWZmZXJbMV0gKiAyKSAqIHRoaXMub3B0aW9ucy51bml0c19wZXJfcGl4ZWwgKiBMYWJlbC5lcHNpbG9uO1xuXG4gICAgICAgIGxldCBwID0gW1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvblswXSArICh0aGlzLm9wdGlvbnMub2Zmc2V0WzBdICogdGhpcy5vcHRpb25zLnVuaXRzX3Blcl9waXhlbCksXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uWzFdIC0gKHRoaXMub3B0aW9ucy5vZmZzZXRbMV0gKiB0aGlzLm9wdGlvbnMudW5pdHNfcGVyX3BpeGVsKVxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMub2JiID0gbmV3IE9CQihwWzBdLCBwWzFdLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5hYWJiID0gdGhpcy5vYmIuZ2V0RXh0ZW50KCk7XG4gICAgfVxuXG4gICAgLy8gVHJ5IHRvIG1vdmUgdGhlIGxhYmVsIGludG8gdGhlIHRpbGUgYm91bmRzXG4gICAgLy8gUmV0dXJucyB0cnVlIGlmIGxhYmVsIHdhcyBtb3ZlZCBpbnRvIHRpbGUsIGZhbHNlIGlmIGl0IGNvdWxkbid0IGJlIG1vdmVkXG4gICAgbW92ZUludG9UaWxlICgpIHtcbiAgICAgICAgbGV0IHVwZGF0ZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5hYWJiWzBdIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvblswXSArPSAtdGhpcy5hYWJiWzBdO1xuICAgICAgICAgICAgdXBkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hYWJiWzJdID49IEdlby50aWxlX3NjYWxlKSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uWzBdIC09IHRoaXMuYWFiYlsyXSAtIEdlby50aWxlX3NjYWxlICsgMTtcbiAgICAgICAgICAgIHVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWFiYlszXSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25bMV0gLT0gdGhpcy5hYWJiWzNdO1xuICAgICAgICAgICAgdXBkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hYWJiWzFdIDw9IC1HZW8udGlsZV9zY2FsZSkge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvblsxXSAtPSB0aGlzLmFhYmJbMV0gKyBHZW8udGlsZV9zY2FsZSAtIDE7XG4gICAgICAgICAgICB1cGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGRhdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJCb3hlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5UaWxlQm91bmRzKCk7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgR2VvIGZyb20gJy4uL2dlbyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcGVhdEdyb3VwIHtcblxuICAgIGNvbnN0cnVjdG9yIChrZXksIHJlcGVhdF9kaXN0LCBtYXhfcmVwZWF0X2Rpc3QpIHtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgICAgIHRoaXMucmVwZWF0X2Rpc3QgPSByZXBlYXRfZGlzdDtcbiAgICAgICAgdGhpcy5yZXBlYXRfZGlzdF9zcSA9IHRoaXMucmVwZWF0X2Rpc3QgKiB0aGlzLnJlcGVhdF9kaXN0O1xuICAgICAgICB0aGlzLm1heF9yZXBlYXRfZGlzdF9zcSA9IG1heF9yZXBlYXRfZGlzdCAqIG1heF9yZXBlYXRfZGlzdDtcbiAgICAgICAgdGhpcy5vbmVfcGVyX2dyb3VwID0gKHRoaXMucmVwZWF0X2Rpc3Rfc3EgPj0gdGhpcy5tYXhfcmVwZWF0X2Rpc3Rfc3EpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IFtdO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGFuIG9iamVjdCB0byBzZWUgaWYgaXQncyBhIHJlcGVhdCBpbiB0aGlzIGdyb3VwXG4gICAgY2hlY2sgKG9iaikge1xuICAgICAgICAvLyBJZiBvbmx5IG9uZSBvYmplY3QgYWxsb3dlZCBwZXIgZ3JvdXAsIHNob3J0Y3V0IGRpc3RhbmNlIGxvZ2ljXG4gICAgICAgIGlmICh0aGlzLm9uZV9wZXJfZ3JvdXApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVwb3J0ZWQgZGlzdGFuY2UgbWF4ZXMgb3V0IGF0IHRocmVzaG9sZCBpbiB0aGlzIGNhc2VcbiAgICAgICAgICAgICAgICAvLyAobm90IHRydWUgZGlzdCB2YWx1ZSBzaW5jZSB3ZSBza2lwcGVkIGNhbGN1bGF0aW5nIGl0KVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3Rfc3E6IHRoaXMubWF4X3JlcGVhdF9kaXN0X3NxLFxuICAgICAgICAgICAgICAgICAgICByZXBlYXRfZGlzdF9zcTogdGhpcy5yZXBlYXRfZGlzdF9zcSxcbiAgICAgICAgICAgICAgICAgICAgb25lX3Blcl9ncm91cDogdGhpcy5vbmVfcGVyX2dyb3VwXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjsgLy8gbm8gb2JqZWN0IGZvciB0aGlzIGdyb3VwIHlldFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZGlzdGFuY2UgZnJvbSBuZXcgb2JqZWN0IHRvIG9iamVjdHMgYWxyZWFkeSBpbiBncm91cFxuICAgICAgICBsZXQgcDEgPSBvYmoucG9zaXRpb247XG4gICAgICAgIGZvciAobGV0IGk9MDsgaSA8IHRoaXMucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcDIgPSB0aGlzLnBvc2l0aW9uc1tpXTtcbiAgICAgICAgICAgIGxldCBkeCA9IHAxWzBdIC0gcDJbMF07XG4gICAgICAgICAgICBsZXQgZHkgPSBwMVsxXSAtIHAyWzFdO1xuICAgICAgICAgICAgbGV0IGRpc3Rfc3EgPSBkeCAqIGR4ICsgZHkgKiBkeTtcblxuICAgICAgICAgICAgLy8gRm91bmQgYW4gZXhpc3Rpbmcgb2JqZWN0IHdpdGhpbiBhbGxvd2VkIGRpc3RhbmNlXG4gICAgICAgICAgICBpZiAoZGlzdF9zcSA8IHRoaXMucmVwZWF0X2Rpc3Rfc3EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBkaXN0X3NxLFxuICAgICAgICAgICAgICAgICAgICByZXBlYXRfZGlzdF9zcTogdGhpcy5yZXBlYXRfZGlzdF9zcVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgb2JqZWN0IHRvIHRoaXMgZ3JvdXBcbiAgICBhZGQgKG9iaikge1xuICAgICAgICAvLyBvbmx5IHN0b3JlIG9iamVjdCdzIHBvc2l0aW9uLCB0byBzYXZlIHNwYWNlIC8gcHJldmVudCB1bm5lY2Vzc2FyeSByZWZlcmVuY2VzXG4gICAgICAgIGlmIChvYmogJiYgb2JqLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucy5wdXNoKG9iai5wb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdGF0aWMgbWV0aG9kcyBhcmUgdXNlZCB0byBtYW5hZ2UgcmVwZWF0IGdyb3Vwcywgd2l0aGluIGFuZCBhY3Jvc3MgdGlsZXNcblxuICAgIC8vIFJlc2V0IGFsbCBncm91cHMgZm9yIHRoaXMgdGlsZVxuICAgIHN0YXRpYyBjbGVhciAodGlsZSkge1xuICAgICAgICB0aGlzLmdyb3Vwc1t0aWxlXSA9IHt9O1xuICAgIH1cblxuICAgIC8vIENoZWNrIGFuIG9iamVjdCB0byBzZWUgaWYgaXQncyBhIHJlcGVhdCB3aXRoaW4gaXRzIGRlc2lnbmF0ZWQgZ3JvdXBcbiAgICBzdGF0aWMgY2hlY2sgKG9iaiwgbGF5b3V0LCB0aWxlKSB7XG4gICAgICAgIGlmIChsYXlvdXQucmVwZWF0X2Rpc3RhbmNlICYmIHRoaXMuZ3JvdXBzW3RpbGVdW2xheW91dC5yZXBlYXRfZ3JvdXBdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncm91cHNbdGlsZV1bbGF5b3V0LnJlcGVhdF9ncm91cF0uY2hlY2sob2JqKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBhbiBvYmplY3QgdG8gaXRzIGRlc2lnbmF0ZWQgZ3JvdXBcbiAgICBzdGF0aWMgYWRkIChvYmosIGxheW91dCwgdGlsZSkge1xuICAgICAgICBpZiAobGF5b3V0LnJlcGVhdF9kaXN0YW5jZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBzW3RpbGVdW2xheW91dC5yZXBlYXRfZ3JvdXBdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3Vwc1t0aWxlXVtsYXlvdXQucmVwZWF0X2dyb3VwXSA9IG5ldyBSZXBlYXRHcm91cChcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0LnJlcGVhdF9ncm91cCxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0LnJlcGVhdF9kaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgUmVwZWF0R3JvdXAubWF4X3JlcGVhdF9kaXN0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzW3RpbGVdW2xheW91dC5yZXBlYXRfZ3JvdXBdLmFkZChvYmopO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbi8vIEN1cnJlbnQgc2V0IG9mIHJlcGVhdCBncm91cHMsIGdyb3VwZWQgYW5kIGtleWVkIGJ5IHRpbGVcblJlcGVhdEdyb3VwLmdyb3VwcyA9IHt9O1xuXG4vLyBNYXggcmVwZWF0IGRpc3Q6IGZvciBncm91cHMgd2l0aCBhIHJlcGVhdCBkaXN0IGJleW9uZCB0aGlzIHRocmVzaG9sZCwgb25seSBvbmUgbGFiZWxcbi8vIHdpbGwgYmUgYWxsb3dlZCBwZXIgZ3JvdXAsIGUuZy4gc2V0IHRvIHRpbGUgc2l6ZSBmb3Igb25lLWxhYmVsLXBlci10aWxlXG5SZXBlYXRHcm91cC5tYXhfcmVwZWF0X2Rpc3QgPSBHZW8udGlsZV9zY2FsZTtcbiIsImltcG9ydCBVdGlscyBmcm9tICcuL3V0aWxzL3V0aWxzJztcbmltcG9ydCBTY2VuZSBmcm9tICcuL3NjZW5lJztcbmltcG9ydCBHZW8gZnJvbSAnLi9nZW8nO1xuXG4vLyBFeHBvcnRzIG11c3QgYXBwZWFyIG91dHNpZGUgYSBmdW5jdGlvbiwgYnV0IHdpbGwgb25seSBiZSBkZWZpbmVkIGluIG1haW4gdGhyZWFkIChiZWxvdylcbmV4cG9ydCB2YXIgTGVhZmxldExheWVyO1xuZXhwb3J0IGZ1bmN0aW9uIGxlYWZsZXRMYXllcihvcHRpb25zKSB7XG4gICAgcmV0dXJuIGV4dGVuZExlYWZsZXQob3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZExlYWZsZXQob3B0aW9ucykge1xuXG4gICAgLy8gSWYgTGVhZmxldExheWVyIGlzIGFscmVhZHkgZGVmaW5lZCB3aGVuIHRoaXMgaXMgY2FsbGVkIGp1c3QgcmV0dXJuIHRoYXQgaW1tZWRpYXRlbHlcbiAgICAvLyBlLmcuIGlmIHlvdSBjYWxsIGxlYWZsZXRMYXllciBtdWx0aXBsZSB0aW1lcyAod2hpY2ggaXMgdmFsaWQpXG4gICAgaWYgKHR5cGVvZiBMZWFmbGV0TGF5ZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgTGVhZmxldExheWVyKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIExlYWZsZXQgbGF5ZXIgZnVuY3Rpb25hbGl0eSBpcyBvbmx5IGRlZmluZWQgaW4gbWFpbiB0aHJlYWRcbiAgICBpZiAoVXRpbHMuaXNNYWluVGhyZWFkKSB7XG5cbiAgICAgICAgbGV0IEwgPSBvcHRpb25zLmxlYWZsZXQgfHwgd2luZG93Lkw7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHdlIGFyZSBleHRlbmRpbmcgdGhlIGxlYWZsZXQgMC43LnggVGlsZUxheWVyIGNsYXNzLCBvciB0aGUgbmV3ZXJcbiAgICAgICAgLy8gbGVhZmxldCAxLnggR3JpZExheWVyIGNsYXNzLlxuICAgICAgICBsZXQgbGF5ZXJCYXNlQ2xhc3MgPSBMLkdyaWRMYXllciA/IEwuR3JpZExheWVyIDogTC5UaWxlTGF5ZXI7XG4gICAgICAgIGxldCBsZWFmbGV0VmVyc2lvbiA9IGxheWVyQmFzZUNsYXNzID09PSBMLkdyaWRMYXllciA/ICcxLngnIDogJzAuNy54JztcbiAgICAgICAgbGV0IGxheWVyQ2xhc3NDb25maWcgPSB7fTtcblxuICAgICAgICAvLyBJZiBleHRlbmRpbmcgbGVhZmxldCAwLjcueCBUaWxlTGF5ZXIsIG1ha2UgYWRkL3JlbW92ZSB0aWxlIG5vIG9wc1xuICAgICAgICBpZiAobGF5ZXJCYXNlQ2xhc3MgPT09IEwuVGlsZUxheWVyKSB7XG4gICAgICAgICAgICBsYXllckNsYXNzQ29uZmlnLl9hZGRUaWxlID0gZnVuY3Rpb24oKXt9O1xuICAgICAgICAgICAgbGF5ZXJDbGFzc0NvbmZpZy5fcmVtb3ZlVGlsZSA9IGZ1bmN0aW9uKCl7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmluZSBjdXN0b20gbGF5ZXIgbWV0aG9kc1xuICAgICAgICBPYmplY3QuYXNzaWduKGxheWVyQ2xhc3NDb25maWcsIHtcblxuICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEZWZhdWx0c1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2hvd0RlYnVnID0gKCFvcHRpb25zLnNob3dEZWJ1ZyA/IGZhbHNlIDogdHJ1ZSk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy53aGVlbERlYm91bmNlVGltZSA9IG9wdGlvbnMud2hlZWxEZWJvdW5jZVRpbWUgfHwgNDA7XG5cbiAgICAgICAgICAgICAgICBMLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTY2VuZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9va3MgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGluZ190YW5ncmFtID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAvLyBGb3JjZSBsZWFmbGV0IHpvb20gYW5pbWF0aW9ucyBvZmZcbiAgICAgICAgICAgICAgICB0aGlzLl96b29tQW5pbWF0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVib3VuY2VWaWV3UmVzZXQgPSBVdGlscy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5maXJlKCd6b29tZW5kJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5maXJlKCdtb3ZlZW5kJyk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5vcHRpb25zLndoZWVsRGVib3VuY2VUaW1lKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGNyZWF0ZVNjZW5lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZSA9IFNjZW5lLmNyZWF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNjZW5lLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1Xb3JrZXJzOiB0aGlzLm9wdGlvbnMubnVtV29ya2VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZVVwZGF0ZTogdGhpcy5vcHRpb25zLnByZVVwZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RVcGRhdGU6IHRoaXMub3B0aW9ucy5wb3N0VXBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludW91c1pvb206IChMZWFmbGV0TGF5ZXIubGVhZmxldFZlcnNpb24gPT09ICcxLngnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hEZW5zaXR5RGlzcGxheTogdGhpcy5vcHRpb25zLmhpZ2hEZW5zaXR5RGlzcGxheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiB0aGlzLm9wdGlvbnMubG9nTGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhZHZhbmNlZCBvcHRpb24sIGFwcCB3aWxsIGhhdmUgdG8gbWFudWFsbHkgY2FsbGVkIHNjZW5lLnVwZGF0ZSgpIHBlciBmcmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVJlbmRlckxvb3A6IHRoaXMub3B0aW9ucy5kaXNhYmxlUmVuZGVyTG9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkdmFuY2VkIG9wdGlvbiwgd2lsbCByZXF1aXJlIGxpYnJhcnkgdG8gYmUgc2VydmVkIGFzIHNhbWUgaG9zdCBhcyBwYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0Nyb3NzRG9tYWluV29ya2VyczogdGhpcy5vcHRpb25zLmFsbG93Q3Jvc3NEb21haW5Xb3JrZXJzXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gRmluaXNoIGluaXRpYWxpemluZyBzY2VuZSBhbmQgc2V0dXAgZXZlbnRzIHdoZW4gbGF5ZXIgaXMgYWRkZWQgdG8gbWFwXG4gICAgICAgICAgICBvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zY2VuZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVNjZW5lKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGF5ZXJCYXNlQ2xhc3MucHJvdG90eXBlLm9uQWRkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmhvb2tzLnJlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRpbmdfdGFuZ3JhbSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGluZ190YW5ncmFtID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtYXAub24oJ3Jlc2l6ZScsIHRoaXMuaG9va3MucmVzaXplKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaG9va3MubW92ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3VwZGF0aW5nX3RhbmdyYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0aW5nX3RhbmdyYW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmlldyA9IG1hcC5nZXRDZW50ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdmlldy56b29tID0gTWF0aC5taW4obWFwLmdldFpvb20oKSwgbWFwLmdldE1heFpvb20oKSB8fCBHZW8uZGVmYXVsdF92aWV3X21heF96b29tKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLnZpZXcuc2V0Vmlldyh2aWV3KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5pbW1lZGlhdGVSZWRyYXcoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXZlcnNlVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0aW5nX3RhbmdyYW0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1hcC5vbignbW92ZScsIHRoaXMuaG9va3MubW92ZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmhvb2tzLnpvb21zdGFydCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3VwZGF0aW5nX3RhbmdyYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0aW5nX3RhbmdyYW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLnZpZXcuc3RhcnRab29tKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0aW5nX3RhbmdyYW0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1hcC5vbignem9vbXN0YXJ0JywgdGhpcy5ob29rcy56b29tc3RhcnQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5ob29rcy5kcmFnc3RhcnQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUudmlldy5wYW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1hcC5vbignZHJhZ3N0YXJ0JywgdGhpcy5ob29rcy5kcmFnc3RhcnQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5ob29rcy5kcmFnZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLnZpZXcucGFubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbWFwLm9uKCdkcmFnZW5kJywgdGhpcy5ob29rcy5kcmFnZW5kKTtcblxuICAgICAgICAgICAgICAgIC8vIEZvcmNlIGxlYWZsZXQgem9vbSBhbmltYXRpb25zIG9mZlxuICAgICAgICAgICAgICAgIG1hcC5fem9vbUFuaW1hdGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAvLyBNb2RpZnkgZGVmYXVsdCBsZWFmbGV0IHNjcm9sbCB3aGVlbCBiZWhhdmlvclxuICAgICAgICAgICAgICAgIHRoaXMubW9kaWZ5U2Nyb2xsV2hlZWxCZWhhdmlvcihtYXApO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0dXAgZmVhdHVyZSBzZWxlY3Rpb25cbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwU2VsZWN0aW9uRXZlbnRIYW5kbGVycyhtYXApO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uRXZlbnRzKHRoaXMub3B0aW9ucy5ldmVudHMpO1xuXG4gICAgICAgICAgICAgICAgLy8gQWRkIEdMIGNhbnZhcyB0byBsYXllciBjb250YWluZXJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLmNvbnRhaW5lciA9IHRoaXMuZ2V0Q29udGFpbmVyKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJbml0aWFsIHZpZXdcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcblxuICAgICAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byB0YW5ncmFtIGV2ZW50c1xuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbW92ZTogdGhpcy5vblRhbmdyYW1WaWV3VXBkYXRlLmJpbmQodGhpcylcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIFVzZSBsZWFmbGV0J3MgZXhpc3RpbmcgZXZlbnQgc3lzdGVtIGFzIHRoZSBjYWxsYmFjayBtZWNoYW5pc21cbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLmxvYWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRpbmdfdGFuZ3JhbSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJldmVyc2VUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGluZ190YW5ncmFtID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKCdpbml0Jyk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmUoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgb25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcbiAgICAgICAgICAgICAgICBsYXllckJhc2VDbGFzcy5wcm90b3R5cGUub25SZW1vdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgICAgICAgICAgIG1hcC5vZmYoJ3Jlc2l6ZScsIHRoaXMuaG9va3MucmVzaXplKTtcbiAgICAgICAgICAgICAgICBtYXAub2ZmKCdtb3ZlJywgdGhpcy5ob29rcy5tb3ZlKTtcbiAgICAgICAgICAgICAgICBtYXAub2ZmKCd6b29tc3RhcnQnLCB0aGlzLmhvb2tzLnpvb21zdGFydCk7XG4gICAgICAgICAgICAgICAgbWFwLm9mZignZHJhZ3N0YXJ0JywgdGhpcy5ob29rcy5kcmFnc3RhcnQpO1xuICAgICAgICAgICAgICAgIG1hcC5vZmYoJ2RyYWdlbmQnLCB0aGlzLmhvb2tzLmRyYWdlbmQpO1xuICAgICAgICAgICAgICAgIG1hcC5vZmYoJ2NsaWNrJywgdGhpcy5ob29rcy5jbGljayk7XG4gICAgICAgICAgICAgICAgbWFwLm9mZignbW91c2Vtb3ZlJywgdGhpcy5ob29rcy5tb3VzZW1vdmUpO1xuICAgICAgICAgICAgICAgIG1hcC5vZmYoJ21vdXNlb3V0JywgdGhpcy5ob29rcy5tb3VzZW91dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ob29rcyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2NlbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGNyZWF0ZVRpbGU6IGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gY29vcmRzLnggKyAnLycgKyBjb29yZHMueSArICcvJyArIGNvb3Jkcy56O1xuICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdkYXRhLXRpbGUta2V5Jywga2V5KTtcbiAgICAgICAgICAgICAgICBkaXYuc3R5bGUud2lkdGggPSAnMjU2cHgnO1xuICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAnMjU2cHgnO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93RGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlYnVnX292ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcmxheS50ZXh0Q29udGVudCA9IGtleTtcbiAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcmxheS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJsYXkuc3R5bGUubGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJsYXkuc3R5bGUudG9wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcmxheS5zdHlsZS5jb2xvciA9ICd3aGl0ZSc7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJsYXkuc3R5bGUuZm9udFNpemUgPSAnMTZweCc7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJsYXkuc3R5bGUudGV4dE91dGxpbmUgPSAnMXB4ICMwMDAwMDAnO1xuICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVybGF5LnN0eWxlLnBhZGRpbmcgPSAnOHB4JztcblxuICAgICAgICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZGVidWdfb3ZlcmxheSk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdzb2xpZCc7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5ib3JkZXJDb2xvciA9ICd3aGl0ZSc7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5ib3JkZXJXaWR0aCA9ICcxcHgnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBkaXY7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyBNb2RpZnkgbGVhZmxldCdzIGRlZmF1bHQgc2Nyb2xsIHdoZWVsIGJlaGF2aW9yIHRvIGhhdmUgYSBtdWNoIG1vcmUgc2Vuc2l0dmUvY29udGludW91cyB6b29tXG4gICAgICAgICAgICAvLyBOb3RlOiB0aGlzIHNob3VsZCBiZSBkZXByZWNhdGVkIG9uY2UgbGVhZmxldCBjb250aW51b3VzIHpvb20gaXMgbW9yZSB3aWRlbHkgdXNlZCBhbmQgdGhlXG4gICAgICAgICAgICAvLyBkZWZhdWx0IGJlaGF2aW9yIGlzIHByZXN1bWFibHkgaW1wcm92ZWRcbiAgICAgICAgICAgIG1vZGlmeVNjcm9sbFdoZWVsQmVoYXZpb3I6IGZ1bmN0aW9uIChtYXApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2VuZS52aWV3LmNvbnRpbnVvdXNfem9vbSAmJiBtYXAuc2Nyb2xsV2hlZWxab29tICYmIHRoaXMub3B0aW9ucy5tb2RpZnlTY3JvbGxXaGVlbCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxheWVyID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVuYWJsZWQgPSBtYXAuc2Nyb2xsV2hlZWxab29tLmVuYWJsZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zY3JvbGxXaGVlbFpvb20uZGlzYWJsZSgpOyAvLyBkaXNhYmxlIGJlZm9yZSBtb2RpZnlpbmdcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIG1vZGlmeSBwcm90b3R5cGUgYW5kIGN1cnJlbnQgaW5zdGFuY2UsIHNvIGFkZC9yZW1vdmUgaG9va3Mgd29yayBvbiBleGlzdGluZyByZWZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgIEwuTWFwLlNjcm9sbFdoZWVsWm9vbS5fb25XaGVlbFNjcm9sbCA9IG1hcC5zY3JvbGxXaGVlbFpvb20uX29uV2hlZWxTY3JvbGwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2RpZnkgdG8gc2tpcCBkZWJvdW5jZSwgYXMgaXQgc2VlbXMgdG8gY2F1c2UgYW5pbWF0aW9uLXN5bmMgaXNzdWVzIGluIENocm9tZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCBUYW5ncmFtIGNvbnRpbnVvdXMgcmVuZGVyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWx0YSArPSBMLkRvbUV2ZW50LmdldFdoZWVsRGVsdGEoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0TW91c2VQb3MgPSB0aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZXJmb3JtWm9vbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgTC5Eb21FdmVudC5zdG9wKGUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEwuTWFwLlNjcm9sbFdoZWVsWm9vbS5fcGVyZm9ybVpvb20gPSBtYXAuc2Nyb2xsV2hlZWxab29tLl9wZXJmb3JtWm9vbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSB0aGlzLl9kZWx0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tID0gbWFwLmdldFpvb20oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwLnN0b3AoKTsgLy8gc3RvcCBwYW5uaW5nIGFuZCBmbHkgYW5pbWF0aW9ucyBpZiBhbnlcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogdGhpcyBpcyB0aGUgb25seSByZWFsIG1vZGlmaWNhdGlvbiB0byBkZWZhdWx0IGxlYWZsZXQgYmVoYXZpb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhIC89IDQwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IE1hdGgubWF4KE1hdGgubWluKGRlbHRhLCA0KSwgLTQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBtYXAuX2xpbWl0Wm9vbSh6b29tICsgZGVsdGEpIC0gem9vbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVsdGEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWx0YSkgeyByZXR1cm47IH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuc2V0Wm9vbSh6b29tICsgZGVsdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuc2V0Wm9vbUFyb3VuZCh0aGlzLl9sYXN0TW91c2VQb3MsIHpvb20gKyBkZWx0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmRlYm91bmNlVmlld1Jlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zY3JvbGxXaGVlbFpvb20uZW5hYmxlKCk7IC8vIHJlLWVuYWJsZSBhZnRlciBtb2RpZnlpbmdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHVwZGF0ZVZpZXc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmlldyA9IHRoaXMuX21hcC5nZXRDZW50ZXIoKTtcbiAgICAgICAgICAgICAgICB2aWV3Lnpvb20gPSBNYXRoLm1pbih0aGlzLl9tYXAuZ2V0Wm9vbSgpLCB0aGlzLl9tYXAuZ2V0TWF4Wm9vbSgpIHx8IEdlby5kZWZhdWx0X3ZpZXdfbWF4X3pvb20pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUudmlldy5zZXRWaWV3KHZpZXcpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdXBkYXRlU2l6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBzaXplID0gdGhpcy5fbWFwLmdldFNpemUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLnJlc2l6ZU1hcChzaXplLngsIHNpemUueSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBvblRhbmdyYW1WaWV3VXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXAgfHwgdGhpcy5fdXBkYXRpbmdfdGFuZ3JhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0aW5nX3RhbmdyYW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXRWaWV3KFt0aGlzLnNjZW5lLnZpZXcuY2VudGVyLmxhdCwgdGhpcy5zY2VuZS52aWV3LmNlbnRlci5sbmddLCB0aGlzLnNjZW5lLnZpZXcuem9vbSwgeyBhbmltYXRlOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJldmVyc2VUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGluZ190YW5ncmFtID0gZmFsc2U7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2NlbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLnVwZGF0ZSgpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gUmV2ZXJzZSB0aGUgQ1NTIHBvc2l0aW9uaW5nIExlYWZsZXQgYXBwbGllcyB0byB0aGUgbGF5ZXIsIHNpbmNlIFRhbmdyYW0ncyBXZWJHTCBjYW52YXNcbiAgICAgICAgICAgIC8vIGlzIGV4cGVjdGVkIHRvIGJlICdhYnNvbHV0ZWx5JyBwb3NpdGlvbmVkLlxuICAgICAgICAgICAgcmV2ZXJzZVRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbWFwIHx8ICF0aGlzLnNjZW5lIHx8ICF0aGlzLnNjZW5lLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRvcF9sZWZ0ID0gdGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KFswLCAwXSk7XG4gICAgICAgICAgICAgICAgTC5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuc2NlbmUuY29udGFpbmVyLCB0b3BfbGVmdCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyBUaWUgTGVhZmxldCBldmVudCBoYW5kbGVycyB0byBUYW5ncmFtIGZlYXR1cmUgc2VsZWN0aW9uXG4gICAgICAgICAgICBzZXR1cFNlbGVjdGlvbkV2ZW50SGFuZGxlcnM6IGZ1bmN0aW9uIChtYXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25fZXZlbnRzID0ge307XG5cbiAgICAgICAgICAgICAgICB0aGlzLmhvb2tzLmNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fc2VsZWN0aW9uX2V2ZW50cy5jbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5nZXRGZWF0dXJlQXQoZXZlbnQuY29udGFpbmVyUG9pbnQpLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4oc2VsZWN0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBPYmplY3QuYXNzaWduKHt9LCBzZWxlY3Rpb24sIHsgbGVhZmxldF9ldmVudDogZXZlbnQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbl9ldmVudHMuY2xpY2socmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1hcC5vbignY2xpY2snLCB0aGlzLmhvb2tzLmNsaWNrKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaG9va3MubW91c2Vtb3ZlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fc2VsZWN0aW9uX2V2ZW50cy5ob3ZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5nZXRGZWF0dXJlQXQoZXZlbnQuY29udGFpbmVyUG9pbnQpLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4oc2VsZWN0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBPYmplY3QuYXNzaWduKHt9LCBzZWxlY3Rpb24sIHsgbGVhZmxldF9ldmVudDogZXZlbnQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbl9ldmVudHMuaG92ZXIocmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1hcC5vbignbW91c2Vtb3ZlJywgdGhpcy5ob29rcy5tb3VzZW1vdmUpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5ob29rcy5tb3VzZW91dCA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIG1vdXNlIGxlYXZlcyBtYXAsIHNlbmQgYW4gYWRkaXRpb25hbCBzZWxlY3Rpb24gZXZlbnQgdG8gaW5kaWNhdGUgbm8gZmVhdHVyZSBpcyBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3NlbGVjdGlvbl9ldmVudHMuaG92ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbl9ldmVudHMuaG92ZXIoeyBjaGFuZ2VkOiB0cnVlLCBsZWFmbGV0X2V2ZW50OiBldmVudCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbWFwLm9uKCdtb3VzZW91dCcsIHRoaXMuaG9va3MubW91c2VvdXQpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gU2V0IHVzZXItZGVmaW5lZCBoYW5kbGVycyBmb3IgZmVhdHVyZSBzZWxlY3Rpb24gZXZlbnRzXG4gICAgICAgICAgICAvLyBDdXJyZW50bHkgb25seSBvbmUgaGFuZGxlciBjYW4gYmUgZGVmaW5lZCBmb3IgZWFjaCBldmVudCB0eXBlXG4gICAgICAgICAgICAvLyBFdmVudCB0eXBlcyBhcmU6IGBjbGlja2AsIGBob3ZlcmAgKGxlYWZsZXQgYG1vdXNlbW92ZWApXG4gICAgICAgICAgICBzZXRTZWxlY3Rpb25FdmVudHM6IGZ1bmN0aW9uIChldmVudHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25fZXZlbnRzID0gT2JqZWN0LmFzc2lnbih0aGlzLl9zZWxlY3Rpb25fZXZlbnRzLCBldmVudHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgbGF5ZXIgY2xhc3NcbiAgICAgICAgTGVhZmxldExheWVyID0gbGF5ZXJCYXNlQ2xhc3MuZXh0ZW5kKGxheWVyQ2xhc3NDb25maWcpO1xuXG4gICAgICAgIC8vIFBvbHlmaWxsIHNvbWUgMS4wIG1ldGhvZHNcbiAgICAgICAgaWYgKHR5cGVvZiBMZWFmbGV0TGF5ZXIucmVtb3ZlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBMZWFmbGV0TGF5ZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnJlbW92ZUxheWVyKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUoJ3JlbW92ZScpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIExlYWZsZXRMYXllci5sYXllckJhc2VDbGFzcyA9IGxheWVyQmFzZUNsYXNzO1xuICAgICAgICBMZWFmbGV0TGF5ZXIubGVhZmxldFZlcnNpb24gPSBsZWFmbGV0VmVyc2lvbjtcblxuICAgICAgICByZXR1cm4gbmV3IExlYWZsZXRMYXllcihvcHRpb25zKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgU2hhZGVyUHJvZ3JhbSBmcm9tICcuL2dsL3NoYWRlcl9wcm9ncmFtJztcbmltcG9ydCBzaGFkZXJTb3VyY2VzIGZyb20gJy4vZ2wvc2hhZGVyX3NvdXJjZXMnOyAvLyBidWlsdC1pbiBzaGFkZXJzXG5pbXBvcnQgR0xTTCBmcm9tICcuL2dsL2dsc2wnO1xuaW1wb3J0IEdlbyBmcm9tICcuL2dlbyc7XG5pbXBvcnQge1N0eWxlUGFyc2VyfSBmcm9tICcuL3N0eWxlcy9zdHlsZV9wYXJzZXInO1xuXG4vLyBBYnN0cmFjdCBsaWdodFxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlnaHQge1xuXG4gICAgY29uc3RydWN0b3IgKHZpZXcsIGNvbmZpZykge1xuICAgICAgICB0aGlzLm5hbWUgPSBjb25maWcubmFtZTtcbiAgICAgICAgdGhpcy52aWV3ID0gdmlldztcblxuICAgICAgICBpZiAoY29uZmlnLmFtYmllbnQgPT0gbnVsbCB8fCB0eXBlb2YgY29uZmlnLmFtYmllbnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLmFtYmllbnQgPSBHTFNMLmV4cGFuZFZlYzQoY29uZmlnLmFtYmllbnQgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFtYmllbnQgPSBTdHlsZVBhcnNlci5wYXJzZUNvbG9yKGNvbmZpZy5hbWJpZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuZGlmZnVzZSA9PSBudWxsIHx8IHR5cGVvZiBjb25maWcuZGlmZnVzZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRoaXMuZGlmZnVzZSA9IEdMU0wuZXhwYW5kVmVjNChjb25maWcuZGlmZnVzZSAhPSBudWxsID8gY29uZmlnLmRpZmZ1c2UgOiAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlmZnVzZSA9IFN0eWxlUGFyc2VyLnBhcnNlQ29sb3IoY29uZmlnLmRpZmZ1c2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5zcGVjdWxhciA9PSBudWxsIHx8IHR5cGVvZiBjb25maWcuc3BlY3VsYXIgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLnNwZWN1bGFyID0gR0xTTC5leHBhbmRWZWM0KGNvbmZpZy5zcGVjdWxhciB8fCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3BlY3VsYXIgPSBTdHlsZVBhcnNlci5wYXJzZUNvbG9yKGNvbmZpZy5zcGVjdWxhcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBsaWdodCBieSB0eXBlIG5hbWUsIGZhY3Rvcnktc3R5bGVcbiAgICAvLyAnY29uZmlnJyBtdXN0IGluY2x1ZGUgJ25hbWUnIGFuZCAndHlwZScsIGFsb25nIHdpdGggYW55IG90aGVyIHR5cGUtc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHN0YXRpYyBjcmVhdGUgKHZpZXcsIGNvbmZpZykge1xuICAgICAgICBpZiAoTGlnaHQudHlwZXNbY29uZmlnLnR5cGVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExpZ2h0LnR5cGVzW2NvbmZpZy50eXBlXSh2aWV3LCBjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGxpZ2h0IGZvciBhIHN0eWxlOiBmcmFnbWVudCBsaWdodGluZywgdmVydGV4IGxpZ2h0aW5nLCBvciBub25lXG4gICAgc3RhdGljIHNldE1vZGUgKG1vZGUsIHN0eWxlKSB7XG4gICAgICAgIGlmIChtb2RlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBtb2RlID0gJ2ZyYWdtZW50JztcbiAgICAgICAgfVxuICAgICAgICBtb2RlID0gTGlnaHQuZW5hYmxlZCAmJiAoKG1vZGUgIT0gbnVsbCkgPyBtb2RlIDogJ2ZyYWdtZW50Jyk7IC8vIGRlZmF1bHQgdG8gZnJhZ21lbnQgbGlnaHRpbmdcbiAgICAgICAgc3R5bGUuZGVmaW5lc1snVEFOR1JBTV9MSUdIVElOR19GUkFHTUVOVCddID0gKG1vZGUgPT09ICdmcmFnbWVudCcpO1xuICAgICAgICBzdHlsZS5kZWZpbmVzWydUQU5HUkFNX0xJR0hUSU5HX1ZFUlRFWCddID0gKG1vZGUgPT09ICd2ZXJ0ZXgnKTtcbiAgICB9XG5cbiAgICAvLyBJbmplY3QgYWxsIHByb3ZpZGVkIGxpZ2h0IGRlZmluaXRpb25zLCBhbmQgY2FsY3VsYXRlIGN1bXVsYXRpdmUgbGlnaHQgZnVuY3Rpb25cbiAgICBzdGF0aWMgaW5qZWN0IChsaWdodHMpIHtcbiAgICAgICAgLy8gQ2xlYXIgcHJldmlvdXMgaW5qZWN0aW9uc1xuICAgICAgICBTaGFkZXJQcm9ncmFtLnJlbW92ZUJsb2NrKExpZ2h0LmJsb2NrKTtcblxuICAgICAgICAvLyBJZiBsaWdodGluZyBpcyBnbG9iYWxseSBkaXNhYmxlZCwgbm90aGluZyBpcyBpbmplY3RlZCAobW9zdGx5IGZvciBkZWJ1Z2dpbmcgb3IgbGl2ZSBlZGl0aW5nKVxuICAgICAgICBpZiAoIUxpZ2h0LmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnN0cnVjdCBjb2RlIHRvIGNhbGN1bGF0ZSBlYWNoIGxpZ2h0IGluc3RhbmNlXG4gICAgICAgIGxldCBjYWxjdWxhdGVMaWdodHMgPSBcIlwiO1xuICAgICAgICBpZiAobGlnaHRzICYmIE9iamVjdC5rZXlzKGxpZ2h0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gQ29sbGVjdCB1bmlxdWVzIHR5cGVzIG9mIGxpZ2h0c1xuICAgICAgICAgICAgbGV0IHR5cGVzID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBsaWdodF9uYW1lIGluIGxpZ2h0cykge1xuICAgICAgICAgICAgICAgIHR5cGVzW2xpZ2h0c1tsaWdodF9uYW1lXS50eXBlXSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEluamVjdCBlYWNoIHR5cGUgb2YgbGlnaHRcbiAgICAgICAgICAgIGZvciAobGV0IHR5cGUgaW4gdHlwZXMpIHtcbiAgICAgICAgICAgICAgICBMaWdodC50eXBlc1t0eXBlXS5pbmplY3QoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSW5qZWN0IHBlci1pbnN0YW5jZSBibG9ja3MgYW5kIGNvbnN0cnVjdCB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIGVhY2ggbGlnaHRcbiAgICAgICAgICAgIGZvciAobGV0IGxpZ2h0X25hbWUgaW4gbGlnaHRzKSB7XG4gICAgICAgICAgICAgICAgLy8gRGVmaW5lIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgbGlnaHRzW2xpZ2h0X25hbWVdLmluamVjdCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBjYWxjdWxhdGlvbiBmdW5jdGlvbiB0byB0aGUgbGlzdFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZUxpZ2h0cyArPSBgY2FsY3VsYXRlTGlnaHQoJHtsaWdodF9uYW1lfSwgX2V5ZVRvUG9pbnQsIF9ub3JtYWwpO1xcbmA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiBubyBsaWdodCBpcyBkZWZpbmVkLCB1c2UgMTAwJSBvbW5pZGlyZWN0aW9uYWwgZGlmZnVzZSBsaWdodFxuICAgICAgICAgICAgY2FsY3VsYXRlTGlnaHRzID0gYFxuICAgICAgICAgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0RJRkZVU0VcbiAgICAgICAgICAgICAgICAgICAgbGlnaHRfYWNjdW11bGF0b3JfZGlmZnVzZSA9IHZlYzQoMS4pO1xuICAgICAgICAgICAgICAgICNlbmRpZlxuICAgICAgICAgICAgYDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdsdWUgdG9nZXRoZXIgdGhlIGZpbmFsIGxpZ2h0aW5nIGZ1bmN0aW9uIHRoYXQgc3VtcyBhbGwgdGhlIGxpZ2h0c1xuICAgICAgICBsZXQgY2FsY3VsYXRlRnVuY3Rpb24gPSBgXG4gICAgICAgICAgICB2ZWM0IGNhbGN1bGF0ZUxpZ2h0aW5nKGluIHZlYzMgX2V5ZVRvUG9pbnQsIGluIHZlYzMgX25vcm1hbCwgaW4gdmVjNCBfY29sb3IpIHtcblxuICAgICAgICAgICAgICAgIC8vIERvIGluaXRpYWwgbWF0ZXJpYWwgY2FsY3VsYXRpb25zIG92ZXIgbm9ybWFsLCBlbWlzc2lvbiwgYW1iaWVudCwgZGlmZnVzZSBhbmQgc3BlY3VsYXIgdmFsdWVzXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlTWF0ZXJpYWwoX2V5ZVRvUG9pbnQsX25vcm1hbCk7XG5cbiAgICAgICAgICAgICAgICAvLyBVbiByb2xsIHRoZSBsb29wIG9mIGluZGl2aWR1YWwgbGlndGhzIHRvIGNhbGN1bGF0ZVxuICAgICAgICAgICAgICAgICR7Y2FsY3VsYXRlTGlnaHRzfVxuXG4gICAgICAgICAgICAgICAgLy8gIEZpbmFsIGxpZ2h0IGludGVuc2l0eSBjYWxjdWxhdGlvblxuICAgICAgICAgICAgICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XG5cbiAgICAgICAgICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9FTUlTU0lPTlxuICAgICAgICAgICAgICAgICAgICBjb2xvciA9IG1hdGVyaWFsLmVtaXNzaW9uO1xuICAgICAgICAgICAgICAgICNlbmRpZlxuXG4gICAgICAgICAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfQU1CSUVOVFxuICAgICAgICAgICAgICAgICAgICBjb2xvciArPSBsaWdodF9hY2N1bXVsYXRvcl9hbWJpZW50ICogX2NvbG9yICogbWF0ZXJpYWwuYW1iaWVudDtcbiAgICAgICAgICAgICAgICAjZWxzZVxuICAgICAgICAgICAgICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9ESUZGVVNFXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvciArPSBsaWdodF9hY2N1bXVsYXRvcl9hbWJpZW50ICogX2NvbG9yICogbWF0ZXJpYWwuZGlmZnVzZTtcbiAgICAgICAgICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgICAgICAgI2VuZGlmXG5cbiAgICAgICAgICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9ESUZGVVNFXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yICs9IGxpZ2h0X2FjY3VtdWxhdG9yX2RpZmZ1c2UgKiBfY29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlO1xuICAgICAgICAgICAgICAgICNlbmRpZlxuXG4gICAgICAgICAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfU1BFQ1VMQVJcbiAgICAgICAgICAgICAgICAgICAgY29sb3IgKz0gbGlnaHRfYWNjdW11bGF0b3Jfc3BlY3VsYXIgKiBtYXRlcmlhbC5zcGVjdWxhcjtcbiAgICAgICAgICAgICAgICAjZW5kaWZcblxuICAgICAgICAgICAgICAgIC8vIENsYW1wIGZpbmFsIGNvbG9yXG4gICAgICAgICAgICAgICAgY29sb3IgPSBjbGFtcChjb2xvciwgMC4wLCAxLjApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xuICAgICAgICAgICAgfWA7XG5cbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5hZGRCbG9jayhMaWdodC5ibG9jaywgY2FsY3VsYXRlRnVuY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIENvbW1vbiBpbnN0YW5jZSBkZWZpbml0aW9uXG4gICAgaW5qZWN0ICgpIHtcbiAgICAgICAgbGV0IGluc3RhbmNlID0gIGBcbiAgICAgICAgICAgIHVuaWZvcm0gJHt0aGlzLnN0cnVjdF9uYW1lfSB1XyR7dGhpcy5uYW1lfTtcbiAgICAgICAgICAgICR7dGhpcy5zdHJ1Y3RfbmFtZX0gJHt0aGlzLm5hbWV9O1xuICAgICAgICAgICAgYDtcbiAgICAgICAgbGV0IGFzc2lnbiA9IGBcbiAgICAgICAgICAgICR7dGhpcy5uYW1lfSA9IHVfJHt0aGlzLm5hbWV9O1xcblxuICAgICAgICBgO1xuXG4gICAgICAgIFNoYWRlclByb2dyYW0uYWRkQmxvY2soTGlnaHQuYmxvY2ssIGluc3RhbmNlKTtcbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5hZGRCbG9jaygnc2V0dXAnLCBhc3NpZ24pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBtZXRob2QgY2FsbGVkIG9uY2UgcGVyIGZyYW1lXG4gICAgdXBkYXRlICgpIHtcbiAgICB9XG5cbiAgICAvLyBDYWxsZWQgb25jZSBwZXIgZnJhbWUgcGVyIHByb2dyYW0gKGUuZy4gZm9yIG1haW4gcmVuZGVyIHBhc3MsIHRoZW4gZm9yIGVhY2ggYWRkaXRpb25hbFxuICAgIC8vIHBhc3MgZm9yIGZlYXR1cmUgc2VsZWN0aW9uLCBldGMuKVxuICAgIHNldHVwUHJvZ3JhbSAoX3Byb2dyYW0pIHtcbiAgICAgICAgLy8gIFRocmVlIGNvbW1vbiBsaWdodCBwcm9wZXJ0aWVzXG4gICAgICAgIF9wcm9ncmFtLnVuaWZvcm0oJzRmdicsIGB1XyR7dGhpcy5uYW1lfS5hbWJpZW50YCwgdGhpcy5hbWJpZW50KTtcbiAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnNGZ2JywgYHVfJHt0aGlzLm5hbWV9LmRpZmZ1c2VgLCB0aGlzLmRpZmZ1c2UpO1xuICAgICAgICBfcHJvZ3JhbS51bmlmb3JtKCc0ZnYnLCBgdV8ke3RoaXMubmFtZX0uc3BlY3VsYXJgLCB0aGlzLnNwZWN1bGFyKTtcbiAgICB9XG5cbn1cblxuTGlnaHQudHlwZXMgPSB7fTsgLy8gcmVmZXJlbmNlcyB0byBzdWJjbGFzc2VzIGJ5IHNob3J0IG5hbWVcbkxpZ2h0LmJsb2NrID0gJ2xpZ2h0aW5nJzsgLy8gc2hhZGVyIGJsb2NrIG5hbWVcbkxpZ2h0LmVuYWJsZWQgPSB0cnVlOyAvLyBsaWdodGluZyBjYW4gYmUgZ2xvYmFsbHkgZW5hYmxlZC9kaXNhYmxlZFxuXG5cbi8vIExpZ2h0IHN1YmNsYXNzZXNcbmNsYXNzIEFtYmllbnRMaWdodCBleHRlbmRzIExpZ2h0IHtcblxuICAgIGNvbnN0cnVjdG9yKHZpZXcsIGNvbmZpZykge1xuICAgICAgICBzdXBlcih2aWV3LCBjb25maWcpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnYW1iaWVudCc7XG4gICAgICAgIHRoaXMuc3RydWN0X25hbWUgPSAnQW1iaWVudExpZ2h0JztcbiAgICB9XG5cbiAgICAvLyBJbmplY3Qgc3RydWN0IGFuZCBjYWxjdWxhdGUgZnVuY3Rpb25cbiAgICBzdGF0aWMgaW5qZWN0KCkge1xuICAgICAgICBTaGFkZXJQcm9ncmFtLmFkZEJsb2NrKExpZ2h0LmJsb2NrLCBzaGFkZXJTb3VyY2VzWydnbC9zaGFkZXJzL2FtYmllbnRMaWdodCddKTtcbiAgICB9XG5cbiAgICBzZXR1cFByb2dyYW0gKF9wcm9ncmFtKSB7XG4gICAgICAgIF9wcm9ncmFtLnVuaWZvcm0oJzRmdicsIGB1XyR7dGhpcy5uYW1lfS5hbWJpZW50YCwgdGhpcy5hbWJpZW50KTtcbiAgICB9XG5cbn1cbkxpZ2h0LnR5cGVzWydhbWJpZW50J10gPSBBbWJpZW50TGlnaHQ7XG5cbmNsYXNzIERpcmVjdGlvbmFsTGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cbiAgICBjb25zdHJ1Y3Rvcih2aWV3LCBjb25maWcpIHtcbiAgICAgICAgc3VwZXIodmlldywgY29uZmlnKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2RpcmVjdGlvbmFsJztcbiAgICAgICAgdGhpcy5zdHJ1Y3RfbmFtZSA9ICdEaXJlY3Rpb25hbExpZ2h0JztcblxuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IChjb25maWcuZGlyZWN0aW9uIHx8IFswLjIsIDAuNywgLTAuNV0pLm1hcChwYXJzZUZsb2F0KTsgLy8gW3gsIHksIHpdXG4gICAgfVxuXG4gICAgLy8gSW5qZWN0IHN0cnVjdCBhbmQgY2FsY3VsYXRlIGZ1bmN0aW9uXG4gICAgc3RhdGljIGluamVjdCgpIHtcbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5hZGRCbG9jayhMaWdodC5ibG9jaywgc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9kaXJlY3Rpb25hbExpZ2h0J10pO1xuICAgIH1cblxuICAgIHNldHVwUHJvZ3JhbSAoX3Byb2dyYW0pIHtcbiAgICAgICAgc3VwZXIuc2V0dXBQcm9ncmFtKF9wcm9ncmFtKTtcbiAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnM2Z2JywgYHVfJHt0aGlzLm5hbWV9LmRpcmVjdGlvbmAsIHRoaXMuZGlyZWN0aW9uKTtcbiAgICB9XG5cbn1cbkxpZ2h0LnR5cGVzWydkaXJlY3Rpb25hbCddID0gRGlyZWN0aW9uYWxMaWdodDtcblxuXG5jbGFzcyBQb2ludExpZ2h0IGV4dGVuZHMgTGlnaHQge1xuXG4gICAgY29uc3RydWN0b3IgKHZpZXcsIGNvbmZpZykge1xuICAgICAgICBzdXBlcih2aWV3LCBjb25maWcpO1xuICAgICAgICB0aGlzLnR5cGUgPSAncG9pbnQnO1xuICAgICAgICB0aGlzLnN0cnVjdF9uYW1lID0gJ1BvaW50TGlnaHQnO1xuXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBjb25maWcucG9zaXRpb24gfHwgWzAsIDAsICcxMDBweCddO1xuICAgICAgICB0aGlzLnBvc2l0aW9uX2V5ZSA9IFtdOyAvLyBwb3NpdGlvbiBpbiBleWVzcGFjZVxuICAgICAgICB0aGlzLm9yaWdpbiA9IGNvbmZpZy5vcmlnaW4gfHwgJ2dyb3VuZCc7XG4gICAgICAgIHRoaXMuYXR0ZW51YXRpb24gPSAhaXNOYU4ocGFyc2VGbG9hdChjb25maWcuYXR0ZW51YXRpb24pKSA/IHBhcnNlRmxvYXQoY29uZmlnLmF0dGVudWF0aW9uKSA6IDA7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5yYWRpdXMpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZy5yYWRpdXMpICYmIGNvbmZpZy5yYWRpdXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSBjb25maWcucmFkaXVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSBbbnVsbCwgY29uZmlnLnJhZGl1c107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJhZGl1cyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbmplY3Qgc3RydWN0IGFuZCBjYWxjdWxhdGUgZnVuY3Rpb25cbiAgICBzdGF0aWMgaW5qZWN0ICgpIHtcbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5hZGRCbG9jayhMaWdodC5ibG9jaywgc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9wb2ludExpZ2h0J10pO1xuICAgIH1cblxuICAgIC8vIEluamVjdCBpc250YW5jZS1zcGVjaWZpYyBzZXR0aW5nc1xuICAgIGluamVjdCgpIHtcbiAgICAgICAgc3VwZXIuaW5qZWN0KCk7XG5cbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5kZWZpbmVzWydUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fRVhQT05FTlQnXSA9ICh0aGlzLmF0dGVudWF0aW9uICE9PSAwKTtcbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5kZWZpbmVzWydUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fSU5ORVJfUkFESVVTJ10gPSAodGhpcy5yYWRpdXMgIT0gbnVsbCAmJiB0aGlzLnJhZGl1c1swXSAhPSBudWxsKTtcbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5kZWZpbmVzWydUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fT1VURVJfUkFESVVTJ10gPSAodGhpcy5yYWRpdXMgIT0gbnVsbCk7XG4gICAgfVxuXG4gICAgdXBkYXRlICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVFeWVQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIHVwZGF0ZUV5ZVBvc2l0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMub3JpZ2luID09PSAnd29ybGQnKSB7XG4gICAgICAgICAgICAvLyBGb3Igd29ybGQgb3JpZ2luLCBmb3JtYXQgaXM6IFtsb25naXR1ZGUsIGxhdGl0dWRlLCBtZXRlcnMgKGRlZmF1bHQpIG9yIHBpeGVscyB3L3B4IHVuaXRzXVxuXG4gICAgICAgICAgICAvLyBNb3ZlIGxpZ2h0J3Mgd29ybGQgcG9zaXRpb24gaW50byBjYW1lcmEgc3BhY2VcbiAgICAgICAgICAgIGxldCBbeCwgeV0gPSBHZW8ubGF0TG5nVG9NZXRlcnModGhpcy5wb3NpdGlvbik7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uX2V5ZVswXSA9IHggLSB0aGlzLnZpZXcuY2FtZXJhLnBvc2l0aW9uX21ldGVyc1swXTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25fZXllWzFdID0geSAtIHRoaXMudmlldy5jYW1lcmEucG9zaXRpb25fbWV0ZXJzWzFdO1xuXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uX2V5ZVsyXSA9IFN0eWxlUGFyc2VyLmNvbnZlcnRVbml0cyh0aGlzLnBvc2l0aW9uWzJdLFxuICAgICAgICAgICAgICAgIHsgem9vbTogdGhpcy52aWV3Lnpvb20sIG1ldGVyc19wZXJfcGl4ZWw6IEdlby5tZXRlcnNQZXJQaXhlbCh0aGlzLnZpZXcuem9vbSkgfSk7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uX2V5ZVsyXSA9IHRoaXMucG9zaXRpb25fZXllWzJdIC0gdGhpcy52aWV3LmNhbWVyYS5wb3NpdGlvbl9tZXRlcnNbMl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3JpZ2luID09PSAnZ3JvdW5kJyB8fCB0aGlzLm9yaWdpbiA9PT0gJ2NhbWVyYScpIHtcbiAgICAgICAgICAgIC8vIEZvciBjYW1lcmEgb3IgZ3JvdW5kIG9yaWdpbiwgZm9ybWF0IGlzOiBbeCwgeSwgel0gaW4gbWV0ZXJzIChkZWZhdWx0KSBvciBwaXhlbHMgdy9weCB1bml0c1xuXG4gICAgICAgICAgICAvLyBMaWdodCBpcyBpbiBjYW1lcmEgc3BhY2UgYnkgZGVmYXVsdFxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbl9leWUgPSBTdHlsZVBhcnNlci5jb252ZXJ0VW5pdHModGhpcy5wb3NpdGlvbixcbiAgICAgICAgICAgICAgICB7IHpvb206IHRoaXMudmlldy56b29tLCBtZXRlcnNfcGVyX3BpeGVsOiBHZW8ubWV0ZXJzUGVyUGl4ZWwodGhpcy52aWV3Lnpvb20pIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcmlnaW4gPT09ICdncm91bmQnKSB7XG4gICAgICAgICAgICAgICAgLy8gTGVhdmUgbGlnaHQncyB4eSBpbiBjYW1lcmEgc3BhY2UsIGJ1dCB6IG5lZWRzIHRvIGJlIG1vdmVkIHJlbGF0aXZlIHRvIGdyb3VuZCBwbGFuZVxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb25fZXllWzJdID0gdGhpcy5wb3NpdGlvbl9leWVbMl0gLSB0aGlzLnZpZXcuY2FtZXJhLnBvc2l0aW9uX21ldGVyc1syXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldHVwUHJvZ3JhbSAoX3Byb2dyYW0pIHtcbiAgICAgICAgc3VwZXIuc2V0dXBQcm9ncmFtKF9wcm9ncmFtKTtcblxuICAgICAgICBfcHJvZ3JhbS51bmlmb3JtKCc0ZicsIGB1XyR7dGhpcy5uYW1lfS5wb3NpdGlvbmAsXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uX2V5ZVswXSwgdGhpcy5wb3NpdGlvbl9leWVbMV0sIHRoaXMucG9zaXRpb25fZXllWzJdLCAxKTtcblxuICAgICAgICBpZihTaGFkZXJQcm9ncmFtLmRlZmluZXNbJ1RBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9FWFBPTkVOVCddKSB7XG4gICAgICAgICAgICBfcHJvZ3JhbS51bmlmb3JtKCcxZicsIGB1XyR7dGhpcy5uYW1lfS5hdHRlbnVhdGlvbkV4cG9uZW50YCwgdGhpcy5hdHRlbnVhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZihTaGFkZXJQcm9ncmFtLmRlZmluZXNbJ1RBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9JTk5FUl9SQURJVVMnXSkge1xuICAgICAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnMWYnLCBgdV8ke3RoaXMubmFtZX0uaW5uZXJSYWRpdXNgLFxuICAgICAgICAgICAgICAgIFN0eWxlUGFyc2VyLmNvbnZlcnRVbml0cyh0aGlzLnJhZGl1c1swXSxcbiAgICAgICAgICAgICAgICAgICAgeyB6b29tOiB0aGlzLnZpZXcuem9vbSwgbWV0ZXJzX3Blcl9waXhlbDogR2VvLm1ldGVyc1BlclBpeGVsKHRoaXMudmlldy56b29tKSB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihTaGFkZXJQcm9ncmFtLmRlZmluZXNbJ1RBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9PVVRFUl9SQURJVVMnXSkge1xuICAgICAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnMWYnLCBgdV8ke3RoaXMubmFtZX0ub3V0ZXJSYWRpdXNgLFxuICAgICAgICAgICAgICAgIFN0eWxlUGFyc2VyLmNvbnZlcnRVbml0cyh0aGlzLnJhZGl1c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgeyB6b29tOiB0aGlzLnZpZXcuem9vbSwgbWV0ZXJzX3Blcl9waXhlbDogR2VvLm1ldGVyc1BlclBpeGVsKHRoaXMudmlldy56b29tKSB9KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5MaWdodC50eXBlc1sncG9pbnQnXSA9IFBvaW50TGlnaHQ7XG5cblxuY2xhc3MgU3BvdExpZ2h0IGV4dGVuZHMgUG9pbnRMaWdodCB7XG5cbiAgICBjb25zdHJ1Y3RvciAodmlldywgY29uZmlnKSB7XG4gICAgICAgIHN1cGVyKHZpZXcsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdzcG90bGlnaHQnO1xuICAgICAgICB0aGlzLnN0cnVjdF9uYW1lID0gJ1Nwb3RMaWdodCc7XG5cbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSAoY29uZmlnLmRpcmVjdGlvbiB8fCBbMCwgMCwgLTFdKS5tYXAocGFyc2VGbG9hdCk7IC8vIFt4LCB5LCB6XVxuICAgICAgICB0aGlzLmV4cG9uZW50ID0gY29uZmlnLmV4cG9uZW50ID8gcGFyc2VGbG9hdChjb25maWcuZXhwb25lbnQpIDogMC4yO1xuICAgICAgICB0aGlzLmFuZ2xlID0gY29uZmlnLmFuZ2xlID8gcGFyc2VGbG9hdChjb25maWcuYW5nbGUpIDogMjA7XG4gICAgfVxuXG4gICAgLy8gSW5qZWN0IHN0cnVjdCBhbmQgY2FsY3VsYXRlIGZ1bmN0aW9uXG4gICAgc3RhdGljIGluamVjdCAoKSB7XG4gICAgICAgIFNoYWRlclByb2dyYW0uYWRkQmxvY2soTGlnaHQuYmxvY2ssIHNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvc3BvdExpZ2h0J10pO1xuICAgIH1cblxuICAgIHNldHVwUHJvZ3JhbSAoX3Byb2dyYW0pIHtcbiAgICAgICAgc3VwZXIuc2V0dXBQcm9ncmFtKF9wcm9ncmFtKTtcblxuICAgICAgICBfcHJvZ3JhbS51bmlmb3JtKCczZnYnLCBgdV8ke3RoaXMubmFtZX0uZGlyZWN0aW9uYCwgdGhpcy5kaXJlY3Rpb24pO1xuICAgICAgICBfcHJvZ3JhbS51bmlmb3JtKCcxZicsIGB1XyR7dGhpcy5uYW1lfS5zcG90Q29zQ3V0b2ZmYCwgTWF0aC5jb3ModGhpcy5hbmdsZSAqIDMuMTQxNTkgLyAxODApKTtcbiAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnMWYnLCBgdV8ke3RoaXMubmFtZX0uc3BvdEV4cG9uZW50YCwgdGhpcy5leHBvbmVudCk7XG4gICAgfVxuXG59XG5MaWdodC50eXBlc1snc3BvdGxpZ2h0J10gPSBTcG90TGlnaHQ7XG4iLCJpbXBvcnQgc2hhZGVyU291cmNlcyBmcm9tICcuL2dsL3NoYWRlcl9zb3VyY2VzJzsgLy8gYnVpbHQtaW4gc2hhZGVyc1xuaW1wb3J0IEdMU0wgZnJvbSAnLi9nbC9nbHNsJztcbmltcG9ydCB7U3R5bGVQYXJzZXJ9IGZyb20gJy4vc3R5bGVzL3N0eWxlX3BhcnNlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hdGVyaWFsIHtcbiAgICBjb25zdHJ1Y3RvciAoY29uZmlnKSB7XG5cbiAgICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuXG4gICAgICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYWxsIGhhdmUgdGhlIHNhbWUgZGVmYXVsdHMsIHNvIHRoZXkgY2FuIGJlIHNldCBpbiBidWxrXG4gICAgICAgIGZvciAobGV0IHByb3Agb2YgWydlbWlzc2lvbicsICdhbWJpZW50JywgJ2RpZmZ1c2UnLCAnc3BlY3VsYXInXSkge1xuICAgICAgICAgICAgaWYgKGNvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZ1twcm9wXS50ZXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbcHJvcF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlOiBjb25maWdbcHJvcF0udGV4dHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmc6IGNvbmZpZ1twcm9wXS5tYXBwaW5nIHx8ICdzcGhlcmVtYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU6IEdMU0wuZXhwYW5kVmVjMyhjb25maWdbcHJvcF0uc2NhbGUgIT0gbnVsbCA/IGNvbmZpZ1twcm9wXS5zY2FsZSA6IDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50OiBHTFNMLmV4cGFuZFZlYzQoY29uZmlnW3Byb3BdLmFtb3VudCAhPSBudWxsID8gY29uZmlnW3Byb3BdLmFtb3VudCA6IDEpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdbcHJvcF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbcHJvcF0gPSB7IGFtb3VudDogR0xTTC5leHBhbmRWZWM0KGNvbmZpZ1twcm9wXSkgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ1twcm9wXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1twcm9wXSA9IHsgYW1vdW50OiBTdHlsZVBhcnNlci5wYXJzZUNvbG9yKGNvbmZpZ1twcm9wXSkgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXh0cmEgc3BlY3VsYXIgcHJvcHNcbiAgICAgICAgaWYgKHRoaXMuc3BlY3VsYXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3BlY3VsYXIuc2hpbmluZXNzID0gY29uZmlnLnNoaW5pbmVzcyA/IHBhcnNlRmxvYXQoY29uZmlnLnNoaW5pbmVzcykgOiAwLjI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3JtYWwgbWFwcGluZ1xuICAgICAgICBpZiAoY29uZmlnLm5vcm1hbCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm5vcm1hbCA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlOiBjb25maWcubm9ybWFsLnRleHR1cmUsXG4gICAgICAgICAgICAgICAgbWFwcGluZzogY29uZmlnLm5vcm1hbC5tYXBwaW5nIHx8ICd0cmlwbGFuYXInLFxuICAgICAgICAgICAgICAgIHNjYWxlOiBHTFNMLmV4cGFuZFZlYzMoY29uZmlnLm5vcm1hbC5zY2FsZSAhPSBudWxsID8gY29uZmlnLm5vcm1hbC5zY2FsZSA6IDEpLFxuICAgICAgICAgICAgICAgIGFtb3VudDogY29uZmlnLm5vcm1hbC5hbW91bnQgIT0gbnVsbCA/IGNvbmZpZy5ub3JtYWwuYW1vdW50IDogMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIERldGVybWluZSBpZiBhIG1hdGVyaWFsIGNvbmZpZyBibG9jayBoYXMgc3VmZmljaWVudCBwcm9wZXJ0aWVzIHRvIGNyZWF0ZSBhIG1hdGVyaWFsXG4gICAgc3RhdGljIGlzVmFsaWQgKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuZW1pc3Npb24gPT0gbnVsbCAmJlxuICAgICAgICAgICAgY29uZmlnLmFtYmllbnQgPT0gbnVsbCAmJlxuICAgICAgICAgICAgY29uZmlnLmRpZmZ1c2UgPT0gbnVsbCAmJlxuICAgICAgICAgICAgY29uZmlnLnNwZWN1bGFyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGluamVjdCAoc3R5bGUpIHtcbiAgICAgICAgLy8gRm9yIGVhY2ggcHJvcGVydHksIHNldHMgZGVmaW5lcyB0byBjb25maWd1cmUgdGV4dHVyZSBtYXBwaW5nLCB3aXRoIGEgcGF0dGVybiBsaWtlOlxuICAgICAgICAvLyAgIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRSwgVEFOR1JBTV9NQVRFUklBTF9ESUZGVVNFX1RFWFRVUkUsIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRV9URVhUVVJFX1NQSEVSRU1BUFxuICAgICAgICAvLyBBbHNvIHNldHMgZmxhZ3MgdG8ga2VlcCB0cmFjayBvZiBlYWNoIHVuaXF1ZSBtYXBwaW5nIHR5cGUgYmVpbmcgdXNlZCwgZS5nLjpcbiAgICAgICAgLy8gICBUQU5HUkFNX01BVEVSSUFMX1RFWFRVUkVfU1BIRVJFTUFQXG4gICAgICAgIC8vIEVuYWJsZXMgdGV4dHVyZSBjb29yZGluYXRlcyBpZiBuZWVkZWQgYW5kIG5vdCBhbHJlYWR5IG9uXG4gICAgICAgIGZvciAobGV0IHByb3Agb2YgWydlbWlzc2lvbicsICdhbWJpZW50JywgJ2RpZmZ1c2UnLCAnc3BlY3VsYXInXSkge1xuICAgICAgICAgICAgbGV0IGRlZiA9IGBUQU5HUkFNX01BVEVSSUFMXyR7cHJvcC50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICAgICAgICBsZXQgdGV4ZGVmID0gZGVmICsgJ19URVhUVVJFJztcbiAgICAgICAgICAgIHN0eWxlLmRlZmluZXNbZGVmXSA9ICh0aGlzW3Byb3BdICE9IG51bGwpO1xuICAgICAgICAgICAgaWYgKHRoaXNbcHJvcF0gJiYgdGhpc1twcm9wXS50ZXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZGVmaW5lc1t0ZXhkZWZdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzdHlsZS5kZWZpbmVzW3RleGRlZiArICdfJyArIHRoaXNbcHJvcF0ubWFwcGluZy50b1VwcGVyQ2FzZSgpXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgc3R5bGUuZGVmaW5lc1tgVEFOR1JBTV9NQVRFUklBTF9URVhUVVJFXyR7dGhpc1twcm9wXS5tYXBwaW5nLnRvVXBwZXJDYXNlKCl9YF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHN0eWxlLnRleGNvb3JkcyA9IHN0eWxlLnRleGNvb3JkcyB8fCAodGhpc1twcm9wXS5tYXBwaW5nID09PSAndXYnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vcm1hbCBtYXBwaW5nXG4gICAgICAgIC8vIEFzIGFub3ZlLCBzZXRzIGZsYWdzIHRvIGtlZXAgdHJhY2sgb2YgZWFjaCB1bmlxdWUgbWFwcGluZyB0eXBlIGJlaW5nIHVzZWQsIGUuZy46XG4gICAgICAgIC8vICAgVEFOR1JBTV9NQVRFUklBTF9URVhUVVJFX1NQSEVSRU1BUFxuICAgICAgICBpZiAodGhpcy5ub3JtYWwgJiYgdGhpcy5ub3JtYWwudGV4dHVyZSkge1xuICAgICAgICAgICAgc3R5bGUuZGVmaW5lc1snVEFOR1JBTV9NQVRFUklBTF9OT1JNQUxfVEVYVFVSRSddID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0eWxlLmRlZmluZXNbJ1RBTkdSQU1fTUFURVJJQUxfTk9STUFMX1RFWFRVUkVfJyArIHRoaXMubm9ybWFsLm1hcHBpbmcudG9VcHBlckNhc2UoKV0gPSB0cnVlO1xuICAgICAgICAgICAgc3R5bGUuZGVmaW5lc1tgVEFOR1JBTV9NQVRFUklBTF9URVhUVVJFXyR7dGhpcy5ub3JtYWwubWFwcGluZy50b1VwcGVyQ2FzZSgpfWBdID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0eWxlLnRleGNvb3JkcyA9IHN0eWxlLnRleGNvb3JkcyB8fCAodGhpcy5ub3JtYWwubWFwcGluZyA9PT0gJ3V2Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZS5yZXBsYWNlU2hhZGVyQmxvY2soTWF0ZXJpYWwuYmxvY2ssIHNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvbWF0ZXJpYWwnXSwgJ01hdGVyaWFsJyk7XG4gICAgICAgIHN0eWxlLmFkZFNoYWRlckJsb2NrKCdzZXR1cCcsICdcXG5tYXRlcmlhbCA9IHVfbWF0ZXJpYWw7XFxuJywgJ01hdGVyaWFsJyk7XG4gICAgfVxuXG4gICAgc2V0dXBQcm9ncmFtIChfcHJvZ3JhbSkge1xuICAgICAgICAvLyBGb3IgZWFjaCBwcm9wZXJ0eSwgc2V0cyB1bmlmb3JtcyBpbiB0aGUgcGF0dGVybjpcbiAgICAgICAgLy8gdV9tYXRlcmlhbC5kaWZmdXNlLCB1X21hdGVyaWFsLmRpZmZ1c2VTY2FsZSB1X21hdGVyaWFsX2RpZmZ1c2VfdGV4dHVyZVxuICAgICAgICBmb3IgKGxldCBwcm9wIG9mIFsnZW1pc3Npb24nLCAnYW1iaWVudCcsICdkaWZmdXNlJywgJ3NwZWN1bGFyJ10pIHtcbiAgICAgICAgICAgIGlmICh0aGlzW3Byb3BdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbcHJvcF0udGV4dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICBfcHJvZ3JhbS5zZXRUZXh0dXJlVW5pZm9ybShgdV9tYXRlcmlhbF8ke3Byb3B9X3RleHR1cmVgLCB0aGlzW3Byb3BdLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgICAgICBfcHJvZ3JhbS51bmlmb3JtKCczZnYnLCBgdV9tYXRlcmlhbC4ke3Byb3B9U2NhbGVgLCB0aGlzW3Byb3BdLnNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnNGZ2JywgYHVfbWF0ZXJpYWwuJHtwcm9wfWAsIHRoaXNbcHJvcF0uYW1vdW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXNbcHJvcF0uYW1vdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF9wcm9ncmFtLnVuaWZvcm0oJzRmdicsIGB1X21hdGVyaWFsLiR7cHJvcH1gLCB0aGlzW3Byb3BdLmFtb3VudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXh0cmEgc3BlY3VsYXIgcHJvcHNcbiAgICAgICAgaWYgKHRoaXMuc3BlY3VsYXIpIHtcbiAgICAgICAgICAgIF9wcm9ncmFtLnVuaWZvcm0oJzFmJywgJ3VfbWF0ZXJpYWwuc2hpbmluZXNzJywgdGhpcy5zcGVjdWxhci5zaGluaW5lc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm9ybWFsIG1hcHBpbmdcbiAgICAgICAgaWYgKHRoaXMubm9ybWFsICYmIHRoaXMubm9ybWFsLnRleHR1cmUpIHtcbiAgICAgICAgICAgIF9wcm9ncmFtLnNldFRleHR1cmVVbmlmb3JtKCd1X21hdGVyaWFsX25vcm1hbF90ZXh0dXJlJywgdGhpcy5ub3JtYWwudGV4dHVyZSk7XG4gICAgICAgICAgICBfcHJvZ3JhbS51bmlmb3JtKCczZnYnLCAndV9tYXRlcmlhbC5ub3JtYWxTY2FsZScsIHRoaXMubm9ybWFsLnNjYWxlKTtcbiAgICAgICAgICAgIF9wcm9ncmFtLnVuaWZvcm0oJzFmJywgJ3VfbWF0ZXJpYWwubm9ybWFsQW1vdW50JywgdGhpcy5ub3JtYWwuYW1vdW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuTWF0ZXJpYWwuYmxvY2sgPSAnbWF0ZXJpYWwnO1xuIiwiLypqc2hpbnQgd29ya2VyOiB0cnVlKi9cblxuLy8gTW9kdWxlcyBhbmQgZGVwZW5kZW5jaWVzIHRvIGV4cG9zZSBpbiB0aGUgcHVibGljIFRhbmdyYW0gbW9kdWxlXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi91dGlscy91dGlscyc7XG5cbi8vIFRoZSBsZWFmbGV0IGxheWVyIHBsdWdpbiBpcyBjdXJyZW50bHkgdGhlIHByaW1hcnkgcHVibGljIEFQSVxuaW1wb3J0IHtsZWFmbGV0TGF5ZXJ9IGZyb20gJy4vbGVhZmxldF9sYXllcic7XG5cbi8vIFRoZSBzY2VuZSB3b3JrZXIgaXMgb25seSBhY3RpdmF0ZWQgd2hlbiBhIHdvcmtlciB0aHJlYWQgaXMgaW5zdGFudGlhdGVkLCBidXQgbXVzdCBhbHdheXMgYmUgbG9hZGVkXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi9zY2VuZSc7XG5pbXBvcnQge1NjZW5lV29ya2VyfSBmcm9tICcuL3NjZW5lX3dvcmtlcic7XG5cbi8vIEFkZGl0aW9uYWwgbW9kdWxlcyBhcmUgZXhwb3NlZCBmb3IgZGVidWdnaW5nXG5pbXBvcnQgdmVyc2lvbiBmcm9tICcuL3V0aWxzL3ZlcnNpb24nO1xuaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5pbXBvcnQgR2VvIGZyb20gJy4vZ2VvJztcbmltcG9ydCBEYXRhU291cmNlIGZyb20gJy4vc291cmNlcy9kYXRhX3NvdXJjZSc7XG5pbXBvcnQgJy4vc291cmNlcy9nZW9qc29uJztcbmltcG9ydCAnLi9zb3VyY2VzL3RvcG9qc29uJztcbmltcG9ydCAnLi9zb3VyY2VzL212dCc7XG5pbXBvcnQgJy4vc291cmNlcy9yYXN0ZXInO1xuaW1wb3J0IFRpbGVNYW5hZ2VyIGZyb20gJy4vdGlsZV9tYW5hZ2VyJztcbmltcG9ydCBHTFNMIGZyb20gJy4vZ2wvZ2xzbCc7XG5pbXBvcnQgU2hhZGVyUHJvZ3JhbSBmcm9tICcuL2dsL3NoYWRlcl9wcm9ncmFtJztcbmltcG9ydCBWZXJ0ZXhEYXRhIGZyb20gJy4vZ2wvdmVydGV4X2RhdGEnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9nbC90ZXh0dXJlJztcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuL21hdGVyaWFsJztcbmltcG9ydCBMaWdodCBmcm9tICcuL2xpZ2h0JztcbmltcG9ydCBXb3JrZXJCcm9rZXIgZnJvbSAnLi91dGlscy93b3JrZXJfYnJva2VyJztcbmltcG9ydCB7cnVsZUNhY2hlfSBmcm9tICcuL3N0eWxlcy9ydWxlJztcbmltcG9ydCB7U3R5bGVNYW5hZ2VyfSBmcm9tICcuL3N0eWxlcy9zdHlsZV9tYW5hZ2VyJztcbmltcG9ydCB7U3R5bGVQYXJzZXJ9IGZyb20gJy4vc3R5bGVzL3N0eWxlX3BhcnNlcic7XG5pbXBvcnQgQ29sbGlzaW9uIGZyb20gJy4vbGFiZWxzL2NvbGxpc2lvbic7XG5pbXBvcnQgRmVhdHVyZVNlbGVjdGlvbiBmcm9tICcuL3NlbGVjdGlvbic7XG5cbmltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuXG4vLyBNYWtlIHNvbWUgbW9kdWxlcyBhY2Nlc3NpYmxlIGZvciBkZWJ1Z2dpbmdcbnZhciBkZWJ1ZyA9IHtcbiAgICBsb2csXG4gICAgeWFtbCxcbiAgICBVdGlscyxcbiAgICBHZW8sXG4gICAgRGF0YVNvdXJjZSxcbiAgICBUaWxlTWFuYWdlcixcbiAgICBHTFNMLFxuICAgIFNoYWRlclByb2dyYW0sXG4gICAgVmVydGV4RGF0YSxcbiAgICBUZXh0dXJlLFxuICAgIE1hdGVyaWFsLFxuICAgIExpZ2h0LFxuICAgIFNjZW5lLFxuICAgIFNjZW5lV29ya2VyLFxuICAgIFdvcmtlckJyb2tlcixcbiAgICBydWxlQ2FjaGUsXG4gICAgU3R5bGVNYW5hZ2VyLFxuICAgIFN0eWxlUGFyc2VyLFxuICAgIENvbGxpc2lvbixcbiAgICBGZWF0dXJlU2VsZWN0aW9uXG59O1xuXG4vLyBXaW5kb3cgY2FuIG9ubHkgYmUgc2V0IGluIG1haW4gdGhyZWFkXG5pZiAoVXRpbHMuaXNNYWluVGhyZWFkKSB7XG5cbiAgICB3aW5kb3cuVGFuZ3JhbSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICBsZWFmbGV0TGF5ZXIsXG4gICAgICAgIGRlYnVnLFxuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLnN0cmluZ1xuICAgIH07XG5cbn1cblxuaWYgKFV0aWxzLmlzV29ya2VyVGhyZWFkKSB7XG4gICAgc2VsZi5UYW5ncmFtID0ge1xuICAgICAgICBkZWJ1ZyxcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbi5zdHJpbmdcbiAgICB9O1xufVxuXG5pZiAoVXRpbHMuaXNNYWluVGhyZWFkKSB7XG4gICAgVXRpbHMucmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGwoKTtcbn1cblxuLy8gU2V0dXAgbG9nZ2luZyB0byBwcmVmaXggd2l0aCBUYW5ncmFtIHZlcnNpb25cbnZhciBvcmlnaW5hbEZhY3RvcnkgPSBsb2cubWV0aG9kRmFjdG9yeTtcbmxvZy5tZXRob2RGYWN0b3J5ID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGxvZ0xldmVsKSB7XG4gICAgdmFyIHJhd01ldGhvZCA9IG9yaWdpbmFsRmFjdG9yeShtZXRob2ROYW1lLCBsb2dMZXZlbCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5tZXNzYWdlKSB7XG4gICAgICAgIHJhd01ldGhvZChgVGFuZ3JhbSAke3ZlcnNpb24uc3RyaW5nfTpgLCAuLi5tZXNzYWdlKTtcbiAgICB9O1xufTtcbiIsImltcG9ydCBVdGlscyBmcm9tICcuL3V0aWxzL3V0aWxzJztcbmltcG9ydCBXb3JrZXJCcm9rZXIgZnJvbSAnLi91dGlscy93b3JrZXJfYnJva2VyJztcbmltcG9ydCBzdWJzY3JpYmVNaXhpbiBmcm9tICcuL3V0aWxzL3N1YnNjcmliZSc7XG5pbXBvcnQgQ29udGV4dCBmcm9tICcuL2dsL2NvbnRleHQnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9nbC90ZXh0dXJlJztcbmltcG9ydCBWZXJ0ZXhBcnJheU9iamVjdCBmcm9tICcuL2dsL3Zhbyc7XG5pbXBvcnQge1N0eWxlfSBmcm9tICcuL3N0eWxlcy9zdHlsZSc7XG5pbXBvcnQge1N0eWxlTWFuYWdlcn0gZnJvbSAnLi9zdHlsZXMvc3R5bGVfbWFuYWdlcic7XG5pbXBvcnQge1N0eWxlUGFyc2VyfSBmcm9tICcuL3N0eWxlcy9zdHlsZV9wYXJzZXInO1xuaW1wb3J0IFNjZW5lTG9hZGVyIGZyb20gJy4vc2NlbmVfbG9hZGVyJztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5pbXBvcnQgTGlnaHQgZnJvbSAnLi9saWdodCc7XG5pbXBvcnQgVGlsZU1hbmFnZXIgZnJvbSAnLi90aWxlX21hbmFnZXInO1xuaW1wb3J0IERhdGFTb3VyY2UgZnJvbSAnLi9zb3VyY2VzL2RhdGFfc291cmNlJztcbmltcG9ydCBGZWF0dXJlU2VsZWN0aW9uIGZyb20gJy4vc2VsZWN0aW9uJztcbmltcG9ydCBSZW5kZXJTdGF0ZSBmcm9tICcuL2dsL3JlbmRlcl9zdGF0ZSc7XG5cbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG5pbXBvcnQge1BvbHlnb25zfSBmcm9tICcuL3N0eWxlcy9wb2x5Z29ucy9wb2x5Z29ucyc7XG5pbXBvcnQge0xpbmVzfSBmcm9tICcuL3N0eWxlcy9saW5lcy9saW5lcyc7XG5pbXBvcnQge1BvaW50c30gZnJvbSAnLi9zdHlsZXMvcG9pbnRzL3BvaW50cyc7XG5pbXBvcnQge1RleHRTdHlsZX0gZnJvbSAnLi9zdHlsZXMvdGV4dC90ZXh0JztcbmltcG9ydCB7UmFzdGVyU3R5bGV9IGZyb20gJy4vc3R5bGVzL3Jhc3Rlci9yYXN0ZXInO1xuXG4vLyBBZGQgYnVpbHQtaW4gcmVuZGVyaW5nIHN0eWxlc1xuU3R5bGVNYW5hZ2VyLnJlZ2lzdGVyKFBvbHlnb25zKTtcblN0eWxlTWFuYWdlci5yZWdpc3RlcihMaW5lcyk7XG5TdHlsZU1hbmFnZXIucmVnaXN0ZXIoUG9pbnRzKTtcblN0eWxlTWFuYWdlci5yZWdpc3RlcihUZXh0U3R5bGUpO1xuU3R5bGVNYW5hZ2VyLnJlZ2lzdGVyKFJhc3RlclN0eWxlKTtcblxuLy8gTG9hZCBzY2VuZSBkZWZpbml0aW9uOiBwYXNzIGFuIG9iamVjdCBkaXJlY3RseSwgb3IgYSBVUkwgYXMgc3RyaW5nIHRvIGxvYWQgcmVtb3RlbHlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjZW5lIHtcblxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZ19zb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHN1YnNjcmliZU1peGluKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXppbmcgPSBudWxsOyAvLyB3aWxsIGJlIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gc2NlbmUgaXMgbG9hZGVkXG4gICAgICAgIHRoaXMuc291cmNlcyA9IHt9O1xuXG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBWaWV3KHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnRpbGVfbWFuYWdlciA9IFRpbGVNYW5hZ2VyO1xuICAgICAgICB0aGlzLnRpbGVfbWFuYWdlci5pbml0KHsgc2NlbmU6IHRoaXMsIHZpZXc6IHRoaXMudmlldyB9KTtcbiAgICAgICAgdGhpcy5udW1fd29ya2VycyA9IG9wdGlvbnMubnVtV29ya2VycyB8fCAyO1xuICAgICAgICB0aGlzLmFsbG93X2Nyb3NzX2RvbWFpbl93b3JrZXJzID0gKG9wdGlvbnMuYWxsb3dDcm9zc0RvbWFpbldvcmtlcnMgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlKTtcbiAgICAgICAgdGhpcy53b3JrZXJfdXJsID0gb3B0aW9ucy53b3JrZXJVcmw7XG4gICAgICAgIGlmIChvcHRpb25zLmRpc2FibGVWZXJ0ZXhBcnJheU9iamVjdHMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIFZlcnRleEFycmF5T2JqZWN0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIFV0aWxzLnVzZV9oaWdoX2RlbnNpdHlfZGlzcGxheSA9IG9wdGlvbnMuaGlnaERlbnNpdHlEaXNwbGF5ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmhpZ2hEZW5zaXR5RGlzcGxheSA6IHRydWU7XG4gICAgICAgIFV0aWxzLnVwZGF0ZURldmljZVBpeGVsUmF0aW8oKTtcblxuICAgICAgICB0aGlzLmNvbmZpZyA9IG51bGw7XG4gICAgICAgIHRoaXMuY29uZmlnX3NvdXJjZSA9IGNvbmZpZ19zb3VyY2U7XG4gICAgICAgIHRoaXMuY29uZmlnX3NlcmlhbGl6ZWQgPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RfdmFsaWRfY29uZmlnX3NvdXJjZSA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5zdHlsZXMgPSBudWxsO1xuICAgICAgICB0aGlzLmFjdGl2ZV9zdHlsZXMgPSB7fTtcblxuICAgICAgICB0aGlzLmJ1aWxkaW5nID0gbnVsbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFja3MgY3VycmVudCBzY2VuZSBidWlsZGluZyBzdGF0ZSAodGlsZXMgYmVpbmcgYnVpbHQsIGV0Yy4pXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVlc3QgYSByZWRyYXdcbiAgICAgICAgdGhpcy5hbmltYXRlZCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWVzdCByZWRyYXcgZXZlcnkgZnJhbWVcbiAgICAgICAgdGhpcy5wcmVVcGRhdGUgPSBvcHRpb25zLnByZVVwZGF0ZTsgICAgICAgICAgICAgLy8gb3B0aW9uYWwgcHJlLXJlbmRlciBsb29wIGhvb2tcbiAgICAgICAgdGhpcy5wb3N0VXBkYXRlID0gb3B0aW9ucy5wb3N0VXBkYXRlOyAgICAgICAgICAgLy8gb3B0aW9uYWwgcG9zdC1yZW5kZXIgbG9vcCBob29rXG4gICAgICAgIHRoaXMucmVuZGVyX2xvb3AgPSAhb3B0aW9ucy5kaXNhYmxlUmVuZGVyTG9vcDsgIC8vIGRpc2FibGUgcmVuZGVyIGxvb3AgLSBhcHAgd2lsbCBoYXZlIHRvIG1hbnVhbGx5IGNhbGwgU2NlbmUucmVuZGVyKCkgcGVyIGZyYW1lXG4gICAgICAgIHRoaXMucmVuZGVyX2xvb3BfYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVuZGVyX2xvb3Bfc3RvcCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlbmRlcl9jb3VudCA9IDA7XG4gICAgICAgIHRoaXMubGFzdF9yZW5kZXJfY291bnQgPSAwO1xuICAgICAgICB0aGlzLnJlbmRlcl9jb3VudF9jaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZnJhbWUgPSAwO1xuICAgICAgICB0aGlzLnF1ZXVlX3NjcmVlbnNob3QgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMucmVzZXRUaW1lKCk7XG5cbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcblxuICAgICAgICB0aGlzLmxpZ2h0cyA9IG51bGw7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IG51bGw7XG5cbiAgICAgICAgLy8gTGlzdGVuIHRvIHJlbGF0ZWQgb2JqZWN0c1xuICAgICAgICB0aGlzLmxpc3RlbmVycyA9IHtcbiAgICAgICAgICAgIHZpZXc6IHtcbiAgICAgICAgICAgICAgICBtb3ZlOiAoKSA9PiB0aGlzLnRyaWdnZXIoJ21vdmUnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZpZXcuc3Vic2NyaWJlKHRoaXMubGlzdGVuZXJzLnZpZXcpO1xuXG4gICAgICAgIHRoaXMudXBkYXRpbmcgPSAwO1xuICAgICAgICB0aGlzLmdlbmVyYXRpb24gPSAwOyAvLyBhbiBpZCB0aGF0IGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgc2NlbmUgY29uZmlnIGlzIGludmFsaWRhdGVkXG4gICAgICAgIHRoaXMubGFzdF9jb21wbGV0ZV9nZW5lcmF0aW9uID0gMDsgLy8gbGFzdCBnZW5lcmF0aW9uIGlkIHdpdGggYSBjb21wbGV0ZSB2aWV3XG4gICAgICAgIHRoaXMuc2V0dXBEZWJ1ZygpO1xuXG4gICAgICAgIHRoaXMubG9nTGV2ZWwgPSBvcHRpb25zLmxvZ0xldmVsIHx8ICd3YXJuJztcbiAgICAgICAgbG9nLnNldExldmVsKHRoaXMubG9nTGV2ZWwpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGUgKGNvbmZpZywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgU2NlbmUoY29uZmlnLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIChvciByZWxvYWQpIHNjZW5lIGNvbmZpZ1xuICAgIC8vIE9wdGlvbmFsbHkgc3BlY2lmeSBuZXcgc2NlbmUgZmlsZSBVUkxcbiAgICBsb2FkKGNvbmZpZ19zb3VyY2UgPSBudWxsLCBjb25maWdfcGF0aCA9IG51bGwpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXppbmc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0aW5nKys7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgICAgICAvLyBMb2FkIHNjZW5lIGRlZmluaXRpb24gKHNvdXJjZXMsIHN0eWxlcywgZXRjLiksIHRoZW4gY3JlYXRlIHN0eWxlcyAmIHdvcmtlcnNcbiAgICAgICAgdGhpcy5pbml0aWFsaXppbmcgPSB0aGlzLmxvYWRTY2VuZShjb25maWdfc291cmNlLCBjb25maWdfcGF0aClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuY3JlYXRlV29ya2VycygpKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQ2FudmFzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldEZlYXR1cmVTZWxlY3Rpb24oKTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnMudGV4dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy50ZXh0dXJlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlOiAoKSA9PiB0aGlzLmRpcnR5ID0gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmc6IChkYXRhKSA9PiB0aGlzLnRyaWdnZXIoJ3dhcm5pbmcnLCBPYmplY3QuYXNzaWduKHsgdHlwZTogJ3RleHR1cmVzJyB9LCBkYXRhKSlcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgVGV4dHVyZS5zdWJzY3JpYmUodGhpcy5saXN0ZW5lcnMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gT25seSByZXRhaW4gdmlzaWJsZSB0aWxlcyBmb3IgcmVidWlsZGluZ1xuICAgICAgICAgICAgICAgIHRoaXMudGlsZV9tYW5hZ2VyLnBydW5lVG9WaXNpYmxlVGlsZXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVDb25maWcoeyByZWJ1aWxkOiB0cnVlIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGluZy0tO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6aW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RfdmFsaWRfY29uZmlnX3NvdXJjZSA9IHRoaXMuY29uZmlnX3NvdXJjZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RfdmFsaWRfY29uZmlnX3BhdGggPSB0aGlzLmNvbmZpZ19wYXRoO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVuZGVyX2xvb3AgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBSZW5kZXJMb29wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdFJlZHJhdygpO1xuICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemluZyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnVwZGF0aW5nID0gMDtcblxuICAgICAgICAgICAgLy8gUmVwb3J0IGFuZCByZXZlcnQgdG8gbGFzdCB2YWxpZCBjb25maWcgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgICBsZXQgdHlwZSwgbWVzc2FnZTtcbiAgICAgICAgICAgIGlmIChlcnJvci5uYW1lID09PSAnWUFNTEV4Y2VwdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gJ3lhbWwnO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnRXJyb3IgcGFyc2luZyBzY2VuZSBZQU1MJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IG1vcmUgZXJyb3IgdHlwZXNcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gJ0Vycm9yIGluaXRpYWxpemluZyBzY2VuZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgeyB0eXBlLCBtZXNzYWdlLCBlcnJvciwgdXJsOiB0aGlzLmNvbmZpZ19zb3VyY2UgfSk7XG5cbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgU2NlbmUubG9hZCgpIGZhaWxlZCB0byBsb2FkICR7dGhpcy5jb25maWdfc291cmNlfTogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXN0X3ZhbGlkX2NvbmZpZ19zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBsb2cud2FybihtZXNzYWdlLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oYFNjZW5lLmxvYWQoKSByZXZlcnRpbmcgdG8gbGFzdCB2YWxpZCBjb25maWd1cmF0aW9uYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZCh0aGlzLmxhc3RfdmFsaWRfY29uZmlnX3NvdXJjZSwgdGhpcy5sYXN0X3ZhbGlkX2NvbmZpZ19wYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZy5lcnJvcihtZXNzYWdlLCBlcnJvcik7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6aW5nO1xuICAgIH1cblxuICAgIC8vIEZvciBBUEkgY29tcGF0aWJpbGl0eVxuICAgIHJlbG9hZChjb25maWdfc291cmNlID0gbnVsbCwgY29uZmlnX3BhdGggPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWQoY29uZmlnX3NvdXJjZSwgY29uZmlnX3BhdGgpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZW5kZXJfbG9vcF9zdG9wID0gdHJ1ZTsgLy8gc2NoZWR1bGUgcmVuZGVyIGxvb3AgdG8gc3RvcFxuXG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVBbGwoKTsgLy8gY2xlYXIgYWxsIGV2ZW50IGxpc3RlbmVyc1xuXG4gICAgICAgIHRoaXMudmlldy51bnN1YnNjcmliZSh0aGlzLmxpc3RlbmVycy52aWV3KTtcbiAgICAgICAgVGV4dHVyZS51bnN1YnNjcmliZSh0aGlzLmxpc3RlbmVycy50ZXh0dXJlKTtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLmNhbnZhcyAmJiB0aGlzLmNhbnZhcy5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY2FudmFzKTtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5nbCkge1xuICAgICAgICAgICAgVGV4dHVyZS5kZXN0cm95KHRoaXMuZ2wpO1xuICAgICAgICAgICAgU3R5bGVNYW5hZ2VyLmRlc3Ryb3kodGhpcy5nbCk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlcyA9IHt9O1xuXG4gICAgICAgICAgICB0aGlzLmdsID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc291cmNlcyA9IHt9O1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMud29ya2VycykpIHtcbiAgICAgICAgICAgIHRoaXMud29ya2Vycy5mb3JFYWNoKCh3b3JrZXIpID0+IHtcbiAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMud29ya2VycyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRpbGVfbWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ2FudmFzKCkge1xuICAgICAgICBpZiAodGhpcy5jYW52YXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5jb250YWluZXIgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS50b3AgPSAwO1xuICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5sZWZ0ID0gMDtcblxuICAgICAgICAvLyBGb3JjZSB0YW5ncmFtIGNhbnZhcyB1bmRlcm5lYXRoIGFsbCBsZWFmbGV0IGxheWVycywgYW5kIHNldCBiYWNrZ3JvdW5kIHRvIHRyYW5zcGFyZW50XG4gICAgICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5nbCA9IENvbnRleHQuZ2V0Q29udGV4dCh0aGlzLmNhbnZhcywge1xuICAgICAgICAgICAgICAgIGFscGhhOiB0cnVlLCBwcmVtdWx0aXBsaWVkQWxwaGE6IHRydWUsIC8vIFRPRE86IHZhcnkgdy9zY2VuZSBhbHBoYVxuICAgICAgICAgICAgICAgIGRldmljZV9waXhlbF9yYXRpbzogVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJDb3VsZG4ndCBjcmVhdGUgV2ViR0wgY29udGV4dC4gXCIgK1xuICAgICAgICAgICAgICAgIFwiWW91ciBicm93c2VyIG1heSBub3Qgc3VwcG9ydCBXZWJHTCwgb3IgaXQncyB0dXJuZWQgb2ZmPyBcIiArXG4gICAgICAgICAgICAgICAgXCJWaXNpdCBodHRwOi8vd2ViZ2xyZXBvcnQuY29tLyBmb3IgbW9yZSBpbmZvLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXNpemVNYXAodGhpcy5jb250YWluZXIuY2xpZW50V2lkdGgsIHRoaXMuY29udGFpbmVyLmNsaWVudEhlaWdodCk7XG4gICAgICAgIFZlcnRleEFycmF5T2JqZWN0LmluaXQodGhpcy5nbCk7XG4gICAgICAgIFJlbmRlclN0YXRlLmluaXRpYWxpemUodGhpcy5nbCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBVUkwgdG8gbG9hZCB0aGUgd2ViIHdvcmtlciBmcm9tXG4gICAgZ2V0V29ya2VyVXJsKCkge1xuICAgICAgICBsZXQgd29ya2VyX3VybCA9IHRoaXMud29ya2VyX3VybCB8fCBVdGlscy5maW5kQ3VycmVudFVSTCgndGFuZ3JhbS5kZWJ1Zy5qcycsICd0YW5ncmFtLm1pbi5qcycpO1xuXG4gICAgICAgIGlmICghd29ya2VyX3VybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgbG9hZCB3b3JrZXIgYmVjYXVzZSBjb3VsZG4ndCBmaW5kIGJhc2UgVVJMIHRoYXQgbGlicmFyeSB3YXMgbG9hZGVkIGZyb21cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hbGxvd19jcm9zc19kb21haW5fd29ya2Vycykge1xuICAgICAgICAgICAgbGV0IGJvZHkgPSBgaW1wb3J0U2NyaXB0cygnJHt3b3JrZXJfdXJsfScpO2A7XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtib2R5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3b3JrZXJfdXJsO1xuICAgIH1cblxuICAgIC8vIFdlYiB3b3JrZXJzIGhhbmRsZSBoZWF2eSBkdXR5IHRpbGUgY29uc3RydWN0aW9uOiBuZXR3b3JraW5nLCBnZW9tZXRyeSBwcm9jZXNzaW5nLCBldGMuXG4gICAgY3JlYXRlV29ya2VycygpIHtcbiAgICAgICAgaWYgKCF0aGlzLndvcmtlcnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VXb3JrZXJzKHRoaXMuZ2V0V29ya2VyVXJsKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YW50aWF0ZSB3b3JrZXJzIGZyb20gVVJMLCBpbml0IGV2ZW50IGhhbmRsZXJzXG4gICAgbWFrZVdvcmtlcnModXJsKSB7XG4gICAgICAgIHZhciBxdWV1ZSA9IFtdO1xuXG4gICAgICAgIHRoaXMud29ya2VycyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpZD0wOyBpZCA8IHRoaXMubnVtX3dvcmtlcnM7IGlkKyspIHtcbiAgICAgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKHVybCk7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnNbaWRdID0gd29ya2VyO1xuXG4gICAgICAgICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMud29ya2VyTG9nTWVzc2FnZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIFdvcmtlckJyb2tlci5hZGRXb3JrZXIod29ya2VyKTtcblxuICAgICAgICAgICAgbG9nLmRlYnVnKGBTY2VuZS5tYWtlV29ya2VyczogaW5pdGlhbGl6aW5nIHdvcmtlciAke2lkfWApO1xuICAgICAgICAgICAgbGV0IF9pZCA9IGlkO1xuICAgICAgICAgICAgcXVldWUucHVzaChXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2Uod29ya2VyLCAnc2VsZi5pbml0JywgaWQsIHRoaXMubnVtX3dvcmtlcnMsIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbykudGhlbihcbiAgICAgICAgICAgICAgICAoaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKGBTY2VuZS5tYWtlV29ya2VyczogaW5pdGlhbGl6ZWQgd29ya2VyICR7aWR9YCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoYFNjZW5lLm1ha2VXb3JrZXJzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSB3b3JrZXIgJHtfaWR9OmAsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmV4dF93b3JrZXIgPSAwO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocXVldWUpO1xuICAgIH1cblxuICAgIC8vIFJvdW5kIHJvYmluIHNlbGVjdGlvbiBvZiBuZXh0IHdvcmtlclxuICAgIG5leHRXb3JrZXIoKSB7XG4gICAgICAgIHZhciB3b3JrZXIgPSB0aGlzLndvcmtlcnNbdGhpcy5uZXh0X3dvcmtlcl07XG4gICAgICAgIHRoaXMubmV4dF93b3JrZXIgPSAodGhpcy5uZXh0X3dvcmtlciArIDEpICUgdGhpcy53b3JrZXJzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHdvcmtlcjtcbiAgICB9XG5cbiAgICAvLyBTY2VuZSBpcyByZWFkeSBmb3IgcmVuZGVyaW5nXG4gICAgcmVhZHkoKSB7XG4gICAgICAgIGlmICghdGhpcy52aWV3LnJlYWR5KCkgfHwgT2JqZWN0LmtleXModGhpcy5zb3VyY2VzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gUmVzaXplIHRoZSBtYXAgd2hlbiBkZXZpY2UgcGl4ZWwgcmF0aW8gY2hhbmdlcywgZS5nLiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGRpc3BsYXlzXG4gICAgdXBkYXRlRGV2aWNlUGl4ZWxSYXRpbyAoKSB7XG4gICAgICAgIGlmIChVdGlscy51cGRhdGVEZXZpY2VQaXhlbFJhdGlvKCkpIHtcbiAgICAgICAgICAgIFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh0aGlzLndvcmtlcnMsICdzZWxmLnVwZGF0ZURldmljZVBpeGVsUmF0aW8nLCBVdGlscy5kZXZpY2VfcGl4ZWxfcmF0aW8pXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yZWJ1aWxkKCkpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yZXNpemVNYXAodGhpcy52aWV3LnNpemUuY3NzLndpZHRoLCB0aGlzLnZpZXcuc2l6ZS5jc3MuaGVpZ2h0KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNpemVNYXAod2lkdGgsIGhlaWdodCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52aWV3LnNldFZpZXdwb3J0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgaWYgKHRoaXMuZ2wpIHtcbiAgICAgICAgICAgIENvbnRleHQucmVzaXplKHRoaXMuZ2wsIHdpZHRoLCBoZWlnaHQsIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXF1ZXN0IHNjZW5lIGJlIHJlZHJhd24gYXQgbmV4dCBhbmltYXRpb24gbG9vcFxuICAgIHJlcXVlc3RSZWRyYXcoKSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJlZHJhdyBzY2VuZSBpbW1lZGlhdGVseSAtIGRvbid0IHdhaXQgZm9yIGFuaW1hdGlvbiBsb29wXG4gICAgLy8gVXNlIHNwYXJpbmdseSwgYnV0IGZvciBjYXNlcyB3aGVyZSB5b3UgbmVlZCB0aGUgY2xvc2VzdCBwb3NzaWJsZSBzeW5jIHdpdGggb3RoZXIgVUkgZWxlbWVudHMsXG4gICAgLy8gc3VjaCBhcyBvdGhlciwgbm9uLVdlYkdMIG1hcCBsYXllcnMgKGUuZy4gTGVhZmxldCByYXN0ZXIgbGF5ZXJzLCBtYXJrZXJzLCBldGMuKVxuICAgIGltbWVkaWF0ZVJlZHJhdygpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyTG9vcCAoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyX2xvb3BfYWN0aXZlID0gdHJ1ZTsgLy8gb25seSBsZXQgdGhlIHJlbmRlciBsb29wIGluc3RhbnRpYXRlIG9uY2VcblxuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgLy8gUmVuZGVyIHRoZSBzY2VuZVxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlcXVlc3QgdGhlIG5leHQgZnJhbWUgaWYgbm90IHNjaGVkdWxlZCB0byBzdG9wXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJfbG9vcF9zdG9wKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVuZGVyTG9vcC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyX2xvb3Bfc3RvcCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJfbG9vcF9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHVwIHRoZSByZW5kZXIgbG9vcFxuICAgIHNldHVwUmVuZGVyTG9vcCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcl9sb29wX2FjdGl2ZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMucmVuZGVyTG9vcCgpOyB9LCAwKTsgLy8gZGVsYXkgc3RhcnQgYnkgb25lIHRpY2tcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgLy8gUmVuZGVyIG9uIGRlbWFuZFxuICAgICAgICB2YXIgd2lsbF9yZW5kZXIgPSAhKFxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICB0aGlzLnVwZGF0aW5nID4gMCB8fFxuICAgICAgICAgICAgdGhpcy5yZWFkeSgpID09PSBmYWxzZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFByZS1yZW5kZXIgbG9vcCBob29rXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucHJlVXBkYXRlKHdpbGxfcmVuZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJhaWwgaWYgbm8gbmVlZCB0byByZW5kZXJcbiAgICAgICAgaWYgKCF3aWxsX3JlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTsgLy8gc3ViY2xhc3NlcyBjYW4gc2V0IHRoaXMgYmFjayB0byB0cnVlIHdoZW4gYW5pbWF0aW9uIGlzIG5lZWRlZFxuXG4gICAgICAgIC8vIFJlbmRlciB0aGUgc2NlbmVcbiAgICAgICAgdGhpcy51cGRhdGVEZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld0NvbXBsZXRlKCk7IC8vIGZpcmVzIGV2ZW50IHdoZW4gcmVuZGVyZWQgdGlsZSBzZXQgb3Igc3R5bGUgY2hhbmdlc1xuICAgICAgICB0aGlzLmNvbXBsZXRlU2NyZWVuc2hvdCgpOyAvLyBjb21wbGV0ZXMgc2NyZWVuc2hvdCBjYXB0dXJlIGlmIHJlcXVlc3RlZFxuXG4gICAgICAgIC8vIFBvc3QtcmVuZGVyIGxvb3AgaG9va1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5wb3N0VXBkYXRlKHdpbGxfcmVuZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlZHJhdyBldmVyeSBmcmFtZSBpZiBhbmltYXRpbmdcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mcmFtZSsrO1xuICAgICAgICBsb2cudHJhY2UoJ1NjZW5lLnJlbmRlcigpJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgICAgICAvLyBVcGRhdGUgc3R5bGVzLCBjYW1lcmEsIGxpZ2h0c1xuICAgICAgICB0aGlzLnZpZXcudXBkYXRlKCk7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlX3N0eWxlcykuZm9yRWFjaChpID0+IHRoaXMuc3R5bGVzW2ldLnVwZGF0ZSgpKTtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5saWdodHMpLmZvckVhY2goaSA9PiB0aGlzLmxpZ2h0c1tpXS51cGRhdGUoKSk7XG5cbiAgICAgICAgLy8gUmVuZGVyYWJsZSB0aWxlIGxpc3RcbiAgICAgICAgdGhpcy5yZW5kZXJhYmxlX3RpbGVzID0gdGhpcy50aWxlX21hbmFnZXIuZ2V0UmVuZGVyYWJsZVRpbGVzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyYWJsZV90aWxlc19jb3VudCA9IHRoaXMucmVuZGVyYWJsZV90aWxlcy5sZW5ndGg7XG5cbiAgICAgICAgLy8gUmVuZGVyIG1haW4gcGFzc1xuICAgICAgICB0aGlzLnJlbmRlcl9jb3VudCA9IHRoaXMucmVuZGVyUGFzcygpO1xuXG4gICAgICAgIC8vIFJlbmRlciBzZWxlY3Rpb24gcGFzcyAoaWYgbmVlZGVkKVxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ucGVuZGluZ1JlcXVlc3RzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXcucGFubmluZyB8fCB0aGlzLnZpZXcuem9vbWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyUGVuZGluZ1JlcXVlc3RzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5iaW5kKCk7ICAgICAgICAgICAgICAgICAgLy8gc3dpdGNoIHRvIEZCT1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJQYXNzKFxuICAgICAgICAgICAgICAgICdzZWxlY3Rpb25fcHJvZ3JhbScsICAgICAgICAgICAgICAgIC8vIHJlbmRlciB3L2FsdGVybmF0ZSBwcm9ncmFtXG4gICAgICAgICAgICAgICAgeyBhbGxvd19ibGVuZDogZmFsc2UgfSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yZWFkKCk7ICAgICAgICAgICAgICAgICAgLy8gcmVhZCByZXN1bHRzIGZyb20gc2VsZWN0aW9uIGJ1ZmZlclxuXG4gICAgICAgICAgICAvLyBSZXNldCB0byBzY3JlZW4gYnVmZmVyXG4gICAgICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuICAgICAgICAgICAgZ2wudmlld3BvcnQoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlcl9jb3VudF9jaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnJlbmRlcl9jb3VudCAhPT0gdGhpcy5sYXN0X3JlbmRlcl9jb3VudCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJfY291bnRfY2hhbmdlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0RmVhdHVyZVNlbGVjdGlvbk1hcFNpemUoKS50aGVuKHNpemUgPT4ge1xuICAgICAgICAgICAgICAgIGxvZy5pbmZvKGBTY2VuZTogcmVuZGVyZWQgJHt0aGlzLnJlbmRlcl9jb3VudH0gcHJpbWl0aXZlcyAoJHtzaXplfSBmZWF0dXJlcyBpbiBzZWxlY3Rpb24gbWFwKWApO1xuICAgICAgICAgICAgfSwgKCkgPT4ge30pOyAvLyBubyBvcCB3aGVuIHByb21pc2UgcmVqZWN0cyAob25seSBwcmludCBsYXN0IHJlc3BvbnNlKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubGFzdF9yZW5kZXJfY291bnQgPSB0aGlzLnJlbmRlcl9jb3VudDtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgYWxsIGFjdGl2ZSBzdHlsZXMsIGdyb3VwZWQgYnkgYmxlbmQvZGVwdGggdHlwZSAob3BhcXVlLCBvdmVybGF5LCBldGMuKSBhbmQgYnkgcHJvZ3JhbSAoc3R5bGUpXG4gICAgLy8gQ2FsbGVkIGJvdGggZm9yIG1haW4gcmVuZGVyIHBhc3MsIGFuZCBmb3Igc2Vjb25kYXJ5IHBhc3NlcyBsaWtlIHNlbGVjdGlvbiBidWZmZXJcbiAgICByZW5kZXJQYXNzKHByb2dyYW1fa2V5ID0gJ3Byb2dyYW0nLCB7IGFsbG93X2JsZW5kIH0gPSB7fSkge1xuICAgICAgICAvLyBvcHRpb25hbGx5IGZvcmNlIGFscGhhIG9mZiAoZS5nLiBmb3Igc2VsZWN0aW9uIHBhc3MpXG4gICAgICAgIGFsbG93X2JsZW5kID0gKGFsbG93X2JsZW5kID09IG51bGwpID8gdHJ1ZSA6IGFsbG93X2JsZW5kO1xuXG4gICAgICAgIHRoaXMuY2xlYXJGcmFtZSh7IGNsZWFyX2NvbG9yOiB0cnVlLCBjbGVhcl9kZXB0aDogdHJ1ZSB9KTtcblxuICAgICAgICAvLyBTb3J0IHN0eWxlcyBieSBibGVuZCBvcmRlclxuICAgICAgICBsZXQgc3R5bGVzID0gT2JqZWN0LmtleXModGhpcy5hY3RpdmVfc3R5bGVzKS5cbiAgICAgICAgICAgIG1hcChzID0+IHRoaXMuc3R5bGVzW3NdKS5cbiAgICAgICAgICAgIHNvcnQoU3R5bGUuYmxlbmRPcmRlclNvcnQpO1xuXG4gICAgICAgIC8vIFJlbmRlciBzdHlsZXNcbiAgICAgICAgbGV0IGNvdW50ID0gMDsgLy8gaG93IG1hbnkgcHJpbWl0aXZlcyB3ZXJlIHJlbmRlcmVkXG4gICAgICAgIGxldCBsYXN0X2JsZW5kO1xuICAgICAgICBmb3IgKGxldCBzdHlsZSBvZiBzdHlsZXMpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIHJlbmRlciBzdGF0ZSB3aGVuIGJsZW5kIG1vZGUgY2hhbmdlc1xuICAgICAgICAgICAgaWYgKHN0eWxlLmJsZW5kICE9PSBsYXN0X2JsZW5kKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSxcbiAgICAgICAgICAgICAgICAgICAgU3R5bGUucmVuZGVyX3N0YXRlc1tzdHlsZS5ibGVuZF0sICAgICAgIC8vIHJlbmRlciBzdGF0ZSBmb3IgYmxlbmQgbW9kZVxuICAgICAgICAgICAgICAgICAgICB7IGJsZW5kOiAoYWxsb3dfYmxlbmQgJiYgc3R5bGUuYmxlbmQpIH0gLy8gZW5hYmxlL2Rpc2FibGUgYmxlbmRpbmcgKGUuZy4gbm8gYmxlbmQgZm9yIHNlbGVjdGlvbilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVuZGVyU3RhdGUoc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY291bnQgKz0gdGhpcy5yZW5kZXJTdHlsZShzdHlsZS5uYW1lLCBwcm9ncmFtX2tleSk7XG4gICAgICAgICAgICBsYXN0X2JsZW5kID0gc3R5bGUuYmxlbmQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuXG4gICAgcmVuZGVyU3R5bGUoc3R5bGUsIHByb2dyYW1fa2V5KSB7XG4gICAgICAgIGxldCBmaXJzdF9mb3Jfc3R5bGUgPSB0cnVlO1xuICAgICAgICBsZXQgcmVuZGVyX2NvdW50ID0gMDtcblxuICAgICAgICBsZXQgcHJvZ3JhbSA9IHRoaXMuc3R5bGVzW3N0eWxlXVtwcm9ncmFtX2tleV07XG4gICAgICAgIGlmICghcHJvZ3JhbSB8fCAhcHJvZ3JhbS5jb21waWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW5kZXIgdGlsZSBHTCBnZW9tZXRyaWVzXG4gICAgICAgIGZvciAobGV0IHQgaW4gdGhpcy5yZW5kZXJhYmxlX3RpbGVzKSB7XG4gICAgICAgICAgICBsZXQgdGlsZSA9IHRoaXMucmVuZGVyYWJsZV90aWxlc1t0XTtcblxuICAgICAgICAgICAgaWYgKHRpbGUubWVzaGVzW3N0eWxlXSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN0eWxlLXNwZWNpZmljIHN0YXRlXG4gICAgICAgICAgICAvLyBPbmx5IHNldHVwIHN0eWxlIGlmIHJlbmRlcmluZyBmb3IgZmlyc3QgdGltZSB0aGlzIGZyYW1lXG4gICAgICAgICAgICAvLyAobGF6eSBpbml0LCBub3QgYWxsIHN0eWxlcyB3aWxsIGJlIHVzZWQgaW4gYWxsIHNjcmVlbiB2aWV3czsgc29tZSBzdHlsZXMgbWlnaHQgYmUgZGVmaW5lZCBidXQgbmV2ZXIgdXNlZClcbiAgICAgICAgICAgIGlmIChmaXJzdF9mb3Jfc3R5bGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBmaXJzdF9mb3Jfc3R5bGUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHByb2dyYW0udXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZXNbc3R5bGVdLnNldHVwKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBkb24ndCBzZXQgdW5pZm9ybXMgd2hlbiB0aGV5IGhhdmVuJ3QgY2hhbmdlZFxuICAgICAgICAgICAgICAgIHByb2dyYW0udW5pZm9ybSgnMWYnLCAndV90aW1lJywgdGhpcy5hbmltYXRlZCA/ICgoKCtuZXcgRGF0ZSgpKSAtIHRoaXMuc3RhcnRfdGltZSkgLyAxMDAwKSA6IDApO1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5zZXR1cFByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiB0aGlzLmxpZ2h0cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpZ2h0c1tpXS5zZXR1cFByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBUaWxlLXNwZWNpZmljIHN0YXRlXG4gICAgICAgICAgICB0aGlzLnZpZXcuc2V0dXBUaWxlKHRpbGUsIHByb2dyYW0pO1xuXG4gICAgICAgICAgICAvLyBSZW5kZXIgdGlsZVxuICAgICAgICAgICAgdGlsZS5tZXNoZXNbc3R5bGVdLnJlbmRlcigpO1xuICAgICAgICAgICAgcmVuZGVyX2NvdW50ICs9IHRpbGUubWVzaGVzW3N0eWxlXS5nZW9tZXRyeV9jb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW5kZXJfY291bnQ7XG4gICAgfVxuXG4gICAgY2xlYXJGcmFtZSh7IGNsZWFyX2NvbG9yLCBjbGVhcl9kZXB0aCB9ID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0c1xuICAgICAgICBjbGVhcl9jb2xvciA9IChjbGVhcl9jb2xvciA9PT0gZmFsc2UpID8gZmFsc2UgOiB0cnVlOyAvLyBkZWZhdWx0IHRydWVcbiAgICAgICAgY2xlYXJfZGVwdGggPSAoY2xlYXJfZGVwdGggPT09IGZhbHNlKSA/IGZhbHNlIDogdHJ1ZTsgLy8gZGVmYXVsdCB0cnVlXG5cbiAgICAgICAgLy8gUmVzZXQgZnJhbWUgc3RhdGVcbiAgICAgICAgbGV0IGdsID0gdGhpcy5nbDtcblxuICAgICAgICBpZiAoY2xlYXJfY29sb3IpIHtcbiAgICAgICAgICAgIGdsLmNsZWFyQ29sb3IoLi4udGhpcy5iYWNrZ3JvdW5kLmNvbG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbGVhcl9kZXB0aCkge1xuICAgICAgICAgICAgZ2wuZGVwdGhNYXNrKHRydWUpOyAvLyBhbHdheXMgY2xlYXIgZGVwdGggaWYgcmVxdWVzdGVkLCBldmVuIGlmIGRlcHRoIHdyaXRlIHdpbGwgYmUgdHVybmVkIG9mZlxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsZWFyX2NvbG9yIHx8IGNsZWFyX2RlcHRoKSB7XG4gICAgICAgICAgICBsZXQgbWFzayA9IChjbGVhcl9jb2xvciAmJiBnbC5DT0xPUl9CVUZGRVJfQklUKSB8IChjbGVhcl9kZXB0aCAmJiBnbC5ERVBUSF9CVUZGRVJfQklUKTtcbiAgICAgICAgICAgIGdsLmNsZWFyKG1hc2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UmVuZGVyU3RhdGUoeyBkZXB0aF90ZXN0LCBkZXB0aF93cml0ZSwgY3VsbF9mYWNlLCBibGVuZCB9ID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0c1xuICAgICAgICAvLyBUT0RPOiB3aGVuIHdlIGFic3RyYWN0IG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLCB0aGVzZSBjYW4gYmUgcGVyLXBhc3MgY29uZmlnIG9wdGlvbnNcbiAgICAgICAgZGVwdGhfdGVzdCA9IChkZXB0aF90ZXN0ID09PSBmYWxzZSkgPyBmYWxzZSA6IFJlbmRlclN0YXRlLmRlZmF1bHRzLmRlcHRoX3Rlc3Q7ICAgICAgLy8gZGVmYXVsdCB0cnVlXG4gICAgICAgIGRlcHRoX3dyaXRlID0gKGRlcHRoX3dyaXRlID09PSBmYWxzZSkgPyBmYWxzZSA6IFJlbmRlclN0YXRlLmRlZmF1bHRzLmRlcHRoX3dyaXRlOyAgIC8vIGRlZmF1bHQgdHJ1ZVxuICAgICAgICBjdWxsX2ZhY2UgPSAoY3VsbF9mYWNlID09PSBmYWxzZSkgPyBmYWxzZSA6IFJlbmRlclN0YXRlLmRlZmF1bHRzLmN1bGxpbmc7ICAgICAgICAgICAvLyBkZWZhdWx0IHRydWVcbiAgICAgICAgYmxlbmQgPSAoYmxlbmQgIT0gbnVsbCkgPyBibGVuZCA6IFJlbmRlclN0YXRlLmRlZmF1bHRzLmJsZW5kaW5nOyAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBmYWxzZVxuXG4gICAgICAgIC8vIFJlc2V0IGZyYW1lIHN0YXRlXG4gICAgICAgIGxldCBnbCA9IHRoaXMuZ2w7XG5cbiAgICAgICAgUmVuZGVyU3RhdGUuZGVwdGhfdGVzdC5zZXQoeyBkZXB0aF90ZXN0OiBkZXB0aF90ZXN0LCBkZXB0aF9mdW5jOiBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5kZXB0aF9mdW5jIH0pO1xuICAgICAgICBSZW5kZXJTdGF0ZS5kZXB0aF93cml0ZS5zZXQoeyBkZXB0aF93cml0ZTogZGVwdGhfd3JpdGUgfSk7XG4gICAgICAgIFJlbmRlclN0YXRlLmN1bGxpbmcuc2V0KHsgY3VsbDogY3VsbF9mYWNlLCBmYWNlOiBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5jdWxsaW5nX2ZhY2UgfSk7XG5cbiAgICAgICAgLy8gQmxlbmRpbmcgb2YgYWxwaGEgY2hhbm5lbCBpcyBtb2RpZmllZCB0byBhY2NvdW50IGZvciBXZWJHTCBhbHBoYSBiZWhhdmlvciwgc2VlOlxuICAgICAgICAvLyBodHRwOi8vd2ViZ2xmdW5kYW1lbnRhbHMub3JnL3dlYmdsL2xlc3NvbnMvd2ViZ2wtYW5kLWFscGhhLmh0bWxcbiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTE1MzM0MTZcbiAgICAgICAgaWYgKGJsZW5kKSB7XG4gICAgICAgICAgICAvLyBPcGFxdWU6IGFsbCBzb3VyY2UsIG5vIGRlc3RpbmF0aW9uXG4gICAgICAgICAgICBpZiAoYmxlbmQgPT09ICdvcGFxdWUnKSB7XG4gICAgICAgICAgICAgICAgUmVuZGVyU3RhdGUuYmxlbmRpbmcuc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgYmxlbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNyYzogZ2wuU1JDX0FMUEhBLCBkc3Q6IGdsLlpFUk9cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRyYWRpdGlvbmFsIGFscGhhIGJsZW5kaW5nXG4gICAgICAgICAgICBlbHNlIGlmIChibGVuZCA9PT0gJ292ZXJsYXknIHx8IGJsZW5kID09PSAnaW5sYXknKSB7XG4gICAgICAgICAgICAgICAgUmVuZGVyU3RhdGUuYmxlbmRpbmcuc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgYmxlbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNyYzogZ2wuU1JDX0FMUEhBLCBkc3Q6IGdsLk9ORV9NSU5VU19TUkNfQUxQSEEsXG4gICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYTogZ2wuT05FLCBkc3RfYWxwaGE6IGdsLk9ORV9NSU5VU19TUkNfQUxQSEFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFkZGl0aXZlIGJsZW5kaW5nXG4gICAgICAgICAgICBlbHNlIGlmIChibGVuZCA9PT0gJ2FkZCcpIHtcbiAgICAgICAgICAgICAgICBSZW5kZXJTdGF0ZS5ibGVuZGluZy5zZXQoe1xuICAgICAgICAgICAgICAgICAgICBibGVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBnbC5PTkUsIGRzdDogZ2wuT05FLFxuICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGE6IGdsLk9ORSwgZHN0X2FscGhhOiBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNdWx0aXBsaWNhdGl2ZSBibGVuZGluZ1xuICAgICAgICAgICAgZWxzZSBpZiAoYmxlbmQgPT09ICdtdWx0aXBseScpIHtcbiAgICAgICAgICAgICAgICBSZW5kZXJTdGF0ZS5ibGVuZGluZy5zZXQoe1xuICAgICAgICAgICAgICAgICAgICBibGVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBnbC5aRVJPLCBkc3Q6IGdsLlNSQ19DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhOiBnbC5PTkUsIGRzdF9hbHBoYTogZ2wuT05FX01JTlVTX1NSQ19BTFBIQVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgUmVuZGVyU3RhdGUuYmxlbmRpbmcuc2V0KHsgYmxlbmQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVxdWVzdCBmZWF0dXJlIHNlbGVjdGlvbiBhdCBnaXZlbiBwaXhlbC4gUnVucyBhc3luYyBhbmQgcmV0dXJucyByZXN1bHRzIHZpYSBhIHByb21pc2UuXG4gICAgZ2V0RmVhdHVyZUF0KHBpeGVsKSB7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKFwiU2NlbmUuZ2V0RmVhdHVyZUF0KCkgY2FsbGVkIGJlZm9yZSBzY2VuZSB3YXMgaW5pdGlhbGl6ZWRcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQb2ludCBzY2FsZWQgdG8gWzAuLjFdIHJhbmdlXG4gICAgICAgIHZhciBwb2ludCA9IHtcbiAgICAgICAgICAgIHg6IHBpeGVsLnggKiBVdGlscy5kZXZpY2VfcGl4ZWxfcmF0aW8gLyB0aGlzLnZpZXcuc2l6ZS5kZXZpY2Uud2lkdGgsXG4gICAgICAgICAgICB5OiBwaXhlbC55ICogVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvIC8gdGhpcy52aWV3LnNpemUuZGV2aWNlLmhlaWdodFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlOyAvLyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc2NlbmUgcmUtcmVuZGVycyBmb3IgdGhlc2UgdG8gYmUgcHJvY2Vzc2VkXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5nZXRGZWF0dXJlQXQocG9pbnQpLlxuICAgICAgICAgICAgdGhlbihzZWxlY3Rpb24gPT4gT2JqZWN0LmFzc2lnbihzZWxlY3Rpb24sIHsgcGl4ZWwgfSkpLlxuICAgICAgICAgICAgY2F0Y2goZXJyb3IgPT4gUHJvbWlzZS5yZXNvbHZlKHsgZXJyb3IgfSkpO1xuICAgIH1cblxuICAgIC8vIFJlYnVpbGQgZ2VvbWV0cnksIHdpdGhvdXQgcmUtcGFyc2luZyB0aGUgY29uZmlnIG9yIHJlLWNvbXBpbGluZyBzdHlsZXNcbiAgICAvLyBUT0RPOiBkZXRlY3Qgd2hpY2ggZWxlbWVudHMgbmVlZCB0byBiZSByZWZyZXNoZWQvcmVidWlsdCAoc3R5bGVzaGVldCBjaGFuZ2VzLCBldGMuKVxuICAgIHJlYnVpbGQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWJ1aWxkR2VvbWV0cnkob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gUmVidWlsZCBhbGwgdGlsZXNcbiAgICAvLyBzeW5jOiBib29sZWFuIG9mIHdoZXRoZXIgdG8gc3luYyB0aGUgY29uZmlnIG9iamVjdCB0byB0aGUgd29ya2VyXG4gICAgLy8gc291cmNlczogb3B0aW9uYWwgYXJyYXkgb2YgZGF0YSBzb3VyY2VzIHRvIHNlbGVjdGl2ZWx5IHJlYnVpbGQgKGJ5IGRlZmF1bHQgYWxsIG91ciByZWJ1aWx0KVxuICAgIHJlYnVpbGRHZW9tZXRyeSh7IHN5bmMgPSB0cnVlLCBzb3VyY2VzID0gbnVsbCB9ID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIC8vIFNraXAgcmVidWlsZCBpZiBhbHJlYWR5IGluIHByb2dyZXNzXG4gICAgICAgICAgICBpZiAodGhpcy5idWlsZGluZykge1xuICAgICAgICAgICAgICAgIC8vIFF1ZXVlIHVwIHRvIG9uZSByZWJ1aWxkIGNhbGwgYXQgYSB0aW1lLCBvbmx5IHNhdmUgbGFzdCByZXF1ZXN0XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVpbGRpbmcucXVldWVkICYmIHRoaXMuYnVpbGRpbmcucXVldWVkLnJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBub3RpZnkgcHJldmlvdXMgcmVxdWVzdCB0aGF0IGl0IGRpZCBub3QgY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCdTY2VuZS5yZWJ1aWxkR2VvbWV0cnk6IHJlcXVlc3Qgc3VwZXJjZWRlZCBieSBhIG5ld2VyIGNhbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGluZy5xdWV1ZWQucmVzb2x2ZShmYWxzZSk7IC8vIGZhbHNlIGZsYWcgaW5kaWNhdGVzIHJlYnVpbGQgcmVxdWVzdCB3YXMgc3VwZXJjZWRlZFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFNhdmUgcXVldWVkIHJlcXVlc3RcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkaW5nLnF1ZXVlZCA9IHsgcmVzb2x2ZSwgcmVqZWN0IH07XG4gICAgICAgICAgICAgICAgbG9nLnRyYWNlKGBTY2VuZS5yZWJ1aWxkR2VvbWV0cnkoKTogcXVldWluZyByZXF1ZXN0YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBUcmFjayB0aWxlIGJ1aWxkIHN0YXRlXG4gICAgICAgICAgICB0aGlzLmJ1aWxkaW5nID0geyByZXNvbHZlLCByZWplY3QgfTtcblxuICAgICAgICAgICAgLy8gUHJvZmlsaW5nXG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zy5wcm9maWxlLmdlb21ldHJ5X2J1aWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZmlsZSgncmVidWlsZEdlb21ldHJ5Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBjb25maWcgKGluIGNhc2UgSlMgb2JqZWN0cyB3ZXJlIG1hbmlwdWxhdGVkIGRpcmVjdGx5KVxuICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNDb25maWdUb1dvcmtlcigpO1xuICAgICAgICAgICAgICAgIFN0eWxlTWFuYWdlci5jb21waWxlKHRoaXMudXBkYXRlQWN0aXZlU3R5bGVzKCksIHRoaXMpOyAvLyBvbmx5IHJlY29tcGlsZSBuZXdseSBhY3RpdmUgc3R5bGVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlc2V0RmVhdHVyZVNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5yZXNldFRpbWUoKTtcblxuICAgICAgICAgICAgLy8gUmVidWlsZCB2aXNpYmxlIHRpbGVzXG4gICAgICAgICAgICB0aGlzLnRpbGVfbWFuYWdlci5wcnVuZVRvVmlzaWJsZVRpbGVzKCk7XG4gICAgICAgICAgICB0aGlzLnRpbGVfbWFuYWdlci5mb3JFYWNoVGlsZSh0aWxlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZXMgfHwgc291cmNlcy5pbmRleE9mKHRpbGUuc291cmNlLm5hbWUpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aWxlX21hbmFnZXIuYnVpbGRUaWxlKHRpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50aWxlX21hbmFnZXIudXBkYXRlVGlsZXNGb3JWaWV3KCk7IC8vIHBpY2tzIHVwIGFkZGl0aW9uYWwgdGlsZXMgZm9yIGFueSBuZXcvY2hhbmdlZCBkYXRhIHNvdXJjZXNcbiAgICAgICAgICAgIHRoaXMudGlsZV9tYW5hZ2VyLmNoZWNrQnVpbGRRdWV1ZSgpOyAgICAvLyByZXNvbHZlIGltbWVkaWF0ZWx5IGlmIG5vIHRpbGVzIHRvIGJ1aWxkXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gUHJvZmlsaW5nXG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zy5wcm9maWxlLmdlb21ldHJ5X2J1aWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZmlsZUVuZCgncmVidWlsZEdlb21ldHJ5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRpbGUgbWFuYWdlciBmaW5pc2hlZCBidWlsZGluZyB0aWxlc1xuICAgIC8vIFRPRE8gbW92ZSB0byB0aWxlIG1hbmFnZXJcbiAgICB0aWxlTWFuYWdlckJ1aWxkRG9uZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYnVpbGRpbmcpIHtcbiAgICAgICAgICAgIGxvZy5pbmZvKGBTY2VuZTogYnVpbGQgZ2VvbWV0cnkgZmluaXNoZWRgKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1aWxkaW5nLnJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkaW5nLnJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFub3RoZXIgcmVidWlsZCBxdWV1ZWQ/XG4gICAgICAgICAgICB2YXIgcXVldWVkID0gdGhpcy5idWlsZGluZy5xdWV1ZWQ7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkaW5nID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChxdWV1ZWQpIHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoYFNjZW5lOiBzdGFydGluZyBxdWV1ZWQgcmVidWlsZEdlb21ldHJ5KCkgcmVxdWVzdGApO1xuICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZEdlb21ldHJ5KCkudGhlbihxdWV1ZWQucmVzb2x2ZSwgcXVldWVkLnJlamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgICBMb2FkIChvciByZWxvYWQpIHRoZSBzY2VuZSBjb25maWdcbiAgICAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAgICovXG4gICAgbG9hZFNjZW5lKGNvbmZpZ19zb3VyY2UgPSBudWxsLCBjb25maWdfcGF0aCA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb25maWdfc291cmNlID0gY29uZmlnX3NvdXJjZSB8fCB0aGlzLmNvbmZpZ19zb3VyY2U7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ19zb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ19wYXRoID0gVXRpbHMucGF0aEZvclVSTChjb25maWdfcGF0aCB8fCB0aGlzLmNvbmZpZ19zb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25maWdfcGF0aCA9IFV0aWxzLnBhdGhGb3JVUkwoY29uZmlnX3BhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFNjZW5lTG9hZGVyLmxvYWRTY2VuZSh0aGlzLmNvbmZpZ19zb3VyY2UsIHRoaXMuY29uZmlnX3BhdGgpLnRoZW4oY29uZmlnID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdsb2FkJywgeyBjb25maWc6IHRoaXMuY29uZmlnIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgc291cmNlIHRvIGEgc2NlbmUsIGFyZ3VtZW50cyBgbmFtZWAgYW5kIGBjb25maWdgIG5lZWQgdG8gYmUgcHJvdmlkZWQ6XG4gICAgLy8gIC0gSWYgdGhlIG5hbWUgZG9lc24ndCBtYXRjaCBhIHNvdXJjZXMgaXQgd2lsbCBjcmVhdGUgaXRcbiAgICAvLyAgLSB0aGUgYGNvbmZpZ2Agb2JqIGZvbGxvdyB0aGUgWUFNTCBzY2VuZSBzcGVjLCBleDogYGBge3R5cGU6ICdUb3BvSlNPTicsIHVybDogXCIvL3ZlY3Rvci5tYXB6ZW4uY29tL29zbS9hbGwve3p9L3t4fS97eX0udG9wb2pzb25cIl19YGBgXG4gICAgLy8gICAgdGhhdCBsb29rcyBsaWtlOlxuICAgIC8vXG4gICAgLy8gICAgICBzY2VuZS5zZXREYXRhU291cmNlKFwib3NtXCIsIHt0eXBlOiAnVG9wb0pTT04nLCB1cmw6IFwiLy92ZWN0b3IubWFwemVuLmNvbS9vc20vYWxsL3t6fS97eH0ve3l9LnRvcG9qc29uXCIgfSk7XG4gICAgLy9cbiAgICAvLyAgLSBhbHNvIGNhbiBiZSBwYXNzIGEgYGBgZGF0YWBgYCBvYmo6IGBgYHt0eXBlOiAnR2VvSlNPTicsIGRhdGE6IEpTT2JqIF19YGBgXG4gICAgLy9cbiAgICAvLyAgICAgIHZhciBnZW9qc29uX2RhdGEgPSB7fTtcbiAgICAvLyAgICAgIC4uLlxuICAgIC8vICAgICAgc2NlbmUuc2V0RGF0YVNvdXJjZShcImR5bmFtaWNfZGF0YVwiLCB7dHlwZTogJ0dlb0pTT04nLCBkYXRhOiBnZW9qc29uX2RhdGEgfSk7XG4gICAgLy9cbiAgICBzZXREYXRhU291cmNlIChuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFjb25maWcgfHwgIWNvbmZpZy50eXBlIHx8ICghY29uZmlnLnVybCAmJiAhY29uZmlnLmRhdGEpKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoXCJObyBuYW1lIHByb3ZpZGVkIG9yIG5vdCBhIHZhbGlkIGNvbmZpZzpcIiwgbmFtZSwgY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2FkID0gKHRoaXMuY29uZmlnLnNvdXJjZXNbbmFtZV0gPT0gbnVsbCk7XG4gICAgICAgIGxldCBzb3VyY2UgPSB0aGlzLmNvbmZpZy5zb3VyY2VzW25hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKTtcblxuICAgICAgICBpZiAoc291cmNlLmRhdGEgJiYgdHlwZW9mIHNvdXJjZS5kYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc291cmNlLnVybCA9IFV0aWxzLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoc291cmNlLmRhdGEpXSkpO1xuICAgICAgICAgICAgZGVsZXRlIHNvdXJjZS5kYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvYWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNvbmZpZyh7IHJlYnVpbGQ6IHsgc291cmNlczogW25hbWVdIH0gfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWJ1aWxkKHsgc291cmNlczogW25hbWVdIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlRGF0YVNvdXJjZXMoKSB7XG4gICAgICAgIGxldCByZXNldCA9IFtdOyAvLyBzb3VyY2VzIHRvIHJlc2V0XG4gICAgICAgIGxldCBwcmV2X3NvdXJjZV9uYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlcyk7XG5cbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLmNvbmZpZy5zb3VyY2VzKSB7XG4gICAgICAgICAgICBsZXQgc291cmNlID0gdGhpcy5jb25maWcuc291cmNlc1tuYW1lXTtcbiAgICAgICAgICAgIGxldCBwcmV2X3NvdXJjZSA9IHRoaXMuc291cmNlc1tuYW1lXTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZXNbbmFtZV0gPSBEYXRhU291cmNlLmNyZWF0ZShPYmplY3QuYXNzaWduKHt9LCBzb3VyY2UsIHtuYW1lfSksIHRoaXMuc291cmNlcyk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNvdXJjZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBgQ291bGQgbm90IGNyZWF0ZSBkYXRhIHNvdXJjZTogJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICBsb2cud2FybihgU2NlbmU6ICR7bWVzc2FnZX1gLCBzb3VyY2UpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignd2FybmluZycsIHsgdHlwZTogJ3NvdXJjZXMnLCBzb3VyY2UsIG1lc3NhZ2UgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERhdGEgc291cmNlIGNoYW5nZWQ/XG4gICAgICAgICAgICBpZiAoRGF0YVNvdXJjZS5jaGFuZ2VkKHRoaXMuc291cmNlc1tuYW1lXSwgcHJldl9zb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgcmVzZXQucHVzaChuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNvdXJjZXMgdGhhdCB3ZXJlIHJlbW92ZWRcbiAgICAgICAgZm9yIChsZXQgcyBvZiBwcmV2X3NvdXJjZV9uYW1lcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5zb3VyY2VzW3NdKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlc1tzXTsgLy8gVE9ETzogcmVtb3ZlIGZyb20gd29ya2VycyB0b28/XG4gICAgICAgICAgICAgICAgcmVzZXQucHVzaChzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aWxlcyBmcm9tIHNvdXJjZXMgdGhhdCBoYXZlIGNoYW5nZWRcbiAgICAgICAgaWYgKHJlc2V0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMudGlsZV9tYW5hZ2VyLnJlbW92ZVRpbGVzKHRpbGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAocmVzZXQuaW5kZXhPZih0aWxlLnNvdXJjZS5uYW1lKSA+IC0xKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFyayBzb3VyY2VzIHRoYXQgZ2VuZXJhdGUgZ2VvbWV0cnkgdGlsZXNcbiAgICAgICAgLy8gKGFsbCBleGNlcHQgdGhvc2UgdGhhdCBhcmUgb25seSByYXN0ZXIgc291cmNlcyBhdHRhY2hlZCB0byBvdGhlciBzb3VyY2VzKVxuICAgICAgICBmb3IgKGxldCBsYXllciBvZiBVdGlscy52YWx1ZXModGhpcy5jb25maWcubGF5ZXJzKSkge1xuICAgICAgICAgICAgaWYgKGxheWVyLmRhdGEgJiYgdGhpcy5zb3VyY2VzW2xheWVyLmRhdGEuc291cmNlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlc1tsYXllci5kYXRhLnNvdXJjZV0uZ2VvbWV0cnlfdGlsZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTG9hZCBhbGwgdGV4dHVyZXMgaW4gdGhlIHNjZW5lIGRlZmluaXRpb25cbiAgICBsb2FkVGV4dHVyZXMoKSB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmNyZWF0ZUZyb21PYmplY3QodGhpcy5nbCwgdGhpcy5jb25maWcudGV4dHVyZXMpO1xuICAgIH1cblxuICAgIC8vIENhbGxlZCAoY3VycmVudGx5IG1hbnVhbGx5KSBhZnRlciBzdHlsZXMgYXJlIHVwZGF0ZWQgaW4gc3R5bGVzaGVldFxuICAgIHVwZGF0ZVN0eWxlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkICYmICF0aGlzLmluaXRpYWxpemluZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTY2VuZS51cGRhdGVTdHlsZXMoKSBjYWxsZWQgYmVmb3JlIHNjZW5lIHdhcyBpbml0aWFsaXplZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gKFJlKWJ1aWxkIHN0eWxlcyBmcm9tIGNvbmZpZ1xuICAgICAgICB0aGlzLnN0eWxlcyA9IFN0eWxlTWFuYWdlci5idWlsZCh0aGlzLmNvbmZpZy5zdHlsZXMsIHRoaXMpO1xuXG4gICAgICAgIC8vIE9wdGlvbmFsbHkgc2V0IEdMIGNvbnRleHQgKHVzZWQgd2hlbiBpbml0aWFsaXppbmcgb3IgcmUtaW5pdGlhbGl6aW5nIEdMIHJlc291cmNlcylcbiAgICAgICAgZm9yICh2YXIgc3R5bGUgb2YgVXRpbHMudmFsdWVzKHRoaXMuc3R5bGVzKSkge1xuICAgICAgICAgICAgc3R5bGUuc2V0R0wodGhpcy5nbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kICYgY29tcGlsZSBhY3RpdmUgc3R5bGVzXG4gICAgICAgIHRoaXMudXBkYXRlQWN0aXZlU3R5bGVzKCk7XG4gICAgICAgIFN0eWxlTWFuYWdlci5jb21waWxlKE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlX3N0eWxlcyksIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIHVwZGF0ZUFjdGl2ZVN0eWxlcygpIHtcbiAgICAgICAgLy8gTWFrZSBhIHNldCBvZiBjdXJyZW50bHkgYWN0aXZlIHN0eWxlcyAodXNlZCBpbiBhIGRyYXcgcnVsZSlcbiAgICAgICAgLy8gTm90ZTogZG9lc24ndCBhY3R1YWxseSBjaGVjayBpZiBhbnkgZ2VvbWV0cnkgbWF0Y2hlcyB0aGUgcnVsZSwganVzdCB0aGF0IHRoZSBzdHlsZSBpcyBwb3RlbnRpYWxseSByZW5kZXJhYmxlXG4gICAgICAgIGxldCBwcmV2X3N0eWxlcyA9IE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlX3N0eWxlcyB8fCB7fSk7XG4gICAgICAgIHRoaXMuYWN0aXZlX3N0eWxlcyA9IHt9O1xuICAgICAgICB2YXIgYW5pbWF0ZWQgPSBmYWxzZTsgLy8gaXMgYW55IGFjdGl2ZSBzdHlsZSBhbmltYXRlZD9cbiAgICAgICAgZm9yICh2YXIgcnVsZSBvZiBVdGlscy5yZWN1cnNlVmFsdWVzKHRoaXMuY29uZmlnLmxheWVycykpIHtcbiAgICAgICAgICAgIGlmIChydWxlICYmIHJ1bGUuZHJhdykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IFtuYW1lLCBncm91cF0gb2YgVXRpbHMuZW50cmllcyhydWxlLmRyYXcpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHdhcm4gb24gbm9uLW9iamVjdCBkcmF3IGdyb3VwXG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cCAhPSBudWxsICYmIHR5cGVvZiBncm91cCA9PT0gJ29iamVjdCcgJiYgZ3JvdXAudmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHlsZV9uYW1lID0gZ3JvdXAuc3R5bGUgfHwgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHlsZXMgPSBbc3R5bGVfbmFtZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbmFsIGFkZGl0aW9uYWwgb3V0bGluZSBzdHlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwLm91dGxpbmUgJiYgZ3JvdXAub3V0bGluZS5zdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlcy5wdXNoKGdyb3VwLm91dGxpbmUuc3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXMgPSBzdHlsZXMuZmlsdGVyKHggPT4gdGhpcy5zdHlsZXNbeF0pLmZvckVhY2goc3R5bGVfbmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0eWxlID0gdGhpcy5zdHlsZXNbc3R5bGVfbmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlX3N0eWxlc1tzdHlsZV9uYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZS5hbmltYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2UgZXhwbGljaXRseSBzZXQgc2NlbmUgYW5pbWF0aW9uIGZsYWcgaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIHR1cm4gb24gYW5pbWF0aW9uXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSBhbnkgYW5pbWF0ZWQgc3R5bGVzXG4gICAgICAgIHRoaXMuYW5pbWF0ZWQgPSB0aGlzLmNvbmZpZy5zY2VuZS5hbmltYXRlZCAhPT0gdW5kZWZpbmVkID8gdGhpcy5jb25maWcuc2NlbmUuYW5pbWF0ZWQgOiBhbmltYXRlZDtcblxuICAgICAgICAvLyBDb21waWxlIG5ld2x5IGFjdGl2ZSBzdHlsZXNcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlX3N0eWxlcykuZmlsdGVyKHMgPT4gcHJldl9zdHlsZXMuaW5kZXhPZihzKSA9PT0gLTEpO1xuICAgIH1cblxuICAgIC8vIEdldCBhY3RpdmUgY2FtZXJhIC0gZm9yIHB1YmxpYyBBUElcbiAgICBnZXRBY3RpdmVDYW1lcmEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXcuZ2V0QWN0aXZlQ2FtZXJhKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGFjdGl2ZSBjYW1lcmEgLSBmb3IgcHVibGljIEFQSVxuICAgIHNldEFjdGl2ZUNhbWVyYShuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXcuc2V0QWN0aXZlQ2FtZXJhKG5hbWUpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBsaWdodGluZ1xuICAgIGNyZWF0ZUxpZ2h0cygpIHtcbiAgICAgICAgdGhpcy5saWdodHMgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSBpbiB0aGlzLmNvbmZpZy5saWdodHMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcubGlnaHRzW2ldIHx8IHR5cGVvZiB0aGlzLmNvbmZpZy5saWdodHNbaV0gIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGlnaHQgPSB0aGlzLmNvbmZpZy5saWdodHNbaV07XG4gICAgICAgICAgICBsaWdodC5uYW1lID0gaS5yZXBsYWNlKCctJywgJ18nKTsgLy8gbGlnaHQgbmFtZXMgYXJlIGluamVjdGVkIGluIHNoYWRlcnMsIGNhbid0IGhhdmUgaHlwaGVuc1xuICAgICAgICAgICAgbGlnaHQudmlzaWJsZSA9IChsaWdodC52aXNpYmxlID09PSBmYWxzZSkgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgICAgICBpZiAobGlnaHQudmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlnaHRzW2xpZ2h0Lm5hbWVdID0gTGlnaHQuY3JlYXRlKHRoaXMudmlldywgbGlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIExpZ2h0LmluamVjdCh0aGlzLmxpZ2h0cyk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGJhY2tncm91bmQgY29sb3JcbiAgICBzZXRCYWNrZ3JvdW5kKCkge1xuICAgICAgICBsZXQgYmcgPSB0aGlzLmNvbmZpZy5zY2VuZS5iYWNrZ3JvdW5kO1xuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB7fTtcbiAgICAgICAgaWYgKGJnICYmIGJnLmNvbG9yKSB7XG4gICAgICAgICAgICB0aGlzLmJhY2tncm91bmQuY29sb3IgPSBTdHlsZVBhcnNlci5wYXJzZUNvbG9yKGJnLmNvbG9yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuYmFja2dyb3VuZC5jb2xvcikge1xuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLmNvbG9yID0gWzAsIDAsIDAsIDBdOyAvLyBkZWZhdWx0IGJhY2tncm91bmQgVE9ETzogdmFyeSB3L3NjZW5lIGFscGhhXG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBiYWNrZ3JvdW5kIGlzIGZ1bGx5IG9wYXF1ZSwgc2V0IGNhbnZhcyBiYWNrZ3JvdW5kIHRvIG1hdGNoXG4gICAgICAgIGlmICh0aGlzLmJhY2tncm91bmQuY29sb3JbM10gPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICAgICAgICAgICAgYHJnYmEoJHt0aGlzLmJhY2tncm91bmQuY29sb3IubWFwKGMgPT4gTWF0aC5mbG9vcihjICogMjU1KSkuam9pbignLCAnKX0pYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgc2NlbmUgY29uZmlnLCBhbmQgb3B0aW9uYWxseSByZWJ1aWxkIGdlb21ldHJ5XG4gICAgLy8gcmVidWlsZCBjYW4gYmUgYm9vbGVhbiwgb3IgYW4gb2JqZWN0IGNvbnRhaW5pbmcgcmVidWlsZCBvcHRpb25zIHRvIHBhc3N0aHJvdWdoXG4gICAgdXBkYXRlQ29uZmlnKHsgcmVidWlsZCB9ID0ge30pIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0aW9uKys7XG4gICAgICAgIHRoaXMudXBkYXRpbmcrKztcbiAgICAgICAgdGhpcy5jb25maWcuc2NlbmUgPSB0aGlzLmNvbmZpZy5zY2VuZSB8fCB7fTtcblxuICAgICAgICBTdHlsZU1hbmFnZXIuaW5pdCgpO1xuICAgICAgICB0aGlzLnZpZXcucmVzZXQoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVMaWdodHMoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEYXRhU291cmNlcygpO1xuICAgICAgICB0aGlzLmxvYWRUZXh0dXJlcygpO1xuICAgICAgICB0aGlzLnNldEJhY2tncm91bmQoKTtcblxuICAgICAgICAvLyBUT0RPOiBkZXRlY3QgY2hhbmdlcyB0byBzdHlsZXM/IGFscmVhZHkgKGN1cnJlbnRseSkgbmVlZCB0byByZWNvbXBpbGUgYW55d2F5IHdoZW4gY2FtZXJhIG9yIGxpZ2h0cyBjaGFuZ2VcbiAgICAgICAgdGhpcy51cGRhdGVTdHlsZXMoKTtcblxuICAgICAgICAvLyBPcHRpb25hbGx5IHJlYnVpbGQgZ2VvbWV0cnlcbiAgICAgICAgbGV0IGRvbmUgPSByZWJ1aWxkID9cbiAgICAgICAgICAgIHRoaXMucmVidWlsZEdlb21ldHJ5KHR5cGVvZiByZWJ1aWxkID09PSAnb2JqZWN0JyAmJiByZWJ1aWxkKSA6XG4gICAgICAgICAgICB0aGlzLnN5bmNDb25maWdUb1dvcmtlcigpOyAvLyByZWJ1aWxkR2VvbWV0cnkoKSBhbHNvIHN5bmNzIGNvbmZpZ1xuXG4gICAgICAgIC8vIEZpbmlzaCBieSB1cGRhdGluZyBib3VuZHMgYW5kIHJlLXJlbmRlcmluZ1xuICAgICAgICByZXR1cm4gZG9uZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRpbmctLTtcbiAgICAgICAgICAgIHRoaXMudmlldy51cGRhdGVCb3VuZHMoKTtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFJlZHJhdygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTZXJpYWxpemUgY29uZmlnIGFuZCBzZW5kIHRvIHdvcmtlclxuICAgIHN5bmNDb25maWdUb1dvcmtlcigpIHtcbiAgICAgICAgLy8gVGVsbCB3b3JrZXJzIHdlJ3JlIGFib3V0IHRvIHJlYnVpbGQgKHNvIHRoZXkgY2FuIHVwZGF0ZSBzdHlsZXMsIGV0Yy4pXG4gICAgICAgIHRoaXMuY29uZmlnX3NlcmlhbGl6ZWQgPSBVdGlscy5zZXJpYWxpemVXaXRoRnVuY3Rpb25zKHRoaXMuY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh0aGlzLndvcmtlcnMsICdzZWxmLnVwZGF0ZUNvbmZpZycsIHtcbiAgICAgICAgICAgIGNvbmZpZzogdGhpcy5jb25maWdfc2VyaWFsaXplZCxcbiAgICAgICAgICAgIGdlbmVyYXRpb246IHRoaXMuZ2VuZXJhdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXNldEZlYXR1cmVTZWxlY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IEZlYXR1cmVTZWxlY3Rpb24odGhpcy5nbCwgdGhpcy53b3JrZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLndvcmtlcnMpIHtcbiAgICAgICAgICAgIFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh0aGlzLndvcmtlcnMsICdzZWxmLnJlc2V0RmVhdHVyZVNlbGVjdGlvbicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0cyB0aGUgY3VycmVudCBmZWF0dXJlIHNlbGVjdGlvbiBtYXAgc2l6ZSBhY3Jvc3MgYWxsIHdvcmtlcnMuIFJldHVybnMgYSBwcm9taXNlLlxuICAgIGdldEZlYXR1cmVTZWxlY3Rpb25NYXBTaXplKCkge1xuICAgICAgICBpZiAodGhpcy5mZXRjaGluZ19zZWxlY3Rpb25fbWFwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZldGNoaW5nX3NlbGVjdGlvbl9tYXAgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2UodGhpcy53b3JrZXJzLCAnc2VsZi5nZXRGZWF0dXJlU2VsZWN0aW9uTWFwU2l6ZScpXG4gICAgICAgICAgICAudGhlbihzaXplcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaGluZ19zZWxlY3Rpb25fbWFwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpemVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgaW50ZXJuYWwgY2xvY2ssIG1vc3RseSB1c2VmdWwgZm9yIGNvbnNpc3RlbnQgZXhwZXJpZW5jZSB3aGVuIGNoYW5naW5nIHN0eWxlcy9kZWJ1Z2dpbmdcbiAgICByZXNldFRpbWUoKSB7XG4gICAgICAgIHRoaXMuc3RhcnRfdGltZSA9ICtuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIEZpcmVzIGV2ZW50IHdoZW4gcmVuZGVyZWQgdGlsZSBzZXQgb3Igc3R5bGUgY2hhbmdlc1xuICAgIHVwZGF0ZVZpZXdDb21wbGV0ZSAoKSB7XG4gICAgICAgIGlmICgodGhpcy5yZW5kZXJfY291bnRfY2hhbmdlZCB8fCB0aGlzLmdlbmVyYXRpb24gIT09IHRoaXMubGFzdF9jb21wbGV0ZV9nZW5lcmF0aW9uKSAmJlxuICAgICAgICAgICAgIXRoaXMudGlsZV9tYW5hZ2VyLmlzTG9hZGluZ1Zpc2libGVUaWxlcygpKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RfY29tcGxldGVfZ2VuZXJhdGlvbiA9IHRoaXMuZ2VuZXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndmlld19jb21wbGV0ZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRWaWV3Q29tcGxldGUgKCkge1xuICAgICAgICB0aGlzLmxhc3RfY29tcGxldGVfZ2VuZXJhdGlvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gVGFrZSBhIHNjcmVlbnNob3RcbiAgICAvLyBBc3luY2hyb25vdXMgYmVjYXVzZSB3ZSBoYXZlIHRvIHdhaXQgZm9yIG5leHQgcmVuZGVyIHRvIGNhcHR1cmUgYnVmZmVyXG4gICAgLy8gUmV0dXJucyBhIHByb21pc2VcbiAgICBzY3JlZW5zaG90ICgpIHtcbiAgICAgICAgaWYgKHRoaXMucXVldWVfc2NyZWVuc2hvdCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWV1ZV9zY3JlZW5zaG90LnByb21pc2U7IC8vIG9ubHkgY2FwdHVyZSBvbmUgc2NyZWVuc2hvdCBhdCBhIHRpbWVcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVxdWVzdFJlZHJhdygpO1xuXG4gICAgICAgIC8vIFdpbGwgcmVzb2x2ZSBvbmNlIHJlbmRlcmluZyBpcyBjb21wbGV0ZSBhbmQgcmVuZGVyIGJ1ZmZlciBpcyBjYXB0dXJlZFxuICAgICAgICB0aGlzLnF1ZXVlX3NjcmVlbnNob3QgPSB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZV9zY3JlZW5zaG90LnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlX3NjcmVlbnNob3QucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlX3NjcmVlbnNob3QucmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVldWVfc2NyZWVuc2hvdC5wcm9taXNlO1xuICAgIH1cblxuICAgIC8vIENhbGxlZCBhZnRlciByZW5kZXJpbmcsIGNhcHR1cmVzIHJlbmRlciBidWZmZXIgYW5kIHJlc29sdmVzIHByb21pc2Ugd2l0aCBpbWFnZSBkYXRhXG4gICAgY29tcGxldGVTY3JlZW5zaG90ICgpIHtcbiAgICAgICAgaWYgKHRoaXMucXVldWVfc2NyZWVuc2hvdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBHZXQgZGF0YSBVUkwsIGNvbnZlcnQgdG8gYmxvYlxuICAgICAgICAgICAgLy8gU3RyaXAgaG9zdC9taW1ldHlwZS9ldGMuLCBjb252ZXJ0IGJhc2U2NCB0byBiaW5hcnkgd2l0aG91dCBVVEYtOCBtYW5nbGluZ1xuICAgICAgICAgICAgLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS91bmNvbmVkLzQzNzA4MjJcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLmNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuICAgICAgICAgICAgdmFyIGRhdGEgPSBhdG9iKHVybC5zbGljZSgyMikpO1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGRhdGEubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IGRhdGEuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2ltYWdlL3BuZycgfSk7XG5cbiAgICAgICAgICAgIC8vIFJlc29sdmUgd2l0aCBzY3JlZW5zaG90IGRhdGFcbiAgICAgICAgICAgIHRoaXMucXVldWVfc2NyZWVuc2hvdC5yZXNvbHZlKHsgdXJsLCBibG9iIH0pO1xuICAgICAgICAgICAgdGhpcy5xdWV1ZV9zY3JlZW5zaG90ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLy8gU3RhdHMvZGVidWcvcHJvZmlsaW5nIG1ldGhvZHNcblxuICAgIC8vIExvZyBtZXNzYWdlcyBwYXNzIHRocm91Z2ggZnJvbSB3ZWIgd29ya2Vyc1xuICAgIHdvcmtlckxvZ01lc3NhZ2UoZXZlbnQpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGV2ZW50LmRhdGEpIDogZXZlbnQuZGF0YTsgLy8gb3B0aW9uYWwgdW4tc3RyaW5naWZ5XG4gICAgICAgIGlmIChkYXRhLnR5cGUgIT09ICdsb2cnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeyB3b3JrZXJfaWQsIGxldmVsLCBtc2cgfSA9IGRhdGE7XG5cbiAgICAgICAgaWYgKGxvZ1tsZXZlbF0pIHtcbiAgICAgICAgICAgIGxvZ1tsZXZlbF0oYHdvcmtlciAke3dvcmtlcl9pZH06YCwgIC4uLm1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoYFNjZW5lLndvcmtlckxvZ01lc3NhZ2U6IHVucmVjb2duaXplZCBsb2cgbGV2ZWwgJHtsZXZlbH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2ZpbGUgaGVscGVycywgaXNzdWVzIGEgcHJvZmlsZSBvbiBtYWluIHRocmVhZCAmIGFsbCB3b3JrZXJzXG4gICAgX3Byb2ZpbGUobmFtZSkge1xuICAgICAgICBjb25zb2xlLnByb2ZpbGUoYG1haW4gdGhyZWFkOiAke25hbWV9YCk7XG4gICAgICAgIFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh0aGlzLndvcmtlcnMsICdzZWxmLnByb2ZpbGUnLCBuYW1lKTtcbiAgICB9XG5cbiAgICBfcHJvZmlsZUVuZChuYW1lKSB7XG4gICAgICAgIGNvbnNvbGUucHJvZmlsZUVuZChgbWFpbiB0aHJlYWQ6ICR7bmFtZX1gKTtcbiAgICAgICAgV29ya2VyQnJva2VyLnBvc3RNZXNzYWdlKHRoaXMud29ya2VycywgJ3NlbGYucHJvZmlsZUVuZCcsIG5hbWUpO1xuICAgIH1cblxuICAgIC8vIERlYnVnIGNvbmZpZyBhbmQgZnVuY3Rpb25zXG4gICAgc2V0dXBEZWJ1ZyAoKSB7XG4gICAgICAgIGxldCBzY2VuZSA9IHRoaXM7XG4gICAgICAgIHRoaXMuZGVidWcgPSB7XG4gICAgICAgICAgICBwcm9maWxlOiB7XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnlfYnVpbGQ6IGZhbHNlXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyBSZWJ1aWxkIGdlb21ldHJ5IGEgZ2l2ZW4gIyBvZiB0aW1lcyBhbmQgcHJpbnQgYXZlcmFnZSwgbWluLCBtYXggdGltaW5nc1xuICAgICAgICAgICAgdGltZVJlYnVpbGQgKG51bSA9IDEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgICAgIGxldCB0aW1lcyA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBjeWNsZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXJ0ID0gK25ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLnJlYnVpbGQob3B0aW9ucykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lcy5wdXNoKCtuZXcgRGF0ZSgpIC0gc3RhcnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltZXMubGVuZ3RoIDwgbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhdmcgPSB+fih0aW1lcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiKSAvIHRpbWVzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oYFByb2ZpbGVkIHJlYnVpbGQgJHtudW19IHRpbWVzOiAke2F2Z30gYXZnICgke01hdGgubWluKC4uLnRpbWVzKX0gbWluLCAke01hdGgubWF4KC4uLnRpbWVzKX0gbWF4KWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGN5Y2xlKCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyBSZXR1cm4gZ2VvbWV0cnkgY291bnRzIG9mIHZpc2libGUgdGlsZXMsIGdyb3VwZWQgYnkgc3R5bGUgbmFtZVxuICAgICAgICAgICAgZ2VvbWV0cnlDb3VudEJ5U3R5bGUgKCkge1xuICAgICAgICAgICAgICAgIGxldCBjb3VudHMgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB0aWxlIG9mIHNjZW5lLnRpbGVfbWFuYWdlci5nZXRSZW5kZXJhYmxlVGlsZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdHlsZSBpbiB0aWxlLm1lc2hlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzW3N0eWxlXSA9IGNvdW50c1tzdHlsZV0gfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c1tzdHlsZV0gKz0gdGlsZS5tZXNoZXNbc3R5bGVdLmdlb21ldHJ5X2NvdW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3VudHM7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZW9tZXRyeUNvdW50QnlCYXNlU3R5bGUgKCkge1xuICAgICAgICAgICAgICAgIGxldCBzdHlsZV9jb3VudHMgPSBzY2VuZS5kZWJ1Zy5nZW9tZXRyeUNvdW50QnlTdHlsZSgpO1xuICAgICAgICAgICAgICAgIGxldCBjb3VudHMgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzdHlsZSBpbiBzdHlsZV9jb3VudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJhc2UgPSBzY2VuZS5zdHlsZXNbc3R5bGVdLmJ1aWx0X2luID8gc3R5bGUgOiBzY2VuZS5zdHlsZXNbc3R5bGVdLmJhc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50c1tiYXNlXSA9IGNvdW50c1tiYXNlXSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICBjb3VudHNbYmFzZV0gKz0gc3R5bGVfY291bnRzW3N0eWxlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCBVdGlscyBmcm9tICcuL3V0aWxzL3V0aWxzJztcbmltcG9ydCBHTFNMIGZyb20gJy4vZ2wvZ2xzbCc7XG5pbXBvcnQge1N0eWxlUGFyc2VyfSBmcm9tICcuL3N0eWxlcy9zdHlsZV9wYXJzZXInO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tICcuL3V0aWxzL21lcmdlJztcblxudmFyIFNjZW5lTG9hZGVyO1xuXG5leHBvcnQgZGVmYXVsdCBTY2VuZUxvYWRlciA9IHtcblxuICAgIC8vIExvYWQgc2NlbmVzIGRlZmluaXRpb25zIGZyb20gVVJMICYgcHJvcHJvY2Vzc1xuICAgIGxvYWRTY2VuZSh1cmwsIHBhdGggPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBTY2VuZUxvYWRlci5sb2FkU2NlbmVSZWN1cnNpdmUodXJsLCBwYXRoKS50aGVuKFNjZW5lTG9hZGVyLmZpbmFsaXplKTtcbiAgICB9LFxuXG4gICAgLy8gTG9hZHMgc2NlbmUgZmlsZXMgZnJvbSBVUkwsIHJlY3Vyc2l2ZWx5IGxvYWRpbmcgJ2ltcG9ydCcgc2NlbmVzXG4gICAgLy8gT3B0aW9uYWwgKmluaXRpYWwqIHBhdGggb25seSAod29uJ3QgYmUgcGFzc2VkIHRvIHJlY3Vyc2l2ZSAnaW1wb3J0JyBjYWxscylcbiAgICAvLyBVc2VmdWwgZm9yIGxvYWRpbmcgcmVzb3VyY2VzIGluIGJhc2Ugc2NlbmUgZmlsZSBmcm9tIGEgc2VwYXJhdGUgbG9jYXRpb25cbiAgICAvLyAoZS5nLiBpbiBUYW5ncmFtIFBsYXksIHdoZW4gbW9kaWZpZWQgbG9jYWwgc2NlbmUgc2hvdWxkIHN0aWxsIHJlZmVyIHRvIG9yaWdpbmFsIHJlc291cmNlIFVSTHMpXG4gICAgbG9hZFNjZW5lUmVjdXJzaXZlKHVybCwgcGF0aCA9IG51bGwpIHtcbiAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXRoID0gcGF0aCB8fCBVdGlscy5wYXRoRm9yVVJMKHVybCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gVXRpbHMubG9hZFJlc291cmNlKHVybCkudGhlbihjb25maWcgPT4ge1xuICAgICAgICAgICAgLy8gYWNjZXB0IHNpbmdsZS1zdHJpbmcgb3IgYXJyYXlcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmltcG9ydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuaW1wb3J0ID0gW2NvbmZpZy5pbXBvcnRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLmltcG9ydCkpIHtcbiAgICAgICAgICAgICAgICBTY2VuZUxvYWRlci5ub3JtYWxpemUoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb2xsZWN0IFVSTHMgb2Ygc2NlbmVzIHRvIGltcG9ydFxuICAgICAgICAgICAgbGV0IGltcG9ydHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHVybCBvZiBjb25maWcuaW1wb3J0KSB7XG4gICAgICAgICAgICAgICAgaW1wb3J0cy5wdXNoKFV0aWxzLmFkZEJhc2VVUkwodXJsLCBwYXRoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLmltcG9ydDsgLy8gZG9uJ3Qgd2FudCB0byBtZXJnZSB0aGlzIHByb3BlcnR5XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLlxuICAgICAgICAgICAgICAgIGFsbChpbXBvcnRzLm1hcCh1cmwgPT4gU2NlbmVMb2FkZXIubG9hZFNjZW5lUmVjdXJzaXZlKHVybCkpKS5cbiAgICAgICAgICAgICAgICB0aGVuKGNvbmZpZ3MgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZU9iamVjdHMoe30sIC4uLmNvbmZpZ3MsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIFNjZW5lTG9hZGVyLm5vcm1hbGl6ZShjb25maWcsIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLy8gTm9ybWFsaXplIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgYWRqdXN0IHdpdGhpbiBlYWNoIGxvY2FsIHNjZW5lIGZpbGUgKHVzdWFsbHkgYnkgcGF0aClcbiAgICBub3JtYWxpemUoY29uZmlnLCBwYXRoKSB7XG4gICAgICAgIFNjZW5lTG9hZGVyLm5vcm1hbGl6ZURhdGFTb3VyY2VzKGNvbmZpZywgcGF0aCk7XG4gICAgICAgIFNjZW5lTG9hZGVyLm5vcm1hbGl6ZVRleHR1cmVzKGNvbmZpZywgcGF0aCk7XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfSxcblxuICAgIC8vIEV4cGFuZCBwYXRocyBmb3IgZGF0YSBzb3VyY2VcbiAgICBub3JtYWxpemVEYXRhU291cmNlcyhjb25maWcsIHBhdGgpIHtcbiAgICAgICAgY29uZmlnLnNvdXJjZXMgPSBjb25maWcuc291cmNlcyB8fCB7fTtcblxuICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2YgIFV0aWxzLnZhbHVlcyhjb25maWcuc291cmNlcykpIHtcbiAgICAgICAgICAgIHNvdXJjZS51cmwgPSBVdGlscy5hZGRCYXNlVVJMKHNvdXJjZS51cmwsIHBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9LFxuXG4gICAgLy8gRXhwYW5kIHBhdGhzIGFuZCBjZW50cmFsaXplIHRleHR1cmUgZGVmaW5pdGlvbnMgZm9yIGEgc2NlbmUgb2JqZWN0XG4gICAgbm9ybWFsaXplVGV4dHVyZXMoY29uZmlnLCBwYXRoKSB7XG4gICAgICAgIGNvbmZpZy50ZXh0dXJlcyA9IGNvbmZpZy50ZXh0dXJlcyB8fCB7fTtcblxuICAgICAgICAvLyBNb3ZlIFwibG9jYWxseSBkZWZpbmVkXCIgdGV4dHVyZXMsIGUuZy4gdGhvc2Ugc3BlY2lmaWVkIGFzIHN0cmluZ3Mgb3IgYmxvY2tzLFxuICAgICAgICAvLyB0byB0aGUgc2NlbmUncyB0b3AtbGV2ZWwgc2V0IG9mIHRleHR1cmVzIChjb25maWcudGV4dHVyZXMpLiBUaGVyZSBhcmUgMyBzdWNoIHR5cGVzIG9mIHRleHR1cmVzOlxuICAgICAgICAvLyAtIGluIGEgc3R5bGUncyBgdGV4dHVyZWAgcHJvcGVydHkgKHRleHR1cmUgY2FuIGJlIHNwZWNpZmllZCBhcyBzdHJpbmcgb3Igb2JqZWN0KVxuICAgICAgICAvLyAtIGluIGEgc3R5bGUncyBgbWF0ZXJpYWxgIHByb3BlcnRpZXMgKHRleHR1cmUgY2FuIGJlIHNwZWNpZmllZCBhcyBzdHJpbmcgb3Igb2JqZWN0KVxuICAgICAgICAvLyAtIGluIGEgc3R5bGUncyBjdXN0b20gdW5pZm9ybXMgKGBzaGFkZXJzLnVuaWZvcm1zYCkgKHRleHR1cmUgY2FuIGJlIHNwZWNpZmllZCBhcyBzdHJpbmcgb25seSlcbiAgICAgICAgLy9cbiAgICAgICAgLy8gRm9yIHRleHR1cmVzIHNwZWNpZmllZCBhcyBzdHJpbmdzLCB3ZSBmaXJzdCBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSB0ZXh0dXJlIGFscmVhZHkgZGVmaW5lZFxuICAgICAgICAvLyB3aXRoIHRoYXQgc3RyaW5nIG5hbWUuIElmIHRoZXJlIElTLCB0aGVuIG5vIGNoYW5nZXMgYXJlIG1hZGUuIElmIHRoZXJlIGlzIE5PVCwgdGhlbiB0aGUgdGV4dHVyZSBzdHJpbmdcbiAgICAgICAgLy8gaXMgYXNzdW1lZCB0byBiZSBhIFVSTC4gQSB0b3AtbGV2ZWwgYGNvbmZpZy50ZXh0dXJlc2Agb2JqZWN0IGlzIGNyZWF0ZWQgZm9yIHRoZSB0ZXh0dXJlICh3aXRoIGEgcHJpdmF0ZSxcbiAgICAgICAgLy8gc3ludGhldGljIHRleHR1cmUgbmFtZSk7IHRoZSB0ZXh0dXJlJ3MgVVJMIHdpbGwgYmUgZXhwYW5kZWQgdG8gaW5jbHVkZSB0aGUgY3VycmVudCBzY2VuZSBmaWxlJ3MgcGF0aCBiZWxvdy5cbiAgICAgICAgaWYgKGNvbmZpZy5zdHlsZXMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IFtzdHlsZV9uYW1lLCBzdHlsZV0gb2YgVXRpbHMuZW50cmllcyhjb25maWcuc3R5bGVzKSkge1xuICAgICAgICAgICAgICAgIC8vIFN0eWxlIGB0ZXh0dXJlYFxuICAgICAgICAgICAgICAgIGlmIChzdHlsZS50ZXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXggPSBzdHlsZS50ZXh0dXJlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRleHR1cmUgYnkgVVJMIChzdHJpbmctbmFtZWQgdGV4dHVyZSBub3QgcmVmZXJlbmNpbmcgZXhpc3RpbmcgdGV4dHVyZSBkZWZpbml0aW9uKVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRleCA9PT0gJ3N0cmluZycgJiYgIWNvbmZpZy50ZXh0dXJlc1t0ZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dHVyZV9uYW1lID0gJ19fJyArIHN0eWxlX25hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcudGV4dHVyZXNbdGV4dHVyZV9uYW1lXSA9IHsgdXJsOiB0ZXggfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnRleHR1cmUgPSB0ZXh0dXJlX25hbWU7IC8vIHBvaW50IHN0eWxlIHRvIGxvY2F0aW9uIG9mIHRleHR1cmVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIGJ5IG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdGV4ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHR1cmVfbmFtZSA9ICdfXycgKyBzdHlsZV9uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnRleHR1cmVzW3RleHR1cmVfbmFtZV0gPSB0ZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS50ZXh0dXJlID0gdGV4dHVyZV9uYW1lOyAvLyBwb2ludCBzdHlsZSB0byBsb2NhdGlvbiBvZiB0ZXh0dXJlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBNYXRlcmlhbFxuICAgICAgICAgICAgICAgIGlmIChzdHlsZS5tYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBwcm9wIG9mIFsnZW1pc3Npb24nLCAnYW1iaWVudCcsICdkaWZmdXNlJywgJ3NwZWN1bGFyJywgJ25vcm1hbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXRlcmlhbCBwcm9wZXJ0eSBoYXMgYSB0ZXh0dXJlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUubWF0ZXJpYWxbcHJvcF0gIT0gbnVsbCAmJiBzdHlsZS5tYXRlcmlhbFtwcm9wXS50ZXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleCA9IHN0eWxlLm1hdGVyaWFsW3Byb3BdLnRleHR1cmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIGJ5IFVSTCAoc3RyaW5nLW5hbWVkIHRleHR1cmUgbm90IHJlZmVyZW5jaW5nIGV4aXN0aW5nIHRleHR1cmUgZGVmaW5pdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRleCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNvbmZpZy50ZXh0dXJlc1t0ZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0dXJlX25hbWUgPSAnX18nICsgc3R5bGVfbmFtZSArICdfbWF0ZXJpYWxfJyArIHByb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy50ZXh0dXJlc1t0ZXh0dXJlX25hbWVdID0geyB1cmw6IHRleCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5tYXRlcmlhbFtwcm9wXS50ZXh0dXJlID0gdGV4dHVyZV9uYW1lOyAvLyBwb2ludCBzdHlsZSB0byBsb2NhdGlvbiBvZiB0ZXh0dXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRleHR1cmUgYnkgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRleCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHR1cmVfbmFtZSA9ICdfXycgKyBzdHlsZV9uYW1lICsgJ19tYXRlcmlhbF8nICsgcHJvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnRleHR1cmVzW3RleHR1cmVfbmFtZV0gPSB0ZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLm1hdGVyaWFsW3Byb3BdLnRleHR1cmUgPSB0ZXh0dXJlX25hbWU7IC8vIHBvaW50IHN0eWxlIHRvIGxvY2F0aW9uIG9mIHRleHR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBTaGFkZXIgdW5pZm9ybXNcbiAgICAgICAgICAgICAgICBpZiAoc3R5bGUuc2hhZGVycyAmJiBzdHlsZS5zaGFkZXJzLnVuaWZvcm1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHt0eXBlLCB2YWx1ZSwga2V5LCB1bmlmb3Jtc30gb2YgR0xTTC5wYXJzZVVuaWZvcm1zKHN0eWxlLnNoYWRlcnMudW5pZm9ybXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIGJ5IFVSTCAoc3RyaW5nLW5hbWVkIHRleHR1cmUgbm90IHJlZmVyZW5jaW5nIGV4aXN0aW5nIHRleHR1cmUgZGVmaW5pdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnc2FtcGxlcjJEJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFjb25maWcudGV4dHVyZXNbdmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHR1cmVfbmFtZSA9ICdfXycgKyBzdHlsZV9uYW1lICsgJ191bmlmb3JtXycgKyBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnRleHR1cmVzW3RleHR1cmVfbmFtZV0gPSB7IHVybDogdmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtc1trZXldID0gdGV4dHVyZV9uYW1lOyAvLyBwb2ludCBzdHlsZSB0byBsb2NhdGlvbiBvZiB0ZXh0dXJlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBjdXJyZW50IHNjZW5lIGZpbGUgYmFzZSBwYXRoIHRvIHRleHR1cmVzXG4gICAgICAgIC8vIE9ubHkgYWRkcyBwYXRoIGZvciB0ZXh0dXJlcyB3aXRoIHJlbGF0aXZlIFVSTHMsIHNvIHRleHR1cmVzIGluIGltcG9ydGVkIHNjZW5lcyBnZXQgdGhlIGJhc2VcbiAgICAgICAgLy8gcGF0aCBvZiB0aGVpciBpbW1lZGlhdGUgc2NlbmUgZmlsZVxuICAgICAgICBpZiAoY29uZmlnLnRleHR1cmVzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB0ZXh0dXJlIG9mIFV0aWxzLnZhbHVlcyhjb25maWcudGV4dHVyZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUudXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmUudXJsID0gVXRpbHMuYWRkQmFzZVVSTCh0ZXh0dXJlLnVybCwgcGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9LFxuXG4gICAgLy8gTm9ybWFsaXplIHNvbWUgc2NlbmUtd2lkZSBzZXR0aW5ncyB0aGF0IGFwcGx5IHRvIHRoZSBmaW5hbCwgbWVyZ2VkIHNjZW5lXG4gICAgZmluYWxpemUoY29uZmlnKSB7XG4gICAgICAgIC8vIFJlcGxhY2UgZ2xvYmFsIHNjZW5lIHByb3BlcnRpZXNcbiAgICAgICAgY29uZmlnID0gU3R5bGVQYXJzZXIuYXBwbHlHbG9iYWxQcm9wZXJ0aWVzKGNvbmZpZyk7XG5cbiAgICAgICAgLy8gQXNzaWduIGlkcyB0byBkYXRhIHNvdXJjZXNcbiAgICAgICAgbGV0IHNvdXJjZV9pZCA9IDA7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBpbiBjb25maWcuc291cmNlcykge1xuICAgICAgICAgICAgY29uZmlnLnNvdXJjZXNbc291cmNlXS5pZCA9IHNvdXJjZV9pZCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgb25seSBvbmUgY2FtZXJhIHNwZWNpZmllZCwgc2V0IGl0IGFzIGRlZmF1bHRcbiAgICAgICAgY29uZmlnLmNhbWVyYXMgPSBjb25maWcuY2FtZXJhcyB8fCB7fTtcbiAgICAgICAgaWYgKGNvbmZpZy5jYW1lcmEpIHtcbiAgICAgICAgICAgIGNvbmZpZy5jYW1lcmFzLmRlZmF1bHQgPSBjb25maWcuY2FtZXJhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbm8gY2FtZXJhcyBzcGVjaWZpZWQsIGNyZWF0ZSBvbmVcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNvbmZpZy5jYW1lcmFzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbmZpZy5jYW1lcmFzLmRlZmF1bHQgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIG5vIGNhbWVyYSBzZXQgYXMgYWN0aXZlLCB1c2UgZmlyc3Qgb25lXG4gICAgICAgIGxldCBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgY2FtZXJhIG9mIFV0aWxzLnZhbHVlcyhjb25maWcuY2FtZXJhcykpIHtcbiAgICAgICAgICAgIGlmIChjYW1lcmEuYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWN0aXZlKSB7XG4gICAgICAgICAgICBjb25maWcuY2FtZXJhc1tPYmplY3Qua2V5cyhjb25maWcuY2FtZXJhcylbMF1dLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbnN1cmUgdG9wLWxldmVsIHByb3BlcnRpZXNcbiAgICAgICAgY29uZmlnLmxpZ2h0cyA9IGNvbmZpZy5saWdodHMgfHwge307XG4gICAgICAgIGNvbmZpZy5zdHlsZXMgPSBjb25maWcuc3R5bGVzIHx8IHt9O1xuICAgICAgICBjb25maWcubGF5ZXJzID0gY29uZmlnLmxheWVycyB8fCB7fTtcblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxufTtcbiIsIi8qanNoaW50IHdvcmtlcjogdHJ1ZSovXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi91dGlscy91dGlscyc7XG5pbXBvcnQgV29ya2VyQnJva2VyIGZyb20gJy4vdXRpbHMvd29ya2VyX2Jyb2tlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tICcuL3V0aWxzL21lcmdlJztcbmltcG9ydCBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgRGF0YVNvdXJjZSBmcm9tICcuL3NvdXJjZXMvZGF0YV9zb3VyY2UnO1xuaW1wb3J0IEZlYXR1cmVTZWxlY3Rpb24gZnJvbSAnLi9zZWxlY3Rpb24nO1xuaW1wb3J0IHtTdHlsZVBhcnNlcn0gZnJvbSAnLi9zdHlsZXMvc3R5bGVfcGFyc2VyJztcbmltcG9ydCB7U3R5bGVNYW5hZ2VyfSBmcm9tICcuL3N0eWxlcy9zdHlsZV9tYW5hZ2VyJztcbmltcG9ydCB7cGFyc2VSdWxlc30gZnJvbSAnLi9zdHlsZXMvcnVsZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL2dsL3RleHR1cmUnO1xuXG5leHBvcnQgdmFyIFNjZW5lV29ya2VyID0gc2VsZjtcblxuLy8gV29ya2VyIGZ1bmN0aW9uYWxpdHkgd2lsbCBvbmx5IGJlIGRlZmluZWQgaW4gd29ya2VyIHRocmVhZFxuaWYgKFV0aWxzLmlzV29ya2VyVGhyZWFkKSB7XG5cbk9iamVjdC5hc3NpZ24oc2VsZiwge1xuXG4gICAgRmVhdHVyZVNlbGVjdGlvbixcblxuICAgIHNvdXJjZXM6IHtcbiAgICAgICAgdGlsZXM6IHt9LFxuICAgICAgICBvYmplY3RzOiB7fVxuICAgIH0sXG4gICAgc3R5bGVzOiB7fSxcbiAgICBydWxlczoge30sXG4gICAgbGF5ZXJzOiB7fSxcbiAgICB0aWxlczoge30sXG4gICAgb2JqZWN0czoge30sXG4gICAgY29uZmlnOiB7fSwgICAgIC8vIHJhdyBjb25maWcgKGUuZy4gZnVuY3Rpb25zLCBldGMuIG5vdCBleHBhbmRlZClcblxuICAgIC8vIEluaXRpYWxpemUgd29ya2VyXG4gICAgaW5pdCAod29ya2VyX2lkLCBudW1fd29ya2VycywgZGV2aWNlX3BpeGVsX3JhdGlvKSB7XG4gICAgICAgIHNlbGYuX3dvcmtlcl9pZCA9IHdvcmtlcl9pZDtcbiAgICAgICAgc2VsZi5udW1fd29ya2VycyA9IG51bV93b3JrZXJzO1xuICAgICAgICBVdGlscy5kZXZpY2VfcGl4ZWxfcmF0aW8gPSBkZXZpY2VfcGl4ZWxfcmF0aW87XG4gICAgICAgIEZlYXR1cmVTZWxlY3Rpb24uc2V0UHJlZml4KHNlbGYuX3dvcmtlcl9pZCk7XG4gICAgICAgIHJldHVybiB3b3JrZXJfaWQ7XG4gICAgfSxcblxuICAgIC8vIFN0YXJ0cyBhIGNvbmZpZyByZWZyZXNoXG4gICAgdXBkYXRlQ29uZmlnICh7IGNvbmZpZywgZ2VuZXJhdGlvbiB9KSB7XG4gICAgICAgIGNvbmZpZyA9IEpTT04ucGFyc2UoY29uZmlnKTtcblxuICAgICAgICBzZWxmLmxhc3RfY29uZmlnID0gbWVyZ2VPYmplY3RzKHt9LCBzZWxmLmNvbmZpZyk7XG4gICAgICAgIHNlbGYuY29uZmlnID0gbWVyZ2VPYmplY3RzKHt9LCBjb25maWcpO1xuICAgICAgICBzZWxmLmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uO1xuXG4gICAgICAgIC8vIERhdGEgYmxvY2sgZnVuY3Rpb25zIGFyZSBub3QgY29udGV4dCB3cmFwcGVkIGxpa2UgdGhlIHJlc3Qgb2YgdGhlIHN0eWxlIGZ1bmN0aW9ucyBhcmVcbiAgICAgICAgLy8gVE9ETzogcHJvYmFibHkgd2FudCBhIGNsZWFuZXIgd2F5IHRvIGV4Y2x1ZGUgdGhlc2VcbiAgICAgICAgZm9yIChsZXQgbGF5ZXIgaW4gY29uZmlnLmxheWVycykge1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5sYXllcnNbbGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmxheWVyc1tsYXllcl0uZGF0YSA9IFV0aWxzLnN0cmluZ3NUb0Z1bmN0aW9ucyhjb25maWcubGF5ZXJzW2xheWVyXS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4cGFuZCBnbG9iYWwgcHJvcGVydGllc1xuICAgICAgICBzZWxmLmdsb2JhbCA9IFV0aWxzLnN0cmluZ3NUb0Z1bmN0aW9ucyhjb25maWcuZ2xvYmFsKTtcblxuICAgICAgICAvLyBDcmVhdGUgZGF0YSBzb3VyY2VzXG4gICAgICAgIGNvbmZpZy5zb3VyY2VzID0gVXRpbHMuc3RyaW5nc1RvRnVuY3Rpb25zKGNvbmZpZy5zb3VyY2VzKTsgLy8gcGFyc2UgbmV3IHNvdXJjZXNcbiAgICAgICAgc2VsZi5zb3VyY2VzLnRpbGVzID0ge307IC8vIGNsZWFyIHByZXZpb3VzIHNvdXJjZXNcbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBjb25maWcuc291cmNlcykge1xuICAgICAgICAgICAgbGV0IHNvdXJjZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc291cmNlID0gRGF0YVNvdXJjZS5jcmVhdGUoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnLnNvdXJjZXNbbmFtZV0sIHtuYW1lfSksIHNlbGYuc291cmNlcy50aWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2UudGlsZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZXMudGlsZXNbbmFtZV0gPSBzb3VyY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEaXN0cmlidXRlIG9iamVjdCBzb3VyY2VzIGFjcm9zcyB3b3JrZXJzXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5pZCAlIHNlbGYubnVtX3dvcmtlcnMgPT09IHNlbGYuX3dvcmtlcl9pZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIHNvdXJjZSBpZiBub3QgY2FjaGVkXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlcy5vYmplY3RzW25hbWVdID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGYub2JqZWN0c1tzb3VyY2UubmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub2JqZWN0c1tzb3VyY2UubmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5sb2FkKHNlbGYub2JqZWN0c1tzb3VyY2UubmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xlYXIgdGlsZSBjYWNoZSBpZiBkYXRhIHNvdXJjZSBjb25maWcgY2hhbmdlZFxuICAgICAgICBpZiAoIXNlbGYuY29uZmlnLnNvdXJjZXMgfHxcbiAgICAgICAgICAgICFzZWxmLmxhc3RfY29uZmlnLnNvdXJjZXMgfHxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHNlbGYuY29uZmlnLnNvdXJjZXMpLnNvbWUocyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNlbGYuY29uZmlnLnNvdXJjZXNbc10pICE9PSBKU09OLnN0cmluZ2lmeShzZWxmLmxhc3RfY29uZmlnLnNvdXJjZXNbc10pO1xuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgIHNlbGYudGlsZXMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4cGFuZCBzdHlsZXNcbiAgICAgICAgY29uZmlnLnN0eWxlcyA9IFV0aWxzLnN0cmluZ3NUb0Z1bmN0aW9ucyhjb25maWcuc3R5bGVzLCBTdHlsZVBhcnNlci53cmFwRnVuY3Rpb24pO1xuICAgICAgICBzZWxmLnN0eWxlcyA9IFN0eWxlTWFuYWdlci5idWlsZChjb25maWcuc3R5bGVzLCB7IGdlbmVyYXRpb246IHNlbGYuZ2VuZXJhdGlvbiwgc291cmNlczogc2VsZi5zb3VyY2VzLnRpbGVzIH0pO1xuXG4gICAgICAgIC8vIFBhcnNlIGVhY2ggdG9wLWxldmVsIGxheWVyIGFzIGEgc2VwYXJhdGUgcnVsZSB0cmVlXG4gICAgICAgIHNlbGYubGF5ZXJzID0gVXRpbHMuc3RyaW5nc1RvRnVuY3Rpb25zKGNvbmZpZy5sYXllcnMsIFN0eWxlUGFyc2VyLndyYXBGdW5jdGlvbik7XG4gICAgICAgIHNlbGYucnVsZXMgPSBwYXJzZVJ1bGVzKHNlbGYubGF5ZXJzKTtcblxuICAgICAgICAvLyBTeW5jIHRldHh1cmUgaW5mbyBmcm9tIG1haW4gdGhyZWFkXG4gICAgICAgIHNlbGYuc3luY2luZ190ZXh0dXJlcyA9IHNlbGYuc3luY1RleHR1cmVzKGNvbmZpZy50ZXh0dXJlcyk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHByb21pc2UgZm9yIHdoZW4gY29uZmlnIHJlZnJlc2ggZmluaXNoZXNcbiAgICAgICAgc2VsZi5jb25maWd1cmluZyA9IHNlbGYuc3luY2luZ190ZXh0dXJlcy50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIFV0aWxzLmxvZygnZGVidWcnLCBgdXBkYXRlZCBjb25maWdgKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgd2hlbiBjb25maWcgcmVmcmVzaCBpcyBmaW5pc2hlZFxuICAgIGF3YWl0Q29uZmlndXJhdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNvbmZpZ3VyaW5nO1xuICAgIH0sXG5cbiAgICAvLyBCdWlsZCBhIHRpbGU6IGxvYWQgZnJvbSB0aWxlIHNvdXJjZSBpZiBidWlsZGluZyBmb3IgZmlyc3QgdGltZSwgb3RoZXJ3aXNlIHJlYnVpbGQgd2l0aCBleGlzdGluZyBkYXRhXG4gICAgYnVpbGRUaWxlICh7IHRpbGUgfSkge1xuICAgICAgICAvLyBUaWxlIGNhY2hlZD9cbiAgICAgICAgaWYgKHNlbGYuZ2V0VGlsZSh0aWxlLmtleSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQWxyZWFkeSBsb2FkaW5nP1xuICAgICAgICAgICAgaWYgKHNlbGYuZ2V0VGlsZSh0aWxlLmtleSkubG9hZGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSB0aWxlIGNhY2hlXG4gICAgICAgIHRpbGUgPSBzZWxmLnRpbGVzW3RpbGUua2V5XSA9IE9iamVjdC5hc3NpZ24oc2VsZi5nZXRUaWxlKHRpbGUua2V5KSB8fCB7fSwgdGlsZSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGNvbmZpZyAoc3R5bGVzLCBldGMuKSwgdGhlbiBidWlsZCB0aWxlXG4gICAgICAgIHJldHVybiBzZWxmLmF3YWl0Q29uZmlndXJhdGlvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gRmlyc3QgdGltZSBidWlsZGluZyB0aGUgdGlsZVxuICAgICAgICAgICAgaWYgKHRpbGUubG9hZGVkICE9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHRpbGUubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRpbGUubG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRpbGUuZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZFRpbGVTb3VyY2VEYXRhKHRpbGUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxmLmdldFRpbGUodGlsZS5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMubG9nKCd0cmFjZScsIGBzdG9wIHRpbGUgYnVpbGQgYWZ0ZXIgZGF0YSBzb3VyY2UgbG9hZCBiZWNhdXNlIHRpbGUgd2FzIHJlbW92ZWQ6ICR7dGlsZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXYXJuIGFuZCBjb250aW51ZSBvbiBkYXRhIHNvdXJjZSBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbGUuc291cmNlX2RhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5sb2coJ3dhcm4nLCBgdGlsZSBsb2FkIGVycm9yKHMpIGZvciAke3RpbGUua2V5fTogJHt0aWxlLnNvdXJjZV9kYXRhLmVycm9yfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aWxlLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRpbGUuYnVpbGRHZW9tZXRyeSh0aWxlLCBzZWxmKS50aGVuKGtleXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoV29ya2VyQnJva2VyLnJldHVybldpdGhUcmFuc2ZlcmFibGVzKHsgdGlsZTogVGlsZS5zbGljZSh0aWxlLCBrZXlzKSB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWxlLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUubG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWxlLmVycm9yID0gZXJyb3IudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmxvZygnZXJyb3InLCBgdGlsZSBsb2FkIGVycm9yIGZvciAke3RpbGUua2V5fTogJHt0aWxlLmVycm9yfSBhdDogJHtlcnJvci5zdGFja31gKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHRpbGU6IFRpbGUuc2xpY2UodGlsZSkgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGlsZSBhbHJlYWR5IGxvYWRlZCwganVzdCByZWJ1aWxkXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBVdGlscy5sb2coJ3RyYWNlJywgYHVzZWQgd29ya2VyIGNhY2hlIGZvciB0aWxlICR7dGlsZS5rZXl9YCk7XG5cbiAgICAgICAgICAgICAgICAvLyBCdWlsZCBnZW9tZXRyeVxuICAgICAgICAgICAgICAgIHJldHVybiBUaWxlLmJ1aWxkR2VvbWV0cnkodGlsZSwgc2VsZikudGhlbihrZXlzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdvcmtlckJyb2tlci5yZXR1cm5XaXRoVHJhbnNmZXJhYmxlcyh7IHRpbGU6IFRpbGUuc2xpY2UodGlsZSwga2V5cykgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvLyBMb2FkIHRoaXMgdGlsZSdzIGRhdGEgc291cmNlXG4gICAgbG9hZFRpbGVTb3VyY2VEYXRhICh0aWxlKSB7XG4gICAgICAgIGlmIChzZWxmLnNvdXJjZXMudGlsZXNbdGlsZS5zb3VyY2VdKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VzLnRpbGVzW3RpbGUuc291cmNlXS5sb2FkKHRpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGlsZS5zb3VyY2VfZGF0YSA9IHsgZXJyb3I6IGBEYXRhIHNvdXJjZSAnJHt0aWxlLnNvdXJjZX0nIG5vdCBmb3VuZGAgfTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGlsZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0VGlsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYudGlsZXNba2V5XTtcbiAgICB9LFxuXG4gICAgLy8gUmVtb3ZlIHRpbGVcbiAgICByZW1vdmVUaWxlIChrZXkpIHtcbiAgICAgICAgdmFyIHRpbGUgPSBzZWxmLnRpbGVzW2tleV07XG5cbiAgICAgICAgaWYgKHRpbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQ2FuY2VsIGlmIGxvYWRpbmdcbiAgICAgICAgICAgIGlmICh0aWxlLmxvYWRpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBVdGlscy5sb2coJ3RyYWNlJywgYGNhbmNlbCB0aWxlIGxvYWQgZm9yICR7a2V5fWApO1xuICAgICAgICAgICAgICAgIHRpbGUubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBUaWxlLmNhbmNlbCh0aWxlKTtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gY2FjaGVcbiAgICAgICAgICAgIEZlYXR1cmVTZWxlY3Rpb24uY2xlYXJUaWxlKGtleSk7XG4gICAgICAgICAgICBkZWxldGUgc2VsZi50aWxlc1trZXldO1xuICAgICAgICAgICAgVXRpbHMubG9nKCd0cmFjZScsIGByZW1vdmUgdGlsZSBmcm9tIGNhY2hlIGZvciAke2tleX1gKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBHZXQgYSBmZWF0dXJlIGZyb20gdGhlIHNlbGVjdGlvbiBtYXBcbiAgICBnZXRGZWF0dXJlU2VsZWN0aW9uICh7IGlkLCBrZXkgfSA9IHt9KSB7XG4gICAgICAgIHZhciBzZWxlY3Rpb24gPSBGZWF0dXJlU2VsZWN0aW9uLm1hcFtrZXldO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBmZWF0dXJlOiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5mZWF0dXJlKVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvLyBSZXNldHMgdGhlIGZlYXR1cmUgc2VsZWN0aW9uIHN0YXRlXG4gICAgcmVzZXRGZWF0dXJlU2VsZWN0aW9uICgpIHtcbiAgICAgICAgRmVhdHVyZVNlbGVjdGlvbi5yZXNldCgpO1xuICAgIH0sXG5cbiAgICAvLyBTZWxlY3Rpb24gbWFwIHNpemUgZm9yIHRoaXMgd29ya2VyXG4gICAgZ2V0RmVhdHVyZVNlbGVjdGlvbk1hcFNpemUgKCkge1xuICAgICAgICByZXR1cm4gRmVhdHVyZVNlbGVjdGlvbi5nZXRNYXBTaXplKCk7XG4gICAgfSxcblxuICAgIC8vIFRleHR1cmUgaW5mbyBuZWVkcyB0byBiZSBzeW5jZWQgZnJvbSBtYWluIHRocmVhZCwgZS5nLiB3aWR0aC9oZWlnaHQsIHdoaWNoIHdlIG9ubHkga25vdyBhZnRlciB0aGUgdGV4dHVyZSBsb2Fkc1xuICAgIHN5bmNUZXh0dXJlcyAodGV4X2NvbmZpZykge1xuICAgICAgICBsZXQgdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgaWYgKHRleF9jb25maWcpIHtcbiAgICAgICAgICAgIHRleHR1cmVzLnB1c2goLi4uT2JqZWN0LmtleXModGV4X2NvbmZpZykpO1xuICAgICAgICB9XG5cbiAgICAgICAgVXRpbHMubG9nKCd0cmFjZScsICdzeW5jIHRleHR1cmVzIHRvIHdvcmtlcjonLCB0ZXh0dXJlcyk7XG4gICAgICAgIGlmICh0ZXh0dXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gVGV4dHVyZS5zeW5jVGV4dHVyZXNUb1dvcmtlcih0ZXh0dXJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0sXG5cbiAgICAvLyBTeW5jIGRldmljZSBwaXhlbCByYXRpbyBmcm9tIG1haW4gdGhyZWFkXG4gICAgdXBkYXRlRGV2aWNlUGl4ZWxSYXRpbyAoZGV2aWNlX3BpeGVsX3JhdGlvKSB7XG4gICAgICAgIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbyA9IGRldmljZV9waXhlbF9yYXRpbztcbiAgICB9LFxuXG4gICAgLy8gUHJvZmlsaW5nIGhlbHBlcnNcbiAgICBwcm9maWxlIChuYW1lKSB7XG4gICAgICAgIGNvbnNvbGUucHJvZmlsZShgd29ya2VyICR7c2VsZi5fd29ya2VyX2lkfTogJHtuYW1lfWApO1xuICAgIH0sXG5cbiAgICBwcm9maWxlRW5kIChuYW1lKSB7XG4gICAgICAgIGNvbnNvbGUucHJvZmlsZUVuZChgd29ya2VyICR7c2VsZi5fd29ya2VyX2lkfTogJHtuYW1lfWApO1xuICAgIH1cblxufSk7XG5cbldvcmtlckJyb2tlci5hZGRUYXJnZXQoJ3NlbGYnLCBzZWxmKTtcblxufVxuIiwiaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9nbC90ZXh0dXJlJztcbmltcG9ydCBXb3JrZXJCcm9rZXIgZnJvbSAnLi91dGlscy93b3JrZXJfYnJva2VyJztcblxuaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVTZWxlY3Rpb24ge1xuXG4gICAgY29uc3RydWN0b3IoZ2wsIHdvcmtlcnMpIHtcbiAgICAgICAgdGhpcy5nbCA9IGdsO1xuICAgICAgICB0aGlzLndvcmtlcnMgPSB3b3JrZXJzOyAvLyBwb29sIG9mIHdvcmtlcnMgdG8gcmVxdWVzdCBmZWF0dXJlIGxvb2stdXBzIGZyb20sIGtleWVkIGJ5IGlkXG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIGluaXQoKSB7XG4gICAgICAgIC8vIFNlbGVjdGlvbiBzdGF0ZSB0cmFja2luZ1xuICAgICAgICB0aGlzLnJlcXVlc3RzID0ge307IC8vIHBlbmRpbmcgc2VsZWN0aW9uIHJlcXVlc3RzXG4gICAgICAgIHRoaXMuZmVhdHVyZSA9IG51bGw7IC8vIGN1cnJlbnRseSBzZWxlY3RlZCBmZWF0dXJlXG4gICAgICAgIHRoaXMucmVhZF9kZWxheSA9IDU7IC8vIGRlbGF5IHRpbWUgZnJvbSBzZWxlY3Rpb24gcmVuZGVyIHRvIGZyYW1lYnVmZmVyIHNhbXBsZSwgdG8gYXZvaWQgQ1BVL0dQVSBzeW5jIGxvY2tcbiAgICAgICAgdGhpcy5yZWFkX2RlbGF5X3RpbWVyID0gbnVsbDsgLy8gY3VycmVudCB0aW1lciAoc2V0VGltZW91dCkgZm9yIGRlbGF5ZWQgc2VsZWN0aW9uIHJlYWRzXG5cbiAgICAgICAgdGhpcy5waXhlbCA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICB0aGlzLnBpeGVsMzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucGl4ZWwuYnVmZmVyKTtcblxuICAgICAgICAvLyBGcmFtZSBidWZmZXIgZm9yIHNlbGVjdGlvblxuICAgICAgICAvLyBUT0RPOiBpbml0aWF0ZSBsYXppbHkgaW4gY2FzZSB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBzZWxlY3Rpb25cbiAgICAgICAgdGhpcy5mYm8gPSB0aGlzLmdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7XG4gICAgICAgIHRoaXMuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMuZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZmJvKTtcbiAgICAgICAgdGhpcy5mYm9fc2l6ZSA9IHsgd2lkdGg6IDI1NiwgaGVpZ2h0OiAyNTYgfTsgLy8gVE9ETzogbWFrZSBjb25maWd1cmFibGUgLyBhZGFwdGl2ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICAgICAgICB0aGlzLmZib19zaXplLmFzcGVjdCA9IHRoaXMuZmJvX3NpemUud2lkdGggLyB0aGlzLmZib19zaXplLmhlaWdodDtcblxuICAgICAgICAvLyBUZXh0dXJlIGZvciB0aGUgRkJPIGNvbG9yIGF0dGFjaG1lbnRcbiAgICAgICAgdmFyIGZib190ZXh0dXJlID0gVGV4dHVyZS5jcmVhdGUoIHRoaXMuZ2wsICdzZWxlY3Rpb25fZmJvJywgeyBmaWx0ZXJpbmc6ICduZWFyZXN0JyB9KTtcbiAgICAgICAgZmJvX3RleHR1cmUuc2V0RGF0YSh0aGlzLmZib19zaXplLndpZHRoLCB0aGlzLmZib19zaXplLmhlaWdodCwgbnVsbCwgeyBmaWx0ZXJpbmc6ICduZWFyZXN0JyB9KTtcbiAgICAgICAgdGhpcy5nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0aGlzLmdsLkZSQU1FQlVGRkVSLCB0aGlzLmdsLkNPTE9SX0FUVEFDSE1FTlQwLCB0aGlzLmdsLlRFWFRVUkVfMkQsIGZib190ZXh0dXJlLnRleHR1cmUsIDApO1xuXG4gICAgICAgIC8vIFJlbmRlcmJ1ZmZlciBmb3IgdGhlIEZCTyBkZXB0aCBhdHRhY2htZW50XG4gICAgICAgIHZhciBmYm9fZGVwdGhfcmIgPSB0aGlzLmdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgICAgICB0aGlzLmdsLmJpbmRSZW5kZXJidWZmZXIodGhpcy5nbC5SRU5ERVJCVUZGRVIsIGZib19kZXB0aF9yYik7XG4gICAgICAgIHRoaXMuZ2wucmVuZGVyYnVmZmVyU3RvcmFnZSh0aGlzLmdsLlJFTkRFUkJVRkZFUiwgdGhpcy5nbC5ERVBUSF9DT01QT05FTlQxNiwgdGhpcy5mYm9fc2l6ZS53aWR0aCwgdGhpcy5mYm9fc2l6ZS5oZWlnaHQpO1xuICAgICAgICB0aGlzLmdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRoaXMuZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZ2wuREVQVEhfQVRUQUNITUVOVCwgdGhpcy5nbC5SRU5ERVJCVUZGRVIsIGZib19kZXB0aF9yYik7XG5cbiAgICAgICAgdGhpcy5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5nbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2wgJiYgdGhpcy5mYm8pIHtcbiAgICAgICAgICAgIHRoaXMuZ2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mYm8pO1xuICAgICAgICAgICAgdGhpcy5mYm8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5nbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBmcmVlIHRleHR1cmU/XG4gICAgfVxuXG4gICAgYmluZCgpIHtcbiAgICAgICAgLy8gU3dpdGNoIHRvIEZCT1xuICAgICAgICB0aGlzLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLmdsLkZSQU1FQlVGRkVSLCB0aGlzLmZibyk7XG4gICAgICAgIHRoaXMuZ2wudmlld3BvcnQoMCwgMCwgdGhpcy5mYm9fc2l6ZS53aWR0aCwgdGhpcy5mYm9fc2l6ZS5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIFJlcXVlc3QgZmVhdHVyZSBzZWxlY3Rpb25cbiAgICAvLyBSdW5zIGFzeW5jaHJvbm91c2x5LCBzY2hlZHVsZXMgc2VsZWN0aW9uIGJ1ZmZlciB0byBiZSB1cGRhdGVkXG4gICAgZ2V0RmVhdHVyZUF0KHBvaW50KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAvLyBRdWV1ZSByZXF1ZXN0cyBmb3IgZmVhdHVyZSBzZWxlY3Rpb24sIGFuZCB0aGV5IHdpbGwgYmUgcGlja2VkIHVwIGJ5IHRoZSByZW5kZXIgbG9vcFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fcmVxdWVzdF9pZCA9ICh0aGlzLnNlbGVjdGlvbl9yZXF1ZXN0X2lkICsgMSkgfHwgMDtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdHNbdGhpcy5zZWxlY3Rpb25fcmVxdWVzdF9pZF0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3BvaW50JyxcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5zZWxlY3Rpb25fcmVxdWVzdF9pZCxcbiAgICAgICAgICAgICAgICBwb2ludCxcbiAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQW55IHBlbmRpbmcgc2VsZWN0aW9uIHJlcXVlc3RzXG4gICAgcGVuZGluZ1JlcXVlc3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0cztcbiAgICB9XG5cbiAgICBjbGVhclBlbmRpbmdSZXF1ZXN0cygpIHtcbiAgICAgICAgZm9yICh2YXIgciBpbiB0aGlzLnJlcXVlc3RzKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IHRoaXMucmVxdWVzdHNbcl07XG5cbiAgICAgICAgICAgIC8vIFRoaXMgcmVxdWVzdCB3YXMgYWxyZWFkeSBzZW50IHRvIHRoZSB3b3JrZXIsIHdlJ3JlIGp1c3QgYXdhaXRpbmcgaXRzIHJlcGx5XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5zZW50KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJlamVjdCByZXF1ZXN0IHNpbmNlIGl0IHdpbGwgbmV2ZXIgYmUgZnVsZmlsbGVkXG4gICAgICAgICAgICAvLyBUT0RPOiBwYXNzIGEgcmVhc29uIGZvciByZWplY3Rpb24/XG4gICAgICAgICAgICByZXF1ZXN0LnJlamVjdCh7IHJlcXVlc3QgfSk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5yZXF1ZXN0c1tyXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlYWQgcGVuZGluZyByZXN1bHRzIGZyb20gdGhlIHNlbGVjdGlvbiBidWZmZXIuIENhbGxlZCBhZnRlciByZW5kZXJpbmcgdG8gc2VsZWN0aW9uIGJ1ZmZlci5cbiAgICByZWFkKCkge1xuICAgICAgICAvLyBEZWxheSByZWFkaW5nIHRoZSBwaXhlbCByZXN1bHQgZnJvbSB0aGUgc2VsZWN0aW9uIGJ1ZmZlciB0byBhdm9pZCBDUFUvR1BVIHN5bmMgbG9jay5cbiAgICAgICAgLy8gQ2FsbGluZyByZWFkUGl4ZWxzIHN5bmNocm9ub3VzbHkgY2F1c2VkIGEgbWFzc2l2ZSBwZXJmb3JtYW5jZSBoaXQsIHByZXN1bWFibHkgc2luY2UgaXRcbiAgICAgICAgLy8gZm9yY2VkIHRoaXMgZnVuY3Rpb24gdG8gd2FpdCBmb3IgdGhlIEdQVSB0byBmaW5pc2ggcmVuZGVyaW5nIGFuZCByZXRyaWV2ZSB0aGUgdGV4dHVyZSBjb250ZW50cy5cbiAgICAgICAgaWYgKHRoaXMucmVhZF9kZWxheV90aW1lciAhPSBudWxsKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWFkX2RlbGF5X3RpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlYWRfZGVsYXlfdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAgICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy5mYm8pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciByIGluIHRoaXMucmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IHRoaXMucmVxdWVzdHNbcl07XG5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIHJlcXVlc3Qgd2FzIGFscmVhZHkgc2VudCB0byB0aGUgd29ya2VyLCB3ZSdyZSBqdXN0IGF3YWl0aW5nIGl0cyByZXBseVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBvdGhlciBzZWxlY3Rpb24gdHlwZXMsIHN1Y2ggYXMgZmVhdHVyZXMgd2l0aGluIGEgYm94XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QudHlwZSAhPT0gJ3BvaW50Jykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBDaGVjayBzZWxlY3Rpb24gbWFwIGFnYWluc3QgRkJPXG4gICAgICAgICAgICAgICAgZ2wucmVhZFBpeGVscyhcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcihyZXF1ZXN0LnBvaW50LnggKiB0aGlzLmZib19zaXplLndpZHRoKSxcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcigoMSAtIHJlcXVlc3QucG9pbnQueSkgKiB0aGlzLmZib19zaXplLmhlaWdodCksXG4gICAgICAgICAgICAgICAgICAgIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRoaXMucGl4ZWwpO1xuICAgICAgICAgICAgICAgIHZhciBmZWF0dXJlX2tleSA9ICh0aGlzLnBpeGVsWzBdICsgKHRoaXMucGl4ZWxbMV0gPDwgOCkgKyAodGhpcy5waXhlbFsyXSA8PCAxNikgKyAodGhpcy5waXhlbFszXSA8PCAyNCkpID4+PiAwO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgZmVhdHVyZSBmb3VuZCwgYXNrIGFwcHJvcHJpYXRlIHdlYiB3b3JrZXIgdG8gbG9va3VwIGZlYXR1cmVcbiAgICAgICAgICAgICAgICB2YXIgd29ya2VyX2lkID0gdGhpcy5waXhlbFszXTtcbiAgICAgICAgICAgICAgICBpZiAod29ya2VyX2lkICE9PSAyNTUpIHsgLy8gMjU1IGluZGljYXRlcyBhbiBlbXB0eSBzZWxlY3Rpb24gYnVmZmVyIHBpeGVsXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLndvcmtlcnNbd29ya2VyX2lkXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZXJzW3dvcmtlcl9pZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbGYuZ2V0RmVhdHVyZVNlbGVjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogcmVxdWVzdC5pZCwga2V5OiBmZWF0dXJlX2tleSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4obWVzc2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hSZWFkKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm8gZmVhdHVyZSBmb3VuZCwgYnV0IHN0aWxsIG5lZWQgdG8gcmVzb2x2ZSBwcm9taXNlXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoUmVhZCh7IGlkOiByZXF1ZXN0LmlkLCBmZWF0dXJlOiBudWxsIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VudCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgfSwgdGhpcy5yZWFkX2RlbGF5KTtcbiAgICB9XG5cbiAgICAvLyBDYWxsZWQgb24gbWFpbiB0aHJlYWQgd2hlbiBhIHdlYiB3b3JrZXIgZmluZHMgYSBmZWF0dXJlIGluIHRoZSBzZWxlY3Rpb24gYnVmZmVyXG4gICAgZmluaXNoUmVhZCAobWVzc2FnZSkge1xuICAgICAgICB2YXIgcmVxdWVzdCA9IHRoaXMucmVxdWVzdHNbbWVzc2FnZS5pZF07XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgICAgbG9nLmVycm9yKFwiRmVhdHVyZVNlbGVjdGlvbi5maW5pc2hSZWFkKCk6IGNvdWxkIG5vdCBmaW5kIG1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgICAgICAgICByZXR1cm47IC8vIHJlcXVlc3Qgd2FzIGNsZWFyZWQgYmVmb3JlIGl0IHJldHVybmVkXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmVhdHVyZSA9IG1lc3NhZ2UuZmVhdHVyZTtcbiAgICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKChmZWF0dXJlICE9IG51bGwgJiYgdGhpcy5mZWF0dXJlID09IG51bGwpIHx8XG4gICAgICAgICAgICAoZmVhdHVyZSA9PSBudWxsICYmIHRoaXMuZmVhdHVyZSAhPSBudWxsKSB8fFxuICAgICAgICAgICAgKGZlYXR1cmUgIT0gbnVsbCAmJiB0aGlzLmZlYXR1cmUgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGZlYXR1cmUpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLmZlYXR1cmUpKSkge1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZlYXR1cmUgPSBmZWF0dXJlOyAvLyBzdG9yZSB0aGUgbW9zdCByZWNlbnRseSBzZWxlY3RlZCBmZWF0dXJlXG5cbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0LnJlc29sdmUoeyBmZWF0dXJlLCBjaGFuZ2VkLCByZXF1ZXN0IH0pO1xuICAgICAgICBkZWxldGUgdGhpcy5yZXF1ZXN0c1ttZXNzYWdlLmlkXTsgLy8gZG9uZSBwcm9jZXNzaW5nIHRoaXMgcmVxdWVzdFxuICAgIH1cblxuXG4gICAgLy8gU2VsZWN0aW9uIG1hcCBnZW5lcmF0aW9uXG4gICAgLy8gRWFjaCB3b3JrZXIgd2lsbCBjcmVhdGUgaXRzIG93biBpbmRlcGVuZGVudCwgJ2xvY2FsJyBzZWxlY3Rpb24gbWFwXG5cbiAgICAvLyBDcmVhdGUgYSB1bmlxdWUgMzItYml0IGNvbG9yIHRvIGlkZW50aWZ5IGEgZmVhdHVyZVxuICAgIC8vIFdvcmtlcnMgaW5kZXBlbmRlbnRseSBjcmVhdGUvbW9kaWZ5IHNlbGVjdGlvbiBjb2xvcnMgaW4gdGhlaXIgb3duIHRocmVhZHMsIGJ1dCB3ZSBhbHNvXG4gICAgLy8gbmVlZCB0aGUgbWFpbiB0aHJlYWQgdG8ga25vdyB3aGVyZSBlYWNoIGZlYXR1cmUgY29sb3Igb3JpZ2luYXRlZC4gVG8gYWNjb21wbGlzaCB0aGlzLFxuICAgIC8vIHdlIHBhcnRpdGlvbiB0aGUgbWFwIGJ5IHNldHRpbmcgdGhlIDR0aCBjb21wb25lbnQgKGFscGhhIGNoYW5uZWwpIHRvIHRoZSB3b3JrZXIncyBpZC5cbiAgICBzdGF0aWMgbWFrZUVudHJ5KHRpbGUpIHtcbiAgICAgICAgLy8gMzItYml0IGNvbG9yIGtleVxuICAgICAgICB0aGlzLm1hcF9lbnRyeSsrO1xuICAgICAgICB2YXIgaXIgPSB0aGlzLm1hcF9lbnRyeSAmIDI1NTtcbiAgICAgICAgdmFyIGlnID0gKHRoaXMubWFwX2VudHJ5ID4+IDgpICYgMjU1O1xuICAgICAgICB2YXIgaWIgPSAodGhpcy5tYXBfZW50cnkgPj4gMTYpICYgMjU1O1xuICAgICAgICB2YXIgaWEgPSB0aGlzLm1hcF9wcmVmaXg7XG4gICAgICAgIHZhciByID0gaXIgLyAyNTU7XG4gICAgICAgIHZhciBnID0gaWcgLyAyNTU7XG4gICAgICAgIHZhciBiID0gaWIgLyAyNTU7XG4gICAgICAgIHZhciBhID0gaWEgLyAyNTU7XG4gICAgICAgIHZhciBrZXkgPSAoaXIgKyAoaWcgPDwgOCkgKyAoaWIgPDwgMTYpICsgKGlhIDw8IDI0KSkgPj4+IDA7IC8vIG5lZWQgdW5zaWduZWQgcmlnaHQgc2hpZnQgdG8gY29udmVydCB0byBwb3NpdGl2ZSAjXG5cbiAgICAgICAgdGhpcy5tYXBba2V5XSA9IHtcbiAgICAgICAgICAgIGNvbG9yOiBbciwgZywgYiwgYV0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubWFwX3NpemUrKztcblxuICAgICAgICAvLyBJbml0aWFsaXplIHRpbGUtc3BlY2lmaWMgdHJhY2tpbmcgaW5mb1xuICAgICAgICBpZiAoIXRoaXMudGlsZXNbdGlsZS5rZXldKSB7XG4gICAgICAgICAgICB0aGlzLnRpbGVzW3RpbGUua2V5XSA9IHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgb2YgZmVhdHVyZSBlbnRyaWVzIGluIHRoaXMgdGhyZWFkXG4gICAgICAgICAgICAgICAgdGlsZTogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Vic2V0IG9mIHRpbGUgcHJvcGVydGllcyB0byBwYXNzIGJhY2sgd2l0aCBmZWF0dXJlXG4gICAgICAgICAgICAgICAgICAgIGtleTogdGlsZS5rZXksXG4gICAgICAgICAgICAgICAgICAgIGNvb3JkczogdGlsZS5jb29yZHMsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlX3pvb206IHRpbGUuc3R5bGVfem9vbSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiB0aWxlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbjogdGlsZS5nZW5lcmF0aW9uXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGlsZXNbdGlsZS5rZXldLmVudHJpZXMucHVzaChrZXkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm1hcFtrZXldO1xuICAgIH1cblxuICAgIHN0YXRpYyBtYWtlQ29sb3IoZmVhdHVyZSwgdGlsZSwgY29udGV4dCkge1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSB0aGlzLm1ha2VFbnRyeSh0aWxlKTtcbiAgICAgICAgc2VsZWN0b3IuZmVhdHVyZSA9IHtcbiAgICAgICAgICAgIGlkOiBmZWF0dXJlLmlkLFxuICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgbGF5ZXJzOiBjb250ZXh0LmxheWVycyxcbiAgICAgICAgICAgIHRpbGU6IHRoaXMudGlsZXNbdGlsZS5rZXldLnRpbGVcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0b3IuY29sb3I7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnRpbGVzID0ge307XG4gICAgICAgIHRoaXMubWFwID0ge307XG4gICAgICAgIHRoaXMubWFwX3NpemUgPSAwO1xuICAgICAgICB0aGlzLm1hcF9lbnRyeSA9IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGNsZWFyVGlsZShrZXkpIHtcbiAgICAgICAgaWYgKHRoaXMudGlsZXNba2V5XSkge1xuICAgICAgICAgICAgdGhpcy50aWxlc1trZXldLmVudHJpZXMuZm9yRWFjaChrID0+IGRlbGV0ZSB0aGlzLm1hcFtrXSk7XG4gICAgICAgICAgICB0aGlzLm1hcF9zaXplIC09IHRoaXMudGlsZXNba2V5XS5lbnRyaWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRpbGVzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TWFwU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwX3NpemU7XG4gICAgfVxuXG4gICAgc3RhdGljIHNldFByZWZpeChwcmVmaXgpIHtcbiAgICAgICAgdGhpcy5tYXBfcHJlZml4ID0gcHJlZml4O1xuICAgIH1cblxufVxuXG4vLyBTdGF0aWMgcHJvcGVydGllc1xuRmVhdHVyZVNlbGVjdGlvbi5tYXAgPSB7fTsgICAvLyB0aGlzIHdpbGwgYmUgdW5pcXVlIHBlciBtb2R1bGUgaW5zdGFuY2UgKHNvIHVuaXF1ZSBwZXIgd29ya2VyKVxuRmVhdHVyZVNlbGVjdGlvbi50aWxlcyA9IHt9OyAvLyBzZWxlY3Rpb24ga2V5cywgYnkgdGlsZVxuRmVhdHVyZVNlbGVjdGlvbi5tYXBfc2l6ZSA9IDA7XG5GZWF0dXJlU2VsZWN0aW9uLm1hcF9lbnRyeSA9IDA7XG5GZWF0dXJlU2VsZWN0aW9uLm1hcF9wcmVmaXggPSAwOyAvLyBzZXQgYnkgd29ya2VyIHRvIHdvcmtlciBpZCAjXG5GZWF0dXJlU2VsZWN0aW9uLmRlZmF1bHRDb2xvciA9IFswLCAwLCAwLCAxXTtcbiIsIi8qanNoaW50IHdvcmtlcjogdHJ1ZSAqL1xuaW1wb3J0IEdlbyBmcm9tICcuLi9nZW8nO1xuaW1wb3J0IHtNZXRob2ROb3RJbXBsZW1lbnRlZH0gZnJvbSAnLi4vdXRpbHMvZXJyb3JzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi91dGlscy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFTb3VyY2Uge1xuXG4gICAgY29uc3RydWN0b3IgKGNvbmZpZywgc291cmNlcykge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsgLy8gc2F2ZSBvcmlnaW5hbCBjb25maWdcbiAgICAgICAgdGhpcy5zb3VyY2VzID0gc291cmNlczsgLy8gZnVsbCBzZXQgb2YgZGF0YSBzb3VyY2VzIFRPRE86IGNlbnRyYWxpemUgdGhlc2UgbGlrZSB0ZXh0dXJlcz9cbiAgICAgICAgdGhpcy5pZCA9IGNvbmZpZy5pZDtcbiAgICAgICAgdGhpcy5uYW1lID0gY29uZmlnLm5hbWU7XG4gICAgICAgIHRoaXMucGFkX3NjYWxlID0gY29uZmlnLnBhZF9zY2FsZSB8fCAwLjAwMDE7IC8vIHNjYWxlIHRpbGUgdXAgYnkgc21hbGwgZmFjdG9yIHRvIGNvdmVyIHNlYW1zXG4gICAgICAgIHRoaXMuZGVmYXVsdF93aW5kaW5nID0gbnVsbDsgLy8gd2luZGluZyBvcmRlciB3aWxsIGFkYXB0IHRvIGRhdGEgc291cmNlXG4gICAgICAgIHRoaXMucmFzdGVycyA9IC8vIGF0dGFjaGVkIHJhc3RlciB0aWxlIHNvdXJjZXNcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY29uZmlnLnJhc3RlcnMpID8gWy4uLm5ldyBTZXQoY29uZmlnLnJhc3RlcnMpXSA6IFtdOyAvLyBkZS1kdXBlIHdpdGggc2V0IGNvbnZlcnNpb25cblxuICAgICAgICAvLyBPcHRpb25hbCBmdW5jdGlvbiB0byB0cmFuc2Zvcm0gc291cmNlIGRhdGFcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSBjb25maWcudHJhbnNmb3JtO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5iaW5kKHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0aW9uYWwgYWRkaXRpb25hbCBkYXRhIHRvIHBhc3MgdG8gdGhlIHRyYW5zZm9ybSBmdW5jdGlvblxuICAgICAgICB0aGlzLmV4dHJhX2RhdGEgPSBjb25maWcuZXh0cmFfZGF0YTtcblxuICAgICAgICAvLyBPcHRpb25hbCBhZGRpdGlvbmFsIHNjcmlwdHMgbWFkZSBhdmFpbGFibGUgdG8gdGhlIHRyYW5zZm9ybSBmdW5jdGlvblxuICAgICAgICBpZiAodHlwZW9mIGltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbicgJiYgY29uZmlnLnNjcmlwdHMpIHtcbiAgICAgICAgICAgIGNvbmZpZy5zY3JpcHRzLmZvckVhY2goZnVuY3Rpb24ocywgc2kpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHMpO1xuICAgICAgICAgICAgICAgICAgICBVdGlscy5sb2coJ2luZm8nLCAnRGF0YVNvdXJjZTogbG9hZGVkIGxpYnJhcnk6ICcgKyBzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMubG9nKCdlcnJvcicsICdEYXRhU291cmNlOiBmYWlsZWQgdG8gbG9hZCBsaWJyYXJ5OiAnICsgcyk7XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLmxvZygnZXJyb3InLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG92ZXJ6b29tIHdpbGwgYXBwbHkgZm9yIHpvb21zIGhpZ2hlciB0aGFuIHRoaXNcbiAgICAgICAgdGhpcy5tYXhfem9vbSA9IGNvbmZpZy5tYXhfem9vbSB8fCBHZW8uZGVmYXVsdF9zb3VyY2VfbWF4X3pvb207XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgdGlsZSBzb3VyY2UgYnkgdHlwZSwgZmFjdG9yeS1zdHlsZVxuICAgIHN0YXRpYyBjcmVhdGUgKHNvdXJjZSwgc291cmNlcykge1xuICAgICAgICBpZiAoRGF0YVNvdXJjZS50eXBlc1tzb3VyY2UudHlwZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0YVNvdXJjZS50eXBlc1tzb3VyY2UudHlwZV0oc291cmNlLCBzb3VyY2VzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGEgZGF0YSBzb3VyY2UgZGVmaW5pdGlvbiBjaGFuZ2VkXG4gICAgc3RhdGljIGNoYW5nZWQgKHNvdXJjZSwgcHJldl9zb3VyY2UpIHtcbiAgICAgICAgaWYgKCFzb3VyY2UgfHwgIXByZXZfc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjdXIgPSBPYmplY3QuYXNzaWduKHt9LCBzb3VyY2UuY29uZmlnLCB7IGlkOiBudWxsIH0pOyAvLyBudWxsIG91dCBpZHMgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBjb21wYXJlIHRoZW1cbiAgICAgICAgbGV0IHByZXYgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2X3NvdXJjZS5jb25maWcsIHsgaWQ6IG51bGwgfSk7XG5cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGN1cikgIT09IEpTT04uc3RyaW5naWZ5KHByZXYpO1xuICAgIH1cblxuICAgIC8vIE1lcmNhdG9yIHByb2plY3Rpb25cbiAgICBzdGF0aWMgcHJvamVjdERhdGEgKHNvdXJjZSkge1xuICAgICAgICB2YXIgdGltZXIgPSArbmV3IERhdGUoKTtcbiAgICAgICAgZm9yICh2YXIgdCBpbiBzb3VyY2UubGF5ZXJzKSB7XG4gICAgICAgICAgICB2YXIgbnVtX2ZlYXR1cmVzID0gc291cmNlLmxheWVyc1t0XS5mZWF0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKHZhciBmPTA7IGYgPCBudW1fZmVhdHVyZXM7IGYrKykge1xuICAgICAgICAgICAgICAgIHZhciBmZWF0dXJlID0gc291cmNlLmxheWVyc1t0XS5mZWF0dXJlc1tmXTtcbiAgICAgICAgICAgICAgICBHZW8udHJhbnNmb3JtR2VvbWV0cnkoZmVhdHVyZS5nZW9tZXRyeSwgY29vcmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgW3gsIHldID0gR2VvLmxhdExuZ1RvTWV0ZXJzKGNvb3JkKTtcbiAgICAgICAgICAgICAgICAgICAgY29vcmRbMF0gPSB4O1xuICAgICAgICAgICAgICAgICAgICBjb29yZFsxXSA9IHk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc291cmNlLmRlYnVnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNvdXJjZS5kZWJ1Zy5wcm9qZWN0aW9uID0gK25ldyBEYXRlKCkgLSB0aW1lcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICBSZS1zY2FsZSBnZW9tZXRyaWVzIHdpdGhpbiBlYWNoIHNvdXJjZSB0byBpbnRlcm5hbCB0aWxlIHVuaXRzXG4gICAgKi9cbiAgICBzdGF0aWMgc2NhbGVEYXRhIChzb3VyY2UsIHtjb29yZHM6IHt6fSwgbWluLCBtYXh9KSB7XG4gICAgICAgIGxldCB1bml0c19wZXJfbWV0ZXIgPSBHZW8udW5pdHNQZXJNZXRlcih6KTtcbiAgICAgICAgZm9yICh2YXIgdCBpbiBzb3VyY2UubGF5ZXJzKSB7XG4gICAgICAgICAgICB2YXIgbnVtX2ZlYXR1cmVzID0gc291cmNlLmxheWVyc1t0XS5mZWF0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKHZhciBmPTA7IGYgPCBudW1fZmVhdHVyZXM7IGYrKykge1xuICAgICAgICAgICAgICAgIHZhciBmZWF0dXJlID0gc291cmNlLmxheWVyc1t0XS5mZWF0dXJlc1tmXTtcbiAgICAgICAgICAgICAgICBHZW8udHJhbnNmb3JtR2VvbWV0cnkoZmVhdHVyZS5nZW9tZXRyeSwgY29vcmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb29yZFswXSA9IChjb29yZFswXSAtIG1pbi54KSAqIHVuaXRzX3Blcl9tZXRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29vcmRbMV0gPSAoY29vcmRbMV0gLSBtaW4ueSkgKiB1bml0c19wZXJfbWV0ZXIgKiAtMTsgLy8gZmxpcCBjb29yZHMgcG9zaXRpdmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWQoZGVzdCkge1xuICAgICAgICBkZXN0LnNvdXJjZV9kYXRhID0ge307XG4gICAgICAgIGRlc3Quc291cmNlX2RhdGEubGF5ZXJzID0ge307XG4gICAgICAgIGRlc3QucGFkX3NjYWxlID0gdGhpcy5wYWRfc2NhbGU7XG4gICAgICAgIGRlc3QucmFzdGVycyA9IFsuLi50aGlzLnJhc3RlcnNdOyAvLyBjb3B5IGxpc3Qgb2YgcmFzdGVycyB0byBsb2FkIGZvciB0aWxlXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWQoZGVzdCkudGhlbigoZGVzdCkgPT4ge1xuICAgICAgICAgICAgLy8gUG9zdC1wcm9jZXNzaW5nXG4gICAgICAgICAgICBmb3IgKGxldCBsYXllciBpbiBkZXN0LnNvdXJjZV9kYXRhLmxheWVycykge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gZGVzdC5zb3VyY2VfZGF0YS5sYXllcnNbbGF5ZXJdO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuZmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5mZWF0dXJlcy5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgR2VvLnRyYW5zZm9ybUdlb21ldHJ5KGZlYXR1cmUuZ2VvbWV0cnksIGNvb3JkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGbGlwIFkgY29vcmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRbMV0gPSAtY29vcmRbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTbGlnaHRseSBzY2FsZSB1cCB0aWxlIHRvIGNvdmVyIHNlYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFkX3NjYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkWzBdID0gTWF0aC5yb3VuZChjb29yZFswXSAqICgxICsgdGhpcy5wYWRfc2NhbGUpIC0gKEdlby50aWxlX3NjYWxlICogdGhpcy5wYWRfc2NhbGUvMikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZFsxXSA9IE1hdGgucm91bmQoY29vcmRbMV0gKiAoMSArIHRoaXMucGFkX3NjYWxlKSAtIChHZW8udGlsZV9zY2FsZSAqIHRoaXMucGFkX3NjYWxlLzIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGZpcnN0IGVuY291bnRlcmVkIHBvbHlnb24gd2luZGluZyBvcmRlciBhcyBkZWZhdWx0IGZvciBkYXRhIHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEZWZhdWx0V2luZGluZyhmZWF0dXJlLmdlb21ldHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXN0LmRlZmF1bHRfd2luZGluZyA9IHRoaXMuZGVmYXVsdF93aW5kaW5nIHx8ICdDQ1cnO1xuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFN1Yi1jbGFzc2VzIG11c3QgaW1wbGVtZW50XG4gICAgX2xvYWQoZGVzdCkge1xuICAgICAgICB0aHJvdyBuZXcgTWV0aG9kTm90SW1wbGVtZW50ZWQoJ19sb2FkJyk7XG4gICAgfVxuXG4gICAgLy8gSW5mZXIgd2luZGluZyBmb3IgZGF0YSBzb3VyY2UgZnJvbSBmaXJzdCByaW5nIG9mIHByb3ZpZGVkIGdlb21ldHJ5XG4gICAgdXBkYXRlRGVmYXVsdFdpbmRpbmcgKGdlb20pIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdF93aW5kaW5nID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChnZW9tLnR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdF93aW5kaW5nID0gR2VvLnJpbmdXaW5kaW5nKGdlb20uY29vcmRpbmF0ZXNbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZ2VvbS50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdF93aW5kaW5nID0gR2VvLnJpbmdXaW5kaW5nKGdlb20uY29vcmRpbmF0ZXNbMF1bMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRfd2luZGluZztcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciBhIG5ldyBkYXRhIHNvdXJjZSB0eXBlLCB1bmRlciBhIHR5cGUgbmFtZVxuICAgIHN0YXRpYyByZWdpc3Rlcih0eXBlX2NsYXNzLCB0eXBlX25hbWUpIHtcbiAgICAgICAgaWYgKCF0eXBlX2NsYXNzIHx8ICF0eXBlX25hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIERhdGFTb3VyY2UudHlwZXNbdHlwZV9uYW1lXSA9IHR5cGVfY2xhc3M7XG4gICAgfVxuXG59XG5cbkRhdGFTb3VyY2UudHlwZXMgPSB7fTsgLy8gc2V0IG9mIHN1cHBvcnRlZCBkYXRhIHNvdXJjZSBjbGFzc2VzLCByZWZlcmVuY2VkIGJ5IHR5cGUgbmFtZVxuXG5cbi8qKiogR2VuZXJpYyBuZXR3b3JrIGxvYWRpbmcgc291cmNlIC0gYWJzdHJhY3QgY2xhc3MgKioqL1xuXG5leHBvcnQgY2xhc3MgTmV0d29ya1NvdXJjZSBleHRlbmRzIERhdGFTb3VyY2Uge1xuXG4gICAgY29uc3RydWN0b3IgKHNvdXJjZSkge1xuICAgICAgICBzdXBlcihzb3VyY2UpO1xuICAgICAgICB0aGlzLnVybCA9IFV0aWxzLmFkZFBhcmFtc1RvVVJMKHNvdXJjZS51cmwsIHNvdXJjZS51cmxfcGFyYW1zKTtcbiAgICAgICAgdGhpcy5yZXNwb25zZV90eXBlID0gXCJcIjsgLy8gdXNlIHRvIHNldCBleHBsaWNpdCBYSFIgdHlwZVxuXG4gICAgICAgIGlmICh0aGlzLnVybCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTmV0d29yayBkYXRhIHNvdXJjZSBtdXN0IHByb3ZpZGUgYSBgdXJsYCBwcm9wZXJ0eScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2xvYWQgKGRlc3QpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMuZm9ybWF0VXJsKHRoaXMudXJsLCBkZXN0KTtcblxuICAgICAgICBsZXQgc291cmNlX2RhdGEgPSBkZXN0LnNvdXJjZV9kYXRhO1xuICAgICAgICBzb3VyY2VfZGF0YS51cmwgPSB1cmw7XG4gICAgICAgIGRlc3QuZGVidWcgPSBkZXN0LmRlYnVnIHx8IHt9O1xuICAgICAgICBkZXN0LmRlYnVnLm5ldHdvcmsgPSArbmV3IERhdGUoKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgc291cmNlX2RhdGEuZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgLy8gRm9yIHRlc3RpbmcgbmV0d29yayBlcnJvcnNcbiAgICAgICAgICAgIC8vIHZhciBwcm9taXNlID0gVXRpbHMuaW8odXJsLCA2MCAqIDEwMCwgdGhpcy5yZXNwb25zZV90eXBlKTtcbiAgICAgICAgICAgIC8vIGlmIChNYXRoLnJhbmRvbSgpIDwgLjcpIHtcbiAgICAgICAgICAgIC8vICAgICBwcm9taXNlID0gUHJvbWlzZS5yZWplY3QoRXJyb3IoJ2Zha2UgZGF0YSBzb3VyY2UgZXJyb3InKSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBwcm9taXNlLnRoZW4oKGJvZHkpID0+IHtcbiAgICAgICAgICAgIGxldCBwcm9taXNlID0gVXRpbHMuaW8odXJsLCA2MCAqIDEwMDAsIHRoaXMucmVzcG9uc2VfdHlwZSk7XG4gICAgICAgICAgICBzb3VyY2VfZGF0YS5yZXF1ZXN0ID0gcHJvbWlzZS5yZXF1ZXN0O1xuXG4gICAgICAgICAgICBwcm9taXNlLnRoZW4oKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICBkZXN0LmRlYnVnLnJlc3BvbnNlX3NpemUgPSBib2R5Lmxlbmd0aCB8fCBib2R5LmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgZGVzdC5kZWJ1Zy5uZXR3b3JrID0gK25ldyBEYXRlKCkgLSBkZXN0LmRlYnVnLm5ldHdvcms7XG4gICAgICAgICAgICAgICAgZGVzdC5kZWJ1Zy5wYXJzaW5nID0gK25ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZVNvdXJjZURhdGEoZGVzdCwgc291cmNlX2RhdGEsIGJvZHkpO1xuICAgICAgICAgICAgICAgIGRlc3QuZGVidWcucGFyc2luZyA9ICtuZXcgRGF0ZSgpIC0gZGVzdC5kZWJ1Zy5wYXJzaW5nO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZGVzdCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBzb3VyY2VfZGF0YS5lcnJvciA9IGVycm9yLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShkZXN0KTsgLy8gcmVzb2x2ZSByZXF1ZXN0IGJ1dCBwYXNzIGFsb25nIGVycm9yXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU3ViLWNsYXNzZXMgbXVzdCBpbXBsZW1lbnQ6XG5cbiAgICBmb3JtYXRVcmwgKHVybF90ZW1wbGF0ZSwgZGVzdCkge1xuICAgICAgICB0aHJvdyBuZXcgTWV0aG9kTm90SW1wbGVtZW50ZWQoJ2Zvcm1hdFVybCcpO1xuICAgIH1cblxuICAgIHBhcnNlU291cmNlRGF0YSAoZGVzdCwgc291cmNlLCByZXBvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBNZXRob2ROb3RJbXBsZW1lbnRlZCgncGFyc2VTb3VyY2VEYXRhJyk7XG4gICAgfVxufVxuXG5cbi8qKiogR2VuZXJpYyBuZXR3b3JrIHRpbGUgbG9hZGluZyAtIGFic3RyYWN0IGNsYXNzICoqKi9cblxuZXhwb3J0IGNsYXNzIE5ldHdvcmtUaWxlU291cmNlIGV4dGVuZHMgTmV0d29ya1NvdXJjZSB7XG5cbiAgICBjb25zdHJ1Y3RvciAoc291cmNlKSB7XG4gICAgICAgIHN1cGVyKHNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy50aWxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMudXJsX2hvc3RzID0gbnVsbDtcbiAgICAgICAgdmFyIGhvc3RfbWF0Y2ggPSB0aGlzLnVybC5tYXRjaCgve3M6XFxbKFtefStdKylcXF19Lyk7XG4gICAgICAgIGlmIChob3N0X21hdGNoICE9IG51bGwgJiYgaG9zdF9tYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLnVybF9ob3N0cyA9IGhvc3RfbWF0Y2hbMV0uc3BsaXQoJywnKTtcbiAgICAgICAgICAgIHRoaXMubmV4dF9ob3N0ID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvcm1hdFVybCh1cmxfdGVtcGxhdGUsIHRpbGUpIHtcbiAgICAgICAgbGV0IGNvb3JkcyA9IEdlby53cmFwVGlsZSh0aWxlLmNvb3JkcywgeyB4OiB0cnVlIH0pO1xuICAgICAgICBsZXQgdXJsID0gdXJsX3RlbXBsYXRlLnJlcGxhY2UoJ3t4fScsIGNvb3Jkcy54KS5yZXBsYWNlKCd7eX0nLCBjb29yZHMueSkucmVwbGFjZSgne3p9JywgY29vcmRzLnopO1xuXG4gICAgICAgIGlmICh0aGlzLnVybF9ob3N0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgve3M6XFxbKFtefStdKylcXF19LywgdGhpcy51cmxfaG9zdHNbdGhpcy5uZXh0X2hvc3RdKTtcbiAgICAgICAgICAgIHRoaXMubmV4dF9ob3N0ID0gKHRoaXMubmV4dF9ob3N0ICsgMSkgJSB0aGlzLnVybF9ob3N0cy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBDaGVja3MgZm9yIHRoZSB4L3kveiB0aWxlIHBhdHRlcm4gaW4gVVJMIHRlbXBsYXRlXG4gICAgdXJsSGFzVGlsZVBhdHRlcm4odXJsKSB7XG4gICAgICAgIHJldHVybiB1cmwgJiZcbiAgICAgICAgICAgIHVybC5zZWFyY2goJ3t4fScpID4gLTEgJiZcbiAgICAgICAgICAgIHVybC5zZWFyY2goJ3t5fScpID4gLTEgJiZcbiAgICAgICAgICAgIHVybC5zZWFyY2goJ3t6fScpID4gLTE7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgRGF0YVNvdXJjZSwge05ldHdvcmtTb3VyY2UsIE5ldHdvcmtUaWxlU291cmNlfSBmcm9tICcuL2RhdGFfc291cmNlJztcbmltcG9ydCB7TVZUU291cmNlfSBmcm9tICcuL212dCc7XG5pbXBvcnQgR2VvIGZyb20gJy4uL2dlbyc7XG5cbi8vIEZvciB0aWxpbmcgR2VvSlNPTiBjbGllbnQtc2lkZVxuaW1wb3J0IGdlb2pzb252dCBmcm9tICdnZW9qc29uLXZ0JztcblxuLyoqXG4gR2VvSlNPTiBzdGFuZGFsb25lIChub24tdGlsZWQpIHNvdXJjZVxuIFVzZXMgZ2VvanNvbi12dCBzcGxpdCBpbnRvIHRpbGVzIGNsaWVudC1zaWRlXG4qL1xuXG5leHBvcnQgY2xhc3MgR2VvSlNPTlNvdXJjZSBleHRlbmRzIE5ldHdvcmtTb3VyY2Uge1xuXG4gICAgY29uc3RydWN0b3Ioc291cmNlKSB7XG4gICAgICAgIHN1cGVyKHNvdXJjZSk7XG4gICAgICAgIHRoaXMudGlsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvYWRfZGF0YSA9IG51bGw7XG4gICAgICAgIHRoaXMudGlsZV9pbmRleGVzID0ge307IC8vIGdlb2pzb24tdnQgdGlsZSBpbmRpY2VzLCBieSBsYXllciBuYW1lXG4gICAgICAgIHRoaXMubWF4X3pvb20gPSBNYXRoLm1heCh0aGlzLm1heF96b29tIHx8IDAsIDE1KTsgLy8gVE9ETzogbWF4IHpvb20gPCAxNSBjYXVzZXMgYXJ0aWZhY3RzL25vLWRyYXcgYXQgMjAsIGludmVzdGlnYXRlXG4gICAgICAgIHRoaXMucGFkX3NjYWxlID0gMDsgLy8gd2UgZG9uJ3Qgd2FudCBwYWRkaW5nIG9uIGF1dG8tdGlsZWQgc291cmNlc1xuICAgIH1cblxuICAgIF9sb2FkKGRlc3QpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkX2RhdGEgPSBzdXBlci5fbG9hZCh7IHNvdXJjZV9kYXRhOiB7IGxheWVyczoge30gfSB9KS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBsYXllcnMgPSBkYXRhLnNvdXJjZV9kYXRhLmxheWVycztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBsYXllcl9uYW1lIGluIGxheWVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbGVfaW5kZXhlc1tsYXllcl9uYW1lXSA9IGdlb2pzb252dChsYXllcnNbbGF5ZXJfbmFtZV0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFpvb206IHRoaXMubWF4X3pvb20sICAvLyBtYXggem9vbSB0byBwcmVzZXJ2ZSBkZXRhaWwgb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRvbGVyYW5jZTogMywgLy8gc2ltcGxpZmljYXRpb24gdG9sZXJhbmNlIChoaWdoZXIgbWVhbnMgc2ltcGxlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudDogR2VvLnRpbGVfc2NhbGUsIC8vIHRpbGUgZXh0ZW50IChib3RoIHdpZHRoIGFuZCBoZWlnaHQpXG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI6IDAgICAgIC8vIHRpbGUgYnVmZmVyIG9uIGVhY2ggc2lkZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRfZGF0YS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGxheWVyX25hbWUgaW4gdGhpcy50aWxlX2luZGV4ZXMpIHtcbiAgICAgICAgICAgICAgICBkZXN0LnNvdXJjZV9kYXRhLmxheWVyc1tsYXllcl9uYW1lXSA9IHRoaXMuZ2V0VGlsZUZlYXR1cmVzKGRlc3QsIGxheWVyX25hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFRpbGVGZWF0dXJlcyh0aWxlLCBsYXllcl9uYW1lKSB7XG4gICAgICAgIGxldCBjb29yZHMgPSBHZW8ud3JhcFRpbGUodGlsZS5jb29yZHMsIHsgeDogdHJ1ZSB9KTtcblxuICAgICAgICAvLyByZXF1ZXN0IGEgcGFydGljdWxhciB0aWxlXG4gICAgICAgIGxldCB0ID0gdGhpcy50aWxlX2luZGV4ZXNbbGF5ZXJfbmFtZV0uZ2V0VGlsZShjb29yZHMueiwgY29vcmRzLngsIGNvb3Jkcy55KTtcblxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gTVZULXN0eWxlIEpTT04gc3RydWN0IHRvIEdlb0pTT05cbiAgICAgICAgbGV0IGNvbGxlY3Rpb247XG4gICAgICAgIGlmICh0ICYmIHQuZmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgICAgICBmZWF0dXJlczogW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAobGV0IGZlYXR1cmUgb2YgdC5mZWF0dXJlcykge1xuICAgICAgICAgICAgICAgIC8vIEdlb0pTT04gZmVhdHVyZVxuICAgICAgICAgICAgICAgIGxldCBmID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnRmVhdHVyZScsXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiB7fSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS50YWdzXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLnR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZi5nZW9tZXRyeS5jb29yZGluYXRlcyA9IGZlYXR1cmUuZ2VvbWV0cnkubWFwKGNvb3JkID0+IFtjb29yZFswXSwgY29vcmRbMV1dKTtcbiAgICAgICAgICAgICAgICAgICAgZi5nZW9tZXRyeS50eXBlID0gJ011bHRpUG9pbnQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmZWF0dXJlLnR5cGUgPT09IDIgfHwgZmVhdHVyZS50eXBlID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGYuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgPSBmZWF0dXJlLmdlb21ldHJ5Lm1hcChyaW5nID0+XG4gICAgICAgICAgICAgICAgICAgICAgICByaW5nLm1hcChjb29yZCA9PiBbY29vcmRbMF0sIGNvb3JkWzFdXSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS50eXBlID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmLmdlb21ldHJ5LnR5cGUgPSAnTXVsdGlMaW5lU3RyaW5nJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmLmdlb21ldHJ5ID0gTVZUU291cmNlLmRlY29kZU11bHRpUG9seWdvbihmLmdlb21ldHJ5KTsgLy8gdW4tZmxhdHRlbiByaW5nc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLmZlYXR1cmVzLnB1c2goZik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG5cbiAgICBmb3JtYXRVcmwgKGRlc3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsO1xuICAgIH1cblxuICAgIHBhcnNlU291cmNlRGF0YSAodGlsZSwgc291cmNlLCByZXNwb25zZSkge1xuICAgICAgICBzb3VyY2UubGF5ZXJzID0gdGhpcy5nZXRMYXllcnMoSlNPTi5wYXJzZShyZXNwb25zZSkpO1xuICAgIH1cblxuICAgIC8vIERldGVjdCBzaW5nbGUgb3IgbXVsdGlwbGUgbGF5ZXJzIGluIHJldHVybmVkIGRhdGFcbiAgICBnZXRMYXllcnMgKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ0ZlYXR1cmUnIHx8IGRhdGEudHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHsgX2RlZmF1bHQ6IGRhdGEgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbi8qKlxuIE1hcHplbi9PU00uVVMtc3R5bGUgR2VvSlNPTiB2ZWN0b3IgdGlsZXNcbiBAY2xhc3MgR2VvSlNPTlRpbGVTb3VyY2VcbiovXG5leHBvcnQgY2xhc3MgR2VvSlNPTlRpbGVTb3VyY2UgZXh0ZW5kcyBOZXR3b3JrVGlsZVNvdXJjZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihzb3VyY2UpIHtcbiAgICAgICAgc3VwZXIoc291cmNlKTtcblxuICAgICAgICAvLyBDaGVjayBmb3IgVVJMIHRpbGUgcGF0dGVybiwgaWYgbm90IGZvdW5kLCB0cmVhdCBhcyBzdGFuZGFsb25lIEdlb0pTT04vVG9wb0pTT04gb2JqZWN0XG4gICAgICAgIGlmICghdGhpcy51cmxIYXNUaWxlUGF0dGVybih0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGluc3RhbmNlIHR5cGUgZnJvbSBwYXJlbnQgY2xhc3NcbiAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgR2VvSlNPTlRpbGVTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGluc3RhbmNlIHR5cGVcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdlb0pTT05Tb3VyY2Uoc291cmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFBhc3MgYmFjayB0byBwYXJlbnQgY2xhc3MgdG8gaW5zdGFudGlhdGVcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwYXJzZVNvdXJjZURhdGEgKHRpbGUsIHNvdXJjZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5wcmVwYXJlR2VvSlNPTihkYXRhLCB0aWxlLCBzb3VyY2UpO1xuICAgIH1cblxuICAgIHByZXBhcmVHZW9KU09OIChkYXRhLCB0aWxlLCBzb3VyY2UpIHtcbiAgICAgICAgLy8gQXBwbHkgb3B0aW9uYWwgZGF0YSB0cmFuc2Zvcm1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMudHJhbnNmb3JtKGRhdGEsIHRoaXMuZXh0cmFfZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2UubGF5ZXJzID0gR2VvSlNPTlNvdXJjZS5wcm90b3R5cGUuZ2V0TGF5ZXJzKGRhdGEpO1xuXG4gICAgICAgIC8vIEEgXCJzeW50aGV0aWNcIiB0aWxlIHRoYXQgYWRqdXN0cyB0aGUgdGlsZSBtaW4gYW5jaG9yIHRvIGFjY291bnQgZm9yIHRpbGUgbG9uZ2l0dWRlIHdyYXBwaW5nXG4gICAgICAgIGxldCBhbmNob3IgPSB7XG4gICAgICAgICAgICBjb29yZHM6IHRpbGUuY29vcmRzLFxuICAgICAgICAgICAgbWluOiBHZW8ubWV0ZXJzRm9yVGlsZShHZW8ud3JhcFRpbGUodGlsZS5jb29yZHMsIHsgeDogdHJ1ZSB9KSlcbiAgICAgICAgfTtcblxuICAgICAgICBEYXRhU291cmNlLnByb2plY3REYXRhKHNvdXJjZSk7IC8vIG1lcmNhdG9yIHByb2plY3Rpb25cbiAgICAgICAgRGF0YVNvdXJjZS5zY2FsZURhdGEoc291cmNlLCBhbmNob3IpOyAvLyByZS1zY2FsZSBmcm9tIG1ldGVycyB0byBsb2NhbCB0aWxlIGNvb3Jkc1xuICAgIH1cblxufVxuXG5EYXRhU291cmNlLnJlZ2lzdGVyKEdlb0pTT05UaWxlU291cmNlLCAnR2VvSlNPTicpOyAgICAgIC8vIHByZWZlcmVkIHNob3J0ZXIgbmFtZVxuRGF0YVNvdXJjZS5yZWdpc3RlcihHZW9KU09OVGlsZVNvdXJjZSwgJ0dlb0pTT05UaWxlcycpOyAvLyBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHlcbiIsImltcG9ydCBEYXRhU291cmNlLCB7TmV0d29ya1RpbGVTb3VyY2V9IGZyb20gJy4vZGF0YV9zb3VyY2UnO1xuaW1wb3J0IEdlbyBmcm9tICcuLi9nZW8nO1xuXG5pbXBvcnQgUGJmIGZyb20gJ3BiZic7XG5pbXBvcnQge1ZlY3RvclRpbGUsIFZlY3RvclRpbGVGZWF0dXJlfSBmcm9tICd2ZWN0b3ItdGlsZSc7XG5cbi8qKlxuIE1hcGJveCBWZWN0b3IgVGlsZSBmb3JtYXRcbiBAY2xhc3MgTVZUU291cmNlXG4qL1xuZXhwb3J0IGNsYXNzIE1WVFNvdXJjZSBleHRlbmRzIE5ldHdvcmtUaWxlU291cmNlIHtcblxuICAgIGNvbnN0cnVjdG9yIChzb3VyY2UpIHtcbiAgICAgICAgc3VwZXIoc291cmNlKTtcbiAgICAgICAgdGhpcy5yZXNwb25zZV90eXBlID0gXCJhcnJheWJ1ZmZlclwiOyAvLyBiaW5hcnkgZGF0YVxuICAgIH1cblxuICAgIHBhcnNlU291cmNlRGF0YSAodGlsZSwgc291cmNlLCByZXNwb25zZSkge1xuICAgICAgICAvLyBDb252ZXJ0IE1hcGJveCB2ZWN0b3IgdGlsZSB0byBHZW9KU09OXG4gICAgICAgIHZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkocmVzcG9uc2UpO1xuICAgICAgICB2YXIgYnVmZmVyID0gbmV3IFBiZihkYXRhKTtcbiAgICAgICAgc291cmNlLmRhdGEgPSBuZXcgVmVjdG9yVGlsZShidWZmZXIpO1xuICAgICAgICBzb3VyY2UubGF5ZXJzID0gdGhpcy50b0dlb0pTT04oc291cmNlLmRhdGEpO1xuICAgICAgICBkZWxldGUgc291cmNlLmRhdGE7IC8vIGNvbW1lbnQgb3V0IHRvIHNhdmUgcmF3IGRhdGEgZm9yIGRlYnVnZ2luZ1xuICAgIH1cblxuICAgIC8vIExvb3AgdGhyb3VnaCBsYXllcnMvZmVhdHVyZXMgdXNpbmcgTWFwYm94IGxpYiBBUEksIGNvbnZlcnQgdG8gR2VvSlNPTiBmZWF0dXJlc1xuICAgIC8vIFJldHVybnMgYW4gb2JqZWN0IHdpdGgga2V5cyBmb3IgZWFjaCBsYXllciwgZS5nLiB7IGxheWVyOiBnZW9qc29uIH1cbiAgICB0b0dlb0pTT04gKHRpbGUpIHtcbiAgICAgICAgdmFyIGxheWVycyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBsIGluIHRpbGUubGF5ZXJzKSB7XG4gICAgICAgICAgICB2YXIgbGF5ZXIgPSB0aWxlLmxheWVyc1tsXTtcbiAgICAgICAgICAgIHZhciBsYXllcl9nZW9qc29uID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgICAgICAgICAgZmVhdHVyZXM6IFtdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3IgKHZhciBmPTA7IGYgPCBsYXllci5sZW5ndGg7IGYrKykge1xuICAgICAgICAgICAgICAgIHZhciBmZWF0dXJlID0gbGF5ZXIuZmVhdHVyZShmKTtcbiAgICAgICAgICAgICAgICB2YXIgZmVhdHVyZV9nZW9qc29uID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnRmVhdHVyZScsXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiB7fSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IGZlYXR1cmVfZ2VvanNvbi5nZW9tZXRyeTtcbiAgICAgICAgICAgICAgICB2YXIgY29vcmRpbmF0ZXMgPSBmZWF0dXJlLmxvYWRHZW9tZXRyeSgpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHI9MDsgciA8IGNvb3JkaW5hdGVzLmxlbmd0aDsgcisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByaW5nID0gY29vcmRpbmF0ZXNbcl07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGM9MDsgYyA8IHJpbmcubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpbmdbY10gPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZ1tjXS54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmdbY10ueVxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5jb29yZGluYXRlcyA9IGNvb3JkaW5hdGVzO1xuXG4gICAgICAgICAgICAgICAgaWYgKFZlY3RvclRpbGVGZWF0dXJlLnR5cGVzW2ZlYXR1cmUudHlwZV0gPT09ICdQb2ludCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkudHlwZSA9ICdQb2ludCc7XG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNvb3JkaW5hdGVzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF1bMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFZlY3RvclRpbGVGZWF0dXJlLnR5cGVzW2ZlYXR1cmUudHlwZV0gPT09ICdMaW5lU3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29vcmRpbmF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS50eXBlID0gJ0xpbmVTdHJpbmcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuY29vcmRpbmF0ZXMgPSBnZW9tZXRyeS5jb29yZGluYXRlc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LnR5cGUgPSAnTXVsdGlMaW5lU3RyaW5nJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChWZWN0b3JUaWxlRmVhdHVyZS50eXBlc1tmZWF0dXJlLnR5cGVdID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBNVlRTb3VyY2UuZGVjb2RlTXVsdGlQb2x5Z29uKGdlb21ldHJ5KTsgLy8gdW4tZmxhdHRlbiByaW5nc1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxheWVyX2dlb2pzb24uZmVhdHVyZXMucHVzaChmZWF0dXJlX2dlb2pzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGF5ZXJzW2xdID0gbGF5ZXJfZ2VvanNvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGF5ZXJzO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBtdWx0aXBvbHlnb25zLCB3aGljaCBhcmUgZW5jb2RlZCBhcyBhIHNpbmdsZSBzZXQgb2YgcmluZ3NcbiAgICAvLyBXaW5kaW5nIG9yZGVyIG9mIGZpcnN0IHJpbmcgaXMgYXNzdW1lZCB0byBpbmRpY2F0ZSBleHRlcmlvciByaW5nLFxuICAgIC8vIHRoZSBvcHBvc2l0ZSB3aW5kaW5nIG9yZGVyIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSBuZXcgcG9seWdvbi5cbiAgICBzdGF0aWMgZGVjb2RlTXVsdGlQb2x5Z29uIChnZW9tKSB7XG4gICAgICAgIGxldCBwb2x5cyA9IFtdO1xuICAgICAgICBsZXQgcG9seSA9IFtdO1xuICAgICAgICBsZXQgb3V0ZXJfd2luZGluZztcbiAgICAgICAgZm9yIChsZXQgcmluZyBvZiBnZW9tLmNvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgICBsZXQgd2luZGluZyA9IEdlby5yaW5nV2luZGluZyhyaW5nKTtcbiAgICAgICAgICAgIGlmICh3aW5kaW5nID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gc2tpcCB6ZXJvLWFyZWEgcmluZ3NcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0ZXJfd2luZGluZyA9IG91dGVyX3dpbmRpbmcgfHwgd2luZGluZzsgLy8gYXNzdW1lIGZpcnN0IHJpbmcgaW5kaWNhdGVzIG91dGVyIHJpbmcgd2luZGluZ1xuXG4gICAgICAgICAgICBpZiAod2luZGluZyA9PT0gb3V0ZXJfd2luZGluZyAmJiBwb2x5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwb2x5cy5wdXNoKHBvbHkpO1xuICAgICAgICAgICAgICAgIHBvbHkgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvbHkucHVzaChyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9seS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwb2x5cy5wdXNoKHBvbHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2luZ2xlIG9yIG11bHRpP1xuICAgICAgICBpZiAocG9seXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBnZW9tLnR5cGUgPSAnUG9seWdvbic7XG4gICAgICAgICAgICBnZW9tLmNvb3JkaW5hdGVzID0gcG9seXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW9tLnR5cGUgPSAnTXVsdGlQb2x5Z29uJztcbiAgICAgICAgICAgIGdlb20uY29vcmRpbmF0ZXMgPSBwb2x5cztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZW9tO1xuICAgIH1cblxufVxuXG5EYXRhU291cmNlLnJlZ2lzdGVyKE1WVFNvdXJjZSwgJ01WVCcpO1xuIiwiaW1wb3J0IERhdGFTb3VyY2UsIHtOZXR3b3JrVGlsZVNvdXJjZX0gZnJvbSAnLi9kYXRhX3NvdXJjZSc7XG5pbXBvcnQgVGlsZSBmcm9tICcuLi90aWxlJztcbmltcG9ydCBHZW8gZnJvbSAnLi4vZ2VvJztcblxuZXhwb3J0IGNsYXNzIFJhc3RlclRpbGVTb3VyY2UgZXh0ZW5kcyBOZXR3b3JrVGlsZVNvdXJjZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihzb3VyY2UpIHtcbiAgICAgICAgc3VwZXIoc291cmNlKTtcblxuICAgICAgICBpZiAodGhpcy5yYXN0ZXJzLmluZGV4T2YodGhpcy5uYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMucmFzdGVycy51bnNoaWZ0KHRoaXMubmFtZSk7IC8vIGFkZCB0aGlzIHJhc3RlciBhcyB0aGUgZmlyc3RcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcmluZyA9IHNvdXJjZS5maWx0ZXJpbmc7IC8vIG9wdGlvbmFsIHRleHR1cmUgZmlsdGVyaW5nIChuZWFyZXN0LCBsaW5lYXIsIG1pcG1hcClcblxuICAgICAgICAvLyBzYXZlIHRleHR1cmUgb2JqZWN0cyBieSB0aWxlIGtleSwgc28gVVJMIHJlbWFpbnMgc3RhYmxlIGlmIHRpbGUgaXMgYnVpbHQgbXVsdGlwbGUgdGltZXMsXG4gICAgICAgIC8vIGUuZy4gYXZvaWQgcmUtbG9hZGluZyB0aGUgc2FtZSB0aWxlIHRleHR1cmUgdW5kZXIgYSBkaWZmZXJlbnQgc3ViZG9tYWluIHdoZW4gdXNpbmcgdGlsZSBob3N0c1xuICAgICAgICB0aGlzLnRleHR1cmVzID0ge307XG4gICAgfVxuXG4gICAgbG9hZCh0aWxlKSB7XG4gICAgICAgIHRpbGUuc291cmNlX2RhdGEgPSB7fTtcbiAgICAgICAgdGlsZS5zb3VyY2VfZGF0YS5sYXllcnMgPSB7fTtcbiAgICAgICAgdGlsZS5wYWRfc2NhbGUgPSB0aGlzLnBhZF9zY2FsZTtcbiAgICAgICAgdGlsZS5yYXN0ZXJzID0gWy4uLnRoaXMucmFzdGVyc107IC8vIGNvcHkgbGlzdCBvZiByYXN0ZXJzIHRvIGxvYWQgZm9yIHRpbGVcblxuICAgICAgICAvLyBHZW5lcmF0ZSBhIHNpbmdsZSBxdWFkIHRoYXQgZmlsbHMgdGhlIGVudGlyZSB0aWxlXG4gICAgICAgIGxldCBzY2FsZSA9IEdlby50aWxlX3NjYWxlO1xuICAgICAgICB0aWxlLnNvdXJjZV9kYXRhLmxheWVycyA9IHtcbiAgICAgICAgICAgIF9kZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgICAgICBmZWF0dXJlczogW3tcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQb2x5Z29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLCAwXSwgW3NjYWxlLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2NhbGUsIC1zY2FsZV0sIFswLCAtc2NhbGVdLCBbMCwgMF1cbiAgICAgICAgICAgICAgICAgICAgICAgIF1dXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHt9XG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aWxlLmRlZmF1bHRfd2luZGluZyA9ICdDVyc7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGlsZSk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRleHR1cmUgaW5mbyBmb3IgYSByYXN0ZXIgdGlsZVxuICAgIHRpbGVUZXh0dXJlICh0aWxlKSB7XG4gICAgICAgIGxldCBrZXkgPSB0aWxlLmNvb3Jkcy5rZXk7XG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlc1trZXldKSB7XG4gICAgICAgICAgICBsZXQgY29vcmRzID0gVGlsZS5jb29yZGluYXRlV2l0aE1heFpvb20odGlsZS5jb29yZHMsIHRoaXMubWF4X3pvb20pO1xuICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuZm9ybWF0VXJsKHRoaXMudXJsLCB7IGNvb3JkcyB9KTtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZXNba2V5XSA9IHsgdXJsLCBmaWx0ZXJpbmc6IHRoaXMuZmlsdGVyaW5nLCBjb29yZHMgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlc1trZXldO1xuICAgIH1cblxufVxuXG5EYXRhU291cmNlLnJlZ2lzdGVyKFJhc3RlclRpbGVTb3VyY2UsICdSYXN0ZXInKTtcbiIsImltcG9ydCBEYXRhU291cmNlIGZyb20gJy4vZGF0YV9zb3VyY2UnO1xuaW1wb3J0IHtHZW9KU09OU291cmNlLCBHZW9KU09OVGlsZVNvdXJjZX0gZnJvbSAnLi9nZW9qc29uJztcblxuaW1wb3J0IHRvcG9qc29uIGZyb20gJ3RvcG9qc29uJztcblxuLyoqXG4gVG9wb0pTT04gc3RhbmRhbG9uZSAobm9uLXRpbGVkKSBzb3VyY2VcbiBVc2VzIGdlb2pzb24tdnQgc3BsaXQgaW50byB0aWxlcyBjbGllbnQtc2lkZVxuKi9cblxuZXhwb3J0IGNsYXNzIFRvcG9KU09OU291cmNlIGV4dGVuZHMgR2VvSlNPTlNvdXJjZSB7XG5cbiAgICBwYXJzZVNvdXJjZURhdGEgKHRpbGUsIHNvdXJjZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICAgICAgZGF0YSA9IHRoaXMudG9HZW9KU09OKGRhdGEpO1xuICAgICAgICBzb3VyY2UubGF5ZXJzID0gdGhpcy5nZXRMYXllcnMoZGF0YSk7XG4gICAgfVxuXG4gICAgdG9HZW9KU09OIChkYXRhKSB7XG4gICAgICAgIC8vIFNpbmdsZSBsYXllclxuICAgICAgICBpZiAoZGF0YS5vYmplY3RzICYmXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhLm9iamVjdHMpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgbGV0IGxheWVyID0gT2JqZWN0LmtleXMoZGF0YS5vYmplY3RzKVswXTtcbiAgICAgICAgICAgIGRhdGEgPSB0b3BvanNvbi5mZWF0dXJlKGRhdGEsIGRhdGEub2JqZWN0c1tsYXllcl0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIE11bHRpcGxlIGxheWVyc1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBsYXllcnMgPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBkYXRhLm9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICBsYXllcnNba2V5XSA9IHRvcG9qc29uLmZlYXR1cmUoZGF0YSwgZGF0YS5vYmplY3RzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YSA9IGxheWVycztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbn1cblxuLyoqXG4gTWFwemVuL09TTS5VUy1zdHlsZSBUb3BvSlNPTiB2ZWN0b3IgdGlsZXNcbiBAY2xhc3MgVG9wb0pTT05UaWxlU291cmNlXG4qL1xuZXhwb3J0IGNsYXNzIFRvcG9KU09OVGlsZVNvdXJjZSBleHRlbmRzIEdlb0pTT05UaWxlU291cmNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHNvdXJjZSkge1xuICAgICAgICBsZXQgX3RoaXMgPSBzdXBlcihzb3VyY2UpO1xuXG4gICAgICAgIC8vIFJlcGxhY2Ugd2l0aCBub24tdGlsZWQgc291cmNlIGlmIHRpbGVkIHNvdXJjZSBmYWlsZWQgdG8gaW5zdGFudGlhdGVcbiAgICAgICAgaWYgKF90aGlzICE9PSB0aGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRvcG9KU09OU291cmNlKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZVNvdXJjZURhdGEgKHRpbGUsIHNvdXJjZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICAgICAgZGF0YSA9IFRvcG9KU09OU291cmNlLnByb3RvdHlwZS50b0dlb0pTT04oZGF0YSk7XG4gICAgICAgIHRoaXMucHJlcGFyZUdlb0pTT04oZGF0YSwgdGlsZSwgc291cmNlKTtcbiAgICB9XG5cbn1cblxuRGF0YVNvdXJjZS5yZWdpc3RlcihUb3BvSlNPTlRpbGVTb3VyY2UsICdUb3BvSlNPTicpOyAgICAgICAgLy8gcHJlZmVyZWQgc2hvcnRlciBuYW1lXG5EYXRhU291cmNlLnJlZ2lzdGVyKFRvcG9KU09OVGlsZVNvdXJjZSwgJ1RvcG9KU09OVGlsZXMnKTsgICAvLyBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHlcblxuIiwiLy8gTGluZSByZW5kZXJpbmcgc3R5bGVcblxuaW1wb3J0IHtTdHlsZX0gZnJvbSAnLi4vc3R5bGUnO1xuaW1wb3J0IHtTdHlsZVBhcnNlcn0gZnJvbSAnLi4vc3R5bGVfcGFyc2VyJztcbmltcG9ydCB7U3R5bGVNYW5hZ2VyfSBmcm9tICcuLi9zdHlsZV9tYW5hZ2VyJztcbmltcG9ydCBnbCBmcm9tICcuLi8uLi9nbC9jb25zdGFudHMnOyAvLyB3ZWIgd29ya2VycyBkb24ndCBoYXZlIGFjY2VzcyB0byBHTCBjb250ZXh0LCBzbyBpbXBvcnQgYWxsIEdMIGNvbnN0YW50c1xuaW1wb3J0IFZlcnRleExheW91dCBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfbGF5b3V0JztcbmltcG9ydCB7YnVpbGRQb2x5bGluZXN9IGZyb20gJy4uLy4uL2J1aWxkZXJzL3BvbHlsaW5lcyc7XG5pbXBvcnQgR2VvIGZyb20gJy4uLy4uL2dlbyc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuXG5leHBvcnQgdmFyIExpbmVzID0gT2JqZWN0LmNyZWF0ZShTdHlsZSk7XG5cbk9iamVjdC5hc3NpZ24oTGluZXMsIHtcbiAgICBuYW1lOiAnbGluZXMnLFxuICAgIGJ1aWx0X2luOiB0cnVlLFxuICAgIHZlcnRleF9zaGFkZXJfa2V5OiAnc3R5bGVzL3BvbHlnb25zL3BvbHlnb25zX3ZlcnRleCcsIC8vIHJlLXVzZSBwb2x5Z29uIHNoYWRlcnNcbiAgICBmcmFnbWVudF9zaGFkZXJfa2V5OiAnc3R5bGVzL3BvbHlnb25zL3BvbHlnb25zX2ZyYWdtZW50JyxcbiAgICBzZWxlY3Rpb246IHRydWUsIC8vIHR1cm4gZmVhdHVyZSBzZWxlY3Rpb24gb25cblxuICAgIGluaXQoKSB7XG4gICAgICAgIFN0eWxlLmluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgICAvLyBCYXNpYyBhdHRyaWJ1dGVzLCBvdGhlcnMgY2FuIGJlIGFkZGVkIChzZWUgdGV4dHVyZSBVVnMgYmVsb3cpXG4gICAgICAgIHZhciBhdHRyaWJzID0gW1xuICAgICAgICAgICAgeyBuYW1lOiAnYV9wb3NpdGlvbicsIHNpemU6IDQsIHR5cGU6IGdsLlNIT1JULCBub3JtYWxpemVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdhX2V4dHJ1ZGUnLCBzaXplOiA0LCB0eXBlOiBnbC5TSE9SVCwgbm9ybWFsaXplZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnYV9jb2xvcicsIHNpemU6IDQsIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsIG5vcm1hbGl6ZWQ6IHRydWUgfVxuICAgICAgICBdO1xuXG4gICAgICAgIC8vIFRlbGwgdGhlIHNoYWRlciB3ZSB3YW50IGEgb3JkZXIgaW4gdmVydGV4IGF0dHJpYnV0ZXMsIGFuZCB0byBleHRydWRlIGxpbmVzXG4gICAgICAgIHRoaXMuZGVmaW5lcy5UQU5HUkFNX0xBWUVSX09SREVSID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fRVhUUlVERV9MSU5FUyA9IHRydWU7XG5cbiAgICAgICAgLy8gT3B0aW9uYWwgZmVhdHVyZSBzZWxlY3Rpb25cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBhdHRyaWJzLnB1c2goeyBuYW1lOiAnYV9zZWxlY3Rpb25fY29sb3InLCBzaXplOiA0LCB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLCBub3JtYWxpemVkOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0aW9uYWwgdGV4dHVyZSBVVnNcbiAgICAgICAgaWYgKHRoaXMudGV4Y29vcmRzKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmluZXMuVEFOR1JBTV9URVhUVVJFX0NPT1JEUyA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIFNjYWxpbmcgZmFjdG9yIHRvIGFkZCBwcmVjaXNpb24gdG8gbGluZSB0ZXh0dXJlIFYgY29vcmRpbmF0ZSBwYWNrZWQgYXMgbm9ybWFsaXplZCBzaG9ydFxuICAgICAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fVl9TQ0FMRV9BREpVU1QgPSBHZW8udGlsZV9zY2FsZTtcblxuICAgICAgICAgICAgLy8gQWRkIHZlcnRleCBhdHRyaWJ1dGUgZm9yIFVWcyBvbmx5IHdoZW4gbmVlZGVkXG4gICAgICAgICAgICBhdHRyaWJzLnB1c2goeyBuYW1lOiAnYV90ZXhjb29yZCcsIHNpemU6IDIsIHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JULCBub3JtYWxpemVkOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52ZXJ0ZXhfbGF5b3V0ID0gbmV3IFZlcnRleExheW91dChhdHRyaWJzKTtcblxuICAgICAgICAvLyBBZGRpdGlvbmFsIHNpbmdsZS1hbGxvY2F0ZWQgb2JqZWN0IHVzZWQgZm9yIGhvbGRpbmcgb3V0bGluZSBzdHlsZSBhcyBpdCBpcyBwcm9jZXNzZWRcbiAgICAgICAgLy8gU2VwYXJhdGUgZnJvbSB0aGlzLmZlYXR1cmVfc3R5bGUgc28gdGhhdCBvdXRsaW5lIHByb3BlcnRpZXMgZG8gbm90IG92ZXJ3cml0ZSBjYWxjdWxhdGVkXG4gICAgICAgIC8vIGlubGluZSBwcm9wZXJ0aWVzIChvdXRsaW5lIGNhbGwgaXMgbWFkZSAqd2l0aGluKiB0aGUgaW5saW5lIGNhbGwpXG4gICAgICAgIHRoaXMub3V0bGluZV9mZWF0dXJlX3N0eWxlID0ge307XG4gICAgICAgIHRoaXMuaW5saW5lX2ZlYXR1cmVfc3R5bGUgPSB0aGlzLmZlYXR1cmVfc3R5bGU7IC8vIHNhdmUgcmVmZXJlbmNlIHRvIG1haW4gY29tcHV0ZWQgc3R5bGUgb2JqZWN0XG4gICAgfSxcblxuICAgIC8vIENhbGN1bGF0ZSB3aWR0aCBhdCB6b29tIGdpdmVuIGluIGBjb250ZXh0YFxuICAgIGNhbGNXaWR0aCAod2lkdGgsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCAmJiBTdHlsZVBhcnNlci5jYWNoZURpc3RhbmNlKHdpZHRoLCBjb250ZXh0KSkgfHwgMDtcbiAgICB9LFxuXG4gICAgLy8gQ2FsY3VsYXRlIHdpZHRoIGF0IG5leHQgem9vbSAodXNlZCBmb3IgbGluZSB3aWR0aCBpbnRlcnBvbGF0aW9uKVxuICAgIGNhbGNXaWR0aE5leHRab29tICh3aWR0aCwgY29udGV4dCkge1xuICAgICAgICBjb250ZXh0Lnpvb20rKztcbiAgICAgICAgbGV0IHZhbCA9IHRoaXMuY2FsY1dpZHRoKHdpZHRoLCBjb250ZXh0KTtcbiAgICAgICAgY29udGV4dC56b29tLS07XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIF9wYXJzZUZlYXR1cmUgKGZlYXR1cmUsIHJ1bGVfc3R5bGUsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5mZWF0dXJlX3N0eWxlO1xuXG4gICAgICAgIC8vIGxpbmUgd2lkdGggaW4gbWV0ZXJzXG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMuY2FsY1dpZHRoKHJ1bGVfc3R5bGUud2lkdGgsIGNvbnRleHQpO1xuICAgICAgICBpZiAod2lkdGggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47IC8vIHNraXAgbGluZXMgd2l0aCBuZWdhdGl2ZSB3aWR0aFxuICAgICAgICB9XG4gICAgICAgIGxldCBuZXh0X3dpZHRoID0gdGhpcy5jYWxjV2lkdGhOZXh0Wm9vbShydWxlX3N0eWxlLm5leHRfd2lkdGgsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmICgod2lkdGggPT09IDAgJiYgbmV4dF93aWR0aCA9PT0gMCkgfHwgbmV4dF93aWR0aCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjsgLy8gc2tpcCBsaW5lcyB0aGF0IGRvbid0IGludGVycG9sYXRlIHRvIGEgcG9zaXRpdmUgdmFsdWUgYXQgbmV4dCB6b29tXG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb252ZXJ0IHRvIHVuaXRzIGFuZCByZWxhdGl2ZSBjaGFuZ2UgZnJvbSBwcmV2aW91cyB6b29tXG4gICAgICAgIC8vIE5COiBtdWx0aXBseSBieSAyIGJlY2F1c2UgYSBnaXZlbiB3aWR0aCBpcyB0d2ljZSBhcyBiaWcgaW4gc2NyZWVuIHNwYWNlIGF0IHRoZSBuZXh0IHpvb21cbiAgICAgICAgc3R5bGUud2lkdGggPSB3aWR0aCAqIGNvbnRleHQudW5pdHNfcGVyX21ldGVyO1xuICAgICAgICBzdHlsZS5uZXh0X3dpZHRoID0gKG5leHRfd2lkdGggKiAyKSAtIHdpZHRoO1xuICAgICAgICBzdHlsZS5uZXh0X3dpZHRoICo9IGNvbnRleHQudW5pdHNfcGVyX21ldGVyO1xuICAgICAgICBzdHlsZS5uZXh0X3dpZHRoIC89IDI7IC8vIE5COiBkaXZpZGUgYnkgMiBiZWNhdXNlIGV4dHJ1c2lvbiB3aWR0aCBpcyBoYWx2ZWQgaW4gYnVpbGRlciAtIHJlbW92ZT9cblxuICAgICAgICBzdHlsZS5jb2xvciA9IHRoaXMucGFyc2VDb2xvcihydWxlX3N0eWxlLmNvbG9yLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzdHlsZS5jb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGVpZ2h0IGRlZmF1bHRzIHRvIGZlYXR1cmUgaGVpZ2h0LCBidXQgZXh0cnVkZSBzdHlsZSBjYW4gZHluYW1pY2FsbHkgYWRqdXN0IGhlaWdodCBieSByZXR1cm5pbmcgYSBudW1iZXIgb3IgYXJyYXkgKGluc3RlYWQgb2YgYSBib29sZWFuKVxuICAgICAgICBzdHlsZS56ID0gKHJ1bGVfc3R5bGUueiAmJiBTdHlsZVBhcnNlci5jYWNoZURpc3RhbmNlKHJ1bGVfc3R5bGUueiB8fCAwLCBjb250ZXh0KSkgfHwgU3R5bGVQYXJzZXIuZGVmYXVsdHMuejtcbiAgICAgICAgc3R5bGUuaGVpZ2h0ID0gZmVhdHVyZS5wcm9wZXJ0aWVzLmhlaWdodCB8fCBTdHlsZVBhcnNlci5kZWZhdWx0cy5oZWlnaHQ7XG4gICAgICAgIHN0eWxlLmV4dHJ1ZGUgPSBTdHlsZVBhcnNlci5ldmFsUHJvcChydWxlX3N0eWxlLmV4dHJ1ZGUsIGNvbnRleHQpO1xuICAgICAgICBpZiAoc3R5bGUuZXh0cnVkZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5leHRydWRlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmhlaWdodCA9IHN0eWxlLmV4dHJ1ZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHN0eWxlLmV4dHJ1ZGUpKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuaGVpZ2h0ID0gc3R5bGUuZXh0cnVkZVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJhaXNlIGxpbmUgaGVpZ2h0IGlmIGV4dHJ1ZGVkXG4gICAgICAgIGlmIChzdHlsZS5leHRydWRlICYmIHN0eWxlLmhlaWdodCkge1xuICAgICAgICAgICAgc3R5bGUueiArPSBzdHlsZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZS5jYXAgPSBydWxlX3N0eWxlLmNhcDtcbiAgICAgICAgc3R5bGUuam9pbiA9IHJ1bGVfc3R5bGUuam9pbjtcbiAgICAgICAgc3R5bGUubWl0ZXJfbGltaXQgPSBydWxlX3N0eWxlLm1pdGVyX2xpbWl0O1xuICAgICAgICBzdHlsZS50aWxlX2VkZ2VzID0gcnVsZV9zdHlsZS50aWxlX2VkZ2VzOyAvLyB1c3VhbGx5IGFjdGl2YXRlZCBmb3IgZGVidWdnaW5nLCBvciByYXJlIHZpc3VhbGl6YXRpb24gbmVlZHNcblxuICAgICAgICAvLyBDb25zdHJ1Y3QgYW4gb3V0bGluZSBzdHlsZVxuICAgICAgICAvLyBSZXVzYWJsZSBvdXRsaW5lIHN0eWxlIG9iamVjdCwgbWFya2VkIGFzIGFscmVhZHkgd3JhcHBlZCBpbiBjYWNoZSBvYmplY3RzIChwcmVwcm9jZXNzZWQgPSB0cnVlKVxuICAgICAgICBzdHlsZS5vdXRsaW5lID0gc3R5bGUub3V0bGluZSB8fCB7IHdpZHRoOiB7fSwgbmV4dF93aWR0aDoge30sIHByZXByb2Nlc3NlZDogdHJ1ZSB9O1xuXG4gICAgICAgIGlmIChydWxlX3N0eWxlLm91dGxpbmUgJiYgcnVsZV9zdHlsZS5vdXRsaW5lLmNvbG9yICYmIHJ1bGVfc3R5bGUub3V0bGluZS53aWR0aCkge1xuICAgICAgICAgICAgLy8gb3V0bGluZSB3aWR0aCBpbiBtZXRlcnNcbiAgICAgICAgICAgIC8vIE5COiBtdWx0aXBseSBieSAyIGJlY2F1c2Ugb3V0bGluZSBpcyBhcHBsaWVkIG9uIGJvdGggc2lkZXMgb2YgbGluZVxuICAgICAgICAgICAgbGV0IG91dGxpbmVfd2lkdGggPSB0aGlzLmNhbGNXaWR0aChydWxlX3N0eWxlLm91dGxpbmUud2lkdGgsIGNvbnRleHQpICogMjtcbiAgICAgICAgICAgIGxldCBvdXRsaW5lX25leHRfd2lkdGggPSB0aGlzLmNhbGNXaWR0aE5leHRab29tKHJ1bGVfc3R5bGUub3V0bGluZS5uZXh0X3dpZHRoLCBjb250ZXh0KSAqIDI7XG5cbiAgICAgICAgICAgIGlmICgob3V0bGluZV93aWR0aCA9PT0gMCAmJiBvdXRsaW5lX25leHRfd2lkdGggPT09IDApIHx8IG91dGxpbmVfd2lkdGggPCAwIHx8IG91dGxpbmVfbmV4dF93aWR0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBza2lwIGxpbmVzIHRoYXQgZG9uJ3QgaW50ZXJwb2xhdGUgYmV0d2VlbiB6ZXJvIG9yIGdyZWF0ZXIgd2lkdGhcbiAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLndpZHRoLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLm5leHRfd2lkdGgudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN0eWxlLm91dGxpbmUuY29sb3IgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gY29uc2lzdGVudCBvdXRsaW5lIHdpZHRoIGFyb3VuZCB0aGUgbGluZSBmaWxsXG4gICAgICAgICAgICAgICAgc3R5bGUub3V0bGluZS53aWR0aC52YWx1ZSA9IG91dGxpbmVfd2lkdGggKyB3aWR0aDtcbiAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLm5leHRfd2lkdGgudmFsdWUgPSBvdXRsaW5lX25leHRfd2lkdGggKyBuZXh0X3dpZHRoO1xuXG4gICAgICAgICAgICAgICAgc3R5bGUub3V0bGluZS5jb2xvciA9IHJ1bGVfc3R5bGUub3V0bGluZS5jb2xvcjtcbiAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLmNhcCA9IHJ1bGVfc3R5bGUub3V0bGluZS5jYXAgfHwgcnVsZV9zdHlsZS5jYXA7XG4gICAgICAgICAgICAgICAgc3R5bGUub3V0bGluZS5qb2luID0gcnVsZV9zdHlsZS5vdXRsaW5lLmpvaW4gfHwgcnVsZV9zdHlsZS5qb2luO1xuICAgICAgICAgICAgICAgIHN0eWxlLm91dGxpbmUubWl0ZXJfbGltaXQgPSBydWxlX3N0eWxlLm91dGxpbmUubWl0ZXJfbGltaXQgfHwgcnVsZV9zdHlsZS5taXRlcl9saW1pdDtcbiAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLnN0eWxlID0gcnVsZV9zdHlsZS5vdXRsaW5lLnN0eWxlIHx8IHRoaXMubmFtZTtcblxuICAgICAgICAgICAgICAgIC8vIEV4cGxpY2l0bHkgZGVmaW5lZCBvdXRsaW5lIG9yZGVyLCBvciBpbmhlcml0ZWQgZnJvbSBpbm5lciBsaW5lXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGVfc3R5bGUub3V0bGluZS5vcmRlcikge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLm9yZGVyID0gdGhpcy5wYXJzZU9yZGVyKHJ1bGVfc3R5bGUub3V0bGluZS5vcmRlciwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLm9yZGVyID0gc3R5bGUub3JkZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgbGV0IG91dGxpbmUgYmUgYWJvdmUgaW5uZXIgbGluZVxuICAgICAgICAgICAgICAgIGlmIChzdHlsZS5vdXRsaW5lLm9yZGVyID4gc3R5bGUub3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUub3V0bGluZS5vcmRlciA9IHN0eWxlLm9yZGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIE91dGxpbmVzIGFyZSBhbHdheXMgYXQgaGFsZi1sYXllciBpbnRlcnZhbHMgdG8gYXZvaWQgY29uZmxpY3Rpbmcgd2l0aCBpbm5lciBsaW5lc1xuICAgICAgICAgICAgICAgIHN0eWxlLm91dGxpbmUub3JkZXIgLT0gMC41O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3R5bGUub3V0bGluZS53aWR0aC52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICBzdHlsZS5vdXRsaW5lLm5leHRfd2lkdGgudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgc3R5bGUub3V0bGluZS5jb2xvciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSxcblxuICAgIF9wcmVwcm9jZXNzIChkcmF3KSB7XG4gICAgICAgIGRyYXcuY29sb3IgPSBTdHlsZVBhcnNlci5jb2xvckNhY2hlT2JqZWN0KGRyYXcuY29sb3IpO1xuICAgICAgICBkcmF3LndpZHRoID0gU3R5bGVQYXJzZXIuY2FjaGVPYmplY3QoZHJhdy53aWR0aCwgU3R5bGVQYXJzZXIuY2FjaGVVbml0cyk7XG4gICAgICAgIGRyYXcubmV4dF93aWR0aCA9IFN0eWxlUGFyc2VyLmNhY2hlT2JqZWN0KGRyYXcud2lkdGgsIFN0eWxlUGFyc2VyLmNhY2hlVW5pdHMpOyAvLyB3aWR0aCB3aWxsIGJlIGNvbXB1dGVkIGZvciBuZXh0IHpvb21cbiAgICAgICAgZHJhdy56ID0gU3R5bGVQYXJzZXIuY2FjaGVPYmplY3QoZHJhdy56LCBTdHlsZVBhcnNlci5jYWNoZVVuaXRzKTtcblxuICAgICAgICBpZiAoZHJhdy5vdXRsaW5lKSB7XG4gICAgICAgICAgICBkcmF3Lm91dGxpbmUuY29sb3IgPSBTdHlsZVBhcnNlci5jb2xvckNhY2hlT2JqZWN0KGRyYXcub3V0bGluZS5jb2xvcik7XG4gICAgICAgICAgICBkcmF3Lm91dGxpbmUud2lkdGggPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3Lm91dGxpbmUud2lkdGgsIFN0eWxlUGFyc2VyLmNhY2hlVW5pdHMpO1xuICAgICAgICAgICAgZHJhdy5vdXRsaW5lLm5leHRfd2lkdGggPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3Lm91dGxpbmUud2lkdGgsIFN0eWxlUGFyc2VyLmNhY2hlVW5pdHMpOyAvLyB3aWR0aCByZS1jb21wdXRlZCBmb3IgbmV4dCB6b29tXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRyYXc7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEEgXCJ0ZW1wbGF0ZVwiIHRoYXQgc2V0cyBjb25zdGFudCBhdHRpYnV0ZXMgZm9yIGVhY2ggdmVydGV4LCB3aGljaCBpcyB0aGVuIG1vZGlmaWVkIHBlciB2ZXJ0ZXggb3IgcGVyIGZlYXR1cmUuXG4gICAgICogQSBwbGFpbiBKUyBhcnJheSBtYXRjaGluZyB0aGUgb3JkZXIgb2YgdGhlIHZlcnRleCBsYXlvdXQuXG4gICAgICovXG4gICAgbWFrZVZlcnRleFRlbXBsYXRlKHN0eWxlKSB7XG4gICAgICAgIGxldCBpID0gMDtcblxuICAgICAgICAvLyBwb3NpdGlvbiAtIHggJiB5IGNvb3JkcyB3aWxsIGJlIGZpbGxlZCBpbiBwZXItdmVydGV4IGJlbG93XG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSAwO1xuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gMDtcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLnogfHwgMDtcblxuICAgICAgICAvLyBsYXllciBvcmRlciAtIHcgY29vcmQgb2YgJ3Bvc2l0aW9uJyBhdHRyaWJ1dGUgKGZvciBwYWNraW5nIGVmZmljaWVuY3kpXG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSB0aGlzLnNjYWxlT3JkZXIoc3R5bGUub3JkZXIpO1xuXG4gICAgICAgIC8vIGV4dHJ1c2lvbiB2ZWN0b3JcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IDA7XG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSAwO1xuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gMDtcblxuICAgICAgICAvLyBzY2FsaW5nIHRvIHByZXZpb3VzIGFuZCBuZXh0IHpvb21cbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLm5leHRfd2lkdGg7XG5cbiAgICAgICAgLy8gY29sb3JcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLmNvbG9yWzBdICogMjU1O1xuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gc3R5bGUuY29sb3JbMV0gKiAyNTU7XG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSBzdHlsZS5jb2xvclsyXSAqIDI1NTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLmNvbG9yWzNdICogMjU1O1xuXG4gICAgICAgIC8vIHNlbGVjdGlvbiBjb2xvclxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSBzdHlsZS5zZWxlY3Rpb25fY29sb3JbMF0gKiAyNTU7XG4gICAgICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gc3R5bGUuc2VsZWN0aW9uX2NvbG9yWzFdICogMjU1O1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLnNlbGVjdGlvbl9jb2xvclsyXSAqIDI1NTtcbiAgICAgICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSBzdHlsZS5zZWxlY3Rpb25fY29sb3JbM10gKiAyNTU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdGV4dHVyZSBVVnMgdG8gdGVtcGxhdGUgb25seSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKHRoaXMudGV4Y29vcmRzKSB7XG4gICAgICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gMDtcbiAgICAgICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4X3RlbXBsYXRlO1xuICAgIH0sXG5cbiAgICBidWlsZExpbmVzKGxpbmVzLCBzdHlsZSwgdmVydGV4X2RhdGEsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gT3V0bGluZSAoYnVpbGQgZmlyc3Qgc28gdGhhdCBibGVuZGVkIGdlb21ldHJ5IHdpdGhvdXQgYSBkZXB0aCB0ZXN0IGlzIGRyYXduIGZpcnN0L3VuZGVyIHRoZSBpbm5lciBsaW5lKVxuICAgICAgICB0aGlzLmZlYXR1cmVfc3R5bGUgPSB0aGlzLm91dGxpbmVfZmVhdHVyZV9zdHlsZTsgLy8gc3dhcCBpbiBvdXRsaW5lLXNwZWNpZmljIHN0eWxlIGhvbGRlclxuICAgICAgICBpZiAoc3R5bGUub3V0bGluZSAmJiBzdHlsZS5vdXRsaW5lLmNvbG9yICE9IG51bGwgJiYgc3R5bGUub3V0bGluZS53aWR0aC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgb3V0bGluZV9zdHlsZSA9IFN0eWxlTWFuYWdlci5zdHlsZXNbc3R5bGUub3V0bGluZS5zdHlsZV07XG4gICAgICAgICAgICBpZiAob3V0bGluZV9zdHlsZSkge1xuICAgICAgICAgICAgICAgIG91dGxpbmVfc3R5bGUuYWRkRmVhdHVyZShjb250ZXh0LmZlYXR1cmUsIHN0eWxlLm91dGxpbmUsIGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFpbiBsaW5lXG4gICAgICAgIHRoaXMuZmVhdHVyZV9zdHlsZSA9IHRoaXMuaW5saW5lX2ZlYXR1cmVfc3R5bGU7IC8vIHJlc3RvcmUgY2FsY3VsYXRlZCBzdHlsZSBmb3IgaW5saW5lXG4gICAgICAgIGxldCB2ZXJ0ZXhfdGVtcGxhdGUgPSB0aGlzLm1ha2VWZXJ0ZXhUZW1wbGF0ZShzdHlsZSk7XG4gICAgICAgIGJ1aWxkUG9seWxpbmVzKFxuICAgICAgICAgICAgbGluZXMsXG4gICAgICAgICAgICBzdHlsZS53aWR0aCxcbiAgICAgICAgICAgIHZlcnRleF9kYXRhLFxuICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNhcDogc3R5bGUuY2FwLFxuICAgICAgICAgICAgICAgIGpvaW46IHN0eWxlLmpvaW4sXG4gICAgICAgICAgICAgICAgbWl0ZXJfbGltaXQ6IHN0eWxlLm1pdGVyX2xpbWl0LFxuICAgICAgICAgICAgICAgIHNjYWxpbmdfaW5kZXg6IHRoaXMudmVydGV4X2xheW91dC5pbmRleC5hX2V4dHJ1ZGUsXG4gICAgICAgICAgICAgICAgc2NhbGluZ19ub3JtYWxpemU6IFV0aWxzLnNjYWxlSW50MTYoMSwgMjU2KSwgLy8gc2NhbGUgZXh0cnVzaW9uIG5vcm1hbHMgdG8gc2lnbmVkIHNob3J0cyB3LzI1NiB1bml0IGJhc2lzXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRfaW5kZXg6IHRoaXMudmVydGV4X2xheW91dC5pbmRleC5hX3RleGNvb3JkLFxuICAgICAgICAgICAgICAgIHRleGNvb3JkX3NjYWxlOiB0aGlzLnRleGNvb3JkX3NjYWxlLFxuICAgICAgICAgICAgICAgIHRleGNvb3JkX25vcm1hbGl6ZTogNjU1MzUsIC8vIHNjYWxlIFVWcyB0byB1bnNpZ25lZCBzaG9ydHNcbiAgICAgICAgICAgICAgICBjbG9zZWRfcG9seWdvbjogb3B0aW9ucyAmJiBvcHRpb25zLmNsb3NlZF9wb2x5Z29uLFxuICAgICAgICAgICAgICAgIHJlbW92ZV90aWxlX2VkZ2VzOiAhc3R5bGUudGlsZV9lZGdlcyAmJiBvcHRpb25zICYmIG9wdGlvbnMucmVtb3ZlX3RpbGVfZWRnZXMsXG4gICAgICAgICAgICAgICAgdGlsZV9lZGdlX3RvbGVyYW5jZTogR2VvLnRpbGVfc2NhbGUgKiBjb250ZXh0LnRpbGUucGFkX3NjYWxlICogNFxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBidWlsZFBvbHlnb25zKHBvbHlnb25zLCBzdHlsZSwgdmVydGV4X2RhdGEsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gUmVuZGVyIHBvbHlnb25zIGFzIGluZGl2aWR1YWwgbGluZXNcbiAgICAgICAgZm9yIChsZXQgcD0wOyBwIDwgcG9seWdvbnMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRMaW5lcyhwb2x5Z29uc1twXSwgc3R5bGUsIHZlcnRleF9kYXRhLCBjb250ZXh0LCB7IGNsb3NlZF9wb2x5Z29uOiB0cnVlLCByZW1vdmVfdGlsZV9lZGdlczogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG4iLCIvLyBTZXRzIG9mIHZhbHVlcyB0byBtYXRjaCBmb3IgZGlyZWN0aW9uYWwgYW5kIGNvcm5lciBhbmNob3JzXG5jb25zdCBsZWZ0cyA9IFsnbGVmdCcsICd0b3AtbGVmdCcsICdib3R0b20tbGVmdCddO1xuY29uc3QgcmlnaHRzID0gWydyaWdodCcsICd0b3AtcmlnaHQnLCAnYm90dG9tLXJpZ2h0J107XG5jb25zdCB0b3BzID0gWyd0b3AnLCAndG9wLWxlZnQnLCAndG9wLXJpZ2h0J107XG5jb25zdCBib3R0b21zID0gWydib3R0b20nLCAnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0J107XG5cbnZhciBQb2ludEFuY2hvcjtcblxuZXhwb3J0IGRlZmF1bHQgUG9pbnRBbmNob3IgPSB7XG5cbiAgICBjb21wdXRlT2Zmc2V0IChvZmZzZXQsIHNpemUsIGFuY2hvcikge1xuICAgICAgICBpZiAoIWFuY2hvciB8fCBhbmNob3IgPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG9mZnNldDIgPSBbb2Zmc2V0WzBdLCBvZmZzZXRbMV1dO1xuXG4gICAgICAgIC8vIEFuIG9wdGlvbmFsIGxlZnQvcmlnaHQgb2Zmc2V0XG4gICAgICAgIGlmICh0aGlzLmlzTGVmdEFuY2hvcihhbmNob3IpKSB7XG4gICAgICAgICAgICBvZmZzZXQyWzBdIC09IHNpemVbMF0gLyAyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNSaWdodEFuY2hvcihhbmNob3IpKSB7XG4gICAgICAgICAgICBvZmZzZXQyWzBdICs9IHNpemVbMF0gLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQW4gb3B0aW9uYWwgdG9wL2JvdHRvbSBvZmZzZXRcbiAgICAgICAgaWYgKHRoaXMuaXNUb3BBbmNob3IoYW5jaG9yKSkge1xuICAgICAgICAgICAgb2Zmc2V0MlsxXSAtPSBzaXplWzFdIC8gMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzQm90dG9tQW5jaG9yKGFuY2hvcikpIHtcbiAgICAgICAgICAgIG9mZnNldDJbMV0gKz0gc2l6ZVsxXSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2Zmc2V0MjtcbiAgICB9LFxuXG4gICAgaXNMZWZ0QW5jaG9yIChhbmNob3IpIHtcbiAgICAgICAgcmV0dXJuIChsZWZ0cy5pbmRleE9mKGFuY2hvcikgPiAtMSk7XG4gICAgfSxcblxuICAgIGlzUmlnaHRBbmNob3IgKGFuY2hvcikge1xuICAgICAgICByZXR1cm4gKHJpZ2h0cy5pbmRleE9mKGFuY2hvcikgPiAtMSk7XG4gICAgfSxcblxuICAgIGlzVG9wQW5jaG9yIChhbmNob3IpIHtcbiAgICAgICAgcmV0dXJuICh0b3BzLmluZGV4T2YoYW5jaG9yKSA+IC0xKTtcbiAgICB9LFxuXG4gICAgaXNCb3R0b21BbmNob3IgKGFuY2hvcikge1xuICAgICAgICByZXR1cm4gKGJvdHRvbXMuaW5kZXhPZihhbmNob3IpID4gLTEpO1xuICAgIH1cblxufTtcbiIsIi8vIFBvaW50IHJlbmRlcmluZyBzdHlsZVxuXG5pbXBvcnQge1N0eWxlfSBmcm9tICcuLi9zdHlsZSc7XG5pbXBvcnQge1N0eWxlUGFyc2VyfSBmcm9tICcuLi9zdHlsZV9wYXJzZXInO1xuaW1wb3J0IGdsIGZyb20gJy4uLy4uL2dsL2NvbnN0YW50cyc7IC8vIHdlYiB3b3JrZXJzIGRvbid0IGhhdmUgYWNjZXNzIHRvIEdMIGNvbnRleHQsIHNvIGltcG9ydCBhbGwgR0wgY29uc3RhbnRzXG5pbXBvcnQgVmVydGV4TGF5b3V0IGZyb20gJy4uLy4uL2dsL3ZlcnRleF9sYXlvdXQnO1xuaW1wb3J0IHtidWlsZFF1YWRzRm9yUG9pbnRzfSBmcm9tICcuLi8uLi9idWlsZGVycy9wb2ludHMnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vLi4vZ2wvdGV4dHVyZSc7XG5pbXBvcnQgR2VvIGZyb20gJy4uLy4uL2dlbyc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IFZlY3RvciBmcm9tICcuLi8uLi92ZWN0b3InO1xuaW1wb3J0IENvbGxpc2lvbiBmcm9tICcuLi8uLi9sYWJlbHMvY29sbGlzaW9uJztcbmltcG9ydCBMYWJlbFBvaW50IGZyb20gJy4uLy4uL2xhYmVscy9sYWJlbF9wb2ludCc7XG5cbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG5leHBvcnQgdmFyIFBvaW50cyA9IE9iamVjdC5jcmVhdGUoU3R5bGUpO1xuXG5PYmplY3QuYXNzaWduKFBvaW50cywge1xuICAgIG5hbWU6ICdwb2ludHMnLFxuICAgIGJ1aWx0X2luOiB0cnVlLFxuICAgIHNlbGVjdGlvbjogdHJ1ZSwgLy8gdHVybiBmZWF0dXJlIHNlbGVjdGlvbiBvblxuICAgIGJsZW5kOiAnb3ZlcmxheScsIC8vIG92ZXJsYXlzIGRyYXduIG9uIHRvcCBvZiBhbGwgb3RoZXIgc3R5bGVzLCB3aXRoIGJsZW5kaW5nXG5cbiAgICBpbml0KG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBTdHlsZS5pbml0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgLy8gQmFzZSBzaGFkZXJzXG4gICAgICAgIHRoaXMudmVydGV4X3NoYWRlcl9rZXkgPSAnc3R5bGVzL3BvaW50cy9wb2ludHNfdmVydGV4JztcbiAgICAgICAgdGhpcy5mcmFnbWVudF9zaGFkZXJfa2V5ID0gJ3N0eWxlcy9wb2ludHMvcG9pbnRzX2ZyYWdtZW50JztcblxuICAgICAgICB2YXIgYXR0cmlicyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ2FfcG9zaXRpb24nLCBzaXplOiA0LCB0eXBlOiBnbC5TSE9SVCwgbm9ybWFsaXplZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnYV9zaGFwZScsIHNpemU6IDQsIHR5cGU6IGdsLlNIT1JULCBub3JtYWxpemVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdhX3RleGNvb3JkJywgc2l6ZTogMiwgdHlwZTogZ2wuVU5TSUdORURfU0hPUlQsIG5vcm1hbGl6ZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2Ffb2Zmc2V0Jywgc2l6ZTogMiwgdHlwZTogZ2wuU0hPUlQsIG5vcm1hbGl6ZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2FfY29sb3InLCBzaXplOiA0LCB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLCBub3JtYWxpemVkOiB0cnVlIH1cbiAgICAgICAgXTtcblxuICAgICAgICAvLyBPcHRpb25hbCBmZWF0dXJlIHNlbGVjdGlvblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGF0dHJpYnMucHVzaCh7IG5hbWU6ICdhX3NlbGVjdGlvbl9jb2xvcicsIHNpemU6IDQsIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsIG5vcm1hbGl6ZWQ6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSdyZSBub3QgcmVuZGVyaW5nIGFzIG92ZXJsYXksIHdlIG5lZWQgYSBsYXllciBhdHRyaWJ1dGVcbiAgICAgICAgaWYgKHRoaXMuYmxlbmQgIT09ICdvdmVybGF5Jykge1xuICAgICAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fTEFZRVJfT1JERVIgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52ZXJ0ZXhfbGF5b3V0ID0gbmV3IFZlcnRleExheW91dChhdHRyaWJzKTtcblxuICAgICAgICBpZiAodGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmluZXMuVEFOR1JBTV9QT0lOVF9URVhUVVJFID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2hhZGVycy51bmlmb3JtcyA9IHRoaXMuc2hhZGVycy51bmlmb3JtcyB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuc2hhZGVycy51bmlmb3Jtcy51X3RleHR1cmUgPSB0aGlzLnRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXVlcyA9IHt9O1xuICAgIH0sXG5cbiAgICByZXNldCAoKSB7XG4gICAgICAgIHRoaXMucXVldWVzID0ge307XG4gICAgfSxcblxuICAgIC8vIE92ZXJyaWRlIHRvIHF1ZXVlIGZlYXR1cmVzIGluc3RlYWQgb2YgcHJvY2Vzc2luZyBpbW1lZGlhdGVseVxuICAgIGFkZEZlYXR1cmUgKGZlYXR1cmUsIGRyYXcsIGNvbnRleHQpIHtcbiAgICAgICAgbGV0IHRpbGUgPSBjb250ZXh0LnRpbGU7XG5cbiAgICAgICAgLy8gQ2FsbGVkIGhlcmUgYmVjYXVzZSBvdGhlcndpc2UgaXQgd2lsbCBiZSBkZWxheWVkIHVudGlsIHRoZSBmZWF0dXJlIHF1ZXVlIGlzIHBhcnNlZCxcbiAgICAgICAgLy8gYW5kIHdlIHdhbnQgdGhlIHByZXByb2Nlc3NpbmcgZG9uZSBiZWZvcmUgd2UgZXZhbHVhdGUgdGV4dCBzdHlsZSBiZWxvd1xuICAgICAgICBkcmF3ID0gdGhpcy5wcmVwcm9jZXNzKGRyYXcpO1xuICAgICAgICBpZiAoIWRyYXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdHlsZSA9IHt9O1xuICAgICAgICBzdHlsZS5jb2xvciA9IHRoaXMucGFyc2VDb2xvcihkcmF3LmNvbG9yLCBjb250ZXh0KTtcblxuICAgICAgICAvLyByZXF1aXJlIGNvbG9yIG9yIHRleHR1cmVcbiAgICAgICAgaWYgKCFzdHlsZS5jb2xvciAmJiAhdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzcHJpdGUgPSBzdHlsZS5zcHJpdGUgPSBTdHlsZVBhcnNlci5ldmFsUHJvcChkcmF3LnNwcml0ZSwgY29udGV4dCk7XG4gICAgICAgIHN0eWxlLnNwcml0ZV9kZWZhdWx0ID0gZHJhdy5zcHJpdGVfZGVmYXVsdDsgLy8gb3B0aW9uYWwgZmFsbGJhY2sgaWYgJ3Nwcml0ZScgbm90IGZvdW5kXG5cbiAgICAgICAgLy8gaWYgcG9pbnQgaGFzIHRleHR1cmUgYW5kIHNwcml0ZXMsIHJlcXVpcmUgYSB2YWxpZCBzcHJpdGUgdG8gZHJhd1xuICAgICAgICBpZiAodGhpcy50ZXh0dXJlICYmIFRleHR1cmUudGV4dHVyZXNbdGhpcy50ZXh0dXJlXSAmJiBUZXh0dXJlLnRleHR1cmVzW3RoaXMudGV4dHVyZV0uc3ByaXRlcykge1xuICAgICAgICAgICAgaWYgKCFzcHJpdGUgJiYgIXN0eWxlLnNwcml0ZV9kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIVRleHR1cmUudGV4dHVyZXNbdGhpcy50ZXh0dXJlXS5zcHJpdGVzW3Nwcml0ZV0pIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBzcHJpdGUgbm90IGZvdW5kLCBjaGVjayBmb3IgZGVmYXVsdCBzcHJpdGVcbiAgICAgICAgICAgICAgICBpZiAoc3R5bGUuc3ByaXRlX2RlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ByaXRlID0gc3R5bGUuc3ByaXRlX2RlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVGV4dHVyZS50ZXh0dXJlc1t0aGlzLnRleHR1cmVdLnNwcml0ZXNbc3ByaXRlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4oYFN0eWxlOiBpbiBzdHlsZSAnJHt0aGlzLm5hbWV9JywgY291bGQgbm90IGZpbmQgZGVmYXVsdCBzcHJpdGUgJyR7c3ByaXRlfScgZm9yIHRleHR1cmUgJyR7dGhpcy50ZXh0dXJlfSdgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4oYFN0eWxlOiBpbiBzdHlsZSAnJHt0aGlzLm5hbWV9JywgY291bGQgbm90IGZpbmQgc3ByaXRlICcke3Nwcml0ZX0nIGZvciB0ZXh0dXJlICcke3RoaXMudGV4dHVyZX0nYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3ByaXRlKSB7XG4gICAgICAgICAgICBsb2cud2FybihgU3R5bGU6IGluIHN0eWxlICcke3RoaXMubmFtZX0nLCBzcHJpdGUgJyR7c3ByaXRlfScgd2FzIHNwZWNpZmllZCwgYnV0IHRleHR1cmUgJyR7dGhpcy50ZXh0dXJlfScgaGFzIG5vIHNwcml0ZXNgKTtcbiAgICAgICAgICAgIHNwcml0ZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXRzIHRleGNvb3JkIHNjYWxlIGlmIG5lZWRlZCAoZS5nLiBmb3Igc3ByaXRlIHN1Yi1hcmVhKVxuICAgICAgICBsZXQgc3ByaXRlX2luZm87XG4gICAgICAgIGlmICh0aGlzLnRleHR1cmUgJiYgc3ByaXRlKSB7XG4gICAgICAgICAgICBzcHJpdGVfaW5mbyA9IFRleHR1cmUuZ2V0U3ByaXRlSW5mbyh0aGlzLnRleHR1cmUsIHNwcml0ZSk7XG4gICAgICAgICAgICBzdHlsZS50ZXhjb29yZHMgPSBzcHJpdGVfaW5mby50ZXhjb29yZHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHlsZS50ZXhjb29yZHMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcG9pbnRzIGNhbiBiZSBwbGFjZWQgb2ZmIHRoZSBncm91bmRcbiAgICAgICAgc3R5bGUueiA9IChkcmF3LnogJiYgU3R5bGVQYXJzZXIuY2FjaGVEaXN0YW5jZShkcmF3LnosIGNvbnRleHQpKSB8fCBTdHlsZVBhcnNlci5kZWZhdWx0cy56O1xuXG4gICAgICAgIC8vIHBvaW50IHNpemUgZGVmaW5lZCBleHBsaWNpdGx5LCBvciBkZWZhdWx0cyB0byBzcHJpdGUgc2l6ZSwgb3IgZ2VuZXJpYyBmYWxsYmFja1xuICAgICAgICBzdHlsZS5zaXplID0gZHJhdy5zaXplO1xuICAgICAgICBpZiAoIXN0eWxlLnNpemUpIHtcbiAgICAgICAgICAgIGlmIChzcHJpdGVfaW5mbykge1xuICAgICAgICAgICAgICAgIHN0eWxlLnNpemUgPSBzcHJpdGVfaW5mby5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc2l6ZSA9IFsxNiwgMTZdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3R5bGUuc2l6ZSA9IFN0eWxlUGFyc2VyLmNhY2hlUHJvcGVydHkoc3R5bGUuc2l6ZSwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzaXplIHdpbGwgYmUgc2NhbGVkIHRvIDE2LWJpdCBzaWduZWQgaW50LCBzbyBtYXggYWxsb3dlZCB3aWR0aCArIGhlaWdodCBvZiAyNTYgcGl4ZWxzXG4gICAgICAgIHN0eWxlLnNpemUgPSBbXG4gICAgICAgICAgICBNYXRoLm1pbigoc3R5bGUuc2l6ZVswXSB8fCBzdHlsZS5zaXplKSwgMjU2KSxcbiAgICAgICAgICAgIE1hdGgubWluKChzdHlsZS5zaXplWzFdIHx8IHN0eWxlLnNpemUpLCAyNTYpXG4gICAgICAgIF07XG5cbiAgICAgICAgc3R5bGUuYW5nbGUgPSBTdHlsZVBhcnNlci5ldmFsUHJvcChkcmF3LmFuZ2xlLCBjb250ZXh0KSB8fCAwO1xuXG4gICAgICAgIC8vIHBvbHlnb25zIHJlbmRlcmluZyBhcyBwb2ludHMgd2lsbCByZW5kZXIgYXQgdGhlIHBvbHlnb24ncyBjZW50cm9pZCBieSBkZWZhdWx0LFxuICAgICAgICAvLyBidXQgY2FuIGJlIHNldCB0byByZW5kZXIgYXQgZWFjaCBpbmRpdmlkdWFsIHBvbHlnb24gcG9pbnQgaW5zdGVhZFxuICAgICAgICBzdHlsZS5jZW50cm9pZCA9IChkcmF3LmNlbnRyb2lkICE9IG51bGwpID8gZHJhdy5jZW50cm9pZCA6IHRydWU7XG5cbiAgICAgICAgdGhpcy5jb21wdXRlTGF5b3V0KHN0eWxlLCBmZWF0dXJlLCBkcmF3LCBjb250ZXh0LCB0aWxlKTtcblxuICAgICAgICAvLyBRdWV1ZSB0aGUgZmVhdHVyZSBmb3IgcHJvY2Vzc2luZ1xuICAgICAgICBpZiAoIXRoaXMudGlsZV9kYXRhW3RpbGUua2V5XSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydERhdGEodGlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucXVldWVzW3RpbGUua2V5XSkge1xuICAgICAgICAgICAgdGhpcy5xdWV1ZXNbdGlsZS5rZXldID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXVlc1t0aWxlLmtleV0ucHVzaCh7XG4gICAgICAgICAgICBmZWF0dXJlLCBkcmF3LCBjb250ZXh0LCBzdHlsZVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWdpc3RlciB3aXRoIGNvbGxpc2lvbiBtYW5hZ2VyXG4gICAgICAgIENvbGxpc2lvbi5hZGRTdHlsZSh0aGlzLm5hbWUsIHRpbGUua2V5KTtcbiAgICB9LFxuXG4gICAgLy8gT3ZlcnJpZGVcbiAgICBlbmREYXRhICh0aWxlKSB7XG4gICAgICAgIGlmICh0aWxlLmNhbmNlbGVkKSB7XG4gICAgICAgICAgICBVdGlscy5sb2coJ3RyYWNlJywgYFN0eWxlICR7dGhpcy5uYW1lfTogc3RvcCB0aWxlIGJ1aWxkIGJlY2F1c2UgdGlsZSB3YXMgY2FuY2VsZWQ6ICR7dGlsZS5rZXl9YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcXVldWUgPSB0aGlzLnF1ZXVlc1t0aWxlLmtleV07XG4gICAgICAgIHRoaXMucXVldWVzW3RpbGUua2V5XSA9IFtdO1xuXG4gICAgICAgIC8vIEZvciBlYWNoIGZlYXR1cmUsIGNyZWF0ZSBvbmUgb3IgbW9yZSBwb2ludCBsYWJlbHNcbiAgICAgICAgbGV0IGJveGVzID0gW107XG4gICAgICAgIHF1ZXVlLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICBsZXQgc3R5bGUgPSBxLnN0eWxlO1xuICAgICAgICAgICAgbGV0IGZlYXR1cmUgPSBxLmZlYXR1cmU7XG4gICAgICAgICAgICBsZXQgZ2VvbWV0cnkgPSBmZWF0dXJlLmdlb21ldHJ5O1xuXG4gICAgICAgICAgICBsZXQgZmVhdHVyZV9sYWJlbHMgPSB0aGlzLmJ1aWxkTGFiZWxzRnJvbUdlb21ldHJ5KHN0eWxlLnNpemUsIGdlb21ldHJ5LCBzdHlsZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZlYXR1cmVfbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gZmVhdHVyZV9sYWJlbHNbaV07XG4gICAgICAgICAgICAgICAgYm94ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgIGRyYXc6IHEuZHJhdyxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogcS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0OiBzdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3VibWl0IHBvaW50IGxhYmVscyBmb3IgY29sbGlzaW9uLCB0aGVuIGJ1aWxkIGdlb21ldHJ5IGZvciByZW1haW5pbmcgb25lc1xuICAgICAgICByZXR1cm4gQ29sbGlzaW9uLmNvbGxpZGUoYm94ZXMsIHRoaXMubmFtZSwgdGlsZS5rZXkpLnRoZW4oYm94ZXMgPT4ge1xuICAgICAgICAgICAgYm94ZXMuZm9yRWFjaChxID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVfc3R5bGUgPSBxLnN0eWxlO1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZV9zdHlsZS5sYWJlbCA9IHEubGFiZWw7XG5cbiAgICAgICAgICAgICAgICBTdHlsZS5hZGRGZWF0dXJlLmNhbGwodGhpcywgcS5mZWF0dXJlLCBxLmRyYXcsIHEuY29udGV4dCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFN0eWxlLmVuZERhdGEuY2FsbCh0aGlzLCB0aWxlKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9wcmVwcm9jZXNzIChkcmF3KSB7XG4gICAgICAgIGRyYXcuY29sb3IgPSBTdHlsZVBhcnNlci5jb2xvckNhY2hlT2JqZWN0KGRyYXcuY29sb3IpO1xuICAgICAgICBkcmF3LnogPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3LnosIFN0eWxlUGFyc2VyLmNhY2hlVW5pdHMpO1xuXG4gICAgICAgIC8vIFNpemUgKDFkIHZhbHVlIG9yIDJkIGFycmF5KVxuICAgICAgICBkcmF3LnNpemUgPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3LnNpemUsIHYgPT4gQXJyYXkuaXNBcnJheSh2KSA/IHYubWFwKHBhcnNlRmxvYXQpIDogcGFyc2VGbG9hdCh2KSk7XG5cbiAgICAgICAgLy8gT2Zmc2V0ICgyZCBhcnJheSlcbiAgICAgICAgZHJhdy5vZmZzZXQgPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3Lm9mZnNldCwgdiA9PiAoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lm1hcChwYXJzZUZsb2F0KSkgfHwgMCk7XG5cbiAgICAgICAgLy8gQnVmZmVyICgxZCB2YWx1ZSBvciAyZCBhcnJheSwgZXhwYW5kIDFkIHRvIDJkKVxuICAgICAgICBkcmF3LmJ1ZmZlciA9IFN0eWxlUGFyc2VyLmNhY2hlT2JqZWN0KGRyYXcuYnVmZmVyLCB2ID0+IChBcnJheS5pc0FycmF5KHYpID8gdiA6IFt2LCB2XSkubWFwKHBhcnNlRmxvYXQpIHx8IDApO1xuXG4gICAgICAgIHJldHVybiBkcmF3O1xuICAgIH0sXG5cbiAgICAvLyBDb21wdXRlIGxhYmVsIGxheW91dC1yZWxhdGVkIHByb3BlcnRpZXNcbiAgICBjb21wdXRlTGF5b3V0ICh0YXJnZXQsIGZlYXR1cmUsIGRyYXcsIGNvbnRleHQsIHRpbGUpIHtcbiAgICAgICAgbGV0IGxheW91dCA9IHRhcmdldCB8fCB7fTtcbiAgICAgICAgbGF5b3V0LmlkID0gZmVhdHVyZTtcbiAgICAgICAgbGF5b3V0LnVuaXRzX3Blcl9waXhlbCA9IHRpbGUudW5pdHNfcGVyX3BpeGVsIHx8IDE7XG5cbiAgICAgICAgLy8gY29sbGlzaW9uIGZsYWdcbiAgICAgICAgbGF5b3V0LmNvbGxpZGUgPSAoZHJhdy5jb2xsaWRlID09PSBmYWxzZSkgPyBmYWxzZSA6IHRydWU7XG5cbiAgICAgICAgLy8gbGFiZWwgYW5jaG9ycyAocG9pbnQgbGFiZWxzIG9ubHkpXG4gICAgICAgIC8vIGxhYmVsIHBvc2l0aW9uIHdpbGwgYmUgYWRqdXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgcmVsYXRpdmUgdG8gaXRzIG9yaWdpbmFsIHBvaW50XG4gICAgICAgIC8vIG9uZSBvZjogbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCB0b3AtbGVmdCwgdG9wLXJpZ2h0LCBib3R0b20tbGVmdCwgYm90dG9tLXJpZ2h0XG4gICAgICAgIGxheW91dC5hbmNob3IgPSBkcmF3LmFuY2hvcjtcblxuICAgICAgICAvLyBsYWJlbCBvZmZzZXQgYW5kIGJ1ZmZlciBpbiBwaXhlbCAoYXBwbGllZCBpbiBzY3JlZW4gc3BhY2UpXG4gICAgICAgIGxheW91dC5vZmZzZXQgPSBTdHlsZVBhcnNlci5jYWNoZVByb3BlcnR5KGRyYXcub2Zmc2V0LCBjb250ZXh0KSB8fCBTdHlsZVBhcnNlci56ZXJvUGFpcjtcbiAgICAgICAgbGF5b3V0LmJ1ZmZlciA9IFN0eWxlUGFyc2VyLmNhY2hlUHJvcGVydHkoZHJhdy5idWZmZXIsIGNvbnRleHQpIHx8IFN0eWxlUGFyc2VyLnplcm9QYWlyO1xuXG4gICAgICAgIC8vIGxhYmVsIHByaW9yaXR5IChsb3dlciBpcyBoaWdoZXIpXG4gICAgICAgIGxldCBwcmlvcml0eSA9IGRyYXcucHJpb3JpdHk7XG4gICAgICAgIGlmIChwcmlvcml0eSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByaW9yaXR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcHJpb3JpdHkgPSBwcmlvcml0eShjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHByaW9yaXR5ID0gLTEgPj4+IDA7IC8vIGRlZmF1bHQgdG8gbWF4IHByaW9yaXR5IHZhbHVlIGlmIG5vbmUgc2V0XG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0LnByaW9yaXR5ID0gcHJpb3JpdHk7XG5cbiAgICAgICAgcmV0dXJuIGxheW91dDtcbiAgICB9LFxuXG4gICAgLy8gQnVpbGRzIG9uZSBvciBtb3JlIHBvaW50IGxhYmVscyBmb3IgYSBnZW9tZXRyeVxuICAgIGJ1aWxkTGFiZWxzRnJvbUdlb21ldHJ5IChzaXplLCBnZW9tZXRyeSwgb3B0aW9ucykge1xuICAgICAgICBsZXQgbGFiZWxzID0gW107XG5cbiAgICAgICAgaWYgKGdlb21ldHJ5LnR5cGUgPT09IFwiUG9pbnRcIikge1xuICAgICAgICAgICAgbGFiZWxzLnB1c2gobmV3IExhYmVsUG9pbnQoZ2VvbWV0cnkuY29vcmRpbmF0ZXMsIHNpemUsIG9wdGlvbnMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIk11bHRpUG9pbnRcIikge1xuICAgICAgICAgICAgbGV0IHBvaW50cyA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICAgICAgbGFiZWxzLnB1c2gobmV3IExhYmVsUG9pbnQocG9pbnQsIHNpemUsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIkxpbmVTdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gUG9pbnQgYXQgZWFjaCBsaW5lIHZlcnRleFxuICAgICAgICAgICAgbGV0IHBvaW50cyA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBsYWJlbHMucHVzaChuZXcgTGFiZWxQb2ludChwb2ludHNbaV0sIHNpemUsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIk11bHRpTGluZVN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyBQb2ludCBhdCBlYWNoIGxpbmUgdmVydGV4XG4gICAgICAgICAgICBsZXQgbGluZXMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICAgICAgICAgIGZvciAobGV0IGxuID0gMDsgbG4gPCBsaW5lcy5sZW5ndGg7IGxuKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnRzID0gbGluZXNbbG5dO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVscy5wdXNoKG5ldyBMYWJlbFBvaW50KHBvaW50c1tpXSwgc2l6ZSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIlBvbHlnb25cIikge1xuICAgICAgICAgICAgLy8gUG9pbnQgYXQgcG9seWdvbiBjZW50cm9pZCAob2Ygb3V0ZXIgcmluZylcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNlbnRyb2lkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNlbnRyb2lkID0gR2VvLmNlbnRyb2lkKGdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdKTtcbiAgICAgICAgICAgICAgICBsYWJlbHMucHVzaChuZXcgTGFiZWxQb2ludChjZW50cm9pZCwgc2l6ZSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUG9pbnQgYXQgZWFjaCBwb2x5Z29uIHZlcnRleCAoYWxsIHJpbmdzKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHJpbmdzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbG4gPSAwOyBsbiA8IHJpbmdzLmxlbmd0aDsgbG4rKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcG9pbnRzID0gcmluZ3NbbG5dO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzLnB1c2gobmV3IExhYmVsUG9pbnQocG9pbnRzW2ldLCBzaXplLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gXCJNdWx0aVBvbHlnb25cIikge1xuICAgICAgICAgICAgbGV0IGNlbnRyb2lkID0gR2VvLm11bHRpQ2VudHJvaWQoZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgbGFiZWxzLnB1c2gobmV3IExhYmVsUG9pbnQoY2VudHJvaWQsIHNpemUsIG9wdGlvbnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEEgXCJ0ZW1wbGF0ZVwiIHRoYXQgc2V0cyBjb25zdGFudCBhdHRpYnV0ZXMgZm9yIGVhY2ggdmVydGV4LCB3aGljaCBpcyB0aGVuIG1vZGlmaWVkIHBlciB2ZXJ0ZXggb3IgcGVyIGZlYXR1cmUuXG4gICAgICogQSBwbGFpbiBKUyBhcnJheSBtYXRjaGluZyB0aGUgb3JkZXIgb2YgdGhlIHZlcnRleCBsYXlvdXQuXG4gICAgICovXG4gICAgbWFrZVZlcnRleFRlbXBsYXRlKHN0eWxlKSB7XG4gICAgICAgIGxldCBjb2xvciA9IHN0eWxlLmNvbG9yIHx8IFN0eWxlUGFyc2VyLmRlZmF1bHRzLmNvbG9yO1xuXG4gICAgICAgIC8vIHBvc2l0aW9uIC0geCAmIHkgY29vcmRzIHdpbGwgYmUgZmlsbGVkIGluIHBlci12ZXJ0ZXggYmVsb3dcbiAgICAgICAgdGhpcy5maWxsVmVydGV4VGVtcGxhdGUoJ2FfcG9zaXRpb24nLCAwLCB7IHNpemU6IDIgfSk7XG4gICAgICAgIHRoaXMuZmlsbFZlcnRleFRlbXBsYXRlKCdhX3Bvc2l0aW9uJywgc3R5bGUueiB8fCAwLCB7IHNpemU6IDEsIG9mZnNldDogMiB9KTtcbiAgICAgICAgLy8gbGF5ZXIgb3JkZXIgLSB3IGNvb3JkIG9mICdwb3NpdGlvbicgYXR0cmlidXRlIChmb3IgcGFja2luZyBlZmZpY2llbmN5KVxuICAgICAgICB0aGlzLmZpbGxWZXJ0ZXhUZW1wbGF0ZSgnYV9wb3NpdGlvbicsIHRoaXMuc2NhbGVPcmRlcihzdHlsZS5vcmRlciksIHsgc2l6ZTogMSwgb2Zmc2V0OiAzIH0pO1xuXG4gICAgICAgIC8vIHNjYWxpbmcgdmVjdG9yIC0gKHgsIHkpIGNvbXBvbmVudHMgcGVyIHBpeGVsLCB6ID0gYW5nbGUsIHcgPSBzY2FsaW5nIGZhY3RvclxuICAgICAgICB0aGlzLmZpbGxWZXJ0ZXhUZW1wbGF0ZSgnYV9zaGFwZScsIDAsIHsgc2l6ZTogNCB9KTtcblxuICAgICAgICAvLyB0ZXh0dXJlIGNvb3Jkc1xuICAgICAgICB0aGlzLmZpbGxWZXJ0ZXhUZW1wbGF0ZSgnYV90ZXhjb29yZCcsIDAsIHsgc2l6ZTogMiB9KTtcblxuICAgICAgICAvLyBvZmZzZXRzXG4gICAgICAgIHRoaXMuZmlsbFZlcnRleFRlbXBsYXRlKCdhX29mZnNldCcsIDAsIHsgc2l6ZTogMiB9KTtcblxuICAgICAgICAvLyBjb2xvclxuICAgICAgICB0aGlzLmZpbGxWZXJ0ZXhUZW1wbGF0ZSgnYV9jb2xvcicsIFZlY3Rvci5tdWx0KGNvbG9yLCAyNTUpLCB7IHNpemU6IDQgfSk7XG5cbiAgICAgICAgLy8gc2VsZWN0aW9uIGNvbG9yXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5maWxsVmVydGV4VGVtcGxhdGUoJ2Ffc2VsZWN0aW9uX2NvbG9yJywgVmVjdG9yLm11bHQoc3R5bGUuc2VsZWN0aW9uX2NvbG9yLCAyNTUpLCB7IHNpemU6IDQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhfdGVtcGxhdGU7XG4gICAgfSxcblxuICAgIGJ1aWxkUXVhZCAocG9pbnRzLCBzaXplLCBhbmdsZSwgb2Zmc2V0LCB0ZXhjb29yZF9zY2FsZSwgdmVydGV4X2RhdGEsIHZlcnRleF90ZW1wbGF0ZSkge1xuICAgICAgICBidWlsZFF1YWRzRm9yUG9pbnRzKFxuICAgICAgICAgICAgcG9pbnRzLFxuICAgICAgICAgICAgdmVydGV4X2RhdGEsXG4gICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4Y29vcmRfaW5kZXg6IHRoaXMudmVydGV4X2xheW91dC5pbmRleC5hX3RleGNvb3JkLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uX2luZGV4OiB0aGlzLnZlcnRleF9sYXlvdXQuaW5kZXguYV9wb3NpdGlvbixcbiAgICAgICAgICAgICAgICBzaGFwZV9pbmRleDogdGhpcy52ZXJ0ZXhfbGF5b3V0LmluZGV4LmFfc2hhcGUsXG4gICAgICAgICAgICAgICAgb2Zmc2V0X2luZGV4OiB0aGlzLnZlcnRleF9sYXlvdXQuaW5kZXguYV9vZmZzZXRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcXVhZDogWyBVdGlscy5zY2FsZUludDE2KHNpemVbMF0sIDI1NiksIFV0aWxzLnNjYWxlSW50MTYoc2l6ZVsxXSwgMjU2KSBdLFxuICAgICAgICAgICAgICAgIHF1YWRfc2NhbGU6IFV0aWxzLnNjYWxlSW50MTYoMSwgMjU2KSxcbiAgICAgICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICAgICAgYW5nbGU6IFV0aWxzLnNjYWxlSW50MTYoYW5nbGUsIDM2MCksXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRfc2NhbGU6IHRleGNvb3JkX3NjYWxlLFxuICAgICAgICAgICAgICAgIHRleGNvb3JkX25vcm1hbGl6ZTogNjU1MzVcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLy8gQnVpbGQgcXVhZCBmb3IgcG9pbnQgc3ByaXRlXG4gICAgYnVpbGQgKHN0eWxlLCB2ZXJ0ZXhfZGF0YSkge1xuICAgICAgICBsZXQgdmVydGV4X3RlbXBsYXRlID0gdGhpcy5tYWtlVmVydGV4VGVtcGxhdGUoc3R5bGUpO1xuICAgICAgICBsZXQgbGFiZWwgPSBzdHlsZS5sYWJlbDtcblxuICAgICAgICB0aGlzLmJ1aWxkUXVhZChcbiAgICAgICAgICAgIFtsYWJlbC5wb3NpdGlvbl0sICAgICAgICAgICAgICAgLy8gcG9zaXRpb25cbiAgICAgICAgICAgIHN0eWxlLnNpemUsICAgICAgICAgICAgICAgICAgICAgLy8gc2l6ZSBpbiBwaXhlbHNcbiAgICAgICAgICAgIHN0eWxlLmFuZ2xlLCAgICAgICAgICAgICAgICAgICAgLy8gYW5nbGUgaW4gZGVncmVlc1xuICAgICAgICAgICAgbGFiZWwub3B0aW9ucy5vZmZzZXQsICAgICAgICAgICAvLyBvZmZzZXQgZnJvbSBjZW50ZXIgaW4gcGl4ZWxzXG4gICAgICAgICAgICBzdHlsZS50ZXhjb29yZHMsICAgICAgICAgICAgICAgIC8vIHRleHR1cmUgVVZzXG4gICAgICAgICAgICB2ZXJ0ZXhfZGF0YSwgdmVydGV4X3RlbXBsYXRlICAgIC8vIFZCTyBhbmQgZGF0YSBmb3IgY3VycmVudCB2ZXJ0ZXhcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLy8gT3ZlcnJpZGUgdG8gcGFzcy10aHJvdWdoIHRvIGdlbmVyaWMgcG9pbnQgYnVpbGRlclxuICAgIGJ1aWxkTGluZXMgKGxpbmVzLCBzdHlsZSwgdmVydGV4X2RhdGEpIHtcbiAgICAgICAgdGhpcy5idWlsZChzdHlsZSwgdmVydGV4X2RhdGEpO1xuICAgIH0sXG5cbiAgICBidWlsZFBvaW50cyAocG9pbnRzLCBzdHlsZSwgdmVydGV4X2RhdGEpIHtcbiAgICAgICAgdGhpcy5idWlsZChzdHlsZSwgdmVydGV4X2RhdGEpO1xuICAgIH0sXG5cbiAgICBidWlsZFBvbHlnb25zIChwb2ludHMsIHN0eWxlLCB2ZXJ0ZXhfZGF0YSkge1xuICAgICAgICB0aGlzLmJ1aWxkKHN0eWxlLCB2ZXJ0ZXhfZGF0YSk7XG4gICAgfVxuXG59KTtcbiIsIi8vIFBvbHlnb24gcmVuZGVyaW5nIHN0eWxlXG5cbmltcG9ydCB7U3R5bGV9IGZyb20gJy4uL3N0eWxlJztcbmltcG9ydCB7U3R5bGVQYXJzZXJ9IGZyb20gJy4uL3N0eWxlX3BhcnNlcic7XG5pbXBvcnQgZ2wgZnJvbSAnLi4vLi4vZ2wvY29uc3RhbnRzJzsgLy8gd2ViIHdvcmtlcnMgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gR0wgY29udGV4dCwgc28gaW1wb3J0IGFsbCBHTCBjb25zdGFudHNcbmltcG9ydCBWZXJ0ZXhMYXlvdXQgZnJvbSAnLi4vLi4vZ2wvdmVydGV4X2xheW91dCc7XG5pbXBvcnQge2J1aWxkUG9seWdvbnMsIGJ1aWxkRXh0cnVkZWRQb2x5Z29uc30gZnJvbSAnLi4vLi4vYnVpbGRlcnMvcG9seWdvbnMnO1xuaW1wb3J0IEdlbyBmcm9tICcuLi8uLi9nZW8nO1xuXG5leHBvcnQgdmFyIFBvbHlnb25zID0gT2JqZWN0LmNyZWF0ZShTdHlsZSk7XG5cbk9iamVjdC5hc3NpZ24oUG9seWdvbnMsIHtcbiAgICBuYW1lOiAncG9seWdvbnMnLFxuICAgIGJ1aWx0X2luOiB0cnVlLFxuICAgIHZlcnRleF9zaGFkZXJfa2V5OiAnc3R5bGVzL3BvbHlnb25zL3BvbHlnb25zX3ZlcnRleCcsXG4gICAgZnJhZ21lbnRfc2hhZGVyX2tleTogJ3N0eWxlcy9wb2x5Z29ucy9wb2x5Z29uc19mcmFnbWVudCcsXG4gICAgc2VsZWN0aW9uOiB0cnVlLCAvLyB0dXJuIGZlYXR1cmUgc2VsZWN0aW9uIG9uXG5cbiAgICBpbml0KCkge1xuICAgICAgICBTdHlsZS5pbml0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgLy8gQmFzaWMgYXR0cmlidXRlcywgb3RoZXJzIGNhbiBiZSBhZGRlZCAoc2VlIHRleHR1cmUgVVZzIGJlbG93KVxuICAgICAgICB2YXIgYXR0cmlicyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ2FfcG9zaXRpb24nLCBzaXplOiA0LCB0eXBlOiBnbC5TSE9SVCwgbm9ybWFsaXplZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnYV9ub3JtYWwnLCBzaXplOiAzLCB0eXBlOiBnbC5CWVRFLCBub3JtYWxpemVkOiB0cnVlIH0sIC8vIGdldHMgcGFkZGVkIHRvIDQtYnl0ZXNcbiAgICAgICAgICAgIHsgbmFtZTogJ2FfY29sb3InLCBzaXplOiA0LCB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLCBub3JtYWxpemVkOiB0cnVlIH1cbiAgICAgICAgXTtcblxuICAgICAgICAvLyBUZWxsIHRoZSBzaGFkZXIgd2UgaGF2ZSBhIG5vcm1hbCBhbmQgb3JkZXIgYXR0cmlidXRlc1xuICAgICAgICB0aGlzLmRlZmluZXMuVEFOR1JBTV9OT1JNQUxfQVRUUklCVVRFID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fTEFZRVJfT1JERVIgPSB0cnVlO1xuXG4gICAgICAgIC8vIE9wdGlvbmFsIGZlYXR1cmUgc2VsZWN0aW9uXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgYXR0cmlicy5wdXNoKHsgbmFtZTogJ2Ffc2VsZWN0aW9uX2NvbG9yJywgc2l6ZTogNCwgdHlwZTogZ2wuVU5TSUdORURfQllURSwgbm9ybWFsaXplZDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9wdGlvbmFsIHRleHR1cmUgVVZzXG4gICAgICAgIGlmICh0aGlzLnRleGNvb3Jkcykge1xuICAgICAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fVEVYVFVSRV9DT09SRFMgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBBZGQgdmVydGV4IGF0dHJpYnV0ZSBmb3IgVVZzIG9ubHkgd2hlbiBuZWVkZWRcbiAgICAgICAgICAgIGF0dHJpYnMucHVzaCh7IG5hbWU6ICdhX3RleGNvb3JkJywgc2l6ZTogMiwgdHlwZTogZ2wuVU5TSUdORURfU0hPUlQsIG5vcm1hbGl6ZWQ6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZlcnRleF9sYXlvdXQgPSBuZXcgVmVydGV4TGF5b3V0KGF0dHJpYnMpO1xuICAgIH0sXG5cbiAgICBfcGFyc2VGZWF0dXJlIChmZWF0dXJlLCBydWxlX3N0eWxlLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMuZmVhdHVyZV9zdHlsZTtcblxuICAgICAgICBzdHlsZS5jb2xvciA9IHRoaXMucGFyc2VDb2xvcihydWxlX3N0eWxlLmNvbG9yLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzdHlsZS5jb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoZWlnaHQgZGVmYXVsdHMgdG8gZmVhdHVyZSBoZWlnaHQsIGJ1dCBleHRydWRlIHN0eWxlIGNhbiBkeW5hbWljYWxseSBhZGp1c3QgaGVpZ2h0IGJ5IHJldHVybmluZyBhIG51bWJlciBvciBhcnJheSAoaW5zdGVhZCBvZiBhIGJvb2xlYW4pXG4gICAgICAgIHN0eWxlLnogPSAocnVsZV9zdHlsZS56ICYmIFN0eWxlUGFyc2VyLmNhY2hlRGlzdGFuY2UocnVsZV9zdHlsZS56LCBjb250ZXh0KSkgfHwgU3R5bGVQYXJzZXIuZGVmYXVsdHMuejtcbiAgICAgICAgc3R5bGUuaGVpZ2h0ID0gZmVhdHVyZS5wcm9wZXJ0aWVzLmhlaWdodCB8fCBTdHlsZVBhcnNlci5kZWZhdWx0cy5oZWlnaHQ7XG4gICAgICAgIHN0eWxlLm1pbl9oZWlnaHQgPSBmZWF0dXJlLnByb3BlcnRpZXMubWluX2hlaWdodCB8fCBTdHlsZVBhcnNlci5kZWZhdWx0cy5taW5faGVpZ2h0O1xuICAgICAgICBzdHlsZS5leHRydWRlID0gU3R5bGVQYXJzZXIuZXZhbFByb3AocnVsZV9zdHlsZS5leHRydWRlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHN0eWxlLmV4dHJ1ZGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZXh0cnVkZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5oZWlnaHQgPSBzdHlsZS5leHRydWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzdHlsZS5leHRydWRlKSkge1xuICAgICAgICAgICAgICAgIHN0eWxlLm1pbl9oZWlnaHQgPSBzdHlsZS5leHRydWRlWzBdO1xuICAgICAgICAgICAgICAgIHN0eWxlLmhlaWdodCA9IHN0eWxlLmV4dHJ1ZGVbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZS50aWxlX2VkZ2VzID0gcnVsZV9zdHlsZS50aWxlX2VkZ2VzOyAvLyB1c3VhbGx5IGFjdGl2YXRlZCBmb3IgZGVidWdnaW5nLCBvciByYXJlIHZpc3VhbGl6YXRpb24gbmVlZHNcblxuICAgICAgICAvLyBzdHlsZS5vdXRsaW5lID0gc3R5bGUub3V0bGluZSB8fCB7fTtcbiAgICAgICAgLy8gaWYgKHJ1bGVfc3R5bGUub3V0bGluZSkge1xuICAgICAgICAvLyAgICAgc3R5bGUub3V0bGluZS5jb2xvciA9IFN0eWxlUGFyc2VyLnBhcnNlQ29sb3IocnVsZV9zdHlsZS5vdXRsaW5lLmNvbG9yLCBjb250ZXh0KTtcbiAgICAgICAgLy8gICAgIHN0eWxlLm91dGxpbmUud2lkdGggPSBTdHlsZVBhcnNlci5wYXJzZURpc3RhbmNlKHJ1bGVfc3R5bGUub3V0bGluZS53aWR0aCwgY29udGV4dCk7XG4gICAgICAgIC8vICAgICBzdHlsZS5vdXRsaW5lLnRpbGVfZWRnZXMgPSBydWxlX3N0eWxlLm91dGxpbmUudGlsZV9lZGdlcztcbiAgICAgICAgLy8gICAgIHN0eWxlLm91dGxpbmUuY2FwID0gcnVsZV9zdHlsZS5vdXRsaW5lLmNhcCB8fCBydWxlX3N0eWxlLmNhcDtcbiAgICAgICAgLy8gICAgIHN0eWxlLm91dGxpbmUuam9pbiA9IHJ1bGVfc3R5bGUub3V0bGluZS5qb2luIHx8IHJ1bGVfc3R5bGUuam9pbjtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgLy8gICAgIHN0eWxlLm91dGxpbmUuY29sb3IgPSBudWxsO1xuICAgICAgICAvLyAgICAgc3R5bGUub3V0bGluZS53aWR0aCA9IG51bGw7XG4gICAgICAgIC8vICAgICBzdHlsZS5vdXRsaW5lLnRpbGVfZWRnZXMgPSBmYWxzZTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgX3ByZXByb2Nlc3MgKGRyYXcpIHtcbiAgICAgICAgZHJhdy5jb2xvciA9IFN0eWxlUGFyc2VyLmNvbG9yQ2FjaGVPYmplY3QoZHJhdy5jb2xvcik7XG4gICAgICAgIGRyYXcueiA9IFN0eWxlUGFyc2VyLmNhY2hlT2JqZWN0KGRyYXcueiwgU3R5bGVQYXJzZXIuY2FjaGVVbml0cyk7XG4gICAgICAgIHJldHVybiBkcmF3O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBIFwidGVtcGxhdGVcIiB0aGF0IHNldHMgY29uc3RhbnQgYXR0aWJ1dGVzIGZvciBlYWNoIHZlcnRleCwgd2hpY2ggaXMgdGhlbiBtb2RpZmllZCBwZXIgdmVydGV4IG9yIHBlciBmZWF0dXJlLlxuICAgICAqIEEgcGxhaW4gSlMgYXJyYXkgbWF0Y2hpbmcgdGhlIG9yZGVyIG9mIHRoZSB2ZXJ0ZXggbGF5b3V0LlxuICAgICAqL1xuICAgIG1ha2VWZXJ0ZXhUZW1wbGF0ZShzdHlsZSkge1xuICAgICAgICBsZXQgaSA9IDA7XG5cbiAgICAgICAgLy8gcG9zaXRpb24gLSB4ICYgeSBjb29yZHMgd2lsbCBiZSBmaWxsZWQgaW4gcGVyLXZlcnRleCBiZWxvd1xuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gMDtcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IDA7XG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSBzdHlsZS56IHx8IDA7XG5cbiAgICAgICAgLy8gbGF5ZXIgb3JkZXIgLSB3IGNvb3JkIG9mICdwb3NpdGlvbicgYXR0cmlidXRlIChmb3IgcGFja2luZyBlZmZpY2llbmN5KVxuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gdGhpcy5zY2FsZU9yZGVyKHN0eWxlLm9yZGVyKTtcblxuICAgICAgICAvLyBub3JtYWxcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IDA7XG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSAwO1xuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gMSAqIDEyNztcblxuICAgICAgICAvLyBjb2xvclxuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gc3R5bGUuY29sb3JbMF0gKiAyNTU7XG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSBzdHlsZS5jb2xvclsxXSAqIDI1NTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLmNvbG9yWzJdICogMjU1O1xuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gc3R5bGUuY29sb3JbM10gKiAyNTU7XG5cbiAgICAgICAgLy8gc2VsZWN0aW9uIGNvbG9yXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLnNlbGVjdGlvbl9jb2xvclswXSAqIDI1NTtcbiAgICAgICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSBzdHlsZS5zZWxlY3Rpb25fY29sb3JbMV0gKiAyNTU7XG4gICAgICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gc3R5bGUuc2VsZWN0aW9uX2NvbG9yWzJdICogMjU1O1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLnNlbGVjdGlvbl9jb2xvclszXSAqIDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCB0ZXh0dXJlIFVWcyB0byB0ZW1wbGF0ZSBvbmx5IGlmIG5lZWRlZFxuICAgICAgICBpZiAodGhpcy50ZXhjb29yZHMpIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSAwO1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhfdGVtcGxhdGU7XG4gICAgfSxcblxuICAgIGJ1aWxkUG9seWdvbnMocG9seWdvbnMsIHN0eWxlLCB2ZXJ0ZXhfZGF0YSwgY29udGV4dCkge1xuICAgICAgICBsZXQgdmVydGV4X3RlbXBsYXRlID0gdGhpcy5tYWtlVmVydGV4VGVtcGxhdGUoc3R5bGUpO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHRleGNvb3JkX2luZGV4OiB0aGlzLnZlcnRleF9sYXlvdXQuaW5kZXguYV90ZXhjb29yZCxcbiAgICAgICAgICAgIHRleGNvb3JkX3NjYWxlOiB0aGlzLnRleGNvb3JkX3NjYWxlLFxuICAgICAgICAgICAgdGV4Y29vcmRfbm9ybWFsaXplOiA2NTUzNSwgLy8gc2NhbGUgVVZzIHRvIHVuc2lnbmVkIHNob3J0c1xuICAgICAgICAgICAgcmVtb3ZlX3RpbGVfZWRnZXM6ICFzdHlsZS50aWxlX2VkZ2VzLFxuICAgICAgICAgICAgdGlsZV9lZGdlX3RvbGVyYW5jZTogR2VvLnRpbGVfc2NhbGUgKiBjb250ZXh0LnRpbGUucGFkX3NjYWxlICogNCxcbiAgICAgICAgICAgIHdpbmRpbmc6IGNvbnRleHQud2luZGluZ1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEV4dHJ1ZGVkIHBvbHlnb25zIChlLmcuIDNEIGJ1aWxkaW5ncylcbiAgICAgICAgaWYgKHN0eWxlLmV4dHJ1ZGUgJiYgc3R5bGUuaGVpZ2h0KSB7XG4gICAgICAgICAgICBidWlsZEV4dHJ1ZGVkUG9seWdvbnMoXG4gICAgICAgICAgICAgICAgcG9seWdvbnMsXG4gICAgICAgICAgICAgICAgc3R5bGUueiwgc3R5bGUuaGVpZ2h0LCBzdHlsZS5taW5faGVpZ2h0LFxuICAgICAgICAgICAgICAgIHZlcnRleF9kYXRhLCB2ZXJ0ZXhfdGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgdGhpcy52ZXJ0ZXhfbGF5b3V0LmluZGV4LmFfbm9ybWFsLFxuICAgICAgICAgICAgICAgIDEyNywgLy8gc2NhbGUgbm9ybWFscyB0byBzaWduZWQgYnl0ZXNcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlZ3VsYXIgcG9seWdvbnNcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBidWlsZFBvbHlnb25zKFxuICAgICAgICAgICAgICAgIHBvbHlnb25zLFxuICAgICAgICAgICAgICAgIHZlcnRleF9kYXRhLCB2ZXJ0ZXhfdGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG4iLCIvLyBSYXN0ZXIgdGlsZSByZW5kZXJpbmcgc3R5bGVcblxuaW1wb3J0IHtTdHlsZVBhcnNlcn0gZnJvbSAnLi4vc3R5bGVfcGFyc2VyJztcbmltcG9ydCB7UG9seWdvbnN9IGZyb20gJy4uL3BvbHlnb25zL3BvbHlnb25zJztcblxuZXhwb3J0IGxldCBSYXN0ZXJTdHlsZSA9IE9iamVjdC5jcmVhdGUoUG9seWdvbnMpO1xuXG5PYmplY3QuYXNzaWduKFJhc3RlclN0eWxlLCB7XG4gICAgbmFtZTogJ3Jhc3RlcicsXG4gICAgc3VwZXI6IFBvbHlnb25zLFxuICAgIGJ1aWx0X2luOiB0cnVlLFxuICAgIHNlbGVjdGlvbjogZmFsc2UsIC8vIG5vIGZlYXR1cmUgc2VsZWN0aW9uIGJ5IGRlZmF1bHRcblxuICAgIGluaXQoKSB7XG4gICAgICAgIC8vIFJlcXVpcmVkIGZvciByYXN0ZXIgdGlsZXNcbiAgICAgICAgdGhpcy5yYXN0ZXIgPSB0aGlzLnJhc3RlciB8fCAnY29sb3InO1xuXG4gICAgICAgIHRoaXMuc3VwZXIuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG5cbiAgICBfcHJlcHJvY2VzcyAoZHJhdykge1xuICAgICAgICAvLyBSYXN0ZXIgdGlsZXMgZGVmYXVsdCB0byB3aGl0ZSB2ZXJ0ZXggY29sb3IsIGFzIHRoaXMgY29sb3Igd2lsbCB0aW50IHRoZSB1bmRlcmx5aW5nIHRleHR1cmVcbiAgICAgICAgZHJhdy5jb2xvciA9IGRyYXcuY29sb3IgfHwgU3R5bGVQYXJzZXIuZGVmYXVsdHMuY29sb3I7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cGVyLl9wcmVwcm9jZXNzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG59KTtcbiIsImltcG9ydCB7U3R5bGVzfSBmcm9tICcuL3N0eWxlX21hbmFnZXInO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tICcuLi91dGlscy9tZXJnZSc7XG5pbXBvcnQge21hdGNofSBmcm9tICdtYXRjaC1mZWF0dXJlJztcbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG5leHBvcnQgY29uc3Qgd2hpdGVMaXN0ID0gWydmaWx0ZXInLCAnZHJhdycsICd2aXNpYmxlJywgJ2RhdGEnXTtcblxuZXhwb3J0IGxldCBydWxlQ2FjaGUgPSB7fTtcblxuZnVuY3Rpb24gY2FjaGVLZXkgKHJ1bGVzKSB7XG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdmFyIGsgPSBydWxlc1swXTtcbiAgICAgICAgZm9yICh2YXIgaT0xOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGsgKz0gJy8nICsgcnVsZXNbaV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaztcbiAgICB9XG4gICAgcmV0dXJuIHJ1bGVzWzBdO1xufVxuXG4vLyBNZXJnZSBtYXRjaGluZyBsYXllciBydWxlIHRyZWVzIGludG8gYSBmaW5hbCBkcmF3IGdyb3VwXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VUcmVlcyhtYXRjaGluZ1RyZWVzLCBncm91cCkge1xuICAgIGxldCBkcmF3cywgdHJlZURlcHRoID0gMDtcblxuICAgIGxldCBkcmF3ID0ge1xuICAgICAgICB2aXNpYmxlOiB0cnVlIC8vIHZpc2libGUgYnkgZGVmYXVsdFxuICAgIH07XG5cbiAgICAvLyBGaW5kIGRlZXBlc3QgdHJlZVxuICAgIGZvciAobGV0IHQ9MDsgdCA8IG1hdGNoaW5nVHJlZXMubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgaWYgKG1hdGNoaW5nVHJlZXNbdF0ubGVuZ3RoID4gdHJlZURlcHRoKSB7XG4gICAgICAgICAgICB0cmVlRGVwdGggPSBtYXRjaGluZ1RyZWVzW3RdLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vIHJ1bGVzIHRvIHBhcnNlXG4gICAgaWYgKHRyZWVEZXB0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBJdGVyYXRlIHRyZWVzIGluIHBhcmFsbGVsXG4gICAgZm9yIChsZXQgeD0wOyB4IDwgdHJlZURlcHRoOyB4KyspIHtcbiAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHJlcXVlc3RlZCBkcmF3IGdyb3VwLCBmb3IgZWFjaCB0cmVlLCBhdCB0aGlzIGRlcHRoXG4gICAgICAgIGRyYXdzID0gbWF0Y2hpbmdUcmVlcy5tYXAodHJlZSA9PiB0cmVlW3hdICYmIHRyZWVbeF1bZ3JvdXBdKTtcbiAgICAgICAgaWYgKGRyYXdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3J0IGJ5IGxheWVyIG5hbWUgYmVmb3JlIG1lcmdpbmcsIHNvIHJ1bGVzIGFyZSBhcHBsaWVkIGRldGVybWluaXN0aWNhbGx5XG4gICAgICAgIC8vIHdoZW4gbXVsdGlwbGUgcnVsZXMgbW9kaWZ5IHRoZSBzYW1lIHByb3BlcnRpZXNcbiAgICAgICAgZHJhd3Muc29ydCgoYSwgYikgPT4gKGEgJiYgYS5sYXllcl9uYW1lKSA+IChiICYmIGIubGF5ZXJfbmFtZSkgPyAxIDogLTEpO1xuXG4gICAgICAgIC8vIE1lcmdlIGRyYXcgb2JqZWN0c1xuICAgICAgICBtZXJnZU9iamVjdHMoZHJhdywgLi4uZHJhd3MpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBsYXllciBuYW1lcywgdGhleSB3ZXJlIG9ubHkgdXNlZCB0cmFuc2llbnRseSB0byBzb3J0IGFuZCBjYWxjdWxhdGUgZmluYWwgbGF5ZXJcbiAgICAgICAgLy8gKGZpbmFsIG1lcmdlZCBuYW1lcyB3aWxsIG5vdCBiZSBhY2N1cmF0ZSBzaW5jZSBvbmx5IG9uZSB0cmVlIGNhbiB3aW4pXG4gICAgICAgIGRlbGV0ZSBkcmF3LmxheWVyX25hbWU7XG4gICAgfVxuXG4gICAgLy8gU2hvcnQtY2lyY3VpdCBpZiBub3QgdmlzaWJsZVxuICAgIGlmIChkcmF3LnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBkcmF3O1xufVxuXG5cbmNsYXNzIFJ1bGUge1xuXG4gICAgY29uc3RydWN0b3Ioe25hbWUsIHBhcmVudCwgZHJhdywgdmlzaWJsZSwgZmlsdGVyfSkge1xuICAgICAgICB0aGlzLmlkID0gUnVsZS5pZCsrO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5mdWxsX25hbWUgPSB0aGlzLnBhcmVudCA/ICh0aGlzLnBhcmVudC5mdWxsX25hbWUgKyAnOicgKyB0aGlzLm5hbWUpIDogdGhpcy5uYW1lO1xuICAgICAgICB0aGlzLmRyYXcgPSBkcmF3O1xuICAgICAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gdmlzaWJsZSA6ICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC52aXNpYmxlKTtcblxuICAgICAgICAvLyBEZW5vcm1hbGl6ZSBsYXllciBuYW1lIHRvIGRyYXcgZ3JvdXBzXG4gICAgICAgIGlmICh0aGlzLmRyYXcpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGdyb3VwIGluIHRoaXMuZHJhdykge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd1tncm91cF0gPSB0aGlzLmRyYXdbZ3JvdXBdIHx8IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd1tncm91cF0ubGF5ZXJfbmFtZSA9IHRoaXMuZnVsbF9uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZEZpbHRlcigpO1xuICAgICAgICB0aGlzLmJ1aWxkRHJhdygpO1xuICAgIH1cblxuICAgIGJ1aWxkRHJhdygpIHtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVkRHJhdyA9IGNhbGN1bGF0ZURyYXcodGhpcyk7XG4gICAgfVxuXG4gICAgYnVpbGRGaWx0ZXIoKSB7XG4gICAgICAgIGxldCB0eXBlID0gdHlwZW9mIHRoaXMuZmlsdGVyO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXIgIT0gbnVsbCAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBJbnZhbGlkIGZpbHRlclxuICAgICAgICAgICAgbGV0IG1zZyA9IGBGaWx0ZXIgZm9yIGxheWVyICR7dGhpcy5mdWxsX25hbWV9IGlzIGludmFsaWQsIGZpbHRlciB2YWx1ZSBtdXN0IGJlIGFuIG9iamVjdCBvciBmdW5jdGlvbiwgYDtcbiAgICAgICAgICAgIG1zZyArPSBgYnV0IHdhcyBzZXQgdG8gXFxgZmlsdGVyOiAke3RoaXMuZmlsdGVyfVxcYCBpbnN0ZWFkYDtcbiAgICAgICAgICAgIGxvZy53YXJuKG1zZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5idWlsZFpvb21zKCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyICYmIG1hdGNoKHRoaXMuZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgICAgICAvLyBJbnZhbGlkIGZpbHRlclxuICAgICAgICAgICAgbGV0IG1zZyA9IGBGaWx0ZXIgZm9yIGxheWVyICR7dGhpcy5mdWxsX25hbWV9IGlzIGludmFsaWQsIFxcYGZpbHRlcjogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcil9XFxgIGA7XG4gICAgICAgICAgICBtc2cgKz0gYGZhaWxlZCB3aXRoIGVycm9yICR7ZS5tZXNzYWdlfSwgJHtlLnN0YWNrfWA7XG4gICAgICAgICAgICBsb2cud2Fybihtc2cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gWm9vbXMgb2Z0ZW4gY3VsbCBsYXJnZSBzd2F0aHMgb2YgdGhlIGxheWVyIHJ1bGUgdHJlZSwgc28gdGhleSBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGFyZSBjaGVja2VkIGZpcnN0XG4gICAgYnVpbGRab29tcygpIHtcbiAgICAgICAgbGV0IHpvb20gPSB0aGlzLmZpbHRlciAmJiB0aGlzLmZpbHRlci4kem9vbTtcbiAgICAgICAgbGV0IHp0eXBlID0gdHlwZW9mIHpvb207XG4gICAgICAgIGlmICh6b29tICE9IG51bGwgJiYgenR5cGUgIT09ICdmdW5jdGlvbicpIHsgLy8gZG9uJ3QgYWNjZWxlcmF0ZSBmdW5jdGlvbi1iYXNlZCBmaWx0ZXJzXG4gICAgICAgICAgICB0aGlzLnpvb21zID0ge307XG5cbiAgICAgICAgICAgIGlmICh6dHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvb21zW3pvb21dID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoem9vbSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB6PTA7IHogPCB6b29tLmxlbmd0aDsgeisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9vbXNbem9vbVt6XV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHp0eXBlID09PSAnb2JqZWN0JyAmJiAoem9vbS5taW4gIT0gbnVsbCB8fCB6b29tLm1heCAhPSBudWxsKSkge1xuICAgICAgICAgICAgICAgIGxldCB6bWluID0gem9vbS5taW4gfHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgem1heCA9IHpvb20ubWF4IHx8IDI1OyAvLyBUT0RPOiByZXBsYWNlIGNvbnN0YW50IGZvciBtYXggcG9zc2libGUgem9vbVxuICAgICAgICAgICAgICAgIGZvciAobGV0IHo9em1pbjsgeiA8IHptYXg7IHorKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvb21zW3pdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlci4kem9vbTsgLy8gZG9uJ3QgcHJvY2VzcyB6b29tIHRocm91Z2ggdXN1YWwgZ2VuZXJpYyBmaWx0ZXIgbG9naWNcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGRyYXc6IHRoaXMuZHJhd1xuICAgICAgICB9O1xuICAgIH1cblxufVxuXG5SdWxlLmlkID0gMDtcblxuXG5leHBvcnQgY2xhc3MgUnVsZUxlYWYgZXh0ZW5kcyBSdWxlIHtcbiAgICBjb25zdHJ1Y3Rvcih7bmFtZSwgcGFyZW50LCBkcmF3LCB2aXNpYmxlLCBmaWx0ZXJ9KSB7XG4gICAgICAgIHN1cGVyKHtuYW1lLCBwYXJlbnQsIGRyYXcsIHZpc2libGUsIGZpbHRlcn0pO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgUnVsZVRyZWUgZXh0ZW5kcyBSdWxlIHtcbiAgICBjb25zdHJ1Y3Rvcih7bmFtZSwgcGFyZW50LCBkcmF3LCB2aXNpYmxlLCBydWxlcywgZmlsdGVyfSkge1xuICAgICAgICBzdXBlcih7bmFtZSwgcGFyZW50LCBkcmF3LCB2aXNpYmxlLCBmaWx0ZXJ9KTtcbiAgICAgICAgdGhpcy5ydWxlcyA9IHJ1bGVzIHx8IFtdO1xuICAgIH1cblxuICAgIGFkZFJ1bGUocnVsZSkge1xuICAgICAgICB0aGlzLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgfVxuXG4gICAgYnVpbGREcmF3R3JvdXBzKGNvbnRleHQpIHtcbiAgICAgICAgbGV0IHJ1bGVzID0gW10sIHJ1bGVfaWRzID0gW107XG4gICAgICAgIC8vVE9ETywgc2hvdWxkIHRoaXMgZnVuY3Rpb24gdGFrZSBhIFJ1bGVUcmVlXG4gICAgICAgIG1hdGNoRmVhdHVyZShjb250ZXh0LCBbdGhpc10sIHJ1bGVzLCBydWxlX2lkcyk7XG5cbiAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBjYWNoZV9rZXkgPSBjYWNoZUtleShydWxlX2lkcyk7XG5cbiAgICAgICAgICAgIC8vIE9ubHkgZXZhbHVhdGUgZWFjaCBydWxlIGNvbWJpbmF0aW9uIG9uY2UgKHVuZGVmaW5lZCBtZWFucyBub3QgeWV0IGV2YWx1YXRlZCxcbiAgICAgICAgICAgIC8vIG51bGwgbWVhbnMgZXZhbHVhdGVkIHdpdGggbm8gZHJhdyBvYmplY3QpXG4gICAgICAgICAgICBpZiAocnVsZUNhY2hlW2NhY2hlX2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIEZpbmQgYWxsIHRoZSB1bmlxdWUgdmlzaWJsZSBkcmF3IGJsb2NrcyBmb3IgdGhpcyBydWxlIHRyZWVcbiAgICAgICAgICAgICAgICBsZXQgZHJhd19ydWxlcyA9IHJ1bGVzLm1hcCh4ID0+IHggJiYgeC52aXNpYmxlICE9PSBmYWxzZSAmJiB4LmNhbGN1bGF0ZWREcmF3KTtcbiAgICAgICAgICAgICAgICBsZXQgZHJhd19rZXlzID0ge307XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCByPTA7IHIgPCBkcmF3X3J1bGVzLmxlbmd0aDsgcisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlID0gZHJhd19ydWxlc1tyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBnPTA7IGcgPCBydWxlLmxlbmd0aDsgZysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXAgPSBydWxlW2ddO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd19rZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGVhY2ggZHJhdyBncm91cFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGRyYXdfa2V5IGluIGRyYXdfa2V5cykge1xuICAgICAgICAgICAgICAgICAgICBydWxlQ2FjaGVbY2FjaGVfa2V5XSA9IHJ1bGVDYWNoZVtjYWNoZV9rZXldIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBydWxlQ2FjaGVbY2FjaGVfa2V5XVtkcmF3X2tleV0gPSBtZXJnZVRyZWVzKGRyYXdfcnVsZXMsIGRyYXdfa2V5KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHNhdmUgdGhlIG9uZXMgdGhhdCB3ZXJlbid0IG51bGxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlQ2FjaGVbY2FjaGVfa2V5XVtkcmF3X2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBydWxlQ2FjaGVbY2FjaGVfa2V5XVtkcmF3X2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlQ2FjaGVbY2FjaGVfa2V5XVtkcmF3X2tleV0ua2V5ID0gY2FjaGVfa2V5ICsgJy8nICsgZHJhd19rZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlQ2FjaGVbY2FjaGVfa2V5XVtkcmF3X2tleV0ubGF5ZXJzID0gcnVsZXMubWFwKHggPT4geCAmJiB4LmZ1bGxfbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBObyBydWxlcyBldmFsdWF0ZWRcbiAgICAgICAgICAgICAgICBpZiAocnVsZUNhY2hlW2NhY2hlX2tleV0gJiYgT2JqZWN0LmtleXMocnVsZUNhY2hlW2NhY2hlX2tleV0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlQ2FjaGVbY2FjaGVfa2V5XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVDYWNoZVtjYWNoZV9rZXldO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmZ1bmN0aW9uIGlzV2hpdGVMaXN0ZWQoa2V5KSB7XG4gICAgcmV0dXJuIHdoaXRlTGlzdC5pbmRleE9mKGtleSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3YWxrVXAocnVsZSwgY2IpIHtcblxuICAgIGlmIChydWxlLnBhcmVudCkge1xuICAgICAgICB3YWxrVXAocnVsZS5wYXJlbnQsIGNiKTtcbiAgICB9XG5cbiAgICBjYihydWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhbGtEb3duKHJ1bGUsIGNiKSB7XG5cbiAgICBpZiAocnVsZS5ydWxlcykge1xuICAgICAgICBydWxlLnJ1bGVzLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgIHdhbGtEb3duKHIsIGNiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2IocnVsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cFByb3BzKG9iaikge1xuICAgIGxldCB3aGl0ZUxpc3RlZCA9IHt9LCBub25XaGl0ZUxpc3RlZCA9IHt9O1xuXG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoaXNXaGl0ZUxpc3RlZChrZXkpKSB7XG4gICAgICAgICAgICB3aGl0ZUxpc3RlZFtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub25XaGl0ZUxpc3RlZFtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFt3aGl0ZUxpc3RlZCwgbm9uV2hpdGVMaXN0ZWRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRHJhdyhydWxlKSB7XG5cbiAgICBsZXQgZHJhdyAgPSBbXTtcblxuICAgIGlmIChydWxlLnBhcmVudCkge1xuICAgICAgICBsZXQgY3MgPSBydWxlLnBhcmVudC5jYWxjdWxhdGVkRHJhdyB8fCBbXTtcbiAgICAgICAgZHJhdy5wdXNoKC4uLmNzKTtcbiAgICB9XG5cbiAgICBkcmF3LnB1c2gocnVsZS5kcmF3KTtcbiAgICByZXR1cm4gZHJhdztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUnVsZVRyZWUobmFtZSwgcnVsZSwgcGFyZW50KSB7XG5cbiAgICBsZXQgcHJvcGVydGllcyA9IHtuYW1lLCBwYXJlbnR9O1xuICAgIGxldCBbd2hpdGVMaXN0ZWQsIG5vbldoaXRlTGlzdGVkXSA9IGdyb3VwUHJvcHMocnVsZSk7XG4gICAgbGV0IGVtcHR5ID0gaXNFbXB0eShub25XaGl0ZUxpc3RlZCk7XG4gICAgbGV0IENyZWF0ZTtcblxuICAgIGlmIChlbXB0eSAmJiBwYXJlbnQgIT0gbnVsbCkge1xuICAgICAgICBDcmVhdGUgPSBSdWxlTGVhZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBDcmVhdGUgPSBSdWxlVHJlZTtcbiAgICB9XG5cbiAgICBsZXQgciA9IG5ldyBDcmVhdGUoT2JqZWN0LmFzc2lnbihwcm9wZXJ0aWVzLCB3aGl0ZUxpc3RlZCkpO1xuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICBwYXJlbnQuYWRkUnVsZShyKTtcbiAgICB9XG5cbiAgICBpZiAoIWVtcHR5KSB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBub25XaGl0ZUxpc3RlZCkge1xuICAgICAgICAgICAgbGV0IHByb3BlcnR5ID0gbm9uV2hpdGVMaXN0ZWRba2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIHBhcnNlUnVsZVRyZWUoa2V5LCBwcm9wZXJ0eSwgcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEludmFsaWQgbGF5ZXJcbiAgICAgICAgICAgICAgICBsZXQgbXNnID0gYExheWVyIHZhbHVlIG11c3QgYmUgYW4gb2JqZWN0OiBjYW4ndCBjcmVhdGUgbGF5ZXIgJyR7a2V5fTogJHtKU09OLnN0cmluZ2lmeShwcm9wZXJ0eSl9J2A7XG4gICAgICAgICAgICAgICAgbXNnICs9IGAsIHVuZGVyIHBhcmVudCBsYXllciAnJHtyLmZ1bGxfbmFtZX0nLmA7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIGEgc3R5bGUgbmFtZSwgdGhpcyBtYXkgYmUgYW4gaW5jb3JyZWN0bHkgbmVzdGVkIGxheWVyXG4gICAgICAgICAgICAgICAgaWYgKFN0eWxlc1tyLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZyArPSBgIFRoZSBwYXJlbnQgJyR7ci5uYW1lfScgaXMgYWxzbyB0aGUgbmFtZSBvZiBhIHN0eWxlLCBkaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgJ2RyYXcnIGdyb3VwYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9IGAgdW5kZXIgJyR7cGFyZW50Lm5hbWV9J2A7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbXNnICs9IGAgaW5zdGVhZD9gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2cud2Fybihtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSdWxlcyhydWxlcykge1xuICAgIGxldCBydWxlVHJlZXMgPSB7fTtcblxuICAgIGZvciAobGV0IGtleSBpbiBydWxlcykge1xuICAgICAgICBsZXQgcnVsZSA9IHJ1bGVzW2tleV07XG4gICAgICAgIGlmIChydWxlKSB7XG4gICAgICAgICAgICBydWxlVHJlZXNba2V5XSA9IHBhcnNlUnVsZVRyZWUoa2V5LCBydWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBydWxlVHJlZXM7XG59XG5cblxuZnVuY3Rpb24gZG9lc01hdGNoKHJ1bGUsIGNvbnRleHQpIHtcbiAgICAvLyB6b29tIHByZS1maWx0ZXI6IHNraXAgcmVzdCBvZiBmaWx0ZXIgaWYgb3V0IG9mIHJ1bGUgem9vbSByYW5nZVxuICAgIGlmIChydWxlLnpvb21zICE9IG51bGwgJiYgIXJ1bGUuem9vbXNbY29udGV4dC56b29tXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICgodHlwZW9mIHJ1bGUuZmlsdGVyID09PSAnZnVuY3Rpb24nICYmIHJ1bGUuZmlsdGVyKGNvbnRleHQpKSB8fCAocnVsZS5maWx0ZXIgPT0gbnVsbCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hGZWF0dXJlKGNvbnRleHQsIHJ1bGVzLCBjb2xsZWN0ZWRSdWxlcywgY29sbGVjdGVkUnVsZXNJZHMpIHtcbiAgICBsZXQgbWF0Y2hlZCA9IGZhbHNlO1xuICAgIGxldCBjaGlsZE1hdGNoZWQgPSBmYWxzZTtcblxuICAgIGlmIChydWxlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICBmb3IgKGxldCByPTA7IHIgPCBydWxlcy5sZW5ndGg7IHIrKykge1xuICAgICAgICBsZXQgY3VycmVudCA9IHJ1bGVzW3JdO1xuXG4gICAgICAgIGlmIChjdXJyZW50IGluc3RhbmNlb2YgUnVsZUxlYWYpIHtcblxuICAgICAgICAgICAgaWYgKGRvZXNNYXRjaChjdXJyZW50LCBjb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbGxlY3RlZFJ1bGVzLnB1c2goY3VycmVudCk7XG4gICAgICAgICAgICAgICAgY29sbGVjdGVkUnVsZXNJZHMucHVzaChjdXJyZW50LmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgaW5zdGFuY2VvZiBSdWxlVHJlZSkge1xuICAgICAgICAgICAgaWYgKGRvZXNNYXRjaChjdXJyZW50LCBjb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY2hpbGRNYXRjaGVkID0gbWF0Y2hGZWF0dXJlKFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnJ1bGVzLFxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0ZWRSdWxlcyxcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkUnVsZXNJZHNcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZE1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkUnVsZXMucHVzaChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkUnVsZXNJZHMucHVzaChjdXJyZW50LmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlZDtcbn1cbiIsIi8vIFJlbmRlcmluZyBzdHlsZXNcblxuaW1wb3J0IHtTdHlsZVBhcnNlcn0gZnJvbSAnLi9zdHlsZV9wYXJzZXInO1xuaW1wb3J0IEZlYXR1cmVTZWxlY3Rpb24gZnJvbSAnLi4vc2VsZWN0aW9uJztcbmltcG9ydCBTaGFkZXJQcm9ncmFtIGZyb20gJy4uL2dsL3NoYWRlcl9wcm9ncmFtJztcbmltcG9ydCBWQk9NZXNoIGZyb20gJy4uL2dsL3Zib19tZXNoJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL2dsL3RleHR1cmUnO1xuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL21hdGVyaWFsJztcbmltcG9ydCBMaWdodCBmcm9tICcuLi9saWdodCc7XG5pbXBvcnQge1Jhc3RlclRpbGVTb3VyY2V9IGZyb20gJy4uL3NvdXJjZXMvcmFzdGVyJztcbmltcG9ydCBzaGFkZXJTb3VyY2VzIGZyb20gJy4uL2dsL3NoYWRlcl9zb3VyY2VzJzsgLy8gYnVpbHQtaW4gc2hhZGVyc1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCBXb3JrZXJCcm9rZXIgZnJvbSAnLi4vdXRpbHMvd29ya2VyX2Jyb2tlcic7XG5cbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG4vLyBCYXNlIGNsYXNzXG5cbmV4cG9ydCB2YXIgU3R5bGUgPSB7XG4gICAgaW5pdCAoeyBnZW5lcmF0aW9uLCBzb3VyY2VzID0ge30gfSA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0J1aWx0SW4oKSkge1xuICAgICAgICAgICAgdGhpcy5idWlsdF9pbiA9IGZhbHNlOyAvLyBleHBsaWNpdGx5IHNldCB0byBmYWxzZSB0byBhdm9pZCBhbnkgY29uZnVzaW9uXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOyAgICAgICAgICAgICAgIC8vIHNjZW5lIGdlbmVyYXRpb24gaWQgdGhpcyBzdHlsZSB3YXMgY3JlYXRlZCBmb3JcbiAgICAgICAgdGhpcy5zb3VyY2VzID0gc291cmNlczsgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIHNvdXJjZXMgZm9yIHNjZW5lXG4gICAgICAgIHRoaXMuZGVmaW5lcyA9ICh0aGlzLmhhc093blByb3BlcnR5KCdkZWZpbmVzJykgJiYgdGhpcy5kZWZpbmVzKSB8fCB7fTsgLy8gI2RlZmluZXMgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgc2hhZGVyc1xuICAgICAgICB0aGlzLnNoYWRlcnMgPSAodGhpcy5oYXNPd25Qcm9wZXJ0eSgnc2hhZGVycycpICYmIHRoaXMuc2hhZGVycykgfHwge307IC8vIHNoYWRlciBjdXN0b21pemF0aW9uICh1bmlmb3JtcywgZGVmaW5lcywgYmxvY2tzLCBldGMuKVxuICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uIHx8IGZhbHNlOyAgIC8vIGZsYWcgaW5kaWNhdGluZyBpZiB0aGlzIHN0eWxlIHN1cHBvcnRzIGZlYXR1cmUgc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuY29tcGlsaW5nID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgLy8gcHJvZ3JhbXMgYXJlIGN1cnJlbnRseSBjb21waWxpbmdcbiAgICAgICAgdGhpcy5jb21waWxlZCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9ncmFtcyBhcmUgZmluaXNoZWQgY29tcGlsaW5nXG4gICAgICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gR0wgcHJvZ3JhbSByZWZlcmVuY2UgKGZvciBtYWluIHJlbmRlciBwYXNzKVxuICAgICAgICB0aGlzLnNlbGVjdGlvbl9wcm9ncmFtID0gbnVsbDsgICAgICAgICAgICAgIC8vIEdMIHByb2dyYW0gcmVmZXJlbmNlIGZvciBmZWF0dXJlIHNlbGVjdGlvbiByZW5kZXIgcGFzc1xuICAgICAgICB0aGlzLmZlYXR1cmVfc3R5bGUgPSB7fTsgICAgICAgICAgICAgICAgICAgIC8vIHN0eWxlIGZvciBmZWF0dXJlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQsIHNoYXJlZCB0byBsZXNzZW4gR0MvbWVtb3J5IHRocmFzaFxuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZSA9IFtdOyAgICAgICAgICAgICAgICAgIC8vIHNoYXJlZCBzaW5nbGUtdmVydGV4IHRlbXBsYXRlLCBmaWxsZWQgb3V0IGJ5IGVhY2ggc3R5bGVcbiAgICAgICAgdGhpcy50aWxlX2RhdGEgPSB7fTtcblxuICAgICAgICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdGhpcyBvYmplY3QgdG8gYmUgY2FsbGVkIGZyb20gd29ya2VyIHRocmVhZHNcbiAgICAgICAgdGhpcy5tYWluX3RocmVhZF90YXJnZXQgPSAnU3R5bGUtJyArIHRoaXMubmFtZTtcbiAgICAgICAgaWYgKFV0aWxzLmlzTWFpblRocmVhZCkge1xuICAgICAgICAgICAgV29ya2VyQnJva2VyLmFkZFRhcmdldCh0aGlzLm1haW5fdGhyZWFkX3RhcmdldCwgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHdvcmxkIGNvb3JkcyB0byB3cmFwIGV2ZXJ5IDEwMCwwMDAgbWV0ZXJzLCBjYW4gdHVybiBvZmYgYnkgc2V0dGluZyB0aGlzIHRvICdmYWxzZSdcbiAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fV09STERfUE9TSVRJT05fV1JBUCA9IDEwMDAwMDtcblxuICAgICAgICAvLyBCbGVuZGluZ1xuICAgICAgICB0aGlzLmJsZW5kID0gdGhpcy5ibGVuZCB8fCAnb3BhcXVlJzsgICAgICAgIC8vIGRlZmF1bHQ6IG9wYXF1ZSBzdHlsZXMgYXJlIGRyYXduIGZpcnN0LCB3aXRob3V0IGJsZW5kaW5nXG4gICAgICAgIHRoaXMuZGVmaW5lc1tgVEFOR1JBTV9CTEVORF8ke3RoaXMuYmxlbmQudG9VcHBlckNhc2UoKX1gXSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmJsZW5kX29yZGVyID09IG51bGwpIHsgLy8gY29udHJvbHMgb3JkZXIgb2YgcmVuZGVyaW5nIGZvciBzdHlsZXMgdy9ub24tb3BhcXVlIGJsZW5kaW5nXG4gICAgICAgICAgICB0aGlzLmJsZW5kX29yZGVyID0gLTE7IC8vIGRlZmF1bHRzIHRvIGZpcnN0XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgc3R5bGUgZGVmaW5lcyBpdHMgb3duIG1hdGVyaWFsLCByZXBsYWNlIHRoZSBpbmhlcml0ZWQgbWF0ZXJpYWwgaW5zdGFuY2VcbiAgICAgICAgaWYgKCEodGhpcy5tYXRlcmlhbCBpbnN0YW5jZW9mIE1hdGVyaWFsKSkge1xuICAgICAgICAgICAgaWYgKCFNYXRlcmlhbC5pc1ZhbGlkKHRoaXMubWF0ZXJpYWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbCA9IFN0eWxlUGFyc2VyLmRlZmF1bHRzLm1hdGVyaWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh0aGlzLm1hdGVyaWFsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hdGVyaWFsLmluamVjdCh0aGlzKTtcblxuICAgICAgICAvLyBTZXQgbGlnaHRpbmcgbW9kZTogZnJhZ21lbnQsIHZlcnRleCwgb3Igbm9uZSAoc3BlY2lmaWVkIGFzICdmYWxzZScpXG4gICAgICAgIExpZ2h0LnNldE1vZGUodGhpcy5saWdodGluZywgdGhpcyk7XG5cbiAgICAgICAgLy8gU2V0dXAgcmFzdGVyIHNhbXBsZXJzIGlmIG5lZWRlZFxuICAgICAgICB0aGlzLnNldHVwUmFzdGVycygpO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH0sXG5cbiAgICBkZXN0cm95ICgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvZ3JhbSkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25fcHJvZ3JhbSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fcHJvZ3JhbS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9wcm9ncmFtID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgfSxcblxuICAgIHJlc2V0ICgpIHtcbiAgICB9LFxuXG4gICAgaXNCdWlsdEluICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoJ2J1aWx0X2luJykgJiYgdGhpcy5idWlsdF9pbjtcbiAgICB9LFxuXG4gICAgZmlsbFZlcnRleFRlbXBsYXRlKGF0dHJpYnV0ZSwgdmFsdWUsIHsgc2l6ZSwgb2Zmc2V0IH0pIHtcbiAgICAgICAgb2Zmc2V0ID0gKG9mZnNldCA9PT0gdW5kZWZpbmVkKSA/IDAgOiBvZmZzZXQ7XG5cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy52ZXJ0ZXhfbGF5b3V0LmluZGV4W2F0dHJpYnV0ZV07XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2cud2FybihgU3R5bGU6IGluIHN0eWxlICcke3RoaXMubmFtZX0nLCBubyBpbmRleCBmb3VuZCBpbiB2ZXJ0ZXggbGF5b3V0IGZvciBhdHRyaWJ1dGUgJyR7YXR0cmlidXRlfSdgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICAgICAgICBsZXQgdiA9IHZhbHVlLmxlbmd0aCA+IGkgPyB2YWx1ZVtpXSA6IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaW5kZXggKyBpICsgb2Zmc2V0XSA9IHY7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqKiBTdHlsZSBwYXJzaW5nIGFuZCBnZW9tZXRyeSBjb25zdHJ1Y3Rpb24gKioqL1xuXG4gICAgLy8gUmV0dXJucyBhbiBvYmplY3QgdG8gaG9sZCBmZWF0dXJlIGRhdGEgKGZvciBhIHRpbGUgb3Igb3RoZXIgb2JqZWN0KVxuICAgIHN0YXJ0RGF0YSAodGlsZSkge1xuICAgICAgICB0aGlzLnRpbGVfZGF0YVt0aWxlLmtleV0gPSB7XG4gICAgICAgICAgICB2ZXJ0ZXhfZGF0YTogbnVsbCxcbiAgICAgICAgICAgIHVuaWZvcm1zOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmVzOiBbXVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy50aWxlX2RhdGFbdGlsZS5rZXldO1xuICAgIH0sXG5cbiAgICAvLyBGaW5hbGl6ZXMgYW4gb2JqZWN0IGhvbGRpbmcgZmVhdHVyZSBkYXRhIChmb3IgYSB0aWxlIG9yIG90aGVyIG9iamVjdClcbiAgICBlbmREYXRhICh0aWxlKSB7XG4gICAgICAgIHZhciB0aWxlX2RhdGEgPSB0aGlzLnRpbGVfZGF0YVt0aWxlLmtleV07XG4gICAgICAgIHRoaXMudGlsZV9kYXRhW3RpbGUua2V5XSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRpbGVfZGF0YSAmJiB0aWxlX2RhdGEudmVydGV4X2RhdGEgJiYgdGlsZV9kYXRhLnZlcnRleF9kYXRhLnZlcnRleF9jb3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIE9ubHkga2VlcCBmaW5hbCBieXRlIGJ1ZmZlclxuICAgICAgICAgICAgdGlsZV9kYXRhLnZlcnRleF9kYXRhLmVuZCgpO1xuICAgICAgICAgICAgdGlsZV9kYXRhLnZlcnRleF9kYXRhID0gdGlsZV9kYXRhLnZlcnRleF9kYXRhLmJ1ZmZlcjtcblxuICAgICAgICAgICAgLy8gTG9hZCByYXN0ZXIgdGlsZXMgcGFzc2VkIGZyb20gZGF0YSBzb3VyY2VcbiAgICAgICAgICAgIC8vIEJsb2NrcyBtZXNoIGNvbXBsZXRpb24gdG8gYXZvaWQgZmxpY2tlcmluZ1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRSYXN0ZXJUZXh0dXJlcyh0aWxlLCB0aWxlX2RhdGEpLnRoZW4oKCkgPT4gdGlsZV9kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7IC8vIGRvbid0IHNlbmQgdGlsZSBkYXRhIGJhY2sgaWYgZG9lc24ndCBoYXZlIGdlb21ldHJ5XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gSGFzIG1lc2ggZGF0YSBmb3IgYSBnaXZlbiB0aWxlP1xuICAgIGhhc0RhdGFGb3JUaWxlICh0aWxlX2tleSkge1xuICAgICAgICByZXR1cm4gdGhpcy50aWxlX2RhdGFbdGlsZV9rZXldICE9IG51bGw7XG4gICAgfSxcblxuICAgIGFkZEZlYXR1cmUgKGZlYXR1cmUsIHJ1bGUsIGNvbnRleHQpIHtcbiAgICAgICAgbGV0IHRpbGUgPSBjb250ZXh0LnRpbGU7XG4gICAgICAgIGlmICh0aWxlLmdlbmVyYXRpb24gIT09IHRoaXMuZ2VuZXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRpbGVfZGF0YVt0aWxlLmtleV0pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRhKHRpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0eWxlID0gdGhpcy5wYXJzZUZlYXR1cmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gYWxsb3cgc3ViY2xhc3NlcyB0byBwYXNzIGV4dHJhIGFyZ3NcblxuICAgICAgICAvLyBTa2lwIGZlYXR1cmU/XG4gICAgICAgIGlmICghc3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0IGZlYXR1cmUgaW4gdGhpcyByZW5kZXIgc3R5bGU/XG4gICAgICAgIGlmICghdGhpcy50aWxlX2RhdGFbdGlsZS5rZXldLnZlcnRleF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnRpbGVfZGF0YVt0aWxlLmtleV0udmVydGV4X2RhdGEgPSB0aGlzLnZlcnRleF9sYXlvdXQuY3JlYXRlVmVydGV4RGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZEdlb21ldHJ5KGZlYXR1cmUuZ2VvbWV0cnksIHN0eWxlLCB0aGlzLnRpbGVfZGF0YVt0aWxlLmtleV0udmVydGV4X2RhdGEsIGNvbnRleHQpO1xuICAgIH0sXG5cbiAgICBidWlsZEdlb21ldHJ5IChnZW9tZXRyeSwgc3R5bGUsIHZlcnRleF9kYXRhLCBjb250ZXh0KSB7XG4gICAgICAgIGlmIChnZW9tZXRyeS50eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRQb2x5Z29ucyhbZ2VvbWV0cnkuY29vcmRpbmF0ZXNdLCBzdHlsZSwgdmVydGV4X2RhdGEsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGdlb21ldHJ5LnR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkUG9seWdvbnMoZ2VvbWV0cnkuY29vcmRpbmF0ZXMsIHN0eWxlLCB2ZXJ0ZXhfZGF0YSwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkTGluZXMoW2dlb21ldHJ5LmNvb3JkaW5hdGVzXSwgc3R5bGUsIHZlcnRleF9kYXRhLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5idWlsZExpbmVzKGdlb21ldHJ5LmNvb3JkaW5hdGVzLCBzdHlsZSwgdmVydGV4X2RhdGEsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGdlb21ldHJ5LnR5cGUgPT09ICdQb2ludCcpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRQb2ludHMoW2dlb21ldHJ5LmNvb3JkaW5hdGVzXSwgc3R5bGUsIHZlcnRleF9kYXRhLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRQb2ludHMoZ2VvbWV0cnkuY29vcmRpbmF0ZXMsIHN0eWxlLCB2ZXJ0ZXhfZGF0YSwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyc2VGZWF0dXJlIChmZWF0dXJlLCBydWxlX3N0eWxlLCBjb250ZXh0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmZlYXR1cmVfc3R5bGU7XG5cbiAgICAgICAgICAgIHJ1bGVfc3R5bGUgPSB0aGlzLnByZXByb2Nlc3MocnVsZV9zdHlsZSk7XG4gICAgICAgICAgICBpZiAoIXJ1bGVfc3R5bGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBvcmRlciBpZiBpdCB3YXMgbm90IGNhY2hlZFxuICAgICAgICAgICAgc3R5bGUub3JkZXIgPSB0aGlzLnBhcnNlT3JkZXIocnVsZV9zdHlsZS5vcmRlciwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIC8vIEZlYXR1cmUgc2VsZWN0aW9uIChvbmx5IGlmIHN0eWxlIHN1cHBvcnRzIGl0KVxuICAgICAgICAgICAgdmFyIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmludGVyYWN0aXZlID0gcnVsZV9zdHlsZS5pbnRlcmFjdGl2ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSBTdHlsZVBhcnNlci5ldmFsUHJvcChzdHlsZS5pbnRlcmFjdGl2ZSwgY29udGV4dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIGZlYXR1cmUgaXMgbWFya2VkIGFzIHNlbGVjdGFibGVcbiAgICAgICAgICAgIGlmIChzZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc2VsZWN0aW9uX2NvbG9yID0gRmVhdHVyZVNlbGVjdGlvbi5tYWtlQ29sb3IoZmVhdHVyZSwgY29udGV4dC50aWxlLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0eWxlLnNlbGVjdGlvbl9jb2xvciA9IEZlYXR1cmVTZWxlY3Rpb24uZGVmYXVsdENvbG9yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTdWJjbGFzcyBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgc3R5bGUgPSB0aGlzLl9wYXJzZUZlYXR1cmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gYWxsb3cgc3ViY2xhc3NlcyB0byBwYXNzIGV4dHJhIGFyZ3NcblxuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1N0eWxlLnBhcnNlRmVhdHVyZTogc3R5bGUgcGFyc2luZyBlcnJvcicsIGZlYXR1cmUsIHN0eWxlLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3BhcnNlRmVhdHVyZSAoZmVhdHVyZSwgcnVsZV9zdHlsZSwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlX3N0eWxlO1xuICAgIH0sXG5cbiAgICBwcmVwcm9jZXNzIChydWxlX3N0eWxlKSB7XG4gICAgICAgIC8vIFByZXByb2Nlc3MgZmlyc3QgdGltZVxuICAgICAgICBpZiAoIXJ1bGVfc3R5bGUucHJlcHJvY2Vzc2VkKSB7XG4gICAgICAgICAgICBydWxlX3N0eWxlID0gdGhpcy5fcHJlcHJvY2VzcyhydWxlX3N0eWxlKTsgLy8gb3B0aW9uYWwgc3ViY2xhc3MgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgIGlmICghcnVsZV9zdHlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bGVfc3R5bGUucHJlcHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnVsZV9zdHlsZTtcbiAgICB9LFxuXG4gICAgLy8gb3B0aW9uYWxseSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc1xuICAgIF9wcmVwcm9jZXNzIChydWxlX3N0eWxlKSB7XG4gICAgICAgIHJldHVybiBydWxlX3N0eWxlO1xuICAgIH0sXG5cbiAgICAvLyBQYXJzZSBhbiBvcmRlciB2YWx1ZVxuICAgIHBhcnNlT3JkZXIgKG9yZGVyLCBjb250ZXh0KSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBvcmRlciBpZiBpdCB3YXMgbm90IGNhY2hlZFxuICAgICAgICBpZiAodHlwZW9mIG9yZGVyICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIFN0eWxlUGFyc2VyLmNhbGN1bGF0ZU9yZGVyKG9yZGVyLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3JkZXI7XG4gICAgfSxcblxuICAgIC8vIEV4cGFuZCBmaW5hbCBwcmVjaXNpb24gZm9yIGhhbGYtbGF5ZXJzIChmb3Igb3V0bGluZXMpXG4gICAgc2NhbGVPcmRlciAob3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIG9yZGVyICogMjtcbiAgICB9LFxuXG4gICAgLy8gUGFyc2UgYSBjb2xvciBvZiBjaG9vc2UgYSBkZWZhdWx0IGlmIGFjY2VwdGFibGUsIHJldHVybiB1bmRlZmluZWQgaWYgY29sb3IgbWlzc2luZ1xuICAgIHBhcnNlQ29sb3IoY29sb3IsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gTmVlZCBlaXRoZXIgYSBjb2xvciwgb3IgYSBzaGFkZXIgYmxvY2sgZm9yICdjb2xvcicgb3IgJ2ZpbHRlcidcbiAgICAgICAgaWYgKGNvbG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gU3R5bGVQYXJzZXIuY2FjaGVDb2xvcihjb2xvciwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5zaGFkZXJzLmJsb2Nrcy5jb2xvciB8fCB0aGlzLnNoYWRlcnMuYmxvY2tzLmZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIFN0eWxlUGFyc2VyLmRlZmF1bHRzLmNvbG9yO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIEJ1aWxkIGZ1bmN0aW9ucyBhcmUgbm8tb3BzIHVudGlsIG92ZXJyaWRlblxuICAgIGJ1aWxkUG9seWdvbnMgKCkge30sXG4gICAgYnVpbGRMaW5lcyAoKSB7fSxcbiAgICBidWlsZFBvaW50cyAoKSB7fSxcblxuXG4gICAgLyoqKiBHTCBzdGF0ZSBhbmQgcmVuZGVyaW5nICoqKi9cblxuICAgIHNldEdMIChnbCkge1xuICAgICAgICB0aGlzLmdsID0gZ2w7XG4gICAgICAgIHRoaXMubWF4X3RleHR1cmVfc2l6ZSA9IFRleHR1cmUuZ2V0TWF4VGV4dHVyZVNpemUodGhpcy5nbCk7XG4gICAgfSxcblxuICAgIG1ha2VNZXNoICh2ZXJ0ZXhfZGF0YSwgeyB1bmlmb3JtcyB9ID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWQk9NZXNoKHRoaXMuZ2wsIHZlcnRleF9kYXRhLCB0aGlzLnZlcnRleF9sYXlvdXQsIHsgdW5pZm9ybXMgfSk7XG4gICAgfSxcblxuICAgIGNvbXBpbGUgKCkge1xuICAgICAgICBpZiAoIXRoaXMuZ2wpIHtcbiAgICAgICAgICAgIHRocm93KG5ldyBFcnJvcihgc3R5bGUuY29tcGlsZSgpOiBza2lwcGluZyBmb3IgJHt0aGlzLm5hbWV9IGJlY2F1c2Ugbm8gR0wgY29udGV4dGApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbXBpbGluZykge1xuICAgICAgICAgICAgdGhyb3cobmV3IEVycm9yKGBzdHlsZS5jb21waWxlKCk6IHNraXBwaW5nIGZvciAke3RoaXMubmFtZX0gYmVjYXVzZSBzdHlsZSBpcyBhbHJlYWR5IGNvbXBpbGluZ2ApKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBpbGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuY29tcGlsZWQgPSBmYWxzZTtcblxuICAgICAgICAvLyBCdWlsZCBkZWZpbmVzICYgZm9yIHNlbGVjdGlvbiAobmVlZCB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHNpbmNlIHRoZSBmaXJzdCBpcyBzdG9yZWQgYXMgYSByZWZlcmVuY2UgYnkgdGhlIHByb2dyYW0pXG4gICAgICAgIHZhciBkZWZpbmVzID0gdGhpcy5idWlsZERlZmluZUxpc3QoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uX2RlZmluZXMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZpbmVzKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbl9kZWZpbmVzLlRBTkdSQU1fRkVBVFVSRV9TRUxFQ1RJT04gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGFueSBjdXN0b20gY29kZSBibG9ja3MsIHVuaWZvcm0gZGVwZW5kZW5jaWVzLCBldGMuXG4gICAgICAgIHZhciBibG9ja3MgPSAodGhpcy5zaGFkZXJzICYmIHRoaXMuc2hhZGVycy5ibG9ja3MpO1xuICAgICAgICB2YXIgYmxvY2tfc2NvcGVzID0gKHRoaXMuc2hhZGVycyAmJiB0aGlzLnNoYWRlcnMuYmxvY2tfc2NvcGVzKTtcbiAgICAgICAgdmFyIHVuaWZvcm1zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zaGFkZXJzICYmIHRoaXMuc2hhZGVycy51bmlmb3Jtcyk7XG5cbiAgICAgICAgLy8gQWNjZXB0IGEgc2luZ2xlIGV4dGVuc2lvbiwgb3IgYW4gYXJyYXkgb2YgZXh0ZW5zaW9uc1xuICAgICAgICB2YXIgZXh0ZW5zaW9ucyA9ICh0aGlzLnNoYWRlcnMgJiYgdGhpcy5zaGFkZXJzLmV4dGVuc2lvbnMpO1xuICAgICAgICBpZiAodHlwZW9mIGV4dGVuc2lvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBleHRlbnNpb25zID0gW2V4dGVuc2lvbnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHNoYWRlcnNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBTaGFkZXJQcm9ncmFtKFxuICAgICAgICAgICAgICAgIHRoaXMuZ2wsXG4gICAgICAgICAgICAgICAgc2hhZGVyU291cmNlc1t0aGlzLnZlcnRleF9zaGFkZXJfa2V5XSxcbiAgICAgICAgICAgICAgICBzaGFkZXJTb3VyY2VzW3RoaXMuZnJhZ21lbnRfc2hhZGVyX2tleV0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXMsXG4gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLFxuICAgICAgICAgICAgICAgICAgICBibG9ja3MsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrX3Njb3BlcyxcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW0uY29tcGlsZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9wcm9ncmFtID0gbmV3IFNoYWRlclByb2dyYW0oXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2wsXG4gICAgICAgICAgICAgICAgICAgIHNoYWRlclNvdXJjZXNbdGhpcy52ZXJ0ZXhfc2hhZGVyX2tleV0sXG4gICAgICAgICAgICAgICAgICAgIHNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvc2VsZWN0aW9uX2ZyYWdtZW50J10sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICh0aGlzLm5hbWUgKyAnIChzZWxlY3Rpb24pJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzOiBzZWxlY3Rpb25fZGVmaW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfc2NvcGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9wcm9ncmFtLmNvbXBpbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX3Byb2dyYW0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhyb3cobmV3IEVycm9yKGBzdHlsZS5jb21waWxlKCk6IHN0eWxlICR7dGhpcy5uYW1lfSBlcnJvcjpgLCBlcnJvcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21waWxpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21waWxlZCA9IHRydWU7XG4gICAgfSxcblxuICAgIC8vIEFkZCBhIHNoYWRlciBibG9ja1xuICAgIGFkZFNoYWRlckJsb2NrIChrZXksIGJsb2NrLCBzY29wZSA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5zaGFkZXJzLmJsb2NrcyA9IHRoaXMuc2hhZGVycy5ibG9ja3MgfHwge307XG4gICAgICAgIHRoaXMuc2hhZGVycy5ibG9ja3Nba2V5XSA9IHRoaXMuc2hhZGVycy5ibG9ja3Nba2V5XSB8fCBbXTtcbiAgICAgICAgdGhpcy5zaGFkZXJzLmJsb2Nrc1trZXldLnB1c2goYmxvY2spO1xuXG4gICAgICAgIHRoaXMuc2hhZGVycy5ibG9ja19zY29wZXMgPSB0aGlzLnNoYWRlcnMuYmxvY2tfc2NvcGVzIHx8IHt9O1xuICAgICAgICB0aGlzLnNoYWRlcnMuYmxvY2tfc2NvcGVzW2tleV0gPSB0aGlzLnNoYWRlcnMuYmxvY2tfc2NvcGVzW2tleV0gfHwgW107XG4gICAgICAgIHRoaXMuc2hhZGVycy5ibG9ja19zY29wZXNba2V5XS5wdXNoKHNjb3BlKTtcbiAgICB9LFxuXG4gICAgLy8gUmVtb3ZlIGFsbCBzaGFkZXIgYmxvY2tzIGZvciBrZXlcbiAgICByZW1vdmVTaGFkZXJCbG9jayAoa2V5KSB7XG4gICAgICAgIGlmICh0aGlzLnNoYWRlcnMuYmxvY2tzKSB7XG4gICAgICAgICAgICB0aGlzLnNoYWRlcnMuYmxvY2tzW2tleV0gPSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VTaGFkZXJCbG9jayAoa2V5LCBibG9jaywgc2NvcGUgPSBudWxsKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlU2hhZGVyQmxvY2soa2V5KTtcbiAgICAgICAgdGhpcy5hZGRTaGFkZXJCbG9jayhrZXksIGJsb2NrLCBzY29wZSk7XG4gICAgfSxcblxuICAgIC8qKiBUT0RPOiBjb3VsZCBwcm9iYWJseSBjb21iaW5lIGFuZCBnZW5lcmFsaXplIHRoaXMgd2l0aCBzaW1pbGFyIG1ldGhvZCBpbiBTaGFkZXJQcm9ncmFtXG4gICAgICogKGxpc3Qgb2YgZGVmaW5lIG9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gZWFjaCBvdGhlcilcbiAgICAgKi9cbiAgICBidWlsZERlZmluZUxpc3QgKCkge1xuICAgICAgICAvLyBBZGQgYW55IGN1c3RvbSBkZWZpbmVzIHRvIGJ1aWx0LWluIHN0eWxlIGRlZmluZXNcbiAgICAgICAgdmFyIGRlZmluZXMgPSB7fTsgLy8gY3JlYXRlIGEgbmV3IG9iamVjdCB0byBhdm9pZCBtdXRhdGluZyBhIHByb3RvdHlwZSB2YWx1ZSB0aGF0IG1heSBiZSBzaGFyZWQgd2l0aCBvdGhlciBzdHlsZXNcbiAgICAgICAgaWYgKHRoaXMuZGVmaW5lcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBkIGluIHRoaXMuZGVmaW5lcykge1xuICAgICAgICAgICAgICAgIGRlZmluZXNbZF0gPSB0aGlzLmRlZmluZXNbZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hhZGVycyAhPSBudWxsICYmIHRoaXMuc2hhZGVycy5kZWZpbmVzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAoZCBpbiB0aGlzLnNoYWRlcnMuZGVmaW5lcykge1xuICAgICAgICAgICAgICAgIGRlZmluZXNbZF0gPSB0aGlzLnNoYWRlcnMuZGVmaW5lc1tkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmaW5lcztcblxuICAgIH0sXG5cbiAgICAvLyBEZXRlcm1pbmVzIGlmICdyYXN0ZXInIHBhcmFtZXRlciBpcyBzZXQgdG8gYSB2YWxpZCB2YWx1ZVxuICAgIGhhc1Jhc3RlcnMgKCkge1xuICAgICAgICByZXR1cm4gKFsnY29sb3InLCAnbm9ybWFsJywgJ2N1c3RvbSddLmluZGV4T2YodGhpcy5yYXN0ZXIpID4gLTEpO1xuICAgIH0sXG5cbiAgICAvLyBTZXR1cCByYXN0ZXIgYWNjZXNzIGluIHNoYWRlcnNcbiAgICBzZXR1cFJhc3RlcnMgKCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUmFzdGVycygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbmFibGUgcmFzdGVyIHRleHR1cmVzIGFuZCBjb25maWd1cmUgaG93IGZpcnN0IHJhc3RlciBpcyBhcHBsaWVkXG4gICAgICAgIGlmICh0aGlzLnJhc3RlciA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fUkFTVEVSX1RFWFRVUkVfQ09MT1IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucmFzdGVyID09PSAnbm9ybWFsJykge1xuICAgICAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fUkFTVEVSX1RFWFRVUkVfTk9STUFMID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIGN1c3RvbSByYXN0ZXIgKHNhbXBsZXJzIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgYnV0IG5vdCBhdXRvbWF0aWNhbGx5IGFwcGxpZWQpXG5cbiAgICAgICAgLy8gQSBnaXZlbiBzdHlsZSBtYXkgYmUgYnVpbHQgd2l0aCBtdWx0aXBsZSBkYXRhIHNvdXJjZXMsIGVhY2ggb2Ygd2hpY2ggbWF5IGF0dGFjaFxuICAgICAgICAvLyBhIHZhcmlhYmxlIG51bWJlciBvZiByYXN0ZXIgc291cmNlcyAoMCB0byBOLCB3aGVyZSBOIGlzIHRoZSBtYXggbnVtYmVyIG9mIHJhc3RlciBzb3VyY2VzXG4gICAgICAgIC8vIGRlZmluZWQgZm9yIHRoZSBzY2VuZSkuIFRoaXMgbWVhbnMgd2UgZG9uJ3Qga25vdyAqd2hpY2gqIG9yICpob3cgbWFueSogcmFzdGVycyB3aWxsIGJlXG4gICAgICAgIC8vIGJvdW5kIG5vdywgYXQgaW5pdGlhbCBjb21waWxlLXRpbWU7IHdlIG9ubHkga25vdyB0aGlzIGF0IGdlb21ldHJ5IGJ1aWxkLXRpbWUuIFRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IHdlIGNhbiBiaW5kIGFzIG1hbnkgcmFzdGVyIHNvdXJjZXMgYXMgbmVlZGVkLCB3ZSBkZWNsYXJlIG91ciB1bmlmb3JtIGFycmF5cyB0byBob2xkXG4gICAgICAgIC8vIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb3NzaWJsZSBzb3VyY2VzLiBBdCByZW5kZXIgdGltZSwgb25seSB0aGUgbmVjZXNzYXJ5IG51bWJlciBvZiByYXN0ZXJzXG4gICAgICAgIC8vIGFyZSBib3VuZCAodGhlIHJlbWFpbmluZyBzbG90cyBhcmVuJ3QgaW50ZW5kZWQgdG8gYmUgYWNjZXNzZWQpLlxuICAgICAgICBsZXQgbnVtX3Jhc3Rlcl9zb3VyY2VzID1cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc291cmNlcylcbiAgICAgICAgICAgIC5maWx0ZXIocyA9PiB0aGlzLnNvdXJjZXNbc10gaW5zdGFuY2VvZiBSYXN0ZXJUaWxlU291cmNlKVxuICAgICAgICAgICAgLmxlbmd0aDtcblxuICAgICAgICB0aGlzLmRlZmluZXMuVEFOR1JBTV9OVU1fUkFTVEVSX1NPVVJDRVMgPSBgaW50KCR7bnVtX3Jhc3Rlcl9zb3VyY2VzfSlgO1xuICAgICAgICBpZiAobnVtX3Jhc3Rlcl9zb3VyY2VzID4gMCkge1xuICAgICAgICAgICAgLy8gVXNlIG1vZGVsIHBvc2l0aW9uIG9mIHRpbGUncyBjb29yZGluYXRlIHpvb20gZm9yIHJhc3RlciB0aWxlIHRleHR1cmUgVVZzXG4gICAgICAgICAgICB0aGlzLmRlZmluZXMuVEFOR1JBTV9NT0RFTF9QT1NJVElPTl9CQVNFX1pPT01fVkFSWUlORyA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIFVuaWZvcm1zIGFuZCBtYWNyb3MgZm9yIHJhc3RlciBzYW1wbGVyc1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlU2hhZGVyQmxvY2soJ3Jhc3RlcicsIHNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvcmFzdGVycyddLCAnUmFzdGVyJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gTG9hZCByYXN0ZXIgdGlsZSB0ZXh0dXJlcyBhbmQgc2V0IHVuaWZvcm1zXG4gICAgYnVpbGRSYXN0ZXJUZXh0dXJlcyAodGlsZSwgdGlsZV9kYXRhKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNSYXN0ZXJzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGlsZV9kYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb25maWdzID0ge307IC8vIHRleHR1cmUgY29uZmlncyB0byBwYXNzIHRvIHRleHR1cmUgYnVpbGRlciwga2V5ZWQgYnkgdGV4dHVyZSBuYW1lXG4gICAgICAgIGxldCBpbmRleCA9IHt9OyAgIC8vIGluZGV4IGludG8gcmFzdGVyIHNhbXBsZXIgYXJyYXksIGtleWVkIGJ5IHRleHR1cmUgbmFtZVxuXG4gICAgICAgIC8vIFRPRE86IGRhdGEgc291cmNlIGNvdWxkIHJldHJpZXZlIHJhc3RlciB0ZXh0dXJlIFVSTHNcbiAgICAgICAgdGlsZS5yYXN0ZXJzLm1hcChyID0+IHRoaXMuc291cmNlc1tyXSkuZmlsdGVyKHggPT4geCkuZm9yRWFjaCgoc291cmNlLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgUmFzdGVyVGlsZVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBzb3VyY2UudGlsZVRleHR1cmUodGlsZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnc1tjb25maWcudXJsXSA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICBpbmRleFtjb25maWcudXJsXSA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhjb25maWdzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGlsZV9kYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvYWQgdGV4dHVyZXMgb24gbWFpbiB0aHJlYWQgYW5kIHJldHVybiB3aGVuIGRvbmVcbiAgICAgICAgLy8gV2Ugd2FudCB0byBibG9jayB0aGUgYnVpbGRpbmcgb2YgYSByYXN0ZXIgdGlsZSBtZXNoIHVudGlsIGl0cyB0ZXh0dXJlIGlzIGxvYWRlZCxcbiAgICAgICAgLy8gdG8gYXZvaWQgZmxpY2tlcmluZyB3aGlsZSBsb2FkaW5nICh0ZXh0dXJlIHdpbGwgcmVuZGVyIGFzIGJsYWNrKVxuICAgICAgICByZXR1cm4gV29ya2VyQnJva2VyLnBvc3RNZXNzYWdlKHRoaXMubWFpbl90aHJlYWRfdGFyZ2V0KycubG9hZFRleHR1cmVzJywgY29uZmlncylcbiAgICAgICAgICAgIC50aGVuKHRleHR1cmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmVzIHx8IHRleHR1cmVzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGlsZV9kYXRhO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFNldCB0ZXh0dXJlIHVuaWZvcm1zIChyZXR1cm5lZCBhZnRlciBsb2FkaW5nIGZyb20gbWFpbiB0aHJlYWQpXG4gICAgICAgICAgICAgICAgdGlsZV9kYXRhLnVuaWZvcm1zID0gdGlsZV9kYXRhLnVuaWZvcm1zIHx8IHt9O1xuICAgICAgICAgICAgICAgIHRpbGVfZGF0YS50ZXh0dXJlcyA9IHRpbGVfZGF0YS50ZXh0dXJlcyB8fCBbXTtcblxuICAgICAgICAgICAgICAgIGxldCB1X3NhbXBsZXJzID0gdGlsZV9kYXRhLnVuaWZvcm1zWyd1X3Jhc3RlcnMnXSA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCB1X3NpemVzID0gdGlsZV9kYXRhLnVuaWZvcm1zWyd1X3Jhc3Rlcl9zaXplcyddID0gW107XG4gICAgICAgICAgICAgICAgbGV0IHVfb2Zmc2V0cyA9IHRpbGVfZGF0YS51bmlmb3Jtc1sndV9yYXN0ZXJfb2Zmc2V0cyddID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBbdG5hbWUsIHR3aWR0aCwgdGhlaWdodF0gb2YgdGV4dHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFt0bmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGxldCByYXN0ZXJfY29vcmRzID0gY29uZmlnc1t0bmFtZV0uY29vcmRzOyAvLyB0aWxlIGNvb3JkcyBvZiByYXN0ZXIgdGlsZVxuXG4gICAgICAgICAgICAgICAgICAgIHVfc2FtcGxlcnNbaV0gPSB0bmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdGlsZV9kYXRhLnRleHR1cmVzLnB1c2godG5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHVfc2l6ZXNbaV0gPSBbdHdpZHRoLCB0aGVpZ2h0XTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaWxlIGdlb21ldHJ5IG1heSBiZSBhdCBhIGhpZ2hlciB6b29tIHRoYW4gdGhlIHJhc3RlciB0aWxlIHRleHR1cmUsXG4gICAgICAgICAgICAgICAgICAgIC8vIChlLmcuIGFuIG92ZXJ6b29tZWQgcmFzdGVyIHRpbGUpLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gYWRqdXN0IHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyByYXN0ZXIgdGV4dHVyZSBVVnMgdG8gb2Zmc2V0IHRvIHRoZSBhcHByb3ByaWF0ZSBzdGFydGluZyBwb2ludCBmb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBnZW9tZXRyeSB0aWxlLlxuICAgICAgICAgICAgICAgICAgICBpZiAodGlsZS5jb29yZHMueiA+IHJhc3Rlcl9jb29yZHMueikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGR6ID0gdGlsZS5jb29yZHMueiAtIHJhc3Rlcl9jb29yZHMuejsgLy8gIyBvZiBsZXZlbHMgcmFzdGVyIHNvdXJjZSBpcyBvdmVyem9vbWVkXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZHoyID0gTWF0aC5wb3coMiwgZHopO1xuICAgICAgICAgICAgICAgICAgICAgICAgdV9vZmZzZXRzW2ldID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aWxlLmNvb3Jkcy54ICUgZHoyKSAvIGR6MixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHoyIC0gMSAtICh0aWxlLmNvb3Jkcy55ICUgZHoyKSkgLyBkejIsIC8vIEdMIHRleHR1cmUgY29vcmRzIGFyZSArWSB1cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLyBkejJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1X29mZnNldHNbaV0gPSBbMCwgMCwgMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGlsZV9kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvLyBDYWxsZWQgb24gbWFpbiB0aHJlYWRcbiAgICBsb2FkVGV4dHVyZXMgKHRleHR1cmVzKSB7XG4gICAgICAgIC8vIE5COiBvbmx5IHJldHVybiBuYW1lIGFuZCBzaXplIG9mIHRleHR1cmVzIGxvYWRlZCwgYmVjYXVzZSB3ZSBjYW4ndCBzZW5kIGFjdHVhbCB0ZXh0dXJlIG9iamVjdHMgdG8gd29ya2VyXG4gICAgICAgIHJldHVybiBUZXh0dXJlLmNyZWF0ZUZyb21PYmplY3QodGhpcy5nbCwgdGV4dHVyZXMpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKE9iamVjdC5rZXlzKHRleHR1cmVzKS5tYXAodCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUZXh0dXJlLnRleHR1cmVzW3RdICYmIFRleHR1cmUudGV4dHVyZXNbdF0ubG9hZCgpO1xuICAgICAgICAgICAgICAgIH0pLmZpbHRlcih4ID0+IHgpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbih0ZXh0dXJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZXMuZm9yRWFjaCh0ID0+IHQucmV0YWluKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlcy5tYXAodCA9PiBbdC5uYW1lLCB0LndpZHRoLCB0LmhlaWdodF0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8vIFNldHVwIGFueSBHTCBzdGF0ZSBmb3IgcmVuZGVyaW5nXG4gICAgc2V0dXAgKCkge1xuICAgICAgICB0aGlzLnNldFVuaWZvcm1zKCk7XG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0dXBQcm9ncmFtKFNoYWRlclByb2dyYW0uY3VycmVudCk7XG4gICAgfSxcblxuICAgIC8vIFNldCBzdHlsZSB1bmlmb3JtcyBvbiBjdXJyZW50bHkgYm91bmQgcHJvZ3JhbVxuICAgIHNldFVuaWZvcm1zICgpIHtcbiAgICAgICAgdmFyIHByb2dyYW0gPSBTaGFkZXJQcm9ncmFtLmN1cnJlbnQ7XG4gICAgICAgIGlmICghcHJvZ3JhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3Jtcyh0aGlzLnNoYWRlcnMgJiYgdGhpcy5zaGFkZXJzLnVuaWZvcm1zLCB0cnVlKTsgLy8gcmVzZXQgdGV4dHVyZSB1bml0IHRvIDBcbiAgICB9LFxuXG4gICAgLy8gUmVuZGVyIHN0YXRlIHNldHRpbmdzIGJ5IGJsZW5kIG1vZGVcbiAgICByZW5kZXJfc3RhdGVzOiB7XG4gICAgICAgIG9wYXF1ZTogeyBkZXB0aF90ZXN0OiB0cnVlLCBkZXB0aF93cml0ZTogdHJ1ZSB9LFxuICAgICAgICBhZGQ6IHsgZGVwdGhfdGVzdDogdHJ1ZSwgZGVwdGhfd3JpdGU6IGZhbHNlIH0sXG4gICAgICAgIG11bHRpcGx5OiB7IGRlcHRoX3Rlc3Q6IHRydWUsIGRlcHRoX3dyaXRlOiBmYWxzZSB9LFxuICAgICAgICBpbmxheTogeyBkZXB0aF90ZXN0OiB0cnVlLCBkZXB0aF93cml0ZTogZmFsc2UgfSxcbiAgICAgICAgb3ZlcmxheTogeyBkZXB0aF90ZXN0OiBmYWxzZSwgZGVwdGhfd3JpdGU6IGZhbHNlIH1cbiAgICB9LFxuXG4gICAgLy8gRGVmYXVsdCBzb3J0IG9yZGVyIGZvciBibGVuZCBtb2Rlc1xuICAgIGRlZmF1bHRfYmxlbmRfb3JkZXJzOiB7XG4gICAgICAgIG9wYXF1ZTogMCxcbiAgICAgICAgYWRkOiAxLFxuICAgICAgICBtdWx0aXBseTogMixcbiAgICAgICAgaW5sYXk6IDMsXG4gICAgICAgIG92ZXJsYXk6IDRcbiAgICB9LFxuXG4gICAgLy8gQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc29ydGluZyBzdHlsZXMgYnkgYmxlbmRcbiAgICBibGVuZE9yZGVyU29ydCAoYSwgYikge1xuICAgICAgICAvLyBvcGFxdWUgYWx3YXlzIGNvbWVzIGZpcnN0XG4gICAgICAgIGlmIChhLmJsZW5kID09PSAnb3BhcXVlJyB8fCBiLmJsZW5kID09PSAnb3BhcXVlJykge1xuICAgICAgICAgICAgaWYgKGEuYmxlbmQgPT09ICdvcGFxdWUnICYmIGIuYmxlbmQgPT09ICdvcGFxdWUnKSB7IC8vIGlmIGJvdGggYXJlIG9wYXF1ZVxuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUgPCBiLm5hbWUgPyAtMSA6IDE7IC8vIHVzZSBuYW1lIGFzIHRpZSBicmVha2VyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhLmJsZW5kID09PSAnb3BhcXVlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTsgLy8gb25seSBgYWAgd2FzIG9wYXF1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8vIG9ubHkgYGJgIHdhcyBvcGFxdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVzZSBleHBsaWNpdCBibGVuZCBvcmRlciBpZiBwb3NzaWJsZVxuICAgICAgICBpZiAoYS5ibGVuZF9vcmRlciA8IGIuYmxlbmRfb3JkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhLmJsZW5kX29yZGVyID4gYi5ibGVuZF9vcmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBibGVuZCBvcmRlcnMgYXJlIGVxdWFsLCB1c2UgZGVmYXVsdCBvcmRlciBieSBibGVuZCBtb2RlXG4gICAgICAgIGlmIChTdHlsZS5kZWZhdWx0X2JsZW5kX29yZGVyc1thLmJsZW5kXSA8IFN0eWxlLmRlZmF1bHRfYmxlbmRfb3JkZXJzW2IuYmxlbmRdKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoU3R5bGUuZGVmYXVsdF9ibGVuZF9vcmRlcnNbYS5ibGVuZF0gPiBTdHlsZS5kZWZhdWx0X2JsZW5kX29yZGVyc1tiLmJsZW5kXSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYS5uYW1lIDwgYi5uYW1lID8gLTEgOiAxOyAvLyB1c2UgbmFtZSBhcyB0aWUgYnJlYWtlclxuICAgIH0sXG5cbiAgICB1cGRhdGUgKCkge1xuICAgICAgICAvLyBTdHlsZS1zcGVjaWZpYyBhbmltYXRpb25cbiAgICAgICAgLy8gaWYgKHR5cGVvZiB0aGlzLmFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyAgICAgdGhpcy5hbmltYXRpb24oKTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxufTtcbiIsIi8vIE1hbmFnZSByZW5kZXJpbmcgc3R5bGVzXG5cbmltcG9ydCBVdGlscyBmcm9tICcuLi91dGlscy91dGlscyc7XG5pbXBvcnQgU2hhZGVyUHJvZ3JhbSBmcm9tICcuLi9nbC9zaGFkZXJfcHJvZ3JhbSc7XG5pbXBvcnQgc2hhZGVyU291cmNlcyBmcm9tICcuLi9nbC9zaGFkZXJfc291cmNlcyc7IC8vIGJ1aWx0LWluIHNoYWRlcnNcbmltcG9ydCB7U3R5bGV9IGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tICcuLi91dGlscy9tZXJnZSc7XG5pbXBvcnQgR2VvIGZyb20gJy4uL2dlbyc7XG5cbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG5leHBvcnQgdmFyIFN0eWxlTWFuYWdlciA9IHt9O1xuZXhwb3J0IHZhciBTdHlsZXMgPSB7fTtcbmV4cG9ydCB2YXIgQmFzZVN0eWxlcyA9IHt9O1xuXG5TdHlsZU1hbmFnZXIuc3R5bGVzID0gU3R5bGVzO1xuXG4vLyBTZXQgdGhlIGJhc2Ugb2JqZWN0IHVzZWQgdG8gaW5zdGFudGlhdGUgc3R5bGVzXG5TdHlsZU1hbmFnZXIuYmFzZVN0eWxlID0gU3R5bGU7XG5cbi8vIEdsb2JhbCBjb25maWd1cmF0aW9uIGZvciBhbGwgc3R5bGVzXG5TdHlsZU1hbmFnZXIuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBTaGFkZXJQcm9ncmFtLnJlbW92ZUJsb2NrKCdnbG9iYWwnKTtcbiAgICBTaGFkZXJQcm9ncmFtLnJlbW92ZUJsb2NrKCdzZXR1cCcpO1xuXG4gICAgLy8gVW5wYWNraW5nIGZ1bmN0aW9ucyAoZm9yIG5vcm1hbGl6ZWQgdmVydGV4IGF0dHJpYnV0ZXMpXG4gICAgU2hhZGVyUHJvZ3JhbS5hZGRCbG9jaygnZ2xvYmFsJywgc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy91bnBhY2snXSk7XG5cbiAgICAvLyBNb2RlbCBhbmQgd29ybGQgcG9zaXRpb24gYWNjZXNzb3JzXG4gICAgU2hhZGVyUHJvZ3JhbS5hZGRCbG9jaygnZ2xvYmFsJywgc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9hY2Nlc3NvcnMnXSk7XG5cbiAgICAvLyBMYXllciByZS1vcmRlcmluZyBmdW5jdGlvblxuICAgIFNoYWRlclByb2dyYW0uYWRkQmxvY2soJ2dsb2JhbCcsIHNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvbGF5ZXJfb3JkZXInXSk7XG5cbiAgICAvLyBGZWF0dXJlIHNlbGVjdGlvbiBnbG9iYWxcbiAgICBTaGFkZXJQcm9ncmFtLmFkZEJsb2NrKCdnbG9iYWwnLCBzaGFkZXJTb3VyY2VzWydnbC9zaGFkZXJzL3NlbGVjdGlvbl9nbG9iYWxzJ10pO1xuXG4gICAgLy8gRmVhdHVyZSBzZWxlY3Rpb24gdmVydGV4IHNoYWRlciBzdXBwb3J0XG4gICAgU2hhZGVyUHJvZ3JhbS5yZXBsYWNlQmxvY2soJ3NldHVwJywgc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9zZWxlY3Rpb25fdmVydGV4J10pO1xuXG4gICAgLy8gTWluaW11bSB2YWx1ZSBmb3IgZmxvYXQgY29tcGFyaXNvbnNcbiAgICBTaGFkZXJQcm9ncmFtLmRlZmluZXMuVEFOR1JBTV9FUFNJTE9OID0gMC4wMDAwMTtcblxuICAgIC8vIGFzc3VtZSBtaW4gMTYtYml0IGRlcHRoIGJ1ZmZlciwgaW4gcHJhY3RpY2UgdXNlcyAxNC1iaXRzLCAxIGV4dHJhIGJpdCB0byBoYW5kbGUgdmlydHVhbCBoYWxmLWxheWVyc1xuICAgIC8vIGZvciBvdXRsaW5lcyAoaW5zZXJ0ZWQgaW4gYmV0d2VlbiBsYXllcnMpLCBhbm90aGVyIGV4dHJhIGJpdCB0byBwcmV2ZW50IHByZWNpc2lvbiBsb3NzXG4gICAgU2hhZGVyUHJvZ3JhbS5kZWZpbmVzLlRBTkdSQU1fTEFZRVJfREVMVEEgPSAxIC8gKDEgPDwgMTQpO1xuXG4gICAgLy8gSW50ZXJuYWwgdGlsZSBzY2FsZVxuICAgIFNoYWRlclByb2dyYW0uZGVmaW5lcy5UQU5HUkFNX1RJTEVfU0NBTEUgPSBgdmVjMygke0dlby50aWxlX3NjYWxlfS4sICR7R2VvLnRpbGVfc2NhbGV9LiwgdV9tZXRlcnNfcGVyX3BpeGVsICogJHtHZW8udGlsZV9zaXplfS4pYDtcbn07XG5cbi8vIERlc3Ryb3kgYWxsIHN0eWxlcyBmb3IgYSBnaXZlbiBHTCBjb250ZXh0XG5TdHlsZU1hbmFnZXIuZGVzdHJveSA9IGZ1bmN0aW9uIChnbCkge1xuICAgIE9iamVjdC5rZXlzKFN0eWxlcykuZm9yRWFjaCgoX25hbWUpID0+IHtcbiAgICAgICAgdmFyIHN0eWxlID0gU3R5bGVzW19uYW1lXTtcbiAgICAgICAgaWYgKHN0eWxlLmdsID09PSBnbCkge1xuICAgICAgICAgICAgbG9nLnRyYWNlKGBTdHlsZU1hbmFnZXIuZGVzdHJveTogZGVzdHJveWluZyByZW5kZXIgc3R5bGUgJHtzdHlsZS5uYW1lfWApO1xuXG4gICAgICAgICAgICBpZiAoIXN0eWxlLmlzQnVpbHRJbigpKSB7XG4gICAgICAgICAgICAgICAgU3R5bGVNYW5hZ2VyLnJlbW92ZShzdHlsZS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0eWxlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuLy8gUmVnaXN0ZXIgYSBzdHlsZVxuU3R5bGVNYW5hZ2VyLnJlZ2lzdGVyID0gZnVuY3Rpb24gKHN0eWxlKSB7XG4gICAgU3R5bGVzW3N0eWxlLm5hbWVdID0gc3R5bGU7XG4gICAgQmFzZVN0eWxlc1tzdHlsZS5uYW1lXSA9IHN0eWxlO1xufTtcblxuLy8gUmVtb3ZlIGEgc3R5bGVcblN0eWxlTWFuYWdlci5yZW1vdmUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGRlbGV0ZSBTdHlsZXNbbmFtZV07XG59O1xuXG5TdHlsZU1hbmFnZXIubWl4ID0gZnVuY3Rpb24gKHN0eWxlLCBzdHlsZXMpIHtcbiAgICAvLyBFeGl0IGVhcmx5IGlmIHdlIGhhdmUgYWxyZWFkeSBhcHBsaWVkIG1peGlucyB0byB0aGlzIHN0eWxlXG4gICAgaWYgKHN0eWxlLm1peGVkKSB7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9XG4gICAgc3R5bGUubWl4ZWQgPSB7fTtcblxuICAgIC8vIE1peGluIHNvdXJjZXMsIGluIG9yZGVyXG4gICAgbGV0IHNvdXJjZXMgPSBbXTtcbiAgICBpZiAoc3R5bGUubWl4KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0eWxlLm1peCkpIHtcbiAgICAgICAgICAgIHNvdXJjZXMucHVzaCguLi5zdHlsZS5taXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc291cmNlcy5wdXNoKHN0eWxlLm1peCk7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlcyA9IHNvdXJjZXMubWFwKHggPT4gc3R5bGVzW3hdKS5maWx0ZXIoeCA9PiB4ICYmIHggIT09IHN0eWxlKTsgLy8gVE9ETzogd2FybmluZyBvbiB0cnlpbmcgdG8gbWl4IGludG8gc2VsZlxuXG4gICAgICAgIC8vIFRyYWNrIHdoaWNoIHN0eWxlcyB3ZXJlIG1peGVkIGludG8gdGhpcyBvbmVcbiAgICAgICAgZm9yIChsZXQgcyBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICBzdHlsZS5taXhlZFtzLm5hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VzLnB1c2goc3R5bGUpO1xuXG4gICAgLy8gRmxhZ3MgLSBPUidkLCB0cnVlIGlmIGFueSBzdHlsZSBoYXMgaXQgc2V0XG4gICAgc3R5bGUuYW5pbWF0ZWQgPSBzb3VyY2VzLnNvbWUoeCA9PiB4ICYmIHguYW5pbWF0ZWQpO1xuICAgIHN0eWxlLnRleGNvb3JkcyA9IHNvdXJjZXMuc29tZSh4ID0+IHggJiYgeC50ZXhjb29yZHMpO1xuXG4gICAgLy8gT3ZlcndyaXRlcyAtIGxhc3QgZGVmaW5pdGlvbiB3aW5zXG4gICAgc3R5bGUuYmFzZSA9IHNvdXJjZXMubWFwKHggPT4geC5iYXNlKS5maWx0ZXIoeCA9PiB4KS5wb3AoKTtcbiAgICBzdHlsZS5saWdodGluZyA9IHNvdXJjZXMubWFwKHggPT4geC5saWdodGluZykuZmlsdGVyKHggPT4geCAhPSBudWxsKS5wb3AoKTtcbiAgICBzdHlsZS50ZXh0dXJlID0gc291cmNlcy5tYXAoeCA9PiB4LnRleHR1cmUpLmZpbHRlcih4ID0+IHgpLnBvcCgpO1xuICAgIHN0eWxlLnJhc3RlciA9IHNvdXJjZXMubWFwKHggPT4geC5yYXN0ZXIpLmZpbHRlcih4ID0+IHggIT0gbnVsbCkucG9wKCk7XG4gICAgaWYgKHNvdXJjZXMuc29tZSh4ID0+IHguaGFzT3duUHJvcGVydHkoJ2JsZW5kJykgJiYgeC5ibGVuZCkpIHtcbiAgICAgICAgLy8gb25seSBtaXggYmxlbmQgaWYgZXhwbGljaXRseSBzZXQsIG90aGVyd2lzZSBsZXQgYmFzZSBzdHlsZSBjaG9vc2UgYmxlbmRpbmcgbW9kZVxuICAgICAgICAvLyBoYXNPd25Qcm9wZXJ0eSBjaGVjayBnaXZlcyBwcmVmZXJlbmNlIHRvIGJhc2Ugc3R5bGUgcHJvdG90eXBlXG4gICAgICAgIHN0eWxlLmJsZW5kID0gc291cmNlcy5tYXAoeCA9PiB4Lmhhc093blByb3BlcnR5KCdibGVuZCcpICYmIHguYmxlbmQpLmZpbHRlcih4ID0+IHgpLnBvcCgpO1xuICAgIH1cbiAgICBzdHlsZS5ibGVuZF9vcmRlciA9IHNvdXJjZXMubWFwKHggPT4geC5ibGVuZF9vcmRlcikuZmlsdGVyKHggPT4geCAhPSBudWxsKS5wb3AoKTtcblxuICAgIC8vIE1lcmdlcyAtIHByb3BlcnR5LXNwZWNpZmljIHJ1bGVzIGZvciBtZXJnaW5nIHZhbHVlc1xuICAgIHN0eWxlLmRlZmluZXMgPSBPYmplY3QuYXNzaWduKHt9LCAuLi5zb3VyY2VzLm1hcCh4ID0+IHguZGVmaW5lcykuZmlsdGVyKHggPT4geCkpOyAvLyBpbnRlcm5hbCBkZWZpbmVzIChub3QgdXNlci1kZWZpbmVkKVxuICAgIHN0eWxlLm1hdGVyaWFsID0gT2JqZWN0LmFzc2lnbih7fSwgLi4uc291cmNlcy5tYXAoeCA9PiB4Lm1hdGVyaWFsKS5maWx0ZXIoeCA9PiB4KSk7XG5cbiAgICAvLyBNaXggc2hhZGVyIHByb3BlcnRpZXNcbiAgICBTdHlsZU1hbmFnZXIubWl4U2hhZGVycyhzdHlsZSwgc3R5bGVzLCBzb3VyY2VzKTtcbiAgICByZXR1cm4gc3R5bGU7XG59O1xuXG4vLyBNaXggdGhlIHByb3BlcnRlcyBpbiB0aGUgXCJzaGFkZXJzXCIgYmxvY2tcblN0eWxlTWFuYWdlci5taXhTaGFkZXJzID0gZnVuY3Rpb24gKHN0eWxlLCBzdHlsZXMsIHNvdXJjZXMpIHtcbiAgICBsZXQgc2hhZGVycyA9IHt9OyAvLyBuZXdseSBtaXhlZCBzaGFkZXJzIHByb3BlcnRpZXNcbiAgICBsZXQgc2hhZGVyX21lcmdlcyA9IHNvdXJjZXMubWFwKHggPT4geC5zaGFkZXJzKS5maWx0ZXIoeCA9PiB4KTsgLy8ganVzdCB0aGUgc291cmNlIHN0eWxlcyB3aXRoIHNoYWRlciBwcm9wZXJ0aWVzXG5cbiAgICAvLyBEZWZpbmVzXG4gICAgc2hhZGVycy5kZWZpbmVzID0gT2JqZWN0LmFzc2lnbih7fSwgLi4uc2hhZGVyX21lcmdlcy5tYXAoeCA9PiB4LmRlZmluZXMpLmZpbHRlcih4ID0+IHgpKTtcblxuICAgIC8vIFVuaWZvcm1zXG4gICAgc2hhZGVycy51bmlmb3JtcyA9IHt9OyAgLy8gdW5pZm9ybXMgZm9yIHRoaXMgc3R5bGUsIGJvdGggZXhwbGljaXRseSBkZWZpbmVkLCBhbmQgbWl4ZWQgZnJvbSBvdGhlciBzdHlsZXNcbiAgICBzaGFkZXJzLl91bmlmb3JtcyA9IChzdHlsZS5zaGFkZXJzICYmIHN0eWxlLnNoYWRlcnMudW5pZm9ybXMpIHx8IHt9OyAvLyB1bmlmb3JtcyBleHBsaWNpdGx5IGRlZmluZWQgYnkgKnRoaXMqIHN0eWxlXG4gICAgc2hhZGVycy5fdW5pZm9ybV9zY29wZXMgPSB7fTsgLy8gdHJhY2tzIHdoaWNoIHN0eWxlIGVhY2ggdW5pZm9ybSBvcmlnaW5hdGVkIGZyb20gKHRoaXMgb25lLCBvciBhbmNlc3RvcilcblxuICAgIC8vIE1peCBpbiB1bmlmb3JtcyBmcm9tIGFuY2VzdG9ycywgcHJvdmlkaW5nIG1lYW5zIHRvIGFjY2Vzc1xuICAgIHNvdXJjZXNcbiAgICAgICAgLmZpbHRlcih4ID0+IHguc2hhZGVycyAmJiB4LnNoYWRlcnMudW5pZm9ybXMpXG4gICAgICAgIC5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgdSBpbiB4LnNoYWRlcnMudW5pZm9ybXMpIHtcbiAgICAgICAgICAgICAgICBzaGFkZXJzLl91bmlmb3JtX3Njb3Blc1t1XSA9IHgubmFtZTtcblxuICAgICAgICAgICAgICAgIC8vIERlZmluZSBnZXR0ZXIgYW5kIHNldHRlciBmb3IgdGhpcyB1bmlmb3JtXG4gICAgICAgICAgICAgICAgLy8gR2V0dGVyIHJldHVybnMgdmFsdWUgZm9yIHRoaXMgc3R5bGUgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGFza3MgYXBwcm9wcmlhdGUgYW5jZXN0b3IgZm9yIGl0XG4gICAgICAgICAgICAgICAgLy8gU2V0dGVyIHNldHMgdGhlIHZhbHVlIGZvciB0aGlzIHN0eWxlICh3aGV0aGVyIHByZXZpb3VzbHkgcHJlc2VudCBpbiB0aGlzIHN0eWxlIG9yIG5vdClcbiAgICAgICAgICAgICAgICAvLyBNaW1pY3MgSlMgcHJvdG90eXBlL2hhc093blByb3BlcnR5IGJlaGF2aW9yLCBidXQgd2l0aCBtdWx0aXBsZSBhbmNlc3RvcnMgKHZpYSBtaXhpbnMpXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNoYWRlcnMudW5pZm9ybXMsIHUsIHtcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuaWZvcm0gaXMgZXhwbGljaXRseSBkZWZpbmVkIG9uIHRoaXMgc3R5bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkZXJzLl91bmlmb3Jtc1t1XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRlcnMuX3VuaWZvcm1zW3VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5pZm9ybSB3YXMgbWl4ZWQgZnJvbSBhbm90aGVyIHN0eWxlLCBmb3J3YXJkIHJlcXVlc3QgdGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aWZ5IGNoZWNrIGlzIG5lZWRlZCB0byBwcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbiBpZiBhIHByZXZpb3VzbHkgZGVmaW5lZCB1bmlmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBzZXQgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHlsZXNbc2hhZGVycy5fdW5pZm9ybV9zY29wZXNbdV1dLnNoYWRlcnMudW5pZm9ybXMgIT09IHNoYWRlcnMudW5pZm9ybXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVzW3NoYWRlcnMuX3VuaWZvcm1fc2NvcGVzW3VdXS5zaGFkZXJzLnVuaWZvcm1zW3VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJzLl91bmlmb3Jtc1t1XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAvLyBFeHRlbnNpb25zOiBidWlsZCBhIGxpc3Qgb2YgdW5pcXVlIGV4dGVuc2lvbnNcbiAgICBzaGFkZXJzLmV4dGVuc2lvbnMgPSBPYmplY3Qua2V5cyhzaGFkZXJfbWVyZ2VzXG4gICAgICAgIC5tYXAoeCA9PiB4LmV4dGVuc2lvbnMpXG4gICAgICAgIC5maWx0ZXIoeCA9PiB4KVxuICAgICAgICAucmVkdWNlKChwcmV2LCBjdXIpID0+IHtcbiAgICAgICAgICAgIC8vIHNpbmdsZSBleHRlbnNpb25cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHByZXZbY3VyXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcnJheSBvZiBleHRlbnNpb25zXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXIuZm9yRWFjaCh4ID0+IHByZXZbeF0gPSB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICB9LCB7fSkgfHwge31cbiAgICApO1xuXG4gICAgLy8gU2hhZGVyIGJsb2Nrc1xuICAgIC8vIE1hcmsgYWxsIHNoYWRlciBibG9ja3MgZm9yIHRoZSB0YXJnZXQgc3R5bGUgYXMgb3JpZ2luYXRpbmcgd2l0aCBpdHMgb3duIG5hbWVcbiAgICBpZiAoc3R5bGUuc2hhZGVycyAmJiBzdHlsZS5zaGFkZXJzLmJsb2Nrcykge1xuICAgICAgICBzdHlsZS5zaGFkZXJzLmJsb2NrX3Njb3BlcyA9IHN0eWxlLnNoYWRlcnMuYmxvY2tfc2NvcGVzIHx8IHt9O1xuICAgICAgICBmb3IgKGxldCBbaywgYmxvY2tdIG9mIFV0aWxzLmVudHJpZXMoc3R5bGUuc2hhZGVycy5ibG9ja3MpKSB7XG4gICAgICAgICAgICBzdHlsZS5zaGFkZXJzLmJsb2NrX3Njb3Blc1trXSA9IHN0eWxlLnNoYWRlcnMuYmxvY2tfc2NvcGVzW2tdIHx8IFtdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmxvY2spKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc2hhZGVycy5ibG9ja19zY29wZXNba10ucHVzaCguLi5ibG9jay5tYXAoKCkgPT4gc3R5bGUubmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc2hhZGVycy5ibG9ja19zY29wZXNba10ucHVzaChzdHlsZS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1lcmdlIHNoYWRlciBibG9ja3MsIGtlZXBpbmcgdHJhY2sgb2Ygd2hpY2ggc3R5bGUgZWFjaCBibG9jayBvcmlnaW5hdGVkIGZyb21cbiAgICBsZXQgbWl4ZWQgPSB7fTsgLy8gYWxsIHNjb3BlcyBtaXhlZCBzbyBmYXJcbiAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc2hhZGVyX21lcmdlcykge1xuICAgICAgICBpZiAoIXNvdXJjZS5ibG9ja3MpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hhZGVycy5ibG9ja3MgPSBzaGFkZXJzLmJsb2NrcyB8fCB7fTtcbiAgICAgICAgc2hhZGVycy5ibG9ja19zY29wZXMgPSBzaGFkZXJzLmJsb2NrX3Njb3BlcyB8fCB7fTtcbiAgICAgICAgbGV0IG1peGVkX3NvdXJjZSA9IHt9OyAvLyBzY29wZXMgbWl4ZWQgZm9yIHRoaXMgc291cmNlIHN0eWxlXG5cbiAgICAgICAgZm9yIChsZXQgW3QsIGJsb2NrXSBvZiBVdGlscy5lbnRyaWVzKHNvdXJjZS5ibG9ja3MpKSB7XG4gICAgICAgICAgICBsZXQgYmxvY2tfc2NvcGUgPSBzb3VyY2UuYmxvY2tfc2NvcGVzW3RdO1xuXG4gICAgICAgICAgICBzaGFkZXJzLmJsb2Nrc1t0XSA9IHNoYWRlcnMuYmxvY2tzW3RdIHx8IFtdO1xuICAgICAgICAgICAgc2hhZGVycy5ibG9ja19zY29wZXNbdF0gPSBzaGFkZXJzLmJsb2NrX3Njb3Blc1t0XSB8fCBbXTtcblxuICAgICAgICAgICAgLy8gc3RhbmRhcmRpemUgb24gYXJyYXlzIChibG9jayBjYW4gYmUgc2luZ2xlIG9yIG11bHRpLXZhbHVlKVxuICAgICAgICAgICAgYmxvY2sgPSBBcnJheS5pc0FycmF5KGJsb2NrKSA/IGJsb2NrIDogW2Jsb2NrXTtcbiAgICAgICAgICAgIGJsb2NrX3Njb3BlID0gQXJyYXkuaXNBcnJheShibG9ja19zY29wZSkgPyBibG9ja19zY29wZSA6IFtibG9ja19zY29wZV07XG5cbiAgICAgICAgICAgIGZvciAobGV0IGI9MDsgYiA8IGJsb2NrLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBibG9ja3Mgd2UndmUgYWxyZWFkeSBtaXhlZCBpbiBmcm9tIHRoZSBzYW1lIHNjb3BlXG4gICAgICAgICAgICAgICAgLy8gUmVwZWF0aW5nIHNjb3BlIGluZGljYXRlcyBhIGRpYW1vbmQgcGF0dGVybiB3aGVyZSBhIHN0eWxlIGlzIGJlaW5nIG1peGVkIG11bHRpcGxlIHRpbWVzXG4gICAgICAgICAgICAgICAgaWYgKG1peGVkW2Jsb2NrX3Njb3BlW2JdXSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWl4ZWRfc291cmNlW2Jsb2NrX3Njb3BlW2JdXSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBzaGFkZXJzLmJsb2Nrc1t0XS5wdXNoKGJsb2NrW2JdKTtcbiAgICAgICAgICAgICAgICBzaGFkZXJzLmJsb2NrX3Njb3Blc1t0XS5wdXNoKGJsb2NrX3Njb3BlW2JdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBzdHlsZXMgbWl4ZWQgaW4gZnJvbSB0aGlzIHNvdXJjZSAtIHRoZXkgY291bGQgYmUgbXVsdGktbGV2ZWwgYW5jZXN0b3JzLFxuICAgICAgICAvLyBiZXlvbmQgdGhlIGZpcnN0LWxldmVsIFwicGFyZW50c1wiIGRlZmluZWQgaW4gdGhpcyBzdHlsZSdzIGBtaXhgIGxpc3RcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtaXhlZCwgbWl4ZWRfc291cmNlKTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKHN0eWxlLm1peGVkLCBtaXhlZCk7IC8vIGFkZCBhbGwgbmV3bHkgbWl4ZWQgc3R5bGVzXG5cbiAgICBzdHlsZS5zaGFkZXJzID0gc2hhZGVyczsgLy8gYXNzaWduIGJhY2sgdG8gc3R5bGVcbiAgICByZXR1cm4gc3R5bGU7XG59O1xuXG4vLyBDcmVhdGUgYSBuZXcgc3R5bGVcbi8vIG5hbWU6IG5hbWUgb2YgbmV3IHN0eWxlXG4vLyBjb25maWc6IHByb3BlcnRpZXMgb2YgbmV3IHN0eWxlXG4vLyBzdHlsZXM6IHdvcmtpbmcgc2V0IG9mIHN0eWxlcyBiZWluZyBidWlsdCAodXNlZCBmb3IgbWl4aW5nIGluIGV4aXN0aW5nIHN0eWxlcylcblN0eWxlTWFuYWdlci5jcmVhdGUgPSBmdW5jdGlvbiAobmFtZSwgY29uZmlnLCBzdHlsZXMgPSB7fSkge1xuICAgIGxldCBzdHlsZSA9IG1lcmdlT2JqZWN0cyh7fSwgY29uZmlnKTsgLy8gZGVlcCBjb3B5XG4gICAgc3R5bGUubmFtZSA9IG5hbWU7XG5cbiAgICAvLyBTdHlsZSBtaXhpbnNcbiAgICBzdHlsZSA9IFN0eWxlTWFuYWdlci5taXgoc3R5bGUsIHN0eWxlcyk7XG5cbiAgICAvLyBIYXMgYmFzZSBzdHlsZT9cbiAgICAvLyBPbmx5IHJlbmRlcmFibGUgKGluc3RhbnRpYXRlZCkgc3R5bGVzIHNob3VsZCBiZSBpbmNsdWRlZCBmb3IgcnVuLXRpbWUgdXNlXG4gICAgLy8gT3RoZXJzIGFyZSBpbnRlcm1lZGlhcnkvYWJzdHJhY3QsIHVzZWQgZHVyaW5nIHN0eWxlIGNvbXBvc2l0aW9uIGJ1dCBub3QgZXhlY3V0aW9uXG4gICAgaWYgKHN0eWxlLmJhc2UgJiYgQmFzZVN0eWxlc1tzdHlsZS5iYXNlXSkge1xuICAgICAgICBTdHlsZXNbbmFtZV0gPSBzdHlsZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCYXNlU3R5bGVzW3N0eWxlLmJhc2VdKSwgc3R5bGUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbn07XG5cbi8vIENhbGxlZCB0byBjcmVhdGUgYW5kIGluaXRpYWxpemUgc3R5bGVzXG5TdHlsZU1hbmFnZXIuYnVpbGQgPSBmdW5jdGlvbiAoc3R5bGVzLCBzY2VuZSA9IHt9KSB7XG4gICAgLy8gU29ydCBzdHlsZXMgYnkgZGVwZW5kZW5jeSwgdGhlbiBidWlsZCB0aGVtXG4gICAgbGV0IHN0eWxlX2RlcHMgPSBPYmplY3Qua2V5cyhzdHlsZXMpLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PiBTdHlsZU1hbmFnZXIuaW5oZXJpdGFuY2VEZXB0aChhLCBzdHlsZXMpIC0gU3R5bGVNYW5hZ2VyLmluaGVyaXRhbmNlRGVwdGgoYiwgc3R5bGVzKVxuICAgICk7XG5cbiAgICAvLyBPbmx5IGtlZXAgYnVpbHQtaW4gYmFzZSBzdHlsZXNcbiAgICBmb3IgKGxldCBzbmFtZSBpbiBTdHlsZXMpIHtcbiAgICAgICAgaWYgKCFCYXNlU3R5bGVzW3NuYW1lXSkge1xuICAgICAgICAgICAgZGVsZXRlIFN0eWxlc1tzbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBTdHlsZXNbc25hbWVdLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXb3JraW5nIHNldCBvZiBzdHlsZXMgYmVpbmcgYnVpbHRcbiAgICBsZXQgd3MgPSB7fTtcbiAgICBmb3IgKGxldCBzbmFtZSBvZiBzdHlsZV9kZXBzKSB7XG4gICAgICAgIHdzW3NuYW1lXSA9IFN0eWxlTWFuYWdlci5jcmVhdGUoc25hbWUsIHN0eWxlc1tzbmFtZV0sIHdzKTtcbiAgICB9XG5cbiAgICBTdHlsZU1hbmFnZXIuaW5pdFN0eWxlcyhzY2VuZSk7XG4gICAgcmV0dXJuIFN0eWxlcztcbn07XG5cbi8vIEluaXRpYWxpemUgYWxsIHN0eWxlc1xuU3R5bGVNYW5hZ2VyLmluaXRTdHlsZXMgPSBmdW5jdGlvbiAoc2NlbmUpIHtcbiAgICAvLyBJbml0aWFsaXplIGFsbFxuICAgIGZvciAobGV0IHNuYW1lIGluIFN0eWxlcykge1xuICAgICAgICBTdHlsZXNbc25hbWVdLmluaXQoc2NlbmUpO1xuICAgIH1cbn07XG5cbi8vIEdpdmVuIGEgc3R5bGUga2V5IGluIGEgc2V0IG9mIHN0eWxlcyB0byBhZGQsIGNvdW50IHRoZSBsZW5ndGggb2YgdGhlIGluaGVyaXRhbmNlIGNoYWluXG5TdHlsZU1hbmFnZXIuaW5oZXJpdGFuY2VEZXB0aCA9IGZ1bmN0aW9uIChrZXksIHN0eWxlcykge1xuICAgIGxldCBwYXJlbnRzID0gMDtcblxuICAgIHdoaWxlKHRydWUpIHtcbiAgICAgICAgbGV0IHN0eWxlID0gc3R5bGVzW2tleV07XG4gICAgICAgIGlmICghc3R5bGUpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBzY2VuZSBkZWYgZXJyb3IsIHRyeWluZyB0byBleHRlbmQgYSBzdHlsZSB0aGF0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVwZW5kZW5jeSBjaGFpbiBlbmRzIHdoZW4gdGhpcyBzdHlsZSBpc24ndCBtaXhpbmcgaW4gYW55IG90aGVyc1xuICAgICAgICBpZiAoIXN0eWxlLm1peCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcmF2ZXJzZSBuZXh0IHBhcmVudCBzdHlsZVxuICAgICAgICBwYXJlbnRzKys7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3R5bGUubWl4KSkge1xuICAgICAgICAgICAgLy8gSWYgbXVsdGlwbGUgbWl4aW5zLCBmaW5kIHRoZSBkZWVwZXN0IG9uZVxuICAgICAgICAgICAgcGFyZW50cyArPSBNYXRoLm1heCguLi5zdHlsZS5taXgubWFwKHMgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRyeWluZyB0byBtaXggaW50byBpdHNlbGYhXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0eWxlTWFuYWdlci5pbmhlcml0YW5jZURlcHRoKHMsIHN0eWxlcyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRyeWluZyB0byBtaXggaW50byBpdHNlbGYhXG4gICAgICAgICAgICBpZiAoa2V5ID09PSBzdHlsZS5taXgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgc2luZ2xlIG1peGluLCBjb250aW51ZSBsb29wIHVwIHRoZSB0cmVlXG4gICAgICAgICAgICBrZXkgPSBzdHlsZS5taXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG59O1xuXG4vLyBDb21waWxlIGFsbCBzdHlsZXNcblN0eWxlTWFuYWdlci5jb21waWxlID0gZnVuY3Rpb24gKGtleXMsIHNjZW5lKSB7XG4gICAga2V5cyA9IGtleXMgfHwgT2JqZWN0LmtleXMoU3R5bGVzKTtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgICAgICBsZXQgc3R5bGUgPSBTdHlsZXNba2V5XTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0eWxlLmNvbXBpbGUoKTtcbiAgICAgICAgICAgIGxvZy50cmFjZShgU3R5bGVNYW5hZ2VyLmNvbXBpbGUoKTogY29tcGlsZWQgc3R5bGUgJHtrZXl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcihgU3R5bGVNYW5hZ2VyLmNvbXBpbGUoKTogZXJyb3IgY29tcGlsaW5nIHN0eWxlICR7a2V5fTpgLCBlcnJvcik7XG5cbiAgICAgICAgICAgIHNjZW5lLnRyaWdnZXIoJ3dhcm5pbmcnLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0eWxlcycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYEVycm9yIGNvbXBpbGluZyBzdHlsZSAke2tleX1gLFxuICAgICAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgICAgIHNoYWRlcl9lcnJvcnM6IHN0eWxlLnByb2dyYW0gJiYgc3R5bGUucHJvZ3JhbS5zaGFkZXJfZXJyb3JzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvZy5kZWJ1ZyhgU3R5bGVNYW5hZ2VyLmNvbXBpbGUoKTogY29tcGlsZWQgYWxsIHN0eWxlc2ApO1xufTtcblxuLy8gR2V0IGFsbCBzdHlsZXMgd2l0aCBtZXNoIGRhdGEgZm9yIGEgZ2l2ZW4gdGlsZVxuU3R5bGVNYW5hZ2VyLnN0eWxlc0ZvclRpbGUgPSBmdW5jdGlvbiAodGlsZV9rZXkpIHtcbiAgICBsZXQgc3R5bGVzID0gW107XG4gICAgZm9yIChsZXQgcyBpbiBTdHlsZXMpIHtcbiAgICAgICAgaWYgKFN0eWxlc1tzXS5oYXNEYXRhRm9yVGlsZSh0aWxlX2tleSkpIHtcbiAgICAgICAgICAgIHN0eWxlcy5wdXNoKHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHlsZXM7XG59O1xuIiwiaW1wb3J0IFV0aWxzIGZyb20gJy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCBHZW8gZnJvbSAnLi4vZ2VvJztcblxuaW1wb3J0IHBhcnNlQ1NTQ29sb3IgZnJvbSAnY3NzY29sb3JwYXJzZXInO1xuXG5leHBvcnQgdmFyIFN0eWxlUGFyc2VyID0ge307XG5cbi8vIFdyYXBzIHN0eWxlIGZ1bmN0aW9ucyBhbmQgcHJvdmlkZXMgYSBzY29wZSBvZiBjb21tb25seSBhY2Nlc3NpYmxlIGRhdGE6XG4vLyAtIGZlYXR1cmU6IHRoZSAncHJvcGVydGllcycgb2YgdGhlIGZlYXR1cmUsIGUuZy4gYWNjZXNzZWQgYXMgJ2ZlYXR1cmUubmFtZSdcbi8vIC0gZ2xvYmFsOiB1c2VyLWRlZmluZWQgcHJvcGVydGllcyBvbiB0aGUgYGdsb2JhbGAgb2JqZWN0IGluIHRoZSBzY2VuZSBmaWxlXG4vLyAtICR6b29tOiB0aGUgY3VycmVudCBtYXAgem9vbSBsZXZlbFxuLy8gLSAkZ2VvbWV0cnk6IHRoZSB0eXBlIG9mIGdlb21ldHJ5LCAncG9pbnQnLCAnbGluZScsIG9yICdwb2x5Z29uJ1xuLy8gLSAkbWV0ZXJzX3Blcl9waXhlbDogY29udmVyc2lvbiBmb3IgbWV0ZXJzL3BpeGVscyBhdCBjdXJyZW50IG1hcCB6b29tXG5TdHlsZVBhcnNlci53cmFwRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykge1xuICAgIHZhciBmID0gYGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmVhdHVyZSA9IGNvbnRleHQuZmVhdHVyZS5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBjb250ZXh0Lmdsb2JhbDtcbiAgICAgICAgICAgICAgICB2YXIgJHpvb20gPSBjb250ZXh0Lnpvb207XG4gICAgICAgICAgICAgICAgdmFyICRsYXllciA9IGNvbnRleHQubGF5ZXI7XG4gICAgICAgICAgICAgICAgdmFyICRnZW9tZXRyeSA9IGNvbnRleHQuZ2VvbWV0cnk7XG4gICAgICAgICAgICAgICAgdmFyICRtZXRlcnNfcGVyX3BpeGVsID0gY29udGV4dC5tZXRlcnNfcGVyX3BpeGVsO1xuXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9ICgke2Z1bmN9KCkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gbnVsbDsgLy8gY29udmVydCBOYU5zIHRvIG51bGxzXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgIH1gO1xuICAgIHJldHVybiBmO1xufTtcblxuXG4vLyBTdHlsZSBwYXJzaW5nXG5cblN0eWxlUGFyc2VyLnplcm9QYWlyID0gT2JqZWN0LmZyZWV6ZShbMCwgMF0pOyAvLyBzaW5nbGUgYWxsb2NhdGlvbiBmb3IgemVybyB2YWx1ZXMgdGhhdCB3b24ndCBiZSBtb2RpZmllZFxuXG4vLyBTdHlsZSBkZWZhdWx0c1xuU3R5bGVQYXJzZXIuZGVmYXVsdHMgPSB7XG4gICAgY29sb3I6IFsxLCAxLCAxLCAxXSxcbiAgICB3aWR0aDogMSxcbiAgICBzaXplOiAxLFxuICAgIGV4dHJ1ZGU6IGZhbHNlLFxuICAgIGhlaWdodDogMjAsXG4gICAgbWluX2hlaWdodDogMCxcbiAgICBvcmRlcjogMCxcbiAgICB6OiAwLFxuICAgIG1hdGVyaWFsOiB7XG4gICAgICAgIGFtYmllbnQ6IDEsXG4gICAgICAgIGRpZmZ1c2U6IDFcbiAgICB9XG59O1xuXG4vLyBTdHlsZSBtYWNyb3NcblN0eWxlUGFyc2VyLm1hY3JvcyA9IHtcbiAgICAvLyBwc2V1ZG8tcmFuZG9tIGNvbG9yIGJ5IGdlb21ldHJ5IGlkXG4gICAgJ1N0eWxlLmNvbG9yLnBzZXVkb1JhbmRvbUNvbG9yJzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAwLjcgKiAocGFyc2VJbnQoZmVhdHVyZS5pZCwgMTYpIC8gMTAwICUgMSksICAgICAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgICAgIDAuNyAqIChwYXJzZUludChmZWF0dXJlLmlkLCAxNikgLyAxMDAwMCAlIDEpLCAgIC8vIGpzaGludCBpZ25vcmU6bGluZVxuICAgICAgICAgICAgMC43ICogKHBhcnNlSW50KGZlYXR1cmUuaWQsIDE2KSAvIDEwMDAwMDAgJSAxKSwgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgICAgICAxXG4gICAgICAgIF07XG4gICAgfSxcblxuICAgIC8vIHJhbmRvbSBjb2xvclxuICAgICdTdHlsZS5jb2xvci5yYW5kb21Db2xvcic6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gWzAuNyAqIE1hdGgucmFuZG9tKCksIDAuNyAqIE1hdGgucmFuZG9tKCksIDAuNyAqIE1hdGgucmFuZG9tKCksIDFdO1xuICAgIH1cbn07XG5cbi8vIEEgY29udGV4dCBvYmplY3QgdGhhdCBpcyBwYXNzZWQgdG8gc3R5bGUgcGFyc2luZyBmdW5jdGlvbnMgdG8gcHJvdmlkZSBhIHNjb3BlIG9mIGNvbW1vbmx5IHVzZWQgdmFsdWVzXG5TdHlsZVBhcnNlci5nZXRGZWF0dXJlUGFyc2VDb250ZXh0ID0gZnVuY3Rpb24gKGZlYXR1cmUsIHRpbGUsIGdsb2JhbCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGZlYXR1cmUsXG4gICAgICAgIHRpbGUsXG4gICAgICAgIGdsb2JhbCxcbiAgICAgICAgem9vbTogdGlsZS5zdHlsZV96b29tLFxuICAgICAgICBnZW9tZXRyeTogR2VvLmdlb21ldHJ5VHlwZShmZWF0dXJlLmdlb21ldHJ5LnR5cGUpLFxuICAgICAgICBtZXRlcnNfcGVyX3BpeGVsOiB0aWxlLm1ldGVyc19wZXJfcGl4ZWwsXG4gICAgICAgIHVuaXRzX3Blcl9tZXRlcjogdGlsZS51bml0c19wZXJfbWV0ZXJcbiAgICB9O1xufTtcblxuLy8gQnVpbGQgYSBzdHlsZSBwYXJhbSBjYWNoZSBvYmplY3Rcbi8vIGB2YWx1ZWAgaXMgcmF3IHZhbHVlLCBjYWNoZSBtZXRob2RzIHdpbGwgYWRkIG90aGVyIHByb3BlcnRpZXMgYXMgbmVlZGVkXG4vLyBgdHJhbnNmb3JtYCBpcyBvcHRpb25hbCB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gcnVuIG9uIHZhbHVlcyAoZXhjZXB0IGZ1bmN0aW9uIHZhbHVlcylcblN0eWxlUGFyc2VyLmNhY2hlT2JqZWN0ID0gZnVuY3Rpb24gKG9iaiwgdHJhbnNmb3JtID0gbnVsbCkge1xuICAgIGlmIChvYmogPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9iai52YWx1ZSkge1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogb2JqLnZhbHVlLCB6b29tOiAob2JqLnpvb20gPyB7fSA6IG51bGwpIH07IC8vIGNsb25lIGV4aXN0aW5nIGNhY2hlIG9iamVjdFxuICAgIH1cblxuICAgIGxldCBjID0geyB2YWx1ZTogb2JqIH07XG5cbiAgICBpZiAodHlwZW9mIHRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjLnZhbHVlKSAmJiBBcnJheS5pc0FycmF5KGMudmFsdWVbMF0pKSB7IC8vIHpvb20gc3RvcHNcbiAgICAgICAgICAgIGMudmFsdWUgPSBjLnZhbHVlLm1hcCh2ID0+IFt2WzBdLCB0cmFuc2Zvcm0odlsxXSldKTtcbiAgICAgICAgICAgIGMuem9vbSA9IHt9OyAvLyB3aWxsIGhvbGQgdmFsdWVzIGludGVycG9sYXRlZCBieSB6b29tXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGMudmFsdWUgIT09ICdmdW5jdGlvbicpIHsgLy8gZG9uJ3QgdHJhbnNmb3JtIGZ1bmN0aW9uc1xuICAgICAgICAgICAgYy52YWx1ZSA9IHRyYW5zZm9ybShjLnZhbHVlKTsgLy8gc2luZ2xlIHZhbHVlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYztcbn07XG5cbi8vIENvbnZlcnQgb2xkLXN0eWxlIGNvbG9yIG1hY3JvIGludG8gYSBmdW5jdGlvblxuLy8gVE9ETzogZGVwcmVjYXRlIHRoaXMgbWFjcm8gc3ludGF4XG5TdHlsZVBhcnNlci5jb2xvckNhY2hlT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChvYmosIHYgPT4ge1xuICAgICAgICBpZiAodiA9PT0gJ1N0eWxlLmNvbG9yLnBzZXVkb1JhbmRvbUNvbG9yJykge1xuICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnN0cmluZ1RvRnVuY3Rpb24oU3R5bGVQYXJzZXIud3JhcEZ1bmN0aW9uKFN0eWxlUGFyc2VyLm1hY3Jvc1snU3R5bGUuY29sb3IucHNldWRvUmFuZG9tQ29sb3InXSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHYgPT09ICdTdHlsZS5jb2xvci5yYW5kb21Db2xvcicpIHtcbiAgICAgICAgICAgIHJldHVybiBTdHlsZVBhcnNlci5tYWNyb3NbJ1N0eWxlLmNvbG9yLnJhbmRvbUNvbG9yJ107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdjtcbiAgICB9KTtcbn07XG5cbi8vIEludGVycG9sYXRpb24gYW5kIGNhY2hpbmcgZm9yIGEgZ2VuZXJpYyBwcm9wZXJ0eSAobm90IGEgY29sb3Igb3IgZGlzdGFuY2UpXG4vLyB7IHZhbHVlOiBvcmlnaW5hbCwgc3RhdGljOiB2YWwsIHpvb206IHsgMTogdmFsMSwgMjogdmFsMiwgLi4uIH0sIGR5bmFtaWM6IGZ1bmN0aW9uKCl7Li4ufSB9XG5TdHlsZVBhcnNlci5jYWNoZVByb3BlcnR5ID0gZnVuY3Rpb24odmFsLCBjb250ZXh0KSB7XG4gICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsLmR5bmFtaWMpIHsgLy8gZnVuY3Rpb24sIGNvbXB1dGUgZWFjaCB0aW1lIChubyBjYWNoaW5nKVxuICAgICAgICBsZXQgdiA9IHZhbC5keW5hbWljKGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsLnN0YXRpYykgeyAvLyBzaW5nbGUgc3RhdGljIHZhbHVlXG4gICAgICAgIHJldHVybiB2YWwuc3RhdGljO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwuem9vbSAmJiB2YWwuem9vbVtjb250ZXh0Lnpvb21dKSB7IC8vIGludGVycG9sYXRlZCwgY2FjaGVkXG4gICAgICAgIHJldHVybiB2YWwuem9vbVtjb250ZXh0Lnpvb21dO1xuICAgIH1cbiAgICBlbHNlIHsgLy8gbm90IHlldCBldmF1bGF0ZWQgZm9yIGNhY2hlXG4gICAgICAgIC8vIER5bmFtaWMgZnVuY3Rpb24tYmFzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbC5keW5hbWljID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgbGV0IHYgPSB2YWwuZHluYW1pYyhjb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG4gICAgICAgIC8vIEFycmF5IG9mIHpvb20taW50ZXJwb2xhdGVkIHN0b3BzLCBlLmcuIFt6b29tLCB2YWx1ZV0gcGFpcnNcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwudmFsdWUpICYmIEFycmF5LmlzQXJyYXkodmFsLnZhbHVlWzBdKSkge1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHZhbHVlIGZvciBjdXJyZW50IHpvb21cbiAgICAgICAgICAgIHZhbC56b29tID0gdmFsLnpvb20gfHwge307XG4gICAgICAgICAgICB2YWwuem9vbSA9IHt9O1xuICAgICAgICAgICAgdmFsLnpvb21bY29udGV4dC56b29tXSA9IFV0aWxzLmludGVycG9sYXRlKGNvbnRleHQuem9vbSwgdmFsLnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWwuem9vbVtjb250ZXh0Lnpvb21dO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNpbmdsZSBzdGF0aWMgdmFsdWVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWwuc3RhdGljID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHZhbC5zdGF0aWM7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5TdHlsZVBhcnNlci5jb252ZXJ0VW5pdHMgPSBmdW5jdGlvbih2YWwsIGNvbnRleHQpIHtcbiAgICAvLyBwcmUtcGFyc2VkIHVuaXRzXG4gICAgaWYgKHZhbC52YWwgIT0gbnVsbCkge1xuICAgICAgICBpZiAodmFsLnVuaXRzID09PSAncHgnKSB7IC8vIGNvbnZlcnQgZnJvbSBwaXhlbHNcbiAgICAgICAgICAgIHJldHVybiB2YWwudmFsICogR2VvLm1ldGVyc1BlclBpeGVsKGNvbnRleHQuem9vbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbC52YWw7XG4gICAgfVxuICAgIC8vIHVuLXBhcnNlZCB1bml0IHN0cmluZ1xuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciB1bml0cyA9IHZhbC5tYXRjaCgvKFswLTkuLV0rKShbYS16XSspLyk7XG4gICAgICAgIGlmICh1bml0cyAmJiB1bml0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHZhbCA9IHBhcnNlRmxvYXQodW5pdHNbMV0pO1xuICAgICAgICAgICAgdW5pdHMgPSB1bml0c1syXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ3B4JykgeyAvLyBjb252ZXJ0IGZyb20gcGl4ZWxzXG4gICAgICAgICAgICB2YWwgKj0gR2VvLm1ldGVyc1BlclBpeGVsKGNvbnRleHQuem9vbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbXVsdGlwbGUgdmFsdWVzIG9yIHN0b3BzXG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIC8vIEFycmF5IG9mIGFycmF5cywgZS5nLiB6b29tLWludGVycG9sYXRlZCBzdG9wc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxbMF0pKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLm1hcCh2ID0+IFt2WzBdLCBTdHlsZVBhcnNlci5jb252ZXJ0VW5pdHModlsxXSwgY29udGV4dCldKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBcnJheSBvZiB2YWx1ZXNcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLm1hcCh2ID0+IFN0eWxlUGFyc2VyLmNvbnZlcnRVbml0cyh2LCBjb250ZXh0KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIFByZS1wYXJzZSB1bml0cyBmcm9tIHN0cmluZyB2YWx1ZXNcblN0eWxlUGFyc2VyLmNhY2hlVW5pdHMgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgdmFyIG9iaiA9IHsgdmFsOiBwYXJzZUZsb2F0KHZhbCkgfTtcbiAgICBpZiAob2JqLnZhbCAhPT0gMCAmJiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwudHJpbSgpLnNsaWNlKC0yKSA9PT0gJ3B4Jykge1xuICAgICAgICBvYmoudW5pdHMgPSAncHgnO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufTtcblxuLy8gVGFrZXMgYSBkaXN0YW5jZSBjYWNoZSBvYmplY3QgYW5kIHJldHVybnMgYSBkaXN0YW5jZSB2YWx1ZSBmb3IgdGhpcyB6b29tXG4vLyAoY2FjaGluZyB0aGUgcmVzdWx0IGZvciBmdXR1cmUgdXNlKVxuLy8geyB2YWx1ZTogb3JpZ2luYWwsIHpvb206IHsgejogbWV0ZXJzIH0sIGR5bmFtaWM6IGZ1bmN0aW9uKCl7Li4ufSB9XG5TdHlsZVBhcnNlci5jYWNoZURpc3RhbmNlID0gZnVuY3Rpb24odmFsLCBjb250ZXh0KSB7XG4gICAgaWYgKHZhbC5keW5hbWljKSB7XG4gICAgICAgIGxldCB2ID0gdmFsLmR5bmFtaWMoY29udGV4dCk7XG4gICAgICAgIHJldHVybiB2O1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwuem9vbSAmJiB2YWwuem9vbVtjb250ZXh0Lnpvb21dKSB7XG4gICAgICAgIHJldHVybiB2YWwuem9vbVtjb250ZXh0Lnpvb21dO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gRHluYW1pYyBmdW5jdGlvbi1iYXNlZFxuICAgICAgICBpZiAodHlwZW9mIHZhbC52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsLmR5bmFtaWMgPSB2YWwudmFsdWU7XG4gICAgICAgICAgICBsZXQgdiA9IHZhbC5keW5hbWljKGNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXJyYXkgb2Ygem9vbS1pbnRlcnBvbGF0ZWQgc3RvcHMsIGUuZy4gW3pvb20sIHZhbHVlXSBwYWlyc1xuICAgICAgICBlbHNlIGlmICh2YWwuem9vbSkge1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHZhbHVlIGZvciBjdXJyZW50IHpvb21cbiAgICAgICAgICAgIC8vIERvIGZpbmFsIHVuaXQgY29udmVyc2lvbiBhcyBsYXRlIGFzIHBvc3NpYmxlLCB3aGVuIGludGVycG9sYXRpb24gdmFsdWVzIGhhdmUgYmVlbiBkZXRlcm1pbmVkXG4gICAgICAgICAgICB2YWwuem9vbVtjb250ZXh0Lnpvb21dID0gVXRpbHMuaW50ZXJwb2xhdGUoY29udGV4dC56b29tLCB2YWwudmFsdWUsXG4gICAgICAgICAgICAgICAgdiA9PiBTdHlsZVBhcnNlci5jb252ZXJ0VW5pdHModiwgY29udGV4dCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gdmFsLnpvb21bY29udGV4dC56b29tXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBTdHlsZVBhcnNlci5jb252ZXJ0VW5pdHModmFsLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8vIENhY2hlIHByZXZpb3VzbHkgcGFyc2VkIGNvbG9yIHN0cmluZ3NcblN0eWxlUGFyc2VyLnN0cmluZ19jb2xvcnMgPSB7fTtcblN0eWxlUGFyc2VyLmNvbG9yRm9yU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgLy8gQ2FjaGVkXG4gICAgaWYgKFN0eWxlUGFyc2VyLnN0cmluZ19jb2xvcnNbc3RyaW5nXSkge1xuICAgICAgICByZXR1cm4gU3R5bGVQYXJzZXIuc3RyaW5nX2NvbG9yc1tzdHJpbmddO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBhbmQgY2FjaGVcbiAgICBsZXQgY29sb3IgPSBwYXJzZUNTU0NvbG9yLnBhcnNlQ1NTQ29sb3Ioc3RyaW5nKTtcbiAgICBpZiAoY29sb3IgJiYgY29sb3IubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIGNvbG9yWzBdIC89IDI1NTtcbiAgICAgICAgY29sb3JbMV0gLz0gMjU1O1xuICAgICAgICBjb2xvclsyXSAvPSAyNTU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb2xvciA9IFN0eWxlUGFyc2VyLmRlZmF1bHRzLmNvbG9yO1xuICAgIH1cbiAgICBTdHlsZVBhcnNlci5zdHJpbmdfY29sb3JzW3N0cmluZ10gPSBjb2xvcjtcbiAgICByZXR1cm4gY29sb3I7XG59O1xuXG4vLyBUYWtlcyBhIGNvbG9yIGNhY2hlIG9iamVjdCBhbmQgcmV0dXJucyBhIGNvbG9yIHZhbHVlIGZvciB0aGlzIHpvb21cbi8vIChjYWNoaW5nIHRoZSByZXN1bHQgZm9yIGZ1dHVyZSB1c2UpXG4vLyB7IHZhbHVlOiBvcmlnaW5hbCwgc3RhdGljOiBbcixnLGIsYV0sIHpvb206IHsgejogW3IsZyxiLGFdIH0sIGR5bmFtaWM6IGZ1bmN0aW9uKCl7Li4ufSB9XG5TdHlsZVBhcnNlci5jYWNoZUNvbG9yID0gZnVuY3Rpb24odmFsLCBjb250ZXh0ID0ge30pIHtcbiAgICBpZiAodmFsLmR5bmFtaWMpIHtcbiAgICAgICAgbGV0IHYgPSB2YWwuZHluYW1pYyhjb250ZXh0KTtcblxuICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2ID0gU3R5bGVQYXJzZXIuY29sb3JGb3JTdHJpbmcodik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodiAmJiB2WzNdID09IG51bGwpIHtcbiAgICAgICAgICAgIHZbM10gPSAxOyAvLyBkZWZhdWx0IGFscGhhXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbC5zdGF0aWMpIHtcbiAgICAgICAgcmV0dXJuIHZhbC5zdGF0aWM7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbC56b29tICYmIHZhbC56b29tW2NvbnRleHQuem9vbV0pIHtcbiAgICAgICAgcmV0dXJuIHZhbC56b29tW2NvbnRleHQuem9vbV07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBEeW5hbWljIGZ1bmN0aW9uLWJhc2VkIGNvbG9yXG4gICAgICAgIGlmICh0eXBlb2YgdmFsLnZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YWwuZHluYW1pYyA9IHZhbC52YWx1ZTtcbiAgICAgICAgICAgIGxldCB2ID0gdmFsLmR5bmFtaWMoY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2ID0gU3R5bGVQYXJzZXIuY29sb3JGb3JTdHJpbmcodik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2ICYmIHZbM10gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZbM10gPSAxOyAvLyBkZWZhdWx0IGFscGhhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTaW5nbGUgc3RyaW5nIGNvbG9yXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWwuc3RhdGljID0gU3R5bGVQYXJzZXIuY29sb3JGb3JTdHJpbmcodmFsLnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWwuc3RhdGljO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFycmF5IG9mIHpvb20taW50ZXJwb2xhdGVkIHN0b3BzLCBlLmcuIFt6b29tLCBjb2xvcl0gcGFpcnNcbiAgICAgICAgZWxzZSBpZiAodmFsLnpvb20pIHtcbiAgICAgICAgICAgIC8vIFBhcnNlIGFueSBzdHJpbmcgY29sb3JzIGluc2lkZSBzdG9wcywgdGhlIGZpcnN0IHRpbWUgd2UgZW5jb3VudGVyIHRoaXMgcHJvcGVydHlcbiAgICAgICAgICAgIGlmICghdmFsLnpvb21fcHJlcHJvY2Vzc2VkKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgdmFsLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdmFsLnZhbHVlW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodiAmJiB0eXBlb2YgdlsxXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZbMV0gPSBTdHlsZVBhcnNlci5jb2xvckZvclN0cmluZyh2WzFdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWwuem9vbV9wcmVwcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgY29sb3IgZm9yIGN1cnJlbnQgem9vbVxuICAgICAgICAgICAgdmFsLnpvb21bY29udGV4dC56b29tXSA9IFV0aWxzLmludGVycG9sYXRlKGNvbnRleHQuem9vbSwgdmFsLnZhbHVlKTtcbiAgICAgICAgICAgIHZhbC56b29tW2NvbnRleHQuem9vbV1bM10gPSB2YWwuem9vbVtjb250ZXh0Lnpvb21dWzNdIHx8IDE7IC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgICAgIHJldHVybiB2YWwuem9vbVtjb250ZXh0Lnpvb21dO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNpbmdsZSBhcnJheSBjb2xvclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbC5zdGF0aWMgPSB2YWwudmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsLnN0YXRpYyAmJiB2YWwuc3RhdGljWzNdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YWwuc3RhdGljWzNdID0gMTsgLy8gZGVmYXVsdCBhbHBoYVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbC5zdGF0aWM7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5TdHlsZVBhcnNlci5wYXJzZUNvbG9yID0gZnVuY3Rpb24odmFsLCBjb250ZXh0ID0ge30pIHtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWwgPSB2YWwoY29udGV4dCk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgQ1NTLXN0eWxlIGNvbG9yc1xuICAgIC8vIFRPRE86IGNoYW5nZSBhbGwgY29sb3JzIHRvIHVzZSAwLTI1NSByYW5nZSBpbnRlcm5hbGx5IHRvIGF2b2lkIGRpdmlkaW5nIGFuZCB0aGVuIHJlLW11bHRpcGx5aW5nIGluIGdlb20gYnVpbGRlclxuICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWwgPSBTdHlsZVBhcnNlci5jb2xvckZvclN0cmluZyh2YWwpO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbCkgJiYgQXJyYXkuaXNBcnJheSh2YWxbMF0pKSB7XG4gICAgICAgIC8vIEFycmF5IG9mIHpvb20taW50ZXJwb2xhdGVkIHN0b3BzLCBlLmcuIFt6b29tLCBjb2xvcl0gcGFpcnNcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgdiA9IHZhbFtpXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdlsxXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2WzFdID0gU3R5bGVQYXJzZXIuY29sb3JGb3JTdHJpbmcodlsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC56b29tKSB7XG4gICAgICAgICAgICB2YWwgPSBVdGlscy5pbnRlcnBvbGF0ZShjb250ZXh0Lnpvb20sIHZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0c1xuICAgIGlmICh2YWwpIHtcbiAgICAgICAgLy8gYWxwaGFcbiAgICAgICAgaWYgKHZhbFszXSA9PSBudWxsKSB7XG4gICAgICAgICAgICB2YWxbM10gPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YWwgPSBbMCwgMCwgMCwgMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbn07XG5cblN0eWxlUGFyc2VyLmNhbGN1bGF0ZU9yZGVyID0gZnVuY3Rpb24ob3JkZXIsIGNvbnRleHQpIHtcbiAgICAvLyBDb21wdXRlZCBvcmRlclxuICAgIGlmICh0eXBlb2Ygb3JkZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3JkZXIgPSBvcmRlcihjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG9yZGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBPcmRlciB0aWVkIHRvIGZlYXR1cmUgcHJvcGVydHlcbiAgICAgICAgaWYgKGNvbnRleHQuZmVhdHVyZS5wcm9wZXJ0aWVzW29yZGVyXSkge1xuICAgICAgICAgICAgb3JkZXIgPSBjb250ZXh0LmZlYXR1cmUucHJvcGVydGllc1tvcmRlcl07XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXhwbGljaXQgb3JkZXIgdmFsdWVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcmRlciA9IHBhcnNlRmxvYXQob3JkZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyO1xufTtcblxuLy8gRXZhbHVhdGUgYSBmdW5jdGlvbi1iYXNlZCBwcm9wZXJ0eSwgb3IgcGFzcy10aHJvdWdoIHN0YXRpYyB2YWx1ZVxuU3R5bGVQYXJzZXIuZXZhbFByb3AgPSBmdW5jdGlvbihwcm9wLCBjb250ZXh0KSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBwcm9wKGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcDtcbn07XG5cbi8vIFN1YnN0aXR1dGVzIGdsb2JhbCBzY2VuZSBwcm9wZXJ0aWVzICh0aG9zZSBkZWZpbmVkIGluIHRoZSBgY29uZmlnLmdsb2JhbGAgb2JqZWN0KSBmb3IgYW55IHN0eWxlIHZhbHVlc1xuLy8gb2YgdGhlIGZvcm0gYGdsb2JhbC5gLCBmb3IgZXhhbXBsZSBgY29sb3I6IGdsb2JhbC5wYXJrX2NvbG9yYCB3b3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSB2YWx1ZSAoaWYgYW55KVxuLy8gZGVmaW5lZCBmb3IgdGhlIGBwYXJrX2NvbG9yYCBwcm9wZXJ0eSBpbiBgY29uZmlnLmdsb2JhbC5wYXJrX2NvbG9yYC5cblN0eWxlUGFyc2VyLmFwcGx5R2xvYmFsUHJvcGVydGllcyA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICBpZiAoIWNvbmZpZy5nbG9iYWwgfHwgT2JqZWN0LmtleXMoY29uZmlnLmdsb2JhbCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBjb25maWc7IC8vIG5vIGdsb2JhbCBwcm9wZXJ0aWVzIHRvIHRyYW5zZm9ybVxuICAgIH1cblxuICAgIGNvbnN0IHNlcGFyYXRvciA9ICc6JztcbiAgICBjb25zdCBwcm9wcyA9IGZsYXR0ZW5Qcm9wZXJ0aWVzKGNvbmZpZy5nbG9iYWwsIHNlcGFyYXRvcik7XG5cbiAgICBmdW5jdGlvbiBhcHBseVByb3BzIChvYmopIHtcbiAgICAgICAgLy8gQ29udmVydCBzdHJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gKG9iai5zbGljZSgwLCA3KSA9PT0gJ2dsb2JhbC4nKSAmJiAob2JqLnNsaWNlKDcpLnJlcGxhY2UoL1xcLi9nLCBzZXBhcmF0b3IpKTtcbiAgICAgICAgICAgIGlmIChrZXkgJiYgcHJvcHNba2V5XSkge1xuICAgICAgICAgICAgICAgIG9iaiA9IHByb3BzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwIGluIG9iaikge1xuICAgICAgICAgICAgICAgIG9ialtwXSA9IGFwcGx5UHJvcHMob2JqW3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiBhcHBseVByb3BzKGNvbmZpZyk7XG59O1xuXG4vLyBGbGF0dGVuIG5lc3RlZCBwcm9wZXJ0aWVzIGZvciBzaW1wbGVyIHN0cmluZyBsb29rLXVwc1xuLy8gZS5nLiBnbG9iYWwuYmFja2dyb3VuZC5jb2xvciAtPiAnZ2xvYmFsOmJhY2tncm91bmQ6Y29sb3InXG5mdW5jdGlvbiBmbGF0dGVuUHJvcGVydGllcyAob2JqLCBzZXBhcmF0b3IgPSAnOicsIHByZWZpeCA9IG51bGwsIHByb3BzID0ge30pIHtcbiAgICBwcmVmaXggPSBwcmVmaXggPyAocHJlZml4ICsgc2VwYXJhdG9yKSA6ICcnO1xuXG4gICAgZm9yIChsZXQgcCBpbiBvYmopIHtcbiAgICAgICAgbGV0IGtleSA9IHByZWZpeCArIHA7XG4gICAgICAgIGxldCB2YWwgPSBvYmpbcF07XG4gICAgICAgIHByb3BzW2tleV0gPSB2YWw7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgIGZsYXR0ZW5Qcm9wZXJ0aWVzKHZhbCwgc2VwYXJhdG9yLCBrZXksIHByb3BzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcHM7XG59XG4iLCJpbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vLi4vZ2wvdGV4dHVyZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhbnZhc1RleHQge1xuXG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnOyAvLyByZW5kZXIgdGV4dCBvbiB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kXG4gICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgfVxuXG4gICAgcmVzaXplICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZm9udCBzdHlsZSBwYXJhbXMgZm9yIGNhbnZhcyBkcmF3aW5nXG4gICAgc2V0Rm9udCAoeyBmb250X2NzcywgZmlsbCwgc3Ryb2tlLCBzdHJva2Vfd2lkdGgsIHB4X3NpemUgfSkge1xuICAgICAgICB0aGlzLnB4X3NpemUgPSBweF9zaXplO1xuICAgICAgICB0aGlzLnRleHRfYnVmZmVyID0gODsgLy8gcGl4ZWwgcGFkZGluZyBhcm91bmQgdGV4dFxuICAgICAgICBsZXQgY3R4ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgICAgIGN0eC5mb250ID0gZm9udF9jc3M7XG4gICAgICAgIGlmIChzdHJva2UpIHtcbiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZTtcbiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBzdHJva2Vfd2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBudWxsO1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGw7XG4gICAgICAgIGN0eC5taXRlckxpbWl0ID0gMjtcbiAgICB9XG5cbiAgICB0ZXh0U2l6ZXMgKHRleHRzKSB7XG4gICAgICAgIGZvciAobGV0IHN0eWxlIGluIHRleHRzKSB7XG4gICAgICAgICAgICBsZXQgdGV4dF9pbmZvcyA9IHRleHRzW3N0eWxlXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgdGV4dCBpbiB0ZXh0X2luZm9zKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRleHRfc2V0dGluZ3MgPSB0ZXh0X2luZm9zW3RleHRdLnRleHRfc2V0dGluZ3M7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRleHQgc2l6ZXNcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvbnQodGV4dF9zZXR0aW5ncyk7IC8vIFRPRE86IG9ubHkgc2V0IG9uY2UgYWJvdmVcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICB0ZXh0X2luZm9zW3RleHRdLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRTaXplKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfc2V0dGluZ3MudHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9zZXR0aW5ncy50ZXh0X3dyYXBcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dHM7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZXMgd2lkdGggYW5kIGhlaWdodCBvZiB0ZXh0IGJhc2VkIG9uIGN1cnJlbnQgZm9udCBzdHlsZVxuICAgIC8vIEluY2x1ZGVzIHdvcmQgd3JhcHBpbmcsIHJldHVybnMgc2l6ZSBpbmZvIGZvciB3aG9sZSB0ZXh0IGJsb2NrIGFuZCBpbmRpdmlkdWFsIGxpbmVzXG4gICAgdGV4dFNpemUgKHRleHQsIHRyYW5zZm9ybSwgdGV4dF93cmFwKSB7XG4gICAgICAgIGxldCBzdHIgPSB0aGlzLmFwcGx5VGV4dFRyYW5zZm9ybSh0ZXh0LCB0cmFuc2Zvcm0pO1xuICAgICAgICBsZXQgY3R4ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBsZXQgYnVmZmVyID0gdGhpcy50ZXh0X2J1ZmZlciAqIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbztcbiAgICAgICAgbGV0IGxlYWRpbmcgPSAyICogVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvOyAvLyBtYWtlIGNvbmZpZ3VyYWJsZSBhbmQvb3IgdXNlIENhbnZhcyBUZXh0TWV0cmljcyB3aGVuIGF2YWlsYWJsZVxuICAgICAgICBsZXQgbGluZV9oZWlnaHQgPSB0aGlzLnB4X3NpemUgKyBsZWFkaW5nOyAvLyBweF9zaXplIGFscmVhZHkgaW4gZGV2aWNlIHBpeGVsc1xuXG4gICAgICAgIC8vIFdvcmQgd3JhcHBpbmdcbiAgICAgICAgLy8gTGluZSBicmVha3MgY2FuIGJlIGNhdXNlZCBieTpcbiAgICAgICAgLy8gIC0gaW1wbGljaXQgbGluZSBicmVhayB3aGVuIGEgbWF4aW11bSBjaGFyYWN0ZXIgdGhyZXNob2xkIGlzIGV4Y2VlZGVkIHBlciBsaW5lICh0ZXh0X3dyYXApXG4gICAgICAgIC8vICAtIGV4cGxpY2l0IGxpbmUgYnJlYWsgaW4gdGhlIGxhYmVsIHRleHQgKFxcbilcbiAgICAgICAgbGV0IHdvcmRzO1xuICAgICAgICBpZiAodHlwZW9mIHRleHRfd3JhcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHdvcmRzID0gc3RyLnNwbGl0KCcgJyk7IC8vIHNwbGl0IHdvcmRzIG9uIHNwYWNlc1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd29yZHMgPSBbc3RyXTsgLy8gbm8gbWF4IGxpbmUgd29yZCB3cmFwcGluZyAoYnV0IG5ldyBsaW5lcyB3aWxsIHN0aWxsIGJlIGluIGVmZmVjdClcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3X2xpbmVfdGVtcGxhdGUgPSB7IHdpZHRoOiAwLCBjaGFyczogMCwgdGV4dDogJycgfTtcbiAgICAgICAgbGV0IGxpbmUgPSBPYmplY3QuYXNzaWduKHt9LCBuZXdfbGluZV90ZW1wbGF0ZSk7IC8vIGN1cnJlbnQgbGluZVxuICAgICAgICBsZXQgbGluZXMgPSBbXTsgLy8gY29tcGxldGVkIGxpbmVzXG4gICAgICAgIGxldCBtYXhfd2lkdGggPSAwOyAvLyBtYXggd2lkdGggdG8gZml0IGFsbCBsaW5lc1xuXG4gICAgICAgIC8vIGFkZCBjdXJyZW50IGxpbmUgYnVmZmVyIHRvIGNvbXBsZXRlZCBsaW5lcywgb3B0aW9uYWxseSBzdGFydCBuZXcgbGluZVxuICAgICAgICBmdW5jdGlvbiBhZGRMaW5lIChuZXdfbGluZSkge1xuICAgICAgICAgICAgbGluZS50ZXh0ID0gbGluZS50ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgIGlmIChsaW5lLnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxpbmUud2lkdGggPSBjdHgubWVhc3VyZVRleHQobGluZS50ZXh0KS53aWR0aDtcbiAgICAgICAgICAgICAgICBtYXhfd2lkdGggPSBNYXRoLm1heChtYXhfd2lkdGgsIE1hdGguY2VpbChsaW5lLndpZHRoKSk7XG4gICAgICAgICAgICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXdfbGluZSkge1xuICAgICAgICAgICAgICAgIGxpbmUgPSBPYmplY3QuYXNzaWduKHt9LCBuZXdfbGluZV90ZW1wbGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJzdCBpdGVyYXRlIG9uIHNwYWNlLWJyZWFrIGdyb3VwcyAod2lsbCBiZSBvbmUgaWYgbWF4IGxpbmUgbGVuZ3RoIG9mZiksIHRoZW4gaXRlcmF0ZSBvbiBsaW5lLWJyZWFrIGdyb3Vwc1xuICAgICAgICBmb3IgKGxldCB3PTA7IHcgPCB3b3Jkcy5sZW5ndGg7IHcrKykge1xuICAgICAgICAgICAgbGV0IGJyZWFrcyA9IHdvcmRzW3ddLnNwbGl0KCdcXG4nKTsgLy8gc3BsaXQgb24gbGluZSBicmVha3NcblxuICAgICAgICAgICAgZm9yIChsZXQgbj0wOyBuIDwgYnJlYWtzLmxlbmd0aDsgbisrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHdvcmQgPSBicmVha3Nbbl07XG5cbiAgICAgICAgICAgICAgICAvLyBpZiBhZGRpbmcgY3VycmVudCB3b3JkIHdvdWxkIG92ZXJmbG93LCBhZGQgYSBuZXcgbGluZSBpbnN0ZWFkXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuY2hhcnMgKyB3b3JkLmxlbmd0aCA+IHRleHRfd3JhcCAmJiBsaW5lLmNoYXJzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRMaW5lKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFkZCBjdXJyZW50IHdvcmQgKHBsdXMgc3BhY2UpXG4gICAgICAgICAgICAgICAgbGluZS5jaGFycyArPSB3b3JkLmxlbmd0aCArIDE7XG4gICAgICAgICAgICAgICAgbGluZS50ZXh0ICs9IHdvcmQgKyAnICc7XG5cbiAgICAgICAgICAgICAgICAvLyBpZiBsaW5lIGJyZWFrcyBwcmVzZW50LCBhZGQgbmV3IGxpbmUgKHVubGVzcyBvbiBsYXN0IGxpbmUpXG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrcy5sZW5ndGggPiAxICYmIG4gPCBicmVha3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhZGRMaW5lKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhZGRMaW5lKGZhbHNlKTtcblxuICAgICAgICAvLyBGaW5hbCBkaW1lbnNpb25zIG9mIHRleHRcbiAgICAgICAgbGV0IGhlaWdodCA9IGxpbmVzLmxlbmd0aCAqIGxpbmVfaGVpZ2h0O1xuXG4gICAgICAgIGxldCBjb2xsaXNpb25fc2l6ZSA9IFtcbiAgICAgICAgICAgIG1heF93aWR0aCAvIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbyxcbiAgICAgICAgICAgIGhlaWdodCAvIFV0aWxzLmRldmljZV9waXhlbF9yYXRpb1xuICAgICAgICBdO1xuXG4gICAgICAgIGxldCB0ZXh0dXJlX3NpemUgPSBbXG4gICAgICAgICAgICBtYXhfd2lkdGggKyBidWZmZXIgKiAyLFxuICAgICAgICAgICAgaGVpZ2h0ICsgYnVmZmVyICogMlxuICAgICAgICBdO1xuXG4gICAgICAgIGxldCBsb2dpY2FsX3NpemUgPSB0ZXh0dXJlX3NpemUubWFwKHYgPT4gdiAvIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbyk7XG5cbiAgICAgICAgLy8gUmV0dXJucyBsaW5lcyAody9wZXItbGluZSBpbmZvIGZvciBkcmF3aW5nKSBhbmQgdGV4dCdzIG92ZXJhbGwgYm91bmRpbmcgYm94ICsgY2FudmFzIHNpemVcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmVzLFxuICAgICAgICAgICAgc2l6ZTogeyBjb2xsaXNpb25fc2l6ZSwgdGV4dHVyZV9zaXplLCBsb2dpY2FsX3NpemUsIGxpbmVfaGVpZ2h0IH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBEcmF3IG9uZSBvciBtb3JlIGxpbmVzIG9mIHRleHQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uLCBhZGp1c3RpbmcgZm9yIGJ1ZmZlciBhbmQgYmFzZWxpbmVcbiAgICBkcmF3VGV4dCAobGluZXMsIFt4LCB5XSwgc2l6ZSwgeyBzdHJva2UsIHRyYW5zZm9ybSwgYWxpZ24gfSkge1xuICAgICAgICBhbGlnbiA9IGFsaWduIHx8ICdjZW50ZXInO1xuXG4gICAgICAgIGZvciAobGV0IGxpbmVfbnVtPTA7IGxpbmVfbnVtIDwgbGluZXMubGVuZ3RoOyBsaW5lX251bSsrKSB7XG4gICAgICAgICAgICBsZXQgbGluZSA9IGxpbmVzW2xpbmVfbnVtXTtcbiAgICAgICAgICAgIGxldCBzdHIgPSB0aGlzLmFwcGx5VGV4dFRyYW5zZm9ybShsaW5lLnRleHQsIHRyYW5zZm9ybSk7XG4gICAgICAgICAgICBsZXQgYnVmZmVyID0gdGhpcy50ZXh0X2J1ZmZlciAqIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbztcbiAgICAgICAgICAgIGxldCB0ZXh0dXJlX3NpemUgPSBzaXplLnRleHR1cmVfc2l6ZTtcbiAgICAgICAgICAgIGxldCBsaW5lX2hlaWdodCA9IHNpemUubGluZV9oZWlnaHQ7XG5cbiAgICAgICAgICAgIC8vIFRleHQgYWxpZ25tZW50XG4gICAgICAgICAgICBsZXQgdHg7XG4gICAgICAgICAgICBpZiAoYWxpZ24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgIHR4ID0geCArIGJ1ZmZlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICAgIHR4ID0geCArIHRleHR1cmVfc2l6ZVswXS8yIC0gbGluZS53aWR0aC8yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICB0eCA9IHggKyB0ZXh0dXJlX3NpemVbMF0gLSBsaW5lLndpZHRoIC0gYnVmZmVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJbiB0aGUgYWJzZW5jZSBvZiBiZXR0ZXIgQ2FudmFzIFRleHRNZXRyaWNzIChub3Qgc3VwcG9ydGVkIGJ5IGJyb3dzZXJzIHlldCksXG4gICAgICAgICAgICAvLyAwLjc1IGJ1ZmZlciBwcm9kdWNlcyBhIGJldHRlciBhcHByb3hpbWF0ZSB2ZXJ0aWNhbCBjZW50ZXJpbmcgb2YgdGV4dFxuICAgICAgICAgICAgbGV0IHR5ID0geSArIGJ1ZmZlciAqIDAuNzUgKyAobGluZV9udW0gKyAxKSAqIGxpbmVfaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoc3Ryb2tlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVRleHQoc3RyLCB0eCwgdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KHN0ciwgdHgsIHR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJhc3Rlcml6ZSAodGV4dHMsIHRleHR1cmVfc2l6ZSkge1xuICAgICAgICBmb3IgKGxldCBzdHlsZSBpbiB0ZXh0cykge1xuICAgICAgICAgICAgbGV0IHRleHRfaW5mb3MgPSB0ZXh0c1tzdHlsZV07XG5cbiAgICAgICAgICAgIGZvciAobGV0IHRleHQgaW4gdGV4dF9pbmZvcykge1xuICAgICAgICAgICAgICAgIGxldCBpbmZvID0gdGV4dF9pbmZvc1t0ZXh0XTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9udChpbmZvLnRleHRfc2V0dGluZ3MpOyAvLyBUT0RPOiBvbmx5IHNldCBvbmNlIGFib3ZlXG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3VGV4dChpbmZvLmxpbmVzLCBpbmZvLnBvc2l0aW9uLCBpbmZvLnNpemUsIHtcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBpbmZvLnRleHRfc2V0dGluZ3Muc3Ryb2tlLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IGluZm8udGV4dF9zZXR0aW5ncy50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICAgIGFsaWduOiBpbmZvLnRleHRfc2V0dGluZ3MuYWxpZ25cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGluZm8udGV4Y29vcmRzID0gVGV4dHVyZS5nZXRUZXhjb29yZHNGb3JTcHJpdGUoXG4gICAgICAgICAgICAgICAgICAgIGluZm8ucG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGluZm8uc2l6ZS50ZXh0dXJlX3NpemUsXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmVfc2l6ZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQbGFjZSB0ZXh0IGxhYmVscyB3aXRoaW4gYW4gYXRsYXMgb2YgdGhlIGdpdmVuIG1heCBzaXplXG4gICAgc2V0VGV4dHVyZVRleHRQb3NpdGlvbnMgKHRleHRzLCBtYXhfdGV4dHVyZV9zaXplKSB7XG4gICAgICAgIC8vIEZpbmQgd2lkZXN0IGxhYmVsXG4gICAgICAgIGxldCB3aWRlc3QgPSAwO1xuICAgICAgICBmb3IgKGxldCBzdHlsZSBpbiB0ZXh0cykge1xuICAgICAgICAgICAgbGV0IHRleHRfaW5mb3MgPSB0ZXh0c1tzdHlsZV07XG4gICAgICAgICAgICBmb3IgKGxldCB0ZXh0IGluIHRleHRfaW5mb3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2l6ZSA9IHRleHRfaW5mb3NbdGV4dF0uc2l6ZS50ZXh0dXJlX3NpemU7XG4gICAgICAgICAgICAgICAgaWYgKHNpemVbMF0gPiB3aWRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkZXN0ID0gc2l6ZVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMYXlvdXQgbGFiZWxzLCBzdGFja2VkIGluIGNvbHVtbnNcbiAgICAgICAgbGV0IGN4ID0gMCwgY3kgPSAwOyAvLyBjdXJyZW50IHgveSBwb3NpdGlvbiBpbiBhdGxhc1xuICAgICAgICBsZXQgaGVpZ2h0ID0gMDsgICAgIC8vIG92ZXJhbGwgYXRsYXMgaGVpZ2h0XG4gICAgICAgIGZvciAobGV0IHN0eWxlIGluIHRleHRzKSB7XG4gICAgICAgICAgICBsZXQgdGV4dF9pbmZvcyA9IHRleHRzW3N0eWxlXTtcbiAgICAgICAgICAgIGZvciAobGV0IHRleHQgaW4gdGV4dF9pbmZvcykge1xuICAgICAgICAgICAgICAgIGxldCB0ZXh0X2luZm8gPSB0ZXh0X2luZm9zW3RleHRdO1xuICAgICAgICAgICAgICAgIGxldCBzaXplID0gdGV4dF9pbmZvLnNpemUudGV4dHVyZV9zaXplO1xuICAgICAgICAgICAgICAgIGlmIChjeSArIHNpemVbMV0gPCBtYXhfdGV4dHVyZV9zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRfaW5mby5wb3NpdGlvbiA9IFtjeCwgY3ldOyAvLyBhZGQgbGFiZWwgdG8gY3VycmVudCBjb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgY3kgKz0gc2l6ZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN5ID4gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBjeTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gc3RhcnQgbmV3IGNvbHVtbiBpZiB0YWxsZXIgdGhhbiB0ZXh0dXJlXG4gICAgICAgICAgICAgICAgICAgIGN4ICs9IHdpZGVzdDtcbiAgICAgICAgICAgICAgICAgICAgY3kgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0X2luZm8ucG9zaXRpb24gPSBbY3gsIGN5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2N4ICsgd2lkZXN0LCBoZWlnaHRdOyAvLyBvdmVyYWxsIGF0bGFzIHNpemVcbiAgICB9XG5cbiAgICAvLyBDYWxsZWQgYmVmb3JlIHJhc3Rlcml6YXRpb25cbiAgICBhcHBseVRleHRUcmFuc2Zvcm0gKHRleHQsIHRyYW5zZm9ybSkge1xuICAgICAgICBpZiAodHJhbnNmb3JtID09PSAnY2FwaXRhbGl6ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xcd1xcUyovZywgZnVuY3Rpb24gKHR4dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0cmFuc2Zvcm0gPT09ICd1cHBlcmNhc2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybSA9PT0gJ2xvd2VyY2FzZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBmb250IENTUy1zdHlsZSBzaXplICgnMTJweCcsICcxNHB0JywgJzEuNWVtJywgZXRjLikgdG8gcGl4ZWwgc2l6ZSAoYWRqdXN0ZWQgZm9yIGRldmljZSBwaXhlbCByYXRpbylcbiAgICAvLyBEZWZhdWx0cyB1bml0cyB0byBwaXhlbHMgaWYgbm90IHNwZWNpZmllZFxuICAgIHN0YXRpYyBmb250UGl4ZWxTaXplIChzaXplKSB7XG4gICAgICAgIGlmIChzaXplID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzaXplID0gKHR5cGVvZiBzaXplID09PSAnc3RyaW5nJykgPyBzaXplIDogU3RyaW5nKHNpemUpOyAvLyBuZWVkIGEgc3RyaW5nIGZvciByZWdleFxuXG4gICAgICAgIGxldCBbLCBweF9zaXplLCB1bml0c10gPSBzaXplLm1hdGNoKENhbnZhc1RleHQuZm9udF9zaXplX3JlKSB8fCBbXTtcbiAgICAgICAgdW5pdHMgPSB1bml0cyB8fCAncHgnO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gXCJlbVwiKSB7XG4gICAgICAgICAgICBweF9zaXplICo9IDE2O1xuICAgICAgICB9IGVsc2UgaWYgKHVuaXRzID09PSBcInB0XCIpIHtcbiAgICAgICAgICAgIHB4X3NpemUgLz0gMC43NTtcbiAgICAgICAgfSBlbHNlIGlmICh1bml0cyA9PT0gXCIlXCIpIHtcbiAgICAgICAgICAgIHB4X3NpemUgLz0gNi4yNTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4X3NpemUgPSBwYXJzZUZsb2F0KHB4X3NpemUpO1xuICAgICAgICBweF9zaXplICo9IFV0aWxzLmRldmljZV9waXhlbF9yYXRpbztcbiAgICAgICAgcmV0dXJuIHB4X3NpemU7XG4gICAgfVxuXG59XG5cbi8vIEV4dHJhY3QgZm9udCBzaXplIGFuZCB1bml0c1xuQ2FudmFzVGV4dC5mb250X3NpemVfcmUgPSAvKCg/OlswLTldKlxcLik/WzAtOV0rKVxccyoocHh8cHR8ZW18JSk/LztcbiIsIi8vIFRleHQgcmVuZGVyaW5nIHN0eWxlXG5cbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uLy4uL2dsL3RleHR1cmUnO1xuaW1wb3J0IFdvcmtlckJyb2tlciBmcm9tICcuLi8uLi91dGlscy93b3JrZXJfYnJva2VyJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgR2VvIGZyb20gJy4uLy4uL2dlbyc7XG5pbXBvcnQge1N0eWxlfSBmcm9tICcuLi9zdHlsZSc7XG5pbXBvcnQge1BvaW50c30gZnJvbSAnLi4vcG9pbnRzL3BvaW50cyc7XG5pbXBvcnQgQ2FudmFzVGV4dCBmcm9tICcuL2NhbnZhc190ZXh0JztcbmltcG9ydCBDb2xsaXNpb24gZnJvbSAnLi4vLi4vbGFiZWxzL2NvbGxpc2lvbic7XG5pbXBvcnQgTGFiZWxQb2ludCBmcm9tICcuLi8uLi9sYWJlbHMvbGFiZWxfcG9pbnQnO1xuaW1wb3J0IExhYmVsTGluZSBmcm9tICcuLi8uLi9sYWJlbHMvbGFiZWxfbGluZSc7XG5pbXBvcnQgVGV4dFNldHRpbmdzIGZyb20gJy4vdGV4dF9zZXR0aW5ncyc7XG5pbXBvcnQge1N0eWxlUGFyc2VyfSBmcm9tICcuLi9zdHlsZV9wYXJzZXInO1xuXG5pbXBvcnQgbG9nIGZyb20gJ2xvZ2xldmVsJztcblxuZXhwb3J0IGxldCBUZXh0U3R5bGUgPSBPYmplY3QuY3JlYXRlKFBvaW50cyk7XG5cbk9iamVjdC5hc3NpZ24oVGV4dFN0eWxlLCB7XG4gICAgbmFtZTogJ3RleHQnLFxuICAgIHN1cGVyOiBQb2ludHMsXG4gICAgYnVpbHRfaW46IHRydWUsXG4gICAgc2VsZWN0aW9uOiBmYWxzZSwgLy8gbm8gZmVhdHVyZSBzZWxlY3Rpb24gZm9yIHRleHQgYnkgZGVmYXVsdFxuXG4gICAgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdXBlci5pbml0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgLy8gUG9pbnQgc3R5bGUgKHBhcmVudCBjbGFzcykgcmVxdWlyZXMgdGV4dHVyaW5nIHRvIGJlIHR1cm5lZCBvblxuICAgICAgICAvLyAobGFiZWxzIGFyZSBhbHdheXMgZHJhd24gd2l0aCB0ZXh0dXJlcylcbiAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fUE9JTlRfVEVYVFVSRSA9IHRydWU7XG5cbiAgICAgICAgLy8gTWFudWFsbHkgdW4tbXVsdGlwbHkgYWxwaGEsIGJlY2F1c2UgQ2FudmFzIHRleHQgcmFzdGVyaXphdGlvbiBpcyBwcmUtbXVsdGlwbGllZFxuICAgICAgICB0aGlzLmRlZmluZXMuVEFOR1JBTV9VTk1VTFRJUExZX0FMUEhBID0gdHJ1ZTtcblxuICAgICAgICAvLyBGYWRlIG91dCB0ZXh0IHdoZW4gdGlsZSBpcyB6b29taW5nIG91dCwgZS5nLiBhY3RpbmcgYXMgcHJveHkgdGlsZXNcbiAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fRkFERV9PTl9aT09NX09VVCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVmaW5lcy5UQU5HUkFNX0ZBREVfT05fWk9PTV9PVVRfUkFURSA9IDI7IC8vIGZhZGUgYXQgMngsIGUuZy4gZnVsbHkgdHJhbnNwYXJlbnQgYXQgMC41IHpvb20gbGV2ZWwgYXdheVxuXG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9LFxuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuc3VwZXIucmVzZXQuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKFV0aWxzLmlzTWFpblRocmVhZCkge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBuZXcgQ2FudmFzVGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzV29ya2VyVGhyZWFkKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRzID0ge307IC8vIHVuaXF1ZSB0ZXh0cywgZ3JvdXBlZCBieSB0aWxlLCBieSBzdHlsZVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIENhbGxlZCBvbiB3b3JrZXIgdGhyZWFkIHRvIHJlbGVhc2UgdGlsZS1zcGVjaWZpYyByZXNvdXJjZXNcbiAgICBmcmVlVGlsZSAodGlsZSkge1xuICAgICAgICBkZWxldGUgdGhpcy50ZXh0c1t0aWxlLmtleV07XG4gICAgfSxcblxuICAgIC8vIEZyZWUgdGlsZS1zcGVjaWZpYyByZXNvdXJjZXMgYmVmb3JlIGZpbnNoaW5nIHN0eWxlIGNvbnN0cnVjdGlvblxuICAgIGZpbmlzaFRpbGUodGlsZSkge1xuICAgICAgICB0aGlzLmZyZWVUaWxlKHRpbGUpO1xuICAgICAgICByZXR1cm4gU3R5bGUuZW5kRGF0YS5jYWxsKHRoaXMsIHRpbGUpO1xuICAgIH0sXG5cbiAgICAvLyBPdmVycmlkZSB0byBxdWV1ZSBmZWF0dXJlcyBpbnN0ZWFkIG9mIHByb2Nlc3NpbmcgaW1tZWRpYXRlbHlcbiAgICBhZGRGZWF0dXJlIChmZWF0dXJlLCBkcmF3LCBjb250ZXh0KSB7XG4gICAgICAgIGxldCB0aWxlID0gY29udGV4dC50aWxlO1xuICAgICAgICBpZiAodGlsZS5nZW5lcmF0aW9uICE9PSB0aGlzLmdlbmVyYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhbGxlZCBoZXJlIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGVsYXllZCB1bnRpbCB0aGUgZmVhdHVyZSBxdWV1ZSBpcyBwYXJzZWQsXG4gICAgICAgIC8vIGFuZCB3ZSB3YW50IHRoZSBwcmVwcm9jZXNzaW5nIGRvbmUgYmVmb3JlIHdlIGV2YWx1YXRlIHRleHQgc3R5bGUgYmVsb3dcbiAgICAgICAgZHJhdyA9IHRoaXMucHJlcHJvY2VzcyhkcmF3KTtcbiAgICAgICAgaWYgKCFkcmF3KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb21wdXRlIGxhYmVsIHRleHRcbiAgICAgICAgbGV0IHRleHQgPSB0aGlzLnBhcnNlVGV4dFNvdXJjZShmZWF0dXJlLCBkcmF3LCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBubyB0ZXh0IGZvciB0aGlzIGZlYXR1cmVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbXB1dGUgdGV4dCBzdHlsZSBhbmQgbGF5b3V0IHNldHRpbmdzIGZvciB0aGlzIGZlYXR1cmUgbGFiZWxcbiAgICAgICAgbGV0IGxheW91dCA9IHRoaXMuY29tcHV0ZUxheW91dCh7fSwgZmVhdHVyZSwgZHJhdywgY29udGV4dCwgdGlsZSwgdGV4dCk7XG4gICAgICAgIGxldCB0ZXh0X3NldHRpbmdzID0gVGV4dFNldHRpbmdzLmNvbXB1dGUoZmVhdHVyZSwgZHJhdywgY29udGV4dCk7XG4gICAgICAgIGxldCB0ZXh0X3NldHRpbmdzX2tleSA9IFRleHRTZXR0aW5ncy5rZXkodGV4dF9zZXR0aW5ncyk7XG5cbiAgICAgICAgLy8gZmlyc3QgbGFiZWwgaW4gdGlsZSwgb3Igd2l0aCB0aGlzIHN0eWxlP1xuICAgICAgICB0aGlzLnRleHRzW3RpbGUua2V5XSA9IHRoaXMudGV4dHNbdGlsZS5rZXldIHx8IHt9O1xuICAgICAgICB0aGlzLnRleHRzW3RpbGUua2V5XVt0ZXh0X3NldHRpbmdzX2tleV0gPSB0aGlzLnRleHRzW3RpbGUua2V5XVt0ZXh0X3NldHRpbmdzX2tleV0gfHwge307XG5cbiAgICAgICAgLy8gdW5pcXVlIHRleHQgc3RyaW5ncywgZ3JvdXBlZCBieSB0ZXh0IGRyYXdpbmcgc3R5bGVcbiAgICAgICAgaWYgKCF0aGlzLnRleHRzW3RpbGUua2V5XVt0ZXh0X3NldHRpbmdzX2tleV1bdGV4dF0pIHtcbiAgICAgICAgICAgIC8vIGZpcnN0IGxhYmVsIHdpdGggdGhpcyB0ZXh0L3N0eWxlL3RpbGUgY29tYmluYXRpb24sIG1ha2UgYSBuZXcgbGFiZWwgZW50cnlcbiAgICAgICAgICAgIHRoaXMudGV4dHNbdGlsZS5rZXldW3RleHRfc2V0dGluZ3Nfa2V5XVt0ZXh0XSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0X3NldHRpbmdzLFxuICAgICAgICAgICAgICAgIHJlZjogMCAvLyAjIG9mIHRpbWVzIHRoaXMgdGV4dC9zdHlsZSBjb21ibyBhcHBlYXJzIGluIHRpbGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBRdWV1ZSB0aGUgZmVhdHVyZSBmb3IgcHJvY2Vzc2luZ1xuICAgICAgICBpZiAoIXRoaXMudGlsZV9kYXRhW3RpbGUua2V5XSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydERhdGEodGlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucXVldWVzW3RpbGUua2V5XSkge1xuICAgICAgICAgICAgdGhpcy5xdWV1ZXNbdGlsZS5rZXldID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXVlc1t0aWxlLmtleV0ucHVzaCh7XG4gICAgICAgICAgICBmZWF0dXJlLCBkcmF3LCBjb250ZXh0LFxuICAgICAgICAgICAgdGV4dCwgdGV4dF9zZXR0aW5nc19rZXksIGxheW91dFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWdpc3RlciB3aXRoIGNvbGxpc2lvbiBtYW5hZ2VyXG4gICAgICAgIENvbGxpc2lvbi5hZGRTdHlsZSh0aGlzLm5hbWUsIHRpbGUua2V5KTtcbiAgICB9LFxuXG4gICAgLy8gT3ZlcnJpZGVcbiAgICBlbmREYXRhICh0aWxlKSB7XG4gICAgICAgIGxldCBxdWV1ZSA9IHRoaXMucXVldWVzW3RpbGUua2V5XTtcbiAgICAgICAgdGhpcy5xdWV1ZXNbdGlsZS5rZXldID0gW107XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudGV4dHNbdGlsZS5rZXldfHx7fSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaXJzdCBjYWxsIHRvIG1haW4gdGhyZWFkLCBhc2sgZm9yIHRleHQgcGl4ZWwgc2l6ZXNcbiAgICAgICAgcmV0dXJuIFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh0aGlzLm1haW5fdGhyZWFkX3RhcmdldCsnLmNhbGNUZXh0U2l6ZXMnLCB0aGlzLnRleHRzW3RpbGUua2V5XSkudGhlbih0ZXh0cyA9PiB7XG4gICAgICAgICAgICBpZiAodGlsZS5jYW5jZWxlZCkge1xuICAgICAgICAgICAgICAgIFV0aWxzLmxvZygndHJhY2UnLCBgU3R5bGUgJHt0aGlzLm5hbWV9OiBzdG9wIHRpbGUgYnVpbGQgYmVjYXVzZSB0aWxlIHdhcyBjYW5jZWxlZDogJHt0aWxlLmtleX0sIHBvc3QtY2FsY1RleHRTaXplcygpYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRleHRzKSB7XG4gICAgICAgICAgICAgICAgQ29sbGlzaW9uLmNvbGxpZGUoe30sIHRoaXMubmFtZSwgdGlsZS5rZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRpbGUodGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRleHRzW3RpbGUua2V5XSA9IHRleHRzO1xuXG4gICAgICAgICAgICBsZXQgbGFiZWxzID0gdGhpcy5jcmVhdGVMYWJlbHModGlsZS5rZXksIHF1ZXVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIENvbGxpc2lvbi5jb2xsaWRlKGxhYmVscywgdGhpcy5uYW1lLCB0aWxlLmtleSkudGhlbihsYWJlbHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aWxlLmNhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLmxvZygndHJhY2UnLCBgc3RvcCB0aWxlIGJ1aWxkIGJlY2F1c2UgdGlsZSB3YXMgY2FuY2VsZWQ6ICR7dGlsZS5rZXl9LCBwb3N0LWNvbGxpZGUoKWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGxhYmVscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVGlsZSh0aWxlKTsgLy8gbm8gbGFiZWxzIHZpc2libGUgZm9yIHRoaXMgdGlsZVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY3VsbFRleHRTdHlsZXModGV4dHMsIGxhYmVscyk7XG5cbiAgICAgICAgICAgICAgICAvLyBzZWNvbmQgY2FsbCB0byBtYWluIHRocmVhZCwgZm9yIHJhc3Rlcml6aW5nIHRoZSBzZXQgb2YgdGV4dHNcbiAgICAgICAgICAgICAgICByZXR1cm4gV29ya2VyQnJva2VyLnBvc3RNZXNzYWdlKHRoaXMubWFpbl90aHJlYWRfdGFyZ2V0KycucmFzdGVyaXplVGV4dHMnLCB0aWxlLmtleSwgdGV4dHMpLnRoZW4oKHsgdGV4dHMsIHRleHR1cmUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dHNbdGlsZS5rZXldID0gdGV4dHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIHF1ZXVlZCBmZWF0dXJlc1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHRfc2V0dGluZ3Nfa2V5ID0gcS50ZXh0X3NldHRpbmdzX2tleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dF9pbmZvID0gdGhpcy50ZXh0c1t0aWxlLmtleV0gJiYgdGhpcy50ZXh0c1t0aWxlLmtleV1bdGV4dF9zZXR0aW5nc19rZXldICYmIHRoaXMudGV4dHNbdGlsZS5rZXldW3RleHRfc2V0dGluZ3Nfa2V5XVtxLnRleHRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0dXAgc3R5bGluZyBvYmplY3QgZXhwZWN0ZWQgYnkgU3R5bGUgY2xhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3R5bGUgPSB0aGlzLmZlYXR1cmVfc3R5bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUubGFiZWwgPSBxLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnNpemUgPSB0ZXh0X2luZm8uc2l6ZS5sb2dpY2FsX3NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuYW5nbGUgPSBVdGlscy5yYWRUb0RlZyhxLmxhYmVsLmFuZ2xlKSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnRleGNvb3JkcyA9IHRleHRfaW5mby50ZXhjb29yZHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZS5hZGRGZWF0dXJlLmNhbGwodGhpcywgcS5mZWF0dXJlLCBxLmRyYXcsIHEuY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRpbGUodGlsZSkudGhlbih0aWxlX2RhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXR0YWNoIHRpbGUtc3BlY2lmaWMgbGFiZWwgYXRsYXMgdG8gbWVzaCBhcyBhIHRleHR1cmUgdW5pZm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUgJiYgdGlsZV9kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZV9kYXRhLnVuaWZvcm1zLnVfdGV4dHVyZSA9IHRleHR1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZV9kYXRhLnRleHR1cmVzLnB1c2godGV4dHVyZSk7IC8vIGFzc2lnbiB0ZXh0dXJlIG93bmVyc2hpcCB0byB0aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbGVfZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGNyZWF0ZUxhYmVscyAodGlsZV9rZXksIGZlYXR1cmVfcXVldWUpIHtcbiAgICAgICAgbGV0IGxhYmVscyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGY9MDsgZiA8IGZlYXR1cmVfcXVldWUubGVuZ3RoOyBmKyspIHtcbiAgICAgICAgICAgIGxldCB7IGZlYXR1cmUsIGRyYXcsIGNvbnRleHQsIHRleHQsIHRleHRfc2V0dGluZ3Nfa2V5LCBsYXlvdXQgfSA9IGZlYXR1cmVfcXVldWVbZl07XG4gICAgICAgICAgICBsZXQgdGV4dF9pbmZvID0gdGhpcy50ZXh0c1t0aWxlX2tleV1bdGV4dF9zZXR0aW5nc19rZXldW3RleHRdO1xuXG4gICAgICAgICAgICBsZXQgZmVhdHVyZV9sYWJlbHMgPSB0aGlzLmJ1aWxkTGFiZWxzRnJvbUdlb21ldHJ5KHRleHRfaW5mby5zaXplLmNvbGxpc2lvbl9zaXplLCBmZWF0dXJlLmdlb21ldHJ5LCBsYXlvdXQpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmZWF0dXJlX2xhYmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBsYWJlbCA9IGZlYXR1cmVfbGFiZWxzW2ldO1xuICAgICAgICAgICAgICAgIGxhYmVscy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSwgZHJhdywgY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dCwgdGV4dF9zZXR0aW5nc19rZXksIGxheW91dCwgbGFiZWxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSB1bnVzZWQgdGV4dC9zdHlsZSBjb21iaW5hdGlvbnMgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmFzdGVyaXphdGlvblxuICAgIGN1bGxUZXh0U3R5bGVzKHRleHRzLCBsYWJlbHMpIHtcbiAgICAgICAgLy8gQ291bnQgaG93IG1hbnkgdGltZXMgZWFjaCB0ZXh0L3N0eWxlIGNvbWJpbmF0aW9uIGlzIHVzZWRcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0ZXh0c1tsYWJlbHNbaV0udGV4dF9zZXR0aW5nc19rZXldW2xhYmVsc1tpXS50ZXh0XS5yZWYrKztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0ZXh0L3N0eWxlIGNvbWJpbmF0aW9ucyB0aGF0IGhhdmUgbm8gdmlzaWJsZSBsYWJlbHNcbiAgICAgICAgZm9yIChsZXQgc3R5bGUgaW4gdGV4dHMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHRleHQgaW4gdGV4dHNbc3R5bGVdKSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gbGFiZWxzIGZvciB0aGlzIHRleHRcbiAgICAgICAgICAgICAgICBpZiAodGV4dHNbc3R5bGVdW3RleHRdLnJlZiA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYGRyb3AgbGFiZWwgdGV4dCAke3RleHR9IGluIHN0eWxlICR7c3R5bGV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0ZXh0c1tzdHlsZV1bdGV4dF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgc3R5bGUgaW4gdGV4dHMpIHtcbiAgICAgICAgICAgIC8vIG5vIGxhYmVscyBmb3IgdGhpcyBzdHlsZVxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRleHRzW3N0eWxlXSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYGRyb3AgbGFiZWwgdGV4dCBzdHlsZSAke3N0eWxlfWApO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0ZXh0c1tzdHlsZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2FsbGVkIG9uIG1haW4gdGhyZWFkIGZyb20gd29ya2VyLCB0byBjb21wdXRlIHRoZSBzaXplIG9mIGVhY2ggdGV4dCBzdHJpbmcsXG4gICAgLy8gd2VyZSBpdCB0byBiZSByZW5kZXJlZC4gVGhpcyBpbmZvIGlzIHRoZW4gdXNlZCB0byBwZXJmb3JtIGluaXRpYWwgbGFiZWwgY3VsbGluZywgKmJlZm9yZSpcbiAgICAvLyBsYWJlbHMgYXJlIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgIGNhbGNUZXh0U2l6ZXMgKHRleHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbnZhcy50ZXh0U2l6ZXModGV4dHMpO1xuICAgIH0sXG5cbiAgICAvLyBDYWxsZWQgb24gbWFpbiB0aHJlYWQgZnJvbSB3b3JrZXIsIHRvIGNyZWF0ZSBhdGxhcyBvZiBsYWJlbHMgZm9yIGEgdGlsZVxuICAgIHJhc3Rlcml6ZVRleHRzICh0aWxlX2tleSwgdGV4dHMpIHtcbiAgICAgICAgbGV0IGNhbnZhcyA9IG5ldyBDYW52YXNUZXh0KCk7XG4gICAgICAgIGxldCB0ZXh0dXJlX3NpemUgPSBjYW52YXMuc2V0VGV4dHVyZVRleHRQb3NpdGlvbnModGV4dHMsIHRoaXMubWF4X3RleHR1cmVfc2l6ZSk7XG4gICAgICAgIGxvZy50cmFjZShgdGV4dCBzdW1tYXJ5IGZvciB0aWxlICR7dGlsZV9rZXl9OiBmaXRzIGluICR7dGV4dHVyZV9zaXplWzBdfXgke3RleHR1cmVfc2l6ZVsxXX1weGApO1xuXG4gICAgICAgIC8vIGZpdHMgaW4gbWF4IHRleHR1cmUgc2l6ZT9cbiAgICAgICAgaWYgKHRleHR1cmVfc2l6ZVswXSA8IHRoaXMubWF4X3RleHR1cmVfc2l6ZSAmJiB0ZXh0dXJlX3NpemVbMV0gPCB0aGlzLm1heF90ZXh0dXJlX3NpemUpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjYW52YXMgc2l6ZSAmIHJhc3Rlcml6ZSBhbGwgdGhlIHRleHQgc3RyaW5ncyB3ZSBuZWVkXG4gICAgICAgICAgICBjYW52YXMucmVzaXplKC4uLnRleHR1cmVfc2l6ZSk7XG4gICAgICAgICAgICBjYW52YXMucmFzdGVyaXplKHRleHRzLCB0ZXh0dXJlX3NpemUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbG9nLmVycm9yKFtcbiAgICAgICAgICAgICAgICBgTGFiZWwgYXRsYXMgZm9yIHRpbGUgJHt0aWxlX2tleX0gaXMgJHt0ZXh0dXJlX3NpemVbMF19eCR7dGV4dHVyZV9zaXplWzFdfXB4LCBgLFxuICAgICAgICAgICAgICAgIGBidXQgbWF4IEdMIHRleHR1cmUgc2l6ZSBpcyAke3RoaXMubWF4X3RleHR1cmVfc2l6ZX14JHt0aGlzLm1heF90ZXh0dXJlX3NpemV9cHhgXS5qb2luKCcnKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlXG4gICAgICAgIGxldCB0ID0gJ2xhYmVscy0nICsgdGlsZV9rZXkgKyAnLScgKyAoVGV4dFN0eWxlLnRleHR1cmVfaWQrKyk7XG4gICAgICAgIFRleHR1cmUuY3JlYXRlKHRoaXMuZ2wsIHQsIHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGNhbnZhcy5jYW52YXMsXG4gICAgICAgICAgICBmaWx0ZXJpbmc6ICdsaW5lYXInLFxuICAgICAgICAgICAgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBUZXh0dXJlLnJldGFpbih0KTtcblxuICAgICAgICByZXR1cm4geyB0ZXh0cywgdGV4dHVyZTogdCB9OyAvLyB0ZXh0dXJlIGlzIHJldHVybmVkIGJ5IG5hbWUgKG5vdCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgLy8gU2V0cyB1cCBjYWNoaW5nIGZvciBkcmF3IHJ1bGUgcHJvcGVydGllc1xuICAgIF9wcmVwcm9jZXNzIChkcmF3KSB7XG4gICAgICAgIGlmICghZHJhdy5mb250KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb2xvcnNcbiAgICAgICAgZHJhdy5mb250LmZpbGwgPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3LmZvbnQuZmlsbCk7XG4gICAgICAgIGlmIChkcmF3LmZvbnQuc3Ryb2tlKSB7XG4gICAgICAgICAgICBkcmF3LmZvbnQuc3Ryb2tlLmNvbG9yID0gU3R5bGVQYXJzZXIuY2FjaGVPYmplY3QoZHJhdy5mb250LnN0cm9rZS5jb2xvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb252ZXJ0IGZvbnQgYW5kIHRleHQgc3Ryb2tlIHNpemVzXG4gICAgICAgIGRyYXcuZm9udC5weF9zaXplID0gU3R5bGVQYXJzZXIuY2FjaGVPYmplY3QoZHJhdy5mb250LnNpemUsIENhbnZhc1RleHQuZm9udFBpeGVsU2l6ZSk7XG4gICAgICAgIGlmIChkcmF3LmZvbnQuc3Ryb2tlICYmIGRyYXcuZm9udC5zdHJva2Uud2lkdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgZHJhdy5mb250LnN0cm9rZS53aWR0aCA9IFN0eWxlUGFyc2VyLmNhY2hlT2JqZWN0KGRyYXcuZm9udC5zdHJva2Uud2lkdGgsIHBhcnNlRmxvYXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT2Zmc2V0ICgyZCBhcnJheSlcbiAgICAgICAgZHJhdy5vZmZzZXQgPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3Lm9mZnNldCwgdiA9PiAoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lm1hcChwYXJzZUZsb2F0KSkgfHwgMCk7XG5cbiAgICAgICAgLy8gQnVmZmVyICgxZCB2YWx1ZSBvciBvciAyZCBhcnJheSlcbiAgICAgICAgZHJhdy5idWZmZXIgPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3LmJ1ZmZlciwgdiA9PiAoQXJyYXkuaXNBcnJheSh2KSA/IHYgOiBbdiwgdl0pLm1hcChwYXJzZUZsb2F0KSB8fCAwKTtcblxuICAgICAgICAvLyBSZXBlYXQgcnVsZXNcbiAgICAgICAgZHJhdy5yZXBlYXRfZGlzdGFuY2UgPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3LnJlcGVhdF9kaXN0YW5jZSwgcGFyc2VGbG9hdCk7XG5cbiAgICAgICAgcmV0dXJuIGRyYXc7XG4gICAgfSxcblxuICAgIC8vIENvbXB1dGUgdGhlIGxhYmVsIHRleHQsIGRlZmF1bHQgaXMgdmFsdWUgb2YgZmVhdHVyZS5wcm9wZXJ0aWVzLm5hbWVcbiAgICAvLyAtIFN0cmluZyB2YWx1ZSBpbmRpY2F0ZXMgYSBmZWF0dXJlIHByb3BlcnR5IGxvb2stdXAsIGUuZy4gYHNob3J0X25hbWVgIG1lYW5zIHVzZSBmZWF0dXJlLnByb3BlcnRpZXMuc2hvcnRfbmFtZVxuICAgIC8vIC0gRnVuY3Rpb24gd2lsbCB1c2UgdGhlIHJldHVybiB2YWx1ZSBhcyB0aGUgbGFiZWwgdGV4dCAoZm9yIGN1c3RvbSBsYWJlbHMpXG4gICAgLy8gLSBBcnJheSAob2Ygc3RyaW5ncyBhbmQvb3IgZnVuY3Rpb25zKSBkZWZpbmVzIGEgbGlzdCBvZiBmYWxsYmFja3MsIGV2YWx1YXRlZCBhY2NvcmRpbmcgdG8gdGhlIGFib3ZlIHJ1bGVzLFxuICAgIC8vICAgd2l0aCB0aGUgZmlyc3Qgbm9uLW51bGwgdmFsdWUgdXNlZCBhcyB0aGUgbGFiZWwgdGV4dFxuICAgIC8vICAgZS5nLiBgW25hbWU6ZXMsIG5hbWU6ZW4sIG5hbWVdYCBwcmVmZXJzIFNwYW5pc2ggbmFtZXMsIGZvbGxvd2VkIGJ5IEVuZ2xpc2gsIGFuZCBsYXN0IHRoZSBkZWZhdWx0IGxvY2FsIG5hbWVcbiAgICBwYXJzZVRleHRTb3VyY2UgKGZlYXR1cmUsIGRyYXcsIGNvbnRleHQpIHtcbiAgICAgICAgbGV0IHRleHQ7XG4gICAgICAgIGxldCBzb3VyY2UgPSBkcmF3LnRleHRfc291cmNlIHx8ICduYW1lJztcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBzPTA7IHMgPCBzb3VyY2UubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVtzXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGZlYXR1cmUucHJvcGVydGllc1tzb3VyY2Vbc11dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNvdXJjZVtzXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc291cmNlW3NdKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBzdG9wIGlmIHdlIGZvdW5kIGEgdGV4dCBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGV4dCA9IGZlYXR1cmUucHJvcGVydGllc1tzb3VyY2VdO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRleHQgPSBzb3VyY2UoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfSxcblxuICAgIC8vIEFkZGl0aW9uYWwgdGV4dC1zcGVjaWZpYyBsYXlvdXQgc2V0dGluZ3NcbiAgICBjb21wdXRlTGF5b3V0ICh0YXJnZXQsIGZlYXR1cmUsIGRyYXcsIGNvbnRleHQsIHRpbGUsIHRleHQpIHtcbiAgICAgICAgbGV0IGxheW91dCA9IHRhcmdldCB8fCB7fTtcblxuICAgICAgICAvLyBjb21tb24gc2V0dGluZ3Mgdy9wb2ludHNcbiAgICAgICAgbGF5b3V0ID0gUG9pbnRzLmNvbXB1dGVMYXlvdXQobGF5b3V0LCBmZWF0dXJlLCBkcmF3LCBjb250ZXh0LCB0aWxlKTtcblxuICAgICAgICAvLyB0aWxlIGJvdW5kYXJ5IGhhbmRsaW5nXG4gICAgICAgIGxheW91dC5jdWxsX2Zyb21fdGlsZSA9IChkcmF3LmN1bGxfZnJvbV90aWxlICE9IG51bGwpID8gZHJhdy5jdWxsX2Zyb21fdGlsZSA6IHRydWU7XG4gICAgICAgIGxheW91dC5tb3ZlX2ludG9fdGlsZSA9IChkcmF3Lm1vdmVfaW50b190aWxlICE9IG51bGwpID8gZHJhdy5tb3ZlX2ludG9fdGlsZSA6IHRydWU7XG5cbiAgICAgICAgLy8gbGFiZWwgbGluZSBleGNlZWQgcGVyY2VudGFnZVxuICAgICAgICBpZiAoZHJhdy5saW5lX2V4Y2VlZCAmJiBkcmF3LmxpbmVfZXhjZWVkLnN1YnN0cigtMSkgPT09ICclJykge1xuICAgICAgICAgICAgbGF5b3V0LmxpbmVfZXhjZWVkID0gcGFyc2VGbG9hdChkcmF3LmxpbmVfZXhjZWVkLnN1YnN0cigwLGRyYXcubGluZV9leGNlZWQubGVuZ3RoLTEpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxheW91dC5saW5lX2V4Y2VlZCA9IDgwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVwZWF0IG1pbmltdW0gZGlzdGFuY2VcbiAgICAgICAgbGF5b3V0LnJlcGVhdF9kaXN0YW5jZSA9IFN0eWxlUGFyc2VyLmNhY2hlUHJvcGVydHkoZHJhdy5yZXBlYXRfZGlzdGFuY2UsIGNvbnRleHQpO1xuICAgICAgICBpZiAobGF5b3V0LnJlcGVhdF9kaXN0YW5jZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBsYXlvdXQucmVwZWF0X2Rpc3RhbmNlID0gR2VvLnRpbGVfc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBsYXlvdXQucmVwZWF0X2Rpc3RhbmNlICo9IGxheW91dC51bml0c19wZXJfcGl4ZWw7XG5cbiAgICAgICAgLy8gcmVwZWF0IGdyb3VwIGtleVxuICAgICAgICBpZiAodHlwZW9mIGRyYXcucmVwZWF0X2dyb3VwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBsYXlvdXQucmVwZWF0X2dyb3VwID0gZHJhdy5yZXBlYXRfZ3JvdXAoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGRyYXcucmVwZWF0X2dyb3VwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbGF5b3V0LnJlcGVhdF9ncm91cCA9IGRyYXcucmVwZWF0X2dyb3VwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGF5b3V0LnJlcGVhdF9ncm91cCA9IGRyYXcua2V5OyAvLyBkZWZhdWx0IHRvIHVuaXF1ZSBzZXQgb2YgbWF0Y2hpbmcgbGF5ZXJzXG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0LnJlcGVhdF9ncm91cCArPSAnLycgKyB0ZXh0O1xuXG4gICAgICAgIC8vIE1heCBudW1iZXIgb2Ygc3ViZGl2aXNpb25zIHRvIHRyeVxuICAgICAgICBsYXlvdXQuc3ViZGl2ID0gdGlsZS5vdmVyem9vbTI7XG5cbiAgICAgICAgcmV0dXJuIGxheW91dDtcbiAgICB9LFxuXG4gICAgLy8gQnVpbGRzIG9uZSBvciBtb3JlIGxhYmVscyBmb3IgYSBnZW9tZXRyeVxuICAgIGJ1aWxkTGFiZWxzRnJvbUdlb21ldHJ5IChzaXplLCBnZW9tZXRyeSwgb3B0aW9ucykge1xuICAgICAgICBsZXQgbGFiZWxzID0gW107XG5cbiAgICAgICAgaWYgKGdlb21ldHJ5LnR5cGUgPT09IFwiTGluZVN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkTGluZUxhYmVscyhzaXplLCBnZW9tZXRyeS5jb29yZGluYXRlcywgb3B0aW9ucywgbGFiZWxzKTtcbiAgICAgICAgfSBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIk11bHRpTGluZVN0cmluZ1wiKSB7XG4gICAgICAgICAgICBsZXQgbGluZXMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkTGluZUxhYmVscyhzaXplLCBsaW5lc1tpXSwgb3B0aW9ucywgbGFiZWxzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIlBvaW50XCIpIHtcbiAgICAgICAgICAgIGxhYmVscy5wdXNoKG5ldyBMYWJlbFBvaW50KGdlb21ldHJ5LmNvb3JkaW5hdGVzLCBzaXplLCBvcHRpb25zKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gXCJNdWx0aVBvaW50XCIpIHtcbiAgICAgICAgICAgIGxldCBwb2ludHMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBsYWJlbHMucHVzaChuZXcgTGFiZWxQb2ludChwb2ludHNbaV0sIHNpemUsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIlBvbHlnb25cIikge1xuICAgICAgICAgICAgbGV0IGNlbnRyb2lkID0gR2VvLmNlbnRyb2lkKGdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdKTtcbiAgICAgICAgICAgIGxhYmVscy5wdXNoKG5ldyBMYWJlbFBvaW50KGNlbnRyb2lkLCBzaXplLCBvcHRpb25zKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gXCJNdWx0aVBvbHlnb25cIikge1xuICAgICAgICAgICAgbGV0IGNlbnRyb2lkID0gR2VvLm11bHRpQ2VudHJvaWQoZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgbGFiZWxzLnB1c2gobmV3IExhYmVsUG9pbnQoY2VudHJvaWQsIHNpemUsIG9wdGlvbnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgfSxcblxuICAgIC8vIEJ1aWxkIG9uZSBvciBtb3JlIGxhYmVscyBmb3IgYSBsaW5lIGdlb21ldHJ5XG4gICAgYnVpbGRMaW5lTGFiZWxzIChzaXplLCBsaW5lLCBvcHRpb25zLCBsYWJlbHMpIHtcbiAgICAgICAgbGV0IHN1YmRpdiA9IE1hdGgubWluKG9wdGlvbnMuc3ViZGl2LCBsaW5lLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAoc3ViZGl2ID4gMSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIG11bHRpcGxlIGxhYmVscyBmb3IgbGluZSwgd2l0aCBlYWNoIGFsbG90dGVkIGEgcmFuZ2Ugb2Ygc2VnbWVudHNcbiAgICAgICAgICAgIC8vIGluIHdoaWNoIGl0IHdpbGwgYXR0ZW1wdCB0byBwbGFjZVxuICAgICAgICAgICAgbGV0IHNlZ19wZXJfZGl2ID0gKGxpbmUubGVuZ3RoIC0gMSkgLyBzdWJkaXY7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBzdWJkaXY7IGkrKykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2VnbWVudF9zdGFydCA9IE1hdGguZmxvb3IoaSAqIHNlZ19wZXJfZGl2KTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnNlZ21lbnRfZW5kID0gTWF0aC5mbG9vcigoaSsxKSAqIHNlZ19wZXJfZGl2KTtcbiAgICAgICAgICAgICAgICBsYWJlbHMucHVzaChuZXcgTGFiZWxMaW5lKHNpemUsIGxpbmUsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMuc2VnbWVudF9zdGFydCA9IG51bGw7XG4gICAgICAgICAgICBvcHRpb25zLnNlZ21lbnRfZW5kID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxhYmVscy5wdXNoKG5ldyBMYWJlbExpbmUoc2l6ZSwgbGluZSwgb3B0aW9ucykpO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuVGV4dFN0eWxlLnRleHR1cmVfaWQgPSAwOyAvLyBuYW1lc3BhY2VzIHBlci10aWxlIGxhYmVsIHRleHR1cmVzXG4iLCJpbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IEdlbyBmcm9tICcuLi8uLi9nZW8nO1xuaW1wb3J0IHtTdHlsZVBhcnNlcn0gZnJvbSAnLi4vc3R5bGVfcGFyc2VyJztcbmltcG9ydCBQb2ludEFuY2hvciBmcm9tICcuLi9wb2ludHMvcG9pbnRfYW5jaG9yJztcblxudmFyIFRleHRTZXR0aW5ncztcblxuZXhwb3J0IGRlZmF1bHQgVGV4dFNldHRpbmdzID0ge1xuXG4gICAgLy8gQSBrZXkgZm9yIGdyb3VwaW5nIGFsbCBsYWJlbHMgb2YgdGhlIHNhbWUgdGV4dCBzdHlsZSAoZS5nLiBzYW1lIENhbnZhcyBzdGF0ZSwgdG8gbWluaW1pemUgc3RhdGUgY2hhbmdlcylcbiAgICBrZXkgKHNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBzZXR0aW5ncy5zdHlsZSxcbiAgICAgICAgICAgIHNldHRpbmdzLndlaWdodCxcbiAgICAgICAgICAgIHNldHRpbmdzLmZhbWlseSxcbiAgICAgICAgICAgIHNldHRpbmdzLnB4X3NpemUsXG4gICAgICAgICAgICBzZXR0aW5ncy5maWxsLFxuICAgICAgICAgICAgc2V0dGluZ3Muc3Ryb2tlLFxuICAgICAgICAgICAgc2V0dGluZ3Muc3Ryb2tlX3dpZHRoLFxuICAgICAgICAgICAgc2V0dGluZ3MudHJhbnNmb3JtLFxuICAgICAgICAgICAgc2V0dGluZ3MudGV4dF93cmFwLFxuICAgICAgICAgICAgc2V0dGluZ3MuYWxpZ25cbiAgICAgICAgXS5qb2luKCcvJyk7XG4gICAgfSxcblxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIHN0eWxlOiAnbm9ybWFsJyxcbiAgICAgICAgd2VpZ2h0OiBudWxsLFxuICAgICAgICBzaXplOiAnMTJweCcsXG4gICAgICAgIHB4X3NpemU6IDEyLFxuICAgICAgICBmYW1pbHk6ICdIZWx2ZXRpY2EnLFxuICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICB0ZXh0X3dyYXA6IDE1LFxuICAgICAgICBhbGlnbjogJ2NlbnRlcidcbiAgICB9LFxuXG4gICAgY29tcHV0ZSAoZmVhdHVyZSwgZHJhdywgY29udGV4dCkge1xuICAgICAgICBsZXQgc3R5bGUgPSB7fTtcblxuICAgICAgICBkcmF3LmZvbnQgPSBkcmF3LmZvbnQgfHwgdGhpcy5kZWZhdWx0cztcblxuICAgICAgICAvLyBVc2UgZmlsbCBpZiBzcGVjaWZpZWQsIG9yIGRlZmF1bHRcbiAgICAgICAgc3R5bGUuZmlsbCA9IChkcmF3LmZvbnQuZmlsbCAmJiBVdGlscy50b0NTU0NvbG9yKFN0eWxlUGFyc2VyLmNhY2hlQ29sb3IoZHJhdy5mb250LmZpbGwsIGNvbnRleHQpKSkgfHwgdGhpcy5kZWZhdWx0cy5maWxsO1xuXG4gICAgICAgIC8vIEZvbnQgcHJvcGVydGllcyBhcmUgbW9kZWxlZCBhZnRlciBDU1MgbmFtZXM6XG4gICAgICAgIC8vIC0gZmFtaWx5OiBIZWx2ZXRpY2EsIEZ1dHVyYSwgZXRjLlxuICAgICAgICAvLyAtIHNpemU6IGluIHB0LCBweCwgb3IgZW1cbiAgICAgICAgLy8gLSBzdHlsZTogbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWVcbiAgICAgICAgLy8gLSB3ZWlnaHQ6IG5vcm1hbCwgYm9sZCwgZXRjLlxuICAgICAgICAvLyAtIHRyYW5zZm9ybTogY2FwaXRhbGl6ZSwgdXBwZXJjYXNlLCBsb3dlcmNhc2VcbiAgICAgICAgc3R5bGUuc3R5bGUgPSBkcmF3LmZvbnQuc3R5bGUgfHwgdGhpcy5kZWZhdWx0cy5zdHlsZTtcbiAgICAgICAgc3R5bGUud2VpZ2h0ID0gZHJhdy5mb250LndlaWdodCB8fCB0aGlzLmRlZmF1bHRzLndlaWdodDtcbiAgICAgICAgaWYgKGRyYXcuZm9udC5mYW1pbHkpIHtcbiAgICAgICAgICAgIHN0eWxlLmZhbWlseSA9IGRyYXcuZm9udC5mYW1pbHk7XG4gICAgICAgICAgICBpZiAoc3R5bGUuZmFtaWx5ICE9PSB0aGlzLmRlZmF1bHRzLmZhbWlseSkge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZhbWlseSArPSAnLCAnICsgdGhpcy5kZWZhdWx0cy5mYW1pbHk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdHlsZS5mYW1pbHkgPSB0aGlzLmRlZmF1bHRzLmZhbWlseTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IGRyYXcuZm9udC50cmFuc2Zvcm07XG5cbiAgICAgICAgLy8gb3JpZ2luYWwgc2l6ZSAobm90IGN1cnJlbnRseSB1c2VkLCBidXQgdXNlZnVsIGZvciBkZWJ1Z2dpbmcpXG4gICAgICAgIHN0eWxlLnNpemUgPSBkcmF3LmZvbnQuc2l6ZSB8fCB0aGlzLmRlZmF1bHRzLnNpemU7XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlZCBwaXhlbCBzaXplXG4gICAgICAgIHN0eWxlLnB4X3NpemUgPSBTdHlsZVBhcnNlci5jYWNoZVByb3BlcnR5KGRyYXcuZm9udC5weF9zaXplLCBjb250ZXh0KSB8fCB0aGlzLmRlZmF1bHRzLnB4X3NpemU7XG5cbiAgICAgICAgLy8gVXNlIHN0cm9rZSBpZiBzcGVjaWZpZWRcbiAgICAgICAgaWYgKGRyYXcuZm9udC5zdHJva2UgJiYgZHJhdy5mb250LnN0cm9rZS5jb2xvcikge1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gVXRpbHMudG9DU1NDb2xvcihTdHlsZVBhcnNlci5jYWNoZUNvbG9yKGRyYXcuZm9udC5zdHJva2UuY29sb3IsIGNvbnRleHQpIHx8IHRoaXMuZGVmYXVsdHMuc3Ryb2tlKTtcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZV93aWR0aCA9IFN0eWxlUGFyc2VyLmNhY2hlUHJvcGVydHkoZHJhdy5mb250LnN0cm9rZS53aWR0aCwgY29udGV4dCkgfHwgdGhpcy5kZWZhdWx0cy5zdHJva2Vfd2lkdGg7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2Vfd2lkdGggKj0gVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvO1xuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGUuZm9udF9jc3MgPSB0aGlzLmZvbnRDU1Moc3R5bGUpO1xuXG4gICAgICAgIC8vIFdvcmQgd3JhcCBhbmQgdGV4dCBhbGlnbm1lbnRcbiAgICAgICAgLy8gTm90IGEgZm9udCBwcm9wZXJ0aWVzLCBidXQgYWZmZWN0IGF0bGFzIG9mIHVuaXF1ZSB0ZXh0IHRleHR1cmVzXG4gICAgICAgIGxldCB0ZXh0X3dyYXAgPSBkcmF3LnRleHRfd3JhcDsgLy8gdXNlIGV4cGxpY2l0bHkgc2V0IHZhbHVlXG4gICAgICAgIGlmICh0ZXh0X3dyYXAgPT0gbnVsbCAmJiBHZW8uZ2VvbWV0cnlUeXBlKGZlYXR1cmUuZ2VvbWV0cnkudHlwZSkgIT09ICdsaW5lJykge1xuICAgICAgICAgICAgLy8gcG9pbnQgbGFiZWxzIChmb3IgcG9pbnQgYW5kIHBvbHlnb24gZmVhdHVyZXMpIGhhdmUgd29yZCB3cmFwIG9uIHcvZGVmYXVsdCBtYXggbGVuZ3RoLFxuICAgICAgICAgICAgLy8gbGluZSBsYWJlbHMgZGVmYXVsdCBvZmZcbiAgICAgICAgICAgIHRleHRfd3JhcCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXR0aW5nIHRvICd0cnVlJyBjYXVzZXMgZGVmYXVsdCB3cmFwIHZhbHVlIHRvIGJlIHVzZWRcbiAgICAgICAgaWYgKHRleHRfd3JhcCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGV4dF93cmFwID0gdGhpcy5kZWZhdWx0cy50ZXh0X3dyYXA7XG4gICAgICAgIH1cbiAgICAgICAgc3R5bGUudGV4dF93cmFwID0gdGV4dF93cmFwO1xuXG4gICAgICAgIC8vIGRlZmF1bHQgYWxpZ25tZW50IHRvIG1hdGNoIGFuY2hvclxuICAgICAgICBpZiAoIWRyYXcuYWxpZ24gJiYgZHJhdy5hbmNob3IgJiYgZHJhdy5hbmNob3IgIT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICBpZiAoUG9pbnRBbmNob3IuaXNMZWZ0QW5jaG9yKGRyYXcuYW5jaG9yKSkge1xuICAgICAgICAgICAgICAgIGRyYXcuYWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoUG9pbnRBbmNob3IuaXNSaWdodEFuY2hvcihkcmF3LmFuY2hvcikpIHtcbiAgICAgICAgICAgICAgICBkcmF3LmFsaWduID0gJ2xlZnQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGUuYWxpZ24gPSBkcmF3LmFsaWduIHx8IHRoaXMuZGVmYXVsdHMuYWxpZ247XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICAvLyBCdWlsZCBDU1Mtc3R5bGUgZm9udCBzdHJpbmcgKHRvIHNldCBDYW52YXMgZHJhdyBzdGF0ZSlcbiAgICBmb250Q1NTICh7IHN0eWxlLCB3ZWlnaHQsIHB4X3NpemUsIGZhbWlseSB9KSB7XG4gICAgICAgIHJldHVybiBbc3R5bGUsIHdlaWdodCwgcHhfc2l6ZSArICdweCcsIGZhbWlseV1cbiAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4KSAvLyByZW1vdmUgbnVsbCBwcm9wc1xuICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICB9XG5cbn07XG4iLCJpbXBvcnQgR2VvIGZyb20gJy4vZ2VvJztcbmltcG9ydCB7U3R5bGVQYXJzZXJ9IGZyb20gJy4vc3R5bGVzL3N0eWxlX3BhcnNlcic7XG5pbXBvcnQge1N0eWxlTWFuYWdlcn0gZnJvbSAnLi9zdHlsZXMvc3R5bGVfbWFuYWdlcic7XG5pbXBvcnQgQ29sbGlzaW9uIGZyb20gJy4vbGFiZWxzL2NvbGxpc2lvbic7XG5pbXBvcnQgV29ya2VyQnJva2VyIGZyb20gJy4vdXRpbHMvd29ya2VyX2Jyb2tlcic7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL2dsL3RleHR1cmUnO1xuXG5pbXBvcnQge21hdDQsIHZlYzN9IGZyb20gJy4vdXRpbHMvZ2wtbWF0cml4JztcbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaWxlIHtcblxuICAgIC8qKlxuICAgICAgICBUaWxlXG4gICAgICAgIEBjb25zdHJ1Y3RvclxuICAgICAgICBSZXF1aXJlZCBwcm9wZXJ0aWVzOlxuICAgICAgICBjb29yZHM6IG9iamVjdCB3aXRoIHt4LCB5LCB6fSBwcm9wZXJ0aWVzIGlkZW50aWZ5aW5nIHRpbGUgY29vcmRpbmF0ZSBsb2NhdGlvblxuICAgICAgICB3b3JrZXI6IHdlYiB3b3JrZXIgdG8gaGFuZGxlIHRpbGUgY29uc3RydWN0aW9uXG4gICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih7IGNvb3Jkcywgc3R5bGVfem9vbSwgc291cmNlLCB3b3JrZXIsIHZpZXcgfSkge1xuICAgICAgICB0aGlzLndvcmtlciA9IHdvcmtlcjtcbiAgICAgICAgdGhpcy52aWV3ID0gdmlldztcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGlvbiA9IG51bGw7XG5cbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJveHkgPSBudWxsO1xuICAgICAgICB0aGlzLnByb3h5X2RlcHRoID0gMDtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgICAgICB0aGlzLmRlYnVnID0ge307XG5cbiAgICAgICAgdGhpcy5jb29yZHMgPSBUaWxlLmNvb3JkaW5hdGVXaXRoTWF4Wm9vbShjb29yZHMsIHRoaXMuc291cmNlLm1heF96b29tKTtcbiAgICAgICAgdGhpcy5zdHlsZV96b29tID0gc3R5bGVfem9vbTsgLy8gem9vbSBsZXZlbCB0byBiZSB1c2VkIGZvciBzdHlsaW5nXG4gICAgICAgIHRoaXMub3Zlcnpvb20gPSBNYXRoLm1heCh0aGlzLnN0eWxlX3pvb20gLSB0aGlzLmNvb3Jkcy56LCAwKTsgLy8gbnVtYmVyIG9mIGxldmVscyBvZiBvdmVyem9vbWluZ1xuICAgICAgICB0aGlzLm92ZXJ6b29tMiA9IE1hdGgucG93KDIsIHRoaXMub3Zlcnpvb20pO1xuICAgICAgICB0aGlzLmtleSA9IFRpbGUua2V5KHRoaXMuY29vcmRzLCB0aGlzLnNvdXJjZSwgdGhpcy5zdHlsZV96b29tKTtcbiAgICAgICAgdGhpcy5taW4gPSBHZW8ubWV0ZXJzRm9yVGlsZSh0aGlzLmNvb3Jkcyk7XG4gICAgICAgIHRoaXMubWF4ID0gR2VvLm1ldGVyc0ZvclRpbGUoe3g6IHRoaXMuY29vcmRzLnggKyAxLCB5OiB0aGlzLmNvb3Jkcy55ICsgMSwgejogdGhpcy5jb29yZHMueiB9KSxcbiAgICAgICAgdGhpcy5zcGFuID0geyB4OiAodGhpcy5tYXgueCAtIHRoaXMubWluLngpLCB5OiAodGhpcy5tYXgueSAtIHRoaXMubWluLnkpIH07XG4gICAgICAgIHRoaXMuYm91bmRzID0geyBzdzogeyB4OiB0aGlzLm1pbi54LCB5OiB0aGlzLm1heC55IH0sIG5lOiB7IHg6IHRoaXMubWF4LngsIHk6IHRoaXMubWluLnkgfSB9O1xuICAgICAgICB0aGlzLmNlbnRlcl9kaXN0ID0gMDtcblxuICAgICAgICAvLyBVbml0cyBwZXIgcGl4ZWwgbmVlZHMgdG8gYWNjb3VudCBmb3Igb3Zlci16b29taW5nXG4gICAgICAgIHRoaXMudW5pdHNfcGVyX3BpeGVsID0gR2VvLnVuaXRzX3Blcl9waXhlbCAvIHRoaXMub3Zlcnpvb20yO1xuXG4gICAgICAgIHRoaXMubWV0ZXJzX3Blcl9waXhlbCA9IEdlby5tZXRlcnNQZXJQaXhlbCh0aGlzLmNvb3Jkcy56KTtcbiAgICAgICAgdGhpcy51bml0c19wZXJfbWV0ZXIgPSBHZW8udW5pdHNQZXJNZXRlcih0aGlzLmNvb3Jkcy56KTtcblxuICAgICAgICB0aGlzLm1lc2hlcyA9IHt9OyAvLyByZW5kZXJhYmxlIFZCTyBtZXNoZXMga2V5ZWQgYnkgc3R5bGVcbiAgICAgICAgdGhpcy50ZXh0dXJlcyA9IFtdOyAvLyB0ZXh0dXJlcyB0aGF0IHRoZSB0aWxlIG93bnMgKGxhYmVscywgZXRjLilcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlKHNwZWMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUaWxlKHNwZWMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb29yZChjKSB7XG4gICAgICAgIHJldHVybiB7eDogYy54LCB5OiBjLnksIHo6IGMueiwga2V5OiBUaWxlLmNvb3JkS2V5KGMpfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29vcmRLZXkoe3gsIHksIHp9KSB7XG4gICAgICAgIHJldHVybiB4ICsgJy8nICsgeSArICcvJyArIHo7XG4gICAgfVxuXG4gICAgc3RhdGljIGtleSAoY29vcmRzLCBzb3VyY2UsIHN0eWxlX3pvb20pIHtcbiAgICAgICAgY29vcmRzID0gVGlsZS5jb29yZGluYXRlV2l0aE1heFpvb20oY29vcmRzLCBzb3VyY2UubWF4X3pvb20pO1xuICAgICAgICBpZiAoY29vcmRzLnkgPCAwIHx8IGNvb3Jkcy55ID49ICgxIDw8IGNvb3Jkcy56KSB8fCBjb29yZHMueiA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjsgLy8gY3VsbCB0aWxlcyBvdXQgb2YgcmFuZ2UgKHggd2lsbCB3cmFwKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbc291cmNlLm5hbWUsIHN0eWxlX3pvb20sIGNvb3Jkcy54LCBjb29yZHMueSwgY29vcmRzLnpdLmpvaW4oJy8nKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29vcmRpbmF0ZUF0Wm9vbSh7eCwgeSwgeiwga2V5fSwgem9vbSkge1xuICAgICAgICBpZiAoeiAhPT0gem9vbSkge1xuICAgICAgICAgICAgbGV0IHpzY2FsZSA9IE1hdGgucG93KDIsIHogLSB6b29tKTtcbiAgICAgICAgICAgIHggPSBNYXRoLmZsb29yKHggLyB6c2NhbGUpO1xuICAgICAgICAgICAgeSA9IE1hdGguZmxvb3IoeSAvIHpzY2FsZSk7XG4gICAgICAgICAgICB6ID0gem9vbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVGlsZS5jb29yZCh7eCwgeSwgen0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb29yZGluYXRlV2l0aE1heFpvb20oe3gsIHksIHp9LCBtYXhfem9vbSkge1xuICAgICAgICBpZiAobWF4X3pvb20gIT09IHVuZGVmaW5lZCAmJiB6ID4gbWF4X3pvb20pIHtcbiAgICAgICAgICAgIHJldHVybiBUaWxlLmNvb3JkaW5hdGVBdFpvb20oe3gsIHksIHp9LCBtYXhfem9vbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFRpbGUuY29vcmQoe3gsIHksIHp9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY2hpbGRyZW5Gb3JDb29yZGluYXRlKHt4LCB5LCB6LCBrZXl9KSB7XG4gICAgICAgIGlmICghVGlsZS5jb29yZF9jaGlsZHJlbltrZXldKSB7XG4gICAgICAgICAgICB6Kys7XG4gICAgICAgICAgICB4ICo9IDI7XG4gICAgICAgICAgICB5ICo9IDI7XG4gICAgICAgICAgICBUaWxlLmNvb3JkX2NoaWxkcmVuW2tleV0gPSBbXG4gICAgICAgICAgICAgICAgVGlsZS5jb29yZCh7eCwgeSwgICAgICB6fSksIFRpbGUuY29vcmQoe3g6IHgrMSwgeSwgICAgICB6fSksXG4gICAgICAgICAgICAgICAgVGlsZS5jb29yZCh7eCwgeTogeSsxLCB6fSksIFRpbGUuY29vcmQoe3g6IHgrMSwgeTogeSsxLCB6fSlcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFRpbGUuY29vcmRfY2hpbGRyZW5ba2V5XTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNEZXNjZW5kYW50KHBhcmVudCwgZGVzY2VuZGFudCkge1xuICAgICAgICBpZiAoZGVzY2VuZGFudC56ID4gcGFyZW50LnopIHtcbiAgICAgICAgICAgIGxldCB7eCwgeX0gPSBUaWxlLmNvb3JkaW5hdGVBdFpvb20oZGVzY2VuZGFudCwgcGFyZW50LnopO1xuICAgICAgICAgICAgcmV0dXJuIChwYXJlbnQueCA9PT0geCAmJiBwYXJlbnQueSA9PT0geSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNvcnQgYSBzZXQgb2YgdGlsZSBpbnN0YW5jZXMgKHdoaWNoIGFscmVhZHkgaGF2ZSBhIGRpc3RhbmNlIGZyb20gY2VudGVyIHRpbGUgY29tcHV0ZWQpXG4gICAgc3RhdGljIHNvcnQodGlsZXMpIHtcbiAgICAgICAgcmV0dXJuIHRpbGVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGxldCBhZCA9IGEuY2VudGVyX2Rpc3Q7XG4gICAgICAgICAgICBsZXQgYmQgPSBiLmNlbnRlcl9kaXN0O1xuICAgICAgICAgICAgcmV0dXJuIChiZCA+IGFkID8gLTEgOiAoYmQgPT09IGFkID8gMCA6IDEpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRnJlZSByZXNvdXJjZXMgb3duZWQgYnkgdGlsZVxuICAgIGZyZWVSZXNvdXJjZXMgKCkge1xuICAgICAgICBpZiAodGhpcy5tZXNoZXMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG0gaW4gdGhpcy5tZXNoZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc2hlc1ttXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50ZXh0dXJlcykge1xuICAgICAgICAgICAgZm9yIChsZXQgdCBvZiB0aGlzLnRleHR1cmVzKSB7XG4gICAgICAgICAgICAgICAgVGV4dHVyZS5yZWxlYXNlKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZXNoZXMgPSB7fTtcbiAgICAgICAgdGhpcy50ZXh0dXJlcyA9IFtdO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMud29ya2VyTWVzc2FnZSgnc2VsZi5yZW1vdmVUaWxlJywgdGhpcy5rZXkpO1xuICAgICAgICB0aGlzLmZyZWVSZXNvdXJjZXMoKTtcbiAgICAgICAgdGhpcy53b3JrZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGJ1aWxkQXNNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UubmFtZSxcbiAgICAgICAgICAgIGNvb3JkczogdGhpcy5jb29yZHMsXG4gICAgICAgICAgICBtaW46IHRoaXMubWluLFxuICAgICAgICAgICAgbWF4OiB0aGlzLm1heCxcbiAgICAgICAgICAgIHVuaXRzX3Blcl9waXhlbDogdGhpcy51bml0c19wZXJfcGl4ZWwsXG4gICAgICAgICAgICBtZXRlcnNfcGVyX3BpeGVsOiB0aGlzLm1ldGVyc19wZXJfcGl4ZWwsXG4gICAgICAgICAgICB1bml0c19wZXJfbWV0ZXI6IHRoaXMudW5pdHNfcGVyX21ldGVyLFxuICAgICAgICAgICAgc3R5bGVfem9vbTogdGhpcy5zdHlsZV96b29tLFxuICAgICAgICAgICAgb3Zlcnpvb206IHRoaXMub3Zlcnpvb20sXG4gICAgICAgICAgICBvdmVyem9vbTI6IHRoaXMub3Zlcnpvb20yLFxuICAgICAgICAgICAgZ2VuZXJhdGlvbjogdGhpcy5nZW5lcmF0aW9uLFxuICAgICAgICAgICAgZGVidWc6IHRoaXMuZGVidWdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB3b3JrZXJNZXNzYWdlICguLi5tZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2UodGhpcy53b3JrZXIsIC4uLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGJ1aWxkKGdlbmVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjtcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53b3JrZXJNZXNzYWdlKCdzZWxmLmJ1aWxkVGlsZScsIHsgdGlsZTogdGhpcy5idWlsZEFzTWVzc2FnZSgpIH0pLmNhdGNoKGUgPT4geyB0aHJvdyBlOyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICAgQ2FsbGVkIG9uIHdvcmtlciB0byBjYW5jZWwgbG9hZGluZ1xuICAgICAgICBTdGF0aWMgbWV0aG9kIGJlY2F1c2UgdGhlIHdvcmtlciBvbmx5IGhhcyBvYmplY3QgcmVwcmVzZW50YXRpb25zIG9mIHRpbGUgZGF0YSwgdGhlcmUgaXMgbm9cbiAgICAgICAgdGlsZSBpbnN0YW5jZSBjcmVhdGVkIHlldC5cbiAgICAqL1xuICAgIHN0YXRpYyBjYW5jZWwodGlsZSkge1xuICAgICAgICBpZiAodGlsZSkge1xuICAgICAgICAgICAgdGlsZS5jYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGlsZS5zb3VyY2VfZGF0YSAmJiB0aWxlLnNvdXJjZV9kYXRhLnJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnNvdXJjZV9kYXRhLnJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFRpbGUuYWJvcnRCdWlsZCh0aWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgZ2VvbWV0cnkgZm9yIHRpbGUgLSBjYWxsZWQgYnkgd2ViIHdvcmtlclxuICAgIC8vIFJldHVybnMgYSBzZXQgb2YgdGlsZSBrZXlzIHRoYXQgc2hvdWxkIGJlIHNlbnQgdG8gdGhlIG1haW4gdGhyZWFkIChzbyB0aGF0IHdlIGNhbiBtaW5pbWl6ZSBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gd29ya2VyIGFuZCBtYWluIHRocmVhZClcbiAgICBzdGF0aWMgYnVpbGRHZW9tZXRyeSAodGlsZSwgeyBsYXllcnMsIHJ1bGVzLCBzdHlsZXMsIGdsb2JhbCB9KSB7XG4gICAgICAgIHRpbGUuZGVidWcucmVuZGVyaW5nID0gK25ldyBEYXRlKCk7XG4gICAgICAgIHRpbGUuZGVidWcuZmVhdHVyZXMgPSAwO1xuXG4gICAgICAgIGxldCBkYXRhID0gdGlsZS5zb3VyY2VfZGF0YTtcblxuICAgICAgICBDb2xsaXNpb24uc3RhcnRUaWxlKHRpbGUua2V5KTtcblxuICAgICAgICAvLyBUcmVhdCB0b3AtbGV2ZWwgc3R5bGUgcnVsZXMgYXMgJ2xheWVycydcbiAgICAgICAgZm9yIChsZXQgbGF5ZXJfbmFtZSBpbiBsYXllcnMpIHtcbiAgICAgICAgICAgIGxldCBsYXllciA9IGxheWVyc1tsYXllcl9uYW1lXTtcbiAgICAgICAgICAgIC8vIFNraXAgbGF5ZXJzIHdpdGggbm8gZGF0YSBzb3VyY2UgZGVmaW5lZFxuICAgICAgICAgICAgaWYgKCFsYXllciB8fCAhbGF5ZXIuZGF0YSkge1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKGBMYXllciAke2xheWVyfSB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2VvbWV0cnkgZGF0YSBzb3VyY2UgYW5kIHdpbGwgbm90IGJlIHJlbmRlcmVkLmApO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTb3VyY2UgbmFtZXMgZG9uJ3QgbWF0Y2hcbiAgICAgICAgICAgIGlmIChsYXllci5kYXRhLnNvdXJjZSAhPT0gdGlsZS5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGRhdGEgZm9yIG9uZSBvciBtb3JlIGxheWVycyBmcm9tIHNvdXJjZVxuICAgICAgICAgICAgbGV0IHNvdXJjZV9sYXllcnMgPSBUaWxlLmdldERhdGFGb3JTb3VyY2UoZGF0YSwgbGF5ZXIuZGF0YSwgbGF5ZXJfbmFtZSk7XG5cbiAgICAgICAgICAgIC8vIFJlbmRlciBmZWF0dXJlcyBpbiBsYXllclxuICAgICAgICAgICAgZm9yIChsZXQgcz0wOyBzIDwgc291cmNlX2xheWVycy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VfbGF5ZXIgPSBzb3VyY2VfbGF5ZXJzW3NdO1xuICAgICAgICAgICAgICAgIGxldCBnZW9tID0gc291cmNlX2xheWVyLmdlb207XG4gICAgICAgICAgICAgICAgaWYgKCFnZW9tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGYgPSAwOyBmIDwgZ2VvbS5mZWF0dXJlcy5sZW5ndGg7IGYrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmVhdHVyZSA9IGdlb20uZmVhdHVyZXNbZl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmdlb21ldHJ5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIGZlYXR1cmVzIHcvbyBnZW9tZXRyeSAodmFsaWQgR2VvSlNPTilcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250ZXh0ID0gU3R5bGVQYXJzZXIuZ2V0RmVhdHVyZVBhcnNlQ29udGV4dChmZWF0dXJlLCB0aWxlLCBnbG9iYWwpO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndpbmRpbmcgPSB0aWxlLmRlZmF1bHRfd2luZGluZztcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sYXllciA9IHNvdXJjZV9sYXllci5sYXllcjsgLy8gYWRkIGRhdGEgc291cmNlIGxheWVyIG5hbWVcblxuICAgICAgICAgICAgICAgICAgICAvLyBHZXQgZHJhdyBncm91cHMgZm9yIHRoaXMgZmVhdHVyZVxuICAgICAgICAgICAgICAgICAgICBsZXQgbGF5ZXJfcnVsZXMgPSBydWxlc1tsYXllcl9uYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRyYXdfZ3JvdXBzID0gbGF5ZXJfcnVsZXMuYnVpbGREcmF3R3JvdXBzKGNvbnRleHQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRyYXdfZ3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlbmRlciBkcmF3IGdyb3Vwc1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBncm91cF9uYW1lIGluIGRyYXdfZ3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXAgPSBkcmF3X2dyb3Vwc1tncm91cF9uYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ3JvdXAudmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdG8gc3R5bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHlsZV9uYW1lID0gZ3JvdXAuc3R5bGUgfHwgZ3JvdXBfbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHlsZSA9IHN0eWxlc1tzdHlsZV9uYW1lXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKGBTdHlsZSAnJHtzdHlsZV9uYW1lfScgbm90IGZvdW5kIGZvciBydWxlIGluIGxheWVyICcke2xheWVyX25hbWV9JzpgLCBncm91cCwgZmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGF5ZXJzID0gZ3JvdXAubGF5ZXJzOyAgLy8gYWRkIG1hdGNoaW5nIGRyYXcgbGF5ZXJzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmFkZEZlYXR1cmUoZmVhdHVyZSwgZ3JvdXAsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGlsZS5kZWJ1Zy5mZWF0dXJlcysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aWxlLmRlYnVnLnJlbmRlcmluZyA9ICtuZXcgRGF0ZSgpIC0gdGlsZS5kZWJ1Zy5yZW5kZXJpbmc7XG5cbiAgICAgICAgLy8gRmluYWxpemUgYXJyYXkgYnVmZmVyIGZvciBlYWNoIHJlbmRlciBzdHlsZVxuICAgICAgICBsZXQgdGlsZV9zdHlsZXMgPSBTdHlsZU1hbmFnZXIuc3R5bGVzRm9yVGlsZSh0aWxlLmtleSk7XG4gICAgICAgIHRpbGUubWVzaF9kYXRhID0ge307XG4gICAgICAgIGxldCBxdWV1ZSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzPTA7IHMgPCB0aWxlX3N0eWxlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHN0eWxlX25hbWUgPSB0aWxlX3N0eWxlc1tzXTtcbiAgICAgICAgICAgIGxldCBzdHlsZSA9IHN0eWxlc1tzdHlsZV9uYW1lXTtcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goc3R5bGUuZW5kRGF0YSh0aWxlKS50aGVuKChzdHlsZV9kYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0eWxlX2RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS5tZXNoX2RhdGFbc3R5bGVfbmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhfZGF0YTogc3R5bGVfZGF0YS52ZXJ0ZXhfZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zOiBzdHlsZV9kYXRhLnVuaWZvcm1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZXM6IHN0eWxlX2RhdGEudGV4dHVyZXNcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocXVldWUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgQ29sbGlzaW9uLnJlc2V0VGlsZSh0aWxlLmtleSk7XG5cbiAgICAgICAgICAgIC8vIFJldHVybiBrZXlzIHRvIGJlIHRyYW5zZmVyZWQgdG8gbWFpbiB0aHJlYWRcbiAgICAgICAgICAgIHJldHVybiBbJ21lc2hfZGF0YSddO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICAgUmV0cmlldmVzIGdlb21ldHJ5IGZyb20gYSB0aWxlIGFjY29yZGluZyB0byBhIGRhdGEgc291cmNlIGRlZmluaXRpb25cbiAgICAgICAgUmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGg6XG4gICAgICAgICAgICBsYXllcjogc291cmNlIGxheWVyIG5hbWVcbiAgICAgICAgICAgIGdlb206IEdlb0pTT04gRmVhdHVyZUNvbGxlY3Rpb25cbiAgICAqL1xuICAgIHN0YXRpYyBnZXREYXRhRm9yU291cmNlIChzb3VyY2VfZGF0YSwgc291cmNlX2NvbmZpZywgZGVmYXVsdF9sYXllciA9IG51bGwpIHtcbiAgICAgICAgdmFyIGxheWVycyA9IFtdO1xuXG4gICAgICAgIGlmIChzb3VyY2VfY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIElmIG5vIGxheWVyIHNwZWNpZmllZCwgYW5kIGEgZGVmYXVsdCBzb3VyY2UgbGF5ZXIgZXhpc3RzXG4gICAgICAgICAgICBpZiAoIXNvdXJjZV9jb25maWcubGF5ZXIgJiYgc291cmNlX2RhdGEubGF5ZXJzLl9kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgbGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsYXllcjogJ19kZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAgICAgZ2VvbTogc291cmNlX2RhdGEubGF5ZXJzLl9kZWZhdWx0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiBubyBsYXllciBzcGVjaWZpZWQsIGFuZCBhIGRlZmF1bHQgcmVxdWVzdGVkIGxheWVyIGV4aXN0c1xuICAgICAgICAgICAgZWxzZSBpZiAoIXNvdXJjZV9jb25maWcubGF5ZXIgJiYgZGVmYXVsdF9sYXllcikge1xuICAgICAgICAgICAgICAgIGxheWVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXI6IGRlZmF1bHRfbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgIGdlb206IHNvdXJjZV9kYXRhLmxheWVyc1tkZWZhdWx0X2xheWVyXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgYSBsYXllciBpcyBzcGVjaWZpZWQgYnkgbmFtZSwgdXNlIGl0XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc291cmNlX2NvbmZpZy5sYXllciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBsYXllcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyOiBzb3VyY2VfY29uZmlnLmxheWVyLFxuICAgICAgICAgICAgICAgICAgICBnZW9tOiBzb3VyY2VfZGF0YS5sYXllcnNbc291cmNlX2NvbmZpZy5sYXllcl1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIG11bHRpcGxlIGxheWVycyBhcmUgc3BlY2lmaWVkIGJ5IG5hbWUsIGNvbWJpbmUgdGhlbVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2VfY29uZmlnLmxheWVyKSkge1xuICAgICAgICAgICAgICAgIHNvdXJjZV9jb25maWcubGF5ZXIuZm9yRWFjaChsYXllciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VfZGF0YS5sYXllcnNbbGF5ZXJdICYmIHNvdXJjZV9kYXRhLmxheWVyc1tsYXllcl0uZmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tOiBzb3VyY2VfZGF0YS5sYXllcnNbbGF5ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQXNzZW1ibGUgYSBjdXN0b20gbGF5ZXIgdmlhIGEgZnVuY3Rpb24sIHdoaWNoIGlzIGNhbGxlZCB3aXRoIGFsbCBzb3VyY2UgbGF5ZXJzXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc291cmNlX2NvbmZpZy5sYXllciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGxheWVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvbTogc291cmNlX2NvbmZpZy5sYXllcihzb3VyY2VfZGF0YS5sYXllcnMpXG4gICAgICAgICAgICAgICAgICAgIC8vIGN1c3RvbSBsYXllciBoYXMgbm8gbmFtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxheWVycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICBDYWxsZWQgb24gbWFpbiB0aHJlYWQgd2hlbiBhIHdlYiB3b3JrZXIgY29tcGxldGVzIHByb2Nlc3NpbmdcbiAgICAgICBmb3IgYSBzaW5nbGUgdGlsZS5cbiAgICAqL1xuICAgIGJ1aWxkTWVzaGVzKHN0eWxlcykge1xuICAgICAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVidWdcbiAgICAgICAgdGhpcy5kZWJ1Zy5nZW9tZXRyaWVzID0gMDtcbiAgICAgICAgdGhpcy5kZWJ1Zy5idWZmZXJfc2l6ZSA9IDA7XG5cbiAgICAgICAgLy8gQ3JlYXRlIFZCT3NcbiAgICAgICAgbGV0IG1lc2hlcyA9IHt9LCB0ZXh0dXJlcyA9IFtdOyAvLyBuZXcgcmVzb3VyY2VzLCB0byBiZSBzd2FwcGVkIGluXG4gICAgICAgIGxldCBtZXNoX2RhdGEgPSB0aGlzLm1lc2hfZGF0YTtcbiAgICAgICAgaWYgKG1lc2hfZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcyBpbiBtZXNoX2RhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAobWVzaF9kYXRhW3NdLnZlcnRleF9kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcuYnVmZmVyX3NpemUgKz0gbWVzaF9kYXRhW3NdLnZlcnRleF9kYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGVzW3NdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2cud2FybihgQ291bGQgbm90IGNyZWF0ZSBtZXNoIGJlY2F1c2Ugc3R5bGUgJyR7c30nIG5vdCBmb3VuZCwgZm9yIHRpbGUgJHt0aGlzLmtleX0sIGFib3J0aW5nIHRpbGVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1lc2hlc1tzXSA9IHN0eWxlc1tzXS5tYWtlTWVzaChtZXNoX2RhdGFbc10udmVydGV4X2RhdGEsIG1lc2hfZGF0YVtzXSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcuZ2VvbWV0cmllcyArPSBtZXNoZXNbc10uZ2VvbWV0cnlfY291bnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQXNzaWduIHRleHR1cmUgb3duZXJzaGlwIHRvIHRpbGVzXG4gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0J3MgdmFsaWQgZm9yIGEgc2luZ2xlIHRleHR1cmUgdG8gYmUgcmVmZXJlbmNlZCBmcm9tIG11bHRpcGxlIHN0eWxlc1xuICAgICAgICAgICAgICAgIC8vIChlLmcuIHNhbWUgcmFzdGVyIHRleHR1cmUgYXR0YWNoZWQgdG8gbXVsdGlwbGUgc291cmNlcykuIFRoaXMgbWVhbnMgdGhlIHNhbWVcbiAgICAgICAgICAgICAgICAvLyB0ZXh0dXJlIG1heSBiZSBhZGRlZCB0byB0aGUgdGlsZSdzIHRleHR1cmUgbGlzdCBtb3JlIHRoYW4gb25jZSwgd2hpY2ggZW5zdXJlc1xuICAgICAgICAgICAgICAgIC8vIHRoYXQgaXQgaXMgcHJvcGVybHkgcmVsZWFzZWQgKHRvIG1hdGNoIGl0cyByZXRhaW4gY291bnQpLlxuICAgICAgICAgICAgICAgIGlmIChtZXNoX2RhdGFbc10udGV4dHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzaF9kYXRhW3NdLnRleHR1cmVzLmZvckVhY2godCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlcy5wdXNoKHQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMubWVzaF9kYXRhOyAvLyBUT0RPOiBtaWdodCB3YW50IHRvIHByZXNlcnZlIHRoaXMgZm9yIHJlYnVpbGRpbmcgZ2VvbWV0cmllcyB3aGVuIHN0eWxlcy9ldGMuIGNoYW5nZT9cblxuICAgICAgICAvLyBTd2FwIGluIG5ldyBkYXRhLCBmcmVlIG9sZCBkYXRhXG4gICAgICAgIHRoaXMuZnJlZVJlc291cmNlcygpO1xuICAgICAgICB0aGlzLm1lc2hlcyA9IG1lc2hlcztcbiAgICAgICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgICAgIHRoaXMuZGVidWcuZ2VvbV9yYXRpbyA9ICh0aGlzLmRlYnVnLmdlb21ldHJpZXMgLyB0aGlzLmRlYnVnLmZlYXR1cmVzKS50b0ZpeGVkKDEpO1xuICAgICAgICB0aGlzLnByaW50RGVidWcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICAgQ2FsbGVkIG9uIG1haW4gdGhyZWFkIHdoZW4gd2ViIHdvcmtlciBjb21wbGV0ZXMgcHJvY2Vzc2luZywgYnV0IHRpbGUgaGFzIHNpbmNlIGJlZW4gZGlzY2FyZGVkXG4gICAgICAgIEZyZWVzIHJlc291cmNlcyB0aGF0IHdvdWxkIGhhdmUgYmVlbiB0cmFuc2ZlcnJlZCB0byB0aGUgdGlsZSBvYmplY3QuXG4gICAgICAgIFN0YXRpYyBtZXRob2QgYmVjYXVzZSB0aGUgdGlsZSBvYmplY3Qgbm8gbG9uZ2VyIGV4aXN0cyAodGhlIHRpbGUgZGF0YSByZXR1cm5lZCBieSB0aGUgd29ya2VyIGlzIHBhc3NlZCBpbnN0ZWFkKS5cbiAgICAqL1xuICAgIHN0YXRpYyBhYm9ydEJ1aWxkICh0aWxlKSB7XG4gICAgICAgIGlmICh0aWxlLm1lc2hfZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcyBpbiB0aWxlLm1lc2hfZGF0YSkge1xuICAgICAgICAgICAgICAgIGxldCB0ZXh0dXJlcyA9IHRpbGUubWVzaF9kYXRhW3NdLnRleHR1cmVzO1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB0IG9mIHRleHR1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dHVyZSA9IFRleHR1cmUudGV4dHVyZXNbdF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy50cmFjZShgcmVsZWFzaW5nIHRleHR1cmUgJHt0fSBmb3IgdGlsZSAke3RpbGUua2V5fWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUucmVsZWFzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHJlbGF0aXZlIHRvIHZpZXdcbiAgICB1cGRhdGUgKCkge1xuICAgICAgICBsZXQgY29vcmRzID0gdGhpcy5jb29yZHM7XG4gICAgICAgIGlmIChjb29yZHMueiAhPT0gdGhpcy52aWV3LmNlbnRlci50aWxlLnopIHtcbiAgICAgICAgICAgIGNvb3JkcyA9IFRpbGUuY29vcmRpbmF0ZUF0Wm9vbShjb29yZHMsIHRoaXMudmlldy5jZW50ZXIudGlsZS56KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNlbnRlcl9kaXN0ID0gTWF0aC5hYnModGhpcy52aWV3LmNlbnRlci50aWxlLnggLSBjb29yZHMueCkgKyBNYXRoLmFicyh0aGlzLnZpZXcuY2VudGVyLnRpbGUueSAtIGNvb3Jkcy55KTtcbiAgICB9XG5cbiAgICAvLyBTZXQgYXMgYSBwcm94eSB0aWxlIGZvciBhbm90aGVyIHRpbGVcbiAgICBzZXRQcm94eUZvciAodGlsZSkge1xuICAgICAgICB0aGlzLnByb3h5ID0gdGlsZTtcbiAgICAgICAgaWYgKHRpbGUpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnByb3h5X2RlcHRoID0gMTsgLy8gZHJhdyBwcm94aWVzIGEgaGFsZi1sYXllciBiYWNrIChvcmRlciBpcyBzY2FsZWQgMnggdG8gYXZvaWQgaW50ZWdlciB0cnVuY2F0aW9uKVxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJveHlfZGVwdGggPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIG1vZGVsIG1hdHJpeCBhbmQgdGlsZSB1bmlmb3Jtc1xuICAgIHNldHVwUHJvZ3JhbSAoeyBtb2RlbCwgbW9kZWwzMiB9LCBwcm9ncmFtKSB7XG4gICAgICAgIC8vIFRpbGUgb3JpZ2luXG4gICAgICAgIHByb2dyYW0udW5pZm9ybSgnNGYnLCAndV90aWxlX29yaWdpbicsIHRoaXMubWluLngsIHRoaXMubWluLnksIHRoaXMuc3R5bGVfem9vbSwgdGhpcy5jb29yZHMueik7XG4gICAgICAgIHByb2dyYW0udW5pZm9ybSgnMWYnLCAndV90aWxlX3Byb3h5X2RlcHRoJywgdGhpcy5wcm94eV9kZXB0aCk7XG5cbiAgICAgICAgLy8gTW9kZWwgLSB0cmFuc2Zvcm0gdGlsZSBzcGFjZSBpbnRvIHdvcmxkIHNwYWNlIChtZXRlcnMsIGFic29sdXRlIG1lcmNhdG9yIHBvc2l0aW9uKVxuICAgICAgICBtYXQ0LmlkZW50aXR5KG1vZGVsKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUobW9kZWwsIG1vZGVsLCB2ZWMzLmZyb21WYWx1ZXModGhpcy5taW4ueCwgdGhpcy5taW4ueSwgMCkpO1xuICAgICAgICBtYXQ0LnNjYWxlKG1vZGVsLCBtb2RlbCwgdmVjMy5mcm9tVmFsdWVzKHRoaXMuc3Bhbi54IC8gR2VvLnRpbGVfc2NhbGUsIC0xICogdGhpcy5zcGFuLnkgLyBHZW8udGlsZV9zY2FsZSwgMSkpOyAvLyBzY2FsZSB0aWxlIGxvY2FsIGNvb3JkcyB0byBtZXRlcnNcbiAgICAgICAgbWF0NC5jb3B5KG1vZGVsMzIsIG1vZGVsKTtcbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCdNYXRyaXg0ZnYnLCAndV9tb2RlbCcsIGZhbHNlLCBtb2RlbDMyKTtcbiAgICB9XG5cbiAgICAvLyBTbGljZSBhIHN1YnNldCBvZiBrZXlzIG91dCBvZiBhIHRpbGVcbiAgICAvLyBJbmNsdWRlcyBhIG1pbmltdW0gc2V0IG9mIHByZS1kZWZpbmVkIGtleXMgZm9yIGxvYWQgc3RhdGUsIGRlYnVnLiBldGMuXG4gICAgLy8gV2UgdXNlIHRoaXMgdG8gc2VuZCBhIHN1YnNldCBvZiB0aGUgdGlsZSBiYWNrIHRvIHRoZSBtYWluIHRocmVhZCwgdG8gbWluaW1pemUgdW5uZWNlc3NhcnkgZGF0YSB0cmFuc2ZlclxuICAgIC8vIChlLmcuIHZlcnkgbGFyZ2UgaXRlbXMgbGlrZSBmZWF0dXJlIGdlb21ldHJ5IGFyZSBub3QgbmVlZGVkIG9uIHRoZSBtYWluIHRocmVhZClcbiAgICBzdGF0aWMgc2xpY2UgKHRpbGUsIGtleXMpIHtcbiAgICAgICAgbGV0IGtlZXAgPSBbXG4gICAgICAgICAgICAna2V5JyxcbiAgICAgICAgICAgICdsb2FkaW5nJyxcbiAgICAgICAgICAgICdsb2FkZWQnLFxuICAgICAgICAgICAgJ2dlbmVyYXRpb24nLFxuICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICdkZWJ1ZydcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgICAgICAgIGtlZXAucHVzaCguLi5rZXlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJ1aWxkIHRoZSB0aWxlIHN1YnNldFxuICAgICAgICB2YXIgdGlsZV9zdWJzZXQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtlZXApIHtcbiAgICAgICAgICAgIHRpbGVfc3Vic2V0W2tleV0gPSB0aWxlW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGlsZV9zdWJzZXQ7XG4gICAgfVxuXG4gICAgbWVyZ2Uob3RoZXIpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG90aGVyKSB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSAna2V5Jykge1xuICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IG90aGVyW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJpbnREZWJ1ZyAoKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGlsZTogZGVidWcgZm9yICR7dGhpcy5rZXl9OiBbICAke0pTT04uc3RyaW5naWZ5KHRoaXMuZGVidWcpfSBdYCk7XG4gICAgfVxuXG59XG5cblRpbGUuY29vcmRfY2hpbGRyZW4gPSB7fTsgLy8gb25seSBhbGxvY2F0ZSBjaGlsZHJlbiBjb29yZGluYXRlcyBvbmNlIHBlciBjb29yZGluYXRlXG4iLCJpbXBvcnQgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IFRpbGVQeXJhbWlkIGZyb20gJy4vdGlsZV9weXJhbWlkJztcblxuaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5cbmNvbnN0IFRpbGVNYW5hZ2VyID0ge1xuXG4gICAgaW5pdCh7IHNjZW5lLCB2aWV3IH0pIHtcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xuICAgICAgICB0aGlzLnZpZXcgPSB2aWV3O1xuICAgICAgICB0aGlzLnRpbGVzID0ge307XG4gICAgICAgIHRoaXMucHlyYW1pZCA9IFRpbGVQeXJhbWlkO1xuICAgICAgICB0aGlzLnB5cmFtaWQucmVzZXQoKTtcbiAgICAgICAgdGhpcy52aXNpYmxlX2Nvb3JkcyA9IHt9O1xuICAgICAgICB0aGlzLnF1ZXVlZF9jb29yZHMgPSBbXTtcbiAgICAgICAgdGhpcy5idWlsZGluZ190aWxlcyA9IG51bGw7XG4gICAgfSxcblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZm9yRWFjaFRpbGUodGlsZSA9PiB0aWxlLmRlc3Ryb3koKSk7XG4gICAgICAgIHRoaXMudGlsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5weXJhbWlkLnJlc2V0KCk7XG4gICAgICAgIHRoaXMudmlzaWJsZV9jb29yZHMgPSB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZWRfY29vcmRzID0gW107XG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xuICAgICAgICB0aGlzLnZpZXcgPSBudWxsO1xuICAgIH0sXG5cbiAgICBrZWVwVGlsZSh0aWxlKSB7XG4gICAgICAgIHRoaXMudGlsZXNbdGlsZS5rZXldID0gdGlsZTtcbiAgICAgICAgdGhpcy5weXJhbWlkLmFkZFRpbGUodGlsZSk7XG4gICAgfSxcblxuICAgIGhhc1RpbGUoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpbGVzW2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgZm9yZ2V0VGlsZShrZXkpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzVGlsZShrZXkpKSB7XG4gICAgICAgICAgICBsZXQgdGlsZSA9IHRoaXMudGlsZXNba2V5XTtcbiAgICAgICAgICAgIHRoaXMucHlyYW1pZC5yZW1vdmVUaWxlKHRpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIHRoaXMudGlsZXNba2V5XTtcbiAgICAgICAgdGhpcy50aWxlQnVpbGRTdG9wKGtleSk7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSBhIHNpbmdsZSB0aWxlXG4gICAgcmVtb3ZlVGlsZShrZXkpIHtcbiAgICAgICAgbG9nLnRyYWNlKGB0aWxlIHVubG9hZCBmb3IgJHtrZXl9YCk7XG5cbiAgICAgICAgdmFyIHRpbGUgPSB0aGlzLnRpbGVzW2tleV07XG5cbiAgICAgICAgaWYgKHRpbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGlsZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcmdldFRpbGUodGlsZS5rZXkpO1xuICAgICAgICB0aGlzLnNjZW5lLnJlcXVlc3RSZWRyYXcoKTtcbiAgICB9LFxuXG4gICAgLy8gUnVuIGEgZnVuY3Rpb24gb24gZWFjaCB0aWxlXG4gICAgZm9yRWFjaFRpbGUoZnVuYykge1xuICAgICAgICBmb3IgKGxldCB0IGluIHRoaXMudGlsZXMpIHtcbiAgICAgICAgICAgIGZ1bmModGhpcy50aWxlc1t0XSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gUmVtb3ZlIHRpbGVzIHRoYXQgcGFzcyBhIGZpbHRlciBjb25kaXRpb25cbiAgICByZW1vdmVUaWxlcyhmaWx0ZXIpIHtcbiAgICAgICAgbGV0IHJlbW92ZV90aWxlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCB0IGluIHRoaXMudGlsZXMpIHtcbiAgICAgICAgICAgIGxldCB0aWxlID0gdGhpcy50aWxlc1t0XTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIodGlsZSkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVfdGlsZXMucHVzaCh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCByPTA7IHIgPCByZW1vdmVfdGlsZXMubGVuZ3RoOyByKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSByZW1vdmVfdGlsZXNbcl07XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRpbGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVUaWxlc0ZvclZpZXcoKSB7XG4gICAgICAgIC8vIEZpbmQgdmlzaWJsZSB0aWxlcyBhbmQgbG9hZCBuZXcgb25lc1xuICAgICAgICBsZXQgcHJldl9jb29yZHMgPSBPYmplY3Qua2V5cyh0aGlzLnZpc2libGVfY29vcmRzKTtcbiAgICAgICAgdGhpcy52aXNpYmxlX2Nvb3JkcyA9IHt9O1xuICAgICAgICBsZXQgdGlsZV9jb29yZHMgPSB0aGlzLnZpZXcuZmluZFZpc2libGVUaWxlQ29vcmRpbmF0ZXMoKTtcbiAgICAgICAgZm9yIChsZXQgY29vcmRzIG9mIHRpbGVfY29vcmRzKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlQ29vcmRpbmF0ZShjb29yZHMpO1xuICAgICAgICAgICAgdGhpcy52aXNpYmxlX2Nvb3Jkc1tjb29yZHMua2V5XSA9IGNvb3JkcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHZpc2libGUgY29vcmRzIGNoYW5nZWRcbiAgICAgICAgLy8gVE9ETzogbW92ZSB0byBhIG5ldyB2aWV3IG1hbmFnZXIgb2JqZWN0XG4gICAgICAgIGxldCBuZXdfY29vcmRzID0gT2JqZWN0LmtleXModGhpcy52aXNpYmxlX2Nvb3Jkcyk7XG4gICAgICAgIGxldCBjb29yZHNfY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBpZiAocHJldl9jb29yZHMubGVuZ3RoICE9PSBuZXdfY29vcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29vcmRzX2NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHJldl9jb29yZHMuc29ydCgpO1xuICAgICAgICAgICAgbmV3X2Nvb3Jkcy5zb3J0KCk7XG4gICAgICAgICAgICBpZiAoIXByZXZfY29vcmRzLmV2ZXJ5KChjLCBpKSA9PiBuZXdfY29vcmRzW2ldID09PSBjKSkge1xuICAgICAgICAgICAgICAgIGNvb3Jkc19jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlVGlsZVN0YXRlcygpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVUaWxlU3RhdGVzICgpIHtcbiAgICAgICAgdGhpcy5mb3JFYWNoVGlsZSh0aWxlID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eSh0aWxlKTtcbiAgICAgICAgICAgIHRpbGUudXBkYXRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9hZFF1ZXVlZENvb3JkaW5hdGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlUHJveHlUaWxlcygpO1xuICAgICAgICB0aGlzLnZpZXcucHJ1bmVUaWxlc0ZvclZpZXcoKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlUHJveHlUaWxlcyAoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXcuem9vbV9kaXJlY3Rpb24gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFyIHByZXZpb3VzIHByb3hpZXNcbiAgICAgICAgdGhpcy5mb3JFYWNoVGlsZSh0aWxlID0+IHRpbGUuc2V0UHJveHlGb3IobnVsbCkpO1xuXG4gICAgICAgIGxldCBwcm94eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvckVhY2hUaWxlKHRpbGUgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlldy56b29tX2RpcmVjdGlvbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGlmICh0aWxlLnZpc2libGUgJiYgdGlsZS5sb2FkaW5nICYmIHRpbGUuY29vcmRzLnogPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwID0gdGhpcy5weXJhbWlkLmdldEFuY2VzdG9yKHRpbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcC5zZXRQcm94eUZvcih0aWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy56b29tX2RpcmVjdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAodGlsZS52aXNpYmxlICYmIHRpbGUubG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHRoaXMucHlyYW1pZC5nZXREZXNjZW5kYW50cyh0aWxlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdCBvZiBkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0LnNldFByb3h5Rm9yKHRpbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJveHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXByb3h5KSB7XG4gICAgICAgICAgICB0aGlzLnZpZXcuem9vbV9kaXJlY3Rpb24gPSAwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZVZpc2liaWxpdHkodGlsZSkge1xuICAgICAgICB0aWxlLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRpbGUuc3R5bGVfem9vbSA9PT0gdGhpcy52aWV3LnRpbGVfem9vbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZV9jb29yZHNbdGlsZS5jb29yZHMua2V5XSkge1xuICAgICAgICAgICAgICAgIHRpbGUudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBicnV0ZSBmb3JjZVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnZpc2libGVfY29vcmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChUaWxlLmlzRGVzY2VuZGFudCh0aWxlLmNvb3JkcywgdGhpcy52aXNpYmxlX2Nvb3Jkc1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSB0aWxlcyB0aGF0IGFyZW4ndCB2aXNpYmxlLCBhbmQgZmxhZyByZW1haW5pbmcgdmlzaWJsZSBvbmVzIHRvIGJlIHVwZGF0ZWQgKGZvciBsb2FkaW5nLCBwcm94eSwgZXRjLilcbiAgICBwcnVuZVRvVmlzaWJsZVRpbGVzICgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUaWxlcyh0aWxlID0+ICF0aWxlLnZpc2libGUpO1xuICAgIH0sXG5cbiAgICBnZXRSZW5kZXJhYmxlVGlsZXMoKSB7XG4gICAgICAgIGxldCB0aWxlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCB0IGluIHRoaXMudGlsZXMpIHtcbiAgICAgICAgICAgIGxldCB0aWxlID0gdGhpcy50aWxlc1t0XTtcbiAgICAgICAgICAgIGlmICh0aWxlLnZpc2libGUgJiYgdGlsZS5sb2FkZWQpIHtcbiAgICAgICAgICAgICAgICB0aWxlcy5wdXNoKHRpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWxlcztcbiAgICB9LFxuXG4gICAgaXNMb2FkaW5nVmlzaWJsZVRpbGVzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy50aWxlcykuc29tZShrID0+IHRoaXMudGlsZXNba10udmlzaWJsZSAmJiB0aGlzLnRpbGVzW2tdLmxvYWRpbmcpO1xuICAgIH0sXG5cbiAgICAvLyBRdWV1ZSBhIHRpbGUgZm9yIGxvYWRcbiAgICBxdWV1ZUNvb3JkaW5hdGUoY29vcmRzKSB7XG4gICAgICAgIHRoaXMucXVldWVkX2Nvb3Jkc1t0aGlzLnF1ZXVlZF9jb29yZHMubGVuZ3RoXSA9IGNvb3JkcztcbiAgICB9LFxuXG4gICAgLy8gTG9hZCBhbGwgcXVldWVkIHRpbGVzXG4gICAgbG9hZFF1ZXVlZENvb3JkaW5hdGVzKCkge1xuICAgICAgICBpZiAodGhpcy5xdWV1ZWRfY29vcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydCBxdWV1ZWQgdGlsZXMgZnJvbSBjZW50ZXIgdGlsZVxuICAgICAgICB0aGlzLnF1ZXVlZF9jb29yZHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgbGV0IGFkID0gTWF0aC5hYnModGhpcy52aWV3LmNlbnRlci50aWxlLnggLSBhLngpICsgTWF0aC5hYnModGhpcy52aWV3LmNlbnRlci50aWxlLnkgLSBhLnkpO1xuICAgICAgICAgICAgbGV0IGJkID0gTWF0aC5hYnModGhpcy52aWV3LmNlbnRlci50aWxlLnggLSBiLngpICsgTWF0aC5hYnModGhpcy52aWV3LmNlbnRlci50aWxlLnkgLSBiLnkpO1xuICAgICAgICAgICAgcmV0dXJuIChiZCA+IGFkID8gLTEgOiAoYmQgPT09IGFkID8gMCA6IDEpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucXVldWVkX2Nvb3Jkcy5mb3JFYWNoKGNvb3JkcyA9PiB0aGlzLmxvYWRDb29yZGluYXRlKGNvb3JkcykpO1xuICAgICAgICB0aGlzLnF1ZXVlZF9jb29yZHMgPSBbXTtcbiAgICB9LFxuXG4gICAgLy8gTG9hZCBhbGwgdGlsZXMgdG8gY292ZXIgYSBnaXZlbiBsb2dpY2FsIHRpbGUgY29vcmRpbmF0ZVxuICAgIGxvYWRDb29yZGluYXRlKGNvb3Jkcykge1xuICAgICAgICAvLyBTa2lwIGlmIG5vdCBhdCBjdXJyZW50IHNjZW5lIHpvb21cbiAgICAgICAgaWYgKGNvb3Jkcy56ICE9PSB0aGlzLnZpZXcuY2VudGVyLnRpbGUueikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIG5lY2Vzc2FyeSB0aWxlcyBmb3IgZWFjaCBzb3VyY2VcbiAgICAgICAgZm9yIChsZXQgcyBpbiB0aGlzLnNjZW5lLnNvdXJjZXMpIHtcbiAgICAgICAgICAgIGxldCBzb3VyY2UgPSB0aGlzLnNjZW5lLnNvdXJjZXNbc107XG4gICAgICAgICAgICBpZiAoIXNvdXJjZS50aWxlZCB8fCAhc291cmNlLmdlb21ldHJ5X3RpbGVzKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBrZXkgPSBUaWxlLmtleShjb29yZHMsIHNvdXJjZSwgdGhpcy52aWV3LnRpbGVfem9vbSk7XG4gICAgICAgICAgICBpZiAoa2V5ICYmICF0aGlzLmhhc1RpbGUoa2V5KSkge1xuICAgICAgICAgICAgICAgIGxldCB0aWxlID0gVGlsZS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvb3JkcyxcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyOiB0aGlzLnNjZW5lLm5leHRXb3JrZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVfem9vbTogdGhpcy52aWV3LnN0eWxlWm9vbShjb29yZHMueiksXG4gICAgICAgICAgICAgICAgICAgIHZpZXc6IHRoaXMudmlld1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5rZWVwVGlsZSh0aWxlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkVGlsZSh0aWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBTb3J0IGFuZCBidWlsZCBhIGxpc3Qgb2YgdGlsZXNcbiAgICBidWlsZFRpbGVzKHRpbGVzKSB7XG4gICAgICAgIFRpbGUuc29ydCh0aWxlcykuZm9yRWFjaCh0aWxlID0+IHRoaXMuYnVpbGRUaWxlKHRpbGUpKTtcbiAgICAgICAgdGhpcy5jaGVja0J1aWxkUXVldWUoKTtcbiAgICB9LFxuXG4gICAgYnVpbGRUaWxlKHRpbGUpIHtcbiAgICAgICAgdGhpcy50aWxlQnVpbGRTdGFydCh0aWxlLmtleSk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eSh0aWxlKTtcbiAgICAgICAgdGlsZS51cGRhdGUoKTtcbiAgICAgICAgdGlsZS5idWlsZCh0aGlzLnNjZW5lLmdlbmVyYXRpb24pXG4gICAgICAgICAgICAudGhlbihtZXNzYWdlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZSkgeyAvLyBlbXB0eSBtZXNzYWdlIG1lYW5zIHRpbGUgYnVpbGQgd2FzIGFib3J0ZWRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFRpbGVDb21wbGV0ZWQobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IoYEVycm9yIGJ1aWxkaW5nIHRpbGUgJHt0aWxlLmtleX06YCwgZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JnZXRUaWxlKHRpbGUua2V5KTtcbiAgICAgICAgICAgICAgICBUaWxlLmFib3J0QnVpbGQodGlsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLy8gQ2FsbGVkIG9uIG1haW4gdGhyZWFkIHdoZW4gYSB3ZWIgd29ya2VyIGNvbXBsZXRlcyBwcm9jZXNzaW5nIGZvciBhIHNpbmdsZSB0aWxlIChpbml0aWFsIGxvYWQsIG9yIHJlYnVpbGQpXG4gICAgYnVpbGRUaWxlQ29tcGxldGVkKHsgdGlsZSB9KSB7XG4gICAgICAgIC8vIFJlbW92ZWQgdGhpcyB0aWxlIGR1cmluZyBsb2FkP1xuICAgICAgICBpZiAodGhpcy50aWxlc1t0aWxlLmtleV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nLnRyYWNlKGBkaXNjYXJkZWQgdGlsZSAke3RpbGUua2V5fSBpbiBUaWxlTWFuYWdlci5idWlsZFRpbGVDb21wbGV0ZWQgYmVjYXVzZSBwcmV2aW91c2x5IHJlbW92ZWRgKTtcbiAgICAgICAgICAgIFRpbGUuYWJvcnRCdWlsZCh0aWxlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGlsZVN0YXRlcygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEJ1aWx0IHdpdGggYW4gb3V0ZGF0ZWQgc2NlbmUgY29uZmlndXJhdGlvbj9cbiAgICAgICAgZWxzZSBpZiAodGlsZS5nZW5lcmF0aW9uICE9PSB0aGlzLnNjZW5lLmdlbmVyYXRpb24pIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgZGlzY2FyZGVkIHRpbGUgJHt0aWxlLmtleX0gaW4gVGlsZU1hbmFnZXIuYnVpbGRUaWxlQ29tcGxldGVkIGJlY2F1c2UgYnVpbHQgd2l0aCBgICtcbiAgICAgICAgICAgICAgICBgc2NlbmUgY29uZmlnIGdlbiAke3RpbGUuZ2VuZXJhdGlvbn0sIGN1cnJlbnQgJHt0aGlzLnNjZW5lLmdlbmVyYXRpb259YCk7XG4gICAgICAgICAgICB0aGlzLmZvcmdldFRpbGUodGlsZS5rZXkpO1xuICAgICAgICAgICAgVGlsZS5hYm9ydEJ1aWxkKHRpbGUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUaWxlU3RhdGVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGlsZSB3aXRoIHByb3BlcnRpZXMgZnJvbSB3b3JrZXJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbGVzW3RpbGUua2V5XSkge1xuICAgICAgICAgICAgICAgIHRpbGUgPSB0aGlzLnRpbGVzW3RpbGUua2V5XS5tZXJnZSh0aWxlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGlsZS5idWlsZE1lc2hlcyh0aGlzLnNjZW5lLnN0eWxlcyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbGVTdGF0ZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2NlbmUucmVxdWVzdFJlZHJhdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aWxlQnVpbGRTdG9wKHRpbGUua2V5KTtcbiAgICB9LFxuXG4gICAgLy8gVHJhY2sgdGlsZSBidWlsZCBzdGF0ZVxuICAgIHRpbGVCdWlsZFN0YXJ0KGtleSkge1xuICAgICAgICB0aGlzLmJ1aWxkaW5nX3RpbGVzID0gdGhpcy5idWlsZGluZ190aWxlcyB8fCB7fTtcbiAgICAgICAgdGhpcy5idWlsZGluZ190aWxlc1trZXldID0gdHJ1ZTtcbiAgICAgICAgbG9nLnRyYWNlKGB0aWxlQnVpbGRTdGFydCBmb3IgJHtrZXl9OiAke09iamVjdC5rZXlzKHRoaXMuYnVpbGRpbmdfdGlsZXMpLmxlbmd0aH1gKTtcbiAgICB9LFxuXG4gICAgdGlsZUJ1aWxkU3RvcChrZXkpIHtcbiAgICAgICAgLy8gRG9uZSBidWlsZGluZz9cbiAgICAgICAgaWYgKHRoaXMuYnVpbGRpbmdfdGlsZXMpIHtcbiAgICAgICAgICAgIGxvZy50cmFjZShgdGlsZUJ1aWxkU3RvcCBmb3IgJHtrZXl9OiAke09iamVjdC5rZXlzKHRoaXMuYnVpbGRpbmdfdGlsZXMpLmxlbmd0aH1gKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1aWxkaW5nX3RpbGVzW2tleV07XG4gICAgICAgICAgICB0aGlzLmNoZWNrQnVpbGRRdWV1ZSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIENoZWNrIHN0YXR1cyBvZiB0aWxlIGJ1aWxkaW5nIHF1ZXVlIGFuZCBub3RpZnkgc2NlbmUgd2hlbiB3ZSdyZSBkb25lXG4gICAgY2hlY2tCdWlsZFF1ZXVlKCkge1xuICAgICAgICBpZiAoIXRoaXMuYnVpbGRpbmdfdGlsZXMgfHwgT2JqZWN0LmtleXModGhpcy5idWlsZGluZ190aWxlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkaW5nX3RpbGVzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2NlbmUudGlsZU1hbmFnZXJCdWlsZERvbmUoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBTdW0gb2YgYSBkZWJ1ZyBwcm9wZXJ0eSBhY3Jvc3MgdGlsZXNcbiAgICBnZXREZWJ1Z1N1bShwcm9wLCBmaWx0ZXIpIHtcbiAgICAgICAgdmFyIHN1bSA9IDA7XG4gICAgICAgIGZvciAodmFyIHQgaW4gdGhpcy50aWxlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMudGlsZXNbdF0uZGVidWdbcHJvcF0gIT0gbnVsbCAmJiAodHlwZW9mIGZpbHRlciAhPT0gJ2Z1bmN0aW9uJyB8fCBmaWx0ZXIodGhpcy50aWxlc1t0XSkgPT09IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgc3VtICs9IHRoaXMudGlsZXNbdF0uZGVidWdbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1bTtcbiAgICB9LFxuXG4gICAgLy8gQXZlcmFnZSBvZiBhIGRlYnVnIHByb3BlcnR5IGFjcm9zcyB0aWxlc1xuICAgIGdldERlYnVnQXZlcmFnZShwcm9wLCBmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVidWdTdW0ocHJvcCwgZmlsdGVyKSAvIE9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aDtcbiAgICB9XG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRpbGVNYW5hZ2VyO1xuIiwiaW1wb3J0IEdlbyBmcm9tICcuL2dlbyc7XG5pbXBvcnQgVGlsZSBmcm9tICcuL3RpbGUnO1xuXG5jb25zdCBUaWxlUHlyYW1pZCA9IHtcblxuICAgIGNvb3Jkczoge30sXG4gICAgbWF4X3Byb3h5X2Rlc2NlbmRhbnRfZGVwdGg6IDMsIC8vICMgb2YgbGV2ZWxzIGRlZXAgdG8gc2VhcmNoIGZvciBkZXNjZW5kYW50IHByb3h5IHRpbGVzXG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5jb29yZHMgPSB7fTtcbiAgICB9LFxuXG4gICAgc291cmNlVGlsZXMoY29vcmQsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5jb29yZHNbY29vcmQua2V5XSAmJlxuICAgICAgICAgICAgdGhpcy5jb29yZHNbY29vcmQua2V5XS5zb3VyY2VzICYmXG4gICAgICAgICAgICB0aGlzLmNvb3Jkc1tjb29yZC5rZXldLnNvdXJjZXMuZ2V0KHNvdXJjZS5uYW1lKSk7XG4gICAgfSxcblxuICAgIGFkZFRpbGUodGlsZSkge1xuICAgICAgICAvLyBBZGQgdGFyZ2V0IHRpbGVcbiAgICAgICAgbGV0IGtleSA9IHRpbGUuY29vcmRzLmtleTtcbiAgICAgICAgbGV0IGNvb3JkID0gdGhpcy5jb29yZHNba2V5XTtcbiAgICAgICAgaWYgKCFjb29yZCkge1xuICAgICAgICAgICAgY29vcmQgPSB0aGlzLmNvb3Jkc1trZXldID0geyBkZXNjZW5kYW50czogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb29yZC5zb3VyY2VzKSB7XG4gICAgICAgICAgICBjb29yZC5zb3VyY2VzID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb29yZC5zb3VyY2VzLmdldCh0aWxlLnNvdXJjZS5uYW1lKSkge1xuICAgICAgICAgICAgY29vcmQuc291cmNlcy5zZXQodGlsZS5zb3VyY2UubmFtZSwgbmV3IE1hcCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb29yZC5zb3VyY2VzLmdldCh0aWxlLnNvdXJjZS5uYW1lKS5zZXQodGlsZS5zdHlsZV96b29tLCB0aWxlKTtcblxuICAgICAgICAvLyBJbmNyZW1lbnQgcmVmZXJlbmNlIGNvdW50IHVwIHRoZSB0aWxlIHB5cmFtaWRcbiAgICAgICAgZm9yIChsZXQgeiA9IHRpbGUuY29vcmRzLnogLSAxOyB6ID49IDA7IHotLSkge1xuICAgICAgICAgICAgbGV0IHVwID0gVGlsZS5jb29yZGluYXRlQXRab29tKHRpbGUuY29vcmRzLCB6KTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb29yZHNbdXAua2V5XSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29vcmRzW3VwLmtleV0gPSB7IGRlc2NlbmRhbnRzOiAwIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvb3Jkc1t1cC5rZXldLmRlc2NlbmRhbnRzKys7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlVGlsZSh0aWxlKSB7XG4gICAgICAgIC8vIFJlbW92ZSB0YXJnZXQgdGlsZVxuICAgICAgICBsZXQgc291cmNlX3RpbGVzID0gdGhpcy5zb3VyY2VUaWxlcyh0aWxlLmNvb3JkcywgdGlsZS5zb3VyY2UpO1xuICAgICAgICBsZXQga2V5ID0gdGlsZS5jb29yZHMua2V5O1xuXG4gICAgICAgIGlmIChzb3VyY2VfdGlsZXMpIHtcbiAgICAgICAgICAgIHNvdXJjZV90aWxlcy5kZWxldGUodGlsZS5zdHlsZV96b29tKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VfdGlsZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBzb3VyY2VcbiAgICAgICAgICAgICAgICB0aGlzLmNvb3Jkc1trZXldLnNvdXJjZXMuZGVsZXRlKHRpbGUuc291cmNlLm5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvb3Jkc1trZXldLnNvdXJjZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jb29yZHNba2V5XS5zb3VyY2VzO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvb3Jkc1trZXldLmRlc2NlbmRhbnRzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgd2hvbGUgY29vcmRcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvb3Jkc1trZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCB1cCB0aGUgdGlsZSBweXJhbWlkXG4gICAgICAgIGZvciAobGV0IHogPSB0aWxlLmNvb3Jkcy56IC0gMTsgeiA+PSAwOyB6LS0pIHtcbiAgICAgICAgICAgIGxldCBkb3duID0gVGlsZS5jb29yZGluYXRlQXRab29tKHRpbGUuY29vcmRzLCB6KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvb3Jkc1tkb3duLmtleV0gJiYgdGhpcy5jb29yZHNbZG93bi5rZXldLmRlc2NlbmRhbnRzID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29vcmRzW2Rvd24ua2V5XS5kZXNjZW5kYW50cy0tO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvb3Jkc1tkb3duLmtleV0uZGVzY2VuZGFudHMgPT09IDAgJiYgIXRoaXMuY29vcmRzW2Rvd24ua2V5XS5zb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvb3Jkc1tkb3duLmtleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldEFuY2VzdG9yICh7IGNvb3Jkcywgc3R5bGVfem9vbSwgc291cmNlIH0pIHtcbiAgICAgICAgLy8gRmlyc3QgY2hlY2sgb3Zlcnpvb21lZCB0aWxlcyBhdCBzYW1lIGNvb3JkaW5hdGUgem9vbVxuICAgICAgICBpZiAoc3R5bGVfem9vbSA+IHNvdXJjZS5tYXhfem9vbSkge1xuICAgICAgICAgICAgbGV0IHNvdXJjZV90aWxlcyA9IHRoaXMuc291cmNlVGlsZXMoY29vcmRzLCBzb3VyY2UpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZV90aWxlcykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHogPSBzdHlsZV96b29tIC0gMTsgeiA+PSBzb3VyY2UubWF4X3pvb207IHotLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlX3RpbGVzLmhhcyh6KSAmJiBzb3VyY2VfdGlsZXMuZ2V0KHopLmxvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZV90aWxlcy5nZXQoeik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHlsZV96b29tID0gc291cmNlLm1heF96b29tO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgdGlsZXMgYXQgbmV4dCB6b29tIHVwXG4gICAgICAgIHN0eWxlX3pvb20tLTtcbiAgICAgICAgbGV0IHBhcmVudCA9IFRpbGUuY29vcmRpbmF0ZUF0Wm9vbShjb29yZHMsIGNvb3Jkcy56IC0gMSk7XG4gICAgICAgIGxldCBwYXJlbnRfdGlsZXMgPSB0aGlzLnNvdXJjZVRpbGVzKHBhcmVudCwgc291cmNlKTtcbiAgICAgICAgaWYgKHBhcmVudF90aWxlcyAmJiBwYXJlbnRfdGlsZXMuaGFzKHN0eWxlX3pvb20pICYmIHBhcmVudF90aWxlcy5nZXQoc3R5bGVfem9vbSkubG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50X3RpbGVzLmdldChzdHlsZV96b29tKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWRuJ3QgZmluZCBhbmNlc3RvciwgdHJ5IG5leHQgbGV2ZWxcbiAgICAgICAgLy8gVE9ETzogbWF4IGRlcHRoIGxldmVscyB0byBjaGVja1xuICAgICAgICBpZiAocGFyZW50LnogPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBbmNlc3Rvcih7IGNvb3JkczogcGFyZW50LCBzdHlsZV96b29tLCBzb3VyY2UgfSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RGVzY2VuZGFudHMgKHsgY29vcmRzLCBzdHlsZV96b29tLCBzb3VyY2UgfSwgbGV2ZWwgPSAxKSB7XG4gICAgICAgIGxldCBkZXNjZW5kYW50cyA9IFtdO1xuXG4gICAgICAgIC8vIEZpcnN0IGNoZWNrIG92ZXJ6b29tZWQgdGlsZXMgYXQgc2FtZSBjb29yZGluYXRlIHpvb21cbiAgICAgICAgaWYgKHN0eWxlX3pvb20gPj0gc291cmNlLm1heF96b29tKSB7XG4gICAgICAgICAgICBsZXQgc291cmNlX3RpbGVzID0gdGhpcy5zb3VyY2VUaWxlcyhjb29yZHMsIHNvdXJjZSk7XG4gICAgICAgICAgICBpZiAoc291cmNlX3RpbGVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNlYXJjaF9tYXhfem9vbSA9IE1hdGgubWF4KEdlby5kZWZhdWx0X3ZpZXdfbWF4X3pvb20sIHN0eWxlX3pvb20gKyB0aGlzLm1heF9wcm94eV9kZXNjZW5kYW50X2RlcHRoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB6ID0gc3R5bGVfem9vbSArIDE7IHogPD0gc2VhcmNoX21heF96b29tOyB6KyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZV90aWxlcy5oYXMoeikgJiYgc291cmNlX3RpbGVzLmdldCh6KS5sb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NlbmRhbnRzLnB1c2goc291cmNlX3RpbGVzLmdldCh6KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzY2VuZGFudHM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVzY2VuZGFudHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayB0aWxlcyBhdCBuZXh0IHpvb20gZG93blxuICAgICAgICBpZiAodGhpcy5jb29yZHNbY29vcmRzLmtleV0gJiYgdGhpcy5jb29yZHNbY29vcmRzLmtleV0uZGVzY2VuZGFudHMgPiAwKSB7XG4gICAgICAgICAgICBzdHlsZV96b29tKys7XG4gICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBUaWxlLmNoaWxkcmVuRm9yQ29vcmRpbmF0ZShjb29yZHMpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkX3RpbGVzID0gdGhpcy5zb3VyY2VUaWxlcyhjaGlsZCwgc291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRfdGlsZXMgJiYgY2hpbGRfdGlsZXMuaGFzKHN0eWxlX3pvb20pICYmIGNoaWxkX3RpbGVzLmdldChzdHlsZV96b29tKS5sb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGFudHMucHVzaChjaGlsZF90aWxlcy5nZXQoc3R5bGVfem9vbSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBkaWRuJ3QgZmluZCBjaGlsZCwgdHJ5IG5leHQgbGV2ZWxcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChsZXZlbCA8PSB0aGlzLm1heF9wcm94eV9kZXNjZW5kYW50X2RlcHRoICYmIGNoaWxkLnogPD0gc291cmNlLm1heF96b29tKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NlbmRhbnRzLnB1c2goLi4udGhpcy5nZXREZXNjZW5kYW50cyh7IGNvb3JkczogY2hpbGQsIHNvdXJjZSwgc3R5bGVfem9vbSB9LCBsZXZlbCArIDEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVzY2VuZGFudHM7XG4gICAgfVxuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaWxlUHlyYW1pZDtcbiIsIlxuXG5leHBvcnQgY2xhc3MgTWV0aG9kTm90SW1wbGVtZW50ZWQgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kTmFtZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm5hbWUgICAgPSAnTWV0aG9kTm90SW1wbGVtZW50ZWQnO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnTWV0aG9kICcgKyBtZXRob2ROYW1lICsgJyBtdXN0IGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzJztcbiAgICB9XG59XG4iLCIvLyBQYXJ0aWFsIGltcG9ydCBvZiBnbC1tYXRyaXggdmlhIG1vZHVsYXJpemVkIHN0YWNrLWdsIGZvcmtzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdG9qaS9nbC1tYXRyaXhcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdGFja2dsXG5cbi8vIHZlYzNcblxuLy8gU3Vic3RpdHV0ZSA2NC1iaXQgdmVyc2lvblxuLy8gV2UgbmVlZCB0aGUgZXh0cmEgcHJlY2lzaW9uIHdoZW4gbXVsdGlwbHlpbmcgbWF0cmljZXMgdy9tZXJjYXRvciBwcm9qZWN0ZWQgdmFsdWVzXG5jb25zdCB2ZWMzID0ge1xuICAgIGZyb21WYWx1ZXMgKHgsIHksIHopIHtcbiAgICAgICAgdmFyIG91dCA9IG5ldyBGbG9hdDY0QXJyYXkoMyk7XG4gICAgICAgIG91dFswXSA9IHg7XG4gICAgICAgIG91dFsxXSA9IHk7XG4gICAgICAgIG91dFsyXSA9IHo7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxufTtcblxuXG4vLyBtYXQzXG5cbmltcG9ydCB7ZGVmYXVsdCBhcyBtYXQzX25vcm1hbEZyb21NYXQ0fSBmcm9tICdnbC1tYXQzL25vcm1hbC1mcm9tLW1hdDQnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIG1hdDNfaW52ZXJ0fSBmcm9tICdnbC1tYXQzL2ludmVydCc7XG5cbmNvbnN0IG1hdDMgPSB7XG4gICAgbm9ybWFsRnJvbU1hdDQ6IG1hdDNfbm9ybWFsRnJvbU1hdDQsXG4gICAgaW52ZXJ0OiBtYXQzX2ludmVydFxufTtcblxuXG4vLyBtYXQ0XG5cbmltcG9ydCB7ZGVmYXVsdCBhcyBtYXQ0X211bHRpcGx5fSBmcm9tICdnbC1tYXQ0L211bHRpcGx5JztcbmltcG9ydCB7ZGVmYXVsdCBhcyBtYXQ0X3RyYW5zbGF0ZX0gZnJvbSAnZ2wtbWF0NC90cmFuc2xhdGUnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIG1hdDRfc2NhbGV9IGZyb20gJ2dsLW1hdDQvc2NhbGUnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIG1hdDRfcGVyc3BlY3RpdmV9IGZyb20gJ2dsLW1hdDQvcGVyc3BlY3RpdmUnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIG1hdDRfbG9va0F0fSBmcm9tICdnbC1tYXQ0L2xvb2tBdCc7XG5pbXBvcnQge2RlZmF1bHQgYXMgbWF0NF9pZGVudGl0eX0gZnJvbSAnZ2wtbWF0NC9pZGVudGl0eSc7XG5pbXBvcnQge2RlZmF1bHQgYXMgbWF0NF9jb3B5fSBmcm9tICdnbC1tYXQ0L2NvcHknO1xuXG5jb25zdCBtYXQ0ID0ge1xuICAgIG11bHRpcGx5OiBtYXQ0X211bHRpcGx5LFxuICAgIHRyYW5zbGF0ZTogbWF0NF90cmFuc2xhdGUsXG4gICAgc2NhbGU6IG1hdDRfc2NhbGUsXG4gICAgcGVyc3BlY3RpdmU6IG1hdDRfcGVyc3BlY3RpdmUsXG4gICAgbG9va0F0OiBtYXQ0X2xvb2tBdCxcbiAgICBpZGVudGl0eTogbWF0NF9pZGVudGl0eSxcbiAgICBjb3B5OiBtYXQ0X2NvcHlcbn07XG5cblxuZXhwb3J0IHt2ZWMzLCBtYXQzLCBtYXQ0fTtcbiIsIi8vIERlZXAvcmVjdXJzaXZlIG1lcmdlIG9mIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIGludG8gYSBkZXN0aW5hdGlvbiBvYmplY3RcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlT2JqZWN0cyAoZGVzdCwgLi4uc291cmNlcykge1xuICAgIGZvciAobGV0IHM9MDsgcyA8IHNvdXJjZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgbGV0IHNvdXJjZSA9IHNvdXJjZXNbc107XG4gICAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IG1lcmdlIHRoZSBzb3VyY2UgaW50byB0aGUgZGVzdGluYXRpb24gaWYgaXQgaXMgYSBhIG5vbi1udWxsIGtleS92YWx1ZSBvYmplY3RcbiAgICAgICAgICAgIC8vIChlLmcuIGRvbid0IG1lcmdlIGFycmF5cywgdGhvc2UgYXJlIHRyZWF0ZWQgYXMgc2NhbGFyIHZhbHVlczsgbnVsbCB2YWx1ZXMgd2lsbCBvdmVyd3JpdGUvZXJhc2VcbiAgICAgICAgICAgIC8vIHRoZSBwcmV2aW91cyBkZXN0aW5hdGlvbiB2YWx1ZSlcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRlc3Rba2V5XSA9IG1lcmdlT2JqZWN0cyhkZXN0W2tleV0gfHwge30sIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgZGVzdGluYXRpb24gdmFsdWUgaWYgdGhlIHNvdXJjZSBwcm9wZXJ0eSBpczogYSBzY2FsYXIgKG51bWJlci9zdHJpbmcpLFxuICAgICAgICAgICAgLy8gYW4gYXJyYXksIG9yIGEgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRlc3Rba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVW5kZWZpbmVkIHNvdXJjZSBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVkXG4gICAgICAgIH1cblxuICAgIH1cbiAgICByZXR1cm4gZGVzdDtcbn1cbiIsImltcG9ydCBWZWN0b3IgZnJvbSAnLi4vdmVjdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT0JCIHtcblxuICAgIGNvbnN0cnVjdG9yICh4LCB5LCBhLCB3LCBoKSB7XG4gICAgICAgIHRoaXMuZGltZW5zaW9uID0gW3csIGhdO1xuICAgICAgICB0aGlzLmFuZ2xlID0gYTtcbiAgICAgICAgdGhpcy5jZW50cm9pZCA9IFt4LCB5XTtcbiAgICAgICAgdGhpcy5xdWFkID0gW107XG4gICAgICAgIHRoaXMuYXhlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgbW92ZSAocHgsIHB5KSB7XG4gICAgXHR0aGlzLmNlbnRyb2lkID0gW3B4LCBweV07XG5cbiAgICBcdHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgZ2V0RXh0ZW50ICgpIHtcbiAgICBcdGxldCBpbmYgPSAxZTY7XG4gICAgXHRsZXQgYWFiYiA9IFtpbmYsIGluZiwgLWluZiwgLWluZl07XG5cbiAgICBcdGZvciAobGV0IGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICAgICAgICBhYWJiWzBdID0gTWF0aC5taW4odGhpcy5xdWFkW2ldWzBdLCBhYWJiWzBdKTtcbiAgICAgICAgICAgIGFhYmJbMV0gPSBNYXRoLm1pbih0aGlzLnF1YWRbaV1bMV0sIGFhYmJbMV0pO1xuICAgICAgICAgICAgYWFiYlsyXSA9IE1hdGgubWF4KHRoaXMucXVhZFtpXVswXSwgYWFiYlsyXSk7XG4gICAgICAgICAgICBhYWJiWzNdID0gTWF0aC5tYXgodGhpcy5xdWFkW2ldWzFdLCBhYWJiWzNdKTtcbiAgICBcdH1cblxuICAgIFx0cmV0dXJuIGFhYmI7XG4gICAgfVxuXG4gICAgcGVycEF4ZXMgKCkge1xuICAgIFx0dGhpcy5heGVzWzBdID0gVmVjdG9yLm5vcm1hbGl6ZShWZWN0b3Iuc3ViKHRoaXMucXVhZFsyXSwgdGhpcy5xdWFkWzNdKSk7XG4gICAgXHR0aGlzLmF4ZXNbMV0gPSBWZWN0b3Iubm9ybWFsaXplKFZlY3Rvci5zdWIodGhpcy5xdWFkWzJdLCB0aGlzLnF1YWRbMV0pKTtcbiAgICB9XG5cbiAgICB1cGRhdGUgKCkge1xuICAgIFx0bGV0IHggPSBbIE1hdGguY29zKHRoaXMuYW5nbGUpLCBNYXRoLnNpbih0aGlzLmFuZ2xlKV07XG4gICAgXHRsZXQgeSA9IFstTWF0aC5zaW4odGhpcy5hbmdsZSksIE1hdGguY29zKHRoaXMuYW5nbGUpXTtcblxuICAgIFx0eCA9IFZlY3Rvci5tdWx0KHgsIHRoaXMuZGltZW5zaW9uWzBdIC8gMi4wKTtcbiAgICBcdHkgPSBWZWN0b3IubXVsdCh5LCB0aGlzLmRpbWVuc2lvblsxXSAvIDIuMCk7XG5cbiAgICBcdHRoaXMucXVhZFswXSA9IFZlY3Rvci5zdWIoVmVjdG9yLnN1Yih0aGlzLmNlbnRyb2lkLCB4KSwgeSk7IC8vIGxvd2VyLWxlZnRcbiAgICBcdHRoaXMucXVhZFsxXSA9IFZlY3Rvci5zdWIoVmVjdG9yLmFkZCh0aGlzLmNlbnRyb2lkLCB4KSwgeSk7IC8vIGxvd2VyLXJpZ2h0XG4gICAgXHR0aGlzLnF1YWRbMl0gPSBWZWN0b3IuYWRkKFZlY3Rvci5hZGQodGhpcy5jZW50cm9pZCwgeCksIHkpOyAvLyB1cGVyLXJpZ2h0XG4gICAgXHR0aGlzLnF1YWRbM10gPSBWZWN0b3IuYWRkKFZlY3Rvci5zdWIodGhpcy5jZW50cm9pZCwgeCksIHkpOyAvLyB1cGVyLWxlZnRcblxuICAgIFx0dGhpcy5wZXJwQXhlcygpO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcm9qZWN0VG9BeGlzIChvYmIsIGF4aXMpIHtcbiAgICBcdGxldCBpbmYgPSAxZTY7XG4gICAgXHRsZXQgbWluID0gaW5mO1xuICAgIFx0bGV0IG1heCA9IC1pbmY7XG5cbiAgICBcdGxldCBxdWFkID0gb2JiLnF1YWQ7XG5cbiAgICBcdC8vIGZvciBlYWNoIGF4aXMsIHByb2plY3Qgb2JiIHF1YWQgdG8gaXQgYW5kIGZpbmQgbWluIGFuZCBtYXggdmFsdWVzXG4gICAgXHRmb3IgKGxldCBpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgICAgICAgbGV0IGQgPSAgVmVjdG9yLmRvdChxdWFkW2ldLCBheGlzKTtcbiAgICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgZCk7XG4gICAgICAgICAgICBtYXggPSBNYXRoLm1heChtYXgsIGQpO1xuICAgIFx0fVxuXG4gICAgXHRyZXR1cm4gW21pbiwgbWF4XTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXhpc0NvbGxpZGUgKG9iYl9hLCBvYmJfYiwgYXhlcykge1xuICAgIFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAyOyArK2kpIHtcbiAgICBcdFx0bGV0IGFfcHJvaiA9IE9CQi5wcm9qZWN0VG9BeGlzKG9iYl9hLCBheGVzW2ldKTtcbiAgICBcdFx0bGV0IGJfcHJvaiA9IE9CQi5wcm9qZWN0VG9BeGlzKG9iYl9iLCBheGVzW2ldKTtcblxuICAgIFx0XHRpZiAoYl9wcm9qWzBdID4gYV9wcm9qWzFdIHx8IGJfcHJvalsxXSA8IGFfcHJvalswXSkge1xuICAgIFx0XHRcdHJldHVybiBmYWxzZTtcbiAgICBcdFx0fVxuICAgIFx0fVxuICAgIFx0cmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc3RhdGljIGludGVyc2VjdChvYmJfYSwgb2JiX2IpIHtcbiAgICBcdHJldHVybiBPQkIuYXhpc0NvbGxpZGUob2JiX2EsIG9iYl9iLCBvYmJfYS5heGVzKSAmJiBPQkIuYXhpc0NvbGxpZGUob2JiX2EsIG9iYl9iLCBvYmJfYi5heGVzKTtcbiAgICB9XG5cbn1cblxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3Vic2NyaWJlTWl4aW4gKHRhcmdldCkge1xuXG4gICAgdmFyIGxpc3RlbmVycyA9IG5ldyBTZXQoKTtcbiAgICAvLyB2YXIgbGlzdGVuZXJzID0gW107XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih0YXJnZXQsIHtcblxuICAgICAgICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgICAgICAgICAgLy8gbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIC8vIHZhciBpbmRleCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIC8vIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAvLyAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdW5zdWJzY3JpYmVBbGwoKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMuY2xlYXIoKTtcbiAgICAgICAgICAgIC8vIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRyaWdnZXIoZXZlbnQsIC4uLmRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGxpc3RlbmVyIG9mIGxpc3RlbmVycykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJbZXZlbnRdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyW2V2ZW50XSguLi5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH0pO1xuXG59XG4iLCIvLyBNaXNjZWxsYW5lb3VzIHV0aWxpdGllc1xuLypqc2hpbnQgd29ya2VyOiB0cnVlKi9cblxuaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5pbXBvcnQgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCBHZW8gZnJvbSAnLi4vZ2VvJztcblxudmFyIFV0aWxzO1xuZXhwb3J0IGRlZmF1bHQgVXRpbHMgPSB7fTtcblxuLy8gQWRkIGEgYmFzZSBVUkwgZm9yIHNjaGVtZWxlc3Mgb3IgcHJvdG9jb2wtbGVzcyBVUkxzXG4vLyBEZWZhdWx0cyB0byBhZGRpbmcgY3VycmVudCB3aW5kb3cgcHJvdG9jb2wgYW5kIGJhc2UsIG9yIGFkZHMgYSBjdXN0b20gYmFzZSBpZiBzcGVjaWZpZWRcbi8vIE1heWJlIHVzZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcyBpZiBtb3JlIHJvYnVzdCBmdW5jdGlvbmFsaXR5IGlzIG5lZWRlZFxuVXRpbHMuYWRkQmFzZVVSTCA9IGZ1bmN0aW9uICh1cmwsIGJhc2UpIHtcbiAgICBpZiAoIXVybCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2NoZW1lbGVzcywgYWRkIHByb3RvY29sXG4gICAgaWYgKHVybC5zdWJzdHIoMCwgMikgPT09ICcvLycpIHtcbiAgICAgICAgdXJsID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgdXJsO1xuICAgIH1cbiAgICAvLyBObyBodHRwKHMpIG9yIGRhdGEsIGFkZCBiYXNlXG4gICAgZWxzZSBpZiAodXJsLnNlYXJjaCgvXihodHRwfGh0dHBzfGRhdGF8YmxvYik6LykgPCAwKSB7XG4gICAgICAgIHZhciByZWxhdGl2ZSA9ICh1cmxbMF0gIT09ICcvJyk7XG4gICAgICAgIHZhciBiYXNlX2luZm87XG4gICAgICAgIGlmIChiYXNlKSB7XG4gICAgICAgICAgICBiYXNlX2luZm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7IC8vIHVzZSBhIHRlbXBvcmFyeSBlbGVtZW50IHRvIHBhcnNlIFVSTFxuICAgICAgICAgICAgYmFzZV9pbmZvLmhyZWYgPSBiYXNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYmFzZV9pbmZvID0gd2luZG93LmxvY2F0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbGF0aXZlKSB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IGJhc2VfaW5mby5ocmVmLm1hdGNoKC8oW15cXCNdKykvKTsgLy8gc3RyaXAgaGFzaFxuICAgICAgICAgICAgcGF0aCA9IChwYXRoICYmIHBhdGgubGVuZ3RoID4gMSkgPyBwYXRoWzBdIDogJyc7XG4gICAgICAgICAgICB1cmwgPSBwYXRoICsgdXJsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gRWFzeSB3YXlcbiAgICAgICAgICAgIGlmIChiYXNlX2luZm8ub3JpZ2luKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gYmFzZV9pbmZvLm9yaWdpbiArICcvJyArIHVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEhhcmQgd2F5IChJRTExKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIG9yaWdpbiA9IHVybC5tYXRjaCgvXigoaHR0cHxodHRwc3xkYXRhfGJsb2IpOlxcL1xcL1teXFwvXSpcXC8pLyk7XG4gICAgICAgICAgICAgICAgb3JpZ2luID0gKG9yaWdpbiAmJiBvcmlnaW4ubGVuZ3RoID4gMSkgPyBvcmlnaW5bMF0gOiAnJztcbiAgICAgICAgICAgICAgICB1cmwgPSBvcmlnaW4gKyB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn07XG5cblV0aWxzLnBhdGhGb3JVUkwgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgaWYgKHVybCAmJiB1cmwuc2VhcmNoKC9eKGRhdGF8YmxvYik6LykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiB1cmwuc3Vic3RyKDAsIHVybC5sYXN0SW5kZXhPZignLycpICsgMSkgfHwgJy4vJztcbiAgICB9XG4gICAgcmV0dXJuICcuLyc7XG59O1xuXG5VdGlscy5jYWNoZUJ1c3RlckZvclVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICBpZiAodXJsLnNlYXJjaCgvXihkYXRhfGJsb2IpOi8pID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHVybDsgLy8gbm8gY2FjaGUtYnVzdGluZyBvbiBvYmplY3Qgb3IgZGF0YSBVUkxzXG4gICAgfVxuICAgIGlmICh1cmwuaW5kZXhPZignPycpID4gLTEpIHtcbiAgICAgICAgdXJsICs9ICcmJyArICgrbmV3IERhdGUoKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB1cmwgKz0gJz8nICsgKCtuZXcgRGF0ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn07XG5cbi8vIEFkZCBhIHNldCBvZiBxdWVyeSBzdHJpbmcgcGFyYW1zIHRvIGEgVVJMXG4vLyBwYXJhbXM6IGhhc2ggb2Yga2V5L3ZhbHVlIHBhaXJzIG9mIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzXG5VdGlscy5hZGRQYXJhbXNUb1VSTCA9IGZ1bmN0aW9uICh1cmwsIHBhcmFtcykge1xuICAgIGlmICghcGFyYW1zIHx8IE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgdmFyIHFzX2luZGV4ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICB2YXIgaGFzaF9pbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG5cbiAgICAvLyBTYXZlIGFuZCB0cmltIGhhc2hcbiAgICB2YXIgaGFzaCA9ICcnO1xuICAgIGlmIChoYXNoX2luZGV4ID4gLTEpIHtcbiAgICAgICAgaGFzaCA9IHVybC5zbGljZShoYXNoX2luZGV4KTtcbiAgICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2hfaW5kZXgpO1xuICAgIH1cblxuICAgIC8vIFN0YXJ0IHF1ZXJ5IHN0cmluZ1xuICAgIGlmIChxc19pbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcXNfaW5kZXggPSB1cmwubGVuZ3RoO1xuICAgICAgICB1cmwgKz0gJz8nO1xuICAgIH1cbiAgICBxc19pbmRleCsrOyAvLyBhZHZhbmNlZCBwYXN0ICc/J1xuXG4gICAgLy8gQnVpbGQgcXVlcnkgc3RyaW5nIHBhcmFtc1xuICAgIHZhciB1cmxfcGFyYW1zID0gJyc7XG4gICAgZm9yICh2YXIgcCBpbiBwYXJhbXMpIHtcbiAgICAgICAgdXJsX3BhcmFtcyArPSBgJHtwfT0ke3BhcmFtc1twXX0mYDtcbiAgICB9XG5cbiAgICAvLyBJbnNlcnQgbmV3IHF1ZXJ5IHN0cmluZyBwYXJhbXMgYW5kIHJlc3RvcmUgaGFzaFxuICAgIC8vIE5PVEU6IGRvZXNuJ3QgcmVwbGFjZSBhbnkgdmFsdWVzIGFscmVhZHkgcHJlc2VudCBvbiBxdWVyeSBzdHJpbmcsIGp1c3QgaW5zZXJ0cyBkdXBlIHZhbHVlc1xuICAgIHVybCA9IHVybC5zbGljZSgwLCBxc19pbmRleCkgKyB1cmxfcGFyYW1zICsgdXJsLnNsaWNlKHFzX2luZGV4KSArIGhhc2g7XG5cbiAgICByZXR1cm4gdXJsO1xufTtcblxuLy8gUG9seWZpbGwgKGZvciBTYWZhcmkgY29tcGF0aWJpbGl0eSlcblV0aWxzLl9jcmVhdGVPYmplY3RVUkwgPSB1bmRlZmluZWQ7XG5VdGlscy5jcmVhdGVPYmplY3RVUkwgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgaWYgKFV0aWxzLl9jcmVhdGVPYmplY3RVUkwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBVdGlscy5fY3JlYXRlT2JqZWN0VVJMID0gKHdpbmRvdy5VUkwgJiYgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwpIHx8ICh3aW5kb3cud2Via2l0VVJMICYmIHdpbmRvdy53ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKTtcblxuICAgICAgICBpZiAodHlwZW9mIFV0aWxzLl9jcmVhdGVPYmplY3RVUkwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIFV0aWxzLl9jcmVhdGVPYmplY3RVUkwgPSBudWxsO1xuICAgICAgICAgICAgbG9nLndhcm4oYHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMIChvciB2ZW5kb3IgcHJlZml4KSBub3QgZm91bmQsIHVuYWJsZSB0byBjcmVhdGUgbG9jYWwgYmxvYiBVUkxzYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoVXRpbHMuX2NyZWF0ZU9iamVjdFVSTCkge1xuICAgICAgICByZXR1cm4gVXRpbHMuX2NyZWF0ZU9iamVjdFVSTCh1cmwpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG59O1xuXG5VdGlscy5pbyA9IGZ1bmN0aW9uICh1cmwsIHRpbWVvdXQgPSA2MDAwMCwgcmVzcG9uc2VUeXBlID0gJ3RleHQnLCBtZXRob2QgPSAnR0VUJywgaGVhZGVycyA9IHt9KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKTtcbiAgICAgICAgcmVxdWVzdC50aW1lb3V0ID0gdGltZW91dDtcbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGU7XG4gICAgICAgIHJlcXVlc3Qub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICBpZiAoWyd0ZXh0JywgJ2pzb24nXS5pbmRleE9mKHJlcXVlc3QucmVzcG9uc2VUeXBlKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxdWVzdC5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcignUmVxdWVzdCBlcnJvciB3aXRoIGEgc3RhdHVzIG9mICcgKyByZXF1ZXN0LnN0YXR1c1RleHQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gKGV2dCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KEVycm9yKCdUaGVyZSB3YXMgYSBuZXR3b3JrIGVycm9yJyArIGV2dC50b1N0cmluZygpKSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlcXVlc3Qub250aW1lb3V0ID0gKGV2dCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KEVycm9yKCd0aW1lb3V0ICcrIGV2dC50b1N0cmluZygpKSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsICdyZXF1ZXN0Jywge1xuICAgICAgICB2YWx1ZTogcmVxdWVzdFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5VdGlscy5wYXJzZVJlc291cmNlID0gZnVuY3Rpb24gKGJvZHkpIHtcbiAgICB2YXIgZGF0YTtcbiAgICB0cnkge1xuICAgICAgICAvLyBqc3lhbWwgJ2pzb24nIG9wdGlvbiBhbGxvd3MgZHVwbGljYXRlIGtleXNcbiAgICAgICAgLy8gS2VlcGluZyB0aGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0IHNob3VsZCBjb25zaWRlciBtaWdyYXRpbmcgdG8gcmVxdWlyaW5nXG4gICAgICAgIC8vIHVuaXF1ZSBrZXlzLCBhcyB0aGlzIGlzIFlBTUwgc3BlYy4gQnV0IFRhbmdyYW0gRVMgY3VycmVudGx5IGFjY2VwdHMgZHVwZSBrZXlzIGFzIHdlbGwsXG4gICAgICAgIC8vIHNvIHNob3VsZCBjb25zaWRlciBob3cgYmVzdCB0byB1bmlmeS5cbiAgICAgICAgZGF0YSA9IHlhbWwuc2FmZUxvYWQoYm9keSwgeyBqc29uOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG5VdGlscy5sb2FkUmVzb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBVdGlscy5pbyhVdGlscy5jYWNoZUJ1c3RlckZvclVybChzb3VyY2UpKS50aGVuKChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBVdGlscy5wYXJzZVJlc291cmNlKGJvZHkpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG4vLyBOZWVkZWQgZm9yIG9sZGVyIGJyb3dzZXJzIHRoYXQgc3RpbGwgc3VwcG9ydCBXZWJHTCAoU2FmYXJpIDYgZXRjLilcblV0aWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID1cbiAgICAgICAgICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgICAgICAgIHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgICAgfHxcbiAgICAgICAgICAgIHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lICAgICAgfHxcbiAgICAgICAgICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSAgICAgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIDEwMDAgLzYwKTtcbiAgICAgICAgICAgIH07XG4gICAgfVxufTtcblxuLy8gU3RyaW5naWZ5IGFuIG9iamVjdCBpbnRvIEpTT04sIGJ1dCBjb252ZXJ0IGZ1bmN0aW9ucyB0byBzdHJpbmdzXG5VdGlscy5zZXJpYWxpemVXaXRoRnVuY3Rpb25zID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBzZXJpYWxpemVkID0gSlNPTi5zdHJpbmdpZnkob2JqLCBmdW5jdGlvbihrLCB2KSB7XG4gICAgICAgIC8vIENvbnZlcnQgZnVuY3Rpb25zIHRvIHN0cmluZ3NcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG59O1xuXG4vLyBQYXJzZSBhIEpTT04gc3RyaW5nLCBidXQgY29udmVydCBmdW5jdGlvbi1saWtlIHN0cmluZ3MgYmFjayBpbnRvIGZ1bmN0aW9uc1xuVXRpbHMuZGVzZXJpYWxpemVXaXRoRnVuY3Rpb25zID0gZnVuY3Rpb24oc2VyaWFsaXplZCwgd3JhcCkge1xuICAgIHZhciBvYmogPSBKU09OLnBhcnNlKHNlcmlhbGl6ZWQpO1xuICAgIG9iaiA9IFV0aWxzLnN0cmluZ3NUb0Z1bmN0aW9ucyhvYmosIHdyYXApO1xuICAgIHJldHVybiBvYmo7XG59O1xuXG4vLyBSZWN1cnNpdmVseSBwYXJzZSBhbiBvYmplY3QsIGF0dGVtcHRpbmcgdG8gY29udmVydCBzdHJpbmcgcHJvcGVydGllcyB0aGF0IGxvb2sgbGlrZSBmdW5jdGlvbnMgYmFjayBpbnRvIGZ1bmN0aW9uc1xuVXRpbHMuc3RyaW5nc1RvRnVuY3Rpb25zID0gZnVuY3Rpb24ob2JqLCB3cmFwKSB7XG4gICAgLy8gQ29udmVydCBzdHJpbmdcbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb2JqID0gVXRpbHMuc3RyaW5nVG9GdW5jdGlvbihvYmosIHdyYXApO1xuICAgIH1cbiAgICAvLyBMb29wIHRocm91Z2ggb2JqZWN0IHByb3BlcnRpZXNcbiAgICBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGxldCBwIGluIG9iaikge1xuICAgICAgICAgICAgb2JqW3BdID0gVXRpbHMuc3RyaW5nc1RvRnVuY3Rpb25zKG9ialtwXSwgd3JhcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn07XG5cbi8vIENvbnZlcnQgc3RyaW5nIGJhY2sgaW50byBhIGZ1bmN0aW9uXG4vLyBUT0RPOiBtYWtlIGZ1bmN0aW9uIG1hdGNoaW5nIHRvbGVyYW50IG9mIHdoaXRlc3BhY2UgYW5kIG11bHRpbGluZXNcblV0aWxzLnN0cmluZ1RvRnVuY3Rpb24gPSBmdW5jdGlvbih2YWwsIHdyYXApIHtcbiAgICAvLyBDb252ZXJ0IHN0cmluZ3MgYmFjayBpbnRvIGZ1bmN0aW9uc1xuICAgIGlmICh2YWwubWF0Y2goL15cXHMqZnVuY3Rpb25cXHMqXFx3KlxccypcXChbXFxzXFxTXSpcXClcXHMqXFx7W1xcc1xcU10qXFx9L20pICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHdyYXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBldmFsKCdmID0gJyArIHdyYXAodmFsKSk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXZhbCgnZiA9ICcgKyB2YWwpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBmYWxsLWJhY2sgdG8gb3JpZ2luYWwgdmFsdWUgaWYgcGFyc2luZyBmYWlsZWRcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIExvZyB3cmFwcGVyLCBzZW5kcyBtZXNzYWdlIHRvIG1haW4gdGhyZWFkIGZvciBkaXNwbGF5LCBhbmQgaW5jbHVkZXMgd29ya2VyIGlkICNcblV0aWxzLmxvZyA9IGZ1bmN0aW9uIChsZXZlbCwgLi4ubXNnKSB7XG4gICAgbGV2ZWwgPSBsZXZlbCB8fCAnaW5mbyc7XG4gICAgaWYgKFV0aWxzLmlzV29ya2VyVGhyZWFkKSB7XG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2xvZycsXG4gICAgICAgICAgICBsZXZlbDogbGV2ZWwsXG4gICAgICAgICAgICB3b3JrZXJfaWQ6IHNlbGYuX3dvcmtlcl9pZCxcbiAgICAgICAgICAgIG1zZzogbXNnXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGxvZ1tsZXZlbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbG9nW2xldmVsXSguLi5tc2cpO1xuICAgIH1cbn07XG5cbi8vIERlZmF1bHQgdG8gYWxsb3dpbmcgaGlnaCBwaXhlbCBkZW5zaXR5XG4vLyBSZXR1cm5zIHRydWUgaWYgZGlzcGxheSBkZW5zaXR5IGNoYW5nZWRcblV0aWxzLnVzZV9oaWdoX2RlbnNpdHlfZGlzcGxheSA9IHRydWU7XG5VdGlscy51cGRhdGVEZXZpY2VQaXhlbFJhdGlvID0gZnVuY3Rpb24gKCkge1xuICAgIGxldCBwcmV2ID0gVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvO1xuICAgIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbyA9IChVdGlscy51c2VfaGlnaF9kZW5zaXR5X2Rpc3BsYXkgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8pIHx8IDE7XG4gICAgcmV0dXJuIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbyAhPT0gcHJldjtcbn07XG5cbi8vIE1hcmsgdGhyZWFkIGFzIG1haW4gb3Igd29ya2VyXG4oZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHdpbmRvdy5kb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBVdGlscy5pc1dvcmtlclRocmVhZCA9IGZhbHNlO1xuICAgICAgICAgICAgVXRpbHMuaXNNYWluVGhyZWFkICAgPSB0cnVlO1xuICAgICAgICAgICAgVXRpbHMudXBkYXRlRGV2aWNlUGl4ZWxSYXRpbygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzZWxmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIFV0aWxzLmlzV29ya2VyVGhyZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgIFV0aWxzLmlzTWFpblRocmVhZCAgID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59KSgpO1xuXG4vLyBHZXQgVVJMIHRoYXQgdGhlIGN1cnJlbnQgc2NyaXB0IHdhcyBsb2FkZWQgZnJvbVxuLy8gSWYgY3VycmVudFNjcmlwdCBpcyBub3QgYXZhaWxhYmxlLCBsb29wcyB0aHJvdWdoIDxzY3JpcHQ+IGVsZW1lbnRzIHNlYXJjaGluZyBmb3IgYSBsaXN0IG9mIHByb3ZpZGVkIHBhdGhzXG4vLyBlLmcuIFV0aWxzLmZpbmRDdXJyZW50VVJMKCd0YW5ncmFtLmRlYnVnLmpzJywgJ3RhbmdyYW0ubWluLmpzJyk7XG5VdGlscy5maW5kQ3VycmVudFVSTCA9IGZ1bmN0aW9uICguLi5wYXRocykge1xuICAgIC8vIEZpbmQgY3VycmVudGx5IGV4ZWN1dGluZyBzY3JpcHRcbiAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdDtcbiAgICBpZiAoc2NyaXB0KSB7XG4gICAgICAgIHJldHVybiBzY3JpcHQuc3JjO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBhdGhzKSkge1xuICAgICAgICAvLyBGYWxsYmFjayBvbiBsb29waW5nIHRocm91Z2ggPHNjcmlwdD4gZWxlbWVudHMgaWYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCBpcyBub3Qgc3VwcG9ydGVkXG4gICAgICAgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpO1xuICAgICAgICBmb3IgKHZhciBzPTA7IHMgPCBzY3JpcHRzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwYXRoIG9mIHBhdGhzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjcmlwdHNbc10uc3JjLmluZGV4T2YocGF0aCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHRzW3NdLnNyYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vLyBVc2VkIGZvciBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBwb3dlci1vZi0yIGFuZCBub24tcG93ZXItb2YtMiB0ZXh0dXJlc1xuLy8gVmlhOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE5NzIyMjQ3L3dlYmdsLXdhaXQtZm9yLXRleHR1cmUtdG8tbG9hZFxuVXRpbHMuaXNQb3dlck9mMiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmICh2YWx1ZSAtIDEpKSA9PT0gMDtcbn07XG5cblV0aWxzLm5leHRQb3dlck9mMiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGguY2VpbChNYXRoLmxvZzIodmFsdWUpKSk7XG59O1xuXG4vLyBJbnRlcnBvbGF0ZSAneCcgYWxvbmcgYSBzZXJpZXMgb2YgY29udHJvbCBwb2ludHNcbi8vICdwb2ludHMnIGlzIGFuIGFycmF5IG9mIGNvbnRyb2wgcG9pbnRzIGluIHRoZSBmb3JtIFt4LCB5XVxuLy9cbi8vIEV4YW1wbGU6XG4vLyAgICAgQ29udHJvbCBwb2ludHM6XG4vLyAgICAgICAgIFswLCA1XTogIHdoZW4geD0wLCB5PTVcbi8vICAgICAgICAgWzQsIDEwXTogd2hlbiB4PTQsIHk9MTBcbi8vXG4vLyAgICAgVXRpbHMuaW50ZXJwb2xhdGUoMiwgW1swLCA1XSwgWzQsIDEwXV0pO1xuLy8gICAgIC0+IGNvbXB1dGVzIHg9MiwgaGFsZndheSBiZXR3ZWVuIHg9MCBhbmQgeD00OiAoMTAgLSA1KSAvIDIgKzVcbi8vICAgICAtPiByZXR1cm5zIDcuNVxuLy9cbi8vIFRPRE86IGFkZCBvdGhlciBpbnRlcnBvbGF0aW9uIG1ldGhvZHMgYmVzaWRlcyBsaW5lYXJcbi8vXG5VdGlscy5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKHgsIHBvaW50cywgdHJhbnNmb3JtKSB7XG4gICAgLy8gSWYgdGhpcyBkb2Vzbid0IHJlc2VtYmxlIGEgbGlzdCBvZiBjb250cm9sIHBvaW50cywganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykgfHwgIUFycmF5LmlzQXJyYXkocG9pbnRzWzBdKSkge1xuICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgIH1cbiAgICBlbHNlIGlmIChwb2ludHMubGVuZ3RoIDwgMSkge1xuICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgIH1cblxuICAgIHZhciB4MSwgeDIsIGQsIHksIHkxLCB5MjtcblxuICAgIC8vIE1pbiBib3VuZHNcbiAgICBpZiAoeCA8PSBwb2ludHNbMF1bMF0pIHtcbiAgICAgICAgeSA9IHBvaW50c1swXVsxXTtcbiAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHkgPSB0cmFuc2Zvcm0oeSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWF4IGJvdW5kc1xuICAgIGVsc2UgaWYgKHggPj0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV1bMF0pIHtcbiAgICAgICAgeSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdWzFdO1xuICAgICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgeSA9IHRyYW5zZm9ybSh5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBGaW5kIHdoaWNoIGNvbnRyb2wgcG9pbnRzIHggaXMgYmV0d2VlblxuICAgIGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpPTA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoeCA+PSBwb2ludHNbaV1bMF0gJiYgeCA8IHBvaW50c1tpKzFdWzBdKSB7XG4gICAgICAgICAgICAgICAgLy8gTGluZWFyIGludGVycG9sYXRpb25cbiAgICAgICAgICAgICAgICB4MSA9IHBvaW50c1tpXVswXTtcbiAgICAgICAgICAgICAgICB4MiA9IHBvaW50c1tpKzFdWzBdO1xuXG4gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgdmFsdWVzXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocG9pbnRzW2ldWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICB5ID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGM9MDsgYyA8IHBvaW50c1tpXVsxXS5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IHRyYW5zZm9ybShwb2ludHNbaV1bMV1bY10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyID0gdHJhbnNmb3JtKHBvaW50c1tpKzFdWzFdW2NdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0geTIgLSB5MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5W2NdID0gZCAqICh4IC0geDEpIC8gKHgyIC0geDEpICsgeTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gcG9pbnRzW2krMV1bMV1bY10gLSBwb2ludHNbaV1bMV1bY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeVtjXSA9IGQgKiAoeCAtIHgxKSAvICh4MiAtIHgxKSArIHBvaW50c1tpXVsxXVtjXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTaW5nbGUgdmFsdWVcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gdHJhbnNmb3JtKHBvaW50c1tpXVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB5MiA9IHRyYW5zZm9ybShwb2ludHNbaSsxXVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkID0geTIgLSB5MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBkICogKHggLSB4MSkgLyAoeDIgLSB4MSkgKyB5MTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBwb2ludHNbaSsxXVsxXSAtIHBvaW50c1tpXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBkICogKHggLSB4MSkgLyAoeDIgLSB4MSkgKyBwb2ludHNbaV1bMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHk7XG59O1xuXG4vLyBJdGVyYXRvcnMgKEVTNiBnZW5lcmF0b3JzKVxuXG4vLyBJdGVyYXRvciBmb3Iga2V5L3ZhbHVlIHBhaXJzIG9mIGFuIG9iamVjdFxuVXRpbHMuZW50cmllcyA9IGZ1bmN0aW9uKiAob2JqKSB7XG4gICAgZm9yICh2YXIga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgeWllbGQgW2tleSwgb2JqW2tleV1dO1xuICAgIH1cbn07XG5cbi8vIEl0ZXJhdG9yIGZvciB2YWx1ZXMgb2YgYW4gb2JqZWN0XG5VdGlscy52YWx1ZXMgPSBmdW5jdGlvbiogKG9iaikge1xuICAgIGZvciAodmFyIGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgIHlpZWxkIG9ialtrZXldO1xuICAgIH1cbn07XG5cbi8vIFJlY3Vyc2l2ZSBpdGVyYXRvcnMgZm9yIGFsbCBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCwgbm8gbWF0dGVyIGhvdyBkZWVwbHkgbmVzdGVkXG4vLyBUT0RPOiBmaXggZm9yIGNpcmN1bGFyIHN0cnVjdHVyZXNcblV0aWxzLnJlY3Vyc2VFbnRyaWVzID0gZnVuY3Rpb24qIChvYmopIHtcbiAgICBpZiAoIW9iaikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgIGlmIChvYmpba2V5XSkge1xuICAgICAgICAgICAgeWllbGQgW2tleSwgb2JqW2tleV0sIG9ial07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBVdGlscy5yZWN1cnNlRW50cmllcyhvYmpba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5VdGlscy5yZWN1cnNlVmFsdWVzID0gZnVuY3Rpb24qIChvYmopIHtcbiAgICBpZiAoIW9iaikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgIGlmIChvYmpba2V5XSkge1xuICAgICAgICAgICAgeWllbGQgb2JqW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBVdGlscy5yZWN1cnNlVmFsdWVzKG9ialtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8vIFNjYWxlIGEgKnNpZ25lZCogc2hvcnQgZm9yIHVzZSBpbiBhIEdMIFZCT1xuLy8gYHVuaXRgIGlzIGFuIG9wdGlvbmFsIHNjYWxpbmcgZmFjdG9yIHRvIG1pbWljIGZpeGVkIHBvaW50LCBzaW5jZSB0aGVzZSB2YWx1ZXMgd2lsbCBiZVxuLy8gbm9ybWFsaXplZCB0byAwLTEsIGUuZy4gZGl2aWRlIGlucHV0IGJ5IHVuaXQgb24gdGhlIHdheSBpbiwgbXVsdGlwbHkgaXQgYmFjayBpbiB0aGUgc2hhZGVyXG5VdGlscy5zY2FsZUludDE2ID0gZnVuY3Rpb24gKHZhbCwgdW5pdCkge1xuICAgIHJldHVybiAodmFsIC8gdW5pdCkgKiAzMjc2Nztcbn07XG5cblV0aWxzLmRlZ1RvUmFkID0gZnVuY3Rpb24gKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIE1hdGguUEkgLyAxODA7XG59O1xuXG5VdGlscy5yYWRUb0RlZyA9IGZ1bmN0aW9uIChyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiAxODAgLyBNYXRoLlBJO1xufTtcblxuVXRpbHMudG9DU1NDb2xvciA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgIGlmIChjb2xvclszXSA9PT0gMSkgeyAvLyBmdWxsIG9wYWNpdHlcbiAgICAgICAgcmV0dXJuIGByZ2IoJHtjb2xvci5zbGljZSgwLCAzKS5tYXAoYyA9PiBNYXRoLnJvdW5kKGMgKiAyNTUpKS5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICAvLyBSR0IgaXMgYmV0d2VlbiBbMCwgMjU1XSBvcGFjaXR5IGlzIGJldHdlZW4gWzAsIDFdXG4gICAgcmV0dXJuIGByZ2JhKCR7Y29sb3IubWFwKChjLCBpKSA9PiAoaSA8IDMgJiYgTWF0aC5yb3VuZChjICogMjU1KSkgfHwgYykuam9pbignLCAnKX0pYDtcbn07XG5cblV0aWxzLnBvaW50SW5UaWxlID0gZnVuY3Rpb24gKHBvaW50KSB7XG4gICAgcmV0dXJuIHBvaW50WzBdID49IDAgJibCoHBvaW50WzFdID4gLUdlby50aWxlX3NjYWxlICYmIHBvaW50WzBdIDwgR2VvLnRpbGVfc2NhbGUgJiYgcG9pbnRbMV0gPD0gMDtcbn07XG5cbi8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzYxNjQ2MS9nZW5lcmF0ZS1hLWhhc2gtZnJvbS1zdHJpbmctaW4tamF2YXNjcmlwdC1qcXVlcnlcblV0aWxzLmhhc2hTdHJpbmcgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgbGV0IGhhc2ggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBsZXQgY2hyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNocjtcbiAgICAgICAgaGFzaCB8PSAwO1xuICAgIH1cbiAgICByZXR1cm4gaGFzaDtcbn07XG5cblV0aWxzLmRlYm91bmNlID0gZnVuY3Rpb24gKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIGxldCB0aW1lb3V0O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgbGV0IGNvbnRleHQgPSB0aGlzLFxuICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgbGV0IGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgICBpZiAoY2FsbE5vdykge1xuICAgICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwidmFyIHZlcnNpb247XG5leHBvcnQgZGVmYXVsdCB2ZXJzaW9uID0ge1xuICAgIGdldCBzdHJpbmcoKSB7IHJldHVybiBgdiR7dmVyc2lvbi5tYWpvcn0uJHt2ZXJzaW9uLm1pbm9yfS4ke3ZlcnNpb24ucGF0Y2h9YDsgfSxcbiAgICBtYWpvcjogMCxcbiAgICBtaW5vcjogNyxcbiAgICBwYXRjaDogMSxcbiAgICBwcmU6IGZhbHNlXG59O1xuIiwiLypqc2hpbnQgd29ya2VyOiB0cnVlKi9cblxuLy8gV29ya2VyQnJva2VyIHJvdXRlcyBtZXNzYWdlcyBiZXR3ZWVuIHdlYiB3b3JrZXJzIGFuZCB0aGUgbWFpbiB0aHJlYWQsIGFsbG93aW5nIGZvciBzaW1wbGVyXG4vLyBhc3luYyBjb2RlIHZpYSBwcm9taXNlcy4gRXhhbXBsZSB1c2FnZTpcbi8vXG4vLyBJbiB3ZWIgd29ya2VyLCByZWdpc3RlciBzZWxmIGFzIHRhcmdldCBkZWZpbmUgYSBtZXRob2Q6XG4vL1xuLy8gICAgIFdvcmtlckJyb2tlci5hZGRUYXJnZXQoJ3NlbGYnLCBzZWxmKTtcbi8vXG4vLyAgICAgc2VsZi5zcXVhcmUgPSBmdW5jdGlvbiAoeCkge1xuLy8gICAgICAgICByZXR1cm4geCAqIHg7XG4vLyAgICAgfTtcbi8vXG4vLyBJbiBtYWluIHRocmVhZCwgaW52b2tlIHRoYXQgbWV0aG9kIGFuZCByZWNlaXZlIHRoZSByZXN1bHQgKGlmIGFueSkgYXMgYSBwcm9taXNlOlxuLy9cbi8vICAgICB3b3JrZXIgPSBuZXcgV29ya2VyKC4uLik7XG4vLyAgICAgV29ya2VyQnJva2VyLmFkZFdvcmtlcih3b3JrZXIpO1xuLy9cbi8vICAgICBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2Uod29ya2VyLCAnc2VsZi5zcXVhcmUnLCA1KS50aGVuKGZ1bmN0aW9uKHkpIHtcbi8vICAgICAgICAgY29uc29sZS5sb2coeSk7XG4vLyAgICAgfSk7XG4vL1xuLy8gICAgIC0+IHByaW50cyAyNVxuLy9cbi8vIEFzeW5jIGNvZGU6XG4vL1xuLy8gRm9yIHN5bmNocm9ub3VzIGNvZGUgdGhhdCBtdXN0IHBhc3MgYSByZXR1cm4gdmFsdWUgdG8gdGhlIG1haW4gdGhyZWFkLCB0aGUgZnVuY3Rpb24gY2FuIHNpbXBseVxuLy8gcmV0dXJuIGFuIGltbWVkaWF0ZSB2YWx1ZSAoc2VlIGV4YW1wbGUgYWJvdmUpLiBGb3IgY2FzZXMgd2hlcmUgdGhlIHdvcmtlciBtZXRob2QgbmVlZHMgdG8gcnVuXG4vLyBhc3luY2hyb25vdXMgY29kZSwgdGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gYSBwcm9taXNlLCBhbmQgdGhlIHJlc29sdmVkIG9yIHJlamVjdGVkIHZhbHVlIHdpbGxcbi8vIGJlIHNlbnQgYmFjayB0byB0aGUgbWFpbiB0aHJlYWQgd2hlbiB0aGUgcHJvbWlzZSBpcyBmdWxmaWxsZWQuXG4vL1xuLy8gRXJyb3IgaGFuZGxpbmc6XG4vL1xuLy8gSWYgdGhlIHdvcmtlciBtZXRob2QgZWl0aGVyIHRocm93cyBhbiBlcnJvciwgb3IgcmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyByZWplY3RlZCwgaXQgd2lsbCBiZVxuLy8gc2VudCBiYWNrIHRvIHRoZSBtYWluIHRocmVhZCBhcyBhIHByb21pc2UgcmVqZWN0aW9uLiBUaGVzZSB0d28gZXhhbXBsZXMgYXJlIGVxdWl2YWxlbnQ6XG4vL1xuLy8gICAgIEluIHdvcmtlciwgdGhyb3dpbmcgYW4gZXJyb3I6XG4vL1xuLy8gICAgICAgICBzZWxmLmJyb2tlbiA9IGZ1bmN0aW9uICgpIHtcbi8vICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgaW4gd29ya2VyIScpO1xuLy8gICAgICAgICB9O1xuLy9cbi8vICAgICBJbiB3b3JrZXIsIHJldHVybmluZyBhIHJlamVjdGVkIHByb21pc2U6XG4vL1xuLy8gICAgICAgICBzZWxmLmJyb2tlbiA9IGZ1bmN0aW9uICgpIHtcbi8vICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ2Vycm9yIGluIHdvcmtlciEnKSk7XG4vLyAgICAgICAgIH07XG4vL1xuLy8gICAgIEluIG1haW4gdGhyZWFkLCBib3RoIGVycm9ycyBhcmUgcmVjZWl2ZWQgYXMgYSBwcm9taXNlIHJlamVjdGlvbjpcbi8vXG4vLyAgICAgICAgIFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh3b3JrZXIsICdzZWxmLmJyb2tlbicpLnRoZW4oXG4vLyAgICAgICAgICAgICAvLyBQcm9taXNlIHJlc29sdmVkXG4vLyAgICAgICAgICAgICBmdW5jdGlvbigpIHtcbi8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnc3VjY2VzcyEnKTtcbi8vICAgICAgICAgICAgIH0sXG4vLyAgICAgICAgICAgICAvLyBQcm9taXNlIHJlamVjdGVkXG4vLyAgICAgICAgICAgICBmdW5jdGlvbihlcnJvcikge1xuLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciEnLCBlcnJvcik7XG4vLyAgICAgICAgICAgICB9KTtcbi8vXG4vLyAgICAgICAgIC0+IHByaW50cyAnZXJyb3IhIGVycm9yIGluIHdvcmtlcidcbi8vXG4vLyBDYWxsaW5nIGZyb20gd29ya2VyIHRvIG1haW4gdGhyZWFkOlxuLy9cbi8vIFRoZSBzYW1lIHN0eWxlIG9mIGNhbGxzIGNhbiBiZSBtYWRlICpmcm9tKiBhIHdlYiB3b3JrZXIsIHRvIHRoZSBtYWluIHRocmVhZC4gVGhlIEFQSSBpcyB0aGUgc2FtZVxuLy8gd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50LCAnd29ya2VyJywgaXMgbm90IG5lZWRlZCBmb3IgV29ya2VyQnJva2VyLnBvc3RNZXNzYWdlKCksXG4vLyBzaW5jZSB0aGUgbWFpbiB0aHJlYWQgaXMgdGhlIGltcGxpY2l0IHRhcmdldC5cbi8vXG4vLyBJbiBtYWluIHRocmVhZCwgZGVmaW5lIGEgbWV0aG9kIGFuZCByZWdpc3RlciBpdDpcbi8vXG4vLyAgICAgdmFyIGdlb21ldHJ5ID0ge1xuLy8gICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uKHgsIHkpIHtcbi8vICAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4vLyAgICAgICAgIH1cbi8vICAgICB9O1xuLy9cbi8vICAgICBXb3JrZXJCcm9rZXIuYWRkVGFyZ2V0KCdnZW9tZXRyeScsIGdlb21ldHJ5KTtcbi8vXG4vLyBJbiB3b3JrZXIgdGhyZWFkOlxuLy9cbi8vICAgICBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2UoJ2dlb21ldHJ5Lmxlbmd0aCcsIDMsIDQpLnRoZW4oZnVuY3Rpb24oZCkge1xuLy8gICAgICAgICBjb25zb2xlLmxvZyhkKTtcbi8vICAgICB9KTtcbi8vXG4vLyAgICAgLT4gcHJpbnRzIDVcbi8vXG5cbmltcG9ydCBVdGlscyBmcm9tICcuL3V0aWxzJztcblxudmFyIFdvcmtlckJyb2tlcjtcbmV4cG9ydCBkZWZhdWx0IFdvcmtlckJyb2tlciA9IHt9O1xuXG4vLyBHbG9iYWwgbGlzdCBvZiBhbGwgd29ya2VyIG1lc3NhZ2VzXG4vLyBVbmlxdWVseSB0cmFja3MgZXZlcnkgY2FsbCBtYWRlIGJldHdlZW4gbWFpbiB0aHJlYWQgYW5kIGEgd29ya2VyXG52YXIgbWVzc2FnZV9pZCA9IDA7XG52YXIgbWVzc2FnZXMgPSB7fTtcblxuLy8gUmVnaXN0ZXIgYW4gb2JqZWN0IHRvIHJlY2VpdmUgY2FsbHMgZnJvbSBvdGhlciB0aHJlYWRcbnZhciB0YXJnZXRzID0ge307XG5Xb3JrZXJCcm9rZXIuYWRkVGFyZ2V0ID0gZnVuY3Rpb24gKG5hbWUsIHRhcmdldCkge1xuICAgIHRhcmdldHNbbmFtZV0gPSB0YXJnZXQ7XG59O1xuXG4vLyBHaXZlbiBhIGRvdC1ub3RhdGlvbi1zdHlsZSBtZXRob2QgbmFtZSwgZS5nLiAnT2JqZWN0Lm9iamVjdC5tZXRob2QnLFxuLy8gZmluZCB0aGUgb2JqZWN0IHRvIGNhbGwgdGhlIG1ldGhvZCBvbiBmcm9tIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgdGFyZ2V0c1xuZnVuY3Rpb24gZmluZFRhcmdldCAobWV0aG9kKSB7XG4gICAgdmFyIGNoYWluID0gW107XG4gICAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNoYWluID0gbWV0aG9kLnNwbGl0KCcuJyk7XG4gICAgICAgIG1ldGhvZCA9IGNoYWluLnBvcCgpO1xuICAgIH1cblxuICAgIC8vIHRhcmdldCA9IHRhcmdldCB8fCAoVXRpbHMuaXNNYWluVGhyZWFkICYmIHdpbmRvdykgfHwgKFV0aWxzLmlzV29ya2VyVGhyZWFkICYmIHNlbGYpO1xuICAgIHZhciB0YXJnZXQgPSB0YXJnZXRzO1xuXG4gICAgZm9yIChsZXQgbT0wOyBtIDwgY2hhaW4ubGVuZ3RoOyBtKyspIHtcbiAgICAgICAgaWYgKHRhcmdldFtjaGFpblttXV0pIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldFtjaGFpblttXV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW21ldGhvZCwgdGFyZ2V0XTtcbn1cblxuLy8gTWFpbiB0aHJlYWQ6XG4vLyAtIFNlbmQgbWVzc2FnZXMgdG8gd29ya2VycywgYW5kIG9wdGlvbmFsbHkgcmVjZWl2ZSBhbiBhc3luYyByZXNwb25zZSBhcyBhIHByb21pc2Vcbi8vIC0gUmVjZWl2ZSBtZXNzYWdlcyBmcm9tIHdvcmtlcnMsIGFuZCBvcHRpb25hbGx5IHNlbmQgYW4gYXN5bmMgcmVzcG9uc2UgYmFjayBhcyBhIHByb21pc2VcbmZ1bmN0aW9uIHNldHVwTWFpblRocmVhZCAoKSB7XG5cbiAgICAvLyBTZW5kIGEgbWVzc2FnZSB0byBhIHdvcmtlciwgYW5kIG9wdGlvbmFsbHkgZ2V0IGFuIGFzeW5jIHJlc3BvbnNlXG4gICAgLy8gQXJndW1lbnRzOlxuICAgIC8vICAgLSB3b3JrZXI6IG9uZSBvciBtb3JlIHdlYiB3b3JrZXIgaW5zdGFuY2VzIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8gKHNpbmdsZSB2YWx1ZSBvciBhcnJheSlcbiAgICAvLyAgIC0gbWV0aG9kOiB0aGUgbWV0aG9kIHdpdGggdGhpcyBuYW1lLCBzcGVjaWZpZWQgd2l0aCBkb3Qtbm90YXRpb24sIHdpbGwgYmUgaW52b2tlZCBpbiB0aGUgd29ya2VyXG4gICAgLy8gICAtIG1lc3NhZ2U6IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBtZXRob2QgY2FsbFxuICAgIC8vIFJldHVybnM6XG4gICAgLy8gICAtIGEgcHJvbWlzZSB0aGF0IHdpbGwgYmUgZnVsZmlsbGVkIGlmIHRoZSB3b3JrZXIgbWV0aG9kIHJldHVybnMgYSB2YWx1ZSAoY291bGQgYmUgaW1tZWRpYXRlbHksIG9yIGFzeW5jKVxuICAgIC8vXG4gICAgV29ya2VyQnJva2VyLnBvc3RNZXNzYWdlID0gZnVuY3Rpb24gKHdvcmtlciwgbWV0aG9kLCAuLi5tZXNzYWdlKSB7XG4gICAgICAgIC8vIElmIG1vcmUgdGhhbiBvbmUgd29ya2VyIHNwZWNpZmllZCwgcG9zdCB0byBtdWx0aXBsZVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh3b3JrZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgd29ya2VyLm1hcCh3ID0+IFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh3LCBtZXRob2QsIC4uLm1lc3NhZ2UpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYWNrIHN0YXRlIG9mIHRoaXMgbWVzc2FnZVxuICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIG1lc3NhZ2VzW21lc3NhZ2VfaWRdID0geyBtZXRob2QsIG1lc3NhZ2UsIHJlc29sdmUsIHJlamVjdCB9O1xuICAgICAgICB9KTtcblxuICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ21haW5fc2VuZCcsICAgICAgLy8gbWFyayBtZXNzYWdlIGFzIG1ldGhvZCBpbnZvY2F0aW9uIGZyb20gbWFpbiB0aHJlYWRcbiAgICAgICAgICAgIG1lc3NhZ2VfaWQsICAgICAgICAgICAgIC8vIHVuaXF1ZSBpZCBmb3IgdGhpcyBtZXNzYWdlLCBmb3IgbGlmZSBvZiBwcm9ncmFtXG4gICAgICAgICAgICBtZXRob2QsICAgICAgICAgICAgICAgICAvLyB3aWxsIGRpc3BhdGNoIHRvIGEgZnVuY3Rpb24gb2YgdGhpcyBuYW1lIHdpdGhpbiB0aGUgd29ya2VyXG4gICAgICAgICAgICBtZXNzYWdlICAgICAgICAgICAgICAgICAvLyBtZXNzYWdlIHBheWxvYWRcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIG1lc3NhZ2VfaWQrKztcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIC8vIEFkZCBhIHdvcmtlciB0byBjb21tdW5pY2F0ZSB3aXRoIC0gZWFjaCB3b3JrZXIgbXVzdCBiZSByZWdpc3RlcmVkIGZyb20gdGhlIG1haW4gdGhyZWFkXG4gICAgdmFyIHdvcmtlcl9pZCA9IDA7XG4gICAgdmFyIHdvcmtlcnMgPSBuZXcgTWFwKCk7XG5cbiAgICBXb3JrZXJCcm9rZXIuYWRkV29ya2VyID0gZnVuY3Rpb24gKHdvcmtlcikge1xuXG4gICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgYWxsIHJlZ2lzdGVyZWQgd29ya2Vyc1xuICAgICAgICB3b3JrZXJzLnNldCh3b3JrZXIsIHdvcmtlcl9pZCsrKTtcblxuICAgICAgICAvLyBMaXN0ZW4gZm9yIG1lc3NhZ2VzIGNvbWluZyBiYWNrIGZyb20gdGhlIHdvcmtlciwgYW5kIGZ1bGZpbGwgdGhhdCBtZXNzYWdlJ3MgcHJvbWlzZVxuICAgICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBtYXliZURlY29kZShldmVudC5kYXRhKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgIT09ICd3b3JrZXJfcmVwbHknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQYXNzIHRoZSByZXN1bHQgdG8gdGhlIHByb21pc2VcbiAgICAgICAgICAgIHZhciBpZCA9IGRhdGEubWVzc2FnZV9pZDtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlc1tpZF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlc1tpZF0ucmVqZWN0KGRhdGEuZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNbaWRdLnJlc29sdmUoZGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIG1lc3NhZ2VzW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTGlzdGVuIGZvciBtZXNzYWdlcyBpbml0aWF0aW5nIGEgY2FsbCBmcm9tIHRoZSB3b3JrZXIsIGRpc3BhdGNoIHRoZW0sXG4gICAgICAgIC8vIGFuZCBzZW5kIGFueSByZXR1cm4gdmFsdWUgYmFjayB0byB0aGUgd29ya2VyXG4gICAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IG1heWJlRGVjb2RlKGV2ZW50LmRhdGEpO1xuXG4gICAgICAgICAgICAvLyBVbmlxdWUgaWQgZm9yIHRoaXMgbWVzc2FnZSAmIHJldHVybiBjYWxsIHRvIG1haW4gdGhyZWFkXG4gICAgICAgICAgICB2YXIgaWQgPSBkYXRhLm1lc3NhZ2VfaWQ7XG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlICE9PSAnd29ya2VyX3NlbmQnIHx8IGlkID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhbGwgdGhlIHJlcXVlc3RlZCBtZXRob2QgYW5kIHNhdmUgdGhlIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgLy8gdmFyIHRhcmdldCA9IHRhcmdldHNbZGF0YS50YXJnZXRdO1xuICAgICAgICAgICAgdmFyIFttZXRob2RfbmFtZSwgdGFyZ2V0XSA9IGZpbmRUYXJnZXQoZGF0YS5tZXRob2QpO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgV29ya2VyIGJyb2tlciBjb3VsZCBub3QgZGlzcGF0Y2ggbWVzc2FnZSB0eXBlICR7ZGF0YS5tZXRob2R9IG9uIHRhcmdldCAke2RhdGEudGFyZ2V0fSBiZWNhdXNlIG5vIG9iamVjdCB3aXRoIHRoYXQgbmFtZSBpcyByZWdpc3RlcmVkIG9uIG1haW4gdGhyZWFkYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBtZXRob2QgPSAodHlwZW9mIHRhcmdldFttZXRob2RfbmFtZV0gPT09ICdmdW5jdGlvbicpICYmIHRhcmdldFttZXRob2RfbmFtZV07XG4gICAgICAgICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBXb3JrZXIgYnJva2VyIGNvdWxkIG5vdCBkaXNwYXRjaCBtZXNzYWdlIHR5cGUgJHtkYXRhLm1ldGhvZH0gb24gdGFyZ2V0ICR7ZGF0YS50YXJnZXR9IGJlY2F1c2Ugb2JqZWN0IGhhcyBubyBtZXRob2Qgd2l0aCB0aGF0IG5hbWVgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlc3VsdCwgZXJyb3I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0YXJnZXQsIGRhdGEubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhyb3duIGVycm9ycyB3aWxsIGJlIHBhc3NlZCBiYWNrIChpbiBzdHJpbmcgZm9ybSkgdG8gd29ya2VyXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZW5kIHJldHVybiB2YWx1ZSB0byB3b3JrZXJcbiAgICAgICAgICAgIGxldCBwYXlsb2FkLCB0cmFuc2ZlcmFibGVzID0gW107XG5cbiAgICAgICAgICAgIC8vIEFzeW5jIHJlc3VsdFxuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbigodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgV29ya2VyQnJva2VyLnJldHVybldpdGhUcmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGVzID0gdmFsdWUudHJhbnNmZXJhYmxlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ21haW5fcmVwbHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gbWF5YmVFbmNvZGUocGF5bG9hZCwgdHJhbnNmZXJhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZShwYXlsb2FkLCB0cmFuc2ZlcmFibGVzLm1hcCh0ID0+IHQub2JqZWN0KSk7XG4gICAgICAgICAgICAgICAgICAgIGZyZWVUcmFuc2ZlcmFibGVzKHRyYW5zZmVyYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiAodHJhbnNmZXJhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBVdGlscy5sb2coJ3RyYWNlJywgYCcke21ldGhvZF9uYW1lfScgdHJhbnNmZXJyZWQgJHt0cmFuc2ZlcmFibGVzLmxlbmd0aH0gb2JqZWN0cyB0byB3b3JrZXIgdGhyZWFkYCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ21haW5fcmVwbHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBgJHtlcnJvci5tZXNzYWdlfTogJHtlcnJvci5zdGFja31gIDogZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSW1tZWRpYXRlIHJlc3VsdFxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFdvcmtlckJyb2tlci5yZXR1cm5XaXRoVHJhbnNmZXJhYmxlcykge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGVzID0gcmVzdWx0LnRyYW5zZmVyYWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbWFpbl9yZXBseScsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGAke2Vycm9yLm1lc3NhZ2V9OiAke2Vycm9yLnN0YWNrfWAgOiBlcnJvcilcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBtYXliZUVuY29kZShwYXlsb2FkLCB0cmFuc2ZlcmFibGVzKTtcbiAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UocGF5bG9hZCwgdHJhbnNmZXJhYmxlcy5tYXAodCA9PiB0Lm9iamVjdCkpO1xuICAgICAgICAgICAgICAgIGZyZWVUcmFuc2ZlcmFibGVzKHRyYW5zZmVyYWJsZXMpO1xuICAgICAgICAgICAgICAgIC8vIGlmICh0cmFuc2ZlcmFibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgVXRpbHMubG9nKCd0cmFjZScsIGAnJHttZXRob2RfbmFtZX0nIHRyYW5zZmVycmVkICR7dHJhbnNmZXJhYmxlcy5sZW5ndGh9IG9iamVjdHMgdG8gd29ya2VyIHRocmVhZGApO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9O1xuXG4gICAgLy8gRXhwb3NlIGZvciBkZWJ1Z2dpbmdcbiAgICBXb3JrZXJCcm9rZXIuZ2V0TWVzc2FnZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9O1xuXG4gICAgV29ya2VyQnJva2VyLmdldE1lc3NhZ2VJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VfaWQ7XG4gICAgfTtcblxufVxuXG4vLyBXb3JrZXIgdGhyZWFkczpcbi8vIC0gUmVjZWl2ZSBtZXNzYWdlcyBmcm9tIG1haW4gdGhyZWFkLCBhbmQgb3B0aW9uYWxseSBzZW5kIGFuIGFzeW5jIHJlc3BvbnNlIGJhY2sgYXMgYSBwcm9taXNlXG4vLyAtIFNlbmQgbWVzc2FnZXMgdG8gbWFpbiB0aHJlYWQsIGFuZCBvcHRpb25hbGx5IHJlY2VpdmUgYW4gYXN5bmMgcmVzcG9uc2UgYXMgYSBwcm9taXNlXG5mdW5jdGlvbiBzZXR1cFdvcmtlclRocmVhZCAoKSB7XG5cbiAgICAvLyBTZW5kIGEgbWVzc2FnZSB0byB0aGUgbWFpbiB0aHJlYWQsIGFuZCBvcHRpb25hbGx5IGdldCBhbiBhc3luYyByZXNwb25zZSBhcyBhIHByb21pc2VcbiAgICAvLyBBcmd1bWVudHM6XG4gICAgLy8gICAtIG1ldGhvZDogdGhlIG1ldGhvZCB3aXRoIHRoaXMgbmFtZSwgc3BlY2lmaWVkIHdpdGggZG90LW5vdGF0aW9uLCB3aWxsIGJlIGludm9rZWQgb24gdGhlIG1haW4gdGhyZWFkXG4gICAgLy8gICAtIG1lc3NhZ2U6IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBtZXRob2QgY2FsbFxuICAgIC8vIFJldHVybnM6XG4gICAgLy8gICAtIGEgcHJvbWlzZSB0aGF0IHdpbGwgYmUgZnVsZmlsbGVkIGlmIHRoZSBtYWluIHRocmVhZCBtZXRob2QgcmV0dXJucyBhIHZhbHVlIChjb3VsZCBiZSBpbW1lZGlhdGVseSwgb3IgYXN5bmMpXG4gICAgLy9cbiAgICBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2UgPSBmdW5jdGlvbiAobWV0aG9kLCAuLi5tZXNzYWdlKSB7XG4gICAgICAgIC8vIFRyYWNrIHN0YXRlIG9mIHRoaXMgbWVzc2FnZVxuICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIG1lc3NhZ2VzW21lc3NhZ2VfaWRdID0geyBtZXRob2QsIG1lc3NhZ2UsIHJlc29sdmUsIHJlamVjdCB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHR5cGU6ICd3b3JrZXJfc2VuZCcsICAgIC8vIG1hcmsgbWVzc2FnZSBhcyBtZXRob2QgaW52b2NhdGlvbiBmcm9tIHdvcmtlclxuICAgICAgICAgICAgbWVzc2FnZV9pZCwgICAgICAgICAgICAgLy8gdW5pcXVlIGlkIGZvciB0aGlzIG1lc3NhZ2UsIGZvciBsaWZlIG9mIHByb2dyYW1cbiAgICAgICAgICAgIG1ldGhvZCwgICAgICAgICAgICAgICAgIC8vIHdpbGwgZGlzcGF0Y2ggdG8gYSBtZXRob2Qgb2YgdGhpcyBuYW1lIG9uIHRoZSBtYWluIHRocmVhZFxuICAgICAgICAgICAgbWVzc2FnZSAgICAgICAgICAgICAgICAgLy8gbWVzc2FnZSBwYXlsb2FkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lc3NhZ2VfaWQrKztcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIC8vIExpc3RlbiBmb3IgbWVzc2FnZXMgY29taW5nIGJhY2sgZnJvbSB0aGUgbWFpbiB0aHJlYWQsIGFuZCBmdWxmaWxsIHRoYXQgbWVzc2FnZSdzIHByb21pc2VcbiAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgbGV0IGRhdGEgPSBtYXliZURlY29kZShldmVudC5kYXRhKTtcbiAgICAgICAgaWYgKGRhdGEudHlwZSAhPT0gJ21haW5fcmVwbHknKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXNzIHRoZSByZXN1bHQgdG8gdGhlIHByb21pc2VcbiAgICAgICAgdmFyIGlkID0gZGF0YS5tZXNzYWdlX2lkO1xuICAgICAgICBpZiAobWVzc2FnZXNbaWRdKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzW2lkXS5yZWplY3QoZGF0YS5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlc1tpZF0ucmVzb2x2ZShkYXRhLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIG1lc3NhZ2VzW2lkXTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUmVjZWl2ZSBtZXNzYWdlcyBmcm9tIG1haW4gdGhyZWFkLCBkaXNwYXRjaCB0aGVtLCBhbmQgc2VuZCBiYWNrIGEgcmVwbHlcbiAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgbGV0IGRhdGEgPSBtYXliZURlY29kZShldmVudC5kYXRhKTtcblxuICAgICAgICAvLyBVbmlxdWUgaWQgZm9yIHRoaXMgbWVzc2FnZSAmIHJldHVybiBjYWxsIHRvIG1haW4gdGhyZWFkXG4gICAgICAgIHZhciBpZCA9IGRhdGEubWVzc2FnZV9pZDtcbiAgICAgICAgaWYgKGRhdGEudHlwZSAhPT0gJ21haW5fc2VuZCcgfHwgaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FsbCB0aGUgcmVxdWVzdGVkIHdvcmtlciBtZXRob2QgYW5kIHNhdmUgdGhlIHJldHVybiB2YWx1ZVxuICAgICAgICB2YXIgW21ldGhvZF9uYW1lLCB0YXJnZXRdID0gZmluZFRhcmdldChkYXRhLm1ldGhvZCk7XG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgV29ya2VyIGJyb2tlciBjb3VsZCBub3QgZGlzcGF0Y2ggbWVzc2FnZSB0eXBlICR7ZGF0YS5tZXRob2R9IG9uIHRhcmdldCAke2RhdGEudGFyZ2V0fSBiZWNhdXNlIG5vIG9iamVjdCB3aXRoIHRoYXQgbmFtZSBpcyByZWdpc3RlcmVkIG9uIG1haW4gdGhyZWFkYCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWV0aG9kID0gKHR5cGVvZiB0YXJnZXRbbWV0aG9kX25hbWVdID09PSAnZnVuY3Rpb24nKSAmJiB0YXJnZXRbbWV0aG9kX25hbWVdO1xuXG4gICAgICAgIGlmICghbWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgV29ya2VyIGJyb2tlciBjb3VsZCBub3QgZGlzcGF0Y2ggbWVzc2FnZSB0eXBlICR7ZGF0YS5tZXRob2R9IGJlY2F1c2Ugd29ya2VyIGhhcyBubyBtZXRob2Qgd2l0aCB0aGF0IG5hbWVgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHQsIGVycm9yO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbWV0aG9kLmFwcGx5KHRhcmdldCwgZGF0YS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgICAgICAvLyBUaHJvd24gZXJyb3JzIHdpbGwgYmUgcGFzc2VkIGJhY2sgKGluIHN0cmluZyBmb3JtKSB0byBtYWluIHRocmVhZFxuICAgICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VuZCByZXR1cm4gdmFsdWUgdG8gbWFpbiB0aHJlYWRcbiAgICAgICAgbGV0IHBheWxvYWQsIHRyYW5zZmVyYWJsZXMgPSBbXTtcblxuICAgICAgICAvLyBBc3luYyByZXN1bHRcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJlc3VsdC50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFdvcmtlckJyb2tlci5yZXR1cm5XaXRoVHJhbnNmZXJhYmxlcykge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGVzID0gdmFsdWUudHJhbnNmZXJhYmxlcztcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd29ya2VyX3JlcGx5JyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHZhbHVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gbWF5YmVFbmNvZGUocGF5bG9hZCwgdHJhbnNmZXJhYmxlcyk7XG4gICAgICAgICAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShwYXlsb2FkLCB0cmFuc2ZlcmFibGVzLm1hcCh0ID0+IHQub2JqZWN0KSk7XG4gICAgICAgICAgICAgICAgZnJlZVRyYW5zZmVyYWJsZXModHJhbnNmZXJhYmxlcyk7XG4gICAgICAgICAgICAgICAgLy8gaWYgKHRyYW5zZmVyYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vICAgICBVdGlscy5sb2coJ3RyYWNlJywgYCcke21ldGhvZF9uYW1lfScgdHJhbnNmZXJyZWQgJHt0cmFuc2ZlcmFibGVzLmxlbmd0aH0gb2JqZWN0cyB0byBtYWluIHRocmVhZGApO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd29ya2VyX3JlcGx5JyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGAke2Vycm9yLm1lc3NhZ2V9OiAke2Vycm9yLnN0YWNrfWAgOiBlcnJvcilcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEltbWVkaWF0ZSByZXN1bHRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgV29ya2VyQnJva2VyLnJldHVybldpdGhUcmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmZXJhYmxlcyA9IHJlc3VsdC50cmFuc2ZlcmFibGVzO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnd29ya2VyX3JlcGx5JyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlX2lkOiBpZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gYCR7ZXJyb3IubWVzc2FnZX06ICR7ZXJyb3Iuc3RhY2t9YCA6IGVycm9yKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBheWxvYWQgPSBtYXliZUVuY29kZShwYXlsb2FkLCB0cmFuc2ZlcmFibGVzKTtcbiAgICAgICAgICAgIHNlbGYucG9zdE1lc3NhZ2UocGF5bG9hZCwgdHJhbnNmZXJhYmxlcy5tYXAodCA9PiB0Lm9iamVjdCkpO1xuICAgICAgICAgICAgZnJlZVRyYW5zZmVyYWJsZXModHJhbnNmZXJhYmxlcyk7XG4gICAgICAgICAgICAvLyBpZiAodHJhbnNmZXJhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyAgICAgVXRpbHMubG9nKCd0cmFjZScsIGAnJHttZXRob2RfbmFtZX0nIHRyYW5zZmVycmVkICR7dHJhbnNmZXJhYmxlcy5sZW5ndGh9IG9iamVjdHMgdG8gbWFpbiB0aHJlYWRgKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG59XG5cbi8vIFNwZWNpYWwgcmV0dXJuIHZhbHVlIHdyYXBwZXIsIHRvIGluZGljYXRlIHRoYXQgd2Ugd2FudCB0byBmaW5kIGFuZCBpbmNsdWRlXG4vLyB0cmFuc2ZlcmFibGUgb2JqZWN0cyBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZVxuV29ya2VyQnJva2VyLnJldHVybldpdGhUcmFuc2ZlcmFibGVzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdvcmtlckJyb2tlci5yZXR1cm5XaXRoVHJhbnNmZXJhYmxlcykpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXb3JrZXJCcm9rZXIucmV0dXJuV2l0aFRyYW5zZmVyYWJsZXModmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnRyYW5zZmVyYWJsZXMgPSBmaW5kVHJhbnNmZXJhYmxlcyh0aGlzLnZhbHVlKTtcbn07XG5cbi8vIEJ1aWxkIGEgbGlzdCBvZiB0cmFuc2ZlcmFibGUgb2JqZWN0cyBmcm9tIGEgc291cmNlIG9iamVjdFxuLy8gUmV0dXJucyBhIGxpc3Qgb2YgaW5mbyBhYm91dCBlYWNoIHRyYW5zZmVyYWJsZTpcbi8vICAgLSBvYmplY3Q6IHRoZSBhY3R1YWwgdHJhbnNmZXJhYmxlIG9iamVjdFxuLy8gICAtIHBhcmVudDogdGhlIHBhcmVudCBvYmplY3QgdGhhdCB0aGUgdHJhbnNmZXJhYmxlIGlzIGEgcHJvcGVydHkgb2YgKGlmIGFueSlcbi8vICAgLSBwcm9wZXJ0eTogdGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIHRyYW5zZmVyYWJsZSBvbiB0aGUgcGFyZW50IG9iamVjdCAoaWYgYW55KVxuLy8gVE9ETzogYWRkIG9wdGlvbiBpbiBjYXNlIHlvdSBET04nVCB3YW50IHRvIHRyYW5zZmVyIG9iamVjdHNcbmZ1bmN0aW9uIGZpbmRUcmFuc2ZlcmFibGVzKHNvdXJjZSwgcGFyZW50ID0gbnVsbCwgcHJvcGVydHkgPSBudWxsLCBsaXN0ID0gW10pIHtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICAvLyBDaGVjayBlYWNoIGFycmF5IGVsZW1lbnRcbiAgICAgICAgc291cmNlLmZvckVhY2goKHgsIGkpID0+IGZpbmRUcmFuc2ZlcmFibGVzKHgsIHNvdXJjZSwgaSwgbGlzdCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc291cmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBJcyB0aGUgb2JqZWN0IGEgdHJhbnNmZXJhYmxlIGFycmF5IGJ1ZmZlcj9cbiAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBsaXN0LnB1c2goeyBvYmplY3Q6IHNvdXJjZSwgcGFyZW50LCBwcm9wZXJ0eSB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPciBsb29rcyBsaWtlIGEgdHlwZWQgYXJyYXkgKGhhcyBhbiBhcnJheSBidWZmZXIgcHJvcGVydHkpP1xuICAgICAgICBlbHNlIGlmIChzb3VyY2UuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIGxpc3QucHVzaCh7IG9iamVjdDogc291cmNlLmJ1ZmZlciwgcGFyZW50LCBwcm9wZXJ0eSB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlcndpc2UgY2hlY2sgZWFjaCBwcm9wZXJ0eVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgZmluZFRyYW5zZmVyYWJsZXMoc291cmNlW3Byb3BdLCBzb3VyY2UsIHByb3AsIGxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyBSZW1vdmUgbmV1dGVyZWQgdHJhbnNmZXJhYmxlcyBmcm9tIHBhcmVudCBvYmplY3RzLCBhcyB0aGV5IHNob3VsZCBubyBsb25nZXIgYmUgYWNjZXNzZWQgYWZ0ZXIgdHJhbnNmZXJcbmZ1bmN0aW9uIGZyZWVUcmFuc2ZlcmFibGVzKHRyYW5zZmVyYWJsZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHJhbnNmZXJhYmxlcykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cmFuc2ZlcmFibGVzLmZpbHRlcih0ID0+IHQucGFyZW50ICYmIHQucHJvcGVydHkpLmZvckVhY2godCA9PiBkZWxldGUgdC5wYXJlbnRbdC5wcm9wZXJ0eV0pO1xufVxuXG4vLyBNZXNzYWdlIHBheWxvYWQgY2FuIGJlIHN0cmluZ2lmaWVkIGZvciBmYXN0ZXIgdHJhbnNmZXIsIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgdHJhbnNmZXJhYmxlIG9iamVjdHNcbmZ1bmN0aW9uIG1heWJlRW5jb2RlIChwYXlsb2FkLCB0cmFuc2ZlcmFibGVzKSB7XG4gICAgaWYgKHRyYW5zZmVyYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTtcbiAgICB9XG4gICAgcmV0dXJuIHBheWxvYWQ7XG59XG5cbi8vIFBhcnNlIHN0cmluZ2lmaWVkIG1lc3NhZ2UgcGF5bG9hZFxuZnVuY3Rpb24gbWF5YmVEZWNvZGUgKGRhdGEpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZGF0YSkgOiBkYXRhKTtcbn1cblxuLy8gU2V0dXAgdGhpcyB0aHJlYWQgYXMgYXBwcm9wcmlhdGVcbmlmIChVdGlscy5pc01haW5UaHJlYWQpIHtcbiAgICBzZXR1cE1haW5UaHJlYWQoKTtcbn1cblxuaWYgKFV0aWxzLmlzV29ya2VyVGhyZWFkKSB7XG4gICAgc2V0dXBXb3JrZXJUaHJlYWQoKTtcbn1cbiIsIi8qKiogVmVjdG9yIGZ1bmN0aW9ucyAtIHZlY3RvcnMgcHJvdmlkZWQgYXMgW3gsIHksIHpdIGFycmF5cyAqKiovXG5cbnZhciBWZWN0b3I7XG5leHBvcnQgZGVmYXVsdCBWZWN0b3IgPSB7fTtcblxuVmVjdG9yLnNldCA9IGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIFYgPSBbXTtcbiAgICB2YXIgbGltID0gdi5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW07IGkrKykge1xuICAgICAgICBWW2ldID0gdltpXTtcbiAgICB9XG4gICAgcmV0dXJuIFY7XG59O1xuXG5WZWN0b3IubmVnID0gZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgViA9IFtdO1xuICAgIHZhciBsaW0gPSB2Lmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbTsgaSsrKSB7XG4gICAgICAgIFZbaV0gPSB2W2ldICogLTE7XG4gICAgfVxuICAgIHJldHVybiBWO1xufTtcblxuLy8gQWRkaXRpb24gb2YgdHdvIHZlY3RvcnNcblZlY3Rvci5hZGQgPSBmdW5jdGlvbiAodjEsIHYyKSB7XG4gICAgdmFyIHYgPSBbXTtcbiAgICB2YXIgbGltID0gTWF0aC5taW4odjEubGVuZ3RoLHYyLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW07IGkrKykge1xuICAgICAgICB2W2ldID0gdjFbaV0gKyB2MltpXTtcbiAgICB9XG4gICAgcmV0dXJuIHY7XG59O1xuXG4vLyBTdWJzdHJhY3Rpb24gb2YgdHdvIHZlY3RvcnNcblZlY3Rvci5zdWIgPSBmdW5jdGlvbiAodjEsIHYyKSB7XG4gICAgdmFyIHYgPSBbXTtcbiAgICB2YXIgbGltID0gTWF0aC5taW4odjEubGVuZ3RoLHYyLmxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbTsgaSsrKSB7XG4gICAgICAgIHZbaV0gPSB2MVtpXSAtIHYyW2ldO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cblZlY3Rvci5zaWduZWRfYXJlYSA9IGZ1bmN0aW9uICh2MSwgdjIsIHYzKSB7XG4gICAgcmV0dXJuICh2MlswXS12MVswXSkqKHYzWzFdLXYxWzFdKSAtICh2M1swXS12MVswXSkqKHYyWzFdLXYxWzFdKTtcbn07XG5cbi8vIE11bHRpcGxpY2F0aW9uIG9mIHR3byB2ZWN0b3JzXG5WZWN0b3IubXVsdCA9IGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICB2YXIgdiA9IFtdLFxuICAgICAgICBsZW4gPSB2MS5sZW5ndGgsXG4gICAgICAgIGk7XG5cbiAgICBpZiAodHlwZW9mIHYyID09PSAnbnVtYmVyJykge1xuICAgICAgICAvLyBNdWxpdHBseSBieSBzY2FsYXJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2W2ldID0gdjFbaV0gKiB2MjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gTXVsdGlwbHkgdHdvIHZlY3RvcnNcbiAgICAgICAgbGVuID0gTWF0aC5taW4odjEubGVuZ3RoLHYyLmxlbmd0aCk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdltpXSA9IHYxW2ldICogdjJbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG59O1xuXG4vLyBEaXZpc2lvbiBvZiB0d28gdmVjdG9yc1xuVmVjdG9yLmRpdiA9IGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICB2YXIgdiA9IFtdLFxuICAgICAgICBpO1xuICAgIGlmKHR5cGVvZiB2MiA9PT0gJ251bWJlcicpe1xuICAgICAgICAvLyBEaXZpZGUgYnkgc2NhbGFyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB2MS5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICB2W2ldID0gdjFbaV0gLyB2MjtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERpdmlkZSB0byB2ZWN0b3JzXG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbih2MS5sZW5ndGgsdjIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2W2ldID0gdjFbaV0gLyB2MltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cbi8vIEdldCAyRCBwZXJwZW5kaWN1bGFyXG5WZWN0b3IucGVycCA9IGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICByZXR1cm4gWyB2MlsxXSAtIHYxWzFdLFxuICAgICAgICAgICAgIHYxWzBdIC0gdjJbMF0gXTtcbn07XG5cbi8vIEdldCAyRCB2ZWN0b3Igcm90YXRlZFxuVmVjdG9yLnJvdCA9IGZ1bmN0aW9uICh2LCBhKSB7XG4gICAgdmFyIGMgPSBNYXRoLmNvcyhhKTtcbiAgICB2YXIgcyA9IE1hdGguc2luKGEpO1xuICAgIHJldHVybiBbdlswXSAqIGMgLSB2WzFdICogcyxcbiAgICAgICAgICAgIHZbMF0gKiBzICsgdlsxXSAqIGNdO1xufTtcblxuLy8gR2V0IDJEIGhlYWRpbmcgYW5nbGVcblZlY3Rvci5hbmdsZSA9IGZ1bmN0aW9uIChbeCwgeV0pIHtcbiAgICByZXR1cm4gTWF0aC5hdGFuMih5LHgpO1xufTtcblxuLy8gR2V0IGFuZ2xlIGJldHdlZW4gdHdvIHZlY3RvcnNcblZlY3Rvci5hbmdsZUJldHdlZW4gPSBmdW5jdGlvbihBLCBCKXtcbiAgICB2YXIgZGVsdGEgPSBWZWN0b3IuZG90KEEsIEIpO1xuICAgIGlmIChkZWx0YSA8IC0xKSB7XG4gICAgICAgIGRlbHRhID0gLTE7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLmFjb3MoZGVsdGEpO1xufTtcblxuLy8gQ29tcGFyZSB0d28gcG9pbnRzXG5WZWN0b3IuaXNFcXVhbCA9IGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICB2YXIgbGVuID0gdjEubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKHYxW2ldICE9PSB2MltpXSl7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vLyBWZWN0b3IgbGVuZ3RoIHNxdWFyZWRcblZlY3Rvci5sZW5ndGhTcSA9IGZ1bmN0aW9uICh2KVxue1xuICAgIGlmICh2Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICByZXR1cm4gKHZbMF0qdlswXSArIHZbMV0qdlsxXSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gKHZbMF0qdlswXSArIHZbMV0qdlsxXSArIHZbMl0qdlsyXSk7XG4gICAgfVxufTtcblxuLy8gVmVjdG9yIGxlbmd0aFxuVmVjdG9yLmxlbmd0aCA9IGZ1bmN0aW9uICh2KVxue1xuICAgIHJldHVybiBNYXRoLnNxcnQoVmVjdG9yLmxlbmd0aFNxKHYpKTtcbn07XG5cbi8vIE5vcm1hbGl6ZSBhIHZlY3RvclxuVmVjdG9yLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uICh2KVxue1xuICAgIHZhciBkO1xuICAgIGlmICh2Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICBkID0gdlswXSp2WzBdICsgdlsxXSp2WzFdO1xuICAgICAgICBkID0gTWF0aC5zcXJ0KGQpO1xuXG4gICAgICAgIGlmIChkICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZbMF0gLyBkLCB2WzFdIC8gZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFswLCAwXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkID0gdlswXSp2WzBdICsgdlsxXSp2WzFdICsgdlsyXSp2WzJdO1xuICAgICAgICBkID0gTWF0aC5zcXJ0KGQpO1xuXG4gICAgICAgIGlmIChkICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZbMF0gLyBkLCB2WzFdIC8gZCwgdlsyXSAvIGRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbMCwgMCwgMF07XG4gICAgfVxufTtcblxuLy8gQ3Jvc3MgcHJvZHVjdCBvZiB0d28gdmVjdG9yc1xuVmVjdG9yLmNyb3NzICA9IGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAodjFbMV0gKiB2MlsyXSkgLSAodjFbMl0gKiB2MlsxXSksXG4gICAgICAgICh2MVsyXSAqIHYyWzBdKSAtICh2MVswXSAqIHYyWzJdKSxcbiAgICAgICAgKHYxWzBdICogdjJbMV0pIC0gKHYxWzFdICogdjJbMF0pXG4gICAgXTtcbn07XG5cbi8vIERvdCBwcm9kdWN0IG9mIHR3byB2ZWN0b3JzXG5WZWN0b3IuZG90ID0gZnVuY3Rpb24gKHYxLCB2Mikge1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgbGltID0gTWF0aC5taW4odjEubGVuZ3RoLCB2Mi5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGltOyBpKyspIHtcbiAgICAgICAgbiArPSB2MVtpXSAqIHYyW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbn07XG5cbi8vIEZpbmQgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gbGluZXMgc3BlY2lmaWVkIGFzIHNlZ21lbnRzIGZyb20gcG9pbnRzIChwMSwgcDIpIGFuZCAocDMsIHA0KVxuLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaW5lLWxpbmVfaW50ZXJzZWN0aW9uXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NyYW1lcidzX3J1bGVcblZlY3Rvci5saW5lSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHAxLCBwMiwgcDMsIHA0LCBwYXJhbGxlbF90b2xlcmFuY2UpIHtcbiAgICBwYXJhbGxlbF90b2xlcmFuY2UgPSBwYXJhbGxlbF90b2xlcmFuY2UgfHwgMC4wMTtcblxuICAgIC8vIGExKnggKyBiMSp5ID0gYzEgZm9yIGxpbmUgKHgxLCB5MSkgdG8gKHgyLCB5MilcbiAgICAvLyBhMip4ICsgYjIqeSA9IGMyIGZvciBsaW5lICh4MywgeTMpIHRvICh4NCwgeTQpXG4gICAgdmFyIGExID0gcDFbMV0gLSBwMlsxXTsgLy8geTEgLSB5MlxuICAgIHZhciBiMSA9IHAxWzBdIC0gcDJbMF07IC8vIHgxIC0geDJcbiAgICB2YXIgYTIgPSBwM1sxXSAtIHA0WzFdOyAvLyB5MyAtIHk0XG4gICAgdmFyIGIyID0gcDNbMF0gLSBwNFswXTsgLy8geDMgLSB4NFxuICAgIHZhciBjMSA9IChwMVswXSAqIHAyWzFdKSAtIChwMVsxXSAqIHAyWzBdKTsgLy8geDEqeTIgLSB5MSp4MlxuICAgIHZhciBjMiA9IChwM1swXSAqIHA0WzFdKSAtIChwM1sxXSAqIHA0WzBdKTsgLy8geDMqeTQgLSB5Myp4NFxuICAgIHZhciBkZW5vbSA9IChiMSAqIGEyKSAtIChhMSAqIGIyKTtcblxuICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPiBwYXJhbGxlbF90b2xlcmFuY2UpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICgoYzEgKiBiMikgLSAoYjEgKiBjMikpIC8gZGVub20sXG4gICAgICAgICAgICAoKGMxICogYTIpIC0gKGExICogYzIpKSAvIGRlbm9tXG4gICAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBudWxsOyAvLyByZXR1cm4gbnVsbCBpZiBsaW5lcyBhcmUgKGNsb3NlIHRvKSBwYXJhbGxlbFxufTtcbiIsImltcG9ydCBHZW8gZnJvbSAnLi9nZW8nO1xuaW1wb3J0IFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi9jYW1lcmEnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHN1YnNjcmliZU1peGluIGZyb20gJy4vdXRpbHMvc3Vic2NyaWJlJztcblxuaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXcge1xuXG4gICAgY29uc3RydWN0b3IgKHNjZW5lLCBvcHRpb25zKSB7XG4gICAgICAgIHN1YnNjcmliZU1peGluKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcbiAgICAgICAgdGhpcy5jcmVhdGVNYXRyaWNlcygpO1xuXG4gICAgICAgIHRoaXMuem9vbSA9IG51bGw7XG4gICAgICAgIHRoaXMuY2VudGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5ib3VuZHMgPSBudWxsO1xuICAgICAgICB0aGlzLm1ldGVyc19wZXJfcGl4ZWwgPSBudWxsO1xuXG4gICAgICAgIHRoaXMucGFubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnpvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy56b29tX2RpcmVjdGlvbiA9IDA7XG5cbiAgICAgICAgLy8gU2l6ZSBvZiB2aWV3cG9ydCBpbiBDU1MgcGl4ZWxzLCBkZXZpY2UgcGl4ZWxzLCBhbmQgbWVyY2F0b3IgbWV0ZXJzXG4gICAgICAgIHRoaXMuc2l6ZSA9IHtcbiAgICAgICAgICAgIGNzczoge30sXG4gICAgICAgICAgICBkZXZpY2U6IHt9LFxuICAgICAgICAgICAgbWV0ZXJzOiB7fVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFzcGVjdCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5idWZmZXIgPSAwO1xuICAgICAgICB0aGlzLmNvbnRpbnVvdXNfem9vbSA9ICh0eXBlb2Ygb3B0aW9ucy5jb250aW51b3VzWm9vbSA9PT0gJ2Jvb2xlYW4nKSA/IG9wdGlvbnMuY29udGludW91c1pvb20gOiB0cnVlO1xuICAgICAgICB0aGlzLnRpbGVfc2ltcGxpZmljYXRpb25fbGV2ZWwgPSAwOyAvLyBsZXZlbC1vZi1kZXRhaWwgZG93bnNhbXBsaW5nIHRvIGFwcGx5IHRvIHRpbGUgbG9hZGluZ1xuICAgICAgICB0aGlzLnByZXNlcnZlX3RpbGVzX3dpdGhpbl96b29tID0gMTtcblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgc3RhdGUgYmVmb3JlIHNjZW5lIGNvbmZpZyBpcyB1cGRhdGVkXG4gICAgcmVzZXQgKCkge1xuICAgICAgICB0aGlzLmNyZWF0ZUNhbWVyYSgpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBjYW1lcmFcbiAgICBjcmVhdGVDYW1lcmEgKCkge1xuICAgICAgICBsZXQgYWN0aXZlX2NhbWVyYSA9IHRoaXMuZ2V0QWN0aXZlQ2FtZXJhKCk7XG4gICAgICAgIGlmIChhY3RpdmVfY2FtZXJhKSB7XG4gICAgICAgICAgICB0aGlzLmNhbWVyYSA9IENhbWVyYS5jcmVhdGUoYWN0aXZlX2NhbWVyYSwgdGhpcywgdGhpcy5zY2VuZS5jb25maWcuY2FtZXJhc1thY3RpdmVfY2FtZXJhXSk7XG4gICAgICAgICAgICB0aGlzLmNhbWVyYS51cGRhdGVWaWV3KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgYWN0aXZlIGNhbWVyYSAtIGZvciBwdWJsaWMgQVBJXG4gICAgZ2V0QWN0aXZlQ2FtZXJhICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuY29uZmlnICYmIHRoaXMuc2NlbmUuY29uZmlnLmNhbWVyYXMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG5hbWUgaW4gdGhpcy5zY2VuZS5jb25maWcuY2FtZXJhcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjZW5lLmNvbmZpZy5jYW1lcmFzW25hbWVdLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgYWN0aXZlIGNhbWVyYSBhbmQgcmVjb21waWxlIC0gZm9yIHB1YmxpYyBBUElcbiAgICBzZXRBY3RpdmVDYW1lcmEgKG5hbWUpIHtcbiAgICAgICAgbGV0IHByZXYgPSB0aGlzLmdldEFjdGl2ZUNhbWVyYSgpO1xuICAgICAgICBpZiAodGhpcy5zY2VuZS5jb25maWcuY2FtZXJhc1tuYW1lXSkge1xuICAgICAgICAgICAgdGhpcy5zY2VuZS5jb25maWcuY2FtZXJhc1tuYW1lXS5hY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBDbGVhciBwcmV2aW91c2x5IGFjdGl2ZSBjYW1lcmFcbiAgICAgICAgICAgIGlmIChwcmV2ICYmIHByZXYgIT09IG5hbWUgJiYgdGhpcy5zY2VuZS5jb25maWcuY2FtZXJhc1twcmV2XSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNjZW5lLmNvbmZpZy5jYW1lcmFzW3ByZXZdLmFjdGl2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2NlbmUudXBkYXRlQ29uZmlnKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZUNhbWVyYSgpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBtZXRob2QgY2FsbGVkIG9uY2UgcGVyIGZyYW1lXG4gICAgdXBkYXRlICgpIHtcbiAgICAgICAgdGhpcy5jYW1lcmEudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGxvZ2ljYWwgcGl4ZWwgc2l6ZSBvZiB2aWV3cG9ydFxuICAgIHNldFZpZXdwb3J0U2l6ZSAod2lkdGgsIGhlaWdodCkge1xuICAgICAgICB0aGlzLnNpemUuY3NzID0geyB3aWR0aCwgaGVpZ2h0IH07XG4gICAgICAgIHRoaXMuc2l6ZS5kZXZpY2UgPSB7XG4gICAgICAgICAgICB3aWR0aDogTWF0aC5yb3VuZCh0aGlzLnNpemUuY3NzLndpZHRoICogVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAgICAgICAgIGhlaWdodDogTWF0aC5yb3VuZCh0aGlzLnNpemUuY3NzLmhlaWdodCAqIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbylcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hc3BlY3QgPSB0aGlzLnNpemUuY3NzLndpZHRoIC8gdGhpcy5zaXplLmNzcy5oZWlnaHQ7XG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRzKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBtYXAgdmlldywgY2FuIGJlIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBsYXQvbG5nIGFuZC9vciB6b29tXG4gICAgc2V0VmlldyAoeyBsbmcsIGxhdCwgem9vbSB9ID0ge30pIHtcbiAgICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgICAvLyBTZXQgY2VudGVyXG4gICAgICAgIGlmICh0eXBlb2YgbG5nID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgbGF0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNlbnRlciB8fCBsbmcgIT09IHRoaXMuY2VudGVyLmxuZyB8fCBsYXQgIT09IHRoaXMuY2VudGVyLmxhdCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2VudGVyID0geyBsbmc6IEdlby53cmFwTG5nKGxuZyksIGxhdCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHpvb21cbiAgICAgICAgaWYgKHR5cGVvZiB6b29tID09PSAnbnVtYmVyJyAmJiB6b29tICE9PSB0aGlzLnpvb20pIHtcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXRab29tKHpvb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfVxuXG4gICAgc2V0Wm9vbSAoem9vbSkge1xuICAgICAgICBpZiAodGhpcy56b29taW5nKSB7XG4gICAgICAgICAgICB0aGlzLnpvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGFzdF96b29tID0gdGhpcy56b29tO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxhc3RfdGlsZV96b29tID0gdGhpcy50aWxlX3pvb207XG4gICAgICAgIGxldCB0aWxlX3pvb20gPSB0aGlzLnRpbGVab29tKHpvb20pO1xuICAgICAgICBpZiAoIXRoaXMuY29udGludW91c196b29tKSB7XG4gICAgICAgICAgICB6b29tID0gdGlsZV96b29tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbGVfem9vbSAhPT0gbGFzdF90aWxlX3pvb20pIHtcbiAgICAgICAgICAgIHRoaXMuem9vbV9kaXJlY3Rpb24gPSB0aWxlX3pvb20gPiBsYXN0X3RpbGVfem9vbSA/IDEgOiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGFzdF96b29tID0gdGhpcy56b29tO1xuICAgICAgICB0aGlzLnpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLnRpbGVfem9vbSA9IHRpbGVfem9vbTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kcygpO1xuICAgICAgICB0aGlzLnNjZW5lLnJlcXVlc3RSZWRyYXcoKTtcbiAgICB9XG5cbiAgICBzdGFydFpvb20gKCkge1xuICAgICAgICB0aGlzLmxhc3Rfem9vbSA9IHRoaXMuem9vbTtcbiAgICAgICAgdGhpcy56b29taW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDaG9vc2UgdGhlIGJhc2Ugem9vbSBsZXZlbCB0byB1c2UgZm9yIGEgZ2l2ZW4gZnJhY3Rpb25hbCB6b29tXG4gICAgYmFzZVpvb20gKHpvb20pIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioem9vbSk7XG4gICAgfVxuXG4gICAgLy8gRm9yIGEgZ2l2ZW4gdmlldyB6b29tLCB3aGF0IHRpbGUgem9vbSBzaG91bGQgYmUgbG9hZGVkP1xuICAgIHRpbGVab29tICh2aWV3X3pvb20pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVpvb20odmlld196b29tKSAtIHRoaXMudGlsZV9zaW1wbGlmaWNhdGlvbl9sZXZlbDtcbiAgICB9XG5cbiAgICAvLyBGb3IgYSBnaXZlbiB0aWxlIHpvb20sIHdoYXQgc3R5bGUgem9vbSBzaG91bGQgYmUgdXNlZD9cbiAgICBzdHlsZVpvb20gKHRpbGVfem9vbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlWm9vbSh0aWxlX3pvb20pICsgdGhpcy50aWxlX3NpbXBsaWZpY2F0aW9uX2xldmVsO1xuICAgIH1cblxuICAgIHJlYWR5ICgpIHtcbiAgICAgICAgLy8gVE9ETzogYmV0dGVyIGNvbmNlcHQgb2YgXCJyZWFkaW5lc3NcIiBzdGF0ZT9cbiAgICAgICAgaWYgKHRoaXMuc2l6ZS5jc3MgPT0gbnVsbCB8fCB0aGlzLmNlbnRlciA9PSBudWxsIHx8IHRoaXMuem9vbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSB2aWV3cG9ydCBib3VuZHMgYmFzZWQgb24gY3VycmVudCBjZW50ZXIgYW5kIHpvb21cbiAgICB1cGRhdGVCb3VuZHMgKCkge1xuICAgICAgICBpZiAoIXRoaXMucmVhZHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZXRlcnNfcGVyX3BpeGVsID0gR2VvLm1ldGVyc1BlclBpeGVsKHRoaXMuem9vbSk7XG5cbiAgICAgICAgLy8gU2l6ZSBvZiB0aGUgaGFsZi12aWV3cG9ydCBpbiBtZXRlcnMgYXQgY3VycmVudCB6b29tXG4gICAgICAgIHRoaXMuc2l6ZS5tZXRlcnMgPSB7XG4gICAgICAgICAgICB4OiB0aGlzLnNpemUuY3NzLndpZHRoICogdGhpcy5tZXRlcnNfcGVyX3BpeGVsLFxuICAgICAgICAgICAgeTogdGhpcy5zaXplLmNzcy5oZWlnaHQgKiB0aGlzLm1ldGVyc19wZXJfcGl4ZWxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDZW50ZXIgb2Ygdmlld3BvcnQgaW4gbWV0ZXJzLCBhbmQgdGlsZVxuICAgICAgICBsZXQgW3gsIHldID0gR2VvLmxhdExuZ1RvTWV0ZXJzKFt0aGlzLmNlbnRlci5sbmcsIHRoaXMuY2VudGVyLmxhdF0pO1xuICAgICAgICB0aGlzLmNlbnRlci5tZXRlcnMgPSB7IHgsIHkgfTtcblxuICAgICAgICB0aGlzLmNlbnRlci50aWxlID0gR2VvLnRpbGVGb3JNZXRlcnMoW3RoaXMuY2VudGVyLm1ldGVycy54LCB0aGlzLmNlbnRlci5tZXRlcnMueV0sIHRoaXMudGlsZV96b29tKTtcblxuICAgICAgICAvLyBCb3VuZHMgaW4gbWV0ZXJzXG4gICAgICAgIHRoaXMuYm91bmRzID0ge1xuICAgICAgICAgICAgc3c6IHtcbiAgICAgICAgICAgICAgICB4OiB0aGlzLmNlbnRlci5tZXRlcnMueCAtIHRoaXMuc2l6ZS5tZXRlcnMueCAvIDIsXG4gICAgICAgICAgICAgICAgeTogdGhpcy5jZW50ZXIubWV0ZXJzLnkgLSB0aGlzLnNpemUubWV0ZXJzLnkgLyAyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmU6IHtcbiAgICAgICAgICAgICAgICB4OiB0aGlzLmNlbnRlci5tZXRlcnMueCArIHRoaXMuc2l6ZS5tZXRlcnMueCAvIDIsXG4gICAgICAgICAgICAgICAgeTogdGhpcy5jZW50ZXIubWV0ZXJzLnkgKyB0aGlzLnNpemUubWV0ZXJzLnkgLyAyXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zY2VuZS50aWxlX21hbmFnZXIudXBkYXRlVGlsZXNGb3JWaWV3KCk7XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdtb3ZlJyk7XG4gICAgICAgIHRoaXMuc2NlbmUucmVxdWVzdFJlZHJhdygpOyAvLyBUT0RPIGF1dG9tYXRlIHZpYSBtb3ZlIGV2ZW50P1xuICAgIH1cblxuICAgIGZpbmRWaXNpYmxlVGlsZUNvb3JkaW5hdGVzICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kcykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHogPSB0aGlzLnRpbGVfem9vbTtcbiAgICAgICAgbGV0IHN3ID0gR2VvLnRpbGVGb3JNZXRlcnMoW3RoaXMuYm91bmRzLnN3LngsIHRoaXMuYm91bmRzLnN3LnldLCB6KTtcbiAgICAgICAgbGV0IG5lID0gR2VvLnRpbGVGb3JNZXRlcnMoW3RoaXMuYm91bmRzLm5lLngsIHRoaXMuYm91bmRzLm5lLnldLCB6KTtcblxuICAgICAgICBsZXQgY29vcmRzID0gW107XG4gICAgICAgIGZvciAobGV0IHggPSBzdy54IC0gdGhpcy5idWZmZXI7IHggPD0gbmUueCArIHRoaXMuYnVmZmVyOyB4KyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IHkgPSBuZS55IC0gdGhpcy5idWZmZXI7IHkgPD0gc3cueSArIHRoaXMuYnVmZmVyOyB5KyspIHtcbiAgICAgICAgICAgICAgICBjb29yZHMucHVzaChUaWxlLmNvb3JkKHsgeCwgeSwgeiB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvb3JkcztcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGlsZXMgdG9vIGZhciBvdXRzaWRlIG9mIHZpZXdcbiAgICBwcnVuZVRpbGVzRm9yVmlldyAoKSB7XG4gICAgICAgIC8vIFRPRE86IHdpbGwgdGhpcyBmdW5jdGlvbiBldmVyIGJlIGNhbGxlZCB3aGVuIHZpZXcgaXNuJ3QgcmVhZHk/XG4gICAgICAgIGlmICghdGhpcy5yZWFkeSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgdGlsZXMgdGhhdCBhcmUgYSBzcGVjaWZpZWQgIyBvZiB0aWxlcyBvdXRzaWRlIG9mIHRoZSB2aWV3cG9ydCBib3JkZXJcbiAgICAgICAgbGV0IGJvcmRlcl90aWxlcyA9IFtcbiAgICAgICAgICAgIE1hdGguY2VpbCgoTWF0aC5mbG9vcih0aGlzLnNpemUuY3NzLndpZHRoIC8gR2VvLnRpbGVfc2l6ZSkgKyAyKSAvIDIpLFxuICAgICAgICAgICAgTWF0aC5jZWlsKChNYXRoLmZsb29yKHRoaXMuc2l6ZS5jc3MuaGVpZ2h0IC8gR2VvLnRpbGVfc2l6ZSkgKyAyKSAvIDIpXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5zY2VuZS50aWxlX21hbmFnZXIucmVtb3ZlVGlsZXModGlsZSA9PiB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgdmlzaWJsZSB0aWxlc1xuICAgICAgICAgICAgaWYgKHRpbGUudmlzaWJsZSB8fCB0aWxlLnByb3h5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGlsZXMgb3V0c2lkZSBnaXZlbiB6b29tIHRoYXQgYXJlIHN0aWxsIGxvYWRpbmdcbiAgICAgICAgICAgIGlmICh0aWxlLmxvYWRpbmcgJiYgdGlsZS5zdHlsZV96b29tICE9PSB0aGlzLnRpbGVfem9vbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEaXNjYXJkIGlmIHRvbyBmYXIgZnJvbSBjdXJyZW50IHpvb21cbiAgICAgICAgICAgIGxldCB6ZGlmZiA9IE1hdGguYWJzKHRpbGUuc3R5bGVfem9vbSAtIHRoaXMudGlsZV96b29tKTtcbiAgICAgICAgICAgIGlmICh6ZGlmZiA+IHRoaXMucHJlc2VydmVfdGlsZXNfd2l0aGluX3pvb20pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSGFuZGxlIHRpbGVzIGF0IGRpZmZlcmVudCB6b29tc1xuICAgICAgICAgICAgbGV0IGNvb3JkcyA9IFRpbGUuY29vcmRpbmF0ZUF0Wm9vbSh0aWxlLmNvb3JkcywgdGhpcy50aWxlX3pvb20pO1xuXG4gICAgICAgICAgICAvLyBEaXNjYXJkIHRpbGVzIG91dHNpZGUgYW4gYXJlYSBzdXJyb3VuZGluZyB0aGUgdmlld3BvcnRcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhjb29yZHMueCAtIHRoaXMuY2VudGVyLnRpbGUueCkgLSBib3JkZXJfdGlsZXNbMF0gPiB0aGlzLmJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIGxvZy50cmFjZShgVmlldzogcmVtb3ZlIHRpbGUgJHt0aWxlLmtleX0gKGFzICR7Y29vcmRzLnh9LyR7Y29vcmRzLnl9LyR7dGhpcy50aWxlX3pvb219KSBmb3IgYmVpbmcgdG9vIGZhciBvdXQgb2YgdmlzaWJsZSBhcmVhICoqKmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoTWF0aC5hYnMoY29vcmRzLnkgLSB0aGlzLmNlbnRlci50aWxlLnkpIC0gYm9yZGVyX3RpbGVzWzFdID4gdGhpcy5idWZmZXIpIHtcbiAgICAgICAgICAgICAgICBsb2cudHJhY2UoYFZpZXc6IHJlbW92ZSB0aWxlICR7dGlsZS5rZXl9IChhcyAke2Nvb3Jkcy54fS8ke2Nvb3Jkcy55fS8ke3RoaXMudGlsZV96b29tfSkgZm9yIGJlaW5nIHRvbyBmYXIgb3V0IG9mIHZpc2libGUgYXJlYSAqKipgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWxsb2NhdGUgbW9kZWwtdmlldyBtYXRyaWNlc1xuICAgIC8vIDY0LWJpdCB2ZXJzaW9ucyBhcmUgZm9yIENQVSBjYWxjdWF0aW9uc1xuICAgIC8vIDMyLWJpdCB2ZXJzaW9ucyBhcmUgZG93bnNhbXBsZWQgYW5kIHNlbnQgdG8gR1BVXG4gICAgY3JlYXRlTWF0cmljZXMgKCkge1xuICAgICAgICB0aGlzLm1hdHJpY2VzID0ge307XG4gICAgICAgIHRoaXMubWF0cmljZXMubW9kZWwgPSBuZXcgRmxvYXQ2NEFycmF5KDE2KTtcbiAgICAgICAgdGhpcy5tYXRyaWNlcy5tb2RlbDMyID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XG4gICAgICAgIHRoaXMubWF0cmljZXMubW9kZWxfdmlldyA9IG5ldyBGbG9hdDY0QXJyYXkoMTYpO1xuICAgICAgICB0aGlzLm1hdHJpY2VzLm1vZGVsX3ZpZXczMiA9IG5ldyBGbG9hdDMyQXJyYXkoMTYpO1xuICAgICAgICB0aGlzLm1hdHJpY2VzLm5vcm1hbCA9IG5ldyBGbG9hdDY0QXJyYXkoOSk7XG4gICAgICAgIHRoaXMubWF0cmljZXMubm9ybWFsMzIgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgICAgICB0aGlzLm1hdHJpY2VzLmludmVyc2Vfbm9ybWFsMzIgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBhbmQgc2V0IG1vZGVsL3ZpZXcgYW5kIG5vcm1hbCBtYXRyaWNlcyBmb3IgYSB0aWxlXG4gICAgc2V0dXBUaWxlICh0aWxlLCBwcm9ncmFtKSB7XG4gICAgICAgIC8vIFRpbGUtc3BlY2lmaWMgc3RhdGVcbiAgICAgICAgLy8gVE9ETzogY2FsYyB0aGVzZSBvbmNlIHBlciB0aWxlIChjdXJyZW50bHkgYmVpbmcgbmVlZGxlc3NseSByZS1jYWxjdWxhdGVkIHBlci10aWxlLXBlci1zdHlsZSlcbiAgICAgICAgdGlsZS5zZXR1cFByb2dyYW0odGhpcy5tYXRyaWNlcywgcHJvZ3JhbSk7XG5cbiAgICAgICAgLy8gTW9kZWwtdmlldyBhbmQgbm9ybWFsIG1hdHJpY2VzXG4gICAgICAgIHRoaXMuY2FtZXJhLnNldHVwTWF0cmljZXModGhpcy5tYXRyaWNlcywgcHJvZ3JhbSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGdlbmVyYWwgdW5pZm9ybXMgdGhhdCBtdXN0IGJlIHVwZGF0ZWQgb25jZSBwZXIgcHJvZ3JhbVxuICAgIHNldHVwUHJvZ3JhbSAocHJvZ3JhbSkge1xuICAgICAgICBwcm9ncmFtLnVuaWZvcm0oJzJmJywgJ3VfcmVzb2x1dGlvbicsIHRoaXMuc2l6ZS5kZXZpY2Uud2lkdGgsIHRoaXMuc2l6ZS5kZXZpY2UuaGVpZ2h0KTtcbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCczZicsICd1X21hcF9wb3NpdGlvbicsIHRoaXMuY2VudGVyLm1ldGVycy54LCB0aGlzLmNlbnRlci5tZXRlcnMueSwgdGhpcy56b29tKTtcbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCcxZicsICd1X21ldGVyc19wZXJfcGl4ZWwnLCB0aGlzLm1ldGVyc19wZXJfcGl4ZWwpO1xuICAgICAgICBwcm9ncmFtLnVuaWZvcm0oJzFmJywgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJywgVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvKTtcblxuICAgICAgICB0aGlzLmNhbWVyYS5zZXR1cFByb2dyYW0ocHJvZ3JhbSk7XG4gICAgfVxuXG59XG4iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2FycmF5L2Zyb20uanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvbWF0aC9sb2cyLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9mcmVlemUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc2V0LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3MtY2FsbC1jaGVjay5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlLWNsYXNzLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2dldC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2ludGVyb3AtcmVxdWlyZS1kZWZhdWx0LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWQtdG8tYXJyYXkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvLWNvbnN1bWFibGUtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yL3J1bnRpbWUuanMiLCJub2RlX21vZHVsZXMvYmFzZTY0LWpzL2xpYi9iNjQuanMiLCJub2RlX21vZHVsZXMvYml0LXR3aWRkbGUvdHdpZGRsZS5qcyIsIm5vZGVfbW9kdWxlcy9ib3gtaW50ZXJzZWN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JveC1pbnRlcnNlY3QvbGliL2JydXRlLmpzIiwibm9kZV9tb2R1bGVzL2JveC1pbnRlcnNlY3QvbGliL2ludGVyc2VjdC5qcyIsIm5vZGVfbW9kdWxlcy9ib3gtaW50ZXJzZWN0L2xpYi9tZWRpYW4uanMiLCJub2RlX21vZHVsZXMvYm94LWludGVyc2VjdC9saWIvcGFydGl0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2JveC1pbnRlcnNlY3QvbGliL3NvcnQuanMiLCJub2RlX21vZHVsZXMvYm94LWludGVyc2VjdC9saWIvc3dlZXAuanMiLCJub2RlX21vZHVsZXMvYnJvd3Nlci1yZXNvbHZlL2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvZnJvbS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9pcy1pdGVyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vbWFwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9tYXRoL2xvZzIuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2ZyZWV6ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9zZXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuYS1mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmFkZC10by11bnNjb3BhYmxlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmFuLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmNsYXNzb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5jb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmNvbGxlY3Rpb24tdG8tanNvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmNvbGxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuY3R4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmRlc2NyaXB0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZG9tLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmVudW0ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmV4cG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZm9yLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZ2V0LW5hbWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZ2xvYmFsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaGFzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmh0bWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5pbnZva2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5pb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXMtYXJyYXktaXRlci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmlzLWFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXMtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXRlci1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXRlci1jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5pdGVyLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLml0ZXItZGV0ZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXRlci1zdGVwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXRlcmF0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5rZXlvZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmxpYnJhcnkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5taWNyb3Rhc2suanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5vYmplY3QtYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQub2JqZWN0LXNhcC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnByb3BlcnR5LWRlc2MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5yZWRlZmluZS1hbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5yZWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnNhbWUtdmFsdWUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5zZXQtcHJvdG8uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5zZXQtc3BlY2llcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnNldC10by1zdHJpbmctdGFnLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuc2hhcmVkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnN0cmljdC1uZXcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5zdHJpbmctYXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC50YXNrLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQudG8taW50ZWdlci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnRvLWlvYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC50by1sZW5ndGguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC50by1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC51aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC53a3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5tYXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zZXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5tYXAudG8tanNvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jc3Njb2xvcnBhcnNlci9jc3Njb2xvcnBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kdXAvZHVwLmpzIiwibm9kZV9tb2R1bGVzL2VhcmN1dC9zcmMvZWFyY3V0LmpzIiwibm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL2NsaXAuanMiLCJub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvY29udmVydC5qcyIsIm5vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9zaW1wbGlmeS5qcyIsIm5vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy90aWxlLmpzIiwibm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL3dyYXAuanMiLCJub2RlX21vZHVsZXMvZ2wtbWF0My9pbnZlcnQuanMiLCJub2RlX21vZHVsZXMvZ2wtbWF0My9ub3JtYWwtZnJvbS1tYXQ0LmpzIiwibm9kZV9tb2R1bGVzL2dsLW1hdDQvY29weS5qcyIsIm5vZGVfbW9kdWxlcy9nbC1tYXQ0L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL2dsLW1hdDQvbG9va0F0LmpzIiwibm9kZV9tb2R1bGVzL2dsLW1hdDQvbXVsdGlwbHkuanMiLCJub2RlX21vZHVsZXMvZ2wtbWF0NC9wZXJzcGVjdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9nbC1tYXQ0L3NjYWxlLmpzIiwibm9kZV9tb2R1bGVzL2dsLW1hdDQvdHJhbnNsYXRlLmpzIiwibm9kZV9tb2R1bGVzL2dsLXNoYWRlci1lcnJvcnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pcy1hcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9jb21tb24uanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9leGNlcHRpb24uanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9sb2FkZXIuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9tYXJrLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2NvcmUuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfc2FmZS5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZS5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9qc29uLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYmluYXJ5LmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9ib29sLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9mbG9hdC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvaW50LmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvcmVnZXhwLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy91bmRlZmluZWQuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWVyZ2UuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL251bGwuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL29tYXAuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3BhaXJzLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXEuanMiLCJub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3NldC5qcyIsIm5vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc3RyLmpzIiwibm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS90aW1lc3RhbXAuanMiLCJub2RlX21vZHVsZXMvbG9nbGV2ZWwvbGliL2xvZ2xldmVsLmpzIiwibm9kZV9tb2R1bGVzL21hdGNoLWZlYXR1cmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGJmL2J1ZmZlci5qcyIsIm5vZGVfbW9kdWxlcy9wYmYvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcG9pbnQtZ2VvbWV0cnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3N0cmlwLWNvbW1lbnRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RvcG9qc29uL3RvcG9qc29uLmpzIiwibm9kZV9tb2R1bGVzL3R5cGVkYXJyYXktcG9vbC9wb29sLmpzIiwibm9kZV9tb2R1bGVzL3ZlY3Rvci10aWxlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3ZlY3Rvci10aWxlL2xpYi92ZWN0b3J0aWxlLmpzIiwibm9kZV9tb2R1bGVzL3ZlY3Rvci10aWxlL2xpYi92ZWN0b3J0aWxlZmVhdHVyZS5qcyIsIm5vZGVfbW9kdWxlcy92ZWN0b3ItdGlsZS9saWIvdmVjdG9ydGlsZWxheWVyLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9idWlsZGVycy9jb21tb24uanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2J1aWxkZXJzL3BvaW50cy5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvYnVpbGRlcnMvcG9seWdvbnMuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2J1aWxkZXJzL3BvbHlsaW5lcy5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvY2FtZXJhLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9nZW8uanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2dsL2NvbnN0YW50cy5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvZ2wvY29udGV4dC5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvZ2wvZXh0ZW5zaW9ucy5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvZ2wvZ2xzbC5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvZ2wvcmVuZGVyX3N0YXRlLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9nbC9zaGFkZXJfcHJvZ3JhbS5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvZ2wvc2hhZGVyX3NvdXJjZXMuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2dsL3RleHR1cmUuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2dsL3Zhby5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvZ2wvdmJvX21lc2guanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2dsL3ZlcnRleF9kYXRhLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9nbC92ZXJ0ZXhfbGF5b3V0LmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9sYWJlbHMvY29sbGlzaW9uLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9sYWJlbHMvbGFiZWwuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2xhYmVscy9sYWJlbF9saW5lLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9sYWJlbHMvbGFiZWxfcG9pbnQuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2xhYmVscy9yZXBlYXRfZ3JvdXAuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2xlYWZsZXRfbGF5ZXIuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL2xpZ2h0LmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9tYXRlcmlhbC5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvbW9kdWxlLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9zY2VuZS5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc2NlbmVfbG9hZGVyLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9zY2VuZV93b3JrZXIuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3NlbGVjdGlvbi5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc291cmNlcy9kYXRhX3NvdXJjZS5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc291cmNlcy9nZW9qc29uLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9zb3VyY2VzL212dC5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc291cmNlcy9yYXN0ZXIuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3NvdXJjZXMvdG9wb2pzb24uanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3N0eWxlcy9saW5lcy9saW5lcy5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc3R5bGVzL3BvaW50cy9wb2ludF9hbmNob3IuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3N0eWxlcy9wb2ludHMvcG9pbnRzLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9zdHlsZXMvcG9seWdvbnMvcG9seWdvbnMuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3N0eWxlcy9yYXN0ZXIvcmFzdGVyLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9zdHlsZXMvcnVsZS5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc3R5bGVzL3N0eWxlLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy9zdHlsZXMvc3R5bGVfbWFuYWdlci5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc3R5bGVzL3N0eWxlX3BhcnNlci5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvc3R5bGVzL3RleHQvY2FudmFzX3RleHQuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3N0eWxlcy90ZXh0L3RleHQuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3N0eWxlcy90ZXh0L3RleHRfc2V0dGluZ3MuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3RpbGUuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3RpbGVfbWFuYWdlci5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvdGlsZV9weXJhbWlkLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy91dGlscy9lcnJvcnMuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3V0aWxzL2dsLW1hdHJpeC5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvdXRpbHMvbWVyZ2UuanMiLCIvVXNlcnMvYmNhbXBlci9Eb2N1bWVudHMvZGV2L3ZlY3Rvci1tYXAvc3JjL3V0aWxzL29iYi5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvdXRpbHMvc3Vic2NyaWJlLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy91dGlscy91dGlscy5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvdXRpbHMvdmVyc2lvbi5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvdXRpbHMvd29ya2VyX2Jyb2tlci5qcyIsIi9Vc2Vycy9iY2FtcGVyL0RvY3VtZW50cy9kZXYvdmVjdG9yLW1hcC9zcmMvdmVjdG9yLmpzIiwiL1VzZXJzL2JjYW1wZXIvRG9jdW1lbnRzL2Rldi92ZWN0b3ItbWFwL3NyYy92aWV3LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2piQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWhDQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTs7QUNEQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBOztBQ0RBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBOztBQ0ZBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBOzs7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xPQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGpEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE5BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzttQkM1RGdCLFFBQVE7Ozs7QUFFakIsSUFBTSxXQUFXLEdBQUcsQ0FDdkIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsRUFDYixFQUFFLENBQUMsRUFBRSxpQkFBSSxVQUFVLEVBQUUsQ0FB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LE9BQU8sQ0FBQyxTQUFTLEVBQUU7QUFDbkIsY0FBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDekMsY0FBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDekMsY0FBRSxHQUFHLEVBQUUsQ0FBQztTQUNYO0FBQ0QsaUJBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0QyxpQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3pDOztBQUVELFFBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtBQUNsQixnQkFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDaEUsTUFBTSxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUM7QUFDdEIsY0FBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzFFOztBQUVELFFBQUksTUFBTSxFQUFFO0FBQ1IsaUJBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0QyxpQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3pDLE1BQU07QUFDSCxpQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLGlCQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDekM7Q0FDSjs7OztBQUlELFNBQVMsTUFBTSxDQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUU7O0FBRTlELFFBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtBQUNoQixlQUFPO0tBQ1Y7OztBQUdELFFBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDbEIsUUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO0FBQ25CLFdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUEsR0FBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFFLFdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFDLFdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQzdDOztBQUVELFFBQUssVUFBVSxLQUFLLENBQUMsRUFBRTs7QUFFbkIsaUJBQVMsQ0FBRSxLQUFLLEVBQ0wsb0JBQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFDMUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2IsV0FBVyxFQUNYLE9BQU8sQ0FBQyxDQUFDO0tBQ3ZCLE1BQU07O0FBRUgsY0FBTSxDQUFFLEtBQUssRUFDTCxvQkFBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFDckMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2IsV0FBVyxFQUFFLFVBQVUsR0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDL0M7Q0FDSjs7O0FBR0QsU0FBUyxRQUFRLENBQUUsS0FBSyxFQUFFLEtBQW9KLEVBQUU7UUFBcEosV0FBVyxHQUFiLEtBQW9KLENBQWxKLFdBQVc7UUFBRSxlQUFlLEdBQTlCLEtBQW9KLENBQXJJLGVBQWU7UUFBRSxVQUFVLEdBQTFDLEtBQW9KLENBQXBILFVBQVU7UUFBRSxRQUFRLEdBQXBELEtBQW9KLENBQXhHLFFBQVE7UUFBRSxhQUFhLEdBQW5FLEtBQW9KLENBQTlGLGFBQWE7UUFBRSxpQkFBaUIsR0FBdEYsS0FBb0osQ0FBL0UsaUJBQWlCO1FBQUUsV0FBVyxHQUFuRyxLQUFvSixDQUE1RCxXQUFXO1FBQUUsY0FBYyxHQUFuSCxLQUFvSixDQUEvQyxjQUFjO1FBQUUsU0FBUyxHQUE5SCxLQUFvSixDQUEvQixTQUFTO1FBQUUsa0JBQWtCLEdBQWxKLEtBQW9KLENBQXBCLGtCQUFrQjs7O0FBRXhLLFFBQUksS0FBSyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsZUFBTztLQUNWOzs7QUFHRCxtQkFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxtQkFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0FBR3hDLFFBQUksY0FBYyxFQUFFO0FBQ2hCLHVCQUFlLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztBQUMvRSx1QkFBZSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUM7S0FDbEY7OztBQUdELFFBQUksYUFBYSxFQUFFO0FBQ2YsdUJBQWUsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0FBQy9FLHVCQUFlLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUMvRSx1QkFBZSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7S0FDbkQ7OztBQUdELGVBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7Q0FDMUM7OztBQUdELFNBQVMsVUFBVSxDQUFFLE9BQU8sRUFBRTs7QUFFMUIsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsZ0JBQVEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6QixnQkFBUSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pCLGdCQUFRLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRXpCLGdCQUFRLENBQUMsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekIsZ0JBQVEsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6QixnQkFBUSxDQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzVCOztBQUVELFdBQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDOzs7QUFHdEIsV0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDdEIsUUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO0FBQ3JCLGVBQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0tBQzVCO0FBQ0QsUUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO0FBQ25CLGVBQU8sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0tBQzFCO0NBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJDem1CaUIsZUFBZTs7OztnQ0FDUCxxQkFBcUI7Ozs7NkJBQ2hCLG1CQUFtQjs7OztJQUc3QixNQUFNO0FBRVosYUFGTSxNQUFNLENBRVgsSUFBSSxFQUFFLElBQUksRUFBZ0I7WUFBZCxPQUFPLHlEQUFHLEVBQUU7OzhCQUZuQixNQUFNOztBQUduQixZQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixZQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDakMsWUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0tBQzVCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQkFOZ0IsTUFBTTs7OztlQXVCakIsa0JBQUcsRUFDUjs7Ozs7ZUFHVyxzQkFBQyxPQUFPLEVBQUUsRUFDckI7Ozs7O2VBR1Usc0JBQUc7QUFDVixnQkFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDNUIsb0JBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNkLG9CQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDZix3QkFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDbkY7QUFDRCxvQkFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ1gsd0JBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztpQkFDekI7QUFDRCxvQkFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0I7U0FDSjs7Ozs7ZUFHYSx1QkFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFOztBQUU5QixnQ0FBSyxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2RSxtQkFBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7OztBQUcxRSxnQ0FBSyxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDOUQsZ0NBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUQsbUJBQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekUsbUJBQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMzRjs7O2VBOUNZLGdCQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQzlCLG9CQUFRLE1BQU0sQ0FBQyxJQUFJO0FBQ2YscUJBQUssV0FBVztBQUNaLDJCQUFPLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFBQSxBQUNuRCxxQkFBSyxNQUFNO0FBQ1AsMkJBQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUFBLEFBQzlDLHFCQUFLLGFBQWEsQ0FBQzs7QUFFbkI7QUFDSSwyQkFBTyxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFBQSxhQUN4RDtTQUNKOzs7V0FwQmdCLE1BQU07OztxQkFBTixNQUFNOztJQTBFckIsaUJBQWlCO2NBQWpCLGlCQUFpQjs7QUFFUixhQUZULGlCQUFpQixDQUVQLElBQUksRUFBRSxJQUFJLEVBQWdCO1lBQWQsT0FBTyx5REFBRyxFQUFFOzs4QkFGbEMsaUJBQWlCOztBQUdmLG1DQUhGLGlCQUFpQiw2Q0FHVCxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUMzQixZQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQzs7O0FBRzFCLFlBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztBQUN6QyxZQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDdkIsWUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFOztBQUVqQyxnQkFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkU7O0FBRUQsWUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pELFlBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUQsWUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQzs7QUFFL0IsWUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDNUIsWUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7OztBQUc5QyxzQ0FBYyxZQUFZLENBQUMsUUFBUSw0UEFRbEMsQ0FBQztLQUNMOzs7Ozs7Ozs7Ozs7aUJBaENDLGlCQUFpQjs7ZUFxQ0oseUJBQUMsSUFBMEMsRUFBRTtnQkFBMUMsV0FBVyxHQUFiLElBQTBDLENBQXhDLFdBQVc7Z0JBQUUsTUFBTSxHQUFyQixJQUEwQyxDQUEzQixNQUFNO2dCQUFFLFlBQVksR0FBbkMsSUFBMEMsQ0FBbkIsWUFBWTtnQkFBRSxHQUFHLEdBQXhDLElBQTBDLENBQUwsR0FBRzs7O0FBRXBELGdCQUFJLENBQUMsTUFBTSxFQUFFOztBQUVULG9CQUFJLFlBQVksRUFBRTtBQUNkLHVCQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN6Qzs7cUJBRUksSUFBSSxHQUFHLEVBQUU7QUFDViwyQkFBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUMxQixvQ0FBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDeEM7Ozs7QUFJRCxzQkFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDO2FBQzNDOztpQkFFSTtBQUNELGdDQUFZLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFDeEMsdUJBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3pDOztBQUVELG1CQUFPLEVBQUUsV0FBVyxFQUFYLFdBQVcsRUFBRSxNQUFNLEVBQU4sTUFBTSxFQUFFLFlBQVksRUFBWixZQUFZLEVBQUUsR0FBRyxFQUFILEdBQUcsRUFBRSxDQUFDO1NBQ3JEOzs7ZUFFYSwwQkFBRzs7OztBQUliLGdCQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Ozs7bUNBR3ZELElBQUksQ0FBQyxlQUFlLENBQUM7QUFDdkMsMkJBQVcsRUFBRSxlQUFlO0FBQzVCLDRCQUFZLEVBQUUsd0JBQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDbEUsbUJBQUcsRUFBRSx3QkFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNsRCxDQUFDOztnQkFKRyxNQUFNLG9CQUFOLE1BQU07Z0JBQUUsR0FBRyxvQkFBSCxHQUFHOzs7QUFPakIsZ0JBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlFLGdCQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQzs7Ozs7OztBQU9oQyxnQ0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFDeEIsb0JBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQzVDLG9CQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzdDLG9CQUFLLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7OztBQUc5QixnQ0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOzs7QUFHL0UsZ0JBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDbEYsZ0JBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7OztBQUduRixnQkFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELGdCQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0FBSzFELGdDQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUN6RCxvQkFBSyxVQUFVLENBQ1gsZUFBZSxHQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFDcEUsZUFBZSxHQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFDakQsQ0FBQyxDQUNKLENBQ0osQ0FBQzs7O0FBR0YsZ0NBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsb0JBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ2xHOzs7ZUFFSyxrQkFBRztBQUNMLHVDQXJIRixpQkFBaUIsd0NBcUhBO0FBQ2YsZ0JBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN6Qjs7O2VBRVcsc0JBQUMsT0FBTyxFQUFFO0FBQ2xCLG1CQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzVFLG1CQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsbUJBQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQzFFOzs7V0E3SEMsaUJBQWlCO0dBQVMsTUFBTTs7SUFzSWhDLGVBQWU7Y0FBZixlQUFlOztBQUVOLGFBRlQsZUFBZSxDQUVMLElBQUksRUFBRSxJQUFJLEVBQWdCO1lBQWQsT0FBTyx5REFBRyxFQUFFOzs4QkFGbEMsZUFBZTs7QUFHYixtQ0FIRixlQUFlLDZDQUdQLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQzNCLFlBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFlBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzNDLFlBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3hCLGdCQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNwRDs7QUFFRCxZQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUM1QixZQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzs7QUFFNUIsWUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7OztBQUc5QyxzQ0FBYyxZQUFZLENBQUMsUUFBUSwwbkJBY2xDLENBQUM7S0FDTDs7OztpQkFoQ0MsZUFBZTs7ZUFrQ1gsa0JBQUc7QUFDTCx1Q0FuQ0YsZUFBZSx3Q0FtQ0U7O0FBRWYsZ0JBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQzlFLGdCQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDNUYsZ0JBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDOzs7QUFHaEMsZ0NBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNoQyxnQ0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLG9CQUFLLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHbkcsZ0NBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDOzs7QUFHdEMsZ0JBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMzRCxnQkFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzs7QUFHeEMsZ0NBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQ3JELG9CQUFLLFVBQVUsQ0FDWCxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDM0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQzNCLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUM5QixDQUNKLENBQUM7U0FDTDs7O2VBRVcsc0JBQUMsT0FBTyxFQUFFO0FBQ2xCLG1CQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDOztBQUU1RSxtQkFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDOztBQUUzRCxtQkFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BEOzs7V0FwRUMsZUFBZTtHQUFTLE1BQU07O0lBeUU5QixVQUFVO2NBQVYsVUFBVTs7QUFFRCxhQUZULFVBQVUsQ0FFQSxJQUFJLEVBQUUsSUFBSSxFQUFnQjtZQUFkLE9BQU8seURBQUcsRUFBRTs7OEJBRmxDLFVBQVU7O0FBR1IsbUNBSEYsVUFBVSw2Q0FHRixJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUMzQixZQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztLQUN0Qjs7aUJBTEMsVUFBVTs7ZUFPTixrQkFBRzs7QUFFTCxnQkFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLGdCQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRWhCLHVDQVpGLFVBQVUsd0NBWU87U0FDbEI7OztXQWJDLFVBQVU7R0FBUyxlQUFlOzs7Ozs7Ozs7Ozs7Ozs7O0FDNVJ4QyxJQUFJLEdBQUcsQ0FBQztxQkFDTyxHQUFHLEdBQUcsRUFBRTs7O0FBR3ZCLEdBQUcsQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUFDakMsR0FBRyxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztBQUMvQixHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUNwQixHQUFHLENBQUMseUJBQXlCLEdBQUcsa0JBQWtCLENBQUM7QUFDbkQsR0FBRyxDQUFDLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFDN0QsR0FBRyxDQUFDLHlCQUF5QixHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDOztBQUV6RSxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUMxQixHQUFHLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzlCLG9CQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RixXQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlCLENBQUM7O0FBRUYsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLEdBQUcsQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDN0IsbUJBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLFdBQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdCLENBQUM7OztBQUdGLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEdBQUcsQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDOztBQUVyRCxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDekIsR0FBRyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsRUFBRTtBQUM3QixtQkFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxBQUFDLENBQUM7QUFDcEcsV0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0IsQ0FBQzs7O0FBR0YsR0FBRyxDQUFDLGFBQWEsR0FBRyxVQUFVLElBQUksRUFBRTtBQUNoQyxXQUFPO0FBQ0gsU0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMseUJBQXlCO0FBQzFGLFNBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMseUJBQXlCLENBQUEsQUFBQztLQUNoRyxDQUFDO0NBQ0wsQ0FBQzs7Ozs7QUFLRixHQUFHLENBQUMsYUFBYSxHQUFHLFVBQVUsSUFBTSxFQUFFLElBQUksRUFBRTsrQkFBZCxJQUFNOztRQUFMLENBQUM7UUFBRSxDQUFDOztBQUMvQixXQUFPO0FBQ0gsU0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLHlCQUF5QixDQUFBLElBQUssR0FBRyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLEFBQUMsQ0FBQztBQUNuRyxTQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQSxJQUFLLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQSxBQUFDLENBQUM7QUFDcEcsU0FBQyxFQUFFLElBQUk7S0FDVixDQUFDO0NBQ0wsQ0FBQzs7OztBQUlGLEdBQUcsQ0FBQyxRQUFRLEdBQUcsVUFBUyxLQUFXLEVBQWdDO1FBQXpDLENBQUMsR0FBSCxLQUFXLENBQVQsQ0FBQztRQUFFLENBQUMsR0FBTixLQUFXLENBQU4sQ0FBQztRQUFFLENBQUMsR0FBVCxLQUFXLENBQUgsQ0FBQztRQUFJLElBQUkseURBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7O0FBQzdELFFBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQSxHQUFJLENBQUMsQ0FBQztBQUNyQixRQUFJLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDUixTQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNiO0FBQ0QsUUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ1IsU0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDYjtBQUNELFdBQU8sRUFBRSxDQUFDLEVBQUQsQ0FBQyxFQUFFLENBQUMsRUFBRCxDQUFDLEVBQUUsQ0FBQyxFQUFELENBQUMsRUFBRSxDQUFDO0NBQ3RCLENBQUM7Ozs7O0FBS0YsR0FBRyxDQUFDLGNBQWMsR0FBRyxVQUFVLEtBQU0sRUFBRTtnQ0FBUixLQUFNOztRQUFMLENBQUM7UUFBRSxDQUFDOztBQUVoQyxLQUFDLElBQUksR0FBRyxDQUFDLHlCQUF5QixDQUFDO0FBQ25DLEtBQUMsSUFBSSxHQUFHLENBQUMseUJBQXlCLENBQUM7O0FBRW5DLEtBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQzs7QUFFckUsS0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNULEtBQUMsSUFBSSxHQUFHLENBQUM7O0FBRVQsV0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqQixDQUFDOzs7OztBQUtGLEdBQUcsQ0FBQyxjQUFjLEdBQUcsVUFBUyxLQUFNLEVBQUU7Z0NBQVIsS0FBTTs7UUFBTCxDQUFDO1FBQUUsQ0FBQzs7O0FBRy9CLEtBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxFQUFFLEdBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVELEtBQUMsSUFBSSxHQUFHLENBQUMseUJBQXlCLENBQUM7OztBQUduQyxLQUFDLElBQUksR0FBRyxDQUFDLHlCQUF5QixHQUFHLEdBQUcsQ0FBQzs7QUFFekMsV0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqQixDQUFDOztBQUVGLEdBQUcsQ0FBQyxPQUFPLEdBQUcsVUFBUyxDQUFDLEVBQUU7QUFDdEIsUUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUNyQixTQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUEsR0FBSSxHQUFHLEdBQUcsR0FBRyxDQUFBLEdBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztLQUMzQztBQUNELFdBQU8sQ0FBQyxDQUFDO0NBQ1osQ0FBQzs7O0FBR0YsR0FBRyxDQUFDLGlCQUFpQixHQUFHLFVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBRTtBQUNuRCxRQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7QUFDbEIsZUFBTztLQUNWOztBQUVELFFBQUksUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDM0IsaUJBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDbkMsTUFDSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO0FBQ3ZFLGdCQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMzQyxNQUNJLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRTtBQUN6RSxnQkFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQSxXQUFXO21CQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQUEsQ0FBQyxDQUFDO0tBQy9FLE1BQ0ksSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRTtBQUN2QyxnQkFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQSxPQUFPLEVBQUk7QUFDcEMsbUJBQU8sQ0FBQyxPQUFPLENBQUMsVUFBQSxXQUFXO3VCQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO2FBQUEsQ0FBQyxDQUFDO1NBQ2xFLENBQUMsQ0FBQztLQUNOOztDQUVKLENBQUM7O0FBRUYsR0FBRyxDQUFDLFlBQVksR0FBRyxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakMsV0FBTyxFQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUNqQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFDakIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQ2pCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBLEFBQ3BCLENBQUM7Q0FDTCxDQUFDOzs7QUFHRixHQUFHLENBQUMsZUFBZSxHQUFHLFVBQVUsT0FBTyxFQUFFO0FBQ3JDLFFBQUksS0FBSyxHQUFHLFFBQVE7UUFDaEIsS0FBSyxHQUFHLENBQUMsUUFBUTtRQUNqQixLQUFLLEdBQUcsUUFBUTtRQUNoQixLQUFLLEdBQUcsQ0FBQyxRQUFRLENBQUM7OztBQUd0QixRQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ25DLFNBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsWUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUUxQixZQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7QUFDbEIsaUJBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7QUFDRCxZQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7QUFDbEIsaUJBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7QUFDRCxZQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7QUFDbEIsaUJBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7QUFDRCxZQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7QUFDbEIsaUJBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7S0FDSjs7QUFFRCxXQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Q0FDdkMsQ0FBQzs7O0FBR0YsR0FBRyxDQUFDLFlBQVksR0FBRyxVQUFTLElBQUksRUFBRTtBQUM5QixRQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLGNBQWMsRUFBRTtBQUMvQyxlQUFPLFNBQVMsQ0FBQztLQUNwQixNQUNJLElBQUksSUFBSSxLQUFLLFlBQVksSUFBSSxJQUFJLEtBQUssaUJBQWlCLEVBQUU7QUFDMUQsZUFBTyxNQUFNLENBQUM7S0FDakI7QUFDRCxRQUFJLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxLQUFLLFlBQVksRUFBRTtBQUMzQyxlQUFPLE9BQU8sQ0FBQztLQUNsQjtDQUNKLENBQUM7O0FBRUYsR0FBRyxDQUFDLFFBQVEsR0FBRyxVQUFVLE9BQU8sRUFBRTtBQUM5QixRQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3ZCLFFBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztBQUV0QixTQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQyxnQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixnQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoQzs7QUFFRCxZQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pCLFlBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWpCLFdBQU8sUUFBUSxDQUFDO0NBQ25CLENBQUM7O0FBRUYsR0FBRyxDQUFDLGFBQWEsR0FBRyxVQUFVLFFBQVEsRUFBRTtBQUNwQyxRQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ3hCLFFBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztBQUV0QixTQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwQyxZQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsWUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5QixnQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixnQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN2Qjs7QUFFRCxZQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pCLFlBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWpCLFdBQU8sUUFBUSxDQUFDO0NBQ25CLENBQUM7O0FBRUYsR0FBRyxDQUFDLG9CQUFvQixHQUFHLFVBQVUsT0FBTyxFQUFFO0FBQzFDLFFBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7O0FBRXZCLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFlBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixZQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDOztBQUV0QixZQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pDOztBQUVELFFBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxXQUFPLElBQUksQ0FBQztDQUNmLENBQUM7OztBQUdGLEdBQUcsQ0FBQyxXQUFXLEdBQUcsVUFBVSxPQUFPLEVBQUU7QUFDakMsV0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMxRCxDQUFDOztBQUVGLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLFFBQVEsRUFBRTtBQUN2QyxRQUFJLElBQUksR0FBRyxDQUFDLENBQUM7O0FBRWIsU0FBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEMsWUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3BDOztBQUVELFdBQU8sSUFBSSxDQUFDO0NBQ2YsQ0FBQzs7QUFFRixHQUFHLENBQUMsV0FBVyxHQUFHLFVBQVUsSUFBSSxFQUFFO0FBQzlCLFFBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQyxRQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDVixlQUFPLElBQUksQ0FBQztLQUNmLE1BQ0ksSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQ2YsZUFBTyxLQUFLLENBQUM7S0FDaEI7O0NBRUosQ0FBQzs7OztBQUlGLEdBQUcsQ0FBQyxjQUFjLEdBQUcsVUFBVSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQzFDLFFBQUksS0FBSyxZQUFBLENBQUM7QUFDVixRQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQ3pCLGFBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUM5QixNQUNJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7QUFDbkMsYUFBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7S0FDNUIsTUFDSTtBQUNELGVBQU8sSUFBSSxDQUFDO0tBQ2Y7O0FBRUQsU0FBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsWUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7O0FBSXBCLFlBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUU7Ozs7OztBQUN0QyxrREFBaUIsSUFBSSw0R0FBRTt3QkFBZCxJQUFJOztBQUNULHdCQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ2xCOzs7Ozs7Ozs7Ozs7Ozs7U0FDSjtLQUNKO0FBQ0QsV0FBTyxJQUFJLENBQUM7Q0FDZixDQUFDOzs7Ozs7Ozs7OztBQ3JSRixJQUFJLEVBQUUsQ0FBQztxQkFDUSxFQUFFLEdBQUcsRUFBRTs7O0FBR3RCLEVBQUUsQ0FBQyxJQUFJLEdBQTZCLE1BQU0sQ0FBQztBQUMzQyxFQUFFLENBQUMsYUFBYSxHQUFvQixNQUFNLENBQUM7QUFDM0MsRUFBRSxDQUFDLEtBQUssR0FBNEIsTUFBTSxDQUFDO0FBQzNDLEVBQUUsQ0FBQyxjQUFjLEdBQW1CLE1BQU0sQ0FBQztBQUMzQyxFQUFFLENBQUMsR0FBRyxHQUE4QixNQUFNLENBQUM7QUFDM0MsRUFBRSxDQUFDLFlBQVksR0FBcUIsTUFBTSxDQUFDO0FBQzNDLEVBQUUsQ0FBQyxLQUFLLEdBQTRCLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUNWM0MsSUFBSSxPQUFPLENBQUM7cUJBQ0csT0FBTyxHQUFHLEVBQUU7Ozs7QUFJM0IsT0FBTyxDQUFDLFVBQVUsR0FBRyxTQUFTLFVBQVUsQ0FBRSxNQUFNLEVBQUUsT0FBTyxFQUN6RDtBQUNJLFFBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN2QixRQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDaEIsY0FBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUMsY0FBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQ25DLGNBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNyQixjQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdEIsY0FBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekIsZ0JBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLGtCQUFVLEdBQUcsSUFBSSxDQUFDO0tBQ3JCOztBQUVELFFBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakcsUUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNMLGNBQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztLQUNyRDs7QUFFRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2IsZUFBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FDbkgsTUFDSTtBQUNELGVBQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN0RixjQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVk7QUFDMUMsbUJBQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUN6RixDQUFDLENBQUM7S0FDTjs7QUFFRCxXQUFPLEVBQUUsQ0FBQztDQUNiLENBQUM7O0FBRUYsT0FBTyxDQUFDLE1BQU0sR0FBRyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUNoRTtBQUNJLHNCQUFrQixHQUFHLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUM7QUFDeEUsTUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdkMsTUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztBQUN6RCxNQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzNELE1BQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxNQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUN4RCxDQUFDOzs7Ozs7Ozs7Ozs7OztxQkMxQ3NCLFlBQVk7QUFGcEMsSUFBSSxVQUFVLEdBQUcsVUFBUyxDQUFDOztBQUVaLFNBQVMsWUFBWSxDQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDNUMsUUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5QixRQUFJLENBQUMsSUFBSSxFQUFFO0FBQ1Asa0JBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVMsQ0FBQyxDQUFDO0FBQzlCLFlBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzdCOztBQUVELFFBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pCLFlBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUN6QztBQUNELFdBQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN6Qjs7Ozs7Ozs7Ozs7O0FDaEJELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztxQkFDQyxJQUFJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQm5CLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxRQUFRLEVBQWlCO1FBQWYsTUFBTSx5REFBRyxJQUFJOztBQUNsRCxRQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7O0FBRWhCLFNBQUssSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFO0FBQ3ZCLFlBQUksR0FBRyxHQUFHLElBQUksQ0FBQztBQUNmLFlBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixZQUFJLENBQUMsQ0FBQzs7QUFFTixZQUFJLE1BQU0sRUFBRTtBQUNSLGdCQUFJLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7U0FDOUI7OztBQUdELFlBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzdCLGtCQUFNLENBQUMsSUFBSSxDQUFDO0FBQ1Isb0JBQUksRUFBRSxPQUFPO0FBQ2Isc0JBQU0sRUFBRSxJQUFJO0FBQ1osb0JBQUksRUFBSixJQUFJO0FBQ0oscUJBQUssRUFBRSxPQUFPO0FBQ2QsbUJBQUcsRUFBSCxHQUFHO0FBQ0gsd0JBQVEsRUFBUixRQUFRO2FBQ1gsQ0FBQyxDQUFDO1NBQ047O2FBRUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFOztBQUU3QixvQkFBSSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7O0FBRWhDLHdCQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQzVDLDhCQUFNLENBQUMsSUFBSSxDQUFDO0FBQ1IsZ0NBQUksRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU07QUFDNUIsa0NBQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUk7QUFDN0IsZ0NBQUksRUFBSixJQUFJO0FBQ0osaUNBQUssRUFBRSxPQUFPO0FBQ2QsK0JBQUcsRUFBSCxHQUFHO0FBQ0gsb0NBQVEsRUFBUixRQUFRO3lCQUNYLENBQUMsQ0FBQztxQkFDTjs7eUJBRUksSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN6QixrQ0FBTSxDQUFDLElBQUksQ0FBQztBQUNSLG9DQUFJLEVBQUUsU0FBUztBQUNmLHNDQUFNLEVBQUUsS0FBSztBQUNiLG9DQUFJLEVBQUUsSUFBSSxHQUFHLEtBQUs7QUFDbEIscUNBQUssRUFBRSxPQUFPO0FBQ2QsbUNBQUcsRUFBSCxHQUFHO0FBQ0gsd0NBQVEsRUFBUixRQUFROzZCQUNYLENBQUMsQ0FBQzt5QkFDTjs7aUJBRUo7O3FCQUVJLElBQUksT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3JDLDZCQUFLLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0Isa0NBQU0sQ0FBQyxJQUFJLENBQUM7QUFDUixvQ0FBSSxFQUFFLFdBQVc7QUFDakIsc0NBQU0sRUFBRSxJQUFJO0FBQ1osb0NBQUksRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHO0FBQzFCLHFDQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqQixtQ0FBRyxFQUFFLENBQUM7QUFDTix3Q0FBUSxFQUFFLE9BQU87NkJBQ3BCLENBQUMsQ0FBQzt5QkFDTjtxQkFDSjs7eUJBRUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTs7QUFFckUsZ0NBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7O0FBRWxELHFDQUFLLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsMENBQU0sQ0FBQyxJQUFJLENBQUM7QUFDUiw0Q0FBSSxFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUMvQiw4Q0FBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSTtBQUNoQyw0Q0FBSSxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUc7QUFDMUIsNkNBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLDJDQUFHLEVBQUUsQ0FBQztBQUNOLGdEQUFRLEVBQUUsT0FBTztxQ0FDcEIsQ0FBQyxDQUFDO2lDQUNOOzZCQUNKOzt5QkFFSjs7NkJBRUksSUFBSSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDckMscUNBQUssQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs7QUFFL0IsMENBQU0sQ0FBQyxJQUFJLE1BQUEsQ0FBWCxNQUFNLHFCQUFTLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFDLENBQUM7aUNBQ3hFOzZCQUNKO2FBQ0o7O2lCQUVJLElBQUksT0FBTyxPQUFPLEtBQUssU0FBUyxFQUFFO0FBQ25DLDBCQUFNLENBQUMsSUFBSSxDQUFDO0FBQ1IsNEJBQUksRUFBRSxNQUFNO0FBQ1osOEJBQU0sRUFBRSxJQUFJO0FBQ1osNEJBQUksRUFBSixJQUFJO0FBQ0osNkJBQUssRUFBRSxPQUFPO0FBQ2QsMkJBQUcsRUFBSCxHQUFHO0FBQ0gsZ0NBQVEsRUFBUixRQUFRO3FCQUNYLENBQUMsQ0FBQztpQkFDTjs7cUJBRUksSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7QUFDbEMsOEJBQU0sQ0FBQyxJQUFJLENBQUM7QUFDUixnQ0FBSSxFQUFFLFdBQVc7QUFDakIsa0NBQU0sRUFBRSxJQUFJO0FBQ1osZ0NBQUksRUFBSixJQUFJO0FBQ0osaUNBQUssRUFBRSxPQUFPO0FBQ2QsK0JBQUcsRUFBSCxHQUFHO0FBQ0gsb0NBQVEsRUFBUixRQUFRO3lCQUNYLENBQUMsQ0FBQztxQkFDTjs7eUJBRUksSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7O0FBRWxDLGtDQUFNLENBQUMsSUFBSSxNQUFBLENBQVgsTUFBTSxxQkFBUyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBQyxDQUFDO3lCQUNyRDs7O0tBR0o7O0FBRUQsV0FBTyxNQUFNLENBQUM7Q0FDakIsQ0FBQzs7Ozs7QUFLRixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBaUI7UUFBZixNQUFNLHlEQUFHLElBQUk7O0FBQ3RELFFBQUksSUFBSSxFQUFFLEtBQUssQ0FBQztBQUNoQixRQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDakIsVUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7OztBQUc3QyxRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUMzQixZQUFJLEdBQUcsT0FBTyxDQUFDO0tBQ2xCOztTQUVJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTs7QUFFM0IsZ0JBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFOztBQUU5QixvQkFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtBQUN4Qyx3QkFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO2lCQUMvQjs7cUJBRUk7O0FBQ0QsNEJBQUksR0FBRyxPQUFPLENBQUM7QUFDZiw2QkFBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7cUJBQ3hCOzthQUVKOztpQkFFSSxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNuQyx3QkFBSSxHQUFHLFdBQVcsQ0FBQztBQUNuQix5QkFBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7aUJBQ3hCOztxQkFFSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFOztBQUVqRSw0QkFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtBQUM5QyxnQ0FBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO3lCQUNsQzs7QUFFRCw2QkFBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7cUJBQzNCOzt5QkFFSSxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNuQyxnQ0FBSSxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDekIsaUNBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JCLG1DQUFPLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQzt5QkFDL0Q7U0FDSjs7YUFFSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUNqQyxvQkFBSSxHQUFHLE1BQU0sQ0FBQzthQUNqQjs7aUJBRUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDaEMsd0JBQUksR0FBRyxXQUFXLENBQUM7aUJBQ3RCOztxQkFFSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUNoQyw0QkFBSSxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDekIsK0JBQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO3FCQUM1RDs7O0FBR0QsUUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLFlBQVEsSUFBTyxJQUFJLFNBQUksSUFBSSxBQUFFLENBQUM7QUFDOUIsUUFBSSxLQUFLLEVBQUU7QUFDUCxnQkFBUSxVQUFRLEtBQUssTUFBRyxDQUFDO0tBQzVCO0FBQ0QsWUFBUSxJQUFJLEtBQUssQ0FBQzs7O0FBR2xCLFdBQU8sRUFBRSxRQUFRLEVBQVIsUUFBUSxFQUFFLE9BQU8sRUFBUCxPQUFPLEVBQUUsQ0FBQztDQUNoQyxDQUFDOzs7OztBQUtGLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFpQjtRQUFmLE1BQU0seURBQUcsSUFBSTs7QUFDcEQsUUFBSSxNQUFNLGVBQWEsSUFBSSxTQUFNLENBQUM7QUFDbEMsUUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUssSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFO0FBQ3JCLFlBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5RCxjQUFNLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDbkMsa0JBQVUsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDO0tBQ2hDO0FBQ0QsVUFBTSxJQUFJLE1BQU0sQ0FBQztBQUNqQixVQUFNLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUM3QixXQUFPLE1BQU0sQ0FBQztDQUNqQixDQUFDOzs7OztBQUtGLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ3hDLFFBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNDLE9BQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO0FBQzlDLFdBQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUU7Ozs7Ozs7O0FBUTVDLFFBQUksRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLHNDQUFzQyxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEYsUUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xCLGVBQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDRCxXQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQzlDLFFBQUksRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLFFBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsZUFBTyxJQUFJLENBQUM7S0FDZjtBQUNELFdBQU8sS0FBSyxDQUFDO0NBQ2hCLENBQUM7Ozs7Ozs7QUFPRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxFQUFTO1FBQVAsQ0FBQyx5REFBRyxDQUFDOztBQUNoQyxRQUFJLENBQUMsWUFBQSxDQUFDO0FBQ04sUUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3BDLFNBQUMsR0FBRyw2QkFBSSxDQUFDLElBQUUsQ0FBQyxHQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUNqQyxNQUNJO0FBQ0QsU0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDakM7O0FBRUQsUUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFBLENBQUM7ZUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQUEsQ0FBQyxFQUFFO0FBQ3ZELGVBQU8sQ0FBQyxDQUFDO0tBQ1o7Q0FDSixDQUFDOzs7Ozs7O0FBT0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsRUFBUztRQUFQLENBQUMseURBQUcsQ0FBQzs7QUFDaEMsUUFBSSxDQUFDLFlBQUEsQ0FBQztBQUNOLFFBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNwQyxTQUFDLEdBQUcsNkJBQUksQ0FBQyxJQUFFLENBQUMsR0FBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDakMsTUFDSTtBQUNELFNBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUNwQzs7QUFFRCxRQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQUEsQ0FBQztlQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FBQSxDQUFDLEVBQUU7QUFDdkQsZUFBTyxDQUFDLENBQUM7S0FDWjtDQUNKLENBQUM7Ozs7Ozs7Ozs7Ozs7O0lDclRtQixXQUFXO0FBQ25CLGlCQURRLFdBQVcsQ0FDbEIsS0FBSyxFQUFFLEtBQUssRUFBRTtzQ0FEUCxXQUFXOztBQUV4QixxQkFBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2Isb0JBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLG9CQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUN0Qjs7cUJBTGdCLFdBQVc7O3VCQU94QixhQUFDLEtBQUssRUFBRTs7QUFFWCw0QkFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3pELG9DQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xCLG9DQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzt5QkFDbkI7aUJBQ0Q7Ozt1QkFFaUIsb0JBQUMsRUFBRSxFQUFFO0FBQ25CLG1DQUFXLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQzs7QUFFMUIsbUNBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQyxtQ0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzs7O0FBRzVDLG1DQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDdEMsbUNBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztBQUMzRCxtQ0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO0FBQzNELG1DQUFXLENBQUMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDakQsbUNBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDOzs7QUFHakUsbUNBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUN4QyxtQ0FBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLDBCQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O0FBR3pCLG1DQUFXLENBQUMsT0FBTyxHQUFHLElBQUksV0FBVyxDQUNwQyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFDL0UsVUFBQyxLQUFLLEVBQUs7QUFDVixvQ0FBSSxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQ2YsMENBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2xCLDBDQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztpQ0FDOUIsTUFBTTtBQUNOLDBDQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQ0FDekI7eUJBQ0QsQ0FDRCxDQUFDOzs7QUFHRixtQ0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQztBQUM1QixxQ0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUTtBQUNwQyxtQ0FBRyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWTtBQUN0QyxtQ0FBRyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWTtBQUN0Qyx5Q0FBUyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCO0FBQ2xELHlDQUFTLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0I7eUJBQ3JELEVBQ0QsVUFBQyxLQUFLLEVBQUs7QUFDaEIsb0NBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtBQUNWLDBDQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFZCw0Q0FBSSxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7QUFDcEMsa0RBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7eUNBQ2hGLE1BQ0k7QUFDRCxrREFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzt5Q0FDdEM7aUNBQ2IsTUFBTTtBQUNOLDBDQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQ0FDckI7eUJBQ0QsQ0FDRCxDQUFDOzs7QUFHRixtQ0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FDeEMsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFDakQsVUFBQyxLQUFLLEVBQUs7QUFDUCxrQ0FBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7eUJBQ25DLENBQ0QsQ0FBQzs7O0FBR0YsbUNBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQ2pDLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQy9DLFVBQUMsS0FBSyxFQUFLO0FBQ2hCLG9DQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7QUFDZiwwQ0FBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7aUNBQy9CLE1BQU07QUFDQSwwQ0FBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7aUNBQ2hDO3lCQUNELENBQ0QsQ0FBQztpQkFFRjs7O2VBMUZnQixXQUFXOzs7cUJBQVgsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkNFZixRQUFROzs7O3VCQUNMLFdBQVc7Ozs7MEJBQ04sY0FBYzs7Ozt3QkFFdkIsVUFBVTs7Ozs2QkFDUixnQkFBZ0I7Ozs7OEJBQ1csa0JBQWtCOzs7O0lBRTFDLGFBQWE7QUFFbkIsYUFGTSxhQUFhLENBRWxCLEVBQUUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRTs4QkFGeEMsYUFBYTs7QUFHMUIsZUFBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7O0FBRXhCLFlBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2IsWUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsWUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDdEIsWUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDdkIsWUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7OztBQUdsQixZQUFJLENBQUMsT0FBTyxHQUFHLGVBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUUsRUFBRSxDQUFDLENBQUM7OztBQUd0RCxZQUFJLENBQUMsTUFBTSxHQUFHLGVBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEQsWUFBSSxDQUFDLFlBQVksR0FBRyxlQUFjLEVBQUUsRUFBRSxPQUFPLENBQUMsWUFBWSxJQUFFLEVBQUUsQ0FBQyxDQUFDOzs7QUFHaEUsWUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7Ozs7QUFLM0MsWUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7O0FBRTNDLFlBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFlBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDOztBQUVsQixZQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUNuQyxZQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQzs7QUFFdkMsWUFBSSxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDN0IscUJBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QyxZQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7S0FDNUI7Ozs7aUJBbkNnQixhQUFhOztlQXFDdkIsbUJBQUc7QUFDTixnQkFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsZ0JBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQyxnQkFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ25CLGdCQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNsQixtQkFBTyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QyxnQkFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FDekI7Ozs7O2VBR0UsZUFBRztBQUNGLGdCQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNoQix1QkFBTzthQUNWOztBQUVELGdCQUFJLGFBQWEsQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFO0FBQ2hDLG9CQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDcEM7QUFDRCx5QkFBYSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDaEM7OztlQUVNLG1CQUFHO0FBQ04sZ0JBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoQixzQkFBTSxJQUFJLEtBQUssNENBQTBDLElBQUksQ0FBQyxFQUFFLFVBQUssSUFBSSxDQUFDLElBQUksaUNBQThCLENBQUU7YUFDakg7QUFDRCxnQkFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdEIsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLGdCQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzs7O0FBR2xCLGdCQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUNqRCxnQkFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7OztBQUdyRCxnQkFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDOzs7QUFHeEMsZ0JBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzs7Ozs7Ozs7QUFRckMsZ0JBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBQ3pDLGdCQUFJLE1BQU0sQ0FBQzs7QUFFWCxpQkFBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUU7QUFDcEIsb0JBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixvQkFBSSxDQUFDLEtBQUssSUFBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxBQUFDLEVBQUU7QUFDeEQsNkJBQVM7aUJBQ1o7OztBQUdELHNCQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsOEJBQThCLEdBQUcsR0FBRyxHQUFHLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RSxvQkFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5RCxvQkFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs7O0FBR2xFLG9CQUFJLGFBQWEsSUFBSSxJQUFJLElBQUksZUFBZSxJQUFJLElBQUksRUFBRTtBQUNsRCw2QkFBUztpQkFDWjs7O0FBR0Qsb0JBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNoQixxQkFBSyxDQUFDLE9BQU8sQ0FBQyxVQUFBLEdBQUcsRUFBSTs7O0FBR2pCLHdCQUFJLElBQUksR0FBTSxHQUFHLENBQUMsS0FBSyxVQUFLLEdBQUcsQ0FBQyxHQUFHLFVBQUssR0FBRyxDQUFDLEdBQUcsQUFBRSxDQUFDO0FBQ2xELDBCQUFNLG1DQUFpQyxJQUFJLE9BQUksQ0FBQztBQUNoRCwwQkFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDckIsMEJBQU0saUNBQStCLElBQUksT0FBSSxDQUFDO2lCQUNqRCxDQUFDLENBQUM7OztBQUdILG9CQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUU7QUFDdkIsd0JBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDckY7QUFDRCxvQkFBSSxlQUFlLElBQUksSUFBSSxFQUFFO0FBQ3pCLHdCQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQ3pGOzs7QUFHRCx1QkFBTyxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ2hGOzs7QUFHRCxrQkFBTSxHQUFHLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLGdCQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDOUUsZ0JBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQzs7O0FBR2xGLGdCQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOzs7O0FBSTdDLGdCQUFJLElBQUksR0FBSSxJQUFJLENBQUMsSUFBSSxHQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEFBQUMsQUFBQyxDQUFDO0FBQzlFLGdCQUFJLE1BQU0sb0JBQWtCLElBQUksT0FBSSxDQUFDO0FBQ3JDLGdCQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDbkIsZ0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6RixnQkFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUU7QUFDNUIseUJBQVMsR0FBRywwQkFBMEIsQ0FBQzthQUMxQyxNQUNJO0FBQ0QseUJBQVMsR0FBRyw0QkFBNEIsQ0FBQzthQUM1Qzs7QUFFRCxtQkFBTyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLG1CQUFPLENBQUMseUJBQXlCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDM0MsZ0JBQUksQ0FBQyxzQkFBc0IsR0FDdkIsTUFBTSxHQUNOLFNBQVMsR0FDVCxhQUFhLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEdBQ3hDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQzs7Ozs7QUFLaEMsbUJBQU8sQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN6QyxtQkFBTyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFDLGdCQUFJLENBQUMsd0JBQXdCLEdBQ3pCLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsR0FDOUMsTUFBTSxHQUNOLFNBQVMsR0FDVCxhQUFhLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEdBQ3hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQzs7O0FBR2xDLGdCQUFJO0FBQ0Esb0JBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQzlILG9CQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNyQixvQkFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7YUFDMUIsQ0FDRCxPQUFNLEtBQUssRUFBRTtBQUNULG9CQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQixvQkFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDdEIsb0JBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLG9CQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzs7O0FBR25CLG9CQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO0FBQ3RELHdCQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Ozs7OztBQUNsQywwREFBYyxJQUFJLENBQUMsYUFBYSw0R0FBRTtnQ0FBekIsQ0FBQzs7QUFDTiw2QkFBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3BCLDZCQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQzVDOzs7Ozs7Ozs7Ozs7Ozs7aUJBQ0o7O0FBRUQsc0JBQU0sSUFBSSxLQUFLLHVDQUFxQyxJQUFJLENBQUMsRUFBRSxVQUFLLElBQUksQ0FBQyxJQUFJLGVBQVksS0FBSyxDQUFDLENBQUU7YUFDaEc7O0FBRUQsZ0JBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNYLGdCQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDdkIsZ0JBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzVCOzs7OztlQUdjLDJCQUFHO0FBQ2QsZ0JBQUksQ0FBQztnQkFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLGlCQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFO0FBQzdCLHVCQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6QztBQUNELGlCQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3BCLHVCQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQztBQUNELG1CQUFPLE9BQU8sQ0FBQztTQUNsQjs7Ozs7ZUFHbUIsZ0NBQUc7QUFDbkIsZ0JBQUksR0FBRyxZQUFBO2dCQUFFLE1BQU0sR0FBRyxFQUFFLENBQUM7OztBQUdyQixpQkFBSyxHQUFHLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTtBQUM5QixzQkFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7QUFFakIsb0JBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7OztBQUMxQyxtQ0FBQSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUMsSUFBSSxNQUFBLGlDQUNULGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBSztBQUM5QywrQkFBTyxFQUFFLEdBQUcsRUFBSCxHQUFHLEVBQUUsTUFBTSxFQUFOLE1BQU0sRUFBRSxHQUFHLEVBQUgsR0FBRyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQztxQkFDdkQsQ0FBQyxFQUNMLENBQUM7aUJBQ0wsTUFDSTtBQUNELDBCQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBSCxHQUFHLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztpQkFDOUY7YUFDSjs7O0FBR0QsaUJBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsc0JBQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDOztBQUVoQyxvQkFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNqQyx3QkFBSSxNQUFNLEdBQUcsQUFBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUssRUFBRSxDQUFDO0FBQ2pFLHdCQUFJLFNBQVMsR0FBRyxJQUFJO3dCQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7O0FBRTlCLHlCQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O0FBRTVDLDRCQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDekIscUNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsK0JBQUcsR0FBRyxDQUFDLENBQUM7eUJBQ1g7O0FBRUQsOEJBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDYiwrQkFBRyxFQUFILEdBQUc7QUFDSCxrQ0FBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLCtCQUFHLEVBQUgsR0FBRztBQUNILGlDQUFLLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJO3lCQUNoQyxDQUFDLENBQUM7O0FBRUgsMkJBQUcsRUFBRSxDQUFDO3FCQUNUO2lCQUNKLE1BQ0k7OztBQUdELDBCQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFILEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDakY7YUFDSjtBQUNELG1CQUFPLE1BQU0sQ0FBQztTQUNqQjs7Ozs7ZUFHYSx3QkFBQyxRQUFRLEVBQUU7QUFDckIsZ0JBQUksQ0FBQyxRQUFRLEVBQUU7QUFDWCx1QkFBTzthQUNWOztBQUVELGdCQUFJLEVBQUUsR0FBRyxnQ0FBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUM1QyxnQkFBSSxFQUFFLEdBQUcsZ0NBQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDOUMsZ0JBQUksTUFBTTtnQkFBRSxhQUFhLEdBQUcsRUFBRTtnQkFBRSxhQUFhLEdBQUcsRUFBRSxDQUFDOzs7QUFHbkQsaUJBQUssSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFO0FBQ3ZCLHNCQUFNLEdBQUcsSUFBSSxDQUFDOzs7QUFHZCxvQkFBSSxDQUFDLGtCQUFLLGdCQUFnQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQyx3QkFBSSxDQUFDLE1BQU0sRUFBRTtBQUNULDhCQUFNLEdBQUcsa0JBQUssYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztxQkFDckQ7QUFDRCwwQ0FBSSxLQUFLLGNBQVksSUFBSSxDQUFDLElBQUksVUFBSyxJQUFJLG9EQUE4QyxNQUFNLFFBQUksQ0FBQztBQUNoRyxpQ0FBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFFOUI7O0FBRUQsb0JBQUksQ0FBQyxrQkFBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEMsd0JBQUksQ0FBQyxNQUFNLEVBQUU7QUFDVCw4QkFBTSxHQUFHLGtCQUFLLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7cUJBQ3JEO0FBQ0QsMENBQUksS0FBSyxjQUFZLElBQUksQ0FBQyxJQUFJLFVBQUssSUFBSSxzREFBZ0QsTUFBTSxRQUFJLENBQUM7QUFDbEcsaUNBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzlCO2FBQ0o7Ozs7O0FBS0QsZ0JBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDMUIsb0JBQUksQ0FBQyxzQkFBc0IsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQzthQUN4Rjs7QUFFRCxnQkFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUMxQixvQkFBSSxDQUFDLHdCQUF3QixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO2FBQzVGO1NBQ0o7Ozs7O2VBR1UscUJBQUMsUUFBUSxFQUE2QjtnQkFBM0Isa0JBQWtCLHlEQUFHLElBQUk7O0FBQzNDLGdCQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNoQix1QkFBTzthQUNWOzs7Ozs7OztBQVFELGdCQUFJLGtCQUFrQixFQUFFO0FBQ3BCLG9CQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQzthQUN6Qjs7O0FBR0QsZ0JBQUksTUFBTSxHQUFHLGtCQUFLLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7Ozs7Ozs7QUFHMUMsbURBQW9CLE1BQU0saUhBQUU7d0JBQW5CLE9BQU87O0FBQ1osd0JBQUksT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7O0FBRTlCLDRCQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ3ZELE1BQ0k7QUFDRCw0QkFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUM3RDtpQkFDSjs7Ozs7Ozs7Ozs7Ozs7O1NBQ0o7Ozs7O2VBR1csc0JBQUMsTUFBTSxFQUFFO0FBQ2pCLGdCQUFJLFFBQVEsR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN2QyxpQkFBSyxJQUFJLENBQUMsSUFBSSxRQUFRLEVBQUU7QUFDcEIsb0JBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Isb0JBQUksT0FBTyxFQUFFO0FBQ1QsMkJBQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztpQkFDdkM7YUFDSjtBQUNELGdCQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUM7U0FDcEQ7Ozs7O2VBR2MseUJBQUMsTUFBTSxFQUFFO0FBQ3BCLGdCQUFJLFFBQVEsR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN2QyxpQkFBSyxJQUFJLENBQUMsSUFBSSxRQUFRLEVBQUU7QUFDcEIsb0JBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Isb0JBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7QUFDaEMsMkJBQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNwQyx3QkFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDekI7YUFDSjtBQUNELGdCQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLENBQUM7U0FDcEQ7Ozs7O2VBR2dCLDJCQUFDLFlBQVksRUFBRSxZQUFZLEVBQUU7QUFDMUMsZ0JBQUksT0FBTyxHQUFHLHFCQUFRLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM3QyxnQkFBSSxPQUFPLElBQUksSUFBSSxFQUFFO0FBQ2pCLHNDQUFJLElBQUksNEJBQXdCLFlBQVksUUFBSSxDQUFDO0FBQ2pELHVCQUFPO2FBQ1Y7O0FBRUQsbUJBQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2hDLGdCQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3BELGdCQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdkI7Ozs7OztlQUlNLGlCQUFDLE1BQU0sRUFBRSxJQUFJLEVBQVk7O0FBQzVCLGdCQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNoQix1QkFBTzthQUNWOztBQUVELGdCQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hELGdCQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLG1CQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQixnQkFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUNoQyx1QkFBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDckU7QUFDRCxtQkFBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDOzs4Q0FYZixLQUFLO0FBQUwscUJBQUs7OztBQVkxQixtQkFBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdEIsZ0JBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7Ozs7O2VBR1ksdUJBQUMsSUFBSSxFQUFFO0FBQ2hCLGdCQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNoQix1QkFBTzthQUNWOztBQUVELGdCQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLGdCQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO0FBQ3RDLHVCQUFPO2FBQ1Y7O0FBRUQsZ0JBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNYLGdCQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDcEY7Ozs7O2VBR2MsMkJBQUc7QUFDZCxnQkFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDaEIsdUJBQU87YUFDVjs7QUFFRCxpQkFBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3pCLG9CQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEUsb0JBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekI7U0FDSjs7O2VBRWdCLDZCQUFHOzs7OztBQUtoQixnQkFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7U0FDckI7Ozs7O2VBR1EsbUJBQUMsSUFBSSxFQUFFO0FBQ1osZ0JBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2hCLHVCQUFPO2FBQ1Y7O0FBRUQsZ0JBQUksTUFBTSxHQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEFBQUMsQ0FBQztBQUM3RCxnQkFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtBQUN6Qix1QkFBTyxNQUFNLENBQUM7YUFDakI7O0FBRUQsa0JBQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLGtCQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQzs7Ozs7O0FBTWhFLG1CQUFPLE1BQU0sQ0FBQztTQUNqQjs7Ozs7ZUFHSyxnQkFBQyxJQUFJLEVBQUU7QUFDVCxnQkFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQ25CLHVCQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQzthQUN0QyxNQUNJLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRTtBQUMxQix1QkFBTyxJQUFJLENBQUMsd0JBQXdCLENBQUM7YUFDeEM7U0FDSjs7Ozs7ZUFHSSxlQUFDLElBQUksRUFBRTtBQUNSLGdCQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9CLGdCQUFJLE1BQU0sRUFBRTtBQUNSLHVCQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDN0I7QUFDRCxtQkFBTyxFQUFFLENBQUM7U0FDYjs7Ozs7ZUFHRyxjQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDWixnQkFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixnQkFBSSxNQUFNLEVBQUU7QUFDUix1QkFBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdEI7U0FDSjs7Ozs7Ozs7Ozs7Ozs7O2VBYUksZUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQ2IsZ0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0IsZ0JBQUksS0FBSyxZQUFBLENBQUM7QUFDVixpQkFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxvQkFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLG9CQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7QUFDOUYsb0JBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOztBQUUzQix5QkFBSyxHQUFHO0FBQ0osNkJBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2YsNEJBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2QsMkJBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO3FCQUNoQixDQUFDO2lCQUNMLE1BQ0k7QUFDRCx5QkFBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsbUVBQW1FLENBQUMsQ0FBQztBQUN4Rix3QkFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDM0IsNkJBQUssR0FBRyxJQUFJLENBQUM7cUJBQ2hCO2lCQUNKOzs7QUFHRCxvQkFBSSxLQUFLLEVBQUU7O0FBRVAseUJBQUssQ0FBQyxJQUFJLEdBQUcsQUFBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksR0FBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN4RCx5QkFBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7aUJBQ3ZCO2FBQ0o7QUFDRCxtQkFBTyxLQUFLLENBQUM7U0FDaEI7Ozs7OztlQUljLDJCQUFHO0FBQ2QsZ0JBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQzs7Ozs7O0FBQ2QsbURBQWlCLElBQUksQ0FBQyxVQUFVLGlIQUFFO3dCQUF6QixLQUFJOztBQUNULHdCQUFJLEdBQUcsR0FBRyw2QkFBYSxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUksQ0FBQyxDQUFDO0FBQ3RDLHdCQUFJLEdBQUcsMEJBQXdCLEtBQUksQUFBRSxDQUFDOztBQUV0Qyx3QkFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBSSxHQUFHLElBQUksSUFBSSxBQUFDLENBQUM7O0FBRWxDLHdCQUFJLEdBQUcsRUFBRTtBQUNMLDRCQUFJLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDO3FCQUNuQixNQUNJO0FBQ0QsOENBQUksS0FBSyxtQ0FBZ0MsS0FBSSxRQUFJLENBQUM7cUJBQ3JEO2lCQUNKOzs7Ozs7Ozs7Ozs7Ozs7O0FBQ0QsbUJBQU8sSUFBSSxDQUFDO1NBQ2Y7OztXQXhoQmdCLGFBQWE7OztxQkFBYixhQUFhO0FBK2hCbEMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckIsYUFBYSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDNUIsYUFBYSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7OztBQUc3QixhQUFhLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUMzQixhQUFhLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQzs7O0FBRzFCLGFBQWEsQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLE9BQU8sRUFBRTtBQUNqRCxRQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDcEIsU0FBSyxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDbkIsWUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQ3RCLHFCQUFTO1NBQ1osTUFDSSxJQUFJLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFOztBQUM3RCxzQkFBVSxJQUFJLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3ZDLE1BQ0ksSUFBSSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7O0FBQzlFLHNCQUFVLElBQUksVUFBVSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDckUsTUFDSTs7QUFDRCxzQkFBVSxJQUFJLFVBQVUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDMUQ7S0FDSjtBQUNELFdBQU8sVUFBVSxDQUFDO0NBQ3JCLENBQUM7OztBQUdGLGFBQWEsQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLFVBQVUsRUFBRTtBQUN2RCxjQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztBQUM5QixRQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7Ozs7OztBQUNiLDJDQUFnQixVQUFVLGlIQUFFO2dCQUFuQixHQUFHOztBQUNSLGVBQUcsbUJBQWlCLEdBQUcsd0JBQW1CLEdBQUcsd0JBQXFCLENBQUM7U0FDdEU7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDRCxXQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7O0FBRUYsYUFBYSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBYTs7O0FBQy9DLGlCQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDOzt1Q0FEckIsTUFBTTtBQUFOLGNBQU07OztBQUU3QyxpQ0FBQSxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFDLElBQUksTUFBQSw0QkFBSSxNQUFNLENBQUMsQ0FBQztDQUM3QyxDQUFDOzs7QUFHRixhQUFhLENBQUMsV0FBVyxHQUFHLFVBQVUsR0FBRyxFQUFFO0FBQ3ZDLGlCQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNsQyxDQUFDOztBQUVGLGFBQWEsQ0FBQyxZQUFZLEdBQUcsVUFBVSxHQUFHLEVBQWE7QUFDbkQsaUJBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7O3VDQURZLE1BQU07QUFBTixjQUFNOzs7QUFFakQsaUJBQWEsQ0FBQyxRQUFRLE1BQUEsQ0FBdEIsYUFBYSxHQUFVLEdBQUcsU0FBSyxNQUFNLEVBQUMsQ0FBQztDQUMxQyxDQUFDOzs7O0FBSUYsYUFBYSxDQUFDLGFBQWEsR0FBRyxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUU7QUFDL0YsUUFBSTtBQUNBLFlBQUksYUFBYSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzRixZQUFJLGVBQWUsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUM7S0FDcEcsQ0FDRCxPQUFNLEdBQUcsRUFBRTtBQUNQLDhCQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkIsY0FBTSxHQUFHLENBQUM7S0FDYjs7QUFFRCxNQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLFFBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUNqQixZQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakQsYUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsY0FBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUM7S0FDSixNQUFNO0FBQ0gsZUFBTyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztLQUNoQzs7QUFFRCxRQUFJLGFBQWEsSUFBSSxJQUFJLElBQUksZUFBZSxJQUFJLElBQUksRUFBRTtBQUNsRCxlQUFPLE9BQU8sQ0FBQztLQUNsQjs7QUFFRCxNQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN4QyxNQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQzs7QUFFMUMsTUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMvQixNQUFFLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDOztBQUVqQyxNQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUV4QixRQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDbEQsWUFBSSxPQUFPLEdBQUcsSUFBSSxLQUFLLHlEQUVBLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyw2QkFDN0QsRUFBRSxDQUFDLFFBQVEsRUFBRSx5REFFcEIsb0JBQW9CLDJEQUVwQixzQkFBc0IsQ0FBRyxDQUFDOztBQUVoQyxZQUFJLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFQLE9BQU8sRUFBRSxDQUFDO0FBQ3pDLDhCQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekIsY0FBTSxLQUFLLENBQUM7S0FDZjs7QUFFRCxXQUFPLE9BQU8sQ0FBQztDQUNsQixDQUFDOzs7QUFHRixhQUFhLENBQUMsWUFBWSxHQUFHLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDdEQsUUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFcEMsTUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEMsTUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFFekIsUUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ25ELFlBQUksSUFBSSxHQUFJLEtBQUssS0FBSyxFQUFFLENBQUMsYUFBYSxHQUFHLFFBQVEsR0FBRyxVQUFVLEFBQUMsQ0FBQztBQUNoRSxZQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUMsWUFBSSxNQUFNLEdBQUcsaUNBQWtCLE9BQU8sQ0FBQyxDQUFDO0FBQ3hDLGNBQU0sRUFBRSxJQUFJLEVBQUosSUFBSSxFQUFFLE9BQU8sRUFBUCxPQUFPLEVBQUUsTUFBTSxFQUFOLE1BQU0sRUFBRSxDQUFDO0tBQ25DOztBQUVELFdBQU8sTUFBTSxDQUFDO0NBQ2pCLENBQUM7Ozs7Ozs7Ozs7QUNqcUJGLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQzs7QUFFdkIsYUFBYSxDQUFDLHNCQUFzQixDQUFDLEdBQ3JDLGdDQUFnQyxHQUNoQyxJQUFJLEdBQ0osdUVBQXVFLEdBQ3ZFLGlIQUFpSCxHQUNqSCwwQkFBMEIsR0FDMUIsY0FBYyxHQUNkLGlCQUFpQixHQUNqQixtR0FBbUcsR0FDbkcseUZBQXlGLEdBQ3pGLDBGQUEwRixHQUMxRixlQUFlLEdBQ2YsbUNBQW1DLEdBQ25DLGdGQUFnRixHQUNoRiw2Q0FBNkMsR0FDN0MsS0FBSyxHQUNMLElBQUksR0FDSixvR0FBb0csR0FDcEcsMkNBQTJDLEdBQzNDLGtDQUFrQyxHQUNsQyxjQUFjLEdBQ2QsaUJBQWlCLEdBQ2pCLCtFQUErRSxHQUMvRSxxRUFBcUUsR0FDckUsZUFBZSxHQUNmLG1DQUFtQyxHQUNuQyxLQUFLLEdBQ0wsSUFBSSxHQUNKLFVBQVUsR0FDVixJQUFJLEdBQ0osb0ZBQW9GLEdBQ3BGLDBCQUEwQixHQUMxQixnQ0FBZ0MsR0FDaEMsS0FBSyxHQUNMLElBQUksR0FDSixnRkFBZ0YsR0FDaEYscUVBQXFFLEdBQ3JFLGdDQUFnQyxHQUNoQyxJQUFJLEdBQ0osaURBQWlELEdBQ2pELGdEQUFnRCxHQUNoRCw0RkFBNEYsR0FDNUYsd0NBQXdDLEdBQ3hDLGNBQWMsR0FDZCw4QkFBOEIsR0FDOUIsS0FBSyxHQUNMLElBQUksR0FDSixVQUFVLEdBQ1YsSUFBSSxHQUNKLDRCQUE0QixHQUM1QixzQ0FBc0MsR0FDdEMsSUFBSSxHQUNKLHdCQUF3QixHQUN4Qiw4QkFBOEIsR0FDOUIsS0FBSyxHQUNMLElBQUksR0FDSiwwQ0FBMEMsR0FDMUMsSUFBSSxHQUNKLHdCQUF3QixHQUN4QixzREFBc0QsR0FDdEQsS0FBSyxHQUNMLElBQUksR0FDSixVQUFVLEdBQ1YsRUFBRSxDQUFDOztBQUVILGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxHQUN4QyxNQUFNLEdBQ04sSUFBSSxHQUNKLHFCQUFxQixHQUNyQix1QkFBdUIsR0FDdkIsSUFBSSxHQUNKLE1BQU0sR0FDTixJQUFJLEdBQ0oseUJBQXlCLEdBQ3pCLHFCQUFxQixHQUNyQixNQUFNLEdBQ04sSUFBSSxHQUNKLHVGQUF1RixHQUN2RixvREFBb0QsR0FDcEQsS0FBSyxHQUNMLEVBQUUsQ0FBQzs7QUFFSCxhQUFhLENBQUMsNkJBQTZCLENBQUMsR0FDNUMsTUFBTSxHQUNOLElBQUksR0FDSixxQkFBcUIsR0FDckIsWUFBWSxHQUNaLHVCQUF1QixHQUN2QixJQUFJLEdBQ0osTUFBTSxHQUNOLElBQUksR0FDSiw2QkFBNkIsR0FDN0IscUJBQXFCLEdBQ3JCLHFCQUFxQixHQUNyQixzQkFBc0IsR0FDdEIsdUJBQXVCLEdBQ3ZCLE1BQU0sR0FDTixJQUFJLEdBQ0osMkZBQTJGLEdBQzNGLElBQUksR0FDSixvREFBb0QsR0FDcEQsSUFBSSxHQUNKLG1GQUFtRixHQUNuRixJQUFJLEdBQ0osdUNBQXVDLEdBQ3ZDLGlFQUFpRSxHQUNqRSxjQUFjLEdBQ2QsSUFBSSxHQUNKLHdDQUF3QyxHQUN4QywyQkFBMkIsR0FDM0IsK0JBQStCLEdBQy9CLG1GQUFtRixHQUNuRixxRkFBcUYsR0FDckYsc0RBQXNELEdBQ3RELGFBQWEsR0FDYiwrREFBK0QsR0FDL0QsY0FBYyxHQUNkLEtBQUssR0FDTCxFQUFFLENBQUM7O0FBRUgsYUFBYSxDQUFDLHdCQUF3QixDQUFDLEdBQ3ZDLCtDQUErQyxHQUMvQyw2REFBNkQsR0FDN0QsK0RBQStELEdBQy9ELEtBQUssR0FDTCxFQUFFLENBQUM7O0FBRUgsYUFBYSxDQUFDLHFCQUFxQixDQUFDLEdBQ3BDLE1BQU0sR0FDTixJQUFJLEdBQ0osb0JBQW9CLEdBQ3BCLFlBQVksR0FDWix1QkFBdUIsR0FDdkIsSUFBSSxHQUNKLE1BQU0sR0FDTixJQUFJLEdBQ0osSUFBSSxHQUNKLGdCQUFnQixHQUNoQixNQUFNLEdBQ04scUJBQXFCLEdBQ3JCLHdDQUF3QyxHQUN4QywwQkFBMEIsR0FDMUIsb0RBQW9ELEdBQ3BELG1DQUFtQyxHQUNuQyxrQkFBa0IsR0FDbEIsY0FBYyxHQUNkLElBQUksR0FDSix1Q0FBdUMsR0FDdkMseUJBQXlCLEdBQ3pCLG1EQUFtRCxHQUNuRCxrQ0FBa0MsR0FDbEMsa0JBQWtCLEdBQ2xCLGNBQWMsR0FDZCxJQUFJLEdBQ0osdUNBQXVDLEdBQ3ZDLHlCQUF5QixHQUN6QixtREFBbUQsR0FDbkQsa0NBQWtDLEdBQ2xDLGtCQUFrQixHQUNsQixjQUFjLEdBQ2QsSUFBSSxHQUNKLHdDQUF3QyxHQUN4QywwQkFBMEIsR0FDMUIsNEJBQTRCLEdBQzVCLG9EQUFvRCxHQUNwRCxtQ0FBbUMsR0FDbkMsa0JBQWtCLEdBQ2xCLGNBQWMsR0FDZCxJQUFJLEdBQ0osSUFBSSxHQUNKLDhDQUE4QyxHQUM5Qyw2QkFBNkIsR0FDN0IsK0JBQStCLEdBQy9CLGNBQWMsR0FDZCxNQUFNLEdBQ04sSUFBSSxHQUNKLHlFQUF5RSxHQUN6RSxnQ0FBZ0MsR0FDaEMsc0JBQXNCLEdBQ3RCLElBQUksR0FDSiw0Q0FBNEMsR0FDNUMsa0RBQWtELEdBQ2xELFVBQVUsR0FDVixJQUFJLEdBQ0osMkNBQTJDLEdBQzNDLGlEQUFpRCxHQUNqRCxVQUFVLEdBQ1YsSUFBSSxHQUNKLDJDQUEyQyxHQUMzQyxpREFBaUQsR0FDakQsVUFBVSxHQUNWLElBQUksR0FDSiw0Q0FBNEMsR0FDNUMsa0RBQWtELEdBQ2xELFVBQVUsR0FDVixJQUFJLEdBQ0osMENBQTBDLEdBQzFDLGdEQUFnRCxHQUNoRCxVQUFVLEdBQ1YsSUFBSSxHQUNKLGtEQUFrRCxHQUNsRCwrQ0FBK0MsR0FDL0MsK0NBQStDLEdBQy9DLG9DQUFvQyxHQUNwQyxvREFBb0QsR0FDcEQsVUFBVSxHQUNWLElBQUksR0FDSixJQUFJLEdBQ0osNkNBQTZDLEdBQzdDLGdHQUFnRyxHQUNoRywwQ0FBMEMsR0FDMUMsd0JBQXdCLEdBQ3hCLDZCQUE2QixHQUM3QixJQUFJLEdBQ0osdUNBQXVDLEdBQ3ZDLG1CQUFtQixHQUNuQixpQ0FBaUMsR0FDakMsZ0NBQWdDLEdBQ2hDLG1DQUFtQyxHQUNuQyxLQUFLLEdBQ0wsVUFBVSxHQUNWLElBQUksR0FDSixJQUFJLEdBQ0osNkNBQTZDLEdBQzdDLDhDQUE4QyxHQUM5QyxxQ0FBcUMsR0FDckMscURBQXFELEdBQ3JELHlEQUF5RCxHQUN6RCw0QkFBNEIsR0FDNUIsS0FBSyxHQUNMLElBQUksR0FDSiwwRkFBMEYsR0FDMUYsbURBQW1ELEdBQ25ELGdFQUFnRSxHQUNoRSxnRUFBZ0UsR0FDaEUsZ0VBQWdFLEdBQ2hFLDZFQUE2RSxHQUM3RSxLQUFLLEdBQ0wsVUFBVSxHQUNWLElBQUksR0FDSixJQUFJLEdBQ0osMENBQTBDLEdBQzFDLHNFQUFzRSxHQUN0RSw0REFBNEQsR0FDNUQsS0FBSyxHQUNMLFVBQVUsR0FDVixJQUFJLEdBQ0osSUFBSSxHQUNKLDBDQUEwQyxHQUMxQywrQ0FBK0MsR0FDL0Msd0JBQXdCLEdBQ3hCLDBEQUEwRCxHQUMxRCxpREFBaUQsR0FDakQsK0dBQStHLEdBQy9HLGNBQWMsR0FDZCxJQUFJLEdBQ0oscURBQXFELEdBQ3JELHlIQUF5SCxHQUN6SCw2QkFBNkIsR0FDN0IsY0FBYyxHQUNkLElBQUksR0FDSix3REFBd0QsR0FDeEQsa0lBQWtJLEdBQ2xJLDZCQUE2QixHQUM3QixjQUFjLEdBQ2QsSUFBSSxHQUNKLHFDQUFxQyxHQUNyQyxLQUFLLEdBQ0wsVUFBVSxHQUNWLElBQUksR0FDSixzRUFBc0UsR0FDdEUsa0NBQWtDLEdBQ2xDLDBEQUEwRCxHQUMxRCxnREFBZ0QsR0FDaEQsdURBQXVELEdBQ3ZELG1GQUFtRixHQUNuRixrQkFBa0IsR0FDbEIsSUFBSSxHQUNKLDJEQUEyRCxHQUMzRCx5SEFBeUgsR0FDekgsa0JBQWtCLEdBQ2xCLElBQUksR0FDSiw4REFBOEQsR0FDOUQsa0lBQWtJLEdBQ2xJLGtCQUFrQixHQUNsQixJQUFJLEdBQ0osOERBQThELEdBQzlELG9IQUFvSCxHQUNwSCxrQkFBa0IsR0FDbEIsY0FBYyxHQUNkLElBQUksR0FDSixpQ0FBaUMsR0FDakMsMERBQTBELEdBQzFELCtDQUErQyxHQUMvQyxzREFBc0QsR0FDdEQsaUZBQWlGLEdBQ2pGLGtCQUFrQixHQUNsQixJQUFJLEdBQ0osMERBQTBELEdBQzFELHNIQUFzSCxHQUN0SCxrQkFBa0IsR0FDbEIsSUFBSSxHQUNKLDZEQUE2RCxHQUM3RCwrSEFBK0gsR0FDL0gsa0JBQWtCLEdBQ2xCLElBQUksR0FDSiw2REFBNkQsR0FDN0Qsa0hBQWtILEdBQ2xILGtCQUFrQixHQUNsQixjQUFjLEdBQ2QsSUFBSSxHQUNKLGlDQUFpQyxHQUNqQywwREFBMEQsR0FDMUQsK0NBQStDLEdBQy9DLHNEQUFzRCxHQUN0RCxpRkFBaUYsR0FDakYsa0JBQWtCLEdBQ2xCLElBQUksR0FDSiwwREFBMEQsR0FDMUQsc0hBQXNILEdBQ3RILGtCQUFrQixHQUNsQixJQUFJLEdBQ0osNkRBQTZELEdBQzdELCtIQUErSCxHQUMvSCxrQkFBa0IsR0FDbEIsSUFBSSxHQUNKLDZEQUE2RCxHQUM3RCxrSEFBa0gsR0FDbEgsa0JBQWtCLEdBQ2xCLGNBQWMsR0FDZCxJQUFJLEdBQ0osa0NBQWtDLEdBQ2xDLDBEQUEwRCxHQUMxRCxnREFBZ0QsR0FDaEQsdURBQXVELEdBQ3ZELG1GQUFtRixHQUNuRixrQkFBa0IsR0FDbEIsSUFBSSxHQUNKLDJEQUEyRCxHQUMzRCx5SEFBeUgsR0FDekgsa0JBQWtCLEdBQ2xCLElBQUksR0FDSiw4REFBOEQsR0FDOUQsa0lBQWtJLEdBQ2xJLGtCQUFrQixHQUNsQixJQUFJLEdBQ0osOERBQThELEdBQzlELG9IQUFvSCxHQUNwSCxrQkFBa0IsR0FDbEIsY0FBYyxHQUNkLEtBQUssR0FDTCxFQUFFLENBQUM7O0FBRUgsYUFBYSxDQUFDLHVCQUF1QixDQUFDLEdBQ3RDLE1BQU0sR0FDTixJQUFJLEdBQ0oscUJBQXFCLEdBQ3JCLFlBQVksR0FDWix1QkFBdUIsR0FDdkIsSUFBSSxHQUNKLE1BQU0sR0FDTixJQUFJLEdBQ0osdUJBQXVCLEdBQ3ZCLHFCQUFxQixHQUNyQixxQkFBcUIsR0FDckIsc0JBQXNCLEdBQ3RCLHNCQUFzQixHQUN0QixJQUFJLEdBQ0osa0RBQWtELEdBQ2xELGtDQUFrQyxHQUNsQyxVQUFVLEdBQ1YsSUFBSSxHQUNKLHNEQUFzRCxHQUN0RCwwQkFBMEIsR0FDMUIsVUFBVSxHQUNWLElBQUksR0FDSixzREFBc0QsR0FDdEQsMEJBQTBCLEdBQzFCLFVBQVUsR0FDVixNQUFNLEdBQ04sSUFBSSxHQUNKLHFGQUFxRixHQUNyRixJQUFJLEdBQ0osK0RBQStELEdBQy9ELElBQUksR0FDSix3REFBd0QsR0FDeEQsNkRBQTZELEdBQzdELElBQUksR0FDSiw4REFBOEQsR0FDOUQseURBQXlELEdBQ3pELElBQUksR0FDSiwrQkFBK0IsR0FDL0IsZ0NBQWdDLEdBQ2hDLHNEQUFzRCxHQUN0RCw0QkFBNEIsR0FDNUIsaURBQWlELEdBQ2pELElBQUksR0FDSiw4REFBOEQsR0FDOUQseUNBQXlDLEdBQ3pDLGtCQUFrQixHQUNsQixJQUFJLEdBQ0osOERBQThELEdBQzlELHFEQUFxRCxHQUNyRCxtRUFBbUUsR0FDbkUsNkNBQTZDLEdBQzdDLGlCQUFpQixHQUNqQix1REFBdUQsR0FDdkQscUZBQXFGLEdBQ3JGLG9EQUFvRCxHQUNwRCw4REFBOEQsR0FDOUQsa0JBQWtCLEdBQ2xCLGFBQWEsR0FDYiw0QkFBNEIsR0FDNUIsSUFBSSxHQUNKLDhEQUE4RCxHQUM5RCx5Q0FBeUMsR0FDekMsa0VBQWtFLEdBQ2xFLHlEQUF5RCxHQUN6RCx1RUFBdUUsR0FDdkUsMENBQTBDLEdBQzFDLHFCQUFxQixHQUNyQiwyREFBMkQsR0FDM0QseUZBQXlGLEdBQ3pGLHdEQUF3RCxHQUN4RCx5REFBeUQsR0FDekQsc0JBQXNCLEdBQ3RCLGlCQUFpQixHQUNqQixrRUFBa0UsR0FDbEUsdUVBQXVFLEdBQ3ZFLDBDQUEwQyxHQUMxQyxxQkFBcUIsR0FDckIsc0NBQXNDLEdBQ3RDLHNCQUFzQixHQUN0QixrQkFBa0IsR0FDbEIsY0FBYyxHQUNkLElBQUksR0FDSixnQ0FBZ0MsR0FDaEMsa0VBQWtFLEdBQ2xFLElBQUksR0FDSix1Q0FBdUMsR0FDdkMsK0VBQStFLEdBQy9FLGNBQWMsR0FDZCxJQUFJLEdBQ0osd0NBQXdDLEdBQ3hDLCtEQUErRCxHQUMvRCwrQkFBK0IsR0FDL0IsMkRBQTJELEdBQzNELHNGQUFzRixHQUN0RixzREFBc0QsR0FDdEQsYUFBYSxHQUNiLElBQUksR0FDSiw2RUFBNkUsR0FDN0UsY0FBYyxHQUNkLEtBQUssR0FDTCxFQUFFLENBQUM7O0FBRUgsYUFBYSxDQUFDLG9CQUFvQixDQUFDLEdBQ25DLHNFQUFzRSxHQUN0RSxJQUFJLEdBQ0osa0NBQWtDLEdBQ2xDLCtGQUErRixHQUMvRixxSEFBcUgsR0FDckgsa0hBQWtILEdBQ2xILElBQUksR0FDSiw2RUFBNkUsR0FDN0UsdUVBQXVFLEdBQ3ZFLElBQUksR0FDSixnRkFBZ0YsR0FDaEYsNkNBQTZDLEdBQzdDLDJDQUEyQyxHQUMzQyxxRkFBcUYsR0FDckYsSUFBSSxHQUNKLHlFQUF5RSxHQUN6RSx3Q0FBd0MsR0FDeEMsK0RBQStELEdBQy9ELElBQUksR0FDSiw4RUFBOEUsR0FDOUUsMkNBQTJDLEdBQzNDLHVFQUF1RSxHQUN2RSxJQUFJLEdBQ0osbUVBQW1FLEdBQ25FLHFDQUFxQyxHQUNyQywyRUFBMkUsR0FDM0UsSUFBSSxHQUNKLHNEQUFzRCxHQUN0RCxtREFBbUQsR0FDbkQsbUhBQW1ILEdBQ25ILElBQUksR0FDSiwrQ0FBK0MsR0FDL0Msd0NBQXdDLEdBQ3hDLHNDQUFzQyxHQUN0QyxJQUFJLEdBQ0osVUFBVSxHQUNWLEVBQUUsQ0FBQzs7QUFFSCxhQUFhLENBQUMsK0JBQStCLENBQUMsR0FDOUMsbURBQW1ELEdBQ25ELDZGQUE2RixHQUM3RixJQUFJLEdBQ0osb0NBQW9DLEdBQ3BDLHVDQUF1QyxHQUN2QyxVQUFVLEdBQ1YsSUFBSSxHQUNKLHNCQUFzQixHQUN0Qix3Q0FBd0MsR0FDeEMsNkNBQTZDLEdBQzdDLGFBQWEsR0FDYixnREFBZ0QsR0FDaEQsY0FBYyxHQUNkLEtBQUssR0FDTCxFQUFFLENBQUM7O0FBRUgsYUFBYSxDQUFDLDhCQUE4QixDQUFDLEdBQzdDLHVEQUF1RCxHQUN2RCw0RUFBNEUsR0FDNUUseUNBQXlDLEdBQ3pDLHVDQUF1QyxHQUN2QyxVQUFVLEdBQ1YsRUFBRSxDQUFDOztBQUVILGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQyxHQUM1Qyx3Q0FBd0MsR0FDeEMsNEVBQTRFLEdBQzVFLGdEQUFnRCxHQUNoRCwyRUFBMkUsR0FDM0Usd0RBQXdELEdBQ3hELDJHQUEyRyxHQUMzRywrQ0FBK0MsR0FDL0MsbUJBQW1CLEdBQ25CLFNBQVMsR0FDVCw4Q0FBOEMsR0FDOUMsVUFBVSxHQUNWLEVBQUUsQ0FBQzs7QUFFSCxhQUFhLENBQUMsc0NBQXNDLENBQUMsR0FDckQsZ0NBQWdDLEdBQ2hDLGlHQUFpRyxHQUNqRyxJQUFJLEdBQ0osK0JBQStCLEdBQy9CLHFEQUFxRCxHQUNyRCxpREFBaUQsR0FDakQsNEVBQTRFLEdBQzVFLGdEQUFnRCxHQUNoRCxJQUFJLEdBQ0osc0dBQXNHLEdBQ3RHLG1EQUFtRCxHQUNuRCxzREFBc0QsR0FDdEQsSUFBSSxHQUNKLGVBQWUsR0FDZix1QkFBdUIsR0FDdkIsNkJBQTZCLEdBQzdCLElBQUksR0FDSixrREFBa0QsR0FDbEQsc0NBQXNDLEdBQ3RDLElBQUksR0FDSiw0REFBNEQsR0FDNUQsa0JBQWtCLEdBQ2xCLGlDQUFpQyxHQUNqQyxJQUFJLEdBQ0osb0ZBQW9GLEdBQ3BGLGdDQUFnQyxHQUNoQyxJQUFJLEdBQ0oscUNBQXFDLEdBQ3JDLHFDQUFxQyxHQUNyQyxLQUFLLEdBQ0wsRUFBRSxDQUFDOztBQUVILGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxHQUNyQyxNQUFNLEdBQ04sSUFBSSxHQUNKLHFCQUFxQixHQUNyQixZQUFZLEdBQ1osdUJBQXVCLEdBQ3ZCLElBQUksR0FDSixNQUFNLEdBQ04sSUFBSSxHQUNKLHNCQUFzQixHQUN0QixxQkFBcUIsR0FDckIscUJBQXFCLEdBQ3JCLHNCQUFzQixHQUN0QixzQkFBc0IsR0FDdEIsSUFBSSxHQUNKLGtEQUFrRCxHQUNsRCxrQ0FBa0MsR0FDbEMsVUFBVSxHQUNWLElBQUksR0FDSixzREFBc0QsR0FDdEQsMEJBQTBCLEdBQzFCLFVBQVUsR0FDVixJQUFJLEdBQ0osc0RBQXNELEdBQ3RELDBCQUEwQixHQUMxQixVQUFVLEdBQ1YsSUFBSSxHQUNKLHVCQUF1QixHQUN2Qiw0QkFBNEIsR0FDNUIsMkJBQTJCLEdBQzNCLE1BQU0sR0FDTixJQUFJLEdBQ0osb0ZBQW9GLEdBQ3BGLElBQUksR0FDSiwrREFBK0QsR0FDL0QsSUFBSSxHQUNKLHdEQUF3RCxHQUN4RCw2REFBNkQsR0FDN0QsSUFBSSxHQUNKLG1DQUFtQyxHQUNuQyx5REFBeUQsR0FDekQsSUFBSSxHQUNKLCtCQUErQixHQUMvQixnQ0FBZ0MsR0FDaEMsc0RBQXNELEdBQ3RELDRCQUE0QixHQUM1QixpREFBaUQsR0FDakQsSUFBSSxHQUNKLDhEQUE4RCxHQUM5RCx5Q0FBeUMsR0FDekMsa0JBQWtCLEdBQ2xCLElBQUksR0FDSiw4REFBOEQsR0FDOUQscURBQXFELEdBQ3JELG1FQUFtRSxHQUNuRSw2Q0FBNkMsR0FDN0MsaUJBQWlCLEdBQ2pCLHVEQUF1RCxHQUN2RCxxRkFBcUYsR0FDckYsb0RBQW9ELEdBQ3BELDhEQUE4RCxHQUM5RCxrQkFBa0IsR0FDbEIsYUFBYSxHQUNiLDRCQUE0QixHQUM1QixJQUFJLEdBQ0osOERBQThELEdBQzlELHlDQUF5QyxHQUN6QyxrRUFBa0UsR0FDbEUseURBQXlELEdBQ3pELHVFQUF1RSxHQUN2RSwwQ0FBMEMsR0FDMUMscUJBQXFCLEdBQ3JCLDJEQUEyRCxHQUMzRCx5RkFBeUYsR0FDekYsd0RBQXdELEdBQ3hELHlEQUF5RCxHQUN6RCxzQkFBc0IsR0FDdEIsaUJBQWlCLEdBQ2pCLGtFQUFrRSxHQUNsRSx1RUFBdUUsR0FDdkUsMENBQTBDLEdBQzFDLHFCQUFxQixHQUNyQixzQ0FBc0MsR0FDdEMsc0JBQXNCLEdBQ3RCLGtCQUFrQixHQUNsQixjQUFjLEdBQ2QsSUFBSSxHQUNKLHVDQUF1QyxHQUN2QyxvQ0FBb0MsR0FDcEMsSUFBSSxHQUNKLGlFQUFpRSxHQUNqRSwrRUFBK0UsR0FDL0UsSUFBSSxHQUNKLDhDQUE4QyxHQUM5QyxnRUFBZ0UsR0FDaEUsU0FBUyxHQUNULElBQUksR0FDSixvRkFBb0YsR0FDcEYsSUFBSSxHQUNKLHVDQUF1QyxHQUN2QyxpR0FBaUcsR0FDakcsY0FBYyxHQUNkLElBQUksR0FDSix3Q0FBd0MsR0FDeEMsK0NBQStDLEdBQy9DLDJCQUEyQixHQUMzQiwrQkFBK0IsR0FDL0IsMkRBQTJELEdBQzNELHNGQUFzRixHQUN0RixzREFBc0QsR0FDdEQsYUFBYSxHQUNiLCtGQUErRixHQUMvRixjQUFjLEdBQ2QsS0FBSyxHQUNMLEVBQUUsQ0FBQzs7QUFFSCxhQUFhLENBQUMsbUJBQW1CLENBQUMsR0FDbEMsSUFBSSxHQUNKLHFFQUFxRSxHQUNyRSxpQ0FBaUMsR0FDakMsMENBQTBDLEdBQzFDLElBQUksR0FDSiw0RUFBNEUsR0FDNUUsdUZBQXVGLEdBQ3ZGLHVGQUF1RixHQUN2RixxRkFBcUYsR0FDckYseURBQXlELEdBQ3pELGlHQUFpRyxHQUNqRyxpQ0FBaUMsR0FDakMsRUFBRSxDQUFDOztBQUVILGFBQWEsQ0FBQywrQkFBK0IsQ0FBQyxHQUM5Qyw4QkFBOEIsR0FDOUIseUJBQXlCLEdBQ3pCLGdDQUFnQyxHQUNoQywrQkFBK0IsR0FDL0IscUNBQXFDLEdBQ3JDLHVDQUF1QyxHQUN2QyxJQUFJLEdBQ0osZ0NBQWdDLEdBQ2hDLHVDQUF1QyxHQUN2QyxJQUFJLEdBQ0osZ0NBQWdDLEdBQ2hDLElBQUksR0FDSix5QkFBeUIsR0FDekIsNEJBQTRCLEdBQzVCLGtDQUFrQyxHQUNsQyxJQUFJLEdBQ0osMkNBQTJDLEdBQzNDLElBQUksR0FDSiw4REFBOEQsR0FDOUQsaUNBQWlDLEdBQ2pDLHFDQUFxQyxHQUNyQyxVQUFVLEdBQ1YsSUFBSSxHQUNKLDJDQUEyQyxHQUMzQyw4QkFBOEIsR0FDOUIsa0NBQWtDLEdBQ2xDLFVBQVUsR0FDVix3REFBd0QsR0FDeEQsSUFBSSxHQUNKLDJCQUEyQixHQUMzQiw2QkFBNkIsR0FDN0IsNkJBQTZCLEdBQzdCLDJCQUEyQixHQUMzQiwyQkFBMkIsR0FDM0IsSUFBSSxHQUNKLHNCQUFzQixHQUN0Qiw2QkFBNkIsR0FDN0IsOEJBQThCLEdBQzlCLElBQUksR0FDSiw2QkFBNkIsR0FDN0IsSUFBSSxHQUNKLDBCQUEwQixHQUMxQixvQ0FBb0MsR0FDcEMsc0RBQXNELEdBQ3RELElBQUksR0FDSiwyRkFBMkYsR0FDM0YsMkNBQTJDLEdBQzNDLGlEQUFpRCxHQUNqRCxrQkFBa0IsR0FDbEIsdUJBQXVCLEdBQ3ZCLGFBQWEsR0FDYiwwQ0FBMEMsR0FDMUMsMkNBQTJDLEdBQzNDLDBDQUEwQyxHQUMxQyxpSkFBaUosR0FDakosY0FBYyxHQUNkLElBQUksR0FDSiw4RUFBOEUsR0FDOUUsNEVBQTRFLEdBQzVFLGtEQUFrRCxHQUNsRCx3QkFBd0IsR0FDeEIsYUFBYSxHQUNiLGNBQWMsR0FDZCxJQUFJLEdBQ0osOEJBQThCLEdBQzlCLElBQUksR0FDSix3RUFBd0UsR0FDeEUsc0hBQXNILEdBQ3RILHNIQUFzSCxHQUN0SCx1Q0FBdUMsR0FDdkMsZ0hBQWdILEdBQ2hILGNBQWMsR0FDZCxJQUFJLEdBQ0osK0JBQStCLEdBQy9CLElBQUksR0FDSiw2QkFBNkIsR0FDN0IsS0FBSyxHQUNMLEVBQUUsQ0FBQzs7QUFFSCxhQUFhLENBQUMsNkJBQTZCLENBQUMsR0FDNUMsOEJBQThCLEdBQzlCLHlCQUF5QixHQUN6QixnQ0FBZ0MsR0FDaEMsK0JBQStCLEdBQy9CLHFDQUFxQyxHQUNyQyxxQ0FBcUMsR0FDckMsdUNBQXVDLEdBQ3ZDLElBQUksR0FDSix5QkFBeUIsR0FDekIsNkJBQTZCLEdBQzdCLGdDQUFnQyxHQUNoQyx1Q0FBdUMsR0FDdkMsSUFBSSxHQUNKLDhCQUE4QixHQUM5QiwyQkFBMkIsR0FDM0IsMkJBQTJCLEdBQzNCLDhCQUE4QixHQUM5Qiw0QkFBNEIsR0FDNUIsSUFBSSxHQUNKLDJDQUEyQyxHQUMzQyxJQUFJLEdBQ0oseUJBQXlCLEdBQ3pCLDRCQUE0QixHQUM1QixrQ0FBa0MsR0FDbEMsSUFBSSxHQUNKLDJCQUEyQixHQUMzQiw2QkFBNkIsR0FDN0IsNkJBQTZCLEdBQzdCLDJCQUEyQixHQUMzQiwyQkFBMkIsR0FDM0IsSUFBSSxHQUNKLDJDQUEyQyxHQUMzQyw2Q0FBNkMsR0FDN0MsbURBQW1ELEdBQ25ELEtBQUssR0FDTCxJQUFJLEdBQ0osaUJBQWlCLEdBQ2pCLDZCQUE2QixHQUM3Qiw4QkFBOEIsR0FDOUIsSUFBSSxHQUNKLDBCQUEwQixHQUMxQixnQ0FBZ0MsR0FDaEMsSUFBSSxHQUNKLG1CQUFtQixHQUNuQixzRUFBc0UsR0FDdEUsSUFBSSxHQUNKLHdEQUF3RCxHQUN4RCxnRkFBZ0YsR0FDaEYsOEZBQThGLEdBQzlGLHlEQUF5RCxHQUN6RCxvRkFBb0YsR0FDcEYsZ0RBQWdELEdBQ2hELElBQUksR0FDSiwrRUFBK0UsR0FDL0Usd0hBQXdILEdBQ3hILElBQUksR0FDSix1REFBdUQsR0FDdkQsOENBQThDLEdBQzlDLDBEQUEwRCxHQUMxRCwrREFBK0QsR0FDL0QsSUFBSSxHQUNKLG1EQUFtRCxHQUNuRCxpQ0FBaUMsR0FDakMsSUFBSSxHQUNKLG1DQUFtQyxHQUNuQyxJQUFJLEdBQ0osa0NBQWtDLEdBQ2xDLDZEQUE2RCxHQUM3RCxxRkFBcUYsR0FDckYsY0FBYyxHQUNkLElBQUksR0FDSiw2Q0FBNkMsR0FDN0MseUhBQXlILEdBQ3pILDhFQUE4RSxHQUM5RSxxRkFBcUYsR0FDckYsSUFBSSxHQUNKLCtCQUErQixHQUMvQixLQUFLLEdBQ0wsRUFBRSxDQUFDOztBQUVILGFBQWEsQ0FBQyxtQ0FBbUMsQ0FBQyxHQUNsRCw4QkFBOEIsR0FDOUIseUJBQXlCLEdBQ3pCLGdDQUFnQyxHQUNoQywrQkFBK0IsR0FDL0IscUNBQXFDLEdBQ3JDLHVDQUF1QyxHQUN2QyxJQUFJLEdBQ0osZ0NBQWdDLEdBQ2hDLHVDQUF1QyxHQUN2QyxJQUFJLEdBQ0osNEJBQTRCLEdBQzVCLDBCQUEwQixHQUMxQix5QkFBeUIsR0FDekIsa0NBQWtDLEdBQ2xDLElBQUksR0FDSixtQ0FBbUMsR0FDbkMsSUFBSSxHQUNKLGlDQUFpQyxHQUNqQyxnQ0FBZ0MsR0FDaEMsVUFBVSxHQUNWLElBQUksR0FDSixtREFBbUQsR0FDbkQsMENBQTBDLEdBQzFDLFVBQVUsR0FDVixJQUFJLEdBQ0osd0NBQXdDLEdBQ3hDLGdDQUFnQyxHQUNoQyxVQUFVLEdBQ1YsSUFBSSxHQUNKLDJCQUEyQixHQUMzQiw2QkFBNkIsR0FDN0IsNkJBQTZCLEdBQzdCLDJCQUEyQixHQUMzQiwyQkFBMkIsR0FDM0IsSUFBSSxHQUNKLHNCQUFzQixHQUN0Qiw2QkFBNkIsR0FDN0IsOEJBQThCLEdBQzlCLElBQUksR0FDSiw2QkFBNkIsR0FDN0IscUNBQXFDLEdBQ3JDLElBQUksR0FDSix1Q0FBdUMsR0FDdkMsMkNBQTJDLEdBQzNDLHlFQUF5RSxHQUN6RSxjQUFjLEdBQ2QsSUFBSSxHQUNKLDZEQUE2RCxHQUM3RCw0Q0FBNEMsR0FDNUMsOERBQThELEdBQzlELGNBQWMsR0FDZCxJQUFJLEdBQ0osdUVBQXVFLEdBQ3ZFLDBGQUEwRixHQUMxRixvQ0FBb0MsR0FDcEMsY0FBYyxHQUNkLElBQUksR0FDSixpRkFBaUYsR0FDakYsbURBQW1ELEdBQ25ELDZDQUE2QyxHQUM3QyxtQ0FBbUMsR0FDbkMsY0FBYyxHQUNkLElBQUksR0FDSix3REFBd0QsR0FDeEQsOEJBQThCLEdBQzlCLElBQUksR0FDSiw4Q0FBOEMsR0FDOUMsOENBQThDLEdBQzlDLDZFQUE2RSxHQUM3RSw4Q0FBOEMsR0FDOUMsdUVBQXVFLEdBQ3ZFLGdDQUFnQyxHQUNoQyxjQUFjLEdBQ2QsSUFBSSxHQUNKLGdFQUFnRSxHQUNoRSwrQkFBK0IsR0FDL0IsSUFBSSxHQUNKLDZCQUE2QixHQUM3QixLQUFLLEdBQ0wsRUFBRSxDQUFDOztBQUVILGFBQWEsQ0FBQyxpQ0FBaUMsQ0FBQyxHQUNoRCw4QkFBOEIsR0FDOUIseUJBQXlCLEdBQ3pCLGdDQUFnQyxHQUNoQywrQkFBK0IsR0FDL0IscUNBQXFDLEdBQ3JDLHFDQUFxQyxHQUNyQyx1Q0FBdUMsR0FDdkMsSUFBSSxHQUNKLHlCQUF5QixHQUN6Qiw2QkFBNkIsR0FDN0IsZ0NBQWdDLEdBQ2hDLHVDQUF1QyxHQUN2QyxJQUFJLEdBQ0osOEJBQThCLEdBQzlCLDJCQUEyQixHQUMzQixJQUFJLEdBQ0oseURBQXlELEdBQ3pELG1DQUFtQyxHQUNuQyxnQ0FBZ0MsR0FDaEMsdUNBQXVDLEdBQ3ZDLFNBQVMsR0FDVCwrQ0FBK0MsR0FDL0MsVUFBVSxHQUNWLElBQUksR0FDSixzQ0FBc0MsR0FDdEMsZ0NBQWdDLEdBQ2hDLDhDQUE4QyxHQUM5QyxxREFBcUQsR0FDckQsbUVBQW1FLEdBQ25FLGlDQUFpQyxHQUNqQyxVQUFVLEdBQ1YsSUFBSSxHQUNKLDRCQUE0QixHQUM1QiwwQkFBMEIsR0FDMUIseUJBQXlCLEdBQ3pCLGtDQUFrQyxHQUNsQyxJQUFJLEdBQ0osMkJBQTJCLEdBQzNCLGlDQUFpQyxHQUNqQyxrQ0FBa0MsR0FDbEMsZ0NBQWdDLEdBQ2hDLFVBQVUsR0FDVixJQUFJLEdBQ0osK0RBQStELEdBQy9ELG1EQUFtRCxHQUNuRCwwQ0FBMEMsR0FDMUMsVUFBVSxHQUNWLElBQUksR0FDSix3Q0FBd0MsR0FDeEMsZ0NBQWdDLEdBQ2hDLFVBQVUsR0FDVixJQUFJLEdBQ0osMkJBQTJCLEdBQzNCLDZCQUE2QixHQUM3Qiw2QkFBNkIsR0FDN0IsMkJBQTJCLEdBQzNCLDJCQUEyQixHQUMzQixJQUFJLEdBQ0osaUJBQWlCLEdBQ2pCLDZCQUE2QixHQUM3Qiw4QkFBOEIsR0FDOUIsSUFBSSxHQUNKLHNCQUFzQixHQUN0QixxQ0FBcUMsR0FDckMsb0NBQW9DLEdBQ3BDLHdDQUF3QyxHQUN4Qyx1REFBdUQsR0FDdkQsa0JBQWtCLEdBQ2xCLGNBQWMsR0FDZCxJQUFJLEdBQ0osaURBQWlELEdBQ2pELHVEQUF1RCxHQUN2RCwyREFBMkQsR0FDM0QsY0FBYyxHQUNkLElBQUksR0FDSixtQkFBbUIsR0FDbkIsd0RBQXdELEdBQ3hELElBQUksR0FDSixvQ0FBb0MsR0FDcEMsaURBQWlELEdBQ2pELDZDQUE2QyxHQUM3Qyw0Q0FBNEMsR0FDNUMseUVBQXlFLEdBQ3pFLElBQUksR0FDSiw4Q0FBOEMsR0FDOUMsK0JBQStCLEdBQy9CLElBQUksR0FDSixzRUFBc0UsR0FDdEUsK0JBQStCLEdBQy9CLElBQUksR0FDSixpREFBaUQsR0FDakQsa0NBQWtDLEdBQ2xDLElBQUksR0FDSiwyQ0FBMkMsR0FDM0MsY0FBYyxHQUNkLElBQUksR0FDSix1REFBdUQsR0FDdkQsaUVBQWlFLEdBQ2pFLElBQUksR0FDSiw0Q0FBNEMsR0FDNUMsMENBQTBDLEdBQzFDLElBQUksR0FDSixtREFBbUQsR0FDbkQsaUNBQWlDLEdBQ2pDLElBQUksR0FDSix5QkFBeUIsR0FDekIsOEJBQThCLEdBQzlCLDhEQUE4RCxHQUM5RCwwQkFBMEIsR0FDMUIsSUFBSSxHQUNKLDRDQUE0QyxHQUM1Qyw4QkFBOEIsR0FDOUIsbUNBQW1DLEdBQ25DLElBQUksR0FDSiw0Q0FBNEMsR0FDNUMsbUNBQW1DLEdBQ25DLElBQUksR0FDSix5REFBeUQsR0FDekQsbUZBQW1GLEdBQ25GLGNBQWMsR0FDZCxJQUFJLEdBQ0osaUJBQWlCLEdBQ2pCLG1DQUFtQyxHQUNuQyxJQUFJLEdBQ0oseURBQXlELEdBQ3pELGlGQUFpRixHQUNqRixJQUFJLEdBQ0osK0JBQStCLEdBQy9CLEtBQUssR0FDTCxFQUFFLENBQUM7O3FCQUVZLGFBQWE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJDbmpDVixnQkFBZ0I7Ozs7OEJBQ1Asb0JBQW9COzs7O2tDQUN0Qix3QkFBd0I7Ozs7d0JBQ2pDLFVBQVU7Ozs7OztJQUdMLE9BQU87QUFFYixhQUZNLE9BQU8sQ0FFWixFQUFFLEVBQUUsSUFBSSxFQUFnQjtZQUFkLE9BQU8seURBQUcsRUFBRTs7OEJBRmpCLE9BQU87O0FBR3BCLFlBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2IsWUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDbEMsWUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2QsZ0JBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO0FBQ0QsWUFBSSxDQUFDLElBQUksRUFBRSxDQUFDOztBQUVaLFlBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFlBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLFlBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFlBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLFlBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLFlBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLFlBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLFlBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUNuQyxZQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDL0IsWUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDcEIsWUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Ozs7QUFJaEIsWUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDOzs7QUFHN0UsWUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTs7QUFFN0IsZ0JBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDO0FBQzdELG1CQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLG1CQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN6Qzs7O0FBR0QsZUFBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25DLGVBQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWMsRUFBRSxJQUFJLEVBQUosSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRXRFLFlBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkIsOEJBQUksS0FBSyx1QkFBcUIsSUFBSSxDQUFDLElBQUksQ0FBRyxDQUFDO0tBQzlDOzs7Ozs7aUJBeENnQixPQUFPOztlQTJDakIsbUJBQUc7QUFDTixnQkFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRTtBQUN2QixzQ0FBSSxLQUFLLGdCQUFhLElBQUksQ0FBQyxJQUFJLHNEQUErQyxJQUFJLENBQUMsWUFBWSxRQUFJLENBQUM7QUFDcEcsdUJBQU87YUFDVjs7QUFFRCxnQkFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDYix1QkFBTzthQUNWO0FBQ0QsZ0JBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQyxnQkFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsbUJBQU8sSUFBSSxDQUFDLElBQUksQ0FBQztBQUNqQixnQkFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsbUJBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsZ0JBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLGtDQUFJLEtBQUsseUJBQXVCLElBQUksQ0FBQyxJQUFJLENBQUcsQ0FBQztTQUNoRDs7O2VBRU0sa0JBQUc7QUFDTixnQkFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3ZCOzs7ZUFFTyxtQkFBRztBQUNQLGdCQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFO0FBQ3hCLHNDQUFJLEtBQUssZ0JBQWEsSUFBSSxDQUFDLElBQUkscURBQThDLElBQUksQ0FBQyxZQUFZLFFBQUksQ0FBQzthQUN0Rzs7QUFFRCxnQkFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BCLGdCQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFO0FBQ3hCLG9CQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDbEI7U0FDSjs7O2VBRUcsY0FBQyxJQUFJLEVBQUU7QUFDUCxnQkFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDYix1QkFBTzthQUNWO0FBQ0QsZ0JBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQzFCLG9CQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO0FBQzdCLHdCQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMvQywyQkFBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7aUJBQzdCO2FBQ0o7QUFDRCxnQkFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDeEMsb0JBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0RCx1QkFBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ3hDO1NBQ0o7OztlQUVHLGNBQUMsT0FBTyxFQUFFOzs7QUFDVixnQkFBSSxDQUFDLE9BQU8sRUFBRTtBQUNWLHVCQUFPLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEQ7O0FBRUQsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLGdCQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7QUFDakMsb0JBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLG9CQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDckMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDeEIsb0JBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQzdCLG9CQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDN0MsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ3hELG9CQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUMxQixvQkFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzthQUN0RTs7QUFFRCxnQkFBSSxDQUFDLE9BQU8sR0FDUixBQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBTTtBQUFFLHNCQUFLLGdCQUFnQixFQUFFLENBQUMsQUFBQyxhQUFZO2FBQUUsQ0FBQyxJQUNuRixTQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixtQkFBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3ZCOzs7OztlQUdLLGdCQUFDLEdBQUcsRUFBZ0I7OztnQkFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ3BCLGdCQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNiLHVCQUFPO2FBQ1Y7O0FBRUQsZ0JBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtBQUNsQixtQkFBRyxHQUFHLHdCQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2pEOztBQUVELGdCQUFJLENBQUMsR0FBRyxHQUFHLHdCQUFNLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLGdCQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDdkIsZ0JBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDOztBQUV6QixnQkFBSSxDQUFDLE9BQU8sR0FBRyxhQUFZLFVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBSztBQUM1QyxvQkFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUN4QixxQkFBSyxDQUFDLE1BQU0sR0FBRyxZQUFNO0FBQ2pCLHdCQUFJO0FBQ0EsK0JBQUssVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztxQkFDbkMsQ0FDRCxPQUFPLENBQUMsRUFBRTtBQUNOLCtCQUFLLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDcEIsOENBQUksSUFBSSxnQkFBYSxPQUFLLElBQUksa0NBQTJCLE9BQUssTUFBTSxTQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyRiwrQkFBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLG1DQUFpQyxPQUFLLE1BQU0sQUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7cUJBQ3JIOztBQUVELDJCQUFLLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkIsMkJBQU8sUUFBTSxDQUFDO2lCQUNqQixDQUFDO0FBQ0YscUJBQUssQ0FBQyxPQUFPLEdBQUcsVUFBQSxDQUFDLEVBQUk7O0FBRWpCLDJCQUFLLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDcEIsMENBQUksSUFBSSxnQkFBYSxPQUFLLElBQUksa0NBQTJCLE9BQUssTUFBTSxTQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyRiwyQkFBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLG1DQUFpQyxPQUFLLE1BQU0sQUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDbEgsMkJBQU8sUUFBTSxDQUFDO2lCQUNqQixDQUFDO0FBQ0YscUJBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2hDLHFCQUFLLENBQUMsR0FBRyxHQUFHLE9BQUssTUFBTSxDQUFDO2FBQzNCLENBQUMsQ0FBQztBQUNILG1CQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDdkI7Ozs7O2VBR00saUJBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQWdCO2dCQUFkLE9BQU8seURBQUcsRUFBRTs7QUFDckMsZ0JBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLGdCQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIsZ0JBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ25CLGdCQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQzs7QUFFMUIsZ0JBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckIsZ0JBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7O0FBRTNCLGdCQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQixnQkFBSSxDQUFDLE9BQU8sR0FBRyxTQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxtQkFBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3ZCOzs7OztlQUdTLG9CQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDekIsZ0JBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQzs7O0FBR2pCLGdCQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRTtBQUM3Qix1QkFBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDN0M7O0FBRUQsZ0JBQUksT0FBTyxZQUFZLGlCQUFpQixJQUNwQyxPQUFPLFlBQVksZ0JBQWdCLElBQ25DLE9BQU8sWUFBWSxnQkFBZ0IsRUFBRTtBQUNyQyxvQkFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDdEIsb0JBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDOztBQUU3QixvQkFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQixvQkFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM5QixNQUNJO0FBQ0Qsb0JBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLG9CQUFJLEdBQUcsNkNBQTBDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLHNCQUFvQixDQUFDO0FBQ3hGLG1CQUFHLCtEQUErRCxDQUFDO0FBQ25FLHNDQUFJLElBQUksZ0JBQWEsSUFBSSxDQUFDLElBQUksWUFBTSxHQUFHLEVBQUksT0FBTyxDQUFDLENBQUM7QUFDcEQsdUJBQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxzQ0FBb0MsR0FBRyxBQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDdEc7O0FBRUQsZ0JBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ25CLGdCQUFJLENBQUMsT0FBTyxHQUFHLFNBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLG1CQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDdkI7Ozs7O2VBR0ssa0JBQWU7Z0JBQWQsT0FBTyx5REFBRyxFQUFFOztBQUNmLGdCQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNiLHVCQUFPO2FBQ1Y7O0FBRUQsZ0JBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNaLGdCQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFHLE9BQU8sQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBRSxDQUFDO0FBQ3pHLGdCQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLDhCQUE4QixFQUFFLE9BQU8sQ0FBQyw4QkFBOEIsSUFBSSxLQUFLLENBQUMsQ0FBQzs7O0FBRzdHLGdCQUFJLElBQUksQ0FBQyxNQUFNLFlBQVksaUJBQWlCLElBQUksSUFBSSxDQUFDLE1BQU0sWUFBWSxnQkFBZ0IsSUFDbEYsSUFBSSxDQUFDLE1BQU0sWUFBWSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQUFBQyxFQUFFOztBQUVuRSxvQkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUMvQixvQkFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqQyxvQkFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM3Rzs7aUJBRUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sRUFBRTtBQUNsQyx3QkFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUN6STs7QUFFRCxtQkFBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkM7Ozs7O2VBR1csd0JBQWU7Z0JBQWQsT0FBTyx5REFBRyxFQUFFOztBQUNyQixnQkFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDYix1QkFBTzthQUNWOztBQUVELG1CQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDOztBQUVsRCxnQkFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNqQixnQkFBSSxDQUFDLElBQUksRUFBRSxDQUFDOzs7Ozs7QUFNWixnQkFBSSx3QkFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLHdCQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDL0Qsb0JBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLGtCQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxJQUFLLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLE1BQU0sQUFBQyxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoSSxrQkFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWMsSUFBSyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEFBQUMsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7O0FBRWhJLG9CQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFO0FBQ2hDLHdCQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztBQUMxQixzQkFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNoRixzQkFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEUsc0JBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNwQyxNQUNJLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUU7QUFDckMsd0JBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzFCLHNCQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRSxzQkFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3JFLE1BQ0ksSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtBQUN0Qyx3QkFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDM0Isc0JBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLHNCQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDdEU7YUFDSixNQUNJOzs7QUFHRCxvQkFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDeEIsa0JBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNyRSxrQkFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDOztBQUVyRSxvQkFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtBQUNqQyx3QkFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDM0Isc0JBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLHNCQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDdEUsTUFDSTs7QUFDRCx3QkFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDMUIsc0JBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLHNCQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDckU7YUFDSjs7QUFFRCxtQkFBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkM7Ozs7O2VBR2UsNEJBQUc7QUFDZixnQkFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2QscUJBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN4Qix3QkFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0FBRzdCLHdCQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FDN0MsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3RCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN0QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUM1QixDQUFDOzs7QUFHRix3QkFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDMUM7YUFDSjtTQUNKOzs7V0FsVGdCLE9BQU87OztxQkFBUCxPQUFPO0FBeVQ1QixPQUFPLENBQUMsTUFBTSxHQUFHLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDMUMsV0FBTyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0NBQ3pDLENBQUM7O0FBRUYsT0FBTyxDQUFDLE1BQU0sR0FBRyxVQUFVLElBQUksRUFBRTtBQUM3QixRQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsZUFBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNuQztDQUNKLENBQUM7O0FBRUYsT0FBTyxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUksRUFBRTtBQUM5QixRQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsZUFBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNwQztDQUNKLENBQUM7OztBQUdGLE9BQU8sQ0FBQyxPQUFPLEdBQUcsVUFBVSxFQUFFLEVBQUU7QUFDNUIsUUFBSSxRQUFRLEdBQUcsYUFBWSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7OztBQUM3QywwQ0FBYyxRQUFRLDRHQUFFO2dCQUFmLENBQUM7O0FBQ04sZ0JBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsZ0JBQUksT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDbkIsdUJBQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNyQjtTQUNKOzs7Ozs7Ozs7Ozs7Ozs7Q0FDSixDQUFDOzs7QUFHRixPQUFPLENBQUMsYUFBYSxHQUFHLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMvQyxRQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hDLFdBQU8sT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUMzRixDQUFDOzs7QUFHRixPQUFPLENBQUMscUJBQXFCLEdBQUcsVUFBVSxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRTtBQUN4RSxRQUFJLGFBQWEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFaEUsV0FBTyxDQUNILFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQzVCLGFBQWEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQzNCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQSxHQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFDN0MsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFBLEdBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUMvQyxDQUFDO0NBQ0wsQ0FBQzs7OztBQUlGLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUU7QUFDL0MsUUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLFFBQUksUUFBUSxFQUFFO0FBQ1YsYUFBSyxJQUFJLE9BQU8sSUFBSSxRQUFRLEVBQUU7QUFDMUIsZ0JBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7OztBQUkvQixnQkFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQ25DLHlCQUFTO2FBQ1o7O0FBRUQsZ0JBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRCxtQkFBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDakM7S0FDSjtBQUNELFdBQU8sU0FBUSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Q0FDL0IsQ0FBQzs7O0FBR0YsT0FBTyxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDdEMsUUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxRQUFJLE9BQU8sRUFBRTs7O0FBRVQsWUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtBQUM3RCxtQkFBTyxJQUFJLENBQUM7U0FDZjs7O0FBR0QsWUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsS0FDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFjLEVBQUUsSUFBSSxFQUFKLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUU7QUFDakQsbUJBQU8sS0FBSyxDQUFDO1NBQ2hCO0tBQ0o7QUFDRCxXQUFPLElBQUksQ0FBQztDQUNmLENBQUM7Ozs7O0FBS0YsT0FBTyxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUksRUFBRTs7QUFFOUIsUUFBSSxDQUFDLElBQUksRUFBRTtBQUNQLFlBQUksR0FBRyxhQUFZLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN4Qzs7O0FBR0QsUUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JCLGVBQU8sU0FBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUM7bUJBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FBQSxDQUFDLENBQUMsQ0FBQztLQUN6RDs7O0FBR0QsUUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxRQUFJLEdBQUcsRUFBRTs7QUFFTCxZQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLFNBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELGVBQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFNOzs7QUFHdEIsbUJBQU87QUFDSCxvQkFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO0FBQ2QscUJBQUssRUFBRSxHQUFHLENBQUMsS0FBSztBQUNoQixzQkFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO0FBQ2xCLHVCQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87QUFDcEIseUJBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztBQUN4QixxQkFBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO0FBQ2hCLHlCQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7QUFDeEIsMEJBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtBQUMxQixxQkFBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2FBQ25CLENBQUM7U0FDTCxDQUFDLENBQUM7S0FDTixNQUNJOztBQUVELGVBQU8sU0FBUSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEM7Q0FDSixDQUFDOzs7OztBQUtGLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLEtBQUssRUFBRTtBQUM1QyxXQUFPLGdDQUFhLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FDckQsSUFBSSxDQUFDLFVBQUEsUUFBUSxFQUFJOzs7Ozs7QUFDYiwrQ0FBZ0IsUUFBUSxpSEFBRTtvQkFBakIsR0FBRzs7QUFDUix1QkFBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ3BDOzs7Ozs7Ozs7Ozs7Ozs7O0FBQ0QsZUFBTyxPQUFPLENBQUMsUUFBUSxDQUFDO0tBQzNCLENBQUMsQ0FBQztDQUNWLENBQUM7OztBQUdGLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLEVBQUUsRUFBRTtBQUN0QyxXQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Q0FDL0MsQ0FBQzs7O0FBR0YsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDdEIsT0FBTyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDN0IsT0FBTyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQixPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDOztBQUV4QixPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzs7QUFFeEIsZ0NBQWEsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMzQyxpQ0FBZSxPQUFPLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7d0JDdGRSLFVBQVU7Ozs7QUFFMUIsSUFBSSxpQkFBaUIsQ0FBQztxQkFDUCxpQkFBaUIsR0FBRyxFQUFFOztBQUVyQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ25DLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7O0FBRW5DLGlCQUFpQixDQUFDLElBQUksR0FBRyxVQUFVLEVBQUUsRUFBRTtBQUNuQyxRQUFJLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUU7QUFDL0IsWUFBSSxpQkFBaUIsQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQ3JDLDZCQUFpQixDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDdEU7O0FBRUQsWUFBSSxpQkFBaUIsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFO0FBQy9CLGtDQUFJLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQ3ZELE1BQ0ksSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQzFDLGtDQUFJLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1NBQzNELE1BQ0k7QUFDRCxrQ0FBSSxJQUFJLENBQUMsOENBQThDLENBQUMsQ0FBQztTQUM1RDtLQUNKO0NBQ0osQ0FBQzs7QUFFRixpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsVUFBVSxLQUFLLEVBQUUsUUFBUSxFQUFFO0FBQ2xELFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLE9BQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLE9BQUcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDOztBQUV4QixRQUFJLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUM7QUFDaEMsUUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO0FBQ2IsV0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztBQUN0QyxXQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3BDOztBQUVELE9BQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWhCLFdBQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUFFRixpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLEVBQUU7QUFDcEMsUUFBSSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDO0FBQ2hDLFFBQUksR0FBRyxJQUFJLElBQUksRUFBRTtBQUNiLFlBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtBQUNqQyxlQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLDZCQUFpQixDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7U0FDckMsTUFDSTtBQUNELGVBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEI7S0FDSixNQUNJO0FBQ0QsWUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO0FBQ2IsZUFBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDLE1BQ0ksSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLE9BQU8saUJBQWlCLENBQUMsU0FBUyxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUU7QUFDeEcsNkJBQWlCLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQzFDO0FBQ0QseUJBQWlCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztLQUN0QztDQUNKLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OEJDL0R3QixrQkFBa0I7Ozs7bUJBQ2QsT0FBTzs7Ozt3QkFDckIsVUFBVTs7Ozs7O0lBR0wsT0FBTztBQUViLGFBRk0sT0FBTyxDQUVaLEVBQUUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRTs4QkFGcEMsT0FBTzs7QUFHcEIsZUFBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7O0FBRXhCLFlBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2IsWUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDL0IsWUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDbkMsWUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLFlBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQztBQUN4RCxZQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUM7QUFDNUQsWUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUMvQixZQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDakMsWUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQzs7QUFFdEMsWUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztBQUM1RSxZQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0FBQ3JFLFlBQUksQ0FBQyxJQUFJLEdBQUcsVUFBUyxDQUFDOztBQUV0QixZQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQsWUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7O0FBRTVFLFlBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2QsbUJBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUMzQjtBQUNELFlBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0tBQ3JCOzs7O2lCQTFCZ0IsT0FBTzs7ZUE2QmxCLGtCQUFlO2dCQUFkLE9BQU8seURBQUcsRUFBRTs7QUFDZixnQkFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDYix1QkFBTyxLQUFLLENBQUM7YUFDaEI7O0FBRUQsZ0JBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRTtBQUMxQyxvQkFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3hCOztBQUVELGdCQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLDRCQUFjLE9BQU8sQ0FBQztBQUN2RCxtQkFBTyxDQUFDLEdBQUcsRUFBRSxDQUFDOztBQUVkLGdCQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDZix1QkFBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEMsdUJBQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM3Qzs7QUFFRCxnQkFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs7O0FBR25CLGdCQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDekQsNkJBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFN0IsZ0JBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNmLHVCQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUMxQzs7QUFFRCxtQkFBTyxJQUFJLENBQUM7U0FDZjs7Ozs7ZUFHRyxjQUFDLE9BQU8sRUFBRTs7OztBQUVWLGdCQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQyxnQkFBSSxHQUFHLEVBQUU7QUFDTCxpQ0FBa0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQy9CLE1BQ0k7QUFDRCxvQkFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGlCQUFrQixNQUFNLENBQUMsVUFBQyxLQUFLLEVBQUs7QUFDdkQsMEJBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFLLEVBQUUsQ0FBQyxZQUFZLEVBQUUsTUFBSyxNQUFNLENBQUMsQ0FBQztBQUN0RCwwQkFBSyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDdEQsQ0FBQyxDQUFDLENBQUM7YUFDUDtTQUNKOzs7ZUFFTSxtQkFBRztBQUNOLGdCQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNiLHVCQUFPLEtBQUssQ0FBQzthQUNoQjtBQUNELGdCQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzs7QUFFbkIsa0NBQUksS0FBSyxDQUFDLGdDQUFnQyxJQUFJLElBQUksQ0FBQyxXQUFXLGlCQUFlLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFLLEVBQUUsQ0FBQSxBQUFDLENBQUMsQ0FBQzs7QUFFbEgsZ0JBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQyxnQkFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkIsbUJBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQzs7QUFFeEIsbUJBQU8sSUFBSSxDQUFDO1NBQ2Y7OztXQXZGZ0IsT0FBTzs7O3FCQUFQLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt5QkNOYixhQUFhOzs7Ozs7MEJBQ1YsZ0JBQWdCOzs7QUFHbEMsSUFBSSxXQUFXLHFEQUNWLHVCQUFHLEtBQUssRUFBRyxZQUFZLGlDQUN2Qix1QkFBRyxJQUFJLEVBQUcsU0FBUyxpQ0FDbkIsdUJBQUcsYUFBYSxFQUFHLFVBQVUsaUNBQzdCLHVCQUFHLEdBQUcsRUFBRyxVQUFVLGlDQUNuQix1QkFBRyxZQUFZLEVBQUcsV0FBVyxpQ0FDN0IsdUJBQUcsS0FBSyxFQUFHLFVBQVUsaUNBQ3JCLHVCQUFHLGNBQWMsRUFBRyxXQUFXLGdCQUNuQyxDQUFDOzs7OztJQUltQixVQUFVO0FBRWYsYUFGSyxVQUFVLENBRWQsYUFBYSxFQUFxQjt5RUFBSixFQUFFOztZQUFmLFFBQVEsUUFBUixRQUFROzs4QkFGckIsVUFBVTs7QUFHdkIsWUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7O0FBRW5DLFlBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLGdCQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUMsZ0JBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDNUMsZ0JBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUUsaUNBQUksT0FBTywwQ0FBd0MsSUFBSSxDQUFDLGFBQWEsVUFBSyxJQUFJLENBQUMsV0FBVyxlQUFZLENBQUM7U0FDMUcsTUFDSTtBQUNELGdCQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsSUFBSSxHQUFHLENBQUM7QUFDbkMsZ0JBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUNsRSxnQkFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDcEQ7QUFDRCxZQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQzs7QUFFdkIsWUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7Ozs7OztBQUNyQiw4Q0FBc0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLDRHQUFFO29CQUE1QyxTQUFTOztBQUNkLG9CQUFJLENBQUMsVUFBVSxDQUFDLElBQUksOEJBQUssU0FBUyxHQUFFLENBQUM7YUFDeEM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDRCxZQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN0QixZQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN2QixZQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7S0FDekI7Ozs7aUJBekJnQixVQUFVOztlQTRCWiwwQkFBRztBQUNkLGdCQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN2QixnQkFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBRyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7QUFDbEQsbURBQW1CLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxpSEFBRTt3QkFBdEMsTUFBTTs7O0FBRVgsd0JBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ3hDLDRCQUFJLFVBQVUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDLDRCQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUN2RTtpQkFDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHRCxtREFBc0IsSUFBSSxDQUFDLFVBQVUsaUhBQUU7d0JBQTlCLFNBQVM7O0FBQ2QsNkJBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNsRDs7Ozs7Ozs7Ozs7Ozs7O1NBQ0o7Ozs7O2VBR2UsMkJBQUc7QUFDZixnQkFBSSxBQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUN2RSxvQkFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDdEQsb0JBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDekMsb0JBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUNsRSxvQkFBSSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2xELHdCQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQiwwQkFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLG9CQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUN2QixvQkFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3RCLG9CQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7O2FBRXhCO1NBQ0o7Ozs7Ozs7O2VBTVMsbUJBQUMsTUFBTSxFQUFFO0FBQ2YsZ0JBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUN2QixnQkFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDOztBQUVSLGdCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztBQUNsQyxpQkFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QixvQkFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyx5QkFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUEsR0FBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNuRjs7QUFFRCxnQkFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztBQUNoRCxnQkFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3ZCOzs7OztlQUdHLGVBQUc7O0FBRUgsZ0JBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMxRCxpQ0FBSSxPQUFPLG1CQUFpQixJQUFJLENBQUMsV0FBVyx1Q0FBa0MsSUFBSSxDQUFDLGFBQWEsQ0FBRyxDQUFDO0FBQ3BHLG1CQUFPLElBQUksQ0FBQztTQUNmOzs7V0FyRmdCLFVBQVU7OztxQkFBVixVQUFVOztBQXlGL0IsVUFBVSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt5QkN6R1osYUFBYTs7Ozs7OzJCQUNMLGVBQWU7Ozs7OztJQUdqQixZQUFZOzs7O0FBR2pCLGFBSEssWUFBWSxDQUdoQixPQUFPLEVBQUU7OEJBSEwsWUFBWTs7QUFJekIsWUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdkIsWUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDckIsWUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7OztBQUdoQixZQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs7QUFFaEIsWUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDOzs7Ozs7QUFDZCw4Q0FBbUIsSUFBSSxDQUFDLE9BQU8sNEdBQUU7b0JBQXhCLE1BQU07O0FBQ1gsc0JBQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM1QixzQkFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQy9CLG9CQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7O0FBRWQsd0JBQVEsTUFBTSxDQUFDLElBQUk7QUFDZix5QkFBSyx1QkFBRyxLQUFLLENBQUM7QUFDZCx5QkFBSyx1QkFBRyxHQUFHLENBQUM7QUFDWix5QkFBSyx1QkFBRyxZQUFZO0FBQ2hCLDhCQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUN0Qiw2QkFBSyxHQUFHLENBQUMsQ0FBQztBQUNWLDhCQUFNO0FBQUEsQUFDVix5QkFBSyx1QkFBRyxLQUFLLENBQUM7QUFDZCx5QkFBSyx1QkFBRyxjQUFjO0FBQ2xCLDhCQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUN0Qiw2QkFBSyxHQUFHLENBQUMsQ0FBQztBQUNWLDhCQUFNO0FBQUEsaUJBQ2I7OztBQUdELG9CQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDaEMsb0JBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7O0FBQ2pCLHdCQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQSxBQUFDLENBQUM7aUJBQ3hDOzs7Ozs7QUFNRCxvQkFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDMUMsb0JBQUksTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDakIseUJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hDLDRCQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3BFO2lCQUNKLE1BQ0k7QUFDRCx3QkFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztpQkFDbEU7OztBQUdELG9CQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDaEMscUJBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ3hCOzs7Ozs7Ozs7Ozs7Ozs7S0FDSjs7Ozs7Ozs7OztpQkF2RGdCLFlBQVk7O2VBNkR0QixnQkFBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFDMUI7QUFDSSxnQkFBSSxNQUFNLEVBQUUsUUFBUSxDQUFDOzs7QUFHckIsaUJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4QyxzQkFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsd0JBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUM7O0FBRW5ELG9CQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNqQix3QkFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxFQUFFO0FBQ2xELDBCQUFFLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQ3hDO0FBQ0Qsc0JBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUcsZ0NBQVksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDO2lCQUNwRDthQUNKOzs7QUFHRCxpQkFBSyxRQUFRLElBQUksWUFBWSxDQUFDLGVBQWUsRUFBRTtBQUMzQyxvQkFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDdEQ7U0FDSjs7Ozs7O2VBSXNCLGdDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0FBQzNDLGdCQUFJLFlBQVksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssT0FBTyxFQUFFO0FBQ3BELGtCQUFFLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEMsdUJBQU8sWUFBWSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNqRDtTQUNKOzs7ZUFFZ0IsNEJBQUc7QUFDaEIsbUJBQU8sNkJBQWUsSUFBSSxDQUFDLENBQUM7U0FDL0I7OztXQWhHZ0IsWUFBWTs7O3FCQUFaLFlBQVk7QUFzR2pDLFlBQVksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs0QkMxR1YsZ0JBQWdCOzs7O3dCQUV4QixVQUFVOzs7O0FBRTFCLElBQUksU0FBUyxDQUFDOztxQkFFQyxTQUFTLEdBQUc7O0FBRXZCLFNBQUssRUFBRSxFQUFFOztBQUVULGFBQVMsRUFBQyxtQkFBQyxJQUFJLEVBQUU7QUFDYixZQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHO0FBQzNCLGtCQUFNLEVBQUU7QUFDSixvQkFBSSxFQUFFLEVBQUU7QUFDUixtQkFBRyxFQUFFLEVBQUU7YUFDVjtBQUNELG1CQUFPLEVBQUUsRUFBRTtBQUNYLGdCQUFJLEVBQUUsRUFBRTtBQUNSLGtCQUFNLEVBQUUsVUFBUztTQUNwQixDQUFDOzs7QUFHRixhQUFLLENBQUMsUUFBUSxHQUFHLGFBQVksVUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFLO0FBQzlDLGlCQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUN4QixpQkFBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDekIsQ0FBQyxDQUFDO0tBQ047O0FBRUQsYUFBUyxFQUFDLG1CQUFDLElBQUksRUFBRTtBQUNiLGVBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQjs7O0FBR0QsWUFBUSxFQUFDLGtCQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDbkIsWUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3RDOzs7QUFHRCxXQUFPLEVBQUMsaUJBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDM0IsWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixZQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1Isa0NBQUksS0FBSyxDQUFDLDJDQUEyQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6RixtQkFBTyxTQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDL0c7OztBQUdELFlBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDakMsYUFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkMsZ0JBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixnQkFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDbkMsd0JBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3RELHdCQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwRSx3QkFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQzs7O0FBR0QsYUFBSyxDQUFDLE1BQU0sVUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLFlBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLGdCQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RCOzs7QUFHRCxlQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQU07QUFDN0IsbUJBQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbEMsQ0FBQyxDQUFDO0tBQ047Ozs7QUFJRCxXQUFPLEVBQUMsaUJBQUMsSUFBSSxFQUFFO0FBQ1gsWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixZQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzFCLFlBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7O0FBRXRCLGtDQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O0FBR3hCLFlBQUksVUFBVSxHQUFHLGFBQVksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDO21CQUFLLENBQUMsR0FBRyxDQUFDO1NBQUEsQ0FBQyxDQUFDOzs7Ozs7QUFDbEUsOENBQXFCLFVBQVUsNEdBQUU7b0JBQXhCLFFBQVE7O0FBQ2Isb0JBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUMsb0JBQUksQ0FBQyxhQUFhLEVBQUU7O0FBQ2hCLDZCQUFTO2lCQUNaOzs7QUFHRCxxQkFBSyxJQUFJLEtBQUssSUFBSSxhQUFhLEVBQUU7QUFDN0Isd0JBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyx3QkFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7O0FBRWhDLHlCQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTt5Q0FDYixPQUFPLENBQUMsQ0FBQyxDQUFDOzRCQUE1QixLQUFLLGNBQUwsS0FBSzs0QkFBRSxNQUFNLGNBQU4sTUFBTTs7OztBQUduQiw0QkFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFOztBQUUzQyxnQ0FBSSxLQUFLLEdBQUcsMEJBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkQsZ0NBQUksS0FBSyxFQUFFOztBQUVQLHlDQUFTOzZCQUNaOztBQUVELHNEQUFZLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDOztBQUVyQyxpQ0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQixnQ0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDaEM7Ozs7cUJBSUo7aUJBQ0o7YUFDSjs7Ozs7Ozs7Ozs7Ozs7OztBQUVELGVBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QixhQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbkI7O0NBRUo7Ozs7Ozs7Ozs7Ozs7Ozs7NEJDckh3QixlQUFlOzs7Ozs7MEJBQ3RCLGdCQUFnQjs7Ozt3QkFDbEIsY0FBYzs7Ozs7O0lBSVQsS0FBSztBQUVWLGFBRkssS0FBSyxDQUVULElBQUksRUFBZ0I7WUFBZCxPQUFPLHlEQUFHLEVBQUU7OzhCQUZkLEtBQUs7O0FBR2xCLFlBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFlBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLFlBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLFlBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFlBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0tBQ25COzs7O2lCQVJnQixLQUFLOztlQVdiLGtCQUFDLE1BQU0sRUFBRTs7O0FBQ2QsZ0JBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUN0QixnQkFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUN4QixnQkFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQzs7O0FBR3RCLGdCQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xCLCtDQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFDLENBQUMsRUFBRSxDQUFDLEVBQUs7Ozs7QUFJdkMsd0JBQUksTUFBSyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTs7QUFFN0MsaUNBQVMsR0FBRyxJQUFJLENBQUM7QUFDakIsK0JBQU8sSUFBSSxDQUFDO3FCQUNmOzs7QUFHRCx3QkFBSSxzQkFBSSxTQUFTLENBQUMsTUFBSyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7O0FBRWxDLGlDQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLCtCQUFPLElBQUksQ0FBQztxQkFDZjtpQkFDSixDQUFDLENBQUM7YUFDTjtBQUNELG1CQUFPLFNBQVMsQ0FBQztTQUNwQjs7Ozs7ZUFHRyxhQUFDLE1BQU0sRUFBRTtBQUNULGtCQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsa0JBQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3Qjs7Ozs7ZUFHWSx3QkFBRztBQUNaLGdCQUFJLEdBQUcsR0FBRyxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDO0FBQ3pDLGdCQUFJLEdBQUcsR0FBRyxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDOztBQUV6QyxnQkFBSSxDQUFDLHdCQUFNLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHdCQUFNLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNwRCx1QkFBTyxLQUFLLENBQUM7YUFDaEI7O0FBRUQsbUJBQU8sSUFBSSxDQUFDO1NBQ2Y7Ozs7OztlQUlPLGlCQUFDLE1BQU0sRUFBRTs7QUFFYixnQkFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtBQUM3QixvQkFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDOzs7QUFHbEMsb0JBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7O0FBRXpDLHdCQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO0FBQ3RCLCtCQUFPLElBQUksQ0FBQztxQkFDZjtpQkFDSixNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDakIsK0JBQU8sSUFBSSxDQUFDO3FCQUNmO2FBQ0o7OztBQUdELG1CQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEM7OztXQTdFZ0IsS0FBSzs7O3FCQUFMLEtBQUs7O0FBZ0YxQixLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0JDdEZKLFdBQVc7Ozs7cUJBQ1osU0FBUzs7Ozt3QkFDWCxjQUFjOzs7O0lBRVQsU0FBUztjQUFULFNBQVM7O0FBRWQsYUFGSyxTQUFTLENBRWIsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7OEJBRmxCLFNBQVM7O0FBR3RCLG1DQUhhLFNBQVMsNkNBR2hCLElBQUksRUFBRSxPQUFPLEVBQUU7O0FBRXJCLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDOzs7O0FBSW5CLFlBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7QUFDaEQsWUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzVELFlBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNqQjs7aUJBWmdCLFNBQVM7O2VBY25CLGtCQUFHO0FBQ04sZ0JBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNwQyxnQkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDakMsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsR0FBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLEdBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0YsZ0JBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN2Qjs7O2VBRWUsMkJBQUc7QUFDZixnQkFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRTtBQUNoRCx1QkFBTyxLQUFLLENBQUM7YUFDaEI7O0FBRUQsZ0JBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNyQixnQkFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztBQUVkLG1CQUFPLElBQUksQ0FBQztTQUNmOzs7ZUFFWSx3QkFBRztBQUNaLGdCQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDcEMsZ0JBQUksSUFBSSxHQUFHLG9CQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRTlDLGdCQUFJLEdBQUcsb0JBQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUU5QixnQkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkIsZ0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7QUFFaEQsZ0JBQUksS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUU7QUFDL0IscUJBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO2FBQ3BCO0FBQ0QsaUJBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzs7QUFFckIsbUJBQU8sS0FBSyxDQUFDO1NBQ2hCOzs7ZUFFWSx3QkFBRztBQUNaLGdCQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDcEMsZ0JBQUksSUFBSSxHQUFHLG9CQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsZ0JBQUksTUFBTSxHQUFHLG9CQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFakMsZ0JBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7O0FBRS9ELGdCQUFJLFlBQVksR0FBRyxNQUFNLEVBQUU7O0FBRXZCLG9CQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLEdBQUksR0FBRyxDQUFDO0FBQ2pELHVCQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUM1Qzs7QUFFRCxtQkFBTyxZQUFZLElBQUksTUFBTSxDQUFDO1NBQ2pDOzs7ZUFFYywwQkFBRztBQUNkLGdCQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN4QyxnQkFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDOztBQUU1QyxtQkFBTyxDQUFFLEVBQUUsRUFBRSxFQUFFLENBQUUsQ0FBQztTQUNyQjs7O2VBRVksd0JBQUc7QUFDWixnQkFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7QUFDdkMsZ0JBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsR0FBSSxHQUFHLEdBQUcsbUJBQU0sT0FBTyxDQUFDO0FBQzlFLGdCQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLEdBQUksR0FBRyxHQUFHLG1CQUFNLE9BQU8sQ0FBQzs7O0FBRy9FLGdCQUFJLE1BQU0sR0FBRyxvQkFBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pELGdCQUFJLENBQUMsR0FBRyxDQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQUFBQyxFQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEFBQUMsQ0FDdkMsQ0FBQzs7O0FBR0YsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsMEJBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNELGdCQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDcEM7Ozs7OztlQUlZLHdCQUFHO0FBQ1osZ0JBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNwQixnQkFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDOzs7QUFHMUMsbUJBQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUU7QUFDakMsb0JBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7QUFDekIsMEJBQU07aUJBQ1Q7O0FBRUQsdUJBQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDOUIsK0JBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDekM7O0FBRUQsbUJBQU8sT0FBTyxJQUFJLGVBQWUsQ0FBQztTQUNyQzs7O2VBRU8saUJBQUMsTUFBTSxFQUFFOztBQUViLGdCQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7QUFDcEMsdUJBQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7QUFDekIsd0JBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7QUFDekIsK0JBQU8sSUFBSSxDQUFDO3FCQUNmO2lCQUNKO2FBQ0o7OztBQUdELDhDQXZIYSxTQUFTLHlDQXVIRCxNQUFNLEVBQUU7U0FDaEM7OztXQXhIZ0IsU0FBUzs7O3FCQUFULFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3FCQ0paLFNBQVM7Ozs7bUJBQ1gsUUFBUTs7Ozt3QkFDUixjQUFjOzs7O3dDQUNOLCtCQUErQjs7OztJQUVsQyxVQUFVO2NBQVYsVUFBVTs7QUFFZixhQUZLLFVBQVUsQ0FFZCxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTs4QkFGckIsVUFBVTs7QUFHdkIsbUNBSGEsVUFBVSw2Q0FHakIsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUNyQixZQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFlBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNqQjs7aUJBTmdCLFVBQVU7O2VBUXJCLGtCQUFHO0FBQ0wsZ0JBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUMzQyxnQkFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3ZCOzs7ZUFFYSx5QkFBRztBQUNiLG1CQUFPLHNDQUFZLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekY7OztlQUVZLHdCQUFHO0FBQ1osZ0JBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsR0FBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsR0FBRyxtQkFBTSxPQUFPLENBQUM7QUFDdkcsZ0JBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsR0FBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsR0FBRyxtQkFBTSxPQUFPLENBQUM7O0FBRXhHLGdCQUFJLENBQUMsR0FBRyxDQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEFBQUMsRUFDMUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQUFBQyxDQUM3RSxDQUFDOztBQUVGLGdCQUFJLENBQUMsR0FBRyxHQUFHLDBCQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqRCxnQkFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3BDOzs7Ozs7ZUFJWSx3QkFBRztBQUNaLGdCQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7O0FBRXBCLGdCQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2xCLG9CQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyx1QkFBTyxHQUFHLElBQUksQ0FBQzthQUNsQjs7QUFFRCxnQkFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLGlCQUFJLFVBQVUsRUFBRTtBQUNoQyxvQkFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDdEQsdUJBQU8sR0FBRyxJQUFJLENBQUM7YUFDbEI7O0FBRUQsZ0JBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbEIsb0JBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyx1QkFBTyxHQUFHLElBQUksQ0FBQzthQUNsQjs7QUFFRCxnQkFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQUksVUFBVSxFQUFFO0FBQ2pDLG9CQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztBQUN0RCx1QkFBTyxHQUFHLElBQUksQ0FBQzthQUNsQjs7QUFFRCxnQkFBSSxPQUFPLEVBQUU7QUFDVCxvQkFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3ZCOztBQUVELG1CQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUM5Qjs7O1dBNURnQixVQUFVOzs7cUJBQVYsVUFBVTs7Ozs7Ozs7Ozs7Ozs7OzttQkNMZixRQUFROzs7O0lBRUgsV0FBVztBQUVoQixhQUZLLFdBQVcsQ0FFZixHQUFHLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRTs4QkFGL0IsV0FBVzs7QUFHeEIsWUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDZixZQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUMvQixZQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUMxRCxZQUFJLENBQUMsa0JBQWtCLEdBQUcsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUM1RCxZQUFJLENBQUMsYUFBYSxHQUFHLEFBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEdBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztBQUNyRixZQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztLQUN2Qjs7Ozs7O2lCQVRnQixXQUFXOztlQVl0QixlQUFDLEdBQUcsRUFBRTs7QUFFUixnQkFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ3BCLG9CQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs7O0FBRzNCLDJCQUFPO0FBQ0gsK0JBQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCO0FBQ2hDLHNDQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7QUFDbkMscUNBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtxQkFDcEMsQ0FBQztpQkFDTDtBQUNELHVCQUFPO2FBQ1Y7OztBQUdELGdCQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO0FBQ3RCLGlCQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsb0JBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0Isb0JBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsb0JBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsb0JBQUksT0FBTyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7O0FBR2hDLG9CQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFO0FBQy9CLDJCQUFPO0FBQ0gsK0JBQU8sRUFBUCxPQUFPO0FBQ1Asc0NBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztxQkFDdEMsQ0FBQztpQkFDTDthQUNKO1NBQ0o7Ozs7O2VBR0csYUFBQyxHQUFHLEVBQUU7O0FBRU4sZ0JBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUU7QUFDckIsb0JBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNyQztTQUNKOzs7Ozs7O2VBS1ksZUFBQyxJQUFJLEVBQUU7QUFDaEIsZ0JBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzFCOzs7OztlQUdZLGVBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDN0IsZ0JBQUksTUFBTSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUNsRSx1QkFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDNUQ7U0FDSjs7Ozs7ZUFHVSxhQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0FBQzNCLGdCQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7QUFDeEIsb0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ2hELHdCQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FDcEQsTUFBTSxDQUFDLFlBQVksRUFDbkIsTUFBTSxDQUFDLGVBQWUsRUFDdEIsV0FBVyxDQUFDLGVBQWUsQ0FDOUIsQ0FBQztpQkFDTDtBQUNELG9CQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbkQ7U0FDSjs7O1dBL0VnQixXQUFXOzs7cUJBQVgsV0FBVztBQW9GaEMsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Ozs7QUFJeEIsV0FBVyxDQUFDLGVBQWUsR0FBRyxpQkFBSSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7OzswQkMxRjNCLGVBQWU7Ozs7cUJBQ2YsU0FBUzs7OzttQkFDWCxPQUFPOzs7OztBQUdoQixJQUFJLFlBQVksQ0FBQzs7O0FBQ2pCLFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUNsQyxXQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxTQUFTLGFBQWEsQ0FBQyxPQUFPLEVBQUU7Ozs7QUFJNUIsUUFBSSxPQUFPLFlBQVksS0FBSyxXQUFXLEVBQUU7QUFDckMsZUFBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNwQzs7O0FBR0QsUUFBSSx3QkFBTSxZQUFZLEVBQUU7OztBQUVwQixnQkFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDOzs7O0FBSXBDLGdCQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM3RCxnQkFBSSxjQUFjLEdBQUcsY0FBYyxLQUFLLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN0RSxnQkFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7OztBQUcxQixnQkFBSSxjQUFjLEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUNoQyxnQ0FBZ0IsQ0FBQyxRQUFRLEdBQUcsWUFBVSxFQUFFLENBQUM7QUFDekMsZ0NBQWdCLENBQUMsV0FBVyxHQUFHLFlBQVUsRUFBRSxDQUFDO2FBQy9DOzs7QUFHRCwyQkFBYyxnQkFBZ0IsRUFBRTs7QUFFNUIsMEJBQVUsRUFBRSxvQkFBVSxPQUFPLEVBQUU7Ozs7QUFFM0IsMkJBQU8sQ0FBQyxTQUFTLEdBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssR0FBRyxJQUFJLEFBQUMsQ0FBQztBQUN4RCwyQkFBTyxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7O0FBRTVELHFCQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM1Qix3QkFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ25CLHdCQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNoQix3QkFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQzs7O0FBRy9CLHdCQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQzs7QUFFM0Isd0JBQUksQ0FBQyxpQkFBaUIsR0FBRyx3QkFBTSxRQUFRLENBQUMsWUFBTTtBQUMxQyw4QkFBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFCLDhCQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7cUJBQzdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2lCQUN0Qzs7QUFFRCwyQkFBVyxFQUFFLHVCQUFZO0FBQ3JCLHdCQUFJLENBQUMsS0FBSyxHQUFHLG1CQUFNLE1BQU0sQ0FDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQ2xCO0FBQ0ksa0NBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7QUFDbkMsaUNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7QUFDakMsa0NBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7QUFDbkMsc0NBQWMsRUFBRyxZQUFZLENBQUMsY0FBYyxLQUFLLEtBQUssQUFBQztBQUN2RCwwQ0FBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQjtBQUNuRCxnQ0FBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTs7QUFFL0IseUNBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUI7O0FBRWpELCtDQUF1QixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCO3FCQUNoRSxDQUFDLENBQUM7aUJBQ1Y7OztBQUdELHFCQUFLLEVBQUUsZUFBVSxHQUFHLEVBQUU7OztBQUNsQix3QkFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDYiw0QkFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO3FCQUN0Qjs7QUFFRCxrQ0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzs7QUFFdEQsd0JBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFlBQU07QUFDdEIsK0JBQUssaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQzlCLCtCQUFLLFVBQVUsRUFBRSxDQUFDO0FBQ2xCLCtCQUFLLGlCQUFpQixHQUFHLEtBQUssQ0FBQztxQkFDbEMsQ0FBQztBQUNGLHVCQUFHLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUVwQyx3QkFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsWUFBTTtBQUNwQiw0QkFBSSxPQUFLLGlCQUFpQixFQUFFO0FBQ3hCLG1DQUFPO3lCQUNWOztBQUVELCtCQUFLLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUM5Qiw0QkFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzNCLDRCQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxpQkFBSSxxQkFBcUIsQ0FBQyxDQUFDOztBQUVuRiwrQkFBSyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QiwrQkFBSyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDN0IsK0JBQUssZ0JBQWdCLEVBQUUsQ0FBQztBQUN4QiwrQkFBSyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7cUJBQ2xDLENBQUM7QUFDRix1QkFBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFaEMsd0JBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFlBQU07QUFDekIsNEJBQUksT0FBSyxpQkFBaUIsRUFBRTtBQUN4QixtQ0FBTzt5QkFDVjs7QUFFRCwrQkFBSyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDOUIsK0JBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM1QiwrQkFBSyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7cUJBQ2xDLENBQUM7QUFDRix1QkFBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQzs7QUFFMUMsd0JBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFlBQU07QUFDekIsK0JBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3FCQUNsQyxDQUFDO0FBQ0YsdUJBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7O0FBRTFDLHdCQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxZQUFNO0FBQ3ZCLCtCQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztxQkFDbkMsQ0FBQztBQUNGLHVCQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDOzs7QUFHdEMsdUJBQUcsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDOzs7QUFHMUIsd0JBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7O0FBR3BDLHdCQUFJLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsd0JBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7QUFHN0Msd0JBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7O0FBRzNDLHdCQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7OztBQUdsQix3QkFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDakIsNEJBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztxQkFDNUMsQ0FBQyxDQUFDOzs7QUFHSCx3QkFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBTTtBQUN6QiwrQkFBSyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7O0FBRTlCLCtCQUFLLFVBQVUsRUFBRSxDQUFDO0FBQ2xCLCtCQUFLLFVBQVUsRUFBRSxDQUFDO0FBQ2xCLCtCQUFLLGdCQUFnQixFQUFFLENBQUM7O0FBRXhCLCtCQUFLLGlCQUFpQixHQUFHLEtBQUssQ0FBQzs7QUFFL0IsK0JBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNyQixDQUFDLFNBQU0sQ0FBQyxVQUFBLEtBQUssRUFBSTtBQUNkLCtCQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7cUJBQzdCLENBQUMsQ0FBQztpQkFDTjs7QUFFRCx3QkFBUSxFQUFFLGtCQUFVLEdBQUcsRUFBRTtBQUNyQixrQ0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzs7QUFFekQsdUJBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckMsdUJBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsdUJBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0MsdUJBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0MsdUJBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkMsdUJBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsdUJBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0MsdUJBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekMsd0JBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDOztBQUVoQix3QkFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1osNEJBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDckIsNEJBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO3FCQUNyQjtpQkFDSjs7QUFFRCwwQkFBVSxFQUFFLG9CQUFVLE1BQU0sRUFBRTtBQUMxQix3QkFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyRCx3QkFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4Qyx1QkFBRyxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkMsdUJBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUMxQix1QkFBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDOztBQUUzQix3QkFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtBQUN4Qiw0QkFBSSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRCxxQ0FBYSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDaEMscUNBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztBQUMxQyxxQ0FBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLHFDQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDNUIscUNBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUNwQyxxQ0FBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLHFDQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7QUFDaEQscUNBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzs7QUFFcEMsMkJBQUcsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDL0IsMkJBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUNoQywyQkFBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO0FBQ2hDLDJCQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7cUJBQ2pDOztBQUVELDJCQUFPLEdBQUcsQ0FBQztpQkFDZDs7Ozs7QUFLRCx5Q0FBeUIsRUFBRSxtQ0FBVSxHQUFHLEVBQUU7OztBQUN0Qyx3QkFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksR0FBRyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixLQUFLLEtBQUssRUFBRTs7QUFDcEcsZ0NBQUksS0FBSyxTQUFPLENBQUM7QUFDakIsZ0NBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDNUMsZ0NBQUksT0FBTyxFQUFFO0FBQ1QsbUNBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7NkJBQ2pDOzs7QUFHRCw2QkFBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsY0FBYyxHQUFHLFVBQVMsQ0FBQyxFQUFFOzs7QUFHcEYsb0NBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0Msb0NBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxvQ0FBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BCLGlDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDdEIsQ0FBQzs7QUFFRiw2QkFBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsWUFBWSxHQUFHLFlBQVk7QUFDaEYsb0NBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJO29DQUNmLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTTtvQ0FDbkIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7QUFFekIsbUNBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7O0FBR1gscUNBQUssSUFBSSxFQUFFLENBQUM7O0FBRVoscUNBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMscUNBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7O0FBRTVDLG9DQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNoQixvQ0FBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O0FBRXZCLG9DQUFJLENBQUMsS0FBSyxFQUFFO0FBQUUsMkNBQU87aUNBQUU7O0FBRXZCLG9DQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLFFBQVEsRUFBRTtBQUMxQyx1Q0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7aUNBQzdCLE1BQU07QUFDSCx1Q0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztpQ0FDdkQ7O0FBRUQscUNBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDOzZCQUM3QixDQUFDOztBQUVGLGdDQUFJLE9BQU8sRUFBRTtBQUNULG1DQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDOzZCQUNoQzs7cUJBQ0o7aUJBQ0o7O0FBRUQsMEJBQVUsRUFBRSxzQkFBWTtBQUNwQix3QkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNqQyx3QkFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxpQkFBSSxxQkFBcUIsQ0FBQyxDQUFDO0FBQy9GLHdCQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2pDOztBQUVELDBCQUFVLEVBQUUsc0JBQVk7QUFDcEIsd0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0Isd0JBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN4Qzs7QUFFRCxtQ0FBbUIsRUFBRSwrQkFBWTtBQUM3Qix3QkFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO0FBQ3RDLCtCQUFPO3FCQUNWO0FBQ0Qsd0JBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDOUIsd0JBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDdEgsd0JBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3hCLHdCQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO2lCQUNsQzs7QUFFRCxzQkFBTSxFQUFFLGtCQUFZO0FBQ2hCLHdCQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNiLCtCQUFPO3FCQUNWO0FBQ0Qsd0JBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQ3ZCOzs7O0FBSUQsZ0NBQWdCLEVBQUUsNEJBQVk7QUFDMUIsd0JBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO0FBQ3BELCtCQUFPO3FCQUNWOztBQUVELHdCQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQscUJBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUN6RDs7O0FBR0QsMkNBQTJCLEVBQUUscUNBQVUsR0FBRyxFQUFFOzs7QUFDeEMsd0JBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7O0FBRTVCLHdCQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxVQUFDLEtBQUssRUFBSztBQUMxQiw0QkFBSSxPQUFPLE9BQUssaUJBQWlCLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtBQUNwRCxtQ0FBSyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FDekMsSUFBSSxDQUFDLFVBQUEsU0FBUyxFQUFJO0FBQ2Qsb0NBQUksT0FBTyxHQUFHLGVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLHVDQUFLLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzs2QkFDekMsQ0FBQyxDQUFDO3lCQUNWO3FCQUNKLENBQUM7QUFDRix1QkFBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFbEMsd0JBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFVBQUMsS0FBSyxFQUFLO0FBQzlCLDRCQUFJLE9BQU8sT0FBSyxpQkFBaUIsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO0FBQ3BELG1DQUFLLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUN6QyxJQUFJLENBQUMsVUFBQSxTQUFTLEVBQUk7QUFDZCxvQ0FBSSxPQUFPLEdBQUcsZUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDckUsdUNBQUssaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDOzZCQUN6QyxDQUFDLENBQUM7eUJBQ1Y7cUJBQ0osQ0FBQztBQUNGLHVCQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDOztBQUUxQyx3QkFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBQyxLQUFLLEVBQUs7O0FBRTdCLDRCQUFJLE9BQU8sT0FBSyxpQkFBaUIsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO0FBQ3BELG1DQUFLLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7eUJBQ3pFO3FCQUNKLENBQUM7QUFDRix1QkFBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDM0M7Ozs7O0FBS0Qsa0NBQWtCLEVBQUUsNEJBQVUsTUFBTSxFQUFFO0FBQ2xDLHdCQUFJLENBQUMsaUJBQWlCLEdBQUcsZUFBYyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQzFFOzthQUVKLENBQUMsQ0FBQzs7O0FBR0gsb0JBdFZHLFlBQVksR0FzVmYsWUFBWSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs7O0FBR3ZELGdCQUFJLE9BQU8sWUFBWSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDM0MsNEJBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFlBQVc7QUFDdkMsd0JBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNYLDRCQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDL0I7QUFDRCx3QkFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDdkIsQ0FBQzthQUNMOztBQUVELHdCQUFZLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUM3Qyx3QkFBWSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7O0FBRTdDO21CQUFPLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQztjQUFDOzs7O0tBQ3BDO0NBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dDQzVXeUIscUJBQXFCOzs7O2dDQUNyQixxQkFBcUI7Ozs7OztzQkFDOUIsV0FBVzs7OzttQkFDWixPQUFPOzs7O2tDQUNHLHVCQUF1Qjs7OztJQUc1QixLQUFLO0FBRVYsYUFGSyxLQUFLLENBRVQsSUFBSSxFQUFFLE1BQU0sRUFBRTs4QkFGVixLQUFLOztBQUdsQixZQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDeEIsWUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7O0FBRWpCLFlBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxNQUFNLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRTtBQUM5RCxnQkFBSSxDQUFDLE9BQU8sR0FBRyxvQkFBSyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN2RCxNQUNJO0FBQ0QsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsZ0NBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN6RDs7QUFFRCxZQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUU7QUFDOUQsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsb0JBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDL0UsTUFDSTtBQUNELGdCQUFJLENBQUMsT0FBTyxHQUFHLGdDQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDekQ7O0FBRUQsWUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO0FBQ2hFLGdCQUFJLENBQUMsUUFBUSxHQUFHLG9CQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3pELE1BQ0k7QUFDRCxnQkFBSSxDQUFDLFFBQVEsR0FBRyxnQ0FBWSxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNEO0tBQ0o7Ozs7O2lCQTFCZ0IsS0FBSzs7OztlQW1JZixrQkFBRztBQUNOLGdCQUFJLFFBQVEsOEJBQ0UsSUFBSSxDQUFDLFdBQVcsV0FBTSxJQUFJLENBQUMsSUFBSSx1QkFDdkMsSUFBSSxDQUFDLFdBQVcsU0FBSSxJQUFJLENBQUMsSUFBSSxvQkFDOUIsQ0FBQztBQUNOLGdCQUFJLE1BQU0sc0JBQ0osSUFBSSxDQUFDLElBQUksYUFBUSxJQUFJLENBQUMsSUFBSSxrQkFDL0IsQ0FBQzs7QUFFRiwwQ0FBYyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5QywwQ0FBYyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzNDOzs7OztlQUdNLGtCQUFHLEVBQ1Q7Ozs7OztlQUlZLHNCQUFDLFFBQVEsRUFBRTs7QUFFcEIsb0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFPLElBQUksQ0FBQyxJQUFJLGVBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hFLG9CQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBTyxJQUFJLENBQUMsSUFBSSxlQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRSxvQkFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQU8sSUFBSSxDQUFDLElBQUksZ0JBQWEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3JFOzs7ZUE3SGEsZ0JBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUN6QixnQkFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMxQix1QkFBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNyRDtTQUNKOzs7OztlQUdjLGlCQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDekIsZ0JBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUNmLG9CQUFJLEdBQUcsVUFBVSxDQUFDO2FBQ3JCO0FBQ0QsZ0JBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxLQUFLLEFBQUMsSUFBSSxJQUFJLElBQUksR0FBSSxJQUFJLEdBQUcsVUFBVSxDQUFBLEFBQUMsQ0FBQztBQUM3RCxpQkFBSyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxHQUFJLElBQUksS0FBSyxVQUFVLEFBQUMsQ0FBQztBQUNuRSxpQkFBSyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxHQUFJLElBQUksS0FBSyxRQUFRLEFBQUMsQ0FBQztTQUNsRTs7Ozs7ZUFHYSxnQkFBQyxNQUFNLEVBQUU7O0FBRW5CLDBDQUFjLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7OztBQUd2QyxnQkFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7QUFDaEIsdUJBQU87YUFDVjs7O0FBR0QsZ0JBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUN6QixnQkFBSSxNQUFNLElBQUksYUFBWSxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOztBQUUxQyxvQkFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2YscUJBQUssSUFBSSxVQUFVLElBQUksTUFBTSxFQUFFO0FBQzNCLHlCQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDekM7OztBQUdELHFCQUFLLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTtBQUNwQix5QkFBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDOUI7OztBQUdELHFCQUFLLElBQUksVUFBVSxJQUFJLE1BQU0sRUFBRTs7QUFFM0IsMEJBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7O0FBRzVCLG1DQUFlLHdCQUFzQixVQUFVLCtCQUE0QixDQUFDO2lCQUMvRTthQUNKLE1BQ0k7O0FBRUQsK0JBQWUsdUpBSWQsQ0FBQzthQUNMOzs7QUFHRCxnQkFBSSxpQkFBaUIsMldBT1gsZUFBZSx1Z0NBNkJuQixDQUFDOztBQUVQLDBDQUFjLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7U0FDMUQ7OztXQWhJZ0IsS0FBSzs7O3FCQUFMLEtBQUs7O0FBK0oxQixLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNqQixLQUFLLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztBQUN6QixLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzs7OztJQUlmLFlBQVk7Y0FBWixZQUFZOztBQUVILGFBRlQsWUFBWSxDQUVGLElBQUksRUFBRSxNQUFNLEVBQUU7OEJBRnhCLFlBQVk7O0FBR1YsbUNBSEYsWUFBWSw2Q0FHSixJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3BCLFlBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQ3RCLFlBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDO0tBQ3JDOzs7O2lCQU5DLFlBQVk7O2VBYUQsc0JBQUMsUUFBUSxFQUFFO0FBQ3BCLG9CQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBTyxJQUFJLENBQUMsSUFBSSxlQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNuRTs7O2VBTlksa0JBQUc7QUFDWiwwQ0FBYyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSw4QkFBYyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7U0FDakY7OztXQVhDLFlBQVk7R0FBUyxLQUFLOztBQWtCaEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxZQUFZLENBQUM7O0lBRWhDLGdCQUFnQjtjQUFoQixnQkFBZ0I7O0FBRVAsYUFGVCxnQkFBZ0IsQ0FFTixJQUFJLEVBQUUsTUFBTSxFQUFFOzhCQUZ4QixnQkFBZ0I7O0FBR2QsbUNBSEYsZ0JBQWdCLDZDQUdSLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDcEIsWUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7QUFDMUIsWUFBSSxDQUFDLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQzs7QUFFdEMsWUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUEsQ0FBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDM0U7Ozs7aUJBUkMsZ0JBQWdCOztlQWVMLHNCQUFDLFFBQVEsRUFBRTtBQUNwQix1Q0FoQkYsZ0JBQWdCLDhDQWdCSyxRQUFRLEVBQUU7QUFDN0Isb0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFPLElBQUksQ0FBQyxJQUFJLGlCQUFjLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN2RTs7O2VBUFksa0JBQUc7QUFDWiwwQ0FBYyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSw4QkFBYyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7U0FDckY7OztXQWJDLGdCQUFnQjtHQUFTLEtBQUs7O0FBcUJwQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLGdCQUFnQixDQUFDOztJQUd4QyxVQUFVO2NBQVYsVUFBVTs7QUFFQSxhQUZWLFVBQVUsQ0FFQyxJQUFJLEVBQUUsTUFBTSxFQUFFOzhCQUZ6QixVQUFVOztBQUdSLG1DQUhGLFVBQVUsNkNBR0YsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUNwQixZQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUNwQixZQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQzs7QUFFaEMsWUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuRCxZQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN2QixZQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDO0FBQ3hDLFlBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUUvRixZQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDZixnQkFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDNUQsb0JBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUMvQixNQUNJO0FBQ0Qsb0JBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0osTUFDSTtBQUNELGdCQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKOzs7O2lCQXZCQyxVQUFVOzs7O2VBK0JOLGtCQUFHO0FBQ0wsdUNBaENGLFVBQVUsd0NBZ0NPOztBQUVmLDBDQUFjLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxHQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssQ0FBQyxBQUFDLENBQUM7QUFDNUYsMENBQWMsT0FBTyxDQUFDLDZDQUE2QyxDQUFDLEdBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEFBQUMsQ0FBQztBQUN2SCwwQ0FBYyxPQUFPLENBQUMsNkNBQTZDLENBQUMsR0FBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQUFBQyxDQUFDO1NBQ2hHOzs7ZUFFTSxrQkFBRztBQUNOLGdCQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1Qjs7O2VBRWlCLDZCQUFHO0FBQ2pCLGdCQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFOzs7MENBSVosaUJBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7b0JBQXpDLENBQUM7b0JBQUUsQ0FBQzs7QUFDVCxvQkFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELG9CQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRS9ELG9CQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLGdDQUFZLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUM1RCxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxpQkFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEYsb0JBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckY7QUFDRCxnQkFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTs7OztBQUl0RCxvQkFBSSxDQUFDLFlBQVksR0FBRyxnQ0FBWSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFDdEQsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztBQUVwRixvQkFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTs7QUFFMUIsd0JBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3JGO2FBQ0o7U0FDSjs7O2VBRVksc0JBQUMsUUFBUSxFQUFFO0FBQ3BCLHVDQXZFRixVQUFVLDhDQXVFVyxRQUFRLEVBQUU7O0FBRTdCLG9CQUFRLENBQUMsT0FBTyxDQUFDLElBQUksU0FBTyxJQUFJLENBQUMsSUFBSSxnQkFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0FBRXpFLGdCQUFHLDhCQUFjLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxFQUFFO0FBQ2pFLHdCQUFRLENBQUMsT0FBTyxDQUFDLElBQUksU0FBTyxJQUFJLENBQUMsSUFBSSwyQkFBd0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2xGOztBQUVELGdCQUFHLDhCQUFjLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFFO0FBQ3JFLHdCQUFRLENBQUMsT0FBTyxDQUFDLElBQUksU0FBTyxJQUFJLENBQUMsSUFBSSxtQkFDakMsZ0NBQVksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ25DLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLGlCQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzVGOztBQUVELGdCQUFHLDhCQUFjLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFFO0FBQ3JFLHdCQUFRLENBQUMsT0FBTyxDQUFDLElBQUksU0FBTyxJQUFJLENBQUMsSUFBSSxtQkFDakMsZ0NBQVksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ25DLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLGlCQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzVGO1NBQ0o7OztlQWpFYSxrQkFBRztBQUNiLDBDQUFjLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLDhCQUFjLHVCQUF1QixDQUFDLENBQUMsQ0FBQztTQUMvRTs7O1dBNUJDLFVBQVU7R0FBUyxLQUFLOztBQTZGOUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxVQUFVLENBQUM7O0lBRzVCLFNBQVM7Y0FBVCxTQUFTOztBQUVDLGFBRlYsU0FBUyxDQUVFLElBQUksRUFBRSxNQUFNLEVBQUU7OEJBRnpCLFNBQVM7O0FBR1AsbUNBSEYsU0FBUyw2Q0FHRCxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3BCLFlBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFlBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDOztBQUUvQixZQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNsRSxZQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEUsWUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0tBQzdEOzs7O2lCQVZDLFNBQVM7O2VBaUJFLHNCQUFDLFFBQVEsRUFBRTtBQUNwQix1Q0FsQkYsU0FBUyw4Q0FrQlksUUFBUSxFQUFFOztBQUU3QixvQkFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQU8sSUFBSSxDQUFDLElBQUksaUJBQWMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BFLG9CQUFRLENBQUMsT0FBTyxDQUFDLElBQUksU0FBTyxJQUFJLENBQUMsSUFBSSxxQkFBa0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdGLG9CQUFRLENBQUMsT0FBTyxDQUFDLElBQUksU0FBTyxJQUFJLENBQUMsSUFBSSxvQkFBaUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3hFOzs7ZUFWYSxrQkFBRztBQUNiLDBDQUFjLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLDhCQUFjLHNCQUFzQixDQUFDLENBQUMsQ0FBQztTQUM5RTs7O1dBZkMsU0FBUztHQUFTLFVBQVU7O0FBMEJsQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0NDbFZYLHFCQUFxQjs7Ozs7O3NCQUM5QixXQUFXOzs7O2tDQUNGLHVCQUF1Qjs7SUFFNUIsUUFBUTtBQUNiLGFBREssUUFBUSxDQUNaLE1BQU0sRUFBRTs4QkFESixRQUFROztBQUdyQixjQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQzs7O21CQUdMLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDO0FBQS9ELGlEQUFpRTtBQUE1RCxnQkFBSSxJQUFJLFdBQUEsQ0FBQTtBQUNULGdCQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDdEIsb0JBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUN0Qix3QkFBSSxDQUFDLElBQUksQ0FBQyxHQUFHO0FBQ1QsK0JBQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTztBQUM3QiwrQkFBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksV0FBVztBQUM1Qyw2QkFBSyxFQUFFLG9CQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUMzRSw4QkFBTSxFQUFFLG9CQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztxQkFDakYsQ0FBQztpQkFDTCxNQUNJLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3ZDLHdCQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsb0JBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQzFELE1BQ0ksSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDdkMsd0JBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxnQ0FBWSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDakUsTUFDSTtBQUNELHdCQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM3QjthQUNKO1NBQ0o7OztBQUdELFlBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNmLGdCQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQ25GOzs7QUFHRCxZQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3ZCLGdCQUFJLENBQUMsTUFBTSxHQUFHO0FBQ1YsdUJBQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU87QUFDOUIsdUJBQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxXQUFXO0FBQzdDLHFCQUFLLEVBQUUsb0JBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDN0Usc0JBQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQzthQUNsRSxDQUFDO1NBQ0w7S0FDSjs7OztpQkExQ2dCLFFBQVE7O2VBNERsQixnQkFBQyxLQUFLLEVBQUU7Ozs7Ozt3QkFNTSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQztBQUEvRCx5REFBaUU7QUFBNUQsb0JBQUksSUFBSSxhQUFBLENBQUE7QUFDVCxvQkFBSSxHQUFHLHlCQUF1QixJQUFJLENBQUMsV0FBVyxFQUFFLEFBQUUsQ0FBQztBQUNuRCxvQkFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLFVBQVUsQ0FBQztBQUM5QixxQkFBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxBQUFDLENBQUM7QUFDMUMsb0JBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDbEMseUJBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdCLHlCQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0RSx5QkFBSyxDQUFDLE9BQU8sK0JBQTZCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUcsR0FBRyxJQUFJLENBQUM7QUFDckYseUJBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQUFBQyxDQUFDO2lCQUN0RTthQUNKOzs7OztBQUtELGdCQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7QUFDcEMscUJBQUssQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEQscUJBQUssQ0FBQyxPQUFPLENBQUMsa0NBQWtDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0YscUJBQUssQ0FBQyxPQUFPLCtCQUE2QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBRyxHQUFHLElBQUksQ0FBQztBQUN0RixxQkFBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLElBQUksQUFBQyxDQUFDO2FBQ3ZFOztBQUVELGlCQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSw4QkFBYyxxQkFBcUIsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzNGLGlCQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUMzRTs7O2VBRVksc0JBQUMsUUFBUSxFQUFFOzs7d0JBR0gsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUM7QUFBL0QseURBQWlFO0FBQTVELG9CQUFJLElBQUksYUFBQSxDQUFBO0FBQ1Qsb0JBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ1osd0JBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUNwQixnQ0FBUSxDQUFDLGlCQUFpQixpQkFBZSxJQUFJLGVBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdFLGdDQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssa0JBQWdCLElBQUksWUFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckUsZ0NBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxrQkFBZ0IsSUFBSSxFQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDcEUsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsZ0NBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxrQkFBZ0IsSUFBSSxFQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDcEU7aUJBQ0o7YUFDSjs7O0FBR0QsZ0JBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNmLHdCQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzNFOzs7QUFHRCxnQkFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO0FBQ3BDLHdCQUFRLENBQUMsaUJBQWlCLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3RSx3QkFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRSx3QkFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN6RTtTQUNKOzs7ZUF6RWMsaUJBQUMsTUFBTSxFQUFFO0FBQ3BCLGdCQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDaEIsdUJBQU8sS0FBSyxDQUFDO2FBQ2hCOztBQUVELGdCQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxJQUN2QixNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksSUFDdEIsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQ3RCLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO0FBQ3pCLHVCQUFPLEtBQUssQ0FBQzthQUNoQjs7QUFFRCxtQkFBTyxJQUFJLENBQUM7U0FDZjs7O1dBMURnQixRQUFROzs7cUJBQVIsUUFBUTs7QUF5SDdCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDOzs7Ozs7Ozs7OzswQkMxSFYsZUFBZTs7Ozs7OzZCQUdOLGlCQUFpQjs7OztxQkFHMUIsU0FBUzs7Ozs0QkFDRCxnQkFBZ0I7Ozs7NEJBR3RCLGlCQUFpQjs7Ozt3QkFDckIsVUFBVTs7OzttQkFDVixPQUFPOzs7O2tDQUNBLHVCQUF1Qjs7OztRQUN2QyxtQkFBbUI7O1FBQ25CLG9CQUFvQjs7UUFDcEIsZUFBZTs7UUFDZixrQkFBa0I7OzRCQUNELGdCQUFnQjs7OztzQkFDdkIsV0FBVzs7OztnQ0FDRixxQkFBcUI7Ozs7NkJBQ3hCLGtCQUFrQjs7Ozt5QkFDckIsY0FBYzs7Ozt3QkFDYixZQUFZOzs7O3FCQUNmLFNBQVM7Ozs7a0NBQ0YsdUJBQXVCOzs7OzBCQUN4QixlQUFlOzttQ0FDWix3QkFBd0I7O2tDQUN6Qix1QkFBdUI7OytCQUMzQixvQkFBb0I7Ozs7eUJBQ2IsYUFBYTs7OztzQkFFekIsU0FBUzs7Ozs7QUFHMUIsSUFBSSxLQUFLLEdBQUc7QUFDUixPQUFHLHVCQUFBO0FBQ0gsUUFBSSxxQkFBQTtBQUNKLFNBQUsseUJBQUE7QUFDTCxPQUFHLGtCQUFBO0FBQ0gsY0FBVSxpQ0FBQTtBQUNWLGVBQVcsMkJBQUE7QUFDWCxRQUFJLHFCQUFBO0FBQ0osaUJBQWEsK0JBQUE7QUFDYixjQUFVLDRCQUFBO0FBQ1YsV0FBTyx3QkFBQTtBQUNQLFlBQVEsdUJBQUE7QUFDUixTQUFLLG9CQUFBO0FBQ0wsU0FBSyxvQkFBQTtBQUNMLGVBQVcsMkJBQUE7QUFDWCxnQkFBWSxpQ0FBQTtBQUNaLGFBQVMsdUJBQUE7QUFDVCxnQkFBWSxtQ0FBQTtBQUNaLGVBQVcsaUNBQUE7QUFDWCxhQUFTLDhCQUFBO0FBQ1Qsb0JBQWdCLHdCQUFBO0NBQ25CLENBQUM7OztBQUdGLElBQUksd0JBQU0sWUFBWSxFQUFFOztBQUVwQixVQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUc7QUFDOUIsb0JBQVksNkJBQUE7QUFDWixhQUFLLEVBQUwsS0FBSztBQUNMLGVBQU8sRUFBRSwwQkFBUSxNQUFNO0tBQzFCLENBQUM7Q0FFTDs7QUFFRCxJQUFJLHdCQUFNLGNBQWMsRUFBRTtBQUN0QixRQUFJLENBQUMsT0FBTyxHQUFHO0FBQ1gsYUFBSyxFQUFMLEtBQUs7QUFDTCxlQUFPLEVBQUUsMEJBQVEsTUFBTTtLQUMxQixDQUFDO0NBQ0w7O0FBRUQsSUFBSSx3QkFBTSxZQUFZLEVBQUU7QUFDcEIsNEJBQU0sNkJBQTZCLEVBQUUsQ0FBQztDQUN6Qzs7O0FBR0QsSUFBSSxlQUFlLEdBQUcsc0JBQUksYUFBYSxDQUFDO0FBQ3hDLHNCQUFJLGFBQWEsR0FBRyxVQUFVLFVBQVUsRUFBRSxRQUFRLEVBQUU7QUFDaEQsUUFBSSxTQUFTLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN0RCxXQUFPLFlBQXNCOzBDQUFULE9BQU87QUFBUCxtQkFBTzs7O0FBQ3ZCLGlCQUFTLGdDQUFZLDBCQUFRLE1BQU0sZUFBUSxPQUFPLEVBQUMsQ0FBQztLQUN2RCxDQUFDO0NBQ0wsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQzFGZ0IsZUFBZTs7OztrQ0FDUix1QkFBdUI7Ozs7OEJBQ3JCLG1CQUFtQjs7Ozt5QkFDMUIsY0FBYzs7Ozt5QkFDZCxjQUFjOzs7O3FCQUNKLFVBQVU7Ozs7MkJBQ3BCLGdCQUFnQjs7bUNBQ1Qsd0JBQXdCOztrQ0FDekIsdUJBQXVCOzs0QkFDekIsZ0JBQWdCOzs7O29CQUN2QixRQUFROzs7O3FCQUNQLFNBQVM7Ozs7NEJBQ0gsZ0JBQWdCOzs7O2tDQUNqQix1QkFBdUI7Ozs7eUJBQ2pCLGFBQWE7Ozs7OEJBQ2xCLG1CQUFtQjs7Ozt3QkFFM0IsVUFBVTs7OztzQ0FFSCw0QkFBNEI7O2dDQUMvQixzQkFBc0I7O2tDQUNyQix3QkFBd0I7OzhCQUNyQixvQkFBb0I7O2tDQUNsQix3QkFBd0I7OztBQUdsRCxrQ0FBYSxRQUFRLGtDQUFVLENBQUM7QUFDaEMsa0NBQWEsUUFBUSx5QkFBTyxDQUFDO0FBQzdCLGtDQUFhLFFBQVEsNEJBQVEsQ0FBQztBQUM5QixrQ0FBYSxRQUFRLDJCQUFXLENBQUM7QUFDakMsa0NBQWEsUUFBUSxpQ0FBYSxDQUFDOzs7O0lBR2QsS0FBSztBQUVYLGFBRk0sS0FBSyxDQUVWLGFBQWEsRUFBRSxPQUFPLEVBQUU7Ozs4QkFGbkIsS0FBSzs7QUFHbEIsZUFBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDeEIseUNBQWUsSUFBSSxDQUFDLENBQUM7O0FBRXJCLFlBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDOztBQUVsQixZQUFJLENBQUMsSUFBSSxHQUFHLHNCQUFTLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNwQyxZQUFJLENBQUMsWUFBWSw0QkFBYyxDQUFDO0FBQ2hDLFlBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDekQsWUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQztBQUMzQyxZQUFJLENBQUMsMEJBQTBCLEdBQUksT0FBTyxDQUFDLHVCQUF1QixLQUFLLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxBQUFDLENBQUM7QUFDN0YsWUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ3BDLFlBQUksT0FBTyxDQUFDLHlCQUF5QixLQUFLLElBQUksRUFBRTtBQUM1QywrQkFBa0IsUUFBUSxHQUFHLElBQUksQ0FBQztTQUNyQzs7QUFFRCxnQ0FBTSx3QkFBd0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLEtBQUssU0FBUyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDOUcsZ0NBQU0sc0JBQXNCLEVBQUUsQ0FBQzs7QUFFL0IsWUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbkIsWUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDbkMsWUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUM5QixZQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDOztBQUVyQyxZQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQixZQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQzs7QUFFeEIsWUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDckIsWUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEIsWUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDdEIsWUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ25DLFlBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUNyQyxZQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0FBQzlDLFlBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFDaEMsWUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUM5QixZQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN0QixZQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLFlBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7QUFDbEMsWUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZixZQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFlBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLFlBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7QUFFakIsWUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDOztBQUVuQyxZQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQixZQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzs7O0FBR3ZCLFlBQUksQ0FBQyxTQUFTLEdBQUc7QUFDYixnQkFBSSxFQUFFO0FBQ0Ysb0JBQUksRUFBRTsyQkFBTSxNQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUM7aUJBQUE7YUFDbkM7U0FDSixDQUFDO0FBQ0YsWUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFekMsWUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbEIsWUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDcEIsWUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQztBQUNsQyxZQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7O0FBRWxCLFlBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUM7QUFDM0MsOEJBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUMvQjs7aUJBbkVnQixLQUFLOzs7OztlQTJFbEIsZ0JBQTJDOzs7Z0JBQTFDLGFBQWEseURBQUcsSUFBSTtnQkFBRSxXQUFXLHlEQUFHLElBQUk7O0FBQ3pDLGdCQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDbkIsdUJBQU8sSUFBSSxDQUFDLFlBQVksQ0FBQzthQUM1Qjs7QUFFRCxnQkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hCLGdCQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzs7O0FBR3pCLGdCQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUN6RCxJQUFJLENBQUM7dUJBQU0sT0FBSyxhQUFhLEVBQUU7YUFBQSxDQUFDLENBQ2hDLElBQUksQ0FBQyxZQUFNO0FBQ1IsdUJBQUssWUFBWSxFQUFFLENBQUM7QUFDcEIsdUJBQUsscUJBQXFCLEVBQUUsQ0FBQzs7QUFFN0Isb0JBQUksQ0FBQyxPQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQUU7QUFDekIsMkJBQUssU0FBUyxDQUFDLE9BQU8sR0FBRztBQUNyQiw4QkFBTSxFQUFFO21DQUFNLE9BQUssS0FBSyxHQUFHLElBQUk7eUJBQUE7QUFDL0IsK0JBQU8sRUFBRSxpQkFBQyxJQUFJO21DQUFLLE9BQUssT0FBTyxDQUFDLFNBQVMsRUFBRSxlQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO3lCQUFBO3FCQUN4RixDQUFDO0FBQ0YsMkNBQVEsU0FBUyxDQUFDLE9BQUssU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM3Qzs7O0FBR0QsdUJBQUssWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDeEMsdUJBQU8sT0FBSyxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQU07QUFDVix1QkFBSyxRQUFRLEVBQUUsQ0FBQztBQUNoQix1QkFBSyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLHVCQUFLLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDeEIsdUJBQUssd0JBQXdCLEdBQUcsT0FBSyxhQUFhLENBQUM7QUFDbkQsdUJBQUssc0JBQXNCLEdBQUcsT0FBSyxXQUFXLENBQUM7O0FBRS9DLG9CQUFJLE9BQUssV0FBVyxLQUFLLEtBQUssRUFBRTtBQUM1QiwyQkFBSyxlQUFlLEVBQUUsQ0FBQztpQkFDMUI7QUFDRCx1QkFBSyxhQUFhLEVBQUUsQ0FBQzthQUM1QixDQUFDLFNBQU0sQ0FBQyxVQUFBLEtBQUssRUFBSTtBQUNkLHVCQUFLLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDekIsdUJBQUssUUFBUSxHQUFHLENBQUMsQ0FBQzs7O0FBR2xCLG9CQUFJLElBQUksWUFBQTtvQkFBRSxPQUFPLFlBQUEsQ0FBQztBQUNsQixvQkFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGVBQWUsRUFBRTtBQUNoQyx3QkFBSSxHQUFHLE1BQU0sQ0FBQztBQUNkLDJCQUFPLEdBQUcsMEJBQTBCLENBQUM7aUJBQ3hDLE1BQ0k7O0FBRUQsMkJBQU8sR0FBRywwQkFBMEIsQ0FBQztpQkFDeEM7QUFDRCx1QkFBSyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFKLElBQUksRUFBRSxPQUFPLEVBQVAsT0FBTyxFQUFFLEtBQUssRUFBTCxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQUssYUFBYSxFQUFFLENBQUMsQ0FBQzs7QUFFekUsdUJBQU8sb0NBQWtDLE9BQUssYUFBYSxVQUFLLEtBQUssQ0FBQyxPQUFPLEFBQUUsQ0FBQztBQUNoRixvQkFBSSxPQUFLLHdCQUF3QixFQUFFO0FBQy9CLDBDQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekIsMENBQUksSUFBSSxzREFBc0QsQ0FBQztBQUMvRCwyQkFBTyxPQUFLLElBQUksQ0FBQyxPQUFLLHdCQUF3QixFQUFFLE9BQUssc0JBQXNCLENBQUMsQ0FBQztpQkFDaEY7QUFDRCxzQ0FBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFCLHNCQUFNLEtBQUssQ0FBQzthQUNmLENBQUMsQ0FBQzs7QUFFSCxtQkFBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzVCOzs7OztlQUdLLGtCQUEyQztnQkFBMUMsYUFBYSx5REFBRyxJQUFJO2dCQUFFLFdBQVcseURBQUcsSUFBSTs7QUFDM0MsbUJBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDaEQ7OztlQUVNLG1CQUFHO0FBQ04sZ0JBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLGdCQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDOztBQUU3QixnQkFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDOztBQUV0QixnQkFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxtQ0FBUSxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1QyxnQkFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7O0FBRXRCLGdCQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7QUFDdkMsb0JBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsb0JBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2FBQ3RCO0FBQ0QsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDOztBQUV0QixnQkFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hCLG9CQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQzVCOztBQUVELGdCQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDVCx1Q0FBUSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLGtEQUFhLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUIsb0JBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDOztBQUVqQixvQkFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7YUFDbEI7O0FBRUQsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDOztBQUVsQixnQkFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUM3QixvQkFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBQyxNQUFNLEVBQUs7QUFDN0IsMEJBQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztpQkFDdEIsQ0FBQyxDQUFDO0FBQ0gsb0JBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2FBQ3ZCOztBQUVELGdCQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQy9COzs7ZUFFVyx3QkFBRztBQUNYLGdCQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDYix1QkFBTzthQUNWOztBQUVELGdCQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztBQUNqRCxnQkFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLGdCQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQ3hDLGdCQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLGdCQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDOzs7QUFHM0IsZ0JBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxhQUFhLENBQUM7QUFDckQsZ0JBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFFeEMsZ0JBQUk7QUFDQSxvQkFBSSxDQUFDLEVBQUUsR0FBRyx1QkFBUSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN0Qyx5QkFBSyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJO0FBQ3JDLHNDQUFrQixFQUFFLHdCQUFNLGtCQUFrQjtpQkFDL0MsQ0FBQyxDQUFDO2FBQ04sQ0FDRCxPQUFNLENBQUMsRUFBRTtBQUNMLHNCQUFNLElBQUksS0FBSyxDQUNYLGlDQUFpQyxHQUNqQywwREFBMEQsR0FDMUQsOENBQThDLENBQ2pELENBQUM7YUFDTDs7QUFFRCxnQkFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3hFLCtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDLHdDQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkM7Ozs7O2VBR1csd0JBQUc7QUFDWCxnQkFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSx3QkFBTSxjQUFjLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzs7QUFFL0YsZ0JBQUksQ0FBQyxVQUFVLEVBQUU7QUFDYixzQkFBTSxJQUFJLEtBQUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO2FBQ3BHOztBQUVELGdCQUFJLElBQUksQ0FBQywwQkFBMEIsRUFBRTtBQUNqQyxvQkFBSSxJQUFJLHdCQUFxQixVQUFVLFNBQUssQ0FBQztBQUM3Qyx1QkFBTyx3QkFBTSxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN0RjtBQUNELG1CQUFPLFVBQVUsQ0FBQztTQUNyQjs7Ozs7ZUFHWSx5QkFBRztBQUNaLGdCQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNmLHVCQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7YUFDaEQ7QUFDRCxtQkFBTyxTQUFRLE9BQU8sRUFBRSxDQUFDO1NBQzVCOzs7OztlQUdVLHFCQUFDLEdBQUcsRUFBRTs7O0FBQ2IsZ0JBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs7QUFFZixnQkFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7OztBQUVWLHNCQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDOztBQUM1Qix1QkFBSyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDOztBQUUxQixzQkFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFLLGdCQUFnQixDQUFDLElBQUksUUFBTSxDQUFDLENBQUM7QUFDckUsZ0RBQWEsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUUvQixzQ0FBSSxLQUFLLDZDQUEyQyxFQUFFLENBQUcsQ0FBQztBQUMxRCxvQkFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2IscUJBQUssQ0FBQyxJQUFJLENBQUMsZ0NBQWEsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE9BQUssV0FBVyxFQUFFLHdCQUFNLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUN6RyxVQUFDLEVBQUUsRUFBSztBQUNKLDBDQUFJLEtBQUssNENBQTBDLEVBQUUsQ0FBRyxDQUFDO0FBQ3pELDJCQUFPLEVBQUUsQ0FBQztpQkFDYixFQUNELFVBQUMsS0FBSyxFQUFLO0FBQ1AsMENBQUksS0FBSyxxREFBbUQsR0FBRyxRQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzNFLDJCQUFPLFNBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNoQyxDQUFDLENBQ0wsQ0FBQzs7O0FBbEJOLGlCQUFLLElBQUksRUFBRSxHQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRTtvQkFDcEMsTUFBTTs7O2FBa0JiOztBQUVELGdCQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNyQixtQkFBTyxTQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3Qjs7Ozs7ZUFHUyxzQkFBRztBQUNULGdCQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM1QyxnQkFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFBLEdBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDaEUsbUJBQU8sTUFBTSxDQUFDO1NBQ2pCOzs7OztlQUdJLGlCQUFHO0FBQ0osZ0JBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLGFBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDN0QsdUJBQU8sS0FBSyxDQUFDO2FBQ2pCO0FBQ0QsbUJBQU8sSUFBSSxDQUFDO1NBQ2Y7Ozs7O2VBR3NCLGtDQUFHOzs7QUFDdEIsZ0JBQUksd0JBQU0sc0JBQXNCLEVBQUUsRUFBRTtBQUNoQyxnREFBYSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSx3QkFBTSxrQkFBa0IsQ0FBQyxDQUMxRixJQUFJLENBQUM7MkJBQU0sT0FBSyxPQUFPLEVBQUU7aUJBQUEsQ0FBQyxDQUMxQixJQUFJLENBQUM7MkJBQU0sT0FBSyxTQUFTLENBQUMsT0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7aUJBQUEsQ0FBQyxDQUFDO2FBQ3hGO1NBQ0o7OztlQUVRLG1CQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDckIsZ0JBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLGdCQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekMsZ0JBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNULHVDQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsd0JBQU0sa0JBQWtCLENBQUMsQ0FBQzthQUNwRTtTQUNKOzs7OztlQUdZLHlCQUFHO0FBQ1osZ0JBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ3JCOzs7Ozs7O2VBS2MsMkJBQUc7QUFDZCxnQkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEIsZ0JBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNqQjs7O2VBRVUsc0JBQUc7QUFDVixnQkFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQzs7QUFFL0IsZ0JBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTs7QUFFbEIsb0JBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNqQjs7O0FBR0QsZ0JBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7QUFDeEIsc0JBQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzVELE1BQ0k7QUFDRCxvQkFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUM5QixvQkFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQzthQUNuQztTQUNKOzs7OztlQUdjLDJCQUFHOzs7QUFDZCxnQkFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtBQUMxQiwwQkFBVSxDQUFDLFlBQU07QUFBRSwyQkFBSyxVQUFVLEVBQUUsQ0FBQztpQkFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQy9DO1NBQ0o7OztlQUVLLGtCQUFHOztBQUVMLGdCQUFJLFdBQVcsR0FBRyxFQUNkLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUNwQixJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssSUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQ2pCLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxLQUFLLENBQUEsQUFDekIsQ0FBQzs7O0FBR0YsZ0JBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxvQkFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUMvQjs7O0FBR0QsZ0JBQUksQ0FBQyxXQUFXLEVBQUU7QUFDZCx1QkFBTyxLQUFLLENBQUM7YUFDaEI7QUFDRCxnQkFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7OztBQUduQixnQkFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7QUFDOUIsZ0JBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNkLGdCQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUMxQixnQkFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7OztBQUcxQixnQkFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO0FBQ3ZDLG9CQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2hDOzs7QUFHRCxnQkFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtBQUN4QixvQkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7YUFDckI7O0FBRUQsZ0JBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNiLGtDQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVCLG1CQUFPLElBQUksQ0FBQztTQUNmOzs7ZUFFSyxrQkFBRzs7O0FBQ0wsZ0JBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7OztBQUdqQixnQkFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNuQix5QkFBWSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsQ0FBQzt1QkFBSSxPQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7YUFBQSxDQUFDLENBQUM7QUFDdEUseUJBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUM7dUJBQUksT0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO2FBQUEsQ0FBQyxDQUFDOzs7QUFHL0QsZ0JBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDL0QsZ0JBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDOzs7QUFHM0QsZ0JBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDOzs7QUFHdEMsZ0JBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtBQUNsQyxvQkFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN4Qyx3QkFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBQ3RDLDJCQUFPO2lCQUNWOztBQUVELG9CQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3RCLG9CQUFJLENBQUMsVUFBVSxDQUNYLG1CQUFtQjtBQUNuQixrQkFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUM1QixvQkFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7O0FBR3RCLGtCQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsa0JBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzVEOztBQUVELGdCQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0FBQ2xDLGdCQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLGlCQUFpQixFQUFFO0FBQzlDLG9CQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDOztBQUVqQyxvQkFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUMsSUFBSSxDQUFDLFVBQUEsSUFBSSxFQUFJO0FBQzNDLDBDQUFJLElBQUksc0JBQW9CLE9BQUssWUFBWSxxQkFBZ0IsSUFBSSxpQ0FBOEIsQ0FBQztpQkFDbkcsRUFBRSxZQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQ2hCO0FBQ0QsZ0JBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDOztBQUUzQyxtQkFBTyxJQUFJLENBQUM7U0FDZjs7Ozs7O2VBSVMsc0JBQWdEOzs7Z0JBQS9DLFdBQVcseURBQUcsU0FBUzs7NkVBQW9CLEVBQUU7O2dCQUFsQixXQUFXLFFBQVgsV0FBVzs7O0FBRTdDLHVCQUFXLEdBQUcsQUFBQyxXQUFXLElBQUksSUFBSSxHQUFJLElBQUksR0FBRyxXQUFXLENBQUM7O0FBRXpELGdCQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs7O0FBRzFELGdCQUFJLE1BQU0sR0FBRyxhQUFZLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FDeEMsR0FBRyxDQUFDLFVBQUEsQ0FBQzt1QkFBSSxPQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFBQSxDQUFDLENBQ3hCLElBQUksQ0FBQyxtQkFBTSxjQUFjLENBQUMsQ0FBQzs7O0FBRy9CLGdCQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxnQkFBSSxVQUFVLFlBQUEsQ0FBQzs7Ozs7O0FBQ2Ysa0RBQWtCLE1BQU0sNEdBQUU7d0JBQWpCLEtBQUs7OztBQUVWLHdCQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO0FBQzVCLDRCQUFJLEtBQUssR0FBRyxlQUFjLEVBQUUsRUFDeEIsbUJBQU0sYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDaEMsMEJBQUUsS0FBSyxFQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsS0FBSyxBQUFDLEVBQUU7eUJBQzFDLENBQUM7QUFDRiw0QkFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDOUI7QUFDRCx5QkFBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNuRCw4QkFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7aUJBQzVCOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUQsbUJBQU8sS0FBSyxDQUFDO1NBQ2hCOzs7ZUFFVSxxQkFBQyxLQUFLLEVBQUUsV0FBVyxFQUFFO0FBQzVCLGdCQUFJLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDM0IsZ0JBQUksWUFBWSxHQUFHLENBQUMsQ0FBQzs7QUFFckIsZ0JBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDOUMsZ0JBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO0FBQy9CLHVCQUFPLENBQUMsQ0FBQzthQUNaOzs7QUFHRCxpQkFBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7QUFDakMsb0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFcEMsb0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDNUIsNkJBQVM7aUJBQ1o7Ozs7O0FBS0Qsb0JBQUksZUFBZSxLQUFLLElBQUksRUFBRTtBQUMxQixtQ0FBZSxHQUFHLEtBQUssQ0FBQzs7QUFFeEIsMkJBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLHdCQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDOzs7QUFHM0IsMkJBQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFJLENBQUMsQUFBQyxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQSxHQUFJLElBQUksR0FBSSxDQUFDLENBQUMsQ0FBQztBQUNoRyx3QkFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEMseUJBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN2Qiw0QkFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ3hDO2lCQUNKOzs7QUFHRCxvQkFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7QUFHbkMsb0JBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDNUIsNEJBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQzthQUNyRDs7QUFFRCxtQkFBTyxZQUFZLENBQUM7U0FDdkI7OztlQUVTLHNCQUFvQzs4RUFBSixFQUFFOztnQkFBL0IsV0FBVyxTQUFYLFdBQVc7Z0JBQUUsV0FBVyxTQUFYLFdBQVc7O0FBQ2pDLGdCQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUNuQix1QkFBTzthQUNWOzs7QUFHRCx1QkFBVyxHQUFHLEFBQUMsV0FBVyxLQUFLLEtBQUssR0FBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3JELHVCQUFXLEdBQUcsQUFBQyxXQUFXLEtBQUssS0FBSyxHQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7OztBQUdyRCx3Q0FBWSxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7O0FBRTFELGdCQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2pCLGdCQUFJLFdBQVcsSUFBSSxXQUFXLEVBQUU7QUFDNUIsb0JBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQSxJQUFLLFdBQVcsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUEsQUFBQyxDQUFDO0FBQ3ZGLGtCQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2xCO1NBQ0o7OztlQUVhLDBCQUFxRDs4RUFBSixFQUFFOztnQkFBaEQsVUFBVSxTQUFWLFVBQVU7Z0JBQUUsV0FBVyxTQUFYLFdBQVc7Z0JBQUUsU0FBUyxTQUFULFNBQVM7Z0JBQUUsS0FBSyxTQUFMLEtBQUs7O0FBQ3RELGdCQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUNuQix1QkFBTzthQUNWOzs7O0FBSUQsc0JBQVUsR0FBRyxBQUFDLFVBQVUsS0FBSyxLQUFLLEdBQUksS0FBSyxHQUFHLDRCQUFZLFFBQVEsQ0FBQyxVQUFVLENBQUM7QUFDOUUsdUJBQVcsR0FBRyxBQUFDLFdBQVcsS0FBSyxLQUFLLEdBQUksS0FBSyxHQUFHLDRCQUFZLFFBQVEsQ0FBQyxXQUFXLENBQUM7QUFDakYscUJBQVMsR0FBRyxBQUFDLFNBQVMsS0FBSyxLQUFLLEdBQUksS0FBSyxHQUFHLDRCQUFZLFFBQVEsQ0FBQyxPQUFPLENBQUM7QUFDekUsaUJBQUssR0FBRyxBQUFDLEtBQUssSUFBSSxJQUFJLEdBQUksS0FBSyxHQUFHLDRCQUFZLFFBQVEsQ0FBQyxRQUFRLENBQUM7OztBQUdoRSxnQkFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7QUFFakIsd0NBQVksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELHdDQUFZLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMxRCx3Q0FBWSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsNEJBQVksUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7Ozs7O0FBS3RGLGdCQUFJLEtBQUssRUFBRTs7QUFFUCxvQkFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO0FBQ3BCLGdEQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFDckIsNkJBQUssRUFBRSxJQUFJO0FBQ1gsMkJBQUcsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSTtxQkFDbEMsQ0FBQyxDQUFDO2lCQUNOOztxQkFFSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtBQUMvQyxvREFBWSxRQUFRLENBQUMsR0FBRyxDQUFDO0FBQ3JCLGlDQUFLLEVBQUUsSUFBSTtBQUNYLCtCQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLG1CQUFtQjtBQUM5QyxxQ0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUI7eUJBQ3ZELENBQUMsQ0FBQztxQkFDTjs7eUJBRUksSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO0FBQ3RCLHdEQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFDckIscUNBQUssRUFBRSxJQUFJO0FBQ1gsbUNBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRztBQUN4Qix5Q0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUI7NkJBQ3ZELENBQUMsQ0FBQzt5QkFDTjs7NkJBRUksSUFBSSxLQUFLLEtBQUssVUFBVSxFQUFFO0FBQzNCLDREQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFDckIseUNBQUssRUFBRSxJQUFJO0FBQ1gsdUNBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsU0FBUztBQUMvQiw2Q0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUI7aUNBQ3ZELENBQUMsQ0FBQzs2QkFDTjthQUNKLE1BQ0k7QUFDRCw0Q0FBWSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDOUM7U0FDSjs7Ozs7ZUFHVyxzQkFBQyxLQUFLLEVBQUU7QUFDaEIsZ0JBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ25CLHNDQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0FBQ3RFLHVCQUFPLFNBQVEsT0FBTyxFQUFFLENBQUM7YUFDNUI7OztBQUdELGdCQUFJLEtBQUssR0FBRztBQUNSLGlCQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyx3QkFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztBQUNuRSxpQkFBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsd0JBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07YUFDdkUsQ0FBQzs7QUFFRixnQkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEIsbUJBQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQ3JDLElBQUksQ0FBQyxVQUFBLFNBQVM7dUJBQUksZUFBYyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUwsS0FBSyxFQUFFLENBQUM7YUFBQSxDQUFDLFNBQ2pELENBQUMsVUFBQSxLQUFLO3VCQUFJLFNBQVEsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFMLEtBQUssRUFBRSxDQUFDO2FBQUEsQ0FBQyxDQUFDO1NBQ2xEOzs7Ozs7ZUFJTSxpQkFBQyxPQUFPLEVBQUU7QUFDYixtQkFBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hDOzs7Ozs7O2VBS2MsMkJBQXVDOzs7OEVBQUosRUFBRTs7bUNBQWxDLElBQUk7Z0JBQUosSUFBSSw4QkFBRyxJQUFJO3NDQUFFLE9BQU87Z0JBQVAsT0FBTyxpQ0FBRyxJQUFJOztBQUN6QyxtQkFBTyxhQUFZLFVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBSzs7QUFFcEMsb0JBQUksT0FBSyxRQUFRLEVBQUU7O0FBRWYsd0JBQUksT0FBSyxRQUFRLENBQUMsTUFBTSxJQUFJLE9BQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7O0FBRXJELDhDQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0FBQ3ZFLCtCQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN2Qzs7O0FBR0QsMkJBQUssUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLE9BQU8sRUFBUCxPQUFPLEVBQUUsTUFBTSxFQUFOLE1BQU0sRUFBRSxDQUFDO0FBQzNDLDBDQUFJLEtBQUssNENBQTRDLENBQUM7QUFDdEQsMkJBQU87aUJBQ1Y7OztBQUdELHVCQUFLLFFBQVEsR0FBRyxFQUFFLE9BQU8sRUFBUCxPQUFPLEVBQUUsTUFBTSxFQUFOLE1BQU0sRUFBRSxDQUFDOzs7QUFHcEMsb0JBQUksT0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtBQUNuQywyQkFBSyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztpQkFDcEM7OztBQUdELG9CQUFJLElBQUksRUFBRTtBQUNOLDJCQUFLLGtCQUFrQixFQUFFLENBQUM7QUFDMUIsc0RBQWEsT0FBTyxDQUFDLE9BQUssa0JBQWtCLEVBQUUsU0FBTyxDQUFDO2lCQUN6RDtBQUNELHVCQUFLLHFCQUFxQixFQUFFLENBQUM7QUFDN0IsdUJBQUssU0FBUyxFQUFFLENBQUM7OztBQUdqQix1QkFBSyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUN4Qyx1QkFBSyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQUEsSUFBSSxFQUFJO0FBQ2xDLHdCQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNwRCwrQkFBSyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNyQztpQkFDSixDQUFDLENBQUM7QUFDSCx1QkFBSyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUN2Qyx1QkFBSyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFNOztBQUVWLG9CQUFJLE9BQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7QUFDbkMsMkJBQUssV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7aUJBQ3ZDO2FBQ0osQ0FBQyxDQUFDO1NBQ047Ozs7OztlQUltQixnQ0FBRztBQUNuQixnQkFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2Ysc0NBQUksSUFBSSxrQ0FBa0MsQ0FBQztBQUMzQyxvQkFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtBQUN2Qix3QkFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQy9COzs7QUFHRCxvQkFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDbEMsb0JBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLG9CQUFJLE1BQU0sRUFBRTtBQUNSLDBDQUFJLEtBQUssb0RBQW9ELENBQUM7QUFDOUQsd0JBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzlEO2FBQ0o7U0FDSjs7Ozs7Ozs7ZUFNUSxxQkFBMkM7OztnQkFBMUMsYUFBYSx5REFBRyxJQUFJO2dCQUFFLFdBQVcseURBQUcsSUFBSTs7QUFDOUMsZ0JBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUM7O0FBRXpELGdCQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQUU7QUFDeEMsb0JBQUksQ0FBQyxXQUFXLEdBQUcsd0JBQU0sVUFBVSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDMUUsTUFDSTtBQUNELG9CQUFJLENBQUMsV0FBVyxHQUFHLHdCQUFNLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNwRDs7QUFFRCxtQkFBTywwQkFBWSxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsTUFBTSxFQUFJO0FBQzlFLHVCQUFLLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsdUJBQUssT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFLLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDOUMsdUJBQU8sT0FBSyxNQUFNLENBQUM7YUFDdEIsQ0FBQyxDQUFDO1NBQ047Ozs7Ozs7Ozs7Ozs7Ozs7O2VBZWEsdUJBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUN6QixnQkFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQUFBQyxFQUFFO0FBQ25FLHNDQUFJLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkUsdUJBQU87YUFDVjs7QUFFRCxnQkFBSSxJQUFJLEdBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxBQUFDLENBQUM7QUFDL0MsZ0JBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDOztBQUVuRSxnQkFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDaEQsc0JBQU0sQ0FBQyxHQUFHLEdBQUcsd0JBQU0sZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsdUJBQU8sTUFBTSxDQUFDLElBQUksQ0FBQzthQUN0Qjs7QUFFRCxnQkFBSSxJQUFJLEVBQUU7QUFDTix1QkFBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDOUQsTUFBTTtBQUNILHVCQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDNUM7U0FDSjs7O2VBRWdCLDZCQUFHO0FBQ2hCLGdCQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDZixnQkFBSSxpQkFBaUIsR0FBRyxhQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFFbEQsaUJBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7QUFDbEMsb0JBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLG9CQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUVyQyxvQkFBSTtBQUNBLHdCQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGdDQUFXLE1BQU0sQ0FBQyxlQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUosSUFBSSxFQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDeEYsd0JBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JCLDhCQUFNLEVBQUUsQ0FBQztxQkFDWjtpQkFDSixDQUNELE9BQU0sQ0FBQyxFQUFFO0FBQ0wsMkJBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQix3QkFBSSxPQUFPLHNDQUFvQyxDQUFDLENBQUMsT0FBTyxBQUFFLENBQUM7QUFDM0QsMENBQUksSUFBSSxhQUFXLE9BQU8sRUFBSSxNQUFNLENBQUMsQ0FBQztBQUN0Qyx3QkFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBTixNQUFNLEVBQUUsT0FBTyxFQUFQLE9BQU8sRUFBRSxDQUFDLENBQUM7aUJBQ2pFOzs7QUFHRCxvQkFBSSxnQ0FBVyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRTtBQUNyRCx5QkFBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDcEI7YUFDSjs7Ozs7Ozs7QUFHRCxtREFBYyxpQkFBaUIsaUhBQUU7d0JBQXhCLENBQUM7O0FBQ04sd0JBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN6QiwrQkFBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLDZCQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNqQjtpQkFDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0QsZ0JBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDbEIsb0JBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQUEsSUFBSSxFQUFJO0FBQ2xDLDJCQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRTtpQkFDakQsQ0FBQyxDQUFDO2FBQ047Ozs7Ozs7OztBQUlELG1EQUFrQix3QkFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUhBQUU7d0JBQTNDLEtBQUs7O0FBQ1Ysd0JBQUksS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDL0MsNEJBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO3FCQUN6RDtpQkFDSjs7Ozs7Ozs7Ozs7Ozs7O1NBQ0o7Ozs7O2VBR1csd0JBQUc7QUFDWCxtQkFBTyx1QkFBUSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbEU7Ozs7O2VBR1csd0JBQUc7QUFDWCxnQkFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ3pDLHNCQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7YUFDL0U7OztBQUdELGdCQUFJLENBQUMsTUFBTSxHQUFHLGtDQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7Ozs7Ozs7QUFHM0QsbURBQWtCLHdCQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlIQUFFO3dCQUFwQyxLQUFLOztBQUNWLHlCQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDeEI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdELGdCQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUMxQiw4Q0FBYSxPQUFPLENBQUMsYUFBWSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRTVELGdCQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNyQjs7O2VBRWlCLDhCQUFHOzs7OztBQUdqQixnQkFBSSxXQUFXLEdBQUcsYUFBWSxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3hELGdCQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN4QixnQkFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDOzs7Ozs7QUFDckIsbURBQWlCLHdCQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpSEFBRTt3QkFBakQsSUFBSTs7QUFDVCx3QkFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTs7Ozs7O0FBQ25CLCtEQUEwQix3QkFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpSEFBRTs7O29DQUExQyxLQUFJO29DQUFFLEtBQUs7OztBQUVqQixvQ0FBSSxLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRTtBQUN2RSx3Q0FBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFJLENBQUM7QUFDckMsd0NBQUksTUFBTSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7OztBQUcxQix3Q0FBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQ3RDLDhDQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7cUNBQ3BDOztBQUVELDBDQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUM7K0NBQUksUUFBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO3FDQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxVQUFVLEVBQUk7QUFDOUQsNENBQUksS0FBSyxHQUFHLFFBQUssTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3BDLDRDQUFJLEtBQUssRUFBRTtBQUNQLG9EQUFLLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsZ0RBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtBQUNoQix3REFBUSxHQUFHLElBQUksQ0FBQzs2Q0FDbkI7eUNBQ0o7cUNBQ0osQ0FBQyxDQUFDO2lDQUNOOzZCQUNKOzs7Ozs7Ozs7Ozs7Ozs7cUJBQ0o7aUJBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJRCxnQkFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7OztBQUdqRyxtQkFBTyxhQUFZLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDO3VCQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQUEsQ0FBQyxDQUFDO1NBQ3JGOzs7OztlQUdjLDJCQUFHO0FBQ2QsbUJBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN0Qzs7Ozs7ZUFHYyx5QkFBQyxJQUFJLEVBQUU7QUFDbEIsbUJBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUM7Ozs7O2VBR1csd0JBQUc7QUFDWCxnQkFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDakIsaUJBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDOUIsb0JBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNyRSw2QkFBUztpQkFDWjtBQUNELG9CQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxxQkFBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQyxxQkFBSyxDQUFDLE9BQU8sR0FBRyxBQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSyxHQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDekQsb0JBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUNmLHdCQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxtQkFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDNUQ7YUFDSjtBQUNELCtCQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDN0I7Ozs7O2VBR1kseUJBQUc7OztBQUNaLGdCQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdEMsZ0JBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLGdCQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFO0FBQ2hCLG9CQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxnQ0FBWSxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzVEO0FBQ0QsZ0JBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtBQUN4QixvQkFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN4Qzs7O0FBR0QsZ0JBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2hDLG9CQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLGFBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUM7MkJBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2lCQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQUcsQ0FBQzthQUNqRixNQUNJO0FBQ0Qsb0JBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxhQUFhLENBQUM7YUFDckQ7O0FBRUQsbUJBQUEsSUFBSSxDQUFDLEVBQUUsRUFBQyxVQUFVLE1BQUEseUJBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUMsQ0FBQztTQUNoRDs7Ozs7O2VBSVcsd0JBQW1COzs7OEVBQUosRUFBRTs7Z0JBQWQsT0FBTyxTQUFQLE9BQU87O0FBQ2xCLGdCQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDbEIsZ0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQixnQkFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDOztBQUU1Qyw4Q0FBYSxJQUFJLEVBQUUsQ0FBQztBQUNwQixnQkFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQixnQkFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BCLGdCQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUN6QixnQkFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BCLGdCQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7OztBQUdyQixnQkFBSSxDQUFDLFlBQVksRUFBRSxDQUFDOzs7QUFHcEIsZ0JBQUksSUFBSSxHQUFHLE9BQU8sR0FDZCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsR0FDNUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7OztBQUc5QixtQkFBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQU07QUFDbkIsd0JBQUssUUFBUSxFQUFFLENBQUM7QUFDaEIsd0JBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3pCLHdCQUFLLGFBQWEsRUFBRSxDQUFDO2FBQ3hCLENBQUMsQ0FBQztTQUNOOzs7OztlQUdpQiw4QkFBRzs7QUFFakIsZ0JBQUksQ0FBQyxpQkFBaUIsR0FBRyx3QkFBTSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkUsbUJBQU8sZ0NBQWEsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7QUFDL0Qsc0JBQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCO0FBQzlCLDBCQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDOUIsQ0FBQyxDQUFDO1NBQ047OztlQUVvQixpQ0FBRztBQUNwQixnQkFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDakIsb0JBQUksQ0FBQyxTQUFTLEdBQUcsMkJBQXFCLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2hFLE1BQ0ksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ25CLGdEQUFhLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLENBQUM7YUFDeEU7U0FDSjs7Ozs7ZUFHeUIsc0NBQUc7OztBQUN6QixnQkFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7QUFDN0IsdUJBQU8sU0FBUSxNQUFNLEVBQUUsQ0FBQzthQUMzQjtBQUNELGdCQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDOztBQUVuQyxtQkFBTyxnQ0FBYSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxpQ0FBaUMsQ0FBQyxDQUMzRSxJQUFJLENBQUMsVUFBQSxLQUFLLEVBQUk7QUFDWCx3QkFBSyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7QUFDcEMsdUJBQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDOzJCQUFLLENBQUMsR0FBRyxDQUFDO2lCQUFBLENBQUMsQ0FBQzthQUN4QyxDQUFDLENBQUM7U0FDVjs7Ozs7ZUFHUSxxQkFBRztBQUNSLGdCQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztTQUNqQzs7Ozs7ZUFHa0IsOEJBQUc7QUFDbEIsZ0JBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsd0JBQXdCLENBQUEsSUFDL0UsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLEVBQUU7QUFDNUMsb0JBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ2hELG9CQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ2pDO1NBQ0o7OztlQUVpQiw2QkFBRztBQUNqQixnQkFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztTQUN4Qzs7Ozs7OztlQUtVLHNCQUFHOzs7QUFDVixnQkFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFO0FBQy9CLHVCQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7YUFDeEM7O0FBRUQsZ0JBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzs7O0FBR3JCLGdCQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzNCLGdCQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLGFBQVksVUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFLO0FBQzdELHdCQUFLLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDeEMsd0JBQUssZ0JBQWdCLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzthQUN6QyxDQUFDLENBQUM7QUFDSCxtQkFBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1NBQ3hDOzs7OztlQUdrQiw4QkFBRztBQUNsQixnQkFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFOzs7O0FBSS9CLG9CQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM3QyxvQkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQixvQkFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLHFCQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQywwQkFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2xDO0FBQ0Qsb0JBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQzs7O0FBR3JELG9CQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFILEdBQUcsRUFBRSxJQUFJLEVBQUosSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM3QyxvQkFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzthQUNoQztTQUNKOzs7Ozs7O2VBTWUsMEJBQUMsS0FBSyxFQUFFO0FBQ3BCLGdCQUFJLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDaEYsZ0JBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDckIsdUJBQU87YUFDVjs7Z0JBRUssU0FBUyxHQUFpQixJQUFJLENBQTlCLFNBQVM7Z0JBQUUsS0FBSyxHQUFVLElBQUksQ0FBbkIsS0FBSztnQkFBRSxHQUFHLEdBQUssSUFBSSxDQUFaLEdBQUc7O0FBRTNCLGdCQUFJLHNCQUFJLEtBQUssQ0FBQyxFQUFFO0FBQ1osc0NBQUksS0FBSyxPQUFDLHFDQUFXLFNBQVMsa0NBQVMsR0FBRyxHQUFDLENBQUM7YUFDL0MsTUFDSTtBQUNELHNDQUFJLEtBQUsscURBQW1ELEtBQUssQ0FBRyxDQUFDO2FBQ3hFO1NBQ0o7Ozs7O2VBR08sa0JBQUMsSUFBSSxFQUFFO0FBQ1gsbUJBQU8sQ0FBQyxPQUFPLG1CQUFpQixJQUFJLENBQUcsQ0FBQztBQUN4Qyw0Q0FBYSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDaEU7OztlQUVVLHFCQUFDLElBQUksRUFBRTtBQUNkLG1CQUFPLENBQUMsVUFBVSxtQkFBaUIsSUFBSSxDQUFHLENBQUM7QUFDM0MsNENBQWEsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkU7Ozs7O2VBR1Usc0JBQUc7QUFDVixnQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLGdCQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1QsdUJBQU8sRUFBRTtBQUNMLGtDQUFjLEVBQUUsS0FBSztpQkFDeEI7OztBQUdELDJCQUFXLEVBQUMsdUJBQXdCO3dCQUF2QixHQUFHLHlEQUFHLENBQUM7d0JBQUUsT0FBTyx5REFBRyxFQUFFOztBQUM5Qix3QkFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2Ysd0JBQUksS0FBSyxHQUFHLFNBQVIsS0FBSyxHQUFTO0FBQ2QsNEJBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUN4Qiw2QkFBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBTTtBQUM5QixpQ0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7O0FBRWhDLGdDQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO0FBQ3BCLHFDQUFLLEVBQUUsQ0FBQzs2QkFDWCxNQUNJO0FBQ0Qsb0NBQUksR0FBRyxHQUFHLEVBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUM7MkNBQUssQ0FBQyxHQUFHLENBQUM7aUNBQUEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUEsQUFBQyxDQUFDO0FBQzNELHNEQUFJLElBQUksdUJBQXFCLEdBQUcsZ0JBQVcsR0FBRyxjQUFTLElBQUksQ0FBQyxHQUFHLE1BQUEsQ0FBUixJQUFJLEVBQVEsS0FBSyxDQUFDLGNBQVMsSUFBSSxDQUFDLEdBQUcsTUFBQSxDQUFSLElBQUksRUFBUSxLQUFLLENBQUMsV0FBUSxDQUFDOzZCQUNoSDt5QkFDSixDQUFDLENBQUM7cUJBQ04sQ0FBQztBQUNGLHlCQUFLLEVBQUUsQ0FBQztpQkFDWDs7O0FBR0Qsb0NBQW9CLEVBQUMsZ0NBQUc7QUFDcEIsd0JBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQzs7Ozs7O0FBQ2hCLDJEQUFpQixLQUFLLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLGlIQUFFO2dDQUFqRCxJQUFJOztBQUNULGlDQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDM0Isc0NBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLHNDQUFNLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUM7NkJBQ3REO3lCQUNKOzs7Ozs7Ozs7Ozs7Ozs7O0FBQ0QsMkJBQU8sTUFBTSxDQUFDO2lCQUNqQjs7QUFFRCx3Q0FBd0IsRUFBQyxvQ0FBRztBQUN4Qix3QkFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBQ3RELHdCQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIseUJBQUssSUFBSSxLQUFLLElBQUksWUFBWSxFQUFFO0FBQzVCLDRCQUFJLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDM0UsOEJBQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLDhCQUFNLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN2QztBQUNELDJCQUFPLE1BQU0sQ0FBQztpQkFDakI7YUFDSixDQUFDO1NBQ0w7OztlQS9nQ2EsZ0JBQUMsTUFBTSxFQUFnQjtnQkFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQy9CLG1CQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNyQzs7O1dBdkVnQixLQUFLOzs7cUJBQUwsS0FBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkNqQ1IsZUFBZTs7OztzQkFDaEIsV0FBVzs7OztrQ0FDRix1QkFBdUI7OzBCQUN4QixlQUFlOzs7O0FBRXhDLElBQUksV0FBVyxDQUFDOztxQkFFRCxXQUFXLEdBQUc7OztBQUd6QixhQUFTLEVBQUEsbUJBQUMsR0FBRyxFQUFlO1lBQWIsSUFBSSx5REFBRyxJQUFJOztBQUN0QixlQUFPLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUMvRTs7Ozs7O0FBTUQsc0JBQWtCLEVBQUEsNEJBQUMsR0FBRyxFQUFlO1lBQWIsSUFBSSx5REFBRyxJQUFJOztBQUMvQixZQUFJLENBQUMsR0FBRyxFQUFFO0FBQ04sbUJBQU8sU0FBUSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDOUI7O0FBRUQsWUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7QUFDekIsZ0JBQUksR0FBRyxJQUFJLElBQUksd0JBQU0sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hDOztBQUVELGVBQU8sd0JBQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFBLE1BQU0sRUFBSTs7QUFFMUMsZ0JBQUksT0FBTyxNQUFNLFVBQU8sS0FBSyxRQUFRLEVBQUU7QUFDbkMsc0JBQU0sVUFBTyxHQUFHLENBQUMsTUFBTSxVQUFPLENBQUMsQ0FBQzthQUNuQzs7QUFFRCxnQkFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxVQUFPLENBQUMsRUFBRTtBQUMvQiwyQkFBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEMsdUJBQU8sTUFBTSxDQUFDO2FBQ2pCOzs7QUFHRCxnQkFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDOzs7Ozs7QUFDakIsa0RBQWdCLE1BQU0sVUFBTyw0R0FBRTt3QkFBdEIsSUFBRzs7QUFDUiwyQkFBTyxDQUFDLElBQUksQ0FBQyx3QkFBTSxVQUFVLENBQUMsSUFBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQzdDOzs7Ozs7Ozs7Ozs7Ozs7O0FBQ0QsbUJBQU8sTUFBTSxVQUFPLENBQUM7O0FBRXJCLG1CQUFPLFNBQ0gsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBQSxHQUFHO3VCQUFJLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7YUFBQSxDQUFDLENBQUMsQ0FDNUQsSUFBSSxDQUFDLFVBQUEsT0FBTyxFQUFJO0FBQ1osc0JBQU0sR0FBRywwQ0FBYSxFQUFFLDRCQUFLLE9BQU8sSUFBRSxNQUFNLEdBQUMsQ0FBQztBQUM5QywyQkFBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEMsdUJBQU8sTUFBTSxDQUFDO2FBQ2pCLENBQUMsQ0FBQztTQUNWLENBQUMsQ0FBQztLQUNOOzs7QUFHRCxhQUFTLEVBQUEsbUJBQUMsTUFBTSxFQUFFLElBQUksRUFBRTtBQUNwQixtQkFBVyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQyxtQkFBVyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1QyxlQUFPLE1BQU0sQ0FBQztLQUNqQjs7O0FBR0Qsd0JBQW9CLEVBQUEsOEJBQUMsTUFBTSxFQUFFLElBQUksRUFBRTtBQUMvQixjQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDOzs7Ozs7O0FBRXRDLCtDQUFvQix3QkFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxpSEFBRTtvQkFBekMsTUFBTTs7QUFDWCxzQkFBTSxDQUFDLEdBQUcsR0FBRyx3QkFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNuRDs7Ozs7Ozs7Ozs7Ozs7OztBQUVELGVBQU8sTUFBTSxDQUFDO0tBQ2pCOzs7QUFHRCxxQkFBaUIsRUFBQSwyQkFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFO0FBQzVCLGNBQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7Ozs7Ozs7Ozs7OztBQVl4QyxZQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Ozs7OztBQUNmLG1EQUFnQyx3QkFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpSEFBRTs7O3dCQUFwRCxVQUFVO3dCQUFFLEtBQUs7OztBQUV2Qix3QkFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO0FBQ2YsNEJBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7OztBQUd4Qiw0QkFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2xELGdDQUFJLFlBQVksR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDO0FBQ3JDLGtDQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdDLGlDQUFLLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQzt5QkFDaEM7OzZCQUVJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQzlCLG9DQUFJLFlBQVksR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDO0FBQ3JDLHNDQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwQyxxQ0FBSyxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7NkJBQ2hDO3FCQUNKOzs7QUFHRCx3QkFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO21DQUNDLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQzs7QUFBekUsaUVBQTJFO0FBQXRFLGdDQUFJLElBQUksV0FBQSxDQUFBOztBQUVULGdDQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQzlELG9DQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQzs7O0FBR3ZDLG9DQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFDdkIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLHdDQUFJLFlBQVksR0FBRyxJQUFJLEdBQUcsVUFBVSxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDM0QsMENBQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0MseUNBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztpQ0FDL0M7O3FDQUVJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQzlCLDRDQUFJLFlBQVksR0FBRyxJQUFJLEdBQUcsVUFBVSxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDM0QsOENBQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLDZDQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7cUNBQy9DOzZCQUNKO3lCQUNKO3FCQUNKOzs7QUFHRCx3QkFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFOzs7Ozs7QUFDekMsK0RBQXlDLG9CQUFLLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpSEFBRTs7b0NBQTNFLElBQUksZ0JBQUosSUFBSTtvQ0FBRSxLQUFLLGdCQUFMLEtBQUs7b0NBQUUsR0FBRyxnQkFBSCxHQUFHO29DQUFFLFFBQVEsZ0JBQVIsUUFBUTs7O0FBRWhDLG9DQUFJLElBQUksS0FBSyxXQUFXLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM5RSx3Q0FBSSxZQUFZLEdBQUcsSUFBSSxHQUFHLFVBQVUsR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3pELDBDQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQy9DLDRDQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDO2lDQUNoQzs2QkFDSjs7Ozs7Ozs7Ozs7Ozs7O3FCQUVKO2lCQUNKOzs7Ozs7Ozs7Ozs7Ozs7U0FDSjs7Ozs7QUFLRCxZQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Ozs7OztBQUNqQixtREFBb0Isd0JBQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsaUhBQUU7d0JBQTFDLE9BQU87O0FBQ1osd0JBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNiLCtCQUFPLENBQUMsR0FBRyxHQUFHLHdCQUFNLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNyRDtpQkFDSjs7Ozs7Ozs7Ozs7Ozs7O1NBQ0o7O0FBRUQsZUFBTyxNQUFNLENBQUM7S0FDakI7OztBQUdELFlBQVEsRUFBQSxrQkFBQyxNQUFNLEVBQUU7O0FBRWIsY0FBTSxHQUFHLGdDQUFZLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7QUFHbkQsWUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLGFBQUssSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtBQUMvQixrQkFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUM7U0FDM0M7OztBQUdELGNBQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDdEMsWUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQ2Ysa0JBQU0sQ0FBQyxPQUFPLFdBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQzFDOzs7QUFHRCxZQUFJLGFBQVksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDMUMsa0JBQU0sQ0FBQyxPQUFPLFdBQVEsR0FBRyxFQUFFLENBQUM7U0FDL0I7OztBQUdELFlBQUksTUFBTSxHQUFHLEtBQUssQ0FBQzs7Ozs7O0FBQ25CLCtDQUFtQix3QkFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxpSEFBRTtvQkFBeEMsTUFBTTs7QUFDWCxvQkFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQ2YsMEJBQU0sR0FBRyxJQUFJLENBQUM7QUFDZCwwQkFBTTtpQkFDVDthQUNKOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUQsWUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNULGtCQUFNLENBQUMsT0FBTyxDQUFDLGFBQVksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUNoRTs7O0FBR0QsY0FBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNwQyxjQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3BDLGNBQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7O0FBRXBDLGVBQU8sTUFBTSxDQUFDO0tBQ2pCOztDQUVKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJDMU1pQixlQUFlOzs7O2tDQUNSLHVCQUF1Qjs7Ozs7OzBCQUN2QixlQUFlOzs7O29CQUN2QixRQUFROzs7O2tDQUNGLHVCQUF1Qjs7Ozt5QkFDakIsYUFBYTs7OztrQ0FDaEIsdUJBQXVCOzttQ0FDdEIsd0JBQXdCOzswQkFDMUIsZUFBZTs7eUJBQ3BCLGNBQWM7Ozs7QUFFM0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDOzs7O0FBRzlCLElBQUksd0JBQU0sY0FBYyxFQUFFOztBQUUxQixtQkFBYyxJQUFJLEVBQUU7O0FBRWhCLHdCQUFnQix3QkFBQTs7QUFFaEIsZUFBTyxFQUFFO0FBQ0wsaUJBQUssRUFBRSxFQUFFO0FBQ1QsbUJBQU8sRUFBRSxFQUFFO1NBQ2Q7QUFDRCxjQUFNLEVBQUUsRUFBRTtBQUNWLGFBQUssRUFBRSxFQUFFO0FBQ1QsY0FBTSxFQUFFLEVBQUU7QUFDVixhQUFLLEVBQUUsRUFBRTtBQUNULGVBQU8sRUFBRSxFQUFFO0FBQ1gsY0FBTSxFQUFFLEVBQUU7OztBQUdWLFlBQUksRUFBQyxjQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUU7QUFDOUMsZ0JBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQzVCLGdCQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUMvQixvQ0FBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUM5QyxtQ0FBaUIsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1QyxtQkFBTyxTQUFTLENBQUM7U0FDcEI7OztBQUdELG9CQUFZLEVBQUMsc0JBQUMsSUFBc0IsRUFBRTtnQkFBdEIsTUFBTSxHQUFSLElBQXNCLENBQXBCLE1BQU07Z0JBQUUsVUFBVSxHQUFwQixJQUFzQixDQUFaLFVBQVU7O0FBQzlCLGtCQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFFNUIsZ0JBQUksQ0FBQyxXQUFXLEdBQUcsNkJBQWEsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqRCxnQkFBSSxDQUFDLE1BQU0sR0FBRyw2QkFBYSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkMsZ0JBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDOzs7O0FBSTdCLGlCQUFLLElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDN0Isb0JBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN0QiwwQkFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsd0JBQU0sa0JBQWtCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDbkY7YUFDSjs7O0FBR0QsZ0JBQUksQ0FBQyxNQUFNLEdBQUcsd0JBQU0sa0JBQWtCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7QUFHdEQsa0JBQU0sQ0FBQyxPQUFPLEdBQUcsd0JBQU0sa0JBQWtCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFELGdCQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEIsaUJBQUssSUFBSSxLQUFJLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtBQUM3QixvQkFBSSxNQUFNLFlBQUEsQ0FBQztBQUNYLG9CQUFJO0FBQ0EsMEJBQU0sR0FBRyxnQ0FBVyxNQUFNLENBQUMsZUFBYyxFQUFFLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFJLENBQUMsRUFBRSxFQUFDLElBQUksRUFBSixLQUFJLEVBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ25HLENBQ0QsT0FBTSxDQUFDLEVBQUU7QUFDTCw2QkFBUztpQkFDWjs7QUFFRCxvQkFBSSxDQUFDLE1BQU0sRUFBRTtBQUNULDZCQUFTO2lCQUNaOztBQUVELG9CQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDZCx3QkFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO2lCQUNyQyxNQUNJOztBQUVELHdCQUFJLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFOztBQUVsRCw0QkFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLDRCQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDNUIsZ0NBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixrQ0FBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3lCQUMxQztxQkFDSjtpQkFDSjthQUNKOzs7QUFHRCxnQkFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUNwQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUN6QixhQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsQ0FBQyxFQUFJO0FBQ3ZDLHVCQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakcsQ0FBQyxFQUFFO0FBQ0osb0JBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2FBQ25COzs7QUFHRCxrQkFBTSxDQUFDLE1BQU0sR0FBRyx3QkFBTSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLGdDQUFZLFlBQVksQ0FBQyxDQUFDO0FBQ2xGLGdCQUFJLENBQUMsTUFBTSxHQUFHLGtDQUFhLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzs7O0FBRzlHLGdCQUFJLENBQUMsTUFBTSxHQUFHLHdCQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsZ0NBQVksWUFBWSxDQUFDLENBQUM7QUFDaEYsZ0JBQUksQ0FBQyxLQUFLLEdBQUcsNEJBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7QUFHckMsZ0JBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7O0FBRzNELGdCQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBTTtBQUNoRCx3Q0FBTSxHQUFHLENBQUMsT0FBTyxtQkFBbUIsQ0FBQzthQUN4QyxDQUFDLENBQUM7U0FDTjs7O0FBR0QsMEJBQWtCLEVBQUMsOEJBQUc7QUFDbEIsbUJBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUMzQjs7O0FBR0QsaUJBQVMsRUFBQyxtQkFBQyxLQUFRLEVBQUU7Z0JBQVIsSUFBSSxHQUFOLEtBQVEsQ0FBTixJQUFJOzs7QUFFYixnQkFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUU7O0FBRWhDLG9CQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDekMsMkJBQU87aUJBQ1Y7YUFDSjs7O0FBR0QsZ0JBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFjLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQzs7O0FBR2hGLG1CQUFPLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFNOztBQUV4QyxvQkFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTs7QUFFdEIsMkJBQU8sYUFBWSxVQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUs7O0FBRXBDLDRCQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQiw0QkFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDcEIsNEJBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOztBQUVsQiw0QkFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFNO0FBQ3JDLGdDQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDekIsd0RBQU0sR0FBRyxDQUFDLE9BQU8sd0VBQXNFLElBQUksQ0FBQyxHQUFHLENBQUcsQ0FBQztBQUNuRyx1Q0FBTzs2QkFDVjs7O0FBR0QsZ0NBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7QUFDeEIsd0RBQU0sR0FBRyxDQUFDLE1BQU0sOEJBQTRCLElBQUksQ0FBQyxHQUFHLFVBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUcsQ0FBQzs2QkFDdEY7O0FBRUQsZ0NBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLGdDQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQiw4Q0FBSyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFBLElBQUksRUFBSTtBQUN4Qyx1Q0FBTyxDQUFDLGdDQUFhLHVCQUF1QixDQUFDLEVBQUUsSUFBSSxFQUFFLGtCQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7NkJBQ25GLENBQUMsQ0FBQzt5QkFDTixDQUFDLFNBQU0sQ0FBQyxVQUFDLEtBQUssRUFBSztBQUNoQixnQ0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDckIsZ0NBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLGdDQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM5QixvREFBTSxHQUFHLENBQUMsT0FBTywyQkFBeUIsSUFBSSxDQUFDLEdBQUcsVUFBSyxJQUFJLENBQUMsS0FBSyxhQUFRLEtBQUssQ0FBQyxLQUFLLENBQUcsQ0FBQzs7QUFFeEYsbUNBQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxrQkFBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3lCQUN2QyxDQUFDLENBQUM7cUJBQ04sQ0FBQyxDQUFDO2lCQUNOOztxQkFFSTtBQUNELGdEQUFNLEdBQUcsQ0FBQyxPQUFPLGtDQUFnQyxJQUFJLENBQUMsR0FBRyxDQUFHLENBQUM7OztBQUc3RCwrQkFBTyxrQkFBSyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFBLElBQUksRUFBSTtBQUMvQyxtQ0FBTyxnQ0FBYSx1QkFBdUIsQ0FBQyxFQUFFLElBQUksRUFBRSxrQkFBSyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDakYsQ0FBQyxDQUFDO3FCQUNOO2FBQ0osQ0FBQyxDQUFDO1NBQ047OztBQUdELDBCQUFrQixFQUFDLDRCQUFDLElBQUksRUFBRTtBQUN0QixnQkFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDakMsdUJBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRCxNQUNJO0FBQ0Qsb0JBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxLQUFLLHFCQUFrQixJQUFJLENBQUMsTUFBTSxpQkFBYSxFQUFFLENBQUM7QUFDdkUsdUJBQU8sU0FBUSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEM7U0FDSjs7QUFFRCxlQUFPLEVBQUEsaUJBQUMsR0FBRyxFQUFFO0FBQ1QsbUJBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMxQjs7O0FBR0Qsa0JBQVUsRUFBQyxvQkFBQyxHQUFHLEVBQUU7QUFDYixnQkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzs7QUFFM0IsZ0JBQUksSUFBSSxJQUFJLElBQUksRUFBRTs7QUFFZCxvQkFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtBQUN2Qiw0Q0FBTSxHQUFHLENBQUMsT0FBTyw0QkFBMEIsR0FBRyxDQUFHLENBQUM7QUFDbEQsd0JBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2lCQUN4Qjs7QUFFRCxrQ0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7OztBQUdsQix1Q0FBaUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLHVCQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsd0NBQU0sR0FBRyxDQUFDLE9BQU8sa0NBQWdDLEdBQUcsQ0FBRyxDQUFDO2FBQzNEO1NBQ0o7OztBQUdELDJCQUFtQixFQUFDLCtCQUFtQjs4RUFBSixFQUFFOztnQkFBZCxFQUFFLFNBQUYsRUFBRTtnQkFBRSxHQUFHLFNBQUgsR0FBRzs7QUFDMUIsZ0JBQUksU0FBUyxHQUFHLHVCQUFpQixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRTFDLG1CQUFPO0FBQ0gsa0JBQUUsRUFBRSxFQUFFO0FBQ04sdUJBQU8sRUFBRyxTQUFTLElBQUksU0FBUyxDQUFDLE9BQU8sQUFBQzthQUM1QyxDQUFDO1NBQ0w7OztBQUdELDZCQUFxQixFQUFDLGlDQUFHO0FBQ3JCLG1DQUFpQixLQUFLLEVBQUUsQ0FBQztTQUM1Qjs7O0FBR0Qsa0NBQTBCLEVBQUMsc0NBQUc7QUFDMUIsbUJBQU8sdUJBQWlCLFVBQVUsRUFBRSxDQUFDO1NBQ3hDOzs7QUFHRCxvQkFBWSxFQUFDLHNCQUFDLFVBQVUsRUFBRTtBQUN0QixnQkFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLGdCQUFJLFVBQVUsRUFBRTtBQUNaLHdCQUFRLENBQUMsSUFBSSxNQUFBLENBQWIsUUFBUSxxQkFBUyxhQUFZLFVBQVUsQ0FBQyxFQUFDLENBQUM7YUFDN0M7O0FBRUQsb0NBQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN6RCxnQkFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNyQix1QkFBTyx1QkFBUSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNqRDtBQUNELG1CQUFPLFNBQVEsT0FBTyxFQUFFLENBQUM7U0FDNUI7OztBQUdELDhCQUFzQixFQUFDLGdDQUFDLGtCQUFrQixFQUFFO0FBQ3hDLG9DQUFNLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1NBQ2pEOzs7QUFHRCxlQUFPLEVBQUMsaUJBQUMsSUFBSSxFQUFFO0FBQ1gsbUJBQU8sQ0FBQyxPQUFPLGFBQVcsSUFBSSxDQUFDLFVBQVUsVUFBSyxJQUFJLENBQUcsQ0FBQztTQUN6RDs7QUFFRCxrQkFBVSxFQUFDLG9CQUFDLElBQUksRUFBRTtBQUNkLG1CQUFPLENBQUMsVUFBVSxhQUFXLElBQUksQ0FBQyxVQUFVLFVBQUssSUFBSSxDQUFHLENBQUM7U0FDNUQ7O0tBRUosQ0FBQyxDQUFDOztBQUVILG9DQUFhLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FFcEM7Ozs7Ozs7Ozs7Ozs7Ozs7O3lCQ2hSbUIsY0FBYzs7OztrQ0FDVCx1QkFBdUI7Ozs7d0JBRWhDLFVBQVU7Ozs7SUFFTCxnQkFBZ0I7QUFFdEIsYUFGTSxnQkFBZ0IsQ0FFckIsRUFBRSxFQUFFLE9BQU8sRUFBRTs4QkFGUixnQkFBZ0I7O0FBRzdCLFlBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2IsWUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdkIsWUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ2Y7Ozs7aUJBTmdCLGdCQUFnQjs7ZUFRN0IsZ0JBQUc7O0FBRUgsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ25CLGdCQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQixnQkFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDcEIsZ0JBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7O0FBRTdCLGdCQUFJLENBQUMsS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLGdCQUFJLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Ozs7QUFJbkQsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3ZDLGdCQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsZ0JBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1QyxnQkFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7OztBQUdsRSxnQkFBSSxXQUFXLEdBQUcsdUJBQVEsTUFBTSxDQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDdEYsdUJBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDL0YsZ0JBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7QUFHekgsZ0JBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNoRCxnQkFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM3RCxnQkFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEgsZ0JBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQzs7QUFFbkgsZ0JBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3REOzs7ZUFFTSxtQkFBRztBQUNOLGdCQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNyQixvQkFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsb0JBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLG9CQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN0RDs7O1NBR0o7OztlQUVHLGdCQUFHOztBQUVILGdCQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsZ0JBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyRTs7Ozs7O2VBSVcsc0JBQUMsS0FBSyxFQUFFOzs7QUFDaEIsbUJBQU8sYUFBWSxVQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUs7O0FBRXBDLHNCQUFLLG9CQUFvQixHQUFHLEFBQUMsTUFBSyxvQkFBb0IsR0FBRyxDQUFDLElBQUssQ0FBQyxDQUFDO0FBQ2pFLHNCQUFLLFFBQVEsQ0FBQyxNQUFLLG9CQUFvQixDQUFDLEdBQUc7QUFDdkMsd0JBQUksRUFBRSxPQUFPO0FBQ2Isc0JBQUUsRUFBRSxNQUFLLG9CQUFvQjtBQUM3Qix5QkFBSyxFQUFMLEtBQUs7QUFDTCwyQkFBTyxFQUFQLE9BQU87QUFDUCwwQkFBTSxFQUFOLE1BQU07aUJBQ1QsQ0FBQzthQUNMLENBQUMsQ0FBQztTQUNOOzs7OztlQUdjLDJCQUFHO0FBQ2QsbUJBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN4Qjs7O2VBRW1CLGdDQUFHO0FBQ25CLGlCQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDekIsb0JBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7OztBQUcvQixvQkFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2QsNkJBQVM7aUJBQ1o7Ozs7QUFJRCx1QkFBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBUCxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLHVCQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0I7U0FDSjs7Ozs7ZUFHRyxnQkFBRzs7Ozs7O0FBSUgsZ0JBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksRUFBRTtBQUMvQiw0QkFBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQ3ZDO0FBQ0QsZ0JBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsWUFBTTtBQUNyQyxvQkFBSSxFQUFFLEdBQUcsT0FBSyxFQUFFLENBQUM7O0FBRWpCLGtCQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsT0FBSyxHQUFHLENBQUMsQ0FBQzs7QUFFN0MscUJBQUssSUFBSSxDQUFDLElBQUksT0FBSyxRQUFRLEVBQUU7QUFDekIsd0JBQUksT0FBTyxHQUFHLE9BQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHL0Isd0JBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNkLGlDQUFTO3FCQUNaOzs7QUFHRCx3QkFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUMxQixpQ0FBUztxQkFDWjs7O0FBR0Qsc0JBQUUsQ0FBQyxVQUFVLENBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxPQUFLLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQSxHQUFJLE9BQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUN4RCxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGFBQWEsRUFBRSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ2pELHdCQUFJLFdBQVcsR0FBRyxBQUFDLE9BQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQSxBQUFDLElBQUksT0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBLEFBQUMsSUFBSSxPQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUEsQUFBQyxLQUFNLENBQUMsQ0FBQzs7O0FBRy9HLHdCQUFJLFNBQVMsR0FBRyxPQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5Qix3QkFBSSxTQUFTLEtBQUssR0FBRyxFQUFFOztBQUNuQiw0QkFBSSxPQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDakMsNERBQWEsV0FBVyxDQUNwQixPQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFDdkIsMEJBQTBCLEVBQzFCLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQ3hDLElBQUksQ0FBQyxVQUFBLE9BQU8sRUFBSTtBQUNiLHVDQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQzs2QkFDNUIsQ0FBQyxDQUFDO3lCQUNOO3FCQUNKOzt5QkFFSTtBQUNELG1DQUFLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3lCQUN0RDs7QUFFRCwyQkFBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7aUJBQ3ZCOztBQUVELGtCQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFFNUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdkI7Ozs7O2VBR1Usb0JBQUMsT0FBTyxFQUFFO0FBQ2pCLGdCQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QyxnQkFBSSxDQUFDLE9BQU8sRUFBRTtBQUNWLHNDQUFJLEtBQUssQ0FBQyx1REFBdUQsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM1RSx1QkFBTzthQUNWOztBQUVELGdCQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzlCLGdCQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDcEIsZ0JBQUksQUFBQyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUN2QyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxBQUFDLElBQ3hDLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEFBQUMsRUFBRTtBQUMvRCx1QkFBTyxHQUFHLElBQUksQ0FBQzthQUNsQjs7QUFFRCxnQkFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7OztBQUd2QixtQkFBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBUCxPQUFPLEVBQUUsT0FBTyxFQUFQLE9BQU8sRUFBRSxPQUFPLEVBQVAsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUMvQyxtQkFBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNwQzs7Ozs7Ozs7Ozs7ZUFVZSxtQkFBQyxJQUFJLEVBQUU7O0FBRW5CLGdCQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDakIsZ0JBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQzlCLGdCQUFJLEVBQUUsR0FBRyxBQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxHQUFJLEdBQUcsQ0FBQztBQUNyQyxnQkFBSSxFQUFFLEdBQUcsQUFBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsR0FBSSxHQUFHLENBQUM7QUFDdEMsZ0JBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDekIsZ0JBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDakIsZ0JBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDakIsZ0JBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDakIsZ0JBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDakIsZ0JBQUksR0FBRyxHQUFHLEFBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUEsQUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUEsQUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUEsQUFBQyxLQUFNLENBQUMsQ0FBQzs7QUFFM0QsZ0JBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUc7QUFDWixxQkFBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3RCLENBQUM7QUFDRixnQkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDOzs7QUFHaEIsZ0JBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QixvQkFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUc7QUFDbkIsMkJBQU8sRUFBRSxFQUFFO0FBQ1gsd0JBQUksRUFBRTtBQUNGLDJCQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7QUFDYiw4QkFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0FBQ25CLGtDQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDM0IsOEJBQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtBQUNuQixrQ0FBVSxFQUFFLElBQUksQ0FBQyxVQUFVO3FCQUM5QjtpQkFDSixDQUFDO2FBQ0w7O0FBRUQsZ0JBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRXZDLG1CQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEI7OztlQUVlLG1CQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ3JDLGdCQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLG9CQUFRLENBQUMsT0FBTyxHQUFHO0FBQ2Ysa0JBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtBQUNkLDBCQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDOUIsc0JBQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtBQUN0QixvQkFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUk7YUFDbEMsQ0FBQzs7QUFFRixtQkFBTyxRQUFRLENBQUMsS0FBSyxDQUFDO1NBQ3pCOzs7ZUFFVyxpQkFBRztBQUNYLGdCQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNoQixnQkFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDZCxnQkFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbEIsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCOzs7ZUFFZSxtQkFBQyxHQUFHLEVBQUU7OztBQUNsQixnQkFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2pCLG9CQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBQSxDQUFDOzJCQUFJLE9BQU8sT0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUFBLENBQUMsQ0FBQztBQUN6RCxvQkFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDaEQsdUJBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMxQjtTQUNKOzs7ZUFFZ0Isc0JBQUc7QUFDaEIsbUJBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN4Qjs7O2VBRWUsbUJBQUMsTUFBTSxFQUFFO0FBQ3JCLGdCQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztTQUM1Qjs7O1dBN1BnQixnQkFBZ0I7OztxQkFBaEIsZ0JBQWdCO0FBa1FyQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFCLGdCQUFnQixDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDNUIsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM5QixnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLGdCQUFnQixDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDaEMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJDM1E3QixRQUFROzs7OzJCQUNXLGlCQUFpQjs7MEJBQ2xDLGdCQUFnQjs7OztJQUViLFVBQVU7QUFFZixhQUZLLFVBQVUsQ0FFZCxNQUFNLEVBQUUsT0FBTyxFQUFFOzhCQUZiLFVBQVU7O0FBR3ZCLFlBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLFlBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLFlBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNwQixZQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDeEIsWUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQztBQUM1QyxZQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUM1QixZQUFJLENBQUMsT0FBTztBQUNSLGFBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQ0FBTyxTQUFRLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSSxFQUFFLENBQUM7OztBQUd0RSxZQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDbEMsWUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO0FBQ3RDLGdCQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3Qjs7O0FBR0QsWUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDOzs7QUFHcEMsWUFBSSxPQUFPLGFBQWEsS0FBSyxVQUFVLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtBQUN2RCxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBUyxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ25DLG9CQUFJO0FBQ0EsaUNBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQiw0Q0FBTSxHQUFHLENBQUMsTUFBTSxFQUFFLDhCQUE4QixHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUN6RCxDQUNELE9BQU8sQ0FBQyxFQUFFO0FBQ04sNENBQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxzQ0FBc0MsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCw0Q0FBTSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN6QjthQUNKLENBQUMsQ0FBQztTQUNOOzs7QUFHRCxZQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksaUJBQUksdUJBQXVCLENBQUM7S0FDbEU7Ozs7aUJBckNnQixVQUFVOzs7ZUErRnZCLGNBQUMsSUFBSSxFQUFFOzs7QUFDUCxnQkFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDdEIsZ0JBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUM3QixnQkFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ2hDLGdCQUFJLENBQUMsT0FBTyxnQ0FBTyxJQUFJLENBQUMsT0FBTyxFQUFDLENBQUM7O0FBRWpDLG1CQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsSUFBSSxFQUFLOztBQUVuQyxxQkFBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUN2Qyx3QkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUMsd0JBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDdkIsNEJBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQUEsT0FBTyxFQUFJO0FBQzdCLDZDQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBQSxLQUFLLEVBQUk7O0FBRTdDLHFDQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7OztBQUdyQixvQ0FBSSxNQUFLLFNBQVMsRUFBRTtBQUNoQix5Q0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFLLFNBQVMsQ0FBQSxBQUFDLEdBQUksaUJBQUksVUFBVSxHQUFHLE1BQUssU0FBUyxHQUFDLENBQUMsQUFBQyxDQUFDLENBQUM7QUFDN0YseUNBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBSyxTQUFTLENBQUEsQUFBQyxHQUFJLGlCQUFJLFVBQVUsR0FBRyxNQUFLLFNBQVMsR0FBQyxDQUFDLEFBQUMsQ0FBQyxDQUFDO2lDQUNoRzs2QkFDSixDQUFDLENBQUM7OztBQUdILGtDQUFLLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzt5QkFDL0MsQ0FBQyxDQUFDO3FCQUNOO2lCQUNKOztBQUVELG9CQUFJLENBQUMsZUFBZSxHQUFHLE1BQUssZUFBZSxJQUFJLEtBQUssQ0FBQztBQUNyRCx1QkFBTyxJQUFJLENBQUM7YUFDZixDQUFDLENBQUM7U0FDTjs7Ozs7ZUFHSSxlQUFDLElBQUksRUFBRTtBQUNSLGtCQUFNLHNDQUF5QixPQUFPLENBQUMsQ0FBQztTQUMzQzs7Ozs7ZUFHb0IsOEJBQUMsSUFBSSxFQUFFO0FBQ3hCLGdCQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxFQUFFO0FBQzlCLG9CQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQ3pCLHdCQUFJLENBQUMsZUFBZSxHQUFHLGlCQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQy9ELE1BQ0ksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRTtBQUNuQyx3QkFBSSxDQUFDLGVBQWUsR0FBRyxpQkFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNsRTthQUNKO0FBQ0QsbUJBQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUMvQjs7Ozs7ZUF6R2EsZ0JBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUM1QixnQkFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMvQix1QkFBTyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQzthQUM3RDtTQUNKOzs7OztlQUdjLGlCQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUU7QUFDakMsZ0JBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDekIsdUJBQU8sSUFBSSxDQUFDO2FBQ2Y7O0FBRUQsZ0JBQUksR0FBRyxHQUFHLGVBQWMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBSSxJQUFJLEdBQUcsZUFBYyxFQUFFLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOztBQUUvRCxtQkFBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkQ7Ozs7O2VBR2tCLHFCQUFDLE1BQU0sRUFBRTtBQUN4QixnQkFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3hCLGlCQUFLLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDekIsb0JBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUNwRCxxQkFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqQyx3QkFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MscUNBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFBLEtBQUssRUFBSTtrREFDaEMsaUJBQUksY0FBYyxDQUFDLEtBQUssQ0FBQzs7Ozs0QkFBakMsQ0FBQzs0QkFBRSxDQUFDOztBQUNULDZCQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsNkJBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ2hCLENBQUMsQ0FBQztpQkFDTjthQUNKOztBQUVELGdCQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO0FBQzVCLHNCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO2FBQ2pEO1NBQ0o7Ozs7Ozs7ZUFLZ0IsbUJBQUMsTUFBTSxFQUFFLElBQXVCLEVBQUU7Z0JBQWYsQ0FBQyxHQUFYLElBQXVCLENBQXRCLE1BQU0sQ0FBRyxDQUFDO2dCQUFHLEdBQUcsR0FBakIsSUFBdUIsQ0FBVCxHQUFHO2dCQUFFLEdBQUcsR0FBdEIsSUFBdUIsQ0FBSixHQUFHOztBQUM1QyxnQkFBSSxlQUFlLEdBQUcsaUJBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGlCQUFLLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDekIsb0JBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUNwRCxxQkFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqQyx3QkFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MscUNBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFBLEtBQUssRUFBSTtBQUM3Qyw2QkFBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUEsR0FBSSxlQUFlLENBQUM7QUFDaEQsNkJBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFBLEdBQUksZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUN4RCxDQUFDLENBQUM7aUJBQ047YUFDSjtTQUNKOzs7ZUF1RGMsa0JBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRTtBQUNuQyxnQkFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUMzQix1QkFBTzthQUNWOztBQUVELHNCQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztTQUM1Qzs7O1dBMUpnQixVQUFVOzs7cUJBQVYsVUFBVTs7QUE4Si9CLFVBQVUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDOzs7O0lBS1QsYUFBYTtjQUFiLGFBQWE7O0FBRVYsYUFGSCxhQUFhLENBRVQsTUFBTSxFQUFFOzhCQUZaLGFBQWE7O0FBR2xCLG1DQUhLLGFBQWEsNkNBR1osTUFBTSxFQUFFO0FBQ2QsWUFBSSxDQUFDLEdBQUcsR0FBRyx3QkFBTSxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDL0QsWUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7O0FBRXhCLFlBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUU7QUFDbEIsa0JBQU0sS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7U0FDcEU7S0FDSjs7OztpQkFWUSxhQUFhOztlQVloQixlQUFDLElBQUksRUFBRTs7O0FBQ1QsZ0JBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFekMsZ0JBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDbkMsdUJBQVcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLGdCQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0FBQzlCLGdCQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7O0FBRWpDLG1CQUFPLGFBQVksVUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFLO0FBQ3BDLDJCQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzs7Ozs7OztBQU96QixvQkFBSSxPQUFPLEdBQUcsd0JBQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLE9BQUssYUFBYSxDQUFDLENBQUM7QUFDM0QsMkJBQVcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQzs7QUFFdEMsdUJBQU8sQ0FBQyxJQUFJLENBQUMsVUFBQyxJQUFJLEVBQUs7QUFDbkIsd0JBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUMxRCx3QkFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3RELHdCQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDakMsMkJBQUssZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMsd0JBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUN0RCwyQkFBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNqQixDQUFDLFNBQU0sQ0FBQyxVQUFDLEtBQUssRUFBSztBQUNoQiwrQkFBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDckMsMkJBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDakIsQ0FBQyxDQUFDO2FBQ04sQ0FBQyxDQUFDO1NBQ047Ozs7OztlQUlTLG1CQUFDLFlBQVksRUFBRSxJQUFJLEVBQUU7QUFDM0Isa0JBQU0sc0NBQXlCLFdBQVcsQ0FBQyxDQUFDO1NBQy9DOzs7ZUFFZSx5QkFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUNwQyxrQkFBTSxzQ0FBeUIsaUJBQWlCLENBQUMsQ0FBQztTQUNyRDs7O1dBckRRLGFBQWE7R0FBUyxVQUFVOzs7O0lBMkRoQyxpQkFBaUI7Y0FBakIsaUJBQWlCOztBQUVkLGFBRkgsaUJBQWlCLENBRWIsTUFBTSxFQUFFOzhCQUZaLGlCQUFpQjs7QUFHdEIsbUNBSEssaUJBQWlCLDZDQUdoQixNQUFNLEVBQUU7O0FBRWQsWUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEIsWUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdEIsWUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNwRCxZQUFJLFVBQVUsSUFBSSxJQUFJLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDN0MsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxnQkFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7U0FDdEI7S0FDSjs7aUJBWlEsaUJBQWlCOztlQWNqQixtQkFBQyxZQUFZLEVBQUUsSUFBSSxFQUFFO0FBQzFCLGdCQUFJLE1BQU0sR0FBRyxpQkFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELGdCQUFJLEdBQUcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRWxHLGdCQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO0FBQ3hCLG1CQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLG9CQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUEsR0FBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQzthQUNqRTtBQUNELG1CQUFPLEdBQUcsQ0FBQztTQUNkOzs7OztlQUdnQiwyQkFBQyxHQUFHLEVBQUU7QUFDbkIsbUJBQU8sR0FBRyxJQUNOLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQ3RCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQ3RCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDOUI7OztXQS9CUSxpQkFBaUI7R0FBUyxhQUFhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQkNuT08sZUFBZTs7OzttQkFDbEQsT0FBTzs7bUJBQ2YsUUFBUTs7Ozs7O3lCQUdGLFlBQVk7Ozs7Ozs7OztJQU9yQixhQUFhO2NBQWIsYUFBYTs7QUFFWCxhQUZGLGFBQWEsQ0FFVixNQUFNLEVBQUU7OEJBRlgsYUFBYTs7QUFHbEIsbUNBSEssYUFBYSw2Q0FHWixNQUFNLEVBQUU7QUFDZCxZQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNsQixZQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN0QixZQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN2QixZQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakQsWUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7S0FDdEI7Ozs7Ozs7aUJBVFEsYUFBYTs7ZUFXakIsZUFBQyxJQUFJLEVBQUU7OztBQUNSLGdCQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNqQixvQkFBSSxDQUFDLFNBQVMsR0FBRywyQkFiaEIsYUFBYSx1Q0FhZSxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFBLElBQUksRUFBSTtBQUN2RSx3QkFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7QUFDckMseUJBQUssSUFBSSxVQUFVLElBQUksTUFBTSxFQUFFO0FBQzNCLDhCQUFLLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyw0QkFBVSxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDMUQsbUNBQU8sRUFBRSxNQUFLLFFBQVE7QUFDdEIscUNBQVMsRUFBRSxDQUFDO0FBQ1osa0NBQU0sRUFBRSxpQkFBSSxVQUFVO0FBQ3RCLGtDQUFNLEVBQUUsQ0FBQzt5QkFDWixDQUFDLENBQUM7cUJBQ047O0FBRUQsMEJBQUssTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQiwyQkFBTyxJQUFJLENBQUM7aUJBQ2YsQ0FBQyxDQUFDO2FBQ047O0FBRUQsbUJBQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBTTtBQUM3QixxQkFBSyxJQUFJLFVBQVUsSUFBSSxNQUFLLFlBQVksRUFBRTtBQUN0Qyx3QkFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBSyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2lCQUNoRjtBQUNELHVCQUFPLElBQUksQ0FBQzthQUNmLENBQUMsQ0FBQztTQUNOOzs7ZUFFYyx5QkFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQzlCLGdCQUFJLE1BQU0sR0FBRyxpQkFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzs7QUFHcEQsZ0JBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7OztBQUc1RSxnQkFBSSxVQUFVLFlBQUEsQ0FBQztBQUNmLGdCQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO0FBQ2pCLDBCQUFVLEdBQUc7QUFDVCx3QkFBSSxFQUFFLG1CQUFtQjtBQUN6Qiw0QkFBUSxFQUFFLEVBQUU7aUJBQ2YsQ0FBQzs7Ozs7OztBQUVGLHNEQUFvQixDQUFDLENBQUMsUUFBUSw0R0FBRTs0QkFBdkIsT0FBTzs7O0FBRVosNEJBQUksQ0FBQyxHQUFHO0FBQ0osZ0NBQUksRUFBRSxTQUFTO0FBQ2Ysb0NBQVEsRUFBRSxFQUFFO0FBQ1osc0NBQVUsRUFBRSxPQUFPLENBQUMsSUFBSTt5QkFDM0IsQ0FBQzs7QUFFRiw0QkFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtBQUNwQiw2QkFBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBQSxLQUFLO3VDQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFBQSxDQUFDLENBQUM7QUFDN0UsNkJBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQzt5QkFDbEMsTUFDSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQy9DLDZCQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFBLElBQUk7dUNBQzlDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBQSxLQUFLOzJDQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztpQ0FBQSxDQUFDOzZCQUFBLENBQzFDLENBQUM7O0FBRUYsZ0NBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDcEIsaUNBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDOzZCQUN2QyxNQUNLO0FBQ0YsaUNBQUMsQ0FBQyxRQUFRLEdBQUcsZUFBVSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7NkJBQ3pEO3lCQUNKLE1BQ0k7QUFDRCx5Q0FBUzs2QkFDWjs7QUFFRCxrQ0FBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQy9COzs7Ozs7Ozs7Ozs7Ozs7YUFDSjs7QUFFRCxtQkFBTyxVQUFVLENBQUM7U0FDckI7OztlQUVTLG1CQUFDLElBQUksRUFBRTtBQUNiLG1CQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDbkI7OztlQUVlLHlCQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQ3JDLGtCQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3hEOzs7OztlQUdTLG1CQUFDLElBQUksRUFBRTtBQUNiLGdCQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssbUJBQW1CLEVBQUU7QUFDOUQsdUJBQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDN0IsTUFDSTtBQUNELHVCQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7OztXQXRHUSxhQUFhOzs7OztJQThHYixpQkFBaUI7Y0FBakIsaUJBQWlCOztBQUVmLGFBRkYsaUJBQWlCLENBRWQsTUFBTSxFQUFFOzhCQUZYLGlCQUFpQjs7QUFHdEIsbUNBSEssaUJBQWlCLDZDQUdoQixNQUFNLEVBQUU7OztBQUdkLFlBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFOztBQUVuQyxnQkFBSSxJQUFJLFlBQVksaUJBQWlCLEVBQUU7O0FBRW5DLHVCQUFPLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3BDLE1BQ0k7O0FBRUQsdUJBQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDSjtBQUNELGVBQU8sSUFBSSxDQUFDO0tBQ2Y7O2lCQWxCUSxpQkFBaUI7O2VBb0JWLHlCQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQ3JDLGdCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLGdCQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDM0M7OztlQUVjLHdCQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFOztBQUVoQyxnQkFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ2hEOztBQUVELGtCQUFNLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDOzs7QUFHeEQsZ0JBQUksTUFBTSxHQUFHO0FBQ1Qsc0JBQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtBQUNuQixtQkFBRyxFQUFFLGlCQUFJLGFBQWEsQ0FBQyxpQkFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ2pFLENBQUM7O0FBRUYscUNBQVcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLHFDQUFXLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDeEM7OztXQXpDUSxpQkFBaUI7Ozs7O0FBNkM5Qix5QkFBVyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbEQseUJBQVcsUUFBUSxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJDeEtYLGVBQWU7Ozs7bUJBQzNDLFFBQVE7Ozs7bUJBRVIsS0FBSzs7OzswQkFDdUIsYUFBYTs7Ozs7OztJQU01QyxTQUFTO2NBQVQsU0FBUzs7QUFFTixhQUZILFNBQVMsQ0FFTCxNQUFNLEVBQUU7OEJBRlosU0FBUzs7QUFHZCxtQ0FISyxTQUFTLDZDQUdSLE1BQU0sRUFBRTtBQUNkLFlBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0tBQ3RDOztpQkFMUSxTQUFTOztlQU9GLHlCQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFOztBQUVyQyxnQkFBSSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEMsZ0JBQUksTUFBTSxHQUFHLHFCQUFRLElBQUksQ0FBQyxDQUFDO0FBQzNCLGtCQUFNLENBQUMsSUFBSSxHQUFHLDJCQUFlLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLGtCQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDLG1CQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDdEI7Ozs7OztlQUlTLG1CQUFDLElBQUksRUFBRTtBQUNiLGdCQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIsaUJBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN2QixvQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixvQkFBSSxhQUFhLEdBQUc7QUFDaEIsd0JBQUksRUFBRSxtQkFBbUI7QUFDekIsNEJBQVEsRUFBRSxFQUFFO2lCQUNmLENBQUM7O0FBRUYscUJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pDLHdCQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLHdCQUFJLGVBQWUsR0FBRztBQUNsQiw0QkFBSSxFQUFFLFNBQVM7QUFDZixnQ0FBUSxFQUFFLEVBQUU7QUFDWixrQ0FBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO3FCQUNqQyxDQUFDOztBQUVGLHdCQUFJLFFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDO0FBQ3hDLHdCQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDekMseUJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLDRCQUFJLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsNkJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hDLGdDQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FDTixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNULElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ1osQ0FBQzt5QkFDTDtxQkFDSjtBQUNELDRCQUFRLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQzs7QUFFbkMsd0JBQUksOEJBQWtCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssT0FBTyxFQUFFO0FBQ25ELGdDQUFRLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUN4QixnQ0FBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNyRCxNQUNJLElBQUksOEJBQWtCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssWUFBWSxFQUFFO0FBQzdELDRCQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzFCLG9DQUFRLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztBQUM3QixvQ0FBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNsRCxNQUNJO0FBQ0Qsb0NBQVEsQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7eUJBQ3JDO3FCQUNKLE1BQ0ksSUFBSSw4QkFBa0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDMUQsZ0NBQVEsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQ3JEOztBQUVELGlDQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDaEQ7QUFDRCxzQkFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQzthQUM3QjtBQUNELG1CQUFPLE1BQU0sQ0FBQztTQUNqQjs7Ozs7OztlQUt5Qiw0QkFBQyxJQUFJLEVBQUU7QUFDN0IsZ0JBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLGdCQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDZCxnQkFBSSxhQUFhLFlBQUEsQ0FBQzs7Ozs7O0FBQ2xCLGtEQUFpQixJQUFJLENBQUMsV0FBVyw0R0FBRTt3QkFBMUIsSUFBSTs7QUFDVCx3QkFBSSxPQUFPLEdBQUcsaUJBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLHdCQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7QUFDakIsaUNBQVM7cUJBQ1o7O0FBRUQsaUNBQWEsR0FBRyxhQUFhLElBQUksT0FBTyxDQUFDOztBQUV6Qyx3QkFBSSxPQUFPLEtBQUssYUFBYSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzlDLDZCQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pCLDRCQUFJLEdBQUcsRUFBRSxDQUFDO3FCQUNiO0FBQ0Qsd0JBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ25COzs7Ozs7Ozs7Ozs7Ozs7O0FBQ0QsZ0JBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDakIscUJBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDcEI7OztBQUdELGdCQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3BCLG9CQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUN0QixvQkFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0IsTUFDSTtBQUNELG9CQUFJLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztBQUMzQixvQkFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7YUFDNUI7O0FBRUQsbUJBQU8sSUFBSSxDQUFDO1NBQ2Y7OztXQTVHUSxTQUFTOzs7OztBQWdIdEIseUJBQVcsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJDMUhNLGVBQWU7Ozs7b0JBQzFDLFNBQVM7Ozs7bUJBQ1YsUUFBUTs7OztJQUVYLGdCQUFnQjtjQUFoQixnQkFBZ0I7O0FBRWQsYUFGRixnQkFBZ0IsQ0FFYixNQUFNLEVBQUU7OEJBRlgsZ0JBQWdCOztBQUdyQixtQ0FISyxnQkFBZ0IsNkNBR2YsTUFBTSxFQUFFOztBQUVkLFlBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3hDLGdCQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7QUFDRCxZQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7Ozs7QUFJbEMsWUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7S0FDdEI7O2lCQWJRLGdCQUFnQjs7ZUFlckIsY0FBQyxJQUFJLEVBQUU7QUFDUCxnQkFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDdEIsZ0JBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUM3QixnQkFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ2hDLGdCQUFJLENBQUMsT0FBTyxnQ0FBTyxJQUFJLENBQUMsT0FBTyxFQUFDLENBQUM7OztBQUdqQyxnQkFBSSxLQUFLLEdBQUcsaUJBQUksVUFBVSxDQUFDO0FBQzNCLGdCQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRztBQUN0Qix3QkFBUSxFQUFFO0FBQ04sd0JBQUksRUFBRSxtQkFBbUI7QUFDekIsNEJBQVEsRUFBRSxDQUFDO0FBQ1AsZ0NBQVEsRUFBRTtBQUNOLGdDQUFJLEVBQUUsU0FBUztBQUNmLHVDQUFXLEVBQUUsQ0FBQyxDQUNWLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUNsQixDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3ZDLENBQUM7eUJBQ0w7QUFDRCxrQ0FBVSxFQUFFLEVBQUU7cUJBQ2pCLENBQUM7aUJBQ0w7YUFDSixDQUFDOztBQUVGLGdCQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUM1QixtQkFBTyxTQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQzs7Ozs7ZUFHVyxxQkFBQyxJQUFJLEVBQUU7QUFDZixnQkFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDMUIsZ0JBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3JCLG9CQUFJLE1BQU0sR0FBRyxrQkFBSyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwRSxvQkFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFOLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDL0Msb0JBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUgsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBTixNQUFNLEVBQUUsQ0FBQzthQUNuRTtBQUNELG1CQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0I7OztXQXBEUSxnQkFBZ0I7Ozs7O0FBd0Q3Qix5QkFBVyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQkM1RHpCLGVBQWU7Ozs7dUJBQ1MsV0FBVzs7d0JBRXJDLFVBQVU7Ozs7Ozs7OztJQU9sQixjQUFjO2NBQWQsY0FBYzs7YUFBZCxjQUFjOzhCQUFkLGNBQWM7O21DQUFkLGNBQWM7Ozs7Ozs7O2lCQUFkLGNBQWM7O2VBRVAseUJBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7QUFDckMsZ0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEMsZ0JBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLGtCQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEM7OztlQUVTLG1CQUFDLElBQUksRUFBRTs7QUFFYixnQkFBSSxJQUFJLENBQUMsT0FBTyxJQUNaLGFBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDeEMsb0JBQUksS0FBSyxHQUFHLGFBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLG9CQUFJLEdBQUcsc0JBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDdEQ7O2lCQUVJO0FBQ0Qsd0JBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNoQix5QkFBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQzFCLDhCQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsc0JBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQzNEO0FBQ0Qsd0JBQUksR0FBRyxNQUFNLENBQUM7aUJBQ2pCO0FBQ0QsbUJBQU8sSUFBSSxDQUFDO1NBQ2Y7OztXQXhCUSxjQUFjOzs7OztJQWdDZCxrQkFBa0I7Y0FBbEIsa0JBQWtCOztBQUVoQixhQUZGLGtCQUFrQixDQUVmLE1BQU0sRUFBRTs4QkFGWCxrQkFBa0I7O0FBR3ZCLFlBQUksS0FBSyw4QkFISixrQkFBa0IsNkNBR0wsTUFBTSxDQUFDLENBQUM7OztBQUcxQixZQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7QUFDaEIsbUJBQU8sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7S0FDSjs7aUJBVFEsa0JBQWtCOztlQVdYLHlCQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQ3JDLGdCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLGdCQUFJLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEQsZ0JBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMzQzs7O1dBZlEsa0JBQWtCOzs7OztBQW1CL0IseUJBQVcsUUFBUSxDQUFDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BELHlCQUFXLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJDNURyQyxVQUFVOzs0QkFDSixpQkFBaUI7OzZCQUNoQixrQkFBa0I7OzJCQUM5QixvQkFBb0I7Ozs7OzsrQkFDVix3QkFBd0I7Ozs7aUNBQ3BCLDBCQUEwQjs7bUJBQ3ZDLFdBQVc7Ozs7MEJBQ1QsbUJBQW1COzs7O0FBRTlCLElBQUksS0FBSyxHQUFHLDRCQUFvQixDQUFDOzs7QUFFeEMsZUFBYyxLQUFLLEVBQUU7QUFDakIsUUFBSSxFQUFFLE9BQU87QUFDYixZQUFRLEVBQUUsSUFBSTtBQUNkLHFCQUFpQixFQUFFLGlDQUFpQztBQUNwRCx1QkFBbUIsRUFBRSxtQ0FBbUM7QUFDeEQsYUFBUyxFQUFFLElBQUk7O0FBRWYsUUFBSSxFQUFBLGdCQUFHO0FBQ0gscUJBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7OztBQUdsQyxZQUFJLE9BQU8sR0FBRyxDQUNWLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBRyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxFQUNqRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQUcsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFDaEUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHlCQUFHLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQ3pFLENBQUM7OztBQUdGLFlBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLFlBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDOzs7QUFHMUMsWUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hCLG1CQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHlCQUFHLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNsRzs7O0FBR0QsWUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hCLGdCQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQzs7O0FBRzNDLGdCQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixHQUFHLGlCQUFJLFVBQVUsQ0FBQzs7O0FBR3JELG1CQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBRyxjQUFjLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDNUY7O0FBRUQsWUFBSSxDQUFDLGFBQWEsR0FBRyxpQ0FBaUIsT0FBTyxDQUFDLENBQUM7Ozs7O0FBSy9DLFlBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFDaEMsWUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7S0FDbEQ7OztBQUdELGFBQVMsRUFBQyxtQkFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3ZCLGVBQU8sQUFBQyxLQUFLLElBQUksMEJBQVksYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSyxDQUFDLENBQUM7S0FDcEU7OztBQUdELHFCQUFpQixFQUFDLDJCQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDL0IsZUFBTyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2YsWUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekMsZUFBTyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2YsZUFBTyxHQUFHLENBQUM7S0FDZDs7QUFFRCxpQkFBYSxFQUFDLHVCQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFO0FBQ3pDLFlBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7OztBQUcvQixZQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEQsWUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ1gsbUJBQU87U0FDVjtBQUNELFlBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUV4RSxZQUFJLEFBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxVQUFVLEtBQUssQ0FBQyxJQUFLLFVBQVUsR0FBRyxDQUFDLEVBQUU7QUFDckQsbUJBQU87U0FDVjs7OztBQUlELGFBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7QUFDOUMsYUFBSyxDQUFDLFVBQVUsR0FBRyxBQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUksS0FBSyxDQUFDO0FBQzVDLGFBQUssQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQztBQUM1QyxhQUFLLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQzs7QUFFdEIsYUFBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekQsWUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7QUFDZCxtQkFBTztTQUNWOzs7QUFHRCxhQUFLLENBQUMsQ0FBQyxHQUFHLEFBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSwwQkFBWSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUssMEJBQVksUUFBUSxDQUFDLENBQUMsQ0FBQztBQUM1RyxhQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLDBCQUFZLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDeEUsYUFBSyxDQUFDLE9BQU8sR0FBRywwQkFBWSxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRSxZQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7QUFDZixnQkFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQ25DLHFCQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7YUFDaEMsTUFDSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ25DLHFCQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkM7U0FDSjs7O0FBR0QsWUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDL0IsaUJBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUMzQjs7QUFFRCxhQUFLLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFDM0IsYUFBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQzdCLGFBQUssQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztBQUMzQyxhQUFLLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7Ozs7QUFJekMsYUFBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkYsWUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFOzs7QUFHNUUsZ0JBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLGdCQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRTVGLGdCQUFJLEFBQUMsYUFBYSxLQUFLLENBQUMsSUFBSSxrQkFBa0IsS0FBSyxDQUFDLElBQUssYUFBYSxHQUFHLENBQUMsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLEVBQUU7O0FBRWxHLHFCQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLHFCQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLHFCQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7YUFDOUIsTUFDSTs7QUFFRCxxQkFBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDbEQscUJBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsR0FBRyxVQUFVLENBQUM7O0FBRWpFLHFCQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUMvQyxxQkFBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUM3RCxxQkFBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQztBQUNoRSxxQkFBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQztBQUNyRixxQkFBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQzs7O0FBRzVELG9CQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzFCLHlCQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUM1RSxNQUNJO0FBQ0QseUJBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7aUJBQ3JDOzs7QUFHRCxvQkFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ25DLHlCQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2lCQUNyQzs7O0FBR0QscUJBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQzthQUM5QjtTQUNKLE1BQ0k7QUFDRCxpQkFBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNqQyxpQkFBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0QyxpQkFBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQzlCOztBQUVELGVBQU8sS0FBSyxDQUFDO0tBQ2hCOztBQUVELGVBQVcsRUFBQyxxQkFBQyxJQUFJLEVBQUU7QUFDZixZQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFZLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RCxZQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFZLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLDBCQUFZLFVBQVUsQ0FBQyxDQUFDO0FBQ3pFLFlBQUksQ0FBQyxVQUFVLEdBQUcsMEJBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsMEJBQVksVUFBVSxDQUFDLENBQUM7QUFDOUUsWUFBSSxDQUFDLENBQUMsR0FBRywwQkFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSwwQkFBWSxVQUFVLENBQUMsQ0FBQzs7QUFFakUsWUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2QsZ0JBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLDBCQUFZLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEUsZ0JBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLDBCQUFZLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSwwQkFBWSxVQUFVLENBQUMsQ0FBQztBQUN6RixnQkFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsMEJBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLDBCQUFZLFVBQVUsQ0FBQyxDQUFDO1NBQ2pHO0FBQ0QsZUFBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0FBTUQsc0JBQWtCLEVBQUEsNEJBQUMsS0FBSyxFQUFFO0FBQ3RCLFlBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs7O0FBR1YsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O0FBR3pDLFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs7O0FBR3pELFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzs7QUFHOUIsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7OztBQUc3QyxZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCxZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7OztBQUdqRCxZQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEIsZ0JBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzRCxnQkFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNELGdCQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0QsZ0JBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUM5RDs7O0FBR0QsWUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hCLGdCQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLGdCQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2pDOztBQUVELGVBQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztLQUMvQjs7QUFFRCxjQUFVLEVBQUEsb0JBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTs7QUFFcEQsWUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7QUFDaEQsWUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ25GLGdCQUFJLGFBQWEsR0FBRyw0QkFBYSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3RCxnQkFBSSxhQUFhLEVBQUU7QUFDZiw2QkFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDckU7U0FDSjs7O0FBR0QsWUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7QUFDL0MsWUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JELCtDQUNJLEtBQUssRUFDTCxLQUFLLENBQUMsS0FBSyxFQUNYLFdBQVcsRUFDWCxlQUFlLEVBQ2Y7QUFDSSxlQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7QUFDZCxnQkFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0FBQ2hCLHVCQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7QUFDOUIseUJBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTO0FBQ2pELDZCQUFpQixFQUFFLHdCQUFNLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQzNDLDBCQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVTtBQUNuRCwwQkFBYyxFQUFFLElBQUksQ0FBQyxjQUFjO0FBQ25DLDhCQUFrQixFQUFFLEtBQUs7QUFDekIsMEJBQWMsRUFBRSxPQUFPLElBQUksT0FBTyxDQUFDLGNBQWM7QUFDakQsNkJBQWlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsaUJBQWlCO0FBQzVFLCtCQUFtQixFQUFFLGlCQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDO1NBQ25FLENBQ0osQ0FBQztLQUNMOztBQUVELGlCQUFhLEVBQUEsdUJBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFOztBQUVqRCxhQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwQyxnQkFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDaEg7S0FDSjs7Q0FFSixDQUFDLENBQUM7Ozs7Ozs7OztBQ2xSSCxJQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDbEQsSUFBTSxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ3RELElBQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM5QyxJQUFNLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7O0FBRTFELElBQUksV0FBVyxDQUFDOztxQkFFRCxXQUFXLEdBQUc7O0FBRXpCLGlCQUFhLEVBQUMsdUJBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDakMsWUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFO0FBQ2hDLG1CQUFPLE1BQU0sQ0FBQztTQUNqQjs7QUFFRCxZQUFJLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0FBR3JDLFlBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMzQixtQkFBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0IsTUFDSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDakMsbUJBQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzdCOzs7QUFHRCxZQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDMUIsbUJBQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzdCLE1BQ0ksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2xDLG1CQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3Qjs7QUFFRCxlQUFPLE9BQU8sQ0FBQztLQUNsQjs7QUFFRCxnQkFBWSxFQUFDLHNCQUFDLE1BQU0sRUFBRTtBQUNsQixlQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUU7S0FDdkM7O0FBRUQsaUJBQWEsRUFBQyx1QkFBQyxNQUFNLEVBQUU7QUFDbkIsZUFBUSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFFO0tBQ3hDOztBQUVELGVBQVcsRUFBQyxxQkFBQyxNQUFNLEVBQUU7QUFDakIsZUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFFO0tBQ3RDOztBQUVELGtCQUFjLEVBQUMsd0JBQUMsTUFBTSxFQUFFO0FBQ3BCLGVBQVEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRTtLQUN6Qzs7Q0FFSjs7Ozs7Ozs7Ozs7Ozs7Ozs7O3FCQ2xEbUIsVUFBVTs7NEJBQ0osaUJBQWlCOzsyQkFDNUIsb0JBQW9COzs7Ozs7K0JBQ1Ysd0JBQXdCOzs7OzhCQUNmLHVCQUF1Qjs7eUJBQ3JDLGtCQUFrQjs7OzttQkFDdEIsV0FBVzs7OzswQkFDVCxtQkFBbUI7Ozs7c0JBQ2xCLGNBQWM7Ozs7K0JBQ1gsd0JBQXdCOzs7O2lDQUN2QiwwQkFBMEI7Ozs7d0JBRWpDLFVBQVU7Ozs7QUFFbkIsSUFBSSxNQUFNLEdBQUcsNEJBQW9CLENBQUM7OztBQUV6QyxlQUFjLE1BQU0sRUFBRTtBQUNsQixRQUFJLEVBQUUsUUFBUTtBQUNkLFlBQVEsRUFBRSxJQUFJO0FBQ2QsYUFBUyxFQUFFLElBQUk7QUFDZixTQUFLLEVBQUUsU0FBUzs7QUFFaEIsUUFBSSxFQUFBLGdCQUFlO1lBQWQsT0FBTyx5REFBRyxFQUFFOztBQUNiLHFCQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDOzs7QUFHbEMsWUFBSSxDQUFDLGlCQUFpQixHQUFHLDZCQUE2QixDQUFDO0FBQ3ZELFlBQUksQ0FBQyxtQkFBbUIsR0FBRywrQkFBK0IsQ0FBQzs7QUFFM0QsWUFBSSxPQUFPLEdBQUcsQ0FDVixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQUcsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFDakUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHlCQUFHLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQzlELEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBRyxjQUFjLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxFQUMxRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQUcsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFDL0QsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHlCQUFHLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQ3pFLENBQUM7OztBQUdGLFlBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoQixtQkFBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBRyxhQUFhLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDbEc7OztBQUdELFlBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7QUFDMUIsZ0JBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1NBQzNDOztBQUVELFlBQUksQ0FBQyxhQUFhLEdBQUcsaUNBQWlCLE9BQU8sQ0FBQyxDQUFDOztBQUUvQyxZQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDZCxnQkFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7QUFDMUMsZ0JBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUNwRCxnQkFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDbEQ7O0FBRUQsWUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7S0FDcEI7O0FBRUQsU0FBSyxFQUFDLGlCQUFHO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7S0FDcEI7OztBQUdELGNBQVUsRUFBQyxvQkFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUNoQyxZQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDOzs7O0FBSXhCLFlBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdCLFlBQUksQ0FBQyxJQUFJLEVBQUU7QUFDUCxtQkFBTztTQUNWOztBQUVELFlBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLGFBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7QUFHbkQsWUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQy9CLG1CQUFPLElBQUksQ0FBQztTQUNmOztBQUVELFlBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsMEJBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkUsYUFBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDOzs7QUFHM0MsWUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLHVCQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksdUJBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDMUYsZ0JBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFO0FBQ2xDLHVCQUFPO2FBQ1YsTUFDSSxJQUFJLENBQUMsdUJBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7O0FBRXRELG9CQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7QUFDdEIsMEJBQU0sR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO0FBQzlCLHdCQUFJLENBQUMsdUJBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDakQsOENBQUksSUFBSSx3QkFBcUIsSUFBSSxDQUFDLElBQUksNENBQXFDLE1BQU0seUJBQWtCLElBQUksQ0FBQyxPQUFPLFFBQUksQ0FBQztBQUNwSCwrQkFBTztxQkFDVjtpQkFDSixNQUNJO0FBQ0QsMENBQUksSUFBSSx3QkFBcUIsSUFBSSxDQUFDLElBQUksb0NBQTZCLE1BQU0seUJBQWtCLElBQUksQ0FBQyxPQUFPLFFBQUksQ0FBQztBQUM1RywyQkFBTztpQkFDVjthQUNKO1NBQ0osTUFDSSxJQUFJLE1BQU0sRUFBRTtBQUNiLGtDQUFJLElBQUksd0JBQXFCLElBQUksQ0FBQyxJQUFJLHFCQUFjLE1BQU0sd0NBQWlDLElBQUksQ0FBQyxPQUFPLHVCQUFtQixDQUFDO0FBQzNILGtCQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ2pCOzs7QUFHRCxZQUFJLFdBQVcsWUFBQSxDQUFDO0FBQ2hCLFlBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLEVBQUU7QUFDeEIsdUJBQVcsR0FBRyx1QkFBUSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMxRCxpQkFBSyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO1NBQzNDLE1BQU07QUFDSCxpQkFBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDMUI7OztBQUdELGFBQUssQ0FBQyxDQUFDLEdBQUcsQUFBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLDBCQUFZLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFLLDBCQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUM7OztBQUczRixhQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdkIsWUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDYixnQkFBSSxXQUFXLEVBQUU7QUFDYixxQkFBSyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO2FBQ2pDLE1BQ0k7QUFDRCxxQkFBSyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUN6QjtTQUNKLE1BQ0k7QUFDRCxpQkFBSyxDQUFDLElBQUksR0FBRywwQkFBWSxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUMvRDs7O0FBR0QsYUFBSyxDQUFDLElBQUksR0FBRyxDQUNULElBQUksQ0FBQyxHQUFHLENBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFHLEdBQUcsQ0FBQyxFQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRyxHQUFHLENBQUMsQ0FDL0MsQ0FBQzs7QUFFRixhQUFLLENBQUMsS0FBSyxHQUFHLDBCQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7OztBQUk3RCxhQUFLLENBQUMsUUFBUSxHQUFHLEFBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEdBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7O0FBRWhFLFlBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDOzs7QUFHeEQsWUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLGdCQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCOztBQUVELFlBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN4QixnQkFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzlCOztBQUVELFlBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2QixtQkFBTyxFQUFQLE9BQU8sRUFBRSxJQUFJLEVBQUosSUFBSSxFQUFFLE9BQU8sRUFBUCxPQUFPLEVBQUUsS0FBSyxFQUFMLEtBQUs7U0FDaEMsQ0FBQyxDQUFDOzs7QUFHSCxxQ0FBVSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDM0M7OztBQUdELFdBQU8sRUFBQyxpQkFBQyxJQUFJLEVBQUU7OztBQUNYLFlBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNmLG9DQUFNLEdBQUcsQ0FBQyxPQUFPLGFBQVcsSUFBSSxDQUFDLElBQUkscURBQWdELElBQUksQ0FBQyxHQUFHLENBQUcsQ0FBQztBQUNqRyxtQkFBTztTQUNWOztBQUVELFlBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLFlBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7O0FBRzNCLFlBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLGFBQUssQ0FBQyxPQUFPLENBQUMsVUFBQSxDQUFDLEVBQUk7QUFDZixnQkFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNwQixnQkFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN4QixnQkFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQzs7QUFFaEMsZ0JBQUksY0FBYyxHQUFHLE1BQUssdUJBQXVCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0UsaUJBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLG9CQUFJLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIscUJBQUssQ0FBQyxJQUFJLENBQUM7QUFDUCwyQkFBTyxFQUFQLE9BQU87QUFDUCx3QkFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO0FBQ1osMkJBQU8sRUFBRSxDQUFDLENBQUMsT0FBTztBQUNsQix5QkFBSyxFQUFMLEtBQUs7QUFDTCwwQkFBTSxFQUFFLEtBQUs7QUFDYix5QkFBSyxFQUFMLEtBQUs7aUJBQ1IsQ0FBQyxDQUFDO2FBQ047U0FDSixDQUFDLENBQUM7OztBQUdILGVBQU8sNkJBQVUsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQSxLQUFLLEVBQUk7QUFDL0QsaUJBQUssQ0FBQyxPQUFPLENBQUMsVUFBQSxDQUFDLEVBQUk7QUFDZixzQkFBSyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM3QixzQkFBSyxhQUFhLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7O0FBRW5DLDZCQUFNLFVBQVUsQ0FBQyxJQUFJLFFBQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM3RCxDQUFDLENBQUM7O0FBRUgsbUJBQU8sYUFBTSxPQUFPLENBQUMsSUFBSSxRQUFPLElBQUksQ0FBQyxDQUFDO1NBQ3pDLENBQUMsQ0FBQztLQUNOOztBQUVELGVBQVcsRUFBQyxxQkFBQyxJQUFJLEVBQUU7QUFDZixZQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFZLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RCxZQUFJLENBQUMsQ0FBQyxHQUFHLDBCQUFZLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLDBCQUFZLFVBQVUsQ0FBQyxDQUFDOzs7QUFHakUsWUFBSSxDQUFDLElBQUksR0FBRywwQkFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFBLENBQUM7bUJBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FBQSxDQUFDLENBQUM7OztBQUcxRyxZQUFJLENBQUMsTUFBTSxHQUFHLDBCQUFZLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQUEsQ0FBQzttQkFBSSxBQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSyxDQUFDO1NBQUEsQ0FBQyxDQUFDOzs7QUFHdEcsWUFBSSxDQUFDLE1BQU0sR0FBRywwQkFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFBLENBQUM7bUJBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQSxDQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1NBQUEsQ0FBQyxDQUFDOztBQUU5RyxlQUFPLElBQUksQ0FBQztLQUNmOzs7QUFHRCxpQkFBYSxFQUFDLHVCQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7QUFDakQsWUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUMxQixjQUFNLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNwQixjQUFNLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDOzs7QUFHbkQsY0FBTSxDQUFDLE9BQU8sR0FBRyxBQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxHQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7Ozs7O0FBS3pELGNBQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0FBRzVCLGNBQU0sQ0FBQyxNQUFNLEdBQUcsMEJBQVksYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksMEJBQVksUUFBUSxDQUFDO0FBQ3hGLGNBQU0sQ0FBQyxNQUFNLEdBQUcsMEJBQVksYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksMEJBQVksUUFBUSxDQUFDOzs7QUFHeEYsWUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM3QixZQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7QUFDbEIsZ0JBQUksT0FBTyxRQUFRLEtBQUssVUFBVSxFQUFFO0FBQ2hDLHdCQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2hDO1NBQ0osTUFDSTtBQUNELG9CQUFRLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZCO0FBQ0QsY0FBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7O0FBRTNCLGVBQU8sTUFBTSxDQUFDO0tBQ2pCOzs7QUFHRCwyQkFBdUIsRUFBQyxpQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtBQUM5QyxZQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7O0FBRWhCLFlBQUksUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDM0Isa0JBQU0sQ0FBQyxJQUFJLENBQUMsbUNBQWUsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNwRSxNQUNJLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUU7QUFDckMsZ0JBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7QUFDbEMsaUJBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3BDLG9CQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsc0JBQU0sQ0FBQyxJQUFJLENBQUMsbUNBQWUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3JEO1NBQ0osTUFDSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFOztBQUVyQyxnQkFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztBQUNsQyxpQkFBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEMsc0JBQU0sQ0FBQyxJQUFJLENBQUMsbUNBQWUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3pEO1NBQ0osTUFDSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLEVBQUU7O0FBRTFDLGdCQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0FBQ2pDLGlCQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUN0QyxvQkFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLHFCQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwQywwQkFBTSxDQUFDLElBQUksQ0FBQyxtQ0FBZSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ3pEO2FBQ0o7U0FDSixNQUNJLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7O0FBRWxDLGdCQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7QUFDbEIsb0JBQUksUUFBUSxHQUFHLGlCQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQsc0JBQU0sQ0FBQyxJQUFJLENBQUMsbUNBQWUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3hEOztpQkFFSTtBQUNELHdCQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0FBQ2pDLHlCQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUN0Qyw0QkFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLDZCQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwQyxrQ0FBTSxDQUFDLElBQUksQ0FBQyxtQ0FBZSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7eUJBQ3pEO3FCQUNKO2lCQUNKO1NBQ0osTUFDSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFO0FBQ3ZDLGdCQUFJLFFBQVEsR0FBRyxpQkFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3ZELGtCQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFlLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUN4RDs7QUFFRCxlQUFPLE1BQU0sQ0FBQztLQUNqQjs7Ozs7O0FBTUQsc0JBQWtCLEVBQUEsNEJBQUMsS0FBSyxFQUFFO0FBQ3RCLFlBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksMEJBQVksUUFBUSxDQUFDLEtBQUssQ0FBQzs7O0FBR3RELFlBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEQsWUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBRTVFLFlBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7QUFHNUYsWUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0FBR25ELFlBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7OztBQUd0RCxZQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7QUFHcEQsWUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxvQkFBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7OztBQUd6RSxZQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEIsZ0JBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBRSxvQkFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3RHOztBQUVELGVBQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztLQUMvQjs7QUFFRCxhQUFTLEVBQUMsbUJBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFO0FBQ2xGLGlEQUNJLE1BQU0sRUFDTixXQUFXLEVBQ1gsZUFBZSxFQUNmO0FBQ0ksMEJBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVO0FBQ25ELDBCQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVTtBQUNuRCx1QkFBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU87QUFDN0Msd0JBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRO1NBQ2xELEVBQ0Q7QUFDSSxnQkFBSSxFQUFFLENBQUUsd0JBQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSx3QkFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFFO0FBQ3hFLHNCQUFVLEVBQUUsd0JBQU0sVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7QUFDcEMsa0JBQU0sRUFBTixNQUFNO0FBQ04saUJBQUssRUFBRSx3QkFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztBQUNuQywwQkFBYyxFQUFFLGNBQWM7QUFDOUIsOEJBQWtCLEVBQUUsS0FBSztTQUM1QixDQUNKLENBQUM7S0FDTDs7O0FBR0QsU0FBSyxFQUFDLGVBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRTtBQUN2QixZQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckQsWUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQzs7QUFFeEIsWUFBSSxDQUFDLFNBQVMsQ0FDVixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDaEIsYUFBSyxDQUFDLElBQUk7QUFDVixhQUFLLENBQUMsS0FBSztBQUNYLGFBQUssQ0FBQyxPQUFPLENBQUMsTUFBTTtBQUNwQixhQUFLLENBQUMsU0FBUztBQUNmLG1CQUFXLEVBQUUsZUFBZTtTQUMvQixDQUFDO0tBQ0w7OztBQUdELGNBQVUsRUFBQyxvQkFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtBQUNuQyxZQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztLQUNsQzs7QUFFRCxlQUFXLEVBQUMscUJBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7QUFDckMsWUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDbEM7O0FBRUQsaUJBQWEsRUFBQyx1QkFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtBQUN2QyxZQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztLQUNsQzs7Q0FFSixDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O3FCQzlZaUIsVUFBVTs7NEJBQ0osaUJBQWlCOzsyQkFDNUIsb0JBQW9COzs7Ozs7K0JBQ1Ysd0JBQXdCOzs7O2dDQUNFLHlCQUF5Qjs7bUJBQzVELFdBQVc7Ozs7QUFFcEIsSUFBSSxRQUFRLEdBQUcsNEJBQW9CLENBQUM7OztBQUUzQyxlQUFjLFFBQVEsRUFBRTtBQUNwQixRQUFJLEVBQUUsVUFBVTtBQUNoQixZQUFRLEVBQUUsSUFBSTtBQUNkLHFCQUFpQixFQUFFLGlDQUFpQztBQUNwRCx1QkFBbUIsRUFBRSxtQ0FBbUM7QUFDeEQsYUFBUyxFQUFFLElBQUk7O0FBRWYsUUFBSSxFQUFBLGdCQUFHO0FBQ0gscUJBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7OztBQUdsQyxZQUFJLE9BQU8sR0FBRyxDQUNWLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBRyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxFQUNqRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQUcsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7QUFDOUQsVUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHlCQUFHLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQ3pFLENBQUM7OztBQUdGLFlBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0FBQzdDLFlBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDOzs7QUFHeEMsWUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hCLG1CQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHlCQUFHLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNsRzs7O0FBR0QsWUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hCLGdCQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQzs7O0FBRzNDLG1CQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBRyxjQUFjLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDNUY7O0FBRUQsWUFBSSxDQUFDLGFBQWEsR0FBRyxpQ0FBaUIsT0FBTyxDQUFDLENBQUM7S0FDbEQ7O0FBRUQsaUJBQWEsRUFBQyx1QkFBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRTtBQUN6QyxZQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDOztBQUUvQixhQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6RCxZQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtBQUNkLG1CQUFPLElBQUksQ0FBQztTQUNmOzs7QUFHRCxhQUFLLENBQUMsQ0FBQyxHQUFHLEFBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSwwQkFBWSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSywwQkFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3ZHLGFBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksMEJBQVksUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUN4RSxhQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLDBCQUFZLFFBQVEsQ0FBQyxVQUFVLENBQUM7QUFDcEYsYUFBSyxDQUFDLE9BQU8sR0FBRywwQkFBWSxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRSxZQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7QUFDZixnQkFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQ25DLHFCQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7YUFDaEMsTUFDSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ25DLHFCQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMscUJBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuQztTQUNKOztBQUVELGFBQUssQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQWdCekMsZUFBTyxLQUFLLENBQUM7S0FDaEI7O0FBRUQsZUFBVyxFQUFDLHFCQUFDLElBQUksRUFBRTtBQUNmLFlBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQVksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RELFlBQUksQ0FBQyxDQUFDLEdBQUcsMEJBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsMEJBQVksVUFBVSxDQUFDLENBQUM7QUFDakUsZUFBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0FBTUQsc0JBQWtCLEVBQUEsNEJBQUMsS0FBSyxFQUFFO0FBQ3RCLFlBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs7O0FBR1YsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O0FBR3pDLFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs7O0FBR3pELFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7O0FBR3BDLFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCxZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsWUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELFlBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7O0FBR2pELFlBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoQixnQkFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNELGdCQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0QsZ0JBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzRCxnQkFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQzlEOzs7QUFHRCxZQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEIsZ0JBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsZ0JBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakM7O0FBRUQsZUFBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0tBQy9COztBQUVELGlCQUFhLEVBQUEsdUJBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQ2pELFlBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRCxZQUFJLE9BQU8sR0FBRztBQUNWLDBCQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVTtBQUNuRCwwQkFBYyxFQUFFLElBQUksQ0FBQyxjQUFjO0FBQ25DLDhCQUFrQixFQUFFLEtBQUs7QUFDekIsNkJBQWlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVTtBQUNwQywrQkFBbUIsRUFBRSxpQkFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQztBQUNoRSxtQkFBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1NBQzNCLENBQUM7OztBQUdGLFlBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQy9CLHlEQUNJLFFBQVEsRUFDUixLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFDdkMsV0FBVyxFQUFFLGVBQWUsRUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUNqQyxHQUFHO0FBQ0gsbUJBQU8sQ0FDVixDQUFDO1NBQ0w7O2FBRUk7QUFDRCxxREFDSSxRQUFRLEVBQ1IsV0FBVyxFQUFFLGVBQWUsRUFDNUIsT0FBTyxDQUNWLENBQUM7YUFDTDtLQUNKOztDQUVKLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OzRCQ3pLdUIsaUJBQWlCOztnQ0FDcEIsc0JBQXNCOztBQUV0QyxJQUFJLFdBQVcsR0FBRywwQ0FBdUIsQ0FBQzs7O0FBRWpELGVBQWMsV0FBVyxFQUFFO0FBQ3ZCLFFBQUksRUFBRSxRQUFRO0FBQ2QsdUNBQWU7QUFDZixZQUFRLEVBQUUsSUFBSTtBQUNkLGFBQVMsRUFBRSxLQUFLOztBQUVoQixRQUFJLEVBQUEsZ0JBQUc7O0FBRUgsWUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQzs7QUFFckMsWUFBSSxTQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDMUM7O0FBRUQsZUFBVyxFQUFDLHFCQUFDLElBQUksRUFBRTs7QUFFZixZQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksMEJBQVksUUFBUSxDQUFDLEtBQUssQ0FBQztBQUN0RCxlQUFPLElBQUksU0FBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ3hEOztDQUVKLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NkJDMUJrQixpQkFBaUI7OzBCQUNiLGdCQUFnQjs7Ozs0QkFDckIsZUFBZTs7d0JBQ25CLFVBQVU7Ozs7QUFFbkIsSUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQzs7O0FBRXhELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQzs7O0FBRTFCLFNBQVMsUUFBUSxDQUFFLEtBQUssRUFBRTtBQUN0QixRQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xCLFlBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixhQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqQyxhQUFDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2Qjs7QUFFRCxlQUFPLENBQUMsQ0FBQztLQUNaO0FBQ0QsV0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbkI7Ozs7QUFHTSxTQUFTLFVBQVUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFO0FBQzdDLFFBQUksS0FBSyxZQUFBO1FBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQzs7QUFFekIsUUFBSSxJQUFJLEdBQUc7QUFDUCxlQUFPLEVBQUUsSUFBSTtLQUNoQixDQUFDOzs7QUFHRixTQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxZQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFO0FBQ3JDLHFCQUFTLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUN2QztLQUNKOzs7QUFHRCxRQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDakIsZUFBTyxJQUFJLENBQUM7S0FDZjs7OzswQkFHUSxDQUFDOztBQUVOLGFBQUssR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQUEsSUFBSTttQkFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUFBLENBQUMsQ0FBQztBQUM3RCxZQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3BCLDhCQUFTO1NBQ1o7Ozs7QUFJRCxhQUFLLENBQUMsSUFBSSxDQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUM7bUJBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQSxJQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFBLEFBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQUEsQ0FBQyxDQUFDOzs7QUFHekUsa0RBQWEsSUFBSSw0QkFBSyxLQUFLLEdBQUMsQ0FBQzs7OztBQUk3QixlQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7OztBQWhCM0IsU0FBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTt5QkFBekIsQ0FBQzs7aUNBSUYsU0FBUztLQWFoQjs7O0FBR0QsUUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRTtBQUN4QixlQUFPLElBQUksQ0FBQztLQUNmOztBQUVELFdBQU8sSUFBSSxDQUFDO0NBQ2Y7O0lBR0ssSUFBSTtBQUVLLGFBRlQsSUFBSSxDQUVNLElBQXFDLEVBQUU7WUFBdEMsSUFBSSxHQUFMLElBQXFDLENBQXBDLElBQUk7WUFBRSxNQUFNLEdBQWIsSUFBcUMsQ0FBOUIsTUFBTTtZQUFFLElBQUksR0FBbkIsSUFBcUMsQ0FBdEIsSUFBSTtZQUFFLE9BQU8sR0FBNUIsSUFBcUMsQ0FBaEIsT0FBTztZQUFFLE1BQU0sR0FBcEMsSUFBcUMsQ0FBUCxNQUFNOzs4QkFGOUMsSUFBSTs7QUFHRixZQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNwQixZQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixZQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixZQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUNyRixZQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixZQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixZQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sS0FBSyxTQUFTLEdBQUcsT0FBTyxHQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEFBQUMsQ0FBQzs7O0FBR3RGLFlBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNYLGlCQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDekIsb0JBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUMsb0JBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDaEQ7U0FDSjs7QUFFRCxZQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkIsWUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQ3BCOztpQkFyQkMsSUFBSTs7ZUF1QkcscUJBQUc7QUFDUixnQkFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0M7OztlQUVVLHVCQUFHO0FBQ1YsZ0JBQUksSUFBSSxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QixnQkFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUU7O0FBRWpFLG9CQUFJLEdBQUcseUJBQXVCLElBQUksQ0FBQyxTQUFTLDhEQUEyRCxDQUFDO0FBQ3hHLG1CQUFHLGlDQUFnQyxJQUFJLENBQUMsTUFBTSxjQUFZLENBQUM7QUFDM0Qsc0NBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsdUJBQU87YUFDVjs7QUFFRCxnQkFBSTtBQUNBLG9CQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDbEIsb0JBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSx5QkFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkQsQ0FDRCxPQUFNLENBQUMsRUFBRTs7QUFFTCxvQkFBSSxHQUFHLHlCQUF1QixJQUFJLENBQUMsU0FBUyw4QkFBMEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQUssQ0FBQztBQUN2RyxtQkFBRywyQkFBeUIsQ0FBQyxDQUFDLE9BQU8sVUFBSyxDQUFDLENBQUMsS0FBSyxBQUFFLENBQUM7QUFDcEQsc0NBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2pCO1NBQ0o7Ozs7O2VBR1Msc0JBQUc7QUFDVCxnQkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUM1QyxnQkFBSSxLQUFLLEdBQUcsT0FBTyxJQUFJLENBQUM7QUFDeEIsZ0JBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssVUFBVSxFQUFFOztBQUN0QyxvQkFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7O0FBRWhCLG9CQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDcEIsd0JBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUMzQixNQUNJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMxQix5QkFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEMsNEJBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO3FCQUM5QjtpQkFDSixNQUNJLElBQUksS0FBSyxLQUFLLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQSxBQUFDLEVBQUU7QUFDbkUsd0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3pCLHdCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUMxQix5QkFBSyxJQUFJLENBQUMsR0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1Qiw0QkFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7cUJBQ3hCO2lCQUNKOztBQUVELHVCQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQzVCO1NBQ0o7OztlQUVLLGtCQUFHO0FBQ0wsbUJBQU87QUFDSCxvQkFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2Ysb0JBQUksRUFBRSxJQUFJLENBQUMsSUFBSTthQUNsQixDQUFDO1NBQ0w7OztXQWpGQyxJQUFJOzs7QUFxRlYsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7O0lBR0MsUUFBUTtjQUFSLFFBQVE7O0FBQ04sYUFERixRQUFRLENBQ0wsS0FBcUMsRUFBRTtZQUF0QyxJQUFJLEdBQUwsS0FBcUMsQ0FBcEMsSUFBSTtZQUFFLE1BQU0sR0FBYixLQUFxQyxDQUE5QixNQUFNO1lBQUUsSUFBSSxHQUFuQixLQUFxQyxDQUF0QixJQUFJO1lBQUUsT0FBTyxHQUE1QixLQUFxQyxDQUFoQixPQUFPO1lBQUUsTUFBTSxHQUFwQyxLQUFxQyxDQUFQLE1BQU07OzhCQUR2QyxRQUFROztBQUViLG1DQUZLLFFBQVEsNkNBRVAsRUFBQyxJQUFJLEVBQUosSUFBSSxFQUFFLE1BQU0sRUFBTixNQUFNLEVBQUUsSUFBSSxFQUFKLElBQUksRUFBRSxPQUFPLEVBQVAsT0FBTyxFQUFFLE1BQU0sRUFBTixNQUFNLEVBQUMsRUFBRTtLQUNoRDs7V0FIUSxRQUFRO0dBQVMsSUFBSTs7OztJQU9yQixRQUFRO2NBQVIsUUFBUTs7QUFDTixhQURGLFFBQVEsQ0FDTCxLQUE0QyxFQUFFO1lBQTdDLElBQUksR0FBTCxLQUE0QyxDQUEzQyxJQUFJO1lBQUUsTUFBTSxHQUFiLEtBQTRDLENBQXJDLE1BQU07WUFBRSxJQUFJLEdBQW5CLEtBQTRDLENBQTdCLElBQUk7WUFBRSxPQUFPLEdBQTVCLEtBQTRDLENBQXZCLE9BQU87WUFBRSxLQUFLLEdBQW5DLEtBQTRDLENBQWQsS0FBSztZQUFFLE1BQU0sR0FBM0MsS0FBNEMsQ0FBUCxNQUFNOzs4QkFEOUMsUUFBUTs7QUFFYixtQ0FGSyxRQUFRLDZDQUVQLEVBQUMsSUFBSSxFQUFKLElBQUksRUFBRSxNQUFNLEVBQU4sTUFBTSxFQUFFLElBQUksRUFBSixJQUFJLEVBQUUsT0FBTyxFQUFQLE9BQU8sRUFBRSxNQUFNLEVBQU4sTUFBTSxFQUFDLEVBQUU7QUFDN0MsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0tBQzVCOztpQkFKUSxRQUFROztlQU1WLGlCQUFDLElBQUksRUFBRTtBQUNWLGdCQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6Qjs7O2VBRWMseUJBQUMsT0FBTyxFQUFFO0FBQ3JCLGdCQUFJLEtBQUssR0FBRyxFQUFFO2dCQUFFLFFBQVEsR0FBRyxFQUFFLENBQUM7O0FBRTlCLHdCQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztBQUUvQyxnQkFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNsQixvQkFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7O0FBSW5DLG9CQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxTQUFTLEVBQUU7O0FBRXBDLHdCQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQzsrQkFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLGNBQWM7cUJBQUEsQ0FBQyxDQUFDO0FBQzlFLHdCQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7O0FBRW5CLHlCQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0Qyw0QkFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLDRCQUFJLENBQUMsSUFBSSxFQUFFO0FBQ1AscUNBQVM7eUJBQ1o7QUFDRCw2QkFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEMsZ0NBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixpQ0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUU7QUFDbkIseUNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7NkJBQ3pCO3lCQUNKO3FCQUNKOzs7QUFHRCx5QkFBSyxJQUFJLFFBQVEsSUFBSSxTQUFTLEVBQUU7QUFDNUIsaUNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xELGlDQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQzs7O0FBR2xFLDRCQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ2pDLG1DQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzt5QkFDekMsTUFDSTtBQUNELHFDQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQ2hFLHFDQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDO3VDQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUzs2QkFBQSxDQUFDLENBQUM7eUJBQzVFO3FCQUNKOzs7QUFHRCx3QkFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksYUFBWSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3hFLGlDQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO3FCQUMvQjtpQkFDSjtBQUNELHVCQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMvQjtTQUNKOzs7V0E1RFEsUUFBUTtHQUFTLElBQUk7Ozs7QUFnRWxDLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRTtBQUN4QixXQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDdEM7O0FBRUQsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQ2xCLFdBQU8sYUFBWSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0NBQ3hDOztBQUVNLFNBQVMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7O0FBRTdCLFFBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNiLGNBQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzNCOztBQUVELE1BQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNaOztBQUVNLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7O0FBRS9CLFFBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNaLFlBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQUMsQ0FBQyxFQUFLO0FBQ3RCLG9CQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ25CLENBQUMsQ0FBQztLQUNOOztBQUVELE1BQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNaOztBQUVNLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUM1QixRQUFJLFdBQVcsR0FBRyxFQUFFO1FBQUUsY0FBYyxHQUFHLEVBQUUsQ0FBQzs7QUFFMUMsU0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7QUFDakIsWUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDcEIsdUJBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDL0IsTUFBTTtBQUNILDBCQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO0tBQ0o7QUFDRCxXQUFPLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0NBQ3hDOztBQUVNLFNBQVMsYUFBYSxDQUFDLElBQUksRUFBRTs7QUFFaEMsUUFBSSxJQUFJLEdBQUksRUFBRSxDQUFDOztBQUVmLFFBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNiLFlBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztBQUMxQyxZQUFJLENBQUMsSUFBSSxNQUFBLENBQVQsSUFBSSxxQkFBUyxFQUFFLEVBQUMsQ0FBQztLQUNwQjs7QUFFRCxRQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixXQUFPLElBQUksQ0FBQztDQUNmOztBQUVNLFNBQVMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFOztBQUU5QyxRQUFJLFVBQVUsR0FBRyxFQUFDLElBQUksRUFBSixJQUFJLEVBQUUsTUFBTSxFQUFOLE1BQU0sRUFBQyxDQUFDOztzQkFDSSxVQUFVLENBQUMsSUFBSSxDQUFDOzs7O1FBQS9DLFdBQVc7UUFBRSxjQUFjOztBQUNoQyxRQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDcEMsUUFBSSxNQUFNLFlBQUEsQ0FBQzs7QUFFWCxRQUFJLEtBQUssSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGNBQU0sR0FBRyxRQUFRLENBQUM7S0FDckIsTUFBTTtBQUNILGNBQU0sR0FBRyxRQUFRLENBQUM7S0FDckI7O0FBRUQsUUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsZUFBYyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQzs7QUFFM0QsUUFBSSxNQUFNLEVBQUU7QUFDUixjQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFFBQUksQ0FBQyxLQUFLLEVBQUU7QUFDUixhQUFLLElBQUksR0FBRyxJQUFJLGNBQWMsRUFBRTtBQUM1QixnQkFBSSxRQUFRLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLGdCQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDMUQsNkJBQWEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ25DLE1BQU07O0FBRUgsb0JBQUksR0FBRyw2REFBeUQsR0FBRyxVQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQUcsQ0FBQztBQUNwRyxtQkFBRyxnQ0FBNkIsQ0FBQyxDQUFDLFNBQVMsUUFBSSxDQUFDOzs7QUFHaEQsb0JBQUksc0JBQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2hCLHVCQUFHLHVCQUFvQixDQUFDLENBQUMsSUFBSSw0RUFBc0UsQ0FBQztBQUNwRyx3QkFBSSxNQUFNLEVBQUU7QUFDUiwyQkFBRyxrQkFBZSxNQUFNLENBQUMsSUFBSSxPQUFHLENBQUM7cUJBQ3BDO0FBQ0QsdUJBQUcsZUFBZSxDQUFDO2lCQUN0QjtBQUNELHNDQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNqQjtTQUNKO0tBRUo7O0FBRUQsV0FBTyxDQUFDLENBQUM7Q0FDWjs7QUFHTSxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUU7QUFDOUIsUUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDOztBQUVuQixTQUFLLElBQUksR0FBRyxJQUFJLEtBQUssRUFBRTtBQUNuQixZQUFJLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsWUFBSSxJQUFJLEVBQUU7QUFDTixxQkFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDN0M7S0FDSjs7QUFFRCxXQUFPLFNBQVMsQ0FBQztDQUNwQjs7QUFHRCxTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFOztBQUU5QixRQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDakQsZUFBTyxLQUFLLENBQUM7S0FDaEI7O0FBRUQsV0FBUSxBQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQUFBQyxDQUFFO0NBQ2pHOztBQUVNLFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFO0FBQzVFLFFBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNwQixRQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7O0FBRXpCLFFBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFBRSxlQUFPO0tBQUU7O0FBRW5DLFNBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pDLFlBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFdkIsWUFBSSxPQUFPLFlBQVksUUFBUSxFQUFFOztBQUU3QixnQkFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQzdCLHVCQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ2YsOEJBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsaUNBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN0QztTQUVKLE1BQU0sSUFBSSxPQUFPLFlBQVksUUFBUSxFQUFFO0FBQ3BDLGdCQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDN0IsdUJBQU8sR0FBRyxJQUFJLENBQUM7O0FBRWYsNEJBQVksR0FBRyxZQUFZLENBQ3ZCLE9BQU8sRUFDUCxPQUFPLENBQUMsS0FBSyxFQUNiLGNBQWMsRUFDZCxpQkFBaUIsQ0FDcEIsQ0FBQzs7QUFFRixvQkFBSSxDQUFDLFlBQVksRUFBRTtBQUNmLGtDQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLHFDQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3RDO2FBQ0o7U0FDSjtLQUNKOztBQUVELFdBQU8sT0FBTyxDQUFDO0NBQ2xCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs0QkNwWXlCLGdCQUFnQjs7eUJBQ2IsY0FBYzs7OztnQ0FDakIsc0JBQXNCOzs7OzBCQUM1QixnQkFBZ0I7Ozs7eUJBQ2hCLGVBQWU7Ozs7d0JBQ2QsYUFBYTs7OztxQkFDaEIsVUFBVTs7Ozs2QkFDRyxtQkFBbUI7O2dDQUN4QixzQkFBc0I7Ozs7OzswQkFDOUIsZ0JBQWdCOzs7O2tDQUNULHdCQUF3Qjs7Ozt3QkFFakMsVUFBVTs7Ozs7O0FBSW5CLElBQUksS0FBSyxHQUFHO0FBQ2YsUUFBSSxFQUFDLGdCQUFvQzt5RUFBSixFQUFFOztZQUEvQixVQUFVLFFBQVYsVUFBVTtnQ0FBRSxPQUFPO1lBQVAsT0FBTyxnQ0FBRyxFQUFFOztBQUM1QixZQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFO0FBQ25CLGdCQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN6Qjs7QUFFRCxZQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUM3QixZQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUN2QixZQUFJLENBQUMsT0FBTyxHQUFHLEFBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFLLEVBQUUsQ0FBQztBQUN0RSxZQUFJLENBQUMsT0FBTyxHQUFHLEFBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFLLEVBQUUsQ0FBQztBQUN0RSxZQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO0FBQ3pDLFlBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLFlBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLFlBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLFlBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDOUIsWUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDeEIsWUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDMUIsWUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7OztBQUdwQixZQUFJLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDL0MsWUFBSSx3QkFBTSxZQUFZLEVBQUU7QUFDcEIsNENBQWEsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN6RDs7O0FBR0QsWUFBSSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsR0FBRyxNQUFNLENBQUM7OztBQUdsRCxZQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDO0FBQ3BDLFlBQUksQ0FBQyxPQUFPLG9CQUFrQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2pFLFlBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7O0FBQzFCLGdCQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3pCOzs7QUFHRCxZQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsa0NBQW9CLEFBQUMsRUFBRTtBQUN0QyxnQkFBSSxDQUFDLHNCQUFTLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDbEMsb0JBQUksQ0FBQyxRQUFRLEdBQUcsMEJBQVksUUFBUSxDQUFDLFFBQVEsQ0FBQzthQUNqRDtBQUNELGdCQUFJLENBQUMsUUFBUSxHQUFHLDBCQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMvQztBQUNELFlBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7QUFHM0IsMkJBQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7OztBQUduQyxZQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7O0FBRXBCLFlBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0tBQzNCOztBQUVELFdBQU8sRUFBQyxtQkFBRztBQUNQLFlBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNkLGdCQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZCLGdCQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUN2Qjs7QUFFRCxZQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUN4QixnQkFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2pDLGdCQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1NBQ2pDOztBQUVELFlBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2YsWUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7S0FDNUI7O0FBRUQsU0FBSyxFQUFDLGlCQUFHLEVBQ1I7O0FBRUQsYUFBUyxFQUFDLHFCQUFHO0FBQ1QsZUFBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7S0FDM0Q7O0FBRUQsc0JBQWtCLEVBQUEsNEJBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFnQixFQUFFO1lBQWhCLElBQUksR0FBTixLQUFnQixDQUFkLElBQUk7WUFBRSxNQUFNLEdBQWQsS0FBZ0IsQ0FBUixNQUFNOztBQUMvQyxjQUFNLEdBQUcsQUFBQyxNQUFNLEtBQUssU0FBUyxHQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7O0FBRTdDLFlBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2hELFlBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUNyQixrQ0FBSSxJQUFJLHdCQUFxQixJQUFJLENBQUMsSUFBSSw0REFBcUQsU0FBUyxRQUFJLENBQUM7QUFDekcsbUJBQU87U0FDVjs7QUFFRCxhQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzNCLGdCQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzVDLGdCQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hEO0tBQ0o7Ozs7O0FBS0QsYUFBUyxFQUFDLG1CQUFDLElBQUksRUFBRTtBQUNiLFlBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ3ZCLHVCQUFXLEVBQUUsSUFBSTtBQUNqQixvQkFBUSxFQUFFLEVBQUU7QUFDWixvQkFBUSxFQUFFLEVBQUU7U0FDZixDQUFDO0FBQ0YsZUFBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNuQzs7O0FBR0QsV0FBTyxFQUFDLGlCQUFDLElBQUksRUFBRTtBQUNYLFlBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLFlBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQzs7QUFFaEMsWUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUU7O0FBRTlFLHFCQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVCLHFCQUFTLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDOzs7O0FBSXJELG1CQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDO3VCQUFNLFNBQVM7YUFBQSxDQUFDLENBQUM7U0FDMUUsTUFDSTtBQUNELG1CQUFPLFNBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO0tBQ0o7OztBQUdELGtCQUFjLEVBQUMsd0JBQUMsUUFBUSxFQUFFO0FBQ3RCLGVBQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUM7S0FDM0M7O0FBRUQsY0FBVSxFQUFDLG9CQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ2hDLFlBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsWUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDckMsbUJBQU87U0FDVjs7QUFFRCxZQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDM0IsZ0JBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEI7O0FBRUQsWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDOzs7QUFHckQsWUFBSSxDQUFDLEtBQUssRUFBRTtBQUNSLG1CQUFPO1NBQ1Y7OztBQUdELFlBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUU7QUFDdkMsZ0JBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDaEY7O0FBRUQsWUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDOUY7O0FBRUQsaUJBQWEsRUFBQyx1QkFBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUU7QUFDbEQsWUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtBQUM3QixnQkFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzNFLE1BQ0ksSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRTtBQUN2QyxnQkFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDekUsTUFDSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO0FBQ3JDLGdCQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDeEUsTUFDSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLEVBQUU7QUFDMUMsZ0JBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3RFLE1BQ0ksSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUNoQyxnQkFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3pFLE1BQ0ksSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTtBQUNyQyxnQkFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDdkU7S0FDSjs7QUFFRCxnQkFBWSxFQUFDLHNCQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFO0FBQ3hDLFlBQUk7QUFDQSxnQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7QUFFL0Isc0JBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pDLGdCQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2IsdUJBQU87YUFDVjs7O0FBR0QsaUJBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7QUFHekQsZ0JBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN2QixpQkFBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO0FBQzNDLGdCQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEIsMEJBQVUsR0FBRywwQkFBWSxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNqRTs7O0FBR0QsZ0JBQUksVUFBVSxFQUFFO0FBQ1oscUJBQUssQ0FBQyxlQUFlLEdBQUcsdUJBQWlCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzthQUN0RixNQUNJO0FBQ0QscUJBQUssQ0FBQyxlQUFlLEdBQUcsdUJBQWlCLFlBQVksQ0FBQzthQUN6RDs7O0FBR0QsaUJBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7O0FBRWxELG1CQUFPLEtBQUssQ0FBQztTQUNoQixDQUNELE9BQU0sS0FBSyxFQUFFO0FBQ1Qsa0NBQUksS0FBSyxDQUFDLHlDQUF5QyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDL0U7S0FDSjs7QUFFRCxpQkFBYSxFQUFDLHVCQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFO0FBQ3pDLGVBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztLQUM3Qjs7QUFFRCxjQUFVLEVBQUMsb0JBQUMsVUFBVSxFQUFFOztBQUVwQixZQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRTtBQUMxQixzQkFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDMUMsZ0JBQUksQ0FBQyxVQUFVLEVBQUU7QUFDYix1QkFBTzthQUNWO0FBQ0Qsc0JBQVUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQ2xDO0FBQ0QsZUFBTyxVQUFVLENBQUM7S0FDckI7OztBQUdELGVBQVcsRUFBQyxxQkFBQyxVQUFVLEVBQUU7QUFDckIsZUFBTyxVQUFVLENBQUM7S0FDckI7OztBQUdELGNBQVUsRUFBQyxvQkFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFOztBQUV4QixZQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUMzQixtQkFBTywwQkFBWSxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3JEO0FBQ0QsZUFBTyxLQUFLLENBQUM7S0FDaEI7OztBQUdELGNBQVUsRUFBQyxvQkFBQyxLQUFLLEVBQUU7QUFDZixlQUFPLEtBQUssR0FBRyxDQUFDLENBQUM7S0FDcEI7OztBQUdELGNBQVUsRUFBQSxvQkFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFOztBQUV2QixZQUFJLEtBQUssRUFBRTtBQUNQLG1CQUFPLDBCQUFZLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDakQsTUFDSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDOUQsbUJBQU8sMEJBQVksUUFBUSxDQUFDLEtBQUssQ0FBQztTQUNyQztLQUNKOzs7QUFHRCxpQkFBYSxFQUFDLHlCQUFHLEVBQUU7QUFDbkIsY0FBVSxFQUFDLHNCQUFHLEVBQUU7QUFDaEIsZUFBVyxFQUFDLHVCQUFHLEVBQUU7Ozs7QUFLakIsU0FBSyxFQUFDLGVBQUMsRUFBRSxFQUFFO0FBQ1AsWUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDYixZQUFJLENBQUMsZ0JBQWdCLEdBQUcsdUJBQVEsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzlEOztBQUVELFlBQVEsRUFBQyxrQkFBQyxXQUFXLEVBQXFCOzBFQUFKLEVBQUU7O1lBQWYsUUFBUSxTQUFSLFFBQVE7O0FBQzdCLGVBQU8sNEJBQVksSUFBSSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLFFBQVEsRUFBUixRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQzlFOztBQUVELFdBQU8sRUFBQyxtQkFBRztBQUNQLFlBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ1Ysa0JBQU0sSUFBSSxLQUFLLG9DQUFrQyxJQUFJLENBQUMsSUFBSSw0QkFBeUIsQ0FBRTtTQUN4Rjs7QUFFRCxZQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEIsa0JBQU0sSUFBSSxLQUFLLG9DQUFrQyxJQUFJLENBQUMsSUFBSSx5Q0FBc0MsQ0FBRTtTQUNyRztBQUNELFlBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLFlBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDOzs7QUFHdEIsWUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ3JDLFlBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoQixnQkFBSSxpQkFBaUIsR0FBRyxlQUFjLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuRCw2QkFBaUIsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUM7U0FDdEQ7OztBQUdELFlBQUksTUFBTSxHQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEFBQUMsQ0FBQztBQUNuRCxZQUFJLFlBQVksR0FBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxBQUFDLENBQUM7QUFDL0QsWUFBSSxRQUFRLEdBQUcsZUFBYyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7QUFHeEUsWUFBSSxVQUFVLEdBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQUFBQyxDQUFDO0FBQzNELFlBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFO0FBQ2hDLHNCQUFVLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM3Qjs7O0FBR0QsWUFBSTtBQUNBLGdCQUFJLENBQUMsT0FBTyxHQUFHLGtDQUNYLElBQUksQ0FBQyxFQUFFLEVBQ1AsOEJBQWMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQ3JDLDhCQUFjLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUN2QztBQUNJLG9CQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZix1QkFBTyxFQUFQLE9BQU87QUFDUCx3QkFBUSxFQUFSLFFBQVE7QUFDUixzQkFBTSxFQUFOLE1BQU07QUFDTiw0QkFBWSxFQUFaLFlBQVk7QUFDWiwwQkFBVSxFQUFWLFVBQVU7YUFDYixDQUNKLENBQUM7QUFDRixnQkFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7QUFFdkIsZ0JBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoQixvQkFBSSxDQUFDLGlCQUFpQixHQUFHLGtDQUNyQixJQUFJLENBQUMsRUFBRSxFQUNQLDhCQUFjLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUNyQyw4QkFBYywrQkFBK0IsQ0FBQyxFQUM5QztBQUNJLHdCQUFJLEVBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFjLEFBQUM7QUFDbEMsMkJBQU8sRUFBRSxpQkFBaUI7QUFDMUIsNEJBQVEsRUFBUixRQUFRO0FBQ1IsMEJBQU0sRUFBTixNQUFNO0FBQ04sZ0NBQVksRUFBWixZQUFZO0FBQ1osOEJBQVUsRUFBVixVQUFVO2lCQUNiLENBQ0osQ0FBQztBQUNGLG9CQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDcEMsTUFDSTtBQUNELG9CQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO2FBQ2pDO1NBQ0osQ0FDRCxPQUFNLEtBQUssRUFBRTtBQUNULGdCQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUN2QixnQkFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDdEIsa0JBQU0sSUFBSSxLQUFLLDZCQUEyQixJQUFJLENBQUMsSUFBSSxjQUFXLEtBQUssQ0FBQyxDQUFFO1NBQ3pFOztBQUVELFlBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLFlBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0tBQ3hCOzs7QUFHRCxrQkFBYyxFQUFDLHdCQUFDLEdBQUcsRUFBRSxLQUFLLEVBQWdCO1lBQWQsS0FBSyx5REFBRyxJQUFJOztBQUNwQyxZQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDaEQsWUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFELFlBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFckMsWUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO0FBQzVELFlBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0RSxZQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDOUM7OztBQUdELHFCQUFpQixFQUFDLDJCQUFDLEdBQUcsRUFBRTtBQUNwQixZQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ3JCLGdCQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDbkM7S0FDSjs7QUFFRCxzQkFBa0IsRUFBQyw0QkFBQyxHQUFHLEVBQUUsS0FBSyxFQUFnQjtZQUFkLEtBQUsseURBQUcsSUFBSTs7QUFDeEMsWUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLFlBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMxQzs7Ozs7QUFLRCxtQkFBZSxFQUFDLDJCQUFHOztBQUVmLFlBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNqQixZQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFO0FBQ3RCLGlCQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDeEIsdUJBQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hDO1NBQ0o7QUFDRCxZQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtBQUN0RCxpQkFBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDNUIsdUJBQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4QztTQUNKO0FBQ0QsZUFBTyxPQUFPLENBQUM7S0FFbEI7OztBQUdELGNBQVUsRUFBQyxzQkFBRztBQUNWLGVBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUU7S0FDcEU7OztBQUdELGdCQUFZLEVBQUMsd0JBQUc7OztBQUNaLFlBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUU7QUFDcEIsbUJBQU87U0FDVjs7O0FBR0QsWUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRTtBQUN6QixnQkFBSSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7U0FDcEQsTUFDSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFO0FBQy9CLGdCQUFJLENBQUMsT0FBTyxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQztTQUNyRDs7Ozs7Ozs7OztBQVVELFlBQUksa0JBQWtCLEdBQ2xCLGFBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUN4QixNQUFNLENBQUMsVUFBQSxDQUFDO21CQUFJLE1BQUssT0FBTyxDQUFDLENBQUMsQ0FBQywyQ0FBNEI7U0FBQSxDQUFDLENBQ3hELE1BQU0sQ0FBQzs7QUFFWixZQUFJLENBQUMsT0FBTyxDQUFDLDBCQUEwQixZQUFVLGtCQUFrQixNQUFHLENBQUM7QUFDdkUsWUFBSSxrQkFBa0IsR0FBRyxDQUFDLEVBQUU7O0FBRXhCLGdCQUFJLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxHQUFHLElBQUksQ0FBQzs7O0FBRzdELGdCQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLDhCQUFjLG9CQUFvQixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDcEY7S0FDSjs7O0FBR0QsdUJBQW1CLEVBQUMsNkJBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTs7O0FBQ2xDLFlBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUU7QUFDcEIsbUJBQU8sU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDckM7O0FBRUQsWUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLFlBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs7O0FBR2YsWUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDO21CQUFJLE9BQUssT0FBTyxDQUFDLENBQUMsQ0FBQztTQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDO21CQUFJLENBQUM7U0FBQSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsTUFBTSxFQUFFLENBQUMsRUFBSztBQUN6RSxnQkFBSSxNQUFNLDJDQUE0QixFQUFFO0FBQ3BDLG9CQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLHVCQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QixxQkFBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDekI7U0FDSixDQUFDLENBQUM7O0FBRUgsWUFBSSxhQUFZLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDbkMsbUJBQU8sU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDckM7Ozs7O0FBS0QsZUFBTyxnQ0FBYSxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FDNUUsSUFBSSxDQUFDLFVBQUEsUUFBUSxFQUFJO0FBQ2QsZ0JBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7O0FBRWxDLHVCQUFPLFNBQVMsQ0FBQzthQUNwQjs7O0FBR0QscUJBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDOUMscUJBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7O0FBRTlDLGdCQUFJLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN0RCxnQkFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RCxnQkFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQUU1RCxrREFBcUMsUUFBUSw0R0FBRTs7O3dCQUFyQyxLQUFLO3dCQUFFLE1BQU07d0JBQUUsT0FBTzs7QUFDNUIsd0JBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQix3QkFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQzs7QUFFMUMsOEJBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDdEIsNkJBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUUvQiwyQkFBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7Ozs7QUFNL0Isd0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsRUFBRTtBQUNqQyw0QkFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN6Qyw0QkFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUIsaUNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUNYLEFBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFJLEdBQUcsRUFDM0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFJLEdBQUc7QUFDdkMseUJBQUMsR0FBRyxHQUFHLENBQ1YsQ0FBQztxQkFDTCxNQUNJO0FBQ0QsaUNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQzVCO2lCQUNKOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUQsbUJBQU8sU0FBUyxDQUFDO1NBQ3BCLENBQ0osQ0FBQztLQUNMOzs7QUFHRCxnQkFBWSxFQUFDLHNCQUFDLFFBQVEsRUFBRTs7QUFFcEIsZUFBTyx1QkFBUSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUM3QyxJQUFJLENBQUMsWUFBTTtBQUNSLG1CQUFPLFNBQVEsR0FBRyxDQUFDLGFBQVksUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQyxFQUFJO0FBQzlDLHVCQUFPLHVCQUFRLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSx1QkFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDNUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUM7dUJBQUksQ0FBQzthQUFBLENBQUMsQ0FBQyxDQUFDO1NBQ3RCLENBQUMsQ0FDRCxJQUFJLENBQUMsVUFBQSxRQUFRLEVBQUk7QUFDZCxvQkFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUM7dUJBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTthQUFBLENBQUMsQ0FBQztBQUNsQyxtQkFBTyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQzt1QkFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO2FBQUEsQ0FBQyxDQUFDO1NBQ3pELENBQUMsQ0FBQztLQUNWOzs7QUFHRCxTQUFLLEVBQUMsaUJBQUc7QUFDTCxZQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkIsWUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsOEJBQWMsT0FBTyxDQUFDLENBQUM7S0FDckQ7OztBQUdELGVBQVcsRUFBQyx1QkFBRztBQUNYLFlBQUksT0FBTyxHQUFHLDhCQUFjLE9BQU8sQ0FBQztBQUNwQyxZQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1YsbUJBQU87U0FDVjs7QUFFRCxlQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDcEU7OztBQUdELGlCQUFhLEVBQUU7QUFDWCxjQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7QUFDL0MsV0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFO0FBQzdDLGdCQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7QUFDbEQsYUFBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFO0FBQy9DLGVBQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtLQUNyRDs7O0FBR0Qsd0JBQW9CLEVBQUU7QUFDbEIsY0FBTSxFQUFFLENBQUM7QUFDVCxXQUFHLEVBQUUsQ0FBQztBQUNOLGdCQUFRLEVBQUUsQ0FBQztBQUNYLGFBQUssRUFBRSxDQUFDO0FBQ1IsZUFBTyxFQUFFLENBQUM7S0FDYjs7O0FBR0Qsa0JBQWMsRUFBQyx3QkFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFOztBQUVsQixZQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO0FBQzlDLGdCQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFOztBQUM5Qyx1QkFBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25DLE1BQ0ksSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUMzQiwyQkFBTyxDQUFDLENBQUMsQ0FBQztpQkFDYixNQUNJO0FBQ0QsK0JBQU8sQ0FBQyxDQUFDO3FCQUNaO1NBQ0o7OztBQUdELFlBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFO0FBQy9CLG1CQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ2IsTUFDSSxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRTtBQUNwQyxtQkFBTyxDQUFDLENBQUM7U0FDWjs7O0FBR0QsWUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDM0UsbUJBQU8sQ0FBQyxDQUFDLENBQUM7U0FDYixNQUNJLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2hGLG1CQUFPLENBQUMsQ0FBQztTQUNaOztBQUVELGVBQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNuQzs7QUFFRCxVQUFNLEVBQUMsa0JBQUc7Ozs7O0tBS1Q7O0NBRUosQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkNubUJnQixnQkFBZ0I7Ozs7Z0NBQ1Isc0JBQXNCOzs7O2dDQUN0QixzQkFBc0I7Ozs7OztxQkFDNUIsU0FBUzs7MEJBQ0osZ0JBQWdCOzs7O21CQUN6QixRQUFROzs7O3dCQUVSLFVBQVU7Ozs7QUFFbkIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDOztBQUN0QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7O0FBQ2hCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQzs7O0FBRTNCLFlBQVksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOzs7QUFHN0IsWUFBWSxDQUFDLFNBQVMsZUFBUSxDQUFDOzs7QUFHL0IsWUFBWSxDQUFDLElBQUksR0FBRyxZQUFZO0FBQzVCLGtDQUFjLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwQyxrQ0FBYyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7OztBQUduQyxrQ0FBYyxRQUFRLENBQUMsUUFBUSxFQUFFLDhCQUFjLG1CQUFtQixDQUFDLENBQUMsQ0FBQzs7O0FBR3JFLGtDQUFjLFFBQVEsQ0FBQyxRQUFRLEVBQUUsOEJBQWMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDOzs7QUFHeEUsa0NBQWMsUUFBUSxDQUFDLFFBQVEsRUFBRSw4QkFBYyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7OztBQUcxRSxrQ0FBYyxRQUFRLENBQUMsUUFBUSxFQUFFLDhCQUFjLDhCQUE4QixDQUFDLENBQUMsQ0FBQzs7O0FBR2hGLGtDQUFjLFlBQVksQ0FBQyxPQUFPLEVBQUUsOEJBQWMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDOzs7QUFHbEYsa0NBQWMsT0FBTyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7Ozs7QUFJaEQsa0NBQWMsT0FBTyxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBLEFBQUMsQ0FBQzs7O0FBRzFELGtDQUFjLE9BQU8sQ0FBQyxrQkFBa0IsYUFBVyxpQkFBSSxVQUFVLFdBQU0saUJBQUksVUFBVSxnQ0FBMkIsaUJBQUksU0FBUyxPQUFJLENBQUM7Q0FDckksQ0FBQzs7O0FBR0YsWUFBWSxDQUFDLE9BQU8sR0FBRyxVQUFVLEVBQUUsRUFBRTtBQUNqQyxpQkFBWSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLLEVBQUs7QUFDbkMsWUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLFlBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDakIsa0NBQUksS0FBSyxvREFBa0QsS0FBSyxDQUFDLElBQUksQ0FBRyxDQUFDOztBQUV6RSxnQkFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRTtBQUNwQiw0QkFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkM7QUFDRCxpQkFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ25CO0tBQ0osQ0FBQyxDQUFDO0NBQ04sQ0FBQzs7O0FBR0YsWUFBWSxDQUFDLFFBQVEsR0FBRyxVQUFVLEtBQUssRUFBRTtBQUNyQyxVQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMzQixjQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztDQUNsQyxDQUFDOzs7QUFHRixZQUFZLENBQUMsTUFBTSxHQUFHLFVBQVUsSUFBSSxFQUFFO0FBQ2xDLFdBQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3ZCLENBQUM7O0FBRUYsWUFBWSxDQUFDLEdBQUcsR0FBRyxVQUFVLEtBQUssRUFBRSxNQUFNLEVBQUU7O0FBRXhDLFFBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtBQUNiLGVBQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0QsU0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7OztBQUdqQixRQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDakIsUUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO0FBQ1gsWUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTs7O0FBQzFCLHdCQUFBLE9BQU8sRUFBQyxJQUFJLE1BQUEsOEJBQUksS0FBSyxDQUFDLEdBQUcsRUFBQyxDQUFDO1NBQzlCLE1BQ0k7QUFDRCxtQkFBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUM7bUJBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztTQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDO21CQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSztTQUFBLENBQUMsQ0FBQzs7Ozs7Ozs7QUFHcEUsOENBQWMsT0FBTyw0R0FBRTtvQkFBZCxDQUFDOztBQUNOLHFCQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDOUI7Ozs7Ozs7Ozs7Ozs7OztLQUNKO0FBQ0QsV0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs7O0FBR3BCLFNBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUM7ZUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVE7S0FBQSxDQUFDLENBQUM7QUFDcEQsU0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQUEsQ0FBQztlQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUztLQUFBLENBQUMsQ0FBQzs7O0FBR3RELFNBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUM7ZUFBSSxDQUFDLENBQUMsSUFBSTtLQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDO2VBQUksQ0FBQztLQUFBLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMzRCxTQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDO2VBQUksQ0FBQyxDQUFDLFFBQVE7S0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQUEsQ0FBQztlQUFJLENBQUMsSUFBSSxJQUFJO0tBQUEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzNFLFNBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUM7ZUFBSSxDQUFDLENBQUMsT0FBTztLQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDO2VBQUksQ0FBQztLQUFBLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqRSxTQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDO2VBQUksQ0FBQyxDQUFDLE1BQU07S0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQUEsQ0FBQztlQUFJLENBQUMsSUFBSSxJQUFJO0tBQUEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZFLFFBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUM7ZUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLO0tBQUEsQ0FBQyxFQUFFOzs7QUFHekQsYUFBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQzttQkFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLO1NBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUM7bUJBQUksQ0FBQztTQUFBLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUM3RjtBQUNELFNBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUM7ZUFBSSxDQUFDLENBQUMsV0FBVztLQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDO2VBQUksQ0FBQyxJQUFJLElBQUk7S0FBQSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7OztBQUdqRixTQUFLLENBQUMsT0FBTyxHQUFHLG9CQUFhLENBQWIsTUFBTSxHQUFRLEVBQUUsNEJBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUM7ZUFBSSxDQUFDLENBQUMsT0FBTztLQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDO2VBQUksQ0FBQztLQUFBLENBQUMsR0FBQyxDQUFDO0FBQ2pGLFNBQUssQ0FBQyxRQUFRLEdBQUcsb0JBQWEsQ0FBYixNQUFNLEdBQVEsRUFBRSw0QkFBSyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQztlQUFJLENBQUMsQ0FBQyxRQUFRO0tBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUM7ZUFBSSxDQUFDO0tBQUEsQ0FBQyxHQUFDLENBQUM7OztBQUduRixnQkFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELFdBQU8sS0FBSyxDQUFDO0NBQ2hCLENBQUM7OztBQUdGLFlBQVksQ0FBQyxVQUFVLEdBQUcsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUN4RCxRQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDakIsUUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUM7ZUFBSSxDQUFDLENBQUMsT0FBTztLQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDO2VBQUksQ0FBQztLQUFBLENBQUMsQ0FBQzs7O0FBRy9ELFdBQU8sQ0FBQyxPQUFPLEdBQUcsb0JBQWEsQ0FBYixNQUFNLEdBQVEsRUFBRSw0QkFBSyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQztlQUFJLENBQUMsQ0FBQyxPQUFPO0tBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUM7ZUFBSSxDQUFDO0tBQUEsQ0FBQyxHQUFDLENBQUM7OztBQUd6RixXQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN0QixXQUFPLENBQUMsU0FBUyxHQUFHLEFBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSyxFQUFFLENBQUM7QUFDcEUsV0FBTyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7OztBQUc3QixXQUFPLENBQ0YsTUFBTSxDQUFDLFVBQUEsQ0FBQztlQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRO0tBQUEsQ0FBQyxDQUM1QyxPQUFPLENBQUMsVUFBQSxDQUFDLEVBQUk7OEJBQ0QsQ0FBQztBQUNOLG1CQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Ozs7OztBQU1wQyxtQ0FBc0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUU7QUFDdkMsMEJBQVUsRUFBRSxJQUFJO0FBQ2hCLDRCQUFZLEVBQUUsSUFBSTtBQUNsQixtQkFBRyxFQUFFLGVBQVk7O0FBRWIsd0JBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDcEMsK0JBQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDL0I7Ozs7eUJBSUksSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLFFBQVEsRUFBRTtBQUMvRSxtQ0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2pFO2lCQUNKO0FBQ0QsbUJBQUcsRUFBRSxhQUFVLENBQUMsRUFBRTtBQUNkLDJCQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDNUI7YUFDSixDQUFDLENBQUM7OztBQXpCUCxhQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO2tCQUF6QixDQUFDO1NBMEJUO0tBQ0osQ0FBQyxDQUFDOzs7QUFHUCxXQUFPLENBQUMsVUFBVSxHQUFHLGFBQVksYUFBYSxDQUN6QyxHQUFHLENBQUMsVUFBQSxDQUFDO2VBQUksQ0FBQyxDQUFDLFVBQVU7S0FBQSxDQUFDLENBQ3RCLE1BQU0sQ0FBQyxVQUFBLENBQUM7ZUFBSSxDQUFDO0tBQUEsQ0FBQyxDQUNkLE1BQU0sQ0FBQyxVQUFDLElBQUksRUFBRSxHQUFHLEVBQUs7O0FBRW5CLFlBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQ3pCLGdCQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3BCOzthQUVJO0FBQ0QsbUJBQUcsQ0FBQyxPQUFPLENBQUMsVUFBQSxDQUFDOzJCQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO2lCQUFBLENBQUMsQ0FBQzthQUNwQztBQUNELGVBQU8sSUFBSSxDQUFDO0tBQ2YsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQ2YsQ0FBQzs7OztBQUlGLFFBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUN2QyxhQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7Ozs7OztBQUM5RCwrQ0FBdUIsd0JBQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGlIQUFFOzs7b0JBQWxELENBQUM7b0JBQUUsS0FBSzs7QUFDZCxxQkFBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BFLG9CQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7OztBQUN0QixxREFBQSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLE1BQUEsbURBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQzsrQkFBTSxLQUFLLENBQUMsSUFBSTtxQkFBQSxDQUFDLEVBQUMsQ0FBQztpQkFDdEUsTUFDSTtBQUNELHlCQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNsRDthQUNKOzs7Ozs7Ozs7Ozs7Ozs7S0FDSjs7O0FBR0QsUUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDOzs7Ozs7QUFDZiwyQ0FBbUIsYUFBYSxpSEFBRTtnQkFBekIsTUFBTTs7QUFDWCxnQkFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDaEIseUJBQVM7YUFDWjs7QUFFRCxtQkFBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUN0QyxtQkFBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztBQUNsRCxnQkFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDOzs7Ozs7O0FBRXRCLG1EQUF1Qix3QkFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpSEFBRTs7O3dCQUEzQyxDQUFDO3dCQUFFLEtBQUs7O0FBQ2Qsd0JBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRXpDLDJCQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVDLDJCQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDOzs7QUFHeEQseUJBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9DLCtCQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQzs7QUFFdkUseUJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOzs7QUFHakMsNEJBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3ZCLHFDQUFTO3lCQUNaO0FBQ0Qsb0NBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7O0FBRXBDLCtCQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQywrQkFBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2hEO2lCQUNKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUQsMkJBQWMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ3RDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUQsbUJBQWMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzs7QUFFbEMsU0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDeEIsV0FBTyxLQUFLLENBQUM7Q0FDaEIsQ0FBQzs7Ozs7O0FBTUYsWUFBWSxDQUFDLE1BQU0sR0FBRyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQWU7UUFBYixNQUFNLHlEQUFHLEVBQUU7O0FBQ3JELFFBQUksS0FBSyxHQUFHLDZCQUFhLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxTQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzs7O0FBR2xCLFNBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQzs7Ozs7QUFLeEMsUUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdEMsY0FBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxlQUFjLGVBQWMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3RGOztBQUVELFdBQU8sS0FBSyxDQUFDO0NBQ2hCLENBQUM7OztBQUdGLFlBQVksQ0FBQyxLQUFLLEdBQUcsVUFBVSxNQUFNLEVBQWM7UUFBWixLQUFLLHlEQUFHLEVBQUU7OztBQUU3QyxRQUFJLFVBQVUsR0FBRyxhQUFZLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FDckMsVUFBQyxDQUFDLEVBQUUsQ0FBQztlQUFLLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7S0FBQSxDQUNoRyxDQUFDOzs7QUFHRixTQUFLLElBQUksS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUN0QixZQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3BCLG1CQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QixNQUNJO0FBQ0Qsa0JBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN6QjtLQUNKOzs7QUFHRCxRQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7Ozs7OztBQUNaLDJDQUFrQixVQUFVLGlIQUFFO2dCQUFyQixLQUFLOztBQUNWLGNBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFRCxnQkFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixXQUFPLE1BQU0sQ0FBQztDQUNqQixDQUFDOzs7QUFHRixZQUFZLENBQUMsVUFBVSxHQUFHLFVBQVUsS0FBSyxFQUFFOztBQUV2QyxTQUFLLElBQUksS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUN0QixjQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzdCO0NBQ0osQ0FBQzs7O0FBR0YsWUFBWSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUNuRCxRQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7O0FBRWhCLFdBQU0sSUFBSSxFQUFFO0FBQ1IsWUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLFlBQUksQ0FBQyxLQUFLLEVBQUU7O0FBRVIsa0JBQU07U0FDVDs7O0FBR0QsWUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDWixrQkFBTTtTQUNUOzs7QUFHRCxlQUFPLEVBQUUsQ0FBQzs7QUFFVixZQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFOztBQUUxQixtQkFBTyxJQUFJLElBQUksQ0FBQyxHQUFHLE1BQUEsQ0FBUixJQUFJLHFCQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQyxFQUFJOztBQUV0QyxvQkFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ1gsMkJBQU87aUJBQ1Y7O0FBRUQsdUJBQU8sWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNuRCxDQUFDLEVBQUMsQ0FBQztBQUNKLGtCQUFNO1NBQ1QsTUFDSTs7QUFFRCxnQkFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUNuQixzQkFBTTthQUNUOzs7QUFHRCxlQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUNuQjtLQUNKO0FBQ0QsV0FBTyxPQUFPLENBQUM7Q0FDbEIsQ0FBQzs7O0FBR0YsWUFBWSxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDMUMsUUFBSSxHQUFHLElBQUksSUFBSSxhQUFZLE1BQU0sQ0FBQyxDQUFDOzs7Ozs7QUFDbkMsMkNBQWdCLElBQUksaUhBQUU7Z0JBQWIsR0FBRzs7QUFDUixnQkFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLGdCQUFJO0FBQ0EscUJBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNoQixzQ0FBSSxLQUFLLDZDQUEyQyxHQUFHLENBQUcsQ0FBQzthQUM5RCxDQUNELE9BQU0sS0FBSyxFQUFFO0FBQ1Qsc0NBQUksS0FBSyxvREFBa0QsR0FBRyxRQUFLLEtBQUssQ0FBQyxDQUFDOztBQUUxRSxxQkFBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7QUFDckIsd0JBQUksRUFBRSxRQUFRO0FBQ2QsMkJBQU8sNkJBQTJCLEdBQUcsQUFBRTtBQUN2Qyx5QkFBSyxFQUFMLEtBQUs7QUFDTCxpQ0FBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhO2lCQUM5RCxDQUFDLENBQUM7YUFDTjtTQUNKOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUQsMEJBQUksS0FBSywrQ0FBK0MsQ0FBQztDQUM1RCxDQUFDOzs7QUFHRixZQUFZLENBQUMsYUFBYSxHQUFHLFVBQVUsUUFBUSxFQUFFO0FBQzdDLFFBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNoQixTQUFLLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRTtBQUNsQixZQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDcEMsa0JBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEI7S0FDSjtBQUNELFdBQU8sTUFBTSxDQUFDO0NBQ2pCLENBQUM7Ozs7Ozs7Ozs7Ozs7OzswQkMvWGdCLGdCQUFnQjs7OzttQkFDbEIsUUFBUTs7Ozs4QkFFRSxnQkFBZ0I7Ozs7QUFFbkMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDOzs7Ozs7Ozs7QUFRNUIsV0FBVyxDQUFDLFlBQVksR0FBRyxVQUFVLElBQUksRUFBRTtBQUN2QyxRQUFJLENBQUMsaVhBUW9CLElBQUksc01BT25CLENBQUM7QUFDWCxXQUFPLENBQUMsQ0FBQztDQUNaLENBQUM7Ozs7QUFLRixXQUFXLENBQUMsUUFBUSxHQUFHLGVBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0FBRzdDLFdBQVcsQ0FBQyxRQUFRLEdBQUc7QUFDbkIsU0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLFNBQUssRUFBRSxDQUFDO0FBQ1IsUUFBSSxFQUFFLENBQUM7QUFDUCxXQUFPLEVBQUUsS0FBSztBQUNkLFVBQU0sRUFBRSxFQUFFO0FBQ1YsY0FBVSxFQUFFLENBQUM7QUFDYixTQUFLLEVBQUUsQ0FBQztBQUNSLEtBQUMsRUFBRSxDQUFDO0FBQ0osWUFBUSxFQUFFO0FBQ04sZUFBTyxFQUFFLENBQUM7QUFDVixlQUFPLEVBQUUsQ0FBQztLQUNiO0NBQ0osQ0FBQzs7O0FBR0YsV0FBVyxDQUFDLE1BQU0sR0FBRzs7QUFFakIsbUNBQStCLEVBQUUsdUNBQVc7QUFDeEMsZUFBTyxDQUNILEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFBLEFBQUM7QUFDMUMsV0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUEsQUFBQztBQUM1QyxXQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQSxBQUFDO0FBQzlDLFNBQUMsQ0FDSixDQUFDO0tBQ0w7OztBQUdELDZCQUF5QixFQUFFLGlDQUFXO0FBQ2xDLGVBQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM3RTtDQUNKLENBQUM7OztBQUdGLFdBQVcsQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ2xFLFdBQU87QUFDSCxlQUFPLEVBQVAsT0FBTztBQUNQLFlBQUksRUFBSixJQUFJO0FBQ0osY0FBTSxFQUFOLE1BQU07QUFDTixZQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDckIsZ0JBQVEsRUFBRSxpQkFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDakQsd0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtBQUN2Qyx1QkFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO0tBQ3hDLENBQUM7Q0FDTCxDQUFDOzs7OztBQUtGLFdBQVcsQ0FBQyxXQUFXLEdBQUcsVUFBVSxHQUFHLEVBQW9CO1FBQWxCLFNBQVMseURBQUcsSUFBSTs7QUFDckQsUUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO0FBQ2IsZUFBTztLQUNWOztBQUVELFFBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtBQUNYLGVBQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxBQUFDLEVBQUUsQ0FBQztLQUM3RDs7QUFFRCxRQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQzs7QUFFdkIsUUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUU7QUFDakMsWUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7QUFDckQsYUFBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUM7dUJBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQUEsQ0FBQyxDQUFDO0FBQ3BELGFBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQ2YsTUFDSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUU7O0FBQ3BDLGlCQUFDLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEM7S0FDSjs7QUFFRCxXQUFPLENBQUMsQ0FBQztDQUNaLENBQUM7Ozs7QUFJRixXQUFXLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxHQUFHLEVBQUU7QUFDMUMsV0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxVQUFBLENBQUMsRUFBSTtBQUNyQyxZQUFJLENBQUMsS0FBSywrQkFBK0IsRUFBRTtBQUN2QyxtQkFBTyx3QkFBTSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEgsTUFDSSxJQUFJLENBQUMsS0FBSyx5QkFBeUIsRUFBRTtBQUN0QyxtQkFBTyxXQUFXLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDeEQ7O0FBRUQsZUFBTyxDQUFDLENBQUM7S0FDWixDQUFDLENBQUM7Q0FDTixDQUFDOzs7O0FBSUYsV0FBVyxDQUFDLGFBQWEsR0FBRyxVQUFTLEdBQUcsRUFBRSxPQUFPLEVBQUU7QUFDL0MsUUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO0FBQ2IsZUFBTztLQUNWLE1BQ0ksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFOztBQUNsQixZQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLGVBQU8sQ0FBQyxDQUFDO0tBQ1osTUFDSSxJQUFJLEdBQUcsVUFBTyxFQUFFOztBQUNqQixlQUFPLEdBQUcsVUFBTyxDQUFDO0tBQ3JCLE1BQ0ksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFOztBQUN6QyxlQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2pDLE1BQ0k7OztBQUVELFlBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtBQUNqQyxlQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDeEIsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsbUJBQU8sQ0FBQyxDQUFDO1NBQ1o7O2FBRUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7QUFFOUQsbUJBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDMUIsbUJBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2QsbUJBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLHdCQUFNLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRSx1QkFBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQzs7aUJBRUk7QUFDRCx1QkFBRyxVQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUN2QiwyQkFBTyxHQUFHLFVBQU8sQ0FBQztpQkFDckI7S0FDSjtDQUNKLENBQUM7O0FBRUYsV0FBVyxDQUFDLFlBQVksR0FBRyxVQUFTLEdBQUcsRUFBRSxPQUFPLEVBQUU7O0FBRTlDLFFBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUU7QUFDakIsWUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTs7QUFDcEIsbUJBQU8sR0FBRyxDQUFDLEdBQUcsR0FBRyxpQkFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JEO0FBQ0QsZUFBTyxHQUFHLENBQUMsR0FBRyxDQUFDO0tBQ2xCOztTQUVJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQzlCLGdCQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDNUMsZ0JBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzdCLG1CQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLHFCQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BCOztBQUVELGdCQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7O0FBQ2hCLG1CQUFHLElBQUksaUJBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMzQztTQUNKOzthQUVJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTs7QUFFekIsb0JBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN2QiwyQkFBTyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQzsrQkFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztxQkFBQSxDQUFDLENBQUM7aUJBQ3hFOztxQkFFSTtBQUNELCtCQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDO21DQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQzt5QkFBQSxDQUFDLENBQUM7cUJBQzdEO2FBQ0o7QUFDRCxXQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7OztBQUdGLFdBQVcsQ0FBQyxVQUFVLEdBQUcsVUFBVSxHQUFHLEVBQUU7QUFDcEMsUUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbkMsUUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUMzRSxXQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztLQUNwQjtBQUNELFdBQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7QUFLRixXQUFXLENBQUMsYUFBYSxHQUFHLFVBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRTtBQUMvQyxRQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7QUFDYixZQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLGVBQU8sQ0FBQyxDQUFDO0tBQ1osTUFDSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDekMsZUFBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNqQyxNQUNJOztBQUVELFlBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtBQUNqQyxlQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDeEIsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsbUJBQU8sQ0FBQyxDQUFDO1NBQ1o7O2FBRUksSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFOzs7QUFHZixtQkFBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsd0JBQU0sV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFDOUQsVUFBQSxDQUFDOzJCQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztpQkFBQSxDQUFDLENBQUM7O0FBRS9DLHVCQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pDLE1BQ0k7QUFDRCx1QkFBTyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDdkQ7S0FDSjtDQUNKLENBQUM7OztBQUdGLFdBQVcsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQy9CLFdBQVcsQ0FBQyxjQUFjLEdBQUcsVUFBUyxNQUFNLEVBQUU7O0FBRTFDLFFBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQyxlQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDNUM7OztBQUdELFFBQUksS0FBSyxHQUFHLDRCQUFjLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRCxRQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUM3QixhQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ2hCLGFBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDaEIsYUFBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztLQUNuQixNQUNJO0FBQ0QsYUFBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0tBQ3RDO0FBQ0QsZUFBVyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDMUMsV0FBTyxLQUFLLENBQUM7Q0FDaEIsQ0FBQzs7Ozs7QUFLRixXQUFXLENBQUMsVUFBVSxHQUFHLFVBQVMsR0FBRyxFQUFnQjtRQUFkLE9BQU8seURBQUcsRUFBRTs7QUFDL0MsUUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO0FBQ2IsWUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFFN0IsWUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDdkIsYUFBQyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckM7O0FBRUQsWUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUNuQixhQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1o7QUFDRCxlQUFPLENBQUMsQ0FBQztLQUNaLE1BQ0ksSUFBSSxHQUFHLFVBQU8sRUFBRTtBQUNqQixlQUFPLEdBQUcsVUFBTyxDQUFDO0tBQ3JCLE1BQ0ksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3pDLGVBQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakMsTUFDSTs7QUFFRCxZQUFJLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUU7QUFDakMsZUFBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ3hCLGdCQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUU3QixnQkFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDdkIsaUJBQUMsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JDOztBQUVELGdCQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ25CLGlCQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ1o7QUFDRCxtQkFBTyxDQUFDLENBQUM7U0FDWjs7YUFFSSxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDcEMsbUJBQUcsVUFBTyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25ELHVCQUFPLEdBQUcsVUFBTyxDQUFDO2FBQ3JCOztpQkFFSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUU7O0FBRWYsd0JBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUU7QUFDeEIsNkJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyQyxnQ0FBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixnQ0FBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQy9CLGlDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDM0M7eUJBQ0o7QUFDRCwyQkFBRyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztxQkFDaEM7OztBQUdELHVCQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyx3QkFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEUsdUJBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRCwyQkFBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDakM7O3FCQUVJO0FBQ0QsMkJBQUcsVUFBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDdkIsNEJBQUksR0FBRyxVQUFPLElBQUksR0FBRyxVQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ3JDLCtCQUFHLFVBQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQ3JCO0FBQ0QsK0JBQU8sR0FBRyxVQUFPLENBQUM7cUJBQ3JCO0tBQ0o7Q0FDSixDQUFDOztBQUVGLFdBQVcsQ0FBQyxVQUFVLEdBQUcsVUFBUyxHQUFHLEVBQWdCO1FBQWQsT0FBTyx5REFBRyxFQUFFOztBQUMvQyxRQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsRUFBRTtBQUMzQixXQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3RCOzs7O0FBSUQsUUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7QUFDekIsV0FBRyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDekMsTUFDSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7QUFFbEQsYUFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsZ0JBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLGdCQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUMxQixpQkFBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0M7U0FDSjs7QUFFRCxZQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDZCxlQUFHLEdBQUcsd0JBQU0sV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDOUM7S0FDSjs7O0FBR0QsUUFBSSxHQUFHLEVBQUU7O0FBRUwsWUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ2hCLGVBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDZDtLQUNKLE1BQ0k7QUFDRCxXQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN0Qjs7QUFFRCxXQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7O0FBRUYsV0FBVyxDQUFDLGNBQWMsR0FBRyxVQUFTLEtBQUssRUFBRSxPQUFPLEVBQUU7O0FBRWxELFFBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFO0FBQzdCLGFBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDMUIsTUFDSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTs7QUFFaEMsWUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNuQyxpQkFBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdDOzthQUVJO0FBQ0QscUJBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0I7S0FDSjs7QUFFRCxXQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOzs7QUFHRixXQUFXLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUMzQyxRQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsRUFBRTtBQUM1QixlQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN4QjtBQUNELFdBQU8sSUFBSSxDQUFDO0NBQ2YsQ0FBQzs7Ozs7QUFLRixXQUFXLENBQUMscUJBQXFCLEdBQUcsVUFBVSxNQUFNLEVBQUU7QUFDbEQsUUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksYUFBWSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMzRCxlQUFPLE1BQU0sQ0FBQztLQUNqQjs7QUFFRCxRQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsUUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQzs7QUFFMUQsYUFBUyxVQUFVLENBQUUsR0FBRyxFQUFFOztBQUV0QixZQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUN6QixnQkFBSSxHQUFHLEdBQUcsQUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLElBQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxBQUFDLENBQUM7QUFDdEYsZ0JBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixtQkFBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwQjtTQUNKOzthQUVJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQzlCLHFCQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRTtBQUNmLHVCQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMvQjthQUNKO0FBQ0QsZUFBTyxHQUFHLENBQUM7S0FDZDs7QUFFRCxXQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUM3QixDQUFDOzs7O0FBSUYsU0FBUyxpQkFBaUIsQ0FBRSxHQUFHLEVBQThDO1FBQTVDLFNBQVMseURBQUcsR0FBRztRQUFFLE1BQU0seURBQUcsSUFBSTtRQUFFLEtBQUsseURBQUcsRUFBRTs7QUFDdkUsVUFBTSxHQUFHLE1BQU0sR0FBSSxNQUFNLEdBQUcsU0FBUyxHQUFJLEVBQUUsQ0FBQzs7QUFFNUMsU0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUU7QUFDZixZQUFJLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFlBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixhQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDOztBQUVqQixZQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDaEQsNkJBQWlCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDakQ7S0FDSjtBQUNELFdBQU8sS0FBSyxDQUFDO0NBQ2hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQzliaUIsbUJBQW1COzs7O3lCQUNqQixrQkFBa0I7Ozs7SUFFakIsVUFBVTtBQUVmLGFBRkssVUFBVSxHQUVaOzhCQUZFLFVBQVU7O0FBR3ZCLFlBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQyxZQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQ2xELFlBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDL0M7Ozs7aUJBTmdCLFVBQVU7O2VBUXBCLGdCQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDbkIsZ0JBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMxQixnQkFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzVCLGdCQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMvQzs7Ozs7ZUFHTyxpQkFBQyxJQUFpRCxFQUFFO2dCQUFqRCxRQUFRLEdBQVYsSUFBaUQsQ0FBL0MsUUFBUTtnQkFBRSxJQUFJLEdBQWhCLElBQWlELENBQXJDLElBQUk7Z0JBQUUsTUFBTSxHQUF4QixJQUFpRCxDQUEvQixNQUFNO2dCQUFFLFlBQVksR0FBdEMsSUFBaUQsQ0FBdkIsWUFBWTtnQkFBRSxPQUFPLEdBQS9DLElBQWlELENBQVQsT0FBTzs7QUFDcEQsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLGdCQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNyQixnQkFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzs7QUFFdkIsZUFBRyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7QUFDcEIsZ0JBQUksTUFBTSxFQUFFO0FBQ1IsbUJBQUcsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLG1CQUFHLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQzthQUNoQyxNQUNJO0FBQ0QsbUJBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLG1CQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQzthQUNyQjtBQUNELGVBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLGVBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCOzs7ZUFFUyxtQkFBQyxLQUFLLEVBQUU7QUFDZCxpQkFBSyxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUU7QUFDckIsb0JBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFOUIscUJBQUssSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFO0FBQ3pCLHdCQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDOztBQUVuRCx3QkFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM1QixtQ0FDSSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQ2hCLElBQUksQ0FBQyxRQUFRLENBQ1QsSUFBSSxFQUNKLGFBQWEsQ0FBQyxTQUFTLEVBQ3ZCLGFBQWEsQ0FBQyxTQUFTLENBQzFCLENBQ0osQ0FBQztpQkFDTDthQUNKOztBQUVELG1CQUFPLEtBQUssQ0FBQztTQUNoQjs7Ozs7O2VBSVEsa0JBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDbEMsZ0JBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbkQsZ0JBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDdkIsZ0JBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsd0JBQU0sa0JBQWtCLENBQUM7QUFDekQsZ0JBQUksT0FBTyxHQUFHLENBQUMsR0FBRyx3QkFBTSxrQkFBa0IsQ0FBQztBQUMzQyxnQkFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7Ozs7OztBQU16QyxnQkFBSSxLQUFLLFlBQUEsQ0FBQztBQUNWLGdCQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtBQUMvQixxQkFBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDMUIsTUFDSTtBQUNELHlCQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDakI7QUFDRCxnQkFBSSxpQkFBaUIsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDekQsZ0JBQUksSUFBSSxHQUFHLGVBQWMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDaEQsZ0JBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLGdCQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7OztBQUdsQixxQkFBUyxPQUFPLENBQUUsUUFBUSxFQUFFO0FBQ3hCLG9CQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0Isb0JBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLHdCQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM5Qyw2QkFBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkQseUJBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3BCO0FBQ0Qsb0JBQUksUUFBUSxFQUFFO0FBQ1Ysd0JBQUksR0FBRyxlQUFjLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2lCQUMvQzthQUNKOzs7QUFHRCxpQkFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsb0JBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWxDLHFCQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyx3QkFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHckIsd0JBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtBQUN4RCwrQkFBTyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNqQjs7O0FBR0Qsd0JBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDOUIsd0JBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQzs7O0FBR3hCLHdCQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUM1QywrQkFBTyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNqQjtpQkFDSjthQUNKO0FBQ0QsbUJBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzs7O0FBR2YsZ0JBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDOztBQUV4QyxnQkFBSSxjQUFjLEdBQUcsQ0FDakIsU0FBUyxHQUFHLHdCQUFNLGtCQUFrQixFQUNwQyxNQUFNLEdBQUcsd0JBQU0sa0JBQWtCLENBQ3BDLENBQUM7O0FBRUYsZ0JBQUksWUFBWSxHQUFHLENBQ2YsU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQ3RCLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUN0QixDQUFDOztBQUVGLGdCQUFJLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQzt1QkFBSSxDQUFDLEdBQUcsd0JBQU0sa0JBQWtCO2FBQUEsQ0FBQyxDQUFDOzs7QUFHdkUsbUJBQU87QUFDSCxxQkFBSyxFQUFMLEtBQUs7QUFDTCxvQkFBSSxFQUFFLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxZQUFZLEVBQVosWUFBWSxFQUFFLFlBQVksRUFBWixZQUFZLEVBQUUsV0FBVyxFQUFYLFdBQVcsRUFBRTthQUNwRSxDQUFDO1NBQ0w7Ozs7O2VBR1Esa0JBQUMsS0FBSyxFQUFFLEtBQU0sRUFBRSxJQUFJLEVBQUUsS0FBNEIsRUFBRTt3Q0FBNUMsS0FBTTs7Z0JBQUwsQ0FBQztnQkFBRSxDQUFDO2dCQUFXLE1BQU0sR0FBUixLQUE0QixDQUExQixNQUFNO2dCQUFFLFNBQVMsR0FBbkIsS0FBNEIsQ0FBbEIsU0FBUztnQkFBRSxLQUFLLEdBQTFCLEtBQTRCLENBQVAsS0FBSzs7QUFDckQsaUJBQUssR0FBRyxLQUFLLElBQUksUUFBUSxDQUFDOztBQUUxQixpQkFBSyxJQUFJLFFBQVEsR0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDdEQsb0JBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzQixvQkFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEQsb0JBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsd0JBQU0sa0JBQWtCLENBQUM7QUFDekQsb0JBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDckMsb0JBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7OztBQUduQyxvQkFBSSxFQUFFLFlBQUEsQ0FBQztBQUNQLG9CQUFJLEtBQUssS0FBSyxNQUFNLEVBQUU7QUFDbEIsc0JBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO2lCQUNuQixNQUNJLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUN6QixzQkFBRSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDO2lCQUM3QyxNQUNJLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtBQUN4QixzQkFBRSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7aUJBQ2xEOzs7O0FBSUQsb0JBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQSxHQUFJLFdBQVcsQ0FBQzs7QUFFMUQsb0JBQUksTUFBTSxFQUFFO0FBQ1Isd0JBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ3hDO0FBQ0Qsb0JBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDdEM7U0FDSjs7O2VBRVMsbUJBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtBQUM1QixpQkFBSyxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUU7QUFDckIsb0JBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFOUIscUJBQUssSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFO0FBQ3pCLHdCQUFJLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRTVCLHdCQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNqQyx3QkFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNoRCw4QkFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtBQUNqQyxpQ0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUztBQUN2Qyw2QkFBSyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSztxQkFDbEMsQ0FBQyxDQUFDOztBQUVILHdCQUFJLENBQUMsU0FBUyxHQUFHLHVCQUFRLHFCQUFxQixDQUMxQyxJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUN0QixZQUFZLENBQ2YsQ0FBQztpQkFDTDthQUNKO1NBQ0o7Ozs7O2VBR3VCLGlDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRTs7QUFFOUMsZ0JBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNmLGlCQUFLLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRTtBQUNyQixvQkFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLHFCQUFLLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRTtBQUN6Qix3QkFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDOUMsd0JBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRTtBQUNsQiw4QkFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDcEI7aUJBQ0o7YUFDSjs7O0FBR0QsZ0JBQUksRUFBRSxHQUFHLENBQUM7Z0JBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuQixnQkFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsaUJBQUssSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFO0FBQ3JCLG9CQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIscUJBQUssSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFO0FBQ3pCLHdCQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsd0JBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQ3ZDLHdCQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLEVBQUU7QUFDakMsaUNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDOUIsMEJBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCw0QkFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFO0FBQ2Isa0NBQU0sR0FBRyxFQUFFLENBQUM7eUJBQ2Y7cUJBQ0osTUFDSTs7QUFDRCwwQkFBRSxJQUFJLE1BQU0sQ0FBQztBQUNiLDBCQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1AsaUNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQ2pDO2lCQUNKO2FBQ0o7O0FBRUQsbUJBQU8sQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDOzs7OztlQUdrQiw0QkFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO0FBQ2pDLGdCQUFJLFNBQVMsS0FBSyxZQUFZLEVBQUU7QUFDNUIsdUJBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxHQUFHLEVBQUU7QUFDekMsMkJBQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2lCQUNwRSxDQUFDLENBQUM7YUFDTixNQUNJLElBQUksU0FBUyxLQUFLLFdBQVcsRUFBRTtBQUNoQyx1QkFBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDN0IsTUFDSSxJQUFJLFNBQVMsS0FBSyxXQUFXLEVBQUU7QUFDaEMsdUJBQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQzdCO0FBQ0QsbUJBQU8sSUFBSSxDQUFDO1NBQ2Y7Ozs7OztlQUlvQix1QkFBQyxJQUFJLEVBQUU7QUFDeEIsZ0JBQUksSUFBSSxJQUFJLElBQUksRUFBRTtBQUNkLHVCQUFPO2FBQ1Y7QUFDRCxnQkFBSSxHQUFHLEFBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxHQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O3dCQUUvQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFOzs7O2dCQUEzRCxPQUFPO2dCQUFFLEtBQUs7O0FBQ3JCLGlCQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQzs7QUFFdEIsZ0JBQUksS0FBSyxLQUFLLElBQUksRUFBRTtBQUNoQix1QkFBTyxJQUFJLEVBQUUsQ0FBQzthQUNqQixNQUFNLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtBQUN2Qix1QkFBTyxJQUFJLElBQUksQ0FBQzthQUNuQixNQUFNLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtBQUN0Qix1QkFBTyxJQUFJLElBQUksQ0FBQzthQUNuQjs7QUFFRCxtQkFBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5QixtQkFBTyxJQUFJLHdCQUFNLGtCQUFrQixDQUFDO0FBQ3BDLG1CQUFPLE9BQU8sQ0FBQztTQUNsQjs7O1dBbFJnQixVQUFVOzs7cUJBQVYsVUFBVTtBQXVSL0IsVUFBVSxDQUFDLFlBQVksR0FBRyx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3lCQ3hSOUMsa0JBQWtCOzs7O2tDQUNiLDJCQUEyQjs7OzswQkFDbEMsbUJBQW1COzs7O21CQUNyQixXQUFXOzs7O3FCQUNQLFVBQVU7OzRCQUNULGtCQUFrQjs7MkJBQ2hCLGVBQWU7Ozs7K0JBQ2hCLHdCQUF3Qjs7OztpQ0FDdkIsMEJBQTBCOzs7O2dDQUMzQix5QkFBeUI7Ozs7NkJBQ3RCLGlCQUFpQjs7Ozs0QkFDaEIsaUJBQWlCOzt3QkFFM0IsVUFBVTs7OztBQUVuQixJQUFJLFNBQVMsR0FBRyxvQ0FBcUIsQ0FBQzs7O0FBRTdDLGVBQWMsU0FBUyxFQUFFO0FBQ3JCLFFBQUksRUFBRSxNQUFNO0FBQ1osaUNBQWE7QUFDYixZQUFRLEVBQUUsSUFBSTtBQUNkLGFBQVMsRUFBRSxLQUFLOztBQUVoQixRQUFJLEVBQUEsZ0JBQUc7QUFDSCxZQUFJLFNBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzs7OztBQUl2QyxZQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQzs7O0FBRzFDLFlBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDOzs7QUFHN0MsWUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7QUFDN0MsWUFBSSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLENBQUM7O0FBRS9DLFlBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUNoQjs7QUFFRCxTQUFLLEVBQUEsaUJBQUc7QUFDSixZQUFJLFNBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLFlBQUksd0JBQU0sWUFBWSxFQUFFO0FBQ3BCLGdCQUFJLENBQUMsTUFBTSxHQUFHLDhCQUFnQixDQUFDO1NBQ2xDLE1BQ0ksSUFBSSx3QkFBTSxjQUFjLEVBQUU7QUFDM0IsZ0JBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ25CO0tBQ0o7OztBQUdELFlBQVEsRUFBQyxrQkFBQyxJQUFJLEVBQUU7QUFDWixlQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQy9COzs7QUFHRCxjQUFVLEVBQUEsb0JBQUMsSUFBSSxFQUFFO0FBQ2IsWUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQixlQUFPLGFBQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDekM7OztBQUdELGNBQVUsRUFBQyxvQkFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUNoQyxZQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFlBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3JDLG1CQUFPO1NBQ1Y7Ozs7QUFJRCxZQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixZQUFJLENBQUMsSUFBSSxFQUFFO0FBQ1AsbUJBQU87U0FDVjs7O0FBR0QsWUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3hELFlBQUksSUFBSSxJQUFJLElBQUksRUFBRTtBQUNkLG1CQUFPO1NBQ1Y7OztBQUdELFlBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RSxZQUFJLGFBQWEsR0FBRywyQkFBYSxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRSxZQUFJLGlCQUFpQixHQUFHLDJCQUFhLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQzs7O0FBR3hELFlBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsRCxZQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDOzs7QUFHeEYsWUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7O0FBRWhELGdCQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHO0FBQzVDLDZCQUFhLEVBQWIsYUFBYTtBQUNiLG1CQUFHLEVBQUUsQ0FBQzthQUNULENBQUM7U0FDTDs7O0FBR0QsWUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLGdCQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCOztBQUVELFlBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN4QixnQkFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzlCOztBQUVELFlBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2QixtQkFBTyxFQUFQLE9BQU8sRUFBRSxJQUFJLEVBQUosSUFBSSxFQUFFLE9BQU8sRUFBUCxPQUFPO0FBQ3RCLGdCQUFJLEVBQUosSUFBSSxFQUFFLGlCQUFpQixFQUFqQixpQkFBaUIsRUFBRSxNQUFNLEVBQU4sTUFBTTtTQUNsQyxDQUFDLENBQUM7OztBQUdILHFDQUFVLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMzQzs7O0FBR0QsV0FBTyxFQUFDLGlCQUFDLElBQUksRUFBRTs7O0FBQ1gsWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsWUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDOztBQUUzQixZQUFJLGFBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNwRCxtQkFBTyxTQUFRLE9BQU8sRUFBRSxDQUFDO1NBQzVCOzs7QUFHRCxlQUFPLGdDQUFhLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQSxLQUFLLEVBQUk7QUFDMUcsZ0JBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNmLHdDQUFNLEdBQUcsQ0FBQyxPQUFPLGFBQVcsTUFBSyxJQUFJLHFEQUFnRCxJQUFJLENBQUMsR0FBRyw0QkFBeUIsQ0FBQztBQUN2SCx1QkFBTzthQUNWOztBQUVELGdCQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1IsNkNBQVUsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFLLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0MsdUJBQU8sTUFBSyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEM7QUFDRCxrQkFBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFN0IsZ0JBQUksTUFBTSxHQUFHLE1BQUssWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7O0FBRWhELG1CQUFPLDZCQUFVLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFBLE1BQU0sRUFBSTtBQUNqRSxvQkFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2YsNENBQU0sR0FBRyxDQUFDLE9BQU8sa0RBQWdELElBQUksQ0FBQyxHQUFHLHNCQUFtQixDQUFDO0FBQzdGLDJCQUFPO2lCQUNWOztBQUVELG9CQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3JCLDJCQUFPLE1BQUssVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNoQzs7QUFFRCxzQkFBSyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDOzs7QUFHbkMsdUJBQU8sZ0NBQWEsV0FBVyxDQUFDLE1BQUssa0JBQWtCLEdBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxJQUFrQixFQUFLO3dCQUFyQixLQUFLLEdBQVAsSUFBa0IsQ0FBaEIsS0FBSzt3QkFBRSxPQUFPLEdBQWhCLElBQWtCLENBQVQsT0FBTzs7QUFDOUcsd0JBQUksS0FBSyxFQUFFO0FBQ1AsOEJBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7OztBQUc3Qiw4QkFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUMsRUFBSTtBQUNoQixnQ0FBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUM7QUFDNUMsZ0NBQUksU0FBUyxHQUFHLE1BQUssS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxNQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7OztBQUduSSxnQ0FBSSxLQUFLLEdBQUcsTUFBSyxhQUFhLENBQUM7QUFDL0IsaUNBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN0QixpQ0FBSyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUN6QyxpQ0FBSyxDQUFDLEtBQUssR0FBRyx3QkFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsaUNBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQzs7QUFFdEMseUNBQU0sVUFBVSxDQUFDLElBQUksUUFBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3lCQUM3RCxDQUFDLENBQUM7cUJBQ047O0FBRUQsMkJBQU8sTUFBSyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsU0FBUyxFQUFJOztBQUUzQyw0QkFBSSxPQUFPLElBQUksU0FBUyxFQUFFO0FBQ3RCLHFDQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7QUFDdkMscUNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2pDLG1DQUFPLFNBQVMsQ0FBQzt5QkFDcEI7cUJBQ0osQ0FBQyxDQUFDO2lCQUNOLENBQUMsQ0FBQzthQUNOLENBQUMsQ0FBQztTQUNOLENBQUMsQ0FBQztLQUNOOztBQUVELGdCQUFZLEVBQUMsc0JBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRTtBQUNuQyxZQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7O0FBRWhCLGFBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO21DQUN5QixhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUE1RSxPQUFPLG9CQUFQLE9BQU87Z0JBQUUsSUFBSSxvQkFBSixJQUFJO2dCQUFFLE9BQU8sb0JBQVAsT0FBTztnQkFBRSxJQUFJLG9CQUFKLElBQUk7Z0JBQUUsaUJBQWlCLG9CQUFqQixpQkFBaUI7Z0JBQUUsTUFBTSxvQkFBTixNQUFNOztBQUM3RCxnQkFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUU5RCxnQkFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0csaUJBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLG9CQUFJLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsc0JBQU0sQ0FBQyxJQUFJLENBQUM7QUFDUiwyQkFBTyxFQUFQLE9BQU8sRUFBRSxJQUFJLEVBQUosSUFBSSxFQUFFLE9BQU8sRUFBUCxPQUFPO0FBQ3RCLHdCQUFJLEVBQUosSUFBSSxFQUFFLGlCQUFpQixFQUFqQixpQkFBaUIsRUFBRSxNQUFNLEVBQU4sTUFBTSxFQUFFLEtBQUssRUFBTCxLQUFLO2lCQUN6QyxDQUFDLENBQUM7YUFDTjtTQUNKOztBQUVELGVBQU8sTUFBTSxDQUFDO0tBQ2pCOzs7QUFHRCxrQkFBYyxFQUFBLHdCQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7O0FBRTFCLGFBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLGlCQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzVEOzs7QUFHRCxhQUFLLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRTtBQUNyQixpQkFBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7O0FBRTNCLG9CQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOztBQUU1QiwyQkFBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzdCO2FBQ0o7U0FDSjs7QUFFRCxhQUFLLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRTs7QUFFckIsZ0JBQUksYUFBWSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOztBQUV4Qyx1QkFBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdkI7U0FDSjtLQUNKOzs7OztBQUtELGlCQUFhLEVBQUMsdUJBQUMsS0FBSyxFQUFFO0FBQ2xCLGVBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdkM7OztBQUdELGtCQUFjLEVBQUMsd0JBQUMsUUFBUSxFQUFFLEtBQUssRUFBRTtBQUM3QixZQUFJLE1BQU0sR0FBRyw4QkFBZ0IsQ0FBQztBQUM5QixZQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2hGLDhCQUFJLEtBQUssNEJBQTBCLFFBQVEsa0JBQWEsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBSyxDQUFDOzs7QUFHaEcsWUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7O0FBRXBGLGtCQUFNLENBQUMsTUFBTSxNQUFBLENBQWIsTUFBTSxxQkFBVyxZQUFZLEVBQUMsQ0FBQztBQUMvQixrQkFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDekMsTUFDSTtBQUNELGtDQUFJLEtBQUssQ0FBQywyQkFDa0IsUUFBUSxZQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLDJDQUMzQyxJQUFJLENBQUMsZ0JBQWdCLFNBQUksSUFBSSxDQUFDLGdCQUFnQixRQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbkc7OztBQUdELFlBQUksQ0FBQyxHQUFHLFNBQVMsR0FBRyxRQUFRLEdBQUcsR0FBRyxHQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQUFBQyxDQUFDO0FBQzlELCtCQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN2QixtQkFBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ3RCLHFCQUFTLEVBQUUsUUFBUTtBQUNuQiwwQ0FBOEIsRUFBRSxJQUFJO1NBQ3ZDLENBQUMsQ0FBQztBQUNILCtCQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFbEIsZUFBTyxFQUFFLEtBQUssRUFBTCxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQ2hDOzs7QUFHRCxlQUFXLEVBQUMscUJBQUMsSUFBSSxFQUFFO0FBQ2YsWUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDWixtQkFBTztTQUNWOzs7QUFHRCxZQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRywwQkFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6RCxZQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGdCQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsMEJBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVFOzs7QUFHRCxZQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRywwQkFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUseUJBQVcsYUFBYSxDQUFDLENBQUM7QUFDdEYsWUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3BELGdCQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsMEJBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztTQUN4Rjs7O0FBR0QsWUFBSSxDQUFDLE1BQU0sR0FBRywwQkFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFBLENBQUM7bUJBQUksQUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUssQ0FBQztTQUFBLENBQUMsQ0FBQzs7O0FBR3RHLFlBQUksQ0FBQyxNQUFNLEdBQUcsMEJBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBQSxDQUFDO21CQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUEsQ0FBRSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztTQUFBLENBQUMsQ0FBQzs7O0FBRzlHLFlBQUksQ0FBQyxlQUFlLEdBQUcsMEJBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7O0FBRWpGLGVBQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7O0FBUUQsbUJBQWUsRUFBQyx5QkFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUNyQyxZQUFJLElBQUksWUFBQSxDQUFDO0FBQ1QsWUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUM7O0FBRXhDLFlBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUN2QixpQkFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsb0JBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQy9CLHdCQUFJLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEMsTUFBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUN4Qyx3QkFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDN0I7O0FBRUQsb0JBQUksSUFBSSxFQUFFO0FBQ04sMEJBQU07aUJBQ1Q7YUFDSjtTQUNKLE1BQ0ksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7QUFDakMsb0JBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDckMsb0JBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDMUI7QUFDRCxlQUFPLElBQUksQ0FBQztLQUNmOzs7QUFHRCxpQkFBYSxFQUFDLHVCQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3ZELFlBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7OztBQUcxQixjQUFNLEdBQUcscUJBQU8sYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQzs7O0FBR3BFLGNBQU0sQ0FBQyxjQUFjLEdBQUcsQUFBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksR0FBSSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztBQUNuRixjQUFNLENBQUMsY0FBYyxHQUFHLEFBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLEdBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7OztBQUduRixZQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDekQsa0JBQU0sQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pGLE1BQ0k7QUFDRCxrQkFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDM0I7OztBQUdELGNBQU0sQ0FBQyxlQUFlLEdBQUcsMEJBQVksYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEYsWUFBSSxNQUFNLENBQUMsZUFBZSxJQUFJLElBQUksRUFBRTtBQUNoQyxrQkFBTSxDQUFDLGVBQWUsR0FBRyxpQkFBSSxTQUFTLENBQUM7U0FDMUM7QUFDRCxjQUFNLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUM7OztBQUdqRCxZQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxVQUFVLEVBQUU7QUFDekMsa0JBQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwRCxNQUNJLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtBQUM1QyxrQkFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzNDLE1BQ0k7QUFDRCxrQkFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ2xDO0FBQ0QsY0FBTSxDQUFDLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDOzs7QUFHbEMsY0FBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDOztBQUUvQixlQUFPLE1BQU0sQ0FBQztLQUNqQjs7O0FBR0QsMkJBQXVCLEVBQUMsaUNBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7QUFDOUMsWUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDOztBQUVoQixZQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO0FBQ2hDLGdCQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNyRSxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRTtBQUM1QyxnQkFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztBQUNqQyxpQkFBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbkMsb0JBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDekQ7U0FDSixNQUFNLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDbEMsa0JBQU0sQ0FBQyxJQUFJLENBQUMsbUNBQWUsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNwRSxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUU7QUFDdkMsZ0JBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7O0FBRWxDLGlCQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwQyxzQkFBTSxDQUFDLElBQUksQ0FBQyxtQ0FBZSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDekQ7U0FDSixNQUFNLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7QUFDcEMsZ0JBQUksUUFBUSxHQUFHLGlCQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQsa0JBQU0sQ0FBQyxJQUFJLENBQUMsbUNBQWUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3hELE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRTtBQUN6QyxnQkFBSSxRQUFRLEdBQUcsaUJBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN2RCxrQkFBTSxDQUFDLElBQUksQ0FBQyxtQ0FBZSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDeEQ7O0FBRUQsZUFBTyxNQUFNLENBQUM7S0FDakI7OztBQUdELG1CQUFlLEVBQUMseUJBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQzFDLFlBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELFlBQUksTUFBTSxHQUFHLENBQUMsRUFBRTs7O0FBR1osZ0JBQUksV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUEsR0FBSSxNQUFNLENBQUM7QUFDN0MsaUJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0IsdUJBQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7QUFDcEQsdUJBQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUEsR0FBSSxXQUFXLENBQUMsQ0FBQztBQUN0RCxzQkFBTSxDQUFDLElBQUksQ0FBQyxrQ0FBYyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDbkQ7QUFDRCxtQkFBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDN0IsbUJBQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQzlCLE1BQ0k7QUFDRCxrQkFBTSxDQUFDLElBQUksQ0FBQyxrQ0FBYyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDbkQ7S0FDSjs7Q0FFSixDQUFDLENBQUM7O0FBRUgsU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7Ozs7Ozs7Ozs7OzBCQzlhUCxtQkFBbUI7Ozs7bUJBQ3JCLFdBQVc7Ozs7NEJBQ0QsaUJBQWlCOztrQ0FDbkIsd0JBQXdCOzs7O0FBRWhELElBQUksWUFBWSxDQUFDOztxQkFFRixZQUFZLEdBQUc7OztBQUcxQixPQUFHLEVBQUMsYUFBQyxRQUFRLEVBQUU7QUFDWCxlQUFPLENBQ0gsUUFBUSxDQUFDLEtBQUssRUFDZCxRQUFRLENBQUMsTUFBTSxFQUNmLFFBQVEsQ0FBQyxNQUFNLEVBQ2YsUUFBUSxDQUFDLE9BQU8sRUFDaEIsUUFBUSxDQUFDLElBQUksRUFDYixRQUFRLENBQUMsTUFBTSxFQUNmLFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLFFBQVEsQ0FBQyxTQUFTLEVBQ2xCLFFBQVEsQ0FBQyxTQUFTLEVBQ2xCLFFBQVEsQ0FBQyxLQUFLLENBQ2pCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2Y7O0FBRUQsWUFBUSxFQUFFO0FBQ04sYUFBSyxFQUFFLFFBQVE7QUFDZixjQUFNLEVBQUUsSUFBSTtBQUNaLFlBQUksRUFBRSxNQUFNO0FBQ1osZUFBTyxFQUFFLEVBQUU7QUFDWCxjQUFNLEVBQUUsV0FBVztBQUNuQixZQUFJLEVBQUUsT0FBTztBQUNiLGlCQUFTLEVBQUUsRUFBRTtBQUNiLGFBQUssRUFBRSxRQUFRO0tBQ2xCOztBQUVELFdBQU8sRUFBQyxpQkFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUM3QixZQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7O0FBRWYsWUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7OztBQUd2QyxhQUFLLENBQUMsSUFBSSxHQUFHLEFBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksd0JBQU0sVUFBVSxDQUFDLDBCQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDOzs7Ozs7OztBQVF6SCxhQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3JELGFBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDeEQsWUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNsQixpQkFBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNoQyxnQkFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLHFCQUFLLENBQUMsTUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzthQUMvQztTQUNKLE1BQ0k7QUFDRCxpQkFBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztTQUN2Qzs7QUFFRCxhQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDOzs7QUFHdEMsYUFBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzs7O0FBR2xELGFBQUssQ0FBQyxPQUFPLEdBQUcsMEJBQVksYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDOzs7QUFHL0YsWUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDNUMsaUJBQUssQ0FBQyxNQUFNLEdBQUcsd0JBQU0sVUFBVSxDQUFDLDBCQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqSCxpQkFBSyxDQUFDLFlBQVksR0FBRywwQkFBWSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQzlHLGlCQUFLLENBQUMsWUFBWSxJQUFJLHdCQUFNLGtCQUFrQixDQUFDO1NBQ2xEOztBQUVELGFBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzs7OztBQUlyQyxZQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQy9CLFlBQUksU0FBUyxJQUFJLElBQUksSUFBSSxpQkFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUU7OztBQUd6RSxxQkFBUyxHQUFHLElBQUksQ0FBQztTQUNwQjs7O0FBR0QsWUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO0FBQ3BCLHFCQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7U0FDdkM7QUFDRCxhQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQzs7O0FBRzVCLFlBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUU7QUFDeEQsZ0JBQUksZ0NBQVksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUN2QyxvQkFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7YUFDeEIsTUFDSSxJQUFJLGdDQUFZLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDN0Msb0JBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO2FBQ3ZCO1NBQ0o7O0FBRUQsYUFBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDOztBQUVoRCxlQUFPLEtBQUssQ0FBQztLQUNoQjs7O0FBR0QsV0FBTyxFQUFDLGlCQUFDLElBQWtDLEVBQUU7WUFBbEMsS0FBSyxHQUFQLElBQWtDLENBQWhDLEtBQUs7WUFBRSxNQUFNLEdBQWYsSUFBa0MsQ0FBekIsTUFBTTtZQUFFLE9BQU8sR0FBeEIsSUFBa0MsQ0FBakIsT0FBTztZQUFFLE1BQU0sR0FBaEMsSUFBa0MsQ0FBUixNQUFNOztBQUNyQyxlQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUN6QyxNQUFNLENBQUMsVUFBQSxDQUFDO21CQUFJLENBQUM7U0FBQSxDQUFDO1NBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2xCOztDQUVKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQ3BIZSxPQUFPOzs7O2tDQUNHLHVCQUF1Qjs7bUNBQ3RCLHdCQUF3Qjs7K0JBQzdCLG9CQUFvQjs7OztrQ0FDakIsdUJBQXVCOzs7O3lCQUM1QixjQUFjOzs7OzZCQUVULG1CQUFtQjs7d0JBQzVCLFVBQVU7Ozs7SUFFTCxJQUFJOzs7Ozs7Ozs7O0FBU1YsYUFUTSxJQUFJLENBU1QsSUFBNEMsRUFBRTtZQUE1QyxNQUFNLEdBQVIsSUFBNEMsQ0FBMUMsTUFBTTtZQUFFLFVBQVUsR0FBcEIsSUFBNEMsQ0FBbEMsVUFBVTtZQUFFLE1BQU0sR0FBNUIsSUFBNEMsQ0FBdEIsTUFBTTtZQUFFLE1BQU0sR0FBcEMsSUFBNEMsQ0FBZCxNQUFNO1lBQUUsSUFBSSxHQUExQyxJQUE0QyxDQUFOLElBQUk7OzhCQVRyQyxJQUFJOztBQVVqQixZQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixZQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixZQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixZQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzs7QUFFdkIsWUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDckIsWUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEIsWUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDckIsWUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDckIsWUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDcEIsWUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEIsWUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7O0FBRWhCLFlBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZFLFlBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQzdCLFlBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdELFlBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLFlBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9ELFlBQUksQ0FBQyxHQUFHLEdBQUcsaUJBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxZQUFJLENBQUMsR0FBRyxHQUFHLGlCQUFJLGFBQWEsQ0FBQyxFQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUM3RixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxBQUFDLEVBQUUsQ0FBQyxFQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxBQUFDLEVBQUUsQ0FBQztBQUMzRSxZQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUs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LEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4QyxvQ0FBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUU7QUFDakMsc0NBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsc0NBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLHFDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNaLHFDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUEsQUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUEsQUFBQyxHQUFHLEVBQUUsQ0FBQztpQ0FDeEMsTUFDSTtBQUNELHFDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMscUNBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQSxBQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQSxBQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lDQUNyRDs2QkFDSjt5QkFDSjs7NkJBRUk7QUFDRCxvQ0FBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUU7QUFDakMsc0NBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0Isc0NBQUUsR0FBRyxTQUFT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LENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzs7O0FBRzFDLGdCQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3JEOzs7OztlQUdZLHNCQUFDLE9BQU8sRUFBRTtBQUNuQixtQkFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2RixtQkFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0YsbUJBQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ25FLG1CQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSx3QkFBTSxrQkFBa0IsQ0FBQyxDQUFDOztBQUV4RSxnQkFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDckM7OztXQTlTZ0IsSUFBSTs7O3FCQUFKLElBQUkiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2Zyb21cIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2lzLWl0ZXJhYmxlXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL21hcFwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9tYXRoL2xvZzJcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnblwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvY3JlYXRlXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydGllc1wiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9mcmVlemVcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5c1wiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9wcm9taXNlXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3NldFwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zeW1ib2xcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfT2JqZWN0JGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpW1wiZGVmYXVsdFwiXTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcblxuICAgICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSkoKTtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9PYmplY3QkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIilbXCJkZWZhdWx0XCJdO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKVtcImRlZmF1bHRcIl07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94Mykge1xuICB2YXIgX2FnYWluID0gdHJ1ZTtcblxuICBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHtcbiAgICB2YXIgb2JqZWN0ID0gX3gsXG4gICAgICAgIHByb3BlcnR5ID0gX3gyLFxuICAgICAgICByZWNlaXZlciA9IF94MztcbiAgICBfYWdhaW4gPSBmYWxzZTtcbiAgICBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgICB2YXIgZGVzYyA9IF9PYmplY3QkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuXG4gICAgICBpZiAocGFyZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfeCA9IHBhcmVudDtcbiAgICAgICAgX3gyID0gcHJvcGVydHk7XG4gICAgICAgIF94MyA9IHJlY2VpdmVyO1xuICAgICAgICBfYWdhaW4gPSB0cnVlO1xuICAgICAgICBkZXNjID0gcGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb250aW51ZSBfZnVuY3Rpb247XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gZGVzYykge1xuICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBkZXNjLmdldDtcblxuICAgICAgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX09iamVjdCRjcmVhdGUgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9jcmVhdGVcIilbXCJkZWZhdWx0XCJdO1xuXG52YXIgX09iamVjdCRzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIilbXCJkZWZhdWx0XCJdO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9PYmplY3Qkc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgIFwiZGVmYXVsdFwiOiBvYmpcbiAgfTtcbn07XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfZ2V0SXRlcmF0b3IgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL2dldC1pdGVyYXRvclwiKVtcImRlZmF1bHRcIl07XG5cbnZhciBfaXNJdGVyYWJsZSA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvaXMtaXRlcmFibGVcIilbXCJkZWZhdWx0XCJdO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7XG4gICAgdmFyIF9hcnIgPSBbXTtcbiAgICB2YXIgX24gPSB0cnVlO1xuICAgIHZhciBfZCA9IGZhbHNlO1xuICAgIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBfaSA9IF9nZXRJdGVyYXRvcihhcnIpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gdHJ1ZTtcbiAgICAgIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdKSBfaVtcInJldHVyblwiXSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gX2FycjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2UgaWYgKF9pc0l0ZXJhYmxlKE9iamVjdChhcnIpKSkge1xuICAgICAgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG4gICAgfVxuICB9O1xufSkoKTtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9BcnJheSRmcm9tID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tXCIpW1wiZGVmYXVsdFwiXTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG4gICAgcmV0dXJuIGFycjI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9BcnJheSRmcm9tKGFycik7XG4gIH1cbn07XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiKGZ1bmN0aW9uIChnbG9iYWwpe1xuLy8gVGhpcyBtZXRob2Qgb2Ygb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0IG5lZWRzIHRvIGJlXG4vLyBrZXB0IGlkZW50aWNhbCB0byB0aGUgd2F5IGl0IGlzIG9idGFpbmVkIGluIHJ1bnRpbWUuanNcbnZhciBnID1cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzO1xuXG4vLyBVc2UgYGdldE93blByb3BlcnR5TmFtZXNgIGJlY2F1c2Ugbm90IGFsbCBicm93c2VycyBzdXBwb3J0IGNhbGxpbmdcbi8vIGBoYXNPd25Qcm9wZXJ0eWAgb24gdGhlIGdsb2JhbCBgc2VsZmAgb2JqZWN0IGluIGEgd29ya2VyLiBTZWUgIzE4My5cbnZhciBoYWRSdW50aW1lID0gZy5yZWdlbmVyYXRvclJ1bnRpbWUgJiZcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZykuaW5kZXhPZihcInJlZ2VuZXJhdG9yUnVudGltZVwiKSA+PSAwO1xuXG4vLyBTYXZlIHRoZSBvbGQgcmVnZW5lcmF0b3JSdW50aW1lIGluIGNhc2UgaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQgbGF0ZXIuXG52YXIgb2xkUnVudGltZSA9IGhhZFJ1bnRpbWUgJiYgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG5cbi8vIEZvcmNlIHJlZXZhbHV0YXRpb24gb2YgcnVudGltZS5qcy5cbmcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL3J1bnRpbWVcIik7XG5cbmlmIChoYWRSdW50aW1lKSB7XG4gIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHJ1bnRpbWUuXG4gIGcucmVnZW5lcmF0b3JSdW50aW1lID0gb2xkUnVudGltZTtcbn0gZWxzZSB7XG4gIC8vIFJlbW92ZSB0aGUgZ2xvYmFsIHByb3BlcnR5IGFkZGVkIGJ5IHJ1bnRpbWUuanMuXG4gIHRyeSB7XG4gICAgZGVsZXRlIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuICB9IGNhdGNoKGUpIHtcbiAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IG1vZHVsZS5leHBvcnRzLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWlZV0psYkMxeWRXNTBhVzFsTDNKbFoyVnVaWEpoZEc5eUwybHVaR1Y0TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeThnVkdocGN5QnRaWFJvYjJRZ2IyWWdiMkowWVdsdWFXNW5JR0VnY21WbVpYSmxibU5sSUhSdklIUm9aU0JuYkc5aVlXd2diMkpxWldOMElHNWxaV1J6SUhSdklHSmxYRzR2THlCclpYQjBJR2xrWlc1MGFXTmhiQ0IwYnlCMGFHVWdkMkY1SUdsMElHbHpJRzlpZEdGcGJtVmtJR2x1SUhKMWJuUnBiV1V1YW5OY2JuWmhjaUJuSUQxY2JpQWdkSGx3Wlc5bUlHZHNiMkpoYkNBOVBUMGdYQ0p2WW1wbFkzUmNJaUEvSUdkc2IySmhiQ0E2WEc0Z0lIUjVjR1Z2WmlCM2FXNWtiM2NnUFQwOUlGd2liMkpxWldOMFhDSWdQeUIzYVc1a2IzY2dPbHh1SUNCMGVYQmxiMllnYzJWc1ppQTlQVDBnWENKdlltcGxZM1JjSWlBL0lITmxiR1lnT2lCMGFHbHpPMXh1WEc0dkx5QlZjMlVnWUdkbGRFOTNibEJ5YjNCbGNuUjVUbUZ0WlhOZ0lHSmxZMkYxYzJVZ2JtOTBJR0ZzYkNCaWNtOTNjMlZ5Y3lCemRYQndiM0owSUdOaGJHeHBibWRjYmk4dklHQm9ZWE5QZDI1UWNtOXdaWEowZVdBZ2IyNGdkR2hsSUdkc2IySmhiQ0JnYzJWc1ptQWdiMkpxWldOMElHbHVJR0VnZDI5eWEyVnlMaUJUWldVZ0l6RTRNeTVjYm5aaGNpQm9ZV1JTZFc1MGFXMWxJRDBnWnk1eVpXZGxibVZ5WVhSdmNsSjFiblJwYldVZ0ppWmNiaUFnVDJKcVpXTjBMbWRsZEU5M2JsQnliM0JsY25SNVRtRnRaWE1vWnlrdWFXNWtaWGhQWmloY0luSmxaMlZ1WlhKaGRHOXlVblZ1ZEdsdFpWd2lLU0ErUFNBd08xeHVYRzR2THlCVFlYWmxJSFJvWlNCdmJHUWdjbVZuWlc1bGNtRjBiM0pTZFc1MGFXMWxJR2x1SUdOaGMyVWdhWFFnYm1WbFpITWdkRzhnWW1VZ2NtVnpkRzl5WldRZ2JHRjBaWEl1WEc1MllYSWdiMnhrVW5WdWRHbHRaU0E5SUdoaFpGSjFiblJwYldVZ0ppWWdaeTV5WldkbGJtVnlZWFJ2Y2xKMWJuUnBiV1U3WEc1Y2JpOHZJRVp2Y21ObElISmxaWFpoYkhWMFlYUnBiMjRnYjJZZ2NuVnVkR2x0WlM1cWN5NWNibWN1Y21WblpXNWxjbUYwYjNKU2RXNTBhVzFsSUQwZ2RXNWtaV1pwYm1Wa08xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDNKMWJuUnBiV1ZjSWlrN1hHNWNibWxtSUNob1lXUlNkVzUwYVcxbEtTQjdYRzRnSUM4dklGSmxjM1J2Y21VZ2RHaGxJRzl5YVdkcGJtRnNJSEoxYm5ScGJXVXVYRzRnSUdjdWNtVm5aVzVsY21GMGIzSlNkVzUwYVcxbElEMGdiMnhrVW5WdWRHbHRaVHRjYm4wZ1pXeHpaU0I3WEc0Z0lDOHZJRkpsYlc5MlpTQjBhR1VnWjJ4dlltRnNJSEJ5YjNCbGNuUjVJR0ZrWkdWa0lHSjVJSEoxYm5ScGJXVXVhbk11WEc0Z0lIUnllU0I3WEc0Z0lDQWdaR1ZzWlhSbElHY3VjbVZuWlc1bGNtRjBiM0pTZFc1MGFXMWxPMXh1SUNCOUlHTmhkR05vS0dVcElIdGNiaUFnSUNCbkxuSmxaMlZ1WlhKaGRHOXlVblZ1ZEdsdFpTQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ2ZWeHVmVnh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUhzZ1hDSmtaV1poZFd4MFhDSTZJRzF2WkhWc1pTNWxlSEJ2Y25SekxDQmZYMlZ6VFc5a2RXeGxPaUIwY25WbElIMDdYRzRpWFgwPSIsIihmdW5jdGlvbiAocHJvY2VzcyxnbG9iYWwpe1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfU3ltYm9sID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2xcIilbXCJkZWZhdWx0XCJdO1xuXG52YXIgX1N5bWJvbCRpdGVyYXRvciA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yXCIpW1wiZGVmYXVsdFwiXTtcblxudmFyIF9PYmplY3QkY3JlYXRlID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvY3JlYXRlXCIpW1wiZGVmYXVsdFwiXTtcblxudmFyIF9Qcm9taXNlID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlXCIpW1wiZGVmYXVsdFwiXTtcblxuIShmdW5jdGlvbiAoZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gdHlwZW9mIF9TeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfU3ltYm9sJGl0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIGdlbmVyYXRvciA9IF9PYmplY3QkY3JlYXRlKChvdXRlckZuIHx8IEdlbmVyYXRvcikucHJvdG90eXBlKTtcblxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmIHx8IG51bGwsIG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKSk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9IEdlbmVyYXRvci5wcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvciA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG4gICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYHZhbHVlIGluc3RhbmNlb2YgQXdhaXRBcmd1bWVudGAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuIFNvbWUgbWF5IGNvbnNpZGVyIHRoZSBuYW1lIG9mIHRoaXMgbWV0aG9kIHRvb1xuICAvLyBjdXRlc3ksIGJ1dCB0aGV5IGFyZSBjdXJtdWRnZW9ucy5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4gbmV3IEF3YWl0QXJndW1lbnQoYXJnKTtcbiAgfTtcblxuICBmdW5jdGlvbiBBd2FpdEFyZ3VtZW50KGFyZykge1xuICAgIHRoaXMuYXJnID0gYXJnO1xuICB9XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICAvLyBUaGlzIGludm9rZSBmdW5jdGlvbiBpcyB3cml0dGVuIGluIGEgc3R5bGUgdGhhdCBhc3N1bWVzIHNvbWVcbiAgICAvLyBjYWxsaW5nIGZ1bmN0aW9uIChvciBQcm9taXNlKSB3aWxsIGhhbmRsZSBleGNlcHRpb25zLlxuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgdmFyIHJlc3VsdCA9IGdlbmVyYXRvclttZXRob2RdKGFyZyk7XG4gICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBBd2FpdEFyZ3VtZW50ID8gX1Byb21pc2UucmVzb2x2ZSh2YWx1ZS5hcmcpLnRoZW4oaW52b2tlTmV4dCwgaW52b2tlVGhyb3cpIDogX1Byb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbiAodW53cmFwcGVkKSB7XG4gICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi4gSWYgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQsIGhvd2V2ZXIsIHRoZVxuICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAvLyB0aHJvd24gYmFjayBpbnRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIGFzIGlzIHRoZSBjYXNlXG4gICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgIC8vIGFsbG93cyB0aGUgY29uc3VtZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgeWllbGRlZFxuICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgLy8gYXdhaXQsIGJ5IGNvbnRyYXN0LCB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBleGFtaW5lIHRoZVxuICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAvLyBsZXQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHByb2Nlc3MuZG9tYWluKSB7XG4gICAgICBpbnZva2UgPSBwcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIGludm9rZU5leHQgPSBpbnZva2UuYmluZChnZW5lcmF0b3IsIFwibmV4dFwiKTtcbiAgICB2YXIgaW52b2tlVGhyb3cgPSBpbnZva2UuYmluZChnZW5lcmF0b3IsIFwidGhyb3dcIik7XG4gICAgdmFyIGludm9rZVJldHVybiA9IGludm9rZS5iaW5kKGdlbmVyYXRvciwgXCJyZXR1cm5cIik7XG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIHZhciBlbnF1ZXVlUmVzdWx0ID1cbiAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBpbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSkgOiBuZXcgX1Byb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgcmVzb2x2ZShpbnZva2UobWV0aG9kLCBhcmcpKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBlbnF1ZXVlUmVzdWx0IGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5XG4gICAgICAvLyBsYXRlciBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICBwcmV2aW91c1Byb21pc2UgPSBlbnF1ZXVlUmVzdWx0W1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGlnbm9yZWQpIHt9KTtcblxuICAgICAgcmV0dXJuIGVucXVldWVSZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkpO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKSA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJyZXR1cm5cIiB8fCBtZXRob2QgPT09IFwidGhyb3dcIiAmJiBkZWxlZ2F0ZS5pdGVyYXRvclttZXRob2RdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIEEgcmV0dXJuIG9yIHRocm93ICh3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gdGhyb3dcbiAgICAgICAgICAgIC8vIG1ldGhvZCkgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICAgIHZhciByZXR1cm5NZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXTtcbiAgICAgICAgICAgIGlmIChyZXR1cm5NZXRob2QpIHtcbiAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKHJldHVybk1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGFyZyk7XG4gICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJldHVybiBtZXRob2QgdGhyZXcgYW4gZXhjZXB0aW9uLCBsZXQgdGhhdFxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBwcmV2YWlsIG92ZXIgdGhlIG9yaWdpbmFsIHJldHVybiBvciB0aHJvdy5cbiAgICAgICAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgICAgIC8vIENvbnRpbnVlIHdpdGggdGhlIG91dGVyIHJldHVybiwgbm93IHRoYXQgdGhlIGRlbGVnYXRlXG4gICAgICAgICAgICAgIC8vIGl0ZXJhdG9yIGhhcyBiZWVuIHRlcm1pbmF0ZWQuXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChkZWxlZ2F0ZS5pdGVyYXRvclttZXRob2RdLCBkZWxlZ2F0ZS5pdGVyYXRvciwgYXJnKTtcblxuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gTGlrZSByZXR1cm5pbmcgZ2VuZXJhdG9yLnRocm93KHVuY2F1Z2h0KSwgYnV0IHdpdGhvdXQgdGhlXG4gICAgICAgICAgICAvLyBvdmVyaGVhZCBvZiBhbiBleHRyYSBmdW5jdGlvbiBjYWxsLlxuICAgICAgICAgICAgbWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERlbGVnYXRlIGdlbmVyYXRvciByYW4gYW5kIGhhbmRsZWQgaXRzIG93biBleGNlcHRpb25zIHNvXG4gICAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBtZXRob2Qgd2FzLCB3ZSBjb250aW51ZSBhcyBpZiBpdCBpc1xuICAgICAgICAgIC8vIFwibmV4dFwiIHdpdGggYW4gdW5kZWZpbmVkIGFyZy5cbiAgICAgICAgICBtZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG4gICAgICAgICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG4gICAgICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkKSB7XG4gICAgICAgICAgICBjb250ZXh0LnNlbnQgPSBhcmc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQuc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oYXJnKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgICBtZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICAgIGFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lID8gR2VuU3RhdGVDb21wbGV0ZWQgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgdmFyIGluZm8gPSB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgaWYgKGNvbnRleHQuZGVsZWdhdGUgJiYgbWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgICAgICAgIGFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGluZm87XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsXG4gICAgICAgICAgICBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIHRoaXMuc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuICAgICAgICByZXR1cm4gISFjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmICh0eXBlID09PSBcImJyZWFrXCIgfHwgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJiBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJiBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZShyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fCByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaChmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuLy8gQW1vbmcgdGhlIHZhcmlvdXMgdHJpY2tzIGZvciBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbFxuLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4vLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxudHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB1bmRlZmluZWQpO1xufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJyksdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTlpWVdKbGJDMXlkVzUwYVcxbEwzSmxaMlZ1WlhKaGRHOXlMM0oxYm5ScGJXVXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSUNoaktTQXlNREUwTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJR2gwZEhCek9pOHZjbUYzTG1kcGRHaDFZaTVqYjIwdlptRmpaV0p2YjJzdmNtVm5aVzVsY21GMGIzSXZiV0Z6ZEdWeUwweEpRMFZPVTBVZ1ptbHNaUzRnUVc1Y2JpQXFJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUWdiMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJseHVJQ29nZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDb3ZYRzVjYmx3aWRYTmxJSE4wY21samRGd2lPMXh1WEc1MllYSWdYMU41YldKdmJDQTlJSEpsY1hWcGNtVW9YQ0ppWVdKbGJDMXlkVzUwYVcxbEwyTnZjbVV0YW5NdmMzbHRZbTlzWENJcFcxd2laR1ZtWVhWc2RGd2lYVHRjYmx4dWRtRnlJRjlUZVcxaWIyd2thWFJsY21GMGIzSWdQU0J5WlhGMWFYSmxLRndpWW1GaVpXd3RjblZ1ZEdsdFpTOWpiM0psTFdwekwzTjViV0p2YkM5cGRHVnlZWFJ2Y2x3aUtWdGNJbVJsWm1GMWJIUmNJbDA3WEc1Y2JuWmhjaUJmVDJKcVpXTjBKR055WldGMFpTQTlJSEpsY1hWcGNtVW9YQ0ppWVdKbGJDMXlkVzUwYVcxbEwyTnZjbVV0YW5NdmIySnFaV04wTDJOeVpXRjBaVndpS1Z0Y0ltUmxabUYxYkhSY0lsMDdYRzVjYm5aaGNpQmZVSEp2YldselpTQTlJSEpsY1hWcGNtVW9YQ0ppWVdKbGJDMXlkVzUwYVcxbEwyTnZjbVV0YW5NdmNISnZiV2x6WlZ3aUtWdGNJbVJsWm1GMWJIUmNJbDA3WEc1Y2JpRW9ablZ1WTNScGIyNGdLR2RzYjJKaGJDa2dlMXh1SUNCY0luVnpaU0J6ZEhKcFkzUmNJanRjYmx4dUlDQjJZWElnYUdGelQzZHVJRDBnVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzVvWVhOUGQyNVFjbTl3WlhKMGVUdGNiaUFnZG1GeUlIVnVaR1ZtYVc1bFpEc2dMeThnVFc5eVpTQmpiMjF3Y21WemMybGliR1VnZEdoaGJpQjJiMmxrSURBdVhHNGdJSFpoY2lCcGRHVnlZWFJ2Y2xONWJXSnZiQ0E5SUhSNWNHVnZaaUJmVTNsdFltOXNJRDA5UFNCY0ltWjFibU4wYVc5dVhDSWdKaVlnWDFONWJXSnZiQ1JwZEdWeVlYUnZjaUI4ZkNCY0lrQkFhWFJsY21GMGIzSmNJanRjYmx4dUlDQjJZWElnYVc1TmIyUjFiR1VnUFNCMGVYQmxiMllnYlc5a2RXeGxJRDA5UFNCY0ltOWlhbVZqZEZ3aU8xeHVJQ0IyWVhJZ2NuVnVkR2x0WlNBOUlHZHNiMkpoYkM1eVpXZGxibVZ5WVhSdmNsSjFiblJwYldVN1hHNGdJR2xtSUNoeWRXNTBhVzFsS1NCN1hHNGdJQ0FnYVdZZ0tHbHVUVzlrZFd4bEtTQjdYRzRnSUNBZ0lDQXZMeUJKWmlCeVpXZGxibVZ5WVhSdmNsSjFiblJwYldVZ2FYTWdaR1ZtYVc1bFpDQm5iRzlpWVd4c2VTQmhibVFnZDJVbmNtVWdhVzRnWVNCdGIyUjFiR1VzWEc0Z0lDQWdJQ0F2THlCdFlXdGxJSFJvWlNCbGVIQnZjblJ6SUc5aWFtVmpkQ0JwWkdWdWRHbGpZV3dnZEc4Z2NtVm5aVzVsY21GMGIzSlNkVzUwYVcxbExseHVJQ0FnSUNBZ2JXOWtkV3hsTG1WNGNHOXlkSE1nUFNCeWRXNTBhVzFsTzF4dUlDQWdJSDFjYmlBZ0lDQXZMeUJFYjI0bmRDQmliM1JvWlhJZ1pYWmhiSFZoZEdsdVp5QjBhR1VnY21WemRDQnZaaUIwYUdseklHWnBiR1VnYVdZZ2RHaGxJSEoxYm5ScGJXVWdkMkZ6WEc0Z0lDQWdMeThnWVd4eVpXRmtlU0JrWldacGJtVmtJR2RzYjJKaGJHeDVMbHh1SUNBZ0lISmxkSFZ5Ymp0Y2JpQWdmVnh1WEc0Z0lDOHZJRVJsWm1sdVpTQjBhR1VnY25WdWRHbHRaU0JuYkc5aVlXeHNlU0FvWVhNZ1pYaHdaV04wWldRZ1lua2daMlZ1WlhKaGRHVmtJR052WkdVcElHRnpJR1ZwZEdobGNseHVJQ0F2THlCdGIyUjFiR1V1Wlhod2IzSjBjeUFvYVdZZ2QyVW5jbVVnYVc0Z1lTQnRiMlIxYkdVcElHOXlJR0VnYm1WM0xDQmxiWEIwZVNCdlltcGxZM1F1WEc0Z0lISjFiblJwYldVZ1BTQm5iRzlpWVd3dWNtVm5aVzVsY21GMGIzSlNkVzUwYVcxbElEMGdhVzVOYjJSMWJHVWdQeUJ0YjJSMWJHVXVaWGh3YjNKMGN5QTZJSHQ5TzF4dVhHNGdJR1oxYm1OMGFXOXVJSGR5WVhBb2FXNXVaWEpHYml3Z2IzVjBaWEpHYml3Z2MyVnNaaXdnZEhKNVRHOWpjMHhwYzNRcElIdGNiaUFnSUNBdkx5QkpaaUJ2ZFhSbGNrWnVJSEJ5YjNacFpHVmtMQ0IwYUdWdUlHOTFkR1Z5Um00dWNISnZkRzkwZVhCbElHbHVjM1JoYm1ObGIyWWdSMlZ1WlhKaGRHOXlMbHh1SUNBZ0lIWmhjaUJuWlc1bGNtRjBiM0lnUFNCZlQySnFaV04wSkdOeVpXRjBaU2dvYjNWMFpYSkdiaUI4ZkNCSFpXNWxjbUYwYjNJcExuQnliM1J2ZEhsd1pTazdYRzVjYmlBZ0lDQm5aVzVsY21GMGIzSXVYMmx1ZG05clpTQTlJRzFoYTJWSmJuWnZhMlZOWlhSb2IyUW9hVzV1WlhKR2Jpd2djMlZzWmlCOGZDQnVkV3hzTENCdVpYY2dRMjl1ZEdWNGRDaDBjbmxNYjJOelRHbHpkQ0I4ZkNCYlhTa3BPMXh1WEc0Z0lDQWdjbVYwZFhKdUlHZGxibVZ5WVhSdmNqdGNiaUFnZlZ4dUlDQnlkVzUwYVcxbExuZHlZWEFnUFNCM2NtRndPMXh1WEc0Z0lDOHZJRlJ5ZVM5allYUmphQ0JvWld4d1pYSWdkRzhnYldsdWFXMXBlbVVnWkdWdmNIUnBiV2w2WVhScGIyNXpMaUJTWlhSMWNtNXpJR0VnWTI5dGNHeGxkR2x2Ymx4dUlDQXZMeUJ5WldOdmNtUWdiR2xyWlNCamIyNTBaWGgwTG5SeWVVVnVkSEpwWlhOYmFWMHVZMjl0Y0d4bGRHbHZiaTRnVkdocGN5QnBiblJsY21aaFkyVWdZMjkxYkdSY2JpQWdMeThnYUdGMlpTQmlaV1Z1SUNoaGJtUWdkMkZ6SUhCeVpYWnBiM1Z6YkhrcElHUmxjMmxuYm1Wa0lIUnZJSFJoYTJVZ1lTQmpiRzl6ZFhKbElIUnZJR0psWEc0Z0lDOHZJR2x1ZG05clpXUWdkMmwwYUc5MWRDQmhjbWQxYldWdWRITXNJR0oxZENCcGJpQmhiR3dnZEdobElHTmhjMlZ6SUhkbElHTmhjbVVnWVdKdmRYUWdkMlZjYmlBZ0x5OGdZV3h5WldGa2VTQm9ZWFpsSUdGdUlHVjRhWE4wYVc1bklHMWxkR2h2WkNCM1pTQjNZVzUwSUhSdklHTmhiR3dzSUhOdklIUm9aWEpsSjNNZ2JtOGdibVZsWkZ4dUlDQXZMeUIwYnlCamNtVmhkR1VnWVNCdVpYY2dablZ1WTNScGIyNGdiMkpxWldOMExpQlhaU0JqWVc0Z1pYWmxiaUJuWlhRZ1lYZGhlU0IzYVhSb0lHRnpjM1Z0YVc1blhHNGdJQzh2SUhSb1pTQnRaWFJvYjJRZ2RHRnJaWE1nWlhoaFkzUnNlU0J2Ym1VZ1lYSm5kVzFsYm5Rc0lITnBibU5sSUhSb1lYUWdhR0Z3Y0dWdWN5QjBieUJpWlNCMGNuVmxYRzRnSUM4dklHbHVJR1YyWlhKNUlHTmhjMlVzSUhOdklIZGxJR1J2YmlkMElHaGhkbVVnZEc4Z2RHOTFZMmdnZEdobElHRnlaM1Z0Wlc1MGN5QnZZbXBsWTNRdUlGUm9aVnh1SUNBdkx5QnZibXg1SUdGa1pHbDBhVzl1WVd3Z1lXeHNiMk5oZEdsdmJpQnlaWEYxYVhKbFpDQnBjeUIwYUdVZ1kyOXRjR3hsZEdsdmJpQnlaV052Y21Rc0lIZG9hV05vWEc0Z0lDOHZJR2hoY3lCaElITjBZV0pzWlNCemFHRndaU0JoYm1RZ2MyOGdhRzl3WldaMWJHeDVJSE5vYjNWc1pDQmlaU0JqYUdWaGNDQjBieUJoYkd4dlkyRjBaUzVjYmlBZ1puVnVZM1JwYjI0Z2RISjVRMkYwWTJnb1ptNHNJRzlpYWl3Z1lYSm5LU0I3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUI3SUhSNWNHVTZJRndpYm05eWJXRnNYQ0lzSUdGeVp6b2dabTR1WTJGc2JDaHZZbW9zSUdGeVp5a2dmVHRjYmlBZ0lDQjlJR05oZEdOb0lDaGxjbklwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUI3SUhSNWNHVTZJRndpZEdoeWIzZGNJaXdnWVhKbk9pQmxjbklnZlR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCMllYSWdSMlZ1VTNSaGRHVlRkWE53Wlc1a1pXUlRkR0Z5ZENBOUlGd2ljM1Z6Y0dWdVpHVmtVM1JoY25SY0lqdGNiaUFnZG1GeUlFZGxibE4wWVhSbFUzVnpjR1Z1WkdWa1dXbGxiR1FnUFNCY0luTjFjM0JsYm1SbFpGbHBaV3hrWENJN1hHNGdJSFpoY2lCSFpXNVRkR0YwWlVWNFpXTjFkR2x1WnlBOUlGd2laWGhsWTNWMGFXNW5YQ0k3WEc0Z0lIWmhjaUJIWlc1VGRHRjBaVU52YlhCc1pYUmxaQ0E5SUZ3aVkyOXRjR3hsZEdWa1hDSTdYRzVjYmlBZ0x5OGdVbVYwZFhKdWFXNW5JSFJvYVhNZ2IySnFaV04wSUdaeWIyMGdkR2hsSUdsdWJtVnlSbTRnYUdGeklIUm9aU0J6WVcxbElHVm1abVZqZENCaGMxeHVJQ0F2THlCaWNtVmhhMmx1WnlCdmRYUWdiMllnZEdobElHUnBjM0JoZEdOb0lITjNhWFJqYUNCemRHRjBaVzFsYm5RdVhHNGdJSFpoY2lCRGIyNTBhVzUxWlZObGJuUnBibVZzSUQwZ2UzMDdYRzVjYmlBZ0x5OGdSSFZ0YlhrZ1kyOXVjM1J5ZFdOMGIzSWdablZ1WTNScGIyNXpJSFJvWVhRZ2QyVWdkWE5sSUdGeklIUm9aU0F1WTI5dWMzUnlkV04wYjNJZ1lXNWtYRzRnSUM4dklDNWpiMjV6ZEhKMVkzUnZjaTV3Y205MGIzUjVjR1VnY0hKdmNHVnlkR2xsY3lCbWIzSWdablZ1WTNScGIyNXpJSFJvWVhRZ2NtVjBkWEp1SUVkbGJtVnlZWFJ2Y2x4dUlDQXZMeUJ2WW1wbFkzUnpMaUJHYjNJZ1puVnNiQ0J6Y0dWaklHTnZiWEJzYVdGdVkyVXNJSGx2ZFNCdFlYa2dkMmx6YUNCMGJ5QmpiMjVtYVdkMWNtVWdlVzkxY2x4dUlDQXZMeUJ0YVc1cFptbGxjaUJ1YjNRZ2RHOGdiV0Z1WjJ4bElIUm9aU0J1WVcxbGN5QnZaaUIwYUdWelpTQjBkMjhnWm5WdVkzUnBiMjV6TGx4dUlDQm1kVzVqZEdsdmJpQkhaVzVsY21GMGIzSW9LU0I3ZlZ4dUlDQm1kVzVqZEdsdmJpQkhaVzVsY21GMGIzSkdkVzVqZEdsdmJpZ3BJSHQ5WEc0Z0lHWjFibU4wYVc5dUlFZGxibVZ5WVhSdmNrWjFibU4wYVc5dVVISnZkRzkwZVhCbEtDa2dlMzFjYmx4dUlDQjJZWElnUjNBZ1BTQkhaVzVsY21GMGIzSkdkVzVqZEdsdmJsQnliM1J2ZEhsd1pTNXdjbTkwYjNSNWNHVWdQU0JIWlc1bGNtRjBiM0l1Y0hKdmRHOTBlWEJsTzF4dUlDQkhaVzVsY21GMGIzSkdkVzVqZEdsdmJpNXdjbTkwYjNSNWNHVWdQU0JIY0M1amIyNXpkSEoxWTNSdmNpQTlJRWRsYm1WeVlYUnZja1oxYm1OMGFXOXVVSEp2ZEc5MGVYQmxPMXh1SUNCSFpXNWxjbUYwYjNKR2RXNWpkR2x2YmxCeWIzUnZkSGx3WlM1amIyNXpkSEoxWTNSdmNpQTlJRWRsYm1WeVlYUnZja1oxYm1OMGFXOXVPMXh1SUNCSFpXNWxjbUYwYjNKR2RXNWpkR2x2Ymk1a2FYTndiR0Y1VG1GdFpTQTlJRndpUjJWdVpYSmhkRzl5Um5WdVkzUnBiMjVjSWp0Y2JseHVJQ0F2THlCSVpXeHdaWElnWm05eUlHUmxabWx1YVc1bklIUm9aU0F1Ym1WNGRDd2dMblJvY205M0xDQmhibVFnTG5KbGRIVnliaUJ0WlhSb2IyUnpJRzltSUhSb1pWeHVJQ0F2THlCSmRHVnlZWFJ2Y2lCcGJuUmxjbVpoWTJVZ2FXNGdkR1Z5YlhNZ2IyWWdZU0J6YVc1bmJHVWdMbDlwYm5admEyVWdiV1YwYUc5a0xseHVJQ0JtZFc1amRHbHZiaUJrWldacGJtVkpkR1Z5WVhSdmNrMWxkR2h2WkhNb2NISnZkRzkwZVhCbEtTQjdYRzRnSUNBZ1cxd2libVY0ZEZ3aUxDQmNJblJvY205M1hDSXNJRndpY21WMGRYSnVYQ0pkTG1admNrVmhZMmdvWm5WdVkzUnBiMjRnS0cxbGRHaHZaQ2tnZTF4dUlDQWdJQ0FnY0hKdmRHOTBlWEJsVzIxbGRHaHZaRjBnUFNCbWRXNWpkR2x2YmlBb1lYSm5LU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxsOXBiblp2YTJVb2JXVjBhRzlrTENCaGNtY3BPMXh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlLVHRjYmlBZ2ZWeHVYRzRnSUhKMWJuUnBiV1V1YVhOSFpXNWxjbUYwYjNKR2RXNWpkR2x2YmlBOUlHWjFibU4wYVc5dUlDaG5aVzVHZFc0cElIdGNiaUFnSUNCMllYSWdZM1J2Y2lBOUlIUjVjR1Z2WmlCblpXNUdkVzRnUFQwOUlGd2lablZ1WTNScGIyNWNJaUFtSmlCblpXNUdkVzR1WTI5dWMzUnlkV04wYjNJN1hHNGdJQ0FnY21WMGRYSnVJR04wYjNJZ1B5QmpkRzl5SUQwOVBTQkhaVzVsY21GMGIzSkdkVzVqZEdsdmJpQjhmRnh1SUNBZ0lDOHZJRVp2Y2lCMGFHVWdibUYwYVhabElFZGxibVZ5WVhSdmNrWjFibU4wYVc5dUlHTnZibk4wY25WamRHOXlMQ0IwYUdVZ1ltVnpkQ0IzWlNCallXNWNiaUFnSUNBdkx5QmtieUJwY3lCMGJ5QmphR1ZqYXlCcGRITWdMbTVoYldVZ2NISnZjR1Z5ZEhrdVhHNGdJQ0FnS0dOMGIzSXVaR2x6Y0d4aGVVNWhiV1VnZkh3Z1kzUnZjaTV1WVcxbEtTQTlQVDBnWENKSFpXNWxjbUYwYjNKR2RXNWpkR2x2Ymx3aUlEb2dabUZzYzJVN1hHNGdJSDA3WEc1Y2JpQWdjblZ1ZEdsdFpTNXRZWEpySUQwZ1puVnVZM1JwYjI0Z0tHZGxia1oxYmlrZ2UxeHVJQ0FnSUdkbGJrWjFiaTVmWDNCeWIzUnZYMThnUFNCSFpXNWxjbUYwYjNKR2RXNWpkR2x2YmxCeWIzUnZkSGx3WlR0Y2JpQWdJQ0JuWlc1R2RXNHVjSEp2ZEc5MGVYQmxJRDBnWDA5aWFtVmpkQ1JqY21WaGRHVW9SM0FwTzF4dUlDQWdJSEpsZEhWeWJpQm5aVzVHZFc0N1hHNGdJSDA3WEc1Y2JpQWdMeThnVjJsMGFHbHVJSFJvWlNCaWIyUjVJRzltSUdGdWVTQmhjM2x1WXlCbWRXNWpkR2x2Yml3Z1lHRjNZV2wwSUhoZ0lHbHpJSFJ5WVc1elptOXliV1ZrSUhSdlhHNGdJQzh2SUdCNWFXVnNaQ0J5WldkbGJtVnlZWFJ2Y2xKMWJuUnBiV1V1WVhkeVlYQW9lQ2xnTENCemJ5QjBhR0YwSUhSb1pTQnlkVzUwYVcxbElHTmhiaUIwWlhOMFhHNGdJQzh2SUdCMllXeDFaU0JwYm5OMFlXNWpaVzltSUVGM1lXbDBRWEpuZFcxbGJuUmdJSFJ2SUdSbGRHVnliV2x1WlNCcFppQjBhR1VnZVdsbGJHUmxaQ0IyWVd4MVpTQnBjMXh1SUNBdkx5QnRaV0Z1ZENCMGJ5QmlaU0JoZDJGcGRHVmtMaUJUYjIxbElHMWhlU0JqYjI1emFXUmxjaUIwYUdVZ2JtRnRaU0J2WmlCMGFHbHpJRzFsZEdodlpDQjBiMjljYmlBZ0x5OGdZM1YwWlhONUxDQmlkWFFnZEdobGVTQmhjbVVnWTNWeWJYVmtaMlZ2Ym5NdVhHNGdJSEoxYm5ScGJXVXVZWGR5WVhBZ1BTQm1kVzVqZEdsdmJpQW9ZWEpuS1NCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCQmQyRnBkRUZ5WjNWdFpXNTBLR0Z5WnlrN1hHNGdJSDA3WEc1Y2JpQWdablZ1WTNScGIyNGdRWGRoYVhSQmNtZDFiV1Z1ZENoaGNtY3BJSHRjYmlBZ0lDQjBhR2x6TG1GeVp5QTlJR0Z5Wnp0Y2JpQWdmVnh1WEc0Z0lHWjFibU4wYVc5dUlFRnplVzVqU1hSbGNtRjBiM0lvWjJWdVpYSmhkRzl5S1NCN1hHNGdJQ0FnTHk4Z1ZHaHBjeUJwYm5admEyVWdablZ1WTNScGIyNGdhWE1nZDNKcGRIUmxiaUJwYmlCaElITjBlV3hsSUhSb1lYUWdZWE56ZFcxbGN5QnpiMjFsWEc0Z0lDQWdMeThnWTJGc2JHbHVaeUJtZFc1amRHbHZiaUFvYjNJZ1VISnZiV2x6WlNrZ2QybHNiQ0JvWVc1a2JHVWdaWGhqWlhCMGFXOXVjeTVjYmlBZ0lDQm1kVzVqZEdsdmJpQnBiblp2YTJVb2JXVjBhRzlrTENCaGNtY3BJSHRjYmlBZ0lDQWdJSFpoY2lCeVpYTjFiSFFnUFNCblpXNWxjbUYwYjNKYmJXVjBhRzlrWFNoaGNtY3BPMXh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnY21WemRXeDBMblpoYkhWbE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUhaaGJIVmxJR2x1YzNSaGJtTmxiMllnUVhkaGFYUkJjbWQxYldWdWRDQS9JRjlRY205dGFYTmxMbkpsYzI5c2RtVW9kbUZzZFdVdVlYSm5LUzUwYUdWdUtHbHVkbTlyWlU1bGVIUXNJR2x1ZG05clpWUm9jbTkzS1NBNklGOVFjbTl0YVhObExuSmxjMjlzZG1Vb2RtRnNkV1VwTG5Sb1pXNG9ablZ1WTNScGIyNGdLSFZ1ZDNKaGNIQmxaQ2tnZTF4dUlDQWdJQ0FnSUNBdkx5QlhhR1Z1SUdFZ2VXbGxiR1JsWkNCUWNtOXRhWE5sSUdseklISmxjMjlzZG1Wa0xDQnBkSE1nWm1sdVlXd2dkbUZzZFdVZ1ltVmpiMjFsYzF4dUlDQWdJQ0FnSUNBdkx5QjBhR1VnTG5aaGJIVmxJRzltSUhSb1pTQlFjbTl0YVhObFBIdDJZV3gxWlN4a2IyNWxmVDRnY21WemRXeDBJR1p2Y2lCMGFHVmNiaUFnSUNBZ0lDQWdMeThnWTNWeWNtVnVkQ0JwZEdWeVlYUnBiMjR1SUVsbUlIUm9aU0JRY205dGFYTmxJR2x6SUhKbGFtVmpkR1ZrTENCb2IzZGxkbVZ5TENCMGFHVmNiaUFnSUNBZ0lDQWdMeThnY21WemRXeDBJR1p2Y2lCMGFHbHpJR2wwWlhKaGRHbHZiaUIzYVd4c0lHSmxJSEpsYW1WamRHVmtJSGRwZEdnZ2RHaGxJSE5oYldWY2JpQWdJQ0FnSUNBZ0x5OGdjbVZoYzI5dUxpQk9iM1JsSUhSb1lYUWdjbVZxWldOMGFXOXVjeUJ2WmlCNWFXVnNaR1ZrSUZCeWIyMXBjMlZ6SUdGeVpTQnViM1JjYmlBZ0lDQWdJQ0FnTHk4Z2RHaHliM2R1SUdKaFkyc2dhVzUwYnlCMGFHVWdaMlZ1WlhKaGRHOXlJR1oxYm1OMGFXOXVMQ0JoY3lCcGN5QjBhR1VnWTJGelpWeHVJQ0FnSUNBZ0lDQXZMeUIzYUdWdUlHRnVJR0YzWVdsMFpXUWdVSEp2YldselpTQnBjeUJ5WldwbFkzUmxaQzRnVkdocGN5QmthV1ptWlhKbGJtTmxJR2x1WEc0Z0lDQWdJQ0FnSUM4dklHSmxhR0YyYVc5eUlHSmxkSGRsWlc0Z2VXbGxiR1FnWVc1a0lHRjNZV2wwSUdseklHbHRjRzl5ZEdGdWRDd2dZbVZqWVhWelpTQnBkRnh1SUNBZ0lDQWdJQ0F2THlCaGJHeHZkM01nZEdobElHTnZibk4xYldWeUlIUnZJR1JsWTJsa1pTQjNhR0YwSUhSdklHUnZJSGRwZEdnZ2RHaGxJSGxwWld4a1pXUmNiaUFnSUNBZ0lDQWdMeThnY21WcVpXTjBhVzl1SUNoemQyRnNiRzkzSUdsMElHRnVaQ0JqYjI1MGFXNTFaU3dnYldGdWRXRnNiSGtnTG5Sb2NtOTNJR2wwSUdKaFkydGNiaUFnSUNBZ0lDQWdMeThnYVc1MGJ5QjBhR1VnWjJWdVpYSmhkRzl5TENCaFltRnVaRzl1SUdsMFpYSmhkR2x2Yml3Z2QyaGhkR1YyWlhJcExpQlhhWFJvWEc0Z0lDQWdJQ0FnSUM4dklHRjNZV2wwTENCaWVTQmpiMjUwY21GemRDd2dkR2hsY21VZ2FYTWdibThnYjNCd2IzSjBkVzVwZEhrZ2RHOGdaWGhoYldsdVpTQjBhR1ZjYmlBZ0lDQWdJQ0FnTHk4Z2NtVnFaV04wYVc5dUlISmxZWE52YmlCdmRYUnphV1JsSUhSb1pTQm5aVzVsY21GMGIzSWdablZ1WTNScGIyNHNJSE52SUhSb1pWeHVJQ0FnSUNBZ0lDQXZMeUJ2Ym14NUlHOXdkR2x2YmlCcGN5QjBieUIwYUhKdmR5QnBkQ0JtY205dElIUm9aU0JoZDJGcGRDQmxlSEJ5WlhOemFXOXVMQ0JoYm1SY2JpQWdJQ0FnSUNBZ0x5OGdiR1YwSUhSb1pTQm5aVzVsY21GMGIzSWdablZ1WTNScGIyNGdhR0Z1Wkd4bElIUm9aU0JsZUdObGNIUnBiMjR1WEc0Z0lDQWdJQ0FnSUhKbGMzVnNkQzUyWVd4MVpTQTlJSFZ1ZDNKaGNIQmxaRHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzNWc2REdGNiaUFnSUNBZ0lIMHBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdjSEp2WTJWemN5QTlQVDBnWENKdlltcGxZM1JjSWlBbUppQndjbTlqWlhOekxtUnZiV0ZwYmlrZ2UxeHVJQ0FnSUNBZ2FXNTJiMnRsSUQwZ2NISnZZMlZ6Y3k1a2IyMWhhVzR1WW1sdVpDaHBiblp2YTJVcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhaaGNpQnBiblp2YTJWT1pYaDBJRDBnYVc1MmIydGxMbUpwYm1Rb1oyVnVaWEpoZEc5eUxDQmNJbTVsZUhSY0lpazdYRzRnSUNBZ2RtRnlJR2x1ZG05clpWUm9jbTkzSUQwZ2FXNTJiMnRsTG1KcGJtUW9aMlZ1WlhKaGRHOXlMQ0JjSW5Sb2NtOTNYQ0lwTzF4dUlDQWdJSFpoY2lCcGJuWnZhMlZTWlhSMWNtNGdQU0JwYm5admEyVXVZbWx1WkNoblpXNWxjbUYwYjNJc0lGd2ljbVYwZFhKdVhDSXBPMXh1SUNBZ0lIWmhjaUJ3Y21WMmFXOTFjMUJ5YjIxcGMyVTdYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQmxibkYxWlhWbEtHMWxkR2h2WkN3Z1lYSm5LU0I3WEc0Z0lDQWdJQ0IyWVhJZ1pXNXhkV1YxWlZKbGMzVnNkQ0E5WEc0Z0lDQWdJQ0F2THlCSlppQmxibkYxWlhWbElHaGhjeUJpWldWdUlHTmhiR3hsWkNCaVpXWnZjbVVzSUhSb1pXNGdkMlVnZDJGdWRDQjBieUIzWVdsMElIVnVkR2xzWEc0Z0lDQWdJQ0F2THlCaGJHd2djSEpsZG1sdmRYTWdVSEp2YldselpYTWdhR0YyWlNCaVpXVnVJSEpsYzI5c2RtVmtJR0psWm05eVpTQmpZV3hzYVc1bklHbHVkbTlyWlN4Y2JpQWdJQ0FnSUM4dklITnZJSFJvWVhRZ2NtVnpkV3gwY3lCaGNtVWdZV3gzWVhseklHUmxiR2wyWlhKbFpDQnBiaUIwYUdVZ1kyOXljbVZqZENCdmNtUmxjaTRnU1daY2JpQWdJQ0FnSUM4dklHVnVjWFZsZFdVZ2FHRnpJRzV2ZENCaVpXVnVJR05oYkd4bFpDQmlaV1p2Y21Vc0lIUm9aVzRnYVhRZ2FYTWdhVzF3YjNKMFlXNTBJSFJ2WEc0Z0lDQWdJQ0F2THlCallXeHNJR2x1ZG05clpTQnBiVzFsWkdsaGRHVnNlU3dnZDJsMGFHOTFkQ0IzWVdsMGFXNW5JRzl1SUdFZ1kyRnNiR0poWTJzZ2RHOGdabWx5WlN4Y2JpQWdJQ0FnSUM4dklITnZJSFJvWVhRZ2RHaGxJR0Z6ZVc1aklHZGxibVZ5WVhSdmNpQm1kVzVqZEdsdmJpQm9ZWE1nZEdobElHOXdjRzl5ZEhWdWFYUjVJSFJ2SUdSdlhHNGdJQ0FnSUNBdkx5QmhibmtnYm1WalpYTnpZWEo1SUhObGRIVndJR2x1SUdFZ2NISmxaR2xqZEdGaWJHVWdkMkY1TGlCVWFHbHpJSEJ5WldScFkzUmhZbWxzYVhSNVhHNGdJQ0FnSUNBdkx5QnBjeUIzYUhrZ2RHaGxJRkJ5YjIxcGMyVWdZMjl1YzNSeWRXTjBiM0lnYzNsdVkyaHliMjV2ZFhOc2VTQnBiblp2YTJWeklHbDBjMXh1SUNBZ0lDQWdMeThnWlhobFkzVjBiM0lnWTJGc2JHSmhZMnNzSUdGdVpDQjNhSGtnWVhONWJtTWdablZ1WTNScGIyNXpJSE41Ym1Ob2NtOXViM1Z6YkhsY2JpQWdJQ0FnSUM4dklHVjRaV04xZEdVZ1kyOWtaU0JpWldadmNtVWdkR2hsSUdacGNuTjBJR0YzWVdsMExpQlRhVzVqWlNCM1pTQnBiWEJzWlcxbGJuUWdjMmx0Y0d4bFhHNGdJQ0FnSUNBdkx5QmhjM2x1WXlCbWRXNWpkR2x2Ym5NZ2FXNGdkR1Z5YlhNZ2IyWWdZWE41Ym1NZ1oyVnVaWEpoZEc5eWN5d2dhWFFnYVhNZ1pYTndaV05wWVd4c2VWeHVJQ0FnSUNBZ0x5OGdhVzF3YjNKMFlXNTBJSFJ2SUdkbGRDQjBhR2x6SUhKcFoyaDBMQ0JsZG1WdUlIUm9iM1ZuYUNCcGRDQnlaWEYxYVhKbGN5QmpZWEpsTGx4dUlDQWdJQ0FnY0hKbGRtbHZkWE5RY205dGFYTmxJRDhnY0hKbGRtbHZkWE5RY205dGFYTmxMblJvWlc0b1puVnVZM1JwYjI0Z0tDa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdhVzUyYjJ0bEtHMWxkR2h2WkN3Z1lYSm5LVHRjYmlBZ0lDQWdJSDBwSURvZ2JtVjNJRjlRY205dGFYTmxLR1oxYm1OMGFXOXVJQ2h5WlhOdmJIWmxLU0I3WEc0Z0lDQWdJQ0FnSUhKbGMyOXNkbVVvYVc1MmIydGxLRzFsZEdodlpDd2dZWEpuS1NrN1hHNGdJQ0FnSUNCOUtUdGNibHh1SUNBZ0lDQWdMeThnUVhadmFXUWdjSEp2Y0dGbllYUnBibWNnWlc1eGRXVjFaVkpsYzNWc2RDQm1ZV2xzZFhKbGN5QjBieUJRY205dGFYTmxjeUJ5WlhSMWNtNWxaQ0JpZVZ4dUlDQWdJQ0FnTHk4Z2JHRjBaWElnYVc1MmIyTmhkR2x2Ym5NZ2IyWWdkR2hsSUdsMFpYSmhkRzl5TGx4dUlDQWdJQ0FnY0hKbGRtbHZkWE5RY205dGFYTmxJRDBnWlc1eGRXVjFaVkpsYzNWc2RGdGNJbU5oZEdOb1hDSmRLR1oxYm1OMGFXOXVJQ2hwWjI1dmNtVmtLU0I3ZlNrN1hHNWNiaUFnSUNBZ0lISmxkSFZ5YmlCbGJuRjFaWFZsVW1WemRXeDBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRVJsWm1sdVpTQjBhR1VnZFc1cFptbGxaQ0JvWld4d1pYSWdiV1YwYUc5a0lIUm9ZWFFnYVhNZ2RYTmxaQ0IwYnlCcGJYQnNaVzFsYm5RZ0xtNWxlSFFzWEc0Z0lDQWdMeThnTG5Sb2NtOTNMQ0JoYm1RZ0xuSmxkSFZ5YmlBb2MyVmxJR1JsWm1sdVpVbDBaWEpoZEc5eVRXVjBhRzlrY3lrdVhHNGdJQ0FnZEdocGN5NWZhVzUyYjJ0bElEMGdaVzV4ZFdWMVpUdGNiaUFnZlZ4dVhHNGdJR1JsWm1sdVpVbDBaWEpoZEc5eVRXVjBhRzlrY3loQmMzbHVZMGwwWlhKaGRHOXlMbkJ5YjNSdmRIbHdaU2s3WEc1Y2JpQWdMeThnVG05MFpTQjBhR0YwSUhOcGJYQnNaU0JoYzNsdVl5Qm1kVzVqZEdsdmJuTWdZWEpsSUdsdGNHeGxiV1Z1ZEdWa0lHOXVJSFJ2Y0NCdlpseHVJQ0F2THlCQmMzbHVZMGwwWlhKaGRHOXlJRzlpYW1WamRITTdJSFJvWlhrZ2FuVnpkQ0J5WlhSMWNtNGdZU0JRY205dGFYTmxJR1p2Y2lCMGFHVWdkbUZzZFdVZ2IyWmNiaUFnTHk4Z2RHaGxJR1pwYm1Gc0lISmxjM1ZzZENCd2NtOWtkV05sWkNCaWVTQjBhR1VnYVhSbGNtRjBiM0l1WEc0Z0lISjFiblJwYldVdVlYTjVibU1nUFNCbWRXNWpkR2x2YmlBb2FXNXVaWEpHYml3Z2IzVjBaWEpHYml3Z2MyVnNaaXdnZEhKNVRHOWpjMHhwYzNRcElIdGNiaUFnSUNCMllYSWdhWFJsY2lBOUlHNWxkeUJCYzNsdVkwbDBaWEpoZEc5eUtIZHlZWEFvYVc1dVpYSkdiaXdnYjNWMFpYSkdiaXdnYzJWc1ppd2dkSEo1VEc5amMweHBjM1FwS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJ5ZFc1MGFXMWxMbWx6UjJWdVpYSmhkRzl5Um5WdVkzUnBiMjRvYjNWMFpYSkdiaWtnUHlCcGRHVnlJQzh2SUVsbUlHOTFkR1Z5Um00Z2FYTWdZU0JuWlc1bGNtRjBiM0lzSUhKbGRIVnliaUIwYUdVZ1puVnNiQ0JwZEdWeVlYUnZjaTVjYmlBZ0lDQTZJR2wwWlhJdWJtVjRkQ2dwTG5Sb1pXNG9ablZ1WTNScGIyNGdLSEpsYzNWc2RDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlISmxjM1ZzZEM1a2IyNWxJRDhnY21WemRXeDBMblpoYkhWbElEb2dhWFJsY2k1dVpYaDBLQ2s3WEc0Z0lDQWdmU2s3WEc0Z0lIMDdYRzVjYmlBZ1puVnVZM1JwYjI0Z2JXRnJaVWx1ZG05clpVMWxkR2h2WkNocGJtNWxja1p1TENCelpXeG1MQ0JqYjI1MFpYaDBLU0I3WEc0Z0lDQWdkbUZ5SUhOMFlYUmxJRDBnUjJWdVUzUmhkR1ZUZFhOd1pXNWtaV1JUZEdGeWREdGNibHh1SUNBZ0lISmxkSFZ5YmlCbWRXNWpkR2x2YmlCcGJuWnZhMlVvYldWMGFHOWtMQ0JoY21jcElIdGNiaUFnSUNBZ0lHbG1JQ2h6ZEdGMFpTQTlQVDBnUjJWdVUzUmhkR1ZGZUdWamRYUnBibWNwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Z3aVIyVnVaWEpoZEc5eUlHbHpJR0ZzY21WaFpIa2djblZ1Ym1sdVoxd2lLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYVdZZ0tITjBZWFJsSUQwOVBTQkhaVzVUZEdGMFpVTnZiWEJzWlhSbFpDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2JXVjBhRzlrSUQwOVBTQmNJblJvY205M1hDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFISnZkeUJoY21jN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0F2THlCQ1pTQm1iM0puYVhacGJtY3NJSEJsY2lBeU5TNHpMak11TXk0eklHOW1JSFJvWlNCemNHVmpPbHh1SUNBZ0lDQWdJQ0F2THlCb2RIUndjem92TDNCbGIzQnNaUzV0YjNwcGJHeGhMbTl5Wnk5K2FtOXlaVzVrYjNKbVppOWxjell0WkhKaFpuUXVhSFJ0YkNOelpXTXRaMlZ1WlhKaGRHOXljbVZ6ZFcxbFhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCa2IyNWxVbVZ6ZFd4MEtDazdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJSGRvYVd4bElDaDBjblZsS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJrWld4bFoyRjBaU0E5SUdOdmJuUmxlSFF1WkdWc1pXZGhkR1U3WEc0Z0lDQWdJQ0FnSUdsbUlDaGtaV3hsWjJGMFpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHRaWFJvYjJRZ1BUMDlJRndpY21WMGRYSnVYQ0lnZkh3Z2JXVjBhRzlrSUQwOVBTQmNJblJvY205M1hDSWdKaVlnWkdWc1pXZGhkR1V1YVhSbGNtRjBiM0piYldWMGFHOWtYU0E5UFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QkJJSEpsZEhWeWJpQnZjaUIwYUhKdmR5QW9kMmhsYmlCMGFHVWdaR1ZzWldkaGRHVWdhWFJsY21GMGIzSWdhR0Z6SUc1dklIUm9jbTkzWEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJ0WlhSb2IyUXBJR0ZzZDJGNWN5QjBaWEp0YVc1aGRHVnpJSFJvWlNCNWFXVnNaQ29nYkc5dmNDNWNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuUmxlSFF1WkdWc1pXZGhkR1VnUFNCdWRXeHNPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJKWmlCMGFHVWdaR1ZzWldkaGRHVWdhWFJsY21GMGIzSWdhR0Z6SUdFZ2NtVjBkWEp1SUcxbGRHaHZaQ3dnWjJsMlpTQnBkQ0JoWEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJqYUdGdVkyVWdkRzhnWTJ4bFlXNGdkWEF1WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnY21WMGRYSnVUV1YwYUc5a0lEMGdaR1ZzWldkaGRHVXVhWFJsY21GMGIzSmJYQ0p5WlhSMWNtNWNJbDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY21WMGRYSnVUV1YwYUc5a0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ5WldOdmNtUWdQU0IwY25sRFlYUmphQ2h5WlhSMWNtNU5aWFJvYjJRc0lHUmxiR1ZuWVhSbExtbDBaWEpoZEc5eUxDQmhjbWNwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NtVmpiM0prTG5SNWNHVWdQVDA5SUZ3aWRHaHliM2RjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRWxtSUhSb1pTQnlaWFIxY200Z2JXVjBhRzlrSUhSb2NtVjNJR0Z1SUdWNFkyVndkR2x2Yml3Z2JHVjBJSFJvWVhSY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QmxlR05sY0hScGIyNGdjSEpsZG1GcGJDQnZkbVZ5SUhSb1pTQnZjbWxuYVc1aGJDQnlaWFIxY200Z2IzSWdkR2h5YjNjdVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JXVjBhRzlrSUQwZ1hDSjBhSEp2ZDF3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHRnlaeUE5SUhKbFkyOXlaQzVoY21jN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0cxbGRHaHZaQ0E5UFQwZ1hDSnlaWFIxY201Y0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJEYjI1MGFXNTFaU0IzYVhSb0lIUm9aU0J2ZFhSbGNpQnlaWFIxY200c0lHNXZkeUIwYUdGMElIUm9aU0JrWld4bFoyRjBaVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJwZEdWeVlYUnZjaUJvWVhNZ1ltVmxiaUIwWlhKdGFXNWhkR1ZrTGx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0lDQjJZWElnY21WamIzSmtJRDBnZEhKNVEyRjBZMmdvWkdWc1pXZGhkR1V1YVhSbGNtRjBiM0piYldWMGFHOWtYU3dnWkdWc1pXZGhkR1V1YVhSbGNtRjBiM0lzSUdGeVp5azdYRzVjYmlBZ0lDQWdJQ0FnSUNCcFppQW9jbVZqYjNKa0xuUjVjR1VnUFQwOUlGd2lkR2h5YjNkY0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR1Y0ZEM1a1pXeGxaMkYwWlNBOUlHNTFiR3c3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUV4cGEyVWdjbVYwZFhKdWFXNW5JR2RsYm1WeVlYUnZjaTUwYUhKdmR5aDFibU5oZFdkb2RDa3NJR0oxZENCM2FYUm9iM1YwSUhSb1pWeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2IzWmxjbWhsWVdRZ2IyWWdZVzRnWlhoMGNtRWdablZ1WTNScGIyNGdZMkZzYkM1Y2JpQWdJQ0FnSUNBZ0lDQWdJRzFsZEdodlpDQTlJRndpZEdoeWIzZGNJanRjYmlBZ0lDQWdJQ0FnSUNBZ0lHRnlaeUE5SUhKbFkyOXlaQzVoY21jN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0F2THlCRVpXeGxaMkYwWlNCblpXNWxjbUYwYjNJZ2NtRnVJR0Z1WkNCb1lXNWtiR1ZrSUdsMGN5QnZkMjRnWlhoalpYQjBhVzl1Y3lCemIxeHVJQ0FnSUNBZ0lDQWdJQzh2SUhKbFoyRnlaR3hsYzNNZ2IyWWdkMmhoZENCMGFHVWdiV1YwYUc5a0lIZGhjeXdnZDJVZ1kyOXVkR2x1ZFdVZ1lYTWdhV1lnYVhRZ2FYTmNiaUFnSUNBZ0lDQWdJQ0F2THlCY0ltNWxlSFJjSWlCM2FYUm9JR0Z1SUhWdVpHVm1hVzVsWkNCaGNtY3VYRzRnSUNBZ0lDQWdJQ0FnYldWMGFHOWtJRDBnWENKdVpYaDBYQ0k3WEc0Z0lDQWdJQ0FnSUNBZ1lYSm5JRDBnZFc1a1pXWnBibVZrTzF4dVhHNGdJQ0FnSUNBZ0lDQWdkbUZ5SUdsdVptOGdQU0J5WldOdmNtUXVZWEpuTzF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2hwYm1adkxtUnZibVVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5SbGVIUmJaR1ZzWldkaGRHVXVjbVZ6ZFd4MFRtRnRaVjBnUFNCcGJtWnZMblpoYkhWbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWRHVjRkQzV1WlhoMElEMGdaR1ZzWldkaGRHVXVibVY0ZEV4dll6dGNiaUFnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2MzUmhkR1VnUFNCSFpXNVRkR0YwWlZOMWMzQmxibVJsWkZscFpXeGtPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdsdVptODdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdWNGRDNWtaV3hsWjJGMFpTQTlJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JwWmlBb2JXVjBhRzlrSUQwOVBTQmNJbTVsZUhSY0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHpkR0YwWlNBOVBUMGdSMlZ1VTNSaGRHVlRkWE53Wlc1a1pXUlphV1ZzWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWRHVjRkQzV6Wlc1MElEMGdZWEpuTzF4dUlDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1MFpYaDBMbk5sYm5RZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHMWxkR2h2WkNBOVBUMGdYQ0owYUhKdmQxd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSE4wWVhSbElEMDlQU0JIWlc1VGRHRjBaVk4xYzNCbGJtUmxaRk4wWVhKMEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCemRHRjBaU0E5SUVkbGJsTjBZWFJsUTI5dGNHeGxkR1ZrTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ1lYSm5PMXh1SUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJR2xtSUNoamIyNTBaWGgwTG1ScGMzQmhkR05vUlhoalpYQjBhVzl1S0dGeVp5a3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJRWxtSUhSb1pTQmthWE53WVhSamFHVmtJR1Y0WTJWd2RHbHZiaUIzWVhNZ1kyRjFaMmgwSUdKNUlHRWdZMkYwWTJnZ1lteHZZMnNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUIwYUdWdUlHeGxkQ0IwYUdGMElHTmhkR05vSUdKc2IyTnJJR2hoYm1Sc1pTQjBhR1VnWlhoalpYQjBhVzl1SUc1dmNtMWhiR3g1TGx4dUlDQWdJQ0FnSUNBZ0lDQWdiV1YwYUc5a0lEMGdYQ0p1WlhoMFhDSTdYRzRnSUNBZ0lDQWdJQ0FnSUNCaGNtY2dQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzFsZEdodlpDQTlQVDBnWENKeVpYUjFjbTVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5SbGVIUXVZV0p5ZFhCMEtGd2ljbVYwZFhKdVhDSXNJR0Z5WnlrN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0J6ZEdGMFpTQTlJRWRsYmxOMFlYUmxSWGhsWTNWMGFXNW5PMXh1WEc0Z0lDQWdJQ0FnSUhaaGNpQnlaV052Y21RZ1BTQjBjbmxEWVhSamFDaHBibTVsY2tadUxDQnpaV3htTENCamIyNTBaWGgwS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEpsWTI5eVpDNTBlWEJsSUQwOVBTQmNJbTV2Y20xaGJGd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdTV1lnWVc0Z1pYaGpaWEIwYVc5dUlHbHpJSFJvY205M2JpQm1jbTl0SUdsdWJtVnlSbTRzSUhkbElHeGxZWFpsSUhOMFlYUmxJRDA5UFZ4dUlDQWdJQ0FnSUNBZ0lDOHZJRWRsYmxOMFlYUmxSWGhsWTNWMGFXNW5JR0Z1WkNCc2IyOXdJR0poWTJzZ1ptOXlJR0Z1YjNSb1pYSWdhVzUyYjJOaGRHbHZiaTVjYmlBZ0lDQWdJQ0FnSUNCemRHRjBaU0E5SUdOdmJuUmxlSFF1Wkc5dVpTQS9JRWRsYmxOMFlYUmxRMjl0Y0d4bGRHVmtJRG9nUjJWdVUzUmhkR1ZUZFhOd1pXNWtaV1JaYVdWc1pEdGNibHh1SUNBZ0lDQWdJQ0FnSUhaaGNpQnBibVp2SUQwZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVTZJSEpsWTI5eVpDNWhjbWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmtiMjVsT2lCamIyNTBaWGgwTG1SdmJtVmNiaUFnSUNBZ0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hKbFkyOXlaQzVoY21jZ1BUMDlJRU52Ym5ScGJuVmxVMlZ1ZEdsdVpXd3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqYjI1MFpYaDBMbVJsYkdWbllYUmxJQ1ltSUcxbGRHaHZaQ0E5UFQwZ1hDSnVaWGgwWENJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdSR1ZzYVdKbGNtRjBaV3g1SUdadmNtZGxkQ0IwYUdVZ2JHRnpkQ0J6Wlc1MElIWmhiSFZsSUhOdklIUm9ZWFFnZDJVZ1pHOXVKM1JjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnWVdOamFXUmxiblJoYkd4NUlIQmhjM01nYVhRZ2IyNGdkRzhnZEdobElHUmxiR1ZuWVhSbExseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCaGNtY2dQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCcGJtWnZPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaHlaV052Y21RdWRIbHdaU0E5UFQwZ1hDSjBhSEp2ZDF3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnYzNSaGRHVWdQU0JIWlc1VGRHRjBaVU52YlhCc1pYUmxaRHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QkVhWE53WVhSamFDQjBhR1VnWlhoalpYQjBhVzl1SUdKNUlHeHZiM0JwYm1jZ1ltRmpheUJoY205MWJtUWdkRzhnZEdobFhHNGdJQ0FnSUNBZ0lDQWdMeThnWTI5dWRHVjRkQzVrYVhOd1lYUmphRVY0WTJWd2RHbHZiaWhoY21jcElHTmhiR3dnWVdKdmRtVXVYRzRnSUNBZ0lDQWdJQ0FnYldWMGFHOWtJRDBnWENKMGFISnZkMXdpTzF4dUlDQWdJQ0FnSUNBZ0lHRnlaeUE5SUhKbFkyOXlaQzVoY21jN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOU8xeHVJQ0I5WEc1Y2JpQWdMeThnUkdWbWFXNWxJRWRsYm1WeVlYUnZjaTV3Y205MGIzUjVjR1V1ZTI1bGVIUXNkR2h5YjNjc2NtVjBkWEp1ZlNCcGJpQjBaWEp0Y3lCdlppQjBhR1ZjYmlBZ0x5OGdkVzVwWm1sbFpDQXVYMmx1ZG05clpTQm9aV3h3WlhJZ2JXVjBhRzlrTGx4dUlDQmtaV1pwYm1WSmRHVnlZWFJ2Y2sxbGRHaHZaSE1vUjNBcE8xeHVYRzRnSUVkd1cybDBaWEpoZEc5eVUzbHRZbTlzWFNBOUlHWjFibU4wYVc5dUlDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZUdGNibHh1SUNCSGNDNTBiMU4wY21sdVp5QTlJR1oxYm1OMGFXOXVJQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdYQ0piYjJKcVpXTjBJRWRsYm1WeVlYUnZjbDFjSWp0Y2JpQWdmVHRjYmx4dUlDQm1kVzVqZEdsdmJpQndkWE5vVkhKNVJXNTBjbmtvYkc5amN5a2dlMXh1SUNBZ0lIWmhjaUJsYm5SeWVTQTlJSHNnZEhKNVRHOWpPaUJzYjJOeld6QmRJSDA3WEc1Y2JpQWdJQ0JwWmlBb01TQnBiaUJzYjJOektTQjdYRzRnSUNBZ0lDQmxiblJ5ZVM1allYUmphRXh2WXlBOUlHeHZZM05iTVYwN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tESWdhVzRnYkc5amN5a2dlMXh1SUNBZ0lDQWdaVzUwY25rdVptbHVZV3hzZVV4dll5QTlJR3h2WTNOYk1sMDdYRzRnSUNBZ0lDQmxiblJ5ZVM1aFpuUmxja3h2WXlBOUlHeHZZM05iTTEwN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZEdocGN5NTBjbmxGYm5SeWFXVnpMbkIxYzJnb1pXNTBjbmtwTzF4dUlDQjlYRzVjYmlBZ1puVnVZM1JwYjI0Z2NtVnpaWFJVY25sRmJuUnllU2hsYm5SeWVTa2dlMXh1SUNBZ0lIWmhjaUJ5WldOdmNtUWdQU0JsYm5SeWVTNWpiMjF3YkdWMGFXOXVJSHg4SUh0OU8xeHVJQ0FnSUhKbFkyOXlaQzUwZVhCbElEMGdYQ0p1YjNKdFlXeGNJanRjYmlBZ0lDQmtaV3hsZEdVZ2NtVmpiM0prTG1GeVp6dGNiaUFnSUNCbGJuUnllUzVqYjIxd2JHVjBhVzl1SUQwZ2NtVmpiM0prTzF4dUlDQjlYRzVjYmlBZ1puVnVZM1JwYjI0Z1EyOXVkR1Y0ZENoMGNubE1iMk56VEdsemRDa2dlMXh1SUNBZ0lDOHZJRlJvWlNCeWIyOTBJR1Z1ZEhKNUlHOWlhbVZqZENBb1pXWm1aV04wYVhabGJIa2dZU0IwY25rZ2MzUmhkR1Z0Wlc1MElIZHBkR2h2ZFhRZ1lTQmpZWFJqYUZ4dUlDQWdJQzh2SUc5eUlHRWdabWx1WVd4c2VTQmliRzlqYXlrZ1oybDJaWE1nZFhNZ1lTQndiR0ZqWlNCMGJ5QnpkRzl5WlNCMllXeDFaWE1nZEdoeWIzZHVJR1p5YjIxY2JpQWdJQ0F2THlCc2IyTmhkR2x2Ym5NZ2QyaGxjbVVnZEdobGNtVWdhWE1nYm04Z1pXNWpiRzl6YVc1bklIUnllU0J6ZEdGMFpXMWxiblF1WEc0Z0lDQWdkR2hwY3k1MGNubEZiblJ5YVdWeklEMGdXM3NnZEhKNVRHOWpPaUJjSW5KdmIzUmNJaUI5WFR0Y2JpQWdJQ0IwY25sTWIyTnpUR2x6ZEM1bWIzSkZZV05vS0hCMWMyaFVjbmxGYm5SeWVTd2dkR2hwY3lrN1hHNGdJQ0FnZEdocGN5NXlaWE5sZENoMGNuVmxLVHRjYmlBZ2ZWeHVYRzRnSUhKMWJuUnBiV1V1YTJWNWN5QTlJR1oxYm1OMGFXOXVJQ2h2WW1wbFkzUXBJSHRjYmlBZ0lDQjJZWElnYTJWNWN5QTlJRnRkTzF4dUlDQWdJR1p2Y2lBb2RtRnlJR3RsZVNCcGJpQnZZbXBsWTNRcElIdGNiaUFnSUNBZ0lHdGxlWE11Y0hWemFDaHJaWGtwTzF4dUlDQWdJSDFjYmlBZ0lDQnJaWGx6TG5KbGRtVnljMlVvS1R0Y2JseHVJQ0FnSUM4dklGSmhkR2hsY2lCMGFHRnVJSEpsZEhWeWJtbHVaeUJoYmlCdlltcGxZM1FnZDJsMGFDQmhJRzVsZUhRZ2JXVjBhRzlrTENCM1pTQnJaV1Z3WEc0Z0lDQWdMeThnZEdocGJtZHpJSE5wYlhCc1pTQmhibVFnY21WMGRYSnVJSFJvWlNCdVpYaDBJR1oxYm1OMGFXOXVJR2wwYzJWc1ppNWNiaUFnSUNCeVpYUjFjbTRnWm5WdVkzUnBiMjRnYm1WNGRDZ3BJSHRjYmlBZ0lDQWdJSGRvYVd4bElDaHJaWGx6TG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnSUNCMllYSWdhMlY1SUQwZ2EyVjVjeTV3YjNBb0tUdGNiaUFnSUNBZ0lDQWdhV1lnS0d0bGVTQnBiaUJ2WW1wbFkzUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCdVpYaDBMblpoYkhWbElEMGdhMlY1TzF4dUlDQWdJQ0FnSUNBZ0lHNWxlSFF1Wkc5dVpTQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnVaWGgwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDOHZJRlJ2SUdGMmIybGtJR055WldGMGFXNW5JR0Z1SUdGa1pHbDBhVzl1WVd3Z2IySnFaV04wTENCM1pTQnFkWE4wSUdoaGJtY2dkR2hsSUM1MllXeDFaVnh1SUNBZ0lDQWdMeThnWVc1a0lDNWtiMjVsSUhCeWIzQmxjblJwWlhNZ2IyWm1JSFJvWlNCdVpYaDBJR1oxYm1OMGFXOXVJRzlpYW1WamRDQnBkSE5sYkdZdUlGUm9hWE5jYmlBZ0lDQWdJQzh2SUdGc2MyOGdaVzV6ZFhKbGN5QjBhR0YwSUhSb1pTQnRhVzVwWm1sbGNpQjNhV3hzSUc1dmRDQmhibTl1ZVcxcGVtVWdkR2hsSUdaMWJtTjBhVzl1TGx4dUlDQWdJQ0FnYm1WNGRDNWtiMjVsSUQwZ2RISjFaVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnVaWGgwTzF4dUlDQWdJSDA3WEc0Z0lIMDdYRzVjYmlBZ1puVnVZM1JwYjI0Z2RtRnNkV1Z6S0dsMFpYSmhZbXhsS1NCN1hHNGdJQ0FnYVdZZ0tHbDBaWEpoWW14bEtTQjdYRzRnSUNBZ0lDQjJZWElnYVhSbGNtRjBiM0pOWlhSb2IyUWdQU0JwZEdWeVlXSnNaVnRwZEdWeVlYUnZjbE41YldKdmJGMDdYRzRnSUNBZ0lDQnBaaUFvYVhSbGNtRjBiM0pOWlhSb2IyUXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR2wwWlhKaGRHOXlUV1YwYUc5a0xtTmhiR3dvYVhSbGNtRmliR1VwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHbDBaWEpoWW14bExtNWxlSFFnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYVhSbGNtRmliR1U3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdsbUlDZ2hhWE5PWVU0b2FYUmxjbUZpYkdVdWJHVnVaM1JvS1NrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnYVNBOUlDMHhMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkQ0E5SUdaMWJtTjBhVzl1SUc1bGVIUW9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2QyaHBiR1VnS0NzcmFTQThJR2wwWlhKaFlteGxMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR2hoYzA5M2JpNWpZV3hzS0dsMFpYSmhZbXhsTENCcEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGgwTG5aaGJIVmxJRDBnYVhSbGNtRmliR1ZiYVYwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUc1bGVIUXVaRzl1WlNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdibVY0ZER0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0J1WlhoMExuWmhiSFZsSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUNBZ0lDQWdJRzVsZUhRdVpHOXVaU0E5SUhSeWRXVTdYRzVjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WNGREdGNiaUFnSUNBZ0lDQWdmVHRjYmx4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WNGRDNXVaWGgwSUQwZ2JtVjRkRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJTWlhSMWNtNGdZVzRnYVhSbGNtRjBiM0lnZDJsMGFDQnVieUIyWVd4MVpYTXVYRzRnSUNBZ2NtVjBkWEp1SUhzZ2JtVjRkRG9nWkc5dVpWSmxjM1ZzZENCOU8xeHVJQ0I5WEc0Z0lISjFiblJwYldVdWRtRnNkV1Z6SUQwZ2RtRnNkV1Z6TzF4dVhHNGdJR1oxYm1OMGFXOXVJR1J2Ym1WU1pYTjFiSFFvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSHNnZG1Gc2RXVTZJSFZ1WkdWbWFXNWxaQ3dnWkc5dVpUb2dkSEoxWlNCOU8xeHVJQ0I5WEc1Y2JpQWdRMjl1ZEdWNGRDNXdjbTkwYjNSNWNHVWdQU0I3WEc0Z0lDQWdZMjl1YzNSeWRXTjBiM0k2SUVOdmJuUmxlSFFzWEc1Y2JpQWdJQ0J5WlhObGREb2dablZ1WTNScGIyNGdjbVZ6WlhRb2MydHBjRlJsYlhCU1pYTmxkQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NXdjbVYySUQwZ01EdGNiaUFnSUNBZ0lIUm9hWE11Ym1WNGRDQTlJREE3WEc0Z0lDQWdJQ0IwYUdsekxuTmxiblFnUFNCMWJtUmxabWx1WldRN1hHNGdJQ0FnSUNCMGFHbHpMbVJ2Ym1VZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUhSb2FYTXVaR1ZzWldkaGRHVWdQU0J1ZFd4c08xeHVYRzRnSUNBZ0lDQjBhR2x6TG5SeWVVVnVkSEpwWlhNdVptOXlSV0ZqYUNoeVpYTmxkRlJ5ZVVWdWRISjVLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tDRnphMmx3VkdWdGNGSmxjMlYwS1NCN1hHNGdJQ0FnSUNBZ0lHWnZjaUFvZG1GeUlHNWhiV1VnYVc0Z2RHaHBjeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDOHZJRTV2ZENCemRYSmxJR0ZpYjNWMElIUm9aU0J2Y0hScGJXRnNJRzl5WkdWeUlHOW1JSFJvWlhObElHTnZibVJwZEdsdmJuTTZYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHNWhiV1V1WTJoaGNrRjBLREFwSUQwOVBTQmNJblJjSWlBbUppQm9ZWE5QZDI0dVkyRnNiQ2gwYUdsekxDQnVZVzFsS1NBbUppQWhhWE5PWVU0b0syNWhiV1V1YzJ4cFkyVW9NU2twS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdselcyNWhiV1ZkSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBzWEc1Y2JpQWdJQ0J6ZEc5d09pQm1kVzVqZEdsdmJpQnpkRzl3S0NrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVrYjI1bElEMGdkSEoxWlR0Y2JseHVJQ0FnSUNBZ2RtRnlJSEp2YjNSRmJuUnllU0E5SUhSb2FYTXVkSEo1Ulc1MGNtbGxjMXN3WFR0Y2JpQWdJQ0FnSUhaaGNpQnliMjkwVW1WamIzSmtJRDBnY205dmRFVnVkSEo1TG1OdmJYQnNaWFJwYjI0N1hHNGdJQ0FnSUNCcFppQW9jbTl2ZEZKbFkyOXlaQzUwZVhCbElEMDlQU0JjSW5Sb2NtOTNYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnY205dmRGSmxZMjl5WkM1aGNtYzdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5KMllXdzdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lHUnBjM0JoZEdOb1JYaGpaWEIwYVc5dU9pQm1kVzVqZEdsdmJpQmthWE53WVhSamFFVjRZMlZ3ZEdsdmJpaGxlR05sY0hScGIyNHBJSHRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbVJ2Ym1VcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ1pYaGpaWEIwYVc5dU8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQjJZWElnWTI5dWRHVjRkQ0E5SUhSb2FYTTdYRzRnSUNBZ0lDQm1kVzVqZEdsdmJpQm9ZVzVrYkdVb2JHOWpMQ0JqWVhWbmFIUXBJSHRjYmlBZ0lDQWdJQ0FnY21WamIzSmtMblI1Y0dVZ1BTQmNJblJvY205M1hDSTdYRzRnSUNBZ0lDQWdJSEpsWTI5eVpDNWhjbWNnUFNCbGVHTmxjSFJwYjI0N1hHNGdJQ0FnSUNBZ0lHTnZiblJsZUhRdWJtVjRkQ0E5SUd4dll6dGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlDRWhZMkYxWjJoME8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQm1iM0lnS0haaGNpQnBJRDBnZEdocGN5NTBjbmxGYm5SeWFXVnpMbXhsYm1kMGFDQXRJREU3SUdrZ1BqMGdNRHNnTFMxcEtTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCbGJuUnllU0E5SUhSb2FYTXVkSEo1Ulc1MGNtbGxjMXRwWFR0Y2JpQWdJQ0FnSUNBZ2RtRnlJSEpsWTI5eVpDQTlJR1Z1ZEhKNUxtTnZiWEJzWlhScGIyNDdYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tHVnVkSEo1TG5SeWVVeHZZeUE5UFQwZ1hDSnliMjkwWENJcElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCRmVHTmxjSFJwYjI0Z2RHaHliM2R1SUc5MWRITnBaR1VnYjJZZ1lXNTVJSFJ5ZVNCaWJHOWpheUIwYUdGMElHTnZkV3hrSUdoaGJtUnNaVnh1SUNBZ0lDQWdJQ0FnSUM4dklHbDBMQ0J6YnlCelpYUWdkR2hsSUdOdmJYQnNaWFJwYjI0Z2RtRnNkV1VnYjJZZ2RHaGxJR1Z1ZEdseVpTQm1kVzVqZEdsdmJpQjBiMXh1SUNBZ0lDQWdJQ0FnSUM4dklIUm9jbTkzSUhSb1pTQmxlR05sY0hScGIyNHVYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR2hoYm1Sc1pTaGNJbVZ1WkZ3aUtUdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdsbUlDaGxiblJ5ZVM1MGNubE1iMk1nUEQwZ2RHaHBjeTV3Y21WMktTQjdYRzRnSUNBZ0lDQWdJQ0FnZG1GeUlHaGhjME5oZEdOb0lEMGdhR0Z6VDNkdUxtTmhiR3dvWlc1MGNua3NJRndpWTJGMFkyaE1iMk5jSWlrN1hHNGdJQ0FnSUNBZ0lDQWdkbUZ5SUdoaGMwWnBibUZzYkhrZ1BTQm9ZWE5QZDI0dVkyRnNiQ2hsYm5SeWVTd2dYQ0ptYVc1aGJHeDVURzlqWENJcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHaGhjME5oZEdOb0lDWW1JR2hoYzBacGJtRnNiSGtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbkJ5WlhZZ1BDQmxiblJ5ZVM1allYUmphRXh2WXlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYUdGdVpHeGxLR1Z1ZEhKNUxtTmhkR05vVEc5akxDQjBjblZsS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvZEdocGN5NXdjbVYySUR3Z1pXNTBjbmt1Wm1sdVlXeHNlVXh2WXlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYUdGdVpHeGxLR1Z1ZEhKNUxtWnBibUZzYkhsTWIyTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvYUdGelEyRjBZMmdwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbkJ5WlhZZ1BDQmxiblJ5ZVM1allYUmphRXh2WXlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYUdGdVpHeGxLR1Z1ZEhKNUxtTmhkR05vVEc5akxDQjBjblZsS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHaGhjMFpwYm1Gc2JIa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuQnlaWFlnUENCbGJuUnllUzVtYVc1aGJHeDVURzlqS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJvWVc1a2JHVW9aVzUwY25rdVptbHVZV3hzZVV4dll5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSW5SeWVTQnpkR0YwWlcxbGJuUWdkMmwwYUc5MWRDQmpZWFJqYUNCdmNpQm1hVzVoYkd4NVhDSXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwc1hHNWNiaUFnSUNCaFluSjFjSFE2SUdaMWJtTjBhVzl1SUdGaWNuVndkQ2gwZVhCbExDQmhjbWNwSUh0Y2JpQWdJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQjBhR2x6TG5SeWVVVnVkSEpwWlhNdWJHVnVaM1JvSUMwZ01Uc2dhU0ErUFNBd095QXRMV2twSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJR1Z1ZEhKNUlEMGdkR2hwY3k1MGNubEZiblJ5YVdWelcybGRPMXh1SUNBZ0lDQWdJQ0JwWmlBb1pXNTBjbmt1ZEhKNVRHOWpJRHc5SUhSb2FYTXVjSEpsZGlBbUppQm9ZWE5QZDI0dVkyRnNiQ2hsYm5SeWVTd2dYQ0ptYVc1aGJHeDVURzlqWENJcElDWW1JSFJvYVhNdWNISmxkaUE4SUdWdWRISjVMbVpwYm1Gc2JIbE1iMk1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQjJZWElnWm1sdVlXeHNlVVZ1ZEhKNUlEMGdaVzUwY25rN1hHNGdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdhV1lnS0dacGJtRnNiSGxGYm5SeWVTQW1KaUFvZEhsd1pTQTlQVDBnWENKaWNtVmhhMXdpSUh4OElIUjVjR1VnUFQwOUlGd2lZMjl1ZEdsdWRXVmNJaWtnSmlZZ1ptbHVZV3hzZVVWdWRISjVMblJ5ZVV4dll5QThQU0JoY21jZ0ppWWdZWEpuSUR3OUlHWnBibUZzYkhsRmJuUnllUzVtYVc1aGJHeDVURzlqS1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRWxuYm05eVpTQjBhR1VnWm1sdVlXeHNlU0JsYm5SeWVTQnBaaUJqYjI1MGNtOXNJR2x6SUc1dmRDQnFkVzF3YVc1bklIUnZJR0ZjYmlBZ0lDQWdJQ0FnTHk4Z2JHOWpZWFJwYjI0Z2IzVjBjMmxrWlNCMGFHVWdkSEo1TDJOaGRHTm9JR0pzYjJOckxseHVJQ0FnSUNBZ0lDQm1hVzVoYkd4NVJXNTBjbmtnUFNCdWRXeHNPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IyWVhJZ2NtVmpiM0prSUQwZ1ptbHVZV3hzZVVWdWRISjVJRDhnWm1sdVlXeHNlVVZ1ZEhKNUxtTnZiWEJzWlhScGIyNGdPaUI3ZlR0Y2JpQWdJQ0FnSUhKbFkyOXlaQzUwZVhCbElEMGdkSGx3WlR0Y2JpQWdJQ0FnSUhKbFkyOXlaQzVoY21jZ1BTQmhjbWM3WEc1Y2JpQWdJQ0FnSUdsbUlDaG1hVzVoYkd4NVJXNTBjbmtwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV1WlhoMElEMGdabWx1WVd4c2VVVnVkSEo1TG1acGJtRnNiSGxNYjJNN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbU52YlhCc1pYUmxLSEpsWTI5eVpDazdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJSEpsZEhWeWJpQkRiMjUwYVc1MVpWTmxiblJwYm1Wc08xeHVJQ0FnSUgwc1hHNWNiaUFnSUNCamIyMXdiR1YwWlRvZ1puVnVZM1JwYjI0Z1kyOXRjR3hsZEdVb2NtVmpiM0prTENCaFpuUmxja3h2WXlrZ2UxeHVJQ0FnSUNBZ2FXWWdLSEpsWTI5eVpDNTBlWEJsSUQwOVBTQmNJblJvY205M1hDSXBJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2djbVZqYjNKa0xtRnlaenRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYVdZZ0tISmxZMjl5WkM1MGVYQmxJRDA5UFNCY0ltSnlaV0ZyWENJZ2ZId2djbVZqYjNKa0xuUjVjR1VnUFQwOUlGd2lZMjl1ZEdsdWRXVmNJaWtnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbTVsZUhRZ1BTQnlaV052Y21RdVlYSm5PMXh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h5WldOdmNtUXVkSGx3WlNBOVBUMGdYQ0p5WlhSMWNtNWNJaWtnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbkoyWVd3Z1BTQnlaV052Y21RdVlYSm5PMXh1SUNBZ0lDQWdJQ0IwYUdsekxtNWxlSFFnUFNCY0ltVnVaRndpTzF4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoeVpXTnZjbVF1ZEhsd1pTQTlQVDBnWENKdWIzSnRZV3hjSWlBbUppQmhablJsY2t4dll5a2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtNWxlSFFnUFNCaFpuUmxja3h2WXp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnWm1sdWFYTm9PaUJtZFc1amRHbHZiaUJtYVc1cGMyZ29abWx1WVd4c2VVeHZZeWtnZTF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlIUm9hWE11ZEhKNVJXNTBjbWxsY3k1c1pXNW5kR2dnTFNBeE95QnBJRDQ5SURBN0lDMHRhU2tnZTF4dUlDQWdJQ0FnSUNCMllYSWdaVzUwY25rZ1BTQjBhR2x6TG5SeWVVVnVkSEpwWlhOYmFWMDdYRzRnSUNBZ0lDQWdJR2xtSUNobGJuUnllUzVtYVc1aGJHeDVURzlqSUQwOVBTQm1hVzVoYkd4NVRHOWpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVqYjIxd2JHVjBaU2hsYm5SeWVTNWpiMjF3YkdWMGFXOXVMQ0JsYm5SeWVTNWhablJsY2t4dll5azdYRzRnSUNBZ0lDQWdJQ0FnY21WelpYUlVjbmxGYm5SeWVTaGxiblJ5ZVNrN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlFTnZiblJwYm5WbFUyVnVkR2x1Wld3N1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOUxGeHVYRzRnSUNBZ1hDSmpZWFJqYUZ3aU9pQm1kVzVqZEdsdmJpQmZZMkYwWTJnb2RISjVURzlqS1NCN1hHNGdJQ0FnSUNCbWIzSWdLSFpoY2lCcElEMGdkR2hwY3k1MGNubEZiblJ5YVdWekxteGxibWQwYUNBdElERTdJR2tnUGowZ01Ec2dMUzFwS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJsYm5SeWVTQTlJSFJvYVhNdWRISjVSVzUwY21sbGMxdHBYVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHVnVkSEo1TG5SeWVVeHZZeUE5UFQwZ2RISjVURzlqS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkbUZ5SUhKbFkyOXlaQ0E5SUdWdWRISjVMbU52YlhCc1pYUnBiMjQ3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSEpsWTI5eVpDNTBlWEJsSUQwOVBTQmNJblJvY205M1hDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUIwYUhKdmQyNGdQU0J5WldOdmNtUXVZWEpuTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVZ6WlhSVWNubEZiblJ5ZVNobGJuUnllU2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhSEp2ZDI0N1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdMeThnVkdobElHTnZiblJsZUhRdVkyRjBZMmdnYldWMGFHOWtJRzExYzNRZ2IyNXNlU0JpWlNCallXeHNaV1FnZDJsMGFDQmhJR3h2WTJGMGFXOXVYRzRnSUNBZ0lDQXZMeUJoY21kMWJXVnVkQ0IwYUdGMElHTnZjbkpsYzNCdmJtUnpJSFJ2SUdFZ2EyNXZkMjRnWTJGMFkyZ2dZbXh2WTJzdVhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWENKcGJHeGxaMkZzSUdOaGRHTm9JR0YwZEdWdGNIUmNJaWs3WEc0Z0lDQWdmU3hjYmx4dUlDQWdJR1JsYkdWbllYUmxXV2xsYkdRNklHWjFibU4wYVc5dUlHUmxiR1ZuWVhSbFdXbGxiR1FvYVhSbGNtRmliR1VzSUhKbGMzVnNkRTVoYldVc0lHNWxlSFJNYjJNcElIdGNiaUFnSUNBZ0lIUm9hWE11WkdWc1pXZGhkR1VnUFNCN1hHNGdJQ0FnSUNBZ0lHbDBaWEpoZEc5eU9pQjJZV3gxWlhNb2FYUmxjbUZpYkdVcExGeHVJQ0FnSUNBZ0lDQnlaWE4xYkhST1lXMWxPaUJ5WlhOMWJIUk9ZVzFsTEZ4dUlDQWdJQ0FnSUNCdVpYaDBURzlqT2lCdVpYaDBURzlqWEc0Z0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNCeVpYUjFjbTRnUTI5dWRHbHVkV1ZUWlc1MGFXNWxiRHRjYmlBZ0lDQjlYRzRnSUgwN1hHNTlLU2hjYmk4dklFRnRiMjVuSUhSb1pTQjJZWEpwYjNWeklIUnlhV05yY3lCbWIzSWdiMkowWVdsdWFXNW5JR0VnY21WbVpYSmxibU5sSUhSdklIUm9aU0JuYkc5aVlXeGNiaTh2SUc5aWFtVmpkQ3dnZEdocGN5QnpaV1Z0Y3lCMGJ5QmlaU0IwYUdVZ2JXOXpkQ0J5Wld4cFlXSnNaU0IwWldOb2JtbHhkV1VnZEdoaGRDQmtiMlZ6SUc1dmRGeHVMeThnZFhObElHbHVaR2x5WldOMElHVjJZV3dnS0hkb2FXTm9JSFpwYjJ4aGRHVnpJRU52Ym5SbGJuUWdVMlZqZFhKcGRIa2dVRzlzYVdONUtTNWNiblI1Y0dWdlppQm5iRzlpWVd3Z1BUMDlJRndpYjJKcVpXTjBYQ0lnUHlCbmJHOWlZV3dnT2lCMGVYQmxiMllnZDJsdVpHOTNJRDA5UFNCY0ltOWlhbVZqZEZ3aUlEOGdkMmx1Wkc5M0lEb2dkSGx3Wlc5bUlITmxiR1lnUFQwOUlGd2liMkpxWldOMFhDSWdQeUJ6Wld4bUlEb2dkVzVrWldacGJtVmtLVHNpWFgwPSIsInZhciBsb29rdXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cbjsoZnVuY3Rpb24gKGV4cG9ydHMpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG4gIHZhciBBcnIgPSAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKVxuICAgID8gVWludDhBcnJheVxuICAgIDogQXJyYXlcblxuXHR2YXIgUExVUyAgID0gJysnLmNoYXJDb2RlQXQoMClcblx0dmFyIFNMQVNIICA9ICcvJy5jaGFyQ29kZUF0KDApXG5cdHZhciBOVU1CRVIgPSAnMCcuY2hhckNvZGVBdCgwKVxuXHR2YXIgTE9XRVIgID0gJ2EnLmNoYXJDb2RlQXQoMClcblx0dmFyIFVQUEVSICA9ICdBJy5jaGFyQ29kZUF0KDApXG5cblx0ZnVuY3Rpb24gZGVjb2RlIChlbHQpIHtcblx0XHR2YXIgY29kZSA9IGVsdC5jaGFyQ29kZUF0KDApXG5cdFx0aWYgKGNvZGUgPT09IFBMVVMpXG5cdFx0XHRyZXR1cm4gNjIgLy8gJysnXG5cdFx0aWYgKGNvZGUgPT09IFNMQVNIKVxuXHRcdFx0cmV0dXJuIDYzIC8vICcvJ1xuXHRcdGlmIChjb2RlIDwgTlVNQkVSKVxuXHRcdFx0cmV0dXJuIC0xIC8vbm8gbWF0Y2hcblx0XHRpZiAoY29kZSA8IE5VTUJFUiArIDEwKVxuXHRcdFx0cmV0dXJuIGNvZGUgLSBOVU1CRVIgKyAyNiArIDI2XG5cdFx0aWYgKGNvZGUgPCBVUFBFUiArIDI2KVxuXHRcdFx0cmV0dXJuIGNvZGUgLSBVUFBFUlxuXHRcdGlmIChjb2RlIDwgTE9XRVIgKyAyNilcblx0XHRcdHJldHVybiBjb2RlIC0gTE9XRVIgKyAyNlxuXHR9XG5cblx0ZnVuY3Rpb24gYjY0VG9CeXRlQXJyYXkgKGI2NCkge1xuXHRcdHZhciBpLCBqLCBsLCB0bXAsIHBsYWNlSG9sZGVycywgYXJyXG5cblx0XHRpZiAoYjY0Lmxlbmd0aCAlIDQgPiAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuXHRcdH1cblxuXHRcdC8vIHRoZSBudW1iZXIgb2YgZXF1YWwgc2lnbnMgKHBsYWNlIGhvbGRlcnMpXG5cdFx0Ly8gaWYgdGhlcmUgYXJlIHR3byBwbGFjZWhvbGRlcnMsIHRoYW4gdGhlIHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBpdFxuXHRcdC8vIHJlcHJlc2VudCBvbmUgYnl0ZVxuXHRcdC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lLCB0aGVuIHRoZSB0aHJlZSBjaGFyYWN0ZXJzIGJlZm9yZSBpdCByZXByZXNlbnQgMiBieXRlc1xuXHRcdC8vIHRoaXMgaXMganVzdCBhIGNoZWFwIGhhY2sgdG8gbm90IGRvIGluZGV4T2YgdHdpY2Vcblx0XHR2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXHRcdHBsYWNlSG9sZGVycyA9ICc9JyA9PT0gYjY0LmNoYXJBdChsZW4gLSAyKSA/IDIgOiAnPScgPT09IGI2NC5jaGFyQXQobGVuIC0gMSkgPyAxIDogMFxuXG5cdFx0Ly8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5cdFx0YXJyID0gbmV3IEFycihiNjQubGVuZ3RoICogMyAvIDQgLSBwbGFjZUhvbGRlcnMpXG5cblx0XHQvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG5cdFx0bCA9IHBsYWNlSG9sZGVycyA+IDAgPyBiNjQubGVuZ3RoIC0gNCA6IGI2NC5sZW5ndGhcblxuXHRcdHZhciBMID0gMFxuXG5cdFx0ZnVuY3Rpb24gcHVzaCAodikge1xuXHRcdFx0YXJyW0wrK10gPSB2XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgPCBsOyBpICs9IDQsIGogKz0gMykge1xuXHRcdFx0dG1wID0gKGRlY29kZShiNjQuY2hhckF0KGkpKSA8PCAxOCkgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDEpKSA8PCAxMikgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDIpKSA8PCA2KSB8IGRlY29kZShiNjQuY2hhckF0KGkgKyAzKSlcblx0XHRcdHB1c2goKHRtcCAmIDB4RkYwMDAwKSA+PiAxNilcblx0XHRcdHB1c2goKHRtcCAmIDB4RkYwMCkgPj4gOClcblx0XHRcdHB1c2godG1wICYgMHhGRilcblx0XHR9XG5cblx0XHRpZiAocGxhY2VIb2xkZXJzID09PSAyKSB7XG5cdFx0XHR0bXAgPSAoZGVjb2RlKGI2NC5jaGFyQXQoaSkpIDw8IDIpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAxKSkgPj4gNClcblx0XHRcdHB1c2godG1wICYgMHhGRilcblx0XHR9IGVsc2UgaWYgKHBsYWNlSG9sZGVycyA9PT0gMSkge1xuXHRcdFx0dG1wID0gKGRlY29kZShiNjQuY2hhckF0KGkpKSA8PCAxMCkgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDEpKSA8PCA0KSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMikpID4+IDIpXG5cdFx0XHRwdXNoKCh0bXAgPj4gOCkgJiAweEZGKVxuXHRcdFx0cHVzaCh0bXAgJiAweEZGKVxuXHRcdH1cblxuXHRcdHJldHVybiBhcnJcblx0fVxuXG5cdGZ1bmN0aW9uIHVpbnQ4VG9CYXNlNjQgKHVpbnQ4KSB7XG5cdFx0dmFyIGksXG5cdFx0XHRleHRyYUJ5dGVzID0gdWludDgubGVuZ3RoICUgMywgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcblx0XHRcdG91dHB1dCA9IFwiXCIsXG5cdFx0XHR0ZW1wLCBsZW5ndGhcblxuXHRcdGZ1bmN0aW9uIGVuY29kZSAobnVtKSB7XG5cdFx0XHRyZXR1cm4gbG9va3VwLmNoYXJBdChudW0pXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcblx0XHRcdHJldHVybiBlbmNvZGUobnVtID4+IDE4ICYgMHgzRikgKyBlbmNvZGUobnVtID4+IDEyICYgMHgzRikgKyBlbmNvZGUobnVtID4+IDYgJiAweDNGKSArIGVuY29kZShudW0gJiAweDNGKVxuXHRcdH1cblxuXHRcdC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcblx0XHRmb3IgKGkgPSAwLCBsZW5ndGggPSB1aW50OC5sZW5ndGggLSBleHRyYUJ5dGVzOyBpIDwgbGVuZ3RoOyBpICs9IDMpIHtcblx0XHRcdHRlbXAgPSAodWludDhbaV0gPDwgMTYpICsgKHVpbnQ4W2kgKyAxXSA8PCA4KSArICh1aW50OFtpICsgMl0pXG5cdFx0XHRvdXRwdXQgKz0gdHJpcGxldFRvQmFzZTY0KHRlbXApXG5cdFx0fVxuXG5cdFx0Ly8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuXHRcdHN3aXRjaCAoZXh0cmFCeXRlcykge1xuXHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHR0ZW1wID0gdWludDhbdWludDgubGVuZ3RoIC0gMV1cblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSh0ZW1wID4+IDIpXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUoKHRlbXAgPDwgNCkgJiAweDNGKVxuXHRcdFx0XHRvdXRwdXQgKz0gJz09J1xuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHR0ZW1wID0gKHVpbnQ4W3VpbnQ4Lmxlbmd0aCAtIDJdIDw8IDgpICsgKHVpbnQ4W3VpbnQ4Lmxlbmd0aCAtIDFdKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKHRlbXAgPj4gMTApXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUoKHRlbXAgPj4gNCkgJiAweDNGKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wIDw8IDIpICYgMHgzRilcblx0XHRcdFx0b3V0cHV0ICs9ICc9J1xuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxuXG5cdGV4cG9ydHMudG9CeXRlQXJyYXkgPSBiNjRUb0J5dGVBcnJheVxuXHRleHBvcnRzLmZyb21CeXRlQXJyYXkgPSB1aW50OFRvQmFzZTY0XG59KHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJyA/ICh0aGlzLmJhc2U2NGpzID0ge30pIDogZXhwb3J0cykpXG4iLCIvKipcbiAqIEJpdCB0d2lkZGxpbmcgaGFja3MgZm9yIEphdmFTY3JpcHQuXG4gKlxuICogQXV0aG9yOiBNaWtvbGEgTHlzZW5rb1xuICpcbiAqIFBvcnRlZCBmcm9tIFN0YW5mb3JkIGJpdCB0d2lkZGxpbmcgaGFjayBsaWJyYXJ5OlxuICogICAgaHR0cDovL2dyYXBoaWNzLnN0YW5mb3JkLmVkdS9+c2VhbmRlci9iaXRoYWNrcy5odG1sXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7IFwidXNlIHJlc3RyaWN0XCI7XG5cbi8vTnVtYmVyIG9mIGJpdHMgaW4gYW4gaW50ZWdlclxudmFyIElOVF9CSVRTID0gMzI7XG5cbi8vQ29uc3RhbnRzXG5leHBvcnRzLklOVF9CSVRTICA9IElOVF9CSVRTO1xuZXhwb3J0cy5JTlRfTUFYICAgPSAgMHg3ZmZmZmZmZjtcbmV4cG9ydHMuSU5UX01JTiAgID0gLTE8PChJTlRfQklUUy0xKTtcblxuLy9SZXR1cm5zIC0xLCAwLCArMSBkZXBlbmRpbmcgb24gc2lnbiBvZiB4XG5leHBvcnRzLnNpZ24gPSBmdW5jdGlvbih2KSB7XG4gIHJldHVybiAodiA+IDApIC0gKHYgPCAwKTtcbn1cblxuLy9Db21wdXRlcyBhYnNvbHV0ZSB2YWx1ZSBvZiBpbnRlZ2VyXG5leHBvcnRzLmFicyA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIG1hc2sgPSB2ID4+IChJTlRfQklUUy0xKTtcbiAgcmV0dXJuICh2IF4gbWFzaykgLSBtYXNrO1xufVxuXG4vL0NvbXB1dGVzIG1pbmltdW0gb2YgaW50ZWdlcnMgeCBhbmQgeVxuZXhwb3J0cy5taW4gPSBmdW5jdGlvbih4LCB5KSB7XG4gIHJldHVybiB5IF4gKCh4IF4geSkgJiAtKHggPCB5KSk7XG59XG5cbi8vQ29tcHV0ZXMgbWF4aW11bSBvZiBpbnRlZ2VycyB4IGFuZCB5XG5leHBvcnRzLm1heCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgcmV0dXJuIHggXiAoKHggXiB5KSAmIC0oeCA8IHkpKTtcbn1cblxuLy9DaGVja3MgaWYgYSBudW1iZXIgaXMgYSBwb3dlciBvZiB0d29cbmV4cG9ydHMuaXNQb3cyID0gZnVuY3Rpb24odikge1xuICByZXR1cm4gISh2ICYgKHYtMSkpICYmICghIXYpO1xufVxuXG4vL0NvbXB1dGVzIGxvZyBiYXNlIDIgb2YgdlxuZXhwb3J0cy5sb2cyID0gZnVuY3Rpb24odikge1xuICB2YXIgciwgc2hpZnQ7XG4gIHIgPSAgICAgKHYgPiAweEZGRkYpIDw8IDQ7IHYgPj4+PSByO1xuICBzaGlmdCA9ICh2ID4gMHhGRiAgKSA8PCAzOyB2ID4+Pj0gc2hpZnQ7IHIgfD0gc2hpZnQ7XG4gIHNoaWZ0ID0gKHYgPiAweEYgICApIDw8IDI7IHYgPj4+PSBzaGlmdDsgciB8PSBzaGlmdDtcbiAgc2hpZnQgPSAodiA+IDB4MyAgICkgPDwgMTsgdiA+Pj49IHNoaWZ0OyByIHw9IHNoaWZ0O1xuICByZXR1cm4gciB8ICh2ID4+IDEpO1xufVxuXG4vL0NvbXB1dGVzIGxvZyBiYXNlIDEwIG9mIHZcbmV4cG9ydHMubG9nMTAgPSBmdW5jdGlvbih2KSB7XG4gIHJldHVybiAgKHYgPj0gMTAwMDAwMDAwMCkgPyA5IDogKHYgPj0gMTAwMDAwMDAwKSA/IDggOiAodiA+PSAxMDAwMDAwMCkgPyA3IDpcbiAgICAgICAgICAodiA+PSAxMDAwMDAwKSA/IDYgOiAodiA+PSAxMDAwMDApID8gNSA6ICh2ID49IDEwMDAwKSA/IDQgOlxuICAgICAgICAgICh2ID49IDEwMDApID8gMyA6ICh2ID49IDEwMCkgPyAyIDogKHYgPj0gMTApID8gMSA6IDA7XG59XG5cbi8vQ291bnRzIG51bWJlciBvZiBiaXRzXG5leHBvcnRzLnBvcENvdW50ID0gZnVuY3Rpb24odikge1xuICB2ID0gdiAtICgodiA+Pj4gMSkgJiAweDU1NTU1NTU1KTtcbiAgdiA9ICh2ICYgMHgzMzMzMzMzMykgKyAoKHYgPj4+IDIpICYgMHgzMzMzMzMzMyk7XG4gIHJldHVybiAoKHYgKyAodiA+Pj4gNCkgJiAweEYwRjBGMEYpICogMHgxMDEwMTAxKSA+Pj4gMjQ7XG59XG5cbi8vQ291bnRzIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvc1xuZnVuY3Rpb24gY291bnRUcmFpbGluZ1plcm9zKHYpIHtcbiAgdmFyIGMgPSAzMjtcbiAgdiAmPSAtdjtcbiAgaWYgKHYpIGMtLTtcbiAgaWYgKHYgJiAweDAwMDBGRkZGKSBjIC09IDE2O1xuICBpZiAodiAmIDB4MDBGRjAwRkYpIGMgLT0gODtcbiAgaWYgKHYgJiAweDBGMEYwRjBGKSBjIC09IDQ7XG4gIGlmICh2ICYgMHgzMzMzMzMzMykgYyAtPSAyO1xuICBpZiAodiAmIDB4NTU1NTU1NTUpIGMgLT0gMTtcbiAgcmV0dXJuIGM7XG59XG5leHBvcnRzLmNvdW50VHJhaWxpbmdaZXJvcyA9IGNvdW50VHJhaWxpbmdaZXJvcztcblxuLy9Sb3VuZHMgdG8gbmV4dCBwb3dlciBvZiAyXG5leHBvcnRzLm5leHRQb3cyID0gZnVuY3Rpb24odikge1xuICB2ICs9IHYgPT09IDA7XG4gIC0tdjtcbiAgdiB8PSB2ID4+PiAxO1xuICB2IHw9IHYgPj4+IDI7XG4gIHYgfD0gdiA+Pj4gNDtcbiAgdiB8PSB2ID4+PiA4O1xuICB2IHw9IHYgPj4+IDE2O1xuICByZXR1cm4gdiArIDE7XG59XG5cbi8vUm91bmRzIGRvd24gdG8gcHJldmlvdXMgcG93ZXIgb2YgMlxuZXhwb3J0cy5wcmV2UG93MiA9IGZ1bmN0aW9uKHYpIHtcbiAgdiB8PSB2ID4+PiAxO1xuICB2IHw9IHYgPj4+IDI7XG4gIHYgfD0gdiA+Pj4gNDtcbiAgdiB8PSB2ID4+PiA4O1xuICB2IHw9IHYgPj4+IDE2O1xuICByZXR1cm4gdiAtICh2Pj4+MSk7XG59XG5cbi8vQ29tcHV0ZXMgcGFyaXR5IG9mIHdvcmRcbmV4cG9ydHMucGFyaXR5ID0gZnVuY3Rpb24odikge1xuICB2IF49IHYgPj4+IDE2O1xuICB2IF49IHYgPj4+IDg7XG4gIHYgXj0gdiA+Pj4gNDtcbiAgdiAmPSAweGY7XG4gIHJldHVybiAoMHg2OTk2ID4+PiB2KSAmIDE7XG59XG5cbnZhciBSRVZFUlNFX1RBQkxFID0gbmV3IEFycmF5KDI1Nik7XG5cbihmdW5jdGlvbih0YWIpIHtcbiAgZm9yKHZhciBpPTA7IGk8MjU2OyArK2kpIHtcbiAgICB2YXIgdiA9IGksIHIgPSBpLCBzID0gNztcbiAgICBmb3IgKHYgPj4+PSAxOyB2OyB2ID4+Pj0gMSkge1xuICAgICAgciA8PD0gMTtcbiAgICAgIHIgfD0gdiAmIDE7XG4gICAgICAtLXM7XG4gICAgfVxuICAgIHRhYltpXSA9IChyIDw8IHMpICYgMHhmZjtcbiAgfVxufSkoUkVWRVJTRV9UQUJMRSk7XG5cbi8vUmV2ZXJzZSBiaXRzIGluIGEgMzIgYml0IHdvcmRcbmV4cG9ydHMucmV2ZXJzZSA9IGZ1bmN0aW9uKHYpIHtcbiAgcmV0dXJuICAoUkVWRVJTRV9UQUJMRVsgdiAgICAgICAgICYgMHhmZl0gPDwgMjQpIHxcbiAgICAgICAgICAoUkVWRVJTRV9UQUJMRVsodiA+Pj4gOCkgICYgMHhmZl0gPDwgMTYpIHxcbiAgICAgICAgICAoUkVWRVJTRV9UQUJMRVsodiA+Pj4gMTYpICYgMHhmZl0gPDwgOCkgIHxcbiAgICAgICAgICAgUkVWRVJTRV9UQUJMRVsodiA+Pj4gMjQpICYgMHhmZl07XG59XG5cbi8vSW50ZXJsZWF2ZSBiaXRzIG9mIDIgY29vcmRpbmF0ZXMgd2l0aCAxNiBiaXRzLiAgVXNlZnVsIGZvciBmYXN0IHF1YWR0cmVlIGNvZGVzXG5leHBvcnRzLmludGVybGVhdmUyID0gZnVuY3Rpb24oeCwgeSkge1xuICB4ICY9IDB4RkZGRjtcbiAgeCA9ICh4IHwgKHggPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgeCA9ICh4IHwgKHggPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICB5ICY9IDB4RkZGRjtcbiAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgeSA9ICh5IHwgKHkgPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICByZXR1cm4geCB8ICh5IDw8IDEpO1xufVxuXG4vL0V4dHJhY3RzIHRoZSBudGggaW50ZXJsZWF2ZWQgY29tcG9uZW50XG5leHBvcnRzLmRlaW50ZXJsZWF2ZTIgPSBmdW5jdGlvbih2LCBuKSB7XG4gIHYgPSAodiA+Pj4gbikgJiAweDU1NTU1NTU1O1xuICB2ID0gKHYgfCAodiA+Pj4gMSkpICAmIDB4MzMzMzMzMzM7XG4gIHYgPSAodiB8ICh2ID4+PiAyKSkgICYgMHgwRjBGMEYwRjtcbiAgdiA9ICh2IHwgKHYgPj4+IDQpKSAgJiAweDAwRkYwMEZGO1xuICB2ID0gKHYgfCAodiA+Pj4gMTYpKSAmIDB4MDAwRkZGRjtcbiAgcmV0dXJuICh2IDw8IDE2KSA+PiAxNjtcbn1cblxuXG4vL0ludGVybGVhdmUgYml0cyBvZiAzIGNvb3JkaW5hdGVzLCBlYWNoIHdpdGggMTAgYml0cy4gIFVzZWZ1bCBmb3IgZmFzdCBvY3RyZWUgY29kZXNcbmV4cG9ydHMuaW50ZXJsZWF2ZTMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XG4gIHggJj0gMHgzRkY7XG4gIHggID0gKHggfCAoeDw8MTYpKSAmIDQyNzgxOTAzMzU7XG4gIHggID0gKHggfCAoeDw8OCkpICAmIDI1MTcxOTY5NTtcbiAgeCAgPSAoeCB8ICh4PDw0KSkgICYgMzI3MjM1NjAzNTtcbiAgeCAgPSAoeCB8ICh4PDwyKSkgICYgMTIyNzEzMzUxMztcblxuICB5ICY9IDB4M0ZGO1xuICB5ICA9ICh5IHwgKHk8PDE2KSkgJiA0Mjc4MTkwMzM1O1xuICB5ICA9ICh5IHwgKHk8PDgpKSAgJiAyNTE3MTk2OTU7XG4gIHkgID0gKHkgfCAoeTw8NCkpICAmIDMyNzIzNTYwMzU7XG4gIHkgID0gKHkgfCAoeTw8MikpICAmIDEyMjcxMzM1MTM7XG4gIHggfD0gKHkgPDwgMSk7XG4gIFxuICB6ICY9IDB4M0ZGO1xuICB6ICA9ICh6IHwgKHo8PDE2KSkgJiA0Mjc4MTkwMzM1O1xuICB6ICA9ICh6IHwgKHo8PDgpKSAgJiAyNTE3MTk2OTU7XG4gIHogID0gKHogfCAoejw8NCkpICAmIDMyNzIzNTYwMzU7XG4gIHogID0gKHogfCAoejw8MikpICAmIDEyMjcxMzM1MTM7XG4gIFxuICByZXR1cm4geCB8ICh6IDw8IDIpO1xufVxuXG4vL0V4dHJhY3RzIG50aCBpbnRlcmxlYXZlZCBjb21wb25lbnQgb2YgYSAzLXR1cGxlXG5leHBvcnRzLmRlaW50ZXJsZWF2ZTMgPSBmdW5jdGlvbih2LCBuKSB7XG4gIHYgPSAodiA+Pj4gbikgICAgICAgJiAxMjI3MTMzNTEzO1xuICB2ID0gKHYgfCAodj4+PjIpKSAgICYgMzI3MjM1NjAzNTtcbiAgdiA9ICh2IHwgKHY+Pj40KSkgICAmIDI1MTcxOTY5NTtcbiAgdiA9ICh2IHwgKHY+Pj44KSkgICAmIDQyNzgxOTAzMzU7XG4gIHYgPSAodiB8ICh2Pj4+MTYpKSAgJiAweDNGRjtcbiAgcmV0dXJuICh2PDwyMik+PjIyO1xufVxuXG4vL0NvbXB1dGVzIG5leHQgY29tYmluYXRpb24gaW4gY29sZXhpY29ncmFwaGljIG9yZGVyICh0aGlzIGlzIG1pc3Rha2VubHkgY2FsbGVkIG5leHRQZXJtdXRhdGlvbiBvbiB0aGUgYml0IHR3aWRkbGluZyBoYWNrcyBwYWdlKVxuZXhwb3J0cy5uZXh0Q29tYmluYXRpb24gPSBmdW5jdGlvbih2KSB7XG4gIHZhciB0ID0gdiB8ICh2IC0gMSk7XG4gIHJldHVybiAodCArIDEpIHwgKCgofnQgJiAtfnQpIC0gMSkgPj4+IChjb3VudFRyYWlsaW5nWmVyb3ModikgKyAxKSk7XG59XG5cbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJveEludGVyc2VjdFdyYXBwZXJcblxudmFyIHBvb2wgPSByZXF1aXJlKCd0eXBlZGFycmF5LXBvb2wnKVxudmFyIHN3ZWVwID0gcmVxdWlyZSgnLi9saWIvc3dlZXAnKVxudmFyIGJveEludGVyc2VjdEl0ZXIgPSByZXF1aXJlKCcuL2xpYi9pbnRlcnNlY3QnKVxuXG5mdW5jdGlvbiBib3hFbXB0eShkLCBib3gpIHtcbiAgZm9yKHZhciBqPTA7IGo8ZDsgKytqKSB7XG4gICAgaWYoIShib3hbal0gPD0gYm94W2orZF0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy9VbnBhY2sgYm94ZXMgaW50byBhIGZsYXQgdHlwZWQgYXJyYXksIHJlbW92ZSBlbXB0eSBib3hlc1xuZnVuY3Rpb24gY29udmVydEJveGVzKGJveGVzLCBkLCBkYXRhLCBpZHMpIHtcbiAgdmFyIHB0ciA9IDBcbiAgdmFyIGNvdW50ID0gMFxuICBmb3IodmFyIGk9MCwgbj1ib3hlcy5sZW5ndGg7IGk8bjsgKytpKSB7XG4gICAgdmFyIGIgPSBib3hlc1tpXVxuICAgIGlmKGJveEVtcHR5KGQsIGIpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBmb3IodmFyIGo9MDsgajwyKmQ7ICsraikge1xuICAgICAgZGF0YVtwdHIrK10gPSBiW2pdXG4gICAgfVxuICAgIGlkc1tjb3VudCsrXSA9IGlcbiAgfVxuICByZXR1cm4gY291bnRcbn1cblxuLy9QZXJmb3JtIHR5cGUgY29udmVyc2lvbnMsIGNoZWNrIGJvdW5kc1xuZnVuY3Rpb24gYm94SW50ZXJzZWN0KHJlZCwgYmx1ZSwgdmlzaXQsIGZ1bGwpIHtcbiAgdmFyIG4gPSByZWQubGVuZ3RoXG4gIHZhciBtID0gYmx1ZS5sZW5ndGhcblxuICAvL0lmIGVpdGhlciBhcnJheSBpcyBlbXB0eSwgdGhlbiB3ZSBjYW4gc2tpcCB0aGlzIHdob2xlIHRoaW5nXG4gIGlmKG4gPD0gMCB8fCBtIDw9IDApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vQ29tcHV0ZSBkaW1lbnNpb24sIGlmIGl0IGlzIDAgdGhlbiB3ZSBza2lwXG4gIHZhciBkID0gKHJlZFswXS5sZW5ndGgpPj4+MVxuICBpZihkIDw9IDApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciByZXR2YWxcblxuICAvL0NvbnZlcnQgcmVkIGJveGVzXG4gIHZhciByZWRMaXN0ICA9IHBvb2wubWFsbG9jRG91YmxlKDIqZCpuKVxuICB2YXIgcmVkSWRzICAgPSBwb29sLm1hbGxvY0ludDMyKG4pXG4gIG4gPSBjb252ZXJ0Qm94ZXMocmVkLCBkLCByZWRMaXN0LCByZWRJZHMpXG5cbiAgaWYobiA+IDApIHtcbiAgICBpZihkID09PSAxICYmIGZ1bGwpIHtcbiAgICAgIC8vU3BlY2lhbCBjYXNlOiAxZCBjb21wbGV0ZVxuICAgICAgc3dlZXAuaW5pdChuKVxuICAgICAgcmV0dmFsID0gc3dlZXAuc3dlZXBDb21wbGV0ZShcbiAgICAgICAgZCwgdmlzaXQsIFxuICAgICAgICAwLCBuLCByZWRMaXN0LCByZWRJZHMsXG4gICAgICAgIDAsIG4sIHJlZExpc3QsIHJlZElkcylcbiAgICB9IGVsc2Uge1xuXG4gICAgICAvL0NvbnZlcnQgYmx1ZSBib3hlc1xuICAgICAgdmFyIGJsdWVMaXN0ID0gcG9vbC5tYWxsb2NEb3VibGUoMipkKm0pXG4gICAgICB2YXIgYmx1ZUlkcyAgPSBwb29sLm1hbGxvY0ludDMyKG0pXG4gICAgICBtID0gY29udmVydEJveGVzKGJsdWUsIGQsIGJsdWVMaXN0LCBibHVlSWRzKVxuXG4gICAgICBpZihtID4gMCkge1xuICAgICAgICBzd2VlcC5pbml0KG4rbSlcblxuICAgICAgICBpZihkID09PSAxKSB7XG4gICAgICAgICAgLy9TcGVjaWFsIGNhc2U6IDFkIGJpcGFydGl0ZVxuICAgICAgICAgIHJldHZhbCA9IHN3ZWVwLnN3ZWVwQmlwYXJ0aXRlKFxuICAgICAgICAgICAgZCwgdmlzaXQsIFxuICAgICAgICAgICAgMCwgbiwgcmVkTGlzdCwgIHJlZElkcyxcbiAgICAgICAgICAgIDAsIG0sIGJsdWVMaXN0LCBibHVlSWRzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vR2VuZXJhbCBjYXNlOiAgZD4xXG4gICAgICAgICAgcmV0dmFsID0gYm94SW50ZXJzZWN0SXRlcihcbiAgICAgICAgICAgIGQsIHZpc2l0LCAgICBmdWxsLFxuICAgICAgICAgICAgbiwgcmVkTGlzdCwgIHJlZElkcyxcbiAgICAgICAgICAgIG0sIGJsdWVMaXN0LCBibHVlSWRzKVxuICAgICAgICB9XG5cbiAgICAgICAgcG9vbC5mcmVlKGJsdWVMaXN0KVxuICAgICAgICBwb29sLmZyZWUoYmx1ZUlkcylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwb29sLmZyZWUocmVkTGlzdClcbiAgICBwb29sLmZyZWUocmVkSWRzKVxuICB9XG5cbiAgcmV0dXJuIHJldHZhbFxufVxuXG4vL1VzZXItZnJpZW5kbHkgd3JhcHBlciwgaGFuZGxlIGZ1bGwgaW5wdXQgYW5kIG5vLXZpc2l0b3IgY2FzZXNcbmZ1bmN0aW9uIGJveEludGVyc2VjdFdyYXBwZXIoYXJnMCwgYXJnMSwgYXJnMikge1xuICB2YXIgcmVzdWx0XG4gIHN3aXRjaChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmVzdWx0ID0gW11cbiAgICAgIGJveEludGVyc2VjdChhcmcwLCBhcmcwLCBmdW5jdGlvbihpLGopIHtcbiAgICAgICAgcmVzdWx0LnB1c2goW2ksIGpdKVxuICAgICAgfSwgdHJ1ZSlcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICBjYXNlIDI6XG4gICAgICBpZih0eXBlb2YgYXJnMSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgdmlzaXQgPSBhcmcxXG4gICAgICAgIHJldHVybiBib3hJbnRlcnNlY3QoYXJnMCwgYXJnMCwgdmlzaXQsIHRydWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBbXVxuICAgICAgICBib3hJbnRlcnNlY3QoYXJnMCwgYXJnMSwgZnVuY3Rpb24oaSxqKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goW2ksIGpdKVxuICAgICAgICB9LCBmYWxzZSlcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfVxuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBib3hJbnRlcnNlY3QoYXJnMCwgYXJnMSwgYXJnMiwgZmFsc2UpXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignYm94LWludGVyc2VjdDogSW52YWxpZCBhcmd1bWVudHMnKVxuICB9XG59IiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBESU1FTlNJT04gICA9ICdkJ1xudmFyIEFYSVMgICAgICAgID0gJ2F4J1xudmFyIFZJU0lUICAgICAgID0gJ3Z2J1xudmFyIEZMSVAgICAgICAgID0gJ2ZwJ1xuXG52YXIgRUxFTV9TSVpFICAgPSAnZXMnXG5cbnZhciBSRURfU1RBUlQgICA9ICdycydcbnZhciBSRURfRU5EICAgICA9ICdyZSdcbnZhciBSRURfQk9YRVMgICA9ICdyYidcbnZhciBSRURfSU5ERVggICA9ICdyaSdcbnZhciBSRURfUFRSICAgICA9ICdycCdcblxudmFyIEJMVUVfU1RBUlQgID0gJ2JzJ1xudmFyIEJMVUVfRU5EICAgID0gJ2JlJ1xudmFyIEJMVUVfQk9YRVMgID0gJ2JiJ1xudmFyIEJMVUVfSU5ERVggID0gJ2JpJ1xudmFyIEJMVUVfUFRSICAgID0gJ2JwJ1xuXG52YXIgUkVUVkFMICAgICAgPSAncnYnXG5cbnZhciBJTk5FUl9MQUJFTCA9ICdRJ1xuXG52YXIgQVJHUyA9IFtcbiAgRElNRU5TSU9OLFxuICBBWElTLFxuICBWSVNJVCxcbiAgUkVEX1NUQVJULFxuICBSRURfRU5ELFxuICBSRURfQk9YRVMsXG4gIFJFRF9JTkRFWCxcbiAgQkxVRV9TVEFSVCxcbiAgQkxVRV9FTkQsXG4gIEJMVUVfQk9YRVMsXG4gIEJMVUVfSU5ERVhcbl1cblxuZnVuY3Rpb24gZ2VuZXJhdGVCcnV0ZUZvcmNlKHJlZE1ham9yLCBmbGlwLCBmdWxsKSB7XG4gIHZhciBmdW5jTmFtZSA9ICdicnV0ZUZvcmNlJyArIFxuICAgIChyZWRNYWpvciA/ICdSZWQnIDogJ0JsdWUnKSArIFxuICAgIChmbGlwID8gJ0ZsaXAnIDogJycpICtcbiAgICAoZnVsbCA/ICdGdWxsJyA6ICcnKVxuXG4gIHZhciBjb2RlID0gWydmdW5jdGlvbiAnLCBmdW5jTmFtZSwgJygnLCBBUkdTLmpvaW4oKSwgJyl7JyxcbiAgICAndmFyICcsIEVMRU1fU0laRSwgJz0yKicsIERJTUVOU0lPTiwgJzsnXVxuXG4gIHZhciByZWRMb29wID0gXG4gICAgJ2Zvcih2YXIgaT0nICsgUkVEX1NUQVJUICsgJywnICsgUkVEX1BUUiArICc9JyArIEVMRU1fU0laRSArICcqJyArIFJFRF9TVEFSVCArICc7JyArXG4gICAgICAgICdpPCcgKyBSRURfRU5EICsnOycgK1xuICAgICAgICAnKytpLCcgKyBSRURfUFRSICsgJys9JyArIEVMRU1fU0laRSArICcpeycgK1xuICAgICAgICAndmFyIHgwPScgKyBSRURfQk9YRVMgKyAnWycgKyBBWElTICsgJysnICsgUkVEX1BUUiArICddLCcgK1xuICAgICAgICAgICAgJ3gxPScgKyBSRURfQk9YRVMgKyAnWycgKyBBWElTICsgJysnICsgUkVEX1BUUiArICcrJyArIERJTUVOU0lPTiArICddLCcgK1xuICAgICAgICAgICAgJ3hpPScgKyBSRURfSU5ERVggKyAnW2ldOydcblxuICB2YXIgYmx1ZUxvb3AgPSBcbiAgICAnZm9yKHZhciBqPScgKyBCTFVFX1NUQVJUICsgJywnICsgQkxVRV9QVFIgKyAnPScgKyBFTEVNX1NJWkUgKyAnKicgKyBCTFVFX1NUQVJUICsgJzsnICtcbiAgICAgICAgJ2o8JyArIEJMVUVfRU5EICsgJzsnICtcbiAgICAgICAgJysraiwnICsgQkxVRV9QVFIgKyAnKz0nICsgRUxFTV9TSVpFICsgJyl7JyArXG4gICAgICAgICd2YXIgeTA9JyArIEJMVUVfQk9YRVMgKyAnWycgKyBBWElTICsgJysnICsgQkxVRV9QVFIgKyAnXSwnICtcbiAgICAgICAgICAgIChmdWxsID8gJ3kxPScgKyBCTFVFX0JPWEVTICsgJ1snICsgQVhJUyArICcrJyArIEJMVUVfUFRSICsgJysnICsgRElNRU5TSU9OICsgJ10sJyA6ICcnKSArXG4gICAgICAgICAgICAneWk9JyArIEJMVUVfSU5ERVggKyAnW2pdOydcblxuICBpZihyZWRNYWpvcikge1xuICAgIGNvZGUucHVzaChyZWRMb29wLCBJTk5FUl9MQUJFTCwgJzonLCBibHVlTG9vcClcbiAgfSBlbHNlIHtcbiAgICBjb2RlLnB1c2goYmx1ZUxvb3AsIElOTkVSX0xBQkVMLCAnOicsIHJlZExvb3ApXG4gIH1cblxuICBpZihmdWxsKSB7XG4gICAgY29kZS5wdXNoKCdpZih5MTx4MHx8eDE8eTApY29udGludWU7JylcbiAgfSBlbHNlIGlmKGZsaXApIHtcbiAgICBjb2RlLnB1c2goJ2lmKHkwPD14MHx8eDE8eTApY29udGludWU7JylcbiAgfSBlbHNlIHtcbiAgICBjb2RlLnB1c2goJ2lmKHkwPHgwfHx4MTx5MCljb250aW51ZTsnKVxuICB9XG5cbiAgY29kZS5wdXNoKCdmb3IodmFyIGs9JytBWElTKycrMTtrPCcrRElNRU5TSU9OKyc7KytrKXsnK1xuICAgICd2YXIgcjA9JytSRURfQk9YRVMrJ1trKycrUkVEX1BUUisnXSwnK1xuICAgICAgICAncjE9JytSRURfQk9YRVMrJ1trKycrRElNRU5TSU9OKycrJytSRURfUFRSKyddLCcrXG4gICAgICAgICdiMD0nK0JMVUVfQk9YRVMrJ1trKycrQkxVRV9QVFIrJ10sJytcbiAgICAgICAgJ2IxPScrQkxVRV9CT1hFUysnW2srJytESU1FTlNJT04rJysnK0JMVUVfUFRSKyddOycrXG4gICAgICAnaWYocjE8YjB8fGIxPHIwKWNvbnRpbnVlICcgKyBJTk5FUl9MQUJFTCArICc7fScgK1xuICAgICAgJ3ZhciAnICsgUkVUVkFMICsgJz0nICsgVklTSVQgKyAnKCcpXG5cbiAgaWYoZmxpcCkge1xuICAgIGNvZGUucHVzaCgneWkseGknKVxuICB9IGVsc2Uge1xuICAgIGNvZGUucHVzaCgneGkseWknKVxuICB9XG5cbiAgY29kZS5wdXNoKCcpO2lmKCcgKyBSRVRWQUwgKyAnIT09dm9pZCAwKXJldHVybiAnICsgUkVUVkFMICsgJzt9fX0nKVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogZnVuY05hbWUsIFxuICAgIGNvZGU6IGNvZGUuam9pbignJylcbiAgfVxufVxuXG5mdW5jdGlvbiBicnV0ZUZvcmNlUGxhbm5lcihmdWxsKSB7XG4gIHZhciBmdW5jTmFtZSA9ICdicnV0ZUZvcmNlJyArIChmdWxsID8gJ0Z1bGwnIDogJ1BhcnRpYWwnKVxuICB2YXIgcHJlZml4ID0gW11cbiAgdmFyIGZhcmdzID0gQVJHUy5zbGljZSgpXG4gIGlmKCFmdWxsKSB7XG4gICAgZmFyZ3Muc3BsaWNlKDMsIDAsIEZMSVApXG4gIH1cblxuICB2YXIgY29kZSA9IFsnZnVuY3Rpb24gJyArIGZ1bmNOYW1lICsgJygnICsgZmFyZ3Muam9pbigpICsgJyl7J11cblxuICBmdW5jdGlvbiBpbnZva2UocmVkTWFqb3IsIGZsaXApIHtcbiAgICB2YXIgcmVzID0gZ2VuZXJhdGVCcnV0ZUZvcmNlKHJlZE1ham9yLCBmbGlwLCBmdWxsKVxuICAgIHByZWZpeC5wdXNoKHJlcy5jb2RlKVxuICAgIGNvZGUucHVzaCgncmV0dXJuICcgKyByZXMubmFtZSArICcoJyArIEFSR1Muam9pbigpICsgJyk7JylcbiAgfVxuXG4gIGNvZGUucHVzaCgnaWYoJyArIFJFRF9FTkQgKyAnLScgKyBSRURfU1RBUlQgKyAnPicgK1xuICAgICAgICAgICAgICAgICAgICBCTFVFX0VORCArICctJyArIEJMVUVfU1RBUlQgKyAnKXsnKVxuXG4gIGlmKGZ1bGwpIHtcbiAgICBpbnZva2UodHJ1ZSwgZmFsc2UpXG4gICAgY29kZS5wdXNoKCd9ZWxzZXsnKVxuICAgIGludm9rZShmYWxzZSwgZmFsc2UpXG4gIH0gZWxzZSB7XG4gICAgY29kZS5wdXNoKCdpZignICsgRkxJUCArICcpeycpXG4gICAgaW52b2tlKHRydWUsIHRydWUpXG4gICAgY29kZS5wdXNoKCd9ZWxzZXsnKVxuICAgIGludm9rZSh0cnVlLCBmYWxzZSlcbiAgICBjb2RlLnB1c2goJ319ZWxzZXtpZignICsgRkxJUCArICcpeycpXG4gICAgaW52b2tlKGZhbHNlLCB0cnVlKVxuICAgIGNvZGUucHVzaCgnfWVsc2V7JylcbiAgICBpbnZva2UoZmFsc2UsIGZhbHNlKVxuICAgIGNvZGUucHVzaCgnfScpXG4gIH1cbiAgY29kZS5wdXNoKCd9fXJldHVybiAnICsgZnVuY05hbWUpXG5cbiAgdmFyIGNvZGVTdHIgPSBwcmVmaXguam9pbignJykgKyBjb2RlLmpvaW4oJycpXG4gIHZhciBwcm9jID0gbmV3IEZ1bmN0aW9uKGNvZGVTdHIpXG4gIHJldHVybiBwcm9jKClcbn1cblxuXG5leHBvcnRzLnBhcnRpYWwgPSBicnV0ZUZvcmNlUGxhbm5lcihmYWxzZSlcbmV4cG9ydHMuZnVsbCAgICA9IGJydXRlRm9yY2VQbGFubmVyKHRydWUpIiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gYm94SW50ZXJzZWN0SXRlclxuXG52YXIgcG9vbCA9IHJlcXVpcmUoJ3R5cGVkYXJyYXktcG9vbCcpXG52YXIgYml0cyA9IHJlcXVpcmUoJ2JpdC10d2lkZGxlJylcbnZhciBicnV0ZUZvcmNlID0gcmVxdWlyZSgnLi9icnV0ZScpXG52YXIgYnJ1dGVGb3JjZVBhcnRpYWwgPSBicnV0ZUZvcmNlLnBhcnRpYWxcbnZhciBicnV0ZUZvcmNlRnVsbCA9IGJydXRlRm9yY2UuZnVsbFxudmFyIHN3ZWVwID0gcmVxdWlyZSgnLi9zd2VlcCcpXG52YXIgZmluZE1lZGlhbiA9IHJlcXVpcmUoJy4vbWVkaWFuJylcbnZhciBnZW5QYXJ0aXRpb24gPSByZXF1aXJlKCcuL3BhcnRpdGlvbicpXG5cbi8vVHdpZGRsZSBwYXJhbWV0ZXJzXG52YXIgQlJVVEVfRk9SQ0VfQ1VUT0ZGICAgID0gMTI4ICAgICAgIC8vQ3V0IG9mZiBmb3IgYnJ1dGUgZm9yY2Ugc2VhcmNoXG52YXIgU0NBTl9DVVRPRkYgICAgICAgICAgID0gKDE8PDIyKSAgIC8vQ3V0IG9mZiBmb3IgdHdvIHdheSBzY2FuXG52YXIgU0NBTl9DT01QTEVURV9DVVRPRkYgID0gKDE8PDIyKSAgXG5cbi8vUGFydGl0aW9uIGZ1bmN0aW9uc1xudmFyIHBhcnRpdGlvbkludGVyaW9yQ29udGFpbnNJbnRlcnZhbCA9IGdlblBhcnRpdGlvbihcbiAgJyEobG8+PXAwKSYmIShwMT49aGkpJywgXG4gIFsncDAnLCAncDEnXSlcblxudmFyIHBhcnRpdGlvblN0YXJ0RXF1YWwgPSBnZW5QYXJ0aXRpb24oXG4gICdsbz09PXAwJyxcbiAgWydwMCddKVxuXG52YXIgcGFydGl0aW9uU3RhcnRMZXNzVGhhbiA9IGdlblBhcnRpdGlvbihcbiAgJ2xvPHAwJyxcbiAgWydwMCddKVxuXG52YXIgcGFydGl0aW9uRW5kTGVzc1RoYW5FcXVhbCA9IGdlblBhcnRpdGlvbihcbiAgJ2hpPD1wMCcsXG4gIFsncDAnXSlcblxudmFyIHBhcnRpdGlvbkNvbnRhaW5zUG9pbnQgPSBnZW5QYXJ0aXRpb24oXG4gICdsbzw9cDAmJnAwPD1oaScsXG4gIFsncDAnXSlcblxudmFyIHBhcnRpdGlvbkNvbnRhaW5zUG9pbnRQcm9wZXIgPSBnZW5QYXJ0aXRpb24oXG4gICdsbzxwMCYmcDA8PWhpJyxcbiAgWydwMCddKVxuXG4vL0ZyYW1lIHNpemUgZm9yIGl0ZXJhdGl2ZSBsb29wXG52YXIgSUZSQU1FX1NJWkUgPSA2XG52YXIgREZSQU1FX1NJWkUgPSAyXG5cbi8vRGF0YSBmb3IgYm94IHN0YXRja1xudmFyIElOSVRfQ0FQQUNJVFkgPSAxMDI0XG52YXIgQk9YX0lTVEFDSyAgPSBwb29sLm1hbGxvY0ludDMyKElOSVRfQ0FQQUNJVFkpXG52YXIgQk9YX0RTVEFDSyAgPSBwb29sLm1hbGxvY0RvdWJsZShJTklUX0NBUEFDSVRZKVxuXG4vL0luaXRpYWxpemUgaXRlcmF0aXZlIGxvb3AgcXVldWVcbmZ1bmN0aW9uIGl0ZXJJbml0KGQsIGNvdW50KSB7XG4gIHZhciBsZXZlbHMgPSAoOCAqIGJpdHMubG9nMihjb3VudCsxKSAqIChkKzEpKXwwXG4gIHZhciBtYXhJbnRzID0gYml0cy5uZXh0UG93MihJRlJBTUVfU0laRSpsZXZlbHMpXG4gIGlmKEJPWF9JU1RBQ0subGVuZ3RoIDwgbWF4SW50cykge1xuICAgIHBvb2wuZnJlZShCT1hfSVNUQUNLKVxuICAgIEJPWF9JU1RBQ0sgPSBwb29sLm1hbGxvY0ludDMyKG1heEludHMpXG4gIH1cbiAgdmFyIG1heERvdWJsZXMgPSBiaXRzLm5leHRQb3cyKERGUkFNRV9TSVpFKmxldmVscylcbiAgaWYoQk9YX0RTVEFDSyA8IG1heERvdWJsZXMpIHtcbiAgICBwb29sLmZyZWUoQk9YX0RTVEFDSylcbiAgICBCT1hfRFNUQUNLID0gcG9vbC5tYWxsb2NEb3VibGUobWF4RG91YmxlcylcbiAgfVxufVxuXG4vL0FwcGVuZCBpdGVtIHRvIHF1ZXVlXG5mdW5jdGlvbiBpdGVyUHVzaChwdHIsXG4gIGF4aXMsIFxuICByZWRTdGFydCwgcmVkRW5kLCBcbiAgYmx1ZVN0YXJ0LCBibHVlRW5kLCBcbiAgc3RhdGUsIFxuICBsbywgaGkpIHtcblxuICB2YXIgaXB0ciA9IElGUkFNRV9TSVpFICogcHRyXG4gIEJPWF9JU1RBQ0tbaXB0cl0gICA9IGF4aXNcbiAgQk9YX0lTVEFDS1tpcHRyKzFdID0gcmVkU3RhcnRcbiAgQk9YX0lTVEFDS1tpcHRyKzJdID0gcmVkRW5kXG4gIEJPWF9JU1RBQ0tbaXB0ciszXSA9IGJsdWVTdGFydFxuICBCT1hfSVNUQUNLW2lwdHIrNF0gPSBibHVlRW5kXG4gIEJPWF9JU1RBQ0tbaXB0cis1XSA9IHN0YXRlXG5cbiAgdmFyIGRwdHIgPSBERlJBTUVfU0laRSAqIHB0clxuICBCT1hfRFNUQUNLW2RwdHJdICAgPSBsb1xuICBCT1hfRFNUQUNLW2RwdHIrMV0gPSBoaVxufVxuXG4vL1NwZWNpYWwgY2FzZTogIEludGVyc2VjdCBzaW5nbGUgcG9pbnQgd2l0aCBsaXN0IG9mIGludGVydmFsc1xuZnVuY3Rpb24gb25lUG9pbnRQYXJ0aWFsKFxuICBkLCBheGlzLCB2aXNpdCwgZmxpcCxcbiAgcmVkU3RhcnQsIHJlZEVuZCwgcmVkLCByZWRJbmRleCxcbiAgYmx1ZU9mZnNldCwgYmx1ZSwgYmx1ZUlkKSB7XG5cbiAgdmFyIGVsZW1TaXplID0gMiAqIGRcbiAgdmFyIGJsdWVQdHIgID0gYmx1ZU9mZnNldCAqIGVsZW1TaXplXG4gIHZhciBibHVlWCAgICA9IGJsdWVbYmx1ZVB0ciArIGF4aXNdXG5cbnJlZF9sb29wOlxuICBmb3IodmFyIGk9cmVkU3RhcnQsIHJlZFB0cj1yZWRTdGFydCplbGVtU2l6ZTsgaTxyZWRFbmQ7ICsraSwgcmVkUHRyKz1lbGVtU2l6ZSkge1xuICAgIHZhciByMCA9IHJlZFtyZWRQdHIrYXhpc11cbiAgICB2YXIgcjEgPSByZWRbcmVkUHRyK2F4aXMrZF1cbiAgICBpZihibHVlWCA8IHIwIHx8IHIxIDwgYmx1ZVgpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmKGZsaXAgJiYgYmx1ZVggPT09IHIwKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICB2YXIgcmVkSWQgPSByZWRJbmRleFtpXVxuICAgIGZvcih2YXIgaj1heGlzKzE7IGo8ZDsgKytqKSB7XG4gICAgICB2YXIgcjAgPSByZWRbcmVkUHRyK2pdXG4gICAgICB2YXIgcjEgPSByZWRbcmVkUHRyK2orZF1cbiAgICAgIHZhciBiMCA9IGJsdWVbYmx1ZVB0citqXVxuICAgICAgdmFyIGIxID0gYmx1ZVtibHVlUHRyK2orZF1cbiAgICAgIGlmKHIxIDwgYjAgfHwgYjEgPCByMCkge1xuICAgICAgICBjb250aW51ZSByZWRfbG9vcFxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgcmV0dmFsXG4gICAgaWYoZmxpcCkge1xuICAgICAgcmV0dmFsID0gdmlzaXQoYmx1ZUlkLCByZWRJZClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dmFsID0gdmlzaXQocmVkSWQsIGJsdWVJZClcbiAgICB9XG4gICAgaWYocmV0dmFsICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiByZXR2YWxcbiAgICB9XG4gIH1cbn1cblxuLy9TcGVjaWFsIGNhc2U6ICBJbnRlcnNlY3Qgb25lIHBvaW50IHdpdGggbGlzdCBvZiBpbnRlcnZhbHNcbmZ1bmN0aW9uIG9uZVBvaW50RnVsbChcbiAgZCwgYXhpcywgdmlzaXQsXG4gIHJlZFN0YXJ0LCByZWRFbmQsIHJlZCwgcmVkSW5kZXgsXG4gIGJsdWVPZmZzZXQsIGJsdWUsIGJsdWVJZCkge1xuXG4gIHZhciBlbGVtU2l6ZSA9IDIgKiBkXG4gIHZhciBibHVlUHRyICA9IGJsdWVPZmZzZXQgKiBlbGVtU2l6ZVxuICB2YXIgYmx1ZVggICAgPSBibHVlW2JsdWVQdHIgKyBheGlzXVxuXG5yZWRfbG9vcDpcbiAgZm9yKHZhciBpPXJlZFN0YXJ0LCByZWRQdHI9cmVkU3RhcnQqZWxlbVNpemU7IGk8cmVkRW5kOyArK2ksIHJlZFB0cis9ZWxlbVNpemUpIHtcbiAgICB2YXIgcmVkSWQgPSByZWRJbmRleFtpXVxuICAgIGlmKHJlZElkID09PSBibHVlSWQpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIHZhciByMCA9IHJlZFtyZWRQdHIrYXhpc11cbiAgICB2YXIgcjEgPSByZWRbcmVkUHRyK2F4aXMrZF1cbiAgICBpZihibHVlWCA8IHIwIHx8IHIxIDwgYmx1ZVgpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGZvcih2YXIgaj1heGlzKzE7IGo8ZDsgKytqKSB7XG4gICAgICB2YXIgcjAgPSByZWRbcmVkUHRyK2pdXG4gICAgICB2YXIgcjEgPSByZWRbcmVkUHRyK2orZF1cbiAgICAgIHZhciBiMCA9IGJsdWVbYmx1ZVB0citqXVxuICAgICAgdmFyIGIxID0gYmx1ZVtibHVlUHRyK2orZF1cbiAgICAgIGlmKHIxIDwgYjAgfHwgYjEgPCByMCkge1xuICAgICAgICBjb250aW51ZSByZWRfbG9vcFxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgcmV0dmFsID0gdmlzaXQocmVkSWQsIGJsdWVJZClcbiAgICBpZihyZXR2YWwgIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHJldHZhbFxuICAgIH1cbiAgfVxufVxuXG4vL1RoZSBtYWluIGJveCBpbnRlcnNlY3Rpb24gcm91dGluZVxuZnVuY3Rpb24gYm94SW50ZXJzZWN0SXRlcihcbiAgZCwgdmlzaXQsIGluaXRGdWxsLFxuICB4U2l6ZSwgeEJveGVzLCB4SW5kZXgsXG4gIHlTaXplLCB5Qm94ZXMsIHlJbmRleCkge1xuXG4gIC8vUmVzZXJ2ZSBtZW1vcnkgZm9yIHN0YWNrXG4gIGl0ZXJJbml0KGQsIHhTaXplICsgeVNpemUpXG5cbiAgdmFyIHRvcCAgPSAwXG4gIHZhciBlbGVtU2l6ZSA9IDIgKiBkXG4gIHZhciByZXR2YWxcblxuICBpdGVyUHVzaCh0b3ArKyxcbiAgICAgIDAsXG4gICAgICAwLCB4U2l6ZSxcbiAgICAgIDAsIHlTaXplLFxuICAgICAgaW5pdEZ1bGwgPyAxNiA6IDAsIFxuICAgICAgLUluZmluaXR5LCBJbmZpbml0eSlcbiAgaWYoIWluaXRGdWxsKSB7XG4gICAgaXRlclB1c2godG9wKyssXG4gICAgICAwLFxuICAgICAgMCwgeVNpemUsXG4gICAgICAwLCB4U2l6ZSxcbiAgICAgIDEsIFxuICAgICAgLUluZmluaXR5LCBJbmZpbml0eSlcbiAgfVxuXG4gIHdoaWxlKHRvcCA+IDApIHtcbiAgICB0b3AgIC09IDFcblxuICAgIHZhciBpcHRyID0gdG9wICogSUZSQU1FX1NJWkVcbiAgICB2YXIgYXhpcyAgICAgID0gQk9YX0lTVEFDS1tpcHRyXVxuICAgIHZhciByZWRTdGFydCAgPSBCT1hfSVNUQUNLW2lwdHIrMV1cbiAgICB2YXIgcmVkRW5kICAgID0gQk9YX0lTVEFDS1tpcHRyKzJdXG4gICAgdmFyIGJsdWVTdGFydCA9IEJPWF9JU1RBQ0tbaXB0ciszXVxuICAgIHZhciBibHVlRW5kICAgPSBCT1hfSVNUQUNLW2lwdHIrNF1cbiAgICB2YXIgc3RhdGUgICAgID0gQk9YX0lTVEFDS1tpcHRyKzVdXG5cbiAgICB2YXIgZHB0ciA9IHRvcCAqIERGUkFNRV9TSVpFXG4gICAgdmFyIGxvICAgICAgICA9IEJPWF9EU1RBQ0tbZHB0cl1cbiAgICB2YXIgaGkgICAgICAgID0gQk9YX0RTVEFDS1tkcHRyKzFdXG5cbiAgICAvL1VucGFjayBzdGF0ZSBpbmZvXG4gICAgdmFyIGZsaXAgICAgICA9IChzdGF0ZSAmIDEpXG4gICAgdmFyIGZ1bGwgICAgICA9ICEhKHN0YXRlICYgMTYpXG5cbiAgICAvL1VucGFjayBpbmRpY2VzXG4gICAgdmFyIHJlZCAgICAgICA9IHhCb3hlc1xuICAgIHZhciByZWRJbmRleCAgPSB4SW5kZXhcbiAgICB2YXIgYmx1ZSAgICAgID0geUJveGVzXG4gICAgdmFyIGJsdWVJbmRleCA9IHlJbmRleFxuICAgIGlmKGZsaXApIHtcbiAgICAgIHJlZCAgICAgICAgID0geUJveGVzXG4gICAgICByZWRJbmRleCAgICA9IHlJbmRleFxuICAgICAgYmx1ZSAgICAgICAgPSB4Qm94ZXNcbiAgICAgIGJsdWVJbmRleCAgID0geEluZGV4XG4gICAgfVxuXG4gICAgaWYoc3RhdGUgJiAyKSB7XG4gICAgICByZWRFbmQgPSBwYXJ0aXRpb25TdGFydExlc3NUaGFuKFxuICAgICAgICBkLCBheGlzLFxuICAgICAgICByZWRTdGFydCwgcmVkRW5kLCByZWQsIHJlZEluZGV4LFxuICAgICAgICBoaSlcbiAgICAgIGlmKHJlZFN0YXJ0ID49IHJlZEVuZCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cbiAgICBpZihzdGF0ZSAmIDQpIHtcbiAgICAgIHJlZFN0YXJ0ID0gcGFydGl0aW9uRW5kTGVzc1RoYW5FcXVhbChcbiAgICAgICAgZCwgYXhpcyxcbiAgICAgICAgcmVkU3RhcnQsIHJlZEVuZCwgcmVkLCByZWRJbmRleCxcbiAgICAgICAgbG8pXG4gICAgICBpZihyZWRTdGFydCA+PSByZWRFbmQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdmFyIHJlZENvdW50ICA9IHJlZEVuZCAgLSByZWRTdGFydFxuICAgIHZhciBibHVlQ291bnQgPSBibHVlRW5kIC0gYmx1ZVN0YXJ0XG5cbiAgICBpZihmdWxsKSB7XG4gICAgICBpZihkICogcmVkQ291bnQgKiAocmVkQ291bnQgKyBibHVlQ291bnQpIDwgU0NBTl9DT01QTEVURV9DVVRPRkYpIHtcbiAgICAgICAgcmV0dmFsID0gc3dlZXAuc2NhbkNvbXBsZXRlKFxuICAgICAgICAgIGQsIGF4aXMsIHZpc2l0LCBcbiAgICAgICAgICByZWRTdGFydCwgcmVkRW5kLCByZWQsIHJlZEluZGV4LFxuICAgICAgICAgIGJsdWVTdGFydCwgYmx1ZUVuZCwgYmx1ZSwgYmx1ZUluZGV4KVxuICAgICAgICBpZihyZXR2YWwgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybiByZXR2YWxcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZihkICogTWF0aC5taW4ocmVkQ291bnQsIGJsdWVDb3VudCkgPCBCUlVURV9GT1JDRV9DVVRPRkYpIHtcbiAgICAgICAgLy9JZiBpbnB1dCBzbWFsbCwgdGhlbiB1c2UgYnJ1dGUgZm9yY2VcbiAgICAgICAgcmV0dmFsID0gYnJ1dGVGb3JjZVBhcnRpYWwoXG4gICAgICAgICAgICBkLCBheGlzLCB2aXNpdCwgZmxpcCxcbiAgICAgICAgICAgIHJlZFN0YXJ0LCAgcmVkRW5kLCAgcmVkLCAgcmVkSW5kZXgsXG4gICAgICAgICAgICBibHVlU3RhcnQsIGJsdWVFbmQsIGJsdWUsIGJsdWVJbmRleClcbiAgICAgICAgaWYocmV0dmFsICE9PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4gcmV0dmFsXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZihkICogcmVkQ291bnQgKiBibHVlQ291bnQgPCBTQ0FOX0NVVE9GRikge1xuICAgICAgICAvL0lmIGlucHV0IG1lZGl1bSBzaXplZCwgdGhlbiB1c2Ugc3dlZXAgYW5kIHBydW5lXG4gICAgICAgIHJldHZhbCA9IHN3ZWVwLnNjYW5CaXBhcnRpdGUoXG4gICAgICAgICAgZCwgYXhpcywgdmlzaXQsIGZsaXAsIFxuICAgICAgICAgIHJlZFN0YXJ0LCByZWRFbmQsIHJlZCwgcmVkSW5kZXgsXG4gICAgICAgICAgYmx1ZVN0YXJ0LCBibHVlRW5kLCBibHVlLCBibHVlSW5kZXgpXG4gICAgICAgIGlmKHJldHZhbCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHZhbFxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vRmlyc3QsIGZpbmQgYWxsIHJlZCBpbnRlcnZhbHMgd2hvc2UgaW50ZXJpb3IgY29udGFpbnMgKGxvLGhpKVxuICAgIHZhciByZWQwID0gcGFydGl0aW9uSW50ZXJpb3JDb250YWluc0ludGVydmFsKFxuICAgICAgZCwgYXhpcywgXG4gICAgICByZWRTdGFydCwgcmVkRW5kLCByZWQsIHJlZEluZGV4LFxuICAgICAgbG8sIGhpKVxuXG4gICAgLy9Mb3dlciBkaW1lbnNpb25hbCBjYXNlXG4gICAgaWYocmVkU3RhcnQgPCByZWQwKSB7XG5cbiAgICAgIGlmKGQgKiAocmVkMCAtIHJlZFN0YXJ0KSA8IEJSVVRFX0ZPUkNFX0NVVE9GRikge1xuICAgICAgICAvL1NwZWNpYWwgY2FzZSBmb3Igc21hbGwgaW5wdXRzOiB1c2UgYnJ1dGUgZm9yY2VcbiAgICAgICAgcmV0dmFsID0gYnJ1dGVGb3JjZUZ1bGwoXG4gICAgICAgICAgZCwgYXhpcysxLCB2aXNpdCxcbiAgICAgICAgICByZWRTdGFydCwgcmVkMCwgcmVkLCByZWRJbmRleCxcbiAgICAgICAgICBibHVlU3RhcnQsIGJsdWVFbmQsIGJsdWUsIGJsdWVJbmRleClcbiAgICAgICAgaWYocmV0dmFsICE9PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4gcmV0dmFsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihheGlzID09PSBkLTIpIHtcbiAgICAgICAgaWYoZmxpcCkge1xuICAgICAgICAgIHJldHZhbCA9IHN3ZWVwLnN3ZWVwQmlwYXJ0aXRlKFxuICAgICAgICAgICAgZCwgdmlzaXQsXG4gICAgICAgICAgICBibHVlU3RhcnQsIGJsdWVFbmQsIGJsdWUsIGJsdWVJbmRleCxcbiAgICAgICAgICAgIHJlZFN0YXJ0LCByZWQwLCByZWQsIHJlZEluZGV4KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHZhbCA9IHN3ZWVwLnN3ZWVwQmlwYXJ0aXRlKFxuICAgICAgICAgICAgZCwgdmlzaXQsXG4gICAgICAgICAgICByZWRTdGFydCwgcmVkMCwgcmVkLCByZWRJbmRleCxcbiAgICAgICAgICAgIGJsdWVTdGFydCwgYmx1ZUVuZCwgYmx1ZSwgYmx1ZUluZGV4KVxuICAgICAgICB9XG4gICAgICAgIGlmKHJldHZhbCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHZhbFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVyUHVzaCh0b3ArKyxcbiAgICAgICAgICBheGlzKzEsXG4gICAgICAgICAgcmVkU3RhcnQsIHJlZDAsXG4gICAgICAgICAgYmx1ZVN0YXJ0LCBibHVlRW5kLFxuICAgICAgICAgIGZsaXAsXG4gICAgICAgICAgLUluZmluaXR5LCBJbmZpbml0eSlcbiAgICAgICAgaXRlclB1c2godG9wKyssXG4gICAgICAgICAgYXhpcysxLFxuICAgICAgICAgIGJsdWVTdGFydCwgYmx1ZUVuZCxcbiAgICAgICAgICByZWRTdGFydCwgcmVkMCxcbiAgICAgICAgICBmbGlwXjEsXG4gICAgICAgICAgLUluZmluaXR5LCBJbmZpbml0eSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL0RpdmlkZSBhbmQgY29ucXVlciBwaGFzZVxuICAgIGlmKHJlZDAgPCByZWRFbmQpIHtcblxuICAgICAgLy9DdXQgYmx1ZSBpbnRvIDMgcGFydHM6XG4gICAgICAvL1xuICAgICAgLy8gIFBvaW50cyA8IG1pZCBwb2ludFxuICAgICAgLy8gIFBvaW50cyA9IG1pZCBwb2ludFxuICAgICAgLy8gIFBvaW50cyA+IG1pZCBwb2ludFxuICAgICAgLy9cbiAgICAgIHZhciBibHVlMCA9IGZpbmRNZWRpYW4oXG4gICAgICAgIGQsIGF4aXMsIFxuICAgICAgICBibHVlU3RhcnQsIGJsdWVFbmQsIGJsdWUsIGJsdWVJbmRleClcbiAgICAgIHZhciBtaWQgPSBibHVlW2VsZW1TaXplICogYmx1ZTAgKyBheGlzXVxuICAgICAgdmFyIGJsdWUxID0gcGFydGl0aW9uU3RhcnRFcXVhbChcbiAgICAgICAgZCwgYXhpcyxcbiAgICAgICAgYmx1ZTAsIGJsdWVFbmQsIGJsdWUsIGJsdWVJbmRleCxcbiAgICAgICAgbWlkKVxuXG4gICAgICAvL1JpZ2h0IGNhc2VcbiAgICAgIGlmKGJsdWUxIDwgYmx1ZUVuZCkge1xuICAgICAgICBpdGVyUHVzaCh0b3ArKyxcbiAgICAgICAgICBheGlzLFxuICAgICAgICAgIHJlZDAsIHJlZEVuZCxcbiAgICAgICAgICBibHVlMSwgYmx1ZUVuZCxcbiAgICAgICAgICAoZmxpcHw0KSArIChmdWxsID8gMTYgOiAwKSxcbiAgICAgICAgICBtaWQsIGhpKVxuICAgICAgfVxuXG4gICAgICAvL0xlZnQgY2FzZVxuICAgICAgaWYoYmx1ZVN0YXJ0IDwgYmx1ZTApIHtcbiAgICAgICAgaXRlclB1c2godG9wKyssXG4gICAgICAgICAgYXhpcyxcbiAgICAgICAgICByZWQwLCByZWRFbmQsXG4gICAgICAgICAgYmx1ZVN0YXJ0LCBibHVlMCxcbiAgICAgICAgICAoZmxpcHwyKSArIChmdWxsID8gMTYgOiAwKSxcbiAgICAgICAgICBsbywgbWlkKVxuICAgICAgfVxuXG4gICAgICAvL0NlbnRlciBjYXNlICh0aGUgaGFyZCBwYXJ0KVxuICAgICAgaWYoYmx1ZTAgKyAxID09PSBibHVlMSkge1xuICAgICAgICAvL09wdGltaXphdGlvbjogUmFuZ2Ugd2l0aCBleGFjdGx5IDEgcG9pbnQsIHVzZSBhIGJydXRlIGZvcmNlIHNjYW5cbiAgICAgICAgaWYoZnVsbCkge1xuICAgICAgICAgIHJldHZhbCA9IG9uZVBvaW50RnVsbChcbiAgICAgICAgICAgIGQsIGF4aXMsIHZpc2l0LFxuICAgICAgICAgICAgcmVkMCwgcmVkRW5kLCByZWQsIHJlZEluZGV4LFxuICAgICAgICAgICAgYmx1ZTAsIGJsdWUsIGJsdWVJbmRleFtibHVlMF0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dmFsID0gb25lUG9pbnRQYXJ0aWFsKFxuICAgICAgICAgICAgZCwgYXhpcywgdmlzaXQsIGZsaXAsXG4gICAgICAgICAgICByZWQwLCByZWRFbmQsIHJlZCwgcmVkSW5kZXgsXG4gICAgICAgICAgICBibHVlMCwgYmx1ZSwgYmx1ZUluZGV4W2JsdWUwXSlcbiAgICAgICAgfVxuICAgICAgICBpZihyZXR2YWwgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybiByZXR2YWxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmKGJsdWUwIDwgYmx1ZTEpIHtcbiAgICAgICAgdmFyIHJlZDFcbiAgICAgICAgaWYoZnVsbCkge1xuICAgICAgICAgIC8vSWYgZnVsbCBpbnRlcnNlY3Rpb24sIG5lZWQgdG8gaGFuZGxlIHNwZWNpYWwgY2FzZVxuICAgICAgICAgIHJlZDEgPSBwYXJ0aXRpb25Db250YWluc1BvaW50KFxuICAgICAgICAgICAgZCwgYXhpcyxcbiAgICAgICAgICAgIHJlZDAsIHJlZEVuZCwgcmVkLCByZWRJbmRleCxcbiAgICAgICAgICAgIG1pZClcbiAgICAgICAgICBpZihyZWQwIDwgcmVkMSkge1xuICAgICAgICAgICAgdmFyIHJlZFggPSBwYXJ0aXRpb25TdGFydEVxdWFsKFxuICAgICAgICAgICAgICBkLCBheGlzLFxuICAgICAgICAgICAgICByZWQwLCByZWQxLCByZWQsIHJlZEluZGV4LFxuICAgICAgICAgICAgICBtaWQpXG4gICAgICAgICAgICBpZihheGlzID09PSBkLTIpIHtcbiAgICAgICAgICAgICAgLy9EZWdlbmVyYXRlIHN3ZWVwIGludGVyc2VjdGlvbjpcbiAgICAgICAgICAgICAgLy8gIFtyZWQwLCByZWRYXSB3aXRoIFtibHVlMCwgYmx1ZTFdXG4gICAgICAgICAgICAgIGlmKHJlZDAgPCByZWRYKSB7XG4gICAgICAgICAgICAgICAgcmV0dmFsID0gc3dlZXAuc3dlZXBDb21wbGV0ZShcbiAgICAgICAgICAgICAgICAgIGQsIHZpc2l0LFxuICAgICAgICAgICAgICAgICAgcmVkMCwgcmVkWCwgcmVkLCByZWRJbmRleCxcbiAgICAgICAgICAgICAgICAgIGJsdWUwLCBibHVlMSwgYmx1ZSwgYmx1ZUluZGV4KVxuICAgICAgICAgICAgICAgIGlmKHJldHZhbCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy9Ob3JtYWwgc3dlZXAgaW50ZXJzZWN0aW9uOlxuICAgICAgICAgICAgICAvLyAgW3JlZFgsIHJlZDFdIHdpdGggW2JsdWUwLCBibHVlMV1cbiAgICAgICAgICAgICAgaWYocmVkWCA8IHJlZDEpIHtcbiAgICAgICAgICAgICAgICByZXR2YWwgPSBzd2VlcC5zd2VlcEJpcGFydGl0ZShcbiAgICAgICAgICAgICAgICAgIGQsIHZpc2l0LFxuICAgICAgICAgICAgICAgICAgcmVkWCwgcmVkMSwgcmVkLCByZWRJbmRleCxcbiAgICAgICAgICAgICAgICAgIGJsdWUwLCBibHVlMSwgYmx1ZSwgYmx1ZUluZGV4KVxuICAgICAgICAgICAgICAgIGlmKHJldHZhbCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZihyZWQwIDwgcmVkWCkge1xuICAgICAgICAgICAgICAgIGl0ZXJQdXNoKHRvcCsrLFxuICAgICAgICAgICAgICAgICAgYXhpcysxLFxuICAgICAgICAgICAgICAgICAgcmVkMCwgcmVkWCxcbiAgICAgICAgICAgICAgICAgIGJsdWUwLCBibHVlMSxcbiAgICAgICAgICAgICAgICAgIDE2LFxuICAgICAgICAgICAgICAgICAgLUluZmluaXR5LCBJbmZpbml0eSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZihyZWRYIDwgcmVkMSkge1xuICAgICAgICAgICAgICAgIGl0ZXJQdXNoKHRvcCsrLFxuICAgICAgICAgICAgICAgICAgYXhpcysxLFxuICAgICAgICAgICAgICAgICAgcmVkWCwgcmVkMSxcbiAgICAgICAgICAgICAgICAgIGJsdWUwLCBibHVlMSxcbiAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAtSW5maW5pdHksIEluZmluaXR5KVxuICAgICAgICAgICAgICAgIGl0ZXJQdXNoKHRvcCsrLFxuICAgICAgICAgICAgICAgICAgYXhpcysxLFxuICAgICAgICAgICAgICAgICAgYmx1ZTAsIGJsdWUxLFxuICAgICAgICAgICAgICAgICAgcmVkWCwgcmVkMSxcbiAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAtSW5maW5pdHksIEluZmluaXR5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmKGZsaXApIHtcbiAgICAgICAgICAgIHJlZDEgPSBwYXJ0aXRpb25Db250YWluc1BvaW50UHJvcGVyKFxuICAgICAgICAgICAgICBkLCBheGlzLFxuICAgICAgICAgICAgICByZWQwLCByZWRFbmQsIHJlZCwgcmVkSW5kZXgsXG4gICAgICAgICAgICAgIG1pZClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVkMSA9IHBhcnRpdGlvbkNvbnRhaW5zUG9pbnQoXG4gICAgICAgICAgICAgIGQsIGF4aXMsXG4gICAgICAgICAgICAgIHJlZDAsIHJlZEVuZCwgcmVkLCByZWRJbmRleCxcbiAgICAgICAgICAgICAgbWlkKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihyZWQwIDwgcmVkMSkge1xuICAgICAgICAgICAgaWYoYXhpcyA9PT0gZC0yKSB7XG4gICAgICAgICAgICAgIGlmKGZsaXApIHtcbiAgICAgICAgICAgICAgICByZXR2YWwgPSBzd2VlcC5zd2VlcEJpcGFydGl0ZShcbiAgICAgICAgICAgICAgICAgIGQsIHZpc2l0LFxuICAgICAgICAgICAgICAgICAgYmx1ZTAsIGJsdWUxLCBibHVlLCBibHVlSW5kZXgsXG4gICAgICAgICAgICAgICAgICByZWQwLCByZWQxLCByZWQsIHJlZEluZGV4KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHZhbCA9IHN3ZWVwLnN3ZWVwQmlwYXJ0aXRlKFxuICAgICAgICAgICAgICAgICAgZCwgdmlzaXQsXG4gICAgICAgICAgICAgICAgICByZWQwLCByZWQxLCByZWQsIHJlZEluZGV4LFxuICAgICAgICAgICAgICAgICAgYmx1ZTAsIGJsdWUxLCBibHVlLCBibHVlSW5kZXgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGl0ZXJQdXNoKHRvcCsrLFxuICAgICAgICAgICAgICAgIGF4aXMrMSxcbiAgICAgICAgICAgICAgICByZWQwLCByZWQxLFxuICAgICAgICAgICAgICAgIGJsdWUwLCBibHVlMSxcbiAgICAgICAgICAgICAgICBmbGlwLFxuICAgICAgICAgICAgICAgIC1JbmZpbml0eSwgSW5maW5pdHkpXG4gICAgICAgICAgICAgIGl0ZXJQdXNoKHRvcCsrLFxuICAgICAgICAgICAgICAgIGF4aXMrMSxcbiAgICAgICAgICAgICAgICBibHVlMCwgYmx1ZTEsXG4gICAgICAgICAgICAgICAgcmVkMCwgcmVkMSxcbiAgICAgICAgICAgICAgICBmbGlwXjEsXG4gICAgICAgICAgICAgICAgLUluZmluaXR5LCBJbmZpbml0eSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kTWVkaWFuXG5cbnZhciBnZW5QYXJ0aXRpb24gPSByZXF1aXJlKCcuL3BhcnRpdGlvbicpXG5cbnZhciBwYXJ0aXRpb25TdGFydExlc3NUaGFuID0gZ2VuUGFydGl0aW9uKCdsbzxwMCcsIFsncDAnXSlcblxudmFyIFBBUlRJVElPTl9USFJFU0hPTEQgPSA4ICAgLy9DdXQgb2ZmIGZvciB1c2luZyBpbnNlcnRpb24gc29ydCBpbiBmaW5kTWVkaWFuXG5cbi8vQmFzZSBjYXNlIGZvciBtZWRpYW4gZmluZGluZzogIFVzZSBpbnNlcnRpb24gc29ydFxuZnVuY3Rpb24gaW5zZXJ0aW9uU29ydChkLCBheGlzLCBzdGFydCwgZW5kLCBib3hlcywgaWRzKSB7XG4gIHZhciBlbGVtU2l6ZSA9IDIgKiBkXG4gIHZhciBib3hQdHIgPSBlbGVtU2l6ZSAqIChzdGFydCsxKSArIGF4aXNcbiAgZm9yKHZhciBpPXN0YXJ0KzE7IGk8ZW5kOyArK2ksIGJveFB0cis9ZWxlbVNpemUpIHtcbiAgICB2YXIgeCA9IGJveGVzW2JveFB0cl1cbiAgICBmb3IodmFyIGo9aSwgcHRyPWVsZW1TaXplKihpLTEpOyBcbiAgICAgICAgaj5zdGFydCAmJiBib3hlc1twdHIrYXhpc10gPiB4OyBcbiAgICAgICAgLS1qLCBwdHItPWVsZW1TaXplKSB7XG4gICAgICAvL1N3YXBcbiAgICAgIHZhciBhUHRyID0gcHRyXG4gICAgICB2YXIgYlB0ciA9IHB0citlbGVtU2l6ZVxuICAgICAgZm9yKHZhciBrPTA7IGs8ZWxlbVNpemU7ICsraywgKythUHRyLCArK2JQdHIpIHtcbiAgICAgICAgdmFyIHkgPSBib3hlc1thUHRyXVxuICAgICAgICBib3hlc1thUHRyXSA9IGJveGVzW2JQdHJdXG4gICAgICAgIGJveGVzW2JQdHJdID0geVxuICAgICAgfVxuICAgICAgdmFyIHRtcCA9IGlkc1tqXVxuICAgICAgaWRzW2pdID0gaWRzW2otMV1cbiAgICAgIGlkc1tqLTFdID0gdG1wXG4gICAgfVxuICB9XG59XG5cbi8vRmluZCBtZWRpYW4gdXNpbmcgcXVpY2sgc2VsZWN0IGFsZ29yaXRobVxuLy8gIHRha2VzIE8obikgdGltZSB3aXRoIGhpZ2ggcHJvYmFiaWxpdHlcbmZ1bmN0aW9uIGZpbmRNZWRpYW4oZCwgYXhpcywgc3RhcnQsIGVuZCwgYm94ZXMsIGlkcykge1xuICBpZihlbmQgPD0gc3RhcnQrMSkge1xuICAgIHJldHVybiBzdGFydFxuICB9XG5cbiAgdmFyIGxvICAgICAgID0gc3RhcnRcbiAgdmFyIGhpICAgICAgID0gZW5kXG4gIHZhciBtaWQgICAgICA9ICgoZW5kICsgc3RhcnQpID4+PiAxKVxuICB2YXIgZWxlbVNpemUgPSAyKmRcbiAgdmFyIHBpdm90ICAgID0gbWlkXG4gIHZhciB2YWx1ZSAgICA9IGJveGVzW2VsZW1TaXplKm1pZCtheGlzXVxuICBcbiAgd2hpbGUobG8gPCBoaSkge1xuICAgIGlmKGhpIC0gbG8gPCBQQVJUSVRJT05fVEhSRVNIT0xEKSB7XG4gICAgICBpbnNlcnRpb25Tb3J0KGQsIGF4aXMsIGxvLCBoaSwgYm94ZXMsIGlkcylcbiAgICAgIHZhbHVlID0gYm94ZXNbZWxlbVNpemUqbWlkK2F4aXNdXG4gICAgICBicmVha1xuICAgIH1cbiAgICBcbiAgICAvL1NlbGVjdCBwaXZvdCB1c2luZyBtZWRpYW4tb2YtM1xuICAgIHZhciBjb3VudCAgPSBoaSAtIGxvXG4gICAgdmFyIHBpdm90MCA9IChNYXRoLnJhbmRvbSgpKmNvdW50K2xvKXwwXG4gICAgdmFyIHZhbHVlMCA9IGJveGVzW2VsZW1TaXplKnBpdm90MCArIGF4aXNdXG4gICAgdmFyIHBpdm90MSA9IChNYXRoLnJhbmRvbSgpKmNvdW50K2xvKXwwXG4gICAgdmFyIHZhbHVlMSA9IGJveGVzW2VsZW1TaXplKnBpdm90MSArIGF4aXNdXG4gICAgdmFyIHBpdm90MiA9IChNYXRoLnJhbmRvbSgpKmNvdW50K2xvKXwwXG4gICAgdmFyIHZhbHVlMiA9IGJveGVzW2VsZW1TaXplKnBpdm90MiArIGF4aXNdXG4gICAgaWYodmFsdWUwIDw9IHZhbHVlMSkge1xuICAgICAgaWYodmFsdWUyID49IHZhbHVlMSkge1xuICAgICAgICBwaXZvdCA9IHBpdm90MVxuICAgICAgICB2YWx1ZSA9IHZhbHVlMVxuICAgICAgfSBlbHNlIGlmKHZhbHVlMCA+PSB2YWx1ZTIpIHtcbiAgICAgICAgcGl2b3QgPSBwaXZvdDBcbiAgICAgICAgdmFsdWUgPSB2YWx1ZTBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBpdm90ID0gcGl2b3QyXG4gICAgICAgIHZhbHVlID0gdmFsdWUyXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHZhbHVlMSA+PSB2YWx1ZTIpIHtcbiAgICAgICAgcGl2b3QgPSBwaXZvdDFcbiAgICAgICAgdmFsdWUgPSB2YWx1ZTFcbiAgICAgIH0gZWxzZSBpZih2YWx1ZTIgPj0gdmFsdWUwKSB7XG4gICAgICAgIHBpdm90ID0gcGl2b3QwXG4gICAgICAgIHZhbHVlID0gdmFsdWUwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwaXZvdCA9IHBpdm90MlxuICAgICAgICB2YWx1ZSA9IHZhbHVlMlxuICAgICAgfVxuICAgIH1cblxuICAgIC8vU3dhcCBwaXZvdCB0byBlbmQgb2YgYXJyYXlcbiAgICB2YXIgYVB0ciA9IGVsZW1TaXplICogKGhpLTEpXG4gICAgdmFyIGJQdHIgPSBlbGVtU2l6ZSAqIHBpdm90XG4gICAgZm9yKHZhciBpPTA7IGk8ZWxlbVNpemU7ICsraSwgKythUHRyLCArK2JQdHIpIHtcbiAgICAgIHZhciB4ID0gYm94ZXNbYVB0cl1cbiAgICAgIGJveGVzW2FQdHJdID0gYm94ZXNbYlB0cl1cbiAgICAgIGJveGVzW2JQdHJdID0geFxuICAgIH1cbiAgICB2YXIgeSA9IGlkc1toaS0xXVxuICAgIGlkc1toaS0xXSA9IGlkc1twaXZvdF1cbiAgICBpZHNbcGl2b3RdID0geVxuXG4gICAgLy9QYXJ0aXRpb24gdXNpbmcgcGl2b3RcbiAgICBwaXZvdCA9IHBhcnRpdGlvblN0YXJ0TGVzc1RoYW4oXG4gICAgICBkLCBheGlzLCBcbiAgICAgIGxvLCBoaS0xLCBib3hlcywgaWRzLFxuICAgICAgdmFsdWUpXG5cbiAgICAvL1N3YXAgcGl2b3QgYmFja1xuICAgIHZhciBhUHRyID0gZWxlbVNpemUgKiAoaGktMSlcbiAgICB2YXIgYlB0ciA9IGVsZW1TaXplICogcGl2b3RcbiAgICBmb3IodmFyIGk9MDsgaTxlbGVtU2l6ZTsgKytpLCArK2FQdHIsICsrYlB0cikge1xuICAgICAgdmFyIHggPSBib3hlc1thUHRyXVxuICAgICAgYm94ZXNbYVB0cl0gPSBib3hlc1tiUHRyXVxuICAgICAgYm94ZXNbYlB0cl0gPSB4XG4gICAgfVxuICAgIHZhciB5ID0gaWRzW2hpLTFdXG4gICAgaWRzW2hpLTFdID0gaWRzW3Bpdm90XVxuICAgIGlkc1twaXZvdF0gPSB5XG5cbiAgICAvL1N3YXAgcGl2b3QgdG8gbGFzdCBwaXZvdFxuICAgIGlmKG1pZCA8IHBpdm90KSB7XG4gICAgICBoaSA9IHBpdm90LTFcbiAgICAgIHdoaWxlKGxvIDwgaGkgJiYgXG4gICAgICAgIGJveGVzW2VsZW1TaXplKihoaS0xKStheGlzXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgaGkgLT0gMVxuICAgICAgfVxuICAgICAgaGkgKz0gMVxuICAgIH0gZWxzZSBpZihwaXZvdCA8IG1pZCkge1xuICAgICAgbG8gPSBwaXZvdCArIDFcbiAgICAgIHdoaWxlKGxvIDwgaGkgJiZcbiAgICAgICAgYm94ZXNbZWxlbVNpemUqbG8rYXhpc10gPT09IHZhbHVlKSB7XG4gICAgICAgIGxvICs9IDFcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvL01ha2Ugc3VyZSBwaXZvdCBpcyBhdCBzdGFydFxuICByZXR1cm4gcGFydGl0aW9uU3RhcnRMZXNzVGhhbihcbiAgICBkLCBheGlzLCBcbiAgICBzdGFydCwgbWlkLCBib3hlcywgaWRzLFxuICAgIGJveGVzW2VsZW1TaXplKm1pZCtheGlzXSlcbn0iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBnZW5QYXJ0aXRpb25cblxudmFyIGNvZGUgPSAnZm9yKHZhciBqPTIqYSxrPWoqYyxsPWssbT1jLG49YixvPWErYixwPWM7ZD5wOysrcCxrKz1qKXt2YXIgXztpZigkKWlmKG09PT1wKW0rPTEsbCs9ajtlbHNle2Zvcih2YXIgcz0wO2o+czsrK3Mpe3ZhciB0PWVbaytzXTtlW2src109ZVtsXSxlW2wrK109dH12YXIgdT1mW3BdO2ZbcF09ZlttXSxmW20rK109dX19cmV0dXJuIG0nXG5cbmZ1bmN0aW9uIGdlblBhcnRpdGlvbihwcmVkaWNhdGUsIGFyZ3MpIHtcbiAgdmFyIGZhcmdzID0nYWJjZGVmJy5zcGxpdCgnJykuY29uY2F0KGFyZ3MpXG4gIHZhciByZWFkcyA9IFtdXG4gIGlmKHByZWRpY2F0ZS5pbmRleE9mKCdsbycpID49IDApIHtcbiAgICByZWFkcy5wdXNoKCdsbz1lW2srbl0nKVxuICB9XG4gIGlmKHByZWRpY2F0ZS5pbmRleE9mKCdoaScpID49IDApIHtcbiAgICByZWFkcy5wdXNoKCdoaT1lW2srb10nKVxuICB9XG4gIGZhcmdzLnB1c2goXG4gICAgY29kZS5yZXBsYWNlKCdfJywgcmVhZHMuam9pbigpKVxuICAgICAgICAucmVwbGFjZSgnJCcsIHByZWRpY2F0ZSkpXG4gIHJldHVybiBGdW5jdGlvbi5hcHBseSh2b2lkIDAsIGZhcmdzKVxufSIsIid1c2Ugc3RyaWN0JztcblxuLy9UaGlzIGNvZGUgaXMgZXh0cmFjdGVkIGZyb20gbmRhcnJheS1zb3J0XG4vL0l0IGlzIGlubGluZWQgaGVyZSBhcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kXG5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHBlcjtcblxudmFyIElOU0VSVF9TT1JUX0NVVE9GRiA9IDMyXG5cbmZ1bmN0aW9uIHdyYXBwZXIoZGF0YSwgbjApIHtcbiAgaWYgKG4wIDw9IDQqSU5TRVJUX1NPUlRfQ1VUT0ZGKSB7XG4gICAgaW5zZXJ0aW9uU29ydCgwLCBuMCAtIDEsIGRhdGEpO1xuICB9IGVsc2Uge1xuICAgIHF1aWNrU29ydCgwLCBuMCAtIDEsIGRhdGEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydGlvblNvcnQobGVmdCwgcmlnaHQsIGRhdGEpIHtcbiAgdmFyIHB0ciA9IDIqKGxlZnQrMSlcbiAgZm9yKHZhciBpPWxlZnQrMTsgaTw9cmlnaHQ7ICsraSkge1xuICAgIHZhciBhID0gZGF0YVtwdHIrK11cbiAgICB2YXIgYiA9IGRhdGFbcHRyKytdXG4gICAgdmFyIGogPSBpXG4gICAgdmFyIGpwdHIgPSBwdHItMlxuICAgIHdoaWxlKGotLSA+IGxlZnQpIHtcbiAgICAgIHZhciB4ID0gZGF0YVtqcHRyLTJdXG4gICAgICB2YXIgeSA9IGRhdGFbanB0ci0xXVxuICAgICAgaWYoeCA8IGEpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZih4ID09PSBhICYmIHkgPCBiKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBkYXRhW2pwdHJdICAgPSB4XG4gICAgICBkYXRhW2pwdHIrMV0gPSB5XG4gICAgICBqcHRyIC09IDJcbiAgICB9XG4gICAgZGF0YVtqcHRyXSAgID0gYVxuICAgIGRhdGFbanB0cisxXSA9IGJcbiAgfVxufVxuXG5mdW5jdGlvbiBzd2FwKGksIGosIGRhdGEpIHtcbiAgaSAqPSAyXG4gIGogKj0gMlxuICB2YXIgeCA9IGRhdGFbaV1cbiAgdmFyIHkgPSBkYXRhW2krMV1cbiAgZGF0YVtpXSA9IGRhdGFbal1cbiAgZGF0YVtpKzFdID0gZGF0YVtqKzFdXG4gIGRhdGFbal0gPSB4XG4gIGRhdGFbaisxXSA9IHlcbn1cblxuZnVuY3Rpb24gbW92ZShpLCBqLCBkYXRhKSB7XG4gIGkgKj0gMlxuICBqICo9IDJcbiAgZGF0YVtpXSA9IGRhdGFbal1cbiAgZGF0YVtpKzFdID0gZGF0YVtqKzFdXG59XG5cbmZ1bmN0aW9uIHJvdGF0ZShpLCBqLCBrLCBkYXRhKSB7XG4gIGkgKj0gMlxuICBqICo9IDJcbiAgayAqPSAyXG4gIHZhciB4ID0gZGF0YVtpXVxuICB2YXIgeSA9IGRhdGFbaSsxXVxuICBkYXRhW2ldID0gZGF0YVtqXVxuICBkYXRhW2krMV0gPSBkYXRhW2orMV1cbiAgZGF0YVtqXSA9IGRhdGFba11cbiAgZGF0YVtqKzFdID0gZGF0YVtrKzFdXG4gIGRhdGFba10gPSB4XG4gIGRhdGFbaysxXSA9IHlcbn1cblxuZnVuY3Rpb24gc2h1ZmZsZVBpdm90KGksIGosIHB4LCBweSwgZGF0YSkge1xuICBpICo9IDJcbiAgaiAqPSAyXG4gIGRhdGFbaV0gPSBkYXRhW2pdXG4gIGRhdGFbal0gPSBweFxuICBkYXRhW2krMV0gPSBkYXRhW2orMV1cbiAgZGF0YVtqKzFdID0gcHlcbn1cblxuZnVuY3Rpb24gY29tcGFyZShpLCBqLCBkYXRhKSB7XG4gIGkgKj0gMlxuICBqICo9IDJcbiAgdmFyIHggPSBkYXRhW2ldLFxuICAgICAgeSA9IGRhdGFbal1cbiAgaWYoeCA8IHkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmKHggPT09IHkpIHtcbiAgICByZXR1cm4gZGF0YVtpKzFdID4gZGF0YVtqKzFdXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gY29tcGFyZVBpdm90KGksIHksIGIsIGRhdGEpIHtcbiAgaSAqPSAyXG4gIHZhciB4ID0gZGF0YVtpXVxuICBpZih4IDwgeSkge1xuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZih4ID09PSB5KSB7XG4gICAgcmV0dXJuIGRhdGFbaSsxXSA8IGJcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gcXVpY2tTb3J0KGxlZnQsIHJpZ2h0LCBkYXRhKSB7XG4gIHZhciBzaXh0aCA9IChyaWdodCAtIGxlZnQgKyAxKSAvIDYgfCAwLCBcbiAgICAgIGluZGV4MSA9IGxlZnQgKyBzaXh0aCwgXG4gICAgICBpbmRleDUgPSByaWdodCAtIHNpeHRoLCBcbiAgICAgIGluZGV4MyA9IGxlZnQgKyByaWdodCA+PiAxLCBcbiAgICAgIGluZGV4MiA9IGluZGV4MyAtIHNpeHRoLCBcbiAgICAgIGluZGV4NCA9IGluZGV4MyArIHNpeHRoLCBcbiAgICAgIGVsMSA9IGluZGV4MSwgXG4gICAgICBlbDIgPSBpbmRleDIsIFxuICAgICAgZWwzID0gaW5kZXgzLCBcbiAgICAgIGVsNCA9IGluZGV4NCwgXG4gICAgICBlbDUgPSBpbmRleDUsIFxuICAgICAgbGVzcyA9IGxlZnQgKyAxLCBcbiAgICAgIGdyZWF0ID0gcmlnaHQgLSAxLCBcbiAgICAgIHRtcCA9IDBcbiAgaWYoY29tcGFyZShlbDEsIGVsMiwgZGF0YSkpIHtcbiAgICB0bXAgPSBlbDFcbiAgICBlbDEgPSBlbDJcbiAgICBlbDIgPSB0bXBcbiAgfVxuICBpZihjb21wYXJlKGVsNCwgZWw1LCBkYXRhKSkge1xuICAgIHRtcCA9IGVsNFxuICAgIGVsNCA9IGVsNVxuICAgIGVsNSA9IHRtcFxuICB9XG4gIGlmKGNvbXBhcmUoZWwxLCBlbDMsIGRhdGEpKSB7XG4gICAgdG1wID0gZWwxXG4gICAgZWwxID0gZWwzXG4gICAgZWwzID0gdG1wXG4gIH1cbiAgaWYoY29tcGFyZShlbDIsIGVsMywgZGF0YSkpIHtcbiAgICB0bXAgPSBlbDJcbiAgICBlbDIgPSBlbDNcbiAgICBlbDMgPSB0bXBcbiAgfVxuICBpZihjb21wYXJlKGVsMSwgZWw0LCBkYXRhKSkge1xuICAgIHRtcCA9IGVsMVxuICAgIGVsMSA9IGVsNFxuICAgIGVsNCA9IHRtcFxuICB9XG4gIGlmKGNvbXBhcmUoZWwzLCBlbDQsIGRhdGEpKSB7XG4gICAgdG1wID0gZWwzXG4gICAgZWwzID0gZWw0XG4gICAgZWw0ID0gdG1wXG4gIH1cbiAgaWYoY29tcGFyZShlbDIsIGVsNSwgZGF0YSkpIHtcbiAgICB0bXAgPSBlbDJcbiAgICBlbDIgPSBlbDVcbiAgICBlbDUgPSB0bXBcbiAgfVxuICBpZihjb21wYXJlKGVsMiwgZWwzLCBkYXRhKSkge1xuICAgIHRtcCA9IGVsMlxuICAgIGVsMiA9IGVsM1xuICAgIGVsMyA9IHRtcFxuICB9XG4gIGlmKGNvbXBhcmUoZWw0LCBlbDUsIGRhdGEpKSB7XG4gICAgdG1wID0gZWw0XG4gICAgZWw0ID0gZWw1XG4gICAgZWw1ID0gdG1wXG4gIH1cblxuICB2YXIgcGl2b3QxWCA9IGRhdGFbMiplbDJdXG4gIHZhciBwaXZvdDFZID0gZGF0YVsyKmVsMisxXVxuICB2YXIgcGl2b3QyWCA9IGRhdGFbMiplbDRdXG4gIHZhciBwaXZvdDJZID0gZGF0YVsyKmVsNCsxXVxuXG4gIHZhciBwdHIwID0gMiAqIGVsMTtcbiAgdmFyIHB0cjIgPSAyICogZWwzO1xuICB2YXIgcHRyNCA9IDIgKiBlbDU7XG4gIHZhciBwdHI1ID0gMiAqIGluZGV4MTtcbiAgdmFyIHB0cjYgPSAyICogaW5kZXgzO1xuICB2YXIgcHRyNyA9IDIgKiBpbmRleDU7XG4gIGZvciAodmFyIGkxID0gMDsgaTEgPCAyOyArK2kxKSB7XG4gICAgdmFyIHggPSBkYXRhW3B0cjAraTFdO1xuICAgIHZhciB5ID0gZGF0YVtwdHIyK2kxXTtcbiAgICB2YXIgeiA9IGRhdGFbcHRyNCtpMV07XG4gICAgZGF0YVtwdHI1K2kxXSA9IHg7XG4gICAgZGF0YVtwdHI2K2kxXSA9IHk7XG4gICAgZGF0YVtwdHI3K2kxXSA9IHo7XG4gIH1cblxuICBtb3ZlKGluZGV4MiwgbGVmdCwgZGF0YSlcbiAgbW92ZShpbmRleDQsIHJpZ2h0LCBkYXRhKVxuICBmb3IgKHZhciBrID0gbGVzczsgayA8PSBncmVhdDsgKytrKSB7XG4gICAgaWYgKGNvbXBhcmVQaXZvdChrLCBwaXZvdDFYLCBwaXZvdDFZLCBkYXRhKSkge1xuICAgICAgaWYgKGsgIT09IGxlc3MpIHtcbiAgICAgICAgc3dhcChrLCBsZXNzLCBkYXRhKVxuICAgICAgfVxuICAgICAgKytsZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNvbXBhcmVQaXZvdChrLCBwaXZvdDJYLCBwaXZvdDJZLCBkYXRhKSkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGlmICghY29tcGFyZVBpdm90KGdyZWF0LCBwaXZvdDJYLCBwaXZvdDJZLCBkYXRhKSkge1xuICAgICAgICAgICAgaWYgKC0tZ3JlYXQgPCBrKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb21wYXJlUGl2b3QoZ3JlYXQsIHBpdm90MVgsIHBpdm90MVksIGRhdGEpKSB7XG4gICAgICAgICAgICAgIHJvdGF0ZShrLCBsZXNzLCBncmVhdCwgZGF0YSlcbiAgICAgICAgICAgICAgKytsZXNzO1xuICAgICAgICAgICAgICAtLWdyZWF0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3dhcChrLCBncmVhdCwgZGF0YSlcbiAgICAgICAgICAgICAgLS1ncmVhdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBzaHVmZmxlUGl2b3QobGVmdCwgbGVzcy0xLCBwaXZvdDFYLCBwaXZvdDFZLCBkYXRhKVxuICBzaHVmZmxlUGl2b3QocmlnaHQsIGdyZWF0KzEsIHBpdm90MlgsIHBpdm90MlksIGRhdGEpXG4gIGlmIChsZXNzIC0gMiAtIGxlZnQgPD0gSU5TRVJUX1NPUlRfQ1VUT0ZGKSB7XG4gICAgaW5zZXJ0aW9uU29ydChsZWZ0LCBsZXNzIC0gMiwgZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgcXVpY2tTb3J0KGxlZnQsIGxlc3MgLSAyLCBkYXRhKTtcbiAgfVxuICBpZiAocmlnaHQgLSAoZ3JlYXQgKyAyKSA8PSBJTlNFUlRfU09SVF9DVVRPRkYpIHtcbiAgICBpbnNlcnRpb25Tb3J0KGdyZWF0ICsgMiwgcmlnaHQsIGRhdGEpO1xuICB9IGVsc2Uge1xuICAgIHF1aWNrU29ydChncmVhdCArIDIsIHJpZ2h0LCBkYXRhKTtcbiAgfVxuICBpZiAoZ3JlYXQgLSBsZXNzIDw9IElOU0VSVF9TT1JUX0NVVE9GRikge1xuICAgIGluc2VydGlvblNvcnQobGVzcywgZ3JlYXQsIGRhdGEpO1xuICB9IGVsc2Uge1xuICAgIHF1aWNrU29ydChsZXNzLCBncmVhdCwgZGF0YSk7XG4gIH1cbn0iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGluaXQ6ICAgICAgICAgICBzcUluaXQsXG4gIHN3ZWVwQmlwYXJ0aXRlOiBzd2VlcEJpcGFydGl0ZSxcbiAgc3dlZXBDb21wbGV0ZTogIHN3ZWVwQ29tcGxldGUsXG4gIHNjYW5CaXBhcnRpdGU6ICBzY2FuQmlwYXJ0aXRlLFxuICBzY2FuQ29tcGxldGU6ICAgc2NhbkNvbXBsZXRlXG59XG5cbnZhciBwb29sICA9IHJlcXVpcmUoJ3R5cGVkYXJyYXktcG9vbCcpXG52YXIgYml0cyAgPSByZXF1aXJlKCdiaXQtdHdpZGRsZScpXG52YXIgaXNvcnQgPSByZXF1aXJlKCcuL3NvcnQnKVxuXG4vL0ZsYWcgZm9yIGJsdWVcbnZhciBCTFVFX0ZMQUcgPSAoMTw8MjgpXG5cbi8vMUQgc3dlZXAgZXZlbnQgcXVldWUgc3R1ZmYgKHVzZSBwb29sIHRvIHNhdmUgc3BhY2UpXG52YXIgSU5JVF9DQVBBQ0lUWSAgICAgID0gMTAyNFxudmFyIFJFRF9TV0VFUF9RVUVVRSAgICA9IHBvb2wubWFsbG9jSW50MzIoSU5JVF9DQVBBQ0lUWSlcbnZhciBSRURfU1dFRVBfSU5ERVggICAgPSBwb29sLm1hbGxvY0ludDMyKElOSVRfQ0FQQUNJVFkpXG52YXIgQkxVRV9TV0VFUF9RVUVVRSAgID0gcG9vbC5tYWxsb2NJbnQzMihJTklUX0NBUEFDSVRZKVxudmFyIEJMVUVfU1dFRVBfSU5ERVggICA9IHBvb2wubWFsbG9jSW50MzIoSU5JVF9DQVBBQ0lUWSlcbnZhciBDT01NT05fU1dFRVBfUVVFVUUgPSBwb29sLm1hbGxvY0ludDMyKElOSVRfQ0FQQUNJVFkpXG52YXIgQ09NTU9OX1NXRUVQX0lOREVYID0gcG9vbC5tYWxsb2NJbnQzMihJTklUX0NBUEFDSVRZKVxudmFyIFNXRUVQX0VWRU5UUyAgICAgICA9IHBvb2wubWFsbG9jRG91YmxlKElOSVRfQ0FQQUNJVFkgKiA4KVxuXG4vL1Jlc2VydmVzIG1lbW9yeSBmb3IgdGhlIDFEIHN3ZWVwIGRhdGEgc3RydWN0dXJlc1xuZnVuY3Rpb24gc3FJbml0KGNvdW50KSB7XG4gIHZhciByY291bnQgPSBiaXRzLm5leHRQb3cyKGNvdW50KVxuICBpZihSRURfU1dFRVBfUVVFVUUubGVuZ3RoIDwgcmNvdW50KSB7XG4gICAgcG9vbC5mcmVlKFJFRF9TV0VFUF9RVUVVRSlcbiAgICBSRURfU1dFRVBfUVVFVUUgPSBwb29sLm1hbGxvY0ludDMyKHJjb3VudClcbiAgfVxuICBpZihSRURfU1dFRVBfSU5ERVgubGVuZ3RoIDwgcmNvdW50KSB7XG4gICAgcG9vbC5mcmVlKFJFRF9TV0VFUF9JTkRFWClcbiAgICBSRURfU1dFRVBfSU5ERVggPSBwb29sLm1hbGxvY0ludDMyKHJjb3VudClcbiAgfVxuICBpZihCTFVFX1NXRUVQX1FVRVVFLmxlbmd0aCA8IHJjb3VudCkge1xuICAgIHBvb2wuZnJlZShCTFVFX1NXRUVQX1FVRVVFKVxuICAgIEJMVUVfU1dFRVBfUVVFVUUgPSBwb29sLm1hbGxvY0ludDMyKHJjb3VudClcbiAgfVxuICBpZihCTFVFX1NXRUVQX0lOREVYLmxlbmd0aCA8IHJjb3VudCkge1xuICAgIHBvb2wuZnJlZShCTFVFX1NXRUVQX0lOREVYKVxuICAgIEJMVUVfU1dFRVBfSU5ERVggPSBwb29sLm1hbGxvY0ludDMyKHJjb3VudClcbiAgfVxuICBpZihDT01NT05fU1dFRVBfUVVFVUUubGVuZ3RoIDwgcmNvdW50KSB7XG4gICAgcG9vbC5mcmVlKENPTU1PTl9TV0VFUF9RVUVVRSlcbiAgICBDT01NT05fU1dFRVBfUVVFVUUgPSBwb29sLm1hbGxvY0ludDMyKHJjb3VudClcbiAgfVxuICBpZihDT01NT05fU1dFRVBfSU5ERVgubGVuZ3RoIDwgcmNvdW50KSB7XG4gICAgcG9vbC5mcmVlKENPTU1PTl9TV0VFUF9JTkRFWClcbiAgICBDT01NT05fU1dFRVBfSU5ERVggPSBwb29sLm1hbGxvY0ludDMyKHJjb3VudClcbiAgfVxuICB2YXIgZXZlbnRMZW5ndGggPSA4ICogcmNvdW50XG4gIGlmKFNXRUVQX0VWRU5UUy5sZW5ndGggPCBldmVudExlbmd0aCkge1xuICAgIHBvb2wuZnJlZShTV0VFUF9FVkVOVFMpXG4gICAgU1dFRVBfRVZFTlRTID0gcG9vbC5tYWxsb2NEb3VibGUoZXZlbnRMZW5ndGgpXG4gIH1cbn1cblxuLy9SZW1vdmUgYW4gaXRlbSBmcm9tIHRoZSBhY3RpdmUgcXVldWUgaW4gTygxKVxuZnVuY3Rpb24gc3FQb3AocXVldWUsIGluZGV4LCBjb3VudCwgaXRlbSkge1xuICB2YXIgaWR4ID0gaW5kZXhbaXRlbV1cbiAgdmFyIHRvcCA9IHF1ZXVlW2NvdW50LTFdXG4gIHF1ZXVlW2lkeF0gPSB0b3BcbiAgaW5kZXhbdG9wXSA9IGlkeFxufVxuXG4vL0luc2VydCBhbiBpdGVtIGludG8gdGhlIGFjdGl2ZSBxdWV1ZSBpbiBPKDEpXG5mdW5jdGlvbiBzcVB1c2gocXVldWUsIGluZGV4LCBjb3VudCwgaXRlbSkge1xuICBxdWV1ZVtjb3VudF0gPSBpdGVtXG4gIGluZGV4W2l0ZW1dICA9IGNvdW50XG59XG5cbi8vUmVjdXJzaW9uIGJhc2UgY2FzZTogdXNlIDFEIHN3ZWVwIGFsZ29yaXRobVxuZnVuY3Rpb24gc3dlZXBCaXBhcnRpdGUoXG4gICAgZCwgdmlzaXQsXG4gICAgcmVkU3RhcnQsICByZWRFbmQsIHJlZCwgcmVkSW5kZXgsXG4gICAgYmx1ZVN0YXJ0LCBibHVlRW5kLCBibHVlLCBibHVlSW5kZXgpIHtcblxuICAvL3N0b3JlIGV2ZW50cyBhcyBwYWlycyBbY29vcmRpbmF0ZSwgaWR4XVxuICAvL1xuICAvLyAgcmVkIGNyZWF0ZTogIC0oaWR4KzEpXG4gIC8vICByZWQgZGVzdHJveTogaWR4XG4gIC8vICBibHVlIGNyZWF0ZTogLShpZHgrQkxVRV9GTEFHKVxuICAvLyAgYmx1ZSBkZXN0cm95OiBpZHgrQkxVRV9GTEFHXG4gIC8vXG4gIHZhciBwdHIgICAgICA9IDBcbiAgdmFyIGVsZW1TaXplID0gMipkXG4gIHZhciBpc3RhcnQgICA9IGQtMVxuICB2YXIgaWVuZCAgICAgPSBlbGVtU2l6ZS0xXG5cbiAgZm9yKHZhciBpPXJlZFN0YXJ0OyBpPHJlZEVuZDsgKytpKSB7XG4gICAgdmFyIGlkeCA9IHJlZEluZGV4W2ldXG4gICAgdmFyIHJlZE9mZnNldCA9IGVsZW1TaXplKmlcbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gcmVkW3JlZE9mZnNldCtpc3RhcnRdXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IC0oaWR4KzEpXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IHJlZFtyZWRPZmZzZXQraWVuZF1cbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gaWR4XG4gIH1cblxuICBmb3IodmFyIGk9Ymx1ZVN0YXJ0OyBpPGJsdWVFbmQ7ICsraSkge1xuICAgIHZhciBpZHggPSBibHVlSW5kZXhbaV0rQkxVRV9GTEFHXG4gICAgdmFyIGJsdWVPZmZzZXQgPSBlbGVtU2l6ZSppXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IGJsdWVbYmx1ZU9mZnNldCtpc3RhcnRdXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IC1pZHhcbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gYmx1ZVtibHVlT2Zmc2V0K2llbmRdXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IGlkeFxuICB9XG5cbiAgLy9wcm9jZXNzIGV2ZW50cyBmcm9tIGxlZnQtPnJpZ2h0XG4gIHZhciBuID0gcHRyID4+PiAxXG4gIGlzb3J0KFNXRUVQX0VWRU5UUywgbilcbiAgXG4gIHZhciByZWRBY3RpdmUgID0gMFxuICB2YXIgYmx1ZUFjdGl2ZSA9IDBcbiAgZm9yKHZhciBpPTA7IGk8bjsgKytpKSB7XG4gICAgdmFyIGUgPSBTV0VFUF9FVkVOVFNbMippKzFdfDBcbiAgICBpZihlID49IEJMVUVfRkxBRykge1xuICAgICAgLy9ibHVlIGRlc3Ryb3kgZXZlbnRcbiAgICAgIGUgPSAoZS1CTFVFX0ZMQUcpfDBcbiAgICAgIHNxUG9wKEJMVUVfU1dFRVBfUVVFVUUsIEJMVUVfU1dFRVBfSU5ERVgsIGJsdWVBY3RpdmUtLSwgZSlcbiAgICB9IGVsc2UgaWYoZSA+PSAwKSB7XG4gICAgICAvL3JlZCBkZXN0cm95IGV2ZW50XG4gICAgICBzcVBvcChSRURfU1dFRVBfUVVFVUUsIFJFRF9TV0VFUF9JTkRFWCwgcmVkQWN0aXZlLS0sIGUpXG4gICAgfSBlbHNlIGlmKGUgPD0gLUJMVUVfRkxBRykge1xuICAgICAgLy9ibHVlIGNyZWF0ZSBldmVudFxuICAgICAgZSA9ICgtZS1CTFVFX0ZMQUcpfDBcbiAgICAgIGZvcih2YXIgaj0wOyBqPHJlZEFjdGl2ZTsgKytqKSB7XG4gICAgICAgIHZhciByZXR2YWwgPSB2aXNpdChSRURfU1dFRVBfUVVFVUVbal0sIGUpXG4gICAgICAgIGlmKHJldHZhbCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHZhbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzcVB1c2goQkxVRV9TV0VFUF9RVUVVRSwgQkxVRV9TV0VFUF9JTkRFWCwgYmx1ZUFjdGl2ZSsrLCBlKVxuICAgIH0gZWxzZSB7XG4gICAgICAvL3JlZCBjcmVhdGUgZXZlbnRcbiAgICAgIGUgPSAoLWUtMSl8MFxuICAgICAgZm9yKHZhciBqPTA7IGo8Ymx1ZUFjdGl2ZTsgKytqKSB7XG4gICAgICAgIHZhciByZXR2YWwgPSB2aXNpdChlLCBCTFVFX1NXRUVQX1FVRVVFW2pdKVxuICAgICAgICBpZihyZXR2YWwgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybiByZXR2YWxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3FQdXNoKFJFRF9TV0VFUF9RVUVVRSwgUkVEX1NXRUVQX0lOREVYLCByZWRBY3RpdmUrKywgZSlcbiAgICB9XG4gIH1cbn1cblxuLy9Db21wbGV0ZSBzd2VlcFxuZnVuY3Rpb24gc3dlZXBDb21wbGV0ZShkLCB2aXNpdCwgXG4gIHJlZFN0YXJ0LCByZWRFbmQsIHJlZCwgcmVkSW5kZXgsXG4gIGJsdWVTdGFydCwgYmx1ZUVuZCwgYmx1ZSwgYmx1ZUluZGV4KSB7XG5cbiAgdmFyIHB0ciAgICAgID0gMFxuICB2YXIgZWxlbVNpemUgPSAyKmRcbiAgdmFyIGlzdGFydCAgID0gZC0xXG4gIHZhciBpZW5kICAgICA9IGVsZW1TaXplLTFcblxuICBmb3IodmFyIGk9cmVkU3RhcnQ7IGk8cmVkRW5kOyArK2kpIHtcbiAgICB2YXIgaWR4ID0gKHJlZEluZGV4W2ldKzEpPDwxXG4gICAgdmFyIHJlZE9mZnNldCA9IGVsZW1TaXplKmlcbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gcmVkW3JlZE9mZnNldCtpc3RhcnRdXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IC1pZHhcbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gcmVkW3JlZE9mZnNldCtpZW5kXVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSBpZHhcbiAgfVxuXG4gIGZvcih2YXIgaT1ibHVlU3RhcnQ7IGk8Ymx1ZUVuZDsgKytpKSB7XG4gICAgdmFyIGlkeCA9IChibHVlSW5kZXhbaV0rMSk8PDFcbiAgICB2YXIgYmx1ZU9mZnNldCA9IGVsZW1TaXplKmlcbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gYmx1ZVtibHVlT2Zmc2V0K2lzdGFydF1cbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gKC1pZHgpfDFcbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gYmx1ZVtibHVlT2Zmc2V0K2llbmRdXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IGlkeHwxXG4gIH1cblxuICAvL3Byb2Nlc3MgZXZlbnRzIGZyb20gbGVmdC0+cmlnaHRcbiAgdmFyIG4gPSBwdHIgPj4+IDFcbiAgaXNvcnQoU1dFRVBfRVZFTlRTLCBuKVxuICBcbiAgdmFyIHJlZEFjdGl2ZSAgICA9IDBcbiAgdmFyIGJsdWVBY3RpdmUgICA9IDBcbiAgdmFyIGNvbW1vbkFjdGl2ZSA9IDBcbiAgZm9yKHZhciBpPTA7IGk8bjsgKytpKSB7XG4gICAgdmFyIGUgICAgID0gU1dFRVBfRVZFTlRTWzIqaSsxXXwwXG4gICAgdmFyIGNvbG9yID0gZSYxXG4gICAgaWYoaSA8IG4tMSAmJiAoZT4+MSkgPT09IChTV0VFUF9FVkVOVFNbMippKzNdPj4xKSkge1xuICAgICAgY29sb3IgPSAyXG4gICAgICBpICs9IDFcbiAgICB9XG4gICAgXG4gICAgaWYoZSA8IDApIHtcbiAgICAgIC8vQ3JlYXRlIGV2ZW50XG4gICAgICB2YXIgaWQgPSAtKGU+PjEpIC0gMVxuXG4gICAgICAvL0ludGVyc2VjdCB3aXRoIGNvbW1vblxuICAgICAgZm9yKHZhciBqPTA7IGo8Y29tbW9uQWN0aXZlOyArK2opIHtcbiAgICAgICAgdmFyIHJldHZhbCA9IHZpc2l0KENPTU1PTl9TV0VFUF9RVUVVRVtqXSwgaWQpXG4gICAgICAgIGlmKHJldHZhbCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHZhbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKGNvbG9yICE9PSAwKSB7XG4gICAgICAgIC8vSW50ZXJzZWN0IHdpdGggcmVkXG4gICAgICAgIGZvcih2YXIgaj0wOyBqPHJlZEFjdGl2ZTsgKytqKSB7XG4gICAgICAgICAgdmFyIHJldHZhbCA9IHZpc2l0KFJFRF9TV0VFUF9RVUVVRVtqXSwgaWQpXG4gICAgICAgICAgaWYocmV0dmFsICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXR2YWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoY29sb3IgIT09IDEpIHtcbiAgICAgICAgLy9JbnRlcnNlY3Qgd2l0aCBibHVlXG4gICAgICAgIGZvcih2YXIgaj0wOyBqPGJsdWVBY3RpdmU7ICsraikge1xuICAgICAgICAgIHZhciByZXR2YWwgPSB2aXNpdChCTFVFX1NXRUVQX1FVRVVFW2pdLCBpZClcbiAgICAgICAgICBpZihyZXR2YWwgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldHZhbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihjb2xvciA9PT0gMCkge1xuICAgICAgICAvL1JlZFxuICAgICAgICBzcVB1c2goUkVEX1NXRUVQX1FVRVVFLCBSRURfU1dFRVBfSU5ERVgsIHJlZEFjdGl2ZSsrLCBpZClcbiAgICAgIH0gZWxzZSBpZihjb2xvciA9PT0gMSkge1xuICAgICAgICAvL0JsdWVcbiAgICAgICAgc3FQdXNoKEJMVUVfU1dFRVBfUVVFVUUsIEJMVUVfU1dFRVBfSU5ERVgsIGJsdWVBY3RpdmUrKywgaWQpXG4gICAgICB9IGVsc2UgaWYoY29sb3IgPT09IDIpIHtcbiAgICAgICAgLy9Cb3RoXG4gICAgICAgIHNxUHVzaChDT01NT05fU1dFRVBfUVVFVUUsIENPTU1PTl9TV0VFUF9JTkRFWCwgY29tbW9uQWN0aXZlKyssIGlkKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvL0Rlc3Ryb3kgZXZlbnRcbiAgICAgIHZhciBpZCA9IChlPj4xKSAtIDFcbiAgICAgIGlmKGNvbG9yID09PSAwKSB7XG4gICAgICAgIC8vUmVkXG4gICAgICAgIHNxUG9wKFJFRF9TV0VFUF9RVUVVRSwgUkVEX1NXRUVQX0lOREVYLCByZWRBY3RpdmUtLSwgaWQpXG4gICAgICB9IGVsc2UgaWYoY29sb3IgPT09IDEpIHtcbiAgICAgICAgLy9CbHVlXG4gICAgICAgIHNxUG9wKEJMVUVfU1dFRVBfUVVFVUUsIEJMVUVfU1dFRVBfSU5ERVgsIGJsdWVBY3RpdmUtLSwgaWQpXG4gICAgICB9IGVsc2UgaWYoY29sb3IgPT09IDIpIHtcbiAgICAgICAgLy9Cb3RoXG4gICAgICAgIHNxUG9wKENPTU1PTl9TV0VFUF9RVUVVRSwgQ09NTU9OX1NXRUVQX0lOREVYLCBjb21tb25BY3RpdmUtLSwgaWQpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vU3dlZXAgYW5kIHBydW5lL3NjYW5saW5lIGFsZ29yaXRobTpcbi8vICBTY2FuIGFsb25nIGF4aXMsIGRldGVjdCBpbnRlcnNlY3Rpb25zXG4vLyAgQnJ1dGUgZm9yY2UgYWxsIGJveGVzIGFsb25nIGF4aXNcbmZ1bmN0aW9uIHNjYW5CaXBhcnRpdGUoXG4gIGQsIGF4aXMsIHZpc2l0LCBmbGlwLFxuICByZWRTdGFydCwgIHJlZEVuZCwgcmVkLCByZWRJbmRleCxcbiAgYmx1ZVN0YXJ0LCBibHVlRW5kLCBibHVlLCBibHVlSW5kZXgpIHtcbiAgXG4gIHZhciBwdHIgICAgICA9IDBcbiAgdmFyIGVsZW1TaXplID0gMipkXG4gIHZhciBpc3RhcnQgICA9IGF4aXNcbiAgdmFyIGllbmQgICAgID0gYXhpcytkXG5cbiAgdmFyIHJlZFNoaWZ0ICA9IDFcbiAgdmFyIGJsdWVTaGlmdCA9IDFcbiAgaWYoZmxpcCkge1xuICAgIGJsdWVTaGlmdCA9IEJMVUVfRkxBR1xuICB9IGVsc2Uge1xuICAgIHJlZFNoaWZ0ICA9IEJMVUVfRkxBR1xuICB9XG5cbiAgZm9yKHZhciBpPXJlZFN0YXJ0OyBpPHJlZEVuZDsgKytpKSB7XG4gICAgdmFyIGlkeCA9IGkgKyByZWRTaGlmdFxuICAgIHZhciByZWRPZmZzZXQgPSBlbGVtU2l6ZSppXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IHJlZFtyZWRPZmZzZXQraXN0YXJ0XVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSAtaWR4XG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IHJlZFtyZWRPZmZzZXQraWVuZF1cbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gaWR4XG4gIH1cbiAgZm9yKHZhciBpPWJsdWVTdGFydDsgaTxibHVlRW5kOyArK2kpIHtcbiAgICB2YXIgaWR4ID0gaSArIGJsdWVTaGlmdFxuICAgIHZhciBibHVlT2Zmc2V0ID0gZWxlbVNpemUqaVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSBibHVlW2JsdWVPZmZzZXQraXN0YXJ0XVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSAtaWR4XG4gIH1cblxuICAvL3Byb2Nlc3MgZXZlbnRzIGZyb20gbGVmdC0+cmlnaHRcbiAgdmFyIG4gPSBwdHIgPj4+IDFcbiAgaXNvcnQoU1dFRVBfRVZFTlRTLCBuKVxuICBcbiAgdmFyIHJlZEFjdGl2ZSAgICA9IDBcbiAgZm9yKHZhciBpPTA7IGk8bjsgKytpKSB7XG4gICAgdmFyIGUgPSBTV0VFUF9FVkVOVFNbMippKzFdfDBcbiAgICBpZihlIDwgMCkge1xuICAgICAgdmFyIGlkeCAgID0gLWVcbiAgICAgIHZhciBpc1JlZCA9IGZhbHNlXG4gICAgICBpZihpZHggPj0gQkxVRV9GTEFHKSB7XG4gICAgICAgIGlzUmVkID0gIWZsaXBcbiAgICAgICAgaWR4IC09IEJMVUVfRkxBRyBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzUmVkID0gISFmbGlwXG4gICAgICAgIGlkeCAtPSAxXG4gICAgICB9XG4gICAgICBpZihpc1JlZCkge1xuICAgICAgICBzcVB1c2goUkVEX1NXRUVQX1FVRVVFLCBSRURfU1dFRVBfSU5ERVgsIHJlZEFjdGl2ZSsrLCBpZHgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYmx1ZUlkICA9IGJsdWVJbmRleFtpZHhdXG4gICAgICAgIHZhciBibHVlUHRyID0gZWxlbVNpemUgKiBpZHhcbiAgICAgICAgXG4gICAgICAgIHZhciBiMCA9IGJsdWVbYmx1ZVB0citheGlzKzFdXG4gICAgICAgIHZhciBiMSA9IGJsdWVbYmx1ZVB0citheGlzKzErZF1cblxucmVkX2xvb3A6XG4gICAgICAgIGZvcih2YXIgaj0wOyBqPHJlZEFjdGl2ZTsgKytqKSB7XG4gICAgICAgICAgdmFyIG9pZHggICA9IFJFRF9TV0VFUF9RVUVVRVtqXVxuICAgICAgICAgIHZhciByZWRQdHIgPSBlbGVtU2l6ZSAqIG9pZHhcblxuICAgICAgICAgIGlmKGIxIDwgcmVkW3JlZFB0citheGlzKzFdIHx8IFxuICAgICAgICAgICAgIHJlZFtyZWRQdHIrYXhpcysxK2RdIDwgYjApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yKHZhciBrPWF4aXMrMjsgazxkOyArK2spIHtcbiAgICAgICAgICAgIGlmKGJsdWVbYmx1ZVB0ciArIGsgKyBkXSA8IHJlZFtyZWRQdHIgKyBrXSB8fCBcbiAgICAgICAgICAgICAgIHJlZFtyZWRQdHIgKyBrICsgZF0gPCBibHVlW2JsdWVQdHIgKyBrXSkge1xuICAgICAgICAgICAgICBjb250aW51ZSByZWRfbG9vcFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByZWRJZCAgPSByZWRJbmRleFtvaWR4XVxuICAgICAgICAgIHZhciByZXR2YWxcbiAgICAgICAgICBpZihmbGlwKSB7XG4gICAgICAgICAgICByZXR2YWwgPSB2aXNpdChibHVlSWQsIHJlZElkKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR2YWwgPSB2aXNpdChyZWRJZCwgYmx1ZUlkKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihyZXR2YWwgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldHZhbCBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3FQb3AoUkVEX1NXRUVQX1FVRVVFLCBSRURfU1dFRVBfSU5ERVgsIHJlZEFjdGl2ZS0tLCBlIC0gcmVkU2hpZnQpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNjYW5Db21wbGV0ZShcbiAgZCwgYXhpcywgdmlzaXQsXG4gIHJlZFN0YXJ0LCAgcmVkRW5kLCByZWQsIHJlZEluZGV4LFxuICBibHVlU3RhcnQsIGJsdWVFbmQsIGJsdWUsIGJsdWVJbmRleCkge1xuXG4gIHZhciBwdHIgICAgICA9IDBcbiAgdmFyIGVsZW1TaXplID0gMipkXG4gIHZhciBpc3RhcnQgICA9IGF4aXNcbiAgdmFyIGllbmQgICAgID0gYXhpcytkXG5cbiAgZm9yKHZhciBpPXJlZFN0YXJ0OyBpPHJlZEVuZDsgKytpKSB7XG4gICAgdmFyIGlkeCA9IGkgKyBCTFVFX0ZMQUdcbiAgICB2YXIgcmVkT2Zmc2V0ID0gZWxlbVNpemUqaVxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSByZWRbcmVkT2Zmc2V0K2lzdGFydF1cbiAgICBTV0VFUF9FVkVOVFNbcHRyKytdID0gLWlkeFxuICAgIFNXRUVQX0VWRU5UU1twdHIrK10gPSByZWRbcmVkT2Zmc2V0K2llbmRdXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IGlkeFxuICB9XG4gIGZvcih2YXIgaT1ibHVlU3RhcnQ7IGk8Ymx1ZUVuZDsgKytpKSB7XG4gICAgdmFyIGlkeCA9IGkgKyAxXG4gICAgdmFyIGJsdWVPZmZzZXQgPSBlbGVtU2l6ZSppXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IGJsdWVbYmx1ZU9mZnNldCtpc3RhcnRdXG4gICAgU1dFRVBfRVZFTlRTW3B0cisrXSA9IC1pZHhcbiAgfVxuXG4gIC8vcHJvY2VzcyBldmVudHMgZnJvbSBsZWZ0LT5yaWdodFxuICB2YXIgbiA9IHB0ciA+Pj4gMVxuICBpc29ydChTV0VFUF9FVkVOVFMsIG4pXG4gIFxuICB2YXIgcmVkQWN0aXZlICAgID0gMFxuICBmb3IodmFyIGk9MDsgaTxuOyArK2kpIHtcbiAgICB2YXIgZSA9IFNXRUVQX0VWRU5UU1syKmkrMV18MFxuICAgIGlmKGUgPCAwKSB7XG4gICAgICB2YXIgaWR4ICAgPSAtZVxuICAgICAgaWYoaWR4ID49IEJMVUVfRkxBRykge1xuICAgICAgICBSRURfU1dFRVBfUVVFVUVbcmVkQWN0aXZlKytdID0gaWR4IC0gQkxVRV9GTEFHXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZHggLT0gMVxuICAgICAgICB2YXIgYmx1ZUlkICA9IGJsdWVJbmRleFtpZHhdXG4gICAgICAgIHZhciBibHVlUHRyID0gZWxlbVNpemUgKiBpZHhcblxuICAgICAgICB2YXIgYjAgPSBibHVlW2JsdWVQdHIrYXhpcysxXVxuICAgICAgICB2YXIgYjEgPSBibHVlW2JsdWVQdHIrYXhpcysxK2RdXG5cbnJlZF9sb29wOlxuICAgICAgICBmb3IodmFyIGo9MDsgajxyZWRBY3RpdmU7ICsraikge1xuICAgICAgICAgIHZhciBvaWR4ICAgPSBSRURfU1dFRVBfUVVFVUVbal1cbiAgICAgICAgICB2YXIgcmVkSWQgID0gcmVkSW5kZXhbb2lkeF1cblxuICAgICAgICAgIGlmKHJlZElkID09PSBibHVlSWQpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHJlZFB0ciA9IGVsZW1TaXplICogb2lkeFxuICAgICAgICAgIGlmKGIxIDwgcmVkW3JlZFB0citheGlzKzFdIHx8IFxuICAgICAgICAgICAgcmVkW3JlZFB0citheGlzKzErZF0gPCBiMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yKHZhciBrPWF4aXMrMjsgazxkOyArK2spIHtcbiAgICAgICAgICAgIGlmKGJsdWVbYmx1ZVB0ciArIGsgKyBkXSA8IHJlZFtyZWRQdHIgKyBrXSB8fCBcbiAgICAgICAgICAgICAgIHJlZFtyZWRQdHIgKyBrICsgZF0gICA8IGJsdWVbYmx1ZVB0ciArIGtdKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIHJlZF9sb29wXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHJldHZhbCA9IHZpc2l0KHJlZElkLCBibHVlSWQpXG4gICAgICAgICAgaWYocmV0dmFsICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXR2YWwgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpZHggPSBlIC0gQkxVRV9GTEFHXG4gICAgICBmb3IodmFyIGo9cmVkQWN0aXZlLTE7IGo+PTA7IC0taikge1xuICAgICAgICBpZihSRURfU1dFRVBfUVVFVUVbal0gPT09IGlkeCkge1xuICAgICAgICAgIGZvcih2YXIgaz1qKzE7IGs8cmVkQWN0aXZlOyArK2spIHtcbiAgICAgICAgICAgIFJFRF9TV0VFUF9RVUVVRVtrLTFdID0gUkVEX1NXRUVQX1FVRVVFW2tdXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC0tcmVkQWN0aXZlXG4gICAgfVxuICB9XG59IixudWxsLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXMtYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG52YXIga01heExlbmd0aCA9IDB4M2ZmZmZmZmZcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgVXNlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAtIEltcGxlbWVudGF0aW9uIG11c3Qgc3VwcG9ydCBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcy5cbiAqICAgRmlyZWZveCA0LTI5IGxhY2tlZCBzdXBwb3J0LCBmaXhlZCBpbiBGaXJlZm94IDMwKy5cbiAqICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgLSBJRTEwIGhhcyBhIGJyb2tlbiBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYXJyYXlzIG9mXG4gKiAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cbiAqXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleSB3aWxsXG4gKiBnZXQgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgc2xvd2VyIGJ1dCB3aWxsIHdvcmsgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IChmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgdmFyIGJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcigwKVxuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShidWYpXG4gICAgYXJyLmZvbyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH1cbiAgICByZXR1cm4gNDIgPT09IGFyci5mb28oKSAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBuZXcgVWludDhBcnJheSgxKS5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufSkoKVxuXG4vKipcbiAqIENsYXNzOiBCdWZmZXJcbiAqID09PT09PT09PT09PT1cbiAqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGFyZSBhdWdtZW50ZWRcbiAqIHdpdGggZnVuY3Rpb24gcHJvcGVydGllcyBmb3IgYWxsIHRoZSBub2RlIGBCdWZmZXJgIEFQSSBmdW5jdGlvbnMuIFdlIHVzZVxuICogYFVpbnQ4QXJyYXlgIHNvIHRoYXQgc3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXQgcmV0dXJuc1xuICogYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogQnkgYXVnbWVudGluZyB0aGUgaW5zdGFuY2VzLCB3ZSBjYW4gYXZvaWQgbW9kaWZ5aW5nIHRoZSBgVWludDhBcnJheWBcbiAqIHByb3RvdHlwZS5cbiAqL1xuZnVuY3Rpb24gQnVmZmVyIChzdWJqZWN0LCBlbmNvZGluZywgbm9aZXJvKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKVxuICAgIHJldHVybiBuZXcgQnVmZmVyKHN1YmplY3QsIGVuY29kaW5nLCBub1plcm8pXG5cbiAgdmFyIHR5cGUgPSB0eXBlb2Ygc3ViamVjdFxuXG4gIC8vIEZpbmQgdGhlIGxlbmd0aFxuICB2YXIgbGVuZ3RoXG4gIGlmICh0eXBlID09PSAnbnVtYmVyJylcbiAgICBsZW5ndGggPSBzdWJqZWN0ID4gMCA/IHN1YmplY3QgPj4+IDAgOiAwXG4gIGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGVuY29kaW5nID09PSAnYmFzZTY0JylcbiAgICAgIHN1YmplY3QgPSBiYXNlNjRjbGVhbihzdWJqZWN0KVxuICAgIGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHN1YmplY3QsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnICYmIHN1YmplY3QgIT09IG51bGwpIHsgLy8gYXNzdW1lIG9iamVjdCBpcyBhcnJheS1saWtlXG4gICAgaWYgKHN1YmplY3QudHlwZSA9PT0gJ0J1ZmZlcicgJiYgaXNBcnJheShzdWJqZWN0LmRhdGEpKVxuICAgICAgc3ViamVjdCA9IHN1YmplY3QuZGF0YVxuICAgIGxlbmd0aCA9ICtzdWJqZWN0Lmxlbmd0aCA+IDAgPyBNYXRoLmZsb29yKCtzdWJqZWN0Lmxlbmd0aCkgOiAwXG4gIH0gZWxzZVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3Qgc3RhcnQgd2l0aCBudW1iZXIsIGJ1ZmZlciwgYXJyYXkgb3Igc3RyaW5nJylcblxuICBpZiAodGhpcy5sZW5ndGggPiBrTWF4TGVuZ3RoKVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG5cbiAgdmFyIGJ1ZlxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBQcmVmZXJyZWQ6IFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgYnVmID0gQnVmZmVyLl9hdWdtZW50KG5ldyBVaW50OEFycmF5KGxlbmd0aCkpXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBUSElTIGluc3RhbmNlIG9mIEJ1ZmZlciAoY3JlYXRlZCBieSBgbmV3YClcbiAgICBidWYgPSB0aGlzXG4gICAgYnVmLmxlbmd0aCA9IGxlbmd0aFxuICAgIGJ1Zi5faXNCdWZmZXIgPSB0cnVlXG4gIH1cblxuICB2YXIgaVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIHN1YmplY3QuYnl0ZUxlbmd0aCA9PT0gJ251bWJlcicpIHtcbiAgICAvLyBTcGVlZCBvcHRpbWl6YXRpb24gLS0gdXNlIHNldCBpZiB3ZSdyZSBjb3B5aW5nIGZyb20gYSB0eXBlZCBhcnJheVxuICAgIGJ1Zi5fc2V0KHN1YmplY3QpXG4gIH0gZWxzZSBpZiAoaXNBcnJheWlzaChzdWJqZWN0KSkge1xuICAgIC8vIFRyZWF0IGFycmF5LWlzaCBvYmplY3RzIGFzIGEgYnl0ZSBhcnJheVxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoc3ViamVjdCkpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICAgICAgYnVmW2ldID0gc3ViamVjdC5yZWFkVUludDgoaSlcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgICAgICBidWZbaV0gPSAoKHN1YmplY3RbaV0gJSAyNTYpICsgMjU2KSAlIDI1NlxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgIGJ1Zi53cml0ZShzdWJqZWN0LCAwLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgIW5vWmVybykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgYnVmW2ldID0gMFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWZcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiAoYSwgYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW4gJiYgYVtpXSA9PT0gYltpXTsgaSsrKSB7fVxuICBpZiAoaSAhPT0gbGVuKSB7XG4gICAgeCA9IGFbaV1cbiAgICB5ID0gYltpXVxuICB9XG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3Jhdyc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiAobGlzdCwgdG90YWxMZW5ndGgpIHtcbiAgaWYgKCFpc0FycmF5KGxpc3QpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVc2FnZTogQnVmZmVyLmNvbmNhdChsaXN0WywgbGVuZ3RoXSknKVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKDApXG4gIH0gZWxzZSBpZiAobGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbGlzdFswXVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKHRvdGFsTGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICB0b3RhbExlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgdG90YWxMZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcih0b3RhbExlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV1cbiAgICBpdGVtLmNvcHkoYnVmLCBwb3MpXG4gICAgcG9zICs9IGl0ZW0ubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGZ1bmN0aW9uIChzdHIsIGVuY29kaW5nKSB7XG4gIHZhciByZXRcbiAgc3RyID0gc3RyICsgJydcbiAgc3dpdGNoIChlbmNvZGluZyB8fCAndXRmOCcpIHtcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdyYXcnOlxuICAgICAgcmV0ID0gc3RyLmxlbmd0aFxuICAgICAgYnJlYWtcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0ID0gc3RyLmxlbmd0aCAqIDJcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnaGV4JzpcbiAgICAgIHJldCA9IHN0ci5sZW5ndGggPj4+IDFcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgICAgcmV0ID0gdXRmOFRvQnl0ZXMoc3RyKS5sZW5ndGhcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIHJldCA9IGJhc2U2NFRvQnl0ZXMoc3RyKS5sZW5ndGhcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldCA9IHN0ci5sZW5ndGhcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbi8vIHByZS1zZXQgZm9yIHZhbHVlcyB0aGF0IG1heSBleGlzdCBpbiB0aGUgZnV0dXJlXG5CdWZmZXIucHJvdG90eXBlLmxlbmd0aCA9IHVuZGVmaW5lZFxuQnVmZmVyLnByb3RvdHlwZS5wYXJlbnQgPSB1bmRlZmluZWRcblxuLy8gdG9TdHJpbmcoZW5jb2RpbmcsIHN0YXJ0PTAsIGVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID09PSBJbmZpbml0eSA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcbiAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKGVuZCA8PSBzdGFydCkgcmV0dXJuICcnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYmluYXJ5U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAoYikge1xuICBpZighQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heClcbiAgICAgIHN0ciArPSAnIC4uLiAnXG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYilcbn1cblxuLy8gYGdldGAgd2lsbCBiZSByZW1vdmVkIGluIE5vZGUgMC4xMytcbkJ1ZmZlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mZnNldCkge1xuICBjb25zb2xlLmxvZygnLmdldCgpIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB1c2luZyBhcnJheSBpbmRleGVzIGluc3RlYWQuJylcbiAgcmV0dXJuIHRoaXMucmVhZFVJbnQ4KG9mZnNldClcbn1cblxuLy8gYHNldGAgd2lsbCBiZSByZW1vdmVkIGluIE5vZGUgMC4xMytcbkJ1ZmZlci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHYsIG9mZnNldCkge1xuICBjb25zb2xlLmxvZygnLnNldCgpIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB1c2luZyBhcnJheSBpbmRleGVzIGluc3RlYWQuJylcbiAgcmV0dXJuIHRoaXMud3JpdGVVSW50OCh2LCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGJ5dGUgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKGJ5dGUpKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG4gICAgYnVmW29mZnNldCArIGldID0gYnl0ZVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHZhciBjaGFyc1dyaXR0ZW4gPSBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG4gIHJldHVybiBjaGFyc1dyaXR0ZW5cbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHZhciBjaGFyc1dyaXR0ZW4gPSBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxuICByZXR1cm4gY2hhcnNXcml0dGVuXG59XG5cbmZ1bmN0aW9uIGJpbmFyeVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHZhciBjaGFyc1dyaXR0ZW4gPSBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbiAgcmV0dXJuIGNoYXJzV3JpdHRlblxufVxuXG5mdW5jdGlvbiB1dGYxNmxlV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICB2YXIgY2hhcnNXcml0dGVuID0gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoLCAyKVxuICByZXR1cm4gY2hhcnNXcml0dGVuXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gU3VwcG9ydCBib3RoIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZylcbiAgLy8gYW5kIHRoZSBsZWdhY3kgKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKVxuICBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIGlmICghaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfSBlbHNlIHsgIC8vIGxlZ2FjeVxuICAgIHZhciBzd2FwID0gZW5jb2RpbmdcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIG9mZnNldCA9IGxlbmd0aFxuICAgIGxlbmd0aCA9IHN3YXBcbiAgfVxuXG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cbiAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcgfHwgJ3V0ZjgnKS50b0xvd2VyQ2FzZSgpXG5cbiAgdmFyIHJldFxuICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICAgIHJldCA9IGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIHJldCA9IHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgICByZXQgPSBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICByZXQgPSBiaW5hcnlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgcmV0ID0gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldCA9IHV0ZjE2bGVXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXMgPSAnJ1xuICB2YXIgdG1wID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgaWYgKGJ1ZltpXSA8PSAweDdGKSB7XG4gICAgICByZXMgKz0gZGVjb2RlVXRmOENoYXIodG1wKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICAgICAgdG1wID0gJydcbiAgICB9IGVsc2Uge1xuICAgICAgdG1wICs9ICclJyArIGJ1ZltpXS50b1N0cmluZygxNilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzICsgZGVjb2RlVXRmOENoYXIodG1wKVxufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGJpbmFyeVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGFzY2lpU2xpY2UoYnVmLCBzdGFydCwgZW5kKVxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW47XG4gICAgaWYgKHN0YXJ0IDwgMClcbiAgICAgIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKVxuICAgICAgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KVxuICAgIGVuZCA9IHN0YXJ0XG5cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5fYXVnbWVudCh0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpKVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgdmFyIG5ld0J1ZiA9IG5ldyBCdWZmZXIoc2xpY2VMZW4sIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWNlTGVuOyBpKyspIHtcbiAgICAgIG5ld0J1ZltpXSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgICByZXR1cm4gbmV3QnVmXG4gIH1cbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSlcbiAgICByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2J1ZmZlciBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWx1ZSBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgaSsrKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gdmFsdWVcbiAgfSBlbHNlIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQzMiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgNCk7IGkgPCBqOyBpKyspIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgPj4+IChsaXR0bGVFbmRpYW4gPyBpIDogMyAtIGkpICogOCkgJiAweGZmXG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gdmFsdWVcbiAgfSBlbHNlIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9IHZhbHVlXG4gIH0gZWxzZSBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gdmFsdWVcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Ugb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlXG4gIH0gZWxzZSBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9IHZhbHVlXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZVxuICB9IGVsc2Ugb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsdWUgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydClcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldF9zdGFydCwgc3RhcnQsIGVuZCkge1xuICB2YXIgc291cmNlID0gdGhpc1xuXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICghdGFyZ2V0X3N0YXJ0KSB0YXJnZXRfc3RhcnQgPSAwXG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm5cbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgc291cmNlLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAoZW5kIDwgc3RhcnQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NvdXJjZUVuZCA8IHNvdXJjZVN0YXJ0JylcbiAgaWYgKHRhcmdldF9zdGFydCA8IDAgfHwgdGFyZ2V0X3N0YXJ0ID49IHRhcmdldC5sZW5ndGgpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gc291cmNlLmxlbmd0aCkgdGhyb3cgbmV3IFR5cGVFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwIHx8IGVuZCA+IHNvdXJjZS5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpXG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRfc3RhcnQgPCBlbmQgLSBzdGFydClcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0X3N0YXJ0ICsgc3RhcnRcblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcblxuICBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldF9zdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0Ll9zZXQodGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLCB0YXJnZXRfc3RhcnQpXG4gIH1cbn1cblxuLy8gZmlsbCh2YWx1ZSwgc3RhcnQ9MCwgZW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCF2YWx1ZSkgdmFsdWUgPSAwXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCkgZW5kID0gdGhpcy5sZW5ndGhcblxuICBpZiAoZW5kIDwgc3RhcnQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuZCA8IHN0YXJ0JylcblxuICAvLyBGaWxsIDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVyblxuICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVyblxuXG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdGhpc1tpXSA9IHZhbHVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IHV0ZjhUb0J5dGVzKHZhbHVlLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHRoaXNbaV0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBgQXJyYXlCdWZmZXJgIHdpdGggdGhlICpjb3BpZWQqIG1lbW9yeSBvZiB0aGUgYnVmZmVyIGluc3RhbmNlLlxuICogQWRkZWQgaW4gTm9kZSAwLjEyLiBPbmx5IGF2YWlsYWJsZSBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgQXJyYXlCdWZmZXIuXG4gKi9cbkJ1ZmZlci5wcm90b3R5cGUudG9BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgICAgcmV0dXJuIChuZXcgQnVmZmVyKHRoaXMpKS5idWZmZXJcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KHRoaXMubGVuZ3RoKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGJ1Zi5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICBidWZbaV0gPSB0aGlzW2ldXG4gICAgICB9XG4gICAgICByZXR1cm4gYnVmLmJ1ZmZlclxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCdWZmZXIudG9BcnJheUJ1ZmZlciBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlcicpXG4gIH1cbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgQlAgPSBCdWZmZXIucHJvdG90eXBlXG5cbi8qKlxuICogQXVnbWVudCBhIFVpbnQ4QXJyYXkgKmluc3RhbmNlKiAobm90IHRoZSBVaW50OEFycmF5IGNsYXNzISkgd2l0aCBCdWZmZXIgbWV0aG9kc1xuICovXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5jb25zdHJ1Y3RvciA9IEJ1ZmZlclxuICBhcnIuX2lzQnVmZmVyID0gdHJ1ZVxuXG4gIC8vIHNhdmUgcmVmZXJlbmNlIHRvIG9yaWdpbmFsIFVpbnQ4QXJyYXkgZ2V0L3NldCBtZXRob2RzIGJlZm9yZSBvdmVyd3JpdGluZ1xuICBhcnIuX2dldCA9IGFyci5nZXRcbiAgYXJyLl9zZXQgPSBhcnIuc2V0XG5cbiAgLy8gZGVwcmVjYXRlZCwgd2lsbCBiZSByZW1vdmVkIGluIG5vZGUgMC4xMytcbiAgYXJyLmdldCA9IEJQLmdldFxuICBhcnIuc2V0ID0gQlAuc2V0XG5cbiAgYXJyLndyaXRlID0gQlAud3JpdGVcbiAgYXJyLnRvU3RyaW5nID0gQlAudG9TdHJpbmdcbiAgYXJyLnRvTG9jYWxlU3RyaW5nID0gQlAudG9TdHJpbmdcbiAgYXJyLnRvSlNPTiA9IEJQLnRvSlNPTlxuICBhcnIuZXF1YWxzID0gQlAuZXF1YWxzXG4gIGFyci5jb21wYXJlID0gQlAuY29tcGFyZVxuICBhcnIuY29weSA9IEJQLmNvcHlcbiAgYXJyLnNsaWNlID0gQlAuc2xpY2VcbiAgYXJyLnJlYWRVSW50OCA9IEJQLnJlYWRVSW50OFxuICBhcnIucmVhZFVJbnQxNkxFID0gQlAucmVhZFVJbnQxNkxFXG4gIGFyci5yZWFkVUludDE2QkUgPSBCUC5yZWFkVUludDE2QkVcbiAgYXJyLnJlYWRVSW50MzJMRSA9IEJQLnJlYWRVSW50MzJMRVxuICBhcnIucmVhZFVJbnQzMkJFID0gQlAucmVhZFVJbnQzMkJFXG4gIGFyci5yZWFkSW50OCA9IEJQLnJlYWRJbnQ4XG4gIGFyci5yZWFkSW50MTZMRSA9IEJQLnJlYWRJbnQxNkxFXG4gIGFyci5yZWFkSW50MTZCRSA9IEJQLnJlYWRJbnQxNkJFXG4gIGFyci5yZWFkSW50MzJMRSA9IEJQLnJlYWRJbnQzMkxFXG4gIGFyci5yZWFkSW50MzJCRSA9IEJQLnJlYWRJbnQzMkJFXG4gIGFyci5yZWFkRmxvYXRMRSA9IEJQLnJlYWRGbG9hdExFXG4gIGFyci5yZWFkRmxvYXRCRSA9IEJQLnJlYWRGbG9hdEJFXG4gIGFyci5yZWFkRG91YmxlTEUgPSBCUC5yZWFkRG91YmxlTEVcbiAgYXJyLnJlYWREb3VibGVCRSA9IEJQLnJlYWREb3VibGVCRVxuICBhcnIud3JpdGVVSW50OCA9IEJQLndyaXRlVUludDhcbiAgYXJyLndyaXRlVUludDE2TEUgPSBCUC53cml0ZVVJbnQxNkxFXG4gIGFyci53cml0ZVVJbnQxNkJFID0gQlAud3JpdGVVSW50MTZCRVxuICBhcnIud3JpdGVVSW50MzJMRSA9IEJQLndyaXRlVUludDMyTEVcbiAgYXJyLndyaXRlVUludDMyQkUgPSBCUC53cml0ZVVJbnQzMkJFXG4gIGFyci53cml0ZUludDggPSBCUC53cml0ZUludDhcbiAgYXJyLndyaXRlSW50MTZMRSA9IEJQLndyaXRlSW50MTZMRVxuICBhcnIud3JpdGVJbnQxNkJFID0gQlAud3JpdGVJbnQxNkJFXG4gIGFyci53cml0ZUludDMyTEUgPSBCUC53cml0ZUludDMyTEVcbiAgYXJyLndyaXRlSW50MzJCRSA9IEJQLndyaXRlSW50MzJCRVxuICBhcnIud3JpdGVGbG9hdExFID0gQlAud3JpdGVGbG9hdExFXG4gIGFyci53cml0ZUZsb2F0QkUgPSBCUC53cml0ZUZsb2F0QkVcbiAgYXJyLndyaXRlRG91YmxlTEUgPSBCUC53cml0ZURvdWJsZUxFXG4gIGFyci53cml0ZURvdWJsZUJFID0gQlAud3JpdGVEb3VibGVCRVxuICBhcnIuZmlsbCA9IEJQLmZpbGxcbiAgYXJyLmluc3BlY3QgPSBCUC5pbnNwZWN0XG4gIGFyci50b0FycmF5QnVmZmVyID0gQlAudG9BcnJheUJ1ZmZlclxuXG4gIHJldHVybiBhcnJcbn1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtel0vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlpc2ggKHN1YmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXkoc3ViamVjdCkgfHwgQnVmZmVyLmlzQnVmZmVyKHN1YmplY3QpIHx8XG4gICAgICBzdWJqZWN0ICYmIHR5cGVvZiBzdWJqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgdHlwZW9mIHN1YmplY3QubGVuZ3RoID09PSAnbnVtYmVyJ1xufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGIgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGlmIChiIDw9IDB4N0YpIHtcbiAgICAgIGJ5dGVBcnJheS5wdXNoKGIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFydCA9IGlcbiAgICAgIGlmIChiID49IDB4RDgwMCAmJiBiIDw9IDB4REZGRikgaSsrXG4gICAgICB2YXIgaCA9IGVuY29kZVVSSUNvbXBvbmVudChzdHIuc2xpY2Uoc3RhcnQsIGkrMSkpLnN1YnN0cigxKS5zcGxpdCgnJScpXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGgubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgYnl0ZUFycmF5LnB1c2gocGFyc2VJbnQoaFtqXSwgMTYpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShzdHIpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCwgdW5pdFNpemUpIHtcbiAgaWYgKHVuaXRTaXplKSBsZW5ndGggLT0gbGVuZ3RoICUgdW5pdFNpemU7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpXG4gICAgICBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGRlY29kZVV0ZjhDaGFyIChzdHIpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhGRkZEKSAvLyBVVEYgOCBpbnZhbGlkIGNoYXJcbiAgfVxufVxuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJC5jb3JlJykuQXJyYXkuZnJvbTsiLCJyZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yJyk7IiwicmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9jb3JlLmlzLWl0ZXJhYmxlJyk7IiwicmVxdWlyZSgnLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczcubWFwLnRvLWpzb24nKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy8kLmNvcmUnKS5NYXA7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJC5jb3JlJykuTWF0aC5sb2cyOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy8kLmNvcmUnKS5PYmplY3QuYXNzaWduOyIsInZhciAkID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy8kJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKXtcbiAgcmV0dXJuICQuY3JlYXRlKFAsIEQpO1xufTsiLCJ2YXIgJCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKFQsIEQpe1xuICByZXR1cm4gJC5zZXREZXNjcyhULCBEKTtcbn07IiwidmFyICQgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzLyQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyl7XG4gIHJldHVybiAkLnNldERlc2MoaXQsIGtleSwgZGVzYyk7XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy8kLmNvcmUnKS5PYmplY3QuZnJlZXplOyIsInZhciAkID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy8kJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KXtcbiAgcmV0dXJuICQuZ2V0RGVzYyhpdCwga2V5KTtcbn07IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy8kLmNvcmUnKS5PYmplY3Qua2V5czsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzLyQuY29yZScpLk9iamVjdC5zZXRQcm90b3R5cGVPZjsiLCJyZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzLyQuY29yZScpLlByb21pc2U7IiwicmVxdWlyZSgnLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnNldCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczcuc2V0LnRvLWpzb24nKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy8kLmNvcmUnKS5TZXQ7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJC5jb3JlJykuU3ltYm9sOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJC53a3MnKSgnaXRlcmF0b3InKTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH07IiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi8kLmlzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKCFpc09iamVjdChpdCkpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59OyIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi8kLmNvZicpXG4gICwgVEFHID0gcmVxdWlyZSgnLi8kLndrcycpKCd0b1N0cmluZ1RhZycpXG4gIC8vIEVTMyB3cm9uZyBoZXJlXG4gICwgQVJHID0gY29mKGZ1bmN0aW9uKCl7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSAoTyA9IE9iamVjdChpdCkpW1RBR10pID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTsiLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciAkICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQnKVxuICAsIGhpZGUgICAgICAgICA9IHJlcXVpcmUoJy4vJC5oaWRlJylcbiAgLCByZWRlZmluZUFsbCAgPSByZXF1aXJlKCcuLyQucmVkZWZpbmUtYWxsJylcbiAgLCBjdHggICAgICAgICAgPSByZXF1aXJlKCcuLyQuY3R4JylcbiAgLCBzdHJpY3ROZXcgICAgPSByZXF1aXJlKCcuLyQuc3RyaWN0LW5ldycpXG4gICwgZGVmaW5lZCAgICAgID0gcmVxdWlyZSgnLi8kLmRlZmluZWQnKVxuICAsIGZvck9mICAgICAgICA9IHJlcXVpcmUoJy4vJC5mb3Itb2YnKVxuICAsICRpdGVyRGVmaW5lICA9IHJlcXVpcmUoJy4vJC5pdGVyLWRlZmluZScpXG4gICwgc3RlcCAgICAgICAgID0gcmVxdWlyZSgnLi8kLml0ZXItc3RlcCcpXG4gICwgSUQgICAgICAgICAgID0gcmVxdWlyZSgnLi8kLnVpZCcpKCdpZCcpXG4gICwgJGhhcyAgICAgICAgID0gcmVxdWlyZSgnLi8kLmhhcycpXG4gICwgaXNPYmplY3QgICAgID0gcmVxdWlyZSgnLi8kLmlzLW9iamVjdCcpXG4gICwgc2V0U3BlY2llcyAgID0gcmVxdWlyZSgnLi8kLnNldC1zcGVjaWVzJylcbiAgLCBERVNDUklQVE9SUyAgPSByZXF1aXJlKCcuLyQuZGVzY3JpcHRvcnMnKVxuICAsIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgaXNPYmplY3RcbiAgLCBTSVpFICAgICAgICAgPSBERVNDUklQVE9SUyA/ICdfcycgOiAnc2l6ZSdcbiAgLCBpZCAgICAgICAgICAgPSAwO1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uKGl0LCBjcmVhdGUpe1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYoISRoYXMoaXQsIElEKSl7XG4gICAgLy8gY2FuJ3Qgc2V0IGlkIHRvIGZyb3plbiBvYmplY3RcbiAgICBpZighaXNFeHRlbnNpYmxlKGl0KSlyZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIGlkXG4gICAgaWYoIWNyZWF0ZSlyZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG9iamVjdCBpZFxuICAgIGhpZGUoaXQsIElELCArK2lkKTtcbiAgLy8gcmV0dXJuIG9iamVjdCBpZCB3aXRoIHByZWZpeFxuICB9IHJldHVybiAnTycgKyBpdFtJRF07XG59O1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbih0aGF0LCBrZXkpe1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpLCBlbnRyeTtcbiAgaWYoaW5kZXggIT09ICdGJylyZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKXtcbiAgICBpZihlbnRyeS5rID09IGtleSlyZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24od3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUil7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uKHRoYXQsIGl0ZXJhYmxlKXtcbiAgICAgIHN0cmljdE5ldyh0aGF0LCBDLCBOQU1FKTtcbiAgICAgIHRoYXQuX2kgPSAkLmNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgICAgLy8gbGFzdCBlbnRyeVxuICAgICAgdGhhdFtTSVpFXSA9IDA7ICAgICAgICAgICAvLyBzaXplXG4gICAgICBpZihpdGVyYWJsZSAhPSB1bmRlZmluZWQpZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCl7XG4gICAgICAgIGZvcih2YXIgdGhhdCA9IHRoaXMsIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pe1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmKGVudHJ5LnApZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24oa2V5KXtcbiAgICAgICAgdmFyIHRoYXQgID0gdGhpc1xuICAgICAgICAgICwgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZihlbnRyeSl7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uXG4gICAgICAgICAgICAsIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmKHByZXYpcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZihuZXh0KW5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYodGhhdC5fZiA9PSBlbnRyeSl0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZih0aGF0Ll9sID09IGVudHJ5KXRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qLCB0aGF0ID0gdW5kZWZpbmVkICovKXtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpXG4gICAgICAgICAgLCBlbnRyeTtcbiAgICAgICAgd2hpbGUoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKXtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlKGVudHJ5ICYmIGVudHJ5LnIpZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpe1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmKERFU0NSSVBUT1JTKSQuc2V0RGVzYyhDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiBkZWZpbmVkKHRoaXNbU0laRV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uKHRoYXQsIGtleSwgdmFsdWUpe1xuICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSlcbiAgICAgICwgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYoZW50cnkpe1xuICAgICAgZW50cnkudiA9IHZhbHVlO1xuICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhhdC5fbCA9IGVudHJ5ID0ge1xuICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcbiAgICAgICAgazoga2V5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGtleVxuICAgICAgICB2OiB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcbiAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG4gICAgICAgIG46IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAvLyA8LSBuZXh0IGVudHJ5XG4gICAgICAgIHI6IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSByZW1vdmVkXG4gICAgICB9O1xuICAgICAgaWYoIXRoYXQuX2YpdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYocHJldilwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYoaW5kZXggIT09ICdGJyl0aGF0Ll9pW2luZGV4XSA9IGVudHJ5O1xuICAgIH0gcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIGdldEVudHJ5OiBnZXRFbnRyeSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbihDLCBOQU1FLCBJU19NQVApe1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbihpdGVyYXRlZCwga2luZCl7XG4gICAgICB0aGlzLl90ID0gaXRlcmF0ZWQ7ICAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7IC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24oKXtcbiAgICAgIHZhciB0aGF0ICA9IHRoaXNcbiAgICAgICAgLCBraW5kICA9IHRoYXQuX2tcbiAgICAgICAgLCBlbnRyeSA9IHRoYXQuX2w7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlKGVudHJ5ICYmIGVudHJ5LnIpZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpe1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmKGtpbmQgPT0gJ2tleXMnICApcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZihraW5kID09ICd2YWx1ZXMnKXJldHVybiBzdGVwKDAsIGVudHJ5LnYpO1xuICAgICAgcmV0dXJuIHN0ZXAoMCwgW2VudHJ5LmssIGVudHJ5LnZdKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJyAsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59OyIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBmb3JPZiAgID0gcmVxdWlyZSgnLi8kLmZvci1vZicpXG4gICwgY2xhc3NvZiA9IHJlcXVpcmUoJy4vJC5jbGFzc29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE5BTUUpe1xuICByZXR1cm4gZnVuY3Rpb24gdG9KU09OKCl7XG4gICAgaWYoY2xhc3NvZih0aGlzKSAhPSBOQU1FKXRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG4gICAgdmFyIGFyciA9IFtdO1xuICAgIGZvck9mKHRoaXMsIGZhbHNlLCBhcnIucHVzaCwgYXJyKTtcbiAgICByZXR1cm4gYXJyO1xuICB9O1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgJCAgICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQnKVxuICAsIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi8kLmdsb2JhbCcpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuLyQuZXhwb3J0JylcbiAgLCBmYWlscyAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5mYWlscycpXG4gICwgaGlkZSAgICAgICAgICAgPSByZXF1aXJlKCcuLyQuaGlkZScpXG4gICwgcmVkZWZpbmVBbGwgICAgPSByZXF1aXJlKCcuLyQucmVkZWZpbmUtYWxsJylcbiAgLCBmb3JPZiAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5mb3Itb2YnKVxuICAsIHN0cmljdE5ldyAgICAgID0gcmVxdWlyZSgnLi8kLnN0cmljdC1uZXcnKVxuICAsIGlzT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi8kLmlzLW9iamVjdCcpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLyQuc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIERFU0NSSVBUT1JTICAgID0gcmVxdWlyZSgnLi8kLmRlc2NyaXB0b3JzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspe1xuICB2YXIgQmFzZSAgPSBnbG9iYWxbTkFNRV1cbiAgICAsIEMgICAgID0gQmFzZVxuICAgICwgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnXG4gICAgLCBwcm90byA9IEMgJiYgQy5wcm90b3R5cGVcbiAgICAsIE8gICAgID0ge307XG4gIGlmKCFERVNDUklQVE9SUyB8fCB0eXBlb2YgQyAhPSAnZnVuY3Rpb24nIHx8ICEoSVNfV0VBSyB8fCBwcm90by5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbigpe1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKXtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICB9IGVsc2Uge1xuICAgIEMgPSB3cmFwcGVyKGZ1bmN0aW9uKHRhcmdldCwgaXRlcmFibGUpe1xuICAgICAgc3RyaWN0TmV3KHRhcmdldCwgQywgTkFNRSk7XG4gICAgICB0YXJnZXQuX2MgPSBuZXcgQmFzZTtcbiAgICAgIGlmKGl0ZXJhYmxlICE9IHVuZGVmaW5lZClmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0YXJnZXRbQURERVJdLCB0YXJnZXQpO1xuICAgIH0pO1xuICAgICQuZWFjaC5jYWxsKCdhZGQsY2xlYXIsZGVsZXRlLGZvckVhY2gsZ2V0LGhhcyxzZXQsa2V5cyx2YWx1ZXMsZW50cmllcycuc3BsaXQoJywnKSxmdW5jdGlvbihLRVkpe1xuICAgICAgdmFyIElTX0FEREVSID0gS0VZID09ICdhZGQnIHx8IEtFWSA9PSAnc2V0JztcbiAgICAgIGlmKEtFWSBpbiBwcm90byAmJiAhKElTX1dFQUsgJiYgS0VZID09ICdjbGVhcicpKWhpZGUoQy5wcm90b3R5cGUsIEtFWSwgZnVuY3Rpb24oYSwgYil7XG4gICAgICAgIGlmKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSlyZXR1cm4gS0VZID09ICdnZXQnID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9jW0tFWV0oYSA9PT0gMCA/IDAgOiBhLCBiKTtcbiAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmKCdzaXplJyBpbiBwcm90bykkLnNldERlc2MoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5fYy5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQywgTkFNRSk7XG5cbiAgT1tOQU1FXSA9IEM7XG4gICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GLCBPKTtcblxuICBpZighSVNfV0VBSyljb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59OyIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7dmVyc2lvbjogJzEuMi42J307XG5pZih0eXBlb2YgX19lID09ICdudW1iZXInKV9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWYiLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLyQuYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgdGhhdCwgbGVuZ3RoKXtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYodGhhdCA9PT0gdW5kZWZpbmVkKXJldHVybiBmbjtcbiAgc3dpdGNoKGxlbmd0aCl7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24oYSl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbihhLCBiLCBjKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKC8qIC4uLmFyZ3MgKi8pe1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTsiLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKGl0ID09IHVuZGVmaW5lZCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07IiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi8kLmZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7Z2V0OiBmdW5jdGlvbigpeyByZXR1cm4gNzsgfX0pLmEgIT0gNztcbn0pOyIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vJC5pcy1vYmplY3QnKVxuICAsIGRvY3VtZW50ID0gcmVxdWlyZSgnLi8kLmdsb2JhbCcpLmRvY3VtZW50XG4gIC8vIGluIG9sZCBJRSB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0J1xuICAsIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59OyIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgJCA9IHJlcXVpcmUoJy4vJCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBrZXlzICAgICAgID0gJC5nZXRLZXlzKGl0KVxuICAgICwgZ2V0U3ltYm9scyA9ICQuZ2V0U3ltYm9scztcbiAgaWYoZ2V0U3ltYm9scyl7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KVxuICAgICAgLCBpc0VudW0gID0gJC5pc0VudW1cbiAgICAgICwgaSAgICAgICA9IDBcbiAgICAgICwga2V5O1xuICAgIHdoaWxlKHN5bWJvbHMubGVuZ3RoID4gaSlpZihpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSlrZXlzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4ga2V5cztcbn07IiwidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vJC5nbG9iYWwnKVxuICAsIGNvcmUgICAgICA9IHJlcXVpcmUoJy4vJC5jb3JlJylcbiAgLCBjdHggICAgICAgPSByZXF1aXJlKCcuLyQuY3R4JylcbiAgLCBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBzb3VyY2Upe1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRlxuICAgICwgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuR1xuICAgICwgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuU1xuICAgICwgSVNfUFJPVE8gID0gdHlwZSAmICRleHBvcnQuUFxuICAgICwgSVNfQklORCAgID0gdHlwZSAmICRleHBvcnQuQlxuICAgICwgSVNfV1JBUCAgID0gdHlwZSAmICRleHBvcnQuV1xuICAgICwgZXhwb3J0cyAgID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSlcbiAgICAsIHRhcmdldCAgICA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV1cbiAgICAsIGtleSwgb3duLCBvdXQ7XG4gIGlmKElTX0dMT0JBTClzb3VyY2UgPSBuYW1lO1xuICBmb3Ioa2V5IGluIHNvdXJjZSl7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYga2V5IGluIHRhcmdldDtcbiAgICBpZihvd24gJiYga2V5IGluIGV4cG9ydHMpY29udGludWU7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSBvd24gPyB0YXJnZXRba2V5XSA6IHNvdXJjZVtrZXldO1xuICAgIC8vIHByZXZlbnQgZ2xvYmFsIHBvbGx1dGlvbiBmb3IgbmFtZXNwYWNlc1xuICAgIGV4cG9ydHNba2V5XSA9IElTX0dMT0JBTCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0gJ2Z1bmN0aW9uJyA/IHNvdXJjZVtrZXldXG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICA6IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKVxuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2UgdGhlbSBpbiBsaWJyYXJ5XG4gICAgOiBJU19XUkFQICYmIHRhcmdldFtrZXldID09IG91dCA/IChmdW5jdGlvbihDKXtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEMgPyBuZXcgQyhwYXJhbSkgOiBDKHBhcmFtKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgaWYoSVNfUFJPVE8pKGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pKVtrZXldID0gb3V0O1xuICB9XG59O1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7IC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAvLyB3cmFwXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07IiwidmFyIGN0eCAgICAgICAgID0gcmVxdWlyZSgnLi8kLmN0eCcpXG4gICwgY2FsbCAgICAgICAgPSByZXF1aXJlKCcuLyQuaXRlci1jYWxsJylcbiAgLCBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vJC5pcy1hcnJheS1pdGVyJylcbiAgLCBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vJC5hbi1vYmplY3QnKVxuICAsIHRvTGVuZ3RoICAgID0gcmVxdWlyZSgnLi8kLnRvLWxlbmd0aCcpXG4gICwgZ2V0SXRlckZuICAgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQpe1xuICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKGl0ZXJhYmxlKVxuICAgICwgZiAgICAgID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpXG4gICAgLCBpbmRleCAgPSAwXG4gICAgLCBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yO1xuICBpZih0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZihpc0FycmF5SXRlcihpdGVyRm4pKWZvcihsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKyl7XG4gICAgZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICB9IGVsc2UgZm9yKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7ICl7XG4gICAgY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gIH1cbn07IiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vJC50by1pb2JqZWN0JylcbiAgLCBnZXROYW1lcyAgPSByZXF1aXJlKCcuLyQnKS5nZXROYW1lc1xuICAsIHRvU3RyaW5nICA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbihpdCl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdldE5hbWVzKGl0KTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZ2V0ID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG4gIGlmKHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nKXJldHVybiBnZXRXaW5kb3dOYW1lcyhpdCk7XG4gIHJldHVybiBnZXROYW1lcyh0b0lPYmplY3QoaXQpKTtcbn07IiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZiA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZih0eXBlb2YgX19nID09ICdudW1iZXInKV9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwga2V5KXtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59OyIsInZhciAkICAgICAgICAgID0gcmVxdWlyZSgnLi8kJylcbiAgLCBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi8kLnByb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi8kLmRlc2NyaXB0b3JzJykgPyBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuICByZXR1cm4gJC5zZXREZXNjKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLyQuZ2xvYmFsJykuZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OyIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgYXJncywgdGhhdCl7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoKGFyZ3MubGVuZ3RoKXtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTsiLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vJC5jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07IiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyAgPSByZXF1aXJlKCcuLyQuaXRlcmF0b3JzJylcbiAgLCBJVEVSQVRPUiAgID0gcmVxdWlyZSgnLi8kLndrcycpKCdpdGVyYXRvcicpXG4gICwgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59OyIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi8kLmNvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKGFyZyl7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07IiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi8kLmFuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoKGUpe1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYocmV0ICE9PSB1bmRlZmluZWQpYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciAkICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vJCcpXG4gICwgZGVzY3JpcHRvciAgICAgPSByZXF1aXJlKCcuLyQucHJvcGVydHktZGVzYycpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLyQuc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuLyQuaGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuLyQud2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCl7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9ICQuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7bmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KX0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgICAgICAgID0gcmVxdWlyZSgnLi8kLmxpYnJhcnknKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi8kLmV4cG9ydCcpXG4gICwgcmVkZWZpbmUgICAgICAgPSByZXF1aXJlKCcuLyQucmVkZWZpbmUnKVxuICAsIGhpZGUgICAgICAgICAgID0gcmVxdWlyZSgnLi8kLmhpZGUnKVxuICAsIGhhcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi8kLmhhcycpXG4gICwgSXRlcmF0b3JzICAgICAgPSByZXF1aXJlKCcuLyQuaXRlcmF0b3JzJylcbiAgLCAkaXRlckNyZWF0ZSAgICA9IHJlcXVpcmUoJy4vJC5pdGVyLWNyZWF0ZScpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLyQuc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIGdldFByb3RvICAgICAgID0gcmVxdWlyZSgnLi8kJykuZ2V0UHJvdG9cbiAgLCBJVEVSQVRPUiAgICAgICA9IHJlcXVpcmUoJy4vJC53a3MnKSgnaXRlcmF0b3InKVxuICAsIEJVR0dZICAgICAgICAgID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpIC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgLCBGRl9JVEVSQVRPUiAgICA9ICdAQGl0ZXJhdG9yJ1xuICAsIEtFWVMgICAgICAgICAgID0gJ2tleXMnXG4gICwgVkFMVUVTICAgICAgICAgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpe1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbihraW5kKXtcbiAgICBpZighQlVHR1kgJiYga2luZCBpbiBwcm90bylyZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoKGtpbmQpe1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgICAgICAgID0gTkFNRSArICcgSXRlcmF0b3InXG4gICAgLCBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVNcbiAgICAsIFZBTFVFU19CVUcgPSBmYWxzZVxuICAgICwgcHJvdG8gICAgICA9IEJhc2UucHJvdG90eXBlXG4gICAgLCAkbmF0aXZlICAgID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdXG4gICAgLCAkZGVmYXVsdCAgID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVClcbiAgICAsIG1ldGhvZHMsIGtleTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZigkbmF0aXZlKXtcbiAgICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90bygkZGVmYXVsdC5jYWxsKG5ldyBCYXNlKSk7XG4gICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgIC8vIEZGIGZpeFxuICAgIGlmKCFMSUJSQVJZICYmIGhhcyhwcm90bywgRkZfSVRFUkFUT1IpKWhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gICAgaWYoREVGX1ZBTFVFUyAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUyl7XG4gICAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCl7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gICAgfVxuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZigoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSl7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSAgPSByZXR1cm5UaGlzO1xuICBpZihERUZBVUxUKXtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiAgREVGX1ZBTFVFUyAgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogICAgSVNfU0VUICAgICAgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKVxuICAgIH07XG4gICAgaWYoRk9SQ0VEKWZvcihrZXkgaW4gbWV0aG9kcyl7XG4gICAgICBpZighKGtleSBpbiBwcm90bykpcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTsiLCJ2YXIgSVRFUkFUT1IgICAgID0gcmVxdWlyZSgnLi8kLndrcycpKCdpdGVyYXRvcicpXG4gICwgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24oKXsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24oKXsgdGhyb3cgMjsgfSk7XG59IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZXhlYywgc2tpcENsb3Npbmcpe1xuICBpZighc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORylyZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciAgPSBbN11cbiAgICAgICwgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbigpeyBzYWZlID0gdHJ1ZTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24oKXsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGRvbmUsIHZhbHVlKXtcbiAgcmV0dXJuIHt2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZX07XG59OyIsIm1vZHVsZS5leHBvcnRzID0ge307IiwidmFyICRPYmplY3QgPSBPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlOiAgICAgJE9iamVjdC5jcmVhdGUsXG4gIGdldFByb3RvOiAgICRPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gIGlzRW51bTogICAgIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLFxuICBnZXREZXNjOiAgICAkT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgc2V0RGVzYzogICAgJE9iamVjdC5kZWZpbmVQcm9wZXJ0eSxcbiAgc2V0RGVzY3M6ICAgJE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLFxuICBnZXRLZXlzOiAgICAkT2JqZWN0LmtleXMsXG4gIGdldE5hbWVzOiAgICRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgZ2V0U3ltYm9sczogJE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsXG4gIGVhY2g6ICAgICAgIFtdLmZvckVhY2hcbn07IiwidmFyICQgICAgICAgICA9IHJlcXVpcmUoJy4vJCcpXG4gICwgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi8kLnRvLWlvYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqZWN0LCBlbCl7XG4gIHZhciBPICAgICAgPSB0b0lPYmplY3Qob2JqZWN0KVxuICAgICwga2V5cyAgID0gJC5nZXRLZXlzKE8pXG4gICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICwgaW5kZXggID0gMFxuICAgICwga2V5O1xuICB3aGlsZShsZW5ndGggPiBpbmRleClpZihPW2tleSA9IGtleXNbaW5kZXgrK11dID09PSBlbClyZXR1cm4ga2V5O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7IiwidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vJC5nbG9iYWwnKVxuICAsIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vJC50YXNrJykuc2V0XG4gICwgT2JzZXJ2ZXIgID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXJcbiAgLCBwcm9jZXNzICAgPSBnbG9iYWwucHJvY2Vzc1xuICAsIFByb21pc2UgICA9IGdsb2JhbC5Qcm9taXNlXG4gICwgaXNOb2RlICAgID0gcmVxdWlyZSgnLi8kLmNvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJ1xuICAsIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxudmFyIGZsdXNoID0gZnVuY3Rpb24oKXtcbiAgdmFyIHBhcmVudCwgZG9tYWluLCBmbjtcbiAgaWYoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpe1xuICAgIHByb2Nlc3MuZG9tYWluID0gbnVsbDtcbiAgICBwYXJlbnQuZXhpdCgpO1xuICB9XG4gIHdoaWxlKGhlYWQpe1xuICAgIGRvbWFpbiA9IGhlYWQuZG9tYWluO1xuICAgIGZuICAgICA9IGhlYWQuZm47XG4gICAgaWYoZG9tYWluKWRvbWFpbi5lbnRlcigpO1xuICAgIGZuKCk7IC8vIDwtIGN1cnJlbnRseSB3ZSB1c2UgaXQgb25seSBmb3IgUHJvbWlzZSAtIHRyeSAvIGNhdGNoIG5vdCByZXF1aXJlZFxuICAgIGlmKGRvbWFpbilkb21haW4uZXhpdCgpO1xuICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgaWYocGFyZW50KXBhcmVudC5lbnRlcigpO1xufTtcblxuLy8gTm9kZS5qc1xuaWYoaXNOb2RlKXtcbiAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgfTtcbi8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlclxufSBlbHNlIGlmKE9ic2VydmVyKXtcbiAgdmFyIHRvZ2dsZSA9IDFcbiAgICAsIG5vZGUgICA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHtjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gLXRvZ2dsZTtcbiAgfTtcbi8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG59IGVsc2UgaWYoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpe1xuICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZmx1c2gpO1xuICB9O1xuLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbi8vIC0gc2V0SW1tZWRpYXRlXG4vLyAtIE1lc3NhZ2VDaGFubmVsXG4vLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4vLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuLy8gLSBzZXRUaW1lb3V0XG59IGVsc2Uge1xuICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc2FwKGZuKXtcbiAgdmFyIHRhc2sgPSB7Zm46IGZuLCBuZXh0OiB1bmRlZmluZWQsIGRvbWFpbjogaXNOb2RlICYmIHByb2Nlc3MuZG9tYWlufTtcbiAgaWYobGFzdClsYXN0Lm5leHQgPSB0YXNrO1xuICBpZighaGVhZCl7XG4gICAgaGVhZCA9IHRhc2s7XG4gICAgbm90aWZ5KCk7XG4gIH0gbGFzdCA9IHRhc2s7XG59OyIsIi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciAkICAgICAgICA9IHJlcXVpcmUoJy4vJCcpXG4gICwgdG9PYmplY3QgPSByZXF1aXJlKCcuLyQudG8tb2JqZWN0JylcbiAgLCBJT2JqZWN0ICA9IHJlcXVpcmUoJy4vJC5pb2JqZWN0Jyk7XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLyQuZmFpbHMnKShmdW5jdGlvbigpe1xuICB2YXIgYSA9IE9iamVjdC5hc3NpZ25cbiAgICAsIEEgPSB7fVxuICAgICwgQiA9IHt9XG4gICAgLCBTID0gU3ltYm9sKClcbiAgICAsIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbihrKXsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gYSh7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cyhhKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKXsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCAgICAgPSB0b09iamVjdCh0YXJnZXQpXG4gICAgLCAkJCAgICA9IGFyZ3VtZW50c1xuICAgICwgJCRsZW4gPSAkJC5sZW5ndGhcbiAgICAsIGluZGV4ID0gMVxuICAgICwgZ2V0S2V5cyAgICA9ICQuZ2V0S2V5c1xuICAgICwgZ2V0U3ltYm9scyA9ICQuZ2V0U3ltYm9sc1xuICAgICwgaXNFbnVtICAgICA9ICQuaXNFbnVtO1xuICB3aGlsZSgkJGxlbiA+IGluZGV4KXtcbiAgICB2YXIgUyAgICAgID0gSU9iamVjdCgkJFtpbmRleCsrXSlcbiAgICAgICwga2V5cyAgID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKVxuICAgICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICAgLCBqICAgICAgPSAwXG4gICAgICAsIGtleTtcbiAgICB3aGlsZShsZW5ndGggPiBqKWlmKGlzRW51bS5jYWxsKFMsIGtleSA9IGtleXNbaisrXSkpVFtrZXldID0gU1trZXldO1xuICB9XG4gIHJldHVybiBUO1xufSA6IE9iamVjdC5hc3NpZ247IiwiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vJC5leHBvcnQnKVxuICAsIGNvcmUgICAgPSByZXF1aXJlKCcuLyQuY29yZScpXG4gICwgZmFpbHMgICA9IHJlcXVpcmUoJy4vJC5mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihLRVksIGV4ZWMpe1xuICB2YXIgZm4gID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldXG4gICAgLCBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbigpeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGJpdG1hcCwgdmFsdWUpe1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGUgIDogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGUgICAgOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlICAgICAgIDogdmFsdWVcbiAgfTtcbn07IiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi8kLnJlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHRhcmdldCwgc3JjKXtcbiAgZm9yKHZhciBrZXkgaW4gc3JjKXJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIHJldHVybiB0YXJnZXQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi8kLmhpZGUnKTsiLCIvLyA3LjIuOSBTYW1lVmFsdWUoeCwgeSlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpe1xuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07IiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGdldERlc2MgID0gcmVxdWlyZSgnLi8kJykuZ2V0RGVzY1xuICAsIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi8kLmlzLW9iamVjdCcpXG4gICwgYW5PYmplY3QgPSByZXF1aXJlKCcuLyQuYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbihPLCBwcm90byl7XG4gIGFuT2JqZWN0KE8pO1xuICBpZighaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKXRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uKHRlc3QsIGJ1Z2d5LCBzZXQpe1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gcmVxdWlyZSgnLi8kLmN0eCcpKEZ1bmN0aW9uLmNhbGwsIGdldERlc2MoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaChlKXsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pe1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmKGJ1Z2d5KU8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgY29yZSAgICAgICAgPSByZXF1aXJlKCcuLyQuY29yZScpXG4gICwgJCAgICAgICAgICAgPSByZXF1aXJlKCcuLyQnKVxuICAsIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi8kLmRlc2NyaXB0b3JzJylcbiAgLCBTUEVDSUVTICAgICA9IHJlcXVpcmUoJy4vJC53a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEtFWSl7XG4gIHZhciBDID0gY29yZVtLRVldO1xuICBpZihERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSQuc2V0RGVzYyhDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59OyIsInZhciBkZWYgPSByZXF1aXJlKCcuLyQnKS5zZXREZXNjXG4gICwgaGFzID0gcmVxdWlyZSgnLi8kLmhhcycpXG4gICwgVEFHID0gcmVxdWlyZSgnLi8kLndrcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCB0YWcsIHN0YXQpe1xuICBpZihpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKWRlZihpdCwgVEFHLCB7Y29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnfSk7XG59OyIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLyQuZ2xvYmFsJylcbiAgLCBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJ1xuICAsIHN0b3JlICA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB7fSk7XG59OyIsIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ICA9IHJlcXVpcmUoJy4vJC5hbi1vYmplY3QnKVxuICAsIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vJC5hLWZ1bmN0aW9uJylcbiAgLCBTUEVDSUVTICAgPSByZXF1aXJlKCcuLyQud2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTywgRCl7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3IsIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgQ29uc3RydWN0b3IsIG5hbWUpe1xuICBpZighKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXRocm93IFR5cGVFcnJvcihuYW1lICsgXCI6IHVzZSB0aGUgJ25ldycgb3BlcmF0b3IhXCIpO1xuICByZXR1cm4gaXQ7XG59OyIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLyQudG8taW50ZWdlcicpXG4gICwgZGVmaW5lZCAgID0gcmVxdWlyZSgnLi8kLmRlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFRPX1NUUklORyl7XG4gIHJldHVybiBmdW5jdGlvbih0aGF0LCBwb3Mpe1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpXG4gICAgICAsIGkgPSB0b0ludGVnZXIocG9zKVxuICAgICAgLCBsID0gcy5sZW5ndGhcbiAgICAgICwgYSwgYjtcbiAgICBpZihpIDwgMCB8fCBpID49IGwpcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07IiwidmFyIGN0eCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5jdHgnKVxuICAsIGludm9rZSAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5pbnZva2UnKVxuICAsIGh0bWwgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5odG1sJylcbiAgLCBjZWwgICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQuZG9tLWNyZWF0ZScpXG4gICwgZ2xvYmFsICAgICAgICAgICAgID0gcmVxdWlyZSgnLi8kLmdsb2JhbCcpXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBzZXRUYXNrICAgICAgICAgICAgPSBnbG9iYWwuc2V0SW1tZWRpYXRlXG4gICwgY2xlYXJUYXNrICAgICAgICAgID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlXG4gICwgTWVzc2FnZUNoYW5uZWwgICAgID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsXG4gICwgY291bnRlciAgICAgICAgICAgID0gMFxuICAsIHF1ZXVlICAgICAgICAgICAgICA9IHt9XG4gICwgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSdcbiAgLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbigpe1xuICB2YXIgaWQgPSArdGhpcztcbiAgaWYocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKXtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RuZXIgPSBmdW5jdGlvbihldmVudCl7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spe1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKXtcbiAgICB2YXIgYXJncyA9IFtdLCBpID0gMTtcbiAgICB3aGlsZShhcmd1bWVudHMubGVuZ3RoID4gaSlhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbigpe1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKXtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYocmVxdWlyZSgnLi8kLmNvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJyl7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYoTWVzc2FnZUNoYW5uZWwpe1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7XG4gICAgcG9ydCAgICA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0bmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cyl7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdG5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZihPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSl7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbigpe1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogICBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59OyIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgID0gTWF0aC5jZWlsXG4gICwgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTsiLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi8kLmlvYmplY3QnKVxuICAsIGRlZmluZWQgPSByZXF1aXJlKCcuLyQuZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07IiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi8kLnRvLWludGVnZXInKVxuICAsIG1pbiAgICAgICA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59OyIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi8kLmRlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07IiwidmFyIGlkID0gMFxuICAsIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07IiwidmFyIHN0b3JlICA9IHJlcXVpcmUoJy4vJC5zaGFyZWQnKSgnd2tzJylcbiAgLCB1aWQgICAgPSByZXF1aXJlKCcuLyQudWlkJylcbiAgLCBTeW1ib2wgPSByZXF1aXJlKCcuLyQuZ2xvYmFsJykuU3ltYm9sO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKXtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgU3ltYm9sICYmIFN5bWJvbFtuYW1lXSB8fCAoU3ltYm9sIHx8IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTsiLCJ2YXIgY2xhc3NvZiAgID0gcmVxdWlyZSgnLi8kLmNsYXNzb2YnKVxuICAsIElURVJBVE9SICA9IHJlcXVpcmUoJy4vJC53a3MnKSgnaXRlcmF0b3InKVxuICAsIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vJC5pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi8kLmNvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgIT0gdW5kZWZpbmVkKXJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07IiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi8kLmFuLW9iamVjdCcpXG4gICwgZ2V0ICAgICAgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLyQuY29yZScpLmdldEl0ZXJhdG9yID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgaXRlckZuID0gZ2V0KGl0KTtcbiAgaWYodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICByZXR1cm4gYW5PYmplY3QoaXRlckZuLmNhbGwoaXQpKTtcbn07IiwidmFyIGNsYXNzb2YgICA9IHJlcXVpcmUoJy4vJC5jbGFzc29mJylcbiAgLCBJVEVSQVRPUiAgPSByZXF1aXJlKCcuLyQud2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLyQuaXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vJC5jb3JlJykuaXNJdGVyYWJsZSA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIE8gPSBPYmplY3QoaXQpO1xuICByZXR1cm4gT1tJVEVSQVRPUl0gIT09IHVuZGVmaW5lZFxuICAgIHx8ICdAQGl0ZXJhdG9yJyBpbiBPXG4gICAgfHwgSXRlcmF0b3JzLmhhc093blByb3BlcnR5KGNsYXNzb2YoTykpO1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgY3R4ICAgICAgICAgPSByZXF1aXJlKCcuLyQuY3R4JylcbiAgLCAkZXhwb3J0ICAgICA9IHJlcXVpcmUoJy4vJC5leHBvcnQnKVxuICAsIHRvT2JqZWN0ICAgID0gcmVxdWlyZSgnLi8kLnRvLW9iamVjdCcpXG4gICwgY2FsbCAgICAgICAgPSByZXF1aXJlKCcuLyQuaXRlci1jYWxsJylcbiAgLCBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vJC5pcy1hcnJheS1pdGVyJylcbiAgLCB0b0xlbmd0aCAgICA9IHJlcXVpcmUoJy4vJC50by1sZW5ndGgnKVxuICAsIGdldEl0ZXJGbiAgID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vJC5pdGVyLWRldGVjdCcpKGZ1bmN0aW9uKGl0ZXIpeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlLyosIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKi8pe1xuICAgIHZhciBPICAgICAgID0gdG9PYmplY3QoYXJyYXlMaWtlKVxuICAgICAgLCBDICAgICAgID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheVxuICAgICAgLCAkJCAgICAgID0gYXJndW1lbnRzXG4gICAgICAsICQkbGVuICAgPSAkJC5sZW5ndGhcbiAgICAgICwgbWFwZm4gICA9ICQkbGVuID4gMSA/ICQkWzFdIDogdW5kZWZpbmVkXG4gICAgICAsIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAsIGluZGV4ICAgPSAwXG4gICAgICAsIGl0ZXJGbiAgPSBnZXRJdGVyRm4oTylcbiAgICAgICwgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmKG1hcHBpbmcpbWFwZm4gPSBjdHgobWFwZm4sICQkbGVuID4gMiA/ICQkWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZihpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSl7XG4gICAgICBmb3IoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEM7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKyl7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKXtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi8kLmFkZC10by11bnNjb3BhYmxlcycpXG4gICwgc3RlcCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5pdGVyLXN0ZXAnKVxuICAsIEl0ZXJhdG9ycyAgICAgICAgPSByZXF1aXJlKCcuLyQuaXRlcmF0b3JzJylcbiAgLCB0b0lPYmplY3QgICAgICAgID0gcmVxdWlyZSgnLi8kLnRvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLyQuaXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uKCl7XG4gIHZhciBPICAgICA9IHRoaXMuX3RcbiAgICAsIGtpbmQgID0gdGhpcy5fa1xuICAgICwgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKXtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmKGtpbmQgPT0gJ2tleXMnICApcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZihraW5kID09ICd2YWx1ZXMnKXJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTsiLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi8kLmNvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbnJlcXVpcmUoJy4vJC5jb2xsZWN0aW9uJykoJ01hcCcsIGZ1bmN0aW9uKGdldCl7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKXsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjEuMy42IE1hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KXtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSl7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpOyIsIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi8kLmV4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCl7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pOyIsIi8vIDE5LjEuMy4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vJC5leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7YXNzaWduOiByZXF1aXJlKCcuLyQub2JqZWN0LWFzc2lnbicpfSk7IiwiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi8kLmlzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuLyQub2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbigkZnJlZXplKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCl7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShpdCkgOiBpdDtcbiAgfTtcbn0pOyIsIi8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuLyQudG8taW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuLyQub2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCBmdW5jdGlvbigkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KXtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7IiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLyQudG8tb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vJC5vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbigka2V5cyl7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KXtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pOyIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vJC5leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge3NldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuLyQuc2V0LXByb3RvJykuc2V0fSk7IiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgICAgICAgICAgPSByZXF1aXJlKCcuLyQnKVxuICAsIExJQlJBUlkgICAgPSByZXF1aXJlKCcuLyQubGlicmFyeScpXG4gICwgZ2xvYmFsICAgICA9IHJlcXVpcmUoJy4vJC5nbG9iYWwnKVxuICAsIGN0eCAgICAgICAgPSByZXF1aXJlKCcuLyQuY3R4JylcbiAgLCBjbGFzc29mICAgID0gcmVxdWlyZSgnLi8kLmNsYXNzb2YnKVxuICAsICRleHBvcnQgICAgPSByZXF1aXJlKCcuLyQuZXhwb3J0JylcbiAgLCBpc09iamVjdCAgID0gcmVxdWlyZSgnLi8kLmlzLW9iamVjdCcpXG4gICwgYW5PYmplY3QgICA9IHJlcXVpcmUoJy4vJC5hbi1vYmplY3QnKVxuICAsIGFGdW5jdGlvbiAgPSByZXF1aXJlKCcuLyQuYS1mdW5jdGlvbicpXG4gICwgc3RyaWN0TmV3ICA9IHJlcXVpcmUoJy4vJC5zdHJpY3QtbmV3JylcbiAgLCBmb3JPZiAgICAgID0gcmVxdWlyZSgnLi8kLmZvci1vZicpXG4gICwgc2V0UHJvdG8gICA9IHJlcXVpcmUoJy4vJC5zZXQtcHJvdG8nKS5zZXRcbiAgLCBzYW1lICAgICAgID0gcmVxdWlyZSgnLi8kLnNhbWUtdmFsdWUnKVxuICAsIFNQRUNJRVMgICAgPSByZXF1aXJlKCcuLyQud2tzJykoJ3NwZWNpZXMnKVxuICAsIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vJC5zcGVjaWVzLWNvbnN0cnVjdG9yJylcbiAgLCBhc2FwICAgICAgID0gcmVxdWlyZSgnLi8kLm1pY3JvdGFzaycpXG4gICwgUFJPTUlTRSAgICA9ICdQcm9taXNlJ1xuICAsIHByb2Nlc3MgICAgPSBnbG9iYWwucHJvY2Vzc1xuICAsIGlzTm9kZSAgICAgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJ1xuICAsIFAgICAgICAgICAgPSBnbG9iYWxbUFJPTUlTRV1cbiAgLCBXcmFwcGVyO1xuXG52YXIgdGVzdFJlc29sdmUgPSBmdW5jdGlvbihzdWIpe1xuICB2YXIgdGVzdCA9IG5ldyBQKGZ1bmN0aW9uKCl7fSk7XG4gIGlmKHN1Yil0ZXN0LmNvbnN0cnVjdG9yID0gT2JqZWN0O1xuICByZXR1cm4gUC5yZXNvbHZlKHRlc3QpID09PSB0ZXN0O1xufTtcblxudmFyIFVTRV9OQVRJVkUgPSBmdW5jdGlvbigpe1xuICB2YXIgd29ya3MgPSBmYWxzZTtcbiAgZnVuY3Rpb24gUDIoeCl7XG4gICAgdmFyIHNlbGYgPSBuZXcgUCh4KTtcbiAgICBzZXRQcm90byhzZWxmLCBQMi5wcm90b3R5cGUpO1xuICAgIHJldHVybiBzZWxmO1xuICB9XG4gIHRyeSB7XG4gICAgd29ya3MgPSBQICYmIFAucmVzb2x2ZSAmJiB0ZXN0UmVzb2x2ZSgpO1xuICAgIHNldFByb3RvKFAyLCBQKTtcbiAgICBQMi5wcm90b3R5cGUgPSAkLmNyZWF0ZShQLnByb3RvdHlwZSwge2NvbnN0cnVjdG9yOiB7dmFsdWU6IFAyfX0pO1xuICAgIC8vIGFjdHVhbCBGaXJlZm94IGhhcyBicm9rZW4gc3ViY2xhc3Mgc3VwcG9ydCwgdGVzdCB0aGF0XG4gICAgaWYoIShQMi5yZXNvbHZlKDUpLnRoZW4oZnVuY3Rpb24oKXt9KSBpbnN0YW5jZW9mIFAyKSl7XG4gICAgICB3b3JrcyA9IGZhbHNlO1xuICAgIH1cbiAgICAvLyBhY3R1YWwgVjggYnVnLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDE2MlxuICAgIGlmKHdvcmtzICYmIHJlcXVpcmUoJy4vJC5kZXNjcmlwdG9ycycpKXtcbiAgICAgIHZhciB0aGVuYWJsZVRoZW5Hb3R0ZW4gPSBmYWxzZTtcbiAgICAgIFAucmVzb2x2ZSgkLnNldERlc2Moe30sICd0aGVuJywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCl7IHRoZW5hYmxlVGhlbkdvdHRlbiA9IHRydWU7IH1cbiAgICAgIH0pKTtcbiAgICAgIHdvcmtzID0gdGhlbmFibGVUaGVuR290dGVuO1xuICAgIH1cbiAgfSBjYXRjaChlKXsgd29ya3MgPSBmYWxzZTsgfVxuICByZXR1cm4gd29ya3M7XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBzYW1lQ29uc3RydWN0b3IgPSBmdW5jdGlvbihhLCBiKXtcbiAgLy8gbGlicmFyeSB3cmFwcGVyIHNwZWNpYWwgY2FzZVxuICBpZihMSUJSQVJZICYmIGEgPT09IFAgJiYgYiA9PT0gV3JhcHBlcilyZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHNhbWUoYSwgYik7XG59O1xudmFyIGdldENvbnN0cnVjdG9yID0gZnVuY3Rpb24oQyl7XG4gIHZhciBTID0gYW5PYmplY3QoQylbU1BFQ0lFU107XG4gIHJldHVybiBTICE9IHVuZGVmaW5lZCA/IFMgOiBDO1xufTtcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKEMpe1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbigkJHJlc29sdmUsICQkcmVqZWN0KXtcbiAgICBpZihyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ICA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpLFxuICB0aGlzLnJlamVjdCAgPSBhRnVuY3Rpb24ocmVqZWN0KVxufTtcbnZhciBwZXJmb3JtID0gZnVuY3Rpb24oZXhlYyl7XG4gIHRyeSB7XG4gICAgZXhlYygpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB7ZXJyb3I6IGV9O1xuICB9XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uKHJlY29yZCwgaXNSZWplY3Qpe1xuICBpZihyZWNvcmQubilyZXR1cm47XG4gIHJlY29yZC5uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcmVjb3JkLmM7XG4gIGFzYXAoZnVuY3Rpb24oKXtcbiAgICB2YXIgdmFsdWUgPSByZWNvcmQudlxuICAgICAgLCBvayAgICA9IHJlY29yZC5zID09IDFcbiAgICAgICwgaSAgICAgPSAwO1xuICAgIHZhciBydW4gPSBmdW5jdGlvbihyZWFjdGlvbil7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsXG4gICAgICAgICwgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmVcbiAgICAgICAgLCByZWplY3QgID0gcmVhY3Rpb24ucmVqZWN0XG4gICAgICAgICwgcmVzdWx0LCB0aGVuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYoaGFuZGxlcil7XG4gICAgICAgICAgaWYoIW9rKXJlY29yZC5oID0gdHJ1ZTtcbiAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyID09PSB0cnVlID8gdmFsdWUgOiBoYW5kbGVyKHZhbHVlKTtcbiAgICAgICAgICBpZihyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2Upe1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSl7XG4gICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUoY2hhaW4ubGVuZ3RoID4gaSlydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgY2hhaW4ubGVuZ3RoID0gMDtcbiAgICByZWNvcmQubiA9IGZhbHNlO1xuICAgIGlmKGlzUmVqZWN0KXNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHZhciBwcm9taXNlID0gcmVjb3JkLnBcbiAgICAgICAgLCBoYW5kbGVyLCBjb25zb2xlO1xuICAgICAgaWYoaXNVbmhhbmRsZWQocHJvbWlzZSkpe1xuICAgICAgICBpZihpc05vZGUpe1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgaWYoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbil7XG4gICAgICAgICAgaGFuZGxlcih7cHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZX0pO1xuICAgICAgICB9IGVsc2UgaWYoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcil7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IHJlY29yZC5hID0gdW5kZWZpbmVkO1xuICAgIH0sIDEpO1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbihwcm9taXNlKXtcbiAgdmFyIHJlY29yZCA9IHByb21pc2UuX2RcbiAgICAsIGNoYWluICA9IHJlY29yZC5hIHx8IHJlY29yZC5jXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCByZWFjdGlvbjtcbiAgaWYocmVjb3JkLmgpcmV0dXJuIGZhbHNlO1xuICB3aGlsZShjaGFpbi5sZW5ndGggPiBpKXtcbiAgICByZWFjdGlvbiA9IGNoYWluW2krK107XG4gICAgaWYocmVhY3Rpb24uZmFpbCB8fCAhaXNVbmhhbmRsZWQocmVhY3Rpb24ucHJvbWlzZSkpcmV0dXJuIGZhbHNlO1xuICB9IHJldHVybiB0cnVlO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24odmFsdWUpe1xuICB2YXIgcmVjb3JkID0gdGhpcztcbiAgaWYocmVjb3JkLmQpcmV0dXJuO1xuICByZWNvcmQuZCA9IHRydWU7XG4gIHJlY29yZCA9IHJlY29yZC5yIHx8IHJlY29yZDsgLy8gdW53cmFwXG4gIHJlY29yZC52ID0gdmFsdWU7XG4gIHJlY29yZC5zID0gMjtcbiAgcmVjb3JkLmEgPSByZWNvcmQuYy5zbGljZSgpO1xuICBub3RpZnkocmVjb3JkLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbih2YWx1ZSl7XG4gIHZhciByZWNvcmQgPSB0aGlzXG4gICAgLCB0aGVuO1xuICBpZihyZWNvcmQuZClyZXR1cm47XG4gIHJlY29yZC5kID0gdHJ1ZTtcbiAgcmVjb3JkID0gcmVjb3JkLnIgfHwgcmVjb3JkOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZihyZWNvcmQucCA9PT0gdmFsdWUpdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKXtcbiAgICAgIGFzYXAoZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7cjogcmVjb3JkLCBkOiBmYWxzZX07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjb3JkLnYgPSB2YWx1ZTtcbiAgICAgIHJlY29yZC5zID0gMTtcbiAgICAgIG5vdGlmeShyZWNvcmQsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2goZSl7XG4gICAgJHJlamVjdC5jYWxsKHtyOiByZWNvcmQsIGQ6IGZhbHNlfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmKCFVU0VfTkFUSVZFKXtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgUCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3Ipe1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgdmFyIHJlY29yZCA9IHRoaXMuX2QgPSB7XG4gICAgICBwOiBzdHJpY3ROZXcodGhpcywgUCwgUFJPTUlTRSksICAgICAgICAgLy8gPC0gcHJvbWlzZVxuICAgICAgYzogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgICAgYTogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgICBzOiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICAgIGQ6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBkb25lXG4gICAgICB2OiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcbiAgICAgIGg6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBoYW5kbGVkIHJlamVjdGlvblxuICAgICAgbjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgcmVjb3JkLCAxKSwgY3R4KCRyZWplY3QsIHJlY29yZCwgMSkpO1xuICAgIH0gY2F0Y2goZXJyKXtcbiAgICAgICRyZWplY3QuY2FsbChyZWNvcmQsIGVycik7XG4gICAgfVxuICB9O1xuICByZXF1aXJlKCcuLyQucmVkZWZpbmUtYWxsJykoUC5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpe1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3IFByb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBQKSlcbiAgICAgICAgLCBwcm9taXNlICA9IHJlYWN0aW9uLnByb21pc2VcbiAgICAgICAgLCByZWNvcmQgICA9IHRoaXMuX2Q7XG4gICAgICByZWFjdGlvbi5vayAgID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVjb3JkLmMucHVzaChyZWFjdGlvbik7XG4gICAgICBpZihyZWNvcmQuYSlyZWNvcmQuYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmKHJlY29yZC5zKW5vdGlmeShyZWNvcmQsIGZhbHNlKTtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7UHJvbWlzZTogUH0pO1xucmVxdWlyZSgnLi8kLnNldC10by1zdHJpbmctdGFnJykoUCwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuLyQuc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuLyQuY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpe1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3IFByb21pc2VDYXBhYmlsaXR5KHRoaXMpXG4gICAgICAsICQkcmVqZWN0ICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8IHRlc3RSZXNvbHZlKHRydWUpKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KXtcbiAgICAvLyBpbnN0YW5jZW9mIGluc3RlYWQgb2YgaW50ZXJuYWwgc2xvdCBjaGVjayBiZWNhdXNlIHdlIHNob3VsZCBmaXggaXQgd2l0aG91dCByZXBsYWNlbWVudCBuYXRpdmUgUHJvbWlzZSBjb3JlXG4gICAgaWYoeCBpbnN0YW5jZW9mIFAgJiYgc2FtZUNvbnN0cnVjdG9yKHguY29uc3RydWN0b3IsIHRoaXMpKXJldHVybiB4O1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3IFByb21pc2VDYXBhYmlsaXR5KHRoaXMpXG4gICAgICAsICQkcmVzb2x2ZSAgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgJCRyZXNvbHZlKHgpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi8kLml0ZXItZGV0ZWN0JykoZnVuY3Rpb24oaXRlcil7XG4gIFAuYWxsKGl0ZXIpWydjYXRjaCddKGZ1bmN0aW9uKCl7fSk7XG59KSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjEgUHJvbWlzZS5hbGwoaXRlcmFibGUpXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKXtcbiAgICB2YXIgQyAgICAgICAgICA9IGdldENvbnN0cnVjdG9yKHRoaXMpXG4gICAgICAsIGNhcGFiaWxpdHkgPSBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgICwgcmVzb2x2ZSAgICA9IGNhcGFiaWxpdHkucmVzb2x2ZVxuICAgICAgLCByZWplY3QgICAgID0gY2FwYWJpbGl0eS5yZWplY3RcbiAgICAgICwgdmFsdWVzICAgICA9IFtdO1xuICAgIHZhciBhYnJ1cHQgPSBwZXJmb3JtKGZ1bmN0aW9uKCl7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIHZhbHVlcy5wdXNoLCB2YWx1ZXMpO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHZhbHVlcy5sZW5ndGhcbiAgICAgICAgLCByZXN1bHRzICAgPSBBcnJheShyZW1haW5pbmcpO1xuICAgICAgaWYocmVtYWluaW5nKSQuZWFjaC5jYWxsKHZhbHVlcywgZnVuY3Rpb24ocHJvbWlzZSwgaW5kZXgpe1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihmdW5jdGlvbih2YWx1ZSl7XG4gICAgICAgICAgaWYoYWxyZWFkeUNhbGxlZClyZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgcmVzdWx0c1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHJlc3VsdHMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICBlbHNlIHJlc29sdmUocmVzdWx0cyk7XG4gICAgfSk7XG4gICAgaWYoYWJydXB0KXJlamVjdChhYnJ1cHQuZXJyb3IpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSl7XG4gICAgdmFyIEMgICAgICAgICAgPSBnZXRDb25zdHJ1Y3Rvcih0aGlzKVxuICAgICAgLCBjYXBhYmlsaXR5ID0gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICAsIHJlamVjdCAgICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbihwcm9taXNlKXtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYoYWJydXB0KXJlamVjdChhYnJ1cHQuZXJyb3IpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pOyIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuLyQuY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gMjMuMiBTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi8kLmNvbGxlY3Rpb24nKSgnU2V0JywgZnVuY3Rpb24oZ2V0KXtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKXtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih0aGlzLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZyk7IiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCAgPSByZXF1aXJlKCcuLyQuc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vJC5pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uKGl0ZXJhdGVkKXtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24oKXtcbiAgdmFyIE8gICAgID0gdGhpcy5fdFxuICAgICwgaW5kZXggPSB0aGlzLl9pXG4gICAgLCBwb2ludDtcbiAgaWYoaW5kZXggPj0gTy5sZW5ndGgpcmV0dXJuIHt2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHt2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlfTtcbn0pOyIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciAkICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vJCcpXG4gICwgZ2xvYmFsICAgICAgICAgPSByZXF1aXJlKCcuLyQuZ2xvYmFsJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5oYXMnKVxuICAsIERFU0NSSVBUT1JTICAgID0gcmVxdWlyZSgnLi8kLmRlc2NyaXB0b3JzJylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vJC5leHBvcnQnKVxuICAsIHJlZGVmaW5lICAgICAgID0gcmVxdWlyZSgnLi8kLnJlZGVmaW5lJylcbiAgLCAkZmFpbHMgICAgICAgICA9IHJlcXVpcmUoJy4vJC5mYWlscycpXG4gICwgc2hhcmVkICAgICAgICAgPSByZXF1aXJlKCcuLyQuc2hhcmVkJylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vJC5zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgdWlkICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQudWlkJylcbiAgLCB3a3MgICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC53a3MnKVxuICAsIGtleU9mICAgICAgICAgID0gcmVxdWlyZSgnLi8kLmtleW9mJylcbiAgLCAkbmFtZXMgICAgICAgICA9IHJlcXVpcmUoJy4vJC5nZXQtbmFtZXMnKVxuICAsIGVudW1LZXlzICAgICAgID0gcmVxdWlyZSgnLi8kLmVudW0ta2V5cycpXG4gICwgaXNBcnJheSAgICAgICAgPSByZXF1aXJlKCcuLyQuaXMtYXJyYXknKVxuICAsIGFuT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi8kLmFuLW9iamVjdCcpXG4gICwgdG9JT2JqZWN0ICAgICAgPSByZXF1aXJlKCcuLyQudG8taW9iamVjdCcpXG4gICwgY3JlYXRlRGVzYyAgICAgPSByZXF1aXJlKCcuLyQucHJvcGVydHktZGVzYycpXG4gICwgZ2V0RGVzYyAgICAgICAgPSAkLmdldERlc2NcbiAgLCBzZXREZXNjICAgICAgICA9ICQuc2V0RGVzY1xuICAsIF9jcmVhdGUgICAgICAgID0gJC5jcmVhdGVcbiAgLCBnZXROYW1lcyAgICAgICA9ICRuYW1lcy5nZXRcbiAgLCAkU3ltYm9sICAgICAgICA9IGdsb2JhbC5TeW1ib2xcbiAgLCAkSlNPTiAgICAgICAgICA9IGdsb2JhbC5KU09OXG4gICwgX3N0cmluZ2lmeSAgICAgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnlcbiAgLCBzZXR0ZXIgICAgICAgICA9IGZhbHNlXG4gICwgSElEREVOICAgICAgICAgPSB3a3MoJ19oaWRkZW4nKVxuICAsIGlzRW51bSAgICAgICAgID0gJC5pc0VudW1cbiAgLCBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5JylcbiAgLCBBbGxTeW1ib2xzICAgICA9IHNoYXJlZCgnc3ltYm9scycpXG4gICwgdXNlTmF0aXZlICAgICAgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nXG4gICwgT2JqZWN0UHJvdG8gICAgPSBPYmplY3QucHJvdG90eXBlO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBfY3JlYXRlKHNldERlc2Moe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24oKXsgcmV0dXJuIHNldERlc2ModGhpcywgJ2EnLCB7dmFsdWU6IDd9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uKGl0LCBrZXksIEQpe1xuICB2YXIgcHJvdG9EZXNjID0gZ2V0RGVzYyhPYmplY3RQcm90bywga2V5KTtcbiAgaWYocHJvdG9EZXNjKWRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBzZXREZXNjKGl0LCBrZXksIEQpO1xuICBpZihwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKXNldERlc2MoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBzZXREZXNjO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uKHRhZyl7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2wucHJvdG90eXBlKTtcbiAgc3ltLl9rID0gdGFnO1xuICBERVNDUklQVE9SUyAmJiBzZXR0ZXIgJiYgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHNldDogZnVuY3Rpb24odmFsdWUpe1xuICAgICAgaWYoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSl0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpe1xuICBpZihEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpKXtcbiAgICBpZighRC5lbnVtZXJhYmxlKXtcbiAgICAgIGlmKCFoYXMoaXQsIEhJRERFTikpc2V0RGVzYyhpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZihoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKWl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwge2VudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gc2V0RGVzYyhpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKXtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpXG4gICAgLCBpICAgID0gMFxuICAgICwgbCA9IGtleXMubGVuZ3RoXG4gICAgLCBrZXk7XG4gIHdoaWxlKGwgPiBpKSRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApe1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSl7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5KTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XVxuICAgID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSl7XG4gIHZhciBEID0gZ2V0RGVzYyhpdCA9IHRvSU9iamVjdChpdCksIGtleSk7XG4gIGlmKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSlELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KXtcbiAgdmFyIG5hbWVzICA9IGdldE5hbWVzKHRvSU9iamVjdChpdCkpXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwgaSAgICAgID0gMFxuICAgICwga2V5O1xuICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKWlmKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTilyZXN1bHQucHVzaChrZXkpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KXtcbiAgdmFyIG5hbWVzICA9IGdldE5hbWVzKHRvSU9iamVjdChpdCkpXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwgaSAgICAgID0gMFxuICAgICwga2V5O1xuICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKWlmKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSlyZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkc3RyaW5naWZ5ID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0KXtcbiAgaWYoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gIHZhciBhcmdzID0gW2l0XVxuICAgICwgaSAgICA9IDFcbiAgICAsICQkICAgPSBhcmd1bWVudHNcbiAgICAsIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gIHdoaWxlKCQkLmxlbmd0aCA+IGkpYXJncy5wdXNoKCQkW2krK10pO1xuICByZXBsYWNlciA9IGFyZ3NbMV07XG4gIGlmKHR5cGVvZiByZXBsYWNlciA9PSAnZnVuY3Rpb24nKSRyZXBsYWNlciA9IHJlcGxhY2VyO1xuICBpZigkcmVwbGFjZXIgfHwgIWlzQXJyYXkocmVwbGFjZXIpKXJlcGxhY2VyID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG4gICAgaWYoJHJlcGxhY2VyKXZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgaWYoIWlzU3ltYm9sKHZhbHVlKSlyZXR1cm4gdmFsdWU7XG4gIH07XG4gIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xufTtcbnZhciBidWdneUpTT04gPSAkZmFpbHMoZnVuY3Rpb24oKXtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoe2E6IFN9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSk7XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYoIXVzZU5hdGl2ZSl7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKXtcbiAgICBpZihpc1N5bWJvbCh0aGlzKSl0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHJldHVybiB3cmFwKHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCkpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sLnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKXtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgaXNTeW1ib2wgPSBmdW5jdGlvbihpdCl7XG4gICAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbiAgfTtcblxuICAkLmNyZWF0ZSAgICAgPSAkY3JlYXRlO1xuICAkLmlzRW51bSAgICAgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gICQuZ2V0RGVzYyAgICA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICQuc2V0RGVzYyAgICA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgJC5zZXREZXNjcyAgID0gJGRlZmluZVByb3BlcnRpZXM7XG4gICQuZ2V0TmFtZXMgICA9ICRuYW1lcy5nZXQgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgJC5nZXRTeW1ib2xzID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZihERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi8kLmxpYnJhcnknKSl7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cbn1cblxudmFyIHN5bWJvbFN0YXRpY3MgPSB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24oa2V5KXtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKGtleSl7XG4gICAgcmV0dXJuIGtleU9mKFN5bWJvbFJlZ2lzdHJ5LCBrZXkpO1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uKCl7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24oKXsgc2V0dGVyID0gZmFsc2U7IH1cbn07XG4vLyAxOS40LjIuMiBTeW1ib2wuaGFzSW5zdGFuY2Vcbi8vIDE5LjQuMi4zIFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVcbi8vIDE5LjQuMi40IFN5bWJvbC5pdGVyYXRvclxuLy8gMTkuNC4yLjYgU3ltYm9sLm1hdGNoXG4vLyAxOS40LjIuOCBTeW1ib2wucmVwbGFjZVxuLy8gMTkuNC4yLjkgU3ltYm9sLnNlYXJjaFxuLy8gMTkuNC4yLjEwIFN5bWJvbC5zcGVjaWVzXG4vLyAxOS40LjIuMTEgU3ltYm9sLnNwbGl0XG4vLyAxOS40LjIuMTIgU3ltYm9sLnRvUHJpbWl0aXZlXG4vLyAxOS40LjIuMTMgU3ltYm9sLnRvU3RyaW5nVGFnXG4vLyAxOS40LjIuMTQgU3ltYm9sLnVuc2NvcGFibGVzXG4kLmVhY2guY2FsbCgoXG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsJyArXG4gICdzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBmdW5jdGlvbihpdCl7XG4gIHZhciBzeW0gPSB3a3MoaXQpO1xuICBzeW1ib2xTdGF0aWNzW2l0XSA9IHVzZU5hdGl2ZSA/IHN5bSA6IHdyYXAoc3ltKTtcbn0pO1xuXG5zZXR0ZXIgPSB0cnVlO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVywge1N5bWJvbDogJFN5bWJvbH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N5bWJvbCcsIHN5bWJvbFN0YXRpY3MpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICF1c2VOYXRpdmUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCF1c2VOYXRpdmUgfHwgYnVnZ3lKU09OKSwgJ0pTT04nLCB7c3RyaW5naWZ5OiAkc3RyaW5naWZ5fSk7XG5cbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7IiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgID0gcmVxdWlyZSgnLi8kLmV4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ01hcCcsIHt0b0pTT046IHJlcXVpcmUoJy4vJC5jb2xsZWN0aW9uLXRvLWpzb24nKSgnTWFwJyl9KTsiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCAgPSByZXF1aXJlKCcuLyQuZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU2V0Jywge3RvSlNPTjogcmVxdWlyZSgnLi8kLmNvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKX0pOyIsInJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi8kLml0ZXJhdG9ycycpO1xuSXRlcmF0b3JzLk5vZGVMaXN0ID0gSXRlcmF0b3JzLkhUTUxDb2xsZWN0aW9uID0gSXRlcmF0b3JzLkFycmF5OyIsIi8vIChjKSBEZWFuIE1jTmFtZWUgPGRlYW5AZ21haWwuY29tPiwgMjAxMi5cbi8vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGVhbm0vY3NzLWNvbG9yLXBhcnNlci1qc1xuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTXG4vLyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvXG52YXIga0NTU0NvbG9yVGFibGUgPSB7XG4gIFwidHJhbnNwYXJlbnRcIjogWzAsMCwwLDBdLCBcImFsaWNlYmx1ZVwiOiBbMjQwLDI0OCwyNTUsMV0sXG4gIFwiYW50aXF1ZXdoaXRlXCI6IFsyNTAsMjM1LDIxNSwxXSwgXCJhcXVhXCI6IFswLDI1NSwyNTUsMV0sXG4gIFwiYXF1YW1hcmluZVwiOiBbMTI3LDI1NSwyMTIsMV0sIFwiYXp1cmVcIjogWzI0MCwyNTUsMjU1LDFdLFxuICBcImJlaWdlXCI6IFsyNDUsMjQ1LDIyMCwxXSwgXCJiaXNxdWVcIjogWzI1NSwyMjgsMTk2LDFdLFxuICBcImJsYWNrXCI6IFswLDAsMCwxXSwgXCJibGFuY2hlZGFsbW9uZFwiOiBbMjU1LDIzNSwyMDUsMV0sXG4gIFwiYmx1ZVwiOiBbMCwwLDI1NSwxXSwgXCJibHVldmlvbGV0XCI6IFsxMzgsNDMsMjI2LDFdLFxuICBcImJyb3duXCI6IFsxNjUsNDIsNDIsMV0sIFwiYnVybHl3b29kXCI6IFsyMjIsMTg0LDEzNSwxXSxcbiAgXCJjYWRldGJsdWVcIjogWzk1LDE1OCwxNjAsMV0sIFwiY2hhcnRyZXVzZVwiOiBbMTI3LDI1NSwwLDFdLFxuICBcImNob2NvbGF0ZVwiOiBbMjEwLDEwNSwzMCwxXSwgXCJjb3JhbFwiOiBbMjU1LDEyNyw4MCwxXSxcbiAgXCJjb3JuZmxvd2VyYmx1ZVwiOiBbMTAwLDE0OSwyMzcsMV0sIFwiY29ybnNpbGtcIjogWzI1NSwyNDgsMjIwLDFdLFxuICBcImNyaW1zb25cIjogWzIyMCwyMCw2MCwxXSwgXCJjeWFuXCI6IFswLDI1NSwyNTUsMV0sXG4gIFwiZGFya2JsdWVcIjogWzAsMCwxMzksMV0sIFwiZGFya2N5YW5cIjogWzAsMTM5LDEzOSwxXSxcbiAgXCJkYXJrZ29sZGVucm9kXCI6IFsxODQsMTM0LDExLDFdLCBcImRhcmtncmF5XCI6IFsxNjksMTY5LDE2OSwxXSxcbiAgXCJkYXJrZ3JlZW5cIjogWzAsMTAwLDAsMV0sIFwiZGFya2dyZXlcIjogWzE2OSwxNjksMTY5LDFdLFxuICBcImRhcmtraGFraVwiOiBbMTg5LDE4MywxMDcsMV0sIFwiZGFya21hZ2VudGFcIjogWzEzOSwwLDEzOSwxXSxcbiAgXCJkYXJrb2xpdmVncmVlblwiOiBbODUsMTA3LDQ3LDFdLCBcImRhcmtvcmFuZ2VcIjogWzI1NSwxNDAsMCwxXSxcbiAgXCJkYXJrb3JjaGlkXCI6IFsxNTMsNTAsMjA0LDFdLCBcImRhcmtyZWRcIjogWzEzOSwwLDAsMV0sXG4gIFwiZGFya3NhbG1vblwiOiBbMjMzLDE1MCwxMjIsMV0sIFwiZGFya3NlYWdyZWVuXCI6IFsxNDMsMTg4LDE0MywxXSxcbiAgXCJkYXJrc2xhdGVibHVlXCI6IFs3Miw2MSwxMzksMV0sIFwiZGFya3NsYXRlZ3JheVwiOiBbNDcsNzksNzksMV0sXG4gIFwiZGFya3NsYXRlZ3JleVwiOiBbNDcsNzksNzksMV0sIFwiZGFya3R1cnF1b2lzZVwiOiBbMCwyMDYsMjA5LDFdLFxuICBcImRhcmt2aW9sZXRcIjogWzE0OCwwLDIxMSwxXSwgXCJkZWVwcGlua1wiOiBbMjU1LDIwLDE0NywxXSxcbiAgXCJkZWVwc2t5Ymx1ZVwiOiBbMCwxOTEsMjU1LDFdLCBcImRpbWdyYXlcIjogWzEwNSwxMDUsMTA1LDFdLFxuICBcImRpbWdyZXlcIjogWzEwNSwxMDUsMTA1LDFdLCBcImRvZGdlcmJsdWVcIjogWzMwLDE0NCwyNTUsMV0sXG4gIFwiZmlyZWJyaWNrXCI6IFsxNzgsMzQsMzQsMV0sIFwiZmxvcmFsd2hpdGVcIjogWzI1NSwyNTAsMjQwLDFdLFxuICBcImZvcmVzdGdyZWVuXCI6IFszNCwxMzksMzQsMV0sIFwiZnVjaHNpYVwiOiBbMjU1LDAsMjU1LDFdLFxuICBcImdhaW5zYm9yb1wiOiBbMjIwLDIyMCwyMjAsMV0sIFwiZ2hvc3R3aGl0ZVwiOiBbMjQ4LDI0OCwyNTUsMV0sXG4gIFwiZ29sZFwiOiBbMjU1LDIxNSwwLDFdLCBcImdvbGRlbnJvZFwiOiBbMjE4LDE2NSwzMiwxXSxcbiAgXCJncmF5XCI6IFsxMjgsMTI4LDEyOCwxXSwgXCJncmVlblwiOiBbMCwxMjgsMCwxXSxcbiAgXCJncmVlbnllbGxvd1wiOiBbMTczLDI1NSw0NywxXSwgXCJncmV5XCI6IFsxMjgsMTI4LDEyOCwxXSxcbiAgXCJob25leWRld1wiOiBbMjQwLDI1NSwyNDAsMV0sIFwiaG90cGlua1wiOiBbMjU1LDEwNSwxODAsMV0sXG4gIFwiaW5kaWFucmVkXCI6IFsyMDUsOTIsOTIsMV0sIFwiaW5kaWdvXCI6IFs3NSwwLDEzMCwxXSxcbiAgXCJpdm9yeVwiOiBbMjU1LDI1NSwyNDAsMV0sIFwia2hha2lcIjogWzI0MCwyMzAsMTQwLDFdLFxuICBcImxhdmVuZGVyXCI6IFsyMzAsMjMwLDI1MCwxXSwgXCJsYXZlbmRlcmJsdXNoXCI6IFsyNTUsMjQwLDI0NSwxXSxcbiAgXCJsYXduZ3JlZW5cIjogWzEyNCwyNTIsMCwxXSwgXCJsZW1vbmNoaWZmb25cIjogWzI1NSwyNTAsMjA1LDFdLFxuICBcImxpZ2h0Ymx1ZVwiOiBbMTczLDIxNiwyMzAsMV0sIFwibGlnaHRjb3JhbFwiOiBbMjQwLDEyOCwxMjgsMV0sXG4gIFwibGlnaHRjeWFuXCI6IFsyMjQsMjU1LDI1NSwxXSwgXCJsaWdodGdvbGRlbnJvZHllbGxvd1wiOiBbMjUwLDI1MCwyMTAsMV0sXG4gIFwibGlnaHRncmF5XCI6IFsyMTEsMjExLDIxMSwxXSwgXCJsaWdodGdyZWVuXCI6IFsxNDQsMjM4LDE0NCwxXSxcbiAgXCJsaWdodGdyZXlcIjogWzIxMSwyMTEsMjExLDFdLCBcImxpZ2h0cGlua1wiOiBbMjU1LDE4MiwxOTMsMV0sXG4gIFwibGlnaHRzYWxtb25cIjogWzI1NSwxNjAsMTIyLDFdLCBcImxpZ2h0c2VhZ3JlZW5cIjogWzMyLDE3OCwxNzAsMV0sXG4gIFwibGlnaHRza3libHVlXCI6IFsxMzUsMjA2LDI1MCwxXSwgXCJsaWdodHNsYXRlZ3JheVwiOiBbMTE5LDEzNiwxNTMsMV0sXG4gIFwibGlnaHRzbGF0ZWdyZXlcIjogWzExOSwxMzYsMTUzLDFdLCBcImxpZ2h0c3RlZWxibHVlXCI6IFsxNzYsMTk2LDIyMiwxXSxcbiAgXCJsaWdodHllbGxvd1wiOiBbMjU1LDI1NSwyMjQsMV0sIFwibGltZVwiOiBbMCwyNTUsMCwxXSxcbiAgXCJsaW1lZ3JlZW5cIjogWzUwLDIwNSw1MCwxXSwgXCJsaW5lblwiOiBbMjUwLDI0MCwyMzAsMV0sXG4gIFwibWFnZW50YVwiOiBbMjU1LDAsMjU1LDFdLCBcIm1hcm9vblwiOiBbMTI4LDAsMCwxXSxcbiAgXCJtZWRpdW1hcXVhbWFyaW5lXCI6IFsxMDIsMjA1LDE3MCwxXSwgXCJtZWRpdW1ibHVlXCI6IFswLDAsMjA1LDFdLFxuICBcIm1lZGl1bW9yY2hpZFwiOiBbMTg2LDg1LDIxMSwxXSwgXCJtZWRpdW1wdXJwbGVcIjogWzE0NywxMTIsMjE5LDFdLFxuICBcIm1lZGl1bXNlYWdyZWVuXCI6IFs2MCwxNzksMTEzLDFdLCBcIm1lZGl1bXNsYXRlYmx1ZVwiOiBbMTIzLDEwNCwyMzgsMV0sXG4gIFwibWVkaXVtc3ByaW5nZ3JlZW5cIjogWzAsMjUwLDE1NCwxXSwgXCJtZWRpdW10dXJxdW9pc2VcIjogWzcyLDIwOSwyMDQsMV0sXG4gIFwibWVkaXVtdmlvbGV0cmVkXCI6IFsxOTksMjEsMTMzLDFdLCBcIm1pZG5pZ2h0Ymx1ZVwiOiBbMjUsMjUsMTEyLDFdLFxuICBcIm1pbnRjcmVhbVwiOiBbMjQ1LDI1NSwyNTAsMV0sIFwibWlzdHlyb3NlXCI6IFsyNTUsMjI4LDIyNSwxXSxcbiAgXCJtb2NjYXNpblwiOiBbMjU1LDIyOCwxODEsMV0sIFwibmF2YWpvd2hpdGVcIjogWzI1NSwyMjIsMTczLDFdLFxuICBcIm5hdnlcIjogWzAsMCwxMjgsMV0sIFwib2xkbGFjZVwiOiBbMjUzLDI0NSwyMzAsMV0sXG4gIFwib2xpdmVcIjogWzEyOCwxMjgsMCwxXSwgXCJvbGl2ZWRyYWJcIjogWzEwNywxNDIsMzUsMV0sXG4gIFwib3JhbmdlXCI6IFsyNTUsMTY1LDAsMV0sIFwib3JhbmdlcmVkXCI6IFsyNTUsNjksMCwxXSxcbiAgXCJvcmNoaWRcIjogWzIxOCwxMTIsMjE0LDFdLCBcInBhbGVnb2xkZW5yb2RcIjogWzIzOCwyMzIsMTcwLDFdLFxuICBcInBhbGVncmVlblwiOiBbMTUyLDI1MSwxNTIsMV0sIFwicGFsZXR1cnF1b2lzZVwiOiBbMTc1LDIzOCwyMzgsMV0sXG4gIFwicGFsZXZpb2xldHJlZFwiOiBbMjE5LDExMiwxNDcsMV0sIFwicGFwYXlhd2hpcFwiOiBbMjU1LDIzOSwyMTMsMV0sXG4gIFwicGVhY2hwdWZmXCI6IFsyNTUsMjE4LDE4NSwxXSwgXCJwZXJ1XCI6IFsyMDUsMTMzLDYzLDFdLFxuICBcInBpbmtcIjogWzI1NSwxOTIsMjAzLDFdLCBcInBsdW1cIjogWzIyMSwxNjAsMjIxLDFdLFxuICBcInBvd2RlcmJsdWVcIjogWzE3NiwyMjQsMjMwLDFdLCBcInB1cnBsZVwiOiBbMTI4LDAsMTI4LDFdLFxuICBcInJlZFwiOiBbMjU1LDAsMCwxXSwgXCJyb3N5YnJvd25cIjogWzE4OCwxNDMsMTQzLDFdLFxuICBcInJveWFsYmx1ZVwiOiBbNjUsMTA1LDIyNSwxXSwgXCJzYWRkbGVicm93blwiOiBbMTM5LDY5LDE5LDFdLFxuICBcInNhbG1vblwiOiBbMjUwLDEyOCwxMTQsMV0sIFwic2FuZHlicm93blwiOiBbMjQ0LDE2NCw5NiwxXSxcbiAgXCJzZWFncmVlblwiOiBbNDYsMTM5LDg3LDFdLCBcInNlYXNoZWxsXCI6IFsyNTUsMjQ1LDIzOCwxXSxcbiAgXCJzaWVubmFcIjogWzE2MCw4Miw0NSwxXSwgXCJzaWx2ZXJcIjogWzE5MiwxOTIsMTkyLDFdLFxuICBcInNreWJsdWVcIjogWzEzNSwyMDYsMjM1LDFdLCBcInNsYXRlYmx1ZVwiOiBbMTA2LDkwLDIwNSwxXSxcbiAgXCJzbGF0ZWdyYXlcIjogWzExMiwxMjgsMTQ0LDFdLCBcInNsYXRlZ3JleVwiOiBbMTEyLDEyOCwxNDQsMV0sXG4gIFwic25vd1wiOiBbMjU1LDI1MCwyNTAsMV0sIFwic3ByaW5nZ3JlZW5cIjogWzAsMjU1LDEyNywxXSxcbiAgXCJzdGVlbGJsdWVcIjogWzcwLDEzMCwxODAsMV0sIFwidGFuXCI6IFsyMTAsMTgwLDE0MCwxXSxcbiAgXCJ0ZWFsXCI6IFswLDEyOCwxMjgsMV0sIFwidGhpc3RsZVwiOiBbMjE2LDE5MSwyMTYsMV0sXG4gIFwidG9tYXRvXCI6IFsyNTUsOTksNzEsMV0sIFwidHVycXVvaXNlXCI6IFs2NCwyMjQsMjA4LDFdLFxuICBcInZpb2xldFwiOiBbMjM4LDEzMCwyMzgsMV0sIFwid2hlYXRcIjogWzI0NSwyMjIsMTc5LDFdLFxuICBcIndoaXRlXCI6IFsyNTUsMjU1LDI1NSwxXSwgXCJ3aGl0ZXNtb2tlXCI6IFsyNDUsMjQ1LDI0NSwxXSxcbiAgXCJ5ZWxsb3dcIjogWzI1NSwyNTUsMCwxXSwgXCJ5ZWxsb3dncmVlblwiOiBbMTU0LDIwNSw1MCwxXX1cblxuZnVuY3Rpb24gY2xhbXBfY3NzX2J5dGUoaSkgeyAgLy8gQ2xhbXAgdG8gaW50ZWdlciAwIC4uIDI1NS5cbiAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cbiAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAyNTUgPyAyNTUgOiBpO1xufVxuXG5mdW5jdGlvbiBjbGFtcF9jc3NfZmxvYXQoZikgeyAgLy8gQ2xhbXAgdG8gZmxvYXQgMC4wIC4uIDEuMC5cbiAgcmV0dXJuIGYgPCAwID8gMCA6IGYgPiAxID8gMSA6IGY7XG59XG5cbmZ1bmN0aW9uIHBhcnNlX2Nzc19pbnQoc3RyKSB7ICAvLyBpbnQgb3IgcGVyY2VudGFnZS5cbiAgaWYgKHN0cltzdHIubGVuZ3RoIC0gMV0gPT09ICclJylcbiAgICByZXR1cm4gY2xhbXBfY3NzX2J5dGUocGFyc2VGbG9hdChzdHIpIC8gMTAwICogMjU1KTtcbiAgcmV0dXJuIGNsYW1wX2Nzc19ieXRlKHBhcnNlSW50KHN0cikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZV9jc3NfZmxvYXQoc3RyKSB7ICAvLyBmbG9hdCBvciBwZXJjZW50YWdlLlxuICBpZiAoc3RyW3N0ci5sZW5ndGggLSAxXSA9PT0gJyUnKVxuICAgIHJldHVybiBjbGFtcF9jc3NfZmxvYXQocGFyc2VGbG9hdChzdHIpIC8gMTAwKTtcbiAgcmV0dXJuIGNsYW1wX2Nzc19mbG9hdChwYXJzZUZsb2F0KHN0cikpO1xufVxuXG5mdW5jdGlvbiBjc3NfaHVlX3RvX3JnYihtMSwgbTIsIGgpIHtcbiAgaWYgKGggPCAwKSBoICs9IDE7XG4gIGVsc2UgaWYgKGggPiAxKSBoIC09IDE7XG5cbiAgaWYgKGggKiA2IDwgMSkgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogaCAqIDY7XG4gIGlmIChoICogMiA8IDEpIHJldHVybiBtMjtcbiAgaWYgKGggKiAzIDwgMikgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIvMyAtIGgpICogNjtcbiAgcmV0dXJuIG0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNTU0NvbG9yKGNzc19zdHIpIHtcbiAgLy8gUmVtb3ZlIGFsbCB3aGl0ZXNwYWNlLCBub3QgY29tcGxpYW50LCBidXQgc2hvdWxkIGp1c3QgYmUgbW9yZSBhY2NlcHRpbmcuXG4gIHZhciBzdHIgPSBjc3Nfc3RyLnJlcGxhY2UoLyAvZywgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gQ29sb3Iga2V5d29yZHMgKGFuZCB0cmFuc3BhcmVudCkgbG9va3VwLlxuICBpZiAoc3RyIGluIGtDU1NDb2xvclRhYmxlKSByZXR1cm4ga0NTU0NvbG9yVGFibGVbc3RyXS5zbGljZSgpOyAgLy8gZHVwLlxuXG4gIC8vICNhYmMgYW5kICNhYmMxMjMgc3ludGF4LlxuICBpZiAoc3RyWzBdID09PSAnIycpIHtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gNCkge1xuICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXG4gICAgICBpZiAoIShpdiA+PSAwICYmIGl2IDw9IDB4ZmZmKSkgcmV0dXJuIG51bGw7ICAvLyBDb3ZlcnMgTmFOLlxuICAgICAgcmV0dXJuIFsoKGl2ICYgMHhmMDApID4+IDQpIHwgKChpdiAmIDB4ZjAwKSA+PiA4KSxcbiAgICAgICAgICAgICAgKGl2ICYgMHhmMCkgfCAoKGl2ICYgMHhmMCkgPj4gNCksXG4gICAgICAgICAgICAgIChpdiAmIDB4ZikgfCAoKGl2ICYgMHhmKSA8PCA0KSxcbiAgICAgICAgICAgICAgMV07XG4gICAgfSBlbHNlIGlmIChzdHIubGVuZ3RoID09PSA3KSB7XG4gICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cbiAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmZmZmYpKSByZXR1cm4gbnVsbDsgIC8vIENvdmVycyBOYU4uXG4gICAgICByZXR1cm4gWyhpdiAmIDB4ZmYwMDAwKSA+PiAxNixcbiAgICAgICAgICAgICAgKGl2ICYgMHhmZjAwKSA+PiA4LFxuICAgICAgICAgICAgICBpdiAmIDB4ZmYsXG4gICAgICAgICAgICAgIDFdO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG9wID0gc3RyLmluZGV4T2YoJygnKSwgZXAgPSBzdHIuaW5kZXhPZignKScpO1xuICBpZiAob3AgIT09IC0xICYmIGVwICsgMSA9PT0gc3RyLmxlbmd0aCkge1xuICAgIHZhciBmbmFtZSA9IHN0ci5zdWJzdHIoMCwgb3ApO1xuICAgIHZhciBwYXJhbXMgPSBzdHIuc3Vic3RyKG9wKzEsIGVwLShvcCsxKSkuc3BsaXQoJywnKTtcbiAgICB2YXIgYWxwaGEgPSAxOyAgLy8gVG8gYWxsb3cgY2FzZSBmYWxsdGhyb3VnaC5cbiAgICBzd2l0Y2ggKGZuYW1lKSB7XG4gICAgICBjYXNlICdyZ2JhJzpcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDQpIHJldHVybiBudWxsO1xuICAgICAgICBhbHBoYSA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXMucG9wKCkpO1xuICAgICAgICAvLyBGYWxsIHRocm91Z2guXG4gICAgICBjYXNlICdyZ2InOlxuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBbcGFyc2VfY3NzX2ludChwYXJhbXNbMF0pLFxuICAgICAgICAgICAgICAgIHBhcnNlX2Nzc19pbnQocGFyYW1zWzFdKSxcbiAgICAgICAgICAgICAgICBwYXJzZV9jc3NfaW50KHBhcmFtc1syXSksXG4gICAgICAgICAgICAgICAgYWxwaGFdO1xuICAgICAgY2FzZSAnaHNsYSc6XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgYWxwaGEgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zLnBvcCgpKTtcbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoLlxuICAgICAgY2FzZSAnaHNsJzpcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgaCA9ICgoKHBhcnNlRmxvYXQocGFyYW1zWzBdKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MDsgIC8vIDAgLi4gMVxuICAgICAgICAvLyBOT1RFKGRlYW5tKTogQWNjb3JkaW5nIHRvIHRoZSBDU1Mgc3BlYyBzL2wgc2hvdWxkIG9ubHkgYmVcbiAgICAgICAgLy8gcGVyY2VudGFnZXMsIGJ1dCB3ZSBkb24ndCBib3RoZXIgYW5kIGxldCBmbG9hdCBvciBwZXJjZW50YWdlLlxuICAgICAgICB2YXIgcyA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXNbMV0pO1xuICAgICAgICB2YXIgbCA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXNbMl0pO1xuICAgICAgICB2YXIgbTIgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgdmFyIG0xID0gbCAqIDIgLSBtMjtcbiAgICAgICAgcmV0dXJuIFtjbGFtcF9jc3NfYnl0ZShjc3NfaHVlX3RvX3JnYihtMSwgbTIsIGgrMS8zKSAqIDI1NSksXG4gICAgICAgICAgICAgICAgY2xhbXBfY3NzX2J5dGUoY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoKSAqIDI1NSksXG4gICAgICAgICAgICAgICAgY2xhbXBfY3NzX2J5dGUoY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoLTEvMykgKiAyNTUpLFxuICAgICAgICAgICAgICAgIGFscGhhXTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG50cnkgeyBleHBvcnRzLnBhcnNlQ1NTQ29sb3IgPSBwYXJzZUNTU0NvbG9yIH0gY2F0Y2goZSkgeyB9XG4iLCJcInVzZSBzdHJpY3RcIlxuXG5mdW5jdGlvbiBkdXBlX2FycmF5KGNvdW50LCB2YWx1ZSwgaSkge1xuICB2YXIgYyA9IGNvdW50W2ldfDBcbiAgaWYoYyA8PSAwKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheShjKSwgalxuICBpZihpID09PSBjb3VudC5sZW5ndGgtMSkge1xuICAgIGZvcihqPTA7IGo8YzsgKytqKSB7XG4gICAgICByZXN1bHRbal0gPSB2YWx1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3Ioaj0wOyBqPGM7ICsraikge1xuICAgICAgcmVzdWx0W2pdID0gZHVwZV9hcnJheShjb3VudCwgdmFsdWUsIGkrMSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBkdXBlX251bWJlcihjb3VudCwgdmFsdWUpIHtcbiAgdmFyIHJlc3VsdCwgaVxuICByZXN1bHQgPSBuZXcgQXJyYXkoY291bnQpXG4gIGZvcihpPTA7IGk8Y291bnQ7ICsraSkge1xuICAgIHJlc3VsdFtpXSA9IHZhbHVlXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBkdXBlKGNvdW50LCB2YWx1ZSkge1xuICBpZih0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YWx1ZSA9IDBcbiAgfVxuICBzd2l0Y2godHlwZW9mIGNvdW50KSB7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgaWYoY291bnQgPiAwKSB7XG4gICAgICAgIHJldHVybiBkdXBlX251bWJlcihjb3VudHwwLCB2YWx1ZSlcbiAgICAgIH1cbiAgICBicmVha1xuICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgIGlmKHR5cGVvZiAoY291bnQubGVuZ3RoKSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gZHVwZV9hcnJheShjb3VudCwgdmFsdWUsIDApXG4gICAgICB9XG4gICAgYnJlYWtcbiAgfVxuICByZXR1cm4gW11cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkdXBlIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KHBvaW50cykge1xuXG4gICAgdmFyIG91dGVyTm9kZSA9IGxpbmtlZExpc3QocG9pbnRzWzBdLCB0cnVlKSxcbiAgICAgICAgbm9kZSwgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZSxcbiAgICAgICAgbGVuID0gMCxcbiAgICAgICAgdGhyZXNob2xkID0gODA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgbGVuIDwgdGhyZXNob2xkICYmIGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIGxlbiArPSBwb2ludHNbaV0ubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGxlbiA+PSB0aHJlc2hvbGQpIHtcbiAgICAgICAgbm9kZSA9IG91dGVyTm9kZS5uZXh0O1xuICAgICAgICBtaW5YID0gbWF4WCA9IG5vZGUucFswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBub2RlLnBbMV07XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHggPSBub2RlLnBbMF07XG4gICAgICAgICAgICB5ID0gbm9kZS5wWzFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIH0gd2hpbGUgKG5vZGUgIT09IG91dGVyTm9kZSk7XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPiAxKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhwb2ludHMsIG91dGVyTm9kZSk7XG5cbiAgICB2YXIgdHJpYW5nbGVzID0gW107XG4gICAgaWYgKG91dGVyTm9kZSkgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChwb2ludHMsIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBsZW4gPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSAwLCBqID0gbGVuIC0gMTsgaSA8IGxlbjsgaiA9IGkrKykge1xuICAgICAgICB2YXIgcDEgPSBwb2ludHNbaV0sXG4gICAgICAgICAgICBwMiA9IHBvaW50c1tqXTtcbiAgICAgICAgc3VtICs9IChwMlswXSAtIHAxWzBdKSAqIChwMVsxXSArIHAyWzFdKTtcbiAgICB9XG5cbiAgICAvLyBsaW5rIHBvaW50cyBpbnRvIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdCBpbiB0aGUgc3BlY2lmaWVkIHdpbmRpbmcgb3JkZXJcbiAgICBpZiAoY2xvY2t3aXNlID09PSAoc3VtID4gMCkpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSBsYXN0ID0gaW5zZXJ0Tm9kZShwb2ludHNbaV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSBsYXN0ID0gaW5zZXJ0Tm9kZShwb2ludHNbaV0sIGxhc3QpO1xuICAgIH1cblxuICAgIHJldHVybiBsYXN0O1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQpIHtcbiAgICAvLyBlbGltaW5hdGUgY29saW5lYXIgb3IgZHVwbGljYXRlIHBvaW50c1xuICAgIHZhciBub2RlID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoZXF1YWxzKG5vZGUucCwgbm9kZS5uZXh0LnApIHx8IG9yaWVudChub2RlLnByZXYucCwgbm9kZS5wLCBub2RlLm5leHQucCkgPT09IDApIHtcblxuICAgICAgICAgICAgbm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICBub2RlLm5leHQucHJldiA9IG5vZGUucHJldjtcblxuICAgICAgICAgICAgaWYgKG5vZGUucHJldlopIG5vZGUucHJldloubmV4dFogPSBub2RlLm5leHRaO1xuICAgICAgICAgICAgaWYgKG5vZGUubmV4dFopIG5vZGUubmV4dFoucHJldlogPSBub2RlLnByZXZaO1xuXG4gICAgICAgICAgICBub2RlID0gc3RhcnQgPSBub2RlLnByZXY7XG5cbiAgICAgICAgICAgIGlmIChub2RlID09PSBub2RlLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgbm9kZSAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN0YXJ0O1xufVxuXG5mdW5jdGlvbiBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIG1pblgsIG1pblksIHNpemUsIHNlY29uZFBhc3MpIHtcbiAgICBlYXIgPSBmaWx0ZXJQb2ludHMoZWFyKTtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgaWYgKCFzZWNvbmRQYXNzICYmIG1pblggIT09IHVuZGVmaW5lZCkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChpc0VhcihlYXIsIG1pblgsIG1pblksIHNpemUpKSB7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LnAsIGVhci5wLCBuZXh0LnApO1xuXG4gICAgICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xuICAgICAgICAgICAgcHJldi5uZXh0ID0gbmV4dDtcblxuICAgICAgICAgICAgaWYgKGVhci5wcmV2WikgZWFyLnByZXZaLm5leHRaID0gZWFyLm5leHRaO1xuICAgICAgICAgICAgaWYgKGVhci5uZXh0WikgZWFyLm5leHRaLnByZXZaID0gZWFyLnByZXZaO1xuXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gaWYgd2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzLCB0cnkgZmlsdGVyaW5nIHBvaW50cyBhbmQgY3V0dGluZyBhZ2FpblxuICAgICAgICAgICAgaWYgKCFzZWNvbmRQYXNzKSBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIG1pblgsIG1pblksIHNpemUsIHRydWUpO1xuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IHNwbGl0dGluZyB0aGUgcmVtYWluaW5nIHBvbHlnb24gaW50byB0d29cbiAgICAgICAgICAgIGVsc2Ugc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzRWFyKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuXG4gICAgdmFyIGEgPSBlYXIucHJldi5wLFxuICAgICAgICBiID0gZWFyLnAsXG4gICAgICAgIGMgPSBlYXIubmV4dC5wLFxuXG4gICAgICAgIGF4ID0gYVswXSwgYnggPSBiWzBdLCBjeCA9IGNbMF0sXG4gICAgICAgIGF5ID0gYVsxXSwgYnkgPSBiWzFdLCBjeSA9IGNbMV0sXG5cbiAgICAgICAgYWJkID0gYXggKiBieSAtIGF5ICogYngsXG4gICAgICAgIGFjZCA9IGF4ICogY3kgLSBheSAqIGN4LFxuICAgICAgICBjYmQgPSBjeCAqIGJ5IC0gY3kgKiBieCxcbiAgICAgICAgQSA9IGFiZCAtIGFjZCAtIGNiZDtcblxuICAgIGlmIChBIDw9IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG5cbiAgICB2YXIgY2F5ID0gY3kgLSBheSxcbiAgICAgICAgYWN4ID0gYXggLSBjeCxcbiAgICAgICAgYWJ5ID0gYXkgLSBieSxcbiAgICAgICAgYmF4ID0gYnggLSBheCxcbiAgICAgICAgcCwgcHgsIHB5LCBzLCB0LCBrLCBub2RlO1xuXG4gICAgLy8gaWYgd2UgdXNlIHotb3JkZXIgY3VydmUgaGFzaGluZywgaXRlcmF0ZSB0aHJvdWdoIHRoZSBjdXJ2ZVxuICAgIGlmIChtaW5YICE9PSB1bmRlZmluZWQpIHtcblxuICAgICAgICAvLyB0cmlhbmdsZSBiYm94OyBtaW4gJiBtYXggYXJlIGNhbGN1bGF0ZWQgbGlrZSB0aGlzIGZvciBzcGVlZFxuICAgICAgICB2YXIgbWluVFggPSBheCA8IGJ4ID8gKGF4IDwgY3ggPyBheCA6IGN4KSA6IChieCA8IGN4ID8gYnggOiBjeCksXG4gICAgICAgICAgICBtaW5UWSA9IGF5IDwgYnkgPyAoYXkgPCBjeSA/IGF5IDogY3kpIDogKGJ5IDwgY3kgPyBieSA6IGN5KSxcbiAgICAgICAgICAgIG1heFRYID0gYXggPiBieCA/IChheCA+IGN4ID8gYXggOiBjeCkgOiAoYnggPiBjeCA/IGJ4IDogY3gpLFxuICAgICAgICAgICAgbWF4VFkgPSBheSA+IGJ5ID8gKGF5ID4gY3kgPyBheSA6IGN5KSA6IChieSA+IGN5ID8gYnkgOiBjeSksXG5cbiAgICAgICAgICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgICAgICAgICBtaW5aID0gek9yZGVyKG1pblRYLCBtaW5UWSwgbWluWCwgbWluWSwgc2l6ZSksXG4gICAgICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAgICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgICAgIG5vZGUgPSBlYXIubmV4dFo7XG5cbiAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS56IDw9IG1heFopIHtcbiAgICAgICAgICAgIHAgPSBub2RlLnA7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0WjtcbiAgICAgICAgICAgIGlmIChwID09PSBhIHx8IHAgPT09IGMpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBweCA9IHBbMF07XG4gICAgICAgICAgICBweSA9IHBbMV07XG5cbiAgICAgICAgICAgIHMgPSBjYXkgKiBweCArIGFjeCAqIHB5IC0gYWNkO1xuICAgICAgICAgICAgaWYgKHMgPj0gMCkge1xuICAgICAgICAgICAgICAgIHQgPSBhYnkgKiBweCArIGJheCAqIHB5ICsgYWJkO1xuICAgICAgICAgICAgICAgIGlmICh0ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IEEgLSBzIC0gdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChrID49IDApICYmICgocyAmJiB0KSB8fCAocyAmJiBrKSB8fCAodCAmJiBrKSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICAgICAgbm9kZSA9IGVhci5wcmV2WjtcblxuICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLnogPj0gbWluWikge1xuICAgICAgICAgICAgcCA9IG5vZGUucDtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnByZXZaO1xuICAgICAgICAgICAgaWYgKHAgPT09IGEgfHwgcCA9PT0gYykgY29udGludWU7XG5cbiAgICAgICAgICAgIHB4ID0gcFswXTtcbiAgICAgICAgICAgIHB5ID0gcFsxXTtcblxuICAgICAgICAgICAgcyA9IGNheSAqIHB4ICsgYWN4ICogcHkgLSBhY2Q7XG4gICAgICAgICAgICBpZiAocyA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdCA9IGFieSAqIHB4ICsgYmF4ICogcHkgKyBhYmQ7XG4gICAgICAgICAgICAgICAgaWYgKHQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBrID0gQSAtIHMgLSB0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGsgPj0gMCkgJiYgKChzICYmIHQpIHx8IChzICYmIGspIHx8ICh0ICYmIGspKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgLy8gaWYgd2UgZG9uJ3QgdXNlIHotb3JkZXIgY3VydmUgaGFzaCwgc2ltcGx5IGl0ZXJhdGUgdGhyb3VnaCBhbGwgb3RoZXIgcG9pbnRzXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICAgICAgd2hpbGUgKG5vZGUgIT09IGVhci5wcmV2KSB7XG4gICAgICAgICAgICBwID0gbm9kZS5wO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcblxuICAgICAgICAgICAgcHggPSBwWzBdO1xuICAgICAgICAgICAgcHkgPSBwWzFdO1xuXG4gICAgICAgICAgICBzID0gY2F5ICogcHggKyBhY3ggKiBweSAtIGFjZDtcbiAgICAgICAgICAgIGlmIChzID49IDApIHtcbiAgICAgICAgICAgICAgICB0ID0gYWJ5ICogcHggKyBiYXggKiBweSArIGFiZDtcbiAgICAgICAgICAgICAgICBpZiAodCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGsgPSBBIC0gcyAtIHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoayA+PSAwKSAmJiAoKHMgJiYgdCkgfHwgKHMgJiYgaykgfHwgKHQgJiYgaykpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNwbGl0RWFyY3V0KHN0YXJ0LCB0cmlhbmdsZXMsIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBmaW5kIGEgdmFsaWQgZGlhZ29uYWwgdGhhdCBkaXZpZGVzIHRoZSBwb2x5Z29uIGludG8gdHdvXG4gICAgdmFyIGEgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBiID0gYS5uZXh0Lm5leHQ7XG4gICAgICAgIHdoaWxlIChiICE9PSBhLnByZXYpIHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRGlhZ29uYWwoYSwgYikpIHtcbiAgICAgICAgICAgICAgICAvLyBzcGxpdCB0aGUgcG9seWdvbiBpbiB0d28gYnkgdGhlIGRpYWdvbmFsXG4gICAgICAgICAgICAgICAgdmFyIGMgPSBzcGxpdFBvbHlnb24oYSwgYik7XG5cbiAgICAgICAgICAgICAgICAvLyBydW4gZWFyY3V0IG9uIGVhY2ggaGFsZlxuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChhLCB0cmlhbmdsZXMsIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKHBvaW50cywgb3V0ZXJOb2RlKSB7XG4gICAgdmFyIGxlbiA9IHBvaW50cy5sZW5ndGg7XG5cbiAgICB2YXIgcXVldWUgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciBsaXN0ID0gZmlsdGVyUG9pbnRzKGxpbmtlZExpc3QocG9pbnRzW2ldLCBmYWxzZSkpO1xuICAgICAgICBpZiAobGlzdCkgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuICAgIHF1ZXVlLnNvcnQoY29tcGFyZVgpO1xuXG4gICAgLy8gcHJvY2VzcyBob2xlcyBmcm9tIGxlZnQgdG8gcmlnaHRcbiAgICBmb3IgKGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWxpbWluYXRlSG9sZShxdWV1ZVtpXSwgb3V0ZXJOb2RlKTtcbiAgICAgICAgb3V0ZXJOb2RlID0gZmlsdGVyUG9pbnRzKG91dGVyTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlTm9kZSwgb3V0ZXJOb2RlKSB7XG4gICAgb3V0ZXJOb2RlID0gZmluZEhvbGVCcmlkZ2UoaG9sZU5vZGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkgc3BsaXRQb2x5Z29uKGhvbGVOb2RlLCBvdXRlck5vZGUpO1xufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlTm9kZSwgb3V0ZXJOb2RlKSB7XG4gICAgdmFyIG5vZGUgPSBvdXRlck5vZGUsXG4gICAgICAgIHAgPSBob2xlTm9kZS5wLFxuICAgICAgICBweCA9IHBbMF0sXG4gICAgICAgIHB5ID0gcFsxXSxcbiAgICAgICAgcU1heCA9IC1JbmZpbml0eSxcbiAgICAgICAgbU5vZGUsIGEsIGI7XG5cbiAgICAvLyBmaW5kIGEgc2VnbWVudCBpbnRlcnNlY3RlZCBieSBhIHJheSBmcm9tIHRoZSBob2xlJ3MgbGVmdG1vc3QgcG9pbnQgdG8gdGhlIGxlZnQ7XG4gICAgLy8gc2VnbWVudCdzIGVuZHBvaW50IHdpdGggbGVzc2VyIHggd2lsbCBiZSBwb3RlbnRpYWwgY29ubmVjdGlvbiBwb2ludFxuICAgIGRvIHtcbiAgICAgICAgYSA9IG5vZGUucDtcbiAgICAgICAgYiA9IG5vZGUubmV4dC5wO1xuXG4gICAgICAgIGlmIChweSA8PSBhWzFdICYmIHB5ID49IGJbMV0pIHtcbiAgICAgICAgICAgIHZhciBxeCA9IGFbMF0gKyAocHkgLSBhWzFdKSAqIChiWzBdIC0gYVswXSkgLyAoYlsxXSAtIGFbMV0pO1xuICAgICAgICAgICAgaWYgKHF4IDw9IHB4ICYmIHF4ID4gcU1heCkge1xuICAgICAgICAgICAgICAgIHFNYXggPSBxeDtcbiAgICAgICAgICAgICAgICBtTm9kZSA9IGFbMF0gPCBiWzBdID8gbm9kZSA6IG5vZGUubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgIH0gd2hpbGUgKG5vZGUgIT09IG91dGVyTm9kZSk7XG5cbiAgICBpZiAoIW1Ob2RlKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBzdHJpY3RseSBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIGJ4ID0gbU5vZGUucFswXSxcbiAgICAgICAgYnkgPSBtTm9kZS5wWzFdLFxuICAgICAgICBwYmQgPSBweCAqIGJ5IC0gcHkgKiBieCxcbiAgICAgICAgcGNkID0gcHggKiBweSAtIHB5ICogcU1heCxcbiAgICAgICAgY3B5ID0gcHkgLSBweSxcbiAgICAgICAgcGN4ID0gcHggLSBxTWF4LFxuICAgICAgICBwYnkgPSBweSAtIGJ5LFxuICAgICAgICBicHggPSBieCAtIHB4LFxuICAgICAgICBBID0gcGJkIC0gcGNkIC0gKHFNYXggKiBieSAtIHB5ICogYngpLFxuICAgICAgICBzaWduID0gQSA8PSAwID8gLTEgOiAxLFxuICAgICAgICBzdG9wID0gbU5vZGUsXG4gICAgICAgIHRhbk1pbiA9IEluZmluaXR5LFxuICAgICAgICBteCwgbXksIGFteCwgcywgdCwgdGFuO1xuXG4gICAgbm9kZSA9IG1Ob2RlLm5leHQ7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gc3RvcCkge1xuXG4gICAgICAgIG14ID0gbm9kZS5wWzBdO1xuICAgICAgICBteSA9IG5vZGUucFsxXTtcbiAgICAgICAgYW14ID0gcHggLSBteDtcblxuICAgICAgICBpZiAoYW14ID49IDAgJiYgbXggPj0gYngpIHtcbiAgICAgICAgICAgIHMgPSAoY3B5ICogbXggKyBwY3ggKiBteSAtIHBjZCkgKiBzaWduO1xuICAgICAgICAgICAgaWYgKHMgPj0gMCkge1xuICAgICAgICAgICAgICAgIHQgPSAocGJ5ICogbXggKyBicHggKiBteSArIHBiZCkgKiBzaWduO1xuXG4gICAgICAgICAgICAgICAgaWYgKHQgPj0gMCAmJiBBICogc2lnbiAtIHMgLSB0ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGFuID0gTWF0aC5hYnMocHkgLSBteSkgLyBhbXg7IC8vIHRhbmdlbnRpYWxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhbiA8IHRhbk1pbiAmJiBsb2NhbGx5SW5zaWRlKG5vZGUsIGhvbGVOb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbU5vZGUgPSBub2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbU5vZGU7XG59XG5cbmZ1bmN0aW9uIGluZGV4Q3VydmUoc3RhcnQsIG1pblgsIG1pblksIHNpemUpIHtcbiAgICB2YXIgbm9kZSA9IHN0YXJ0O1xuXG4gICAgZG8ge1xuICAgICAgICBub2RlLnogPSBub2RlLnogfHwgek9yZGVyKG5vZGUucFswXSwgbm9kZS5wWzFdLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgbm9kZS5wcmV2WiA9IG5vZGUucHJldjtcbiAgICAgICAgbm9kZS5uZXh0WiA9IG5vZGUubmV4dDtcbiAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICB9IHdoaWxlIChub2RlICE9PSBzdGFydCk7XG5cbiAgICBub2RlLnByZXZaLm5leHRaID0gbnVsbDtcbiAgICBub2RlLnByZXZaID0gbnVsbDtcblxuICAgIHNvcnRMaW5rZWQobm9kZSk7XG59XG5cbi8vIFNpbW9uIFRhdGhhbSdzIGxpbmtlZCBsaXN0IG1lcmdlIHNvcnQgYWxnb3JpdGhtXG4vLyBodHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL2FsZ29yaXRobXMvbGlzdHNvcnQuaHRtbFxuZnVuY3Rpb24gc29ydExpbmtlZChsaXN0KSB7XG4gICAgdmFyIGksIHAsIHEsIGUsIHRhaWwsIG51bU1lcmdlcywgcFNpemUsIHFTaXplLFxuICAgICAgICBpblNpemUgPSAxO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuXG4gICAgICAgIGlmIChudW1NZXJnZXMgPD0gMSkgcmV0dXJuIGxpc3Q7XG5cbiAgICAgICAgaW5TaXplICo9IDI7XG4gICAgfVxufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBiYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byAoMC4uMTAwMCkgaW50ZWdlciByYW5nZVxuICAgIHggPSAxMDAwICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeCA9ICh4IHwgKHggPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB4ID0gKHggfCAoeCA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHggPSAoeCB8ICh4IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeCA9ICh4IHwgKHggPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHkgPSAxMDAwICogKHkgLSBtaW5ZKSAvIHNpemU7XG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIG5vZGUgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChub2RlLnBbMF0gPCBsZWZ0bW9zdC5wWzBdKSBsZWZ0bW9zdCA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgfSB3aGlsZSAobm9kZSAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRGlhZ29uYWwoYSwgYikge1xuICAgIHJldHVybiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYS5wLCBiLnApICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJlxuICAgICAgICAgICBtaWRkbGVJbnNpZGUoYSwgYS5wLCBiLnApO1xufVxuXG4vLyB3aW5kaW5nIG9yZGVyIG9mIHRyaWFuZ2xlIGZvcm1lZCBieSAzIGdpdmVuIHBvaW50c1xuZnVuY3Rpb24gb3JpZW50KHAsIHEsIHIpIHtcbiAgICB2YXIgbyA9IChxWzFdIC0gcFsxXSkgKiAoclswXSAtIHFbMF0pIC0gKHFbMF0gLSBwWzBdKSAqIChyWzFdIC0gcVsxXSk7XG4gICAgcmV0dXJuIG8gPiAwID8gMSA6XG4gICAgICAgICAgIG8gPCAwID8gLTEgOiAwO1xufVxuXG5mdW5jdGlvbiBlcXVhbHMocDEsIHAyKSB7XG4gICAgcmV0dXJuIHAxWzBdID09PSBwMlswXSAmJiBwMVsxXSA9PT0gcDJbMV07XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gb3JpZW50KHAxLCBxMSwgcDIpICE9PSBvcmllbnQocDEsIHExLCBxMikgJiZcbiAgICAgICAgICAgb3JpZW50KHAyLCBxMiwgcDEpICE9PSBvcmllbnQocDIsIHEyLCBxMSk7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihzdGFydCwgYSwgYikge1xuICAgIHZhciBub2RlID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgcDEgPSBub2RlLnAsXG4gICAgICAgICAgICBwMiA9IG5vZGUubmV4dC5wO1xuXG4gICAgICAgIGlmIChwMSAhPT0gYSAmJiBwMiAhPT0gYSAmJiBwMSAhPT0gYiAmJiBwMiAhPT0gYiAmJiBpbnRlcnNlY3RzKHAxLCBwMiwgYSwgYikpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgfSB3aGlsZSAobm9kZSAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaXMgbG9jYWxseSBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIGxvY2FsbHlJbnNpZGUoYSwgYikge1xuICAgIHJldHVybiBvcmllbnQoYS5wcmV2LnAsIGEucCwgYS5uZXh0LnApID09PSAtMSA/XG4gICAgICAgIG9yaWVudChhLnAsIGIucCwgYS5uZXh0LnApICE9PSAtMSAmJiBvcmllbnQoYS5wLCBhLnByZXYucCwgYi5wKSAhPT0gLTEgOlxuICAgICAgICBvcmllbnQoYS5wLCBiLnAsIGEucHJldi5wKSA9PT0gLTEgfHwgb3JpZW50KGEucCwgYS5uZXh0LnAsIGIucCkgPT09IC0xO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShzdGFydCwgYSwgYikge1xuICAgIHZhciBub2RlID0gc3RhcnQsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhWzBdICsgYlswXSkgLyAyLFxuICAgICAgICBweSA9IChhWzFdICsgYlsxXSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgdmFyIHAxID0gbm9kZS5wLFxuICAgICAgICAgICAgcDIgPSBub2RlLm5leHQucDtcblxuICAgICAgICBpZiAoKChwMVsxXSA+IHB5KSAhPT0gKHAyWzFdID4gcHkpKSAmJlxuICAgICAgICAgICAgKHB4IDwgKHAyWzBdIC0gcDFbMF0pICogKHB5IC0gcDFbMV0pIC8gKHAyWzFdIC0gcDFbMV0pICsgcDFbMF0pKSBpbnNpZGUgPSAhaW5zaWRlO1xuXG4gICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgfSB3aGlsZSAobm9kZSAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnBbMF0gLSBiLnBbMF07XG59XG5cbi8vIHNwbGl0IHRoZSBwb2x5Z29uIHZlcnRpY2VzIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlua2VkIGxpc3QgaW50byB0d29cbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5wKSxcbiAgICAgICAgYjIgPSBuZXcgTm9kZShiLnApLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYTI7XG59XG5cbmZ1bmN0aW9uIGluc2VydE5vZGUocG9pbnQsIGxhc3QpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBOb2RlKHBvaW50KTtcblxuICAgIGlmICghbGFzdCkge1xuICAgICAgICBub2RlLnByZXYgPSBub2RlO1xuICAgICAgICBub2RlLm5leHQgPSBub2RlO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5uZXh0ID0gbGFzdC5uZXh0O1xuICAgICAgICBub2RlLnByZXYgPSBsYXN0O1xuICAgICAgICBsYXN0Lm5leHQucHJldiA9IG5vZGU7XG4gICAgICAgIGxhc3QubmV4dCA9IG5vZGU7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBOb2RlKHApIHtcbiAgICB0aGlzLnAgPSBwO1xuICAgIHRoaXMucHJldiA9IG51bGw7XG4gICAgdGhpcy5uZXh0ID0gbnVsbDtcblxuICAgIHRoaXMueiA9IG51bGw7XG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xpcDtcblxuLyogY2xpcCBmZWF0dXJlcyBiZXR3ZWVuIHR3byBheGlzLXBhcmFsbGVsIGxpbmVzOlxuICogICAgIHwgICAgICAgIHxcbiAqICBfX198X19fICAgICB8ICAgICAvXG4gKiAvICAgfCAgIFxcX19fX3xfX19fL1xuICogICAgIHwgICAgICAgIHxcbiAqL1xuXG5mdW5jdGlvbiBjbGlwKGZlYXR1cmVzLCBzY2FsZSwgazEsIGsyLCBheGlzLCBpbnRlcnNlY3QsIG1pbkFsbCwgbWF4QWxsKSB7XG5cbiAgICBrMSAvPSBzY2FsZTtcbiAgICBrMiAvPSBzY2FsZTtcblxuICAgIGlmIChtaW5BbGwgPj0gazEgJiYgbWF4QWxsIDw9IGsyKSByZXR1cm4gZmVhdHVyZXM7IC8vIHRyaXZpYWwgYWNjZXB0XG4gICAgZWxzZSBpZiAobWluQWxsID4gazIgfHwgbWF4QWxsIDwgazEpIHJldHVybiBudWxsOyAvLyB0cml2aWFsIHJlamVjdFxuXG4gICAgdmFyIGNsaXBwZWQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICB2YXIgZmVhdHVyZSA9IGZlYXR1cmVzW2ldLFxuICAgICAgICAgICAgZ2VvbWV0cnkgPSBmZWF0dXJlLmdlb21ldHJ5LFxuICAgICAgICAgICAgdHlwZSA9IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgIG1pbiwgbWF4O1xuXG4gICAgICAgIG1pbiA9IGZlYXR1cmUubWluW2F4aXNdO1xuICAgICAgICBtYXggPSBmZWF0dXJlLm1heFtheGlzXTtcblxuICAgICAgICBpZiAobWluID49IGsxICYmIG1heCA8PSBrMikgeyAvLyB0cml2aWFsIGFjY2VwdFxuICAgICAgICAgICAgY2xpcHBlZC5wdXNoKGZlYXR1cmUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAobWluID4gazIgfHwgbWF4IDwgazEpIGNvbnRpbnVlOyAvLyB0cml2aWFsIHJlamVjdFxuXG4gICAgICAgIHZhciBzbGljZXMgPSB0eXBlID09PSAxID9cbiAgICAgICAgICAgICAgICBjbGlwUG9pbnRzKGdlb21ldHJ5LCBrMSwgazIsIGF4aXMpIDpcbiAgICAgICAgICAgICAgICBjbGlwR2VvbWV0cnkoZ2VvbWV0cnksIGsxLCBrMiwgYXhpcywgaW50ZXJzZWN0LCB0eXBlID09PSAzKTtcblxuICAgICAgICBpZiAoc2xpY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gaWYgYSBmZWF0dXJlIGdvdCBjbGlwcGVkLCBpdCB3aWxsIGxpa2VseSBnZXQgY2xpcHBlZCBvbiB0aGUgbmV4dCB6b29tIGxldmVsIGFzIHdlbGwsXG4gICAgICAgICAgICAvLyBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgYmJveGVzXG4gICAgICAgICAgICBjbGlwcGVkLnB1c2goe1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBzbGljZXMsXG4gICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICB0YWdzOiBmZWF0dXJlc1tpXS50YWdzIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgbWluOiBmZWF0dXJlLm1pbixcbiAgICAgICAgICAgICAgICBtYXg6IGZlYXR1cmUubWF4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGlwcGVkLmxlbmd0aCA/IGNsaXBwZWQgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBjbGlwUG9pbnRzKGdlb21ldHJ5LCBrMSwgazIsIGF4aXMpIHtcbiAgICB2YXIgc2xpY2UgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbWV0cnkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGEgPSBnZW9tZXRyeVtpXSxcbiAgICAgICAgICAgIGFrID0gYVtheGlzXTtcblxuICAgICAgICBpZiAoYWsgPj0gazEgJiYgYWsgPD0gazIpIHNsaWNlLnB1c2goYSk7XG4gICAgfVxuICAgIHJldHVybiBzbGljZTtcbn1cblxuZnVuY3Rpb24gY2xpcEdlb21ldHJ5KGdlb21ldHJ5LCBrMSwgazIsIGF4aXMsIGludGVyc2VjdCwgY2xvc2VkKSB7XG5cbiAgICB2YXIgc2xpY2VzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5Lmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIGFrID0gMCxcbiAgICAgICAgICAgIGJrID0gMCxcbiAgICAgICAgICAgIGIgPSBudWxsLFxuICAgICAgICAgICAgcG9pbnRzID0gZ2VvbWV0cnlbaV0sXG4gICAgICAgICAgICBhcmVhID0gcG9pbnRzLmFyZWEsXG4gICAgICAgICAgICBkaXN0ID0gcG9pbnRzLmRpc3QsXG4gICAgICAgICAgICBsZW4gPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICAgICAgYSwgaiwgbGFzdDtcblxuICAgICAgICB2YXIgc2xpY2UgPSBbXTtcblxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVuIC0gMTsgaisrKSB7XG4gICAgICAgICAgICBhID0gYiB8fCBwb2ludHNbal07XG4gICAgICAgICAgICBiID0gcG9pbnRzW2ogKyAxXTtcbiAgICAgICAgICAgIGFrID0gYmsgfHwgYVtheGlzXTtcbiAgICAgICAgICAgIGJrID0gYltheGlzXTtcblxuICAgICAgICAgICAgaWYgKGFrIDwgazEpIHtcblxuICAgICAgICAgICAgICAgIGlmICgoYmsgPiBrMikpIHsgLy8gLS0tfC0tLS0tfC0tPlxuICAgICAgICAgICAgICAgICAgICBzbGljZS5wdXNoKGludGVyc2VjdChhLCBiLCBrMSksIGludGVyc2VjdChhLCBiLCBrMikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNsb3NlZCkgc2xpY2UgPSBuZXdTbGljZShzbGljZXMsIHNsaWNlLCBhcmVhLCBkaXN0KTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmsgPj0gazEpIHNsaWNlLnB1c2goaW50ZXJzZWN0KGEsIGIsIGsxKSk7IC8vIC0tLXwtLT4gIHxcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChhayA+IGsyKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoKGJrIDwgazEpKSB7IC8vIDwtLXwtLS0tLXwtLS1cbiAgICAgICAgICAgICAgICAgICAgc2xpY2UucHVzaChpbnRlcnNlY3QoYSwgYiwgazIpLCBpbnRlcnNlY3QoYSwgYiwgazEpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjbG9zZWQpIHNsaWNlID0gbmV3U2xpY2Uoc2xpY2VzLCBzbGljZSwgYXJlYSwgZGlzdCk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJrIDw9IGsyKSBzbGljZS5wdXNoKGludGVyc2VjdChhLCBiLCBrMikpOyAvLyB8ICA8LS18LS0tXG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBzbGljZS5wdXNoKGEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJrIDwgazEpIHsgLy8gPC0tfC0tLSAgfFxuICAgICAgICAgICAgICAgICAgICBzbGljZS5wdXNoKGludGVyc2VjdChhLCBiLCBrMSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNsb3NlZCkgc2xpY2UgPSBuZXdTbGljZShzbGljZXMsIHNsaWNlLCBhcmVhLCBkaXN0KTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmsgPiBrMikgeyAvLyB8ICAtLS18LS0+XG4gICAgICAgICAgICAgICAgICAgIHNsaWNlLnB1c2goaW50ZXJzZWN0KGEsIGIsIGsyKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2xvc2VkKSBzbGljZSA9IG5ld1NsaWNlKHNsaWNlcywgc2xpY2UsIGFyZWEsIGRpc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB8IC0tPiB8XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgdGhlIGxhc3QgcG9pbnRcbiAgICAgICAgYSA9IHBvaW50c1tsZW4gLSAxXTtcbiAgICAgICAgYWsgPSBhW2F4aXNdO1xuICAgICAgICBpZiAoYWsgPj0gazEgJiYgYWsgPD0gazIpIHNsaWNlLnB1c2goYSk7XG5cbiAgICAgICAgLy8gY2xvc2UgdGhlIHBvbHlnb24gaWYgaXRzIGVuZHBvaW50cyBhcmUgbm90IHRoZSBzYW1lIGFmdGVyIGNsaXBwaW5nXG5cbiAgICAgICAgbGFzdCA9IHNsaWNlW3NsaWNlLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoY2xvc2VkICYmIGxhc3QgJiYgKHNsaWNlWzBdWzBdICE9PSBsYXN0WzBdIHx8IHNsaWNlWzBdWzFdICE9PSBsYXN0WzFdKSkgc2xpY2UucHVzaChzbGljZVswXSk7XG5cbiAgICAgICAgLy8gYWRkIHRoZSBmaW5hbCBzbGljZVxuICAgICAgICBuZXdTbGljZShzbGljZXMsIHNsaWNlLCBhcmVhLCBkaXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2xpY2VzO1xufVxuXG5mdW5jdGlvbiBuZXdTbGljZShzbGljZXMsIHNsaWNlLCBhcmVhLCBkaXN0KSB7XG4gICAgaWYgKHNsaWNlLmxlbmd0aCkge1xuICAgICAgICAvLyB3ZSBkb24ndCByZWNhbGN1bGF0ZSB0aGUgYXJlYS9sZW5ndGggb2YgdGhlIHVuY2xpcHBlZCBnZW9tZXRyeSBiZWNhdXNlIHRoZSBjYXNlIHdoZXJlIGl0IGdvZXNcbiAgICAgICAgLy8gYmVsb3cgdGhlIHZpc2liaWxpdHkgdGhyZXNob2xkIGFzIGEgcmVzdWx0IG9mIGNsaXBwaW5nIGlzIHJhcmUsIHNvIHdlIGF2b2lkIGRvaW5nIHVubmVjZXNzYXJ5IHdvcmtcbiAgICAgICAgc2xpY2UuYXJlYSA9IGFyZWE7XG4gICAgICAgIHNsaWNlLmRpc3QgPSBkaXN0O1xuXG4gICAgICAgIHNsaWNlcy5wdXNoKHNsaWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG5cbnZhciBzaW1wbGlmeSA9IHJlcXVpcmUoJy4vc2ltcGxpZnknKTtcblxuLy8gY29udmVydHMgR2VvSlNPTiBmZWF0dXJlIGludG8gYW4gaW50ZXJtZWRpYXRlIHByb2plY3RlZCBKU09OIHZlY3RvciBmb3JtYXQgd2l0aCBzaW1wbGlmaWNhdGlvbiBkYXRhXG5cbmZ1bmN0aW9uIGNvbnZlcnQoZGF0YSwgdG9sZXJhbmNlKSB7XG4gICAgdmFyIGZlYXR1cmVzID0gW107XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIGRhdGEuZmVhdHVyZXNbaV0sIHRvbGVyYW5jZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ0ZlYXR1cmUnKSB7XG4gICAgICAgIGNvbnZlcnRGZWF0dXJlKGZlYXR1cmVzLCBkYXRhLCB0b2xlcmFuY2UpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc2luZ2xlIGdlb21ldHJ5IG9yIGEgZ2VvbWV0cnkgY29sbGVjdGlvblxuICAgICAgICBjb252ZXJ0RmVhdHVyZShmZWF0dXJlcywge2dlb21ldHJ5OiBkYXRhfSwgdG9sZXJhbmNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmVzO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RmVhdHVyZShmZWF0dXJlcywgZmVhdHVyZSwgdG9sZXJhbmNlKSB7XG4gICAgdmFyIGdlb20gPSBmZWF0dXJlLmdlb21ldHJ5LFxuICAgICAgICB0eXBlID0gZ2VvbS50eXBlLFxuICAgICAgICBjb29yZHMgPSBnZW9tLmNvb3JkaW5hdGVzLFxuICAgICAgICB0YWdzID0gZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICBpLCBqLCByaW5ncztcblxuICAgIGlmICh0eXBlID09PSAnUG9pbnQnKSB7XG4gICAgICAgIGZlYXR1cmVzLnB1c2goY3JlYXRlKHRhZ3MsIDEsIFtwcm9qZWN0UG9pbnQoY29vcmRzKV0pKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XG4gICAgICAgIGZlYXR1cmVzLnB1c2goY3JlYXRlKHRhZ3MsIDEsIHByb2plY3QoY29vcmRzKSkpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgZmVhdHVyZXMucHVzaChjcmVhdGUodGFncywgMiwgW3Byb2plY3QoY29vcmRzLCB0b2xlcmFuY2UpXSkpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJyB8fCB0eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgcmluZ3MgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmluZ3MucHVzaChwcm9qZWN0KGNvb3Jkc1tpXSwgdG9sZXJhbmNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZmVhdHVyZXMucHVzaChjcmVhdGUodGFncywgdHlwZSA9PT0gJ1BvbHlnb24nID8gMyA6IDIsIHJpbmdzKSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgIHJpbmdzID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb29yZHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICByaW5ncy5wdXNoKHByb2plY3QoY29vcmRzW2ldW2pdLCB0b2xlcmFuY2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmZWF0dXJlcy5wdXNoKGNyZWF0ZSh0YWdzLCAzLCByaW5ncykpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnR2VvbWV0cnlDb2xsZWN0aW9uJykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvbS5nZW9tZXRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb252ZXJ0RmVhdHVyZShmZWF0dXJlcywge1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBnZW9tLmdlb21ldHJpZXNbaV0sXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogdGFnc1xuICAgICAgICAgICAgfSwgdG9sZXJhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LicpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlKHRhZ3MsIHR5cGUsIGdlb21ldHJ5KSB7XG4gICAgdmFyIGZlYXR1cmUgPSB7XG4gICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeSxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgdGFnczogdGFncyB8fCBudWxsLFxuICAgICAgICBtaW46IFsyLCAxXSwgLy8gaW5pdGlhbCBiYm94IHZhbHVlcztcbiAgICAgICAgbWF4OiBbLTEsIDBdICAvLyBub3RlIHRoYXQgY29vcmRzIGFyZSB1c3VhbGx5IGluIFswLi4xXSByYW5nZVxuICAgIH07XG4gICAgY2FsY0JCb3goZmVhdHVyZSk7XG4gICAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbmZ1bmN0aW9uIHByb2plY3QobG9ubGF0cywgdG9sZXJhbmNlKSB7XG4gICAgdmFyIHByb2plY3RlZCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9ubGF0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwcm9qZWN0ZWQucHVzaChwcm9qZWN0UG9pbnQobG9ubGF0c1tpXSkpO1xuICAgIH1cbiAgICBpZiAodG9sZXJhbmNlKSB7XG4gICAgICAgIHNpbXBsaWZ5KHByb2plY3RlZCwgdG9sZXJhbmNlKTtcbiAgICAgICAgY2FsY1NpemUocHJvamVjdGVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2plY3RlZDtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFBvaW50KHApIHtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4ocFsxXSAqIE1hdGguUEkgLyAxODApLFxuICAgICAgICB4ID0gKHBbMF0gLyAzNjAgKyAwLjUpLFxuICAgICAgICB5ID0gKDAuNSAtIDAuMjUgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpIC8gTWF0aC5QSSk7XG5cbiAgICB5ID0geSA8IC0xID8gLTEgOlxuICAgICAgICB5ID4gMSA/IDEgOiB5O1xuXG4gICAgcmV0dXJuIFt4LCB5LCAwXTtcbn1cblxuLy8gY2FsY3VsYXRlIGFyZWEgYW5kIGxlbmd0aCBvZiB0aGUgcG9seVxuZnVuY3Rpb24gY2FsY1NpemUocG9pbnRzKSB7XG4gICAgdmFyIGFyZWEgPSAwLFxuICAgICAgICBkaXN0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwLCBhLCBiOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBhID0gYiB8fCBwb2ludHNbaV07XG4gICAgICAgIGIgPSBwb2ludHNbaSArIDFdO1xuXG4gICAgICAgIGFyZWEgKz0gYVswXSAqIGJbMV0gLSBiWzBdICogYVsxXTtcblxuICAgICAgICAvLyB1c2UgTWFuaGF0dGFuIGRpc3RhbmNlIGluc3RlYWQgb2YgRXVjbGlkaWFuIG9uZSB0byBhdm9pZCBleHBlbnNpdmUgc3F1YXJlIHJvb3QgY29tcHV0YXRpb25cbiAgICAgICAgZGlzdCArPSBNYXRoLmFicyhiWzBdIC0gYVswXSkgKyBNYXRoLmFicyhiWzFdIC0gYVsxXSk7XG4gICAgfVxuICAgIHBvaW50cy5hcmVhID0gTWF0aC5hYnMoYXJlYSAvIDIpO1xuICAgIHBvaW50cy5kaXN0ID0gZGlzdDtcbn1cblxuLy8gY2FsY3VsYXRlIHRoZSBmZWF0dXJlIGJvdW5kaW5nIGJveCBmb3IgZmFzdGVyIGNsaXBwaW5nIGxhdGVyXG5mdW5jdGlvbiBjYWxjQkJveChmZWF0dXJlKSB7XG4gICAgdmFyIGdlb21ldHJ5ID0gZmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgbWluID0gZmVhdHVyZS5taW4sXG4gICAgICAgIG1heCA9IGZlYXR1cmUubWF4O1xuXG4gICAgaWYgKGZlYXR1cmUudHlwZSA9PT0gMSkgY2FsY1JpbmdCQm94KG1pbiwgbWF4LCBnZW9tZXRyeSk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5Lmxlbmd0aDsgaSsrKSBjYWxjUmluZ0JCb3gobWluLCBtYXgsIGdlb21ldHJ5W2ldKTtcblxuICAgIHJldHVybiBmZWF0dXJlO1xufVxuXG5mdW5jdGlvbiBjYWxjUmluZ0JCb3gobWluLCBtYXgsIHBvaW50cykge1xuICAgIGZvciAodmFyIGkgPSAwLCBwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHAgPSBwb2ludHNbaV07XG4gICAgICAgIG1pblswXSA9IE1hdGgubWluKHBbMF0sIG1pblswXSk7XG4gICAgICAgIG1heFswXSA9IE1hdGgubWF4KHBbMF0sIG1heFswXSk7XG4gICAgICAgIG1pblsxXSA9IE1hdGgubWluKHBbMV0sIG1pblsxXSk7XG4gICAgICAgIG1heFsxXSA9IE1hdGgubWF4KHBbMV0sIG1heFsxXSk7XG4gICAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlb2pzb252dDtcblxudmFyIGNvbnZlcnQgPSByZXF1aXJlKCcuL2NvbnZlcnQnKSwgLy8gR2VvSlNPTiBjb252ZXJzaW9uIGFuZCBwcmVwcm9jZXNzaW5nXG4gICAgY2xpcCA9IHJlcXVpcmUoJy4vY2xpcCcpLCAgICAgICAvLyBzdHJpcGUgY2xpcHBpbmcgYWxnb3JpdGhtXG4gICAgd3JhcCA9IHJlcXVpcmUoJy4vd3JhcCcpLCAgICAgICAvLyBkYXRlIGxpbmUgcHJvY2Vzc2luZ1xuICAgIGNyZWF0ZVRpbGUgPSByZXF1aXJlKCcuL3RpbGUnKTsgLy8gZmluYWwgc2ltcGxpZmllZCB0aWxlIGdlbmVyYXRpb25cblxuXG5mdW5jdGlvbiBnZW9qc29udnQoZGF0YSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgR2VvSlNPTlZUKGRhdGEsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBHZW9KU09OVlQoZGF0YSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBleHRlbmQoT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLCBvcHRpb25zKTtcblxuICAgIHZhciBkZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG5cbiAgICBpZiAoZGVidWcpIGNvbnNvbGUudGltZSgncHJlcHJvY2VzcyBkYXRhJyk7XG5cbiAgICB2YXIgejIgPSAxIDw8IG9wdGlvbnMubWF4Wm9vbSwgLy8gMl56XG4gICAgICAgIGZlYXR1cmVzID0gY29udmVydChkYXRhLCBvcHRpb25zLnRvbGVyYW5jZSAvICh6MiAqIG9wdGlvbnMuZXh0ZW50KSk7XG5cbiAgICB0aGlzLnRpbGVzID0ge307XG4gICAgdGhpcy50aWxlQ29vcmRzID0gW107XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgY29uc29sZS50aW1lRW5kKCdwcmVwcm9jZXNzIGRhdGEnKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2luZGV4OiBtYXhab29tOiAlZCwgbWF4UG9pbnRzOiAlZCcsIG9wdGlvbnMuaW5kZXhNYXhab29tLCBvcHRpb25zLmluZGV4TWF4UG9pbnRzKTtcbiAgICAgICAgY29uc29sZS50aW1lKCdnZW5lcmF0ZSB0aWxlcycpO1xuICAgICAgICB0aGlzLnN0YXRzID0ge307XG4gICAgICAgIHRoaXMudG90YWwgPSAwO1xuICAgIH1cblxuICAgIGZlYXR1cmVzID0gd3JhcChmZWF0dXJlcywgb3B0aW9ucy5idWZmZXIgLyBvcHRpb25zLmV4dGVudCwgaW50ZXJzZWN0WCk7XG5cbiAgICAvLyBzdGFydCBzbGljaW5nIGZyb20gdGhlIHRvcCB0aWxlIGRvd25cbiAgICBpZiAoZmVhdHVyZXMubGVuZ3RoKSB0aGlzLnNwbGl0VGlsZShmZWF0dXJlcywgMCwgMCwgMCk7XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVzLmxlbmd0aCkgY29uc29sZS5sb2coJ2ZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCcsIHRoaXMudGlsZXNbMF0ubnVtRmVhdHVyZXMsIHRoaXMudGlsZXNbMF0ubnVtUG9pbnRzKTtcbiAgICAgICAgY29uc29sZS50aW1lRW5kKCdnZW5lcmF0ZSB0aWxlcycpO1xuICAgICAgICBjb25zb2xlLmxvZygndGlsZXMgZ2VuZXJhdGVkOicsIHRoaXMudG90YWwsIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdHMpKTtcbiAgICB9XG59XG5cbkdlb0pTT05WVC5wcm90b3R5cGUub3B0aW9ucyA9IHtcbiAgICBtYXhab29tOiAxNCwgICAgICAgICAgICAvLyBtYXggem9vbSB0byBwcmVzZXJ2ZSBkZXRhaWwgb25cbiAgICBpbmRleE1heFpvb206IDUsICAgICAgICAvLyBtYXggem9vbSBpbiB0aGUgdGlsZSBpbmRleFxuICAgIGluZGV4TWF4UG9pbnRzOiAxMDAwMDAsIC8vIG1heCBudW1iZXIgb2YgcG9pbnRzIHBlciB0aWxlIGluIHRoZSB0aWxlIGluZGV4XG4gICAgc29saWRDaGlsZHJlbjogZmFsc2UsICAgLy8gd2hldGhlciB0byB0aWxlIHNvbGlkIHNxdWFyZSB0aWxlcyBmdXJ0aGVyXG4gICAgdG9sZXJhbmNlOiAzLCAgICAgICAgICAgLy8gc2ltcGxpZmljYXRpb24gdG9sZXJhbmNlIChoaWdoZXIgbWVhbnMgc2ltcGxlcilcbiAgICBleHRlbnQ6IDQwOTYsICAgICAgICAgICAvLyB0aWxlIGV4dGVudFxuICAgIGJ1ZmZlcjogNjQsICAgICAgICAgICAgIC8vIHRpbGUgYnVmZmVyIG9uIGVhY2ggc2lkZVxuICAgIGRlYnVnOiAwICAgICAgICAgICAgICAgIC8vIGxvZ2dpbmcgbGV2ZWwgKDAsIDEgb3IgMilcbn07XG5cbkdlb0pTT05WVC5wcm90b3R5cGUuc3BsaXRUaWxlID0gZnVuY3Rpb24gKGZlYXR1cmVzLCB6LCB4LCB5LCBjeiwgY3gsIGN5KSB7XG5cbiAgICB2YXIgc3RhY2sgPSBbZmVhdHVyZXMsIHosIHgsIHldLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBkZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG5cbiAgICAvLyBhdm9pZCByZWN1cnNpb24gYnkgdXNpbmcgYSBwcm9jZXNzaW5nIHF1ZXVlXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICB5ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIHggPSBzdGFjay5wb3AoKTtcbiAgICAgICAgeiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBmZWF0dXJlcyA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgIHZhciB6MiA9IDEgPDwgeixcbiAgICAgICAgICAgIGlkID0gdG9JRCh6LCB4LCB5KSxcbiAgICAgICAgICAgIHRpbGUgPSB0aGlzLnRpbGVzW2lkXSxcbiAgICAgICAgICAgIHRpbGVUb2xlcmFuY2UgPSB6ID09PSBvcHRpb25zLm1heFpvb20gPyAwIDogb3B0aW9ucy50b2xlcmFuY2UgLyAoejIgKiBvcHRpb25zLmV4dGVudCk7XG5cbiAgICAgICAgaWYgKCF0aWxlKSB7XG4gICAgICAgICAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLnRpbWUoJ2NyZWF0aW9uJyk7XG5cbiAgICAgICAgICAgIHRpbGUgPSB0aGlzLnRpbGVzW2lkXSA9IGNyZWF0ZVRpbGUoZmVhdHVyZXMsIHoyLCB4LCB5LCB0aWxlVG9sZXJhbmNlLCB6ID09PSBvcHRpb25zLm1heFpvb20pO1xuICAgICAgICAgICAgdGhpcy50aWxlQ29vcmRzLnB1c2goe3o6IHosIHg6IHgsIHk6IHl9KTtcblxuICAgICAgICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlYnVnID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGlsZSB6JWQtJWQtJWQgKGZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCwgc2ltcGxpZmllZDogJWQpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHosIHgsIHksIHRpbGUubnVtRmVhdHVyZXMsIHRpbGUubnVtUG9pbnRzLCB0aWxlLm51bVNpbXBsaWZpZWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ2NyZWF0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSAneicgKyB6O1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHNba2V5XSA9ICh0aGlzLnN0YXRzW2tleV0gfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWwrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNhdmUgcmVmZXJlbmNlIHRvIG9yaWdpbmFsIGdlb21ldHJ5IGluIHRpbGUgc28gdGhhdCB3ZSBjYW4gZHJpbGwgZG93biBsYXRlciBpZiB3ZSBzdG9wIG5vd1xuICAgICAgICB0aWxlLnNvdXJjZSA9IGZlYXR1cmVzO1xuXG4gICAgICAgIC8vIHN0b3AgdGlsaW5nIGlmIHRoZSB0aWxlIGlzIHNvbGlkIGNsaXBwZWQgc3F1YXJlXG4gICAgICAgIGlmICghb3B0aW9ucy5zb2xpZENoaWxkcmVuICYmIGlzQ2xpcHBlZFNxdWFyZSh0aWxlLCBvcHRpb25zLmV4dGVudCwgb3B0aW9ucy5idWZmZXIpKSBjb250aW51ZTtcblxuICAgICAgICAvLyBpZiBpdCdzIHRoZSBmaXJzdC1wYXNzIHRpbGluZ1xuICAgICAgICBpZiAoIWN6KSB7XG4gICAgICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiB3ZSByZWFjaGVkIG1heCB6b29tLCBvciBpZiB0aGUgdGlsZSBpcyB0b28gc2ltcGxlXG4gICAgICAgICAgICBpZiAoeiA9PT0gb3B0aW9ucy5pbmRleE1heFpvb20gfHwgdGlsZS5udW1Qb2ludHMgPD0gb3B0aW9ucy5pbmRleE1heFBvaW50cykgY29udGludWU7XG5cbiAgICAgICAgLy8gaWYgYSBkcmlsbGRvd24gdG8gYSBzcGVjaWZpYyB0aWxlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiB3ZSByZWFjaGVkIGJhc2Ugem9vbSBvciBvdXIgdGFyZ2V0IHRpbGUgem9vbVxuICAgICAgICAgICAgaWYgKHogPT09IG9wdGlvbnMubWF4Wm9vbSB8fCB6ID09PSBjeikgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIHN0b3AgdGlsaW5nIGlmIGl0J3Mgbm90IGFuIGFuY2VzdG9yIG9mIHRoZSB0YXJnZXQgdGlsZVxuICAgICAgICAgICAgdmFyIG0gPSAxIDw8IChjeiAtIHopO1xuICAgICAgICAgICAgaWYgKHggIT09IE1hdGguZmxvb3IoY3ggLyBtKSB8fCB5ICE9PSBNYXRoLmZsb29yKGN5IC8gbSkpIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgd2Ugc2xpY2UgZnVydGhlciBkb3duLCBubyBuZWVkIHRvIGtlZXAgc291cmNlIGdlb21ldHJ5XG4gICAgICAgIHRpbGUuc291cmNlID0gbnVsbDtcblxuICAgICAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLnRpbWUoJ2NsaXBwaW5nJyk7XG5cbiAgICAgICAgLy8gdmFsdWVzIHdlJ2xsIHVzZSBmb3IgY2xpcHBpbmdcbiAgICAgICAgdmFyIGsxID0gMC41ICogb3B0aW9ucy5idWZmZXIgLyBvcHRpb25zLmV4dGVudCxcbiAgICAgICAgICAgIGsyID0gMC41IC0gazEsXG4gICAgICAgICAgICBrMyA9IDAuNSArIGsxLFxuICAgICAgICAgICAgazQgPSAxICsgazEsXG4gICAgICAgICAgICB0bCwgYmwsIHRyLCBiciwgbGVmdCwgcmlnaHQ7XG5cbiAgICAgICAgdGwgPSBibCA9IHRyID0gYnIgPSBudWxsO1xuXG4gICAgICAgIGxlZnQgID0gY2xpcChmZWF0dXJlcywgejIsIHggLSBrMSwgeCArIGszLCAwLCBpbnRlcnNlY3RYLCB0aWxlLm1pblswXSwgdGlsZS5tYXhbMF0pO1xuICAgICAgICByaWdodCA9IGNsaXAoZmVhdHVyZXMsIHoyLCB4ICsgazIsIHggKyBrNCwgMCwgaW50ZXJzZWN0WCwgdGlsZS5taW5bMF0sIHRpbGUubWF4WzBdKTtcblxuICAgICAgICBpZiAobGVmdCkge1xuICAgICAgICAgICAgdGwgPSBjbGlwKGxlZnQsIHoyLCB5IC0gazEsIHkgKyBrMywgMSwgaW50ZXJzZWN0WSwgdGlsZS5taW5bMV0sIHRpbGUubWF4WzFdKTtcbiAgICAgICAgICAgIGJsID0gY2xpcChsZWZ0LCB6MiwgeSArIGsyLCB5ICsgazQsIDEsIGludGVyc2VjdFksIHRpbGUubWluWzFdLCB0aWxlLm1heFsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICAgIHRyID0gY2xpcChyaWdodCwgejIsIHkgLSBrMSwgeSArIGszLCAxLCBpbnRlcnNlY3RZLCB0aWxlLm1pblsxXSwgdGlsZS5tYXhbMV0pO1xuICAgICAgICAgICAgYnIgPSBjbGlwKHJpZ2h0LCB6MiwgeSArIGsyLCB5ICsgazQsIDEsIGludGVyc2VjdFksIHRpbGUubWluWzFdLCB0aWxlLm1heFsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLnRpbWVFbmQoJ2NsaXBwaW5nJyk7XG5cbiAgICAgICAgaWYgKHRsKSBzdGFjay5wdXNoKHRsLCB6ICsgMSwgeCAqIDIsICAgICB5ICogMik7XG4gICAgICAgIGlmIChibCkgc3RhY2sucHVzaChibCwgeiArIDEsIHggKiAyLCAgICAgeSAqIDIgKyAxKTtcbiAgICAgICAgaWYgKHRyKSBzdGFjay5wdXNoKHRyLCB6ICsgMSwgeCAqIDIgKyAxLCB5ICogMik7XG4gICAgICAgIGlmIChicikgc3RhY2sucHVzaChiciwgeiArIDEsIHggKiAyICsgMSwgeSAqIDIgKyAxKTtcbiAgICB9XG59O1xuXG5HZW9KU09OVlQucHJvdG90eXBlLmdldFRpbGUgPSBmdW5jdGlvbiAoeiwgeCwgeSkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBleHRlbnQgPSBvcHRpb25zLmV4dGVudCxcbiAgICAgICAgZGVidWcgPSBvcHRpb25zLmRlYnVnO1xuXG4gICAgdmFyIHoyID0gMSA8PCB6O1xuICAgIHggPSAoKHggJSB6MikgKyB6MikgJSB6MjsgLy8gd3JhcCB0aWxlIHggY29vcmRpbmF0ZVxuXG4gICAgdmFyIGlkID0gdG9JRCh6LCB4LCB5KTtcbiAgICBpZiAodGhpcy50aWxlc1tpZF0pIHJldHVybiB0cmFuc2Zvcm1UaWxlKHRoaXMudGlsZXNbaWRdLCBleHRlbnQpO1xuXG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS5sb2coJ2RyaWxsaW5nIGRvd24gdG8geiVkLSVkLSVkJywgeiwgeCwgeSk7XG5cbiAgICB2YXIgejAgPSB6LFxuICAgICAgICB4MCA9IHgsXG4gICAgICAgIHkwID0geSxcbiAgICAgICAgcGFyZW50O1xuXG4gICAgd2hpbGUgKCFwYXJlbnQgJiYgejAgPiAwKSB7XG4gICAgICAgIHowLS07XG4gICAgICAgIHgwID0gTWF0aC5mbG9vcih4MCAvIDIpO1xuICAgICAgICB5MCA9IE1hdGguZmxvb3IoeTAgLyAyKTtcbiAgICAgICAgcGFyZW50ID0gdGhpcy50aWxlc1t0b0lEKHowLCB4MCwgeTApXTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLmxvZygnZm91bmQgcGFyZW50IHRpbGUgeiVkLSVkLSVkJywgejAsIHgwLCB5MCk7XG5cbiAgICAvLyBpZiB3ZSBmb3VuZCBhIHBhcmVudCB0aWxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGdlb21ldHJ5LCB3ZSBjYW4gZHJpbGwgZG93biBmcm9tIGl0XG4gICAgaWYgKHBhcmVudC5zb3VyY2UpIHtcbiAgICAgICAgaWYgKGlzQ2xpcHBlZFNxdWFyZShwYXJlbnQsIGV4dGVudCwgb3B0aW9ucy5idWZmZXIpKSByZXR1cm4gdHJhbnNmb3JtVGlsZShwYXJlbnQsIGV4dGVudCk7XG5cbiAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lKCdkcmlsbGluZyBkb3duJyk7XG4gICAgICAgIHRoaXMuc3BsaXRUaWxlKHBhcmVudC5zb3VyY2UsIHowLCB4MCwgeTAsIHosIHgsIHkpO1xuICAgICAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLnRpbWVFbmQoJ2RyaWxsaW5nIGRvd24nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudGlsZXNbaWRdKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0cmFuc2Zvcm1UaWxlKHRoaXMudGlsZXNbaWRdLCBleHRlbnQpO1xufTtcblxuZnVuY3Rpb24gdHJhbnNmb3JtVGlsZSh0aWxlLCBleHRlbnQpIHtcbiAgICBpZiAodGlsZS50cmFuc2Zvcm1lZCkgcmV0dXJuIHRpbGU7XG5cbiAgICB2YXIgejIgPSB0aWxlLnoyLFxuICAgICAgICB0eCA9IHRpbGUueCxcbiAgICAgICAgdHkgPSB0aWxlLnksXG4gICAgICAgIGksIGosIGs7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGlsZS5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZmVhdHVyZSA9IHRpbGUuZmVhdHVyZXNbaV0sXG4gICAgICAgICAgICBnZW9tID0gZmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBnZW9tLmxlbmd0aDsgaisrKSBnZW9tW2pdID0gdHJhbnNmb3JtUG9pbnQoZ2VvbVtqXSwgZXh0ZW50LCB6MiwgdHgsIHR5KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGdlb20ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcmluZyA9IGdlb21bal07XG4gICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IHJpbmcubGVuZ3RoOyBrKyspIHJpbmdba10gPSB0cmFuc2Zvcm1Qb2ludChyaW5nW2tdLCBleHRlbnQsIHoyLCB0eCwgdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGlsZS50cmFuc2Zvcm1lZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGlsZTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUG9pbnQocCwgZXh0ZW50LCB6MiwgdHgsIHR5KSB7XG4gICAgdmFyIHggPSBNYXRoLnJvdW5kKGV4dGVudCAqIChwWzBdICogejIgLSB0eCkpLFxuICAgICAgICB5ID0gTWF0aC5yb3VuZChleHRlbnQgKiAocFsxXSAqIHoyIC0gdHkpKTtcbiAgICByZXR1cm4gW3gsIHldO1xufVxuXG5mdW5jdGlvbiB0b0lEKHosIHgsIHkpIHtcbiAgICByZXR1cm4gKCgoMSA8PCB6KSAqIHkgKyB4KSAqIDMyKSArIHo7XG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdFgoYSwgYiwgeCkge1xuICAgIHJldHVybiBbeCwgKHggLSBhWzBdKSAqIChiWzFdIC0gYVsxXSkgLyAoYlswXSAtIGFbMF0pICsgYVsxXSwgMV07XG59XG5mdW5jdGlvbiBpbnRlcnNlY3RZKGEsIGIsIHkpIHtcbiAgICByZXR1cm4gWyh5IC0gYVsxXSkgKiAoYlswXSAtIGFbMF0pIC8gKGJbMV0gLSBhWzFdKSArIGFbMF0sIHksIDFdO1xufVxuXG5mdW5jdGlvbiBleHRlbmQoZGVzdCwgc3JjKSB7XG4gICAgZm9yICh2YXIgaSBpbiBzcmMpIGRlc3RbaV0gPSBzcmNbaV07XG4gICAgcmV0dXJuIGRlc3Q7XG59XG5cbi8vIGNoZWNrcyB3aGV0aGVyIGEgdGlsZSBpcyBhIHdob2xlLWFyZWEgZmlsbCBhZnRlciBjbGlwcGluZzsgaWYgaXQgaXMsIHRoZXJlJ3Mgbm8gc2Vuc2Ugc2xpY2luZyBpdCBmdXJ0aGVyXG5mdW5jdGlvbiBpc0NsaXBwZWRTcXVhcmUodGlsZSwgZXh0ZW50LCBidWZmZXIpIHtcblxuICAgIHZhciBmZWF0dXJlcyA9IHRpbGUuc291cmNlO1xuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggIT09IDEpIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBmZWF0dXJlID0gZmVhdHVyZXNbMF07XG4gICAgaWYgKGZlYXR1cmUudHlwZSAhPT0gMyB8fCBmZWF0dXJlLmdlb21ldHJ5Lmxlbmd0aCA+IDEpIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBsZW4gPSBmZWF0dXJlLmdlb21ldHJ5WzBdLmxlbmd0aDtcbiAgICBpZiAobGVuICE9PSA1KSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciBwID0gdHJhbnNmb3JtUG9pbnQoZmVhdHVyZS5nZW9tZXRyeVswXVtpXSwgZXh0ZW50LCB0aWxlLnoyLCB0aWxlLngsIHRpbGUueSk7XG4gICAgICAgIGlmICgocFswXSAhPT0gLWJ1ZmZlciAmJiBwWzBdICE9PSBleHRlbnQgKyBidWZmZXIpIHx8XG4gICAgICAgICAgICAocFsxXSAhPT0gLWJ1ZmZlciAmJiBwWzFdICE9PSBleHRlbnQgKyBidWZmZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gc2ltcGxpZnk7XG5cbi8vIGNhbGN1bGF0ZSBzaW1wbGlmaWNhdGlvbiBkYXRhIHVzaW5nIG9wdGltaXplZCBEb3VnbGFzLVBldWNrZXIgYWxnb3JpdGhtXG5cbmZ1bmN0aW9uIHNpbXBsaWZ5KHBvaW50cywgdG9sZXJhbmNlKSB7XG5cbiAgICB2YXIgc3FUb2xlcmFuY2UgPSB0b2xlcmFuY2UgKiB0b2xlcmFuY2UsXG4gICAgICAgIGxlbiA9IHBvaW50cy5sZW5ndGgsXG4gICAgICAgIGZpcnN0ID0gMCxcbiAgICAgICAgbGFzdCA9IGxlbiAtIDEsXG4gICAgICAgIHN0YWNrID0gW10sXG4gICAgICAgIGksIG1heFNxRGlzdCwgc3FEaXN0LCBpbmRleDtcblxuICAgIC8vIGFsd2F5cyByZXRhaW4gdGhlIGVuZHBvaW50cyAoMSBpcyB0aGUgbWF4IHZhbHVlKVxuICAgIHBvaW50c1tmaXJzdF1bMl0gPSAxO1xuICAgIHBvaW50c1tsYXN0XVsyXSA9IDE7XG5cbiAgICAvLyBhdm9pZCByZWN1cnNpb24gYnkgdXNpbmcgYSBzdGFja1xuICAgIHdoaWxlIChsYXN0KSB7XG5cbiAgICAgICAgbWF4U3FEaXN0ID0gMDtcblxuICAgICAgICBmb3IgKGkgPSBmaXJzdCArIDE7IGkgPCBsYXN0OyBpKyspIHtcbiAgICAgICAgICAgIHNxRGlzdCA9IGdldFNxU2VnRGlzdChwb2ludHNbaV0sIHBvaW50c1tmaXJzdF0sIHBvaW50c1tsYXN0XSk7XG5cbiAgICAgICAgICAgIGlmIChzcURpc3QgPiBtYXhTcURpc3QpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgbWF4U3FEaXN0ID0gc3FEaXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1heFNxRGlzdCA+IHNxVG9sZXJhbmNlKSB7XG4gICAgICAgICAgICBwb2ludHNbaW5kZXhdWzJdID0gbWF4U3FEaXN0OyAvLyBzYXZlIHRoZSBwb2ludCBpbXBvcnRhbmNlIGluIHNxdWFyZWQgcGl4ZWxzIGFzIGEgeiBjb29yZGluYXRlXG4gICAgICAgICAgICBzdGFjay5wdXNoKGZpcnN0KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgZmlyc3QgPSBpbmRleDtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGFzdCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgZmlyc3QgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gc3F1YXJlIGRpc3RhbmNlIGZyb20gYSBwb2ludCB0byBhIHNlZ21lbnRcbmZ1bmN0aW9uIGdldFNxU2VnRGlzdChwLCBhLCBiKSB7XG5cbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLFxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSxcbiAgICAgICAgcHggPSBwWzBdLCBweSA9IHBbMV0sXG4gICAgICAgIGR4ID0gYnggLSB4LFxuICAgICAgICBkeSA9IGJ5IC0geTtcblxuICAgIGlmIChkeCAhPT0gMCB8fCBkeSAhPT0gMCkge1xuXG4gICAgICAgIHZhciB0ID0gKChweCAtIHgpICogZHggKyAocHkgLSB5KSAqIGR5KSAvIChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICAgICAgaWYgKHQgPiAxKSB7XG4gICAgICAgICAgICB4ID0gYng7XG4gICAgICAgICAgICB5ID0gYnk7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0ID4gMCkge1xuICAgICAgICAgICAgeCArPSBkeCAqIHQ7XG4gICAgICAgICAgICB5ICs9IGR5ICogdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGR4ID0gcHggLSB4O1xuICAgIGR5ID0gcHkgLSB5O1xuXG4gICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVRpbGU7XG5cbmZ1bmN0aW9uIGNyZWF0ZVRpbGUoZmVhdHVyZXMsIHoyLCB0eCwgdHksIHRvbGVyYW5jZSwgbm9TaW1wbGlmeSkge1xuICAgIHZhciB0aWxlID0ge1xuICAgICAgICBmZWF0dXJlczogW10sXG4gICAgICAgIG51bVBvaW50czogMCxcbiAgICAgICAgbnVtU2ltcGxpZmllZDogMCxcbiAgICAgICAgbnVtRmVhdHVyZXM6IDAsXG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgeDogdHgsXG4gICAgICAgIHk6IHR5LFxuICAgICAgICB6MjogejIsXG4gICAgICAgIHRyYW5zZm9ybWVkOiBmYWxzZSxcbiAgICAgICAgbWluOiBbMiwgMV0sXG4gICAgICAgIG1heDogWy0xLCAwXVxuICAgIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aWxlLm51bUZlYXR1cmVzKys7XG4gICAgICAgIGFkZEZlYXR1cmUodGlsZSwgZmVhdHVyZXNbaV0sIHRvbGVyYW5jZSwgbm9TaW1wbGlmeSk7XG5cbiAgICAgICAgdmFyIG1pbiA9IGZlYXR1cmVzW2ldLm1pbixcbiAgICAgICAgICAgIG1heCA9IGZlYXR1cmVzW2ldLm1heDtcblxuICAgICAgICBpZiAobWluWzBdIDwgdGlsZS5taW5bMF0pIHRpbGUubWluWzBdID0gbWluWzBdO1xuICAgICAgICBpZiAobWluWzFdIDwgdGlsZS5taW5bMV0pIHRpbGUubWluWzFdID0gbWluWzFdO1xuICAgICAgICBpZiAobWF4WzBdID4gdGlsZS5tYXhbMF0pIHRpbGUubWF4WzBdID0gbWF4WzBdO1xuICAgICAgICBpZiAobWF4WzFdID4gdGlsZS5tYXhbMV0pIHRpbGUubWF4WzFdID0gbWF4WzFdO1xuICAgIH1cbiAgICByZXR1cm4gdGlsZTtcbn1cblxuZnVuY3Rpb24gYWRkRmVhdHVyZSh0aWxlLCBmZWF0dXJlLCB0b2xlcmFuY2UsIG5vU2ltcGxpZnkpIHtcblxuICAgIHZhciBnZW9tID0gZmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgdHlwZSA9IGZlYXR1cmUudHlwZSxcbiAgICAgICAgc2ltcGxpZmllZCA9IFtdLFxuICAgICAgICBzcVRvbGVyYW5jZSA9IHRvbGVyYW5jZSAqIHRvbGVyYW5jZSxcbiAgICAgICAgaSwgaiwgcmluZywgcDtcblxuICAgIGlmICh0eXBlID09PSAxKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzaW1wbGlmaWVkLnB1c2goZ2VvbVtpXSk7XG4gICAgICAgICAgICB0aWxlLm51bVBvaW50cysrO1xuICAgICAgICAgICAgdGlsZS5udW1TaW1wbGlmaWVkKys7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gc2ltcGxpZnkgYW5kIHRyYW5zZm9ybSBwcm9qZWN0ZWQgY29vcmRpbmF0ZXMgZm9yIHRpbGUgZ2VvbWV0cnlcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJpbmcgPSBnZW9tW2ldO1xuXG4gICAgICAgICAgICAvLyBmaWx0ZXIgb3V0IHRpbnkgcG9seWxpbmVzICYgcG9seWdvbnNcbiAgICAgICAgICAgIGlmICghbm9TaW1wbGlmeSAmJiAoKHR5cGUgPT09IDIgJiYgcmluZy5kaXN0IDwgdG9sZXJhbmNlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZSA9PT0gMyAmJiByaW5nLmFyZWEgPCBzcVRvbGVyYW5jZSkpKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5udW1Qb2ludHMgKz0gcmluZy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzaW1wbGlmaWVkUmluZyA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmluZy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHAgPSByaW5nW2pdO1xuICAgICAgICAgICAgICAgIC8vIGtlZXAgcG9pbnRzIHdpdGggaW1wb3J0YW5jZSA+IHRvbGVyYW5jZVxuICAgICAgICAgICAgICAgIGlmIChub1NpbXBsaWZ5IHx8IHBbMl0gPiBzcVRvbGVyYW5jZSkge1xuICAgICAgICAgICAgICAgICAgICBzaW1wbGlmaWVkUmluZy5wdXNoKHApO1xuICAgICAgICAgICAgICAgICAgICB0aWxlLm51bVNpbXBsaWZpZWQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGlsZS5udW1Qb2ludHMrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2ltcGxpZmllZC5wdXNoKHNpbXBsaWZpZWRSaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaW1wbGlmaWVkLmxlbmd0aCkge1xuICAgICAgICB0aWxlLmZlYXR1cmVzLnB1c2goe1xuICAgICAgICAgICAgZ2VvbWV0cnk6IHNpbXBsaWZpZWQsXG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgdGFnczogZmVhdHVyZS50YWdzIHx8IG51bGxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xpcCA9IHJlcXVpcmUoJy4vY2xpcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXA7XG5cbmZ1bmN0aW9uIHdyYXAoZmVhdHVyZXMsIGJ1ZmZlciwgaW50ZXJzZWN0WCkge1xuICAgIHZhciBtZXJnZWQgPSBmZWF0dXJlcyxcbiAgICAgICAgbGVmdCAgPSBjbGlwKGZlYXR1cmVzLCAxLCAtMSAtIGJ1ZmZlciwgYnVmZmVyLCAgICAgMCwgaW50ZXJzZWN0WCwgLTEsIDIpLCAvLyBsZWZ0IHdvcmxkIGNvcHlcbiAgICAgICAgcmlnaHQgPSBjbGlwKGZlYXR1cmVzLCAxLCAgMSAtIGJ1ZmZlciwgMiArIGJ1ZmZlciwgMCwgaW50ZXJzZWN0WCwgLTEsIDIpOyAvLyByaWdodCB3b3JsZCBjb3B5XG5cbiAgICBpZiAobGVmdCB8fCByaWdodCkge1xuICAgICAgICBtZXJnZWQgPSBjbGlwKGZlYXR1cmVzLCAxLCAtYnVmZmVyLCAxICsgYnVmZmVyLCAwLCBpbnRlcnNlY3RYLCAtMSwgMik7IC8vIGNlbnRlciB3b3JsZCBjb3B5XG5cbiAgICAgICAgaWYgKGxlZnQpIG1lcmdlZCA9IHNoaWZ0RmVhdHVyZUNvb3JkcyhsZWZ0LCAxKS5jb25jYXQobWVyZ2VkKTsgLy8gbWVyZ2UgbGVmdCBpbnRvIGNlbnRlclxuICAgICAgICBpZiAocmlnaHQpIG1lcmdlZCA9IG1lcmdlZC5jb25jYXQoc2hpZnRGZWF0dXJlQ29vcmRzKHJpZ2h0LCAtMSkpOyAvLyBtZXJnZSByaWdodCBpbnRvIGNlbnRlclxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWQ7XG59XG5cbmZ1bmN0aW9uIHNoaWZ0RmVhdHVyZUNvb3JkcyhmZWF0dXJlcywgb2Zmc2V0KSB7XG4gICAgdmFyIG5ld0ZlYXR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmZWF0dXJlID0gZmVhdHVyZXNbaV0sXG4gICAgICAgICAgICB0eXBlID0gZmVhdHVyZS50eXBlO1xuXG4gICAgICAgIHZhciBuZXdHZW9tZXRyeTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gMSkge1xuICAgICAgICAgICAgbmV3R2VvbWV0cnkgPSBzaGlmdENvb3JkcyhmZWF0dXJlLmdlb21ldHJ5LCBvZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3R2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmVhdHVyZS5nZW9tZXRyeS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5ld0dlb21ldHJ5LnB1c2goc2hpZnRDb29yZHMoZmVhdHVyZS5nZW9tZXRyeVtqXSwgb2Zmc2V0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBuZXdGZWF0dXJlcy5wdXNoKHtcbiAgICAgICAgICAgIGdlb21ldHJ5OiBuZXdHZW9tZXRyeSxcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICB0YWdzOiBmZWF0dXJlLnRhZ3MsXG4gICAgICAgICAgICBtaW46IFtmZWF0dXJlLm1pblswXSArIG9mZnNldCwgZmVhdHVyZS5taW5bMV1dLFxuICAgICAgICAgICAgbWF4OiBbZmVhdHVyZS5tYXhbMF0gKyBvZmZzZXQsIGZlYXR1cmUubWF4WzFdXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RmVhdHVyZXM7XG59XG5cbmZ1bmN0aW9uIHNoaWZ0Q29vcmRzKHBvaW50cywgb2Zmc2V0KSB7XG4gICAgdmFyIG5ld1BvaW50cyA9IFtdO1xuICAgIG5ld1BvaW50cy5hcmVhID0gcG9pbnRzLmFyZWE7XG4gICAgbmV3UG9pbnRzLmRpc3QgPSBwb2ludHMuZGlzdDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5ld1BvaW50cy5wdXNoKFtwb2ludHNbaV1bMF0gKyBvZmZzZXQsIHBvaW50c1tpXVsxXSwgcG9pbnRzW2ldWzJdXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdQb2ludHM7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGludmVydFxuXG4vKipcbiAqIEludmVydHMgYSBtYXQzXG4gKlxuICogQGFsaWFzIG1hdDMuaW52ZXJ0XG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKi9cbmZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl1cbiAgdmFyIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV1cbiAgdmFyIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF1cblxuICB2YXIgYjAxID0gYTIyICogYTExIC0gYTEyICogYTIxXG4gIHZhciBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwXG4gIHZhciBiMjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjBcblxuICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG4gIHZhciBkZXQgPSBhMDAgKiBiMDEgKyBhMDEgKiBiMTEgKyBhMDIgKiBiMjFcblxuICBpZiAoIWRldCkgcmV0dXJuIG51bGxcbiAgZGV0ID0gMS4wIC8gZGV0XG5cbiAgb3V0WzBdID0gYjAxICogZGV0XG4gIG91dFsxXSA9ICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldFxuICBvdXRbMl0gPSAoYTEyICogYTAxIC0gYTAyICogYTExKSAqIGRldFxuICBvdXRbM10gPSBiMTEgKiBkZXRcbiAgb3V0WzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXRcbiAgb3V0WzVdID0gKC1hMTIgKiBhMDAgKyBhMDIgKiBhMTApICogZGV0XG4gIG91dFs2XSA9IGIyMSAqIGRldFxuICBvdXRbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXRcbiAgb3V0WzhdID0gKGExMSAqIGEwMCAtIGEwMSAqIGExMCkgKiBkZXRcblxuICByZXR1cm4gb3V0XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IG5vcm1hbEZyb21NYXQ0XG5cbi8qKlxuKiBDYWxjdWxhdGVzIGEgM3gzIG5vcm1hbCBtYXRyaXggKHRyYW5zcG9zZSBpbnZlcnNlKSBmcm9tIHRoZSA0eDQgbWF0cml4XG4qXG4qIEBhbGlhcyBtYXQzLm5vcm1hbEZyb21NYXQ0XG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcbiogQHBhcmFtIHttYXQ0fSBhIE1hdDQgdG8gZGVyaXZlIHRoZSBub3JtYWwgbWF0cml4IGZyb21cbipcbiogQHJldHVybnMge21hdDN9IG91dFxuKi9cbmZ1bmN0aW9uIG5vcm1hbEZyb21NYXQ0KG91dCwgYSkge1xuICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXVxuICB2YXIgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XVxuICB2YXIgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdXG4gIHZhciBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XVxuXG4gIHZhciBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTBcbiAgdmFyIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMFxuICB2YXIgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwXG4gIHZhciBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTFcbiAgdmFyIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMVxuICB2YXIgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyXG4gIHZhciBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzBcbiAgdmFyIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMFxuICB2YXIgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwXG4gIHZhciBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzFcbiAgdmFyIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMVxuICB2YXIgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuICB2YXIgZGV0ID0gYjAwICogYjExXG4gICAgICAgICAgLSBiMDEgKiBiMTBcbiAgICAgICAgICArIGIwMiAqIGIwOVxuICAgICAgICAgICsgYjAzICogYjA4XG4gICAgICAgICAgLSBiMDQgKiBiMDdcbiAgICAgICAgICArIGIwNSAqIGIwNlxuXG4gIGlmICghZGV0KSByZXR1cm4gbnVsbFxuICBkZXQgPSAxLjAgLyBkZXRcblxuICBvdXRbMF0gPSAoYTExICogYjExIC0gYTEyICogYjEwICsgYTEzICogYjA5KSAqIGRldFxuICBvdXRbMV0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldFxuICBvdXRbMl0gPSAoYTEwICogYjEwIC0gYTExICogYjA4ICsgYTEzICogYjA2KSAqIGRldFxuXG4gIG91dFszXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0XG4gIG91dFs0XSA9IChhMDAgKiBiMTEgLSBhMDIgKiBiMDggKyBhMDMgKiBiMDcpICogZGV0XG4gIG91dFs1XSA9IChhMDEgKiBiMDggLSBhMDAgKiBiMTAgLSBhMDMgKiBiMDYpICogZGV0XG5cbiAgb3V0WzZdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXRcbiAgb3V0WzddID0gKGEzMiAqIGIwMiAtIGEzMCAqIGIwNSAtIGEzMyAqIGIwMSkgKiBkZXRcbiAgb3V0WzhdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXRcblxuICByZXR1cm4gb3V0XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGNvcHk7XG5cbi8qKlxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDQgdG8gYW5vdGhlclxuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xuZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgb3V0WzJdID0gYVsyXTtcbiAgICBvdXRbM10gPSBhWzNdO1xuICAgIG91dFs0XSA9IGFbNF07XG4gICAgb3V0WzVdID0gYVs1XTtcbiAgICBvdXRbNl0gPSBhWzZdO1xuICAgIG91dFs3XSA9IGFbN107XG4gICAgb3V0WzhdID0gYVs4XTtcbiAgICBvdXRbOV0gPSBhWzldO1xuICAgIG91dFsxMF0gPSBhWzEwXTtcbiAgICBvdXRbMTFdID0gYVsxMV07XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICAgIHJldHVybiBvdXQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG5cbi8qKlxuICogU2V0IGEgbWF0NCB0byB0aGUgaWRlbnRpdHkgbWF0cml4XG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gICAgb3V0WzBdID0gMTtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNF0gPSAwO1xuICAgIG91dFs1XSA9IDE7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICAgIG91dFs4XSA9IDA7XG4gICAgb3V0WzldID0gMDtcbiAgICBvdXRbMTBdID0gMTtcbiAgICBvdXRbMTFdID0gMDtcbiAgICBvdXRbMTJdID0gMDtcbiAgICBvdXRbMTNdID0gMDtcbiAgICBvdXRbMTRdID0gMDtcbiAgICBvdXRbMTVdID0gMTtcbiAgICByZXR1cm4gb3V0O1xufTsiLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbG9va0F0O1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGxvb2stYXQgbWF0cml4IHdpdGggdGhlIGdpdmVuIGV5ZSBwb3NpdGlvbiwgZm9jYWwgcG9pbnQsIGFuZCB1cCBheGlzXG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xuICogQHBhcmFtIHt2ZWMzfSBleWUgUG9zaXRpb24gb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHt2ZWMzfSBjZW50ZXIgUG9pbnQgdGhlIHZpZXdlciBpcyBsb29raW5nIGF0XG4gKiBAcGFyYW0ge3ZlYzN9IHVwIHZlYzMgcG9pbnRpbmcgdXBcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xuZnVuY3Rpb24gbG9va0F0KG91dCwgZXllLCBjZW50ZXIsIHVwKSB7XG4gICAgdmFyIHgwLCB4MSwgeDIsIHkwLCB5MSwgeTIsIHowLCB6MSwgejIsIGxlbixcbiAgICAgICAgZXlleCA9IGV5ZVswXSxcbiAgICAgICAgZXlleSA9IGV5ZVsxXSxcbiAgICAgICAgZXlleiA9IGV5ZVsyXSxcbiAgICAgICAgdXB4ID0gdXBbMF0sXG4gICAgICAgIHVweSA9IHVwWzFdLFxuICAgICAgICB1cHogPSB1cFsyXSxcbiAgICAgICAgY2VudGVyeCA9IGNlbnRlclswXSxcbiAgICAgICAgY2VudGVyeSA9IGNlbnRlclsxXSxcbiAgICAgICAgY2VudGVyeiA9IGNlbnRlclsyXTtcblxuICAgIGlmIChNYXRoLmFicyhleWV4IC0gY2VudGVyeCkgPCAwLjAwMDAwMSAmJlxuICAgICAgICBNYXRoLmFicyhleWV5IC0gY2VudGVyeSkgPCAwLjAwMDAwMSAmJlxuICAgICAgICBNYXRoLmFicyhleWV6IC0gY2VudGVyeikgPCAwLjAwMDAwMSkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHkob3V0KTtcbiAgICB9XG5cbiAgICB6MCA9IGV5ZXggLSBjZW50ZXJ4O1xuICAgIHoxID0gZXlleSAtIGNlbnRlcnk7XG4gICAgejIgPSBleWV6IC0gY2VudGVyejtcblxuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQoejAgKiB6MCArIHoxICogejEgKyB6MiAqIHoyKTtcbiAgICB6MCAqPSBsZW47XG4gICAgejEgKj0gbGVuO1xuICAgIHoyICo9IGxlbjtcblxuICAgIHgwID0gdXB5ICogejIgLSB1cHogKiB6MTtcbiAgICB4MSA9IHVweiAqIHowIC0gdXB4ICogejI7XG4gICAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xuICAgIGxlbiA9IE1hdGguc3FydCh4MCAqIHgwICsgeDEgKiB4MSArIHgyICogeDIpO1xuICAgIGlmICghbGVuKSB7XG4gICAgICAgIHgwID0gMDtcbiAgICAgICAgeDEgPSAwO1xuICAgICAgICB4MiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gMSAvIGxlbjtcbiAgICAgICAgeDAgKj0gbGVuO1xuICAgICAgICB4MSAqPSBsZW47XG4gICAgICAgIHgyICo9IGxlbjtcbiAgICB9XG5cbiAgICB5MCA9IHoxICogeDIgLSB6MiAqIHgxO1xuICAgIHkxID0gejIgKiB4MCAtIHowICogeDI7XG4gICAgeTIgPSB6MCAqIHgxIC0gejEgKiB4MDtcblxuICAgIGxlbiA9IE1hdGguc3FydCh5MCAqIHkwICsgeTEgKiB5MSArIHkyICogeTIpO1xuICAgIGlmICghbGVuKSB7XG4gICAgICAgIHkwID0gMDtcbiAgICAgICAgeTEgPSAwO1xuICAgICAgICB5MiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gMSAvIGxlbjtcbiAgICAgICAgeTAgKj0gbGVuO1xuICAgICAgICB5MSAqPSBsZW47XG4gICAgICAgIHkyICo9IGxlbjtcbiAgICB9XG5cbiAgICBvdXRbMF0gPSB4MDtcbiAgICBvdXRbMV0gPSB5MDtcbiAgICBvdXRbMl0gPSB6MDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs0XSA9IHgxO1xuICAgIG91dFs1XSA9IHkxO1xuICAgIG91dFs2XSA9IHoxO1xuICAgIG91dFs3XSA9IDA7XG4gICAgb3V0WzhdID0geDI7XG4gICAgb3V0WzldID0geTI7XG4gICAgb3V0WzEwXSA9IHoyO1xuICAgIG91dFsxMV0gPSAwO1xuICAgIG91dFsxMl0gPSAtKHgwICogZXlleCArIHgxICogZXlleSArIHgyICogZXlleik7XG4gICAgb3V0WzEzXSA9IC0oeTAgKiBleWV4ICsgeTEgKiBleWV5ICsgeTIgKiBleWV6KTtcbiAgICBvdXRbMTRdID0gLSh6MCAqIGV5ZXggKyB6MSAqIGV5ZXkgKyB6MiAqIGV5ZXopO1xuICAgIG91dFsxNV0gPSAxO1xuXG4gICAgcmV0dXJuIG91dDtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBtdWx0aXBseTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ0J3NcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbmZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdO1xuXG4gICAgLy8gQ2FjaGUgb25seSB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBzZWNvbmQgbWF0cml4XG4gICAgdmFyIGIwICA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM107ICBcbiAgICBvdXRbMF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XG4gICAgb3V0WzFdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xuICAgIG91dFsyXSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcbiAgICBvdXRbM10gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XG5cbiAgICBiMCA9IGJbNF07IGIxID0gYls1XTsgYjIgPSBiWzZdOyBiMyA9IGJbN107XG4gICAgb3V0WzRdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xuICAgIG91dFs1XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcbiAgICBvdXRbNl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XG4gICAgb3V0WzddID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xuXG4gICAgYjAgPSBiWzhdOyBiMSA9IGJbOV07IGIyID0gYlsxMF07IGIzID0gYlsxMV07XG4gICAgb3V0WzhdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xuICAgIG91dFs5XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcbiAgICBvdXRbMTBdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xuICAgIG91dFsxMV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XG5cbiAgICBiMCA9IGJbMTJdOyBiMSA9IGJbMTNdOyBiMiA9IGJbMTRdOyBiMyA9IGJbMTVdO1xuICAgIG91dFsxMl0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcbiAgICBvdXRbMTRdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xuICAgIG91dFsxNV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XG4gICAgcmV0dXJuIG91dDtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBwZXJzcGVjdGl2ZTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXG4gKiBAcGFyYW0ge251bWJlcn0gZm92eSBWZXJ0aWNhbCBmaWVsZCBvZiB2aWV3IGluIHJhZGlhbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhc3BlY3QgQXNwZWN0IHJhdGlvLiB0eXBpY2FsbHkgdmlld3BvcnQgd2lkdGgvaGVpZ2h0XG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICogQHJldHVybnMge21hdDR9IG91dFxuICovXG5mdW5jdGlvbiBwZXJzcGVjdGl2ZShvdXQsIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XG4gICAgdmFyIGYgPSAxLjAgLyBNYXRoLnRhbihmb3Z5IC8gMiksXG4gICAgICAgIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcbiAgICBvdXRbMF0gPSBmIC8gYXNwZWN0O1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs0XSA9IDA7XG4gICAgb3V0WzVdID0gZjtcbiAgICBvdXRbNl0gPSAwO1xuICAgIG91dFs3XSA9IDA7XG4gICAgb3V0WzhdID0gMDtcbiAgICBvdXRbOV0gPSAwO1xuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcbiAgICBvdXRbMTFdID0gLTE7XG4gICAgb3V0WzEyXSA9IDA7XG4gICAgb3V0WzEzXSA9IDA7XG4gICAgb3V0WzE0XSA9ICgyICogZmFyICogbmVhcikgKiBuZjtcbiAgICBvdXRbMTVdID0gMDtcbiAgICByZXR1cm4gb3V0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHNjYWxlO1xuXG4vKipcbiAqIFNjYWxlcyB0aGUgbWF0NCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjM1xuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxuICogQHBhcmFtIHt2ZWMzfSB2IHRoZSB2ZWMzIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqKi9cbmZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgdikge1xuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV0sIHogPSB2WzJdO1xuXG4gICAgb3V0WzBdID0gYVswXSAqIHg7XG4gICAgb3V0WzFdID0gYVsxXSAqIHg7XG4gICAgb3V0WzJdID0gYVsyXSAqIHg7XG4gICAgb3V0WzNdID0gYVszXSAqIHg7XG4gICAgb3V0WzRdID0gYVs0XSAqIHk7XG4gICAgb3V0WzVdID0gYVs1XSAqIHk7XG4gICAgb3V0WzZdID0gYVs2XSAqIHk7XG4gICAgb3V0WzddID0gYVs3XSAqIHk7XG4gICAgb3V0WzhdID0gYVs4XSAqIHo7XG4gICAgb3V0WzldID0gYVs5XSAqIHo7XG4gICAgb3V0WzEwXSA9IGFbMTBdICogejtcbiAgICBvdXRbMTFdID0gYVsxMV0gKiB6O1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgICByZXR1cm4gb3V0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHRyYW5zbGF0ZTtcblxuLyoqXG4gKiBUcmFuc2xhdGUgYSBtYXQ0IGJ5IHRoZSBnaXZlbiB2ZWN0b3JcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdmVjdG9yIHRvIHRyYW5zbGF0ZSBieVxuICogQHJldHVybnMge21hdDR9IG91dFxuICovXG5mdW5jdGlvbiB0cmFuc2xhdGUob3V0LCBhLCB2KSB7XG4gICAgdmFyIHggPSB2WzBdLCB5ID0gdlsxXSwgeiA9IHZbMl0sXG4gICAgICAgIGEwMCwgYTAxLCBhMDIsIGEwMyxcbiAgICAgICAgYTEwLCBhMTEsIGExMiwgYTEzLFxuICAgICAgICBhMjAsIGEyMSwgYTIyLCBhMjM7XG5cbiAgICBpZiAoYSA9PT0gb3V0KSB7XG4gICAgICAgIG91dFsxMl0gPSBhWzBdICogeCArIGFbNF0gKiB5ICsgYVs4XSAqIHogKyBhWzEyXTtcbiAgICAgICAgb3V0WzEzXSA9IGFbMV0gKiB4ICsgYVs1XSAqIHkgKyBhWzldICogeiArIGFbMTNdO1xuICAgICAgICBvdXRbMTRdID0gYVsyXSAqIHggKyBhWzZdICogeSArIGFbMTBdICogeiArIGFbMTRdO1xuICAgICAgICBvdXRbMTVdID0gYVszXSAqIHggKyBhWzddICogeSArIGFbMTFdICogeiArIGFbMTVdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGEwMCA9IGFbMF07IGEwMSA9IGFbMV07IGEwMiA9IGFbMl07IGEwMyA9IGFbM107XG4gICAgICAgIGExMCA9IGFbNF07IGExMSA9IGFbNV07IGExMiA9IGFbNl07IGExMyA9IGFbN107XG4gICAgICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcblxuICAgICAgICBvdXRbMF0gPSBhMDA7IG91dFsxXSA9IGEwMTsgb3V0WzJdID0gYTAyOyBvdXRbM10gPSBhMDM7XG4gICAgICAgIG91dFs0XSA9IGExMDsgb3V0WzVdID0gYTExOyBvdXRbNl0gPSBhMTI7IG91dFs3XSA9IGExMztcbiAgICAgICAgb3V0WzhdID0gYTIwOyBvdXRbOV0gPSBhMjE7IG91dFsxMF0gPSBhMjI7IG91dFsxMV0gPSBhMjM7XG5cbiAgICAgICAgb3V0WzEyXSA9IGEwMCAqIHggKyBhMTAgKiB5ICsgYTIwICogeiArIGFbMTJdO1xuICAgICAgICBvdXRbMTNdID0gYTAxICogeCArIGExMSAqIHkgKyBhMjEgKiB6ICsgYVsxM107XG4gICAgICAgIG91dFsxNF0gPSBhMDIgKiB4ICsgYTEyICogeSArIGEyMiAqIHogKyBhWzE0XTtcbiAgICAgICAgb3V0WzE1XSA9IGEwMyAqIHggKyBhMTMgKiB5ICsgYTIzICogeiArIGFbMTVdO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcGFyc2VFcnJvcnNcblxuZnVuY3Rpb24gcGFyc2VFcnJvcnMobG9nKSB7XG4gIGxvZyA9IFN0cmluZyhsb2cpXG5cbiAgdmFyIGxvZ3MgPSBbXVxuICB2YXIgcmVzdWx0XG5cbiAgd2hpbGUgKHJlc3VsdCA9IGxvZy5tYXRjaCgvRVJST1JcXDooW15cXG5dKykvKSkge1xuICAgIGxvZyA9IGxvZy5zbGljZShyZXN1bHQuaW5kZXggKyAxKVxuXG4gICAgdmFyIGxpbmUgPSByZXN1bHRbMV0udHJpbSgpXG4gICAgdmFyIHNlcHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICB2YXIgZW1zZyA9IHNlcHMuc2xpY2UoMikuam9pbignOicpLnRyaW0oKVxuICAgIHZhciBmaWxlID0gcGFyc2VJbnQoc2Vwc1swXSwgMTApXG4gICAgdmFyIGxpbmUgPSBwYXJzZUludChzZXBzWzFdLCAxMClcblxuICAgIGxvZ3MucHVzaCh7XG4gICAgICAgIG1lc3NhZ2U6IGVtc2dcbiAgICAgICwgZmlsZTogZmlsZVxuICAgICAgLCBsaW5lOiBsaW5lXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBsb2dzXG59XG4iLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIlxuLyoqXG4gKiBpc0FycmF5XG4gKi9cblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIHRvU3RyaW5nXG4gKi9cblxudmFyIHN0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogV2hldGhlciBvciBub3QgdGhlIGdpdmVuIGB2YWxgXG4gKiBpcyBhbiBhcnJheS5cbiAqXG4gKiBleGFtcGxlOlxuICpcbiAqICAgICAgICBpc0FycmF5KFtdKTtcbiAqICAgICAgICAvLyA+IHRydWVcbiAqICAgICAgICBpc0FycmF5KGFyZ3VtZW50cyk7XG4gKiAgICAgICAgLy8gPiBmYWxzZVxuICogICAgICAgIGlzQXJyYXkoJycpO1xuICogICAgICAgIC8vID4gZmFsc2VcbiAqXG4gKiBAcGFyYW0ge21peGVkfSB2YWxcbiAqIEByZXR1cm4ge2Jvb2x9XG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5IHx8IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0dXJuICEhIHZhbCAmJiAnW29iamVjdCBBcnJheV0nID09IHN0ci5jYWxsKHZhbCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciB5YW1sID0gcmVxdWlyZSgnLi9saWIvanMteWFtbC5qcycpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0geWFtbDtcbiIsIid1c2Ugc3RyaWN0JztcblxuXG52YXIgbG9hZGVyID0gcmVxdWlyZSgnLi9qcy15YW1sL2xvYWRlcicpO1xuLy8gdmFyIGR1bXBlciA9IHJlcXVpcmUoJy4vanMteWFtbC9kdW1wZXInKTtcblxuXG5mdW5jdGlvbiBkZXByZWNhdGVkKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uICcgKyBuYW1lICsgJyBpcyBkZXByZWNhdGVkIGFuZCBjYW5ub3QgYmUgdXNlZC4nKTtcbiAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cy5UeXBlICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9qcy15YW1sL3R5cGUnKTtcbm1vZHVsZS5leHBvcnRzLlNjaGVtYSAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hJyk7XG5tb2R1bGUuZXhwb3J0cy5GQUlMU0FGRV9TQ0hFTUEgICAgID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZScpO1xubW9kdWxlLmV4cG9ydHMuSlNPTl9TQ0hFTUEgICAgICAgICA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvanNvbicpO1xubW9kdWxlLmV4cG9ydHMuQ09SRV9TQ0hFTUEgICAgICAgICA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvY29yZScpO1xubW9kdWxlLmV4cG9ydHMuREVGQVVMVF9TQUZFX1NDSEVNQSA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlJyk7XG5tb2R1bGUuZXhwb3J0cy5ERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZSgnLi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X2Z1bGwnKTtcbm1vZHVsZS5leHBvcnRzLmxvYWQgICAgICAgICAgICAgICAgPSBsb2FkZXIubG9hZDtcbm1vZHVsZS5leHBvcnRzLmxvYWRBbGwgICAgICAgICAgICAgPSBsb2FkZXIubG9hZEFsbDtcbm1vZHVsZS5leHBvcnRzLnNhZmVMb2FkICAgICAgICAgICAgPSBsb2FkZXIuc2FmZUxvYWQ7XG5tb2R1bGUuZXhwb3J0cy5zYWZlTG9hZEFsbCAgICAgICAgID0gbG9hZGVyLnNhZmVMb2FkQWxsO1xuLy8gbW9kdWxlLmV4cG9ydHMuZHVtcCAgICAgICAgICAgICAgICA9IGR1bXBlci5kdW1wO1xuLy8gbW9kdWxlLmV4cG9ydHMuc2FmZUR1bXAgICAgICAgICAgICA9IGR1bXBlci5zYWZlRHVtcDtcbm1vZHVsZS5leHBvcnRzLllBTUxFeGNlcHRpb24gICAgICAgPSByZXF1aXJlKCcuL2pzLXlhbWwvZXhjZXB0aW9uJyk7XG5cbi8vIERlcHJlY2F0ZWQgc2NoZW1hIG5hbWVzIGZyb20gSlMtWUFNTCAyLjAueFxubW9kdWxlLmV4cG9ydHMuTUlOSU1BTF9TQ0hFTUEgPSByZXF1aXJlKCcuL2pzLXlhbWwvc2NoZW1hL2ZhaWxzYWZlJyk7XG5tb2R1bGUuZXhwb3J0cy5TQUZFX1NDSEVNQSAgICA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlJyk7XG5tb2R1bGUuZXhwb3J0cy5ERUZBVUxUX1NDSEVNQSA9IHJlcXVpcmUoJy4vanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsJyk7XG5cbi8vIERlcHJlY2F0ZWQgZnVuY3Rpb25zIGZyb20gSlMtWUFNTCAxLngueFxubW9kdWxlLmV4cG9ydHMuc2NhbiAgICAgICAgICAgPSBkZXByZWNhdGVkKCdzY2FuJyk7XG5tb2R1bGUuZXhwb3J0cy5wYXJzZSAgICAgICAgICA9IGRlcHJlY2F0ZWQoJ3BhcnNlJyk7XG5tb2R1bGUuZXhwb3J0cy5jb21wb3NlICAgICAgICA9IGRlcHJlY2F0ZWQoJ2NvbXBvc2UnKTtcbm1vZHVsZS5leHBvcnRzLmFkZENvbnN0cnVjdG9yID0gZGVwcmVjYXRlZCgnYWRkQ29uc3RydWN0b3InKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuXG5mdW5jdGlvbiBpc05vdGhpbmcoc3ViamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBzdWJqZWN0ID09PSAndW5kZWZpbmVkJykgfHwgKHN1YmplY3QgPT09IG51bGwpO1xufVxuXG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHN1YmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3ViamVjdCA9PT0gJ29iamVjdCcpICYmIChzdWJqZWN0ICE9PSBudWxsKTtcbn1cblxuXG5mdW5jdGlvbiB0b0FycmF5KHNlcXVlbmNlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHNlcXVlbmNlKSkgcmV0dXJuIHNlcXVlbmNlO1xuICBlbHNlIGlmIChpc05vdGhpbmcoc2VxdWVuY2UpKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIFsgc2VxdWVuY2UgXTtcbn1cblxuXG5mdW5jdGlvbiBleHRlbmQodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGluZGV4LCBsZW5ndGgsIGtleSwgc291cmNlS2V5cztcblxuICBpZiAoc291cmNlKSB7XG4gICAgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gc291cmNlS2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBrZXkgPSBzb3VyY2VLZXlzW2luZGV4XTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG5mdW5jdGlvbiByZXBlYXQoc3RyaW5nLCBjb3VudCkge1xuICB2YXIgcmVzdWx0ID0gJycsIGN5Y2xlO1xuXG4gIGZvciAoY3ljbGUgPSAwOyBjeWNsZSA8IGNvdW50OyBjeWNsZSArPSAxKSB7XG4gICAgcmVzdWx0ICs9IHN0cmluZztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuZnVuY3Rpb24gaXNOZWdhdGl2ZVplcm8obnVtYmVyKSB7XG4gIHJldHVybiAobnVtYmVyID09PSAwKSAmJiAoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID09PSAxIC8gbnVtYmVyKTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cy5pc05vdGhpbmcgICAgICA9IGlzTm90aGluZztcbm1vZHVsZS5leHBvcnRzLmlzT2JqZWN0ICAgICAgID0gaXNPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cy50b0FycmF5ICAgICAgICA9IHRvQXJyYXk7XG5tb2R1bGUuZXhwb3J0cy5yZXBlYXQgICAgICAgICA9IHJlcGVhdDtcbm1vZHVsZS5leHBvcnRzLmlzTmVnYXRpdmVaZXJvID0gaXNOZWdhdGl2ZVplcm87XG5tb2R1bGUuZXhwb3J0cy5leHRlbmQgICAgICAgICA9IGV4dGVuZDtcbiIsIi8vIFlBTUwgZXJyb3IgY2xhc3MuIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODQ1ODk4NFxuLy9cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gWUFNTEV4Y2VwdGlvbihyZWFzb24sIG1hcmspIHtcbiAgLy8gU3VwZXIgY29uc3RydWN0b3JcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICAvLyBJbmNsdWRlIHN0YWNrIHRyYWNlIGluIGVycm9yIG9iamVjdFxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAvLyBDaHJvbWUgYW5kIE5vZGVKU1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIC8vIEZGLCBJRSAxMCsgYW5kIFNhZmFyaSA2Ky4gRmFsbGJhY2sgZm9yIG90aGVyc1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrIHx8ICcnO1xuICB9XG5cbiAgdGhpcy5uYW1lID0gJ1lBTUxFeGNlcHRpb24nO1xuICB0aGlzLnJlYXNvbiA9IHJlYXNvbjtcbiAgdGhpcy5tYXJrID0gbWFyaztcbiAgdGhpcy5tZXNzYWdlID0gKHRoaXMucmVhc29uIHx8ICcodW5rbm93biByZWFzb24pJykgKyAodGhpcy5tYXJrID8gJyAnICsgdGhpcy5tYXJrLnRvU3RyaW5nKCkgOiAnJyk7XG59XG5cblxuLy8gSW5oZXJpdCBmcm9tIEVycm9yXG5ZQU1MRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbllBTUxFeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gWUFNTEV4Y2VwdGlvbjtcblxuXG5ZQU1MRXhjZXB0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGNvbXBhY3QpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMubmFtZSArICc6ICc7XG5cbiAgcmVzdWx0ICs9IHRoaXMucmVhc29uIHx8ICcodW5rbm93biByZWFzb24pJztcblxuICBpZiAoIWNvbXBhY3QgJiYgdGhpcy5tYXJrKSB7XG4gICAgcmVzdWx0ICs9ICcgJyArIHRoaXMubWFyay50b1N0cmluZygpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBZQU1MRXhjZXB0aW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKmVzbGludC1kaXNhYmxlIG1heC1sZW4sbm8tdXNlLWJlZm9yZS1kZWZpbmUqL1xuXG52YXIgY29tbW9uICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgWUFNTEV4Y2VwdGlvbiAgICAgICA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG52YXIgTWFyayAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vbWFyaycpO1xudmFyIERFRkFVTFRfU0FGRV9TQ0hFTUEgPSByZXF1aXJlKCcuL3NjaGVtYS9kZWZhdWx0X3NhZmUnKTtcbnZhciBERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZSgnLi9zY2hlbWEvZGVmYXVsdF9mdWxsJyk7XG5cblxudmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cblxudmFyIENPTlRFWFRfRkxPV19JTiAgID0gMTtcbnZhciBDT05URVhUX0ZMT1dfT1VUICA9IDI7XG52YXIgQ09OVEVYVF9CTE9DS19JTiAgPSAzO1xudmFyIENPTlRFWFRfQkxPQ0tfT1VUID0gNDtcblxuXG52YXIgQ0hPTVBJTkdfQ0xJUCAgPSAxO1xudmFyIENIT01QSU5HX1NUUklQID0gMjtcbnZhciBDSE9NUElOR19LRUVQICA9IDM7XG5cblxudmFyIFBBVFRFUk5fTk9OX1BSSU5UQUJMRSAgICAgICAgID0gL1tcXHgwMC1cXHgwOFxceDBCXFx4MENcXHgwRS1cXHgxRlxceDdGLVxceDg0XFx4ODYtXFx4OUZcXHVGRkZFXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0vO1xudmFyIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTID0gL1tcXHg4NVxcdTIwMjhcXHUyMDI5XS87XG52YXIgUEFUVEVSTl9GTE9XX0lORElDQVRPUlMgICAgICAgPSAvWyxcXFtcXF1cXHtcXH1dLztcbnZhciBQQVRURVJOX1RBR19IQU5ETEUgICAgICAgICAgICA9IC9eKD86IXwhIXwhW2EtelxcLV0rISkkL2k7XG52YXIgUEFUVEVSTl9UQUdfVVJJICAgICAgICAgICAgICAgPSAvXig/OiF8W14sXFxbXFxdXFx7XFx9XSkoPzolWzAtOWEtZl17Mn18WzAtOWEtelxcLSM7XFwvXFw/OkAmPVxcK1xcJCxfXFwuIX5cXConXFwoXFwpXFxbXFxdXSkqJC9pO1xuXG5cbmZ1bmN0aW9uIGlzX0VPTChjKSB7XG4gIHJldHVybiAoYyA9PT0gMHgwQS8qIExGICovKSB8fCAoYyA9PT0gMHgwRC8qIENSICovKTtcbn1cblxuZnVuY3Rpb24gaXNfV0hJVEVfU1BBQ0UoYykge1xuICByZXR1cm4gKGMgPT09IDB4MDkvKiBUYWIgKi8pIHx8IChjID09PSAweDIwLyogU3BhY2UgKi8pO1xufVxuXG5mdW5jdGlvbiBpc19XU19PUl9FT0woYykge1xuICByZXR1cm4gKGMgPT09IDB4MDkvKiBUYWIgKi8pIHx8XG4gICAgICAgICAoYyA9PT0gMHgyMC8qIFNwYWNlICovKSB8fFxuICAgICAgICAgKGMgPT09IDB4MEEvKiBMRiAqLykgfHxcbiAgICAgICAgIChjID09PSAweDBELyogQ1IgKi8pO1xufVxuXG5mdW5jdGlvbiBpc19GTE9XX0lORElDQVRPUihjKSB7XG4gIHJldHVybiBjID09PSAweDJDLyogLCAqLyB8fFxuICAgICAgICAgYyA9PT0gMHg1Qi8qIFsgKi8gfHxcbiAgICAgICAgIGMgPT09IDB4NUQvKiBdICovIHx8XG4gICAgICAgICBjID09PSAweDdCLyogeyAqLyB8fFxuICAgICAgICAgYyA9PT0gMHg3RC8qIH0gKi87XG59XG5cbmZ1bmN0aW9uIGZyb21IZXhDb2RlKGMpIHtcbiAgdmFyIGxjO1xuXG4gIGlmICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzOS8qIDkgKi8pKSB7XG4gICAgcmV0dXJuIGMgLSAweDMwO1xuICB9XG5cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlKi9cbiAgbGMgPSBjIHwgMHgyMDtcblxuICBpZiAoKDB4NjEvKiBhICovIDw9IGxjKSAmJiAobGMgPD0gMHg2Ni8qIGYgKi8pKSB7XG4gICAgcmV0dXJuIGxjIC0gMHg2MSArIDEwO1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVkSGV4TGVuKGMpIHtcbiAgaWYgKGMgPT09IDB4NzgvKiB4ICovKSB7IHJldHVybiAyOyB9XG4gIGlmIChjID09PSAweDc1LyogdSAqLykgeyByZXR1cm4gNDsgfVxuICBpZiAoYyA9PT0gMHg1NS8qIFUgKi8pIHsgcmV0dXJuIDg7IH1cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGZyb21EZWNpbWFsQ29kZShjKSB7XG4gIGlmICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzOS8qIDkgKi8pKSB7XG4gICAgcmV0dXJuIGMgLSAweDMwO1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBzaW1wbGVFc2NhcGVTZXF1ZW5jZShjKSB7XG4gIHJldHVybiAoYyA9PT0gMHgzMC8qIDAgKi8pID8gJ1xceDAwJyA6XG4gICAgICAgIChjID09PSAweDYxLyogYSAqLykgPyAnXFx4MDcnIDpcbiAgICAgICAgKGMgPT09IDB4NjIvKiBiICovKSA/ICdcXHgwOCcgOlxuICAgICAgICAoYyA9PT0gMHg3NC8qIHQgKi8pID8gJ1xceDA5JyA6XG4gICAgICAgIChjID09PSAweDA5LyogVGFiICovKSA/ICdcXHgwOScgOlxuICAgICAgICAoYyA9PT0gMHg2RS8qIG4gKi8pID8gJ1xceDBBJyA6XG4gICAgICAgIChjID09PSAweDc2LyogdiAqLykgPyAnXFx4MEInIDpcbiAgICAgICAgKGMgPT09IDB4NjYvKiBmICovKSA/ICdcXHgwQycgOlxuICAgICAgICAoYyA9PT0gMHg3Mi8qIHIgKi8pID8gJ1xceDBEJyA6XG4gICAgICAgIChjID09PSAweDY1LyogZSAqLykgPyAnXFx4MUInIDpcbiAgICAgICAgKGMgPT09IDB4MjAvKiBTcGFjZSAqLykgPyAnICcgOlxuICAgICAgICAoYyA9PT0gMHgyMi8qIFwiICovKSA/ICdcXHgyMicgOlxuICAgICAgICAoYyA9PT0gMHgyRi8qIC8gKi8pID8gJy8nIDpcbiAgICAgICAgKGMgPT09IDB4NUMvKiBcXCAqLykgPyAnXFx4NUMnIDpcbiAgICAgICAgKGMgPT09IDB4NEUvKiBOICovKSA/ICdcXHg4NScgOlxuICAgICAgICAoYyA9PT0gMHg1Ri8qIF8gKi8pID8gJ1xceEEwJyA6XG4gICAgICAgIChjID09PSAweDRDLyogTCAqLykgPyAnXFx1MjAyOCcgOlxuICAgICAgICAoYyA9PT0gMHg1MC8qIFAgKi8pID8gJ1xcdTIwMjknIDogJyc7XG59XG5cbmZ1bmN0aW9uIGNoYXJGcm9tQ29kZXBvaW50KGMpIHtcbiAgaWYgKGMgPD0gMHhGRkZGKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gIH1cbiAgLy8gRW5jb2RlIFVURi0xNiBzdXJyb2dhdGUgcGFpclxuICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtMTYjQ29kZV9wb2ludHNfVS4yQjAxMDAwMF90b19VLjJCMTBGRkZGXG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAtIDB4MDEwMDAwKSA+PiAxMCkgKyAweEQ4MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYyAtIDB4MDEwMDAwKSAmIDB4MDNGRikgKyAweERDMDApO1xufVxuXG52YXIgc2ltcGxlRXNjYXBlQ2hlY2sgPSBuZXcgQXJyYXkoMjU2KTsgLy8gaW50ZWdlciwgZm9yIGZhc3QgYWNjZXNzXG52YXIgc2ltcGxlRXNjYXBlTWFwID0gbmV3IEFycmF5KDI1Nik7XG5mb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gIHNpbXBsZUVzY2FwZUNoZWNrW2ldID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaSkgPyAxIDogMDtcbiAgc2ltcGxlRXNjYXBlTWFwW2ldID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaSk7XG59XG5cblxuZnVuY3Rpb24gU3RhdGUoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdGhpcy5pbnB1dCA9IGlucHV0O1xuXG4gIHRoaXMuZmlsZW5hbWUgID0gb3B0aW9uc1snZmlsZW5hbWUnXSAgfHwgbnVsbDtcbiAgdGhpcy5zY2hlbWEgICAgPSBvcHRpb25zWydzY2hlbWEnXSAgICB8fCBERUZBVUxUX0ZVTExfU0NIRU1BO1xuICB0aGlzLm9uV2FybmluZyA9IG9wdGlvbnNbJ29uV2FybmluZyddIHx8IG51bGw7XG4gIHRoaXMubGVnYWN5ICAgID0gb3B0aW9uc1snbGVnYWN5J10gICAgfHwgZmFsc2U7XG4gIHRoaXMuanNvbiAgICAgID0gb3B0aW9uc1snanNvbiddICAgICAgfHwgZmFsc2U7XG4gIHRoaXMubGlzdGVuZXIgID0gb3B0aW9uc1snbGlzdGVuZXInXSAgfHwgbnVsbDtcblxuICB0aGlzLmltcGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0O1xuICB0aGlzLnR5cGVNYXAgICAgICAgPSB0aGlzLnNjaGVtYS5jb21waWxlZFR5cGVNYXA7XG5cbiAgdGhpcy5sZW5ndGggICAgID0gaW5wdXQubGVuZ3RoO1xuICB0aGlzLnBvc2l0aW9uICAgPSAwO1xuICB0aGlzLmxpbmUgICAgICAgPSAwO1xuICB0aGlzLmxpbmVTdGFydCAgPSAwO1xuICB0aGlzLmxpbmVJbmRlbnQgPSAwO1xuXG4gIHRoaXMuZG9jdW1lbnRzID0gW107XG5cbiAgLypcbiAgdGhpcy52ZXJzaW9uO1xuICB0aGlzLmNoZWNrTGluZUJyZWFrcztcbiAgdGhpcy50YWdNYXA7XG4gIHRoaXMuYW5jaG9yTWFwO1xuICB0aGlzLnRhZztcbiAgdGhpcy5hbmNob3I7XG4gIHRoaXMua2luZDtcbiAgdGhpcy5yZXN1bHQ7Ki9cblxufVxuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBZQU1MRXhjZXB0aW9uKFxuICAgIG1lc3NhZ2UsXG4gICAgbmV3IE1hcmsoc3RhdGUuZmlsZW5hbWUsIHN0YXRlLmlucHV0LCBzdGF0ZS5wb3NpdGlvbiwgc3RhdGUubGluZSwgKHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0KSkpO1xufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gIHRocm93IGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiB0aHJvd1dhcm5pbmcoc3RhdGUsIG1lc3NhZ2UpIHtcbiAgaWYgKHN0YXRlLm9uV2FybmluZykge1xuICAgIHN0YXRlLm9uV2FybmluZy5jYWxsKG51bGwsIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpKTtcbiAgfVxufVxuXG5cbnZhciBkaXJlY3RpdmVIYW5kbGVycyA9IHtcblxuICBZQU1MOiBmdW5jdGlvbiBoYW5kbGVZYW1sRGlyZWN0aXZlKHN0YXRlLCBuYW1lLCBhcmdzKSB7XG5cbiAgICB2YXIgbWF0Y2gsIG1ham9yLCBtaW5vcjtcblxuICAgIGlmIChzdGF0ZS52ZXJzaW9uICE9PSBudWxsKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlJyk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIG1hdGNoID0gL14oWzAtOV0rKVxcLihbMC05XSspJC8uZXhlYyhhcmdzWzBdKTtcblxuICAgIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2lsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlJyk7XG4gICAgfVxuXG4gICAgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgIG1pbm9yID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcblxuICAgIGlmIChtYWpvciAhPT0gMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Jyk7XG4gICAgfVxuXG4gICAgc3RhdGUudmVyc2lvbiA9IGFyZ3NbMF07XG4gICAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gKG1pbm9yIDwgMik7XG5cbiAgICBpZiAobWlub3IgIT09IDEgJiYgbWlub3IgIT09IDIpIHtcbiAgICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ3Vuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQnKTtcbiAgICB9XG4gIH0sXG5cbiAgVEFHOiBmdW5jdGlvbiBoYW5kbGVUYWdEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHtcblxuICAgIHZhciBoYW5kbGUsIHByZWZpeDtcblxuICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ1RBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMnKTtcbiAgICB9XG5cbiAgICBoYW5kbGUgPSBhcmdzWzBdO1xuICAgIHByZWZpeCA9IGFyZ3NbMV07XG5cbiAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KGhhbmRsZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbGwtZm9ybWVkIHRhZyBoYW5kbGUgKGZpcnN0IGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZScpO1xuICAgIH1cblxuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS50YWdNYXAsIGhhbmRsZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciBcIicgKyBoYW5kbGUgKyAnXCIgdGFnIGhhbmRsZScpO1xuICAgIH1cblxuICAgIGlmICghUEFUVEVSTl9UQUdfVVJJLnRlc3QocHJlZml4KSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2lsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZScpO1xuICAgIH1cblxuICAgIHN0YXRlLnRhZ01hcFtoYW5kbGVdID0gcHJlZml4O1xuICB9XG59O1xuXG5cbmZ1bmN0aW9uIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBzdGFydCwgZW5kLCBjaGVja0pzb24pIHtcbiAgdmFyIF9wb3NpdGlvbiwgX2xlbmd0aCwgX2NoYXJhY3RlciwgX3Jlc3VsdDtcblxuICBpZiAoc3RhcnQgPCBlbmQpIHtcbiAgICBfcmVzdWx0ID0gc3RhdGUuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG5cbiAgICBpZiAoY2hlY2tKc29uKSB7XG4gICAgICBmb3IgKF9wb3NpdGlvbiA9IDAsIF9sZW5ndGggPSBfcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgICAgX3Bvc2l0aW9uIDwgX2xlbmd0aDtcbiAgICAgICAgICAgX3Bvc2l0aW9uICs9IDEpIHtcbiAgICAgICAgX2NoYXJhY3RlciA9IF9yZXN1bHQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuICAgICAgICBpZiAoIShfY2hhcmFjdGVyID09PSAweDA5IHx8XG4gICAgICAgICAgICAgICgweDIwIDw9IF9jaGFyYWN0ZXIgJiYgX2NoYXJhY3RlciA8PSAweDEwRkZGRikpKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2V4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFBBVFRFUk5fTk9OX1BSSU5UQUJMRS50ZXN0KF9yZXN1bHQpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMnKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5yZXN1bHQgKz0gX3Jlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZU1hcHBpbmdzKHN0YXRlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvdmVycmlkYWJsZUtleXMpIHtcbiAgdmFyIHNvdXJjZUtleXMsIGtleSwgaW5kZXgsIHF1YW50aXR5O1xuXG4gIGlmICghY29tbW9uLmlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUnKTtcbiAgfVxuXG4gIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gIGZvciAoaW5kZXggPSAwLCBxdWFudGl0eSA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IHF1YW50aXR5OyBpbmRleCArPSAxKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG5cbiAgICBpZiAoIV9oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlc3RpbmF0aW9uLCBrZXkpKSB7XG4gICAgICBkZXN0aW5hdGlvbltrZXldID0gc291cmNlW2tleV07XG4gICAgICBvdmVycmlkYWJsZUtleXNba2V5XSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUpIHtcbiAgdmFyIGluZGV4LCBxdWFudGl0eTtcblxuICBrZXlOb2RlID0gU3RyaW5nKGtleU5vZGUpO1xuXG4gIGlmIChfcmVzdWx0ID09PSBudWxsKSB7XG4gICAgX3Jlc3VsdCA9IHt9O1xuICB9XG5cbiAgaWYgKGtleVRhZyA9PT0gJ3RhZzp5YW1sLm9yZywyMDAyOm1lcmdlJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlTm9kZSkpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBxdWFudGl0eSA9IHZhbHVlTm9kZS5sZW5ndGg7IGluZGV4IDwgcXVhbnRpdHk7IGluZGV4ICs9IDEpIHtcbiAgICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZSwgX3Jlc3VsdCwgdmFsdWVOb2RlW2luZGV4XSwgb3ZlcnJpZGFibGVLZXlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZSwgX3Jlc3VsdCwgdmFsdWVOb2RlLCBvdmVycmlkYWJsZUtleXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoIXN0YXRlLmpzb24gJiZcbiAgICAgICAgIV9oYXNPd25Qcm9wZXJ0eS5jYWxsKG92ZXJyaWRhYmxlS2V5cywga2V5Tm9kZSkgJiZcbiAgICAgICAgX2hhc093blByb3BlcnR5LmNhbGwoX3Jlc3VsdCwga2V5Tm9kZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdkdXBsaWNhdGVkIG1hcHBpbmcga2V5Jyk7XG4gICAgfVxuICAgIF9yZXN1bHRba2V5Tm9kZV0gPSB2YWx1ZU5vZGU7XG4gICAgZGVsZXRlIG92ZXJyaWRhYmxlS2V5c1trZXlOb2RlXTtcbiAgfVxuXG4gIHJldHVybiBfcmVzdWx0O1xufVxuXG5mdW5jdGlvbiByZWFkTGluZUJyZWFrKHN0YXRlKSB7XG4gIHZhciBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCA9PT0gMHgwQS8qIExGICovKSB7XG4gICAgc3RhdGUucG9zaXRpb24rKztcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHgwRC8qIENSICovKSB7XG4gICAgc3RhdGUucG9zaXRpb24rKztcbiAgICBpZiAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MEEvKiBMRiAqLykge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2EgbGluZSBicmVhayBpcyBleHBlY3RlZCcpO1xuICB9XG5cbiAgc3RhdGUubGluZSArPSAxO1xuICBzdGF0ZS5saW5lU3RhcnQgPSBzdGF0ZS5wb3NpdGlvbjtcbn1cblxuZnVuY3Rpb24gc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgYWxsb3dDb21tZW50cywgY2hlY2tJbmRlbnQpIHtcbiAgdmFyIGxpbmVCcmVha3MgPSAwLFxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKGFsbG93Q29tbWVudHMgJiYgY2ggPT09IDB4MjMvKiAjICovKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH0gd2hpbGUgKGNoICE9PSAweDBBLyogTEYgKi8gJiYgY2ggIT09IDB4MEQvKiBDUiAqLyAmJiBjaCAhPT0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuXG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgICAgbGluZUJyZWFrcysrO1xuICAgICAgc3RhdGUubGluZUluZGVudCA9IDA7XG5cbiAgICAgIHdoaWxlIChjaCA9PT0gMHgyMC8qIFNwYWNlICovKSB7XG4gICAgICAgIHN0YXRlLmxpbmVJbmRlbnQrKztcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoY2hlY2tJbmRlbnQgIT09IC0xICYmIGxpbmVCcmVha3MgIT09IDAgJiYgc3RhdGUubGluZUluZGVudCA8IGNoZWNrSW5kZW50KSB7XG4gICAgdGhyb3dXYXJuaW5nKHN0YXRlLCAnZGVmaWNpZW50IGluZGVudGF0aW9uJyk7XG4gIH1cblxuICByZXR1cm4gbGluZUJyZWFrcztcbn1cblxuZnVuY3Rpb24gdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSB7XG4gIHZhciBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbixcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuXG4gIC8vIENvbmRpdGlvbiBzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0IGlzIHRlc3RlZFxuICAvLyBpbiBwYXJlbnQgb24gZWFjaCBjYWxsLCBmb3IgZWZmaWNpZW5jeS4gTm8gbmVlZHMgdG8gdGVzdCBoZXJlIGFnYWluLlxuICBpZiAoKGNoID09PSAweDJELyogLSAqLyB8fCBjaCA9PT0gMHgyRS8qIC4gKi8pICYmXG4gICAgICBjaCA9PT0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24gKyAxKSAmJlxuICAgICAgY2ggPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMikpIHtcblxuICAgIF9wb3NpdGlvbiArPSAzO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IDAgfHwgaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB3cml0ZUZvbGRlZExpbmVzKHN0YXRlLCBjb3VudCkge1xuICBpZiAoY291bnQgPT09IDEpIHtcbiAgICBzdGF0ZS5yZXN1bHQgKz0gJyAnO1xuICB9IGVsc2UgaWYgKGNvdW50ID4gMSkge1xuICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBjb3VudCAtIDEpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gcmVhZFBsYWluU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50LCB3aXRoaW5GbG93Q29sbGVjdGlvbikge1xuICB2YXIgcHJlY2VkaW5nLFxuICAgICAgZm9sbG93aW5nLFxuICAgICAgY2FwdHVyZVN0YXJ0LFxuICAgICAgY2FwdHVyZUVuZCxcbiAgICAgIGhhc1BlbmRpbmdDb250ZW50LFxuICAgICAgX2xpbmUsXG4gICAgICBfbGluZVN0YXJ0LFxuICAgICAgX2xpbmVJbmRlbnQsXG4gICAgICBfa2luZCA9IHN0YXRlLmtpbmQsXG4gICAgICBfcmVzdWx0ID0gc3RhdGUucmVzdWx0LFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoaXNfV1NfT1JfRU9MKGNoKSAgICAgIHx8XG4gICAgICBpc19GTE9XX0lORElDQVRPUihjaCkgfHxcbiAgICAgIGNoID09PSAweDIzLyogIyAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4MjYvKiAmICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgyQS8qICogKi8gICAgfHxcbiAgICAgIGNoID09PSAweDIxLyogISAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4N0MvKiB8ICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgzRS8qID4gKi8gICAgfHxcbiAgICAgIGNoID09PSAweDI3LyogJyAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4MjIvKiBcIiAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4MjUvKiAlICovICAgIHx8XG4gICAgICBjaCA9PT0gMHg0MC8qIEAgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDYwLyogYCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChjaCA9PT0gMHgzRi8qID8gKi8gfHwgY2ggPT09IDB4MkQvKiAtICovKSB7XG4gICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8XG4gICAgICAgIHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGZvbGxvd2luZykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gIGhhc1BlbmRpbmdDb250ZW50ID0gZmFsc2U7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSAweDNBLyogOiAqLykge1xuICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykgfHxcbiAgICAgICAgICB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyMy8qICMgKi8pIHtcbiAgICAgIHByZWNlZGluZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gLSAxKTtcblxuICAgICAgaWYgKGlzX1dTX09SX0VPTChwcmVjZWRpbmcpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICgoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB8fFxuICAgICAgICAgICAgICAgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgICBicmVhaztcblxuICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgX2xpbmUgPSBzdGF0ZS5saW5lO1xuICAgICAgX2xpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgIF9saW5lSW5kZW50ID0gc3RhdGUubGluZUluZGVudDtcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCAtMSk7XG5cbiAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID49IG5vZGVJbmRlbnQpIHtcbiAgICAgICAgaGFzUGVuZGluZ0NvbnRlbnQgPSB0cnVlO1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnBvc2l0aW9uID0gY2FwdHVyZUVuZDtcbiAgICAgICAgc3RhdGUubGluZSA9IF9saW5lO1xuICAgICAgICBzdGF0ZS5saW5lU3RhcnQgPSBfbGluZVN0YXJ0O1xuICAgICAgICBzdGF0ZS5saW5lSW5kZW50ID0gX2xpbmVJbmRlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNQZW5kaW5nQ29udGVudCkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgZmFsc2UpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgc3RhdGUubGluZSAtIF9saW5lKTtcbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbiArIDE7XG4gICAgfVxuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgZmFsc2UpO1xuXG4gIGlmIChzdGF0ZS5yZXN1bHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRlLmtpbmQgPSBfa2luZDtcbiAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZWFkU2luZ2xlUXVvdGVkU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBjaCxcbiAgICAgIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyNy8qICcgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuICBzdGF0ZS5wb3NpdGlvbisrO1xuICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIGlmIChjaCA9PT0gMHgyNy8qICcgKi8pIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgaWYgKGNoID09PSAweDI3LyogJyAqLykge1xuICAgICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgdHJ1ZSk7XG4gICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlLCBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgbm9kZUluZGVudCkpO1xuICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXInKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyJyk7XG59XG5cbmZ1bmN0aW9uIHJlYWREb3VibGVRdW90ZWRTY2FsYXIoc3RhdGUsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIGNhcHR1cmVTdGFydCxcbiAgICAgIGNhcHR1cmVFbmQsXG4gICAgICBoZXhMZW5ndGgsXG4gICAgICBoZXhSZXN1bHQsXG4gICAgICB0bXAsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyMi8qIFwiICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgc3RhdGUucG9zaXRpb24rKztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlICgoY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkgIT09IDApIHtcbiAgICBpZiAoY2ggPT09IDB4MjIvKiBcIiAqLykge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgc3RhdGUucG9zaXRpb24sIHRydWUpO1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgfSBlbHNlIGlmIChjaCA9PT0gMHg1Qy8qIFxcICovKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KTtcblxuICAgICAgICAvLyBUT0RPOiByZXdvcmsgdG8gaW5saW5lIGZuIHdpdGggbm8gdHlwZSBjYXN0P1xuICAgICAgfSBlbHNlIGlmIChjaCA8IDI1NiAmJiBzaW1wbGVFc2NhcGVDaGVja1tjaF0pIHtcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IHNpbXBsZUVzY2FwZU1hcFtjaF07XG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG5cbiAgICAgIH0gZWxzZSBpZiAoKHRtcCA9IGVzY2FwZWRIZXhMZW4oY2gpKSA+IDApIHtcbiAgICAgICAgaGV4TGVuZ3RoID0gdG1wO1xuICAgICAgICBoZXhSZXN1bHQgPSAwO1xuXG4gICAgICAgIGZvciAoOyBoZXhMZW5ndGggPiAwOyBoZXhMZW5ndGgtLSkge1xuICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICAgIGlmICgodG1wID0gZnJvbUhleENvZGUoY2gpKSA+PSAwKSB7XG4gICAgICAgICAgICBoZXhSZXN1bHQgPSAoaGV4UmVzdWx0IDw8IDQpICsgdG1wO1xuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdleHBlY3RlZCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY2hhckZyb21Db2RlcG9pbnQoaGV4UmVzdWx0KTtcblxuICAgICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5rbm93biBlc2NhcGUgc2VxdWVuY2UnKTtcbiAgICAgIH1cblxuICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB9IGVsc2UgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhcicpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXInKTtcbn1cblxuZnVuY3Rpb24gcmVhZEZsb3dDb2xsZWN0aW9uKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciByZWFkTmV4dCA9IHRydWUsXG4gICAgICBfbGluZSxcbiAgICAgIF90YWcgICAgID0gc3RhdGUudGFnLFxuICAgICAgX3Jlc3VsdCxcbiAgICAgIF9hbmNob3IgID0gc3RhdGUuYW5jaG9yLFxuICAgICAgZm9sbG93aW5nLFxuICAgICAgdGVybWluYXRvcixcbiAgICAgIGlzUGFpcixcbiAgICAgIGlzRXhwbGljaXRQYWlyLFxuICAgICAgaXNNYXBwaW5nLFxuICAgICAgb3ZlcnJpZGFibGVLZXlzID0ge30sXG4gICAgICBrZXlOb2RlLFxuICAgICAga2V5VGFnLFxuICAgICAgdmFsdWVOb2RlLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4NUIvKiBbICovKSB7XG4gICAgdGVybWluYXRvciA9IDB4NUQ7LyogXSAqL1xuICAgIGlzTWFwcGluZyA9IGZhbHNlO1xuICAgIF9yZXN1bHQgPSBbXTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHg3Qi8qIHsgKi8pIHtcbiAgICB0ZXJtaW5hdG9yID0gMHg3RDsvKiB9ICovXG4gICAgaXNNYXBwaW5nID0gdHJ1ZTtcbiAgICBfcmVzdWx0ID0ge307XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gX3Jlc3VsdDtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IHRlcm1pbmF0b3IpIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICAgIHN0YXRlLmtpbmQgPSBpc01hcHBpbmcgPyAnbWFwcGluZycgOiAnc2VxdWVuY2UnO1xuICAgICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXJlYWROZXh0KSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMnKTtcbiAgICB9XG5cbiAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICBpc1BhaXIgPSBpc0V4cGxpY2l0UGFpciA9IGZhbHNlO1xuXG4gICAgaWYgKGNoID09PSAweDNGLyogPyAqLykge1xuICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHtcbiAgICAgICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfbGluZSA9IHN0YXRlLmxpbmU7XG4gICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpO1xuICAgIGtleVRhZyA9IHN0YXRlLnRhZztcbiAgICBrZXlOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmICgoaXNFeHBsaWNpdFBhaXIgfHwgc3RhdGUubGluZSA9PT0gX2xpbmUpICYmIGNoID09PSAweDNBLyogOiAqLykge1xuICAgICAgaXNQYWlyID0gdHJ1ZTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuICAgICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpO1xuICAgICAgdmFsdWVOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChpc01hcHBpbmcpIHtcbiAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUpO1xuICAgIH0gZWxzZSBpZiAoaXNQYWlyKSB7XG4gICAgICBfcmVzdWx0LnB1c2goc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgbnVsbCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfcmVzdWx0LnB1c2goa2V5Tm9kZSk7XG4gICAgfVxuXG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKGNoID09PSAweDJDLyogLCAqLykge1xuICAgICAgcmVhZE5leHQgPSB0cnVlO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWFkTmV4dCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvbicpO1xufVxuXG5mdW5jdGlvbiByZWFkQmxvY2tTY2FsYXIoc3RhdGUsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIGNhcHR1cmVTdGFydCxcbiAgICAgIGZvbGRpbmcsXG4gICAgICBjaG9tcGluZyAgICAgICA9IENIT01QSU5HX0NMSVAsXG4gICAgICBkZXRlY3RlZEluZGVudCA9IGZhbHNlLFxuICAgICAgdGV4dEluZGVudCAgICAgPSBub2RlSW5kZW50LFxuICAgICAgZW1wdHlMaW5lcyAgICAgPSAwLFxuICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZSxcbiAgICAgIHRtcCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoID09PSAweDdDLyogfCAqLykge1xuICAgIGZvbGRpbmcgPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHgzRS8qID4gKi8pIHtcbiAgICBmb2xkaW5nID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gMHgyQi8qICsgKi8gfHwgY2ggPT09IDB4MkQvKiAtICovKSB7XG4gICAgICBpZiAoQ0hPTVBJTkdfQ0xJUCA9PT0gY2hvbXBpbmcpIHtcbiAgICAgICAgY2hvbXBpbmcgPSAoY2ggPT09IDB4MkIvKiArICovKSA/IENIT01QSU5HX0tFRVAgOiBDSE9NUElOR19TVFJJUDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXInKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKHRtcCA9IGZyb21EZWNpbWFsQ29kZShjaCkpID49IDApIHtcbiAgICAgIGlmICh0bXAgPT09IDApIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2JhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUnKTtcbiAgICAgIH0gZWxzZSBpZiAoIWRldGVjdGVkSW5kZW50KSB7XG4gICAgICAgIHRleHRJbmRlbnQgPSBub2RlSW5kZW50ICsgdG1wIC0gMTtcbiAgICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3JlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyJyk7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgIGRvIHsgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOyB9XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSk7XG5cbiAgICBpZiAoY2ggPT09IDB4MjMvKiAjICovKSB7XG4gICAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgICAgd2hpbGUgKCFpc19FT0woY2gpICYmIChjaCAhPT0gMCkpO1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIHdoaWxlICgoIWRldGVjdGVkSW5kZW50IHx8IHN0YXRlLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSAmJlxuICAgICAgICAgICAoY2ggPT09IDB4MjAvKiBTcGFjZSAqLykpIHtcbiAgICAgIHN0YXRlLmxpbmVJbmRlbnQrKztcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoIWRldGVjdGVkSW5kZW50ICYmIHN0YXRlLmxpbmVJbmRlbnQgPiB0ZXh0SW5kZW50KSB7XG4gICAgICB0ZXh0SW5kZW50ID0gc3RhdGUubGluZUluZGVudDtcbiAgICB9XG5cbiAgICBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgZW1wdHlMaW5lcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gRW5kIG9mIHRoZSBzY2FsYXIuXG4gICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSB7XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIGNob21waW5nLlxuICAgICAgaWYgKGNob21waW5nID09PSBDSE9NUElOR19LRUVQKSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hvbXBpbmcgPT09IENIT01QSU5HX0NMSVApIHtcbiAgICAgICAgaWYgKGRldGVjdGVkSW5kZW50KSB7IC8vIGkuZS4gb25seSBpZiB0aGUgc2NhbGFyIGlzIG5vdCBlbXB0eS5cbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQnJlYWsgdGhpcyBgd2hpbGVgIGN5Y2xlIGFuZCBnbyB0byB0aGUgZnVuY2l0b24ncyBlcGlsb2d1ZS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIEZvbGRlZCBzdHlsZTogdXNlIGZhbmN5IHJ1bGVzIHRvIGhhbmRsZSBsaW5lIGJyZWFrcy5cbiAgICBpZiAoZm9sZGluZykge1xuXG4gICAgICAvLyBMaW5lcyBzdGFydGluZyB3aXRoIHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMgKG1vcmUtaW5kZW50ZWQgbGluZXMpIGFyZSBub3QgZm9sZGVkLlxuICAgICAgaWYgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICBhdE1vcmVJbmRlbnRlZCA9IHRydWU7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzICsgMSk7XG5cbiAgICAgIC8vIEVuZCBvZiBtb3JlLWluZGVudGVkIGJsb2NrLlxuICAgICAgfSBlbHNlIGlmIChhdE1vcmVJbmRlbnRlZCkge1xuICAgICAgICBhdE1vcmVJbmRlbnRlZCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZW1wdHlMaW5lcyArIDEpO1xuXG4gICAgICAvLyBKdXN0IG9uZSBsaW5lIGJyZWFrIC0gcGVyY2VpdmUgYXMgdGhlIHNhbWUgbGluZS5cbiAgICAgIH0gZWxzZSBpZiAoZW1wdHlMaW5lcyA9PT0gMCkge1xuICAgICAgICBpZiAoZGV0ZWN0ZWRJbmRlbnQpIHsgLy8gaS5lLiBvbmx5IGlmIHdlIGhhdmUgYWxyZWFkeSByZWFkIHNvbWUgc2NhbGFyIGNvbnRlbnQuXG4gICAgICAgICAgc3RhdGUucmVzdWx0ICs9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAvLyBTZXZlcmFsIGxpbmUgYnJlYWtzIC0gcGVyY2VpdmUgYXMgZGlmZmVyZW50IGxpbmVzLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGVtcHR5TGluZXMpO1xuICAgICAgfVxuXG4gICAgLy8gTGl0ZXJhbCBzdHlsZToganVzdCBhZGQgZXhhY3QgbnVtYmVyIG9mIGxpbmUgYnJlYWtzIGJldHdlZW4gY29udGVudCBsaW5lcy5cbiAgICB9IGVsc2UgaWYgKGRldGVjdGVkSW5kZW50KSB7XG4gICAgICAvLyBJZiBjdXJyZW50IGxpbmUgaXNuJ3QgdGhlIGZpcnN0IG9uZSAtIGNvdW50IGxpbmUgYnJlYWsgZnJvbSB0aGUgbGFzdCBjb250ZW50IGxpbmUuXG4gICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZW1wdHlMaW5lcyArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBjYXNlIG9mIHRoZSBmaXJzdCBjb250ZW50IGxpbmUgLSBjb3VudCBvbmx5IGVtcHR5IGxpbmVzLlxuICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGVtcHR5TGluZXMpO1xuICAgIH1cblxuICAgIGRldGVjdGVkSW5kZW50ID0gdHJ1ZTtcbiAgICBlbXB0eUxpbmVzID0gMDtcbiAgICBjYXB0dXJlU3RhcnQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIHdoaWxlICghaXNfRU9MKGNoKSAmJiAoY2ggIT09IDApKSB7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgc3RhdGUucG9zaXRpb24sIGZhbHNlKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgX2xpbmUsXG4gICAgICBfdGFnICAgICAgPSBzdGF0ZS50YWcsXG4gICAgICBfYW5jaG9yICAgPSBzdGF0ZS5hbmNob3IsXG4gICAgICBfcmVzdWx0ICAgPSBbXSxcbiAgICAgIGZvbGxvd2luZyxcbiAgICAgIGRldGVjdGVkICA9IGZhbHNlLFxuICAgICAgY2g7XG5cbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gX3Jlc3VsdDtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG5cbiAgICBpZiAoY2ggIT09IDB4MkQvKiAtICovKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG5cbiAgICBpZiAoIWlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZXRlY3RlZCA9IHRydWU7XG4gICAgc3RhdGUucG9zaXRpb24rKztcblxuICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSkpIHtcbiAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50IDw9IG5vZGVJbmRlbnQpIHtcbiAgICAgICAgX3Jlc3VsdC5wdXNoKG51bGwpO1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfbGluZSA9IHN0YXRlLmxpbmU7XG4gICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfQkxPQ0tfSU4sIGZhbHNlLCB0cnVlKTtcbiAgICBfcmVzdWx0LnB1c2goc3RhdGUucmVzdWx0KTtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKChzdGF0ZS5saW5lID09PSBfbGluZSB8fCBzdGF0ZS5saW5lSW5kZW50ID4gbm9kZUluZGVudCkgJiYgKGNoICE9PSAwKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2JhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5Jyk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgbm9kZUluZGVudCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRldGVjdGVkKSB7XG4gICAgc3RhdGUudGFnID0gX3RhZztcbiAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgIHN0YXRlLmtpbmQgPSAnc2VxdWVuY2UnO1xuICAgIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZWFkQmxvY2tNYXBwaW5nKHN0YXRlLCBub2RlSW5kZW50LCBmbG93SW5kZW50KSB7XG4gIHZhciBmb2xsb3dpbmcsXG4gICAgICBhbGxvd0NvbXBhY3QsXG4gICAgICBfbGluZSxcbiAgICAgIF90YWcgICAgICAgICAgPSBzdGF0ZS50YWcsXG4gICAgICBfYW5jaG9yICAgICAgID0gc3RhdGUuYW5jaG9yLFxuICAgICAgX3Jlc3VsdCAgICAgICA9IHt9LFxuICAgICAgb3ZlcnJpZGFibGVLZXlzID0ge30sXG4gICAgICBrZXlUYWcgICAgICAgID0gbnVsbCxcbiAgICAgIGtleU5vZGUgICAgICAgPSBudWxsLFxuICAgICAgdmFsdWVOb2RlICAgICA9IG51bGwsXG4gICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2UsXG4gICAgICBkZXRlY3RlZCAgICAgID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG4gICAgX2xpbmUgPSBzdGF0ZS5saW5lOyAvLyBTYXZlIHRoZSBjdXJyZW50IGxpbmUuXG5cbiAgICAvL1xuICAgIC8vIEV4cGxpY2l0IG5vdGF0aW9uIGNhc2UuIFRoZXJlIGFyZSB0d28gc2VwYXJhdGUgYmxvY2tzOlxuICAgIC8vIGZpcnN0IGZvciB0aGUga2V5IChkZW5vdGVkIGJ5IFwiP1wiKSBhbmQgc2Vjb25kIGZvciB0aGUgdmFsdWUgKGRlbm90ZWQgYnkgXCI6XCIpXG4gICAgLy9cbiAgICBpZiAoKGNoID09PSAweDNGLyogPyAqLyB8fCBjaCA9PT0gMHgzQS8qIDogKi8pICYmIGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG5cbiAgICAgIGlmIChjaCA9PT0gMHgzRi8qID8gKi8pIHtcbiAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCk7XG4gICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBkZXRlY3RlZCA9IHRydWU7XG4gICAgICAgIGF0RXhwbGljaXRLZXkgPSB0cnVlO1xuICAgICAgICBhbGxvd0NvbXBhY3QgPSB0cnVlO1xuXG4gICAgICB9IGVsc2UgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgLy8gaS5lLiAweDNBLyogOiAqLyA9PT0gY2hhcmFjdGVyIGFmdGVyIHRoZSBleHBsaWNpdCBrZXkuXG4gICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTtcbiAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2luY29tcGxldGUgZXhwbGljaXQgbWFwcGluZyBwYWlyOyBhIGtleSBub2RlIGlzIG1pc3NlZCcpO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5wb3NpdGlvbiArPSAxO1xuICAgICAgY2ggPSBmb2xsb3dpbmc7XG5cbiAgICAvL1xuICAgIC8vIEltcGxpY2l0IG5vdGF0aW9uIGNhc2UuIEZsb3ctc3R5bGUgbm9kZSBhcyB0aGUga2V5IGZpcnN0LCB0aGVuIFwiOlwiLCBhbmQgdGhlIHZhbHVlLlxuICAgIC8vXG4gICAgfSBlbHNlIGlmIChjb21wb3NlTm9kZShzdGF0ZSwgZmxvd0luZGVudCwgQ09OVEVYVF9GTE9XX09VVCwgZmFsc2UsIHRydWUpKSB7XG5cbiAgICAgIGlmIChzdGF0ZS5saW5lID09PSBfbGluZSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICAgIHdoaWxlIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2ggPT09IDB4M0EvKiA6ICovKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICAgICAgaWYgKCFpc19XU19PUl9FT0woY2gpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBleHBlY3RlZCBhZnRlciB0aGUga2V5LXZhbHVlIHNlcGFyYXRvciB3aXRoaW4gYSBibG9jayBtYXBwaW5nJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCBudWxsKTtcbiAgICAgICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgICAgYWxsb3dDb21wYWN0ID0gZmFsc2U7XG4gICAgICAgICAga2V5VGFnID0gc3RhdGUudGFnO1xuICAgICAgICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG5cbiAgICAgICAgfSBlbHNlIGlmIChkZXRlY3RlZCkge1xuICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdjYW4gbm90IHJlYWQgYW4gaW1wbGljaXQgbWFwcGluZyBwYWlyOyBhIGNvbG9uIGlzIG1pc3NlZCcpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUudGFnID0gX3RhZztcbiAgICAgICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBLZWVwIHRoZSByZXN1bHQgb2YgYGNvbXBvc2VOb2RlYC5cbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdjYW4gbm90IHJlYWQgYSBibG9jayBtYXBwaW5nIGVudHJ5OyBhIG11bHRpbGluZSBrZXkgbWF5IG5vdCBiZSBhbiBpbXBsaWNpdCBrZXknKTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUudGFnID0gX3RhZztcbiAgICAgICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgdGhlIHJlc3VsdCBvZiBgY29tcG9zZU5vZGVgLlxuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrOyAvLyBSZWFkaW5nIGlzIGRvbmUuIEdvIHRvIHRoZSBlcGlsb2d1ZS5cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIENvbW1vbiByZWFkaW5nIGNvZGUgZm9yIGJvdGggZXhwbGljaXQgYW5kIGltcGxpY2l0IG5vdGF0aW9ucy5cbiAgICAvL1xuICAgIGlmIChzdGF0ZS5saW5lID09PSBfbGluZSB8fCBzdGF0ZS5saW5lSW5kZW50ID4gbm9kZUluZGVudCkge1xuICAgICAgaWYgKGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX09VVCwgdHJ1ZSwgYWxsb3dDb21wYWN0KSkge1xuICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWVOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghYXRFeHBsaWNpdEtleSkge1xuICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlKTtcbiAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50ICYmIChjaCAhPT0gMCkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdiYWQgaW5kZW50YXRpb24gb2YgYSBtYXBwaW5nIGVudHJ5Jyk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgbm9kZUluZGVudCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gRXBpbG9ndWUuXG4gIC8vXG5cbiAgLy8gU3BlY2lhbCBjYXNlOiBsYXN0IG1hcHBpbmcncyBub2RlIGNvbnRhaW5zIG9ubHkgdGhlIGtleSBpbiBleHBsaWNpdCBub3RhdGlvbi5cbiAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCk7XG4gIH1cblxuICAvLyBFeHBvc2UgdGhlIHJlc3VsdGluZyBtYXBwaW5nLlxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUua2luZCA9ICdtYXBwaW5nJztcbiAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGRldGVjdGVkO1xufVxuXG5mdW5jdGlvbiByZWFkVGFnUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbixcbiAgICAgIGlzVmVyYmF0aW0gPSBmYWxzZSxcbiAgICAgIGlzTmFtZWQgICAgPSBmYWxzZSxcbiAgICAgIHRhZ0hhbmRsZSxcbiAgICAgIHRhZ05hbWUsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyMS8qICEgKi8pIHJldHVybiBmYWxzZTtcblxuICBpZiAoc3RhdGUudGFnICE9PSBudWxsKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2R1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5Jyk7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoID09PSAweDNDLyogPCAqLykge1xuICAgIGlzVmVyYmF0aW0gPSB0cnVlO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICB9IGVsc2UgaWYgKGNoID09PSAweDIxLyogISAqLykge1xuICAgIGlzTmFtZWQgPSB0cnVlO1xuICAgIHRhZ0hhbmRsZSA9ICchISc7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIH0gZWxzZSB7XG4gICAgdGFnSGFuZGxlID0gJyEnO1xuICB9XG5cbiAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgIHdoaWxlIChjaCAhPT0gMCAmJiBjaCAhPT0gMHgzRS8qID4gKi8pO1xuXG4gICAgaWYgKHN0YXRlLnBvc2l0aW9uIDwgc3RhdGUubGVuZ3RoKSB7XG4gICAgICB0YWdOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcblxuICAgICAgaWYgKGNoID09PSAweDIxLyogISAqLykge1xuICAgICAgICBpZiAoIWlzTmFtZWQpIHtcbiAgICAgICAgICB0YWdIYW5kbGUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24gLSAxLCBzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgICAgICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdCh0YWdIYW5kbGUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpc05hbWVkID0gdHJ1ZTtcbiAgICAgICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbiArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgdGFnTmFtZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTLnRlc3QodGFnTmFtZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gIH1cblxuICBpZiAodGFnTmFtZSAmJiAhUEFUVEVSTl9UQUdfVVJJLnRlc3QodGFnTmFtZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFnIG5hbWUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzOiAnICsgdGFnTmFtZSk7XG4gIH1cblxuICBpZiAoaXNWZXJiYXRpbSkge1xuICAgIHN0YXRlLnRhZyA9IHRhZ05hbWU7XG5cbiAgfSBlbHNlIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS50YWdNYXAsIHRhZ0hhbmRsZSkpIHtcbiAgICBzdGF0ZS50YWcgPSBzdGF0ZS50YWdNYXBbdGFnSGFuZGxlXSArIHRhZ05hbWU7XG5cbiAgfSBlbHNlIGlmICh0YWdIYW5kbGUgPT09ICchJykge1xuICAgIHN0YXRlLnRhZyA9ICchJyArIHRhZ05hbWU7XG5cbiAgfSBlbHNlIGlmICh0YWdIYW5kbGUgPT09ICchIScpIHtcbiAgICBzdGF0ZS50YWcgPSAndGFnOnlhbWwub3JnLDIwMDI6JyArIHRhZ05hbWU7XG5cbiAgfSBlbHNlIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5kZWNsYXJlZCB0YWcgaGFuZGxlIFwiJyArIHRhZ0hhbmRsZSArICdcIicpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlYWRBbmNob3JQcm9wZXJ0eShzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggIT09IDB4MjYvKiAmICovKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHknKTtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpICYmICFpc19GTE9XX0lORElDQVRPUihjaCkpIHtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIH1cblxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IF9wb3NpdGlvbikge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICduYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyJyk7XG4gIH1cblxuICBzdGF0ZS5hbmNob3IgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlYWRBbGlhcyhzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uLCBhbGlhcyxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoICE9PSAweDJBLyogKiAqLykgcmV0dXJuIGZhbHNlO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpICYmICFpc19GTE9XX0lORElDQVRPUihjaCkpIHtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIH1cblxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IF9wb3NpdGlvbikge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICduYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXInKTtcbiAgfVxuXG4gIGFsaWFzID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKCFzdGF0ZS5hbmNob3JNYXAuaGFzT3duUHJvcGVydHkoYWxpYXMpKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuaWRlbnRpZmllZCBhbGlhcyBcIicgKyBhbGlhcyArICdcIicpO1xuICB9XG5cbiAgc3RhdGUucmVzdWx0ID0gc3RhdGUuYW5jaG9yTWFwW2FsaWFzXTtcbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29tcG9zZU5vZGUoc3RhdGUsIHBhcmVudEluZGVudCwgbm9kZUNvbnRleHQsIGFsbG93VG9TZWVrLCBhbGxvd0NvbXBhY3QpIHtcbiAgdmFyIGFsbG93QmxvY2tTdHlsZXMsXG4gICAgICBhbGxvd0Jsb2NrU2NhbGFycyxcbiAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyxcbiAgICAgIGluZGVudFN0YXR1cyA9IDEsIC8vIDE6IHRoaXM+cGFyZW50LCAwOiB0aGlzPXBhcmVudCwgLTE6IHRoaXM8cGFyZW50XG4gICAgICBhdE5ld0xpbmUgID0gZmFsc2UsXG4gICAgICBoYXNDb250ZW50ID0gZmFsc2UsXG4gICAgICB0eXBlSW5kZXgsXG4gICAgICB0eXBlUXVhbnRpdHksXG4gICAgICB0eXBlLFxuICAgICAgZmxvd0luZGVudCxcbiAgICAgIGJsb2NrSW5kZW50O1xuXG4gIGlmIChzdGF0ZS5saXN0ZW5lciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmxpc3RlbmVyKCdvcGVuJywgc3RhdGUpO1xuICB9XG5cbiAgc3RhdGUudGFnICAgID0gbnVsbDtcbiAgc3RhdGUuYW5jaG9yID0gbnVsbDtcbiAgc3RhdGUua2luZCAgID0gbnVsbDtcbiAgc3RhdGUucmVzdWx0ID0gbnVsbDtcblxuICBhbGxvd0Jsb2NrU3R5bGVzID0gYWxsb3dCbG9ja1NjYWxhcnMgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPVxuICAgIENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCB8fFxuICAgIENPTlRFWFRfQkxPQ0tfSU4gID09PSBub2RlQ29udGV4dDtcblxuICBpZiAoYWxsb3dUb1NlZWspIHtcbiAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7XG4gICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuXG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAxO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgaW5kZW50U3RhdHVzID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7XG4gICAgd2hpbGUgKHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkgfHwgcmVhZEFuY2hvclByb3BlcnR5KHN0YXRlKSkge1xuICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhbGxvd0Jsb2NrU3R5bGVzO1xuXG4gICAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucykge1xuICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGF0TmV3TGluZSB8fCBhbGxvd0NvbXBhY3Q7XG4gIH1cblxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgIGlmIChDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfRkxPV19PVVQgPT09IG5vZGVDb250ZXh0KSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50ICsgMTtcbiAgICB9XG5cbiAgICBibG9ja0luZGVudCA9IHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0O1xuXG4gICAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSkge1xuICAgICAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJlxuICAgICAgICAgIChyZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpIHx8XG4gICAgICAgICAgIHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIGJsb2NrSW5kZW50LCBmbG93SW5kZW50KSkgfHxcbiAgICAgICAgICByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKChhbGxvd0Jsb2NrU2NhbGFycyAmJiByZWFkQmxvY2tTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpKSB8fFxuICAgICAgICAgICAgcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgZmxvd0luZGVudCkgfHxcbiAgICAgICAgICAgIHJlYWREb3VibGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWFkQWxpYXMoc3RhdGUpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoc3RhdGUudGFnICE9PSBudWxsIHx8IHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2FsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAocmVhZFBsYWluU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0KSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnRhZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGUudGFnID0gJz8nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5kZW50U3RhdHVzID09PSAwKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2U6IGJsb2NrIHNlcXVlbmNlcyBhcmUgYWxsb3dlZCB0byBoYXZlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwgYXMgdGhlIHBhcmVudC5cbiAgICAgIC8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjc5OTc4NFxuICAgICAgaGFzQ29udGVudCA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS50YWcgIT09IG51bGwgJiYgc3RhdGUudGFnICE9PSAnIScpIHtcbiAgICBpZiAoc3RhdGUudGFnID09PSAnPycpIHtcbiAgICAgIGZvciAodHlwZUluZGV4ID0gMCwgdHlwZVF1YW50aXR5ID0gc3RhdGUuaW1wbGljaXRUeXBlcy5sZW5ndGg7XG4gICAgICAgICAgIHR5cGVJbmRleCA8IHR5cGVRdWFudGl0eTtcbiAgICAgICAgICAgdHlwZUluZGV4ICs9IDEpIHtcbiAgICAgICAgdHlwZSA9IHN0YXRlLmltcGxpY2l0VHlwZXNbdHlwZUluZGV4XTtcblxuICAgICAgICAvLyBJbXBsaWNpdCByZXNvbHZpbmcgaXMgbm90IGFsbG93ZWQgZm9yIG5vbi1zY2FsYXIgdHlwZXMsIGFuZCAnPydcbiAgICAgICAgLy8gbm9uLXNwZWNpZmljIHRhZyBpcyBvbmx5IGFzc2lnbmVkIHRvIHBsYWluIHNjYWxhcnMuIFNvLCBpdCBpc24ndFxuICAgICAgICAvLyBuZWVkZWQgdG8gY2hlY2sgZm9yICdraW5kJyBjb25mb3JtaXR5LlxuXG4gICAgICAgIGlmICh0eXBlLnJlc29sdmUoc3RhdGUucmVzdWx0KSkgeyAvLyBgc3RhdGUucmVzdWx0YCB1cGRhdGVkIGluIHJlc29sdmVyIGlmIG1hdGNoZWRcbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgPSB0eXBlLmNvbnN0cnVjdChzdGF0ZS5yZXN1bHQpO1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUudGFnO1xuICAgICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUudHlwZU1hcCwgc3RhdGUudGFnKSkge1xuICAgICAgdHlwZSA9IHN0YXRlLnR5cGVNYXBbc3RhdGUudGFnXTtcblxuICAgICAgaWYgKHN0YXRlLnJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlLmtpbmQgIT09IHN0YXRlLmtpbmQpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8JyArIHN0YXRlLnRhZyArICc+IHRhZzsgaXQgc2hvdWxkIGJlIFwiJyArIHR5cGUua2luZCArICdcIiwgbm90IFwiJyArIHN0YXRlLmtpbmQgKyAnXCInKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0eXBlLnJlc29sdmUoc3RhdGUucmVzdWx0KSkgeyAvLyBgc3RhdGUucmVzdWx0YCB1cGRhdGVkIGluIHJlc29sdmVyIGlmIG1hdGNoZWRcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2Nhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8JyArIHN0YXRlLnRhZyArICc+IGV4cGxpY2l0IHRhZycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUucmVzdWx0ID0gdHlwZS5jb25zdHJ1Y3Qoc3RhdGUucmVzdWx0KTtcbiAgICAgICAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmtub3duIHRhZyAhPCcgKyBzdGF0ZS50YWcgKyAnPicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5saXN0ZW5lciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmxpc3RlbmVyKCdjbG9zZScsIHN0YXRlKTtcbiAgfVxuICByZXR1cm4gc3RhdGUudGFnICE9PSBudWxsIHx8ICBzdGF0ZS5hbmNob3IgIT09IG51bGwgfHwgaGFzQ29udGVudDtcbn1cblxuZnVuY3Rpb24gcmVhZERvY3VtZW50KHN0YXRlKSB7XG4gIHZhciBkb2N1bWVudFN0YXJ0ID0gc3RhdGUucG9zaXRpb24sXG4gICAgICBfcG9zaXRpb24sXG4gICAgICBkaXJlY3RpdmVOYW1lLFxuICAgICAgZGlyZWN0aXZlQXJncyxcbiAgICAgIGhhc0RpcmVjdGl2ZXMgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIHN0YXRlLnZlcnNpb24gPSBudWxsO1xuICBzdGF0ZS5jaGVja0xpbmVCcmVha3MgPSBzdGF0ZS5sZWdhY3k7XG4gIHN0YXRlLnRhZ01hcCA9IHt9O1xuICBzdGF0ZS5hbmNob3JNYXAgPSB7fTtcblxuICB3aGlsZSAoKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpICE9PSAwKSB7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gMCB8fCBjaCAhPT0gMHgyNS8qICUgKi8pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGhhc0RpcmVjdGl2ZXMgPSB0cnVlO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGRpcmVjdGl2ZU5hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgICBkaXJlY3RpdmVBcmdzID0gW107XG5cbiAgICBpZiAoZGlyZWN0aXZlTmFtZS5sZW5ndGggPCAxKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoJyk7XG4gICAgfVxuXG4gICAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoID09PSAweDIzLyogIyAqLykge1xuICAgICAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgICAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX0VPTChjaCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzX0VPTChjaCkpIGJyZWFrO1xuXG4gICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpKSB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgZGlyZWN0aXZlQXJncy5wdXNoKHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pKTtcbiAgICB9XG5cbiAgICBpZiAoY2ggIT09IDApIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuXG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpcmVjdGl2ZUhhbmRsZXJzLCBkaXJlY3RpdmVOYW1lKSkge1xuICAgICAgZGlyZWN0aXZlSGFuZGxlcnNbZGlyZWN0aXZlTmFtZV0oc3RhdGUsIGRpcmVjdGl2ZU5hbWUsIGRpcmVjdGl2ZUFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSBcIicgKyBkaXJlY3RpdmVOYW1lICsgJ1wiJyk7XG4gICAgfVxuICB9XG5cbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSAwICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSAgICAgPT09IDB4MkQvKiAtICovICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSkgPT09IDB4MkQvKiAtICovICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMikgPT09IDB4MkQvKiAtICovKSB7XG4gICAgc3RhdGUucG9zaXRpb24gKz0gMztcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG5cbiAgfSBlbHNlIGlmIChoYXNEaXJlY3RpdmVzKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2RpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGNvbXBvc2VOb2RlKHN0YXRlLCBzdGF0ZS5saW5lSW5kZW50IC0gMSwgQ09OVEVYVF9CTE9DS19PVVQsIGZhbHNlLCB0cnVlKTtcbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmIChzdGF0ZS5jaGVja0xpbmVCcmVha3MgJiZcbiAgICAgIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTLnRlc3Qoc3RhdGUuaW5wdXQuc2xpY2UoZG9jdW1lbnRTdGFydCwgc3RhdGUucG9zaXRpb24pKSkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ25vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCcpO1xuICB9XG5cbiAgc3RhdGUuZG9jdW1lbnRzLnB1c2goc3RhdGUucmVzdWx0KTtcblxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG5cbiAgICBpZiAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MkUvKiAuICovKSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbiArPSAzO1xuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc3RhdGUucG9zaXRpb24gPCAoc3RhdGUubGVuZ3RoIC0gMSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm47XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKSB7XG4gIGlucHV0ID0gU3RyaW5nKGlucHV0KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKGlucHV0Lmxlbmd0aCAhPT0gMCkge1xuXG4gICAgLy8gQWRkIHRhaWxpbmcgYFxcbmAgaWYgbm90IGV4aXN0c1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGlucHV0Lmxlbmd0aCAtIDEpICE9PSAweDBBLyogTEYgKi8gJiZcbiAgICAgICAgaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMHgwRC8qIENSICovKSB7XG4gICAgICBpbnB1dCArPSAnXFxuJztcbiAgICB9XG5cbiAgICAvLyBTdHJpcCBCT01cbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDEpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGF0ZSA9IG5ldyBTdGF0ZShpbnB1dCwgb3B0aW9ucyk7XG5cbiAgLy8gVXNlIDAgYXMgc3RyaW5nIHRlcm1pbmF0b3IuIFRoYXQgc2lnbmlmaWNhbnRseSBzaW1wbGlmaWVzIGJvdW5kcyBjaGVjay5cbiAgc3RhdGUuaW5wdXQgKz0gJ1xcMCc7XG5cbiAgd2hpbGUgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSAweDIwLyogU3BhY2UgKi8pIHtcbiAgICBzdGF0ZS5saW5lSW5kZW50ICs9IDE7XG4gICAgc3RhdGUucG9zaXRpb24gKz0gMTtcbiAgfVxuXG4gIHdoaWxlIChzdGF0ZS5wb3NpdGlvbiA8IChzdGF0ZS5sZW5ndGggLSAxKSkge1xuICAgIHJlYWREb2N1bWVudChzdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGUuZG9jdW1lbnRzO1xufVxuXG5cbmZ1bmN0aW9uIGxvYWRBbGwoaW5wdXQsIGl0ZXJhdG9yLCBvcHRpb25zKSB7XG4gIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKSwgaW5kZXgsIGxlbmd0aDtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gZG9jdW1lbnRzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBpdGVyYXRvcihkb2N1bWVudHNbaW5kZXhdKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGxvYWQoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdmFyIGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpO1xuXG4gIGlmIChkb2N1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgLyplc2xpbnQtZGlzYWJsZSBuby11bmRlZmluZWQqL1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBkb2N1bWVudHNbMF07XG4gIH1cbiAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ2V4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlJyk7XG59XG5cblxuZnVuY3Rpb24gc2FmZUxvYWRBbGwoaW5wdXQsIG91dHB1dCwgb3B0aW9ucykge1xuICBsb2FkQWxsKGlucHV0LCBvdXRwdXQsIGNvbW1vbi5leHRlbmQoeyBzY2hlbWE6IERFRkFVTFRfU0FGRV9TQ0hFTUEgfSwgb3B0aW9ucykpO1xufVxuXG5cbmZ1bmN0aW9uIHNhZmVMb2FkKGlucHV0LCBvcHRpb25zKSB7XG4gIHJldHVybiBsb2FkKGlucHV0LCBjb21tb24uZXh0ZW5kKHsgc2NoZW1hOiBERUZBVUxUX1NBRkVfU0NIRU1BIH0sIG9wdGlvbnMpKTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cy5sb2FkQWxsICAgICA9IGxvYWRBbGw7XG5tb2R1bGUuZXhwb3J0cy5sb2FkICAgICAgICA9IGxvYWQ7XG5tb2R1bGUuZXhwb3J0cy5zYWZlTG9hZEFsbCA9IHNhZmVMb2FkQWxsO1xubW9kdWxlLmV4cG9ydHMuc2FmZUxvYWQgICAgPSBzYWZlTG9hZDtcbiIsIid1c2Ugc3RyaWN0JztcblxuXG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxuXG5mdW5jdGlvbiBNYXJrKG5hbWUsIGJ1ZmZlciwgcG9zaXRpb24sIGxpbmUsIGNvbHVtbikge1xuICB0aGlzLm5hbWUgICAgID0gbmFtZTtcbiAgdGhpcy5idWZmZXIgICA9IGJ1ZmZlcjtcbiAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICB0aGlzLmxpbmUgICAgID0gbGluZTtcbiAgdGhpcy5jb2x1bW4gICA9IGNvbHVtbjtcbn1cblxuXG5NYXJrLnByb3RvdHlwZS5nZXRTbmlwcGV0ID0gZnVuY3Rpb24gZ2V0U25pcHBldChpbmRlbnQsIG1heExlbmd0aCkge1xuICB2YXIgaGVhZCwgc3RhcnQsIHRhaWwsIGVuZCwgc25pcHBldDtcblxuICBpZiAoIXRoaXMuYnVmZmVyKSByZXR1cm4gbnVsbDtcblxuICBpbmRlbnQgPSBpbmRlbnQgfHwgNDtcbiAgbWF4TGVuZ3RoID0gbWF4TGVuZ3RoIHx8IDc1O1xuXG4gIGhlYWQgPSAnJztcbiAgc3RhcnQgPSB0aGlzLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChzdGFydCA+IDAgJiYgJ1xceDAwXFxyXFxuXFx4ODVcXHUyMDI4XFx1MjAyOScuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoc3RhcnQgLSAxKSkgPT09IC0xKSB7XG4gICAgc3RhcnQgLT0gMTtcbiAgICBpZiAodGhpcy5wb3NpdGlvbiAtIHN0YXJ0ID4gKG1heExlbmd0aCAvIDIgLSAxKSkge1xuICAgICAgaGVhZCA9ICcgLi4uICc7XG4gICAgICBzdGFydCArPSA1O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdGFpbCA9ICcnO1xuICBlbmQgPSB0aGlzLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChlbmQgPCB0aGlzLmJ1ZmZlci5sZW5ndGggJiYgJ1xceDAwXFxyXFxuXFx4ODVcXHUyMDI4XFx1MjAyOScuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoZW5kKSkgPT09IC0xKSB7XG4gICAgZW5kICs9IDE7XG4gICAgaWYgKGVuZCAtIHRoaXMucG9zaXRpb24gPiAobWF4TGVuZ3RoIC8gMiAtIDEpKSB7XG4gICAgICB0YWlsID0gJyAuLi4gJztcbiAgICAgIGVuZCAtPSA1O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc25pcHBldCA9IHRoaXMuYnVmZmVyLnNsaWNlKHN0YXJ0LCBlbmQpO1xuXG4gIHJldHVybiBjb21tb24ucmVwZWF0KCcgJywgaW5kZW50KSArIGhlYWQgKyBzbmlwcGV0ICsgdGFpbCArICdcXG4nICtcbiAgICAgICAgIGNvbW1vbi5yZXBlYXQoJyAnLCBpbmRlbnQgKyB0aGlzLnBvc2l0aW9uIC0gc3RhcnQgKyBoZWFkLmxlbmd0aCkgKyAnXic7XG59O1xuXG5cbk1hcmsucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoY29tcGFjdCkge1xuICB2YXIgc25pcHBldCwgd2hlcmUgPSAnJztcblxuICBpZiAodGhpcy5uYW1lKSB7XG4gICAgd2hlcmUgKz0gJ2luIFwiJyArIHRoaXMubmFtZSArICdcIiAnO1xuICB9XG5cbiAgd2hlcmUgKz0gJ2F0IGxpbmUgJyArICh0aGlzLmxpbmUgKyAxKSArICcsIGNvbHVtbiAnICsgKHRoaXMuY29sdW1uICsgMSk7XG5cbiAgaWYgKCFjb21wYWN0KSB7XG4gICAgc25pcHBldCA9IHRoaXMuZ2V0U25pcHBldCgpO1xuXG4gICAgaWYgKHNuaXBwZXQpIHtcbiAgICAgIHdoZXJlICs9ICc6XFxuJyArIHNuaXBwZXQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdoZXJlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcms7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qZXNsaW50LWRpc2FibGUgbWF4LWxlbiovXG5cbnZhciBjb21tb24gICAgICAgID0gcmVxdWlyZSgnLi9jb21tb24nKTtcbnZhciBZQU1MRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9leGNlcHRpb24nKTtcbnZhciBUeXBlICAgICAgICAgID0gcmVxdWlyZSgnLi90eXBlJyk7XG5cblxuZnVuY3Rpb24gY29tcGlsZUxpc3Qoc2NoZW1hLCBuYW1lLCByZXN1bHQpIHtcbiAgdmFyIGV4Y2x1ZGUgPSBbXTtcblxuICBzY2hlbWEuaW5jbHVkZS5mb3JFYWNoKGZ1bmN0aW9uIChpbmNsdWRlZFNjaGVtYSkge1xuICAgIHJlc3VsdCA9IGNvbXBpbGVMaXN0KGluY2x1ZGVkU2NoZW1hLCBuYW1lLCByZXN1bHQpO1xuICB9KTtcblxuICBzY2hlbWFbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudFR5cGUpIHtcbiAgICByZXN1bHQuZm9yRWFjaChmdW5jdGlvbiAocHJldmlvdXNUeXBlLCBwcmV2aW91c0luZGV4KSB7XG4gICAgICBpZiAocHJldmlvdXNUeXBlLnRhZyA9PT0gY3VycmVudFR5cGUudGFnKSB7XG4gICAgICAgIGV4Y2x1ZGUucHVzaChwcmV2aW91c0luZGV4KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlc3VsdC5wdXNoKGN1cnJlbnRUeXBlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdC5maWx0ZXIoZnVuY3Rpb24gKHR5cGUsIGluZGV4KSB7XG4gICAgcmV0dXJuIGV4Y2x1ZGUuaW5kZXhPZihpbmRleCkgPT09IC0xO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiBjb21waWxlTWFwKC8qIGxpc3RzLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fSwgaW5kZXgsIGxlbmd0aDtcblxuICBmdW5jdGlvbiBjb2xsZWN0VHlwZSh0eXBlKSB7XG4gICAgcmVzdWx0W3R5cGUudGFnXSA9IHR5cGU7XG4gIH1cblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBhcmd1bWVudHNbaW5kZXhdLmZvckVhY2goY29sbGVjdFR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuXG5mdW5jdGlvbiBTY2hlbWEoZGVmaW5pdGlvbikge1xuICB0aGlzLmluY2x1ZGUgID0gZGVmaW5pdGlvbi5pbmNsdWRlICB8fCBbXTtcbiAgdGhpcy5pbXBsaWNpdCA9IGRlZmluaXRpb24uaW1wbGljaXQgfHwgW107XG4gIHRoaXMuZXhwbGljaXQgPSBkZWZpbml0aW9uLmV4cGxpY2l0IHx8IFtdO1xuXG4gIHRoaXMuaW1wbGljaXQuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgIGlmICh0eXBlLmxvYWRLaW5kICYmIHR5cGUubG9hZEtpbmQgIT09ICdzY2FsYXInKSB7XG4gICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuICB9KTtcblxuICB0aGlzLmNvbXBpbGVkSW1wbGljaXQgPSBjb21waWxlTGlzdCh0aGlzLCAnaW1wbGljaXQnLCBbXSk7XG4gIHRoaXMuY29tcGlsZWRFeHBsaWNpdCA9IGNvbXBpbGVMaXN0KHRoaXMsICdleHBsaWNpdCcsIFtdKTtcbiAgdGhpcy5jb21waWxlZFR5cGVNYXAgID0gY29tcGlsZU1hcCh0aGlzLmNvbXBpbGVkSW1wbGljaXQsIHRoaXMuY29tcGlsZWRFeHBsaWNpdCk7XG59XG5cblxuU2NoZW1hLkRFRkFVTFQgPSBudWxsO1xuXG5cblNjaGVtYS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGVTY2hlbWEoKSB7XG4gIHZhciBzY2hlbWFzLCB0eXBlcztcblxuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6XG4gICAgICBzY2hlbWFzID0gU2NoZW1hLkRFRkFVTFQ7XG4gICAgICB0eXBlcyA9IGFyZ3VtZW50c1swXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAyOlxuICAgICAgc2NoZW1hcyA9IGFyZ3VtZW50c1swXTtcbiAgICAgIHR5cGVzID0gYXJndW1lbnRzWzFdO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIFNjaGVtYS5jcmVhdGUgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHNjaGVtYXMgPSBjb21tb24udG9BcnJheShzY2hlbWFzKTtcbiAgdHlwZXMgPSBjb21tb24udG9BcnJheSh0eXBlcyk7XG5cbiAgaWYgKCFzY2hlbWFzLmV2ZXJ5KGZ1bmN0aW9uIChzY2hlbWEpIHsgcmV0dXJuIHNjaGVtYSBpbnN0YW5jZW9mIFNjaGVtYTsgfSkpIHtcbiAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignU3BlY2lmaWVkIGxpc3Qgb2Ygc3VwZXIgc2NoZW1hcyAob3IgYSBzaW5nbGUgU2NoZW1hIG9iamVjdCkgY29udGFpbnMgYSBub24tU2NoZW1hIG9iamVjdC4nKTtcbiAgfVxuXG4gIGlmICghdHlwZXMuZXZlcnkoZnVuY3Rpb24gKHR5cGUpIHsgcmV0dXJuIHR5cGUgaW5zdGFuY2VvZiBUeXBlOyB9KSkge1xuICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuJyk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNjaGVtYSh7XG4gICAgaW5jbHVkZTogc2NoZW1hcyxcbiAgICBleHBsaWNpdDogdHlwZXNcbiAgfSk7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gU2NoZW1hO1xuIiwiLy8gU3RhbmRhcmQgWUFNTCdzIENvcmUgc2NoZW1hLlxuLy8gaHR0cDovL3d3dy55YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjaWQyODA0OTIzXG4vL1xuLy8gTk9URTogSlMtWUFNTCBkb2VzIG5vdCBzdXBwb3J0IHNjaGVtYS1zcGVjaWZpYyB0YWcgcmVzb2x1dGlvbiByZXN0cmljdGlvbnMuXG4vLyBTbywgQ29yZSBzY2hlbWEgaGFzIG5vIGRpc3RpbmN0aW9ucyBmcm9tIEpTT04gc2NoZW1hIGlzIEpTLVlBTUwuXG5cblxuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBTY2hlbWEgPSByZXF1aXJlKCcuLi9zY2hlbWEnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEoe1xuICBpbmNsdWRlOiBbXG4gICAgcmVxdWlyZSgnLi9qc29uJylcbiAgXVxufSk7XG4iLCIvLyBKUy1ZQU1MJ3MgZGVmYXVsdCBzY2hlbWEgZm9yIGBsb2FkYCBmdW5jdGlvbi5cbi8vIEl0IGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIFlBTUwgc3BlY2lmaWNhdGlvbi5cbi8vXG4vLyBUaGlzIHNjaGVtYSBpcyBiYXNlZCBvbiBKUy1ZQU1MJ3MgZGVmYXVsdCBzYWZlIHNjaGVtYSBhbmQgaW5jbHVkZXNcbi8vIEphdmFTY3JpcHQtc3BlY2lmaWMgdHlwZXM6ICEhanMvdW5kZWZpbmVkLCAhIWpzL3JlZ2V4cCBhbmQgISFqcy9mdW5jdGlvbi5cbi8vXG4vLyBBbHNvIHRoaXMgc2NoZW1hIGlzIHVzZWQgYXMgZGVmYXVsdCBiYXNlIHNjaGVtYSBhdCBgU2NoZW1hLmNyZWF0ZWAgZnVuY3Rpb24uXG5cblxuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBTY2hlbWEgPSByZXF1aXJlKCcuLi9zY2hlbWEnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFNjaGVtYS5ERUZBVUxUID0gbmV3IFNjaGVtYSh7XG4gIGluY2x1ZGU6IFtcbiAgICByZXF1aXJlKCcuL2RlZmF1bHRfc2FmZScpXG4gIF0sXG4gIGV4cGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9qcy91bmRlZmluZWQnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL2pzL3JlZ2V4cCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvanMvZnVuY3Rpb24nKVxuICBdXG59KTtcbiIsIi8vIEpTLVlBTUwncyBkZWZhdWx0IHNjaGVtYSBmb3IgYHNhZmVMb2FkYCBmdW5jdGlvbi5cbi8vIEl0IGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIFlBTUwgc3BlY2lmaWNhdGlvbi5cbi8vXG4vLyBUaGlzIHNjaGVtYSBpcyBiYXNlZCBvbiBzdGFuZGFyZCBZQU1MJ3MgQ29yZSBzY2hlbWEgYW5kIGluY2x1ZGVzIG1vc3Qgb2Zcbi8vIGV4dHJhIHR5cGVzIGRlc2NyaWJlZCBhdCBZQU1MIHRhZyByZXBvc2l0b3J5LiAoaHR0cDovL3lhbWwub3JnL3R5cGUvKVxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hKHtcbiAgaW5jbHVkZTogW1xuICAgIHJlcXVpcmUoJy4vY29yZScpXG4gIF0sXG4gIGltcGxpY2l0OiBbXG4gICAgcmVxdWlyZSgnLi4vdHlwZS90aW1lc3RhbXAnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL21lcmdlJylcbiAgXSxcbiAgZXhwbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL2JpbmFyeScpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvb21hcCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvcGFpcnMnKSxcbiAgICByZXF1aXJlKCcuLi90eXBlL3NldCcpXG4gIF1cbn0pO1xuIiwiLy8gU3RhbmRhcmQgWUFNTCdzIEZhaWxzYWZlIHNjaGVtYS5cbi8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwMjM0NlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hKHtcbiAgZXhwbGljaXQ6IFtcbiAgICByZXF1aXJlKCcuLi90eXBlL3N0cicpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvc2VxJyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9tYXAnKVxuICBdXG59KTtcbiIsIi8vIFN0YW5kYXJkIFlBTUwncyBKU09OIHNjaGVtYS5cbi8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwMzIzMVxuLy9cbi8vIE5PVEU6IEpTLVlBTUwgZG9lcyBub3Qgc3VwcG9ydCBzY2hlbWEtc3BlY2lmaWMgdGFnIHJlc29sdXRpb24gcmVzdHJpY3Rpb25zLlxuLy8gU28sIHRoaXMgc2NoZW1hIGlzIG5vdCBzdWNoIHN0cmljdCBhcyBkZWZpbmVkIGluIHRoZSBZQU1MIHNwZWNpZmljYXRpb24uXG4vLyBJdCBhbGxvd3MgbnVtYmVycyBpbiBiaW5hcnkgbm90YWlvbiwgdXNlIGBOdWxsYCBhbmQgYE5VTExgIGFzIGBudWxsYCwgZXRjLlxuXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgU2NoZW1hID0gcmVxdWlyZSgnLi4vc2NoZW1hJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hKHtcbiAgaW5jbHVkZTogW1xuICAgIHJlcXVpcmUoJy4vZmFpbHNhZmUnKVxuICBdLFxuICBpbXBsaWNpdDogW1xuICAgIHJlcXVpcmUoJy4uL3R5cGUvbnVsbCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvYm9vbCcpLFxuICAgIHJlcXVpcmUoJy4uL3R5cGUvaW50JyksXG4gICAgcmVxdWlyZSgnLi4vdHlwZS9mbG9hdCcpXG4gIF1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG5cbnZhciBUWVBFX0NPTlNUUlVDVE9SX09QVElPTlMgPSBbXG4gICdraW5kJyxcbiAgJ3Jlc29sdmUnLFxuICAnY29uc3RydWN0JyxcbiAgJ2luc3RhbmNlT2YnLFxuICAncHJlZGljYXRlJyxcbiAgJ3JlcHJlc2VudCcsXG4gICdkZWZhdWx0U3R5bGUnLFxuICAnc3R5bGVBbGlhc2VzJ1xuXTtcblxudmFyIFlBTUxfTk9ERV9LSU5EUyA9IFtcbiAgJ3NjYWxhcicsXG4gICdzZXF1ZW5jZScsXG4gICdtYXBwaW5nJ1xuXTtcblxuZnVuY3Rpb24gY29tcGlsZVN0eWxlQWxpYXNlcyhtYXApIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGlmIChtYXAgIT09IG51bGwpIHtcbiAgICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goZnVuY3Rpb24gKHN0eWxlKSB7XG4gICAgICBtYXBbc3R5bGVdLmZvckVhY2goZnVuY3Rpb24gKGFsaWFzKSB7XG4gICAgICAgIHJlc3VsdFtTdHJpbmcoYWxpYXMpXSA9IHN0eWxlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBUeXBlKHRhZywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24gb3B0aW9uIFwiJyArIG5hbWUgKyAnXCIgaXMgbWV0IGluIGRlZmluaXRpb24gb2YgXCInICsgdGFnICsgJ1wiIFlBTUwgdHlwZS4nKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFRPRE86IEFkZCB0YWcgZm9ybWF0IGNoZWNrLlxuICB0aGlzLnRhZyAgICAgICAgICA9IHRhZztcbiAgdGhpcy5raW5kICAgICAgICAgPSBvcHRpb25zWydraW5kJ10gICAgICAgICB8fCBudWxsO1xuICB0aGlzLnJlc29sdmUgICAgICA9IG9wdGlvbnNbJ3Jlc29sdmUnXSAgICAgIHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XG4gIHRoaXMuY29uc3RydWN0ICAgID0gb3B0aW9uc1snY29uc3RydWN0J10gICAgfHwgZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGE7IH07XG4gIHRoaXMuaW5zdGFuY2VPZiAgID0gb3B0aW9uc1snaW5zdGFuY2VPZiddICAgfHwgbnVsbDtcbiAgdGhpcy5wcmVkaWNhdGUgICAgPSBvcHRpb25zWydwcmVkaWNhdGUnXSAgICB8fCBudWxsO1xuICB0aGlzLnJlcHJlc2VudCAgICA9IG9wdGlvbnNbJ3JlcHJlc2VudCddICAgIHx8IG51bGw7XG4gIHRoaXMuZGVmYXVsdFN0eWxlID0gb3B0aW9uc1snZGVmYXVsdFN0eWxlJ10gfHwgbnVsbDtcbiAgdGhpcy5zdHlsZUFsaWFzZXMgPSBjb21waWxlU3R5bGVBbGlhc2VzKG9wdGlvbnNbJ3N0eWxlQWxpYXNlcyddIHx8IG51bGwpO1xuXG4gIGlmIChZQU1MX05PREVfS0lORFMuaW5kZXhPZih0aGlzLmtpbmQpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdVbmtub3duIGtpbmQgXCInICsgdGhpcy5raW5kICsgJ1wiIGlzIHNwZWNpZmllZCBmb3IgXCInICsgdGFnICsgJ1wiIFlBTUwgdHlwZS4nKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFR5cGU7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSovXG5cbi8vIEEgdHJpY2sgZm9yIGJyb3dzZXJpZmllZCB2ZXJzaW9uLlxuLy8gU2luY2Ugd2UgbWFrZSBicm93c2VyaWZpZXIgdG8gaWdub3JlIGBidWZmZXJgIG1vZHVsZSwgTm9kZUJ1ZmZlciB3aWxsIGJlIHVuZGVmaW5lZFxudmFyIE5vZGVCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG52YXIgVHlwZSAgICAgICA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuXG4vLyBbIDY0LCA2NSwgNjYgXSAtPiBbIHBhZGRpbmcsIENSLCBMRiBdXG52YXIgQkFTRTY0X01BUCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVxcblxccic7XG5cblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxCaW5hcnkoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBjb2RlLCBpZHgsIGJpdGxlbiA9IDAsIG1heCA9IGRhdGEubGVuZ3RoLCBtYXAgPSBCQVNFNjRfTUFQO1xuXG4gIC8vIENvbnZlcnQgb25lIGJ5IG9uZS5cbiAgZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgY29kZSA9IG1hcC5pbmRleE9mKGRhdGEuY2hhckF0KGlkeCkpO1xuXG4gICAgLy8gU2tpcCBDUi9MRlxuICAgIGlmIChjb2RlID4gNjQpIGNvbnRpbnVlO1xuXG4gICAgLy8gRmFpbCBvbiBpbGxlZ2FsIGNoYXJhY3RlcnNcbiAgICBpZiAoY29kZSA8IDApIHJldHVybiBmYWxzZTtcblxuICAgIGJpdGxlbiArPSA2O1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBiaXRzIGxlZnQsIHNvdXJjZSB3YXMgY29ycnVwdGVkXG4gIHJldHVybiAoYml0bGVuICUgOCkgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxCaW5hcnkoZGF0YSkge1xuICB2YXIgaWR4LCB0YWlsYml0cyxcbiAgICAgIGlucHV0ID0gZGF0YS5yZXBsYWNlKC9bXFxyXFxuPV0vZywgJycpLCAvLyByZW1vdmUgQ1IvTEYgJiBwYWRkaW5nIHRvIHNpbXBsaWZ5IHNjYW5cbiAgICAgIG1heCA9IGlucHV0Lmxlbmd0aCxcbiAgICAgIG1hcCA9IEJBU0U2NF9NQVAsXG4gICAgICBiaXRzID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIC8vIENvbGxlY3QgYnkgNio0IGJpdHMgKDMgYnl0ZXMpXG5cbiAgZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgaWYgKChpZHggJSA0ID09PSAwKSAmJiBpZHgpIHtcbiAgICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDE2KSAmIDB4RkYpO1xuICAgICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gOCkgJiAweEZGKTtcbiAgICAgIHJlc3VsdC5wdXNoKGJpdHMgJiAweEZGKTtcbiAgICB9XG5cbiAgICBiaXRzID0gKGJpdHMgPDwgNikgfCBtYXAuaW5kZXhPZihpbnB1dC5jaGFyQXQoaWR4KSk7XG4gIH1cblxuICAvLyBEdW1wIHRhaWxcblxuICB0YWlsYml0cyA9IChtYXggJSA0KSAqIDY7XG5cbiAgaWYgKHRhaWxiaXRzID09PSAwKSB7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gMTYpICYgMHhGRik7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gOCkgJiAweEZGKTtcbiAgICByZXN1bHQucHVzaChiaXRzICYgMHhGRik7XG4gIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDE4KSB7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gMTApICYgMHhGRik7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gMikgJiAweEZGKTtcbiAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTIpIHtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiA0KSAmIDB4RkYpO1xuICB9XG5cbiAgLy8gV3JhcCBpbnRvIEJ1ZmZlciBmb3IgTm9kZUpTIGFuZCBsZWF2ZSBBcnJheSBmb3IgYnJvd3NlclxuICBpZiAoTm9kZUJ1ZmZlcikgcmV0dXJuIG5ldyBOb2RlQnVmZmVyKHJlc3VsdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEJpbmFyeShvYmplY3QgLyosIHN0eWxlKi8pIHtcbiAgdmFyIHJlc3VsdCA9ICcnLCBiaXRzID0gMCwgaWR4LCB0YWlsLFxuICAgICAgbWF4ID0gb2JqZWN0Lmxlbmd0aCxcbiAgICAgIG1hcCA9IEJBU0U2NF9NQVA7XG5cbiAgLy8gQ29udmVydCBldmVyeSB0aHJlZSBieXRlcyB0byA0IEFTQ0lJIGNoYXJhY3RlcnMuXG5cbiAgZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgaWYgKChpZHggJSAzID09PSAwKSAmJiBpZHgpIHtcbiAgICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTgpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDEyKSAmIDB4M0ZdO1xuICAgICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiA2KSAmIDB4M0ZdO1xuICAgICAgcmVzdWx0ICs9IG1hcFtiaXRzICYgMHgzRl07XG4gICAgfVxuXG4gICAgYml0cyA9IChiaXRzIDw8IDgpICsgb2JqZWN0W2lkeF07XG4gIH1cblxuICAvLyBEdW1wIHRhaWxcblxuICB0YWlsID0gbWF4ICUgMztcblxuICBpZiAodGFpbCA9PT0gMCkge1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTgpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxMikgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDYpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFtiaXRzICYgMHgzRl07XG4gIH0gZWxzZSBpZiAodGFpbCA9PT0gMikge1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTApICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiA0KSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPDwgMikgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWzY0XTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAxKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPDwgNCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWzY0XTtcbiAgICByZXN1bHQgKz0gbWFwWzY0XTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzQmluYXJ5KG9iamVjdCkge1xuICByZXR1cm4gTm9kZUJ1ZmZlciAmJiBOb2RlQnVmZmVyLmlzQnVmZmVyKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmJpbmFyeScsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sQmluYXJ5LFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxCaW5hcnksXG4gIHByZWRpY2F0ZTogaXNCaW5hcnksXG4gIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbEJpbmFyeVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEJvb2xlYW4oZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aDtcblxuICByZXR1cm4gKG1heCA9PT0gNCAmJiAoZGF0YSA9PT0gJ3RydWUnIHx8IGRhdGEgPT09ICdUcnVlJyB8fCBkYXRhID09PSAnVFJVRScpKSB8fFxuICAgICAgICAgKG1heCA9PT0gNSAmJiAoZGF0YSA9PT0gJ2ZhbHNlJyB8fCBkYXRhID09PSAnRmFsc2UnIHx8IGRhdGEgPT09ICdGQUxTRScpKTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbEJvb2xlYW4oZGF0YSkge1xuICByZXR1cm4gZGF0YSA9PT0gJ3RydWUnIHx8XG4gICAgICAgICBkYXRhID09PSAnVHJ1ZScgfHxcbiAgICAgICAgIGRhdGEgPT09ICdUUlVFJztcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuKG9iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IEJvb2xlYW5dJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sQm9vbGVhbixcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQm9vbGVhbixcbiAgcHJlZGljYXRlOiBpc0Jvb2xlYW4sXG4gIHJlcHJlc2VudDoge1xuICAgIGxvd2VyY2FzZTogZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gb2JqZWN0ID8gJ3RydWUnIDogJ2ZhbHNlJzsgfSxcbiAgICB1cHBlcmNhc2U6IGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuIG9iamVjdCA/ICdUUlVFJyA6ICdGQUxTRSc7IH0sXG4gICAgY2FtZWxjYXNlOiBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiBvYmplY3QgPyAnVHJ1ZScgOiAnRmFsc2UnOyB9XG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogJ2xvd2VyY2FzZSdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgVHlwZSAgID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG52YXIgWUFNTF9GTE9BVF9QQVRURVJOID0gbmV3IFJlZ0V4cChcbiAgJ14oPzpbLStdPyg/OlswLTldWzAtOV9dKilcXFxcLlswLTlfXSooPzpbZUVdWy0rXVswLTldKyk/JyArXG4gICd8XFxcXC5bMC05X10rKD86W2VFXVstK11bMC05XSspPycgK1xuICAnfFstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXFxcLlswLTlfXSonICtcbiAgJ3xbLStdP1xcXFwuKD86aW5mfEluZnxJTkYpJyArXG4gICd8XFxcXC4oPzpuYW58TmFOfE5BTikpJCcpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEZsb2F0KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICBpZiAoIVlBTUxfRkxPQVRfUEFUVEVSTi50ZXN0KGRhdGEpKSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxGbG9hdChkYXRhKSB7XG4gIHZhciB2YWx1ZSwgc2lnbiwgYmFzZSwgZGlnaXRzO1xuXG4gIHZhbHVlICA9IGRhdGEucmVwbGFjZSgvXy9nLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgc2lnbiAgID0gdmFsdWVbMF0gPT09ICctJyA/IC0xIDogMTtcbiAgZGlnaXRzID0gW107XG5cbiAgaWYgKCcrLScuaW5kZXhPZih2YWx1ZVswXSkgPj0gMCkge1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gIH1cblxuICBpZiAodmFsdWUgPT09ICcuaW5mJykge1xuICAgIHJldHVybiAoc2lnbiA9PT0gMSkgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJy5uYW4nKSB7XG4gICAgcmV0dXJuIE5hTjtcblxuICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoJzonKSA+PSAwKSB7XG4gICAgdmFsdWUuc3BsaXQoJzonKS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgICBkaWdpdHMudW5zaGlmdChwYXJzZUZsb2F0KHYsIDEwKSk7XG4gICAgfSk7XG5cbiAgICB2YWx1ZSA9IDAuMDtcbiAgICBiYXNlID0gMTtcblxuICAgIGRpZ2l0cy5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7XG4gICAgICB2YWx1ZSArPSBkICogYmFzZTtcbiAgICAgIGJhc2UgKj0gNjA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2lnbiAqIHZhbHVlO1xuXG4gIH1cbiAgcmV0dXJuIHNpZ24gKiBwYXJzZUZsb2F0KHZhbHVlLCAxMCk7XG59XG5cblxudmFyIFNDSUVOVElGSUNfV0lUSE9VVF9ET1QgPSAvXlstK10/WzAtOV0rZS87XG5cbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxGbG9hdChvYmplY3QsIHN0eWxlKSB7XG4gIHZhciByZXM7XG5cbiAgaWYgKGlzTmFOKG9iamVjdCkpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlICdsb3dlcmNhc2UnOiByZXR1cm4gJy5uYW4nO1xuICAgICAgY2FzZSAndXBwZXJjYXNlJzogcmV0dXJuICcuTkFOJztcbiAgICAgIGNhc2UgJ2NhbWVsY2FzZSc6IHJldHVybiAnLk5hTic7XG4gICAgfVxuICB9IGVsc2UgaWYgKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSAnbG93ZXJjYXNlJzogcmV0dXJuICcuaW5mJztcbiAgICAgIGNhc2UgJ3VwcGVyY2FzZSc6IHJldHVybiAnLklORic7XG4gICAgICBjYXNlICdjYW1lbGNhc2UnOiByZXR1cm4gJy5JbmYnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgJ2xvd2VyY2FzZSc6IHJldHVybiAnLS5pbmYnO1xuICAgICAgY2FzZSAndXBwZXJjYXNlJzogcmV0dXJuICctLklORic7XG4gICAgICBjYXNlICdjYW1lbGNhc2UnOiByZXR1cm4gJy0uSW5mJztcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpIHtcbiAgICByZXR1cm4gJy0wLjAnO1xuICB9XG5cbiAgcmVzID0gb2JqZWN0LnRvU3RyaW5nKDEwKTtcblxuICAvLyBKUyBzdHJpbmdpZmllciBjYW4gYnVpbGQgc2NpZW50aWZpYyBmb3JtYXQgd2l0aG91dCBkb3RzOiA1ZS0xMDAsXG4gIC8vIHdoaWxlIFlBTUwgcmVxdXJlcyBkb3Q6IDUuZS0xMDAuIEZpeCBpdCB3aXRoIHNpbXBsZSBoYWNrXG5cbiAgcmV0dXJuIFNDSUVOVElGSUNfV0lUSE9VVF9ET1QudGVzdChyZXMpID8gcmVzLnJlcGxhY2UoJ2UnLCAnLmUnKSA6IHJlcztcbn1cblxuZnVuY3Rpb24gaXNGbG9hdChvYmplY3QpIHtcbiAgcmV0dXJuIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXScpICYmXG4gICAgICAgICAob2JqZWN0ICUgMSAhPT0gMCB8fCBjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxGbG9hdCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sRmxvYXQsXG4gIHByZWRpY2F0ZTogaXNGbG9hdCxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sRmxvYXQsXG4gIGRlZmF1bHRTdHlsZTogJ2xvd2VyY2FzZSdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgVHlwZSAgID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5mdW5jdGlvbiBpc0hleENvZGUoYykge1xuICByZXR1cm4gKCgweDMwLyogMCAqLyA8PSBjKSAmJiAoYyA8PSAweDM5LyogOSAqLykpIHx8XG4gICAgICAgICAoKDB4NDEvKiBBICovIDw9IGMpICYmIChjIDw9IDB4NDYvKiBGICovKSkgfHxcbiAgICAgICAgICgoMHg2MS8qIGEgKi8gPD0gYykgJiYgKGMgPD0gMHg2Ni8qIGYgKi8pKTtcbn1cblxuZnVuY3Rpb24gaXNPY3RDb2RlKGMpIHtcbiAgcmV0dXJuICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzNy8qIDcgKi8pKTtcbn1cblxuZnVuY3Rpb24gaXNEZWNDb2RlKGMpIHtcbiAgcmV0dXJuICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzOS8qIDkgKi8pKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxJbnRlZ2VyKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGgsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBoYXNEaWdpdHMgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIGlmICghbWF4KSByZXR1cm4gZmFsc2U7XG5cbiAgY2ggPSBkYXRhW2luZGV4XTtcblxuICAvLyBzaWduXG4gIGlmIChjaCA9PT0gJy0nIHx8IGNoID09PSAnKycpIHtcbiAgICBjaCA9IGRhdGFbKytpbmRleF07XG4gIH1cblxuICBpZiAoY2ggPT09ICcwJykge1xuICAgIC8vIDBcbiAgICBpZiAoaW5kZXggKyAxID09PSBtYXgpIHJldHVybiB0cnVlO1xuICAgIGNoID0gZGF0YVsrK2luZGV4XTtcblxuICAgIC8vIGJhc2UgMiwgYmFzZSA4LCBiYXNlIDE2XG5cbiAgICBpZiAoY2ggPT09ICdiJykge1xuICAgICAgLy8gYmFzZSAyXG4gICAgICBpbmRleCsrO1xuXG4gICAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSAnXycpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoY2ggIT09ICcwJyAmJiBjaCAhPT0gJzEnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzRGlnaXRzO1xuICAgIH1cblxuXG4gICAgaWYgKGNoID09PSAneCcpIHtcbiAgICAgIC8vIGJhc2UgMTZcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09ICdfJykgY29udGludWU7XG4gICAgICAgIGlmICghaXNIZXhDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzRGlnaXRzO1xuICAgIH1cblxuICAgIC8vIGJhc2UgOFxuICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgIGlmIChjaCA9PT0gJ18nKSBjb250aW51ZTtcbiAgICAgIGlmICghaXNPY3RDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSByZXR1cm4gZmFsc2U7XG4gICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzRGlnaXRzO1xuICB9XG5cbiAgLy8gYmFzZSAxMCAoZXhjZXB0IDApIG9yIGJhc2UgNjBcblxuICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgIGlmIChjaCA9PT0gJ18nKSBjb250aW51ZTtcbiAgICBpZiAoY2ggPT09ICc6JykgYnJlYWs7XG4gICAgaWYgKCFpc0RlY0NvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaGFzRGlnaXRzKSByZXR1cm4gZmFsc2U7XG5cbiAgLy8gaWYgIWJhc2U2MCAtIGRvbmU7XG4gIGlmIChjaCAhPT0gJzonKSByZXR1cm4gdHJ1ZTtcblxuICAvLyBiYXNlNjAgYWxtb3N0IG5vdCB1c2VkLCBubyBuZWVkcyB0byBvcHRpbWl6ZVxuICByZXR1cm4gL14oOlswLTVdP1swLTldKSskLy50ZXN0KGRhdGEuc2xpY2UoaW5kZXgpKTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbEludGVnZXIoZGF0YSkge1xuICB2YXIgdmFsdWUgPSBkYXRhLCBzaWduID0gMSwgY2gsIGJhc2UsIGRpZ2l0cyA9IFtdO1xuXG4gIGlmICh2YWx1ZS5pbmRleE9mKCdfJykgIT09IC0xKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9fL2csICcnKTtcbiAgfVxuXG4gIGNoID0gdmFsdWVbMF07XG5cbiAgaWYgKGNoID09PSAnLScgfHwgY2ggPT09ICcrJykge1xuICAgIGlmIChjaCA9PT0gJy0nKSBzaWduID0gLTE7XG4gICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxKTtcbiAgICBjaCA9IHZhbHVlWzBdO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSAnMCcpIHJldHVybiAwO1xuXG4gIGlmIChjaCA9PT0gJzAnKSB7XG4gICAgaWYgKHZhbHVlWzFdID09PSAnYicpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIDIpO1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gJ3gnKSByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLCAxNik7XG4gICAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZSwgOCk7XG4gIH1cblxuICBpZiAodmFsdWUuaW5kZXhPZignOicpICE9PSAtMSkge1xuICAgIHZhbHVlLnNwbGl0KCc6JykuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgZGlnaXRzLnVuc2hpZnQocGFyc2VJbnQodiwgMTApKTtcbiAgICB9KTtcblxuICAgIHZhbHVlID0gMDtcbiAgICBiYXNlID0gMTtcblxuICAgIGRpZ2l0cy5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7XG4gICAgICB2YWx1ZSArPSAoZCAqIGJhc2UpO1xuICAgICAgYmFzZSAqPSA2MDtcbiAgICB9KTtcblxuICAgIHJldHVybiBzaWduICogdmFsdWU7XG5cbiAgfVxuXG4gIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUsIDEwKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlZ2VyKG9iamVjdCkge1xuICByZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiZcbiAgICAgICAgIChvYmplY3QgJSAxID09PSAwICYmICFjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmludCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sSW50ZWdlcixcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sSW50ZWdlcixcbiAgcHJlZGljYXRlOiBpc0ludGVnZXIsXG4gIHJlcHJlc2VudDoge1xuICAgIGJpbmFyeTogICAgICBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiAnMGInICsgb2JqZWN0LnRvU3RyaW5nKDIpOyB9LFxuICAgIG9jdGFsOiAgICAgICBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiAnMCcgICsgb2JqZWN0LnRvU3RyaW5nKDgpOyB9LFxuICAgIGRlY2ltYWw6ICAgICBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiAgICAgICAgb2JqZWN0LnRvU3RyaW5nKDEwKTsgfSxcbiAgICBoZXhhZGVjaW1hbDogZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gJzB4JyArIG9iamVjdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTsgfVxuICB9LFxuICBkZWZhdWx0U3R5bGU6ICdkZWNpbWFsJyxcbiAgc3R5bGVBbGlhc2VzOiB7XG4gICAgYmluYXJ5OiAgICAgIFsgMiwgICdiaW4nIF0sXG4gICAgb2N0YWw6ICAgICAgIFsgOCwgICdvY3QnIF0sXG4gICAgZGVjaW1hbDogICAgIFsgMTAsICdkZWMnIF0sXG4gICAgaGV4YWRlY2ltYWw6IFsgMTYsICdoZXgnIF1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlc3ByaW1hO1xuXG4vLyBCcm93c2VyaWZpZWQgdmVyc2lvbiBkb2VzIG5vdCBoYXZlIGVzcHJpbWFcbi8vXG4vLyAxLiBGb3Igbm9kZS5qcyBqdXN0IHJlcXVpcmUgbW9kdWxlIGFzIGRlcHNcbi8vIDIuIEZvciBicm93c2VyIHRyeSB0byByZXF1aXJlIG11ZHVsZSB2aWEgZXh0ZXJuYWwgQU1EIHN5c3RlbS5cbi8vICAgIElmIG5vdCBmb3VuZCAtIHRyeSB0byBmYWxsYmFjayB0byB3aW5kb3cuZXNwcmltYS4gSWYgbm90XG4vLyAgICBmb3VuZCB0b28gLSB0aGVuIGZhaWwgdG8gcGFyc2UuXG4vL1xudHJ5IHtcbiAgLy8gd29ya2Fyb3VuZCB0byBleGNsdWRlIHBhY2thZ2UgZnJvbSBicm93c2VyaWZ5IGxpc3QuXG4gIHZhciBfcmVxdWlyZSA9IHJlcXVpcmU7XG4gIGVzcHJpbWEgPSBfcmVxdWlyZSgnZXNwcmltYScpO1xufSBjYXRjaCAoXykge1xuICAvKmdsb2JhbCB3aW5kb3cgKi9cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSBlc3ByaW1hID0gd2luZG93LmVzcHJpbWE7XG59XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlSmF2YXNjcmlwdEZ1bmN0aW9uKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB0cnkge1xuICAgIHZhciBzb3VyY2UgPSAnKCcgKyBkYXRhICsgJyknLFxuICAgICAgICBhc3QgICAgPSBlc3ByaW1hLnBhcnNlKHNvdXJjZSwgeyByYW5nZTogdHJ1ZSB9KTtcblxuICAgIGlmIChhc3QudHlwZSAgICAgICAgICAgICAgICAgICAgIT09ICdQcm9ncmFtJyAgICAgICAgICAgICB8fFxuICAgICAgICBhc3QuYm9keS5sZW5ndGggICAgICAgICAgICAgIT09IDEgICAgICAgICAgICAgICAgICAgICB8fFxuICAgICAgICBhc3QuYm9keVswXS50eXBlICAgICAgICAgICAgIT09ICdFeHByZXNzaW9uU3RhdGVtZW50JyB8fFxuICAgICAgICBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUgIT09ICdGdW5jdGlvbkV4cHJlc3Npb24nKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RKYXZhc2NyaXB0RnVuY3Rpb24oZGF0YSkge1xuICAvKmpzbGludCBldmlsOnRydWUqL1xuXG4gIHZhciBzb3VyY2UgPSAnKCcgKyBkYXRhICsgJyknLFxuICAgICAgYXN0ICAgID0gZXNwcmltYS5wYXJzZShzb3VyY2UsIHsgcmFuZ2U6IHRydWUgfSksXG4gICAgICBwYXJhbXMgPSBbXSxcbiAgICAgIGJvZHk7XG5cbiAgaWYgKGFzdC50eXBlICAgICAgICAgICAgICAgICAgICAhPT0gJ1Byb2dyYW0nICAgICAgICAgICAgIHx8XG4gICAgICBhc3QuYm9keS5sZW5ndGggICAgICAgICAgICAgIT09IDEgICAgICAgICAgICAgICAgICAgICB8fFxuICAgICAgYXN0LmJvZHlbMF0udHlwZSAgICAgICAgICAgICE9PSAnRXhwcmVzc2lvblN0YXRlbWVudCcgfHxcbiAgICAgIGFzdC5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSAhPT0gJ0Z1bmN0aW9uRXhwcmVzc2lvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBhc3QuYm9keVswXS5leHByZXNzaW9uLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgIHBhcmFtcy5wdXNoKHBhcmFtLm5hbWUpO1xuICB9KTtcblxuICBib2R5ID0gYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi5ib2R5LnJhbmdlO1xuXG4gIC8vIEVzcHJpbWEncyByYW5nZXMgaW5jbHVkZSB0aGUgZmlyc3QgJ3snIGFuZCB0aGUgbGFzdCAnfScgY2hhcmFjdGVycyBvblxuICAvLyBmdW5jdGlvbiBleHByZXNzaW9ucy4gU28gY3V0IHRoZW0gb3V0LlxuICAvKmVzbGludC1kaXNhYmxlIG5vLW5ldy1mdW5jKi9cbiAgcmV0dXJuIG5ldyBGdW5jdGlvbihwYXJhbXMsIHNvdXJjZS5zbGljZShib2R5WzBdICsgMSwgYm9keVsxXSAtIDEpKTtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50SmF2YXNjcmlwdEZ1bmN0aW9uKG9iamVjdCAvKiwgc3R5bGUqLykge1xuICByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6anMvZnVuY3Rpb24nLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdEZ1bmN0aW9uLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdEphdmFzY3JpcHRGdW5jdGlvbixcbiAgcHJlZGljYXRlOiBpc0Z1bmN0aW9uLFxuICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRGdW5jdGlvblxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlSmF2YXNjcmlwdFJlZ0V4cChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciByZWdleHAgPSBkYXRhLFxuICAgICAgdGFpbCAgID0gL1xcLyhbZ2ltXSopJC8uZXhlYyhkYXRhKSxcbiAgICAgIG1vZGlmaWVycyA9ICcnO1xuXG4gIC8vIGlmIHJlZ2V4cCBzdGFydHMgd2l0aCAnLycgaXQgY2FuIGhhdmUgbW9kaWZpZXJzIGFuZCBtdXN0IGJlIHByb3Blcmx5IGNsb3NlZFxuICAvLyBgL2Zvby9naW1gIC0gbW9kaWZpZXJzIHRhaWwgY2FuIGJlIG1heGltdW0gMyBjaGFyc1xuICBpZiAocmVnZXhwWzBdID09PSAnLycpIHtcbiAgICBpZiAodGFpbCkgbW9kaWZpZXJzID0gdGFpbFsxXTtcblxuICAgIGlmIChtb2RpZmllcnMubGVuZ3RoID4gMykgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGlmIGV4cHJlc3Npb24gc3RhcnRzIHdpdGggLywgaXMgc2hvdWxkIGJlIHByb3Blcmx5IHRlcm1pbmF0ZWRcbiAgICBpZiAocmVnZXhwW3JlZ2V4cC5sZW5ndGggLSBtb2RpZmllcnMubGVuZ3RoIC0gMV0gIT09ICcvJykgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdEphdmFzY3JpcHRSZWdFeHAoZGF0YSkge1xuICB2YXIgcmVnZXhwID0gZGF0YSxcbiAgICAgIHRhaWwgICA9IC9cXC8oW2dpbV0qKSQvLmV4ZWMoZGF0YSksXG4gICAgICBtb2RpZmllcnMgPSAnJztcblxuICAvLyBgL2Zvby9naW1gIC0gdGFpbCBjYW4gYmUgbWF4aW11bSA0IGNoYXJzXG4gIGlmIChyZWdleHBbMF0gPT09ICcvJykge1xuICAgIGlmICh0YWlsKSBtb2RpZmllcnMgPSB0YWlsWzFdO1xuICAgIHJlZ2V4cCA9IHJlZ2V4cC5zbGljZSgxLCByZWdleHAubGVuZ3RoIC0gbW9kaWZpZXJzLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXhwLCBtb2RpZmllcnMpO1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRKYXZhc2NyaXB0UmVnRXhwKG9iamVjdCAvKiwgc3R5bGUqLykge1xuICB2YXIgcmVzdWx0ID0gJy8nICsgb2JqZWN0LnNvdXJjZSArICcvJztcblxuICBpZiAob2JqZWN0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKG9iamVjdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmIChvYmplY3QuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc1JlZ0V4cChvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6anMvcmVnZXhwJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZUphdmFzY3JpcHRSZWdFeHAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0SmF2YXNjcmlwdFJlZ0V4cCxcbiAgcHJlZGljYXRlOiBpc1JlZ0V4cCxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRKYXZhc2NyaXB0UmVnRXhwXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi8uLi90eXBlJyk7XG5cbmZ1bmN0aW9uIHJlc29sdmVKYXZhc2NyaXB0VW5kZWZpbmVkKCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0SmF2YXNjcmlwdFVuZGVmaW5lZCgpIHtcbiAgLyplc2xpbnQtZGlzYWJsZSBuby11bmRlZmluZWQqL1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRKYXZhc2NyaXB0VW5kZWZpbmVkKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmpzL3VuZGVmaW5lZCcsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIHJlc29sdmU6IHJlc29sdmVKYXZhc2NyaXB0VW5kZWZpbmVkLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdEphdmFzY3JpcHRVbmRlZmluZWQsXG4gIHByZWRpY2F0ZTogaXNVbmRlZmluZWQsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50SmF2YXNjcmlwdFVuZGVmaW5lZFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjptYXAnLCB7XG4gIGtpbmQ6ICdtYXBwaW5nJyxcbiAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTsgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUeXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE1lcmdlKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgPT09ICc8PCcgfHwgZGF0YSA9PT0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE1lcmdlXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sTnVsbChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcblxuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGg7XG5cbiAgcmV0dXJuIChtYXggPT09IDEgJiYgZGF0YSA9PT0gJ34nKSB8fFxuICAgICAgICAgKG1heCA9PT0gNCAmJiAoZGF0YSA9PT0gJ251bGwnIHx8IGRhdGEgPT09ICdOdWxsJyB8fCBkYXRhID09PSAnTlVMTCcpKTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbE51bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgPT09IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm51bGwnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE51bGwsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE51bGwsXG4gIHByZWRpY2F0ZTogaXNOdWxsLFxuICByZXByZXNlbnQ6IHtcbiAgICBjYW5vbmljYWw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICd+JzsgICAgfSxcbiAgICBsb3dlcmNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdudWxsJzsgfSxcbiAgICB1cHBlcmNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdOVUxMJzsgfSxcbiAgICBjYW1lbGNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdOdWxsJzsgfVxuICB9LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbnZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF90b1N0cmluZyAgICAgICA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sT21hcChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcblxuICB2YXIgb2JqZWN0S2V5cyA9IFtdLCBpbmRleCwgbGVuZ3RoLCBwYWlyLCBwYWlyS2V5LCBwYWlySGFzS2V5LFxuICAgICAgb2JqZWN0ID0gZGF0YTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBwYWlyID0gb2JqZWN0W2luZGV4XTtcbiAgICBwYWlySGFzS2V5ID0gZmFsc2U7XG5cbiAgICBpZiAoX3RvU3RyaW5nLmNhbGwocGFpcikgIT09ICdbb2JqZWN0IE9iamVjdF0nKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKHBhaXJLZXkgaW4gcGFpcikge1xuICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhaXIsIHBhaXJLZXkpKSB7XG4gICAgICAgIGlmICghcGFpckhhc0tleSkgcGFpckhhc0tleSA9IHRydWU7XG4gICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFpckhhc0tleSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKG9iamVjdEtleXMuaW5kZXhPZihwYWlyS2V5KSA9PT0gLTEpIG9iamVjdEtleXMucHVzaChwYWlyS2V5KTtcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sT21hcChkYXRhKSB7XG4gIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpvbWFwJywge1xuICBraW5kOiAnc2VxdWVuY2UnLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE9tYXAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE9tYXBcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxudmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sUGFpcnMoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cbiAgdmFyIGluZGV4LCBsZW5ndGgsIHBhaXIsIGtleXMsIHJlc3VsdCxcbiAgICAgIG9iamVjdCA9IGRhdGE7XG5cbiAgcmVzdWx0ID0gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuXG4gICAgaWYgKF90b1N0cmluZy5jYWxsKHBhaXIpICE9PSAnW29iamVjdCBPYmplY3RdJykgcmV0dXJuIGZhbHNlO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHBhaXIpO1xuXG4gICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXN1bHRbaW5kZXhdID0gWyBrZXlzWzBdLCBwYWlyW2tleXNbMF1dIF07XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbFBhaXJzKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBbXTtcblxuICB2YXIgaW5kZXgsIGxlbmd0aCwgcGFpciwga2V5cywgcmVzdWx0LFxuICAgICAgb2JqZWN0ID0gZGF0YTtcblxuICByZXN1bHQgPSBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCk7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpciA9IG9iamVjdFtpbmRleF07XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMocGFpcik7XG5cbiAgICByZXN1bHRbaW5kZXhdID0gWyBrZXlzWzBdLCBwYWlyW2tleXNbMF1dIF07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpwYWlycycsIHtcbiAga2luZDogJ3NlcXVlbmNlJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxQYWlycyxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sUGFpcnNcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6c2VxJywge1xuICBraW5kOiAnc2VxdWVuY2UnLFxuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdOyB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbnZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbFNldChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcblxuICB2YXIga2V5LCBvYmplY3QgPSBkYXRhO1xuXG4gIGZvciAoa2V5IGluIG9iamVjdCkge1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgIGlmIChvYmplY3Rba2V5XSAhPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sU2V0KGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnNldCcsIHtcbiAga2luZDogJ21hcHBpbmcnLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbFNldCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sU2V0XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuLi90eXBlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnN0cicsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDogJyc7IH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxudmFyIFlBTUxfVElNRVNUQU1QX1JFR0VYUCA9IG5ldyBSZWdFeHAoXG4gICdeKFswLTldWzAtOV1bMC05XVswLTldKScgICAgICAgICAgKyAvLyBbMV0geWVhclxuICAnLShbMC05XVswLTldPyknICAgICAgICAgICAgICAgICAgICsgLy8gWzJdIG1vbnRoXG4gICctKFswLTldWzAtOV0/KScgICAgICAgICAgICAgICAgICAgKyAvLyBbM10gZGF5XG4gICcoPzooPzpbVHRdfFsgXFxcXHRdKyknICAgICAgICAgICAgICArIC8vIC4uLlxuICAnKFswLTldWzAtOV0/KScgICAgICAgICAgICAgICAgICAgICsgLy8gWzRdIGhvdXJcbiAgJzooWzAtOV1bMC05XSknICAgICAgICAgICAgICAgICAgICArIC8vIFs1XSBtaW51dGVcbiAgJzooWzAtOV1bMC05XSknICAgICAgICAgICAgICAgICAgICArIC8vIFs2XSBzZWNvbmRcbiAgJyg/OlxcXFwuKFswLTldKikpPycgICAgICAgICAgICAgICAgICsgLy8gWzddIGZyYWN0aW9uXG4gICcoPzpbIFxcXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pJyArIC8vIFs4XSB0eiBbOV0gdHpfc2lnbiBbMTBdIHR6X2hvdXJcbiAgJyg/OjooWzAtOV1bMC05XSkpPykpPyk/JCcpOyAgICAgICAgIC8vIFsxMV0gdHpfbWludXRlXG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sVGltZXN0YW1wKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wKGRhdGEpIHtcbiAgdmFyIG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24gPSAwLFxuICAgICAgZGVsdGEgPSBudWxsLCB0el9ob3VyLCB0el9taW51dGUsIGRhdGU7XG5cbiAgbWF0Y2ggPSBZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhKTtcblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHRocm93IG5ldyBFcnJvcignRGF0ZSByZXNvbHZlIGVycm9yJyk7XG5cbiAgLy8gbWF0Y2g6IFsxXSB5ZWFyIFsyXSBtb250aCBbM10gZGF5XG5cbiAgeWVhciA9ICsobWF0Y2hbMV0pO1xuICBtb250aCA9ICsobWF0Y2hbMl0pIC0gMTsgLy8gSlMgbW9udGggc3RhcnRzIHdpdGggMFxuICBkYXkgPSArKG1hdGNoWzNdKTtcblxuICBpZiAoIW1hdGNoWzRdKSB7IC8vIG5vIGhvdXJcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpO1xuICB9XG5cbiAgLy8gbWF0Y2g6IFs0XSBob3VyIFs1XSBtaW51dGUgWzZdIHNlY29uZCBbN10gZnJhY3Rpb25cblxuICBob3VyID0gKyhtYXRjaFs0XSk7XG4gIG1pbnV0ZSA9ICsobWF0Y2hbNV0pO1xuICBzZWNvbmQgPSArKG1hdGNoWzZdKTtcblxuICBpZiAobWF0Y2hbN10pIHtcbiAgICBmcmFjdGlvbiA9IG1hdGNoWzddLnNsaWNlKDAsIDMpO1xuICAgIHdoaWxlIChmcmFjdGlvbi5sZW5ndGggPCAzKSB7IC8vIG1pbGxpLXNlY29uZHNcbiAgICAgIGZyYWN0aW9uICs9ICcwJztcbiAgICB9XG4gICAgZnJhY3Rpb24gPSArZnJhY3Rpb247XG4gIH1cblxuICAvLyBtYXRjaDogWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91ciBbMTFdIHR6X21pbnV0ZVxuXG4gIGlmIChtYXRjaFs5XSkge1xuICAgIHR6X2hvdXIgPSArKG1hdGNoWzEwXSk7XG4gICAgdHpfbWludXRlID0gKyhtYXRjaFsxMV0gfHwgMCk7XG4gICAgZGVsdGEgPSAodHpfaG91ciAqIDYwICsgdHpfbWludXRlKSAqIDYwMDAwOyAvLyBkZWx0YSBpbiBtaWxpLXNlY29uZHNcbiAgICBpZiAobWF0Y2hbOV0gPT09ICctJykgZGVsdGEgPSAtZGVsdGE7XG4gIH1cblxuICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uKSk7XG5cbiAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7XG5cbiAgcmV0dXJuIGRhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxUaW1lc3RhbXAob2JqZWN0IC8qLCBzdHlsZSovKSB7XG4gIHJldHVybiBvYmplY3QudG9JU09TdHJpbmcoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgndGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxUaW1lc3RhbXAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFRpbWVzdGFtcCxcbiAgaW5zdGFuY2VPZjogRGF0ZSxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sVGltZXN0YW1wXG59KTtcbiIsIi8qXHJcbiogbG9nbGV2ZWwgLSBodHRwczovL2dpdGh1Yi5jb20vcGltdGVycnkvbG9nbGV2ZWxcclxuKlxyXG4qIENvcHlyaWdodCAoYykgMjAxMyBUaW0gUGVycnlcclxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXHJcbiovXHJcbihmdW5jdGlvbiAocm9vdCwgZGVmaW5pdGlvbikge1xyXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgZGVmaW5lKGRlZmluaXRpb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByb290LmxvZyA9IGRlZmluaXRpb24oKTtcclxuICAgIH1cclxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgc2VsZiA9IHt9O1xyXG4gICAgdmFyIG5vb3AgPSBmdW5jdGlvbigpIHt9O1xyXG4gICAgdmFyIHVuZGVmaW5lZFR5cGUgPSBcInVuZGVmaW5lZFwiO1xyXG5cclxuICAgIGZ1bmN0aW9uIHJlYWxNZXRob2QobWV0aG9kTmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgY29uc29sZSA9PT0gdW5kZWZpbmVkVHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFdlIGNhbid0IGJ1aWxkIGEgcmVhbCBtZXRob2Qgd2l0aG91dCBhIGNvbnNvbGUgdG8gbG9nIHRvXHJcbiAgICAgICAgfSBlbHNlIGlmIChjb25zb2xlW21ldGhvZE5hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJpbmRNZXRob2QoY29uc29sZSwgbWV0aG9kTmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb25zb2xlLmxvZyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiaW5kTWV0aG9kKGNvbnNvbGUsICdsb2cnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbm9vcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYmluZE1ldGhvZChvYmosIG1ldGhvZE5hbWUpIHtcclxuICAgICAgICB2YXIgbWV0aG9kID0gb2JqW21ldGhvZE5hbWVdO1xyXG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kLmJpbmQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZC5iaW5kKG9iaik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5jYWxsKG1ldGhvZCwgb2JqKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gTWlzc2luZyBiaW5kIHNoaW0gb3IgSUU4ICsgTW9kZXJuaXpyLCBmYWxsYmFjayB0byB3cmFwcGluZ1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuYXBwbHkobWV0aG9kLCBbb2JqLCBhcmd1bWVudHNdKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZW5hYmxlTG9nZ2luZ1doZW5Db25zb2xlQXJyaXZlcyhtZXRob2ROYW1lLCBsZXZlbCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gdW5kZWZpbmVkVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvZ2dpbmdNZXRob2RzKGxldmVsKTtcclxuICAgICAgICAgICAgICAgIHNlbGZbbWV0aG9kTmFtZV0uYXBwbHkoc2VsZiwgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxvZ01ldGhvZHMgPSBbXHJcbiAgICAgICAgXCJ0cmFjZVwiLFxyXG4gICAgICAgIFwiZGVidWdcIixcclxuICAgICAgICBcImluZm9cIixcclxuICAgICAgICBcIndhcm5cIixcclxuICAgICAgICBcImVycm9yXCJcclxuICAgIF07XHJcblxyXG4gICAgZnVuY3Rpb24gcmVwbGFjZUxvZ2dpbmdNZXRob2RzKGxldmVsKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb2dNZXRob2RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXRob2ROYW1lID0gbG9nTWV0aG9kc1tpXTtcclxuICAgICAgICAgICAgc2VsZlttZXRob2ROYW1lXSA9IChpIDwgbGV2ZWwpID8gbm9vcCA6IHNlbGYubWV0aG9kRmFjdG9yeShtZXRob2ROYW1lLCBsZXZlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHBlcnNpc3RMZXZlbElmUG9zc2libGUobGV2ZWxOdW0pIHtcclxuICAgICAgICB2YXIgbGV2ZWxOYW1lID0gKGxvZ01ldGhvZHNbbGV2ZWxOdW1dIHx8ICdzaWxlbnQnKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgICAvLyBVc2UgbG9jYWxTdG9yYWdlIGlmIGF2YWlsYWJsZVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2VbJ2xvZ2xldmVsJ10gPSBsZXZlbE5hbWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHt9XHJcblxyXG4gICAgICAgIC8vIFVzZSBzZXNzaW9uIGNvb2tpZSBhcyBmYWxsYmFja1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5jb29raWUgPSBcImxvZ2xldmVsPVwiICsgbGV2ZWxOYW1lICsgXCI7XCI7XHJcbiAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGxvYWRQZXJzaXN0ZWRMZXZlbCgpIHtcclxuICAgICAgICB2YXIgc3RvcmVkTGV2ZWw7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHN0b3JlZExldmVsID0gd2luZG93LmxvY2FsU3RvcmFnZVsnbG9nbGV2ZWwnXTtcclxuICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHt9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RvcmVkTGV2ZWwgPT09IHVuZGVmaW5lZFR5cGUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0b3JlZExldmVsID0gL2xvZ2xldmVsPShbXjtdKykvLmV4ZWMod2luZG93LmRvY3VtZW50LmNvb2tpZSlbMV07XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge31cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHNlbGYubGV2ZWxzW3N0b3JlZExldmVsXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHN0b3JlZExldmVsID0gXCJXQVJOXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxmLnNldExldmVsKHNlbGYubGV2ZWxzW3N0b3JlZExldmVsXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqXHJcbiAgICAgKiBQdWJsaWMgQVBJXHJcbiAgICAgKlxyXG4gICAgICovXHJcblxyXG4gICAgc2VsZi5sZXZlbHMgPSB7IFwiVFJBQ0VcIjogMCwgXCJERUJVR1wiOiAxLCBcIklORk9cIjogMiwgXCJXQVJOXCI6IDMsXHJcbiAgICAgICAgXCJFUlJPUlwiOiA0LCBcIlNJTEVOVFwiOiA1fTtcclxuXHJcbiAgICBzZWxmLm1ldGhvZEZhY3RvcnkgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgbGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gcmVhbE1ldGhvZChtZXRob2ROYW1lKSB8fFxyXG4gICAgICAgICAgICAgICBlbmFibGVMb2dnaW5nV2hlbkNvbnNvbGVBcnJpdmVzKG1ldGhvZE5hbWUsIGxldmVsKTtcclxuICAgIH07XHJcblxyXG4gICAgc2VsZi5zZXRMZXZlbCA9IGZ1bmN0aW9uIChsZXZlbCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09IFwic3RyaW5nXCIgJiYgc2VsZi5sZXZlbHNbbGV2ZWwudG9VcHBlckNhc2UoKV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBsZXZlbCA9IHNlbGYubGV2ZWxzW2xldmVsLnRvVXBwZXJDYXNlKCldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiICYmIGxldmVsID49IDAgJiYgbGV2ZWwgPD0gc2VsZi5sZXZlbHMuU0lMRU5UKSB7XHJcbiAgICAgICAgICAgIHBlcnNpc3RMZXZlbElmUG9zc2libGUobGV2ZWwpO1xyXG4gICAgICAgICAgICByZXBsYWNlTG9nZ2luZ01ldGhvZHMobGV2ZWwpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09IHVuZGVmaW5lZFR5cGUgJiYgbGV2ZWwgPCBzZWxmLmxldmVscy5TSUxFTlQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIk5vIGNvbnNvbGUgYXZhaWxhYmxlIGZvciBsb2dnaW5nXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBcImxvZy5zZXRMZXZlbCgpIGNhbGxlZCB3aXRoIGludmFsaWQgbGV2ZWw6IFwiICsgbGV2ZWw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBzZWxmLmVuYWJsZUFsbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHNlbGYuc2V0TGV2ZWwoc2VsZi5sZXZlbHMuVFJBQ0UpO1xyXG4gICAgfTtcclxuXHJcbiAgICBzZWxmLmRpc2FibGVBbGwgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBzZWxmLnNldExldmVsKHNlbGYubGV2ZWxzLlNJTEVOVCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEdyYWIgdGhlIGN1cnJlbnQgZ2xvYmFsIGxvZyB2YXJpYWJsZSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxyXG4gICAgdmFyIF9sb2cgPSAodHlwZW9mIHdpbmRvdyAhPT0gdW5kZWZpbmVkVHlwZSkgPyB3aW5kb3cubG9nIDogdW5kZWZpbmVkO1xyXG4gICAgc2VsZi5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IHVuZGVmaW5lZFR5cGUgJiZcclxuICAgICAgICAgICAgICAgd2luZG93LmxvZyA9PT0gc2VsZikge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9nID0gX2xvZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfTtcclxuXHJcbiAgICBsb2FkUGVyc2lzdGVkTGV2ZWwoKTtcclxuICAgIHJldHVybiBzZWxmO1xyXG59KSk7XHJcbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gbm90TnVsbCh4KSAgeyByZXR1cm4geCAhPSBudWxsOyB9XG5mdW5jdGlvbiB3cmFwKHgpICAgICB7IHJldHVybiAnKCcgKyB4ICsgJyknO31cblxuZnVuY3Rpb24gbWF5YmVRdW90ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiAnXCInICsgdmFsdWUgKyAnXCInO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGxvb2tVcChrZXkpIHtcbiAgICBpZiAoa2V5WzBdID09PSAnJCcpIHtcbiAgICAgICAgcmV0dXJuICdjb250ZXh0LicgKyBrZXkuc3Vic3RyaW5nKDEpO1xuICAgIH1cbiAgICByZXR1cm4gJ2NvbnRleHQuZmVhdHVyZS5wcm9wZXJ0aWVzLicgKyBrZXk7XG59XG5cbmZ1bmN0aW9uIG51bGxWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuICcgdHJ1ZSAnO1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUVxdWFsKGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd3JhcChtYXliZVF1b3RlKHZhbHVlKSArICcgPT09ICcgKyBsb29rVXAoa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5T3Ioa2V5LCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gd3JhcCh2YWx1ZXMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiBwcm9wZXJ0eUVxdWFsKGtleSwgeCk7IH0pLmpvaW4oJyB8fCAnKSk7XG59XG5cbmZ1bmN0aW9uIHByaW50TmVzdGVkKHZhbHVlcywgam9pbmVyKSB7XG4gICAgcmV0dXJuIHdyYXAodmFsdWVzLmZpbHRlcihub3ROdWxsKS5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHdyYXAoeC5qb2luKCcgJiYgJykpO1xuICAgIH0pLmpvaW4oJyAnICsgam9pbmVyICsgJyAnKSk7XG59XG5cbmZ1bmN0aW9uIGFueShfLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID4gMCkgPyBwcmludE5lc3RlZCh2YWx1ZXMubWFwKHBhcnNlRmlsdGVyKSwgJ3x8JykgOiAndHJ1ZSc7XG59XG5cbmZ1bmN0aW9uIGFsbChfLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID4gMCkgPyBwcmludE5lc3RlZCh2YWx1ZXMubWFwKHBhcnNlRmlsdGVyKSwgJyYmJykgOiAndHJ1ZSc7XG59XG5cbmZ1bmN0aW9uIG5vdChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuICchJyArIHdyYXAocGFyc2VGaWx0ZXIodmFsdWUpLmpvaW4oJyAmJiAnKSk7XG59XG5cbmZ1bmN0aW9uIG5vbmUoa2V5LCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gJyEnICsgd3JhcChhbnkobnVsbCwgdmFsdWVzKSk7XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5TWF0Y2hlc0Jvb2xlYW4oa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiB3cmFwKGxvb2tVcChrZXkpICsgKHZhbHVlID8gJyAhPSAnIDogJyA9PSAnKSAgKyAnbnVsbCcpO1xufVxuXG5mdW5jdGlvbiByYW5nZU1hdGNoKGtleSwgdmFsdWVzKSB7XG4gICAgdmFyIGV4cHJlc3Npb25zID0gW107XG5cbiAgICBpZiAodmFsdWVzLm1heCkge1xuICAgICAgICBleHByZXNzaW9ucy5wdXNoKCcnICsgbG9va1VwKGtleSkgKyAnIDwgJyArIHZhbHVlcy5tYXgpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZXMubWluKSB7XG4gICAgICAgIGV4cHJlc3Npb25zLnB1c2goJycgKyBsb29rVXAoa2V5KSArICcgPj0gJyArIHZhbHVlcy5taW4pO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwKGV4cHJlc3Npb25zLmpvaW4oJyAmJiAnKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyKGZpbHRlcikge1xuICAgIHZhciBmaWx0ZXJBU1QgPSBbXTtcblxuICAgIC8vIEZ1bmN0aW9uIGZpbHRlclxuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBbd3JhcChmaWx0ZXIudG9TdHJpbmcoKSArICcoY29udGV4dCknKV07XG4gICAgfVxuICAgIC8vIEFycmF5IGZpbHRlciwgaW1wbGljaXQgJ2FueSdcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcbiAgICAgICAgcmV0dXJuIFthbnkobnVsbCwgZmlsdGVyKV07XG4gICAgfVxuICAgIC8vIE51bGwgZmlsdGVyIG9iamVjdFxuICAgIGVsc2UgaWYgKGZpbHRlciA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbJ3RydWUnXTtcbiAgICB9XG5cbiAgICAvLyBPYmplY3QgZmlsdGVyLCBlLmcuIGltcGxpY2l0ICdhbGwnXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmaWx0ZXIpO1xuICAgIGZvciAodmFyIGs9MDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNba107XG5cbiAgICAgICAgdmFyIHZhbHVlID0gZmlsdGVyW2tleV0sXG4gICAgICAgICAgICB0eXBlICA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBmaWx0ZXJBU1QucHVzaChwcm9wZXJ0eUVxdWFsKGtleSwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGZpbHRlckFTVC5wdXNoKHByb3BlcnR5TWF0Y2hlc0Jvb2xlYW4oa2V5LCB2YWx1ZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25vdCcpIHtcbiAgICAgICAgICAgIGZpbHRlckFTVC5wdXNoKG5vdChrZXksIHZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnYW55Jykge1xuICAgICAgICAgICAgZmlsdGVyQVNULnB1c2goYW55KGtleSwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhbGwnKSB7XG4gICAgICAgICAgICBmaWx0ZXJBU1QucHVzaChhbGwoa2V5LCB2YWx1ZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICBmaWx0ZXJBU1QucHVzaChub25lKGtleSwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZmlsdGVyQVNULnB1c2gocHJvcGVydHlPcihrZXksIHZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLm1heCB8fCB2YWx1ZS5taW4pIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJBU1QucHVzaChyYW5nZU1hdGNoKGtleSwgdmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBmaWx0ZXJBU1QucHVzaChudWxsVmFsdWUoa2V5LCB2YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIFF1ZXJ5IHN5dG5heDogJyArIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBrZXlzLmxlbmd0aCA9PT0gMCA/IFsndHJ1ZSddIDogZmlsdGVyQVNUO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJUb1N0cmluZyhmaWx0ZXJBU1QpIHtcbiAgICByZXR1cm4gd3JhcChmaWx0ZXJBU1Quam9pbignICYmICcpKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2goZmlsdGVyKSB7XG4gICAgaWYgKGZpbHRlciA9PSBudWxsKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9OyB9XG4gICAgLy8ganNoaW50IGV2aWw6IHRydWVcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKCdjb250ZXh0JywgJ3JldHVybiAnICsgZmlsdGVyVG9TdHJpbmcocGFyc2VGaWx0ZXIoZmlsdGVyKSkgKyAnOycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBtYXRjaDogbWF0Y2gsXG4gICAgZmlsdGVyVG9TdHJpbmc6IGZpbHRlclRvU3RyaW5nLFxuICAgIHBhcnNlRmlsdGVyOiBwYXJzZUZpbHRlclxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gbGlnaHR3ZWlnaHQgQnVmZmVyIHNoaW0gZm9yIHBiZiBicm93c2VyIGJ1aWxkXG4vLyBiYXNlZCBvbiBjb2RlIGZyb20gZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyIChNSVQtbGljZW5zZWQpXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKTtcblxudmFyIEJ1ZmZlck1ldGhvZHM7XG5cbmZ1bmN0aW9uIEJ1ZmZlcihsZW5ndGgpIHtcbiAgICB2YXIgYXJyO1xuICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoLmxlbmd0aCkge1xuICAgICAgICBhcnIgPSBsZW5ndGg7XG4gICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGg7XG4gICAgfVxuICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGggfHwgMCk7XG4gICAgaWYgKGFycikgYnVmLnNldChhcnIpO1xuXG4gICAgYnVmLnJlYWRVSW50MzJMRSA9IEJ1ZmZlck1ldGhvZHMucmVhZFVJbnQzMkxFO1xuICAgIGJ1Zi53cml0ZVVJbnQzMkxFID0gQnVmZmVyTWV0aG9kcy53cml0ZVVJbnQzMkxFO1xuICAgIGJ1Zi5yZWFkSW50MzJMRSA9IEJ1ZmZlck1ldGhvZHMucmVhZEludDMyTEU7XG4gICAgYnVmLndyaXRlSW50MzJMRSA9IEJ1ZmZlck1ldGhvZHMud3JpdGVJbnQzMkxFO1xuICAgIGJ1Zi5yZWFkRmxvYXRMRSA9IEJ1ZmZlck1ldGhvZHMucmVhZEZsb2F0TEU7XG4gICAgYnVmLndyaXRlRmxvYXRMRSA9IEJ1ZmZlck1ldGhvZHMud3JpdGVGbG9hdExFO1xuICAgIGJ1Zi5yZWFkRG91YmxlTEUgPSBCdWZmZXJNZXRob2RzLnJlYWREb3VibGVMRTtcbiAgICBidWYud3JpdGVEb3VibGVMRSA9IEJ1ZmZlck1ldGhvZHMud3JpdGVEb3VibGVMRTtcbiAgICBidWYudG9TdHJpbmcgPSBCdWZmZXJNZXRob2RzLnRvU3RyaW5nO1xuICAgIGJ1Zi53cml0ZSA9IEJ1ZmZlck1ldGhvZHMud3JpdGU7XG4gICAgYnVmLnNsaWNlID0gQnVmZmVyTWV0aG9kcy5zbGljZTtcbiAgICBidWYuY29weSA9IEJ1ZmZlck1ldGhvZHMuY29weTtcblxuICAgIGJ1Zi5faXNCdWZmZXIgPSB0cnVlO1xuICAgIHJldHVybiBidWY7XG59XG5cbnZhciBsYXN0U3RyLCBsYXN0U3RyRW5jb2RlZDtcblxuQnVmZmVyTWV0aG9kcyA9IHtcbiAgICByZWFkVUludDMyTEU6IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICByZXR1cm4gKCh0aGlzW3Bvc10pIHxcbiAgICAgICAgICAgICh0aGlzW3BvcyArIDFdIDw8IDgpIHxcbiAgICAgICAgICAgICh0aGlzW3BvcyArIDJdIDw8IDE2KSkgK1xuICAgICAgICAgICAgKHRoaXNbcG9zICsgM10gKiAweDEwMDAwMDApO1xuICAgIH0sXG5cbiAgICB3cml0ZVVJbnQzMkxFOiBmdW5jdGlvbih2YWwsIHBvcykge1xuICAgICAgICB0aGlzW3Bvc10gPSB2YWw7XG4gICAgICAgIHRoaXNbcG9zICsgMV0gPSAodmFsID4+PiA4KTtcbiAgICAgICAgdGhpc1twb3MgKyAyXSA9ICh2YWwgPj4+IDE2KTtcbiAgICAgICAgdGhpc1twb3MgKyAzXSA9ICh2YWwgPj4+IDI0KTtcbiAgICB9LFxuXG4gICAgcmVhZEludDMyTEU6IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICByZXR1cm4gKCh0aGlzW3Bvc10pIHxcbiAgICAgICAgICAgICh0aGlzW3BvcyArIDFdIDw8IDgpIHxcbiAgICAgICAgICAgICh0aGlzW3BvcyArIDJdIDw8IDE2KSkgK1xuICAgICAgICAgICAgKHRoaXNbcG9zICsgM10gPDwgMjQpO1xuICAgIH0sXG5cbiAgICByZWFkRmxvYXRMRTogIGZ1bmN0aW9uKHBvcykgeyByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIHBvcywgdHJ1ZSwgMjMsIDQpOyB9LFxuICAgIHJlYWREb3VibGVMRTogZnVuY3Rpb24ocG9zKSB7IHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgcG9zLCB0cnVlLCA1MiwgOCk7IH0sXG5cbiAgICB3cml0ZUZsb2F0TEU6ICBmdW5jdGlvbih2YWwsIHBvcykgeyByZXR1cm4gaWVlZTc1NC53cml0ZSh0aGlzLCB2YWwsIHBvcywgdHJ1ZSwgMjMsIDQpOyB9LFxuICAgIHdyaXRlRG91YmxlTEU6IGZ1bmN0aW9uKHZhbCwgcG9zKSB7IHJldHVybiBpZWVlNzU0LndyaXRlKHRoaXMsIHZhbCwgcG9zLCB0cnVlLCA1MiwgOCk7IH0sXG5cbiAgICB0b1N0cmluZzogZnVuY3Rpb24oZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgdmFyIHN0ciA9ICcnLFxuICAgICAgICAgICAgdG1wID0gJyc7XG5cbiAgICAgICAgc3RhcnQgPSBzdGFydCB8fCAwO1xuICAgICAgICBlbmQgPSBNYXRoLm1pbih0aGlzLmxlbmd0aCwgZW5kIHx8IHRoaXMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoID0gdGhpc1tpXTtcbiAgICAgICAgICAgIGlmIChjaCA8PSAweDdGKSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IGRlY29kZVVSSUNvbXBvbmVudCh0bXApICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgICAgICAgICAgdG1wID0gJyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRtcCArPSAnJScgKyBjaC50b1N0cmluZygxNik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdHIgKz0gZGVjb2RlVVJJQ29tcG9uZW50KHRtcCk7XG5cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9LFxuXG4gICAgd3JpdGU6IGZ1bmN0aW9uKHN0ciwgcG9zKSB7XG4gICAgICAgIHZhciBieXRlcyA9IHN0ciA9PT0gbGFzdFN0ciA/IGxhc3RTdHJFbmNvZGVkIDogZW5jb2RlU3RyaW5nKHN0cik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXNbcG9zICsgaV0gPSBieXRlc1tpXTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzbGljZTogZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKTtcbiAgICB9LFxuXG4gICAgY29weTogZnVuY3Rpb24oYnVmLCBwb3MpIHtcbiAgICAgICAgcG9zID0gcG9zIHx8IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYnVmW3BvcyArIGldID0gdGhpc1tpXTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbkJ1ZmZlck1ldGhvZHMud3JpdGVJbnQzMkxFID0gQnVmZmVyTWV0aG9kcy53cml0ZVVJbnQzMkxFO1xuXG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGxhc3RTdHIgPSBzdHI7XG4gICAgbGFzdFN0ckVuY29kZWQgPSBlbmNvZGVTdHJpbmcoc3RyKTtcbiAgICByZXR1cm4gbGFzdFN0ckVuY29kZWQubGVuZ3RoO1xufTtcblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgcmV0dXJuICEhKGJ1ZiAmJiBidWYuX2lzQnVmZmVyKTtcbn07XG5cbmZ1bmN0aW9uIGVuY29kZVN0cmluZyhzdHIpIHtcbiAgICB2YXIgbGVuZ3RoID0gc3RyLmxlbmd0aCxcbiAgICAgICAgYnl0ZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBjLCBsZWFkOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpOyAvLyBjb2RlIHBvaW50XG5cbiAgICAgICAgaWYgKGMgPiAweEQ3RkYgJiYgYyA8IDB4RTAwMCkge1xuXG4gICAgICAgICAgICBpZiAobGVhZCkge1xuICAgICAgICAgICAgICAgIGlmIChjIDwgMHhEQzAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRCk7XG4gICAgICAgICAgICAgICAgICAgIGxlYWQgPSBjO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBsZWFkIC0gMHhEODAwIDw8IDEwIHwgYyAtIDB4REMwMCB8IDB4MTAwMDA7XG4gICAgICAgICAgICAgICAgICAgIGxlYWQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoYyA+IDB4REJGRiB8fCAoaSArIDEgPT09IGxlbmd0aCkpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRCk7XG4gICAgICAgICAgICAgICAgZWxzZSBsZWFkID0gYztcblxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAobGVhZCkge1xuICAgICAgICAgICAgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKTtcbiAgICAgICAgICAgIGxlYWQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwKSBieXRlcy5wdXNoKGMpO1xuICAgICAgICBlbHNlIGlmIChjIDwgMHg4MDApIGJ5dGVzLnB1c2goYyA+PiAweDYgfCAweEMwLCBjICYgMHgzRiB8IDB4ODApO1xuICAgICAgICBlbHNlIGlmIChjIDwgMHgxMDAwMCkgYnl0ZXMucHVzaChjID4+IDB4QyB8IDB4RTAsIGMgPj4gMHg2ICYgMHgzRiB8IDB4ODAsIGMgJiAweDNGIHwgMHg4MCk7XG4gICAgICAgIGVsc2UgYnl0ZXMucHVzaChjID4+IDB4MTIgfCAweEYwLCBjID4+IDB4QyAmIDB4M0YgfCAweDgwLCBjID4+IDB4NiAmIDB4M0YgfCAweDgwLCBjICYgMHgzRiB8IDB4ODApO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXM7XG59XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCl7XG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUGJmO1xuXG52YXIgQnVmZmVyID0gZ2xvYmFsLkJ1ZmZlciB8fCByZXF1aXJlKCcuL2J1ZmZlcicpO1xuXG5mdW5jdGlvbiBQYmYoYnVmKSB7XG4gICAgdGhpcy5idWYgPSAhQnVmZmVyLmlzQnVmZmVyKGJ1ZikgPyBuZXcgQnVmZmVyKGJ1ZiB8fCAwKSA6IGJ1ZjtcbiAgICB0aGlzLnBvcyA9IDA7XG4gICAgdGhpcy5sZW5ndGggPSB0aGlzLmJ1Zi5sZW5ndGg7XG59XG5cblBiZi5WYXJpbnQgID0gMDsgLy8gdmFyaW50OiBpbnQzMiwgaW50NjQsIHVpbnQzMiwgdWludDY0LCBzaW50MzIsIHNpbnQ2NCwgYm9vbCwgZW51bVxuUGJmLkZpeGVkNjQgPSAxOyAvLyA2NC1iaXQ6IGRvdWJsZSwgZml4ZWQ2NCwgc2ZpeGVkNjRcblBiZi5CeXRlcyAgID0gMjsgLy8gbGVuZ3RoLWRlbGltaXRlZDogc3RyaW5nLCBieXRlcywgZW1iZWRkZWQgbWVzc2FnZXMsIHBhY2tlZCByZXBlYXRlZCBmaWVsZHNcblBiZi5GaXhlZDMyID0gNTsgLy8gMzItYml0OiBmbG9hdCwgZml4ZWQzMiwgc2ZpeGVkMzJcblxudmFyIFNISUZUX0xFRlRfMzIgPSAoMSA8PCAxNikgKiAoMSA8PCAxNiksXG4gICAgU0hJRlRfUklHSFRfMzIgPSAxIC8gU0hJRlRfTEVGVF8zMixcbiAgICBQT1dfMl82MyA9IE1hdGgucG93KDIsIDYzKTtcblxuUGJmLnByb3RvdHlwZSA9IHtcblxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmJ1ZiA9IG51bGw7XG4gICAgfSxcblxuICAgIC8vID09PSBSRUFESU5HID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICByZWFkRmllbGRzOiBmdW5jdGlvbihyZWFkRmllbGQsIHJlc3VsdCwgZW5kKSB7XG4gICAgICAgIGVuZCA9IGVuZCB8fCB0aGlzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnJlYWRWYXJpbnQoKSxcbiAgICAgICAgICAgICAgICB0YWcgPSB2YWwgPj4gMyxcbiAgICAgICAgICAgICAgICBzdGFydFBvcyA9IHRoaXMucG9zO1xuXG4gICAgICAgICAgICByZWFkRmllbGQodGFnLCByZXN1bHQsIHRoaXMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPT09IHN0YXJ0UG9zKSB0aGlzLnNraXAodmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICByZWFkTWVzc2FnZTogZnVuY3Rpb24ocmVhZEZpZWxkLCByZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZEZpZWxkcyhyZWFkRmllbGQsIHJlc3VsdCwgdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcyk7XG4gICAgfSxcblxuICAgIHJlYWRGaXhlZDMyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuYnVmLnJlYWRVSW50MzJMRSh0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRTRml4ZWQzMjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmJ1Zi5yZWFkSW50MzJMRSh0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIC8vIDY0LWJpdCBpbnQgaGFuZGxpbmcgaXMgYmFzZWQgb24gZ2l0aHViLmNvbS9kcHcvbm9kZS1idWZmZXItbW9yZS1pbnRzIChNSVQtbGljZW5zZWQpXG5cbiAgICByZWFkRml4ZWQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmJ1Zi5yZWFkVUludDMyTEUodGhpcy5wb3MpICsgdGhpcy5idWYucmVhZFVJbnQzMkxFKHRoaXMucG9zICsgNCkgKiBTSElGVF9MRUZUXzMyO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkU0ZpeGVkNjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gdGhpcy5idWYucmVhZFVJbnQzMkxFKHRoaXMucG9zKSArIHRoaXMuYnVmLnJlYWRJbnQzMkxFKHRoaXMucG9zICsgNCkgKiBTSElGVF9MRUZUXzMyO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkRmxvYXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gdGhpcy5idWYucmVhZEZsb2F0TEUodGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkRG91YmxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuYnVmLnJlYWREb3VibGVMRSh0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRWYXJpbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYnVmID0gdGhpcy5idWYsXG4gICAgICAgICAgICB2YWwsIGIsIGIwLCBiMSwgYjIsIGIzO1xuXG4gICAgICAgIGIwID0gYnVmW3RoaXMucG9zKytdOyBpZiAoYjAgPCAweDgwKSByZXR1cm4gYjA7ICAgICAgICAgICAgICAgICBiMCA9IGIwICYgMHg3ZjtcbiAgICAgICAgYjEgPSBidWZbdGhpcy5wb3MrK107IGlmIChiMSA8IDB4ODApIHJldHVybiBiMCB8IGIxIDw8IDc7ICAgICAgIGIxID0gKGIxICYgMHg3ZikgPDwgNztcbiAgICAgICAgYjIgPSBidWZbdGhpcy5wb3MrK107IGlmIChiMiA8IDB4ODApIHJldHVybiBiMCB8IGIxIHwgYjIgPDwgMTQ7IGIyID0gKGIyICYgMHg3ZikgPDwgMTQ7XG4gICAgICAgIGIzID0gYnVmW3RoaXMucG9zKytdOyBpZiAoYjMgPCAweDgwKSByZXR1cm4gYjAgfCBiMSB8IGIyIHwgYjMgPDwgMjE7XG5cbiAgICAgICAgdmFsID0gYjAgfCBiMSB8IGIyIHwgKGIzICYgMHg3ZikgPDwgMjE7XG5cbiAgICAgICAgYiA9IGJ1Zlt0aGlzLnBvcysrXTsgdmFsICs9IChiICYgMHg3ZikgKiAweDEwMDAwMDAwOyAgICAgICAgIGlmIChiIDwgMHg4MCkgcmV0dXJuIHZhbDtcbiAgICAgICAgYiA9IGJ1Zlt0aGlzLnBvcysrXTsgdmFsICs9IChiICYgMHg3ZikgKiAweDgwMDAwMDAwMDsgICAgICAgIGlmIChiIDwgMHg4MCkgcmV0dXJuIHZhbDtcbiAgICAgICAgYiA9IGJ1Zlt0aGlzLnBvcysrXTsgdmFsICs9IChiICYgMHg3ZikgKiAweDQwMDAwMDAwMDAwOyAgICAgIGlmIChiIDwgMHg4MCkgcmV0dXJuIHZhbDtcbiAgICAgICAgYiA9IGJ1Zlt0aGlzLnBvcysrXTsgdmFsICs9IChiICYgMHg3ZikgKiAweDIwMDAwMDAwMDAwMDA7ICAgIGlmIChiIDwgMHg4MCkgcmV0dXJuIHZhbDtcbiAgICAgICAgYiA9IGJ1Zlt0aGlzLnBvcysrXTsgdmFsICs9IChiICYgMHg3ZikgKiAweDEwMDAwMDAwMDAwMDAwMDsgIGlmIChiIDwgMHg4MCkgcmV0dXJuIHZhbDtcbiAgICAgICAgYiA9IGJ1Zlt0aGlzLnBvcysrXTsgdmFsICs9IChiICYgMHg3ZikgKiAweDgwMDAwMDAwMDAwMDAwMDA7IGlmIChiIDwgMHg4MCkgcmV0dXJuIHZhbDtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHZhcmludCBub3QgbW9yZSB0aGFuIDEwIGJ5dGVzJyk7XG4gICAgfSxcblxuICAgIHJlYWRWYXJpbnQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzdGFydFBvcyA9IHRoaXMucG9zLFxuICAgICAgICAgICAgdmFsID0gdGhpcy5yZWFkVmFyaW50KCk7XG5cbiAgICAgICAgaWYgKHZhbCA8IFBPV18yXzYzKSByZXR1cm4gdmFsO1xuXG4gICAgICAgIHZhciBwb3MgPSB0aGlzLnBvcyAtIDI7XG4gICAgICAgIHdoaWxlICh0aGlzLmJ1Zltwb3NdID09PSAweGZmKSBwb3MtLTtcbiAgICAgICAgaWYgKHBvcyA8IHN0YXJ0UG9zKSBwb3MgPSBzdGFydFBvcztcblxuICAgICAgICB2YWwgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvcyAtIHN0YXJ0UG9zICsgMTsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgYiA9IH50aGlzLmJ1ZltzdGFydFBvcyArIGldICYgMHg3ZjtcbiAgICAgICAgICAgIHZhbCArPSBpIDwgNCA/IGIgPDwgaSAqIDcgOiBiICogTWF0aC5wb3coMiwgaSAqIDcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIC12YWwgLSAxO1xuICAgIH0sXG5cbiAgICByZWFkU1ZhcmludDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBudW0gPSB0aGlzLnJlYWRWYXJpbnQoKTtcbiAgICAgICAgcmV0dXJuIG51bSAlIDIgPT09IDEgPyAobnVtICsgMSkgLyAtMiA6IG51bSAvIDI7IC8vIHppZ3phZyBlbmNvZGluZ1xuICAgIH0sXG5cbiAgICByZWFkQm9vbGVhbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMucmVhZFZhcmludCgpKTtcbiAgICB9LFxuXG4gICAgcmVhZFN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zLFxuICAgICAgICAgICAgc3RyID0gdGhpcy5idWYudG9TdHJpbmcoJ3V0ZjgnLCB0aGlzLnBvcywgZW5kKTtcbiAgICAgICAgdGhpcy5wb3MgPSBlbmQ7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfSxcblxuICAgIHJlYWRCeXRlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zLFxuICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5idWYuc2xpY2UodGhpcy5wb3MsIGVuZCk7XG4gICAgICAgIHRoaXMucG9zID0gZW5kO1xuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH0sXG5cbiAgICAvLyB2ZXJib3NlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOyBkb2Vzbid0IGFmZmVjdCBnemlwcGVkIHNpemVcblxuICAgIHJlYWRQYWNrZWRWYXJpbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcywgYXJyID0gW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkVmFyaW50KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZFNWYXJpbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcywgYXJyID0gW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRCb29sZWFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MsIGFyciA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRmxvYXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcywgYXJyID0gW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRmxvYXQoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRG91YmxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MsIGFyciA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRGaXhlZDMyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MsIGFyciA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkU0ZpeGVkMzI6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcywgYXJyID0gW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRml4ZWQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zLCBhcnIgPSBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZFNGaXhlZDY0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MsIGFyciA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG5cbiAgICBza2lwOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB2YWwgJiAweDc7XG4gICAgICAgIGlmICh0eXBlID09PSBQYmYuVmFyaW50KSB3aGlsZSAodGhpcy5idWZbdGhpcy5wb3MrK10gPiAweDdmKSB7fVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSBQYmYuQnl0ZXMpIHRoaXMucG9zID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcztcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gUGJmLkZpeGVkMzIpIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFBiZi5GaXhlZDY0KSB0aGlzLnBvcyArPSA4O1xuICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcignVW5pbXBsZW1lbnRlZCB0eXBlOiAnICsgdHlwZSk7XG4gICAgfSxcblxuICAgIC8vID09PSBXUklUSU5HID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICB3cml0ZVRhZzogZnVuY3Rpb24odGFnLCB0eXBlKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQoKHRhZyA8PCAzKSB8IHR5cGUpO1xuICAgIH0sXG5cbiAgICByZWFsbG9jOiBmdW5jdGlvbihtaW4pIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHx8IDE2O1xuXG4gICAgICAgIHdoaWxlIChsZW5ndGggPCB0aGlzLnBvcyArIG1pbikgbGVuZ3RoICo9IDI7XG5cbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBidWYgPSBuZXcgQnVmZmVyKGxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLmJ1Zi5jb3B5KGJ1Zik7XG4gICAgICAgICAgICB0aGlzLmJ1ZiA9IGJ1ZjtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5wb3M7XG4gICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmLnNsaWNlKDAsIHRoaXMubGVuZ3RoKTtcbiAgICB9LFxuXG4gICAgd3JpdGVGaXhlZDMyOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDQpO1xuICAgICAgICB0aGlzLmJ1Zi53cml0ZVVJbnQzMkxFKHZhbCwgdGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgIH0sXG5cbiAgICB3cml0ZVNGaXhlZDMyOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDQpO1xuICAgICAgICB0aGlzLmJ1Zi53cml0ZUludDMyTEUodmFsLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgfSxcblxuICAgIHdyaXRlRml4ZWQ2NDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg4KTtcbiAgICAgICAgdGhpcy5idWYud3JpdGVJbnQzMkxFKHZhbCAmIC0xLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMuYnVmLndyaXRlVUludDMyTEUoTWF0aC5mbG9vcih2YWwgKiBTSElGVF9SSUdIVF8zMiksIHRoaXMucG9zICsgNCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgfSxcblxuICAgIHdyaXRlU0ZpeGVkNjQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoOCk7XG4gICAgICAgIHRoaXMuYnVmLndyaXRlSW50MzJMRSh2YWwgJiAtMSwgdGhpcy5wb3MpO1xuICAgICAgICB0aGlzLmJ1Zi53cml0ZUludDMyTEUoTWF0aC5mbG9vcih2YWwgKiBTSElGVF9SSUdIVF8zMiksIHRoaXMucG9zICsgNCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgfSxcblxuICAgIHdyaXRlVmFyaW50OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdmFsID0gK3ZhbDtcblxuICAgICAgICBpZiAodmFsIDw9IDB4N2YpIHtcbiAgICAgICAgICAgIHRoaXMucmVhbGxvYygxKTtcbiAgICAgICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gdmFsO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodmFsIDw9IDB4M2ZmZikge1xuICAgICAgICAgICAgdGhpcy5yZWFsbG9jKDIpO1xuICAgICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAoKHZhbCA+Pj4gMCkgJiAweDdmKSB8IDB4ODA7XG4gICAgICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICgodmFsID4+PiA3KSAmIDB4N2YpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodmFsIDw9IDB4MWZmZmZmKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWxsb2MoMyk7XG4gICAgICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICgodmFsID4+PiAwKSAmIDB4N2YpIHwgMHg4MDtcbiAgICAgICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gKCh2YWwgPj4+IDcpICYgMHg3ZikgfCAweDgwO1xuICAgICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAoKHZhbCA+Pj4gMTQpICYgMHg3Zik7XG5cbiAgICAgICAgfSBlbHNlIGlmICh2YWwgPD0gMHhmZmZmZmZmKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG4gICAgICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICgodmFsID4+PiAwKSAmIDB4N2YpIHwgMHg4MDtcbiAgICAgICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gKCh2YWwgPj4+IDcpICYgMHg3ZikgfCAweDgwO1xuICAgICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAoKHZhbCA+Pj4gMTQpICYgMHg3ZikgfCAweDgwO1xuICAgICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAoKHZhbCA+Pj4gMjEpICYgMHg3Zik7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLnBvcztcbiAgICAgICAgICAgIHdoaWxlICh2YWwgPj0gMHg4MCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVhbGxvYygxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICh2YWwgJiAweGZmKSB8IDB4ODA7XG4gICAgICAgICAgICAgICAgdmFsIC89IDB4ODA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlYWxsb2MoMSk7XG4gICAgICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9IHZhbCB8IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgLSBwb3MgPiAxMCkgdGhyb3cgbmV3IEVycm9yKCdHaXZlbiB2YXJpbnQgZG9lc25cXCd0IGZpdCBpbnRvIDEwIGJ5dGVzJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JpdGVTVmFyaW50OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludCh2YWwgPCAwID8gLXZhbCAqIDIgLSAxIDogdmFsICogMik7XG4gICAgfSxcblxuICAgIHdyaXRlQm9vbGVhbjogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQoQm9vbGVhbih2YWwpKTtcbiAgICB9LFxuXG4gICAgd3JpdGVTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICAgICAgdmFyIGJ5dGVzID0gQnVmZmVyLmJ5dGVMZW5ndGgoc3RyKTtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludChieXRlcyk7XG4gICAgICAgIHRoaXMucmVhbGxvYyhieXRlcyk7XG4gICAgICAgIHRoaXMuYnVmLndyaXRlKHN0ciwgdGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSBieXRlcztcbiAgICB9LFxuXG4gICAgd3JpdGVGbG9hdDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg0KTtcbiAgICAgICAgdGhpcy5idWYud3JpdGVGbG9hdExFKHZhbCwgdGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgIH0sXG5cbiAgICB3cml0ZURvdWJsZTogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg4KTtcbiAgICAgICAgdGhpcy5idWYud3JpdGVEb3VibGVMRSh2YWwsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICB9LFxuXG4gICAgd3JpdGVCeXRlczogZnVuY3Rpb24oYnVmZmVyKSB7XG4gICAgICAgIHZhciBsZW4gPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KGxlbik7XG4gICAgICAgIHRoaXMucmVhbGxvYyhsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9IGJ1ZmZlcltpXTtcbiAgICB9LFxuXG4gICAgd3JpdGVNZXNzYWdlOiBmdW5jdGlvbih0YWcsIGZuLCBvYmopIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG5cbiAgICAgICAgdGhpcy5wb3MrKzsgLy8gcmVzZXJ2ZSAxIGJ5dGUgZm9yIHNob3J0IG1lc3NhZ2UgbGVuZ3RoXG5cbiAgICAgICAgLy8gd3JpdGUgdGhlIG1lc3NhZ2UgZGlyZWN0bHkgdG8gdGhlIGJ1ZmZlciBhbmQgc2VlIGhvdyBtdWNoIHdhcyB3cml0dGVuXG4gICAgICAgIHZhciBzdGFydFBvcyA9IHRoaXMucG9zO1xuICAgICAgICBmbihvYmosIHRoaXMpO1xuICAgICAgICB2YXIgbGVuID0gdGhpcy5wb3MgLSBzdGFydFBvcztcblxuICAgICAgICB2YXIgdmFyaW50TGVuID1cbiAgICAgICAgICAgIGxlbiA8PSAweDdmID8gMSA6XG4gICAgICAgICAgICBsZW4gPD0gMHgzZmZmID8gMiA6XG4gICAgICAgICAgICBsZW4gPD0gMHgxZmZmZmYgPyAzIDpcbiAgICAgICAgICAgIGxlbiA8PSAweGZmZmZmZmYgPyA0IDogTWF0aC5jZWlsKE1hdGgubG9nKGxlbikgLyAoTWF0aC5MTjIgKiA3KSk7XG5cbiAgICAgICAgLy8gaWYgMSBieXRlIGlzbid0IGVub3VnaCBmb3IgZW5jb2RpbmcgbWVzc2FnZSBsZW5ndGgsIHNoaWZ0IHRoZSBkYXRhIHRvIHRoZSByaWdodFxuICAgICAgICBpZiAodmFyaW50TGVuID4gMSkge1xuICAgICAgICAgICAgdGhpcy5yZWFsbG9jKHZhcmludExlbiAtIDEpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMucG9zIC0gMTsgaSA+PSBzdGFydFBvczsgaS0tKSB0aGlzLmJ1ZltpICsgdmFyaW50TGVuIC0gMV0gPSB0aGlzLmJ1ZltpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpbmFsbHksIHdyaXRlIHRoZSBtZXNzYWdlIGxlbmd0aCBpbiB0aGUgcmVzZXJ2ZWQgcGxhY2UgYW5kIHJlc3RvcmUgdGhlIHBvc2l0aW9uXG4gICAgICAgIHRoaXMucG9zID0gc3RhcnRQb3MgLSAxO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KGxlbik7XG4gICAgICAgIHRoaXMucG9zICs9IGxlbjtcbiAgICB9LFxuXG4gICAgd3JpdGVQYWNrZWRWYXJpbnQ6ICAgZnVuY3Rpb24odGFnLCBhcnIpIHsgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFZhcmludCwgYXJyKTsgICB9LFxuICAgIHdyaXRlUGFja2VkU1ZhcmludDogIGZ1bmN0aW9uKHRhZywgYXJyKSB7IHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRTVmFyaW50LCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZEJvb2xlYW46ICBmdW5jdGlvbih0YWcsIGFycikgeyB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkQm9vbGVhbiwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRGbG9hdDogICAgZnVuY3Rpb24odGFnLCBhcnIpIHsgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZEZsb2F0LCBhcnIpOyAgICB9LFxuICAgIHdyaXRlUGFja2VkRG91YmxlOiAgIGZ1bmN0aW9uKHRhZywgYXJyKSB7IHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWREb3VibGUsIGFycik7ICAgfSxcbiAgICB3cml0ZVBhY2tlZEZpeGVkMzI6ICBmdW5jdGlvbih0YWcsIGFycikgeyB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRml4ZWQzMiwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRTRml4ZWQzMjogZnVuY3Rpb24odGFnLCBhcnIpIHsgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFNGaXhlZDMyLCBhcnIpOyB9LFxuICAgIHdyaXRlUGFja2VkRml4ZWQ2NDogIGZ1bmN0aW9uKHRhZywgYXJyKSB7IHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRGaXhlZDY0LCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZFNGaXhlZDY0OiBmdW5jdGlvbih0YWcsIGFycikgeyB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkU0ZpeGVkNjQsIGFycik7IH0sXG5cbiAgICB3cml0ZUJ5dGVzRmllbGQ6IGZ1bmN0aW9uKHRhZywgYnVmZmVyKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuQnl0ZXMpO1xuICAgICAgICB0aGlzLndyaXRlQnl0ZXMoYnVmZmVyKTtcbiAgICB9LFxuICAgIHdyaXRlRml4ZWQzMkZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkMzIpO1xuICAgICAgICB0aGlzLndyaXRlRml4ZWQzMih2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVTRml4ZWQzMkZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkMzIpO1xuICAgICAgICB0aGlzLndyaXRlU0ZpeGVkMzIodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlRml4ZWQ2NEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkNjQpO1xuICAgICAgICB0aGlzLndyaXRlRml4ZWQ2NCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVTRml4ZWQ2NEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkNjQpO1xuICAgICAgICB0aGlzLndyaXRlU0ZpeGVkNjQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlVmFyaW50RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuVmFyaW50KTtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVTVmFyaW50RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuVmFyaW50KTtcbiAgICAgICAgdGhpcy53cml0ZVNWYXJpbnQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlU3RyaW5nRmllbGQ6IGZ1bmN0aW9uKHRhZywgc3RyKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuQnl0ZXMpO1xuICAgICAgICB0aGlzLndyaXRlU3RyaW5nKHN0cik7XG4gICAgfSxcbiAgICB3cml0ZUZsb2F0RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQzMik7XG4gICAgICAgIHRoaXMud3JpdGVGbG9hdCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVEb3VibGVGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDY0KTtcbiAgICAgICAgdGhpcy53cml0ZURvdWJsZSh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVCb29sZWFuRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnRGaWVsZCh0YWcsIEJvb2xlYW4odmFsKSk7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gd3JpdGVQYWNrZWRWYXJpbnQoYXJyLCBwYmYpICAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlVmFyaW50KGFycltpXSk7ICAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRTVmFyaW50KGFyciwgcGJmKSAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlU1ZhcmludChhcnJbaV0pOyAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRGbG9hdChhcnIsIHBiZikgICAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlRmxvYXQoYXJyW2ldKTsgICAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWREb3VibGUoYXJyLCBwYmYpICAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlRG91YmxlKGFycltpXSk7ICAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRCb29sZWFuKGFyciwgcGJmKSAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlQm9vbGVhbihhcnJbaV0pOyAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRGaXhlZDMyKGFyciwgcGJmKSAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlRml4ZWQzMihhcnJbaV0pOyAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRTRml4ZWQzMihhcnIsIHBiZikgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlU0ZpeGVkMzIoYXJyW2ldKTsgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRGaXhlZDY0KGFyciwgcGJmKSAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlRml4ZWQ2NChhcnJbaV0pOyAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRTRml4ZWQ2NChhcnIsIHBiZikgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlU0ZpeGVkNjQoYXJyW2ldKTsgfVxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl3WW1ZdmFXNWtaWGd1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJbmRYTmxJSE4wY21samRDYzdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVUdKbU8xeHVYRzUyWVhJZ1FuVm1abVZ5SUQwZ1oyeHZZbUZzTGtKMVptWmxjaUI4ZkNCeVpYRjFhWEpsS0NjdUwySjFabVpsY2ljcE8xeHVYRzVtZFc1amRHbHZiaUJRWW1Zb1luVm1LU0I3WEc0Z0lDQWdkR2hwY3k1aWRXWWdQU0FoUW5WbVptVnlMbWx6UW5WbVptVnlLR0oxWmlrZ1B5QnVaWGNnUW5WbVptVnlLR0oxWmlCOGZDQXdLU0E2SUdKMVpqdGNiaUFnSUNCMGFHbHpMbkJ2Y3lBOUlEQTdYRzRnSUNBZ2RHaHBjeTVzWlc1bmRHZ2dQU0IwYUdsekxtSjFaaTVzWlc1bmRHZzdYRzU5WEc1Y2JsQmlaaTVXWVhKcGJuUWdJRDBnTURzZ0x5OGdkbUZ5YVc1ME9pQnBiblF6TWl3Z2FXNTBOalFzSUhWcGJuUXpNaXdnZFdsdWREWTBMQ0J6YVc1ME16SXNJSE5wYm5RMk5Dd2dZbTl2YkN3Z1pXNTFiVnh1VUdKbUxrWnBlR1ZrTmpRZ1BTQXhPeUF2THlBMk5DMWlhWFE2SUdSdmRXSnNaU3dnWm1sNFpXUTJOQ3dnYzJacGVHVmtOalJjYmxCaVppNUNlWFJsY3lBZ0lEMGdNanNnTHk4Z2JHVnVaM1JvTFdSbGJHbHRhWFJsWkRvZ2MzUnlhVzVuTENCaWVYUmxjeXdnWlcxaVpXUmtaV1FnYldWemMyRm5aWE1zSUhCaFkydGxaQ0J5WlhCbFlYUmxaQ0JtYVdWc1pITmNibEJpWmk1R2FYaGxaRE15SUQwZ05Uc2dMeThnTXpJdFltbDBPaUJtYkc5aGRDd2dabWw0WldRek1pd2djMlpwZUdWa016SmNibHh1ZG1GeUlGTklTVVpVWDB4RlJsUmZNeklnUFNBb01TQThQQ0F4TmlrZ0tpQW9NU0E4UENBeE5pa3NYRzRnSUNBZ1UwaEpSbFJmVWtsSFNGUmZNeklnUFNBeElDOGdVMGhKUmxSZlRFVkdWRjh6TWl4Y2JpQWdJQ0JRVDFkZk1sODJNeUE5SUUxaGRHZ3VjRzkzS0RJc0lEWXpLVHRjYmx4dVVHSm1MbkJ5YjNSdmRIbHdaU0E5SUh0Y2JseHVJQ0FnSUdSbGMzUnliM2s2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG1KMVppQTlJRzUxYkd3N1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUM4dklEMDlQU0JTUlVGRVNVNUhJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc1Y2JpQWdJQ0J5WldGa1JtbGxiR1J6T2lCbWRXNWpkR2x2YmloeVpXRmtSbWxsYkdRc0lISmxjM1ZzZEN3Z1pXNWtLU0I3WEc0Z0lDQWdJQ0FnSUdWdVpDQTlJR1Z1WkNCOGZDQjBhR2x6TG14bGJtZDBhRHRjYmx4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvZEdocGN5NXdiM01nUENCbGJtUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUIyWVd3Z1BTQjBhR2x6TG5KbFlXUldZWEpwYm5Rb0tTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBZV2NnUFNCMllXd2dQajRnTXl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemRHRnlkRkJ2Y3lBOUlIUm9hWE11Y0c5ek8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpXRmtSbWxsYkdRb2RHRm5MQ0J5WlhOMWJIUXNJSFJvYVhNcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kR2hwY3k1d2IzTWdQVDA5SUhOMFlYSjBVRzl6S1NCMGFHbHpMbk5yYVhBb2RtRnNLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemRXeDBPMXh1SUNBZ0lIMHNYRzVjYmlBZ0lDQnlaV0ZrVFdWemMyRm5aVG9nWm5WdVkzUnBiMjRvY21WaFpFWnBaV3hrTENCeVpYTjFiSFFwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjbVZoWkVacFpXeGtjeWh5WldGa1JtbGxiR1FzSUhKbGMzVnNkQ3dnZEdocGN5NXlaV0ZrVm1GeWFXNTBLQ2tnS3lCMGFHbHpMbkJ2Y3lrN1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUhKbFlXUkdhWGhsWkRNeU9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlIWmhiQ0E5SUhSb2FYTXVZblZtTG5KbFlXUlZTVzUwTXpKTVJTaDBhR2x6TG5CdmN5azdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHOXpJQ3M5SURRN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMllXdzdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lISmxZV1JUUm1sNFpXUXpNam9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUIyWVd3Z1BTQjBhR2x6TG1KMVppNXlaV0ZrU1c1ME16Sk1SU2gwYUdsekxuQnZjeWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6SUNzOUlEUTdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjJZV3c3WEc0Z0lDQWdmU3hjYmx4dUlDQWdJQzh2SURZMExXSnBkQ0JwYm5RZ2FHRnVaR3hwYm1jZ2FYTWdZbUZ6WldRZ2IyNGdaMmwwYUhWaUxtTnZiUzlrY0hjdmJtOWtaUzFpZFdabVpYSXRiVzl5WlMxcGJuUnpJQ2hOU1ZRdGJHbGpaVzV6WldRcFhHNWNiaUFnSUNCeVpXRmtSbWw0WldRMk5Eb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQjJZV3dnUFNCMGFHbHpMbUoxWmk1eVpXRmtWVWx1ZERNeVRFVW9kR2hwY3k1d2IzTXBJQ3NnZEdocGN5NWlkV1l1Y21WaFpGVkpiblF6TWt4RktIUm9hWE11Y0c5eklDc2dOQ2tnS2lCVFNFbEdWRjlNUlVaVVh6TXlPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuQnZjeUFyUFNBNE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RtRnNPMXh1SUNBZ0lIMHNYRzVjYmlBZ0lDQnlaV0ZrVTBacGVHVmtOalE2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnZG1Gc0lEMGdkR2hwY3k1aWRXWXVjbVZoWkZWSmJuUXpNa3hGS0hSb2FYTXVjRzl6S1NBcklIUm9hWE11WW5WbUxuSmxZV1JKYm5Rek1reEZLSFJvYVhNdWNHOXpJQ3NnTkNrZ0tpQlRTRWxHVkY5TVJVWlVYek15TzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ2Y3lBclBTQTRPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkbUZzTzF4dUlDQWdJSDBzWEc1Y2JpQWdJQ0J5WldGa1JteHZZWFE2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnZG1Gc0lEMGdkR2hwY3k1aWRXWXVjbVZoWkVac2IyRjBURVVvZEdocGN5NXdiM01wTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ2Y3lBclBTQTBPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkbUZzTzF4dUlDQWdJSDBzWEc1Y2JpQWdJQ0J5WldGa1JHOTFZbXhsT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUhaaGJDQTlJSFJvYVhNdVluVm1MbkpsWVdSRWIzVmliR1ZNUlNoMGFHbHpMbkJ2Y3lrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y0c5eklDczlJRGc3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIyWVd3N1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUhKbFlXUldZWEpwYm5RNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ1luVm1JRDBnZEdocGN5NWlkV1lzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZV3dzSUdJc0lHSXdMQ0JpTVN3Z1lqSXNJR0l6TzF4dVhHNGdJQ0FnSUNBZ0lHSXdJRDBnWW5WbVczUm9hWE11Y0c5ekt5dGRPeUJwWmlBb1lqQWdQQ0F3ZURnd0tTQnlaWFIxY200Z1lqQTdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmlNQ0E5SUdJd0lDWWdNSGczWmp0Y2JpQWdJQ0FnSUNBZ1lqRWdQU0JpZFdaYmRHaHBjeTV3YjNNcksxMDdJR2xtSUNoaU1TQThJREI0T0RBcElISmxkSFZ5YmlCaU1DQjhJR0l4SUR3OElEYzdJQ0FnSUNBZ0lHSXhJRDBnS0dJeElDWWdNSGczWmlrZ1BEd2dOenRjYmlBZ0lDQWdJQ0FnWWpJZ1BTQmlkV1piZEdocGN5NXdiM01ySzEwN0lHbG1JQ2hpTWlBOElEQjRPREFwSUhKbGRIVnliaUJpTUNCOElHSXhJSHdnWWpJZ1BEd2dNVFE3SUdJeUlEMGdLR0l5SUNZZ01IZzNaaWtnUER3Z01UUTdYRzRnSUNBZ0lDQWdJR0l6SUQwZ1luVm1XM1JvYVhNdWNHOXpLeXRkT3lCcFppQW9Zak1nUENBd2VEZ3dLU0J5WlhSMWNtNGdZakFnZkNCaU1TQjhJR0l5SUh3Z1lqTWdQRHdnTWpFN1hHNWNiaUFnSUNBZ0lDQWdkbUZzSUQwZ1lqQWdmQ0JpTVNCOElHSXlJSHdnS0dJeklDWWdNSGczWmlrZ1BEd2dNakU3WEc1Y2JpQWdJQ0FnSUNBZ1lpQTlJR0oxWmx0MGFHbHpMbkJ2Y3lzclhUc2dkbUZzSUNzOUlDaGlJQ1lnTUhnM1ppa2dLaUF3ZURFd01EQXdNREF3T3lBZ0lDQWdJQ0FnSUdsbUlDaGlJRHdnTUhnNE1Da2djbVYwZFhKdUlIWmhiRHRjYmlBZ0lDQWdJQ0FnWWlBOUlHSjFabHQwYUdsekxuQnZjeXNyWFRzZ2RtRnNJQ3M5SUNoaUlDWWdNSGczWmlrZ0tpQXdlRGd3TURBd01EQXdNRHNnSUNBZ0lDQWdJR2xtSUNoaUlEd2dNSGc0TUNrZ2NtVjBkWEp1SUhaaGJEdGNiaUFnSUNBZ0lDQWdZaUE5SUdKMVpsdDBhR2x6TG5CdmN5c3JYVHNnZG1Gc0lDczlJQ2hpSUNZZ01IZzNaaWtnS2lBd2VEUXdNREF3TURBd01EQXdPeUFnSUNBZ0lHbG1JQ2hpSUR3Z01IZzRNQ2tnY21WMGRYSnVJSFpoYkR0Y2JpQWdJQ0FnSUNBZ1lpQTlJR0oxWmx0MGFHbHpMbkJ2Y3lzclhUc2dkbUZzSUNzOUlDaGlJQ1lnTUhnM1ppa2dLaUF3ZURJd01EQXdNREF3TURBd01EQTdJQ0FnSUdsbUlDaGlJRHdnTUhnNE1Da2djbVYwZFhKdUlIWmhiRHRjYmlBZ0lDQWdJQ0FnWWlBOUlHSjFabHQwYUdsekxuQnZjeXNyWFRzZ2RtRnNJQ3M5SUNoaUlDWWdNSGczWmlrZ0tpQXdlREV3TURBd01EQXdNREF3TURBd01Ec2dJR2xtSUNoaUlEd2dNSGc0TUNrZ2NtVjBkWEp1SUhaaGJEdGNiaUFnSUNBZ0lDQWdZaUE5SUdKMVpsdDBhR2x6TG5CdmN5c3JYVHNnZG1Gc0lDczlJQ2hpSUNZZ01IZzNaaWtnS2lBd2VEZ3dNREF3TURBd01EQXdNREF3TURBN0lHbG1JQ2hpSUR3Z01IZzRNQ2tnY21WMGRYSnVJSFpoYkR0Y2JseHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owVjRjR1ZqZEdWa0lIWmhjbWx1ZENCdWIzUWdiVzl5WlNCMGFHRnVJREV3SUdKNWRHVnpKeWs3WEc0Z0lDQWdmU3hjYmx4dUlDQWdJSEpsWVdSV1lYSnBiblEyTkRvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCemRHRnlkRkJ2Y3lBOUlIUm9hWE11Y0c5ekxGeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc0lEMGdkR2hwY3k1eVpXRmtWbUZ5YVc1MEtDazdYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tIWmhiQ0E4SUZCUFYxOHlYell6S1NCeVpYUjFjbTRnZG1Gc08xeHVYRzRnSUNBZ0lDQWdJSFpoY2lCd2IzTWdQU0IwYUdsekxuQnZjeUF0SURJN1hHNGdJQ0FnSUNBZ0lIZG9hV3hsSUNoMGFHbHpMbUoxWmx0d2IzTmRJRDA5UFNBd2VHWm1LU0J3YjNNdExUdGNiaUFnSUNBZ0lDQWdhV1lnS0hCdmN5QThJSE4wWVhKMFVHOXpLU0J3YjNNZ1BTQnpkR0Z5ZEZCdmN6dGNibHh1SUNBZ0lDQWdJQ0IyWVd3Z1BTQXdPMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUhCdmN5QXRJSE4wWVhKMFVHOXpJQ3NnTVRzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnWWlBOUlINTBhR2x6TG1KMVpsdHpkR0Z5ZEZCdmN5QXJJR2xkSUNZZ01IZzNaanRjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhiQ0FyUFNCcElEd2dOQ0EvSUdJZ1BEd2dhU0FxSURjZ09pQmlJQ29nVFdGMGFDNXdiM2NvTWl3Z2FTQXFJRGNwTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlDMTJZV3dnTFNBeE8xeHVJQ0FnSUgwc1hHNWNiaUFnSUNCeVpXRmtVMVpoY21sdWREb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQnVkVzBnUFNCMGFHbHpMbkpsWVdSV1lYSnBiblFvS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUc1MWJTQWxJRElnUFQwOUlERWdQeUFvYm5WdElDc2dNU2tnTHlBdE1pQTZJRzUxYlNBdklESTdJQzh2SUhwcFozcGhaeUJsYm1OdlpHbHVaMXh1SUNBZ0lIMHNYRzVjYmlBZ0lDQnlaV0ZrUW05dmJHVmhiam9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCQ2IyOXNaV0Z1S0hSb2FYTXVjbVZoWkZaaGNtbHVkQ2dwS1R0Y2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnY21WaFpGTjBjbWx1WnpvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCbGJtUWdQU0IwYUdsekxuSmxZV1JXWVhKcGJuUW9LU0FySUhSb2FYTXVjRzl6TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM1J5SUQwZ2RHaHBjeTVpZFdZdWRHOVRkSEpwYm1jb0ozVjBaamduTENCMGFHbHpMbkJ2Y3l3Z1pXNWtLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXdiM01nUFNCbGJtUTdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnpkSEk3WEc0Z0lDQWdmU3hjYmx4dUlDQWdJSEpsWVdSQ2VYUmxjem9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJsYm1RZ1BTQjBhR2x6TG5KbFlXUldZWEpwYm5Rb0tTQXJJSFJvYVhNdWNHOXpMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1luVm1abVZ5SUQwZ2RHaHBjeTVpZFdZdWMyeHBZMlVvZEdocGN5NXdiM01zSUdWdVpDazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHOXpJRDBnWlc1a08xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1luVm1abVZ5TzF4dUlDQWdJSDBzWEc1Y2JpQWdJQ0F2THlCMlpYSmliM05sSUdadmNpQndaWEptYjNKdFlXNWpaU0J5WldGemIyNXpPeUJrYjJWemJpZDBJR0ZtWm1WamRDQm5lbWx3Y0dWa0lITnBlbVZjYmx4dUlDQWdJSEpsWVdSUVlXTnJaV1JXWVhKcGJuUTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNCMllYSWdaVzVrSUQwZ2RHaHBjeTV5WldGa1ZtRnlhVzUwS0NrZ0t5QjBhR2x6TG5CdmN5d2dZWEp5SUQwZ1cxMDdYRzRnSUNBZ0lDQWdJSGRvYVd4bElDaDBhR2x6TG5CdmN5QThJR1Z1WkNrZ1lYSnlMbkIxYzJnb2RHaHBjeTV5WldGa1ZtRnlhVzUwS0NrcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lYSnlPMXh1SUNBZ0lIMHNYRzRnSUNBZ2NtVmhaRkJoWTJ0bFpGTldZWEpwYm5RNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ1pXNWtJRDBnZEdocGN5NXlaV0ZrVm1GeWFXNTBLQ2tnS3lCMGFHbHpMbkJ2Y3l3Z1lYSnlJRDBnVzEwN1hHNGdJQ0FnSUNBZ0lIZG9hV3hsSUNoMGFHbHpMbkJ2Y3lBOElHVnVaQ2tnWVhKeUxuQjFjMmdvZEdocGN5NXlaV0ZrVTFaaGNtbHVkQ2dwS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGeWNqdGNiaUFnSUNCOUxGeHVJQ0FnSUhKbFlXUlFZV05yWldSQ2IyOXNaV0Z1T2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUdWdVpDQTlJSFJvYVhNdWNtVmhaRlpoY21sdWRDZ3BJQ3NnZEdocGN5NXdiM01zSUdGeWNpQTlJRnRkTzF4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvZEdocGN5NXdiM01nUENCbGJtUXBJR0Z5Y2k1d2RYTm9LSFJvYVhNdWNtVmhaRUp2YjJ4bFlXNG9LU2s3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJoY25JN1hHNGdJQ0FnZlN4Y2JpQWdJQ0J5WldGa1VHRmphMlZrUm14dllYUTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNCMllYSWdaVzVrSUQwZ2RHaHBjeTV5WldGa1ZtRnlhVzUwS0NrZ0t5QjBhR2x6TG5CdmN5d2dZWEp5SUQwZ1cxMDdYRzRnSUNBZ0lDQWdJSGRvYVd4bElDaDBhR2x6TG5CdmN5QThJR1Z1WkNrZ1lYSnlMbkIxYzJnb2RHaHBjeTV5WldGa1JteHZZWFFvS1NrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCaGNuSTdYRzRnSUNBZ2ZTeGNiaUFnSUNCeVpXRmtVR0ZqYTJWa1JHOTFZbXhsT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUdWdVpDQTlJSFJvYVhNdWNtVmhaRlpoY21sdWRDZ3BJQ3NnZEdocGN5NXdiM01zSUdGeWNpQTlJRnRkTzF4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvZEdocGN5NXdiM01nUENCbGJtUXBJR0Z5Y2k1d2RYTm9LSFJvYVhNdWNtVmhaRVJ2ZFdKc1pTZ3BLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR0Z5Y2p0Y2JpQWdJQ0I5TEZ4dUlDQWdJSEpsWVdSUVlXTnJaV1JHYVhobFpETXlPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJR1Z1WkNBOUlIUm9hWE11Y21WaFpGWmhjbWx1ZENncElDc2dkR2hwY3k1d2IzTXNJR0Z5Y2lBOUlGdGRPMXh1SUNBZ0lDQWdJQ0IzYUdsc1pTQW9kR2hwY3k1d2IzTWdQQ0JsYm1RcElHRnljaTV3ZFhOb0tIUm9hWE11Y21WaFpFWnBlR1ZrTXpJb0tTazdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmhjbkk3WEc0Z0lDQWdmU3hjYmlBZ0lDQnlaV0ZrVUdGamEyVmtVMFpwZUdWa016STZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNCMllYSWdaVzVrSUQwZ2RHaHBjeTV5WldGa1ZtRnlhVzUwS0NrZ0t5QjBhR2x6TG5CdmN5d2dZWEp5SUQwZ1cxMDdYRzRnSUNBZ0lDQWdJSGRvYVd4bElDaDBhR2x6TG5CdmN5QThJR1Z1WkNrZ1lYSnlMbkIxYzJnb2RHaHBjeTV5WldGa1UwWnBlR1ZrTXpJb0tTazdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmhjbkk3WEc0Z0lDQWdmU3hjYmlBZ0lDQnlaV0ZrVUdGamEyVmtSbWw0WldRMk5Eb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQmxibVFnUFNCMGFHbHpMbkpsWVdSV1lYSnBiblFvS1NBcklIUm9hWE11Y0c5ekxDQmhjbklnUFNCYlhUdGNiaUFnSUNBZ0lDQWdkMmhwYkdVZ0tIUm9hWE11Y0c5eklEd2daVzVrS1NCaGNuSXVjSFZ6YUNoMGFHbHpMbkpsWVdSR2FYaGxaRFkwS0NrcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lYSnlPMXh1SUNBZ0lIMHNYRzRnSUNBZ2NtVmhaRkJoWTJ0bFpGTkdhWGhsWkRZME9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHVnVaQ0E5SUhSb2FYTXVjbVZoWkZaaGNtbHVkQ2dwSUNzZ2RHaHBjeTV3YjNNc0lHRnljaUE5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQjNhR2xzWlNBb2RHaHBjeTV3YjNNZ1BDQmxibVFwSUdGeWNpNXdkWE5vS0hSb2FYTXVjbVZoWkZOR2FYaGxaRFkwS0NrcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lYSnlPMXh1SUNBZ0lIMHNYRzVjYmlBZ0lDQnphMmx3T2lCbWRXNWpkR2x2YmloMllXd3BJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlIUjVjR1VnUFNCMllXd2dKaUF3ZURjN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbElEMDlQU0JRWW1ZdVZtRnlhVzUwS1NCM2FHbHNaU0FvZEdocGN5NWlkV1piZEdocGN5NXdiM01ySzEwZ1BpQXdlRGRtS1NCN2ZWeHVJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaDBlWEJsSUQwOVBTQlFZbVl1UW5sMFpYTXBJSFJvYVhNdWNHOXpJRDBnZEdocGN5NXlaV0ZrVm1GeWFXNTBLQ2tnS3lCMGFHbHpMbkJ2Y3p0Y2JpQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb2RIbHdaU0E5UFQwZ1VHSm1Ma1pwZUdWa016SXBJSFJvYVhNdWNHOXpJQ3M5SURRN1hHNGdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tIUjVjR1VnUFQwOUlGQmlaaTVHYVhobFpEWTBLU0IwYUdsekxuQnZjeUFyUFNBNE8xeHVJQ0FnSUNBZ0lDQmxiSE5sSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduVlc1cGJYQnNaVzFsYm5SbFpDQjBlWEJsT2lBbklDc2dkSGx3WlNrN1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUM4dklEMDlQU0JYVWtsVVNVNUhJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc1Y2JpQWdJQ0IzY21sMFpWUmhaem9nWm5WdVkzUnBiMjRvZEdGbkxDQjBlWEJsS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZDNKcGRHVldZWEpwYm5Rb0tIUmhaeUE4UENBektTQjhJSFI1Y0dVcE8xeHVJQ0FnSUgwc1hHNWNiaUFnSUNCeVpXRnNiRzlqT2lCbWRXNWpkR2x2YmlodGFXNHBJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHeGxibWQwYUNBOUlIUm9hWE11YkdWdVozUm9JSHg4SURFMk8xeHVYRzRnSUNBZ0lDQWdJSGRvYVd4bElDaHNaVzVuZEdnZ1BDQjBhR2x6TG5CdmN5QXJJRzFwYmlrZ2JHVnVaM1JvSUNvOUlESTdYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tHeGxibWQwYUNBaFBUMGdkR2hwY3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCaWRXWWdQU0J1WlhjZ1FuVm1abVZ5S0d4bGJtZDBhQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1KMVppNWpiM0I1S0dKMVppazdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbUoxWmlBOUlHSjFaanRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YkdWdVozUm9JRDBnYkdWdVozUm9PMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmU3hjYmx4dUlDQWdJR1pwYm1semFEb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViR1Z1WjNSb0lEMGdkR2hwY3k1d2IzTTdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHOXpJRDBnTUR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZblZtTG5Oc2FXTmxLREFzSUhSb2FYTXViR1Z1WjNSb0tUdGNiaUFnSUNCOUxGeHVYRzRnSUNBZ2QzSnBkR1ZHYVhobFpETXlPaUJtZFc1amRHbHZiaWgyWVd3cElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1eVpXRnNiRzlqS0RRcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1KMVppNTNjbWwwWlZWSmJuUXpNa3hGS0haaGJDd2dkR2hwY3k1d2IzTXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuQnZjeUFyUFNBME8xeHVJQ0FnSUgwc1hHNWNiaUFnSUNCM2NtbDBaVk5HYVhobFpETXlPaUJtZFc1amRHbHZiaWgyWVd3cElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1eVpXRnNiRzlqS0RRcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1KMVppNTNjbWwwWlVsdWRETXlURVVvZG1Gc0xDQjBhR2x6TG5CdmN5azdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHOXpJQ3M5SURRN1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUhkeWFYUmxSbWw0WldRMk5Eb2dablZ1WTNScGIyNG9kbUZzS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y21WaGJHeHZZeWc0S1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVpZFdZdWQzSnBkR1ZKYm5Rek1reEZLSFpoYkNBbUlDMHhMQ0IwYUdsekxuQnZjeWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZblZtTG5keWFYUmxWVWx1ZERNeVRFVW9UV0YwYUM1bWJHOXZjaWgyWVd3Z0tpQlRTRWxHVkY5U1NVZElWRjh6TWlrc0lIUm9hWE11Y0c5eklDc2dOQ2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6SUNzOUlEZzdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lIZHlhWFJsVTBacGVHVmtOalE2SUdaMWJtTjBhVzl1S0haaGJDa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxuSmxZV3hzYjJNb09DazdYRzRnSUNBZ0lDQWdJSFJvYVhNdVluVm1MbmR5YVhSbFNXNTBNekpNUlNoMllXd2dKaUF0TVN3Z2RHaHBjeTV3YjNNcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1KMVppNTNjbWwwWlVsdWRETXlURVVvVFdGMGFDNW1iRzl2Y2loMllXd2dLaUJUU0VsR1ZGOVNTVWRJVkY4ek1pa3NJSFJvYVhNdWNHOXpJQ3NnTkNrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y0c5eklDczlJRGc3WEc0Z0lDQWdmU3hjYmx4dUlDQWdJSGR5YVhSbFZtRnlhVzUwT2lCbWRXNWpkR2x2YmloMllXd3BJSHRjYmlBZ0lDQWdJQ0FnZG1Gc0lEMGdLM1poYkR0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvZG1Gc0lEdzlJREI0TjJZcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVjbVZoYkd4dll5Z3hLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WW5WbVczUm9hWE11Y0c5ekt5dGRJRDBnZG1Gc08xeHVYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvZG1Gc0lEdzlJREI0TTJabVppa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV5WldGc2JHOWpLRElwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1aWRXWmJkR2hwY3k1d2IzTXJLMTBnUFNBb0tIWmhiQ0ErUGo0Z01Da2dKaUF3ZURkbUtTQjhJREI0T0RBN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtSjFabHQwYUdsekxuQnZjeXNyWFNBOUlDZ29kbUZzSUQ0K1BpQTNLU0FtSURCNE4yWXBPMXh1WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RtRnNJRHc5SURCNE1XWm1abVptS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuSmxZV3hzYjJNb015azdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbUoxWmx0MGFHbHpMbkJ2Y3lzclhTQTlJQ2dvZG1Gc0lENCtQaUF3S1NBbUlEQjROMllwSUh3Z01IZzRNRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WW5WbVczUm9hWE11Y0c5ekt5dGRJRDBnS0NoMllXd2dQajQrSURjcElDWWdNSGczWmlrZ2ZDQXdlRGd3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1aWRXWmJkR2hwY3k1d2IzTXJLMTBnUFNBb0tIWmhiQ0ErUGo0Z01UUXBJQ1lnTUhnM1ppazdYRzVjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoMllXd2dQRDBnTUhobVptWm1abVptS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuSmxZV3hzYjJNb05DazdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbUoxWmx0MGFHbHpMbkJ2Y3lzclhTQTlJQ2dvZG1Gc0lENCtQaUF3S1NBbUlEQjROMllwSUh3Z01IZzRNRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WW5WbVczUm9hWE11Y0c5ekt5dGRJRDBnS0NoMllXd2dQajQrSURjcElDWWdNSGczWmlrZ2ZDQXdlRGd3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1aWRXWmJkR2hwY3k1d2IzTXJLMTBnUFNBb0tIWmhiQ0ErUGo0Z01UUXBJQ1lnTUhnM1ppa2dmQ0F3ZURnd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWlkV1piZEdocGN5NXdiM01ySzEwZ1BTQW9LSFpoYkNBK1BqNGdNakVwSUNZZ01IZzNaaWs3WEc1Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCd2IzTWdQU0IwYUdsekxuQnZjenRjYmlBZ0lDQWdJQ0FnSUNBZ0lIZG9hV3hsSUNoMllXd2dQajBnTUhnNE1Da2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNtVmhiR3h2WXlneEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1KMVpsdDBhR2x6TG5CdmN5c3JYU0E5SUNoMllXd2dKaUF3ZUdabUtTQjhJREI0T0RBN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnNJQzg5SURCNE9EQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuSmxZV3hzYjJNb01TazdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbUoxWmx0MGFHbHpMbkJ2Y3lzclhTQTlJSFpoYkNCOElEQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kR2hwY3k1d2IzTWdMU0J3YjNNZ1BpQXhNQ2tnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RIYVhabGJpQjJZWEpwYm5RZ1pHOWxjMjVjWENkMElHWnBkQ0JwYm5SdklERXdJR0o1ZEdWekp5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlMRnh1WEc0Z0lDQWdkM0pwZEdWVFZtRnlhVzUwT2lCbWRXNWpkR2x2YmloMllXd3BJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTNjbWwwWlZaaGNtbHVkQ2gyWVd3Z1BDQXdJRDhnTFhaaGJDQXFJRElnTFNBeElEb2dkbUZzSUNvZ01pazdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lIZHlhWFJsUW05dmJHVmhiam9nWm5WdVkzUnBiMjRvZG1Gc0tTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWQzSnBkR1ZXWVhKcGJuUW9RbTl2YkdWaGJpaDJZV3dwS1R0Y2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnZDNKcGRHVlRkSEpwYm1jNklHWjFibU4wYVc5dUtITjBjaWtnZTF4dUlDQWdJQ0FnSUNCemRISWdQU0JUZEhKcGJtY29jM1J5S1R0Y2JpQWdJQ0FnSUNBZ2RtRnlJR0o1ZEdWeklEMGdRblZtWm1WeUxtSjVkR1ZNWlc1bmRHZ29jM1J5S1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUzY21sMFpWWmhjbWx1ZENoaWVYUmxjeWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjbVZoYkd4dll5aGllWFJsY3lrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WW5WbUxuZHlhWFJsS0hOMGNpd2dkR2hwY3k1d2IzTXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuQnZjeUFyUFNCaWVYUmxjenRjYmlBZ0lDQjlMRnh1WEc0Z0lDQWdkM0pwZEdWR2JHOWhkRG9nWm5WdVkzUnBiMjRvZG1Gc0tTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNtVmhiR3h2WXlnMEtUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1aWRXWXVkM0pwZEdWR2JHOWhkRXhGS0haaGJDd2dkR2hwY3k1d2IzTXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuQnZjeUFyUFNBME8xeHVJQ0FnSUgwc1hHNWNiaUFnSUNCM2NtbDBaVVJ2ZFdKc1pUb2dablZ1WTNScGIyNG9kbUZzS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y21WaGJHeHZZeWc0S1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVpZFdZdWQzSnBkR1ZFYjNWaWJHVk1SU2gyWVd3c0lIUm9hWE11Y0c5ektUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1d2IzTWdLejBnT0R0Y2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnZDNKcGRHVkNlWFJsY3pvZ1puVnVZM1JwYjI0b1luVm1abVZ5S1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJzWlc0Z1BTQmlkV1ptWlhJdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbmR5YVhSbFZtRnlhVzUwS0d4bGJpazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNtVmhiR3h2WXloc1pXNHBPMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUd4bGJqc2dhU3NyS1NCMGFHbHpMbUoxWmx0MGFHbHpMbkJ2Y3lzclhTQTlJR0oxWm1abGNsdHBYVHRjYmlBZ0lDQjlMRnh1WEc0Z0lDQWdkM0pwZEdWTlpYTnpZV2RsT2lCbWRXNWpkR2x2YmloMFlXY3NJR1p1TENCdlltb3BJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTNjbWwwWlZSaFp5aDBZV2NzSUZCaVppNUNlWFJsY3lrN1hHNWNiaUFnSUNBZ0lDQWdkR2hwY3k1d2IzTXJLenNnTHk4Z2NtVnpaWEoyWlNBeElHSjVkR1VnWm05eUlITm9iM0owSUcxbGMzTmhaMlVnYkdWdVozUm9YRzVjYmlBZ0lDQWdJQ0FnTHk4Z2QzSnBkR1VnZEdobElHMWxjM05oWjJVZ1pHbHlaV04wYkhrZ2RHOGdkR2hsSUdKMVptWmxjaUJoYm1RZ2MyVmxJR2h2ZHlCdGRXTm9JSGRoY3lCM2NtbDBkR1Z1WEc0Z0lDQWdJQ0FnSUhaaGNpQnpkR0Z5ZEZCdmN5QTlJSFJvYVhNdWNHOXpPMXh1SUNBZ0lDQWdJQ0JtYmlodlltb3NJSFJvYVhNcE8xeHVJQ0FnSUNBZ0lDQjJZWElnYkdWdUlEMGdkR2hwY3k1d2IzTWdMU0J6ZEdGeWRGQnZjenRjYmx4dUlDQWdJQ0FnSUNCMllYSWdkbUZ5YVc1MFRHVnVJRDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxiaUE4UFNBd2VEZG1JRDhnTVNBNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlc0Z1BEMGdNSGd6Wm1abUlEOGdNaUE2WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaVzRnUEQwZ01IZ3habVptWm1ZZ1B5QXpJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxiaUE4UFNBd2VHWm1abVptWm1ZZ1B5QTBJRG9nVFdGMGFDNWpaV2xzS0UxaGRHZ3ViRzluS0d4bGJpa2dMeUFvVFdGMGFDNU1UaklnS2lBM0tTazdYRzVjYmlBZ0lDQWdJQ0FnTHk4Z2FXWWdNU0JpZVhSbElHbHpiaWQwSUdWdWIzVm5hQ0JtYjNJZ1pXNWpiMlJwYm1jZ2JXVnpjMkZuWlNCc1pXNW5kR2dzSUhOb2FXWjBJSFJvWlNCa1lYUmhJSFJ2SUhSb1pTQnlhV2RvZEZ4dUlDQWdJQ0FnSUNCcFppQW9kbUZ5YVc1MFRHVnVJRDRnTVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXlaV0ZzYkc5aktIWmhjbWx1ZEV4bGJpQXRJREVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SUhSb2FYTXVjRzl6SUMwZ01Uc2dhU0ErUFNCemRHRnlkRkJ2Y3pzZ2FTMHRLU0IwYUdsekxtSjFabHRwSUNzZ2RtRnlhVzUwVEdWdUlDMGdNVjBnUFNCMGFHbHpMbUoxWmx0cFhUdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUM4dklHWnBibUZzYkhrc0lIZHlhWFJsSUhSb1pTQnRaWE56WVdkbElHeGxibWQwYUNCcGJpQjBhR1VnY21WelpYSjJaV1FnY0d4aFkyVWdZVzVrSUhKbGMzUnZjbVVnZEdobElIQnZjMmwwYVc5dVhHNGdJQ0FnSUNBZ0lIUm9hWE11Y0c5eklEMGdjM1JoY25SUWIzTWdMU0F4TzF4dUlDQWdJQ0FnSUNCMGFHbHpMbmR5YVhSbFZtRnlhVzUwS0d4bGJpazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHOXpJQ3M5SUd4bGJqdGNiaUFnSUNCOUxGeHVYRzRnSUNBZ2QzSnBkR1ZRWVdOclpXUldZWEpwYm5RNklDQWdablZ1WTNScGIyNG9kR0ZuTENCaGNuSXBJSHNnZEdocGN5NTNjbWwwWlUxbGMzTmhaMlVvZEdGbkxDQjNjbWwwWlZCaFkydGxaRlpoY21sdWRDd2dZWEp5S1RzZ0lDQjlMRnh1SUNBZ0lIZHlhWFJsVUdGamEyVmtVMVpoY21sdWREb2dJR1oxYm1OMGFXOXVLSFJoWnl3Z1lYSnlLU0I3SUhSb2FYTXVkM0pwZEdWTlpYTnpZV2RsS0hSaFp5d2dkM0pwZEdWUVlXTnJaV1JUVm1GeWFXNTBMQ0JoY25JcE95QWdmU3hjYmlBZ0lDQjNjbWwwWlZCaFkydGxaRUp2YjJ4bFlXNDZJQ0JtZFc1amRHbHZiaWgwWVdjc0lHRnljaWtnZXlCMGFHbHpMbmR5YVhSbFRXVnpjMkZuWlNoMFlXY3NJSGR5YVhSbFVHRmphMlZrUW05dmJHVmhiaXdnWVhKeUtUc2dJSDBzWEc0Z0lDQWdkM0pwZEdWUVlXTnJaV1JHYkc5aGREb2dJQ0FnWm5WdVkzUnBiMjRvZEdGbkxDQmhjbklwSUhzZ2RHaHBjeTUzY21sMFpVMWxjM05oWjJVb2RHRm5MQ0IzY21sMFpWQmhZMnRsWkVac2IyRjBMQ0JoY25JcE95QWdJQ0I5TEZ4dUlDQWdJSGR5YVhSbFVHRmphMlZrUkc5MVlteGxPaUFnSUdaMWJtTjBhVzl1S0hSaFp5d2dZWEp5S1NCN0lIUm9hWE11ZDNKcGRHVk5aWE56WVdkbEtIUmhaeXdnZDNKcGRHVlFZV05yWldSRWIzVmliR1VzSUdGeWNpazdJQ0FnZlN4Y2JpQWdJQ0IzY21sMFpWQmhZMnRsWkVacGVHVmtNekk2SUNCbWRXNWpkR2x2YmloMFlXY3NJR0Z5Y2lrZ2V5QjBhR2x6TG5keWFYUmxUV1Z6YzJGblpTaDBZV2NzSUhkeWFYUmxVR0ZqYTJWa1JtbDRaV1F6TWl3Z1lYSnlLVHNnSUgwc1hHNGdJQ0FnZDNKcGRHVlFZV05yWldSVFJtbDRaV1F6TWpvZ1puVnVZM1JwYjI0b2RHRm5MQ0JoY25JcElIc2dkR2hwY3k1M2NtbDBaVTFsYzNOaFoyVW9kR0ZuTENCM2NtbDBaVkJoWTJ0bFpGTkdhWGhsWkRNeUxDQmhjbklwT3lCOUxGeHVJQ0FnSUhkeWFYUmxVR0ZqYTJWa1JtbDRaV1EyTkRvZ0lHWjFibU4wYVc5dUtIUmhaeXdnWVhKeUtTQjdJSFJvYVhNdWQzSnBkR1ZOWlhOellXZGxLSFJoWnl3Z2QzSnBkR1ZRWVdOclpXUkdhWGhsWkRZMExDQmhjbklwT3lBZ2ZTeGNiaUFnSUNCM2NtbDBaVkJoWTJ0bFpGTkdhWGhsWkRZME9pQm1kVzVqZEdsdmJpaDBZV2NzSUdGeWNpa2dleUIwYUdsekxuZHlhWFJsVFdWemMyRm5aU2gwWVdjc0lIZHlhWFJsVUdGamEyVmtVMFpwZUdWa05qUXNJR0Z5Y2lrN0lIMHNYRzVjYmlBZ0lDQjNjbWwwWlVKNWRHVnpSbWxsYkdRNklHWjFibU4wYVc5dUtIUmhaeXdnWW5WbVptVnlLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkM0pwZEdWVVlXY29kR0ZuTENCUVltWXVRbmwwWlhNcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5keWFYUmxRbmwwWlhNb1luVm1abVZ5S1R0Y2JpQWdJQ0I5TEZ4dUlDQWdJSGR5YVhSbFJtbDRaV1F6TWtacFpXeGtPaUJtZFc1amRHbHZiaWgwWVdjc0lIWmhiQ2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbmR5YVhSbFZHRm5LSFJoWnl3Z1VHSm1Ma1pwZUdWa016SXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuZHlhWFJsUm1sNFpXUXpNaWgyWVd3cE8xeHVJQ0FnSUgwc1hHNGdJQ0FnZDNKcGRHVlRSbWw0WldRek1rWnBaV3hrT2lCbWRXNWpkR2x2YmloMFlXY3NJSFpoYkNrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5keWFYUmxWR0ZuS0hSaFp5d2dVR0ptTGtacGVHVmtNeklwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbmR5YVhSbFUwWnBlR1ZrTXpJb2RtRnNLVHRjYmlBZ0lDQjlMRnh1SUNBZ0lIZHlhWFJsUm1sNFpXUTJORVpwWld4a09pQm1kVzVqZEdsdmJpaDBZV2NzSUhaaGJDa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxuZHlhWFJsVkdGbktIUmhaeXdnVUdKbUxrWnBlR1ZrTmpRcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5keWFYUmxSbWw0WldRMk5DaDJZV3dwTzF4dUlDQWdJSDBzWEc0Z0lDQWdkM0pwZEdWVFJtbDRaV1EyTkVacFpXeGtPaUJtZFc1amRHbHZiaWgwWVdjc0lIWmhiQ2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbmR5YVhSbFZHRm5LSFJoWnl3Z1VHSm1Ma1pwZUdWa05qUXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuZHlhWFJsVTBacGVHVmtOalFvZG1Gc0tUdGNiaUFnSUNCOUxGeHVJQ0FnSUhkeWFYUmxWbUZ5YVc1MFJtbGxiR1E2SUdaMWJtTjBhVzl1S0hSaFp5d2dkbUZzS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZDNKcGRHVlVZV2NvZEdGbkxDQlFZbVl1Vm1GeWFXNTBLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTNjbWwwWlZaaGNtbHVkQ2gyWVd3cE8xeHVJQ0FnSUgwc1hHNGdJQ0FnZDNKcGRHVlRWbUZ5YVc1MFJtbGxiR1E2SUdaMWJtTjBhVzl1S0hSaFp5d2dkbUZzS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZDNKcGRHVlVZV2NvZEdGbkxDQlFZbVl1Vm1GeWFXNTBLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTNjbWwwWlZOV1lYSnBiblFvZG1Gc0tUdGNiaUFnSUNCOUxGeHVJQ0FnSUhkeWFYUmxVM1J5YVc1blJtbGxiR1E2SUdaMWJtTjBhVzl1S0hSaFp5d2djM1J5S1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZDNKcGRHVlVZV2NvZEdGbkxDQlFZbVl1UW5sMFpYTXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuZHlhWFJsVTNSeWFXNW5LSE4wY2lrN1hHNGdJQ0FnZlN4Y2JpQWdJQ0IzY21sMFpVWnNiMkYwUm1sbGJHUTZJR1oxYm1OMGFXOXVLSFJoWnl3Z2RtRnNLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkM0pwZEdWVVlXY29kR0ZuTENCUVltWXVSbWw0WldRek1pazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWQzSnBkR1ZHYkc5aGRDaDJZV3dwTzF4dUlDQWdJSDBzWEc0Z0lDQWdkM0pwZEdWRWIzVmliR1ZHYVdWc1pEb2dablZ1WTNScGIyNG9kR0ZuTENCMllXd3BJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTNjbWwwWlZSaFp5aDBZV2NzSUZCaVppNUdhWGhsWkRZMEtUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1M2NtbDBaVVJ2ZFdKc1pTaDJZV3dwTzF4dUlDQWdJSDBzWEc0Z0lDQWdkM0pwZEdWQ2IyOXNaV0Z1Um1sbGJHUTZJR1oxYm1OMGFXOXVLSFJoWnl3Z2RtRnNLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkM0pwZEdWV1lYSnBiblJHYVdWc1pDaDBZV2NzSUVKdmIyeGxZVzRvZG1Gc0tTazdYRzRnSUNBZ2ZWeHVmVHRjYmx4dVpuVnVZM1JwYjI0Z2QzSnBkR1ZRWVdOclpXUldZWEpwYm5Rb1lYSnlMQ0J3WW1ZcElDQWdleUJtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUdGeWNpNXNaVzVuZEdnN0lHa3JLeWtnY0dKbUxuZHlhWFJsVm1GeWFXNTBLR0Z5Y2x0cFhTazdJQ0FnZlZ4dVpuVnVZM1JwYjI0Z2QzSnBkR1ZRWVdOclpXUlRWbUZ5YVc1MEtHRnljaXdnY0dKbUtTQWdleUJtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUdGeWNpNXNaVzVuZEdnN0lHa3JLeWtnY0dKbUxuZHlhWFJsVTFaaGNtbHVkQ2hoY25KYmFWMHBPeUFnZlZ4dVpuVnVZM1JwYjI0Z2QzSnBkR1ZRWVdOclpXUkdiRzloZENoaGNuSXNJSEJpWmlrZ0lDQWdleUJtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUdGeWNpNXNaVzVuZEdnN0lHa3JLeWtnY0dKbUxuZHlhWFJsUm14dllYUW9ZWEp5VzJsZEtUc2dJQ0FnZlZ4dVpuVnVZM1JwYjI0Z2QzSnBkR1ZRWVdOclpXUkViM1ZpYkdVb1lYSnlMQ0J3WW1ZcElDQWdleUJtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUdGeWNpNXNaVzVuZEdnN0lHa3JLeWtnY0dKbUxuZHlhWFJsUkc5MVlteGxLR0Z5Y2x0cFhTazdJQ0FnZlZ4dVpuVnVZM1JwYjI0Z2QzSnBkR1ZRWVdOclpXUkNiMjlzWldGdUtHRnljaXdnY0dKbUtTQWdleUJtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUdGeWNpNXNaVzVuZEdnN0lHa3JLeWtnY0dKbUxuZHlhWFJsUW05dmJHVmhiaWhoY25KYmFWMHBPeUFnZlZ4dVpuVnVZM1JwYjI0Z2QzSnBkR1ZRWVdOclpXUkdhWGhsWkRNeUtHRnljaXdnY0dKbUtTQWdleUJtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUdGeWNpNXNaVzVuZEdnN0lHa3JLeWtnY0dKbUxuZHlhWFJsUm1sNFpXUXpNaWhoY25KYmFWMHBPeUFnZlZ4dVpuVnVZM1JwYjI0Z2QzSnBkR1ZRWVdOclpXUlRSbWw0WldRek1paGhjbklzSUhCaVppa2dleUJtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUdGeWNpNXNaVzVuZEdnN0lHa3JLeWtnY0dKbUxuZHlhWFJsVTBacGVHVmtNeklvWVhKeVcybGRLVHNnZlZ4dVpuVnVZM1JwYjI0Z2QzSnBkR1ZRWVdOclpXUkdhWGhsWkRZMEtHRnljaXdnY0dKbUtTQWdleUJtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUdGeWNpNXNaVzVuZEdnN0lHa3JLeWtnY0dKbUxuZHlhWFJsUm1sNFpXUTJOQ2hoY25KYmFWMHBPeUFnZlZ4dVpuVnVZM1JwYjI0Z2QzSnBkR1ZRWVdOclpXUlRSbWw0WldRMk5DaGhjbklzSUhCaVppa2dleUJtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUdGeWNpNXNaVzVuZEdnN0lHa3JLeWtnY0dKbUxuZHlhWFJsVTBacGVHVmtOalFvWVhKeVcybGRLVHNnZlZ4dUlsMTkiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbmZ1bmN0aW9uIFBvaW50KHgsIHkpIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG59XG5cblBvaW50LnByb3RvdHlwZSA9IHtcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpOyB9LFxuXG4gICAgYWRkOiAgICAgZnVuY3Rpb24ocCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQocCk7ICAgICB9LFxuICAgIHN1YjogICAgIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKHApOyAgICAgfSxcbiAgICBtdWx0OiAgICBmdW5jdGlvbihrKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX211bHQoayk7ICAgIH0sXG4gICAgZGl2OiAgICAgZnVuY3Rpb24oaykgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXYoayk7ICAgICB9LFxuICAgIHJvdGF0ZTogIGZ1bmN0aW9uKGEpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlKGEpOyAgfSxcbiAgICBtYXRNdWx0OiBmdW5jdGlvbihtKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX21hdE11bHQobSk7IH0sXG4gICAgdW5pdDogICAgZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3VuaXQoKTsgfSxcbiAgICBwZXJwOiAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcGVycCgpOyB9LFxuICAgIHJvdW5kOiAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpOyB9LFxuXG4gICAgbWFnOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkpO1xuICAgIH0sXG5cbiAgICBlcXVhbHM6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueCA9PT0gcC54ICYmXG4gICAgICAgICAgICAgICB0aGlzLnkgPT09IHAueTtcbiAgICB9LFxuXG4gICAgZGlzdDogZnVuY3Rpb24ocCkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdFNxcihwKSk7XG4gICAgfSxcblxuICAgIGRpc3RTcXI6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdmFyIGR4ID0gcC54IC0gdGhpcy54LFxuICAgICAgICAgICAgZHkgPSBwLnkgLSB0aGlzLnk7XG4gICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICB9LFxuXG4gICAgYW5nbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5hdGFuMih0aGlzLnksIHRoaXMueCk7XG4gICAgfSxcblxuICAgIGFuZ2xlVG86IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIodGhpcy55IC0gYi55LCB0aGlzLnggLSBiLngpO1xuICAgIH0sXG5cbiAgICBhbmdsZVdpdGg6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5nbGVXaXRoU2VwKGIueCwgYi55KTtcbiAgICB9LFxuXG4gICAgLy8gRmluZCB0aGUgYW5nbGUgb2YgdGhlIHR3byB2ZWN0b3JzLCBzb2x2aW5nIHRoZSBmb3JtdWxhIGZvciB0aGUgY3Jvc3MgcHJvZHVjdCBhIHggYiA9IHxhfHxifHNpbijOuCkgZm9yIM64LlxuICAgIGFuZ2xlV2l0aFNlcDogZnVuY3Rpb24oeCwgeSkge1xuICAgICAgICByZXR1cm4gTWF0aC5hdGFuMihcbiAgICAgICAgICAgIHRoaXMueCAqIHkgLSB0aGlzLnkgKiB4LFxuICAgICAgICAgICAgdGhpcy54ICogeCArIHRoaXMueSAqIHkpO1xuICAgIH0sXG5cbiAgICBfbWF0TXVsdDogZnVuY3Rpb24obSkge1xuICAgICAgICB2YXIgeCA9IG1bMF0gKiB0aGlzLnggKyBtWzFdICogdGhpcy55LFxuICAgICAgICAgICAgeSA9IG1bMl0gKiB0aGlzLnggKyBtWzNdICogdGhpcy55O1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX2FkZDogZnVuY3Rpb24ocCkge1xuICAgICAgICB0aGlzLnggKz0gcC54O1xuICAgICAgICB0aGlzLnkgKz0gcC55O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3N1YjogZnVuY3Rpb24ocCkge1xuICAgICAgICB0aGlzLnggLT0gcC54O1xuICAgICAgICB0aGlzLnkgLT0gcC55O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX211bHQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgdGhpcy54ICo9IGs7XG4gICAgICAgIHRoaXMueSAqPSBrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX2RpdjogZnVuY3Rpb24oaykge1xuICAgICAgICB0aGlzLnggLz0gaztcbiAgICAgICAgdGhpcy55IC89IGs7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfdW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX2Rpdih0aGlzLm1hZygpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9wZXJwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XG4gICAgICAgIHRoaXMueSA9IHRoaXMueDtcbiAgICAgICAgdGhpcy54ID0gLXk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcm90YXRlOiBmdW5jdGlvbihhbmdsZSkge1xuICAgICAgICB2YXIgY29zID0gTWF0aC5jb3MoYW5nbGUpLFxuICAgICAgICAgICAgc2luID0gTWF0aC5zaW4oYW5nbGUpLFxuICAgICAgICAgICAgeCA9IGNvcyAqIHRoaXMueCAtIHNpbiAqIHRoaXMueSxcbiAgICAgICAgICAgIHkgPSBzaW4gKiB0aGlzLnggKyBjb3MgKiB0aGlzLnk7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcm91bmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnggPSBNYXRoLnJvdW5kKHRoaXMueCk7XG4gICAgICAgIHRoaXMueSA9IE1hdGgucm91bmQodGhpcy55KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcblxuLy8gY29uc3RydWN0cyBQb2ludCBmcm9tIGFuIGFycmF5IGlmIG5lY2Vzc2FyeVxuUG9pbnQuY29udmVydCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBQb2ludCkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChhWzBdLCBhWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGE7XG59O1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxucHJvY2Vzcy5uZXh0VGljayA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNhblNldEltbWVkaWF0ZSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgJiYgd2luZG93LnNldEltbWVkaWF0ZTtcbiAgICB2YXIgY2FuTXV0YXRpb25PYnNlcnZlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgJiYgd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgdmFyIGNhblBvc3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICYmIHdpbmRvdy5wb3N0TWVzc2FnZSAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lclxuICAgIDtcblxuICAgIGlmIChjYW5TZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmKSB7IHJldHVybiB3aW5kb3cuc2V0SW1tZWRpYXRlKGYpIH07XG4gICAgfVxuXG4gICAgdmFyIHF1ZXVlID0gW107XG5cbiAgICBpZiAoY2FuTXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgICB2YXIgaGlkZGVuRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHF1ZXVlTGlzdCA9IHF1ZXVlLnNsaWNlKCk7XG4gICAgICAgICAgICBxdWV1ZS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgcXVldWVMaXN0LmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGhpZGRlbkRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0VGljayhmbikge1xuICAgICAgICAgICAgaWYgKCFxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBoaWRkZW5EaXYuc2V0QXR0cmlidXRlKCd5ZXMnLCAnbm8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXVlLnB1c2goZm4pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjYW5Qb3N0KSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICB2YXIgc291cmNlID0gZXYuc291cmNlO1xuICAgICAgICAgICAgaWYgKChzb3VyY2UgPT09IHdpbmRvdyB8fCBzb3VyY2UgPT09IG51bGwpICYmIGV2LmRhdGEgPT09ICdwcm9jZXNzLXRpY2snKSB7XG4gICAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0VGljayhmbikge1xuICAgICAgICAgICAgcXVldWUucHVzaChmbik7XG4gICAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoJ3Byb2Nlc3MtdGljaycsICcqJyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHRUaWNrKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG59KSgpO1xuXG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbi8vIFRPRE8oc2h0eWxtYW4pXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbiIsIi8qIVxuICogc3RyaXAtY29tbWVudHMgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L3N0cmlwLWNvbW1lbnRzPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBKb24gU2NobGlua2VydCwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWMnO1xuXG52YXIgcmVCbG9jayA9ICdcXFxcL1xcXFwqJztcbnZhciByZUJsb2NrSWdub3JlID0gJ1xcXFwvXFxcXCooPyFcXFxcKj9cXFxcISknO1xudmFyIHJlQmxvY2tFbmQgPSAnKC58W1xcXFxyXFxcXG5dfFxcXFxuKSo/XFxcXCpcXFxcL1xcXFxuP1xcXFxuPyc7XG52YXIgcmVMaW5lID0gLyhefFteXFxTXFxuXSkoPzpcXC9cXC8pKFtcXHNcXFNdKz8pJC9nbTtcbnZhciByZUxpbmVJZ25vcmUgPSAvKF58W15cXFNcXG5dKSg/OlxcL1xcL1teIV0pKFtcXHNcXFNdKz8pJC9nbTtcblxuXG4vKipcbiAqIFN0cmlwIGFsbCBjb21tZW50c1xuICpcbiAqIHslPSBkb2NzKFwic3RyaXBcIikgJX1cbiAqXG4gKiBAcGFyYW0gICB7U3RyaW5nfSBgc3RyYCAgZmlsZSBjb250ZW50cyBvciBzdHJpbmcgdG8gc3RyaXAuXG4gKiBAcGFyYW0gICB7T2JqZWN0fSBgb3B0c2AgIG9wdGlvbnMgYXJlIHBhc3NlZCB0byBgLmJsb2NrYCwgYW5kIGAubGluZWBcbiAqIEByZXR1cm4gIHtTdHJpbmd9IFN0cmluZyB3aXRob3V0IGNvbW1lbnRzLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG52YXIgc3RyaXAgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHN0ciwgb3B0cykge1xuICByZXR1cm4gc3RyID8gc3RyaXAuYmxvY2soc3RyaXAubGluZShzdHIsIG9wdHMpLCBvcHRzKSA6ICcnO1xufTtcblxuXG4vKipcbiAqIFN0cmlwIG9ubHkgYmxvY2sgY29tbWVudHMsIG9wdGlvbmFsbHkgbGVhdmluZyBwcm90ZWN0ZWQgY29tbWVudHNcbiAqIChlLmcuIGAvKiFgKSBpbnRhY3QuXG4gKlxuICogeyU9IGRvY3MoXCJibG9ja1wiKSAlfVxuICpcbiAqIEBwYXJhbSAgIHtTdHJpbmd9IGBzdHJgICBmaWxlIGNvbnRlbnQgb3Igc3RyaW5nIHRvIHN0cmlwIHRvXG4gKiBAcGFyYW0gICB7T2JqZWN0fSBgb3B0c2AgIGlmIGBzYWZlOnRydWVgLCBzdHJpcCBvbmx5IGNvbW1lbnRzIHRoYXQgZG8gbm90IHN0YXJ0IHdpdGggYC8qIWAgb3IgYC8qKiFgXG4gKiBAcmV0dXJuICB7U3RyaW5nfSBTdHJpbmcgd2l0aG91dCBibG9jayBjb21tZW50cy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuc3RyaXAuYmxvY2sgPSBmdW5jdGlvbihzdHIsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIHZhciByZSA9IG5ldyBSZWdFeHAocmVCbG9jayArIHJlQmxvY2tFbmQsICdnbScpO1xuICBpZihvcHRzLnNhZmUpIHtcbiAgICByZSA9IG5ldyBSZWdFeHAocmVCbG9ja0lnbm9yZSArIHJlQmxvY2tFbmQsICdnbScpO1xuICB9XG4gIHJldHVybiBzdHIgPyBzdHIucmVwbGFjZShyZSwgJycpIDogJyc7XG59O1xuXG5cbi8qKlxuICogU3RyaXAgb25seSBsaW5lIGNvbW1lbnRzXG4gKlxuICogeyU9IGRvY3MoXCJsaW5lXCIpICV9XG4gKlxuICogQHBhcmFtICAge1N0cmluZ30gYHN0cmAgIGZpbGUgY29udGVudCBvciBzdHJpbmcgdG8gc3RyaXAgdG9cbiAqIEBwYXJhbSAgIHtPYmplY3R9IGBvcHRzYCAgaWYgYHNhZmU6dHJ1ZWAsIHN0cmlwIGFsbCB0aGF0IG5vdCBzdGFydHMgd2l0aCBgLy8hYFxuICogQHJldHVybiAge1N0cmluZ30gU3RyaW5nIHdpdGhvdXQgbGluZSBjb21tZW50cy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuc3RyaXAubGluZSA9IGZ1bmN0aW9uKHN0ciwgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdmFyIHJlID0gcmVMaW5lO1xuICBpZihvcHRzLnNhZmUpIHtcbiAgICByZSA9IHJlTGluZUlnbm9yZTtcbiAgfVxuICByZXR1cm4gc3RyID8gc3RyLnJlcGxhY2UocmUsICcnKSA6ICcnO1xufTtcbiIsIiFmdW5jdGlvbigpIHtcbiAgdmFyIHRvcG9qc29uID0ge1xuICAgIHZlcnNpb246IFwiMS42LjE5XCIsXG4gICAgbWVzaDogZnVuY3Rpb24odG9wb2xvZ3kpIHsgcmV0dXJuIG9iamVjdCh0b3BvbG9neSwgbWVzaEFyY3MuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7IH0sXG4gICAgbWVzaEFyY3M6IG1lc2hBcmNzLFxuICAgIG1lcmdlOiBmdW5jdGlvbih0b3BvbG9neSkgeyByZXR1cm4gb2JqZWN0KHRvcG9sb2d5LCBtZXJnZUFyY3MuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7IH0sXG4gICAgbWVyZ2VBcmNzOiBtZXJnZUFyY3MsXG4gICAgZmVhdHVyZTogZmVhdHVyZU9yQ29sbGVjdGlvbixcbiAgICBuZWlnaGJvcnM6IG5laWdoYm9ycyxcbiAgICBwcmVzaW1wbGlmeTogcHJlc2ltcGxpZnlcbiAgfTtcblxuICBmdW5jdGlvbiBzdGl0Y2hBcmNzKHRvcG9sb2d5LCBhcmNzKSB7XG4gICAgdmFyIHN0aXRjaGVkQXJjcyA9IHt9LFxuICAgICAgICBmcmFnbWVudEJ5U3RhcnQgPSB7fSxcbiAgICAgICAgZnJhZ21lbnRCeUVuZCA9IHt9LFxuICAgICAgICBmcmFnbWVudHMgPSBbXSxcbiAgICAgICAgZW1wdHlJbmRleCA9IC0xO1xuXG4gICAgLy8gU3RpdGNoIGVtcHR5IGFyY3MgZmlyc3QsIHNpbmNlIHRoZXkgbWF5IGJlIHN1YnN1bWVkIGJ5IG90aGVyIGFyY3MuXG4gICAgYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKGksIGopIHtcbiAgICAgIHZhciBhcmMgPSB0b3BvbG9neS5hcmNzW2kgPCAwID8gfmkgOiBpXSwgdDtcbiAgICAgIGlmIChhcmMubGVuZ3RoIDwgMyAmJiAhYXJjWzFdWzBdICYmICFhcmNbMV1bMV0pIHtcbiAgICAgICAgdCA9IGFyY3NbKytlbXB0eUluZGV4XSwgYXJjc1tlbXB0eUluZGV4XSA9IGksIGFyY3Nbal0gPSB0O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgIHZhciBlID0gZW5kcyhpKSxcbiAgICAgICAgICBzdGFydCA9IGVbMF0sXG4gICAgICAgICAgZW5kID0gZVsxXSxcbiAgICAgICAgICBmLCBnO1xuXG4gICAgICBpZiAoZiA9IGZyYWdtZW50QnlFbmRbc3RhcnRdKSB7XG4gICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5RW5kW2YuZW5kXTtcbiAgICAgICAgZi5wdXNoKGkpO1xuICAgICAgICBmLmVuZCA9IGVuZDtcbiAgICAgICAgaWYgKGcgPSBmcmFnbWVudEJ5U3RhcnRbZW5kXSkge1xuICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5U3RhcnRbZy5zdGFydF07XG4gICAgICAgICAgdmFyIGZnID0gZyA9PT0gZiA/IGYgOiBmLmNvbmNhdChnKTtcbiAgICAgICAgICBmcmFnbWVudEJ5U3RhcnRbZmcuc3RhcnQgPSBmLnN0YXJ0XSA9IGZyYWdtZW50QnlFbmRbZmcuZW5kID0gZy5lbmRdID0gZmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnJhZ21lbnRCeVN0YXJ0W2Yuc3RhcnRdID0gZnJhZ21lbnRCeUVuZFtmLmVuZF0gPSBmO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGYgPSBmcmFnbWVudEJ5U3RhcnRbZW5kXSkge1xuICAgICAgICBkZWxldGUgZnJhZ21lbnRCeVN0YXJ0W2Yuc3RhcnRdO1xuICAgICAgICBmLnVuc2hpZnQoaSk7XG4gICAgICAgIGYuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgaWYgKGcgPSBmcmFnbWVudEJ5RW5kW3N0YXJ0XSkge1xuICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5RW5kW2cuZW5kXTtcbiAgICAgICAgICB2YXIgZ2YgPSBnID09PSBmID8gZiA6IGcuY29uY2F0KGYpO1xuICAgICAgICAgIGZyYWdtZW50QnlTdGFydFtnZi5zdGFydCA9IGcuc3RhcnRdID0gZnJhZ21lbnRCeUVuZFtnZi5lbmQgPSBmLmVuZF0gPSBnZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcmFnbWVudEJ5U3RhcnRbZi5zdGFydF0gPSBmcmFnbWVudEJ5RW5kW2YuZW5kXSA9IGY7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGYgPSBbaV07XG4gICAgICAgIGZyYWdtZW50QnlTdGFydFtmLnN0YXJ0ID0gc3RhcnRdID0gZnJhZ21lbnRCeUVuZFtmLmVuZCA9IGVuZF0gPSBmO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gZW5kcyhpKSB7XG4gICAgICB2YXIgYXJjID0gdG9wb2xvZ3kuYXJjc1tpIDwgMCA/IH5pIDogaV0sIHAwID0gYXJjWzBdLCBwMTtcbiAgICAgIGlmICh0b3BvbG9neS50cmFuc2Zvcm0pIHAxID0gWzAsIDBdLCBhcmMuZm9yRWFjaChmdW5jdGlvbihkcCkgeyBwMVswXSArPSBkcFswXSwgcDFbMV0gKz0gZHBbMV07IH0pO1xuICAgICAgZWxzZSBwMSA9IGFyY1thcmMubGVuZ3RoIC0gMV07XG4gICAgICByZXR1cm4gaSA8IDAgPyBbcDEsIHAwXSA6IFtwMCwgcDFdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZsdXNoKGZyYWdtZW50QnlFbmQsIGZyYWdtZW50QnlTdGFydCkge1xuICAgICAgZm9yICh2YXIgayBpbiBmcmFnbWVudEJ5RW5kKSB7XG4gICAgICAgIHZhciBmID0gZnJhZ21lbnRCeUVuZFtrXTtcbiAgICAgICAgZGVsZXRlIGZyYWdtZW50QnlTdGFydFtmLnN0YXJ0XTtcbiAgICAgICAgZGVsZXRlIGYuc3RhcnQ7XG4gICAgICAgIGRlbGV0ZSBmLmVuZDtcbiAgICAgICAgZi5mb3JFYWNoKGZ1bmN0aW9uKGkpIHsgc3RpdGNoZWRBcmNzW2kgPCAwID8gfmkgOiBpXSA9IDE7IH0pO1xuICAgICAgICBmcmFnbWVudHMucHVzaChmKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbHVzaChmcmFnbWVudEJ5RW5kLCBmcmFnbWVudEJ5U3RhcnQpO1xuICAgIGZsdXNoKGZyYWdtZW50QnlTdGFydCwgZnJhZ21lbnRCeUVuZCk7XG4gICAgYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKGkpIHsgaWYgKCFzdGl0Y2hlZEFyY3NbaSA8IDAgPyB+aSA6IGldKSBmcmFnbWVudHMucHVzaChbaV0pOyB9KTtcblxuICAgIHJldHVybiBmcmFnbWVudHM7XG4gIH1cblxuICBmdW5jdGlvbiBtZXNoQXJjcyh0b3BvbG9neSwgbywgZmlsdGVyKSB7XG4gICAgdmFyIGFyY3MgPSBbXTtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGdlb21zQnlBcmMgPSBbXSxcbiAgICAgICAgICBnZW9tO1xuXG4gICAgICBmdW5jdGlvbiBhcmMoaSkge1xuICAgICAgICB2YXIgaiA9IGkgPCAwID8gfmkgOiBpO1xuICAgICAgICAoZ2VvbXNCeUFyY1tqXSB8fCAoZ2VvbXNCeUFyY1tqXSA9IFtdKSkucHVzaCh7aTogaSwgZzogZ2VvbX0pO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBsaW5lKGFyY3MpIHtcbiAgICAgICAgYXJjcy5mb3JFYWNoKGFyYyk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHBvbHlnb24oYXJjcykge1xuICAgICAgICBhcmNzLmZvckVhY2gobGluZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGdlb21ldHJ5KG8pIHtcbiAgICAgICAgaWYgKG8udHlwZSA9PT0gXCJHZW9tZXRyeUNvbGxlY3Rpb25cIikgby5nZW9tZXRyaWVzLmZvckVhY2goZ2VvbWV0cnkpO1xuICAgICAgICBlbHNlIGlmIChvLnR5cGUgaW4gZ2VvbWV0cnlUeXBlKSBnZW9tID0gbywgZ2VvbWV0cnlUeXBlW28udHlwZV0oby5hcmNzKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGdlb21ldHJ5VHlwZSA9IHtcbiAgICAgICAgTGluZVN0cmluZzogbGluZSxcbiAgICAgICAgTXVsdGlMaW5lU3RyaW5nOiBwb2x5Z29uLFxuICAgICAgICBQb2x5Z29uOiBwb2x5Z29uLFxuICAgICAgICBNdWx0aVBvbHlnb246IGZ1bmN0aW9uKGFyY3MpIHsgYXJjcy5mb3JFYWNoKHBvbHlnb24pOyB9XG4gICAgICB9O1xuXG4gICAgICBnZW9tZXRyeShvKTtcblxuICAgICAgZ2VvbXNCeUFyYy5mb3JFYWNoKGFyZ3VtZW50cy5sZW5ndGggPCAzXG4gICAgICAgICAgPyBmdW5jdGlvbihnZW9tcykgeyBhcmNzLnB1c2goZ2VvbXNbMF0uaSk7IH1cbiAgICAgICAgICA6IGZ1bmN0aW9uKGdlb21zKSB7IGlmIChmaWx0ZXIoZ2VvbXNbMF0uZywgZ2VvbXNbZ2VvbXMubGVuZ3RoIC0gMV0uZykpIGFyY3MucHVzaChnZW9tc1swXS5pKTsgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdG9wb2xvZ3kuYXJjcy5sZW5ndGg7IGkgPCBuOyArK2kpIGFyY3MucHVzaChpKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge3R5cGU6IFwiTXVsdGlMaW5lU3RyaW5nXCIsIGFyY3M6IHN0aXRjaEFyY3ModG9wb2xvZ3ksIGFyY3MpfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlQXJjcyh0b3BvbG9neSwgb2JqZWN0cykge1xuICAgIHZhciBwb2x5Z29uc0J5QXJjID0ge30sXG4gICAgICAgIHBvbHlnb25zID0gW10sXG4gICAgICAgIGNvbXBvbmVudHMgPSBbXTtcblxuICAgIG9iamVjdHMuZm9yRWFjaChmdW5jdGlvbihvKSB7XG4gICAgICBpZiAoby50eXBlID09PSBcIlBvbHlnb25cIikgcmVnaXN0ZXIoby5hcmNzKTtcbiAgICAgIGVsc2UgaWYgKG8udHlwZSA9PT0gXCJNdWx0aVBvbHlnb25cIikgby5hcmNzLmZvckVhY2gocmVnaXN0ZXIpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gcmVnaXN0ZXIocG9seWdvbikge1xuICAgICAgcG9seWdvbi5mb3JFYWNoKGZ1bmN0aW9uKHJpbmcpIHtcbiAgICAgICAgcmluZy5mb3JFYWNoKGZ1bmN0aW9uKGFyYykge1xuICAgICAgICAgIChwb2x5Z29uc0J5QXJjW2FyYyA9IGFyYyA8IDAgPyB+YXJjIDogYXJjXSB8fCAocG9seWdvbnNCeUFyY1thcmNdID0gW10pKS5wdXNoKHBvbHlnb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcG9seWdvbnMucHVzaChwb2x5Z29uKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlcmlvcihyaW5nKSB7XG4gICAgICByZXR1cm4gY2FydGVzaWFuUmluZ0FyZWEob2JqZWN0KHRvcG9sb2d5LCB7dHlwZTogXCJQb2x5Z29uXCIsIGFyY3M6IFtyaW5nXX0pLmNvb3JkaW5hdGVzWzBdKSA+IDA7IC8vIFRPRE8gYWxsb3cgc3BoZXJpY2FsP1xuICAgIH1cblxuICAgIHBvbHlnb25zLmZvckVhY2goZnVuY3Rpb24ocG9seWdvbikge1xuICAgICAgaWYgKCFwb2x5Z29uLl8pIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudCA9IFtdLFxuICAgICAgICAgICAgbmVpZ2hib3JzID0gW3BvbHlnb25dO1xuICAgICAgICBwb2x5Z29uLl8gPSAxO1xuICAgICAgICBjb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbiAgICAgICAgd2hpbGUgKHBvbHlnb24gPSBuZWlnaGJvcnMucG9wKCkpIHtcbiAgICAgICAgICBjb21wb25lbnQucHVzaChwb2x5Z29uKTtcbiAgICAgICAgICBwb2x5Z29uLmZvckVhY2goZnVuY3Rpb24ocmluZykge1xuICAgICAgICAgICAgcmluZy5mb3JFYWNoKGZ1bmN0aW9uKGFyYykge1xuICAgICAgICAgICAgICBwb2x5Z29uc0J5QXJjW2FyYyA8IDAgPyB+YXJjIDogYXJjXS5mb3JFYWNoKGZ1bmN0aW9uKHBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXBvbHlnb24uXykge1xuICAgICAgICAgICAgICAgICAgcG9seWdvbi5fID0gMTtcbiAgICAgICAgICAgICAgICAgIG5laWdoYm9ycy5wdXNoKHBvbHlnb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcG9seWdvbnMuZm9yRWFjaChmdW5jdGlvbihwb2x5Z29uKSB7XG4gICAgICBkZWxldGUgcG9seWdvbi5fO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiTXVsdGlQb2x5Z29uXCIsXG4gICAgICBhcmNzOiBjb21wb25lbnRzLm1hcChmdW5jdGlvbihwb2x5Z29ucykge1xuICAgICAgICB2YXIgYXJjcyA9IFtdO1xuXG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIGV4dGVyaW9yICh1bmlxdWUpIGFyY3MuXG4gICAgICAgIHBvbHlnb25zLmZvckVhY2goZnVuY3Rpb24ocG9seWdvbikge1xuICAgICAgICAgIHBvbHlnb24uZm9yRWFjaChmdW5jdGlvbihyaW5nKSB7XG4gICAgICAgICAgICByaW5nLmZvckVhY2goZnVuY3Rpb24oYXJjKSB7XG4gICAgICAgICAgICAgIGlmIChwb2x5Z29uc0J5QXJjW2FyYyA8IDAgPyB+YXJjIDogYXJjXS5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgYXJjcy5wdXNoKGFyYyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTdGl0Y2ggdGhlIGFyY3MgaW50byBvbmUgb3IgbW9yZSByaW5ncy5cbiAgICAgICAgYXJjcyA9IHN0aXRjaEFyY3ModG9wb2xvZ3ksIGFyY3MpO1xuXG4gICAgICAgIC8vIElmIG1vcmUgdGhhbiBvbmUgcmluZyBpcyByZXR1cm5lZCxcbiAgICAgICAgLy8gYXQgbW9zdCBvbmUgb2YgdGhlc2UgcmluZ3MgY2FuIGJlIHRoZSBleHRlcmlvcjtcbiAgICAgICAgLy8gdGhpcyBleHRlcmlvciByaW5nIGhhcyB0aGUgc2FtZSB3aW5kaW5nIG9yZGVyXG4gICAgICAgIC8vIGFzIGFueSBleHRlcmlvciByaW5nIGluIHRoZSBvcmlnaW5hbCBwb2x5Z29ucy5cbiAgICAgICAgaWYgKChuID0gYXJjcy5sZW5ndGgpID4gMSkge1xuICAgICAgICAgIHZhciBzZ24gPSBleHRlcmlvcihwb2x5Z29uc1swXVswXSk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHQ7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChzZ24gPT09IGV4dGVyaW9yKGFyY3NbaV0pKSB7XG4gICAgICAgICAgICAgIHQgPSBhcmNzWzBdLCBhcmNzWzBdID0gYXJjc1tpXSwgYXJjc1tpXSA9IHQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcmNzO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZmVhdHVyZU9yQ29sbGVjdGlvbih0b3BvbG9neSwgbykge1xuICAgIHJldHVybiBvLnR5cGUgPT09IFwiR2VvbWV0cnlDb2xsZWN0aW9uXCIgPyB7XG4gICAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXG4gICAgICBmZWF0dXJlczogby5nZW9tZXRyaWVzLm1hcChmdW5jdGlvbihvKSB7IHJldHVybiBmZWF0dXJlKHRvcG9sb2d5LCBvKTsgfSlcbiAgICB9IDogZmVhdHVyZSh0b3BvbG9neSwgbyk7XG4gIH1cblxuICBmdW5jdGlvbiBmZWF0dXJlKHRvcG9sb2d5LCBvKSB7XG4gICAgdmFyIGYgPSB7XG4gICAgICB0eXBlOiBcIkZlYXR1cmVcIixcbiAgICAgIGlkOiBvLmlkLFxuICAgICAgcHJvcGVydGllczogby5wcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgZ2VvbWV0cnk6IG9iamVjdCh0b3BvbG9neSwgbylcbiAgICB9O1xuICAgIGlmIChvLmlkID09IG51bGwpIGRlbGV0ZSBmLmlkO1xuICAgIHJldHVybiBmO1xuICB9XG5cbiAgZnVuY3Rpb24gb2JqZWN0KHRvcG9sb2d5LCBvKSB7XG4gICAgdmFyIGFic29sdXRlID0gdHJhbnNmb3JtQWJzb2x1dGUodG9wb2xvZ3kudHJhbnNmb3JtKSxcbiAgICAgICAgYXJjcyA9IHRvcG9sb2d5LmFyY3M7XG5cbiAgICBmdW5jdGlvbiBhcmMoaSwgcG9pbnRzKSB7XG4gICAgICBpZiAocG9pbnRzLmxlbmd0aCkgcG9pbnRzLnBvcCgpO1xuICAgICAgZm9yICh2YXIgYSA9IGFyY3NbaSA8IDAgPyB+aSA6IGldLCBrID0gMCwgbiA9IGEubGVuZ3RoLCBwOyBrIDwgbjsgKytrKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHAgPSBhW2tdLnNsaWNlKCkpO1xuICAgICAgICBhYnNvbHV0ZShwLCBrKTtcbiAgICAgIH1cbiAgICAgIGlmIChpIDwgMCkgcmV2ZXJzZShwb2ludHMsIG4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvaW50KHApIHtcbiAgICAgIHAgPSBwLnNsaWNlKCk7XG4gICAgICBhYnNvbHV0ZShwLCAwKTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmUoYXJjcykge1xuICAgICAgdmFyIHBvaW50cyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcmNzLmxlbmd0aDsgaSA8IG47ICsraSkgYXJjKGFyY3NbaV0sIHBvaW50cyk7XG4gICAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDIpIHBvaW50cy5wdXNoKHBvaW50c1swXS5zbGljZSgpKTtcbiAgICAgIHJldHVybiBwb2ludHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmluZyhhcmNzKSB7XG4gICAgICB2YXIgcG9pbnRzID0gbGluZShhcmNzKTtcbiAgICAgIHdoaWxlIChwb2ludHMubGVuZ3RoIDwgNCkgcG9pbnRzLnB1c2gocG9pbnRzWzBdLnNsaWNlKCkpO1xuICAgICAgcmV0dXJuIHBvaW50cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb2x5Z29uKGFyY3MpIHtcbiAgICAgIHJldHVybiBhcmNzLm1hcChyaW5nKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZW9tZXRyeShvKSB7XG4gICAgICB2YXIgdCA9IG8udHlwZTtcbiAgICAgIHJldHVybiB0ID09PSBcIkdlb21ldHJ5Q29sbGVjdGlvblwiID8ge3R5cGU6IHQsIGdlb21ldHJpZXM6IG8uZ2VvbWV0cmllcy5tYXAoZ2VvbWV0cnkpfVxuICAgICAgICAgIDogdCBpbiBnZW9tZXRyeVR5cGUgPyB7dHlwZTogdCwgY29vcmRpbmF0ZXM6IGdlb21ldHJ5VHlwZVt0XShvKX1cbiAgICAgICAgICA6IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGdlb21ldHJ5VHlwZSA9IHtcbiAgICAgIFBvaW50OiBmdW5jdGlvbihvKSB7IHJldHVybiBwb2ludChvLmNvb3JkaW5hdGVzKTsgfSxcbiAgICAgIE11bHRpUG9pbnQ6IGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uY29vcmRpbmF0ZXMubWFwKHBvaW50KTsgfSxcbiAgICAgIExpbmVTdHJpbmc6IGZ1bmN0aW9uKG8pIHsgcmV0dXJuIGxpbmUoby5hcmNzKTsgfSxcbiAgICAgIE11bHRpTGluZVN0cmluZzogZnVuY3Rpb24obykgeyByZXR1cm4gby5hcmNzLm1hcChsaW5lKTsgfSxcbiAgICAgIFBvbHlnb246IGZ1bmN0aW9uKG8pIHsgcmV0dXJuIHBvbHlnb24oby5hcmNzKTsgfSxcbiAgICAgIE11bHRpUG9seWdvbjogZnVuY3Rpb24obykgeyByZXR1cm4gby5hcmNzLm1hcChwb2x5Z29uKTsgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZ2VvbWV0cnkobyk7XG4gIH1cblxuICBmdW5jdGlvbiByZXZlcnNlKGFycmF5LCBuKSB7XG4gICAgdmFyIHQsIGogPSBhcnJheS5sZW5ndGgsIGkgPSBqIC0gbjsgd2hpbGUgKGkgPCAtLWopIHQgPSBhcnJheVtpXSwgYXJyYXlbaSsrXSA9IGFycmF5W2pdLCBhcnJheVtqXSA9IHQ7XG4gIH1cblxuICBmdW5jdGlvbiBiaXNlY3QoYSwgeCkge1xuICAgIHZhciBsbyA9IDAsIGhpID0gYS5sZW5ndGg7XG4gICAgd2hpbGUgKGxvIDwgaGkpIHtcbiAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgaWYgKGFbbWlkXSA8IHgpIGxvID0gbWlkICsgMTtcbiAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsbztcbiAgfVxuXG4gIGZ1bmN0aW9uIG5laWdoYm9ycyhvYmplY3RzKSB7XG4gICAgdmFyIGluZGV4ZXNCeUFyYyA9IHt9LCAvLyBhcmMgaW5kZXggLT4gYXJyYXkgb2Ygb2JqZWN0IGluZGV4ZXNcbiAgICAgICAgbmVpZ2hib3JzID0gb2JqZWN0cy5tYXAoZnVuY3Rpb24oKSB7IHJldHVybiBbXTsgfSk7XG5cbiAgICBmdW5jdGlvbiBsaW5lKGFyY3MsIGkpIHtcbiAgICAgIGFyY3MuZm9yRWFjaChmdW5jdGlvbihhKSB7XG4gICAgICAgIGlmIChhIDwgMCkgYSA9IH5hO1xuICAgICAgICB2YXIgbyA9IGluZGV4ZXNCeUFyY1thXTtcbiAgICAgICAgaWYgKG8pIG8ucHVzaChpKTtcbiAgICAgICAgZWxzZSBpbmRleGVzQnlBcmNbYV0gPSBbaV07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb2x5Z29uKGFyY3MsIGkpIHtcbiAgICAgIGFyY3MuZm9yRWFjaChmdW5jdGlvbihhcmMpIHsgbGluZShhcmMsIGkpOyB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZW9tZXRyeShvLCBpKSB7XG4gICAgICBpZiAoby50eXBlID09PSBcIkdlb21ldHJ5Q29sbGVjdGlvblwiKSBvLmdlb21ldHJpZXMuZm9yRWFjaChmdW5jdGlvbihvKSB7IGdlb21ldHJ5KG8sIGkpOyB9KTtcbiAgICAgIGVsc2UgaWYgKG8udHlwZSBpbiBnZW9tZXRyeVR5cGUpIGdlb21ldHJ5VHlwZVtvLnR5cGVdKG8uYXJjcywgaSk7XG4gICAgfVxuXG4gICAgdmFyIGdlb21ldHJ5VHlwZSA9IHtcbiAgICAgIExpbmVTdHJpbmc6IGxpbmUsXG4gICAgICBNdWx0aUxpbmVTdHJpbmc6IHBvbHlnb24sXG4gICAgICBQb2x5Z29uOiBwb2x5Z29uLFxuICAgICAgTXVsdGlQb2x5Z29uOiBmdW5jdGlvbihhcmNzLCBpKSB7IGFyY3MuZm9yRWFjaChmdW5jdGlvbihhcmMpIHsgcG9seWdvbihhcmMsIGkpOyB9KTsgfVxuICAgIH07XG5cbiAgICBvYmplY3RzLmZvckVhY2goZ2VvbWV0cnkpO1xuXG4gICAgZm9yICh2YXIgaSBpbiBpbmRleGVzQnlBcmMpIHtcbiAgICAgIGZvciAodmFyIGluZGV4ZXMgPSBpbmRleGVzQnlBcmNbaV0sIG0gPSBpbmRleGVzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICAgICAgZm9yICh2YXIgayA9IGogKyAxOyBrIDwgbTsgKytrKSB7XG4gICAgICAgICAgdmFyIGlqID0gaW5kZXhlc1tqXSwgaWsgPSBpbmRleGVzW2tdLCBuO1xuICAgICAgICAgIGlmICgobiA9IG5laWdoYm9yc1tpal0pW2kgPSBiaXNlY3QobiwgaWspXSAhPT0gaWspIG4uc3BsaWNlKGksIDAsIGlrKTtcbiAgICAgICAgICBpZiAoKG4gPSBuZWlnaGJvcnNbaWtdKVtpID0gYmlzZWN0KG4sIGlqKV0gIT09IGlqKSBuLnNwbGljZShpLCAwLCBpaik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmVpZ2hib3JzO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlc2ltcGxpZnkodG9wb2xvZ3ksIHRyaWFuZ2xlQXJlYSkge1xuICAgIHZhciBhYnNvbHV0ZSA9IHRyYW5zZm9ybUFic29sdXRlKHRvcG9sb2d5LnRyYW5zZm9ybSksXG4gICAgICAgIHJlbGF0aXZlID0gdHJhbnNmb3JtUmVsYXRpdmUodG9wb2xvZ3kudHJhbnNmb3JtKSxcbiAgICAgICAgaGVhcCA9IG1pbkFyZWFIZWFwKCk7XG5cbiAgICBpZiAoIXRyaWFuZ2xlQXJlYSkgdHJpYW5nbGVBcmVhID0gY2FydGVzaWFuVHJpYW5nbGVBcmVhO1xuXG4gICAgdG9wb2xvZ3kuYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKGFyYykge1xuICAgICAgdmFyIHRyaWFuZ2xlcyA9IFtdLFxuICAgICAgICAgIG1heEFyZWEgPSAwLFxuICAgICAgICAgIHRyaWFuZ2xlO1xuXG4gICAgICAvLyBUbyBzdG9yZSBlYWNoIHBvaW504oCZcyBlZmZlY3RpdmUgYXJlYSwgd2UgY3JlYXRlIGEgbmV3IGFycmF5IHJhdGhlciB0aGFuXG4gICAgICAvLyBleHRlbmRpbmcgdGhlIHBhc3NlZC1pbiBwb2ludCB0byB3b3JrYXJvdW5kIGEgQ2hyb21lL1Y4IGJ1ZyAoZ2V0dGluZ1xuICAgICAgLy8gc3R1Y2sgaW4gc21pIG1vZGUpLiBGb3IgbWlkcG9pbnRzLCB0aGUgaW5pdGlhbCBlZmZlY3RpdmUgYXJlYSBvZlxuICAgICAgLy8gSW5maW5pdHkgd2lsbCBiZSBjb21wdXRlZCBpbiB0aGUgbmV4dCBzdGVwLlxuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcmMubGVuZ3RoLCBwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIHAgPSBhcmNbaV07XG4gICAgICAgIGFic29sdXRlKGFyY1tpXSA9IFtwWzBdLCBwWzFdLCBJbmZpbml0eV0sIGkpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMSwgbiA9IGFyYy5sZW5ndGggLSAxOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIHRyaWFuZ2xlID0gYXJjLnNsaWNlKGkgLSAxLCBpICsgMik7XG4gICAgICAgIHRyaWFuZ2xlWzFdWzJdID0gdHJpYW5nbGVBcmVhKHRyaWFuZ2xlKTtcbiAgICAgICAgdHJpYW5nbGVzLnB1c2godHJpYW5nbGUpO1xuICAgICAgICBoZWFwLnB1c2godHJpYW5nbGUpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRyaWFuZ2xlcy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgdHJpYW5nbGUgPSB0cmlhbmdsZXNbaV07XG4gICAgICAgIHRyaWFuZ2xlLnByZXZpb3VzID0gdHJpYW5nbGVzW2kgLSAxXTtcbiAgICAgICAgdHJpYW5nbGUubmV4dCA9IHRyaWFuZ2xlc1tpICsgMV07XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICh0cmlhbmdsZSA9IGhlYXAucG9wKCkpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzID0gdHJpYW5nbGUucHJldmlvdXMsXG4gICAgICAgICAgICBuZXh0ID0gdHJpYW5nbGUubmV4dDtcblxuICAgICAgICAvLyBJZiB0aGUgYXJlYSBvZiB0aGUgY3VycmVudCBwb2ludCBpcyBsZXNzIHRoYW4gdGhhdCBvZiB0aGUgcHJldmlvdXMgcG9pbnRcbiAgICAgICAgLy8gdG8gYmUgZWxpbWluYXRlZCwgdXNlIHRoZSBsYXR0ZXIncyBhcmVhIGluc3RlYWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZVxuICAgICAgICAvLyBjdXJyZW50IHBvaW50IGNhbm5vdCBiZSBlbGltaW5hdGVkIHdpdGhvdXQgZWxpbWluYXRpbmcgcHJldmlvdXNseS1cbiAgICAgICAgLy8gZWxpbWluYXRlZCBwb2ludHMuXG4gICAgICAgIGlmICh0cmlhbmdsZVsxXVsyXSA8IG1heEFyZWEpIHRyaWFuZ2xlWzFdWzJdID0gbWF4QXJlYTtcbiAgICAgICAgZWxzZSBtYXhBcmVhID0gdHJpYW5nbGVbMV1bMl07XG5cbiAgICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgICAgcHJldmlvdXMubmV4dCA9IG5leHQ7XG4gICAgICAgICAgcHJldmlvdXNbMl0gPSB0cmlhbmdsZVsyXTtcbiAgICAgICAgICB1cGRhdGUocHJldmlvdXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICBuZXh0LnByZXZpb3VzID0gcHJldmlvdXM7XG4gICAgICAgICAgbmV4dFswXSA9IHRyaWFuZ2xlWzBdO1xuICAgICAgICAgIHVwZGF0ZShuZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhcmMuZm9yRWFjaChyZWxhdGl2ZSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUodHJpYW5nbGUpIHtcbiAgICAgIGhlYXAucmVtb3ZlKHRyaWFuZ2xlKTtcbiAgICAgIHRyaWFuZ2xlWzFdWzJdID0gdHJpYW5nbGVBcmVhKHRyaWFuZ2xlKTtcbiAgICAgIGhlYXAucHVzaCh0cmlhbmdsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvcG9sb2d5O1xuICB9O1xuXG4gIGZ1bmN0aW9uIGNhcnRlc2lhblJpbmdBcmVhKHJpbmcpIHtcbiAgICB2YXIgaSA9IC0xLFxuICAgICAgICBuID0gcmluZy5sZW5ndGgsXG4gICAgICAgIGEsXG4gICAgICAgIGIgPSByaW5nW24gLSAxXSxcbiAgICAgICAgYXJlYSA9IDA7XG5cbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgYSA9IGI7XG4gICAgICBiID0gcmluZ1tpXTtcbiAgICAgIGFyZWEgKz0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJlYSAqIC41O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FydGVzaWFuVHJpYW5nbGVBcmVhKHRyaWFuZ2xlKSB7XG4gICAgdmFyIGEgPSB0cmlhbmdsZVswXSwgYiA9IHRyaWFuZ2xlWzFdLCBjID0gdHJpYW5nbGVbMl07XG4gICAgcmV0dXJuIE1hdGguYWJzKChhWzBdIC0gY1swXSkgKiAoYlsxXSAtIGFbMV0pIC0gKGFbMF0gLSBiWzBdKSAqIChjWzFdIC0gYVsxXSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcGFyZUFyZWEoYSwgYikge1xuICAgIHJldHVybiBhWzFdWzJdIC0gYlsxXVsyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1pbkFyZWFIZWFwKCkge1xuICAgIHZhciBoZWFwID0ge30sXG4gICAgICAgIGFycmF5ID0gW10sXG4gICAgICAgIHNpemUgPSAwO1xuXG4gICAgaGVhcC5wdXNoID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICB1cChhcnJheVtvYmplY3QuXyA9IHNpemVdID0gb2JqZWN0LCBzaXplKyspO1xuICAgICAgcmV0dXJuIHNpemU7XG4gICAgfTtcblxuICAgIGhlYXAucG9wID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoc2l6ZSA8PSAwKSByZXR1cm47XG4gICAgICB2YXIgcmVtb3ZlZCA9IGFycmF5WzBdLCBvYmplY3Q7XG4gICAgICBpZiAoLS1zaXplID4gMCkgb2JqZWN0ID0gYXJyYXlbc2l6ZV0sIGRvd24oYXJyYXlbb2JqZWN0Ll8gPSAwXSA9IG9iamVjdCwgMCk7XG4gICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9O1xuXG4gICAgaGVhcC5yZW1vdmUgPSBmdW5jdGlvbihyZW1vdmVkKSB7XG4gICAgICB2YXIgaSA9IHJlbW92ZWQuXywgb2JqZWN0O1xuICAgICAgaWYgKGFycmF5W2ldICE9PSByZW1vdmVkKSByZXR1cm47IC8vIGludmFsaWQgcmVxdWVzdFxuICAgICAgaWYgKGkgIT09IC0tc2l6ZSkgb2JqZWN0ID0gYXJyYXlbc2l6ZV0sIChjb21wYXJlQXJlYShvYmplY3QsIHJlbW92ZWQpIDwgMCA/IHVwIDogZG93bikoYXJyYXlbb2JqZWN0Ll8gPSBpXSA9IG9iamVjdCwgaSk7XG4gICAgICByZXR1cm4gaTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gdXAob2JqZWN0LCBpKSB7XG4gICAgICB3aGlsZSAoaSA+IDApIHtcbiAgICAgICAgdmFyIGogPSAoKGkgKyAxKSA+PiAxKSAtIDEsXG4gICAgICAgICAgICBwYXJlbnQgPSBhcnJheVtqXTtcbiAgICAgICAgaWYgKGNvbXBhcmVBcmVhKG9iamVjdCwgcGFyZW50KSA+PSAwKSBicmVhaztcbiAgICAgICAgYXJyYXlbcGFyZW50Ll8gPSBpXSA9IHBhcmVudDtcbiAgICAgICAgYXJyYXlbb2JqZWN0Ll8gPSBpID0gal0gPSBvYmplY3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZG93bihvYmplY3QsIGkpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByID0gKGkgKyAxKSA8PCAxLFxuICAgICAgICAgICAgbCA9IHIgLSAxLFxuICAgICAgICAgICAgaiA9IGksXG4gICAgICAgICAgICBjaGlsZCA9IGFycmF5W2pdO1xuICAgICAgICBpZiAobCA8IHNpemUgJiYgY29tcGFyZUFyZWEoYXJyYXlbbF0sIGNoaWxkKSA8IDApIGNoaWxkID0gYXJyYXlbaiA9IGxdO1xuICAgICAgICBpZiAociA8IHNpemUgJiYgY29tcGFyZUFyZWEoYXJyYXlbcl0sIGNoaWxkKSA8IDApIGNoaWxkID0gYXJyYXlbaiA9IHJdO1xuICAgICAgICBpZiAoaiA9PT0gaSkgYnJlYWs7XG4gICAgICAgIGFycmF5W2NoaWxkLl8gPSBpXSA9IGNoaWxkO1xuICAgICAgICBhcnJheVtvYmplY3QuXyA9IGkgPSBqXSA9IG9iamVjdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybUFic29sdXRlKHRyYW5zZm9ybSkge1xuICAgIGlmICghdHJhbnNmb3JtKSByZXR1cm4gbm9vcDtcbiAgICB2YXIgeDAsXG4gICAgICAgIHkwLFxuICAgICAgICBreCA9IHRyYW5zZm9ybS5zY2FsZVswXSxcbiAgICAgICAga3kgPSB0cmFuc2Zvcm0uc2NhbGVbMV0sXG4gICAgICAgIGR4ID0gdHJhbnNmb3JtLnRyYW5zbGF0ZVswXSxcbiAgICAgICAgZHkgPSB0cmFuc2Zvcm0udHJhbnNsYXRlWzFdO1xuICAgIHJldHVybiBmdW5jdGlvbihwb2ludCwgaSkge1xuICAgICAgaWYgKCFpKSB4MCA9IHkwID0gMDtcbiAgICAgIHBvaW50WzBdID0gKHgwICs9IHBvaW50WzBdKSAqIGt4ICsgZHg7XG4gICAgICBwb2ludFsxXSA9ICh5MCArPSBwb2ludFsxXSkgKiBreSArIGR5O1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1SZWxhdGl2ZSh0cmFuc2Zvcm0pIHtcbiAgICBpZiAoIXRyYW5zZm9ybSkgcmV0dXJuIG5vb3A7XG4gICAgdmFyIHgwLFxuICAgICAgICB5MCxcbiAgICAgICAga3ggPSB0cmFuc2Zvcm0uc2NhbGVbMF0sXG4gICAgICAgIGt5ID0gdHJhbnNmb3JtLnNjYWxlWzFdLFxuICAgICAgICBkeCA9IHRyYW5zZm9ybS50cmFuc2xhdGVbMF0sXG4gICAgICAgIGR5ID0gdHJhbnNmb3JtLnRyYW5zbGF0ZVsxXTtcbiAgICByZXR1cm4gZnVuY3Rpb24ocG9pbnQsIGkpIHtcbiAgICAgIGlmICghaSkgeDAgPSB5MCA9IDA7XG4gICAgICB2YXIgeDEgPSAocG9pbnRbMF0gLSBkeCkgLyBreCB8IDAsXG4gICAgICAgICAgeTEgPSAocG9pbnRbMV0gLSBkeSkgLyBreSB8IDA7XG4gICAgICBwb2ludFswXSA9IHgxIC0geDA7XG4gICAgICBwb2ludFsxXSA9IHkxIC0geTA7XG4gICAgICB4MCA9IHgxO1xuICAgICAgeTAgPSB5MTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbm9vcCgpIHt9XG5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSBkZWZpbmUodG9wb2pzb24pO1xuICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IHRvcG9qc29uO1xuICBlbHNlIHRoaXMudG9wb2pzb24gPSB0b3BvanNvbjtcbn0oKTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLEJ1ZmZlcil7XG4ndXNlIHN0cmljdCdcblxudmFyIGJpdHMgPSByZXF1aXJlKCdiaXQtdHdpZGRsZScpXG52YXIgZHVwID0gcmVxdWlyZSgnZHVwJylcblxuLy9MZWdhY3kgcG9vbCBzdXBwb3J0XG5pZighZ2xvYmFsLl9fVFlQRURBUlJBWV9QT09MKSB7XG4gIGdsb2JhbC5fX1RZUEVEQVJSQVlfUE9PTCA9IHtcbiAgICAgIFVJTlQ4ICAgOiBkdXAoWzMyLCAwXSlcbiAgICAsIFVJTlQxNiAgOiBkdXAoWzMyLCAwXSlcbiAgICAsIFVJTlQzMiAgOiBkdXAoWzMyLCAwXSlcbiAgICAsIElOVDggICAgOiBkdXAoWzMyLCAwXSlcbiAgICAsIElOVDE2ICAgOiBkdXAoWzMyLCAwXSlcbiAgICAsIElOVDMyICAgOiBkdXAoWzMyLCAwXSlcbiAgICAsIEZMT0FUICAgOiBkdXAoWzMyLCAwXSlcbiAgICAsIERPVUJMRSAgOiBkdXAoWzMyLCAwXSlcbiAgICAsIERBVEEgICAgOiBkdXAoWzMyLCAwXSlcbiAgICAsIFVJTlQ4QyAgOiBkdXAoWzMyLCAwXSlcbiAgICAsIEJVRkZFUiAgOiBkdXAoWzMyLCAwXSlcbiAgfVxufVxuXG52YXIgaGFzVWludDhDID0gKHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSkgIT09ICd1bmRlZmluZWQnXG52YXIgUE9PTCA9IGdsb2JhbC5fX1RZUEVEQVJSQVlfUE9PTFxuXG4vL1VwZ3JhZGUgcG9vbFxuaWYoIVBPT0wuVUlOVDhDKSB7XG4gIFBPT0wuVUlOVDhDID0gZHVwKFszMiwgMF0pXG59XG5pZighUE9PTC5CVUZGRVIpIHtcbiAgUE9PTC5CVUZGRVIgPSBkdXAoWzMyLCAwXSlcbn1cblxuLy9OZXcgdGVjaG5pcXVlOiBPbmx5IGFsbG9jYXRlIGZyb20gQXJyYXlCdWZmZXJWaWV3IGFuZCBCdWZmZXJcbnZhciBEQVRBICAgID0gUE9PTC5EQVRBXG4gICwgQlVGRkVSICA9IFBPT0wuQlVGRkVSXG5cbmV4cG9ydHMuZnJlZSA9IGZ1bmN0aW9uIGZyZWUoYXJyYXkpIHtcbiAgaWYoQnVmZmVyLmlzQnVmZmVyKGFycmF5KSkge1xuICAgIEJVRkZFUltiaXRzLmxvZzIoYXJyYXkubGVuZ3RoKV0ucHVzaChhcnJheSlcbiAgfSBlbHNlIHtcbiAgICBpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyYXkpICE9PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSB7XG4gICAgICBhcnJheSA9IGFycmF5LmJ1ZmZlclxuICAgIH1cbiAgICBpZighYXJyYXkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgbiA9IGFycmF5Lmxlbmd0aCB8fCBhcnJheS5ieXRlTGVuZ3RoXG4gICAgdmFyIGxvZ19uID0gYml0cy5sb2cyKG4pfDBcbiAgICBEQVRBW2xvZ19uXS5wdXNoKGFycmF5KVxuICB9XG59XG5cbmZ1bmN0aW9uIGZyZWVBcnJheUJ1ZmZlcihidWZmZXIpIHtcbiAgaWYoIWJ1ZmZlcikge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBuID0gYnVmZmVyLmxlbmd0aCB8fCBidWZmZXIuYnl0ZUxlbmd0aFxuICB2YXIgbG9nX24gPSBiaXRzLmxvZzIobilcbiAgREFUQVtsb2dfbl0ucHVzaChidWZmZXIpXG59XG5cbmZ1bmN0aW9uIGZyZWVUeXBlZEFycmF5KGFycmF5KSB7XG4gIGZyZWVBcnJheUJ1ZmZlcihhcnJheS5idWZmZXIpXG59XG5cbmV4cG9ydHMuZnJlZVVpbnQ4ID1cbmV4cG9ydHMuZnJlZVVpbnQxNiA9XG5leHBvcnRzLmZyZWVVaW50MzIgPVxuZXhwb3J0cy5mcmVlSW50OCA9XG5leHBvcnRzLmZyZWVJbnQxNiA9XG5leHBvcnRzLmZyZWVJbnQzMiA9XG5leHBvcnRzLmZyZWVGbG9hdDMyID0gXG5leHBvcnRzLmZyZWVGbG9hdCA9XG5leHBvcnRzLmZyZWVGbG9hdDY0ID0gXG5leHBvcnRzLmZyZWVEb3VibGUgPSBcbmV4cG9ydHMuZnJlZVVpbnQ4Q2xhbXBlZCA9IFxuZXhwb3J0cy5mcmVlRGF0YVZpZXcgPSBmcmVlVHlwZWRBcnJheVxuXG5leHBvcnRzLmZyZWVBcnJheUJ1ZmZlciA9IGZyZWVBcnJheUJ1ZmZlclxuXG5leHBvcnRzLmZyZWVCdWZmZXIgPSBmdW5jdGlvbiBmcmVlQnVmZmVyKGFycmF5KSB7XG4gIEJVRkZFUltiaXRzLmxvZzIoYXJyYXkubGVuZ3RoKV0ucHVzaChhcnJheSlcbn1cblxuZXhwb3J0cy5tYWxsb2MgPSBmdW5jdGlvbiBtYWxsb2MobiwgZHR5cGUpIHtcbiAgaWYoZHR5cGUgPT09IHVuZGVmaW5lZCB8fCBkdHlwZSA9PT0gJ2FycmF5YnVmZmVyJykge1xuICAgIHJldHVybiBtYWxsb2NBcnJheUJ1ZmZlcihuKVxuICB9IGVsc2Uge1xuICAgIHN3aXRjaChkdHlwZSkge1xuICAgICAgY2FzZSAndWludDgnOlxuICAgICAgICByZXR1cm4gbWFsbG9jVWludDgobilcbiAgICAgIGNhc2UgJ3VpbnQxNic6XG4gICAgICAgIHJldHVybiBtYWxsb2NVaW50MTYobilcbiAgICAgIGNhc2UgJ3VpbnQzMic6XG4gICAgICAgIHJldHVybiBtYWxsb2NVaW50MzIobilcbiAgICAgIGNhc2UgJ2ludDgnOlxuICAgICAgICByZXR1cm4gbWFsbG9jSW50OChuKVxuICAgICAgY2FzZSAnaW50MTYnOlxuICAgICAgICByZXR1cm4gbWFsbG9jSW50MTYobilcbiAgICAgIGNhc2UgJ2ludDMyJzpcbiAgICAgICAgcmV0dXJuIG1hbGxvY0ludDMyKG4pXG4gICAgICBjYXNlICdmbG9hdCc6XG4gICAgICBjYXNlICdmbG9hdDMyJzpcbiAgICAgICAgcmV0dXJuIG1hbGxvY0Zsb2F0KG4pXG4gICAgICBjYXNlICdkb3VibGUnOlxuICAgICAgY2FzZSAnZmxvYXQ2NCc6XG4gICAgICAgIHJldHVybiBtYWxsb2NEb3VibGUobilcbiAgICAgIGNhc2UgJ3VpbnQ4X2NsYW1wZWQnOlxuICAgICAgICByZXR1cm4gbWFsbG9jVWludDhDbGFtcGVkKG4pXG4gICAgICBjYXNlICdidWZmZXInOlxuICAgICAgICByZXR1cm4gbWFsbG9jQnVmZmVyKG4pXG4gICAgICBjYXNlICdkYXRhJzpcbiAgICAgIGNhc2UgJ2RhdGF2aWV3JzpcbiAgICAgICAgcmV0dXJuIG1hbGxvY0RhdGFWaWV3KG4pXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIG1hbGxvY0FycmF5QnVmZmVyKG4pIHtcbiAgdmFyIG4gPSBiaXRzLm5leHRQb3cyKG4pXG4gIHZhciBsb2dfbiA9IGJpdHMubG9nMihuKVxuICB2YXIgZCA9IERBVEFbbG9nX25dXG4gIGlmKGQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkLnBvcCgpXG4gIH1cbiAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcihuKVxufVxuZXhwb3J0cy5tYWxsb2NBcnJheUJ1ZmZlciA9IG1hbGxvY0FycmF5QnVmZmVyXG5cbmZ1bmN0aW9uIG1hbGxvY1VpbnQ4KG4pIHtcbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG1hbGxvY0FycmF5QnVmZmVyKG4pLCAwLCBuKVxufVxuZXhwb3J0cy5tYWxsb2NVaW50OCA9IG1hbGxvY1VpbnQ4XG5cbmZ1bmN0aW9uIG1hbGxvY1VpbnQxNihuKSB7XG4gIHJldHVybiBuZXcgVWludDE2QXJyYXkobWFsbG9jQXJyYXlCdWZmZXIoMipuKSwgMCwgbilcbn1cbmV4cG9ydHMubWFsbG9jVWludDE2ID0gbWFsbG9jVWludDE2XG5cbmZ1bmN0aW9uIG1hbGxvY1VpbnQzMihuKSB7XG4gIHJldHVybiBuZXcgVWludDMyQXJyYXkobWFsbG9jQXJyYXlCdWZmZXIoNCpuKSwgMCwgbilcbn1cbmV4cG9ydHMubWFsbG9jVWludDMyID0gbWFsbG9jVWludDMyXG5cbmZ1bmN0aW9uIG1hbGxvY0ludDgobikge1xuICByZXR1cm4gbmV3IEludDhBcnJheShtYWxsb2NBcnJheUJ1ZmZlcihuKSwgMCwgbilcbn1cbmV4cG9ydHMubWFsbG9jSW50OCA9IG1hbGxvY0ludDhcblxuZnVuY3Rpb24gbWFsbG9jSW50MTYobikge1xuICByZXR1cm4gbmV3IEludDE2QXJyYXkobWFsbG9jQXJyYXlCdWZmZXIoMipuKSwgMCwgbilcbn1cbmV4cG9ydHMubWFsbG9jSW50MTYgPSBtYWxsb2NJbnQxNlxuXG5mdW5jdGlvbiBtYWxsb2NJbnQzMihuKSB7XG4gIHJldHVybiBuZXcgSW50MzJBcnJheShtYWxsb2NBcnJheUJ1ZmZlcig0Km4pLCAwLCBuKVxufVxuZXhwb3J0cy5tYWxsb2NJbnQzMiA9IG1hbGxvY0ludDMyXG5cbmZ1bmN0aW9uIG1hbGxvY0Zsb2F0KG4pIHtcbiAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkobWFsbG9jQXJyYXlCdWZmZXIoNCpuKSwgMCwgbilcbn1cbmV4cG9ydHMubWFsbG9jRmxvYXQzMiA9IGV4cG9ydHMubWFsbG9jRmxvYXQgPSBtYWxsb2NGbG9hdFxuXG5mdW5jdGlvbiBtYWxsb2NEb3VibGUobikge1xuICByZXR1cm4gbmV3IEZsb2F0NjRBcnJheShtYWxsb2NBcnJheUJ1ZmZlcig4Km4pLCAwLCBuKVxufVxuZXhwb3J0cy5tYWxsb2NGbG9hdDY0ID0gZXhwb3J0cy5tYWxsb2NEb3VibGUgPSBtYWxsb2NEb3VibGVcblxuZnVuY3Rpb24gbWFsbG9jVWludDhDbGFtcGVkKG4pIHtcbiAgaWYoaGFzVWludDhDKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OENsYW1wZWRBcnJheShtYWxsb2NBcnJheUJ1ZmZlcihuKSwgMCwgbilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbWFsbG9jVWludDgobilcbiAgfVxufVxuZXhwb3J0cy5tYWxsb2NVaW50OENsYW1wZWQgPSBtYWxsb2NVaW50OENsYW1wZWRcblxuZnVuY3Rpb24gbWFsbG9jRGF0YVZpZXcobikge1xuICByZXR1cm4gbmV3IERhdGFWaWV3KG1hbGxvY0FycmF5QnVmZmVyKG4pLCAwLCBuKVxufVxuZXhwb3J0cy5tYWxsb2NEYXRhVmlldyA9IG1hbGxvY0RhdGFWaWV3XG5cbmZ1bmN0aW9uIG1hbGxvY0J1ZmZlcihuKSB7XG4gIG4gPSBiaXRzLm5leHRQb3cyKG4pXG4gIHZhciBsb2dfbiA9IGJpdHMubG9nMihuKVxuICB2YXIgY2FjaGUgPSBCVUZGRVJbbG9nX25dXG4gIGlmKGNhY2hlLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gY2FjaGUucG9wKClcbiAgfVxuICByZXR1cm4gbmV3IEJ1ZmZlcihuKVxufVxuZXhwb3J0cy5tYWxsb2NCdWZmZXIgPSBtYWxsb2NCdWZmZXJcblxuZXhwb3J0cy5jbGVhckNhY2hlID0gZnVuY3Rpb24gY2xlYXJDYWNoZSgpIHtcbiAgZm9yKHZhciBpPTA7IGk8MzI7ICsraSkge1xuICAgIFBPT0wuVUlOVDhbaV0ubGVuZ3RoID0gMFxuICAgIFBPT0wuVUlOVDE2W2ldLmxlbmd0aCA9IDBcbiAgICBQT09MLlVJTlQzMltpXS5sZW5ndGggPSAwXG4gICAgUE9PTC5JTlQ4W2ldLmxlbmd0aCA9IDBcbiAgICBQT09MLklOVDE2W2ldLmxlbmd0aCA9IDBcbiAgICBQT09MLklOVDMyW2ldLmxlbmd0aCA9IDBcbiAgICBQT09MLkZMT0FUW2ldLmxlbmd0aCA9IDBcbiAgICBQT09MLkRPVUJMRVtpXS5sZW5ndGggPSAwXG4gICAgUE9PTC5VSU5UOENbaV0ubGVuZ3RoID0gMFxuICAgIERBVEFbaV0ubGVuZ3RoID0gMFxuICAgIEJVRkZFUltpXS5sZW5ndGggPSAwXG4gIH1cbn1cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9LHJlcXVpcmUoXCJidWZmZXJcIikuQnVmZmVyKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OTBlWEJsWkdGeWNtRjVMWEJ2YjJ3dmNHOXZiQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpZDFjMlVnYzNSeWFXTjBKMXh1WEc1MllYSWdZbWwwY3lBOUlISmxjWFZwY21Vb0oySnBkQzEwZDJsa1pHeGxKeWxjYm5aaGNpQmtkWEFnUFNCeVpYRjFhWEpsS0Nka2RYQW5LVnh1WEc0dkwweGxaMkZqZVNCd2IyOXNJSE4xY0hCdmNuUmNibWxtS0NGbmJHOWlZV3d1WDE5VVdWQkZSRUZTVWtGWlgxQlBUMHdwSUh0Y2JpQWdaMnh2WW1Gc0xsOWZWRmxRUlVSQlVsSkJXVjlRVDA5TUlEMGdlMXh1SUNBZ0lDQWdWVWxPVkRnZ0lDQTZJR1IxY0NoYk16SXNJREJkS1Z4dUlDQWdJQ3dnVlVsT1ZERTJJQ0E2SUdSMWNDaGJNeklzSURCZEtWeHVJQ0FnSUN3Z1ZVbE9WRE15SUNBNklHUjFjQ2hiTXpJc0lEQmRLVnh1SUNBZ0lDd2dTVTVVT0NBZ0lDQTZJR1IxY0NoYk16SXNJREJkS1Z4dUlDQWdJQ3dnU1U1VU1UWWdJQ0E2SUdSMWNDaGJNeklzSURCZEtWeHVJQ0FnSUN3Z1NVNVVNeklnSUNBNklHUjFjQ2hiTXpJc0lEQmRLVnh1SUNBZ0lDd2dSa3hQUVZRZ0lDQTZJR1IxY0NoYk16SXNJREJkS1Z4dUlDQWdJQ3dnUkU5VlFreEZJQ0E2SUdSMWNDaGJNeklzSURCZEtWeHVJQ0FnSUN3Z1JFRlVRU0FnSUNBNklHUjFjQ2hiTXpJc0lEQmRLVnh1SUNBZ0lDd2dWVWxPVkRoRElDQTZJR1IxY0NoYk16SXNJREJkS1Z4dUlDQWdJQ3dnUWxWR1JrVlNJQ0E2SUdSMWNDaGJNeklzSURCZEtWeHVJQ0I5WEc1OVhHNWNiblpoY2lCb1lYTlZhVzUwT0VNZ1BTQW9kSGx3Wlc5bUlGVnBiblE0UTJ4aGJYQmxaRUZ5Y21GNUtTQWhQVDBnSjNWdVpHVm1hVzVsWkNkY2JuWmhjaUJRVDA5TUlEMGdaMnh2WW1Gc0xsOWZWRmxRUlVSQlVsSkJXVjlRVDA5TVhHNWNiaTh2VlhCbmNtRmtaU0J3YjI5c1hHNXBaaWdoVUU5UFRDNVZTVTVVT0VNcElIdGNiaUFnVUU5UFRDNVZTVTVVT0VNZ1BTQmtkWEFvV3pNeUxDQXdYU2xjYm4xY2JtbG1LQ0ZRVDA5TUxrSlZSa1pGVWlrZ2UxeHVJQ0JRVDA5TUxrSlZSa1pGVWlBOUlHUjFjQ2hiTXpJc0lEQmRLVnh1ZlZ4dVhHNHZMMDVsZHlCMFpXTm9ibWx4ZFdVNklFOXViSGtnWVd4c2IyTmhkR1VnWm5KdmJTQkJjbkpoZVVKMVptWmxjbFpwWlhjZ1lXNWtJRUoxWm1abGNseHVkbUZ5SUVSQlZFRWdJQ0FnUFNCUVQwOU1Ma1JCVkVGY2JpQWdMQ0JDVlVaR1JWSWdJRDBnVUU5UFRDNUNWVVpHUlZKY2JseHVaWGh3YjNKMGN5NW1jbVZsSUQwZ1puVnVZM1JwYjI0Z1puSmxaU2hoY25KaGVTa2dlMXh1SUNCcFppaENkV1ptWlhJdWFYTkNkV1ptWlhJb1lYSnlZWGtwS1NCN1hHNGdJQ0FnUWxWR1JrVlNXMkpwZEhNdWJHOW5NaWhoY25KaGVTNXNaVzVuZEdncFhTNXdkWE5vS0dGeWNtRjVLVnh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJR2xtS0U5aWFtVmpkQzV3Y205MGIzUjVjR1V1ZEc5VGRISnBibWN1WTJGc2JDaGhjbkpoZVNrZ0lUMDlJQ2RiYjJKcVpXTjBJRUZ5Y21GNVFuVm1abVZ5WFNjcElIdGNiaUFnSUNBZ0lHRnljbUY1SUQwZ1lYSnlZWGt1WW5WbVptVnlYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUtDRmhjbkpoZVNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJ1SUQwZ1lYSnlZWGt1YkdWdVozUm9JSHg4SUdGeWNtRjVMbUo1ZEdWTVpXNW5kR2hjYmlBZ0lDQjJZWElnYkc5blgyNGdQU0JpYVhSekxteHZaeklvYmlsOE1GeHVJQ0FnSUVSQlZFRmJiRzluWDI1ZExuQjFjMmdvWVhKeVlYa3BYRzRnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnWm5KbFpVRnljbUY1UW5WbVptVnlLR0oxWm1abGNpa2dlMXh1SUNCcFppZ2hZblZtWm1WeUtTQjdYRzRnSUNBZ2NtVjBkWEp1WEc0Z0lIMWNiaUFnZG1GeUlHNGdQU0JpZFdabVpYSXViR1Z1WjNSb0lIeDhJR0oxWm1abGNpNWllWFJsVEdWdVozUm9YRzRnSUhaaGNpQnNiMmRmYmlBOUlHSnBkSE11Ykc5bk1paHVLVnh1SUNCRVFWUkJXMnh2WjE5dVhTNXdkWE5vS0dKMVptWmxjaWxjYm4xY2JseHVablZ1WTNScGIyNGdabkpsWlZSNWNHVmtRWEp5WVhrb1lYSnlZWGtwSUh0Y2JpQWdabkpsWlVGeWNtRjVRblZtWm1WeUtHRnljbUY1TG1KMVptWmxjaWxjYm4xY2JseHVaWGh3YjNKMGN5NW1jbVZsVldsdWREZ2dQVnh1Wlhod2IzSjBjeTVtY21WbFZXbHVkREUySUQxY2JtVjRjRzl5ZEhNdVpuSmxaVlZwYm5Rek1pQTlYRzVsZUhCdmNuUnpMbVp5WldWSmJuUTRJRDFjYm1WNGNHOXlkSE11Wm5KbFpVbHVkREUySUQxY2JtVjRjRzl5ZEhNdVpuSmxaVWx1ZERNeUlEMWNibVY0Y0c5eWRITXVabkpsWlVac2IyRjBNeklnUFNCY2JtVjRjRzl5ZEhNdVpuSmxaVVpzYjJGMElEMWNibVY0Y0c5eWRITXVabkpsWlVac2IyRjBOalFnUFNCY2JtVjRjRzl5ZEhNdVpuSmxaVVJ2ZFdKc1pTQTlJRnh1Wlhod2IzSjBjeTVtY21WbFZXbHVkRGhEYkdGdGNHVmtJRDBnWEc1bGVIQnZjblJ6TG1aeVpXVkVZWFJoVm1sbGR5QTlJR1p5WldWVWVYQmxaRUZ5Y21GNVhHNWNibVY0Y0c5eWRITXVabkpsWlVGeWNtRjVRblZtWm1WeUlEMGdabkpsWlVGeWNtRjVRblZtWm1WeVhHNWNibVY0Y0c5eWRITXVabkpsWlVKMVptWmxjaUE5SUdaMWJtTjBhVzl1SUdaeVpXVkNkV1ptWlhJb1lYSnlZWGtwSUh0Y2JpQWdRbFZHUmtWU1cySnBkSE11Ykc5bk1paGhjbkpoZVM1c1pXNW5kR2dwWFM1d2RYTm9LR0Z5Y21GNUtWeHVmVnh1WEc1bGVIQnZjblJ6TG0xaGJHeHZZeUE5SUdaMWJtTjBhVzl1SUcxaGJHeHZZeWh1TENCa2RIbHdaU2tnZTF4dUlDQnBaaWhrZEhsd1pTQTlQVDBnZFc1a1pXWnBibVZrSUh4OElHUjBlWEJsSUQwOVBTQW5ZWEp5WVhsaWRXWm1aWEluS1NCN1hHNGdJQ0FnY21WMGRYSnVJRzFoYkd4dlkwRnljbUY1UW5WbVptVnlLRzRwWEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnYzNkcGRHTm9LR1IwZVhCbEtTQjdYRzRnSUNBZ0lDQmpZWE5sSUNkMWFXNTBPQ2M2WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ0WVd4c2IyTlZhVzUwT0NodUtWeHVJQ0FnSUNBZ1kyRnpaU0FuZFdsdWRERTJKenBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzFoYkd4dlkxVnBiblF4TmlodUtWeHVJQ0FnSUNBZ1kyRnpaU0FuZFdsdWRETXlKenBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzFoYkd4dlkxVnBiblF6TWlodUtWeHVJQ0FnSUNBZ1kyRnpaU0FuYVc1ME9DYzZYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnRZV3hzYjJOSmJuUTRLRzRwWEc0Z0lDQWdJQ0JqWVhObElDZHBiblF4TmljNlhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdFlXeHNiMk5KYm5ReE5paHVLVnh1SUNBZ0lDQWdZMkZ6WlNBbmFXNTBNekluT2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYldGc2JHOWpTVzUwTXpJb2JpbGNiaUFnSUNBZ0lHTmhjMlVnSjJac2IyRjBKenBjYmlBZ0lDQWdJR05oYzJVZ0oyWnNiMkYwTXpJbk9seHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JXRnNiRzlqUm14dllYUW9iaWxjYmlBZ0lDQWdJR05oYzJVZ0oyUnZkV0pzWlNjNlhHNGdJQ0FnSUNCallYTmxJQ2RtYkc5aGREWTBKenBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzFoYkd4dlkwUnZkV0pzWlNodUtWeHVJQ0FnSUNBZ1kyRnpaU0FuZFdsdWREaGZZMnhoYlhCbFpDYzZYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnRZV3hzYjJOVmFXNTBPRU5zWVcxd1pXUW9iaWxjYmlBZ0lDQWdJR05oYzJVZ0oySjFabVpsY2ljNlhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdFlXeHNiMk5DZFdabVpYSW9iaWxjYmlBZ0lDQWdJR05oYzJVZ0oyUmhkR0VuT2x4dUlDQWdJQ0FnWTJGelpTQW5aR0YwWVhacFpYY25PbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiV0ZzYkc5alJHRjBZVlpwWlhjb2JpbGNibHh1SUNBZ0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHNTFiR3hjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHNTFiR3hjYm4xY2JseHVablZ1WTNScGIyNGdiV0ZzYkc5alFYSnlZWGxDZFdabVpYSW9iaWtnZTF4dUlDQjJZWElnYmlBOUlHSnBkSE11Ym1WNGRGQnZkeklvYmlsY2JpQWdkbUZ5SUd4dloxOXVJRDBnWW1sMGN5NXNiMmN5S0c0cFhHNGdJSFpoY2lCa0lEMGdSRUZVUVZ0c2IyZGZibDFjYmlBZ2FXWW9aQzVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnY21WMGRYSnVJR1F1Y0c5d0tDbGNiaUFnZlZ4dUlDQnlaWFIxY200Z2JtVjNJRUZ5Y21GNVFuVm1abVZ5S0c0cFhHNTlYRzVsZUhCdmNuUnpMbTFoYkd4dlkwRnljbUY1UW5WbVptVnlJRDBnYldGc2JHOWpRWEp5WVhsQ2RXWm1aWEpjYmx4dVpuVnVZM1JwYjI0Z2JXRnNiRzlqVldsdWREZ29iaWtnZTF4dUlDQnlaWFIxY200Z2JtVjNJRlZwYm5RNFFYSnlZWGtvYldGc2JHOWpRWEp5WVhsQ2RXWm1aWElvYmlrc0lEQXNJRzRwWEc1OVhHNWxlSEJ2Y25SekxtMWhiR3h2WTFWcGJuUTRJRDBnYldGc2JHOWpWV2x1ZERoY2JseHVablZ1WTNScGIyNGdiV0ZzYkc5alZXbHVkREUyS0c0cElIdGNiaUFnY21WMGRYSnVJRzVsZHlCVmFXNTBNVFpCY25KaGVTaHRZV3hzYjJOQmNuSmhlVUoxWm1abGNpZ3lLbTRwTENBd0xDQnVLVnh1ZlZ4dVpYaHdiM0owY3k1dFlXeHNiMk5WYVc1ME1UWWdQU0J0WVd4c2IyTlZhVzUwTVRaY2JseHVablZ1WTNScGIyNGdiV0ZzYkc5alZXbHVkRE15S0c0cElIdGNiaUFnY21WMGRYSnVJRzVsZHlCVmFXNTBNekpCY25KaGVTaHRZV3hzYjJOQmNuSmhlVUoxWm1abGNpZzBLbTRwTENBd0xDQnVLVnh1ZlZ4dVpYaHdiM0owY3k1dFlXeHNiMk5WYVc1ME16SWdQU0J0WVd4c2IyTlZhVzUwTXpKY2JseHVablZ1WTNScGIyNGdiV0ZzYkc5alNXNTBPQ2h1S1NCN1hHNGdJSEpsZEhWeWJpQnVaWGNnU1c1ME9FRnljbUY1S0cxaGJHeHZZMEZ5Y21GNVFuVm1abVZ5S0c0cExDQXdMQ0J1S1Z4dWZWeHVaWGh3YjNKMGN5NXRZV3hzYjJOSmJuUTRJRDBnYldGc2JHOWpTVzUwT0Z4dVhHNW1kVzVqZEdsdmJpQnRZV3hzYjJOSmJuUXhOaWh1S1NCN1hHNGdJSEpsZEhWeWJpQnVaWGNnU1c1ME1UWkJjbkpoZVNodFlXeHNiMk5CY25KaGVVSjFabVpsY2lneUttNHBMQ0F3TENCdUtWeHVmVnh1Wlhod2IzSjBjeTV0WVd4c2IyTkpiblF4TmlBOUlHMWhiR3h2WTBsdWRERTJYRzVjYm1aMWJtTjBhVzl1SUcxaGJHeHZZMGx1ZERNeUtHNHBJSHRjYmlBZ2NtVjBkWEp1SUc1bGR5QkpiblF6TWtGeWNtRjVLRzFoYkd4dlkwRnljbUY1UW5WbVptVnlLRFFxYmlrc0lEQXNJRzRwWEc1OVhHNWxlSEJ2Y25SekxtMWhiR3h2WTBsdWRETXlJRDBnYldGc2JHOWpTVzUwTXpKY2JseHVablZ1WTNScGIyNGdiV0ZzYkc5alJteHZZWFFvYmlrZ2UxeHVJQ0J5WlhSMWNtNGdibVYzSUVac2IyRjBNekpCY25KaGVTaHRZV3hzYjJOQmNuSmhlVUoxWm1abGNpZzBLbTRwTENBd0xDQnVLVnh1ZlZ4dVpYaHdiM0owY3k1dFlXeHNiMk5HYkc5aGRETXlJRDBnWlhod2IzSjBjeTV0WVd4c2IyTkdiRzloZENBOUlHMWhiR3h2WTBac2IyRjBYRzVjYm1aMWJtTjBhVzl1SUcxaGJHeHZZMFJ2ZFdKc1pTaHVLU0I3WEc0Z0lISmxkSFZ5YmlCdVpYY2dSbXh2WVhRMk5FRnljbUY1S0cxaGJHeHZZMEZ5Y21GNVFuVm1abVZ5S0RncWJpa3NJREFzSUc0cFhHNTlYRzVsZUhCdmNuUnpMbTFoYkd4dlkwWnNiMkYwTmpRZ1BTQmxlSEJ2Y25SekxtMWhiR3h2WTBSdmRXSnNaU0E5SUcxaGJHeHZZMFJ2ZFdKc1pWeHVYRzVtZFc1amRHbHZiaUJ0WVd4c2IyTlZhVzUwT0VOc1lXMXdaV1FvYmlrZ2UxeHVJQ0JwWmlob1lYTlZhVzUwT0VNcElIdGNiaUFnSUNCeVpYUjFjbTRnYm1WM0lGVnBiblE0UTJ4aGJYQmxaRUZ5Y21GNUtHMWhiR3h2WTBGeWNtRjVRblZtWm1WeUtHNHBMQ0F3TENCdUtWeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCdFlXeHNiMk5WYVc1ME9DaHVLVnh1SUNCOVhHNTlYRzVsZUhCdmNuUnpMbTFoYkd4dlkxVnBiblE0UTJ4aGJYQmxaQ0E5SUcxaGJHeHZZMVZwYm5RNFEyeGhiWEJsWkZ4dVhHNW1kVzVqZEdsdmJpQnRZV3hzYjJORVlYUmhWbWxsZHlodUtTQjdYRzRnSUhKbGRIVnliaUJ1WlhjZ1JHRjBZVlpwWlhjb2JXRnNiRzlqUVhKeVlYbENkV1ptWlhJb2Jpa3NJREFzSUc0cFhHNTlYRzVsZUhCdmNuUnpMbTFoYkd4dlkwUmhkR0ZXYVdWM0lEMGdiV0ZzYkc5alJHRjBZVlpwWlhkY2JseHVablZ1WTNScGIyNGdiV0ZzYkc5alFuVm1abVZ5S0c0cElIdGNiaUFnYmlBOUlHSnBkSE11Ym1WNGRGQnZkeklvYmlsY2JpQWdkbUZ5SUd4dloxOXVJRDBnWW1sMGN5NXNiMmN5S0c0cFhHNGdJSFpoY2lCallXTm9aU0E5SUVKVlJrWkZVbHRzYjJkZmJsMWNiaUFnYVdZb1kyRmphR1V1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJqWVdOb1pTNXdiM0FvS1Z4dUlDQjlYRzRnSUhKbGRIVnliaUJ1WlhjZ1FuVm1abVZ5S0c0cFhHNTlYRzVsZUhCdmNuUnpMbTFoYkd4dlkwSjFabVpsY2lBOUlHMWhiR3h2WTBKMVptWmxjbHh1WEc1bGVIQnZjblJ6TG1Oc1pXRnlRMkZqYUdVZ1BTQm1kVzVqZEdsdmJpQmpiR1ZoY2tOaFkyaGxLQ2tnZTF4dUlDQm1iM0lvZG1GeUlHazlNRHNnYVR3ek1qc2dLeXRwS1NCN1hHNGdJQ0FnVUU5UFRDNVZTVTVVT0Z0cFhTNXNaVzVuZEdnZ1BTQXdYRzRnSUNBZ1VFOVBUQzVWU1U1VU1UWmJhVjB1YkdWdVozUm9JRDBnTUZ4dUlDQWdJRkJQVDB3dVZVbE9WRE15VzJsZExteGxibWQwYUNBOUlEQmNiaUFnSUNCUVQwOU1Ma2xPVkRoYmFWMHViR1Z1WjNSb0lEMGdNRnh1SUNBZ0lGQlBUMHd1U1U1VU1UWmJhVjB1YkdWdVozUm9JRDBnTUZ4dUlDQWdJRkJQVDB3dVNVNVVNekpiYVYwdWJHVnVaM1JvSUQwZ01GeHVJQ0FnSUZCUFQwd3VSa3hQUVZSYmFWMHViR1Z1WjNSb0lEMGdNRnh1SUNBZ0lGQlBUMHd1UkU5VlFreEZXMmxkTG14bGJtZDBhQ0E5SURCY2JpQWdJQ0JRVDA5TUxsVkpUbFE0UTF0cFhTNXNaVzVuZEdnZ1BTQXdYRzRnSUNBZ1JFRlVRVnRwWFM1c1pXNW5kR2dnUFNBd1hHNGdJQ0FnUWxWR1JrVlNXMmxkTG14bGJtZDBhQ0E5SURCY2JpQWdmVnh1ZlNKZGZRPT0iLCJtb2R1bGUuZXhwb3J0cy5WZWN0b3JUaWxlID0gcmVxdWlyZSgnLi9saWIvdmVjdG9ydGlsZS5qcycpO1xubW9kdWxlLmV4cG9ydHMuVmVjdG9yVGlsZUZlYXR1cmUgPSByZXF1aXJlKCcuL2xpYi92ZWN0b3J0aWxlZmVhdHVyZS5qcycpO1xubW9kdWxlLmV4cG9ydHMuVmVjdG9yVGlsZUxheWVyID0gcmVxdWlyZSgnLi9saWIvdmVjdG9ydGlsZWxheWVyLmpzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBWZWN0b3JUaWxlTGF5ZXIgPSByZXF1aXJlKCcuL3ZlY3RvcnRpbGVsYXllcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZlY3RvclRpbGU7XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGUocGJmLCBlbmQpIHtcbiAgICB0aGlzLmxheWVycyA9IHBiZi5yZWFkRmllbGRzKHJlYWRUaWxlLCB7fSwgZW5kKTtcbn1cblxuZnVuY3Rpb24gcmVhZFRpbGUodGFnLCBsYXllcnMsIHBiZikge1xuICAgIGlmICh0YWcgPT09IDMpIHtcbiAgICAgICAgdmFyIGxheWVyID0gbmV3IFZlY3RvclRpbGVMYXllcihwYmYsIHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zKTtcbiAgICAgICAgaWYgKGxheWVyLmxlbmd0aCkgbGF5ZXJzW2xheWVyLm5hbWVdID0gbGF5ZXI7XG4gICAgfVxufVxuXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJ3BvaW50LWdlb21ldHJ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmVjdG9yVGlsZUZlYXR1cmU7XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGVGZWF0dXJlKHBiZiwgZW5kLCBleHRlbnQsIGtleXMsIHZhbHVlcykge1xuICAgIC8vIFB1YmxpY1xuICAgIHRoaXMucHJvcGVydGllcyA9IHt9O1xuICAgIHRoaXMuZXh0ZW50ID0gZXh0ZW50O1xuICAgIHRoaXMudHlwZSA9IDA7XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5fcGJmID0gcGJmO1xuICAgIHRoaXMuX2dlb21ldHJ5ID0gLTE7XG4gICAgdGhpcy5fa2V5cyA9IGtleXM7XG4gICAgdGhpcy5fdmFsdWVzID0gdmFsdWVzO1xuXG4gICAgcGJmLnJlYWRGaWVsZHMocmVhZEZlYXR1cmUsIHRoaXMsIGVuZCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGZWF0dXJlKHRhZywgZmVhdHVyZSwgcGJmKSB7XG4gICAgaWYgKHRhZyA9PSAxKSBmZWF0dXJlLl9pZCA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09IDIpIHJlYWRUYWcocGJmLCBmZWF0dXJlKTtcbiAgICBlbHNlIGlmICh0YWcgPT0gMykgZmVhdHVyZS50eXBlID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT0gNCkgZmVhdHVyZS5fZ2VvbWV0cnkgPSBwYmYucG9zO1xufVxuXG5mdW5jdGlvbiByZWFkVGFnKHBiZiwgZmVhdHVyZSkge1xuICAgIHZhciBlbmQgPSBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcztcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIHZhciBrZXkgPSBmZWF0dXJlLl9rZXlzW3BiZi5yZWFkVmFyaW50KCldLFxuICAgICAgICAgICAgdmFsdWUgPSBmZWF0dXJlLl92YWx1ZXNbcGJmLnJlYWRWYXJpbnQoKV07XG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllc1trZXldID0gdmFsdWU7XG4gICAgfVxufVxuXG5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyA9IFsnVW5rbm93bicsICdQb2ludCcsICdMaW5lU3RyaW5nJywgJ1BvbHlnb24nXTtcblxuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLmxvYWRHZW9tZXRyeSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYmYgPSB0aGlzLl9wYmY7XG4gICAgcGJmLnBvcyA9IHRoaXMuX2dlb21ldHJ5O1xuXG4gICAgdmFyIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zLFxuICAgICAgICBjbWQgPSAxLFxuICAgICAgICBsZW5ndGggPSAwLFxuICAgICAgICB4ID0gMCxcbiAgICAgICAgeSA9IDAsXG4gICAgICAgIGxpbmVzID0gW10sXG4gICAgICAgIGxpbmU7XG5cbiAgICB3aGlsZSAocGJmLnBvcyA8IGVuZCkge1xuICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGNtZExlbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgICAgICAgICBjbWQgPSBjbWRMZW4gJiAweDc7XG4gICAgICAgICAgICBsZW5ndGggPSBjbWRMZW4gPj4gMztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aC0tO1xuXG4gICAgICAgIGlmIChjbWQgPT09IDEgfHwgY21kID09PSAyKSB7XG4gICAgICAgICAgICB4ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgICAgICAgICAgeSArPSBwYmYucmVhZFNWYXJpbnQoKTtcblxuICAgICAgICAgICAgaWYgKGNtZCA9PT0gMSkgeyAvLyBtb3ZlVG9cbiAgICAgICAgICAgICAgICBpZiAobGluZSkgbGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgICAgICAgICBsaW5lID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxpbmUucHVzaChuZXcgUG9pbnQoeCwgeSkpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY21kID09PSA3KSB7XG4gICAgICAgICAgICBsaW5lLnB1c2gobGluZVswXS5jbG9uZSgpKTsgLy8gY2xvc2VQb2x5Z29uXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb21tYW5kICcgKyBjbWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxpbmUpIGxpbmVzLnB1c2gobGluZSk7XG5cbiAgICByZXR1cm4gbGluZXM7XG59O1xuXG5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUuYmJveCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYmYgPSB0aGlzLl9wYmY7XG4gICAgcGJmLnBvcyA9IHRoaXMuX2dlb21ldHJ5O1xuXG4gICAgdmFyIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zLFxuICAgICAgICBjbWQgPSAxLFxuICAgICAgICBsZW5ndGggPSAwLFxuICAgICAgICB4ID0gMCxcbiAgICAgICAgeSA9IDAsXG4gICAgICAgIHgxID0gSW5maW5pdHksXG4gICAgICAgIHgyID0gLUluZmluaXR5LFxuICAgICAgICB5MSA9IEluZmluaXR5LFxuICAgICAgICB5MiA9IC1JbmZpbml0eTtcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgY21kTGVuID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICAgICAgICAgIGNtZCA9IGNtZExlbiAmIDB4NztcbiAgICAgICAgICAgIGxlbmd0aCA9IGNtZExlbiA+PiAzO1xuICAgICAgICB9XG5cbiAgICAgICAgbGVuZ3RoLS07XG5cbiAgICAgICAgaWYgKGNtZCA9PT0gMSB8fCBjbWQgPT09IDIpIHtcbiAgICAgICAgICAgIHggKz0gcGJmLnJlYWRTVmFyaW50KCk7XG4gICAgICAgICAgICB5ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgICAgICAgICAgaWYgKHggPCB4MSkgeDEgPSB4O1xuICAgICAgICAgICAgaWYgKHggPiB4MikgeDIgPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCB5MSkgeTEgPSB5O1xuICAgICAgICAgICAgaWYgKHkgPiB5MikgeTIgPSB5O1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY21kICE9PSA3KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29tbWFuZCAnICsgY21kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbeDEsIHkxLCB4MiwgeTJdO1xufTtcblxuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLnRvR2VvSlNPTiA9IGZ1bmN0aW9uKHgsIHksIHopIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuZXh0ZW50ICogTWF0aC5wb3coMiwgeiksXG4gICAgICAgIHgwID0gdGhpcy5leHRlbnQgKiB4LFxuICAgICAgICB5MCA9IHRoaXMuZXh0ZW50ICogeSxcbiAgICAgICAgY29vcmRzID0gdGhpcy5sb2FkR2VvbWV0cnkoKSxcbiAgICAgICAgdHlwZSA9IFZlY3RvclRpbGVGZWF0dXJlLnR5cGVzW3RoaXMudHlwZV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbGluZSA9IGNvb3Jkc1tpXTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgcCA9IGxpbmVbal0sIHkyID0gMTgwIC0gKHAueSArIHkwKSAqIDM2MCAvIHNpemU7XG4gICAgICAgICAgICBsaW5lW2pdID0gW1xuICAgICAgICAgICAgICAgIChwLnggKyB4MCkgKiAzNjAgLyBzaXplIC0gMTgwLFxuICAgICAgICAgICAgICAgIDM2MCAvIE1hdGguUEkgKiBNYXRoLmF0YW4oTWF0aC5leHAoeTIgKiBNYXRoLlBJIC8gMTgwKSkgLSA5MFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnUG9pbnQnICYmIGNvb3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29vcmRzID0gY29vcmRzWzBdWzBdO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BvaW50Jykge1xuICAgICAgICBjb29yZHMgPSBjb29yZHNbMF07XG4gICAgICAgIHR5cGUgPSAnTXVsdGlQb2ludCc7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTGluZVN0cmluZycgJiYgY29vcmRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb29yZHMgPSBjb29yZHNbMF07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgdHlwZSA9ICdNdWx0aUxpbmVTdHJpbmcnO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiRmVhdHVyZVwiLFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZHNcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydGllczogdGhpcy5wcm9wZXJ0aWVzXG4gICAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBWZWN0b3JUaWxlRmVhdHVyZSA9IHJlcXVpcmUoJy4vdmVjdG9ydGlsZWZlYXR1cmUuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBWZWN0b3JUaWxlTGF5ZXI7XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGVMYXllcihwYmYsIGVuZCkge1xuICAgIC8vIFB1YmxpY1xuICAgIHRoaXMudmVyc2lvbiA9IDE7XG4gICAgdGhpcy5uYW1lID0gbnVsbDtcbiAgICB0aGlzLmV4dGVudCA9IDQwOTY7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuXG4gICAgLy8gUHJpdmF0ZVxuICAgIHRoaXMuX3BiZiA9IHBiZjtcbiAgICB0aGlzLl9rZXlzID0gW107XG4gICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgdGhpcy5fZmVhdHVyZXMgPSBbXTtcblxuICAgIHBiZi5yZWFkRmllbGRzKHJlYWRMYXllciwgdGhpcywgZW5kKTtcblxuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5fZmVhdHVyZXMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiByZWFkTGF5ZXIodGFnLCBsYXllciwgcGJmKSB7XG4gICAgaWYgKHRhZyA9PT0gMTUpIGxheWVyLnZlcnNpb24gPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gMSkgbGF5ZXIubmFtZSA9IHBiZi5yZWFkU3RyaW5nKCk7XG4gICAgZWxzZSBpZiAodGFnID09PSA1KSBsYXllci5leHRlbnQgPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gMikgbGF5ZXIuX2ZlYXR1cmVzLnB1c2gocGJmLnBvcyk7XG4gICAgZWxzZSBpZiAodGFnID09PSAzKSBsYXllci5fa2V5cy5wdXNoKHBiZi5yZWFkU3RyaW5nKCkpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gNCkgbGF5ZXIuX3ZhbHVlcy5wdXNoKHJlYWRWYWx1ZU1lc3NhZ2UocGJmKSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRWYWx1ZU1lc3NhZ2UocGJmKSB7XG4gICAgdmFyIHZhbHVlID0gbnVsbCxcbiAgICAgICAgZW5kID0gcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3M7XG5cbiAgICB3aGlsZSAocGJmLnBvcyA8IGVuZCkge1xuICAgICAgICB2YXIgdGFnID0gcGJmLnJlYWRWYXJpbnQoKSA+PiAzO1xuXG4gICAgICAgIHZhbHVlID0gdGFnID09PSAxID8gcGJmLnJlYWRTdHJpbmcoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDIgPyBwYmYucmVhZEZsb2F0KCkgOlxuICAgICAgICAgICAgdGFnID09PSAzID8gcGJmLnJlYWREb3VibGUoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDQgPyBwYmYucmVhZFZhcmludDY0KCkgOlxuICAgICAgICAgICAgdGFnID09PSA1ID8gcGJmLnJlYWRWYXJpbnQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDYgPyBwYmYucmVhZFNWYXJpbnQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDcgPyBwYmYucmVhZEJvb2xlYW4oKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG4vLyByZXR1cm4gZmVhdHVyZSBgaWAgZnJvbSB0aGlzIGxheWVyIGFzIGEgYFZlY3RvclRpbGVGZWF0dXJlYFxuVmVjdG9yVGlsZUxheWVyLnByb3RvdHlwZS5mZWF0dXJlID0gZnVuY3Rpb24oaSkge1xuICAgIGlmIChpIDwgMCB8fCBpID49IHRoaXMuX2ZlYXR1cmVzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdmZWF0dXJlIGluZGV4IG91dCBvZiBib3VuZHMnKTtcblxuICAgIHRoaXMuX3BiZi5wb3MgPSB0aGlzLl9mZWF0dXJlc1tpXTtcblxuICAgIHZhciBlbmQgPSB0aGlzLl9wYmYucmVhZFZhcmludCgpICsgdGhpcy5fcGJmLnBvcztcbiAgICByZXR1cm4gbmV3IFZlY3RvclRpbGVGZWF0dXJlKHRoaXMuX3BiZiwgZW5kLCB0aGlzLmV4dGVudCwgdGhpcy5fa2V5cywgdGhpcy5fdmFsdWVzKTtcbn07XG4iLCIvLyBHZW9tZXRyeSBidWlsZGluZyBmdW5jdGlvbnNcbmltcG9ydCBHZW8gZnJvbSAnLi4vZ2VvJztcblxuZXhwb3J0IGNvbnN0IHRpbGVfYm91bmRzID0gW1xuICAgIHsgeDogMCwgeTogMH0sXG4gICAgeyB4OiBHZW8udGlsZV9zY2FsZSwgeTogLUdlby50aWxlX3NjYWxlIH0gLy8gVE9ETzogY29ycmVjdCBmb3IgZmxpcHBlZCB5LWF4aXM/XG5dO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdF91dnMgPSBbMCwgMCwgMSwgMV07XG5cbi8vIFRlc3RzIGlmIGEgbGluZSBzZWdtZW50IChmcm9tIHBvaW50IEEgdG8gQikgaXMgb3V0c2lkZSB0aGUgdGlsZSBib3VuZHNcbi8vICh3aXRoaW4gYSBjZXJ0YWluIHRvbGVyYW5jZSB0byBhY2NvdW50IGZvciBnZW9tZXRyeSBuZWFybHkgb24gdGlsZSBlZGdlcylcbmV4cG9ydCBmdW5jdGlvbiBvdXRzaWRlVGlsZSAoX2EsIF9iLCB0b2xlcmFuY2UpIHtcbiAgICBsZXQgdGlsZV9taW4gPSB0aWxlX2JvdW5kc1swXTtcbiAgICBsZXQgdGlsZV9tYXggPSB0aWxlX2JvdW5kc1sxXTtcblxuICAgIC8vIFRPRE86IGZpeCBmbGlwcGVkIFkgY29vcmRzIGhlcmUsIGNvbmZ1c2luZyB3aXRoICdtYXgnIHJlZmVyZW5jZVxuICAgIGlmICgoX2FbMF0gPD0gdGlsZV9taW4ueCArIHRvbGVyYW5jZSAmJiBfYlswXSA8PSB0aWxlX21pbi54ICsgdG9sZXJhbmNlKSB8fFxuICAgICAgICAoX2FbMF0gPj0gdGlsZV9tYXgueCAtIHRvbGVyYW5jZSAmJiBfYlswXSA+PSB0aWxlX21heC54IC0gdG9sZXJhbmNlKSB8fFxuICAgICAgICAoX2FbMV0gPj0gdGlsZV9taW4ueSAtIHRvbGVyYW5jZSAmJiBfYlsxXSA+PSB0aWxlX21pbi55IC0gdG9sZXJhbmNlKSB8fFxuICAgICAgICAoX2FbMV0gPD0gdGlsZV9tYXgueSArIHRvbGVyYW5jZSAmJiBfYlsxXSA8PSB0aWxlX21heC55ICsgdG9sZXJhbmNlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG4iLCIvLyBQb2ludCBidWlsZGVyc1xuaW1wb3J0IHsgZGVmYXVsdF91dnMgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8vIEJ1aWxkIGEgYmlsbGJvYXJkIHNwcml0ZSBxdWFkIGNlbnRlcmVkIG9uIGEgcG9pbnQuIFNwcml0ZXMgYXJlIGludGVuZGVkIHRvIGJlIGRyYXduIGluIHNjcmVlbnNwYWNlLCBhbmQgaGF2ZVxuLy8gcHJvcGVydGllcyBmb3Igd2lkdGgsIGhlaWdodCwgYW5nbGUsIGFuZCBhIHNjYWxlIGZhY3RvciB0aGF0IGNhbiBiZSB1c2VkIHRvIGludGVycG9sYXRlIHRoZSBzY3JlZW5zcGFjZSBzaXplXG4vLyBvZiBhIHNwcml0ZSBiZXR3ZWVuIHR3byB6b29tIGxldmVscy5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFF1YWRzRm9yUG9pbnRzIChwb2ludHMsIHZlcnRleF9kYXRhLCB2ZXJ0ZXhfdGVtcGxhdGUsXG4gICAgeyB0ZXhjb29yZF9pbmRleCwgcG9zaXRpb25faW5kZXgsIHNoYXBlX2luZGV4LCBvZmZzZXRfaW5kZXggfSxcbiAgICB7IHF1YWQsIHF1YWRfc2NhbGUsIG9mZnNldCwgYW5nbGUsIHRleGNvb3JkX3NjYWxlLCB0ZXhjb29yZF9ub3JtYWxpemUgfSkge1xuICAgIGxldCB3MiA9IHF1YWRbMF0gLyAyO1xuICAgIGxldCBoMiA9IHF1YWRbMV0gLyAyO1xuICAgIGxldCBzY2FsaW5nID0gW1xuICAgICAgICBbLXcyLCAtaDJdLFxuICAgICAgICBbdzIsIC1oMl0sXG4gICAgICAgIFt3MiwgaDJdLFxuXG4gICAgICAgIFstdzIsIC1oMl0sXG4gICAgICAgIFt3MiwgaDJdLFxuICAgICAgICBbLXcyLCBoMl1cbiAgICBdO1xuXG4gICAgbGV0IHRleGNvb3JkcztcbiAgICBpZiAodGV4Y29vcmRfaW5kZXgpIHtcbiAgICAgICAgdGV4Y29vcmRfbm9ybWFsaXplID0gdGV4Y29vcmRfbm9ybWFsaXplIHx8IDE7XG5cbiAgICAgICAgdmFyIFttaW5fdSwgbWluX3YsIG1heF91LCBtYXhfdl0gPSB0ZXhjb29yZF9zY2FsZSB8fCBkZWZhdWx0X3V2cztcbiAgICAgICAgdGV4Y29vcmRzID0gW1xuICAgICAgICAgICAgW21pbl91LCBtaW5fdl0sXG4gICAgICAgICAgICBbbWF4X3UsIG1pbl92XSxcbiAgICAgICAgICAgIFttYXhfdSwgbWF4X3ZdLFxuXG4gICAgICAgICAgICBbbWluX3UsIG1pbl92XSxcbiAgICAgICAgICAgIFttYXhfdSwgbWF4X3ZdLFxuICAgICAgICAgICAgW21pbl91LCBtYXhfdl1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBsZXQgbnVtX3BvaW50cyA9IHBvaW50cy5sZW5ndGg7XG4gICAgZm9yIChsZXQgcD0wOyBwIDwgbnVtX3BvaW50czsgcCsrKSB7XG4gICAgICAgIGxldCBwb2ludCA9IHBvaW50c1twXTtcblxuICAgICAgICBmb3IgKGxldCBwb3M9MDsgcG9zIDwgNjsgcG9zKyspIHtcbiAgICAgICAgICAgIC8vIEFkZCB0ZXhjb29yZHNcbiAgICAgICAgICAgIGlmICh0ZXhjb29yZF9pbmRleCkge1xuICAgICAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVt0ZXhjb29yZF9pbmRleCArIDBdID0gdGV4Y29vcmRzW3Bvc11bMF0gKiB0ZXhjb29yZF9ub3JtYWxpemU7XG4gICAgICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlW3RleGNvb3JkX2luZGV4ICsgMV0gPSB0ZXhjb29yZHNbcG9zXVsxXSAqIHRleGNvb3JkX25vcm1hbGl6ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlW3Bvc2l0aW9uX2luZGV4ICsgMF0gPSBwb2ludFswXTtcbiAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVtwb3NpdGlvbl9pbmRleCArIDFdID0gcG9pbnRbMV07XG5cbiAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVtzaGFwZV9pbmRleCArIDBdID0gc2NhbGluZ1twb3NdWzBdO1xuICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlW3NoYXBlX2luZGV4ICsgMV0gPSBzY2FsaW5nW3Bvc11bMV07XG4gICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbc2hhcGVfaW5kZXggKyAyXSA9IGFuZ2xlO1xuICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlW3NoYXBlX2luZGV4ICsgM10gPSBxdWFkX3NjYWxlO1xuXG4gICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbb2Zmc2V0X2luZGV4ICsgMF0gPSBvZmZzZXRbMF07XG4gICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbb2Zmc2V0X2luZGV4ICsgMV0gPSBvZmZzZXRbMV07XG5cbiAgICAgICAgICAgIHZlcnRleF9kYXRhLmFkZFZlcnRleCh2ZXJ0ZXhfdGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gUG9seWdvbiBidWlsZGVyc1xuaW1wb3J0IEdlbyBmcm9tICcuLi9nZW8nO1xuaW1wb3J0IFZlY3RvciBmcm9tICcuLi92ZWN0b3InO1xuaW1wb3J0IHsgZGVmYXVsdF91dnMsIG91dHNpZGVUaWxlIH0gZnJvbSAnLi9jb21tb24nO1xuXG5pbXBvcnQgZWFyY3V0IGZyb20gJ2VhcmN1dCc7XG5cbmNvbnN0IHVwX3ZlYzMgPSBbMCwgMCwgMV07XG5cbi8vIFRlc3NlbGF0ZSBhIGZsYXQgMkQgcG9seWdvblxuLy8geCAmIHkgY29vcmRpbmF0ZXMgd2lsbCBiZSBzZXQgYXMgZmlyc3QgdHdvIGVsZW1lbnRzIG9mIHByb3ZpZGVkIHZlcnRleF90ZW1wbGF0ZVxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUG9seWdvbnMgKFxuICAgIHBvbHlnb25zLFxuICAgIHZlcnRleF9kYXRhLCB2ZXJ0ZXhfdGVtcGxhdGUsXG4gICAgeyB0ZXhjb29yZF9pbmRleCwgdGV4Y29vcmRfc2NhbGUsIHRleGNvb3JkX25vcm1hbGl6ZSB9KSB7XG5cbiAgICBpZiAodGV4Y29vcmRfaW5kZXgpIHtcbiAgICAgICAgdGV4Y29vcmRfbm9ybWFsaXplID0gdGV4Y29vcmRfbm9ybWFsaXplIHx8IDE7XG4gICAgICAgIHZhciBbbWluX3UsIG1pbl92LCBtYXhfdSwgbWF4X3ZdID0gdGV4Y29vcmRfc2NhbGUgfHwgZGVmYXVsdF91dnM7XG4gICAgfVxuXG4gICAgdmFyIG51bV9wb2x5Z29ucyA9IHBvbHlnb25zLmxlbmd0aDtcbiAgICBmb3IgKHZhciBwPTA7IHAgPCBudW1fcG9seWdvbnM7IHArKykge1xuICAgICAgICB2YXIgcG9seWdvbiA9IHBvbHlnb25zW3BdO1xuXG4gICAgICAgIC8vIEZpbmQgcG9seWdvbiBleHRlbnRzIHRvIGNhbGN1bGF0ZSBVVnMsIGZpdCB0aGVtIHRvIHRoZSBheGlzLWFsaWduZWQgYm91bmRpbmcgYm94XG4gICAgICAgIGlmICh0ZXhjb29yZF9pbmRleCkge1xuICAgICAgICAgICAgdmFyIFttaW5feCwgbWluX3ksIG1heF94LCBtYXhfeV0gPSBHZW8uZmluZEJvdW5kaW5nQm94KHBvbHlnb24pO1xuICAgICAgICAgICAgdmFyIHNwYW5feCA9IG1heF94IC0gbWluX3g7XG4gICAgICAgICAgICB2YXIgc3Bhbl95ID0gbWF4X3kgLSBtaW5feTtcbiAgICAgICAgICAgIHZhciBzY2FsZV91ID0gKG1heF91IC0gbWluX3UpIC8gc3Bhbl94O1xuICAgICAgICAgICAgdmFyIHNjYWxlX3YgPSAobWF4X3YgLSBtaW5fdikgLyBzcGFuX3k7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUZXNzZWxsYXRlXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRyaWFuZ3VsYXRlUG9seWdvbihwb2x5Z29uKTtcblxuICAgICAgICAvLyBBZGQgdmVydGV4IGRhdGFcbiAgICAgICAgdmFyIG51bV92ZXJ0aWNlcyA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgdj0wOyB2IDwgbnVtX3ZlcnRpY2VzOyB2KyspIHtcbiAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSB2ZXJ0aWNlc1t2XTtcbiAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVswXSA9IHZlcnRleFswXTtcbiAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVsxXSA9IHZlcnRleFsxXTtcblxuICAgICAgICAgICAgLy8gQWRkIFVWc1xuICAgICAgICAgICAgaWYgKHRleGNvb3JkX2luZGV4KSB7XG4gICAgICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlW3RleGNvb3JkX2luZGV4ICsgMF0gPSAoKHZlcnRleFswXSAtIG1pbl94KSAqIHNjYWxlX3UgKyBtaW5fdSkgKiB0ZXhjb29yZF9ub3JtYWxpemU7XG4gICAgICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlW3RleGNvb3JkX2luZGV4ICsgMV0gPSAoKHZlcnRleFsxXSAtIG1pbl95KSAqIHNjYWxlX3YgKyBtaW5fdikgKiB0ZXhjb29yZF9ub3JtYWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZlcnRleF9kYXRhLmFkZFZlcnRleCh2ZXJ0ZXhfdGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBUZXNzZWxhdGUgYW5kIGV4dHJ1ZGUgYSBmbGF0IDJEIHBvbHlnb24gaW50byBhIHNpbXBsZSAzRCBtb2RlbCB3aXRoIGZpeGVkIGhlaWdodCBhbmQgYWRkIHRvIEdMIHZlcnRleCBidWZmZXJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEV4dHJ1ZGVkUG9seWdvbnMgKFxuICAgIHBvbHlnb25zLFxuICAgIHosIGhlaWdodCwgbWluX2hlaWdodCxcbiAgICB2ZXJ0ZXhfZGF0YSwgdmVydGV4X3RlbXBsYXRlLFxuICAgIG5vcm1hbF9pbmRleCxcbiAgICBub3JtYWxfbm9ybWFsaXplLFxuICAgIHtcbiAgICAgICAgcmVtb3ZlX3RpbGVfZWRnZXMsXG4gICAgICAgIHRpbGVfZWRnZV90b2xlcmFuY2UsXG4gICAgICAgIHRleGNvb3JkX2luZGV4LFxuICAgICAgICB0ZXhjb29yZF9zY2FsZSxcbiAgICAgICAgdGV4Y29vcmRfbm9ybWFsaXplLFxuICAgICAgICB3aW5kaW5nXG4gICAgfSkge1xuXG4gICAgLy8gVG9wXG4gICAgdmFyIG1pbl96ID0geiArIChtaW5faGVpZ2h0IHx8IDApO1xuICAgIHZhciBtYXhfeiA9IHogKyBoZWlnaHQ7XG4gICAgdmVydGV4X3RlbXBsYXRlWzJdID0gbWF4X3o7XG4gICAgYnVpbGRQb2x5Z29ucyhwb2x5Z29ucywgdmVydGV4X2RhdGEsIHZlcnRleF90ZW1wbGF0ZSwgeyB0ZXhjb29yZF9pbmRleCwgdGV4Y29vcmRfc2NhbGUsIHRleGNvb3JkX25vcm1hbGl6ZSB9KTtcblxuICAgIC8vIFdhbGxzXG4gICAgLy8gRml0IFVWcyB0byB3YWxsIHF1YWRcbiAgICBpZiAodGV4Y29vcmRfaW5kZXgpIHtcbiAgICAgICAgdGV4Y29vcmRfbm9ybWFsaXplID0gdGV4Y29vcmRfbm9ybWFsaXplIHx8IDE7XG4gICAgICAgIHZhciBbbWluX3UsIG1pbl92LCBtYXhfdSwgbWF4X3ZdID0gdGV4Y29vcmRfc2NhbGUgfHwgZGVmYXVsdF91dnM7XG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBbXG4gICAgICAgICAgICBbbWluX3UsIG1heF92XSxcbiAgICAgICAgICAgIFttaW5fdSwgbWluX3ZdLFxuICAgICAgICAgICAgW21heF91LCBtaW5fdl0sXG5cbiAgICAgICAgICAgIFttYXhfdSwgbWluX3ZdLFxuICAgICAgICAgICAgW21heF91LCBtYXhfdl0sXG4gICAgICAgICAgICBbbWluX3UsIG1heF92XVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHZhciBudW1fcG9seWdvbnMgPSBwb2x5Z29ucy5sZW5ndGg7XG4gICAgZm9yICh2YXIgcD0wOyBwIDwgbnVtX3BvbHlnb25zOyBwKyspIHtcbiAgICAgICAgdmFyIHBvbHlnb24gPSBwb2x5Z29uc1twXTtcblxuICAgICAgICBmb3IgKHZhciBxPTA7IHEgPCBwb2x5Z29uLmxlbmd0aDsgcSsrKSB7XG4gICAgICAgICAgICB2YXIgY29udG91ciA9IHBvbHlnb25bcV07XG5cbiAgICAgICAgICAgIGZvciAodmFyIHc9MDsgdyA8IGNvbnRvdXIubGVuZ3RoIC0gMTsgdysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlbW92ZV90aWxlX2VkZ2VzICYmIG91dHNpZGVUaWxlKGNvbnRvdXJbd10sIGNvbnRvdXJbdysxXSwgdGlsZV9lZGdlX3RvbGVyYW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIGRvbid0IGV4dHJ1ZGUgdGlsZSBlZGdlc1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFdhbGwgb3JkZXIgaXMgZGVwZW5kZW50IG9uIHdpbmRpbmcgb3JkZXIsIHNvIHRoYXQgbm9ybWFscyBmYWNlIG91dHdhcmRcbiAgICAgICAgICAgICAgICBsZXQgdzAsIHcxO1xuICAgICAgICAgICAgICAgIGlmICh3aW5kaW5nID09PSAnQ0NXJykge1xuICAgICAgICAgICAgICAgICAgICB3MCA9IHc7XG4gICAgICAgICAgICAgICAgICAgIHcxID0gdysxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdzAgPSB3KzE7XG4gICAgICAgICAgICAgICAgICAgIHcxID0gdztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBUd28gdHJpYW5nbGVzIGZvciB0aGUgcXVhZCBmb3JtZWQgYnkgZWFjaCB2ZXJ0ZXggcGFpciwgZ29pbmcgZnJvbSBib3R0b20gdG8gdG9wIGhlaWdodFxuICAgICAgICAgICAgICAgIHZhciB3YWxsX3ZlcnRpY2VzID0gW1xuICAgICAgICAgICAgICAgICAgICAvLyBUcmlhbmdsZVxuICAgICAgICAgICAgICAgICAgICBbY29udG91clt3MV1bMF0sIGNvbnRvdXJbdzFdWzFdLCBtYXhfel0sXG4gICAgICAgICAgICAgICAgICAgIFtjb250b3VyW3cxXVswXSwgY29udG91clt3MV1bMV0sIG1pbl96XSxcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRvdXJbdzBdWzBdLCBjb250b3VyW3cwXVsxXSwgbWluX3pdLFxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlhbmdsZVxuICAgICAgICAgICAgICAgICAgICBbY29udG91clt3MF1bMF0sIGNvbnRvdXJbdzBdWzFdLCBtaW5fel0sXG4gICAgICAgICAgICAgICAgICAgIFtjb250b3VyW3cwXVswXSwgY29udG91clt3MF1bMV0sIG1heF96XSxcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRvdXJbdzFdWzBdLCBjb250b3VyW3cxXVsxXSwgbWF4X3pdXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIC8vIENhbGMgdGhlIG5vcm1hbCBvZiB0aGUgd2FsbCBmcm9tIHVwIHZlY3RvciBhbmQgb25lIHNlZ21lbnQgb2YgdGhlIHdhbGwgdHJpYW5nbGVzXG4gICAgICAgICAgICAgICAgbGV0IHdhbGxfdmVjID0gVmVjdG9yLm5vcm1hbGl6ZShbY29udG91clt3MV1bMF0gLSBjb250b3VyW3cwXVswXSwgY29udG91clt3MV1bMV0gLSBjb250b3VyW3cwXVsxXSwgMF0pO1xuICAgICAgICAgICAgICAgIGxldCBub3JtYWwgPSBWZWN0b3IuY3Jvc3ModXBfdmVjMywgd2FsbF92ZWMpO1xuXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHZlcnRleCB0ZW1wbGF0ZSB3aXRoIGN1cnJlbnQgc3VyZmFjZSBub3JtYWxcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbbm9ybWFsX2luZGV4ICsgMF0gPSBub3JtYWxbMF0gKiBub3JtYWxfbm9ybWFsaXplO1xuICAgICAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVtub3JtYWxfaW5kZXggKyAxXSA9IG5vcm1hbFsxXSAqIG5vcm1hbF9ub3JtYWxpemU7XG4gICAgICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlW25vcm1hbF9pbmRleCArIDJdID0gbm9ybWFsWzJdICogbm9ybWFsX25vcm1hbGl6ZTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIHd2PTA7IHd2IDwgd2FsbF92ZXJ0aWNlcy5sZW5ndGg7IHd2KyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlWzBdID0gd2FsbF92ZXJ0aWNlc1t3dl1bMF07XG4gICAgICAgICAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVsxXSA9IHdhbGxfdmVydGljZXNbd3ZdWzFdO1xuICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbMl0gPSB3YWxsX3ZlcnRpY2VzW3d2XVsyXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4Y29vcmRfaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVt0ZXhjb29yZF9pbmRleCArIDBdID0gdGV4Y29vcmRzW3d2XVswXSAqIHRleGNvb3JkX25vcm1hbGl6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleF90ZW1wbGF0ZVt0ZXhjb29yZF9pbmRleCArIDFdID0gdGV4Y29vcmRzW3d2XVsxXSAqIHRleGNvb3JkX25vcm1hbGl6ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZlcnRleF9kYXRhLmFkZFZlcnRleCh2ZXJ0ZXhfdGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gVHJpYW5ndWxhdGlvbiB1c2luZyBlYXJjdXRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvZWFyY3V0XG5leHBvcnQgZnVuY3Rpb24gdHJpYW5ndWxhdGVQb2x5Z29uIChjb250b3Vycykge1xuICAgIHJldHVybiBlYXJjdXQoY29udG91cnMpO1xufVxuIiwiLy8gR2VvbWV0cnkgYnVpbGRpbmcgZnVuY3Rpb25zXG5cbmltcG9ydCBWZWN0b3IgZnJvbSAnLi4vdmVjdG9yJztcbmltcG9ydCBHZW8gZnJvbSAnLi4vZ2VvJztcbmltcG9ydCB7IGRlZmF1bHRfdXZzLCBvdXRzaWRlVGlsZSB9IGZyb20gJy4vY29tbW9uJztcblxuY29uc3QgemVyb192ZWMyID0gWzAsIDBdO1xuXG4vLyBCdWlsZCB0ZXNzZWxsYXRlZCB0cmlhbmdsZXMgZm9yIGEgcG9seWxpbmVcbmNvbnN0IGNvcm5lcnNfZm9yX2NhcCA9IHtcbiAgICBidXR0OiAwLFxuICAgIHNxdWFyZTogMixcbiAgICByb3VuZDogM1xufTtcblxuY29uc3QgdHJpYW5nbGVzX2Zvcl9qb2luID0ge1xuICAgIG1pdGVyOiAwLFxuICAgIGJldmVsOiAxLFxuICAgIHJvdW5kOiAzXG59O1xuXG4vLyBTY2FsaW5nIGZhY3RvciB0byBhZGQgcHJlY2lzaW9uIHRvIGxpbmUgdGV4dHVyZSBWIGNvb3JkaW5hdGUgcGFja2VkIGFzIG5vcm1hbGl6ZWQgc2hvcnRcbmNvbnN0IHZfc2NhbGVfYWRqdXN0ID0gR2VvLnRpbGVfc2NhbGU7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBvbHlsaW5lcyAoXG4gICAgbGluZXMsXG4gICAgd2lkdGgsXG4gICAgdmVydGV4X2RhdGEsIHZlcnRleF90ZW1wbGF0ZSxcbiAgICB7XG4gICAgICAgIGNsb3NlZF9wb2x5Z29uLFxuICAgICAgICByZW1vdmVfdGlsZV9lZGdlcyxcbiAgICAgICAgdGlsZV9lZGdlX3RvbGVyYW5jZSxcbiAgICAgICAgdGV4Y29vcmRfaW5kZXgsXG4gICAgICAgIHRleGNvb3JkX3NjYWxlLFxuICAgICAgICB0ZXhjb29yZF9ub3JtYWxpemUsXG4gICAgICAgIHRleGNvb3JkX3JhdGlvLFxuICAgICAgICBzY2FsaW5nX2luZGV4LFxuICAgICAgICBzY2FsaW5nX25vcm1hbGl6ZSxcbiAgICAgICAgam9pbiwgY2FwLFxuICAgICAgICBtaXRlcl9saW1pdFxuICAgIH0pIHtcblxuICAgIHZhciBjb3JuZXJzT25DYXAgPSBjb3JuZXJzX2Zvcl9jYXBbY2FwXSB8fCAwOyAgICAgICAgIC8vIGRlZmF1bHQgJ2J1dHQnXG4gICAgdmFyIHRyaWFuZ2xlc09uSm9pbiA9IHRyaWFuZ2xlc19mb3Jfam9pbltqb2luXSB8fCAwOyAgLy8gZGVmYXVsdCAnbWl0ZXInXG5cbiAgICAvLyBDb25maWd1cmUgbWl0ZXIgbGltaXRcbiAgICBpZiAodHJpYW5nbGVzT25Kb2luID09PSAwKSB7XG4gICAgICAgIG1pdGVyX2xpbWl0ID0gbWl0ZXJfbGltaXQgfHwgMzsgLy8gZGVmYXVsdCBtaXRlciBsaW1pdFxuICAgICAgICB2YXIgbWl0ZXJfbGVuX3NxID0gbWl0ZXJfbGltaXQgKiBtaXRlcl9saW1pdDtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCB2YXJpYWJsZXNcbiAgICBpZiAodGV4Y29vcmRfaW5kZXgpIHtcbiAgICAgICAgdGV4Y29vcmRfbm9ybWFsaXplID0gdGV4Y29vcmRfbm9ybWFsaXplIHx8IDE7XG4gICAgICAgIHRleGNvb3JkX3JhdGlvID0gdGV4Y29vcmRfcmF0aW8gfHwgMTtcbiAgICAgICAgdmFyIFttaW5fdSwgbWluX3YsIG1heF91LCBtYXhfdl0gPSB0ZXhjb29yZF9zY2FsZSB8fCBkZWZhdWx0X3V2cztcbiAgICB9XG5cbiAgICAvLyBWYWx1ZXMgdGhhdCBhcmUgY29uc3RhbnQgZm9yIGVhY2ggbGluZSBhbmQgYXJlIHBhc3NlZCB0byBoZWxwZXIgZnVuY3Rpb25zXG4gICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICAgIHZlcnRleF9kYXRhLFxuICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGUsXG4gICAgICAgIGhhbGZfd2lkdGg6IHdpZHRoLzIsXG4gICAgICAgIHZlcnRpY2VzOiBbXSxcbiAgICAgICAgc2NhbGluZ19pbmRleCxcbiAgICAgICAgc2NhbGluZ19ub3JtYWxpemUsXG4gICAgICAgIHNjYWxpbmdWZWNzOiBzY2FsaW5nX2luZGV4ICYmIFtdLFxuICAgICAgICB0ZXhjb29yZF9pbmRleCxcbiAgICAgICAgdGV4Y29vcmRzOiB0ZXhjb29yZF9pbmRleCAmJiBbXSxcbiAgICAgICAgdGV4Y29vcmRfbm9ybWFsaXplLFxuICAgICAgICBtaW5fdSwgbWluX3YsIG1heF91LCBtYXhfdixcbiAgICAgICAgdl9zY2FsZTogMSAvICgod2lkdGggKiB0ZXhjb29yZF9yYXRpbykgKiB2X3NjYWxlX2FkanVzdCksIC8vIHNjYWxlcyBsaW5lIHRleHR1cmUgYXMgYSByYXRpbyBvZiB0aGUgbGluZSdzIHdpZHRoXG4gICAgICAgIHRvdGFsX2Rpc3Q6IDAsXG4gICAgICAgIG51bV9wYWlyczogMFxuICAgIH07XG5cbiAgICBmb3IgKHZhciBsbiA9IDA7IGxuIDwgbGluZXMubGVuZ3RoOyBsbisrKSB7XG4gICAgICAgIC8vIFJlbW92ZSBkdXBlIHBvaW50cyBmcm9tIGxpbmVzXG4gICAgICAgIHZhciBsaW5lID0gZGVkdXBlTGluZShsaW5lc1tsbl0sIGNsb3NlZF9wb2x5Z29uKTtcbiAgICAgICAgaWYgKCFsaW5lKSB7XG4gICAgICAgICAgICBjb250aW51ZTsgLy8gc2tpcCBpZiBubyB2YWxpZCBsaW5lIHJlbWFpbmluZ1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxpbmVTaXplID0gbGluZS5sZW5ndGg7XG5cbiAgICAgICAgLy8gSWdub3JlIG5vbi1saW5lc1xuICAgICAgICBpZiAobGluZVNpemUgPCAyKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICBJbml0aWFsaXplIHZhcmlhYmxlc1xuICAgICAgICB2YXIgY29vcmRQcmV2ID0gWzAsIDBdLCAvLyBQcmV2aW91cyBwb2ludCBjb29yZGluYXRlc1xuICAgICAgICAgICAgY29vcmRDdXJyID0gWzAsIDBdLCAvLyBDdXJyZW50IHBvaW50IGNvb3JkaW5hdGVzXG4gICAgICAgICAgICBjb29yZE5leHQgPSBbMCwgMF07IC8vIE5leHQgcG9pbnQgY29vcmRpbmF0ZXNcblxuICAgICAgICB2YXIgbm9ybVByZXYgPSBbMCwgMF0sICAvLyBSaWdodCBub3JtYWwgdG8gc2VnbWVudCBiZXR3ZWVuIHByZXZpb3VzIGFuZCBjdXJyZW50IG1fcG9pbnRzXG4gICAgICAgICAgICBub3JtQ3VyciA9IFswLCAwXSwgIC8vIFJpZ2h0IG5vcm1hbCBhdCBjdXJyZW50IHBvaW50LCBzY2FsZWQgZm9yIG1pdGVyIGpvaW50XG4gICAgICAgICAgICBub3JtTmV4dCA9IFswLCAwXTsgIC8vIFJpZ2h0IG5vcm1hbCB0byBzZWdtZW50IGJldHdlZW4gY3VycmVudCBhbmQgbmV4dCBtX3BvaW50c1xuXG4gICAgICAgIHZhciBpc1ByZXYgPSBmYWxzZSxcbiAgICAgICAgICAgIGlzTmV4dCA9IHRydWU7XG5cbiAgICAgICAgLy8gQWRkIHZlcnRpY2VzIHRvIGJ1ZmZlciBhY2NvcmRpbmcgdG8gdGhlaXIgaW5kZXhcbiAgICAgICAgaW5kZXhQYWlycyhjb250ZXh0KTtcblxuICAgICAgICAvLyBEbyB0aGlzIHdpdGggdGhlIHJlc3QgKGV4Y2VwdCB0aGUgbGFzdCBvbmUpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZVNpemUgOyBpKyspIHtcblxuICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBuZXh0IG9uZT9cbiAgICAgICAgICAgIGlzTmV4dCA9IGkrMSA8IGxpbmVTaXplO1xuXG4gICAgICAgICAgICBpZiAoaXNQcmV2KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBwcmV2aW91cyBvbmUsIGNvcHkgdGhlIGN1cnJlbnQgKHByZXZpb3VzKSB2YWx1ZXMgb24gKlByZXZcbiAgICAgICAgICAgICAgICBjb29yZFByZXYgPSBjb29yZEN1cnI7XG4gICAgICAgICAgICAgICAgbm9ybVByZXYgPSBWZWN0b3Iubm9ybWFsaXplKFZlY3Rvci5wZXJwKGNvb3JkUHJldiwgbGluZVtpXSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpID09PSAwICYmIGNsb3NlZF9wb2x5Z29uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyB0aGUgZmlyc3QgcG9pbnQgYW5kIGlzIGEgY2xvc2VkIHBvbHlnb25cblxuICAgICAgICAgICAgICAgIHZhciBuZWVkVG9DbG9zZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHJlbW92ZV90aWxlX2VkZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKG91dHNpZGVUaWxlKGxpbmVbaV0sIGxpbmVbbGluZVNpemUtMl0sIHRpbGVfZWRnZV90b2xlcmFuY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkVG9DbG9zZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG5lZWRUb0Nsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvb3JkUHJldiA9IGxpbmVbbGluZVNpemUtMl07XG4gICAgICAgICAgICAgICAgICAgIG5vcm1QcmV2ID0gVmVjdG9yLm5vcm1hbGl6ZShWZWN0b3IucGVycChjb29yZFByZXYsIGxpbmVbaV0pKTtcbiAgICAgICAgICAgICAgICAgICAgaXNQcmV2ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFzc2lnbiBjdXJyZW50IGNvb3JkaW5hdGVcbiAgICAgICAgICAgIGNvb3JkQ3VyciA9IGxpbmVbaV07XG5cbiAgICAgICAgICAgIGlmIChpc05leHQpIHtcbiAgICAgICAgICAgICAgICBjb29yZE5leHQgPSBsaW5lW2krMV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsb3NlZF9wb2x5Z29uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyB0aGUgbGFzdCBwb2ludCBpbiBhIGNsb3NlZCBwb2x5Z29uXG4gICAgICAgICAgICAgICAgY29vcmROZXh0ID0gbGluZVsxXTtcbiAgICAgICAgICAgICAgICBpc05leHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNOZXh0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyBub3QgdGhlIGxhc3Qgb25lIGdldCBuZXh0IGNvb3JkaW5hdGVzIGFuZCBjYWxjdWxhdGUgdGhlIHJpZ2h0IG5vcm1hbFxuXG4gICAgICAgICAgICAgICAgbm9ybU5leHQgPSBWZWN0b3Iubm9ybWFsaXplKFZlY3Rvci5wZXJwKGNvb3JkQ3VyciwgY29vcmROZXh0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlbW92ZV90aWxlX2VkZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRzaWRlVGlsZShjb29yZEN1cnIsIGNvb3JkTmV4dCwgdGlsZV9lZGdlX3RvbGVyYW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1DdXJyID0gVmVjdG9yLm5vcm1hbGl6ZShWZWN0b3IucGVycChjb29yZFByZXYsIGNvb3JkQ3VycikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJldikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZlcnRleFBhaXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkQ3Vyciwgbm9ybUN1cnIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQudGV4Y29vcmRzICYmIFZlY3Rvci5sZW5ndGgoVmVjdG9yLnN1Yihjb29yZEN1cnIsIGNvb3JkUHJldikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm51bV9wYWlycysrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHZlcnRpY2VzIHRvIGJ1ZmZlciBhY29yZGluZyB0aGVpciBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4UGFpcnMoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ByZXYgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyAgQ29tcHV0ZSBjdXJyZW50IG5vcm1hbFxuICAgICAgICAgICAgaWYgKGlzUHJldikge1xuICAgICAgICAgICAgICAgIC8vICBJZiB0aGVyZSBpcyBhIFBSRVZJT1VTIC4uLlxuICAgICAgICAgICAgICAgIGlmIChpc05leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gLi4uIGFuZCBhIE5FWFQgT05FLCBjb21wdXRlIHByZXZpb3VzIGFuZCBuZXh0IG5vcm1hbHMgKHNjYWxlZCBieSB0aGUgYW5nbGUgd2l0aCB0aGUgbGFzdCBwcmV2KVxuICAgICAgICAgICAgICAgICAgICBub3JtQ3VyciA9IFZlY3Rvci5ub3JtYWxpemUoVmVjdG9yLmFkZChub3JtUHJldiwgbm9ybU5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gMiAvICgxICsgTWF0aC5hYnMoVmVjdG9yLmRvdChub3JtUHJldiwgbm9ybUN1cnIpKSk7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1DdXJyID0gVmVjdG9yLm11bHQobm9ybUN1cnIsc2NhbGUqc2NhbGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIC4uLiBhbmQgdGhlcmUgaXMgTk9UIGEgTkVYVCBPTkUsIGNvcHkgdGhlIHByZXZpb3VzIG5leHQgb25lICh3aGljaCBpcyB0aGUgY3VycmVudCBvbmUpXG4gICAgICAgICAgICAgICAgICAgIG5vcm1DdXJyID0gVmVjdG9yLm5vcm1hbGl6ZShWZWN0b3IucGVycChjb29yZFByZXYsIGNvb3JkQ3VycikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgTk8gUFJFVklPVVMgLi4uXG4gICAgICAgICAgICAgICAgaWYgKGlzTmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAvLyAuLi4gYW5kIGEgTkVYVCBPTkUsXG4gICAgICAgICAgICAgICAgICAgIG5vcm1OZXh0ID0gVmVjdG9yLm5vcm1hbGl6ZShWZWN0b3IucGVycChjb29yZEN1cnIsIGNvb3JkTmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICBub3JtQ3VyciA9IG5vcm1OZXh0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIC4uLiBhbmQgTk8gTkVYVCBPTkUsIG5vdGhpbmcgdG8gZG8gKHdpdGhvdXQgcHJldiBvciBuZXh0IG9uZSB0aGlzIGlzIGp1c3QgYSBwb2ludClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNQcmV2IHx8IGlzTmV4dCkge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgdGhlIEJFR0lOTklORyBvZiBhIExJTkVcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCAmJiAhaXNQcmV2ICYmICFjbG9zZWRfcG9seWdvbikge1xuICAgICAgICAgICAgICAgICAgICBhZGRDYXAoY29vcmRDdXJyLCBub3JtQ3VyciwgY29ybmVyc09uQ2FwLCB0cnVlLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyAgTWl0ZXIgbGltaXQ6IGlmIG1pdGVyIGpvaW4gaXMgdG9vIHNoYXJwLCBjb252ZXJ0IHRvIGJldmVsIGluc3RlYWRcbiAgICAgICAgICAgICAgICBpZiAodHJpYW5nbGVzT25Kb2luID09PSAwICYmIFZlY3Rvci5sZW5ndGhTcShub3JtQ3VycikgPiBtaXRlcl9sZW5fc3EpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVzT25Kb2luID0gdHJpYW5nbGVzX2Zvcl9qb2luWydiZXZlbCddOyAvLyBzd2l0Y2ggdG8gYmV2ZWxcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGEgSk9JTlxuICAgICAgICAgICAgICAgIGlmICh0cmlhbmdsZXNPbkpvaW4gIT09IDAgJiYgaXNQcmV2ICYmIGlzTmV4dCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRKb2luKFtjb29yZFByZXYsIGNvb3JkQ3VyciwgY29vcmROZXh0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm9ybVByZXYsbm9ybUN1cnIsIG5vcm1OZXh0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZXNPbkpvaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkVmVydGV4UGFpcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkQ3Vyciwgbm9ybUN1cnIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnRleGNvb3JkcyAmJiBWZWN0b3IubGVuZ3RoKFZlY3Rvci5zdWIoY29vcmRDdXJyLCBjb29yZFByZXYpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpc05leHQpIHtcbiAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm51bV9wYWlycysrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlzUHJldiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdmVydGljZXMgdG8gYnVmZmVyIGFjY29yZGluZyB0byB0aGVpciBpbmRleFxuICAgICAgICBpbmRleFBhaXJzKGNvbnRleHQpO1xuXG4gICAgICAgICAvLyBJZiBpdCdzIHRoZSBFTkQgb2YgYSBMSU5FXG4gICAgICAgIGlmKCFjbG9zZWRfcG9seWdvbikge1xuICAgICAgICAgICAgYWRkQ2FwKGNvb3JkQ3Vyciwgbm9ybUN1cnIsIGNvcm5lcnNPbkNhcCAsIGZhbHNlLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gUmVtb3ZlIGR1cGxpY2F0ZSBwb2ludHMgZnJvbSBhIGxpbmUsIGNyZWF0aW5nIGEgbmV3IGxpbmUgb25seSB3aGVuIHBvaW50cyBtdXN0IGJlIHJlbW92ZWRcbmZ1bmN0aW9uIGRlZHVwZUxpbmUgKGxpbmUsIGNsb3NlZCkge1xuICAgIGxldCBpLCBkdXBlcztcblxuICAgIC8vIENvbGxlY3QgZHVwZSBwb2ludHNcbiAgICBmb3IgKGk9MDsgaSA8IGxpbmUubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChsaW5lW2ldWzBdID09PSBsaW5lW2krMV1bMF0gJiYgbGluZVtpXVsxXSA9PT0gbGluZVtpKzFdWzFdKSB7XG4gICAgICAgICAgICBkdXBlcyA9IGR1cGVzIHx8IFtdO1xuICAgICAgICAgICAgZHVwZXMucHVzaChpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBkdXBlIHBvaW50c1xuICAgIGlmIChkdXBlcykge1xuICAgICAgICBsaW5lID0gbGluZS5zbGljZSgwKTtcbiAgICAgICAgZHVwZXMuZm9yRWFjaChkID0+IGxpbmUuc3BsaWNlKGQsIDEpKTtcbiAgICB9XG5cbiAgICAvLyBMaW5lIG5lZWRzIGF0IGxlYXN0IDIgcG9pbnRzLCBwb2x5Z29uIG5lZWRzIGF0IGxlYXN0IDMgKCsxIHRvIGNsb3NlKVxuICAgIGlmICghY2xvc2VkICYmIGxpbmUubGVuZ3RoIDwgMiB8fCBjbG9zZWQgJiYgbGluZS5sZW5ndGggPCA0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmU7XG59XG5cbi8vIEFkZCB0byBlcXVpZGlzdGFudCBwYWlycyBvZiB2ZXJ0aWNlcyAoaW50ZXJuYWwgbWV0aG9kIGZvciBwb2x5bGluZSBidWlsZGVyKVxuZnVuY3Rpb24gYWRkVmVydGV4KGNvb3JkLCBub3JtYWwsIHV2LCB7IGhhbGZfd2lkdGgsIHZlcnRpY2VzLCBzY2FsaW5nVmVjcywgdGV4Y29vcmRzIH0pIHtcbiAgICBpZiAoc2NhbGluZ1ZlY3MpIHtcbiAgICAgICAgLy8gIGEuIElmIHNjYWxpbmcgaXMgb24gYWRkIHRoZSB2ZXJ0ZXggKHRoZSBjdXJyQ29vcmQpIGFuZCB0aGUgc2NhbGluZyBWZWNzIChub3JtYWxzIHBvaW50aW5nIHdoZXJlIHRvIGV4dHJ1ZGUgdGhlIHZlcnRpY2VzKVxuICAgICAgICB2ZXJ0aWNlcy5wdXNoKGNvb3JkKTtcbiAgICAgICAgc2NhbGluZ1ZlY3MucHVzaChub3JtYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICBiLiBBZGQgdGhlIGV4dHJ1ZGVkIHZlcnRpY2VzXG4gICAgICAgIHZlcnRpY2VzLnB1c2goW2Nvb3JkWzBdICsgbm9ybWFsWzBdICogaGFsZl93aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRbMV0gKyBub3JtYWxbMV0gKiBoYWxmX3dpZHRoXSk7XG4gICAgfVxuXG4gICAgLy8gYykgQWRkIFVWcyBpZiB0aGV5IGFyZSBlbmFibGVkXG4gICAgaWYgKHRleGNvb3Jkcykge1xuICAgICAgICB0ZXhjb29yZHMucHVzaCh1dik7XG4gICAgfVxufVxuXG4vLyAgQWRkIHRvIGVxdWlkaXN0YW50IHBhaXJzIG9mIHZlcnRpY2VzIChpbnRlcm5hbCBtZXRob2QgZm9yIHBvbHlsaW5lIGJ1aWxkZXIpXG5mdW5jdGlvbiBhZGRWZXJ0ZXhQYWlyIChjb29yZCwgbm9ybWFsLCBkaXN0LCBjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQudGV4Y29vcmRzKSB7XG4gICAgICAgIGNvbnRleHQudG90YWxfZGlzdCArPSBkaXN0ICogY29udGV4dC52X3NjYWxlO1xuICAgICAgICBhZGRWZXJ0ZXgoY29vcmQsIG5vcm1hbCwgW2NvbnRleHQubWF4X3UsIGNvbnRleHQudG90YWxfZGlzdF0sIGNvbnRleHQpO1xuICAgICAgICBhZGRWZXJ0ZXgoY29vcmQsIFZlY3Rvci5uZWcobm9ybWFsKSwgW2NvbnRleHQubWluX3UsIGNvbnRleHQudG90YWxfZGlzdF0sIGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYWRkVmVydGV4KGNvb3JkLCBub3JtYWwsIG51bGwsIGNvbnRleHQpO1xuICAgICAgICBhZGRWZXJ0ZXgoY29vcmQsIFZlY3Rvci5uZWcobm9ybWFsKSwgbnVsbCwgY29udGV4dCk7XG4gICAgfVxufVxuXG4vLyAgVGVzc2FsYXRlIGEgRkFOIGdlb21ldHJ5IGJldHdlZW4gcG9pbnRzIEEgICAgICAgQlxuLy8gIHVzaW5nIHRoZWlyIG5vcm1hbHMgZnJvbSBhIGNlbnRlciAgICAgICAgXFwgLiAuIC9cbi8vICBhbmQgaW50ZXJwb2xhdGluZyB0aGVpciBVVnMgICAgICAgICAgICAgICBcXCBwIC9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFwuL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1xuZnVuY3Rpb24gYWRkRmFuIChjb29yZCwgbkEsIG5DLCBuQiwgdUEsIHVDLCB1Qiwgc2lnbmVkLCBudW1UcmlhbmdsZXMsIGNvbnRleHQpIHtcblxuICAgIGlmIChudW1UcmlhbmdsZXMgPCAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBZGQgcHJldmlvdXMgdmVydGljZXMgdG8gYnVmZmVyIGFuZCBjbGVhciB0aGUgYnVmZmVycyBhbmQgaW5kZXggcGFpcnNcbiAgICAvLyBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byBhZGQgbW9yZSB0cmlhbmdsZXMuXG4gICAgaW5kZXhQYWlycyhjb250ZXh0KTtcblxuICAgIC8vIEluaXRpYWwgcGFyYW1ldGVyc1xuICAgIHZhciBub3JtQ3VyciA9IFZlY3Rvci5zZXQobkEpO1xuICAgIHZhciBub3JtUHJldiA9IFswLDBdO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIEEgYW5kIEJcbiAgICB2YXIgYW5nbGVfZGVsdGEgPSBWZWN0b3IuYW5nbGVCZXR3ZWVuKG5BLCBuQik7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFuZ2xlIGZvciBlYWNoIHRyaWFuZ2xlXG4gICAgdmFyIGFuZ2xlX3N0ZXAgPSBhbmdsZV9kZWx0YS9udW1UcmlhbmdsZXM7XG5cbiAgICAvLyBKb2lucyB0aGF0IHR1cm4gbGVmdCBvciByaWdodCBiZWhhdmUgZGlmZXJlbnRseS4uLlxuICAgIC8vIHRyaWFuZ2xlcyBuZWVkIHRvIGJlIHJvdGF0ZWQgaW4gZGlmZXJlbnQgZGlyZWN0aW9uc1xuICAgIGlmICghc2lnbmVkKSB7XG4gICAgICAgIGFuZ2xlX3N0ZXAgKj0gLTE7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQudGV4Y29vcmRzKSB7XG4gICAgICAgIHZhciB1dkN1cnIgPSBWZWN0b3Iuc2V0KHVBKTtcbiAgICAgICAgdmFyIHV2X2RlbHRhID0gVmVjdG9yLmRpdihWZWN0b3Iuc3ViKHVCLHVBKSwgbnVtVHJpYW5nbGVzKTtcbiAgICB9XG5cbiAgICAvLyAgQWRkIHRoZSBGSVJTVCBhbmQgQ0VOVEVSIHZlcnRleFxuICAgIC8vICBUaGUgdHJpYW5nbGVzIHdpbGwgYmUgY29tcG9zZWQgaW4gYSBGQU4gc3R5bGUgYXJvdW5kIGl0XG4gICAgYWRkVmVydGV4KGNvb3JkLCBuQywgdUMsIGNvbnRleHQpO1xuXG4gICAgLy8gIEFkZCBmaXJzdCBjb3JuZXJcbiAgICBhZGRWZXJ0ZXgoY29vcmQsIG5vcm1DdXJyLCB1QSwgY29udGV4dCk7XG5cbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGNvcm5lcnNcbiAgICBmb3IgKHZhciB0ID0gMDsgdCA8IG51bVRyaWFuZ2xlczsgdCsrKSB7XG4gICAgICAgIG5vcm1QcmV2ID0gVmVjdG9yLm5vcm1hbGl6ZShub3JtQ3Vycik7XG4gICAgICAgIG5vcm1DdXJyID0gVmVjdG9yLnJvdChWZWN0b3Iubm9ybWFsaXplKG5vcm1DdXJyKSwgYW5nbGVfc3RlcCk7ICAgICAvLyAgUm90YXRlIHRoZSBleHRydXNpb24gbm9ybWFsXG4gICAgICAgIGlmIChjb250ZXh0LnRleGNvb3Jkcykge1xuICAgICAgICAgICAgdXZDdXJyID0gVmVjdG9yLmFkZCh1dkN1cnIsdXZfZGVsdGEpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFZlcnRleChjb29yZCwgbm9ybUN1cnIsIHV2Q3VyciwgY29udGV4dCk7ICAgICAgLy8gIEFkZCBjb21wdXRlZCBjb3JuZXJcbiAgICB9XG5cbiAgICAvLyBJbmRleCB0aGUgdmVydGljZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVRyaWFuZ2xlczsgaSsrKSB7XG4gICAgICAgIGlmIChzaWduZWQpIHtcbiAgICAgICAgICAgIGFkZEluZGV4KGkrMiwgY29udGV4dCk7XG4gICAgICAgICAgICBhZGRJbmRleCgwLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGFkZEluZGV4KGkrMSwgY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZGRJbmRleChpKzEsIGNvbnRleHQpO1xuICAgICAgICAgICAgYWRkSW5kZXgoMCwgY29udGV4dCk7XG4gICAgICAgICAgICBhZGRJbmRleChpKzIsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgdGhlIGJ1ZmZlclxuICAgIGNvbnRleHQudmVydGljZXMgPSBbXTtcbiAgICBpZiAoY29udGV4dC5zY2FsaW5nVmVjcykge1xuICAgICAgICBjb250ZXh0LnNjYWxpbmdWZWNzID0gW107XG4gICAgfVxuICAgIGlmIChjb250ZXh0LnRleGNvb3Jkcykge1xuICAgICAgICBjb250ZXh0LnRleGNvb3JkcyA9IFtdO1xuICAgIH1cbn1cblxuLy8gIGFkZEJldmVsICAgIEEgLS0tLS0gQlxuLy8gICAgICAgICAgICAgLyBcXCAsIC4gLyBcXFxuLy8gICAgICAgICAgIC8gICAvXFwgICAvXFwgIFxcXG4vLyAgICAgICAgICAgICAgLyAgXFwgLyAgIFxcIFxcXG4vLyAgICAgICAgICAgICAgICAvIEMgXFxcbmZ1bmN0aW9uIGFkZEJldmVsIChjb29yZCwgbkEsIG5DLCBuQiwgdUEsIHVDLCB1Qiwgc2lnbmVkLCBjb250ZXh0KSB7XG4gICAgLy8gQWRkIHByZXZpb3VzIHZlcnRpY2VzIHRvIGJ1ZmZlciBhbmQgY2xlYXIgdGhlIGJ1ZmZlcnMgYW5kIGluZGV4IHBhaXJzXG4gICAgLy8gYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gYWRkIG1vcmUgdHJpYW5nbGVzLlxuICAgIGluZGV4UGFpcnMoY29udGV4dCk7XG5cbiAgICAvLyAgQWRkIHRoZSBGSVJTVCBhbmQgQ0VOVEVSIHZlcnRleFxuICAgIGFkZFZlcnRleChjb29yZCwgbkMsIHVDLCBjb250ZXh0KTtcbiAgICBhZGRWZXJ0ZXgoY29vcmQsIG5BLCB1QSwgY29udGV4dCk7XG4gICAgYWRkVmVydGV4KGNvb3JkLCBuQiwgdUIsIGNvbnRleHQpO1xuXG4gICAgaWYgKHNpZ25lZCkge1xuICAgICAgICBhZGRJbmRleCgyLCBjb250ZXh0KTtcbiAgICAgICAgYWRkSW5kZXgoMCwgY29udGV4dCk7XG4gICAgICAgIGFkZEluZGV4KDEsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZEluZGV4KDEsIGNvbnRleHQpO1xuICAgICAgICBhZGRJbmRleCgwLCBjb250ZXh0KTtcbiAgICAgICAgYWRkSW5kZXgoMiwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgdGhlIGJ1ZmZlclxuICAgIGNvbnRleHQudmVydGljZXMgPSBbXTtcbiAgICBpZiAoY29udGV4dC5zY2FsaW5nVmVjcykge1xuICAgICAgICBjb250ZXh0LnNjYWxpbmdWZWNzID0gW107XG4gICAgfVxuICAgIGlmIChjb250ZXh0LnRleGNvb3Jkcykge1xuICAgICAgICBjb250ZXh0LnRleGNvb3JkcyA9IFtdO1xuICAgIH1cbn1cblxuXG4vLyAgVGVzc2FsYXRlIGEgU1FVQVJFIGdlb21ldHJ5IGJldHdlZW4gQSBhbmQgQiAgICAgKyAuLi4uLi4uLitcbi8vICBhbmQgaW50ZXJwb2xhdGluZyB0aGVpciBVVnMgICAgICAgICAgICAgICAgICAgICA6IFxcICAyICAvIDpcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDFcXCAgIC8zIDpcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIC0tIEMgLS0gQlxuZnVuY3Rpb24gYWRkU3F1YXJlIChjb29yZCwgbkEsIG5CLCB1QSwgdUMsIHVCLCBzaWduZWQsIGNvbnRleHQpIHtcblxuICAgIC8vIEFkZCBwcmV2aW91cyB2ZXJ0aWNlcyB0byBidWZmZXIgYW5kIGNsZWFyIHRoZSBidWZmZXJzIGFuZCBpbmRleCBwYWlyc1xuICAgIC8vIGJlY2F1c2Ugd2UgYXJlIGdvaW5nIHRvIGFkZCBtb3JlIHRyaWFuZ2xlcy5cbiAgICBpbmRleFBhaXJzKGNvbnRleHQpO1xuXG4gICAgLy8gSW5pdGlhbCBwYXJhbWV0ZXJzXG4gICAgdmFyIG5vcm1DdXJyID0gVmVjdG9yLnNldChuQSk7XG4gICAgdmFyIG5vcm1QcmV2ID0gWzAsMF07XG4gICAgaWYgKGNvbnRleHQudGV4Y29vcmRzKSB7XG4gICAgICAgIHZhciB1dkN1cnIgPSBWZWN0b3Iuc2V0KHVBKTtcbiAgICAgICAgdmFyIHV2X2RlbHRhID0gVmVjdG9yLmRpdihWZWN0b3Iuc3ViKHVCLHVBKSwgNCk7XG4gICAgfVxuXG4gICAgLy8gRmlyc3QgYW5kIGxhc3QgY2FwIGhhdmUgZGlmZmVyZW50IGRpcmVjdGlvbnNcbiAgICB2YXIgYW5nbGVfc3RlcCA9IDAuNzg1Mzk4MTYzMzk7IC8vIFBJLzQgPSA0NSBkZWdyZWVzXG4gICAgaWYgKCFzaWduZWQpIHtcbiAgICAgICAgYW5nbGVfc3RlcCAqPSAtMTtcbiAgICB9XG5cbiAgICAvLyAgQWRkIHRoZSBGSVJTVCBhbmQgQ0VOVEVSIHZlcnRleFxuICAgIC8vICBUaGUgdHJpYW5nbGVzIHdpbGwgYmUgYWRkIGluIGEgRkFOIHN0eWxlIGFyb3VuZCBpdFxuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEEgLS0gQ1xuICAgIGFkZFZlcnRleChjb29yZCwgemVyb192ZWMyLCB1QywgY29udGV4dCk7XG5cbiAgICAvLyAgQWRkIGZpcnN0IGNvcm5lciAgICAgK1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEEgLS0gQ1xuICAgIGFkZFZlcnRleChjb29yZCwgbm9ybUN1cnIsIHVBLCBjb250ZXh0KTtcblxuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgY29vcm5lcnMgY29tcGxldGluZyB0aGUgdHJpYW5nbGVzXG4gICAgLy8gKGV4Y2VwdCB0aGUgY29ybmVyIDEgdG8gc2F2ZSBvbmUgdHJpYW5nbGUgdG8gYmUgZHJhdyApXG4gICAgZm9yICh2YXIgdCA9IDA7IHQgPCA0OyB0KyspIHtcblxuICAgICAgICAvLyAwICAgICAxICAgICAyXG4gICAgICAgIC8vICArIC4uLi4uLi4uK1xuICAgICAgICAvLyAgOiBcXCAgICAgLyA6XG4gICAgICAgIC8vICA6ICBcXCAgIC8gIDpcbiAgICAgICAgLy8gIEEgLS0gQyAtLSBCICAzXG5cbiAgICAgICAgbm9ybVByZXYgPSBWZWN0b3Iubm9ybWFsaXplKG5vcm1DdXJyKTtcbiAgICAgICAgbm9ybUN1cnIgPSBWZWN0b3Iucm90KCBWZWN0b3Iubm9ybWFsaXplKG5vcm1DdXJyKSwgYW5nbGVfc3RlcCk7ICAgICAvLyAgUm90YXRlIHRoZSBleHRydXNpb24gbm9ybWFsXG5cbiAgICAgICAgaWYgKHQgPT09IDAgfHwgdCA9PT0gMikge1xuICAgICAgICAgICAgLy8gSW4gb3JkZXIgdG8gbWFrZSB0aGlzIFwiZmFuXCIgbG9vayBsaWtlIGEgc3F1YXJlIHRoZSBtaXR0ZXJzIG5lZWQgdG8gYmUgc3RyZWFjaFxuICAgICAgICAgICAgdmFyIHNjYWxlID0gMiAvICgxICsgTWF0aC5hYnMoVmVjdG9yLmRvdChub3JtUHJldiwgbm9ybUN1cnIpKSk7XG4gICAgICAgICAgICBub3JtQ3VyciA9IFZlY3Rvci5tdWx0KG5vcm1DdXJyLCBzY2FsZSpzY2FsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC50ZXhjb29yZHMpIHtcbiAgICAgICAgICAgIHV2Q3VyciA9IFZlY3Rvci5hZGQodXZDdXJyLHV2X2RlbHRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ICE9PSAxKSB7XG4gICAgICAgICAgICAvLyAgQWRkIGNvbXB1dGVkIGNvcm5lciAoZXhjZXB0IHRoZSBjb3JuZXIgMSlcbiAgICAgICAgICAgIGFkZFZlcnRleChjb29yZCwgbm9ybUN1cnIsIHV2Q3VyciwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICBpZiAoc2lnbmVkKSB7XG4gICAgICAgICAgICBhZGRJbmRleChpKzIsIGNvbnRleHQpO1xuICAgICAgICAgICAgYWRkSW5kZXgoMCwgY29udGV4dCk7XG4gICAgICAgICAgICBhZGRJbmRleChpKzEsIGNvbnRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWRkSW5kZXgoaSsxLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGFkZEluZGV4KDAsIGNvbnRleHQpO1xuICAgICAgICAgICAgYWRkSW5kZXgoaSsyLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIHRoZSBidWZmZXJcbiAgICBjb250ZXh0LnZlcnRpY2VzID0gW107XG4gICAgaWYgKGNvbnRleHQuc2NhbGluZ1ZlY3MpIHtcbiAgICAgICAgY29udGV4dC5zY2FsaW5nVmVjcyA9IFtdO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC50ZXhjb29yZHMpIHtcbiAgICAgICAgY29udGV4dC50ZXhjb29yZHMgPSBbXTtcbiAgICB9XG59XG5cbi8vICBBZGQgc3BlY2lhbCBqb2lucyAobm90IG1pdGVyKSB0eXBlcyB0aGF0IHJlcXVpcmUgRkFOIHRlc3NlbGxhdGlvbnNcbi8vICBVc2luZyBodHRwOi8vd3d3LmNvZGVwcm9qZWN0LmNvbS9BcnRpY2xlcy8yMjY1NjkvRHJhd2luZy1wb2x5bGluZXMtYnktdGVzc2VsbGF0aW9uIGFzIHJlZmVyZW5jZVxuZnVuY3Rpb24gYWRkSm9pbiAoY29vcmRzLCBub3JtYWxzLCBuVHJpYW5nbGVzLCBjb250ZXh0KSB7XG4gICAgdmFyIHNpZ25lZCA9IFZlY3Rvci5zaWduZWRfYXJlYShjb29yZHNbMF0sIGNvb3Jkc1sxXSwgY29vcmRzWzJdKSA+IDA7XG4gICAgdmFyIG5BID0gbm9ybWFsc1swXSwgICAgICAgICAgICAgIC8vIG5vcm1hbCB0byBwb2ludCBBIChhVClcbiAgICAgICAgbkMgPSBWZWN0b3IubmVnKG5vcm1hbHNbMV0pLCAgLy8gbm9ybWFsIHRvIGNlbnRlciAoLXZQKVxuICAgICAgICBuQiA9IG5vcm1hbHNbMl07ICAgICAgICAgICAgICAvLyBub3JtYWwgdG8gcG9pbnQgQiAoYlQpXG4gICAgdmFyIHVBLCB1QiwgdUM7XG5cbiAgICBpZiAoY29udGV4dC50ZXhjb29yZHMpIHtcbiAgICAgICAgY29udGV4dC50b3RhbF9kaXN0ICs9IFZlY3Rvci5sZW5ndGgoVmVjdG9yLnN1Yihjb29yZHNbMV0sIGNvb3Jkc1swXSkpICogY29udGV4dC52X3NjYWxlO1xuICAgICAgICB1QSA9IFtjb250ZXh0Lm1heF91LCBjb250ZXh0LnRvdGFsX2Rpc3RdO1xuICAgICAgICB1QyA9IFtjb250ZXh0Lm1pbl91LCBjb250ZXh0LnRvdGFsX2Rpc3RdO1xuICAgICAgICB1QiA9IHVBO1xuICAgIH1cblxuICAgIGlmIChzaWduZWQpIHtcbiAgICAgICAgYWRkVmVydGV4KGNvb3Jkc1sxXSwgbkEsIHVBLCBjb250ZXh0KTtcbiAgICAgICAgYWRkVmVydGV4KGNvb3Jkc1sxXSwgbkMsIHVDLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBuQSA9IFZlY3Rvci5uZWcobm9ybWFsc1swXSk7XG4gICAgICAgIG5DID0gbm9ybWFsc1sxXTtcbiAgICAgICAgbkIgPSBWZWN0b3IubmVnKG5vcm1hbHNbMl0pO1xuXG4gICAgICAgIGlmIChjb250ZXh0LnRleGNvb3Jkcykge1xuICAgICAgICAgICAgdUEgPSBbY29udGV4dC5taW5fdSwgY29udGV4dC50b3RhbF9kaXN0XTtcbiAgICAgICAgICAgIHVDID0gW2NvbnRleHQubWF4X3UsIGNvbnRleHQudG90YWxfZGlzdF07XG4gICAgICAgICAgICB1QiA9IHVBO1xuICAgICAgICB9XG4gICAgICAgIGFkZFZlcnRleChjb29yZHNbMV0sIG5DLCB1QywgY29udGV4dCk7XG4gICAgICAgIGFkZFZlcnRleChjb29yZHNbMV0sIG5BLCB1QSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKG5UcmlhbmdsZXMgPT09IDEpIHtcbiAgICAgICAgYWRkQmV2ZWwoY29vcmRzWzFdLCBuQSwgbkMsIG5CLCB1QSwgdUMsIHVCLCBzaWduZWQsIGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAoblRyaWFuZ2xlcyA+IDEpe1xuICAgICAgICBhZGRGYW4oY29vcmRzWzFdLCBuQSwgbkMsIG5CLCB1QSwgdUMsIHVCLCBzaWduZWQsIG5UcmlhbmdsZXMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChzaWduZWQpIHtcbiAgICAgICAgYWRkVmVydGV4KGNvb3Jkc1sxXSwgbkIsIHVCLCBjb250ZXh0KTtcbiAgICAgICAgYWRkVmVydGV4KGNvb3Jkc1sxXSwgbkMsIHVDLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhZGRWZXJ0ZXgoY29vcmRzWzFdLCBuQywgdUMsIGNvbnRleHQpO1xuICAgICAgICBhZGRWZXJ0ZXgoY29vcmRzWzFdLCBuQiwgdUIsIGNvbnRleHQpO1xuICAgIH1cbn1cblxuLy8gIEZ1bmN0aW9uIHRvIGFkZCB0aGUgdmVydGV4IG5lZWQgZm9yIGxpbmUgY2Fwcyxcbi8vICBiZWNhdXNlIHJlLXVzZSB0aGUgYnVmZmVycyBuZWVkcyB0byBiZSBhdCB0aGUgZW5kXG5mdW5jdGlvbiBhZGRDYXAgKGNvb3JkLCBub3JtYWwsIG51bUNvcm5lcnMsIGlzQmVnaW5uaW5nLCBjb250ZXh0KSB7XG5cbiAgICBpZiAobnVtQ29ybmVycyA8IDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFVWc1xuICAgIHZhciB1dkEsIHV2QiwgdXZDO1xuICAgIGlmIChjb250ZXh0LnRleGNvb3Jkcykge1xuICAgICAgICB1dkMgPSBbY29udGV4dC5taW5fdSsoY29udGV4dC5tYXhfdS1jb250ZXh0Lm1pbl91KS8yLCBjb250ZXh0LnRvdGFsX2Rpc3RdOyAgIC8vIENlbnRlciBwb2ludCBVVnNcbiAgICAgICAgdXZBID0gW2NvbnRleHQubWluX3UsIGNvbnRleHQudG90YWxfZGlzdF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCZWdpbm5pbmcgYW5nbGUgVVZzXG4gICAgICAgIHV2QiA9IFtjb250ZXh0Lm1heF91LCBjb250ZXh0LnRvdGFsX2Rpc3RdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kaW5nIGFuZ2xlIFVWc1xuICAgIH1cblxuICAgIGlmICggbnVtQ29ybmVycyA9PT0gMiApe1xuICAgICAgICAvLyBJZiBjYXBzIGFyZSBzZXQgYXMgc3F1YXJlc1xuICAgICAgICBhZGRTcXVhcmUoIGNvb3JkLFxuICAgICAgICAgICAgICAgICAgIFZlY3Rvci5uZWcobm9ybWFsKSwgbm9ybWFsLFxuICAgICAgICAgICAgICAgICAgIHV2QSwgdXZDLCB1dkIsXG4gICAgICAgICAgICAgICAgICAgaXNCZWdpbm5pbmcsXG4gICAgICAgICAgICAgICAgICAgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgY2FwcyBhcmUgc2V0IGFzIHJvdW5kICggbnVtQ29ybmVycz09PTMgKVxuICAgICAgICBhZGRGYW4oIGNvb3JkLFxuICAgICAgICAgICAgICAgIFZlY3Rvci5uZWcobm9ybWFsKSwgemVyb192ZWMyLCBub3JtYWwsXG4gICAgICAgICAgICAgICAgdXZBLCB1dkMsIHV2QixcbiAgICAgICAgICAgICAgICBpc0JlZ2lubmluZywgbnVtQ29ybmVycyoyLCBjb250ZXh0KTtcbiAgICB9XG59XG5cbi8vIEFkZCBhIHZlcnRleCBiYXNlZCBvbiB0aGUgaW5kZXggcG9zaXRpb24gaW50byB0aGUgVkJPIChpbnRlcm5hbCBtZXRob2QgZm9yIHBvbHlsaW5lIGJ1aWxkZXIpXG5mdW5jdGlvbiBhZGRJbmRleCAoaW5kZXgsIHsgdmVydGV4X2RhdGEsIHZlcnRleF90ZW1wbGF0ZSwgaGFsZl93aWR0aCwgdmVydGljZXMsIHNjYWxpbmdfaW5kZXgsIHNjYWxpbmdfbm9ybWFsaXplLCBzY2FsaW5nVmVjcywgdGV4Y29vcmRfaW5kZXgsIHRleGNvb3JkcywgdGV4Y29vcmRfbm9ybWFsaXplIH0pIHtcbiAgICAvLyBQcmV2ZW50IGFjY2VzcyB0byB1bmRlZmluZWQgdmVydGljZXNcbiAgICBpZiAoaW5kZXggPj0gdmVydGljZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzZXQgdmVydGV4IHBvc2l0aW9uXG4gICAgdmVydGV4X3RlbXBsYXRlWzBdID0gdmVydGljZXNbaW5kZXhdWzBdO1xuICAgIHZlcnRleF90ZW1wbGF0ZVsxXSA9IHZlcnRpY2VzW2luZGV4XVsxXTtcblxuICAgIC8vIHNldCBVVnNcbiAgICBpZiAodGV4Y29vcmRfaW5kZXgpIHtcbiAgICAgICAgdmVydGV4X3RlbXBsYXRlW3RleGNvb3JkX2luZGV4ICsgMF0gPSB0ZXhjb29yZHNbaW5kZXhdWzBdICogdGV4Y29vcmRfbm9ybWFsaXplO1xuICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbdGV4Y29vcmRfaW5kZXggKyAxXSA9IHRleGNvb3Jkc1tpbmRleF1bMV0gKiB0ZXhjb29yZF9ub3JtYWxpemU7XG4gICAgfVxuXG4gICAgLy8gc2V0IFNjYWxpbmcgdmVydGV4IChYLCBZIG5vcm1hbCBkaXJlY3Rpb24gKyBaIGhhbGZfd2lkdGggYXMgYXR0cmlidXRlKVxuICAgIGlmIChzY2FsaW5nX2luZGV4KSB7XG4gICAgICAgIHZlcnRleF90ZW1wbGF0ZVtzY2FsaW5nX2luZGV4ICsgMF0gPSBzY2FsaW5nVmVjc1tpbmRleF1bMF0gKiBzY2FsaW5nX25vcm1hbGl6ZTtcbiAgICAgICAgdmVydGV4X3RlbXBsYXRlW3NjYWxpbmdfaW5kZXggKyAxXSA9IHNjYWxpbmdWZWNzW2luZGV4XVsxXSAqIHNjYWxpbmdfbm9ybWFsaXplO1xuICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGVbc2NhbGluZ19pbmRleCArIDJdID0gaGFsZl93aWR0aDtcbiAgICB9XG5cbiAgICAvLyAgQWRkIHZlcnRleCB0byBWQk9cbiAgICB2ZXJ0ZXhfZGF0YS5hZGRWZXJ0ZXgodmVydGV4X3RlbXBsYXRlKTtcbn1cblxuLy8gQWRkIHRoZSBpbmRleCB2ZXJ0ZXggdG8gdGhlIFZCTyBhbmQgY2xlYW4gdGhlIGJ1ZmZlcnNcbmZ1bmN0aW9uIGluZGV4UGFpcnMgKGNvbnRleHQpIHtcbiAgICAvLyBBZGQgdmVydGljZXMgdG8gYnVmZmVyIGFjb3JkaW5nIHRoZWlyIGluZGV4XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250ZXh0Lm51bV9wYWlyczsgaSsrKSB7XG4gICAgICAgIGFkZEluZGV4KDIqaSsyLCBjb250ZXh0KTtcbiAgICAgICAgYWRkSW5kZXgoMippKzEsIGNvbnRleHQpO1xuICAgICAgICBhZGRJbmRleCgyKmkrMCwgY29udGV4dCk7XG5cbiAgICAgICAgYWRkSW5kZXgoMippKzIsIGNvbnRleHQpO1xuICAgICAgICBhZGRJbmRleCgyKmkrMywgY29udGV4dCk7XG4gICAgICAgIGFkZEluZGV4KDIqaSsxLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb250ZXh0Lm51bV9wYWlycyA9IDA7XG5cbiAgICAvLyBDbGVhbiB0aGUgYnVmZmVyXG4gICAgY29udGV4dC52ZXJ0aWNlcyA9IFtdO1xuICAgIGlmIChjb250ZXh0LnNjYWxpbmdWZWNzKSB7XG4gICAgICAgIGNvbnRleHQuc2NhbGluZ1ZlY3MgPSBbXTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQudGV4Y29vcmRzKSB7XG4gICAgICAgIGNvbnRleHQudGV4Y29vcmRzID0gW107XG4gICAgfVxufVxuIiwiaW1wb3J0IFV0aWxzIGZyb20gJy4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IFNoYWRlclByb2dyYW0gZnJvbSAnLi9nbC9zaGFkZXJfcHJvZ3JhbSc7XG5pbXBvcnQge21hdDQsIG1hdDMsIHZlYzN9IGZyb20gJy4vdXRpbHMvZ2wtbWF0cml4JztcblxuLy8gQWJzdHJhY3QgYmFzZSBjbGFzc1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FtZXJhIHtcblxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHZpZXcsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnZpZXcgPSB2aWV3O1xuICAgICAgICB0aGlzLnBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbjtcbiAgICAgICAgdGhpcy56b29tID0gb3B0aW9ucy56b29tO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIGNhbWVyYSBieSB0eXBlIG5hbWUsIGZhY3Rvcnktc3R5bGVcbiAgICBzdGF0aWMgY3JlYXRlKG5hbWUsIHZpZXcsIGNvbmZpZykge1xuICAgICAgICBzd2l0Y2ggKGNvbmZpZy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdpc29tZXRyaWMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSXNvbWV0cmljQ2FtZXJhKG5hbWUsIHZpZXcsIGNvbmZpZyk7XG4gICAgICAgICAgICBjYXNlICdmbGF0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZsYXRDYW1lcmEobmFtZSwgdmlldywgY29uZmlnKTtcbiAgICAgICAgICAgIGNhc2UgJ3BlcnNwZWN0aXZlJzpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQZXJzcGVjdGl2ZUNhbWVyYShuYW1lLCB2aWV3LCBjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIG1ldGhvZCBjYWxsZWQgb25jZSBwZXIgZnJhbWVcbiAgICB1cGRhdGUoKSB7XG4gICAgfVxuXG4gICAgLy8gQ2FsbGVkIG9uY2UgcGVyIGZyYW1lIHBlciBwcm9ncmFtIChlLmcuIGZvciBtYWluIHJlbmRlciBwYXNzLCB0aGVuIGZvciBlYWNoIGFkZGl0aW9uYWwgcGFzcyBmb3IgZmVhdHVyZSBzZWxlY3Rpb24sIGV0Yy4pXG4gICAgc2V0dXBQcm9ncmFtKHByb2dyYW0pIHtcbiAgICB9XG5cbiAgICAvLyBTeW5jIGNhbWVyYSBwb3NpdGlvbi96b29tIHRvIHNjZW5lIHZpZXdcbiAgICB1cGRhdGVWaWV3ICgpIHtcbiAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gfHwgdGhpcy56b29tKSB7XG4gICAgICAgICAgICB2YXIgdmlldyA9IHt9O1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB2aWV3ID0geyBsbmc6IHRoaXMucG9zaXRpb25bMF0sIGxhdDogdGhpcy5wb3NpdGlvblsxXSwgem9vbTogdGhpcy5wb3NpdGlvblsyXSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuem9vbSkge1xuICAgICAgICAgICAgICAgIHZpZXcuem9vbSA9IHRoaXMuem9vbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlldy5zZXRWaWV3KHZpZXcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IG1vZGVsLXZpZXcgYW5kIG5vcm1hbCBtYXRyaWNlc1xuICAgIHNldHVwTWF0cmljZXMgKG1hdHJpY2VzLCBwcm9ncmFtKSB7XG4gICAgICAgIC8vIE1vZGVsIHZpZXcgbWF0cml4IC0gdHJhbnNmb3JtIHRpbGUgc3BhY2UgaW50byB2aWV3IHNwYWNlIChtZXRlcnMsIHJlbGF0aXZlIHRvIGNhbWVyYSlcbiAgICAgICAgbWF0NC5tdWx0aXBseShtYXRyaWNlcy5tb2RlbF92aWV3MzIsIHRoaXMudmlld19tYXRyaXgsIG1hdHJpY2VzLm1vZGVsKTtcbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCdNYXRyaXg0ZnYnLCAndV9tb2RlbFZpZXcnLCBmYWxzZSwgbWF0cmljZXMubW9kZWxfdmlldzMyKTtcblxuICAgICAgICAvLyBOb3JtYWwgbWF0cmljZXMgLSB0cmFuc2Zvcm1zIHN1cmZhY2Ugbm9ybWFscyBpbnRvIHZpZXcgc3BhY2VcbiAgICAgICAgbWF0My5ub3JtYWxGcm9tTWF0NChtYXRyaWNlcy5ub3JtYWwzMiwgbWF0cmljZXMubW9kZWxfdmlldzMyKTtcbiAgICAgICAgbWF0My5pbnZlcnQobWF0cmljZXMuaW52ZXJzZV9ub3JtYWwzMiwgbWF0cmljZXMubm9ybWFsMzIpO1xuICAgICAgICBwcm9ncmFtLnVuaWZvcm0oJ01hdHJpeDNmdicsICd1X25vcm1hbE1hdHJpeCcsIGZhbHNlLCBtYXRyaWNlcy5ub3JtYWwzMik7XG4gICAgICAgIHByb2dyYW0udW5pZm9ybSgnTWF0cml4M2Z2JywgJ3VfaW52ZXJzZU5vcm1hbE1hdHJpeCcsIGZhbHNlLCBtYXRyaWNlcy5pbnZlcnNlX25vcm1hbDMyKTtcbiAgICB9XG5cbn1cblxuLyoqXG4gICAgUGVyc3BlY3RpdmUgbWF0cml4IHByb2plY3Rpb25cblxuICAgIFRoaXMgaXMgYSBzcGVjaWFsaXplZCBwZXJzcGVjdGl2ZSBjYW1lcmEgdGhhdCwgZ2l2ZW4gYSBkZXNpcmVkIGNhbWVyYSBmb2NhbCBsZW5ndGggKHdoaWNoIGNhbiBhbHNvIHZhcnkgYnkgem9vbSBsZXZlbCksXG4gICAgY29uc3RyYWlucyB0aGUgY2FtZXJhIGhlaWdodCBhYm92ZSB0aGUgZ3JvdW5kIHBsYW5lIHN1Y2ggdGhhdCB0aGUgZGlzcGxheWVkIGdyb3VuZCBhcmVhIG9mIHRoZSBtYXAgbWF0Y2hlcyB0aGF0IG9mXG4gICAgYSB0cmFkaXRpb25hbCB3ZWIgbWVyY2F0b3IgbWFwLiBUaGlzIG1lYW5zIHlvdSBjYW4gc2V0IHRoZSBjYW1lcmEgbG9jYXRpb24gYnkgW2xhdCwgbG5nLCB6b29tXSBhcyB5b3Ugd291bGQgYSB0eXBpY2FsXG4gICAgd2ViIG1lcmNhdG9yIG1hcCwgdGhlbiBhZGp1c3QgdGhlIGZvY2FsIGxlbmd0aCBhcyBuZWVkZWQuXG5cbiAgICBWYW5pc2hpbmcgcG9pbnQgY2FuIGFsc28gYmUgYWRqdXN0ZWQgdG8gYWNoaWV2ZSBkaWZmZXJlbnQgXCJ2aWV3aW5nIGFuZ2xlc1wiLCBlLmcuIGluc3RlYWQgb2YgbG9va2luZyBzdHJhaWdodCBkb3duIGludG9cbiAgICB0aGUgY2VudGVyIG9mIHRoZSB2aWV3cG9ydCwgdGhlIGNhbWVyYSBhcHBlYXJzIHRvIGJlIHRpbHRlZCBhdCBhbiBhbmdsZS4gRm9yIGV4YW1wbGU6XG5cbiAgICBbMCwgMF0gPSBsb29raW5nIHRvd2FyZHMgY2VudGVyIG9mIHZpZXdwb3J0XG4gICAgWy0yNTAsIC0yNTBdID0gbG9va2luZyAyNTAgcGl4ZWxzIGZyb20gdGhlIHZpZXdwb3J0IGNlbnRlciB0byB0aGUgbG93ZXItbGVmdCBjb3JuZXJcbiAgICBbNDAwLCAwXSA9IGxvb2tpbmcgNDAwIHBpeGVscyB0byB0aGUgcmlnaHQgb2YgdGhlIHZpZXdwb3J0IGNlbnRlclxuKi9cbmNsYXNzIFBlcnNwZWN0aXZlQ2FtZXJhIGV4dGVuZHMgQ2FtZXJhIHtcblxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHZpZXcsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcihuYW1lLCB2aWV3LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3BlcnNwZWN0aXZlJztcblxuICAgICAgICAvLyBhIHNpbmdsZSBzY2FsYXIsIG9yIHBhaXJzIG9mIHN0b3BzIG1hcHBpbmcgem9vbSBsZXZlbHMsIGUuZy4gW3pvb20sIGZvY2FsIGxlbmd0aF1cbiAgICAgICAgdGhpcy5mb2NhbF9sZW5ndGggPSBvcHRpb25zLmZvY2FsX2xlbmd0aDtcbiAgICAgICAgdGhpcy5mb3YgPSBvcHRpb25zLmZvdjtcbiAgICAgICAgaWYgKCF0aGlzLmZvY2FsX2xlbmd0aCAmJiAhdGhpcy5mb3YpIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgZm9jYWwgbGVuZ3RoIHJhbmdlcyBieSB6b29tXG4gICAgICAgICAgICB0aGlzLmZvY2FsX2xlbmd0aCA9IFtbMTYsIDJdLCBbMTcsIDIuNV0sIFsxOCwgM10sIFsxOSwgNF0sIFsyMCwgNl1dO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YW5pc2hpbmdfcG9pbnQgPSBvcHRpb25zLnZhbmlzaGluZ19wb2ludCB8fCBbMCwgMF07IC8vIFt4LCB5XVxuICAgICAgICB0aGlzLnZhbmlzaGluZ19wb2ludCA9IHRoaXMudmFuaXNoaW5nX3BvaW50Lm1hcChwYXJzZUZsb2F0KTsgLy8gd2UgaW1wbGljaXRseSBvbmx5IHN1cHBvcnQgcHggdW5pdHMgaGVyZVxuICAgICAgICB0aGlzLnZhbmlzaGluZ19wb2ludF9za2V3ID0gW107XG5cbiAgICAgICAgdGhpcy5wb3NpdGlvbl9tZXRlcnMgPSBudWxsO1xuICAgICAgICB0aGlzLnZpZXdfbWF0cml4ID0gbmV3IEZsb2F0NjRBcnJheSgxNik7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbl9tYXRyaXggPSBuZXcgRmxvYXQzMkFycmF5KDE2KTtcblxuICAgICAgICAvLyAnY2FtZXJhJyBpcyB0aGUgbmFtZSBvZiB0aGUgc2hhZGVyIGJsb2NrLCBlLmcuIGRldGVybWluZXMgd2hlcmUgaW4gdGhlIHNoYWRlciB0aGlzIGNvZGUgaXMgaW5qZWN0ZWRcbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5yZXBsYWNlQmxvY2soJ2NhbWVyYScsIGBcbiAgICAgICAgICAgIHVuaWZvcm0gbWF0NCB1X3Byb2plY3Rpb247XG4gICAgICAgICAgICB1bmlmb3JtIHZlYzMgdV9leWU7XG4gICAgICAgICAgICB1bmlmb3JtIHZlYzIgdV92YW5pc2hpbmdfcG9pbnQ7XG5cbiAgICAgICAgICAgIHZvaWQgY2FtZXJhUHJvamVjdGlvbiAoaW5vdXQgdmVjNCBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdV9wcm9qZWN0aW9uICogcG9zaXRpb247XG4gICAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIENvbnN0cmFpbnMgdGhlIGNhbWVyYSBzbyB0aGF0IHRoZSB2aWV3YWJsZSBhcmVhIG1hdGNoZXMgZ2l2ZW4gdGhlIHZpZXdwb3J0IGhlaWdodFxuICAgIC8vIChpbiB3b3JsZCBzcGFjZSwgZS5nLiBtZXRlcnMpLCBnaXZlbiBlaXRoZXIgYSBjYW1lcmEgZm9jYWwgbGVuZ3RoIG9yIGZpZWxkLW9mLXZpZXdcbiAgICAvLyAoZm9jYWwgbGVuZ3RoIGlzIHVzZWQgaWYgYm90aCBhcmUgcGFzc2VkKS5cbiAgICBjb25zdHJhaW5DYW1lcmEoeyB2aWV3X2hlaWdodCwgaGVpZ2h0LCBmb2NhbF9sZW5ndGgsIGZvdiB9KSB7XG4gICAgICAgIC8vIFNvbHZlIGZvciBjYW1lcmEgaGVpZ2h0XG4gICAgICAgIGlmICghaGVpZ2h0KSB7XG4gICAgICAgICAgICAvLyBXZSBoYXZlIGZvY2FsIGxlbmd0aCwgY2FsY3VsYXRlIEZPVlxuICAgICAgICAgICAgaWYgKGZvY2FsX2xlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvdiA9IE1hdGguYXRhbigxIC8gZm9jYWxfbGVuZ3RoKSAqIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXZSBoYXZlIEZPViwgY2FsY3VsYXRlIGZvY2FsIGxlbmd0aFxuICAgICAgICAgICAgZWxzZSBpZiAoZm92KSB7XG4gICAgICAgICAgICAgICAgZm92ID0gZm92ICogTWF0aC5QSSAvIDE4MDsgLy8gY29udmVydCBGT1YgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICAgICAgICAgICAgZm9jYWxfbGVuZ3RoID0gMSAvIE1hdGgudGFuKGZvdiAvIDIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEaXN0YW5jZSB0aGF0IGNhbWVyYSBzaG91bGQgYmUgZnJvbSBncm91bmQgc3VjaCB0aGF0IGl0IGZpdHMgdGhlIGZpZWxkIG9mIHZpZXcgZXhwZWN0ZWRcbiAgICAgICAgICAgIC8vIGZvciBhIGNvbnZlbnRpb25hbCB3ZWIgbWVyY2F0b3IgbWFwIGF0IHRoZSBjdXJyZW50IHpvb20gbGV2ZWwgYW5kIGNhbWVyYSBmb2NhbCBsZW5ndGhcbiAgICAgICAgICAgIGhlaWdodCA9IHZpZXdfaGVpZ2h0IC8gMiAqIGZvY2FsX2xlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb2x2ZSBmb3IgY2FtZXJhIGZvY2FsIGxlbmd0aCAvIGZpZWxkLW9mLXZpZXdcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb2NhbF9sZW5ndGggPSAyICogaGVpZ2h0IC8gdmlld19oZWlnaHQ7XG4gICAgICAgICAgICBmb3YgPSBNYXRoLmF0YW4oMSAvIGZvY2FsX2xlbmd0aCkgKiAyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgdmlld19oZWlnaHQsIGhlaWdodCwgZm9jYWxfbGVuZ3RoLCBmb3YgfTtcbiAgICB9XG5cbiAgICB1cGRhdGVNYXRyaWNlcygpIHtcbiAgICAgICAgLy8gVE9ETzogb25seSByZS1jYWxjdWxhdGUgdGhlc2UgdmFycyB3aGVuIG5lY2Vzc2FyeVxuXG4gICAgICAgIC8vIEhlaWdodCBvZiB0aGUgdmlld3BvcnQgaW4gbWV0ZXJzIGF0IGN1cnJlbnQgem9vbVxuICAgICAgICB2YXIgdmlld3BvcnRfaGVpZ2h0ID0gdGhpcy52aWV3LnNpemUuY3NzLmhlaWdodCAqIHRoaXMudmlldy5tZXRlcnNfcGVyX3BpeGVsO1xuXG4gICAgICAgIC8vIENvbXB1dGUgY2FtZXJhIHByb3BlcnRpZXMgdG8gZml0IGRlc2lyZWQgdmlld1xuICAgICAgICB2YXIgeyBoZWlnaHQsIGZvdiB9ID0gdGhpcy5jb25zdHJhaW5DYW1lcmEoe1xuICAgICAgICAgICAgdmlld19oZWlnaHQ6IHZpZXdwb3J0X2hlaWdodCxcbiAgICAgICAgICAgIGZvY2FsX2xlbmd0aDogVXRpbHMuaW50ZXJwb2xhdGUodGhpcy52aWV3Lnpvb20sIHRoaXMuZm9jYWxfbGVuZ3RoKSxcbiAgICAgICAgICAgIGZvdjogVXRpbHMuaW50ZXJwb2xhdGUodGhpcy52aWV3Lnpvb20sIHRoaXMuZm92KVxuICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVmlldyBtYXRyaXhcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gW3RoaXMudmlldy5jZW50ZXIubWV0ZXJzLngsIHRoaXMudmlldy5jZW50ZXIubWV0ZXJzLnksIGhlaWdodF07XG4gICAgICAgIHRoaXMucG9zaXRpb25fbWV0ZXJzID0gcG9zaXRpb247XG5cbiAgICAgICAgLy8gbWF0NC5sb29rQXQodGhpcy52aWV3X21hdHJpeCxcbiAgICAgICAgLy8gICAgIHZlYzMuZnJvbVZhbHVlcyguLi5wb3NpdGlvbiksXG4gICAgICAgIC8vICAgICB2ZWMzLmZyb21WYWx1ZXMocG9zaXRpb25bMF0sIHBvc2l0aW9uWzFdLCBoZWlnaHQgLSAxKSxcbiAgICAgICAgLy8gICAgIHZlYzMuZnJvbVZhbHVlcygwLCAxLCAwKSk7XG4gICAgICAgIC8vIEV4Y2x1ZGUgY2FtZXJhIGhlaWdodCBmcm9tIHZpZXcgbWF0cml4XG4gICAgICAgIG1hdDQubG9va0F0KHRoaXMudmlld19tYXRyaXgsXG4gICAgICAgICAgICB2ZWMzLmZyb21WYWx1ZXMocG9zaXRpb25bMF0sIHBvc2l0aW9uWzFdLCAwKSxcbiAgICAgICAgICAgIHZlYzMuZnJvbVZhbHVlcyhwb3NpdGlvblswXSwgcG9zaXRpb25bMV0sIC0xKSxcbiAgICAgICAgICAgIHZlYzMuZnJvbVZhbHVlcygwLCAxLCAwKSk7XG5cbiAgICAgICAgLy8gUHJvamVjdGlvbiBtYXRyaXhcbiAgICAgICAgbWF0NC5wZXJzcGVjdGl2ZSh0aGlzLnByb2plY3Rpb25fbWF0cml4LCBmb3YsIHRoaXMudmlldy5hc3BlY3QsIDEsIGhlaWdodCAqIDIpO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdmFuaXNoaW5nIHBvaW50IGZyb20gcGl4ZWxzIHRvIHZpZXdwb3J0IHNwYWNlXG4gICAgICAgIHRoaXMudmFuaXNoaW5nX3BvaW50X3NrZXdbMF0gPSB0aGlzLnZhbmlzaGluZ19wb2ludFswXSAvIHRoaXMudmlldy5zaXplLmNzcy53aWR0aDtcbiAgICAgICAgdGhpcy52YW5pc2hpbmdfcG9pbnRfc2tld1sxXSA9IHRoaXMudmFuaXNoaW5nX3BvaW50WzFdIC8gdGhpcy52aWV3LnNpemUuY3NzLmhlaWdodDtcblxuICAgICAgICAvLyBBZGp1c3QgcHJvamVjdGlvbiBtYXRyaXggdG8gaW5jbHVkZSB2YW5pc2hpbmcgcG9pbnQgc2tld1xuICAgICAgICB0aGlzLnByb2plY3Rpb25fbWF0cml4WzhdID0gLXRoaXMudmFuaXNoaW5nX3BvaW50X3NrZXdbMF07IC8vIHogY29sdW1uIG9mIHggcm93LCBlLmcuIGFtb3VudCB6IHNrZXdzIHhcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uX21hdHJpeFs5XSA9IC10aGlzLnZhbmlzaGluZ19wb2ludF9za2V3WzFdOyAvLyB6IGNvbHVtbiBvZiB5IHJvdywgZS5nLiBhbW91bnQgeiBza2V3cyB5XG5cbiAgICAgICAgLy8gVHJhbnNsYXRlIGdlb21ldHJ5IGludG8gdGhlIGRpc3RhbmNlIHNvIHRoYXQgY2FtZXJhIGlzIGFwcHJvcHJpYXRlIGhlaWdodCBhYm92ZSBncm91bmRcbiAgICAgICAgLy8gQWRkaXRpb25hbGx5LCBhZGp1c3QgeHkgdG8gY29tcGVuc2F0ZSBmb3IgYW55IHZhbmlzaGluZyBwb2ludCBza2V3LCBlLmcuIG1vdmUgZ2VvbWV0cnkgc28gdGhhdCB0aGUgZGlzcGxheWVkIGdcbiAgICAgICAgLy8gcGxhbmUgb2YgdGhlIG1hcCBtYXRjaGVzIHRoYXQgZXhwZWN0ZWQgYnkgYSB0cmFkaXRpb25hbCB3ZWIgbWVyY2F0b3IgbWFwIGF0IHRoaXMgW2xhdCwgbG5nLCB6b29tXS5cbiAgICAgICAgbWF0NC50cmFuc2xhdGUodGhpcy5wcm9qZWN0aW9uX21hdHJpeCwgdGhpcy5wcm9qZWN0aW9uX21hdHJpeCxcbiAgICAgICAgICAgIHZlYzMuZnJvbVZhbHVlcyhcbiAgICAgICAgICAgICAgICB2aWV3cG9ydF9oZWlnaHQvMiAqIHRoaXMudmlldy5hc3BlY3QgKiAtdGhpcy52YW5pc2hpbmdfcG9pbnRfc2tld1swXSxcbiAgICAgICAgICAgICAgICB2aWV3cG9ydF9oZWlnaHQvMiAqIC10aGlzLnZhbmlzaGluZ19wb2ludF9za2V3WzFdLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBJbmNsdWRlIGNhbWVyYSBoZWlnaHQgaW4gcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgICAgbWF0NC50cmFuc2xhdGUodGhpcy5wcm9qZWN0aW9uX21hdHJpeCwgdGhpcy5wcm9qZWN0aW9uX21hdHJpeCwgdmVjMy5mcm9tVmFsdWVzKDAsIDAsIC1oZWlnaHQpKTtcbiAgICB9XG5cbiAgICB1cGRhdGUoKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpY2VzKCk7XG4gICAgfVxuXG4gICAgc2V0dXBQcm9ncmFtKHByb2dyYW0pIHtcbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCdNYXRyaXg0ZnYnLCAndV9wcm9qZWN0aW9uJywgZmFsc2UsIHRoaXMucHJvamVjdGlvbl9tYXRyaXgpO1xuICAgICAgICBwcm9ncmFtLnVuaWZvcm0oJzNmJywgJ3VfZXllJywgMCwgMCwgdGhpcy5wb3NpdGlvbl9tZXRlcnNbMl0pO1xuICAgICAgICBwcm9ncmFtLnVuaWZvcm0oJzJmdicsICd1X3ZhbmlzaGluZ19wb2ludCcsIHRoaXMudmFuaXNoaW5nX3BvaW50X3NrZXcpO1xuICAgIH1cblxufVxuXG4vLyBJc29tZXRyaWMtc3R5bGUgcHJvamVjdGlvblxuLy8gTm90ZTogdGhpcyBpcyBhY3R1YWxseSBhbiBcImF4b25vbWV0cmljXCIgcHJvamVjdGlvbiwgYnV0IEknbSB1c2luZyB0aGUgY29sbG9xdWlhbCB0ZXJtIGlzb21ldHJpYyBiZWNhdXNlIGl0IGlzIG1vcmUgcmVjb2duaXphYmxlLlxuLy8gQW4gaXNvbWV0cmljIHByb2plY3Rpb24gaXMgYSBzcGVjaWZpYyBzdWJzZXQgb2YgYXhvbm9tZXRyaWMgcHJvamVjdGlvbnMuXG4vLyAnYXhpcycgZGV0ZXJtaW5lcyB0aGUgeHkgc2tldyBhcHBsaWVkIHRvIGEgdmVydGV4IGJhc2VkIG9uIGl0cyB6IGNvb3JkaW5hdGUsIGUuZy4gWzAsIDFdIGF4aXMgY2F1c2VzIGJ1aWxkaW5ncyB0byBiZSBkcmF3blxuLy8gc3RyYWlnaHQgdXB3YXJkcyBvbiBzY3JlZW4gYXQgdGhlaXIgdHJ1ZSBoZWlnaHQsIFswLCAuNV0gd291bGQgZHJhdyB0aGVtIHVwIGF0IGhhbGYtaGVpZ2h0LCBbMSwgMF0gd291bGQgYmUgc2lkZXdheXMsIGV0Yy5cbmNsYXNzIElzb21ldHJpY0NhbWVyYSBleHRlbmRzIENhbWVyYSB7XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB2aWV3LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIobmFtZSwgdmlldywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdpc29tZXRyaWMnO1xuICAgICAgICB0aGlzLmF4aXMgPSBvcHRpb25zLmF4aXMgfHwgeyB4OiAwLCB5OiAxIH07XG4gICAgICAgIGlmICh0aGlzLmF4aXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aGlzLmF4aXMgPSB7IHg6IHRoaXMuYXhpc1swXSwgeTogdGhpcy5heGlzWzFdIH07IC8vIGFsbG93IGF4aXMgdG8gYWxzbyBiZSBwYXNzZWQgYXMgMi1lbGVtIGFycmF5XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvc2l0aW9uX21ldGVycyA9IG51bGw7XG4gICAgICAgIHRoaXMudmlld3BvcnRfaGVpZ2h0ID0gbnVsbDtcblxuICAgICAgICB0aGlzLnZpZXdfbWF0cml4ID0gbmV3IEZsb2F0NjRBcnJheSgxNik7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbl9tYXRyaXggPSBuZXcgRmxvYXQzMkFycmF5KDE2KTtcblxuICAgICAgICAvLyAnY2FtZXJhJyBpcyB0aGUgbmFtZSBvZiB0aGUgc2hhZGVyIGJsb2NrLCBlLmcuIGRldGVybWluZXMgd2hlcmUgaW4gdGhlIHNoYWRlciB0aGlzIGNvZGUgaXMgaW5qZWN0ZWRcbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5yZXBsYWNlQmxvY2soJ2NhbWVyYScsIGBcbiAgICAgICAgICAgIHVuaWZvcm0gbWF0NCB1X3Byb2plY3Rpb247XG4gICAgICAgICAgICB1bmlmb3JtIHZlYzMgdV9leWU7XG4gICAgICAgICAgICB1bmlmb3JtIHZlYzIgdV92YW5pc2hpbmdfcG9pbnQ7XG5cbiAgICAgICAgICAgIHZvaWQgY2FtZXJhUHJvamVjdGlvbiAoaW5vdXQgdmVjNCBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdV9wcm9qZWN0aW9uICogcG9zaXRpb247XG4gICAgICAgICAgICAgICAgLy8gcG9zaXRpb24ueHkgKz0gcG9zaXRpb24ueiAqIHVfaXNvbWV0cmljX2F4aXM7XG5cbiAgICAgICAgICAgICAgICAvLyBSZXZlcnNlIHogZm9yIGRlcHRoIGJ1ZmZlciBzbyB1cCBpcyBuZWdhdGl2ZSxcbiAgICAgICAgICAgICAgICAvLyBhbmQgc2NhbGUgZG93biB2YWx1ZXMgc28gb2JqZWN0cyBoaWdoZXIgdGhhbiBvbmUgc2NyZWVuIGhlaWdodCB3aWxsIG5vdCBnZXQgY2xpcHBlZFxuICAgICAgICAgICAgICAgIC8vIHB1bGwgZm9yd2FyZCBzbGlnaHRseSB0byBhdm9pZCBnb2luZyBwYXN0IGZhciBjbGlwcGluZyBwbGFuZVxuICAgICAgICAgICAgICAgIHBvc2l0aW9uLnogPSAtcG9zaXRpb24ueiAvIDEwMC4gKyAxLiAtIDAuMDAxO1xuICAgICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGUoKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZSgpO1xuXG4gICAgICAgIHRoaXMudmlld3BvcnRfaGVpZ2h0ID0gdGhpcy52aWV3LnNpemUuY3NzLmhlaWdodCAqIHRoaXMudmlldy5tZXRlcnNfcGVyX3BpeGVsO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBbdGhpcy52aWV3LmNlbnRlci5tZXRlcnMueCwgdGhpcy52aWV3LmNlbnRlci5tZXRlcnMueSwgdGhpcy52aWV3cG9ydF9oZWlnaHRdO1xuICAgICAgICB0aGlzLnBvc2l0aW9uX21ldGVycyA9IHBvc2l0aW9uO1xuXG4gICAgICAgIC8vIFZpZXdcbiAgICAgICAgbWF0NC5pZGVudGl0eSh0aGlzLnZpZXdfbWF0cml4KTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUodGhpcy52aWV3X21hdHJpeCwgdGhpcy52aWV3X21hdHJpeCwgdmVjMy5mcm9tVmFsdWVzKC1wb3NpdGlvblswXSwgLXBvc2l0aW9uWzFdLCAwKSk7XG5cbiAgICAgICAgLy8gUHJvamVjdGlvblxuICAgICAgICBtYXQ0LmlkZW50aXR5KHRoaXMucHJvamVjdGlvbl9tYXRyaXgpO1xuXG4gICAgICAgIC8vIGFwcGx5IGlzb21ldHJpYyBza2V3XG4gICAgICAgIHRoaXMucHJvamVjdGlvbl9tYXRyaXhbOF0gPSB0aGlzLmF4aXMueCAvIHRoaXMudmlldy5hc3BlY3Q7IC8vIHogY29sdW1uIG9mIHggcm93LCBlLmcuIGFtb3VudCB6IHNrZXdzIHhcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uX21hdHJpeFs5XSA9IHRoaXMuYXhpcy55OyAgICAgICAgICAgICAgICAgICAgLy8geiBjb2x1bW4gb2YgeCByb3csIGUuZy4gYW1vdW50IHogc2tld3MgeVxuXG4gICAgICAgIC8vIGNvbnZlcnQgbWV0ZXJzIHRvIHZpZXdwb3J0XG4gICAgICAgIG1hdDQuc2NhbGUodGhpcy5wcm9qZWN0aW9uX21hdHJpeCwgdGhpcy5wcm9qZWN0aW9uX21hdHJpeCxcbiAgICAgICAgICAgIHZlYzMuZnJvbVZhbHVlcyhcbiAgICAgICAgICAgICAgICAyIC8gdGhpcy52aWV3LnNpemUubWV0ZXJzLngsXG4gICAgICAgICAgICAgICAgMiAvIHRoaXMudmlldy5zaXplLm1ldGVycy55LFxuICAgICAgICAgICAgICAgIDIgLyB0aGlzLnZpZXcuc2l6ZS5tZXRlcnMueVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNldHVwUHJvZ3JhbShwcm9ncmFtKSB7XG4gICAgICAgIHByb2dyYW0udW5pZm9ybSgnTWF0cml4NGZ2JywgJ3VfcHJvamVjdGlvbicsIGZhbHNlLCB0aGlzLnByb2plY3Rpb25fbWF0cml4KTtcblxuICAgICAgICBwcm9ncmFtLnVuaWZvcm0oJzNmJywgJ3VfZXllJywgMCwgMCwgdGhpcy52aWV3cG9ydF9oZWlnaHQpO1xuICAgICAgICAvLyBwcm9ncmFtLnVuaWZvcm0oJzNmJywgJ3VfZXllJywgdGhpcy52aWV3cG9ydF9oZWlnaHQgKiB0aGlzLmF4aXMueCwgdGhpcy52aWV3cG9ydF9oZWlnaHQgKiB0aGlzLmF4aXMueSwgdGhpcy52aWV3cG9ydF9oZWlnaHQpO1xuICAgICAgICBwcm9ncmFtLnVuaWZvcm0oJzJmJywgJ3VfdmFuaXNoaW5nX3BvaW50JywgMCwgMCk7XG4gICAgfVxuXG59XG5cbi8vIEZsYXQgcHJvamVjdGlvbiAoZS5nLiBqdXN0IHRvcC1kb3duLCBubyBwZXJzcGVjdGl2ZSkgLSBhIGRlZ2VuZXJhdGUgaXNvbWV0cmljIGNhbWVyYVxuY2xhc3MgRmxhdENhbWVyYSBleHRlbmRzIElzb21ldHJpY0NhbWVyYSB7XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB2aWV3LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIobmFtZSwgdmlldywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdmbGF0JztcbiAgICB9XG5cbiAgICB1cGRhdGUoKSB7XG4gICAgICAgIC8vIEF4aXMgaXMgZml4ZWQgdG8gKDAsIDApIGZvciBmbGF0IGNhbWVyYVxuICAgICAgICB0aGlzLmF4aXMueCA9IDA7XG4gICAgICAgIHRoaXMuYXhpcy55ID0gMDtcblxuICAgICAgICBzdXBlci51cGRhdGUoKTtcbiAgICB9XG5cbn1cbiIsIi8vIE1pc2NlbGxhbmVvdXMgZ2VvIGZ1bmN0aW9uc1xuXG52YXIgR2VvO1xuZXhwb3J0IGRlZmF1bHQgR2VvID0ge307XG5cbi8vIFByb2plY3Rpb24gY29uc3RhbnRzXG5HZW8uZGVmYXVsdF9zb3VyY2VfbWF4X3pvb20gPSAxODtcbkdlby5kZWZhdWx0X3ZpZXdfbWF4X3pvb20gPSAyMDtcbkdlby50aWxlX3NpemUgPSAyNTY7XG5HZW8uaGFsZl9jaXJjdW1mZXJlbmNlX21ldGVycyA9IDIwMDM3NTA4LjM0Mjc4OTI0NDtcbkdlby5jaXJjdW1mZXJlbmNlX21ldGVycyA9IEdlby5oYWxmX2NpcmN1bWZlcmVuY2VfbWV0ZXJzICogMjtcbkdlby5taW5fem9vbV9tZXRlcnNfcGVyX3BpeGVsID0gR2VvLmNpcmN1bWZlcmVuY2VfbWV0ZXJzIC8gR2VvLnRpbGVfc2l6ZTsgLy8gbWluIHpvb20gZHJhd3Mgd29ybGQgYXMgMiB0aWxlcyB3aWRlXG5cbmxldCBtZXRlcnNfcGVyX3BpeGVsID0gW107XG5HZW8ubWV0ZXJzUGVyUGl4ZWwgPSBmdW5jdGlvbiAoeikge1xuICAgIG1ldGVyc19wZXJfcGl4ZWxbel0gPSBtZXRlcnNfcGVyX3BpeGVsW3pdIHx8IEdlby5taW5fem9vbV9tZXRlcnNfcGVyX3BpeGVsIC8gTWF0aC5wb3coMiwgeik7XG4gICAgcmV0dXJuIG1ldGVyc19wZXJfcGl4ZWxbel07XG59O1xuXG5sZXQgbWV0ZXJzX3Blcl90aWxlID0gW107XG5HZW8ubWV0ZXJzUGVyVGlsZSA9IGZ1bmN0aW9uICh6KSB7XG4gICAgbWV0ZXJzX3Blcl90aWxlW3pdID0gbWV0ZXJzX3Blcl90aWxlW3pdIHx8IEdlby5jaXJjdW1mZXJlbmNlX21ldGVycyAvIE1hdGgucG93KDIsIHopO1xuICAgIHJldHVybiBtZXRlcnNfcGVyX3RpbGVbel07XG59O1xuXG4vLyBDb252ZXJzaW9uIGZ1bmN0aW9ucyBiYXNlZCBvbiBhbiBkZWZpbmVkIHRpbGUgc2NhbGVcbkdlby50aWxlX3NjYWxlID0gNDA5NjsgLy8gY29vcmRpbmF0ZXMgYXJlIGxvY2FsbHkgc2NhbGVkIHRvIHRoZSByYW5nZSBbMCwgdGlsZV9zY2FsZV1cbkdlby51bml0c19wZXJfcGl4ZWwgPSBHZW8udGlsZV9zY2FsZSAvIEdlby50aWxlX3NpemU7XG5cbmxldCB1bml0c19wZXJfbWV0ZXIgPSBbXTtcbkdlby51bml0c1Blck1ldGVyID0gZnVuY3Rpb24gKHopIHtcbiAgICB1bml0c19wZXJfbWV0ZXJbel0gPSB1bml0c19wZXJfbWV0ZXJbel0gfHwgR2VvLnRpbGVfc2NhbGUgLyAoR2VvLnRpbGVfc2l6ZSAqIEdlby5tZXRlcnNQZXJQaXhlbCh6KSk7XG4gICAgcmV0dXJuIHVuaXRzX3Blcl9tZXRlclt6XTtcbn07XG5cbi8vIENvbnZlcnQgdGlsZSBsb2NhdGlvbiB0byBtZXJjYXRvciBtZXRlcnMgLSBtdWx0aXBseSBieSBwaXhlbHMgcGVyIHRpbGUsIHRoZW4gYnkgbWV0ZXJzIHBlciBwaXhlbCwgYWRqdXN0IGZvciBtYXAgb3JpZ2luXG5HZW8ubWV0ZXJzRm9yVGlsZSA9IGZ1bmN0aW9uICh0aWxlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogdGlsZS54ICogR2VvLmNpcmN1bWZlcmVuY2VfbWV0ZXJzIC8gTWF0aC5wb3coMiwgdGlsZS56KSAtIEdlby5oYWxmX2NpcmN1bWZlcmVuY2VfbWV0ZXJzLFxuICAgICAgICB5OiAtKHRpbGUueSAqIEdlby5jaXJjdW1mZXJlbmNlX21ldGVycyAvIE1hdGgucG93KDIsIHRpbGUueikgLSBHZW8uaGFsZl9jaXJjdW1mZXJlbmNlX21ldGVycylcbiAgICB9O1xufTtcblxuLyoqXG4gICBHaXZlbiBhIHBvaW50IGluIG1lcmNhdG9yIG1ldGVycyBhbmQgYSB6b29tIGxldmVsLCByZXR1cm4gdGhlIHRpbGUgWC9ZL1ogdGhhdCB0aGUgcG9pbnQgbGllcyBpblxuKi9cbkdlby50aWxlRm9yTWV0ZXJzID0gZnVuY3Rpb24gKFt4LCB5XSwgem9vbSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IE1hdGguZmxvb3IoKHggKyBHZW8uaGFsZl9jaXJjdW1mZXJlbmNlX21ldGVycykgLyAoR2VvLmNpcmN1bWZlcmVuY2VfbWV0ZXJzIC8gTWF0aC5wb3coMiwgem9vbSkpKSxcbiAgICAgICAgeTogTWF0aC5mbG9vcigoLXkgKyBHZW8uaGFsZl9jaXJjdW1mZXJlbmNlX21ldGVycykgLyAoR2VvLmNpcmN1bWZlcmVuY2VfbWV0ZXJzIC8gTWF0aC5wb3coMiwgem9vbSkpKSxcbiAgICAgICAgejogem9vbVxuICAgIH07XG59O1xuXG4vLyBXcmFwIGEgdGlsZSB0byBwb3NpdGl2ZSAjcyBmb3Igem9vbVxuLy8gT3B0aW9uYWxseSBzcGVjaWZ5IHRoZSBheGVzIHRvIHdyYXBcbkdlby53cmFwVGlsZSA9IGZ1bmN0aW9uKHsgeCwgeSwgeiB9LCBtYXNrID0geyB4OiB0cnVlLCB5OiBmYWxzZSB9KSB7XG4gICAgdmFyIG0gPSAoMSA8PCB6KSAtIDE7XG4gICAgaWYgKG1hc2sueCkge1xuICAgICAgICB4ID0geCAmIG07XG4gICAgfVxuICAgIGlmIChtYXNrLnkpIHtcbiAgICAgICAgeSA9IHkgJiBtO1xuICAgIH1cbiAgICByZXR1cm4geyB4LCB5LCB6IH07XG59O1xuXG4vKipcbiAgIENvbnZlcnQgbWVyY2F0b3IgbWV0ZXJzIHRvIGxhdC1sbmdcbiovXG5HZW8ubWV0ZXJzVG9MYXRMbmcgPSBmdW5jdGlvbiAoW3gsIHldKSB7XG5cbiAgICB4IC89IEdlby5oYWxmX2NpcmN1bWZlcmVuY2VfbWV0ZXJzO1xuICAgIHkgLz0gR2VvLmhhbGZfY2lyY3VtZmVyZW5jZV9tZXRlcnM7XG5cbiAgICB5ID0gKDIgKiBNYXRoLmF0YW4oTWF0aC5leHAoeSAqIE1hdGguUEkpKSAtIChNYXRoLlBJIC8gMikpIC8gTWF0aC5QSTtcblxuICAgIHggKj0gMTgwO1xuICAgIHkgKj0gMTgwO1xuXG4gICAgcmV0dXJuIFt4LCB5XTtcbn07XG5cbi8qKlxuICBDb252ZXJ0IGxhdC1sbmcgdG8gbWVyY2F0b3IgbWV0ZXJzXG4qL1xuR2VvLmxhdExuZ1RvTWV0ZXJzID0gZnVuY3Rpb24oW3gsIHldKSB7XG5cbiAgICAvLyBMYXRpdHVkZVxuICAgIHkgPSBNYXRoLmxvZyhNYXRoLnRhbih5Kk1hdGguUEkvMzYwICsgTWF0aC5QSS80KSkgLyBNYXRoLlBJO1xuICAgIHkgKj0gR2VvLmhhbGZfY2lyY3VtZmVyZW5jZV9tZXRlcnM7XG5cbiAgICAvLyBMb25naXR1ZGVcbiAgICB4ICo9IEdlby5oYWxmX2NpcmN1bWZlcmVuY2VfbWV0ZXJzIC8gMTgwO1xuXG4gICAgcmV0dXJuIFt4LCB5XTtcbn07XG5cbkdlby53cmFwTG5nID0gZnVuY3Rpb24oeCkge1xuICAgIGlmICh4ID4gMTgwIHx8IHggPCAtMTgwKSB7XG4gICAgICAgIHggPSAoKHggKyAxODApICUgMzYwICsgMzYwKSAlIDM2MCAtIDE4MDtcbiAgICB9XG4gICAgcmV0dXJuIHg7XG59O1xuXG4vLyBSdW4gYW4gaW4tcGxhY2UgdHJhbnNmb3JtIGZ1bmN0aW9uIG9uIGVhY2ggY29vb3JkaW5hdGUgaW4gYSBHZW9KU09OIGdlb21ldHJ5XG5HZW8udHJhbnNmb3JtR2VvbWV0cnkgPSBmdW5jdGlvbiAoZ2VvbWV0cnksIHRyYW5zZm9ybSkge1xuICAgIGlmIChnZW9tZXRyeSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjsgLy8gc2tpcCBpZiBtaXNzaW5nIGdlb21ldHJ5ICh2YWxpZCBHZW9KU09OKVxuICAgIH1cblxuICAgIGlmIChnZW9tZXRyeS50eXBlID09PSAnUG9pbnQnKSB7XG4gICAgICAgIHRyYW5zZm9ybShnZW9tZXRyeS5jb29yZGluYXRlcyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGdlb21ldHJ5LnR5cGUgPT09ICdMaW5lU3RyaW5nJyB8fCBnZW9tZXRyeS50eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgZ2VvbWV0cnkuY29vcmRpbmF0ZXMuZm9yRWFjaCh0cmFuc2Zvcm0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSAnUG9seWdvbicgfHwgZ2VvbWV0cnkudHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycpIHtcbiAgICAgICAgZ2VvbWV0cnkuY29vcmRpbmF0ZXMuZm9yRWFjaChjb29yZGluYXRlcyA9PiBjb29yZGluYXRlcy5mb3JFYWNoKHRyYW5zZm9ybSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICBnZW9tZXRyeS5jb29yZGluYXRlcy5mb3JFYWNoKHBvbHlnb24gPT4ge1xuICAgICAgICAgICAgcG9seWdvbi5mb3JFYWNoKGNvb3JkaW5hdGVzID0+IGNvb3JkaW5hdGVzLmZvckVhY2godHJhbnNmb3JtKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBUT0RPOiBzdXBwb3J0IEdlb21ldHJ5Q29sbGVjdGlvblxufTtcblxuR2VvLmJveEludGVyc2VjdCA9IGZ1bmN0aW9uIChiMSwgYjIpIHtcbiAgICByZXR1cm4gIShcbiAgICAgICAgYjIuc3cueCA+IGIxLm5lLnggfHxcbiAgICAgICAgYjIubmUueCA8IGIxLnN3LnggfHxcbiAgICAgICAgYjIuc3cueSA+IGIxLm5lLnkgfHxcbiAgICAgICAgYjIubmUueSA8IGIxLnN3LnlcbiAgICApO1xufTtcblxuLy8gRmluZHMgdGhlIGF4aXMtYWxpZ25lZCBib3VuZGluZyBib3ggZm9yIGEgcG9seWdvblxuR2VvLmZpbmRCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIChwb2x5Z29uKSB7XG4gICAgdmFyIG1pbl94ID0gSW5maW5pdHksXG4gICAgICAgIG1heF94ID0gLUluZmluaXR5LFxuICAgICAgICBtaW5feSA9IEluZmluaXR5LFxuICAgICAgICBtYXhfeSA9IC1JbmZpbml0eTtcblxuICAgIC8vIE9ubHkgbmVlZCB0byBleGFtaW5lIG91dGVyIHJpbmcgKHBvbHlnb25bMF0pXG4gICAgdmFyIG51bV9jb29yZHMgPSBwb2x5Z29uWzBdLmxlbmd0aDtcbiAgICBmb3IgKHZhciBjPTA7IGMgPCBudW1fY29vcmRzOyBjKyspIHtcbiAgICAgICAgdmFyIGNvb3JkID0gcG9seWdvblswXVtjXTtcblxuICAgICAgICBpZiAoY29vcmRbMF0gPCBtaW5feCkge1xuICAgICAgICAgICAgbWluX3ggPSBjb29yZFswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29vcmRbMV0gPCBtaW5feSkge1xuICAgICAgICAgICAgbWluX3kgPSBjb29yZFsxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29vcmRbMF0gPiBtYXhfeCkge1xuICAgICAgICAgICAgbWF4X3ggPSBjb29yZFswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29vcmRbMV0gPiBtYXhfeSkge1xuICAgICAgICAgICAgbWF4X3kgPSBjb29yZFsxXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbbWluX3gsIG1pbl95LCBtYXhfeCwgbWF4X3ldO1xufTtcblxuLy8gQ29udmVydCBnZW9tZXRyeSB0eXBlIHRvIG9uZSBvZjogJ3BvaW50JywgJ2xpbmUnLCAncG9seWdvbidcbkdlby5nZW9tZXRyeVR5cGUgPSBmdW5jdGlvbih0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdQb2x5Z29uJyB8fCB0eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICByZXR1cm4gJ3BvbHlnb24nO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSAnTGluZVN0cmluZycgfHwgdHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycpIHtcbiAgICAgICAgcmV0dXJuICdsaW5lJztcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdQb2ludCcgfHwgdHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XG4gICAgICAgIHJldHVybiAncG9pbnQnO1xuICAgIH1cbn07XG5cbkdlby5jZW50cm9pZCA9IGZ1bmN0aW9uIChwb2x5Z29uKSB7XG4gICAgbGV0IG4gPSBwb2x5Z29uLmxlbmd0aDtcbiAgICBsZXQgY2VudHJvaWQgPSBbMCwgMF07XG5cbiAgICBmb3IgKGxldCBwPTA7IHAgPCBwb2x5Z29uLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgIGNlbnRyb2lkWzBdICs9IHBvbHlnb25bcF1bMF07XG4gICAgICAgIGNlbnRyb2lkWzFdICs9IHBvbHlnb25bcF1bMV07XG4gICAgfVxuXG4gICAgY2VudHJvaWRbMF0gLz0gbjtcbiAgICBjZW50cm9pZFsxXSAvPSBuO1xuXG4gICAgcmV0dXJuIGNlbnRyb2lkO1xufTtcblxuR2VvLm11bHRpQ2VudHJvaWQgPSBmdW5jdGlvbiAocG9seWdvbnMpIHtcbiAgICBsZXQgbiA9IHBvbHlnb25zLmxlbmd0aDtcbiAgICBsZXQgY2VudHJvaWQgPSBbMCwgMF07XG5cbiAgICBmb3IgKGxldCBwPTA7IHAgPCBwb2x5Z29ucy5sZW5ndGg7IHArKykge1xuICAgICAgICBsZXQgcG9seWdvbiA9IHBvbHlnb25zW3BdWzBdO1xuICAgICAgICBsZXQgYyA9IEdlby5jZW50cm9pZChwb2x5Z29uKTtcbiAgICAgICAgY2VudHJvaWRbMF0gKz0gY1swXTtcbiAgICAgICAgY2VudHJvaWRbMV0gKz0gY1sxXTtcbiAgICB9XG5cbiAgICBjZW50cm9pZFswXSAvPSBuO1xuICAgIGNlbnRyb2lkWzFdIC89IG47XG5cbiAgICByZXR1cm4gY2VudHJvaWQ7XG59O1xuXG5HZW8uc2lnbmVkUG9seWdvbkFyZWFTdW0gPSBmdW5jdGlvbiAocG9seWdvbikge1xuICAgIGxldCBhcmVhID0gMDtcbiAgICBsZXQgbiA9IHBvbHlnb24ubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7XG4gICAgICAgIGxldCBwMCA9IHBvbHlnb25baV07XG4gICAgICAgIGxldCBwMSA9IHBvbHlnb25baSsxXTtcblxuICAgICAgICBhcmVhICs9IHAwWzBdICogcDFbMV0gLSBwMVswXSAqIHAwWzFdO1xuICAgIH1cblxuICAgIGFyZWEgKz0gcG9seWdvbltuIC0gMV1bMF0gKiBwb2x5Z29uWzBdWzFdIC0gcG9seWdvblswXVswXSAqIHBvbHlnb25bbiAtIDFdWzFdO1xuICAgIHJldHVybiBhcmVhO1xufTtcblxuLy8gVE9ETzogc3VidHJhY3QgaW5uZXIgcmluZyBhcmVhc1xuR2VvLnBvbHlnb25BcmVhID0gZnVuY3Rpb24gKHBvbHlnb24pIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoR2VvLnNpZ25lZFBvbHlnb25BcmVhU3VtKHBvbHlnb24pKSAvIDI7XG59O1xuXG5HZW8ubXVsdGlQb2x5Z29uQXJlYSA9IGZ1bmN0aW9uIChwb2x5Z29ucykge1xuICAgIGxldCBhcmVhID0gMDtcblxuICAgIGZvciAobGV0IHA9MDsgcCA8IHBvbHlnb25zLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgIGxldCBwb2x5Z29uID0gcG9seWdvbnNbcF1bMF07XG4gICAgICAgIGFyZWEgKz0gR2VvLnBvbHlnb25BcmVhKHBvbHlnb24pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmVhO1xufTtcblxuR2VvLnJpbmdXaW5kaW5nID0gZnVuY3Rpb24gKHJpbmcpIHtcbiAgICBsZXQgYXJlYSA9IEdlby5zaWduZWRQb2x5Z29uQXJlYVN1bShyaW5nKTtcbiAgICBpZiAoYXJlYSA+IDApIHtcbiAgICAgICAgcmV0dXJuICdDVyc7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFyZWEgPCAwKSB7XG4gICAgICAgIHJldHVybiAnQ0NXJztcbiAgICB9XG4gICAgLy8gcmV0dXJuIHVuZGVmaW5lZCBvbiB6ZXJvIGFyZWEgcG9seWdvblxufTtcblxuLy8gRW5mb3JjZSB3aW5kaW5nIG9yZGVyIG9uIG91dGVyL2lubmVyIHJpbmdzXG4vLyB3aW5kaW5nOiAnQ1cnIG9yICdDQ1cnXG5HZW8uZW5mb3JjZVdpbmRpbmcgPSBmdW5jdGlvbiAoZ2VvbSwgd2luZGluZykge1xuICAgIGxldCBwb2x5cztcbiAgICBpZiAoZ2VvbS50eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgcG9seXMgPSBbZ2VvbS5jb29yZGluYXRlc107XG4gICAgfVxuICAgIGVsc2UgaWYgKGdlb20udHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgcG9seXMgPSBnZW9tLmNvb3JkaW5hdGVzO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdlb207XG4gICAgfVxuXG4gICAgZm9yIChsZXQgcD0wOyBwIDwgcG9seXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgbGV0IHBvbHkgPSBwb2x5c1twXTtcblxuICAgICAgICAvLyBJZiBmaXJzdCByaW5nIHdpbmRpbmcgZG9lc24ndCBtYXRjaCwgcmV2ZXJzZSBhbGwgcmluZ3NcbiAgICAgICAgLy8gTk9URTogYXNzdW1lcyByaW5nIHdpbmRpbmcgb3JkZXJzIGFscmVhZHkgYWx0ZXJuYXRlIGFzIGV4cGVjdGVkXG4gICAgICAgIGlmIChHZW8ucmluZ1dpbmRpbmcocG9seVswXSkgIT09IHdpbmRpbmcpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHJpbmcgb2YgcG9seSkge1xuICAgICAgICAgICAgICAgIHJpbmcucmV2ZXJzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZW9tO1xufTtcbiIsIi8vIFdlYkdMIGNvbnN0YW50cyAtIG5lZWQgdG8gaW1wb3J0IHRoZXNlIHNlcGFyYXRlbHkgdG8gbWFrZSB0aGVtIGF2YWlsYWJsZSBpbiB0aGUgd2ViIHdvcmtlclxuXG52YXIgZ2w7XG5leHBvcnQgZGVmYXVsdCBnbCA9IHt9O1xuXG4vKiBEYXRhVHlwZSAqL1xuZ2wuQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDAwO1xuZ2wuVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgID0gMHgxNDAxO1xuZ2wuU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDAyO1xuZ2wuVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgID0gMHgxNDAzO1xuZ2wuSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDA0O1xuZ2wuVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgID0gMHgxNDA1O1xuZ2wuRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDA2O1xuIiwiLy8gV2ViR0wgY29udGV4dCB3cmFwcGVyXG5cbnZhciBDb250ZXh0O1xuZXhwb3J0IGRlZmF1bHQgQ29udGV4dCA9IHt9O1xuXG4vLyBTZXR1cCBhIFdlYkdMIGNvbnRleHRcbi8vIElmIG5vIGNhbnZhcyBlbGVtZW50IGlzIHByb3ZpZGVkLCBvbmUgaXMgY3JlYXRlZCBhbmQgYWRkZWQgdG8gdGhlIGRvY3VtZW50IGJvZHlcbkNvbnRleHQuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uIGdldENvbnRleHQgKGNhbnZhcywgb3B0aW9ucylcbntcbiAgICB2YXIgZnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgIGlmIChjYW52YXMgPT0gbnVsbCkge1xuICAgICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgY2FudmFzLnN0eWxlLnRvcCA9IDA7XG4gICAgICAgIGNhbnZhcy5zdHlsZS5sZWZ0ID0gMDtcbiAgICAgICAgY2FudmFzLnN0eWxlLnpJbmRleCA9IC0xO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNhbnZhcyk7XG4gICAgICAgIGZ1bGxzY3JlZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIG9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBvcHRpb25zKTtcbiAgICBpZiAoIWdsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGNyZWF0ZSBXZWJHTCBjb250ZXh0LlwiKTtcbiAgICB9XG5cbiAgICBpZiAoIWZ1bGxzY3JlZW4pIHtcbiAgICAgICAgQ29udGV4dC5yZXNpemUoZ2wsIHBhcnNlRmxvYXQoY2FudmFzLnN0eWxlLndpZHRoKSwgcGFyc2VGbG9hdChjYW52YXMuc3R5bGUuaGVpZ2h0KSwgb3B0aW9ucy5kZXZpY2VfcGl4ZWxfcmF0aW8pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgQ29udGV4dC5yZXNpemUoZ2wsIHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQsIG9wdGlvbnMuZGV2aWNlX3BpeGVsX3JhdGlvKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIENvbnRleHQucmVzaXplKGdsLCB3aW5kb3cuaW5uZXJXaWR0aCwgd2luZG93LmlubmVySGVpZ2h0LCBvcHRpb25zLmRldmljZV9waXhlbF9yYXRpbyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBnbDtcbn07XG5cbkNvbnRleHQucmVzaXplID0gZnVuY3Rpb24gKGdsLCB3aWR0aCwgaGVpZ2h0LCBkZXZpY2VfcGl4ZWxfcmF0aW8pXG57XG4gICAgZGV2aWNlX3BpeGVsX3JhdGlvID0gZGV2aWNlX3BpeGVsX3JhdGlvIHx8IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gICAgZ2wuY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgIGdsLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICAgIGdsLmNhbnZhcy53aWR0aCA9IE1hdGgucm91bmQod2lkdGggKiBkZXZpY2VfcGl4ZWxfcmF0aW8pO1xuICAgIGdsLmNhbnZhcy5oZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCAqIGRldmljZV9waXhlbF9yYXRpbyk7XG4gICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcbiAgICBnbC52aWV3cG9ydCgwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpO1xufTtcbiIsIi8vIFdlYkdMIGV4dGVuc2lvbiB3cmFwcGVyXG4vLyBTdG9yZXMgZXh0ZW5zaW9ucyBieSBuYW1lIGFuZCBHTCBjb250ZXh0XG5cbmxldCBleHRlbnNpb25zID0gbmV3IE1hcCgpOyAvLyBtYXAgb2YgZXh0ZW5zaW9ucyBieSBHTCBjb250ZXh0XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEV4dGVuc2lvbiAoZ2wsIG5hbWUpIHtcbiAgICBsZXQgZXh0cyA9IGV4dGVuc2lvbnMuZ2V0KGdsKTtcbiAgICBpZiAoIWV4dHMpIHtcbiAgICAgICAgZXh0ZW5zaW9ucy5zZXQoZ2wsIG5ldyBNYXAoKSk7XG4gICAgICAgIGV4dHMgPSBleHRlbnNpb25zLmdldChnbCk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRzLmdldChuYW1lKSkge1xuICAgICAgICBleHRzLnNldChuYW1lLCBnbC5nZXRFeHRlbnNpb24obmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gZXh0cy5nZXQobmFtZSk7XG59XG4iLCJ2YXIgR0xTTCA9IHt9O1xuZXhwb3J0IGRlZmF1bHQgR0xTTDtcblxuLyoqXG4gICAgUGFyc2UgdW5pZm9ybXMgZnJvbSBhIEpTIG9iamVjdCwgaW5mZXJzIHR5cGVzIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB0aGVcbiAgICBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gc2V0IHVuaWZvcm0gdmFsdWVzIG9uIGEgR0wgcHJvZ3JhbS4gRWFjaCBvYmplY3QgaW4gdGhlIHJldHVybmVkXG4gICAgYXJyYXkgaGFzIHRoZSBmb3JtOlxuICAgIHsgdHlwZSwgbWV0aG9kLCBuYW1lLCB2YWx1ZSB9XG5cbiAgICB0eXBlOiB0aGUgR0wgdW5pZm9ybSB0eXBlLCBzdWNoIGFzICd2ZWMzJywgJ2Zsb2F0JywgZXRjLlxuICAgIG1ldGhvZDogdGhlIEdMIHVuaWZvcm0gc2V0dGVyIG1ldGhvZCB0byB1c2UsIHN1Y2ggYXMgJzFmJywgJzNmdicsIGV0Yy5cbiAgICBuYW1lOiB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIEdMIHVuaWZvcm0gbG9jYXRpb24sIGUuZy4gJ2FycmF5WzBdLmZpZWxkJywgZXRjLlxuICAgIHZhbHVlOiB0aGUgdmFsdWUgdG8gYmUgcGFzc2VkIHRvIHRoZSBHTCB1bmlmb3JtIHNldHRlciBmb3IgdGhhdCB0eXBlLCBlLmcuIFsxLCAyLCAzXSBmb3IgYSB2ZWMzXG5cbiAgICBUZXh0dXJlcyBoYXZlIHNwZWNpYWwgYmVoYXZpb3I6IHVuaWZvcm1zIHdpdGggc3RyaW5nIHZhbHVlcyBhcmUgdHJlYXRlZCBhcyB0ZXh0dXJlcywgYW5kXG4gICAgdGhlIHN0cmluZyBpcyB1c2VkIGFzIGEgdW5pcXVlIHRleHR1cmUgJ2tleScgdG8gYmUgaW50ZXJwcmV0ZWQgYnkgdGhlIGNhbGxlciAod2hpY2ggaXMgcmVzcG9uc2libGVcbiAgICBmb3IgYWN0dWFsbHkgc2V0dGluZyB0aGUgdW5pZm9ybXMpLiBGb3IgZXhhbXBsZSwgdGhpcyBjb3VsZCBiZSB1c2VkIGFzIGEga2V5IGludG8gYSBkaWN0aW9uYXJ5IG9mXG4gICAga25vd24gdGV4dHVyZSBuYW1lcywgb3IgaXQgY291bGQgc2ltcGx5IGJlIHVzZWQgYXMgYSBVUkwgdG8gZHluYW1pY2FsbHkgbG9hZCB0aGUgdGV4dHVyZSBmcm9tLlxuKi9cbkdMU0wucGFyc2VVbmlmb3JtcyA9IGZ1bmN0aW9uICh1bmlmb3JtcywgcHJlZml4ID0gbnVsbCkge1xuICAgIHZhciBwYXJzZWQgPSBbXTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gdW5pZm9ybXMpIHtcbiAgICAgICAgdmFyIGtleSA9IG5hbWU7IC8vIHNhdmUgdGhlIG9yaWdpbmFsIG5hbWVcbiAgICAgICAgdmFyIHVuaWZvcm0gPSB1bmlmb3Jtc1tuYW1lXTtcbiAgICAgICAgdmFyIHU7XG5cbiAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgICAgbmFtZSA9IHByZWZpeCArICcuJyArIG5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaW5nbGUgZmxvYXRcbiAgICAgICAgaWYgKHR5cGVvZiB1bmlmb3JtID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcGFyc2VkLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnMWYnLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHVuaWZvcm0sXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHVuaWZvcm1zXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBcnJheTogdmVjdG9yLCBhcnJheSBvZiBmbG9hdHMsIGFycmF5IG9mIHRleHR1cmVzLCBvciBhcnJheSBvZiBzdHJ1Y3RzXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodW5pZm9ybSkpIHtcbiAgICAgICAgICAgIC8vIE51bWVyaWMgdmFsdWVzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHVuaWZvcm1bMF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgLy8gZmxvYXQgdmVjdG9ycyAodmVjMiwgdmVjMywgdmVjNClcbiAgICAgICAgICAgICAgICBpZiAodW5pZm9ybS5sZW5ndGggPj0gMiAmJiB1bmlmb3JtLmxlbmd0aCA8PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd2ZWMnICsgdW5pZm9ybS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHVuaWZvcm0ubGVuZ3RoICsgJ2Z2JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBmbG9hdCBhcnJheVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm0ubGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZmxvYXRbXScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICcxZnYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSArICdbMF0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogYXNzdW1lIG1hdHJpeCBmb3IgKHR5cGVvZiA9PSBGbG9hdDMyQXJyYXkgJiYgbGVuZ3RoID09IDE2KT9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFycmF5IG9mIHRleHR1cmVzXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdW5pZm9ybVswXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHU9MDsgdSA8IHVuaWZvcm0ubGVuZ3RoOyB1KyspIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NhbXBsZXIyRCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICcxaScsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lICsgJ1snICsgdSArICddJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmlmb3JtW3VdLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB1LFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXM6IHVuaWZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQXJyYXkgb2YgYXJyYXlzIC0gYnV0IG9ubHkgYXJyYXlzIG9mIHZlY3RvcnMgYXJlIGFsbG93ZWQgaW4gdGhpcyBjYXNlXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVuaWZvcm1bMF0pICYmIHR5cGVvZiB1bmlmb3JtWzBdWzBdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIC8vIGZsb2F0IHZlY3RvcnMgKHZlYzIsIHZlYzMsIHZlYzQpXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1bMF0ubGVuZ3RoID49IDIgJiYgdW5pZm9ybVswXS5sZW5ndGggPD0gNCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XG4gICAgICAgICAgICAgICAgICAgIGZvciAodT0wOyB1IDwgdW5pZm9ybS5sZW5ndGg7IHUrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd2ZWMnICsgdW5pZm9ybVswXS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiB1bmlmb3JtW3VdLmxlbmd0aCArICdmdicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSArICdbJyArIHUgKyAnXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuaWZvcm1bdV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zOiB1bmlmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbHNlIGVycm9yP1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQXJyYXkgb2Ygc3RydWN0dXJlc1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHVuaWZvcm1bMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZm9yICh1PTA7IHUgPCB1bmlmb3JtLmxlbmd0aDsgdSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBlYWNoIHN0cnVjdCBpbiB0aGUgYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkLnB1c2goLi4uR0xTTC5wYXJzZVVuaWZvcm1zKHVuaWZvcm1bdV0sIG5hbWUgKyAnWycgKyB1ICsgJ10nKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEJvb2xlYW5cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHVuaWZvcm0gPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcGFyc2VkLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sJyxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICcxaScsXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdW5pZm9ybSxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgdW5pZm9ybXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRleHR1cmVcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHVuaWZvcm0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXJzZWQucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3NhbXBsZXIyRCcsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnMWknLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHVuaWZvcm0sXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHVuaWZvcm1zXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdHJ1Y3R1cmVcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHVuaWZvcm0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBTZXQgZWFjaCBmaWVsZCBpbiB0aGUgc3RydWN0XG4gICAgICAgICAgICBwYXJzZWQucHVzaCguLi5HTFNMLnBhcnNlVW5pZm9ybXModW5pZm9ybSwgbmFtZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBvdGhlciBub24tZmxvYXQgdHlwZXM/IChpbnQsIGV0Yy4pXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbi8qKlxuICAgIEdlbmVyYXRlIGEgR0xTTCB2YXJpYWJsZSBkZWZpbml0aW9uIGZyb20gYSBKUyBvYmplY3RcbiovXG5HTFNMLmRlZmluZVZhcmlhYmxlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBwcmVmaXggPSBudWxsKSB7XG4gICAgdmFyIHR5cGUsIGFycmF5O1xuICAgIHZhciBzdHJ1Y3RzID0gJyc7XG4gICAgcHJlZml4ID0gcHJlZml4ID8gcHJlZml4ICsgJ18nICsgbmFtZSA6IG5hbWU7XG5cbiAgICAvLyBTaW5nbGUgZmxvYXRcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICB0eXBlID0gJ2Zsb2F0JztcbiAgICB9XG4gICAgLy8gTXVsdGlwbGUgZmxvYXRzIC0gdmVjdG9yIG9yIGFycmF5XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gTnVtZXJpYyB2YWx1ZXNcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZVswXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIC8vIGZsb2F0IHZlY3RvcnMgKHZlYzIsIHZlYzMsIHZlYzQpXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID49IDIgJiYgdmFsdWUubGVuZ3RoIDw9IDQpIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gJ3ZlYycgKyB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmbG9hdCBhcnJheVxuICAgICAgICAgICAgZWxzZSB7IC8vaWYgKHZhbHVlLmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gJ2Zsb2F0JztcbiAgICAgICAgICAgICAgICBhcnJheSA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRPRE86IGFzc3VtZSBtYXRyaXggZm9yICh0eXBlb2YgPT0gRmxvYXQzMkFycmF5ICYmIGxlbmd0aCA9PSAxNik/XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXJyYXkgb2YgdGV4dHVyZXNcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdHlwZSA9ICdzYW1wbGVyMkQnO1xuICAgICAgICAgICAgYXJyYXkgPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXJyYXkgb2YgYXJyYXlzIC0gYnV0IG9ubHkgYXJyYXlzIG9mIHZlY3RvcnMgYXJlIGFsbG93ZWQgaW4gdGhpcyBjYXNlXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVbMF0pICYmIHR5cGVvZiB2YWx1ZVswXVswXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIC8vIGZsb2F0IHZlY3RvcnMgKHZlYzIsIHZlYzMsIHZlYzQpXG4gICAgICAgICAgICBpZiAodmFsdWVbMF0ubGVuZ3RoID49IDIgJiYgdmFsdWVbMF0ubGVuZ3RoIDw9IDQpIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gJ3ZlYycgKyB2YWx1ZVswXS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbHNlIGVycm9yP1xuICAgICAgICAgICAgYXJyYXkgPSB2YWx1ZVswXS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXJyYXkgb2Ygc3RydWN0dXJlc1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWVbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0eXBlID0gJ190eXBlXycgKyBwcmVmaXg7IC8vIGN1c3RvbSBzdHJ1Y3QgbmFtZVxuICAgICAgICAgICAgYXJyYXkgPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICBzdHJ1Y3RzICs9IEdMU0wuZGVmaW5lU3RydWN0KHR5cGUsIHZhbHVlWzBdLCBwcmVmaXgpICsgJ1xcbic7IC8vIGJ1aWxkICYgYWRkIHRvIGxpc3Qgb2YgZGVwZW5kZW50IHN0cnVjdHNcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBCb29sZWFuXG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdHlwZSA9ICdib29sJztcbiAgICB9XG4gICAgLy8gVGV4dHVyZVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdHlwZSA9ICdzYW1wbGVyMkQnO1xuICAgIH1cbiAgICAvLyBTdHJ1Y3R1cmVcbiAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHR5cGUgPSAnX3R5cGVfJyArIHByZWZpeDsgLy8gY3VzdG9tIHN0cnVjdCBuYW1lXG4gICAgICAgIHN0cnVjdHMgKz0gR0xTTC5kZWZpbmVTdHJ1Y3QodHlwZSwgdmFsdWUsIHByZWZpeCkgKyAnXFxuJzsgLy8gYnVpbGQgJiBhZGQgdG8gbGlzdCBvZiBkZXBlbmRlbnQgc3RydWN0c1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCB2YXJpYWJsZSBkZWZpbml0aW9uXG4gICAgdmFyIHZhcmlhYmxlID0gJyc7XG4gICAgdmFyaWFibGUgKz0gYCR7dHlwZX0gJHtuYW1lfWA7XG4gICAgaWYgKGFycmF5KSB7XG4gICAgICAgIHZhcmlhYmxlICs9IGBbJHthcnJheX1dYDtcbiAgICB9XG4gICAgdmFyaWFibGUgKz0gJztcXG4nO1xuXG4gICAgLy8gUmV0dXJuIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGl0c2VsZiwgYW5kIGFueSBkZXBlbmRlbnQgc3RydWN0IGRlZmluaXRpb25zXG4gICAgcmV0dXJuIHsgdmFyaWFibGUsIHN0cnVjdHMgfTtcbn07XG5cbi8qKlxuICAgIEdlbmVyYXRlIGEgR0xTTCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBmcm9tIGEgSlMgb2JqZWN0XG4qL1xuR0xTTC5kZWZpbmVTdHJ1Y3QgPSBmdW5jdGlvbiAodHlwZSwgdmFsdWUsIHByZWZpeCA9IG51bGwpIHtcbiAgICB2YXIgc3RydWN0ID0gYHN0cnVjdCAke3R5cGV9IHtcXG5gO1xuICAgIHZhciBkZXBlbmRlbnRzID0gJyc7XG4gICAgZm9yICh2YXIgZmllbGQgaW4gdmFsdWUpIHtcbiAgICAgICAgdmFyIHN1YnZhciA9IEdMU0wuZGVmaW5lVmFyaWFibGUoZmllbGQsIHZhbHVlW2ZpZWxkXSwgcHJlZml4KTtcbiAgICAgICAgc3RydWN0ICs9ICcgICAgJyArIHN1YnZhci52YXJpYWJsZTtcbiAgICAgICAgZGVwZW5kZW50cyArPSBzdWJ2YXIuc3RydWN0cztcbiAgICB9XG4gICAgc3RydWN0ICs9ICd9O1xcbic7XG4gICAgc3RydWN0ID0gZGVwZW5kZW50cyArIHN0cnVjdDtcbiAgICByZXR1cm4gc3RydWN0O1xufTtcblxuLyoqXG4gICAgR2VuZXJhdGUgYSBHTFNMIHVuaWZvcm0gZGVmaW5pdGlvbiBmcm9tIGEgSlMgb2JqZWN0XG4qL1xuR0xTTC5kZWZpbmVVbmlmb3JtID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIGRlZiA9IEdMU0wuZGVmaW5lVmFyaWFibGUobmFtZSwgdmFsdWUpO1xuICAgIGRlZiA9IGRlZi5zdHJ1Y3RzICsgJ3VuaWZvcm0gJyArIGRlZi52YXJpYWJsZTtcbiAgICByZXR1cm4gZGVmO1xufTtcblxuLyoqXG4gICAgQ2hlY2sgZm9yIGEgdW5pZm9ybSBkZWZpbml0aW9uIG9mICduYW1lJyBpbiB0aGUgcHJvdmlkZWQgR0xTTCBzb3VyY2VcbiAgICBTaW1wbGUgcmVnZXggY2hlY2sgZm9yICd1bmlmb3JtJyBrZXl3b3JkIGFuZCB2YXIgbmFtZSwgZG9lcyBub3QgYXR0ZW1wdCB0byBwYXJzZS9leHRyYWN0IEdMU0xcbiAgICBOT1RFOiBhc3N1bWVzIGNvbW1lbnRzIGhhdmUgYmVlbiBzdHJpcHBlZCBmcm9tIHNvdXJjZVxuKi9cbkdMU0wuaXNVbmlmb3JtRGVmaW5lZCA9IGZ1bmN0aW9uIChuYW1lLCBzb3VyY2UpIHtcbiAgICAvLyBNYXRjaCwgaW4gb3JkZXI6XG4gICAgLy8gLSB0aGUga2V5d29yZCAndW5pZm9ybSdcbiAgICAvLyAtIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgdGhhdCBpcyBhbnl0aGluZyBleGNlcHQgYSBzZW1pY29sb24sIDtcbiAgICAvLyAtIG9wdGlvbmFsbHksIGFueXRoaW5nIGVuY2xvc2VkIGluIGN1cmx5IGJyYWNlcywgeyAuLi4gfSAoYW4gaW5saW5lIHN0cnVjdHVyZSBkZWZpbml0aW9uIGNhbiBnbyBoZXJlKVxuICAgIC8vIC0gb3B0aW9uYWxseSwgYW55ICMgb2YgY2hhcmFjdGVycyB0aGF0IGlzIG5vdCBhIHNlbWljb2xvbiwgO1xuICAgIC8vIC0gdGhlIG5hbWUgb2YgdGhlIHVuaWZvcm1cblxuICAgIHZhciByZSA9IG5ldyBSZWdFeHAoJ3VuaWZvcm1bXjtdKyg/OntbXFxcXHNcXFxcU10qfSk/W147XSpcXFxcYicgKyBuYW1lICsgJ1xcXFxiJywgJ2cnKTtcbiAgICBpZiAoc291cmNlLm1hdGNoKHJlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gICAgQ2hlY2sgdGhhdCBhIHN5bWJvbCBpcyByZWZlcmVuY2VkIGluIHRoZSBHTFNMIHNvdXJjZVxuICAgIE5PVEU6IGFzc3VtZXMgY29tbWVudHMgaGF2ZSBiZWVuIHN0cmlwcGVkIGZyb20gc291cmNlXG4qL1xuR0xTTC5pc1N5bWJvbFJlZmVyZW5jZWQgPSBmdW5jdGlvbiAobmFtZSwgc291cmNlKSB7XG4gICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgnXFxcXGInICsgbmFtZSArICdcXFxcYicsICdnJyk7XG4gICAgaWYgKHNvdXJjZS5zZWFyY2gocmUpID49IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICAgIEV4cGFuZCBhIHNpbmdsZSB2YWx1ZSBvciAyLWVsZW1lbnQgYXJyYXkgaW50byBhIDMtZWxlbWVudCBhcnJheSwgd2l0aCB0aGUgbGFzdCAoIHogKVxuICAgIGNvb3JkaW5hdGUgZGVmYXVsdGluZyB0byAxICh3aXRoIG9wdGlvbiB0byBzcGVjaWZ5KS4gQWxzbyBydW5zIHBhcnNlRmxvYXQgdG8gdHJ5IHRvIG1haW50YWluXG4gICAgZGF0YSBpbnRlZ3JpdHkuIFJldHVybnMgbnVsbCBpZiBpbnB1dCBjb3VsZG4ndCBiZSBwYXJzZWQuXG4qL1xuR0xTTC5leHBhbmRWZWMzID0gZnVuY3Rpb24gKHYsIHogPSAxKSB7XG4gICAgbGV0IHg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodikgJiYgdi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgeCA9IFsuLi52LCB6XS5tYXAocGFyc2VGbG9hdCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4ID0gW3YsIHYsIHZdLm1hcChwYXJzZUZsb2F0KTtcbiAgICB9XG5cbiAgICBpZiAoeCAmJiB4LmV2ZXJ5KG4gPT4gdHlwZW9mIG4gPT09ICdudW1iZXInICYmICFpc05hTihuKSkpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxufTtcblxuLyoqXG4gICAgRXhwYW5kIGEgc2luZ2xlIHZhbHVlIG9yIDMtZWxlbWVudCBhcnJheSBpbnRvIGEgNC1lbGVtZW50IGFycmF5LCB3aXRoIHRoZSBsYXN0IChlLmcuIHcgb3IgYSlcbiAgICBjb29yZGluYXRlIGRlZmF1bHRpbmcgdG8gMSAod2l0aCBvcHRpb24gdG8gc3BlY2lmeSkuIEFsc28gcnVucyBwYXJzZUZsb2F0IHRvIHRyeSB0byBtYWludGFpblxuICAgIGRhdGEgaW50ZWdyaXR5LiBSZXR1cm5zIG51bGwgaWYgaW5wdXQgY291bGRuJ3QgYmUgcGFyc2VkLlxuKi9cbkdMU0wuZXhwYW5kVmVjNCA9IGZ1bmN0aW9uICh2LCB3ID0gMSkge1xuICAgIGxldCB4O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHYpICYmIHYubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIHggPSBbLi4udiwgd10ubWFwKHBhcnNlRmxvYXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeCA9IFt2LCB2LCB2LCB3XS5tYXAocGFyc2VGbG9hdCk7XG4gICAgfVxuXG4gICAgaWYgKHggJiYgeC5ldmVyeShuID0+IHR5cGVvZiBuID09PSAnbnVtYmVyJyAmJiAhaXNOYU4obikpKSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbn07XG5cblxuIiwiXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZW5kZXJTdGF0ZSB7XG5cdGNvbnN0cnVjdG9yICh2YWx1ZSwgc2V0dXApIHtcbiAgICAgICAgc2V0dXAodmFsdWUpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0dXAgPSBzZXR1cDtcbiAgICB9XG5cbiAgICBzZXQgKHZhbHVlKSB7XG4gICAgXHQvLyBpZiB0aGUgc3RhdGVzIGFyZSBkaWZmZXJlbnQsIGNhbGwgdGhlIEdMIGNvbnRleHQgZm9yIGEgc3RhdGUgY2hhbmdlXG4gICAgXHRpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkge1xuICAgIFx0XHR0aGlzLnNldHVwKHZhbHVlKTtcbiAgICBcdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIFx0fVxuICAgIH1cblxuICAgIHN0YXRpYyBpbml0aWFsaXplIChnbCkge1xuICAgICAgICBSZW5kZXJTdGF0ZS5kZWZhdWx0cyA9IHt9O1xuICAgICAgICAvLyBDdWxsaW5nXG4gICAgICAgIFJlbmRlclN0YXRlLmRlZmF1bHRzLmN1bGxpbmcgPSB0cnVlO1xuICAgICAgICBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5jdWxsaW5nX2ZhY2UgPSBnbC5CQUNLO1xuXG4gICAgICAgIC8vIEJsZW5kaW5nXG4gICAgICAgIFJlbmRlclN0YXRlLmRlZmF1bHRzLmJsZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIFJlbmRlclN0YXRlLmRlZmF1bHRzLmJsZW5kaW5nX3NyYyA9IGdsLk9ORV9NSU5VU19TUkNfQUxQSEE7XG4gICAgICAgIFJlbmRlclN0YXRlLmRlZmF1bHRzLmJsZW5kaW5nX2RzdCA9IGdsLk9ORV9NSU5VU19TUkNfQUxQSEE7XG4gICAgICAgIFJlbmRlclN0YXRlLmRlZmF1bHRzLmJsZW5kaW5nX3NyY19hbHBoYSA9IGdsLk9ORTtcbiAgICAgICAgUmVuZGVyU3RhdGUuZGVmYXVsdHMuYmxlbmRpbmdfZHN0X2FscGhhID0gZ2wuT05FX01JTlVTX1NSQ19BTFBIQTtcblxuICAgICAgICAvLyBEZXB0aCB0ZXN0L3dyaXRlXG4gICAgICAgIFJlbmRlclN0YXRlLmRlZmF1bHRzLmRlcHRoX3dyaXRlID0gdHJ1ZTtcbiAgICAgICAgUmVuZGVyU3RhdGUuZGVmYXVsdHMuZGVwdGhfdGVzdCA9IHRydWU7XG4gICAgICAgIGdsLmRlcHRoRnVuYyhnbC5MRVNTKTsgLy8gZGVwdGggZnVuY3Rpb24gb25seSBuZWVkcyB0byBiZSBzZXQgb25jZVxuXG4gICAgXHQvLyBDdWxsaW5nXG4gICAgXHRSZW5kZXJTdGF0ZS5jdWxsaW5nID0gbmV3IFJlbmRlclN0YXRlKFxuICAgIFx0XHR7IGN1bGw6IFJlbmRlclN0YXRlLmRlZmF1bHRzLmN1bGxpbmcsIGZhY2U6IFJlbmRlclN0YXRlLmRlZmF1bHRzLmN1bGxpbmdfZmFjZSB9LFxuICAgIFx0XHQodmFsdWUpID0+IHtcbiAgICBcdFx0XHRpZiAodmFsdWUuY3VsbCkge1xuICAgIFx0XHRcdFx0Z2wuZW5hYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgICAgICAgICBcdFx0Z2wuY3VsbEZhY2UodmFsdWUuZmFjZSk7XG4gICAgXHRcdFx0fSBlbHNlIHtcbiAgICBcdFx0XHRcdGdsLmRpc2FibGUoZ2wuQ1VMTF9GQUNFKTtcbiAgICBcdFx0XHR9XG4gICAgXHRcdH1cbiAgICBcdCk7XG5cbiAgICBcdC8vIEJsZW5kaW5nIG1vZGVcbiAgICBcdFJlbmRlclN0YXRlLmJsZW5kaW5nID0gbmV3IFJlbmRlclN0YXRlKHtcbiAgICAgICAgICAgICAgICBibGVuZDogUmVuZGVyU3RhdGUuZGVmYXVsdHMuYmxlbmRpbmcsXG4gICAgICAgICAgICAgICAgc3JjOiBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5ibGVuZGluZ19zcmMsXG4gICAgICAgICAgICAgICAgZHN0OiBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5ibGVuZGluZ19kc3QsXG4gICAgICAgICAgICAgICAgc3JjX2FscGhhOiBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5ibGVuZGluZ19zcmNfYWxwaGEsXG4gICAgICAgICAgICAgICAgZHN0X2FscGhhOiBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5ibGVuZGluZ19kc3RfYWxwaGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAodmFsdWUpID0+IHtcbiAgICBcdFx0XHRpZiAodmFsdWUuYmxlbmQpIHtcbiAgICAgICAgICAgIFx0XHRnbC5lbmFibGUoZ2wuQkxFTkQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zcmNfYWxwaGEgJiYgdmFsdWUuZHN0X2FscGhhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZSh2YWx1ZS5zcmMsIHZhbHVlLmRzdCwgdmFsdWUuc3JjX2FscGhhLCB2YWx1ZS5kc3RfYWxwaGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRGdW5jKHZhbHVlLnNyYywgdmFsdWUuZHN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgIFx0XHRcdH0gZWxzZSB7XG4gICAgXHRcdFx0XHRnbC5kaXNhYmxlKGdsLkJMRU5EKTtcbiAgICBcdFx0XHR9XG4gICAgXHRcdH1cbiAgICBcdCk7XG5cbiAgICBcdC8vIERlcHRoIHdyaXRlXG4gICAgXHRSZW5kZXJTdGF0ZS5kZXB0aF93cml0ZSA9IG5ldyBSZW5kZXJTdGF0ZShcbiAgICBcdFx0eyBkZXB0aF93cml0ZTogUmVuZGVyU3RhdGUuZGVmYXVsdHMuZGVwdGhfd3JpdGUgfSxcbiAgICBcdFx0KHZhbHVlKSA9PiB7XG4gICAgICAgIFx0XHRnbC5kZXB0aE1hc2sodmFsdWUuZGVwdGhfd3JpdGUpO1xuICAgIFx0XHR9XG4gICAgXHQpO1xuXG4gICAgXHQvLyBEZXB0aCB0ZXN0XG4gICAgXHRSZW5kZXJTdGF0ZS5kZXB0aF90ZXN0ID0gbmV3IFJlbmRlclN0YXRlKFxuICAgICAgICAgICAgeyBkZXB0aF90ZXN0OiBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5kZXB0aF90ZXN0IH0sXG4gICAgICAgICAgICAodmFsdWUpID0+IHtcbiAgICBcdFx0XHRpZiAodmFsdWUuZGVwdGhfdGVzdCkge1xuICAgICAgICAgICAgXHRcdGdsLmVuYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBcdFx0XHR9IGVsc2Uge1xuICAgICAgICAgICAgXHRcdGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgXHRcdFx0fVxuICAgIFx0XHR9XG4gICAgXHQpO1xuXG4gICAgfVxufVxuIiwiLy8gR0wgcHJvZ3JhbSB3cmFwcGVyIHRvIGNhY2hlIHVuaWZvcm0gbG9jYXRpb25zL3ZhbHVlcywgZG8gY29tcGlsZS10aW1lIHByZS1wcm9jZXNzaW5nXG4vLyAoaW5qZWN0aW5nICNkZWZpbmVzIGFuZCAjcHJhZ21hIGJsb2NrcyBpbnRvIHNoYWRlcnMpLCBldGMuXG5cbmltcG9ydCBHTFNMIGZyb20gJy4vZ2xzbCc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IGdldEV4dGVuc2lvbiBmcm9tICcuL2V4dGVuc2lvbnMnO1xuXG5pbXBvcnQgbG9nIGZyb20gJ2xvZ2xldmVsJztcbmltcG9ydCBzdHJpcCBmcm9tICdzdHJpcC1jb21tZW50cyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIHBhcnNlU2hhZGVyRXJyb3JzIH0gZnJvbSAnZ2wtc2hhZGVyLWVycm9ycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWRlclByb2dyYW0ge1xuXG4gICAgY29uc3RydWN0b3IoZ2wsIHZlcnRleF9zb3VyY2UsIGZyYWdtZW50X3NvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgICB0aGlzLmdsID0gZ2w7XG4gICAgICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG4gICAgICAgIHRoaXMuY29tcGlsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21waWxpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XG5cbiAgICAgICAgLy8ga2V5L3ZhbHVlcyBpbnNlcnRlZCBhcyAjZGVmaW5lcyBpbnRvIHNoYWRlcnMgYXQgY29tcGlsZS10aW1lXG4gICAgICAgIHRoaXMuZGVmaW5lcyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuZGVmaW5lc3x8e30pO1xuXG4gICAgICAgIC8vIGtleS92YWx1ZXMgZm9yIGJsb2NrcyB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIHNoYWRlcnMgYXQgY29tcGlsZS10aW1lXG4gICAgICAgIHRoaXMuYmxvY2tzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5ibG9ja3N8fHt9KTtcbiAgICAgICAgdGhpcy5ibG9ja19zY29wZXMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmJsb2NrX3Njb3Blc3x8e30pO1xuXG4gICAgICAgIC8vIGxpc3Qgb2YgZXh0ZW5zaW9ucyB0byBhY3RpdmF0ZVxuICAgICAgICB0aGlzLmV4dGVuc2lvbnMgPSBvcHRpb25zLmV4dGVuc2lvbnMgfHwgW107XG5cbiAgICAgICAgLy8gSlMtb2JqZWN0IHVuaWZvcm1zIHRoYXQgYXJlIGV4cGVjdGVkIGJ5IHRoaXMgcHJvZ3JhbVxuICAgICAgICAvLyBJZiB0aGV5IGFyZSBub3QgZm91bmQgaW4gdGhlIGV4aXN0aW5nIHNoYWRlciBzb3VyY2UsIHRoZWlyIHR5cGVzIHdpbGwgYmUgaW5mZXJyZWQgYW5kIGRlZmluaXRpb25zXG4gICAgICAgIC8vIGZvciBlYWNoIHdpbGwgYmUgaW5qZWN0ZWQuXG4gICAgICAgIHRoaXMuZGVwZW5kZW50X3VuaWZvcm1zID0gb3B0aW9ucy51bmlmb3JtcztcblxuICAgICAgICB0aGlzLnVuaWZvcm1zID0ge307IC8vIHByb2dyYW0gbG9jYXRpb25zIG9mIHVuaWZvcm1zLCBsYXppbHkgYWRkZWQgYXMgZWFjaCB1bmlmb3JtIGlzIHNldFxuICAgICAgICB0aGlzLmF0dHJpYnMgPSB7fTsgLy8gcHJvZ3JhbSBsb2NhdGlvbnMgb2YgdmVydGV4IGF0dHJpYnV0ZXMsIGxhemlseSBhZGRlZCBhcyBlYWNoIGF0dHJpYnV0ZSBpcyBhY2Nlc3NlZFxuXG4gICAgICAgIHRoaXMudmVydGV4X3NvdXJjZSA9IHZlcnRleF9zb3VyY2U7XG4gICAgICAgIHRoaXMuZnJhZ21lbnRfc291cmNlID0gZnJhZ21lbnRfc291cmNlO1xuXG4gICAgICAgIHRoaXMuaWQgPSBTaGFkZXJQcm9ncmFtLmlkKys7XG4gICAgICAgIFNoYWRlclByb2dyYW0ucHJvZ3JhbXNbdGhpcy5pZF0gPSB0aGlzO1xuICAgICAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7IC8vIGNhbiBwcm92aWRlIGEgcHJvZ3JhbSBuYW1lICh1c2VmdWwgZm9yIGRlYnVnZ2luZylcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgICAgIHRoaXMuZ2wuZGVsZXRlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuICAgICAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuICAgICAgICB0aGlzLnVuaWZvcm1zID0ge307XG4gICAgICAgIHRoaXMuYXR0cmlicyA9IHt9O1xuICAgICAgICBkZWxldGUgU2hhZGVyUHJvZ3JhbS5wcm9ncmFtc1t0aGlzLmlkXTtcbiAgICAgICAgdGhpcy5jb21waWxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFVzZSBwcm9ncmFtIHdyYXBwZXIgd2l0aCBzaW1wbGUgc3RhdGUgY2FjaGVcbiAgICB1c2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb21waWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFNoYWRlclByb2dyYW0uY3VycmVudCAhPT0gdGhpcykge1xuICAgICAgICAgICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG4gICAgICAgIH1cbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5jdXJyZW50ID0gdGhpcztcbiAgICB9XG5cbiAgICBjb21waWxlKCkge1xuICAgICAgICBpZiAodGhpcy5jb21waWxpbmcpIHtcbiAgICAgICAgICAgIHRocm93KG5ldyBFcnJvcihgU2hhZGVyUHJvZ3JhbS5jb21waWxlKCk6IHNraXBwaW5nIGZvciAke3RoaXMuaWR9ICgke3RoaXMubmFtZX0pIGJlY2F1c2UgYWxyZWFkeSBjb21waWxpbmdgKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21waWxpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbXBpbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgICAgIC8vIENvcHkgc291cmNlcyBmcm9tIHByZS1tb2RpZmllZCB0ZW1wbGF0ZVxuICAgICAgICB0aGlzLmNvbXB1dGVkX3ZlcnRleF9zb3VyY2UgPSB0aGlzLnZlcnRleF9zb3VyY2U7XG4gICAgICAgIHRoaXMuY29tcHV0ZWRfZnJhZ21lbnRfc291cmNlID0gdGhpcy5mcmFnbWVudF9zb3VyY2U7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGV4dGVuc2lvbiBhdmFpbGFiaWxpdHlcbiAgICAgICAgbGV0IGV4dGVuc2lvbnMgPSB0aGlzLmNoZWNrRXh0ZW5zaW9ucygpO1xuXG4gICAgICAgIC8vIE1ha2UgbGlzdCBvZiBkZWZpbmVzIHRvIGJlIGluamVjdGVkIGxhdGVyXG4gICAgICAgIHZhciBkZWZpbmVzID0gdGhpcy5idWlsZERlZmluZUxpc3QoKTtcblxuICAgICAgICAvLyBJbmplY3QgdXNlci1kZWZpbmVkIGJsb2NrcyAoYXJiaXRyYXJ5IGNvZGUgcG9pbnRzIG1hdGNoaW5nIG5hbWVkICNwcmFnbWFzKVxuICAgICAgICAvLyBSZXBsYWNlIGFjY29yZGluZyB0byB0aGlzIHBhdHRlcm46XG4gICAgICAgIC8vICNwcmFnbWEgdGFuZ3JhbTogW2tleV1cbiAgICAgICAgLy8gZS5nLiAjcHJhZ21hIHRhbmdyYW06IGdsb2JhbFxuXG4gICAgICAgIC8vIEdhdGhlciBhbGwgYmxvY2sgY29kZSBzbmlwcGV0c1xuICAgICAgICB2YXIgYmxvY2tzID0gdGhpcy5idWlsZFNoYWRlckJsb2NrTGlzdCgpO1xuICAgICAgICB2YXIgcmVnZXhwO1xuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBibG9ja3MpIHtcbiAgICAgICAgICAgIHZhciBibG9jayA9IGJsb2Nrc1trZXldO1xuICAgICAgICAgICAgaWYgKCFibG9jayB8fCAoQXJyYXkuaXNBcnJheShibG9jaykgJiYgYmxvY2subGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGaXJzdCBmaW5kIGNvZGUgcmVwbGFjZSBwb2ludHMgaW4gc2hhZGVyc1xuICAgICAgICAgICAgcmVnZXhwID0gbmV3IFJlZ0V4cCgnXlxcXFxzKiNwcmFnbWFcXFxccyt0YW5ncmFtOlxcXFxzKycgKyBrZXkgKyAnXFxcXHMqJCcsICdtJyk7XG4gICAgICAgICAgICB2YXIgaW5qZWN0X3ZlcnRleCA9IHRoaXMuY29tcHV0ZWRfdmVydGV4X3NvdXJjZS5tYXRjaChyZWdleHApO1xuICAgICAgICAgICAgdmFyIGluamVjdF9mcmFnbWVudCA9IHRoaXMuY29tcHV0ZWRfZnJhZ21lbnRfc291cmNlLm1hdGNoKHJlZ2V4cCk7XG5cbiAgICAgICAgICAgIC8vIEF2b2lkIG5ldHdvcmsgcmVxdWVzdCBpZiBub3RoaW5nIHRvIHJlcGxhY2VcbiAgICAgICAgICAgIGlmIChpbmplY3RfdmVydGV4ID09IG51bGwgJiYgaW5qZWN0X2ZyYWdtZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ29tYmluZSBhbGwgYmxvY2tzIGludG8gb25lIHN0cmluZ1xuICAgICAgICAgICAgdmFyIHNvdXJjZSA9ICcnO1xuICAgICAgICAgICAgYmxvY2suZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE1hcmsgc3RhcnQgYW5kIGVuZCBvZiBlYWNoIGJsb2NrIHdpdGggbWV0YWRhdGEgKHdoaWNoIGNhbiBiZSBleHRyYWN0ZWQgZnJvbVxuICAgICAgICAgICAgICAgIC8vIGZpbmFsIHNvdXJjZSBmb3IgZXJyb3IgaGFuZGxpbmcsIGRlYnVnZ2luZywgZXRjLilcbiAgICAgICAgICAgICAgICBsZXQgbWFyayA9IGAke3ZhbC5zY29wZX0sICR7dmFsLmtleX0sICR7dmFsLm51bX1gO1xuICAgICAgICAgICAgICAgIHNvdXJjZSArPSBgXFxuLy8gdGFuZ3JhbS1ibG9jay1zdGFydDogJHttYXJrfVxcbmA7XG4gICAgICAgICAgICAgICAgc291cmNlICs9IHZhbC5zb3VyY2U7XG4gICAgICAgICAgICAgICAgc291cmNlICs9IGBcXG4vLyB0YW5ncmFtLWJsb2NrLWVuZDogJHttYXJrfVxcbmA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gSW5qZWN0XG4gICAgICAgICAgICBpZiAoaW5qZWN0X3ZlcnRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlZF92ZXJ0ZXhfc291cmNlID0gdGhpcy5jb21wdXRlZF92ZXJ0ZXhfc291cmNlLnJlcGxhY2UocmVnZXhwLCBzb3VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluamVjdF9mcmFnbWVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlZF9mcmFnbWVudF9zb3VyY2UgPSB0aGlzLmNvbXB1dGVkX2ZyYWdtZW50X3NvdXJjZS5yZXBsYWNlKHJlZ2V4cCwgc291cmNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIGEgI2RlZmluZSBmb3IgdGhpcyBpbmplY3Rpb24gcG9pbnRcbiAgICAgICAgICAgIGRlZmluZXNbJ1RBTkdSQU1fQkxPQ0tfJyArIGtleS5yZXBsYWNlKC9bXFxzLV0rL2csICdfJykudG9VcHBlckNhc2UoKV0gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xlYW4tdXAgYW55ICNwcmFnbWFzIHRoYXQgd2VyZW4ndCByZXBsYWNlZCAodG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncylcbiAgICAgICAgcmVnZXhwID0gbmV3IFJlZ0V4cCgnXlxcXFxzKiNwcmFnbWEuKiQnLCAnZ20nKTtcbiAgICAgICAgdGhpcy5jb21wdXRlZF92ZXJ0ZXhfc291cmNlID0gdGhpcy5jb21wdXRlZF92ZXJ0ZXhfc291cmNlLnJlcGxhY2UocmVnZXhwLCAnJyk7XG4gICAgICAgIHRoaXMuY29tcHV0ZWRfZnJhZ21lbnRfc291cmNlID0gdGhpcy5jb21wdXRlZF9mcmFnbWVudF9zb3VyY2UucmVwbGFjZShyZWdleHAsICcnKTtcblxuICAgICAgICAvLyBEZXRlY3QgdW5pZm9ybSBkZWZpbml0aW9ucywgaW5qZWN0IGFueSBtaXNzaW5nIG9uZXNcbiAgICAgICAgdGhpcy5lbnN1cmVVbmlmb3Jtcyh0aGlzLmRlcGVuZGVudF91bmlmb3Jtcyk7XG5cbiAgICAgICAgLy8gQnVpbGQgJiBpbmplY3QgZXh0ZW5zaW9ucyAmIGRlZmluZXNcbiAgICAgICAgLy8gVGhpcyBpcyBkb25lICphZnRlciogY29kZSBpbmplY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIGRlZmluZXMgZm9yIHdoaWNoIGNvZGUgcG9pbnRzIHdlcmUgaW5qZWN0ZWRcbiAgICAgICAgbGV0IGluZm8gPSAodGhpcy5uYW1lID8gKHRoaXMubmFtZSArICcgLyBpZCAnICsgdGhpcy5pZCkgOiAoJ2lkICcgKyB0aGlzLmlkKSk7XG4gICAgICAgIGxldCBoZWFkZXIgPSBgLy8gUHJvZ3JhbTogJHtpbmZvfVxcbmA7XG4gICAgICAgIGxldCBwcmVjaXNpb24gPSAnJztcbiAgICAgICAgbGV0IGhpZ2ggPSB0aGlzLmdsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCh0aGlzLmdsLkZSQUdNRU5UX1NIQURFUiwgdGhpcy5nbC5ISUdIX0ZMT0FUKTtcbiAgICAgICAgaWYgKGhpZ2ggJiYgaGlnaC5wcmVjaXNpb24gPiAwKSB7XG4gICAgICAgICAgICBwcmVjaXNpb24gPSAncHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbic7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcmVjaXNpb24gPSAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuJztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmluZXNbJ1RBTkdSQU1fVkVSVEVYX1NIQURFUiddID0gdHJ1ZTtcbiAgICAgICAgZGVmaW5lc1snVEFOR1JBTV9GUkFHTUVOVF9TSEFERVInXSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbXB1dGVkX3ZlcnRleF9zb3VyY2UgPVxuICAgICAgICAgICAgaGVhZGVyICtcbiAgICAgICAgICAgIHByZWNpc2lvbiArXG4gICAgICAgICAgICBTaGFkZXJQcm9ncmFtLmJ1aWxkRGVmaW5lU3RyaW5nKGRlZmluZXMpICtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWRfdmVydGV4X3NvdXJjZTtcblxuICAgICAgICAvLyBQcmVjaXNpb24gcXVhbGlmaWVyIG9ubHkgdmFsaWQgaW4gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIC8vIE5COiAnI2V4dGVuc2lvbicgc3RhdGVtZW50cyBhZGRlZCB0byBmcmFnbWVudCBzaGFkZXIgb25seSwgYXMgSUUxMSB0aHJvd3MgZXJyb3Igd2hlbiB0aGV5IGFwcGVhciBpblxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyIChldmVuIHdoZW4gZ3VhcmRlZCBieSAjaWZkZWYpLCBhbmQgbm8gV2ViR0wgZXh0ZW5zaW9ucyByZXF1aXJlICcjZXh0ZW5zaW9uJyBpbiB2ZXJ0ZXggc2hhZGVyc1xuICAgICAgICBkZWZpbmVzWydUQU5HUkFNX1ZFUlRFWF9TSEFERVInXSA9IGZhbHNlO1xuICAgICAgICBkZWZpbmVzWydUQU5HUkFNX0ZSQUdNRU5UX1NIQURFUiddID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb21wdXRlZF9mcmFnbWVudF9zb3VyY2UgPVxuICAgICAgICAgICAgU2hhZGVyUHJvZ3JhbS5idWlsZEV4dGVuc2lvblN0cmluZyhleHRlbnNpb25zKSArXG4gICAgICAgICAgICBoZWFkZXIgK1xuICAgICAgICAgICAgcHJlY2lzaW9uICtcbiAgICAgICAgICAgIFNoYWRlclByb2dyYW0uYnVpbGREZWZpbmVTdHJpbmcoZGVmaW5lcykgK1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlZF9mcmFnbWVudF9zb3VyY2U7XG5cbiAgICAgICAgLy8gQ29tcGlsZSAmIHNldCB1bmlmb3JtcyB0byBjYWNoZWQgdmFsdWVzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW0gPSBTaGFkZXJQcm9ncmFtLnVwZGF0ZVByb2dyYW0odGhpcy5nbCwgdGhpcy5wcm9ncmFtLCB0aGlzLmNvbXB1dGVkX3ZlcnRleF9zb3VyY2UsIHRoaXMuY29tcHV0ZWRfZnJhZ21lbnRfc291cmNlKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jb21waWxpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG5cbiAgICAgICAgICAgIC8vIHNoYWRlciBlcnJvciBpbmZvXG4gICAgICAgICAgICBpZiAoZXJyb3IudHlwZSA9PT0gJ3ZlcnRleCcgfHwgZXJyb3IudHlwZSA9PT0gJ2ZyYWdtZW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhZGVyX2Vycm9ycyA9IGVycm9yLmVycm9ycztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBlIG9mIHRoaXMuc2hhZGVyX2Vycm9ycykge1xuICAgICAgICAgICAgICAgICAgICBlLnR5cGUgPSBlcnJvci50eXBlO1xuICAgICAgICAgICAgICAgICAgICBlLmJsb2NrID0gdGhpcy5ibG9jayhlcnJvci50eXBlLCBlLmxpbmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cobmV3IEVycm9yKGBTaGFkZXJQcm9ncmFtLmNvbXBpbGUoKTogcHJvZ3JhbSAke3RoaXMuaWR9ICgke3RoaXMubmFtZX0pIGVycm9yOmAsIGVycm9yKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVzZSgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hVbmlmb3JtcygpO1xuICAgICAgICB0aGlzLnJlZnJlc2hBdHRyaWJ1dGVzKCk7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBsaXN0IG9mIGRlZmluZXMgKGdsb2JhbCwgdGhlbiBwcm9ncmFtLXNwZWNpZmljKVxuICAgIGJ1aWxkRGVmaW5lTGlzdCgpIHtcbiAgICAgICAgdmFyIGQsIGRlZmluZXMgPSB7fTtcbiAgICAgICAgZm9yIChkIGluIFNoYWRlclByb2dyYW0uZGVmaW5lcykge1xuICAgICAgICAgICAgZGVmaW5lc1tkXSA9IFNoYWRlclByb2dyYW0uZGVmaW5lc1tkXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGQgaW4gdGhpcy5kZWZpbmVzKSB7XG4gICAgICAgICAgICBkZWZpbmVzW2RdID0gdGhpcy5kZWZpbmVzW2RdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZpbmVzO1xuICAgIH1cblxuICAgIC8vIE1ha2UgbGlzdCBvZiBzaGFkZXIgYmxvY2tzIChnbG9iYWwsIHRoZW4gcHJvZ3JhbS1zcGVjaWZpYylcbiAgICBidWlsZFNoYWRlckJsb2NrTGlzdCgpIHtcbiAgICAgICAgbGV0IGtleSwgYmxvY2tzID0ge307XG5cbiAgICAgICAgLy8gR2xvYmFsIGJsb2Nrc1xuICAgICAgICBmb3IgKGtleSBpbiBTaGFkZXJQcm9ncmFtLmJsb2Nrcykge1xuICAgICAgICAgICAgYmxvY2tzW2tleV0gPSBbXTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoU2hhZGVyUHJvZ3JhbS5ibG9ja3Nba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBibG9ja3Nba2V5XS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAuLi5TaGFkZXJQcm9ncmFtLmJsb2Nrc1trZXldLm1hcCgoc291cmNlLCBudW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGtleSwgc291cmNlLCBudW0sIHNjb3BlOiAnU2hhZGVyUHJvZ3JhbScgfTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYmxvY2tzW2tleV0gPSBbeyBrZXksIHNvdXJjZTogU2hhZGVyUHJvZ3JhbS5ibG9ja3Nba2V5XSwgbnVtOiAwLCBzY29wZTogJ1NoYWRlclByb2dyYW0nIH1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvZ3JhbS1zcGVjaWZpYyBibG9ja3NcbiAgICAgICAgZm9yIChrZXkgaW4gdGhpcy5ibG9ja3MpIHtcbiAgICAgICAgICAgIGJsb2Nrc1trZXldID0gYmxvY2tzW2tleV0gfHwgW107XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuYmxvY2tzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjb3BlcyA9ICh0aGlzLmJsb2NrX3Njb3BlcyAmJiB0aGlzLmJsb2NrX3Njb3Blc1trZXldKSB8fCBbXTtcbiAgICAgICAgICAgICAgICBsZXQgY3VyX3Njb3BlID0gbnVsbCwgbnVtID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGI9MDsgYiA8IHRoaXMuYmxvY2tzW2tleV0ubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ291bnQgYmxvY2tzIHJlbGF0aXZlIHRvIGN1cnJlbnQgc2NvcGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3Blc1tiXSAhPT0gY3VyX3Njb3BlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJfc2NvcGUgPSBzY29wZXNbYl07XG4gICAgICAgICAgICAgICAgICAgICAgICBudW0gPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYmxvY2tzW2tleV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuYmxvY2tzW2tleV1bYl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBudW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogY3VyX3Njb3BlIHx8IHRoaXMubmFtZVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBudW0rKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBhZGRyZXNzIGRpc2NyZXBhbmN5IGluIGFycmF5IHZzLiBzaW5nbGUtdmFsdWUgYmxvY2tzXG4gICAgICAgICAgICAgICAgLy8gc3R5bGVzIGFzc3VtZSBhcnJheSB3aGVuIHRyYWNraW5nIGJsb2NrIHNjb3Blc1xuICAgICAgICAgICAgICAgIGJsb2Nrc1trZXldLnB1c2goeyBrZXksIHNvdXJjZTogdGhpcy5ibG9ja3Nba2V5XSwgbnVtOiAwLCBzY29wZTogdGhpcy5uYW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibG9ja3M7XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0IHVuaWZvcm0gZGVmaW5pdGlvbnMsIGluamVjdCBhbnkgbWlzc2luZyBvbmVzXG4gICAgZW5zdXJlVW5pZm9ybXModW5pZm9ybXMpIHtcbiAgICAgICAgaWYgKCF1bmlmb3Jtcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHZzID0gc3RyaXAodGhpcy5jb21wdXRlZF92ZXJ0ZXhfc291cmNlKTtcbiAgICAgICAgdmFyIGZzID0gc3RyaXAodGhpcy5jb21wdXRlZF9mcmFnbWVudF9zb3VyY2UpO1xuICAgICAgICB2YXIgaW5qZWN0LCB2c19pbmplY3Rpb25zID0gW10sIGZzX2luamVjdGlvbnMgPSBbXTtcblxuICAgICAgICAvLyBDaGVjayBmb3IgbWlzc2luZyB1bmlmb3JtIGRlZmluaXRpb25zXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdW5pZm9ybXMpIHtcbiAgICAgICAgICAgIGluamVjdCA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIHZlcnRleCBzaGFkZXJcbiAgICAgICAgICAgIGlmICghR0xTTC5pc1VuaWZvcm1EZWZpbmVkKG5hbWUsIHZzKSkge1xuICAgICAgICAgICAgICAgIGlmICghaW5qZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGluamVjdCA9IEdMU0wuZGVmaW5lVW5pZm9ybShuYW1lLCB1bmlmb3Jtc1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZy50cmFjZShgUHJvZ3JhbSAke3RoaXMubmFtZX06ICR7bmFtZX0gbm90IGRlZmluZWQgaW4gdmVydGV4IHNoYWRlciwgaW5qZWN0aW5nOiAnJHtpbmplY3R9J2ApO1xuICAgICAgICAgICAgICAgIHZzX2luamVjdGlvbnMucHVzaChpbmplY3QpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgICAgIGlmICghR0xTTC5pc1VuaWZvcm1EZWZpbmVkKG5hbWUsIGZzKSkge1xuICAgICAgICAgICAgICAgIGlmICghaW5qZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGluamVjdCA9IEdMU0wuZGVmaW5lVW5pZm9ybShuYW1lLCB1bmlmb3Jtc1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZy50cmFjZShgUHJvZ3JhbSAke3RoaXMubmFtZX06ICR7bmFtZX0gbm90IGRlZmluZWQgaW4gZnJhZ21lbnQgc2hhZGVyLCBpbmplY3Rpbmc6ICcke2luamVjdH0nYCk7XG4gICAgICAgICAgICAgICAgZnNfaW5qZWN0aW9ucy5wdXNoKGluamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmplY3QgbWlzc2luZyB1bmlmb3Jtc1xuICAgICAgICAvLyBOT1RFOiB0aGVzZSBhcmUgaW5qZWN0ZWQgYXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBzaGFkZXJzLCBldmVuIGJlZm9yZSBhbnkgI2RlZmluZXMgb3IgI3ByYWdtYXMgYXJlIGFkZGVkXG4gICAgICAgIC8vIHRoaXMgY291bGQgY2F1c2Ugc29tZSBpc3N1ZXMgd2l0aCBjZXJ0YWluICNwcmFnbWFzLCBvciBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBleHBlY3QgI2RlZmluZXNcbiAgICAgICAgaWYgKHZzX2luamVjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlZF92ZXJ0ZXhfc291cmNlID0gdnNfaW5qZWN0aW9ucy5qb2luKCdcXG4nKSArIHRoaXMuY29tcHV0ZWRfdmVydGV4X3NvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmc19pbmplY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWRfZnJhZ21lbnRfc291cmNlID0gZnNfaW5qZWN0aW9ucy5qb2luKCdcXG4nKSArIHRoaXMuY29tcHV0ZWRfZnJhZ21lbnRfc291cmNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IHVuaWZvcm1zIGZyb20gYSBKUyBvYmplY3QsIHdpdGggaW5mZXJyZWQgdHlwZXNcbiAgICBzZXRVbmlmb3Jtcyh1bmlmb3JtcywgcmVzZXRfdGV4dHVyZV91bml0ID0gdHJ1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuY29tcGlsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IG9ubHkgdXBkYXRlIHVuaWZvcm1zIHdoZW4gY2hhbmdlZFxuXG4gICAgICAgIC8vIFRleHR1cmUgdW5pdHMgbXVzdCBiZSB0cmFja2VkIGFuZCBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYSB0ZXh0dXJlIHNhbXBsZXIgdW5pZm9ybSBpcyBzZXQuXG4gICAgICAgIC8vIEJ5IGRlZmF1bHQsIHRoZSB0ZXh0dXJlIHVuaXQgaXMgcmVzZXQgdG8gMCBlYWNoIHRpbWUgc2V0VW5pZm9ybXMgaXMgY2FsbGVkLCBidXQgdGhleSBjYW5cbiAgICAgICAgLy8gYWxzbyBiZSBwcmVzZXJ2ZWQsIGZvciBleGFtcGxlIGluIGNhc2VzIHdoZXJlIG11bHRpcGxlIGNhbGxzIHRvIHNldFVuaWZvcm1zIGFyZSBleHBlY3RlZFxuICAgICAgICAvLyAoZS5nLiBwcm9ncmFtLXNwZWNpZmljIHVuaWZvcm1zIGZvbGxvd2VkIGJ5IG1lc2gtc3BlY2lmaWMgb25lcykuXG4gICAgICAgIGlmIChyZXNldF90ZXh0dXJlX3VuaXQpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZV91bml0ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBhcnNlIHVuaWZvcm0gdHlwZXMgYW5kIHZhbHVlcyBmcm9tIHRoZSBKUyBvYmplY3RcbiAgICAgICAgdmFyIHBhcnNlZCA9IEdMU0wucGFyc2VVbmlmb3Jtcyh1bmlmb3Jtcyk7XG5cbiAgICAgICAgLy8gU2V0IGVhY2ggdW5pZm9ybVxuICAgICAgICBmb3IgKHZhciB1bmlmb3JtIG9mIHBhcnNlZCkge1xuICAgICAgICAgICAgaWYgKHVuaWZvcm0udHlwZSA9PT0gJ3NhbXBsZXIyRCcpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3IgdGV4dHVyZXMsIHdlIG5lZWQgdG8gdHJhY2sgdGV4dHVyZSB1bml0cywgc28gd2UgaGF2ZSBhIHNwZWNpYWwgc2V0dGVyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUZXh0dXJlVW5pZm9ybSh1bmlmb3JtLm5hbWUsIHVuaWZvcm0udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bmlmb3JtKHVuaWZvcm0ubWV0aG9kLCB1bmlmb3JtLm5hbWUsIHVuaWZvcm0udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FjaGUgc29tZSBvciBhbGwgdW5pZm9ybSB2YWx1ZXMgc28gdGhleSBjYW4gYmUgcmVzdG9yZWRcbiAgICBzYXZlVW5pZm9ybXMoc3Vic2V0KSB7XG4gICAgICAgIGxldCB1bmlmb3JtcyA9IHN1YnNldCB8fCB0aGlzLnVuaWZvcm1zO1xuICAgICAgICBmb3IgKGxldCB1IGluIHVuaWZvcm1zKSB7XG4gICAgICAgICAgICBsZXQgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbdV07XG4gICAgICAgICAgICBpZiAodW5pZm9ybSkge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uc2F2ZWRfdmFsdWUgPSB1bmlmb3JtLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2F2ZWRfdGV4dHVyZV91bml0ID0gdGhpcy50ZXh0dXJlX3VuaXQgfHwgMDtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIHNvbWUgb3IgYWxsIHVuaWZvcm1zIHRvIHNhdmVkIHZhbHVlc1xuICAgIHJlc3RvcmVVbmlmb3JtcyhzdWJzZXQpIHtcbiAgICAgICAgbGV0IHVuaWZvcm1zID0gc3Vic2V0IHx8IHRoaXMudW5pZm9ybXM7XG4gICAgICAgIGZvciAobGV0IHUgaW4gdW5pZm9ybXMpIHtcbiAgICAgICAgICAgIGxldCB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1t1XTtcbiAgICAgICAgICAgIGlmICh1bmlmb3JtICYmIHVuaWZvcm0uc2F2ZWRfdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLnZhbHVlID0gdW5pZm9ybS5zYXZlZF92YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVVuaWZvcm0odSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50ZXh0dXJlX3VuaXQgPSB0aGlzLnNhdmVkX3RleHR1cmVfdW5pdCB8fCAwO1xuICAgIH1cblxuICAgIC8vIFNldCBhIHRleHR1cmUgdW5pZm9ybSwgZmluZHMgdGV4dHVyZSBieSBuYW1lIG9yIGNyZWF0ZXMgYSBuZXcgb25lXG4gICAgc2V0VGV4dHVyZVVuaWZvcm0odW5pZm9ybV9uYW1lLCB0ZXh0dXJlX25hbWUpIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLnRleHR1cmVzW3RleHR1cmVfbmFtZV07XG4gICAgICAgIGlmICh0ZXh0dXJlID09IG51bGwpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKGBDYW4ndCBmaW5kIHRleHR1cmUgJyR7dGV4dHVyZV9uYW1lfSdgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRleHR1cmUuYmluZCh0aGlzLnRleHR1cmVfdW5pdCk7XG4gICAgICAgIHRoaXMudW5pZm9ybSgnMWknLCB1bmlmb3JtX25hbWUsIHRoaXMudGV4dHVyZV91bml0KTtcbiAgICAgICAgdGhpcy50ZXh0dXJlX3VuaXQrKzsgLy8gVE9ETzogdHJhY2sgbWF4IHRleHR1cmUgdW5pdHMgYW5kIGxvZy90aHJvdyBlcnJvcnNcbiAgICB9XG5cbiAgICAvLyBleDogcHJvZ3JhbS51bmlmb3JtKCczZicsICdwb3NpdGlvbicsIHgsIHksIHopO1xuICAgIC8vIFRPRE86IG9ubHkgdXBkYXRlIHVuaWZvcm1zIHdoZW4gY2hhbmdlZFxuICAgIHVuaWZvcm0obWV0aG9kLCBuYW1lLCAuLi52YWx1ZSkgeyAvLyAndmFsdWUnIGlzIGEgbWV0aG9kLWFwcHJvcHJpYXRlIGFyZ3VtZW50cyBsaXN0XG4gICAgICAgIGlmICghdGhpcy5jb21waWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51bmlmb3Jtc1tuYW1lXSA9IHRoaXMudW5pZm9ybXNbbmFtZV0gfHwge307XG4gICAgICAgIGxldCB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tuYW1lXTtcbiAgICAgICAgdW5pZm9ybS5uYW1lID0gbmFtZTtcbiAgICAgICAgaWYgKHVuaWZvcm0ubG9jYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdW5pZm9ybS5sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdW5pZm9ybS5tZXRob2QgPSAndW5pZm9ybScgKyBtZXRob2Q7XG4gICAgICAgIHVuaWZvcm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVVbmlmb3JtKG5hbWUpO1xuICAgIH1cblxuICAgIC8vIFNldCBhIHNpbmdsZSB1bmlmb3JtXG4gICAgdXBkYXRlVW5pZm9ybShuYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5jb21waWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHVuaWZvcm0gPSB0aGlzLnVuaWZvcm1zW25hbWVdO1xuICAgICAgICBpZiAoIXVuaWZvcm0gfHwgdW5pZm9ybS5sb2NhdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVzZSgpO1xuICAgICAgICB0aGlzLmdsW3VuaWZvcm0ubWV0aG9kXS5hcHBseSh0aGlzLmdsLCBbdW5pZm9ybS5sb2NhdGlvbl0uY29uY2F0KHVuaWZvcm0udmFsdWUpKTsgLy8gY2FsbCBhcHByb3ByaWF0ZSBHTCB1bmlmb3JtIG1ldGhvZCBhbmQgcGFzcyB0aHJvdWdoIGFyZ3VtZW50c1xuICAgIH1cblxuICAgIC8vIFJlZnJlc2ggdW5pZm9ybSBsb2NhdGlvbnMgYW5kIHNldCB0byBsYXN0IGNhY2hlZCB2YWx1ZXNcbiAgICByZWZyZXNoVW5pZm9ybXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb21waWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgdSBpbiB0aGlzLnVuaWZvcm1zKSB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zW3VdLmxvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCB1KTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVW5pZm9ybSh1KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZnJlc2hBdHRyaWJ1dGVzKCkge1xuICAgICAgICAvLyB2YXIgbGVuID0gdGhpcy5nbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSwgdGhpcy5nbC5BQ1RJVkVfQVRUUklCVVRFUyk7XG4gICAgICAgIC8vIGZvciAodmFyIGk9MDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIC8vICAgICB2YXIgYSA9IHRoaXMuZ2wuZ2V0QWN0aXZlQXR0cmliKHRoaXMucHJvZ3JhbSwgaSk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgdGhpcy5hdHRyaWJzID0ge307XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBsb2NhdGlvbiBvZiBhIHZlcnRleCBhdHRyaWJ1dGVcbiAgICBhdHRyaWJ1dGUobmFtZSkge1xuICAgICAgICBpZiAoIXRoaXMuY29tcGlsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhdHRyaWIgPSAodGhpcy5hdHRyaWJzW25hbWVdID0gdGhpcy5hdHRyaWJzW25hbWVdIHx8IHt9KTtcbiAgICAgICAgaWYgKGF0dHJpYi5sb2NhdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXR0cmliO1xuICAgICAgICB9XG5cbiAgICAgICAgYXR0cmliLm5hbWUgPSBuYW1lO1xuICAgICAgICBhdHRyaWIubG9jYXRpb24gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwgbmFtZSk7XG5cbiAgICAgICAgLy8gdmFyIGluZm8gPSB0aGlzLmdsLmdldEFjdGl2ZUF0dHJpYih0aGlzLnByb2dyYW0sIGF0dHJpYi5sb2NhdGlvbik7XG4gICAgICAgIC8vIGF0dHJpYi50eXBlID0gaW5mby50eXBlO1xuICAgICAgICAvLyBhdHRyaWIuc2l6ZSA9IGluZm8uc2l6ZTtcblxuICAgICAgICByZXR1cm4gYXR0cmliO1xuICAgIH1cblxuICAgIC8vIEdldCBzaGFkZXIgc291cmNlIGFzIHN0cmluZ1xuICAgIHNvdXJjZSh0eXBlKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAndmVydGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZWRfdmVydGV4X3NvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnZnJhZ21lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlZF9mcmFnbWVudF9zb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgc2hhZGVyIHNvdXJjZSBhcyBhcnJheSBvZiBsaW5lIHN0cmluZ3NcbiAgICBsaW5lcyh0eXBlKSB7XG4gICAgICAgIGxldCBzb3VyY2UgPSB0aGlzLnNvdXJjZSh0eXBlKTtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIEdldCBhIHNwZWNpZmljIGxpbmUgZnJvbSBzaGFkZXIgc291cmNlXG4gICAgbGluZSh0eXBlLCBudW0pIHtcbiAgICAgICAgbGV0IHNvdXJjZSA9IHRoaXMubGluZXModHlwZSk7XG4gICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VbbnVtXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCBpbmZvIG9uIHdoaWNoIHNoYWRlciBibG9jayAoaWYgYW55KSBhIHBhcnRpY3VsYXIgbGluZSBudW1iZXIgaW4gYSBzaGFkZXIgaXMgaW5cbiAgICAvLyBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgaW5mbyBpZiBhIGJsb2NrIGlzIGZvdW5kOiB7IG5hbWUsIGxpbmUsIHNvdXJjZSB9XG4gICAgLy8gIHNjb3BlOiB3aGVyZSB0aGUgc2hhZGVyIGJsb2NrIG9yaWdpbmF0ZWQsIGVpdGhlciBhIHN0eWxlIG5hbWUsIG9yIGdsb2JhbCBzdWNoIGFzIFNoYWRlclByb2dyYW1cbiAgICAvLyAgbmFtZTogc2hhZGVyIGJsb2NrIG5hbWUgKGUuZy4gJ2NvbG9yJywgJ3Bvc2l0aW9uJywgJ2dsb2JhbCcpXG4gICAgLy8gIG51bTogdGhlIGJsb2NrIG51bWJlciAqd2l0aGluKiBsb2NhbCBzY29wZSAoZS5nLiBpZiBhIHN0eWxlIGhhcyBtdWx0aXBsZSAnY29sb3InIGJsb2NrcylcbiAgICAvLyAgbGluZTogbGluZSBudW1iZXIgKndpdGhpbiogdGhlIHNoYWRlciBibG9jayAobm90IHRoZSB3aG9sZSBzaGFkZXIgcHJvZ3JhbSksIHVzZWZ1bCBmb3IgZXJyb3IgaGlnaGxpZ2h0aW5nXG4gICAgLy8gIHNvdXJjZTogdGhlIGNvZGUgZm9yIHRoZSBsaW5lXG4gICAgLy8gTk9URTogdGhpcyBkb2VzIGEgYnJ1dGVmb3JjZSBsb29wIG92ZXIgdGhlIHNoYWRlciBzb3VyY2UgYW5kIGxvb2tzIGZvciBzaGFkZXIgYmxvY2sgc3RhcnQvZW5kIG1hcmtlcnNcbiAgICAvLyBXZSBjb3VsZCB0cmFjayBsaW5lIHJhbmdlcyBmb3Igc2hhZGVyIGJsb2NrcyBhcyB0aGV5IGFyZSBpbnNlcnRlZCwgYnV0IGFzIHRoaXMgY29kZSBpcyBvbmx5IHVzZWQgZm9yXG4gICAgLy8gZXJyb3IgaGFuZGxpbmcgb24gY29tcGlsYXRpb24gZmFpbHVyZSwgaXQgd2FzIHNpbXBsZXIgdG8ga2VlcCBpdCBzZXBhcmF0ZSB0aGFuIHRvIGJ1cmRlbiB0aGUgY29yZVxuICAgIC8vIGNvbXBpbGF0aW9uIHBhdGguXG4gICAgYmxvY2sodHlwZSwgbnVtKSB7XG4gICAgICAgIGxldCBsaW5lcyA9IHRoaXMubGluZXModHlwZSk7XG4gICAgICAgIGxldCBibG9jaztcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbnVtICYmIGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGxpbmUgPSBsaW5lc1tpXTtcbiAgICAgICAgICAgIGxldCBtYXRjaCA9IGxpbmUubWF0Y2goL1xcL1xcLyB0YW5ncmFtLWJsb2NrLXN0YXJ0OiAoW0EtWmEtejAtOV8tXSspLCAoW0EtWmEtejAtOV8tXSspLCAoXFxkKykvKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBjdXJyZW50IGJsb2NrXG4gICAgICAgICAgICAgICAgYmxvY2sgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgIG51bTogbWF0Y2hbM11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBsaW5lLm1hdGNoKC9cXC9cXC8gdGFuZ3JhbS1ibG9jay1lbmQ6IChbQS1aYS16MC05Xy1dKyksIChbQS1aYS16MC05Xy1dKyksIChcXGQrKS8pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrID0gbnVsbDsgLy8gY2xlYXIgY3VycmVudCBibG9ja1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdXBkYXRlIGxpbmUgIyBhbmQgY29udGVudFxuICAgICAgICAgICAgaWYgKGJsb2NrKSB7XG4gICAgICAgICAgICAgICAgLy8gaW5pdCB0byAtMSBzbyB0aGF0IGxpbmUgMCBpcyBmaXJzdCBhY3R1YWwgbGluZSBvZiBibG9jayBjb2RlLCBhZnRlciBjb21tZW50IG1hcmtlclxuICAgICAgICAgICAgICAgIGJsb2NrLmxpbmUgPSAoYmxvY2subGluZSA9PSBudWxsKSA/IC0xIDogYmxvY2subGluZSArIDE7XG4gICAgICAgICAgICAgICAgYmxvY2suc291cmNlID0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmxvY2s7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBsaXN0IG9mIGF2YWlsYWJsZSBleHRlbnNpb25zIGZyb20gdGhvc2UgcmVxdWVzdGVkXG4gICAgLy8gU2V0cyBpbnRlcm5hbCAjZGVmaW5lcyBpbmRpY2F0aW5nIGF2YWlsYWJpbGl0eSBvZiBlYWNoIHJlcXVlc3RlZCBleHRlbnNpb25cbiAgICBjaGVja0V4dGVuc2lvbnMoKSB7XG4gICAgICAgIGxldCBleHRzID0gW107XG4gICAgICAgIGZvciAobGV0IG5hbWUgb2YgdGhpcy5leHRlbnNpb25zKSB7XG4gICAgICAgICAgICBsZXQgZXh0ID0gZ2V0RXh0ZW5zaW9uKHRoaXMuZ2wsIG5hbWUpO1xuICAgICAgICAgICAgbGV0IGRlZiA9IGBUQU5HUkFNX0VYVEVOU0lPTl8ke25hbWV9YDtcblxuICAgICAgICAgICAgdGhpcy5kZWZpbmVzW2RlZl0gPSAoZXh0ICE9IG51bGwpO1xuXG4gICAgICAgICAgICBpZiAoZXh0KSB7XG4gICAgICAgICAgICAgICAgZXh0cy5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKGBDb3VsZCBub3QgZW5hYmxlIGV4dGVuc2lvbiAnJHtuYW1lfSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXh0cztcbiAgICB9XG5cbn1cblxuXG4vLyBTdGF0aWMgbWV0aG9kcyBhbmQgc3RhdGVcblxuU2hhZGVyUHJvZ3JhbS5pZCA9IDA7ICAgICAgICAgICAvLyBhc3NpZ24gZWFjaCBwcm9ncmFtIGEgdW5pcXVlIGlkXG5TaGFkZXJQcm9ncmFtLnByb2dyYW1zID0ge307ICAgIC8vIHByb2dyYW1zLCBieSBpZFxuU2hhZGVyUHJvZ3JhbS5jdXJyZW50ID0gbnVsbDsgICAvLyBjdXJyZW50bHkgYm91bmQgcHJvZ3JhbVxuXG4vLyBHbG9iYWwgY29uZmlnIGFwcGxpZWQgdG8gYWxsIHByb2dyYW1zIChkdXBsaWNhdGUgcHJvcGVydGllcyBmb3IgYSBzcGVjaWZpYyBwcm9ncmFtIHdpbGwgdGFrZSBwcmVjZWRlbmNlKVxuU2hhZGVyUHJvZ3JhbS5kZWZpbmVzID0ge307XG5TaGFkZXJQcm9ncmFtLmJsb2NrcyA9IHt9O1xuXG4vLyBUdXJuIGFuIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnMgaW50byBzaW5nbGUgc3RyaW5nIG9mICNkZWZpbmUgc3RhdGVtZW50c1xuU2hhZGVyUHJvZ3JhbS5idWlsZERlZmluZVN0cmluZyA9IGZ1bmN0aW9uIChkZWZpbmVzKSB7XG4gICAgdmFyIGRlZmluZV9zdHIgPSBcIlwiO1xuICAgIGZvciAodmFyIGQgaW4gZGVmaW5lcykge1xuICAgICAgICBpZiAoZGVmaW5lc1tkXSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmVzW2RdID09PSAnYm9vbGVhbicgJiYgZGVmaW5lc1tkXSA9PT0gdHJ1ZSkgeyAvLyBib29sZWFucyBhcmUgc2ltcGxlIGRlZmluZXMgd2l0aCBubyB2YWx1ZVxuICAgICAgICAgICAgZGVmaW5lX3N0ciArPSBcIiNkZWZpbmUgXCIgKyBkICsgXCJcXG5cIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lc1tkXSA9PT0gJ251bWJlcicgJiYgTWF0aC5mbG9vcihkZWZpbmVzW2RdKSA9PT0gZGVmaW5lc1tkXSkgeyAvLyBpbnQgdG8gZmxvYXQgY29udmVyc2lvbiB0byBzYXRpc2Z5IEdMU0wgZmxvYXRzXG4gICAgICAgICAgICBkZWZpbmVfc3RyICs9IFwiI2RlZmluZSBcIiArIGQgKyBcIiBcIiArIGRlZmluZXNbZF0udG9GaXhlZCgxKSArIFwiXFxuXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vIGFueSBvdGhlciBmbG9hdCBvciBzdHJpbmcgdmFsdWVcbiAgICAgICAgICAgIGRlZmluZV9zdHIgKz0gXCIjZGVmaW5lIFwiICsgZCArIFwiIFwiICsgZGVmaW5lc1tkXSArIFwiXFxuXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlZmluZV9zdHI7XG59O1xuXG4vLyBUdXJuIGEgbGlzdCBvZiBleHRlbnNpb24gbmFtZXMgaW50byBzaW5nbGUgc3RyaW5nIG9mICNleHRlbnNpb24gc3RhdGVtZW50c1xuU2hhZGVyUHJvZ3JhbS5idWlsZEV4dGVuc2lvblN0cmluZyA9IGZ1bmN0aW9uIChleHRlbnNpb25zKSB7XG4gICAgZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnMgfHwgW107XG4gICAgbGV0IHN0ciA9IFwiXCI7XG4gICAgZm9yIChsZXQgZXh0IG9mIGV4dGVuc2lvbnMpIHtcbiAgICAgICAgc3RyICs9IGAjaWZkZWYgR0xfJHtleHR9XFxuI2V4dGVuc2lvbiBHTF8ke2V4dH0gOiBlbmFibGVcXG4jZW5kaWZcXG5gO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufTtcblxuU2hhZGVyUHJvZ3JhbS5hZGRCbG9jayA9IGZ1bmN0aW9uIChrZXksIC4uLmJsb2Nrcykge1xuICAgIFNoYWRlclByb2dyYW0uYmxvY2tzW2tleV0gPSBTaGFkZXJQcm9ncmFtLmJsb2Nrc1trZXldIHx8IFtdO1xuICAgIFNoYWRlclByb2dyYW0uYmxvY2tzW2tleV0ucHVzaCguLi5ibG9ja3MpO1xufTtcblxuLy8gUmVtb3ZlIGFsbCBnbG9iYWwgc2hhZGVyIGJsb2NrcyBmb3IgYSBnaXZlbiBrZXlcblNoYWRlclByb2dyYW0ucmVtb3ZlQmxvY2sgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgU2hhZGVyUHJvZ3JhbS5ibG9ja3Nba2V5XSA9IFtdO1xufTtcblxuU2hhZGVyUHJvZ3JhbS5yZXBsYWNlQmxvY2sgPSBmdW5jdGlvbiAoa2V5LCAuLi5ibG9ja3MpIHtcbiAgICBTaGFkZXJQcm9ncmFtLnJlbW92ZUJsb2NrKGtleSk7XG4gICAgU2hhZGVyUHJvZ3JhbS5hZGRCbG9jayhrZXksIC4uLmJsb2Nrcyk7XG59O1xuXG4vLyBDb21waWxlICYgbGluayBhIFdlYkdMIHByb2dyYW0gZnJvbSBwcm92aWRlZCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlciBzb3VyY2VzXG4vLyB1cGRhdGUgYSBwcm9ncmFtIGlmIG9uZSBpcyBwYXNzZWQgaW4uIENyZWF0ZSBvbmUgaWYgbm90LiBBbGVydCBhbmQgZG9uJ3QgdXBkYXRlIGFueXRoaW5nIGlmIHRoZSBzaGFkZXJzIGRvbid0IGNvbXBpbGUuXG5TaGFkZXJQcm9ncmFtLnVwZGF0ZVByb2dyYW0gPSBmdW5jdGlvbiAoZ2wsIHByb2dyYW0sIHZlcnRleF9zaGFkZXJfc291cmNlLCBmcmFnbWVudF9zaGFkZXJfc291cmNlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHZlcnRleF9zaGFkZXIgPSBTaGFkZXJQcm9ncmFtLmNyZWF0ZVNoYWRlcihnbCwgdmVydGV4X3NoYWRlcl9zb3VyY2UsIGdsLlZFUlRFWF9TSEFERVIpO1xuICAgICAgICB2YXIgZnJhZ21lbnRfc2hhZGVyID0gU2hhZGVyUHJvZ3JhbS5jcmVhdGVTaGFkZXIoZ2wsIGZyYWdtZW50X3NoYWRlcl9zb3VyY2UsIGdsLkZSQUdNRU5UX1NIQURFUik7XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgICBsb2cuZXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICBpZiAocHJvZ3JhbSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvbGRfc2hhZGVycyA9IGdsLmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG9sZF9zaGFkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBnbC5kZXRhY2hTaGFkZXIocHJvZ3JhbSwgb2xkX3NoYWRlcnNbaV0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcbiAgICB9XG5cbiAgICBpZiAodmVydGV4X3NoYWRlciA9PSBudWxsIHx8IGZyYWdtZW50X3NoYWRlciA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBwcm9ncmFtO1xuICAgIH1cblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhfc2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRfc2hhZGVyKTtcblxuICAgIGdsLmRlbGV0ZVNoYWRlcih2ZXJ0ZXhfc2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZnJhZ21lbnRfc2hhZGVyKTtcblxuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBXZWJHTCBwcm9ncmFtIGVycm9yOlxuICAgICAgICAgICAgVkFMSURBVEVfU1RBVFVTOiAke2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKX1cbiAgICAgICAgICAgIEVSUk9SOiAke2dsLmdldEVycm9yKCl9XG4gICAgICAgICAgICAtLS0gVmVydGV4IFNoYWRlciAtLS1cbiAgICAgICAgICAgICR7dmVydGV4X3NoYWRlcl9zb3VyY2V9XG4gICAgICAgICAgICAtLS0gRnJhZ21lbnQgU2hhZGVyIC0tLVxuICAgICAgICAgICAgJHtmcmFnbWVudF9zaGFkZXJfc291cmNlfWApO1xuXG4gICAgICAgIGxldCBlcnJvciA9IHsgdHlwZTogJ3Byb2dyYW0nLCBtZXNzYWdlIH07XG4gICAgICAgIGxvZy5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2dyYW07XG59O1xuXG4vLyBDb21waWxlIGEgdmVydGV4IG9yIGZyYWdtZW50IHNoYWRlciBmcm9tIHByb3ZpZGVkIHNvdXJjZVxuU2hhZGVyUHJvZ3JhbS5jcmVhdGVTaGFkZXIgPSBmdW5jdGlvbiAoZ2wsIHNvdXJjZSwgc3R5cGUpIHtcbiAgICBsZXQgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKHN0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNvdXJjZSk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpIHtcbiAgICAgICAgbGV0IHR5cGUgPSAoc3R5cGUgPT09IGdsLlZFUlRFWF9TSEFERVIgPyAndmVydGV4JyA6ICdmcmFnbWVudCcpO1xuICAgICAgICBsZXQgbWVzc2FnZSA9IGdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTtcbiAgICAgICAgbGV0IGVycm9ycyA9IHBhcnNlU2hhZGVyRXJyb3JzKG1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyB7IHR5cGUsIG1lc3NhZ2UsIGVycm9ycyB9O1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwiLy8gR2VuZXJhdGVkIGZyb20gR0xTTCBmaWxlcywgZG9uJ3QgZWRpdCFcbnZhciBzaGFkZXJTb3VyY2VzID0ge307XG5cbnNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvYWNjZXNzb3JzJ10gPVxuXCIjaWZkZWYgVEFOR1JBTV9WRVJURVhfU0hBREVSXFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIFZlcnRleCBwb3NpdGlvbiBpbiBtb2RlbCBzcGFjZTogWzAsIDFdIHJhbmdlIG92ZXIgdGhlIGxvY2FsIHRpbGVcXG5cIiArXG5cIi8vIE5vdGUgcG9zaXRpb25zIGNhbiBiZSBvdXRzaWRlIHRoYXQgcmFuZ2UgZHVlIHRvIHVuY2xpcHBlZCBnZW9tZXRyeSwgZ2VvbWV0cnkgaGlnaGVyIHRoYW4gYSB1bml0IGN1YmUsIGV0Yy5cXG5cIiArXG5cInZlYzQgbW9kZWxQb3NpdGlvbigpIHtcXG5cIiArXG5cIiAgICByZXR1cm5cXG5cIiArXG5cIiAgICAgICAgdmVjNChcXG5cIiArXG5cIiAgICAgICAgICAgIFNIT1JUKGFfcG9zaXRpb24ueHl6KSAgICAgICAgICAgICAgICAgICAgICAgLy8gc2NhbGUgbm9ybWFsaXplZCBzaG9ydCB0byBmdWxsIHJhbmdlXFxuXCIgK1xuXCIgICAgICAgICAgICAvIFRBTkdSQU1fVElMRV9TQ0FMRSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjYWxlIGNvb3JkcyB0byB+MC0xIHJhbmdlXFxuXCIgK1xuXCIgICAgICAgICAgICAqIGV4cDIodV90aWxlX29yaWdpbi56IC0gdV90aWxlX29yaWdpbi53KSwgIC8vIGFkanVzdCBmb3IgdGlsZSBvdmVyem9vbWluZ1xcblwiICtcblwiICAgICAgICAxLilcXG5cIiArXG5cIiAgICAgICAgKyB2ZWM0KDAuLCAxLiwgMC4sIDAuKTtcXG5cIiArXG5cIiAgICAgICAgLy8gTkI6IGFkZGl0aW9uYWwgb2Zmc2V0IHRvIGFjY291bnQgZm9yIHVudXN1YWwgVGFuZ3JhbSBKUyB5IGNvb3JkcyxcXG5cIiArXG5cIiAgICAgICAgLy8gc2hvdWxkIGJlIHJlZmFjdG9yZWQgdG8gcmVtb3ZlXFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIFBvc2l0aW9uIGluIG1vZGVsIHNwYWNlIGFzIGFib3ZlLCBidXQgYWNjb3JkaW5nIHRvIHRpbGUgY29vcmRpbmF0ZSAoYXMgb3Bwb3NlZCB0byBzdHlsZSkgem9vbVxcblwiICtcblwiLy8gZS5nLiB1bmFkanVzdGVkIGZvciB0aWxlIG92ZXJ6b29taW5nXFxuXCIgK1xuXCJ2ZWM0IG1vZGVsUG9zaXRpb25CYXNlWm9vbSgpIHtcXG5cIiArXG5cIiAgICByZXR1cm5cXG5cIiArXG5cIiAgICAgICAgdmVjNChcXG5cIiArXG5cIiAgICAgICAgICAgIFNIT1JUKGFfcG9zaXRpb24ueHl6KSAgIC8vIHNjYWxlIG5vcm1hbGl6ZWQgc2hvcnQgdG8gZnVsbCByYW5nZVxcblwiICtcblwiICAgICAgICAgICAgLyBUQU5HUkFNX1RJTEVfU0NBTEUsICAgLy8gc2NhbGUgY29vcmRzIHRvIH4wLTEgcmFuZ2VcXG5cIiArXG5cIiAgICAgICAgMS4pXFxuXCIgK1xuXCIgICAgICAgICsgdmVjNCgwLiwgMS4sIDAuLCAwLik7XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBWZXJ0ZXggcG9zaXRpb24gaW4gd29ybGQgY29vcmRpbmF0ZXMsIHVzZWZ1bCBmb3IgM2QgcHJvY2VkdXJhbCB0ZXh0dXJlcywgZXRjLlxcblwiICtcblwidmVjNCB3b3JsZFBvc2l0aW9uKCkge1xcblwiICtcblwiICAgIHJldHVybiB2X3dvcmxkX3Bvc2l0aW9uO1xcblwiICtcblwifVxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBPcHRpb25hbGx5IHdyYXAgd29ybGQgY29vcmRpbmF0ZXMgKGFsbG93cyBtb3JlIHByZWNpc2lvbiBhdCBoaWdoZXIgem9vbXMpXFxuXCIgK1xuXCIvLyBlLmcuIGF0IHdyYXAgMTAwMCwgdGhlIHdvcmxkIHNwYWNlIHdpbGwgd3JhcCBldmVyeSAxMDAwIG1ldGVyc1xcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fVkVSVEVYX1NIQURFUlxcblwiICtcblwiXFxuXCIgK1xuXCJ2ZWM0IHdyYXBXb3JsZFBvc2l0aW9uKHZlYzQgd29ybGRfcG9zaXRpb24pIHtcXG5cIiArXG5cIiAgICAjaWYgZGVmaW5lZChUQU5HUkFNX1dPUkxEX1BPU0lUSU9OX1dSQVApXFxuXCIgK1xuXCIgICAgdmVjMiBhbmNob3IgPSB1X3RpbGVfb3JpZ2luLnh5IC0gbW9kKHVfdGlsZV9vcmlnaW4ueHksIFRBTkdSQU1fV09STERfUE9TSVRJT05fV1JBUCk7XFxuXCIgK1xuXCIgICAgICAgIHdvcmxkX3Bvc2l0aW9uLnh5IC09IGFuY2hvcjtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIiAgICByZXR1cm4gd29ybGRfcG9zaXRpb247XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBOb3JtYWwgaW4gd29ybGQgc3BhY2VcXG5cIiArXG5cIiNpZiBkZWZpbmVkKFRBTkdSQU1fVkVSVEVYX1NIQURFUilcXG5cIiArXG5cIlxcblwiICtcblwidmVjMyB3b3JsZE5vcm1hbCgpIHtcXG5cIiArXG5cIiAgICByZXR1cm4gVEFOR1JBTV9OT1JNQUw7XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcXG5cIiArXG5cIiNlbGlmIGRlZmluZWQoVEFOR1JBTV9GUkFHTUVOVF9TSEFERVIpXFxuXCIgK1xuXCJcXG5cIiArXG5cInZlYzMgd29ybGROb3JtYWwoKSB7XFxuXCIgK1xuXCIgICAgcmV0dXJuIHVfaW52ZXJzZU5vcm1hbE1hdHJpeCAqIFRBTkdSQU1fTk9STUFMO1xcblwiICtcblwifVxcblwiICtcblwiXFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlwiO1xuXG5zaGFkZXJTb3VyY2VzWydnbC9zaGFkZXJzL2FtYmllbnRMaWdodCddID1cblwiLypcXG5cIiArXG5cIlxcblwiICtcblwiRXhwZWN0ZWQgZ2xvYmFsczpcXG5cIiArXG5cImxpZ2h0X2FjY3VtdWxhdG9yXypcXG5cIiArXG5cIlxcblwiICtcblwiKi9cXG5cIiArXG5cIlxcblwiICtcblwic3RydWN0IEFtYmllbnRMaWdodCB7XFxuXCIgK1xuXCIgICAgdmVjNCBhbWJpZW50O1xcblwiICtcblwifTtcXG5cIiArXG5cIlxcblwiICtcblwidm9pZCBjYWxjdWxhdGVMaWdodChpbiBBbWJpZW50TGlnaHQgX2xpZ2h0LCBpbiB2ZWMzIF9leWVUb1BvaW50LCBpbiB2ZWMzIF9ub3JtYWwpIHtcXG5cIiArXG5cIiAgICBsaWdodF9hY2N1bXVsYXRvcl9hbWJpZW50ICs9IF9saWdodC5hbWJpZW50O1xcblwiICtcblwifVxcblwiICtcblwiXCI7XG5cbnNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvZGlyZWN0aW9uYWxMaWdodCddID1cblwiLypcXG5cIiArXG5cIlxcblwiICtcblwiRXhwZWN0ZWQgZ2xvYmFsczpcXG5cIiArXG5cIm1hdGVyaWFsXFxuXCIgK1xuXCJsaWdodF9hY2N1bXVsYXRvcl8qXFxuXCIgK1xuXCJcXG5cIiArXG5cIiovXFxuXCIgK1xuXCJcXG5cIiArXG5cInN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0IHtcXG5cIiArXG5cIiAgICB2ZWM0IGFtYmllbnQ7XFxuXCIgK1xuXCIgICAgdmVjNCBkaWZmdXNlO1xcblwiICtcblwiICAgIHZlYzQgc3BlY3VsYXI7XFxuXCIgK1xuXCIgICAgdmVjMyBkaXJlY3Rpb247XFxuXCIgK1xuXCJ9O1xcblwiICtcblwiXFxuXCIgK1xuXCJ2b2lkIGNhbGN1bGF0ZUxpZ2h0KGluIERpcmVjdGlvbmFsTGlnaHQgX2xpZ2h0LCBpbiB2ZWMzIF9leWVUb1BvaW50LCBpbiB2ZWMzIF9ub3JtYWwpIHtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIGxpZ2h0X2FjY3VtdWxhdG9yX2FtYmllbnQgKz0gX2xpZ2h0LmFtYmllbnQ7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICBmbG9hdCBuRG90VlAgPSBjbGFtcChkb3QoX25vcm1hbCwgLW5vcm1hbGl6ZShfbGlnaHQuZGlyZWN0aW9uKSksIDAuMCwgMS4wKTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0RJRkZVU0VcXG5cIiArXG5cIiAgICAgICAgbGlnaHRfYWNjdW11bGF0b3JfZGlmZnVzZSArPSBfbGlnaHQuZGlmZnVzZSAqIG5Eb3RWUDtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX1NQRUNVTEFSXFxuXCIgK1xuXCIgICAgICAgIGZsb2F0IHBmID0gMC4wO1xcblwiICtcblwiICAgICAgICBpZiAobkRvdFZQID4gMC4wKSB7XFxuXCIgK1xuXCIgICAgICAgICAgICB2ZWMzIHJlZmxlY3RWZWN0b3IgPSByZWZsZWN0KG5vcm1hbGl6ZShfbGlnaHQuZGlyZWN0aW9uKSwgX25vcm1hbCk7XFxuXCIgK1xuXCIgICAgICAgICAgICBmbG9hdCBleWVEb3RSID0gbWF4KGRvdChub3JtYWxpemUoX2V5ZVRvUG9pbnQpLCByZWZsZWN0VmVjdG9yKSwgMC4wKTtcXG5cIiArXG5cIiAgICAgICAgICAgIHBmID0gcG93KGV5ZURvdFIsIG1hdGVyaWFsLnNoaW5pbmVzcyk7XFxuXCIgK1xuXCIgICAgICAgIH1cXG5cIiArXG5cIiAgICAgICAgbGlnaHRfYWNjdW11bGF0b3Jfc3BlY3VsYXIgKz0gX2xpZ2h0LnNwZWN1bGFyICogcGY7XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcIjtcblxuc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9sYXllcl9vcmRlciddID1cblwiLy8gQXBwbHkgbGF5ZXIgb3JkZXJpbmcgdG8gYXZvaWQgei1maWdodGluZ1xcblwiICtcblwidm9pZCBhcHBseUxheWVyT3JkZXIgKGZsb2F0IGxheWVyLCBpbm91dCB2ZWM0IHBvc2l0aW9uKSB7XFxuXCIgK1xuXCIgICAgcG9zaXRpb24ueiAtPSBsYXllciAqIFRBTkdSQU1fTEFZRVJfREVMVEEgKiBwb3NpdGlvbi53O1xcblwiICtcblwifVxcblwiICtcblwiXCI7XG5cbnNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvbWF0ZXJpYWwnXSA9XG5cIi8qXFxuXCIgK1xuXCJcXG5cIiArXG5cIkRlZmluZXMgZ2xvYmFsczpcXG5cIiArXG5cIm1hdGVyaWFsXFxuXCIgK1xuXCJsaWdodF9hY2N1bXVsYXRvcl8qXFxuXCIgK1xuXCJcXG5cIiArXG5cIiovXFxuXCIgK1xuXCJcXG5cIiArXG5cIlxcblwiICtcblwiLy8gTUFURVJJQUxTXFxuXCIgK1xuXCIvL1xcblwiICtcblwic3RydWN0IE1hdGVyaWFsIHtcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9FTUlTU0lPTlxcblwiICtcblwiICAgICAgICB2ZWM0IGVtaXNzaW9uO1xcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9FTUlTU0lPTl9URVhUVVJFXFxuXCIgK1xuXCIgICAgICAgICAgICB2ZWMzIGVtaXNzaW9uU2NhbGU7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfQU1CSUVOVFxcblwiICtcblwiICAgICAgICB2ZWM0IGFtYmllbnQ7XFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0FNQklFTlRfVEVYVFVSRVxcblwiICtcblwiICAgICAgICAgICAgdmVjMyBhbWJpZW50U2NhbGU7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRVxcblwiICtcblwiICAgICAgICB2ZWM0IGRpZmZ1c2U7XFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0RJRkZVU0VfVEVYVFVSRVxcblwiICtcblwiICAgICAgICAgICAgdmVjMyBkaWZmdXNlU2NhbGU7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfU1BFQ1VMQVJcXG5cIiArXG5cIiAgICAgICAgdmVjNCBzcGVjdWxhcjtcXG5cIiArXG5cIiAgICAgICAgZmxvYXQgc2hpbmluZXNzO1xcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9TUEVDVUxBUl9URVhUVVJFXFxuXCIgK1xuXCIgICAgICAgICAgICB2ZWMzIHNwZWN1bGFyU2NhbGU7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9OT1JNQUxfVEVYVFVSRVxcblwiICtcblwiICAgICAgICB2ZWMzIG5vcm1hbFNjYWxlO1xcblwiICtcblwiICAgICAgICBmbG9hdCBub3JtYWxBbW91bnQ7XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJ9O1xcblwiICtcblwiXFxuXCIgK1xuXCIvLyBOb3RlOiB1bmlmb3JtIGlzIGNvcGllZCB0byBhIGdsb2JhbCBpbnN0YW5jZSB0byBhbGxvdyBtb2RpZmljYXRpb25cXG5cIiArXG5cInVuaWZvcm0gTWF0ZXJpYWwgdV9tYXRlcmlhbDtcXG5cIiArXG5cIk1hdGVyaWFsIG1hdGVyaWFsO1xcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9FTUlTU0lPTl9URVhUVVJFXFxuXCIgK1xuXCJ1bmlmb3JtIHNhbXBsZXIyRCB1X21hdGVyaWFsX2VtaXNzaW9uX3RleHR1cmU7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfQU1CSUVOVF9URVhUVVJFXFxuXCIgK1xuXCJ1bmlmb3JtIHNhbXBsZXIyRCB1X21hdGVyaWFsX2FtYmllbnRfdGV4dHVyZTtcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9ESUZGVVNFX1RFWFRVUkVcXG5cIiArXG5cInVuaWZvcm0gc2FtcGxlcjJEIHVfbWF0ZXJpYWxfZGlmZnVzZV90ZXh0dXJlO1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX1NQRUNVTEFSX1RFWFRVUkVcXG5cIiArXG5cInVuaWZvcm0gc2FtcGxlcjJEIHVfbWF0ZXJpYWxfc3BlY3VsYXJfdGV4dHVyZTtcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9OT1JNQUxfVEVYVFVSRVxcblwiICtcblwidW5pZm9ybSBzYW1wbGVyMkQgdV9tYXRlcmlhbF9ub3JtYWxfdGV4dHVyZTtcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBHbG9iYWwgbGlnaHQgYWNjdW11bGF0b3JzIGZvciBlYWNoIHByb3BlcnR5XFxuXCIgK1xuXCJ2ZWM0IGxpZ2h0X2FjY3VtdWxhdG9yX2FtYmllbnQgPSB2ZWM0KDAuMCk7XFxuXCIgK1xuXCJ2ZWM0IGxpZ2h0X2FjY3VtdWxhdG9yX2RpZmZ1c2UgPSB2ZWM0KDAuMCk7XFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9TUEVDVUxBUlxcblwiICtcblwiICAgIHZlYzQgbGlnaHRfYWNjdW11bGF0b3Jfc3BlY3VsYXIgPSB2ZWM0KDAuMCk7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9URVhUVVJFX1NQSEVSRU1BUFxcblwiICtcblwidmVjNCBnZXRTcGhlcmVNYXAgKGluIHNhbXBsZXIyRCBfdGV4LCBpbiB2ZWMzIF9leWVUb1BvaW50LCBpbiB2ZWMzIF9ub3JtYWwsIGluIHZlYzIgX3NrZXcpIHtcXG5cIiArXG5cIiAgICB2ZWMzIGV5ZSA9IG5vcm1hbGl6ZShfZXllVG9Qb2ludCk7XFxuXCIgK1xuXCIgICAgZXllLnh5IC09IF9za2V3O1xcblwiICtcblwiICAgIGV5ZSA9IG5vcm1hbGl6ZShleWUpO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgdmVjMyByID0gcmVmbGVjdChleWUsIF9ub3JtYWwpO1xcblwiICtcblwiICAgIHIueiArPSAxLjA7XFxuXCIgK1xuXCIgICAgZmxvYXQgbSA9IDIuICogbGVuZ3RoKHIpO1xcblwiICtcblwiICAgIHZlYzIgdXYgPSByLnh5IC8gbSArIC41O1xcblwiICtcblwiICAgIHJldHVybiB0ZXh0dXJlMkQoX3RleCwgdXYpO1xcblwiICtcblwifVxcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfVEVYVFVSRV9UUklQTEFOQVJcXG5cIiArXG5cInZlYzMgZ2V0VHJpUGxhbmFyQmxlbmQgKGluIHZlYzMgX25vcm1hbCkge1xcblwiICtcblwiICAgIHZlYzMgYmxlbmRpbmcgPSBhYnMoX25vcm1hbCk7XFxuXCIgK1xuXCIgICAgYmxlbmRpbmcgPSBub3JtYWxpemUobWF4KGJsZW5kaW5nLCAwLjAwMDAxKSk7XFxuXCIgK1xuXCIgICAgZmxvYXQgYiA9IChibGVuZGluZy54ICsgYmxlbmRpbmcueSArIGJsZW5kaW5nLnopO1xcblwiICtcblwiICAgIHJldHVybiBibGVuZGluZyAvIGI7XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcXG5cIiArXG5cInZlYzQgZ2V0VHJpUGxhbmFyIChpbiBzYW1wbGVyMkQgX3RleCwgaW4gdmVjMyBfcG9zLCBpbiB2ZWMzIF9ub3JtYWwsIGluIHZlYzMgX3NjYWxlKSB7XFxuXCIgK1xuXCIgICAgdmVjMyBibGVuZGluZyA9IGdldFRyaVBsYW5hckJsZW5kKF9ub3JtYWwpO1xcblwiICtcblwiICAgIHZlYzQgeGF4aXMgPSB0ZXh0dXJlMkQoX3RleCwgZnJhY3QoX3Bvcy55eiAqIF9zY2FsZS54KSk7XFxuXCIgK1xuXCIgICAgdmVjNCB5YXhpcyA9IHRleHR1cmUyRChfdGV4LCBmcmFjdChfcG9zLnh6ICogX3NjYWxlLnkpKTtcXG5cIiArXG5cIiAgICB2ZWM0IHpheGlzID0gdGV4dHVyZTJEKF90ZXgsIGZyYWN0KF9wb3MueHkgKiBfc2NhbGUueikpO1xcblwiICtcblwiICAgIHJldHVybiAgeGF4aXMgKiBibGVuZGluZy54ICsgeWF4aXMgKiBibGVuZGluZy55ICsgemF4aXMgKiBibGVuZGluZy56O1xcblwiICtcblwifVxcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfVEVYVFVSRV9QTEFOQVJcXG5cIiArXG5cInZlYzQgZ2V0UGxhbmFyIChpbiBzYW1wbGVyMkQgX3RleCwgaW4gdmVjMyBfcG9zLCBpbiB2ZWMyIF9zY2FsZSkge1xcblwiICtcblwiICAgIHJldHVybiB0ZXh0dXJlMkQoIF90ZXgsIGZyYWN0KF9wb3MueHkgKiBfc2NhbGUueCkgKTtcXG5cIiArXG5cIn1cXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX05PUk1BTF9URVhUVVJFXFxuXCIgK1xuXCJ2b2lkIGNhbGN1bGF0ZU5vcm1hbCAoaW5vdXQgdmVjMyBfbm9ybWFsKSB7XFxuXCIgK1xuXCIgICAgLy8gR2V0IE5PUk1BTE1BUFxcblwiICtcblwiICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfTk9STUFMX1RFWFRVUkVfVVZcXG5cIiArXG5cIiAgICBfbm9ybWFsICs9IHRleHR1cmUyRCh1X21hdGVyaWFsX25vcm1hbF90ZXh0dXJlLCBmcmFjdCh2X3RleGNvb3JkKm1hdGVyaWFsLm5vcm1hbFNjYWxlLnh5KSkucmdiKjIuMC0xLjA7XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9OT1JNQUxfVEVYVFVSRV9QTEFOQVJcXG5cIiArXG5cIiAgICB2ZWMzIG5vcm1hbFRleCA9IGdldFBsYW5hcih1X21hdGVyaWFsX25vcm1hbF90ZXh0dXJlLCB2X3dvcmxkX3Bvc2l0aW9uLnh5eiwgbWF0ZXJpYWwubm9ybWFsU2NhbGUueHkpLnJnYioyLjAtMS4wO1xcblwiICtcblwiICAgIF9ub3JtYWwgKz0gbm9ybWFsVGV4O1xcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfTk9STUFMX1RFWFRVUkVfVFJJUExBTkFSXFxuXCIgK1xuXCIgICAgdmVjMyBub3JtYWxUZXggPSBnZXRUcmlQbGFuYXIodV9tYXRlcmlhbF9ub3JtYWxfdGV4dHVyZSwgdl93b3JsZF9wb3NpdGlvbi54eXosIF9ub3JtYWwsIG1hdGVyaWFsLm5vcm1hbFNjYWxlKS5yZ2IqMi4wLTEuMDtcXG5cIiArXG5cIiAgICBfbm9ybWFsICs9IG5vcm1hbFRleDtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIF9ub3JtYWwgPSBub3JtYWxpemUoX25vcm1hbCk7XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwidm9pZCBjYWxjdWxhdGVNYXRlcmlhbCAoaW4gdmVjMyBfZXllVG9Qb2ludCwgaW5vdXQgdmVjMyBfbm9ybWFsKSB7XFxuXCIgK1xuXCIgICAgLy8gZ2V0IEVNSVNTSU9OIFRFWFRVUkVNQVBcXG5cIiArXG5cIiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0VNSVNTSU9OX1RFWFRVUkVcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRU1JU1NJT05fVEVYVFVSRV9VVlxcblwiICtcblwiICAgICAgICBtYXRlcmlhbC5lbWlzc2lvbiAqPSB0ZXh0dXJlMkQodV9tYXRlcmlhbF9lbWlzc2lvbl90ZXh0dXJlLHZfdGV4Y29vcmQpO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9FTUlTU0lPTl9URVhUVVJFX1BMQU5BUlxcblwiICtcblwiICAgICAgICBtYXRlcmlhbC5lbWlzc2lvbiAqPSBnZXRQbGFuYXIodV9tYXRlcmlhbF9lbWlzc2lvbl90ZXh0dXJlLCB2X3dvcmxkX3Bvc2l0aW9uLnh5eiwgbWF0ZXJpYWwuZW1pc3Npb25TY2FsZS54eSk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0VNSVNTSU9OX1RFWFRVUkVfVFJJUExBTkFSXFxuXCIgK1xuXCIgICAgICAgIG1hdGVyaWFsLmVtaXNzaW9uICo9IGdldFRyaVBsYW5hcih1X21hdGVyaWFsX2VtaXNzaW9uX3RleHR1cmUsIHZfd29ybGRfcG9zaXRpb24ueHl6LCBfbm9ybWFsLCBtYXRlcmlhbC5lbWlzc2lvblNjYWxlKTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRU1JU1NJT05fVEVYVFVSRV9TUEhFUkVNQVBcXG5cIiArXG5cIiAgICAgICAgbWF0ZXJpYWwuZW1pc3Npb24gKj0gZ2V0U3BoZXJlTWFwKHVfbWF0ZXJpYWxfZW1pc3Npb25fdGV4dHVyZSwgX2V5ZVRvUG9pbnQsIF9ub3JtYWwsIHVfdmFuaXNoaW5nX3BvaW50KTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBnZXQgQU1CSUVOVCBURVhUVVJFTUFQXFxuXCIgK1xuXCIgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9BTUJJRU5UX1RFWFRVUkVcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfQU1CSUVOVF9URVhUVVJFX1VWXFxuXCIgK1xuXCIgICAgICAgIG1hdGVyaWFsLmFtYmllbnQgKj0gdGV4dHVyZTJEKHVfbWF0ZXJpYWxfYW1iaWVudF90ZXh0dXJlLHZfdGV4Y29vcmQpO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9BTUJJRU5UX1RFWFRVUkVfUExBTkFSXFxuXCIgK1xuXCIgICAgICAgIG1hdGVyaWFsLmFtYmllbnQgKj0gZ2V0UGxhbmFyKHVfbWF0ZXJpYWxfYW1iaWVudF90ZXh0dXJlLCB2X3dvcmxkX3Bvc2l0aW9uLnh5eiwgbWF0ZXJpYWwuYW1iaWVudFNjYWxlLnh5KTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfQU1CSUVOVF9URVhUVVJFX1RSSVBMQU5BUlxcblwiICtcblwiICAgICAgICBtYXRlcmlhbC5hbWJpZW50ICo9IGdldFRyaVBsYW5hcih1X21hdGVyaWFsX2FtYmllbnRfdGV4dHVyZSwgdl93b3JsZF9wb3NpdGlvbi54eXosIF9ub3JtYWwsIG1hdGVyaWFsLmFtYmllbnRTY2FsZSk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0FNQklFTlRfVEVYVFVSRV9TUEhFUkVNQVBcXG5cIiArXG5cIiAgICAgICAgbWF0ZXJpYWwuYW1iaWVudCAqPSBnZXRTcGhlcmVNYXAodV9tYXRlcmlhbF9hbWJpZW50X3RleHR1cmUsIF9leWVUb1BvaW50LCBfbm9ybWFsLCB1X3ZhbmlzaGluZ19wb2ludCk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gZ2V0IERJRkZVU0UgVEVYVFVSRU1BUFxcblwiICtcblwiICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRV9URVhUVVJFXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0RJRkZVU0VfVEVYVFVSRV9VVlxcblwiICtcblwiICAgICAgICBtYXRlcmlhbC5kaWZmdXNlICo9IHRleHR1cmUyRCh1X21hdGVyaWFsX2RpZmZ1c2VfdGV4dHVyZSx2X3RleGNvb3JkKTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRV9URVhUVVJFX1BMQU5BUlxcblwiICtcblwiICAgICAgICBtYXRlcmlhbC5kaWZmdXNlICo9IGdldFBsYW5hcih1X21hdGVyaWFsX2RpZmZ1c2VfdGV4dHVyZSwgdl93b3JsZF9wb3NpdGlvbi54eXosIG1hdGVyaWFsLmRpZmZ1c2VTY2FsZS54eSk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0RJRkZVU0VfVEVYVFVSRV9UUklQTEFOQVJcXG5cIiArXG5cIiAgICAgICAgbWF0ZXJpYWwuZGlmZnVzZSAqPSBnZXRUcmlQbGFuYXIodV9tYXRlcmlhbF9kaWZmdXNlX3RleHR1cmUsIHZfd29ybGRfcG9zaXRpb24ueHl6LCBfbm9ybWFsLCBtYXRlcmlhbC5kaWZmdXNlU2NhbGUpO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9ESUZGVVNFX1RFWFRVUkVfU1BIRVJFTUFQXFxuXCIgK1xuXCIgICAgICAgIG1hdGVyaWFsLmRpZmZ1c2UgKj0gZ2V0U3BoZXJlTWFwKHVfbWF0ZXJpYWxfZGlmZnVzZV90ZXh0dXJlLCBfZXllVG9Qb2ludCwgX25vcm1hbCwgdV92YW5pc2hpbmdfcG9pbnQpO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIGdldCBTUEVDVUxBUiBURVhUVVJFTUFQXFxuXCIgK1xuXCIgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9TUEVDVUxBUl9URVhUVVJFXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX1NQRUNVTEFSX1RFWFRVUkVfVVZcXG5cIiArXG5cIiAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXIgKj0gdGV4dHVyZTJEKHVfbWF0ZXJpYWxfc3BlY3VsYXJfdGV4dHVyZSx2X3RleGNvb3JkKTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfU1BFQ1VMQVJfVEVYVFVSRV9QTEFOQVJcXG5cIiArXG5cIiAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXIgKj0gZ2V0UGxhbmFyKHVfbWF0ZXJpYWxfc3BlY3VsYXJfdGV4dHVyZSwgdl93b3JsZF9wb3NpdGlvbi54eXosIG1hdGVyaWFsLnNwZWN1bGFyU2NhbGUueHkpO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9TUEVDVUxBUl9URVhUVVJFX1RSSVBMQU5BUlxcblwiICtcblwiICAgICAgICBtYXRlcmlhbC5zcGVjdWxhciAqPSBnZXRUcmlQbGFuYXIodV9tYXRlcmlhbF9zcGVjdWxhcl90ZXh0dXJlLCB2X3dvcmxkX3Bvc2l0aW9uLnh5eiwgX25vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJTY2FsZSk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX1NQRUNVTEFSX1RFWFRVUkVfU1BIRVJFTUFQXFxuXCIgK1xuXCIgICAgICAgIG1hdGVyaWFsLnNwZWN1bGFyICo9IGdldFNwaGVyZU1hcCh1X21hdGVyaWFsX3NwZWN1bGFyX3RleHR1cmUsIF9leWVUb1BvaW50LCBfbm9ybWFsLCB1X3ZhbmlzaGluZ19wb2ludCk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwifVxcblwiICtcblwiXCI7XG5cbnNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvcG9pbnRMaWdodCddID1cblwiLypcXG5cIiArXG5cIlxcblwiICtcblwiRXhwZWN0ZWQgZ2xvYmFsczpcXG5cIiArXG5cIm1hdGVyaWFsXFxuXCIgK1xuXCJsaWdodF9hY2N1bXVsYXRvcl8qXFxuXCIgK1xuXCJcXG5cIiArXG5cIiovXFxuXCIgK1xuXCJcXG5cIiArXG5cInN0cnVjdCBQb2ludExpZ2h0IHtcXG5cIiArXG5cIiAgICB2ZWM0IGFtYmllbnQ7XFxuXCIgK1xuXCIgICAgdmVjNCBkaWZmdXNlO1xcblwiICtcblwiICAgIHZlYzQgc3BlY3VsYXI7XFxuXCIgK1xuXCIgICAgdmVjNCBwb3NpdGlvbjtcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9FWFBPTkVOVFxcblwiICtcblwiICAgIGZsb2F0IGF0dGVudWF0aW9uRXhwb25lbnQ7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9JTk5FUl9SQURJVVNcXG5cIiArXG5cIiAgICBmbG9hdCBpbm5lclJhZGl1cztcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX09VVEVSX1JBRElVU1xcblwiICtcblwiICAgIGZsb2F0IG91dGVyUmFkaXVzO1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJ9O1xcblwiICtcblwiXFxuXCIgK1xuXCJ2b2lkIGNhbGN1bGF0ZUxpZ2h0KGluIFBvaW50TGlnaHQgX2xpZ2h0LCBpbiB2ZWMzIF9leWVUb1BvaW50LCBpbiB2ZWMzIF9ub3JtYWwpIHtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoX2xpZ2h0LnBvc2l0aW9uLnh5eiAtIF9leWVUb1BvaW50KTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIENvbXB1dGUgdmVjdG9yIGZyb20gc3VyZmFjZSB0byBsaWdodCBwb3NpdGlvblxcblwiICtcblwiICAgIHZlYzMgVlAgPSAoX2xpZ2h0LnBvc2l0aW9uLnh5eiAtIF9leWVUb1BvaW50KSAvIGRpc3Q7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBOb3JtYWxpemUgdGhlIHZlY3RvciBmcm9tIHN1cmZhY2UgdG8gbGlnaHQgcG9zaXRpb25cXG5cIiArXG5cIiAgICBmbG9hdCBuRG90VlAgPSBjbGFtcChkb3QoVlAsIF9ub3JtYWwpLCAwLjAsIDEuMCk7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBBdHRlbnVhdGlvbiBkZWZhdWx0c1xcblwiICtcblwiICAgIGZsb2F0IGF0dGVudWF0aW9uID0gMS4wO1xcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fRVhQT05FTlRcXG5cIiArXG5cIiAgICAgICAgZmxvYXQgUmluID0gMS4wO1xcblwiICtcblwiICAgICAgICBmbG9hdCBlID0gX2xpZ2h0LmF0dGVudWF0aW9uRXhwb25lbnQ7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9JTk5FUl9SQURJVVNcXG5cIiArXG5cIiAgICAgICAgICAgIFJpbiA9IF9saWdodC5pbm5lclJhZGl1cztcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9PVVRFUl9SQURJVVNcXG5cIiArXG5cIiAgICAgICAgICAgIGZsb2F0IFJkaWZmID0gX2xpZ2h0Lm91dGVyUmFkaXVzLVJpbjtcXG5cIiArXG5cIiAgICAgICAgICAgIGZsb2F0IGQgPSBjbGFtcChtYXgoMC4wLGRpc3QtUmluKS9SZGlmZiwgMC4wLCAxLjApO1xcblwiICtcblwiICAgICAgICAgICAgYXR0ZW51YXRpb24gPSAxLjAtKHBvdyhkLGUpKTtcXG5cIiArXG5cIiAgICAgICAgI2Vsc2VcXG5cIiArXG5cIiAgICAgICAgICAgIC8vIElmIG5vIG91dGVyIGlzIHByb3ZpZGUgYmVoYXZlcyBsaWtlOlxcblwiICtcblwiICAgICAgICAgICAgLy8gaHR0cHM6Ly9pbWRvaW5naXR3cm9uZy53b3JkcHJlc3MuY29tLzIwMTEvMDEvMzEvbGlnaHQtYXR0ZW51YXRpb24vXFxuXCIgK1xuXCIgICAgICAgICAgICBmbG9hdCBkID0gbWF4KDAuMCxkaXN0LVJpbikvUmluKzEuMDtcXG5cIiArXG5cIiAgICAgICAgICAgIGF0dGVudWF0aW9uID0gY2xhbXAoMS4wLyhwb3coZCxlKSksIDAuMCwgMS4wKTtcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgI2Vsc2VcXG5cIiArXG5cIiAgICAgICAgZmxvYXQgUmluID0gMC4wO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fSU5ORVJfUkFESVVTXFxuXCIgK1xuXCIgICAgICAgICAgICBSaW4gPSBfbGlnaHQuaW5uZXJSYWRpdXM7XFxuXCIgK1xuXCIgICAgICAgICAgICAjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX09VVEVSX1JBRElVU1xcblwiICtcblwiICAgICAgICAgICAgICAgIGZsb2F0IFJkaWZmID0gX2xpZ2h0Lm91dGVyUmFkaXVzLVJpbjtcXG5cIiArXG5cIiAgICAgICAgICAgICAgICBmbG9hdCBkID0gY2xhbXAobWF4KDAuMCxkaXN0LVJpbikvUmRpZmYsIDAuMCwgMS4wKTtcXG5cIiArXG5cIiAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbiA9IDEuMC1kKmQ7XFxuXCIgK1xuXCIgICAgICAgICAgICAjZWxzZVxcblwiICtcblwiICAgICAgICAgICAgICAgIC8vIElmIG5vIG91dGVyIGlzIHByb3ZpZGUgYmVoYXZlcyBsaWtlOlxcblwiICtcblwiICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vaW1kb2luZ2l0d3Jvbmcud29yZHByZXNzLmNvbS8yMDExLzAxLzMxL2xpZ2h0LWF0dGVudWF0aW9uL1xcblwiICtcblwiICAgICAgICAgICAgICAgIGZsb2F0IGQgPSBtYXgoMC4wLGRpc3QtUmluKS9SaW4rMS4wO1xcblwiICtcblwiICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uID0gY2xhbXAoMS4wL2QsIDAuMCwgMS4wKTtcXG5cIiArXG5cIiAgICAgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgICAgICAjZWxzZVxcblwiICtcblwiICAgICAgICAgICAgI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9PVVRFUl9SQURJVVNcXG5cIiArXG5cIiAgICAgICAgICAgICAgICBmbG9hdCBkID0gY2xhbXAoZGlzdC9fbGlnaHQub3V0ZXJSYWRpdXMsIDAuMCwgMS4wKTtcXG5cIiArXG5cIiAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbiA9IDEuMC1kKmQ7XFxuXCIgK1xuXCIgICAgICAgICAgICAjZWxzZVxcblwiICtcblwiICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uID0gMS4wO1xcblwiICtcblwiICAgICAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gQ29tcHV0ZXIgYWNjdW11bGF0b3JzXFxuXCIgK1xuXCIgICAgbGlnaHRfYWNjdW11bGF0b3JfYW1iaWVudCArPSBfbGlnaHQuYW1iaWVudCAqIGF0dGVudWF0aW9uO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRVxcblwiICtcblwiICAgICAgICBsaWdodF9hY2N1bXVsYXRvcl9kaWZmdXNlICs9IF9saWdodC5kaWZmdXNlICogbkRvdFZQICogYXR0ZW51YXRpb247XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9TUEVDVUxBUlxcblwiICtcblwiICAgICAgICBmbG9hdCBwZiA9IDAuMDsgLy8gcG93ZXIgZmFjdG9yIGZvciBzaGlueSBzcGVjdWxhcnNcXG5cIiArXG5cIiAgICAgICAgaWYgKG5Eb3RWUCA+IDAuMCkge1xcblwiICtcblwiICAgICAgICAgICAgdmVjMyByZWZsZWN0VmVjdG9yID0gcmVmbGVjdCgtVlAsIF9ub3JtYWwpO1xcblwiICtcblwiICAgICAgICAgICAgZmxvYXQgZXllRG90UiA9IG1heCgwLjAsIGRvdCgtbm9ybWFsaXplKF9leWVUb1BvaW50KSwgcmVmbGVjdFZlY3RvcikpO1xcblwiICtcblwiICAgICAgICAgICAgcGYgPSBwb3coZXllRG90UiwgbWF0ZXJpYWwuc2hpbmluZXNzKTtcXG5cIiArXG5cIiAgICAgICAgfVxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgIGxpZ2h0X2FjY3VtdWxhdG9yX3NwZWN1bGFyICs9IF9saWdodC5zcGVjdWxhciAqIHBmICogYXR0ZW51YXRpb247XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcIjtcblxuc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9yYXN0ZXJzJ10gPVxuXCIvLyBVbmlmb3JtcyBkZWZpbmluZyByYXN0ZXIgdGV4dHVyZXMgYW5kIG1hY3JvcyBmb3IgYWNjZXNzaW5nIHRoZW1cXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fRlJBR01FTlRfU0hBREVSXFxuXCIgK1xuXCJ1bmlmb3JtIHNhbXBsZXIyRCB1X3Jhc3RlcnNbVEFOR1JBTV9OVU1fUkFTVEVSX1NPVVJDRVNdOyAgICAvLyByYXN0ZXIgdGlsZSB0ZXh0dXJlIHNhbXBsZXJzXFxuXCIgK1xuXCJ1bmlmb3JtIHZlYzIgdV9yYXN0ZXJfc2l6ZXNbVEFOR1JBTV9OVU1fUkFTVEVSX1NPVVJDRVNdOyAgICAvLyByYXN0ZXIgdGlsZSB0ZXh0dXJlIHNpemVzICh3aWR0aC9oZWlnaHQgaW4gcGl4ZWxzKVxcblwiICtcblwidW5pZm9ybSB2ZWMzIHVfcmFzdGVyX29mZnNldHNbVEFOR1JBTV9OVU1fUkFTVEVSX1NPVVJDRVNdOyAgLy8gcmFzdGVyIHRpbGUgdGV4dHVyZSBVViBzdGFydGluZyBvZmZzZXQgZm9yIHRpbGVcXG5cIiArXG5cIlxcblwiICtcblwiLy8gTm90ZTogdGhlIHJhc3RlciBhY2Nlc3NvcnMgYmVsb3cgYXJlICNkZWZpbmVzIHJhdGhlciB0aGFuIGZ1bmN0aW9ucyB0b1xcblwiICtcblwiLy8gYXZvaWQgaXNzdWVzIHdpdGggY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9ucyBmb3IgYXJyYXkgaW5kaWNlc1xcblwiICtcblwiXFxuXCIgK1xuXCIvLyBBZGp1c3RzIFVWcyBpbiBtb2RlbCBzcGFjZSB0byBhY2NvdW50IGZvciByYXN0ZXIgdGlsZSB0ZXh0dXJlIG92ZXJ6b29taW5nXFxuXCIgK1xuXCIvLyAoYXBwbGllcyBzY2FsZSBhbmQgb2Zmc2V0IGFkanVzdG1lbnRzKVxcblwiICtcblwiI2RlZmluZSBhZGp1c3RSYXN0ZXJVVihyYXN0ZXJfaW5kZXgsIHV2KSBcIiArXG5cIiAgICAoKHV2KSAqIHVfcmFzdGVyX29mZnNldHNbcmFzdGVyX2luZGV4XS56ICsgdV9yYXN0ZXJfb2Zmc2V0c1tyYXN0ZXJfaW5kZXhdLnh5KVxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBSZXR1cm5zIHRoZSBVVnMgb2YgdGhlIGN1cnJlbnQgbW9kZWwgcG9zaXRpb24gZm9yIGEgcmFzdGVyIHNhbXBsZXJcXG5cIiArXG5cIiNkZWZpbmUgY3VycmVudFJhc3RlclVWKHJhc3Rlcl9pbmRleCkgXCIgK1xuXCIgICAgKGFkanVzdFJhc3RlclVWKHJhc3Rlcl9pbmRleCwgdl9tb2RlbHBvc19iYXNlX3pvb20ueHkpKVxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBSZXR1cm5zIHBpeGVsIGxvY2F0aW9uIGluIHJhc3RlciB0aWxlIHRleHR1cmUgYXQgY3VycmVudCBtb2RlbCBwb3NpdGlvblxcblwiICtcblwiI2RlZmluZSBjdXJyZW50UmFzdGVyUGl4ZWwocmFzdGVyX2luZGV4KSBcIiArXG5cIiAgICAoY3VycmVudFJhc3RlclVWKHJhc3Rlcl9pbmRleCkgKiByYXN0ZXJQaXhlbFNpemUocmFzdGVyX2luZGV4KSlcXG5cIiArXG5cIlxcblwiICtcblwiLy8gU2FtcGxlcyBhIHJhc3RlciB0aWxlIHRleHR1cmUgZm9yIHRoZSBjdXJyZW50IG1vZGVsIHBvc2l0aW9uXFxuXCIgK1xuXCIjZGVmaW5lIHNhbXBsZVJhc3RlcihyYXN0ZXJfaW5kZXgpIFwiICtcblwiICAgICh0ZXh0dXJlMkQodV9yYXN0ZXJzW3Jhc3Rlcl9pbmRleF0sIGN1cnJlbnRSYXN0ZXJVVihyYXN0ZXJfaW5kZXgpKSlcXG5cIiArXG5cIlxcblwiICtcblwiLy8gU2FtcGxlcyBhIHJhc3RlciB0aWxlIHRleHR1cmUgZm9yIGEgZ2l2ZW4gcGl4ZWxcXG5cIiArXG5cIiNkZWZpbmUgc2FtcGxlUmFzdGVyQXRQaXhlbChyYXN0ZXJfaW5kZXgsIHBpeGVsKSBcIiArXG5cIiAgICAodGV4dHVyZTJEKHVfcmFzdGVyc1tyYXN0ZXJfaW5kZXhdLCBhZGp1c3RSYXN0ZXJVVihyYXN0ZXJfaW5kZXgsIChwaXhlbCkgLyByYXN0ZXJQaXhlbFNpemUocmFzdGVyX2luZGV4KSkpKVxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBSZXR1cm5zIHNpemUgb2YgcmFzdGVyIHNhbXBsZXIgaW4gcGl4ZWxzXFxuXCIgK1xuXCIjZGVmaW5lIHJhc3RlclBpeGVsU2l6ZShyYXN0ZXJfaW5kZXgpIFwiICtcblwiICAgICh1X3Jhc3Rlcl9zaXplc1tyYXN0ZXJfaW5kZXhdKVxcblwiICtcblwiXFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlwiO1xuXG5zaGFkZXJTb3VyY2VzWydnbC9zaGFkZXJzL3NlbGVjdGlvbl9mcmFnbWVudCddID1cblwiLy8gRnJhZ21lbnQgc2hhZGVyIGZvciBmZWF0dXJlIHNlbGVjdGlvbiBwYXNzZXNcXG5cIiArXG5cIi8vIFJlbmRlcnMgaW4gc2lsaG91ZXR0ZSBhY2NvcmRpbmcgdG8gc2VsZWN0aW9uIChwaWNraW5nKSBjb2xvciwgb3IgYmxhY2sgaWYgbm9uZSBkZWZpbmVkXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX0ZFQVRVUkVfU0VMRUNUSU9OXFxuXCIgK1xuXCIgICAgdmFyeWluZyB2ZWM0IHZfc2VsZWN0aW9uX2NvbG9yO1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cInZvaWQgbWFpbiAodm9pZCkge1xcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX0ZFQVRVUkVfU0VMRUNUSU9OXFxuXCIgK1xuXCIgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZfc2VsZWN0aW9uX2NvbG9yO1xcblwiICtcblwiICAgICNlbHNlXFxuXCIgK1xuXCIgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4sIDAuLCAwLiwgMS4pO1xcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwifVxcblwiICtcblwiXCI7XG5cbnNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvc2VsZWN0aW9uX2dsb2JhbHMnXSA9XG5cIi8vIFZlcnRleCBhdHRyaWJ1dGUgKyB2YXJ5aW5nIGZvciBmZWF0dXJlIHNlbGVjdGlvblxcblwiICtcblwiI2lmIGRlZmluZWQoVEFOR1JBTV9GRUFUVVJFX1NFTEVDVElPTikgJiYgZGVmaW5lZChUQU5HUkFNX1ZFUlRFWF9TSEFERVIpXFxuXCIgK1xuXCIgICAgYXR0cmlidXRlIHZlYzQgYV9zZWxlY3Rpb25fY29sb3I7XFxuXCIgK1xuXCIgICAgdmFyeWluZyB2ZWM0IHZfc2VsZWN0aW9uX2NvbG9yO1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcIjtcblxuc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9zZWxlY3Rpb25fdmVydGV4J10gPVxuXCIvLyBTZWxlY3Rpb24gcGFzcy1zcGVjaWZpYyByZW5kZXJpbmdcXG5cIiArXG5cIiNpZiBkZWZpbmVkKFRBTkdSQU1fRkVBVFVSRV9TRUxFQ1RJT04pICYmIGRlZmluZWQoVEFOR1JBTV9WRVJURVhfU0hBREVSKVxcblwiICtcblwiICAgIGlmIChhX3NlbGVjdGlvbl9jb2xvci5yZ2IgPT0gdmVjMygwLikpIHtcXG5cIiArXG5cIiAgICAgICAgLy8gRGlzY2FyZCBieSBmb3JjaW5nIGludmFsaWQgdHJpYW5nbGUgaWYgd2VcXCdyZSBpbiB0aGUgZmVhdHVyZVxcblwiICtcblwiICAgICAgICAvLyBzZWxlY3Rpb24gcGFzcyBidXQgaGF2ZSBubyBzZWxlY3Rpb24gaW5mb1xcblwiICtcblwiICAgICAgICAvLyBUT0RPOiBpbiBzb21lIGNhc2VzIHdlIG1heSBhY3R1YWxseSB3YW50IG5vbi1zZWxlY3RhYmxlIGZlYXR1cmVzIHRvIG9jY2x1ZGUgc2VsZWN0YWJsZSBvbmVzP1xcblwiICtcblwiICAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMC4sIDAuLCAwLiwgMS4pO1xcblwiICtcblwiICAgICAgICByZXR1cm47XFxuXCIgK1xuXCIgICAgfVxcblwiICtcblwiICAgIHZfc2VsZWN0aW9uX2NvbG9yID0gYV9zZWxlY3Rpb25fY29sb3I7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlwiO1xuXG5zaGFkZXJTb3VyY2VzWydnbC9zaGFkZXJzL3NwaGVyaWNhbF9lbnZpcm9ubWVudF9tYXAnXSA9XG5cIi8vIFNwaGVyaWNhbCBlbnZpcm9ubWVudCBtYXBcXG5cIiArXG5cIi8vIEJhc2VkIG9uOiBodHRwOi8vd3d3LmNsaWNrdG9yZWxlYXNlLmNvbS9ibG9nL2NyZWF0aW5nLXNwaGVyaWNhbC1lbnZpcm9ubWVudC1tYXBwaW5nLXNoYWRlclxcblwiICtcblwiXFxuXCIgK1xuXCIvLyB2aWV3OiBsb2NhdGlvbiBvZiBjYW1lcmFcXG5cIiArXG5cIi8vIHBvc2l0aW9uOiBsb2NhdGlvbiBvZiBjdXJyZW50IHBvaW50IG9uIHN1cmZhY2VcXG5cIiArXG5cIi8vIG5vcm1hbDogbm9ybWFsIG9mIGN1cnJlbnQgcG9pbnQgb24gc3VyZmFjZVxcblwiICtcblwiLy8gc2tldzogc2tld2luZyBmYWN0b3IgKHVzZWQgdG8gY29tcGVuc2F0ZSBmb3IgYWx0ZXJlZCB2YW5pc2hpbmcgcG9pbnQpXFxuXCIgK1xuXCIvLyBlbnZtYXA6IHNwaGVyaWNhbCBlbnZpcm9ubWVudCBtYXAgdGV4dHVyZVxcblwiICtcblwiXFxuXCIgK1xuXCJ2ZWM0IHNwaGVyaWNhbEVudmlyb25tZW50TWFwKHZlYzMgdmlldywgdmVjMyBwb3NpdGlvbiwgdmVjMyBub3JtYWwsIHZlYzIgc2tldywgc2FtcGxlcjJEIGVudm1hcCkge1xcblwiICtcblwiICAgIC8vIE5vcm1hbGl6ZWQgdmVjdG9yIGZyb20gY2FtZXJhIHRvIHN1cmZhY2VcXG5cIiArXG5cIiAgICB2ZWMzIGV5ZSA9IG5vcm1hbGl6ZShwb3NpdGlvbi54eXogLSB2aWV3Lnh5eik7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBTa2V3XFxuXCIgK1xuXCIgICAgZXllLnh5IC09IHNrZXc7XFxuXCIgK1xuXCIgICAgZXllID0gbm9ybWFsaXplKGV5ZSk7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBSZWZsZWN0aW9uIG9mIGV5ZSBvZmYgb2Ygc3VyZmFjZSBub3JtYWxcXG5cIiArXG5cIiAgICB2ZWMzIHIgPSByZWZsZWN0KGV5ZSwgbm9ybWFsKTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIE1hcCByZWZsZWN0ZWQgdmVjdG9yIG9udG8gdGhlIHN1cmZhY2Ugb2YgYSBzcGhlcmVcXG5cIiArXG5cIiAgICByLnogKz0gMS47XFxuXCIgK1xuXCIgICAgZmxvYXQgbSA9IDIuICogbGVuZ3RoKHIpO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gQWRqdXN0IHh5IHRvIGFjY291bnQgZm9yIHNwaGVyaWNhbCBzaGFwZSwgYW5kIGNlbnRlciBpbiBtaWRkbGUgb2YgdGV4dHVyZVxcblwiICtcblwiICAgIHZlYzIgdXYgPSByLnh5IC8gbSArIC41O1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gU2FtcGxlIHRoZSBlbnZpcm9ubWVudCBtYXBcXG5cIiArXG5cIiAgICByZXR1cm4gdGV4dHVyZTJEKGVudm1hcCwgdXYpO1xcblwiICtcblwifVxcblwiICtcblwiXCI7XG5cbnNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvc3BvdExpZ2h0J10gPVxuXCIvKlxcblwiICtcblwiXFxuXCIgK1xuXCJFeHBlY3RlZCBnbG9iYWxzOlxcblwiICtcblwibWF0ZXJpYWxcXG5cIiArXG5cImxpZ2h0X2FjY3VtdWxhdG9yXypcXG5cIiArXG5cIlxcblwiICtcblwiKi9cXG5cIiArXG5cIlxcblwiICtcblwic3RydWN0IFNwb3RMaWdodCB7XFxuXCIgK1xuXCIgICAgdmVjNCBhbWJpZW50O1xcblwiICtcblwiICAgIHZlYzQgZGlmZnVzZTtcXG5cIiArXG5cIiAgICB2ZWM0IHNwZWN1bGFyO1xcblwiICtcblwiICAgIHZlYzQgcG9zaXRpb247XFxuXCIgK1xuXCJcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fRVhQT05FTlRcXG5cIiArXG5cIiAgICBmbG9hdCBhdHRlbnVhdGlvbkV4cG9uZW50O1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fSU5ORVJfUkFESVVTXFxuXCIgK1xuXCIgICAgZmxvYXQgaW5uZXJSYWRpdXM7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9PVVRFUl9SQURJVVNcXG5cIiArXG5cIiAgICBmbG9hdCBvdXRlclJhZGl1cztcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgdmVjMyBkaXJlY3Rpb247XFxuXCIgK1xuXCIgICAgZmxvYXQgc3BvdENvc0N1dG9mZjtcXG5cIiArXG5cIiAgICBmbG9hdCBzcG90RXhwb25lbnQ7XFxuXCIgK1xuXCJ9O1xcblwiICtcblwiXFxuXCIgK1xuXCJ2b2lkIGNhbGN1bGF0ZUxpZ2h0KGluIFNwb3RMaWdodCBfbGlnaHQsIGluIHZlYzMgX2V5ZVRvUG9pbnQsIGluIHZlYzMgX25vcm1hbCkge1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgZmxvYXQgZGlzdCA9IGxlbmd0aChfbGlnaHQucG9zaXRpb24ueHl6IC0gX2V5ZVRvUG9pbnQpO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gQ29tcHV0ZSB2ZWN0b3IgZnJvbSBzdXJmYWNlIHRvIGxpZ2h0IHBvc2l0aW9uXFxuXCIgK1xuXCIgICAgdmVjMyBWUCA9IChfbGlnaHQucG9zaXRpb24ueHl6IC0gX2V5ZVRvUG9pbnQpIC8gZGlzdDtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIG5vcm1hbCAuIGxpZ2h0IGRpcmVjdGlvblxcblwiICtcblwiICAgIGZsb2F0IG5Eb3RWUCA9IGNsYW1wKGRvdChfbm9ybWFsLCBWUCksIDAuMCwgMS4wKTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIEF0dGVudWF0aW9uIGRlZmF1bHRzXFxuXCIgK1xuXCIgICAgZmxvYXQgYXR0ZW51YXRpb24gPSAxLjA7XFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9FWFBPTkVOVFxcblwiICtcblwiICAgICAgICBmbG9hdCBSaW4gPSAxLjA7XFxuXCIgK1xuXCIgICAgICAgIGZsb2F0IGUgPSBfbGlnaHQuYXR0ZW51YXRpb25FeHBvbmVudDtcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX0lOTkVSX1JBRElVU1xcblwiICtcblwiICAgICAgICAgICAgUmluID0gX2xpZ2h0LmlubmVyUmFkaXVzO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX09VVEVSX1JBRElVU1xcblwiICtcblwiICAgICAgICAgICAgZmxvYXQgUmRpZmYgPSBfbGlnaHQub3V0ZXJSYWRpdXMtUmluO1xcblwiICtcblwiICAgICAgICAgICAgZmxvYXQgZCA9IGNsYW1wKG1heCgwLjAsZGlzdC1SaW4pL1JkaWZmLCAwLjAsIDEuMCk7XFxuXCIgK1xuXCIgICAgICAgICAgICBhdHRlbnVhdGlvbiA9IDEuMC0ocG93KGQsZSkpO1xcblwiICtcblwiICAgICAgICAjZWxzZVxcblwiICtcblwiICAgICAgICAgICAgLy8gSWYgbm8gb3V0ZXIgaXMgcHJvdmlkZSBiZWhhdmVzIGxpa2U6XFxuXCIgK1xuXCIgICAgICAgICAgICAvLyBodHRwczovL2ltZG9pbmdpdHdyb25nLndvcmRwcmVzcy5jb20vMjAxMS8wMS8zMS9saWdodC1hdHRlbnVhdGlvbi9cXG5cIiArXG5cIiAgICAgICAgICAgIGZsb2F0IGQgPSBtYXgoMC4wLGRpc3QtUmluKS9SaW4rMS4wO1xcblwiICtcblwiICAgICAgICAgICAgYXR0ZW51YXRpb24gPSBjbGFtcCgxLjAvKHBvdyhkLGUpKSwgMC4wLCAxLjApO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIiAgICAjZWxzZVxcblwiICtcblwiICAgICAgICBmbG9hdCBSaW4gPSAwLjA7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fUE9JTlRMSUdIVF9BVFRFTlVBVElPTl9JTk5FUl9SQURJVVNcXG5cIiArXG5cIiAgICAgICAgICAgIFJpbiA9IF9saWdodC5pbm5lclJhZGl1cztcXG5cIiArXG5cIiAgICAgICAgICAgICNpZmRlZiBUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fT1VURVJfUkFESVVTXFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgZmxvYXQgUmRpZmYgPSBfbGlnaHQub3V0ZXJSYWRpdXMtUmluO1xcblwiICtcblwiICAgICAgICAgICAgICAgIGZsb2F0IGQgPSBjbGFtcChtYXgoMC4wLGRpc3QtUmluKS9SZGlmZiwgMC4wLCAxLjApO1xcblwiICtcblwiICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uID0gMS4wLWQqZDtcXG5cIiArXG5cIiAgICAgICAgICAgICNlbHNlXFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgLy8gSWYgbm8gb3V0ZXIgaXMgcHJvdmlkZSBiZWhhdmVzIGxpa2U6XFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9pbWRvaW5naXR3cm9uZy53b3JkcHJlc3MuY29tLzIwMTEvMDEvMzEvbGlnaHQtYXR0ZW51YXRpb24vXFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgZmxvYXQgZCA9IG1heCgwLjAsZGlzdC1SaW4pL1JpbisxLjA7XFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgYXR0ZW51YXRpb24gPSBjbGFtcCgxLjAvZCwgMC4wLCAxLjApO1xcblwiICtcblwiICAgICAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgICAgICNlbHNlXFxuXCIgK1xuXCIgICAgICAgICAgICAjaWZkZWYgVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX09VVEVSX1JBRElVU1xcblwiICtcblwiICAgICAgICAgICAgICAgIGZsb2F0IGQgPSBjbGFtcChkaXN0L19saWdodC5vdXRlclJhZGl1cywgMC4wLCAxLjApO1xcblwiICtcblwiICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uID0gMS4wLWQqZDtcXG5cIiArXG5cIiAgICAgICAgICAgICNlbHNlXFxuXCIgK1xuXCIgICAgICAgICAgICAgICAgYXR0ZW51YXRpb24gPSAxLjA7XFxuXCIgK1xuXCIgICAgICAgICAgICAjZW5kaWZcXG5cIiArXG5cIiAgICAgICAgI2VuZGlmXFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBzcG90bGlnaHQgYXR0ZW51YXRpb24gZmFjdG9yXFxuXCIgK1xuXCIgICAgZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gMC4wO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gU2VlIGlmIHBvaW50IG9uIHN1cmZhY2UgaXMgaW5zaWRlIGNvbmUgb2YgaWxsdW1pbmF0aW9uXFxuXCIgK1xuXCIgICAgZmxvYXQgc3BvdERvdCA9IGNsYW1wKGRvdCgtVlAsIG5vcm1hbGl6ZShfbGlnaHQuZGlyZWN0aW9uKSksIDAuMCwgMS4wKTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIGlmIChzcG90RG90ID49IF9saWdodC5zcG90Q29zQ3V0b2ZmKSB7XFxuXCIgK1xuXCIgICAgICAgIHNwb3RBdHRlbnVhdGlvbiA9IHBvdyhzcG90RG90LCBfbGlnaHQuc3BvdEV4cG9uZW50KTtcXG5cIiArXG5cIiAgICB9XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICBsaWdodF9hY2N1bXVsYXRvcl9hbWJpZW50ICs9IF9saWdodC5hbWJpZW50ICogYXR0ZW51YXRpb24gKiBzcG90QXR0ZW51YXRpb247XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9ESUZGVVNFXFxuXCIgK1xuXCIgICAgICAgIGxpZ2h0X2FjY3VtdWxhdG9yX2RpZmZ1c2UgKz0gX2xpZ2h0LmRpZmZ1c2UgKiBuRG90VlAgKiBhdHRlbnVhdGlvbiAqIHNwb3RBdHRlbnVhdGlvbjtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX1NQRUNVTEFSXFxuXCIgK1xuXCIgICAgICAgIC8vIFBvd2VyIGZhY3RvciBmb3Igc2hpbnkgc3BlY3VsYXJzXFxuXCIgK1xuXCIgICAgICAgIGZsb2F0IHBmID0gMC4wO1xcblwiICtcblwiICAgICAgICBpZiAobkRvdFZQID4gMC4wKSB7XFxuXCIgK1xuXCIgICAgICAgICAgICB2ZWMzIHJlZmxlY3RWZWN0b3IgPSByZWZsZWN0KC1WUCwgX25vcm1hbCk7XFxuXCIgK1xuXCIgICAgICAgICAgICBmbG9hdCBleWVEb3RSID0gbWF4KGRvdCgtbm9ybWFsaXplKF9leWVUb1BvaW50KSwgcmVmbGVjdFZlY3RvciksIDAuMCk7XFxuXCIgK1xuXCIgICAgICAgICAgICBwZiA9IHBvdyhleWVEb3RSLCBtYXRlcmlhbC5zaGluaW5lc3MpO1xcblwiICtcblwiICAgICAgICB9XFxuXCIgK1xuXCIgICAgICAgIGxpZ2h0X2FjY3VtdWxhdG9yX3NwZWN1bGFyICs9IF9saWdodC5zcGVjdWxhciAqIHBmICogYXR0ZW51YXRpb24gKiBzcG90QXR0ZW51YXRpb247XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcIjtcblxuc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy91bnBhY2snXSA9XG5cIlxcblwiICtcblwiLy8gVW5wYWNrIG5vcm1hbGl6ZWQgc2hvcnRzIGJhY2sgdG8gdGhlaXIgb3JpZ2luYWwgaW50ZWdlciB2YWx1ZXNcXG5cIiArXG5cIiNkZWZpbmUgU0hPUlQoeCkgKHggKiAzMjc2Ny4pXFxuXCIgK1xuXCIjZGVmaW5lIFVOU0lHTkVEX1NIT1JUKHgpICh4ICogNjU1MzUuKVxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBVc2VkIGZvciBjYXNlcyB3aGVyZSBhbiBhdHRyaWJ1dGUgaXMgc3RvcmVkIGFzIGEgbm9ybWFsaXplZCBpbnQgdHlwZSxcXG5cIiArXG5cIi8vIGJ1dCBpcyBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIHRoYXQgbmVlZHMgYSByYW5nZSBncmVhdGVyIHRoYW4gWzAsIDFdIG9yIFstMSwgMV0uXFxuXCIgK1xuXCIvLyBUaGUgaW50ZWdlciB2YWx1ZSBpcyBcXFwic2NhbGVkXFxcIiB0byBhbiA4LjggZml4ZWQgcG9pbnQgc3R5bGUgaW50ZWdlciBiZWZvcmUgaXQgaXNcXG5cIiArXG5cIi8vIG5vcm1hbGl6ZWQgaW4gdGhlIFZCTy4gVXNlZCBmb3IgY2FzZXMgd2hlcmUgbG93IHByZWNpc2lvbiBpcyBzdWl0YWJsZSBmb3IgYm90aFxcblwiICtcblwiLy8gdGhlIGludGVnZXIgYW5kIGZyYWN0aW9uYWwgcG9ydGlvbnMgb2YgdGhlIG51bWJlci5cXG5cIiArXG5cIi8vIEV4YW1wbGVzIGFyZSBleHRydXNpb24gdmVjdG9ycyBmb3IgZHluYW1pYyBsaW5lcywgYW5kIHNjcmVlbi1zcGFjZSBzaXplIGZvciBwb2ludCBzcHJpdGVzLlxcblwiICtcblwiI2RlZmluZSBTQ0FMRV84KHgpICh4ICogMjU2LilcXG5cIiArXG5cIlwiO1xuXG5zaGFkZXJTb3VyY2VzWydzdHlsZXMvcG9pbnRzL3BvaW50c19mcmFnbWVudCddID1cblwidW5pZm9ybSB2ZWMyIHVfcmVzb2x1dGlvbjtcXG5cIiArXG5cInVuaWZvcm0gZmxvYXQgdV90aW1lO1xcblwiICtcblwidW5pZm9ybSB2ZWMzIHVfbWFwX3Bvc2l0aW9uO1xcblwiICtcblwidW5pZm9ybSB2ZWM0IHVfdGlsZV9vcmlnaW47XFxuXCIgK1xuXCJ1bmlmb3JtIGZsb2F0IHVfbWV0ZXJzX3Blcl9waXhlbDtcXG5cIiArXG5cInVuaWZvcm0gZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87XFxuXCIgK1xuXCJcXG5cIiArXG5cInVuaWZvcm0gbWF0MyB1X25vcm1hbE1hdHJpeDtcXG5cIiArXG5cInVuaWZvcm0gbWF0MyB1X2ludmVyc2VOb3JtYWxNYXRyaXg7XFxuXCIgK1xuXCJcXG5cIiArXG5cInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcXG5cIiArXG5cIlxcblwiICtcblwidmFyeWluZyB2ZWM0IHZfY29sb3I7XFxuXCIgK1xuXCJ2YXJ5aW5nIHZlYzIgdl90ZXhjb29yZDtcXG5cIiArXG5cInZhcnlpbmcgdmVjNCB2X3dvcmxkX3Bvc2l0aW9uO1xcblwiICtcblwiXFxuXCIgK1xuXCIjZGVmaW5lIFRBTkdSQU1fTk9STUFMIHZlYzMoMC4sIDAuLCAxLilcXG5cIiArXG5cIlxcblwiICtcblwiLy8gQWxwaGEgZGlzY2FyZCB0aHJlc2hvbGQgKHN1YnN0aXR1dGUgZm9yIGFscGhhIGJsZW5kaW5nKVxcblwiICtcblwiI2lmbmRlZiBUQU5HUkFNX0FMUEhBX0RJU0NBUkRcXG5cIiArXG5cIiNkZWZpbmUgVEFOR1JBTV9BTFBIQV9ESVNDQVJEIDAuNVxcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIEFscGhhIGZhZGUgcmFuZ2UgZm9yIGVkZ2VzIG9mIHBvaW50c1xcblwiICtcblwiI2lmbmRlZiBUQU5HUkFNX0ZBREVfUkFOR0VcXG5cIiArXG5cIiNkZWZpbmUgVEFOR1JBTV9GQURFX1JBTkdFIC4xNVxcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCIjZGVmaW5lIFRBTkdSQU1fRkFERV9TVEFSVCAoMS4gLSBUQU5HUkFNX0ZBREVfUkFOR0UpXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogY2FtZXJhXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IG1hdGVyaWFsXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IGxpZ2h0aW5nXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IHJhc3RlclxcblwiICtcblwiI3ByYWdtYSB0YW5ncmFtOiBnbG9iYWxcXG5cIiArXG5cIlxcblwiICtcblwidm9pZCBtYWluICh2b2lkKSB7XFxuXCIgK1xuXCIgICAgLy8gSW5pdGlhbGl6ZSBnbG9iYWxzXFxuXCIgK1xuXCIgICAgI3ByYWdtYSB0YW5ncmFtOiBzZXR1cFxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgdmVjNCBjb2xvciA9IHZfY29sb3I7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBBcHBseSBhIHRleHR1cmVcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9QT0lOVF9URVhUVVJFXFxuXCIgK1xuXCIgICAgICAgIGNvbG9yICo9IHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4Y29vcmQpO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgIC8vIE1hbnVhbGx5IHVuLW11bHRpcGx5IGFscGhhLCBmb3IgY2FzZXMgd2hlcmUgdGV4dHVyZSBoYXMgcHJlLW11bHRpcGxpZWQgYWxwaGFcXG5cIiArXG5cIiAgICAgICAgI2lmZGVmIFRBTkdSQU1fVU5NVUxUSVBMWV9BTFBIQVxcblwiICtcblwiICAgICAgICAgICAgY29sb3IucmdiIC89IG1heChjb2xvci5hLCAwLjAwMSk7XFxuXCIgK1xuXCIgICAgICAgICNlbmRpZlxcblwiICtcblwiICAgIC8vIERyYXcgYSBwb2ludFxcblwiICtcblwiICAgICNlbHNlXFxuXCIgK1xuXCIgICAgICAgIC8vIEZhZGUgYWxwaGEgbmVhciBjaXJjbGUgZWRnZVxcblwiICtcblwiICAgICAgICB2ZWMyIHV2ID0gdl90ZXhjb29yZCAqIDIuIC0gMS47XFxuXCIgK1xuXCIgICAgICAgIGZsb2F0IHBvaW50X2Rpc3QgPSBsZW5ndGgodXYpO1xcblwiICtcblwiICAgICAgICBjb2xvci5hID0gY2xhbXAoY29sb3IuYSAtIChzbW9vdGhzdGVwKDAuLCBUQU5HUkFNX0ZBREVfUkFOR0UsIChwb2ludF9kaXN0IC0gVEFOR1JBTV9GQURFX1NUQVJUKSkgLyBUQU5HUkFNX0ZBREVfUkFOR0UpLCAwLiwgY29sb3IuYSk7XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBJZiBibGVuZGluZyBpcyBvZmYsIHVzZSBhbHBoYSBkaXNjYXJkIGFzIGEgbG93ZXItcXVhbGl0eSBzdWJzdGl0dXRlXFxuXCIgK1xuXCIgICAgI2lmICFkZWZpbmVkKFRBTkdSQU1fQkxFTkRfT1ZFUkxBWSkgJiYgIWRlZmluZWQoVEFOR1JBTV9CTEVORF9JTkxBWSlcXG5cIiArXG5cIiAgICAgICAgaWYgKGNvbG9yLmEgPCBUQU5HUkFNX0FMUEhBX0RJU0NBUkQpIHtcXG5cIiArXG5cIiAgICAgICAgICAgIGRpc2NhcmQ7XFxuXCIgK1xuXCIgICAgICAgIH1cXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgICNwcmFnbWEgdGFuZ3JhbTogY29sb3JcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIEZhZGUgb3V0IHdoZW4gdGlsZSBpcyB6b29taW5nIG91dCwgZS5nLiBhY3RpbmcgYXMgcHJveHkgdGlsZXNcXG5cIiArXG5cIiAgICAvLyBOQjogdGhpcyBpcyBtb3N0bHkgZG9uZSB0byBjb21wZW5zYXRlIGZvciB0ZXh0IGxhYmVsIGNvbGxpc2lvbiBoYXBwZW5pbmcgYXQgdGhlIGxhYmVsXFwncyAxeCB6b29tLiBBcyBsYWJlbHNcXG5cIiArXG5cIiAgICAvLyBpbiBwcm94eSB0aWxlcyBhcmUgc2NhbGVkIGRvd24sIHRoZXkgYmVnaW4gdG8gb3ZlcmxhcCwgYW5kIHRoZSBmYWRlIGlzIGEgc2ltcGxlIHdheSB0byBlYXNlIHRoZSB0cmFuc2l0aW9uLlxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX0ZBREVfT05fWk9PTV9PVVRcXG5cIiArXG5cIiAgICAgICAgY29sb3IuYSAqPSBjbGFtcCgxLiAtIFRBTkdSQU1fRkFERV9PTl9aT09NX09VVF9SQVRFICogKHVfdGlsZV9vcmlnaW4ueiAtIHVfbWFwX3Bvc2l0aW9uLnopLCAwLiwgMS4pO1xcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgI3ByYWdtYSB0YW5ncmFtOiBmaWx0ZXJcXG5cIiArXG5cIlxcblwiICtcblwiICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcblwiICtcblwifVxcblwiICtcblwiXCI7XG5cbnNoYWRlclNvdXJjZXNbJ3N0eWxlcy9wb2ludHMvcG9pbnRzX3ZlcnRleCddID1cblwidW5pZm9ybSB2ZWMyIHVfcmVzb2x1dGlvbjtcXG5cIiArXG5cInVuaWZvcm0gZmxvYXQgdV90aW1lO1xcblwiICtcblwidW5pZm9ybSB2ZWMzIHVfbWFwX3Bvc2l0aW9uO1xcblwiICtcblwidW5pZm9ybSB2ZWM0IHVfdGlsZV9vcmlnaW47XFxuXCIgK1xuXCJ1bmlmb3JtIGZsb2F0IHVfdGlsZV9wcm94eV9kZXB0aDtcXG5cIiArXG5cInVuaWZvcm0gZmxvYXQgdV9tZXRlcnNfcGVyX3BpeGVsO1xcblwiICtcblwidW5pZm9ybSBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbztcXG5cIiArXG5cIlxcblwiICtcblwidW5pZm9ybSBtYXQ0IHVfbW9kZWw7XFxuXCIgK1xuXCJ1bmlmb3JtIG1hdDQgdV9tb2RlbFZpZXc7XFxuXCIgK1xuXCJ1bmlmb3JtIG1hdDMgdV9ub3JtYWxNYXRyaXg7XFxuXCIgK1xuXCJ1bmlmb3JtIG1hdDMgdV9pbnZlcnNlTm9ybWFsTWF0cml4O1xcblwiICtcblwiXFxuXCIgK1xuXCJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uO1xcblwiICtcblwiYXR0cmlidXRlIHZlYzQgYV9zaGFwZTtcXG5cIiArXG5cImF0dHJpYnV0ZSB2ZWM0IGFfY29sb3I7XFxuXCIgK1xuXCJhdHRyaWJ1dGUgdmVjMiBhX3RleGNvb3JkO1xcblwiICtcblwiYXR0cmlidXRlIHZlYzIgYV9vZmZzZXQ7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiNkZWZpbmUgVEFOR1JBTV9OT1JNQUwgdmVjMygwLiwgMC4sIDEuKVxcblwiICtcblwiXFxuXCIgK1xuXCJ2YXJ5aW5nIHZlYzQgdl9jb2xvcjtcXG5cIiArXG5cInZhcnlpbmcgdmVjMiB2X3RleGNvb3JkO1xcblwiICtcblwidmFyeWluZyB2ZWM0IHZfd29ybGRfcG9zaXRpb247XFxuXCIgK1xuXCJcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogY2FtZXJhXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IG1hdGVyaWFsXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IGxpZ2h0aW5nXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IHJhc3RlclxcblwiICtcblwiI3ByYWdtYSB0YW5ncmFtOiBnbG9iYWxcXG5cIiArXG5cIlxcblwiICtcblwidmVjMiByb3RhdGUyRCh2ZWMyIF9zdCwgZmxvYXQgX2FuZ2xlKSB7XFxuXCIgK1xuXCIgICAgcmV0dXJuIG1hdDIoY29zKF9hbmdsZSksLXNpbihfYW5nbGUpLFxcblwiICtcblwiICAgICAgICAgICAgICAgIHNpbihfYW5nbGUpLGNvcyhfYW5nbGUpKSAqIF9zdDtcXG5cIiArXG5cIn1cXG5cIiArXG5cIlxcblwiICtcblwidm9pZCBtYWluKCkge1xcblwiICtcblwiICAgIC8vIEluaXRpYWxpemUgZ2xvYmFsc1xcblwiICtcblwiICAgICNwcmFnbWEgdGFuZ3JhbTogc2V0dXBcXG5cIiArXG5cIlxcblwiICtcblwiICAgIHZfY29sb3IgPSBhX2NvbG9yO1xcblwiICtcblwiICAgIHZfdGV4Y29vcmQgPSBhX3RleGNvb3JkO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gUG9zaXRpb25cXG5cIiArXG5cIiAgICB2ZWM0IHBvc2l0aW9uID0gdV9tb2RlbFZpZXcgKiB2ZWM0KFNIT1JUKGFfcG9zaXRpb24ueHl6KSwgMS4pO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gQXBwbHkgcG9zaXRpb25pbmcgYW5kIHNjYWxpbmcgaW4gc2NyZWVuIHNwYWNlXFxuXCIgK1xuXCIgICAgZmxvYXQgenNjYWxlID0gZnJhY3QodV9tYXBfcG9zaXRpb24ueikgKiAoU0NBTEVfOChhX3NoYXBlLncpIC0gMS4pICsgMS47XFxuXCIgK1xuXCIgICAgLy8gZmxvYXQgenNjYWxlID0gbG9nKGZyYWN0KHVfbWFwX3Bvc2l0aW9uLnopICsgMS4pIC8gbG9nKDIuKSAqIChhX3NoYXBlLncgLSAxLikgKyAxLjtcXG5cIiArXG5cIiAgICB2ZWMyIHNoYXBlID0gU0NBTEVfOChhX3NoYXBlLnh5KSAqIHpzY2FsZTsgICAgIC8vXFxuXCIgK1xuXCIgICAgdmVjMiBvZmZzZXQgPSB2ZWMyKGFfb2Zmc2V0LngsIC1hX29mZnNldC55KTsgLy8gZmxpcCB5IHRvIG1ha2UgaXQgcG9pbnQgZG93blxcblwiICtcblwiICAgIGZsb2F0IHRoZXRhID0gcmFkaWFucyhhX3NoYXBlLnogKiAzNjAuKTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIHNoYXBlID0gcm90YXRlMkQoc2hhcGUsIHRoZXRhKTsgICAgICAgICAgICAgLy8gYXBwbHkgcm90YXRpb24gdG8gdmVydGV4XFxuXCIgK1xuXCIgICAgc2hhcGUgKz0gcm90YXRlMkQoU0hPUlQob2Zmc2V0KSwgdGhldGEpOyAgLy8gYXBwbHkgb2Zmc2V0IG9uIHJvdGF0ZWQgYXhpcyAoZS5nLiBzbyBsaW5lIGxhYmVscyBmb2xsb3cgdGV4dCBheGlzKVxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gV29ybGQgY29vcmRpbmF0ZXMgZm9yIDNkIHByb2NlZHVyYWwgdGV4dHVyZXNcXG5cIiArXG5cIiAgICB2X3dvcmxkX3Bvc2l0aW9uID0gdV9tb2RlbCAqIHBvc2l0aW9uO1xcblwiICtcblwiICAgIHZfd29ybGRfcG9zaXRpb24ueHkgKz0gc2hhcGUgKiB1X21ldGVyc19wZXJfcGl4ZWw7XFxuXCIgK1xuXCIgICAgdl93b3JsZF9wb3NpdGlvbiA9IHdyYXBXb3JsZFBvc2l0aW9uKHZfd29ybGRfcG9zaXRpb24pO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gTW9kaWZ5IHBvc2l0aW9uIGJlZm9yZSBjYW1lcmEgcHJvamVjdGlvblxcblwiICtcblwiICAgICNwcmFnbWEgdGFuZ3JhbTogcG9zaXRpb25cXG5cIiArXG5cIlxcblwiICtcblwiICAgIGNhbWVyYVByb2plY3Rpb24ocG9zaXRpb24pO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTEFZRVJfT1JERVJcXG5cIiArXG5cIiAgICAgICAgLy8gKzEgaXMgdG8ga2VlcCBhbGwgbGF5ZXJzIGluY2x1ZGluZyBwcm94aWVzID4gMFxcblwiICtcblwiICAgICAgICBhcHBseUxheWVyT3JkZXIoU0hPUlQoYV9wb3NpdGlvbi53KSArIHVfdGlsZV9wcm94eV9kZXB0aCArIDEuLCBwb3NpdGlvbik7XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBBcHBseSBwaXhlbCBvZmZzZXQgaW4gc2NyZWVuLXNwYWNlXFxuXCIgK1xuXCIgICAgLy8gTXVsdGlwbHkgYnkgMiBpcyBiZWNhdXNlIHNjcmVlbiBpcyAyIHVuaXRzIHdpZGUgTm9ybWFsaXplZCBEZXZpY2UgQ29vcmRzIChhbmQgdV9yZXNvbHV0aW9uIGRldmljZSBwaXhlbHMgd2lkZSlcXG5cIiArXG5cIiAgICAvLyBEZXZpY2UgcGl4ZWwgcmF0aW8gYWRqdXN0bWVudCBpcyBiZWNhdXNlIHNoYXBlIGlzIGluIGxvZ2ljYWwgcGl4ZWxzXFxuXCIgK1xuXCIgICAgcG9zaXRpb24ueHkgKz0gc2hhcGUgKiBwb3NpdGlvbi53ICogMi4gKiB1X2RldmljZV9waXhlbF9yYXRpbyAvIHVfcmVzb2x1dGlvbjtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb247XFxuXCIgK1xuXCJ9XFxuXCIgK1xuXCJcIjtcblxuc2hhZGVyU291cmNlc1snc3R5bGVzL3BvbHlnb25zL3BvbHlnb25zX2ZyYWdtZW50J10gPVxuXCJ1bmlmb3JtIHZlYzIgdV9yZXNvbHV0aW9uO1xcblwiICtcblwidW5pZm9ybSBmbG9hdCB1X3RpbWU7XFxuXCIgK1xuXCJ1bmlmb3JtIHZlYzMgdV9tYXBfcG9zaXRpb247XFxuXCIgK1xuXCJ1bmlmb3JtIHZlYzQgdV90aWxlX29yaWdpbjtcXG5cIiArXG5cInVuaWZvcm0gZmxvYXQgdV9tZXRlcnNfcGVyX3BpeGVsO1xcblwiICtcblwidW5pZm9ybSBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbztcXG5cIiArXG5cIlxcblwiICtcblwidW5pZm9ybSBtYXQzIHVfbm9ybWFsTWF0cml4O1xcblwiICtcblwidW5pZm9ybSBtYXQzIHVfaW52ZXJzZU5vcm1hbE1hdHJpeDtcXG5cIiArXG5cIlxcblwiICtcblwidmFyeWluZyB2ZWM0IHZfcG9zaXRpb247XFxuXCIgK1xuXCJ2YXJ5aW5nIHZlYzMgdl9ub3JtYWw7XFxuXCIgK1xuXCJ2YXJ5aW5nIHZlYzQgdl9jb2xvcjtcXG5cIiArXG5cInZhcnlpbmcgdmVjNCB2X3dvcmxkX3Bvc2l0aW9uO1xcblwiICtcblwiXFxuXCIgK1xuXCIjZGVmaW5lIFRBTkdSQU1fTk9STUFMIHZfbm9ybWFsXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX1RFWFRVUkVfQ09PUkRTXFxuXCIgK1xuXCIgICAgdmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQ7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiI2lmZGVmIFRBTkdSQU1fTU9ERUxfUE9TSVRJT05fQkFTRV9aT09NX1ZBUllJTkdcXG5cIiArXG5cIiAgICB2YXJ5aW5nIHZlYzQgdl9tb2RlbHBvc19iYXNlX3pvb207XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiI2lmIGRlZmluZWQoVEFOR1JBTV9MSUdIVElOR19WRVJURVgpXFxuXCIgK1xuXCIgICAgdmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiI3ByYWdtYSB0YW5ncmFtOiBjYW1lcmFcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogbWF0ZXJpYWxcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogbGlnaHRpbmdcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogcmFzdGVyXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IGdsb2JhbFxcblwiICtcblwiXFxuXCIgK1xuXCJ2b2lkIG1haW4gKHZvaWQpIHtcXG5cIiArXG5cIiAgICAvLyBJbml0aWFsaXplIGdsb2JhbHNcXG5cIiArXG5cIiAgICAjcHJhZ21hIHRhbmdyYW06IHNldHVwXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICB2ZWM0IGNvbG9yID0gdl9jb2xvcjtcXG5cIiArXG5cIiAgICB2ZWMzIG5vcm1hbCA9IFRBTkdSQU1fTk9STUFMO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gQXBwbHkgcmFzdGVyIHRvIHZlcnRleCBjb2xvclxcblwiICtcblwiICAgICNpZmRlZiBUQU5HUkFNX1JBU1RFUl9URVhUVVJFX0NPTE9SXFxuXCIgK1xuXCIgICAgICAgIGNvbG9yICo9IHNhbXBsZVJhc3RlcigwKTsgLy8gbXVsdGlwbGllZCB0byB0aW50IHRleHR1cmUgY29sb3JcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIEZpcnN0LCBnZXQgbm9ybWFsIGZyb20gcmFzdGVyIHRpbGUgKGlmIGFwcGxpY2FibGUpXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fUkFTVEVSX1RFWFRVUkVfTk9STUFMXFxuXCIgK1xuXCIgICAgICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShzYW1wbGVSYXN0ZXIoMCkucmdiICogMi4gLSAxLik7XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBTZWNvbmQsIGFsdGVyIG5vcm1hbCB3aXRoIG5vcm1hbCBtYXAgdGV4dHVyZSAoaWYgYXBwbGljYWJsZSlcXG5cIiArXG5cIiAgICAjaWYgZGVmaW5lZChUQU5HUkFNX0xJR0hUSU5HX0ZSQUdNRU5UKSAmJiBkZWZpbmVkKFRBTkdSQU1fTUFURVJJQUxfTk9STUFMX1RFWFRVUkUpXFxuXCIgK1xuXCIgICAgICAgIGNhbGN1bGF0ZU5vcm1hbChub3JtYWwpO1xcblwiICtcblwiICAgICNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gTm9ybWFsIG1vZGlmaWNhdGlvbiBhcHBsaWVkIGhlcmUgZm9yIGZyYWdtZW50IGxpZ2h0aW5nIG9yIG5vIGxpZ2h0aW5nLFxcblwiICtcblwiICAgIC8vIGFuZCBpbiB2ZXJ0ZXggc2hhZGVyIGZvciB2ZXJ0ZXggbGlnaHRpbmdcXG5cIiArXG5cIiAgICAjaWYgIWRlZmluZWQoVEFOR1JBTV9MSUdIVElOR19WRVJURVgpXFxuXCIgK1xuXCIgICAgICAgICNwcmFnbWEgdGFuZ3JhbTogbm9ybWFsXFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBDb2xvciBtb2RpZmljYXRpb24gYmVmb3JlIGxpZ2h0aW5nIGlzIGFwcGxpZWRcXG5cIiArXG5cIiAgICAjcHJhZ21hIHRhbmdyYW06IGNvbG9yXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWYgZGVmaW5lZChUQU5HUkFNX0xJR0hUSU5HX0ZSQUdNRU5UKVxcblwiICtcblwiICAgICAgICAvLyBDYWxjdWxhdGUgcGVyLWZyYWdtZW50IGxpZ2h0aW5nXFxuXCIgK1xuXCIgICAgICAgIGNvbG9yID0gY2FsY3VsYXRlTGlnaHRpbmcodl9wb3NpdGlvbi54eXogLSB1X2V5ZSwgbm9ybWFsLCBjb2xvcik7XFxuXCIgK1xuXCIgICAgI2VsaWYgZGVmaW5lZChUQU5HUkFNX0xJR0hUSU5HX1ZFUlRFWClcXG5cIiArXG5cIiAgICAgICAgLy8gQXBwbHkgbGlnaHRpbmcgaW50ZW5zaXR5IGludGVycG9sYXRlZCBmcm9tIHZlcnRleCBzaGFkZXJcXG5cIiArXG5cIiAgICAgICAgY29sb3IgKj0gdl9saWdodGluZztcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIFBvc3QtcHJvY2Vzc2luZyBlZmZlY3RzIChtb2RpZnkgY29sb3IgYWZ0ZXIgbGlnaHRpbmcpXFxuXCIgK1xuXCIgICAgI3ByYWdtYSB0YW5ncmFtOiBmaWx0ZXJcXG5cIiArXG5cIlxcblwiICtcblwiICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcblwiICtcblwifVxcblwiICtcblwiXCI7XG5cbnNoYWRlclNvdXJjZXNbJ3N0eWxlcy9wb2x5Z29ucy9wb2x5Z29uc192ZXJ0ZXgnXSA9XG5cInVuaWZvcm0gdmVjMiB1X3Jlc29sdXRpb247XFxuXCIgK1xuXCJ1bmlmb3JtIGZsb2F0IHVfdGltZTtcXG5cIiArXG5cInVuaWZvcm0gdmVjMyB1X21hcF9wb3NpdGlvbjtcXG5cIiArXG5cInVuaWZvcm0gdmVjNCB1X3RpbGVfb3JpZ2luO1xcblwiICtcblwidW5pZm9ybSBmbG9hdCB1X3RpbGVfcHJveHlfZGVwdGg7XFxuXCIgK1xuXCJ1bmlmb3JtIGZsb2F0IHVfbWV0ZXJzX3Blcl9waXhlbDtcXG5cIiArXG5cInVuaWZvcm0gZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87XFxuXCIgK1xuXCJcXG5cIiArXG5cInVuaWZvcm0gbWF0NCB1X21vZGVsO1xcblwiICtcblwidW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3O1xcblwiICtcblwidW5pZm9ybSBtYXQzIHVfbm9ybWFsTWF0cml4O1xcblwiICtcblwidW5pZm9ybSBtYXQzIHVfaW52ZXJzZU5vcm1hbE1hdHJpeDtcXG5cIiArXG5cIlxcblwiICtcblwiYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjtcXG5cIiArXG5cImF0dHJpYnV0ZSB2ZWM0IGFfY29sb3I7XFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIE9wdGlvbmFsIG5vcm1hbCBhdHRyaWJ1dGUsIG90aGVyd2lzZSBkZWZhdWx0IHRvIHVwXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9OT1JNQUxfQVRUUklCVVRFXFxuXCIgK1xuXCIgICAgYXR0cmlidXRlIHZlYzMgYV9ub3JtYWw7XFxuXCIgK1xuXCIgICAgI2RlZmluZSBUQU5HUkFNX05PUk1BTCBhX25vcm1hbFxcblwiICtcblwiI2Vsc2VcXG5cIiArXG5cIiAgICAjZGVmaW5lIFRBTkdSQU1fTk9STUFMIHZlYzMoMC4sIDAuLCAxLilcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCIvLyBPcHRpb25hbCBkeW5hbWljIGxpbmUgZXh0cnVzaW9uXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9FWFRSVURFX0xJTkVTXFxuXCIgK1xuXCIgICAgLy8geHk6IGV4dHJ1c2lvbiBkaXJlY3Rpb24gaW4geHkgcGxhbmVcXG5cIiArXG5cIiAgICAvLyB6OiAgaGFsZi13aWR0aCBvZiBsaW5lIChhbW91bnQgdG8gZXh0cnVkZSlcXG5cIiArXG5cIiAgICAvLyB3OiAgc2NhbGluZyBmYWN0b3IgZm9yIGludGVycG9sYXRpbmcgd2lkdGggYmV0d2VlbiB6b29tc1xcblwiICtcblwiICAgIGF0dHJpYnV0ZSB2ZWM0IGFfZXh0cnVkZTtcXG5cIiArXG5cIiNlbmRpZlxcblwiICtcblwiXFxuXCIgK1xuXCJ2YXJ5aW5nIHZlYzQgdl9wb3NpdGlvbjtcXG5cIiArXG5cInZhcnlpbmcgdmVjMyB2X25vcm1hbDtcXG5cIiArXG5cInZhcnlpbmcgdmVjNCB2X2NvbG9yO1xcblwiICtcblwidmFyeWluZyB2ZWM0IHZfd29ybGRfcG9zaXRpb247XFxuXCIgK1xuXCJcXG5cIiArXG5cIi8vIE9wdGlvbmFsIHRleHR1cmUgVVZzXFxuXCIgK1xuXCIjaWZkZWYgVEFOR1JBTV9URVhUVVJFX0NPT1JEU1xcblwiICtcblwiICAgIGF0dHJpYnV0ZSB2ZWMyIGFfdGV4Y29vcmQ7XFxuXCIgK1xuXCIgICAgdmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQ7XFxuXCIgK1xuXCIjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiLy8gT3B0aW9uYWwgbW9kZWwgcG9zaXRpb24gdmFyeWluZyBmb3IgdGlsZSBjb29yZGluYXRlIHpvb21cXG5cIiArXG5cIiNpZmRlZiBUQU5HUkFNX01PREVMX1BPU0lUSU9OX0JBU0VfWk9PTV9WQVJZSU5HXFxuXCIgK1xuXCIgICAgdmFyeWluZyB2ZWM0IHZfbW9kZWxwb3NfYmFzZV96b29tO1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNpZiBkZWZpbmVkKFRBTkdSQU1fTElHSFRJTkdfVkVSVEVYKVxcblwiICtcblwiICAgIHZhcnlpbmcgdmVjNCB2X2xpZ2h0aW5nO1xcblwiICtcblwiI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiNwcmFnbWEgdGFuZ3JhbTogY2FtZXJhXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IG1hdGVyaWFsXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IGxpZ2h0aW5nXFxuXCIgK1xuXCIjcHJhZ21hIHRhbmdyYW06IHJhc3RlclxcblwiICtcblwiI3ByYWdtYSB0YW5ncmFtOiBnbG9iYWxcXG5cIiArXG5cIlxcblwiICtcblwidm9pZCBtYWluKCkge1xcblwiICtcblwiICAgIC8vIEluaXRpYWxpemUgZ2xvYmFsc1xcblwiICtcblwiICAgICNwcmFnbWEgdGFuZ3JhbTogc2V0dXBcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIFRleHR1cmUgVVZzXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fVEVYVFVSRV9DT09SRFNcXG5cIiArXG5cIiAgICAgICAgdl90ZXhjb29yZCA9IGFfdGV4Y29vcmQ7XFxuXCIgK1xuXCIgICAgICAgICNpZmRlZiBUQU5HUkFNX0VYVFJVREVfTElORVNcXG5cIiArXG5cIiAgICAgICAgICAgIHZfdGV4Y29vcmQueSAqPSBUQU5HUkFNX1ZfU0NBTEVfQURKVVNUO1xcblwiICtcblwiICAgICAgICAjZW5kaWZcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIFBhc3MgbW9kZWwgcG9zaXRpb24gdG8gZnJhZ21lbnQgc2hhZGVyXFxuXCIgK1xuXCIgICAgI2lmZGVmIFRBTkdSQU1fTU9ERUxfUE9TSVRJT05fQkFTRV9aT09NX1ZBUllJTkdcXG5cIiArXG5cIiAgICAgICAgdl9tb2RlbHBvc19iYXNlX3pvb20gPSBtb2RlbFBvc2l0aW9uQmFzZVpvb20oKTtcXG5cIiArXG5cIiAgICAjZW5kaWZcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIFBvc2l0aW9uXFxuXCIgK1xuXCIgICAgdmVjNCBwb3NpdGlvbiA9IHZlYzQoU0hPUlQoYV9wb3NpdGlvbi54eXopLCAxLik7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAjaWZkZWYgVEFOR1JBTV9FWFRSVURFX0xJTkVTXFxuXCIgK1xuXCIgICAgICAgIHZlYzIgZXh0cnVkZSA9IFNDQUxFXzgoYV9leHRydWRlLnh5KTtcXG5cIiArXG5cIiAgICAgICAgZmxvYXQgd2lkdGggPSBTSE9SVChhX2V4dHJ1ZGUueik7XFxuXCIgK1xuXCIgICAgICAgIGZsb2F0IGR3ZHogPSBTSE9SVChhX2V4dHJ1ZGUudyk7XFxuXCIgK1xuXCIgICAgICAgIGZsb2F0IGR6ID0gY2xhbXAodV9tYXBfcG9zaXRpb24ueiAtIHVfdGlsZV9vcmlnaW4ueiwgMC4sIDEuKTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAvLyBJbnRlcnBvbGF0ZSBiZXR3ZWVuIHpvb20gbGV2ZWxzXFxuXCIgK1xuXCIgICAgICAgIHdpZHRoICs9IGR3ZHogKiBkejtcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAvLyBTY2FsZSBwaXhlbCBkaW1lbnNpb25zIHRvIGJlIGNvbnNpc3RlbnQgaW4gc2NyZWVuIHNwYWNlXFxuXCIgK1xuXCIgICAgICAgIHdpZHRoICo9IGV4cDIoLWR6KTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICAvLyBNb2RpZnkgbGluZSB3aWR0aCBiZWZvcmUgZXh0cnVzaW9uXFxuXCIgK1xuXCIgICAgICAgICNwcmFnbWEgdGFuZ3JhbTogd2lkdGhcXG5cIiArXG5cIlxcblwiICtcblwiICAgICAgICBwb3NpdGlvbi54eSArPSBleHRydWRlICogd2lkdGg7XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBXb3JsZCBjb29yZGluYXRlcyBmb3IgM2QgcHJvY2VkdXJhbCB0ZXh0dXJlc1xcblwiICtcblwiICAgIHZfd29ybGRfcG9zaXRpb24gPSB3cmFwV29ybGRQb3NpdGlvbih1X21vZGVsICogcG9zaXRpb24pO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gQWRqdXN0IGZvciB0aWxlIGFuZCB2aWV3IHBvc2l0aW9uXFxuXCIgK1xuXCIgICAgcG9zaXRpb24gPSB1X21vZGVsVmlldyAqIHBvc2l0aW9uO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgLy8gTW9kaWZ5IHBvc2l0aW9uIGJlZm9yZSBjYW1lcmEgcHJvamVjdGlvblxcblwiICtcblwiICAgICNwcmFnbWEgdGFuZ3JhbTogcG9zaXRpb25cXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vIFNldHVwIHZhcnlpbmdzXFxuXCIgK1xuXCIgICAgdl9wb3NpdGlvbiA9IHBvc2l0aW9uO1xcblwiICtcblwiICAgIHZfbm9ybWFsID0gbm9ybWFsaXplKHVfbm9ybWFsTWF0cml4ICogVEFOR1JBTV9OT1JNQUwpO1xcblwiICtcblwiICAgIHZfY29sb3IgPSBhX2NvbG9yO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgI2lmIGRlZmluZWQoVEFOR1JBTV9MSUdIVElOR19WRVJURVgpXFxuXCIgK1xuXCIgICAgICAgIC8vIFZlcnRleCBsaWdodGluZ1xcblwiICtcblwiICAgICAgICB2ZWMzIG5vcm1hbCA9IHZfbm9ybWFsO1xcblwiICtcblwiXFxuXCIgK1xuXCIgICAgICAgIC8vIE1vZGlmeSBub3JtYWwgYmVmb3JlIGxpZ2h0aW5nXFxuXCIgK1xuXCIgICAgICAgICNwcmFnbWEgdGFuZ3JhbTogbm9ybWFsXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAgICAgLy8gUGFzcyBsaWdodGluZyBpbnRlbnNpdHkgdG8gZnJhZ21lbnQgc2hhZGVyXFxuXCIgK1xuXCIgICAgICAgIHZfbGlnaHRpbmcgPSBjYWxjdWxhdGVMaWdodGluZyhwb3NpdGlvbi54eXogLSB1X2V5ZSwgbm9ybWFsLCB2ZWM0KDEuKSk7XFxuXCIgK1xuXCIgICAgI2VuZGlmXFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICAvLyBDYW1lcmFcXG5cIiArXG5cIiAgICBjYW1lcmFQcm9qZWN0aW9uKHBvc2l0aW9uKTtcXG5cIiArXG5cIlxcblwiICtcblwiICAgIC8vICsxIGlzIHRvIGtlZXAgYWxsIGxheWVycyBpbmNsdWRpbmcgcHJveGllcyA+IDBcXG5cIiArXG5cIiAgICBhcHBseUxheWVyT3JkZXIoU0hPUlQoYV9wb3NpdGlvbi53KSArIHVfdGlsZV9wcm94eV9kZXB0aCArIDEuLCBwb3NpdGlvbik7XFxuXCIgK1xuXCJcXG5cIiArXG5cIiAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uO1xcblwiICtcblwifVxcblwiICtcblwiXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHNoYWRlclNvdXJjZXM7XG4iLCIvLyBUZXh0dXJlIG1hbmFnZW1lbnRcbmltcG9ydCBVdGlscyBmcm9tICcuLi91dGlscy91dGlscyc7XG5pbXBvcnQgc3Vic2NyaWJlTWl4aW4gZnJvbSAnLi4vdXRpbHMvc3Vic2NyaWJlJztcbmltcG9ydCBXb3JrZXJCcm9rZXIgZnJvbSAnLi4vdXRpbHMvd29ya2VyX2Jyb2tlcic7XG5pbXBvcnQgbG9nIGZyb20gJ2xvZ2xldmVsJztcblxuLy8gR0wgdGV4dHVyZSB3cmFwcGVyIG9iamVjdCBmb3Iga2VlcGluZyB0cmFjayBvZiBhIGdsb2JhbCBzZXQgb2YgdGV4dHVyZXMsIGtleWVkIGJ5IGEgdW5pcXVlIHVzZXItZGVmaW5lZCBuYW1lXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0dXJlIHtcblxuICAgIGNvbnN0cnVjdG9yKGdsLCBuYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5nbCA9IGdsO1xuICAgICAgICB0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgIGlmICh0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmluZCgpO1xuXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMucmV0YWluX2NvdW50ID0gMDtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICAgICAgICB0aGlzLnNvdXJjZV90eXBlID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb25maWdfdHlwZSA9IG51bGw7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IG51bGw7ICAgIC8vIGEgUHJvbWlzZSBvYmplY3QgdG8gdHJhY2sgdGhlIGxvYWRpbmcgc3RhdGUgb2YgdGhpcyB0ZXh0dXJlXG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7ICAgIC8vIHN1Y2Nlc3NmdWxseSBsb2FkZWQgYXMgZXhwZWN0ZWRcbiAgICAgICAgdGhpcy5maWx0ZXJpbmcgPSBvcHRpb25zLmZpbHRlcmluZztcbiAgICAgICAgdGhpcy5zcHJpdGVzID0gb3B0aW9ucy5zcHJpdGVzO1xuICAgICAgICB0aGlzLnRleGNvb3JkcyA9IHt9OyAgICAvLyBzcHJpdGUgVVZzIChbMCwgMV0gcmFuZ2UpXG4gICAgICAgIHRoaXMuc2l6ZXMgPSB7fTsgICAgICAgIC8vIHNwcml0ZSBzaXplcyAocGl4ZWwgc2l6ZSlcblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGEgMS1waXhlbCBibGFjayB0ZXh0dXJlIHNvIHdlIGNhbiBzYWZlbHkgcmVuZGVyIHdoaWxlIHdlIHdhaXQgZm9yIGFuIGltYWdlIHRvIGxvYWRcbiAgICAgICAgLy8gU2VlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE5NzIyMjQ3L3dlYmdsLXdhaXQtZm9yLXRleHR1cmUtdG8tbG9hZFxuICAgICAgICB0aGlzLnNldERhdGEoMSwgMSwgbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDI1NV0pLCB7IGZpbHRlcmluZzogJ25lYXJlc3QnIH0pO1xuXG4gICAgICAgIC8vIERlc3Ryb3kgcHJldmlvdXMgdGV4dHVyZSBpZiBwcmVzZW50XG4gICAgICAgIGlmIChUZXh0dXJlLnRleHR1cmVzW3RoaXMubmFtZV0pIHtcbiAgICAgICAgICAgIC8vIFByZXNlcnZlIHByZXZpb3VzIHJldGFpbiBjb3VudFxuICAgICAgICAgICAgdGhpcy5yZXRhaW5fY291bnQgPSBUZXh0dXJlLnRleHR1cmVzW3RoaXMubmFtZV0ucmV0YWluX2NvdW50O1xuICAgICAgICAgICAgVGV4dHVyZS50ZXh0dXJlc1t0aGlzLm5hbWVdLnJldGFpbl9jb3VudCA9IDA7IC8vIGFsbG93IHRvIGJlIGZyZWVkXG4gICAgICAgICAgICBUZXh0dXJlLnRleHR1cmVzW3RoaXMubmFtZV0uZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FjaGUgdGV4dHVyZSBpbnN0YW5jZSBhbmQgZGVmaW5pdGlvblxuICAgICAgICBUZXh0dXJlLnRleHR1cmVzW3RoaXMubmFtZV0gPSB0aGlzO1xuICAgICAgICBUZXh0dXJlLnRleHR1cmVfY29uZmlnc1t0aGlzLm5hbWVdID0gT2JqZWN0LmFzc2lnbih7IG5hbWUgfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5sb2FkKG9wdGlvbnMpO1xuICAgICAgICBsb2cudHJhY2UoYGNyZWF0aW5nIFRleHR1cmUgJHt0aGlzLm5hbWV9YCk7XG4gICAgfVxuXG4gICAgLy8gRGVzdHJveSBhIHNpbmdsZSB0ZXh0dXJlIGluc3RhbmNlXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmV0YWluX2NvdW50ID4gMCkge1xuICAgICAgICAgICAgbG9nLmVycm9yKGBUZXh0dXJlICcke3RoaXMubmFtZX0nOiBkZXN0cm95aW5nIHRleHR1cmUgd2l0aCByZXRhaW4gY291bnQgb2YgJyR7dGhpcy5yZXRhaW5fY291bnR9J2ApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG4gICAgICAgIHRoaXMudGV4dHVyZSA9IG51bGw7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmRhdGE7XG4gICAgICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgICAgIGRlbGV0ZSBUZXh0dXJlLnRleHR1cmVzW3RoaXMubmFtZV07XG4gICAgICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcbiAgICAgICAgbG9nLnRyYWNlKGBkZXN0cm95aW5nIFRleHR1cmUgJHt0aGlzLm5hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0YWluICgpIHtcbiAgICAgICAgdGhpcy5yZXRhaW5fY291bnQrKztcbiAgICB9XG5cbiAgICByZWxlYXNlICgpIHtcbiAgICAgICAgaWYgKHRoaXMucmV0YWluX2NvdW50IDw9IDApIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcihgVGV4dHVyZSAnJHt0aGlzLm5hbWV9JzogcmVsZWFzaW5nIHRleHR1cmUgd2l0aCByZXRhaW4gY291bnQgb2YgJyR7dGhpcy5yZXRhaW5fY291bnR9J2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXRhaW5fY291bnQtLTtcbiAgICAgICAgaWYgKHRoaXMucmV0YWluX2NvdW50IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmluZCh1bml0KSB7XG4gICAgICAgIGlmICghdGhpcy52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdW5pdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChUZXh0dXJlLmFjdGl2ZVVuaXQgIT09IHVuaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdsLmFjdGl2ZVRleHR1cmUodGhpcy5nbC5URVhUVVJFMCArIHVuaXQpO1xuICAgICAgICAgICAgICAgIFRleHR1cmUuYWN0aXZlVW5pdCA9IHVuaXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRleHR1cmUuYWN0aXZlVGV4dHVyZSAhPT0gdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLmdsLmJpbmRUZXh0dXJlKHRoaXMuZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcbiAgICAgICAgICAgIFRleHR1cmUuYWN0aXZlVGV4dHVyZSA9IHRoaXMudGV4dHVyZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWQob3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmcgfHwgUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gbnVsbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnX3R5cGUgPSAndXJsJztcbiAgICAgICAgICAgIHRoaXMuc2V0VXJsKG9wdGlvbnMudXJsLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnX3R5cGUgPSAnZWxlbWVudCc7XG4gICAgICAgICAgICB0aGlzLnNldEVsZW1lbnQob3B0aW9ucy5lbGVtZW50LCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy53aWR0aCAmJiBvcHRpb25zLmhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5jb25maWdfdHlwZSA9ICdkYXRhJztcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YShvcHRpb25zLndpZHRoLCBvcHRpb25zLmhlaWdodCwgb3B0aW9ucy5kYXRhLCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGluZyA9XG4gICAgICAgICAgICAodGhpcy5sb2FkaW5nICYmIHRoaXMubG9hZGluZy50aGVuKCgpID0+IHsgdGhpcy5jYWxjdWxhdGVTcHJpdGVzKCk7IHJldHVybiB0aGlzOyB9KSkgfHxcbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcbiAgICB9XG5cbiAgICAvLyBTZXRzIHRleHR1cmUgZnJvbSBhbiB1cmxcbiAgICBzZXRVcmwodXJsLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoVGV4dHVyZS5iYXNlX3VybCkge1xuICAgICAgICAgICAgdXJsID0gVXRpbHMuYWRkQmFzZVVSTCh1cmwsIFRleHR1cmUuYmFzZV91cmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cmwgPSBVdGlscy5jYWNoZUJ1c3RlckZvclVybCh1cmwpOyAvLyBzYXZlIFVSTCByZWZlcmVuY2UgKHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2hlbiBlbGVtZW50IGlzIGxvYWRlZCBiZWxvdylcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnVybDtcbiAgICAgICAgdGhpcy5zb3VyY2VfdHlwZSA9ICd1cmwnO1xuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGxldCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWxlbWVudChpbWFnZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKGBUZXh0dXJlICcke3RoaXMubmFtZX0nOiBmYWlsZWQgdG8gbG9hZCB1cmw6ICcke3RoaXMuc291cmNlfSdgLCBlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgVGV4dHVyZS50cmlnZ2VyKCd3YXJuaW5nJywgeyBtZXNzYWdlOiBgRmFpbGVkIHRvIGxvYWQgdGV4dHVyZSBmcm9tICR7dGhpcy5zb3VyY2V9YCwgZXJyb3I6IGUsIHRleHR1cmU6IG9wdGlvbnMgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaW1hZ2Uub25lcnJvciA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFdhcm4gYW5kIHJlc29sdmUgb24gZXJyb3JcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKGBUZXh0dXJlICcke3RoaXMubmFtZX0nOiBmYWlsZWQgdG8gbG9hZCB1cmw6ICcke3RoaXMuc291cmNlfSdgLCBlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBUZXh0dXJlLnRyaWdnZXIoJ3dhcm5pbmcnLCB7IG1lc3NhZ2U6IGBGYWlsZWQgdG8gbG9hZCB0ZXh0dXJlIGZyb20gJHt0aGlzLnNvdXJjZX1gLCBlcnJvcjogZSwgdGV4dHVyZTogb3B0aW9ucyB9KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XG4gICAgICAgICAgICBpbWFnZS5zcmMgPSB0aGlzLnNvdXJjZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmc7XG4gICAgfVxuXG4gICAgLy8gU2V0cyB0ZXh0dXJlIHRvIGEgcmF3IGltYWdlIGJ1ZmZlclxuICAgIHNldERhdGEod2lkdGgsIGhlaWdodCwgZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UgPSBkYXRhO1xuICAgICAgICB0aGlzLnNvdXJjZV90eXBlID0gJ2RhdGEnO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnNldEZpbHRlcmluZyhvcHRpb25zKTtcblxuICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IFByb21pc2UucmVzb2x2ZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSB0ZXh0dXJlIHRvIHRyYWNrIGEgZWxlbWVudCAoY2FudmFzL2ltYWdlKVxuICAgIHNldEVsZW1lbnQoZWxlbWVudCwgb3B0aW9ucykge1xuICAgICAgICBsZXQgZWwgPSBlbGVtZW50O1xuXG4gICAgICAgIC8vIGEgc3RyaW5nIGVsZW1lbnQgaXMgaW50ZXJwZXRlZCBhcyBhIENTUyBzZWxlY3RvclxuICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgfHxcbiAgICAgICAgICAgIGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8XG4gICAgICAgICAgICBlbGVtZW50IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBlbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VfdHlwZSA9ICdlbGVtZW50JztcblxuICAgICAgICAgICAgdGhpcy51cGRhdGUob3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLnNldEZpbHRlcmluZyhvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgbXNnID0gYHRoZSAnZWxlbWVudCcgcGFyYW1ldGVyIChcXGBlbGVtZW50OiAke0pTT04uc3RyaW5naWZ5KGVsKX1cXGApIG11c3QgYmUgYSBDU1MgYDtcbiAgICAgICAgICAgIG1zZyArPSBgc2VsZWN0b3Igc3RyaW5nLCBvciBhIDxjYW52YXM+LCA8aW1hZ2U+IG9yIDx2aWRlbz4gb2JqZWN0YDtcbiAgICAgICAgICAgIGxvZy53YXJuKGBUZXh0dXJlICcke3RoaXMubmFtZX0nOiAke21zZ31gLCBvcHRpb25zKTtcbiAgICAgICAgICAgIFRleHR1cmUudHJpZ2dlcignd2FybmluZycsIHsgbWVzc2FnZTogYEZhaWxlZCB0byBsb2FkIHRleHR1cmUgYmVjYXVzZSAke21zZ31gLCB0ZXh0dXJlOiBvcHRpb25zIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBQcm9taXNlLnJlc29sdmUodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmc7XG4gICAgfVxuXG4gICAgLy8gVXBsb2FkcyBjdXJyZW50IGltYWdlIG9yIGJ1ZmZlciB0byB0aGUgR1BVIChjYW4gYmUgdXNlZCB0byB1cGRhdGUgYW5pbWF0ZWQgdGV4dHVyZXMgb24gdGhlIGZseSlcbiAgICB1cGRhdGUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iaW5kKCk7XG4gICAgICAgIHRoaXMuZ2wucGl4ZWxTdG9yZWkodGhpcy5nbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCAob3B0aW9ucy5VTlBBQ0tfRkxJUF9ZX1dFQkdMID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSkpO1xuICAgICAgICB0aGlzLmdsLnBpeGVsU3RvcmVpKHRoaXMuZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCBvcHRpb25zLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB8fCBmYWxzZSk7XG5cbiAgICAgICAgLy8gSW1hZ2Ugb3IgQ2FudmFzIGVsZW1lbnRcbiAgICAgICAgaWYgKHRoaXMuc291cmNlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgfHwgdGhpcy5zb3VyY2UgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50IHx8XG4gICAgICAgICAgICAodGhpcy5zb3VyY2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50ICYmIHRoaXMuc291cmNlLmNvbXBsZXRlKSkge1xuXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc291cmNlLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuZ2wudGV4SW1hZ2UyRCh0aGlzLmdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZ2wuUkdCQSwgdGhpcy5nbC5SR0JBLCB0aGlzLmdsLlVOU0lHTkVEX0JZVEUsIHRoaXMuc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSYXcgaW1hZ2UgYnVmZmVyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc291cmNlX3R5cGUgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgdGhpcy5nbC50ZXhJbWFnZTJEKHRoaXMuZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5nbC5SR0JBLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgdGhpcy5nbC5SR0JBLCB0aGlzLmdsLlVOU0lHTkVEX0JZVEUsIHRoaXMuc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFRleHR1cmUudHJpZ2dlcigndXBkYXRlJywgdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lcyBhcHByb3ByaWF0ZSBmaWx0ZXJpbmcgbW9kZVxuICAgIHNldEZpbHRlcmluZyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLmZpbHRlcmluZyA9IG9wdGlvbnMuZmlsdGVyaW5nIHx8ICdsaW5lYXInO1xuXG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIHRoaXMuYmluZCgpO1xuXG4gICAgICAgIC8vIEZvciBwb3dlci1vZi0yIHRleHR1cmVzLCB0aGUgZm9sbG93aW5nIHByZXNldHMgYXJlIGF2YWlsYWJsZTpcbiAgICAgICAgLy8gbWlwbWFwOiBsaW5lYXIgYmxlbmQgZnJvbSBuZWFyZXN0IG1pcFxuICAgICAgICAvLyBsaW5lYXI6IGxpbmVhciBibGVuZCBmcm9tIG9yaWdpbmFsIGltYWdlIChubyBtaXBzKVxuICAgICAgICAvLyBuZWFyZXN0OiBuZWFyZXN0IHBpeGVsIGZyb20gb3JpZ2luYWwgaW1hZ2UgKG5vIG1pcHMsICdibG9ja3knIGxvb2spXG4gICAgICAgIGlmIChVdGlscy5pc1Bvd2VyT2YyKHRoaXMud2lkdGgpICYmIFV0aWxzLmlzUG93ZXJPZjIodGhpcy5oZWlnaHQpKSB7XG4gICAgICAgICAgICB0aGlzLnBvd2VyX29mXzIgPSB0cnVlO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgb3B0aW9ucy5URVhUVVJFX1dSQVBfUyB8fCAob3B0aW9ucy5yZXBlYXQgJiYgZ2wuUkVQRUFUKSB8fCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIG9wdGlvbnMuVEVYVFVSRV9XUkFQX1QgfHwgKG9wdGlvbnMucmVwZWF0ICYmIGdsLlJFUEVBVCkgfHwgZ2wuQ0xBTVBfVE9fRURHRSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbHRlcmluZyA9PT0gJ21pcG1hcCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmluZyA9ICdtaXBtYXAnO1xuICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5MSU5FQVJfTUlQTUFQX0xJTkVBUik7IC8vIFRPRE86IHVzZSB0cmlsaW5lYXIgZmlsdGVyaW5nIGJ5IGRlZnVhbHQgaW5zdGVhZD9cbiAgICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTElORUFSKTtcbiAgICAgICAgICAgICAgICBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuZmlsdGVyaW5nID09PSAnbGluZWFyJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyaW5nID0gJ2xpbmVhcic7XG4gICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLkxJTkVBUik7XG4gICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLkxJTkVBUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLmZpbHRlcmluZyA9PT0gJ25lYXJlc3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmcgPSAnbmVhcmVzdCc7XG4gICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLk5FQVJFU1QpO1xuICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlYkdMIGhhcyBzdHJpY3QgcmVxdWlyZW1lbnRzIG9uIG5vbi1wb3dlci1vZi0yIHRleHR1cmVzOlxuICAgICAgICAgICAgLy8gTm8gbWlwbWFwcyBhbmQgbXVzdCBjbGFtcCB0byBlZGdlXG4gICAgICAgICAgICB0aGlzLnBvd2VyX29mXzIgPSBmYWxzZTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbHRlcmluZyA9PT0gJ25lYXJlc3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmcgPSAnbmVhcmVzdCc7XG4gICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLk5FQVJFU1QpO1xuICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgeyAvLyBkZWZhdWx0IHRvIGxpbmVhciBmb3Igbm9uLXBvd2VyLW9mLTIgdGV4dHVyZXNcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmluZyA9ICdsaW5lYXInO1xuICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5MSU5FQVIpO1xuICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgVGV4dHVyZS50cmlnZ2VyKCd1cGRhdGUnLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBQcmUtY2FsYyBzcHJpdGUgcmVnaW9ucyBmb3IgYSB0ZXh0dXJlIHNwcml0ZSBpbiBVViBbMCwgMV0gc3BhY2VcbiAgICBjYWxjdWxhdGVTcHJpdGVzKCkge1xuICAgICAgICBpZiAodGhpcy5zcHJpdGVzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBzIGluIHRoaXMuc3ByaXRlcykge1xuICAgICAgICAgICAgICAgIGxldCBzcHJpdGUgPSB0aGlzLnNwcml0ZXNbc107XG5cbiAgICAgICAgICAgICAgICAvLyBNYXAgWzAsIDBdIHRvIFsxLCAxXSBjb29yZHMgdG8gdGhlIGFwcHJvcHJpYXRlIHNwcml0ZSBzdWItYXJlYSBvZiB0aGUgdGV4dHVyZVxuICAgICAgICAgICAgICAgIHRoaXMudGV4Y29vcmRzW3NdID0gVGV4dHVyZS5nZXRUZXhjb29yZHNGb3JTcHJpdGUoXG4gICAgICAgICAgICAgICAgICAgIFtzcHJpdGVbMF0sIHNwcml0ZVsxXV0sXG4gICAgICAgICAgICAgICAgICAgIFtzcHJpdGVbMl0sIHNwcml0ZVszXV0sXG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLndpZHRoLCB0aGlzLmhlaWdodF1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgLy8gUGl4ZWwgc2l6ZSBvZiBzcHJpdGVcbiAgICAgICAgICAgICAgICB0aGlzLnNpemVzW3NdID0gW3Nwcml0ZVsyXSwgc3ByaXRlWzNdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbi8vIFN0YXRpYy9jbGFzcyBtZXRob2RzIGFuZCBzdGF0ZVxuXG5UZXh0dXJlLmNyZWF0ZSA9IGZ1bmN0aW9uIChnbCwgbmFtZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShnbCwgbmFtZSwgb3B0aW9ucyk7XG59O1xuXG5UZXh0dXJlLnJldGFpbiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKFRleHR1cmUudGV4dHVyZXNbbmFtZV0pIHtcbiAgICAgICAgVGV4dHVyZS50ZXh0dXJlc1tuYW1lXS5yZXRhaW4oKTtcbiAgICB9XG59O1xuXG5UZXh0dXJlLnJlbGVhc2UgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmIChUZXh0dXJlLnRleHR1cmVzW25hbWVdKSB7XG4gICAgICAgIFRleHR1cmUudGV4dHVyZXNbbmFtZV0ucmVsZWFzZSgpO1xuICAgIH1cbn07XG5cbi8vIERlc3Ryb3kgYWxsIHRleHR1cmUgaW5zdGFuY2VzIGZvciBhIGdpdmVuIEdMIGNvbnRleHRcblRleHR1cmUuZGVzdHJveSA9IGZ1bmN0aW9uIChnbCkge1xuICAgIHZhciB0ZXh0dXJlcyA9IE9iamVjdC5rZXlzKFRleHR1cmUudGV4dHVyZXMpO1xuICAgIGZvciAodmFyIHQgb2YgdGV4dHVyZXMpIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLnRleHR1cmVzW3RdO1xuICAgICAgICBpZiAodGV4dHVyZS5nbCA9PT0gZ2wpIHtcbiAgICAgICAgICAgIHRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLy8gR2V0IHNwcml0ZSBwaXhlbCBzaXplIGFuZCBVVnNcblRleHR1cmUuZ2V0U3ByaXRlSW5mbyA9IGZ1bmN0aW9uICh0ZXhuYW1lLCBzcHJpdGUpIHtcbiAgICBsZXQgdGV4dHVyZSA9IFRleHR1cmUudGV4dHVyZXNbdGV4bmFtZV07XG4gICAgcmV0dXJuIHRleHR1cmUgJiYgeyBzaXplOiB0ZXh0dXJlLnNpemVzW3Nwcml0ZV0sIHRleGNvb3JkczogdGV4dHVyZS50ZXhjb29yZHNbc3ByaXRlXSB9O1xufTtcblxuLy8gUmUtc2NhbGUgVVZzIGZyb20gWzAsIDFdIHJhbmdlIHRvIGEgc21hbGxlciBhcmVhIHdpdGhpbiB0aGUgaW1hZ2VcblRleHR1cmUuZ2V0VGV4Y29vcmRzRm9yU3ByaXRlID0gZnVuY3Rpb24gKGFyZWFfb3JpZ2luLCBhcmVhX3NpemUsIHRleF9zaXplKSB7XG4gICAgdmFyIGFyZWFfb3JpZ2luX3kgPSB0ZXhfc2l6ZVsxXSAtIGFyZWFfb3JpZ2luWzFdIC0gYXJlYV9zaXplWzFdO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgYXJlYV9vcmlnaW5bMF0gLyB0ZXhfc2l6ZVswXSxcbiAgICAgICAgYXJlYV9vcmlnaW5feSAvIHRleF9zaXplWzFdLFxuICAgICAgICAoYXJlYV9zaXplWzBdICsgYXJlYV9vcmlnaW5bMF0pIC8gdGV4X3NpemVbMF0sXG4gICAgICAgIChhcmVhX3NpemVbMV0gKyBhcmVhX29yaWdpbl95KSAvIHRleF9zaXplWzFdXG4gICAgXTtcbn07XG5cbi8vIENyZWF0ZSBhIHNldCBvZiB0ZXh0dXJlcyBrZXllZCBpbiBhbiBvYmplY3Rcbi8vIE9wdGlvbmFsbHkgbG9hZCBlYWNoIGlmIGl0IGhhcyBhIFVSTCBzcGVjaWZpZWRcblRleHR1cmUuY3JlYXRlRnJvbU9iamVjdCA9IGZ1bmN0aW9uIChnbCwgdGV4dHVyZXMpIHtcbiAgICBsZXQgbG9hZGluZyA9IFtdO1xuICAgIGlmICh0ZXh0dXJlcykge1xuICAgICAgICBmb3IgKGxldCB0ZXhuYW1lIGluIHRleHR1cmVzKSB7XG4gICAgICAgICAgICBsZXQgY29uZmlnID0gdGV4dHVyZXNbdGV4bmFtZV07XG5cbiAgICAgICAgICAgIC8vIElmIHRleHR1cmUgYWxyZWFkeSBleGlzdHMgYW5kIGRlZmluaXRpb24gaGFzbid0IGNoYW5nZWQsIG5vIG5lZWQgdG8gcmUtY3JlYXRlXG4gICAgICAgICAgICAvLyBOb3RlOiB0byBhdm9pZCBmbGlja2VyIHdoZW4gb3RoZXIgdGV4dHVyZXMvc2NlbmUgaXRlbXMgY2hhbmdlXG4gICAgICAgICAgICBpZiAoIVRleHR1cmUuY2hhbmdlZCh0ZXhuYW1lLCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB0ZXh0dXJlID0gVGV4dHVyZS5jcmVhdGUoZ2wsIHRleG5hbWUsIGNvbmZpZyk7XG4gICAgICAgICAgICBsb2FkaW5nLnB1c2godGV4dHVyZS5sb2FkaW5nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwobG9hZGluZyk7XG59O1xuXG4vLyBJbmRpY2F0ZSBpZiBhIHRleHR1cmUgZGVmaW5pdGlvbiB3b3VsZCBiZSBhIGNoYW5nZSBmcm9tIHRoZSBjdXJyZW50IGNhY2hlXG5UZXh0dXJlLmNoYW5nZWQgPSBmdW5jdGlvbiAobmFtZSwgY29uZmlnKSB7XG4gICAgbGV0IHRleHR1cmUgPSBUZXh0dXJlLnRleHR1cmVzW25hbWVdO1xuICAgIGlmICh0ZXh0dXJlKSB7IC8vIGNhY2hlZCB0ZXh0dXJlXG4gICAgICAgIC8vIGNhbnZhcy9pbWFnZS1iYXNlZCB0ZXh0dXJlcyBhcmUgY29uc2lkZXJlZCBkeW5hbWljIGFuZCBhbHdheXMgcmVmcmVzaFxuICAgICAgICBpZiAodGV4dHVyZS5jb25maWdfdHlwZSA9PT0gJ2VsZW1lbnQnIHx8IGNvbmZpZy5lbGVtZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29tcGFyZSBkZWZpbml0aW9uc1xuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoVGV4dHVyZS50ZXh0dXJlX2NvbmZpZ3NbbmFtZV0pID09PVxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmFzc2lnbih7IG5hbWUgfSwgY29uZmlnKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vIEdldCBtZXRhZGF0YSBmb3IgYSB0ZXh0dXJlIGJ5IG5hbWVcbi8vIFJldHVybnMgdmlhIHByb21pc2UsIGluIGNhc2UgdGV4dHVyZSBpcyBzdGlsbCBsb2FkaW5nXG4vLyBDYW4gYmUgY2FsbGVkIG9uIG1haW4gdGhyZWFkIGZyb20gd29ya2VyLCB0byBzeW5jIHRleHR1cmUgaW5mbyB0byB3b3JrZXJcblRleHR1cmUuZ2V0SW5mbyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgLy8gR2V0IGluZm8gZm9yIGFsbCB0ZXh0dXJlcyBieSBkZWZhdWx0XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIG5hbWUgPSBPYmplY3Qua2V5cyhUZXh0dXJlLnRleHR1cmVzKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShuYW1lKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobmFtZS5tYXAobiA9PiBUZXh0dXJlLmdldEluZm8obikpKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgc2luZ2xlIHRleHR1cmVcbiAgICB2YXIgdGV4ID0gVGV4dHVyZS50ZXh0dXJlc1tuYW1lXTtcbiAgICBpZiAodGV4KSB7XG4gICAgICAgIC8vIFdhaXQgZm9yIHRoaXMgdGV4dHVyZSB0byBmaW5pc2ggbG9hZGluZywgb3IgcmV0dXJuIGltbWVkaWF0ZWx5XG4gICAgICAgIHZhciBsb2FkaW5nID0gdGV4LmxvYWRpbmcgfHwgUHJvbWlzZS5yZXNvbHZlKHRleCk7XG4gICAgICAgIHJldHVybiBsb2FkaW5nLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gUmV0dXJuIGEgc3Vic2V0IG9mIHRleHR1cmUgaW5mb1xuICAgICAgICAgICAgLy8gKGNvbXBhdGlibGUgdy9zdHJ1Y3R1cmVkIGNsb25pbmcsIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGEgd29ya2VyKVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0ZXgubmFtZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogdGV4LndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogdGV4LmhlaWdodCxcbiAgICAgICAgICAgICAgICBzcHJpdGVzOiB0ZXguc3ByaXRlcyxcbiAgICAgICAgICAgICAgICB0ZXhjb29yZHM6IHRleC50ZXhjb29yZHMsXG4gICAgICAgICAgICAgICAgc2l6ZXM6IHRleC5zaXplcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJpbmc6IHRleC5maWx0ZXJpbmcsXG4gICAgICAgICAgICAgICAgcG93ZXJfb2ZfMjogdGV4LnBvd2VyX29mXzIsXG4gICAgICAgICAgICAgICAgdmFsaWQ6IHRleC52YWxpZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBObyB0ZXh0dXJlIGZvdW5kXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxufTtcblxuLy8gU3luYyB0ZXh0dXJlIGluZm8gdG8gd29ya2VyXG4vLyBDYWxsZWQgZnJvbSB3b3JrZXIsIGdldHMgaW5mbyBvbiBvbmUgb3IgbW9yZSB0ZXh0dXJlcyBpbmZvIGZyb20gbWFpbiB0aHJlYWQgdmlhIHJlbW90ZSBjYWxsLCB0aGVuIHN0b3JlcyBpdFxuLy8gbG9jYWxseSBpbiB3b3JrZXIuICd0ZXh0dXJlcycgY2FuIGJlIGFuIGFycmF5IG9mIHRleHR1cmUgbmFtZXMgdG8gc3luYywgb3IgaWYgbnVsbCwgYWxsIHRleHR1cmVzIGFyZSBzeW5jZWQuXG5UZXh0dXJlLnN5bmNUZXh0dXJlc1RvV29ya2VyID0gZnVuY3Rpb24gKG5hbWVzKSB7XG4gICAgcmV0dXJuIFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSgnVGV4dHVyZS5nZXRJbmZvJywgbmFtZXMpLlxuICAgICAgICB0aGVuKHRleHR1cmVzID0+IHtcbiAgICAgICAgICAgIGZvciAodmFyIHRleCBvZiB0ZXh0dXJlcykge1xuICAgICAgICAgICAgICAgIFRleHR1cmUudGV4dHVyZXNbdGV4Lm5hbWVdID0gdGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFRleHR1cmUudGV4dHVyZXM7XG4gICAgICAgIH0pO1xufTtcblxuLy8gUmVwb3J0IG1heCB0ZXh0dXJlIHNpemUgZm9yIGEgR0wgY29udGV4dFxuVGV4dHVyZS5nZXRNYXhUZXh0dXJlU2l6ZSA9IGZ1bmN0aW9uIChnbCkge1xuICAgIHJldHVybiBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfU0laRSk7XG59O1xuXG4vLyBHbG9iYWwgc2V0IG9mIHRleHR1cmVzLCBieSBuYW1lXG5UZXh0dXJlLnRleHR1cmVzID0ge307XG5UZXh0dXJlLnRleHR1cmVfY29uZmlncyA9IHt9O1xuVGV4dHVyZS5ib3VuZFRleHR1cmUgPSAtMTtcblRleHR1cmUuYWN0aXZlVW5pdCA9IC0xO1xuXG5UZXh0dXJlLmJhc2VfdXJsID0gbnVsbDsgLy8gb3B0aW9uYWwgYmFzZSBVUkwgdG8gYWRkIHRvIHRleHR1cmVzXG5cbldvcmtlckJyb2tlci5hZGRUYXJnZXQoJ1RleHR1cmUnLCBUZXh0dXJlKTtcbnN1YnNjcmliZU1peGluKFRleHR1cmUpO1xuIiwiLy8gQ3JlYXRlcyBhIFZlcnRleCBBcnJheSBPYmplY3QgaWYgdGhlIGV4dGVuc2lvbiBpcyBhdmFpbGFibGUsIG9yIGZhbGxzIGJhY2sgb24gc3RhbmRhcmQgYXR0cmlidXRlIGNhbGxzXG5cbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG52YXIgVmVydGV4QXJyYXlPYmplY3Q7XG5leHBvcnQgZGVmYXVsdCBWZXJ0ZXhBcnJheU9iamVjdCA9IHt9O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5kaXNhYmxlZCA9IGZhbHNlOyAvLyBzZXQgdG8gdHJ1ZSB0byBkaXNhYmxlIFZBT3MgZXZlbiBpZiBleHRlbnNpb24gaXMgYXZhaWxhYmxlXG5WZXJ0ZXhBcnJheU9iamVjdC5ib3VuZF92YW8gPSBudWxsOyAvLyBjdXJyZW50bHkgYm91bmQgVkFPXG5cblZlcnRleEFycmF5T2JqZWN0LmluaXQgPSBmdW5jdGlvbiAoZ2wpIHtcbiAgICBpZiAoVmVydGV4QXJyYXlPYmplY3QuZXh0ID09IG51bGwpIHtcbiAgICAgICAgaWYgKFZlcnRleEFycmF5T2JqZWN0LmRpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBWZXJ0ZXhBcnJheU9iamVjdC5leHQgPSBnbC5nZXRFeHRlbnNpb24oXCJPRVNfdmVydGV4X2FycmF5X29iamVjdFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChWZXJ0ZXhBcnJheU9iamVjdC5leHQgIT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nLmluZm8oJ1ZlcnRleCBBcnJheSBPYmplY3QgZXh0ZW5zaW9uIGF2YWlsYWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFZlcnRleEFycmF5T2JqZWN0LmRpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBsb2cud2FybignVmVydGV4IEFycmF5IE9iamVjdCBleHRlbnNpb24gTk9UIGF2YWlsYWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbG9nLndhcm4oJ1ZlcnRleCBBcnJheSBPYmplY3QgZXh0ZW5zaW9uIGZvcmNlIGRpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoc2V0dXAsIHRlYXJkb3duKSB7XG4gICAgbGV0IHZhbyA9IHt9O1xuICAgIHZhby5zZXR1cCA9IHNldHVwO1xuICAgIHZhby50ZWFyZG93biA9IHRlYXJkb3duO1xuXG4gICAgbGV0IGV4dCA9IFZlcnRleEFycmF5T2JqZWN0LmV4dDtcbiAgICBpZiAoZXh0ICE9IG51bGwpIHtcbiAgICAgICAgdmFvLl92YW8gPSBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTtcbiAgICAgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8uX3Zhbyk7XG4gICAgfVxuXG4gICAgdmFvLnNldHVwKHRydWUpO1xuXG4gICAgcmV0dXJuIHZhbztcbn07XG5cblZlcnRleEFycmF5T2JqZWN0LmJpbmQgPSBmdW5jdGlvbiAodmFvKSB7XG4gICAgbGV0IGV4dCA9IFZlcnRleEFycmF5T2JqZWN0LmV4dDtcbiAgICBpZiAodmFvICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGV4dCAhPSBudWxsICYmIHZhby5fdmFvICE9IG51bGwpIHtcbiAgICAgICAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvLl92YW8pO1xuICAgICAgICAgICAgVmVydGV4QXJyYXlPYmplY3QuYm91bmRfdmFvID0gdmFvO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFvLnNldHVwKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGV4dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFZlcnRleEFycmF5T2JqZWN0LmJvdW5kX3ZhbyAhPSBudWxsICYmIHR5cGVvZiBWZXJ0ZXhBcnJheU9iamVjdC5ib3VuZF92YW8udGVhcmRvd24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIFZlcnRleEFycmF5T2JqZWN0LmJvdW5kX3Zhby50ZWFyZG93bigpO1xuICAgICAgICB9XG4gICAgICAgIFZlcnRleEFycmF5T2JqZWN0LmJvdW5kX3ZhbyA9IG51bGw7XG4gICAgfVxufTtcbiIsIi8vIE1hbmFnZSByZW5kZXJpbmcgZm9yIHByaW1pdGl2ZXNcbmltcG9ydCBTaGFkZXJQcm9ncmFtIGZyb20gJy4vc2hhZGVyX3Byb2dyYW0nO1xuaW1wb3J0IFZlcnRleEFycmF5T2JqZWN0IGZyb20gJy4vdmFvJztcbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG4vLyBBIHNpbmdsZSBtZXNoL1ZCTywgZGVzY3JpYmVkIGJ5IGEgdmVydGV4IGxheW91dCwgdGhhdCBjYW4gYmUgZHJhd24gd2l0aCBvbmUgb3IgbW9yZSBwcm9ncmFtc1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVkJPTWVzaCAge1xuXG4gICAgY29uc3RydWN0b3IoZ2wsIHZlcnRleF9kYXRhLCB2ZXJ0ZXhfbGF5b3V0LCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuZ2wgPSBnbDtcbiAgICAgICAgdGhpcy52ZXJ0ZXhfZGF0YSA9IHZlcnRleF9kYXRhOyAvLyB0eXBlZCBhcnJheVxuICAgICAgICB0aGlzLnZlcnRleF9sYXlvdXQgPSB2ZXJ0ZXhfbGF5b3V0O1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIHRoaXMuZHJhd19tb2RlID0gb3B0aW9ucy5kcmF3X21vZGUgfHwgdGhpcy5nbC5UUklBTkdMRVM7XG4gICAgICAgIHRoaXMuZGF0YV91c2FnZSA9IG9wdGlvbnMuZGF0YV91c2FnZSB8fCB0aGlzLmdsLlNUQVRJQ19EUkFXO1xuICAgICAgICB0aGlzLnZlcnRpY2VzX3Blcl9nZW9tZXRyeSA9IDM7IC8vIFRPRE86IHN1cHBvcnQgbGluZXMsIHN0cmlwLCBmYW4sIGV0Yy5cbiAgICAgICAgdGhpcy51bmlmb3JtcyA9IG9wdGlvbnMudW5pZm9ybXM7XG4gICAgICAgIHRoaXMucmV0YWluID0gb3B0aW9ucy5yZXRhaW4gfHwgZmFsc2U7IC8vIHdoZXRoZXIgdG8gcmV0YWluIG1lc2ggZGF0YSBpbiBDUFUgYWZ0ZXIgdXBsb2FkaW5nIHRvIEdQVVxuXG4gICAgICAgIHRoaXMudmVydGV4X2NvdW50ID0gdGhpcy52ZXJ0ZXhfZGF0YS5ieXRlTGVuZ3RoIC8gdGhpcy52ZXJ0ZXhfbGF5b3V0LnN0cmlkZTtcbiAgICAgICAgdGhpcy5nZW9tZXRyeV9jb3VudCA9IHRoaXMudmVydGV4X2NvdW50IC8gdGhpcy52ZXJ0aWNlc19wZXJfZ2VvbWV0cnk7XG4gICAgICAgIHRoaXMudmFvcyA9IG5ldyBNYXAoKTsgLy8gbWFwIG9mIFZlcnRleEFycmF5T2JqZWN0cywga2V5ZWQgYnkgcHJvZ3JhbVxuXG4gICAgICAgIHRoaXMuZ2wuYmluZEJ1ZmZlcih0aGlzLmdsLkFSUkFZX0JVRkZFUiwgdGhpcy5idWZmZXIpO1xuICAgICAgICB0aGlzLmdsLmJ1ZmZlckRhdGEodGhpcy5nbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4X2RhdGEsIHRoaXMuZGF0YV91c2FnZSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnJldGFpbikge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMudmVydGV4X2RhdGE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyLCBieSBkZWZhdWx0IHdpdGggY3VycmVudGx5IGJvdW5kIHByb2dyYW0sIG9yIG90aGVyd2lzZSB3aXRoIG9wdGlvbmFsbHkgcHJvdmlkZWQgb25lXG4gICAgcmVuZGVyKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIXRoaXMudmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fcmVuZGVyX3NldHVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJfc2V0dXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcm9ncmFtID0gb3B0aW9ucy5wcm9ncmFtIHx8IFNoYWRlclByb2dyYW0uY3VycmVudDtcbiAgICAgICAgcHJvZ3JhbS51c2UoKTtcblxuICAgICAgICBpZiAodGhpcy51bmlmb3Jtcykge1xuICAgICAgICAgICAgcHJvZ3JhbS5zYXZlVW5pZm9ybXModGhpcy51bmlmb3Jtcyk7XG4gICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1zKHRoaXMudW5pZm9ybXMsIGZhbHNlKTsgLy8gZG9uJ3QgcmVzZXQgdGV4dHVyZSB1bml0XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJpbmQocHJvZ3JhbSk7XG5cbiAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBlbGVtZW50IGFycmF5IG1vZGVcbiAgICAgICAgdGhpcy5nbC5kcmF3QXJyYXlzKHRoaXMuZHJhd19tb2RlLCAwLCB0aGlzLnZlcnRleF9jb3VudCk7XG4gICAgICAgIFZlcnRleEFycmF5T2JqZWN0LmJpbmQobnVsbCk7XG5cbiAgICAgICAgaWYgKHRoaXMudW5pZm9ybXMpIHtcbiAgICAgICAgICAgIHByb2dyYW0ucmVzdG9yZVVuaWZvcm1zKHRoaXMudW5pZm9ybXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gQmluZCBidWZmZXJzIGFuZCB2ZXJ0ZXggYXR0cmlidXRlcyB0byBwcmVwYXJlIGZvciByZW5kZXJpbmdcbiAgICBiaW5kKHByb2dyYW0pIHtcbiAgICAgICAgLy8gQmluZCBWQU8gZm9yIHRoaXMgcHJvZ2FtLCBvciBjcmVhdGUgb25lXG4gICAgICAgIGxldCB2YW8gPSB0aGlzLnZhb3MuZ2V0KHByb2dyYW0pO1xuICAgICAgICBpZiAodmFvKSB7XG4gICAgICAgICAgICBWZXJ0ZXhBcnJheU9iamVjdC5iaW5kKHZhbyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhb3Muc2V0KHByb2dyYW0sIFZlcnRleEFycmF5T2JqZWN0LmNyZWF0ZSgoZm9yY2UpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy5nbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcnRleF9sYXlvdXQuZW5hYmxlKHRoaXMuZ2wsIHByb2dyYW0sIGZvcmNlKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghdGhpcy52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgICAgICBsb2cudHJhY2UoJ1ZCT01lc2guZGVzdHJveTogZGVsZXRlIGJ1ZmZlcicgKyAodGhpcy52ZXJ0ZXhfZGF0YSA/IGAgb2Ygc2l6ZSAke3RoaXMudmVydGV4X2RhdGEuYnl0ZUxlbmd0aH1gIDogJycpKTtcblxuICAgICAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICAgICAgZGVsZXRlIHRoaXMudmVydGV4X2RhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgZ2wgZnJvbSAnLi9jb25zdGFudHMnOyAvLyB3ZWIgd29ya2VycyBkb24ndCBoYXZlIGFjY2VzcyB0byBHTCBjb250ZXh0LCBzbyBpbXBvcnQgYWxsIEdMIGNvbnN0YW50c1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuLy8gTWFwcyBHTCB0eXBlcyB0byBKUyBhcnJheSB0eXBlc1xubGV0IGFycmF5X3R5cGVzID0ge1xuICAgIFtnbC5GTE9BVF06IEZsb2F0MzJBcnJheSxcbiAgICBbZ2wuQllURV06IEludDhBcnJheSxcbiAgICBbZ2wuVU5TSUdORURfQllURV06IFVpbnQ4QXJyYXksXG4gICAgW2dsLklOVF06IEludDMyQXJyYXksXG4gICAgW2dsLlVOU0lHTkVEX0lOVF06IFVpbnQzMkFycmF5LFxuICAgIFtnbC5TSE9SVF06IEludDE2QXJyYXksXG4gICAgW2dsLlVOU0lHTkVEX1NIT1JUXTogVWludDE2QXJyYXlcbn07XG5cbi8vIEFuIGludGVybWVkaWFyeSBvYmplY3QgdGhhdCBob2xkcyB2ZXJ0ZXggZGF0YSBpbiB0eXBlZCBhcnJheXMsIGFjY29yZGluZyB0byBhIGdpdmVuIHZlcnRleCBsYXlvdXRcbi8vIFVzZWQgdG8gY29uc3RydWN0IGEgbWVzaC9WQk8gZm9yIHJlbmRlcmluZ1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVydGV4RGF0YSB7XG5cbiAgICBjb25zdHJ1Y3RvciAodmVydGV4X2xheW91dCwgeyBwcmVhbGxvYyB9ID0ge30pIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhfbGF5b3V0ID0gdmVydGV4X2xheW91dDtcblxuICAgICAgICBpZiAoVmVydGV4RGF0YS5hcnJheV9wb29sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gVmVydGV4RGF0YS5hcnJheV9wb29sLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5idWZmZXJfbGVuZ3RoID0gdGhpcy5idWZmZXIuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyX3NpemUgPSBNYXRoLmZsb29yKHRoaXMuYnVmZmVyX2xlbmd0aCAvIHRoaXMudmVydGV4X2xheW91dC5zdHJpZGUpO1xuICAgICAgICAgICAgbG9nKCd0cmFjZScsIGBWZXJ0ZXhEYXRhOiByZXVzZWQgYnVmZmVyIG9mIGJ5dGVzICR7dGhpcy5idWZmZXJfbGVuZ3RofSwgJHt0aGlzLmJ1ZmZlcl9zaXplfSB2ZXJ0aWNlc2ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5idWZmZXJfc2l6ZSA9IHByZWFsbG9jIHx8IDUwMDsgLy8gIyBvZiB2ZXJ0aWNlcyB0byBhbGxvY2F0ZVxuICAgICAgICAgICAgdGhpcy5idWZmZXJfbGVuZ3RoID0gdGhpcy52ZXJ0ZXhfbGF5b3V0LnN0cmlkZSAqIHRoaXMuYnVmZmVyX3NpemU7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyX2xlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWZmZXJfb2Zmc2V0ID0gMDsgICAgICAgICAgICAgLy8gYnl0ZSBvZmZzZXQgaW50byBjdXJyZW50bHkgYWxsb2NhdGVkIGJ1ZmZlclxuXG4gICAgICAgIHRoaXMuY29tcG9uZW50cyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBjb21wb25lbnQgb2YgdGhpcy52ZXJ0ZXhfbGF5b3V0LmNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50cy5wdXNoKFsuLi5jb21wb25lbnRdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZlcnRleF9jb3VudCA9IDA7XG4gICAgICAgIHRoaXMucmVhbGxvY19jb3VudCA9IDA7XG4gICAgICAgIHRoaXMuc2V0QnVmZmVyVmlld3MoKTtcbiAgICB9XG5cbiAgICAvLyAoUmUtKWFsbG9jYXRlIHR5cGVkIHZpZXdzIGludG8gdGhlIG1haW4gYnVmZmVyIC0gb25seSBjcmVhdGUgdGhlIHR5cGVzIHdlIG5lZWQgZm9yIHRoaXMgbGF5b3V0XG4gICAgc2V0QnVmZmVyVmlld3MgKCkge1xuICAgICAgICB0aGlzLmJ1ZmZlcl92aWV3cyA9IHt9O1xuICAgICAgICB0aGlzLmJ1ZmZlcl92aWV3c1tnbC5VTlNJR05FRF9CWVRFXSA9IHRoaXMuYnVmZmVyO1xuICAgICAgICBmb3IgKHZhciBhdHRyaWIgb2YgdGhpcy52ZXJ0ZXhfbGF5b3V0LmF0dHJpYnMpIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdmlldyBmb3IgdGhpcyB0eXBlP1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVmZmVyX3ZpZXdzW2F0dHJpYi50eXBlXSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFycmF5X3R5cGUgPSBhcnJheV90eXBlc1thdHRyaWIudHlwZV07XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXJfdmlld3NbYXR0cmliLnR5cGVdID0gbmV3IGFycmF5X3R5cGUodGhpcy5idWZmZXIuYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBjb21wb25lbnQgYnVmZmVyIHBvaW50ZXJzXG4gICAgICAgIGZvciAodmFyIGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFsxXSA9IHRoaXMuYnVmZmVyX3ZpZXdzW2NvbXBvbmVudFswXV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBhbGxvY2F0ZWQgYnVmZmVyIHNpemUsIGV4cGFuZC9yZWFsbG9jIGJ1ZmZlciBpZiBuZWVkZWRcbiAgICBjaGVja0J1ZmZlclNpemUgKCkge1xuICAgICAgICBpZiAoKHRoaXMuYnVmZmVyX29mZnNldCArIHRoaXMudmVydGV4X2xheW91dC5zdHJpZGUpID4gdGhpcy5idWZmZXJfbGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlcl9zaXplID0gTWF0aC5mbG9vcih0aGlzLmJ1ZmZlcl9zaXplICogMS41KTtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyX3NpemUgLT0gdGhpcy5idWZmZXJfc2l6ZSAlIDQ7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlcl9sZW5ndGggPSB0aGlzLnZlcnRleF9sYXlvdXQuc3RyaWRlICogdGhpcy5idWZmZXJfc2l6ZTtcbiAgICAgICAgICAgIHZhciBuZXdfdmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyX2xlbmd0aCk7XG4gICAgICAgICAgICBuZXdfdmlldy5zZXQodGhpcy5idWZmZXIpOyAvLyBjb3B5IGV4aXN0aW5nIGRhdGEgdG8gbmV3IGJ1ZmZlclxuICAgICAgICAgICAgVmVydGV4RGF0YS5hcnJheV9wb29sLnB1c2godGhpcy5idWZmZXIpOyAvLyBzYXZlIHByZXZpb3VzIGJ1ZmZlciBmb3IgdXNlIGJ5IG5leHQgdGlsZVxuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXdfdmlldztcbiAgICAgICAgICAgIHRoaXMuc2V0QnVmZmVyVmlld3MoKTtcbiAgICAgICAgICAgIHRoaXMucmVhbGxvY19jb3VudCsrO1xuICAgICAgICAgICAgLy8gbG9nLmluZm8oYFZlcnRleERhdGE6IGV4cGFuZGVkIHZlcnRleCBibG9jayB0byAke3RoaXMuYnVmZmVyX3NpemV9IHZlcnRpY2VzYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYSB2ZXJ0ZXgsIGNvcGllZCBmcm9tIGEgcGxhaW4gSlMgYXJyYXkgb2YgZWxlbWVudHMgbWF0Y2hpbmcgdGhlIG9yZGVyIG9mIHRoZSB2ZXJ0ZXggbGF5b3V0LlxuICAgIC8vIE5vdGU6IHVzZXMgcHJlLWNhbGN1bGF0ZWQgaW5mbyBhYm91dCBlYWNoIGF0dHJpYnV0ZSwgaW5jbHVkaW5nIHBvaW50ZXIgdG8gYXBwcm9wcmlhdGUgdHlwZWQgYXJyYXlcbiAgICAvLyB2aWV3IGFuZCBvZmZzZXQgaW50byBpdC4gVGhpcyB3YXMgdGhlIGZhc3Rlc3QgbWV0aG9kIHByb2ZpbGVkIHNvIGZhciBmb3IgZmlsbGluZyBhIG1peGVkLXR5cGVcbiAgICAvLyB2ZXJ0ZXggbGF5b3V0ICh0aG91Z2ggc3RpbGwgc2xvd2VyIHRoYW4gdGhlIHByZXZpb3VzIG1ldGhvZCB0aGF0IG9ubHkgc3VwcG9ydGVkIEZsb2F0MzJBcnJheSBhdHRyaWJ1dGVzKS5cbiAgICBhZGRWZXJ0ZXggKHZlcnRleCkge1xuICAgICAgICB0aGlzLmNoZWNrQnVmZmVyU2l6ZSgpO1xuICAgICAgICB2YXIgaT0wO1xuXG4gICAgICAgIHZhciBjbGVuID0gdGhpcy5jb21wb25lbnRzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgYz0wOyBjIDwgY2xlbjsgYysrKSB7XG4gICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzW2NdO1xuICAgICAgICAgICAgY29tcG9uZW50WzFdWyh0aGlzLmJ1ZmZlcl9vZmZzZXQgPj4gY29tcG9uZW50WzJdKSArIGNvbXBvbmVudFszXV0gPSB2ZXJ0ZXhbaSsrXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVmZmVyX29mZnNldCArPSB0aGlzLnZlcnRleF9sYXlvdXQuc3RyaWRlO1xuICAgICAgICB0aGlzLnZlcnRleF9jb3VudCsrO1xuICAgIH1cblxuICAgIC8vIEZpbmFsaXplIHZlcnRleCBidWZmZXIgZm9yIHVzZSBpbiBjb25zdHJ1Y3RpbmcgYSBtZXNoXG4gICAgZW5kICgpIHtcbiAgICAgICAgLy8gQ2xpcCB0aGUgYnVmZmVyIHRvIHNpemUgdXNlZCBmb3IgdGhpcyBWQk9cbiAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmJ1ZmZlci5zdWJhcnJheSgwLCB0aGlzLmJ1ZmZlcl9vZmZzZXQpO1xuICAgICAgICBsb2coJ3RyYWNlJywgYFZlcnRleERhdGE6ICR7dGhpcy5idWZmZXJfc2l6ZX0gdmVydGljZXMgdG90YWwsIHJlYWxsb2MgY291bnQgJHt0aGlzLnJlYWxsb2NfY291bnR9YCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxufVxuXG5WZXJ0ZXhEYXRhLmFycmF5X3Bvb2wgPSBbXTsgLy8gcG9vbCBvZiBjdXJyZW50bHkgYXZhaWxhYmxlIChwcmV2aW91c2x5IHVzZWQpIGJ1ZmZlcnMgKHVpbnQ4KVxuIiwiaW1wb3J0IGdsIGZyb20gJy4vY29uc3RhbnRzJzsgLy8gd2ViIHdvcmtlcnMgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gR0wgY29udGV4dCwgc28gaW1wb3J0IGFsbCBHTCBjb25zdGFudHNcbmltcG9ydCBWZXJ0ZXhEYXRhIGZyb20gJy4vdmVydGV4X2RhdGEnO1xuXG4vLyBEZXNjcmliZXMgYSB2ZXJ0ZXggbGF5b3V0IHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBtYW55IGRpZmZlcmVudCBHTCBwcm9ncmFtcy5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnRleExheW91dCB7XG4gICAgLy8gQXR0cmlicyBhcmUgYW4gYXJyYXksIGluIGxheW91dCBvcmRlciwgb2Y6IG5hbWUsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWRcbiAgICAvLyBleDogeyBuYW1lOiAncG9zaXRpb24nLCBzaXplOiAzLCB0eXBlOiBnbC5GTE9BVCwgbm9ybWFsaXplZDogZmFsc2UgfVxuICAgIGNvbnN0cnVjdG9yIChhdHRyaWJzKSB7XG4gICAgICAgIHRoaXMuYXR0cmlicyA9IGF0dHJpYnM7IC8vIGRpY3Rpb25hcnkgb2YgYXR0cmlidXRlcywgc3BlY2lmaWVkIGFzIHN0YW5kYXJkIEdMIGF0dHJpYiBvcHRpb25zXG4gICAgICAgIHRoaXMuY29tcG9uZW50cyA9IFtdOyAgIC8vIGxpc3Qgb2YgdHlwZSBhbmQgb2Zmc2V0IGluZm8gYWJvdXQgZWFjaCBhdHRyaWJ1dGUgY29tcG9uZW50XG4gICAgICAgIHRoaXMuaW5kZXggPSB7fTsgICAgICAgIC8vIGxpbmVhciBidWZmZXIgaW5kZXggb2YgZWFjaCBhdHRyaWJ1dGUgY29tcG9uZW50LCBlLmcuIHRoaXMuaW5kZXgucG9zaXRpb24ueFxuXG4gICAgICAgIC8vIENhbGMgdmVydGV4IHN0cmlkZVxuICAgICAgICB0aGlzLnN0cmlkZSA9IDA7XG5cbiAgICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgICAgZm9yICh2YXIgYXR0cmliIG9mIHRoaXMuYXR0cmlicykge1xuICAgICAgICAgICAgYXR0cmliLm9mZnNldCA9IHRoaXMuc3RyaWRlO1xuICAgICAgICAgICAgYXR0cmliLmJ5dGVfc2l6ZSA9IGF0dHJpYi5zaXplO1xuICAgICAgICAgICAgdmFyIHNoaWZ0ID0gMDtcblxuICAgICAgICAgICAgc3dpdGNoIChhdHRyaWIudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgZ2wuRkxPQVQ6XG4gICAgICAgICAgICAgICAgY2FzZSBnbC5JTlQ6XG4gICAgICAgICAgICAgICAgY2FzZSBnbC5VTlNJR05FRF9JTlQ6XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYi5ieXRlX3NpemUgKj0gNDtcbiAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSAyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIGdsLlNIT1JUOlxuICAgICAgICAgICAgICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlQ6XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYi5ieXRlX3NpemUgKj0gMjtcbiAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSAxO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRm9yY2UgNC1ieXRlIGFsaWdubWVudCBvbiBhdHRyaWJ1dGVzXG4gICAgICAgICAgICB0aGlzLnN0cmlkZSArPSBhdHRyaWIuYnl0ZV9zaXplO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RyaWRlICYgMykgeyAvLyBwYWQgdG8gbXVsdGlwbGUgb2YgNCBieXRlc1xuICAgICAgICAgICAgICAgIHRoaXMuc3RyaWRlICs9IDQgLSAodGhpcy5zdHJpZGUgJiAzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIGluZm8gdG8gbGlzdCBvZiBhdHRyaWJ1dGUgY29tcG9uZW50c1xuICAgICAgICAgICAgLy8gVXNlZCB0byBidWlsZCB0aGUgdmVydGV4IGRhdGEsIHByb3ZpZGVzIHBvaW50ZXJzIGFuZCBvZmZzZXRzIGludG8gZWFjaCB0eXBlZCBhcnJheSB2aWV3XG4gICAgICAgICAgICAvLyBFYWNoIGNvbXBvbmVudCBpcyBhbiBhcnJheSBvZjpcbiAgICAgICAgICAgIC8vIFtHTCBhdHRyaWIgdHlwZSwgcG9pbnRlciB0byB0eXBlZCBhcnJheSB2aWV3LCBiaXRzIHRvIHNoaWZ0IHJpZ2h0IHRvIGRldGVybWluZSBidWZmZXIgb2Zmc2V0LCBhZGRpdGlvbmFsIGJ1ZmZlciBvZmZzZXQgZm9yIHRoZSBjb21wb25lbnRdXG4gICAgICAgICAgICB2YXIgb2Zmc2V0X3R5cGVkID0gYXR0cmliLm9mZnNldCA+PiBzaGlmdDtcbiAgICAgICAgICAgIGlmIChhdHRyaWIuc2l6ZSA+IDEpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhPTA7IGEgPCBhdHRyaWIuc2l6ZTsgYSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50cy5wdXNoKFthdHRyaWIudHlwZSwgbnVsbCwgc2hpZnQsIG9mZnNldF90eXBlZCsrXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzLnB1c2goW2F0dHJpYi50eXBlLCBudWxsLCBzaGlmdCwgb2Zmc2V0X3R5cGVkXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFByb3ZpZGUgYW4gaW5kZXggaW50byB0aGUgdmVydGV4IGRhdGEgYnVmZmVyIGZvciBlYWNoIGF0dHJpYnV0ZSBjb21wb25lbnRcbiAgICAgICAgICAgIHRoaXMuaW5kZXhbYXR0cmliLm5hbWVdID0gY291bnQ7XG4gICAgICAgICAgICBjb3VudCArPSBhdHRyaWIuc2l6ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHVwIGEgdmVydGV4IGxheW91dCBmb3IgYSBzcGVjaWZpYyBHTCBwcm9ncmFtXG4gICAgLy8gQXNzdW1lcyB0aGF0IHRoZSBkZXNpcmVkIHZlcnRleCBidWZmZXIgKFZCTykgaXMgYWxyZWFkeSBib3VuZFxuICAgIC8vIElmIGEgZ2l2ZW4gcHJvZ3JhbSBkb2Vzbid0IGluY2x1ZGUgYWxsIGF0dHJpYnV0ZXMsIGl0IGNhbiBzdGlsbCB1c2UgdGhlIHZlcnRleCBsYXlvdXRcbiAgICAvLyB0byByZWFkIHRob3NlIGF0dHJpYnMgdGhhdCBpdCBkb2VzIHJlY29nbml6ZSwgdXNpbmcgdGhlIGF0dHJpYiBvZmZzZXRzIHRvIHNraXAgb3RoZXJzLlxuICAgIGVuYWJsZSAoZ2wsIHByb2dyYW0sIGZvcmNlKVxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYiwgbG9jYXRpb247XG5cbiAgICAgICAgLy8gRW5hYmxlIGFsbCBhdHRyaWJ1dGVzIGZvciB0aGlzIGxheW91dFxuICAgICAgICBmb3IgKHZhciBhPTA7IGEgPCB0aGlzLmF0dHJpYnMubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICAgIGF0dHJpYiA9IHRoaXMuYXR0cmlic1thXTtcbiAgICAgICAgICAgIGxvY2F0aW9uID0gcHJvZ3JhbS5hdHRyaWJ1dGUoYXR0cmliLm5hbWUpLmxvY2F0aW9uO1xuXG4gICAgICAgICAgICBpZiAobG9jYXRpb24gIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFWZXJ0ZXhMYXlvdXQuZW5hYmxlZF9hdHRyaWJzW2xvY2F0aW9uXSB8fCBmb3JjZSkge1xuICAgICAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShsb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIobG9jYXRpb24sIGF0dHJpYi5zaXplLCBhdHRyaWIudHlwZSwgYXR0cmliLm5vcm1hbGl6ZWQsIHRoaXMuc3RyaWRlLCBhdHRyaWIub2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBWZXJ0ZXhMYXlvdXQuZW5hYmxlZF9hdHRyaWJzW2xvY2F0aW9uXSA9IHByb2dyYW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEaXNhYmxlIGFueSBwcmV2aW91c2x5IGJvdW5kIGF0dHJpYnV0ZXMgdGhhdCBhcmVuJ3QgZm9yIHRoaXMgbGF5b3V0XG4gICAgICAgIGZvciAobG9jYXRpb24gaW4gVmVydGV4TGF5b3V0LmVuYWJsZWRfYXR0cmlicykge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlVW51c2VkQXR0cmlidXRlKGdsLCBsb2NhdGlvbiwgcHJvZ3JhbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlIGFuIGF0dHJpYnV0ZSBpZiBpdCB3YXMgbm90IGVuYWJsZWQgZm9yIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbVxuICAgIC8vIE5PVEU6IHRoaXMgd2FzIG1vdmVkIG91dCBvZiB0aGUgaW5uZXIgbG9vcCBpbiBlbmFibGUoKSB0byBhc3Npc3Qgdy9WTSBvcHRpbWl6YXRpb25cbiAgICBkaXNhYmxlVW51c2VkQXR0cmlidXRlIChnbCwgbG9jYXRpb24sIHByb2dyYW0pIHtcbiAgICAgICAgaWYgKFZlcnRleExheW91dC5lbmFibGVkX2F0dHJpYnNbbG9jYXRpb25dICE9PSBwcm9ncmFtKSB7XG4gICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobG9jYXRpb24pO1xuICAgICAgICAgICAgZGVsZXRlIFZlcnRleExheW91dC5lbmFibGVkX2F0dHJpYnNbbG9jYXRpb25dO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlVmVydGV4RGF0YSAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmVydGV4RGF0YSh0aGlzKTtcbiAgICB9XG5cbn1cblxuLy8gVHJhY2sgY3VycmVudGx5IGVuYWJsZWQgYXR0cmlicywgYnkgdGhlIHByb2dyYW0gdGhleSBhcmUgYm91bmQgdG9cbi8vIFN0YXRpYyBjbGFzcyBwcm9wZXJ0eSB0byByZWZsZWN0IGdsb2JhbCBHTCBzdGF0ZVxuVmVydGV4TGF5b3V0LmVuYWJsZWRfYXR0cmlicyA9IHt9O1xuIiwiaW1wb3J0IFJlcGVhdEdyb3VwIGZyb20gJy4vcmVwZWF0X2dyb3VwJztcblxuaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5cbnZhciBDb2xsaXNpb247XG5cbmV4cG9ydCBkZWZhdWx0IENvbGxpc2lvbiA9IHtcblxuICAgIHRpbGVzOiB7fSxcblxuICAgIHN0YXJ0VGlsZSAodGlsZSkge1xuICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnRpbGVzW3RpbGVdID0ge1xuICAgICAgICAgICAgYmJveGVzOiB7ICAgICAgICAgICAvLyBjdXJyZW50IHNldCBvZiBwbGFjZWQgYm91bmRpbmcgYm94ZXNcbiAgICAgICAgICAgICAgICBhYWJiOiBbXSxcbiAgICAgICAgICAgICAgICBvYmI6IFtdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2JqZWN0czoge30sICAgICAgICAvLyBvYmplY3RzIHRvIGNvbGxpZGUsIGdyb3VwZWQgYnkgcHJpb3JpdHksIHRoZW4gYnkgc3R5bGVcbiAgICAgICAgICAgIGtlZXA6IHt9LCAgICAgICAgICAgLy8gb2JqZWN0cyB0aGF0IHdlcmUga2VwdCBhZnRlciBjb2xsaXNpb24sIGdyb3VwZWQgYnkgc3R5bGVcbiAgICAgICAgICAgIHN0eWxlczogbmV3IFNldCgpICAgLy8gc3R5bGVzIGNvbnRyaWJ1dGluZyBjb2xsaXNpb24gb2JqZWN0c1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFByb21pc2UgcmVzb2x2ZWQgd2hlbiBhbGwgcmVnaXN0ZXJlZCBzdHlsZXMgaGF2ZSBhZGRlZCBvYmplY3RzXG4gICAgICAgIHN0YXRlLmNvbXBsZXRlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgc3RhdGUucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICBzdGF0ZS5yZWplY3QgPSByZWplY3Q7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICByZXNldFRpbGUgKHRpbGUpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMudGlsZXNbdGlsZV07XG4gICAgfSxcblxuICAgIC8vIEFkZCBhIHN0eWxlIHRvIHRoZSBwZW5kaW5nIHNldCwgY29sbGlzaW9uIHdpbGwgYmxvY2sgb24gYWxsIHN0eWxlcyBzdWJtaXR0aW5nIHRvIGNvbGxpc2lvbiBzZXRcbiAgICBhZGRTdHlsZSAoc3R5bGUsIHRpbGUpIHtcbiAgICAgICAgdGhpcy50aWxlc1t0aWxlXS5zdHlsZXMuYWRkKHN0eWxlKTtcbiAgICB9LFxuXG4gICAgLy8gQWRkIGNvbGxpc2lvbiBvYmplY3RzIGZvciBhIHN0eWxlXG4gICAgY29sbGlkZSAob2JqZWN0cywgc3R5bGUsIHRpbGUpIHtcbiAgICAgICAgbGV0IHN0YXRlID0gdGhpcy50aWxlc1t0aWxlXTtcbiAgICAgICAgaWYgKCFzdGF0ZSkge1xuICAgICAgICAgICAgbG9nLnRyYWNlKCdDb2xsaXNpb24uY29sbGlkZSgpIGNhbGxlZCB3aXRoIG51bGwgdGlsZScsIHRpbGUsIHRoaXMudGlsZXMsIHN0eWxlLCBvYmplY3RzKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChFcnJvcignQ29sbGlzaW9uLmNvbGxpZGUoKSBjYWxsZWQgd2l0aCBudWxsIHRpbGUnLCB0aWxlLCB0aGlzLnRpbGVzLCBzdHlsZSwgb2JqZWN0cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR3JvdXAgYnkgcHJpb3JpdHkgYW5kIHN0eWxlXG4gICAgICAgIGxldCB0aWxlX29iamVjdHMgPSBzdGF0ZS5vYmplY3RzO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgb2JqID0gb2JqZWN0c1tpXTtcbiAgICAgICAgICAgIGxldCBwcmlvcml0eSA9IG9iai5sYXlvdXQucHJpb3JpdHk7XG4gICAgICAgICAgICB0aWxlX29iamVjdHNbcHJpb3JpdHldID0gdGlsZV9vYmplY3RzW3ByaW9yaXR5XSB8fCB7fTtcbiAgICAgICAgICAgIHRpbGVfb2JqZWN0c1twcmlvcml0eV1bc3R5bGVdID0gdGlsZV9vYmplY3RzW3ByaW9yaXR5XVtzdHlsZV0gfHwgW107XG4gICAgICAgICAgICB0aWxlX29iamVjdHNbcHJpb3JpdHldW3N0eWxlXS5wdXNoKG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgZnJvbSBwZW5kaW5nIHN0eWxlIHNldCwgaWYgbm8gbW9yZSBzdHlsZXMsIGRvIGNvbGxpc2lvbiAmIGZpbmlzaCB0aWxlXG4gICAgICAgIHN0YXRlLnN0eWxlcy5kZWxldGUoc3R5bGUpO1xuICAgICAgICBpZiAoc3RhdGUuc3R5bGVzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZW5kVGlsZSh0aWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdhaXQgZm9yIG9iamVjdHMgdG8gYmUgYWRkZWQgZnJvbSBhbGwgc3R5bGVzXG4gICAgICAgIHJldHVybiBzdGF0ZS5jb21wbGV0ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5rZWVwW3N0eWxlXSB8fCBbXTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8vIFRlc3QgbGFiZWxzIGZvciBjb2xsaXNpb25zLCBoaWdoZXIgdG8gbG93ZXIgcHJpb3JpdHlcbiAgICAvLyBXaGVuIHR3byBjb2xsaWRlLCBkaXNjYXJkIHRoZSBsb3dlci1wcmlvcml0eSBsYWJlbFxuICAgIGVuZFRpbGUgKHRpbGUpIHtcbiAgICAgICAgbGV0IHN0YXRlID0gdGhpcy50aWxlc1t0aWxlXTtcbiAgICAgICAgbGV0IGJib3hlcyA9IHN0YXRlLmJib3hlcztcbiAgICAgICAgbGV0IGtlZXAgPSBzdGF0ZS5rZWVwO1xuXG4gICAgICAgIFJlcGVhdEdyb3VwLmNsZWFyKHRpbGUpO1xuXG4gICAgICAgIC8vIFByb2Nlc3MgbGFiZWxzIGJ5IHByaW9yaXR5LCB0aGVuIGJ5IHN0eWxlXG4gICAgICAgIGxldCBwcmlvcml0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUub2JqZWN0cykuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgICBmb3IgKGxldCBwcmlvcml0eSBvZiBwcmlvcml0aWVzKSB7XG4gICAgICAgICAgICBsZXQgc3R5bGVfb2JqZWN0cyA9IHN0YXRlLm9iamVjdHNbcHJpb3JpdHldO1xuICAgICAgICAgICAgaWYgKCFzdHlsZV9vYmplY3RzKSB7IC8vIG5vIGxhYmVscyBhdCB0aGlzIHByaW9yaXR5LCBza2lwIHRvIG5leHRcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRm9yIGVhY2ggc3R5bGVcbiAgICAgICAgICAgIGZvciAobGV0IHN0eWxlIGluIHN0eWxlX29iamVjdHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0cyA9IHN0eWxlX29iamVjdHNbc3R5bGVdO1xuICAgICAgICAgICAgICAgIGtlZXBbc3R5bGVdID0ga2VlcFtzdHlsZV0gfHwgW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHsgbGFiZWwsIGxheW91dCB9ID0gb2JqZWN0c1tpXTsgLy8gVE9ETzogYGxhYmVsYCBzaG91bGQgYmUgZ2VuZXJpY1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRlc3QgdGhlIGxhYmVsIGZvciBpbnRlcnNlY3Rpb25zIHdpdGggb3RoZXIgbGFiZWxzIGluIHRoZSB0aWxlXG4gICAgICAgICAgICAgICAgICAgIGlmICghbGF5b3V0LmNvbGxpZGUgfHwgIWxhYmVsLmRpc2NhcmQoYmJveGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHJlcGVhdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGVjayA9IFJlcGVhdEdyb3VwLmNoZWNrKGxhYmVsLCBsYXlvdXQsIHRpbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nLnRyYWNlKGBkaXNjYXJkIGxhYmVsICcke2xhYmVsLnRleHR9JywgKG9uZV9wZXJfZ3JvdXA6ICR7Y2hlY2sub25lX3Blcl9ncm91cH0pLCBkaXN0ICR7TWF0aC5zcXJ0KGNoZWNrLmRpc3Rfc3EpL2xheW91dC51bml0c19wZXJfcGl4ZWx9IDwgJHtNYXRoLnNxcnQoY2hlY2sucmVwZWF0X2Rpc3Rfc3EpL2xheW91dC51bml0c19wZXJfcGl4ZWx9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBhcyBwbGFjZWQgZm9yIGZ1dHVyZSByZXBlYXQgY3VsbGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVwZWF0R3JvdXAuYWRkKGxhYmVsLCBsYXlvdXQsIHRpbGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC5hZGQoYmJveGVzKTsgLy8gYWRkIGxhYmVsIHRvIGN1cnJlbnRseSB2aXNpYmxlIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAga2VlcFtzdHlsZV0ucHVzaChvYmplY3RzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIGlmIChsYXlvdXQuY29sbGlkZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgbG9nLnRyYWNlKGBkaXNjYXJkIGxhYmVsICcke2xhYmVsLnRleHR9JyBkdWUgdG8gY29sbGlzaW9uYCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgdGhpcy50aWxlc1t0aWxlXTtcbiAgICAgICAgc3RhdGUucmVzb2x2ZSgpO1xuICAgIH1cblxufTtcbiIsImltcG9ydCBib3hJbnRlcnNlY3QgZnJvbSAnYm94LWludGVyc2VjdCc7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWtvbGFseXNlbmtvL2JveC1pbnRlcnNlY3RcbmltcG9ydCBVdGlscyBmcm9tICcuLi91dGlscy91dGlscyc7XG5pbXBvcnQgT0JCIGZyb20gJy4uL3V0aWxzL29iYic7XG5cbi8vIGltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYWJlbCB7XG5cbiAgICBjb25zdHJ1Y3RvciAoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmFhYmIgPSBudWxsO1xuICAgICAgICB0aGlzLm9iYiA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIG92ZXJsYXBzIHdpdGggb3RoZXIgbGFiZWxzIGluIHRoZSB0aWxlXG4gICAgb2NjbHVkZWQgKGJib3hlcykge1xuICAgICAgICBsZXQgaW50ZXJzZWN0ID0gZmFsc2U7XG4gICAgICAgIGxldCBhYWJicyA9IGJib3hlcy5hYWJiO1xuICAgICAgICBsZXQgb2JicyA9IGJib3hlcy5vYmI7XG5cbiAgICAgICAgLy8gQnJvYWQgcGhhc2VcbiAgICAgICAgaWYgKGFhYmJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGJveEludGVyc2VjdChbdGhpcy5hYWJiXSwgYWFiYnMsIChpLCBqKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gbG9nLnRyYWNlKCdjb2xsaXNpb246IGJyb2FkIHBoYXNlIGNvbGxpZGUnLCB0aGlzLm9wdGlvbnMuaWQsIHRoaXMsIHRoaXMuYWFiYiwgYWFiYnNbal0pO1xuXG4gICAgICAgICAgICAgICAgLy8gU2tpcCBuYXJyb3cgcGhhc2UgY29sbGlzaW9uIGlmIG5vIHJvdGF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub2JiLmFuZ2xlID09PSAwICYmIG9iYnNbal0uYW5nbGUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9nLnRyYWNlKCdjb2xsaXNpb246IHNraXAgbmFycm93IHBoYXNlIGNvbGxpZGUgYmVjYXVzZSBuZWl0aGVyIGlzIHJvdGF0ZWQnLCB0aGlzLm9wdGlvbnMuaWQsIHRoaXMsIHRoaXMub2JiLCBvYmJzW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gTmFycm93IHBoYXNlXG4gICAgICAgICAgICAgICAgaWYgKE9CQi5pbnRlcnNlY3QodGhpcy5vYmIsIG9iYnNbal0pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGxvZy50cmFjZSgnY29sbGlzaW9uOiBuYXJyb3cgcGhhc2UgY29sbGlkZScsIHRoaXMub3B0aW9ucy5pZCwgdGhpcywgdGhpcy5vYmIsIG9iYnNbal0pO1xuICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW50ZXJzZWN0O1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGlzIGxhYmVsJ3MgYm91bmRpbmcgYm94IHRvIHRoZSBwcm92aWRlZCBzZXRcbiAgICBhZGQgKGJib3hlcykge1xuICAgICAgICBiYm94ZXMuYWFiYi5wdXNoKHRoaXMuYWFiYik7XG4gICAgICAgIGJib3hlcy5vYmIucHVzaCh0aGlzLm9iYik7XG4gICAgfVxuXG4gICAgLy8gY2hlY2tzIHdoZXRoZXIgdGhlIGxhYmVsIGlzIHdpdGhpbiB0aGUgdGlsZSBib3VuZGFyaWVzXG4gICAgaW5UaWxlQm91bmRzICgpIHtcbiAgICAgICAgbGV0IG1pbiA9IFsgdGhpcy5hYWJiWzBdLCB0aGlzLmFhYmJbMV0gXTtcbiAgICAgICAgbGV0IG1heCA9IFsgdGhpcy5hYWJiWzJdLCB0aGlzLmFhYmJbM10gXTtcblxuICAgICAgICBpZiAoIVV0aWxzLnBvaW50SW5UaWxlKG1pbikgfHwgIVV0aWxzLnBvaW50SW5UaWxlKG1heCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFdoZXRoZXIgdGhlIGxhYmVsIHNob3VsZCBiZSBkaXNjYXJkZWRcbiAgICAvLyBEZXBlbmRzIG9uIHdoZXRoZXIgbGFiZWwgbXVzdCBmaXQgaW4gdGhlIHRpbGUgYm91bmRzLCBhbmQgaWYgc28sIGNhbiBpdCBiZSBtb3ZlZCB0byBmaXQgdGhlcmVcbiAgICBkaXNjYXJkIChiYm94ZXMpIHtcbiAgICAgICAgLy8gU2hvdWxkIHRoZSBsYWJlbCBiZSBjdWxsZWQgaWYgaXQgY2FuJ3QgZml0IGluc2lkZSB0aGUgdGlsZSBib3VuZHM/XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3VsbF9mcm9tX3RpbGUpIHtcbiAgICAgICAgICAgIGxldCBpbl90aWxlID0gdGhpcy5pblRpbGVCb3VuZHMoKTtcblxuICAgICAgICAgICAgLy8gSWYgaXQgZG9lc24ndCBmaXQsIHNob3VsZCB3ZSB0cnkgdG8gbW92ZSBpdCBpbnRvIHRoZSB0aWxlIGJvdW5kcz9cbiAgICAgICAgICAgIGlmICghaW5fdGlsZSAmJiB0aGlzLm9wdGlvbnMubW92ZV9pbnRvX3RpbGUpIHtcbiAgICAgICAgICAgICAgICAvLyBDYW4gd2UgZml0IHRoZSBsYWJlbCBpbnRvIHRoZSB0aWxlP1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tb3ZlSW50b1RpbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gY2FuJ3QgZml0IGluIHRpbGUsIGRpc2NhcmRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpbl90aWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIG91dCBvZiB0aWxlIGJvdW5kcywgZGlzY2FyZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIGxhYmVsIGhhc24ndCBiZWVuIGRpc2NhcmRlZCB5ZXQsIGNoZWNrIHRvIHNlZSBpZiBpdCdzIG9jY2x1ZGVkIGJ5IG90aGVyIGxhYmVsc1xuICAgICAgICByZXR1cm4gdGhpcy5vY2NsdWRlZChiYm94ZXMpO1xuICAgIH1cbn1cblxuTGFiZWwuZXBzaWxvbiA9IDAuOTk5OTsgLy8gdG9sZXJhbmNlIGFyb3VuZCBjb2xsaXNpb24gYm94ZXMsIHByZXZlbnQgcGVyZmVjdGx5IGFkamFjZW50IG9iamVjdHMgZnJvbSBjb2xsaWRpbmdcbiIsImltcG9ydCBWZWN0b3IgZnJvbSAnLi4vdmVjdG9yJztcbmltcG9ydCBMYWJlbCBmcm9tICcuL2xhYmVsJztcbmltcG9ydCBPQkIgZnJvbSAnLi4vdXRpbHMvb2JiJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGFiZWxMaW5lIGV4dGVuZHMgTGFiZWwge1xuXG4gICAgY29uc3RydWN0b3IgKHNpemUsIGxpbmVzLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKHNpemUsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMubGluZXMgPSBsaW5lcztcblxuICAgICAgICAvLyBvcHRpb25hbGx5IGxpbWl0IHRoZSBsaW5lIHNlZ21lbnRzIHRoYXQgdGhlIGxhYmVsIG1heSBiZSBwbGFjZWQgaW4sIGJ5IHNwZWNpZnlpbmcgYSBzZWdtZW50IGluZGV4IHJhbmdlXG4gICAgICAgIC8vIHVzZWQgYXMgYSBjb2Fyc2Ugc3ViZGl2aWRlIGZvciBwbGFjaW5nIG11bHRpcGxlIGxhYmVscyBwZXIgbGluZSBnZW9tZXRyeVxuICAgICAgICB0aGlzLnNlZ21lbnRfaW5kZXggPSBvcHRpb25zLnNlZ21lbnRfc3RhcnQgfHwgMDtcbiAgICAgICAgdGhpcy5zZWdtZW50X21heCA9IG9wdGlvbnMuc2VnbWVudF9lbmQgfHwgdGhpcy5saW5lcy5sZW5ndGg7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlICgpIHtcbiAgICAgICAgbGV0IHNlZ21lbnQgPSB0aGlzLmN1cnJlbnRTZWdtZW50KCk7XG4gICAgICAgIHRoaXMuYW5nbGUgPSB0aGlzLmNvbXB1dGVBbmdsZSgpO1xuICAgICAgICB0aGlzLnBvc2l0aW9uID0gWyhzZWdtZW50WzBdWzBdICsgc2VnbWVudFsxXVswXSkgLyAyLCAoc2VnbWVudFswXVsxXSArIHNlZ21lbnRbMV1bMV0pIC8gMl07XG4gICAgICAgIHRoaXMudXBkYXRlQkJveGVzKCk7XG4gICAgfVxuXG4gICAgbW92ZU5leHRTZWdtZW50ICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VnbWVudF9pbmRleCArIDEgPj0gdGhpcy5zZWdtZW50X21heCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VnbWVudF9pbmRleCsrO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbXB1dGVBbmdsZSAoKSB7XG4gICAgICAgIGxldCBzZWdtZW50ID0gdGhpcy5jdXJyZW50U2VnbWVudCgpO1xuICAgICAgICBsZXQgcDBwMSA9IFZlY3Rvci5zdWIoc2VnbWVudFswXSwgc2VnbWVudFsxXSk7XG5cbiAgICAgICAgcDBwMSA9IFZlY3Rvci5ub3JtYWxpemUocDBwMSk7XG5cbiAgICAgICAgbGV0IFBJXzIgPSBNYXRoLlBJIC8gMjtcbiAgICAgICAgbGV0IHRoZXRhID0gTWF0aC5hdGFuMihwMHAxWzBdLCBwMHAxWzFdKSArIFBJXzI7XG5cbiAgICAgICAgaWYgKHRoZXRhID4gUElfMiB8fCB0aGV0YSA8IC1QSV8yKSB7XG4gICAgICAgICAgICB0aGV0YSArPSBNYXRoLlBJO1xuICAgICAgICB9XG4gICAgICAgIHRoZXRhICU9IE1hdGguUEkgKiAyO1xuXG4gICAgICAgIHJldHVybiB0aGV0YTtcbiAgICB9XG5cbiAgICBmaXRUb1NlZ21lbnQgKCkge1xuICAgICAgICBsZXQgc2VnbWVudCA9IHRoaXMuY3VycmVudFNlZ21lbnQoKTtcbiAgICAgICAgbGV0IHAwcDEgPSBWZWN0b3Iuc3ViKHNlZ21lbnRbMF0sIHNlZ21lbnRbMV0pO1xuICAgICAgICBsZXQgbGVuZ3RoID0gVmVjdG9yLmxlbmd0aChwMHAxKTtcblxuICAgICAgICBsZXQgbGFiZWxfbGVuZ3RoID0gdGhpcy5zaXplWzBdICogdGhpcy5vcHRpb25zLnVuaXRzX3Blcl9waXhlbDtcblxuICAgICAgICBpZiAobGFiZWxfbGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBhbiBleGNlZWQgaGV1cmVzdGljIG9mIDEwMCUgd291bGQgbGV0IHRoZSBsYWJlbCBmaXQgaW4gYW55IGNhc2VzXG4gICAgICAgICAgICBsZXQgZXhjZWVkID0gKDEgLSAobGVuZ3RoIC8gbGFiZWxfbGVuZ3RoKSkgKiAxMDA7XG4gICAgICAgICAgICByZXR1cm4gZXhjZWVkIDwgdGhpcy5vcHRpb25zLmxpbmVfZXhjZWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxhYmVsX2xlbmd0aCA8PSBsZW5ndGg7XG4gICAgfVxuXG4gICAgY3VycmVudFNlZ21lbnQgKCkge1xuICAgICAgICBsZXQgcDEgPSB0aGlzLmxpbmVzW3RoaXMuc2VnbWVudF9pbmRleF07XG4gICAgICAgIGxldCBwMiA9IHRoaXMubGluZXNbdGhpcy5zZWdtZW50X2luZGV4ICsgMV07XG5cbiAgICAgICAgcmV0dXJuIFsgcDEsIHAyIF07XG4gICAgfVxuXG4gICAgdXBkYXRlQkJveGVzICgpIHtcbiAgICAgICAgbGV0IHVwcCA9IHRoaXMub3B0aW9ucy51bml0c19wZXJfcGl4ZWw7XG4gICAgICAgIGxldCB3aWR0aCA9ICh0aGlzLnNpemVbMF0gKyB0aGlzLm9wdGlvbnMuYnVmZmVyWzBdICogMikgKiB1cHAgKiBMYWJlbC5lcHNpbG9uO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gKHRoaXMuc2l6ZVsxXSArIHRoaXMub3B0aW9ucy5idWZmZXJbMV0gKiAyKSAqIHVwcCAqIExhYmVsLmVwc2lsb247XG5cbiAgICAgICAgLy8gYXBwbHkgb2Zmc2V0LCB4IHBvc2l0aXZlLCB5IHBvaW50aW5nIGRvd25cbiAgICAgICAgbGV0IG9mZnNldCA9IFZlY3Rvci5yb3QodGhpcy5vcHRpb25zLm9mZnNldCwgdGhpcy5hbmdsZSk7XG4gICAgICAgIGxldCBwID0gW1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvblswXSArIChvZmZzZXRbMF0gKiB1cHApLFxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvblsxXSAtIChvZmZzZXRbMV0gKiB1cHApXG4gICAgICAgIF07XG5cbiAgICAgICAgLy8gdGhlIGFuZ2xlIG9mIHRoZSBvYmIgaXMgbmVnYXRpdmUgc2luY2UgaXQncyB0aGUgdGlsZSBzeXN0ZW0geSBheGlzIGlzIHBvaW50aW5nIGRvd25cbiAgICAgICAgdGhpcy5vYmIgPSBuZXcgT0JCKHBbMF0sIHBbMV0sIC10aGlzLmFuZ2xlLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5hYWJiID0gdGhpcy5vYmIuZ2V0RXh0ZW50KCk7XG4gICAgfVxuXG4gICAgLy8gVHJ5IHRvIG1vdmUgdGhlIGxhYmVsIGludG8gdGhlIHRpbGUgYm91bmRzXG4gICAgLy8gUmV0dXJucyB0cnVlIGlmIGxhYmVsIHdhcyBtb3ZlZCBpbnRvIHRpbGUsIGZhbHNlIGlmIGl0IGNvdWxkbid0IGJlIG1vdmVkXG4gICAgbW92ZUludG9UaWxlICgpIHtcbiAgICAgICAgbGV0IGluX3RpbGUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGZpdHNfdG9fc2VnbWVudCA9IHRoaXMuZml0VG9TZWdtZW50KCk7XG5cbiAgICAgICAgLy8gVHJ5IGxpbmUgc2VnbWVudHMgdW50aWwgd2UgZmluZCBvbmUgdGhhdCBmaXRzIHRoZSBsYWJlbCAoYW5kIGlzIGluc2lkZSB0aGUgdGlsZSlcbiAgICAgICAgd2hpbGUgKCFpbl90aWxlIHx8ICFmaXRzX3RvX3NlZ21lbnQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tb3ZlTmV4dFNlZ21lbnQoKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyB3ZSBjYW4ndCBtb3ZlIGZ1cnRoZXIgaW4gdGhpcyBsaW5lXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluX3RpbGUgPSB0aGlzLmluVGlsZUJvdW5kcygpO1xuICAgICAgICAgICAgZml0c190b19zZWdtZW50ID0gdGhpcy5maXRUb1NlZ21lbnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbl90aWxlICYmIGZpdHNfdG9fc2VnbWVudDtcbiAgICB9XG5cbiAgICBkaXNjYXJkIChiYm94ZXMpIHtcbiAgICAgICAgLy8gRmlyc3QgZmluZCBhIGxpbmUgc2VnbWVudCB0aGF0IGZpdHMgdGhlIGxhYmVsXG4gICAgICAgIGlmICh0aGlzLmxpbmVzICYmICF0aGlzLmZpdFRvU2VnbWVudCgpKSB7XG4gICAgICAgICAgICB3aGlsZSAoIXRoaXMuZml0VG9TZWdtZW50KCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubW92ZU5leHRTZWdtZW50KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbGFiZWwgZml0cyBpbiBsaW5lLCBydW4gc3RhbmRhcmQgZGlzY2FyZCB0ZXN0c1xuICAgICAgICByZXR1cm4gc3VwZXIuZGlzY2FyZChiYm94ZXMpO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IExhYmVsIGZyb20gJy4vbGFiZWwnO1xuaW1wb3J0IEdlbyBmcm9tICcuLi9nZW8nO1xuaW1wb3J0IE9CQiBmcm9tICcuLi91dGlscy9vYmInO1xuaW1wb3J0IFBvaW50QW5jaG9yIGZyb20gJy4uL3N0eWxlcy9wb2ludHMvcG9pbnRfYW5jaG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGFiZWxQb2ludCBleHRlbmRzIExhYmVsIHtcblxuICAgIGNvbnN0cnVjdG9yIChwb3NpdGlvbiwgc2l6ZSwgb3B0aW9ucykge1xuICAgICAgICBzdXBlcihzaXplLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IFtwb3NpdGlvblswXSwgcG9zaXRpb25bMV1dO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLm9mZnNldCA9IHRoaXMuY29tcHV0ZU9mZnNldCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUJCb3hlcygpO1xuICAgIH1cblxuICAgIGNvbXB1dGVPZmZzZXQgKCkge1xuICAgICAgICByZXR1cm4gUG9pbnRBbmNob3IuY29tcHV0ZU9mZnNldCh0aGlzLm9wdGlvbnMub2Zmc2V0LCB0aGlzLnNpemUsIHRoaXMub3B0aW9ucy5hbmNob3IpO1xuICAgIH1cblxuICAgIHVwZGF0ZUJCb3hlcyAoKSB7XG4gICAgICAgIGxldCB3aWR0aCA9ICh0aGlzLnNpemVbMF0gKyB0aGlzLm9wdGlvbnMuYnVmZmVyWzBdICogMikgKiB0aGlzLm9wdGlvbnMudW5pdHNfcGVyX3BpeGVsICogTGFiZWwuZXBzaWxvbjtcbiAgICAgICAgbGV0IGhlaWdodCA9ICh0aGlzLnNpemVbMV0gKyB0aGlzLm9wdGlvbnMuYnVmZmVyWzFdICogMikgKiB0aGlzLm9wdGlvbnMudW5pdHNfcGVyX3BpeGVsICogTGFiZWwuZXBzaWxvbjtcblxuICAgICAgICBsZXQgcCA9IFtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25bMF0gKyAodGhpcy5vcHRpb25zLm9mZnNldFswXSAqIHRoaXMub3B0aW9ucy51bml0c19wZXJfcGl4ZWwpLFxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvblsxXSAtICh0aGlzLm9wdGlvbnMub2Zmc2V0WzFdICogdGhpcy5vcHRpb25zLnVuaXRzX3Blcl9waXhlbClcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLm9iYiA9IG5ldyBPQkIocFswXSwgcFsxXSwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMuYWFiYiA9IHRoaXMub2JiLmdldEV4dGVudCgpO1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBtb3ZlIHRoZSBsYWJlbCBpbnRvIHRoZSB0aWxlIGJvdW5kc1xuICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBsYWJlbCB3YXMgbW92ZWQgaW50byB0aWxlLCBmYWxzZSBpZiBpdCBjb3VsZG4ndCBiZSBtb3ZlZFxuICAgIG1vdmVJbnRvVGlsZSAoKSB7XG4gICAgICAgIGxldCB1cGRhdGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuYWFiYlswXSA8IDApIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25bMF0gKz0gLXRoaXMuYWFiYlswXTtcbiAgICAgICAgICAgIHVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWFiYlsyXSA+PSBHZW8udGlsZV9zY2FsZSkge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvblswXSAtPSB0aGlzLmFhYmJbMl0gLSBHZW8udGlsZV9zY2FsZSArIDE7XG4gICAgICAgICAgICB1cGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFhYmJbM10gPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uWzFdIC09IHRoaXMuYWFiYlszXTtcbiAgICAgICAgICAgIHVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWFiYlsxXSA8PSAtR2VvLnRpbGVfc2NhbGUpIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25bMV0gLT0gdGhpcy5hYWJiWzFdICsgR2VvLnRpbGVfc2NhbGUgLSAxO1xuICAgICAgICAgICAgdXBkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXBkYXRlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCQm94ZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmluVGlsZUJvdW5kcygpO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IEdlbyBmcm9tICcuLi9nZW8nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBlYXRHcm91cCB7XG5cbiAgICBjb25zdHJ1Y3RvciAoa2V5LCByZXBlYXRfZGlzdCwgbWF4X3JlcGVhdF9kaXN0KSB7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgICAgICB0aGlzLnJlcGVhdF9kaXN0ID0gcmVwZWF0X2Rpc3Q7XG4gICAgICAgIHRoaXMucmVwZWF0X2Rpc3Rfc3EgPSB0aGlzLnJlcGVhdF9kaXN0ICogdGhpcy5yZXBlYXRfZGlzdDtcbiAgICAgICAgdGhpcy5tYXhfcmVwZWF0X2Rpc3Rfc3EgPSBtYXhfcmVwZWF0X2Rpc3QgKiBtYXhfcmVwZWF0X2Rpc3Q7XG4gICAgICAgIHRoaXMub25lX3Blcl9ncm91cCA9ICh0aGlzLnJlcGVhdF9kaXN0X3NxID49IHRoaXMubWF4X3JlcGVhdF9kaXN0X3NxKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBhbiBvYmplY3QgdG8gc2VlIGlmIGl0J3MgYSByZXBlYXQgaW4gdGhpcyBncm91cFxuICAgIGNoZWNrIChvYmopIHtcbiAgICAgICAgLy8gSWYgb25seSBvbmUgb2JqZWN0IGFsbG93ZWQgcGVyIGdyb3VwLCBzaG9ydGN1dCBkaXN0YW5jZSBsb2dpY1xuICAgICAgICBpZiAodGhpcy5vbmVfcGVyX2dyb3VwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIHJlcG9ydGVkIGRpc3RhbmNlIG1heGVzIG91dCBhdCB0aHJlc2hvbGQgaW4gdGhpcyBjYXNlXG4gICAgICAgICAgICAgICAgLy8gKG5vdCB0cnVlIGRpc3QgdmFsdWUgc2luY2Ugd2Ugc2tpcHBlZCBjYWxjdWxhdGluZyBpdClcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBkaXN0X3NxOiB0aGlzLm1heF9yZXBlYXRfZGlzdF9zcSxcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0X2Rpc3Rfc3E6IHRoaXMucmVwZWF0X2Rpc3Rfc3EsXG4gICAgICAgICAgICAgICAgICAgIG9uZV9wZXJfZ3JvdXA6IHRoaXMub25lX3Blcl9ncm91cFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47IC8vIG5vIG9iamVjdCBmb3IgdGhpcyBncm91cCB5ZXRcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGRpc3RhbmNlIGZyb20gbmV3IG9iamVjdCB0byBvYmplY3RzIGFscmVhZHkgaW4gZ3JvdXBcbiAgICAgICAgbGV0IHAxID0gb2JqLnBvc2l0aW9uO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCB0aGlzLnBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHAyID0gdGhpcy5wb3NpdGlvbnNbaV07XG4gICAgICAgICAgICBsZXQgZHggPSBwMVswXSAtIHAyWzBdO1xuICAgICAgICAgICAgbGV0IGR5ID0gcDFbMV0gLSBwMlsxXTtcbiAgICAgICAgICAgIGxldCBkaXN0X3NxID0gZHggKiBkeCArIGR5ICogZHk7XG5cbiAgICAgICAgICAgIC8vIEZvdW5kIGFuIGV4aXN0aW5nIG9iamVjdCB3aXRoaW4gYWxsb3dlZCBkaXN0YW5jZVxuICAgICAgICAgICAgaWYgKGRpc3Rfc3EgPCB0aGlzLnJlcGVhdF9kaXN0X3NxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdF9zcSxcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0X2Rpc3Rfc3E6IHRoaXMucmVwZWF0X2Rpc3Rfc3FcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIG9iamVjdCB0byB0aGlzIGdyb3VwXG4gICAgYWRkIChvYmopIHtcbiAgICAgICAgLy8gb25seSBzdG9yZSBvYmplY3QncyBwb3NpdGlvbiwgdG8gc2F2ZSBzcGFjZSAvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmVmZXJlbmNlc1xuICAgICAgICBpZiAob2JqICYmIG9iai5wb3NpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnMucHVzaChvYmoucG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RhdGljIG1ldGhvZHMgYXJlIHVzZWQgdG8gbWFuYWdlIHJlcGVhdCBncm91cHMsIHdpdGhpbiBhbmQgYWNyb3NzIHRpbGVzXG5cbiAgICAvLyBSZXNldCBhbGwgZ3JvdXBzIGZvciB0aGlzIHRpbGVcbiAgICBzdGF0aWMgY2xlYXIgKHRpbGUpIHtcbiAgICAgICAgdGhpcy5ncm91cHNbdGlsZV0gPSB7fTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBhbiBvYmplY3QgdG8gc2VlIGlmIGl0J3MgYSByZXBlYXQgd2l0aGluIGl0cyBkZXNpZ25hdGVkIGdyb3VwXG4gICAgc3RhdGljIGNoZWNrIChvYmosIGxheW91dCwgdGlsZSkge1xuICAgICAgICBpZiAobGF5b3V0LnJlcGVhdF9kaXN0YW5jZSAmJiB0aGlzLmdyb3Vwc1t0aWxlXVtsYXlvdXQucmVwZWF0X2dyb3VwXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBzW3RpbGVdW2xheW91dC5yZXBlYXRfZ3JvdXBdLmNoZWNrKG9iaik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYW4gb2JqZWN0IHRvIGl0cyBkZXNpZ25hdGVkIGdyb3VwXG4gICAgc3RhdGljIGFkZCAob2JqLCBsYXlvdXQsIHRpbGUpIHtcbiAgICAgICAgaWYgKGxheW91dC5yZXBlYXRfZGlzdGFuY2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3Vwc1t0aWxlXVtsYXlvdXQucmVwZWF0X2dyb3VwXSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNbdGlsZV1bbGF5b3V0LnJlcGVhdF9ncm91cF0gPSBuZXcgUmVwZWF0R3JvdXAoXG4gICAgICAgICAgICAgICAgICAgIGxheW91dC5yZXBlYXRfZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgIGxheW91dC5yZXBlYXRfZGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgIFJlcGVhdEdyb3VwLm1heF9yZXBlYXRfZGlzdFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1t0aWxlXVtsYXlvdXQucmVwZWF0X2dyb3VwXS5hZGQob2JqKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4vLyBDdXJyZW50IHNldCBvZiByZXBlYXQgZ3JvdXBzLCBncm91cGVkIGFuZCBrZXllZCBieSB0aWxlXG5SZXBlYXRHcm91cC5ncm91cHMgPSB7fTtcblxuLy8gTWF4IHJlcGVhdCBkaXN0OiBmb3IgZ3JvdXBzIHdpdGggYSByZXBlYXQgZGlzdCBiZXlvbmQgdGhpcyB0aHJlc2hvbGQsIG9ubHkgb25lIGxhYmVsXG4vLyB3aWxsIGJlIGFsbG93ZWQgcGVyIGdyb3VwLCBlLmcuIHNldCB0byB0aWxlIHNpemUgZm9yIG9uZS1sYWJlbC1wZXItdGlsZVxuUmVwZWF0R3JvdXAubWF4X3JlcGVhdF9kaXN0ID0gR2VvLnRpbGVfc2NhbGU7XG4iLCJpbXBvcnQgVXRpbHMgZnJvbSAnLi91dGlscy91dGlscyc7XG5pbXBvcnQgU2NlbmUgZnJvbSAnLi9zY2VuZSc7XG5pbXBvcnQgR2VvIGZyb20gJy4vZ2VvJztcblxuLy8gRXhwb3J0cyBtdXN0IGFwcGVhciBvdXRzaWRlIGEgZnVuY3Rpb24sIGJ1dCB3aWxsIG9ubHkgYmUgZGVmaW5lZCBpbiBtYWluIHRocmVhZCAoYmVsb3cpXG5leHBvcnQgdmFyIExlYWZsZXRMYXllcjtcbmV4cG9ydCBmdW5jdGlvbiBsZWFmbGV0TGF5ZXIob3B0aW9ucykge1xuICAgIHJldHVybiBleHRlbmRMZWFmbGV0KG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBleHRlbmRMZWFmbGV0KG9wdGlvbnMpIHtcblxuICAgIC8vIElmIExlYWZsZXRMYXllciBpcyBhbHJlYWR5IGRlZmluZWQgd2hlbiB0aGlzIGlzIGNhbGxlZCBqdXN0IHJldHVybiB0aGF0IGltbWVkaWF0ZWx5XG4gICAgLy8gZS5nLiBpZiB5b3UgY2FsbCBsZWFmbGV0TGF5ZXIgbXVsdGlwbGUgdGltZXMgKHdoaWNoIGlzIHZhbGlkKVxuICAgIGlmICh0eXBlb2YgTGVhZmxldExheWVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmV3IExlYWZsZXRMYXllcihvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBMZWFmbGV0IGxheWVyIGZ1bmN0aW9uYWxpdHkgaXMgb25seSBkZWZpbmVkIGluIG1haW4gdGhyZWFkXG4gICAgaWYgKFV0aWxzLmlzTWFpblRocmVhZCkge1xuXG4gICAgICAgIGxldCBMID0gb3B0aW9ucy5sZWFmbGV0IHx8IHdpbmRvdy5MO1xuXG4gICAgICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgZXh0ZW5kaW5nIHRoZSBsZWFmbGV0IDAuNy54IFRpbGVMYXllciBjbGFzcywgb3IgdGhlIG5ld2VyXG4gICAgICAgIC8vIGxlYWZsZXQgMS54IEdyaWRMYXllciBjbGFzcy5cbiAgICAgICAgbGV0IGxheWVyQmFzZUNsYXNzID0gTC5HcmlkTGF5ZXIgPyBMLkdyaWRMYXllciA6IEwuVGlsZUxheWVyO1xuICAgICAgICBsZXQgbGVhZmxldFZlcnNpb24gPSBsYXllckJhc2VDbGFzcyA9PT0gTC5HcmlkTGF5ZXIgPyAnMS54JyA6ICcwLjcueCc7XG4gICAgICAgIGxldCBsYXllckNsYXNzQ29uZmlnID0ge307XG5cbiAgICAgICAgLy8gSWYgZXh0ZW5kaW5nIGxlYWZsZXQgMC43LnggVGlsZUxheWVyLCBtYWtlIGFkZC9yZW1vdmUgdGlsZSBubyBvcHNcbiAgICAgICAgaWYgKGxheWVyQmFzZUNsYXNzID09PSBMLlRpbGVMYXllcikge1xuICAgICAgICAgICAgbGF5ZXJDbGFzc0NvbmZpZy5fYWRkVGlsZSA9IGZ1bmN0aW9uKCl7fTtcbiAgICAgICAgICAgIGxheWVyQ2xhc3NDb25maWcuX3JlbW92ZVRpbGUgPSBmdW5jdGlvbigpe307XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZpbmUgY3VzdG9tIGxheWVyIG1ldGhvZHNcbiAgICAgICAgT2JqZWN0LmFzc2lnbihsYXllckNsYXNzQ29uZmlnLCB7XG5cbiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgLy8gRGVmYXVsdHNcbiAgICAgICAgICAgICAgICBvcHRpb25zLnNob3dEZWJ1ZyA9ICghb3B0aW9ucy5zaG93RGVidWcgPyBmYWxzZSA6IHRydWUpO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMud2hlZWxEZWJvdW5jZVRpbWUgPSBvcHRpb25zLndoZWVsRGVib3VuY2VUaW1lIHx8IDQwO1xuXG4gICAgICAgICAgICAgICAgTC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU2NlbmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhvb2tzID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRpbmdfdGFuZ3JhbSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLy8gRm9yY2UgbGVhZmxldCB6b29tIGFuaW1hdGlvbnMgb2ZmXG4gICAgICAgICAgICAgICAgdGhpcy5fem9vbUFuaW1hdGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlYm91bmNlVmlld1Jlc2V0ID0gVXRpbHMuZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZmlyZSgnem9vbWVuZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZmlyZSgnbW92ZWVuZCcpO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMub3B0aW9ucy53aGVlbERlYm91bmNlVGltZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjcmVhdGVTY2VuZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUgPSBTY2VuZS5jcmVhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2VuZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtV29ya2VyczogdGhpcy5vcHRpb25zLm51bVdvcmtlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVVcGRhdGU6IHRoaXMub3B0aW9ucy5wcmVVcGRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3N0VXBkYXRlOiB0aGlzLm9wdGlvbnMucG9zdFVwZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXNab29tOiAoTGVhZmxldExheWVyLmxlYWZsZXRWZXJzaW9uID09PSAnMS54JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWdoRGVuc2l0eURpc3BsYXk6IHRoaXMub3B0aW9ucy5oaWdoRGVuc2l0eURpc3BsYXksXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dMZXZlbDogdGhpcy5vcHRpb25zLmxvZ0xldmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWR2YW5jZWQgb3B0aW9uLCBhcHAgd2lsbCBoYXZlIHRvIG1hbnVhbGx5IGNhbGxlZCBzY2VuZS51cGRhdGUoKSBwZXIgZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVSZW5kZXJMb29wOiB0aGlzLm9wdGlvbnMuZGlzYWJsZVJlbmRlckxvb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhZHZhbmNlZCBvcHRpb24sIHdpbGwgcmVxdWlyZSBsaWJyYXJ5IHRvIGJlIHNlcnZlZCBhcyBzYW1lIGhvc3QgYXMgcGFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dDcm9zc0RvbWFpbldvcmtlcnM6IHRoaXMub3B0aW9ucy5hbGxvd0Nyb3NzRG9tYWluV29ya2Vyc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vIEZpbmlzaCBpbml0aWFsaXppbmcgc2NlbmUgYW5kIHNldHVwIGV2ZW50cyB3aGVuIGxheWVyIGlzIGFkZGVkIHRvIG1hcFxuICAgICAgICAgICAgb25BZGQ6IGZ1bmN0aW9uIChtYXApIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2NlbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTY2VuZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxheWVyQmFzZUNsYXNzLnByb3RvdHlwZS5vbkFkZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5ob29rcy5yZXNpemUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0aW5nX3RhbmdyYW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRpbmdfdGFuZ3JhbSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbWFwLm9uKCdyZXNpemUnLCB0aGlzLmhvb2tzLnJlc2l6ZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmhvb2tzLm1vdmUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl91cGRhdGluZ190YW5ncmFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGluZ190YW5ncmFtID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBtYXAuZ2V0Q2VudGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHZpZXcuem9vbSA9IE1hdGgubWluKG1hcC5nZXRab29tKCksIG1hcC5nZXRNYXhab29tKCkgfHwgR2VvLmRlZmF1bHRfdmlld19tYXhfem9vbSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS52aWV3LnNldFZpZXcodmlldyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuaW1tZWRpYXRlUmVkcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV2ZXJzZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGluZ190YW5ncmFtID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtYXAub24oJ21vdmUnLCB0aGlzLmhvb2tzLm1vdmUpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5ob29rcy56b29tc3RhcnQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl91cGRhdGluZ190YW5ncmFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGluZ190YW5ncmFtID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS52aWV3LnN0YXJ0Wm9vbSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGluZ190YW5ncmFtID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtYXAub24oJ3pvb21zdGFydCcsIHRoaXMuaG9va3Muem9vbXN0YXJ0KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaG9va3MuZHJhZ3N0YXJ0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLnZpZXcucGFubmluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtYXAub24oJ2RyYWdzdGFydCcsIHRoaXMuaG9va3MuZHJhZ3N0YXJ0KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaG9va3MuZHJhZ2VuZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS52aWV3LnBhbm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1hcC5vbignZHJhZ2VuZCcsIHRoaXMuaG9va3MuZHJhZ2VuZCk7XG5cbiAgICAgICAgICAgICAgICAvLyBGb3JjZSBsZWFmbGV0IHpvb20gYW5pbWF0aW9ucyBvZmZcbiAgICAgICAgICAgICAgICBtYXAuX3pvb21BbmltYXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLy8gTW9kaWZ5IGRlZmF1bHQgbGVhZmxldCBzY3JvbGwgd2hlZWwgYmVoYXZpb3JcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGlmeVNjcm9sbFdoZWVsQmVoYXZpb3IobWFwKTtcblxuICAgICAgICAgICAgICAgIC8vIFNldHVwIGZlYXR1cmUgc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cFNlbGVjdGlvbkV2ZW50SGFuZGxlcnMobWFwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkV2ZW50cyh0aGlzLm9wdGlvbnMuZXZlbnRzKTtcblxuICAgICAgICAgICAgICAgIC8vIEFkZCBHTCBjYW52YXMgdG8gbGF5ZXIgY29udGFpbmVyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5jb250YWluZXIgPSB0aGlzLmdldENvbnRhaW5lcigpO1xuXG4gICAgICAgICAgICAgICAgLy8gSW5pdGlhbCB2aWV3XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XG5cbiAgICAgICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gdGFuZ3JhbSBldmVudHNcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG1vdmU6IHRoaXMub25UYW5ncmFtVmlld1VwZGF0ZS5iaW5kKHRoaXMpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBVc2UgbGVhZmxldCdzIGV4aXN0aW5nIGV2ZW50IHN5c3RlbSBhcyB0aGUgY2FsbGJhY2sgbWVjaGFuaXNtXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5sb2FkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0aW5nX3RhbmdyYW0gPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXZlcnNlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRpbmdfdGFuZ3JhbSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZSgnaW5pdCcpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gICAgICAgICAgICAgICAgbGF5ZXJCYXNlQ2xhc3MucHJvdG90eXBlLm9uUmVtb3ZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgICAgICBtYXAub2ZmKCdyZXNpemUnLCB0aGlzLmhvb2tzLnJlc2l6ZSk7XG4gICAgICAgICAgICAgICAgbWFwLm9mZignbW92ZScsIHRoaXMuaG9va3MubW92ZSk7XG4gICAgICAgICAgICAgICAgbWFwLm9mZignem9vbXN0YXJ0JywgdGhpcy5ob29rcy56b29tc3RhcnQpO1xuICAgICAgICAgICAgICAgIG1hcC5vZmYoJ2RyYWdzdGFydCcsIHRoaXMuaG9va3MuZHJhZ3N0YXJ0KTtcbiAgICAgICAgICAgICAgICBtYXAub2ZmKCdkcmFnZW5kJywgdGhpcy5ob29rcy5kcmFnZW5kKTtcbiAgICAgICAgICAgICAgICBtYXAub2ZmKCdjbGljaycsIHRoaXMuaG9va3MuY2xpY2spO1xuICAgICAgICAgICAgICAgIG1hcC5vZmYoJ21vdXNlbW92ZScsIHRoaXMuaG9va3MubW91c2Vtb3ZlKTtcbiAgICAgICAgICAgICAgICBtYXAub2ZmKCdtb3VzZW91dCcsIHRoaXMuaG9va3MubW91c2VvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9va3MgPSB7fTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjZW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjcmVhdGVUaWxlOiBmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGNvb3Jkcy54ICsgJy8nICsgY29vcmRzLnkgKyAnLycgKyBjb29yZHMuejtcbiAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnZGF0YS10aWxlLWtleScsIGtleSk7XG4gICAgICAgICAgICAgICAgZGl2LnN0eWxlLndpZHRoID0gJzI1NnB4JztcbiAgICAgICAgICAgICAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gJzI1NnB4JztcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0RlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWJ1Z19vdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJsYXkudGV4dENvbnRlbnQgPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJsYXkuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVybGF5LnN0eWxlLmxlZnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVybGF5LnN0eWxlLnRvcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJsYXkuc3R5bGUuY29sb3IgPSAnd2hpdGUnO1xuICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVybGF5LnN0eWxlLmZvbnRTaXplID0gJzE2cHgnO1xuICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVybGF5LnN0eWxlLnRleHRPdXRsaW5lID0gJzFweCAjMDAwMDAwJztcbiAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcmxheS5zdHlsZS5wYWRkaW5nID0gJzhweCc7XG5cbiAgICAgICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRlYnVnX292ZXJsYXkpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnc29saWQnO1xuICAgICAgICAgICAgICAgICAgICBkaXYuc3R5bGUuYm9yZGVyQ29sb3IgPSAnd2hpdGUnO1xuICAgICAgICAgICAgICAgICAgICBkaXYuc3R5bGUuYm9yZGVyV2lkdGggPSAnMXB4JztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZGl2O1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gTW9kaWZ5IGxlYWZsZXQncyBkZWZhdWx0IHNjcm9sbCB3aGVlbCBiZWhhdmlvciB0byBoYXZlIGEgbXVjaCBtb3JlIHNlbnNpdHZlL2NvbnRpbnVvdXMgem9vbVxuICAgICAgICAgICAgLy8gTm90ZTogdGhpcyBzaG91bGQgYmUgZGVwcmVjYXRlZCBvbmNlIGxlYWZsZXQgY29udGludW91cyB6b29tIGlzIG1vcmUgd2lkZWx5IHVzZWQgYW5kIHRoZVxuICAgICAgICAgICAgLy8gZGVmYXVsdCBiZWhhdmlvciBpcyBwcmVzdW1hYmx5IGltcHJvdmVkXG4gICAgICAgICAgICBtb2RpZnlTY3JvbGxXaGVlbEJlaGF2aW9yOiBmdW5jdGlvbiAobWFwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2NlbmUudmlldy5jb250aW51b3VzX3pvb20gJiYgbWFwLnNjcm9sbFdoZWVsWm9vbSAmJiB0aGlzLm9wdGlvbnMubW9kaWZ5U2Nyb2xsV2hlZWwgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBsYXllciA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlbmFibGVkID0gbWFwLnNjcm9sbFdoZWVsWm9vbS5lbmFibGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAuc2Nyb2xsV2hlZWxab29tLmRpc2FibGUoKTsgLy8gZGlzYWJsZSBiZWZvcmUgbW9kaWZ5aW5nXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBtb2RpZnkgcHJvdG90eXBlIGFuZCBjdXJyZW50IGluc3RhbmNlLCBzbyBhZGQvcmVtb3ZlIGhvb2tzIHdvcmsgb24gZXhpc3RpbmcgcmVmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICBMLk1hcC5TY3JvbGxXaGVlbFpvb20uX29uV2hlZWxTY3JvbGwgPSBtYXAuc2Nyb2xsV2hlZWxab29tLl9vbldoZWVsU2Nyb2xsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9kaWZ5IHRvIHNraXAgZGVib3VuY2UsIGFzIGl0IHNlZW1zIHRvIGNhdXNlIGFuaW1hdGlvbi1zeW5jIGlzc3VlcyBpbiBDaHJvbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggVGFuZ3JhbSBjb250aW51b3VzIHJlbmRlcmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVsdGEgKz0gTC5Eb21FdmVudC5nZXRXaGVlbERlbHRhKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFzdE1vdXNlUG9zID0gdGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVyZm9ybVpvb20oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEwuRG9tRXZlbnQuc3RvcChlKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBMLk1hcC5TY3JvbGxXaGVlbFpvb20uX3BlcmZvcm1ab29tID0gbWFwLnNjcm9sbFdoZWVsWm9vbS5fcGVyZm9ybVpvb20gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5fbWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhID0gdGhpcy5fZGVsdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbSA9IG1hcC5nZXRab29tKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zdG9wKCk7IC8vIHN0b3AgcGFubmluZyBhbmQgZmx5IGFuaW1hdGlvbnMgaWYgYW55XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IHRoaXMgaXMgdGhlIG9ubHkgcmVhbCBtb2RpZmljYXRpb24gdG8gZGVmYXVsdCBsZWFmbGV0IGJlaGF2aW9yXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSAvPSA0MDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBNYXRoLm1heChNYXRoLm1pbihkZWx0YSwgNCksIC00KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhID0gbWFwLl9saW1pdFpvb20oem9vbSArIGRlbHRhKSAtIHpvb207XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlbHRhID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVsdGEpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXAub3B0aW9ucy5zY3JvbGxXaGVlbFpvb20gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwLnNldFpvb20oem9vbSArIGRlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwLnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLCB6b29tICsgZGVsdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci5kZWJvdW5jZVZpZXdSZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAuc2Nyb2xsV2hlZWxab29tLmVuYWJsZSgpOyAvLyByZS1lbmFibGUgYWZ0ZXIgbW9kaWZ5aW5nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB1cGRhdGVWaWV3OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZpZXcgPSB0aGlzLl9tYXAuZ2V0Q2VudGVyKCk7XG4gICAgICAgICAgICAgICAgdmlldy56b29tID0gTWF0aC5taW4odGhpcy5fbWFwLmdldFpvb20oKSwgdGhpcy5fbWFwLmdldE1heFpvb20oKSB8fCBHZW8uZGVmYXVsdF92aWV3X21heF96b29tKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLnZpZXcuc2V0Vmlldyh2aWV3KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHVwZGF0ZVNpemU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuX21hcC5nZXRTaXplKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5yZXNpemVNYXAoc2l6ZS54LCBzaXplLnkpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgb25UYW5ncmFtVmlld1VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbWFwIHx8IHRoaXMuX3VwZGF0aW5nX3RhbmdyYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGluZ190YW5ncmFtID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0VmlldyhbdGhpcy5zY2VuZS52aWV3LmNlbnRlci5sYXQsIHRoaXMuc2NlbmUudmlldy5jZW50ZXIubG5nXSwgdGhpcy5zY2VuZS52aWV3Lnpvb20sIHsgYW5pbWF0ZTogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXZlcnNlVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRpbmdfdGFuZ3JhbSA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNjZW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS51cGRhdGUoKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vIFJldmVyc2UgdGhlIENTUyBwb3NpdGlvbmluZyBMZWFmbGV0IGFwcGxpZXMgdG8gdGhlIGxheWVyLCBzaW5jZSBUYW5ncmFtJ3MgV2ViR0wgY2FudmFzXG4gICAgICAgICAgICAvLyBpcyBleHBlY3RlZCB0byBiZSAnYWJzb2x1dGVseScgcG9zaXRpb25lZC5cbiAgICAgICAgICAgIHJldmVyc2VUcmFuc2Zvcm06IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21hcCB8fCAhdGhpcy5zY2VuZSB8fCAhdGhpcy5zY2VuZS5jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciB0b3BfbGVmdCA9IHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChbMCwgMF0pO1xuICAgICAgICAgICAgICAgIEwuRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLnNjZW5lLmNvbnRhaW5lciwgdG9wX2xlZnQpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gVGllIExlYWZsZXQgZXZlbnQgaGFuZGxlcnMgdG8gVGFuZ3JhbSBmZWF0dXJlIHNlbGVjdGlvblxuICAgICAgICAgICAgc2V0dXBTZWxlY3Rpb25FdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAobWFwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uX2V2ZW50cyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5ob29rcy5jbGljayA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3NlbGVjdGlvbl9ldmVudHMuY2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2V0RmVhdHVyZUF0KGV2ZW50LmNvbnRhaW5lclBvaW50KS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuKHNlbGVjdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRzID0gT2JqZWN0LmFzc2lnbih7fSwgc2VsZWN0aW9uLCB7IGxlYWZsZXRfZXZlbnQ6IGV2ZW50IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25fZXZlbnRzLmNsaWNrKHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtYXAub24oJ2NsaWNrJywgdGhpcy5ob29rcy5jbGljayk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmhvb2tzLm1vdXNlbW92ZSA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3NlbGVjdGlvbl9ldmVudHMuaG92ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2V0RmVhdHVyZUF0KGV2ZW50LmNvbnRhaW5lclBvaW50KS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuKHNlbGVjdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRzID0gT2JqZWN0LmFzc2lnbih7fSwgc2VsZWN0aW9uLCB7IGxlYWZsZXRfZXZlbnQ6IGV2ZW50IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25fZXZlbnRzLmhvdmVyKHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtYXAub24oJ21vdXNlbW92ZScsIHRoaXMuaG9va3MubW91c2Vtb3ZlKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaG9va3MubW91c2VvdXQgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBtb3VzZSBsZWF2ZXMgbWFwLCBzZW5kIGFuIGFkZGl0aW9uYWwgc2VsZWN0aW9uIGV2ZW50IHRvIGluZGljYXRlIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zZWxlY3Rpb25fZXZlbnRzLmhvdmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25fZXZlbnRzLmhvdmVyKHsgY2hhbmdlZDogdHJ1ZSwgbGVhZmxldF9ldmVudDogZXZlbnQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1hcC5vbignbW91c2VvdXQnLCB0aGlzLmhvb2tzLm1vdXNlb3V0KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vIFNldCB1c2VyLWRlZmluZWQgaGFuZGxlcnMgZm9yIGZlYXR1cmUgc2VsZWN0aW9uIGV2ZW50c1xuICAgICAgICAgICAgLy8gQ3VycmVudGx5IG9ubHkgb25lIGhhbmRsZXIgY2FuIGJlIGRlZmluZWQgZm9yIGVhY2ggZXZlbnQgdHlwZVxuICAgICAgICAgICAgLy8gRXZlbnQgdHlwZXMgYXJlOiBgY2xpY2tgLCBgaG92ZXJgIChsZWFmbGV0IGBtb3VzZW1vdmVgKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW9uRXZlbnRzOiBmdW5jdGlvbiAoZXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uX2V2ZW50cyA9IE9iamVjdC5hc3NpZ24odGhpcy5fc2VsZWN0aW9uX2V2ZW50cywgZXZlbnRzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGxheWVyIGNsYXNzXG4gICAgICAgIExlYWZsZXRMYXllciA9IGxheWVyQmFzZUNsYXNzLmV4dGVuZChsYXllckNsYXNzQ29uZmlnKTtcblxuICAgICAgICAvLyBQb2x5ZmlsbCBzb21lIDEuMCBtZXRob2RzXG4gICAgICAgIGlmICh0eXBlb2YgTGVhZmxldExheWVyLnJlbW92ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgTGVhZmxldExheWVyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5yZW1vdmVMYXllcih0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKCdyZW1vdmUnKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBMZWFmbGV0TGF5ZXIubGF5ZXJCYXNlQ2xhc3MgPSBsYXllckJhc2VDbGFzcztcbiAgICAgICAgTGVhZmxldExheWVyLmxlYWZsZXRWZXJzaW9uID0gbGVhZmxldFZlcnNpb247XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMZWFmbGV0TGF5ZXIob3B0aW9ucyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFNoYWRlclByb2dyYW0gZnJvbSAnLi9nbC9zaGFkZXJfcHJvZ3JhbSc7XG5pbXBvcnQgc2hhZGVyU291cmNlcyBmcm9tICcuL2dsL3NoYWRlcl9zb3VyY2VzJzsgLy8gYnVpbHQtaW4gc2hhZGVyc1xuaW1wb3J0IEdMU0wgZnJvbSAnLi9nbC9nbHNsJztcbmltcG9ydCBHZW8gZnJvbSAnLi9nZW8nO1xuaW1wb3J0IHtTdHlsZVBhcnNlcn0gZnJvbSAnLi9zdHlsZXMvc3R5bGVfcGFyc2VyJztcblxuLy8gQWJzdHJhY3QgbGlnaHRcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZ2h0IHtcblxuICAgIGNvbnN0cnVjdG9yICh2aWV3LCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gY29uZmlnLm5hbWU7XG4gICAgICAgIHRoaXMudmlldyA9IHZpZXc7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5hbWJpZW50ID09IG51bGwgfHwgdHlwZW9mIGNvbmZpZy5hbWJpZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhpcy5hbWJpZW50ID0gR0xTTC5leHBhbmRWZWM0KGNvbmZpZy5hbWJpZW50IHx8IDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbWJpZW50ID0gU3R5bGVQYXJzZXIucGFyc2VDb2xvcihjb25maWcuYW1iaWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLmRpZmZ1c2UgPT0gbnVsbCB8fCB0eXBlb2YgY29uZmlnLmRpZmZ1c2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLmRpZmZ1c2UgPSBHTFNMLmV4cGFuZFZlYzQoY29uZmlnLmRpZmZ1c2UgIT0gbnVsbCA/IGNvbmZpZy5kaWZmdXNlIDogMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpZmZ1c2UgPSBTdHlsZVBhcnNlci5wYXJzZUNvbG9yKGNvbmZpZy5kaWZmdXNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuc3BlY3VsYXIgPT0gbnVsbCB8fCB0eXBlb2YgY29uZmlnLnNwZWN1bGFyID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhpcy5zcGVjdWxhciA9IEdMU0wuZXhwYW5kVmVjNChjb25maWcuc3BlY3VsYXIgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNwZWN1bGFyID0gU3R5bGVQYXJzZXIucGFyc2VDb2xvcihjb25maWcuc3BlY3VsYXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbGlnaHQgYnkgdHlwZSBuYW1lLCBmYWN0b3J5LXN0eWxlXG4gICAgLy8gJ2NvbmZpZycgbXVzdCBpbmNsdWRlICduYW1lJyBhbmQgJ3R5cGUnLCBhbG9uZyB3aXRoIGFueSBvdGhlciB0eXBlLXNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBzdGF0aWMgY3JlYXRlICh2aWV3LCBjb25maWcpIHtcbiAgICAgICAgaWYgKExpZ2h0LnR5cGVzW2NvbmZpZy50eXBlXSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMaWdodC50eXBlc1tjb25maWcudHlwZV0odmlldywgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBsaWdodCBmb3IgYSBzdHlsZTogZnJhZ21lbnQgbGlnaHRpbmcsIHZlcnRleCBsaWdodGluZywgb3Igbm9uZVxuICAgIHN0YXRpYyBzZXRNb2RlIChtb2RlLCBzdHlsZSkge1xuICAgICAgICBpZiAobW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgbW9kZSA9ICdmcmFnbWVudCc7XG4gICAgICAgIH1cbiAgICAgICAgbW9kZSA9IExpZ2h0LmVuYWJsZWQgJiYgKChtb2RlICE9IG51bGwpID8gbW9kZSA6ICdmcmFnbWVudCcpOyAvLyBkZWZhdWx0IHRvIGZyYWdtZW50IGxpZ2h0aW5nXG4gICAgICAgIHN0eWxlLmRlZmluZXNbJ1RBTkdSQU1fTElHSFRJTkdfRlJBR01FTlQnXSA9IChtb2RlID09PSAnZnJhZ21lbnQnKTtcbiAgICAgICAgc3R5bGUuZGVmaW5lc1snVEFOR1JBTV9MSUdIVElOR19WRVJURVgnXSA9IChtb2RlID09PSAndmVydGV4Jyk7XG4gICAgfVxuXG4gICAgLy8gSW5qZWN0IGFsbCBwcm92aWRlZCBsaWdodCBkZWZpbml0aW9ucywgYW5kIGNhbGN1bGF0ZSBjdW11bGF0aXZlIGxpZ2h0IGZ1bmN0aW9uXG4gICAgc3RhdGljIGluamVjdCAobGlnaHRzKSB7XG4gICAgICAgIC8vIENsZWFyIHByZXZpb3VzIGluamVjdGlvbnNcbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5yZW1vdmVCbG9jayhMaWdodC5ibG9jayk7XG5cbiAgICAgICAgLy8gSWYgbGlnaHRpbmcgaXMgZ2xvYmFsbHkgZGlzYWJsZWQsIG5vdGhpbmcgaXMgaW5qZWN0ZWQgKG1vc3RseSBmb3IgZGVidWdnaW5nIG9yIGxpdmUgZWRpdGluZylcbiAgICAgICAgaWYgKCFMaWdodC5lbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25zdHJ1Y3QgY29kZSB0byBjYWxjdWxhdGUgZWFjaCBsaWdodCBpbnN0YW5jZVxuICAgICAgICBsZXQgY2FsY3VsYXRlTGlnaHRzID0gXCJcIjtcbiAgICAgICAgaWYgKGxpZ2h0cyAmJiBPYmplY3Qua2V5cyhsaWdodHMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIENvbGxlY3QgdW5pcXVlcyB0eXBlcyBvZiBsaWdodHNcbiAgICAgICAgICAgIGxldCB0eXBlcyA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgbGlnaHRfbmFtZSBpbiBsaWdodHMpIHtcbiAgICAgICAgICAgICAgICB0eXBlc1tsaWdodHNbbGlnaHRfbmFtZV0udHlwZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJbmplY3QgZWFjaCB0eXBlIG9mIGxpZ2h0XG4gICAgICAgICAgICBmb3IgKGxldCB0eXBlIGluIHR5cGVzKSB7XG4gICAgICAgICAgICAgICAgTGlnaHQudHlwZXNbdHlwZV0uaW5qZWN0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEluamVjdCBwZXItaW5zdGFuY2UgYmxvY2tzIGFuZCBjb25zdHJ1Y3QgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBlYWNoIGxpZ2h0XG4gICAgICAgICAgICBmb3IgKGxldCBsaWdodF9uYW1lIGluIGxpZ2h0cykge1xuICAgICAgICAgICAgICAgIC8vIERlZmluZSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgIGxpZ2h0c1tsaWdodF9uYW1lXS5pbmplY3QoKTtcblxuICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgY2FsY3VsYXRpb24gZnVuY3Rpb24gdG8gdGhlIGxpc3RcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVMaWdodHMgKz0gYGNhbGN1bGF0ZUxpZ2h0KCR7bGlnaHRfbmFtZX0sIF9leWVUb1BvaW50LCBfbm9ybWFsKTtcXG5gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgbm8gbGlnaHQgaXMgZGVmaW5lZCwgdXNlIDEwMCUgb21uaWRpcmVjdGlvbmFsIGRpZmZ1c2UgbGlnaHRcbiAgICAgICAgICAgIGNhbGN1bGF0ZUxpZ2h0cyA9IGBcbiAgICAgICAgICAgICAgICAjaWZkZWYgVEFOR1JBTV9NQVRFUklBTF9ESUZGVVNFXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0X2FjY3VtdWxhdG9yX2RpZmZ1c2UgPSB2ZWM0KDEuKTtcbiAgICAgICAgICAgICAgICAjZW5kaWZcbiAgICAgICAgICAgIGA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHbHVlIHRvZ2V0aGVyIHRoZSBmaW5hbCBsaWdodGluZyBmdW5jdGlvbiB0aGF0IHN1bXMgYWxsIHRoZSBsaWdodHNcbiAgICAgICAgbGV0IGNhbGN1bGF0ZUZ1bmN0aW9uID0gYFxuICAgICAgICAgICAgdmVjNCBjYWxjdWxhdGVMaWdodGluZyhpbiB2ZWMzIF9leWVUb1BvaW50LCBpbiB2ZWMzIF9ub3JtYWwsIGluIHZlYzQgX2NvbG9yKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBEbyBpbml0aWFsIG1hdGVyaWFsIGNhbGN1bGF0aW9ucyBvdmVyIG5vcm1hbCwgZW1pc3Npb24sIGFtYmllbnQsIGRpZmZ1c2UgYW5kIHNwZWN1bGFyIHZhbHVlc1xuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZU1hdGVyaWFsKF9leWVUb1BvaW50LF9ub3JtYWwpO1xuXG4gICAgICAgICAgICAgICAgLy8gVW4gcm9sbCB0aGUgbG9vcCBvZiBpbmRpdmlkdWFsIGxpZ3RocyB0byBjYWxjdWxhdGVcbiAgICAgICAgICAgICAgICAke2NhbGN1bGF0ZUxpZ2h0c31cblxuICAgICAgICAgICAgICAgIC8vICBGaW5hbCBsaWdodCBpbnRlbnNpdHkgY2FsY3VsYXRpb25cbiAgICAgICAgICAgICAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xuXG4gICAgICAgICAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRU1JU1NJT05cbiAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBtYXRlcmlhbC5lbWlzc2lvbjtcbiAgICAgICAgICAgICAgICAjZW5kaWZcblxuICAgICAgICAgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX0FNQklFTlRcbiAgICAgICAgICAgICAgICAgICAgY29sb3IgKz0gbGlnaHRfYWNjdW11bGF0b3JfYW1iaWVudCAqIF9jb2xvciAqIG1hdGVyaWFsLmFtYmllbnQ7XG4gICAgICAgICAgICAgICAgI2Vsc2VcbiAgICAgICAgICAgICAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgKz0gbGlnaHRfYWNjdW11bGF0b3JfYW1iaWVudCAqIF9jb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2U7XG4gICAgICAgICAgICAgICAgICAgICNlbmRpZlxuICAgICAgICAgICAgICAgICNlbmRpZlxuXG4gICAgICAgICAgICAgICAgI2lmZGVmIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRVxuICAgICAgICAgICAgICAgICAgICBjb2xvciArPSBsaWdodF9hY2N1bXVsYXRvcl9kaWZmdXNlICogX2NvbG9yICogbWF0ZXJpYWwuZGlmZnVzZTtcbiAgICAgICAgICAgICAgICAjZW5kaWZcblxuICAgICAgICAgICAgICAgICNpZmRlZiBUQU5HUkFNX01BVEVSSUFMX1NQRUNVTEFSXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yICs9IGxpZ2h0X2FjY3VtdWxhdG9yX3NwZWN1bGFyICogbWF0ZXJpYWwuc3BlY3VsYXI7XG4gICAgICAgICAgICAgICAgI2VuZGlmXG5cbiAgICAgICAgICAgICAgICAvLyBDbGFtcCBmaW5hbCBjb2xvclxuICAgICAgICAgICAgICAgIGNvbG9yID0gY2xhbXAoY29sb3IsIDAuMCwgMS4wKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBjb2xvcjtcbiAgICAgICAgICAgIH1gO1xuXG4gICAgICAgIFNoYWRlclByb2dyYW0uYWRkQmxvY2soTGlnaHQuYmxvY2ssIGNhbGN1bGF0ZUZ1bmN0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBDb21tb24gaW5zdGFuY2UgZGVmaW5pdGlvblxuICAgIGluamVjdCAoKSB7XG4gICAgICAgIGxldCBpbnN0YW5jZSA9ICBgXG4gICAgICAgICAgICB1bmlmb3JtICR7dGhpcy5zdHJ1Y3RfbmFtZX0gdV8ke3RoaXMubmFtZX07XG4gICAgICAgICAgICAke3RoaXMuc3RydWN0X25hbWV9ICR7dGhpcy5uYW1lfTtcbiAgICAgICAgICAgIGA7XG4gICAgICAgIGxldCBhc3NpZ24gPSBgXG4gICAgICAgICAgICAke3RoaXMubmFtZX0gPSB1XyR7dGhpcy5uYW1lfTtcXG5cbiAgICAgICAgYDtcblxuICAgICAgICBTaGFkZXJQcm9ncmFtLmFkZEJsb2NrKExpZ2h0LmJsb2NrLCBpbnN0YW5jZSk7XG4gICAgICAgIFNoYWRlclByb2dyYW0uYWRkQmxvY2soJ3NldHVwJywgYXNzaWduKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbWV0aG9kIGNhbGxlZCBvbmNlIHBlciBmcmFtZVxuICAgIHVwZGF0ZSAoKSB7XG4gICAgfVxuXG4gICAgLy8gQ2FsbGVkIG9uY2UgcGVyIGZyYW1lIHBlciBwcm9ncmFtIChlLmcuIGZvciBtYWluIHJlbmRlciBwYXNzLCB0aGVuIGZvciBlYWNoIGFkZGl0aW9uYWxcbiAgICAvLyBwYXNzIGZvciBmZWF0dXJlIHNlbGVjdGlvbiwgZXRjLilcbiAgICBzZXR1cFByb2dyYW0gKF9wcm9ncmFtKSB7XG4gICAgICAgIC8vICBUaHJlZSBjb21tb24gbGlnaHQgcHJvcGVydGllc1xuICAgICAgICBfcHJvZ3JhbS51bmlmb3JtKCc0ZnYnLCBgdV8ke3RoaXMubmFtZX0uYW1iaWVudGAsIHRoaXMuYW1iaWVudCk7XG4gICAgICAgIF9wcm9ncmFtLnVuaWZvcm0oJzRmdicsIGB1XyR7dGhpcy5uYW1lfS5kaWZmdXNlYCwgdGhpcy5kaWZmdXNlKTtcbiAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnNGZ2JywgYHVfJHt0aGlzLm5hbWV9LnNwZWN1bGFyYCwgdGhpcy5zcGVjdWxhcik7XG4gICAgfVxuXG59XG5cbkxpZ2h0LnR5cGVzID0ge307IC8vIHJlZmVyZW5jZXMgdG8gc3ViY2xhc3NlcyBieSBzaG9ydCBuYW1lXG5MaWdodC5ibG9jayA9ICdsaWdodGluZyc7IC8vIHNoYWRlciBibG9jayBuYW1lXG5MaWdodC5lbmFibGVkID0gdHJ1ZTsgLy8gbGlnaHRpbmcgY2FuIGJlIGdsb2JhbGx5IGVuYWJsZWQvZGlzYWJsZWRcblxuXG4vLyBMaWdodCBzdWJjbGFzc2VzXG5jbGFzcyBBbWJpZW50TGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cbiAgICBjb25zdHJ1Y3Rvcih2aWV3LCBjb25maWcpIHtcbiAgICAgICAgc3VwZXIodmlldywgY29uZmlnKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2FtYmllbnQnO1xuICAgICAgICB0aGlzLnN0cnVjdF9uYW1lID0gJ0FtYmllbnRMaWdodCc7XG4gICAgfVxuXG4gICAgLy8gSW5qZWN0IHN0cnVjdCBhbmQgY2FsY3VsYXRlIGZ1bmN0aW9uXG4gICAgc3RhdGljIGluamVjdCgpIHtcbiAgICAgICAgU2hhZGVyUHJvZ3JhbS5hZGRCbG9jayhMaWdodC5ibG9jaywgc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9hbWJpZW50TGlnaHQnXSk7XG4gICAgfVxuXG4gICAgc2V0dXBQcm9ncmFtIChfcHJvZ3JhbSkge1xuICAgICAgICBfcHJvZ3JhbS51bmlmb3JtKCc0ZnYnLCBgdV8ke3RoaXMubmFtZX0uYW1iaWVudGAsIHRoaXMuYW1iaWVudCk7XG4gICAgfVxuXG59XG5MaWdodC50eXBlc1snYW1iaWVudCddID0gQW1iaWVudExpZ2h0O1xuXG5jbGFzcyBEaXJlY3Rpb25hbExpZ2h0IGV4dGVuZHMgTGlnaHQge1xuXG4gICAgY29uc3RydWN0b3IodmlldywgY29uZmlnKSB7XG4gICAgICAgIHN1cGVyKHZpZXcsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdkaXJlY3Rpb25hbCc7XG4gICAgICAgIHRoaXMuc3RydWN0X25hbWUgPSAnRGlyZWN0aW9uYWxMaWdodCc7XG5cbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSAoY29uZmlnLmRpcmVjdGlvbiB8fCBbMC4yLCAwLjcsIC0wLjVdKS5tYXAocGFyc2VGbG9hdCk7IC8vIFt4LCB5LCB6XVxuICAgIH1cblxuICAgIC8vIEluamVjdCBzdHJ1Y3QgYW5kIGNhbGN1bGF0ZSBmdW5jdGlvblxuICAgIHN0YXRpYyBpbmplY3QoKSB7XG4gICAgICAgIFNoYWRlclByb2dyYW0uYWRkQmxvY2soTGlnaHQuYmxvY2ssIHNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvZGlyZWN0aW9uYWxMaWdodCddKTtcbiAgICB9XG5cbiAgICBzZXR1cFByb2dyYW0gKF9wcm9ncmFtKSB7XG4gICAgICAgIHN1cGVyLnNldHVwUHJvZ3JhbShfcHJvZ3JhbSk7XG4gICAgICAgIF9wcm9ncmFtLnVuaWZvcm0oJzNmdicsIGB1XyR7dGhpcy5uYW1lfS5kaXJlY3Rpb25gLCB0aGlzLmRpcmVjdGlvbik7XG4gICAgfVxuXG59XG5MaWdodC50eXBlc1snZGlyZWN0aW9uYWwnXSA9IERpcmVjdGlvbmFsTGlnaHQ7XG5cblxuY2xhc3MgUG9pbnRMaWdodCBleHRlbmRzIExpZ2h0IHtcblxuICAgIGNvbnN0cnVjdG9yICh2aWV3LCBjb25maWcpIHtcbiAgICAgICAgc3VwZXIodmlldywgY29uZmlnKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3BvaW50JztcbiAgICAgICAgdGhpcy5zdHJ1Y3RfbmFtZSA9ICdQb2ludExpZ2h0JztcblxuICAgICAgICB0aGlzLnBvc2l0aW9uID0gY29uZmlnLnBvc2l0aW9uIHx8IFswLCAwLCAnMTAwcHgnXTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbl9leWUgPSBbXTsgLy8gcG9zaXRpb24gaW4gZXllc3BhY2VcbiAgICAgICAgdGhpcy5vcmlnaW4gPSBjb25maWcub3JpZ2luIHx8ICdncm91bmQnO1xuICAgICAgICB0aGlzLmF0dGVudWF0aW9uID0gIWlzTmFOKHBhcnNlRmxvYXQoY29uZmlnLmF0dGVudWF0aW9uKSkgPyBwYXJzZUZsb2F0KGNvbmZpZy5hdHRlbnVhdGlvbikgOiAwO1xuXG4gICAgICAgIGlmIChjb25maWcucmFkaXVzKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb25maWcucmFkaXVzKSAmJiBjb25maWcucmFkaXVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIHRoaXMucmFkaXVzID0gY29uZmlnLnJhZGl1cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmFkaXVzID0gW251bGwsIGNvbmZpZy5yYWRpdXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5qZWN0IHN0cnVjdCBhbmQgY2FsY3VsYXRlIGZ1bmN0aW9uXG4gICAgc3RhdGljIGluamVjdCAoKSB7XG4gICAgICAgIFNoYWRlclByb2dyYW0uYWRkQmxvY2soTGlnaHQuYmxvY2ssIHNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvcG9pbnRMaWdodCddKTtcbiAgICB9XG5cbiAgICAvLyBJbmplY3QgaXNudGFuY2Utc3BlY2lmaWMgc2V0dGluZ3NcbiAgICBpbmplY3QoKSB7XG4gICAgICAgIHN1cGVyLmluamVjdCgpO1xuXG4gICAgICAgIFNoYWRlclByb2dyYW0uZGVmaW5lc1snVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX0VYUE9ORU5UJ10gPSAodGhpcy5hdHRlbnVhdGlvbiAhPT0gMCk7XG4gICAgICAgIFNoYWRlclByb2dyYW0uZGVmaW5lc1snVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX0lOTkVSX1JBRElVUyddID0gKHRoaXMucmFkaXVzICE9IG51bGwgJiYgdGhpcy5yYWRpdXNbMF0gIT0gbnVsbCk7XG4gICAgICAgIFNoYWRlclByb2dyYW0uZGVmaW5lc1snVEFOR1JBTV9QT0lOVExJR0hUX0FUVEVOVUFUSU9OX09VVEVSX1JBRElVUyddID0gKHRoaXMucmFkaXVzICE9IG51bGwpO1xuICAgIH1cblxuICAgIHVwZGF0ZSAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRXllUG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICB1cGRhdGVFeWVQb3NpdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLm9yaWdpbiA9PT0gJ3dvcmxkJykge1xuICAgICAgICAgICAgLy8gRm9yIHdvcmxkIG9yaWdpbiwgZm9ybWF0IGlzOiBbbG9uZ2l0dWRlLCBsYXRpdHVkZSwgbWV0ZXJzIChkZWZhdWx0KSBvciBwaXhlbHMgdy9weCB1bml0c11cblxuICAgICAgICAgICAgLy8gTW92ZSBsaWdodCdzIHdvcmxkIHBvc2l0aW9uIGludG8gY2FtZXJhIHNwYWNlXG4gICAgICAgICAgICBsZXQgW3gsIHldID0gR2VvLmxhdExuZ1RvTWV0ZXJzKHRoaXMucG9zaXRpb24pO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbl9leWVbMF0gPSB4IC0gdGhpcy52aWV3LmNhbWVyYS5wb3NpdGlvbl9tZXRlcnNbMF07XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uX2V5ZVsxXSA9IHkgLSB0aGlzLnZpZXcuY2FtZXJhLnBvc2l0aW9uX21ldGVyc1sxXTtcblxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbl9leWVbMl0gPSBTdHlsZVBhcnNlci5jb252ZXJ0VW5pdHModGhpcy5wb3NpdGlvblsyXSxcbiAgICAgICAgICAgICAgICB7IHpvb206IHRoaXMudmlldy56b29tLCBtZXRlcnNfcGVyX3BpeGVsOiBHZW8ubWV0ZXJzUGVyUGl4ZWwodGhpcy52aWV3Lnpvb20pIH0pO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbl9leWVbMl0gPSB0aGlzLnBvc2l0aW9uX2V5ZVsyXSAtIHRoaXMudmlldy5jYW1lcmEucG9zaXRpb25fbWV0ZXJzWzJdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9yaWdpbiA9PT0gJ2dyb3VuZCcgfHwgdGhpcy5vcmlnaW4gPT09ICdjYW1lcmEnKSB7XG4gICAgICAgICAgICAvLyBGb3IgY2FtZXJhIG9yIGdyb3VuZCBvcmlnaW4sIGZvcm1hdCBpczogW3gsIHksIHpdIGluIG1ldGVycyAoZGVmYXVsdCkgb3IgcGl4ZWxzIHcvcHggdW5pdHNcblxuICAgICAgICAgICAgLy8gTGlnaHQgaXMgaW4gY2FtZXJhIHNwYWNlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25fZXllID0gU3R5bGVQYXJzZXIuY29udmVydFVuaXRzKHRoaXMucG9zaXRpb24sXG4gICAgICAgICAgICAgICAgeyB6b29tOiB0aGlzLnZpZXcuem9vbSwgbWV0ZXJzX3Blcl9waXhlbDogR2VvLm1ldGVyc1BlclBpeGVsKHRoaXMudmlldy56b29tKSB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luID09PSAnZ3JvdW5kJykge1xuICAgICAgICAgICAgICAgIC8vIExlYXZlIGxpZ2h0J3MgeHkgaW4gY2FtZXJhIHNwYWNlLCBidXQgeiBuZWVkcyB0byBiZSBtb3ZlZCByZWxhdGl2ZSB0byBncm91bmQgcGxhbmVcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uX2V5ZVsyXSA9IHRoaXMucG9zaXRpb25fZXllWzJdIC0gdGhpcy52aWV3LmNhbWVyYS5wb3NpdGlvbl9tZXRlcnNbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXR1cFByb2dyYW0gKF9wcm9ncmFtKSB7XG4gICAgICAgIHN1cGVyLnNldHVwUHJvZ3JhbShfcHJvZ3JhbSk7XG5cbiAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnNGYnLCBgdV8ke3RoaXMubmFtZX0ucG9zaXRpb25gLFxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbl9leWVbMF0sIHRoaXMucG9zaXRpb25fZXllWzFdLCB0aGlzLnBvc2l0aW9uX2V5ZVsyXSwgMSk7XG5cbiAgICAgICAgaWYoU2hhZGVyUHJvZ3JhbS5kZWZpbmVzWydUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fRVhQT05FTlQnXSkge1xuICAgICAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnMWYnLCBgdV8ke3RoaXMubmFtZX0uYXR0ZW51YXRpb25FeHBvbmVudGAsIHRoaXMuYXR0ZW51YXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoU2hhZGVyUHJvZ3JhbS5kZWZpbmVzWydUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fSU5ORVJfUkFESVVTJ10pIHtcbiAgICAgICAgICAgIF9wcm9ncmFtLnVuaWZvcm0oJzFmJywgYHVfJHt0aGlzLm5hbWV9LmlubmVyUmFkaXVzYCxcbiAgICAgICAgICAgICAgICBTdHlsZVBhcnNlci5jb252ZXJ0VW5pdHModGhpcy5yYWRpdXNbMF0sXG4gICAgICAgICAgICAgICAgICAgIHsgem9vbTogdGhpcy52aWV3Lnpvb20sIG1ldGVyc19wZXJfcGl4ZWw6IEdlby5tZXRlcnNQZXJQaXhlbCh0aGlzLnZpZXcuem9vbSkgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoU2hhZGVyUHJvZ3JhbS5kZWZpbmVzWydUQU5HUkFNX1BPSU5UTElHSFRfQVRURU5VQVRJT05fT1VURVJfUkFESVVTJ10pIHtcbiAgICAgICAgICAgIF9wcm9ncmFtLnVuaWZvcm0oJzFmJywgYHVfJHt0aGlzLm5hbWV9Lm91dGVyUmFkaXVzYCxcbiAgICAgICAgICAgICAgICBTdHlsZVBhcnNlci5jb252ZXJ0VW5pdHModGhpcy5yYWRpdXNbMV0sXG4gICAgICAgICAgICAgICAgICAgIHsgem9vbTogdGhpcy52aWV3Lnpvb20sIG1ldGVyc19wZXJfcGl4ZWw6IEdlby5tZXRlcnNQZXJQaXhlbCh0aGlzLnZpZXcuem9vbSkgfSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuTGlnaHQudHlwZXNbJ3BvaW50J10gPSBQb2ludExpZ2h0O1xuXG5cbmNsYXNzIFNwb3RMaWdodCBleHRlbmRzIFBvaW50TGlnaHQge1xuXG4gICAgY29uc3RydWN0b3IgKHZpZXcsIGNvbmZpZykge1xuICAgICAgICBzdXBlcih2aWV3LCBjb25maWcpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnc3BvdGxpZ2h0JztcbiAgICAgICAgdGhpcy5zdHJ1Y3RfbmFtZSA9ICdTcG90TGlnaHQnO1xuXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gKGNvbmZpZy5kaXJlY3Rpb24gfHwgWzAsIDAsIC0xXSkubWFwKHBhcnNlRmxvYXQpOyAvLyBbeCwgeSwgel1cbiAgICAgICAgdGhpcy5leHBvbmVudCA9IGNvbmZpZy5leHBvbmVudCA/IHBhcnNlRmxvYXQoY29uZmlnLmV4cG9uZW50KSA6IDAuMjtcbiAgICAgICAgdGhpcy5hbmdsZSA9IGNvbmZpZy5hbmdsZSA/IHBhcnNlRmxvYXQoY29uZmlnLmFuZ2xlKSA6IDIwO1xuICAgIH1cblxuICAgIC8vIEluamVjdCBzdHJ1Y3QgYW5kIGNhbGN1bGF0ZSBmdW5jdGlvblxuICAgIHN0YXRpYyBpbmplY3QgKCkge1xuICAgICAgICBTaGFkZXJQcm9ncmFtLmFkZEJsb2NrKExpZ2h0LmJsb2NrLCBzaGFkZXJTb3VyY2VzWydnbC9zaGFkZXJzL3Nwb3RMaWdodCddKTtcbiAgICB9XG5cbiAgICBzZXR1cFByb2dyYW0gKF9wcm9ncmFtKSB7XG4gICAgICAgIHN1cGVyLnNldHVwUHJvZ3JhbShfcHJvZ3JhbSk7XG5cbiAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnM2Z2JywgYHVfJHt0aGlzLm5hbWV9LmRpcmVjdGlvbmAsIHRoaXMuZGlyZWN0aW9uKTtcbiAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnMWYnLCBgdV8ke3RoaXMubmFtZX0uc3BvdENvc0N1dG9mZmAsIE1hdGguY29zKHRoaXMuYW5nbGUgKiAzLjE0MTU5IC8gMTgwKSk7XG4gICAgICAgIF9wcm9ncmFtLnVuaWZvcm0oJzFmJywgYHVfJHt0aGlzLm5hbWV9LnNwb3RFeHBvbmVudGAsIHRoaXMuZXhwb25lbnQpO1xuICAgIH1cblxufVxuTGlnaHQudHlwZXNbJ3Nwb3RsaWdodCddID0gU3BvdExpZ2h0O1xuIiwiaW1wb3J0IHNoYWRlclNvdXJjZXMgZnJvbSAnLi9nbC9zaGFkZXJfc291cmNlcyc7IC8vIGJ1aWx0LWluIHNoYWRlcnNcbmltcG9ydCBHTFNMIGZyb20gJy4vZ2wvZ2xzbCc7XG5pbXBvcnQge1N0eWxlUGFyc2VyfSBmcm9tICcuL3N0eWxlcy9zdHlsZV9wYXJzZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXRlcmlhbCB7XG4gICAgY29uc3RydWN0b3IgKGNvbmZpZykge1xuXG4gICAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcblxuICAgICAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGFsbCBoYXZlIHRoZSBzYW1lIGRlZmF1bHRzLCBzbyB0aGV5IGNhbiBiZSBzZXQgaW4gYnVsa1xuICAgICAgICBmb3IgKGxldCBwcm9wIG9mIFsnZW1pc3Npb24nLCAnYW1iaWVudCcsICdkaWZmdXNlJywgJ3NwZWN1bGFyJ10pIHtcbiAgICAgICAgICAgIGlmIChjb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWdbcHJvcF0udGV4dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTogY29uZmlnW3Byb3BdLnRleHR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nOiBjb25maWdbcHJvcF0ubWFwcGluZyB8fCAnc3BoZXJlbWFwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiBHTFNMLmV4cGFuZFZlYzMoY29uZmlnW3Byb3BdLnNjYWxlICE9IG51bGwgPyBjb25maWdbcHJvcF0uc2NhbGUgOiAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogR0xTTC5leHBhbmRWZWM0KGNvbmZpZ1twcm9wXS5hbW91bnQgIT0gbnVsbCA/IGNvbmZpZ1twcm9wXS5hbW91bnQgOiAxKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnW3Byb3BdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BdID0geyBhbW91bnQ6IEdMU0wuZXhwYW5kVmVjNChjb25maWdbcHJvcF0pIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdbcHJvcF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbcHJvcF0gPSB7IGFtb3VudDogU3R5bGVQYXJzZXIucGFyc2VDb2xvcihjb25maWdbcHJvcF0pIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4dHJhIHNwZWN1bGFyIHByb3BzXG4gICAgICAgIGlmICh0aGlzLnNwZWN1bGFyKSB7XG4gICAgICAgICAgICB0aGlzLnNwZWN1bGFyLnNoaW5pbmVzcyA9IGNvbmZpZy5zaGluaW5lc3MgPyBwYXJzZUZsb2F0KGNvbmZpZy5zaGluaW5lc3MpIDogMC4yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm9ybWFsIG1hcHBpbmdcbiAgICAgICAgaWYgKGNvbmZpZy5ub3JtYWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5ub3JtYWwgPSB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZTogY29uZmlnLm5vcm1hbC50ZXh0dXJlLFxuICAgICAgICAgICAgICAgIG1hcHBpbmc6IGNvbmZpZy5ub3JtYWwubWFwcGluZyB8fCAndHJpcGxhbmFyJyxcbiAgICAgICAgICAgICAgICBzY2FsZTogR0xTTC5leHBhbmRWZWMzKGNvbmZpZy5ub3JtYWwuc2NhbGUgIT0gbnVsbCA/IGNvbmZpZy5ub3JtYWwuc2NhbGUgOiAxKSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IGNvbmZpZy5ub3JtYWwuYW1vdW50ICE9IG51bGwgPyBjb25maWcubm9ybWFsLmFtb3VudCA6IDFcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZXRlcm1pbmUgaWYgYSBtYXRlcmlhbCBjb25maWcgYmxvY2sgaGFzIHN1ZmZpY2llbnQgcHJvcGVydGllcyB0byBjcmVhdGUgYSBtYXRlcmlhbFxuICAgIHN0YXRpYyBpc1ZhbGlkIChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLmVtaXNzaW9uID09IG51bGwgJiZcbiAgICAgICAgICAgIGNvbmZpZy5hbWJpZW50ID09IG51bGwgJiZcbiAgICAgICAgICAgIGNvbmZpZy5kaWZmdXNlID09IG51bGwgJiZcbiAgICAgICAgICAgIGNvbmZpZy5zcGVjdWxhciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpbmplY3QgKHN0eWxlKSB7XG4gICAgICAgIC8vIEZvciBlYWNoIHByb3BlcnR5LCBzZXRzIGRlZmluZXMgdG8gY29uZmlndXJlIHRleHR1cmUgbWFwcGluZywgd2l0aCBhIHBhdHRlcm4gbGlrZTpcbiAgICAgICAgLy8gICBUQU5HUkFNX01BVEVSSUFMX0RJRkZVU0UsIFRBTkdSQU1fTUFURVJJQUxfRElGRlVTRV9URVhUVVJFLCBUQU5HUkFNX01BVEVSSUFMX0RJRkZVU0VfVEVYVFVSRV9TUEhFUkVNQVBcbiAgICAgICAgLy8gQWxzbyBzZXRzIGZsYWdzIHRvIGtlZXAgdHJhY2sgb2YgZWFjaCB1bmlxdWUgbWFwcGluZyB0eXBlIGJlaW5nIHVzZWQsIGUuZy46XG4gICAgICAgIC8vICAgVEFOR1JBTV9NQVRFUklBTF9URVhUVVJFX1NQSEVSRU1BUFxuICAgICAgICAvLyBFbmFibGVzIHRleHR1cmUgY29vcmRpbmF0ZXMgaWYgbmVlZGVkIGFuZCBub3QgYWxyZWFkeSBvblxuICAgICAgICBmb3IgKGxldCBwcm9wIG9mIFsnZW1pc3Npb24nLCAnYW1iaWVudCcsICdkaWZmdXNlJywgJ3NwZWN1bGFyJ10pIHtcbiAgICAgICAgICAgIGxldCBkZWYgPSBgVEFOR1JBTV9NQVRFUklBTF8ke3Byb3AudG9VcHBlckNhc2UoKX1gO1xuICAgICAgICAgICAgbGV0IHRleGRlZiA9IGRlZiArICdfVEVYVFVSRSc7XG4gICAgICAgICAgICBzdHlsZS5kZWZpbmVzW2RlZl0gPSAodGhpc1twcm9wXSAhPSBudWxsKTtcbiAgICAgICAgICAgIGlmICh0aGlzW3Byb3BdICYmIHRoaXNbcHJvcF0udGV4dHVyZSkge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRlZmluZXNbdGV4ZGVmXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgc3R5bGUuZGVmaW5lc1t0ZXhkZWYgKyAnXycgKyB0aGlzW3Byb3BdLm1hcHBpbmcudG9VcHBlckNhc2UoKV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHN0eWxlLmRlZmluZXNbYFRBTkdSQU1fTUFURVJJQUxfVEVYVFVSRV8ke3RoaXNbcHJvcF0ubWFwcGluZy50b1VwcGVyQ2FzZSgpfWBdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzdHlsZS50ZXhjb29yZHMgPSBzdHlsZS50ZXhjb29yZHMgfHwgKHRoaXNbcHJvcF0ubWFwcGluZyA9PT0gJ3V2Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3JtYWwgbWFwcGluZ1xuICAgICAgICAvLyBBcyBhbm92ZSwgc2V0cyBmbGFncyB0byBrZWVwIHRyYWNrIG9mIGVhY2ggdW5pcXVlIG1hcHBpbmcgdHlwZSBiZWluZyB1c2VkLCBlLmcuOlxuICAgICAgICAvLyAgIFRBTkdSQU1fTUFURVJJQUxfVEVYVFVSRV9TUEhFUkVNQVBcbiAgICAgICAgaWYgKHRoaXMubm9ybWFsICYmIHRoaXMubm9ybWFsLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHN0eWxlLmRlZmluZXNbJ1RBTkdSQU1fTUFURVJJQUxfTk9STUFMX1RFWFRVUkUnXSA9IHRydWU7XG4gICAgICAgICAgICBzdHlsZS5kZWZpbmVzWydUQU5HUkFNX01BVEVSSUFMX05PUk1BTF9URVhUVVJFXycgKyB0aGlzLm5vcm1hbC5tYXBwaW5nLnRvVXBwZXJDYXNlKCldID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0eWxlLmRlZmluZXNbYFRBTkdSQU1fTUFURVJJQUxfVEVYVFVSRV8ke3RoaXMubm9ybWFsLm1hcHBpbmcudG9VcHBlckNhc2UoKX1gXSA9IHRydWU7XG4gICAgICAgICAgICBzdHlsZS50ZXhjb29yZHMgPSBzdHlsZS50ZXhjb29yZHMgfHwgKHRoaXMubm9ybWFsLm1hcHBpbmcgPT09ICd1dicpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGUucmVwbGFjZVNoYWRlckJsb2NrKE1hdGVyaWFsLmJsb2NrLCBzaGFkZXJTb3VyY2VzWydnbC9zaGFkZXJzL21hdGVyaWFsJ10sICdNYXRlcmlhbCcpO1xuICAgICAgICBzdHlsZS5hZGRTaGFkZXJCbG9jaygnc2V0dXAnLCAnXFxubWF0ZXJpYWwgPSB1X21hdGVyaWFsO1xcbicsICdNYXRlcmlhbCcpO1xuICAgIH1cblxuICAgIHNldHVwUHJvZ3JhbSAoX3Byb2dyYW0pIHtcbiAgICAgICAgLy8gRm9yIGVhY2ggcHJvcGVydHksIHNldHMgdW5pZm9ybXMgaW4gdGhlIHBhdHRlcm46XG4gICAgICAgIC8vIHVfbWF0ZXJpYWwuZGlmZnVzZSwgdV9tYXRlcmlhbC5kaWZmdXNlU2NhbGUgdV9tYXRlcmlhbF9kaWZmdXNlX3RleHR1cmVcbiAgICAgICAgZm9yIChsZXQgcHJvcCBvZiBbJ2VtaXNzaW9uJywgJ2FtYmllbnQnLCAnZGlmZnVzZScsICdzcGVjdWxhciddKSB7XG4gICAgICAgICAgICBpZiAodGhpc1twcm9wXSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW3Byb3BdLnRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgX3Byb2dyYW0uc2V0VGV4dHVyZVVuaWZvcm0oYHVfbWF0ZXJpYWxfJHtwcm9wfV90ZXh0dXJlYCwgdGhpc1twcm9wXS50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnM2Z2JywgYHVfbWF0ZXJpYWwuJHtwcm9wfVNjYWxlYCwgdGhpc1twcm9wXS5zY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9wcm9ncmFtLnVuaWZvcm0oJzRmdicsIGB1X21hdGVyaWFsLiR7cHJvcH1gLCB0aGlzW3Byb3BdLmFtb3VudCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzW3Byb3BdLmFtb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBfcHJvZ3JhbS51bmlmb3JtKCc0ZnYnLCBgdV9tYXRlcmlhbC4ke3Byb3B9YCwgdGhpc1twcm9wXS5hbW91bnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4dHJhIHNwZWN1bGFyIHByb3BzXG4gICAgICAgIGlmICh0aGlzLnNwZWN1bGFyKSB7XG4gICAgICAgICAgICBfcHJvZ3JhbS51bmlmb3JtKCcxZicsICd1X21hdGVyaWFsLnNoaW5pbmVzcycsIHRoaXMuc3BlY3VsYXIuc2hpbmluZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vcm1hbCBtYXBwaW5nXG4gICAgICAgIGlmICh0aGlzLm5vcm1hbCAmJiB0aGlzLm5vcm1hbC50ZXh0dXJlKSB7XG4gICAgICAgICAgICBfcHJvZ3JhbS5zZXRUZXh0dXJlVW5pZm9ybSgndV9tYXRlcmlhbF9ub3JtYWxfdGV4dHVyZScsIHRoaXMubm9ybWFsLnRleHR1cmUpO1xuICAgICAgICAgICAgX3Byb2dyYW0udW5pZm9ybSgnM2Z2JywgJ3VfbWF0ZXJpYWwubm9ybWFsU2NhbGUnLCB0aGlzLm5vcm1hbC5zY2FsZSk7XG4gICAgICAgICAgICBfcHJvZ3JhbS51bmlmb3JtKCcxZicsICd1X21hdGVyaWFsLm5vcm1hbEFtb3VudCcsIHRoaXMubm9ybWFsLmFtb3VudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbk1hdGVyaWFsLmJsb2NrID0gJ21hdGVyaWFsJztcbiIsIi8qanNoaW50IHdvcmtlcjogdHJ1ZSovXG5cbi8vIE1vZHVsZXMgYW5kIGRlcGVuZGVuY2llcyB0byBleHBvc2UgaW4gdGhlIHB1YmxpYyBUYW5ncmFtIG1vZHVsZVxuaW1wb3J0IFV0aWxzIGZyb20gJy4vdXRpbHMvdXRpbHMnO1xuXG4vLyBUaGUgbGVhZmxldCBsYXllciBwbHVnaW4gaXMgY3VycmVudGx5IHRoZSBwcmltYXJ5IHB1YmxpYyBBUElcbmltcG9ydCB7bGVhZmxldExheWVyfSBmcm9tICcuL2xlYWZsZXRfbGF5ZXInO1xuXG4vLyBUaGUgc2NlbmUgd29ya2VyIGlzIG9ubHkgYWN0aXZhdGVkIHdoZW4gYSB3b3JrZXIgdGhyZWFkIGlzIGluc3RhbnRpYXRlZCwgYnV0IG11c3QgYWx3YXlzIGJlIGxvYWRlZFxuaW1wb3J0IFNjZW5lIGZyb20gJy4vc2NlbmUnO1xuaW1wb3J0IHtTY2VuZVdvcmtlcn0gZnJvbSAnLi9zY2VuZV93b3JrZXInO1xuXG4vLyBBZGRpdGlvbmFsIG1vZHVsZXMgYXJlIGV4cG9zZWQgZm9yIGRlYnVnZ2luZ1xuaW1wb3J0IHZlcnNpb24gZnJvbSAnLi91dGlscy92ZXJzaW9uJztcbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuaW1wb3J0IEdlbyBmcm9tICcuL2dlbyc7XG5pbXBvcnQgRGF0YVNvdXJjZSBmcm9tICcuL3NvdXJjZXMvZGF0YV9zb3VyY2UnO1xuaW1wb3J0ICcuL3NvdXJjZXMvZ2VvanNvbic7XG5pbXBvcnQgJy4vc291cmNlcy90b3BvanNvbic7XG5pbXBvcnQgJy4vc291cmNlcy9tdnQnO1xuaW1wb3J0ICcuL3NvdXJjZXMvcmFzdGVyJztcbmltcG9ydCBUaWxlTWFuYWdlciBmcm9tICcuL3RpbGVfbWFuYWdlcic7XG5pbXBvcnQgR0xTTCBmcm9tICcuL2dsL2dsc2wnO1xuaW1wb3J0IFNoYWRlclByb2dyYW0gZnJvbSAnLi9nbC9zaGFkZXJfcHJvZ3JhbSc7XG5pbXBvcnQgVmVydGV4RGF0YSBmcm9tICcuL2dsL3ZlcnRleF9kYXRhJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vZ2wvdGV4dHVyZSc7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi9tYXRlcmlhbCc7XG5pbXBvcnQgTGlnaHQgZnJvbSAnLi9saWdodCc7XG5pbXBvcnQgV29ya2VyQnJva2VyIGZyb20gJy4vdXRpbHMvd29ya2VyX2Jyb2tlcic7XG5pbXBvcnQge3J1bGVDYWNoZX0gZnJvbSAnLi9zdHlsZXMvcnVsZSc7XG5pbXBvcnQge1N0eWxlTWFuYWdlcn0gZnJvbSAnLi9zdHlsZXMvc3R5bGVfbWFuYWdlcic7XG5pbXBvcnQge1N0eWxlUGFyc2VyfSBmcm9tICcuL3N0eWxlcy9zdHlsZV9wYXJzZXInO1xuaW1wb3J0IENvbGxpc2lvbiBmcm9tICcuL2xhYmVscy9jb2xsaXNpb24nO1xuaW1wb3J0IEZlYXR1cmVTZWxlY3Rpb24gZnJvbSAnLi9zZWxlY3Rpb24nO1xuXG5pbXBvcnQgeWFtbCBmcm9tICdqcy15YW1sJztcblxuLy8gTWFrZSBzb21lIG1vZHVsZXMgYWNjZXNzaWJsZSBmb3IgZGVidWdnaW5nXG52YXIgZGVidWcgPSB7XG4gICAgbG9nLFxuICAgIHlhbWwsXG4gICAgVXRpbHMsXG4gICAgR2VvLFxuICAgIERhdGFTb3VyY2UsXG4gICAgVGlsZU1hbmFnZXIsXG4gICAgR0xTTCxcbiAgICBTaGFkZXJQcm9ncmFtLFxuICAgIFZlcnRleERhdGEsXG4gICAgVGV4dHVyZSxcbiAgICBNYXRlcmlhbCxcbiAgICBMaWdodCxcbiAgICBTY2VuZSxcbiAgICBTY2VuZVdvcmtlcixcbiAgICBXb3JrZXJCcm9rZXIsXG4gICAgcnVsZUNhY2hlLFxuICAgIFN0eWxlTWFuYWdlcixcbiAgICBTdHlsZVBhcnNlcixcbiAgICBDb2xsaXNpb24sXG4gICAgRmVhdHVyZVNlbGVjdGlvblxufTtcblxuLy8gV2luZG93IGNhbiBvbmx5IGJlIHNldCBpbiBtYWluIHRocmVhZFxuaWYgKFV0aWxzLmlzTWFpblRocmVhZCkge1xuXG4gICAgd2luZG93LlRhbmdyYW0gPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgbGVhZmxldExheWVyLFxuICAgICAgICBkZWJ1ZyxcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbi5zdHJpbmdcbiAgICB9O1xuXG59XG5cbmlmIChVdGlscy5pc1dvcmtlclRocmVhZCkge1xuICAgIHNlbGYuVGFuZ3JhbSA9IHtcbiAgICAgICAgZGVidWcsXG4gICAgICAgIHZlcnNpb246IHZlcnNpb24uc3RyaW5nXG4gICAgfTtcbn1cblxuaWYgKFV0aWxzLmlzTWFpblRocmVhZCkge1xuICAgIFV0aWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKCk7XG59XG5cbi8vIFNldHVwIGxvZ2dpbmcgdG8gcHJlZml4IHdpdGggVGFuZ3JhbSB2ZXJzaW9uXG52YXIgb3JpZ2luYWxGYWN0b3J5ID0gbG9nLm1ldGhvZEZhY3Rvcnk7XG5sb2cubWV0aG9kRmFjdG9yeSA9IGZ1bmN0aW9uIChtZXRob2ROYW1lLCBsb2dMZXZlbCkge1xuICAgIHZhciByYXdNZXRob2QgPSBvcmlnaW5hbEZhY3RvcnkobWV0aG9kTmFtZSwgbG9nTGV2ZWwpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoLi4ubWVzc2FnZSkge1xuICAgICAgICByYXdNZXRob2QoYFRhbmdyYW0gJHt2ZXJzaW9uLnN0cmluZ306YCwgLi4ubWVzc2FnZSk7XG4gICAgfTtcbn07XG4iLCJpbXBvcnQgVXRpbHMgZnJvbSAnLi91dGlscy91dGlscyc7XG5pbXBvcnQgV29ya2VyQnJva2VyIGZyb20gJy4vdXRpbHMvd29ya2VyX2Jyb2tlcic7XG5pbXBvcnQgc3Vic2NyaWJlTWl4aW4gZnJvbSAnLi91dGlscy9zdWJzY3JpYmUnO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi9nbC9jb250ZXh0JztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vZ2wvdGV4dHVyZSc7XG5pbXBvcnQgVmVydGV4QXJyYXlPYmplY3QgZnJvbSAnLi9nbC92YW8nO1xuaW1wb3J0IHtTdHlsZX0gZnJvbSAnLi9zdHlsZXMvc3R5bGUnO1xuaW1wb3J0IHtTdHlsZU1hbmFnZXJ9IGZyb20gJy4vc3R5bGVzL3N0eWxlX21hbmFnZXInO1xuaW1wb3J0IHtTdHlsZVBhcnNlcn0gZnJvbSAnLi9zdHlsZXMvc3R5bGVfcGFyc2VyJztcbmltcG9ydCBTY2VuZUxvYWRlciBmcm9tICcuL3NjZW5lX2xvYWRlcic7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IExpZ2h0IGZyb20gJy4vbGlnaHQnO1xuaW1wb3J0IFRpbGVNYW5hZ2VyIGZyb20gJy4vdGlsZV9tYW5hZ2VyJztcbmltcG9ydCBEYXRhU291cmNlIGZyb20gJy4vc291cmNlcy9kYXRhX3NvdXJjZSc7XG5pbXBvcnQgRmVhdHVyZVNlbGVjdGlvbiBmcm9tICcuL3NlbGVjdGlvbic7XG5pbXBvcnQgUmVuZGVyU3RhdGUgZnJvbSAnLi9nbC9yZW5kZXJfc3RhdGUnO1xuXG5pbXBvcnQgbG9nIGZyb20gJ2xvZ2xldmVsJztcblxuaW1wb3J0IHtQb2x5Z29uc30gZnJvbSAnLi9zdHlsZXMvcG9seWdvbnMvcG9seWdvbnMnO1xuaW1wb3J0IHtMaW5lc30gZnJvbSAnLi9zdHlsZXMvbGluZXMvbGluZXMnO1xuaW1wb3J0IHtQb2ludHN9IGZyb20gJy4vc3R5bGVzL3BvaW50cy9wb2ludHMnO1xuaW1wb3J0IHtUZXh0U3R5bGV9IGZyb20gJy4vc3R5bGVzL3RleHQvdGV4dCc7XG5pbXBvcnQge1Jhc3RlclN0eWxlfSBmcm9tICcuL3N0eWxlcy9yYXN0ZXIvcmFzdGVyJztcblxuLy8gQWRkIGJ1aWx0LWluIHJlbmRlcmluZyBzdHlsZXNcblN0eWxlTWFuYWdlci5yZWdpc3RlcihQb2x5Z29ucyk7XG5TdHlsZU1hbmFnZXIucmVnaXN0ZXIoTGluZXMpO1xuU3R5bGVNYW5hZ2VyLnJlZ2lzdGVyKFBvaW50cyk7XG5TdHlsZU1hbmFnZXIucmVnaXN0ZXIoVGV4dFN0eWxlKTtcblN0eWxlTWFuYWdlci5yZWdpc3RlcihSYXN0ZXJTdHlsZSk7XG5cbi8vIExvYWQgc2NlbmUgZGVmaW5pdGlvbjogcGFzcyBhbiBvYmplY3QgZGlyZWN0bHksIG9yIGEgVVJMIGFzIHN0cmluZyB0byBsb2FkIHJlbW90ZWx5XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY2VuZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb25maWdfc291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBzdWJzY3JpYmVNaXhpbih0aGlzKTtcblxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6aW5nID0gbnVsbDsgLy8gd2lsbCBiZSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHNjZW5lIGlzIGxvYWRlZFxuICAgICAgICB0aGlzLnNvdXJjZXMgPSB7fTtcblxuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgVmlldyh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy50aWxlX21hbmFnZXIgPSBUaWxlTWFuYWdlcjtcbiAgICAgICAgdGhpcy50aWxlX21hbmFnZXIuaW5pdCh7IHNjZW5lOiB0aGlzLCB2aWV3OiB0aGlzLnZpZXcgfSk7XG4gICAgICAgIHRoaXMubnVtX3dvcmtlcnMgPSBvcHRpb25zLm51bVdvcmtlcnMgfHwgMjtcbiAgICAgICAgdGhpcy5hbGxvd19jcm9zc19kb21haW5fd29ya2VycyA9IChvcHRpb25zLmFsbG93Q3Jvc3NEb21haW5Xb3JrZXJzID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSk7XG4gICAgICAgIHRoaXMud29ya2VyX3VybCA9IG9wdGlvbnMud29ya2VyVXJsO1xuICAgICAgICBpZiAob3B0aW9ucy5kaXNhYmxlVmVydGV4QXJyYXlPYmplY3RzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBWZXJ0ZXhBcnJheU9iamVjdC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBVdGlscy51c2VfaGlnaF9kZW5zaXR5X2Rpc3BsYXkgPSBvcHRpb25zLmhpZ2hEZW5zaXR5RGlzcGxheSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5oaWdoRGVuc2l0eURpc3BsYXkgOiB0cnVlO1xuICAgICAgICBVdGlscy51cGRhdGVEZXZpY2VQaXhlbFJhdGlvKCk7XG5cbiAgICAgICAgdGhpcy5jb25maWcgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbmZpZ19zb3VyY2UgPSBjb25maWdfc291cmNlO1xuICAgICAgICB0aGlzLmNvbmZpZ19zZXJpYWxpemVkID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0X3ZhbGlkX2NvbmZpZ19zb3VyY2UgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuc3R5bGVzID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVfc3R5bGVzID0ge307XG5cbiAgICAgICAgdGhpcy5idWlsZGluZyA9IG51bGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhY2tzIGN1cnJlbnQgc2NlbmUgYnVpbGRpbmcgc3RhdGUgKHRpbGVzIGJlaW5nIGJ1aWx0LCBldGMuKVxuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1ZXN0IGEgcmVkcmF3XG4gICAgICAgIHRoaXMuYW5pbWF0ZWQgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVlc3QgcmVkcmF3IGV2ZXJ5IGZyYW1lXG4gICAgICAgIHRoaXMucHJlVXBkYXRlID0gb3B0aW9ucy5wcmVVcGRhdGU7ICAgICAgICAgICAgIC8vIG9wdGlvbmFsIHByZS1yZW5kZXIgbG9vcCBob29rXG4gICAgICAgIHRoaXMucG9zdFVwZGF0ZSA9IG9wdGlvbnMucG9zdFVwZGF0ZTsgICAgICAgICAgIC8vIG9wdGlvbmFsIHBvc3QtcmVuZGVyIGxvb3AgaG9va1xuICAgICAgICB0aGlzLnJlbmRlcl9sb29wID0gIW9wdGlvbnMuZGlzYWJsZVJlbmRlckxvb3A7ICAvLyBkaXNhYmxlIHJlbmRlciBsb29wIC0gYXBwIHdpbGwgaGF2ZSB0byBtYW51YWxseSBjYWxsIFNjZW5lLnJlbmRlcigpIHBlciBmcmFtZVxuICAgICAgICB0aGlzLnJlbmRlcl9sb29wX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlbmRlcl9sb29wX3N0b3AgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZW5kZXJfY291bnQgPSAwO1xuICAgICAgICB0aGlzLmxhc3RfcmVuZGVyX2NvdW50ID0gMDtcbiAgICAgICAgdGhpcy5yZW5kZXJfY291bnRfY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZyYW1lID0gMDtcbiAgICAgICAgdGhpcy5xdWV1ZV9zY3JlZW5zaG90ID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB0aGlzLnJlc2V0VGltZSgpO1xuXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG5cbiAgICAgICAgdGhpcy5saWdodHMgPSBudWxsO1xuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSBudWxsO1xuXG4gICAgICAgIC8vIExpc3RlbiB0byByZWxhdGVkIG9iamVjdHNcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMgPSB7XG4gICAgICAgICAgICB2aWV3OiB7XG4gICAgICAgICAgICAgICAgbW92ZTogKCkgPT4gdGhpcy50cmlnZ2VyKCdtb3ZlJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy52aWV3LnN1YnNjcmliZSh0aGlzLmxpc3RlbmVycy52aWV3KTtcblxuICAgICAgICB0aGlzLnVwZGF0aW5nID0gMDtcbiAgICAgICAgdGhpcy5nZW5lcmF0aW9uID0gMDsgLy8gYW4gaWQgdGhhdCBpcyBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgdGhlIHNjZW5lIGNvbmZpZyBpcyBpbnZhbGlkYXRlZFxuICAgICAgICB0aGlzLmxhc3RfY29tcGxldGVfZ2VuZXJhdGlvbiA9IDA7IC8vIGxhc3QgZ2VuZXJhdGlvbiBpZCB3aXRoIGEgY29tcGxldGUgdmlld1xuICAgICAgICB0aGlzLnNldHVwRGVidWcoKTtcblxuICAgICAgICB0aGlzLmxvZ0xldmVsID0gb3B0aW9ucy5sb2dMZXZlbCB8fCAnd2Fybic7XG4gICAgICAgIGxvZy5zZXRMZXZlbCh0aGlzLmxvZ0xldmVsKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlIChjb25maWcsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IFNjZW5lKGNvbmZpZywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gTG9hZCAob3IgcmVsb2FkKSBzY2VuZSBjb25maWdcbiAgICAvLyBPcHRpb25hbGx5IHNwZWNpZnkgbmV3IHNjZW5lIGZpbGUgVVJMXG4gICAgbG9hZChjb25maWdfc291cmNlID0gbnVsbCwgY29uZmlnX3BhdGggPSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6aW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGluZysrO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICAgICAgLy8gTG9hZCBzY2VuZSBkZWZpbml0aW9uIChzb3VyY2VzLCBzdHlsZXMsIGV0Yy4pLCB0aGVuIGNyZWF0ZSBzdHlsZXMgJiB3b3JrZXJzXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6aW5nID0gdGhpcy5sb2FkU2NlbmUoY29uZmlnX3NvdXJjZSwgY29uZmlnX3BhdGgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmNyZWF0ZVdvcmtlcnMoKSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUNhbnZhcygpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGZWF0dXJlU2VsZWN0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzLnRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMudGV4dHVyZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZTogKCkgPT4gdGhpcy5kaXJ0eSA9IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nOiAoZGF0YSkgPT4gdGhpcy50cmlnZ2VyKCd3YXJuaW5nJywgT2JqZWN0LmFzc2lnbih7IHR5cGU6ICd0ZXh0dXJlcycgfSwgZGF0YSkpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIFRleHR1cmUuc3Vic2NyaWJlKHRoaXMubGlzdGVuZXJzLnRleHR1cmUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIE9ubHkgcmV0YWluIHZpc2libGUgdGlsZXMgZm9yIHJlYnVpbGRpbmdcbiAgICAgICAgICAgICAgICB0aGlzLnRpbGVfbWFuYWdlci5wcnVuZVRvVmlzaWJsZVRpbGVzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ29uZmlnKHsgcmVidWlsZDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmctLTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0X3ZhbGlkX2NvbmZpZ19zb3VyY2UgPSB0aGlzLmNvbmZpZ19zb3VyY2U7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0X3ZhbGlkX2NvbmZpZ19wYXRoID0gdGhpcy5jb25maWdfcGF0aDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlcl9sb29wICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHVwUmVuZGVyTG9vcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RSZWRyYXcoKTtcbiAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXppbmcgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy51cGRhdGluZyA9IDA7XG5cbiAgICAgICAgICAgIC8vIFJlcG9ydCBhbmQgcmV2ZXJ0IHRvIGxhc3QgdmFsaWQgY29uZmlnIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgbGV0IHR5cGUsIG1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ1lBTUxFeGNlcHRpb24nKSB7XG4gICAgICAgICAgICAgICAgdHlwZSA9ICd5YW1sJztcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gJ0Vycm9yIHBhcnNpbmcgc2NlbmUgWUFNTCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBtb3JlIGVycm9yIHR5cGVzXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9ICdFcnJvciBpbml0aWFsaXppbmcgc2NlbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsIHsgdHlwZSwgbWVzc2FnZSwgZXJyb3IsIHVybDogdGhpcy5jb25maWdfc291cmNlIH0pO1xuXG4gICAgICAgICAgICBtZXNzYWdlID0gYFNjZW5lLmxvYWQoKSBmYWlsZWQgdG8gbG9hZCAke3RoaXMuY29uZmlnX3NvdXJjZX06ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICAgICAgaWYgKHRoaXMubGFzdF92YWxpZF9jb25maWdfc291cmNlKSB7XG4gICAgICAgICAgICAgICAgbG9nLndhcm4obWVzc2FnZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIGxvZy5pbmZvKGBTY2VuZS5sb2FkKCkgcmV2ZXJ0aW5nIHRvIGxhc3QgdmFsaWQgY29uZmlndXJhdGlvbmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWQodGhpcy5sYXN0X3ZhbGlkX2NvbmZpZ19zb3VyY2UsIHRoaXMubGFzdF92YWxpZF9jb25maWdfcGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2cuZXJyb3IobWVzc2FnZSwgZXJyb3IpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemluZztcbiAgICB9XG5cbiAgICAvLyBGb3IgQVBJIGNvbXBhdGliaWxpdHlcbiAgICByZWxvYWQoY29uZmlnX3NvdXJjZSA9IG51bGwsIGNvbmZpZ19wYXRoID0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkKGNvbmZpZ19zb3VyY2UsIGNvbmZpZ19wYXRoKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVuZGVyX2xvb3Bfc3RvcCA9IHRydWU7IC8vIHNjaGVkdWxlIHJlbmRlciBsb29wIHRvIHN0b3BcblxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlQWxsKCk7IC8vIGNsZWFyIGFsbCBldmVudCBsaXN0ZW5lcnNcblxuICAgICAgICB0aGlzLnZpZXcudW5zdWJzY3JpYmUodGhpcy5saXN0ZW5lcnMudmlldyk7XG4gICAgICAgIFRleHR1cmUudW5zdWJzY3JpYmUodGhpcy5saXN0ZW5lcnMudGV4dHVyZSk7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5jYW52YXMgJiYgdGhpcy5jYW52YXMucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNhbnZhcyk7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ2wpIHtcbiAgICAgICAgICAgIFRleHR1cmUuZGVzdHJveSh0aGlzLmdsKTtcbiAgICAgICAgICAgIFN0eWxlTWFuYWdlci5kZXN0cm95KHRoaXMuZ2wpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZXMgPSB7fTtcblxuICAgICAgICAgICAgdGhpcy5nbCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNvdXJjZXMgPSB7fTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLndvcmtlcnMpKSB7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnMuZm9yRWFjaCgod29ya2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aWxlX21hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGNyZWF0ZUNhbnZhcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FudmFzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUudG9wID0gMDtcbiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUubGVmdCA9IDA7XG5cbiAgICAgICAgLy8gRm9yY2UgdGFuZ3JhbSBjYW52YXMgdW5kZXJuZWF0aCBhbGwgbGVhZmxldCBsYXllcnMsIGFuZCBzZXQgYmFja2dyb3VuZCB0byB0cmFuc3BhcmVudFxuICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNhbnZhcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZ2wgPSBDb250ZXh0LmdldENvbnRleHQodGhpcy5jYW52YXMsIHtcbiAgICAgICAgICAgICAgICBhbHBoYTogdHJ1ZSwgcHJlbXVsdGlwbGllZEFscGhhOiB0cnVlLCAvLyBUT0RPOiB2YXJ5IHcvc2NlbmUgYWxwaGFcbiAgICAgICAgICAgICAgICBkZXZpY2VfcGl4ZWxfcmF0aW86IFV0aWxzLmRldmljZV9waXhlbF9yYXRpb1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2goZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiQ291bGRuJ3QgY3JlYXRlIFdlYkdMIGNvbnRleHQuIFwiICtcbiAgICAgICAgICAgICAgICBcIllvdXIgYnJvd3NlciBtYXkgbm90IHN1cHBvcnQgV2ViR0wsIG9yIGl0J3MgdHVybmVkIG9mZj8gXCIgK1xuICAgICAgICAgICAgICAgIFwiVmlzaXQgaHR0cDovL3dlYmdscmVwb3J0LmNvbS8gZm9yIG1vcmUgaW5mby5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzaXplTWFwKHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoLCB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQpO1xuICAgICAgICBWZXJ0ZXhBcnJheU9iamVjdC5pbml0KHRoaXMuZ2wpO1xuICAgICAgICBSZW5kZXJTdGF0ZS5pbml0aWFsaXplKHRoaXMuZ2wpO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgVVJMIHRvIGxvYWQgdGhlIHdlYiB3b3JrZXIgZnJvbVxuICAgIGdldFdvcmtlclVybCgpIHtcbiAgICAgICAgbGV0IHdvcmtlcl91cmwgPSB0aGlzLndvcmtlcl91cmwgfHwgVXRpbHMuZmluZEN1cnJlbnRVUkwoJ3RhbmdyYW0uZGVidWcuanMnLCAndGFuZ3JhbS5taW4uanMnKTtcblxuICAgICAgICBpZiAoIXdvcmtlcl91cmwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGxvYWQgd29ya2VyIGJlY2F1c2UgY291bGRuJ3QgZmluZCBiYXNlIFVSTCB0aGF0IGxpYnJhcnkgd2FzIGxvYWRlZCBmcm9tXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dfY3Jvc3NfZG9tYWluX3dvcmtlcnMpIHtcbiAgICAgICAgICAgIGxldCBib2R5ID0gYGltcG9ydFNjcmlwdHMoJyR7d29ya2VyX3VybH0nKTtgO1xuICAgICAgICAgICAgcmV0dXJuIFV0aWxzLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYm9keV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd29ya2VyX3VybDtcbiAgICB9XG5cbiAgICAvLyBXZWIgd29ya2VycyBoYW5kbGUgaGVhdnkgZHV0eSB0aWxlIGNvbnN0cnVjdGlvbjogbmV0d29ya2luZywgZ2VvbWV0cnkgcHJvY2Vzc2luZywgZXRjLlxuICAgIGNyZWF0ZVdvcmtlcnMoKSB7XG4gICAgICAgIGlmICghdGhpcy53b3JrZXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlV29ya2Vycyh0aGlzLmdldFdvcmtlclVybCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgLy8gSW5zdGFudGlhdGUgd29ya2VycyBmcm9tIFVSTCwgaW5pdCBldmVudCBoYW5kbGVyc1xuICAgIG1ha2VXb3JrZXJzKHVybCkge1xuICAgICAgICB2YXIgcXVldWUgPSBbXTtcblxuICAgICAgICB0aGlzLndvcmtlcnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaWQ9MDsgaWQgPCB0aGlzLm51bV93b3JrZXJzOyBpZCsrKSB7XG4gICAgICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcih1cmwpO1xuICAgICAgICAgICAgdGhpcy53b3JrZXJzW2lkXSA9IHdvcmtlcjtcblxuICAgICAgICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLndvcmtlckxvZ01lc3NhZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICBXb3JrZXJCcm9rZXIuYWRkV29ya2VyKHdvcmtlcik7XG5cbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgU2NlbmUubWFrZVdvcmtlcnM6IGluaXRpYWxpemluZyB3b3JrZXIgJHtpZH1gKTtcbiAgICAgICAgICAgIGxldCBfaWQgPSBpZDtcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goV29ya2VyQnJva2VyLnBvc3RNZXNzYWdlKHdvcmtlciwgJ3NlbGYuaW5pdCcsIGlkLCB0aGlzLm51bV93b3JrZXJzLCBVdGlscy5kZXZpY2VfcGl4ZWxfcmF0aW8pLnRoZW4oXG4gICAgICAgICAgICAgICAgKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgU2NlbmUubWFrZVdvcmtlcnM6IGluaXRpYWxpemVkIHdvcmtlciAke2lkfWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKGBTY2VuZS5tYWtlV29ya2VyczogZmFpbGVkIHRvIGluaXRpYWxpemUgd29ya2VyICR7X2lkfTpgLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5leHRfd29ya2VyID0gMDtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHF1ZXVlKTtcbiAgICB9XG5cbiAgICAvLyBSb3VuZCByb2JpbiBzZWxlY3Rpb24gb2YgbmV4dCB3b3JrZXJcbiAgICBuZXh0V29ya2VyKCkge1xuICAgICAgICB2YXIgd29ya2VyID0gdGhpcy53b3JrZXJzW3RoaXMubmV4dF93b3JrZXJdO1xuICAgICAgICB0aGlzLm5leHRfd29ya2VyID0gKHRoaXMubmV4dF93b3JrZXIgKyAxKSAlIHRoaXMud29ya2Vycy5sZW5ndGg7XG4gICAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgfVxuXG4gICAgLy8gU2NlbmUgaXMgcmVhZHkgZm9yIHJlbmRlcmluZ1xuICAgIHJlYWR5KCkge1xuICAgICAgICBpZiAoIXRoaXMudmlldy5yZWFkeSgpIHx8IE9iamVjdC5rZXlzKHRoaXMuc291cmNlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJlc2l6ZSB0aGUgbWFwIHdoZW4gZGV2aWNlIHBpeGVsIHJhdGlvIGNoYW5nZXMsIGUuZy4gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBkaXNwbGF5c1xuICAgIHVwZGF0ZURldmljZVBpeGVsUmF0aW8gKCkge1xuICAgICAgICBpZiAoVXRpbHMudXBkYXRlRGV2aWNlUGl4ZWxSYXRpbygpKSB7XG4gICAgICAgICAgICBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2UodGhpcy53b3JrZXJzLCAnc2VsZi51cGRhdGVEZXZpY2VQaXhlbFJhdGlvJywgVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucmVidWlsZCgpKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucmVzaXplTWFwKHRoaXMudmlldy5zaXplLmNzcy53aWR0aCwgdGhpcy52aWV3LnNpemUuY3NzLmhlaWdodCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzaXplTWFwKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMudmlldy5zZXRWaWV3cG9ydFNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGlmICh0aGlzLmdsKSB7XG4gICAgICAgICAgICBDb250ZXh0LnJlc2l6ZSh0aGlzLmdsLCB3aWR0aCwgaGVpZ2h0LCBVdGlscy5kZXZpY2VfcGl4ZWxfcmF0aW8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVxdWVzdCBzY2VuZSBiZSByZWRyYXduIGF0IG5leHQgYW5pbWF0aW9uIGxvb3BcbiAgICByZXF1ZXN0UmVkcmF3KCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBSZWRyYXcgc2NlbmUgaW1tZWRpYXRlbHkgLSBkb24ndCB3YWl0IGZvciBhbmltYXRpb24gbG9vcFxuICAgIC8vIFVzZSBzcGFyaW5nbHksIGJ1dCBmb3IgY2FzZXMgd2hlcmUgeW91IG5lZWQgdGhlIGNsb3Nlc3QgcG9zc2libGUgc3luYyB3aXRoIG90aGVyIFVJIGVsZW1lbnRzLFxuICAgIC8vIHN1Y2ggYXMgb3RoZXIsIG5vbi1XZWJHTCBtYXAgbGF5ZXJzIChlLmcuIExlYWZsZXQgcmFzdGVyIGxheWVycywgbWFya2VycywgZXRjLilcbiAgICBpbW1lZGlhdGVSZWRyYXcoKSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHJlbmRlckxvb3AgKCkge1xuICAgICAgICB0aGlzLnJlbmRlcl9sb29wX2FjdGl2ZSA9IHRydWU7IC8vIG9ubHkgbGV0IHRoZSByZW5kZXIgbG9vcCBpbnN0YW50aWF0ZSBvbmNlXG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIC8vIFJlbmRlciB0aGUgc2NlbmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXF1ZXN0IHRoZSBuZXh0IGZyYW1lIGlmIG5vdCBzY2hlZHVsZWQgdG8gc3RvcFxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyX2xvb3Bfc3RvcCkge1xuICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlbmRlckxvb3AuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcl9sb29wX3N0b3AgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyX2xvb3BfYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXR1cCB0aGUgcmVuZGVyIGxvb3BcbiAgICBzZXR1cFJlbmRlckxvb3AoKSB7XG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJfbG9vcF9hY3RpdmUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLnJlbmRlckxvb3AoKTsgfSwgMCk7IC8vIGRlbGF5IHN0YXJ0IGJ5IG9uZSB0aWNrXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoKSB7XG4gICAgICAgIC8vIFJlbmRlciBvbiBkZW1hbmRcbiAgICAgICAgdmFyIHdpbGxfcmVuZGVyID0gIShcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgdGhpcy51cGRhdGluZyA+IDAgfHxcbiAgICAgICAgICAgIHRoaXMucmVhZHkoKSA9PT0gZmFsc2VcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBQcmUtcmVuZGVyIGxvb3AgaG9va1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnByZVVwZGF0ZSh3aWxsX3JlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCYWlsIGlmIG5vIG5lZWQgdG8gcmVuZGVyXG4gICAgICAgIGlmICghd2lsbF9yZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7IC8vIHN1YmNsYXNzZXMgY2FuIHNldCB0aGlzIGJhY2sgdG8gdHJ1ZSB3aGVuIGFuaW1hdGlvbiBpcyBuZWVkZWRcblxuICAgICAgICAvLyBSZW5kZXIgdGhlIHNjZW5lXG4gICAgICAgIHRoaXMudXBkYXRlRGV2aWNlUGl4ZWxSYXRpbygpO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXdDb21wbGV0ZSgpOyAvLyBmaXJlcyBldmVudCB3aGVuIHJlbmRlcmVkIHRpbGUgc2V0IG9yIHN0eWxlIGNoYW5nZXNcbiAgICAgICAgdGhpcy5jb21wbGV0ZVNjcmVlbnNob3QoKTsgLy8gY29tcGxldGVzIHNjcmVlbnNob3QgY2FwdHVyZSBpZiByZXF1ZXN0ZWRcblxuICAgICAgICAvLyBQb3N0LXJlbmRlciBsb29wIGhvb2tcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3RVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucG9zdFVwZGF0ZSh3aWxsX3JlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWRyYXcgZXZlcnkgZnJhbWUgaWYgYW5pbWF0aW5nXG4gICAgICAgIGlmICh0aGlzLmFuaW1hdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZnJhbWUrKztcbiAgICAgICAgbG9nLnRyYWNlKCdTY2VuZS5yZW5kZXIoKScpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAgICAgLy8gVXBkYXRlIHN0eWxlcywgY2FtZXJhLCBsaWdodHNcbiAgICAgICAgdGhpcy52aWV3LnVwZGF0ZSgpO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmFjdGl2ZV9zdHlsZXMpLmZvckVhY2goaSA9PiB0aGlzLnN0eWxlc1tpXS51cGRhdGUoKSk7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMubGlnaHRzKS5mb3JFYWNoKGkgPT4gdGhpcy5saWdodHNbaV0udXBkYXRlKCkpO1xuXG4gICAgICAgIC8vIFJlbmRlcmFibGUgdGlsZSBsaXN0XG4gICAgICAgIHRoaXMucmVuZGVyYWJsZV90aWxlcyA9IHRoaXMudGlsZV9tYW5hZ2VyLmdldFJlbmRlcmFibGVUaWxlcygpO1xuICAgICAgICB0aGlzLnJlbmRlcmFibGVfdGlsZXNfY291bnQgPSB0aGlzLnJlbmRlcmFibGVfdGlsZXMubGVuZ3RoO1xuXG4gICAgICAgIC8vIFJlbmRlciBtYWluIHBhc3NcbiAgICAgICAgdGhpcy5yZW5kZXJfY291bnQgPSB0aGlzLnJlbmRlclBhc3MoKTtcblxuICAgICAgICAvLyBSZW5kZXIgc2VsZWN0aW9uIHBhc3MgKGlmIG5lZWRlZClcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLnBlbmRpbmdSZXF1ZXN0cygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aWV3LnBhbm5pbmcgfHwgdGhpcy52aWV3Lnpvb21pbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclBlbmRpbmdSZXF1ZXN0cygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uYmluZCgpOyAgICAgICAgICAgICAgICAgIC8vIHN3aXRjaCB0byBGQk9cbiAgICAgICAgICAgIHRoaXMucmVuZGVyUGFzcyhcbiAgICAgICAgICAgICAgICAnc2VsZWN0aW9uX3Byb2dyYW0nLCAgICAgICAgICAgICAgICAvLyByZW5kZXIgdy9hbHRlcm5hdGUgcHJvZ3JhbVxuICAgICAgICAgICAgICAgIHsgYWxsb3dfYmxlbmQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmVhZCgpOyAgICAgICAgICAgICAgICAgIC8vIHJlYWQgcmVzdWx0cyBmcm9tIHNlbGVjdGlvbiBidWZmZXJcblxuICAgICAgICAgICAgLy8gUmVzZXQgdG8gc2NyZWVuIGJ1ZmZlclxuICAgICAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcbiAgICAgICAgICAgIGdsLnZpZXdwb3J0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJfY291bnRfY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5yZW5kZXJfY291bnQgIT09IHRoaXMubGFzdF9yZW5kZXJfY291bnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyX2NvdW50X2NoYW5nZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLmdldEZlYXR1cmVTZWxlY3Rpb25NYXBTaXplKCkudGhlbihzaXplID0+IHtcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhgU2NlbmU6IHJlbmRlcmVkICR7dGhpcy5yZW5kZXJfY291bnR9IHByaW1pdGl2ZXMgKCR7c2l6ZX0gZmVhdHVyZXMgaW4gc2VsZWN0aW9uIG1hcClgKTtcbiAgICAgICAgICAgIH0sICgpID0+IHt9KTsgLy8gbm8gb3Agd2hlbiBwcm9taXNlIHJlamVjdHMgKG9ubHkgcHJpbnQgbGFzdCByZXNwb25zZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhc3RfcmVuZGVyX2NvdW50ID0gdGhpcy5yZW5kZXJfY291bnQ7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIGFsbCBhY3RpdmUgc3R5bGVzLCBncm91cGVkIGJ5IGJsZW5kL2RlcHRoIHR5cGUgKG9wYXF1ZSwgb3ZlcmxheSwgZXRjLikgYW5kIGJ5IHByb2dyYW0gKHN0eWxlKVxuICAgIC8vIENhbGxlZCBib3RoIGZvciBtYWluIHJlbmRlciBwYXNzLCBhbmQgZm9yIHNlY29uZGFyeSBwYXNzZXMgbGlrZSBzZWxlY3Rpb24gYnVmZmVyXG4gICAgcmVuZGVyUGFzcyhwcm9ncmFtX2tleSA9ICdwcm9ncmFtJywgeyBhbGxvd19ibGVuZCB9ID0ge30pIHtcbiAgICAgICAgLy8gb3B0aW9uYWxseSBmb3JjZSBhbHBoYSBvZmYgKGUuZy4gZm9yIHNlbGVjdGlvbiBwYXNzKVxuICAgICAgICBhbGxvd19ibGVuZCA9IChhbGxvd19ibGVuZCA9PSBudWxsKSA/IHRydWUgOiBhbGxvd19ibGVuZDtcblxuICAgICAgICB0aGlzLmNsZWFyRnJhbWUoeyBjbGVhcl9jb2xvcjogdHJ1ZSwgY2xlYXJfZGVwdGg6IHRydWUgfSk7XG5cbiAgICAgICAgLy8gU29ydCBzdHlsZXMgYnkgYmxlbmQgb3JkZXJcbiAgICAgICAgbGV0IHN0eWxlcyA9IE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlX3N0eWxlcykuXG4gICAgICAgICAgICBtYXAocyA9PiB0aGlzLnN0eWxlc1tzXSkuXG4gICAgICAgICAgICBzb3J0KFN0eWxlLmJsZW5kT3JkZXJTb3J0KTtcblxuICAgICAgICAvLyBSZW5kZXIgc3R5bGVzXG4gICAgICAgIGxldCBjb3VudCA9IDA7IC8vIGhvdyBtYW55IHByaW1pdGl2ZXMgd2VyZSByZW5kZXJlZFxuICAgICAgICBsZXQgbGFzdF9ibGVuZDtcbiAgICAgICAgZm9yIChsZXQgc3R5bGUgb2Ygc3R5bGVzKSB7XG4gICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSByZW5kZXIgc3RhdGUgd2hlbiBibGVuZCBtb2RlIGNoYW5nZXNcbiAgICAgICAgICAgIGlmIChzdHlsZS5ibGVuZCAhPT0gbGFzdF9ibGVuZCkge1xuICAgICAgICAgICAgICAgIGxldCBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sXG4gICAgICAgICAgICAgICAgICAgIFN0eWxlLnJlbmRlcl9zdGF0ZXNbc3R5bGUuYmxlbmRdLCAgICAgICAvLyByZW5kZXIgc3RhdGUgZm9yIGJsZW5kIG1vZGVcbiAgICAgICAgICAgICAgICAgICAgeyBibGVuZDogKGFsbG93X2JsZW5kICYmIHN0eWxlLmJsZW5kKSB9IC8vIGVuYWJsZS9kaXNhYmxlIGJsZW5kaW5nIChlLmcuIG5vIGJsZW5kIGZvciBzZWxlY3Rpb24pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJlbmRlclN0YXRlKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvdW50ICs9IHRoaXMucmVuZGVyU3R5bGUoc3R5bGUubmFtZSwgcHJvZ3JhbV9rZXkpO1xuICAgICAgICAgICAgbGFzdF9ibGVuZCA9IHN0eWxlLmJsZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH1cblxuICAgIHJlbmRlclN0eWxlKHN0eWxlLCBwcm9ncmFtX2tleSkge1xuICAgICAgICBsZXQgZmlyc3RfZm9yX3N0eWxlID0gdHJ1ZTtcbiAgICAgICAgbGV0IHJlbmRlcl9jb3VudCA9IDA7XG5cbiAgICAgICAgbGV0IHByb2dyYW0gPSB0aGlzLnN0eWxlc1tzdHlsZV1bcHJvZ3JhbV9rZXldO1xuICAgICAgICBpZiAoIXByb2dyYW0gfHwgIXByb2dyYW0uY29tcGlsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVuZGVyIHRpbGUgR0wgZ2VvbWV0cmllc1xuICAgICAgICBmb3IgKGxldCB0IGluIHRoaXMucmVuZGVyYWJsZV90aWxlcykge1xuICAgICAgICAgICAgbGV0IHRpbGUgPSB0aGlzLnJlbmRlcmFibGVfdGlsZXNbdF07XG5cbiAgICAgICAgICAgIGlmICh0aWxlLm1lc2hlc1tzdHlsZV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTdHlsZS1zcGVjaWZpYyBzdGF0ZVxuICAgICAgICAgICAgLy8gT25seSBzZXR1cCBzdHlsZSBpZiByZW5kZXJpbmcgZm9yIGZpcnN0IHRpbWUgdGhpcyBmcmFtZVxuICAgICAgICAgICAgLy8gKGxhenkgaW5pdCwgbm90IGFsbCBzdHlsZXMgd2lsbCBiZSB1c2VkIGluIGFsbCBzY3JlZW4gdmlld3M7IHNvbWUgc3R5bGVzIG1pZ2h0IGJlIGRlZmluZWQgYnV0IG5ldmVyIHVzZWQpXG4gICAgICAgICAgICBpZiAoZmlyc3RfZm9yX3N0eWxlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RfZm9yX3N0eWxlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBwcm9ncmFtLnVzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVzW3N0eWxlXS5zZXR1cCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogZG9uJ3Qgc2V0IHVuaWZvcm1zIHdoZW4gdGhleSBoYXZlbid0IGNoYW5nZWRcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnVuaWZvcm0oJzFmJywgJ3VfdGltZScsIHRoaXMuYW5pbWF0ZWQgPyAoKCgrbmV3IERhdGUoKSkgLSB0aGlzLnN0YXJ0X3RpbWUpIC8gMTAwMCkgOiAwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcuc2V0dXBQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gdGhpcy5saWdodHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saWdodHNbaV0uc2V0dXBQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVGlsZS1zcGVjaWZpYyBzdGF0ZVxuICAgICAgICAgICAgdGhpcy52aWV3LnNldHVwVGlsZSh0aWxlLCBwcm9ncmFtKTtcblxuICAgICAgICAgICAgLy8gUmVuZGVyIHRpbGVcbiAgICAgICAgICAgIHRpbGUubWVzaGVzW3N0eWxlXS5yZW5kZXIoKTtcbiAgICAgICAgICAgIHJlbmRlcl9jb3VudCArPSB0aWxlLm1lc2hlc1tzdHlsZV0uZ2VvbWV0cnlfY291bnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVuZGVyX2NvdW50O1xuICAgIH1cblxuICAgIGNsZWFyRnJhbWUoeyBjbGVhcl9jb2xvciwgY2xlYXJfZGVwdGggfSA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmYXVsdHNcbiAgICAgICAgY2xlYXJfY29sb3IgPSAoY2xlYXJfY29sb3IgPT09IGZhbHNlKSA/IGZhbHNlIDogdHJ1ZTsgLy8gZGVmYXVsdCB0cnVlXG4gICAgICAgIGNsZWFyX2RlcHRoID0gKGNsZWFyX2RlcHRoID09PSBmYWxzZSkgPyBmYWxzZSA6IHRydWU7IC8vIGRlZmF1bHQgdHJ1ZVxuXG4gICAgICAgIC8vIFNldCBHTCBzdGF0ZVxuICAgICAgICBSZW5kZXJTdGF0ZS5kZXB0aF93cml0ZS5zZXQoeyBkZXB0aF93cml0ZTogY2xlYXJfZGVwdGggfSk7XG5cbiAgICAgICAgbGV0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgaWYgKGNsZWFyX2NvbG9yIHx8IGNsZWFyX2RlcHRoKSB7XG4gICAgICAgICAgICBsZXQgbWFzayA9IChjbGVhcl9jb2xvciAmJiBnbC5DT0xPUl9CVUZGRVJfQklUKSB8IChjbGVhcl9kZXB0aCAmJiBnbC5ERVBUSF9CVUZGRVJfQklUKTtcbiAgICAgICAgICAgIGdsLmNsZWFyKG1hc2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UmVuZGVyU3RhdGUoeyBkZXB0aF90ZXN0LCBkZXB0aF93cml0ZSwgY3VsbF9mYWNlLCBibGVuZCB9ID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0c1xuICAgICAgICAvLyBUT0RPOiB3aGVuIHdlIGFic3RyYWN0IG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLCB0aGVzZSBjYW4gYmUgcGVyLXBhc3MgY29uZmlnIG9wdGlvbnNcbiAgICAgICAgZGVwdGhfdGVzdCA9IChkZXB0aF90ZXN0ID09PSBmYWxzZSkgPyBmYWxzZSA6IFJlbmRlclN0YXRlLmRlZmF1bHRzLmRlcHRoX3Rlc3Q7ICAgICAgLy8gZGVmYXVsdCB0cnVlXG4gICAgICAgIGRlcHRoX3dyaXRlID0gKGRlcHRoX3dyaXRlID09PSBmYWxzZSkgPyBmYWxzZSA6IFJlbmRlclN0YXRlLmRlZmF1bHRzLmRlcHRoX3dyaXRlOyAgIC8vIGRlZmF1bHQgdHJ1ZVxuICAgICAgICBjdWxsX2ZhY2UgPSAoY3VsbF9mYWNlID09PSBmYWxzZSkgPyBmYWxzZSA6IFJlbmRlclN0YXRlLmRlZmF1bHRzLmN1bGxpbmc7ICAgICAgICAgICAvLyBkZWZhdWx0IHRydWVcbiAgICAgICAgYmxlbmQgPSAoYmxlbmQgIT0gbnVsbCkgPyBibGVuZCA6IFJlbmRlclN0YXRlLmRlZmF1bHRzLmJsZW5kaW5nOyAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBmYWxzZVxuXG4gICAgICAgIC8vIFJlc2V0IGZyYW1lIHN0YXRlXG4gICAgICAgIGxldCBnbCA9IHRoaXMuZ2w7XG5cbiAgICAgICAgUmVuZGVyU3RhdGUuZGVwdGhfdGVzdC5zZXQoeyBkZXB0aF90ZXN0OiBkZXB0aF90ZXN0IH0pO1xuICAgICAgICBSZW5kZXJTdGF0ZS5kZXB0aF93cml0ZS5zZXQoeyBkZXB0aF93cml0ZTogZGVwdGhfd3JpdGUgfSk7XG4gICAgICAgIFJlbmRlclN0YXRlLmN1bGxpbmcuc2V0KHsgY3VsbDogY3VsbF9mYWNlLCBmYWNlOiBSZW5kZXJTdGF0ZS5kZWZhdWx0cy5jdWxsaW5nX2ZhY2UgfSk7XG5cbiAgICAgICAgLy8gQmxlbmRpbmcgb2YgYWxwaGEgY2hhbm5lbCBpcyBtb2RpZmllZCB0byBhY2NvdW50IGZvciBXZWJHTCBhbHBoYSBiZWhhdmlvciwgc2VlOlxuICAgICAgICAvLyBodHRwOi8vd2ViZ2xmdW5kYW1lbnRhbHMub3JnL3dlYmdsL2xlc3NvbnMvd2ViZ2wtYW5kLWFscGhhLmh0bWxcbiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTE1MzM0MTZcbiAgICAgICAgaWYgKGJsZW5kKSB7XG4gICAgICAgICAgICAvLyBPcGFxdWU6IGFsbCBzb3VyY2UsIG5vIGRlc3RpbmF0aW9uXG4gICAgICAgICAgICBpZiAoYmxlbmQgPT09ICdvcGFxdWUnKSB7XG4gICAgICAgICAgICAgICAgUmVuZGVyU3RhdGUuYmxlbmRpbmcuc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgYmxlbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNyYzogZ2wuU1JDX0FMUEhBLCBkc3Q6IGdsLlpFUk9cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRyYWRpdGlvbmFsIGFscGhhIGJsZW5kaW5nXG4gICAgICAgICAgICBlbHNlIGlmIChibGVuZCA9PT0gJ292ZXJsYXknIHx8IGJsZW5kID09PSAnaW5sYXknKSB7XG4gICAgICAgICAgICAgICAgUmVuZGVyU3RhdGUuYmxlbmRpbmcuc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgYmxlbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNyYzogZ2wuU1JDX0FMUEhBLCBkc3Q6IGdsLk9ORV9NSU5VU19TUkNfQUxQSEEsXG4gICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYTogZ2wuT05FLCBkc3RfYWxwaGE6IGdsLk9ORV9NSU5VU19TUkNfQUxQSEFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFkZGl0aXZlIGJsZW5kaW5nXG4gICAgICAgICAgICBlbHNlIGlmIChibGVuZCA9PT0gJ2FkZCcpIHtcbiAgICAgICAgICAgICAgICBSZW5kZXJTdGF0ZS5ibGVuZGluZy5zZXQoe1xuICAgICAgICAgICAgICAgICAgICBibGVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBnbC5PTkUsIGRzdDogZ2wuT05FLFxuICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGE6IGdsLk9ORSwgZHN0X2FscGhhOiBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNdWx0aXBsaWNhdGl2ZSBibGVuZGluZ1xuICAgICAgICAgICAgZWxzZSBpZiAoYmxlbmQgPT09ICdtdWx0aXBseScpIHtcbiAgICAgICAgICAgICAgICBSZW5kZXJTdGF0ZS5ibGVuZGluZy5zZXQoe1xuICAgICAgICAgICAgICAgICAgICBibGVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBnbC5aRVJPLCBkc3Q6IGdsLlNSQ19DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhOiBnbC5PTkUsIGRzdF9hbHBoYTogZ2wuT05FX01JTlVTX1NSQ19BTFBIQVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgUmVuZGVyU3RhdGUuYmxlbmRpbmcuc2V0KHsgYmxlbmQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVxdWVzdCBmZWF0dXJlIHNlbGVjdGlvbiBhdCBnaXZlbiBwaXhlbC4gUnVucyBhc3luYyBhbmQgcmV0dXJucyByZXN1bHRzIHZpYSBhIHByb21pc2UuXG4gICAgZ2V0RmVhdHVyZUF0KHBpeGVsKSB7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKFwiU2NlbmUuZ2V0RmVhdHVyZUF0KCkgY2FsbGVkIGJlZm9yZSBzY2VuZSB3YXMgaW5pdGlhbGl6ZWRcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQb2ludCBzY2FsZWQgdG8gWzAuLjFdIHJhbmdlXG4gICAgICAgIHZhciBwb2ludCA9IHtcbiAgICAgICAgICAgIHg6IHBpeGVsLnggKiBVdGlscy5kZXZpY2VfcGl4ZWxfcmF0aW8gLyB0aGlzLnZpZXcuc2l6ZS5kZXZpY2Uud2lkdGgsXG4gICAgICAgICAgICB5OiBwaXhlbC55ICogVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvIC8gdGhpcy52aWV3LnNpemUuZGV2aWNlLmhlaWdodFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlOyAvLyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc2NlbmUgcmUtcmVuZGVycyBmb3IgdGhlc2UgdG8gYmUgcHJvY2Vzc2VkXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5nZXRGZWF0dXJlQXQocG9pbnQpLlxuICAgICAgICAgICAgdGhlbihzZWxlY3Rpb24gPT4gT2JqZWN0LmFzc2lnbihzZWxlY3Rpb24sIHsgcGl4ZWwgfSkpLlxuICAgICAgICAgICAgY2F0Y2goZXJyb3IgPT4gUHJvbWlzZS5yZXNvbHZlKHsgZXJyb3IgfSkpO1xuICAgIH1cblxuICAgIC8vIFJlYnVpbGQgZ2VvbWV0cnksIHdpdGhvdXQgcmUtcGFyc2luZyB0aGUgY29uZmlnIG9yIHJlLWNvbXBpbGluZyBzdHlsZXNcbiAgICAvLyBUT0RPOiBkZXRlY3Qgd2hpY2ggZWxlbWVudHMgbmVlZCB0byBiZSByZWZyZXNoZWQvcmVidWlsdCAoc3R5bGVzaGVldCBjaGFuZ2VzLCBldGMuKVxuICAgIHJlYnVpbGQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWJ1aWxkR2VvbWV0cnkob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gUmVidWlsZCBhbGwgdGlsZXNcbiAgICAvLyBzeW5jOiBib29sZWFuIG9mIHdoZXRoZXIgdG8gc3luYyB0aGUgY29uZmlnIG9iamVjdCB0byB0aGUgd29ya2VyXG4gICAgLy8gc291cmNlczogb3B0aW9uYWwgYXJyYXkgb2YgZGF0YSBzb3VyY2VzIHRvIHNlbGVjdGl2ZWx5IHJlYnVpbGQgKGJ5IGRlZmF1bHQgYWxsIG91ciByZWJ1aWx0KVxuICAgIHJlYnVpbGRHZW9tZXRyeSh7IHN5bmMgPSB0cnVlLCBzb3VyY2VzID0gbnVsbCB9ID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIC8vIFNraXAgcmVidWlsZCBpZiBhbHJlYWR5IGluIHByb2dyZXNzXG4gICAgICAgICAgICBpZiAodGhpcy5idWlsZGluZykge1xuICAgICAgICAgICAgICAgIC8vIFF1ZXVlIHVwIHRvIG9uZSByZWJ1aWxkIGNhbGwgYXQgYSB0aW1lLCBvbmx5IHNhdmUgbGFzdCByZXF1ZXN0XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVpbGRpbmcucXVldWVkICYmIHRoaXMuYnVpbGRpbmcucXVldWVkLnJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBub3RpZnkgcHJldmlvdXMgcmVxdWVzdCB0aGF0IGl0IGRpZCBub3QgY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCdTY2VuZS5yZWJ1aWxkR2VvbWV0cnk6IHJlcXVlc3Qgc3VwZXJjZWRlZCBieSBhIG5ld2VyIGNhbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGluZy5xdWV1ZWQucmVzb2x2ZShmYWxzZSk7IC8vIGZhbHNlIGZsYWcgaW5kaWNhdGVzIHJlYnVpbGQgcmVxdWVzdCB3YXMgc3VwZXJjZWRlZFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFNhdmUgcXVldWVkIHJlcXVlc3RcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkaW5nLnF1ZXVlZCA9IHsgcmVzb2x2ZSwgcmVqZWN0IH07XG4gICAgICAgICAgICAgICAgbG9nLnRyYWNlKGBTY2VuZS5yZWJ1aWxkR2VvbWV0cnkoKTogcXVldWluZyByZXF1ZXN0YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBUcmFjayB0aWxlIGJ1aWxkIHN0YXRlXG4gICAgICAgICAgICB0aGlzLmJ1aWxkaW5nID0geyByZXNvbHZlLCByZWplY3QgfTtcblxuICAgICAgICAgICAgLy8gUHJvZmlsaW5nXG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zy5wcm9maWxlLmdlb21ldHJ5X2J1aWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZmlsZSgncmVidWlsZEdlb21ldHJ5Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBjb25maWcgKGluIGNhc2UgSlMgb2JqZWN0cyB3ZXJlIG1hbmlwdWxhdGVkIGRpcmVjdGx5KVxuICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNDb25maWdUb1dvcmtlcigpO1xuICAgICAgICAgICAgICAgIFN0eWxlTWFuYWdlci5jb21waWxlKHRoaXMudXBkYXRlQWN0aXZlU3R5bGVzKCksIHRoaXMpOyAvLyBvbmx5IHJlY29tcGlsZSBuZXdseSBhY3RpdmUgc3R5bGVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlc2V0RmVhdHVyZVNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5yZXNldFRpbWUoKTtcblxuICAgICAgICAgICAgLy8gUmVidWlsZCB2aXNpYmxlIHRpbGVzXG4gICAgICAgICAgICB0aGlzLnRpbGVfbWFuYWdlci5wcnVuZVRvVmlzaWJsZVRpbGVzKCk7XG4gICAgICAgICAgICB0aGlzLnRpbGVfbWFuYWdlci5mb3JFYWNoVGlsZSh0aWxlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZXMgfHwgc291cmNlcy5pbmRleE9mKHRpbGUuc291cmNlLm5hbWUpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aWxlX21hbmFnZXIuYnVpbGRUaWxlKHRpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50aWxlX21hbmFnZXIudXBkYXRlVGlsZXNGb3JWaWV3KCk7IC8vIHBpY2tzIHVwIGFkZGl0aW9uYWwgdGlsZXMgZm9yIGFueSBuZXcvY2hhbmdlZCBkYXRhIHNvdXJjZXNcbiAgICAgICAgICAgIHRoaXMudGlsZV9tYW5hZ2VyLmNoZWNrQnVpbGRRdWV1ZSgpOyAgICAvLyByZXNvbHZlIGltbWVkaWF0ZWx5IGlmIG5vIHRpbGVzIHRvIGJ1aWxkXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gUHJvZmlsaW5nXG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zy5wcm9maWxlLmdlb21ldHJ5X2J1aWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZmlsZUVuZCgncmVidWlsZEdlb21ldHJ5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRpbGUgbWFuYWdlciBmaW5pc2hlZCBidWlsZGluZyB0aWxlc1xuICAgIC8vIFRPRE8gbW92ZSB0byB0aWxlIG1hbmFnZXJcbiAgICB0aWxlTWFuYWdlckJ1aWxkRG9uZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYnVpbGRpbmcpIHtcbiAgICAgICAgICAgIGxvZy5pbmZvKGBTY2VuZTogYnVpbGQgZ2VvbWV0cnkgZmluaXNoZWRgKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1aWxkaW5nLnJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkaW5nLnJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFub3RoZXIgcmVidWlsZCBxdWV1ZWQ/XG4gICAgICAgICAgICB2YXIgcXVldWVkID0gdGhpcy5idWlsZGluZy5xdWV1ZWQ7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkaW5nID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChxdWV1ZWQpIHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoYFNjZW5lOiBzdGFydGluZyBxdWV1ZWQgcmVidWlsZEdlb21ldHJ5KCkgcmVxdWVzdGApO1xuICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZEdlb21ldHJ5KCkudGhlbihxdWV1ZWQucmVzb2x2ZSwgcXVldWVkLnJlamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgICBMb2FkIChvciByZWxvYWQpIHRoZSBzY2VuZSBjb25maWdcbiAgICAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAgICovXG4gICAgbG9hZFNjZW5lKGNvbmZpZ19zb3VyY2UgPSBudWxsLCBjb25maWdfcGF0aCA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb25maWdfc291cmNlID0gY29uZmlnX3NvdXJjZSB8fCB0aGlzLmNvbmZpZ19zb3VyY2U7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ19zb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ19wYXRoID0gVXRpbHMucGF0aEZvclVSTChjb25maWdfcGF0aCB8fCB0aGlzLmNvbmZpZ19zb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25maWdfcGF0aCA9IFV0aWxzLnBhdGhGb3JVUkwoY29uZmlnX3BhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFNjZW5lTG9hZGVyLmxvYWRTY2VuZSh0aGlzLmNvbmZpZ19zb3VyY2UsIHRoaXMuY29uZmlnX3BhdGgpLnRoZW4oY29uZmlnID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdsb2FkJywgeyBjb25maWc6IHRoaXMuY29uZmlnIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgc291cmNlIHRvIGEgc2NlbmUsIGFyZ3VtZW50cyBgbmFtZWAgYW5kIGBjb25maWdgIG5lZWQgdG8gYmUgcHJvdmlkZWQ6XG4gICAgLy8gIC0gSWYgdGhlIG5hbWUgZG9lc24ndCBtYXRjaCBhIHNvdXJjZXMgaXQgd2lsbCBjcmVhdGUgaXRcbiAgICAvLyAgLSB0aGUgYGNvbmZpZ2Agb2JqIGZvbGxvdyB0aGUgWUFNTCBzY2VuZSBzcGVjLCBleDogYGBge3R5cGU6ICdUb3BvSlNPTicsIHVybDogXCIvL3ZlY3Rvci5tYXB6ZW4uY29tL29zbS9hbGwve3p9L3t4fS97eX0udG9wb2pzb25cIl19YGBgXG4gICAgLy8gICAgdGhhdCBsb29rcyBsaWtlOlxuICAgIC8vXG4gICAgLy8gICAgICBzY2VuZS5zZXREYXRhU291cmNlKFwib3NtXCIsIHt0eXBlOiAnVG9wb0pTT04nLCB1cmw6IFwiLy92ZWN0b3IubWFwemVuLmNvbS9vc20vYWxsL3t6fS97eH0ve3l9LnRvcG9qc29uXCIgfSk7XG4gICAgLy9cbiAgICAvLyAgLSBhbHNvIGNhbiBiZSBwYXNzIGEgYGBgZGF0YWBgYCBvYmo6IGBgYHt0eXBlOiAnR2VvSlNPTicsIGRhdGE6IEpTT2JqIF19YGBgXG4gICAgLy9cbiAgICAvLyAgICAgIHZhciBnZW9qc29uX2RhdGEgPSB7fTtcbiAgICAvLyAgICAgIC4uLlxuICAgIC8vICAgICAgc2NlbmUuc2V0RGF0YVNvdXJjZShcImR5bmFtaWNfZGF0YVwiLCB7dHlwZTogJ0dlb0pTT04nLCBkYXRhOiBnZW9qc29uX2RhdGEgfSk7XG4gICAgLy9cbiAgICBzZXREYXRhU291cmNlIChuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFjb25maWcgfHwgIWNvbmZpZy50eXBlIHx8ICghY29uZmlnLnVybCAmJiAhY29uZmlnLmRhdGEpKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoXCJObyBuYW1lIHByb3ZpZGVkIG9yIG5vdCBhIHZhbGlkIGNvbmZpZzpcIiwgbmFtZSwgY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2FkID0gKHRoaXMuY29uZmlnLnNvdXJjZXNbbmFtZV0gPT0gbnVsbCk7XG4gICAgICAgIGxldCBzb3VyY2UgPSB0aGlzLmNvbmZpZy5zb3VyY2VzW25hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKTtcblxuICAgICAgICBpZiAoc291cmNlLmRhdGEgJiYgdHlwZW9mIHNvdXJjZS5kYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc291cmNlLnVybCA9IFV0aWxzLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoc291cmNlLmRhdGEpXSkpO1xuICAgICAgICAgICAgZGVsZXRlIHNvdXJjZS5kYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvYWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNvbmZpZyh7IHJlYnVpbGQ6IHsgc291cmNlczogW25hbWVdIH0gfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWJ1aWxkKHsgc291cmNlczogW25hbWVdIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlRGF0YVNvdXJjZXMoKSB7XG4gICAgICAgIGxldCByZXNldCA9IFtdOyAvLyBzb3VyY2VzIHRvIHJlc2V0XG4gICAgICAgIGxldCBwcmV2X3NvdXJjZV9uYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlcyk7XG5cbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLmNvbmZpZy5zb3VyY2VzKSB7XG4gICAgICAgICAgICBsZXQgc291cmNlID0gdGhpcy5jb25maWcuc291cmNlc1tuYW1lXTtcbiAgICAgICAgICAgIGxldCBwcmV2X3NvdXJjZSA9IHRoaXMuc291cmNlc1tuYW1lXTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZXNbbmFtZV0gPSBEYXRhU291cmNlLmNyZWF0ZShPYmplY3QuYXNzaWduKHt9LCBzb3VyY2UsIHtuYW1lfSksIHRoaXMuc291cmNlcyk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNvdXJjZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNvdXJjZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBgQ291bGQgbm90IGNyZWF0ZSBkYXRhIHNvdXJjZTogJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICBsb2cud2FybihgU2NlbmU6ICR7bWVzc2FnZX1gLCBzb3VyY2UpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignd2FybmluZycsIHsgdHlwZTogJ3NvdXJjZXMnLCBzb3VyY2UsIG1lc3NhZ2UgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERhdGEgc291cmNlIGNoYW5nZWQ/XG4gICAgICAgICAgICBpZiAoRGF0YVNvdXJjZS5jaGFuZ2VkKHRoaXMuc291cmNlc1tuYW1lXSwgcHJldl9zb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgcmVzZXQucHVzaChuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNvdXJjZXMgdGhhdCB3ZXJlIHJlbW92ZWRcbiAgICAgICAgZm9yIChsZXQgcyBvZiBwcmV2X3NvdXJjZV9uYW1lcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5zb3VyY2VzW3NdKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlc1tzXTsgLy8gVE9ETzogcmVtb3ZlIGZyb20gd29ya2VycyB0b28/XG4gICAgICAgICAgICAgICAgcmVzZXQucHVzaChzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aWxlcyBmcm9tIHNvdXJjZXMgdGhhdCBoYXZlIGNoYW5nZWRcbiAgICAgICAgaWYgKHJlc2V0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMudGlsZV9tYW5hZ2VyLnJlbW92ZVRpbGVzKHRpbGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAocmVzZXQuaW5kZXhPZih0aWxlLnNvdXJjZS5uYW1lKSA+IC0xKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFyayBzb3VyY2VzIHRoYXQgZ2VuZXJhdGUgZ2VvbWV0cnkgdGlsZXNcbiAgICAgICAgLy8gKGFsbCBleGNlcHQgdGhvc2UgdGhhdCBhcmUgb25seSByYXN0ZXIgc291cmNlcyBhdHRhY2hlZCB0byBvdGhlciBzb3VyY2VzKVxuICAgICAgICBmb3IgKGxldCBsYXllciBvZiBVdGlscy52YWx1ZXModGhpcy5jb25maWcubGF5ZXJzKSkge1xuICAgICAgICAgICAgaWYgKGxheWVyLmRhdGEgJiYgdGhpcy5zb3VyY2VzW2xheWVyLmRhdGEuc291cmNlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlc1tsYXllci5kYXRhLnNvdXJjZV0uZ2VvbWV0cnlfdGlsZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTG9hZCBhbGwgdGV4dHVyZXMgaW4gdGhlIHNjZW5lIGRlZmluaXRpb25cbiAgICBsb2FkVGV4dHVyZXMoKSB7XG4gICAgICAgIHJldHVybiBUZXh0dXJlLmNyZWF0ZUZyb21PYmplY3QodGhpcy5nbCwgdGhpcy5jb25maWcudGV4dHVyZXMpO1xuICAgIH1cblxuICAgIC8vIENhbGxlZCAoY3VycmVudGx5IG1hbnVhbGx5KSBhZnRlciBzdHlsZXMgYXJlIHVwZGF0ZWQgaW4gc3R5bGVzaGVldFxuICAgIHVwZGF0ZVN0eWxlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkICYmICF0aGlzLmluaXRpYWxpemluZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTY2VuZS51cGRhdGVTdHlsZXMoKSBjYWxsZWQgYmVmb3JlIHNjZW5lIHdhcyBpbml0aWFsaXplZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gKFJlKWJ1aWxkIHN0eWxlcyBmcm9tIGNvbmZpZ1xuICAgICAgICB0aGlzLnN0eWxlcyA9IFN0eWxlTWFuYWdlci5idWlsZCh0aGlzLmNvbmZpZy5zdHlsZXMsIHRoaXMpO1xuXG4gICAgICAgIC8vIE9wdGlvbmFsbHkgc2V0IEdMIGNvbnRleHQgKHVzZWQgd2hlbiBpbml0aWFsaXppbmcgb3IgcmUtaW5pdGlhbGl6aW5nIEdMIHJlc291cmNlcylcbiAgICAgICAgZm9yICh2YXIgc3R5bGUgb2YgVXRpbHMudmFsdWVzKHRoaXMuc3R5bGVzKSkge1xuICAgICAgICAgICAgc3R5bGUuc2V0R0wodGhpcy5nbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kICYgY29tcGlsZSBhY3RpdmUgc3R5bGVzXG4gICAgICAgIHRoaXMudXBkYXRlQWN0aXZlU3R5bGVzKCk7XG4gICAgICAgIFN0eWxlTWFuYWdlci5jb21waWxlKE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlX3N0eWxlcyksIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIHVwZGF0ZUFjdGl2ZVN0eWxlcygpIHtcbiAgICAgICAgLy8gTWFrZSBhIHNldCBvZiBjdXJyZW50bHkgYWN0aXZlIHN0eWxlcyAodXNlZCBpbiBhIGRyYXcgcnVsZSlcbiAgICAgICAgLy8gTm90ZTogZG9lc24ndCBhY3R1YWxseSBjaGVjayBpZiBhbnkgZ2VvbWV0cnkgbWF0Y2hlcyB0aGUgcnVsZSwganVzdCB0aGF0IHRoZSBzdHlsZSBpcyBwb3RlbnRpYWxseSByZW5kZXJhYmxlXG4gICAgICAgIGxldCBwcmV2X3N0eWxlcyA9IE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlX3N0eWxlcyB8fCB7fSk7XG4gICAgICAgIHRoaXMuYWN0aXZlX3N0eWxlcyA9IHt9O1xuICAgICAgICB2YXIgYW5pbWF0ZWQgPSBmYWxzZTsgLy8gaXMgYW55IGFjdGl2ZSBzdHlsZSBhbmltYXRlZD9cbiAgICAgICAgZm9yICh2YXIgcnVsZSBvZiBVdGlscy5yZWN1cnNlVmFsdWVzKHRoaXMuY29uZmlnLmxheWVycykpIHtcbiAgICAgICAgICAgIGlmIChydWxlICYmIHJ1bGUuZHJhdykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IFtuYW1lLCBncm91cF0gb2YgVXRpbHMuZW50cmllcyhydWxlLmRyYXcpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHdhcm4gb24gbm9uLW9iamVjdCBkcmF3IGdyb3VwXG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cCAhPSBudWxsICYmIHR5cGVvZiBncm91cCA9PT0gJ29iamVjdCcgJiYgZ3JvdXAudmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHlsZV9uYW1lID0gZ3JvdXAuc3R5bGUgfHwgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHlsZXMgPSBbc3R5bGVfbmFtZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbmFsIGFkZGl0aW9uYWwgb3V0bGluZSBzdHlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwLm91dGxpbmUgJiYgZ3JvdXAub3V0bGluZS5zdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlcy5wdXNoKGdyb3VwLm91dGxpbmUuc3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXMgPSBzdHlsZXMuZmlsdGVyKHggPT4gdGhpcy5zdHlsZXNbeF0pLmZvckVhY2goc3R5bGVfbmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0eWxlID0gdGhpcy5zdHlsZXNbc3R5bGVfbmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlX3N0eWxlc1tzdHlsZV9uYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZS5hbmltYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2UgZXhwbGljaXRseSBzZXQgc2NlbmUgYW5pbWF0aW9uIGZsYWcgaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIHR1cm4gb24gYW5pbWF0aW9uXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSBhbnkgYW5pbWF0ZWQgc3R5bGVzXG4gICAgICAgIHRoaXMuYW5pbWF0ZWQgPSB0aGlzLmNvbmZpZy5zY2VuZS5hbmltYXRlZCAhPT0gdW5kZWZpbmVkID8gdGhpcy5jb25maWcuc2NlbmUuYW5pbWF0ZWQgOiBhbmltYXRlZDtcblxuICAgICAgICAvLyBDb21waWxlIG5ld2x5IGFjdGl2ZSBzdHlsZXNcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlX3N0eWxlcykuZmlsdGVyKHMgPT4gcHJldl9zdHlsZXMuaW5kZXhPZihzKSA9PT0gLTEpO1xuICAgIH1cblxuICAgIC8vIEdldCBhY3RpdmUgY2FtZXJhIC0gZm9yIHB1YmxpYyBBUElcbiAgICBnZXRBY3RpdmVDYW1lcmEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXcuZ2V0QWN0aXZlQ2FtZXJhKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGFjdGl2ZSBjYW1lcmEgLSBmb3IgcHVibGljIEFQSVxuICAgIHNldEFjdGl2ZUNhbWVyYShuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXcuc2V0QWN0aXZlQ2FtZXJhKG5hbWUpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBsaWdodGluZ1xuICAgIGNyZWF0ZUxpZ2h0cygpIHtcbiAgICAgICAgdGhpcy5saWdodHMgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSBpbiB0aGlzLmNvbmZpZy5saWdodHMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcubGlnaHRzW2ldIHx8IHR5cGVvZiB0aGlzLmNvbmZpZy5saWdodHNbaV0gIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGlnaHQgPSB0aGlzLmNvbmZpZy5saWdodHNbaV07XG4gICAgICAgICAgICBsaWdodC5uYW1lID0gaS5yZXBsYWNlKCctJywgJ18nKTsgLy8gbGlnaHQgbmFtZXMgYXJlIGluamVjdGVkIGluIHNoYWRlcnMsIGNhbid0IGhhdmUgaHlwaGVuc1xuICAgICAgICAgICAgbGlnaHQudmlzaWJsZSA9IChsaWdodC52aXNpYmxlID09PSBmYWxzZSkgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgICAgICBpZiAobGlnaHQudmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlnaHRzW2xpZ2h0Lm5hbWVdID0gTGlnaHQuY3JlYXRlKHRoaXMudmlldywgbGlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIExpZ2h0LmluamVjdCh0aGlzLmxpZ2h0cyk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGJhY2tncm91bmQgY29sb3JcbiAgICBzZXRCYWNrZ3JvdW5kKCkge1xuICAgICAgICBsZXQgYmcgPSB0aGlzLmNvbmZpZy5zY2VuZS5iYWNrZ3JvdW5kO1xuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB7fTtcbiAgICAgICAgaWYgKGJnICYmIGJnLmNvbG9yKSB7XG4gICAgICAgICAgICB0aGlzLmJhY2tncm91bmQuY29sb3IgPSBTdHlsZVBhcnNlci5wYXJzZUNvbG9yKGJnLmNvbG9yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuYmFja2dyb3VuZC5jb2xvcikge1xuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLmNvbG9yID0gWzAsIDAsIDAsIDBdOyAvLyBkZWZhdWx0IGJhY2tncm91bmQgVE9ETzogdmFyeSB3L3NjZW5lIGFscGhhXG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBiYWNrZ3JvdW5kIGlzIGZ1bGx5IG9wYXF1ZSwgc2V0IGNhbnZhcyBiYWNrZ3JvdW5kIHRvIG1hdGNoXG4gICAgICAgIGlmICh0aGlzLmJhY2tncm91bmQuY29sb3JbM10gPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICAgICAgICAgICAgYHJnYmEoJHt0aGlzLmJhY2tncm91bmQuY29sb3IubWFwKGMgPT4gTWF0aC5mbG9vcihjICogMjU1KSkuam9pbignLCAnKX0pYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdsLmNsZWFyQ29sb3IoLi4udGhpcy5iYWNrZ3JvdW5kLmNvbG9yKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgc2NlbmUgY29uZmlnLCBhbmQgb3B0aW9uYWxseSByZWJ1aWxkIGdlb21ldHJ5XG4gICAgLy8gcmVidWlsZCBjYW4gYmUgYm9vbGVhbiwgb3IgYW4gb2JqZWN0IGNvbnRhaW5pbmcgcmVidWlsZCBvcHRpb25zIHRvIHBhc3N0aHJvdWdoXG4gICAgdXBkYXRlQ29uZmlnKHsgcmVidWlsZCB9ID0ge30pIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0aW9uKys7XG4gICAgICAgIHRoaXMudXBkYXRpbmcrKztcbiAgICAgICAgdGhpcy5jb25maWcuc2NlbmUgPSB0aGlzLmNvbmZpZy5zY2VuZSB8fCB7fTtcblxuICAgICAgICBTdHlsZU1hbmFnZXIuaW5pdCgpO1xuICAgICAgICB0aGlzLnZpZXcucmVzZXQoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVMaWdodHMoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEYXRhU291cmNlcygpO1xuICAgICAgICB0aGlzLmxvYWRUZXh0dXJlcygpO1xuICAgICAgICB0aGlzLnNldEJhY2tncm91bmQoKTtcblxuICAgICAgICAvLyBUT0RPOiBkZXRlY3QgY2hhbmdlcyB0byBzdHlsZXM/IGFscmVhZHkgKGN1cnJlbnRseSkgbmVlZCB0byByZWNvbXBpbGUgYW55d2F5IHdoZW4gY2FtZXJhIG9yIGxpZ2h0cyBjaGFuZ2VcbiAgICAgICAgdGhpcy51cGRhdGVTdHlsZXMoKTtcblxuICAgICAgICAvLyBPcHRpb25hbGx5IHJlYnVpbGQgZ2VvbWV0cnlcbiAgICAgICAgbGV0IGRvbmUgPSByZWJ1aWxkID9cbiAgICAgICAgICAgIHRoaXMucmVidWlsZEdlb21ldHJ5KHR5cGVvZiByZWJ1aWxkID09PSAnb2JqZWN0JyAmJiByZWJ1aWxkKSA6XG4gICAgICAgICAgICB0aGlzLnN5bmNDb25maWdUb1dvcmtlcigpOyAvLyByZWJ1aWxkR2VvbWV0cnkoKSBhbHNvIHN5bmNzIGNvbmZpZ1xuXG4gICAgICAgIC8vIEZpbmlzaCBieSB1cGRhdGluZyBib3VuZHMgYW5kIHJlLXJlbmRlcmluZ1xuICAgICAgICByZXR1cm4gZG9uZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRpbmctLTtcbiAgICAgICAgICAgIHRoaXMudmlldy51cGRhdGVCb3VuZHMoKTtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFJlZHJhdygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTZXJpYWxpemUgY29uZmlnIGFuZCBzZW5kIHRvIHdvcmtlclxuICAgIHN5bmNDb25maWdUb1dvcmtlcigpIHtcbiAgICAgICAgLy8gVGVsbCB3b3JrZXJzIHdlJ3JlIGFib3V0IHRvIHJlYnVpbGQgKHNvIHRoZXkgY2FuIHVwZGF0ZSBzdHlsZXMsIGV0Yy4pXG4gICAgICAgIHRoaXMuY29uZmlnX3NlcmlhbGl6ZWQgPSBVdGlscy5zZXJpYWxpemVXaXRoRnVuY3Rpb25zKHRoaXMuY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh0aGlzLndvcmtlcnMsICdzZWxmLnVwZGF0ZUNvbmZpZycsIHtcbiAgICAgICAgICAgIGNvbmZpZzogdGhpcy5jb25maWdfc2VyaWFsaXplZCxcbiAgICAgICAgICAgIGdlbmVyYXRpb246IHRoaXMuZ2VuZXJhdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXNldEZlYXR1cmVTZWxlY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IEZlYXR1cmVTZWxlY3Rpb24odGhpcy5nbCwgdGhpcy53b3JrZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLndvcmtlcnMpIHtcbiAgICAgICAgICAgIFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh0aGlzLndvcmtlcnMsICdzZWxmLnJlc2V0RmVhdHVyZVNlbGVjdGlvbicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0cyB0aGUgY3VycmVudCBmZWF0dXJlIHNlbGVjdGlvbiBtYXAgc2l6ZSBhY3Jvc3MgYWxsIHdvcmtlcnMuIFJldHVybnMgYSBwcm9taXNlLlxuICAgIGdldEZlYXR1cmVTZWxlY3Rpb25NYXBTaXplKCkge1xuICAgICAgICBpZiAodGhpcy5mZXRjaGluZ19zZWxlY3Rpb25fbWFwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZldGNoaW5nX3NlbGVjdGlvbl9tYXAgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2UodGhpcy53b3JrZXJzLCAnc2VsZi5nZXRGZWF0dXJlU2VsZWN0aW9uTWFwU2l6ZScpXG4gICAgICAgICAgICAudGhlbihzaXplcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaGluZ19zZWxlY3Rpb25fbWFwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpemVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgaW50ZXJuYWwgY2xvY2ssIG1vc3RseSB1c2VmdWwgZm9yIGNvbnNpc3RlbnQgZXhwZXJpZW5jZSB3aGVuIGNoYW5naW5nIHN0eWxlcy9kZWJ1Z2dpbmdcbiAgICByZXNldFRpbWUoKSB7XG4gICAgICAgIHRoaXMuc3RhcnRfdGltZSA9ICtuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIEZpcmVzIGV2ZW50IHdoZW4gcmVuZGVyZWQgdGlsZSBzZXQgb3Igc3R5bGUgY2hhbmdlc1xuICAgIHVwZGF0ZVZpZXdDb21wbGV0ZSAoKSB7XG4gICAgICAgIGlmICgodGhpcy5yZW5kZXJfY291bnRfY2hhbmdlZCB8fCB0aGlzLmdlbmVyYXRpb24gIT09IHRoaXMubGFzdF9jb21wbGV0ZV9nZW5lcmF0aW9uKSAmJlxuICAgICAgICAgICAgIXRoaXMudGlsZV9tYW5hZ2VyLmlzTG9hZGluZ1Zpc2libGVUaWxlcygpKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RfY29tcGxldGVfZ2VuZXJhdGlvbiA9IHRoaXMuZ2VuZXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndmlld19jb21wbGV0ZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRWaWV3Q29tcGxldGUgKCkge1xuICAgICAgICB0aGlzLmxhc3RfY29tcGxldGVfZ2VuZXJhdGlvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gVGFrZSBhIHNjcmVlbnNob3RcbiAgICAvLyBBc3luY2hyb25vdXMgYmVjYXVzZSB3ZSBoYXZlIHRvIHdhaXQgZm9yIG5leHQgcmVuZGVyIHRvIGNhcHR1cmUgYnVmZmVyXG4gICAgLy8gUmV0dXJucyBhIHByb21pc2VcbiAgICBzY3JlZW5zaG90ICgpIHtcbiAgICAgICAgaWYgKHRoaXMucXVldWVfc2NyZWVuc2hvdCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWV1ZV9zY3JlZW5zaG90LnByb21pc2U7IC8vIG9ubHkgY2FwdHVyZSBvbmUgc2NyZWVuc2hvdCBhdCBhIHRpbWVcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVxdWVzdFJlZHJhdygpO1xuXG4gICAgICAgIC8vIFdpbGwgcmVzb2x2ZSBvbmNlIHJlbmRlcmluZyBpcyBjb21wbGV0ZSBhbmQgcmVuZGVyIGJ1ZmZlciBpcyBjYXB0dXJlZFxuICAgICAgICB0aGlzLnF1ZXVlX3NjcmVlbnNob3QgPSB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZV9zY3JlZW5zaG90LnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlX3NjcmVlbnNob3QucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlX3NjcmVlbnNob3QucmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVldWVfc2NyZWVuc2hvdC5wcm9taXNlO1xuICAgIH1cblxuICAgIC8vIENhbGxlZCBhZnRlciByZW5kZXJpbmcsIGNhcHR1cmVzIHJlbmRlciBidWZmZXIgYW5kIHJlc29sdmVzIHByb21pc2Ugd2l0aCBpbWFnZSBkYXRhXG4gICAgY29tcGxldGVTY3JlZW5zaG90ICgpIHtcbiAgICAgICAgaWYgKHRoaXMucXVldWVfc2NyZWVuc2hvdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBHZXQgZGF0YSBVUkwsIGNvbnZlcnQgdG8gYmxvYlxuICAgICAgICAgICAgLy8gU3RyaXAgaG9zdC9taW1ldHlwZS9ldGMuLCBjb252ZXJ0IGJhc2U2NCB0byBiaW5hcnkgd2l0aG91dCBVVEYtOCBtYW5nbGluZ1xuICAgICAgICAgICAgLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS91bmNvbmVkLzQzNzA4MjJcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLmNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuICAgICAgICAgICAgdmFyIGRhdGEgPSBhdG9iKHVybC5zbGljZSgyMikpO1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGRhdGEubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IGRhdGEuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2ltYWdlL3BuZycgfSk7XG5cbiAgICAgICAgICAgIC8vIFJlc29sdmUgd2l0aCBzY3JlZW5zaG90IGRhdGFcbiAgICAgICAgICAgIHRoaXMucXVldWVfc2NyZWVuc2hvdC5yZXNvbHZlKHsgdXJsLCBibG9iIH0pO1xuICAgICAgICAgICAgdGhpcy5xdWV1ZV9zY3JlZW5zaG90ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLy8gU3RhdHMvZGVidWcvcHJvZmlsaW5nIG1ldGhvZHNcblxuICAgIC8vIExvZyBtZXNzYWdlcyBwYXNzIHRocm91Z2ggZnJvbSB3ZWIgd29ya2Vyc1xuICAgIHdvcmtlckxvZ01lc3NhZ2UoZXZlbnQpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGV2ZW50LmRhdGEpIDogZXZlbnQuZGF0YTsgLy8gb3B0aW9uYWwgdW4tc3RyaW5naWZ5XG4gICAgICAgIGlmIChkYXRhLnR5cGUgIT09ICdsb2cnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeyB3b3JrZXJfaWQsIGxldmVsLCBtc2cgfSA9IGRhdGE7XG5cbiAgICAgICAgaWYgKGxvZ1tsZXZlbF0pIHtcbiAgICAgICAgICAgIGxvZ1tsZXZlbF0oYHdvcmtlciAke3dvcmtlcl9pZH06YCwgIC4uLm1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoYFNjZW5lLndvcmtlckxvZ01lc3NhZ2U6IHVucmVjb2duaXplZCBsb2cgbGV2ZWwgJHtsZXZlbH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2ZpbGUgaGVscGVycywgaXNzdWVzIGEgcHJvZmlsZSBvbiBtYWluIHRocmVhZCAmIGFsbCB3b3JrZXJzXG4gICAgX3Byb2ZpbGUobmFtZSkge1xuICAgICAgICBjb25zb2xlLnByb2ZpbGUoYG1haW4gdGhyZWFkOiAke25hbWV9YCk7XG4gICAgICAgIFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh0aGlzLndvcmtlcnMsICdzZWxmLnByb2ZpbGUnLCBuYW1lKTtcbiAgICB9XG5cbiAgICBfcHJvZmlsZUVuZChuYW1lKSB7XG4gICAgICAgIGNvbnNvbGUucHJvZmlsZUVuZChgbWFpbiB0aHJlYWQ6ICR7bmFtZX1gKTtcbiAgICAgICAgV29ya2VyQnJva2VyLnBvc3RNZXNzYWdlKHRoaXMud29ya2VycywgJ3NlbGYucHJvZmlsZUVuZCcsIG5hbWUpO1xuICAgIH1cblxuICAgIC8vIERlYnVnIGNvbmZpZyBhbmQgZnVuY3Rpb25zXG4gICAgc2V0dXBEZWJ1ZyAoKSB7XG4gICAgICAgIGxldCBzY2VuZSA9IHRoaXM7XG4gICAgICAgIHRoaXMuZGVidWcgPSB7XG4gICAgICAgICAgICBwcm9maWxlOiB7XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnlfYnVpbGQ6IGZhbHNlXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyBSZWJ1aWxkIGdlb21ldHJ5IGEgZ2l2ZW4gIyBvZiB0aW1lcyBhbmQgcHJpbnQgYXZlcmFnZSwgbWluLCBtYXggdGltaW5nc1xuICAgICAgICAgICAgdGltZVJlYnVpbGQgKG51bSA9IDEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgICAgIGxldCB0aW1lcyA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBjeWNsZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXJ0ID0gK25ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLnJlYnVpbGQob3B0aW9ucykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lcy5wdXNoKCtuZXcgRGF0ZSgpIC0gc3RhcnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltZXMubGVuZ3RoIDwgbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhdmcgPSB+fih0aW1lcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiKSAvIHRpbWVzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oYFByb2ZpbGVkIHJlYnVpbGQgJHtudW19IHRpbWVzOiAke2F2Z30gYXZnICgke01hdGgubWluKC4uLnRpbWVzKX0gbWluLCAke01hdGgubWF4KC4uLnRpbWVzKX0gbWF4KWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGN5Y2xlKCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyBSZXR1cm4gZ2VvbWV0cnkgY291bnRzIG9mIHZpc2libGUgdGlsZXMsIGdyb3VwZWQgYnkgc3R5bGUgbmFtZVxuICAgICAgICAgICAgZ2VvbWV0cnlDb3VudEJ5U3R5bGUgKCkge1xuICAgICAgICAgICAgICAgIGxldCBjb3VudHMgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB0aWxlIG9mIHNjZW5lLnRpbGVfbWFuYWdlci5nZXRSZW5kZXJhYmxlVGlsZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdHlsZSBpbiB0aWxlLm1lc2hlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzW3N0eWxlXSA9IGNvdW50c1tzdHlsZV0gfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c1tzdHlsZV0gKz0gdGlsZS5tZXNoZXNbc3R5bGVdLmdlb21ldHJ5X2NvdW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3VudHM7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZW9tZXRyeUNvdW50QnlCYXNlU3R5bGUgKCkge1xuICAgICAgICAgICAgICAgIGxldCBzdHlsZV9jb3VudHMgPSBzY2VuZS5kZWJ1Zy5nZW9tZXRyeUNvdW50QnlTdHlsZSgpO1xuICAgICAgICAgICAgICAgIGxldCBjb3VudHMgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzdHlsZSBpbiBzdHlsZV9jb3VudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJhc2UgPSBzY2VuZS5zdHlsZXNbc3R5bGVdLmJ1aWx0X2luID8gc3R5bGUgOiBzY2VuZS5zdHlsZXNbc3R5bGVdLmJhc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50c1tiYXNlXSA9IGNvdW50c1tiYXNlXSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICBjb3VudHNbYmFzZV0gKz0gc3R5bGVfY291bnRzW3N0eWxlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCBVdGlscyBmcm9tICcuL3V0aWxzL3V0aWxzJztcbmltcG9ydCBHTFNMIGZyb20gJy4vZ2wvZ2xzbCc7XG5pbXBvcnQge1N0eWxlUGFyc2VyfSBmcm9tICcuL3N0eWxlcy9zdHlsZV9wYXJzZXInO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tICcuL3V0aWxzL21lcmdlJztcblxudmFyIFNjZW5lTG9hZGVyO1xuXG5leHBvcnQgZGVmYXVsdCBTY2VuZUxvYWRlciA9IHtcblxuICAgIC8vIExvYWQgc2NlbmVzIGRlZmluaXRpb25zIGZyb20gVVJMICYgcHJvcHJvY2Vzc1xuICAgIGxvYWRTY2VuZSh1cmwsIHBhdGggPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBTY2VuZUxvYWRlci5sb2FkU2NlbmVSZWN1cnNpdmUodXJsLCBwYXRoKS50aGVuKFNjZW5lTG9hZGVyLmZpbmFsaXplKTtcbiAgICB9LFxuXG4gICAgLy8gTG9hZHMgc2NlbmUgZmlsZXMgZnJvbSBVUkwsIHJlY3Vyc2l2ZWx5IGxvYWRpbmcgJ2ltcG9ydCcgc2NlbmVzXG4gICAgLy8gT3B0aW9uYWwgKmluaXRpYWwqIHBhdGggb25seSAod29uJ3QgYmUgcGFzc2VkIHRvIHJlY3Vyc2l2ZSAnaW1wb3J0JyBjYWxscylcbiAgICAvLyBVc2VmdWwgZm9yIGxvYWRpbmcgcmVzb3VyY2VzIGluIGJhc2Ugc2NlbmUgZmlsZSBmcm9tIGEgc2VwYXJhdGUgbG9jYXRpb25cbiAgICAvLyAoZS5nLiBpbiBUYW5ncmFtIFBsYXksIHdoZW4gbW9kaWZpZWQgbG9jYWwgc2NlbmUgc2hvdWxkIHN0aWxsIHJlZmVyIHRvIG9yaWdpbmFsIHJlc291cmNlIFVSTHMpXG4gICAgbG9hZFNjZW5lUmVjdXJzaXZlKHVybCwgcGF0aCA9IG51bGwpIHtcbiAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXRoID0gcGF0aCB8fCBVdGlscy5wYXRoRm9yVVJMKHVybCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gVXRpbHMubG9hZFJlc291cmNlKHVybCkudGhlbihjb25maWcgPT4ge1xuICAgICAgICAgICAgLy8gYWNjZXB0IHNpbmdsZS1zdHJpbmcgb3IgYXJyYXlcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmltcG9ydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuaW1wb3J0ID0gW2NvbmZpZy5pbXBvcnRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLmltcG9ydCkpIHtcbiAgICAgICAgICAgICAgICBTY2VuZUxvYWRlci5ub3JtYWxpemUoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb2xsZWN0IFVSTHMgb2Ygc2NlbmVzIHRvIGltcG9ydFxuICAgICAgICAgICAgbGV0IGltcG9ydHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHVybCBvZiBjb25maWcuaW1wb3J0KSB7XG4gICAgICAgICAgICAgICAgaW1wb3J0cy5wdXNoKFV0aWxzLmFkZEJhc2VVUkwodXJsLCBwYXRoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLmltcG9ydDsgLy8gZG9uJ3Qgd2FudCB0byBtZXJnZSB0aGlzIHByb3BlcnR5XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLlxuICAgICAgICAgICAgICAgIGFsbChpbXBvcnRzLm1hcCh1cmwgPT4gU2NlbmVMb2FkZXIubG9hZFNjZW5lUmVjdXJzaXZlKHVybCkpKS5cbiAgICAgICAgICAgICAgICB0aGVuKGNvbmZpZ3MgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZU9iamVjdHMoe30sIC4uLmNvbmZpZ3MsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIFNjZW5lTG9hZGVyLm5vcm1hbGl6ZShjb25maWcsIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLy8gTm9ybWFsaXplIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgYWRqdXN0IHdpdGhpbiBlYWNoIGxvY2FsIHNjZW5lIGZpbGUgKHVzdWFsbHkgYnkgcGF0aClcbiAgICBub3JtYWxpemUoY29uZmlnLCBwYXRoKSB7XG4gICAgICAgIFNjZW5lTG9hZGVyLm5vcm1hbGl6ZURhdGFTb3VyY2VzKGNvbmZpZywgcGF0aCk7XG4gICAgICAgIFNjZW5lTG9hZGVyLm5vcm1hbGl6ZVRleHR1cmVzKGNvbmZpZywgcGF0aCk7XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfSxcblxuICAgIC8vIEV4cGFuZCBwYXRocyBmb3IgZGF0YSBzb3VyY2VcbiAgICBub3JtYWxpemVEYXRhU291cmNlcyhjb25maWcsIHBhdGgpIHtcbiAgICAgICAgY29uZmlnLnNvdXJjZXMgPSBjb25maWcuc291cmNlcyB8fCB7fTtcblxuICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2YgIFV0aWxzLnZhbHVlcyhjb25maWcuc291cmNlcykpIHtcbiAgICAgICAgICAgIHNvdXJjZS51cmwgPSBVdGlscy5hZGRCYXNlVVJMKHNvdXJjZS51cmwsIHBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9LFxuXG4gICAgLy8gRXhwYW5kIHBhdGhzIGFuZCBjZW50cmFsaXplIHRleHR1cmUgZGVmaW5pdGlvbnMgZm9yIGEgc2NlbmUgb2JqZWN0XG4gICAgbm9ybWFsaXplVGV4dHVyZXMoY29uZmlnLCBwYXRoKSB7XG4gICAgICAgIGNvbmZpZy50ZXh0dXJlcyA9IGNvbmZpZy50ZXh0dXJlcyB8fCB7fTtcblxuICAgICAgICAvLyBNb3ZlIFwibG9jYWxseSBkZWZpbmVkXCIgdGV4dHVyZXMsIGUuZy4gdGhvc2Ugc3BlY2lmaWVkIGFzIHN0cmluZ3Mgb3IgYmxvY2tzLFxuICAgICAgICAvLyB0byB0aGUgc2NlbmUncyB0b3AtbGV2ZWwgc2V0IG9mIHRleHR1cmVzIChjb25maWcudGV4dHVyZXMpLiBUaGVyZSBhcmUgMyBzdWNoIHR5cGVzIG9mIHRleHR1cmVzOlxuICAgICAgICAvLyAtIGluIGEgc3R5bGUncyBgdGV4dHVyZWAgcHJvcGVydHkgKHRleHR1cmUgY2FuIGJlIHNwZWNpZmllZCBhcyBzdHJpbmcgb3Igb2JqZWN0KVxuICAgICAgICAvLyAtIGluIGEgc3R5bGUncyBgbWF0ZXJpYWxgIHByb3BlcnRpZXMgKHRleHR1cmUgY2FuIGJlIHNwZWNpZmllZCBhcyBzdHJpbmcgb3Igb2JqZWN0KVxuICAgICAgICAvLyAtIGluIGEgc3R5bGUncyBjdXN0b20gdW5pZm9ybXMgKGBzaGFkZXJzLnVuaWZvcm1zYCkgKHRleHR1cmUgY2FuIGJlIHNwZWNpZmllZCBhcyBzdHJpbmcgb25seSlcbiAgICAgICAgLy9cbiAgICAgICAgLy8gRm9yIHRleHR1cmVzIHNwZWNpZmllZCBhcyBzdHJpbmdzLCB3ZSBmaXJzdCBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSB0ZXh0dXJlIGFscmVhZHkgZGVmaW5lZFxuICAgICAgICAvLyB3aXRoIHRoYXQgc3RyaW5nIG5hbWUuIElmIHRoZXJlIElTLCB0aGVuIG5vIGNoYW5nZXMgYXJlIG1hZGUuIElmIHRoZXJlIGlzIE5PVCwgdGhlbiB0aGUgdGV4dHVyZSBzdHJpbmdcbiAgICAgICAgLy8gaXMgYXNzdW1lZCB0byBiZSBhIFVSTC4gQSB0b3AtbGV2ZWwgYGNvbmZpZy50ZXh0dXJlc2Agb2JqZWN0IGlzIGNyZWF0ZWQgZm9yIHRoZSB0ZXh0dXJlICh3aXRoIGEgcHJpdmF0ZSxcbiAgICAgICAgLy8gc3ludGhldGljIHRleHR1cmUgbmFtZSk7IHRoZSB0ZXh0dXJlJ3MgVVJMIHdpbGwgYmUgZXhwYW5kZWQgdG8gaW5jbHVkZSB0aGUgY3VycmVudCBzY2VuZSBmaWxlJ3MgcGF0aCBiZWxvdy5cbiAgICAgICAgaWYgKGNvbmZpZy5zdHlsZXMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IFtzdHlsZV9uYW1lLCBzdHlsZV0gb2YgVXRpbHMuZW50cmllcyhjb25maWcuc3R5bGVzKSkge1xuICAgICAgICAgICAgICAgIC8vIFN0eWxlIGB0ZXh0dXJlYFxuICAgICAgICAgICAgICAgIGlmIChzdHlsZS50ZXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXggPSBzdHlsZS50ZXh0dXJlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRleHR1cmUgYnkgVVJMIChzdHJpbmctbmFtZWQgdGV4dHVyZSBub3QgcmVmZXJlbmNpbmcgZXhpc3RpbmcgdGV4dHVyZSBkZWZpbml0aW9uKVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRleCA9PT0gJ3N0cmluZycgJiYgIWNvbmZpZy50ZXh0dXJlc1t0ZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dHVyZV9uYW1lID0gJ19fJyArIHN0eWxlX25hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcudGV4dHVyZXNbdGV4dHVyZV9uYW1lXSA9IHsgdXJsOiB0ZXggfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnRleHR1cmUgPSB0ZXh0dXJlX25hbWU7IC8vIHBvaW50IHN0eWxlIHRvIGxvY2F0aW9uIG9mIHRleHR1cmVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIGJ5IG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdGV4ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHR1cmVfbmFtZSA9ICdfXycgKyBzdHlsZV9uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnRleHR1cmVzW3RleHR1cmVfbmFtZV0gPSB0ZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS50ZXh0dXJlID0gdGV4dHVyZV9uYW1lOyAvLyBwb2ludCBzdHlsZSB0byBsb2NhdGlvbiBvZiB0ZXh0dXJlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBNYXRlcmlhbFxuICAgICAgICAgICAgICAgIGlmIChzdHlsZS5tYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBwcm9wIG9mIFsnZW1pc3Npb24nLCAnYW1iaWVudCcsICdkaWZmdXNlJywgJ3NwZWN1bGFyJywgJ25vcm1hbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXRlcmlhbCBwcm9wZXJ0eSBoYXMgYSB0ZXh0dXJlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUubWF0ZXJpYWxbcHJvcF0gIT0gbnVsbCAmJiBzdHlsZS5tYXRlcmlhbFtwcm9wXS50ZXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleCA9IHN0eWxlLm1hdGVyaWFsW3Byb3BdLnRleHR1cmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIGJ5IFVSTCAoc3RyaW5nLW5hbWVkIHRleHR1cmUgbm90IHJlZmVyZW5jaW5nIGV4aXN0aW5nIHRleHR1cmUgZGVmaW5pdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRleCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNvbmZpZy50ZXh0dXJlc1t0ZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0dXJlX25hbWUgPSAnX18nICsgc3R5bGVfbmFtZSArICdfbWF0ZXJpYWxfJyArIHByb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy50ZXh0dXJlc1t0ZXh0dXJlX25hbWVdID0geyB1cmw6IHRleCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5tYXRlcmlhbFtwcm9wXS50ZXh0dXJlID0gdGV4dHVyZV9uYW1lOyAvLyBwb2ludCBzdHlsZSB0byBsb2NhdGlvbiBvZiB0ZXh0dXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRleHR1cmUgYnkgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRleCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHR1cmVfbmFtZSA9ICdfXycgKyBzdHlsZV9uYW1lICsgJ19tYXRlcmlhbF8nICsgcHJvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnRleHR1cmVzW3RleHR1cmVfbmFtZV0gPSB0ZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLm1hdGVyaWFsW3Byb3BdLnRleHR1cmUgPSB0ZXh0dXJlX25hbWU7IC8vIHBvaW50IHN0eWxlIHRvIGxvY2F0aW9uIG9mIHRleHR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBTaGFkZXIgdW5pZm9ybXNcbiAgICAgICAgICAgICAgICBpZiAoc3R5bGUuc2hhZGVycyAmJiBzdHlsZS5zaGFkZXJzLnVuaWZvcm1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHt0eXBlLCB2YWx1ZSwga2V5LCB1bmlmb3Jtc30gb2YgR0xTTC5wYXJzZVVuaWZvcm1zKHN0eWxlLnNoYWRlcnMudW5pZm9ybXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIGJ5IFVSTCAoc3RyaW5nLW5hbWVkIHRleHR1cmUgbm90IHJlZmVyZW5jaW5nIGV4aXN0aW5nIHRleHR1cmUgZGVmaW5pdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnc2FtcGxlcjJEJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFjb25maWcudGV4dHVyZXNbdmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHR1cmVfbmFtZSA9ICdfXycgKyBzdHlsZV9uYW1lICsgJ191bmlmb3JtXycgKyBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnRleHR1cmVzW3RleHR1cmVfbmFtZV0gPSB7IHVybDogdmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtc1trZXldID0gdGV4dHVyZV9uYW1lOyAvLyBwb2ludCBzdHlsZSB0byBsb2NhdGlvbiBvZiB0ZXh0dXJlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBjdXJyZW50IHNjZW5lIGZpbGUgYmFzZSBwYXRoIHRvIHRleHR1cmVzXG4gICAgICAgIC8vIE9ubHkgYWRkcyBwYXRoIGZvciB0ZXh0dXJlcyB3aXRoIHJlbGF0aXZlIFVSTHMsIHNvIHRleHR1cmVzIGluIGltcG9ydGVkIHNjZW5lcyBnZXQgdGhlIGJhc2VcbiAgICAgICAgLy8gcGF0aCBvZiB0aGVpciBpbW1lZGlhdGUgc2NlbmUgZmlsZVxuICAgICAgICBpZiAoY29uZmlnLnRleHR1cmVzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB0ZXh0dXJlIG9mIFV0aWxzLnZhbHVlcyhjb25maWcudGV4dHVyZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUudXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmUudXJsID0gVXRpbHMuYWRkQmFzZVVSTCh0ZXh0dXJlLnVybCwgcGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9LFxuXG4gICAgLy8gTm9ybWFsaXplIHNvbWUgc2NlbmUtd2lkZSBzZXR0aW5ncyB0aGF0IGFwcGx5IHRvIHRoZSBmaW5hbCwgbWVyZ2VkIHNjZW5lXG4gICAgZmluYWxpemUoY29uZmlnKSB7XG4gICAgICAgIC8vIFJlcGxhY2UgZ2xvYmFsIHNjZW5lIHByb3BlcnRpZXNcbiAgICAgICAgY29uZmlnID0gU3R5bGVQYXJzZXIuYXBwbHlHbG9iYWxQcm9wZXJ0aWVzKGNvbmZpZyk7XG5cbiAgICAgICAgLy8gQXNzaWduIGlkcyB0byBkYXRhIHNvdXJjZXNcbiAgICAgICAgbGV0IHNvdXJjZV9pZCA9IDA7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBpbiBjb25maWcuc291cmNlcykge1xuICAgICAgICAgICAgY29uZmlnLnNvdXJjZXNbc291cmNlXS5pZCA9IHNvdXJjZV9pZCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgb25seSBvbmUgY2FtZXJhIHNwZWNpZmllZCwgc2V0IGl0IGFzIGRlZmF1bHRcbiAgICAgICAgY29uZmlnLmNhbWVyYXMgPSBjb25maWcuY2FtZXJhcyB8fCB7fTtcbiAgICAgICAgaWYgKGNvbmZpZy5jYW1lcmEpIHtcbiAgICAgICAgICAgIGNvbmZpZy5jYW1lcmFzLmRlZmF1bHQgPSBjb25maWcuY2FtZXJhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbm8gY2FtZXJhcyBzcGVjaWZpZWQsIGNyZWF0ZSBvbmVcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNvbmZpZy5jYW1lcmFzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbmZpZy5jYW1lcmFzLmRlZmF1bHQgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIG5vIGNhbWVyYSBzZXQgYXMgYWN0aXZlLCB1c2UgZmlyc3Qgb25lXG4gICAgICAgIGxldCBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgY2FtZXJhIG9mIFV0aWxzLnZhbHVlcyhjb25maWcuY2FtZXJhcykpIHtcbiAgICAgICAgICAgIGlmIChjYW1lcmEuYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWN0aXZlKSB7XG4gICAgICAgICAgICBjb25maWcuY2FtZXJhc1tPYmplY3Qua2V5cyhjb25maWcuY2FtZXJhcylbMF1dLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbnN1cmUgdG9wLWxldmVsIHByb3BlcnRpZXNcbiAgICAgICAgY29uZmlnLmxpZ2h0cyA9IGNvbmZpZy5saWdodHMgfHwge307XG4gICAgICAgIGNvbmZpZy5zdHlsZXMgPSBjb25maWcuc3R5bGVzIHx8IHt9O1xuICAgICAgICBjb25maWcubGF5ZXJzID0gY29uZmlnLmxheWVycyB8fCB7fTtcblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxufTtcbiIsIi8qanNoaW50IHdvcmtlcjogdHJ1ZSovXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi91dGlscy91dGlscyc7XG5pbXBvcnQgV29ya2VyQnJva2VyIGZyb20gJy4vdXRpbHMvd29ya2VyX2Jyb2tlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tICcuL3V0aWxzL21lcmdlJztcbmltcG9ydCBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgRGF0YVNvdXJjZSBmcm9tICcuL3NvdXJjZXMvZGF0YV9zb3VyY2UnO1xuaW1wb3J0IEZlYXR1cmVTZWxlY3Rpb24gZnJvbSAnLi9zZWxlY3Rpb24nO1xuaW1wb3J0IHtTdHlsZVBhcnNlcn0gZnJvbSAnLi9zdHlsZXMvc3R5bGVfcGFyc2VyJztcbmltcG9ydCB7U3R5bGVNYW5hZ2VyfSBmcm9tICcuL3N0eWxlcy9zdHlsZV9tYW5hZ2VyJztcbmltcG9ydCB7cGFyc2VSdWxlc30gZnJvbSAnLi9zdHlsZXMvcnVsZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL2dsL3RleHR1cmUnO1xuXG5leHBvcnQgdmFyIFNjZW5lV29ya2VyID0gc2VsZjtcblxuLy8gV29ya2VyIGZ1bmN0aW9uYWxpdHkgd2lsbCBvbmx5IGJlIGRlZmluZWQgaW4gd29ya2VyIHRocmVhZFxuaWYgKFV0aWxzLmlzV29ya2VyVGhyZWFkKSB7XG5cbk9iamVjdC5hc3NpZ24oc2VsZiwge1xuXG4gICAgRmVhdHVyZVNlbGVjdGlvbixcblxuICAgIHNvdXJjZXM6IHtcbiAgICAgICAgdGlsZXM6IHt9LFxuICAgICAgICBvYmplY3RzOiB7fVxuICAgIH0sXG4gICAgc3R5bGVzOiB7fSxcbiAgICBydWxlczoge30sXG4gICAgbGF5ZXJzOiB7fSxcbiAgICB0aWxlczoge30sXG4gICAgb2JqZWN0czoge30sXG4gICAgY29uZmlnOiB7fSwgICAgIC8vIHJhdyBjb25maWcgKGUuZy4gZnVuY3Rpb25zLCBldGMuIG5vdCBleHBhbmRlZClcblxuICAgIC8vIEluaXRpYWxpemUgd29ya2VyXG4gICAgaW5pdCAod29ya2VyX2lkLCBudW1fd29ya2VycywgZGV2aWNlX3BpeGVsX3JhdGlvKSB7XG4gICAgICAgIHNlbGYuX3dvcmtlcl9pZCA9IHdvcmtlcl9pZDtcbiAgICAgICAgc2VsZi5udW1fd29ya2VycyA9IG51bV93b3JrZXJzO1xuICAgICAgICBVdGlscy5kZXZpY2VfcGl4ZWxfcmF0aW8gPSBkZXZpY2VfcGl4ZWxfcmF0aW87XG4gICAgICAgIEZlYXR1cmVTZWxlY3Rpb24uc2V0UHJlZml4KHNlbGYuX3dvcmtlcl9pZCk7XG4gICAgICAgIHJldHVybiB3b3JrZXJfaWQ7XG4gICAgfSxcblxuICAgIC8vIFN0YXJ0cyBhIGNvbmZpZyByZWZyZXNoXG4gICAgdXBkYXRlQ29uZmlnICh7IGNvbmZpZywgZ2VuZXJhdGlvbiB9KSB7XG4gICAgICAgIGNvbmZpZyA9IEpTT04ucGFyc2UoY29uZmlnKTtcblxuICAgICAgICBzZWxmLmxhc3RfY29uZmlnID0gbWVyZ2VPYmplY3RzKHt9LCBzZWxmLmNvbmZpZyk7XG4gICAgICAgIHNlbGYuY29uZmlnID0gbWVyZ2VPYmplY3RzKHt9LCBjb25maWcpO1xuICAgICAgICBzZWxmLmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uO1xuXG4gICAgICAgIC8vIERhdGEgYmxvY2sgZnVuY3Rpb25zIGFyZSBub3QgY29udGV4dCB3cmFwcGVkIGxpa2UgdGhlIHJlc3Qgb2YgdGhlIHN0eWxlIGZ1bmN0aW9ucyBhcmVcbiAgICAgICAgLy8gVE9ETzogcHJvYmFibHkgd2FudCBhIGNsZWFuZXIgd2F5IHRvIGV4Y2x1ZGUgdGhlc2VcbiAgICAgICAgZm9yIChsZXQgbGF5ZXIgaW4gY29uZmlnLmxheWVycykge1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5sYXllcnNbbGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmxheWVyc1tsYXllcl0uZGF0YSA9IFV0aWxzLnN0cmluZ3NUb0Z1bmN0aW9ucyhjb25maWcubGF5ZXJzW2xheWVyXS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4cGFuZCBnbG9iYWwgcHJvcGVydGllc1xuICAgICAgICBzZWxmLmdsb2JhbCA9IFV0aWxzLnN0cmluZ3NUb0Z1bmN0aW9ucyhjb25maWcuZ2xvYmFsKTtcblxuICAgICAgICAvLyBDcmVhdGUgZGF0YSBzb3VyY2VzXG4gICAgICAgIGNvbmZpZy5zb3VyY2VzID0gVXRpbHMuc3RyaW5nc1RvRnVuY3Rpb25zKGNvbmZpZy5zb3VyY2VzKTsgLy8gcGFyc2UgbmV3IHNvdXJjZXNcbiAgICAgICAgc2VsZi5zb3VyY2VzLnRpbGVzID0ge307IC8vIGNsZWFyIHByZXZpb3VzIHNvdXJjZXNcbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBjb25maWcuc291cmNlcykge1xuICAgICAgICAgICAgbGV0IHNvdXJjZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc291cmNlID0gRGF0YVNvdXJjZS5jcmVhdGUoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnLnNvdXJjZXNbbmFtZV0sIHtuYW1lfSksIHNlbGYuc291cmNlcy50aWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2UudGlsZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZXMudGlsZXNbbmFtZV0gPSBzb3VyY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEaXN0cmlidXRlIG9iamVjdCBzb3VyY2VzIGFjcm9zcyB3b3JrZXJzXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5pZCAlIHNlbGYubnVtX3dvcmtlcnMgPT09IHNlbGYuX3dvcmtlcl9pZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIHNvdXJjZSBpZiBub3QgY2FjaGVkXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlcy5vYmplY3RzW25hbWVdID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGYub2JqZWN0c1tzb3VyY2UubmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub2JqZWN0c1tzb3VyY2UubmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5sb2FkKHNlbGYub2JqZWN0c1tzb3VyY2UubmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xlYXIgdGlsZSBjYWNoZSBpZiBkYXRhIHNvdXJjZSBjb25maWcgY2hhbmdlZFxuICAgICAgICBpZiAoIXNlbGYuY29uZmlnLnNvdXJjZXMgfHxcbiAgICAgICAgICAgICFzZWxmLmxhc3RfY29uZmlnLnNvdXJjZXMgfHxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHNlbGYuY29uZmlnLnNvdXJjZXMpLnNvbWUocyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNlbGYuY29uZmlnLnNvdXJjZXNbc10pICE9PSBKU09OLnN0cmluZ2lmeShzZWxmLmxhc3RfY29uZmlnLnNvdXJjZXNbc10pO1xuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgIHNlbGYudGlsZXMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4cGFuZCBzdHlsZXNcbiAgICAgICAgY29uZmlnLnN0eWxlcyA9IFV0aWxzLnN0cmluZ3NUb0Z1bmN0aW9ucyhjb25maWcuc3R5bGVzLCBTdHlsZVBhcnNlci53cmFwRnVuY3Rpb24pO1xuICAgICAgICBzZWxmLnN0eWxlcyA9IFN0eWxlTWFuYWdlci5idWlsZChjb25maWcuc3R5bGVzLCB7IGdlbmVyYXRpb246IHNlbGYuZ2VuZXJhdGlvbiwgc291cmNlczogc2VsZi5zb3VyY2VzLnRpbGVzIH0pO1xuXG4gICAgICAgIC8vIFBhcnNlIGVhY2ggdG9wLWxldmVsIGxheWVyIGFzIGEgc2VwYXJhdGUgcnVsZSB0cmVlXG4gICAgICAgIHNlbGYubGF5ZXJzID0gVXRpbHMuc3RyaW5nc1RvRnVuY3Rpb25zKGNvbmZpZy5sYXllcnMsIFN0eWxlUGFyc2VyLndyYXBGdW5jdGlvbik7XG4gICAgICAgIHNlbGYucnVsZXMgPSBwYXJzZVJ1bGVzKHNlbGYubGF5ZXJzKTtcblxuICAgICAgICAvLyBTeW5jIHRldHh1cmUgaW5mbyBmcm9tIG1haW4gdGhyZWFkXG4gICAgICAgIHNlbGYuc3luY2luZ190ZXh0dXJlcyA9IHNlbGYuc3luY1RleHR1cmVzKGNvbmZpZy50ZXh0dXJlcyk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHByb21pc2UgZm9yIHdoZW4gY29uZmlnIHJlZnJlc2ggZmluaXNoZXNcbiAgICAgICAgc2VsZi5jb25maWd1cmluZyA9IHNlbGYuc3luY2luZ190ZXh0dXJlcy50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIFV0aWxzLmxvZygnZGVidWcnLCBgdXBkYXRlZCBjb25maWdgKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgd2hlbiBjb25maWcgcmVmcmVzaCBpcyBmaW5pc2hlZFxuICAgIGF3YWl0Q29uZmlndXJhdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNvbmZpZ3VyaW5nO1xuICAgIH0sXG5cbiAgICAvLyBCdWlsZCBhIHRpbGU6IGxvYWQgZnJvbSB0aWxlIHNvdXJjZSBpZiBidWlsZGluZyBmb3IgZmlyc3QgdGltZSwgb3RoZXJ3aXNlIHJlYnVpbGQgd2l0aCBleGlzdGluZyBkYXRhXG4gICAgYnVpbGRUaWxlICh7IHRpbGUgfSkge1xuICAgICAgICAvLyBUaWxlIGNhY2hlZD9cbiAgICAgICAgaWYgKHNlbGYuZ2V0VGlsZSh0aWxlLmtleSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQWxyZWFkeSBsb2FkaW5nP1xuICAgICAgICAgICAgaWYgKHNlbGYuZ2V0VGlsZSh0aWxlLmtleSkubG9hZGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSB0aWxlIGNhY2hlXG4gICAgICAgIHRpbGUgPSBzZWxmLnRpbGVzW3RpbGUua2V5XSA9IE9iamVjdC5hc3NpZ24oc2VsZi5nZXRUaWxlKHRpbGUua2V5KSB8fCB7fSwgdGlsZSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGNvbmZpZyAoc3R5bGVzLCBldGMuKSwgdGhlbiBidWlsZCB0aWxlXG4gICAgICAgIHJldHVybiBzZWxmLmF3YWl0Q29uZmlndXJhdGlvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gRmlyc3QgdGltZSBidWlsZGluZyB0aGUgdGlsZVxuICAgICAgICAgICAgaWYgKHRpbGUubG9hZGVkICE9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHRpbGUubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRpbGUubG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRpbGUuZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZFRpbGVTb3VyY2VEYXRhKHRpbGUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxmLmdldFRpbGUodGlsZS5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMubG9nKCd0cmFjZScsIGBzdG9wIHRpbGUgYnVpbGQgYWZ0ZXIgZGF0YSBzb3VyY2UgbG9hZCBiZWNhdXNlIHRpbGUgd2FzIHJlbW92ZWQ6ICR7dGlsZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXYXJuIGFuZCBjb250aW51ZSBvbiBkYXRhIHNvdXJjZSBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbGUuc291cmNlX2RhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5sb2coJ3dhcm4nLCBgdGlsZSBsb2FkIGVycm9yKHMpIGZvciAke3RpbGUua2V5fTogJHt0aWxlLnNvdXJjZV9kYXRhLmVycm9yfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aWxlLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRpbGUuYnVpbGRHZW9tZXRyeSh0aWxlLCBzZWxmKS50aGVuKGtleXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoV29ya2VyQnJva2VyLnJldHVybldpdGhUcmFuc2ZlcmFibGVzKHsgdGlsZTogVGlsZS5zbGljZSh0aWxlLCBrZXlzKSB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWxlLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUubG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWxlLmVycm9yID0gZXJyb3IudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmxvZygnZXJyb3InLCBgdGlsZSBsb2FkIGVycm9yIGZvciAke3RpbGUua2V5fTogJHt0aWxlLmVycm9yfSBhdDogJHtlcnJvci5zdGFja31gKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHRpbGU6IFRpbGUuc2xpY2UodGlsZSkgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGlsZSBhbHJlYWR5IGxvYWRlZCwganVzdCByZWJ1aWxkXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBVdGlscy5sb2coJ3RyYWNlJywgYHVzZWQgd29ya2VyIGNhY2hlIGZvciB0aWxlICR7dGlsZS5rZXl9YCk7XG5cbiAgICAgICAgICAgICAgICAvLyBCdWlsZCBnZW9tZXRyeVxuICAgICAgICAgICAgICAgIHJldHVybiBUaWxlLmJ1aWxkR2VvbWV0cnkodGlsZSwgc2VsZikudGhlbihrZXlzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdvcmtlckJyb2tlci5yZXR1cm5XaXRoVHJhbnNmZXJhYmxlcyh7IHRpbGU6IFRpbGUuc2xpY2UodGlsZSwga2V5cykgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvLyBMb2FkIHRoaXMgdGlsZSdzIGRhdGEgc291cmNlXG4gICAgbG9hZFRpbGVTb3VyY2VEYXRhICh0aWxlKSB7XG4gICAgICAgIGlmIChzZWxmLnNvdXJjZXMudGlsZXNbdGlsZS5zb3VyY2VdKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VzLnRpbGVzW3RpbGUuc291cmNlXS5sb2FkKHRpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGlsZS5zb3VyY2VfZGF0YSA9IHsgZXJyb3I6IGBEYXRhIHNvdXJjZSAnJHt0aWxlLnNvdXJjZX0nIG5vdCBmb3VuZGAgfTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGlsZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0VGlsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYudGlsZXNba2V5XTtcbiAgICB9LFxuXG4gICAgLy8gUmVtb3ZlIHRpbGVcbiAgICByZW1vdmVUaWxlIChrZXkpIHtcbiAgICAgICAgdmFyIHRpbGUgPSBzZWxmLnRpbGVzW2tleV07XG5cbiAgICAgICAgaWYgKHRpbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQ2FuY2VsIGlmIGxvYWRpbmdcbiAgICAgICAgICAgIGlmICh0aWxlLmxvYWRpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBVdGlscy5sb2coJ3RyYWNlJywgYGNhbmNlbCB0aWxlIGxvYWQgZm9yICR7a2V5fWApO1xuICAgICAgICAgICAgICAgIHRpbGUubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBUaWxlLmNhbmNlbCh0aWxlKTtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gY2FjaGVcbiAgICAgICAgICAgIEZlYXR1cmVTZWxlY3Rpb24uY2xlYXJUaWxlKGtleSk7XG4gICAgICAgICAgICBkZWxldGUgc2VsZi50aWxlc1trZXldO1xuICAgICAgICAgICAgVXRpbHMubG9nKCd0cmFjZScsIGByZW1vdmUgdGlsZSBmcm9tIGNhY2hlIGZvciAke2tleX1gKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBHZXQgYSBmZWF0dXJlIGZyb20gdGhlIHNlbGVjdGlvbiBtYXBcbiAgICBnZXRGZWF0dXJlU2VsZWN0aW9uICh7IGlkLCBrZXkgfSA9IHt9KSB7XG4gICAgICAgIHZhciBzZWxlY3Rpb24gPSBGZWF0dXJlU2VsZWN0aW9uLm1hcFtrZXldO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBmZWF0dXJlOiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5mZWF0dXJlKVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvLyBSZXNldHMgdGhlIGZlYXR1cmUgc2VsZWN0aW9uIHN0YXRlXG4gICAgcmVzZXRGZWF0dXJlU2VsZWN0aW9uICgpIHtcbiAgICAgICAgRmVhdHVyZVNlbGVjdGlvbi5yZXNldCgpO1xuICAgIH0sXG5cbiAgICAvLyBTZWxlY3Rpb24gbWFwIHNpemUgZm9yIHRoaXMgd29ya2VyXG4gICAgZ2V0RmVhdHVyZVNlbGVjdGlvbk1hcFNpemUgKCkge1xuICAgICAgICByZXR1cm4gRmVhdHVyZVNlbGVjdGlvbi5nZXRNYXBTaXplKCk7XG4gICAgfSxcblxuICAgIC8vIFRleHR1cmUgaW5mbyBuZWVkcyB0byBiZSBzeW5jZWQgZnJvbSBtYWluIHRocmVhZCwgZS5nLiB3aWR0aC9oZWlnaHQsIHdoaWNoIHdlIG9ubHkga25vdyBhZnRlciB0aGUgdGV4dHVyZSBsb2Fkc1xuICAgIHN5bmNUZXh0dXJlcyAodGV4X2NvbmZpZykge1xuICAgICAgICBsZXQgdGV4dHVyZXMgPSBbXTtcbiAgICAgICAgaWYgKHRleF9jb25maWcpIHtcbiAgICAgICAgICAgIHRleHR1cmVzLnB1c2goLi4uT2JqZWN0LmtleXModGV4X2NvbmZpZykpO1xuICAgICAgICB9XG5cbiAgICAgICAgVXRpbHMubG9nKCd0cmFjZScsICdzeW5jIHRleHR1cmVzIHRvIHdvcmtlcjonLCB0ZXh0dXJlcyk7XG4gICAgICAgIGlmICh0ZXh0dXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gVGV4dHVyZS5zeW5jVGV4dHVyZXNUb1dvcmtlcih0ZXh0dXJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0sXG5cbiAgICAvLyBTeW5jIGRldmljZSBwaXhlbCByYXRpbyBmcm9tIG1haW4gdGhyZWFkXG4gICAgdXBkYXRlRGV2aWNlUGl4ZWxSYXRpbyAoZGV2aWNlX3BpeGVsX3JhdGlvKSB7XG4gICAgICAgIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbyA9IGRldmljZV9waXhlbF9yYXRpbztcbiAgICB9LFxuXG4gICAgLy8gUHJvZmlsaW5nIGhlbHBlcnNcbiAgICBwcm9maWxlIChuYW1lKSB7XG4gICAgICAgIGNvbnNvbGUucHJvZmlsZShgd29ya2VyICR7c2VsZi5fd29ya2VyX2lkfTogJHtuYW1lfWApO1xuICAgIH0sXG5cbiAgICBwcm9maWxlRW5kIChuYW1lKSB7XG4gICAgICAgIGNvbnNvbGUucHJvZmlsZUVuZChgd29ya2VyICR7c2VsZi5fd29ya2VyX2lkfTogJHtuYW1lfWApO1xuICAgIH1cblxufSk7XG5cbldvcmtlckJyb2tlci5hZGRUYXJnZXQoJ3NlbGYnLCBzZWxmKTtcblxufVxuIiwiaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9nbC90ZXh0dXJlJztcbmltcG9ydCBXb3JrZXJCcm9rZXIgZnJvbSAnLi91dGlscy93b3JrZXJfYnJva2VyJztcblxuaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVTZWxlY3Rpb24ge1xuXG4gICAgY29uc3RydWN0b3IoZ2wsIHdvcmtlcnMpIHtcbiAgICAgICAgdGhpcy5nbCA9IGdsO1xuICAgICAgICB0aGlzLndvcmtlcnMgPSB3b3JrZXJzOyAvLyBwb29sIG9mIHdvcmtlcnMgdG8gcmVxdWVzdCBmZWF0dXJlIGxvb2stdXBzIGZyb20sIGtleWVkIGJ5IGlkXG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIGluaXQoKSB7XG4gICAgICAgIC8vIFNlbGVjdGlvbiBzdGF0ZSB0cmFja2luZ1xuICAgICAgICB0aGlzLnJlcXVlc3RzID0ge307IC8vIHBlbmRpbmcgc2VsZWN0aW9uIHJlcXVlc3RzXG4gICAgICAgIHRoaXMuZmVhdHVyZSA9IG51bGw7IC8vIGN1cnJlbnRseSBzZWxlY3RlZCBmZWF0dXJlXG4gICAgICAgIHRoaXMucmVhZF9kZWxheSA9IDU7IC8vIGRlbGF5IHRpbWUgZnJvbSBzZWxlY3Rpb24gcmVuZGVyIHRvIGZyYW1lYnVmZmVyIHNhbXBsZSwgdG8gYXZvaWQgQ1BVL0dQVSBzeW5jIGxvY2tcbiAgICAgICAgdGhpcy5yZWFkX2RlbGF5X3RpbWVyID0gbnVsbDsgLy8gY3VycmVudCB0aW1lciAoc2V0VGltZW91dCkgZm9yIGRlbGF5ZWQgc2VsZWN0aW9uIHJlYWRzXG5cbiAgICAgICAgdGhpcy5waXhlbCA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICB0aGlzLnBpeGVsMzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucGl4ZWwuYnVmZmVyKTtcblxuICAgICAgICAvLyBGcmFtZSBidWZmZXIgZm9yIHNlbGVjdGlvblxuICAgICAgICAvLyBUT0RPOiBpbml0aWF0ZSBsYXppbHkgaW4gY2FzZSB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBzZWxlY3Rpb25cbiAgICAgICAgdGhpcy5mYm8gPSB0aGlzLmdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7XG4gICAgICAgIHRoaXMuZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMuZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZmJvKTtcbiAgICAgICAgdGhpcy5mYm9fc2l6ZSA9IHsgd2lkdGg6IDI1NiwgaGVpZ2h0OiAyNTYgfTsgLy8gVE9ETzogbWFrZSBjb25maWd1cmFibGUgLyBhZGFwdGl2ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICAgICAgICB0aGlzLmZib19zaXplLmFzcGVjdCA9IHRoaXMuZmJvX3NpemUud2lkdGggLyB0aGlzLmZib19zaXplLmhlaWdodDtcblxuICAgICAgICAvLyBUZXh0dXJlIGZvciB0aGUgRkJPIGNvbG9yIGF0dGFjaG1lbnRcbiAgICAgICAgdmFyIGZib190ZXh0dXJlID0gVGV4dHVyZS5jcmVhdGUoIHRoaXMuZ2wsICdzZWxlY3Rpb25fZmJvJywgeyBmaWx0ZXJpbmc6ICduZWFyZXN0JyB9KTtcbiAgICAgICAgZmJvX3RleHR1cmUuc2V0RGF0YSh0aGlzLmZib19zaXplLndpZHRoLCB0aGlzLmZib19zaXplLmhlaWdodCwgbnVsbCwgeyBmaWx0ZXJpbmc6ICduZWFyZXN0JyB9KTtcbiAgICAgICAgdGhpcy5nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0aGlzLmdsLkZSQU1FQlVGRkVSLCB0aGlzLmdsLkNPTE9SX0FUVEFDSE1FTlQwLCB0aGlzLmdsLlRFWFRVUkVfMkQsIGZib190ZXh0dXJlLnRleHR1cmUsIDApO1xuXG4gICAgICAgIC8vIFJlbmRlcmJ1ZmZlciBmb3IgdGhlIEZCTyBkZXB0aCBhdHRhY2htZW50XG4gICAgICAgIHZhciBmYm9fZGVwdGhfcmIgPSB0aGlzLmdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgICAgICB0aGlzLmdsLmJpbmRSZW5kZXJidWZmZXIodGhpcy5nbC5SRU5ERVJCVUZGRVIsIGZib19kZXB0aF9yYik7XG4gICAgICAgIHRoaXMuZ2wucmVuZGVyYnVmZmVyU3RvcmFnZSh0aGlzLmdsLlJFTkRFUkJVRkZFUiwgdGhpcy5nbC5ERVBUSF9DT01QT05FTlQxNiwgdGhpcy5mYm9fc2l6ZS53aWR0aCwgdGhpcy5mYm9fc2l6ZS5oZWlnaHQpO1xuICAgICAgICB0aGlzLmdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRoaXMuZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZ2wuREVQVEhfQVRUQUNITUVOVCwgdGhpcy5nbC5SRU5ERVJCVUZGRVIsIGZib19kZXB0aF9yYik7XG5cbiAgICAgICAgdGhpcy5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5nbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2wgJiYgdGhpcy5mYm8pIHtcbiAgICAgICAgICAgIHRoaXMuZ2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mYm8pO1xuICAgICAgICAgICAgdGhpcy5mYm8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5nbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBmcmVlIHRleHR1cmU/XG4gICAgfVxuXG4gICAgYmluZCgpIHtcbiAgICAgICAgLy8gU3dpdGNoIHRvIEZCT1xuICAgICAgICB0aGlzLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLmdsLkZSQU1FQlVGRkVSLCB0aGlzLmZibyk7XG4gICAgICAgIHRoaXMuZ2wudmlld3BvcnQoMCwgMCwgdGhpcy5mYm9fc2l6ZS53aWR0aCwgdGhpcy5mYm9fc2l6ZS5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8vIFJlcXVlc3QgZmVhdHVyZSBzZWxlY3Rpb25cbiAgICAvLyBSdW5zIGFzeW5jaHJvbm91c2x5LCBzY2hlZHVsZXMgc2VsZWN0aW9uIGJ1ZmZlciB0byBiZSB1cGRhdGVkXG4gICAgZ2V0RmVhdHVyZUF0KHBvaW50KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAvLyBRdWV1ZSByZXF1ZXN0cyBmb3IgZmVhdHVyZSBzZWxlY3Rpb24sIGFuZCB0aGV5IHdpbGwgYmUgcGlja2VkIHVwIGJ5IHRoZSByZW5kZXIgbG9vcFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fcmVxdWVzdF9pZCA9ICh0aGlzLnNlbGVjdGlvbl9yZXF1ZXN0X2lkICsgMSkgfHwgMDtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdHNbdGhpcy5zZWxlY3Rpb25fcmVxdWVzdF9pZF0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3BvaW50JyxcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5zZWxlY3Rpb25fcmVxdWVzdF9pZCxcbiAgICAgICAgICAgICAgICBwb2ludCxcbiAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQW55IHBlbmRpbmcgc2VsZWN0aW9uIHJlcXVlc3RzXG4gICAgcGVuZGluZ1JlcXVlc3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0cztcbiAgICB9XG5cbiAgICBjbGVhclBlbmRpbmdSZXF1ZXN0cygpIHtcbiAgICAgICAgZm9yICh2YXIgciBpbiB0aGlzLnJlcXVlc3RzKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IHRoaXMucmVxdWVzdHNbcl07XG5cbiAgICAgICAgICAgIC8vIFRoaXMgcmVxdWVzdCB3YXMgYWxyZWFkeSBzZW50IHRvIHRoZSB3b3JrZXIsIHdlJ3JlIGp1c3QgYXdhaXRpbmcgaXRzIHJlcGx5XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5zZW50KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJlamVjdCByZXF1ZXN0IHNpbmNlIGl0IHdpbGwgbmV2ZXIgYmUgZnVsZmlsbGVkXG4gICAgICAgICAgICAvLyBUT0RPOiBwYXNzIGEgcmVhc29uIGZvciByZWplY3Rpb24/XG4gICAgICAgICAgICByZXF1ZXN0LnJlamVjdCh7IHJlcXVlc3QgfSk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5yZXF1ZXN0c1tyXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlYWQgcGVuZGluZyByZXN1bHRzIGZyb20gdGhlIHNlbGVjdGlvbiBidWZmZXIuIENhbGxlZCBhZnRlciByZW5kZXJpbmcgdG8gc2VsZWN0aW9uIGJ1ZmZlci5cbiAgICByZWFkKCkge1xuICAgICAgICAvLyBEZWxheSByZWFkaW5nIHRoZSBwaXhlbCByZXN1bHQgZnJvbSB0aGUgc2VsZWN0aW9uIGJ1ZmZlciB0byBhdm9pZCBDUFUvR1BVIHN5bmMgbG9jay5cbiAgICAgICAgLy8gQ2FsbGluZyByZWFkUGl4ZWxzIHN5bmNocm9ub3VzbHkgY2F1c2VkIGEgbWFzc2l2ZSBwZXJmb3JtYW5jZSBoaXQsIHByZXN1bWFibHkgc2luY2UgaXRcbiAgICAgICAgLy8gZm9yY2VkIHRoaXMgZnVuY3Rpb24gdG8gd2FpdCBmb3IgdGhlIEdQVSB0byBmaW5pc2ggcmVuZGVyaW5nIGFuZCByZXRyaWV2ZSB0aGUgdGV4dHVyZSBjb250ZW50cy5cbiAgICAgICAgaWYgKHRoaXMucmVhZF9kZWxheV90aW1lciAhPSBudWxsKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWFkX2RlbGF5X3RpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlYWRfZGVsYXlfdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAgICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy5mYm8pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciByIGluIHRoaXMucmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IHRoaXMucmVxdWVzdHNbcl07XG5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIHJlcXVlc3Qgd2FzIGFscmVhZHkgc2VudCB0byB0aGUgd29ya2VyLCB3ZSdyZSBqdXN0IGF3YWl0aW5nIGl0cyByZXBseVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBvdGhlciBzZWxlY3Rpb24gdHlwZXMsIHN1Y2ggYXMgZmVhdHVyZXMgd2l0aGluIGEgYm94XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QudHlwZSAhPT0gJ3BvaW50Jykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBDaGVjayBzZWxlY3Rpb24gbWFwIGFnYWluc3QgRkJPXG4gICAgICAgICAgICAgICAgZ2wucmVhZFBpeGVscyhcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcihyZXF1ZXN0LnBvaW50LnggKiB0aGlzLmZib19zaXplLndpZHRoKSxcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcigoMSAtIHJlcXVlc3QucG9pbnQueSkgKiB0aGlzLmZib19zaXplLmhlaWdodCksXG4gICAgICAgICAgICAgICAgICAgIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRoaXMucGl4ZWwpO1xuICAgICAgICAgICAgICAgIHZhciBmZWF0dXJlX2tleSA9ICh0aGlzLnBpeGVsWzBdICsgKHRoaXMucGl4ZWxbMV0gPDwgOCkgKyAodGhpcy5waXhlbFsyXSA8PCAxNikgKyAodGhpcy5waXhlbFszXSA8PCAyNCkpID4+PiAwO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgZmVhdHVyZSBmb3VuZCwgYXNrIGFwcHJvcHJpYXRlIHdlYiB3b3JrZXIgdG8gbG9va3VwIGZlYXR1cmVcbiAgICAgICAgICAgICAgICB2YXIgd29ya2VyX2lkID0gdGhpcy5waXhlbFszXTtcbiAgICAgICAgICAgICAgICBpZiAod29ya2VyX2lkICE9PSAyNTUpIHsgLy8gMjU1IGluZGljYXRlcyBhbiBlbXB0eSBzZWxlY3Rpb24gYnVmZmVyIHBpeGVsXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLndvcmtlcnNbd29ya2VyX2lkXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZXJzW3dvcmtlcl9pZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbGYuZ2V0RmVhdHVyZVNlbGVjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogcmVxdWVzdC5pZCwga2V5OiBmZWF0dXJlX2tleSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4obWVzc2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hSZWFkKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm8gZmVhdHVyZSBmb3VuZCwgYnV0IHN0aWxsIG5lZWQgdG8gcmVzb2x2ZSBwcm9taXNlXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoUmVhZCh7IGlkOiByZXF1ZXN0LmlkLCBmZWF0dXJlOiBudWxsIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VudCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgfSwgdGhpcy5yZWFkX2RlbGF5KTtcbiAgICB9XG5cbiAgICAvLyBDYWxsZWQgb24gbWFpbiB0aHJlYWQgd2hlbiBhIHdlYiB3b3JrZXIgZmluZHMgYSBmZWF0dXJlIGluIHRoZSBzZWxlY3Rpb24gYnVmZmVyXG4gICAgZmluaXNoUmVhZCAobWVzc2FnZSkge1xuICAgICAgICB2YXIgcmVxdWVzdCA9IHRoaXMucmVxdWVzdHNbbWVzc2FnZS5pZF07XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgICAgbG9nLmVycm9yKFwiRmVhdHVyZVNlbGVjdGlvbi5maW5pc2hSZWFkKCk6IGNvdWxkIG5vdCBmaW5kIG1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgICAgICAgICByZXR1cm47IC8vIHJlcXVlc3Qgd2FzIGNsZWFyZWQgYmVmb3JlIGl0IHJldHVybmVkXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmVhdHVyZSA9IG1lc3NhZ2UuZmVhdHVyZTtcbiAgICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKChmZWF0dXJlICE9IG51bGwgJiYgdGhpcy5mZWF0dXJlID09IG51bGwpIHx8XG4gICAgICAgICAgICAoZmVhdHVyZSA9PSBudWxsICYmIHRoaXMuZmVhdHVyZSAhPSBudWxsKSB8fFxuICAgICAgICAgICAgKGZlYXR1cmUgIT0gbnVsbCAmJiB0aGlzLmZlYXR1cmUgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGZlYXR1cmUpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLmZlYXR1cmUpKSkge1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZlYXR1cmUgPSBmZWF0dXJlOyAvLyBzdG9yZSB0aGUgbW9zdCByZWNlbnRseSBzZWxlY3RlZCBmZWF0dXJlXG5cbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0LnJlc29sdmUoeyBmZWF0dXJlLCBjaGFuZ2VkLCByZXF1ZXN0IH0pO1xuICAgICAgICBkZWxldGUgdGhpcy5yZXF1ZXN0c1ttZXNzYWdlLmlkXTsgLy8gZG9uZSBwcm9jZXNzaW5nIHRoaXMgcmVxdWVzdFxuICAgIH1cblxuXG4gICAgLy8gU2VsZWN0aW9uIG1hcCBnZW5lcmF0aW9uXG4gICAgLy8gRWFjaCB3b3JrZXIgd2lsbCBjcmVhdGUgaXRzIG93biBpbmRlcGVuZGVudCwgJ2xvY2FsJyBzZWxlY3Rpb24gbWFwXG5cbiAgICAvLyBDcmVhdGUgYSB1bmlxdWUgMzItYml0IGNvbG9yIHRvIGlkZW50aWZ5IGEgZmVhdHVyZVxuICAgIC8vIFdvcmtlcnMgaW5kZXBlbmRlbnRseSBjcmVhdGUvbW9kaWZ5IHNlbGVjdGlvbiBjb2xvcnMgaW4gdGhlaXIgb3duIHRocmVhZHMsIGJ1dCB3ZSBhbHNvXG4gICAgLy8gbmVlZCB0aGUgbWFpbiB0aHJlYWQgdG8ga25vdyB3aGVyZSBlYWNoIGZlYXR1cmUgY29sb3Igb3JpZ2luYXRlZC4gVG8gYWNjb21wbGlzaCB0aGlzLFxuICAgIC8vIHdlIHBhcnRpdGlvbiB0aGUgbWFwIGJ5IHNldHRpbmcgdGhlIDR0aCBjb21wb25lbnQgKGFscGhhIGNoYW5uZWwpIHRvIHRoZSB3b3JrZXIncyBpZC5cbiAgICBzdGF0aWMgbWFrZUVudHJ5KHRpbGUpIHtcbiAgICAgICAgLy8gMzItYml0IGNvbG9yIGtleVxuICAgICAgICB0aGlzLm1hcF9lbnRyeSsrO1xuICAgICAgICB2YXIgaXIgPSB0aGlzLm1hcF9lbnRyeSAmIDI1NTtcbiAgICAgICAgdmFyIGlnID0gKHRoaXMubWFwX2VudHJ5ID4+IDgpICYgMjU1O1xuICAgICAgICB2YXIgaWIgPSAodGhpcy5tYXBfZW50cnkgPj4gMTYpICYgMjU1O1xuICAgICAgICB2YXIgaWEgPSB0aGlzLm1hcF9wcmVmaXg7XG4gICAgICAgIHZhciByID0gaXIgLyAyNTU7XG4gICAgICAgIHZhciBnID0gaWcgLyAyNTU7XG4gICAgICAgIHZhciBiID0gaWIgLyAyNTU7XG4gICAgICAgIHZhciBhID0gaWEgLyAyNTU7XG4gICAgICAgIHZhciBrZXkgPSAoaXIgKyAoaWcgPDwgOCkgKyAoaWIgPDwgMTYpICsgKGlhIDw8IDI0KSkgPj4+IDA7IC8vIG5lZWQgdW5zaWduZWQgcmlnaHQgc2hpZnQgdG8gY29udmVydCB0byBwb3NpdGl2ZSAjXG5cbiAgICAgICAgdGhpcy5tYXBba2V5XSA9IHtcbiAgICAgICAgICAgIGNvbG9yOiBbciwgZywgYiwgYV0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubWFwX3NpemUrKztcblxuICAgICAgICAvLyBJbml0aWFsaXplIHRpbGUtc3BlY2lmaWMgdHJhY2tpbmcgaW5mb1xuICAgICAgICBpZiAoIXRoaXMudGlsZXNbdGlsZS5rZXldKSB7XG4gICAgICAgICAgICB0aGlzLnRpbGVzW3RpbGUua2V5XSA9IHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgb2YgZmVhdHVyZSBlbnRyaWVzIGluIHRoaXMgdGhyZWFkXG4gICAgICAgICAgICAgICAgdGlsZTogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Vic2V0IG9mIHRpbGUgcHJvcGVydGllcyB0byBwYXNzIGJhY2sgd2l0aCBmZWF0dXJlXG4gICAgICAgICAgICAgICAgICAgIGtleTogdGlsZS5rZXksXG4gICAgICAgICAgICAgICAgICAgIGNvb3JkczogdGlsZS5jb29yZHMsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlX3pvb206IHRpbGUuc3R5bGVfem9vbSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiB0aWxlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbjogdGlsZS5nZW5lcmF0aW9uXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGlsZXNbdGlsZS5rZXldLmVudHJpZXMucHVzaChrZXkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm1hcFtrZXldO1xuICAgIH1cblxuICAgIHN0YXRpYyBtYWtlQ29sb3IoZmVhdHVyZSwgdGlsZSwgY29udGV4dCkge1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSB0aGlzLm1ha2VFbnRyeSh0aWxlKTtcbiAgICAgICAgc2VsZWN0b3IuZmVhdHVyZSA9IHtcbiAgICAgICAgICAgIGlkOiBmZWF0dXJlLmlkLFxuICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgbGF5ZXJzOiBjb250ZXh0LmxheWVycyxcbiAgICAgICAgICAgIHRpbGU6IHRoaXMudGlsZXNbdGlsZS5rZXldLnRpbGVcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0b3IuY29sb3I7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnRpbGVzID0ge307XG4gICAgICAgIHRoaXMubWFwID0ge307XG4gICAgICAgIHRoaXMubWFwX3NpemUgPSAwO1xuICAgICAgICB0aGlzLm1hcF9lbnRyeSA9IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGNsZWFyVGlsZShrZXkpIHtcbiAgICAgICAgaWYgKHRoaXMudGlsZXNba2V5XSkge1xuICAgICAgICAgICAgdGhpcy50aWxlc1trZXldLmVudHJpZXMuZm9yRWFjaChrID0+IGRlbGV0ZSB0aGlzLm1hcFtrXSk7XG4gICAgICAgICAgICB0aGlzLm1hcF9zaXplIC09IHRoaXMudGlsZXNba2V5XS5lbnRyaWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRpbGVzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TWFwU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwX3NpemU7XG4gICAgfVxuXG4gICAgc3RhdGljIHNldFByZWZpeChwcmVmaXgpIHtcbiAgICAgICAgdGhpcy5tYXBfcHJlZml4ID0gcHJlZml4O1xuICAgIH1cblxufVxuXG4vLyBTdGF0aWMgcHJvcGVydGllc1xuRmVhdHVyZVNlbGVjdGlvbi5tYXAgPSB7fTsgICAvLyB0aGlzIHdpbGwgYmUgdW5pcXVlIHBlciBtb2R1bGUgaW5zdGFuY2UgKHNvIHVuaXF1ZSBwZXIgd29ya2VyKVxuRmVhdHVyZVNlbGVjdGlvbi50aWxlcyA9IHt9OyAvLyBzZWxlY3Rpb24ga2V5cywgYnkgdGlsZVxuRmVhdHVyZVNlbGVjdGlvbi5tYXBfc2l6ZSA9IDA7XG5GZWF0dXJlU2VsZWN0aW9uLm1hcF9lbnRyeSA9IDA7XG5GZWF0dXJlU2VsZWN0aW9uLm1hcF9wcmVmaXggPSAwOyAvLyBzZXQgYnkgd29ya2VyIHRvIHdvcmtlciBpZCAjXG5GZWF0dXJlU2VsZWN0aW9uLmRlZmF1bHRDb2xvciA9IFswLCAwLCAwLCAxXTtcbiIsIi8qanNoaW50IHdvcmtlcjogdHJ1ZSAqL1xuaW1wb3J0IEdlbyBmcm9tICcuLi9nZW8nO1xuaW1wb3J0IHtNZXRob2ROb3RJbXBsZW1lbnRlZH0gZnJvbSAnLi4vdXRpbHMvZXJyb3JzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi91dGlscy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFTb3VyY2Uge1xuXG4gICAgY29uc3RydWN0b3IgKGNvbmZpZywgc291cmNlcykge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsgLy8gc2F2ZSBvcmlnaW5hbCBjb25maWdcbiAgICAgICAgdGhpcy5zb3VyY2VzID0gc291cmNlczsgLy8gZnVsbCBzZXQgb2YgZGF0YSBzb3VyY2VzIFRPRE86IGNlbnRyYWxpemUgdGhlc2UgbGlrZSB0ZXh0dXJlcz9cbiAgICAgICAgdGhpcy5pZCA9IGNvbmZpZy5pZDtcbiAgICAgICAgdGhpcy5uYW1lID0gY29uZmlnLm5hbWU7XG4gICAgICAgIHRoaXMucGFkX3NjYWxlID0gY29uZmlnLnBhZF9zY2FsZSB8fCAwLjAwMDE7IC8vIHNjYWxlIHRpbGUgdXAgYnkgc21hbGwgZmFjdG9yIHRvIGNvdmVyIHNlYW1zXG4gICAgICAgIHRoaXMuZGVmYXVsdF93aW5kaW5nID0gbnVsbDsgLy8gd2luZGluZyBvcmRlciB3aWxsIGFkYXB0IHRvIGRhdGEgc291cmNlXG4gICAgICAgIHRoaXMucmFzdGVycyA9IC8vIGF0dGFjaGVkIHJhc3RlciB0aWxlIHNvdXJjZXNcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY29uZmlnLnJhc3RlcnMpID8gWy4uLm5ldyBTZXQoY29uZmlnLnJhc3RlcnMpXSA6IFtdOyAvLyBkZS1kdXBlIHdpdGggc2V0IGNvbnZlcnNpb25cblxuICAgICAgICAvLyBPcHRpb25hbCBmdW5jdGlvbiB0byB0cmFuc2Zvcm0gc291cmNlIGRhdGFcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSBjb25maWcudHJhbnNmb3JtO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5iaW5kKHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0aW9uYWwgYWRkaXRpb25hbCBkYXRhIHRvIHBhc3MgdG8gdGhlIHRyYW5zZm9ybSBmdW5jdGlvblxuICAgICAgICB0aGlzLmV4dHJhX2RhdGEgPSBjb25maWcuZXh0cmFfZGF0YTtcblxuICAgICAgICAvLyBPcHRpb25hbCBhZGRpdGlvbmFsIHNjcmlwdHMgbWFkZSBhdmFpbGFibGUgdG8gdGhlIHRyYW5zZm9ybSBmdW5jdGlvblxuICAgICAgICBpZiAodHlwZW9mIGltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbicgJiYgY29uZmlnLnNjcmlwdHMpIHtcbiAgICAgICAgICAgIGNvbmZpZy5zY3JpcHRzLmZvckVhY2goZnVuY3Rpb24ocywgc2kpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHMpO1xuICAgICAgICAgICAgICAgICAgICBVdGlscy5sb2coJ2luZm8nLCAnRGF0YVNvdXJjZTogbG9hZGVkIGxpYnJhcnk6ICcgKyBzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMubG9nKCdlcnJvcicsICdEYXRhU291cmNlOiBmYWlsZWQgdG8gbG9hZCBsaWJyYXJ5OiAnICsgcyk7XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLmxvZygnZXJyb3InLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG92ZXJ6b29tIHdpbGwgYXBwbHkgZm9yIHpvb21zIGhpZ2hlciB0aGFuIHRoaXNcbiAgICAgICAgdGhpcy5tYXhfem9vbSA9IGNvbmZpZy5tYXhfem9vbSB8fCBHZW8uZGVmYXVsdF9zb3VyY2VfbWF4X3pvb207XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgdGlsZSBzb3VyY2UgYnkgdHlwZSwgZmFjdG9yeS1zdHlsZVxuICAgIHN0YXRpYyBjcmVhdGUgKHNvdXJjZSwgc291cmNlcykge1xuICAgICAgICBpZiAoRGF0YVNvdXJjZS50eXBlc1tzb3VyY2UudHlwZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0YVNvdXJjZS50eXBlc1tzb3VyY2UudHlwZV0oc291cmNlLCBzb3VyY2VzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGEgZGF0YSBzb3VyY2UgZGVmaW5pdGlvbiBjaGFuZ2VkXG4gICAgc3RhdGljIGNoYW5nZWQgKHNvdXJjZSwgcHJldl9zb3VyY2UpIHtcbiAgICAgICAgaWYgKCFzb3VyY2UgfHwgIXByZXZfc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjdXIgPSBPYmplY3QuYXNzaWduKHt9LCBzb3VyY2UuY29uZmlnLCB7IGlkOiBudWxsIH0pOyAvLyBudWxsIG91dCBpZHMgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBjb21wYXJlIHRoZW1cbiAgICAgICAgbGV0IHByZXYgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2X3NvdXJjZS5jb25maWcsIHsgaWQ6IG51bGwgfSk7XG5cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGN1cikgIT09IEpTT04uc3RyaW5naWZ5KHByZXYpO1xuICAgIH1cblxuICAgIC8vIE1lcmNhdG9yIHByb2plY3Rpb25cbiAgICBzdGF0aWMgcHJvamVjdERhdGEgKHNvdXJjZSkge1xuICAgICAgICB2YXIgdGltZXIgPSArbmV3IERhdGUoKTtcbiAgICAgICAgZm9yICh2YXIgdCBpbiBzb3VyY2UubGF5ZXJzKSB7XG4gICAgICAgICAgICB2YXIgbnVtX2ZlYXR1cmVzID0gc291cmNlLmxheWVyc1t0XS5mZWF0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKHZhciBmPTA7IGYgPCBudW1fZmVhdHVyZXM7IGYrKykge1xuICAgICAgICAgICAgICAgIHZhciBmZWF0dXJlID0gc291cmNlLmxheWVyc1t0XS5mZWF0dXJlc1tmXTtcbiAgICAgICAgICAgICAgICBHZW8udHJhbnNmb3JtR2VvbWV0cnkoZmVhdHVyZS5nZW9tZXRyeSwgY29vcmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgW3gsIHldID0gR2VvLmxhdExuZ1RvTWV0ZXJzKGNvb3JkKTtcbiAgICAgICAgICAgICAgICAgICAgY29vcmRbMF0gPSB4O1xuICAgICAgICAgICAgICAgICAgICBjb29yZFsxXSA9IHk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc291cmNlLmRlYnVnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNvdXJjZS5kZWJ1Zy5wcm9qZWN0aW9uID0gK25ldyBEYXRlKCkgLSB0aW1lcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICBSZS1zY2FsZSBnZW9tZXRyaWVzIHdpdGhpbiBlYWNoIHNvdXJjZSB0byBpbnRlcm5hbCB0aWxlIHVuaXRzXG4gICAgKi9cbiAgICBzdGF0aWMgc2NhbGVEYXRhIChzb3VyY2UsIHtjb29yZHM6IHt6fSwgbWluLCBtYXh9KSB7XG4gICAgICAgIGxldCB1bml0c19wZXJfbWV0ZXIgPSBHZW8udW5pdHNQZXJNZXRlcih6KTtcbiAgICAgICAgZm9yICh2YXIgdCBpbiBzb3VyY2UubGF5ZXJzKSB7XG4gICAgICAgICAgICB2YXIgbnVtX2ZlYXR1cmVzID0gc291cmNlLmxheWVyc1t0XS5mZWF0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKHZhciBmPTA7IGYgPCBudW1fZmVhdHVyZXM7IGYrKykge1xuICAgICAgICAgICAgICAgIHZhciBmZWF0dXJlID0gc291cmNlLmxheWVyc1t0XS5mZWF0dXJlc1tmXTtcbiAgICAgICAgICAgICAgICBHZW8udHJhbnNmb3JtR2VvbWV0cnkoZmVhdHVyZS5nZW9tZXRyeSwgY29vcmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb29yZFswXSA9IChjb29yZFswXSAtIG1pbi54KSAqIHVuaXRzX3Blcl9tZXRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29vcmRbMV0gPSAoY29vcmRbMV0gLSBtaW4ueSkgKiB1bml0c19wZXJfbWV0ZXIgKiAtMTsgLy8gZmxpcCBjb29yZHMgcG9zaXRpdmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWQoZGVzdCkge1xuICAgICAgICBkZXN0LnNvdXJjZV9kYXRhID0ge307XG4gICAgICAgIGRlc3Quc291cmNlX2RhdGEubGF5ZXJzID0ge307XG4gICAgICAgIGRlc3QucGFkX3NjYWxlID0gdGhpcy5wYWRfc2NhbGU7XG4gICAgICAgIGRlc3QucmFzdGVycyA9IFsuLi50aGlzLnJhc3RlcnNdOyAvLyBjb3B5IGxpc3Qgb2YgcmFzdGVycyB0byBsb2FkIGZvciB0aWxlXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWQoZGVzdCkudGhlbigoZGVzdCkgPT4ge1xuICAgICAgICAgICAgLy8gUG9zdC1wcm9jZXNzaW5nXG4gICAgICAgICAgICBmb3IgKGxldCBsYXllciBpbiBkZXN0LnNvdXJjZV9kYXRhLmxheWVycykge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gZGVzdC5zb3VyY2VfZGF0YS5sYXllcnNbbGF5ZXJdO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuZmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5mZWF0dXJlcy5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgR2VvLnRyYW5zZm9ybUdlb21ldHJ5KGZlYXR1cmUuZ2VvbWV0cnksIGNvb3JkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGbGlwIFkgY29vcmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRbMV0gPSAtY29vcmRbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTbGlnaHRseSBzY2FsZSB1cCB0aWxlIHRvIGNvdmVyIHNlYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFkX3NjYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkWzBdID0gTWF0aC5yb3VuZChjb29yZFswXSAqICgxICsgdGhpcy5wYWRfc2NhbGUpIC0gKEdlby50aWxlX3NjYWxlICogdGhpcy5wYWRfc2NhbGUvMikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZFsxXSA9IE1hdGgucm91bmQoY29vcmRbMV0gKiAoMSArIHRoaXMucGFkX3NjYWxlKSAtIChHZW8udGlsZV9zY2FsZSAqIHRoaXMucGFkX3NjYWxlLzIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGZpcnN0IGVuY291bnRlcmVkIHBvbHlnb24gd2luZGluZyBvcmRlciBhcyBkZWZhdWx0IGZvciBkYXRhIHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEZWZhdWx0V2luZGluZyhmZWF0dXJlLmdlb21ldHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXN0LmRlZmF1bHRfd2luZGluZyA9IHRoaXMuZGVmYXVsdF93aW5kaW5nIHx8ICdDQ1cnO1xuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFN1Yi1jbGFzc2VzIG11c3QgaW1wbGVtZW50XG4gICAgX2xvYWQoZGVzdCkge1xuICAgICAgICB0aHJvdyBuZXcgTWV0aG9kTm90SW1wbGVtZW50ZWQoJ19sb2FkJyk7XG4gICAgfVxuXG4gICAgLy8gSW5mZXIgd2luZGluZyBmb3IgZGF0YSBzb3VyY2UgZnJvbSBmaXJzdCByaW5nIG9mIHByb3ZpZGVkIGdlb21ldHJ5XG4gICAgdXBkYXRlRGVmYXVsdFdpbmRpbmcgKGdlb20pIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdF93aW5kaW5nID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChnZW9tLnR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdF93aW5kaW5nID0gR2VvLnJpbmdXaW5kaW5nKGdlb20uY29vcmRpbmF0ZXNbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZ2VvbS50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdF93aW5kaW5nID0gR2VvLnJpbmdXaW5kaW5nKGdlb20uY29vcmRpbmF0ZXNbMF1bMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRfd2luZGluZztcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciBhIG5ldyBkYXRhIHNvdXJjZSB0eXBlLCB1bmRlciBhIHR5cGUgbmFtZVxuICAgIHN0YXRpYyByZWdpc3Rlcih0eXBlX2NsYXNzLCB0eXBlX25hbWUpIHtcbiAgICAgICAgaWYgKCF0eXBlX2NsYXNzIHx8ICF0eXBlX25hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIERhdGFTb3VyY2UudHlwZXNbdHlwZV9uYW1lXSA9IHR5cGVfY2xhc3M7XG4gICAgfVxuXG59XG5cbkRhdGFTb3VyY2UudHlwZXMgPSB7fTsgLy8gc2V0IG9mIHN1cHBvcnRlZCBkYXRhIHNvdXJjZSBjbGFzc2VzLCByZWZlcmVuY2VkIGJ5IHR5cGUgbmFtZVxuXG5cbi8qKiogR2VuZXJpYyBuZXR3b3JrIGxvYWRpbmcgc291cmNlIC0gYWJzdHJhY3QgY2xhc3MgKioqL1xuXG5leHBvcnQgY2xhc3MgTmV0d29ya1NvdXJjZSBleHRlbmRzIERhdGFTb3VyY2Uge1xuXG4gICAgY29uc3RydWN0b3IgKHNvdXJjZSkge1xuICAgICAgICBzdXBlcihzb3VyY2UpO1xuICAgICAgICB0aGlzLnVybCA9IFV0aWxzLmFkZFBhcmFtc1RvVVJMKHNvdXJjZS51cmwsIHNvdXJjZS51cmxfcGFyYW1zKTtcbiAgICAgICAgdGhpcy5yZXNwb25zZV90eXBlID0gXCJcIjsgLy8gdXNlIHRvIHNldCBleHBsaWNpdCBYSFIgdHlwZVxuXG4gICAgICAgIGlmICh0aGlzLnVybCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTmV0d29yayBkYXRhIHNvdXJjZSBtdXN0IHByb3ZpZGUgYSBgdXJsYCBwcm9wZXJ0eScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2xvYWQgKGRlc3QpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMuZm9ybWF0VXJsKHRoaXMudXJsLCBkZXN0KTtcblxuICAgICAgICBsZXQgc291cmNlX2RhdGEgPSBkZXN0LnNvdXJjZV9kYXRhO1xuICAgICAgICBzb3VyY2VfZGF0YS51cmwgPSB1cmw7XG4gICAgICAgIGRlc3QuZGVidWcgPSBkZXN0LmRlYnVnIHx8IHt9O1xuICAgICAgICBkZXN0LmRlYnVnLm5ldHdvcmsgPSArbmV3IERhdGUoKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgc291cmNlX2RhdGEuZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgLy8gRm9yIHRlc3RpbmcgbmV0d29yayBlcnJvcnNcbiAgICAgICAgICAgIC8vIHZhciBwcm9taXNlID0gVXRpbHMuaW8odXJsLCA2MCAqIDEwMCwgdGhpcy5yZXNwb25zZV90eXBlKTtcbiAgICAgICAgICAgIC8vIGlmIChNYXRoLnJhbmRvbSgpIDwgLjcpIHtcbiAgICAgICAgICAgIC8vICAgICBwcm9taXNlID0gUHJvbWlzZS5yZWplY3QoRXJyb3IoJ2Zha2UgZGF0YSBzb3VyY2UgZXJyb3InKSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBwcm9taXNlLnRoZW4oKGJvZHkpID0+IHtcbiAgICAgICAgICAgIGxldCBwcm9taXNlID0gVXRpbHMuaW8odXJsLCA2MCAqIDEwMDAsIHRoaXMucmVzcG9uc2VfdHlwZSk7XG4gICAgICAgICAgICBzb3VyY2VfZGF0YS5yZXF1ZXN0ID0gcHJvbWlzZS5yZXF1ZXN0O1xuXG4gICAgICAgICAgICBwcm9taXNlLnRoZW4oKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICBkZXN0LmRlYnVnLnJlc3BvbnNlX3NpemUgPSBib2R5Lmxlbmd0aCB8fCBib2R5LmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgZGVzdC5kZWJ1Zy5uZXR3b3JrID0gK25ldyBEYXRlKCkgLSBkZXN0LmRlYnVnLm5ldHdvcms7XG4gICAgICAgICAgICAgICAgZGVzdC5kZWJ1Zy5wYXJzaW5nID0gK25ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZVNvdXJjZURhdGEoZGVzdCwgc291cmNlX2RhdGEsIGJvZHkpO1xuICAgICAgICAgICAgICAgIGRlc3QuZGVidWcucGFyc2luZyA9ICtuZXcgRGF0ZSgpIC0gZGVzdC5kZWJ1Zy5wYXJzaW5nO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZGVzdCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBzb3VyY2VfZGF0YS5lcnJvciA9IGVycm9yLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShkZXN0KTsgLy8gcmVzb2x2ZSByZXF1ZXN0IGJ1dCBwYXNzIGFsb25nIGVycm9yXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU3ViLWNsYXNzZXMgbXVzdCBpbXBsZW1lbnQ6XG5cbiAgICBmb3JtYXRVcmwgKHVybF90ZW1wbGF0ZSwgZGVzdCkge1xuICAgICAgICB0aHJvdyBuZXcgTWV0aG9kTm90SW1wbGVtZW50ZWQoJ2Zvcm1hdFVybCcpO1xuICAgIH1cblxuICAgIHBhcnNlU291cmNlRGF0YSAoZGVzdCwgc291cmNlLCByZXBvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBNZXRob2ROb3RJbXBsZW1lbnRlZCgncGFyc2VTb3VyY2VEYXRhJyk7XG4gICAgfVxufVxuXG5cbi8qKiogR2VuZXJpYyBuZXR3b3JrIHRpbGUgbG9hZGluZyAtIGFic3RyYWN0IGNsYXNzICoqKi9cblxuZXhwb3J0IGNsYXNzIE5ldHdvcmtUaWxlU291cmNlIGV4dGVuZHMgTmV0d29ya1NvdXJjZSB7XG5cbiAgICBjb25zdHJ1Y3RvciAoc291cmNlKSB7XG4gICAgICAgIHN1cGVyKHNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy50aWxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMudXJsX2hvc3RzID0gbnVsbDtcbiAgICAgICAgdmFyIGhvc3RfbWF0Y2ggPSB0aGlzLnVybC5tYXRjaCgve3M6XFxbKFtefStdKylcXF19Lyk7XG4gICAgICAgIGlmIChob3N0X21hdGNoICE9IG51bGwgJiYgaG9zdF9tYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLnVybF9ob3N0cyA9IGhvc3RfbWF0Y2hbMV0uc3BsaXQoJywnKTtcbiAgICAgICAgICAgIHRoaXMubmV4dF9ob3N0ID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvcm1hdFVybCh1cmxfdGVtcGxhdGUsIHRpbGUpIHtcbiAgICAgICAgbGV0IGNvb3JkcyA9IEdlby53cmFwVGlsZSh0aWxlLmNvb3JkcywgeyB4OiB0cnVlIH0pO1xuICAgICAgICBsZXQgdXJsID0gdXJsX3RlbXBsYXRlLnJlcGxhY2UoJ3t4fScsIGNvb3Jkcy54KS5yZXBsYWNlKCd7eX0nLCBjb29yZHMueSkucmVwbGFjZSgne3p9JywgY29vcmRzLnopO1xuXG4gICAgICAgIGlmICh0aGlzLnVybF9ob3N0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgve3M6XFxbKFtefStdKylcXF19LywgdGhpcy51cmxfaG9zdHNbdGhpcy5uZXh0X2hvc3RdKTtcbiAgICAgICAgICAgIHRoaXMubmV4dF9ob3N0ID0gKHRoaXMubmV4dF9ob3N0ICsgMSkgJSB0aGlzLnVybF9ob3N0cy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBDaGVja3MgZm9yIHRoZSB4L3kveiB0aWxlIHBhdHRlcm4gaW4gVVJMIHRlbXBsYXRlXG4gICAgdXJsSGFzVGlsZVBhdHRlcm4odXJsKSB7XG4gICAgICAgIHJldHVybiB1cmwgJiZcbiAgICAgICAgICAgIHVybC5zZWFyY2goJ3t4fScpID4gLTEgJiZcbiAgICAgICAgICAgIHVybC5zZWFyY2goJ3t5fScpID4gLTEgJiZcbiAgICAgICAgICAgIHVybC5zZWFyY2goJ3t6fScpID4gLTE7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgRGF0YVNvdXJjZSwge05ldHdvcmtTb3VyY2UsIE5ldHdvcmtUaWxlU291cmNlfSBmcm9tICcuL2RhdGFfc291cmNlJztcbmltcG9ydCB7TVZUU291cmNlfSBmcm9tICcuL212dCc7XG5pbXBvcnQgR2VvIGZyb20gJy4uL2dlbyc7XG5cbi8vIEZvciB0aWxpbmcgR2VvSlNPTiBjbGllbnQtc2lkZVxuaW1wb3J0IGdlb2pzb252dCBmcm9tICdnZW9qc29uLXZ0JztcblxuLyoqXG4gR2VvSlNPTiBzdGFuZGFsb25lIChub24tdGlsZWQpIHNvdXJjZVxuIFVzZXMgZ2VvanNvbi12dCBzcGxpdCBpbnRvIHRpbGVzIGNsaWVudC1zaWRlXG4qL1xuXG5leHBvcnQgY2xhc3MgR2VvSlNPTlNvdXJjZSBleHRlbmRzIE5ldHdvcmtTb3VyY2Uge1xuXG4gICAgY29uc3RydWN0b3Ioc291cmNlKSB7XG4gICAgICAgIHN1cGVyKHNvdXJjZSk7XG4gICAgICAgIHRoaXMudGlsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvYWRfZGF0YSA9IG51bGw7XG4gICAgICAgIHRoaXMudGlsZV9pbmRleGVzID0ge307IC8vIGdlb2pzb24tdnQgdGlsZSBpbmRpY2VzLCBieSBsYXllciBuYW1lXG4gICAgICAgIHRoaXMubWF4X3pvb20gPSBNYXRoLm1heCh0aGlzLm1heF96b29tIHx8IDAsIDE1KTsgLy8gVE9ETzogbWF4IHpvb20gPCAxNSBjYXVzZXMgYXJ0aWZhY3RzL25vLWRyYXcgYXQgMjAsIGludmVzdGlnYXRlXG4gICAgICAgIHRoaXMucGFkX3NjYWxlID0gMDsgLy8gd2UgZG9uJ3Qgd2FudCBwYWRkaW5nIG9uIGF1dG8tdGlsZWQgc291cmNlc1xuICAgIH1cblxuICAgIF9sb2FkKGRlc3QpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkX2RhdGEgPSBzdXBlci5fbG9hZCh7IHNvdXJjZV9kYXRhOiB7IGxheWVyczoge30gfSB9KS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBsYXllcnMgPSBkYXRhLnNvdXJjZV9kYXRhLmxheWVycztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBsYXllcl9uYW1lIGluIGxheWVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbGVfaW5kZXhlc1tsYXllcl9uYW1lXSA9IGdlb2pzb252dChsYXllcnNbbGF5ZXJfbmFtZV0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFpvb206IHRoaXMubWF4X3pvb20sICAvLyBtYXggem9vbSB0byBwcmVzZXJ2ZSBkZXRhaWwgb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRvbGVyYW5jZTogMywgLy8gc2ltcGxpZmljYXRpb24gdG9sZXJhbmNlIChoaWdoZXIgbWVhbnMgc2ltcGxlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudDogR2VvLnRpbGVfc2NhbGUsIC8vIHRpbGUgZXh0ZW50IChib3RoIHdpZHRoIGFuZCBoZWlnaHQpXG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI6IDAgICAgIC8vIHRpbGUgYnVmZmVyIG9uIGVhY2ggc2lkZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRfZGF0YS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGxheWVyX25hbWUgaW4gdGhpcy50aWxlX2luZGV4ZXMpIHtcbiAgICAgICAgICAgICAgICBkZXN0LnNvdXJjZV9kYXRhLmxheWVyc1tsYXllcl9uYW1lXSA9IHRoaXMuZ2V0VGlsZUZlYXR1cmVzKGRlc3QsIGxheWVyX25hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFRpbGVGZWF0dXJlcyh0aWxlLCBsYXllcl9uYW1lKSB7XG4gICAgICAgIGxldCBjb29yZHMgPSBHZW8ud3JhcFRpbGUodGlsZS5jb29yZHMsIHsgeDogdHJ1ZSB9KTtcblxuICAgICAgICAvLyByZXF1ZXN0IGEgcGFydGljdWxhciB0aWxlXG4gICAgICAgIGxldCB0ID0gdGhpcy50aWxlX2luZGV4ZXNbbGF5ZXJfbmFtZV0uZ2V0VGlsZShjb29yZHMueiwgY29vcmRzLngsIGNvb3Jkcy55KTtcblxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gTVZULXN0eWxlIEpTT04gc3RydWN0IHRvIEdlb0pTT05cbiAgICAgICAgbGV0IGNvbGxlY3Rpb247XG4gICAgICAgIGlmICh0ICYmIHQuZmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgICAgICBmZWF0dXJlczogW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAobGV0IGZlYXR1cmUgb2YgdC5mZWF0dXJlcykge1xuICAgICAgICAgICAgICAgIC8vIEdlb0pTT04gZmVhdHVyZVxuICAgICAgICAgICAgICAgIGxldCBmID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnRmVhdHVyZScsXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiB7fSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS50YWdzXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLnR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZi5nZW9tZXRyeS5jb29yZGluYXRlcyA9IGZlYXR1cmUuZ2VvbWV0cnkubWFwKGNvb3JkID0+IFtjb29yZFswXSwgY29vcmRbMV1dKTtcbiAgICAgICAgICAgICAgICAgICAgZi5nZW9tZXRyeS50eXBlID0gJ011bHRpUG9pbnQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmZWF0dXJlLnR5cGUgPT09IDIgfHwgZmVhdHVyZS50eXBlID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGYuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgPSBmZWF0dXJlLmdlb21ldHJ5Lm1hcChyaW5nID0+XG4gICAgICAgICAgICAgICAgICAgICAgICByaW5nLm1hcChjb29yZCA9PiBbY29vcmRbMF0sIGNvb3JkWzFdXSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS50eXBlID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmLmdlb21ldHJ5LnR5cGUgPSAnTXVsdGlMaW5lU3RyaW5nJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmLmdlb21ldHJ5ID0gTVZUU291cmNlLmRlY29kZU11bHRpUG9seWdvbihmLmdlb21ldHJ5KTsgLy8gdW4tZmxhdHRlbiByaW5nc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLmZlYXR1cmVzLnB1c2goZik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG5cbiAgICBmb3JtYXRVcmwgKGRlc3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsO1xuICAgIH1cblxuICAgIHBhcnNlU291cmNlRGF0YSAodGlsZSwgc291cmNlLCByZXNwb25zZSkge1xuICAgICAgICBzb3VyY2UubGF5ZXJzID0gdGhpcy5nZXRMYXllcnMoSlNPTi5wYXJzZShyZXNwb25zZSkpO1xuICAgIH1cblxuICAgIC8vIERldGVjdCBzaW5nbGUgb3IgbXVsdGlwbGUgbGF5ZXJzIGluIHJldHVybmVkIGRhdGFcbiAgICBnZXRMYXllcnMgKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ0ZlYXR1cmUnIHx8IGRhdGEudHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHsgX2RlZmF1bHQ6IGRhdGEgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbi8qKlxuIE1hcHplbi9PU00uVVMtc3R5bGUgR2VvSlNPTiB2ZWN0b3IgdGlsZXNcbiBAY2xhc3MgR2VvSlNPTlRpbGVTb3VyY2VcbiovXG5leHBvcnQgY2xhc3MgR2VvSlNPTlRpbGVTb3VyY2UgZXh0ZW5kcyBOZXR3b3JrVGlsZVNvdXJjZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihzb3VyY2UpIHtcbiAgICAgICAgc3VwZXIoc291cmNlKTtcblxuICAgICAgICAvLyBDaGVjayBmb3IgVVJMIHRpbGUgcGF0dGVybiwgaWYgbm90IGZvdW5kLCB0cmVhdCBhcyBzdGFuZGFsb25lIEdlb0pTT04vVG9wb0pTT04gb2JqZWN0XG4gICAgICAgIGlmICghdGhpcy51cmxIYXNUaWxlUGF0dGVybih0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGluc3RhbmNlIHR5cGUgZnJvbSBwYXJlbnQgY2xhc3NcbiAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgR2VvSlNPTlRpbGVTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGluc3RhbmNlIHR5cGVcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdlb0pTT05Tb3VyY2Uoc291cmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFBhc3MgYmFjayB0byBwYXJlbnQgY2xhc3MgdG8gaW5zdGFudGlhdGVcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwYXJzZVNvdXJjZURhdGEgKHRpbGUsIHNvdXJjZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5wcmVwYXJlR2VvSlNPTihkYXRhLCB0aWxlLCBzb3VyY2UpO1xuICAgIH1cblxuICAgIHByZXBhcmVHZW9KU09OIChkYXRhLCB0aWxlLCBzb3VyY2UpIHtcbiAgICAgICAgLy8gQXBwbHkgb3B0aW9uYWwgZGF0YSB0cmFuc2Zvcm1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMudHJhbnNmb3JtKGRhdGEsIHRoaXMuZXh0cmFfZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2UubGF5ZXJzID0gR2VvSlNPTlNvdXJjZS5wcm90b3R5cGUuZ2V0TGF5ZXJzKGRhdGEpO1xuXG4gICAgICAgIC8vIEEgXCJzeW50aGV0aWNcIiB0aWxlIHRoYXQgYWRqdXN0cyB0aGUgdGlsZSBtaW4gYW5jaG9yIHRvIGFjY291bnQgZm9yIHRpbGUgbG9uZ2l0dWRlIHdyYXBwaW5nXG4gICAgICAgIGxldCBhbmNob3IgPSB7XG4gICAgICAgICAgICBjb29yZHM6IHRpbGUuY29vcmRzLFxuICAgICAgICAgICAgbWluOiBHZW8ubWV0ZXJzRm9yVGlsZShHZW8ud3JhcFRpbGUodGlsZS5jb29yZHMsIHsgeDogdHJ1ZSB9KSlcbiAgICAgICAgfTtcblxuICAgICAgICBEYXRhU291cmNlLnByb2plY3REYXRhKHNvdXJjZSk7IC8vIG1lcmNhdG9yIHByb2plY3Rpb25cbiAgICAgICAgRGF0YVNvdXJjZS5zY2FsZURhdGEoc291cmNlLCBhbmNob3IpOyAvLyByZS1zY2FsZSBmcm9tIG1ldGVycyB0byBsb2NhbCB0aWxlIGNvb3Jkc1xuICAgIH1cblxufVxuXG5EYXRhU291cmNlLnJlZ2lzdGVyKEdlb0pTT05UaWxlU291cmNlLCAnR2VvSlNPTicpOyAgICAgIC8vIHByZWZlcmVkIHNob3J0ZXIgbmFtZVxuRGF0YVNvdXJjZS5yZWdpc3RlcihHZW9KU09OVGlsZVNvdXJjZSwgJ0dlb0pTT05UaWxlcycpOyAvLyBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHlcbiIsImltcG9ydCBEYXRhU291cmNlLCB7TmV0d29ya1RpbGVTb3VyY2V9IGZyb20gJy4vZGF0YV9zb3VyY2UnO1xuaW1wb3J0IEdlbyBmcm9tICcuLi9nZW8nO1xuXG5pbXBvcnQgUGJmIGZyb20gJ3BiZic7XG5pbXBvcnQge1ZlY3RvclRpbGUsIFZlY3RvclRpbGVGZWF0dXJlfSBmcm9tICd2ZWN0b3ItdGlsZSc7XG5cbi8qKlxuIE1hcGJveCBWZWN0b3IgVGlsZSBmb3JtYXRcbiBAY2xhc3MgTVZUU291cmNlXG4qL1xuZXhwb3J0IGNsYXNzIE1WVFNvdXJjZSBleHRlbmRzIE5ldHdvcmtUaWxlU291cmNlIHtcblxuICAgIGNvbnN0cnVjdG9yIChzb3VyY2UpIHtcbiAgICAgICAgc3VwZXIoc291cmNlKTtcbiAgICAgICAgdGhpcy5yZXNwb25zZV90eXBlID0gXCJhcnJheWJ1ZmZlclwiOyAvLyBiaW5hcnkgZGF0YVxuICAgIH1cblxuICAgIHBhcnNlU291cmNlRGF0YSAodGlsZSwgc291cmNlLCByZXNwb25zZSkge1xuICAgICAgICAvLyBDb252ZXJ0IE1hcGJveCB2ZWN0b3IgdGlsZSB0byBHZW9KU09OXG4gICAgICAgIHZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkocmVzcG9uc2UpO1xuICAgICAgICB2YXIgYnVmZmVyID0gbmV3IFBiZihkYXRhKTtcbiAgICAgICAgc291cmNlLmRhdGEgPSBuZXcgVmVjdG9yVGlsZShidWZmZXIpO1xuICAgICAgICBzb3VyY2UubGF5ZXJzID0gdGhpcy50b0dlb0pTT04oc291cmNlLmRhdGEpO1xuICAgICAgICBkZWxldGUgc291cmNlLmRhdGE7IC8vIGNvbW1lbnQgb3V0IHRvIHNhdmUgcmF3IGRhdGEgZm9yIGRlYnVnZ2luZ1xuICAgIH1cblxuICAgIC8vIExvb3AgdGhyb3VnaCBsYXllcnMvZmVhdHVyZXMgdXNpbmcgTWFwYm94IGxpYiBBUEksIGNvbnZlcnQgdG8gR2VvSlNPTiBmZWF0dXJlc1xuICAgIC8vIFJldHVybnMgYW4gb2JqZWN0IHdpdGgga2V5cyBmb3IgZWFjaCBsYXllciwgZS5nLiB7IGxheWVyOiBnZW9qc29uIH1cbiAgICB0b0dlb0pTT04gKHRpbGUpIHtcbiAgICAgICAgdmFyIGxheWVycyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBsIGluIHRpbGUubGF5ZXJzKSB7XG4gICAgICAgICAgICB2YXIgbGF5ZXIgPSB0aWxlLmxheWVyc1tsXTtcbiAgICAgICAgICAgIHZhciBsYXllcl9nZW9qc29uID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgICAgICAgICAgZmVhdHVyZXM6IFtdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3IgKHZhciBmPTA7IGYgPCBsYXllci5sZW5ndGg7IGYrKykge1xuICAgICAgICAgICAgICAgIHZhciBmZWF0dXJlID0gbGF5ZXIuZmVhdHVyZShmKTtcbiAgICAgICAgICAgICAgICB2YXIgZmVhdHVyZV9nZW9qc29uID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnRmVhdHVyZScsXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiB7fSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IGZlYXR1cmVfZ2VvanNvbi5nZW9tZXRyeTtcbiAgICAgICAgICAgICAgICB2YXIgY29vcmRpbmF0ZXMgPSBmZWF0dXJlLmxvYWRHZW9tZXRyeSgpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHI9MDsgciA8IGNvb3JkaW5hdGVzLmxlbmd0aDsgcisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByaW5nID0gY29vcmRpbmF0ZXNbcl07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGM9MDsgYyA8IHJpbmcubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpbmdbY10gPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZ1tjXS54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmdbY10ueVxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5jb29yZGluYXRlcyA9IGNvb3JkaW5hdGVzO1xuXG4gICAgICAgICAgICAgICAgaWYgKFZlY3RvclRpbGVGZWF0dXJlLnR5cGVzW2ZlYXR1cmUudHlwZV0gPT09ICdQb2ludCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkudHlwZSA9ICdQb2ludCc7XG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNvb3JkaW5hdGVzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF1bMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFZlY3RvclRpbGVGZWF0dXJlLnR5cGVzW2ZlYXR1cmUudHlwZV0gPT09ICdMaW5lU3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29vcmRpbmF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS50eXBlID0gJ0xpbmVTdHJpbmcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuY29vcmRpbmF0ZXMgPSBnZW9tZXRyeS5jb29yZGluYXRlc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LnR5cGUgPSAnTXVsdGlMaW5lU3RyaW5nJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChWZWN0b3JUaWxlRmVhdHVyZS50eXBlc1tmZWF0dXJlLnR5cGVdID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBNVlRTb3VyY2UuZGVjb2RlTXVsdGlQb2x5Z29uKGdlb21ldHJ5KTsgLy8gdW4tZmxhdHRlbiByaW5nc1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxheWVyX2dlb2pzb24uZmVhdHVyZXMucHVzaChmZWF0dXJlX2dlb2pzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGF5ZXJzW2xdID0gbGF5ZXJfZ2VvanNvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGF5ZXJzO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBtdWx0aXBvbHlnb25zLCB3aGljaCBhcmUgZW5jb2RlZCBhcyBhIHNpbmdsZSBzZXQgb2YgcmluZ3NcbiAgICAvLyBXaW5kaW5nIG9yZGVyIG9mIGZpcnN0IHJpbmcgaXMgYXNzdW1lZCB0byBpbmRpY2F0ZSBleHRlcmlvciByaW5nLFxuICAgIC8vIHRoZSBvcHBvc2l0ZSB3aW5kaW5nIG9yZGVyIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSBuZXcgcG9seWdvbi5cbiAgICBzdGF0aWMgZGVjb2RlTXVsdGlQb2x5Z29uIChnZW9tKSB7XG4gICAgICAgIGxldCBwb2x5cyA9IFtdO1xuICAgICAgICBsZXQgcG9seSA9IFtdO1xuICAgICAgICBsZXQgb3V0ZXJfd2luZGluZztcbiAgICAgICAgZm9yIChsZXQgcmluZyBvZiBnZW9tLmNvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgICBsZXQgd2luZGluZyA9IEdlby5yaW5nV2luZGluZyhyaW5nKTtcbiAgICAgICAgICAgIGlmICh3aW5kaW5nID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gc2tpcCB6ZXJvLWFyZWEgcmluZ3NcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0ZXJfd2luZGluZyA9IG91dGVyX3dpbmRpbmcgfHwgd2luZGluZzsgLy8gYXNzdW1lIGZpcnN0IHJpbmcgaW5kaWNhdGVzIG91dGVyIHJpbmcgd2luZGluZ1xuXG4gICAgICAgICAgICBpZiAod2luZGluZyA9PT0gb3V0ZXJfd2luZGluZyAmJiBwb2x5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwb2x5cy5wdXNoKHBvbHkpO1xuICAgICAgICAgICAgICAgIHBvbHkgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvbHkucHVzaChyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9seS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwb2x5cy5wdXNoKHBvbHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2luZ2xlIG9yIG11bHRpP1xuICAgICAgICBpZiAocG9seXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBnZW9tLnR5cGUgPSAnUG9seWdvbic7XG4gICAgICAgICAgICBnZW9tLmNvb3JkaW5hdGVzID0gcG9seXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW9tLnR5cGUgPSAnTXVsdGlQb2x5Z29uJztcbiAgICAgICAgICAgIGdlb20uY29vcmRpbmF0ZXMgPSBwb2x5cztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZW9tO1xuICAgIH1cblxufVxuXG5EYXRhU291cmNlLnJlZ2lzdGVyKE1WVFNvdXJjZSwgJ01WVCcpO1xuIiwiaW1wb3J0IERhdGFTb3VyY2UsIHtOZXR3b3JrVGlsZVNvdXJjZX0gZnJvbSAnLi9kYXRhX3NvdXJjZSc7XG5pbXBvcnQgVGlsZSBmcm9tICcuLi90aWxlJztcbmltcG9ydCBHZW8gZnJvbSAnLi4vZ2VvJztcblxuZXhwb3J0IGNsYXNzIFJhc3RlclRpbGVTb3VyY2UgZXh0ZW5kcyBOZXR3b3JrVGlsZVNvdXJjZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihzb3VyY2UpIHtcbiAgICAgICAgc3VwZXIoc291cmNlKTtcblxuICAgICAgICBpZiAodGhpcy5yYXN0ZXJzLmluZGV4T2YodGhpcy5uYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMucmFzdGVycy51bnNoaWZ0KHRoaXMubmFtZSk7IC8vIGFkZCB0aGlzIHJhc3RlciBhcyB0aGUgZmlyc3RcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcmluZyA9IHNvdXJjZS5maWx0ZXJpbmc7IC8vIG9wdGlvbmFsIHRleHR1cmUgZmlsdGVyaW5nIChuZWFyZXN0LCBsaW5lYXIsIG1pcG1hcClcblxuICAgICAgICAvLyBzYXZlIHRleHR1cmUgb2JqZWN0cyBieSB0aWxlIGtleSwgc28gVVJMIHJlbWFpbnMgc3RhYmxlIGlmIHRpbGUgaXMgYnVpbHQgbXVsdGlwbGUgdGltZXMsXG4gICAgICAgIC8vIGUuZy4gYXZvaWQgcmUtbG9hZGluZyB0aGUgc2FtZSB0aWxlIHRleHR1cmUgdW5kZXIgYSBkaWZmZXJlbnQgc3ViZG9tYWluIHdoZW4gdXNpbmcgdGlsZSBob3N0c1xuICAgICAgICB0aGlzLnRleHR1cmVzID0ge307XG4gICAgfVxuXG4gICAgbG9hZCh0aWxlKSB7XG4gICAgICAgIHRpbGUuc291cmNlX2RhdGEgPSB7fTtcbiAgICAgICAgdGlsZS5zb3VyY2VfZGF0YS5sYXllcnMgPSB7fTtcbiAgICAgICAgdGlsZS5wYWRfc2NhbGUgPSB0aGlzLnBhZF9zY2FsZTtcbiAgICAgICAgdGlsZS5yYXN0ZXJzID0gWy4uLnRoaXMucmFzdGVyc107IC8vIGNvcHkgbGlzdCBvZiByYXN0ZXJzIHRvIGxvYWQgZm9yIHRpbGVcblxuICAgICAgICAvLyBHZW5lcmF0ZSBhIHNpbmdsZSBxdWFkIHRoYXQgZmlsbHMgdGhlIGVudGlyZSB0aWxlXG4gICAgICAgIGxldCBzY2FsZSA9IEdlby50aWxlX3NjYWxlO1xuICAgICAgICB0aWxlLnNvdXJjZV9kYXRhLmxheWVycyA9IHtcbiAgICAgICAgICAgIF9kZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgICAgICBmZWF0dXJlczogW3tcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQb2x5Z29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLCAwXSwgW3NjYWxlLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2NhbGUsIC1zY2FsZV0sIFswLCAtc2NhbGVdLCBbMCwgMF1cbiAgICAgICAgICAgICAgICAgICAgICAgIF1dXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHt9XG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aWxlLmRlZmF1bHRfd2luZGluZyA9ICdDVyc7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGlsZSk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRleHR1cmUgaW5mbyBmb3IgYSByYXN0ZXIgdGlsZVxuICAgIHRpbGVUZXh0dXJlICh0aWxlKSB7XG4gICAgICAgIGxldCBrZXkgPSB0aWxlLmNvb3Jkcy5rZXk7XG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlc1trZXldKSB7XG4gICAgICAgICAgICBsZXQgY29vcmRzID0gVGlsZS5jb29yZGluYXRlV2l0aE1heFpvb20odGlsZS5jb29yZHMsIHRoaXMubWF4X3pvb20pO1xuICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuZm9ybWF0VXJsKHRoaXMudXJsLCB7IGNvb3JkcyB9KTtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZXNba2V5XSA9IHsgdXJsLCBmaWx0ZXJpbmc6IHRoaXMuZmlsdGVyaW5nLCBjb29yZHMgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlc1trZXldO1xuICAgIH1cblxufVxuXG5EYXRhU291cmNlLnJlZ2lzdGVyKFJhc3RlclRpbGVTb3VyY2UsICdSYXN0ZXInKTtcbiIsImltcG9ydCBEYXRhU291cmNlIGZyb20gJy4vZGF0YV9zb3VyY2UnO1xuaW1wb3J0IHtHZW9KU09OU291cmNlLCBHZW9KU09OVGlsZVNvdXJjZX0gZnJvbSAnLi9nZW9qc29uJztcblxuaW1wb3J0IHRvcG9qc29uIGZyb20gJ3RvcG9qc29uJztcblxuLyoqXG4gVG9wb0pTT04gc3RhbmRhbG9uZSAobm9uLXRpbGVkKSBzb3VyY2VcbiBVc2VzIGdlb2pzb24tdnQgc3BsaXQgaW50byB0aWxlcyBjbGllbnQtc2lkZVxuKi9cblxuZXhwb3J0IGNsYXNzIFRvcG9KU09OU291cmNlIGV4dGVuZHMgR2VvSlNPTlNvdXJjZSB7XG5cbiAgICBwYXJzZVNvdXJjZURhdGEgKHRpbGUsIHNvdXJjZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICAgICAgZGF0YSA9IHRoaXMudG9HZW9KU09OKGRhdGEpO1xuICAgICAgICBzb3VyY2UubGF5ZXJzID0gdGhpcy5nZXRMYXllcnMoZGF0YSk7XG4gICAgfVxuXG4gICAgdG9HZW9KU09OIChkYXRhKSB7XG4gICAgICAgIC8vIFNpbmdsZSBsYXllclxuICAgICAgICBpZiAoZGF0YS5vYmplY3RzICYmXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhLm9iamVjdHMpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgbGV0IGxheWVyID0gT2JqZWN0LmtleXMoZGF0YS5vYmplY3RzKVswXTtcbiAgICAgICAgICAgIGRhdGEgPSB0b3BvanNvbi5mZWF0dXJlKGRhdGEsIGRhdGEub2JqZWN0c1tsYXllcl0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIE11bHRpcGxlIGxheWVyc1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBsYXllcnMgPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBkYXRhLm9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICBsYXllcnNba2V5XSA9IHRvcG9qc29uLmZlYXR1cmUoZGF0YSwgZGF0YS5vYmplY3RzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YSA9IGxheWVycztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbn1cblxuLyoqXG4gTWFwemVuL09TTS5VUy1zdHlsZSBUb3BvSlNPTiB2ZWN0b3IgdGlsZXNcbiBAY2xhc3MgVG9wb0pTT05UaWxlU291cmNlXG4qL1xuZXhwb3J0IGNsYXNzIFRvcG9KU09OVGlsZVNvdXJjZSBleHRlbmRzIEdlb0pTT05UaWxlU291cmNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHNvdXJjZSkge1xuICAgICAgICBsZXQgX3RoaXMgPSBzdXBlcihzb3VyY2UpO1xuXG4gICAgICAgIC8vIFJlcGxhY2Ugd2l0aCBub24tdGlsZWQgc291cmNlIGlmIHRpbGVkIHNvdXJjZSBmYWlsZWQgdG8gaW5zdGFudGlhdGVcbiAgICAgICAgaWYgKF90aGlzICE9PSB0aGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRvcG9KU09OU291cmNlKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZVNvdXJjZURhdGEgKHRpbGUsIHNvdXJjZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICAgICAgZGF0YSA9IFRvcG9KU09OU291cmNlLnByb3RvdHlwZS50b0dlb0pTT04oZGF0YSk7XG4gICAgICAgIHRoaXMucHJlcGFyZUdlb0pTT04oZGF0YSwgdGlsZSwgc291cmNlKTtcbiAgICB9XG5cbn1cblxuRGF0YVNvdXJjZS5yZWdpc3RlcihUb3BvSlNPTlRpbGVTb3VyY2UsICdUb3BvSlNPTicpOyAgICAgICAgLy8gcHJlZmVyZWQgc2hvcnRlciBuYW1lXG5EYXRhU291cmNlLnJlZ2lzdGVyKFRvcG9KU09OVGlsZVNvdXJjZSwgJ1RvcG9KU09OVGlsZXMnKTsgICAvLyBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHlcblxuIiwiLy8gTGluZSByZW5kZXJpbmcgc3R5bGVcblxuaW1wb3J0IHtTdHlsZX0gZnJvbSAnLi4vc3R5bGUnO1xuaW1wb3J0IHtTdHlsZVBhcnNlcn0gZnJvbSAnLi4vc3R5bGVfcGFyc2VyJztcbmltcG9ydCB7U3R5bGVNYW5hZ2VyfSBmcm9tICcuLi9zdHlsZV9tYW5hZ2VyJztcbmltcG9ydCBnbCBmcm9tICcuLi8uLi9nbC9jb25zdGFudHMnOyAvLyB3ZWIgd29ya2VycyBkb24ndCBoYXZlIGFjY2VzcyB0byBHTCBjb250ZXh0LCBzbyBpbXBvcnQgYWxsIEdMIGNvbnN0YW50c1xuaW1wb3J0IFZlcnRleExheW91dCBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfbGF5b3V0JztcbmltcG9ydCB7YnVpbGRQb2x5bGluZXN9IGZyb20gJy4uLy4uL2J1aWxkZXJzL3BvbHlsaW5lcyc7XG5pbXBvcnQgR2VvIGZyb20gJy4uLy4uL2dlbyc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuXG5leHBvcnQgdmFyIExpbmVzID0gT2JqZWN0LmNyZWF0ZShTdHlsZSk7XG5cbk9iamVjdC5hc3NpZ24oTGluZXMsIHtcbiAgICBuYW1lOiAnbGluZXMnLFxuICAgIGJ1aWx0X2luOiB0cnVlLFxuICAgIHZlcnRleF9zaGFkZXJfa2V5OiAnc3R5bGVzL3BvbHlnb25zL3BvbHlnb25zX3ZlcnRleCcsIC8vIHJlLXVzZSBwb2x5Z29uIHNoYWRlcnNcbiAgICBmcmFnbWVudF9zaGFkZXJfa2V5OiAnc3R5bGVzL3BvbHlnb25zL3BvbHlnb25zX2ZyYWdtZW50JyxcbiAgICBzZWxlY3Rpb246IHRydWUsIC8vIHR1cm4gZmVhdHVyZSBzZWxlY3Rpb24gb25cblxuICAgIGluaXQoKSB7XG4gICAgICAgIFN0eWxlLmluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgICAvLyBCYXNpYyBhdHRyaWJ1dGVzLCBvdGhlcnMgY2FuIGJlIGFkZGVkIChzZWUgdGV4dHVyZSBVVnMgYmVsb3cpXG4gICAgICAgIHZhciBhdHRyaWJzID0gW1xuICAgICAgICAgICAgeyBuYW1lOiAnYV9wb3NpdGlvbicsIHNpemU6IDQsIHR5cGU6IGdsLlNIT1JULCBub3JtYWxpemVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdhX2V4dHJ1ZGUnLCBzaXplOiA0LCB0eXBlOiBnbC5TSE9SVCwgbm9ybWFsaXplZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnYV9jb2xvcicsIHNpemU6IDQsIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsIG5vcm1hbGl6ZWQ6IHRydWUgfVxuICAgICAgICBdO1xuXG4gICAgICAgIC8vIFRlbGwgdGhlIHNoYWRlciB3ZSB3YW50IGEgb3JkZXIgaW4gdmVydGV4IGF0dHJpYnV0ZXMsIGFuZCB0byBleHRydWRlIGxpbmVzXG4gICAgICAgIHRoaXMuZGVmaW5lcy5UQU5HUkFNX0xBWUVSX09SREVSID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fRVhUUlVERV9MSU5FUyA9IHRydWU7XG5cbiAgICAgICAgLy8gT3B0aW9uYWwgZmVhdHVyZSBzZWxlY3Rpb25cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBhdHRyaWJzLnB1c2goeyBuYW1lOiAnYV9zZWxlY3Rpb25fY29sb3InLCBzaXplOiA0LCB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLCBub3JtYWxpemVkOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0aW9uYWwgdGV4dHVyZSBVVnNcbiAgICAgICAgaWYgKHRoaXMudGV4Y29vcmRzKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmluZXMuVEFOR1JBTV9URVhUVVJFX0NPT1JEUyA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIFNjYWxpbmcgZmFjdG9yIHRvIGFkZCBwcmVjaXNpb24gdG8gbGluZSB0ZXh0dXJlIFYgY29vcmRpbmF0ZSBwYWNrZWQgYXMgbm9ybWFsaXplZCBzaG9ydFxuICAgICAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fVl9TQ0FMRV9BREpVU1QgPSBHZW8udGlsZV9zY2FsZTtcblxuICAgICAgICAgICAgLy8gQWRkIHZlcnRleCBhdHRyaWJ1dGUgZm9yIFVWcyBvbmx5IHdoZW4gbmVlZGVkXG4gICAgICAgICAgICBhdHRyaWJzLnB1c2goeyBuYW1lOiAnYV90ZXhjb29yZCcsIHNpemU6IDIsIHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JULCBub3JtYWxpemVkOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52ZXJ0ZXhfbGF5b3V0ID0gbmV3IFZlcnRleExheW91dChhdHRyaWJzKTtcblxuICAgICAgICAvLyBBZGRpdGlvbmFsIHNpbmdsZS1hbGxvY2F0ZWQgb2JqZWN0IHVzZWQgZm9yIGhvbGRpbmcgb3V0bGluZSBzdHlsZSBhcyBpdCBpcyBwcm9jZXNzZWRcbiAgICAgICAgLy8gU2VwYXJhdGUgZnJvbSB0aGlzLmZlYXR1cmVfc3R5bGUgc28gdGhhdCBvdXRsaW5lIHByb3BlcnRpZXMgZG8gbm90IG92ZXJ3cml0ZSBjYWxjdWxhdGVkXG4gICAgICAgIC8vIGlubGluZSBwcm9wZXJ0aWVzIChvdXRsaW5lIGNhbGwgaXMgbWFkZSAqd2l0aGluKiB0aGUgaW5saW5lIGNhbGwpXG4gICAgICAgIHRoaXMub3V0bGluZV9mZWF0dXJlX3N0eWxlID0ge307XG4gICAgICAgIHRoaXMuaW5saW5lX2ZlYXR1cmVfc3R5bGUgPSB0aGlzLmZlYXR1cmVfc3R5bGU7IC8vIHNhdmUgcmVmZXJlbmNlIHRvIG1haW4gY29tcHV0ZWQgc3R5bGUgb2JqZWN0XG4gICAgfSxcblxuICAgIC8vIENhbGN1bGF0ZSB3aWR0aCBhdCB6b29tIGdpdmVuIGluIGBjb250ZXh0YFxuICAgIGNhbGNXaWR0aCAod2lkdGgsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCAmJiBTdHlsZVBhcnNlci5jYWNoZURpc3RhbmNlKHdpZHRoLCBjb250ZXh0KSkgfHwgMDtcbiAgICB9LFxuXG4gICAgLy8gQ2FsY3VsYXRlIHdpZHRoIGF0IG5leHQgem9vbSAodXNlZCBmb3IgbGluZSB3aWR0aCBpbnRlcnBvbGF0aW9uKVxuICAgIGNhbGNXaWR0aE5leHRab29tICh3aWR0aCwgY29udGV4dCkge1xuICAgICAgICBjb250ZXh0Lnpvb20rKztcbiAgICAgICAgbGV0IHZhbCA9IHRoaXMuY2FsY1dpZHRoKHdpZHRoLCBjb250ZXh0KTtcbiAgICAgICAgY29udGV4dC56b29tLS07XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIF9wYXJzZUZlYXR1cmUgKGZlYXR1cmUsIHJ1bGVfc3R5bGUsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5mZWF0dXJlX3N0eWxlO1xuXG4gICAgICAgIC8vIGxpbmUgd2lkdGggaW4gbWV0ZXJzXG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMuY2FsY1dpZHRoKHJ1bGVfc3R5bGUud2lkdGgsIGNvbnRleHQpO1xuICAgICAgICBpZiAod2lkdGggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47IC8vIHNraXAgbGluZXMgd2l0aCBuZWdhdGl2ZSB3aWR0aFxuICAgICAgICB9XG4gICAgICAgIGxldCBuZXh0X3dpZHRoID0gdGhpcy5jYWxjV2lkdGhOZXh0Wm9vbShydWxlX3N0eWxlLm5leHRfd2lkdGgsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmICgod2lkdGggPT09IDAgJiYgbmV4dF93aWR0aCA9PT0gMCkgfHwgbmV4dF93aWR0aCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjsgLy8gc2tpcCBsaW5lcyB0aGF0IGRvbid0IGludGVycG9sYXRlIHRvIGEgcG9zaXRpdmUgdmFsdWUgYXQgbmV4dCB6b29tXG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb252ZXJ0IHRvIHVuaXRzIGFuZCByZWxhdGl2ZSBjaGFuZ2UgZnJvbSBwcmV2aW91cyB6b29tXG4gICAgICAgIC8vIE5COiBtdWx0aXBseSBieSAyIGJlY2F1c2UgYSBnaXZlbiB3aWR0aCBpcyB0d2ljZSBhcyBiaWcgaW4gc2NyZWVuIHNwYWNlIGF0IHRoZSBuZXh0IHpvb21cbiAgICAgICAgc3R5bGUud2lkdGggPSB3aWR0aCAqIGNvbnRleHQudW5pdHNfcGVyX21ldGVyO1xuICAgICAgICBzdHlsZS5uZXh0X3dpZHRoID0gKG5leHRfd2lkdGggKiAyKSAtIHdpZHRoO1xuICAgICAgICBzdHlsZS5uZXh0X3dpZHRoICo9IGNvbnRleHQudW5pdHNfcGVyX21ldGVyO1xuICAgICAgICBzdHlsZS5uZXh0X3dpZHRoIC89IDI7IC8vIE5COiBkaXZpZGUgYnkgMiBiZWNhdXNlIGV4dHJ1c2lvbiB3aWR0aCBpcyBoYWx2ZWQgaW4gYnVpbGRlciAtIHJlbW92ZT9cblxuICAgICAgICBzdHlsZS5jb2xvciA9IHRoaXMucGFyc2VDb2xvcihydWxlX3N0eWxlLmNvbG9yLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzdHlsZS5jb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGVpZ2h0IGRlZmF1bHRzIHRvIGZlYXR1cmUgaGVpZ2h0LCBidXQgZXh0cnVkZSBzdHlsZSBjYW4gZHluYW1pY2FsbHkgYWRqdXN0IGhlaWdodCBieSByZXR1cm5pbmcgYSBudW1iZXIgb3IgYXJyYXkgKGluc3RlYWQgb2YgYSBib29sZWFuKVxuICAgICAgICBzdHlsZS56ID0gKHJ1bGVfc3R5bGUueiAmJiBTdHlsZVBhcnNlci5jYWNoZURpc3RhbmNlKHJ1bGVfc3R5bGUueiB8fCAwLCBjb250ZXh0KSkgfHwgU3R5bGVQYXJzZXIuZGVmYXVsdHMuejtcbiAgICAgICAgc3R5bGUuaGVpZ2h0ID0gZmVhdHVyZS5wcm9wZXJ0aWVzLmhlaWdodCB8fCBTdHlsZVBhcnNlci5kZWZhdWx0cy5oZWlnaHQ7XG4gICAgICAgIHN0eWxlLmV4dHJ1ZGUgPSBTdHlsZVBhcnNlci5ldmFsUHJvcChydWxlX3N0eWxlLmV4dHJ1ZGUsIGNvbnRleHQpO1xuICAgICAgICBpZiAoc3R5bGUuZXh0cnVkZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5leHRydWRlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmhlaWdodCA9IHN0eWxlLmV4dHJ1ZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHN0eWxlLmV4dHJ1ZGUpKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuaGVpZ2h0ID0gc3R5bGUuZXh0cnVkZVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJhaXNlIGxpbmUgaGVpZ2h0IGlmIGV4dHJ1ZGVkXG4gICAgICAgIGlmIChzdHlsZS5leHRydWRlICYmIHN0eWxlLmhlaWdodCkge1xuICAgICAgICAgICAgc3R5bGUueiArPSBzdHlsZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZS5jYXAgPSBydWxlX3N0eWxlLmNhcDtcbiAgICAgICAgc3R5bGUuam9pbiA9IHJ1bGVfc3R5bGUuam9pbjtcbiAgICAgICAgc3R5bGUubWl0ZXJfbGltaXQgPSBydWxlX3N0eWxlLm1pdGVyX2xpbWl0O1xuICAgICAgICBzdHlsZS50aWxlX2VkZ2VzID0gcnVsZV9zdHlsZS50aWxlX2VkZ2VzOyAvLyB1c3VhbGx5IGFjdGl2YXRlZCBmb3IgZGVidWdnaW5nLCBvciByYXJlIHZpc3VhbGl6YXRpb24gbmVlZHNcblxuICAgICAgICAvLyBDb25zdHJ1Y3QgYW4gb3V0bGluZSBzdHlsZVxuICAgICAgICAvLyBSZXVzYWJsZSBvdXRsaW5lIHN0eWxlIG9iamVjdCwgbWFya2VkIGFzIGFscmVhZHkgd3JhcHBlZCBpbiBjYWNoZSBvYmplY3RzIChwcmVwcm9jZXNzZWQgPSB0cnVlKVxuICAgICAgICBzdHlsZS5vdXRsaW5lID0gc3R5bGUub3V0bGluZSB8fCB7IHdpZHRoOiB7fSwgbmV4dF93aWR0aDoge30sIHByZXByb2Nlc3NlZDogdHJ1ZSB9O1xuXG4gICAgICAgIGlmIChydWxlX3N0eWxlLm91dGxpbmUgJiYgcnVsZV9zdHlsZS5vdXRsaW5lLmNvbG9yICYmIHJ1bGVfc3R5bGUub3V0bGluZS53aWR0aCkge1xuICAgICAgICAgICAgLy8gb3V0bGluZSB3aWR0aCBpbiBtZXRlcnNcbiAgICAgICAgICAgIC8vIE5COiBtdWx0aXBseSBieSAyIGJlY2F1c2Ugb3V0bGluZSBpcyBhcHBsaWVkIG9uIGJvdGggc2lkZXMgb2YgbGluZVxuICAgICAgICAgICAgbGV0IG91dGxpbmVfd2lkdGggPSB0aGlzLmNhbGNXaWR0aChydWxlX3N0eWxlLm91dGxpbmUud2lkdGgsIGNvbnRleHQpICogMjtcbiAgICAgICAgICAgIGxldCBvdXRsaW5lX25leHRfd2lkdGggPSB0aGlzLmNhbGNXaWR0aE5leHRab29tKHJ1bGVfc3R5bGUub3V0bGluZS5uZXh0X3dpZHRoLCBjb250ZXh0KSAqIDI7XG5cbiAgICAgICAgICAgIGlmICgob3V0bGluZV93aWR0aCA9PT0gMCAmJiBvdXRsaW5lX25leHRfd2lkdGggPT09IDApIHx8IG91dGxpbmVfd2lkdGggPCAwIHx8IG91dGxpbmVfbmV4dF93aWR0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBza2lwIGxpbmVzIHRoYXQgZG9uJ3QgaW50ZXJwb2xhdGUgYmV0d2VlbiB6ZXJvIG9yIGdyZWF0ZXIgd2lkdGhcbiAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLndpZHRoLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLm5leHRfd2lkdGgudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN0eWxlLm91dGxpbmUuY29sb3IgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gY29uc2lzdGVudCBvdXRsaW5lIHdpZHRoIGFyb3VuZCB0aGUgbGluZSBmaWxsXG4gICAgICAgICAgICAgICAgc3R5bGUub3V0bGluZS53aWR0aC52YWx1ZSA9IG91dGxpbmVfd2lkdGggKyB3aWR0aDtcbiAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLm5leHRfd2lkdGgudmFsdWUgPSBvdXRsaW5lX25leHRfd2lkdGggKyBuZXh0X3dpZHRoO1xuXG4gICAgICAgICAgICAgICAgc3R5bGUub3V0bGluZS5jb2xvciA9IHJ1bGVfc3R5bGUub3V0bGluZS5jb2xvcjtcbiAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLmNhcCA9IHJ1bGVfc3R5bGUub3V0bGluZS5jYXAgfHwgcnVsZV9zdHlsZS5jYXA7XG4gICAgICAgICAgICAgICAgc3R5bGUub3V0bGluZS5qb2luID0gcnVsZV9zdHlsZS5vdXRsaW5lLmpvaW4gfHwgcnVsZV9zdHlsZS5qb2luO1xuICAgICAgICAgICAgICAgIHN0eWxlLm91dGxpbmUubWl0ZXJfbGltaXQgPSBydWxlX3N0eWxlLm91dGxpbmUubWl0ZXJfbGltaXQgfHwgcnVsZV9zdHlsZS5taXRlcl9saW1pdDtcbiAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLnN0eWxlID0gcnVsZV9zdHlsZS5vdXRsaW5lLnN0eWxlIHx8IHRoaXMubmFtZTtcblxuICAgICAgICAgICAgICAgIC8vIEV4cGxpY2l0bHkgZGVmaW5lZCBvdXRsaW5lIG9yZGVyLCBvciBpbmhlcml0ZWQgZnJvbSBpbm5lciBsaW5lXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGVfc3R5bGUub3V0bGluZS5vcmRlcikge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLm9yZGVyID0gdGhpcy5wYXJzZU9yZGVyKHJ1bGVfc3R5bGUub3V0bGluZS5vcmRlciwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZS5vdXRsaW5lLm9yZGVyID0gc3R5bGUub3JkZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgbGV0IG91dGxpbmUgYmUgYWJvdmUgaW5uZXIgbGluZVxuICAgICAgICAgICAgICAgIGlmIChzdHlsZS5vdXRsaW5lLm9yZGVyID4gc3R5bGUub3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUub3V0bGluZS5vcmRlciA9IHN0eWxlLm9yZGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIE91dGxpbmVzIGFyZSBhbHdheXMgYXQgaGFsZi1sYXllciBpbnRlcnZhbHMgdG8gYXZvaWQgY29uZmxpY3Rpbmcgd2l0aCBpbm5lciBsaW5lc1xuICAgICAgICAgICAgICAgIHN0eWxlLm91dGxpbmUub3JkZXIgLT0gMC41O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3R5bGUub3V0bGluZS53aWR0aC52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICBzdHlsZS5vdXRsaW5lLm5leHRfd2lkdGgudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgc3R5bGUub3V0bGluZS5jb2xvciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSxcblxuICAgIF9wcmVwcm9jZXNzIChkcmF3KSB7XG4gICAgICAgIGRyYXcuY29sb3IgPSBTdHlsZVBhcnNlci5jb2xvckNhY2hlT2JqZWN0KGRyYXcuY29sb3IpO1xuICAgICAgICBkcmF3LndpZHRoID0gU3R5bGVQYXJzZXIuY2FjaGVPYmplY3QoZHJhdy53aWR0aCwgU3R5bGVQYXJzZXIuY2FjaGVVbml0cyk7XG4gICAgICAgIGRyYXcubmV4dF93aWR0aCA9IFN0eWxlUGFyc2VyLmNhY2hlT2JqZWN0KGRyYXcud2lkdGgsIFN0eWxlUGFyc2VyLmNhY2hlVW5pdHMpOyAvLyB3aWR0aCB3aWxsIGJlIGNvbXB1dGVkIGZvciBuZXh0IHpvb21cbiAgICAgICAgZHJhdy56ID0gU3R5bGVQYXJzZXIuY2FjaGVPYmplY3QoZHJhdy56LCBTdHlsZVBhcnNlci5jYWNoZVVuaXRzKTtcblxuICAgICAgICBpZiAoZHJhdy5vdXRsaW5lKSB7XG4gICAgICAgICAgICBkcmF3Lm91dGxpbmUuY29sb3IgPSBTdHlsZVBhcnNlci5jb2xvckNhY2hlT2JqZWN0KGRyYXcub3V0bGluZS5jb2xvcik7XG4gICAgICAgICAgICBkcmF3Lm91dGxpbmUud2lkdGggPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3Lm91dGxpbmUud2lkdGgsIFN0eWxlUGFyc2VyLmNhY2hlVW5pdHMpO1xuICAgICAgICAgICAgZHJhdy5vdXRsaW5lLm5leHRfd2lkdGggPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3Lm91dGxpbmUud2lkdGgsIFN0eWxlUGFyc2VyLmNhY2hlVW5pdHMpOyAvLyB3aWR0aCByZS1jb21wdXRlZCBmb3IgbmV4dCB6b29tXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRyYXc7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEEgXCJ0ZW1wbGF0ZVwiIHRoYXQgc2V0cyBjb25zdGFudCBhdHRpYnV0ZXMgZm9yIGVhY2ggdmVydGV4LCB3aGljaCBpcyB0aGVuIG1vZGlmaWVkIHBlciB2ZXJ0ZXggb3IgcGVyIGZlYXR1cmUuXG4gICAgICogQSBwbGFpbiBKUyBhcnJheSBtYXRjaGluZyB0aGUgb3JkZXIgb2YgdGhlIHZlcnRleCBsYXlvdXQuXG4gICAgICovXG4gICAgbWFrZVZlcnRleFRlbXBsYXRlKHN0eWxlKSB7XG4gICAgICAgIGxldCBpID0gMDtcblxuICAgICAgICAvLyBwb3NpdGlvbiAtIHggJiB5IGNvb3JkcyB3aWxsIGJlIGZpbGxlZCBpbiBwZXItdmVydGV4IGJlbG93XG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSAwO1xuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gMDtcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLnogfHwgMDtcblxuICAgICAgICAvLyBsYXllciBvcmRlciAtIHcgY29vcmQgb2YgJ3Bvc2l0aW9uJyBhdHRyaWJ1dGUgKGZvciBwYWNraW5nIGVmZmljaWVuY3kpXG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSB0aGlzLnNjYWxlT3JkZXIoc3R5bGUub3JkZXIpO1xuXG4gICAgICAgIC8vIGV4dHJ1c2lvbiB2ZWN0b3JcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IDA7XG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSAwO1xuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gMDtcblxuICAgICAgICAvLyBzY2FsaW5nIHRvIHByZXZpb3VzIGFuZCBuZXh0IHpvb21cbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLm5leHRfd2lkdGg7XG5cbiAgICAgICAgLy8gY29sb3JcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLmNvbG9yWzBdICogMjU1O1xuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gc3R5bGUuY29sb3JbMV0gKiAyNTU7XG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSBzdHlsZS5jb2xvclsyXSAqIDI1NTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLmNvbG9yWzNdICogMjU1O1xuXG4gICAgICAgIC8vIHNlbGVjdGlvbiBjb2xvclxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSBzdHlsZS5zZWxlY3Rpb25fY29sb3JbMF0gKiAyNTU7XG4gICAgICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gc3R5bGUuc2VsZWN0aW9uX2NvbG9yWzFdICogMjU1O1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLnNlbGVjdGlvbl9jb2xvclsyXSAqIDI1NTtcbiAgICAgICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSBzdHlsZS5zZWxlY3Rpb25fY29sb3JbM10gKiAyNTU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdGV4dHVyZSBVVnMgdG8gdGVtcGxhdGUgb25seSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKHRoaXMudGV4Y29vcmRzKSB7XG4gICAgICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gMDtcbiAgICAgICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4X3RlbXBsYXRlO1xuICAgIH0sXG5cbiAgICBidWlsZExpbmVzKGxpbmVzLCBzdHlsZSwgdmVydGV4X2RhdGEsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gT3V0bGluZSAoYnVpbGQgZmlyc3Qgc28gdGhhdCBibGVuZGVkIGdlb21ldHJ5IHdpdGhvdXQgYSBkZXB0aCB0ZXN0IGlzIGRyYXduIGZpcnN0L3VuZGVyIHRoZSBpbm5lciBsaW5lKVxuICAgICAgICB0aGlzLmZlYXR1cmVfc3R5bGUgPSB0aGlzLm91dGxpbmVfZmVhdHVyZV9zdHlsZTsgLy8gc3dhcCBpbiBvdXRsaW5lLXNwZWNpZmljIHN0eWxlIGhvbGRlclxuICAgICAgICBpZiAoc3R5bGUub3V0bGluZSAmJiBzdHlsZS5vdXRsaW5lLmNvbG9yICE9IG51bGwgJiYgc3R5bGUub3V0bGluZS53aWR0aC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgb3V0bGluZV9zdHlsZSA9IFN0eWxlTWFuYWdlci5zdHlsZXNbc3R5bGUub3V0bGluZS5zdHlsZV07XG4gICAgICAgICAgICBpZiAob3V0bGluZV9zdHlsZSkge1xuICAgICAgICAgICAgICAgIG91dGxpbmVfc3R5bGUuYWRkRmVhdHVyZShjb250ZXh0LmZlYXR1cmUsIHN0eWxlLm91dGxpbmUsIGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFpbiBsaW5lXG4gICAgICAgIHRoaXMuZmVhdHVyZV9zdHlsZSA9IHRoaXMuaW5saW5lX2ZlYXR1cmVfc3R5bGU7IC8vIHJlc3RvcmUgY2FsY3VsYXRlZCBzdHlsZSBmb3IgaW5saW5lXG4gICAgICAgIGxldCB2ZXJ0ZXhfdGVtcGxhdGUgPSB0aGlzLm1ha2VWZXJ0ZXhUZW1wbGF0ZShzdHlsZSk7XG4gICAgICAgIGJ1aWxkUG9seWxpbmVzKFxuICAgICAgICAgICAgbGluZXMsXG4gICAgICAgICAgICBzdHlsZS53aWR0aCxcbiAgICAgICAgICAgIHZlcnRleF9kYXRhLFxuICAgICAgICAgICAgdmVydGV4X3RlbXBsYXRlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNhcDogc3R5bGUuY2FwLFxuICAgICAgICAgICAgICAgIGpvaW46IHN0eWxlLmpvaW4sXG4gICAgICAgICAgICAgICAgbWl0ZXJfbGltaXQ6IHN0eWxlLm1pdGVyX2xpbWl0LFxuICAgICAgICAgICAgICAgIHNjYWxpbmdfaW5kZXg6IHRoaXMudmVydGV4X2xheW91dC5pbmRleC5hX2V4dHJ1ZGUsXG4gICAgICAgICAgICAgICAgc2NhbGluZ19ub3JtYWxpemU6IFV0aWxzLnNjYWxlSW50MTYoMSwgMjU2KSwgLy8gc2NhbGUgZXh0cnVzaW9uIG5vcm1hbHMgdG8gc2lnbmVkIHNob3J0cyB3LzI1NiB1bml0IGJhc2lzXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRfaW5kZXg6IHRoaXMudmVydGV4X2xheW91dC5pbmRleC5hX3RleGNvb3JkLFxuICAgICAgICAgICAgICAgIHRleGNvb3JkX3NjYWxlOiB0aGlzLnRleGNvb3JkX3NjYWxlLFxuICAgICAgICAgICAgICAgIHRleGNvb3JkX25vcm1hbGl6ZTogNjU1MzUsIC8vIHNjYWxlIFVWcyB0byB1bnNpZ25lZCBzaG9ydHNcbiAgICAgICAgICAgICAgICBjbG9zZWRfcG9seWdvbjogb3B0aW9ucyAmJiBvcHRpb25zLmNsb3NlZF9wb2x5Z29uLFxuICAgICAgICAgICAgICAgIHJlbW92ZV90aWxlX2VkZ2VzOiAhc3R5bGUudGlsZV9lZGdlcyAmJiBvcHRpb25zICYmIG9wdGlvbnMucmVtb3ZlX3RpbGVfZWRnZXMsXG4gICAgICAgICAgICAgICAgdGlsZV9lZGdlX3RvbGVyYW5jZTogR2VvLnRpbGVfc2NhbGUgKiBjb250ZXh0LnRpbGUucGFkX3NjYWxlICogNFxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBidWlsZFBvbHlnb25zKHBvbHlnb25zLCBzdHlsZSwgdmVydGV4X2RhdGEsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gUmVuZGVyIHBvbHlnb25zIGFzIGluZGl2aWR1YWwgbGluZXNcbiAgICAgICAgZm9yIChsZXQgcD0wOyBwIDwgcG9seWdvbnMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRMaW5lcyhwb2x5Z29uc1twXSwgc3R5bGUsIHZlcnRleF9kYXRhLCBjb250ZXh0LCB7IGNsb3NlZF9wb2x5Z29uOiB0cnVlLCByZW1vdmVfdGlsZV9lZGdlczogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG4iLCIvLyBTZXRzIG9mIHZhbHVlcyB0byBtYXRjaCBmb3IgZGlyZWN0aW9uYWwgYW5kIGNvcm5lciBhbmNob3JzXG5jb25zdCBsZWZ0cyA9IFsnbGVmdCcsICd0b3AtbGVmdCcsICdib3R0b20tbGVmdCddO1xuY29uc3QgcmlnaHRzID0gWydyaWdodCcsICd0b3AtcmlnaHQnLCAnYm90dG9tLXJpZ2h0J107XG5jb25zdCB0b3BzID0gWyd0b3AnLCAndG9wLWxlZnQnLCAndG9wLXJpZ2h0J107XG5jb25zdCBib3R0b21zID0gWydib3R0b20nLCAnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0J107XG5cbnZhciBQb2ludEFuY2hvcjtcblxuZXhwb3J0IGRlZmF1bHQgUG9pbnRBbmNob3IgPSB7XG5cbiAgICBjb21wdXRlT2Zmc2V0IChvZmZzZXQsIHNpemUsIGFuY2hvcikge1xuICAgICAgICBpZiAoIWFuY2hvciB8fCBhbmNob3IgPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG9mZnNldDIgPSBbb2Zmc2V0WzBdLCBvZmZzZXRbMV1dO1xuXG4gICAgICAgIC8vIEFuIG9wdGlvbmFsIGxlZnQvcmlnaHQgb2Zmc2V0XG4gICAgICAgIGlmICh0aGlzLmlzTGVmdEFuY2hvcihhbmNob3IpKSB7XG4gICAgICAgICAgICBvZmZzZXQyWzBdIC09IHNpemVbMF0gLyAyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNSaWdodEFuY2hvcihhbmNob3IpKSB7XG4gICAgICAgICAgICBvZmZzZXQyWzBdICs9IHNpemVbMF0gLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQW4gb3B0aW9uYWwgdG9wL2JvdHRvbSBvZmZzZXRcbiAgICAgICAgaWYgKHRoaXMuaXNUb3BBbmNob3IoYW5jaG9yKSkge1xuICAgICAgICAgICAgb2Zmc2V0MlsxXSAtPSBzaXplWzFdIC8gMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzQm90dG9tQW5jaG9yKGFuY2hvcikpIHtcbiAgICAgICAgICAgIG9mZnNldDJbMV0gKz0gc2l6ZVsxXSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2Zmc2V0MjtcbiAgICB9LFxuXG4gICAgaXNMZWZ0QW5jaG9yIChhbmNob3IpIHtcbiAgICAgICAgcmV0dXJuIChsZWZ0cy5pbmRleE9mKGFuY2hvcikgPiAtMSk7XG4gICAgfSxcblxuICAgIGlzUmlnaHRBbmNob3IgKGFuY2hvcikge1xuICAgICAgICByZXR1cm4gKHJpZ2h0cy5pbmRleE9mKGFuY2hvcikgPiAtMSk7XG4gICAgfSxcblxuICAgIGlzVG9wQW5jaG9yIChhbmNob3IpIHtcbiAgICAgICAgcmV0dXJuICh0b3BzLmluZGV4T2YoYW5jaG9yKSA+IC0xKTtcbiAgICB9LFxuXG4gICAgaXNCb3R0b21BbmNob3IgKGFuY2hvcikge1xuICAgICAgICByZXR1cm4gKGJvdHRvbXMuaW5kZXhPZihhbmNob3IpID4gLTEpO1xuICAgIH1cblxufTtcbiIsIi8vIFBvaW50IHJlbmRlcmluZyBzdHlsZVxuXG5pbXBvcnQge1N0eWxlfSBmcm9tICcuLi9zdHlsZSc7XG5pbXBvcnQge1N0eWxlUGFyc2VyfSBmcm9tICcuLi9zdHlsZV9wYXJzZXInO1xuaW1wb3J0IGdsIGZyb20gJy4uLy4uL2dsL2NvbnN0YW50cyc7IC8vIHdlYiB3b3JrZXJzIGRvbid0IGhhdmUgYWNjZXNzIHRvIEdMIGNvbnRleHQsIHNvIGltcG9ydCBhbGwgR0wgY29uc3RhbnRzXG5pbXBvcnQgVmVydGV4TGF5b3V0IGZyb20gJy4uLy4uL2dsL3ZlcnRleF9sYXlvdXQnO1xuaW1wb3J0IHtidWlsZFF1YWRzRm9yUG9pbnRzfSBmcm9tICcuLi8uLi9idWlsZGVycy9wb2ludHMnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vLi4vZ2wvdGV4dHVyZSc7XG5pbXBvcnQgR2VvIGZyb20gJy4uLy4uL2dlbyc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IFZlY3RvciBmcm9tICcuLi8uLi92ZWN0b3InO1xuaW1wb3J0IENvbGxpc2lvbiBmcm9tICcuLi8uLi9sYWJlbHMvY29sbGlzaW9uJztcbmltcG9ydCBMYWJlbFBvaW50IGZyb20gJy4uLy4uL2xhYmVscy9sYWJlbF9wb2ludCc7XG5cbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG5leHBvcnQgdmFyIFBvaW50cyA9IE9iamVjdC5jcmVhdGUoU3R5bGUpO1xuXG5PYmplY3QuYXNzaWduKFBvaW50cywge1xuICAgIG5hbWU6ICdwb2ludHMnLFxuICAgIGJ1aWx0X2luOiB0cnVlLFxuICAgIHNlbGVjdGlvbjogdHJ1ZSwgLy8gdHVybiBmZWF0dXJlIHNlbGVjdGlvbiBvblxuICAgIGJsZW5kOiAnb3ZlcmxheScsIC8vIG92ZXJsYXlzIGRyYXduIG9uIHRvcCBvZiBhbGwgb3RoZXIgc3R5bGVzLCB3aXRoIGJsZW5kaW5nXG5cbiAgICBpbml0KG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBTdHlsZS5pbml0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgLy8gQmFzZSBzaGFkZXJzXG4gICAgICAgIHRoaXMudmVydGV4X3NoYWRlcl9rZXkgPSAnc3R5bGVzL3BvaW50cy9wb2ludHNfdmVydGV4JztcbiAgICAgICAgdGhpcy5mcmFnbWVudF9zaGFkZXJfa2V5ID0gJ3N0eWxlcy9wb2ludHMvcG9pbnRzX2ZyYWdtZW50JztcblxuICAgICAgICB2YXIgYXR0cmlicyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ2FfcG9zaXRpb24nLCBzaXplOiA0LCB0eXBlOiBnbC5TSE9SVCwgbm9ybWFsaXplZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnYV9zaGFwZScsIHNpemU6IDQsIHR5cGU6IGdsLlNIT1JULCBub3JtYWxpemVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdhX3RleGNvb3JkJywgc2l6ZTogMiwgdHlwZTogZ2wuVU5TSUdORURfU0hPUlQsIG5vcm1hbGl6ZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2Ffb2Zmc2V0Jywgc2l6ZTogMiwgdHlwZTogZ2wuU0hPUlQsIG5vcm1hbGl6ZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2FfY29sb3InLCBzaXplOiA0LCB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLCBub3JtYWxpemVkOiB0cnVlIH1cbiAgICAgICAgXTtcblxuICAgICAgICAvLyBPcHRpb25hbCBmZWF0dXJlIHNlbGVjdGlvblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGF0dHJpYnMucHVzaCh7IG5hbWU6ICdhX3NlbGVjdGlvbl9jb2xvcicsIHNpemU6IDQsIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsIG5vcm1hbGl6ZWQ6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSdyZSBub3QgcmVuZGVyaW5nIGFzIG92ZXJsYXksIHdlIG5lZWQgYSBsYXllciBhdHRyaWJ1dGVcbiAgICAgICAgaWYgKHRoaXMuYmxlbmQgIT09ICdvdmVybGF5Jykge1xuICAgICAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fTEFZRVJfT1JERVIgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52ZXJ0ZXhfbGF5b3V0ID0gbmV3IFZlcnRleExheW91dChhdHRyaWJzKTtcblxuICAgICAgICBpZiAodGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmluZXMuVEFOR1JBTV9QT0lOVF9URVhUVVJFID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2hhZGVycy51bmlmb3JtcyA9IHRoaXMuc2hhZGVycy51bmlmb3JtcyB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuc2hhZGVycy51bmlmb3Jtcy51X3RleHR1cmUgPSB0aGlzLnRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXVlcyA9IHt9O1xuICAgIH0sXG5cbiAgICByZXNldCAoKSB7XG4gICAgICAgIHRoaXMucXVldWVzID0ge307XG4gICAgfSxcblxuICAgIC8vIE92ZXJyaWRlIHRvIHF1ZXVlIGZlYXR1cmVzIGluc3RlYWQgb2YgcHJvY2Vzc2luZyBpbW1lZGlhdGVseVxuICAgIGFkZEZlYXR1cmUgKGZlYXR1cmUsIGRyYXcsIGNvbnRleHQpIHtcbiAgICAgICAgbGV0IHRpbGUgPSBjb250ZXh0LnRpbGU7XG5cbiAgICAgICAgLy8gQ2FsbGVkIGhlcmUgYmVjYXVzZSBvdGhlcndpc2UgaXQgd2lsbCBiZSBkZWxheWVkIHVudGlsIHRoZSBmZWF0dXJlIHF1ZXVlIGlzIHBhcnNlZCxcbiAgICAgICAgLy8gYW5kIHdlIHdhbnQgdGhlIHByZXByb2Nlc3NpbmcgZG9uZSBiZWZvcmUgd2UgZXZhbHVhdGUgdGV4dCBzdHlsZSBiZWxvd1xuICAgICAgICBkcmF3ID0gdGhpcy5wcmVwcm9jZXNzKGRyYXcpO1xuICAgICAgICBpZiAoIWRyYXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdHlsZSA9IHt9O1xuICAgICAgICBzdHlsZS5jb2xvciA9IHRoaXMucGFyc2VDb2xvcihkcmF3LmNvbG9yLCBjb250ZXh0KTtcblxuICAgICAgICAvLyByZXF1aXJlIGNvbG9yIG9yIHRleHR1cmVcbiAgICAgICAgaWYgKCFzdHlsZS5jb2xvciAmJiAhdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzcHJpdGUgPSBzdHlsZS5zcHJpdGUgPSBTdHlsZVBhcnNlci5ldmFsUHJvcChkcmF3LnNwcml0ZSwgY29udGV4dCk7XG4gICAgICAgIHN0eWxlLnNwcml0ZV9kZWZhdWx0ID0gZHJhdy5zcHJpdGVfZGVmYXVsdDsgLy8gb3B0aW9uYWwgZmFsbGJhY2sgaWYgJ3Nwcml0ZScgbm90IGZvdW5kXG5cbiAgICAgICAgLy8gaWYgcG9pbnQgaGFzIHRleHR1cmUgYW5kIHNwcml0ZXMsIHJlcXVpcmUgYSB2YWxpZCBzcHJpdGUgdG8gZHJhd1xuICAgICAgICBpZiAodGhpcy50ZXh0dXJlICYmIFRleHR1cmUudGV4dHVyZXNbdGhpcy50ZXh0dXJlXSAmJiBUZXh0dXJlLnRleHR1cmVzW3RoaXMudGV4dHVyZV0uc3ByaXRlcykge1xuICAgICAgICAgICAgaWYgKCFzcHJpdGUgJiYgIXN0eWxlLnNwcml0ZV9kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIVRleHR1cmUudGV4dHVyZXNbdGhpcy50ZXh0dXJlXS5zcHJpdGVzW3Nwcml0ZV0pIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBzcHJpdGUgbm90IGZvdW5kLCBjaGVjayBmb3IgZGVmYXVsdCBzcHJpdGVcbiAgICAgICAgICAgICAgICBpZiAoc3R5bGUuc3ByaXRlX2RlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ByaXRlID0gc3R5bGUuc3ByaXRlX2RlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVGV4dHVyZS50ZXh0dXJlc1t0aGlzLnRleHR1cmVdLnNwcml0ZXNbc3ByaXRlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4oYFN0eWxlOiBpbiBzdHlsZSAnJHt0aGlzLm5hbWV9JywgY291bGQgbm90IGZpbmQgZGVmYXVsdCBzcHJpdGUgJyR7c3ByaXRlfScgZm9yIHRleHR1cmUgJyR7dGhpcy50ZXh0dXJlfSdgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4oYFN0eWxlOiBpbiBzdHlsZSAnJHt0aGlzLm5hbWV9JywgY291bGQgbm90IGZpbmQgc3ByaXRlICcke3Nwcml0ZX0nIGZvciB0ZXh0dXJlICcke3RoaXMudGV4dHVyZX0nYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3ByaXRlKSB7XG4gICAgICAgICAgICBsb2cud2FybihgU3R5bGU6IGluIHN0eWxlICcke3RoaXMubmFtZX0nLCBzcHJpdGUgJyR7c3ByaXRlfScgd2FzIHNwZWNpZmllZCwgYnV0IHRleHR1cmUgJyR7dGhpcy50ZXh0dXJlfScgaGFzIG5vIHNwcml0ZXNgKTtcbiAgICAgICAgICAgIHNwcml0ZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXRzIHRleGNvb3JkIHNjYWxlIGlmIG5lZWRlZCAoZS5nLiBmb3Igc3ByaXRlIHN1Yi1hcmVhKVxuICAgICAgICBsZXQgc3ByaXRlX2luZm87XG4gICAgICAgIGlmICh0aGlzLnRleHR1cmUgJiYgc3ByaXRlKSB7XG4gICAgICAgICAgICBzcHJpdGVfaW5mbyA9IFRleHR1cmUuZ2V0U3ByaXRlSW5mbyh0aGlzLnRleHR1cmUsIHNwcml0ZSk7XG4gICAgICAgICAgICBzdHlsZS50ZXhjb29yZHMgPSBzcHJpdGVfaW5mby50ZXhjb29yZHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHlsZS50ZXhjb29yZHMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcG9pbnRzIGNhbiBiZSBwbGFjZWQgb2ZmIHRoZSBncm91bmRcbiAgICAgICAgc3R5bGUueiA9IChkcmF3LnogJiYgU3R5bGVQYXJzZXIuY2FjaGVEaXN0YW5jZShkcmF3LnosIGNvbnRleHQpKSB8fCBTdHlsZVBhcnNlci5kZWZhdWx0cy56O1xuXG4gICAgICAgIC8vIHBvaW50IHNpemUgZGVmaW5lZCBleHBsaWNpdGx5LCBvciBkZWZhdWx0cyB0byBzcHJpdGUgc2l6ZSwgb3IgZ2VuZXJpYyBmYWxsYmFja1xuICAgICAgICBzdHlsZS5zaXplID0gZHJhdy5zaXplO1xuICAgICAgICBpZiAoIXN0eWxlLnNpemUpIHtcbiAgICAgICAgICAgIGlmIChzcHJpdGVfaW5mbykge1xuICAgICAgICAgICAgICAgIHN0eWxlLnNpemUgPSBzcHJpdGVfaW5mby5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc2l6ZSA9IFsxNiwgMTZdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3R5bGUuc2l6ZSA9IFN0eWxlUGFyc2VyLmNhY2hlUHJvcGVydHkoc3R5bGUuc2l6ZSwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzaXplIHdpbGwgYmUgc2NhbGVkIHRvIDE2LWJpdCBzaWduZWQgaW50LCBzbyBtYXggYWxsb3dlZCB3aWR0aCArIGhlaWdodCBvZiAyNTYgcGl4ZWxzXG4gICAgICAgIHN0eWxlLnNpemUgPSBbXG4gICAgICAgICAgICBNYXRoLm1pbigoc3R5bGUuc2l6ZVswXSB8fCBzdHlsZS5zaXplKSwgMjU2KSxcbiAgICAgICAgICAgIE1hdGgubWluKChzdHlsZS5zaXplWzFdIHx8IHN0eWxlLnNpemUpLCAyNTYpXG4gICAgICAgIF07XG5cbiAgICAgICAgc3R5bGUuYW5nbGUgPSBTdHlsZVBhcnNlci5ldmFsUHJvcChkcmF3LmFuZ2xlLCBjb250ZXh0KSB8fCAwO1xuXG4gICAgICAgIC8vIHBvbHlnb25zIHJlbmRlcmluZyBhcyBwb2ludHMgd2lsbCByZW5kZXIgYXQgdGhlIHBvbHlnb24ncyBjZW50cm9pZCBieSBkZWZhdWx0LFxuICAgICAgICAvLyBidXQgY2FuIGJlIHNldCB0byByZW5kZXIgYXQgZWFjaCBpbmRpdmlkdWFsIHBvbHlnb24gcG9pbnQgaW5zdGVhZFxuICAgICAgICBzdHlsZS5jZW50cm9pZCA9IChkcmF3LmNlbnRyb2lkICE9IG51bGwpID8gZHJhdy5jZW50cm9pZCA6IHRydWU7XG5cbiAgICAgICAgdGhpcy5jb21wdXRlTGF5b3V0KHN0eWxlLCBmZWF0dXJlLCBkcmF3LCBjb250ZXh0LCB0aWxlKTtcblxuICAgICAgICAvLyBRdWV1ZSB0aGUgZmVhdHVyZSBmb3IgcHJvY2Vzc2luZ1xuICAgICAgICBpZiAoIXRoaXMudGlsZV9kYXRhW3RpbGUua2V5XSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydERhdGEodGlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucXVldWVzW3RpbGUua2V5XSkge1xuICAgICAgICAgICAgdGhpcy5xdWV1ZXNbdGlsZS5rZXldID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXVlc1t0aWxlLmtleV0ucHVzaCh7XG4gICAgICAgICAgICBmZWF0dXJlLCBkcmF3LCBjb250ZXh0LCBzdHlsZVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWdpc3RlciB3aXRoIGNvbGxpc2lvbiBtYW5hZ2VyXG4gICAgICAgIENvbGxpc2lvbi5hZGRTdHlsZSh0aGlzLm5hbWUsIHRpbGUua2V5KTtcbiAgICB9LFxuXG4gICAgLy8gT3ZlcnJpZGVcbiAgICBlbmREYXRhICh0aWxlKSB7XG4gICAgICAgIGlmICh0aWxlLmNhbmNlbGVkKSB7XG4gICAgICAgICAgICBVdGlscy5sb2coJ3RyYWNlJywgYFN0eWxlICR7dGhpcy5uYW1lfTogc3RvcCB0aWxlIGJ1aWxkIGJlY2F1c2UgdGlsZSB3YXMgY2FuY2VsZWQ6ICR7dGlsZS5rZXl9YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcXVldWUgPSB0aGlzLnF1ZXVlc1t0aWxlLmtleV07XG4gICAgICAgIHRoaXMucXVldWVzW3RpbGUua2V5XSA9IFtdO1xuXG4gICAgICAgIC8vIEZvciBlYWNoIGZlYXR1cmUsIGNyZWF0ZSBvbmUgb3IgbW9yZSBwb2ludCBsYWJlbHNcbiAgICAgICAgbGV0IGJveGVzID0gW107XG4gICAgICAgIHF1ZXVlLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICBsZXQgc3R5bGUgPSBxLnN0eWxlO1xuICAgICAgICAgICAgbGV0IGZlYXR1cmUgPSBxLmZlYXR1cmU7XG4gICAgICAgICAgICBsZXQgZ2VvbWV0cnkgPSBmZWF0dXJlLmdlb21ldHJ5O1xuXG4gICAgICAgICAgICBsZXQgZmVhdHVyZV9sYWJlbHMgPSB0aGlzLmJ1aWxkTGFiZWxzRnJvbUdlb21ldHJ5KHN0eWxlLnNpemUsIGdlb21ldHJ5LCBzdHlsZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZlYXR1cmVfbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gZmVhdHVyZV9sYWJlbHNbaV07XG4gICAgICAgICAgICAgICAgYm94ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgIGRyYXc6IHEuZHJhdyxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogcS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0OiBzdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3VibWl0IHBvaW50IGxhYmVscyBmb3IgY29sbGlzaW9uLCB0aGVuIGJ1aWxkIGdlb21ldHJ5IGZvciByZW1haW5pbmcgb25lc1xuICAgICAgICByZXR1cm4gQ29sbGlzaW9uLmNvbGxpZGUoYm94ZXMsIHRoaXMubmFtZSwgdGlsZS5rZXkpLnRoZW4oYm94ZXMgPT4ge1xuICAgICAgICAgICAgYm94ZXMuZm9yRWFjaChxID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVfc3R5bGUgPSBxLnN0eWxlO1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZV9zdHlsZS5sYWJlbCA9IHEubGFiZWw7XG5cbiAgICAgICAgICAgICAgICBTdHlsZS5hZGRGZWF0dXJlLmNhbGwodGhpcywgcS5mZWF0dXJlLCBxLmRyYXcsIHEuY29udGV4dCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFN0eWxlLmVuZERhdGEuY2FsbCh0aGlzLCB0aWxlKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9wcmVwcm9jZXNzIChkcmF3KSB7XG4gICAgICAgIGRyYXcuY29sb3IgPSBTdHlsZVBhcnNlci5jb2xvckNhY2hlT2JqZWN0KGRyYXcuY29sb3IpO1xuICAgICAgICBkcmF3LnogPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3LnosIFN0eWxlUGFyc2VyLmNhY2hlVW5pdHMpO1xuXG4gICAgICAgIC8vIFNpemUgKDFkIHZhbHVlIG9yIDJkIGFycmF5KVxuICAgICAgICBkcmF3LnNpemUgPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3LnNpemUsIHYgPT4gQXJyYXkuaXNBcnJheSh2KSA/IHYubWFwKHBhcnNlRmxvYXQpIDogcGFyc2VGbG9hdCh2KSk7XG5cbiAgICAgICAgLy8gT2Zmc2V0ICgyZCBhcnJheSlcbiAgICAgICAgZHJhdy5vZmZzZXQgPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3Lm9mZnNldCwgdiA9PiAoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lm1hcChwYXJzZUZsb2F0KSkgfHwgMCk7XG5cbiAgICAgICAgLy8gQnVmZmVyICgxZCB2YWx1ZSBvciAyZCBhcnJheSwgZXhwYW5kIDFkIHRvIDJkKVxuICAgICAgICBkcmF3LmJ1ZmZlciA9IFN0eWxlUGFyc2VyLmNhY2hlT2JqZWN0KGRyYXcuYnVmZmVyLCB2ID0+IChBcnJheS5pc0FycmF5KHYpID8gdiA6IFt2LCB2XSkubWFwKHBhcnNlRmxvYXQpIHx8IDApO1xuXG4gICAgICAgIHJldHVybiBkcmF3O1xuICAgIH0sXG5cbiAgICAvLyBDb21wdXRlIGxhYmVsIGxheW91dC1yZWxhdGVkIHByb3BlcnRpZXNcbiAgICBjb21wdXRlTGF5b3V0ICh0YXJnZXQsIGZlYXR1cmUsIGRyYXcsIGNvbnRleHQsIHRpbGUpIHtcbiAgICAgICAgbGV0IGxheW91dCA9IHRhcmdldCB8fCB7fTtcbiAgICAgICAgbGF5b3V0LmlkID0gZmVhdHVyZTtcbiAgICAgICAgbGF5b3V0LnVuaXRzX3Blcl9waXhlbCA9IHRpbGUudW5pdHNfcGVyX3BpeGVsIHx8IDE7XG5cbiAgICAgICAgLy8gY29sbGlzaW9uIGZsYWdcbiAgICAgICAgbGF5b3V0LmNvbGxpZGUgPSAoZHJhdy5jb2xsaWRlID09PSBmYWxzZSkgPyBmYWxzZSA6IHRydWU7XG5cbiAgICAgICAgLy8gbGFiZWwgYW5jaG9ycyAocG9pbnQgbGFiZWxzIG9ubHkpXG4gICAgICAgIC8vIGxhYmVsIHBvc2l0aW9uIHdpbGwgYmUgYWRqdXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgcmVsYXRpdmUgdG8gaXRzIG9yaWdpbmFsIHBvaW50XG4gICAgICAgIC8vIG9uZSBvZjogbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCB0b3AtbGVmdCwgdG9wLXJpZ2h0LCBib3R0b20tbGVmdCwgYm90dG9tLXJpZ2h0XG4gICAgICAgIGxheW91dC5hbmNob3IgPSBkcmF3LmFuY2hvcjtcblxuICAgICAgICAvLyBsYWJlbCBvZmZzZXQgYW5kIGJ1ZmZlciBpbiBwaXhlbCAoYXBwbGllZCBpbiBzY3JlZW4gc3BhY2UpXG4gICAgICAgIGxheW91dC5vZmZzZXQgPSBTdHlsZVBhcnNlci5jYWNoZVByb3BlcnR5KGRyYXcub2Zmc2V0LCBjb250ZXh0KSB8fCBTdHlsZVBhcnNlci56ZXJvUGFpcjtcbiAgICAgICAgbGF5b3V0LmJ1ZmZlciA9IFN0eWxlUGFyc2VyLmNhY2hlUHJvcGVydHkoZHJhdy5idWZmZXIsIGNvbnRleHQpIHx8IFN0eWxlUGFyc2VyLnplcm9QYWlyO1xuXG4gICAgICAgIC8vIGxhYmVsIHByaW9yaXR5IChsb3dlciBpcyBoaWdoZXIpXG4gICAgICAgIGxldCBwcmlvcml0eSA9IGRyYXcucHJpb3JpdHk7XG4gICAgICAgIGlmIChwcmlvcml0eSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByaW9yaXR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcHJpb3JpdHkgPSBwcmlvcml0eShjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHByaW9yaXR5ID0gLTEgPj4+IDA7IC8vIGRlZmF1bHQgdG8gbWF4IHByaW9yaXR5IHZhbHVlIGlmIG5vbmUgc2V0XG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0LnByaW9yaXR5ID0gcHJpb3JpdHk7XG5cbiAgICAgICAgcmV0dXJuIGxheW91dDtcbiAgICB9LFxuXG4gICAgLy8gQnVpbGRzIG9uZSBvciBtb3JlIHBvaW50IGxhYmVscyBmb3IgYSBnZW9tZXRyeVxuICAgIGJ1aWxkTGFiZWxzRnJvbUdlb21ldHJ5IChzaXplLCBnZW9tZXRyeSwgb3B0aW9ucykge1xuICAgICAgICBsZXQgbGFiZWxzID0gW107XG5cbiAgICAgICAgaWYgKGdlb21ldHJ5LnR5cGUgPT09IFwiUG9pbnRcIikge1xuICAgICAgICAgICAgbGFiZWxzLnB1c2gobmV3IExhYmVsUG9pbnQoZ2VvbWV0cnkuY29vcmRpbmF0ZXMsIHNpemUsIG9wdGlvbnMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIk11bHRpUG9pbnRcIikge1xuICAgICAgICAgICAgbGV0IHBvaW50cyA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICAgICAgbGFiZWxzLnB1c2gobmV3IExhYmVsUG9pbnQocG9pbnQsIHNpemUsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIkxpbmVTdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gUG9pbnQgYXQgZWFjaCBsaW5lIHZlcnRleFxuICAgICAgICAgICAgbGV0IHBvaW50cyA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBsYWJlbHMucHVzaChuZXcgTGFiZWxQb2ludChwb2ludHNbaV0sIHNpemUsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIk11bHRpTGluZVN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyBQb2ludCBhdCBlYWNoIGxpbmUgdmVydGV4XG4gICAgICAgICAgICBsZXQgbGluZXMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICAgICAgICAgIGZvciAobGV0IGxuID0gMDsgbG4gPCBsaW5lcy5sZW5ndGg7IGxuKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnRzID0gbGluZXNbbG5dO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVscy5wdXNoKG5ldyBMYWJlbFBvaW50KHBvaW50c1tpXSwgc2l6ZSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIlBvbHlnb25cIikge1xuICAgICAgICAgICAgLy8gUG9pbnQgYXQgcG9seWdvbiBjZW50cm9pZCAob2Ygb3V0ZXIgcmluZylcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNlbnRyb2lkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNlbnRyb2lkID0gR2VvLmNlbnRyb2lkKGdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdKTtcbiAgICAgICAgICAgICAgICBsYWJlbHMucHVzaChuZXcgTGFiZWxQb2ludChjZW50cm9pZCwgc2l6ZSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUG9pbnQgYXQgZWFjaCBwb2x5Z29uIHZlcnRleCAoYWxsIHJpbmdzKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHJpbmdzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbG4gPSAwOyBsbiA8IHJpbmdzLmxlbmd0aDsgbG4rKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcG9pbnRzID0gcmluZ3NbbG5dO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzLnB1c2gobmV3IExhYmVsUG9pbnQocG9pbnRzW2ldLCBzaXplLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gXCJNdWx0aVBvbHlnb25cIikge1xuICAgICAgICAgICAgbGV0IGNlbnRyb2lkID0gR2VvLm11bHRpQ2VudHJvaWQoZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgbGFiZWxzLnB1c2gobmV3IExhYmVsUG9pbnQoY2VudHJvaWQsIHNpemUsIG9wdGlvbnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEEgXCJ0ZW1wbGF0ZVwiIHRoYXQgc2V0cyBjb25zdGFudCBhdHRpYnV0ZXMgZm9yIGVhY2ggdmVydGV4LCB3aGljaCBpcyB0aGVuIG1vZGlmaWVkIHBlciB2ZXJ0ZXggb3IgcGVyIGZlYXR1cmUuXG4gICAgICogQSBwbGFpbiBKUyBhcnJheSBtYXRjaGluZyB0aGUgb3JkZXIgb2YgdGhlIHZlcnRleCBsYXlvdXQuXG4gICAgICovXG4gICAgbWFrZVZlcnRleFRlbXBsYXRlKHN0eWxlKSB7XG4gICAgICAgIGxldCBjb2xvciA9IHN0eWxlLmNvbG9yIHx8IFN0eWxlUGFyc2VyLmRlZmF1bHRzLmNvbG9yO1xuXG4gICAgICAgIC8vIHBvc2l0aW9uIC0geCAmIHkgY29vcmRzIHdpbGwgYmUgZmlsbGVkIGluIHBlci12ZXJ0ZXggYmVsb3dcbiAgICAgICAgdGhpcy5maWxsVmVydGV4VGVtcGxhdGUoJ2FfcG9zaXRpb24nLCAwLCB7IHNpemU6IDIgfSk7XG4gICAgICAgIHRoaXMuZmlsbFZlcnRleFRlbXBsYXRlKCdhX3Bvc2l0aW9uJywgc3R5bGUueiB8fCAwLCB7IHNpemU6IDEsIG9mZnNldDogMiB9KTtcbiAgICAgICAgLy8gbGF5ZXIgb3JkZXIgLSB3IGNvb3JkIG9mICdwb3NpdGlvbicgYXR0cmlidXRlIChmb3IgcGFja2luZyBlZmZpY2llbmN5KVxuICAgICAgICB0aGlzLmZpbGxWZXJ0ZXhUZW1wbGF0ZSgnYV9wb3NpdGlvbicsIHRoaXMuc2NhbGVPcmRlcihzdHlsZS5vcmRlciksIHsgc2l6ZTogMSwgb2Zmc2V0OiAzIH0pO1xuXG4gICAgICAgIC8vIHNjYWxpbmcgdmVjdG9yIC0gKHgsIHkpIGNvbXBvbmVudHMgcGVyIHBpeGVsLCB6ID0gYW5nbGUsIHcgPSBzY2FsaW5nIGZhY3RvclxuICAgICAgICB0aGlzLmZpbGxWZXJ0ZXhUZW1wbGF0ZSgnYV9zaGFwZScsIDAsIHsgc2l6ZTogNCB9KTtcblxuICAgICAgICAvLyB0ZXh0dXJlIGNvb3Jkc1xuICAgICAgICB0aGlzLmZpbGxWZXJ0ZXhUZW1wbGF0ZSgnYV90ZXhjb29yZCcsIDAsIHsgc2l6ZTogMiB9KTtcblxuICAgICAgICAvLyBvZmZzZXRzXG4gICAgICAgIHRoaXMuZmlsbFZlcnRleFRlbXBsYXRlKCdhX29mZnNldCcsIDAsIHsgc2l6ZTogMiB9KTtcblxuICAgICAgICAvLyBjb2xvclxuICAgICAgICB0aGlzLmZpbGxWZXJ0ZXhUZW1wbGF0ZSgnYV9jb2xvcicsIFZlY3Rvci5tdWx0KGNvbG9yLCAyNTUpLCB7IHNpemU6IDQgfSk7XG5cbiAgICAgICAgLy8gc2VsZWN0aW9uIGNvbG9yXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5maWxsVmVydGV4VGVtcGxhdGUoJ2Ffc2VsZWN0aW9uX2NvbG9yJywgVmVjdG9yLm11bHQoc3R5bGUuc2VsZWN0aW9uX2NvbG9yLCAyNTUpLCB7IHNpemU6IDQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhfdGVtcGxhdGU7XG4gICAgfSxcblxuICAgIGJ1aWxkUXVhZCAocG9pbnRzLCBzaXplLCBhbmdsZSwgb2Zmc2V0LCB0ZXhjb29yZF9zY2FsZSwgdmVydGV4X2RhdGEsIHZlcnRleF90ZW1wbGF0ZSkge1xuICAgICAgICBidWlsZFF1YWRzRm9yUG9pbnRzKFxuICAgICAgICAgICAgcG9pbnRzLFxuICAgICAgICAgICAgdmVydGV4X2RhdGEsXG4gICAgICAgICAgICB2ZXJ0ZXhfdGVtcGxhdGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4Y29vcmRfaW5kZXg6IHRoaXMudmVydGV4X2xheW91dC5pbmRleC5hX3RleGNvb3JkLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uX2luZGV4OiB0aGlzLnZlcnRleF9sYXlvdXQuaW5kZXguYV9wb3NpdGlvbixcbiAgICAgICAgICAgICAgICBzaGFwZV9pbmRleDogdGhpcy52ZXJ0ZXhfbGF5b3V0LmluZGV4LmFfc2hhcGUsXG4gICAgICAgICAgICAgICAgb2Zmc2V0X2luZGV4OiB0aGlzLnZlcnRleF9sYXlvdXQuaW5kZXguYV9vZmZzZXRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcXVhZDogWyBVdGlscy5zY2FsZUludDE2KHNpemVbMF0sIDI1NiksIFV0aWxzLnNjYWxlSW50MTYoc2l6ZVsxXSwgMjU2KSBdLFxuICAgICAgICAgICAgICAgIHF1YWRfc2NhbGU6IFV0aWxzLnNjYWxlSW50MTYoMSwgMjU2KSxcbiAgICAgICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICAgICAgYW5nbGU6IFV0aWxzLnNjYWxlSW50MTYoYW5nbGUsIDM2MCksXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRfc2NhbGU6IHRleGNvb3JkX3NjYWxlLFxuICAgICAgICAgICAgICAgIHRleGNvb3JkX25vcm1hbGl6ZTogNjU1MzVcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLy8gQnVpbGQgcXVhZCBmb3IgcG9pbnQgc3ByaXRlXG4gICAgYnVpbGQgKHN0eWxlLCB2ZXJ0ZXhfZGF0YSkge1xuICAgICAgICBsZXQgdmVydGV4X3RlbXBsYXRlID0gdGhpcy5tYWtlVmVydGV4VGVtcGxhdGUoc3R5bGUpO1xuICAgICAgICBsZXQgbGFiZWwgPSBzdHlsZS5sYWJlbDtcblxuICAgICAgICB0aGlzLmJ1aWxkUXVhZChcbiAgICAgICAgICAgIFtsYWJlbC5wb3NpdGlvbl0sICAgICAgICAgICAgICAgLy8gcG9zaXRpb25cbiAgICAgICAgICAgIHN0eWxlLnNpemUsICAgICAgICAgICAgICAgICAgICAgLy8gc2l6ZSBpbiBwaXhlbHNcbiAgICAgICAgICAgIHN0eWxlLmFuZ2xlLCAgICAgICAgICAgICAgICAgICAgLy8gYW5nbGUgaW4gZGVncmVlc1xuICAgICAgICAgICAgbGFiZWwub3B0aW9ucy5vZmZzZXQsICAgICAgICAgICAvLyBvZmZzZXQgZnJvbSBjZW50ZXIgaW4gcGl4ZWxzXG4gICAgICAgICAgICBzdHlsZS50ZXhjb29yZHMsICAgICAgICAgICAgICAgIC8vIHRleHR1cmUgVVZzXG4gICAgICAgICAgICB2ZXJ0ZXhfZGF0YSwgdmVydGV4X3RlbXBsYXRlICAgIC8vIFZCTyBhbmQgZGF0YSBmb3IgY3VycmVudCB2ZXJ0ZXhcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLy8gT3ZlcnJpZGUgdG8gcGFzcy10aHJvdWdoIHRvIGdlbmVyaWMgcG9pbnQgYnVpbGRlclxuICAgIGJ1aWxkTGluZXMgKGxpbmVzLCBzdHlsZSwgdmVydGV4X2RhdGEpIHtcbiAgICAgICAgdGhpcy5idWlsZChzdHlsZSwgdmVydGV4X2RhdGEpO1xuICAgIH0sXG5cbiAgICBidWlsZFBvaW50cyAocG9pbnRzLCBzdHlsZSwgdmVydGV4X2RhdGEpIHtcbiAgICAgICAgdGhpcy5idWlsZChzdHlsZSwgdmVydGV4X2RhdGEpO1xuICAgIH0sXG5cbiAgICBidWlsZFBvbHlnb25zIChwb2ludHMsIHN0eWxlLCB2ZXJ0ZXhfZGF0YSkge1xuICAgICAgICB0aGlzLmJ1aWxkKHN0eWxlLCB2ZXJ0ZXhfZGF0YSk7XG4gICAgfVxuXG59KTtcbiIsIi8vIFBvbHlnb24gcmVuZGVyaW5nIHN0eWxlXG5cbmltcG9ydCB7U3R5bGV9IGZyb20gJy4uL3N0eWxlJztcbmltcG9ydCB7U3R5bGVQYXJzZXJ9IGZyb20gJy4uL3N0eWxlX3BhcnNlcic7XG5pbXBvcnQgZ2wgZnJvbSAnLi4vLi4vZ2wvY29uc3RhbnRzJzsgLy8gd2ViIHdvcmtlcnMgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gR0wgY29udGV4dCwgc28gaW1wb3J0IGFsbCBHTCBjb25zdGFudHNcbmltcG9ydCBWZXJ0ZXhMYXlvdXQgZnJvbSAnLi4vLi4vZ2wvdmVydGV4X2xheW91dCc7XG5pbXBvcnQge2J1aWxkUG9seWdvbnMsIGJ1aWxkRXh0cnVkZWRQb2x5Z29uc30gZnJvbSAnLi4vLi4vYnVpbGRlcnMvcG9seWdvbnMnO1xuaW1wb3J0IEdlbyBmcm9tICcuLi8uLi9nZW8nO1xuXG5leHBvcnQgdmFyIFBvbHlnb25zID0gT2JqZWN0LmNyZWF0ZShTdHlsZSk7XG5cbk9iamVjdC5hc3NpZ24oUG9seWdvbnMsIHtcbiAgICBuYW1lOiAncG9seWdvbnMnLFxuICAgIGJ1aWx0X2luOiB0cnVlLFxuICAgIHZlcnRleF9zaGFkZXJfa2V5OiAnc3R5bGVzL3BvbHlnb25zL3BvbHlnb25zX3ZlcnRleCcsXG4gICAgZnJhZ21lbnRfc2hhZGVyX2tleTogJ3N0eWxlcy9wb2x5Z29ucy9wb2x5Z29uc19mcmFnbWVudCcsXG4gICAgc2VsZWN0aW9uOiB0cnVlLCAvLyB0dXJuIGZlYXR1cmUgc2VsZWN0aW9uIG9uXG5cbiAgICBpbml0KCkge1xuICAgICAgICBTdHlsZS5pbml0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgLy8gQmFzaWMgYXR0cmlidXRlcywgb3RoZXJzIGNhbiBiZSBhZGRlZCAoc2VlIHRleHR1cmUgVVZzIGJlbG93KVxuICAgICAgICB2YXIgYXR0cmlicyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ2FfcG9zaXRpb24nLCBzaXplOiA0LCB0eXBlOiBnbC5TSE9SVCwgbm9ybWFsaXplZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnYV9ub3JtYWwnLCBzaXplOiAzLCB0eXBlOiBnbC5CWVRFLCBub3JtYWxpemVkOiB0cnVlIH0sIC8vIGdldHMgcGFkZGVkIHRvIDQtYnl0ZXNcbiAgICAgICAgICAgIHsgbmFtZTogJ2FfY29sb3InLCBzaXplOiA0LCB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLCBub3JtYWxpemVkOiB0cnVlIH1cbiAgICAgICAgXTtcblxuICAgICAgICAvLyBUZWxsIHRoZSBzaGFkZXIgd2UgaGF2ZSBhIG5vcm1hbCBhbmQgb3JkZXIgYXR0cmlidXRlc1xuICAgICAgICB0aGlzLmRlZmluZXMuVEFOR1JBTV9OT1JNQUxfQVRUUklCVVRFID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fTEFZRVJfT1JERVIgPSB0cnVlO1xuXG4gICAgICAgIC8vIE9wdGlvbmFsIGZlYXR1cmUgc2VsZWN0aW9uXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgYXR0cmlicy5wdXNoKHsgbmFtZTogJ2Ffc2VsZWN0aW9uX2NvbG9yJywgc2l6ZTogNCwgdHlwZTogZ2wuVU5TSUdORURfQllURSwgbm9ybWFsaXplZDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9wdGlvbmFsIHRleHR1cmUgVVZzXG4gICAgICAgIGlmICh0aGlzLnRleGNvb3Jkcykge1xuICAgICAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fVEVYVFVSRV9DT09SRFMgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBBZGQgdmVydGV4IGF0dHJpYnV0ZSBmb3IgVVZzIG9ubHkgd2hlbiBuZWVkZWRcbiAgICAgICAgICAgIGF0dHJpYnMucHVzaCh7IG5hbWU6ICdhX3RleGNvb3JkJywgc2l6ZTogMiwgdHlwZTogZ2wuVU5TSUdORURfU0hPUlQsIG5vcm1hbGl6ZWQ6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZlcnRleF9sYXlvdXQgPSBuZXcgVmVydGV4TGF5b3V0KGF0dHJpYnMpO1xuICAgIH0sXG5cbiAgICBfcGFyc2VGZWF0dXJlIChmZWF0dXJlLCBydWxlX3N0eWxlLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMuZmVhdHVyZV9zdHlsZTtcblxuICAgICAgICBzdHlsZS5jb2xvciA9IHRoaXMucGFyc2VDb2xvcihydWxlX3N0eWxlLmNvbG9yLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzdHlsZS5jb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoZWlnaHQgZGVmYXVsdHMgdG8gZmVhdHVyZSBoZWlnaHQsIGJ1dCBleHRydWRlIHN0eWxlIGNhbiBkeW5hbWljYWxseSBhZGp1c3QgaGVpZ2h0IGJ5IHJldHVybmluZyBhIG51bWJlciBvciBhcnJheSAoaW5zdGVhZCBvZiBhIGJvb2xlYW4pXG4gICAgICAgIHN0eWxlLnogPSAocnVsZV9zdHlsZS56ICYmIFN0eWxlUGFyc2VyLmNhY2hlRGlzdGFuY2UocnVsZV9zdHlsZS56LCBjb250ZXh0KSkgfHwgU3R5bGVQYXJzZXIuZGVmYXVsdHMuejtcbiAgICAgICAgc3R5bGUuaGVpZ2h0ID0gZmVhdHVyZS5wcm9wZXJ0aWVzLmhlaWdodCB8fCBTdHlsZVBhcnNlci5kZWZhdWx0cy5oZWlnaHQ7XG4gICAgICAgIHN0eWxlLm1pbl9oZWlnaHQgPSBmZWF0dXJlLnByb3BlcnRpZXMubWluX2hlaWdodCB8fCBTdHlsZVBhcnNlci5kZWZhdWx0cy5taW5faGVpZ2h0O1xuICAgICAgICBzdHlsZS5leHRydWRlID0gU3R5bGVQYXJzZXIuZXZhbFByb3AocnVsZV9zdHlsZS5leHRydWRlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHN0eWxlLmV4dHJ1ZGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZXh0cnVkZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5oZWlnaHQgPSBzdHlsZS5leHRydWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzdHlsZS5leHRydWRlKSkge1xuICAgICAgICAgICAgICAgIHN0eWxlLm1pbl9oZWlnaHQgPSBzdHlsZS5leHRydWRlWzBdO1xuICAgICAgICAgICAgICAgIHN0eWxlLmhlaWdodCA9IHN0eWxlLmV4dHJ1ZGVbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZS50aWxlX2VkZ2VzID0gcnVsZV9zdHlsZS50aWxlX2VkZ2VzOyAvLyB1c3VhbGx5IGFjdGl2YXRlZCBmb3IgZGVidWdnaW5nLCBvciByYXJlIHZpc3VhbGl6YXRpb24gbmVlZHNcblxuICAgICAgICAvLyBzdHlsZS5vdXRsaW5lID0gc3R5bGUub3V0bGluZSB8fCB7fTtcbiAgICAgICAgLy8gaWYgKHJ1bGVfc3R5bGUub3V0bGluZSkge1xuICAgICAgICAvLyAgICAgc3R5bGUub3V0bGluZS5jb2xvciA9IFN0eWxlUGFyc2VyLnBhcnNlQ29sb3IocnVsZV9zdHlsZS5vdXRsaW5lLmNvbG9yLCBjb250ZXh0KTtcbiAgICAgICAgLy8gICAgIHN0eWxlLm91dGxpbmUud2lkdGggPSBTdHlsZVBhcnNlci5wYXJzZURpc3RhbmNlKHJ1bGVfc3R5bGUub3V0bGluZS53aWR0aCwgY29udGV4dCk7XG4gICAgICAgIC8vICAgICBzdHlsZS5vdXRsaW5lLnRpbGVfZWRnZXMgPSBydWxlX3N0eWxlLm91dGxpbmUudGlsZV9lZGdlcztcbiAgICAgICAgLy8gICAgIHN0eWxlLm91dGxpbmUuY2FwID0gcnVsZV9zdHlsZS5vdXRsaW5lLmNhcCB8fCBydWxlX3N0eWxlLmNhcDtcbiAgICAgICAgLy8gICAgIHN0eWxlLm91dGxpbmUuam9pbiA9IHJ1bGVfc3R5bGUub3V0bGluZS5qb2luIHx8IHJ1bGVfc3R5bGUuam9pbjtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgLy8gICAgIHN0eWxlLm91dGxpbmUuY29sb3IgPSBudWxsO1xuICAgICAgICAvLyAgICAgc3R5bGUub3V0bGluZS53aWR0aCA9IG51bGw7XG4gICAgICAgIC8vICAgICBzdHlsZS5vdXRsaW5lLnRpbGVfZWRnZXMgPSBmYWxzZTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgX3ByZXByb2Nlc3MgKGRyYXcpIHtcbiAgICAgICAgZHJhdy5jb2xvciA9IFN0eWxlUGFyc2VyLmNvbG9yQ2FjaGVPYmplY3QoZHJhdy5jb2xvcik7XG4gICAgICAgIGRyYXcueiA9IFN0eWxlUGFyc2VyLmNhY2hlT2JqZWN0KGRyYXcueiwgU3R5bGVQYXJzZXIuY2FjaGVVbml0cyk7XG4gICAgICAgIHJldHVybiBkcmF3O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBIFwidGVtcGxhdGVcIiB0aGF0IHNldHMgY29uc3RhbnQgYXR0aWJ1dGVzIGZvciBlYWNoIHZlcnRleCwgd2hpY2ggaXMgdGhlbiBtb2RpZmllZCBwZXIgdmVydGV4IG9yIHBlciBmZWF0dXJlLlxuICAgICAqIEEgcGxhaW4gSlMgYXJyYXkgbWF0Y2hpbmcgdGhlIG9yZGVyIG9mIHRoZSB2ZXJ0ZXggbGF5b3V0LlxuICAgICAqL1xuICAgIG1ha2VWZXJ0ZXhUZW1wbGF0ZShzdHlsZSkge1xuICAgICAgICBsZXQgaSA9IDA7XG5cbiAgICAgICAgLy8gcG9zaXRpb24gLSB4ICYgeSBjb29yZHMgd2lsbCBiZSBmaWxsZWQgaW4gcGVyLXZlcnRleCBiZWxvd1xuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gMDtcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IDA7XG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSBzdHlsZS56IHx8IDA7XG5cbiAgICAgICAgLy8gbGF5ZXIgb3JkZXIgLSB3IGNvb3JkIG9mICdwb3NpdGlvbicgYXR0cmlidXRlIChmb3IgcGFja2luZyBlZmZpY2llbmN5KVxuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gdGhpcy5zY2FsZU9yZGVyKHN0eWxlLm9yZGVyKTtcblxuICAgICAgICAvLyBub3JtYWxcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IDA7XG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSAwO1xuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gMSAqIDEyNztcblxuICAgICAgICAvLyBjb2xvclxuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gc3R5bGUuY29sb3JbMF0gKiAyNTU7XG4gICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSBzdHlsZS5jb2xvclsxXSAqIDI1NTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLmNvbG9yWzJdICogMjU1O1xuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gc3R5bGUuY29sb3JbM10gKiAyNTU7XG5cbiAgICAgICAgLy8gc2VsZWN0aW9uIGNvbG9yXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLnNlbGVjdGlvbl9jb2xvclswXSAqIDI1NTtcbiAgICAgICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSBzdHlsZS5zZWxlY3Rpb25fY29sb3JbMV0gKiAyNTU7XG4gICAgICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZVtpKytdID0gc3R5bGUuc2VsZWN0aW9uX2NvbG9yWzJdICogMjU1O1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IHN0eWxlLnNlbGVjdGlvbl9jb2xvclszXSAqIDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCB0ZXh0dXJlIFVWcyB0byB0ZW1wbGF0ZSBvbmx5IGlmIG5lZWRlZFxuICAgICAgICBpZiAodGhpcy50ZXhjb29yZHMpIHtcbiAgICAgICAgICAgIHRoaXMudmVydGV4X3RlbXBsYXRlW2krK10gPSAwO1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaSsrXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhfdGVtcGxhdGU7XG4gICAgfSxcblxuICAgIGJ1aWxkUG9seWdvbnMocG9seWdvbnMsIHN0eWxlLCB2ZXJ0ZXhfZGF0YSwgY29udGV4dCkge1xuICAgICAgICBsZXQgdmVydGV4X3RlbXBsYXRlID0gdGhpcy5tYWtlVmVydGV4VGVtcGxhdGUoc3R5bGUpO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHRleGNvb3JkX2luZGV4OiB0aGlzLnZlcnRleF9sYXlvdXQuaW5kZXguYV90ZXhjb29yZCxcbiAgICAgICAgICAgIHRleGNvb3JkX3NjYWxlOiB0aGlzLnRleGNvb3JkX3NjYWxlLFxuICAgICAgICAgICAgdGV4Y29vcmRfbm9ybWFsaXplOiA2NTUzNSwgLy8gc2NhbGUgVVZzIHRvIHVuc2lnbmVkIHNob3J0c1xuICAgICAgICAgICAgcmVtb3ZlX3RpbGVfZWRnZXM6ICFzdHlsZS50aWxlX2VkZ2VzLFxuICAgICAgICAgICAgdGlsZV9lZGdlX3RvbGVyYW5jZTogR2VvLnRpbGVfc2NhbGUgKiBjb250ZXh0LnRpbGUucGFkX3NjYWxlICogNCxcbiAgICAgICAgICAgIHdpbmRpbmc6IGNvbnRleHQud2luZGluZ1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEV4dHJ1ZGVkIHBvbHlnb25zIChlLmcuIDNEIGJ1aWxkaW5ncylcbiAgICAgICAgaWYgKHN0eWxlLmV4dHJ1ZGUgJiYgc3R5bGUuaGVpZ2h0KSB7XG4gICAgICAgICAgICBidWlsZEV4dHJ1ZGVkUG9seWdvbnMoXG4gICAgICAgICAgICAgICAgcG9seWdvbnMsXG4gICAgICAgICAgICAgICAgc3R5bGUueiwgc3R5bGUuaGVpZ2h0LCBzdHlsZS5taW5faGVpZ2h0LFxuICAgICAgICAgICAgICAgIHZlcnRleF9kYXRhLCB2ZXJ0ZXhfdGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgdGhpcy52ZXJ0ZXhfbGF5b3V0LmluZGV4LmFfbm9ybWFsLFxuICAgICAgICAgICAgICAgIDEyNywgLy8gc2NhbGUgbm9ybWFscyB0byBzaWduZWQgYnl0ZXNcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlZ3VsYXIgcG9seWdvbnNcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBidWlsZFBvbHlnb25zKFxuICAgICAgICAgICAgICAgIHBvbHlnb25zLFxuICAgICAgICAgICAgICAgIHZlcnRleF9kYXRhLCB2ZXJ0ZXhfdGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG4iLCIvLyBSYXN0ZXIgdGlsZSByZW5kZXJpbmcgc3R5bGVcblxuaW1wb3J0IHtTdHlsZVBhcnNlcn0gZnJvbSAnLi4vc3R5bGVfcGFyc2VyJztcbmltcG9ydCB7UG9seWdvbnN9IGZyb20gJy4uL3BvbHlnb25zL3BvbHlnb25zJztcblxuZXhwb3J0IGxldCBSYXN0ZXJTdHlsZSA9IE9iamVjdC5jcmVhdGUoUG9seWdvbnMpO1xuXG5PYmplY3QuYXNzaWduKFJhc3RlclN0eWxlLCB7XG4gICAgbmFtZTogJ3Jhc3RlcicsXG4gICAgc3VwZXI6IFBvbHlnb25zLFxuICAgIGJ1aWx0X2luOiB0cnVlLFxuICAgIHNlbGVjdGlvbjogZmFsc2UsIC8vIG5vIGZlYXR1cmUgc2VsZWN0aW9uIGJ5IGRlZmF1bHRcblxuICAgIGluaXQoKSB7XG4gICAgICAgIC8vIFJlcXVpcmVkIGZvciByYXN0ZXIgdGlsZXNcbiAgICAgICAgdGhpcy5yYXN0ZXIgPSB0aGlzLnJhc3RlciB8fCAnY29sb3InO1xuXG4gICAgICAgIHRoaXMuc3VwZXIuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG5cbiAgICBfcHJlcHJvY2VzcyAoZHJhdykge1xuICAgICAgICAvLyBSYXN0ZXIgdGlsZXMgZGVmYXVsdCB0byB3aGl0ZSB2ZXJ0ZXggY29sb3IsIGFzIHRoaXMgY29sb3Igd2lsbCB0aW50IHRoZSB1bmRlcmx5aW5nIHRleHR1cmVcbiAgICAgICAgZHJhdy5jb2xvciA9IGRyYXcuY29sb3IgfHwgU3R5bGVQYXJzZXIuZGVmYXVsdHMuY29sb3I7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cGVyLl9wcmVwcm9jZXNzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG59KTtcbiIsImltcG9ydCB7U3R5bGVzfSBmcm9tICcuL3N0eWxlX21hbmFnZXInO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tICcuLi91dGlscy9tZXJnZSc7XG5pbXBvcnQge21hdGNofSBmcm9tICdtYXRjaC1mZWF0dXJlJztcbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG5leHBvcnQgY29uc3Qgd2hpdGVMaXN0ID0gWydmaWx0ZXInLCAnZHJhdycsICd2aXNpYmxlJywgJ2RhdGEnXTtcblxuZXhwb3J0IGxldCBydWxlQ2FjaGUgPSB7fTtcblxuZnVuY3Rpb24gY2FjaGVLZXkgKHJ1bGVzKSB7XG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdmFyIGsgPSBydWxlc1swXTtcbiAgICAgICAgZm9yICh2YXIgaT0xOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGsgKz0gJy8nICsgcnVsZXNbaV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaztcbiAgICB9XG4gICAgcmV0dXJuIHJ1bGVzWzBdO1xufVxuXG4vLyBNZXJnZSBtYXRjaGluZyBsYXllciBydWxlIHRyZWVzIGludG8gYSBmaW5hbCBkcmF3IGdyb3VwXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VUcmVlcyhtYXRjaGluZ1RyZWVzLCBncm91cCkge1xuICAgIGxldCBkcmF3cywgdHJlZURlcHRoID0gMDtcblxuICAgIGxldCBkcmF3ID0ge1xuICAgICAgICB2aXNpYmxlOiB0cnVlIC8vIHZpc2libGUgYnkgZGVmYXVsdFxuICAgIH07XG5cbiAgICAvLyBGaW5kIGRlZXBlc3QgdHJlZVxuICAgIGZvciAobGV0IHQ9MDsgdCA8IG1hdGNoaW5nVHJlZXMubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgaWYgKG1hdGNoaW5nVHJlZXNbdF0ubGVuZ3RoID4gdHJlZURlcHRoKSB7XG4gICAgICAgICAgICB0cmVlRGVwdGggPSBtYXRjaGluZ1RyZWVzW3RdLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vIHJ1bGVzIHRvIHBhcnNlXG4gICAgaWYgKHRyZWVEZXB0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBJdGVyYXRlIHRyZWVzIGluIHBhcmFsbGVsXG4gICAgZm9yIChsZXQgeD0wOyB4IDwgdHJlZURlcHRoOyB4KyspIHtcbiAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHJlcXVlc3RlZCBkcmF3IGdyb3VwLCBmb3IgZWFjaCB0cmVlLCBhdCB0aGlzIGRlcHRoXG4gICAgICAgIGRyYXdzID0gbWF0Y2hpbmdUcmVlcy5tYXAodHJlZSA9PiB0cmVlW3hdICYmIHRyZWVbeF1bZ3JvdXBdKTtcbiAgICAgICAgaWYgKGRyYXdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3J0IGJ5IGxheWVyIG5hbWUgYmVmb3JlIG1lcmdpbmcsIHNvIHJ1bGVzIGFyZSBhcHBsaWVkIGRldGVybWluaXN0aWNhbGx5XG4gICAgICAgIC8vIHdoZW4gbXVsdGlwbGUgcnVsZXMgbW9kaWZ5IHRoZSBzYW1lIHByb3BlcnRpZXNcbiAgICAgICAgZHJhd3Muc29ydCgoYSwgYikgPT4gKGEgJiYgYS5sYXllcl9uYW1lKSA+IChiICYmIGIubGF5ZXJfbmFtZSkgPyAxIDogLTEpO1xuXG4gICAgICAgIC8vIE1lcmdlIGRyYXcgb2JqZWN0c1xuICAgICAgICBtZXJnZU9iamVjdHMoZHJhdywgLi4uZHJhd3MpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBsYXllciBuYW1lcywgdGhleSB3ZXJlIG9ubHkgdXNlZCB0cmFuc2llbnRseSB0byBzb3J0IGFuZCBjYWxjdWxhdGUgZmluYWwgbGF5ZXJcbiAgICAgICAgLy8gKGZpbmFsIG1lcmdlZCBuYW1lcyB3aWxsIG5vdCBiZSBhY2N1cmF0ZSBzaW5jZSBvbmx5IG9uZSB0cmVlIGNhbiB3aW4pXG4gICAgICAgIGRlbGV0ZSBkcmF3LmxheWVyX25hbWU7XG4gICAgfVxuXG4gICAgLy8gU2hvcnQtY2lyY3VpdCBpZiBub3QgdmlzaWJsZVxuICAgIGlmIChkcmF3LnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBkcmF3O1xufVxuXG5cbmNsYXNzIFJ1bGUge1xuXG4gICAgY29uc3RydWN0b3Ioe25hbWUsIHBhcmVudCwgZHJhdywgdmlzaWJsZSwgZmlsdGVyfSkge1xuICAgICAgICB0aGlzLmlkID0gUnVsZS5pZCsrO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5mdWxsX25hbWUgPSB0aGlzLnBhcmVudCA/ICh0aGlzLnBhcmVudC5mdWxsX25hbWUgKyAnOicgKyB0aGlzLm5hbWUpIDogdGhpcy5uYW1lO1xuICAgICAgICB0aGlzLmRyYXcgPSBkcmF3O1xuICAgICAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gdmlzaWJsZSA6ICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC52aXNpYmxlKTtcblxuICAgICAgICAvLyBEZW5vcm1hbGl6ZSBsYXllciBuYW1lIHRvIGRyYXcgZ3JvdXBzXG4gICAgICAgIGlmICh0aGlzLmRyYXcpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGdyb3VwIGluIHRoaXMuZHJhdykge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd1tncm91cF0gPSB0aGlzLmRyYXdbZ3JvdXBdIHx8IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd1tncm91cF0ubGF5ZXJfbmFtZSA9IHRoaXMuZnVsbF9uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZEZpbHRlcigpO1xuICAgICAgICB0aGlzLmJ1aWxkRHJhdygpO1xuICAgIH1cblxuICAgIGJ1aWxkRHJhdygpIHtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVkRHJhdyA9IGNhbGN1bGF0ZURyYXcodGhpcyk7XG4gICAgfVxuXG4gICAgYnVpbGRGaWx0ZXIoKSB7XG4gICAgICAgIGxldCB0eXBlID0gdHlwZW9mIHRoaXMuZmlsdGVyO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXIgIT0gbnVsbCAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBJbnZhbGlkIGZpbHRlclxuICAgICAgICAgICAgbGV0IG1zZyA9IGBGaWx0ZXIgZm9yIGxheWVyICR7dGhpcy5mdWxsX25hbWV9IGlzIGludmFsaWQsIGZpbHRlciB2YWx1ZSBtdXN0IGJlIGFuIG9iamVjdCBvciBmdW5jdGlvbiwgYDtcbiAgICAgICAgICAgIG1zZyArPSBgYnV0IHdhcyBzZXQgdG8gXFxgZmlsdGVyOiAke3RoaXMuZmlsdGVyfVxcYCBpbnN0ZWFkYDtcbiAgICAgICAgICAgIGxvZy53YXJuKG1zZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5idWlsZFpvb21zKCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyICYmIG1hdGNoKHRoaXMuZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgICAgICAvLyBJbnZhbGlkIGZpbHRlclxuICAgICAgICAgICAgbGV0IG1zZyA9IGBGaWx0ZXIgZm9yIGxheWVyICR7dGhpcy5mdWxsX25hbWV9IGlzIGludmFsaWQsIFxcYGZpbHRlcjogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcil9XFxgIGA7XG4gICAgICAgICAgICBtc2cgKz0gYGZhaWxlZCB3aXRoIGVycm9yICR7ZS5tZXNzYWdlfSwgJHtlLnN0YWNrfWA7XG4gICAgICAgICAgICBsb2cud2Fybihtc2cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gWm9vbXMgb2Z0ZW4gY3VsbCBsYXJnZSBzd2F0aHMgb2YgdGhlIGxheWVyIHJ1bGUgdHJlZSwgc28gdGhleSBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGFyZSBjaGVja2VkIGZpcnN0XG4gICAgYnVpbGRab29tcygpIHtcbiAgICAgICAgbGV0IHpvb20gPSB0aGlzLmZpbHRlciAmJiB0aGlzLmZpbHRlci4kem9vbTtcbiAgICAgICAgbGV0IHp0eXBlID0gdHlwZW9mIHpvb207XG4gICAgICAgIGlmICh6b29tICE9IG51bGwgJiYgenR5cGUgIT09ICdmdW5jdGlvbicpIHsgLy8gZG9uJ3QgYWNjZWxlcmF0ZSBmdW5jdGlvbi1iYXNlZCBmaWx0ZXJzXG4gICAgICAgICAgICB0aGlzLnpvb21zID0ge307XG5cbiAgICAgICAgICAgIGlmICh6dHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvb21zW3pvb21dID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoem9vbSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB6PTA7IHogPCB6b29tLmxlbmd0aDsgeisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9vbXNbem9vbVt6XV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHp0eXBlID09PSAnb2JqZWN0JyAmJiAoem9vbS5taW4gIT0gbnVsbCB8fCB6b29tLm1heCAhPSBudWxsKSkge1xuICAgICAgICAgICAgICAgIGxldCB6bWluID0gem9vbS5taW4gfHwgMDtcbiAgICAgICAgICAgICAgICBsZXQgem1heCA9IHpvb20ubWF4IHx8IDI1OyAvLyBUT0RPOiByZXBsYWNlIGNvbnN0YW50IGZvciBtYXggcG9zc2libGUgem9vbVxuICAgICAgICAgICAgICAgIGZvciAobGV0IHo9em1pbjsgeiA8IHptYXg7IHorKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvb21zW3pdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlci4kem9vbTsgLy8gZG9uJ3QgcHJvY2VzcyB6b29tIHRocm91Z2ggdXN1YWwgZ2VuZXJpYyBmaWx0ZXIgbG9naWNcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGRyYXc6IHRoaXMuZHJhd1xuICAgICAgICB9O1xuICAgIH1cblxufVxuXG5SdWxlLmlkID0gMDtcblxuXG5leHBvcnQgY2xhc3MgUnVsZUxlYWYgZXh0ZW5kcyBSdWxlIHtcbiAgICBjb25zdHJ1Y3Rvcih7bmFtZSwgcGFyZW50LCBkcmF3LCB2aXNpYmxlLCBmaWx0ZXJ9KSB7XG4gICAgICAgIHN1cGVyKHtuYW1lLCBwYXJlbnQsIGRyYXcsIHZpc2libGUsIGZpbHRlcn0pO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgUnVsZVRyZWUgZXh0ZW5kcyBSdWxlIHtcbiAgICBjb25zdHJ1Y3Rvcih7bmFtZSwgcGFyZW50LCBkcmF3LCB2aXNpYmxlLCBydWxlcywgZmlsdGVyfSkge1xuICAgICAgICBzdXBlcih7bmFtZSwgcGFyZW50LCBkcmF3LCB2aXNpYmxlLCBmaWx0ZXJ9KTtcbiAgICAgICAgdGhpcy5ydWxlcyA9IHJ1bGVzIHx8IFtdO1xuICAgIH1cblxuICAgIGFkZFJ1bGUocnVsZSkge1xuICAgICAgICB0aGlzLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgfVxuXG4gICAgYnVpbGREcmF3R3JvdXBzKGNvbnRleHQpIHtcbiAgICAgICAgbGV0IHJ1bGVzID0gW10sIHJ1bGVfaWRzID0gW107XG4gICAgICAgIC8vVE9ETywgc2hvdWxkIHRoaXMgZnVuY3Rpb24gdGFrZSBhIFJ1bGVUcmVlXG4gICAgICAgIG1hdGNoRmVhdHVyZShjb250ZXh0LCBbdGhpc10sIHJ1bGVzLCBydWxlX2lkcyk7XG5cbiAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBjYWNoZV9rZXkgPSBjYWNoZUtleShydWxlX2lkcyk7XG5cbiAgICAgICAgICAgIC8vIE9ubHkgZXZhbHVhdGUgZWFjaCBydWxlIGNvbWJpbmF0aW9uIG9uY2UgKHVuZGVmaW5lZCBtZWFucyBub3QgeWV0IGV2YWx1YXRlZCxcbiAgICAgICAgICAgIC8vIG51bGwgbWVhbnMgZXZhbHVhdGVkIHdpdGggbm8gZHJhdyBvYmplY3QpXG4gICAgICAgICAgICBpZiAocnVsZUNhY2hlW2NhY2hlX2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIEZpbmQgYWxsIHRoZSB1bmlxdWUgdmlzaWJsZSBkcmF3IGJsb2NrcyBmb3IgdGhpcyBydWxlIHRyZWVcbiAgICAgICAgICAgICAgICBsZXQgZHJhd19ydWxlcyA9IHJ1bGVzLm1hcCh4ID0+IHggJiYgeC52aXNpYmxlICE9PSBmYWxzZSAmJiB4LmNhbGN1bGF0ZWREcmF3KTtcbiAgICAgICAgICAgICAgICBsZXQgZHJhd19rZXlzID0ge307XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCByPTA7IHIgPCBkcmF3X3J1bGVzLmxlbmd0aDsgcisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlID0gZHJhd19ydWxlc1tyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBnPTA7IGcgPCBydWxlLmxlbmd0aDsgZysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXAgPSBydWxlW2ddO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd19rZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGVhY2ggZHJhdyBncm91cFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGRyYXdfa2V5IGluIGRyYXdfa2V5cykge1xuICAgICAgICAgICAgICAgICAgICBydWxlQ2FjaGVbY2FjaGVfa2V5XSA9IHJ1bGVDYWNoZVtjYWNoZV9rZXldIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBydWxlQ2FjaGVbY2FjaGVfa2V5XVtkcmF3X2tleV0gPSBtZXJnZVRyZWVzKGRyYXdfcnVsZXMsIGRyYXdfa2V5KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHNhdmUgdGhlIG9uZXMgdGhhdCB3ZXJlbid0IG51bGxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlQ2FjaGVbY2FjaGVfa2V5XVtkcmF3X2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBydWxlQ2FjaGVbY2FjaGVfa2V5XVtkcmF3X2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlQ2FjaGVbY2FjaGVfa2V5XVtkcmF3X2tleV0ua2V5ID0gY2FjaGVfa2V5ICsgJy8nICsgZHJhd19rZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlQ2FjaGVbY2FjaGVfa2V5XVtkcmF3X2tleV0ubGF5ZXJzID0gcnVsZXMubWFwKHggPT4geCAmJiB4LmZ1bGxfbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBObyBydWxlcyBldmFsdWF0ZWRcbiAgICAgICAgICAgICAgICBpZiAocnVsZUNhY2hlW2NhY2hlX2tleV0gJiYgT2JqZWN0LmtleXMocnVsZUNhY2hlW2NhY2hlX2tleV0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlQ2FjaGVbY2FjaGVfa2V5XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVDYWNoZVtjYWNoZV9rZXldO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmZ1bmN0aW9uIGlzV2hpdGVMaXN0ZWQoa2V5KSB7XG4gICAgcmV0dXJuIHdoaXRlTGlzdC5pbmRleE9mKGtleSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3YWxrVXAocnVsZSwgY2IpIHtcblxuICAgIGlmIChydWxlLnBhcmVudCkge1xuICAgICAgICB3YWxrVXAocnVsZS5wYXJlbnQsIGNiKTtcbiAgICB9XG5cbiAgICBjYihydWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhbGtEb3duKHJ1bGUsIGNiKSB7XG5cbiAgICBpZiAocnVsZS5ydWxlcykge1xuICAgICAgICBydWxlLnJ1bGVzLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgIHdhbGtEb3duKHIsIGNiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2IocnVsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cFByb3BzKG9iaikge1xuICAgIGxldCB3aGl0ZUxpc3RlZCA9IHt9LCBub25XaGl0ZUxpc3RlZCA9IHt9O1xuXG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoaXNXaGl0ZUxpc3RlZChrZXkpKSB7XG4gICAgICAgICAgICB3aGl0ZUxpc3RlZFtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub25XaGl0ZUxpc3RlZFtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFt3aGl0ZUxpc3RlZCwgbm9uV2hpdGVMaXN0ZWRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRHJhdyhydWxlKSB7XG5cbiAgICBsZXQgZHJhdyAgPSBbXTtcblxuICAgIGlmIChydWxlLnBhcmVudCkge1xuICAgICAgICBsZXQgY3MgPSBydWxlLnBhcmVudC5jYWxjdWxhdGVkRHJhdyB8fCBbXTtcbiAgICAgICAgZHJhdy5wdXNoKC4uLmNzKTtcbiAgICB9XG5cbiAgICBkcmF3LnB1c2gocnVsZS5kcmF3KTtcbiAgICByZXR1cm4gZHJhdztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUnVsZVRyZWUobmFtZSwgcnVsZSwgcGFyZW50KSB7XG5cbiAgICBsZXQgcHJvcGVydGllcyA9IHtuYW1lLCBwYXJlbnR9O1xuICAgIGxldCBbd2hpdGVMaXN0ZWQsIG5vbldoaXRlTGlzdGVkXSA9IGdyb3VwUHJvcHMocnVsZSk7XG4gICAgbGV0IGVtcHR5ID0gaXNFbXB0eShub25XaGl0ZUxpc3RlZCk7XG4gICAgbGV0IENyZWF0ZTtcblxuICAgIGlmIChlbXB0eSAmJiBwYXJlbnQgIT0gbnVsbCkge1xuICAgICAgICBDcmVhdGUgPSBSdWxlTGVhZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBDcmVhdGUgPSBSdWxlVHJlZTtcbiAgICB9XG5cbiAgICBsZXQgciA9IG5ldyBDcmVhdGUoT2JqZWN0LmFzc2lnbihwcm9wZXJ0aWVzLCB3aGl0ZUxpc3RlZCkpO1xuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICBwYXJlbnQuYWRkUnVsZShyKTtcbiAgICB9XG5cbiAgICBpZiAoIWVtcHR5KSB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBub25XaGl0ZUxpc3RlZCkge1xuICAgICAgICAgICAgbGV0IHByb3BlcnR5ID0gbm9uV2hpdGVMaXN0ZWRba2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIHBhcnNlUnVsZVRyZWUoa2V5LCBwcm9wZXJ0eSwgcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEludmFsaWQgbGF5ZXJcbiAgICAgICAgICAgICAgICBsZXQgbXNnID0gYExheWVyIHZhbHVlIG11c3QgYmUgYW4gb2JqZWN0OiBjYW4ndCBjcmVhdGUgbGF5ZXIgJyR7a2V5fTogJHtKU09OLnN0cmluZ2lmeShwcm9wZXJ0eSl9J2A7XG4gICAgICAgICAgICAgICAgbXNnICs9IGAsIHVuZGVyIHBhcmVudCBsYXllciAnJHtyLmZ1bGxfbmFtZX0nLmA7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIGEgc3R5bGUgbmFtZSwgdGhpcyBtYXkgYmUgYW4gaW5jb3JyZWN0bHkgbmVzdGVkIGxheWVyXG4gICAgICAgICAgICAgICAgaWYgKFN0eWxlc1tyLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZyArPSBgIFRoZSBwYXJlbnQgJyR7ci5uYW1lfScgaXMgYWxzbyB0aGUgbmFtZSBvZiBhIHN0eWxlLCBkaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgJ2RyYXcnIGdyb3VwYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9IGAgdW5kZXIgJyR7cGFyZW50Lm5hbWV9J2A7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbXNnICs9IGAgaW5zdGVhZD9gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2cud2Fybihtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSdWxlcyhydWxlcykge1xuICAgIGxldCBydWxlVHJlZXMgPSB7fTtcblxuICAgIGZvciAobGV0IGtleSBpbiBydWxlcykge1xuICAgICAgICBsZXQgcnVsZSA9IHJ1bGVzW2tleV07XG4gICAgICAgIGlmIChydWxlKSB7XG4gICAgICAgICAgICBydWxlVHJlZXNba2V5XSA9IHBhcnNlUnVsZVRyZWUoa2V5LCBydWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBydWxlVHJlZXM7XG59XG5cblxuZnVuY3Rpb24gZG9lc01hdGNoKHJ1bGUsIGNvbnRleHQpIHtcbiAgICAvLyB6b29tIHByZS1maWx0ZXI6IHNraXAgcmVzdCBvZiBmaWx0ZXIgaWYgb3V0IG9mIHJ1bGUgem9vbSByYW5nZVxuICAgIGlmIChydWxlLnpvb21zICE9IG51bGwgJiYgIXJ1bGUuem9vbXNbY29udGV4dC56b29tXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICgodHlwZW9mIHJ1bGUuZmlsdGVyID09PSAnZnVuY3Rpb24nICYmIHJ1bGUuZmlsdGVyKGNvbnRleHQpKSB8fCAocnVsZS5maWx0ZXIgPT0gbnVsbCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hGZWF0dXJlKGNvbnRleHQsIHJ1bGVzLCBjb2xsZWN0ZWRSdWxlcywgY29sbGVjdGVkUnVsZXNJZHMpIHtcbiAgICBsZXQgbWF0Y2hlZCA9IGZhbHNlO1xuICAgIGxldCBjaGlsZE1hdGNoZWQgPSBmYWxzZTtcblxuICAgIGlmIChydWxlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICBmb3IgKGxldCByPTA7IHIgPCBydWxlcy5sZW5ndGg7IHIrKykge1xuICAgICAgICBsZXQgY3VycmVudCA9IHJ1bGVzW3JdO1xuXG4gICAgICAgIGlmIChjdXJyZW50IGluc3RhbmNlb2YgUnVsZUxlYWYpIHtcblxuICAgICAgICAgICAgaWYgKGRvZXNNYXRjaChjdXJyZW50LCBjb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbGxlY3RlZFJ1bGVzLnB1c2goY3VycmVudCk7XG4gICAgICAgICAgICAgICAgY29sbGVjdGVkUnVsZXNJZHMucHVzaChjdXJyZW50LmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgaW5zdGFuY2VvZiBSdWxlVHJlZSkge1xuICAgICAgICAgICAgaWYgKGRvZXNNYXRjaChjdXJyZW50LCBjb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY2hpbGRNYXRjaGVkID0gbWF0Y2hGZWF0dXJlKFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnJ1bGVzLFxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0ZWRSdWxlcyxcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkUnVsZXNJZHNcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZE1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkUnVsZXMucHVzaChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkUnVsZXNJZHMucHVzaChjdXJyZW50LmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlZDtcbn1cbiIsIi8vIFJlbmRlcmluZyBzdHlsZXNcblxuaW1wb3J0IHtTdHlsZVBhcnNlcn0gZnJvbSAnLi9zdHlsZV9wYXJzZXInO1xuaW1wb3J0IEZlYXR1cmVTZWxlY3Rpb24gZnJvbSAnLi4vc2VsZWN0aW9uJztcbmltcG9ydCBTaGFkZXJQcm9ncmFtIGZyb20gJy4uL2dsL3NoYWRlcl9wcm9ncmFtJztcbmltcG9ydCBWQk9NZXNoIGZyb20gJy4uL2dsL3Zib19tZXNoJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL2dsL3RleHR1cmUnO1xuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL21hdGVyaWFsJztcbmltcG9ydCBMaWdodCBmcm9tICcuLi9saWdodCc7XG5pbXBvcnQge1Jhc3RlclRpbGVTb3VyY2V9IGZyb20gJy4uL3NvdXJjZXMvcmFzdGVyJztcbmltcG9ydCBzaGFkZXJTb3VyY2VzIGZyb20gJy4uL2dsL3NoYWRlcl9zb3VyY2VzJzsgLy8gYnVpbHQtaW4gc2hhZGVyc1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCBXb3JrZXJCcm9rZXIgZnJvbSAnLi4vdXRpbHMvd29ya2VyX2Jyb2tlcic7XG5cbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG4vLyBCYXNlIGNsYXNzXG5cbmV4cG9ydCB2YXIgU3R5bGUgPSB7XG4gICAgaW5pdCAoeyBnZW5lcmF0aW9uLCBzb3VyY2VzID0ge30gfSA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0J1aWx0SW4oKSkge1xuICAgICAgICAgICAgdGhpcy5idWlsdF9pbiA9IGZhbHNlOyAvLyBleHBsaWNpdGx5IHNldCB0byBmYWxzZSB0byBhdm9pZCBhbnkgY29uZnVzaW9uXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOyAgICAgICAgICAgICAgIC8vIHNjZW5lIGdlbmVyYXRpb24gaWQgdGhpcyBzdHlsZSB3YXMgY3JlYXRlZCBmb3JcbiAgICAgICAgdGhpcy5zb3VyY2VzID0gc291cmNlczsgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIHNvdXJjZXMgZm9yIHNjZW5lXG4gICAgICAgIHRoaXMuZGVmaW5lcyA9ICh0aGlzLmhhc093blByb3BlcnR5KCdkZWZpbmVzJykgJiYgdGhpcy5kZWZpbmVzKSB8fCB7fTsgLy8gI2RlZmluZXMgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgc2hhZGVyc1xuICAgICAgICB0aGlzLnNoYWRlcnMgPSAodGhpcy5oYXNPd25Qcm9wZXJ0eSgnc2hhZGVycycpICYmIHRoaXMuc2hhZGVycykgfHwge307IC8vIHNoYWRlciBjdXN0b21pemF0aW9uICh1bmlmb3JtcywgZGVmaW5lcywgYmxvY2tzLCBldGMuKVxuICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uIHx8IGZhbHNlOyAgIC8vIGZsYWcgaW5kaWNhdGluZyBpZiB0aGlzIHN0eWxlIHN1cHBvcnRzIGZlYXR1cmUgc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuY29tcGlsaW5nID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgLy8gcHJvZ3JhbXMgYXJlIGN1cnJlbnRseSBjb21waWxpbmdcbiAgICAgICAgdGhpcy5jb21waWxlZCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9ncmFtcyBhcmUgZmluaXNoZWQgY29tcGlsaW5nXG4gICAgICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gR0wgcHJvZ3JhbSByZWZlcmVuY2UgKGZvciBtYWluIHJlbmRlciBwYXNzKVxuICAgICAgICB0aGlzLnNlbGVjdGlvbl9wcm9ncmFtID0gbnVsbDsgICAgICAgICAgICAgIC8vIEdMIHByb2dyYW0gcmVmZXJlbmNlIGZvciBmZWF0dXJlIHNlbGVjdGlvbiByZW5kZXIgcGFzc1xuICAgICAgICB0aGlzLmZlYXR1cmVfc3R5bGUgPSB7fTsgICAgICAgICAgICAgICAgICAgIC8vIHN0eWxlIGZvciBmZWF0dXJlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQsIHNoYXJlZCB0byBsZXNzZW4gR0MvbWVtb3J5IHRocmFzaFxuICAgICAgICB0aGlzLnZlcnRleF90ZW1wbGF0ZSA9IFtdOyAgICAgICAgICAgICAgICAgIC8vIHNoYXJlZCBzaW5nbGUtdmVydGV4IHRlbXBsYXRlLCBmaWxsZWQgb3V0IGJ5IGVhY2ggc3R5bGVcbiAgICAgICAgdGhpcy50aWxlX2RhdGEgPSB7fTtcblxuICAgICAgICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdGhpcyBvYmplY3QgdG8gYmUgY2FsbGVkIGZyb20gd29ya2VyIHRocmVhZHNcbiAgICAgICAgdGhpcy5tYWluX3RocmVhZF90YXJnZXQgPSAnU3R5bGUtJyArIHRoaXMubmFtZTtcbiAgICAgICAgaWYgKFV0aWxzLmlzTWFpblRocmVhZCkge1xuICAgICAgICAgICAgV29ya2VyQnJva2VyLmFkZFRhcmdldCh0aGlzLm1haW5fdGhyZWFkX3RhcmdldCwgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHdvcmxkIGNvb3JkcyB0byB3cmFwIGV2ZXJ5IDEwMCwwMDAgbWV0ZXJzLCBjYW4gdHVybiBvZmYgYnkgc2V0dGluZyB0aGlzIHRvICdmYWxzZSdcbiAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fV09STERfUE9TSVRJT05fV1JBUCA9IDEwMDAwMDtcblxuICAgICAgICAvLyBCbGVuZGluZ1xuICAgICAgICB0aGlzLmJsZW5kID0gdGhpcy5ibGVuZCB8fCAnb3BhcXVlJzsgICAgICAgIC8vIGRlZmF1bHQ6IG9wYXF1ZSBzdHlsZXMgYXJlIGRyYXduIGZpcnN0LCB3aXRob3V0IGJsZW5kaW5nXG4gICAgICAgIHRoaXMuZGVmaW5lc1tgVEFOR1JBTV9CTEVORF8ke3RoaXMuYmxlbmQudG9VcHBlckNhc2UoKX1gXSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmJsZW5kX29yZGVyID09IG51bGwpIHsgLy8gY29udHJvbHMgb3JkZXIgb2YgcmVuZGVyaW5nIGZvciBzdHlsZXMgdy9ub24tb3BhcXVlIGJsZW5kaW5nXG4gICAgICAgICAgICB0aGlzLmJsZW5kX29yZGVyID0gLTE7IC8vIGRlZmF1bHRzIHRvIGZpcnN0XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgc3R5bGUgZGVmaW5lcyBpdHMgb3duIG1hdGVyaWFsLCByZXBsYWNlIHRoZSBpbmhlcml0ZWQgbWF0ZXJpYWwgaW5zdGFuY2VcbiAgICAgICAgaWYgKCEodGhpcy5tYXRlcmlhbCBpbnN0YW5jZW9mIE1hdGVyaWFsKSkge1xuICAgICAgICAgICAgaWYgKCFNYXRlcmlhbC5pc1ZhbGlkKHRoaXMubWF0ZXJpYWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbCA9IFN0eWxlUGFyc2VyLmRlZmF1bHRzLm1hdGVyaWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh0aGlzLm1hdGVyaWFsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hdGVyaWFsLmluamVjdCh0aGlzKTtcblxuICAgICAgICAvLyBTZXQgbGlnaHRpbmcgbW9kZTogZnJhZ21lbnQsIHZlcnRleCwgb3Igbm9uZSAoc3BlY2lmaWVkIGFzICdmYWxzZScpXG4gICAgICAgIExpZ2h0LnNldE1vZGUodGhpcy5saWdodGluZywgdGhpcyk7XG5cbiAgICAgICAgLy8gU2V0dXAgcmFzdGVyIHNhbXBsZXJzIGlmIG5lZWRlZFxuICAgICAgICB0aGlzLnNldHVwUmFzdGVycygpO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH0sXG5cbiAgICBkZXN0cm95ICgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvZ3JhbSkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25fcHJvZ3JhbSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fcHJvZ3JhbS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9wcm9ncmFtID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgfSxcblxuICAgIHJlc2V0ICgpIHtcbiAgICB9LFxuXG4gICAgaXNCdWlsdEluICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoJ2J1aWx0X2luJykgJiYgdGhpcy5idWlsdF9pbjtcbiAgICB9LFxuXG4gICAgZmlsbFZlcnRleFRlbXBsYXRlKGF0dHJpYnV0ZSwgdmFsdWUsIHsgc2l6ZSwgb2Zmc2V0IH0pIHtcbiAgICAgICAgb2Zmc2V0ID0gKG9mZnNldCA9PT0gdW5kZWZpbmVkKSA/IDAgOiBvZmZzZXQ7XG5cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy52ZXJ0ZXhfbGF5b3V0LmluZGV4W2F0dHJpYnV0ZV07XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2cud2FybihgU3R5bGU6IGluIHN0eWxlICcke3RoaXMubmFtZX0nLCBubyBpbmRleCBmb3VuZCBpbiB2ZXJ0ZXggbGF5b3V0IGZvciBhdHRyaWJ1dGUgJyR7YXR0cmlidXRlfSdgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICAgICAgICBsZXQgdiA9IHZhbHVlLmxlbmd0aCA+IGkgPyB2YWx1ZVtpXSA6IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhfdGVtcGxhdGVbaW5kZXggKyBpICsgb2Zmc2V0XSA9IHY7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqKiBTdHlsZSBwYXJzaW5nIGFuZCBnZW9tZXRyeSBjb25zdHJ1Y3Rpb24gKioqL1xuXG4gICAgLy8gUmV0dXJucyBhbiBvYmplY3QgdG8gaG9sZCBmZWF0dXJlIGRhdGEgKGZvciBhIHRpbGUgb3Igb3RoZXIgb2JqZWN0KVxuICAgIHN0YXJ0RGF0YSAodGlsZSkge1xuICAgICAgICB0aGlzLnRpbGVfZGF0YVt0aWxlLmtleV0gPSB7XG4gICAgICAgICAgICB2ZXJ0ZXhfZGF0YTogbnVsbCxcbiAgICAgICAgICAgIHVuaWZvcm1zOiB7fSxcbiAgICAgICAgICAgIHRleHR1cmVzOiBbXVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy50aWxlX2RhdGFbdGlsZS5rZXldO1xuICAgIH0sXG5cbiAgICAvLyBGaW5hbGl6ZXMgYW4gb2JqZWN0IGhvbGRpbmcgZmVhdHVyZSBkYXRhIChmb3IgYSB0aWxlIG9yIG90aGVyIG9iamVjdClcbiAgICBlbmREYXRhICh0aWxlKSB7XG4gICAgICAgIHZhciB0aWxlX2RhdGEgPSB0aGlzLnRpbGVfZGF0YVt0aWxlLmtleV07XG4gICAgICAgIHRoaXMudGlsZV9kYXRhW3RpbGUua2V5XSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRpbGVfZGF0YSAmJiB0aWxlX2RhdGEudmVydGV4X2RhdGEgJiYgdGlsZV9kYXRhLnZlcnRleF9kYXRhLnZlcnRleF9jb3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIE9ubHkga2VlcCBmaW5hbCBieXRlIGJ1ZmZlclxuICAgICAgICAgICAgdGlsZV9kYXRhLnZlcnRleF9kYXRhLmVuZCgpO1xuICAgICAgICAgICAgdGlsZV9kYXRhLnZlcnRleF9kYXRhID0gdGlsZV9kYXRhLnZlcnRleF9kYXRhLmJ1ZmZlcjtcblxuICAgICAgICAgICAgLy8gTG9hZCByYXN0ZXIgdGlsZXMgcGFzc2VkIGZyb20gZGF0YSBzb3VyY2VcbiAgICAgICAgICAgIC8vIEJsb2NrcyBtZXNoIGNvbXBsZXRpb24gdG8gYXZvaWQgZmxpY2tlcmluZ1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRSYXN0ZXJUZXh0dXJlcyh0aWxlLCB0aWxlX2RhdGEpLnRoZW4oKCkgPT4gdGlsZV9kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7IC8vIGRvbid0IHNlbmQgdGlsZSBkYXRhIGJhY2sgaWYgZG9lc24ndCBoYXZlIGdlb21ldHJ5XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gSGFzIG1lc2ggZGF0YSBmb3IgYSBnaXZlbiB0aWxlP1xuICAgIGhhc0RhdGFGb3JUaWxlICh0aWxlX2tleSkge1xuICAgICAgICByZXR1cm4gdGhpcy50aWxlX2RhdGFbdGlsZV9rZXldICE9IG51bGw7XG4gICAgfSxcblxuICAgIGFkZEZlYXR1cmUgKGZlYXR1cmUsIHJ1bGUsIGNvbnRleHQpIHtcbiAgICAgICAgbGV0IHRpbGUgPSBjb250ZXh0LnRpbGU7XG4gICAgICAgIGlmICh0aWxlLmdlbmVyYXRpb24gIT09IHRoaXMuZ2VuZXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRpbGVfZGF0YVt0aWxlLmtleV0pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRhKHRpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0eWxlID0gdGhpcy5wYXJzZUZlYXR1cmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gYWxsb3cgc3ViY2xhc3NlcyB0byBwYXNzIGV4dHJhIGFyZ3NcblxuICAgICAgICAvLyBTa2lwIGZlYXR1cmU/XG4gICAgICAgIGlmICghc3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0IGZlYXR1cmUgaW4gdGhpcyByZW5kZXIgc3R5bGU/XG4gICAgICAgIGlmICghdGhpcy50aWxlX2RhdGFbdGlsZS5rZXldLnZlcnRleF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnRpbGVfZGF0YVt0aWxlLmtleV0udmVydGV4X2RhdGEgPSB0aGlzLnZlcnRleF9sYXlvdXQuY3JlYXRlVmVydGV4RGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZEdlb21ldHJ5KGZlYXR1cmUuZ2VvbWV0cnksIHN0eWxlLCB0aGlzLnRpbGVfZGF0YVt0aWxlLmtleV0udmVydGV4X2RhdGEsIGNvbnRleHQpO1xuICAgIH0sXG5cbiAgICBidWlsZEdlb21ldHJ5IChnZW9tZXRyeSwgc3R5bGUsIHZlcnRleF9kYXRhLCBjb250ZXh0KSB7XG4gICAgICAgIGlmIChnZW9tZXRyeS50eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRQb2x5Z29ucyhbZ2VvbWV0cnkuY29vcmRpbmF0ZXNdLCBzdHlsZSwgdmVydGV4X2RhdGEsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGdlb21ldHJ5LnR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkUG9seWdvbnMoZ2VvbWV0cnkuY29vcmRpbmF0ZXMsIHN0eWxlLCB2ZXJ0ZXhfZGF0YSwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkTGluZXMoW2dlb21ldHJ5LmNvb3JkaW5hdGVzXSwgc3R5bGUsIHZlcnRleF9kYXRhLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5idWlsZExpbmVzKGdlb21ldHJ5LmNvb3JkaW5hdGVzLCBzdHlsZSwgdmVydGV4X2RhdGEsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGdlb21ldHJ5LnR5cGUgPT09ICdQb2ludCcpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRQb2ludHMoW2dlb21ldHJ5LmNvb3JkaW5hdGVzXSwgc3R5bGUsIHZlcnRleF9kYXRhLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRQb2ludHMoZ2VvbWV0cnkuY29vcmRpbmF0ZXMsIHN0eWxlLCB2ZXJ0ZXhfZGF0YSwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyc2VGZWF0dXJlIChmZWF0dXJlLCBydWxlX3N0eWxlLCBjb250ZXh0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmZlYXR1cmVfc3R5bGU7XG5cbiAgICAgICAgICAgIHJ1bGVfc3R5bGUgPSB0aGlzLnByZXByb2Nlc3MocnVsZV9zdHlsZSk7XG4gICAgICAgICAgICBpZiAoIXJ1bGVfc3R5bGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBvcmRlciBpZiBpdCB3YXMgbm90IGNhY2hlZFxuICAgICAgICAgICAgc3R5bGUub3JkZXIgPSB0aGlzLnBhcnNlT3JkZXIocnVsZV9zdHlsZS5vcmRlciwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIC8vIEZlYXR1cmUgc2VsZWN0aW9uIChvbmx5IGlmIHN0eWxlIHN1cHBvcnRzIGl0KVxuICAgICAgICAgICAgdmFyIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmludGVyYWN0aXZlID0gcnVsZV9zdHlsZS5pbnRlcmFjdGl2ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSBTdHlsZVBhcnNlci5ldmFsUHJvcChzdHlsZS5pbnRlcmFjdGl2ZSwgY29udGV4dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIGZlYXR1cmUgaXMgbWFya2VkIGFzIHNlbGVjdGFibGVcbiAgICAgICAgICAgIGlmIChzZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc2VsZWN0aW9uX2NvbG9yID0gRmVhdHVyZVNlbGVjdGlvbi5tYWtlQ29sb3IoZmVhdHVyZSwgY29udGV4dC50aWxlLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0eWxlLnNlbGVjdGlvbl9jb2xvciA9IEZlYXR1cmVTZWxlY3Rpb24uZGVmYXVsdENvbG9yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTdWJjbGFzcyBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgc3R5bGUgPSB0aGlzLl9wYXJzZUZlYXR1cmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gYWxsb3cgc3ViY2xhc3NlcyB0byBwYXNzIGV4dHJhIGFyZ3NcblxuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1N0eWxlLnBhcnNlRmVhdHVyZTogc3R5bGUgcGFyc2luZyBlcnJvcicsIGZlYXR1cmUsIHN0eWxlLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3BhcnNlRmVhdHVyZSAoZmVhdHVyZSwgcnVsZV9zdHlsZSwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlX3N0eWxlO1xuICAgIH0sXG5cbiAgICBwcmVwcm9jZXNzIChydWxlX3N0eWxlKSB7XG4gICAgICAgIC8vIFByZXByb2Nlc3MgZmlyc3QgdGltZVxuICAgICAgICBpZiAoIXJ1bGVfc3R5bGUucHJlcHJvY2Vzc2VkKSB7XG4gICAgICAgICAgICBydWxlX3N0eWxlID0gdGhpcy5fcHJlcHJvY2VzcyhydWxlX3N0eWxlKTsgLy8gb3B0aW9uYWwgc3ViY2xhc3MgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgIGlmICghcnVsZV9zdHlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bGVfc3R5bGUucHJlcHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnVsZV9zdHlsZTtcbiAgICB9LFxuXG4gICAgLy8gb3B0aW9uYWxseSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc1xuICAgIF9wcmVwcm9jZXNzIChydWxlX3N0eWxlKSB7XG4gICAgICAgIHJldHVybiBydWxlX3N0eWxlO1xuICAgIH0sXG5cbiAgICAvLyBQYXJzZSBhbiBvcmRlciB2YWx1ZVxuICAgIHBhcnNlT3JkZXIgKG9yZGVyLCBjb250ZXh0KSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBvcmRlciBpZiBpdCB3YXMgbm90IGNhY2hlZFxuICAgICAgICBpZiAodHlwZW9mIG9yZGVyICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIFN0eWxlUGFyc2VyLmNhbGN1bGF0ZU9yZGVyKG9yZGVyLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3JkZXI7XG4gICAgfSxcblxuICAgIC8vIEV4cGFuZCBmaW5hbCBwcmVjaXNpb24gZm9yIGhhbGYtbGF5ZXJzIChmb3Igb3V0bGluZXMpXG4gICAgc2NhbGVPcmRlciAob3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIG9yZGVyICogMjtcbiAgICB9LFxuXG4gICAgLy8gUGFyc2UgYSBjb2xvciBvZiBjaG9vc2UgYSBkZWZhdWx0IGlmIGFjY2VwdGFibGUsIHJldHVybiB1bmRlZmluZWQgaWYgY29sb3IgbWlzc2luZ1xuICAgIHBhcnNlQ29sb3IoY29sb3IsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gTmVlZCBlaXRoZXIgYSBjb2xvciwgb3IgYSBzaGFkZXIgYmxvY2sgZm9yICdjb2xvcicgb3IgJ2ZpbHRlcidcbiAgICAgICAgaWYgKGNvbG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gU3R5bGVQYXJzZXIuY2FjaGVDb2xvcihjb2xvciwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5zaGFkZXJzLmJsb2Nrcy5jb2xvciB8fCB0aGlzLnNoYWRlcnMuYmxvY2tzLmZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIFN0eWxlUGFyc2VyLmRlZmF1bHRzLmNvbG9yO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIEJ1aWxkIGZ1bmN0aW9ucyBhcmUgbm8tb3BzIHVudGlsIG92ZXJyaWRlblxuICAgIGJ1aWxkUG9seWdvbnMgKCkge30sXG4gICAgYnVpbGRMaW5lcyAoKSB7fSxcbiAgICBidWlsZFBvaW50cyAoKSB7fSxcblxuXG4gICAgLyoqKiBHTCBzdGF0ZSBhbmQgcmVuZGVyaW5nICoqKi9cblxuICAgIHNldEdMIChnbCkge1xuICAgICAgICB0aGlzLmdsID0gZ2w7XG4gICAgICAgIHRoaXMubWF4X3RleHR1cmVfc2l6ZSA9IFRleHR1cmUuZ2V0TWF4VGV4dHVyZVNpemUodGhpcy5nbCk7XG4gICAgfSxcblxuICAgIG1ha2VNZXNoICh2ZXJ0ZXhfZGF0YSwgeyB1bmlmb3JtcyB9ID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWQk9NZXNoKHRoaXMuZ2wsIHZlcnRleF9kYXRhLCB0aGlzLnZlcnRleF9sYXlvdXQsIHsgdW5pZm9ybXMgfSk7XG4gICAgfSxcblxuICAgIGNvbXBpbGUgKCkge1xuICAgICAgICBpZiAoIXRoaXMuZ2wpIHtcbiAgICAgICAgICAgIHRocm93KG5ldyBFcnJvcihgc3R5bGUuY29tcGlsZSgpOiBza2lwcGluZyBmb3IgJHt0aGlzLm5hbWV9IGJlY2F1c2Ugbm8gR0wgY29udGV4dGApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbXBpbGluZykge1xuICAgICAgICAgICAgdGhyb3cobmV3IEVycm9yKGBzdHlsZS5jb21waWxlKCk6IHNraXBwaW5nIGZvciAke3RoaXMubmFtZX0gYmVjYXVzZSBzdHlsZSBpcyBhbHJlYWR5IGNvbXBpbGluZ2ApKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBpbGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuY29tcGlsZWQgPSBmYWxzZTtcblxuICAgICAgICAvLyBCdWlsZCBkZWZpbmVzICYgZm9yIHNlbGVjdGlvbiAobmVlZCB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHNpbmNlIHRoZSBmaXJzdCBpcyBzdG9yZWQgYXMgYSByZWZlcmVuY2UgYnkgdGhlIHByb2dyYW0pXG4gICAgICAgIHZhciBkZWZpbmVzID0gdGhpcy5idWlsZERlZmluZUxpc3QoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uX2RlZmluZXMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZpbmVzKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbl9kZWZpbmVzLlRBTkdSQU1fRkVBVFVSRV9TRUxFQ1RJT04gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGFueSBjdXN0b20gY29kZSBibG9ja3MsIHVuaWZvcm0gZGVwZW5kZW5jaWVzLCBldGMuXG4gICAgICAgIHZhciBibG9ja3MgPSAodGhpcy5zaGFkZXJzICYmIHRoaXMuc2hhZGVycy5ibG9ja3MpO1xuICAgICAgICB2YXIgYmxvY2tfc2NvcGVzID0gKHRoaXMuc2hhZGVycyAmJiB0aGlzLnNoYWRlcnMuYmxvY2tfc2NvcGVzKTtcbiAgICAgICAgdmFyIHVuaWZvcm1zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zaGFkZXJzICYmIHRoaXMuc2hhZGVycy51bmlmb3Jtcyk7XG5cbiAgICAgICAgLy8gQWNjZXB0IGEgc2luZ2xlIGV4dGVuc2lvbiwgb3IgYW4gYXJyYXkgb2YgZXh0ZW5zaW9uc1xuICAgICAgICB2YXIgZXh0ZW5zaW9ucyA9ICh0aGlzLnNoYWRlcnMgJiYgdGhpcy5zaGFkZXJzLmV4dGVuc2lvbnMpO1xuICAgICAgICBpZiAodHlwZW9mIGV4dGVuc2lvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBleHRlbnNpb25zID0gW2V4dGVuc2lvbnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHNoYWRlcnNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBTaGFkZXJQcm9ncmFtKFxuICAgICAgICAgICAgICAgIHRoaXMuZ2wsXG4gICAgICAgICAgICAgICAgc2hhZGVyU291cmNlc1t0aGlzLnZlcnRleF9zaGFkZXJfa2V5XSxcbiAgICAgICAgICAgICAgICBzaGFkZXJTb3VyY2VzW3RoaXMuZnJhZ21lbnRfc2hhZGVyX2tleV0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXMsXG4gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLFxuICAgICAgICAgICAgICAgICAgICBibG9ja3MsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrX3Njb3BlcyxcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW0uY29tcGlsZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9wcm9ncmFtID0gbmV3IFNoYWRlclByb2dyYW0oXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2wsXG4gICAgICAgICAgICAgICAgICAgIHNoYWRlclNvdXJjZXNbdGhpcy52ZXJ0ZXhfc2hhZGVyX2tleV0sXG4gICAgICAgICAgICAgICAgICAgIHNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvc2VsZWN0aW9uX2ZyYWdtZW50J10sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICh0aGlzLm5hbWUgKyAnIChzZWxlY3Rpb24pJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzOiBzZWxlY3Rpb25fZGVmaW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfc2NvcGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9wcm9ncmFtLmNvbXBpbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX3Byb2dyYW0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhyb3cobmV3IEVycm9yKGBzdHlsZS5jb21waWxlKCk6IHN0eWxlICR7dGhpcy5uYW1lfSBlcnJvcjpgLCBlcnJvcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21waWxpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21waWxlZCA9IHRydWU7XG4gICAgfSxcblxuICAgIC8vIEFkZCBhIHNoYWRlciBibG9ja1xuICAgIGFkZFNoYWRlckJsb2NrIChrZXksIGJsb2NrLCBzY29wZSA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5zaGFkZXJzLmJsb2NrcyA9IHRoaXMuc2hhZGVycy5ibG9ja3MgfHwge307XG4gICAgICAgIHRoaXMuc2hhZGVycy5ibG9ja3Nba2V5XSA9IHRoaXMuc2hhZGVycy5ibG9ja3Nba2V5XSB8fCBbXTtcbiAgICAgICAgdGhpcy5zaGFkZXJzLmJsb2Nrc1trZXldLnB1c2goYmxvY2spO1xuXG4gICAgICAgIHRoaXMuc2hhZGVycy5ibG9ja19zY29wZXMgPSB0aGlzLnNoYWRlcnMuYmxvY2tfc2NvcGVzIHx8IHt9O1xuICAgICAgICB0aGlzLnNoYWRlcnMuYmxvY2tfc2NvcGVzW2tleV0gPSB0aGlzLnNoYWRlcnMuYmxvY2tfc2NvcGVzW2tleV0gfHwgW107XG4gICAgICAgIHRoaXMuc2hhZGVycy5ibG9ja19zY29wZXNba2V5XS5wdXNoKHNjb3BlKTtcbiAgICB9LFxuXG4gICAgLy8gUmVtb3ZlIGFsbCBzaGFkZXIgYmxvY2tzIGZvciBrZXlcbiAgICByZW1vdmVTaGFkZXJCbG9jayAoa2V5KSB7XG4gICAgICAgIGlmICh0aGlzLnNoYWRlcnMuYmxvY2tzKSB7XG4gICAgICAgICAgICB0aGlzLnNoYWRlcnMuYmxvY2tzW2tleV0gPSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VTaGFkZXJCbG9jayAoa2V5LCBibG9jaywgc2NvcGUgPSBudWxsKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlU2hhZGVyQmxvY2soa2V5KTtcbiAgICAgICAgdGhpcy5hZGRTaGFkZXJCbG9jayhrZXksIGJsb2NrLCBzY29wZSk7XG4gICAgfSxcblxuICAgIC8qKiBUT0RPOiBjb3VsZCBwcm9iYWJseSBjb21iaW5lIGFuZCBnZW5lcmFsaXplIHRoaXMgd2l0aCBzaW1pbGFyIG1ldGhvZCBpbiBTaGFkZXJQcm9ncmFtXG4gICAgICogKGxpc3Qgb2YgZGVmaW5lIG9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gZWFjaCBvdGhlcilcbiAgICAgKi9cbiAgICBidWlsZERlZmluZUxpc3QgKCkge1xuICAgICAgICAvLyBBZGQgYW55IGN1c3RvbSBkZWZpbmVzIHRvIGJ1aWx0LWluIHN0eWxlIGRlZmluZXNcbiAgICAgICAgdmFyIGRlZmluZXMgPSB7fTsgLy8gY3JlYXRlIGEgbmV3IG9iamVjdCB0byBhdm9pZCBtdXRhdGluZyBhIHByb3RvdHlwZSB2YWx1ZSB0aGF0IG1heSBiZSBzaGFyZWQgd2l0aCBvdGhlciBzdHlsZXNcbiAgICAgICAgaWYgKHRoaXMuZGVmaW5lcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBkIGluIHRoaXMuZGVmaW5lcykge1xuICAgICAgICAgICAgICAgIGRlZmluZXNbZF0gPSB0aGlzLmRlZmluZXNbZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hhZGVycyAhPSBudWxsICYmIHRoaXMuc2hhZGVycy5kZWZpbmVzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAoZCBpbiB0aGlzLnNoYWRlcnMuZGVmaW5lcykge1xuICAgICAgICAgICAgICAgIGRlZmluZXNbZF0gPSB0aGlzLnNoYWRlcnMuZGVmaW5lc1tkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmaW5lcztcblxuICAgIH0sXG5cbiAgICAvLyBEZXRlcm1pbmVzIGlmICdyYXN0ZXInIHBhcmFtZXRlciBpcyBzZXQgdG8gYSB2YWxpZCB2YWx1ZVxuICAgIGhhc1Jhc3RlcnMgKCkge1xuICAgICAgICByZXR1cm4gKFsnY29sb3InLCAnbm9ybWFsJywgJ2N1c3RvbSddLmluZGV4T2YodGhpcy5yYXN0ZXIpID4gLTEpO1xuICAgIH0sXG5cbiAgICAvLyBTZXR1cCByYXN0ZXIgYWNjZXNzIGluIHNoYWRlcnNcbiAgICBzZXR1cFJhc3RlcnMgKCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUmFzdGVycygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbmFibGUgcmFzdGVyIHRleHR1cmVzIGFuZCBjb25maWd1cmUgaG93IGZpcnN0IHJhc3RlciBpcyBhcHBsaWVkXG4gICAgICAgIGlmICh0aGlzLnJhc3RlciA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fUkFTVEVSX1RFWFRVUkVfQ09MT1IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucmFzdGVyID09PSAnbm9ybWFsJykge1xuICAgICAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fUkFTVEVSX1RFWFRVUkVfTk9STUFMID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIGN1c3RvbSByYXN0ZXIgKHNhbXBsZXJzIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgYnV0IG5vdCBhdXRvbWF0aWNhbGx5IGFwcGxpZWQpXG5cbiAgICAgICAgLy8gQSBnaXZlbiBzdHlsZSBtYXkgYmUgYnVpbHQgd2l0aCBtdWx0aXBsZSBkYXRhIHNvdXJjZXMsIGVhY2ggb2Ygd2hpY2ggbWF5IGF0dGFjaFxuICAgICAgICAvLyBhIHZhcmlhYmxlIG51bWJlciBvZiByYXN0ZXIgc291cmNlcyAoMCB0byBOLCB3aGVyZSBOIGlzIHRoZSBtYXggbnVtYmVyIG9mIHJhc3RlciBzb3VyY2VzXG4gICAgICAgIC8vIGRlZmluZWQgZm9yIHRoZSBzY2VuZSkuIFRoaXMgbWVhbnMgd2UgZG9uJ3Qga25vdyAqd2hpY2gqIG9yICpob3cgbWFueSogcmFzdGVycyB3aWxsIGJlXG4gICAgICAgIC8vIGJvdW5kIG5vdywgYXQgaW5pdGlhbCBjb21waWxlLXRpbWU7IHdlIG9ubHkga25vdyB0aGlzIGF0IGdlb21ldHJ5IGJ1aWxkLXRpbWUuIFRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IHdlIGNhbiBiaW5kIGFzIG1hbnkgcmFzdGVyIHNvdXJjZXMgYXMgbmVlZGVkLCB3ZSBkZWNsYXJlIG91ciB1bmlmb3JtIGFycmF5cyB0byBob2xkXG4gICAgICAgIC8vIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb3NzaWJsZSBzb3VyY2VzLiBBdCByZW5kZXIgdGltZSwgb25seSB0aGUgbmVjZXNzYXJ5IG51bWJlciBvZiByYXN0ZXJzXG4gICAgICAgIC8vIGFyZSBib3VuZCAodGhlIHJlbWFpbmluZyBzbG90cyBhcmVuJ3QgaW50ZW5kZWQgdG8gYmUgYWNjZXNzZWQpLlxuICAgICAgICBsZXQgbnVtX3Jhc3Rlcl9zb3VyY2VzID1cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc291cmNlcylcbiAgICAgICAgICAgIC5maWx0ZXIocyA9PiB0aGlzLnNvdXJjZXNbc10gaW5zdGFuY2VvZiBSYXN0ZXJUaWxlU291cmNlKVxuICAgICAgICAgICAgLmxlbmd0aDtcblxuICAgICAgICB0aGlzLmRlZmluZXMuVEFOR1JBTV9OVU1fUkFTVEVSX1NPVVJDRVMgPSBgaW50KCR7bnVtX3Jhc3Rlcl9zb3VyY2VzfSlgO1xuICAgICAgICBpZiAobnVtX3Jhc3Rlcl9zb3VyY2VzID4gMCkge1xuICAgICAgICAgICAgLy8gVXNlIG1vZGVsIHBvc2l0aW9uIG9mIHRpbGUncyBjb29yZGluYXRlIHpvb20gZm9yIHJhc3RlciB0aWxlIHRleHR1cmUgVVZzXG4gICAgICAgICAgICB0aGlzLmRlZmluZXMuVEFOR1JBTV9NT0RFTF9QT1NJVElPTl9CQVNFX1pPT01fVkFSWUlORyA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIFVuaWZvcm1zIGFuZCBtYWNyb3MgZm9yIHJhc3RlciBzYW1wbGVyc1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlU2hhZGVyQmxvY2soJ3Jhc3RlcicsIHNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvcmFzdGVycyddLCAnUmFzdGVyJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gTG9hZCByYXN0ZXIgdGlsZSB0ZXh0dXJlcyBhbmQgc2V0IHVuaWZvcm1zXG4gICAgYnVpbGRSYXN0ZXJUZXh0dXJlcyAodGlsZSwgdGlsZV9kYXRhKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNSYXN0ZXJzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGlsZV9kYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb25maWdzID0ge307IC8vIHRleHR1cmUgY29uZmlncyB0byBwYXNzIHRvIHRleHR1cmUgYnVpbGRlciwga2V5ZWQgYnkgdGV4dHVyZSBuYW1lXG4gICAgICAgIGxldCBpbmRleCA9IHt9OyAgIC8vIGluZGV4IGludG8gcmFzdGVyIHNhbXBsZXIgYXJyYXksIGtleWVkIGJ5IHRleHR1cmUgbmFtZVxuXG4gICAgICAgIC8vIFRPRE86IGRhdGEgc291cmNlIGNvdWxkIHJldHJpZXZlIHJhc3RlciB0ZXh0dXJlIFVSTHNcbiAgICAgICAgdGlsZS5yYXN0ZXJzLm1hcChyID0+IHRoaXMuc291cmNlc1tyXSkuZmlsdGVyKHggPT4geCkuZm9yRWFjaCgoc291cmNlLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgUmFzdGVyVGlsZVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBzb3VyY2UudGlsZVRleHR1cmUodGlsZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnc1tjb25maWcudXJsXSA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICBpbmRleFtjb25maWcudXJsXSA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhjb25maWdzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGlsZV9kYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvYWQgdGV4dHVyZXMgb24gbWFpbiB0aHJlYWQgYW5kIHJldHVybiB3aGVuIGRvbmVcbiAgICAgICAgLy8gV2Ugd2FudCB0byBibG9jayB0aGUgYnVpbGRpbmcgb2YgYSByYXN0ZXIgdGlsZSBtZXNoIHVudGlsIGl0cyB0ZXh0dXJlIGlzIGxvYWRlZCxcbiAgICAgICAgLy8gdG8gYXZvaWQgZmxpY2tlcmluZyB3aGlsZSBsb2FkaW5nICh0ZXh0dXJlIHdpbGwgcmVuZGVyIGFzIGJsYWNrKVxuICAgICAgICByZXR1cm4gV29ya2VyQnJva2VyLnBvc3RNZXNzYWdlKHRoaXMubWFpbl90aHJlYWRfdGFyZ2V0KycubG9hZFRleHR1cmVzJywgY29uZmlncylcbiAgICAgICAgICAgIC50aGVuKHRleHR1cmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmVzIHx8IHRleHR1cmVzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGlsZV9kYXRhO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFNldCB0ZXh0dXJlIHVuaWZvcm1zIChyZXR1cm5lZCBhZnRlciBsb2FkaW5nIGZyb20gbWFpbiB0aHJlYWQpXG4gICAgICAgICAgICAgICAgdGlsZV9kYXRhLnVuaWZvcm1zID0gdGlsZV9kYXRhLnVuaWZvcm1zIHx8IHt9O1xuICAgICAgICAgICAgICAgIHRpbGVfZGF0YS50ZXh0dXJlcyA9IHRpbGVfZGF0YS50ZXh0dXJlcyB8fCBbXTtcblxuICAgICAgICAgICAgICAgIGxldCB1X3NhbXBsZXJzID0gdGlsZV9kYXRhLnVuaWZvcm1zWyd1X3Jhc3RlcnMnXSA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCB1X3NpemVzID0gdGlsZV9kYXRhLnVuaWZvcm1zWyd1X3Jhc3Rlcl9zaXplcyddID0gW107XG4gICAgICAgICAgICAgICAgbGV0IHVfb2Zmc2V0cyA9IHRpbGVfZGF0YS51bmlmb3Jtc1sndV9yYXN0ZXJfb2Zmc2V0cyddID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBbdG5hbWUsIHR3aWR0aCwgdGhlaWdodF0gb2YgdGV4dHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFt0bmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGxldCByYXN0ZXJfY29vcmRzID0gY29uZmlnc1t0bmFtZV0uY29vcmRzOyAvLyB0aWxlIGNvb3JkcyBvZiByYXN0ZXIgdGlsZVxuXG4gICAgICAgICAgICAgICAgICAgIHVfc2FtcGxlcnNbaV0gPSB0bmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdGlsZV9kYXRhLnRleHR1cmVzLnB1c2godG5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHVfc2l6ZXNbaV0gPSBbdHdpZHRoLCB0aGVpZ2h0XTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaWxlIGdlb21ldHJ5IG1heSBiZSBhdCBhIGhpZ2hlciB6b29tIHRoYW4gdGhlIHJhc3RlciB0aWxlIHRleHR1cmUsXG4gICAgICAgICAgICAgICAgICAgIC8vIChlLmcuIGFuIG92ZXJ6b29tZWQgcmFzdGVyIHRpbGUpLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gYWRqdXN0IHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyByYXN0ZXIgdGV4dHVyZSBVVnMgdG8gb2Zmc2V0IHRvIHRoZSBhcHByb3ByaWF0ZSBzdGFydGluZyBwb2ludCBmb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBnZW9tZXRyeSB0aWxlLlxuICAgICAgICAgICAgICAgICAgICBpZiAodGlsZS5jb29yZHMueiA+IHJhc3Rlcl9jb29yZHMueikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGR6ID0gdGlsZS5jb29yZHMueiAtIHJhc3Rlcl9jb29yZHMuejsgLy8gIyBvZiBsZXZlbHMgcmFzdGVyIHNvdXJjZSBpcyBvdmVyem9vbWVkXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZHoyID0gTWF0aC5wb3coMiwgZHopO1xuICAgICAgICAgICAgICAgICAgICAgICAgdV9vZmZzZXRzW2ldID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aWxlLmNvb3Jkcy54ICUgZHoyKSAvIGR6MixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHoyIC0gMSAtICh0aWxlLmNvb3Jkcy55ICUgZHoyKSkgLyBkejIsIC8vIEdMIHRleHR1cmUgY29vcmRzIGFyZSArWSB1cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLyBkejJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1X29mZnNldHNbaV0gPSBbMCwgMCwgMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGlsZV9kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvLyBDYWxsZWQgb24gbWFpbiB0aHJlYWRcbiAgICBsb2FkVGV4dHVyZXMgKHRleHR1cmVzKSB7XG4gICAgICAgIC8vIE5COiBvbmx5IHJldHVybiBuYW1lIGFuZCBzaXplIG9mIHRleHR1cmVzIGxvYWRlZCwgYmVjYXVzZSB3ZSBjYW4ndCBzZW5kIGFjdHVhbCB0ZXh0dXJlIG9iamVjdHMgdG8gd29ya2VyXG4gICAgICAgIHJldHVybiBUZXh0dXJlLmNyZWF0ZUZyb21PYmplY3QodGhpcy5nbCwgdGV4dHVyZXMpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKE9iamVjdC5rZXlzKHRleHR1cmVzKS5tYXAodCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUZXh0dXJlLnRleHR1cmVzW3RdICYmIFRleHR1cmUudGV4dHVyZXNbdF0ubG9hZCgpO1xuICAgICAgICAgICAgICAgIH0pLmZpbHRlcih4ID0+IHgpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbih0ZXh0dXJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZXMuZm9yRWFjaCh0ID0+IHQucmV0YWluKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlcy5tYXAodCA9PiBbdC5uYW1lLCB0LndpZHRoLCB0LmhlaWdodF0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8vIFNldHVwIGFueSBHTCBzdGF0ZSBmb3IgcmVuZGVyaW5nXG4gICAgc2V0dXAgKCkge1xuICAgICAgICB0aGlzLnNldFVuaWZvcm1zKCk7XG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0dXBQcm9ncmFtKFNoYWRlclByb2dyYW0uY3VycmVudCk7XG4gICAgfSxcblxuICAgIC8vIFNldCBzdHlsZSB1bmlmb3JtcyBvbiBjdXJyZW50bHkgYm91bmQgcHJvZ3JhbVxuICAgIHNldFVuaWZvcm1zICgpIHtcbiAgICAgICAgdmFyIHByb2dyYW0gPSBTaGFkZXJQcm9ncmFtLmN1cnJlbnQ7XG4gICAgICAgIGlmICghcHJvZ3JhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3Jtcyh0aGlzLnNoYWRlcnMgJiYgdGhpcy5zaGFkZXJzLnVuaWZvcm1zLCB0cnVlKTsgLy8gcmVzZXQgdGV4dHVyZSB1bml0IHRvIDBcbiAgICB9LFxuXG4gICAgLy8gUmVuZGVyIHN0YXRlIHNldHRpbmdzIGJ5IGJsZW5kIG1vZGVcbiAgICByZW5kZXJfc3RhdGVzOiB7XG4gICAgICAgIG9wYXF1ZTogeyBkZXB0aF90ZXN0OiB0cnVlLCBkZXB0aF93cml0ZTogdHJ1ZSB9LFxuICAgICAgICBhZGQ6IHsgZGVwdGhfdGVzdDogdHJ1ZSwgZGVwdGhfd3JpdGU6IGZhbHNlIH0sXG4gICAgICAgIG11bHRpcGx5OiB7IGRlcHRoX3Rlc3Q6IHRydWUsIGRlcHRoX3dyaXRlOiBmYWxzZSB9LFxuICAgICAgICBpbmxheTogeyBkZXB0aF90ZXN0OiB0cnVlLCBkZXB0aF93cml0ZTogZmFsc2UgfSxcbiAgICAgICAgb3ZlcmxheTogeyBkZXB0aF90ZXN0OiBmYWxzZSwgZGVwdGhfd3JpdGU6IGZhbHNlIH1cbiAgICB9LFxuXG4gICAgLy8gRGVmYXVsdCBzb3J0IG9yZGVyIGZvciBibGVuZCBtb2Rlc1xuICAgIGRlZmF1bHRfYmxlbmRfb3JkZXJzOiB7XG4gICAgICAgIG9wYXF1ZTogMCxcbiAgICAgICAgYWRkOiAxLFxuICAgICAgICBtdWx0aXBseTogMixcbiAgICAgICAgaW5sYXk6IDMsXG4gICAgICAgIG92ZXJsYXk6IDRcbiAgICB9LFxuXG4gICAgLy8gQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc29ydGluZyBzdHlsZXMgYnkgYmxlbmRcbiAgICBibGVuZE9yZGVyU29ydCAoYSwgYikge1xuICAgICAgICAvLyBvcGFxdWUgYWx3YXlzIGNvbWVzIGZpcnN0XG4gICAgICAgIGlmIChhLmJsZW5kID09PSAnb3BhcXVlJyB8fCBiLmJsZW5kID09PSAnb3BhcXVlJykge1xuICAgICAgICAgICAgaWYgKGEuYmxlbmQgPT09ICdvcGFxdWUnICYmIGIuYmxlbmQgPT09ICdvcGFxdWUnKSB7IC8vIGlmIGJvdGggYXJlIG9wYXF1ZVxuICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUgPCBiLm5hbWUgPyAtMSA6IDE7IC8vIHVzZSBuYW1lIGFzIHRpZSBicmVha2VyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhLmJsZW5kID09PSAnb3BhcXVlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTsgLy8gb25seSBgYWAgd2FzIG9wYXF1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8vIG9ubHkgYGJgIHdhcyBvcGFxdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVzZSBleHBsaWNpdCBibGVuZCBvcmRlciBpZiBwb3NzaWJsZVxuICAgICAgICBpZiAoYS5ibGVuZF9vcmRlciA8IGIuYmxlbmRfb3JkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhLmJsZW5kX29yZGVyID4gYi5ibGVuZF9vcmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBibGVuZCBvcmRlcnMgYXJlIGVxdWFsLCB1c2UgZGVmYXVsdCBvcmRlciBieSBibGVuZCBtb2RlXG4gICAgICAgIGlmIChTdHlsZS5kZWZhdWx0X2JsZW5kX29yZGVyc1thLmJsZW5kXSA8IFN0eWxlLmRlZmF1bHRfYmxlbmRfb3JkZXJzW2IuYmxlbmRdKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoU3R5bGUuZGVmYXVsdF9ibGVuZF9vcmRlcnNbYS5ibGVuZF0gPiBTdHlsZS5kZWZhdWx0X2JsZW5kX29yZGVyc1tiLmJsZW5kXSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYS5uYW1lIDwgYi5uYW1lID8gLTEgOiAxOyAvLyB1c2UgbmFtZSBhcyB0aWUgYnJlYWtlclxuICAgIH0sXG5cbiAgICB1cGRhdGUgKCkge1xuICAgICAgICAvLyBTdHlsZS1zcGVjaWZpYyBhbmltYXRpb25cbiAgICAgICAgLy8gaWYgKHR5cGVvZiB0aGlzLmFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyAgICAgdGhpcy5hbmltYXRpb24oKTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxufTtcbiIsIi8vIE1hbmFnZSByZW5kZXJpbmcgc3R5bGVzXG5cbmltcG9ydCBVdGlscyBmcm9tICcuLi91dGlscy91dGlscyc7XG5pbXBvcnQgU2hhZGVyUHJvZ3JhbSBmcm9tICcuLi9nbC9zaGFkZXJfcHJvZ3JhbSc7XG5pbXBvcnQgc2hhZGVyU291cmNlcyBmcm9tICcuLi9nbC9zaGFkZXJfc291cmNlcyc7IC8vIGJ1aWx0LWluIHNoYWRlcnNcbmltcG9ydCB7U3R5bGV9IGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tICcuLi91dGlscy9tZXJnZSc7XG5pbXBvcnQgR2VvIGZyb20gJy4uL2dlbyc7XG5cbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG5leHBvcnQgdmFyIFN0eWxlTWFuYWdlciA9IHt9O1xuZXhwb3J0IHZhciBTdHlsZXMgPSB7fTtcbmV4cG9ydCB2YXIgQmFzZVN0eWxlcyA9IHt9O1xuXG5TdHlsZU1hbmFnZXIuc3R5bGVzID0gU3R5bGVzO1xuXG4vLyBTZXQgdGhlIGJhc2Ugb2JqZWN0IHVzZWQgdG8gaW5zdGFudGlhdGUgc3R5bGVzXG5TdHlsZU1hbmFnZXIuYmFzZVN0eWxlID0gU3R5bGU7XG5cbi8vIEdsb2JhbCBjb25maWd1cmF0aW9uIGZvciBhbGwgc3R5bGVzXG5TdHlsZU1hbmFnZXIuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBTaGFkZXJQcm9ncmFtLnJlbW92ZUJsb2NrKCdnbG9iYWwnKTtcbiAgICBTaGFkZXJQcm9ncmFtLnJlbW92ZUJsb2NrKCdzZXR1cCcpO1xuXG4gICAgLy8gVW5wYWNraW5nIGZ1bmN0aW9ucyAoZm9yIG5vcm1hbGl6ZWQgdmVydGV4IGF0dHJpYnV0ZXMpXG4gICAgU2hhZGVyUHJvZ3JhbS5hZGRCbG9jaygnZ2xvYmFsJywgc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy91bnBhY2snXSk7XG5cbiAgICAvLyBNb2RlbCBhbmQgd29ybGQgcG9zaXRpb24gYWNjZXNzb3JzXG4gICAgU2hhZGVyUHJvZ3JhbS5hZGRCbG9jaygnZ2xvYmFsJywgc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9hY2Nlc3NvcnMnXSk7XG5cbiAgICAvLyBMYXllciByZS1vcmRlcmluZyBmdW5jdGlvblxuICAgIFNoYWRlclByb2dyYW0uYWRkQmxvY2soJ2dsb2JhbCcsIHNoYWRlclNvdXJjZXNbJ2dsL3NoYWRlcnMvbGF5ZXJfb3JkZXInXSk7XG5cbiAgICAvLyBGZWF0dXJlIHNlbGVjdGlvbiBnbG9iYWxcbiAgICBTaGFkZXJQcm9ncmFtLmFkZEJsb2NrKCdnbG9iYWwnLCBzaGFkZXJTb3VyY2VzWydnbC9zaGFkZXJzL3NlbGVjdGlvbl9nbG9iYWxzJ10pO1xuXG4gICAgLy8gRmVhdHVyZSBzZWxlY3Rpb24gdmVydGV4IHNoYWRlciBzdXBwb3J0XG4gICAgU2hhZGVyUHJvZ3JhbS5yZXBsYWNlQmxvY2soJ3NldHVwJywgc2hhZGVyU291cmNlc1snZ2wvc2hhZGVycy9zZWxlY3Rpb25fdmVydGV4J10pO1xuXG4gICAgLy8gTWluaW11bSB2YWx1ZSBmb3IgZmxvYXQgY29tcGFyaXNvbnNcbiAgICBTaGFkZXJQcm9ncmFtLmRlZmluZXMuVEFOR1JBTV9FUFNJTE9OID0gMC4wMDAwMTtcblxuICAgIC8vIGFzc3VtZSBtaW4gMTYtYml0IGRlcHRoIGJ1ZmZlciwgaW4gcHJhY3RpY2UgdXNlcyAxNC1iaXRzLCAxIGV4dHJhIGJpdCB0byBoYW5kbGUgdmlydHVhbCBoYWxmLWxheWVyc1xuICAgIC8vIGZvciBvdXRsaW5lcyAoaW5zZXJ0ZWQgaW4gYmV0d2VlbiBsYXllcnMpLCBhbm90aGVyIGV4dHJhIGJpdCB0byBwcmV2ZW50IHByZWNpc2lvbiBsb3NzXG4gICAgU2hhZGVyUHJvZ3JhbS5kZWZpbmVzLlRBTkdSQU1fTEFZRVJfREVMVEEgPSAxIC8gKDEgPDwgMTQpO1xuXG4gICAgLy8gSW50ZXJuYWwgdGlsZSBzY2FsZVxuICAgIFNoYWRlclByb2dyYW0uZGVmaW5lcy5UQU5HUkFNX1RJTEVfU0NBTEUgPSBgdmVjMygke0dlby50aWxlX3NjYWxlfS4sICR7R2VvLnRpbGVfc2NhbGV9LiwgdV9tZXRlcnNfcGVyX3BpeGVsICogJHtHZW8udGlsZV9zaXplfS4pYDtcbn07XG5cbi8vIERlc3Ryb3kgYWxsIHN0eWxlcyBmb3IgYSBnaXZlbiBHTCBjb250ZXh0XG5TdHlsZU1hbmFnZXIuZGVzdHJveSA9IGZ1bmN0aW9uIChnbCkge1xuICAgIE9iamVjdC5rZXlzKFN0eWxlcykuZm9yRWFjaCgoX25hbWUpID0+IHtcbiAgICAgICAgdmFyIHN0eWxlID0gU3R5bGVzW19uYW1lXTtcbiAgICAgICAgaWYgKHN0eWxlLmdsID09PSBnbCkge1xuICAgICAgICAgICAgbG9nLnRyYWNlKGBTdHlsZU1hbmFnZXIuZGVzdHJveTogZGVzdHJveWluZyByZW5kZXIgc3R5bGUgJHtzdHlsZS5uYW1lfWApO1xuXG4gICAgICAgICAgICBpZiAoIXN0eWxlLmlzQnVpbHRJbigpKSB7XG4gICAgICAgICAgICAgICAgU3R5bGVNYW5hZ2VyLnJlbW92ZShzdHlsZS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0eWxlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuLy8gUmVnaXN0ZXIgYSBzdHlsZVxuU3R5bGVNYW5hZ2VyLnJlZ2lzdGVyID0gZnVuY3Rpb24gKHN0eWxlKSB7XG4gICAgU3R5bGVzW3N0eWxlLm5hbWVdID0gc3R5bGU7XG4gICAgQmFzZVN0eWxlc1tzdHlsZS5uYW1lXSA9IHN0eWxlO1xufTtcblxuLy8gUmVtb3ZlIGEgc3R5bGVcblN0eWxlTWFuYWdlci5yZW1vdmUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGRlbGV0ZSBTdHlsZXNbbmFtZV07XG59O1xuXG5TdHlsZU1hbmFnZXIubWl4ID0gZnVuY3Rpb24gKHN0eWxlLCBzdHlsZXMpIHtcbiAgICAvLyBFeGl0IGVhcmx5IGlmIHdlIGhhdmUgYWxyZWFkeSBhcHBsaWVkIG1peGlucyB0byB0aGlzIHN0eWxlXG4gICAgaWYgKHN0eWxlLm1peGVkKSB7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9XG4gICAgc3R5bGUubWl4ZWQgPSB7fTtcblxuICAgIC8vIE1peGluIHNvdXJjZXMsIGluIG9yZGVyXG4gICAgbGV0IHNvdXJjZXMgPSBbXTtcbiAgICBpZiAoc3R5bGUubWl4KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0eWxlLm1peCkpIHtcbiAgICAgICAgICAgIHNvdXJjZXMucHVzaCguLi5zdHlsZS5taXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc291cmNlcy5wdXNoKHN0eWxlLm1peCk7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlcyA9IHNvdXJjZXMubWFwKHggPT4gc3R5bGVzW3hdKS5maWx0ZXIoeCA9PiB4ICYmIHggIT09IHN0eWxlKTsgLy8gVE9ETzogd2FybmluZyBvbiB0cnlpbmcgdG8gbWl4IGludG8gc2VsZlxuXG4gICAgICAgIC8vIFRyYWNrIHdoaWNoIHN0eWxlcyB3ZXJlIG1peGVkIGludG8gdGhpcyBvbmVcbiAgICAgICAgZm9yIChsZXQgcyBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICBzdHlsZS5taXhlZFtzLm5hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VzLnB1c2goc3R5bGUpO1xuXG4gICAgLy8gRmxhZ3MgLSBPUidkLCB0cnVlIGlmIGFueSBzdHlsZSBoYXMgaXQgc2V0XG4gICAgc3R5bGUuYW5pbWF0ZWQgPSBzb3VyY2VzLnNvbWUoeCA9PiB4ICYmIHguYW5pbWF0ZWQpO1xuICAgIHN0eWxlLnRleGNvb3JkcyA9IHNvdXJjZXMuc29tZSh4ID0+IHggJiYgeC50ZXhjb29yZHMpO1xuXG4gICAgLy8gT3ZlcndyaXRlcyAtIGxhc3QgZGVmaW5pdGlvbiB3aW5zXG4gICAgc3R5bGUuYmFzZSA9IHNvdXJjZXMubWFwKHggPT4geC5iYXNlKS5maWx0ZXIoeCA9PiB4KS5wb3AoKTtcbiAgICBzdHlsZS5saWdodGluZyA9IHNvdXJjZXMubWFwKHggPT4geC5saWdodGluZykuZmlsdGVyKHggPT4geCAhPSBudWxsKS5wb3AoKTtcbiAgICBzdHlsZS50ZXh0dXJlID0gc291cmNlcy5tYXAoeCA9PiB4LnRleHR1cmUpLmZpbHRlcih4ID0+IHgpLnBvcCgpO1xuICAgIHN0eWxlLnJhc3RlciA9IHNvdXJjZXMubWFwKHggPT4geC5yYXN0ZXIpLmZpbHRlcih4ID0+IHggIT0gbnVsbCkucG9wKCk7XG4gICAgaWYgKHNvdXJjZXMuc29tZSh4ID0+IHguaGFzT3duUHJvcGVydHkoJ2JsZW5kJykgJiYgeC5ibGVuZCkpIHtcbiAgICAgICAgLy8gb25seSBtaXggYmxlbmQgaWYgZXhwbGljaXRseSBzZXQsIG90aGVyd2lzZSBsZXQgYmFzZSBzdHlsZSBjaG9vc2UgYmxlbmRpbmcgbW9kZVxuICAgICAgICAvLyBoYXNPd25Qcm9wZXJ0eSBjaGVjayBnaXZlcyBwcmVmZXJlbmNlIHRvIGJhc2Ugc3R5bGUgcHJvdG90eXBlXG4gICAgICAgIHN0eWxlLmJsZW5kID0gc291cmNlcy5tYXAoeCA9PiB4Lmhhc093blByb3BlcnR5KCdibGVuZCcpICYmIHguYmxlbmQpLmZpbHRlcih4ID0+IHgpLnBvcCgpO1xuICAgIH1cbiAgICBzdHlsZS5ibGVuZF9vcmRlciA9IHNvdXJjZXMubWFwKHggPT4geC5ibGVuZF9vcmRlcikuZmlsdGVyKHggPT4geCAhPSBudWxsKS5wb3AoKTtcblxuICAgIC8vIE1lcmdlcyAtIHByb3BlcnR5LXNwZWNpZmljIHJ1bGVzIGZvciBtZXJnaW5nIHZhbHVlc1xuICAgIHN0eWxlLmRlZmluZXMgPSBPYmplY3QuYXNzaWduKHt9LCAuLi5zb3VyY2VzLm1hcCh4ID0+IHguZGVmaW5lcykuZmlsdGVyKHggPT4geCkpOyAvLyBpbnRlcm5hbCBkZWZpbmVzIChub3QgdXNlci1kZWZpbmVkKVxuICAgIHN0eWxlLm1hdGVyaWFsID0gT2JqZWN0LmFzc2lnbih7fSwgLi4uc291cmNlcy5tYXAoeCA9PiB4Lm1hdGVyaWFsKS5maWx0ZXIoeCA9PiB4KSk7XG5cbiAgICAvLyBNaXggc2hhZGVyIHByb3BlcnRpZXNcbiAgICBTdHlsZU1hbmFnZXIubWl4U2hhZGVycyhzdHlsZSwgc3R5bGVzLCBzb3VyY2VzKTtcbiAgICByZXR1cm4gc3R5bGU7XG59O1xuXG4vLyBNaXggdGhlIHByb3BlcnRlcyBpbiB0aGUgXCJzaGFkZXJzXCIgYmxvY2tcblN0eWxlTWFuYWdlci5taXhTaGFkZXJzID0gZnVuY3Rpb24gKHN0eWxlLCBzdHlsZXMsIHNvdXJjZXMpIHtcbiAgICBsZXQgc2hhZGVycyA9IHt9OyAvLyBuZXdseSBtaXhlZCBzaGFkZXJzIHByb3BlcnRpZXNcbiAgICBsZXQgc2hhZGVyX21lcmdlcyA9IHNvdXJjZXMubWFwKHggPT4geC5zaGFkZXJzKS5maWx0ZXIoeCA9PiB4KTsgLy8ganVzdCB0aGUgc291cmNlIHN0eWxlcyB3aXRoIHNoYWRlciBwcm9wZXJ0aWVzXG5cbiAgICAvLyBEZWZpbmVzXG4gICAgc2hhZGVycy5kZWZpbmVzID0gT2JqZWN0LmFzc2lnbih7fSwgLi4uc2hhZGVyX21lcmdlcy5tYXAoeCA9PiB4LmRlZmluZXMpLmZpbHRlcih4ID0+IHgpKTtcblxuICAgIC8vIFVuaWZvcm1zXG4gICAgc2hhZGVycy51bmlmb3JtcyA9IHt9OyAgLy8gdW5pZm9ybXMgZm9yIHRoaXMgc3R5bGUsIGJvdGggZXhwbGljaXRseSBkZWZpbmVkLCBhbmQgbWl4ZWQgZnJvbSBvdGhlciBzdHlsZXNcbiAgICBzaGFkZXJzLl91bmlmb3JtcyA9IChzdHlsZS5zaGFkZXJzICYmIHN0eWxlLnNoYWRlcnMudW5pZm9ybXMpIHx8IHt9OyAvLyB1bmlmb3JtcyBleHBsaWNpdGx5IGRlZmluZWQgYnkgKnRoaXMqIHN0eWxlXG4gICAgc2hhZGVycy5fdW5pZm9ybV9zY29wZXMgPSB7fTsgLy8gdHJhY2tzIHdoaWNoIHN0eWxlIGVhY2ggdW5pZm9ybSBvcmlnaW5hdGVkIGZyb20gKHRoaXMgb25lLCBvciBhbmNlc3RvcilcblxuICAgIC8vIE1peCBpbiB1bmlmb3JtcyBmcm9tIGFuY2VzdG9ycywgcHJvdmlkaW5nIG1lYW5zIHRvIGFjY2Vzc1xuICAgIHNvdXJjZXNcbiAgICAgICAgLmZpbHRlcih4ID0+IHguc2hhZGVycyAmJiB4LnNoYWRlcnMudW5pZm9ybXMpXG4gICAgICAgIC5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgdSBpbiB4LnNoYWRlcnMudW5pZm9ybXMpIHtcbiAgICAgICAgICAgICAgICBzaGFkZXJzLl91bmlmb3JtX3Njb3Blc1t1XSA9IHgubmFtZTtcblxuICAgICAgICAgICAgICAgIC8vIERlZmluZSBnZXR0ZXIgYW5kIHNldHRlciBmb3IgdGhpcyB1bmlmb3JtXG4gICAgICAgICAgICAgICAgLy8gR2V0dGVyIHJldHVybnMgdmFsdWUgZm9yIHRoaXMgc3R5bGUgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGFza3MgYXBwcm9wcmlhdGUgYW5jZXN0b3IgZm9yIGl0XG4gICAgICAgICAgICAgICAgLy8gU2V0dGVyIHNldHMgdGhlIHZhbHVlIGZvciB0aGlzIHN0eWxlICh3aGV0aGVyIHByZXZpb3VzbHkgcHJlc2VudCBpbiB0aGlzIHN0eWxlIG9yIG5vdClcbiAgICAgICAgICAgICAgICAvLyBNaW1pY3MgSlMgcHJvdG90eXBlL2hhc093blByb3BlcnR5IGJlaGF2aW9yLCBidXQgd2l0aCBtdWx0aXBsZSBhbmNlc3RvcnMgKHZpYSBtaXhpbnMpXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNoYWRlcnMudW5pZm9ybXMsIHUsIHtcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuaWZvcm0gaXMgZXhwbGljaXRseSBkZWZpbmVkIG9uIHRoaXMgc3R5bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkZXJzLl91bmlmb3Jtc1t1XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRlcnMuX3VuaWZvcm1zW3VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5pZm9ybSB3YXMgbWl4ZWQgZnJvbSBhbm90aGVyIHN0eWxlLCBmb3J3YXJkIHJlcXVlc3QgdGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aWZ5IGNoZWNrIGlzIG5lZWRlZCB0byBwcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbiBpZiBhIHByZXZpb3VzbHkgZGVmaW5lZCB1bmlmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBzZXQgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHlsZXNbc2hhZGVycy5fdW5pZm9ybV9zY29wZXNbdV1dLnNoYWRlcnMudW5pZm9ybXMgIT09IHNoYWRlcnMudW5pZm9ybXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVzW3NoYWRlcnMuX3VuaWZvcm1fc2NvcGVzW3VdXS5zaGFkZXJzLnVuaWZvcm1zW3VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJzLl91bmlmb3Jtc1t1XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAvLyBFeHRlbnNpb25zOiBidWlsZCBhIGxpc3Qgb2YgdW5pcXVlIGV4dGVuc2lvbnNcbiAgICBzaGFkZXJzLmV4dGVuc2lvbnMgPSBPYmplY3Qua2V5cyhzaGFkZXJfbWVyZ2VzXG4gICAgICAgIC5tYXAoeCA9PiB4LmV4dGVuc2lvbnMpXG4gICAgICAgIC5maWx0ZXIoeCA9PiB4KVxuICAgICAgICAucmVkdWNlKChwcmV2LCBjdXIpID0+IHtcbiAgICAgICAgICAgIC8vIHNpbmdsZSBleHRlbnNpb25cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHByZXZbY3VyXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcnJheSBvZiBleHRlbnNpb25zXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXIuZm9yRWFjaCh4ID0+IHByZXZbeF0gPSB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICB9LCB7fSkgfHwge31cbiAgICApO1xuXG4gICAgLy8gU2hhZGVyIGJsb2Nrc1xuICAgIC8vIE1hcmsgYWxsIHNoYWRlciBibG9ja3MgZm9yIHRoZSB0YXJnZXQgc3R5bGUgYXMgb3JpZ2luYXRpbmcgd2l0aCBpdHMgb3duIG5hbWVcbiAgICBpZiAoc3R5bGUuc2hhZGVycyAmJiBzdHlsZS5zaGFkZXJzLmJsb2Nrcykge1xuICAgICAgICBzdHlsZS5zaGFkZXJzLmJsb2NrX3Njb3BlcyA9IHN0eWxlLnNoYWRlcnMuYmxvY2tfc2NvcGVzIHx8IHt9O1xuICAgICAgICBmb3IgKGxldCBbaywgYmxvY2tdIG9mIFV0aWxzLmVudHJpZXMoc3R5bGUuc2hhZGVycy5ibG9ja3MpKSB7XG4gICAgICAgICAgICBzdHlsZS5zaGFkZXJzLmJsb2NrX3Njb3Blc1trXSA9IHN0eWxlLnNoYWRlcnMuYmxvY2tfc2NvcGVzW2tdIHx8IFtdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmxvY2spKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc2hhZGVycy5ibG9ja19zY29wZXNba10ucHVzaCguLi5ibG9jay5tYXAoKCkgPT4gc3R5bGUubmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc2hhZGVycy5ibG9ja19zY29wZXNba10ucHVzaChzdHlsZS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1lcmdlIHNoYWRlciBibG9ja3MsIGtlZXBpbmcgdHJhY2sgb2Ygd2hpY2ggc3R5bGUgZWFjaCBibG9jayBvcmlnaW5hdGVkIGZyb21cbiAgICBsZXQgbWl4ZWQgPSB7fTsgLy8gYWxsIHNjb3BlcyBtaXhlZCBzbyBmYXJcbiAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc2hhZGVyX21lcmdlcykge1xuICAgICAgICBpZiAoIXNvdXJjZS5ibG9ja3MpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hhZGVycy5ibG9ja3MgPSBzaGFkZXJzLmJsb2NrcyB8fCB7fTtcbiAgICAgICAgc2hhZGVycy5ibG9ja19zY29wZXMgPSBzaGFkZXJzLmJsb2NrX3Njb3BlcyB8fCB7fTtcbiAgICAgICAgbGV0IG1peGVkX3NvdXJjZSA9IHt9OyAvLyBzY29wZXMgbWl4ZWQgZm9yIHRoaXMgc291cmNlIHN0eWxlXG5cbiAgICAgICAgZm9yIChsZXQgW3QsIGJsb2NrXSBvZiBVdGlscy5lbnRyaWVzKHNvdXJjZS5ibG9ja3MpKSB7XG4gICAgICAgICAgICBsZXQgYmxvY2tfc2NvcGUgPSBzb3VyY2UuYmxvY2tfc2NvcGVzW3RdO1xuXG4gICAgICAgICAgICBzaGFkZXJzLmJsb2Nrc1t0XSA9IHNoYWRlcnMuYmxvY2tzW3RdIHx8IFtdO1xuICAgICAgICAgICAgc2hhZGVycy5ibG9ja19zY29wZXNbdF0gPSBzaGFkZXJzLmJsb2NrX3Njb3Blc1t0XSB8fCBbXTtcblxuICAgICAgICAgICAgLy8gc3RhbmRhcmRpemUgb24gYXJyYXlzIChibG9jayBjYW4gYmUgc2luZ2xlIG9yIG11bHRpLXZhbHVlKVxuICAgICAgICAgICAgYmxvY2sgPSBBcnJheS5pc0FycmF5KGJsb2NrKSA/IGJsb2NrIDogW2Jsb2NrXTtcbiAgICAgICAgICAgIGJsb2NrX3Njb3BlID0gQXJyYXkuaXNBcnJheShibG9ja19zY29wZSkgPyBibG9ja19zY29wZSA6IFtibG9ja19zY29wZV07XG5cbiAgICAgICAgICAgIGZvciAobGV0IGI9MDsgYiA8IGJsb2NrLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBibG9ja3Mgd2UndmUgYWxyZWFkeSBtaXhlZCBpbiBmcm9tIHRoZSBzYW1lIHNjb3BlXG4gICAgICAgICAgICAgICAgLy8gUmVwZWF0aW5nIHNjb3BlIGluZGljYXRlcyBhIGRpYW1vbmQgcGF0dGVybiB3aGVyZSBhIHN0eWxlIGlzIGJlaW5nIG1peGVkIG11bHRpcGxlIHRpbWVzXG4gICAgICAgICAgICAgICAgaWYgKG1peGVkW2Jsb2NrX3Njb3BlW2JdXSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWl4ZWRfc291cmNlW2Jsb2NrX3Njb3BlW2JdXSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBzaGFkZXJzLmJsb2Nrc1t0XS5wdXNoKGJsb2NrW2JdKTtcbiAgICAgICAgICAgICAgICBzaGFkZXJzLmJsb2NrX3Njb3Blc1t0XS5wdXNoKGJsb2NrX3Njb3BlW2JdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBzdHlsZXMgbWl4ZWQgaW4gZnJvbSB0aGlzIHNvdXJjZSAtIHRoZXkgY291bGQgYmUgbXVsdGktbGV2ZWwgYW5jZXN0b3JzLFxuICAgICAgICAvLyBiZXlvbmQgdGhlIGZpcnN0LWxldmVsIFwicGFyZW50c1wiIGRlZmluZWQgaW4gdGhpcyBzdHlsZSdzIGBtaXhgIGxpc3RcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtaXhlZCwgbWl4ZWRfc291cmNlKTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKHN0eWxlLm1peGVkLCBtaXhlZCk7IC8vIGFkZCBhbGwgbmV3bHkgbWl4ZWQgc3R5bGVzXG5cbiAgICBzdHlsZS5zaGFkZXJzID0gc2hhZGVyczsgLy8gYXNzaWduIGJhY2sgdG8gc3R5bGVcbiAgICByZXR1cm4gc3R5bGU7XG59O1xuXG4vLyBDcmVhdGUgYSBuZXcgc3R5bGVcbi8vIG5hbWU6IG5hbWUgb2YgbmV3IHN0eWxlXG4vLyBjb25maWc6IHByb3BlcnRpZXMgb2YgbmV3IHN0eWxlXG4vLyBzdHlsZXM6IHdvcmtpbmcgc2V0IG9mIHN0eWxlcyBiZWluZyBidWlsdCAodXNlZCBmb3IgbWl4aW5nIGluIGV4aXN0aW5nIHN0eWxlcylcblN0eWxlTWFuYWdlci5jcmVhdGUgPSBmdW5jdGlvbiAobmFtZSwgY29uZmlnLCBzdHlsZXMgPSB7fSkge1xuICAgIGxldCBzdHlsZSA9IG1lcmdlT2JqZWN0cyh7fSwgY29uZmlnKTsgLy8gZGVlcCBjb3B5XG4gICAgc3R5bGUubmFtZSA9IG5hbWU7XG5cbiAgICAvLyBTdHlsZSBtaXhpbnNcbiAgICBzdHlsZSA9IFN0eWxlTWFuYWdlci5taXgoc3R5bGUsIHN0eWxlcyk7XG5cbiAgICAvLyBIYXMgYmFzZSBzdHlsZT9cbiAgICAvLyBPbmx5IHJlbmRlcmFibGUgKGluc3RhbnRpYXRlZCkgc3R5bGVzIHNob3VsZCBiZSBpbmNsdWRlZCBmb3IgcnVuLXRpbWUgdXNlXG4gICAgLy8gT3RoZXJzIGFyZSBpbnRlcm1lZGlhcnkvYWJzdHJhY3QsIHVzZWQgZHVyaW5nIHN0eWxlIGNvbXBvc2l0aW9uIGJ1dCBub3QgZXhlY3V0aW9uXG4gICAgaWYgKHN0eWxlLmJhc2UgJiYgQmFzZVN0eWxlc1tzdHlsZS5iYXNlXSkge1xuICAgICAgICBTdHlsZXNbbmFtZV0gPSBzdHlsZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShCYXNlU3R5bGVzW3N0eWxlLmJhc2VdKSwgc3R5bGUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbn07XG5cbi8vIENhbGxlZCB0byBjcmVhdGUgYW5kIGluaXRpYWxpemUgc3R5bGVzXG5TdHlsZU1hbmFnZXIuYnVpbGQgPSBmdW5jdGlvbiAoc3R5bGVzLCBzY2VuZSA9IHt9KSB7XG4gICAgLy8gU29ydCBzdHlsZXMgYnkgZGVwZW5kZW5jeSwgdGhlbiBidWlsZCB0aGVtXG4gICAgbGV0IHN0eWxlX2RlcHMgPSBPYmplY3Qua2V5cyhzdHlsZXMpLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PiBTdHlsZU1hbmFnZXIuaW5oZXJpdGFuY2VEZXB0aChhLCBzdHlsZXMpIC0gU3R5bGVNYW5hZ2VyLmluaGVyaXRhbmNlRGVwdGgoYiwgc3R5bGVzKVxuICAgICk7XG5cbiAgICAvLyBPbmx5IGtlZXAgYnVpbHQtaW4gYmFzZSBzdHlsZXNcbiAgICBmb3IgKGxldCBzbmFtZSBpbiBTdHlsZXMpIHtcbiAgICAgICAgaWYgKCFCYXNlU3R5bGVzW3NuYW1lXSkge1xuICAgICAgICAgICAgZGVsZXRlIFN0eWxlc1tzbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBTdHlsZXNbc25hbWVdLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXb3JraW5nIHNldCBvZiBzdHlsZXMgYmVpbmcgYnVpbHRcbiAgICBsZXQgd3MgPSB7fTtcbiAgICBmb3IgKGxldCBzbmFtZSBvZiBzdHlsZV9kZXBzKSB7XG4gICAgICAgIHdzW3NuYW1lXSA9IFN0eWxlTWFuYWdlci5jcmVhdGUoc25hbWUsIHN0eWxlc1tzbmFtZV0sIHdzKTtcbiAgICB9XG5cbiAgICBTdHlsZU1hbmFnZXIuaW5pdFN0eWxlcyhzY2VuZSk7XG4gICAgcmV0dXJuIFN0eWxlcztcbn07XG5cbi8vIEluaXRpYWxpemUgYWxsIHN0eWxlc1xuU3R5bGVNYW5hZ2VyLmluaXRTdHlsZXMgPSBmdW5jdGlvbiAoc2NlbmUpIHtcbiAgICAvLyBJbml0aWFsaXplIGFsbFxuICAgIGZvciAobGV0IHNuYW1lIGluIFN0eWxlcykge1xuICAgICAgICBTdHlsZXNbc25hbWVdLmluaXQoc2NlbmUpO1xuICAgIH1cbn07XG5cbi8vIEdpdmVuIGEgc3R5bGUga2V5IGluIGEgc2V0IG9mIHN0eWxlcyB0byBhZGQsIGNvdW50IHRoZSBsZW5ndGggb2YgdGhlIGluaGVyaXRhbmNlIGNoYWluXG5TdHlsZU1hbmFnZXIuaW5oZXJpdGFuY2VEZXB0aCA9IGZ1bmN0aW9uIChrZXksIHN0eWxlcykge1xuICAgIGxldCBwYXJlbnRzID0gMDtcblxuICAgIHdoaWxlKHRydWUpIHtcbiAgICAgICAgbGV0IHN0eWxlID0gc3R5bGVzW2tleV07XG4gICAgICAgIGlmICghc3R5bGUpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBzY2VuZSBkZWYgZXJyb3IsIHRyeWluZyB0byBleHRlbmQgYSBzdHlsZSB0aGF0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVwZW5kZW5jeSBjaGFpbiBlbmRzIHdoZW4gdGhpcyBzdHlsZSBpc24ndCBtaXhpbmcgaW4gYW55IG90aGVyc1xuICAgICAgICBpZiAoIXN0eWxlLm1peCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcmF2ZXJzZSBuZXh0IHBhcmVudCBzdHlsZVxuICAgICAgICBwYXJlbnRzKys7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3R5bGUubWl4KSkge1xuICAgICAgICAgICAgLy8gSWYgbXVsdGlwbGUgbWl4aW5zLCBmaW5kIHRoZSBkZWVwZXN0IG9uZVxuICAgICAgICAgICAgcGFyZW50cyArPSBNYXRoLm1heCguLi5zdHlsZS5taXgubWFwKHMgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRyeWluZyB0byBtaXggaW50byBpdHNlbGYhXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0eWxlTWFuYWdlci5pbmhlcml0YW5jZURlcHRoKHMsIHN0eWxlcyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRyeWluZyB0byBtaXggaW50byBpdHNlbGYhXG4gICAgICAgICAgICBpZiAoa2V5ID09PSBzdHlsZS5taXgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgc2luZ2xlIG1peGluLCBjb250aW51ZSBsb29wIHVwIHRoZSB0cmVlXG4gICAgICAgICAgICBrZXkgPSBzdHlsZS5taXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG59O1xuXG4vLyBDb21waWxlIGFsbCBzdHlsZXNcblN0eWxlTWFuYWdlci5jb21waWxlID0gZnVuY3Rpb24gKGtleXMsIHNjZW5lKSB7XG4gICAga2V5cyA9IGtleXMgfHwgT2JqZWN0LmtleXMoU3R5bGVzKTtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgICAgICBsZXQgc3R5bGUgPSBTdHlsZXNba2V5XTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0eWxlLmNvbXBpbGUoKTtcbiAgICAgICAgICAgIGxvZy50cmFjZShgU3R5bGVNYW5hZ2VyLmNvbXBpbGUoKTogY29tcGlsZWQgc3R5bGUgJHtrZXl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcihgU3R5bGVNYW5hZ2VyLmNvbXBpbGUoKTogZXJyb3IgY29tcGlsaW5nIHN0eWxlICR7a2V5fTpgLCBlcnJvcik7XG5cbiAgICAgICAgICAgIHNjZW5lLnRyaWdnZXIoJ3dhcm5pbmcnLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0eWxlcycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYEVycm9yIGNvbXBpbGluZyBzdHlsZSAke2tleX1gLFxuICAgICAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgICAgIHNoYWRlcl9lcnJvcnM6IHN0eWxlLnByb2dyYW0gJiYgc3R5bGUucHJvZ3JhbS5zaGFkZXJfZXJyb3JzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvZy5kZWJ1ZyhgU3R5bGVNYW5hZ2VyLmNvbXBpbGUoKTogY29tcGlsZWQgYWxsIHN0eWxlc2ApO1xufTtcblxuLy8gR2V0IGFsbCBzdHlsZXMgd2l0aCBtZXNoIGRhdGEgZm9yIGEgZ2l2ZW4gdGlsZVxuU3R5bGVNYW5hZ2VyLnN0eWxlc0ZvclRpbGUgPSBmdW5jdGlvbiAodGlsZV9rZXkpIHtcbiAgICBsZXQgc3R5bGVzID0gW107XG4gICAgZm9yIChsZXQgcyBpbiBTdHlsZXMpIHtcbiAgICAgICAgaWYgKFN0eWxlc1tzXS5oYXNEYXRhRm9yVGlsZSh0aWxlX2tleSkpIHtcbiAgICAgICAgICAgIHN0eWxlcy5wdXNoKHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHlsZXM7XG59O1xuIiwiaW1wb3J0IFV0aWxzIGZyb20gJy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCBHZW8gZnJvbSAnLi4vZ2VvJztcblxuaW1wb3J0IHBhcnNlQ1NTQ29sb3IgZnJvbSAnY3NzY29sb3JwYXJzZXInO1xuXG5leHBvcnQgdmFyIFN0eWxlUGFyc2VyID0ge307XG5cbi8vIFdyYXBzIHN0eWxlIGZ1bmN0aW9ucyBhbmQgcHJvdmlkZXMgYSBzY29wZSBvZiBjb21tb25seSBhY2Nlc3NpYmxlIGRhdGE6XG4vLyAtIGZlYXR1cmU6IHRoZSAncHJvcGVydGllcycgb2YgdGhlIGZlYXR1cmUsIGUuZy4gYWNjZXNzZWQgYXMgJ2ZlYXR1cmUubmFtZSdcbi8vIC0gZ2xvYmFsOiB1c2VyLWRlZmluZWQgcHJvcGVydGllcyBvbiB0aGUgYGdsb2JhbGAgb2JqZWN0IGluIHRoZSBzY2VuZSBmaWxlXG4vLyAtICR6b29tOiB0aGUgY3VycmVudCBtYXAgem9vbSBsZXZlbFxuLy8gLSAkZ2VvbWV0cnk6IHRoZSB0eXBlIG9mIGdlb21ldHJ5LCAncG9pbnQnLCAnbGluZScsIG9yICdwb2x5Z29uJ1xuLy8gLSAkbWV0ZXJzX3Blcl9waXhlbDogY29udmVyc2lvbiBmb3IgbWV0ZXJzL3BpeGVscyBhdCBjdXJyZW50IG1hcCB6b29tXG5TdHlsZVBhcnNlci53cmFwRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykge1xuICAgIHZhciBmID0gYGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmVhdHVyZSA9IGNvbnRleHQuZmVhdHVyZS5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBjb250ZXh0Lmdsb2JhbDtcbiAgICAgICAgICAgICAgICB2YXIgJHpvb20gPSBjb250ZXh0Lnpvb207XG4gICAgICAgICAgICAgICAgdmFyICRsYXllciA9IGNvbnRleHQubGF5ZXI7XG4gICAgICAgICAgICAgICAgdmFyICRnZW9tZXRyeSA9IGNvbnRleHQuZ2VvbWV0cnk7XG4gICAgICAgICAgICAgICAgdmFyICRtZXRlcnNfcGVyX3BpeGVsID0gY29udGV4dC5tZXRlcnNfcGVyX3BpeGVsO1xuXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9ICgke2Z1bmN9KCkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gbnVsbDsgLy8gY29udmVydCBOYU5zIHRvIG51bGxzXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgIH1gO1xuICAgIHJldHVybiBmO1xufTtcblxuXG4vLyBTdHlsZSBwYXJzaW5nXG5cblN0eWxlUGFyc2VyLnplcm9QYWlyID0gT2JqZWN0LmZyZWV6ZShbMCwgMF0pOyAvLyBzaW5nbGUgYWxsb2NhdGlvbiBmb3IgemVybyB2YWx1ZXMgdGhhdCB3b24ndCBiZSBtb2RpZmllZFxuXG4vLyBTdHlsZSBkZWZhdWx0c1xuU3R5bGVQYXJzZXIuZGVmYXVsdHMgPSB7XG4gICAgY29sb3I6IFsxLCAxLCAxLCAxXSxcbiAgICB3aWR0aDogMSxcbiAgICBzaXplOiAxLFxuICAgIGV4dHJ1ZGU6IGZhbHNlLFxuICAgIGhlaWdodDogMjAsXG4gICAgbWluX2hlaWdodDogMCxcbiAgICBvcmRlcjogMCxcbiAgICB6OiAwLFxuICAgIG1hdGVyaWFsOiB7XG4gICAgICAgIGFtYmllbnQ6IDEsXG4gICAgICAgIGRpZmZ1c2U6IDFcbiAgICB9XG59O1xuXG4vLyBTdHlsZSBtYWNyb3NcblN0eWxlUGFyc2VyLm1hY3JvcyA9IHtcbiAgICAvLyBwc2V1ZG8tcmFuZG9tIGNvbG9yIGJ5IGdlb21ldHJ5IGlkXG4gICAgJ1N0eWxlLmNvbG9yLnBzZXVkb1JhbmRvbUNvbG9yJzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAwLjcgKiAocGFyc2VJbnQoZmVhdHVyZS5pZCwgMTYpIC8gMTAwICUgMSksICAgICAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgICAgIDAuNyAqIChwYXJzZUludChmZWF0dXJlLmlkLCAxNikgLyAxMDAwMCAlIDEpLCAgIC8vIGpzaGludCBpZ25vcmU6bGluZVxuICAgICAgICAgICAgMC43ICogKHBhcnNlSW50KGZlYXR1cmUuaWQsIDE2KSAvIDEwMDAwMDAgJSAxKSwgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgICAgICAxXG4gICAgICAgIF07XG4gICAgfSxcblxuICAgIC8vIHJhbmRvbSBjb2xvclxuICAgICdTdHlsZS5jb2xvci5yYW5kb21Db2xvcic6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gWzAuNyAqIE1hdGgucmFuZG9tKCksIDAuNyAqIE1hdGgucmFuZG9tKCksIDAuNyAqIE1hdGgucmFuZG9tKCksIDFdO1xuICAgIH1cbn07XG5cbi8vIEEgY29udGV4dCBvYmplY3QgdGhhdCBpcyBwYXNzZWQgdG8gc3R5bGUgcGFyc2luZyBmdW5jdGlvbnMgdG8gcHJvdmlkZSBhIHNjb3BlIG9mIGNvbW1vbmx5IHVzZWQgdmFsdWVzXG5TdHlsZVBhcnNlci5nZXRGZWF0dXJlUGFyc2VDb250ZXh0ID0gZnVuY3Rpb24gKGZlYXR1cmUsIHRpbGUsIGdsb2JhbCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGZlYXR1cmUsXG4gICAgICAgIHRpbGUsXG4gICAgICAgIGdsb2JhbCxcbiAgICAgICAgem9vbTogdGlsZS5zdHlsZV96b29tLFxuICAgICAgICBnZW9tZXRyeTogR2VvLmdlb21ldHJ5VHlwZShmZWF0dXJlLmdlb21ldHJ5LnR5cGUpLFxuICAgICAgICBtZXRlcnNfcGVyX3BpeGVsOiB0aWxlLm1ldGVyc19wZXJfcGl4ZWwsXG4gICAgICAgIHVuaXRzX3Blcl9tZXRlcjogdGlsZS51bml0c19wZXJfbWV0ZXJcbiAgICB9O1xufTtcblxuLy8gQnVpbGQgYSBzdHlsZSBwYXJhbSBjYWNoZSBvYmplY3Rcbi8vIGB2YWx1ZWAgaXMgcmF3IHZhbHVlLCBjYWNoZSBtZXRob2RzIHdpbGwgYWRkIG90aGVyIHByb3BlcnRpZXMgYXMgbmVlZGVkXG4vLyBgdHJhbnNmb3JtYCBpcyBvcHRpb25hbCB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gcnVuIG9uIHZhbHVlcyAoZXhjZXB0IGZ1bmN0aW9uIHZhbHVlcylcblN0eWxlUGFyc2VyLmNhY2hlT2JqZWN0ID0gZnVuY3Rpb24gKG9iaiwgdHJhbnNmb3JtID0gbnVsbCkge1xuICAgIGlmIChvYmogPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9iai52YWx1ZSkge1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogb2JqLnZhbHVlLCB6b29tOiAob2JqLnpvb20gPyB7fSA6IG51bGwpIH07IC8vIGNsb25lIGV4aXN0aW5nIGNhY2hlIG9iamVjdFxuICAgIH1cblxuICAgIGxldCBjID0geyB2YWx1ZTogb2JqIH07XG5cbiAgICBpZiAodHlwZW9mIHRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjLnZhbHVlKSAmJiBBcnJheS5pc0FycmF5KGMudmFsdWVbMF0pKSB7IC8vIHpvb20gc3RvcHNcbiAgICAgICAgICAgIGMudmFsdWUgPSBjLnZhbHVlLm1hcCh2ID0+IFt2WzBdLCB0cmFuc2Zvcm0odlsxXSldKTtcbiAgICAgICAgICAgIGMuem9vbSA9IHt9OyAvLyB3aWxsIGhvbGQgdmFsdWVzIGludGVycG9sYXRlZCBieSB6b29tXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGMudmFsdWUgIT09ICdmdW5jdGlvbicpIHsgLy8gZG9uJ3QgdHJhbnNmb3JtIGZ1bmN0aW9uc1xuICAgICAgICAgICAgYy52YWx1ZSA9IHRyYW5zZm9ybShjLnZhbHVlKTsgLy8gc2luZ2xlIHZhbHVlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYztcbn07XG5cbi8vIENvbnZlcnQgb2xkLXN0eWxlIGNvbG9yIG1hY3JvIGludG8gYSBmdW5jdGlvblxuLy8gVE9ETzogZGVwcmVjYXRlIHRoaXMgbWFjcm8gc3ludGF4XG5TdHlsZVBhcnNlci5jb2xvckNhY2hlT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChvYmosIHYgPT4ge1xuICAgICAgICBpZiAodiA9PT0gJ1N0eWxlLmNvbG9yLnBzZXVkb1JhbmRvbUNvbG9yJykge1xuICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnN0cmluZ1RvRnVuY3Rpb24oU3R5bGVQYXJzZXIud3JhcEZ1bmN0aW9uKFN0eWxlUGFyc2VyLm1hY3Jvc1snU3R5bGUuY29sb3IucHNldWRvUmFuZG9tQ29sb3InXSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHYgPT09ICdTdHlsZS5jb2xvci5yYW5kb21Db2xvcicpIHtcbiAgICAgICAgICAgIHJldHVybiBTdHlsZVBhcnNlci5tYWNyb3NbJ1N0eWxlLmNvbG9yLnJhbmRvbUNvbG9yJ107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdjtcbiAgICB9KTtcbn07XG5cbi8vIEludGVycG9sYXRpb24gYW5kIGNhY2hpbmcgZm9yIGEgZ2VuZXJpYyBwcm9wZXJ0eSAobm90IGEgY29sb3Igb3IgZGlzdGFuY2UpXG4vLyB7IHZhbHVlOiBvcmlnaW5hbCwgc3RhdGljOiB2YWwsIHpvb206IHsgMTogdmFsMSwgMjogdmFsMiwgLi4uIH0sIGR5bmFtaWM6IGZ1bmN0aW9uKCl7Li4ufSB9XG5TdHlsZVBhcnNlci5jYWNoZVByb3BlcnR5ID0gZnVuY3Rpb24odmFsLCBjb250ZXh0KSB7XG4gICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsLmR5bmFtaWMpIHsgLy8gZnVuY3Rpb24sIGNvbXB1dGUgZWFjaCB0aW1lIChubyBjYWNoaW5nKVxuICAgICAgICBsZXQgdiA9IHZhbC5keW5hbWljKGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsLnN0YXRpYykgeyAvLyBzaW5nbGUgc3RhdGljIHZhbHVlXG4gICAgICAgIHJldHVybiB2YWwuc3RhdGljO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwuem9vbSAmJiB2YWwuem9vbVtjb250ZXh0Lnpvb21dKSB7IC8vIGludGVycG9sYXRlZCwgY2FjaGVkXG4gICAgICAgIHJldHVybiB2YWwuem9vbVtjb250ZXh0Lnpvb21dO1xuICAgIH1cbiAgICBlbHNlIHsgLy8gbm90IHlldCBldmF1bGF0ZWQgZm9yIGNhY2hlXG4gICAgICAgIC8vIER5bmFtaWMgZnVuY3Rpb24tYmFzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbC5keW5hbWljID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgbGV0IHYgPSB2YWwuZHluYW1pYyhjb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG4gICAgICAgIC8vIEFycmF5IG9mIHpvb20taW50ZXJwb2xhdGVkIHN0b3BzLCBlLmcuIFt6b29tLCB2YWx1ZV0gcGFpcnNcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwudmFsdWUpICYmIEFycmF5LmlzQXJyYXkodmFsLnZhbHVlWzBdKSkge1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHZhbHVlIGZvciBjdXJyZW50IHpvb21cbiAgICAgICAgICAgIHZhbC56b29tID0gdmFsLnpvb20gfHwge307XG4gICAgICAgICAgICB2YWwuem9vbSA9IHt9O1xuICAgICAgICAgICAgdmFsLnpvb21bY29udGV4dC56b29tXSA9IFV0aWxzLmludGVycG9sYXRlKGNvbnRleHQuem9vbSwgdmFsLnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWwuem9vbVtjb250ZXh0Lnpvb21dO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNpbmdsZSBzdGF0aWMgdmFsdWVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWwuc3RhdGljID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHZhbC5zdGF0aWM7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5TdHlsZVBhcnNlci5jb252ZXJ0VW5pdHMgPSBmdW5jdGlvbih2YWwsIGNvbnRleHQpIHtcbiAgICAvLyBwcmUtcGFyc2VkIHVuaXRzXG4gICAgaWYgKHZhbC52YWwgIT0gbnVsbCkge1xuICAgICAgICBpZiAodmFsLnVuaXRzID09PSAncHgnKSB7IC8vIGNvbnZlcnQgZnJvbSBwaXhlbHNcbiAgICAgICAgICAgIHJldHVybiB2YWwudmFsICogR2VvLm1ldGVyc1BlclBpeGVsKGNvbnRleHQuem9vbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbC52YWw7XG4gICAgfVxuICAgIC8vIHVuLXBhcnNlZCB1bml0IHN0cmluZ1xuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciB1bml0cyA9IHZhbC5tYXRjaCgvKFswLTkuLV0rKShbYS16XSspLyk7XG4gICAgICAgIGlmICh1bml0cyAmJiB1bml0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHZhbCA9IHBhcnNlRmxvYXQodW5pdHNbMV0pO1xuICAgICAgICAgICAgdW5pdHMgPSB1bml0c1syXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ3B4JykgeyAvLyBjb252ZXJ0IGZyb20gcGl4ZWxzXG4gICAgICAgICAgICB2YWwgKj0gR2VvLm1ldGVyc1BlclBpeGVsKGNvbnRleHQuem9vbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbXVsdGlwbGUgdmFsdWVzIG9yIHN0b3BzXG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIC8vIEFycmF5IG9mIGFycmF5cywgZS5nLiB6b29tLWludGVycG9sYXRlZCBzdG9wc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxbMF0pKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLm1hcCh2ID0+IFt2WzBdLCBTdHlsZVBhcnNlci5jb252ZXJ0VW5pdHModlsxXSwgY29udGV4dCldKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBcnJheSBvZiB2YWx1ZXNcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLm1hcCh2ID0+IFN0eWxlUGFyc2VyLmNvbnZlcnRVbml0cyh2LCBjb250ZXh0KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIFByZS1wYXJzZSB1bml0cyBmcm9tIHN0cmluZyB2YWx1ZXNcblN0eWxlUGFyc2VyLmNhY2hlVW5pdHMgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgdmFyIG9iaiA9IHsgdmFsOiBwYXJzZUZsb2F0KHZhbCkgfTtcbiAgICBpZiAob2JqLnZhbCAhPT0gMCAmJiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwudHJpbSgpLnNsaWNlKC0yKSA9PT0gJ3B4Jykge1xuICAgICAgICBvYmoudW5pdHMgPSAncHgnO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufTtcblxuLy8gVGFrZXMgYSBkaXN0YW5jZSBjYWNoZSBvYmplY3QgYW5kIHJldHVybnMgYSBkaXN0YW5jZSB2YWx1ZSBmb3IgdGhpcyB6b29tXG4vLyAoY2FjaGluZyB0aGUgcmVzdWx0IGZvciBmdXR1cmUgdXNlKVxuLy8geyB2YWx1ZTogb3JpZ2luYWwsIHpvb206IHsgejogbWV0ZXJzIH0sIGR5bmFtaWM6IGZ1bmN0aW9uKCl7Li4ufSB9XG5TdHlsZVBhcnNlci5jYWNoZURpc3RhbmNlID0gZnVuY3Rpb24odmFsLCBjb250ZXh0KSB7XG4gICAgaWYgKHZhbC5keW5hbWljKSB7XG4gICAgICAgIGxldCB2ID0gdmFsLmR5bmFtaWMoY29udGV4dCk7XG4gICAgICAgIHJldHVybiB2O1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwuem9vbSAmJiB2YWwuem9vbVtjb250ZXh0Lnpvb21dKSB7XG4gICAgICAgIHJldHVybiB2YWwuem9vbVtjb250ZXh0Lnpvb21dO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gRHluYW1pYyBmdW5jdGlvbi1iYXNlZFxuICAgICAgICBpZiAodHlwZW9mIHZhbC52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsLmR5bmFtaWMgPSB2YWwudmFsdWU7XG4gICAgICAgICAgICBsZXQgdiA9IHZhbC5keW5hbWljKGNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXJyYXkgb2Ygem9vbS1pbnRlcnBvbGF0ZWQgc3RvcHMsIGUuZy4gW3pvb20sIHZhbHVlXSBwYWlyc1xuICAgICAgICBlbHNlIGlmICh2YWwuem9vbSkge1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHZhbHVlIGZvciBjdXJyZW50IHpvb21cbiAgICAgICAgICAgIC8vIERvIGZpbmFsIHVuaXQgY29udmVyc2lvbiBhcyBsYXRlIGFzIHBvc3NpYmxlLCB3aGVuIGludGVycG9sYXRpb24gdmFsdWVzIGhhdmUgYmVlbiBkZXRlcm1pbmVkXG4gICAgICAgICAgICB2YWwuem9vbVtjb250ZXh0Lnpvb21dID0gVXRpbHMuaW50ZXJwb2xhdGUoY29udGV4dC56b29tLCB2YWwudmFsdWUsXG4gICAgICAgICAgICAgICAgdiA9PiBTdHlsZVBhcnNlci5jb252ZXJ0VW5pdHModiwgY29udGV4dCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gdmFsLnpvb21bY29udGV4dC56b29tXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBTdHlsZVBhcnNlci5jb252ZXJ0VW5pdHModmFsLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8vIENhY2hlIHByZXZpb3VzbHkgcGFyc2VkIGNvbG9yIHN0cmluZ3NcblN0eWxlUGFyc2VyLnN0cmluZ19jb2xvcnMgPSB7fTtcblN0eWxlUGFyc2VyLmNvbG9yRm9yU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgLy8gQ2FjaGVkXG4gICAgaWYgKFN0eWxlUGFyc2VyLnN0cmluZ19jb2xvcnNbc3RyaW5nXSkge1xuICAgICAgICByZXR1cm4gU3R5bGVQYXJzZXIuc3RyaW5nX2NvbG9yc1tzdHJpbmddO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBhbmQgY2FjaGVcbiAgICBsZXQgY29sb3IgPSBwYXJzZUNTU0NvbG9yLnBhcnNlQ1NTQ29sb3Ioc3RyaW5nKTtcbiAgICBpZiAoY29sb3IgJiYgY29sb3IubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIGNvbG9yWzBdIC89IDI1NTtcbiAgICAgICAgY29sb3JbMV0gLz0gMjU1O1xuICAgICAgICBjb2xvclsyXSAvPSAyNTU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb2xvciA9IFN0eWxlUGFyc2VyLmRlZmF1bHRzLmNvbG9yO1xuICAgIH1cbiAgICBTdHlsZVBhcnNlci5zdHJpbmdfY29sb3JzW3N0cmluZ10gPSBjb2xvcjtcbiAgICByZXR1cm4gY29sb3I7XG59O1xuXG4vLyBUYWtlcyBhIGNvbG9yIGNhY2hlIG9iamVjdCBhbmQgcmV0dXJucyBhIGNvbG9yIHZhbHVlIGZvciB0aGlzIHpvb21cbi8vIChjYWNoaW5nIHRoZSByZXN1bHQgZm9yIGZ1dHVyZSB1c2UpXG4vLyB7IHZhbHVlOiBvcmlnaW5hbCwgc3RhdGljOiBbcixnLGIsYV0sIHpvb206IHsgejogW3IsZyxiLGFdIH0sIGR5bmFtaWM6IGZ1bmN0aW9uKCl7Li4ufSB9XG5TdHlsZVBhcnNlci5jYWNoZUNvbG9yID0gZnVuY3Rpb24odmFsLCBjb250ZXh0ID0ge30pIHtcbiAgICBpZiAodmFsLmR5bmFtaWMpIHtcbiAgICAgICAgbGV0IHYgPSB2YWwuZHluYW1pYyhjb250ZXh0KTtcblxuICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2ID0gU3R5bGVQYXJzZXIuY29sb3JGb3JTdHJpbmcodik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodiAmJiB2WzNdID09IG51bGwpIHtcbiAgICAgICAgICAgIHZbM10gPSAxOyAvLyBkZWZhdWx0IGFscGhhXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbC5zdGF0aWMpIHtcbiAgICAgICAgcmV0dXJuIHZhbC5zdGF0aWM7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbC56b29tICYmIHZhbC56b29tW2NvbnRleHQuem9vbV0pIHtcbiAgICAgICAgcmV0dXJuIHZhbC56b29tW2NvbnRleHQuem9vbV07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBEeW5hbWljIGZ1bmN0aW9uLWJhc2VkIGNvbG9yXG4gICAgICAgIGlmICh0eXBlb2YgdmFsLnZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YWwuZHluYW1pYyA9IHZhbC52YWx1ZTtcbiAgICAgICAgICAgIGxldCB2ID0gdmFsLmR5bmFtaWMoY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2ID0gU3R5bGVQYXJzZXIuY29sb3JGb3JTdHJpbmcodik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2ICYmIHZbM10gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZbM10gPSAxOyAvLyBkZWZhdWx0IGFscGhhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTaW5nbGUgc3RyaW5nIGNvbG9yXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWwuc3RhdGljID0gU3R5bGVQYXJzZXIuY29sb3JGb3JTdHJpbmcodmFsLnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWwuc3RhdGljO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFycmF5IG9mIHpvb20taW50ZXJwb2xhdGVkIHN0b3BzLCBlLmcuIFt6b29tLCBjb2xvcl0gcGFpcnNcbiAgICAgICAgZWxzZSBpZiAodmFsLnpvb20pIHtcbiAgICAgICAgICAgIC8vIFBhcnNlIGFueSBzdHJpbmcgY29sb3JzIGluc2lkZSBzdG9wcywgdGhlIGZpcnN0IHRpbWUgd2UgZW5jb3VudGVyIHRoaXMgcHJvcGVydHlcbiAgICAgICAgICAgIGlmICghdmFsLnpvb21fcHJlcHJvY2Vzc2VkKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgdmFsLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdmFsLnZhbHVlW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodiAmJiB0eXBlb2YgdlsxXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZbMV0gPSBTdHlsZVBhcnNlci5jb2xvckZvclN0cmluZyh2WzFdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWwuem9vbV9wcmVwcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgY29sb3IgZm9yIGN1cnJlbnQgem9vbVxuICAgICAgICAgICAgdmFsLnpvb21bY29udGV4dC56b29tXSA9IFV0aWxzLmludGVycG9sYXRlKGNvbnRleHQuem9vbSwgdmFsLnZhbHVlKTtcbiAgICAgICAgICAgIHZhbC56b29tW2NvbnRleHQuem9vbV1bM10gPSB2YWwuem9vbVtjb250ZXh0Lnpvb21dWzNdIHx8IDE7IC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgICAgIHJldHVybiB2YWwuem9vbVtjb250ZXh0Lnpvb21dO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNpbmdsZSBhcnJheSBjb2xvclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbC5zdGF0aWMgPSB2YWwudmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsLnN0YXRpYyAmJiB2YWwuc3RhdGljWzNdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YWwuc3RhdGljWzNdID0gMTsgLy8gZGVmYXVsdCBhbHBoYVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbC5zdGF0aWM7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5TdHlsZVBhcnNlci5wYXJzZUNvbG9yID0gZnVuY3Rpb24odmFsLCBjb250ZXh0ID0ge30pIHtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWwgPSB2YWwoY29udGV4dCk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgQ1NTLXN0eWxlIGNvbG9yc1xuICAgIC8vIFRPRE86IGNoYW5nZSBhbGwgY29sb3JzIHRvIHVzZSAwLTI1NSByYW5nZSBpbnRlcm5hbGx5IHRvIGF2b2lkIGRpdmlkaW5nIGFuZCB0aGVuIHJlLW11bHRpcGx5aW5nIGluIGdlb20gYnVpbGRlclxuICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWwgPSBTdHlsZVBhcnNlci5jb2xvckZvclN0cmluZyh2YWwpO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbCkgJiYgQXJyYXkuaXNBcnJheSh2YWxbMF0pKSB7XG4gICAgICAgIC8vIEFycmF5IG9mIHpvb20taW50ZXJwb2xhdGVkIHN0b3BzLCBlLmcuIFt6b29tLCBjb2xvcl0gcGFpcnNcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgdiA9IHZhbFtpXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdlsxXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2WzFdID0gU3R5bGVQYXJzZXIuY29sb3JGb3JTdHJpbmcodlsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC56b29tKSB7XG4gICAgICAgICAgICB2YWwgPSBVdGlscy5pbnRlcnBvbGF0ZShjb250ZXh0Lnpvb20sIHZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0c1xuICAgIGlmICh2YWwpIHtcbiAgICAgICAgLy8gYWxwaGFcbiAgICAgICAgaWYgKHZhbFszXSA9PSBudWxsKSB7XG4gICAgICAgICAgICB2YWxbM10gPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YWwgPSBbMCwgMCwgMCwgMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbn07XG5cblN0eWxlUGFyc2VyLmNhbGN1bGF0ZU9yZGVyID0gZnVuY3Rpb24ob3JkZXIsIGNvbnRleHQpIHtcbiAgICAvLyBDb21wdXRlZCBvcmRlclxuICAgIGlmICh0eXBlb2Ygb3JkZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3JkZXIgPSBvcmRlcihjb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG9yZGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBPcmRlciB0aWVkIHRvIGZlYXR1cmUgcHJvcGVydHlcbiAgICAgICAgaWYgKGNvbnRleHQuZmVhdHVyZS5wcm9wZXJ0aWVzW29yZGVyXSkge1xuICAgICAgICAgICAgb3JkZXIgPSBjb250ZXh0LmZlYXR1cmUucHJvcGVydGllc1tvcmRlcl07XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXhwbGljaXQgb3JkZXIgdmFsdWVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcmRlciA9IHBhcnNlRmxvYXQob3JkZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyO1xufTtcblxuLy8gRXZhbHVhdGUgYSBmdW5jdGlvbi1iYXNlZCBwcm9wZXJ0eSwgb3IgcGFzcy10aHJvdWdoIHN0YXRpYyB2YWx1ZVxuU3R5bGVQYXJzZXIuZXZhbFByb3AgPSBmdW5jdGlvbihwcm9wLCBjb250ZXh0KSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBwcm9wKGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcDtcbn07XG5cbi8vIFN1YnN0aXR1dGVzIGdsb2JhbCBzY2VuZSBwcm9wZXJ0aWVzICh0aG9zZSBkZWZpbmVkIGluIHRoZSBgY29uZmlnLmdsb2JhbGAgb2JqZWN0KSBmb3IgYW55IHN0eWxlIHZhbHVlc1xuLy8gb2YgdGhlIGZvcm0gYGdsb2JhbC5gLCBmb3IgZXhhbXBsZSBgY29sb3I6IGdsb2JhbC5wYXJrX2NvbG9yYCB3b3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSB2YWx1ZSAoaWYgYW55KVxuLy8gZGVmaW5lZCBmb3IgdGhlIGBwYXJrX2NvbG9yYCBwcm9wZXJ0eSBpbiBgY29uZmlnLmdsb2JhbC5wYXJrX2NvbG9yYC5cblN0eWxlUGFyc2VyLmFwcGx5R2xvYmFsUHJvcGVydGllcyA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICBpZiAoIWNvbmZpZy5nbG9iYWwgfHwgT2JqZWN0LmtleXMoY29uZmlnLmdsb2JhbCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBjb25maWc7IC8vIG5vIGdsb2JhbCBwcm9wZXJ0aWVzIHRvIHRyYW5zZm9ybVxuICAgIH1cblxuICAgIGNvbnN0IHNlcGFyYXRvciA9ICc6JztcbiAgICBjb25zdCBwcm9wcyA9IGZsYXR0ZW5Qcm9wZXJ0aWVzKGNvbmZpZy5nbG9iYWwsIHNlcGFyYXRvcik7XG5cbiAgICBmdW5jdGlvbiBhcHBseVByb3BzIChvYmopIHtcbiAgICAgICAgLy8gQ29udmVydCBzdHJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gKG9iai5zbGljZSgwLCA3KSA9PT0gJ2dsb2JhbC4nKSAmJiAob2JqLnNsaWNlKDcpLnJlcGxhY2UoL1xcLi9nLCBzZXBhcmF0b3IpKTtcbiAgICAgICAgICAgIGlmIChrZXkgJiYgcHJvcHNba2V5XSkge1xuICAgICAgICAgICAgICAgIG9iaiA9IHByb3BzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwIGluIG9iaikge1xuICAgICAgICAgICAgICAgIG9ialtwXSA9IGFwcGx5UHJvcHMob2JqW3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiBhcHBseVByb3BzKGNvbmZpZyk7XG59O1xuXG4vLyBGbGF0dGVuIG5lc3RlZCBwcm9wZXJ0aWVzIGZvciBzaW1wbGVyIHN0cmluZyBsb29rLXVwc1xuLy8gZS5nLiBnbG9iYWwuYmFja2dyb3VuZC5jb2xvciAtPiAnZ2xvYmFsOmJhY2tncm91bmQ6Y29sb3InXG5mdW5jdGlvbiBmbGF0dGVuUHJvcGVydGllcyAob2JqLCBzZXBhcmF0b3IgPSAnOicsIHByZWZpeCA9IG51bGwsIHByb3BzID0ge30pIHtcbiAgICBwcmVmaXggPSBwcmVmaXggPyAocHJlZml4ICsgc2VwYXJhdG9yKSA6ICcnO1xuXG4gICAgZm9yIChsZXQgcCBpbiBvYmopIHtcbiAgICAgICAgbGV0IGtleSA9IHByZWZpeCArIHA7XG4gICAgICAgIGxldCB2YWwgPSBvYmpbcF07XG4gICAgICAgIHByb3BzW2tleV0gPSB2YWw7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgIGZsYXR0ZW5Qcm9wZXJ0aWVzKHZhbCwgc2VwYXJhdG9yLCBrZXksIHByb3BzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcHM7XG59XG4iLCJpbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vLi4vZ2wvdGV4dHVyZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhbnZhc1RleHQge1xuXG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnOyAvLyByZW5kZXIgdGV4dCBvbiB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kXG4gICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgfVxuXG4gICAgcmVzaXplICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZm9udCBzdHlsZSBwYXJhbXMgZm9yIGNhbnZhcyBkcmF3aW5nXG4gICAgc2V0Rm9udCAoeyBmb250X2NzcywgZmlsbCwgc3Ryb2tlLCBzdHJva2Vfd2lkdGgsIHB4X3NpemUgfSkge1xuICAgICAgICB0aGlzLnB4X3NpemUgPSBweF9zaXplO1xuICAgICAgICB0aGlzLnRleHRfYnVmZmVyID0gODsgLy8gcGl4ZWwgcGFkZGluZyBhcm91bmQgdGV4dFxuICAgICAgICBsZXQgY3R4ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgICAgIGN0eC5mb250ID0gZm9udF9jc3M7XG4gICAgICAgIGlmIChzdHJva2UpIHtcbiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZTtcbiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBzdHJva2Vfd2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBudWxsO1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGw7XG4gICAgICAgIGN0eC5taXRlckxpbWl0ID0gMjtcbiAgICB9XG5cbiAgICB0ZXh0U2l6ZXMgKHRleHRzKSB7XG4gICAgICAgIGZvciAobGV0IHN0eWxlIGluIHRleHRzKSB7XG4gICAgICAgICAgICBsZXQgdGV4dF9pbmZvcyA9IHRleHRzW3N0eWxlXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgdGV4dCBpbiB0ZXh0X2luZm9zKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRleHRfc2V0dGluZ3MgPSB0ZXh0X2luZm9zW3RleHRdLnRleHRfc2V0dGluZ3M7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRleHQgc2l6ZXNcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvbnQodGV4dF9zZXR0aW5ncyk7IC8vIFRPRE86IG9ubHkgc2V0IG9uY2UgYWJvdmVcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICB0ZXh0X2luZm9zW3RleHRdLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRTaXplKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfc2V0dGluZ3MudHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9zZXR0aW5ncy50ZXh0X3dyYXBcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dHM7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZXMgd2lkdGggYW5kIGhlaWdodCBvZiB0ZXh0IGJhc2VkIG9uIGN1cnJlbnQgZm9udCBzdHlsZVxuICAgIC8vIEluY2x1ZGVzIHdvcmQgd3JhcHBpbmcsIHJldHVybnMgc2l6ZSBpbmZvIGZvciB3aG9sZSB0ZXh0IGJsb2NrIGFuZCBpbmRpdmlkdWFsIGxpbmVzXG4gICAgdGV4dFNpemUgKHRleHQsIHRyYW5zZm9ybSwgdGV4dF93cmFwKSB7XG4gICAgICAgIGxldCBzdHIgPSB0aGlzLmFwcGx5VGV4dFRyYW5zZm9ybSh0ZXh0LCB0cmFuc2Zvcm0pO1xuICAgICAgICBsZXQgY3R4ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBsZXQgYnVmZmVyID0gdGhpcy50ZXh0X2J1ZmZlciAqIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbztcbiAgICAgICAgbGV0IGxlYWRpbmcgPSAyICogVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvOyAvLyBtYWtlIGNvbmZpZ3VyYWJsZSBhbmQvb3IgdXNlIENhbnZhcyBUZXh0TWV0cmljcyB3aGVuIGF2YWlsYWJsZVxuICAgICAgICBsZXQgbGluZV9oZWlnaHQgPSB0aGlzLnB4X3NpemUgKyBsZWFkaW5nOyAvLyBweF9zaXplIGFscmVhZHkgaW4gZGV2aWNlIHBpeGVsc1xuXG4gICAgICAgIC8vIFdvcmQgd3JhcHBpbmdcbiAgICAgICAgLy8gTGluZSBicmVha3MgY2FuIGJlIGNhdXNlZCBieTpcbiAgICAgICAgLy8gIC0gaW1wbGljaXQgbGluZSBicmVhayB3aGVuIGEgbWF4aW11bSBjaGFyYWN0ZXIgdGhyZXNob2xkIGlzIGV4Y2VlZGVkIHBlciBsaW5lICh0ZXh0X3dyYXApXG4gICAgICAgIC8vICAtIGV4cGxpY2l0IGxpbmUgYnJlYWsgaW4gdGhlIGxhYmVsIHRleHQgKFxcbilcbiAgICAgICAgbGV0IHdvcmRzO1xuICAgICAgICBpZiAodHlwZW9mIHRleHRfd3JhcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHdvcmRzID0gc3RyLnNwbGl0KCcgJyk7IC8vIHNwbGl0IHdvcmRzIG9uIHNwYWNlc1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd29yZHMgPSBbc3RyXTsgLy8gbm8gbWF4IGxpbmUgd29yZCB3cmFwcGluZyAoYnV0IG5ldyBsaW5lcyB3aWxsIHN0aWxsIGJlIGluIGVmZmVjdClcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3X2xpbmVfdGVtcGxhdGUgPSB7IHdpZHRoOiAwLCBjaGFyczogMCwgdGV4dDogJycgfTtcbiAgICAgICAgbGV0IGxpbmUgPSBPYmplY3QuYXNzaWduKHt9LCBuZXdfbGluZV90ZW1wbGF0ZSk7IC8vIGN1cnJlbnQgbGluZVxuICAgICAgICBsZXQgbGluZXMgPSBbXTsgLy8gY29tcGxldGVkIGxpbmVzXG4gICAgICAgIGxldCBtYXhfd2lkdGggPSAwOyAvLyBtYXggd2lkdGggdG8gZml0IGFsbCBsaW5lc1xuXG4gICAgICAgIC8vIGFkZCBjdXJyZW50IGxpbmUgYnVmZmVyIHRvIGNvbXBsZXRlZCBsaW5lcywgb3B0aW9uYWxseSBzdGFydCBuZXcgbGluZVxuICAgICAgICBmdW5jdGlvbiBhZGRMaW5lIChuZXdfbGluZSkge1xuICAgICAgICAgICAgbGluZS50ZXh0ID0gbGluZS50ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgIGlmIChsaW5lLnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxpbmUud2lkdGggPSBjdHgubWVhc3VyZVRleHQobGluZS50ZXh0KS53aWR0aDtcbiAgICAgICAgICAgICAgICBtYXhfd2lkdGggPSBNYXRoLm1heChtYXhfd2lkdGgsIE1hdGguY2VpbChsaW5lLndpZHRoKSk7XG4gICAgICAgICAgICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXdfbGluZSkge1xuICAgICAgICAgICAgICAgIGxpbmUgPSBPYmplY3QuYXNzaWduKHt9LCBuZXdfbGluZV90ZW1wbGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJzdCBpdGVyYXRlIG9uIHNwYWNlLWJyZWFrIGdyb3VwcyAod2lsbCBiZSBvbmUgaWYgbWF4IGxpbmUgbGVuZ3RoIG9mZiksIHRoZW4gaXRlcmF0ZSBvbiBsaW5lLWJyZWFrIGdyb3Vwc1xuICAgICAgICBmb3IgKGxldCB3PTA7IHcgPCB3b3Jkcy5sZW5ndGg7IHcrKykge1xuICAgICAgICAgICAgbGV0IGJyZWFrcyA9IHdvcmRzW3ddLnNwbGl0KCdcXG4nKTsgLy8gc3BsaXQgb24gbGluZSBicmVha3NcblxuICAgICAgICAgICAgZm9yIChsZXQgbj0wOyBuIDwgYnJlYWtzLmxlbmd0aDsgbisrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHdvcmQgPSBicmVha3Nbbl07XG5cbiAgICAgICAgICAgICAgICAvLyBpZiBhZGRpbmcgY3VycmVudCB3b3JkIHdvdWxkIG92ZXJmbG93LCBhZGQgYSBuZXcgbGluZSBpbnN0ZWFkXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuY2hhcnMgKyB3b3JkLmxlbmd0aCA+IHRleHRfd3JhcCAmJiBsaW5lLmNoYXJzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRMaW5lKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFkZCBjdXJyZW50IHdvcmQgKHBsdXMgc3BhY2UpXG4gICAgICAgICAgICAgICAgbGluZS5jaGFycyArPSB3b3JkLmxlbmd0aCArIDE7XG4gICAgICAgICAgICAgICAgbGluZS50ZXh0ICs9IHdvcmQgKyAnICc7XG5cbiAgICAgICAgICAgICAgICAvLyBpZiBsaW5lIGJyZWFrcyBwcmVzZW50LCBhZGQgbmV3IGxpbmUgKHVubGVzcyBvbiBsYXN0IGxpbmUpXG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrcy5sZW5ndGggPiAxICYmIG4gPCBicmVha3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhZGRMaW5lKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhZGRMaW5lKGZhbHNlKTtcblxuICAgICAgICAvLyBGaW5hbCBkaW1lbnNpb25zIG9mIHRleHRcbiAgICAgICAgbGV0IGhlaWdodCA9IGxpbmVzLmxlbmd0aCAqIGxpbmVfaGVpZ2h0O1xuXG4gICAgICAgIGxldCBjb2xsaXNpb25fc2l6ZSA9IFtcbiAgICAgICAgICAgIG1heF93aWR0aCAvIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbyxcbiAgICAgICAgICAgIGhlaWdodCAvIFV0aWxzLmRldmljZV9waXhlbF9yYXRpb1xuICAgICAgICBdO1xuXG4gICAgICAgIGxldCB0ZXh0dXJlX3NpemUgPSBbXG4gICAgICAgICAgICBtYXhfd2lkdGggKyBidWZmZXIgKiAyLFxuICAgICAgICAgICAgaGVpZ2h0ICsgYnVmZmVyICogMlxuICAgICAgICBdO1xuXG4gICAgICAgIGxldCBsb2dpY2FsX3NpemUgPSB0ZXh0dXJlX3NpemUubWFwKHYgPT4gdiAvIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbyk7XG5cbiAgICAgICAgLy8gUmV0dXJucyBsaW5lcyAody9wZXItbGluZSBpbmZvIGZvciBkcmF3aW5nKSBhbmQgdGV4dCdzIG92ZXJhbGwgYm91bmRpbmcgYm94ICsgY2FudmFzIHNpemVcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmVzLFxuICAgICAgICAgICAgc2l6ZTogeyBjb2xsaXNpb25fc2l6ZSwgdGV4dHVyZV9zaXplLCBsb2dpY2FsX3NpemUsIGxpbmVfaGVpZ2h0IH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBEcmF3IG9uZSBvciBtb3JlIGxpbmVzIG9mIHRleHQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uLCBhZGp1c3RpbmcgZm9yIGJ1ZmZlciBhbmQgYmFzZWxpbmVcbiAgICBkcmF3VGV4dCAobGluZXMsIFt4LCB5XSwgc2l6ZSwgeyBzdHJva2UsIHRyYW5zZm9ybSwgYWxpZ24gfSkge1xuICAgICAgICBhbGlnbiA9IGFsaWduIHx8ICdjZW50ZXInO1xuXG4gICAgICAgIGZvciAobGV0IGxpbmVfbnVtPTA7IGxpbmVfbnVtIDwgbGluZXMubGVuZ3RoOyBsaW5lX251bSsrKSB7XG4gICAgICAgICAgICBsZXQgbGluZSA9IGxpbmVzW2xpbmVfbnVtXTtcbiAgICAgICAgICAgIGxldCBzdHIgPSB0aGlzLmFwcGx5VGV4dFRyYW5zZm9ybShsaW5lLnRleHQsIHRyYW5zZm9ybSk7XG4gICAgICAgICAgICBsZXQgYnVmZmVyID0gdGhpcy50ZXh0X2J1ZmZlciAqIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbztcbiAgICAgICAgICAgIGxldCB0ZXh0dXJlX3NpemUgPSBzaXplLnRleHR1cmVfc2l6ZTtcbiAgICAgICAgICAgIGxldCBsaW5lX2hlaWdodCA9IHNpemUubGluZV9oZWlnaHQ7XG5cbiAgICAgICAgICAgIC8vIFRleHQgYWxpZ25tZW50XG4gICAgICAgICAgICBsZXQgdHg7XG4gICAgICAgICAgICBpZiAoYWxpZ24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgIHR4ID0geCArIGJ1ZmZlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICAgIHR4ID0geCArIHRleHR1cmVfc2l6ZVswXS8yIC0gbGluZS53aWR0aC8yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICB0eCA9IHggKyB0ZXh0dXJlX3NpemVbMF0gLSBsaW5lLndpZHRoIC0gYnVmZmVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJbiB0aGUgYWJzZW5jZSBvZiBiZXR0ZXIgQ2FudmFzIFRleHRNZXRyaWNzIChub3Qgc3VwcG9ydGVkIGJ5IGJyb3dzZXJzIHlldCksXG4gICAgICAgICAgICAvLyAwLjc1IGJ1ZmZlciBwcm9kdWNlcyBhIGJldHRlciBhcHByb3hpbWF0ZSB2ZXJ0aWNhbCBjZW50ZXJpbmcgb2YgdGV4dFxuICAgICAgICAgICAgbGV0IHR5ID0geSArIGJ1ZmZlciAqIDAuNzUgKyAobGluZV9udW0gKyAxKSAqIGxpbmVfaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoc3Ryb2tlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVRleHQoc3RyLCB0eCwgdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KHN0ciwgdHgsIHR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJhc3Rlcml6ZSAodGV4dHMsIHRleHR1cmVfc2l6ZSkge1xuICAgICAgICBmb3IgKGxldCBzdHlsZSBpbiB0ZXh0cykge1xuICAgICAgICAgICAgbGV0IHRleHRfaW5mb3MgPSB0ZXh0c1tzdHlsZV07XG5cbiAgICAgICAgICAgIGZvciAobGV0IHRleHQgaW4gdGV4dF9pbmZvcykge1xuICAgICAgICAgICAgICAgIGxldCBpbmZvID0gdGV4dF9pbmZvc1t0ZXh0XTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9udChpbmZvLnRleHRfc2V0dGluZ3MpOyAvLyBUT0RPOiBvbmx5IHNldCBvbmNlIGFib3ZlXG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3VGV4dChpbmZvLmxpbmVzLCBpbmZvLnBvc2l0aW9uLCBpbmZvLnNpemUsIHtcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBpbmZvLnRleHRfc2V0dGluZ3Muc3Ryb2tlLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IGluZm8udGV4dF9zZXR0aW5ncy50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICAgIGFsaWduOiBpbmZvLnRleHRfc2V0dGluZ3MuYWxpZ25cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGluZm8udGV4Y29vcmRzID0gVGV4dHVyZS5nZXRUZXhjb29yZHNGb3JTcHJpdGUoXG4gICAgICAgICAgICAgICAgICAgIGluZm8ucG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGluZm8uc2l6ZS50ZXh0dXJlX3NpemUsXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmVfc2l6ZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQbGFjZSB0ZXh0IGxhYmVscyB3aXRoaW4gYW4gYXRsYXMgb2YgdGhlIGdpdmVuIG1heCBzaXplXG4gICAgc2V0VGV4dHVyZVRleHRQb3NpdGlvbnMgKHRleHRzLCBtYXhfdGV4dHVyZV9zaXplKSB7XG4gICAgICAgIC8vIEZpbmQgd2lkZXN0IGxhYmVsXG4gICAgICAgIGxldCB3aWRlc3QgPSAwO1xuICAgICAgICBmb3IgKGxldCBzdHlsZSBpbiB0ZXh0cykge1xuICAgICAgICAgICAgbGV0IHRleHRfaW5mb3MgPSB0ZXh0c1tzdHlsZV07XG4gICAgICAgICAgICBmb3IgKGxldCB0ZXh0IGluIHRleHRfaW5mb3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2l6ZSA9IHRleHRfaW5mb3NbdGV4dF0uc2l6ZS50ZXh0dXJlX3NpemU7XG4gICAgICAgICAgICAgICAgaWYgKHNpemVbMF0gPiB3aWRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkZXN0ID0gc2l6ZVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMYXlvdXQgbGFiZWxzLCBzdGFja2VkIGluIGNvbHVtbnNcbiAgICAgICAgbGV0IGN4ID0gMCwgY3kgPSAwOyAvLyBjdXJyZW50IHgveSBwb3NpdGlvbiBpbiBhdGxhc1xuICAgICAgICBsZXQgaGVpZ2h0ID0gMDsgICAgIC8vIG92ZXJhbGwgYXRsYXMgaGVpZ2h0XG4gICAgICAgIGZvciAobGV0IHN0eWxlIGluIHRleHRzKSB7XG4gICAgICAgICAgICBsZXQgdGV4dF9pbmZvcyA9IHRleHRzW3N0eWxlXTtcbiAgICAgICAgICAgIGZvciAobGV0IHRleHQgaW4gdGV4dF9pbmZvcykge1xuICAgICAgICAgICAgICAgIGxldCB0ZXh0X2luZm8gPSB0ZXh0X2luZm9zW3RleHRdO1xuICAgICAgICAgICAgICAgIGxldCBzaXplID0gdGV4dF9pbmZvLnNpemUudGV4dHVyZV9zaXplO1xuICAgICAgICAgICAgICAgIGlmIChjeSArIHNpemVbMV0gPCBtYXhfdGV4dHVyZV9zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRfaW5mby5wb3NpdGlvbiA9IFtjeCwgY3ldOyAvLyBhZGQgbGFiZWwgdG8gY3VycmVudCBjb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgY3kgKz0gc2l6ZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN5ID4gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBjeTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gc3RhcnQgbmV3IGNvbHVtbiBpZiB0YWxsZXIgdGhhbiB0ZXh0dXJlXG4gICAgICAgICAgICAgICAgICAgIGN4ICs9IHdpZGVzdDtcbiAgICAgICAgICAgICAgICAgICAgY3kgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0X2luZm8ucG9zaXRpb24gPSBbY3gsIGN5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2N4ICsgd2lkZXN0LCBoZWlnaHRdOyAvLyBvdmVyYWxsIGF0bGFzIHNpemVcbiAgICB9XG5cbiAgICAvLyBDYWxsZWQgYmVmb3JlIHJhc3Rlcml6YXRpb25cbiAgICBhcHBseVRleHRUcmFuc2Zvcm0gKHRleHQsIHRyYW5zZm9ybSkge1xuICAgICAgICBpZiAodHJhbnNmb3JtID09PSAnY2FwaXRhbGl6ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xcd1xcUyovZywgZnVuY3Rpb24gKHR4dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0cmFuc2Zvcm0gPT09ICd1cHBlcmNhc2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybSA9PT0gJ2xvd2VyY2FzZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBmb250IENTUy1zdHlsZSBzaXplICgnMTJweCcsICcxNHB0JywgJzEuNWVtJywgZXRjLikgdG8gcGl4ZWwgc2l6ZSAoYWRqdXN0ZWQgZm9yIGRldmljZSBwaXhlbCByYXRpbylcbiAgICAvLyBEZWZhdWx0cyB1bml0cyB0byBwaXhlbHMgaWYgbm90IHNwZWNpZmllZFxuICAgIHN0YXRpYyBmb250UGl4ZWxTaXplIChzaXplKSB7XG4gICAgICAgIGlmIChzaXplID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzaXplID0gKHR5cGVvZiBzaXplID09PSAnc3RyaW5nJykgPyBzaXplIDogU3RyaW5nKHNpemUpOyAvLyBuZWVkIGEgc3RyaW5nIGZvciByZWdleFxuXG4gICAgICAgIGxldCBbLCBweF9zaXplLCB1bml0c10gPSBzaXplLm1hdGNoKENhbnZhc1RleHQuZm9udF9zaXplX3JlKSB8fCBbXTtcbiAgICAgICAgdW5pdHMgPSB1bml0cyB8fCAncHgnO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gXCJlbVwiKSB7XG4gICAgICAgICAgICBweF9zaXplICo9IDE2O1xuICAgICAgICB9IGVsc2UgaWYgKHVuaXRzID09PSBcInB0XCIpIHtcbiAgICAgICAgICAgIHB4X3NpemUgLz0gMC43NTtcbiAgICAgICAgfSBlbHNlIGlmICh1bml0cyA9PT0gXCIlXCIpIHtcbiAgICAgICAgICAgIHB4X3NpemUgLz0gNi4yNTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4X3NpemUgPSBwYXJzZUZsb2F0KHB4X3NpemUpO1xuICAgICAgICBweF9zaXplICo9IFV0aWxzLmRldmljZV9waXhlbF9yYXRpbztcbiAgICAgICAgcmV0dXJuIHB4X3NpemU7XG4gICAgfVxuXG59XG5cbi8vIEV4dHJhY3QgZm9udCBzaXplIGFuZCB1bml0c1xuQ2FudmFzVGV4dC5mb250X3NpemVfcmUgPSAvKCg/OlswLTldKlxcLik/WzAtOV0rKVxccyoocHh8cHR8ZW18JSk/LztcbiIsIi8vIFRleHQgcmVuZGVyaW5nIHN0eWxlXG5cbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uLy4uL2dsL3RleHR1cmUnO1xuaW1wb3J0IFdvcmtlckJyb2tlciBmcm9tICcuLi8uLi91dGlscy93b3JrZXJfYnJva2VyJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgR2VvIGZyb20gJy4uLy4uL2dlbyc7XG5pbXBvcnQge1N0eWxlfSBmcm9tICcuLi9zdHlsZSc7XG5pbXBvcnQge1BvaW50c30gZnJvbSAnLi4vcG9pbnRzL3BvaW50cyc7XG5pbXBvcnQgQ2FudmFzVGV4dCBmcm9tICcuL2NhbnZhc190ZXh0JztcbmltcG9ydCBDb2xsaXNpb24gZnJvbSAnLi4vLi4vbGFiZWxzL2NvbGxpc2lvbic7XG5pbXBvcnQgTGFiZWxQb2ludCBmcm9tICcuLi8uLi9sYWJlbHMvbGFiZWxfcG9pbnQnO1xuaW1wb3J0IExhYmVsTGluZSBmcm9tICcuLi8uLi9sYWJlbHMvbGFiZWxfbGluZSc7XG5pbXBvcnQgVGV4dFNldHRpbmdzIGZyb20gJy4vdGV4dF9zZXR0aW5ncyc7XG5pbXBvcnQge1N0eWxlUGFyc2VyfSBmcm9tICcuLi9zdHlsZV9wYXJzZXInO1xuXG5pbXBvcnQgbG9nIGZyb20gJ2xvZ2xldmVsJztcblxuZXhwb3J0IGxldCBUZXh0U3R5bGUgPSBPYmplY3QuY3JlYXRlKFBvaW50cyk7XG5cbk9iamVjdC5hc3NpZ24oVGV4dFN0eWxlLCB7XG4gICAgbmFtZTogJ3RleHQnLFxuICAgIHN1cGVyOiBQb2ludHMsXG4gICAgYnVpbHRfaW46IHRydWUsXG4gICAgc2VsZWN0aW9uOiBmYWxzZSwgLy8gbm8gZmVhdHVyZSBzZWxlY3Rpb24gZm9yIHRleHQgYnkgZGVmYXVsdFxuXG4gICAgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdXBlci5pbml0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgLy8gUG9pbnQgc3R5bGUgKHBhcmVudCBjbGFzcykgcmVxdWlyZXMgdGV4dHVyaW5nIHRvIGJlIHR1cm5lZCBvblxuICAgICAgICAvLyAobGFiZWxzIGFyZSBhbHdheXMgZHJhd24gd2l0aCB0ZXh0dXJlcylcbiAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fUE9JTlRfVEVYVFVSRSA9IHRydWU7XG5cbiAgICAgICAgLy8gTWFudWFsbHkgdW4tbXVsdGlwbHkgYWxwaGEsIGJlY2F1c2UgQ2FudmFzIHRleHQgcmFzdGVyaXphdGlvbiBpcyBwcmUtbXVsdGlwbGllZFxuICAgICAgICB0aGlzLmRlZmluZXMuVEFOR1JBTV9VTk1VTFRJUExZX0FMUEhBID0gdHJ1ZTtcblxuICAgICAgICAvLyBGYWRlIG91dCB0ZXh0IHdoZW4gdGlsZSBpcyB6b29taW5nIG91dCwgZS5nLiBhY3RpbmcgYXMgcHJveHkgdGlsZXNcbiAgICAgICAgdGhpcy5kZWZpbmVzLlRBTkdSQU1fRkFERV9PTl9aT09NX09VVCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVmaW5lcy5UQU5HUkFNX0ZBREVfT05fWk9PTV9PVVRfUkFURSA9IDI7IC8vIGZhZGUgYXQgMngsIGUuZy4gZnVsbHkgdHJhbnNwYXJlbnQgYXQgMC41IHpvb20gbGV2ZWwgYXdheVxuXG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9LFxuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuc3VwZXIucmVzZXQuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKFV0aWxzLmlzTWFpblRocmVhZCkge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBuZXcgQ2FudmFzVGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzV29ya2VyVGhyZWFkKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRzID0ge307IC8vIHVuaXF1ZSB0ZXh0cywgZ3JvdXBlZCBieSB0aWxlLCBieSBzdHlsZVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIENhbGxlZCBvbiB3b3JrZXIgdGhyZWFkIHRvIHJlbGVhc2UgdGlsZS1zcGVjaWZpYyByZXNvdXJjZXNcbiAgICBmcmVlVGlsZSAodGlsZSkge1xuICAgICAgICBkZWxldGUgdGhpcy50ZXh0c1t0aWxlLmtleV07XG4gICAgfSxcblxuICAgIC8vIEZyZWUgdGlsZS1zcGVjaWZpYyByZXNvdXJjZXMgYmVmb3JlIGZpbnNoaW5nIHN0eWxlIGNvbnN0cnVjdGlvblxuICAgIGZpbmlzaFRpbGUodGlsZSkge1xuICAgICAgICB0aGlzLmZyZWVUaWxlKHRpbGUpO1xuICAgICAgICByZXR1cm4gU3R5bGUuZW5kRGF0YS5jYWxsKHRoaXMsIHRpbGUpO1xuICAgIH0sXG5cbiAgICAvLyBPdmVycmlkZSB0byBxdWV1ZSBmZWF0dXJlcyBpbnN0ZWFkIG9mIHByb2Nlc3NpbmcgaW1tZWRpYXRlbHlcbiAgICBhZGRGZWF0dXJlIChmZWF0dXJlLCBkcmF3LCBjb250ZXh0KSB7XG4gICAgICAgIGxldCB0aWxlID0gY29udGV4dC50aWxlO1xuICAgICAgICBpZiAodGlsZS5nZW5lcmF0aW9uICE9PSB0aGlzLmdlbmVyYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhbGxlZCBoZXJlIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGVsYXllZCB1bnRpbCB0aGUgZmVhdHVyZSBxdWV1ZSBpcyBwYXJzZWQsXG4gICAgICAgIC8vIGFuZCB3ZSB3YW50IHRoZSBwcmVwcm9jZXNzaW5nIGRvbmUgYmVmb3JlIHdlIGV2YWx1YXRlIHRleHQgc3R5bGUgYmVsb3dcbiAgICAgICAgZHJhdyA9IHRoaXMucHJlcHJvY2VzcyhkcmF3KTtcbiAgICAgICAgaWYgKCFkcmF3KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb21wdXRlIGxhYmVsIHRleHRcbiAgICAgICAgbGV0IHRleHQgPSB0aGlzLnBhcnNlVGV4dFNvdXJjZShmZWF0dXJlLCBkcmF3LCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBubyB0ZXh0IGZvciB0aGlzIGZlYXR1cmVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbXB1dGUgdGV4dCBzdHlsZSBhbmQgbGF5b3V0IHNldHRpbmdzIGZvciB0aGlzIGZlYXR1cmUgbGFiZWxcbiAgICAgICAgbGV0IGxheW91dCA9IHRoaXMuY29tcHV0ZUxheW91dCh7fSwgZmVhdHVyZSwgZHJhdywgY29udGV4dCwgdGlsZSwgdGV4dCk7XG4gICAgICAgIGxldCB0ZXh0X3NldHRpbmdzID0gVGV4dFNldHRpbmdzLmNvbXB1dGUoZmVhdHVyZSwgZHJhdywgY29udGV4dCk7XG4gICAgICAgIGxldCB0ZXh0X3NldHRpbmdzX2tleSA9IFRleHRTZXR0aW5ncy5rZXkodGV4dF9zZXR0aW5ncyk7XG5cbiAgICAgICAgLy8gZmlyc3QgbGFiZWwgaW4gdGlsZSwgb3Igd2l0aCB0aGlzIHN0eWxlP1xuICAgICAgICB0aGlzLnRleHRzW3RpbGUua2V5XSA9IHRoaXMudGV4dHNbdGlsZS5rZXldIHx8IHt9O1xuICAgICAgICB0aGlzLnRleHRzW3RpbGUua2V5XVt0ZXh0X3NldHRpbmdzX2tleV0gPSB0aGlzLnRleHRzW3RpbGUua2V5XVt0ZXh0X3NldHRpbmdzX2tleV0gfHwge307XG5cbiAgICAgICAgLy8gdW5pcXVlIHRleHQgc3RyaW5ncywgZ3JvdXBlZCBieSB0ZXh0IGRyYXdpbmcgc3R5bGVcbiAgICAgICAgaWYgKCF0aGlzLnRleHRzW3RpbGUua2V5XVt0ZXh0X3NldHRpbmdzX2tleV1bdGV4dF0pIHtcbiAgICAgICAgICAgIC8vIGZpcnN0IGxhYmVsIHdpdGggdGhpcyB0ZXh0L3N0eWxlL3RpbGUgY29tYmluYXRpb24sIG1ha2UgYSBuZXcgbGFiZWwgZW50cnlcbiAgICAgICAgICAgIHRoaXMudGV4dHNbdGlsZS5rZXldW3RleHRfc2V0dGluZ3Nfa2V5XVt0ZXh0XSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0X3NldHRpbmdzLFxuICAgICAgICAgICAgICAgIHJlZjogMCAvLyAjIG9mIHRpbWVzIHRoaXMgdGV4dC9zdHlsZSBjb21ibyBhcHBlYXJzIGluIHRpbGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBRdWV1ZSB0aGUgZmVhdHVyZSBmb3IgcHJvY2Vzc2luZ1xuICAgICAgICBpZiAoIXRoaXMudGlsZV9kYXRhW3RpbGUua2V5XSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydERhdGEodGlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucXVldWVzW3RpbGUua2V5XSkge1xuICAgICAgICAgICAgdGhpcy5xdWV1ZXNbdGlsZS5rZXldID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXVlc1t0aWxlLmtleV0ucHVzaCh7XG4gICAgICAgICAgICBmZWF0dXJlLCBkcmF3LCBjb250ZXh0LFxuICAgICAgICAgICAgdGV4dCwgdGV4dF9zZXR0aW5nc19rZXksIGxheW91dFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWdpc3RlciB3aXRoIGNvbGxpc2lvbiBtYW5hZ2VyXG4gICAgICAgIENvbGxpc2lvbi5hZGRTdHlsZSh0aGlzLm5hbWUsIHRpbGUua2V5KTtcbiAgICB9LFxuXG4gICAgLy8gT3ZlcnJpZGVcbiAgICBlbmREYXRhICh0aWxlKSB7XG4gICAgICAgIGxldCBxdWV1ZSA9IHRoaXMucXVldWVzW3RpbGUua2V5XTtcbiAgICAgICAgdGhpcy5xdWV1ZXNbdGlsZS5rZXldID0gW107XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudGV4dHNbdGlsZS5rZXldfHx7fSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaXJzdCBjYWxsIHRvIG1haW4gdGhyZWFkLCBhc2sgZm9yIHRleHQgcGl4ZWwgc2l6ZXNcbiAgICAgICAgcmV0dXJuIFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh0aGlzLm1haW5fdGhyZWFkX3RhcmdldCsnLmNhbGNUZXh0U2l6ZXMnLCB0aGlzLnRleHRzW3RpbGUua2V5XSkudGhlbih0ZXh0cyA9PiB7XG4gICAgICAgICAgICBpZiAodGlsZS5jYW5jZWxlZCkge1xuICAgICAgICAgICAgICAgIFV0aWxzLmxvZygndHJhY2UnLCBgU3R5bGUgJHt0aGlzLm5hbWV9OiBzdG9wIHRpbGUgYnVpbGQgYmVjYXVzZSB0aWxlIHdhcyBjYW5jZWxlZDogJHt0aWxlLmtleX0sIHBvc3QtY2FsY1RleHRTaXplcygpYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRleHRzKSB7XG4gICAgICAgICAgICAgICAgQ29sbGlzaW9uLmNvbGxpZGUoe30sIHRoaXMubmFtZSwgdGlsZS5rZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRpbGUodGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRleHRzW3RpbGUua2V5XSA9IHRleHRzO1xuXG4gICAgICAgICAgICBsZXQgbGFiZWxzID0gdGhpcy5jcmVhdGVMYWJlbHModGlsZS5rZXksIHF1ZXVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIENvbGxpc2lvbi5jb2xsaWRlKGxhYmVscywgdGhpcy5uYW1lLCB0aWxlLmtleSkudGhlbihsYWJlbHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aWxlLmNhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLmxvZygndHJhY2UnLCBgc3RvcCB0aWxlIGJ1aWxkIGJlY2F1c2UgdGlsZSB3YXMgY2FuY2VsZWQ6ICR7dGlsZS5rZXl9LCBwb3N0LWNvbGxpZGUoKWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGxhYmVscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVGlsZSh0aWxlKTsgLy8gbm8gbGFiZWxzIHZpc2libGUgZm9yIHRoaXMgdGlsZVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY3VsbFRleHRTdHlsZXModGV4dHMsIGxhYmVscyk7XG5cbiAgICAgICAgICAgICAgICAvLyBzZWNvbmQgY2FsbCB0byBtYWluIHRocmVhZCwgZm9yIHJhc3Rlcml6aW5nIHRoZSBzZXQgb2YgdGV4dHNcbiAgICAgICAgICAgICAgICByZXR1cm4gV29ya2VyQnJva2VyLnBvc3RNZXNzYWdlKHRoaXMubWFpbl90aHJlYWRfdGFyZ2V0KycucmFzdGVyaXplVGV4dHMnLCB0aWxlLmtleSwgdGV4dHMpLnRoZW4oKHsgdGV4dHMsIHRleHR1cmUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dHNbdGlsZS5rZXldID0gdGV4dHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIHF1ZXVlZCBmZWF0dXJlc1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHRfc2V0dGluZ3Nfa2V5ID0gcS50ZXh0X3NldHRpbmdzX2tleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dF9pbmZvID0gdGhpcy50ZXh0c1t0aWxlLmtleV0gJiYgdGhpcy50ZXh0c1t0aWxlLmtleV1bdGV4dF9zZXR0aW5nc19rZXldICYmIHRoaXMudGV4dHNbdGlsZS5rZXldW3RleHRfc2V0dGluZ3Nfa2V5XVtxLnRleHRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0dXAgc3R5bGluZyBvYmplY3QgZXhwZWN0ZWQgYnkgU3R5bGUgY2xhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3R5bGUgPSB0aGlzLmZlYXR1cmVfc3R5bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUubGFiZWwgPSBxLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnNpemUgPSB0ZXh0X2luZm8uc2l6ZS5sb2dpY2FsX3NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuYW5nbGUgPSBVdGlscy5yYWRUb0RlZyhxLmxhYmVsLmFuZ2xlKSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnRleGNvb3JkcyA9IHRleHRfaW5mby50ZXhjb29yZHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZS5hZGRGZWF0dXJlLmNhbGwodGhpcywgcS5mZWF0dXJlLCBxLmRyYXcsIHEuY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRpbGUodGlsZSkudGhlbih0aWxlX2RhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXR0YWNoIHRpbGUtc3BlY2lmaWMgbGFiZWwgYXRsYXMgdG8gbWVzaCBhcyBhIHRleHR1cmUgdW5pZm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUgJiYgdGlsZV9kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZV9kYXRhLnVuaWZvcm1zLnVfdGV4dHVyZSA9IHRleHR1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZV9kYXRhLnRleHR1cmVzLnB1c2godGV4dHVyZSk7IC8vIGFzc2lnbiB0ZXh0dXJlIG93bmVyc2hpcCB0byB0aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbGVfZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGNyZWF0ZUxhYmVscyAodGlsZV9rZXksIGZlYXR1cmVfcXVldWUpIHtcbiAgICAgICAgbGV0IGxhYmVscyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGY9MDsgZiA8IGZlYXR1cmVfcXVldWUubGVuZ3RoOyBmKyspIHtcbiAgICAgICAgICAgIGxldCB7IGZlYXR1cmUsIGRyYXcsIGNvbnRleHQsIHRleHQsIHRleHRfc2V0dGluZ3Nfa2V5LCBsYXlvdXQgfSA9IGZlYXR1cmVfcXVldWVbZl07XG4gICAgICAgICAgICBsZXQgdGV4dF9pbmZvID0gdGhpcy50ZXh0c1t0aWxlX2tleV1bdGV4dF9zZXR0aW5nc19rZXldW3RleHRdO1xuXG4gICAgICAgICAgICBsZXQgZmVhdHVyZV9sYWJlbHMgPSB0aGlzLmJ1aWxkTGFiZWxzRnJvbUdlb21ldHJ5KHRleHRfaW5mby5zaXplLmNvbGxpc2lvbl9zaXplLCBmZWF0dXJlLmdlb21ldHJ5LCBsYXlvdXQpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmZWF0dXJlX2xhYmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBsYWJlbCA9IGZlYXR1cmVfbGFiZWxzW2ldO1xuICAgICAgICAgICAgICAgIGxhYmVscy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSwgZHJhdywgY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dCwgdGV4dF9zZXR0aW5nc19rZXksIGxheW91dCwgbGFiZWxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSB1bnVzZWQgdGV4dC9zdHlsZSBjb21iaW5hdGlvbnMgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmFzdGVyaXphdGlvblxuICAgIGN1bGxUZXh0U3R5bGVzKHRleHRzLCBsYWJlbHMpIHtcbiAgICAgICAgLy8gQ291bnQgaG93IG1hbnkgdGltZXMgZWFjaCB0ZXh0L3N0eWxlIGNvbWJpbmF0aW9uIGlzIHVzZWRcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0ZXh0c1tsYWJlbHNbaV0udGV4dF9zZXR0aW5nc19rZXldW2xhYmVsc1tpXS50ZXh0XS5yZWYrKztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0ZXh0L3N0eWxlIGNvbWJpbmF0aW9ucyB0aGF0IGhhdmUgbm8gdmlzaWJsZSBsYWJlbHNcbiAgICAgICAgZm9yIChsZXQgc3R5bGUgaW4gdGV4dHMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHRleHQgaW4gdGV4dHNbc3R5bGVdKSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gbGFiZWxzIGZvciB0aGlzIHRleHRcbiAgICAgICAgICAgICAgICBpZiAodGV4dHNbc3R5bGVdW3RleHRdLnJlZiA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYGRyb3AgbGFiZWwgdGV4dCAke3RleHR9IGluIHN0eWxlICR7c3R5bGV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0ZXh0c1tzdHlsZV1bdGV4dF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgc3R5bGUgaW4gdGV4dHMpIHtcbiAgICAgICAgICAgIC8vIG5vIGxhYmVscyBmb3IgdGhpcyBzdHlsZVxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRleHRzW3N0eWxlXSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYGRyb3AgbGFiZWwgdGV4dCBzdHlsZSAke3N0eWxlfWApO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0ZXh0c1tzdHlsZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2FsbGVkIG9uIG1haW4gdGhyZWFkIGZyb20gd29ya2VyLCB0byBjb21wdXRlIHRoZSBzaXplIG9mIGVhY2ggdGV4dCBzdHJpbmcsXG4gICAgLy8gd2VyZSBpdCB0byBiZSByZW5kZXJlZC4gVGhpcyBpbmZvIGlzIHRoZW4gdXNlZCB0byBwZXJmb3JtIGluaXRpYWwgbGFiZWwgY3VsbGluZywgKmJlZm9yZSpcbiAgICAvLyBsYWJlbHMgYXJlIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgIGNhbGNUZXh0U2l6ZXMgKHRleHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbnZhcy50ZXh0U2l6ZXModGV4dHMpO1xuICAgIH0sXG5cbiAgICAvLyBDYWxsZWQgb24gbWFpbiB0aHJlYWQgZnJvbSB3b3JrZXIsIHRvIGNyZWF0ZSBhdGxhcyBvZiBsYWJlbHMgZm9yIGEgdGlsZVxuICAgIHJhc3Rlcml6ZVRleHRzICh0aWxlX2tleSwgdGV4dHMpIHtcbiAgICAgICAgbGV0IGNhbnZhcyA9IG5ldyBDYW52YXNUZXh0KCk7XG4gICAgICAgIGxldCB0ZXh0dXJlX3NpemUgPSBjYW52YXMuc2V0VGV4dHVyZVRleHRQb3NpdGlvbnModGV4dHMsIHRoaXMubWF4X3RleHR1cmVfc2l6ZSk7XG4gICAgICAgIGxvZy50cmFjZShgdGV4dCBzdW1tYXJ5IGZvciB0aWxlICR7dGlsZV9rZXl9OiBmaXRzIGluICR7dGV4dHVyZV9zaXplWzBdfXgke3RleHR1cmVfc2l6ZVsxXX1weGApO1xuXG4gICAgICAgIC8vIGZpdHMgaW4gbWF4IHRleHR1cmUgc2l6ZT9cbiAgICAgICAgaWYgKHRleHR1cmVfc2l6ZVswXSA8IHRoaXMubWF4X3RleHR1cmVfc2l6ZSAmJiB0ZXh0dXJlX3NpemVbMV0gPCB0aGlzLm1heF90ZXh0dXJlX3NpemUpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjYW52YXMgc2l6ZSAmIHJhc3Rlcml6ZSBhbGwgdGhlIHRleHQgc3RyaW5ncyB3ZSBuZWVkXG4gICAgICAgICAgICBjYW52YXMucmVzaXplKC4uLnRleHR1cmVfc2l6ZSk7XG4gICAgICAgICAgICBjYW52YXMucmFzdGVyaXplKHRleHRzLCB0ZXh0dXJlX3NpemUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbG9nLmVycm9yKFtcbiAgICAgICAgICAgICAgICBgTGFiZWwgYXRsYXMgZm9yIHRpbGUgJHt0aWxlX2tleX0gaXMgJHt0ZXh0dXJlX3NpemVbMF19eCR7dGV4dHVyZV9zaXplWzFdfXB4LCBgLFxuICAgICAgICAgICAgICAgIGBidXQgbWF4IEdMIHRleHR1cmUgc2l6ZSBpcyAke3RoaXMubWF4X3RleHR1cmVfc2l6ZX14JHt0aGlzLm1heF90ZXh0dXJlX3NpemV9cHhgXS5qb2luKCcnKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlXG4gICAgICAgIGxldCB0ID0gJ2xhYmVscy0nICsgdGlsZV9rZXkgKyAnLScgKyAoVGV4dFN0eWxlLnRleHR1cmVfaWQrKyk7XG4gICAgICAgIFRleHR1cmUuY3JlYXRlKHRoaXMuZ2wsIHQsIHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGNhbnZhcy5jYW52YXMsXG4gICAgICAgICAgICBmaWx0ZXJpbmc6ICdsaW5lYXInLFxuICAgICAgICAgICAgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBUZXh0dXJlLnJldGFpbih0KTtcblxuICAgICAgICByZXR1cm4geyB0ZXh0cywgdGV4dHVyZTogdCB9OyAvLyB0ZXh0dXJlIGlzIHJldHVybmVkIGJ5IG5hbWUgKG5vdCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgLy8gU2V0cyB1cCBjYWNoaW5nIGZvciBkcmF3IHJ1bGUgcHJvcGVydGllc1xuICAgIF9wcmVwcm9jZXNzIChkcmF3KSB7XG4gICAgICAgIGlmICghZHJhdy5mb250KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb2xvcnNcbiAgICAgICAgZHJhdy5mb250LmZpbGwgPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3LmZvbnQuZmlsbCk7XG4gICAgICAgIGlmIChkcmF3LmZvbnQuc3Ryb2tlKSB7XG4gICAgICAgICAgICBkcmF3LmZvbnQuc3Ryb2tlLmNvbG9yID0gU3R5bGVQYXJzZXIuY2FjaGVPYmplY3QoZHJhdy5mb250LnN0cm9rZS5jb2xvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb252ZXJ0IGZvbnQgYW5kIHRleHQgc3Ryb2tlIHNpemVzXG4gICAgICAgIGRyYXcuZm9udC5weF9zaXplID0gU3R5bGVQYXJzZXIuY2FjaGVPYmplY3QoZHJhdy5mb250LnNpemUsIENhbnZhc1RleHQuZm9udFBpeGVsU2l6ZSk7XG4gICAgICAgIGlmIChkcmF3LmZvbnQuc3Ryb2tlICYmIGRyYXcuZm9udC5zdHJva2Uud2lkdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgZHJhdy5mb250LnN0cm9rZS53aWR0aCA9IFN0eWxlUGFyc2VyLmNhY2hlT2JqZWN0KGRyYXcuZm9udC5zdHJva2Uud2lkdGgsIHBhcnNlRmxvYXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT2Zmc2V0ICgyZCBhcnJheSlcbiAgICAgICAgZHJhdy5vZmZzZXQgPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3Lm9mZnNldCwgdiA9PiAoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lm1hcChwYXJzZUZsb2F0KSkgfHwgMCk7XG5cbiAgICAgICAgLy8gQnVmZmVyICgxZCB2YWx1ZSBvciBvciAyZCBhcnJheSlcbiAgICAgICAgZHJhdy5idWZmZXIgPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3LmJ1ZmZlciwgdiA9PiAoQXJyYXkuaXNBcnJheSh2KSA/IHYgOiBbdiwgdl0pLm1hcChwYXJzZUZsb2F0KSB8fCAwKTtcblxuICAgICAgICAvLyBSZXBlYXQgcnVsZXNcbiAgICAgICAgZHJhdy5yZXBlYXRfZGlzdGFuY2UgPSBTdHlsZVBhcnNlci5jYWNoZU9iamVjdChkcmF3LnJlcGVhdF9kaXN0YW5jZSwgcGFyc2VGbG9hdCk7XG5cbiAgICAgICAgcmV0dXJuIGRyYXc7XG4gICAgfSxcblxuICAgIC8vIENvbXB1dGUgdGhlIGxhYmVsIHRleHQsIGRlZmF1bHQgaXMgdmFsdWUgb2YgZmVhdHVyZS5wcm9wZXJ0aWVzLm5hbWVcbiAgICAvLyAtIFN0cmluZyB2YWx1ZSBpbmRpY2F0ZXMgYSBmZWF0dXJlIHByb3BlcnR5IGxvb2stdXAsIGUuZy4gYHNob3J0X25hbWVgIG1lYW5zIHVzZSBmZWF0dXJlLnByb3BlcnRpZXMuc2hvcnRfbmFtZVxuICAgIC8vIC0gRnVuY3Rpb24gd2lsbCB1c2UgdGhlIHJldHVybiB2YWx1ZSBhcyB0aGUgbGFiZWwgdGV4dCAoZm9yIGN1c3RvbSBsYWJlbHMpXG4gICAgLy8gLSBBcnJheSAob2Ygc3RyaW5ncyBhbmQvb3IgZnVuY3Rpb25zKSBkZWZpbmVzIGEgbGlzdCBvZiBmYWxsYmFja3MsIGV2YWx1YXRlZCBhY2NvcmRpbmcgdG8gdGhlIGFib3ZlIHJ1bGVzLFxuICAgIC8vICAgd2l0aCB0aGUgZmlyc3Qgbm9uLW51bGwgdmFsdWUgdXNlZCBhcyB0aGUgbGFiZWwgdGV4dFxuICAgIC8vICAgZS5nLiBgW25hbWU6ZXMsIG5hbWU6ZW4sIG5hbWVdYCBwcmVmZXJzIFNwYW5pc2ggbmFtZXMsIGZvbGxvd2VkIGJ5IEVuZ2xpc2gsIGFuZCBsYXN0IHRoZSBkZWZhdWx0IGxvY2FsIG5hbWVcbiAgICBwYXJzZVRleHRTb3VyY2UgKGZlYXR1cmUsIGRyYXcsIGNvbnRleHQpIHtcbiAgICAgICAgbGV0IHRleHQ7XG4gICAgICAgIGxldCBzb3VyY2UgPSBkcmF3LnRleHRfc291cmNlIHx8ICduYW1lJztcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBzPTA7IHMgPCBzb3VyY2UubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVtzXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGZlYXR1cmUucHJvcGVydGllc1tzb3VyY2Vbc11dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNvdXJjZVtzXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc291cmNlW3NdKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBzdG9wIGlmIHdlIGZvdW5kIGEgdGV4dCBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGV4dCA9IGZlYXR1cmUucHJvcGVydGllc1tzb3VyY2VdO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRleHQgPSBzb3VyY2UoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfSxcblxuICAgIC8vIEFkZGl0aW9uYWwgdGV4dC1zcGVjaWZpYyBsYXlvdXQgc2V0dGluZ3NcbiAgICBjb21wdXRlTGF5b3V0ICh0YXJnZXQsIGZlYXR1cmUsIGRyYXcsIGNvbnRleHQsIHRpbGUsIHRleHQpIHtcbiAgICAgICAgbGV0IGxheW91dCA9IHRhcmdldCB8fCB7fTtcblxuICAgICAgICAvLyBjb21tb24gc2V0dGluZ3Mgdy9wb2ludHNcbiAgICAgICAgbGF5b3V0ID0gUG9pbnRzLmNvbXB1dGVMYXlvdXQobGF5b3V0LCBmZWF0dXJlLCBkcmF3LCBjb250ZXh0LCB0aWxlKTtcblxuICAgICAgICAvLyB0aWxlIGJvdW5kYXJ5IGhhbmRsaW5nXG4gICAgICAgIGxheW91dC5jdWxsX2Zyb21fdGlsZSA9IChkcmF3LmN1bGxfZnJvbV90aWxlICE9IG51bGwpID8gZHJhdy5jdWxsX2Zyb21fdGlsZSA6IHRydWU7XG4gICAgICAgIGxheW91dC5tb3ZlX2ludG9fdGlsZSA9IChkcmF3Lm1vdmVfaW50b190aWxlICE9IG51bGwpID8gZHJhdy5tb3ZlX2ludG9fdGlsZSA6IHRydWU7XG5cbiAgICAgICAgLy8gbGFiZWwgbGluZSBleGNlZWQgcGVyY2VudGFnZVxuICAgICAgICBpZiAoZHJhdy5saW5lX2V4Y2VlZCAmJiBkcmF3LmxpbmVfZXhjZWVkLnN1YnN0cigtMSkgPT09ICclJykge1xuICAgICAgICAgICAgbGF5b3V0LmxpbmVfZXhjZWVkID0gcGFyc2VGbG9hdChkcmF3LmxpbmVfZXhjZWVkLnN1YnN0cigwLGRyYXcubGluZV9leGNlZWQubGVuZ3RoLTEpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxheW91dC5saW5lX2V4Y2VlZCA9IDgwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVwZWF0IG1pbmltdW0gZGlzdGFuY2VcbiAgICAgICAgbGF5b3V0LnJlcGVhdF9kaXN0YW5jZSA9IFN0eWxlUGFyc2VyLmNhY2hlUHJvcGVydHkoZHJhdy5yZXBlYXRfZGlzdGFuY2UsIGNvbnRleHQpO1xuICAgICAgICBpZiAobGF5b3V0LnJlcGVhdF9kaXN0YW5jZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBsYXlvdXQucmVwZWF0X2Rpc3RhbmNlID0gR2VvLnRpbGVfc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBsYXlvdXQucmVwZWF0X2Rpc3RhbmNlICo9IGxheW91dC51bml0c19wZXJfcGl4ZWw7XG5cbiAgICAgICAgLy8gcmVwZWF0IGdyb3VwIGtleVxuICAgICAgICBpZiAodHlwZW9mIGRyYXcucmVwZWF0X2dyb3VwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBsYXlvdXQucmVwZWF0X2dyb3VwID0gZHJhdy5yZXBlYXRfZ3JvdXAoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGRyYXcucmVwZWF0X2dyb3VwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbGF5b3V0LnJlcGVhdF9ncm91cCA9IGRyYXcucmVwZWF0X2dyb3VwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGF5b3V0LnJlcGVhdF9ncm91cCA9IGRyYXcua2V5OyAvLyBkZWZhdWx0IHRvIHVuaXF1ZSBzZXQgb2YgbWF0Y2hpbmcgbGF5ZXJzXG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0LnJlcGVhdF9ncm91cCArPSAnLycgKyB0ZXh0O1xuXG4gICAgICAgIC8vIE1heCBudW1iZXIgb2Ygc3ViZGl2aXNpb25zIHRvIHRyeVxuICAgICAgICBsYXlvdXQuc3ViZGl2ID0gdGlsZS5vdmVyem9vbTI7XG5cbiAgICAgICAgcmV0dXJuIGxheW91dDtcbiAgICB9LFxuXG4gICAgLy8gQnVpbGRzIG9uZSBvciBtb3JlIGxhYmVscyBmb3IgYSBnZW9tZXRyeVxuICAgIGJ1aWxkTGFiZWxzRnJvbUdlb21ldHJ5IChzaXplLCBnZW9tZXRyeSwgb3B0aW9ucykge1xuICAgICAgICBsZXQgbGFiZWxzID0gW107XG5cbiAgICAgICAgaWYgKGdlb21ldHJ5LnR5cGUgPT09IFwiTGluZVN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkTGluZUxhYmVscyhzaXplLCBnZW9tZXRyeS5jb29yZGluYXRlcywgb3B0aW9ucywgbGFiZWxzKTtcbiAgICAgICAgfSBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIk11bHRpTGluZVN0cmluZ1wiKSB7XG4gICAgICAgICAgICBsZXQgbGluZXMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkTGluZUxhYmVscyhzaXplLCBsaW5lc1tpXSwgb3B0aW9ucywgbGFiZWxzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIlBvaW50XCIpIHtcbiAgICAgICAgICAgIGxhYmVscy5wdXNoKG5ldyBMYWJlbFBvaW50KGdlb21ldHJ5LmNvb3JkaW5hdGVzLCBzaXplLCBvcHRpb25zKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gXCJNdWx0aVBvaW50XCIpIHtcbiAgICAgICAgICAgIGxldCBwb2ludHMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBsYWJlbHMucHVzaChuZXcgTGFiZWxQb2ludChwb2ludHNbaV0sIHNpemUsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChnZW9tZXRyeS50eXBlID09PSBcIlBvbHlnb25cIikge1xuICAgICAgICAgICAgbGV0IGNlbnRyb2lkID0gR2VvLmNlbnRyb2lkKGdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdKTtcbiAgICAgICAgICAgIGxhYmVscy5wdXNoKG5ldyBMYWJlbFBvaW50KGNlbnRyb2lkLCBzaXplLCBvcHRpb25zKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gXCJNdWx0aVBvbHlnb25cIikge1xuICAgICAgICAgICAgbGV0IGNlbnRyb2lkID0gR2VvLm11bHRpQ2VudHJvaWQoZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgbGFiZWxzLnB1c2gobmV3IExhYmVsUG9pbnQoY2VudHJvaWQsIHNpemUsIG9wdGlvbnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgfSxcblxuICAgIC8vIEJ1aWxkIG9uZSBvciBtb3JlIGxhYmVscyBmb3IgYSBsaW5lIGdlb21ldHJ5XG4gICAgYnVpbGRMaW5lTGFiZWxzIChzaXplLCBsaW5lLCBvcHRpb25zLCBsYWJlbHMpIHtcbiAgICAgICAgbGV0IHN1YmRpdiA9IE1hdGgubWluKG9wdGlvbnMuc3ViZGl2LCBsaW5lLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAoc3ViZGl2ID4gMSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIG11bHRpcGxlIGxhYmVscyBmb3IgbGluZSwgd2l0aCBlYWNoIGFsbG90dGVkIGEgcmFuZ2Ugb2Ygc2VnbWVudHNcbiAgICAgICAgICAgIC8vIGluIHdoaWNoIGl0IHdpbGwgYXR0ZW1wdCB0byBwbGFjZVxuICAgICAgICAgICAgbGV0IHNlZ19wZXJfZGl2ID0gKGxpbmUubGVuZ3RoIC0gMSkgLyBzdWJkaXY7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBzdWJkaXY7IGkrKykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2VnbWVudF9zdGFydCA9IE1hdGguZmxvb3IoaSAqIHNlZ19wZXJfZGl2KTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnNlZ21lbnRfZW5kID0gTWF0aC5mbG9vcigoaSsxKSAqIHNlZ19wZXJfZGl2KTtcbiAgICAgICAgICAgICAgICBsYWJlbHMucHVzaChuZXcgTGFiZWxMaW5lKHNpemUsIGxpbmUsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMuc2VnbWVudF9zdGFydCA9IG51bGw7XG4gICAgICAgICAgICBvcHRpb25zLnNlZ21lbnRfZW5kID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxhYmVscy5wdXNoKG5ldyBMYWJlbExpbmUoc2l6ZSwgbGluZSwgb3B0aW9ucykpO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuVGV4dFN0eWxlLnRleHR1cmVfaWQgPSAwOyAvLyBuYW1lc3BhY2VzIHBlci10aWxlIGxhYmVsIHRleHR1cmVzXG4iLCJpbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IEdlbyBmcm9tICcuLi8uLi9nZW8nO1xuaW1wb3J0IHtTdHlsZVBhcnNlcn0gZnJvbSAnLi4vc3R5bGVfcGFyc2VyJztcbmltcG9ydCBQb2ludEFuY2hvciBmcm9tICcuLi9wb2ludHMvcG9pbnRfYW5jaG9yJztcblxudmFyIFRleHRTZXR0aW5ncztcblxuZXhwb3J0IGRlZmF1bHQgVGV4dFNldHRpbmdzID0ge1xuXG4gICAgLy8gQSBrZXkgZm9yIGdyb3VwaW5nIGFsbCBsYWJlbHMgb2YgdGhlIHNhbWUgdGV4dCBzdHlsZSAoZS5nLiBzYW1lIENhbnZhcyBzdGF0ZSwgdG8gbWluaW1pemUgc3RhdGUgY2hhbmdlcylcbiAgICBrZXkgKHNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBzZXR0aW5ncy5zdHlsZSxcbiAgICAgICAgICAgIHNldHRpbmdzLndlaWdodCxcbiAgICAgICAgICAgIHNldHRpbmdzLmZhbWlseSxcbiAgICAgICAgICAgIHNldHRpbmdzLnB4X3NpemUsXG4gICAgICAgICAgICBzZXR0aW5ncy5maWxsLFxuICAgICAgICAgICAgc2V0dGluZ3Muc3Ryb2tlLFxuICAgICAgICAgICAgc2V0dGluZ3Muc3Ryb2tlX3dpZHRoLFxuICAgICAgICAgICAgc2V0dGluZ3MudHJhbnNmb3JtLFxuICAgICAgICAgICAgc2V0dGluZ3MudGV4dF93cmFwLFxuICAgICAgICAgICAgc2V0dGluZ3MuYWxpZ25cbiAgICAgICAgXS5qb2luKCcvJyk7XG4gICAgfSxcblxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIHN0eWxlOiAnbm9ybWFsJyxcbiAgICAgICAgd2VpZ2h0OiBudWxsLFxuICAgICAgICBzaXplOiAnMTJweCcsXG4gICAgICAgIHB4X3NpemU6IDEyLFxuICAgICAgICBmYW1pbHk6ICdIZWx2ZXRpY2EnLFxuICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICB0ZXh0X3dyYXA6IDE1LFxuICAgICAgICBhbGlnbjogJ2NlbnRlcidcbiAgICB9LFxuXG4gICAgY29tcHV0ZSAoZmVhdHVyZSwgZHJhdywgY29udGV4dCkge1xuICAgICAgICBsZXQgc3R5bGUgPSB7fTtcblxuICAgICAgICBkcmF3LmZvbnQgPSBkcmF3LmZvbnQgfHwgdGhpcy5kZWZhdWx0cztcblxuICAgICAgICAvLyBVc2UgZmlsbCBpZiBzcGVjaWZpZWQsIG9yIGRlZmF1bHRcbiAgICAgICAgc3R5bGUuZmlsbCA9IChkcmF3LmZvbnQuZmlsbCAmJiBVdGlscy50b0NTU0NvbG9yKFN0eWxlUGFyc2VyLmNhY2hlQ29sb3IoZHJhdy5mb250LmZpbGwsIGNvbnRleHQpKSkgfHwgdGhpcy5kZWZhdWx0cy5maWxsO1xuXG4gICAgICAgIC8vIEZvbnQgcHJvcGVydGllcyBhcmUgbW9kZWxlZCBhZnRlciBDU1MgbmFtZXM6XG4gICAgICAgIC8vIC0gZmFtaWx5OiBIZWx2ZXRpY2EsIEZ1dHVyYSwgZXRjLlxuICAgICAgICAvLyAtIHNpemU6IGluIHB0LCBweCwgb3IgZW1cbiAgICAgICAgLy8gLSBzdHlsZTogbm9ybWFsLCBpdGFsaWMsIG9ibGlxdWVcbiAgICAgICAgLy8gLSB3ZWlnaHQ6IG5vcm1hbCwgYm9sZCwgZXRjLlxuICAgICAgICAvLyAtIHRyYW5zZm9ybTogY2FwaXRhbGl6ZSwgdXBwZXJjYXNlLCBsb3dlcmNhc2VcbiAgICAgICAgc3R5bGUuc3R5bGUgPSBkcmF3LmZvbnQuc3R5bGUgfHwgdGhpcy5kZWZhdWx0cy5zdHlsZTtcbiAgICAgICAgc3R5bGUud2VpZ2h0ID0gZHJhdy5mb250LndlaWdodCB8fCB0aGlzLmRlZmF1bHRzLndlaWdodDtcbiAgICAgICAgaWYgKGRyYXcuZm9udC5mYW1pbHkpIHtcbiAgICAgICAgICAgIHN0eWxlLmZhbWlseSA9IGRyYXcuZm9udC5mYW1pbHk7XG4gICAgICAgICAgICBpZiAoc3R5bGUuZmFtaWx5ICE9PSB0aGlzLmRlZmF1bHRzLmZhbWlseSkge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZhbWlseSArPSAnLCAnICsgdGhpcy5kZWZhdWx0cy5mYW1pbHk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdHlsZS5mYW1pbHkgPSB0aGlzLmRlZmF1bHRzLmZhbWlseTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IGRyYXcuZm9udC50cmFuc2Zvcm07XG5cbiAgICAgICAgLy8gb3JpZ2luYWwgc2l6ZSAobm90IGN1cnJlbnRseSB1c2VkLCBidXQgdXNlZnVsIGZvciBkZWJ1Z2dpbmcpXG4gICAgICAgIHN0eWxlLnNpemUgPSBkcmF3LmZvbnQuc2l6ZSB8fCB0aGlzLmRlZmF1bHRzLnNpemU7XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlZCBwaXhlbCBzaXplXG4gICAgICAgIHN0eWxlLnB4X3NpemUgPSBTdHlsZVBhcnNlci5jYWNoZVByb3BlcnR5KGRyYXcuZm9udC5weF9zaXplLCBjb250ZXh0KSB8fCB0aGlzLmRlZmF1bHRzLnB4X3NpemU7XG5cbiAgICAgICAgLy8gVXNlIHN0cm9rZSBpZiBzcGVjaWZpZWRcbiAgICAgICAgaWYgKGRyYXcuZm9udC5zdHJva2UgJiYgZHJhdy5mb250LnN0cm9rZS5jb2xvcikge1xuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlID0gVXRpbHMudG9DU1NDb2xvcihTdHlsZVBhcnNlci5jYWNoZUNvbG9yKGRyYXcuZm9udC5zdHJva2UuY29sb3IsIGNvbnRleHQpIHx8IHRoaXMuZGVmYXVsdHMuc3Ryb2tlKTtcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZV93aWR0aCA9IFN0eWxlUGFyc2VyLmNhY2hlUHJvcGVydHkoZHJhdy5mb250LnN0cm9rZS53aWR0aCwgY29udGV4dCkgfHwgdGhpcy5kZWZhdWx0cy5zdHJva2Vfd2lkdGg7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2Vfd2lkdGggKj0gVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvO1xuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGUuZm9udF9jc3MgPSB0aGlzLmZvbnRDU1Moc3R5bGUpO1xuXG4gICAgICAgIC8vIFdvcmQgd3JhcCBhbmQgdGV4dCBhbGlnbm1lbnRcbiAgICAgICAgLy8gTm90IGEgZm9udCBwcm9wZXJ0aWVzLCBidXQgYWZmZWN0IGF0bGFzIG9mIHVuaXF1ZSB0ZXh0IHRleHR1cmVzXG4gICAgICAgIGxldCB0ZXh0X3dyYXAgPSBkcmF3LnRleHRfd3JhcDsgLy8gdXNlIGV4cGxpY2l0bHkgc2V0IHZhbHVlXG4gICAgICAgIGlmICh0ZXh0X3dyYXAgPT0gbnVsbCAmJiBHZW8uZ2VvbWV0cnlUeXBlKGZlYXR1cmUuZ2VvbWV0cnkudHlwZSkgIT09ICdsaW5lJykge1xuICAgICAgICAgICAgLy8gcG9pbnQgbGFiZWxzIChmb3IgcG9pbnQgYW5kIHBvbHlnb24gZmVhdHVyZXMpIGhhdmUgd29yZCB3cmFwIG9uIHcvZGVmYXVsdCBtYXggbGVuZ3RoLFxuICAgICAgICAgICAgLy8gbGluZSBsYWJlbHMgZGVmYXVsdCBvZmZcbiAgICAgICAgICAgIHRleHRfd3JhcCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXR0aW5nIHRvICd0cnVlJyBjYXVzZXMgZGVmYXVsdCB3cmFwIHZhbHVlIHRvIGJlIHVzZWRcbiAgICAgICAgaWYgKHRleHRfd3JhcCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGV4dF93cmFwID0gdGhpcy5kZWZhdWx0cy50ZXh0X3dyYXA7XG4gICAgICAgIH1cbiAgICAgICAgc3R5bGUudGV4dF93cmFwID0gdGV4dF93cmFwO1xuXG4gICAgICAgIC8vIGRlZmF1bHQgYWxpZ25tZW50IHRvIG1hdGNoIGFuY2hvclxuICAgICAgICBpZiAoIWRyYXcuYWxpZ24gJiYgZHJhdy5hbmNob3IgJiYgZHJhdy5hbmNob3IgIT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICBpZiAoUG9pbnRBbmNob3IuaXNMZWZ0QW5jaG9yKGRyYXcuYW5jaG9yKSkge1xuICAgICAgICAgICAgICAgIGRyYXcuYWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoUG9pbnRBbmNob3IuaXNSaWdodEFuY2hvcihkcmF3LmFuY2hvcikpIHtcbiAgICAgICAgICAgICAgICBkcmF3LmFsaWduID0gJ2xlZnQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGUuYWxpZ24gPSBkcmF3LmFsaWduIHx8IHRoaXMuZGVmYXVsdHMuYWxpZ247XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICAvLyBCdWlsZCBDU1Mtc3R5bGUgZm9udCBzdHJpbmcgKHRvIHNldCBDYW52YXMgZHJhdyBzdGF0ZSlcbiAgICBmb250Q1NTICh7IHN0eWxlLCB3ZWlnaHQsIHB4X3NpemUsIGZhbWlseSB9KSB7XG4gICAgICAgIHJldHVybiBbc3R5bGUsIHdlaWdodCwgcHhfc2l6ZSArICdweCcsIGZhbWlseV1cbiAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4KSAvLyByZW1vdmUgbnVsbCBwcm9wc1xuICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICB9XG5cbn07XG4iLCJpbXBvcnQgR2VvIGZyb20gJy4vZ2VvJztcbmltcG9ydCB7U3R5bGVQYXJzZXJ9IGZyb20gJy4vc3R5bGVzL3N0eWxlX3BhcnNlcic7XG5pbXBvcnQge1N0eWxlTWFuYWdlcn0gZnJvbSAnLi9zdHlsZXMvc3R5bGVfbWFuYWdlcic7XG5pbXBvcnQgQ29sbGlzaW9uIGZyb20gJy4vbGFiZWxzL2NvbGxpc2lvbic7XG5pbXBvcnQgV29ya2VyQnJva2VyIGZyb20gJy4vdXRpbHMvd29ya2VyX2Jyb2tlcic7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL2dsL3RleHR1cmUnO1xuXG5pbXBvcnQge21hdDQsIHZlYzN9IGZyb20gJy4vdXRpbHMvZ2wtbWF0cml4JztcbmltcG9ydCBsb2cgZnJvbSAnbG9nbGV2ZWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaWxlIHtcblxuICAgIC8qKlxuICAgICAgICBUaWxlXG4gICAgICAgIEBjb25zdHJ1Y3RvclxuICAgICAgICBSZXF1aXJlZCBwcm9wZXJ0aWVzOlxuICAgICAgICBjb29yZHM6IG9iamVjdCB3aXRoIHt4LCB5LCB6fSBwcm9wZXJ0aWVzIGlkZW50aWZ5aW5nIHRpbGUgY29vcmRpbmF0ZSBsb2NhdGlvblxuICAgICAgICB3b3JrZXI6IHdlYiB3b3JrZXIgdG8gaGFuZGxlIHRpbGUgY29uc3RydWN0aW9uXG4gICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih7IGNvb3Jkcywgc3R5bGVfem9vbSwgc291cmNlLCB3b3JrZXIsIHZpZXcgfSkge1xuICAgICAgICB0aGlzLndvcmtlciA9IHdvcmtlcjtcbiAgICAgICAgdGhpcy52aWV3ID0gdmlldztcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGlvbiA9IG51bGw7XG5cbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJveHkgPSBudWxsO1xuICAgICAgICB0aGlzLnByb3h5X2RlcHRoID0gMDtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgICAgICB0aGlzLmRlYnVnID0ge307XG5cbiAgICAgICAgdGhpcy5jb29yZHMgPSBUaWxlLmNvb3JkaW5hdGVXaXRoTWF4Wm9vbShjb29yZHMsIHRoaXMuc291cmNlLm1heF96b29tKTtcbiAgICAgICAgdGhpcy5zdHlsZV96b29tID0gc3R5bGVfem9vbTsgLy8gem9vbSBsZXZlbCB0byBiZSB1c2VkIGZvciBzdHlsaW5nXG4gICAgICAgIHRoaXMub3Zlcnpvb20gPSBNYXRoLm1heCh0aGlzLnN0eWxlX3pvb20gLSB0aGlzLmNvb3Jkcy56LCAwKTsgLy8gbnVtYmVyIG9mIGxldmVscyBvZiBvdmVyem9vbWluZ1xuICAgICAgICB0aGlzLm92ZXJ6b29tMiA9IE1hdGgucG93KDIsIHRoaXMub3Zlcnpvb20pO1xuICAgICAgICB0aGlzLmtleSA9IFRpbGUua2V5KHRoaXMuY29vcmRzLCB0aGlzLnNvdXJjZSwgdGhpcy5zdHlsZV96b29tKTtcbiAgICAgICAgdGhpcy5taW4gPSBHZW8ubWV0ZXJzRm9yVGlsZSh0aGlzLmNvb3Jkcyk7XG4gICAgICAgIHRoaXMubWF4ID0gR2VvLm1ldGVyc0ZvclRpbGUoe3g6IHRoaXMuY29vcmRzLnggKyAxLCB5OiB0aGlzLmNvb3Jkcy55ICsgMSwgejogdGhpcy5jb29yZHMueiB9KSxcbiAgICAgICAgdGhpcy5zcGFuID0geyB4OiAodGhpcy5tYXgueCAtIHRoaXMubWluLngpLCB5OiAodGhpcy5tYXgueSAtIHRoaXMubWluLnkpIH07XG4gICAgICAgIHRoaXMuYm91bmRzID0geyBzdzogeyB4OiB0aGlzLm1pbi54LCB5OiB0aGlzLm1heC55IH0sIG5lOiB7IHg6IHRoaXMubWF4LngsIHk6IHRoaXMubWluLnkgfSB9O1xuICAgICAgICB0aGlzLmNlbnRlcl9kaXN0ID0gMDtcblxuICAgICAgICAvLyBVbml0cyBwZXIgcGl4ZWwgbmVlZHMgdG8gYWNjb3VudCBmb3Igb3Zlci16b29taW5nXG4gICAgICAgIHRoaXMudW5pdHNfcGVyX3BpeGVsID0gR2VvLnVuaXRzX3Blcl9waXhlbCAvIHRoaXMub3Zlcnpvb20yO1xuXG4gICAgICAgIHRoaXMubWV0ZXJzX3Blcl9waXhlbCA9IEdlby5tZXRlcnNQZXJQaXhlbCh0aGlzLmNvb3Jkcy56KTtcbiAgICAgICAgdGhpcy51bml0c19wZXJfbWV0ZXIgPSBHZW8udW5pdHNQZXJNZXRlcih0aGlzLmNvb3Jkcy56KTtcblxuICAgICAgICB0aGlzLm1lc2hlcyA9IHt9OyAvLyByZW5kZXJhYmxlIFZCTyBtZXNoZXMga2V5ZWQgYnkgc3R5bGVcbiAgICAgICAgdGhpcy50ZXh0dXJlcyA9IFtdOyAvLyB0ZXh0dXJlcyB0aGF0IHRoZSB0aWxlIG93bnMgKGxhYmVscywgZXRjLilcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlKHNwZWMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUaWxlKHNwZWMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb29yZChjKSB7XG4gICAgICAgIHJldHVybiB7eDogYy54LCB5OiBjLnksIHo6IGMueiwga2V5OiBUaWxlLmNvb3JkS2V5KGMpfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29vcmRLZXkoe3gsIHksIHp9KSB7XG4gICAgICAgIHJldHVybiB4ICsgJy8nICsgeSArICcvJyArIHo7XG4gICAgfVxuXG4gICAgc3RhdGljIGtleSAoY29vcmRzLCBzb3VyY2UsIHN0eWxlX3pvb20pIHtcbiAgICAgICAgY29vcmRzID0gVGlsZS5jb29yZGluYXRlV2l0aE1heFpvb20oY29vcmRzLCBzb3VyY2UubWF4X3pvb20pO1xuICAgICAgICBpZiAoY29vcmRzLnkgPCAwIHx8IGNvb3Jkcy55ID49ICgxIDw8IGNvb3Jkcy56KSB8fCBjb29yZHMueiA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjsgLy8gY3VsbCB0aWxlcyBvdXQgb2YgcmFuZ2UgKHggd2lsbCB3cmFwKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbc291cmNlLm5hbWUsIHN0eWxlX3pvb20sIGNvb3Jkcy54LCBjb29yZHMueSwgY29vcmRzLnpdLmpvaW4oJy8nKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29vcmRpbmF0ZUF0Wm9vbSh7eCwgeSwgeiwga2V5fSwgem9vbSkge1xuICAgICAgICBpZiAoeiAhPT0gem9vbSkge1xuICAgICAgICAgICAgbGV0IHpzY2FsZSA9IE1hdGgucG93KDIsIHogLSB6b29tKTtcbiAgICAgICAgICAgIHggPSBNYXRoLmZsb29yKHggLyB6c2NhbGUpO1xuICAgICAgICAgICAgeSA9IE1hdGguZmxvb3IoeSAvIHpzY2FsZSk7XG4gICAgICAgICAgICB6ID0gem9vbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVGlsZS5jb29yZCh7eCwgeSwgen0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb29yZGluYXRlV2l0aE1heFpvb20oe3gsIHksIHp9LCBtYXhfem9vbSkge1xuICAgICAgICBpZiAobWF4X3pvb20gIT09IHVuZGVmaW5lZCAmJiB6ID4gbWF4X3pvb20pIHtcbiAgICAgICAgICAgIHJldHVybiBUaWxlLmNvb3JkaW5hdGVBdFpvb20oe3gsIHksIHp9LCBtYXhfem9vbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFRpbGUuY29vcmQoe3gsIHksIHp9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY2hpbGRyZW5Gb3JDb29yZGluYXRlKHt4LCB5LCB6LCBrZXl9KSB7XG4gICAgICAgIGlmICghVGlsZS5jb29yZF9jaGlsZHJlbltrZXldKSB7XG4gICAgICAgICAgICB6Kys7XG4gICAgICAgICAgICB4ICo9IDI7XG4gICAgICAgICAgICB5ICo9IDI7XG4gICAgICAgICAgICBUaWxlLmNvb3JkX2NoaWxkcmVuW2tleV0gPSBbXG4gICAgICAgICAgICAgICAgVGlsZS5jb29yZCh7eCwgeSwgICAgICB6fSksIFRpbGUuY29vcmQoe3g6IHgrMSwgeSwgICAgICB6fSksXG4gICAgICAgICAgICAgICAgVGlsZS5jb29yZCh7eCwgeTogeSsxLCB6fSksIFRpbGUuY29vcmQoe3g6IHgrMSwgeTogeSsxLCB6fSlcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFRpbGUuY29vcmRfY2hpbGRyZW5ba2V5XTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNEZXNjZW5kYW50KHBhcmVudCwgZGVzY2VuZGFudCkge1xuICAgICAgICBpZiAoZGVzY2VuZGFudC56ID4gcGFyZW50LnopIHtcbiAgICAgICAgICAgIGxldCB7eCwgeX0gPSBUaWxlLmNvb3JkaW5hdGVBdFpvb20oZGVzY2VuZGFudCwgcGFyZW50LnopO1xuICAgICAgICAgICAgcmV0dXJuIChwYXJlbnQueCA9PT0geCAmJiBwYXJlbnQueSA9PT0geSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNvcnQgYSBzZXQgb2YgdGlsZSBpbnN0YW5jZXMgKHdoaWNoIGFscmVhZHkgaGF2ZSBhIGRpc3RhbmNlIGZyb20gY2VudGVyIHRpbGUgY29tcHV0ZWQpXG4gICAgc3RhdGljIHNvcnQodGlsZXMpIHtcbiAgICAgICAgcmV0dXJuIHRpbGVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGxldCBhZCA9IGEuY2VudGVyX2Rpc3Q7XG4gICAgICAgICAgICBsZXQgYmQgPSBiLmNlbnRlcl9kaXN0O1xuICAgICAgICAgICAgcmV0dXJuIChiZCA+IGFkID8gLTEgOiAoYmQgPT09IGFkID8gMCA6IDEpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRnJlZSByZXNvdXJjZXMgb3duZWQgYnkgdGlsZVxuICAgIGZyZWVSZXNvdXJjZXMgKCkge1xuICAgICAgICBpZiAodGhpcy5tZXNoZXMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG0gaW4gdGhpcy5tZXNoZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc2hlc1ttXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50ZXh0dXJlcykge1xuICAgICAgICAgICAgZm9yIChsZXQgdCBvZiB0aGlzLnRleHR1cmVzKSB7XG4gICAgICAgICAgICAgICAgVGV4dHVyZS5yZWxlYXNlKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZXNoZXMgPSB7fTtcbiAgICAgICAgdGhpcy50ZXh0dXJlcyA9IFtdO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMud29ya2VyTWVzc2FnZSgnc2VsZi5yZW1vdmVUaWxlJywgdGhpcy5rZXkpO1xuICAgICAgICB0aGlzLmZyZWVSZXNvdXJjZXMoKTtcbiAgICAgICAgdGhpcy53b3JrZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGJ1aWxkQXNNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UubmFtZSxcbiAgICAgICAgICAgIGNvb3JkczogdGhpcy5jb29yZHMsXG4gICAgICAgICAgICBtaW46IHRoaXMubWluLFxuICAgICAgICAgICAgbWF4OiB0aGlzLm1heCxcbiAgICAgICAgICAgIHVuaXRzX3Blcl9waXhlbDogdGhpcy51bml0c19wZXJfcGl4ZWwsXG4gICAgICAgICAgICBtZXRlcnNfcGVyX3BpeGVsOiB0aGlzLm1ldGVyc19wZXJfcGl4ZWwsXG4gICAgICAgICAgICB1bml0c19wZXJfbWV0ZXI6IHRoaXMudW5pdHNfcGVyX21ldGVyLFxuICAgICAgICAgICAgc3R5bGVfem9vbTogdGhpcy5zdHlsZV96b29tLFxuICAgICAgICAgICAgb3Zlcnpvb206IHRoaXMub3Zlcnpvb20sXG4gICAgICAgICAgICBvdmVyem9vbTI6IHRoaXMub3Zlcnpvb20yLFxuICAgICAgICAgICAgZ2VuZXJhdGlvbjogdGhpcy5nZW5lcmF0aW9uLFxuICAgICAgICAgICAgZGVidWc6IHRoaXMuZGVidWdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB3b3JrZXJNZXNzYWdlICguLi5tZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2UodGhpcy53b3JrZXIsIC4uLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGJ1aWxkKGdlbmVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjtcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53b3JrZXJNZXNzYWdlKCdzZWxmLmJ1aWxkVGlsZScsIHsgdGlsZTogdGhpcy5idWlsZEFzTWVzc2FnZSgpIH0pLmNhdGNoKGUgPT4geyB0aHJvdyBlOyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICAgQ2FsbGVkIG9uIHdvcmtlciB0byBjYW5jZWwgbG9hZGluZ1xuICAgICAgICBTdGF0aWMgbWV0aG9kIGJlY2F1c2UgdGhlIHdvcmtlciBvbmx5IGhhcyBvYmplY3QgcmVwcmVzZW50YXRpb25zIG9mIHRpbGUgZGF0YSwgdGhlcmUgaXMgbm9cbiAgICAgICAgdGlsZSBpbnN0YW5jZSBjcmVhdGVkIHlldC5cbiAgICAqL1xuICAgIHN0YXRpYyBjYW5jZWwodGlsZSkge1xuICAgICAgICBpZiAodGlsZSkge1xuICAgICAgICAgICAgdGlsZS5jYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGlsZS5zb3VyY2VfZGF0YSAmJiB0aWxlLnNvdXJjZV9kYXRhLnJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnNvdXJjZV9kYXRhLnJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFRpbGUuYWJvcnRCdWlsZCh0aWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgZ2VvbWV0cnkgZm9yIHRpbGUgLSBjYWxsZWQgYnkgd2ViIHdvcmtlclxuICAgIC8vIFJldHVybnMgYSBzZXQgb2YgdGlsZSBrZXlzIHRoYXQgc2hvdWxkIGJlIHNlbnQgdG8gdGhlIG1haW4gdGhyZWFkIChzbyB0aGF0IHdlIGNhbiBtaW5pbWl6ZSBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gd29ya2VyIGFuZCBtYWluIHRocmVhZClcbiAgICBzdGF0aWMgYnVpbGRHZW9tZXRyeSAodGlsZSwgeyBsYXllcnMsIHJ1bGVzLCBzdHlsZXMsIGdsb2JhbCB9KSB7XG4gICAgICAgIHRpbGUuZGVidWcucmVuZGVyaW5nID0gK25ldyBEYXRlKCk7XG4gICAgICAgIHRpbGUuZGVidWcuZmVhdHVyZXMgPSAwO1xuXG4gICAgICAgIGxldCBkYXRhID0gdGlsZS5zb3VyY2VfZGF0YTtcblxuICAgICAgICBDb2xsaXNpb24uc3RhcnRUaWxlKHRpbGUua2V5KTtcblxuICAgICAgICAvLyBUcmVhdCB0b3AtbGV2ZWwgc3R5bGUgcnVsZXMgYXMgJ2xheWVycydcbiAgICAgICAgZm9yIChsZXQgbGF5ZXJfbmFtZSBpbiBsYXllcnMpIHtcbiAgICAgICAgICAgIGxldCBsYXllciA9IGxheWVyc1tsYXllcl9uYW1lXTtcbiAgICAgICAgICAgIC8vIFNraXAgbGF5ZXJzIHdpdGggbm8gZGF0YSBzb3VyY2UgZGVmaW5lZFxuICAgICAgICAgICAgaWYgKCFsYXllciB8fCAhbGF5ZXIuZGF0YSkge1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKGBMYXllciAke2xheWVyfSB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2VvbWV0cnkgZGF0YSBzb3VyY2UgYW5kIHdpbGwgbm90IGJlIHJlbmRlcmVkLmApO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTb3VyY2UgbmFtZXMgZG9uJ3QgbWF0Y2hcbiAgICAgICAgICAgIGlmIChsYXllci5kYXRhLnNvdXJjZSAhPT0gdGlsZS5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGRhdGEgZm9yIG9uZSBvciBtb3JlIGxheWVycyBmcm9tIHNvdXJjZVxuICAgICAgICAgICAgbGV0IHNvdXJjZV9sYXllcnMgPSBUaWxlLmdldERhdGFGb3JTb3VyY2UoZGF0YSwgbGF5ZXIuZGF0YSwgbGF5ZXJfbmFtZSk7XG5cbiAgICAgICAgICAgIC8vIFJlbmRlciBmZWF0dXJlcyBpbiBsYXllclxuICAgICAgICAgICAgZm9yIChsZXQgcz0wOyBzIDwgc291cmNlX2xheWVycy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VfbGF5ZXIgPSBzb3VyY2VfbGF5ZXJzW3NdO1xuICAgICAgICAgICAgICAgIGxldCBnZW9tID0gc291cmNlX2xheWVyLmdlb207XG4gICAgICAgICAgICAgICAgaWYgKCFnZW9tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGYgPSAwOyBmIDwgZ2VvbS5mZWF0dXJlcy5sZW5ndGg7IGYrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmVhdHVyZSA9IGdlb20uZmVhdHVyZXNbZl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmdlb21ldHJ5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIGZlYXR1cmVzIHcvbyBnZW9tZXRyeSAodmFsaWQgR2VvSlNPTilcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250ZXh0ID0gU3R5bGVQYXJzZXIuZ2V0RmVhdHVyZVBhcnNlQ29udGV4dChmZWF0dXJlLCB0aWxlLCBnbG9iYWwpO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndpbmRpbmcgPSB0aWxlLmRlZmF1bHRfd2luZGluZztcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sYXllciA9IHNvdXJjZV9sYXllci5sYXllcjsgLy8gYWRkIGRhdGEgc291cmNlIGxheWVyIG5hbWVcblxuICAgICAgICAgICAgICAgICAgICAvLyBHZXQgZHJhdyBncm91cHMgZm9yIHRoaXMgZmVhdHVyZVxuICAgICAgICAgICAgICAgICAgICBsZXQgbGF5ZXJfcnVsZXMgPSBydWxlc1tsYXllcl9uYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRyYXdfZ3JvdXBzID0gbGF5ZXJfcnVsZXMuYnVpbGREcmF3R3JvdXBzKGNvbnRleHQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRyYXdfZ3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlbmRlciBkcmF3IGdyb3Vwc1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBncm91cF9uYW1lIGluIGRyYXdfZ3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXAgPSBkcmF3X2dyb3Vwc1tncm91cF9uYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ3JvdXAudmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdG8gc3R5bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHlsZV9uYW1lID0gZ3JvdXAuc3R5bGUgfHwgZ3JvdXBfbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHlsZSA9IHN0eWxlc1tzdHlsZV9uYW1lXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKGBTdHlsZSAnJHtzdHlsZV9uYW1lfScgbm90IGZvdW5kIGZvciBydWxlIGluIGxheWVyICcke2xheWVyX25hbWV9JzpgLCBncm91cCwgZmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGF5ZXJzID0gZ3JvdXAubGF5ZXJzOyAgLy8gYWRkIG1hdGNoaW5nIGRyYXcgbGF5ZXJzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmFkZEZlYXR1cmUoZmVhdHVyZSwgZ3JvdXAsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGlsZS5kZWJ1Zy5mZWF0dXJlcysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aWxlLmRlYnVnLnJlbmRlcmluZyA9ICtuZXcgRGF0ZSgpIC0gdGlsZS5kZWJ1Zy5yZW5kZXJpbmc7XG5cbiAgICAgICAgLy8gRmluYWxpemUgYXJyYXkgYnVmZmVyIGZvciBlYWNoIHJlbmRlciBzdHlsZVxuICAgICAgICBsZXQgdGlsZV9zdHlsZXMgPSBTdHlsZU1hbmFnZXIuc3R5bGVzRm9yVGlsZSh0aWxlLmtleSk7XG4gICAgICAgIHRpbGUubWVzaF9kYXRhID0ge307XG4gICAgICAgIGxldCBxdWV1ZSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzPTA7IHMgPCB0aWxlX3N0eWxlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHN0eWxlX25hbWUgPSB0aWxlX3N0eWxlc1tzXTtcbiAgICAgICAgICAgIGxldCBzdHlsZSA9IHN0eWxlc1tzdHlsZV9uYW1lXTtcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goc3R5bGUuZW5kRGF0YSh0aWxlKS50aGVuKChzdHlsZV9kYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0eWxlX2RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS5tZXNoX2RhdGFbc3R5bGVfbmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhfZGF0YTogc3R5bGVfZGF0YS52ZXJ0ZXhfZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zOiBzdHlsZV9kYXRhLnVuaWZvcm1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZXM6IHN0eWxlX2RhdGEudGV4dHVyZXNcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocXVldWUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgQ29sbGlzaW9uLnJlc2V0VGlsZSh0aWxlLmtleSk7XG5cbiAgICAgICAgICAgIC8vIFJldHVybiBrZXlzIHRvIGJlIHRyYW5zZmVyZWQgdG8gbWFpbiB0aHJlYWRcbiAgICAgICAgICAgIHJldHVybiBbJ21lc2hfZGF0YSddO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICAgUmV0cmlldmVzIGdlb21ldHJ5IGZyb20gYSB0aWxlIGFjY29yZGluZyB0byBhIGRhdGEgc291cmNlIGRlZmluaXRpb25cbiAgICAgICAgUmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGg6XG4gICAgICAgICAgICBsYXllcjogc291cmNlIGxheWVyIG5hbWVcbiAgICAgICAgICAgIGdlb206IEdlb0pTT04gRmVhdHVyZUNvbGxlY3Rpb25cbiAgICAqL1xuICAgIHN0YXRpYyBnZXREYXRhRm9yU291cmNlIChzb3VyY2VfZGF0YSwgc291cmNlX2NvbmZpZywgZGVmYXVsdF9sYXllciA9IG51bGwpIHtcbiAgICAgICAgdmFyIGxheWVycyA9IFtdO1xuXG4gICAgICAgIGlmIChzb3VyY2VfY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIElmIG5vIGxheWVyIHNwZWNpZmllZCwgYW5kIGEgZGVmYXVsdCBzb3VyY2UgbGF5ZXIgZXhpc3RzXG4gICAgICAgICAgICBpZiAoIXNvdXJjZV9jb25maWcubGF5ZXIgJiYgc291cmNlX2RhdGEubGF5ZXJzLl9kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgbGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsYXllcjogJ19kZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAgICAgZ2VvbTogc291cmNlX2RhdGEubGF5ZXJzLl9kZWZhdWx0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiBubyBsYXllciBzcGVjaWZpZWQsIGFuZCBhIGRlZmF1bHQgcmVxdWVzdGVkIGxheWVyIGV4aXN0c1xuICAgICAgICAgICAgZWxzZSBpZiAoIXNvdXJjZV9jb25maWcubGF5ZXIgJiYgZGVmYXVsdF9sYXllcikge1xuICAgICAgICAgICAgICAgIGxheWVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXI6IGRlZmF1bHRfbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgIGdlb206IHNvdXJjZV9kYXRhLmxheWVyc1tkZWZhdWx0X2xheWVyXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgYSBsYXllciBpcyBzcGVjaWZpZWQgYnkgbmFtZSwgdXNlIGl0XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc291cmNlX2NvbmZpZy5sYXllciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBsYXllcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyOiBzb3VyY2VfY29uZmlnLmxheWVyLFxuICAgICAgICAgICAgICAgICAgICBnZW9tOiBzb3VyY2VfZGF0YS5sYXllcnNbc291cmNlX2NvbmZpZy5sYXllcl1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIG11bHRpcGxlIGxheWVycyBhcmUgc3BlY2lmaWVkIGJ5IG5hbWUsIGNvbWJpbmUgdGhlbVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2VfY29uZmlnLmxheWVyKSkge1xuICAgICAgICAgICAgICAgIHNvdXJjZV9jb25maWcubGF5ZXIuZm9yRWFjaChsYXllciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VfZGF0YS5sYXllcnNbbGF5ZXJdICYmIHNvdXJjZV9kYXRhLmxheWVyc1tsYXllcl0uZmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tOiBzb3VyY2VfZGF0YS5sYXllcnNbbGF5ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQXNzZW1ibGUgYSBjdXN0b20gbGF5ZXIgdmlhIGEgZnVuY3Rpb24sIHdoaWNoIGlzIGNhbGxlZCB3aXRoIGFsbCBzb3VyY2UgbGF5ZXJzXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc291cmNlX2NvbmZpZy5sYXllciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGxheWVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvbTogc291cmNlX2NvbmZpZy5sYXllcihzb3VyY2VfZGF0YS5sYXllcnMpXG4gICAgICAgICAgICAgICAgICAgIC8vIGN1c3RvbSBsYXllciBoYXMgbm8gbmFtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxheWVycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICBDYWxsZWQgb24gbWFpbiB0aHJlYWQgd2hlbiBhIHdlYiB3b3JrZXIgY29tcGxldGVzIHByb2Nlc3NpbmdcbiAgICAgICBmb3IgYSBzaW5nbGUgdGlsZS5cbiAgICAqL1xuICAgIGJ1aWxkTWVzaGVzKHN0eWxlcykge1xuICAgICAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVidWdcbiAgICAgICAgdGhpcy5kZWJ1Zy5nZW9tZXRyaWVzID0gMDtcbiAgICAgICAgdGhpcy5kZWJ1Zy5idWZmZXJfc2l6ZSA9IDA7XG5cbiAgICAgICAgLy8gQ3JlYXRlIFZCT3NcbiAgICAgICAgbGV0IG1lc2hlcyA9IHt9LCB0ZXh0dXJlcyA9IFtdOyAvLyBuZXcgcmVzb3VyY2VzLCB0byBiZSBzd2FwcGVkIGluXG4gICAgICAgIGxldCBtZXNoX2RhdGEgPSB0aGlzLm1lc2hfZGF0YTtcbiAgICAgICAgaWYgKG1lc2hfZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcyBpbiBtZXNoX2RhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAobWVzaF9kYXRhW3NdLnZlcnRleF9kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcuYnVmZmVyX3NpemUgKz0gbWVzaF9kYXRhW3NdLnZlcnRleF9kYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGVzW3NdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2cud2FybihgQ291bGQgbm90IGNyZWF0ZSBtZXNoIGJlY2F1c2Ugc3R5bGUgJyR7c30nIG5vdCBmb3VuZCwgZm9yIHRpbGUgJHt0aGlzLmtleX0sIGFib3J0aW5nIHRpbGVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1lc2hlc1tzXSA9IHN0eWxlc1tzXS5tYWtlTWVzaChtZXNoX2RhdGFbc10udmVydGV4X2RhdGEsIG1lc2hfZGF0YVtzXSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcuZ2VvbWV0cmllcyArPSBtZXNoZXNbc10uZ2VvbWV0cnlfY291bnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQXNzaWduIHRleHR1cmUgb3duZXJzaGlwIHRvIHRpbGVzXG4gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0J3MgdmFsaWQgZm9yIGEgc2luZ2xlIHRleHR1cmUgdG8gYmUgcmVmZXJlbmNlZCBmcm9tIG11bHRpcGxlIHN0eWxlc1xuICAgICAgICAgICAgICAgIC8vIChlLmcuIHNhbWUgcmFzdGVyIHRleHR1cmUgYXR0YWNoZWQgdG8gbXVsdGlwbGUgc291cmNlcykuIFRoaXMgbWVhbnMgdGhlIHNhbWVcbiAgICAgICAgICAgICAgICAvLyB0ZXh0dXJlIG1heSBiZSBhZGRlZCB0byB0aGUgdGlsZSdzIHRleHR1cmUgbGlzdCBtb3JlIHRoYW4gb25jZSwgd2hpY2ggZW5zdXJlc1xuICAgICAgICAgICAgICAgIC8vIHRoYXQgaXQgaXMgcHJvcGVybHkgcmVsZWFzZWQgKHRvIG1hdGNoIGl0cyByZXRhaW4gY291bnQpLlxuICAgICAgICAgICAgICAgIGlmIChtZXNoX2RhdGFbc10udGV4dHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzaF9kYXRhW3NdLnRleHR1cmVzLmZvckVhY2godCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlcy5wdXNoKHQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMubWVzaF9kYXRhOyAvLyBUT0RPOiBtaWdodCB3YW50IHRvIHByZXNlcnZlIHRoaXMgZm9yIHJlYnVpbGRpbmcgZ2VvbWV0cmllcyB3aGVuIHN0eWxlcy9ldGMuIGNoYW5nZT9cblxuICAgICAgICAvLyBTd2FwIGluIG5ldyBkYXRhLCBmcmVlIG9sZCBkYXRhXG4gICAgICAgIHRoaXMuZnJlZVJlc291cmNlcygpO1xuICAgICAgICB0aGlzLm1lc2hlcyA9IG1lc2hlcztcbiAgICAgICAgdGhpcy50ZXh0dXJlcyA9IHRleHR1cmVzO1xuXG4gICAgICAgIHRoaXMuZGVidWcuZ2VvbV9yYXRpbyA9ICh0aGlzLmRlYnVnLmdlb21ldHJpZXMgLyB0aGlzLmRlYnVnLmZlYXR1cmVzKS50b0ZpeGVkKDEpO1xuICAgICAgICB0aGlzLnByaW50RGVidWcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICAgQ2FsbGVkIG9uIG1haW4gdGhyZWFkIHdoZW4gd2ViIHdvcmtlciBjb21wbGV0ZXMgcHJvY2Vzc2luZywgYnV0IHRpbGUgaGFzIHNpbmNlIGJlZW4gZGlzY2FyZGVkXG4gICAgICAgIEZyZWVzIHJlc291cmNlcyB0aGF0IHdvdWxkIGhhdmUgYmVlbiB0cmFuc2ZlcnJlZCB0byB0aGUgdGlsZSBvYmplY3QuXG4gICAgICAgIFN0YXRpYyBtZXRob2QgYmVjYXVzZSB0aGUgdGlsZSBvYmplY3Qgbm8gbG9uZ2VyIGV4aXN0cyAodGhlIHRpbGUgZGF0YSByZXR1cm5lZCBieSB0aGUgd29ya2VyIGlzIHBhc3NlZCBpbnN0ZWFkKS5cbiAgICAqL1xuICAgIHN0YXRpYyBhYm9ydEJ1aWxkICh0aWxlKSB7XG4gICAgICAgIGlmICh0aWxlLm1lc2hfZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcyBpbiB0aWxlLm1lc2hfZGF0YSkge1xuICAgICAgICAgICAgICAgIGxldCB0ZXh0dXJlcyA9IHRpbGUubWVzaF9kYXRhW3NdLnRleHR1cmVzO1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB0IG9mIHRleHR1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dHVyZSA9IFRleHR1cmUudGV4dHVyZXNbdF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy50cmFjZShgcmVsZWFzaW5nIHRleHR1cmUgJHt0fSBmb3IgdGlsZSAke3RpbGUua2V5fWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUucmVsZWFzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHJlbGF0aXZlIHRvIHZpZXdcbiAgICB1cGRhdGUgKCkge1xuICAgICAgICBsZXQgY29vcmRzID0gdGhpcy5jb29yZHM7XG4gICAgICAgIGlmIChjb29yZHMueiAhPT0gdGhpcy52aWV3LmNlbnRlci50aWxlLnopIHtcbiAgICAgICAgICAgIGNvb3JkcyA9IFRpbGUuY29vcmRpbmF0ZUF0Wm9vbShjb29yZHMsIHRoaXMudmlldy5jZW50ZXIudGlsZS56KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNlbnRlcl9kaXN0ID0gTWF0aC5hYnModGhpcy52aWV3LmNlbnRlci50aWxlLnggLSBjb29yZHMueCkgKyBNYXRoLmFicyh0aGlzLnZpZXcuY2VudGVyLnRpbGUueSAtIGNvb3Jkcy55KTtcbiAgICB9XG5cbiAgICAvLyBTZXQgYXMgYSBwcm94eSB0aWxlIGZvciBhbm90aGVyIHRpbGVcbiAgICBzZXRQcm94eUZvciAodGlsZSkge1xuICAgICAgICB0aGlzLnByb3h5ID0gdGlsZTtcbiAgICAgICAgaWYgKHRpbGUpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnByb3h5X2RlcHRoID0gMTsgLy8gZHJhdyBwcm94aWVzIGEgaGFsZi1sYXllciBiYWNrIChvcmRlciBpcyBzY2FsZWQgMnggdG8gYXZvaWQgaW50ZWdlciB0cnVuY2F0aW9uKVxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJveHlfZGVwdGggPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIG1vZGVsIG1hdHJpeCBhbmQgdGlsZSB1bmlmb3Jtc1xuICAgIHNldHVwUHJvZ3JhbSAoeyBtb2RlbCwgbW9kZWwzMiB9LCBwcm9ncmFtKSB7XG4gICAgICAgIC8vIFRpbGUgb3JpZ2luXG4gICAgICAgIHByb2dyYW0udW5pZm9ybSgnNGYnLCAndV90aWxlX29yaWdpbicsIHRoaXMubWluLngsIHRoaXMubWluLnksIHRoaXMuc3R5bGVfem9vbSwgdGhpcy5jb29yZHMueik7XG4gICAgICAgIHByb2dyYW0udW5pZm9ybSgnMWYnLCAndV90aWxlX3Byb3h5X2RlcHRoJywgdGhpcy5wcm94eV9kZXB0aCk7XG5cbiAgICAgICAgLy8gTW9kZWwgLSB0cmFuc2Zvcm0gdGlsZSBzcGFjZSBpbnRvIHdvcmxkIHNwYWNlIChtZXRlcnMsIGFic29sdXRlIG1lcmNhdG9yIHBvc2l0aW9uKVxuICAgICAgICBtYXQ0LmlkZW50aXR5KG1vZGVsKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUobW9kZWwsIG1vZGVsLCB2ZWMzLmZyb21WYWx1ZXModGhpcy5taW4ueCwgdGhpcy5taW4ueSwgMCkpO1xuICAgICAgICBtYXQ0LnNjYWxlKG1vZGVsLCBtb2RlbCwgdmVjMy5mcm9tVmFsdWVzKHRoaXMuc3Bhbi54IC8gR2VvLnRpbGVfc2NhbGUsIC0xICogdGhpcy5zcGFuLnkgLyBHZW8udGlsZV9zY2FsZSwgMSkpOyAvLyBzY2FsZSB0aWxlIGxvY2FsIGNvb3JkcyB0byBtZXRlcnNcbiAgICAgICAgbWF0NC5jb3B5KG1vZGVsMzIsIG1vZGVsKTtcbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCdNYXRyaXg0ZnYnLCAndV9tb2RlbCcsIGZhbHNlLCBtb2RlbDMyKTtcbiAgICB9XG5cbiAgICAvLyBTbGljZSBhIHN1YnNldCBvZiBrZXlzIG91dCBvZiBhIHRpbGVcbiAgICAvLyBJbmNsdWRlcyBhIG1pbmltdW0gc2V0IG9mIHByZS1kZWZpbmVkIGtleXMgZm9yIGxvYWQgc3RhdGUsIGRlYnVnLiBldGMuXG4gICAgLy8gV2UgdXNlIHRoaXMgdG8gc2VuZCBhIHN1YnNldCBvZiB0aGUgdGlsZSBiYWNrIHRvIHRoZSBtYWluIHRocmVhZCwgdG8gbWluaW1pemUgdW5uZWNlc3NhcnkgZGF0YSB0cmFuc2ZlclxuICAgIC8vIChlLmcuIHZlcnkgbGFyZ2UgaXRlbXMgbGlrZSBmZWF0dXJlIGdlb21ldHJ5IGFyZSBub3QgbmVlZGVkIG9uIHRoZSBtYWluIHRocmVhZClcbiAgICBzdGF0aWMgc2xpY2UgKHRpbGUsIGtleXMpIHtcbiAgICAgICAgbGV0IGtlZXAgPSBbXG4gICAgICAgICAgICAna2V5JyxcbiAgICAgICAgICAgICdsb2FkaW5nJyxcbiAgICAgICAgICAgICdsb2FkZWQnLFxuICAgICAgICAgICAgJ2dlbmVyYXRpb24nLFxuICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICdkZWJ1ZydcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgICAgICAgIGtlZXAucHVzaCguLi5rZXlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJ1aWxkIHRoZSB0aWxlIHN1YnNldFxuICAgICAgICB2YXIgdGlsZV9zdWJzZXQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtlZXApIHtcbiAgICAgICAgICAgIHRpbGVfc3Vic2V0W2tleV0gPSB0aWxlW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGlsZV9zdWJzZXQ7XG4gICAgfVxuXG4gICAgbWVyZ2Uob3RoZXIpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG90aGVyKSB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSAna2V5Jykge1xuICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IG90aGVyW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJpbnREZWJ1ZyAoKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGlsZTogZGVidWcgZm9yICR7dGhpcy5rZXl9OiBbICAke0pTT04uc3RyaW5naWZ5KHRoaXMuZGVidWcpfSBdYCk7XG4gICAgfVxuXG59XG5cblRpbGUuY29vcmRfY2hpbGRyZW4gPSB7fTsgLy8gb25seSBhbGxvY2F0ZSBjaGlsZHJlbiBjb29yZGluYXRlcyBvbmNlIHBlciBjb29yZGluYXRlXG4iLCJpbXBvcnQgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IFRpbGVQeXJhbWlkIGZyb20gJy4vdGlsZV9weXJhbWlkJztcblxuaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5cbmNvbnN0IFRpbGVNYW5hZ2VyID0ge1xuXG4gICAgaW5pdCh7IHNjZW5lLCB2aWV3IH0pIHtcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xuICAgICAgICB0aGlzLnZpZXcgPSB2aWV3O1xuICAgICAgICB0aGlzLnRpbGVzID0ge307XG4gICAgICAgIHRoaXMucHlyYW1pZCA9IFRpbGVQeXJhbWlkO1xuICAgICAgICB0aGlzLnB5cmFtaWQucmVzZXQoKTtcbiAgICAgICAgdGhpcy52aXNpYmxlX2Nvb3JkcyA9IHt9O1xuICAgICAgICB0aGlzLnF1ZXVlZF9jb29yZHMgPSBbXTtcbiAgICAgICAgdGhpcy5idWlsZGluZ190aWxlcyA9IG51bGw7XG4gICAgfSxcblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZm9yRWFjaFRpbGUodGlsZSA9PiB0aWxlLmRlc3Ryb3koKSk7XG4gICAgICAgIHRoaXMudGlsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5weXJhbWlkLnJlc2V0KCk7XG4gICAgICAgIHRoaXMudmlzaWJsZV9jb29yZHMgPSB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZWRfY29vcmRzID0gW107XG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xuICAgICAgICB0aGlzLnZpZXcgPSBudWxsO1xuICAgIH0sXG5cbiAgICBrZWVwVGlsZSh0aWxlKSB7XG4gICAgICAgIHRoaXMudGlsZXNbdGlsZS5rZXldID0gdGlsZTtcbiAgICAgICAgdGhpcy5weXJhbWlkLmFkZFRpbGUodGlsZSk7XG4gICAgfSxcblxuICAgIGhhc1RpbGUoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpbGVzW2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgZm9yZ2V0VGlsZShrZXkpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzVGlsZShrZXkpKSB7XG4gICAgICAgICAgICBsZXQgdGlsZSA9IHRoaXMudGlsZXNba2V5XTtcbiAgICAgICAgICAgIHRoaXMucHlyYW1pZC5yZW1vdmVUaWxlKHRpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIHRoaXMudGlsZXNba2V5XTtcbiAgICAgICAgdGhpcy50aWxlQnVpbGRTdG9wKGtleSk7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSBhIHNpbmdsZSB0aWxlXG4gICAgcmVtb3ZlVGlsZShrZXkpIHtcbiAgICAgICAgbG9nLnRyYWNlKGB0aWxlIHVubG9hZCBmb3IgJHtrZXl9YCk7XG5cbiAgICAgICAgdmFyIHRpbGUgPSB0aGlzLnRpbGVzW2tleV07XG5cbiAgICAgICAgaWYgKHRpbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGlsZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcmdldFRpbGUodGlsZS5rZXkpO1xuICAgICAgICB0aGlzLnNjZW5lLnJlcXVlc3RSZWRyYXcoKTtcbiAgICB9LFxuXG4gICAgLy8gUnVuIGEgZnVuY3Rpb24gb24gZWFjaCB0aWxlXG4gICAgZm9yRWFjaFRpbGUoZnVuYykge1xuICAgICAgICBmb3IgKGxldCB0IGluIHRoaXMudGlsZXMpIHtcbiAgICAgICAgICAgIGZ1bmModGhpcy50aWxlc1t0XSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gUmVtb3ZlIHRpbGVzIHRoYXQgcGFzcyBhIGZpbHRlciBjb25kaXRpb25cbiAgICByZW1vdmVUaWxlcyhmaWx0ZXIpIHtcbiAgICAgICAgbGV0IHJlbW92ZV90aWxlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCB0IGluIHRoaXMudGlsZXMpIHtcbiAgICAgICAgICAgIGxldCB0aWxlID0gdGhpcy50aWxlc1t0XTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIodGlsZSkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVfdGlsZXMucHVzaCh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCByPTA7IHIgPCByZW1vdmVfdGlsZXMubGVuZ3RoOyByKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSByZW1vdmVfdGlsZXNbcl07XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRpbGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVUaWxlc0ZvclZpZXcoKSB7XG4gICAgICAgIC8vIEZpbmQgdmlzaWJsZSB0aWxlcyBhbmQgbG9hZCBuZXcgb25lc1xuICAgICAgICBsZXQgcHJldl9jb29yZHMgPSBPYmplY3Qua2V5cyh0aGlzLnZpc2libGVfY29vcmRzKTtcbiAgICAgICAgdGhpcy52aXNpYmxlX2Nvb3JkcyA9IHt9O1xuICAgICAgICBsZXQgdGlsZV9jb29yZHMgPSB0aGlzLnZpZXcuZmluZFZpc2libGVUaWxlQ29vcmRpbmF0ZXMoKTtcbiAgICAgICAgZm9yIChsZXQgY29vcmRzIG9mIHRpbGVfY29vcmRzKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlQ29vcmRpbmF0ZShjb29yZHMpO1xuICAgICAgICAgICAgdGhpcy52aXNpYmxlX2Nvb3Jkc1tjb29yZHMua2V5XSA9IGNvb3JkcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHZpc2libGUgY29vcmRzIGNoYW5nZWRcbiAgICAgICAgLy8gVE9ETzogbW92ZSB0byBhIG5ldyB2aWV3IG1hbmFnZXIgb2JqZWN0XG4gICAgICAgIGxldCBuZXdfY29vcmRzID0gT2JqZWN0LmtleXModGhpcy52aXNpYmxlX2Nvb3Jkcyk7XG4gICAgICAgIGxldCBjb29yZHNfY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBpZiAocHJldl9jb29yZHMubGVuZ3RoICE9PSBuZXdfY29vcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29vcmRzX2NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHJldl9jb29yZHMuc29ydCgpO1xuICAgICAgICAgICAgbmV3X2Nvb3Jkcy5zb3J0KCk7XG4gICAgICAgICAgICBpZiAoIXByZXZfY29vcmRzLmV2ZXJ5KChjLCBpKSA9PiBuZXdfY29vcmRzW2ldID09PSBjKSkge1xuICAgICAgICAgICAgICAgIGNvb3Jkc19jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlVGlsZVN0YXRlcygpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVUaWxlU3RhdGVzICgpIHtcbiAgICAgICAgdGhpcy5mb3JFYWNoVGlsZSh0aWxlID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eSh0aWxlKTtcbiAgICAgICAgICAgIHRpbGUudXBkYXRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9hZFF1ZXVlZENvb3JkaW5hdGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlUHJveHlUaWxlcygpO1xuICAgICAgICB0aGlzLnZpZXcucHJ1bmVUaWxlc0ZvclZpZXcoKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlUHJveHlUaWxlcyAoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXcuem9vbV9kaXJlY3Rpb24gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFyIHByZXZpb3VzIHByb3hpZXNcbiAgICAgICAgdGhpcy5mb3JFYWNoVGlsZSh0aWxlID0+IHRpbGUuc2V0UHJveHlGb3IobnVsbCkpO1xuXG4gICAgICAgIGxldCBwcm94eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvckVhY2hUaWxlKHRpbGUgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlldy56b29tX2RpcmVjdGlvbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGlmICh0aWxlLnZpc2libGUgJiYgdGlsZS5sb2FkaW5nICYmIHRpbGUuY29vcmRzLnogPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwID0gdGhpcy5weXJhbWlkLmdldEFuY2VzdG9yKHRpbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcC5zZXRQcm94eUZvcih0aWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy56b29tX2RpcmVjdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAodGlsZS52aXNpYmxlICYmIHRpbGUubG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHRoaXMucHlyYW1pZC5nZXREZXNjZW5kYW50cyh0aWxlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdCBvZiBkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0LnNldFByb3h5Rm9yKHRpbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJveHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXByb3h5KSB7XG4gICAgICAgICAgICB0aGlzLnZpZXcuem9vbV9kaXJlY3Rpb24gPSAwO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZVZpc2liaWxpdHkodGlsZSkge1xuICAgICAgICB0aWxlLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRpbGUuc3R5bGVfem9vbSA9PT0gdGhpcy52aWV3LnRpbGVfem9vbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZV9jb29yZHNbdGlsZS5jb29yZHMua2V5XSkge1xuICAgICAgICAgICAgICAgIHRpbGUudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBicnV0ZSBmb3JjZVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnZpc2libGVfY29vcmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChUaWxlLmlzRGVzY2VuZGFudCh0aWxlLmNvb3JkcywgdGhpcy52aXNpYmxlX2Nvb3Jkc1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSB0aWxlcyB0aGF0IGFyZW4ndCB2aXNpYmxlLCBhbmQgZmxhZyByZW1haW5pbmcgdmlzaWJsZSBvbmVzIHRvIGJlIHVwZGF0ZWQgKGZvciBsb2FkaW5nLCBwcm94eSwgZXRjLilcbiAgICBwcnVuZVRvVmlzaWJsZVRpbGVzICgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUaWxlcyh0aWxlID0+ICF0aWxlLnZpc2libGUpO1xuICAgIH0sXG5cbiAgICBnZXRSZW5kZXJhYmxlVGlsZXMoKSB7XG4gICAgICAgIGxldCB0aWxlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCB0IGluIHRoaXMudGlsZXMpIHtcbiAgICAgICAgICAgIGxldCB0aWxlID0gdGhpcy50aWxlc1t0XTtcbiAgICAgICAgICAgIGlmICh0aWxlLnZpc2libGUgJiYgdGlsZS5sb2FkZWQpIHtcbiAgICAgICAgICAgICAgICB0aWxlcy5wdXNoKHRpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWxlcztcbiAgICB9LFxuXG4gICAgaXNMb2FkaW5nVmlzaWJsZVRpbGVzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy50aWxlcykuc29tZShrID0+IHRoaXMudGlsZXNba10udmlzaWJsZSAmJiB0aGlzLnRpbGVzW2tdLmxvYWRpbmcpO1xuICAgIH0sXG5cbiAgICAvLyBRdWV1ZSBhIHRpbGUgZm9yIGxvYWRcbiAgICBxdWV1ZUNvb3JkaW5hdGUoY29vcmRzKSB7XG4gICAgICAgIHRoaXMucXVldWVkX2Nvb3Jkc1t0aGlzLnF1ZXVlZF9jb29yZHMubGVuZ3RoXSA9IGNvb3JkcztcbiAgICB9LFxuXG4gICAgLy8gTG9hZCBhbGwgcXVldWVkIHRpbGVzXG4gICAgbG9hZFF1ZXVlZENvb3JkaW5hdGVzKCkge1xuICAgICAgICBpZiAodGhpcy5xdWV1ZWRfY29vcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydCBxdWV1ZWQgdGlsZXMgZnJvbSBjZW50ZXIgdGlsZVxuICAgICAgICB0aGlzLnF1ZXVlZF9jb29yZHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgbGV0IGFkID0gTWF0aC5hYnModGhpcy52aWV3LmNlbnRlci50aWxlLnggLSBhLngpICsgTWF0aC5hYnModGhpcy52aWV3LmNlbnRlci50aWxlLnkgLSBhLnkpO1xuICAgICAgICAgICAgbGV0IGJkID0gTWF0aC5hYnModGhpcy52aWV3LmNlbnRlci50aWxlLnggLSBiLngpICsgTWF0aC5hYnModGhpcy52aWV3LmNlbnRlci50aWxlLnkgLSBiLnkpO1xuICAgICAgICAgICAgcmV0dXJuIChiZCA+IGFkID8gLTEgOiAoYmQgPT09IGFkID8gMCA6IDEpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucXVldWVkX2Nvb3Jkcy5mb3JFYWNoKGNvb3JkcyA9PiB0aGlzLmxvYWRDb29yZGluYXRlKGNvb3JkcykpO1xuICAgICAgICB0aGlzLnF1ZXVlZF9jb29yZHMgPSBbXTtcbiAgICB9LFxuXG4gICAgLy8gTG9hZCBhbGwgdGlsZXMgdG8gY292ZXIgYSBnaXZlbiBsb2dpY2FsIHRpbGUgY29vcmRpbmF0ZVxuICAgIGxvYWRDb29yZGluYXRlKGNvb3Jkcykge1xuICAgICAgICAvLyBTa2lwIGlmIG5vdCBhdCBjdXJyZW50IHNjZW5lIHpvb21cbiAgICAgICAgaWYgKGNvb3Jkcy56ICE9PSB0aGlzLnZpZXcuY2VudGVyLnRpbGUueikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIG5lY2Vzc2FyeSB0aWxlcyBmb3IgZWFjaCBzb3VyY2VcbiAgICAgICAgZm9yIChsZXQgcyBpbiB0aGlzLnNjZW5lLnNvdXJjZXMpIHtcbiAgICAgICAgICAgIGxldCBzb3VyY2UgPSB0aGlzLnNjZW5lLnNvdXJjZXNbc107XG4gICAgICAgICAgICBpZiAoIXNvdXJjZS50aWxlZCB8fCAhc291cmNlLmdlb21ldHJ5X3RpbGVzKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBrZXkgPSBUaWxlLmtleShjb29yZHMsIHNvdXJjZSwgdGhpcy52aWV3LnRpbGVfem9vbSk7XG4gICAgICAgICAgICBpZiAoa2V5ICYmICF0aGlzLmhhc1RpbGUoa2V5KSkge1xuICAgICAgICAgICAgICAgIGxldCB0aWxlID0gVGlsZS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvb3JkcyxcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyOiB0aGlzLnNjZW5lLm5leHRXb3JrZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVfem9vbTogdGhpcy52aWV3LnN0eWxlWm9vbShjb29yZHMueiksXG4gICAgICAgICAgICAgICAgICAgIHZpZXc6IHRoaXMudmlld1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5rZWVwVGlsZSh0aWxlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkVGlsZSh0aWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBTb3J0IGFuZCBidWlsZCBhIGxpc3Qgb2YgdGlsZXNcbiAgICBidWlsZFRpbGVzKHRpbGVzKSB7XG4gICAgICAgIFRpbGUuc29ydCh0aWxlcykuZm9yRWFjaCh0aWxlID0+IHRoaXMuYnVpbGRUaWxlKHRpbGUpKTtcbiAgICAgICAgdGhpcy5jaGVja0J1aWxkUXVldWUoKTtcbiAgICB9LFxuXG4gICAgYnVpbGRUaWxlKHRpbGUpIHtcbiAgICAgICAgdGhpcy50aWxlQnVpbGRTdGFydCh0aWxlLmtleSk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eSh0aWxlKTtcbiAgICAgICAgdGlsZS51cGRhdGUoKTtcbiAgICAgICAgdGlsZS5idWlsZCh0aGlzLnNjZW5lLmdlbmVyYXRpb24pXG4gICAgICAgICAgICAudGhlbihtZXNzYWdlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZSkgeyAvLyBlbXB0eSBtZXNzYWdlIG1lYW5zIHRpbGUgYnVpbGQgd2FzIGFib3J0ZWRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFRpbGVDb21wbGV0ZWQobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IoYEVycm9yIGJ1aWxkaW5nIHRpbGUgJHt0aWxlLmtleX06YCwgZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JnZXRUaWxlKHRpbGUua2V5KTtcbiAgICAgICAgICAgICAgICBUaWxlLmFib3J0QnVpbGQodGlsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLy8gQ2FsbGVkIG9uIG1haW4gdGhyZWFkIHdoZW4gYSB3ZWIgd29ya2VyIGNvbXBsZXRlcyBwcm9jZXNzaW5nIGZvciBhIHNpbmdsZSB0aWxlIChpbml0aWFsIGxvYWQsIG9yIHJlYnVpbGQpXG4gICAgYnVpbGRUaWxlQ29tcGxldGVkKHsgdGlsZSB9KSB7XG4gICAgICAgIC8vIFJlbW92ZWQgdGhpcyB0aWxlIGR1cmluZyBsb2FkP1xuICAgICAgICBpZiAodGhpcy50aWxlc1t0aWxlLmtleV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nLnRyYWNlKGBkaXNjYXJkZWQgdGlsZSAke3RpbGUua2V5fSBpbiBUaWxlTWFuYWdlci5idWlsZFRpbGVDb21wbGV0ZWQgYmVjYXVzZSBwcmV2aW91c2x5IHJlbW92ZWRgKTtcbiAgICAgICAgICAgIFRpbGUuYWJvcnRCdWlsZCh0aWxlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGlsZVN0YXRlcygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEJ1aWx0IHdpdGggYW4gb3V0ZGF0ZWQgc2NlbmUgY29uZmlndXJhdGlvbj9cbiAgICAgICAgZWxzZSBpZiAodGlsZS5nZW5lcmF0aW9uICE9PSB0aGlzLnNjZW5lLmdlbmVyYXRpb24pIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgZGlzY2FyZGVkIHRpbGUgJHt0aWxlLmtleX0gaW4gVGlsZU1hbmFnZXIuYnVpbGRUaWxlQ29tcGxldGVkIGJlY2F1c2UgYnVpbHQgd2l0aCBgICtcbiAgICAgICAgICAgICAgICBgc2NlbmUgY29uZmlnIGdlbiAke3RpbGUuZ2VuZXJhdGlvbn0sIGN1cnJlbnQgJHt0aGlzLnNjZW5lLmdlbmVyYXRpb259YCk7XG4gICAgICAgICAgICB0aGlzLmZvcmdldFRpbGUodGlsZS5rZXkpO1xuICAgICAgICAgICAgVGlsZS5hYm9ydEJ1aWxkKHRpbGUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUaWxlU3RhdGVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGlsZSB3aXRoIHByb3BlcnRpZXMgZnJvbSB3b3JrZXJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbGVzW3RpbGUua2V5XSkge1xuICAgICAgICAgICAgICAgIHRpbGUgPSB0aGlzLnRpbGVzW3RpbGUua2V5XS5tZXJnZSh0aWxlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGlsZS5idWlsZE1lc2hlcyh0aGlzLnNjZW5lLnN0eWxlcyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbGVTdGF0ZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2NlbmUucmVxdWVzdFJlZHJhdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aWxlQnVpbGRTdG9wKHRpbGUua2V5KTtcbiAgICB9LFxuXG4gICAgLy8gVHJhY2sgdGlsZSBidWlsZCBzdGF0ZVxuICAgIHRpbGVCdWlsZFN0YXJ0KGtleSkge1xuICAgICAgICB0aGlzLmJ1aWxkaW5nX3RpbGVzID0gdGhpcy5idWlsZGluZ190aWxlcyB8fCB7fTtcbiAgICAgICAgdGhpcy5idWlsZGluZ190aWxlc1trZXldID0gdHJ1ZTtcbiAgICAgICAgbG9nLnRyYWNlKGB0aWxlQnVpbGRTdGFydCBmb3IgJHtrZXl9OiAke09iamVjdC5rZXlzKHRoaXMuYnVpbGRpbmdfdGlsZXMpLmxlbmd0aH1gKTtcbiAgICB9LFxuXG4gICAgdGlsZUJ1aWxkU3RvcChrZXkpIHtcbiAgICAgICAgLy8gRG9uZSBidWlsZGluZz9cbiAgICAgICAgaWYgKHRoaXMuYnVpbGRpbmdfdGlsZXMpIHtcbiAgICAgICAgICAgIGxvZy50cmFjZShgdGlsZUJ1aWxkU3RvcCBmb3IgJHtrZXl9OiAke09iamVjdC5rZXlzKHRoaXMuYnVpbGRpbmdfdGlsZXMpLmxlbmd0aH1gKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1aWxkaW5nX3RpbGVzW2tleV07XG4gICAgICAgICAgICB0aGlzLmNoZWNrQnVpbGRRdWV1ZSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIENoZWNrIHN0YXR1cyBvZiB0aWxlIGJ1aWxkaW5nIHF1ZXVlIGFuZCBub3RpZnkgc2NlbmUgd2hlbiB3ZSdyZSBkb25lXG4gICAgY2hlY2tCdWlsZFF1ZXVlKCkge1xuICAgICAgICBpZiAoIXRoaXMuYnVpbGRpbmdfdGlsZXMgfHwgT2JqZWN0LmtleXModGhpcy5idWlsZGluZ190aWxlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkaW5nX3RpbGVzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2NlbmUudGlsZU1hbmFnZXJCdWlsZERvbmUoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBTdW0gb2YgYSBkZWJ1ZyBwcm9wZXJ0eSBhY3Jvc3MgdGlsZXNcbiAgICBnZXREZWJ1Z1N1bShwcm9wLCBmaWx0ZXIpIHtcbiAgICAgICAgdmFyIHN1bSA9IDA7XG4gICAgICAgIGZvciAodmFyIHQgaW4gdGhpcy50aWxlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMudGlsZXNbdF0uZGVidWdbcHJvcF0gIT0gbnVsbCAmJiAodHlwZW9mIGZpbHRlciAhPT0gJ2Z1bmN0aW9uJyB8fCBmaWx0ZXIodGhpcy50aWxlc1t0XSkgPT09IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgc3VtICs9IHRoaXMudGlsZXNbdF0uZGVidWdbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1bTtcbiAgICB9LFxuXG4gICAgLy8gQXZlcmFnZSBvZiBhIGRlYnVnIHByb3BlcnR5IGFjcm9zcyB0aWxlc1xuICAgIGdldERlYnVnQXZlcmFnZShwcm9wLCBmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVidWdTdW0ocHJvcCwgZmlsdGVyKSAvIE9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aDtcbiAgICB9XG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRpbGVNYW5hZ2VyO1xuIiwiaW1wb3J0IEdlbyBmcm9tICcuL2dlbyc7XG5pbXBvcnQgVGlsZSBmcm9tICcuL3RpbGUnO1xuXG5jb25zdCBUaWxlUHlyYW1pZCA9IHtcblxuICAgIGNvb3Jkczoge30sXG4gICAgbWF4X3Byb3h5X2Rlc2NlbmRhbnRfZGVwdGg6IDMsIC8vICMgb2YgbGV2ZWxzIGRlZXAgdG8gc2VhcmNoIGZvciBkZXNjZW5kYW50IHByb3h5IHRpbGVzXG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5jb29yZHMgPSB7fTtcbiAgICB9LFxuXG4gICAgc291cmNlVGlsZXMoY29vcmQsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5jb29yZHNbY29vcmQua2V5XSAmJlxuICAgICAgICAgICAgdGhpcy5jb29yZHNbY29vcmQua2V5XS5zb3VyY2VzICYmXG4gICAgICAgICAgICB0aGlzLmNvb3Jkc1tjb29yZC5rZXldLnNvdXJjZXMuZ2V0KHNvdXJjZS5uYW1lKSk7XG4gICAgfSxcblxuICAgIGFkZFRpbGUodGlsZSkge1xuICAgICAgICAvLyBBZGQgdGFyZ2V0IHRpbGVcbiAgICAgICAgbGV0IGtleSA9IHRpbGUuY29vcmRzLmtleTtcbiAgICAgICAgbGV0IGNvb3JkID0gdGhpcy5jb29yZHNba2V5XTtcbiAgICAgICAgaWYgKCFjb29yZCkge1xuICAgICAgICAgICAgY29vcmQgPSB0aGlzLmNvb3Jkc1trZXldID0geyBkZXNjZW5kYW50czogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb29yZC5zb3VyY2VzKSB7XG4gICAgICAgICAgICBjb29yZC5zb3VyY2VzID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb29yZC5zb3VyY2VzLmdldCh0aWxlLnNvdXJjZS5uYW1lKSkge1xuICAgICAgICAgICAgY29vcmQuc291cmNlcy5zZXQodGlsZS5zb3VyY2UubmFtZSwgbmV3IE1hcCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb29yZC5zb3VyY2VzLmdldCh0aWxlLnNvdXJjZS5uYW1lKS5zZXQodGlsZS5zdHlsZV96b29tLCB0aWxlKTtcblxuICAgICAgICAvLyBJbmNyZW1lbnQgcmVmZXJlbmNlIGNvdW50IHVwIHRoZSB0aWxlIHB5cmFtaWRcbiAgICAgICAgZm9yIChsZXQgeiA9IHRpbGUuY29vcmRzLnogLSAxOyB6ID49IDA7IHotLSkge1xuICAgICAgICAgICAgbGV0IHVwID0gVGlsZS5jb29yZGluYXRlQXRab29tKHRpbGUuY29vcmRzLCB6KTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb29yZHNbdXAua2V5XSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29vcmRzW3VwLmtleV0gPSB7IGRlc2NlbmRhbnRzOiAwIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvb3Jkc1t1cC5rZXldLmRlc2NlbmRhbnRzKys7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlVGlsZSh0aWxlKSB7XG4gICAgICAgIC8vIFJlbW92ZSB0YXJnZXQgdGlsZVxuICAgICAgICBsZXQgc291cmNlX3RpbGVzID0gdGhpcy5zb3VyY2VUaWxlcyh0aWxlLmNvb3JkcywgdGlsZS5zb3VyY2UpO1xuICAgICAgICBsZXQga2V5ID0gdGlsZS5jb29yZHMua2V5O1xuXG4gICAgICAgIGlmIChzb3VyY2VfdGlsZXMpIHtcbiAgICAgICAgICAgIHNvdXJjZV90aWxlcy5kZWxldGUodGlsZS5zdHlsZV96b29tKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VfdGlsZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBzb3VyY2VcbiAgICAgICAgICAgICAgICB0aGlzLmNvb3Jkc1trZXldLnNvdXJjZXMuZGVsZXRlKHRpbGUuc291cmNlLm5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvb3Jkc1trZXldLnNvdXJjZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jb29yZHNba2V5XS5zb3VyY2VzO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvb3Jkc1trZXldLmRlc2NlbmRhbnRzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgd2hvbGUgY29vcmRcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvb3Jkc1trZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCB1cCB0aGUgdGlsZSBweXJhbWlkXG4gICAgICAgIGZvciAobGV0IHogPSB0aWxlLmNvb3Jkcy56IC0gMTsgeiA+PSAwOyB6LS0pIHtcbiAgICAgICAgICAgIGxldCBkb3duID0gVGlsZS5jb29yZGluYXRlQXRab29tKHRpbGUuY29vcmRzLCB6KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvb3Jkc1tkb3duLmtleV0gJiYgdGhpcy5jb29yZHNbZG93bi5rZXldLmRlc2NlbmRhbnRzID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29vcmRzW2Rvd24ua2V5XS5kZXNjZW5kYW50cy0tO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvb3Jkc1tkb3duLmtleV0uZGVzY2VuZGFudHMgPT09IDAgJiYgIXRoaXMuY29vcmRzW2Rvd24ua2V5XS5zb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvb3Jkc1tkb3duLmtleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldEFuY2VzdG9yICh7IGNvb3Jkcywgc3R5bGVfem9vbSwgc291cmNlIH0pIHtcbiAgICAgICAgLy8gRmlyc3QgY2hlY2sgb3Zlcnpvb21lZCB0aWxlcyBhdCBzYW1lIGNvb3JkaW5hdGUgem9vbVxuICAgICAgICBpZiAoc3R5bGVfem9vbSA+IHNvdXJjZS5tYXhfem9vbSkge1xuICAgICAgICAgICAgbGV0IHNvdXJjZV90aWxlcyA9IHRoaXMuc291cmNlVGlsZXMoY29vcmRzLCBzb3VyY2UpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZV90aWxlcykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHogPSBzdHlsZV96b29tIC0gMTsgeiA+PSBzb3VyY2UubWF4X3pvb207IHotLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlX3RpbGVzLmhhcyh6KSAmJiBzb3VyY2VfdGlsZXMuZ2V0KHopLmxvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZV90aWxlcy5nZXQoeik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHlsZV96b29tID0gc291cmNlLm1heF96b29tO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgdGlsZXMgYXQgbmV4dCB6b29tIHVwXG4gICAgICAgIHN0eWxlX3pvb20tLTtcbiAgICAgICAgbGV0IHBhcmVudCA9IFRpbGUuY29vcmRpbmF0ZUF0Wm9vbShjb29yZHMsIGNvb3Jkcy56IC0gMSk7XG4gICAgICAgIGxldCBwYXJlbnRfdGlsZXMgPSB0aGlzLnNvdXJjZVRpbGVzKHBhcmVudCwgc291cmNlKTtcbiAgICAgICAgaWYgKHBhcmVudF90aWxlcyAmJiBwYXJlbnRfdGlsZXMuaGFzKHN0eWxlX3pvb20pICYmIHBhcmVudF90aWxlcy5nZXQoc3R5bGVfem9vbSkubG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50X3RpbGVzLmdldChzdHlsZV96b29tKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWRuJ3QgZmluZCBhbmNlc3RvciwgdHJ5IG5leHQgbGV2ZWxcbiAgICAgICAgLy8gVE9ETzogbWF4IGRlcHRoIGxldmVscyB0byBjaGVja1xuICAgICAgICBpZiAocGFyZW50LnogPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBbmNlc3Rvcih7IGNvb3JkczogcGFyZW50LCBzdHlsZV96b29tLCBzb3VyY2UgfSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RGVzY2VuZGFudHMgKHsgY29vcmRzLCBzdHlsZV96b29tLCBzb3VyY2UgfSwgbGV2ZWwgPSAxKSB7XG4gICAgICAgIGxldCBkZXNjZW5kYW50cyA9IFtdO1xuXG4gICAgICAgIC8vIEZpcnN0IGNoZWNrIG92ZXJ6b29tZWQgdGlsZXMgYXQgc2FtZSBjb29yZGluYXRlIHpvb21cbiAgICAgICAgaWYgKHN0eWxlX3pvb20gPj0gc291cmNlLm1heF96b29tKSB7XG4gICAgICAgICAgICBsZXQgc291cmNlX3RpbGVzID0gdGhpcy5zb3VyY2VUaWxlcyhjb29yZHMsIHNvdXJjZSk7XG4gICAgICAgICAgICBpZiAoc291cmNlX3RpbGVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNlYXJjaF9tYXhfem9vbSA9IE1hdGgubWF4KEdlby5kZWZhdWx0X3ZpZXdfbWF4X3pvb20sIHN0eWxlX3pvb20gKyB0aGlzLm1heF9wcm94eV9kZXNjZW5kYW50X2RlcHRoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB6ID0gc3R5bGVfem9vbSArIDE7IHogPD0gc2VhcmNoX21heF96b29tOyB6KyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZV90aWxlcy5oYXMoeikgJiYgc291cmNlX3RpbGVzLmdldCh6KS5sb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NlbmRhbnRzLnB1c2goc291cmNlX3RpbGVzLmdldCh6KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzY2VuZGFudHM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVzY2VuZGFudHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayB0aWxlcyBhdCBuZXh0IHpvb20gZG93blxuICAgICAgICBpZiAodGhpcy5jb29yZHNbY29vcmRzLmtleV0gJiYgdGhpcy5jb29yZHNbY29vcmRzLmtleV0uZGVzY2VuZGFudHMgPiAwKSB7XG4gICAgICAgICAgICBzdHlsZV96b29tKys7XG4gICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBUaWxlLmNoaWxkcmVuRm9yQ29vcmRpbmF0ZShjb29yZHMpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkX3RpbGVzID0gdGhpcy5zb3VyY2VUaWxlcyhjaGlsZCwgc291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRfdGlsZXMgJiYgY2hpbGRfdGlsZXMuaGFzKHN0eWxlX3pvb20pICYmIGNoaWxkX3RpbGVzLmdldChzdHlsZV96b29tKS5sb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGFudHMucHVzaChjaGlsZF90aWxlcy5nZXQoc3R5bGVfem9vbSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBkaWRuJ3QgZmluZCBjaGlsZCwgdHJ5IG5leHQgbGV2ZWxcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChsZXZlbCA8PSB0aGlzLm1heF9wcm94eV9kZXNjZW5kYW50X2RlcHRoICYmIGNoaWxkLnogPD0gc291cmNlLm1heF96b29tKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NlbmRhbnRzLnB1c2goLi4udGhpcy5nZXREZXNjZW5kYW50cyh7IGNvb3JkczogY2hpbGQsIHNvdXJjZSwgc3R5bGVfem9vbSB9LCBsZXZlbCArIDEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVzY2VuZGFudHM7XG4gICAgfVxuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaWxlUHlyYW1pZDtcbiIsIlxuXG5leHBvcnQgY2xhc3MgTWV0aG9kTm90SW1wbGVtZW50ZWQgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kTmFtZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm5hbWUgICAgPSAnTWV0aG9kTm90SW1wbGVtZW50ZWQnO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnTWV0aG9kICcgKyBtZXRob2ROYW1lICsgJyBtdXN0IGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzJztcbiAgICB9XG59XG4iLCIvLyBQYXJ0aWFsIGltcG9ydCBvZiBnbC1tYXRyaXggdmlhIG1vZHVsYXJpemVkIHN0YWNrLWdsIGZvcmtzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdG9qaS9nbC1tYXRyaXhcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdGFja2dsXG5cbi8vIHZlYzNcblxuLy8gU3Vic3RpdHV0ZSA2NC1iaXQgdmVyc2lvblxuLy8gV2UgbmVlZCB0aGUgZXh0cmEgcHJlY2lzaW9uIHdoZW4gbXVsdGlwbHlpbmcgbWF0cmljZXMgdy9tZXJjYXRvciBwcm9qZWN0ZWQgdmFsdWVzXG5jb25zdCB2ZWMzID0ge1xuICAgIGZyb21WYWx1ZXMgKHgsIHksIHopIHtcbiAgICAgICAgdmFyIG91dCA9IG5ldyBGbG9hdDY0QXJyYXkoMyk7XG4gICAgICAgIG91dFswXSA9IHg7XG4gICAgICAgIG91dFsxXSA9IHk7XG4gICAgICAgIG91dFsyXSA9IHo7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxufTtcblxuXG4vLyBtYXQzXG5cbmltcG9ydCB7ZGVmYXVsdCBhcyBtYXQzX25vcm1hbEZyb21NYXQ0fSBmcm9tICdnbC1tYXQzL25vcm1hbC1mcm9tLW1hdDQnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIG1hdDNfaW52ZXJ0fSBmcm9tICdnbC1tYXQzL2ludmVydCc7XG5cbmNvbnN0IG1hdDMgPSB7XG4gICAgbm9ybWFsRnJvbU1hdDQ6IG1hdDNfbm9ybWFsRnJvbU1hdDQsXG4gICAgaW52ZXJ0OiBtYXQzX2ludmVydFxufTtcblxuXG4vLyBtYXQ0XG5cbmltcG9ydCB7ZGVmYXVsdCBhcyBtYXQ0X211bHRpcGx5fSBmcm9tICdnbC1tYXQ0L211bHRpcGx5JztcbmltcG9ydCB7ZGVmYXVsdCBhcyBtYXQ0X3RyYW5zbGF0ZX0gZnJvbSAnZ2wtbWF0NC90cmFuc2xhdGUnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIG1hdDRfc2NhbGV9IGZyb20gJ2dsLW1hdDQvc2NhbGUnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIG1hdDRfcGVyc3BlY3RpdmV9IGZyb20gJ2dsLW1hdDQvcGVyc3BlY3RpdmUnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIG1hdDRfbG9va0F0fSBmcm9tICdnbC1tYXQ0L2xvb2tBdCc7XG5pbXBvcnQge2RlZmF1bHQgYXMgbWF0NF9pZGVudGl0eX0gZnJvbSAnZ2wtbWF0NC9pZGVudGl0eSc7XG5pbXBvcnQge2RlZmF1bHQgYXMgbWF0NF9jb3B5fSBmcm9tICdnbC1tYXQ0L2NvcHknO1xuXG5jb25zdCBtYXQ0ID0ge1xuICAgIG11bHRpcGx5OiBtYXQ0X211bHRpcGx5LFxuICAgIHRyYW5zbGF0ZTogbWF0NF90cmFuc2xhdGUsXG4gICAgc2NhbGU6IG1hdDRfc2NhbGUsXG4gICAgcGVyc3BlY3RpdmU6IG1hdDRfcGVyc3BlY3RpdmUsXG4gICAgbG9va0F0OiBtYXQ0X2xvb2tBdCxcbiAgICBpZGVudGl0eTogbWF0NF9pZGVudGl0eSxcbiAgICBjb3B5OiBtYXQ0X2NvcHlcbn07XG5cblxuZXhwb3J0IHt2ZWMzLCBtYXQzLCBtYXQ0fTtcbiIsIi8vIERlZXAvcmVjdXJzaXZlIG1lcmdlIG9mIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIGludG8gYSBkZXN0aW5hdGlvbiBvYmplY3RcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlT2JqZWN0cyAoZGVzdCwgLi4uc291cmNlcykge1xuICAgIGZvciAobGV0IHM9MDsgcyA8IHNvdXJjZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgbGV0IHNvdXJjZSA9IHNvdXJjZXNbc107XG4gICAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IG1lcmdlIHRoZSBzb3VyY2UgaW50byB0aGUgZGVzdGluYXRpb24gaWYgaXQgaXMgYSBhIG5vbi1udWxsIGtleS92YWx1ZSBvYmplY3RcbiAgICAgICAgICAgIC8vIChlLmcuIGRvbid0IG1lcmdlIGFycmF5cywgdGhvc2UgYXJlIHRyZWF0ZWQgYXMgc2NhbGFyIHZhbHVlczsgbnVsbCB2YWx1ZXMgd2lsbCBvdmVyd3JpdGUvZXJhc2VcbiAgICAgICAgICAgIC8vIHRoZSBwcmV2aW91cyBkZXN0aW5hdGlvbiB2YWx1ZSlcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRlc3Rba2V5XSA9IG1lcmdlT2JqZWN0cyhkZXN0W2tleV0gfHwge30sIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgZGVzdGluYXRpb24gdmFsdWUgaWYgdGhlIHNvdXJjZSBwcm9wZXJ0eSBpczogYSBzY2FsYXIgKG51bWJlci9zdHJpbmcpLFxuICAgICAgICAgICAgLy8gYW4gYXJyYXksIG9yIGEgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRlc3Rba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVW5kZWZpbmVkIHNvdXJjZSBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVkXG4gICAgICAgIH1cblxuICAgIH1cbiAgICByZXR1cm4gZGVzdDtcbn1cbiIsImltcG9ydCBWZWN0b3IgZnJvbSAnLi4vdmVjdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT0JCIHtcblxuICAgIGNvbnN0cnVjdG9yICh4LCB5LCBhLCB3LCBoKSB7XG4gICAgICAgIHRoaXMuZGltZW5zaW9uID0gW3csIGhdO1xuICAgICAgICB0aGlzLmFuZ2xlID0gYTtcbiAgICAgICAgdGhpcy5jZW50cm9pZCA9IFt4LCB5XTtcbiAgICAgICAgdGhpcy5xdWFkID0gW107XG4gICAgICAgIHRoaXMuYXhlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgbW92ZSAocHgsIHB5KSB7XG4gICAgXHR0aGlzLmNlbnRyb2lkID0gW3B4LCBweV07XG5cbiAgICBcdHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgZ2V0RXh0ZW50ICgpIHtcbiAgICBcdGxldCBpbmYgPSAxZTY7XG4gICAgXHRsZXQgYWFiYiA9IFtpbmYsIGluZiwgLWluZiwgLWluZl07XG5cbiAgICBcdGZvciAobGV0IGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICAgICAgICBhYWJiWzBdID0gTWF0aC5taW4odGhpcy5xdWFkW2ldWzBdLCBhYWJiWzBdKTtcbiAgICAgICAgICAgIGFhYmJbMV0gPSBNYXRoLm1pbih0aGlzLnF1YWRbaV1bMV0sIGFhYmJbMV0pO1xuICAgICAgICAgICAgYWFiYlsyXSA9IE1hdGgubWF4KHRoaXMucXVhZFtpXVswXSwgYWFiYlsyXSk7XG4gICAgICAgICAgICBhYWJiWzNdID0gTWF0aC5tYXgodGhpcy5xdWFkW2ldWzFdLCBhYWJiWzNdKTtcbiAgICBcdH1cblxuICAgIFx0cmV0dXJuIGFhYmI7XG4gICAgfVxuXG4gICAgcGVycEF4ZXMgKCkge1xuICAgIFx0dGhpcy5heGVzWzBdID0gVmVjdG9yLm5vcm1hbGl6ZShWZWN0b3Iuc3ViKHRoaXMucXVhZFsyXSwgdGhpcy5xdWFkWzNdKSk7XG4gICAgXHR0aGlzLmF4ZXNbMV0gPSBWZWN0b3Iubm9ybWFsaXplKFZlY3Rvci5zdWIodGhpcy5xdWFkWzJdLCB0aGlzLnF1YWRbMV0pKTtcbiAgICB9XG5cbiAgICB1cGRhdGUgKCkge1xuICAgIFx0bGV0IHggPSBbIE1hdGguY29zKHRoaXMuYW5nbGUpLCBNYXRoLnNpbih0aGlzLmFuZ2xlKV07XG4gICAgXHRsZXQgeSA9IFstTWF0aC5zaW4odGhpcy5hbmdsZSksIE1hdGguY29zKHRoaXMuYW5nbGUpXTtcblxuICAgIFx0eCA9IFZlY3Rvci5tdWx0KHgsIHRoaXMuZGltZW5zaW9uWzBdIC8gMi4wKTtcbiAgICBcdHkgPSBWZWN0b3IubXVsdCh5LCB0aGlzLmRpbWVuc2lvblsxXSAvIDIuMCk7XG5cbiAgICBcdHRoaXMucXVhZFswXSA9IFZlY3Rvci5zdWIoVmVjdG9yLnN1Yih0aGlzLmNlbnRyb2lkLCB4KSwgeSk7IC8vIGxvd2VyLWxlZnRcbiAgICBcdHRoaXMucXVhZFsxXSA9IFZlY3Rvci5zdWIoVmVjdG9yLmFkZCh0aGlzLmNlbnRyb2lkLCB4KSwgeSk7IC8vIGxvd2VyLXJpZ2h0XG4gICAgXHR0aGlzLnF1YWRbMl0gPSBWZWN0b3IuYWRkKFZlY3Rvci5hZGQodGhpcy5jZW50cm9pZCwgeCksIHkpOyAvLyB1cGVyLXJpZ2h0XG4gICAgXHR0aGlzLnF1YWRbM10gPSBWZWN0b3IuYWRkKFZlY3Rvci5zdWIodGhpcy5jZW50cm9pZCwgeCksIHkpOyAvLyB1cGVyLWxlZnRcblxuICAgIFx0dGhpcy5wZXJwQXhlcygpO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcm9qZWN0VG9BeGlzIChvYmIsIGF4aXMpIHtcbiAgICBcdGxldCBpbmYgPSAxZTY7XG4gICAgXHRsZXQgbWluID0gaW5mO1xuICAgIFx0bGV0IG1heCA9IC1pbmY7XG5cbiAgICBcdGxldCBxdWFkID0gb2JiLnF1YWQ7XG5cbiAgICBcdC8vIGZvciBlYWNoIGF4aXMsIHByb2plY3Qgb2JiIHF1YWQgdG8gaXQgYW5kIGZpbmQgbWluIGFuZCBtYXggdmFsdWVzXG4gICAgXHRmb3IgKGxldCBpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgICAgICAgbGV0IGQgPSAgVmVjdG9yLmRvdChxdWFkW2ldLCBheGlzKTtcbiAgICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgZCk7XG4gICAgICAgICAgICBtYXggPSBNYXRoLm1heChtYXgsIGQpO1xuICAgIFx0fVxuXG4gICAgXHRyZXR1cm4gW21pbiwgbWF4XTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXhpc0NvbGxpZGUgKG9iYl9hLCBvYmJfYiwgYXhlcykge1xuICAgIFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAyOyArK2kpIHtcbiAgICBcdFx0bGV0IGFfcHJvaiA9IE9CQi5wcm9qZWN0VG9BeGlzKG9iYl9hLCBheGVzW2ldKTtcbiAgICBcdFx0bGV0IGJfcHJvaiA9IE9CQi5wcm9qZWN0VG9BeGlzKG9iYl9iLCBheGVzW2ldKTtcblxuICAgIFx0XHRpZiAoYl9wcm9qWzBdID4gYV9wcm9qWzFdIHx8IGJfcHJvalsxXSA8IGFfcHJvalswXSkge1xuICAgIFx0XHRcdHJldHVybiBmYWxzZTtcbiAgICBcdFx0fVxuICAgIFx0fVxuICAgIFx0cmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc3RhdGljIGludGVyc2VjdChvYmJfYSwgb2JiX2IpIHtcbiAgICBcdHJldHVybiBPQkIuYXhpc0NvbGxpZGUob2JiX2EsIG9iYl9iLCBvYmJfYS5heGVzKSAmJiBPQkIuYXhpc0NvbGxpZGUob2JiX2EsIG9iYl9iLCBvYmJfYi5heGVzKTtcbiAgICB9XG5cbn1cblxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3Vic2NyaWJlTWl4aW4gKHRhcmdldCkge1xuXG4gICAgdmFyIGxpc3RlbmVycyA9IG5ldyBTZXQoKTtcbiAgICAvLyB2YXIgbGlzdGVuZXJzID0gW107XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih0YXJnZXQsIHtcblxuICAgICAgICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgICAgICAgICAgLy8gbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIC8vIHZhciBpbmRleCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIC8vIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAvLyAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdW5zdWJzY3JpYmVBbGwoKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMuY2xlYXIoKTtcbiAgICAgICAgICAgIC8vIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRyaWdnZXIoZXZlbnQsIC4uLmRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGxpc3RlbmVyIG9mIGxpc3RlbmVycykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJbZXZlbnRdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyW2V2ZW50XSguLi5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH0pO1xuXG59XG4iLCIvLyBNaXNjZWxsYW5lb3VzIHV0aWxpdGllc1xuLypqc2hpbnQgd29ya2VyOiB0cnVlKi9cblxuaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5pbXBvcnQgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCBHZW8gZnJvbSAnLi4vZ2VvJztcblxudmFyIFV0aWxzO1xuZXhwb3J0IGRlZmF1bHQgVXRpbHMgPSB7fTtcblxuLy8gQWRkIGEgYmFzZSBVUkwgZm9yIHNjaGVtZWxlc3Mgb3IgcHJvdG9jb2wtbGVzcyBVUkxzXG4vLyBEZWZhdWx0cyB0byBhZGRpbmcgY3VycmVudCB3aW5kb3cgcHJvdG9jb2wgYW5kIGJhc2UsIG9yIGFkZHMgYSBjdXN0b20gYmFzZSBpZiBzcGVjaWZpZWRcbi8vIE1heWJlIHVzZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcyBpZiBtb3JlIHJvYnVzdCBmdW5jdGlvbmFsaXR5IGlzIG5lZWRlZFxuVXRpbHMuYWRkQmFzZVVSTCA9IGZ1bmN0aW9uICh1cmwsIGJhc2UpIHtcbiAgICBpZiAoIXVybCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2NoZW1lbGVzcywgYWRkIHByb3RvY29sXG4gICAgaWYgKHVybC5zdWJzdHIoMCwgMikgPT09ICcvLycpIHtcbiAgICAgICAgdXJsID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgdXJsO1xuICAgIH1cbiAgICAvLyBObyBodHRwKHMpIG9yIGRhdGEsIGFkZCBiYXNlXG4gICAgZWxzZSBpZiAodXJsLnNlYXJjaCgvXihodHRwfGh0dHBzfGRhdGF8YmxvYik6LykgPCAwKSB7XG4gICAgICAgIHZhciByZWxhdGl2ZSA9ICh1cmxbMF0gIT09ICcvJyk7XG4gICAgICAgIHZhciBiYXNlX2luZm87XG4gICAgICAgIGlmIChiYXNlKSB7XG4gICAgICAgICAgICBiYXNlX2luZm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7IC8vIHVzZSBhIHRlbXBvcmFyeSBlbGVtZW50IHRvIHBhcnNlIFVSTFxuICAgICAgICAgICAgYmFzZV9pbmZvLmhyZWYgPSBiYXNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYmFzZV9pbmZvID0gd2luZG93LmxvY2F0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbGF0aXZlKSB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IGJhc2VfaW5mby5ocmVmLm1hdGNoKC8oW15cXCNdKykvKTsgLy8gc3RyaXAgaGFzaFxuICAgICAgICAgICAgcGF0aCA9IChwYXRoICYmIHBhdGgubGVuZ3RoID4gMSkgPyBwYXRoWzBdIDogJyc7XG4gICAgICAgICAgICB1cmwgPSBwYXRoICsgdXJsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gRWFzeSB3YXlcbiAgICAgICAgICAgIGlmIChiYXNlX2luZm8ub3JpZ2luKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gYmFzZV9pbmZvLm9yaWdpbiArICcvJyArIHVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEhhcmQgd2F5IChJRTExKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIG9yaWdpbiA9IHVybC5tYXRjaCgvXigoaHR0cHxodHRwc3xkYXRhfGJsb2IpOlxcL1xcL1teXFwvXSpcXC8pLyk7XG4gICAgICAgICAgICAgICAgb3JpZ2luID0gKG9yaWdpbiAmJiBvcmlnaW4ubGVuZ3RoID4gMSkgPyBvcmlnaW5bMF0gOiAnJztcbiAgICAgICAgICAgICAgICB1cmwgPSBvcmlnaW4gKyB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn07XG5cblV0aWxzLnBhdGhGb3JVUkwgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgaWYgKHVybCAmJiB1cmwuc2VhcmNoKC9eKGRhdGF8YmxvYik6LykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiB1cmwuc3Vic3RyKDAsIHVybC5sYXN0SW5kZXhPZignLycpICsgMSkgfHwgJy4vJztcbiAgICB9XG4gICAgcmV0dXJuICcuLyc7XG59O1xuXG5VdGlscy5jYWNoZUJ1c3RlckZvclVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICBpZiAodXJsLnNlYXJjaCgvXihkYXRhfGJsb2IpOi8pID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHVybDsgLy8gbm8gY2FjaGUtYnVzdGluZyBvbiBvYmplY3Qgb3IgZGF0YSBVUkxzXG4gICAgfVxuICAgIGlmICh1cmwuaW5kZXhPZignPycpID4gLTEpIHtcbiAgICAgICAgdXJsICs9ICcmJyArICgrbmV3IERhdGUoKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB1cmwgKz0gJz8nICsgKCtuZXcgRGF0ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn07XG5cbi8vIEFkZCBhIHNldCBvZiBxdWVyeSBzdHJpbmcgcGFyYW1zIHRvIGEgVVJMXG4vLyBwYXJhbXM6IGhhc2ggb2Yga2V5L3ZhbHVlIHBhaXJzIG9mIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzXG5VdGlscy5hZGRQYXJhbXNUb1VSTCA9IGZ1bmN0aW9uICh1cmwsIHBhcmFtcykge1xuICAgIGlmICghcGFyYW1zIHx8IE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgdmFyIHFzX2luZGV4ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICB2YXIgaGFzaF9pbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG5cbiAgICAvLyBTYXZlIGFuZCB0cmltIGhhc2hcbiAgICB2YXIgaGFzaCA9ICcnO1xuICAgIGlmIChoYXNoX2luZGV4ID4gLTEpIHtcbiAgICAgICAgaGFzaCA9IHVybC5zbGljZShoYXNoX2luZGV4KTtcbiAgICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2hfaW5kZXgpO1xuICAgIH1cblxuICAgIC8vIFN0YXJ0IHF1ZXJ5IHN0cmluZ1xuICAgIGlmIChxc19pbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcXNfaW5kZXggPSB1cmwubGVuZ3RoO1xuICAgICAgICB1cmwgKz0gJz8nO1xuICAgIH1cbiAgICBxc19pbmRleCsrOyAvLyBhZHZhbmNlZCBwYXN0ICc/J1xuXG4gICAgLy8gQnVpbGQgcXVlcnkgc3RyaW5nIHBhcmFtc1xuICAgIHZhciB1cmxfcGFyYW1zID0gJyc7XG4gICAgZm9yICh2YXIgcCBpbiBwYXJhbXMpIHtcbiAgICAgICAgdXJsX3BhcmFtcyArPSBgJHtwfT0ke3BhcmFtc1twXX0mYDtcbiAgICB9XG5cbiAgICAvLyBJbnNlcnQgbmV3IHF1ZXJ5IHN0cmluZyBwYXJhbXMgYW5kIHJlc3RvcmUgaGFzaFxuICAgIC8vIE5PVEU6IGRvZXNuJ3QgcmVwbGFjZSBhbnkgdmFsdWVzIGFscmVhZHkgcHJlc2VudCBvbiBxdWVyeSBzdHJpbmcsIGp1c3QgaW5zZXJ0cyBkdXBlIHZhbHVlc1xuICAgIHVybCA9IHVybC5zbGljZSgwLCBxc19pbmRleCkgKyB1cmxfcGFyYW1zICsgdXJsLnNsaWNlKHFzX2luZGV4KSArIGhhc2g7XG5cbiAgICByZXR1cm4gdXJsO1xufTtcblxuLy8gUG9seWZpbGwgKGZvciBTYWZhcmkgY29tcGF0aWJpbGl0eSlcblV0aWxzLl9jcmVhdGVPYmplY3RVUkwgPSB1bmRlZmluZWQ7XG5VdGlscy5jcmVhdGVPYmplY3RVUkwgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgaWYgKFV0aWxzLl9jcmVhdGVPYmplY3RVUkwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBVdGlscy5fY3JlYXRlT2JqZWN0VVJMID0gKHdpbmRvdy5VUkwgJiYgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwpIHx8ICh3aW5kb3cud2Via2l0VVJMICYmIHdpbmRvdy53ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKTtcblxuICAgICAgICBpZiAodHlwZW9mIFV0aWxzLl9jcmVhdGVPYmplY3RVUkwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIFV0aWxzLl9jcmVhdGVPYmplY3RVUkwgPSBudWxsO1xuICAgICAgICAgICAgbG9nLndhcm4oYHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMIChvciB2ZW5kb3IgcHJlZml4KSBub3QgZm91bmQsIHVuYWJsZSB0byBjcmVhdGUgbG9jYWwgYmxvYiBVUkxzYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoVXRpbHMuX2NyZWF0ZU9iamVjdFVSTCkge1xuICAgICAgICByZXR1cm4gVXRpbHMuX2NyZWF0ZU9iamVjdFVSTCh1cmwpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG59O1xuXG5VdGlscy5pbyA9IGZ1bmN0aW9uICh1cmwsIHRpbWVvdXQgPSA2MDAwMCwgcmVzcG9uc2VUeXBlID0gJ3RleHQnLCBtZXRob2QgPSAnR0VUJywgaGVhZGVycyA9IHt9KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKTtcbiAgICAgICAgcmVxdWVzdC50aW1lb3V0ID0gdGltZW91dDtcbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGU7XG4gICAgICAgIHJlcXVlc3Qub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICBpZiAoWyd0ZXh0JywgJ2pzb24nXS5pbmRleE9mKHJlcXVlc3QucmVzcG9uc2VUeXBlKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxdWVzdC5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcignUmVxdWVzdCBlcnJvciB3aXRoIGEgc3RhdHVzIG9mICcgKyByZXF1ZXN0LnN0YXR1c1RleHQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gKGV2dCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KEVycm9yKCdUaGVyZSB3YXMgYSBuZXR3b3JrIGVycm9yJyArIGV2dC50b1N0cmluZygpKSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlcXVlc3Qub250aW1lb3V0ID0gKGV2dCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KEVycm9yKCd0aW1lb3V0ICcrIGV2dC50b1N0cmluZygpKSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsICdyZXF1ZXN0Jywge1xuICAgICAgICB2YWx1ZTogcmVxdWVzdFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5VdGlscy5wYXJzZVJlc291cmNlID0gZnVuY3Rpb24gKGJvZHkpIHtcbiAgICB2YXIgZGF0YTtcbiAgICB0cnkge1xuICAgICAgICAvLyBqc3lhbWwgJ2pzb24nIG9wdGlvbiBhbGxvd3MgZHVwbGljYXRlIGtleXNcbiAgICAgICAgLy8gS2VlcGluZyB0aGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0IHNob3VsZCBjb25zaWRlciBtaWdyYXRpbmcgdG8gcmVxdWlyaW5nXG4gICAgICAgIC8vIHVuaXF1ZSBrZXlzLCBhcyB0aGlzIGlzIFlBTUwgc3BlYy4gQnV0IFRhbmdyYW0gRVMgY3VycmVudGx5IGFjY2VwdHMgZHVwZSBrZXlzIGFzIHdlbGwsXG4gICAgICAgIC8vIHNvIHNob3VsZCBjb25zaWRlciBob3cgYmVzdCB0byB1bmlmeS5cbiAgICAgICAgZGF0YSA9IHlhbWwuc2FmZUxvYWQoYm9keSwgeyBqc29uOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG5VdGlscy5sb2FkUmVzb3VyY2UgPSBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBVdGlscy5pbyhVdGlscy5jYWNoZUJ1c3RlckZvclVybChzb3VyY2UpKS50aGVuKChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBVdGlscy5wYXJzZVJlc291cmNlKGJvZHkpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG4vLyBOZWVkZWQgZm9yIG9sZGVyIGJyb3dzZXJzIHRoYXQgc3RpbGwgc3VwcG9ydCBXZWJHTCAoU2FmYXJpIDYgZXRjLilcblV0aWxzLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID1cbiAgICAgICAgICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgICAgICAgIHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgICAgfHxcbiAgICAgICAgICAgIHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lICAgICAgfHxcbiAgICAgICAgICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSAgICAgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIDEwMDAgLzYwKTtcbiAgICAgICAgICAgIH07XG4gICAgfVxufTtcblxuLy8gU3RyaW5naWZ5IGFuIG9iamVjdCBpbnRvIEpTT04sIGJ1dCBjb252ZXJ0IGZ1bmN0aW9ucyB0byBzdHJpbmdzXG5VdGlscy5zZXJpYWxpemVXaXRoRnVuY3Rpb25zID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBzZXJpYWxpemVkID0gSlNPTi5zdHJpbmdpZnkob2JqLCBmdW5jdGlvbihrLCB2KSB7XG4gICAgICAgIC8vIENvbnZlcnQgZnVuY3Rpb25zIHRvIHN0cmluZ3NcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG59O1xuXG4vLyBQYXJzZSBhIEpTT04gc3RyaW5nLCBidXQgY29udmVydCBmdW5jdGlvbi1saWtlIHN0cmluZ3MgYmFjayBpbnRvIGZ1bmN0aW9uc1xuVXRpbHMuZGVzZXJpYWxpemVXaXRoRnVuY3Rpb25zID0gZnVuY3Rpb24oc2VyaWFsaXplZCwgd3JhcCkge1xuICAgIHZhciBvYmogPSBKU09OLnBhcnNlKHNlcmlhbGl6ZWQpO1xuICAgIG9iaiA9IFV0aWxzLnN0cmluZ3NUb0Z1bmN0aW9ucyhvYmosIHdyYXApO1xuICAgIHJldHVybiBvYmo7XG59O1xuXG4vLyBSZWN1cnNpdmVseSBwYXJzZSBhbiBvYmplY3QsIGF0dGVtcHRpbmcgdG8gY29udmVydCBzdHJpbmcgcHJvcGVydGllcyB0aGF0IGxvb2sgbGlrZSBmdW5jdGlvbnMgYmFjayBpbnRvIGZ1bmN0aW9uc1xuVXRpbHMuc3RyaW5nc1RvRnVuY3Rpb25zID0gZnVuY3Rpb24ob2JqLCB3cmFwKSB7XG4gICAgLy8gQ29udmVydCBzdHJpbmdcbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb2JqID0gVXRpbHMuc3RyaW5nVG9GdW5jdGlvbihvYmosIHdyYXApO1xuICAgIH1cbiAgICAvLyBMb29wIHRocm91Z2ggb2JqZWN0IHByb3BlcnRpZXNcbiAgICBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGxldCBwIGluIG9iaikge1xuICAgICAgICAgICAgb2JqW3BdID0gVXRpbHMuc3RyaW5nc1RvRnVuY3Rpb25zKG9ialtwXSwgd3JhcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn07XG5cbi8vIENvbnZlcnQgc3RyaW5nIGJhY2sgaW50byBhIGZ1bmN0aW9uXG4vLyBUT0RPOiBtYWtlIGZ1bmN0aW9uIG1hdGNoaW5nIHRvbGVyYW50IG9mIHdoaXRlc3BhY2UgYW5kIG11bHRpbGluZXNcblV0aWxzLnN0cmluZ1RvRnVuY3Rpb24gPSBmdW5jdGlvbih2YWwsIHdyYXApIHtcbiAgICAvLyBDb252ZXJ0IHN0cmluZ3MgYmFjayBpbnRvIGZ1bmN0aW9uc1xuICAgIGlmICh2YWwubWF0Y2goL15cXHMqZnVuY3Rpb25cXHMqXFx3KlxccypcXChbXFxzXFxTXSpcXClcXHMqXFx7W1xcc1xcU10qXFx9L20pICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHdyYXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBldmFsKCdmID0gJyArIHdyYXAodmFsKSk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXZhbCgnZiA9ICcgKyB2YWwpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBmYWxsLWJhY2sgdG8gb3JpZ2luYWwgdmFsdWUgaWYgcGFyc2luZyBmYWlsZWRcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIExvZyB3cmFwcGVyLCBzZW5kcyBtZXNzYWdlIHRvIG1haW4gdGhyZWFkIGZvciBkaXNwbGF5LCBhbmQgaW5jbHVkZXMgd29ya2VyIGlkICNcblV0aWxzLmxvZyA9IGZ1bmN0aW9uIChsZXZlbCwgLi4ubXNnKSB7XG4gICAgbGV2ZWwgPSBsZXZlbCB8fCAnaW5mbyc7XG4gICAgaWYgKFV0aWxzLmlzV29ya2VyVGhyZWFkKSB7XG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2xvZycsXG4gICAgICAgICAgICBsZXZlbDogbGV2ZWwsXG4gICAgICAgICAgICB3b3JrZXJfaWQ6IHNlbGYuX3dvcmtlcl9pZCxcbiAgICAgICAgICAgIG1zZzogbXNnXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGxvZ1tsZXZlbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbG9nW2xldmVsXSguLi5tc2cpO1xuICAgIH1cbn07XG5cbi8vIERlZmF1bHQgdG8gYWxsb3dpbmcgaGlnaCBwaXhlbCBkZW5zaXR5XG4vLyBSZXR1cm5zIHRydWUgaWYgZGlzcGxheSBkZW5zaXR5IGNoYW5nZWRcblV0aWxzLnVzZV9oaWdoX2RlbnNpdHlfZGlzcGxheSA9IHRydWU7XG5VdGlscy51cGRhdGVEZXZpY2VQaXhlbFJhdGlvID0gZnVuY3Rpb24gKCkge1xuICAgIGxldCBwcmV2ID0gVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvO1xuICAgIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbyA9IChVdGlscy51c2VfaGlnaF9kZW5zaXR5X2Rpc3BsYXkgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8pIHx8IDE7XG4gICAgcmV0dXJuIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbyAhPT0gcHJldjtcbn07XG5cbi8vIE1hcmsgdGhyZWFkIGFzIG1haW4gb3Igd29ya2VyXG4oZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHdpbmRvdy5kb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBVdGlscy5pc1dvcmtlclRocmVhZCA9IGZhbHNlO1xuICAgICAgICAgICAgVXRpbHMuaXNNYWluVGhyZWFkICAgPSB0cnVlO1xuICAgICAgICAgICAgVXRpbHMudXBkYXRlRGV2aWNlUGl4ZWxSYXRpbygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzZWxmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIFV0aWxzLmlzV29ya2VyVGhyZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgIFV0aWxzLmlzTWFpblRocmVhZCAgID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59KSgpO1xuXG4vLyBHZXQgVVJMIHRoYXQgdGhlIGN1cnJlbnQgc2NyaXB0IHdhcyBsb2FkZWQgZnJvbVxuLy8gSWYgY3VycmVudFNjcmlwdCBpcyBub3QgYXZhaWxhYmxlLCBsb29wcyB0aHJvdWdoIDxzY3JpcHQ+IGVsZW1lbnRzIHNlYXJjaGluZyBmb3IgYSBsaXN0IG9mIHByb3ZpZGVkIHBhdGhzXG4vLyBlLmcuIFV0aWxzLmZpbmRDdXJyZW50VVJMKCd0YW5ncmFtLmRlYnVnLmpzJywgJ3RhbmdyYW0ubWluLmpzJyk7XG5VdGlscy5maW5kQ3VycmVudFVSTCA9IGZ1bmN0aW9uICguLi5wYXRocykge1xuICAgIC8vIEZpbmQgY3VycmVudGx5IGV4ZWN1dGluZyBzY3JpcHRcbiAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdDtcbiAgICBpZiAoc2NyaXB0KSB7XG4gICAgICAgIHJldHVybiBzY3JpcHQuc3JjO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBhdGhzKSkge1xuICAgICAgICAvLyBGYWxsYmFjayBvbiBsb29waW5nIHRocm91Z2ggPHNjcmlwdD4gZWxlbWVudHMgaWYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCBpcyBub3Qgc3VwcG9ydGVkXG4gICAgICAgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpO1xuICAgICAgICBmb3IgKHZhciBzPTA7IHMgPCBzY3JpcHRzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwYXRoIG9mIHBhdGhzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjcmlwdHNbc10uc3JjLmluZGV4T2YocGF0aCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHRzW3NdLnNyYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vLyBVc2VkIGZvciBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBwb3dlci1vZi0yIGFuZCBub24tcG93ZXItb2YtMiB0ZXh0dXJlc1xuLy8gVmlhOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE5NzIyMjQ3L3dlYmdsLXdhaXQtZm9yLXRleHR1cmUtdG8tbG9hZFxuVXRpbHMuaXNQb3dlck9mMiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmICh2YWx1ZSAtIDEpKSA9PT0gMDtcbn07XG5cblV0aWxzLm5leHRQb3dlck9mMiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGguY2VpbChNYXRoLmxvZzIodmFsdWUpKSk7XG59O1xuXG4vLyBJbnRlcnBvbGF0ZSAneCcgYWxvbmcgYSBzZXJpZXMgb2YgY29udHJvbCBwb2ludHNcbi8vICdwb2ludHMnIGlzIGFuIGFycmF5IG9mIGNvbnRyb2wgcG9pbnRzIGluIHRoZSBmb3JtIFt4LCB5XVxuLy9cbi8vIEV4YW1wbGU6XG4vLyAgICAgQ29udHJvbCBwb2ludHM6XG4vLyAgICAgICAgIFswLCA1XTogIHdoZW4geD0wLCB5PTVcbi8vICAgICAgICAgWzQsIDEwXTogd2hlbiB4PTQsIHk9MTBcbi8vXG4vLyAgICAgVXRpbHMuaW50ZXJwb2xhdGUoMiwgW1swLCA1XSwgWzQsIDEwXV0pO1xuLy8gICAgIC0+IGNvbXB1dGVzIHg9MiwgaGFsZndheSBiZXR3ZWVuIHg9MCBhbmQgeD00OiAoMTAgLSA1KSAvIDIgKzVcbi8vICAgICAtPiByZXR1cm5zIDcuNVxuLy9cbi8vIFRPRE86IGFkZCBvdGhlciBpbnRlcnBvbGF0aW9uIG1ldGhvZHMgYmVzaWRlcyBsaW5lYXJcbi8vXG5VdGlscy5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKHgsIHBvaW50cywgdHJhbnNmb3JtKSB7XG4gICAgLy8gSWYgdGhpcyBkb2Vzbid0IHJlc2VtYmxlIGEgbGlzdCBvZiBjb250cm9sIHBvaW50cywganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykgfHwgIUFycmF5LmlzQXJyYXkocG9pbnRzWzBdKSkge1xuICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgIH1cbiAgICBlbHNlIGlmIChwb2ludHMubGVuZ3RoIDwgMSkge1xuICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgIH1cblxuICAgIHZhciB4MSwgeDIsIGQsIHksIHkxLCB5MjtcblxuICAgIC8vIE1pbiBib3VuZHNcbiAgICBpZiAoeCA8PSBwb2ludHNbMF1bMF0pIHtcbiAgICAgICAgeSA9IHBvaW50c1swXVsxXTtcbiAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHkgPSB0cmFuc2Zvcm0oeSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWF4IGJvdW5kc1xuICAgIGVsc2UgaWYgKHggPj0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV1bMF0pIHtcbiAgICAgICAgeSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdWzFdO1xuICAgICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgeSA9IHRyYW5zZm9ybSh5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBGaW5kIHdoaWNoIGNvbnRyb2wgcG9pbnRzIHggaXMgYmV0d2VlblxuICAgIGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpPTA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoeCA+PSBwb2ludHNbaV1bMF0gJiYgeCA8IHBvaW50c1tpKzFdWzBdKSB7XG4gICAgICAgICAgICAgICAgLy8gTGluZWFyIGludGVycG9sYXRpb25cbiAgICAgICAgICAgICAgICB4MSA9IHBvaW50c1tpXVswXTtcbiAgICAgICAgICAgICAgICB4MiA9IHBvaW50c1tpKzFdWzBdO1xuXG4gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgdmFsdWVzXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocG9pbnRzW2ldWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICB5ID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGM9MDsgYyA8IHBvaW50c1tpXVsxXS5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IHRyYW5zZm9ybShwb2ludHNbaV1bMV1bY10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyID0gdHJhbnNmb3JtKHBvaW50c1tpKzFdWzFdW2NdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0geTIgLSB5MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5W2NdID0gZCAqICh4IC0geDEpIC8gKHgyIC0geDEpICsgeTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gcG9pbnRzW2krMV1bMV1bY10gLSBwb2ludHNbaV1bMV1bY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeVtjXSA9IGQgKiAoeCAtIHgxKSAvICh4MiAtIHgxKSArIHBvaW50c1tpXVsxXVtjXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTaW5nbGUgdmFsdWVcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gdHJhbnNmb3JtKHBvaW50c1tpXVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB5MiA9IHRyYW5zZm9ybShwb2ludHNbaSsxXVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkID0geTIgLSB5MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBkICogKHggLSB4MSkgLyAoeDIgLSB4MSkgKyB5MTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBwb2ludHNbaSsxXVsxXSAtIHBvaW50c1tpXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBkICogKHggLSB4MSkgLyAoeDIgLSB4MSkgKyBwb2ludHNbaV1bMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHk7XG59O1xuXG4vLyBJdGVyYXRvcnMgKEVTNiBnZW5lcmF0b3JzKVxuXG4vLyBJdGVyYXRvciBmb3Iga2V5L3ZhbHVlIHBhaXJzIG9mIGFuIG9iamVjdFxuVXRpbHMuZW50cmllcyA9IGZ1bmN0aW9uKiAob2JqKSB7XG4gICAgZm9yICh2YXIga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgeWllbGQgW2tleSwgb2JqW2tleV1dO1xuICAgIH1cbn07XG5cbi8vIEl0ZXJhdG9yIGZvciB2YWx1ZXMgb2YgYW4gb2JqZWN0XG5VdGlscy52YWx1ZXMgPSBmdW5jdGlvbiogKG9iaikge1xuICAgIGZvciAodmFyIGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgIHlpZWxkIG9ialtrZXldO1xuICAgIH1cbn07XG5cbi8vIFJlY3Vyc2l2ZSBpdGVyYXRvcnMgZm9yIGFsbCBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCwgbm8gbWF0dGVyIGhvdyBkZWVwbHkgbmVzdGVkXG4vLyBUT0RPOiBmaXggZm9yIGNpcmN1bGFyIHN0cnVjdHVyZXNcblV0aWxzLnJlY3Vyc2VFbnRyaWVzID0gZnVuY3Rpb24qIChvYmopIHtcbiAgICBpZiAoIW9iaikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgIGlmIChvYmpba2V5XSkge1xuICAgICAgICAgICAgeWllbGQgW2tleSwgb2JqW2tleV0sIG9ial07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBVdGlscy5yZWN1cnNlRW50cmllcyhvYmpba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5VdGlscy5yZWN1cnNlVmFsdWVzID0gZnVuY3Rpb24qIChvYmopIHtcbiAgICBpZiAoIW9iaikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgIGlmIChvYmpba2V5XSkge1xuICAgICAgICAgICAgeWllbGQgb2JqW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBVdGlscy5yZWN1cnNlVmFsdWVzKG9ialtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8vIFNjYWxlIGEgKnNpZ25lZCogc2hvcnQgZm9yIHVzZSBpbiBhIEdMIFZCT1xuLy8gYHVuaXRgIGlzIGFuIG9wdGlvbmFsIHNjYWxpbmcgZmFjdG9yIHRvIG1pbWljIGZpeGVkIHBvaW50LCBzaW5jZSB0aGVzZSB2YWx1ZXMgd2lsbCBiZVxuLy8gbm9ybWFsaXplZCB0byAwLTEsIGUuZy4gZGl2aWRlIGlucHV0IGJ5IHVuaXQgb24gdGhlIHdheSBpbiwgbXVsdGlwbHkgaXQgYmFjayBpbiB0aGUgc2hhZGVyXG5VdGlscy5zY2FsZUludDE2ID0gZnVuY3Rpb24gKHZhbCwgdW5pdCkge1xuICAgIHJldHVybiAodmFsIC8gdW5pdCkgKiAzMjc2Nztcbn07XG5cblV0aWxzLmRlZ1RvUmFkID0gZnVuY3Rpb24gKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIE1hdGguUEkgLyAxODA7XG59O1xuXG5VdGlscy5yYWRUb0RlZyA9IGZ1bmN0aW9uIChyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiAxODAgLyBNYXRoLlBJO1xufTtcblxuVXRpbHMudG9DU1NDb2xvciA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgIGlmIChjb2xvclszXSA9PT0gMSkgeyAvLyBmdWxsIG9wYWNpdHlcbiAgICAgICAgcmV0dXJuIGByZ2IoJHtjb2xvci5zbGljZSgwLCAzKS5tYXAoYyA9PiBNYXRoLnJvdW5kKGMgKiAyNTUpKS5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICAvLyBSR0IgaXMgYmV0d2VlbiBbMCwgMjU1XSBvcGFjaXR5IGlzIGJldHdlZW4gWzAsIDFdXG4gICAgcmV0dXJuIGByZ2JhKCR7Y29sb3IubWFwKChjLCBpKSA9PiAoaSA8IDMgJiYgTWF0aC5yb3VuZChjICogMjU1KSkgfHwgYykuam9pbignLCAnKX0pYDtcbn07XG5cblV0aWxzLnBvaW50SW5UaWxlID0gZnVuY3Rpb24gKHBvaW50KSB7XG4gICAgcmV0dXJuIHBvaW50WzBdID49IDAgJibCoHBvaW50WzFdID4gLUdlby50aWxlX3NjYWxlICYmIHBvaW50WzBdIDwgR2VvLnRpbGVfc2NhbGUgJiYgcG9pbnRbMV0gPD0gMDtcbn07XG5cbi8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzYxNjQ2MS9nZW5lcmF0ZS1hLWhhc2gtZnJvbS1zdHJpbmctaW4tamF2YXNjcmlwdC1qcXVlcnlcblV0aWxzLmhhc2hTdHJpbmcgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgbGV0IGhhc2ggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBsZXQgY2hyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNocjtcbiAgICAgICAgaGFzaCB8PSAwO1xuICAgIH1cbiAgICByZXR1cm4gaGFzaDtcbn07XG5cblV0aWxzLmRlYm91bmNlID0gZnVuY3Rpb24gKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIGxldCB0aW1lb3V0O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgbGV0IGNvbnRleHQgPSB0aGlzLFxuICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgbGV0IGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgICBpZiAoY2FsbE5vdykge1xuICAgICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwidmFyIHZlcnNpb247XG5leHBvcnQgZGVmYXVsdCB2ZXJzaW9uID0ge1xuICAgIGdldCBzdHJpbmcoKSB7IHJldHVybiBgdiR7dmVyc2lvbi5tYWpvcn0uJHt2ZXJzaW9uLm1pbm9yfS4ke3ZlcnNpb24ucGF0Y2h9YDsgfSxcbiAgICBtYWpvcjogMCxcbiAgICBtaW5vcjogNyxcbiAgICBwYXRjaDogMixcbiAgICBwcmU6IGZhbHNlXG59O1xuIiwiLypqc2hpbnQgd29ya2VyOiB0cnVlKi9cblxuLy8gV29ya2VyQnJva2VyIHJvdXRlcyBtZXNzYWdlcyBiZXR3ZWVuIHdlYiB3b3JrZXJzIGFuZCB0aGUgbWFpbiB0aHJlYWQsIGFsbG93aW5nIGZvciBzaW1wbGVyXG4vLyBhc3luYyBjb2RlIHZpYSBwcm9taXNlcy4gRXhhbXBsZSB1c2FnZTpcbi8vXG4vLyBJbiB3ZWIgd29ya2VyLCByZWdpc3RlciBzZWxmIGFzIHRhcmdldCBkZWZpbmUgYSBtZXRob2Q6XG4vL1xuLy8gICAgIFdvcmtlckJyb2tlci5hZGRUYXJnZXQoJ3NlbGYnLCBzZWxmKTtcbi8vXG4vLyAgICAgc2VsZi5zcXVhcmUgPSBmdW5jdGlvbiAoeCkge1xuLy8gICAgICAgICByZXR1cm4geCAqIHg7XG4vLyAgICAgfTtcbi8vXG4vLyBJbiBtYWluIHRocmVhZCwgaW52b2tlIHRoYXQgbWV0aG9kIGFuZCByZWNlaXZlIHRoZSByZXN1bHQgKGlmIGFueSkgYXMgYSBwcm9taXNlOlxuLy9cbi8vICAgICB3b3JrZXIgPSBuZXcgV29ya2VyKC4uLik7XG4vLyAgICAgV29ya2VyQnJva2VyLmFkZFdvcmtlcih3b3JrZXIpO1xuLy9cbi8vICAgICBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2Uod29ya2VyLCAnc2VsZi5zcXVhcmUnLCA1KS50aGVuKGZ1bmN0aW9uKHkpIHtcbi8vICAgICAgICAgY29uc29sZS5sb2coeSk7XG4vLyAgICAgfSk7XG4vL1xuLy8gICAgIC0+IHByaW50cyAyNVxuLy9cbi8vIEFzeW5jIGNvZGU6XG4vL1xuLy8gRm9yIHN5bmNocm9ub3VzIGNvZGUgdGhhdCBtdXN0IHBhc3MgYSByZXR1cm4gdmFsdWUgdG8gdGhlIG1haW4gdGhyZWFkLCB0aGUgZnVuY3Rpb24gY2FuIHNpbXBseVxuLy8gcmV0dXJuIGFuIGltbWVkaWF0ZSB2YWx1ZSAoc2VlIGV4YW1wbGUgYWJvdmUpLiBGb3IgY2FzZXMgd2hlcmUgdGhlIHdvcmtlciBtZXRob2QgbmVlZHMgdG8gcnVuXG4vLyBhc3luY2hyb25vdXMgY29kZSwgdGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gYSBwcm9taXNlLCBhbmQgdGhlIHJlc29sdmVkIG9yIHJlamVjdGVkIHZhbHVlIHdpbGxcbi8vIGJlIHNlbnQgYmFjayB0byB0aGUgbWFpbiB0aHJlYWQgd2hlbiB0aGUgcHJvbWlzZSBpcyBmdWxmaWxsZWQuXG4vL1xuLy8gRXJyb3IgaGFuZGxpbmc6XG4vL1xuLy8gSWYgdGhlIHdvcmtlciBtZXRob2QgZWl0aGVyIHRocm93cyBhbiBlcnJvciwgb3IgcmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyByZWplY3RlZCwgaXQgd2lsbCBiZVxuLy8gc2VudCBiYWNrIHRvIHRoZSBtYWluIHRocmVhZCBhcyBhIHByb21pc2UgcmVqZWN0aW9uLiBUaGVzZSB0d28gZXhhbXBsZXMgYXJlIGVxdWl2YWxlbnQ6XG4vL1xuLy8gICAgIEluIHdvcmtlciwgdGhyb3dpbmcgYW4gZXJyb3I6XG4vL1xuLy8gICAgICAgICBzZWxmLmJyb2tlbiA9IGZ1bmN0aW9uICgpIHtcbi8vICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgaW4gd29ya2VyIScpO1xuLy8gICAgICAgICB9O1xuLy9cbi8vICAgICBJbiB3b3JrZXIsIHJldHVybmluZyBhIHJlamVjdGVkIHByb21pc2U6XG4vL1xuLy8gICAgICAgICBzZWxmLmJyb2tlbiA9IGZ1bmN0aW9uICgpIHtcbi8vICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ2Vycm9yIGluIHdvcmtlciEnKSk7XG4vLyAgICAgICAgIH07XG4vL1xuLy8gICAgIEluIG1haW4gdGhyZWFkLCBib3RoIGVycm9ycyBhcmUgcmVjZWl2ZWQgYXMgYSBwcm9taXNlIHJlamVjdGlvbjpcbi8vXG4vLyAgICAgICAgIFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh3b3JrZXIsICdzZWxmLmJyb2tlbicpLnRoZW4oXG4vLyAgICAgICAgICAgICAvLyBQcm9taXNlIHJlc29sdmVkXG4vLyAgICAgICAgICAgICBmdW5jdGlvbigpIHtcbi8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnc3VjY2VzcyEnKTtcbi8vICAgICAgICAgICAgIH0sXG4vLyAgICAgICAgICAgICAvLyBQcm9taXNlIHJlamVjdGVkXG4vLyAgICAgICAgICAgICBmdW5jdGlvbihlcnJvcikge1xuLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciEnLCBlcnJvcik7XG4vLyAgICAgICAgICAgICB9KTtcbi8vXG4vLyAgICAgICAgIC0+IHByaW50cyAnZXJyb3IhIGVycm9yIGluIHdvcmtlcidcbi8vXG4vLyBDYWxsaW5nIGZyb20gd29ya2VyIHRvIG1haW4gdGhyZWFkOlxuLy9cbi8vIFRoZSBzYW1lIHN0eWxlIG9mIGNhbGxzIGNhbiBiZSBtYWRlICpmcm9tKiBhIHdlYiB3b3JrZXIsIHRvIHRoZSBtYWluIHRocmVhZC4gVGhlIEFQSSBpcyB0aGUgc2FtZVxuLy8gd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50LCAnd29ya2VyJywgaXMgbm90IG5lZWRlZCBmb3IgV29ya2VyQnJva2VyLnBvc3RNZXNzYWdlKCksXG4vLyBzaW5jZSB0aGUgbWFpbiB0aHJlYWQgaXMgdGhlIGltcGxpY2l0IHRhcmdldC5cbi8vXG4vLyBJbiBtYWluIHRocmVhZCwgZGVmaW5lIGEgbWV0aG9kIGFuZCByZWdpc3RlciBpdDpcbi8vXG4vLyAgICAgdmFyIGdlb21ldHJ5ID0ge1xuLy8gICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uKHgsIHkpIHtcbi8vICAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4vLyAgICAgICAgIH1cbi8vICAgICB9O1xuLy9cbi8vICAgICBXb3JrZXJCcm9rZXIuYWRkVGFyZ2V0KCdnZW9tZXRyeScsIGdlb21ldHJ5KTtcbi8vXG4vLyBJbiB3b3JrZXIgdGhyZWFkOlxuLy9cbi8vICAgICBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2UoJ2dlb21ldHJ5Lmxlbmd0aCcsIDMsIDQpLnRoZW4oZnVuY3Rpb24oZCkge1xuLy8gICAgICAgICBjb25zb2xlLmxvZyhkKTtcbi8vICAgICB9KTtcbi8vXG4vLyAgICAgLT4gcHJpbnRzIDVcbi8vXG5cbmltcG9ydCBVdGlscyBmcm9tICcuL3V0aWxzJztcblxudmFyIFdvcmtlckJyb2tlcjtcbmV4cG9ydCBkZWZhdWx0IFdvcmtlckJyb2tlciA9IHt9O1xuXG4vLyBHbG9iYWwgbGlzdCBvZiBhbGwgd29ya2VyIG1lc3NhZ2VzXG4vLyBVbmlxdWVseSB0cmFja3MgZXZlcnkgY2FsbCBtYWRlIGJldHdlZW4gbWFpbiB0aHJlYWQgYW5kIGEgd29ya2VyXG52YXIgbWVzc2FnZV9pZCA9IDA7XG52YXIgbWVzc2FnZXMgPSB7fTtcblxuLy8gUmVnaXN0ZXIgYW4gb2JqZWN0IHRvIHJlY2VpdmUgY2FsbHMgZnJvbSBvdGhlciB0aHJlYWRcbnZhciB0YXJnZXRzID0ge307XG5Xb3JrZXJCcm9rZXIuYWRkVGFyZ2V0ID0gZnVuY3Rpb24gKG5hbWUsIHRhcmdldCkge1xuICAgIHRhcmdldHNbbmFtZV0gPSB0YXJnZXQ7XG59O1xuXG4vLyBHaXZlbiBhIGRvdC1ub3RhdGlvbi1zdHlsZSBtZXRob2QgbmFtZSwgZS5nLiAnT2JqZWN0Lm9iamVjdC5tZXRob2QnLFxuLy8gZmluZCB0aGUgb2JqZWN0IHRvIGNhbGwgdGhlIG1ldGhvZCBvbiBmcm9tIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgdGFyZ2V0c1xuZnVuY3Rpb24gZmluZFRhcmdldCAobWV0aG9kKSB7XG4gICAgdmFyIGNoYWluID0gW107XG4gICAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNoYWluID0gbWV0aG9kLnNwbGl0KCcuJyk7XG4gICAgICAgIG1ldGhvZCA9IGNoYWluLnBvcCgpO1xuICAgIH1cblxuICAgIC8vIHRhcmdldCA9IHRhcmdldCB8fCAoVXRpbHMuaXNNYWluVGhyZWFkICYmIHdpbmRvdykgfHwgKFV0aWxzLmlzV29ya2VyVGhyZWFkICYmIHNlbGYpO1xuICAgIHZhciB0YXJnZXQgPSB0YXJnZXRzO1xuXG4gICAgZm9yIChsZXQgbT0wOyBtIDwgY2hhaW4ubGVuZ3RoOyBtKyspIHtcbiAgICAgICAgaWYgKHRhcmdldFtjaGFpblttXV0pIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldFtjaGFpblttXV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW21ldGhvZCwgdGFyZ2V0XTtcbn1cblxuLy8gTWFpbiB0aHJlYWQ6XG4vLyAtIFNlbmQgbWVzc2FnZXMgdG8gd29ya2VycywgYW5kIG9wdGlvbmFsbHkgcmVjZWl2ZSBhbiBhc3luYyByZXNwb25zZSBhcyBhIHByb21pc2Vcbi8vIC0gUmVjZWl2ZSBtZXNzYWdlcyBmcm9tIHdvcmtlcnMsIGFuZCBvcHRpb25hbGx5IHNlbmQgYW4gYXN5bmMgcmVzcG9uc2UgYmFjayBhcyBhIHByb21pc2VcbmZ1bmN0aW9uIHNldHVwTWFpblRocmVhZCAoKSB7XG5cbiAgICAvLyBTZW5kIGEgbWVzc2FnZSB0byBhIHdvcmtlciwgYW5kIG9wdGlvbmFsbHkgZ2V0IGFuIGFzeW5jIHJlc3BvbnNlXG4gICAgLy8gQXJndW1lbnRzOlxuICAgIC8vICAgLSB3b3JrZXI6IG9uZSBvciBtb3JlIHdlYiB3b3JrZXIgaW5zdGFuY2VzIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8gKHNpbmdsZSB2YWx1ZSBvciBhcnJheSlcbiAgICAvLyAgIC0gbWV0aG9kOiB0aGUgbWV0aG9kIHdpdGggdGhpcyBuYW1lLCBzcGVjaWZpZWQgd2l0aCBkb3Qtbm90YXRpb24sIHdpbGwgYmUgaW52b2tlZCBpbiB0aGUgd29ya2VyXG4gICAgLy8gICAtIG1lc3NhZ2U6IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBtZXRob2QgY2FsbFxuICAgIC8vIFJldHVybnM6XG4gICAgLy8gICAtIGEgcHJvbWlzZSB0aGF0IHdpbGwgYmUgZnVsZmlsbGVkIGlmIHRoZSB3b3JrZXIgbWV0aG9kIHJldHVybnMgYSB2YWx1ZSAoY291bGQgYmUgaW1tZWRpYXRlbHksIG9yIGFzeW5jKVxuICAgIC8vXG4gICAgV29ya2VyQnJva2VyLnBvc3RNZXNzYWdlID0gZnVuY3Rpb24gKHdvcmtlciwgbWV0aG9kLCAuLi5tZXNzYWdlKSB7XG4gICAgICAgIC8vIElmIG1vcmUgdGhhbiBvbmUgd29ya2VyIHNwZWNpZmllZCwgcG9zdCB0byBtdWx0aXBsZVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh3b3JrZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgd29ya2VyLm1hcCh3ID0+IFdvcmtlckJyb2tlci5wb3N0TWVzc2FnZSh3LCBtZXRob2QsIC4uLm1lc3NhZ2UpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYWNrIHN0YXRlIG9mIHRoaXMgbWVzc2FnZVxuICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIG1lc3NhZ2VzW21lc3NhZ2VfaWRdID0geyBtZXRob2QsIG1lc3NhZ2UsIHJlc29sdmUsIHJlamVjdCB9O1xuICAgICAgICB9KTtcblxuICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ21haW5fc2VuZCcsICAgICAgLy8gbWFyayBtZXNzYWdlIGFzIG1ldGhvZCBpbnZvY2F0aW9uIGZyb20gbWFpbiB0aHJlYWRcbiAgICAgICAgICAgIG1lc3NhZ2VfaWQsICAgICAgICAgICAgIC8vIHVuaXF1ZSBpZCBmb3IgdGhpcyBtZXNzYWdlLCBmb3IgbGlmZSBvZiBwcm9ncmFtXG4gICAgICAgICAgICBtZXRob2QsICAgICAgICAgICAgICAgICAvLyB3aWxsIGRpc3BhdGNoIHRvIGEgZnVuY3Rpb24gb2YgdGhpcyBuYW1lIHdpdGhpbiB0aGUgd29ya2VyXG4gICAgICAgICAgICBtZXNzYWdlICAgICAgICAgICAgICAgICAvLyBtZXNzYWdlIHBheWxvYWRcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIG1lc3NhZ2VfaWQrKztcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIC8vIEFkZCBhIHdvcmtlciB0byBjb21tdW5pY2F0ZSB3aXRoIC0gZWFjaCB3b3JrZXIgbXVzdCBiZSByZWdpc3RlcmVkIGZyb20gdGhlIG1haW4gdGhyZWFkXG4gICAgdmFyIHdvcmtlcl9pZCA9IDA7XG4gICAgdmFyIHdvcmtlcnMgPSBuZXcgTWFwKCk7XG5cbiAgICBXb3JrZXJCcm9rZXIuYWRkV29ya2VyID0gZnVuY3Rpb24gKHdvcmtlcikge1xuXG4gICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgYWxsIHJlZ2lzdGVyZWQgd29ya2Vyc1xuICAgICAgICB3b3JrZXJzLnNldCh3b3JrZXIsIHdvcmtlcl9pZCsrKTtcblxuICAgICAgICAvLyBMaXN0ZW4gZm9yIG1lc3NhZ2VzIGNvbWluZyBiYWNrIGZyb20gdGhlIHdvcmtlciwgYW5kIGZ1bGZpbGwgdGhhdCBtZXNzYWdlJ3MgcHJvbWlzZVxuICAgICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBtYXliZURlY29kZShldmVudC5kYXRhKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgIT09ICd3b3JrZXJfcmVwbHknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQYXNzIHRoZSByZXN1bHQgdG8gdGhlIHByb21pc2VcbiAgICAgICAgICAgIHZhciBpZCA9IGRhdGEubWVzc2FnZV9pZDtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlc1tpZF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlc1tpZF0ucmVqZWN0KGRhdGEuZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNbaWRdLnJlc29sdmUoZGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIG1lc3NhZ2VzW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTGlzdGVuIGZvciBtZXNzYWdlcyBpbml0aWF0aW5nIGEgY2FsbCBmcm9tIHRoZSB3b3JrZXIsIGRpc3BhdGNoIHRoZW0sXG4gICAgICAgIC8vIGFuZCBzZW5kIGFueSByZXR1cm4gdmFsdWUgYmFjayB0byB0aGUgd29ya2VyXG4gICAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IG1heWJlRGVjb2RlKGV2ZW50LmRhdGEpO1xuXG4gICAgICAgICAgICAvLyBVbmlxdWUgaWQgZm9yIHRoaXMgbWVzc2FnZSAmIHJldHVybiBjYWxsIHRvIG1haW4gdGhyZWFkXG4gICAgICAgICAgICB2YXIgaWQgPSBkYXRhLm1lc3NhZ2VfaWQ7XG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlICE9PSAnd29ya2VyX3NlbmQnIHx8IGlkID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhbGwgdGhlIHJlcXVlc3RlZCBtZXRob2QgYW5kIHNhdmUgdGhlIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgLy8gdmFyIHRhcmdldCA9IHRhcmdldHNbZGF0YS50YXJnZXRdO1xuICAgICAgICAgICAgdmFyIFttZXRob2RfbmFtZSwgdGFyZ2V0XSA9IGZpbmRUYXJnZXQoZGF0YS5tZXRob2QpO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgV29ya2VyIGJyb2tlciBjb3VsZCBub3QgZGlzcGF0Y2ggbWVzc2FnZSB0eXBlICR7ZGF0YS5tZXRob2R9IG9uIHRhcmdldCAke2RhdGEudGFyZ2V0fSBiZWNhdXNlIG5vIG9iamVjdCB3aXRoIHRoYXQgbmFtZSBpcyByZWdpc3RlcmVkIG9uIG1haW4gdGhyZWFkYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBtZXRob2QgPSAodHlwZW9mIHRhcmdldFttZXRob2RfbmFtZV0gPT09ICdmdW5jdGlvbicpICYmIHRhcmdldFttZXRob2RfbmFtZV07XG4gICAgICAgICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBXb3JrZXIgYnJva2VyIGNvdWxkIG5vdCBkaXNwYXRjaCBtZXNzYWdlIHR5cGUgJHtkYXRhLm1ldGhvZH0gb24gdGFyZ2V0ICR7ZGF0YS50YXJnZXR9IGJlY2F1c2Ugb2JqZWN0IGhhcyBubyBtZXRob2Qgd2l0aCB0aGF0IG5hbWVgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlc3VsdCwgZXJyb3I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0YXJnZXQsIGRhdGEubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhyb3duIGVycm9ycyB3aWxsIGJlIHBhc3NlZCBiYWNrIChpbiBzdHJpbmcgZm9ybSkgdG8gd29ya2VyXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZW5kIHJldHVybiB2YWx1ZSB0byB3b3JrZXJcbiAgICAgICAgICAgIGxldCBwYXlsb2FkLCB0cmFuc2ZlcmFibGVzID0gW107XG5cbiAgICAgICAgICAgIC8vIEFzeW5jIHJlc3VsdFxuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbigodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgV29ya2VyQnJva2VyLnJldHVybldpdGhUcmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGVzID0gdmFsdWUudHJhbnNmZXJhYmxlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ21haW5fcmVwbHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gbWF5YmVFbmNvZGUocGF5bG9hZCwgdHJhbnNmZXJhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZShwYXlsb2FkLCB0cmFuc2ZlcmFibGVzLm1hcCh0ID0+IHQub2JqZWN0KSk7XG4gICAgICAgICAgICAgICAgICAgIGZyZWVUcmFuc2ZlcmFibGVzKHRyYW5zZmVyYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiAodHJhbnNmZXJhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBVdGlscy5sb2coJ3RyYWNlJywgYCcke21ldGhvZF9uYW1lfScgdHJhbnNmZXJyZWQgJHt0cmFuc2ZlcmFibGVzLmxlbmd0aH0gb2JqZWN0cyB0byB3b3JrZXIgdGhyZWFkYCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ21haW5fcmVwbHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBgJHtlcnJvci5tZXNzYWdlfTogJHtlcnJvci5zdGFja31gIDogZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSW1tZWRpYXRlIHJlc3VsdFxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFdvcmtlckJyb2tlci5yZXR1cm5XaXRoVHJhbnNmZXJhYmxlcykge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGVzID0gcmVzdWx0LnRyYW5zZmVyYWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbWFpbl9yZXBseScsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGAke2Vycm9yLm1lc3NhZ2V9OiAke2Vycm9yLnN0YWNrfWAgOiBlcnJvcilcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBtYXliZUVuY29kZShwYXlsb2FkLCB0cmFuc2ZlcmFibGVzKTtcbiAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UocGF5bG9hZCwgdHJhbnNmZXJhYmxlcy5tYXAodCA9PiB0Lm9iamVjdCkpO1xuICAgICAgICAgICAgICAgIGZyZWVUcmFuc2ZlcmFibGVzKHRyYW5zZmVyYWJsZXMpO1xuICAgICAgICAgICAgICAgIC8vIGlmICh0cmFuc2ZlcmFibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgVXRpbHMubG9nKCd0cmFjZScsIGAnJHttZXRob2RfbmFtZX0nIHRyYW5zZmVycmVkICR7dHJhbnNmZXJhYmxlcy5sZW5ndGh9IG9iamVjdHMgdG8gd29ya2VyIHRocmVhZGApO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9O1xuXG4gICAgLy8gRXhwb3NlIGZvciBkZWJ1Z2dpbmdcbiAgICBXb3JrZXJCcm9rZXIuZ2V0TWVzc2FnZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9O1xuXG4gICAgV29ya2VyQnJva2VyLmdldE1lc3NhZ2VJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VfaWQ7XG4gICAgfTtcblxufVxuXG4vLyBXb3JrZXIgdGhyZWFkczpcbi8vIC0gUmVjZWl2ZSBtZXNzYWdlcyBmcm9tIG1haW4gdGhyZWFkLCBhbmQgb3B0aW9uYWxseSBzZW5kIGFuIGFzeW5jIHJlc3BvbnNlIGJhY2sgYXMgYSBwcm9taXNlXG4vLyAtIFNlbmQgbWVzc2FnZXMgdG8gbWFpbiB0aHJlYWQsIGFuZCBvcHRpb25hbGx5IHJlY2VpdmUgYW4gYXN5bmMgcmVzcG9uc2UgYXMgYSBwcm9taXNlXG5mdW5jdGlvbiBzZXR1cFdvcmtlclRocmVhZCAoKSB7XG5cbiAgICAvLyBTZW5kIGEgbWVzc2FnZSB0byB0aGUgbWFpbiB0aHJlYWQsIGFuZCBvcHRpb25hbGx5IGdldCBhbiBhc3luYyByZXNwb25zZSBhcyBhIHByb21pc2VcbiAgICAvLyBBcmd1bWVudHM6XG4gICAgLy8gICAtIG1ldGhvZDogdGhlIG1ldGhvZCB3aXRoIHRoaXMgbmFtZSwgc3BlY2lmaWVkIHdpdGggZG90LW5vdGF0aW9uLCB3aWxsIGJlIGludm9rZWQgb24gdGhlIG1haW4gdGhyZWFkXG4gICAgLy8gICAtIG1lc3NhZ2U6IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBtZXRob2QgY2FsbFxuICAgIC8vIFJldHVybnM6XG4gICAgLy8gICAtIGEgcHJvbWlzZSB0aGF0IHdpbGwgYmUgZnVsZmlsbGVkIGlmIHRoZSBtYWluIHRocmVhZCBtZXRob2QgcmV0dXJucyBhIHZhbHVlIChjb3VsZCBiZSBpbW1lZGlhdGVseSwgb3IgYXN5bmMpXG4gICAgLy9cbiAgICBXb3JrZXJCcm9rZXIucG9zdE1lc3NhZ2UgPSBmdW5jdGlvbiAobWV0aG9kLCAuLi5tZXNzYWdlKSB7XG4gICAgICAgIC8vIFRyYWNrIHN0YXRlIG9mIHRoaXMgbWVzc2FnZVxuICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIG1lc3NhZ2VzW21lc3NhZ2VfaWRdID0geyBtZXRob2QsIG1lc3NhZ2UsIHJlc29sdmUsIHJlamVjdCB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHR5cGU6ICd3b3JrZXJfc2VuZCcsICAgIC8vIG1hcmsgbWVzc2FnZSBhcyBtZXRob2QgaW52b2NhdGlvbiBmcm9tIHdvcmtlclxuICAgICAgICAgICAgbWVzc2FnZV9pZCwgICAgICAgICAgICAgLy8gdW5pcXVlIGlkIGZvciB0aGlzIG1lc3NhZ2UsIGZvciBsaWZlIG9mIHByb2dyYW1cbiAgICAgICAgICAgIG1ldGhvZCwgICAgICAgICAgICAgICAgIC8vIHdpbGwgZGlzcGF0Y2ggdG8gYSBtZXRob2Qgb2YgdGhpcyBuYW1lIG9uIHRoZSBtYWluIHRocmVhZFxuICAgICAgICAgICAgbWVzc2FnZSAgICAgICAgICAgICAgICAgLy8gbWVzc2FnZSBwYXlsb2FkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lc3NhZ2VfaWQrKztcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIC8vIExpc3RlbiBmb3IgbWVzc2FnZXMgY29taW5nIGJhY2sgZnJvbSB0aGUgbWFpbiB0aHJlYWQsIGFuZCBmdWxmaWxsIHRoYXQgbWVzc2FnZSdzIHByb21pc2VcbiAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgbGV0IGRhdGEgPSBtYXliZURlY29kZShldmVudC5kYXRhKTtcbiAgICAgICAgaWYgKGRhdGEudHlwZSAhPT0gJ21haW5fcmVwbHknKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXNzIHRoZSByZXN1bHQgdG8gdGhlIHByb21pc2VcbiAgICAgICAgdmFyIGlkID0gZGF0YS5tZXNzYWdlX2lkO1xuICAgICAgICBpZiAobWVzc2FnZXNbaWRdKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzW2lkXS5yZWplY3QoZGF0YS5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlc1tpZF0ucmVzb2x2ZShkYXRhLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIG1lc3NhZ2VzW2lkXTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUmVjZWl2ZSBtZXNzYWdlcyBmcm9tIG1haW4gdGhyZWFkLCBkaXNwYXRjaCB0aGVtLCBhbmQgc2VuZCBiYWNrIGEgcmVwbHlcbiAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgbGV0IGRhdGEgPSBtYXliZURlY29kZShldmVudC5kYXRhKTtcblxuICAgICAgICAvLyBVbmlxdWUgaWQgZm9yIHRoaXMgbWVzc2FnZSAmIHJldHVybiBjYWxsIHRvIG1haW4gdGhyZWFkXG4gICAgICAgIHZhciBpZCA9IGRhdGEubWVzc2FnZV9pZDtcbiAgICAgICAgaWYgKGRhdGEudHlwZSAhPT0gJ21haW5fc2VuZCcgfHwgaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FsbCB0aGUgcmVxdWVzdGVkIHdvcmtlciBtZXRob2QgYW5kIHNhdmUgdGhlIHJldHVybiB2YWx1ZVxuICAgICAgICB2YXIgW21ldGhvZF9uYW1lLCB0YXJnZXRdID0gZmluZFRhcmdldChkYXRhLm1ldGhvZCk7XG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgV29ya2VyIGJyb2tlciBjb3VsZCBub3QgZGlzcGF0Y2ggbWVzc2FnZSB0eXBlICR7ZGF0YS5tZXRob2R9IG9uIHRhcmdldCAke2RhdGEudGFyZ2V0fSBiZWNhdXNlIG5vIG9iamVjdCB3aXRoIHRoYXQgbmFtZSBpcyByZWdpc3RlcmVkIG9uIG1haW4gdGhyZWFkYCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWV0aG9kID0gKHR5cGVvZiB0YXJnZXRbbWV0aG9kX25hbWVdID09PSAnZnVuY3Rpb24nKSAmJiB0YXJnZXRbbWV0aG9kX25hbWVdO1xuXG4gICAgICAgIGlmICghbWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgV29ya2VyIGJyb2tlciBjb3VsZCBub3QgZGlzcGF0Y2ggbWVzc2FnZSB0eXBlICR7ZGF0YS5tZXRob2R9IGJlY2F1c2Ugd29ya2VyIGhhcyBubyBtZXRob2Qgd2l0aCB0aGF0IG5hbWVgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHQsIGVycm9yO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbWV0aG9kLmFwcGx5KHRhcmdldCwgZGF0YS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgICAgICAvLyBUaHJvd24gZXJyb3JzIHdpbGwgYmUgcGFzc2VkIGJhY2sgKGluIHN0cmluZyBmb3JtKSB0byBtYWluIHRocmVhZFxuICAgICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VuZCByZXR1cm4gdmFsdWUgdG8gbWFpbiB0aHJlYWRcbiAgICAgICAgbGV0IHBheWxvYWQsIHRyYW5zZmVyYWJsZXMgPSBbXTtcblxuICAgICAgICAvLyBBc3luYyByZXN1bHRcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJlc3VsdC50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFdvcmtlckJyb2tlci5yZXR1cm5XaXRoVHJhbnNmZXJhYmxlcykge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGVzID0gdmFsdWUudHJhbnNmZXJhYmxlcztcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd29ya2VyX3JlcGx5JyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHZhbHVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gbWF5YmVFbmNvZGUocGF5bG9hZCwgdHJhbnNmZXJhYmxlcyk7XG4gICAgICAgICAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShwYXlsb2FkLCB0cmFuc2ZlcmFibGVzLm1hcCh0ID0+IHQub2JqZWN0KSk7XG4gICAgICAgICAgICAgICAgZnJlZVRyYW5zZmVyYWJsZXModHJhbnNmZXJhYmxlcyk7XG4gICAgICAgICAgICAgICAgLy8gaWYgKHRyYW5zZmVyYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vICAgICBVdGlscy5sb2coJ3RyYWNlJywgYCcke21ldGhvZF9uYW1lfScgdHJhbnNmZXJyZWQgJHt0cmFuc2ZlcmFibGVzLmxlbmd0aH0gb2JqZWN0cyB0byBtYWluIHRocmVhZGApO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd29ya2VyX3JlcGx5JyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGAke2Vycm9yLm1lc3NhZ2V9OiAke2Vycm9yLnN0YWNrfWAgOiBlcnJvcilcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEltbWVkaWF0ZSByZXN1bHRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgV29ya2VyQnJva2VyLnJldHVybldpdGhUcmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmZXJhYmxlcyA9IHJlc3VsdC50cmFuc2ZlcmFibGVzO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnd29ya2VyX3JlcGx5JyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlX2lkOiBpZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gYCR7ZXJyb3IubWVzc2FnZX06ICR7ZXJyb3Iuc3RhY2t9YCA6IGVycm9yKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBheWxvYWQgPSBtYXliZUVuY29kZShwYXlsb2FkLCB0cmFuc2ZlcmFibGVzKTtcbiAgICAgICAgICAgIHNlbGYucG9zdE1lc3NhZ2UocGF5bG9hZCwgdHJhbnNmZXJhYmxlcy5tYXAodCA9PiB0Lm9iamVjdCkpO1xuICAgICAgICAgICAgZnJlZVRyYW5zZmVyYWJsZXModHJhbnNmZXJhYmxlcyk7XG4gICAgICAgICAgICAvLyBpZiAodHJhbnNmZXJhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyAgICAgVXRpbHMubG9nKCd0cmFjZScsIGAnJHttZXRob2RfbmFtZX0nIHRyYW5zZmVycmVkICR7dHJhbnNmZXJhYmxlcy5sZW5ndGh9IG9iamVjdHMgdG8gbWFpbiB0aHJlYWRgKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG59XG5cbi8vIFNwZWNpYWwgcmV0dXJuIHZhbHVlIHdyYXBwZXIsIHRvIGluZGljYXRlIHRoYXQgd2Ugd2FudCB0byBmaW5kIGFuZCBpbmNsdWRlXG4vLyB0cmFuc2ZlcmFibGUgb2JqZWN0cyBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZVxuV29ya2VyQnJva2VyLnJldHVybldpdGhUcmFuc2ZlcmFibGVzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdvcmtlckJyb2tlci5yZXR1cm5XaXRoVHJhbnNmZXJhYmxlcykpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXb3JrZXJCcm9rZXIucmV0dXJuV2l0aFRyYW5zZmVyYWJsZXModmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnRyYW5zZmVyYWJsZXMgPSBmaW5kVHJhbnNmZXJhYmxlcyh0aGlzLnZhbHVlKTtcbn07XG5cbi8vIEJ1aWxkIGEgbGlzdCBvZiB0cmFuc2ZlcmFibGUgb2JqZWN0cyBmcm9tIGEgc291cmNlIG9iamVjdFxuLy8gUmV0dXJucyBhIGxpc3Qgb2YgaW5mbyBhYm91dCBlYWNoIHRyYW5zZmVyYWJsZTpcbi8vICAgLSBvYmplY3Q6IHRoZSBhY3R1YWwgdHJhbnNmZXJhYmxlIG9iamVjdFxuLy8gICAtIHBhcmVudDogdGhlIHBhcmVudCBvYmplY3QgdGhhdCB0aGUgdHJhbnNmZXJhYmxlIGlzIGEgcHJvcGVydHkgb2YgKGlmIGFueSlcbi8vICAgLSBwcm9wZXJ0eTogdGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIHRyYW5zZmVyYWJsZSBvbiB0aGUgcGFyZW50IG9iamVjdCAoaWYgYW55KVxuLy8gVE9ETzogYWRkIG9wdGlvbiBpbiBjYXNlIHlvdSBET04nVCB3YW50IHRvIHRyYW5zZmVyIG9iamVjdHNcbmZ1bmN0aW9uIGZpbmRUcmFuc2ZlcmFibGVzKHNvdXJjZSwgcGFyZW50ID0gbnVsbCwgcHJvcGVydHkgPSBudWxsLCBsaXN0ID0gW10pIHtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICAvLyBDaGVjayBlYWNoIGFycmF5IGVsZW1lbnRcbiAgICAgICAgc291cmNlLmZvckVhY2goKHgsIGkpID0+IGZpbmRUcmFuc2ZlcmFibGVzKHgsIHNvdXJjZSwgaSwgbGlzdCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc291cmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBJcyB0aGUgb2JqZWN0IGEgdHJhbnNmZXJhYmxlIGFycmF5IGJ1ZmZlcj9cbiAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBsaXN0LnB1c2goeyBvYmplY3Q6IHNvdXJjZSwgcGFyZW50LCBwcm9wZXJ0eSB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPciBsb29rcyBsaWtlIGEgdHlwZWQgYXJyYXkgKGhhcyBhbiBhcnJheSBidWZmZXIgcHJvcGVydHkpP1xuICAgICAgICBlbHNlIGlmIChzb3VyY2UuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIGxpc3QucHVzaCh7IG9iamVjdDogc291cmNlLmJ1ZmZlciwgcGFyZW50LCBwcm9wZXJ0eSB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlcndpc2UgY2hlY2sgZWFjaCBwcm9wZXJ0eVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgZmluZFRyYW5zZmVyYWJsZXMoc291cmNlW3Byb3BdLCBzb3VyY2UsIHByb3AsIGxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyBSZW1vdmUgbmV1dGVyZWQgdHJhbnNmZXJhYmxlcyBmcm9tIHBhcmVudCBvYmplY3RzLCBhcyB0aGV5IHNob3VsZCBubyBsb25nZXIgYmUgYWNjZXNzZWQgYWZ0ZXIgdHJhbnNmZXJcbmZ1bmN0aW9uIGZyZWVUcmFuc2ZlcmFibGVzKHRyYW5zZmVyYWJsZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHJhbnNmZXJhYmxlcykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cmFuc2ZlcmFibGVzLmZpbHRlcih0ID0+IHQucGFyZW50ICYmIHQucHJvcGVydHkpLmZvckVhY2godCA9PiBkZWxldGUgdC5wYXJlbnRbdC5wcm9wZXJ0eV0pO1xufVxuXG4vLyBNZXNzYWdlIHBheWxvYWQgY2FuIGJlIHN0cmluZ2lmaWVkIGZvciBmYXN0ZXIgdHJhbnNmZXIsIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgdHJhbnNmZXJhYmxlIG9iamVjdHNcbmZ1bmN0aW9uIG1heWJlRW5jb2RlIChwYXlsb2FkLCB0cmFuc2ZlcmFibGVzKSB7XG4gICAgaWYgKHRyYW5zZmVyYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTtcbiAgICB9XG4gICAgcmV0dXJuIHBheWxvYWQ7XG59XG5cbi8vIFBhcnNlIHN0cmluZ2lmaWVkIG1lc3NhZ2UgcGF5bG9hZFxuZnVuY3Rpb24gbWF5YmVEZWNvZGUgKGRhdGEpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZGF0YSkgOiBkYXRhKTtcbn1cblxuLy8gU2V0dXAgdGhpcyB0aHJlYWQgYXMgYXBwcm9wcmlhdGVcbmlmIChVdGlscy5pc01haW5UaHJlYWQpIHtcbiAgICBzZXR1cE1haW5UaHJlYWQoKTtcbn1cblxuaWYgKFV0aWxzLmlzV29ya2VyVGhyZWFkKSB7XG4gICAgc2V0dXBXb3JrZXJUaHJlYWQoKTtcbn1cbiIsIi8qKiogVmVjdG9yIGZ1bmN0aW9ucyAtIHZlY3RvcnMgcHJvdmlkZWQgYXMgW3gsIHksIHpdIGFycmF5cyAqKiovXG5cbnZhciBWZWN0b3I7XG5leHBvcnQgZGVmYXVsdCBWZWN0b3IgPSB7fTtcblxuVmVjdG9yLnNldCA9IGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIFYgPSBbXTtcbiAgICB2YXIgbGltID0gdi5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW07IGkrKykge1xuICAgICAgICBWW2ldID0gdltpXTtcbiAgICB9XG4gICAgcmV0dXJuIFY7XG59O1xuXG5WZWN0b3IubmVnID0gZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgViA9IFtdO1xuICAgIHZhciBsaW0gPSB2Lmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbTsgaSsrKSB7XG4gICAgICAgIFZbaV0gPSB2W2ldICogLTE7XG4gICAgfVxuICAgIHJldHVybiBWO1xufTtcblxuLy8gQWRkaXRpb24gb2YgdHdvIHZlY3RvcnNcblZlY3Rvci5hZGQgPSBmdW5jdGlvbiAodjEsIHYyKSB7XG4gICAgdmFyIHYgPSBbXTtcbiAgICB2YXIgbGltID0gTWF0aC5taW4odjEubGVuZ3RoLHYyLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW07IGkrKykge1xuICAgICAgICB2W2ldID0gdjFbaV0gKyB2MltpXTtcbiAgICB9XG4gICAgcmV0dXJuIHY7XG59O1xuXG4vLyBTdWJzdHJhY3Rpb24gb2YgdHdvIHZlY3RvcnNcblZlY3Rvci5zdWIgPSBmdW5jdGlvbiAodjEsIHYyKSB7XG4gICAgdmFyIHYgPSBbXTtcbiAgICB2YXIgbGltID0gTWF0aC5taW4odjEubGVuZ3RoLHYyLmxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbTsgaSsrKSB7XG4gICAgICAgIHZbaV0gPSB2MVtpXSAtIHYyW2ldO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cblZlY3Rvci5zaWduZWRfYXJlYSA9IGZ1bmN0aW9uICh2MSwgdjIsIHYzKSB7XG4gICAgcmV0dXJuICh2MlswXS12MVswXSkqKHYzWzFdLXYxWzFdKSAtICh2M1swXS12MVswXSkqKHYyWzFdLXYxWzFdKTtcbn07XG5cbi8vIE11bHRpcGxpY2F0aW9uIG9mIHR3byB2ZWN0b3JzXG5WZWN0b3IubXVsdCA9IGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICB2YXIgdiA9IFtdLFxuICAgICAgICBsZW4gPSB2MS5sZW5ndGgsXG4gICAgICAgIGk7XG5cbiAgICBpZiAodHlwZW9mIHYyID09PSAnbnVtYmVyJykge1xuICAgICAgICAvLyBNdWxpdHBseSBieSBzY2FsYXJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2W2ldID0gdjFbaV0gKiB2MjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gTXVsdGlwbHkgdHdvIHZlY3RvcnNcbiAgICAgICAgbGVuID0gTWF0aC5taW4odjEubGVuZ3RoLHYyLmxlbmd0aCk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdltpXSA9IHYxW2ldICogdjJbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG59O1xuXG4vLyBEaXZpc2lvbiBvZiB0d28gdmVjdG9yc1xuVmVjdG9yLmRpdiA9IGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICB2YXIgdiA9IFtdLFxuICAgICAgICBpO1xuICAgIGlmKHR5cGVvZiB2MiA9PT0gJ251bWJlcicpe1xuICAgICAgICAvLyBEaXZpZGUgYnkgc2NhbGFyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB2MS5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICB2W2ldID0gdjFbaV0gLyB2MjtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERpdmlkZSB0byB2ZWN0b3JzXG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbih2MS5sZW5ndGgsdjIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2W2ldID0gdjFbaV0gLyB2MltpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cbi8vIEdldCAyRCBwZXJwZW5kaWN1bGFyXG5WZWN0b3IucGVycCA9IGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICByZXR1cm4gWyB2MlsxXSAtIHYxWzFdLFxuICAgICAgICAgICAgIHYxWzBdIC0gdjJbMF0gXTtcbn07XG5cbi8vIEdldCAyRCB2ZWN0b3Igcm90YXRlZFxuVmVjdG9yLnJvdCA9IGZ1bmN0aW9uICh2LCBhKSB7XG4gICAgdmFyIGMgPSBNYXRoLmNvcyhhKTtcbiAgICB2YXIgcyA9IE1hdGguc2luKGEpO1xuICAgIHJldHVybiBbdlswXSAqIGMgLSB2WzFdICogcyxcbiAgICAgICAgICAgIHZbMF0gKiBzICsgdlsxXSAqIGNdO1xufTtcblxuLy8gR2V0IDJEIGhlYWRpbmcgYW5nbGVcblZlY3Rvci5hbmdsZSA9IGZ1bmN0aW9uIChbeCwgeV0pIHtcbiAgICByZXR1cm4gTWF0aC5hdGFuMih5LHgpO1xufTtcblxuLy8gR2V0IGFuZ2xlIGJldHdlZW4gdHdvIHZlY3RvcnNcblZlY3Rvci5hbmdsZUJldHdlZW4gPSBmdW5jdGlvbihBLCBCKXtcbiAgICB2YXIgZGVsdGEgPSBWZWN0b3IuZG90KEEsIEIpO1xuICAgIGlmIChkZWx0YSA8IC0xKSB7XG4gICAgICAgIGRlbHRhID0gLTE7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLmFjb3MoZGVsdGEpO1xufTtcblxuLy8gQ29tcGFyZSB0d28gcG9pbnRzXG5WZWN0b3IuaXNFcXVhbCA9IGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICB2YXIgbGVuID0gdjEubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKHYxW2ldICE9PSB2MltpXSl7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vLyBWZWN0b3IgbGVuZ3RoIHNxdWFyZWRcblZlY3Rvci5sZW5ndGhTcSA9IGZ1bmN0aW9uICh2KVxue1xuICAgIGlmICh2Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICByZXR1cm4gKHZbMF0qdlswXSArIHZbMV0qdlsxXSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gKHZbMF0qdlswXSArIHZbMV0qdlsxXSArIHZbMl0qdlsyXSk7XG4gICAgfVxufTtcblxuLy8gVmVjdG9yIGxlbmd0aFxuVmVjdG9yLmxlbmd0aCA9IGZ1bmN0aW9uICh2KVxue1xuICAgIHJldHVybiBNYXRoLnNxcnQoVmVjdG9yLmxlbmd0aFNxKHYpKTtcbn07XG5cbi8vIE5vcm1hbGl6ZSBhIHZlY3RvclxuVmVjdG9yLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uICh2KVxue1xuICAgIHZhciBkO1xuICAgIGlmICh2Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICBkID0gdlswXSp2WzBdICsgdlsxXSp2WzFdO1xuICAgICAgICBkID0gTWF0aC5zcXJ0KGQpO1xuXG4gICAgICAgIGlmIChkICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZbMF0gLyBkLCB2WzFdIC8gZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFswLCAwXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkID0gdlswXSp2WzBdICsgdlsxXSp2WzFdICsgdlsyXSp2WzJdO1xuICAgICAgICBkID0gTWF0aC5zcXJ0KGQpO1xuXG4gICAgICAgIGlmIChkICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZbMF0gLyBkLCB2WzFdIC8gZCwgdlsyXSAvIGRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbMCwgMCwgMF07XG4gICAgfVxufTtcblxuLy8gQ3Jvc3MgcHJvZHVjdCBvZiB0d28gdmVjdG9yc1xuVmVjdG9yLmNyb3NzICA9IGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAodjFbMV0gKiB2MlsyXSkgLSAodjFbMl0gKiB2MlsxXSksXG4gICAgICAgICh2MVsyXSAqIHYyWzBdKSAtICh2MVswXSAqIHYyWzJdKSxcbiAgICAgICAgKHYxWzBdICogdjJbMV0pIC0gKHYxWzFdICogdjJbMF0pXG4gICAgXTtcbn07XG5cbi8vIERvdCBwcm9kdWN0IG9mIHR3byB2ZWN0b3JzXG5WZWN0b3IuZG90ID0gZnVuY3Rpb24gKHYxLCB2Mikge1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgbGltID0gTWF0aC5taW4odjEubGVuZ3RoLCB2Mi5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGltOyBpKyspIHtcbiAgICAgICAgbiArPSB2MVtpXSAqIHYyW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbn07XG5cbi8vIEZpbmQgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gbGluZXMgc3BlY2lmaWVkIGFzIHNlZ21lbnRzIGZyb20gcG9pbnRzIChwMSwgcDIpIGFuZCAocDMsIHA0KVxuLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaW5lLWxpbmVfaW50ZXJzZWN0aW9uXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NyYW1lcidzX3J1bGVcblZlY3Rvci5saW5lSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHAxLCBwMiwgcDMsIHA0LCBwYXJhbGxlbF90b2xlcmFuY2UpIHtcbiAgICBwYXJhbGxlbF90b2xlcmFuY2UgPSBwYXJhbGxlbF90b2xlcmFuY2UgfHwgMC4wMTtcblxuICAgIC8vIGExKnggKyBiMSp5ID0gYzEgZm9yIGxpbmUgKHgxLCB5MSkgdG8gKHgyLCB5MilcbiAgICAvLyBhMip4ICsgYjIqeSA9IGMyIGZvciBsaW5lICh4MywgeTMpIHRvICh4NCwgeTQpXG4gICAgdmFyIGExID0gcDFbMV0gLSBwMlsxXTsgLy8geTEgLSB5MlxuICAgIHZhciBiMSA9IHAxWzBdIC0gcDJbMF07IC8vIHgxIC0geDJcbiAgICB2YXIgYTIgPSBwM1sxXSAtIHA0WzFdOyAvLyB5MyAtIHk0XG4gICAgdmFyIGIyID0gcDNbMF0gLSBwNFswXTsgLy8geDMgLSB4NFxuICAgIHZhciBjMSA9IChwMVswXSAqIHAyWzFdKSAtIChwMVsxXSAqIHAyWzBdKTsgLy8geDEqeTIgLSB5MSp4MlxuICAgIHZhciBjMiA9IChwM1swXSAqIHA0WzFdKSAtIChwM1sxXSAqIHA0WzBdKTsgLy8geDMqeTQgLSB5Myp4NFxuICAgIHZhciBkZW5vbSA9IChiMSAqIGEyKSAtIChhMSAqIGIyKTtcblxuICAgIGlmIChNYXRoLmFicyhkZW5vbSkgPiBwYXJhbGxlbF90b2xlcmFuY2UpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICgoYzEgKiBiMikgLSAoYjEgKiBjMikpIC8gZGVub20sXG4gICAgICAgICAgICAoKGMxICogYTIpIC0gKGExICogYzIpKSAvIGRlbm9tXG4gICAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBudWxsOyAvLyByZXR1cm4gbnVsbCBpZiBsaW5lcyBhcmUgKGNsb3NlIHRvKSBwYXJhbGxlbFxufTtcbiIsImltcG9ydCBHZW8gZnJvbSAnLi9nZW8nO1xuaW1wb3J0IFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi9jYW1lcmEnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHN1YnNjcmliZU1peGluIGZyb20gJy4vdXRpbHMvc3Vic2NyaWJlJztcblxuaW1wb3J0IGxvZyBmcm9tICdsb2dsZXZlbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXcge1xuXG4gICAgY29uc3RydWN0b3IgKHNjZW5lLCBvcHRpb25zKSB7XG4gICAgICAgIHN1YnNjcmliZU1peGluKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcbiAgICAgICAgdGhpcy5jcmVhdGVNYXRyaWNlcygpO1xuXG4gICAgICAgIHRoaXMuem9vbSA9IG51bGw7XG4gICAgICAgIHRoaXMuY2VudGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5ib3VuZHMgPSBudWxsO1xuICAgICAgICB0aGlzLm1ldGVyc19wZXJfcGl4ZWwgPSBudWxsO1xuXG4gICAgICAgIHRoaXMucGFubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnpvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy56b29tX2RpcmVjdGlvbiA9IDA7XG5cbiAgICAgICAgLy8gU2l6ZSBvZiB2aWV3cG9ydCBpbiBDU1MgcGl4ZWxzLCBkZXZpY2UgcGl4ZWxzLCBhbmQgbWVyY2F0b3IgbWV0ZXJzXG4gICAgICAgIHRoaXMuc2l6ZSA9IHtcbiAgICAgICAgICAgIGNzczoge30sXG4gICAgICAgICAgICBkZXZpY2U6IHt9LFxuICAgICAgICAgICAgbWV0ZXJzOiB7fVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFzcGVjdCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5idWZmZXIgPSAwO1xuICAgICAgICB0aGlzLmNvbnRpbnVvdXNfem9vbSA9ICh0eXBlb2Ygb3B0aW9ucy5jb250aW51b3VzWm9vbSA9PT0gJ2Jvb2xlYW4nKSA/IG9wdGlvbnMuY29udGludW91c1pvb20gOiB0cnVlO1xuICAgICAgICB0aGlzLnRpbGVfc2ltcGxpZmljYXRpb25fbGV2ZWwgPSAwOyAvLyBsZXZlbC1vZi1kZXRhaWwgZG93bnNhbXBsaW5nIHRvIGFwcGx5IHRvIHRpbGUgbG9hZGluZ1xuICAgICAgICB0aGlzLnByZXNlcnZlX3RpbGVzX3dpdGhpbl96b29tID0gMTtcblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgc3RhdGUgYmVmb3JlIHNjZW5lIGNvbmZpZyBpcyB1cGRhdGVkXG4gICAgcmVzZXQgKCkge1xuICAgICAgICB0aGlzLmNyZWF0ZUNhbWVyYSgpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBjYW1lcmFcbiAgICBjcmVhdGVDYW1lcmEgKCkge1xuICAgICAgICBsZXQgYWN0aXZlX2NhbWVyYSA9IHRoaXMuZ2V0QWN0aXZlQ2FtZXJhKCk7XG4gICAgICAgIGlmIChhY3RpdmVfY2FtZXJhKSB7XG4gICAgICAgICAgICB0aGlzLmNhbWVyYSA9IENhbWVyYS5jcmVhdGUoYWN0aXZlX2NhbWVyYSwgdGhpcywgdGhpcy5zY2VuZS5jb25maWcuY2FtZXJhc1thY3RpdmVfY2FtZXJhXSk7XG4gICAgICAgICAgICB0aGlzLmNhbWVyYS51cGRhdGVWaWV3KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgYWN0aXZlIGNhbWVyYSAtIGZvciBwdWJsaWMgQVBJXG4gICAgZ2V0QWN0aXZlQ2FtZXJhICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuY29uZmlnICYmIHRoaXMuc2NlbmUuY29uZmlnLmNhbWVyYXMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG5hbWUgaW4gdGhpcy5zY2VuZS5jb25maWcuY2FtZXJhcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjZW5lLmNvbmZpZy5jYW1lcmFzW25hbWVdLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgYWN0aXZlIGNhbWVyYSBhbmQgcmVjb21waWxlIC0gZm9yIHB1YmxpYyBBUElcbiAgICBzZXRBY3RpdmVDYW1lcmEgKG5hbWUpIHtcbiAgICAgICAgbGV0IHByZXYgPSB0aGlzLmdldEFjdGl2ZUNhbWVyYSgpO1xuICAgICAgICBpZiAodGhpcy5zY2VuZS5jb25maWcuY2FtZXJhc1tuYW1lXSkge1xuICAgICAgICAgICAgdGhpcy5zY2VuZS5jb25maWcuY2FtZXJhc1tuYW1lXS5hY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBDbGVhciBwcmV2aW91c2x5IGFjdGl2ZSBjYW1lcmFcbiAgICAgICAgICAgIGlmIChwcmV2ICYmIHByZXYgIT09IG5hbWUgJiYgdGhpcy5zY2VuZS5jb25maWcuY2FtZXJhc1twcmV2XSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNjZW5lLmNvbmZpZy5jYW1lcmFzW3ByZXZdLmFjdGl2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2NlbmUudXBkYXRlQ29uZmlnKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZUNhbWVyYSgpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBtZXRob2QgY2FsbGVkIG9uY2UgcGVyIGZyYW1lXG4gICAgdXBkYXRlICgpIHtcbiAgICAgICAgdGhpcy5jYW1lcmEudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGxvZ2ljYWwgcGl4ZWwgc2l6ZSBvZiB2aWV3cG9ydFxuICAgIHNldFZpZXdwb3J0U2l6ZSAod2lkdGgsIGhlaWdodCkge1xuICAgICAgICB0aGlzLnNpemUuY3NzID0geyB3aWR0aCwgaGVpZ2h0IH07XG4gICAgICAgIHRoaXMuc2l6ZS5kZXZpY2UgPSB7XG4gICAgICAgICAgICB3aWR0aDogTWF0aC5yb3VuZCh0aGlzLnNpemUuY3NzLndpZHRoICogVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAgICAgICAgIGhlaWdodDogTWF0aC5yb3VuZCh0aGlzLnNpemUuY3NzLmhlaWdodCAqIFV0aWxzLmRldmljZV9waXhlbF9yYXRpbylcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hc3BlY3QgPSB0aGlzLnNpemUuY3NzLndpZHRoIC8gdGhpcy5zaXplLmNzcy5oZWlnaHQ7XG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRzKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBtYXAgdmlldywgY2FuIGJlIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBsYXQvbG5nIGFuZC9vciB6b29tXG4gICAgc2V0VmlldyAoeyBsbmcsIGxhdCwgem9vbSB9ID0ge30pIHtcbiAgICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgICAvLyBTZXQgY2VudGVyXG4gICAgICAgIGlmICh0eXBlb2YgbG5nID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgbGF0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNlbnRlciB8fCBsbmcgIT09IHRoaXMuY2VudGVyLmxuZyB8fCBsYXQgIT09IHRoaXMuY2VudGVyLmxhdCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2VudGVyID0geyBsbmc6IEdlby53cmFwTG5nKGxuZyksIGxhdCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHpvb21cbiAgICAgICAgaWYgKHR5cGVvZiB6b29tID09PSAnbnVtYmVyJyAmJiB6b29tICE9PSB0aGlzLnpvb20pIHtcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXRab29tKHpvb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfVxuXG4gICAgc2V0Wm9vbSAoem9vbSkge1xuICAgICAgICBpZiAodGhpcy56b29taW5nKSB7XG4gICAgICAgICAgICB0aGlzLnpvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGFzdF96b29tID0gdGhpcy56b29tO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxhc3RfdGlsZV96b29tID0gdGhpcy50aWxlX3pvb207XG4gICAgICAgIGxldCB0aWxlX3pvb20gPSB0aGlzLnRpbGVab29tKHpvb20pO1xuICAgICAgICBpZiAoIXRoaXMuY29udGludW91c196b29tKSB7XG4gICAgICAgICAgICB6b29tID0gdGlsZV96b29tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbGVfem9vbSAhPT0gbGFzdF90aWxlX3pvb20pIHtcbiAgICAgICAgICAgIHRoaXMuem9vbV9kaXJlY3Rpb24gPSB0aWxlX3pvb20gPiBsYXN0X3RpbGVfem9vbSA/IDEgOiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGFzdF96b29tID0gdGhpcy56b29tO1xuICAgICAgICB0aGlzLnpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLnRpbGVfem9vbSA9IHRpbGVfem9vbTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kcygpO1xuICAgICAgICB0aGlzLnNjZW5lLnJlcXVlc3RSZWRyYXcoKTtcbiAgICB9XG5cbiAgICBzdGFydFpvb20gKCkge1xuICAgICAgICB0aGlzLmxhc3Rfem9vbSA9IHRoaXMuem9vbTtcbiAgICAgICAgdGhpcy56b29taW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDaG9vc2UgdGhlIGJhc2Ugem9vbSBsZXZlbCB0byB1c2UgZm9yIGEgZ2l2ZW4gZnJhY3Rpb25hbCB6b29tXG4gICAgYmFzZVpvb20gKHpvb20pIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioem9vbSk7XG4gICAgfVxuXG4gICAgLy8gRm9yIGEgZ2l2ZW4gdmlldyB6b29tLCB3aGF0IHRpbGUgem9vbSBzaG91bGQgYmUgbG9hZGVkP1xuICAgIHRpbGVab29tICh2aWV3X3pvb20pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVpvb20odmlld196b29tKSAtIHRoaXMudGlsZV9zaW1wbGlmaWNhdGlvbl9sZXZlbDtcbiAgICB9XG5cbiAgICAvLyBGb3IgYSBnaXZlbiB0aWxlIHpvb20sIHdoYXQgc3R5bGUgem9vbSBzaG91bGQgYmUgdXNlZD9cbiAgICBzdHlsZVpvb20gKHRpbGVfem9vbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlWm9vbSh0aWxlX3pvb20pICsgdGhpcy50aWxlX3NpbXBsaWZpY2F0aW9uX2xldmVsO1xuICAgIH1cblxuICAgIHJlYWR5ICgpIHtcbiAgICAgICAgLy8gVE9ETzogYmV0dGVyIGNvbmNlcHQgb2YgXCJyZWFkaW5lc3NcIiBzdGF0ZT9cbiAgICAgICAgaWYgKHRoaXMuc2l6ZS5jc3MgPT0gbnVsbCB8fCB0aGlzLmNlbnRlciA9PSBudWxsIHx8IHRoaXMuem9vbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSB2aWV3cG9ydCBib3VuZHMgYmFzZWQgb24gY3VycmVudCBjZW50ZXIgYW5kIHpvb21cbiAgICB1cGRhdGVCb3VuZHMgKCkge1xuICAgICAgICBpZiAoIXRoaXMucmVhZHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZXRlcnNfcGVyX3BpeGVsID0gR2VvLm1ldGVyc1BlclBpeGVsKHRoaXMuem9vbSk7XG5cbiAgICAgICAgLy8gU2l6ZSBvZiB0aGUgaGFsZi12aWV3cG9ydCBpbiBtZXRlcnMgYXQgY3VycmVudCB6b29tXG4gICAgICAgIHRoaXMuc2l6ZS5tZXRlcnMgPSB7XG4gICAgICAgICAgICB4OiB0aGlzLnNpemUuY3NzLndpZHRoICogdGhpcy5tZXRlcnNfcGVyX3BpeGVsLFxuICAgICAgICAgICAgeTogdGhpcy5zaXplLmNzcy5oZWlnaHQgKiB0aGlzLm1ldGVyc19wZXJfcGl4ZWxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDZW50ZXIgb2Ygdmlld3BvcnQgaW4gbWV0ZXJzLCBhbmQgdGlsZVxuICAgICAgICBsZXQgW3gsIHldID0gR2VvLmxhdExuZ1RvTWV0ZXJzKFt0aGlzLmNlbnRlci5sbmcsIHRoaXMuY2VudGVyLmxhdF0pO1xuICAgICAgICB0aGlzLmNlbnRlci5tZXRlcnMgPSB7IHgsIHkgfTtcblxuICAgICAgICB0aGlzLmNlbnRlci50aWxlID0gR2VvLnRpbGVGb3JNZXRlcnMoW3RoaXMuY2VudGVyLm1ldGVycy54LCB0aGlzLmNlbnRlci5tZXRlcnMueV0sIHRoaXMudGlsZV96b29tKTtcblxuICAgICAgICAvLyBCb3VuZHMgaW4gbWV0ZXJzXG4gICAgICAgIHRoaXMuYm91bmRzID0ge1xuICAgICAgICAgICAgc3c6IHtcbiAgICAgICAgICAgICAgICB4OiB0aGlzLmNlbnRlci5tZXRlcnMueCAtIHRoaXMuc2l6ZS5tZXRlcnMueCAvIDIsXG4gICAgICAgICAgICAgICAgeTogdGhpcy5jZW50ZXIubWV0ZXJzLnkgLSB0aGlzLnNpemUubWV0ZXJzLnkgLyAyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmU6IHtcbiAgICAgICAgICAgICAgICB4OiB0aGlzLmNlbnRlci5tZXRlcnMueCArIHRoaXMuc2l6ZS5tZXRlcnMueCAvIDIsXG4gICAgICAgICAgICAgICAgeTogdGhpcy5jZW50ZXIubWV0ZXJzLnkgKyB0aGlzLnNpemUubWV0ZXJzLnkgLyAyXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zY2VuZS50aWxlX21hbmFnZXIudXBkYXRlVGlsZXNGb3JWaWV3KCk7XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdtb3ZlJyk7XG4gICAgICAgIHRoaXMuc2NlbmUucmVxdWVzdFJlZHJhdygpOyAvLyBUT0RPIGF1dG9tYXRlIHZpYSBtb3ZlIGV2ZW50P1xuICAgIH1cblxuICAgIGZpbmRWaXNpYmxlVGlsZUNvb3JkaW5hdGVzICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kcykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHogPSB0aGlzLnRpbGVfem9vbTtcbiAgICAgICAgbGV0IHN3ID0gR2VvLnRpbGVGb3JNZXRlcnMoW3RoaXMuYm91bmRzLnN3LngsIHRoaXMuYm91bmRzLnN3LnldLCB6KTtcbiAgICAgICAgbGV0IG5lID0gR2VvLnRpbGVGb3JNZXRlcnMoW3RoaXMuYm91bmRzLm5lLngsIHRoaXMuYm91bmRzLm5lLnldLCB6KTtcblxuICAgICAgICBsZXQgY29vcmRzID0gW107XG4gICAgICAgIGZvciAobGV0IHggPSBzdy54IC0gdGhpcy5idWZmZXI7IHggPD0gbmUueCArIHRoaXMuYnVmZmVyOyB4KyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IHkgPSBuZS55IC0gdGhpcy5idWZmZXI7IHkgPD0gc3cueSArIHRoaXMuYnVmZmVyOyB5KyspIHtcbiAgICAgICAgICAgICAgICBjb29yZHMucHVzaChUaWxlLmNvb3JkKHsgeCwgeSwgeiB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvb3JkcztcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGlsZXMgdG9vIGZhciBvdXRzaWRlIG9mIHZpZXdcbiAgICBwcnVuZVRpbGVzRm9yVmlldyAoKSB7XG4gICAgICAgIC8vIFRPRE86IHdpbGwgdGhpcyBmdW5jdGlvbiBldmVyIGJlIGNhbGxlZCB3aGVuIHZpZXcgaXNuJ3QgcmVhZHk/XG4gICAgICAgIGlmICghdGhpcy5yZWFkeSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgdGlsZXMgdGhhdCBhcmUgYSBzcGVjaWZpZWQgIyBvZiB0aWxlcyBvdXRzaWRlIG9mIHRoZSB2aWV3cG9ydCBib3JkZXJcbiAgICAgICAgbGV0IGJvcmRlcl90aWxlcyA9IFtcbiAgICAgICAgICAgIE1hdGguY2VpbCgoTWF0aC5mbG9vcih0aGlzLnNpemUuY3NzLndpZHRoIC8gR2VvLnRpbGVfc2l6ZSkgKyAyKSAvIDIpLFxuICAgICAgICAgICAgTWF0aC5jZWlsKChNYXRoLmZsb29yKHRoaXMuc2l6ZS5jc3MuaGVpZ2h0IC8gR2VvLnRpbGVfc2l6ZSkgKyAyKSAvIDIpXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5zY2VuZS50aWxlX21hbmFnZXIucmVtb3ZlVGlsZXModGlsZSA9PiB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgdmlzaWJsZSB0aWxlc1xuICAgICAgICAgICAgaWYgKHRpbGUudmlzaWJsZSB8fCB0aWxlLnByb3h5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGlsZXMgb3V0c2lkZSBnaXZlbiB6b29tIHRoYXQgYXJlIHN0aWxsIGxvYWRpbmdcbiAgICAgICAgICAgIGlmICh0aWxlLmxvYWRpbmcgJiYgdGlsZS5zdHlsZV96b29tICE9PSB0aGlzLnRpbGVfem9vbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEaXNjYXJkIGlmIHRvbyBmYXIgZnJvbSBjdXJyZW50IHpvb21cbiAgICAgICAgICAgIGxldCB6ZGlmZiA9IE1hdGguYWJzKHRpbGUuc3R5bGVfem9vbSAtIHRoaXMudGlsZV96b29tKTtcbiAgICAgICAgICAgIGlmICh6ZGlmZiA+IHRoaXMucHJlc2VydmVfdGlsZXNfd2l0aGluX3pvb20pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSGFuZGxlIHRpbGVzIGF0IGRpZmZlcmVudCB6b29tc1xuICAgICAgICAgICAgbGV0IGNvb3JkcyA9IFRpbGUuY29vcmRpbmF0ZUF0Wm9vbSh0aWxlLmNvb3JkcywgdGhpcy50aWxlX3pvb20pO1xuXG4gICAgICAgICAgICAvLyBEaXNjYXJkIHRpbGVzIG91dHNpZGUgYW4gYXJlYSBzdXJyb3VuZGluZyB0aGUgdmlld3BvcnRcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhjb29yZHMueCAtIHRoaXMuY2VudGVyLnRpbGUueCkgLSBib3JkZXJfdGlsZXNbMF0gPiB0aGlzLmJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIGxvZy50cmFjZShgVmlldzogcmVtb3ZlIHRpbGUgJHt0aWxlLmtleX0gKGFzICR7Y29vcmRzLnh9LyR7Y29vcmRzLnl9LyR7dGhpcy50aWxlX3pvb219KSBmb3IgYmVpbmcgdG9vIGZhciBvdXQgb2YgdmlzaWJsZSBhcmVhICoqKmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoTWF0aC5hYnMoY29vcmRzLnkgLSB0aGlzLmNlbnRlci50aWxlLnkpIC0gYm9yZGVyX3RpbGVzWzFdID4gdGhpcy5idWZmZXIpIHtcbiAgICAgICAgICAgICAgICBsb2cudHJhY2UoYFZpZXc6IHJlbW92ZSB0aWxlICR7dGlsZS5rZXl9IChhcyAke2Nvb3Jkcy54fS8ke2Nvb3Jkcy55fS8ke3RoaXMudGlsZV96b29tfSkgZm9yIGJlaW5nIHRvbyBmYXIgb3V0IG9mIHZpc2libGUgYXJlYSAqKipgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWxsb2NhdGUgbW9kZWwtdmlldyBtYXRyaWNlc1xuICAgIC8vIDY0LWJpdCB2ZXJzaW9ucyBhcmUgZm9yIENQVSBjYWxjdWF0aW9uc1xuICAgIC8vIDMyLWJpdCB2ZXJzaW9ucyBhcmUgZG93bnNhbXBsZWQgYW5kIHNlbnQgdG8gR1BVXG4gICAgY3JlYXRlTWF0cmljZXMgKCkge1xuICAgICAgICB0aGlzLm1hdHJpY2VzID0ge307XG4gICAgICAgIHRoaXMubWF0cmljZXMubW9kZWwgPSBuZXcgRmxvYXQ2NEFycmF5KDE2KTtcbiAgICAgICAgdGhpcy5tYXRyaWNlcy5tb2RlbDMyID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XG4gICAgICAgIHRoaXMubWF0cmljZXMubW9kZWxfdmlldyA9IG5ldyBGbG9hdDY0QXJyYXkoMTYpO1xuICAgICAgICB0aGlzLm1hdHJpY2VzLm1vZGVsX3ZpZXczMiA9IG5ldyBGbG9hdDMyQXJyYXkoMTYpO1xuICAgICAgICB0aGlzLm1hdHJpY2VzLm5vcm1hbCA9IG5ldyBGbG9hdDY0QXJyYXkoOSk7XG4gICAgICAgIHRoaXMubWF0cmljZXMubm9ybWFsMzIgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgICAgICB0aGlzLm1hdHJpY2VzLmludmVyc2Vfbm9ybWFsMzIgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBhbmQgc2V0IG1vZGVsL3ZpZXcgYW5kIG5vcm1hbCBtYXRyaWNlcyBmb3IgYSB0aWxlXG4gICAgc2V0dXBUaWxlICh0aWxlLCBwcm9ncmFtKSB7XG4gICAgICAgIC8vIFRpbGUtc3BlY2lmaWMgc3RhdGVcbiAgICAgICAgLy8gVE9ETzogY2FsYyB0aGVzZSBvbmNlIHBlciB0aWxlIChjdXJyZW50bHkgYmVpbmcgbmVlZGxlc3NseSByZS1jYWxjdWxhdGVkIHBlci10aWxlLXBlci1zdHlsZSlcbiAgICAgICAgdGlsZS5zZXR1cFByb2dyYW0odGhpcy5tYXRyaWNlcywgcHJvZ3JhbSk7XG5cbiAgICAgICAgLy8gTW9kZWwtdmlldyBhbmQgbm9ybWFsIG1hdHJpY2VzXG4gICAgICAgIHRoaXMuY2FtZXJhLnNldHVwTWF0cmljZXModGhpcy5tYXRyaWNlcywgcHJvZ3JhbSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGdlbmVyYWwgdW5pZm9ybXMgdGhhdCBtdXN0IGJlIHVwZGF0ZWQgb25jZSBwZXIgcHJvZ3JhbVxuICAgIHNldHVwUHJvZ3JhbSAocHJvZ3JhbSkge1xuICAgICAgICBwcm9ncmFtLnVuaWZvcm0oJzJmJywgJ3VfcmVzb2x1dGlvbicsIHRoaXMuc2l6ZS5kZXZpY2Uud2lkdGgsIHRoaXMuc2l6ZS5kZXZpY2UuaGVpZ2h0KTtcbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCczZicsICd1X21hcF9wb3NpdGlvbicsIHRoaXMuY2VudGVyLm1ldGVycy54LCB0aGlzLmNlbnRlci5tZXRlcnMueSwgdGhpcy56b29tKTtcbiAgICAgICAgcHJvZ3JhbS51bmlmb3JtKCcxZicsICd1X21ldGVyc19wZXJfcGl4ZWwnLCB0aGlzLm1ldGVyc19wZXJfcGl4ZWwpO1xuICAgICAgICBwcm9ncmFtLnVuaWZvcm0oJzFmJywgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJywgVXRpbHMuZGV2aWNlX3BpeGVsX3JhdGlvKTtcblxuICAgICAgICB0aGlzLmNhbWVyYS5zZXR1cFByb2dyYW0ocHJvZ3JhbSk7XG4gICAgfVxuXG59XG4iXX0= -Tangram.debug.commit = 'd0facba8b41d43eac689ee4058af3e83d9f8e146'; +Tangram.debug.commit = '6135986d09b48905d4dd2340e536b89c12ce238c'; diff --git a/dist/tangram.min.js b/dist/tangram.min.js index 8a98d3a43..0971e07d7 100644 --- a/dist/tangram.min.js +++ b/dist/tangram.min.js @@ -3,12 +3,12 @@ r.Buffer=n,r.SlowBuffer=n,r.INSPECT_MAX_BYTES=50,n.poolSize=8192;var I=107374182 },{"./$.add-to-unscopables":57,"./$.iter-define":85,"./$.iter-step":87,"./$.iterators":88,"./$.to-iobject":108}],118:[function(e){"use strict";var t=e("./$.collection-strong");e("./$.collection")("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var r=t.getEntry(this,e);return r&&r.v},set:function(e,r){return t.def(this,0===e?0:e,r)}},t,!0)},{"./$.collection":63,"./$.collection-strong":61}],119:[function(e){var t=e("./$.export");t(t.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}})},{"./$.export":70}],120:[function(e){var t=e("./$.export");t(t.S+t.F,"Object",{assign:e("./$.object-assign")})},{"./$.export":70,"./$.object-assign":93}],121:[function(e){var t=e("./$.is-object");e("./$.object-sap")("freeze",function(e){return function(r){return e&&t(r)?e(r):r}})},{"./$.is-object":82,"./$.object-sap":94}],122:[function(e){var t=e("./$.to-iobject");e("./$.object-sap")("getOwnPropertyDescriptor",function(e){return function(r,n){return e(t(r),n)}})},{"./$.object-sap":94,"./$.to-iobject":108}],123:[function(e){var t=e("./$.to-object");e("./$.object-sap")("keys",function(e){return function(r){return e(t(r))}})},{"./$.object-sap":94,"./$.to-object":110}],124:[function(e){var t=e("./$.export");t(t.S,"Object",{setPrototypeOf:e("./$.set-proto").set})},{"./$.export":70,"./$.set-proto":99}],125:[function(e,t){t.exports=e(37)},{"/Users/bcamper/Documents/dev/vector-map/node_modules/browser-resolve/empty.js":37}],126:[function(e){"use strict";var t,r=e("./$"),n=e("./$.library"),i=e("./$.global"),o=e("./$.ctx"),a=e("./$.classof"),s=e("./$.export"),l=e("./$.is-object"),u=e("./$.an-object"),c=e("./$.a-function"),f=e("./$.strict-new"),h=e("./$.for-of"),d=e("./$.set-proto").set,p=e("./$.same-value"),m=e("./$.wks")("species"),g=e("./$.species-constructor"),v=e("./$.microtask"),_="Promise",y=i.process,b="process"==a(y),x=i[_],w=function(e){var t=new x(function(){});return e&&(t.constructor=Object),x.resolve(t)===t},A=function(){function t(e){var r=new x(e);return d(r,t.prototype),r}var n=!1;try{if(n=x&&x.resolve&&w(),d(t,x),t.prototype=r.create(x.prototype,{constructor:{value:t}}),t.resolve(5).then(function(){})instanceof t||(n=!1),n&&e("./$.descriptors")){var i=!1;x.resolve(r.setDesc({},"then",{get:function(){i=!0}})),n=i}}catch(o){n=!1}return n}(),T=function(e,r){return n&&e===x&&r===t?!0:p(e,r)},k=function(e){var t=u(e)[m];return void 0!=t?t:e},E=function(e){var t;return l(e)&&"function"==typeof(t=e.then)?t:!1},S=function(e){var t,r;this.promise=new e(function(e,n){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=n}),this.resolve=c(t),this.reject=c(r)},R=function(e){try{e()}catch(t){return{error:t}}},M=function(e,t){if(!e.n){e.n=!0;var r=e.c;v(function(){for(var n=e.v,o=1==e.s,a=0,s=function(t){var r,i,a=o?t.ok:t.fail,s=t.resolve,l=t.reject;try{a?(o||(e.h=!0),r=a===!0?n:a(n),r===t.promise?l(TypeError("Promise-chain cycle")):(i=E(r))?i.call(r,s,l):s(r)):l(n)}catch(u){l(u)}};r.length>a;)s(r[a++]);r.length=0,e.n=!1,t&&setTimeout(function(){var t,r,o=e.p;j(o)&&(b?y.emit("unhandledRejection",n,o):(t=i.onunhandledrejection)?t({promise:o,reason:n}):(r=i.console)&&r.error&&r.error("Unhandled promise rejection",n)),e.a=void 0},1)})}},j=function(e){var t,r=e._d,n=r.a||r.c,i=0;if(r.h)return!1;for(;n.length>i;)if(t=n[i++],t.fail||!j(t.promise))return!1;return!0},P=function(e){var t=this;t.d||(t.d=!0,t=t.r||t,t.v=e,t.s=2,t.a=t.c.slice(),M(t,!0))},z=function(e){var t,r=this;if(!r.d){r.d=!0,r=r.r||r;try{if(r.p===e)throw TypeError("Promise can't be resolved itself");(t=E(e))?v(function(){var n={r:r,d:!1};try{t.call(e,o(z,n,1),o(P,n,1))}catch(i){P.call(n,i)}}):(r.v=e,r.s=1,M(r,!1))}catch(n){P.call({r:r,d:!1},n)}}};A||(x=function(e){c(e);var t=this._d={p:f(this,x,_),c:[],a:void 0,s:0,d:!1,v:void 0,h:!1,n:!1};try{e(o(z,t,1),o(P,t,1))}catch(r){P.call(t,r)}},e("./$.redefine-all")(x.prototype,{then:function(e,t){var r=new S(g(this,x)),n=r.promise,i=this._d;return r.ok="function"==typeof e?e:!0,r.fail="function"==typeof t&&t,i.c.push(r),i.a&&i.a.push(r),i.s&&M(i,!1),n},"catch":function(e){return this.then(void 0,e)}})),s(s.G+s.W+s.F*!A,{Promise:x}),e("./$.set-to-string-tag")(x,_),e("./$.set-species")(_),t=e("./$.core")[_],s(s.S+s.F*!A,_,{reject:function(e){var t=new S(this),r=t.reject;return r(e),t.promise}}),s(s.S+s.F*(!A||w(!0)),_,{resolve:function(e){if(e instanceof x&&T(e.constructor,this))return e;var t=new S(this),r=t.resolve;return r(e),t.promise}}),s(s.S+s.F*!(A&&e("./$.iter-detect")(function(e){x.all(e)["catch"](function(){})})),_,{all:function(e){var t=k(this),n=new S(t),i=n.resolve,o=n.reject,a=[],s=R(function(){h(e,!1,a.push,a);var n=a.length,s=Array(n);n?r.each.call(a,function(e,r){var a=!1;t.resolve(e).then(function(e){a||(a=!0,s[r]=e,--n||i(s))},o)}):i(s)});return s&&o(s.error),n.promise},race:function(e){var t=k(this),r=new S(t),n=r.reject,i=R(function(){h(e,!1,function(e){t.resolve(e).then(r.resolve,n)})});return i&&n(i.error),r.promise}})},{"./$":89,"./$.a-function":56,"./$.an-object":58,"./$.classof":59,"./$.core":64,"./$.ctx":65,"./$.descriptors":67,"./$.export":70,"./$.for-of":72,"./$.global":74,"./$.is-object":82,"./$.iter-detect":86,"./$.library":91,"./$.microtask":92,"./$.redefine-all":96,"./$.same-value":98,"./$.set-proto":99,"./$.set-species":100,"./$.set-to-string-tag":101,"./$.species-constructor":103,"./$.strict-new":104,"./$.wks":112}],127:[function(e){"use strict";var t=e("./$.collection-strong");e("./$.collection")("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return t.def(this,e=0===e?0:e,e)}},t)},{"./$.collection":63,"./$.collection-strong":61}],128:[function(e){"use strict";var t=e("./$.string-at")(!0);e("./$.iter-define")(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,r=this._t,n=this._i;return n>=r.length?{value:void 0,done:!0}:(e=t(r,n),this._i+=e.length,{value:e,done:!1})})},{"./$.iter-define":85,"./$.string-at":105}],129:[function(e){"use strict";var t=e("./$"),r=e("./$.global"),n=e("./$.has"),i=e("./$.descriptors"),o=e("./$.export"),a=e("./$.redefine"),s=e("./$.fails"),l=e("./$.shared"),u=e("./$.set-to-string-tag"),c=e("./$.uid"),f=e("./$.wks"),h=e("./$.keyof"),d=e("./$.get-names"),p=e("./$.enum-keys"),m=e("./$.is-array"),g=e("./$.an-object"),v=e("./$.to-iobject"),_=e("./$.property-desc"),y=t.getDesc,b=t.setDesc,x=t.create,w=d.get,A=r.Symbol,T=r.JSON,k=T&&T.stringify,E=!1,S=f("_hidden"),R=t.isEnum,M=l("symbol-registry"),j=l("symbols"),P="function"==typeof A,z=Object.prototype,N=i&&s(function(){return 7!=x(b({},"a",{get:function(){return b(this,"a",{value:7}).a}})).a})?function(e,t,r){var n=y(z,t);n&&delete z[t],b(e,t,r),n&&e!==z&&b(z,t,n)}:b,O=function(e){var t=j[e]=x(A.prototype);return t._k=e,i&&E&&N(z,e,{configurable:!0,set:function(t){n(this,S)&&n(this[S],e)&&(this[S][e]=!1),N(this,e,_(1,t))}}),t},L=function(e){return"symbol"==typeof e},I=function(e,t,r){return r&&n(j,t)?(r.enumerable?(n(e,S)&&e[S][t]&&(e[S][t]=!1),r=x(r,{enumerable:_(0,!1)})):(n(e,S)||b(e,S,_(1,{})),e[S][t]=!0),N(e,t,r)):b(e,t,r)},U=function(e,t){g(e);for(var r,n=p(t=v(t)),i=0,o=n.length;o>i;)I(e,r=n[i++],t[r]);return e},F=function(e,t){return void 0===t?x(e):U(x(e),t)},D=function(e){var t=R.call(this,e);return t||!n(this,e)||!n(j,e)||n(this,S)&&this[S][e]?t:!0},$=function(e,t){var r=y(e=v(e),t);return!r||!n(j,t)||n(e,S)&&e[S][t]||(r.enumerable=!0),r},C=function(e){for(var t,r=w(v(e)),i=[],o=0;r.length>o;)n(j,t=r[o++])||t==S||i.push(t);return i},G=function(e){for(var t,r=w(v(e)),i=[],o=0;r.length>o;)n(j,t=r[o++])&&i.push(j[t]);return i},B=function(e){if(void 0!==e&&!L(e)){for(var t,r,n=[e],i=1,o=arguments;o.length>i;)n.push(o[i++]);return t=n[1],"function"==typeof t&&(r=t),(r||!m(t))&&(t=function(e,t){return r&&(t=r.call(this,e,t)),L(t)?void 0:t}),n[1]=t,k.apply(T,n)}},q=s(function(){var e=A();return"[null]"!=k([e])||"{}"!=k({a:e})||"{}"!=k(Object(e))});P||(A=function(){if(L(this))throw TypeError("Symbol is not a constructor");return O(c(arguments.length>0?arguments[0]:void 0))},a(A.prototype,"toString",function(){return this._k}),L=function(e){return e instanceof A},t.create=F,t.isEnum=D,t.getDesc=$,t.setDesc=I,t.setDescs=U,t.getNames=d.get=C,t.getSymbols=G,i&&!e("./$.library")&&a(z,"propertyIsEnumerable",D,!0));var V={"for":function(e){return n(M,e+="")?M[e]:M[e]=A(e)},keyFor:function(e){return h(M,e)},useSetter:function(){E=!0},useSimple:function(){E=!1}};t.each.call("hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),function(e){var t=f(e);V[e]=P?t:O(t)}),E=!0,o(o.G+o.W,{Symbol:A}),o(o.S,"Symbol",V),o(o.S+o.F*!P,"Object",{create:F,defineProperty:I,defineProperties:U,getOwnPropertyDescriptor:$,getOwnPropertyNames:C,getOwnPropertySymbols:G}),T&&o(o.S+o.F*(!P||q),"JSON",{stringify:B}),u(A,"Symbol"),u(Math,"Math",!0),u(r.JSON,"JSON",!0)},{"./$":89,"./$.an-object":58,"./$.descriptors":67,"./$.enum-keys":69,"./$.export":70,"./$.fails":71,"./$.get-names":73,"./$.global":74,"./$.has":75,"./$.is-array":81,"./$.keyof":90,"./$.library":91,"./$.property-desc":95,"./$.redefine":97,"./$.set-to-string-tag":101,"./$.shared":102,"./$.to-iobject":108,"./$.uid":111,"./$.wks":112}],130:[function(e){var t=e("./$.export");t(t.P,"Map",{toJSON:e("./$.collection-to-json")("Map")})},{"./$.collection-to-json":62,"./$.export":70}],131:[function(e){var t=e("./$.export");t(t.P,"Set",{toJSON:e("./$.collection-to-json")("Set")})},{"./$.collection-to-json":62,"./$.export":70}],132:[function(e){e("./es6.array.iterator");var t=e("./$.iterators");t.NodeList=t.HTMLCollection=t.Array},{"./$.iterators":88,"./es6.array.iterator":117}],133:[function(e,t,r){function n(e){return e=Math.round(e),0>e?0:e>255?255:e}function i(e){return 0>e?0:e>1?1:e}function o(e){return n("%"===e[e.length-1]?parseFloat(e)/100*255:parseInt(e))}function a(e){return i("%"===e[e.length-1]?parseFloat(e)/100:parseFloat(e))}function s(e,t,r){return 0>r?r+=1:r>1&&(r-=1),1>6*r?e+(t-e)*r*6:1>2*r?t:2>3*r?e+(t-e)*(2/3-r)*6:e}function l(e){var t=e.replace(/ /g,"").toLowerCase();if(t in u)return u[t].slice();if("#"===t[0]){if(4===t.length){var r=parseInt(t.substr(1),16);return r>=0&&4095>=r?[(3840&r)>>4|(3840&r)>>8,240&r|(240&r)>>4,15&r|(15&r)<<4,1]:null}if(7===t.length){var r=parseInt(t.substr(1),16);return r>=0&&16777215>=r?[(16711680&r)>>16,(65280&r)>>8,255&r,1]:null}return null}var i=t.indexOf("("),l=t.indexOf(")");if(-1!==i&&l+1===t.length){var c=t.substr(0,i),f=t.substr(i+1,l-(i+1)).split(","),h=1;switch(c){case"rgba":if(4!==f.length)return null;h=a(f.pop());case"rgb":return 3!==f.length?null:[o(f[0]),o(f[1]),o(f[2]),h];case"hsla":if(4!==f.length)return null;h=a(f.pop());case"hsl":if(3!==f.length)return null;var d=(parseFloat(f[0])%360+360)%360/360,p=a(f[1]),m=a(f[2]),g=.5>=m?m*(p+1):m+p-m*p,v=2*m-g;return[n(255*s(v,g,d+1/3)),n(255*s(v,g,d)),n(255*s(v,g,d-1/3)),h];default:return null}}return null}var u={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};try{r.parseCSSColor=l}catch(c){}},{}],134:[function(e,t){"use strict";function r(e,t,n){var i=0|e[n];if(0>=i)return[];var o,a=new Array(i);if(n===e.length-1)for(o=0;i>o;++o)a[o]=t;else for(o=0;i>o;++o)a[o]=r(e,t,n+1);return a}function n(e,t){var r,n;for(r=new Array(e),n=0;e>n;++n)r[n]=t;return r}function i(e,t){switch("undefined"==typeof t&&(t=0),typeof e){case"number":if(e>0)return n(0|e,t);break;case"object":if("number"==typeof e.length)return r(e,t,0)}return[]}t.exports=i},{}],135:[function(e,t){"use strict";function r(e){for(var t,r,i,a,s,u,c,f,h=n(e[0],!0),d=0,p=80,m=0;p>d&&m=p){t=h.next,r=a=t.p[0],i=s=t.p[1];do u=t.p[0],c=t.p[1],r>u&&(r=u),i>c&&(i=c),u>a&&(a=u),c>s&&(s=c),t=t.next;while(t!==h);f=Math.max(a-r,s-i)}e.length>1&&(h=l(e,h));var g=[];return h&&o(h,g,r,i,f),g}function n(e,t){var r,n,i,o=0,a=e.length;for(r=0,n=a-1;a>r;n=r++){var s=e[r],l=e[n];o+=(l[0]-s[0])*(s[1]+l[1])}if(t===o>0)for(r=0;a>r;r++)i=T(e[r],i);else for(r=a-1;r>=0;r--)i=T(e[r],i);return i}function i(e){var t,r=e;do if(t=!1,v(r.p,r.next.p)||0===g(r.prev.p,r.p,r.next.p)){if(r.prev.next=r.next,r.next.prev=r.prev,r.prevZ&&(r.prevZ.nextZ=r.nextZ),r.nextZ&&(r.nextZ.prevZ=r.prevZ),r=e=r.prev,r===r.next)return null;t=!0}else r=r.next;while(t||r!==e);return e}function o(e,t,r,n,l,u){if(e=i(e)){u||void 0===r||f(e,r,n,l);for(var c,h,d=e;e.prev!==e.next;)if(c=e.prev,h=e.next,a(e,r,n,l))t.push(c.p,e.p,h.p),h.prev=c,c.next=h,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ),e=h.next,d=h.next;else if(e=h,e===d){u?s(e,t,r,n,l):o(e,t,r,n,l,!0);break}}}function a(e,t,r,n){var i=e.prev.p,o=e.p,a=e.next.p,s=i[0],l=o[0],u=a[0],c=i[1],f=o[1],h=a[1],p=s*f-c*l,m=s*h-c*u,g=u*f-h*l,v=p-m-g;if(0>=v)return!1;var _,y,b,x,w,A,T,k=h-c,E=s-u,S=c-f,R=l-s;if(void 0!==t){var M=l>s?u>s?s:u:u>l?l:u,j=f>c?h>c?c:h:h>f?f:h,P=s>l?s>u?s:u:l>u?l:u,z=c>f?c>h?c:h:f>h?f:h,N=d(M,j,t,r,n),O=d(P,z,t,r,n);for(T=e.nextZ;T&&T.z<=O;)if(_=T.p,T=T.nextZ,_!==i&&_!==a&&(y=_[0],b=_[1],x=k*y+E*b-m,x>=0&&(w=S*y+R*b+p,w>=0&&(A=v-x-w,A>=0&&(x&&w||x&&A||w&&A)))))return!1;for(T=e.prevZ;T&&T.z>=N;)if(_=T.p,T=T.prevZ,_!==i&&_!==a&&(y=_[0],b=_[1],x=k*y+E*b-m,x>=0&&(w=S*y+R*b+p,w>=0&&(A=v-x-w,A>=0&&(x&&w||x&&A||w&&A)))))return!1}else for(T=e.next.next;T!==e.prev;)if(_=T.p,T=T.next,y=_[0],b=_[1],x=k*y+E*b-m,x>=0&&(w=S*y+R*b+p,w>=0&&(A=v-x-w,A>=0&&(x&&w||x&&A||w&&A))))return!1;return!0}function s(e,t,r,n,i){var a=e;do{for(var s=a.next.next;s!==a.prev;){if(m(a,s)){var l=A(a,s);return o(a,t,r,n,i),void o(l,t,r,n,i)}s=s.next}a=a.next}while(a!==e)}function l(e,t){for(var r=e.length,o=[],a=1;r>a;a++){var s=i(n(e[a],!1));s&&o.push(p(s))}for(o.sort(w),a=0;a=i[1]){var c=n[0]+(l-n[1])*(i[0]-n[0])/(i[1]-n[1]);s>=c&&c>u&&(u=c,r=n[0]=E?-1:1,R=r,M=1/0;for(o=r.next;o!==R;)f=o.p[0],h=o.p[1],d=s-f,d>=0&&f>=v&&(p=(w*f+A*h-x)*S,p>=0&&(m=(T*f+k*h+y)*S,m>=0&&E*S-p-m>=0&&(g=Math.abs(l-h)/d,M>g&&b(o,e)&&(r=o,M=g)))),o=o.next;return r}function f(e,t,r,n){var i=e;do i.z=i.z||d(i.p[0],i.p[1],t,r,n),i.prevZ=i.prev,i.nextZ=i.next,i=i.next;while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,h(i)}function h(e){for(var t,r,n,i,o,a,s,l,u=1;;){for(r=e,e=null,o=null,a=0;r;){for(a++,n=r,s=0,t=0;u>t&&(s++,n=n.nextZ,n);t++);for(l=u;s>0||l>0&&n;)0===s?(i=n,n=n.nextZ,l--):0!==l&&n?r.z<=n.z?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,l--):(i=r,r=r.nextZ,s--),o?o.nextZ=i:e=i,i.prevZ=o,o=i;r=n}if(o.nextZ=null,1>=a)return e;u*=2}}function d(e,t,r,n,i){return e=1e3*(e-r)/i,e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t=1e3*(t-n)/i,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e|t<<1}function p(e){var t=e,r=e;do t.p[0]0?1:0>n?-1:0}function v(e,t){return e[0]===t[0]&&e[1]===t[1]}function _(e,t,r,n){return g(e,t,r)!==g(e,t,n)&&g(r,n,e)!==g(r,n,t)}function y(e,t,r){var n=e;do{var i=n.p,o=n.next.p;if(i!==t&&o!==t&&i!==r&&o!==r&&_(i,o,t,r))return!0;n=n.next}while(n!==e);return!1}function b(e,t){return-1===g(e.prev.p,e.p,e.next.p)?-1!==g(e.p,t.p,e.next.p)&&-1!==g(e.p,e.prev.p,t.p):-1===g(e.p,t.p,e.prev.p)||-1===g(e.p,e.next.p,t.p)}function x(e,t,r){var n=e,i=!1,o=(t[0]+r[0])/2,a=(t[1]+r[1])/2;do{var s=n.p,l=n.next.p;s[1]>a!=l[1]>a&&o<(l[0]-s[0])*(a-s[1])/(l[1]-s[1])+s[0]&&(i=!i),n=n.next}while(n!==e);return i}function w(e,t){return e.p[0]-t.p[0]}function A(e,t){var r=new k(e.p),n=new k(t.p),i=e.next,o=t.prev;return e.next=t,t.prev=e,r.next=i,i.prev=r,n.next=r,r.prev=n,o.next=n,n.prev=o,r}function T(e,t){var r=new k(e);return t?(r.next=t.next,r.prev=t,t.next.prev=r,t.next=r):(r.prev=r,r.next=r),r}function k(e){this.p=e,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null}t.exports=r},{}],136:[function(e,t){"use strict";function r(e,t,r,o,a,s,l,u){if(r/=t,o/=t,l>=r&&o>=u)return e;if(l>o||r>u)return null;for(var c=[],f=0;f=r&&o>=d)c.push(p);else if(!(h>o||r>d)){var v=1===g?n(m,r,o,a):i(m,r,o,a,s,3===g);v.length&&c.push({geometry:v,type:g,tags:e[f].tags||null,min:p.min,max:p.max})}}return c.length?c:null}function n(e,t,r,n){for(var i=[],o=0;o=t&&r>=s&&i.push(a)}return i}function i(e,t,r,n,i,a){for(var s=[],l=0;lc;c++)u=p||m[c],p=m[c+1],h=d||u[n],d=p[n],t>h?d>r?(y.push(i(u,p,t),i(u,p,r)),a||(y=o(s,y,g,v))):d>=t&&y.push(i(u,p,t)):h>r?t>d?(y.push(i(u,p,r),i(u,p,t)),a||(y=o(s,y,g,v))):r>=d&&y.push(i(u,p,r)):(y.push(u),t>d?(y.push(i(u,p,t)),a||(y=o(s,y,g,v))):d>r&&(y.push(i(u,p,r)),a||(y=o(s,y,g,v))));u=m[_-1],h=u[n],h>=t&&r>=h&&y.push(u),f=y[y.length-1],a&&f&&(y[0][0]!==f[0]||y[0][1]!==f[1])&&y.push(y[0]),o(s,y,g,v)}return s}function o(e,t,r,n){return t.length&&(t.area=r,t.dist=n,e.push(t)),[]}t.exports=r},{}],137:[function(e,t){"use strict";function r(e,t){var r=[];if("FeatureCollection"===e.type)for(var i=0;in?-1:n>1?1:n,[r,n,0]}function s(e){for(var t,r,n=0,i=0,o=0;o1)return!1;var a=i.geometry[0].length;if(5!==a)return!1;for(var s=0;a>s;s++){var l=o(i.geometry[0][s],t,e.z2,e.x,e.y);if(l[0]!==-r&&l[0]!==t+r||l[1]!==-r&&l[1]!==t+r)return!1}return!0}t.exports=r;var f=e("./convert"),h=e("./clip"),d=e("./wrap"),p=e("./tile");n.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,solidChildren:!1,tolerance:3,extent:4096,buffer:64,debug:0},n.prototype.splitTile=function(e,t,r,n,i,o,u){for(var f=[e,t,r,n],d=this.options,m=d.debug;f.length;){n=f.pop(),r=f.pop(),t=f.pop(),e=f.pop();var g=1<1&&console.time("creation"),_=this.tiles[v]=p(e,g,r,n,y,t===d.maxZoom),this.tileCoords.push({z:t,x:r,y:n}),m)){m>1&&(console.log("tile z%d-%d-%d (features: %d, points: %d, simplified: %d)",t,r,n,_.numFeatures,_.numPoints,_.numSimplified),console.timeEnd("creation"));var b="z"+t;this.stats[b]=(this.stats[b]||0)+1,this.total++}if(_.source=e,d.solidChildren||!c(_,d.extent,d.buffer)){if(i){if(t===d.maxZoom||t===i)continue;var x=1<1&&console.time("clipping");var w,A,T,k,E,S,R=.5*d.buffer/d.extent,M=.5-R,j=.5+R,P=1+R;w=A=T=k=null,E=h(e,g,r-R,r+j,0,s,_.min[0],_.max[0]),S=h(e,g,r+M,r+P,0,s,_.min[0],_.max[0]),E&&(w=h(E,g,n-R,n+j,1,l,_.min[1],_.max[1]),A=h(E,g,n+M,n+P,1,l,_.min[1],_.max[1])),S&&(T=h(S,g,n-R,n+j,1,l,_.min[1],_.max[1]),k=h(S,g,n+M,n+P,1,l,_.min[1],_.max[1])),m>1&&console.timeEnd("clipping"),w&&f.push(w,t+1,2*r,2*n),A&&f.push(A,t+1,2*r,2*n+1),T&&f.push(T,t+1,2*r+1,2*n),k&&f.push(k,t+1,2*r+1,2*n+1)}}},n.prototype.getTile=function(e,t,r){var n=this.options,o=n.extent,s=n.debug,l=1<1&&console.log("drilling down to z%d-%d-%d",e,t,r);for(var f,h=e,d=t,p=r;!f&&h>0;)h--,d=Math.floor(d/2),p=Math.floor(p/2),f=this.tiles[a(h,d,p)];if(!f)return null;if(s>1&&console.log("found parent tile z%d-%d-%d",h,d,p),f.source){if(c(f,o,n.buffer))return i(f,o);s>1&&console.time("drilling down"),this.splitTile(f.source,h,d,p,e,t,r),s>1&&console.timeEnd("drilling down")}return this.tiles[u]?i(this.tiles[u],o):null}},{"./clip":136,"./convert":137,"./tile":140,"./wrap":141}],139:[function(e,t){"use strict";function r(e,t){var r,i,o,a,s=t*t,l=e.length,u=0,c=l-1,f=[];for(e[u][2]=1,e[c][2]=1;c;){for(i=0,r=u+1;c>r;r++)o=n(e[r],e[u],e[c]),o>i&&(a=r,i=o);i>s?(e[a][2]=i,f.push(u),f.push(a),u=a):(c=f.pop(),u=f.pop())}}function n(e,t,r){var n=t[0],i=t[1],o=r[0],a=r[1],s=e[0],l=e[1],u=o-n,c=a-i;if(0!==u||0!==c){var f=((s-n)*u+(l-i)*c)/(u*u+c*c);f>1?(n=o,i=a):f>0&&(n+=u*f,i+=c*f)}return u=s-n,c=l-i,u*u+c*c}t.exports=r},{}],140:[function(e,t){"use strict";function r(e,t,r,i,o,a){for(var s={features:[],numPoints:0,numSimplified:0,numFeatures:0,source:null,x:r,y:i,z2:t,transformed:!1,min:[2,1],max:[-1,0]},l=0;ls.max[0]&&(s.max[0]=c[0]),c[1]>s.max[1]&&(s.max[1]=c[1])}return s}function n(e,t,r,n){var i,o,a,s,l=t.geometry,u=t.type,c=[],f=r*r;if(1===u)for(i=0;if)&&(h.push(s),e.numSimplified++),e.numPoints++;c.push(h)}else e.numPoints+=a.length;c.length&&e.features.push({geometry:c,type:u,tags:t.tags||null})}t.exports=r},{}],141:[function(e,t){"use strict";function r(e,t,r){var i=e,a=o(e,1,-1-t,t,0,r,-1,2),s=o(e,1,1-t,2+t,0,r,-1,2);return(a||s)&&(i=o(e,1,-t,1+t,0,r,-1,2),a&&(i=n(a,1).concat(i)),s&&(i=i.concat(n(s,-1)))),i}function n(e,t){for(var r=[],n=0;n>1,c=-7,f=r?i-1:0,h=r?-1:1,d=e[t+f];for(f+=h,o=d&(1<<-c)-1,d>>=-c,c+=s;c>0;o=256*o+e[t+f],f+=h,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=n;c>0;a=256*a+e[t+f],f+=h,c-=8);if(0===o)o=1-u;else{if(o===l)return a?0/0:1/0*(d?-1:1);a+=Math.pow(2,n),o-=u}return(d?-1:1)*a*Math.pow(2,o-n)},r.write=function(e,t,r,n,i,o){var a,s,l,u=8*o-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:o-1,p=n?1:-1,m=0>t||0===t&&0>1/t?1:0;for(t=Math.abs(t),isNaN(t)||1/0===t?(s=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),t+=a+f>=1?h/l:h*Math.pow(2,1-f),t*l>=2&&(a++,l/=2),a+f>=c?(s=0,a=c):a+f>=1?(s=(t*l-1)*Math.pow(2,i),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;e[r+d]=255&s,d+=p,s/=256,i-=8);for(a=a<0;e[r+d]=255&a,d+=p,a/=256,u-=8);e[r+d-p]|=128*m}},{}],153:[function(e,t){var r=Array.isArray,n=Object.prototype.toString;t.exports=r||function(e){return!!e&&"[object Array]"==n.call(e)}},{}],154:[function(e,t){"use strict";var r=e("./lib/js-yaml.js");t.exports=r},{"./lib/js-yaml.js":155}],155:[function(e,t){"use strict";function r(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}var n=e("./js-yaml/loader");t.exports.Type=e("./js-yaml/type"),t.exports.Schema=e("./js-yaml/schema"),t.exports.FAILSAFE_SCHEMA=e("./js-yaml/schema/failsafe"),t.exports.JSON_SCHEMA=e("./js-yaml/schema/json"),t.exports.CORE_SCHEMA=e("./js-yaml/schema/core"),t.exports.DEFAULT_SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),t.exports.DEFAULT_FULL_SCHEMA=e("./js-yaml/schema/default_full"),t.exports.load=n.load,t.exports.loadAll=n.loadAll,t.exports.safeLoad=n.safeLoad,t.exports.safeLoadAll=n.safeLoadAll,t.exports.YAMLException=e("./js-yaml/exception"),t.exports.MINIMAL_SCHEMA=e("./js-yaml/schema/failsafe"),t.exports.SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),t.exports.DEFAULT_SCHEMA=e("./js-yaml/schema/default_full"),t.exports.scan=r("scan"),t.exports.parse=r("parse"),t.exports.compose=r("compose"),t.exports.addConstructor=r("addConstructor")},{"./js-yaml/exception":157,"./js-yaml/loader":158,"./js-yaml/schema":160,"./js-yaml/schema/core":161,"./js-yaml/schema/default_full":162,"./js-yaml/schema/default_safe":163,"./js-yaml/schema/failsafe":164,"./js-yaml/schema/json":165,"./js-yaml/type":166}],156:[function(e,t){"use strict";function r(e){return"undefined"==typeof e||null===e}function n(e){return"object"==typeof e&&null!==e}function i(e){return Array.isArray(e)?e:r(e)?[]:[e]}function o(e,t){var r,n,i,o;if(t)for(o=Object.keys(t),r=0,n=o.length;n>r;r+=1)i=o[r],e[i]=t[i];return e}function a(e,t){var r,n="";for(r=0;t>r;r+=1)n+=e;return n}function s(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e}t.exports.isNothing=r,t.exports.isObject=n,t.exports.toArray=i,t.exports.repeat=a,t.exports.isNegativeZero=s,t.exports.extend=o},{}],157:[function(e,t){"use strict";function r(e,t){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||"",this.name="YAMLException",this.reason=e,this.mark=t,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():"")}r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t},t.exports=r},{}],158:[function(e,t){"use strict";function r(e){return 10===e||13===e}function n(e){return 9===e||32===e}function i(e){return 9===e||32===e||10===e||13===e}function o(e){return 44===e||91===e||93===e||123===e||125===e}function a(e){var t;return e>=48&&57>=e?e-48:(t=32|e,t>=97&&102>=t?t-97+10:-1)}function s(e){return 120===e?2:117===e?4:85===e?8:0}function l(e){return e>=48&&57>=e?e-48:-1}function u(e){return 48===e?"\x00":97===e?"":98===e?"\b":116===e?" ":9===e?" ":110===e?"\n":118===e?" ":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"…":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}function c(e){return 65535>=e?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}function f(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||B,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function h(e,t){return new $(t,new C(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function d(e,t){throw h(e,t)}function p(e,t){e.onWarning&&e.onWarning.call(null,h(e,t))}function m(e,t,r,n){var i,o,a,s;if(r>t){if(s=e.input.slice(t,r),n)for(i=0,o=s.length;o>i;i+=1)a=s.charCodeAt(i),9===a||a>=32&&1114111>=a||d(e,"expected valid JSON character");else K.test(s)&&d(e,"the stream contains non-printable characters");e.result+=s}}function g(e,t,r,n){var i,o,a,s;for(D.isObject(r)||d(e,"cannot merge mappings; the provided source object is unacceptable"),i=Object.keys(r),a=0,s=i.length;s>a;a+=1)o=i[a],q.call(t,o)||(t[o]=r[o],n[o]=!0)}function v(e,t,r,n,i,o){var a,s;if(i=String(i),null===t&&(t={}),"tag:yaml.org,2002:merge"===n)if(Array.isArray(o))for(a=0,s=o.length;s>a;a+=1)g(e,t,o[a],r);else g(e,t,o,r);else e.json||q.call(r,i)||!q.call(t,i)||d(e,"duplicated mapping key"),t[i]=o,delete r[i];return t}function _(e){var t;t=e.input.charCodeAt(e.position),10===t?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):d(e,"a line break is expected"),e.line+=1,e.lineStart=e.position}function y(e,t,i){for(var o=0,a=e.input.charCodeAt(e.position);0!==a;){for(;n(a);)a=e.input.charCodeAt(++e.position);if(t&&35===a)do a=e.input.charCodeAt(++e.position);while(10!==a&&13!==a&&0!==a);if(!r(a))break;for(_(e),a=e.input.charCodeAt(e.position),o++,e.lineIndent=0;32===a;)e.lineIndent++,a=e.input.charCodeAt(++e.position)}return-1!==i&&0!==o&&e.lineIndent1&&(e.result+=D.repeat("\n",t-1))}function w(e,t,a){var s,l,u,c,f,h,d,p,g,v=e.kind,_=e.result;if(g=e.input.charCodeAt(e.position),i(g)||o(g)||35===g||38===g||42===g||33===g||124===g||62===g||39===g||34===g||37===g||64===g||96===g)return!1;if((63===g||45===g)&&(l=e.input.charCodeAt(e.position+1),i(l)||a&&o(l)))return!1;for(e.kind="scalar",e.result="",u=c=e.position,f=!1;0!==g;){if(58===g){if(l=e.input.charCodeAt(e.position+1),i(l)||a&&o(l))break}else if(35===g){if(s=e.input.charCodeAt(e.position-1),i(s))break}else{if(e.position===e.lineStart&&b(e)||a&&o(g))break;if(r(g)){if(h=e.line,d=e.lineStart,p=e.lineIndent,y(e,!1,-1),e.lineIndent>=t){f=!0,g=e.input.charCodeAt(e.position);continue}e.position=c,e.line=h,e.lineStart=d,e.lineIndent=p;break}}f&&(m(e,u,c,!1),x(e,e.line-h),u=c=e.position,f=!1),n(g)||(c=e.position+1),g=e.input.charCodeAt(++e.position)}return m(e,u,c,!1),e.result?!0:(e.kind=v,e.result=_,!1)}function A(e,t){var n,i,o;if(n=e.input.charCodeAt(e.position),39!==n)return!1;for(e.kind="scalar",e.result="",e.position++,i=o=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(m(e,i,e.position,!0),n=e.input.charCodeAt(++e.position),39!==n)return!0;i=o=e.position,e.position++}else r(n)?(m(e,i,o,!0),x(e,y(e,!1,t)),i=o=e.position):e.position===e.lineStart&&b(e)?d(e,"unexpected end of the document within a single quoted scalar"):(e.position++,o=e.position);d(e,"unexpected end of the stream within a single quoted scalar")}function T(e,t){var n,i,o,l,u,f;if(f=e.input.charCodeAt(e.position),34!==f)return!1;for(e.kind="scalar",e.result="",e.position++,n=i=e.position;0!==(f=e.input.charCodeAt(e.position));){if(34===f)return m(e,n,e.position,!0),e.position++,!0;if(92===f){if(m(e,n,e.position,!0),f=e.input.charCodeAt(++e.position),r(f))y(e,!1,t);else if(256>f&&nt[f])e.result+=it[f],e.position++;else if((u=s(f))>0){for(o=u,l=0;o>0;o--)f=e.input.charCodeAt(++e.position),(u=a(f))>=0?l=(l<<4)+u:d(e,"expected hexadecimal character");e.result+=c(l),e.position++}else d(e,"unknown escape sequence");n=i=e.position}else r(f)?(m(e,n,i,!0),x(e,y(e,!1,t)),n=i=e.position):e.position===e.lineStart&&b(e)?d(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}d(e,"unexpected end of the stream within a double quoted scalar")}function k(e,t){var r,n,o,a,s,l,u,c,f,h,p,m=!0,g=e.tag,_=e.anchor,b={};if(p=e.input.charCodeAt(e.position),91===p)a=93,u=!1,n=[];else{if(123!==p)return!1;a=125,u=!0,n={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=n),p=e.input.charCodeAt(++e.position);0!==p;){if(y(e,!0,t),p=e.input.charCodeAt(e.position),p===a)return e.position++,e.tag=g,e.anchor=_,e.kind=u?"mapping":"sequence",e.result=n,!0;m||d(e,"missed comma between flow collection entries"),f=c=h=null,s=l=!1,63===p&&(o=e.input.charCodeAt(e.position+1),i(o)&&(s=l=!0,e.position++,y(e,!0,t))),r=e.line,z(e,t,V,!1,!0),f=e.tag,c=e.result,y(e,!0,t),p=e.input.charCodeAt(e.position),!l&&e.line!==r||58!==p||(s=!0,p=e.input.charCodeAt(++e.position),y(e,!0,t),z(e,t,V,!1,!0),h=e.result),u?v(e,n,b,f,c,h):n.push(s?v(e,null,b,f,c,h):c),y(e,!0,t),p=e.input.charCodeAt(e.position),44===p?(m=!0,p=e.input.charCodeAt(++e.position)):m=!1}d(e,"unexpected end of the stream within a flow collection")}function E(e,t){var i,o,a,s,u=Z,c=!1,f=t,h=0,p=!1;if(s=e.input.charCodeAt(e.position),124===s)o=!1;else{if(62!==s)return!1;o=!0}for(e.kind="scalar",e.result="";0!==s;)if(s=e.input.charCodeAt(++e.position),43===s||45===s)Z===u?u=43===s?J:Y:d(e,"repeat of a chomping mode identifier");else{if(!((a=l(s))>=0))break;0===a?d(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?d(e,"repeat of an indentation width identifier"):(f=t+a-1,c=!0)}if(n(s)){do s=e.input.charCodeAt(++e.position);while(n(s));if(35===s)do s=e.input.charCodeAt(++e.position);while(!r(s)&&0!==s)}for(;0!==s;){for(_(e),e.lineIndent=0,s=e.input.charCodeAt(e.position);(!c||e.lineIndentf&&(f=e.lineIndent),r(s))h++;else{if(e.lineIndentt)&&0!==o)d(e,"bad indentation of a sequence entry");else if(e.lineIndentt)&&(z(e,t,X,!0,a)&&(_?m=e.result:g=e.result),_||(v(e,f,h,p,m,g),p=m=g=null),y(e,!0,-1),l=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==l)d(e,"bad indentation of a mapping entry");else if(e.lineIndentt?p=1:e.lineIndent===t?p=0:e.lineIndentt?p=1:e.lineIndent===t?p=0:e.lineIndentl;l+=1)if(c=e.implicitTypes[l],c.resolve(e.result)){e.result=c.construct(e.result),e.tag=c.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else q.call(e.typeMap,e.tag)?(c=e.typeMap[e.tag],null!==e.result&&c.kind!==e.kind&&d(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+c.kind+'", not "'+e.kind+'"'),c.resolve(e.result)?(e.result=c.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):d(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):d(e,"unknown tag !<"+e.tag+">");return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||g}function N(e){var t,o,a,s,l=e.position,u=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(s=e.input.charCodeAt(e.position))&&(y(e,!0,-1),s=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==s));){for(u=!0,s=e.input.charCodeAt(++e.position),t=e.position;0!==s&&!i(s);)s=e.input.charCodeAt(++e.position);for(o=e.input.slice(t,e.position),a=[],o.length<1&&d(e,"directive name must not be less than one character in length");0!==s;){for(;n(s);)s=e.input.charCodeAt(++e.position);if(35===s){do s=e.input.charCodeAt(++e.position);while(0!==s&&!r(s));break}if(r(s))break;for(t=e.position;0!==s&&!i(s);)s=e.input.charCodeAt(++e.position);a.push(e.input.slice(t,e.position))}0!==s&&_(e),q.call(at,o)?at[o](e,o,a):p(e,'unknown document directive "'+o+'"')}return y(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,y(e,!0,-1)):u&&d(e,"directives end mark is expected"),z(e,e.lineIndent-1,X,!1,!0),y(e,!0,-1),e.checkLineBreaks&&Q.test(e.input.slice(l,e.position))&&p(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&b(e)?void(46===e.input.charCodeAt(e.position)&&(e.position+=3,y(e,!0,-1))):void(e.positionn;n+=1)t(o[n])}function I(e,t){var r=O(e,t);if(0===r.length)return void 0;if(1===r.length)return r[0];throw new $("expected a single document in the stream, but found more")}function U(e,t,r){L(e,t,D.extend({schema:G},r))}function F(e,t){return I(e,D.extend({schema:G},t))}for(var D=e("./common"),$=e("./exception"),C=e("./mark"),G=e("./schema/default_safe"),B=e("./schema/default_full"),q=Object.prototype.hasOwnProperty,V=1,W=2,H=3,X=4,Z=1,Y=2,J=3,K=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Q=/[\x85\u2028\u2029]/,et=/[,\[\]\{\}]/,tt=/^(?:!|!!|![a-z\-]+!)$/i,rt=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i,nt=new Array(256),it=new Array(256),ot=0;256>ot;ot++)nt[ot]=u(ot)?1:0,it[ot]=u(ot);var at={YAML:function(e,t,r){var n,i,o;null!==e.version&&d(e,"duplication of %YAML directive"),1!==r.length&&d(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(r[0]),null===n&&d(e,"ill-formed argument of the YAML directive"),i=parseInt(n[1],10),o=parseInt(n[2],10),1!==i&&d(e,"unacceptable YAML version of the document"),e.version=r[0],e.checkLineBreaks=2>o,1!==o&&2!==o&&p(e,"unsupported YAML version of the document")},TAG:function(e,t,r){var n,i;2!==r.length&&d(e,"TAG directive accepts exactly two arguments"),n=r[0],i=r[1],tt.test(n)||d(e,"ill-formed tag handle (first argument) of the TAG directive"),q.call(e.tagMap,n)&&d(e,'there is a previously declared suffix for "'+n+'" tag handle'),rt.test(i)||d(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=i}};t.exports.loadAll=L,t.exports.load=I,t.exports.safeLoadAll=U,t.exports.safeLoad=F},{"./common":156,"./exception":157,"./mark":159,"./schema/default_full":162,"./schema/default_safe":163}],159:[function(e,t){"use strict";function r(e,t,r,n,i){this.name=e,this.buffer=t,this.position=r,this.line=n,this.column=i}var n=e("./common");r.prototype.getSnippet=function(e,t){var r,i,o,a,s;if(!this.buffer)return null;for(e=e||4,t=t||75,r="",i=this.position;i>0&&-1==="\x00\r\n…\u2028\u2029".indexOf(this.buffer.charAt(i-1));)if(i-=1,this.position-i>t/2-1){r=" ... ",i+=5;break}for(o="",a=this.position;at/2-1){o=" ... ",a-=5;break}return s=this.buffer.slice(i,a),n.repeat(" ",e)+r+s+o+"\n"+n.repeat(" ",e+this.position-i+r.length)+"^"},r.prototype.toString=function(e){var t,r="";return this.name&&(r+='in "'+this.name+'" '),r+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(r+=":\n"+t)),r},t.exports=r},{"./common":156}],160:[function(e,t){"use strict";function r(e,t,n){var i=[];return e.include.forEach(function(e){n=r(e,t,n)}),e[t].forEach(function(e){n.forEach(function(t,r){t.tag===e.tag&&i.push(r)}),n.push(e)}),n.filter(function(e,t){return-1===i.indexOf(t)})}function n(){function e(e){n[e.tag]=e}var t,r,n={};for(t=0,r=arguments.length;r>t;t+=1)arguments[t].forEach(e);return n}function i(e){this.include=e.include||[],this.implicit=e.implicit||[],this.explicit=e.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&"scalar"!==e.loadKind)throw new a("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")}),this.compiledImplicit=r(this,"implicit",[]),this.compiledExplicit=r(this,"explicit",[]),this.compiledTypeMap=n(this.compiledImplicit,this.compiledExplicit)}var o=e("./common"),a=e("./exception"),s=e("./type");i.DEFAULT=null,i.create=function(){var e,t;switch(arguments.length){case 1:e=i.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new a("Wrong number of arguments for Schema.create function")}if(e=o.toArray(e),t=o.toArray(t),!e.every(function(e){return e instanceof i}))throw new a("Specified list of super schemas (or a single Schema object) contains a non-Schema object.");if(!t.every(function(e){return e instanceof s}))throw new a("Specified list of YAML types (or a single Type object) contains a non-Type object.");return new i({include:e,explicit:t})},t.exports=i},{"./common":156,"./exception":157,"./type":166}],161:[function(e,t){"use strict";var r=e("../schema");t.exports=new r({include:[e("./json")]})},{"../schema":160,"./json":165}],162:[function(e,t){"use strict";var r=e("../schema");t.exports=r.DEFAULT=new r({include:[e("./default_safe")],explicit:[e("../type/js/undefined"),e("../type/js/regexp"),e("../type/js/function")]})},{"../schema":160,"../type/js/function":171,"../type/js/regexp":172,"../type/js/undefined":173,"./default_safe":163}],163:[function(e,t){"use strict";var r=e("../schema");t.exports=new r({include:[e("./core")],implicit:[e("../type/timestamp"),e("../type/merge")],explicit:[e("../type/binary"),e("../type/omap"),e("../type/pairs"),e("../type/set")]})},{"../schema":160,"../type/binary":167,"../type/merge":175,"../type/omap":177,"../type/pairs":178,"../type/set":180,"../type/timestamp":182,"./core":161}],164:[function(e,t){"use strict";var r=e("../schema");t.exports=new r({explicit:[e("../type/str"),e("../type/seq"),e("../type/map")]})},{"../schema":160,"../type/map":174,"../type/seq":179,"../type/str":181}],165:[function(e,t){"use strict";var r=e("../schema");t.exports=new r({include:[e("./failsafe")],implicit:[e("../type/null"),e("../type/bool"),e("../type/int"),e("../type/float")]})},{"../schema":160,"../type/bool":168,"../type/float":169,"../type/int":170,"../type/null":176,"./failsafe":164}],166:[function(e,t){"use strict";function r(e){var t={};return null!==e&&Object.keys(e).forEach(function(r){e[r].forEach(function(e){t[String(e)]=r})}),t}function n(e,t){if(t=t||{},Object.keys(t).forEach(function(t){if(-1===o.indexOf(t))throw new i('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')}),this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.defaultStyle=t.defaultStyle||null,this.styleAliases=r(t.styleAliases||null),-1===a.indexOf(this.kind))throw new i('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var i=e("./exception"),o=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],a=["scalar","sequence","mapping"];t.exports=n},{"./exception":157}],167:[function(e,t){"use strict";function r(e){if(null===e)return!1;var t,r,n=0,i=e.length,o=l;for(r=0;i>r;r++)if(t=o.indexOf(e.charAt(r)),!(t>64)){if(0>t)return!1;n+=6}return n%8===0}function n(e){var t,r,n=e.replace(/[\r\n=]/g,""),i=n.length,o=l,s=0,u=[];for(t=0;i>t;t++)t%4===0&&t&&(u.push(s>>16&255),u.push(s>>8&255),u.push(255&s)),s=s<<6|o.indexOf(n.charAt(t));return r=i%4*6,0===r?(u.push(s>>16&255),u.push(s>>8&255),u.push(255&s)):18===r?(u.push(s>>10&255),u.push(s>>2&255)):12===r&&u.push(s>>4&255),a?new a(u):u}function i(e){var t,r,n="",i=0,o=e.length,a=l;for(t=0;o>t;t++)t%3===0&&t&&(n+=a[i>>18&63],n+=a[i>>12&63],n+=a[i>>6&63],n+=a[63&i]),i=(i<<8)+e[t];return r=o%3,0===r?(n+=a[i>>18&63],n+=a[i>>12&63],n+=a[i>>6&63],n+=a[63&i]):2===r?(n+=a[i>>10&63],n+=a[i>>4&63],n+=a[i<<2&63],n+=a[64]):1===r&&(n+=a[i>>2&63],n+=a[i<<4&63],n+=a[64],n+=a[64]),n}function o(e){return a&&a.isBuffer(e)}var a=e("buffer").Buffer,s=e("../type"),l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";t.exports=new s("tag:yaml.org,2002:binary",{kind:"scalar",resolve:r,construct:n,predicate:o,represent:i})},{"../type":166,buffer:37}],168:[function(e,t){"use strict";function r(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)}function n(e){return"true"===e||"True"===e||"TRUE"===e}function i(e){return"[object Boolean]"===Object.prototype.toString.call(e)}var o=e("../type");t.exports=new o("tag:yaml.org,2002:bool",{kind:"scalar",resolve:r,construct:n,predicate:i,represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"})},{"../type":166}],169:[function(e,t){"use strict";function r(e){return null===e?!1:l.test(e)?!0:!1}function n(e){var t,r,n,i;return t=e.replace(/_/g,"").toLowerCase(),r="-"===t[0]?-1:1,i=[],"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===r?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?0/0:t.indexOf(":")>=0?(t.split(":").forEach(function(e){i.unshift(parseFloat(e,10))}),t=0,n=1,i.forEach(function(e){t+=e*n,n*=60}),r*t):r*parseFloat(t,10)}function i(e,t){var r;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(a.isNegativeZero(e))return"-0.0";return r=e.toString(10),u.test(r)?r.replace("e",".e"):r}function o(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!==0||a.isNegativeZero(e))}var a=e("../common"),s=e("../type"),l=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?|\\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),u=/^[-+]?[0-9]+e/;t.exports=new s("tag:yaml.org,2002:float",{kind:"scalar",resolve:r,construct:n,predicate:o,represent:i,defaultStyle:"lowercase"})},{"../common":156,"../type":166}],170:[function(e,t){"use strict";function r(e){return e>=48&&57>=e||e>=65&&70>=e||e>=97&&102>=e}function n(e){return e>=48&&55>=e}function i(e){return e>=48&&57>=e}function o(e){if(null===e)return!1;var t,o=e.length,a=0,s=!1;if(!o)return!1;if(t=e[a],("-"===t||"+"===t)&&(t=e[++a]),"0"===t){if(a+1===o)return!0;if(t=e[++a],"b"===t){for(a++;o>a;a++)if(t=e[a],"_"!==t){if("0"!==t&&"1"!==t)return!1;s=!0}return s}if("x"===t){for(a++;o>a;a++)if(t=e[a],"_"!==t){if(!r(e.charCodeAt(a)))return!1;s=!0}return s}for(;o>a;a++)if(t=e[a],"_"!==t){if(!n(e.charCodeAt(a)))return!1;s=!0}return s}for(;o>a;a++)if(t=e[a],"_"!==t){if(":"===t)break;if(!i(e.charCodeAt(a)))return!1;s=!0}return s?":"!==t?!0:/^(:[0-5]?[0-9])+$/.test(e.slice(a)):!1}function a(e){var t,r,n=e,i=1,o=[];return-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),t=n[0],("-"===t||"+"===t)&&("-"===t&&(i=-1),n=n.slice(1),t=n[0]),"0"===n?0:"0"===t?"b"===n[1]?i*parseInt(n.slice(2),2):"x"===n[1]?i*parseInt(n,16):i*parseInt(n,8):-1!==n.indexOf(":")?(n.split(":").forEach(function(e){o.unshift(parseInt(e,10))}),n=0,r=1,o.forEach(function(e){n+=e*r,r*=60}),i*n):i*parseInt(n,10)}function s(e){return"[object Number]"===Object.prototype.toString.call(e)&&e%1===0&&!l.isNegativeZero(e)}var l=e("../common"),u=e("../type");t.exports=new u("tag:yaml.org,2002:int",{kind:"scalar",resolve:o,construct:a,predicate:s,represent:{binary:function(e){return"0b"+e.toString(2)},octal:function(e){return"0"+e.toString(8)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return"0x"+e.toString(16).toUpperCase()}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})},{"../common":156,"../type":166}],171:[function(e,t){"use strict";function r(e){if(null===e)return!1;try{var t="("+e+")",r=a.parse(t,{range:!0});return"Program"!==r.type||1!==r.body.length||"ExpressionStatement"!==r.body[0].type||"FunctionExpression"!==r.body[0].expression.type?!1:!0}catch(n){return!1}}function n(e){var t,r="("+e+")",n=a.parse(r,{range:!0}),i=[];if("Program"!==n.type||1!==n.body.length||"ExpressionStatement"!==n.body[0].type||"FunctionExpression"!==n.body[0].expression.type)throw new Error("Failed to resolve function");return n.body[0].expression.params.forEach(function(e){i.push(e.name)}),t=n.body[0].expression.body.range,new Function(i,r.slice(t[0]+1,t[1]-1))}function i(e){return e.toString()}function o(e){return"[object Function]"===Object.prototype.toString.call(e)}var a;try{var s=e;a=s("esprima")}catch(l){"undefined"!=typeof window&&(a=window.esprima)}var u=e("../../type");t.exports=new u("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:r,construct:n,predicate:o,represent:i})},{"../../type":166}],172:[function(e,t){"use strict";function r(e){if(null===e)return!1;if(0===e.length)return!1;var t=e,r=/\/([gim]*)$/.exec(e),n="";if("/"===t[0]){if(r&&(n=r[1]),n.length>3)return!1;if("/"!==t[t.length-n.length-1])return!1}return!0}function n(e){var t=e,r=/\/([gim]*)$/.exec(e),n="";return"/"===t[0]&&(r&&(n=r[1]),t=t.slice(1,t.length-n.length-1)),new RegExp(t,n)}function i(e){var t="/"+e.source+"/";return e.global&&(t+="g"),e.multiline&&(t+="m"),e.ignoreCase&&(t+="i"),t}function o(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var a=e("../../type");t.exports=new a("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:r,construct:n,predicate:o,represent:i})},{"../../type":166}],173:[function(e,t){"use strict";function r(){return!0}function n(){return void 0}function i(){return""}function o(e){return"undefined"==typeof e}var a=e("../../type");t.exports=new a("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:r,construct:n,predicate:o,represent:i})},{"../../type":166}],174:[function(e,t){"use strict";var r=e("../type");t.exports=new r("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})},{"../type":166}],175:[function(e,t){"use strict";function r(e){return"<<"===e||null===e}var n=e("../type");t.exports=new n("tag:yaml.org,2002:merge",{kind:"scalar",resolve:r})},{"../type":166}],176:[function(e,t){"use strict";function r(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)}function n(){return null}function i(e){return null===e}var o=e("../type");t.exports=new o("tag:yaml.org,2002:null",{kind:"scalar",resolve:r,construct:n,predicate:i,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"}) },{"../type":166}],177:[function(e,t){"use strict";function r(e){if(null===e)return!0;var t,r,n,i,s,l=[],u=e;for(t=0,r=u.length;r>t;t+=1){if(n=u[t],s=!1,"[object Object]"!==a.call(n))return!1;for(i in n)if(o.call(n,i)){if(s)return!1;s=!0}if(!s)return!1;if(-1!==l.indexOf(i))return!1;l.push(i)}return!0}function n(e){return null!==e?e:[]}var i=e("../type"),o=Object.prototype.hasOwnProperty,a=Object.prototype.toString;t.exports=new i("tag:yaml.org,2002:omap",{kind:"sequence",resolve:r,construct:n})},{"../type":166}],178:[function(e,t){"use strict";function r(e){if(null===e)return!0;var t,r,n,i,a,s=e;for(a=new Array(s.length),t=0,r=s.length;r>t;t+=1){if(n=s[t],"[object Object]"!==o.call(n))return!1;if(i=Object.keys(n),1!==i.length)return!1;a[t]=[i[0],n[i[0]]]}return!0}function n(e){if(null===e)return[];var t,r,n,i,o,a=e;for(o=new Array(a.length),t=0,r=a.length;r>t;t+=1)n=a[t],i=Object.keys(n),o[t]=[i[0],n[i[0]]];return o}var i=e("../type"),o=Object.prototype.toString;t.exports=new i("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:r,construct:n})},{"../type":166}],179:[function(e,t){"use strict";var r=e("../type");t.exports=new r("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}})},{"../type":166}],180:[function(e,t){"use strict";function r(e){if(null===e)return!0;var t,r=e;for(t in r)if(o.call(r,t)&&null!==r[t])return!1;return!0}function n(e){return null!==e?e:{}}var i=e("../type"),o=Object.prototype.hasOwnProperty;t.exports=new i("tag:yaml.org,2002:set",{kind:"mapping",resolve:r,construct:n})},{"../type":166}],181:[function(e,t){"use strict";var r=e("../type");t.exports=new r("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return null!==e?e:""}})},{"../type":166}],182:[function(e,t){"use strict";function r(e){return null===e?!1:null===a.exec(e)?!1:!0}function n(e){var t,r,n,i,o,s,l,u,c,f,h=0,d=null;if(t=a.exec(e),null===t)throw new Error("Date resolve error");if(r=+t[1],n=+t[2]-1,i=+t[3],!t[4])return new Date(Date.UTC(r,n,i));if(o=+t[4],s=+t[5],l=+t[6],t[7]){for(h=t[7].slice(0,3);h.length<3;)h+="0";h=+h}return t[9]&&(u=+t[10],c=+(t[11]||0),d=6e4*(60*u+c),"-"===t[9]&&(d=-d)),f=new Date(Date.UTC(r,n,i,o,s,l,h)),d&&f.setTime(f.getTime()-d),f}function i(e){return e.toISOString()}var o=e("../type"),a=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?)?$");t.exports=new o("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:r,construct:n,instanceOf:Date,represent:i})},{"../type":166}],183:[function(e,t){!function(r,n){"object"==typeof t&&t.exports&&"function"==typeof e?t.exports=n():"function"==typeof define&&"object"==typeof define.amd?define(n):r.log=n()}(this,function(){function e(e){return typeof console===l?!1:void 0!==console[e]?t(console,e):void 0!==console.log?t(console,"log"):s}function t(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(n){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function r(e,t){return function(){typeof console!==l&&(n(t),a[e].apply(a,arguments))}}function n(e){for(var t=0;tt?s:a.methodFactory(r,e)}}function i(e){var t=(u[e]||"silent").toUpperCase();try{return void(window.localStorage.loglevel=t)}catch(r){}try{window.document.cookie="loglevel="+t+";"}catch(r){}}function o(){var e;try{e=window.localStorage.loglevel}catch(t){}if(typeof e===l)try{e=/loglevel=([^;]+)/.exec(window.document.cookie)[1]}catch(t){}void 0===a.levels[e]&&(e="WARN"),a.setLevel(a.levels[e])}var a={},s=function(){},l="undefined",u=["trace","debug","info","warn","error"];a.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},a.methodFactory=function(t,n){return e(t)||r(t,n)},a.setLevel=function(e){if("string"==typeof e&&void 0!==a.levels[e.toUpperCase()]&&(e=a.levels[e.toUpperCase()]),!("number"==typeof e&&e>=0&&e<=a.levels.SILENT))throw"log.setLevel() called with invalid level: "+e;return i(e),n(e),typeof console===l&&e0?u(t.map(g),"||"):"true"}function f(e,t){return t&&t.length>0?u(t.map(g),"&&"):"true"}function h(e,t){return"!"+n(g(t).join(" && "))}function d(e,t){return"!"+n(c(null,t))}function p(e,t){return n(o(e)+(t?" != ":" == ")+"null")}function m(e,t){var r=[];return t.max&&r.push(""+o(e)+" < "+t.max),t.min&&r.push(""+o(e)+" >= "+t.min),n(r.join(" && "))}function g(e){var t=[];if("function"==typeof e)return[n(e.toString()+"(context)")];if(Array.isArray(e))return[c(null,e)];if(null==e)return["true"];for(var r=Object.keys(e),i=0;io;o++){if(t=e.charCodeAt(o),t>55295&&57344>t){if(!r){t>56319||o+1===n?i.push(239,191,189):r=t;continue}if(56320>t){i.push(239,191,189),r=t;continue}t=r-55296<<10|t-56320|65536,r=null}else r&&(i.push(239,191,189),r=null);128>t?i.push(t):2048>t?i.push(t>>6|192,63&t|128):65536>t?i.push(t>>12|224,t>>6&63|128,63&t|128):i.push(t>>18|240,t>>12&63|128,t>>6&63|128,63&t|128)}return i}t.exports=r;var i,o,a,s=e("ieee754");i={readUInt32LE:function(e){return(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},writeUInt32LE:function(e,t){this[t]=e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24},readInt32LE:function(e){return(this[e]|this[e+1]<<8|this[e+2]<<16)+(this[e+3]<<24)},readFloatLE:function(e){return s.read(this,e,!0,23,4)},readDoubleLE:function(e){return s.read(this,e,!0,52,8)},writeFloatLE:function(e,t){return s.write(this,e,t,!0,23,4)},writeDoubleLE:function(e,t){return s.write(this,e,t,!0,52,8)},toString:function(e,t,r){var n="",i="";t=t||0,r=Math.min(this.length,r||this.length);for(var o=t;r>o;o++){var a=this[o];127>=a?(n+=decodeURIComponent(i)+String.fromCharCode(a),i=""):i+="%"+a.toString(16)}return n+=decodeURIComponent(i)},write:function(e,t){for(var r=e===o?a:n(e),i=0;i>3,o=this.pos;e(i,t,this),this.pos===o&&this.skip(n)}return t},readMessage:function(e,t){return this.readFields(e,t,this.readVarint()+this.pos)},readFixed32:function(){var e=this.buf.readUInt32LE(this.pos);return this.pos+=4,e},readSFixed32:function(){var e=this.buf.readInt32LE(this.pos);return this.pos+=4,e},readFixed64:function(){var e=this.buf.readUInt32LE(this.pos)+this.buf.readUInt32LE(this.pos+4)*p;return this.pos+=8,e},readSFixed64:function(){var e=this.buf.readUInt32LE(this.pos)+this.buf.readInt32LE(this.pos+4)*p;return this.pos+=8,e},readFloat:function(){var e=this.buf.readFloatLE(this.pos);return this.pos+=4,e},readDouble:function(){var e=this.buf.readDoubleLE(this.pos);return this.pos+=8,e},readVarint:function(){var e,t,r,n,i,o,a=this.buf;if(r=a[this.pos++],128>r)return r;if(r=127&r,n=a[this.pos++],128>n)return r|n<<7;if(n=(127&n)<<7,i=a[this.pos++],128>i)return r|n|i<<14;if(i=(127&i)<<14,o=a[this.pos++],128>o)return r|n|i|o<<21;if(e=r|n|i|(127&o)<<21,t=a[this.pos++],e+=268435456*(127&t),128>t)return e;if(t=a[this.pos++],e+=34359738368*(127&t),128>t)return e;if(t=a[this.pos++],e+=4398046511104*(127&t),128>t)return e;if(t=a[this.pos++],e+=562949953421312*(127&t),128>t)return e;if(t=a[this.pos++],e+=72057594037927940*(127&t),128>t)return e;if(t=a[this.pos++],e+=0x8000000000000000*(127&t),128>t)return e;throw new Error("Expected varint not more than 10 bytes")},readVarint64:function(){var e=this.pos,t=this.readVarint();if(g>t)return t;for(var r=this.pos-2;255===this.buf[r];)r--;e>r&&(r=e),t=0;for(var n=0;r-e+1>n;n++){var i=127&~this.buf[e+n];t+=4>n?i<<7*n:i*Math.pow(2,7*n)}return-t-1},readSVarint:function(){var e=this.readVarint();return e%2===1?(e+1)/-2:e/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var e=this.readVarint()+this.pos,t=this.buf.toString("utf8",this.pos,e);return this.pos=e,t},readBytes:function(){var e=this.readVarint()+this.pos,t=this.buf.slice(this.pos,e);return this.pos=e,t},readPackedVarint:function(){for(var e=this.readVarint()+this.pos,t=[];this.pos127;);else if(t===n.Bytes)this.pos=this.readVarint()+this.pos;else if(t===n.Fixed32)this.pos+=4;else{if(t!==n.Fixed64)throw new Error("Unimplemented type: "+t);this.pos+=8}},writeTag:function(e,t){this.writeVarint(e<<3|t)},realloc:function(e){for(var t=this.length||16;t=e)this.realloc(1),this.buf[this.pos++]=e;else if(16383>=e)this.realloc(2),this.buf[this.pos++]=e>>>0&127|128,this.buf[this.pos++]=e>>>7&127;else if(2097151>=e)this.realloc(3),this.buf[this.pos++]=e>>>0&127|128,this.buf[this.pos++]=e>>>7&127|128,this.buf[this.pos++]=e>>>14&127;else if(268435455>=e)this.realloc(4),this.buf[this.pos++]=e>>>0&127|128,this.buf[this.pos++]=e>>>7&127|128,this.buf[this.pos++]=e>>>14&127|128,this.buf[this.pos++]=e>>>21&127;else{for(var t=this.pos;e>=128;)this.realloc(1),this.buf[this.pos++]=255&e|128,e/=128;if(this.realloc(1),this.buf[this.pos++]=0|e,this.pos-t>10)throw new Error("Given varint doesn't fit into 10 bytes")}},writeSVarint:function(e){this.writeVarint(0>e?2*-e-1:2*e)},writeBoolean:function(e){this.writeVarint(Boolean(e))},writeString:function(e){e=String(e);var t=d.byteLength(e);this.writeVarint(t),this.realloc(t),this.buf.write(e,this.pos),this.pos+=t},writeFloat:function(e){this.realloc(4),this.buf.writeFloatLE(e,this.pos),this.pos+=4},writeDouble:function(e){this.realloc(8),this.buf.writeDoubleLE(e,this.pos),this.pos+=8},writeBytes:function(e){var t=e.length;this.writeVarint(t),this.realloc(t);for(var r=0;t>r;r++)this.buf[this.pos++]=e[r]},writeMessage:function(e,t,r){this.writeTag(e,n.Bytes),this.pos++;var i=this.pos;t(r,this);var o=this.pos-i,a=127>=o?1:16383>=o?2:2097151>=o?3:268435455>=o?4:Math.ceil(Math.log(o)/(7*Math.LN2));if(a>1){this.realloc(a-1);for(var s=this.pos-1;s>=i;s--)this.buf[s+a-1]=this.buf[s]}this.pos=i-1,this.writeVarint(o),this.pos+=o},writePackedVarint:function(e,t){this.writeMessage(e,i,t)},writePackedSVarint:function(e,t){this.writeMessage(e,o,t)},writePackedBoolean:function(e,t){this.writeMessage(e,l,t)},writePackedFloat:function(e,t){this.writeMessage(e,a,t)},writePackedDouble:function(e,t){this.writeMessage(e,s,t)},writePackedFixed32:function(e,t){this.writeMessage(e,u,t)},writePackedSFixed32:function(e,t){this.writeMessage(e,c,t)},writePackedFixed64:function(e,t){this.writeMessage(e,f,t)},writePackedSFixed64:function(e,t){this.writeMessage(e,h,t)},writeBytesField:function(e,t){this.writeTag(e,n.Bytes),this.writeBytes(t)},writeFixed32Field:function(e,t){this.writeTag(e,n.Fixed32),this.writeFixed32(t)},writeSFixed32Field:function(e,t){this.writeTag(e,n.Fixed32),this.writeSFixed32(t)},writeFixed64Field:function(e,t){this.writeTag(e,n.Fixed64),this.writeFixed64(t)},writeSFixed64Field:function(e,t){this.writeTag(e,n.Fixed64),this.writeSFixed64(t)},writeVarintField:function(e,t){this.writeTag(e,n.Varint),this.writeVarint(t)},writeSVarintField:function(e,t){this.writeTag(e,n.Varint),this.writeSVarint(t)},writeStringField:function(e,t){this.writeTag(e,n.Bytes),this.writeString(t)},writeFloatField:function(e,t){this.writeTag(e,n.Fixed32),this.writeFloat(t)},writeDoubleField:function(e,t){this.writeTag(e,n.Fixed64),this.writeDouble(t)},writeBooleanField:function(e,t){this.writeVarintField(e,Boolean(t))}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./buffer":185}],187:[function(e,t){"use strict";function r(e,t){this.x=e,this.y=t}t.exports=r,r.prototype={clone:function(){return new r(this.x,this.y)},add:function(e){return this.clone()._add(e)},sub:function(e){return this.clone()._sub(e)},mult:function(e){return this.clone()._mult(e)},div:function(e){return this.clone()._div(e)},rotate:function(e){return this.clone()._rotate(e)},matMult:function(e){return this.clone()._matMult(e)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(e){return this.x===e.x&&this.y===e.y},dist:function(e){return Math.sqrt(this.distSqr(e))},distSqr:function(e){var t=e.x-this.x,r=e.y-this.y;return t*t+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(e){return Math.atan2(this.y-e.y,this.x-e.x)},angleWith:function(e){return this.angleWithSep(e.x,e.y)},angleWithSep:function(e,t){return Math.atan2(this.x*t-this.y*e,this.x*e+this.y*t)},_matMult:function(e){var t=e[0]*this.x+e[1]*this.y,r=e[2]*this.x+e[3]*this.y;return this.x=t,this.y=r,this},_add:function(e){return this.x+=e.x,this.y+=e.y,this},_sub:function(e){return this.x-=e.x,this.y-=e.y,this},_mult:function(e){return this.x*=e,this.y*=e,this},_div:function(e){return this.x/=e,this.y/=e,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var e=this.y;return this.y=this.x,this.x=-e,this},_rotate:function(e){var t=Math.cos(e),r=Math.sin(e),n=t*this.x-r*this.y,i=r*this.x+t*this.y;return this.x=n,this.y=i,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},r.convert=function(e){return e instanceof r?e:Array.isArray(e)?new r(e[0],e[1]):e}},{}],188:[function(e,t){function r(){}var n=t.exports={};n.nextTick=function(){var e="undefined"!=typeof window&&window.setImmediate,t="undefined"!=typeof window&&window.MutationObserver,r="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(e)return function(e){return window.setImmediate(e)};var n=[];if(t){var i=document.createElement("div"),o=new MutationObserver(function(){var e=n.slice();n.length=0,e.forEach(function(e){e()})});return o.observe(i,{attributes:!0}),function(e){n.length||i.setAttribute("yes","no"),n.push(e)}}return r?(window.addEventListener("message",function(e){var t=e.source;if((t===window||null===t)&&"process-tick"===e.data&&(e.stopPropagation(),n.length>0)){var r=n.shift();r()}},!0),function(e){n.push(e),window.postMessage("process-tick","*")}):function(e){setTimeout(e,0)}}(),n.title="browser",n.browser=!0,n.env={},n.argv=[],n.on=r,n.addListener=r,n.once=r,n.off=r,n.removeListener=r,n.removeAllListeners=r,n.emit=r,n.binding=function(){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(){throw new Error("process.chdir is not supported")}},{}],189:[function(e,t){"use stric";var r="\\/\\*",n="\\/\\*(?!\\*?\\!)",i="(.|[\\r\\n]|\\n)*?\\*\\/\\n?\\n?",o=/(^|[^\S\n])(?:\/\/)([\s\S]+?)$/gm,a=/(^|[^\S\n])(?:\/\/[^!])([\s\S]+?)$/gm,s=t.exports=function(e,t){return e?s.block(s.line(e,t),t):""};s.block=function(e,t){t=t||{};var o=new RegExp(r+i,"gm");return t.safe&&(o=new RegExp(n+i,"gm")),e?e.replace(o,""):""},s.line=function(e,t){t=t||{};var r=o;return t.safe&&(r=a),e?e.replace(r,""):""}},{}],190:[function(e,t){!function(){function e(e,t){function r(t){var r,n=e.arcs[0>t?~t:t],i=n[0];return e.transform?(r=[0,0],n.forEach(function(e){r[0]+=e[0],r[1]+=e[1]})):r=n[n.length-1],0>t?[r,i]:[i,r]}function n(e,t){for(var r in e){var n=e[r];delete t[n.start],delete n.start,delete n.end,n.forEach(function(e){i[0>e?~e:e]=1}),s.push(n)}}var i={},o={},a={},s=[],l=-1;return t.forEach(function(r,n){var i,o=e.arcs[0>r?~r:r];o.length<3&&!o[1][0]&&!o[1][1]&&(i=t[++l],t[l]=r,t[n]=i)}),t.forEach(function(e){var t,n,i=r(e),s=i[0],l=i[1];if(t=a[s])if(delete a[t.end],t.push(e),t.end=l,n=o[l]){delete o[n.start];var u=n===t?t:t.concat(n);o[u.start=t.start]=a[u.end=n.end]=u}else o[t.start]=a[t.end]=t;else if(t=o[l])if(delete o[t.start],t.unshift(e),t.start=s,n=a[s]){delete a[n.end];var c=n===t?t:n.concat(t);o[c.start=n.start]=a[c.end=t.end]=c}else o[t.start]=a[t.end]=t;else t=[e],o[t.start=s]=a[t.end=l]=t}),n(a,o),n(o,a),t.forEach(function(e){i[0>e?~e:e]||s.push([e])}),s}function r(t,r,n){function i(e){var t=0>e?~e:e;(c[t]||(c[t]=[])).push({i:e,g:u})}function o(e){e.forEach(i)}function a(e){e.forEach(o)}function s(e){"GeometryCollection"===e.type?e.geometries.forEach(s):e.type in f&&(u=e,f[e.type](e.arcs))}var l=[];if(arguments.length>1){var u,c=[],f={LineString:o,MultiLineString:a,Polygon:a,MultiPolygon:function(e){e.forEach(a)}};s(r),c.forEach(arguments.length<3?function(e){l.push(e[0].i)}:function(e){n(e[0].g,e[e.length-1].g)&&l.push(e[0].i)})}else for(var h=0,d=t.arcs.length;d>h;++h)l.push(h);return{type:"MultiLineString",arcs:e(t,l)}}function i(t,r){function i(e){e.forEach(function(t){t.forEach(function(t){(a[t=0>t?~t:t]||(a[t]=[])).push(e)})}),l.push(e)}function o(e){return h(s(t,{type:"Polygon",arcs:[e]}).coordinates[0])>0}var a={},l=[],u=[];return r.forEach(function(e){"Polygon"===e.type?i(e.arcs):"MultiPolygon"===e.type&&e.arcs.forEach(i)}),l.forEach(function(e){if(!e._){var t=[],r=[e];for(e._=1,u.push(t);e=r.pop();)t.push(e),e.forEach(function(e){e.forEach(function(e){a[0>e?~e:e].forEach(function(e){e._||(e._=1,r.push(e))})})})}}),l.forEach(function(e){delete e._}),{type:"MultiPolygon",arcs:u.map(function(r){var i=[];if(r.forEach(function(e){e.forEach(function(e){e.forEach(function(e){a[0>e?~e:e].length<2&&i.push(e)})})}),i=e(t,i),(n=i.length)>1)for(var s,l=o(r[0][0]),u=0;n>u;++u)if(l===o(i[u])){s=i[0],i[0]=i[u],i[u]=s;break}return i})}}function o(e,t){return"GeometryCollection"===t.type?{type:"FeatureCollection",features:t.geometries.map(function(t){return a(e,t)})}:a(e,t)}function a(e,t){var r={type:"Feature",id:t.id,properties:t.properties||{},geometry:s(e,t)};return null==t.id&&delete r.id,r}function s(e,t){function r(e,t){t.length&&t.pop();for(var r,n=c[0>e?~e:e],i=0,o=n.length;o>i;++i)t.push(r=n[i].slice()),u(r,i);0>e&&l(t,o)}function n(e){return e=e.slice(),u(e,0),e}function i(e){for(var t=[],n=0,i=e.length;i>n;++n)r(e[n],t);return t.length<2&&t.push(t[0].slice()),t}function o(e){for(var t=i(e);t.length<4;)t.push(t[0].slice());return t}function a(e){return e.map(o)}function s(e){var t=e.type;return"GeometryCollection"===t?{type:t,geometries:e.geometries.map(s)}:t in f?{type:t,coordinates:f[t](e)}:null}var u=g(e.transform),c=e.arcs,f={Point:function(e){return n(e.coordinates)},MultiPoint:function(e){return e.coordinates.map(n)},LineString:function(e){return i(e.arcs)},MultiLineString:function(e){return e.arcs.map(i)},Polygon:function(e){return a(e.arcs)},MultiPolygon:function(e){return e.arcs.map(a)}};return s(t)}function l(e,t){for(var r,n=e.length,i=n-t;i<--n;)r=e[i],e[i++]=e[n],e[n]=r}function u(e,t){for(var r=0,n=e.length;n>r;){var i=r+n>>>1;e[i]e&&(e=~e);var r=i[e];r?r.push(t):i[e]=[t]})}function r(e,r){e.forEach(function(e){t(e,r)})}function n(e,t){"GeometryCollection"===e.type?e.geometries.forEach(function(e){n(e,t)}):e.type in a&&a[e.type](e.arcs,t)}var i={},o=e.map(function(){return[]}),a={LineString:t,MultiLineString:r,Polygon:r,MultiPolygon:function(e,t){e.forEach(function(e){r(e,t)})}};e.forEach(n);for(var s in i)for(var l=i[s],c=l.length,f=0;c>f;++f)for(var h=f+1;c>h;++h){var d,p=l[f],m=l[h];(d=o[p])[s=u(d,m)]!==m&&d.splice(s,0,m),(d=o[m])[s=u(d,p)]!==p&&d.splice(s,0,p)}return o}function f(e,t){function r(e){o.remove(e),e[1][2]=t(e),o.push(e)}var n=g(e.transform),i=v(e.transform),o=m();return t||(t=d),e.arcs.forEach(function(e){for(var a,s,l=[],u=0,c=0,f=e.length;f>c;++c)s=e[c],n(e[c]=[s[0],s[1],1/0],c);for(var c=1,f=e.length-1;f>c;++c)a=e.slice(c-1,c+2),a[1][2]=t(a),l.push(a),o.push(a);for(var c=0,f=l.length;f>c;++c)a=l[c],a.previous=l[c-1],a.next=l[c+1];for(;a=o.pop();){var h=a.previous,d=a.next;a[1][2]0;){var r=(t+1>>1)-1,i=n[r];if(p(e,i)>=0)break;n[i._=t]=i,n[e._=t=r]=e}}function t(e,t){for(;;){var r=t+1<<1,o=r-1,a=t,s=n[a];if(i>o&&p(n[o],s)<0&&(s=n[a=o]),i>r&&p(n[r],s)<0&&(s=n[a=r]),a===t)break;n[s._=t]=s,n[e._=t=a]=e}}var r={},n=[],i=0;return r.push=function(t){return e(n[t._=i]=t,i++),i},r.pop=function(){if(!(0>=i)){var e,r=n[0];return--i>0&&(e=n[i],t(n[e._=0]=e,0)),r}},r.remove=function(r){var o,a=r._;if(n[a]===r)return a!==--i&&(o=n[i],(p(o,r)<0?e:t)(n[o._=a]=o,a)),a},r}function g(e){if(!e)return _;var t,r,n=e.scale[0],i=e.scale[1],o=e.translate[0],a=e.translate[1];return function(e,s){s||(t=r=0),e[0]=(t+=e[0])*n+o,e[1]=(r+=e[1])*i+a}}function v(e){if(!e)return _;var t,r,n=e.scale[0],i=e.scale[1],o=e.translate[0],a=e.translate[1];return function(e,s){s||(t=r=0);var l=(e[0]-o)/n|0,u=(e[1]-a)/i|0;e[0]=l-t,e[1]=u-r,t=l,r=u}}function _(){}var y={version:"1.6.19",mesh:function(e){return s(e,r.apply(this,arguments))},meshArcs:r,merge:function(e){return s(e,i.apply(this,arguments))},mergeArcs:i,feature:o,neighbors:c,presimplify:f};"function"==typeof define&&define.amd?define(y):"object"==typeof t&&t.exports?t.exports=y:this.topojson=y}()},{}],191:[function(e,t,r){(function(t,n){"use strict";function i(e){if(e){var t=e.length||e.byteLength,r=_.log2(t);w[r].push(e)}}function o(e){i(e.buffer)}function a(e){var e=_.nextPow2(e),t=_.log2(e),r=w[t];return r.length>0?r.pop():new ArrayBuffer(e)}function s(e){return new Uint8Array(a(e),0,e)}function l(e){return new Uint16Array(a(2*e),0,e)}function u(e){return new Uint32Array(a(4*e),0,e)}function c(e){return new Int8Array(a(e),0,e)}function f(e){return new Int16Array(a(2*e),0,e)}function h(e){return new Int32Array(a(4*e),0,e)}function d(e){return new Float32Array(a(4*e),0,e)}function p(e){return new Float64Array(a(8*e),0,e)}function m(e){return b?new Uint8ClampedArray(a(e),0,e):s(e)}function g(e){return new DataView(a(e),0,e)}function v(e){e=_.nextPow2(e);var t=_.log2(e),r=A[t];return r.length>0?r.pop():new n(e)}var _=e("bit-twiddle"),y=e("dup");t.__TYPEDARRAY_POOL||(t.__TYPEDARRAY_POOL={UINT8:y([32,0]),UINT16:y([32,0]),UINT32:y([32,0]),INT8:y([32,0]),INT16:y([32,0]),INT32:y([32,0]),FLOAT:y([32,0]),DOUBLE:y([32,0]),DATA:y([32,0]),UINT8C:y([32,0]),BUFFER:y([32,0])});var b="undefined"!=typeof Uint8ClampedArray,x=t.__TYPEDARRAY_POOL;x.UINT8C||(x.UINT8C=y([32,0])),x.BUFFER||(x.BUFFER=y([32,0]));var w=x.DATA,A=x.BUFFER;r.free=function(e){if(n.isBuffer(e))A[_.log2(e.length)].push(e);else{if("[object ArrayBuffer]"!==Object.prototype.toString.call(e)&&(e=e.buffer),!e)return;var t=e.length||e.byteLength,r=0|_.log2(t);w[r].push(e)}},r.freeUint8=r.freeUint16=r.freeUint32=r.freeInt8=r.freeInt16=r.freeInt32=r.freeFloat32=r.freeFloat=r.freeFloat64=r.freeDouble=r.freeUint8Clamped=r.freeDataView=o,r.freeArrayBuffer=i,r.freeBuffer=function(e){A[_.log2(e.length)].push(e)},r.malloc=function(e,t){if(void 0===t||"arraybuffer"===t)return a(e);switch(t){case"uint8":return s(e);case"uint16":return l(e);case"uint32":return u(e);case"int8":return c(e);case"int16":return f(e);case"int32":return h(e);case"float":case"float32":return d(e);case"double":case"float64":return p(e);case"uint8_clamped":return m(e);case"buffer":return v(e);case"data":case"dataview":return g(e);default:return null}return null},r.mallocArrayBuffer=a,r.mallocUint8=s,r.mallocUint16=l,r.mallocUint32=u,r.mallocInt8=c,r.mallocInt16=f,r.mallocInt32=h,r.mallocFloat32=r.mallocFloat=d,r.mallocFloat64=r.mallocDouble=p,r.mallocUint8Clamped=m,r.mallocDataView=g,r.mallocBuffer=v,r.clearCache=function(){for(var e=0;32>e;++e)x.UINT8[e].length=0,x.UINT16[e].length=0,x.UINT32[e].length=0,x.INT8[e].length=0,x.INT16[e].length=0,x.INT32[e].length=0,x.FLOAT[e].length=0,x.DOUBLE[e].length=0,x.UINT8C[e].length=0,w[e].length=0,A[e].length=0}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{"bit-twiddle":29,buffer:38,dup:134}],192:[function(e,t){t.exports.VectorTile=e("./lib/vectortile.js"),t.exports.VectorTileFeature=e("./lib/vectortilefeature.js"),t.exports.VectorTileLayer=e("./lib/vectortilelayer.js")},{"./lib/vectortile.js":193,"./lib/vectortilefeature.js":194,"./lib/vectortilelayer.js":195}],193:[function(e,t){"use strict";function r(e,t){this.layers=e.readFields(n,{},t)}function n(e,t,r){if(3===e){var n=new i(r,r.readVarint()+r.pos);n.length&&(t[n.name]=n)}}var i=e("./vectortilelayer");t.exports=r},{"./vectortilelayer":195}],194:[function(e,t){"use strict";function r(e,t,r,i,o){this.properties={},this.extent=r,this.type=0,this._pbf=e,this._geometry=-1,this._keys=i,this._values=o,e.readFields(n,this,t)}function n(e,t,r){1==e?t._id=r.readVarint():2==e?i(r,t):3==e?t.type=r.readVarint():4==e&&(t._geometry=r.pos)}function i(e,t){for(var r=e.readVarint()+e.pos;e.pos>3}if(i--,1===n||2===n)a+=e.readSVarint(),s+=e.readSVarint(),1===n&&(t&&l.push(t),t=[]),t.push(new o(a,s));else{if(7!==n)throw new Error("unknown command "+n);t.push(t[0].clone())}}return t&&l.push(t),l},r.prototype.bbox=function(){var e=this._pbf;e.pos=this._geometry;for(var t=e.readVarint()+e.pos,r=1,n=0,i=0,o=0,a=1/0,s=-1/0,l=1/0,u=-1/0;e.pos>3}if(n--,1===r||2===r)i+=e.readSVarint(),o+=e.readSVarint(),a>i&&(a=i),i>s&&(s=i),l>o&&(l=o),o>u&&(u=o);else if(7!==r)throw new Error("unknown command "+r)}return[a,l,s,u]},r.prototype.toGeoJSON=function(e,t,n){for(var i=this.extent*Math.pow(2,n),o=this.extent*e,a=this.extent*t,s=this.loadGeometry(),l=r.types[this.type],u=0;u>3;t=1===n?e.readString():2===n?e.readFloat():3===n?e.readDouble():4===n?e.readVarint64():5===n?e.readVarint():6===n?e.readSVarint():7===n?e.readBoolean():null}return t}var o=e("./vectortilefeature.js");t.exports=r,r.prototype.feature=function(e){if(0>e||e>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[e];var t=this._pbf.readVarint()+this._pbf.pos;return new o(this._pbf,t,this.extent,this._keys,this._values)}},{"./vectortilefeature.js":194}],196:[function(e,t,r){"use strict";function n(e,t,r){var n=s[0],i=s[1];return e[0]<=n.x+r&&t[0]<=n.x+r||e[0]>=i.x-r&&t[0]>=i.x-r||e[1]>=n.y-r&&t[1]>=n.y-r||e[1]<=i.y+r&&t[1]<=i.y+r?!0:!1 -}var i=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0}),r.outsideTile=n;var o=e("../geo"),a=i(o),s=[{x:0,y:0},{x:a["default"].tile_scale,y:-a["default"].tile_scale}];r.tile_bounds=s;var l=[0,0,1,1];r.default_uvs=l},{"../geo":201,"babel-runtime/helpers/interop-require-default":23}],197:[function(e,t,r){"use strict";function n(e,t,r,n,a){var s=n.texcoord_index,l=n.position_index,u=n.shape_index,c=n.offset_index,f=a.quad,h=a.quad_scale,d=a.offset,p=a.angle,m=a.texcoord_scale,g=a.texcoord_normalize,v=f[0]/2,_=f[1]/2,y=[[-v,-_],[v,-_],[v,_],[-v,-_],[v,_],[-v,_]],b=void 0;if(s){g=g||1;var x=m||o.default_uvs,w=i(x,4),A=w[0],T=w[1],k=w[2],E=w[3];b=[[A,T],[k,T],[k,E],[A,T],[k,E],[A,E]]}for(var S=e.length,R=0;S>R;R++)for(var M=e[R],j=0;6>j;j++)s&&(r[s+0]=b[j][0]*g,r[s+1]=b[j][1]*g),r[l+0]=M[0],r[l+1]=M[1],r[u+0]=y[j][0],r[u+1]=y[j][1],r[u+2]=p,r[u+3]=h,r[c+0]=d[0],r[c+1]=d[1],t.addVertex(r)}var i=e("babel-runtime/helpers/sliced-to-array")["default"];Object.defineProperty(r,"__esModule",{value:!0}),r.buildQuadsForPoints=n;var o=e("./common")},{"./common":196,"babel-runtime/helpers/sliced-to-array":24}],198:[function(e,t,r){"use strict";function n(e,t,r,n){var i=n.texcoord_index,s=n.texcoord_scale,l=n.texcoord_normalize;if(i){l=l||1;var c=s||h.default_uvs,f=a(c,4),d=f[0],p=f[1],m=f[2],g=f[3]}for(var v=e.length,_=0;v>_;_++){var y=e[_];if(i)var b=u["default"].findBoundingBox(y),x=a(b,4),w=x[0],A=x[1],T=x[2],k=x[3],E=T-w,S=k-A,R=(m-d)/E,M=(g-p)/S;for(var j=o(y),P=j.length,z=0;P>z;z++){var N=j[z];r[0]=N[0],r[1]=N[1],i&&(r[i+0]=((N[0]-w)*R+d)*l,r[i+1]=((N[1]-A)*M+p)*l),t.addVertex(r)}}}function i(e,t,r,i,o,s,l,u,c){var d=c.remove_tile_edges,p=c.tile_edge_tolerance,g=c.texcoord_index,v=c.texcoord_scale,_=c.texcoord_normalize,y=c.winding,b=t+(i||0),x=t+r;if(s[2]=x,n(e,o,s,{texcoord_index:g,texcoord_scale:v,texcoord_normalize:_}),g){_=_||1;var w=v||h.default_uvs,A=a(w,4),T=A[0],k=A[1],E=A[2],S=A[3],R=[[T,S],[T,k],[E,k],[E,k],[E,S],[T,S]]}for(var M=e.length,j=0;M>j;j++)for(var P=e[j],z=0;z$)){var C=[0,0],G=[0,0],B=[0,0],q=[0,0],V=[0,0],W=[0,0],H=!1,X=!0;d(U);for(var Z=0;$>Z;Z++){if(X=$>Z+1,H)C=G,q=v["default"].normalize(v["default"].perp(C,D[Z]));else if(0===Z&&s===!0){var Y=!0;l&&b.outsideTile(D[Z],D[$-2],u)&&(Y=!1),Y&&(C=D[$-2],q=v["default"].normalize(v["default"].perp(C,D[Z])),H=!0)}if(G=D[Z],X?B=D[Z+1]:s===!0&&(B=D[1],X=!0),X&&(W=v["default"].normalize(v["default"].perp(G,B)),l&&b.outsideTile(G,B,u)))V=v["default"].normalize(v["default"].perp(C,G)),H&&(a(G,V,U.texcoords&&v["default"].length(v["default"].sub(G,C)),U),U.num_pairs++,d(U)),H=!1;else{if(H)if(X){V=v["default"].normalize(v["default"].add(q,W));var J=2/(1+Math.abs(v["default"].dot(q,V)));V=v["default"].mult(V,J*J)}else V=v["default"].normalize(v["default"].perp(C,G));else{if(!X)continue;W=v["default"].normalize(v["default"].perp(G,B)),V=W}(H||X)&&(0!==Z||H||s||f(G,V,R,!0,U),0===M&&v["default"].lengthSq(V)>j&&(M=A.bevel),0!==M&&H&&X?c([C,G,B],[q,V,W],M,U):a(G,V,U.texcoords&&v["default"].length(v["default"].sub(G,C)),U),X&&U.num_pairs++,H=!0)}}d(U),s||f(G,V,R,!1,U)}}}}function i(e,t){var r=void 0,n=void 0;for(r=0;ru)){d(c);var f=v["default"].set(t),p=[0,0],m=v["default"].angleBetween(t,n),g=m/u;if(l||(g*=-1),c.texcoords)var _=v["default"].set(i),y=v["default"].div(v["default"].sub(s,i),u);o(e,r,a,c),o(e,f,i,c);for(var b=0;u>b;b++)p=v["default"].normalize(f),f=v["default"].rot(v["default"].normalize(f),g),c.texcoords&&(_=v["default"].add(_,y)),o(e,f,_,c);for(var x=0;u>x;x++)l?(h(x+2,c),h(0,c),h(x+1,c)):(h(x+1,c),h(0,c),h(x+2,c));c.vertices=[],c.scalingVecs&&(c.scalingVecs=[]),c.texcoords&&(c.texcoords=[])}}function l(e,t,r,n,i,a,s,l,u){d(u),o(e,r,a,u),o(e,t,i,u),o(e,n,s,u),l?(h(2,u),h(0,u),h(1,u)):(h(1,u),h(0,u),h(2,u)),u.vertices=[],u.scalingVecs&&(u.scalingVecs=[]),u.texcoords&&(u.texcoords=[])}function u(e,t,r,n,i,a,s,l){d(l);var u=v["default"].set(t),c=[0,0];if(l.texcoords)var f=v["default"].set(n),p=v["default"].div(v["default"].sub(a,n),4);var m=.78539816339;s||(m*=-1),o(e,x,i,l),o(e,u,n,l);for(var g=0;4>g;g++){if(c=v["default"].normalize(u),u=v["default"].rot(v["default"].normalize(u),m),0===g||2===g){var _=2/(1+Math.abs(v["default"].dot(c,u)));u=v["default"].mult(u,_*_)}l.texcoords&&(f=v["default"].add(f,p)),1!==g&&o(e,u,f,l)}for(var y=0;3>y;y++)s?(h(y+2,l),h(0,l),h(y+1,l)):(h(y+1,l),h(0,l),h(y+2,l));l.vertices=[],l.scalingVecs&&(l.scalingVecs=[]),l.texcoords&&(l.texcoords=[])}function c(e,t,r,n){var i,a,u,c=v["default"].signed_area(e[0],e[1],e[2])>0,f=t[0],h=v["default"].neg(t[1]),d=t[2];n.texcoords&&(n.total_dist+=v["default"].length(v["default"].sub(e[1],e[0]))*n.v_scale,i=[n.max_u,n.total_dist],u=[n.min_u,n.total_dist],a=i),c?(o(e[1],f,i,n),o(e[1],h,u,n)):(f=v["default"].neg(t[0]),h=t[1],d=v["default"].neg(t[2]),n.texcoords&&(i=[n.min_u,n.total_dist],u=[n.max_u,n.total_dist],a=i),o(e[1],h,u,n),o(e[1],f,i,n)),1===r?l(e[1],f,h,d,i,u,a,c,n):r>1&&s(e[1],f,h,d,i,u,a,c,r,n),c?(o(e[1],d,a,n),o(e[1],h,u,n)):(o(e[1],h,u,n),o(e[1],d,a,n))}function f(e,t,r,n,i){if(!(1>r)){var o,a,l;i.texcoords&&(l=[i.min_u+(i.max_u-i.min_u)/2,i.total_dist],o=[i.min_u,i.total_dist],a=[i.max_u,i.total_dist]),2===r?u(e,v["default"].neg(t),t,o,l,a,n,i):s(e,v["default"].neg(t),x,t,o,l,a,n,2*r,i)}}function h(e,t){var r=t.vertex_data,n=t.vertex_template,i=t.half_width,o=t.vertices,a=t.scaling_index,s=t.scaling_normalize,l=t.scalingVecs,u=t.texcoord_index,c=t.texcoords,f=t.texcoord_normalize;e>=o.length||(n[0]=o[e][0],n[1]=o[e][1],u&&(n[u+0]=c[e][0]*f,n[u+1]=c[e][1]*f),a&&(n[a+0]=l[e][0]*s,n[a+1]=l[e][1]*s,n[a+2]=i),r.addVertex(n))}function d(e){for(var t=0;t180||-180>e)&&(e=((e+180)%360+360)%360-180),e},o.transformGeometry=function(e,t){null!=e&&("Point"===e.type?t(e.coordinates):"LineString"===e.type||"MultiPoint"===e.type?e.coordinates.forEach(t):"Polygon"===e.type||"MultiLineString"===e.type?e.coordinates.forEach(function(e){return e.forEach(t)}):"MultiPolygon"===e.type&&e.coordinates.forEach(function(e){e.forEach(function(e){return e.forEach(t)})}))},o.boxIntersect=function(e,t){return!(t.sw.x>e.ne.x||t.ne.xe.ne.y||t.ne.ya;a++){var s=e[0][a];s[0]r&&(r=s[0]),s[1]>i&&(i=s[1])}return[t,n,r,i]},o.geometryType=function(e){return"Polygon"===e||"MultiPolygon"===e?"polygon":"LineString"===e||"MultiLineString"===e?"line":"Point"===e||"MultiPoint"===e?"point":void 0},o.centroid=function(e){for(var t=e.length,r=[0,0],n=0;nn;n++){var i=e[n],o=e[n+1];t+=i[0]*o[1]-o[0]*i[1]}return t+=e[r-1][0]*e[0][1]-e[0][0]*e[r-1][1]},o.polygonArea=function(e){return Math.abs(o.signedPolygonAreaSum(e))/2},o.multiPolygonArea=function(e){for(var t=0,r=0;r0?"CW":0>t?"CCW":void 0},o.enforceWinding=function(e,t){var r=void 0;if("Polygon"===e.type)r=[e.coordinates];else{if("MultiPolygon"!==e.type)return e;r=e.coordinates}for(var n=0;n=2&&l.length<=4?r.push({type:"vec"+l.length,method:l.length+"fv",name:o,value:l,key:s,uniforms:e}):l.length>4&&r.push({type:"float[]",method:"1fv",name:o+"[0]",value:l,key:s,uniforms:e});else if("string"==typeof l[0])for(a=0;a=2&&l[0].length<=4)for(a=0;a=2&&t.length<=4?r="vec"+t.length:(r="float",n=t.length):"string"==typeof t[0]?(r="sampler2D",n=t.length):Array.isArray(t[0])&&"number"==typeof t[0][0]?(t[0].length>=2&&t[0].length<=4&&(r="vec"+t[0].length),n=t[0].length):"object"==typeof t[0]&&(r="_type_"+o,n=t.length,a+=i.defineStruct(r,t[0],o)+"\n"):"boolean"==typeof t?r="bool":"string"==typeof t?r="sampler2D":"object"==typeof t&&(r="_type_"+o,a+=i.defineStruct(r,t,o)+"\n");var s="";return s+=r+" "+e,n&&(s+="["+n+"]"),s+=";\n",{variable:s,structs:a}},i.defineStruct=function(e,t){var r=arguments.length<=2||void 0===arguments[2]?null:arguments[2],n="struct "+e+" {\n",o="";for(var a in t){var s=i.defineVariable(a,t[a],r);n+=" "+s.variable,o+=s.structs}return n+="};\n",n=o+n},i.defineUniform=function(e,t){var r=i.defineVariable(e,t);return r=r.structs+"uniform "+r.variable},i.isUniformDefined=function(e,t){var r=new RegExp("uniform[^;]+(?:{[\\s\\S]*})?[^;]*\\b"+e+"\\b","g");return t.match(r)?!0:!1},i.isSymbolReferenced=function(e,t){var r=new RegExp("\\b"+e+"\\b","g");return t.search(r)>=0?!0:!1},i.expandVec3=function(e){var t=arguments.length<=1||void 0===arguments[1]?1:arguments[1],r=void 0;return r=Array.isArray(e)&&2===e.length?[].concat(n(e),[t]).map(parseFloat):[e,e,e].map(parseFloat),r&&r.every(function(e){return"number"==typeof e&&!isNaN(e)})?r:void 0},i.expandVec4=function(e){var t=arguments.length<=1||void 0===arguments[1]?1:arguments[1],r=void 0;return r=Array.isArray(e)&&3===e.length?[].concat(n(e),[t]).map(parseFloat):[e,e,e,t].map(parseFloat),r&&r.every(function(e){return"number"==typeof e&&!isNaN(e)})?r:void 0},t.exports=r["default"]},{"babel-runtime/helpers/to-consumable-array":25}],206:[function(e,t,r){"use strict";var n=e("babel-runtime/helpers/create-class")["default"],i=e("babel-runtime/helpers/class-call-check")["default"];Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(t,r){i(this,e),r(t),this.value=t,this.setup=r}return n(e,[{key:"set",value:function(e){JSON.stringify(this.value)!==JSON.stringify(e)&&(this.setup(e),this.value=e)}}],[{key:"initialize",value:function(t){e.defaults={},e.defaults.culling=!0,e.defaults.culling_face=t.BACK,e.defaults.blending=!1,e.defaults.blending_src=t.ONE_MINUS_SRC_ALPHA,e.defaults.blending_dst=t.ONE_MINUS_SRC_ALPHA,e.defaults.blending_src_alpha=t.ONE,e.defaults.blending_dst_alpha=t.ONE_MINUS_SRC_ALPHA,e.defaults.depth_write=!0,e.defaults.depth_test=!0,e.defaults.depth_func=t.LESS,e.culling=new e({cull:e.defaults.culling,face:e.defaults.culling_face},function(e){e.cull?(t.enable(t.CULL_FACE),t.cullFace(e.face)):t.disable(t.CULL_FACE)}),e.blending=new e({blend:e.defaults.blending,src:e.defaults.blending_src,dst:e.defaults.blending_dst,src_alpha:e.defaults.blending_src_alpha,dst_alpha:e.defaults.blending_dst_alpha},function(e){e.blend?(t.enable(t.BLEND),e.src_alpha&&e.dst_alpha?t.blendFuncSeparate(e.src,e.dst,e.src_alpha,e.dst_alpha):t.blendFunc(e.src,e.dst)):t.disable(t.BLEND)}),e.depth_write=new e({depth_write:e.defaults.depth_write},function(e){t.depthMask(e.depth_write)}),e.depth_test=new e({depth_test:e.defaults.depth_test,depth_func:e.defaults.depth_func},function(e){e.depth_test?(t.enable(t.DEPTH_TEST),t.depthFunc(e.depth_func)):t.disable(t.DEPTH_TEST)})}}]),e}();r["default"]=o,t.exports=r["default"]},{"babel-runtime/helpers/class-call-check":18,"babel-runtime/helpers/create-class":19}],207:[function(e,t,r){"use strict";var n=e("babel-runtime/helpers/create-class")["default"],i=e("babel-runtime/helpers/class-call-check")["default"],o=e("babel-runtime/helpers/to-consumable-array")["default"],a=e("babel-runtime/core-js/object/assign")["default"],s=e("babel-runtime/core-js/get-iterator")["default"],l=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0});var u=e("./glsl"),c=l(u),f=e("./texture"),h=l(f),d=e("./extensions"),p=l(d),m=e("loglevel"),g=l(m),v=e("strip-comments"),_=l(v),y=e("gl-shader-errors"),b=l(y),x=function(){function e(t,r,n,o){i(this,e),o=o||{},this.gl=t,this.program=null,this.compiled=!1,this.compiling=!1,this.error=null,this.defines=a({},o.defines||{}),this.blocks=a({},o.blocks||{}),this.block_scopes=a({},o.block_scopes||{}),this.extensions=o.extensions||[],this.dependent_uniforms=o.uniforms,this.uniforms={},this.attribs={},this.vertex_source=r,this.fragment_source=n,this.id=e.id++,e.programs[this.id]=this,this.name=o.name}return n(e,[{key:"destroy",value:function(){this.gl.useProgram(null),this.gl.deleteProgram(this.program),this.program=null,this.uniforms={},this.attribs={},delete e.programs[this.id],this.compiled=!1}},{key:"use",value:function(){this.compiled&&(e.current!==this&&this.gl.useProgram(this.program),e.current=this)}},{key:"compile",value:function(){if(this.compiling)throw new Error("ShaderProgram.compile(): skipping for "+this.id+" ("+this.name+") because already compiling");this.compiling=!0,this.compiled=!1,this.error=null,this.computed_vertex_source=this.vertex_source,this.computed_fragment_source=this.fragment_source;var t,r=this.checkExtensions(),n=this.buildDefineList(),i=this.buildShaderBlockList();for(var o in i){var a=i[o];if(a&&(!Array.isArray(a)||0!==a.length)){t=new RegExp("^\\s*#pragma\\s+tangram:\\s+"+o+"\\s*$","m");var l=this.computed_vertex_source.match(t),u=this.computed_fragment_source.match(t);if(null!=l||null!=u){var c="";a.forEach(function(e){var t=e.scope+", "+e.key+", "+e.num;c+="\n// tangram-block-start: "+t+"\n",c+=e.source,c+="\n// tangram-block-end: "+t+"\n"}),null!=l&&(this.computed_vertex_source=this.computed_vertex_source.replace(t,c)),null!=u&&(this.computed_fragment_source=this.computed_fragment_source.replace(t,c)),n["TANGRAM_BLOCK_"+o.replace(/[\s-]+/g,"_").toUpperCase()]=!0}}}t=new RegExp("^\\s*#pragma.*$","gm"),this.computed_vertex_source=this.computed_vertex_source.replace(t,""),this.computed_fragment_source=this.computed_fragment_source.replace(t,""),this.ensureUniforms(this.dependent_uniforms);var f=this.name?this.name+" / id "+this.id:"id "+this.id,h="// Program: "+f+"\n",d="",p=this.gl.getShaderPrecisionFormat(this.gl.FRAGMENT_SHADER,this.gl.HIGH_FLOAT);d=p&&p.precision>0?"precision highp float;\n":"precision mediump float;\n",n.TANGRAM_VERTEX_SHADER=!0,n.TANGRAM_FRAGMENT_SHADER=!1,this.computed_vertex_source=h+d+e.buildDefineString(n)+this.computed_vertex_source,n.TANGRAM_VERTEX_SHADER=!1,n.TANGRAM_FRAGMENT_SHADER=!0,this.computed_fragment_source=e.buildExtensionString(r)+h+d+e.buildDefineString(n)+this.computed_fragment_source;try{this.program=e.updateProgram(this.gl,this.program,this.computed_vertex_source,this.computed_fragment_source),this.compiled=!0,this.compiling=!1}catch(m){if(this.program=null,this.compiled=!1,this.compiling=!1,this.error=m,"vertex"===m.type||"fragment"===m.type){this.shader_errors=m.errors;var g=!0,v=!1,_=void 0;try{for(var y,b=s(this.shader_errors);!(g=(y=b.next()).done);g=!0){var x=y.value;x.type=m.type,x.block=this.block(m.type,x.line)}}catch(w){v=!0,_=w}finally{try{!g&&b["return"]&&b["return"]()}finally{if(v)throw _}}}throw new Error("ShaderProgram.compile(): program "+this.id+" ("+this.name+") error:",m)}this.use(),this.refreshUniforms(),this.refreshAttributes()}},{key:"buildDefineList",value:function(){var t,r={};for(t in e.defines)r[t]=e.defines[t];for(t in this.defines)r[t]=this.defines[t];return r}},{key:"buildShaderBlockList",value:function(){var t=void 0,r={};for(t in e.blocks)if(r[t]=[],Array.isArray(e.blocks[t])){var n;(n=r[t]).push.apply(n,o(e.blocks[t].map(function(e,r){return{key:t,source:e,num:r,scope:"ShaderProgram"}})))}else r[t]=[{key:t,source:e.blocks[t],num:0,scope:"ShaderProgram"}];for(t in this.blocks)if(r[t]=r[t]||[],Array.isArray(this.blocks[t]))for(var i=this.block_scopes&&this.block_scopes[t]||[],a=null,s=0,l=0;l0&&(this.computed_vertex_source=i.join("\n")+this.computed_vertex_source),o.length>0&&(this.computed_fragment_source=o.join("\n")+this.computed_fragment_source)}}},{key:"setUniforms",value:function(e){var t=arguments.length<=1||void 0===arguments[1]?!0:arguments[1];if(this.compiled){t&&(this.texture_unit=0);var r=c["default"].parseUniforms(e),n=!0,i=!1,o=void 0;try{for(var a,l=s(r);!(n=(a=l.next()).done);n=!0){var u=a.value;"sampler2D"===u.type?this.setTextureUniform(u.name,u.value):this.uniform(u.method,u.name,u.value)}}catch(f){i=!0,o=f}finally{try{!n&&l["return"]&&l["return"]()}finally{if(i)throw o}}}}},{key:"saveUniforms",value:function(e){var t=e||this.uniforms;for(var r in t){var n=this.uniforms[r];n&&(n.saved_value=n.value)}this.saved_texture_unit=this.texture_unit||0}},{key:"restoreUniforms",value:function(e){var t=e||this.uniforms;for(var r in t){var n=this.uniforms[r];n&&n.saved_value&&(n.value=n.saved_value,this.updateUniform(r))}this.texture_unit=this.saved_texture_unit||0}},{key:"setTextureUniform",value:function(e,t){var r=h["default"].textures[t]; -return null==r?void g["default"].warn("Can't find texture '"+t+"'"):(r.bind(this.texture_unit),this.uniform("1i",e,this.texture_unit),void this.texture_unit++)}},{key:"uniform",value:function t(e,r){if(this.compiled){this.uniforms[r]=this.uniforms[r]||{};var t=this.uniforms[r];t.name=r,void 0===t.location&&(t.location=this.gl.getUniformLocation(this.program,r)),t.method="uniform"+e;for(var n=arguments.length,i=Array(n>2?n-2:0),o=2;n>o;o++)i[o-2]=arguments[o];t.value=i,this.updateUniform(r)}}},{key:"updateUniform",value:function(e){if(this.compiled){var t=this.uniforms[e];t&&null!=t.location&&(this.use(),this.gl[t.method].apply(this.gl,[t.location].concat(t.value)))}}},{key:"refreshUniforms",value:function(){if(this.compiled)for(var e in this.uniforms)this.uniforms[e].location=this.gl.getUniformLocation(this.program,e),this.updateUniform(e)}},{key:"refreshAttributes",value:function(){this.attribs={}}},{key:"attribute",value:function(e){if(this.compiled){var t=this.attribs[e]=this.attribs[e]||{};return null!=t.location?t:(t.name=e,t.location=this.gl.getAttribLocation(this.program,e),t)}}},{key:"source",value:function(e){return"vertex"===e?this.computed_vertex_source:"fragment"===e?this.computed_fragment_source:void 0}},{key:"lines",value:function(e){var t=this.source(e);return t?t.split("\n"):[]}},{key:"line",value:function(e,t){var r=this.lines(e);return r?r[t]:void 0}},{key:"block",value:function r(e,t){for(var n=this.lines(e),r=void 0,i=0;t>i&&i1?r={scope:a[1],name:a[2],num:a[3]}:(a=o.match(/\/\/ tangram-block-end: ([A-Za-z0-9_-]+), ([A-Za-z0-9_-]+), (\d+)/),a&&a.length>1&&(r=null)),r&&(r.line=null==r.line?-1:r.line+1,r.source=o)}return r}},{key:"checkExtensions",value:function(){var e=[],t=!0,r=!1,n=void 0;try{for(var i,o=s(this.extensions);!(t=(i=o.next()).done);t=!0){var a=i.value,l=p["default"](this.gl,a),u="TANGRAM_EXTENSION_"+a;this.defines[u]=null!=l,l?e.push(a):g["default"].debug("Could not enable extension '"+a+"'")}}catch(c){r=!0,n=c}finally{try{!t&&o["return"]&&o["return"]()}finally{if(r)throw n}}return e}}]),e}();r["default"]=x,x.id=0,x.programs={},x.current=null,x.defines={},x.blocks={},x.buildDefineString=function(e){var t="";for(var r in e)e[r]!==!1&&(t+="boolean"==typeof e[r]&&e[r]===!0?"#define "+r+"\n":"number"==typeof e[r]&&Math.floor(e[r])===e[r]?"#define "+r+" "+e[r].toFixed(1)+"\n":"#define "+r+" "+e[r]+"\n");return t},x.buildExtensionString=function(e){e=e||[];var t="",r=!0,n=!1,i=void 0;try{for(var o,a=s(e);!(r=(o=a.next()).done);r=!0){var l=o.value;t+="#ifdef GL_"+l+"\n#extension GL_"+l+" : enable\n#endif\n"}}catch(u){n=!0,i=u}finally{try{!r&&a["return"]&&a["return"]()}finally{if(n)throw i}}return t},x.addBlock=function(e){var t;x.blocks[e]=x.blocks[e]||[];for(var r=arguments.length,n=Array(r>1?r-1:0),i=1;r>i;i++)n[i-1]=arguments[i];(t=x.blocks[e]).push.apply(t,n)},x.removeBlock=function(e){x.blocks[e]=[]},x.replaceBlock=function(e){x.removeBlock(e);for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;t>n;n++)r[n-1]=arguments[n];x.addBlock.apply(x,[e].concat(r))},x.updateProgram=function(e,t,r,n){try{var i=x.createShader(e,r,e.VERTEX_SHADER),o=x.createShader(e,n,e.FRAGMENT_SHADER)}catch(a){throw g["default"].error(a.message),a}if(e.useProgram(null),null!=t)for(var s=e.getAttachedShaders(t),l=0;lR;R++)for(var M=e[R],j=0;6>j;j++)s&&(r[s+0]=b[j][0]*g,r[s+1]=b[j][1]*g),r[l+0]=M[0],r[l+1]=M[1],r[u+0]=y[j][0],r[u+1]=y[j][1],r[u+2]=p,r[u+3]=h,r[c+0]=d[0],r[c+1]=d[1],t.addVertex(r)}var i=e("babel-runtime/helpers/sliced-to-array")["default"];Object.defineProperty(r,"__esModule",{value:!0}),r.buildQuadsForPoints=n;var o=e("./common")},{"./common":196,"babel-runtime/helpers/sliced-to-array":24}],198:[function(e,t,r){"use strict";function n(e,t,r,n){var i=n.texcoord_index,s=n.texcoord_scale,l=n.texcoord_normalize;if(i){l=l||1;var c=s||h.default_uvs,f=a(c,4),d=f[0],p=f[1],m=f[2],g=f[3]}for(var v=e.length,_=0;v>_;_++){var y=e[_];if(i)var b=u["default"].findBoundingBox(y),x=a(b,4),w=x[0],A=x[1],T=x[2],k=x[3],E=T-w,S=k-A,R=(m-d)/E,M=(g-p)/S;for(var j=o(y),P=j.length,z=0;P>z;z++){var N=j[z];r[0]=N[0],r[1]=N[1],i&&(r[i+0]=((N[0]-w)*R+d)*l,r[i+1]=((N[1]-A)*M+p)*l),t.addVertex(r)}}}function i(e,t,r,i,o,s,l,u,c){var d=c.remove_tile_edges,p=c.tile_edge_tolerance,g=c.texcoord_index,v=c.texcoord_scale,_=c.texcoord_normalize,y=c.winding,b=t+(i||0),x=t+r;if(s[2]=x,n(e,o,s,{texcoord_index:g,texcoord_scale:v,texcoord_normalize:_}),g){_=_||1;var w=v||h.default_uvs,A=a(w,4),T=A[0],k=A[1],E=A[2],S=A[3],R=[[T,S],[T,k],[E,k],[E,k],[E,S],[T,S]]}for(var M=e.length,j=0;M>j;j++)for(var P=e[j],z=0;z$)){var C=[0,0],G=[0,0],B=[0,0],q=[0,0],V=[0,0],W=[0,0],H=!1,X=!0;d(U);for(var Z=0;$>Z;Z++){if(X=$>Z+1,H)C=G,q=v["default"].normalize(v["default"].perp(C,D[Z]));else if(0===Z&&s===!0){var Y=!0;l&&b.outsideTile(D[Z],D[$-2],u)&&(Y=!1),Y&&(C=D[$-2],q=v["default"].normalize(v["default"].perp(C,D[Z])),H=!0)}if(G=D[Z],X?B=D[Z+1]:s===!0&&(B=D[1],X=!0),X&&(W=v["default"].normalize(v["default"].perp(G,B)),l&&b.outsideTile(G,B,u)))V=v["default"].normalize(v["default"].perp(C,G)),H&&(a(G,V,U.texcoords&&v["default"].length(v["default"].sub(G,C)),U),U.num_pairs++,d(U)),H=!1;else{if(H)if(X){V=v["default"].normalize(v["default"].add(q,W));var J=2/(1+Math.abs(v["default"].dot(q,V)));V=v["default"].mult(V,J*J)}else V=v["default"].normalize(v["default"].perp(C,G));else{if(!X)continue;W=v["default"].normalize(v["default"].perp(G,B)),V=W}(H||X)&&(0!==Z||H||s||f(G,V,R,!0,U),0===M&&v["default"].lengthSq(V)>j&&(M=A.bevel),0!==M&&H&&X?c([C,G,B],[q,V,W],M,U):a(G,V,U.texcoords&&v["default"].length(v["default"].sub(G,C)),U),X&&U.num_pairs++,H=!0)}}d(U),s||f(G,V,R,!1,U)}}}}function i(e,t){var r=void 0,n=void 0;for(r=0;ru)){d(c);var f=v["default"].set(t),p=[0,0],m=v["default"].angleBetween(t,n),g=m/u;if(l||(g*=-1),c.texcoords)var _=v["default"].set(i),y=v["default"].div(v["default"].sub(s,i),u);o(e,r,a,c),o(e,f,i,c);for(var b=0;u>b;b++)p=v["default"].normalize(f),f=v["default"].rot(v["default"].normalize(f),g),c.texcoords&&(_=v["default"].add(_,y)),o(e,f,_,c);for(var x=0;u>x;x++)l?(h(x+2,c),h(0,c),h(x+1,c)):(h(x+1,c),h(0,c),h(x+2,c));c.vertices=[],c.scalingVecs&&(c.scalingVecs=[]),c.texcoords&&(c.texcoords=[])}}function l(e,t,r,n,i,a,s,l,u){d(u),o(e,r,a,u),o(e,t,i,u),o(e,n,s,u),l?(h(2,u),h(0,u),h(1,u)):(h(1,u),h(0,u),h(2,u)),u.vertices=[],u.scalingVecs&&(u.scalingVecs=[]),u.texcoords&&(u.texcoords=[])}function u(e,t,r,n,i,a,s,l){d(l);var u=v["default"].set(t),c=[0,0];if(l.texcoords)var f=v["default"].set(n),p=v["default"].div(v["default"].sub(a,n),4);var m=.78539816339;s||(m*=-1),o(e,x,i,l),o(e,u,n,l);for(var g=0;4>g;g++){if(c=v["default"].normalize(u),u=v["default"].rot(v["default"].normalize(u),m),0===g||2===g){var _=2/(1+Math.abs(v["default"].dot(c,u)));u=v["default"].mult(u,_*_)}l.texcoords&&(f=v["default"].add(f,p)),1!==g&&o(e,u,f,l)}for(var y=0;3>y;y++)s?(h(y+2,l),h(0,l),h(y+1,l)):(h(y+1,l),h(0,l),h(y+2,l));l.vertices=[],l.scalingVecs&&(l.scalingVecs=[]),l.texcoords&&(l.texcoords=[])}function c(e,t,r,n){var i,a,u,c=v["default"].signed_area(e[0],e[1],e[2])>0,f=t[0],h=v["default"].neg(t[1]),d=t[2];n.texcoords&&(n.total_dist+=v["default"].length(v["default"].sub(e[1],e[0]))*n.v_scale,i=[n.max_u,n.total_dist],u=[n.min_u,n.total_dist],a=i),c?(o(e[1],f,i,n),o(e[1],h,u,n)):(f=v["default"].neg(t[0]),h=t[1],d=v["default"].neg(t[2]),n.texcoords&&(i=[n.min_u,n.total_dist],u=[n.max_u,n.total_dist],a=i),o(e[1],h,u,n),o(e[1],f,i,n)),1===r?l(e[1],f,h,d,i,u,a,c,n):r>1&&s(e[1],f,h,d,i,u,a,c,r,n),c?(o(e[1],d,a,n),o(e[1],h,u,n)):(o(e[1],h,u,n),o(e[1],d,a,n))}function f(e,t,r,n,i){if(!(1>r)){var o,a,l;i.texcoords&&(l=[i.min_u+(i.max_u-i.min_u)/2,i.total_dist],o=[i.min_u,i.total_dist],a=[i.max_u,i.total_dist]),2===r?u(e,v["default"].neg(t),t,o,l,a,n,i):s(e,v["default"].neg(t),x,t,o,l,a,n,2*r,i)}}function h(e,t){var r=t.vertex_data,n=t.vertex_template,i=t.half_width,o=t.vertices,a=t.scaling_index,s=t.scaling_normalize,l=t.scalingVecs,u=t.texcoord_index,c=t.texcoords,f=t.texcoord_normalize;e>=o.length||(n[0]=o[e][0],n[1]=o[e][1],u&&(n[u+0]=c[e][0]*f,n[u+1]=c[e][1]*f),a&&(n[a+0]=l[e][0]*s,n[a+1]=l[e][1]*s,n[a+2]=i),r.addVertex(n))}function d(e){for(var t=0;t180||-180>e)&&(e=((e+180)%360+360)%360-180),e},o.transformGeometry=function(e,t){null!=e&&("Point"===e.type?t(e.coordinates):"LineString"===e.type||"MultiPoint"===e.type?e.coordinates.forEach(t):"Polygon"===e.type||"MultiLineString"===e.type?e.coordinates.forEach(function(e){return e.forEach(t)}):"MultiPolygon"===e.type&&e.coordinates.forEach(function(e){e.forEach(function(e){return e.forEach(t)})}))},o.boxIntersect=function(e,t){return!(t.sw.x>e.ne.x||t.ne.xe.ne.y||t.ne.ya;a++){var s=e[0][a];s[0]r&&(r=s[0]),s[1]>i&&(i=s[1])}return[t,n,r,i]},o.geometryType=function(e){return"Polygon"===e||"MultiPolygon"===e?"polygon":"LineString"===e||"MultiLineString"===e?"line":"Point"===e||"MultiPoint"===e?"point":void 0},o.centroid=function(e){for(var t=e.length,r=[0,0],n=0;nn;n++){var i=e[n],o=e[n+1];t+=i[0]*o[1]-o[0]*i[1]}return t+=e[r-1][0]*e[0][1]-e[0][0]*e[r-1][1]},o.polygonArea=function(e){return Math.abs(o.signedPolygonAreaSum(e))/2},o.multiPolygonArea=function(e){for(var t=0,r=0;r0?"CW":0>t?"CCW":void 0},o.enforceWinding=function(e,t){var r=void 0;if("Polygon"===e.type)r=[e.coordinates];else{if("MultiPolygon"!==e.type)return e;r=e.coordinates}for(var n=0;n=2&&l.length<=4?r.push({type:"vec"+l.length,method:l.length+"fv",name:o,value:l,key:s,uniforms:e}):l.length>4&&r.push({type:"float[]",method:"1fv",name:o+"[0]",value:l,key:s,uniforms:e});else if("string"==typeof l[0])for(a=0;a=2&&l[0].length<=4)for(a=0;a=2&&t.length<=4?r="vec"+t.length:(r="float",n=t.length):"string"==typeof t[0]?(r="sampler2D",n=t.length):Array.isArray(t[0])&&"number"==typeof t[0][0]?(t[0].length>=2&&t[0].length<=4&&(r="vec"+t[0].length),n=t[0].length):"object"==typeof t[0]&&(r="_type_"+o,n=t.length,a+=i.defineStruct(r,t[0],o)+"\n"):"boolean"==typeof t?r="bool":"string"==typeof t?r="sampler2D":"object"==typeof t&&(r="_type_"+o,a+=i.defineStruct(r,t,o)+"\n");var s="";return s+=r+" "+e,n&&(s+="["+n+"]"),s+=";\n",{variable:s,structs:a}},i.defineStruct=function(e,t){var r=arguments.length<=2||void 0===arguments[2]?null:arguments[2],n="struct "+e+" {\n",o="";for(var a in t){var s=i.defineVariable(a,t[a],r);n+=" "+s.variable,o+=s.structs}return n+="};\n",n=o+n},i.defineUniform=function(e,t){var r=i.defineVariable(e,t);return r=r.structs+"uniform "+r.variable},i.isUniformDefined=function(e,t){var r=new RegExp("uniform[^;]+(?:{[\\s\\S]*})?[^;]*\\b"+e+"\\b","g");return t.match(r)?!0:!1},i.isSymbolReferenced=function(e,t){var r=new RegExp("\\b"+e+"\\b","g");return t.search(r)>=0?!0:!1},i.expandVec3=function(e){var t=arguments.length<=1||void 0===arguments[1]?1:arguments[1],r=void 0;return r=Array.isArray(e)&&2===e.length?[].concat(n(e),[t]).map(parseFloat):[e,e,e].map(parseFloat),r&&r.every(function(e){return"number"==typeof e&&!isNaN(e)})?r:void 0},i.expandVec4=function(e){var t=arguments.length<=1||void 0===arguments[1]?1:arguments[1],r=void 0;return r=Array.isArray(e)&&3===e.length?[].concat(n(e),[t]).map(parseFloat):[e,e,e,t].map(parseFloat),r&&r.every(function(e){return"number"==typeof e&&!isNaN(e)})?r:void 0},t.exports=r["default"]},{"babel-runtime/helpers/to-consumable-array":25}],206:[function(e,t,r){"use strict";var n=e("babel-runtime/helpers/create-class")["default"],i=e("babel-runtime/helpers/class-call-check")["default"];Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(t,r){i(this,e),r(t),this.value=t,this.setup=r}return n(e,[{key:"set",value:function(e){JSON.stringify(this.value)!==JSON.stringify(e)&&(this.setup(e),this.value=e)}}],[{key:"initialize",value:function(t){e.defaults={},e.defaults.culling=!0,e.defaults.culling_face=t.BACK,e.defaults.blending=!1,e.defaults.blending_src=t.ONE_MINUS_SRC_ALPHA,e.defaults.blending_dst=t.ONE_MINUS_SRC_ALPHA,e.defaults.blending_src_alpha=t.ONE,e.defaults.blending_dst_alpha=t.ONE_MINUS_SRC_ALPHA,e.defaults.depth_write=!0,e.defaults.depth_test=!0,t.depthFunc(t.LESS),e.culling=new e({cull:e.defaults.culling,face:e.defaults.culling_face},function(e){e.cull?(t.enable(t.CULL_FACE),t.cullFace(e.face)):t.disable(t.CULL_FACE)}),e.blending=new e({blend:e.defaults.blending,src:e.defaults.blending_src,dst:e.defaults.blending_dst,src_alpha:e.defaults.blending_src_alpha,dst_alpha:e.defaults.blending_dst_alpha},function(e){e.blend?(t.enable(t.BLEND),e.src_alpha&&e.dst_alpha?t.blendFuncSeparate(e.src,e.dst,e.src_alpha,e.dst_alpha):t.blendFunc(e.src,e.dst)):t.disable(t.BLEND)}),e.depth_write=new e({depth_write:e.defaults.depth_write},function(e){t.depthMask(e.depth_write)}),e.depth_test=new e({depth_test:e.defaults.depth_test},function(e){e.depth_test?t.enable(t.DEPTH_TEST):t.disable(t.DEPTH_TEST)})}}]),e}();r["default"]=o,t.exports=r["default"]},{"babel-runtime/helpers/class-call-check":18,"babel-runtime/helpers/create-class":19}],207:[function(e,t,r){"use strict";var n=e("babel-runtime/helpers/create-class")["default"],i=e("babel-runtime/helpers/class-call-check")["default"],o=e("babel-runtime/helpers/to-consumable-array")["default"],a=e("babel-runtime/core-js/object/assign")["default"],s=e("babel-runtime/core-js/get-iterator")["default"],l=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0});var u=e("./glsl"),c=l(u),f=e("./texture"),h=l(f),d=e("./extensions"),p=l(d),m=e("loglevel"),g=l(m),v=e("strip-comments"),_=l(v),y=e("gl-shader-errors"),b=l(y),x=function(){function e(t,r,n,o){i(this,e),o=o||{},this.gl=t,this.program=null,this.compiled=!1,this.compiling=!1,this.error=null,this.defines=a({},o.defines||{}),this.blocks=a({},o.blocks||{}),this.block_scopes=a({},o.block_scopes||{}),this.extensions=o.extensions||[],this.dependent_uniforms=o.uniforms,this.uniforms={},this.attribs={},this.vertex_source=r,this.fragment_source=n,this.id=e.id++,e.programs[this.id]=this,this.name=o.name}return n(e,[{key:"destroy",value:function(){this.gl.useProgram(null),this.gl.deleteProgram(this.program),this.program=null,this.uniforms={},this.attribs={},delete e.programs[this.id],this.compiled=!1}},{key:"use",value:function(){this.compiled&&(e.current!==this&&this.gl.useProgram(this.program),e.current=this)}},{key:"compile",value:function(){if(this.compiling)throw new Error("ShaderProgram.compile(): skipping for "+this.id+" ("+this.name+") because already compiling");this.compiling=!0,this.compiled=!1,this.error=null,this.computed_vertex_source=this.vertex_source,this.computed_fragment_source=this.fragment_source;var t,r=this.checkExtensions(),n=this.buildDefineList(),i=this.buildShaderBlockList();for(var o in i){var a=i[o];if(a&&(!Array.isArray(a)||0!==a.length)){t=new RegExp("^\\s*#pragma\\s+tangram:\\s+"+o+"\\s*$","m");var l=this.computed_vertex_source.match(t),u=this.computed_fragment_source.match(t);if(null!=l||null!=u){var c="";a.forEach(function(e){var t=e.scope+", "+e.key+", "+e.num;c+="\n// tangram-block-start: "+t+"\n",c+=e.source,c+="\n// tangram-block-end: "+t+"\n"}),null!=l&&(this.computed_vertex_source=this.computed_vertex_source.replace(t,c)),null!=u&&(this.computed_fragment_source=this.computed_fragment_source.replace(t,c)),n["TANGRAM_BLOCK_"+o.replace(/[\s-]+/g,"_").toUpperCase()]=!0}}}t=new RegExp("^\\s*#pragma.*$","gm"),this.computed_vertex_source=this.computed_vertex_source.replace(t,""),this.computed_fragment_source=this.computed_fragment_source.replace(t,""),this.ensureUniforms(this.dependent_uniforms);var f=this.name?this.name+" / id "+this.id:"id "+this.id,h="// Program: "+f+"\n",d="",p=this.gl.getShaderPrecisionFormat(this.gl.FRAGMENT_SHADER,this.gl.HIGH_FLOAT);d=p&&p.precision>0?"precision highp float;\n":"precision mediump float;\n",n.TANGRAM_VERTEX_SHADER=!0,n.TANGRAM_FRAGMENT_SHADER=!1,this.computed_vertex_source=h+d+e.buildDefineString(n)+this.computed_vertex_source,n.TANGRAM_VERTEX_SHADER=!1,n.TANGRAM_FRAGMENT_SHADER=!0,this.computed_fragment_source=e.buildExtensionString(r)+h+d+e.buildDefineString(n)+this.computed_fragment_source;try{this.program=e.updateProgram(this.gl,this.program,this.computed_vertex_source,this.computed_fragment_source),this.compiled=!0,this.compiling=!1}catch(m){if(this.program=null,this.compiled=!1,this.compiling=!1,this.error=m,"vertex"===m.type||"fragment"===m.type){this.shader_errors=m.errors;var g=!0,v=!1,_=void 0;try{for(var y,b=s(this.shader_errors);!(g=(y=b.next()).done);g=!0){var x=y.value;x.type=m.type,x.block=this.block(m.type,x.line)}}catch(w){v=!0,_=w}finally{try{!g&&b["return"]&&b["return"]()}finally{if(v)throw _}}}throw new Error("ShaderProgram.compile(): program "+this.id+" ("+this.name+") error:",m)}this.use(),this.refreshUniforms(),this.refreshAttributes()}},{key:"buildDefineList",value:function(){var t,r={};for(t in e.defines)r[t]=e.defines[t];for(t in this.defines)r[t]=this.defines[t];return r}},{key:"buildShaderBlockList",value:function(){var t=void 0,r={};for(t in e.blocks)if(r[t]=[],Array.isArray(e.blocks[t])){var n;(n=r[t]).push.apply(n,o(e.blocks[t].map(function(e,r){return{key:t,source:e,num:r,scope:"ShaderProgram"}})))}else r[t]=[{key:t,source:e.blocks[t],num:0,scope:"ShaderProgram"}];for(t in this.blocks)if(r[t]=r[t]||[],Array.isArray(this.blocks[t]))for(var i=this.block_scopes&&this.block_scopes[t]||[],a=null,s=0,l=0;l0&&(this.computed_vertex_source=i.join("\n")+this.computed_vertex_source),o.length>0&&(this.computed_fragment_source=o.join("\n")+this.computed_fragment_source)}}},{key:"setUniforms",value:function(e){var t=arguments.length<=1||void 0===arguments[1]?!0:arguments[1];if(this.compiled){t&&(this.texture_unit=0);var r=c["default"].parseUniforms(e),n=!0,i=!1,o=void 0;try{for(var a,l=s(r);!(n=(a=l.next()).done);n=!0){var u=a.value;"sampler2D"===u.type?this.setTextureUniform(u.name,u.value):this.uniform(u.method,u.name,u.value)}}catch(f){i=!0,o=f}finally{try{!n&&l["return"]&&l["return"]()}finally{if(i)throw o}}}}},{key:"saveUniforms",value:function(e){var t=e||this.uniforms;for(var r in t){var n=this.uniforms[r];n&&(n.saved_value=n.value)}this.saved_texture_unit=this.texture_unit||0}},{key:"restoreUniforms",value:function(e){var t=e||this.uniforms;for(var r in t){var n=this.uniforms[r];n&&n.saved_value&&(n.value=n.saved_value,this.updateUniform(r))}this.texture_unit=this.saved_texture_unit||0}},{key:"setTextureUniform",value:function(e,t){var r=h["default"].textures[t];return null==r?void g["default"].warn("Can't find texture '"+t+"'"):(r.bind(this.texture_unit),this.uniform("1i",e,this.texture_unit),void this.texture_unit++) +}},{key:"uniform",value:function t(e,r){if(this.compiled){this.uniforms[r]=this.uniforms[r]||{};var t=this.uniforms[r];t.name=r,void 0===t.location&&(t.location=this.gl.getUniformLocation(this.program,r)),t.method="uniform"+e;for(var n=arguments.length,i=Array(n>2?n-2:0),o=2;n>o;o++)i[o-2]=arguments[o];t.value=i,this.updateUniform(r)}}},{key:"updateUniform",value:function(e){if(this.compiled){var t=this.uniforms[e];t&&null!=t.location&&(this.use(),this.gl[t.method].apply(this.gl,[t.location].concat(t.value)))}}},{key:"refreshUniforms",value:function(){if(this.compiled)for(var e in this.uniforms)this.uniforms[e].location=this.gl.getUniformLocation(this.program,e),this.updateUniform(e)}},{key:"refreshAttributes",value:function(){this.attribs={}}},{key:"attribute",value:function(e){if(this.compiled){var t=this.attribs[e]=this.attribs[e]||{};return null!=t.location?t:(t.name=e,t.location=this.gl.getAttribLocation(this.program,e),t)}}},{key:"source",value:function(e){return"vertex"===e?this.computed_vertex_source:"fragment"===e?this.computed_fragment_source:void 0}},{key:"lines",value:function(e){var t=this.source(e);return t?t.split("\n"):[]}},{key:"line",value:function(e,t){var r=this.lines(e);return r?r[t]:void 0}},{key:"block",value:function r(e,t){for(var n=this.lines(e),r=void 0,i=0;t>i&&i1?r={scope:a[1],name:a[2],num:a[3]}:(a=o.match(/\/\/ tangram-block-end: ([A-Za-z0-9_-]+), ([A-Za-z0-9_-]+), (\d+)/),a&&a.length>1&&(r=null)),r&&(r.line=null==r.line?-1:r.line+1,r.source=o)}return r}},{key:"checkExtensions",value:function(){var e=[],t=!0,r=!1,n=void 0;try{for(var i,o=s(this.extensions);!(t=(i=o.next()).done);t=!0){var a=i.value,l=p["default"](this.gl,a),u="TANGRAM_EXTENSION_"+a;this.defines[u]=null!=l,l?e.push(a):g["default"].debug("Could not enable extension '"+a+"'")}}catch(c){r=!0,n=c}finally{try{!t&&o["return"]&&o["return"]()}finally{if(r)throw n}}return e}}]),e}();r["default"]=x,x.id=0,x.programs={},x.current=null,x.defines={},x.blocks={},x.buildDefineString=function(e){var t="";for(var r in e)e[r]!==!1&&(t+="boolean"==typeof e[r]&&e[r]===!0?"#define "+r+"\n":"number"==typeof e[r]&&Math.floor(e[r])===e[r]?"#define "+r+" "+e[r].toFixed(1)+"\n":"#define "+r+" "+e[r]+"\n");return t},x.buildExtensionString=function(e){e=e||[];var t="",r=!0,n=!1,i=void 0;try{for(var o,a=s(e);!(r=(o=a.next()).done);r=!0){var l=o.value;t+="#ifdef GL_"+l+"\n#extension GL_"+l+" : enable\n#endif\n"}}catch(u){n=!0,i=u}finally{try{!r&&a["return"]&&a["return"]()}finally{if(n)throw i}}return t},x.addBlock=function(e){var t;x.blocks[e]=x.blocks[e]||[];for(var r=arguments.length,n=Array(r>1?r-1:0),i=1;r>i;i++)n[i-1]=arguments[i];(t=x.blocks[e]).push.apply(t,n)},x.removeBlock=function(e){x.blocks[e]=[]},x.replaceBlock=function(e){x.removeBlock(e);for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;t>n;n++)r[n-1]=arguments[n];x.addBlock.apply(x,[e].concat(r))},x.updateProgram=function(e,t,r,n){try{var i=x.createShader(e,r,e.VERTEX_SHADER),o=x.createShader(e,n,e.FRAGMENT_SHADER)}catch(a){throw g["default"].error(a.message),a}if(e.useProgram(null),null!=t)for(var s=e.getAttachedShaders(t),l=0;l0?void v["default"].error("Texture '"+this.name+"': destroying texture with retain count of '"+this.retain_count+"'"):void(this.valid&&(this.gl.deleteTexture(this.texture),this.texture=null,delete this.data,this.data=null,delete e.textures[this.name],this.valid=!1,v["default"].trace("destroying Texture "+this.name)))}},{key:"retain",value:function(){this.retain_count++}},{key:"release",value:function(){this.retain_count<=0&&v["default"].error("Texture '"+this.name+"': releasing texture with retain count of '"+this.retain_count+"'"),this.retain_count--,this.retain_count<=0&&this.destroy()}},{key:"bind",value:function(t){this.valid&&("number"==typeof t&&e.activeUnit!==t&&(this.gl.activeTexture(this.gl.TEXTURE0+t),e.activeUnit=t),e.activeTexture!==this.texture&&(this.gl.bindTexture(this.gl.TEXTURE_2D,this.texture),e.activeTexture=this.texture))}},{key:"load",value:function(e){var t=this;return e?(this.loading=null,"string"==typeof e.url?(this.config_type="url",this.setUrl(e.url,e)):e.element?(this.config_type="element",this.setElement(e.element,e)):e.data&&e.width&&e.height&&(this.config_type="data",this.setData(e.width,e.height,e.data,e)),this.loading=this.loading&&this.loading.then(function(){return t.calculateSprites(),t})||a.resolve(this),this.loading):this.loading||a.resolve(this)}},{key:"setUrl",value:function(t){var r=this,n=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return this.valid?(e.base_url&&(t=f["default"].addBaseURL(t,e.base_url)),this.url=f["default"].cacheBusterForUrl(t),this.source=this.url,this.source_type="url",this.loading=new a(function(t){var i=new Image;i.onload=function(){try{r.setElement(i,n)}catch(o){r.loaded=!1,v["default"].warn("Texture '"+r.name+"': failed to load url: '"+r.source+"'",o,n),e.trigger("warning",{message:"Failed to load texture from "+r.source,error:o,texture:n})}r.loaded=!0,t(r)},i.onerror=function(i){r.loaded=!1,v["default"].warn("Texture '"+r.name+"': failed to load url: '"+r.source+"'",i,n),e.trigger("warning",{message:"Failed to load texture from "+r.source,error:i,texture:n}),t(r)},i.crossOrigin="anonymous",i.src=r.source}),this.loading):void 0}},{key:"setData",value:function(e,t,r){var n=arguments.length<=3||void 0===arguments[3]?{}:arguments[3];return this.width=e,this.height=t,this.source=r,this.source_type="data",this.update(n),this.setFiltering(n),this.loaded=!0,this.loading=a.resolve(this),this.loading}},{key:"setElement",value:function(t,r){var n=t;if("string"==typeof t&&(t=document.querySelector(t)),t instanceof HTMLCanvasElement||t instanceof HTMLImageElement||t instanceof HTMLVideoElement)this.source=t,this.source_type="element",this.update(r),this.setFiltering(r);else{this.loaded=!1;var i="the 'element' parameter (`element: "+JSON.stringify(n)+"`) must be a CSS ";i+="selector string, or a , or